From c0132a4564e3320f3a34adf7f8a6c6573f2019af Mon Sep 17 00:00:00 2001 From: Thomas Cannon Date: Sat, 13 Aug 2016 15:28:02 -0400 Subject: [PATCH 01/18] WIP of Camera Module, working on styling now --- config/assets.yml | 4 ++ content/docking.html | 28 +++++++++ static/images/camera-test.jpeg | Bin 0 -> 7780 bytes static/js/camera_feed.js | 107 +++++++++++++++++++++++++++++++++ static/js/telemachus.js | 21 +++++++ static/stylesheets/docking.css | 69 +++++++++++++++++++++ 6 files changed, 229 insertions(+) create mode 100644 static/images/camera-test.jpeg create mode 100644 static/js/camera_feed.js diff --git a/config/assets.yml b/config/assets.yml index 08cf352..9b0cc8d 100644 --- a/config/assets.yml +++ b/config/assets.yml @@ -101,6 +101,9 @@ javascripts: - &maneuver_node_editor - static/js/maneuver_node_editor.js + - &camera_feed + - static/js/camera_feed.js + 3dmap: - *app_core - *3d_map @@ -122,6 +125,7 @@ javascripts: - *app_core - *navball - *docking_map + - *camera_feed ground-track: - *app_core diff --git a/content/docking.html b/content/docking.html index bde02e4..d0e3337 100644 --- a/content/docking.html +++ b/content/docking.html @@ -10,6 +10,26 @@
+ +
+
+ +
+

+ +
+
+
+ +
+
@@ -73,4 +93,12 @@

Docking Info

window.sasButtonIndicator = new ButtonIndicator(datalink, 'sas', 'v.sasValue') window.throttleGauge = new ThrottleGauge(window.datalink, 'throttle') + window.cameraFeed = new CameraFeed(window.datalink, { + cameraList: $('camera-list'), + cameraListContainer: $('camera-selector-container'), + showCameraList: $('show-camera-list'), + cameraName: $('camera-name'), + cameraImage: $('camera-image') + }) + <% end %> \ No newline at end of file diff --git a/static/images/camera-test.jpeg b/static/images/camera-test.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..c47c27006ecd78f0edafd7a4586cdb0cedbf8aa9 GIT binary patch literal 7780 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 literal 0 HcmV?d00001 diff --git a/static/js/camera_feed.js b/static/js/camera_feed.js new file mode 100644 index 0000000..cbaed92 --- /dev/null +++ b/static/js/camera_feed.js @@ -0,0 +1,107 @@ +var CameraFeed = Class.create({ + initialize: function(datalink, options){ + this.datalink = datalink + + this.options = options || {} + this.cameraData = [] + this.selectedCameraURL = "" + this.selectedCameraName = "" + this.initializeDatalink() + this.initializeObservers() + this.initializeImageRefresh() + }, + + initializeDatalink: function(){ + setInterval(function(){ + this.datalink.getCameraList(this.updateCameraList.bind(this)) + }.bind(this), 1000); + }, + + initializeImageRefresh: function(){ + setInterval(function(){ + if(!this.hasSelectedCamera()){ return } + this.options.cameraImage.src = this.options.cameraImage.getAttribute('data-base-url') + "?" + Math.floor((Math.random() * 100) + 1) + }.bind(this), 1000); + }, + + initializeObservers: function(){ + this.options.cameraList.observe('click', function(event){ + var clickedButton = event.findElement('button'); + if (clickedButton) { + this.selectCameraAndHideList( + clickedButton.getAttribute("data-image-name"), + clickedButton.getAttribute("data-image-url") + ) + } + }.bind(this)) + + this.options.showCameraList.observe('click', this.showCameraList.bind(this)) + }, + + hasSelectedCamera: function(){ + return this.selectedCameraURL != "" + }, + + setSelectedCamera: function(name, image_url){ + this.selectedCameraName = name + this.selectedCameraURL = image_url + this.options.cameraName.update(this.selectedCameraName) + this.options.cameraImage.setAttribute('src', this.selectedCameraURL) + this.options.cameraImage.setAttribute('data-base-url',this.selectedCameraURL) + }, + + selectCameraAndHideList: function(name, image_url){ + this.setSelectedCamera(name, image_url) + this.hideCameraList() + }, + + hideCameraList: function(){ + this.options.cameraListContainer.addClassName('hidden') + }, + + showCameraList: function(){ + this.options.cameraListContainer.removeClassName('hidden') + }, + + updateCameraList: function(data){ + // console.log(data) + var sortedData = data.sort(function(a,b){ + //the flight camera should always be on top + if(a.name == "TelemachusFlightCamera"){ + return -1 + } + + //otherwise, compare normally + return a.name.localeCompare(b.name); + }); + + //clear existing child nodes in camera list + while (this.options.cameraList.hasChildNodes()){ + this.options.cameraList.removeChild(this.options.cameraList.lastChild); + } + + for (var i = 0; i < sortedData.length; i++) { + var cameraObject = sortedData[i] + + if(!this.hasSelectedCamera()){ + this.setSelectedCamera(cameraObject.name, cameraObject.url) + } + + var docFragment = document.createDocumentFragment() + var li = document.createElement('li') + var selectCamera = document.createElement("button") + selectCamera.setAttribute('data-image-name', cameraObject.name) + selectCamera.setAttribute('data-image-url', cameraObject.url) + if(this.selectedCameraURL == cameraObject.url){ + selectCamera.addClassName("selected") + } + selectCamera.update(cameraObject.name) + + li.appendChild(selectCamera) + docFragment.appendChild(li) + this.options.cameraList.appendChild(docFragment) + } + + this.cameraData = sortedData + } +}) \ No newline at end of file diff --git a/static/js/telemachus.js b/static/js/telemachus.js index 7369657..0f65162 100644 --- a/static/js/telemachus.js +++ b/static/js/telemachus.js @@ -116,6 +116,27 @@ var Telemachus = Class.create({ }) }, + cameraURL: function(){ + return "http://" + this.host + ":" + this.port + "/telemachus/cameras" + }, + + getCameraList: function(callback){ + var newData = [{"name":"RPMCamera-ExtCam8","type":"RasterPropMonitor","url":"../assets/images/camera-test.jpeg"},{"name":"RPMCamera-ExtCam2","type":"RasterPropMonitor","url":"../assets/images/camera-test.jpeg"},{"name":"RPMCamera-ExtCam4","type":"RasterPropMonitor","url":"../assets/images/camera-test.jpeg"},{"name":"RPMCamera-ExtCam1","type":"RasterPropMonitor","url":"../assets/images/camera-test.jpeg"},{"name":"RPMCamera-ExtCam5","type":"RasterPropMonitor","url":"../assets/images/camera-test.jpeg"},{"name":"RPMCamera-ExtCam3","type":"RasterPropMonitor","url":"../assets/images/camera-test.jpeg"},{"name":"RPMCamera-ExtCam6","type":"RasterPropMonitor","url":"../assets/images/camera-test.jpeg"},{"name":"RPMCamera-ExtCam7","type":"RasterPropMonitor","url":"../assets/images/camera-test.jpeg"},{"name":"TelemachusFlightCamera","type":"FlightCamera","url":"../assets/images/camera-test.jpeg"}] + var oldData = [{"name":"RPMCamera-ExtCam8","type":"RasterPropMonitor","url":"http://10.211.55.5:8085/telemachus/cameras/RPMCamera-ExtCam8"},{"name":"RPMCamera-ExtCam2","type":"RasterPropMonitor","url":"http://10.211.55.5:8085/telemachus/cameras/RPMCamera-ExtCam2"},{"name":"RPMCamera-ExtCam4","type":"RasterPropMonitor","url":"http://10.211.55.5:8085/telemachus/cameras/RPMCamera-ExtCam4"},{"name":"RPMCamera-ExtCam1","type":"RasterPropMonitor","url":"http://10.211.55.5:8085/telemachus/cameras/RPMCamera-ExtCam1"},{"name":"RPMCamera-ExtCam5","type":"RasterPropMonitor","url":"http://10.211.55.5:8085/telemachus/cameras/RPMCamera-ExtCam5"},{"name":"RPMCamera-ExtCam3","type":"RasterPropMonitor","url":"http://10.211.55.5:8085/telemachus/cameras/RPMCamera-ExtCam3"},{"name":"RPMCamera-ExtCam6","type":"RasterPropMonitor","url":"http://10.211.55.5:8085/telemachus/cameras/RPMCamera-ExtCam6"},{"name":"RPMCamera-ExtCam7","type":"RasterPropMonitor","url":"http://10.211.55.5:8085/telemachus/cameras/RPMCamera-ExtCam7"},{"name":"TelemachusFlightCamera","type":"FlightCamera","url":"http://10.211.55.5:8085/telemachus/cameras/TelemachusFlightCamera"}] + callback(newData) + return + + new Ajax.Request(this.cameraURL(), { + method: "get", + // parameters: params, + onSuccess: function(response){ + var data = JSON.parse(response.responseText) + callback(data) + }.bind(this), + onException: this.notifyIfLOS.bind(this) + }) + }, + getOrbitalBodies: function(){ return { "Sun" : { diff --git a/static/stylesheets/docking.css b/static/stylesheets/docking.css index 8f51c51..6fb792d 100644 --- a/static/stylesheets/docking.css +++ b/static/stylesheets/docking.css @@ -91,4 +91,73 @@ html, body, #content{ #docking-info{ margin-left: 5px; margin-right: 5px; +} + +.camera .readout-display{ + min-width: 300px; + min-height: 350px; + position: relative; + overflow: hidden; +} + +.camera .readout-display h2{ + margin-bottom: 5px; + margin-top: 0px; +} + +.camera .readout-display ul{ + list-style: none; + padding: 0px; + margin-top: 0px; + margin-bottom: 0px; +} + +.camera .readout-display ul li{ + margin-bottom: 5px; +} + +.camera .readout-display ul button{ + width: 100%; + cursor: pointer; +} + +.camera .readout-display ul button.selected, .camera .readout-display ul button:active{ + color: #642607; + background-color: #FD7E23; +} + +.camera .camera-selector{ + height: 100%; + overflow-y: scroll; +} + +.camera .camera-selector:not(.hidden) ~ .camera-display { + /*display: none;*/ +} + +.camera .camera-display img{ + width: 300px; + height: 300px; + border: 2px solid #FD7E23; + border-radius: 3px; +} + +.camera .camera-selector{ + background-color: #3A1604; + position: absolute; + right: 0; + left: 0; + margin-left: 5px; + margin-right: 5px; + + transform: translateY(0%); + + -webkit-transition: all 600ms cubic-bezier(0.785, 0.135, 0.15, 0.86); + transition: all 600ms cubic-bezier(0.785, 0.135, 0.15, 0.86); +} + +.camera .camera-selector.hidden{ + display: inherit; + transform: translateY(110%); + -webkit-transform: translateY(110%); } \ No newline at end of file From 1bf9e519603b975316bf1fe6052da90d98c2ef1a Mon Sep 17 00:00:00 2001 From: Thomas Cannon Date: Sat, 13 Aug 2016 15:48:30 -0400 Subject: [PATCH 02/18] Add scanlines to camera snapshot in camera module --- content/docking.html | 4 ++- static/stylesheets/docking.css | 60 +++++++++++++++++++++++++++++++++- 2 files changed, 62 insertions(+), 2 deletions(-) diff --git a/content/docking.html b/content/docking.html index d0e3337..f2f33ba 100644 --- a/content/docking.html +++ b/content/docking.html @@ -23,7 +23,9 @@

Cameras

- +
+ +
diff --git a/static/stylesheets/docking.css b/static/stylesheets/docking.css index 6fb792d..3c99c40 100644 --- a/static/stylesheets/docking.css +++ b/static/stylesheets/docking.css @@ -135,7 +135,8 @@ html, body, #content{ /*display: none;*/ } -.camera .camera-display img{ +.camera .camera-image-wrapper{ + display: inline-block; width: 300px; height: 300px; border: 2px solid #FD7E23; @@ -149,6 +150,7 @@ html, body, #content{ left: 0; margin-left: 5px; margin-right: 5px; + z-index: 3; transform: translateY(0%); @@ -160,4 +162,60 @@ html, body, #content{ display: inherit; transform: translateY(110%); -webkit-transform: translateY(110%); +} + +.scanlines { + position: relative; + overflow: hidden; +} +.scanlines:before, .scanlines:after { + display: block; + pointer-events: none; + content: ''; + position: absolute; +} +.scanlines:before { + width: 100%; + height: 2px; + z-index: 1; + background: rgba(0, 0, 0, 0.3); + opacity: 0.75; + -webkit-animation: scanline 6s linear infinite; + animation: scanline 6s linear infinite; +} +.scanlines:after { + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1; + background: -webkit-linear-gradient(top, transparent 50%, rgba(0, 0, 0, 0.3) 51%); + background: linear-gradient(to bottom, transparent 50%, rgba(0, 0, 0, 0.3) 51%); + background-size: 100% 4px; + -webkit-animation: none; + animation: none; +} + +/* ANIMATE UNIQUE SCANLINE */ +@-webkit-keyframes scanline { + 0% { + -webkit-transform: translate3d(0, 200000%, 0); + transform: translate3d(0, 200000%, 0); + } +} +@keyframes scanline { + 0% { + -webkit-transform: translate3d(0, 200000%, 0); + transform: translate3d(0, 200000%, 0); + } +} +@-webkit-keyframes scanlines { + 0% { + background-position: 0 50%; + } +} +@keyframes scanlines { + 0% { + background-position: 0 50%; + } } \ No newline at end of file From b27e1bc558143ec673293ceb638668fc46108dbc Mon Sep 17 00:00:00 2001 From: Thomas Cannon Date: Sat, 13 Aug 2016 15:48:45 -0400 Subject: [PATCH 03/18] Make camera names bold in camera selector --- static/stylesheets/docking.css | 1 + 1 file changed, 1 insertion(+) diff --git a/static/stylesheets/docking.css b/static/stylesheets/docking.css index 3c99c40..816f47f 100644 --- a/static/stylesheets/docking.css +++ b/static/stylesheets/docking.css @@ -119,6 +119,7 @@ html, body, #content{ .camera .readout-display ul button{ width: 100%; cursor: pointer; + font-weight: bold; } .camera .readout-display ul button.selected, .camera .readout-display ul button:active{ From 9ad8a0672d5abe36239d970dbd040efcb9044fad Mon Sep 17 00:00:00 2001 From: Thomas Cannon Date: Sat, 13 Aug 2016 16:11:54 -0400 Subject: [PATCH 04/18] Fix display bug when adding readout-display inside a gauge * Don't add a text shadow to elements inside a readout display inside a gauge --- static/stylesheets/application.css | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/static/stylesheets/application.css b/static/stylesheets/application.css index 651dc75..83a7ff8 100644 --- a/static/stylesheets/application.css +++ b/static/stylesheets/application.css @@ -265,6 +265,10 @@ h1{ text-align: center; } +.gauge .readout-display h2{ + text-shadow: none; +} + .readout-display input, .readout-display button, .readout-display select{ border: 2px solid #FD7E23; background-color: #3A1604; From 3c91a5ff2118dfb59a7b9d9b68390964b5acab7f Mon Sep 17 00:00:00 2001 From: Thomas Cannon Date: Sat, 13 Aug 2016 16:12:51 -0400 Subject: [PATCH 05/18] Change behavior of "show camera list" to toggle camera list --- static/js/camera_feed.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/static/js/camera_feed.js b/static/js/camera_feed.js index cbaed92..1d6e46d 100644 --- a/static/js/camera_feed.js +++ b/static/js/camera_feed.js @@ -35,7 +35,7 @@ var CameraFeed = Class.create({ } }.bind(this)) - this.options.showCameraList.observe('click', this.showCameraList.bind(this)) + this.options.showCameraList.observe('click', this.toggleCameraList.bind(this)) }, hasSelectedCamera: function(){ @@ -63,6 +63,10 @@ var CameraFeed = Class.create({ this.options.cameraListContainer.removeClassName('hidden') }, + toggleCameraList: function(){ + this.options.cameraListContainer.toggleClassName('hidden') + }, + updateCameraList: function(data){ // console.log(data) var sortedData = data.sort(function(a,b){ From e859fd5421d6879c4bad1c23d58aae44b9768cc2 Mon Sep 17 00:00:00 2001 From: Thomas Cannon Date: Sat, 13 Aug 2016 16:14:02 -0400 Subject: [PATCH 06/18] Work on styling for "show cameras" button --- content/docking.html | 4 ++-- static/stylesheets/docking.css | 24 ++++++++++++++++++++++++ 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/content/docking.html b/content/docking.html index f2f33ba..8b109e6 100644 --- a/content/docking.html +++ b/content/docking.html @@ -28,8 +28,8 @@

-
- +
+
diff --git a/static/stylesheets/docking.css b/static/stylesheets/docking.css index 816f47f..eefab6e 100644 --- a/static/stylesheets/docking.css +++ b/static/stylesheets/docking.css @@ -93,6 +93,30 @@ html, body, #content{ margin-right: 5px; } +.camera .camera-list-button-wrapper{ + text-align: right; +} + +.camera button#show-camera-list{ + margin-top: 5px; + padding: 3px; + + font-family: 'AeroMatics Display Bold'; + font-size: 17px; + + cursor: pointer; + border: 0px solid #000000; + /*color: hsl(0,0%,90%);*/ + + color: hsla(0,0%,20%,1); + text-shadow: hsla(0,0%,40%,.5) 0 -1px 0, hsla(0,0%,100%,.6) 0 1px 1px; + + /*background: #4A4A4A;*/ + border: 3px solid #4A4A4A; + box-shadow: 0px 2px 4px 0px rgba(0,0,0,0.50); + border-radius: 3px; +} + .camera .readout-display{ min-width: 300px; min-height: 350px; From 55697b7faf718ad610f1061ac56d5f7c36e78b67 Mon Sep 17 00:00:00 2001 From: Thomas Cannon Date: Sat, 13 Aug 2016 16:15:47 -0400 Subject: [PATCH 07/18] Change minimum height of camera module --- static/stylesheets/docking.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/static/stylesheets/docking.css b/static/stylesheets/docking.css index eefab6e..69a5bb8 100644 --- a/static/stylesheets/docking.css +++ b/static/stylesheets/docking.css @@ -119,7 +119,7 @@ html, body, #content{ .camera .readout-display{ min-width: 300px; - min-height: 350px; + min-height: 300px; position: relative; overflow: hidden; } From 065b583d7a61fdce75972e32060c20353690c873 Mon Sep 17 00:00:00 2001 From: Thomas Cannon Date: Sat, 13 Aug 2016 16:20:56 -0400 Subject: [PATCH 08/18] Extract camera module into partial that can be rendered anywhere * Makes it easier to add a camera to any station --- config/assets.yml | 1 + content/docking.html | 22 +---- layouts/camera.html | 21 +++++ layouts/default.html | 1 + static/stylesheets/camera.css | 152 +++++++++++++++++++++++++++++++++ static/stylesheets/docking.css | 150 +------------------------------- 6 files changed, 177 insertions(+), 170 deletions(-) create mode 100644 layouts/camera.html create mode 100644 static/stylesheets/camera.css diff --git a/config/assets.yml b/config/assets.yml index 9b0cc8d..f4548cd 100644 --- a/config/assets.yml +++ b/config/assets.yml @@ -170,6 +170,7 @@ stylesheets: app: - static/stylesheets/chartist.min.css - static/stylesheets/leafletksp.css + - static/stylesheets/camera.css - static/stylesheets/application.css 3dmap: - static/stylesheets/3dmap.css diff --git a/content/docking.html b/content/docking.html index 8b109e6..6bea722 100644 --- a/content/docking.html +++ b/content/docking.html @@ -11,27 +11,7 @@
-
-
- -
-

-
- -
-
-
-
- -
-
+ <%= render 'camera' %>
diff --git a/layouts/camera.html b/layouts/camera.html new file mode 100644 index 0000000..b0df4d4 --- /dev/null +++ b/layouts/camera.html @@ -0,0 +1,21 @@ +
+
+ +
+

+
+ +
+
+
+
+ +
+
\ No newline at end of file diff --git a/layouts/default.html b/layouts/default.html index 5484eb8..80755e1 100644 --- a/layouts/default.html +++ b/layouts/default.html @@ -13,6 +13,7 @@ + diff --git a/static/stylesheets/camera.css b/static/stylesheets/camera.css new file mode 100644 index 0000000..8281efe --- /dev/null +++ b/static/stylesheets/camera.css @@ -0,0 +1,152 @@ + +.camera .camera-list-button-wrapper{ + text-align: right; +} + +.camera button#show-camera-list{ + margin-top: 5px; + padding: 3px; + + font-family: 'AeroMatics Display Bold'; + font-size: 17px; + + cursor: pointer; + border: 0px solid #000000; + /*color: hsl(0,0%,90%);*/ + + color: hsla(0,0%,20%,1); + text-shadow: hsla(0,0%,40%,.5) 0 -1px 0, hsla(0,0%,100%,.6) 0 1px 1px; + + /*background: #4A4A4A;*/ + border: 3px solid #4A4A4A; + box-shadow: 0px 2px 4px 0px rgba(0,0,0,0.50); + border-radius: 3px; +} + +.camera .readout-display{ + min-width: 300px; + min-height: 300px; + position: relative; + overflow: hidden; +} + +.camera .readout-display h2{ + margin-bottom: 5px; + margin-top: 0px; +} + +.camera .readout-display ul{ + list-style: none; + padding: 0px; + margin-top: 0px; + margin-bottom: 0px; +} + +.camera .readout-display ul li{ + margin-bottom: 5px; +} + +.camera .readout-display ul button{ + width: 100%; + cursor: pointer; + font-weight: bold; +} + +.camera .readout-display ul button.selected, .camera .readout-display ul button:active{ + color: #642607; + background-color: #FD7E23; +} + +.camera .camera-selector{ + height: 100%; + overflow-y: scroll; +} + +.camera .camera-selector:not(.hidden) ~ .camera-display { + /*display: none;*/ +} + +.camera .camera-image-wrapper{ + display: inline-block; + width: 300px; + height: 300px; + border: 2px solid #FD7E23; + border-radius: 3px; +} + +.camera .camera-selector{ + background-color: #3A1604; + position: absolute; + right: 0; + left: 0; + margin-left: 5px; + margin-right: 5px; + z-index: 3; + + transform: translateY(0%); + + -webkit-transition: all 600ms cubic-bezier(0.785, 0.135, 0.15, 0.86); + transition: all 600ms cubic-bezier(0.785, 0.135, 0.15, 0.86); +} + +.camera .camera-selector.hidden{ + display: inherit; + transform: translateY(110%); + -webkit-transform: translateY(110%); +} + +.scanlines { + position: relative; + overflow: hidden; +} +.scanlines:before, .scanlines:after { + display: block; + pointer-events: none; + content: ''; + position: absolute; +} +.scanlines:before { + width: 100%; + height: 2px; + z-index: 1; + background: rgba(0, 0, 0, 0.3); + opacity: 0.75; + -webkit-animation: scanline 6s linear infinite; + animation: scanline 6s linear infinite; +} +.scanlines:after { + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1; + background: -webkit-linear-gradient(top, transparent 50%, rgba(0, 0, 0, 0.3) 51%); + background: linear-gradient(to bottom, transparent 50%, rgba(0, 0, 0, 0.3) 51%); + background-size: 100% 4px; + -webkit-animation: none; + animation: none; +} + +/* ANIMATE UNIQUE SCANLINE */ +@-webkit-keyframes scanline { + 0% { + -webkit-transform: translate3d(0, 200000%, 0); + transform: translate3d(0, 200000%, 0); + } +} +@keyframes scanline { + 0% { + -webkit-transform: translate3d(0, 200000%, 0); + transform: translate3d(0, 200000%, 0); + } +} +@-webkit-keyframes scanlines { + 0% { + background-position: 0 50%; + } +} +@keyframes scanlines { + 0% { + background-position: 0 50%; + } +} \ No newline at end of file diff --git a/static/stylesheets/docking.css b/static/stylesheets/docking.css index 69a5bb8..72a4273 100644 --- a/static/stylesheets/docking.css +++ b/static/stylesheets/docking.css @@ -93,154 +93,6 @@ html, body, #content{ margin-right: 5px; } -.camera .camera-list-button-wrapper{ - text-align: right; -} - -.camera button#show-camera-list{ - margin-top: 5px; - padding: 3px; - - font-family: 'AeroMatics Display Bold'; - font-size: 17px; - - cursor: pointer; - border: 0px solid #000000; - /*color: hsl(0,0%,90%);*/ - - color: hsla(0,0%,20%,1); - text-shadow: hsla(0,0%,40%,.5) 0 -1px 0, hsla(0,0%,100%,.6) 0 1px 1px; - - /*background: #4A4A4A;*/ - border: 3px solid #4A4A4A; - box-shadow: 0px 2px 4px 0px rgba(0,0,0,0.50); - border-radius: 3px; -} - -.camera .readout-display{ - min-width: 300px; - min-height: 300px; - position: relative; - overflow: hidden; -} - -.camera .readout-display h2{ - margin-bottom: 5px; - margin-top: 0px; -} - -.camera .readout-display ul{ - list-style: none; - padding: 0px; - margin-top: 0px; - margin-bottom: 0px; -} - -.camera .readout-display ul li{ - margin-bottom: 5px; -} - -.camera .readout-display ul button{ - width: 100%; - cursor: pointer; - font-weight: bold; -} - -.camera .readout-display ul button.selected, .camera .readout-display ul button:active{ - color: #642607; - background-color: #FD7E23; -} - -.camera .camera-selector{ - height: 100%; - overflow-y: scroll; -} - -.camera .camera-selector:not(.hidden) ~ .camera-display { - /*display: none;*/ -} - -.camera .camera-image-wrapper{ - display: inline-block; - width: 300px; - height: 300px; - border: 2px solid #FD7E23; - border-radius: 3px; -} - -.camera .camera-selector{ - background-color: #3A1604; - position: absolute; - right: 0; - left: 0; +#camera{ margin-left: 5px; - margin-right: 5px; - z-index: 3; - - transform: translateY(0%); - - -webkit-transition: all 600ms cubic-bezier(0.785, 0.135, 0.15, 0.86); - transition: all 600ms cubic-bezier(0.785, 0.135, 0.15, 0.86); -} - -.camera .camera-selector.hidden{ - display: inherit; - transform: translateY(110%); - -webkit-transform: translateY(110%); -} - -.scanlines { - position: relative; - overflow: hidden; -} -.scanlines:before, .scanlines:after { - display: block; - pointer-events: none; - content: ''; - position: absolute; -} -.scanlines:before { - width: 100%; - height: 2px; - z-index: 1; - background: rgba(0, 0, 0, 0.3); - opacity: 0.75; - -webkit-animation: scanline 6s linear infinite; - animation: scanline 6s linear infinite; -} -.scanlines:after { - top: 0; - right: 0; - bottom: 0; - left: 0; - z-index: 1; - background: -webkit-linear-gradient(top, transparent 50%, rgba(0, 0, 0, 0.3) 51%); - background: linear-gradient(to bottom, transparent 50%, rgba(0, 0, 0, 0.3) 51%); - background-size: 100% 4px; - -webkit-animation: none; - animation: none; -} - -/* ANIMATE UNIQUE SCANLINE */ -@-webkit-keyframes scanline { - 0% { - -webkit-transform: translate3d(0, 200000%, 0); - transform: translate3d(0, 200000%, 0); - } -} -@keyframes scanline { - 0% { - -webkit-transform: translate3d(0, 200000%, 0); - transform: translate3d(0, 200000%, 0); - } -} -@-webkit-keyframes scanlines { - 0% { - background-position: 0 50%; - } -} -@keyframes scanlines { - 0% { - background-position: 0 50%; - } } \ No newline at end of file From dfe63f94eceb09377ccdd61e8037f40e902d3693 Mon Sep 17 00:00:00 2001 From: Thomas Cannon Date: Sat, 13 Aug 2016 17:41:48 -0400 Subject: [PATCH 09/18] enable real data for camera list --- static/js/telemachus.js | 5 ----- 1 file changed, 5 deletions(-) diff --git a/static/js/telemachus.js b/static/js/telemachus.js index 0f65162..b4519da 100644 --- a/static/js/telemachus.js +++ b/static/js/telemachus.js @@ -121,11 +121,6 @@ var Telemachus = Class.create({ }, getCameraList: function(callback){ - var newData = [{"name":"RPMCamera-ExtCam8","type":"RasterPropMonitor","url":"../assets/images/camera-test.jpeg"},{"name":"RPMCamera-ExtCam2","type":"RasterPropMonitor","url":"../assets/images/camera-test.jpeg"},{"name":"RPMCamera-ExtCam4","type":"RasterPropMonitor","url":"../assets/images/camera-test.jpeg"},{"name":"RPMCamera-ExtCam1","type":"RasterPropMonitor","url":"../assets/images/camera-test.jpeg"},{"name":"RPMCamera-ExtCam5","type":"RasterPropMonitor","url":"../assets/images/camera-test.jpeg"},{"name":"RPMCamera-ExtCam3","type":"RasterPropMonitor","url":"../assets/images/camera-test.jpeg"},{"name":"RPMCamera-ExtCam6","type":"RasterPropMonitor","url":"../assets/images/camera-test.jpeg"},{"name":"RPMCamera-ExtCam7","type":"RasterPropMonitor","url":"../assets/images/camera-test.jpeg"},{"name":"TelemachusFlightCamera","type":"FlightCamera","url":"../assets/images/camera-test.jpeg"}] - var oldData = [{"name":"RPMCamera-ExtCam8","type":"RasterPropMonitor","url":"http://10.211.55.5:8085/telemachus/cameras/RPMCamera-ExtCam8"},{"name":"RPMCamera-ExtCam2","type":"RasterPropMonitor","url":"http://10.211.55.5:8085/telemachus/cameras/RPMCamera-ExtCam2"},{"name":"RPMCamera-ExtCam4","type":"RasterPropMonitor","url":"http://10.211.55.5:8085/telemachus/cameras/RPMCamera-ExtCam4"},{"name":"RPMCamera-ExtCam1","type":"RasterPropMonitor","url":"http://10.211.55.5:8085/telemachus/cameras/RPMCamera-ExtCam1"},{"name":"RPMCamera-ExtCam5","type":"RasterPropMonitor","url":"http://10.211.55.5:8085/telemachus/cameras/RPMCamera-ExtCam5"},{"name":"RPMCamera-ExtCam3","type":"RasterPropMonitor","url":"http://10.211.55.5:8085/telemachus/cameras/RPMCamera-ExtCam3"},{"name":"RPMCamera-ExtCam6","type":"RasterPropMonitor","url":"http://10.211.55.5:8085/telemachus/cameras/RPMCamera-ExtCam6"},{"name":"RPMCamera-ExtCam7","type":"RasterPropMonitor","url":"http://10.211.55.5:8085/telemachus/cameras/RPMCamera-ExtCam7"},{"name":"TelemachusFlightCamera","type":"FlightCamera","url":"http://10.211.55.5:8085/telemachus/cameras/TelemachusFlightCamera"}] - callback(newData) - return - new Ajax.Request(this.cameraURL(), { method: "get", // parameters: params, From 794ed232e55d2bf84164814f3443865309886590 Mon Sep 17 00:00:00 2001 From: Thomas Cannon Date: Sat, 13 Aug 2016 17:42:08 -0400 Subject: [PATCH 10/18] Add camera module to appropriate stations, make standalone tool view --- config/assets.yml | 8 ++ content/ascension.html | 10 ++ content/camera.html | 21 ++++ content/landing.html | 15 ++- content/mission-wall.html | 16 ++- content/vessel-overview.html | 21 +++- layouts/default.html | 5 +- static/stylesheets/ascension.css | 16 +++ static/stylesheets/camera.css | 155 ++----------------------- static/stylesheets/camera_module.css | 152 ++++++++++++++++++++++++ static/stylesheets/landing.css | 22 +++- static/stylesheets/mission-wall.css | 35 +++++- static/stylesheets/vessel-overview.css | 20 +++- 13 files changed, 334 insertions(+), 162 deletions(-) create mode 100644 content/camera.html create mode 100644 static/stylesheets/camera_module.css diff --git a/config/assets.yml b/config/assets.yml index f4548cd..903b981 100644 --- a/config/assets.yml +++ b/config/assets.yml @@ -113,6 +113,7 @@ javascripts: - *position_map - *navball - *altitude_tracker + - *camera_feed boost: - *app_core @@ -121,6 +122,10 @@ javascripts: - *burn_planner - *staging_info_table + camera: + - *app_core + - *camera_feed + docking: - *app_core - *navball @@ -136,11 +141,13 @@ javascripts: - *ground_track - *navball - *altitude_tracker + - *camera_feed mission-wall: - *app_core - *ground_track - *3d_map + - *camera_feed navigation: - *app_core @@ -162,6 +169,7 @@ javascripts: vessel-overview: - *app_core - *ground_track + - *camera_feed app: - *app_core diff --git a/content/ascension.html b/content/ascension.html index ba083d8..5f54001 100644 --- a/content/ascension.html +++ b/content/ascension.html @@ -24,6 +24,8 @@ <%= render 'atmospheric_density' %>
+ <%= render 'camera' %> +
@@ -115,4 +117,12 @@ formatter: function(value){ return DataFormatters.velocityString(value) } }, ]) + + window.cameraFeed = new CameraFeed(window.datalink, { + cameraList: $('camera-list'), + cameraListContainer: $('camera-selector-container'), + showCameraList: $('show-camera-list'), + cameraName: $('camera-name'), + cameraImage: $('camera-image') + }) <% end %> \ No newline at end of file diff --git a/content/camera.html b/content/camera.html new file mode 100644 index 0000000..b89ca60 --- /dev/null +++ b/content/camera.html @@ -0,0 +1,21 @@ +--- +title: Camera Feed +--- + +<% content_for :head do %> + +<% end %> + +<%= render 'camera' %> + +<% content_for :dom_loaded do %> + window.datalink.rate = 1000 + + window.cameraFeed = new CameraFeed(window.datalink, { + cameraList: $('camera-list'), + cameraListContainer: $('camera-selector-container'), + showCameraList: $('show-camera-list'), + cameraName: $('camera-name'), + cameraImage: $('camera-image') + }) +<% end %> \ No newline at end of file diff --git a/content/landing.html b/content/landing.html index 8568bea..333933b 100644 --- a/content/landing.html +++ b/content/landing.html @@ -42,8 +42,11 @@
-
- <%= render 'altitude_tracker_chart' %> +
+ <%= render 'camera' %> +
+ <%= render 'altitude_tracker_chart' %> +
<% content_for :dom_loaded do %> @@ -100,4 +103,12 @@ formatter: function(value){ return DataFormatters.velocityString(value) } }, ]) + + window.cameraFeed = new CameraFeed(window.datalink, { + cameraList: $('camera-list'), + cameraListContainer: $('camera-selector-container'), + showCameraList: $('show-camera-list'), + cameraName: $('camera-name'), + cameraImage: $('camera-image') + }) <% end %> \ No newline at end of file diff --git a/content/mission-wall.html b/content/mission-wall.html index 2240509..01e5e71 100644 --- a/content/mission-wall.html +++ b/content/mission-wall.html @@ -14,8 +14,12 @@

Altitude Estimate

-
-
+
+
+
+
+ + <%= render 'camera' %>
<%= render 'orbital_map_shader' %> @@ -29,4 +33,12 @@

Altitude Estimate

window.positionDataFormatter = new PositionDataFormatter(orbitalPositionData, window.datalink) window.OrbitalMap = new OrbitalMap(positionDataFormatter, window.datalink, "orbital-map") + + window.cameraFeed = new CameraFeed(window.datalink, { + cameraList: $('camera-list'), + cameraListContainer: $('camera-selector-container'), + showCameraList: $('show-camera-list'), + cameraName: $('camera-name'), + cameraImage: $('camera-image') + }) <% end %> \ No newline at end of file diff --git a/content/vessel-overview.html b/content/vessel-overview.html index bb15104..117075a 100644 --- a/content/vessel-overview.html +++ b/content/vessel-overview.html @@ -23,12 +23,15 @@
-
- <%= render 'button', :button_id => "rcs", :button_label => "RCS" %> - <%= render 'button', :button_id => "sas", :button_label => "SAS" %> -
+ <%= render 'camera' %> -
+
+
+
+ <%= render 'button', :button_id => "rcs", :button_label => "RCS" %> + <%= render 'button', :button_id => "sas", :button_label => "SAS" %> +
+
@@ -119,4 +122,12 @@

Altitude Estimate

formatter: function(value){ return DataFormatters.velocityString(value) } }, ]) + + window.cameraFeed = new CameraFeed(window.datalink, { + cameraList: $('camera-list'), + cameraListContainer: $('camera-selector-container'), + showCameraList: $('show-camera-list'), + cameraName: $('camera-name'), + cameraImage: $('camera-image') + }) <% end %> \ No newline at end of file diff --git a/layouts/default.html b/layouts/default.html index 80755e1..fdf9573 100644 --- a/layouts/default.html +++ b/layouts/default.html @@ -13,7 +13,7 @@ - + @@ -85,6 +85,9 @@ <%= render 'nav_item', :nav_item => 'ground-track', :nav_title => "Ground Track", :nav_url => '../ground-track/index.html' %> <%= render 'nav_item', :nav_item => 'map', :nav_title => "Orbital Map", :nav_url => '../3dmap/index.html' %> <%= render 'nav_item', :nav_item => 'mission-wall', :nav_title => "Mission Wall", :nav_url => '../mission-wall/index.html' %> + + <%= render 'nav_item', :nav_item => 'camera', :nav_title => "Camera Feed", :nav_url => '../camera/index.html' %> + <%= render 'nav_item', :nav_item => 'staging-analysis', :nav_title => "Staging Analysis", :nav_url => '../staging-analysis/index.html' %> <%= render 'nav_item', :nav_title => "Telemachus Console", :nav_url => '/telemachus/console.html', :id => 'telemachus-console', :nav_item => "telemachus", :image_name => "telemachus-preview.png" %> diff --git a/static/stylesheets/ascension.css b/static/stylesheets/ascension.css index 30df3c9..1ac8d1c 100644 --- a/static/stylesheets/ascension.css +++ b/static/stylesheets/ascension.css @@ -69,3 +69,19 @@ text-align: right; } +.camera{ + height: 250px; + width: 300px; + margin-left: 10px; + margin-right: 10px; +} + +.camera .readout-display{ + min-height: 200px; + min-width: 200px; +} + +.camera .camera-image-wrapper, #camera-image{ + width: 160px; + height: 160px; +} \ No newline at end of file diff --git a/static/stylesheets/camera.css b/static/stylesheets/camera.css index 8281efe..373feea 100644 --- a/static/stylesheets/camera.css +++ b/static/stylesheets/camera.css @@ -1,152 +1,15 @@ - -.camera .camera-list-button-wrapper{ - text-align: right; -} - -.camera button#show-camera-list{ - margin-top: 5px; - padding: 3px; - - font-family: 'AeroMatics Display Bold'; - font-size: 17px; - - cursor: pointer; - border: 0px solid #000000; - /*color: hsl(0,0%,90%);*/ - - color: hsla(0,0%,20%,1); - text-shadow: hsla(0,0%,40%,.5) 0 -1px 0, hsla(0,0%,100%,.6) 0 1px 1px; - - /*background: #4A4A4A;*/ - border: 3px solid #4A4A4A; - box-shadow: 0px 2px 4px 0px rgba(0,0,0,0.50); - border-radius: 3px; +.camera{ + height: 600px; + width: 600px; + margin: auto; } .camera .readout-display{ - min-width: 300px; - min-height: 300px; - position: relative; - overflow: hidden; -} - -.camera .readout-display h2{ - margin-bottom: 5px; - margin-top: 0px; -} - -.camera .readout-display ul{ - list-style: none; - padding: 0px; - margin-top: 0px; - margin-bottom: 0px; -} - -.camera .readout-display ul li{ - margin-bottom: 5px; -} - -.camera .readout-display ul button{ - width: 100%; - cursor: pointer; - font-weight: bold; -} - -.camera .readout-display ul button.selected, .camera .readout-display ul button:active{ - color: #642607; - background-color: #FD7E23; -} - -.camera .camera-selector{ - height: 100%; - overflow-y: scroll; + min-height: 500px; + min-width: 500px; } -.camera .camera-selector:not(.hidden) ~ .camera-display { - /*display: none;*/ -} - -.camera .camera-image-wrapper{ - display: inline-block; - width: 300px; - height: 300px; - border: 2px solid #FD7E23; - border-radius: 3px; -} - -.camera .camera-selector{ - background-color: #3A1604; - position: absolute; - right: 0; - left: 0; - margin-left: 5px; - margin-right: 5px; - z-index: 3; - - transform: translateY(0%); - - -webkit-transition: all 600ms cubic-bezier(0.785, 0.135, 0.15, 0.86); - transition: all 600ms cubic-bezier(0.785, 0.135, 0.15, 0.86); -} - -.camera .camera-selector.hidden{ - display: inherit; - transform: translateY(110%); - -webkit-transform: translateY(110%); -} - -.scanlines { - position: relative; - overflow: hidden; -} -.scanlines:before, .scanlines:after { - display: block; - pointer-events: none; - content: ''; - position: absolute; -} -.scanlines:before { - width: 100%; - height: 2px; - z-index: 1; - background: rgba(0, 0, 0, 0.3); - opacity: 0.75; - -webkit-animation: scanline 6s linear infinite; - animation: scanline 6s linear infinite; -} -.scanlines:after { - top: 0; - right: 0; - bottom: 0; - left: 0; - z-index: 1; - background: -webkit-linear-gradient(top, transparent 50%, rgba(0, 0, 0, 0.3) 51%); - background: linear-gradient(to bottom, transparent 50%, rgba(0, 0, 0, 0.3) 51%); - background-size: 100% 4px; - -webkit-animation: none; - animation: none; -} - -/* ANIMATE UNIQUE SCANLINE */ -@-webkit-keyframes scanline { - 0% { - -webkit-transform: translate3d(0, 200000%, 0); - transform: translate3d(0, 200000%, 0); - } -} -@keyframes scanline { - 0% { - -webkit-transform: translate3d(0, 200000%, 0); - transform: translate3d(0, 200000%, 0); - } -} -@-webkit-keyframes scanlines { - 0% { - background-position: 0 50%; - } -} -@keyframes scanlines { - 0% { - background-position: 0 50%; - } +.camera .camera-image-wrapper, #camera-image{ + width: 500px; + height: 500px; } \ No newline at end of file diff --git a/static/stylesheets/camera_module.css b/static/stylesheets/camera_module.css new file mode 100644 index 0000000..f462442 --- /dev/null +++ b/static/stylesheets/camera_module.css @@ -0,0 +1,152 @@ + +.camera .camera-list-button-wrapper{ + text-align: right; +} + +.camera button#show-camera-list{ + margin-top: 5px; + padding: 3px; + + font-family: 'AeroMatics Display Bold'; + font-size: 17px; + + cursor: pointer; + border: 0px solid #000000; + /*color: hsl(0,0%,90%);*/ + + color: hsla(0,0%,20%,1); + text-shadow: hsla(0,0%,40%,.5) 0 -1px 0, hsla(0,0%,100%,.6) 0 1px 1px; + + /*background: #4A4A4A;*/ + border: 3px solid #4A4A4A; + box-shadow: 0px 2px 4px 0px rgba(0,0,0,0.50); + border-radius: 3px; +} + +.camera .readout-display{ + min-width: 300px; + min-height: 300px; + position: relative; + overflow: hidden; +} + +.camera .readout-display h2{ + margin-bottom: 5px; + margin-top: 0px; +} + +.camera .readout-display ul{ + list-style: none; + padding: 0px; + margin-top: 0px; + margin-bottom: 0px; +} + +.camera .readout-display ul li{ + margin-bottom: 5px; +} + +.camera .readout-display ul button{ + width: 100%; + cursor: pointer; + font-weight: bold; +} + +.camera .readout-display ul button.selected, .camera .readout-display ul button:active{ + color: #642607; + background-color: #FD7E23; +} + +.camera .camera-selector{ + height: 100%; + overflow-y: scroll; +} + +.camera .camera-display { + text-align: center; +} + +.camera .camera-image-wrapper{ + display: inline-block; + width: 300px; + height: 300px; + border: 2px solid #FD7E23; + border-radius: 3px; +} + +.camera .camera-selector{ + background-color: #3A1604; + position: absolute; + right: 0; + left: 0; + margin-left: 5px; + margin-right: 5px; + z-index: 3; + + transform: translateY(0%); + + -webkit-transition: all 600ms cubic-bezier(0.785, 0.135, 0.15, 0.86); + transition: all 600ms cubic-bezier(0.785, 0.135, 0.15, 0.86); +} + +.camera .camera-selector.hidden{ + display: inherit; + transform: translateY(110%); + -webkit-transform: translateY(110%); +} + +.scanlines { + position: relative; + overflow: hidden; +} +.scanlines:before, .scanlines:after { + display: block; + pointer-events: none; + content: ''; + position: absolute; +} +.scanlines:before { + width: 100%; + height: 2px; + z-index: 1; + background: rgba(0, 0, 0, 0.3); + opacity: 0.75; + -webkit-animation: scanline 6s linear infinite; + animation: scanline 6s linear infinite; +} +.scanlines:after { + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1; + background: -webkit-linear-gradient(top, transparent 50%, rgba(0, 0, 0, 0.3) 51%); + background: linear-gradient(to bottom, transparent 50%, rgba(0, 0, 0, 0.3) 51%); + background-size: 100% 4px; + -webkit-animation: none; + animation: none; +} + +/* ANIMATE UNIQUE SCANLINE */ +@-webkit-keyframes scanline { + 0% { + -webkit-transform: translate3d(0, 200000%, 0); + transform: translate3d(0, 200000%, 0); + } +} +@keyframes scanline { + 0% { + -webkit-transform: translate3d(0, 200000%, 0); + transform: translate3d(0, 200000%, 0); + } +} +@-webkit-keyframes scanlines { + 0% { + background-position: 0 50%; + } +} +@keyframes scanlines { + 0% { + background-position: 0 50%; + } +} \ No newline at end of file diff --git a/static/stylesheets/landing.css b/static/stylesheets/landing.css index b542fcc..3888e86 100644 --- a/static/stylesheets/landing.css +++ b/static/stylesheets/landing.css @@ -1,4 +1,4 @@ -#top-panel{ +#top-panel, #bottom-panel{ display: -webkit-box; /* OLD - iOS 6-, Safari 3.1-6 */ display: -moz-box; /* OLD - Firefox 19- (buggy but mostly works) */ display:-webkit-flex; @@ -10,6 +10,9 @@ justify-content: space-around; } +#bottom-panel div:last-child{ + flex-grow: 2; +} #gt-map-container{ margin-right: auto; @@ -75,4 +78,21 @@ #ablator-readout progress{ width: 100%; +} + +.camera{ + height: 300px; + width: 300px; + margin-left: 10px; + margin-right: 10px; +} + +.camera .readout-display{ + min-height: 200px; + min-width: 200px; +} + +.camera .camera-image-wrapper, #camera-image{ + width: 200px; + height: 200px; } \ No newline at end of file diff --git a/static/stylesheets/mission-wall.css b/static/stylesheets/mission-wall.css index 1caa77e..fc94576 100644 --- a/static/stylesheets/mission-wall.css +++ b/static/stylesheets/mission-wall.css @@ -40,7 +40,7 @@ transform-origin: left; } -#ground-track-wrapper{ +#ground-track-wrapper, #map-and-camera-wrapper{ margin-bottom: 10px; display: -webkit-box; /* OLD - iOS 6-, Safari 3.1-6 */ @@ -54,9 +54,17 @@ } -#orbital-map-container{ - width:50%; - flex-grow: 1; +#orbital-map-and-camera-container-test{ + display: -webkit-box; /* OLD - iOS 6-, Safari 3.1-6 */ + display: -moz-box; /* OLD - Firefox 19- (buggy but mostly works) */ + display:-webkit-flex; + display:-webkit-flexbox; + display:-ms-flex; + display: flex; + -webkit-flex-direction: row; + flex-direction: row; + + flex: 1; position: relative; } @@ -68,6 +76,8 @@ #orbital-map-container{ display: flex; flex-direction: column; + flex: 1 1 auto; + max-width: 50%; } #orbital-map{ @@ -84,4 +94,21 @@ #orbital-map-container .dg.main input{ font-family: sans-serif; +} + +.camera{ + height: 250px; + width: 300px; + margin-left: 10px; + margin-right: 10px; +} + +.camera .readout-display{ + min-height: 200px; + min-width: 200px; +} + +.camera .camera-image-wrapper, #camera-image{ + width: 150px; + height: 150px; } \ No newline at end of file diff --git a/static/stylesheets/vessel-overview.css b/static/stylesheets/vessel-overview.css index 3a54c7e..e03e963 100644 --- a/static/stylesheets/vessel-overview.css +++ b/static/stylesheets/vessel-overview.css @@ -120,6 +120,24 @@ width: 100%; } -#orbital-data{ +#orbital-data-and-buttons{ margin-left: auto; } + + +.camera{ + height: 250px; + width: 300px; + margin-left: 10px; + margin-right: 10px; +} + +.camera .readout-display{ + min-height: 200px; + min-width: 200px; +} + +.camera .camera-image-wrapper, #camera-image{ + width: 160px; + height: 160px; +} \ No newline at end of file From 533b4e9b6ad02cc16444b78f3ba66d0219105830 Mon Sep 17 00:00:00 2001 From: Thomas Cannon Date: Sat, 13 Aug 2016 18:00:54 -0400 Subject: [PATCH 11/18] Add Camera icon, update existing icons --- icons.sketch | Bin 401408 -> 376832 bytes static/images/Ascension-310px.png | Bin 67920 -> 67919 bytes static/images/BOOST-310px.png | Bin 63724 -> 63709 bytes static/images/Camera-310px.png | Bin 0 -> 52016 bytes static/images/Camera-32px.png | Bin 0 -> 589 bytes static/images/Camera-620px.png | Bin 0 -> 173586 bytes static/images/Docking-310px.png | Bin 75720 -> 75717 bytes static/images/Ground Track-310px.png | Bin 65416 -> 65414 bytes static/images/Landing-310px.png | Bin 55483 -> 55479 bytes static/images/Map-310px.png | Bin 56542 -> 56536 bytes static/images/Mission Wall-310px.png | Bin 66490 -> 66459 bytes static/images/SYSOPS-310px.png | Bin 58846 -> 58829 bytes static/images/Staging Analysis-310px.png | Bin 69626 -> 69634 bytes static/images/Vessel Overview-310px.png | Bin 61975 -> 61969 bytes static/images/ascension-preview.svg | 4 +-- static/images/boost-preview.svg | 4 +-- static/images/camera-preview.svg | 32 +++++++++++++++++++++ static/images/docking-preview.svg | 2 +- static/images/ground-track-preview.svg | 3 +- static/images/landing-preview.svg | 4 +-- static/images/map-preview.svg | 3 +- static/images/mission-wall-preview.svg | 3 +- static/images/navigation-310px.png | Bin 76189 -> 76145 bytes static/images/navigation-preview.svg | 3 +- static/images/settings-preview.svg | 3 +- static/images/staging-analysis-preview.svg | 3 +- static/images/sysops-preview.svg | 3 +- static/images/vessel-overview-preview.svg | 5 ++-- 28 files changed, 45 insertions(+), 27 deletions(-) create mode 100644 static/images/Camera-310px.png create mode 100644 static/images/Camera-32px.png create mode 100644 static/images/Camera-620px.png create mode 100644 static/images/camera-preview.svg diff --git a/icons.sketch b/icons.sketch index 8fd1117d8ecf638412f0d6d4de6c0e32ed54fdd1..8172f090eae399351a71a9575ce301bc17b88c45 100644 GIT binary patch literal 376832 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%0DgtESjLyv-~T>`HlQJ{}5qe7;lS=H~G(N zBI8w=pM(V8fwyGH&3N%}?RFkZ;Z^LXiHaVwW>bZ!Lf`H@uCSuJ zTZi5m6>v<%ABha<@OV#TtTTMaTksusTOvhl$k;}*7s*SxSuC`9xpUj|NL?Vxm0wz# zolhpHoie~lGOp+=Wn9sptA3zl{C*oUt~f$Iiz<$)$d=Vd0uLUrU&qzihCbHZebzhW zp3#{@e_#9O`Q~4)PH+lqo3zbxmu5vS_nmSIR}@spEju`c*BegZk446&W!l@?w}|{Z z?R)J9KKUaX`nPIFF3aq^%o26`RU9J~cteu6xS}NHEv|58mgK7m)|9t+W0DD~aBF21 z!zzw#)2SP4XQXUrb6O8_#TYe)m7+G zBVU|V7I$QUoh?vKdrqD`Sy5D3+zNbd8DAZ~H#oi**J|PKtkXjt#dN73^7)$R}gEg@xLORk6C_G&*{E ztfN1RjGsitRywLKmUto74)Vm)0xs6}Pvc?HU9&mo(x3B`&AFiB!UUUhNm`rpr^uk} zWX3j;@vE{qrrlF)4oh5_cxuaHGYvbz3kt|Qr@DAnsT-q{>nvnfP4fD;;s#}NZsMxH zD^>b!$EtK!#oZP6C{-HzrD0(*OKL9E-h04Nomo=n2c*w9he;YRE zFJbDiGdAZbsfPcwW^ZT3XMrb3oQQGK=7rFais(5*)OpS~@nmVR8HE*^s zH72=xDY>zAH1=M_`#WW7K9Y^?(LPhNp@MWVG(&DO?pg6^f~om3W@=1(3R4%u)R^`* zOpS@d45OyT;lTSNeRw$qY_rTSEVZ-8%2p)(;-y8oj=UUqesVms0`t!^=_giPdrAE; zb>6Xl{82#~aC-fSnVP?qsWHh7K`~QP*-^7s?k-IGNx8IEbf~g(=M0$P5TN{ zH(~0o?%-U`hr;iJ`-n;~{F7ajSTuQ8f7){4u1rbmwazRpGtRpXmO1BLhfpObLd_sm zAE@gwl;9-q9JSh7iKnb`e`y6O52!qFyA`OUf@;f^hsi2T7UshwOc{n1I5@=$;330Z zkef&4YMivpG8xl6MzUP4?9!YfhtpMHOMakK9wBGB@<^^~R2XZTwo8_E+Y>)Ki#P#_n(lQYj;kre3X>gUXT0 z92}5zhgOc!$|}n$$L@?ds4SP4KPas^sH|#f4tl4WgGwKb)mHj<#vD}E%f=3AmpQ0x ztZdqD4l2p%iLE>;DQ#)2JWQFw)IVwt21Lz4pSU@|iRt8g4mbXhf&!{b6;OuNflVmo z=CQj!ppRM_prI`c&?Xw&T=~gP z8KBQ(WA=8Xf+!u4&#tf0qHij{#dmo}r7qDEG zsG3=1J(J>@os;D($|KL;S>(u~1hhM=lmkOt%A=N@ybHMUPo+M8qdqRBKBaA_k70?b zI#ul%vqY&{6J3~8?WO#$rehQQuT}dALOF8Mt8z6_l_w{$4``8^# zdr#|%sxfNXF&48dPcN!|dT~`naAr6(d*_@^Rh4S~tE+0NJXPM*`ClYVRl@XuFkQGy zFMw54Y^|!3OTVgMRl{~OTosa1lpAf3W!$f4sud<5L$490YH5b?upA^zjhJG&=_clQ zDk^dmv3-+$^m+O0>ZEc)7N_h`_SQks95RHdgOyx0r)q{0>MXA8RYLW&A=Ik*(iB%M zs#;vNB(tROvM;+`_T|2YDV}ljJs(WD=Yz}=SXJ0@@qiVT}lt`;c5}32jMpKAZk+|siL}=vAQ#6og?p!FFuah)W;2*Iw{enKCSMl zXRDs8dcNv~)O%{WFijSwT zh;LYEIcy|pIN)~87XCs{epR;cx2oS0Y~f$h7N$DjP0NLeom8eJ!nD{}lAe20tH?ZCOMIG?fmY4yo-oIM9;xU0M4HLLRm`>b@ z#bi?@H} zlOBDw1F3+GBfH>7t6oS`i=+XmUQ)euy8)?Qp4Na|E=-p(l@|-sMTP;nKE;6KvQ@cM zu1<5@4z@7oP~qL4BeyW;xk__O`Ab2nq}6HlX-YxP;HsA@19C}Q2IL%NK+dnep!&kJ z2IPpi0b$|VUz(Ds=`6{`aZ7Sp_2q^oxzeyCR|wNJJ7Y<%ms)mJYnJ3@Wl641wj{T4 zbKhQl$4*(2yXEDtO>ar=YiUWYYhg(qrm;t=AKfWS@`P-xeVg5@pRVTUxadl&XZ4E- zmgLpACAmqM*morBmYHtjMr9wbiET$ww>q0+^VkrZ&$gp{d9WpApXJWFEL*8P$5qPd zMw~aCtSIj&MOnvH)V3p2TicF|l~(nJ>W#^kWME7`;+8~~8o`gozNolcz4|jO$rr+O zkCe+Dtyz+9s=wvd`7U;s-Yrab3e#QxZ&{LGt0@Iv{adV$_Y2d#!gSw%k0q(0K3Wa+ z(K>i*cCXoEyCtdVoYs;&CQOeql@AHigN7w}F2$0R+U>bE7d1=^UHN$A?fB+x1)NF4 zcG~!jY%p0NWMT7eAxcHpK*25ue^e?Q~Y zrptI))H-vK0eTldBBKQ%MG-ra&vJ zDXb~l83R%?NM8P#v<9SRNJ|6qY^njNanP8vrgUcvNR0|AJm0RRNX>|vk=qSO4XcFM zQlzFLZa`iXrdOf{gpEeZfV>blAa?d(+S#*2ZXekIvdkW@YPmVoy>;c=d2KItIa2h) zr}V>*e!Q&o;m!G3*F%obU?rjLZ_LmnaT2@|$oKS}5$hUh2r zg=JjR3t3HylHzgg1OUv8c*O$CRTbW={7Eo>OtsBtitG!61@TQ*R3G3utN zQ4f~&yR=@bA$6$cL1gw*&BHa1Bv@HI21xNK8cTG3eJV_!Fr>w1vAp zy5lOpxRlpbiiVPRCM(IXu*TEPLsE?}QIyE^16jGIUxew8 z_=a7TmFww2R<7x%?OC}VU9)>E!t}Eg;MVwu;~u2wwkc09K6aom{U$&5Yc$8!(_3Zb znzp6p*p_)R(`V&+`l+m3)9nZb$^^8+lxjNPuqr9j1x3Y4jHnVxvQzLzz9{bx$^9#Y#_^WQu9|<5iQOtru+_@0eFB?WPrq+YK#CZGLoR z;t|S;tW#$xdfb%fctm=F66r~vlRc++R(VcM5NcAXM{YyiD)d8yZW8*zLO-CDWsK(x z&zYL=@F-^i)J5nPq3c37BOSRnku8g)6_D3eEK};pCzCD}GU>9}LcswAB*n?Ii=Y`YudI`O!(D$cPRysvaR!%ONMWi6fTqK+HpG2MAB$tvG#epX| zWXX{|q)u{*+pN}FyUKGltz8pqt+&t*6#7B5*3)oYryZ~qPcaz@WFM0KM1~d15_P;v z+E2HBrB*s6tC@57XRK(pDrHVV^VSM(wYI!$*P`C@phu=B5P#uO*wgbk|Bm_>Jx`;^ z&&oPSdS9UrFc$UtVaB3f&*a;Os!jGJ_1Z{6VF8M}nPj9wGT_O&%qrwe(mZ!Terc{d zIk@S0N!?JdaE1QrhU(YW4fU3~q2BeZ?wT)ySq#2YGh z4v^;qs2MRq$=-I8zlIL^J7pM+f5ska& zNTDAg^sJboQqG(-KC;bh+%0U|-L9ylL$>Qjt+f9yX-O+r_iA380$!W~#^~~eo-6dc z=;%l+%~iR76i4TNE07savD>hnKWc}Tj(yO(msc)mqFU-8HdNZ`GUR`NvkM*plV!*GT-P><>wDiV9nvOW3OJ<34_glIg zR9lixUA-Ldj%!OFBGvT+t=M~{*3EmAH(M+6=6G|xd0L@2-&^1<)a>43ugyEid$f13 zcZl~G@6ZG_ZY{msmhhRvgs&6NI4(~3eu2>4Lifs>VvNum1S8U`gg!#(0ihow^zrFb zi1cEw)5}5YUJhC}RLCy$p+YYqY^l;~aRpIahzuOk!a3PSCCzcFAt(J|R&#PGXOBw& zrBeIksa%np%ezKzdD0mBUgd#W#&5`s^c-?@i}_1k3z-}zFVB%t)by8ilx6lexqND` zd~N}0-sGUl3~G*>O6SK{QAzJ;FPkX5WzjgH?h?9F=%sXB_J&t&?&_R;lAEbZ#OGUMtefZ15$X&$t4l6h+e5rlkh-+eO}y2TjuD$?YZBKk2=scl6pxy zBoAC(n*79U93>=)7x1?@ueEGgZ?(6EUVEYk9q7Y_K1}Gxa?c(?ujL6-q_J{LN%1H1*jOvbY;dw;5r>ToUve1p(sf-OCg2Tv8|ZptOjkw=eWcJwA@JDK zGgnp=;OSpLMg_@`DnWYx=rfw9J!=%?m`!@7OhuMix~>0WOMO*`E_f$-C({QulXBOw z92zI|GNF$}d{UtjgFp;NX64Io%5HHuDQUx`#gpXO)`v;OBa^d$he5tP1=Z%(J> zXQhIW+0Lga3&FM-iWHC>D;0!%dDeT}H90ZuNIT((2&WWz=S65NvtUc7s50x+yOj00 z@UqA?B<&G;wa{y#mO?Jtf1r`{bHb zRaTIN9kMA_M&Sw6E}#5yV_Nc~cNdyk$h~A!TNB8k=VUpO(q(qH%neT0Yng2BJ=uE- zyv*`EPF%1a{ zy-w)$NIQ$LB=(k+XwK!6w-71q(JTU4@Ph?DhPW6_CGlS-JGc4yTxxCL%B9W&<04&p zN1tzT{gw*e6DQdQ@5SCr=swR?Ls>#XZxniyu@aGDlS(WPEWupSSL_olt9)X9#L|Rw z11Tp!9SDjPwDFU6tV8I{HQs9z)*&|~tV3?&`G1F6heU)vDY_1!W|Ufogjq#QHr653 z{j_tWTUM@%cTkqdWXb2cU0I~1*mLa^SSZLz4z_ylRqK%Zxxz%X4w=x_I^czB`u%{+5%f4t1v<5ll#-q*cvc;EECm9Sn&dKXRjet}#;%oF-jq0bWf zLZMF+`ihp5Zs_bfFMdZan~;pP!%U%17y1lzRtDu|oeY`w&W&5l4aQdN=zHM)@^l;$ zP>Zo(+|V3)Lrs|6=<2kM-)z|n~LR2$nM?Y$<`LDg~R`SMnE9nb_ew@(fN6jR8-_&`bo>Eah z2WE15lrkaM6^`KLj-X_PTtv_#_4LAs(-HYHk5%NHAa&zlV`Z@sj=f}c#j8FamO@gc zU3j8nASvua$r}0LbZaGJs($hQN-wv?rfP}M7YThay_BNh!NE+(rwwI>WciWpyVIy% zfjyQoV!n8LPyA83-)colKF!CQiZ6D&lfGQ&%Y-fr`@p^sWFaebVDEVV+MU7mS{@_LJ6H@8aX6CSUBNCjA7VuN3<6j9yu8hQ?xvl_)D+G@?j7p5i;n zSQqigEQ(DMbqrV*vLu#AQn3hDD@DrF$OD{sAoIW`?jD;YsdfbvG0CNBjC_bhCn?F7 z-0qlC4(Ct09Js^nr; z>dW*|gvi&QuMWkm@>1s;$p2^IjA#*4($@(64E%Vjh0fk4^Ebl$^0)>B^jzT*xf61W|pG{g@-_cxA?S0aBy!XlH z^p*P9oG*>+1S4F+MwYSatIU#HjVP1HIeEhLhH1f>O*Sl2HU`uPm;9HF0W9PFxJg#0d$E>iWBVkfPew=G+ii;C6g z1MkhYQnq_IoK#J47m-A1OAgff8kOAGm8+kpo>J$w@su)RaZ+wZptf?@%xQC`??5o> zDdd}_75Qdsg}ynO-8av7oNvBwfp4L2QNq)vt*4N=LYQw6=6=F_y3j8c=9hOVp66o? z>m!#7DX;LY+#b*KotO~MBeJI%vc6L2S0I*4g?@<<&wDl&&x>XU*eG{PDGG`;7Pv`_ zC)-FG0)*BcCv)YP2RxiTdRb9Hdnn|3H!1(gzdXfE(s7ei>b_^n=B9CIQvkx zeM)VeRiczMP2A3R88@T!2!8In(sz~bYT|bKRVr?$-!JrQh5m3f0OPw(>gm-A6eN+F~jsBz1j{cr1wZlNUwIcP8)0Y z=(M?Z&rVx7>so(8h4da*A-%^`Nbk{jNUwJ9|M8Gstx1LSo=gbo)tYN9wN@jf_q5QT z5jy9Q{Y!;*rAaQT?X4Bo9xPqvwS8(cYx~yrtL@*Ky_HkD*D9Z7dA5p0)YLBdqryu_)imLVsT9a(fX`zE@S0@0DnjkJ>W@?qc#Z zN$q7%D|OL0VwGA+w!&>V#(2i-UBtK)mKdC@R{iSFK572aA3MoV|^Yw|TK8l9+B zhcMNSs~ulkUR#kMXce7!L+Gyy{Vk!t*>YXV1F7oAMHACmyfsSyj?!to(NU% zKlVv;-flZiVNtW*Qxmlu!c;rARvp4r8$X1pHhKtC??3X%wvvI~_l5qB(BCz*;zOks zA4IhxhvH8Zv~*{=-A+;^C~=u(&u7oGgZFMUf^)j;$s1T})fr5+GL-P1(u#F$X~k;e zNn3k{jQtLeYXwhQV-cA2svXyXwT2FSl&Ayes@v`S+6!tgti32z2i6N6L%vby8~%6e zKs!!jseQ0EAxc@B5T&doN?B_}DS2#t7WKP)5%s%lX5v0qD_TlIxQd*)*}T$l+F(A1 zg)-}GG0S!5=Qv7p+;(?qa+#`H6{W0|QOZx%)Ng5P>Q$7o_TAcbvJ_apn)*MDMOMJ` z+6Db~U&;Z516F?|~rT%Glf}^6nKWe4@|K2F2U-R?s?~g|* zw+j77q5l*e9c77e0#Shx2P_Vw0_h=%dT84Fqjq@*{d@VhM=7`ZRg}`mW%LuJG|I{A zzY6_#sio)@MUG@OdHt7oVNYsN5dO&{6(f%go)oN;8)V7qvN;MlONiZ_1u40Veifzk z%P8eU769B+S%$0cV-Dy&g7ry#uWcy zhL!p=K|}pn(n|S{@@M;V{JAMs%G^Qde+e_M=zFx(5EX0l7y7A`>o1N51I#R+{}%c` zQU6hkguLzkqqrMImd2ItF8QPQLbkQmO8jY!&`WTBA-ov(rVGy9zV^ z-rHzR`tVv@)wmnvk6QFawkCfdlatzEq5Xb;fR!2%`VL-gs~>kjERWaEJ}pD{&E18$ zhoSrC3`6(L-Qv3Mq_hTBn2jUq5E{-?pqvj?66_9n3v-rMadGnLc>bw!$>yJqaQBnC zZ{D{p-JdI$Z2tNF1^$JZCB2n}{@z%!6|THu;s0k;HR@FdEMfFTHO`+CCrDZyW-Hc z?uwV?lGXp3|8*-X6wfC|Ev)){tnox>yuQ(GI%^SuqbZ*|DpsvaT(=aaaT)pFin)yZ z@A}vI-@|2O&QdNTvqPA(h1nf-8TmitEzx{rlFO*aRWX;5e}mlNZ9Xc=k>cO1mH9vM zZ)wwO6ZI7N$prI%AiUPc+b+|~Fk4g3Wlm$3+N>*czZ{&~tMsMXQGMA+Oh6rS)ICA1Wh$>QGfNa{C z##0nHEaoW+5Kj>1QanXwSE{Eda8ybIZF`Dhtrp2vkKHB5Mqn`0G9++}bZi9dF~^21 za-ocZ==u;^i1v>b=HbFTLcPM8$0St{VmF43tp!C{@`MU1JU(hfS3ZF3v*e*Gcn+o&%{7o zpgs@`G^9Qg#|iUTVJ;WuwA;p_o(p!rZjA0c+>I;Czpd?l?fN}l3(+pm#lNz*b{C!r z0V>l6R;YXO_`nIt7_mQ^7gr4EY2CpotQXDb~zm#fw&9jIco{`Sz$HM~w86GgtltzD6^89ii?p%1FPK5`|b5gU98Kj>x)6;by3#%tvgJZIGBCnCy=4zDyEdgkK|hn{&E z|D~87c|2?#DaLJAnq_y&G*~xfO&ruUp#~Ux5R0-4><+sv$q3fvOCwmvmT)s$qIh;K zZ^H;04?<}KjR#@$u~#=#We%H9pc}D@zI9H`Ugr|#RZPe`gv}|qG>&BBNoq#Uh0(po>u>niAHWvrj43G=DKyqbQ>ouZ^j$y1@&)hKrXvwx7yuz75Y zPCN)DcAC}Be%9Dy%fVsnmgZ<)xh*_b?UqTrDBERna(1m+N}ZqaNY_NKy861{_J?mB zNn~jrzGn;bS!l?a!hDAD@Vz+Y;p=kQeSsZ-8UQ{P%9Jw6H zdN*C^-At~!R_WcEHuSFUIQj6cTiD~OI$ph+)w5SUe0dLhr?z6Sb8cqIAmh6UkK@>R z2X*oUOBJ@S6Lrh^ipTM}#^d-LVP<>B4vP)fog%gPyjGsmb*HJ9v-6W4V|8b0Wp!)n z*0%Yg6f+g)$je`t_5odYzUq3?TiHdaZ)J6t(AcGQm$mt#6l?5C+1MrRvrE_1MK^dV zyOglOvyKg(QM+`RFkcz9OIJnh(xq{`#EmAiNvJsPC}4qZ=PV>!G1YW9IIPfZb8zld z%9$f|YJ+DT8$8WdDE+v+4gE0eQr+WqPsA4JhFZ+YEXhzlt>0so>M6rgU7cvDp2JeT zAk1XnmUdPH!)V&{T`DS6hQJ8Ovw@msW-b%6)Im?Nx2w6iZ_ehTJi?`hB2ja!( zc4@y)-6ncP%^57nmby<9EXWsWEy!KMd?#~xn=s#MSdfQOEJy*>J{_FNO4$pJzaaO> zmcfTliM|}@vIPOa_9QC?ZR&TDi?2O^4 z-(Oyy5_8=;bm@@Up>v169r|_X-(i6EeTPHq*)2%-lMKg$sfMGz4~=Ek_uU!8QLh{e z54X#3)E{0yaQlL$K70FuranJzI35+|C!&Vq$*AFYByKqJ*h`#G1q|NmsOXUI%E=`| zt%!aCFS7 zUs-=V#mAQ=8jge2|74aNYkW7I1vxQpK~AY(Wmu564GZ#?Ft6Jg3$j*f*E_9QkaLv< zc{kaDT)<6zVf{rrWkD{Lmwzw41-YW71$n=P1-X{SuB*R(r!2@#vat`_XF+bQXNeJe zC91zW!Ghc$w;;TtZ;V=yO;HQ-QQU&CxaSaGPCT(WWF=5LmACBKj(iHkxbO&(GvIP3 zZ*Qr8OzFoH=*I@7AM4xD55s~;{YZKxs(;b27i_hNzY^8IioJMUm_L_N_@p&^@pe6K zih53yHtyQbgn5fFf684eUkT`N!XI8SjI>2kpR&nNBm9phaQTskE^D$IURZd9`$t+|JQpJMyyJ z(zXUQt!Mvn+;}av`kQ|d=AZGd{3y&nbQYF-h2@^TgylZIyq~T9=3glvbseS!g-j?P z#U37VF3@&Ywu|?&f&x4K0KRg{(}BrMa}i8VdVB`EN#zgj%N4gO<^O4i%HO|H-#2JA z7E`x8&Xa6oK3e~^$yP^L)8IHKBOZvID@ z|6&-w3-fQrc76*59L=0M72VEHVh^h5&dDO>g*h)oN(2!}?99)+^dNgJf}`YfHaI3& zw*5I9950`K;;Dmfd$GuAae2aDoySdq$@i`^7R#X1ykLDzSQDtdLf4 zQta^>oEn@KoX(rQrL%gxS`HMJy@lnFn5NB=a@;HFDH@y;i>?Nbi^t#OlTZ!91!=GE7yAPa$M^c9I-LidhjZQc#W`_r4aS_hf`ha!5jG4O~N8ybS&1W zYdv_2ilYf_E5JKR%za-?&S~Q!Twxe?tWCO9^+zdk|Bdhh)|@?8hl>vytnj8ajgem?6fiXa;MF~S37M9zAh~N zrEA^NPrBAEeWh#Nk{Nfc2jBc3-+3SWQ0~093`lUT2R{z34{lI9?=6Q33z~T7zvfz} z_DAqDty}Q(;1^m^@XO#=!LPN#;5WfnzIo^>spIoPl{V*KlhkGr%m~`r#Tz4tC zk(|Dn^q6nhN809w?%c82$~GUhBip>S!O~zg9%U_UbJ8}LsIRSo%1H#nE%^z-@P^(p z7~XJ5L!XAshQ0|iB=@CQ3WcRWSc-+EsFlU>|G(S#8z^Dl;BFYEbYMhW2jm&IazP`a z+xRWV2+JU0ArVvRK#9@;dGeFg0ed0E+T3~Wtl|O=kKlR$4VfiJPCa*Z+4^P1ns0(S_$5Nh$DMM~e`ID! z&a(&1c=mv_8~YnL+eT`IJy9zrD6N>(Fu7q$!_-u*;CbQ@7MHM;wxJdO3${q?LUKpL z>1f3n4QDE?I4iCd=cQ`JNMT{Ec&wonqm@>SifRSAkb}3KHyNj$x8HoqJQY(3H7keH zVDfE+)UwG<(TYozR$Pu&j8IxJye+M`R%yiz4L3I2#5u6{f6(W(Ee(cNls)ptcaQw> zSxhSqZCfjDHMC+(qE_6gwBqiDdm8R-xGz;J#tKWBu#6X$asPQ*@g7?7e!~Y!D?W~E z#imrPs1cS5VW~8!x9UCdXdg~bkX!R+>;6s`C| zX~kD)MYYn3s~;?1WOZ(f%81c@a9HSlgMZG|sUEB;bi z@lT`H*rBmws#f@grB+z#geCAFrxlHvTCc{wjs2unG)C(NXgwQ`NY#pvumpvr!O)7Z z(u(Gotte!#TrQ{Yl@d}iY8KjDyx}>DTpVy@+zV+PijSD0b0?dw4$*Mt!O-2 zYDMEQjYAttGD|{3j@tjyM~+KtD{|Yk6^%|qD8t0~J#Y|zDDlF3st(dK}VpiN%IP>g|Y?oY75_idV z+Bl|<2MQIED1$*Es@%fl(0=1$r4>ujiWy2PrnjXP$1ANksqy5-Q_^Zh+*Y6!ZP<#& z)rMBgNz{rnl~$~6Jgf2S#&c4&VxF+f6_)wJa@>EORuEioysuF@(C=uJDTL~cqw%p+ ztyn573x#Eop%p@D#j>bY*iZqAN9JZx$&1xyo}(bkMjSsY$I1SCs*F)KCE0n__^i^3 z=h2EKN-Gw(r4_F#t$3sH&BnJfOQs$;{mOT{6sNTnN40G$-Zivhd7@VE7KyF+sPW^* z^^F@+wPK~PtPqwHgys1EIIU>vp!I6%*tDC}il$C6t!V0!suiaS%Spm=vY{2HDXmx? z)e5Q?QNGP4mzVjtRI^JdDud^oWkx9>g?zG!Q&yWz`$?^6lAfbgN-IujLo1qkO08%* zpy|LS_TZ+`iny&nE84IXO@|m-ae9JQH1(5O(KMjx(5Azh4o}sJGlk_0VOc9IYyR`J zVkBBIs%f;+im`F6s7Td{^M&PXVL8XpiVKxiu(itYPT0svl%TG8ATZsHv@%{$1tgwJM38nPI)X6)xQY2u`i4ot8DqmEhHY7q7~|7lcsCY zimR1YT-BDXxLIk%ZB4f~k$awIwTV{Lzuc{Ack6kibF`rqcNNLQa!sG6*4VP(EoL8>lw20 z)&9n<8{*vV0kURDi>R~ZF=2TWPxC{<@?d9SJxW-Q+)G%q`7%dN-s41_zi1J4CYa7v zJ_@CA(5iGgaioNULX2#=pw37UP6qx-n#2&bZT3Djl*JX*iD#A_pLjOl%mHgc1;(22 zj$$=;JD9R)Kqn;68?`*KOEJ|@36dm5t%En@43%z=sfLE7jj28-ETp9Pq$$M)!vkz zA%7?ki>c1ORa&~=GfTolY*~uMR73T#m};mo)D#NInCkOJO!Z@7c}Z9{#pD=~ za(p2vrW%?Ui>ZdD#A9$Orut&?og!rDOctby#=Ao^G<#^4u)Hd-`EuHrYDm7cZr{+T zVyYB2N{+XM7HVaoMWMyJ7E=u^lkwEh^6l}|&`KoznvAEuA>*m9CygR>B8{CCI(cW} zsi9Rnil>H7llNlij1Fr;YeH*fJoPQwepAL%*9pr<@erwsr-sgv@zl4s$5TV+BftxV zAt`zLbvgj zQ^K9`9>mnj$H1X8Xow0aoh=;DQY>@HPjmh)N?RS4l1L@g@6f3qtnUvu93dm@_+67yIs*;FQGg>h{pgX`_R) zCp69~oiJM%vtuXYFT-Aiuhc<*ZhBk#ZC#-9dsz=J{`(0QM5teU+ z)g-KY?o!Y*#F=uTFG5t}>3T=#o7e&}^n~U2r;Ps=hd@C&984Jj*Y61CEbOA}R z^L&bz^7JG%h)0csA^SlRHV-Z9BNa%bB)?=QcAR|@8z4Sd;@g}_V6deUxlQ}#S* z$th8cTTq{qm%zHH9qobcvVN-I`#!M&wcSi7{P6>F7NoP$=J+nQE*OO!SwnuxeETwo|e z_e5p5L@C2%&6hV{(R^j9GVCX;`wDA@u=Z%fMEw653U7W2Wq7)ov$`=6&&QSFw&_0u(0<2kJE}UyOqP;!~06D2=iuZ1Tw;wRITVQtbK$v)6j}Tl~xRh zX+^%S(Kf{fgE;w4k^>wrO8K6gb$Kh5k45L=%=)zZyQ<>?k}|> zd|3E!`QWIzV8HKvR0KLoMkA(VF}6*&XLLx&I{*<3&Ke!R*d|}N)kunpzOm)OYs2Kmg?nGL_r-g&b62WpAN!#XgrkR|-1(VO$enYigk^5D)wWCS zl<;Xt@O0@;37;8Wv)!E%=5!vU7~AI*-Oz6xDy*dSS&tUhLCT$CZRDYEJx1Qh?E045 zAak8Xlrkp4$H``X3Ps{ibK31$E|!0sjN&ffXv(BTU{pX?#sn1G0hc78u-fDlz9D>L z_@>OEUmpF-Gu2l`x4z9%?*$!kFpoT`$E>mU#(f?;J_I^^Ys}9Qz9W2R_%8e`))M7s zu~rJJQ&>IG7v}K2Qo!~kKTG)jn4cy5P`pj)XR$hxZ=F;>OZYKN#}mTpme(vz>t_i+ zjlw4TS*)&9KTDV@E#Vi#s!GfAGxwW#birSlLsP$Kb?ssO^51@aG8dOJN-&1vonX;kcJ0>Sqam%g4SK*75RVW21hSFxfxU0ke)v z^_rB0WtEmRb-=>gl%K^~p86XioLaFZ-h-&xL^RoSRT@7_q+`s_64@O;i?td*i?t@z z&l2gpQ+}4nKGM%(^``h)BHcS}jO^EGb0nkFmIw>7fb_Fi{nF23t(ATjt1s?niCF%} z{Vb7#rJu!Gm*8iK^oe9f`YJz*H7KkN!dh?mSz_Ll|ALPtsuYodnmxj!dAgjLrd@KI zL~^xWk-SL0T<}DSVhf(g(Z+(O>w{V^tRZF~BCH`{rPh&L22WHAo(Zu9kE1ZpSt?(L zoNO2;(#C?vEu*oy&SIV*WIv_s6E=)wq%>wE!>vC>A|oPX9T}_MDSLeW-3L8um8DlJNCM7IxBID)aCQ=cpj8sLcQ&+lEgmtp8P7~ItZ7goOKG-f7 z2_J8di-eE2$3@ch!E`Q?c2tm!%#F-rnkfl{P3{?4Bv-gbNuUU?#1YDwV7z7u>ue+c z)jF3cKap?EfH}rP(V3H-~Zs(f8sad4@_MY4n^%MUFT50m-}iqVs)nY`$lu zo9~D!>mE5Ha%N;rX34=H?!RT;*T+R)ch0(~X+VLQuxj>hwL`m{omn!u^7fa%4lQe` z0X*l~;Ax#FHQ+t1IC8$$EpmZY6uB^RkyaSFIC4n@e|6;Y$Q6+*BUeSPj$D(V5v?V4 zBrS;(K3^cL%Y^kTdGDPhtc!&83}Ia3?c9*Pd z!aW#`4*?Q;bP9GS+=l$TAXIXu>8BsO#Do&0pmejCDmBl0Hwek&&IRl<6* zu%3djqX#;2-a1D*=F7uC$x>EFs9KG3G919lEOY!je>uCfP@b;Z+Ap{IILu%1BD5NyNByZ23~rViR0sZ{GorW!F}!%0)t>XlpeTAj`r`9AUkz5X#KvvY;@Y+*eInW-~}(Rf1s z^j4lyNZI;W_CDu^VTyC*p`4_$%cGLj$J5a%D^mAUyFQ+@wr=;! zHSM(B z9c-8!DxKCiXG&=5?9$-u;MEiMn$Ts!-V?fNzScj4I@Y!F`*r)86Miy!T2p9pS;ItD zAw2n8VP zjSbbb904c7WAGBZ317pHnwGl5$WLCHyHo|839KM8~G_8m>i|{5C9SHrw31eUqoD5e0b5n$TiXH{#rs!qh znnm*W|JJl(`ddt2i^oF*kVEl&SO`mi&lkT3$h4TT7V|r{y}<&E)0P9r0D59WPi&0Q zHXV?ojXu~Irwv)!&VV(5PTJ0e^Wh@61TF_;Z9~>J=F@fqpjWnA0h!qDgnIzF*yxY# z4L~+F#$iLBZ0OUV4!|4_8Uijr-h(CrV;FQQ(DoqO8^rYoT@N?H%|IK2Xk!p<47wX$ z0IoS`3w#HEz+do>rX8(8M_~L%?*rYz1jzqr+C6#{Oor8P6+8s!%h6xKR`>vtSV*zrpCr;K$(u_*K(}(1#%df%zX&3o~IM zEQX~(UxpylA@?(YO#b^Kd<%-J5m=ZEt7p+ztjnqeB81kCl&+W@%^{REI>3G-BPBrw(z##%zZOPI5gVL)3Y zD}X+iTmy`?gua)c4<)z2y}&q19t3ot1RW@O7v2NpQSv!_317pvnr6=c9W2lj`T%{k z7X#z7)3%*?vsc1$V4U`g0ll;veBgRwf$4ac!C1=a#%aXbN=fxbFB0-tp106lSzgwaq2 z;~)U_&;avbJ}d{uac3{!zN-L&bR4adWY za55kt_i8}b+_wVr>%If-g4f|qcpE+j+I4RP?ql~hO&it$xAqq#@L53_F*2Nf5YhCF#0!){tXkb0#1dq;Syl{!x;ZC`ZVl5pfAJd%docqogcOy z=*uv4=-AFcKaTAR-Jm=4h5m396oVZ`z$h34(_k(j`(salGhr>z{;{-w>}7B{+ydy% zvG)VAKlV#a8%}$}2S5pUVFn<};a32C9sWGL2rt8{K;MTWuMzZbL>ADe5jl_t1%S*( zaIF#O%?R{ngdggl9vWa0Oab~l;w(4^&Vvi!LbwU&=Lq^ag1H;P+>Q7EzSXpm-C;jq zjz;QWfu7I@kkLqFG?Fr@PH%<-6e;9gh;w|WevdC%aC_j1SSG9C_@Hi zr^A`Ryq6*GGUQ$M1Uv=Lz;p0CyaV*9>^JyB)5h)&ouD(I17nf-So$#bFvtbQKK5AP z{v2Bll~4`G!2(zWOJFIS3a7!jfGox`2V-e#EOR`LYmYkw(4%oDCUCz9fbHA2z|CA$xa@sDZ z?Q+^Kr|t5Gfws$OyBt}RGxqW=@GbnRX%*;F1-ev$E>-LYSx^Y{p@MN&FzyP*T~P=0 zse*A=OoJJ)99F^!a1xvXw*%v?_yWFyZ{R!l0e%AHUV+?E2d%Ov^nwH6AVA)gv|o7? z@l9uz|updVG}L)CR~H{1*N z!-Mb^a6eVO3-qVzcR(&x$fX*&RCk2kU|;9~v|UZx)yzvZ^HR;cR1bz@U>YofC9n*Z z19GWGF4b#+{#4VSYWh?CI&1>QUi~S24qs|oO?TK2GJtW{m|-Z`!3i!H2FC(=SThMG z!&I0KGhsF?hLhlII2X=`3jrC_+yFNLGN?fYHRxpxWA`vt4|4Y)cTZ>N0(-*|a3mZB zIe-j2$iPzsD6I!w^l*Q8xIaAHA0FEG%!T6s-S8j-&v|e;(6;AJcnqF^r(gs806)Rc z@GJbLY2N+e05}K^hC_gUc(Y*~ltU#jQC@V@OZ#5h_cCtpDR3&B2DIKu-SncH-Zz21c$pV3eeu#4FMaXKzWkwSzCOVCeO2HAA8;S|xF3BD&;&DJ7R-Tp za0aY_wQx4v1NXrL@DMx#j{<%1(HGx$fGm7J!dCbNwgK(eG7q&j7!1ci35N<+cBUe>9DgIyFD~?(YlzVE`NswCz6% za^YxjLpdM|KeG2D3x5PA!ep2a3t=&w4_5$v@FRc!bMOK%W06)=*uV?OJHQwNj4{A`2bk}`beIXqJivSh&VVxknFo+T;1WOvfoFiW1GF8W z?ErEJd<+}m6Zj0Um38~VK`;~?z&%$t3`W2x2m<=f!30_z?bp$M9qrfAe%%6C0mlP+ zSVy~cR{~?Ny9VwB=DzM>cnqEZ*(T$yx4`~zAoK>tUEde70NK|g`}&c58jIyey~!Bjv7!C5dDmcpq(KZ49dkbVS_Ll8LxuZBC|F1QCCh1cLs zcn98t4>XOUV_Jg=hCm580iA0Y4#=Q^@i#F32FBmO_!}5Mb)2+@C9n(xtN`TRfZQ9d zgB#%%xD_6PM_@f{giWvoJ_F>@@QtQ5q63Ws;Yi4aJfJU)4k!igxyEv+gypanxW^mM zgA3sjcoLq5XMy{#@dfw^euiJ+H~16&(zGVpYdRPX0p`7_KO6?gzo`Ido1|y0iE%fL z2ik37+)Yi;46|Sk%mez;#2A|xW7A{s1kjJBXMiy_p>s`)vx#vweFr}ReG2t}-p~i= zLudfxLm?D{3x)ynKq8h#29y>$4!GAtO8~itu7IoH8n_;A0CX>e?uFim58-1#?x9UU z`=K8+t(mr)ne%2dpo`7uVl(YGBZKB#pdZaefW2w;-#6H`ovMhkn3# zCot9t$a%sbpbryuT6q)*^8_!79!CVj7IlNs~meSvl+9|DKMKw!+1j{;;q*$K#b z@&s50=K=FNnXybpeRPhJPyp^)Hi`~Pu&dk zX)1l1`ZH{U-!*MocR+`y?GFP09h!y=rXhoA$Y9ziVEoepK)4un$a8jz(C;oGZ^0tbaBQ! zK$bITV+L)^Kxby$0e8cF@E|-4$a4ncnZaDn>;f6kAGqGkV_+C?&6&t-=49ZyGf#tS z;8A!R=-13I;A=oHX8xdQv#f9sAoE#n7!D(042**c@IxImz(QaiW}N`c#jI1{Qn(y$ zf!pCuxCcIfj{rTGwFx%EHuzoBX72`FK?euW{%qQxeJs%a?9sq|FgpZcm=5z{Ih+pX z0rHxSd}coajB)l8@Dw}?F90%|jm&1R2il*_m}euu*<0aPO`D^^USNiv&T%uD|dhppAuGcOi0Kh@2O4pDz3keuST4 z8!+aDe{0&J4zN4W&Y~``59|v);Q;6j`A`IdU9~cN(kPX9OJTP8S35;1VX3+qQS)2l=0&R;kfcC{Da5-EF%!5GI z;(1`M#VhbCdJ-~e=QWeA#qKCPStQ-MCMq%SLx$x39h zk~vy=I-nO?U;cXuAe)u+X(fGHc{@A+Pr}pi9MG?o^lK&kS}FVV1N^ON$8(9}_kym_ z9gcwiL(yFaeOb3}0=^%R?(XjHPU-IM?(S|$X^`$v=?-ZSq(d46k(37MevkK$V|Hfu z$M-rv=XKrB?99%N*>I;n`1|lfehN{P@3FHV1~HTo$nnEeX0U=^Sj{@@>4(eQ3xd%R ziGtoo$HccW+P5*&0{N2nGSTO z8$IziX{^6VV|6fA2VWI&(ZC;H@xQ)UxQ%0p2vSjI3f}S?;mgWc(ccw zJw7*jA779n6i5H#Wf|X?_UL*1V20tl9RCArkY&7%$KT=(_mO41EaPRF5R*8#w+V?z zN(#JnLOS$6p*gK+i@qo5dxE|v*z1HzOl1bMn8Q;1EuOHAo!G&Iz1+jxALEgbBzWJC zy8ST?>B&JZ@=}$0G@v2g`ePf~(Ggw$IE|T@{o`!bvYs6r;5e7LhJF9|cMw=pFfkN* zpQ!hVc0ExC6Xlxdy%P&km}2O9Vr68RD9c1SCN^OpLm18|#^44f`tgZ!Oxw@$IoDd(}vDeh^?Gt8dyDhQ^=Cn1SRirbo+nQXYLsky0*Zl~6#5pHT~2jrS+ zcT*=bl^M*$El-tYsw`9Gm@3EAE8OJ)k9dj4ICIF3WT~pS~EKOkcrDw7|fq(Co|&^ANMjd2}RMvOg+rh!^|?sF|#&(=!ZLd=zz^q@C-o#Vdd3}Xa# zK4%=V&RL6mb96b!oVoTkH!1ljfZpc%&AE+fN(=n{+)nuIxqfS|-?l+%(Jt3-st~0m>-1%q#*}xXMRQMq3`+LHh(BT zGKZCHWzl%@BD8;upkuQ;XMl? zBHx1O#3C;GT(FQ0*z*E?F1UdES#S+A7nr%g%muf(hq(*9d4WAIu;&H(UtspcZxM#z-bHgIUaF0gJJRg=djRf)u7G@-O}#xfjd5SnkCQaC3`ya}@n8wx7j1TCAhRI$CT;i{J4P{VXwWNeK3| z#LOjOiGbT%5*a&N5*0a?a9!7UTW@AbC;UCG&b&IX##SRn>?7mv=n8rv!${u?M+|$Gms$+MUhLFV&>A7{K9J1 zv7O)fgJYcJD*9S_19!dj3D0;J1j~|>f>fj-9qwqEJj?81SqUnlmt}fc=I_X|p2)VW zAF?eQ%~+-~ou7Cb1k0n~z019Ix!+#yc9z@o@l<+ZVoj0e=+ly%lPJg4Nr0kU`M}pLNCAS z#1+)!w<mzrEUTuh#$S!yMrlCpd{+thS5QXL%O{Ya$Z`9j}Q+Ty(O=J*?5kn$*a#MvgV# zQ-PY;!ByBGXz~)~>)F*6MBTTJ*JcH+zw1 ztvqYbaD{)k!~GywC(}Ba*2%O^o^{bkOj6R3ku2zCU1h4FpLKPpkDk^wr5kfuz+z-r zx1LRyyY4yAx44xJ0lL@_6W`Z{GL*;LH+cI7nKpDmh7B@oFnfd9 z8_eC{-5VCN1oJoi%qmvnE;pRwEa$nzRour09c=i_w;kjv_V zO)_mtL~7EJ9$7XOL_eGCWYYljzG(=<`H7{NzscN9=58``lY%$tebb+qy~!n5GOfgDOnl`kh13KSo{#Nt1_F^(R-g=n(Jm3*edBH2}b(?Ot znX}E?w|V%Abw&4GVlD8i(J8d?7Yd}d<=r$ z;*cGk{O0$5YlU0;Z2|uMZ@=T6zsa$y0+q49T~(=pf3r)5UG-^1Q}nq@mR+*!YK`04 z<^8+7f7cZ3de=(qdY52k4xx2?Po{5;hdpi2rZP&YZu#?^F;~I8+cTC4{D^OD&s1dEa|$=N$Nu(Q;4*(x_2;asu=Bn!nfly%%wl z`@)cfq7FyjW1lzdyT%Q?W8cRh*dK=+xTXCysY87lVUPRe z-><*@Ze_n)-0$7{@AD8hvHv;$;XV&U#oG^*!g~&^z?%;Ew+A+{m2KGff!)~mf&Co9 zZyz{}w;wo;_a8WkJsdd0+aNfoEKXV zWH?j_ogQjID}G=MW0}B2d>4mgIwZ>>eH~iEIySNwJsmoTJcr~tbe_Ms#{(V(!S6Et zF4ONa{Vvb%u}DrzGLe-WRG~Vxs7nJH(~Oq%Vj)XdjtswV#_oQ%v)>P3Ux)qv;n>8( z9u6lWF-b{=xrgoKa9Yxl5jhUaaX33>AMQkFy3vz9xVOWD8NnzP;EoRK<*@x6mgVqn zj$u!SPvOoF+s|S9Icz_NAMzv!j_Bh^RAM0O5m}GOdPLSE73j||_^l(y@mojy){*mE z;&KrD5t?kcqdx{A+aJRi$!Nwgp6%S_X%HL@LwvmRXn9)T-yWUJGUPw{XAm4KKxvxe z{m1;yv1u&EJCB)v>?+r|!7c9KjmNz4*drce=CK#NqIyr5E*k%*!>Be zoX9~gic=CDobb(_=#051y3-T4cwz}lS&ln6@hhuY$1Z;72oHFOPEP3K#B+3ULZ%b4 zoQy{j5C-b0_lVvGSC1g4&(@B|5%5$mny|=lDh}@CR0;~?Z^)?{evmiJdibUxAthb)6j=5(WV)j|H&$h?h zv;O^A|Ng9hf7Z8f*1tdJrp_fHE4e605sKsY&iS|J-0it>=;z#O4)GW6;oP?%_%np> zh(daF@TUxa_F)n~v!81`4TAIj=g%iZZ|9e>f|dNr8rHIb&1_*ic5wbT_Tab9d&BvI z9OekeIKgSoa1OnmzraQ8>_QA;;!ZBOlM8ygkQr~kpuY>b$wxJ6Qiu99qBTD<4INxq z$42D4Am0U~df&Oj#QxGcxzoS1vr%**CoZcI~J z&u*b`1IgkBazKr|1d_4%Rgu=WlX)yDOnODrbVvkq6`$|E|Qh`e7 z`${94(2UM>r8@&y#&TBT`?#`-wYaw{hd7KpSLC@O&z0A_~;& zfgNA%g&kit@2ak^4q-U{?p^%>onIZpc=T~q_g5#e6+K@)fecsAae=Go;_5AKBgfUR z_#UrCCK}O+g>Uj&Zrs5&cW|vRzR_zXu>WiA=tviIa!uB2vR?D|>e?cHM+euABF8m3 zuE}vtj%#*v&HJyXASHHk-Ms6W$Vv{}!1elg^Yx*Oz?-j+Wdf6!%(fu-D+xuZhJW*y zUHv7?U$fcCHU8oT-u~Ae?(>lUc!RzC^?{G*?1pSNWV<2TjmJC-f}3$jNbN+t9b9C|dE8g<| z-}}fHz6F61!L87QB^=?2guA(A?yVTaM&4UGx)q;;* zJOA;{+aZJ|I=+M3-gDbqZp(PPKXTrd^Y$?O?(I>G!8dq&0+Vo;x9$A)bY|jBw`Vb% zxg6jUX5YTX4Q_Fd2iV7L@4OR^i0Ju_40np)op-$RPHDjU3UPW|uPe1qcac>+l+_SHH)3Bp^Ztvbg79+ohrywP1NRMvr%Y9!r_p4EzTG-e91~kSuaepYo(9QkP$ai19 z`*wDJ9qZY|R(7xp`5vUgtOseyKxWK(pq~eNc~F$^(aQt9JkZMnxAUMpdU;TpD!7>k zbn;*xI(e`Zb07SU{X95|J|5W3gBR%JfleO04T66|6P5@>CKqP^YbXEO z$-lMH!M{5Aw=M1I#NYhGZSL_e4|&3K%=z~fZ}|V54}3=d|9%aEharR_4B?1KB%%}qZz|k#$o4=H}MDF^!Nm)vD?R&xWWzW=J9(zq4Os)JjqH9 za^t;E@>7T+l%X8n{G=6aXiIzg;Qdczd@_We`IXhIWdj@elMCqMi5yR^AY&)^PXiU3)yl1&vf)G4|;l506je`jIN&P=b1j94M2ux_VsKecJypK?(f-D zPX1$0=;noPUYP&F+!yO{H!pUg5C7@8;Kd`JpobSP z_!0y!140uP`*~TEV(8$dH@~b-Et=DkHeBU8fAKfBxx;-PV$RE_Jja}uuXxKld^0cI z=gZH03xfYb@E!jbhH!)@B9ZX^|H@(y|JlQT_VAxP|Fyu4{MVKabY?W;_>sv>V;5@puVsGS4Zr`|J-zNrKl(EWH}!fb!x+v;RE^?_2wU*@e-NdybXf4p|S6`;qYy|jZ1t|PyxGsTN(HF*1q4m zzqj(d)!SQpdD|O(z4iUQwd1!7knQbKWP7`TP3&S1`g#|S1o-~mB_b*2y-Q6R(&PJk zr=xdS(9^pd=;>WdoSO6J9|Hi+00`h zOIVJ4A0lJchiJqk4rYDO&jF$@g5H_=i_6Z@thaD;x+I1fbaO@7rq67D8Z*tgvR?n6~i7r z*~2G$_$1G#2Dp(=O=&@EhA^B_jA1;}@%B%$e!9d}{^D=s`fMMc)8igL>-cjHa%1cKO9F zzqq9@Zs|*Z1~Q1jc-t5I{qi%r*~5MgafB0`;!o`4%Tx6Hz{UH=)cA zWp1eDtY97b2(_Q1{DU4s-QxkTdB;b-1Rt=|6$Uh=P+4thhcJ2n3m`}Ob5m=o{3Ci7JE62 z-wNZ+VQ%BiVP2xwFy0pCLl6>HZ(;QoR^G7khLtyL3tHp%!`f$9_Y~GWh3$sDhV4Zk z`qGd73}h+x8FmM|kRj{=j&PJyoZ(*{^8^{fB_##+8!j#B$%HqD%S(O=QHwg%r9N$N z@8M(&*9GqmH-~vFU@=QL$nWSQoE+hfBTG1U67DMZd5BEm+(5Wbe8H~6`!2%UL-^<< zpaj0T@OB-(Eaj<$JmK{g-mb%UMqlB3Fdg4sc-g|wMYiz2u!_xWMPCu3;aiUolUT&X zyaav)(Hz}GY>Rvm z<%?)%5hpW+>HNeT<|ALE?=UM;I3f}Svm)syl71rTCsINZp{Gd6NI^<;6iG*sDq}B^ zd@qsOpr1&caL18!6G=CbbQ8(^NajXbgu99KEBc7Ei-YJP(hdGb7m?gaq?h=XBE1Vj zBD>+p*~m^Vicfr99Zf6I(*vme29rZB2)2PSLRa9L? zJNAXqY(l1J@l?E(_32Ou1v~ zCZ^kod4yxwSz zeq!k-mVRQbV?BC`wVADKLr1Z66zd=CCDuDWqMz6SVbD!%-Ne>SZ1ZEAAKRW{7oY~U zs6#zk`xA4R&mzo=y9_uJ<_XXFk2ly;+|NNsJU0?AG`fqYyLf5QUA!tZWEdkEjrYeJ&qQR4 zH=DV5f4psYd%T@^f4rld;1p-^?s%X0!nYtKzPpTXZhX6nZ)SWm<9mPn%w!`cg(!y| z#IH;>8q<{KxRLnX=)pjA5nmVa-9`Lg(M9}q$P@o}j&O!^TtE-;-E4f>;_D*5YzZO~ znK;D5eI@9Q{U_)}Z~9?gf+4uk1S9wX9VHlpo)SzzPYLWXfvythCxJc^oJ58Me{zv) z{Du2Sa0fXO=qF)76rvLY_mVIJd2qi83sQvQl%y4{X-7wNlThx2x=A>l8O*}I5-wmd zOE}0Obd&HH@+Finp`9gs$$z}zJ)iiBe2Lm%R-*QFqAO-4(oZ7&B+^f!K@3JuiH0+h zQRpaoLjBn@dyGxU{2UrF?pL{CX{l;j5%Vn0civIXB!5_?H<4*evN zJBi#$?(uIBlC&)5B&~pNC8@V3txhfK(g1UlHlZnICv8b<>@uldlD4A*Q(4K+tYR%2 z*vfWxvzP1KL~lv;mh=_6N|uQ9$dOErWHqsaWO5{vBUvNNO=e~?^OAXUGH*^cnz77e zHgj3P5sq>k_nAx&$?HX>~#3aM5 zq|SjwBDOG1t~Evt$ArPpo6s8a35*yEv=oUH9u{B+)3IZ=q7D3^pmy(?J+m)P)6_r zW0{DXNjn4gl6Et?OuLVRxR10tOZzGaNf#hTIyusLce*Udkxq_uxiL4Lnd!_+*O10E zp&9NoT{n8rn}sZ9Da+AAx?ebknd!_-cZPG=Q99pox?4QOt)z1+>D~k(=|kaG(uXA$ zafnB9%Hv+sSHiufuSQMeNw1Ie9qC0M`ZJgL$d-NyvZY_oMt;LxrPoV_xWp#`2}y!^ z8B*akGNdCTI?7;I8T6DPJ9^5H3teTKt=#C5-`rD(}GVJ6u*Ko5L{^mCK_%{g27y;i-#wbKbHyP#5sGE%LB%@o+=vFh@SH=>QrVMRq zhi)=BpG^A6?gDR zWd02|lX(yO*v|t#^CbxJ|0EKUB{cG6iH6>?#6~AsbdtrlmBr0u$%lPqsX=Y(U_V(# zF`BWAN9HWL$ub{#vwRIgvYL@K1nxBvYDC9%xvqhmu#D{lWhAq$r;XZfq%Gz z?SI4S zn$a5j$stD${p4^fIi@lL`^n+9bGX|aJK4ov4)8mF@GlQ}!gF+!L+%{9$>~mV#wQW> zl`{pYNkbXRqMMwRkuRrwIqfWGZ~D-mK@4RC^5uMlSvjBbf>->1mVR>TC#QaLx#e6T z=qXni!Vw-F<D`UxoS`s-Q?0uF5ToZ-+!+*B$qwq`Uzd+^4;W`&#$au zJ)1a$PIBoamwU-|iL2a4N4XvcA-Vl-ZoiwmIjv|*J38Xq$laA5^g;)@`{7P<%aB`! z+;)_EIHPdKxyLb{ADPHx+)(cAoa7W|IgdQK|K=a=qOaWg%B`UNA^5zXwOlObAr?OUh@3OMXqq2zc4$`EzHkjejdH#d4O*6JVZZv zW0H>aWFjj$$V+~TP>e=2MR$31m$wtsSq6 z(?>b)>?>bihG7r+>>%GXX0nv!tYkA=v7dbV z@$P)?Io}hW@q$-DNPc|iIqu?O?= zyV3l=^9Od8Uq|`fiT_4#NdB|vDZg9EudDp}DWH!6F_57^JQ9+O6u6H9_EbQQ0{SUX zni|xm4)y8600uFX5&Xbdeq|MF*??{e$X!4;{+qlZ1+MZJ_Eq3E_i!@>!x0|c6pV^| z1?4MfX9e?;kAk?Bg2gF`d<9oyR>5^_WD8~$)K5YE6x2__0~|z81&?r)W9X=$jtagG zLJHYSp@>95KZRluAKetvO(ESBGQW`dh3u(NU35{XA&u!kXS&goQRt+QP71k~LbI65 z&*-SonjoaG-!1HS3#TLv>B&H5vXPx!6THNN5t1l;p@>MAjlX z$xS|fVm5P_&mzn!vW%5@f00$J#omgnXA^c;WGn8a$aZ#ei#NRG1E2X8gcSXbu(+3^ zQAmsKie^NHqK#-u3tG{J_H?8dedy0L^ikA~it423a_p$6j79CJ=tVAb6@T-J-sJBf zq*y>G^ifQXV&RdcSXAPXnsmri%sz`1pb&Of%$|x>!j6j7Wf;R5iJK`lhVjT#OmD^P zsMu=sRcr(2IFD?_d{f0_D|VlMdC4pERlG9(judwX#oa;iT9{Y70q(YV6Plx=;w{lr z@wVuxcn5S7nmN;i69U*Gp<5QACBB6Rb;`~6Z7L;jcH0VbW}n|B_?1mC6=%p{ghaRJ1(J{61pj& zn-b=iFu#O7m2fvD9-xmBZ-S7LQHf4WVv~Z@q$4Bpl(d(UW|nljC3R4;H~nxUCC4zH zFMJC^N(F?*EtU#LM516$sTi11Dh}~Ug#Jq4)_R{(&?M6z=Sz6B0 zeX;Y>0~pLO%qneGY40!X{iW@q^du%Th3U-XCuT95xg6jUmvIZFZ*YryJixt{einq3 z(Ontcm5GE5Wr|RolDL^NWvM_VYNMAj?xc)9%JfDjWn?ZRQyF>6=%kD;%B*GwyV%2i zd?#hhE%X1mFL=f4Af#*r%r9$aWs_hpWz8*H9<$3%Qd4V zt>}*V<$R~*hG1XiuAuXBzQ1yR@i({8eYyMSp`0GdJw+Ggp7S5NDEEf9K}dN$l+Q^n z@=}1pe2?9f_br##O?f%Wx1lY)=u1BaVjt!8P<|mxSkBL^;sp9Ae}+G~h}`9`@{vz` z4MHk}@Ezd@PX=^TAq&}&uY!CPbX1`p^=U*?TF@H#DxAWs3THXbCCsXzp9=b^pq~nN zxQm`D{L3RAqoWEssu-6{*h|H1=%=FnRJ5Clx~Zs}in^(2enoRDwxc~g&_~5ljAcm> z1nK;*%UFR|!tbILKj+@CV1SlS=Nhl8!3rsL}=WROvFhs^q3B+ec+RRE|eNftfio2}ZindI_+^XhQoyA<{VSiQ4 zuWDyif5-h+HMi;u%&z*Hx44n2GE@sgOyUp^S*q!(T1GPC{nhNHS|#e!h$i%;H#(`N zi)!Xp^Y&`)rrI{#O*I*+9pxP7`HP$U6NFR`h1u1^5s^s5$NcK4NP~S`u5A~!WvTru_E6j1*7l9mwu{QpZl}$WUhn^H_*`sAFy&bL(tI4|Vo&kjuD%Iybn*9b~EN4(dk0 z9_mITG0BjtZW?kROI=y&>Y}b5>gu6xW17(t+3F6&Ug{2K5>v3Fy1J>Wo4QNc&Ts5t zKZiJsJoV(L*OvBlpfla*iF>TqA8)T`PCf6hHw?4tjX)3e+-AM8jKf{ln}{6swsIV| zQ13M7xPX1syUzb--{xBoQa==th)O)%Wc^}PrVZ_ot-fsaWvVYz{XxvZJL`LAeebNl z0^ei()vRM5M>xhw%&u>C{hK`C5l{KZmms8pE*gX;2I-iK-*2#h#VlhvZmq#8%xPdw zgN^w6+`yX~>|iJQZlLc5dpUs48_3e&59Dc}n+7s9IK}HAq+tXi5{2l*A~k8rKxVSx z+i6&q3RK27(y$|4=#HCcXip9OU1;b#ZRlHRI1jlS{))^Ef5+U0XR()tk9fi}UZ9Ic zx@crCjl$3hduY^_4s^!6M&>m#uTfw6;YJ$SOC$3e4Pyjuq|qpTU<~?dq>Dx}G}1+* zc}K@dM;(EKlPPd=5gI*jJOtL?sbPNse7L zsX3Du*D$|jpsa~3HU=RCo$4!67 zj+)*>FHIlu6nE3~RS?oFHgSlLUYhBpncU4%Qj$`Xr2>_yMs<3in`U;^tUvNKldqYM znk``|EAV|cv$tmU)=a+UaWSiT0uqx9vzqItxqh1Kr+H@FPIEmq&p|HSPjekL*HQDP z^uk`6_d`F;?WeijG}ldY-89!tbMu><-`t*>A4C_;k8qTWT;V!5d5%t+>!d|MD8djE z9kqyu-)-S{TTEmM)0x36{OxHmkA--D3-51Xehc$knBQU*YtciCjcjHc+u4cx@!#tX zX<>IQ?(%_;dmpEq8F7JKV#)w0y{0Jv zeHzjTnOn=$TAtQJ(M9X2EX2-QFJmQVFt@e2tuJwvYq*it=C`(&Hlc}(xoxsxb{luv zCJ%13jSOvkJ8h~{i#o{CMptdx(-H4)V=ry&qs?sQv4Bl%K__i=(Z<|1-rmM-wt2%l zWM~_X=)@!uNl4E3nBBGv<*7hj%x~KQH__I<+U`Z?Z4Ype!}vDZ>b~ts^w3rhZO@~N zw!WFRzL~bVXnUQ%f{=E4XcwOZB*sm)OG!HHrk!uNoo?F6(XJAeX+UF|;6~foM>{>V z8^svLGm$B5L?7+8vV&d7-EJSZ_=meZ;1N%G7KF5qhHl!&A};c^m#@8!+83o5B`8ff zDk5L|&6w4G8#~cUd%d*ROMAVvKg~Jx(q1p^_0s+_SJ6v*owUCZgmm~0Gdm>2%ntU_ z!OeC^Pe$BKhaA{Vhnl#L4tCU`8SbM)5A@Mt0gG6I`|NO>zwz!4|M7~qK}bh?=op6Z z#33GLchqCY$>_4!f)t@RZljZ1=+vB6w51zAFqR2SLherU zk-5`$G}(+*vA2M(p48-&F$*#-P}XB zP<)3B-C~o3WTYn}S*U{9-D*;Yy10jK=6CB#ckHX%33T4gx7h6rzQt}A(S5h8=%Je) zy4^w--EMOaU3B}Ghe1epJ#-R0Wa z7IRs^Ui8uZAcr}M+}%&|lxMu;HShSyry!(9Vsz6ZIjNAZhkQMB)T1Jms7eiLQxExi z?8mGghd9D9%<7?^9{TB_pB|UEjGlU2=LR>?Qx84$43F78lahkeq(e77vyzKERKcEl z%FweRcGR;kQ<#P>dj7;7%J~&OAyj4B9Vzo3`Q}UF^tE(^_qm9 zd-?5NGnvgi=Cg>UEMqx8^9!q4i|?b?MmDpBZEVNed%fZ{cF;?nUh?#oqqqC$9gDd5 zUV3LG2f4{darEC?|Gjn4y9w^2_aKHcf*+8(_jF|Ly$(5gZ(QfFpmvvLMQ!n(a+p|-rnyeuXuwD{lgHI=p-N!NhyZe{Yz1na=45B z=J#(#3+$`^Zgk#%AN%p0_V=Ck*M0xv=%K$J`kzA={m*j=UG%@owIF1G9tOC_0r5yk z5|Wb!yBXj+9iW>5atx?IMe5OzMl{7f2Iygc`yB8CW0}At)}xOBo7u)rSzSa0}b{4YLO7XP|xt>Sy2| z97Rt9PjZ?w=xLyy27U-a2AMr58Zn7Od~`D?8L3H2G3;iLP6k!Njs`WMBcm9NE(VQ9 zu0duGGIx;f2kCy$4IbgWgP!x5uR+LQI~lCg!F}k<00uLJ;rQ*rdLHbz2kUw8k4$D7 z)0x36W;2fkEM^JISk6j*#@h$q;Vuu5XRv!6EXR<5(1axdNl8I!(vh9g=wOHrhE$<0 zo#;vrdL#Fck;pt`A#w~^%4#-o0=GKk40bT&CjTJUko!T%P&0;>#hjt$3^iwHRcfH~ zq3&^Leca>F#x$WhEont-+RzR?4fXz^EBFN&hOWcS4Bd)*8R|ZVUgQdPHB^RSk%&qR zVi5;7F)SgeNJDzQrzEA2d6-PY1fWj0-mf^Y@UY(kF|L_jb zKKwd2@Qn_aVfb_2^Dzh+5t=ZBCj(}W$Vv`!;@cQu{)h@x!oEhVMCT)ZWfg1jw_$|t zNBCYx=wXB&M(jctBlfT#U5q%y@91HqyBrz9cZ4G%(XgA5{+5l@%}6;$<|Yp%C`}p4 zV;>{+Fw&il?20=b*_(dMK_4R*u$X1YJ@RLca*UIl;ZH7diFfE`;8GLi+~&8S?+H)yO9*6y9E@)LXl?C-MQ!nLAo2H zK|s2syKCS3;J)_BUSmAtdEamT*MIE;`lcc+=`f?d<t%H24Wxk+JnCG^!4_> z?(e%4clX`QR(1rTe)+Ix{R&cq;*_8?&hA$pXZN#v{i^X5wW&j0>eB#o=+}hiw4fEO zX^Z*v8-eco>7$=M`pMHzAN{<&pSSnh#4+^W?==5%34Qc?!}}oAKOh<@k-2{%WbSW2 z`^(wCB0A`A|N85;za8vv2m5bi3)|VnUiPsc^Y3r|{f}S=`X9$0^mpfgxWpqqiAajO z2c#wgUtk{x*vA27sfqvRHpu8dJMk@DnZOdfcYxjp_yz{-#C-$YH{cXkxz5cXH1Her zIj}L!Xh|#DV$TP5#MuM8Vcr9K@FPF*GrjnYKj_N<24W`$Mlh6N=xCr02I^p-4hG6I z(Ax)|=OViIZ^nlPzUEyJ8WiFqJ|-1uNk>-9VUV2|R1Z5b$QuU9J;)9WGXFvP9b~?P zymyfI4m!g*+%w2MgS>sv4gNz1gYIyT`#j`P5E`5qcMZ-)4sw%^!W5-0?jGC#y$tTo z59ns_47_*nU+l&F2OmU^!T)jrcMf*vVE0AX;Ru~a$R8npgw7*6(FJEme2=pubRMDe z2%SgtM&}WI=#SnbbRIE;;f!DuqZ!LMHlde@Q8 z5r;3xOcu(~1p6{X_93zl>5RNXup}HCB?L!x^h$Sq;dxz?L=sn&Cp<&)R z%sYp9+pu`}?uMl%Eg6`|WTr5kS3jV~rhplBD8`1Z$t!!r(yV=V= z4sehsL1=h1J|QOZ4F8nRNsiqgo)BYW2D|j z9^xp+IEk}I+U1eX9(j>VT;&G#dgM*+aF+)>;wjH~!AoBACJ2p6gEx;VfcK7)XH-e# z7*(5kG@udP=uS^`G0N}XD0?$%3g$3s7CIQUl^yKH>_^Ex>K|kt^%yxuJ?DK88l8wF ze2zJd{u2F+Hk;A87|CeHFrGF8zHgV8HkiG3aYFAvej zXnl-+fgZ*Lgo#QtQscLGOnPJ(Qx6@C(ZQG|G{f)jnAUttSH8zCj2X@dWF8~a7Tp(-_~MP0tZY{vUm$LnUi9OHkdH^UgoD8^zQlhy4F8 z{Y=o$1pQ2S$NL~OQBM=2@F5?er-^!+m>qXdEK3C{Qw`lrtV07D(j9Y}D8ocuOdP{F z%x9vVn0SIy$TZPDOuWNO?8HPFCPl|QCYi;gRM?YA8F2rkoP13?I`S>L^PHTCQph*i-%Req6jlbIDM`@tlw_nt&r{qv#hp|9-IOe3B?r05LtY9{ zkRlYL1SK(}DSDbxj!yi6`=<0~5JRvhQ${m^NvvWGf1#r(r#Z_xE(D>e=08=2sqUMq z|EcCZwJ{y&Nk5!9bs9RD>a3~j*ogC{Zf6&JIlv)~qNk~5G4%}YntG8d=x$n5tOl~ZgGdZ+~YwInvsyq*o_(4$%UPmQ3zRP*n=6RX^2cSbUC9P^2{*v z87uJq8Qwp`%xCOm5BoS6gl0N>W>&J16FWE4`7;Ypm|_&C6z-X6-)5GlB9*926?~sF zy?^FlA{d4}nQ3k_Ct_wZXJB44H?Wy4{6E7pUh;F`9o|BWB z)S@mrnPWHSG{J7p>CGSX!>s1WH%GoXx|y>avzqfK<}}Bg=9tqQ`R1m_U30%6Gud$0 zT>Z?|&s_UDw;+Yl(cI$LnYp@}tE;(snyaU|dYW4qUCsRt8RiaR2r|qa#d!2IcN%({ zyN->>GS|+`J zLmcGzl%@q9C%e~gp(4(9)hH_pEmgcf+;0`pu@n>u{WH+bU$Z(QJw3tG{dHn?*^ z2RhS*u5{yjCS%46R^a{x?qA^k1zXsLZWruD2Mexoo%=y(VM4N#licK`92KZcHNL{x z3sc1)(MKEQya!mgrgx(=t6R)6=pA=xW(fWLWkexA}jD zhde`1%if}=<%uw><+3bKhh17;i#phy<#uOzW8_<|gXQM7d<;5Ru7l+|SgwQRI#|Ay z9qi^X$2f_7S$-WeTYiUkL1=~DUD2Ahw4)>6(uMEn!H@jJ&-CIq%wnS(%GGc>l@*G(xVG-LVfVhob+L`d_K{ zl{3-%O5e&#eXm@C-B`IQ2(2>XRnA?N0CQfY+f~U(NgC3VflS!TRhh{~4ss&Ps@&wI zAzkT)EUS8=k5#{;i&X;{#4P487k#WUlT{bF!gX}N${wt;2df?gp+6HM&!4F=_dknL zoD!6xGF7R8d;k0a^Z3)VLtH*XH>>U4YTc~X z&FbWop*{`J{pzN)pe^nB7Co#Uj9ILoK&J6Js(?_aI^)vH;{1~#LE)t9)+4Q_E4 zJ*n=sicp8I(br$i`JRbPK^K4N;;%^N zv4A7U@Ylb%|F0Lk;x%uB(AtkMv$fI5jvZX<&b97b>w8%1t!uq?ty!$?fZbZF-?jQ( zyN&JaKo@Iwvyc7!jXu^MMIUSRvGyO{2cdQLV4Xc!XAjmTB{^yE{&kt~_H|{@`??Bv z^Ez){=gsRH(ur^JU99U)Pjs+u5>uJMZ04eeb$gL(-9gM}ojmL0S$7J3tb55DWLs~K z*MEp!*4vTwGOka>Z}jF5`Z16}3}HB<7|l4wGl9v-vwj+8vtF+C=CfXw^%t<8>#uN~ zo7l_s4|vM+AhaP4pQ5h~$?zMoK^GfzvEdsU)07spLY560r1)jN2ygf>*reT@czHBFu+;Omt!pn>fVfGvwKx5VP4X*LL&SF3a}1 z*oEy4Xhc(5(T0w6W&nfH*Y+{YM;F_5vHduwumjuw<$Ms@Aj+_$40?HP$V>@bHN)49(B9`lUn=wXK*cIaV;9(KGBLOb=aGYTIO zl~2&c&Rmqo4(_Z>HNL{zcYcj`?`%R(en#&*2VpmM4rK&0u@5`vvVg_tVCNz1!%q9K z^B>Nlhn;VcYnS=#`T%)$$+OFRcIjhR7P2GTuDldLFT3pQE*W>#W)-Vh!#XyyiLLBl zH+$I60S5E_Ul;_i#pG z2X>EVB3u3M|NsBneaNs|AG`nK7Pq;Jne8^O-Db7Ncd*Bud)&DvJsGHqS?n>3J>Rg9 zMJ#0nE78RsUF^}t9$oBNk1qCXW*ghtg+BJ&4?=rCz#i`XnCQg9`}fAj+xLD>9`d96 zy=Ac`Dnco~F_ z$#*Oz=5wqX`#8Ws4s#5BA3Mbvy!Dv39`n{?m$}AuZgLCvAG^nW9wE!IXZ-)JSG?gZ z?}O0s0P{Oum?9KM-s5GdL>0cG79Fu4$Gh+&{n5kmnapMm`Z#V*$5#cR6Q7cRgd`yu z$w`I1IpN+D8Tk@>b0Q1bF`pCm=0tAH>4e=mp}!N|_ztr;;r)4JSPk8?cZ$I%a2%YrqlXm3fM?}L6PNu`|p0pz;WjN{XllnMW0bQJ|ioH0g zgOgp6=j8XuaI!D@I5`L%oOJiemHf$Su5cA|I{6>Bxyu90;*=bxe6y#%Kp&^{aVi_K zoYKQ79h{QoR28aYCZ}rCj25&)o>TIi($A^i(8(#CoEnNur(`-M(~Pqj7dykIM!5 z`KP1t2{DO9T;dTQyL37+Ns-~Sdr#M+0rul`Q}l4U4ISys07fvHF-&DH%h<>kwxWyE zH}Uo}-h0OVXWVthPMpbznViW&c5;!I0{Cvu6r&05KVueWTGI|0&UC^Y&dg>r7rDe$ zZs2=8bC-KT=&ZM&O^fr+I`6FW&N}a`^UgZ&tnFWd=27wy}{SlF$LcI%>jx~TVyStv+3DpHB6 zG{-Jo?80~0^NaFcl=Y&0x;TxQL^6+sEJEKG|K?T^_^`n zTiJ&BT)xT;ZgH0fJPblt%;(CdBp@;N{E9ull9CdXqzvUTuPf$tr5d`pVlG$A<%%w@ z=;DeluFS`LuIS^+QkJn2`L5{YihNh(yRs3PuDnDyS9EjLtgf2X)sHc!tFehoCUTLN zd=#ewI=ZT(t2(->qpLc)s-vqqx~ikAI=ZT(t2(->qpLDp)zMWMuF7y#M^|-pRYzCP z@gfLa3z3>M_{Oh&fnB*~SFUA82iIEB8RuRb!Dz-|Pp(ZtH`ms39Oqtp$NM03J&#JSgN(Vkx!gMGTbm+R>1MoeV7QJBF*Fbw;8!~1T?al`j|LzWw|+?a$c zH_YkAOlC2Mc^pFjH?Hv?x4Fk-o?<39d_(`mCpoFm%YR>z8=3#B##hv&4zmB(12g#V zXL`{a^Z3ub|JjfK7T{g~En_9CkmbKyxcla3xbtQrlH%^0?!M{nn? zUEI{gO*6TDGJ>qsv>@xyc>wRL73lQ#-^g(LQ4qTGDW8#$BqSpxI=y3$?$pKibH}-N zbb80E?hIfsL(%CSGrO}B=ic$AJ375%R(HJXj=j8NPwsfzT{F9z3+LYTj=ME+_T6T* zq$}Ui1KIBC=I&Eopr5z*#}dDlJfy7xJD<(_xl z)9t;qq{H`hFC*1xfgJbRU{~*Tq8s1yBR?|+^S(EMnXG3co7u`f4sa+4-Oox6a*~Jq z6u|rM7o#MlC`&oYQ;8~6MW*}J`HG$lWf&uocHg}3%W;1j+mYk`3C;(h z2T{?}gBZj@PY=xffqow7=YhFAkn4e54~iq#0~sEe|AVjjhVQXs4}QZwJg{dE^zdL3 z^YC3g@a;ZWhI=2J;tc>kF(oezuP&WHMVSO#4@tVm;;(hhTY_%j3X z{)eOalfPKY1~y>^4|i~olbpu=5AFNIJKW+0iee`p+sVhB_=#UIhsQI}`D6Dz-pLW%_1N1Vd;4Q=e|&+V9Nle9jU(94XJJ`)W4sw_yybVGx&GKaqy!B;G>foI(zo9Wr_zCZQ>76gl z>7{*n>CBhTeCf=W&V2bd{{^8}pJ7I??ER}>`JF!Wr62a-)j%Q`g8h7DFJ5`WD{pw^ z4X^CzD|fs)$tlioj*IB<)eU@`uXOo3DslJ}cfYoiuhWx_!kFu8bA4R}bA7GH*Im%t z>+baAXL>Omy}h2zTo$mHC79)Fy}dq$T(3`Krmy9C{UQjxasM0dep3ziys1eYbooY? zZyNFgqj26E=e=>>8|S@o-W%t=ao!u}z0FNt@{u3A@YXK8ErFeVTLwG(*4y4z#P{~L zD(-z-1G9YVU2lgnjFIT}t#02=!5rUuyi%=?{8@67w%XvSgI@9gZm4Q#}Iy|c6LcCi=x z_3l{^dLM^OcZ_0aSC@9^ID-uZql>u~0KXTEplduP7i&7~k5#3TdV z>A{cu!msq=cY4#8ehg#~Lm0{kMzM}V9Of7&In8-4a*Z27I1~_#7`Qu>fD~jT4<#u> zSt`(oc66XKUHP6Ln7~A)Fr8V^v%K_vH9pwaag&qdsu=~T_9WIZ1!j-AUSJb8s zU5LPWVdsUN7j|CQd12>;ofmdqlq_T;J2}WrJ_=HZqLjefqLiXE<#2D5id4e8qV#6~ zgVAji-9{P9c)T&nH2z{MJJ`wJoI=M@?(&MaybHn~gh);%^5Xsv-2H*OKXC5{Rj5u) zy!Qk1|3I%F{KT)A{Re$8`wv!f9B=;MAI@@~OI!}ZAI8F4KWxK51~G);*pCmrR zz@C@gW|3hbeiH@VLWdj@8!Zw^ARj*Os2jP#ye8|VdBsQOs z0K4#Ue%$+UVaiaIx-_K|cI#tr`S^Qu^|5|F9?vAEGK1OdWEXp}dmkU-C_4Q3UJ#BJ zjd`!{rmywKSTo8^fTXeldk53|!;+*Kd`RJ)hLwdd-6IsYg4szmM(evV6 z(Y-5rVT$5i(Mw`aqL;x=M=wuj`XER20r-}p4`mc%n8;+zIr=8HvW>IY!{`^dgbt!V zP-Mq`@LoL01@9UbX}95K4`9pBR(Gl9{|}YV28z4Q$3P$1v*{ z`#H#UZgLAbV!R2$F;kHioyE+^m*^{|zGCVpW?_mUYs{v|7qbO2#_Wb1F@NAExvQevL5(jiwYd19GUtP=Rmi&d7I z=rLAZWQrwItTuGvM}DRka>bG>mRzx9iZu^?#ahD_wzG>XTt`Q-eD|^L^N6Rs2*RlaY@C7BYvvK5!Qw>?-v_uzi+R}mF8Nx6|GKTR?Vgnn|MI2qk z(M6oS?Bh1Nh@*=*x`?BTI4>}>xMmhtp18?LMOtKvn~@4sqze9TLR_I|p-! zyMVqvVrTEVL~%Z z`2P&AF|S0rNo0=`#o<$$(VSMa#a)To(~(Yep)23x{zUFiWKN0fRia+ZVLk3lw3%(} zWFH4Of{qf&k;r@!JwTqsVPX>xIT9xz4e7~4W(v8Ngs77=}BNjA9Jln8bUM z9OVRNp5!bSxy%i8p48itMn}&{y)kJbQjv)Ql%)a{@xG+qle8g?X@)#W#<3}h_hnG}SR={}i^$rAH9DbQIm z^GIeM$ub~&vMl&^lI6g@Cd)%!@==gN6s0&NDTB8rE06aktAv>*>xQ0_$&pOY$@H9T zB;%OCRHm~QohRFfnI_YBGBZu~FE_cvJst+(CSKty`;Os)gYW+Kk3aQy&lrLJG~y#n@M_ir+0UHcc=fF z`ZVAh8q<_!G-nXg&_{Z6N|!qmILNCYoG}B= z%jmp}&dcb$jLysGyo}Dv=)8>Hkx}L^?DiM3eUX`L05)FAW$0QDM`HY0v zugppL9Cu|-NovyIJIw6v%uO)I%q?h5J38a8%zDUd-!hM2G`h^}?#%P}lfPKY22S9u zneXClneBV#r@Y`b?}Bia6v&Xp{aMoU1v<=wjw~JdmTt(Br3bS)g7dOE zFRSyiIxnm9vN|uT^RhZGt6k07A3bH2E$c~6^Dh@LldM;Qa5kM~D}wv74JLwNjARVs znZRzmC%e0{%aUC$+08Bc&-}{om|=GF$vyyQWp`HgAq+)_+3iGjJ!W@qcAaJSj_gN~ zFZ(~7br|&CQ25Rv=`pc!eT)NBE3%%v~gJt->a=S10mt@9Ub9-y#V%?BJV_|FpcRrH}4+2Bky_S%X<~`%zFpf@;>Hi5Y871 zJ?8VB=1WRia*!ME&F8)Os_-=pXhc(5&>DM|Zy*tvvwz1toNo+cS;JqfXA@i5!A`Ct zPrh5+nFc{^6MwRe)8)l zzkc%TC%=C3>nFc{^6MwRe)8)lzkc%TC%=C3%adO}`Sp`umi+oDpq~QzDWIPM`YE8F z0$IpQMe0%?-4xJGfo}BTclsb-0r?8ZS6~TCS;3#^rhsk=Y(SO*vJ{Y|fGh=MDWIDI zcBx(M>_!6qKo8AqrEBl9Zu5cCMhe7M#f}W;2%sEJl`s%UOji1y^HU1=k@@ z!HsO<8n1ZGyC7UB#0NwpIx-cChi|1&R(vakRDPm4V zJ|`LJ(NB^5ROV~Gp&?E9p5OU{e#louz9RA!S%!HPF|Q)#RK%Q$m{AckDk4h}S&GO~ zM3y456uHCQAY3#Su`#2f@kvBdWGY&OqLiRC<)}y{>`763QgjLKE$ZH)fASaWac|Mh zm{HN~>|i&0(NEF+9N=&CQS1}!OEGzh#pN?}Q%sg(=2a{;g^;6|9L4N#u^QB;Iqeya z85J9YeJN%}#ilTw`7A`xE#elB|g5X;-zqZ@v^wT zcqOV(9WyH4iZ+-_@xho)akD8t0y|t>rsA>`*IRM(D!zh0(NS^z6yJqB#pNk}3NtHi zR>f~~F9?^Asf0`=WGW#~iG-vjJ=w@f9=@VB^=LpNn$m*S{J=~inTHG|)?jB!m{p0L z>jOnfQ{d$Wc;`lDTnr$#3bxcl6*#dSQ=C_G17u zSb$zinomhtN^Zfflsw64&TtO1DS4OsJPN|4bWzH#l#;bn5|WXUR1~HzT^WTLlp4oG z>_w^RxVx0@OPPDA2SK>>heXAhrFC4|4wm-L(i!o_(sR&RY5P=q5lb=4(koew?4{SS z5#K=Rt(b3VotECkZuYUCzd6iN%)GR>mi`CtEq#`MgK(KBm_Zpi%J?SBm_Zr+m(hEf zFVK0J>{OsK_OVPW+R%;;{DRKQ^rkO5FXQ|&=efXTu5q24+(Ex(^ik#^Pk71;Uh$eY zybHo*(@~H@6r}{Ek*91Ws`C}?`Hmj^!0!xV7Lm+lKDsNrfz9Zx?9L!u&W@K$k2jag zL>9ceTn=)RkNn6`t}sO?PDx53Pq{LbqZ5D7hyKV=ZU`e8%>*W~3NtLX1v4yXcI9q! z551Iogigxoq?}I5$Huo=J|3Tu46`bq8oA2LR9-*j@)t3)@>ejk@;A7JeC6dUZ+7M7EB_=2S4fKesGzF~xzSYx^Quq` zv#L;*@-(FdE$NC(6}lr+g?inGvfB|TM2g{~^4BO_msnQY`F7kQDtl37oL*2J%(0dsXyOr3zK4K`rWH22~o-oR;XP%J1l>ikVg!&m<-@4YRGXfZxiX5>t^M`GeVbXVrNuWC_c0S2g*oeadI(xLOjD zk{r8HEiLKDh~21`i7c2wHTzvH2RX@21HPpT-_ZjZs@aKZ-d)Y^RU5zz7O)sus;yxQ z2YAR6p7Da$ybHqB&7r#YRhO~4H&&OkdKzS_E?e~yl%h0csYVTI;ajTy6Tcu!_1_qX z8B`yNeygA75?8r~o~!?duB+eSE)S5ex_s5`OLh6GzY4-NQsEn^k&l8Dp*Usm+gGD9 zcB4jX+R+~U)cBn~^hGZdN>0fcJj& zE8hE+nSb>U-d8hBlpqMc^q(IQjTqRWnsF#bXNGW*E9j)A-@2N&xXnHEP*V>z^-$BS zYQ97lHQ(|+2-h;NS|MbtWoP{R-r-t0sbxmB%%@fbbW%(9TD7Umw{$}{waltkKZY|O zZ>VKoYAt08+t5v|J?sy{wcSxWGg-)v->urYF_YS6Qrk>w7o`Lxk)yU8waX(*?TS>Q z3hu8xkU{97whXmLF`kJ`!+dJ5V>`Rp&0)^q{dM$Q=L0?>8al2Mi!`JoJsHV?taa>9 zoodwJD{9e@#x$cpGSwN3Om&7b4m(rF??;{6+~Gctc+3;brp|L-;ajTn4*BZJS2qgs z)%}=kl%@%e{v@;65~j&tkT>w0H7k8|re zx8DEHwX^l?Y`vS@;x_uJcP|Kk9UuGh^_OHN2e~OgA?)ebC22qlTGNIu{Ky{+!`r@I z!&=s}iLGo$uCMLF*Rp+mj_dq~9QD1qzTWFc#ctI1*7~23kiyv0`ZCm)p?)bUqlfx6 zn2z16KbyJCV?GPfdwspvU&c!0t1n;uzmTu~M)XquCHA5I+aTN^APV|#@CmVri+&np zK|c-hAy0z})ZuIFLj(KSpcCKHjqdbhB9oYktPNysAZr6z8|bEiSv8R1nt&#aQszep!Xw;VWbU?3-deD=f(PN`o$k0fJM)O$CN>&Hq#=fD(cB*kS zVi1#9#KAlp+posh{iOdC2i5N_&>rctrCO`XxyTbq80w>EW7)3&t38=8Jg7rdjXUYnYA)1T07(_Z|>AM~Xk z{gI*RGIp|yy&T{W$1(S&-q!RS&v?nJAl%IRn)#-ic~i42WFrSfDM2a9qPu41*la$F z@U~{|Yi6d+R_HH2{vjU`4ZSvxjV_ueASveE zJTC<(NHNT~xt(jSqvoCI%J=+$ewvSF3e&NJ&1WNLbH6FgWos^5^OIcQ5|_D#9-6-i z!YyQJAxjIp*uoyRaDR*Z6ru<^X;G8fG{W3km{kjRwwQ`LTg+k(x@xhIE$E@ee$1i8 zId1Wor$M--_qMd-Et8Op6r?5{S@C<;()(Mwzhyru>Knv_j%kSt;Px>*C!RVsp zOk`=PhnDNv$Wi2JDNoDm+~*-rf^e(&BtoWEGPO!hF7lv*R+W&WRUN+O8{FHWy24qBT< zYdKoW(OMs^-Q9W|sEW&rt<}$Z~a9iiLjY%9n z#Xhu6jPBd&yKQxx+xAC(;#YpB5Byv9_ul?{CNdfQwl~}MI&Qy)waC!k zT-zTH!X3=8LzoYViu*h0yMsA)NK1P3)4@01p#=7-LtXUULEjzBvBR(Y&L8NZgC07J z#M?Ve#r++Yu$-0XqJu6v>_G<|{^1Pgu;(4_az6-n`~ball%=B{I;J2MX4Fxhj`DQ0 z?;UGWn|k!*XJqOqQ^(%e^^OzJLC2-Y(QzFc@!QkUy&dgz$17atCU^LMhDSlTllgSY zf*t8(M>-X!B<9emHG1#VjqVJ_x7=w2cA%5HJGr})dpqsKU7g+q;m&&QoPgA1#rM+L z*`2+ua{&rd4EJ<)PiJR!9>aL_+SzP7Pr-aUPiGdhnaezUN1Yep-p=0JS;w9A+W8(2 zdBStvAkVkn_^loIHaQu{#Fylz2xakG@@-?9(VSN76ylXqgBS%-~cm0ps=&h^Xy6Ua#(;(a}4c^nO7y9ou z1O0cK%K{d&gnxtZckcbp9p8OTeHzjP9e$_7?^-j8EqKfKv4~AP;**G^d`@}3XE@7Q z!JquadN#2c``bM+WpRG@Ht4;3C%W(*&gniAJ$E;^9?3{fD$+np9}42m9|qvJ;D-o?F_JNi#W_Ei@eenGaL^ zPXcmK8RzwMUQg%sbY4&A^>kiO=k;`6&+R-6!at^C;PVks;56Mg@*mg_|8^!>}3ApC1oa^qY4^$+^cA9;Trg8le) z1e>`VgnQYaUWF-wetMO{ZuF{vetPv}9;bMLPI~F2mrj1u$!~ree*1`gv|$44uyeoJ zx!<<3gWY)NZ&!F1gnv&=K?+e6bNRhA(vgub$V6tcU?#ooLvQcy zornAsz`J@oyLU@|4*<{KJgj(z0s zquW01u`_+T@Etwyu0HPW^Bd;frym3Gu0BIC>pr6y$3)Df&jvQLjh*aaFVBK--?V&1 zH{8+J9ev%=*ByP`(N}kU?R(#ILAYOZPWE|9ij+pr%9S!PEPjoa$ z#zDt}@Zb=sNke+<>tLA&XG2eeoin%edw>qJoE&1XXtZY@iqt#3y6a5hvmi&53@hRX5h`kBALfR zmf+39WcF`ehKJjs;dQBpc@A$xQ(EAh;iK5f{UAId4rV#xGZK=7WSG~8%9zava~a`H zBldEDL--~~$UWj@5FRPx$ec9ccY4zodo*$|dKx*51?=Qv5FQmG%!hnTbYc;k!n9>9 zYp_?N?A54E$USNY&KdPM2#-!hHKsBR-S{^e!=vrPXt_u0ceHy)FGf$Jm$L%SwHe#=3v3e#Yu&tPEqn#6FE}P9OR*fWZu91S9e0 zv3s}@gvXiDIA@J>);MR4bJn=H#3L8pGcF$mDME2d&JIvVAm!%dxF_aaP|bV znP4^(d|MOFHW13;ElVzRU9&?>M zft@@I!c*+n6mOi8fW&-`_fB!wluGnqHvaolbTnlz2ROu0bT&003-vMAsXzaZqPvW? zy6)BnyxfbBl#;H8E(s~=2I*G1L%O9)y1Qf34Vz7)gwh?--7SqY_*}eWT;qH>{(twp z=UjYw&lsEj=w~ii1HgYo%68a6iV_|8^P>zaJp*l7Ajc~37LKf+A z(N{zuGEs?vn^MTk!<oa*u~R<{4&O_9_sv z{C`x!TgzuNhj}by3Cmf**+9sOAl_V26+Nt|NiFKqfQF1>3wHt`D3JvxOxfF-b^Da#E0r)TF~qVVTHGR^$!)8Q%+QM@QrgGjo{Tgqhdh4GRe~YuFs@ zCd_Wa>?Tb9FuB7H;CB~x9{IyA2SV1m*|qg(g>S9Zm%sfL2xRd;eP^w2tlfz2*B<2} zcX`3*KuCBr5|S1@gqu6O0<~#@jN$eW?z{emS4j8>Ml+6yOhG^4vzW_#7O@oB!&hSm z;bsW8gYd1GC447-i{X0p_r5~H-9xy1;U_qS+YPs$@V9(G)^%SIg8i>E^Ez49d1Kv5 z))3AHHnRmcx;_qtX-FfQVy^Z2T5lKY?PC2*WLWRb4c`)lEbG6wg#@el3?LN~Xdz=2@G0%9(Yu@ob5VG07)ti69TbmcN1X(w)!f#>oI_zQdjX=njZ}85R z2FSUk3C;P1Ht1%HUbg6Ei#=@B$<_oUCK)Nw$<{Pfqd%+B$JXQg%^CEu^%9o@A-_k# zoWI+_?=t>AgyD=rAHPpvBEIwc0d56C{)m7+|M;3{#3VLxC_;PYu!EhrsXzAOzyCvD ze;h$K+cKb=ZQbcXZ~9?3+ho}$%QoF?)6I6>Y|l;(a$zsq^P{irh0)D+-E8;9_6Iz~ zPPW_0c01Yrnm2)v9lF_}n;qWS5z0IkVlO-FWrw}&Fzb%1*x}B2^#bWe2;yB_VzlUc23==Y8?f^S-2{ zAQh>pLSI(kyZerCoWD84c`op8AY{Mn`@f?Sm63OUO=?k>dh}vCn~-t8|9<}^-06P5 zkNrB@FXsWh9QYqaXhdV0(UR7*qdlRV2!tH`3Yibed@vmu$wD@=QyzUC9LNF|vIP4( zXmu7o#Ml_z^okT!D&I!S@gMWGv&D$Q1No8$0K4q!)z zk8p;|Jm4Q5^DGc@BqH{7BrbM-BoTIgBn2`Zk?Dv`N6JtRS&rD}kyZ?53~SKWk#%fj z3xBW;J3aD(4}p-QzI!woDY2KM>BxxtK5FKp_IlKJkB(#%<~%xq$xOqXN8R+%WBBe- za~yrbmv4Uxgd7VHgKvm~Y{&F;Y&?^gitikoiN21_Wj;DPwwPrsXBDe4*RgQSb}Y z(U{h>Lyi;O8NdkiazZaBHn0huoY2V$eVlM}Ck}CxyU1|D`zO4A!uuz`A_BTOshg8o zk>}+1$a69`O=wDU{Ju}haZ(>AJJ5$A48y)ou3#lHom`9iI4RRfSxz3|I43!cu1?-U zS108;`6bV5?CkHaiAoG)`dg;IW%^s5zw=OnQdFWUHRwcNbn^EUrs1~!c3XeXVBX{?^HBm@(potAE)AzfP~o9sbnN41$J|)E^g#hL-cg2Ir=%JpHuRj z>cVK`Ipz0qY6kv&JEfyj8~BSo?8UB5UEu+bc*1k^a_UVW85Q&d75nJsHSI6`Iq6R_NtS2f8BHncm2BW-6iR=8Qd^k>$)r z^mFDIC;6K*JmfWR`M~Eu$l0&3%d_4;tBGv~Z>E;9N#r=N4Nh|Mpw!HnnH(GmMUXHI|9 zCFGp`&zbdHKl)=2=j`F!5QgG6bZ!m1*~5MgaTK$klk40CWIFeXPl1s0?)bdf&&zT? zE_QO>%;yVIgrbz77R|7S^Ex;$<9T~H-=(Z$FZn2p4ldTF32yPC4lbJgqAV8&GL{KUWD0h0 z@ptxdfWydn(G6a-gNyQAe9JpN@?Rk2QV0==M0#>j3~yd)iZ?Im{gU15aVJ;Y>6Ob|;W}oya+gP# zExQ8uVp7E_IPa&I=VKDk&Hq|*K~AE zN7r<8Z8AE#rlV`K(9t#hT$_(f*K~93DmSp_YxnqvC%oj}K*;rl|&NP{fb^P!jP zdbwVXinKr{*ZVO58Ltn;{;tb*UAF6M31&8}m&+jL|7J5LvYKPq(M>zL zX-7BDa|yR})2?pm;g~Vwj8(bAj|E0+~;8+Ve1_pG_9u4ukx!-}#bVZ)~?)|=-xNq+Je{%+J z-oM0Uu5lCZ-@lEW+_#VW?%}?j+?VM=Ty*guBU#AC_vA&M2X^y7HxKOOfea6t(*ju@ z=;DDc9t>a*)3Kum`gmYR4^|PzI!@tkADlxc53X>X8-b9A?&4vPNJJqz-w=x&$n!8a zKcJt7GCeFpBkbp4Gg@L#58cbd_H4&49@@pjJ?v#42RO(Pj-tPZ`g4^H_+U9_i`PAr51o zk7Riy%OgEKlI79MK*&Ea$%uFU@y69{<{;9Kxq3l*~AvMvW=bm$!>K1 zWIw+5MBh)$_{5A)-0Ks4KRJt8pXmIFyM1z%>$uw|U*5lqn|<EFI^WtWox{s$takEeBVJA=R;%N`;;;FlRI)q`2#J8V*`R-$$q4TG&c*A@2 z`Bb0J^!d!KK69(jBJnj*(CstbK8ryv%2JMsRG~Vxs6#^2rH|ZZFSoVK2{Rd2T1qpCHQ%xAr13I(ZSDL?j^@^1P7e zMON}+KQD??3YlKW^g^Z=^1NtIZ~8Kn5sYRzt8kw${G0MZS1;V%i$B=Gao+Kf{{kT| zWq28r*m(D4eo9jfznzyqQ-}IAqA9Yx^xck5>%ijO=ylBuUgTMk&I>>6Pdzv`&LjH|}oA@^anbE_)IdG@{=Ei;g+lH?A?!Qx+!E8cVz(UOb?*)AK zbr8FLZP%}(5`$Ri`E?e`;JdGvvVxVY!ror5Vo}3_;=uqUf(1pCwXvNZ`{_Kviw9-TF?^r^`<|g7{hobVdghx zexu7bZt0CIZ|wPv9B=kx&u<>^kS}?j@siiL`?oT@O+->skczaVLl)($=kJrvw_XX@m7wva=ew}txn$VMxM9wygkSv4)Y=q@-8x86AgFwPB-u3BiB1O z_fDpFKTv>z*v-58xcPUDX+}?mFpQDt=be7u>F1qX@9gZ|7UX&-*E_l1$@T6Qx4DOY z-s$I^e%?I~guHkA@8crNd;PrE&wE+kr=%FgDTRLC>*u|G-dAP`%UQuny#HP=@AdND zt-SZXznc^CULWt>$@_ii<-JbcAK@s+_%{&pAu4+LpqCGN`4A6TJ|sbo4|erIFCPk1 z1bg|=gyy)L53T6ONJir~_`z@R!xW~o6}djh_2EzK>4Q8U~`XtjQH}mNZI{Ng8Cw$4Jqt9;Uvps#5<#S?^VOO7Z^tm`C z(9!3zRKU%A*3sus=CP0^EM*xw`@9OBeb(7$oqgWGX594WKhWD}nLfYcJ)Z(0{{;y0 zHG2B*8)B1*oa8}A{}n}+|EkfDwsfE)UC_;c`uJ}uGnkF6|1Cfl|G8s-uP5X`yZO)U z{&#|t{1XTUA`^=od{1tEpa6v_LLIu%k5J~ZkR>c<6{|VGEqwQ@7{nwt@kl^ol8}e0 z`0iI7=!9>7HGn~kXChMq!4TO(;t-ekB*J$>l97`Ck%shSATwFWMs~~XNz8fqh-@UW*64Cn+f22HSj%enHZRkp0MxyhG?jWMBBbqPb?`&r$yV%Py%p36{-j8VB zh>v;73qAybks=VAc*MsYMM_6T+)O055J@kQWQnAQNcIt_KAn*#l01=yG7h&8X)+tx zf=rQQinN1MoIwYX9wA4h*SzCnAQ;)Zk&}{wRHVh-MwTIRR_rHoE85b5KJ>#LBHO*c zI~0r@hMh;=&moTD1|xervbQ69_v^3l*4LTHLN>l9H-oXyuZJ^=(Trg{X8YP~Ur%8= zGqCfo=P-{29K?KIU*jfsxQ|)Ce#$G%9OWD05EnB?F>4evMyW{?n$rUFMloX)`;H<@ zlyOW%hA1*b*@}*%=s3!s>}DV4kK+9(p8~ccV_l zY*Eb?H57A2)o;`tT)=mu1#vgg+;6m~#K0X#b4Ss18m$bz8_j=swm?cCnWO_)e^sfne+uRKWj! z?DllRt;Ft5FU%TyIi~}`I061gD$?TS;<&juS;!abpk@`-p3XxcSj_Tz3|?IzLgH2Iwblb6PTh5sYRGQwe1m$GOZku5$~! zif2FZydBTm@pKnYcky%=FDJRki}&Ldq9|@5o_^v@!`;Ta!(ATm4^Mf4KEE}?w|e>3 zfAehmz;^d^3ItbP~TBHStFLX6PdR zP25I&`QqQ_5%R^CFTQ;7<%@48@$Dr3d+a2>og}c61a^`jh+Y!--6yb<1ko{10y{~d zp9JyvmINfE2sMx+K`rWHKMBm7z@$ZFdTbIFp-t4#_S2g*}-4zW?vwfFcC>e ziu+8MiqxbdBf3cV9quk+4!$Qh_LlGm@=*ZYBDs}Nk$*Mk*GhvVeUlUN@VUtqw!Xv@l0Ye zQ<%<7W-*&NgrbK;mvFy{u5lB4O(aVqSrR?RJ`+dhTN0wT#JWnH88?!+IyL#3I@G5j zUHKK=B<_i%3s}fW{tE|$S6v21> zjhSGwAMyQU6>$5>hBJX@yx=9TdB=M`1%k-~xT)l3N$z)-+$_nX5FPU*|Att^#%#&+ zQyKeBUY(!NY4Qd%qB$)Yz#!~3xjRp8p5*38ZkNg3cJhN9<``y5ev13pYw|}tM%LtS z`49-Eu;Uc*Nq}xsWFrUiq$q)zQ@FJhcATOP{qb8%;r$eT11a2A3SFj{%Tm^|6?;t~ zQwo_<`hH5^PwD$9^_wy|Dfl0$NJ~00k_rC?q|AyODRbi8l=hgiBVG8Fp7cW>DTg3O z%6Zsj%0;YZ6T5L+DZk`6#5pc9C8`g^?$9 zS*qc;m0FI}a-?p>Sagxv`>Fl5Qcq<~y>I z9s5p`i`@J`J_=F@Inww&rtxkXdr#A!-x$Jh#-NWhlaV7$80%QiHumy2XZVui0(W_U z-$j}yfnZvDNgIo}#3vC+akFX5(-ZqnyM?XzZdx;@-G%R`-N)@fFkJ}IXiZz}D_uvr z(3S4=qAzAi=l7J(Ea?U@6!WATfqP3g3bUo#z(EdiloRMQogJsM<8;@!fxV`8cj+Tx zuj$Q`-W=&uk&PPsOl|BleFGZPlpe^HzBjU^mnFR{>19a2h$Sp#1?Eow7xJW+BmHIW zaF2(9U(pPhCk4C25)B2 zb%x#SLFXCVR|Xj}9Oeiw1Hp`66NTu=kueV5&!~rt$w^5*3gWghmZmcGXh?Gr6erG#>qLYj_xy4-`@DERU76@k2NhWzReM>@;AXBCk=p<7y zN>YY$RHPE~S%^JkvV%-3Sc%Ru=_`{gne>%u6I+oflT4X(mPxKma%Iw6CcDY>Um%z{ zK#)l2DsxQSN@lq->nd}0a*_)jWtJ&(ee{#LF-_4=X8mN=PiFmO)=y^rWY$mS=h#K& zSG>VpX8yqEKrqW!L?9w|mBss6q7s8|kRywpvgj#GJPJ^Ss?^|T>L5!NS+ca?7X~sC zzn3gynZ`Vpa|pkiEXO&?Y5Y5oF<&3E?mU1Cy`h1?XTC?)Xbcdcnh z2Rbr@VT@-63$Ul}R4tmA)|-CxXC`hk+YWp;+jVYnmk0dA<3KRG`Ln0S zce7Wd5_X;4uCv>9cDv4AmtUEH?`D68d&>Ti{{q1rA;_FVr#Ye!9hq~;oI~au`pn_B zbLcXMz2-=SPIKrqM+tPAL#H`(nxi2)&7spAI?bWe939bVj)_b`r#V7d#!*i2H~P$R zj*I9s$8-D+a=hX-vVQOWzt`>e$w)y;%>VrlcP8Oa#NF`mUNWi4CT zg?|hE{h#3XGUfFBoW7sa_j9HrJsHSEX0nov@5xCX@*+phf_OKlz52UBL4P+Wn6p2> zF${g=9E%(|m$Qo1Y+@%zIL?imS==eGOYb#Q07{X3U? zFf*9R9OkhQ`_8?BFyzU72(#rri@oPIW9|pM2n6$(BTr(IlAQmM27Aa;06Fs%M%FxK zDUW=4TGEQvv_s!{f!KhFg&@)Wn1=Y1fUH%N5ce_omL z%9Pjl^ZI^X-_P5TPIRU#-LUh#cAnSH^Y&!`{(a3WN8X`$H?LdEyPJI+#J=;ML?3z2 zBS+qsyyi_H_(Omw#3vDQ{E&=Hd`C9E$6kJ@!Ozs8K8OF;o7AG@&_mo?qAb`{6g1U)T9%&F}v6kHfz6uV5u> z(0l&9$dmsZ*LlDro&QLq7R zXph@0*oDbVVLG#z%Y5vppe_pTL56~dILZm!V!^xkx2E8~yy1NySV*=)?y!*GL?JsV zWZpt+F>|2}Y-S68V9rAREh}WsLgp;w)(g4yLf$FlokGVr&flEET^2geMXqoayD4-7 zcT>pS6pltp{zn?plL_}B2kg6h*eE*a2A(Y)lRAVp|K3tG{JwhTmu zqJAeu-AB>69Oel2Qq&C;^?p%%DS81nTJ#z30>NT>C}!qj39*Y}sVPYrexy9+FIENf z7psTgYO!DNez6|dMKQZ5Hh>XK^#A{#)&C5|Z5CU^QZ}%et+<(Dx+x}4FCcPipy2J0*z^k9*Xxwmg0l4i{c~kuD?MPEWVnxtjF)TxD3U& zVMoQ?NAdT#j}lRdj$M>+hb44hq7X%KgC*?0L|xos32&G1b_ws67>Bn?_-2U%9KyFt zn6bnubYJp2vXLF%E}0AaE$NMt1t?50ieuK2_E546?yzJz%v`cFW-B?IQH*5*Q<=^j z^j>lcf3XL@*^>G$d5+sW=N0}vDET%JEEO9)m&!o2rQ|CmUn%)YnYonRmug58 z+(0QeP^uNv&}%8TR_YnPU&{AOy+N;~^jgaAu5==Nv$Q@->#wwLmG-UDzE#?{{4Jqi zX?rYfw$gS~+V7_HOMI)eZ5#ol7W7+2zh(O49?J}3C^{?S zyJbeAw=#MwV`pV1G70^aF-Mu1%w{*|xxi(vag%#I;0b2^F$!_`miVL~1GyBjW%wr)-SjsN0U{_^zST-@qNQwE&n!jv%e#ARvD^Qtg z)Z{0+~s6sb%S3!3b%vQlW6;^XG5Udyp-B+~pihes4byZQ$ih8P;n`TVFI~8wo zi@QAFAD-flDn&=xjnNNHU1gm{T1R@g^Z&s7FnwzOshvlq5r`6UH&N?=*5qDB;E8E!4 zpXjriy;a-C<3O-_2tgtd1$|bJOUH@Ad#-NJ)!kEdb5wUL z)fXdAb?;W+i5{x&#jR97j9paMZS@zt{DP!?eRpO#@qKe?TsW%$`Qe$K-Wl%fpfFyGI$smCDXu4VpOU*W&2 zW&gFl#{O%?kP5e5D;*h-xz>01oz==t4(zp7F6^;ZM>^4! z?wF~To@)(6$F+ttA6?ZlTdg&0=1&fBi#y!o0rpz!6>kE;+Gecn#%ouk3e~BBxog*< zJ`J#&+D&Lm3x1&$t!c|7mZ8(yek-;8Mr*G_j@nz$Hwe>x7`6 zI`&s5FD0;xIzLjLN>oL@I`Y-o#1?$N&Ng=9jXJy8$3e_r=P1WG&flEo3~sW{Ib^Eq z{knEm*UsuDA}O-ebys!msjf_Q?Wk^PDpL(z)vbp;)E&%F?4s@{#xjAK%qA3B>;8p& zb@#BJ%Us27>OSLLAXqOFQHVxN+(NzFxXpU`DS%zolcApbsMm~kc&naUuQ!)@EW|z3 zvzL0?(NDbtoa7?jtmn;oF9N~(aWQ-S1SH1%_03=3t=2bt{an~deec&VgS)BkZtClz zek~f)9(P*53%@c5oz&M!{W<8MzAW`OqKo>!V<+|HsV`6cTl~Wlo(F;r;$SBYWNIK& zgCu0q+0dMge5+Ax%+pBEjpCCC9XCow zN>by!Mrlb$M)ck&3*K(z<{P!5HFn*oBYJMsgI<`mkvnWO6MJv81eqGGWh=Wl&SkD~ z9ep=?8wfUzKqSoG*zAqvZ7gf!oY;F~dvBbdLKLMKO=wCB?~$cR9`Yee6Z>yckRr&_q&Owe zPZM1<8NeWhGJ>&;N2Vsz&`T4&G}(sVMw5M<;yQY1a+`a63DTQ8|wnUz$_SIA`O}o$)8JbRI2D8yi(*-O5E05{V-CT_fWJQ9!?y)^fBb31BoKh5>h{71^t40~!m zlRwzTPIh7b=H_pHkcWJE=Lyew#T(uRf-Mr^ofdvWEmD%2bhx1w-fK~x9_+{WS{z27 zE&L8zoIs~7?7YQU%+}%}m$=F`Zere+(eVA2`fr&A-*2h+mTt49zFWG>mbz|Pl{$F0 zWdmAb?=5@c4qNKEOhL$(@^8P*a&{7Y-L_&^Vy#GsiDo~kf z)T9=*>B=~!g*NzZEB}3~ zJ^1fi9pW%Y&}}Q-w$f`Wy|&V8E4{YTYb(9BGE=MTfne*%BqbSoZEbI@)8XCL?zr{$ zc(-*$e!@Jh_1d~AZRy5u3}GmGZ9SJ2tRjqcY-9@;kfF6+TYq`~7I(Q92(}49jyB$J zQwI0hraYCf&o(vCYa4rPGm6RhZX5e*qt`a})yCbn*@a%(n6b^fK+xZN3AQy?Tldm7 zJ@(bsY;Cin*S7Z7wk5vXR%dNbqPMnZIFHP2FXIl|-bCiMGPjkv?R_5cm?u2t87~6C zc8RdNcG=KlyWIRhA&O9v(lq23+Mv^R-ROrI+pWb-wlinD&A6R*+i^SX{3hES#;)7R z((VBdk)^$v+eaV<@kv1zWNB~a_IBF7Hg#!0BO3E7Js8MHCgH92f8oyB@58(8z1!Zq z?RC-q4rXuf-+~SSyxGB<9TJj{f|$8OQHtZ=o(^`~!A?84r4IG+eusA0L5I%hpo0!N z48xu~Ok)PKS&rN4um*eX;NPeYvUG6Q9qhcrb^b-3j`DPjLLB0e06XYd0GT?<)Ug;p zQ41Y(Y>ylrd(wyg3`ZXw$8a0_@2K;R_TTXl=I{6%d++G&j&FI#dp__v5bPvNr?0S^ zP8lhTJLsg7PCDtNlTH<>Obuk})B$~T>VhnthA@#SOhqT1^w7y&blS#FcA=9_2Y7&+ z==2zO+36*((M@Oj>70n9xR1`MNJ~1(AW!G=RKl)0%hb6hztWvv^ko2p7>s-9d z_IBrg@OEc!clLH?Z+HIkwq82xrSnJr3k199rHfv=1aY@rBJmx%=~9Byl%)c)bg7Pg zb*Y1Hy6C1$e`M*hm}RWMopcFf9UIxfpX}x`?xo8$ZX#C~JL@V(*J!wxuKyzqI_YX> zU3Jm53f}Lki>^P>hIZ(ss|;O-mG-s~2G ztmNQ(a+8<*xYura=;l7URm1z;n$Vn2`usoWY%R zlc(F4Jf8!>Un3KR=-9=t*^%j2nSRZK+xWF2I{39Ia{St!PISe)zfNWvGnvCYWcYOn zo4JAC)31I@zrNx%cF;Wudhec|OcbFwrEr(sz1`j0-M!nrC*JDrjqbAv0b{^i^6`GgsJxVs*@?-7wmn74;L^e|_SGI*SQy-c7_0ru5*jKJm3lX=;OZn$k8_zafwGV(vg!q$k8`HWhh4l zD$|ipbfr7J=!+fo)kRajCE{e6I=P6KiGkH`u)W&cBAut{{({lzaoT)d`&dW**^{m@OFP)_qX%@cHX}T zKjH@ao2`Fm%+}v*{ms_j{q@&-|4B?n@BPi$U)TNR?!TR#$kShr{^z-f-ur*aqwD^k z1Hl0Sf@B~Q-;s^%ltRw~s!$uhkpXUPfJ_5q8sPf_e1CxN57@_k4q(p%4s(p-{LLxO zat=8LTn+>WdUs$#%swzFDM&?n+}^;f$T6@i_B^m6Khco3bU==QT^PV1hA^DvtY9^3 zS&w}U+>9;;z6%6@vyb0W4AY-ux{G)$r}#bp6{Uu5gtb+~yAVd4zlV z?I|yKiM#sk4PV}Q&j&uD^Fe9Jk6jP4>p{gRi8%+ArwZO4r0YR;KFH1o^x|Y-0zfID@VSnRAe=gKpusHt4@VaPU`{dvHV&qxZq`4A%AFycDH4rD%Y=Nsf1i z)S)g7XiPI&p^qUQkz>dx#xjoCgffqXti`^E_>B(P!UZm3e?zXLk0JUPaxV}ZD#y@b zG-4pXF$6a>)Eh&+G1MDF{ho$C3IvClX;?Dc>aZ;6ZJ1jbW{<;kH>?DD8+HfZALc%W zefjU6@RS$$?G1a4+ZgtdPl4d@0J<9<0o@IcgzkpxZn)lte}mqJ%R5|e!xNyp;dVGY z33fL8XKJCl;kp~HyWuVPg?4nnT*J*Zd^A%6U;bZk_!@LJ-2R5Uso`cFzLQ;n;0SMx z@YV=#jquJ0I~rm35vfQ^1~QU~@6g8xeT>LSE^_0pM#wXw3tj0>FZ!bI5rY|lTqE4m zh@~t;rV$4@%u$YWnQPqOb|5%X-y=&=nzB@&B2}o)Pv~W&n;NN?k@aYZZbmktDb3K+ z$T2KnAxl`!D#CG3Bi+)--#LZf*T{2R=RqJiDkkB)$D871qe zO2{{=Dm7?D8+ybVstTT1#*m9%`Wz!k5Mv=(#7cL#2^-N@c!roxD9^;EI8Ue zM(0OYqbpDwvyV3S=pnd?(IXhmSSB!;Ip|^Za=br!E8Ez?UmQXgqjfO)7I(PMzr5vr zAUMX|j?v2)S;pvLj5`^Vg<{AvMxHS>aUWwE(UidqL#8n@`CDYcG4?WM5jq(2J93QK z%K_ZS81IgG#1o$LiZ^`8@F@@+Yd>Rupa6v_Petrutbb3&>fPTf3yvMgRAw-nP`o|X z+he^u_5|JQs-2Axi^ulh(+3mPN48@G&^f&G%IvjVK zdpzVZ<{4+6apoDP*Kw~g*En;H`-s`beGUZ2rzJn;8*jex`W;`AvY2(eImcI{4egO_ zyn7pO-tl9Z#azrg-n`>Cvl|_c*YWtn9OEP}c!@0I-yz5N{{q1Y0dz7U74l5TKxVSy z4kySkK}Qp6@H2JL*MtW2M=ulfGC?mB^fJNjCyYTS6Yipy3A&%~h$rY}f-DpCGQqt~ zkY$2iCVW6A{?D6&6Tc#ajOb-z5sG796Mw`FOstGd6MsT46ZJCDJxuJw5cD%~8g5`> zI2+i=7LIa(OI+m!@=la>($_>GI^PfncQYwIdHI0?$Tg`L_BBbaNiAqeYueF~E_7uI zQ<;JLoMc~<>}%3O%s$C3Cb@}8=AUf#$q|T*ER&-V6Imw5A~x}mXL14(qMymSm|T-u z)TIGUX^u>j-S%X?OxDZf2~1=b`kB0%-`US0+|A@;+~O&AHu)8Akax1IQ<9SccQYj| z8E`jKvS2?`Dp3`=ruy?y3&*0$Tamg^fFa1 zQ3PYIEYk~8h@!|dy#yuE&vac(AIM;aF_LjiK&I)_(aUtbOyAB9_M@Na7r4ty zUgK`2zYhdwd_xlKY(`2_Bkv4ZXOyEn?q)_+YT#~WxaS%6Gou%Mk!!{vh9cJt`Rm4pKTYj{dQ)Xf413Y*P|h_%x+2xWSRX7t!Rrpvpdic{mjDyCn9l3K`PwMoOBeR40blB0+o?>j;wQjr919s zPG1J#Zsxe>IrcMW3CoddP8jQuYmWWQIfJ{I<8J1-n>p@g&doq@ZjcB>CMxzd*S_Y) z#_V(LVy@rLT=UO0``pfSLzcNc>4PkD`_Z4@kjLK&49*>je&*_8?r!#RkRzPr6f(`d zh+gLEW$u50U}%6S=qEG@8OY5KxSP;|RHZ(47TSd7$Qvqa=xD~^ZbBz96?YTro? zbQ?R7D|9ahkSo-FLLcF7LfuWMy9sqSp>G4hd5K6&GE!n+^XzM0ddxo0F6Q~|%rpNy zv(FpOC}f#8j)}-JZ!%Mujy&^bF&q8N)5W|CT;>`#xyJ)!n)fUaoUfPpdYS(%@kxPx z=I5X=<*9_bnO}{TbivN%_n9lq+uh=MxS_@JEw-P< z8*#r&ex^2cs81twzC`Cs+~ks9XhVCvv7|HJSn?~~@zxTzx}*>N8OR`pG7P&~GLq5w ztuNWYK@M@06P)5a7rDj_-s4u5d=3PcM#fH-rov8^rXw3U$i*b4;AWT3U^a6w^HMV} zUBXh_>e7|i)zUD+(Z$mB$hFkYmR{inFL}*7J_drzz9NYIEQ?BNOcX)qA z6r$rkSHvbUx>%uu6*}AC(bg(iia;*H8ge1YcD+^GVVw9u|GOVnK{j40$D8@32IoQKWzsr?+UwMp^ z+~ooP@Dy*a^!6(6u1blwR#ipkt6E{ttJ>3vu9$O`Iam4Cs#BO}m7Z6f=Mp+z<Sw&f{#V=o>i2=*nj|D81*u3&1~Q`OHRY*)H^4L?Q~& z`G#2J;Cpf-*V+OUMy|DuXiPI&(wcU(XB^|1#8m8St$nR^r)$l=)-Kk*!Tf8@zV>q< z82%Nqgh%9SWC?et{swC>JSOsl$0iQ?3D-qVKg6s6L&im`)5}!mQB^mlyr;l~^w5}9CQl1Lv zW1T+Mb)qYNPwU*zy58txoj%shVAy)M?<$@&QBW4%7sM?(+mWm&I-_1_}P z`UE5-3G%E@P6|p>mwGg$3C*#m^=*-9eHZkyUN7sXV^8ZBpr7>{_={tlwW1hLMcH{cM=PI@Ys^t=QKF z``YklAh^-&8|`9aV$8qM>>K|_8f4j+fy~IV@jJ4T19>*)A~*WksEduA=|&HFGl1Wa zY2yg=vQaM^*AT`Q^s`Yv8!vH{Yuv61censWHnYw(Lzz5=IrO(d(S-s6$BN9(wJtZr5Owa zS!q3C1JB$~_xykV_x+tu*EvJZ8TypZki*aye96~*!zMQK9V5tRXloEghcF5I8l6Hf zeN07H(ExL}oCU}sx(7K#x{4mXk*~M=5;@;6HzvJ$aZlXW=oBbT% zpCF9KFol`SLLc#Ec#q<_%;QeX5U=6^%n(1r8U~R~ESq>3*~B`CWfIFIwj=QfW{vj+ zVba4`#-WGgBxI4ee=?1;v7^aC7O{k-*pcKR>}m28-j`%86)kFXlQ=)oOQM%#J3Ej^ z;{IvCc#h))>|r_scTX>+p8<4`Uc*f+#`&op()*A>>U~L9;~h!uWoj?eb-d1d*s1g* z>}4vK)GVnS(k*O7C#iWd^JIr|G{72(E=scg#wKzL>cJAE#X`Ge2WA2W*=jWbZ z=&?AA!#RQ@ai`)~WL=!dBy?SzjJ}IrPNNSq6wWMe<93#@oRzq1v5Mzd!wbB^TexEp zk&;p39V}#A{J;)&v75a?SemOmiiw!3G*@Y^(p=>%E}@?R<}jBl(S7Ou<^4R!!+00V z$B;)k$eV2B9pqEK&py0!<^CY7bY023>Ot<+IOJC8zmi!s9s+lZ657l+( zp<2XJWK}u8(n)0xt7mzMS20KRAqhDJEq-E@13}o*SIZf#Uiz5ARLYKR*8P>~K&I)8% zug6Z+o7jx!*6vfgPwhUn=XUkeosFI7+Q;sTtmS3aVJEtSe9m7%*vPf9TaE8DS1})* zHs){4(3qil9^Y+V!wiiK8XYzt6Y~}B*ZdKL!xNFka6j{~Bf~fNb>H9Eo`at&CLH|y J|9?2V@L#(@{{{d6 literal 401408 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%0ARehyh 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 z

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

*}Yje(FXf5_+l| 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

l9WL|OZ2nE-YhYnCFZk4M@w|F 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 t)xmj8^TB7;dP(s>bMa4WJQPYYl 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 delta 62796 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 Bl{NqX diff --git a/static/images/BOOST-310px.png b/static/images/BOOST-310px.png index fd965801f15df14a9b0c8205ae7a61a68cf33936..dd43b0a9e19d153027a4d263eaec44e5d7095829 100644 GIT binary patch delta 60648 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

-9gc4^60OBLn{^F3JbBfX;y2KuDEKuXrzo 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 be|L|~<)fj(qZwO!fX}tdc9+U8y2t+?(j*_m delta 60698 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

MNRm69QQzF+2)u!nuJ+9>}i@48ID4Cvv5^~Xy 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 diff --git a/static/images/Camera-310px.png b/static/images/Camera-310px.png new file mode 100644 index 0000000000000000000000000000000000000000..3658dfc1d5aa39d9d733c800778e329fc47bb8d9 GIT binary patch literal 52016 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 literal 0 HcmV?d00001 diff --git a/static/images/Camera-32px.png b/static/images/Camera-32px.png new file mode 100644 index 0000000000000000000000000000000000000000..df2f4019ef1932a31c273d934c31df23764c9d25 GIT binary patch literal 589 zcmV-T017tfx1 z61390Ctt*yAd*%^q@vwfnI(p-rnQ?&=|bGh?9R+LUp6yQD;A4Sj^jL-rn!R{$9lcC z=JWZpnayS&>-GBmS7K|L28Y9eo8XLcaQOEG*GTU5dY+z2rQS&qb*A9BKP))v{d-Uj z8;tc2J!~OPoiYG2W`fBn0}u=(lWzk+RJvqY$n;VCnrKWXb~c;AZuc|gAe~NwWmz(8 zLeBx9wBPTc(P)5S7-I37n|wYGtyT-zt0vrdo(F@$0BW_G(1}$lC{bt=)@N>zN%F<2 z9`yTtm`omdm98M2{RDD+7R8H=9jZEEYU4 zu@THh8Gy}Z19-^-6Oh}e1BB)`X3oGRnp6Vg0Q{#?Ww0>cfA`|wT z0rsT@olXZzr4nFYkUeH)0C;w++?LB_Xt&!?C=?)(NN^(jhn^QAR3JjS_^vB|unCc0 zWTRTGayCYz5$^-U2nT=y8n~_-sU4GJ#E7>3j0iUdrG|q#+>^;1(&!y<_F_EsmfRgC%aT bzX30wRJ5eO(@o!H00000NkvXXu0mjfoqGt3 literal 0 HcmV?d00001 diff --git a/static/images/Camera-620px.png b/static/images/Camera-620px.png new file mode 100644 index 0000000000000000000000000000000000000000..d1212654eabcf0b1ae7c1390be0f8c21051ad920 GIT binary patch literal 173586 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 delta 67763 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/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 delta 62166 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 z

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 diff --git a/static/images/Landing-310px.png b/static/images/Landing-310px.png index 02c179ac75dfb150002321dd17c9c412934cb555..9be2b978d4728a4ab92b13f7a620b90680df1c10 100644 GIT binary patch delta 48146 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
0V0BGs@kKZFygE%;|Onv}flu6$( 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 n#OQQr7#EInw5jWVw*Z8{tih?jPduOieizO= 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Ⓢ) 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 JL6Yn@jNNZbtiJi@|mI0z_?_m9!?Wa6H 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ⅈALthiaKFdsy=ykO#3wKnxp#i^h%*E!mQ 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 P00000NkvXXu0mjfm^ekU diff --git a/static/images/Vessel Overview-310px.png b/static/images/Vessel Overview-310px.png index 921e6a37ab3e8ed473b4cbf1a321c4fa37087a85..35869b4185e871b85932dd217a6e2ea0844d9bbc 100644 GIT binary patch delta 51887 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 delta 51919 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 - + ascension-preview Created with Sketch. @@ -38,14 +38,12 @@ - - diff --git a/static/images/boost-preview.svg b/static/images/boost-preview.svg index 4bd819b..d7ad3b0 100644 --- a/static/images/boost-preview.svg +++ b/static/images/boost-preview.svg @@ -1,6 +1,6 @@ - + boost-preview Created with Sketch. @@ -38,13 +38,11 @@ - - diff --git a/static/images/camera-preview.svg b/static/images/camera-preview.svg new file mode 100644 index 0000000..baaa37f --- /dev/null +++ b/static/images/camera-preview.svg @@ -0,0 +1,32 @@ + + + + camera-preview + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/static/images/docking-preview.svg b/static/images/docking-preview.svg index 6078e93..f632f62 100644 --- a/static/images/docking-preview.svg +++ b/static/images/docking-preview.svg @@ -1,6 +1,6 @@ - + docking-preview Created with Sketch. diff --git a/static/images/ground-track-preview.svg b/static/images/ground-track-preview.svg index 455198e..e927777 100644 --- a/static/images/ground-track-preview.svg +++ b/static/images/ground-track-preview.svg @@ -1,6 +1,6 @@ - + ground-track-preview Created with Sketch. @@ -31,7 +31,6 @@ - diff --git a/static/images/landing-preview.svg b/static/images/landing-preview.svg index 9224221..2739820 100644 --- a/static/images/landing-preview.svg +++ b/static/images/landing-preview.svg @@ -1,6 +1,6 @@ - + landing-preview Created with Sketch. @@ -38,13 +38,11 @@ - - diff --git a/static/images/map-preview.svg b/static/images/map-preview.svg index 652947c..d6ab915 100644 --- a/static/images/map-preview.svg +++ b/static/images/map-preview.svg @@ -1,6 +1,6 @@ - + map-preview Created with Sketch. @@ -25,7 +25,6 @@ - diff --git a/static/images/mission-wall-preview.svg b/static/images/mission-wall-preview.svg index 941f094..9591664 100644 --- a/static/images/mission-wall-preview.svg +++ b/static/images/mission-wall-preview.svg @@ -1,6 +1,6 @@ - + mission-wall-preview Created with Sketch. @@ -25,7 +25,6 @@ - diff --git a/static/images/navigation-310px.png b/static/images/navigation-310px.png index b7a57fbf014d0194b166e25c43c0b971188e8b43..dccf48af855fdf3126c0a9dc46416c99a44f4b64 100644 GIT binary patch delta 63870 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 - + navigation-preview Created with Sketch. @@ -25,7 +25,6 @@ - diff --git a/static/images/settings-preview.svg b/static/images/settings-preview.svg index 4def653..678a06c 100644 --- a/static/images/settings-preview.svg +++ b/static/images/settings-preview.svg @@ -1,6 +1,6 @@ - + settings-preview Created with Sketch. @@ -25,7 +25,6 @@ - diff --git a/static/images/staging-analysis-preview.svg b/static/images/staging-analysis-preview.svg index 0046281..ed47e01 100644 --- a/static/images/staging-analysis-preview.svg +++ b/static/images/staging-analysis-preview.svg @@ -1,6 +1,6 @@ - + staging-analysis-preview Created with Sketch. @@ -26,7 +26,6 @@ - diff --git a/static/images/sysops-preview.svg b/static/images/sysops-preview.svg index e0dc9cb..2b66630 100644 --- a/static/images/sysops-preview.svg +++ b/static/images/sysops-preview.svg @@ -1,6 +1,6 @@ - + sysops-preview Created with Sketch. @@ -25,7 +25,6 @@ - diff --git a/static/images/vessel-overview-preview.svg b/static/images/vessel-overview-preview.svg index 2c0082d..4482227 100644 --- a/static/images/vessel-overview-preview.svg +++ b/static/images/vessel-overview-preview.svg @@ -1,10 +1,10 @@ - + vessel-overview-preview Created with Sketch. - + @@ -25,7 +25,6 @@ - From 4b6e739f78d1b642b37c7cfe9aea6c8663538eaa Mon Sep 17 00:00:00 2001 From: Thomas Cannon Date: Sat, 13 Aug 2016 18:01:10 -0400 Subject: [PATCH 12/18] compile --- public/3dmap/index.html | 10 + public/ascension/index.html | 40 + public/assets/3dmap.js | 11758 ++++++++++++++- public/assets/app.js | 8332 +++++++++- public/assets/ascension.js | 9884 +++++++++++- public/assets/boost.js | 10045 ++++++++++++- public/assets/camera.js | 8435 +++++++++++ public/assets/docking.js | 11297 +++++++++++++- public/assets/ground-track.js | 9285 +++++++++++- public/assets/images/Ascension-310px.png | Bin 67920 -> 67919 bytes public/assets/images/BOOST-310px.png | Bin 63724 -> 63709 bytes public/assets/images/Camera-310px.png | Bin 0 -> 52016 bytes public/assets/images/Camera-32px.png | Bin 0 -> 589 bytes public/assets/images/Camera-620px.png | Bin 0 -> 173586 bytes public/assets/images/Docking-310px.png | Bin 75720 -> 75717 bytes public/assets/images/Ground Track-310px.png | Bin 65416 -> 65414 bytes public/assets/images/Landing-310px.png | Bin 55483 -> 55479 bytes public/assets/images/Map-310px.png | Bin 56542 -> 56536 bytes public/assets/images/Mission Wall-310px.png | Bin 66490 -> 66459 bytes public/assets/images/SYSOPS-310px.png | Bin 58846 -> 58829 bytes .../assets/images/Staging Analysis-310px.png | Bin 69626 -> 69634 bytes .../assets/images/Vessel Overview-310px.png | Bin 61975 -> 61969 bytes public/assets/images/ascension-preview.svg | 4 +- public/assets/images/boost-preview.svg | 4 +- public/assets/images/camera-preview.svg | 32 + public/assets/images/camera-test.jpeg | Bin 0 -> 7780 bytes public/assets/images/docking-preview.svg | 2 +- public/assets/images/ground-track-preview.svg | 3 +- public/assets/images/landing-preview.svg | 4 +- public/assets/images/map-preview.svg | 3 +- public/assets/images/mission-wall-preview.svg | 3 +- public/assets/images/navigation-310px.png | Bin 76189 -> 76145 bytes public/assets/images/navigation-preview.svg | 3 +- public/assets/images/settings-preview.svg | 3 +- .../images/staging-analysis-preview.svg | 3 +- public/assets/images/sysops-preview.svg | 3 +- .../assets/images/vessel-overview-preview.svg | 5 +- public/assets/js/camera_feed.js | 111 + public/assets/js/telemachus.js | 16 + public/assets/landing.js | 10627 ++++++++++++- public/assets/mission-wall.js | 12552 +++++++++++++++- public/assets/navigation.js | 12398 ++++++++++++++- public/assets/staging-analysis.js | 8795 ++++++++++- public/assets/stylesheets/application.css | 4 + public/assets/stylesheets/ascension.css | 16 + public/assets/stylesheets/camera.css | 15 + public/assets/stylesheets/camera_module.css | 152 + public/assets/stylesheets/docking.css | 4 + public/assets/stylesheets/landing.css | 22 +- public/assets/stylesheets/mission-wall.css | 35 +- public/assets/stylesheets/vessel-overview.css | 20 +- public/assets/sysops.js | 8663 ++++++++++- public/assets/vessel-overview.js | 9396 +++++++++++- public/boost/index.html | 10 + public/camera/index.html | 325 + public/docking/index.html | 40 + public/ground-track/index.html | 10 + public/index.html | 10 + public/landing/index.html | 45 +- public/mission-wall/index.html | 46 +- public/navigation/index.html | 10 + public/staging-analysis/index.html | 10 + public/sysops/index.html | 10 + public/test/index.html | 10 + public/vessel-overview/index.html | 49 +- 65 files changed, 132243 insertions(+), 316 deletions(-) create mode 100644 public/assets/camera.js create mode 100644 public/assets/images/Camera-310px.png create mode 100644 public/assets/images/Camera-32px.png create mode 100644 public/assets/images/Camera-620px.png create mode 100644 public/assets/images/camera-preview.svg create mode 100644 public/assets/images/camera-test.jpeg create mode 100644 public/assets/js/camera_feed.js create mode 100644 public/assets/stylesheets/camera.css create mode 100644 public/assets/stylesheets/camera_module.css create mode 100644 public/camera/index.html diff --git a/public/3dmap/index.html b/public/3dmap/index.html index d9375bf..4aba3c0 100644 --- a/public/3dmap/index.html +++ b/public/3dmap/index.html @@ -11,6 +11,7 @@ + @@ -156,6 +157,15 @@ Mission Wall + + +

  • + + + Camera Feed + +
  • +
  • diff --git a/public/ascension/index.html b/public/ascension/index.html index a406c36..5233d38 100644 --- a/public/ascension/index.html +++ b/public/ascension/index.html @@ -11,6 +11,7 @@ + @@ -156,6 +157,15 @@ Mission Wall
  • + + +
  • + + + Camera Feed + +
  • +
  • @@ -293,6 +303,28 @@

    Ascension Module

  • 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 I3$Bm;9}PuG_W%F@ delta 48145 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 diff --git a/static/images/Map-310px.png b/static/images/Map-310px.png index fc08aa0682e4de5aaecc9d0edc751f38063a93b3..008a9af999c7ab8a2e353cd622cc3098db208072 100644 GIT binary patch delta 50309 zcmX6^c_7pO|F47!lf*DbC8@BH+%uI*eH8h0kZZ1}%zX{x9b%ZHC=^jiD#G}pfX7M5!05us;Z7+p73yRWvbkqV1%1Urq zwUm^Fbmm7#Q*4DcfBN_a-7}beay0r=jE+)JbHYM$q21b*YcF#;T{TavvRn_lZ@PUF zp?|^V`MM*3&e$)tM&byTlmiDdb=%z3G~@djvpuo7RN;T(@4YBUW455e673+k*SS%IuL$^n)C+i;y>ziPLHJ|B?&i|4c&WaZ!483g3qO98)S5e)g;<`hCwIG^w~!>gJZ6 zs#vAxOdi>((mPN$e~<0v9b;dikGnLgdD-AWofZZ%`M%=y+5#l=sN9;Cg6U2lv!-rM zQ{Tzhtw&T|xxFyXan~B9$Pd2N?N{g4ssZ@wRGd0t=r)SU7wRQljPNUWshDqRXeD?Y`kOz}M&r z1Z=MJz65MdNMTl<^3$K;R&A%8zg*x~{kmMf7TX!SaQ~rjx|3cJ&Hiirc>~jc7ageO zg`{|BX!qs8*Q5aNu0G{dKPoINuP~ zS5H!ZameOeZo26Uo&3EnbfznC5p#N1wDAm=bJ??3@>qdRipfcym7u|ry^kh`Y^Y%m zl&w^}w}y%u&dl+TqUZPv)l`G1?Yn`_DpfHM$M{KSdHGu zLY5?)Cj;=FLa>(U*6^JvTg!$(bHf9 ziPsu;w`^`!Bo}e47~5r5i6F`%5Rgp<@cQP2hwIlD!w-r zH&^C<$YUNsP}|)K2?|jSJngJZgvzGV55{|oJNcNWA!TcrY@FOeF8C&4)f@^oI;!u1 zrX~$GMX-`wD!XjStMcs{&Y$*Q>y&h=S#2FjVo@we;h<6!2COy011+*6v{%Gbe<`u@qMlr`aK zS1{~_-9lEFo=YLy+ybEhEZI;<#3GCQ#LfvIPck&(qDbw_uN@k)l+WdQQ?-sI*LB(p z$)RN?rgHYx(6Ac*?QD#UIX+n|w0;2LawI%)Q0=Np3x>rhgjofKqSx4|Y`yv#XABEc zR<9EkvBvya$X}Iev9E1$mBVU@pdZ?qF0>vibm$|NSammz{p6@YkBbPZptqX`0)qz& zUe-zDL9yQhz1sp^?_yZeMs8rB3K-y=3y zzHjD=b=e@c+&{K_3dNddRH$Ml!=R7q2}HZh}OY{ygo0>W?*BGL7b~N1^stT zKdzqm?|rdvdlYI}K952CrlU-UgPYx=D=Y`c1{;dj3B-8#&B3D<+WmxDNFtoW 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 delta 50312 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Ï_^r=wrP=4D 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 ZK1DUj2W53d5I)|^@QSg1(Pg`^{{!b51rPuL diff --git a/static/images/Mission Wall-310px.png b/static/images/Mission Wall-310px.png index 7109fbc5f05051eb1fb2cc7e049048949ca558c0..159475b4eadfa02e85bcbd93005839aa9fcffdc9 100644 GIT binary patch delta 62799 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 Ywa8ijfxUkR_;c|W`}4&=dp!960KP)f@c;k- delta 62917 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Ƿv#`lFL_?i+Z$vdRYE5Mp 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

    +
    +
    + +
    +

    +
    + +
    +
    +
    +
    + +
    +
    +
    @@ -444,6 +476,14 @@

    Ascension Module

    }, ]) + window.cameraFeed = new CameraFeed(window.datalink, { + cameraList: $('camera-list'), + cameraListContainer: $('camera-selector-container'), + showCameraList: $('show-camera-list'), + cameraName: $('camera-name'), + cameraImage: $('camera-image') + }) + }) diff --git a/public/assets/3dmap.js b/public/assets/3dmap.js index 0e099ae..4d97a53 100644 --- a/public/assets/3dmap.js +++ b/public/assets/3dmap.js @@ -1,48 +1,11744 @@ -Math.toDegrees=function(angleInRadians){return angleInRadians*(180/Math.PI)};Math.toRadians=function(angleInDegrees){return angleInDegrees*(Math.PI/180)};Math.crossProduct=function(x,y){[x[1]*y[2]-x[2]*y[1],x[2]*y[0]-x[0]*y[2],x[0]*y[1]-x[1]*y[0]]};Math.sign=Math.sign||function(x){x=+x;if(x===0||isNaN(x)){return x}return x>0?1:-1};Math.cosh=Math.cosh||function(x){return(Math.exp(x)+Math.exp(-x))/2};Math.sinh=Math.sinh||function(x){return(Math.exp(x)-Math.exp(-x))/2};Math.matrixAdd=Math.matrixAdd||function(){var arrays=arguments,results=[],count=arrays[0].length,L=arrays.length,sum,next=0,i;while(next-1?e(a,b,c):b.indexOf("%")>-1?f(a,b,c):b.indexOf(":")>-1?g(a,b):i(a._value,b,c)}function d(a,b){var c,d,e,f,g,i=b,j=["KB","MB","GB","TB","PB","EB","ZB","YB"],k=!1;if(b.indexOf(":")>-1)a._value=h(b);else if(b===q)a._value=0;else{for("."!==o[p].delimiters.decimal&&(b=b.replace(/\./g,"").replace(o[p].delimiters.decimal,".")),c=new RegExp("[^a-zA-Z]"+o[p].abbreviations.thousand+"(?:\\)|(\\"+o[p].currency.symbol+")?(?:\\))?)?$"),d=new RegExp("[^a-zA-Z]"+o[p].abbreviations.million+"(?:\\)|(\\"+o[p].currency.symbol+")?(?:\\))?)?$"),e=new RegExp("[^a-zA-Z]"+o[p].abbreviations.billion+"(?:\\)|(\\"+o[p].currency.symbol+")?(?:\\))?)?$"),f=new RegExp("[^a-zA-Z]"+o[p].abbreviations.trillion+"(?:\\)|(\\"+o[p].currency.symbol+")?(?:\\))?)?$"),g=0;g<=j.length&&!(k=b.indexOf(j[g])>-1?Math.pow(1024,g+1):!1);g++);a._value=(k?k:1)*(i.match(c)?Math.pow(10,3):1)*(i.match(d)?Math.pow(10,6):1)*(i.match(e)?Math.pow(10,9):1)*(i.match(f)?Math.pow(10,12):1)*(b.indexOf("%")>-1?.01:1)*((b.split("-").length+Math.min(b.split("(").length-1,b.split(")").length-1))%2?1:-1)*Number(b.replace(/[^0-9\.]+/g,"")),a._value=k?Math.ceil(a._value):a._value}return a._value}function e(a,b,c){var d,e,f=b.indexOf("$"),g=b.indexOf("("),h=b.indexOf("-"),j="";return b.indexOf(" $")>-1?(j=" ",b=b.replace(" $","")):b.indexOf("$ ")>-1?(j=" ",b=b.replace("$ ","")):b=b.replace("$",""),e=i(a._value,b,c),1>=f?e.indexOf("(")>-1||e.indexOf("-")>-1?(e=e.split(""),d=1,(g>f||h>f)&&(d=0),e.splice(d,0,o[p].currency.symbol+j),e=e.join("")):e=o[p].currency.symbol+j+e:e.indexOf(")")>-1?(e=e.split(""),e.splice(-1,0,j+o[p].currency.symbol),e=e.join("")):e=e+j+o[p].currency.symbol,e}function f(a,b,c){var d,e="",f=100*a._value;return b.indexOf(" %")>-1?(e=" ",b=b.replace(" %","")):b=b.replace("%",""),d=i(f,b,c),d.indexOf(")")>-1?(d=d.split(""),d.splice(-1,0,e+"%"),d=d.join("")):d=d+e+"%",d}function g(a){var b=Math.floor(a._value/60/60),c=Math.floor((a._value-60*b*60)/60),d=Math.round(a._value-60*b*60-60*c);return b+":"+(10>c?"0"+c:c)+":"+(10>d?"0"+d:d)}function h(a){var b=a.split(":"),c=0;return 3===b.length?(c+=60*Number(b[0])*60,c+=60*Number(b[1]),c+=Number(b[2])):2===b.length&&(c+=60*Number(b[0]),c+=Number(b[1])),Number(c)}function i(a,c,d){var e,f,g,h,i,j,k=!1,l=!1,m=!1,n="",r=!1,s=!1,t=!1,u=!1,v=!1,w="",x="",y=Math.abs(a),z=["B","KB","MB","GB","TB","PB","EB","ZB","YB"],A="",B=!1;if(0===a&&null!==q)return q;if(c.indexOf("(")>-1?(k=!0,c=c.slice(1,-1)):c.indexOf("+")>-1&&(l=!0,c=c.replace(/\+/g,"")),c.indexOf("a")>-1&&(r=c.indexOf("aK")>=0,s=c.indexOf("aM")>=0,t=c.indexOf("aB")>=0,u=c.indexOf("aT")>=0,v=r||s||t||u,c.indexOf(" a")>-1?(n=" ",c=c.replace(" a","")):c=c.replace("a",""),y>=Math.pow(10,12)&&!v||u?(n+=o[p].abbreviations.trillion,a/=Math.pow(10,12)):y=Math.pow(10,9)&&!v||t?(n+=o[p].abbreviations.billion,a/=Math.pow(10,9)):y=Math.pow(10,6)&&!v||s?(n+=o[p].abbreviations.million,a/=Math.pow(10,6)):(y=Math.pow(10,3)&&!v||r)&&(n+=o[p].abbreviations.thousand,a/=Math.pow(10,3))),c.indexOf("b")>-1)for(c.indexOf(" b")>-1?(w=" ",c=c.replace(" b","")):c=c.replace("b",""),g=0;g<=z.length;g++)if(e=Math.pow(1024,g),f=Math.pow(1024,g+1),a>=e&&f>a){w+=z[g],e>0&&(a/=e);break}return c.indexOf("o")>-1&&(c.indexOf(" o")>-1?(x=" ",c=c.replace(" o","")):c=c.replace("o",""),x+=o[p].ordinal(a)),c.indexOf("[.]")>-1&&(m=!0,c=c.replace("[.]",".")),h=a.toString().split(".")[0],i=c.split(".")[1],j=c.indexOf(","),i?(i.indexOf("[")>-1?(i=i.replace("]",""),i=i.split("["),A=b(a,i[0].length+i[1].length,d,i[1].length)):A=b(a,i.length,d),h=A.split(".")[0],A=A.split(".")[1].length?o[p].delimiters.decimal+A.split(".")[1]:"",m&&0===Number(A.slice(1))&&(A="")):h=b(a,null,d),h.indexOf("-")>-1&&(h=h.slice(1),B=!0),j>-1&&(h=h.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g,"$1"+o[p].delimiters.thousands)),0===c.indexOf(".")&&(h=""),(k&&B?"(":"")+(!k&&B?"-":"")+(!B&&l?"+":"")+h+A+(x?x:"")+(n?n:"")+(w?w:"")+(k&&B?")":"")}function j(a,b){o[a]=b}function k(a){var b=a.toString().split(".");return b.length<2?1:Math.pow(10,b[1].length)}function l(){var a=Array.prototype.slice.call(arguments);return a.reduce(function(a,b){var c=k(a),d=k(b);return c>d?c:d},-1/0)}var m,n="1.5.3",o={},p="en",q=null,r="0,0",s="undefined"!=typeof module&&module.exports;m=function(b){return m.isNumeral(b)?b=b.value():0===b||"undefined"==typeof b?b=0:Number(b)||(b=m.fn.unformat(b)),new a(Number(b))},m.version=n,m.isNumeral=function(b){return b instanceof a},m.language=function(a,b){if(!a)return p;if(a&&!b){if(!o[a])throw new Error("Unknown language : "+a);p=a}return(b||!o[a])&&j(a,b),m},m.languageData=function(a){if(!a)return o[p];if(!o[a])throw new Error("Unknown language : "+a);return o[a]},m.language("en",{delimiters:{thousands:",",decimal:"."},abbreviations:{thousand:"k",million:"m",billion:"b",trillion:"t"},ordinal:function(a){var b=a%10;return 1===~~(a%100/10)?"th":1===b?"st":2===b?"nd":3===b?"rd":"th"},currency:{symbol:"$"}}),m.zeroFormat=function(a){q="string"==typeof a?a:null},m.defaultFormat=function(a){r="string"==typeof a?a:"0.0"},"function"!=typeof Array.prototype.reduce&&(Array.prototype.reduce=function(a,b){"use strict";if(null===this||"undefined"==typeof this)throw new TypeError("Array.prototype.reduce called on null or undefined");if("function"!=typeof a)throw new TypeError(a+" is not a function");var c,d,e=this.length>>>0,f=!1;for(1c;++c)this.hasOwnProperty(c)&&(f?d=a(d,this[c],c,this):(d=this[c],f=!0));if(!f)throw new TypeError("Reduce of empty array with no initial value");return d}),m.fn=a.prototype={clone:function(){return m(this)},format:function(a,b){return c(this,a?a:r,void 0!==b?b:Math.round)},unformat:function(a){return"[object Number]"===Object.prototype.toString.call(a)?a:d(this,a?a:r)},value:function(){return this._value},valueOf:function(){return this._value},set:function(a){return this._value=Number(a),this},add:function(a){function b(a,b){return a+c*b}var c=l.call(null,this._value,a);return this._value=[this._value,a].reduce(b,0)/c,this},subtract:function(a){function b(a,b){return a-c*b}var c=l.call(null,this._value,a);return this._value=[a].reduce(b,this._value*c)/c,this},multiply:function(a){function b(a,b){var c=l(a,b);return a*c*b*c/(c*c)}return this._value=[this._value,a].reduce(b,1),this},divide:function(a){function b(a,b){var c=l(a,b);return a*c/(b*c)}return this._value=[this._value,a].reduce(b),this},difference:function(a){return Math.abs(m(this._value).subtract(a).value())}},s&&(module.exports=m),"undefined"==typeof ender&&(this.numeral=m),"function"==typeof define&&define.amd&&define([],function(){return m})}).call(this);var TimeFormatters={formatUT:function(t){var day,year;if(t==null){t=0}year=(t/(365*24*3600)|0)+1;t%=365*24*3600;day=(t/(24*3600)|0)+1;t%=24*3600;return"Year "+year+", Day "+day+", "+this.hourMinSec(t)+" UT"},formatMET:function(t){var result;if(t==null){t=0}result="T+";if(t>=365*24*3600){result+=(t/(365*24*3600)|0)+":";t%=365*24*3600;if(t<24*3600){result+="0:"}}if(t>=24*3600){result+=(t/(24*3600)|0)+":"}t%=24*3600;return result+this.hourMinSec(t)+" MET"},hourMinSec:function(t){var hour,min,sec;if(t==null){t=0}hour=t/3600|0;if(hour<10){hour="0"+hour}t%=3600;min=t/60|0;if(min<10){min="0"+min}sec=(t%60|0).toFixed();if(sec<10){sec="0"+sec}return""+hour+":"+min+":"+sec},durationString:function(t){var result;if(t==null){t=0}result=t<0?"-":"";t=Math.abs(t);if(t>=365*24*3600){result+=(t/(365*24*3600)|0)+" years ";t%=365*24*3600;if(t<24*3600){result+="0 days "}}if(t>=24*3600){result+=(t/(24*3600)|0)+" days "}t%=24*3600;return result+this.hourMinSec(t)}};var DataFormatters={distanceString:function(value){return numeral(value).format("0,0.000 a")+"m"},heightFromTerrainString:function(value){if(value<=-1){return"NA"}return numeral(value).format("0,0.000 a")+"m"},degreeString:function(value){return numeral(value).format("0.000")+"°"},velocityString:function(value){return numeral(value).format("0,0.000 a")+"m/s"},temperatureString:function(value){if(!value){return"NA"}return numeral(value).format("0,000")+"°C"},accelerationSensorString:function(value){if(value[0]=="No Sensors of the Appropriate Type"){return"NA"}return numeral(value[1][0]).format("0,000")+"G"},pressureSensorString:function(value){if(value[0]=="No Sensors of the Appropriate Type"){return"NA"}return numeral(value[1][0]).format("0,000")+"Pa"},gravitySensorString:function(value){if(value[0]=="No Sensors of the Appropriate Type"){return"NA"}return numeral(value[1][0]).format("0,000 a")+"m/s²"},newtonsString:function(value){return numeral(value).format("0,0.00")+" N"},percentageString:function(value){return numeral(value).format("0%")},tonnageString:function(value){return numeral(value).format("0,0.00")+" t"},timeString:function(value){return numeral(value).format("00:00:00")},plainNumberString:function(value){return numeral(value).format("0,0.00")}};var Prototype={Version:"1.7.2",Browser:function(){var ua=navigator.userAgent;var isOpera=Object.prototype.toString.call(window.opera)=="[object Opera]";return{IE:!!window.attachEvent&&!isOpera,Opera:isOpera,WebKit:ua.indexOf("AppleWebKit/")>-1,Gecko:ua.indexOf("Gecko")>-1&&ua.indexOf("KHTML")===-1,MobileSafari:/Apple.*Mobile/.test(ua)}}(),BrowserFeatures:{XPath:!!document.evaluate,SelectorsAPI:!!document.querySelector,ElementExtensions:function(){var constructor=window.Element||window.HTMLElement;return!!(constructor&&constructor.prototype)}(),SpecificElementExtensions:function(){if(typeof window.HTMLDivElement!=="undefined")return true;var div=document.createElement("div"),form=document.createElement("form"),isSupported=false;if(div["__proto__"]&&div["__proto__"]!==form["__proto__"]){isSupported=true}div=form=null;return isSupported}()},ScriptFragment:"]*>([\\S\\s]*?)",JSONFilter:/^\/\*-secure-([\s\S]*)\*\/\s*$/,emptyFunction:function(){},K:function(x){return x}};if(Prototype.Browser.MobileSafari)Prototype.BrowserFeatures.SpecificElementExtensions=false;var Class=function(){var IS_DONTENUM_BUGGY=function(){for(var p in{toString:1}){if(p==="toString")return false}return true}();function subclass(){}function create(){var parent=null,properties=$A(arguments);if(Object.isFunction(properties[0]))parent=properties.shift();function klass(){this.initialize.apply(this,arguments)}Object.extend(klass,Class.Methods);klass.superclass=parent;klass.subclasses=[];if(parent){subclass.prototype=parent.prototype;klass.prototype=new subclass;parent.subclasses.push(klass)}for(var i=0,length=properties.length;i0){match=source.match(pattern);if(match&&match[0].length>0){result+=source.slice(0,match.index);result+=String.interpret(replacement(match));source=source.slice(match.index+match[0].length)}else{result+=source,source=""}}return result}function sub(pattern,replacement,count){replacement=prepareReplacement(replacement);count=Object.isUndefined(count)?1:count;return this.gsub(pattern,function(match){if(--count<0)return match[0];return replacement(match)})}function scan(pattern,iterator){this.gsub(pattern,iterator);return String(this)}function truncate(length,truncation){length=length||30;truncation=Object.isUndefined(truncation)?"...":truncation;return this.length>length?this.slice(0,length-truncation.length)+truncation:String(this)}function strip(){return this.replace(/^\s+/,"").replace(/\s+$/,"")}function stripTags(){return this.replace(/<\w+(\s+("[^"]*"|'[^']*'|[^>])+)?>|<\/\w+>/gi,"")}function stripScripts(){return this.replace(new RegExp(Prototype.ScriptFragment,"img"),"")}function extractScripts(){var matchAll=new RegExp(Prototype.ScriptFragment,"img"),matchOne=new RegExp(Prototype.ScriptFragment,"im");return(this.match(matchAll)||[]).map(function(scriptTag){return(scriptTag.match(matchOne)||["",""])[1]})}function evalScripts(){return this.extractScripts().map(function(script){return eval(script)})}function escapeHTML(){return this.replace(/&/g,"&").replace(//g,">")}function unescapeHTML(){return this.stripTags().replace(/</g,"<").replace(/>/g,">").replace(/&/g,"&")}function toQueryParams(separator){var match=this.strip().match(/([^?#]*)(#.*)?$/);if(!match)return{};return match[1].split(separator||"&").inject({},function(hash,pair){if((pair=pair.split("="))[0]){var key=decodeURIComponent(pair.shift()),value=pair.length>1?pair.join("="):pair[0];if(value!=undefined){value=value.gsub("+"," ");value=decodeURIComponent(value)}if(key in hash){if(!Object.isArray(hash[key]))hash[key]=[hash[key]];hash[key].push(value)}else hash[key]=value}return hash})}function toArray(){return this.split("")}function succ(){return this.slice(0,this.length-1)+String.fromCharCode(this.charCodeAt(this.length-1)+1)}function times(count){return count<1?"":new Array(count+1).join(this)}function camelize(){return this.replace(/-+(.)?/g,function(match,chr){return chr?chr.toUpperCase():""})}function capitalize(){return this.charAt(0).toUpperCase()+this.substring(1).toLowerCase()}function underscore(){return this.replace(/::/g,"/").replace(/([A-Z]+)([A-Z][a-z])/g,"$1_$2").replace(/([a-z\d])([A-Z])/g,"$1_$2").replace(/-/g,"_").toLowerCase()}function dasherize(){return this.replace(/_/g,"-")}function inspect(useDoubleQuotes){var escapedString=this.replace(/[\x00-\x1f\\]/g,function(character){if(character in String.specialChar){return String.specialChar[character]}return"\\u00"+character.charCodeAt().toPaddedString(2,16)});if(useDoubleQuotes)return'"'+escapedString.replace(/"/g,'\\"')+'"';return"'"+escapedString.replace(/'/g,"\\'")+"'"}function unfilterJSON(filter){return this.replace(filter||Prototype.JSONFilter,"$1")}function isJSON(){var str=this;if(str.blank())return false;str=str.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,"@");str=str.replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,"]");str=str.replace(/(?:^|:|,)(?:\s*\[)+/g,"");return/^[\],:{}\s]*$/.test(str)}function evalJSON(sanitize){var json=this.unfilterJSON(),cx=/[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g;if(cx.test(json)){json=json.replace(cx,function(a){return"\\u"+("0000"+a.charCodeAt(0).toString(16)).slice(-4)})}try{if(!sanitize||json.isJSON())return eval("("+json+")")}catch(e){}throw new SyntaxError("Badly formed JSON string: "+this.inspect())}function parseJSON(){var json=this.unfilterJSON();return JSON.parse(json)}function include(pattern){return this.indexOf(pattern)>-1}function startsWith(pattern,position){position=Object.isNumber(position)?position:0;return this.lastIndexOf(pattern,position)===position}function endsWith(pattern,position){pattern=String(pattern);position=Object.isNumber(position)?position:this.length;if(position<0)position=0;if(position>this.length)position=this.length;var d=position-pattern.length;return d>=0&&this.indexOf(pattern,d)===d}function empty(){return this==""}function blank(){return/^\s*$/.test(this)}function interpolate(object,pattern){return new Template(this,pattern).evaluate(object)}return{gsub:gsub,sub:sub,scan:scan,truncate:truncate,strip:String.prototype.trim||strip,stripTags:stripTags,stripScripts:stripScripts,extractScripts:extractScripts,evalScripts:evalScripts,escapeHTML:escapeHTML,unescapeHTML:unescapeHTML,toQueryParams:toQueryParams,parseQuery:toQueryParams,toArray:toArray,succ:succ,times:times,camelize:camelize,capitalize:capitalize,underscore:underscore,dasherize:dasherize,inspect:inspect,unfilterJSON:unfilterJSON,isJSON:isJSON,evalJSON:NATIVE_JSON_PARSE_SUPPORT?parseJSON:evalJSON,include:include,startsWith:String.prototype.startsWith||startsWith,endsWith:String.prototype.endsWith||endsWith,empty:empty,blank:blank,interpolate:interpolate}}());var Template=Class.create({initialize:function(template,pattern){this.template=template.toString();this.pattern=pattern||Template.Pattern},evaluate:function(object){if(object&&Object.isFunction(object.toTemplateReplacements))object=object.toTemplateReplacements();return this.template.gsub(this.pattern,function(match){if(object==null)return match[1]+"";var before=match[1]||"";if(before=="\\")return match[2];var ctx=object,expr=match[3],pattern=/^([^.[]+|\[((?:.*?[^\\])?)\])(\.|\[|$)/;match=pattern.exec(expr);if(match==null)return before;while(match!=null){var comp=match[1].startsWith("[")?match[2].replace(/\\\\]/g,"]"):match[1];ctx=ctx[comp];if(null==ctx||""==match[3])break;expr=expr.substring("["==match[3]?match[1].length:match[0].length);match=pattern.exec(expr)}return before+String.interpret(ctx)})}});Template.Pattern=/(^|.|\r|\n)(#\{(.*?)\})/;var $break={};var Enumerable=function(){function each(iterator,context){try{this._each(iterator,context)}catch(e){if(e!=$break)throw e}return this}function eachSlice(number,iterator,context){var index=-number,slices=[],array=this.toArray();if(number<1)return array;while((index+=number)=result)result=value},this);return result}function min(iterator,context){iterator=iterator||Prototype.K;var result;this.each(function(value,index){value=iterator.call(context,value,index,this);if(result==null||valueb?1:0}).pluck("value")}function toArray(){return this.map()}function zip(){var iterator=Prototype.K,args=$A(arguments);if(Object.isFunction(args.last()))iterator=args.pop();var collections=[this].concat(args).map($A);return this.map(function(value,index){return iterator(collections.pluck(index))})}function size(){return this.toArray().length}function inspect(){return"#"}return{each:each,eachSlice:eachSlice,all:all,every:all,any:any,some:any,collect:collect,map:collect,detect:detect,findAll:findAll,select:findAll,filter:findAll,grep:grep,include:include,member:include,inGroupsOf:inGroupsOf,inject:inject,invoke:invoke,max:max,min:min,partition:partition,pluck:pluck,reject:reject,sortBy:sortBy,toArray:toArray,entries:toArray,zip:zip,size:size,inspect:inspect,find:detect}}();function $A(iterable){if(!iterable)return[];if("toArray"in Object(iterable))return iterable.toArray();var length=iterable.length||0,results=new Array(length);while(length--)results[length]=iterable[length];return results}function $w(string){if(!Object.isString(string))return[];string=string.strip();return string?string.split(/\s+/):[]}Array.from=$A;(function(){var arrayProto=Array.prototype,slice=arrayProto.slice,_each=arrayProto.forEach;function each(iterator,context){for(var i=0,length=this.length>>>0;i>>0;if(length===0)return-1;i=Number(i);if(isNaN(i)){i=0}else if(i!==0&&isFinite(i)){i=(i>0?1:-1)*Math.floor(Math.abs(i))}if(i>length)return-1;var k=i>=0?i:Math.max(length-Math.abs(i),0);for(;k>>0;if(length===0)return-1;if(!Object.isUndefined(i)){i=Number(i);if(isNaN(i)){i=0}else if(i!==0&&isFinite(i)){i=(i>0?1:-1)*Math.floor(Math.abs(i))}}else{i=length}var k=i>=0?Math.min(i,length-1):length-Math.abs(i);for(;k>=0;k--)if(k in array&&array[k]===item)return k;return-1}function concat(_){var array=[],items=slice.call(arguments,0),item,n=0;items.unshift(this);for(var i=0,length=items.length;i>>0;i>>0;i>>0;i>>0;i"}function clone(){return new Hash(this)}return{initialize:initialize,_each:_each,set:set,get:get,unset:unset,toObject:toObject,toTemplateReplacements:toObject,keys:keys,values:values,index:index,merge:merge,update:update,toQueryString:toQueryString,inspect:inspect,toJSON:toObject,clone:clone}}());Hash.from=$H;Object.extend(Number.prototype,function(){function toColorPart(){return this.toPaddedString(2,16)}function succ(){return this+1}function times(iterator,context){$R(0,this,true).each(iterator,context);return this}function toPaddedString(length,radix){var string=this.toString(radix||10);return"0".times(length-string.length)+string}function abs(){return Math.abs(this)}function round(){return Math.round(this)}function ceil(){return Math.ceil(this)}function floor(){return Math.floor(this)}return{toColorPart:toColorPart,succ:succ,times:times,toPaddedString:toPaddedString,abs:abs,round:round,ceil:ceil,floor:floor}}());function $R(start,end,exclusive){return new ObjectRange(start,end,exclusive)}var ObjectRange=Class.create(Enumerable,function(){function initialize(start,end,exclusive){this.start=start;this.end=end;this.exclusive=exclusive}function _each(iterator,context){var value=this.start,i;for(i=0;this.include(value);i++){iterator.call(context,value,i);value=value.succ()}}function include(value){if(value1&&!(readyState==4&&this._complete))this.respondToReadyState(this.transport.readyState)},setRequestHeaders:function(){var headers={"X-Requested-With":"XMLHttpRequest","X-Prototype-Version":Prototype.Version,Accept:"text/javascript, text/html, application/xml, text/xml, */*"};if(this.method=="post"){headers["Content-type"]=this.options.contentType+(this.options.encoding?"; charset="+this.options.encoding:"");if(this.transport.overrideMimeType&&(navigator.userAgent.match(/Gecko\/(\d{4})/)||[0,2005])[1]<2005)headers["Connection"]="close"}if(typeof this.options.requestHeaders=="object"){var extras=this.options.requestHeaders;if(Object.isFunction(extras.push))for(var i=0,length=extras.length;i=200&&status<300||status==304},getStatus:function(){try{if(this.transport.status===1223)return 204;return this.transport.status||0}catch(e){return 0}},respondToReadyState:function(readyState){var state=Ajax.Request.Events[readyState],response=new Ajax.Response(this);if(state=="Complete"){try{this._complete=true;(this.options["on"+response.status]||this.options["on"+(this.success()?"Success":"Failure")]||Prototype.emptyFunction)(response,response.headerJSON)}catch(e){this.dispatchException(e)}var contentType=response.getHeader("Content-type");if(this.options.evalJS=="force"||this.options.evalJS&&this.isSameOrigin()&&contentType&&contentType.match(/^\s*(text|application)\/(x-)?(java|ecma)script(;.*)?\s*$/i))this.evalResponse()}try{(this.options["on"+state]||Prototype.emptyFunction)(response,response.headerJSON);Ajax.Responders.dispatch("on"+state,this,response,response.headerJSON)}catch(e){this.dispatchException(e)}if(state=="Complete"){this.transport.onreadystatechange=Prototype.emptyFunction}},isSameOrigin:function(){var m=this.url.match(/^\s*https?:\/\/[^\/]*/);return!m||m[0]=="#{protocol}//#{domain}#{port}".interpolate({protocol:location.protocol,domain:document.domain,port:location.port?":"+location.port:""})},getHeader:function(name){try{return this.transport.getResponseHeader(name)||null}catch(e){return null}},evalResponse:function(){try{return eval((this.transport.responseText||"").unfilterJSON())}catch(e){this.dispatchException(e)}},dispatchException:function(exception){(this.options.onException||Prototype.emptyFunction)(this,exception);Ajax.Responders.dispatch("onException",this,exception)}});Ajax.Request.Events=["Uninitialized","Loading","Loaded","Interactive","Complete"];Ajax.Response=Class.create({initialize:function(request){this.request=request;var transport=this.transport=request.transport,readyState=this.readyState=transport.readyState;if(readyState>2&&!Prototype.Browser.IE||readyState==4){this.status=this.getStatus();this.statusText=this.getStatusText();this.responseText=String.interpret(transport.responseText);this.headerJSON=this._getHeaderJSON()}if(readyState==4){var xml=transport.responseXML;this.responseXML=Object.isUndefined(xml)?null:xml;this.responseJSON=this._getResponseJSON()}},status:0,statusText:"",getStatus:Ajax.Request.prototype.getStatus,getStatusText:function(){try{return this.transport.statusText||""}catch(e){return""}},getHeader:Ajax.Request.prototype.getHeader,getAllHeaders:function(){try{return this.getAllResponseHeaders()}catch(e){return null}},getResponseHeader:function(name){return this.transport.getResponseHeader(name)},getAllResponseHeaders:function(){return this.transport.getAllResponseHeaders()},_getHeaderJSON:function(){var json=this.getHeader("X-JSON");if(!json)return null;try{json=decodeURIComponent(escape(json))}catch(e){}try{return json.evalJSON(this.request.options.sanitizeJSON||!this.request.isSameOrigin())}catch(e){this.request.dispatchException(e)}},_getResponseJSON:function(){var options=this.request.options;if(!options.evalJSON||options.evalJSON!="force"&&!(this.getHeader("Content-type")||"").include("application/json")||this.responseText.blank())return null;try{return this.responseText.evalJSON(options.sanitizeJSON||!this.request.isSameOrigin())}catch(e){this.request.dispatchException(e)}}});Ajax.Updater=Class.create(Ajax.Request,{initialize:function($super,container,url,options){this.container={success:container.success||container,failure:container.failure||(container.success?null:container)};options=Object.clone(options);var onComplete=options.onComplete;options.onComplete=function(response,json){this.updateContent(response.responseText);if(Object.isFunction(onComplete))onComplete(response,json)}.bind(this);$super(url,options)},updateContent:function(responseText){var receiver=this.container[this.success()?"success":"failure"],options=this.options;if(!options.evalScripts)responseText=responseText.stripScripts();if(receiver=$(receiver)){if(options.insertion){if(Object.isString(options.insertion)){var insertion={};insertion[options.insertion]=responseText;receiver.insert(insertion)}else options.insertion(receiver,responseText)}else receiver.update(responseText)}}});Ajax.PeriodicalUpdater=Class.create(Ajax.Base,{initialize:function($super,container,url,options){$super(options);this.onComplete=this.options.onComplete;this.frequency=this.options.frequency||2;this.decay=this.options.decay||1;this.updater={};this.container=container;this.url=url;this.start()},start:function(){this.options.onComplete=this.updateComplete.bind(this);this.onTimerEvent()},stop:function(){this.updater.options.onComplete=undefined;clearTimeout(this.timer);(this.onComplete||Prototype.emptyFunction).apply(this,arguments)},updateComplete:function(response){if(this.options.decay){this.decay=response.responseText==this.lastText?this.decay*this.options.decay:1;this.lastText=response.responseText}this.timer=this.onTimerEvent.bind(this).delay(this.decay*this.frequency)},onTimerEvent:function(){this.updater=new Ajax.Updater(this.container,this.url,this.options)}});(function(GLOBAL){var UNDEFINED;var SLICE=Array.prototype.slice;var DIV=document.createElement("div");function $(element){if(arguments.length>1){for(var i=0,elements=[],length=arguments.length;i');return el.tagName.toLowerCase()==="input"&&el.name==="x"}catch(err){return false}}();var oldElement=GLOBAL.Element;function Element(tagName,attributes){attributes=attributes||{};tagName=tagName.toLowerCase();if(HAS_EXTENDED_CREATE_ELEMENT_SYNTAX&&attributes.name){tagName="<"+tagName+' name="'+attributes.name+'">';delete attributes.name;return Element.writeAttribute(document.createElement(tagName),attributes)}if(!ELEMENT_CACHE[tagName])ELEMENT_CACHE[tagName]=Element.extend(document.createElement(tagName));var node=shouldUseCreationCache(tagName,attributes)?ELEMENT_CACHE[tagName].cloneNode(false):document.createElement(tagName);return Element.writeAttribute(node,attributes)}GLOBAL.Element=Element;Object.extend(GLOBAL.Element,oldElement||{});if(oldElement)GLOBAL.Element.prototype=oldElement.prototype;Element.Methods={ByTag:{},Simulated:{}};var methods={};var INSPECT_ATTRIBUTES={id:"id",className:"class"};function inspect(element){element=$(element);var result="<"+element.tagName.toLowerCase();var attribute,value;for(var property in INSPECT_ATTRIBUTES){attribute=INSPECT_ATTRIBUTES[property];value=(element[property]||"").toString();if(value)result+=" "+attribute+"="+value.inspect(true)}return result+">"}methods.inspect=inspect;function visible(element){return $(element).style.display!=="none"}function toggle(element,bool){element=$(element);if(Object.isUndefined(bool))bool=!Element.visible(element);Element[bool?"show":"hide"](element);return element}function hide(element){element=$(element);element.style.display="none";return element}function show(element){element=$(element);element.style.display="";return element}Object.extend(methods,{visible:visible,toggle:toggle,hide:hide,show:show});function remove(element){element=$(element);element.parentNode.removeChild(element);return element}var SELECT_ELEMENT_INNERHTML_BUGGY=function(){var el=document.createElement("select"),isBuggy=true;el.innerHTML='';if(el.options&&el.options[0]){isBuggy=el.options[0].nodeName.toUpperCase()!=="OPTION"}el=null;return isBuggy}();var TABLE_ELEMENT_INNERHTML_BUGGY=function(){try{var el=document.createElement("table");if(el&&el.tBodies){el.innerHTML="test";var isBuggy=typeof el.tBodies[0]=="undefined";el=null;return isBuggy}}catch(e){return true}}();var LINK_ELEMENT_INNERHTML_BUGGY=function(){try{var el=document.createElement("div");el.innerHTML="";var isBuggy=el.childNodes.length===0;el=null;return isBuggy}catch(e){return true}}();var ANY_INNERHTML_BUGGY=SELECT_ELEMENT_INNERHTML_BUGGY||TABLE_ELEMENT_INNERHTML_BUGGY||LINK_ELEMENT_INNERHTML_BUGGY;var SCRIPT_ELEMENT_REJECTS_TEXTNODE_APPENDING=function(){var s=document.createElement("script"),isBuggy=false;try{s.appendChild(document.createTextNode(""));isBuggy=!s.firstChild||s.firstChild&&s.firstChild.nodeType!==3}catch(e){isBuggy=true}s=null;return isBuggy}();function update(element,content){element=$(element);var descendants=element.getElementsByTagName("*"),i=descendants.length;while(i--)purgeElement(descendants[i]);if(content&&content.toElement)content=content.toElement();if(Object.isElement(content))return element.update().insert(content);content=Object.toHTML(content);var tagName=element.tagName.toUpperCase();if(tagName==="SCRIPT"&&SCRIPT_ELEMENT_REJECTS_TEXTNODE_APPENDING){element.text=content;return element}if(ANY_INNERHTML_BUGGY){if(tagName in INSERTION_TRANSLATIONS.tags){while(element.firstChild)element.removeChild(element.firstChild);var nodes=getContentFromAnonymousElement(tagName,content.stripScripts());for(var i=0,node;node=nodes[i];i++)element.appendChild(node)}else if(LINK_ELEMENT_INNERHTML_BUGGY&&Object.isString(content)&&content.indexOf("-1){while(element.firstChild)element.removeChild(element.firstChild);var nodes=getContentFromAnonymousElement(tagName,content.stripScripts(),true);for(var i=0,node;node=nodes[i];i++)element.appendChild(node)}else{element.innerHTML=content.stripScripts()}}else{element.innerHTML=content.stripScripts()}content.evalScripts.bind(content).defer();return element}function replace(element,content){element=$(element);if(content&&content.toElement){content=content.toElement()}else if(!Object.isElement(content)){content=Object.toHTML(content);var range=element.ownerDocument.createRange();range.selectNode(element);content.evalScripts.bind(content).defer();content=range.createContextualFragment(content.stripScripts())}element.parentNode.replaceChild(content,element);return element}var INSERTION_TRANSLATIONS={before:function(element,node){element.parentNode.insertBefore(node,element)},top:function(element,node){element.insertBefore(node,element.firstChild)},bottom:function(element,node){element.appendChild(node)},after:function(element,node){element.parentNode.insertBefore(node,element.nextSibling)},tags:{TABLE:["","
    ",1],TBODY:["","
    ",2],TR:["","
    ",3],TD:["
    ","
    ",4],SELECT:["",1]}};var tags=INSERTION_TRANSLATIONS.tags;Object.extend(tags,{THEAD:tags.TBODY,TFOOT:tags.TBODY,TH:tags.TD});function replace_IE(element,content){element=$(element);if(content&&content.toElement)content=content.toElement();if(Object.isElement(content)){element.parentNode.replaceChild(content,element);return element}content=Object.toHTML(content);var parent=element.parentNode,tagName=parent.tagName.toUpperCase();if(tagName in INSERTION_TRANSLATIONS.tags){var nextSibling=Element.next(element);var fragments=getContentFromAnonymousElement(tagName,content.stripScripts());parent.removeChild(element);var iterator;if(nextSibling)iterator=function(node){parent.insertBefore(node,nextSibling)};else iterator=function(node){parent.appendChild(node)};fragments.each(iterator)}else{element.outerHTML=content.stripScripts()}content.evalScripts.bind(content).defer();return element}if("outerHTML"in document.documentElement)replace=replace_IE;function isContent(content){if(Object.isUndefined(content)||content===null)return false;if(Object.isString(content)||Object.isNumber(content))return true;if(Object.isElement(content))return true;if(content.toElement||content.toHTML)return true;return false}function insertContentAt(element,content,position){position=position.toLowerCase();var method=INSERTION_TRANSLATIONS[position];if(content&&content.toElement)content=content.toElement();if(Object.isElement(content)){method(element,content);return element}content=Object.toHTML(content);var tagName=(position==="before"||position==="after"?element.parentNode:element).tagName.toUpperCase();var childNodes=getContentFromAnonymousElement(tagName,content.stripScripts());if(position==="top"||position==="after")childNodes.reverse();for(var i=0,node;node=childNodes[i];i++)method(element,node);content.evalScripts.bind(content).defer()}function insert(element,insertions){element=$(element);if(isContent(insertions))insertions={bottom:insertions};for(var position in insertions)insertContentAt(element,insertions[position],position);return element}function wrap(element,wrapper,attributes){element=$(element);if(Object.isElement(wrapper)){$(wrapper).writeAttribute(attributes||{})}else if(Object.isString(wrapper)){wrapper=new Element(wrapper,attributes)}else{wrapper=new Element("div",wrapper)}if(element.parentNode)element.parentNode.replaceChild(wrapper,element);wrapper.appendChild(element);return wrapper}function cleanWhitespace(element){element=$(element);var node=element.firstChild;while(node){var nextNode=node.nextSibling;if(node.nodeType===Node.TEXT_NODE&&!/\S/.test(node.nodeValue))element.removeChild(node);node=nextNode}return element}function empty(element){return $(element).innerHTML.blank()}function getContentFromAnonymousElement(tagName,html,force){var t=INSERTION_TRANSLATIONS.tags[tagName],div=DIV;var workaround=!!t;if(!workaround&&force){workaround=true;t=["","",0]}if(workaround){div.innerHTML=" "+t[0]+html+t[1];div.removeChild(div.firstChild);for(var i=t[2];i--;)div=div.firstChild}else{div.innerHTML=html}return $A(div.childNodes)}function clone(element,deep){if(!(element=$(element)))return;var clone=element.cloneNode(deep);if(!HAS_UNIQUE_ID_PROPERTY){clone._prototypeUID=UNDEFINED;if(deep){var descendants=Element.select(clone,"*"),i=descendants.length;while(i--)descendants[i]._prototypeUID=UNDEFINED}}return Element.extend(clone)}function purgeElement(element){var uid=getUniqueElementID(element);if(uid){Element.stopObserving(element);if(!HAS_UNIQUE_ID_PROPERTY)element._prototypeUID=UNDEFINED;delete Element.Storage[uid]}}function purgeCollection(elements){var i=elements.length;while(i--)purgeElement(elements[i])}function purgeCollection_IE(elements){var i=elements.length,element,uid;while(i--){element=elements[i];uid=getUniqueElementID(element);delete Element.Storage[uid];delete Event.cache[uid]}}if(HAS_UNIQUE_ID_PROPERTY){purgeCollection=purgeCollection_IE}function purge(element){if(!(element=$(element)))return;purgeElement(element);var descendants=element.getElementsByTagName("*"),i=descendants.length;while(i--)purgeElement(descendants[i]);return null}Object.extend(methods,{remove:remove,update:update,replace:replace,insert:insert,wrap:wrap,cleanWhitespace:cleanWhitespace,empty:empty,clone:clone,purge:purge});function recursivelyCollect(element,property,maximumLength){element=$(element);maximumLength=maximumLength||-1;var elements=[];while(element=element[property]){if(element.nodeType===Node.ELEMENT_NODE)elements.push(Element.extend(element));if(elements.length===maximumLength)break}return elements}function ancestors(element){return recursivelyCollect(element,"parentNode")}function descendants(element){return Element.select(element,"*")}function firstDescendant(element){element=$(element).firstChild;while(element&&element.nodeType!==Node.ELEMENT_NODE)element=element.nextSibling;return $(element)}function immediateDescendants(element){var results=[],child=$(element).firstChild;while(child){if(child.nodeType===Node.ELEMENT_NODE)results.push(Element.extend(child));child=child.nextSibling}return results}function previousSiblings(element){return recursivelyCollect(element,"previousSibling")}function nextSiblings(element){return recursivelyCollect(element,"nextSibling")}function siblings(element){element=$(element);var previous=previousSiblings(element),next=nextSiblings(element);return previous.reverse().concat(next)}function match(element,selector){element=$(element);if(Object.isString(selector))return Prototype.Selector.match(element,selector);return selector.match(element)}function _recursivelyFind(element,property,expression,index){element=$(element),expression=expression||0,index=index||0;if(Object.isNumber(expression)){index=expression,expression=null}while(element=element[property]){if(element.nodeType!==1)continue;if(expression&&!Prototype.Selector.match(element,expression))continue;if(--index>=0)continue;return Element.extend(element)}}function up(element,expression,index){element=$(element);if(arguments.length===1)return $(element.parentNode);return _recursivelyFind(element,"parentNode",expression,index)}function down(element,expression,index){if(arguments.length===1)return firstDescendant(element);element=$(element),expression=expression||0,index=index||0;if(Object.isNumber(expression))index=expression,expression="*";var node=Prototype.Selector.select(expression,element)[index];return Element.extend(node)}function previous(element,expression,index){return _recursivelyFind(element,"previousSibling",expression,index)}function next(element,expression,index){return _recursivelyFind(element,"nextSibling",expression,index)}function select(element){element=$(element);var expressions=SLICE.call(arguments,1).join(", ");return Prototype.Selector.select(expressions,element)}function adjacent(element){element=$(element);var expressions=SLICE.call(arguments,1).join(", ");var siblings=Element.siblings(element),results=[];for(var i=0,sibling;sibling=siblings[i];i++){if(Prototype.Selector.match(sibling,expressions))results.push(sibling)}return results}function descendantOf_DOM(element,ancestor){element=$(element),ancestor=$(ancestor);while(element=element.parentNode)if(element===ancestor)return true;return false}function descendantOf_contains(element,ancestor){element=$(element),ancestor=$(ancestor);if(!ancestor.contains)return descendantOf_DOM(element,ancestor);return ancestor.contains(element)&&ancestor!==element}function descendantOf_compareDocumentPosition(element,ancestor){element=$(element),ancestor=$(ancestor);return(element.compareDocumentPosition(ancestor)&8)===8}var descendantOf;if(DIV.compareDocumentPosition){descendantOf=descendantOf_compareDocumentPosition}else if(DIV.contains){descendantOf=descendantOf_contains}else{descendantOf=descendantOf_DOM}Object.extend(methods,{recursivelyCollect:recursivelyCollect,ancestors:ancestors,descendants:descendants,firstDescendant:firstDescendant,immediateDescendants:immediateDescendants,previousSiblings:previousSiblings,nextSiblings:nextSiblings,siblings:siblings,match:match,up:up,down:down,previous:previous,next:next,select:select,adjacent:adjacent,descendantOf:descendantOf,getElementsBySelector:select,childElements:immediateDescendants});var idCounter=1;function identify(element){element=$(element);var id=Element.readAttribute(element,"id");if(id)return id;do{id="anonymous_element_"+idCounter++}while($(id));Element.writeAttribute(element,"id",id);return id}function readAttribute(element,name){return $(element).getAttribute(name)}function readAttribute_IE(element,name){element=$(element);var table=ATTRIBUTE_TRANSLATIONS.read;if(table.values[name])return table.values[name](element,name);if(table.names[name])name=table.names[name];if(name.include(":")){if(!element.attributes||!element.attributes[name])return null;return element.attributes[name].value}return element.getAttribute(name)}function readAttribute_Opera(element,name){if(name==="title")return element.title;return element.getAttribute(name)}var PROBLEMATIC_ATTRIBUTE_READING=function(){DIV.setAttribute("onclick",[]);var value=DIV.getAttribute("onclick");var isFunction=Object.isArray(value);DIV.removeAttribute("onclick");return isFunction}();if(PROBLEMATIC_ATTRIBUTE_READING){readAttribute=readAttribute_IE}else if(Prototype.Browser.Opera){readAttribute=readAttribute_Opera}function writeAttribute(element,name,value){element=$(element);var attributes={},table=ATTRIBUTE_TRANSLATIONS.write; +Math.toRadians = function(angleInDegrees){ + return angleInDegrees * (Math.PI/180) +} -if(typeof name==="object"){attributes=name}else{attributes[name]=Object.isUndefined(value)?true:value}for(var attr in attributes){name=table.names[attr]||attr;value=attributes[attr];if(table.values[attr])name=table.values[attr](element,value)||name;if(value===false||value===null)element.removeAttribute(name);else if(value===true)element.setAttribute(name,name);else element.setAttribute(name,value)}return element}var PROBLEMATIC_HAS_ATTRIBUTE_WITH_CHECKBOXES=function(){if(!HAS_EXTENDED_CREATE_ELEMENT_SYNTAX){return false}var checkbox=document.createElement('');checkbox.checked=true;var node=checkbox.getAttributeNode("checked");return!node||!node.specified}();function hasAttribute(element,attribute){attribute=ATTRIBUTE_TRANSLATIONS.has[attribute]||attribute;var node=$(element).getAttributeNode(attribute);return!!(node&&node.specified)}function hasAttribute_IE(element,attribute){if(attribute==="checked"){return element.checked}return hasAttribute(element,attribute)}GLOBAL.Element.Methods.Simulated.hasAttribute=PROBLEMATIC_HAS_ATTRIBUTE_WITH_CHECKBOXES?hasAttribute_IE:hasAttribute;function classNames(element){return new Element.ClassNames(element)}var regExpCache={};function getRegExpForClassName(className){if(regExpCache[className])return regExpCache[className];var re=new RegExp("(^|\\s+)"+className+"(\\s+|$)");regExpCache[className]=re;return re}function hasClassName(element,className){if(!(element=$(element)))return;var elementClassName=element.className;if(elementClassName.length===0)return false;if(elementClassName===className)return true;return getRegExpForClassName(className).test(elementClassName)}function addClassName(element,className){if(!(element=$(element)))return;if(!hasClassName(element,className))element.className+=(element.className?" ":"")+className;return element}function removeClassName(element,className){if(!(element=$(element)))return;element.className=element.className.replace(getRegExpForClassName(className)," ").strip();return element}function toggleClassName(element,className,bool){if(!(element=$(element)))return;if(Object.isUndefined(bool))bool=!hasClassName(element,className);var method=Element[bool?"addClassName":"removeClassName"];return method(element,className)}var ATTRIBUTE_TRANSLATIONS={};var classProp="className",forProp="for";DIV.setAttribute(classProp,"x");if(DIV.className!=="x"){DIV.setAttribute("class","x");if(DIV.className==="x")classProp="class"}var LABEL=document.createElement("label");LABEL.setAttribute(forProp,"x");if(LABEL.htmlFor!=="x"){LABEL.setAttribute("htmlFor","x");if(LABEL.htmlFor==="x")forProp="htmlFor"}LABEL=null;function _getAttr(element,attribute){return element.getAttribute(attribute)}function _getAttr2(element,attribute){return element.getAttribute(attribute,2)}function _getAttrNode(element,attribute){var node=element.getAttributeNode(attribute);return node?node.value:""}function _getFlag(element,attribute){return $(element).hasAttribute(attribute)?attribute:null}DIV.onclick=Prototype.emptyFunction;var onclickValue=DIV.getAttribute("onclick");var _getEv;if(String(onclickValue).indexOf("{")>-1){_getEv=function(element,attribute){var value=element.getAttribute(attribute);if(!value)return null;value=value.toString();value=value.split("{")[1];value=value.split("}")[0];return value.strip()}}else if(onclickValue===""){_getEv=function(element,attribute){var value=element.getAttribute(attribute);if(!value)return null;return value.strip()}}ATTRIBUTE_TRANSLATIONS.read={names:{class:classProp,className:classProp,for:forProp,htmlFor:forProp},values:{style:function(element){return element.style.cssText.toLowerCase()},title:function(element){return element.title}}};ATTRIBUTE_TRANSLATIONS.write={names:{className:"class",htmlFor:"for",cellpadding:"cellPadding",cellspacing:"cellSpacing"},values:{checked:function(element,value){element.checked=!!value},style:function(element,value){element.style.cssText=value?value:""}}};ATTRIBUTE_TRANSLATIONS.has={names:{}};Object.extend(ATTRIBUTE_TRANSLATIONS.write.names,ATTRIBUTE_TRANSLATIONS.read.names);var CAMEL_CASED_ATTRIBUTE_NAMES=$w("colSpan rowSpan vAlign dateTime "+"accessKey tabIndex encType maxLength readOnly longDesc frameBorder");for(var i=0,attr;attr=CAMEL_CASED_ATTRIBUTE_NAMES[i];i++){ATTRIBUTE_TRANSLATIONS.write.names[attr.toLowerCase()]=attr;ATTRIBUTE_TRANSLATIONS.has.names[attr.toLowerCase()]=attr}Object.extend(ATTRIBUTE_TRANSLATIONS.read.values,{href:_getAttr2,src:_getAttr2,type:_getAttr,action:_getAttrNode,disabled:_getFlag,checked:_getFlag,readonly:_getFlag,multiple:_getFlag,onload:_getEv,onunload:_getEv,onclick:_getEv,ondblclick:_getEv,onmousedown:_getEv,onmouseup:_getEv,onmouseover:_getEv,onmousemove:_getEv,onmouseout:_getEv,onfocus:_getEv,onblur:_getEv,onkeypress:_getEv,onkeydown:_getEv,onkeyup:_getEv,onsubmit:_getEv,onreset:_getEv,onselect:_getEv,onchange:_getEv});Object.extend(methods,{identify:identify,readAttribute:readAttribute,writeAttribute:writeAttribute,classNames:classNames,hasClassName:hasClassName,addClassName:addClassName,removeClassName:removeClassName,toggleClassName:toggleClassName});function normalizeStyleName(style){if(style==="float"||style==="styleFloat")return"cssFloat";return style.camelize()}function normalizeStyleName_IE(style){if(style==="float"||style==="cssFloat")return"styleFloat";return style.camelize()}function setStyle(element,styles){element=$(element);var elementStyle=element.style,match;if(Object.isString(styles)){elementStyle.cssText+=";"+styles;if(styles.include("opacity")){var opacity=styles.match(/opacity:\s*(\d?\.?\d*)/)[1];Element.setOpacity(element,opacity)}return element}for(var property in styles){if(property==="opacity"){Element.setOpacity(element,styles[property])}else{var value=styles[property];if(property==="float"||property==="cssFloat"){property=Object.isUndefined(elementStyle.styleFloat)?"cssFloat":"styleFloat"}elementStyle[property]=value}}return element}function getStyle(element,style){element=$(element);style=normalizeStyleName(style);var value=element.style[style];if(!value||value==="auto"){var css=document.defaultView.getComputedStyle(element,null);value=css?css[style]:null}if(style==="opacity")return value?parseFloat(value):1;return value==="auto"?null:value}function getStyle_Opera(element,style){switch(style){case"height":case"width":if(!Element.visible(element))return null;var dim=parseInt(getStyle(element,style),10);if(dim!==element["offset"+style.capitalize()])return dim+"px";return Element.measure(element,style);default:return getStyle(element,style)}}function getStyle_IE(element,style){element=$(element);style=normalizeStyleName_IE(style);var value=element.style[style];if(!value&&element.currentStyle){value=element.currentStyle[style]}if(style==="opacity"&&!STANDARD_CSS_OPACITY_SUPPORTED)return getOpacity_IE(element);if(value==="auto"){if((style==="width"||style==="height")&&Element.visible(element))return Element.measure(element,style)+"px";return null}return value}function stripAlphaFromFilter_IE(filter){return(filter||"").replace(/alpha\([^\)]*\)/gi,"")}function hasLayout_IE(element){if(!element.currentStyle||!element.currentStyle.hasLayout)element.style.zoom=1;return element}var STANDARD_CSS_OPACITY_SUPPORTED=function(){DIV.style.cssText="opacity:.55";return/^0.55/.test(DIV.style.opacity)}();function setOpacity(element,value){element=$(element);if(value==1||value==="")value="";else if(value<1e-5)value=0;element.style.opacity=value;return element}function setOpacity_IE(element,value){if(STANDARD_CSS_OPACITY_SUPPORTED)return setOpacity(element,value);element=hasLayout_IE($(element));var filter=Element.getStyle(element,"filter"),style=element.style;if(value==1||value===""){filter=stripAlphaFromFilter_IE(filter);if(filter)style.filter=filter;else style.removeAttribute("filter");return element}if(value<1e-5)value=0;style.filter=stripAlphaFromFilter_IE(filter)+"alpha(opacity="+value*100+")";return element}function getOpacity(element){return Element.getStyle(element,"opacity")}function getOpacity_IE(element){if(STANDARD_CSS_OPACITY_SUPPORTED)return getOpacity(element);var filter=Element.getStyle(element,"filter");if(filter.length===0)return 1;var match=(filter||"").match(/alpha\(opacity=(.*)\)/);if(match&&match[1])return parseFloat(match[1])/100;return 1}Object.extend(methods,{setStyle:setStyle,getStyle:getStyle,setOpacity:setOpacity,getOpacity:getOpacity});if("styleFloat"in DIV.style){methods.getStyle=getStyle_IE;methods.setOpacity=setOpacity_IE;methods.getOpacity=getOpacity_IE}var UID=0;GLOBAL.Element.Storage={UID:1};function getUniqueElementID(element){if(element===window)return 0;if(typeof element._prototypeUID==="undefined")element._prototypeUID=Element.Storage.UID++;return element._prototypeUID}function getUniqueElementID_IE(element){if(element===window)return 0;if(element==document)return 1;return element.uniqueID}var HAS_UNIQUE_ID_PROPERTY="uniqueID"in DIV;if(HAS_UNIQUE_ID_PROPERTY)getUniqueElementID=getUniqueElementID_IE;function getStorage(element){if(!(element=$(element)))return;var uid=getUniqueElementID(element);if(!Element.Storage[uid])Element.Storage[uid]=$H();return Element.Storage[uid]}function store(element,key,value){if(!(element=$(element)))return;var storage=getStorage(element);if(arguments.length===2){storage.update(key)}else{storage.set(key,value)}return element}function retrieve(element,key,defaultValue){if(!(element=$(element)))return;var storage=getStorage(element),value=storage.get(key);if(Object.isUndefined(value)){storage.set(key,defaultValue);value=defaultValue}return value}Object.extend(methods,{getStorage:getStorage,store:store,retrieve:retrieve});var Methods={},ByTag=Element.Methods.ByTag,F=Prototype.BrowserFeatures;if(!F.ElementExtensions&&"__proto__"in DIV){GLOBAL.HTMLElement={};GLOBAL.HTMLElement.prototype=DIV["__proto__"];F.ElementExtensions=true}function checkElementPrototypeDeficiency(tagName){if(typeof window.Element==="undefined")return false;if(!HAS_EXTENDED_CREATE_ELEMENT_SYNTAX)return false;var proto=window.Element.prototype;if(proto){var id="_"+(Math.random()+"").slice(2),el=document.createElement(tagName);proto[id]="x";var isBuggy=el[id]!=="x";delete proto[id];el=null;return isBuggy}return false}var HTMLOBJECTELEMENT_PROTOTYPE_BUGGY=checkElementPrototypeDeficiency("object");function extendElementWith(element,methods){for(var property in methods){var value=methods[property];if(Object.isFunction(value)&&!(property in element))element[property]=value.methodize()}}var EXTENDED={};function elementIsExtended(element){var uid=getUniqueElementID(element);return uid in EXTENDED}function extend(element){if(!element||elementIsExtended(element))return element;if(element.nodeType!==Node.ELEMENT_NODE||element==window)return element;var methods=Object.clone(Methods),tagName=element.tagName.toUpperCase();if(ByTag[tagName])Object.extend(methods,ByTag[tagName]);extendElementWith(element,methods);EXTENDED[getUniqueElementID(element)]=true;return element}function extend_IE8(element){if(!element||elementIsExtended(element))return element;var t=element.tagName;if(t&&/^(?:object|applet|embed)$/i.test(t)){extendElementWith(element,Element.Methods);extendElementWith(element,Element.Methods.Simulated);extendElementWith(element,Element.Methods.ByTag[t.toUpperCase()])}return element}if(F.SpecificElementExtensions){extend=HTMLOBJECTELEMENT_PROTOTYPE_BUGGY?extend_IE8:Prototype.K}function addMethodsToTagName(tagName,methods){tagName=tagName.toUpperCase();if(!ByTag[tagName])ByTag[tagName]={};Object.extend(ByTag[tagName],methods)}function mergeMethods(destination,methods,onlyIfAbsent){if(Object.isUndefined(onlyIfAbsent))onlyIfAbsent=false;for(var property in methods){var value=methods[property];if(!Object.isFunction(value))continue;if(!onlyIfAbsent||!(property in destination))destination[property]=value.methodize()}}function findDOMClass(tagName){var klass;var trans={OPTGROUP:"OptGroup",TEXTAREA:"TextArea",P:"Paragraph",FIELDSET:"FieldSet",UL:"UList",OL:"OList",DL:"DList",DIR:"Directory",H1:"Heading",H2:"Heading",H3:"Heading",H4:"Heading",H5:"Heading",H6:"Heading",Q:"Quote",INS:"Mod",DEL:"Mod",A:"Anchor",IMG:"Image",CAPTION:"TableCaption",COL:"TableCol",COLGROUP:"TableCol",THEAD:"TableSection",TFOOT:"TableSection",TBODY:"TableSection",TR:"TableRow",TH:"TableCell",TD:"TableCell",FRAMESET:"FrameSet",IFRAME:"IFrame"};if(trans[tagName])klass="HTML"+trans[tagName]+"Element";if(window[klass])return window[klass];klass="HTML"+tagName+"Element";if(window[klass])return window[klass];klass="HTML"+tagName.capitalize()+"Element";if(window[klass])return window[klass];var element=document.createElement(tagName),proto=element["__proto__"]||element.constructor.prototype;element=null;return proto}function addMethods(methods){if(arguments.length===0)addFormMethods();if(arguments.length===2){var tagName=methods;methods=arguments[1]}if(!tagName){Object.extend(Element.Methods,methods||{})}else{if(Object.isArray(tagName)){for(var i=0,tag;tag=tagName[i];i++)addMethodsToTagName(tag,methods)}else{addMethodsToTagName(tagName,methods)}}var ELEMENT_PROTOTYPE=window.HTMLElement?HTMLElement.prototype:Element.prototype;if(F.ElementExtensions){mergeMethods(ELEMENT_PROTOTYPE,Element.Methods);mergeMethods(ELEMENT_PROTOTYPE,Element.Methods.Simulated,true)}if(F.SpecificElementExtensions){for(var tag in Element.Methods.ByTag){var klass=findDOMClass(tag);if(Object.isUndefined(klass))continue;mergeMethods(klass.prototype,ByTag[tag])}}Object.extend(Element,Element.Methods);Object.extend(Element,Element.Methods.Simulated);delete Element.ByTag;delete Element.Simulated;Element.extend.refresh();ELEMENT_CACHE={}}Object.extend(GLOBAL.Element,{extend:extend,addMethods:addMethods});if(extend===Prototype.K){GLOBAL.Element.extend.refresh=Prototype.emptyFunction}else{GLOBAL.Element.extend.refresh=function(){if(Prototype.BrowserFeatures.ElementExtensions)return;Object.extend(Methods,Element.Methods);Object.extend(Methods,Element.Methods.Simulated);EXTENDED={}}}function addFormMethods(){Object.extend(Form,Form.Methods);Object.extend(Form.Element,Form.Element.Methods);Object.extend(Element.Methods.ByTag,{FORM:Object.clone(Form.Methods),INPUT:Object.clone(Form.Element.Methods),SELECT:Object.clone(Form.Element.Methods),TEXTAREA:Object.clone(Form.Element.Methods),BUTTON:Object.clone(Form.Element.Methods)})}Element.addMethods(methods);function destroyCache_IE(){DIV=null;ELEMENT_CACHE=null}if(window.attachEvent)window.attachEvent("onunload",destroyCache_IE)})(this);(function(){function toDecimal(pctString){var match=pctString.match(/^(\d+)%?$/i);if(!match)return null;return Number(match[1])/100}function getRawStyle(element,style){element=$(element);var value=element.style[style];if(!value||value==="auto"){var css=document.defaultView.getComputedStyle(element,null);value=css?css[style]:null}if(style==="opacity")return value?parseFloat(value):1;return value==="auto"?null:value}function getRawStyle_IE(element,style){var value=element.style[style];if(!value&&element.currentStyle){value=element.currentStyle[style]}return value}function getContentWidth(element,context){var boxWidth=element.offsetWidth;var bl=getPixelValue(element,"borderLeftWidth",context)||0;var br=getPixelValue(element,"borderRightWidth",context)||0;var pl=getPixelValue(element,"paddingLeft",context)||0;var pr=getPixelValue(element,"paddingRight",context)||0;return boxWidth-bl-br-pl-pr}if("currentStyle"in document.documentElement){getRawStyle=getRawStyle_IE}function getPixelValue(value,property,context){var element=null;if(Object.isElement(value)){element=value;value=getRawStyle(element,property)}if(value===null||Object.isUndefined(value)){return null}if(/^(?:-)?\d+(\.\d+)?(px)?$/i.test(value)){return window.parseFloat(value)}var isPercentage=value.include("%"),isViewport=context===document.viewport;if(/\d/.test(value)&&element&&element.runtimeStyle&&!(isPercentage&&isViewport)){var style=element.style.left,rStyle=element.runtimeStyle.left;element.runtimeStyle.left=element.currentStyle.left;element.style.left=value||0;value=element.style.pixelLeft;element.style.left=style;element.runtimeStyle.left=rStyle;return value}if(element&&isPercentage){context=context||element.parentNode;var decimal=toDecimal(value),whole=null;var isHorizontal=property.include("left")||property.include("right")||property.include("width");var isVertical=property.include("top")||property.include("bottom")||property.include("height");if(context===document.viewport){if(isHorizontal){whole=document.viewport.getWidth()}else if(isVertical){whole=document.viewport.getHeight()}}else{if(isHorizontal){whole=$(context).measure("width")}else if(isVertical){whole=$(context).measure("height")}}return whole===null?0:whole*decimal}return 0}function toCSSPixels(number){if(Object.isString(number)&&number.endsWith("px"))return number;return number+"px"}function isDisplayed(element){while(element&&element.parentNode){var display=element.getStyle("display");if(display==="none"){return false}element=$(element.parentNode)}return true}var hasLayout=Prototype.K;if("currentStyle"in document.documentElement){hasLayout=function(element){if(!element.currentStyle.hasLayout){element.style.zoom=1}return element}}function cssNameFor(key){if(key.include("border"))key=key+"-width";return key.camelize()}Element.Layout=Class.create(Hash,{initialize:function($super,element,preCompute){$super();this.element=$(element);Element.Layout.PROPERTIES.each(function(property){this._set(property,null)},this);if(preCompute){this._preComputing=true;this._begin();Element.Layout.PROPERTIES.each(this._compute,this);this._end();this._preComputing=false}},_set:function(property,value){return Hash.prototype.set.call(this,property,value)},set:function(property,value){throw"Properties of Element.Layout are read-only."},get:function($super,property){var value=$super(property);return value===null?this._compute(property):value},_begin:function(){if(this._isPrepared())return;var element=this.element;if(isDisplayed(element)){this._setPrepared(true);return}var originalStyles={position:element.style.position||"",width:element.style.width||"",visibility:element.style.visibility||"",display:element.style.display||""};element.store("prototype_original_styles",originalStyles);var position=getRawStyle(element,"position"),width=element.offsetWidth;if(width===0||width===null){element.style.display="block";width=element.offsetWidth}var context=position==="fixed"?document.viewport:element.parentNode;var tempStyles={visibility:"hidden",display:"block"};if(position!=="fixed")tempStyles.position="absolute";element.setStyle(tempStyles);var positionedWidth=element.offsetWidth,newWidth;if(width&&positionedWidth===width){newWidth=getContentWidth(element,context)}else if(position==="absolute"||position==="fixed"){newWidth=getContentWidth(element,context)}else{var parent=element.parentNode,pLayout=$(parent).getLayout();newWidth=pLayout.get("width")-this.get("margin-left")-this.get("border-left")-this.get("padding-left")-this.get("padding-right")-this.get("border-right")-this.get("margin-right")}element.setStyle({width:newWidth+"px"});this._setPrepared(true)},_end:function(){var element=this.element;var originalStyles=element.retrieve("prototype_original_styles");element.store("prototype_original_styles",null);element.setStyle(originalStyles);this._setPrepared(false)},_compute:function(property){var COMPUTATIONS=Element.Layout.COMPUTATIONS;if(!(property in COMPUTATIONS)){throw"Property not found."}return this._set(property,COMPUTATIONS[property].call(this,this.element))},_isPrepared:function(){return this.element.retrieve("prototype_element_layout_prepared",false)},_setPrepared:function(bool){return this.element.store("prototype_element_layout_prepared",bool)},toObject:function(){var args=$A(arguments);var keys=args.length===0?Element.Layout.PROPERTIES:args.join(" ").split(" ");var obj={};keys.each(function(key){if(!Element.Layout.PROPERTIES.include(key))return;var value=this.get(key);if(value!=null)obj[key]=value},this);return obj},toHash:function(){var obj=this.toObject.apply(this,arguments);return new Hash(obj)},toCSS:function(){var args=$A(arguments);var keys=args.length===0?Element.Layout.PROPERTIES:args.join(" ").split(" ");var css={};keys.each(function(key){if(!Element.Layout.PROPERTIES.include(key))return;if(Element.Layout.COMPOSITE_PROPERTIES.include(key))return;var value=this.get(key);if(value!=null)css[cssNameFor(key)]=value+"px"},this);return css},inspect:function(){return"#"}});Object.extend(Element.Layout,{PROPERTIES:$w("height width top left right bottom border-left border-right border-top border-bottom padding-left padding-right padding-top padding-bottom margin-top margin-bottom margin-left margin-right padding-box-width padding-box-height border-box-width border-box-height margin-box-width margin-box-height"),COMPOSITE_PROPERTIES:$w("padding-box-width padding-box-height margin-box-width margin-box-height border-box-width border-box-height"),COMPUTATIONS:{height:function(element){if(!this._preComputing)this._begin();var bHeight=this.get("border-box-height");if(bHeight<=0){if(!this._preComputing)this._end();return 0}var bTop=this.get("border-top"),bBottom=this.get("border-bottom");var pTop=this.get("padding-top"),pBottom=this.get("padding-bottom");if(!this._preComputing)this._end();return bHeight-bTop-bBottom-pTop-pBottom},width:function(element){if(!this._preComputing)this._begin();var bWidth=this.get("border-box-width");if(bWidth<=0){if(!this._preComputing)this._end();return 0}var bLeft=this.get("border-left"),bRight=this.get("border-right");var pLeft=this.get("padding-left"),pRight=this.get("padding-right");if(!this._preComputing)this._end();return bWidth-bLeft-bRight-pLeft-pRight},"padding-box-height":function(element){var height=this.get("height"),pTop=this.get("padding-top"),pBottom=this.get("padding-bottom");return height+pTop+pBottom},"padding-box-width":function(element){var width=this.get("width"),pLeft=this.get("padding-left"),pRight=this.get("padding-right");return width+pLeft+pRight},"border-box-height":function(element){if(!this._preComputing)this._begin();var height=element.offsetHeight;if(!this._preComputing)this._end();return height},"border-box-width":function(element){if(!this._preComputing)this._begin();var width=element.offsetWidth;if(!this._preComputing)this._end();return width},"margin-box-height":function(element){var bHeight=this.get("border-box-height"),mTop=this.get("margin-top"),mBottom=this.get("margin-bottom");if(bHeight<=0)return 0;return bHeight+mTop+mBottom},"margin-box-width":function(element){var bWidth=this.get("border-box-width"),mLeft=this.get("margin-left"),mRight=this.get("margin-right");if(bWidth<=0)return 0;return bWidth+mLeft+mRight},top:function(element){var offset=element.positionedOffset();return offset.top},bottom:function(element){var offset=element.positionedOffset(),parent=element.getOffsetParent(),pHeight=parent.measure("height");var mHeight=this.get("border-box-height");return pHeight-mHeight-offset.top},left:function(element){var offset=element.positionedOffset();return offset.left},right:function(element){var offset=element.positionedOffset(),parent=element.getOffsetParent(),pWidth=parent.measure("width");var mWidth=this.get("border-box-width");return pWidth-mWidth-offset.left},"padding-top":function(element){return getPixelValue(element,"paddingTop")},"padding-bottom":function(element){return getPixelValue(element,"paddingBottom")},"padding-left":function(element){return getPixelValue(element,"paddingLeft")},"padding-right":function(element){return getPixelValue(element,"paddingRight")},"border-top":function(element){return getPixelValue(element,"borderTopWidth")},"border-bottom":function(element){return getPixelValue(element,"borderBottomWidth")},"border-left":function(element){return getPixelValue(element,"borderLeftWidth")},"border-right":function(element){return getPixelValue(element,"borderRightWidth")},"margin-top":function(element){return getPixelValue(element,"marginTop")},"margin-bottom":function(element){return getPixelValue(element,"marginBottom")},"margin-left":function(element){return getPixelValue(element,"marginLeft")},"margin-right":function(element){return getPixelValue(element,"marginRight")}}});if("getBoundingClientRect"in document.documentElement){Object.extend(Element.Layout.COMPUTATIONS,{right:function(element){var parent=hasLayout(element.getOffsetParent());var rect=element.getBoundingClientRect(),pRect=parent.getBoundingClientRect();return(pRect.right-rect.right).round()},bottom:function(element){var parent=hasLayout(element.getOffsetParent());var rect=element.getBoundingClientRect(),pRect=parent.getBoundingClientRect();return(pRect.bottom-rect.bottom).round()}})}Element.Offset=Class.create({initialize:function(left,top){this.left=left.round();this.top=top.round();this[0]=this.left;this[1]=this.top},relativeTo:function(offset){return new Element.Offset(this.left-offset.left,this.top-offset.top)},inspect:function(){return"#".interpolate(this)},toString:function(){return"[#{left}, #{top}]".interpolate(this)},toArray:function(){return[this.left,this.top]}});function getLayout(element,preCompute){return new Element.Layout(element,preCompute)}function measure(element,property){return $(element).getLayout().get(property)}function getHeight(element){return Element.getDimensions(element).height}function getWidth(element){return Element.getDimensions(element).width}function getDimensions(element){element=$(element);var display=Element.getStyle(element,"display");if(display&&display!=="none"){return{width:element.offsetWidth,height:element.offsetHeight}}var style=element.style;var originalStyles={visibility:style.visibility,position:style.position,display:style.display};var newStyles={visibility:"hidden",display:"block"};if(originalStyles.position!=="fixed")newStyles.position="absolute";Element.setStyle(element,newStyles);var dimensions={width:element.offsetWidth,height:element.offsetHeight};Element.setStyle(element,originalStyles);return dimensions}function getOffsetParent(element){element=$(element);if(isDocument(element)||isDetached(element)||isBody(element)||isHtml(element))return $(document.body);var isInline=Element.getStyle(element,"display")==="inline";if(!isInline&&element.offsetParent)return $(element.offsetParent);while((element=element.parentNode)&&element!==document.body){if(Element.getStyle(element,"position")!=="static"){return isHtml(element)?$(document.body):$(element)}}return $(document.body)}function cumulativeOffset(element){element=$(element);var valueT=0,valueL=0;if(element.parentNode){do{valueT+=element.offsetTop||0;valueL+=element.offsetLeft||0;element=element.offsetParent}while(element)}return new Element.Offset(valueL,valueT)}function positionedOffset(element){element=$(element);var layout=element.getLayout();var valueT=0,valueL=0;do{valueT+=element.offsetTop||0;valueL+=element.offsetLeft||0;element=element.offsetParent;if(element){if(isBody(element))break;var p=Element.getStyle(element,"position");if(p!=="static")break}}while(element);valueL-=layout.get("margin-top");valueT-=layout.get("margin-left");return new Element.Offset(valueL,valueT)}function cumulativeScrollOffset(element){var valueT=0,valueL=0;do{if(element===document.body){var bodyScrollNode=document.documentElement||document.body.parentNode||document.body;valueT+=!Object.isUndefined(window.pageYOffset)?window.pageYOffset:bodyScrollNode.scrollTop||0;valueL+=!Object.isUndefined(window.pageXOffset)?window.pageXOffset:bodyScrollNode.scrollLeft||0;break}else{valueT+=element.scrollTop||0;valueL+=element.scrollLeft||0;element=element.parentNode}}while(element);return new Element.Offset(valueL,valueT)}function viewportOffset(forElement){var valueT=0,valueL=0,docBody=document.body;forElement=$(forElement);var element=forElement;do{valueT+=element.offsetTop||0;valueL+=element.offsetLeft||0;if(element.offsetParent==docBody&&Element.getStyle(element,"position")=="absolute")break}while(element=element.offsetParent);element=forElement;do{if(element!=docBody){valueT-=element.scrollTop||0;valueL-=element.scrollLeft||0}}while(element=element.parentNode);return new Element.Offset(valueL,valueT)}function absolutize(element){element=$(element);if(Element.getStyle(element,"position")==="absolute"){return element}var offsetParent=getOffsetParent(element);var eOffset=element.viewportOffset(),pOffset=offsetParent.viewportOffset();var offset=eOffset.relativeTo(pOffset);var layout=element.getLayout();element.store("prototype_absolutize_original_styles",{position:element.getStyle("position"),left:element.getStyle("left"),top:element.getStyle("top"),width:element.getStyle("width"),height:element.getStyle("height")});element.setStyle({position:"absolute",top:offset.top+"px",left:offset.left+"px",width:layout.get("width")+"px",height:layout.get("height")+"px"});return element}function relativize(element){element=$(element);if(Element.getStyle(element,"position")==="relative"){return element}var originalStyles=element.retrieve("prototype_absolutize_original_styles");if(originalStyles)element.setStyle(originalStyles);return element}function scrollTo(element){element=$(element);var pos=Element.cumulativeOffset(element);window.scrollTo(pos.left,pos.top);return element}function makePositioned(element){element=$(element);var position=Element.getStyle(element,"position"),styles={};if(position==="static"||!position){styles.position="relative";if(Prototype.Browser.Opera){styles.top=0;styles.left=0}Element.setStyle(element,styles);Element.store(element,"prototype_made_positioned",true)}return element}function undoPositioned(element){element=$(element);var storage=Element.getStorage(element),madePositioned=storage.get("prototype_made_positioned");if(madePositioned){storage.unset("prototype_made_positioned");Element.setStyle(element,{position:"",top:"",bottom:"",left:"",right:""})}return element}function makeClipping(element){element=$(element);var storage=Element.getStorage(element),madeClipping=storage.get("prototype_made_clipping");if(Object.isUndefined(madeClipping)){var overflow=Element.getStyle(element,"overflow");storage.set("prototype_made_clipping",overflow);if(overflow!=="hidden")element.style.overflow="hidden"}return element}function undoClipping(element){element=$(element);var storage=Element.getStorage(element),overflow=storage.get("prototype_made_clipping");if(!Object.isUndefined(overflow)){storage.unset("prototype_made_clipping");element.style.overflow=overflow||""}return element}function clonePosition(element,source,options){options=Object.extend({setLeft:true,setTop:true,setWidth:true,setHeight:true,offsetTop:0,offsetLeft:0},options||{});source=$(source);element=$(element);var p,delta,layout,styles={};if(options.setLeft||options.setTop){p=Element.viewportOffset(source);delta=[0,0];if(Element.getStyle(element,"position")==="absolute"){var parent=Element.getOffsetParent(element);if(parent!==document.body)delta=Element.viewportOffset(parent)}}if(options.setWidth||options.setHeight){layout=Element.getLayout(source)}if(options.setLeft)styles.left=p[0]-delta[0]+options.offsetLeft+"px";if(options.setTop)styles.top=p[1]-delta[1]+options.offsetTop+"px";if(options.setWidth)styles.width=layout.get("border-box-width")+"px";if(options.setHeight)styles.height=layout.get("border-box-height")+"px";return Element.setStyle(element,styles)}if(Prototype.Browser.IE){getOffsetParent=getOffsetParent.wrap(function(proceed,element){element=$(element);if(isDocument(element)||isDetached(element)||isBody(element)||isHtml(element))return $(document.body);var position=element.getStyle("position");if(position!=="static")return proceed(element);element.setStyle({position:"relative"});var value=proceed(element);element.setStyle({position:position});return value});positionedOffset=positionedOffset.wrap(function(proceed,element){element=$(element);if(!element.parentNode)return new Element.Offset(0,0);var position=element.getStyle("position"); +Math.crossProduct = function(x, y){ + [ + x[1]*y[2]-x[2]*y[1], + x[2]*y[0]-x[0]*y[2], + x[0]*y[1]-x[1]*y[0] + ] +} -if(position!=="static")return proceed(element);var offsetParent=element.getOffsetParent();if(offsetParent&&offsetParent.getStyle("position")==="fixed")hasLayout(offsetParent);element.setStyle({position:"relative"});var value=proceed(element);element.setStyle({position:position});return value})}else if(Prototype.Browser.Webkit){cumulativeOffset=function(element){element=$(element);var valueT=0,valueL=0;do{valueT+=element.offsetTop||0;valueL+=element.offsetLeft||0;if(element.offsetParent==document.body){if(Element.getStyle(element,"position")=="absolute")break}element=element.offsetParent}while(element);return new Element.Offset(valueL,valueT)}}Element.addMethods({getLayout:getLayout,measure:measure,getWidth:getWidth,getHeight:getHeight,getDimensions:getDimensions,getOffsetParent:getOffsetParent,cumulativeOffset:cumulativeOffset,positionedOffset:positionedOffset,cumulativeScrollOffset:cumulativeScrollOffset,viewportOffset:viewportOffset,absolutize:absolutize,relativize:relativize,scrollTo:scrollTo,makePositioned:makePositioned,undoPositioned:undoPositioned,makeClipping:makeClipping,undoClipping:undoClipping,clonePosition:clonePosition});function isBody(element){return element.nodeName.toUpperCase()==="BODY"}function isHtml(element){return element.nodeName.toUpperCase()==="HTML"}function isDocument(element){return element.nodeType===Node.DOCUMENT_NODE}function isDetached(element){return element!==document.body&&!Element.descendantOf(element,document.body)}if("getBoundingClientRect"in document.documentElement){Element.addMethods({viewportOffset:function(element){element=$(element);if(isDetached(element))return new Element.Offset(0,0);var rect=element.getBoundingClientRect(),docEl=document.documentElement;return new Element.Offset(rect.left-docEl.clientLeft,rect.top-docEl.clientTop)}})}})();(function(){var IS_OLD_OPERA=Prototype.Browser.Opera&&window.parseFloat(window.opera.version())<9.5;var ROOT=null;function getRootElement(){if(ROOT)return ROOT;ROOT=IS_OLD_OPERA?document.body:document.documentElement;return ROOT}function getDimensions(){return{width:this.getWidth(),height:this.getHeight()}}function getWidth(){return getRootElement().clientWidth}function getHeight(){return getRootElement().clientHeight}function getScrollOffsets(){var x=window.pageXOffset||document.documentElement.scrollLeft||document.body.scrollLeft;var y=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop;return new Element.Offset(x,y)}document.viewport={getDimensions:getDimensions,getWidth:getWidth,getHeight:getHeight,getScrollOffsets:getScrollOffsets}})();window.$$=function(){var expression=$A(arguments).join(", ");return Prototype.Selector.select(expression,document)};Prototype.Selector=function(){function select(){throw new Error('Method "Prototype.Selector.select" must be defined.')}function match(){throw new Error('Method "Prototype.Selector.match" must be defined.')}function find(elements,expression,index){index=index||0;var match=Prototype.Selector.match,length=elements.length,matchIndex=0,i;for(i=0;i+~]|"+whitespace+")"+whitespace+"*"),rattributeQuotes=new RegExp("="+whitespace+"*([^\\]'\"]*?)"+whitespace+"*\\]","g"),rpseudo=new RegExp(pseudos),ridentifier=new RegExp("^"+identifier+"$"),matchExpr={ID:new RegExp("^#("+characterEncoding+")"),CLASS:new RegExp("^\\.("+characterEncoding+")"),TAG:new RegExp("^("+characterEncoding.replace("w","w*")+")"),ATTR:new RegExp("^"+attributes),PSEUDO:new RegExp("^"+pseudos),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+whitespace+"*(even|odd|(([+-]|)(\\d*)n|)"+whitespace+"*(?:([+-]|)"+whitespace+"*(\\d+)|))"+whitespace+"*\\)|)","i"),bool:new RegExp("^(?:"+booleans+")$","i"),needsContext:new RegExp("^"+whitespace+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+whitespace+"*((?:-\\d)?\\d*)"+whitespace+"*\\)|)(?=[^-]|$)","i")},rinputs=/^(?:input|select|textarea|button)$/i,rheader=/^h\d$/i,rnative=/^[^{]+\{\s*\[native \w/,rquickExpr=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,rsibling=/[+~]/,rescape=/'|\\/g,runescape=new RegExp("\\\\([\\da-f]{1,6}"+whitespace+"?|("+whitespace+")|.)","ig"),funescape=function(_,escaped,escapedWhitespace){var high="0x"+escaped-65536;return high!==high||escapedWhitespace?escaped:high<0?String.fromCharCode(high+65536):String.fromCharCode(high>>10|55296,high&1023|56320)};try{push.apply(arr=slice.call(preferredDoc.childNodes),preferredDoc.childNodes);arr[preferredDoc.childNodes.length].nodeType}catch(e){push={apply:arr.length?function(target,els){push_native.apply(target,slice.call(els))}:function(target,els){var j=target.length,i=0;while(target[j++]=els[i++]){}target.length=j-1}}}function Sizzle(selector,context,results,seed){var match,elem,m,nodeType,i,groups,old,nid,newContext,newSelector;if((context?context.ownerDocument||context:preferredDoc)!==document){setDocument(context)}context=context||document;results=results||[];if(!selector||typeof selector!=="string"){return results}if((nodeType=context.nodeType)!==1&&nodeType!==9){return[]}if(documentIsHTML&&!seed){if(match=rquickExpr.exec(selector)){if(m=match[1]){if(nodeType===9){elem=context.getElementById(m);if(elem&&elem.parentNode){if(elem.id===m){results.push(elem);return results}}else{return results}}else{if(context.ownerDocument&&(elem=context.ownerDocument.getElementById(m))&&contains(context,elem)&&elem.id===m){results.push(elem);return results}}}else if(match[2]){push.apply(results,context.getElementsByTagName(selector));return results}else if((m=match[3])&&support.getElementsByClassName&&context.getElementsByClassName){push.apply(results,context.getElementsByClassName(m));return results}}if(support.qsa&&(!rbuggyQSA||!rbuggyQSA.test(selector))){nid=old=expando;newContext=context;newSelector=nodeType===9&&selector;if(nodeType===1&&context.nodeName.toLowerCase()!=="object"){groups=tokenize(selector);if(old=context.getAttribute("id")){nid=old.replace(rescape,"\\$&")}else{context.setAttribute("id",nid)}nid="[id='"+nid+"'] ";i=groups.length;while(i--){groups[i]=nid+toSelector(groups[i])}newContext=rsibling.test(selector)&&testContext(context.parentNode)||context;newSelector=groups.join(",")}if(newSelector){try{push.apply(results,newContext.querySelectorAll(newSelector));return results}catch(qsaError){}finally{if(!old){context.removeAttribute("id")}}}}}return select(selector.replace(rtrim,"$1"),context,results,seed)}function createCache(){var keys=[];function cache(key,value){if(keys.push(key+" ")>Expr.cacheLength){delete cache[keys.shift()]}return cache[key+" "]=value}return cache}function markFunction(fn){fn[expando]=true;return fn}function assert(fn){var div=document.createElement("div");try{return!!fn(div)}catch(e){return false}finally{if(div.parentNode){div.parentNode.removeChild(div)}div=null}}function addHandle(attrs,handler){var arr=attrs.split("|"),i=attrs.length;while(i--){Expr.attrHandle[arr[i]]=handler}}function siblingCheck(a,b){var cur=b&&a,diff=cur&&a.nodeType===1&&b.nodeType===1&&(~b.sourceIndex||MAX_NEGATIVE)-(~a.sourceIndex||MAX_NEGATIVE);if(diff){return diff}if(cur){while(cur=cur.nextSibling){if(cur===b){return-1}}}return a?1:-1}function createInputPseudo(type){return function(elem){var name=elem.nodeName.toLowerCase();return name==="input"&&elem.type===type}}function createButtonPseudo(type){return function(elem){var name=elem.nodeName.toLowerCase();return(name==="input"||name==="button")&&elem.type===type}}function createPositionalPseudo(fn){return markFunction(function(argument){argument=+argument;return markFunction(function(seed,matches){var j,matchIndexes=fn([],seed.length,argument),i=matchIndexes.length;while(i--){if(seed[j=matchIndexes[i]]){seed[j]=!(matches[j]=seed[j])}}})})}function testContext(context){return context&&typeof context.getElementsByTagName!==strundefined&&context}support=Sizzle.support={};isXML=Sizzle.isXML=function(elem){var documentElement=elem&&(elem.ownerDocument||elem).documentElement;return documentElement?documentElement.nodeName!=="HTML":false};setDocument=Sizzle.setDocument=function(node){var hasCompare,doc=node?node.ownerDocument||node:preferredDoc,parent=doc.defaultView;if(doc===document||doc.nodeType!==9||!doc.documentElement){return document}document=doc;docElem=doc.documentElement;documentIsHTML=!isXML(doc);if(parent&&parent!==parent.top){if(parent.addEventListener){parent.addEventListener("unload",function(){setDocument()},false)}else if(parent.attachEvent){parent.attachEvent("onunload",function(){setDocument()})}}support.attributes=assert(function(div){div.className="i";return!div.getAttribute("className")});support.getElementsByTagName=assert(function(div){div.appendChild(doc.createComment(""));return!div.getElementsByTagName("*").length});support.getElementsByClassName=rnative.test(doc.getElementsByClassName)&&assert(function(div){div.innerHTML="
    ";div.firstChild.className="i";return div.getElementsByClassName("i").length===2});support.getById=assert(function(div){docElem.appendChild(div).id=expando;return!doc.getElementsByName||!doc.getElementsByName(expando).length});if(support.getById){Expr.find["ID"]=function(id,context){if(typeof context.getElementById!==strundefined&&documentIsHTML){var m=context.getElementById(id);return m&&m.parentNode?[m]:[]}};Expr.filter["ID"]=function(id){var attrId=id.replace(runescape,funescape);return function(elem){return elem.getAttribute("id")===attrId}}}else{delete Expr.find["ID"];Expr.filter["ID"]=function(id){var attrId=id.replace(runescape,funescape);return function(elem){var node=typeof elem.getAttributeNode!==strundefined&&elem.getAttributeNode("id");return node&&node.value===attrId}}}Expr.find["TAG"]=support.getElementsByTagName?function(tag,context){if(typeof context.getElementsByTagName!==strundefined){return context.getElementsByTagName(tag)}}:function(tag,context){var elem,tmp=[],i=0,results=context.getElementsByTagName(tag);if(tag==="*"){while(elem=results[i++]){if(elem.nodeType===1){tmp.push(elem)}}return tmp}return results};Expr.find["CLASS"]=support.getElementsByClassName&&function(className,context){if(typeof context.getElementsByClassName!==strundefined&&documentIsHTML){return context.getElementsByClassName(className)}};rbuggyMatches=[];rbuggyQSA=[];if(support.qsa=rnative.test(doc.querySelectorAll)){assert(function(div){div.innerHTML="";if(div.querySelectorAll("[t^='']").length){rbuggyQSA.push("[*^$]="+whitespace+"*(?:''|\"\")")}if(!div.querySelectorAll("[selected]").length){rbuggyQSA.push("\\["+whitespace+"*(?:value|"+booleans+")")}if(!div.querySelectorAll(":checked").length){rbuggyQSA.push(":checked")}});assert(function(div){var input=doc.createElement("input");input.setAttribute("type","hidden");div.appendChild(input).setAttribute("name","D");if(div.querySelectorAll("[name=d]").length){rbuggyQSA.push("name"+whitespace+"*[*^$|!~]?=")}if(!div.querySelectorAll(":enabled").length){rbuggyQSA.push(":enabled",":disabled")}div.querySelectorAll("*,:x");rbuggyQSA.push(",.*:")})}if(support.matchesSelector=rnative.test(matches=docElem.webkitMatchesSelector||docElem.mozMatchesSelector||docElem.oMatchesSelector||docElem.msMatchesSelector)){assert(function(div){support.disconnectedMatch=matches.call(div,"div");matches.call(div,"[s!='']:x");rbuggyMatches.push("!=",pseudos)})}rbuggyQSA=rbuggyQSA.length&&new RegExp(rbuggyQSA.join("|"));rbuggyMatches=rbuggyMatches.length&&new RegExp(rbuggyMatches.join("|"));hasCompare=rnative.test(docElem.compareDocumentPosition);contains=hasCompare||rnative.test(docElem.contains)?function(a,b){var adown=a.nodeType===9?a.documentElement:a,bup=b&&b.parentNode;return a===bup||!!(bup&&bup.nodeType===1&&(adown.contains?adown.contains(bup):a.compareDocumentPosition&&a.compareDocumentPosition(bup)&16))}:function(a,b){if(b){while(b=b.parentNode){if(b===a){return true}}}return false};sortOrder=hasCompare?function(a,b){if(a===b){hasDuplicate=true;return 0}var compare=!a.compareDocumentPosition-!b.compareDocumentPosition;if(compare){return compare}compare=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1;if(compare&1||!support.sortDetached&&b.compareDocumentPosition(a)===compare){if(a===doc||a.ownerDocument===preferredDoc&&contains(preferredDoc,a)){return-1}if(b===doc||b.ownerDocument===preferredDoc&&contains(preferredDoc,b)){return 1}return sortInput?indexOf.call(sortInput,a)-indexOf.call(sortInput,b):0}return compare&4?-1:1}:function(a,b){if(a===b){hasDuplicate=true;return 0}var cur,i=0,aup=a.parentNode,bup=b.parentNode,ap=[a],bp=[b];if(!aup||!bup){return a===doc?-1:b===doc?1:aup?-1:bup?1:sortInput?indexOf.call(sortInput,a)-indexOf.call(sortInput,b):0}else if(aup===bup){return siblingCheck(a,b)}cur=a;while(cur=cur.parentNode){ap.unshift(cur)}cur=b;while(cur=cur.parentNode){bp.unshift(cur)}while(ap[i]===bp[i]){i++}return i?siblingCheck(ap[i],bp[i]):ap[i]===preferredDoc?-1:bp[i]===preferredDoc?1:0};return doc};Sizzle.matches=function(expr,elements){return Sizzle(expr,null,null,elements)};Sizzle.matchesSelector=function(elem,expr){if((elem.ownerDocument||elem)!==document){setDocument(elem)}expr=expr.replace(rattributeQuotes,"='$1']");if(support.matchesSelector&&documentIsHTML&&(!rbuggyMatches||!rbuggyMatches.test(expr))&&(!rbuggyQSA||!rbuggyQSA.test(expr))){try{var ret=matches.call(elem,expr);if(ret||support.disconnectedMatch||elem.document&&elem.document.nodeType!==11){return ret}}catch(e){}}return Sizzle(expr,document,null,[elem]).length>0};Sizzle.contains=function(context,elem){if((context.ownerDocument||context)!==document){setDocument(context)}return contains(context,elem)};Sizzle.attr=function(elem,name){if((elem.ownerDocument||elem)!==document){setDocument(elem)}var fn=Expr.attrHandle[name.toLowerCase()],val=fn&&hasOwn.call(Expr.attrHandle,name.toLowerCase())?fn(elem,name,!documentIsHTML):undefined;return val!==undefined?val:support.attributes||!documentIsHTML?elem.getAttribute(name):(val=elem.getAttributeNode(name))&&val.specified?val.value:null};Sizzle.error=function(msg){throw new Error("Syntax error, unrecognized expression: "+msg)};Sizzle.uniqueSort=function(results){var elem,duplicates=[],j=0,i=0;hasDuplicate=!support.detectDuplicates;sortInput=!support.sortStable&&results.slice(0);results.sort(sortOrder);if(hasDuplicate){while(elem=results[i++]){if(elem===results[i]){j=duplicates.push(i)}}while(j--){results.splice(duplicates[j],1)}}sortInput=null;return results};getText=Sizzle.getText=function(elem){var node,ret="",i=0,nodeType=elem.nodeType;if(!nodeType){while(node=elem[i++]){ret+=getText(node)}}else if(nodeType===1||nodeType===9||nodeType===11){if(typeof elem.textContent==="string"){return elem.textContent}else{for(elem=elem.firstChild;elem;elem=elem.nextSibling){ret+=getText(elem)}}}else if(nodeType===3||nodeType===4){return elem.nodeValue}return ret};Expr=Sizzle.selectors={cacheLength:50,createPseudo:markFunction,match:matchExpr,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:true}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:true},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(match){match[1]=match[1].replace(runescape,funescape);match[3]=(match[4]||match[5]||"").replace(runescape,funescape);if(match[2]==="~="){match[3]=" "+match[3]+" "}return match.slice(0,4)},CHILD:function(match){match[1]=match[1].toLowerCase();if(match[1].slice(0,3)==="nth"){if(!match[3]){Sizzle.error(match[0])}match[4]=+(match[4]?match[5]+(match[6]||1):2*(match[3]==="even"||match[3]==="odd"));match[5]=+(match[7]+match[8]||match[3]==="odd")}else if(match[3]){Sizzle.error(match[0])}return match},PSEUDO:function(match){var excess,unquoted=!match[5]&&match[2];if(matchExpr["CHILD"].test(match[0])){return null}if(match[3]&&match[4]!==undefined){match[2]=match[4]}else if(unquoted&&rpseudo.test(unquoted)&&(excess=tokenize(unquoted,true))&&(excess=unquoted.indexOf(")",unquoted.length-excess)-unquoted.length)){match[0]=match[0].slice(0,excess);match[2]=unquoted.slice(0,excess)}return match.slice(0,3)}},filter:{TAG:function(nodeNameSelector){var nodeName=nodeNameSelector.replace(runescape,funescape).toLowerCase();return nodeNameSelector==="*"?function(){return true}:function(elem){return elem.nodeName&&elem.nodeName.toLowerCase()===nodeName}},CLASS:function(className){var pattern=classCache[className+" "];return pattern||(pattern=new RegExp("(^|"+whitespace+")"+className+"("+whitespace+"|$)"))&&classCache(className,function(elem){return pattern.test(typeof elem.className==="string"&&elem.className||typeof elem.getAttribute!==strundefined&&elem.getAttribute("class")||"")})},ATTR:function(name,operator,check){return function(elem){var result=Sizzle.attr(elem,name);if(result==null){return operator==="!="}if(!operator){return true}result+="";return operator==="="?result===check:operator==="!="?result!==check:operator==="^="?check&&result.indexOf(check)===0:operator==="*="?check&&result.indexOf(check)>-1:operator==="$="?check&&result.slice(-check.length)===check:operator==="~="?(" "+result+" ").indexOf(check)>-1:operator==="|="?result===check||result.slice(0,check.length+1)===check+"-":false}},CHILD:function(type,what,argument,first,last){var simple=type.slice(0,3)!=="nth",forward=type.slice(-4)!=="last",ofType=what==="of-type";return first===1&&last===0?function(elem){return!!elem.parentNode}:function(elem,context,xml){var cache,outerCache,node,diff,nodeIndex,start,dir=simple!==forward?"nextSibling":"previousSibling",parent=elem.parentNode,name=ofType&&elem.nodeName.toLowerCase(),useCache=!xml&&!ofType;if(parent){if(simple){while(dir){node=elem;while(node=node[dir]){if(ofType?node.nodeName.toLowerCase()===name:node.nodeType===1){return false}}start=dir=type==="only"&&!start&&"nextSibling"}return true}start=[forward?parent.firstChild:parent.lastChild];if(forward&&useCache){outerCache=parent[expando]||(parent[expando]={});cache=outerCache[type]||[];nodeIndex=cache[0]===dirruns&&cache[1];diff=cache[0]===dirruns&&cache[2];node=nodeIndex&&parent.childNodes[nodeIndex];while(node=++nodeIndex&&node&&node[dir]||(diff=nodeIndex=0)||start.pop()){if(node.nodeType===1&&++diff&&node===elem){outerCache[type]=[dirruns,nodeIndex,diff];break}}}else if(useCache&&(cache=(elem[expando]||(elem[expando]={}))[type])&&cache[0]===dirruns){diff=cache[1]}else{while(node=++nodeIndex&&node&&node[dir]||(diff=nodeIndex=0)||start.pop()){if((ofType?node.nodeName.toLowerCase()===name:node.nodeType===1)&&++diff){if(useCache){(node[expando]||(node[expando]={}))[type]=[dirruns,diff]}if(node===elem){break}}}}diff-=last;return diff===first||diff%first===0&&diff/first>=0}}},PSEUDO:function(pseudo,argument){var args,fn=Expr.pseudos[pseudo]||Expr.setFilters[pseudo.toLowerCase()]||Sizzle.error("unsupported pseudo: "+pseudo);if(fn[expando]){return fn(argument)}if(fn.length>1){args=[pseudo,pseudo,"",argument];return Expr.setFilters.hasOwnProperty(pseudo.toLowerCase())?markFunction(function(seed,matches){var idx,matched=fn(seed,argument),i=matched.length;while(i--){idx=indexOf.call(seed,matched[i]);seed[idx]=!(matches[idx]=matched[i])}}):function(elem){return fn(elem,0,args)}}return fn}},pseudos:{not:markFunction(function(selector){var input=[],results=[],matcher=compile(selector.replace(rtrim,"$1"));return matcher[expando]?markFunction(function(seed,matches,context,xml){var elem,unmatched=matcher(seed,null,xml,[]),i=seed.length;while(i--){if(elem=unmatched[i]){seed[i]=!(matches[i]=elem)}}}):function(elem,context,xml){input[0]=elem;matcher(input,null,xml,results);return!results.pop()}}),has:markFunction(function(selector){return function(elem){return Sizzle(selector,elem).length>0}}),contains:markFunction(function(text){return function(elem){return(elem.textContent||elem.innerText||getText(elem)).indexOf(text)>-1}}),lang:markFunction(function(lang){if(!ridentifier.test(lang||"")){Sizzle.error("unsupported lang: "+lang)}lang=lang.replace(runescape,funescape).toLowerCase();return function(elem){var elemLang;do{if(elemLang=documentIsHTML?elem.lang:elem.getAttribute("xml:lang")||elem.getAttribute("lang")){elemLang=elemLang.toLowerCase();return elemLang===lang||elemLang.indexOf(lang+"-")===0}}while((elem=elem.parentNode)&&elem.nodeType===1);return false}}),target:function(elem){var hash=window.location&&window.location.hash;return hash&&hash.slice(1)===elem.id},root:function(elem){return elem===docElem},focus:function(elem){return elem===document.activeElement&&(!document.hasFocus||document.hasFocus())&&!!(elem.type||elem.href||~elem.tabIndex)},enabled:function(elem){return elem.disabled===false},disabled:function(elem){return elem.disabled===true},checked:function(elem){var nodeName=elem.nodeName.toLowerCase();return nodeName==="input"&&!!elem.checked||nodeName==="option"&&!!elem.selected},selected:function(elem){if(elem.parentNode){elem.parentNode.selectedIndex}return elem.selected===true},empty:function(elem){for(elem=elem.firstChild;elem;elem=elem.nextSibling){if(elem.nodeType<6){return false}}return true},parent:function(elem){return!Expr.pseudos["empty"](elem)},header:function(elem){return rheader.test(elem.nodeName)},input:function(elem){return rinputs.test(elem.nodeName)},button:function(elem){var name=elem.nodeName.toLowerCase();return name==="input"&&elem.type==="button"||name==="button"},text:function(elem){var attr;return elem.nodeName.toLowerCase()==="input"&&elem.type==="text"&&((attr=elem.getAttribute("type"))==null||attr.toLowerCase()==="text")},first:createPositionalPseudo(function(){return[0]}),last:createPositionalPseudo(function(matchIndexes,length){return[length-1]}),eq:createPositionalPseudo(function(matchIndexes,length,argument){return[argument<0?argument+length:argument]}),even:createPositionalPseudo(function(matchIndexes,length){var i=0;for(;i=0;){matchIndexes.push(i)}return matchIndexes}),gt:createPositionalPseudo(function(matchIndexes,length,argument){var i=argument<0?argument+length:argument;for(;++i1?function(elem,context,xml){var i=matchers.length;while(i--){if(!matchers[i](elem,context,xml)){return false}}return true}:matchers[0]}function multipleContexts(selector,contexts,results){var i=0,len=contexts.length;for(;i-1){seed[temp]=!(results[temp]=elem)}}}}else{matcherOut=condense(matcherOut===results?matcherOut.splice(preexisting,matcherOut.length):matcherOut);if(postFinder){postFinder(null,results,matcherOut,xml)}else{push.apply(results,matcherOut)}}})}function matcherFromTokens(tokens){var checkContext,matcher,j,len=tokens.length,leadingRelative=Expr.relative[tokens[0].type],implicitRelative=leadingRelative||Expr.relative[" "],i=leadingRelative?1:0,matchContext=addCombinator(function(elem){return elem===checkContext},implicitRelative,true),matchAnyContext=addCombinator(function(elem){return indexOf.call(checkContext,elem)>-1},implicitRelative,true),matchers=[function(elem,context,xml){return!leadingRelative&&(xml||context!==outermostContext)||((checkContext=context).nodeType?matchContext(elem,context,xml):matchAnyContext(elem,context,xml))}];for(;i1&&elementMatcher(matchers),i>1&&toSelector(tokens.slice(0,i-1).concat({value:tokens[i-2].type===" "?"*":""})).replace(rtrim,"$1"),matcher,i0,byElement=elementMatchers.length>0,superMatcher=function(seed,context,xml,results,outermost){var elem,j,matcher,matchedCount=0,i="0",unmatched=seed&&[],setMatched=[],contextBackup=outermostContext,elems=seed||byElement&&Expr.find["TAG"]("*",outermost),dirrunsUnique=dirruns+=contextBackup==null?1:Math.random()||.1,len=elems.length;if(outermost){outermostContext=context!==document&&context}for(;i!==len&&(elem=elems[i])!=null;i++){if(byElement&&elem){j=0;while(matcher=elementMatchers[j++]){if(matcher(elem,context,xml)){results.push(elem);break}}if(outermost){dirruns=dirrunsUnique}}if(bySet){if(elem=!matcher&&elem){matchedCount--}if(seed){unmatched.push(elem)}}}matchedCount+=i;if(bySet&&i!==matchedCount){j=0;while(matcher=setMatchers[j++]){matcher(unmatched,setMatched,context,xml)}if(seed){if(matchedCount>0){while(i--){if(!(unmatched[i]||setMatched[i])){setMatched[i]=pop.call(results)}}}setMatched=condense(setMatched)}push.apply(results,setMatched);if(outermost&&!seed&&setMatched.length>0&&matchedCount+setMatchers.length>1){Sizzle.uniqueSort(results)}}if(outermost){dirruns=dirrunsUnique;outermostContext=contextBackup}return unmatched};return bySet?markFunction(superMatcher):superMatcher}compile=Sizzle.compile=function(selector,match){var i,setMatchers=[],elementMatchers=[],cached=compilerCache[selector+" "];if(!cached){if(!match){match=tokenize(selector)}i=match.length;while(i--){cached=matcherFromTokens(match[i]);if(cached[expando]){setMatchers.push(cached)}else{elementMatchers.push(cached)}}cached=compilerCache(selector,matcherFromGroupMatchers(elementMatchers,setMatchers));cached.selector=selector}return cached};select=Sizzle.select=function(selector,context,results,seed){var i,tokens,token,type,find,compiled=typeof selector==="function"&&selector,match=!seed&&tokenize(selector=compiled.selector||selector);results=results||[];if(match.length===1){tokens=match[0]=match[0].slice(0);if(tokens.length>2&&(token=tokens[0]).type==="ID"&&support.getById&&context.nodeType===9&&documentIsHTML&&Expr.relative[tokens[1].type]){context=(Expr.find["ID"](token.matches[0].replace(runescape,funescape),context)||[])[0];if(!context){return results}else if(compiled){context=context.parentNode}selector=selector.slice(tokens.shift().value.length)}i=matchExpr["needsContext"].test(selector)?0:tokens.length;while(i--){token=tokens[i];if(Expr.relative[type=token.type]){break}if(find=Expr.find[type]){if(seed=find(token.matches[0].replace(runescape,funescape),rsibling.test(tokens[0].type)&&testContext(context.parentNode)||context)){ -tokens.splice(i,1);selector=seed.length&&toSelector(tokens);if(!selector){push.apply(results,seed);return results}break}}}}(compiled||compile(selector,match))(seed,context,!documentIsHTML,results,rsibling.test(selector)&&testContext(context.parentNode)||context);return results};support.sortStable=expando.split("").sort(sortOrder).join("")===expando;support.detectDuplicates=!!hasDuplicate;setDocument();support.sortDetached=assert(function(div1){return div1.compareDocumentPosition(document.createElement("div"))&1});if(!assert(function(div){div.innerHTML="
    ";return div.firstChild.getAttribute("href")==="#"})){addHandle("type|href|height|width",function(elem,name,isXML){if(!isXML){return elem.getAttribute(name,name.toLowerCase()==="type"?1:2)}})}if(!support.attributes||!assert(function(div){div.innerHTML="";div.firstChild.setAttribute("value","");return div.firstChild.getAttribute("value")===""})){addHandle("value",function(elem,name,isXML){if(!isXML&&elem.nodeName.toLowerCase()==="input"){return elem.defaultValue}})}if(!assert(function(div){return div.getAttribute("disabled")==null})){addHandle(booleans,function(elem,name,isXML){var val;if(!isXML){return elem[name]===true?name.toLowerCase():(val=elem.getAttributeNode(name))&&val.specified?val.value:null}})}if(typeof define==="function"&&define.amd){define(function(){return Sizzle})}else if(typeof module!=="undefined"&&module.exports){module.exports=Sizzle}else{window.Sizzle=Sizzle}})(window);(function(engine){var extendElements=Prototype.Selector.extendElements;function select(selector,scope){return extendElements(engine(selector,scope||document))}function match(element,selector){return engine.matches(selector,[element]).length==1}Prototype.Selector.engine=engine;Prototype.Selector.select=select;Prototype.Selector.match=match})(Sizzle);window.Sizzle=Prototype._original_property;delete Prototype._original_property;var Form={reset:function(form){form=$(form);form.reset();return form},serializeElements:function(elements,options){if(typeof options!="object")options={hash:!!options};else if(Object.isUndefined(options.hash))options.hash=true;var key,value,submitted=false,submit=options.submit,accumulator,initial;if(options.hash){initial={};accumulator=function(result,key,value){if(key in result){if(!Object.isArray(result[key]))result[key]=[result[key]];result[key]=result[key].concat(value)}else result[key]=value;return result}}else{initial="";accumulator=function(result,key,values){if(!Object.isArray(values)){values=[values]}if(!values.length){return result}var encodedKey=encodeURIComponent(key).gsub(/%20/,"+");return result+(result?"&":"")+values.map(function(value){value=value.gsub(/(\r)?\n/,"\r\n");value=encodeURIComponent(value);value=value.gsub(/%20/,"+");return encodedKey+"="+value}).join("&")}}return elements.inject(initial,function(result,element){if(!element.disabled&&element.name){key=element.name;value=$(element).getValue();if(value!=null&&element.type!="file"&&(element.type!="submit"||!submitted&&submit!==false&&(!submit||key==submit)&&(submitted=true))){result=accumulator(result,key,value)}}return result})}};Form.Methods={serialize:function(form,options){return Form.serializeElements(Form.getElements(form),options)},getElements:function(form){var elements=$(form).getElementsByTagName("*");var element,results=[],serializers=Form.Element.Serializers;for(var i=0;element=elements[i];i++){if(serializers[element.tagName.toLowerCase()])results.push(Element.extend(element))}return results},getInputs:function(form,typeName,name){form=$(form);var inputs=form.getElementsByTagName("input");if(!typeName&&!name)return $A(inputs).map(Element.extend);for(var i=0,matchingInputs=[],length=inputs.length;i=0}).sortBy(function(element){return element.tabIndex}).first();return firstByIndex?firstByIndex:elements.find(function(element){return/^(?:input|select|textarea)$/i.test(element.tagName)})},focusFirstElement:function(form){form=$(form);var element=form.findFirstElement();if(element)element.activate();return form},request:function(form,options){form=$(form),options=Object.clone(options||{});var params=options.parameters,action=form.readAttribute("action")||"";if(action.blank())action=window.location.href;options.parameters=form.serialize(true);if(params){if(Object.isString(params))params=params.toQueryParams();Object.extend(options.parameters,params)}if(form.hasAttribute("method")&&!options.method)options.method=form.method;return new Ajax.Request(action,options)}};Form.Element={focus:function(element){$(element).focus();return element},select:function(element){$(element).select();return element}};Form.Element.Methods={serialize:function(element){element=$(element);if(!element.disabled&&element.name){var value=element.getValue();if(value!=undefined){var pair={};pair[element.name]=value;return Object.toQueryString(pair)}}return""},getValue:function(element){element=$(element);var method=element.tagName.toLowerCase();return Form.Element.Serializers[method](element)},setValue:function(element,value){element=$(element);var method=element.tagName.toLowerCase();Form.Element.Serializers[method](element,value);return element},clear:function(element){$(element).value="";return element},present:function(element){return $(element).value!=""},activate:function(element){element=$(element);try{element.focus();if(element.select&&(element.tagName.toLowerCase()!="input"||!/^(?:button|reset|submit)$/i.test(element.type)))element.select()}catch(e){}return element},disable:function(element){element=$(element);element.disabled=true;return element},enable:function(element){element=$(element);element.disabled=false;return element}};var Field=Form.Element;var $F=Form.Element.Methods.getValue;Form.Element.Serializers=function(){function input(element,value){switch(element.type.toLowerCase()){case"checkbox":case"radio":return inputSelector(element,value);default:return valueSelector(element,value)}}function inputSelector(element,value){if(Object.isUndefined(value))return element.checked?element.value:null;else element.checked=!!value}function valueSelector(element,value){if(Object.isUndefined(value))return element.value;else element.value=value}function select(element,value){if(Object.isUndefined(value))return(element.type==="select-one"?selectOne:selectMany)(element);var opt,currentValue,single=!Object.isArray(value);for(var i=0,length=element.length;i=0?optionValue(element.options[index]):null}function selectMany(element){var values,length=element.length;if(!length)return null;for(var i=0,values=[];i=this.offset[1]&&y=this.offset[0]&&x=this.offset[1]&&this.ycomp=this.offset[0]&&this.xcomp0})._each(iterator,context)},set:function(className){this.element.className=className},add:function(classNameToAdd){if(this.include(classNameToAdd))return;this.set($A(this).concat(classNameToAdd).join(" "))},remove:function(classNameToRemove){if(!this.include(classNameToRemove))return;this.set($A(this).without(classNameToRemove).join(" "))},toString:function(){return $A(this).join(" ")}};Object.extend(Element.ClassNames.prototype,Enumerable);(function(){window.Selector=Class.create({initialize:function(expression){this.expression=expression.strip()},findElements:function(rootElement){return Prototype.Selector.select(this.expression,rootElement)},match:function(element){return Prototype.Selector.match(element,this.expression)},toString:function(){return this.expression},inspect:function(){return"#"}});Object.extend(Selector,{matchElements:function(elements,expression){var match=Prototype.Selector.match,results=[];for(var i=0,length=elements.length;i=y;y++)if(l=Math.sin(h),m=Math.tan(h),r=m*Math.sqrt(1-t*l*l),c=Math.sin(2*h),u=i*h-s*c+e*Math.sin(4*h)-o*Math.sin(6*h),d=i-2*s*Math.cos(2*h)+4*e*Math.cos(4*h)-6*o*Math.cos(6*h),p=2*u+r*(u*u+a)-2*n*(r*u+1),_=t*c*(u*u+a-2*n*u)/(2*r),f=2*(n-u)*(r*d-2/c)-2*d,P=p/(_+f),h+=P,1e-10>=Math.abs(P))return h;return Proj4js.reportError("phi4z: No convergence"),null}function e4fn(t){var i,s;return i=1+t,s=1-t,Math.sqrt(Math.pow(i,i)*Math.pow(s,s))}var Proj4js={defaultDatum:"WGS84",transform:function(t,i,s){if(!t.readyToUse)return this.reportError("Proj4js initialization for:"+t.srsCode+" not yet complete"),s;if(!i.readyToUse)return this.reportError("Proj4js initialization for:"+i.srsCode+" not yet complete"),s;if(t.datum&&i.datum&&((t.datum.datum_type==Proj4js.common.PJD_3PARAM||t.datum.datum_type==Proj4js.common.PJD_7PARAM)&&"WGS84"!=i.datumCode||(i.datum.datum_type==Proj4js.common.PJD_3PARAM||i.datum.datum_type==Proj4js.common.PJD_7PARAM)&&"WGS84"!=t.datumCode)){var e=Proj4js.WGS84;this.transform(t,e,s),t=e}return"enu"!=t.axis&&this.adjust_axis(t,!1,s),"longlat"==t.projName?(s.x*=Proj4js.common.D2R,s.y*=Proj4js.common.D2R):(t.to_meter&&(s.x*=t.to_meter,s.y*=t.to_meter),t.inverse(s)),t.from_greenwich&&(s.x+=t.from_greenwich),s=this.datum_transform(t.datum,i.datum,s),i.from_greenwich&&(s.x-=i.from_greenwich),"longlat"==i.projName?(s.x*=Proj4js.common.R2D,s.y*=Proj4js.common.R2D):(i.forward(s),i.to_meter&&(s.x/=i.to_meter,s.y/=i.to_meter)),"enu"!=i.axis&&this.adjust_axis(i,!0,s),s},datum_transform:function(t,i,s){return t.compare_datums(i)?s:t.datum_type==Proj4js.common.PJD_NODATUM||i.datum_type==Proj4js.common.PJD_NODATUM?s:((t.es!=i.es||t.a!=i.a||t.datum_type==Proj4js.common.PJD_3PARAM||t.datum_type==Proj4js.common.PJD_7PARAM||i.datum_type==Proj4js.common.PJD_3PARAM||i.datum_type==Proj4js.common.PJD_7PARAM)&&(t.geodetic_to_geocentric(s),(t.datum_type==Proj4js.common.PJD_3PARAM||t.datum_type==Proj4js.common.PJD_7PARAM)&&t.geocentric_to_wgs84(s),(i.datum_type==Proj4js.common.PJD_3PARAM||i.datum_type==Proj4js.common.PJD_7PARAM)&&i.geocentric_from_wgs84(s),i.geocentric_to_geodetic(s)),s)},adjust_axis:function(t,i,s){for(var e,o,n=s.x,a=s.y,r=s.z||0,h=0;3>h;h++)if(!i||2!=h||void 0!==s.z)switch(0==h?(e=n,o="x"):1==h?(e=a,o="y"):(e=r,o="z"),t.axis[h]){case"e":s[o]=e;break;case"w":s[o]=-e;break;case"n":s[o]=e;break;case"s":s[o]=-e;break;case"u":void 0!==s[o]&&(s.z=e);break;case"d":void 0!==s[o]&&(s.z=-e);break;default:return alert("ERROR: unknow axis ("+t.axis[h]+") - check definition of "+t.projName),null}return s},reportError:function(){},extend:function(t,i){if(t=t||{},i)for(var s in i){var e=i[s];void 0!==e&&(t[s]=e)}return t},Class:function(){for(var t,i=function(){this.initialize.apply(this,arguments)},s={},e=0;arguments.length>e;++e)t="function"==typeof arguments[e]?arguments[e].prototype:arguments[e],Proj4js.extend(s,t);return i.prototype=s,i},bind:function(t,i){var s=Array.prototype.slice.apply(arguments,[2]);return function(){var e=s.concat(Array.prototype.slice.apply(arguments,[0])); +Math.sign = Math.sign || function(x) { + x = +x; // convert to a number + if (x === 0 || isNaN(x)) { + return x; + } + return x > 0 ? 1 : -1; +} -return t.apply(i,e)}},scriptName:"proj4js-combined.js",defsLookupService:"http://spatialreference.org/ref",libPath:null,getScriptLocation:function(){if(this.libPath)return this.libPath;for(var t=this.scriptName,i=t.length,s=document.getElementsByTagName("script"),e=0;s.length>e;e++){var o=s[e].getAttribute("src");if(o){var n=o.lastIndexOf(t);if(n>-1&&n+i==o.length){this.libPath=o.slice(0,-i);break}}}return this.libPath||""},loadScript:function(t,i,s,e){var o=document.createElement("script");o.defer=!1,o.type="text/javascript",o.id=t,o.src=t,o.onload=i,o.onerror=s,o.loadCheck=e,/MSIE/.test(navigator.userAgent)&&(o.onreadystatechange=this.checkReadyState),document.getElementsByTagName("head")[0].appendChild(o)},checkReadyState:function(){"loaded"==this.readyState&&(this.loadCheck()?this.onload():this.onerror())}};Proj4js.Proj=Proj4js.Class({readyToUse:!1,title:null,projName:null,units:null,datum:null,x0:0,y0:0,localCS:!1,queue:null,initialize:function(t,i){if(this.srsCodeInput=t,this.queue=[],i&&this.queue.push(i),t.indexOf("GEOGCS")>=0||t.indexOf("GEOCCS")>=0||t.indexOf("PROJCS")>=0||t.indexOf("LOCAL_CS")>=0)return this.parseWKT(t),this.deriveConstants(),this.loadProjCode(this.projName),void 0;if(0==t.indexOf("urn:")){var s=t.split(":");"ogc"!=s[1]&&"x-ogc"!=s[1]||"def"!=s[2]||"crs"!=s[3]||(t=s[4]+":"+s[s.length-1])}else if(0==t.indexOf("http://")){var e=t.split("#");e[0].match(/epsg.org/)?t="EPSG:"+e[1]:e[0].match(/RIG.xml/)&&(t="IGNF:"+e[1])}this.srsCode=t.toUpperCase(),0==this.srsCode.indexOf("EPSG")?(this.srsCode=this.srsCode,this.srsAuth="epsg",this.srsProjNumber=this.srsCode.substring(5)):0==this.srsCode.indexOf("IGNF")?(this.srsCode=this.srsCode,this.srsAuth="IGNF",this.srsProjNumber=this.srsCode.substring(5)):0==this.srsCode.indexOf("CRS")?(this.srsCode=this.srsCode,this.srsAuth="CRS",this.srsProjNumber=this.srsCode.substring(4)):(this.srsAuth="",this.srsProjNumber=this.srsCode),this.loadProjDefinition()},loadProjDefinition:function(){if(Proj4js.defs[this.srsCode])return this.defsLoaded(),void 0;var t=Proj4js.getScriptLocation()+"defs/"+this.srsAuth.toUpperCase()+this.srsProjNumber+".js";Proj4js.loadScript(t,Proj4js.bind(this.defsLoaded,this),Proj4js.bind(this.loadFromService,this),Proj4js.bind(this.checkDefsLoaded,this))},loadFromService:function(){var t=Proj4js.defsLookupService+"/"+this.srsAuth+"/"+this.srsProjNumber+"/proj4js/";Proj4js.loadScript(t,Proj4js.bind(this.defsLoaded,this),Proj4js.bind(this.defsFailed,this),Proj4js.bind(this.checkDefsLoaded,this))},defsLoaded:function(){this.parseDefs(),this.loadProjCode(this.projName)},checkDefsLoaded:function(){return Proj4js.defs[this.srsCode]?!0:!1},defsFailed:function(){Proj4js.reportError("failed to load projection definition for: "+this.srsCode),Proj4js.defs[this.srsCode]=Proj4js.defs.WGS84,this.defsLoaded()},loadProjCode:function(t){if(Proj4js.Proj[t])return this.initTransforms(),void 0;var i=Proj4js.getScriptLocation()+"projCode/"+t+".js";Proj4js.loadScript(i,Proj4js.bind(this.loadProjCodeSuccess,this,t),Proj4js.bind(this.loadProjCodeFailure,this,t),Proj4js.bind(this.checkCodeLoaded,this,t))},loadProjCodeSuccess:function(t){Proj4js.Proj[t].dependsOn?this.loadProjCode(Proj4js.Proj[t].dependsOn):this.initTransforms()},loadProjCodeFailure:function(t){Proj4js.reportError("failed to find projection file for: "+t)},checkCodeLoaded:function(t){return Proj4js.Proj[t]?!0:!1},initTransforms:function(){if(Proj4js.extend(this,Proj4js.Proj[this.projName]),this.init(),this.readyToUse=!0,this.queue)for(var t;t=this.queue.shift();)t.call(this,this)},wktRE:/^(\w+)\[(.*)\]$/,parseWKT:function(t){var i=t.match(this.wktRE);if(i){var s,e=i[1],o=i[2],n=o.split(",");s="TOWGS84"==e.toUpperCase()?e:n.shift(),s=s.replace(/^\"/,""),s=s.replace(/\"$/,"");for(var a=[],r=0,h="",l=0;n.length>l;++l){for(var c=n[l],m=0;c.length>m;++m)"["==c.charAt(m)&&++r,"]"==c.charAt(m)&&--r;h+=c,0===r?(a.push(h),h=""):h+=","}switch(e){case"LOCAL_CS":this.projName="identity",this.localCS=!0,this.srsCode=s;break;case"GEOGCS":this.projName="longlat",this.geocsCode=s,this.srsCode||(this.srsCode=s);break;case"PROJCS":this.srsCode=s;break;case"GEOCCS":break;case"PROJECTION":this.projName=Proj4js.wktProjections[s];break;case"DATUM":this.datumName=s;break;case"LOCAL_DATUM":this.datumCode="none";break;case"SPHEROID":this.ellps=s,this.a=parseFloat(a.shift()),this.rf=parseFloat(a.shift());break;case"PRIMEM":this.from_greenwich=parseFloat(a.shift());break;case"UNIT":this.units=s,this.unitsPerMeter=parseFloat(a.shift());break;case"PARAMETER":var u=s.toLowerCase(),d=parseFloat(a.shift());switch(u){case"false_easting":this.x0=d;break;case"false_northing":this.y0=d;break;case"scale_factor":this.k0=d;break;case"central_meridian":this.long0=d*Proj4js.common.D2R;break;case"latitude_of_origin":this.lat0=d*Proj4js.common.D2R;break;case"more_here":break;default:}break;case"TOWGS84":this.datum_params=a;break;case"AXIS":var u=s.toLowerCase(),d=a.shift();switch(d){case"EAST":d="e";break;case"WEST":d="w";break;case"NORTH":d="n";break;case"SOUTH":d="s";break;case"UP":d="u";break;case"DOWN":d="d";break;case"OTHER":default:d=" "}switch(this.axis||(this.axis="enu"),u){case"x":this.axis=d+this.axis.substr(1,2);break;case"y":this.axis=this.axis.substr(0,1)+d+this.axis.substr(2,1);break;case"z":this.axis=this.axis.substr(0,2)+d;break;default:}case"MORE_HERE":break;default:}for(var l=0;a.length>l;++l)this.parseWKT(a[l])}},parseDefs:function(){this.defData=Proj4js.defs[this.srsCode];var t,i;if(this.defData){for(var s=this.defData.split("+"),e=0;s.length>e;e++){var o=s[e].split("=");switch(t=o[0].toLowerCase(),i=o[1],t.replace(/\s/gi,"")){case"":break;case"title":this.title=i;break;case"proj":this.projName=i.replace(/\s/gi,"");break;case"units":this.units=i.replace(/\s/gi,"");break;case"datum":this.datumCode=i.replace(/\s/gi,"");break;case"nadgrids":this.nagrids=i.replace(/\s/gi,"");break;case"ellps":this.ellps=i.replace(/\s/gi,"");break;case"a":this.a=parseFloat(i);break;case"b":this.b=parseFloat(i);break;case"rf":this.rf=parseFloat(i);break;case"lat_0":this.lat0=i*Proj4js.common.D2R;break;case"lat_1":this.lat1=i*Proj4js.common.D2R;break;case"lat_2":this.lat2=i*Proj4js.common.D2R;break;case"lat_ts":this.lat_ts=i*Proj4js.common.D2R;break;case"lon_0":this.long0=i*Proj4js.common.D2R;break;case"alpha":this.alpha=parseFloat(i)*Proj4js.common.D2R;break;case"lonc":this.longc=i*Proj4js.common.D2R;break;case"x_0":this.x0=parseFloat(i);break;case"y_0":this.y0=parseFloat(i);break;case"k_0":this.k0=parseFloat(i);break;case"k":this.k0=parseFloat(i);break;case"r_a":this.R_A=!0;break;case"zone":this.zone=parseInt(i,10);break;case"south":this.utmSouth=!0;break;case"towgs84":this.datum_params=i.split(",");break;case"to_meter":this.to_meter=parseFloat(i);break;case"from_greenwich":this.from_greenwich=i*Proj4js.common.D2R;break;case"pm":i=i.replace(/\s/gi,""),this.from_greenwich=Proj4js.PrimeMeridian[i]?Proj4js.PrimeMeridian[i]:parseFloat(i),this.from_greenwich*=Proj4js.common.D2R;break;case"axis":i=i.replace(/\s/gi,"");var n="ewnsud";3==i.length&&-1!=n.indexOf(i.substr(0,1))&&-1!=n.indexOf(i.substr(1,1))&&-1!=n.indexOf(i.substr(2,1))&&(this.axis=i);break;case"no_defs":break;default:}}this.deriveConstants()}},deriveConstants:function(){if("@null"==this.nagrids&&(this.datumCode="none"),this.datumCode&&"none"!=this.datumCode){var t=Proj4js.Datum[this.datumCode];t&&(this.datum_params=t.towgs84?t.towgs84.split(","):null,this.ellps=t.ellipse,this.datumName=t.datumName?t.datumName:this.datumCode)}if(!this.a){var i=Proj4js.Ellipsoid[this.ellps]?Proj4js.Ellipsoid[this.ellps]:Proj4js.Ellipsoid.WGS84;Proj4js.extend(this,i)}this.rf&&!this.b&&(this.b=(1-1/this.rf)*this.a),(0===this.rf||Math.abs(this.a-this.b)=a;a++)if(s=t*Math.sin(n),e=this.HALF_PI-2*Math.atan(i*Math.pow((1-s)/(1+s),o))-n,n+=e,1e-10>=Math.abs(e))return n;return alert("phi2z has NoConvergence"),-9999},qsfnz:function(t,i){var s;return t>1e-7?(s=t*i,(1-t*t)*(i/(1-s*s)-.5/t*Math.log((1-s)/(1+s)))):2*i},asinz:function(t){return Math.abs(t)>1&&(t=t>1?1:-1),Math.asin(t)},e0fn:function(t){return 1-.25*t*(1+t/16*(3+1.25*t))},e1fn:function(t){return.375*t*(1+.25*t*(1+.46875*t))},e2fn:function(t){return.05859375*t*t*(1+.75*t)},e3fn:function(t){return t*t*t*(35/3072)},mlfn:function(t,i,s,e,o){return t*o-i*Math.sin(2*o)+s*Math.sin(4*o)-e*Math.sin(6*o)},srat:function(t,i){return Math.pow((1-t)/(1+t),i)},sign:function(t){return 0>t?-1:1},adjust_lon:function(t){return t=Math.abs(t)this.HALF_PI)return+Number.NaN;if(i==this.HALF_PI)return Number.POSITIVE_INFINITY;if(i==-1*this.HALF_PI)return-1*Number.POSITIVE_INFINITY;var e=t*s;return Math.log(Math.tan((this.HALF_PI+i)/2))+t*Math.log((1-e)/(1+e))/2},fL:function(t,i){return 2*Math.atan(t*Math.exp(i))-this.HALF_PI},invlatiso:function(t,i){var s=this.fL(1,i),e=0,o=0;do e=s,o=t*Math.sin(e),s=this.fL(Math.exp(t*Math.log((1+o)/(1-o))/2),i);while(Math.abs(s-e)>1e-12);return s},sinh:function(t){var i=Math.exp(t);return i=(i-1/i)/2},cosh:function(t){var i=Math.exp(t);return i=(i+1/i)/2},tanh:function(t){var i=Math.exp(t);return i=(i-1/i)/(i+1/i)},asinh:function(t){var i=t>=0?1:-1;return i*Math.log(Math.abs(t)+Math.sqrt(t*t+1))},acosh:function(t){return 2*Math.log(Math.sqrt((t+1)/2)+Math.sqrt((t-1)/2))},atanh:function(t){return Math.log((t-1)/(t+1))/2},gN:function(t,i,s){var e=i*s;return t/Math.sqrt(1-e*e)},pj_enfn:function(t){var i=[];i[0]=this.C00-t*(this.C02+t*(this.C04+t*(this.C06+t*this.C08))),i[1]=t*(this.C22-t*(this.C04+t*(this.C06+t*this.C08)));var s=t*t;return i[2]=s*(this.C44-t*(this.C46+t*this.C48)),s*=t,i[3]=s*(this.C66-t*this.C68),i[4]=s*t*this.C88,i},pj_mlfn:function(t,i,s,e){return s*=i,i*=i,e[0]*t-s*(e[1]+i*(e[2]+i*(e[3]+i*e[4])))},pj_inv_mlfn:function(t,i,s){for(var e=1/(1-i),o=t,n=Proj4js.common.MAX_ITER;n;--n){var a=Math.sin(o),r=1-i*a*a;if(r=(this.pj_mlfn(o,a,Math.cos(o),s)-t)*r*Math.sqrt(r)*e,o-=r,Math.abs(r)i;i++)t.datum_params[i]=parseFloat(t.datum_params[i]);(0!=t.datum_params[0]||0!=t.datum_params[1]||0!=t.datum_params[2])&&(this.datum_type=Proj4js.common.PJD_3PARAM),t.datum_params.length>3&&(0!=t.datum_params[3]||0!=t.datum_params[4]||0!=t.datum_params[5]||0!=t.datum_params[6])&&(this.datum_type=Proj4js.common.PJD_7PARAM,t.datum_params[3]*=Proj4js.common.SEC_TO_RAD,t.datum_params[4]*=Proj4js.common.SEC_TO_RAD,t.datum_params[5]*=Proj4js.common.SEC_TO_RAD,t.datum_params[6]=t.datum_params[6]/1e6+1)}t&&(this.a=t.a,this.b=t.b,this.es=t.es,this.ep2=t.ep2,this.datum_params=t.datum_params)},compare_datums:function(t){return this.datum_type!=t.datum_type?!1:this.a!=t.a||Math.abs(this.es-t.es)>5e-11?!1:this.datum_type==Proj4js.common.PJD_3PARAM?this.datum_params[0]==t.datum_params[0]&&this.datum_params[1]==t.datum_params[1]&&this.datum_params[2]==t.datum_params[2]:this.datum_type==Proj4js.common.PJD_7PARAM?this.datum_params[0]==t.datum_params[0]&&this.datum_params[1]==t.datum_params[1]&&this.datum_params[2]==t.datum_params[2]&&this.datum_params[3]==t.datum_params[3]&&this.datum_params[4]==t.datum_params[4]&&this.datum_params[5]==t.datum_params[5]&&this.datum_params[6]==t.datum_params[6]:this.datum_type==Proj4js.common.PJD_GRIDSHIFT||t.datum_type==Proj4js.common.PJD_GRIDSHIFT?(alert("ERROR: Grid shift transformations are not implemented."),!1):!0},geodetic_to_geocentric:function(t){var i,s,e,o,n,a,r,h=t.x,l=t.y,c=t.z?t.z:0,m=0;if(-Proj4js.common.HALF_PI>l&&l>-1.001*Proj4js.common.HALF_PI)l=-Proj4js.common.HALF_PI;else if(l>Proj4js.common.HALF_PI&&1.001*Proj4js.common.HALF_PI>l)l=Proj4js.common.HALF_PI;else if(-Proj4js.common.HALF_PI>l||l>Proj4js.common.HALF_PI)return Proj4js.reportError("geocent:lat out of range:"+l),null;return h>Proj4js.common.PI&&(h-=2*Proj4js.common.PI),n=Math.sin(l),r=Math.cos(l),a=n*n,o=this.a/Math.sqrt(1-this.es*a),i=(o+c)*r*Math.cos(h),s=(o+c)*r*Math.sin(h),e=(o*(1-this.es)+c)*n,t.x=i,t.y=s,t.z=e,m},geocentric_to_geodetic:function(t){var i,s,e,o,n,a,r,h,l,c,m,u,d,p,_,f,P,y=1e-12,g=y*y,L=30,v=t.x,j=t.y,M=t.z?t.z:0;if(d=!1,i=Math.sqrt(v*v+j*j),s=Math.sqrt(v*v+j*j+M*M),y>i/this.a){if(d=!0,_=0,y>s/this.a)return f=Proj4js.common.HALF_PI,P=-this.b,void 0}else _=Math.atan2(j,v);e=M/s,o=i/s,n=1/Math.sqrt(1-this.es*(2-this.es)*o*o),h=o*(1-this.es)*n,l=e*n,p=0;do p++,r=this.a/Math.sqrt(1-this.es*l*l),P=i*h+M*l-r*(1-this.es*l*l),a=this.es*r/(r+P),n=1/Math.sqrt(1-a*(2-a)*o*o),c=o*(1-a)*n,m=e*n,u=m*h-c*l,h=c,l=m;while(u*u>g&&L>p);return f=Math.atan(m/Math.abs(c)),t.x=_,t.y=f,t.z=P,t},geocentric_to_geodetic_noniter:function(t){var i,s,e,o,n,a,r,h,l,c,m,u,d,p,_,f,P,y=t.x,g=t.y,L=t.z?t.z:0;if(y=parseFloat(y),g=parseFloat(g),L=parseFloat(L),P=!1,0!=y)i=Math.atan2(g,y);else if(g>0)i=Proj4js.common.HALF_PI;else if(0>g)i=-Proj4js.common.HALF_PI;else if(P=!0,i=0,L>0)s=Proj4js.common.HALF_PI;else{if(!(0>L))return s=Proj4js.common.HALF_PI,e=-this.b,void 0;s=-Proj4js.common.HALF_PI}return n=y*y+g*g,o=Math.sqrt(n),a=L*Proj4js.common.AD_C,h=Math.sqrt(a*a+n),c=a/h,u=o/h,m=c*c*c,r=L+this.b*this.ep2*m,f=o-this.a*this.es*u*u*u,l=Math.sqrt(r*r+f*f),d=r/l,p=f/l,_=this.a/Math.sqrt(1-this.es*d*d),e=p>=Proj4js.common.COS_67P5?o/p-_:-Proj4js.common.COS_67P5>=p?o/-p-_:L/d+_*(this.es-1),0==P&&(s=Math.atan(d/p)),t.x=i,t.y=s,t.z=e,t},geocentric_to_wgs84:function(t){if(this.datum_type==Proj4js.common.PJD_3PARAM)t.x+=this.datum_params[0],t.y+=this.datum_params[1],t.z+=this.datum_params[2];else if(this.datum_type==Proj4js.common.PJD_7PARAM){var i=this.datum_params[0],s=this.datum_params[1],e=this.datum_params[2],o=this.datum_params[3],n=this.datum_params[4],a=this.datum_params[5],r=this.datum_params[6],h=r*(t.x-a*t.y+n*t.z)+i,l=r*(a*t.x+t.y-o*t.z)+s,c=r*(-n*t.x+o*t.y+t.z)+e;t.x=h,t.y=l,t.z=c}},geocentric_from_wgs84:function(t){if(this.datum_type==Proj4js.common.PJD_3PARAM)t.x-=this.datum_params[0],t.y-=this.datum_params[1],t.z-=this.datum_params[2];else if(this.datum_type==Proj4js.common.PJD_7PARAM){var i=this.datum_params[0],s=this.datum_params[1],e=this.datum_params[2],o=this.datum_params[3],n=this.datum_params[4],a=this.datum_params[5],r=this.datum_params[6],h=(t.x-i)/r,l=(t.y-s)/r,c=(t.z-e)/r;t.x=h+a*l-n*c,t.y=-a*h+l+o*c,t.z=n*h-o*l+c}}}),Proj4js.Point=Proj4js.Class({initialize:function(t,i,s){if("object"==typeof t)this.x=t[0],this.y=t[1],this.z=t[2]||0;else if("string"==typeof t&&i===void 0){var e=t.split(",");this.x=parseFloat(e[0]),this.y=parseFloat(e[1]),this.z=parseFloat(e[2])||0}else this.x=t,this.y=i,this.z=s||0},clone:function(){return new Proj4js.Point(this.x,this.y,this.z)},toString:function(){return"x="+this.x+",y="+this.y},toShortString:function(){return this.x+", "+this.y}}),Proj4js.PrimeMeridian={greenwich:0,lisbon:-9.131906111111,paris:2.337229166667,bogota:-74.080916666667,madrid:-3.687938888889,rome:12.452333333333,bern:7.439583333333,jakarta:106.807719444444,ferro:-17.666666666667,brussels:4.367975,stockholm:18.058277777778,athens:23.7163375,oslo:10.722916666667},Proj4js.Ellipsoid={MERIT:{a:6378137,rf:298.257,ellipseName:"MERIT 1983"},SGS85:{a:6378136,rf:298.257,ellipseName:"Soviet Geodetic System 85"},GRS80:{a:6378137,rf:298.257222101,ellipseName:"GRS 1980(IUGG, 1980)"},IAU76:{a:6378140,rf:298.257,ellipseName:"IAU 1976"},airy:{a:6377563.396,b:6356256.91,ellipseName:"Airy 1830"},"APL4.":{a:6378137,rf:298.25,ellipseName:"Appl. Physics. 1965"},NWL9D:{a:6378145,rf:298.25,ellipseName:"Naval Weapons Lab., 1965"},mod_airy:{a:6377340.189,b:6356034.446,ellipseName:"Modified Airy"},andrae:{a:6377104.43,rf:300,ellipseName:"Andrae 1876 (Den., Iclnd.)"},aust_SA:{a:6378160,rf:298.25,ellipseName:"Australian Natl & S. Amer. 1969"},GRS67:{a:6378160,rf:298.247167427,ellipseName:"GRS 67(IUGG 1967)"},bessel:{a:6377397.155,rf:299.1528128,ellipseName:"Bessel 1841"},bess_nam:{a:6377483.865,rf:299.1528128,ellipseName:"Bessel 1841 (Namibia)"},clrk66:{a:6378206.4,b:6356583.8,ellipseName:"Clarke 1866"},clrk80:{a:6378249.145,rf:293.4663,ellipseName:"Clarke 1880 mod."},CPM:{a:6375738.7,rf:334.29,ellipseName:"Comm. des Poids et Mesures 1799"},delmbr:{a:6376428,rf:311.5,ellipseName:"Delambre 1810 (Belgium)"},engelis:{a:6378136.05,rf:298.2566,ellipseName:"Engelis 1985"},evrst30:{a:6377276.345,rf:300.8017,ellipseName:"Everest 1830"},evrst48:{a:6377304.063,rf:300.8017,ellipseName:"Everest 1948"},evrst56:{a:6377301.243,rf:300.8017,ellipseName:"Everest 1956"},evrst69:{a:6377295.664,rf:300.8017,ellipseName:"Everest 1969"},evrstSS:{a:6377298.556,rf:300.8017,ellipseName:"Everest (Sabah & Sarawak)"},fschr60:{a:6378166,rf:298.3,ellipseName:"Fischer (Mercury Datum) 1960"},fschr60m:{a:6378155,rf:298.3,ellipseName:"Fischer 1960"},fschr68:{a:6378150,rf:298.3,ellipseName:"Fischer 1968"},helmert:{a:6378200,rf:298.3,ellipseName:"Helmert 1906"},hough:{a:6378270,rf:297,ellipseName:"Hough"},intl:{a:6378388,rf:297,ellipseName:"International 1909 (Hayford)"},kaula:{a:6378163,rf:298.24,ellipseName:"Kaula 1961"},lerch:{a:6378139,rf:298.257,ellipseName:"Lerch 1979"},mprts:{a:6397300,rf:191,ellipseName:"Maupertius 1738"},new_intl:{a:6378157.5,b:6356772.2,ellipseName:"New International 1967"},plessis:{a:6376523,rf:6355863,ellipseName:"Plessis 1817 (France)"},krass:{a:6378245,rf:298.3,ellipseName:"Krassovsky, 1942"},SEasia:{a:6378155,b:6356773.3205,ellipseName:"Southeast Asia"},walbeck:{a:6376896,b:6355834.8467,ellipseName:"Walbeck"},WGS60:{a:6378165,rf:298.3,ellipseName:"WGS 60"},WGS66:{a:6378145,rf:298.25,ellipseName:"WGS 66"},WGS72:{a:6378135,rf:298.26,ellipseName:"WGS 72"},WGS84:{a:6378137,rf:298.257223563,ellipseName:"WGS 84"},sphere:{a:6370997,b:6370997,ellipseName:"Normal Sphere (r=6370997)"}},Proj4js.Datum={WGS84:{towgs84:"0,0,0",ellipse:"WGS84",datumName:"WGS84"},GGRS87:{towgs84:"-199.87,74.79,246.62",ellipse:"GRS80",datumName:"Greek_Geodetic_Reference_System_1987"},NAD83:{towgs84:"0,0,0",ellipse:"GRS80",datumName:"North_American_Datum_1983"},NAD27:{nadgrids:"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat",ellipse:"clrk66",datumName:"North_American_Datum_1927"},potsdam:{towgs84:"606.0,23.0,413.0",ellipse:"bessel",datumName:"Potsdam Rauenberg 1950 DHDN"},carthage:{towgs84:"-263.0,6.0,431.0",ellipse:"clark80",datumName:"Carthage 1934 Tunisia"},hermannskogel:{towgs84:"653.0,-212.0,449.0",ellipse:"bessel",datumName:"Hermannskogel"},ire65:{towgs84:"482.530,-130.596,564.557,-1.042,-0.214,-0.631,8.15",ellipse:"mod_airy",datumName:"Ireland 1965"},nzgd49:{towgs84:"59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993",ellipse:"intl",datumName:"New Zealand Geodetic Datum 1949"},OSGB36:{towgs84:"446.448,-125.157,542.060,0.1502,0.2470,0.8421,-20.4894",ellipse:"airy",datumName:"Airy 1830"}},Proj4js.WGS84=new Proj4js.Proj("WGS84"),Proj4js.Datum.OSB36=Proj4js.Datum.OSGB36,Proj4js.wktProjections={"Lambert Tangential Conformal Conic Projection":"lcc",Mercator:"merc","Popular Visualisation Pseudo Mercator":"merc",Mercator_1SP:"merc",Transverse_Mercator:"tmerc","Transverse Mercator":"tmerc","Lambert Azimuthal Equal Area":"laea","Universal Transverse Mercator System":"utm"},Proj4js.Proj.aea={init:function(){return Math.abs(this.lat1+this.lat2)Proj4js.common.EPSLN?(this.ms1*this.ms1-this.ms2*this.ms2)/(this.qs2-this.qs1):this.con,this.c=this.ms1*this.ms1+this.ns0*this.qs1,this.rh=this.a*Math.sqrt(this.c-this.ns0*this.qs0)/this.ns0,void 0)},forward:function(t){var i=t.x,s=t.y;this.sin_phi=Math.sin(s),this.cos_phi=Math.cos(s);var e=Proj4js.common.qsfnz(this.e3,this.sin_phi,this.cos_phi),o=this.a*Math.sqrt(this.c-this.ns0*e)/this.ns0,n=this.ns0*Proj4js.common.adjust_lon(i-this.long0),a=o*Math.sin(n)+this.x0,r=this.rh-o*Math.cos(n)+this.y0;return t.x=a,t.y=r,t},inverse:function(t){var i,s,e,o,n,a;return t.x-=this.x0,t.y=this.rh-t.y+this.y0,this.ns0>=0?(i=Math.sqrt(t.x*t.x+t.y*t.y),e=1):(i=-Math.sqrt(t.x*t.x+t.y*t.y),e=-1),o=0,0!=i&&(o=Math.atan2(e*t.x,e*t.y)),e=i*this.ns0/this.a,s=(this.c-e*e)/this.ns0,this.e3>=1e-10?(e=1-.5*(1-this.es)*Math.log((1-this.e3)/(1+this.e3))/this.e3,a=Math.abs(Math.abs(e)-Math.abs(s))>1e-10?this.phi1z(this.e3,s):s>=0?.5*Proj4js.common.PI:-.5*Proj4js.common.PI):a=this.phi1z(this.e3,s),n=Proj4js.common.adjust_lon(o/this.ns0+this.long0),t.x=n,t.y=a,t},phi1z:function(t,i){var s,e,o,n,a,r=Proj4js.common.asinz(.5*i);if(Proj4js.common.EPSLN>t)return r;for(var h=t*t,l=1;25>=l;l++)if(s=Math.sin(r),e=Math.cos(r),o=t*s,n=1-o*o,a=.5*n*n/e*(i/(1-h)-s/n+.5/t*Math.log((1-o)/(1+o))),r+=a,1e-7>=Math.abs(a))return r;return Proj4js.reportError("aea:phi1z:Convergence error"),null}},Proj4js.Proj.sterea={dependsOn:"gauss",init:function(){return Proj4js.Proj.gauss.init.apply(this),this.rc?(this.sinc0=Math.sin(this.phic0),this.cosc0=Math.cos(this.phic0),this.R2=2*this.rc,this.title||(this.title="Oblique Stereographic Alternative"),void 0):(Proj4js.reportError("sterea:init:E_ERROR_0"),void 0)},forward:function(t){var i,s,e,o;return t.x=Proj4js.common.adjust_lon(t.x-this.long0),Proj4js.Proj.gauss.forward.apply(this,[t]),i=Math.sin(t.y),s=Math.cos(t.y),e=Math.cos(t.x),o=this.k0*this.R2/(1+this.sinc0*i+this.cosc0*s*e),t.x=o*s*Math.sin(t.x),t.y=o*(this.cosc0*i-this.sinc0*s*e),t.x=this.a*t.x+this.x0,t.y=this.a*t.y+this.y0,t},inverse:function(t){var i,s,e,o,n;if(t.x=(t.x-this.x0)/this.a,t.y=(t.y-this.y0)/this.a,t.x/=this.k0,t.y/=this.k0,n=Math.sqrt(t.x*t.x+t.y*t.y)){var a=2*Math.atan2(n,this.R2);i=Math.sin(a),s=Math.cos(a),o=Math.asin(s*this.sinc0+t.y*i*this.cosc0/n),e=Math.atan2(t.x*i,n*this.cosc0*s-t.y*this.sinc0*i)}else o=this.phic0,e=0;return t.x=e,t.y=o,Proj4js.Proj.gauss.inverse.apply(this,[t]),t.x=Proj4js.common.adjust_lon(t.x+this.long0),t}},Proj4js.Proj.poly={init:function(){0==this.lat0&&(this.lat0=90),this.temp=this.b/this.a,this.es=1-Math.pow(this.temp,2),this.e=Math.sqrt(this.es),this.e0=Proj4js.common.e0fn(this.es),this.e1=Proj4js.common.e1fn(this.es),this.e2=Proj4js.common.e2fn(this.es),this.e3=Proj4js.common.e3fn(this.es),this.ml0=Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,this.lat0)},forward:function(t){var i,s,e,o,n,a,r,h=t.x,l=t.y;return e=Proj4js.common.adjust_lon(h-this.long0),1e-7>=Math.abs(l)?(a=this.x0+this.a*e,r=this.y0-this.a*this.ml0):(i=Math.sin(l),s=Math.cos(l),o=Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,l),n=Proj4js.common.msfnz(this.e,i,s),e=i,a=this.x0+this.a*n*Math.sin(e)/i,r=this.y0+this.a*(o-this.ml0+n*(1-Math.cos(e))/i)),t.x=a,t.y=r,t},inverse:function(t){var i,s,e,o,n,a;if(t.x-=this.x0,t.y-=this.y0,i=this.ml0+t.y/this.a,o=0,1e-7>=Math.abs(i))n=t.x/this.a+this.long0,a=0;else{if(s=i*i+t.x/this.a*(t.x/this.a),o=phi4z(this.es,this.e0,this.e1,this.e2,this.e3,this.al,s,e,a),1!=o)return o;n=Proj4js.common.adjust_lon(Proj4js.common.asinz(t.x*e/this.a)/Math.sin(a)+this.long0)}return t.x=n,t.y=a,t}},Proj4js.Proj.equi={init:function(){this.x0||(this.x0=0),this.y0||(this.y0=0),this.lat0||(this.lat0=0),this.long0||(this.long0=0)},forward:function(t){var i=t.x,s=t.y,e=Proj4js.common.adjust_lon(i-this.long0),o=this.x0+this.a*e*Math.cos(this.lat0),n=this.y0+this.a*s;return this.t1=o,this.t2=Math.cos(this.lat0),t.x=o,t.y=n,t},inverse:function(t){t.x-=this.x0,t.y-=this.y0;var i=t.y/this.a;Math.abs(i)>Proj4js.common.HALF_PI&&Proj4js.reportError("equi:Inv:DataError");var s=Proj4js.common.adjust_lon(this.long0+t.x/(this.a*Math.cos(this.lat0)));t.x=s,t.y=i}},Proj4js.Proj.merc={init:function(){this.lat_ts&&(this.k0=this.sphere?Math.cos(this.lat_ts):Proj4js.common.msfnz(this.es,Math.sin(this.lat_ts),Math.cos(this.lat_ts)))},forward:function(t){var i=t.x,s=t.y;if(s*Proj4js.common.R2D>90&&-90>s*Proj4js.common.R2D&&i*Proj4js.common.R2D>180&&-180>i*Proj4js.common.R2D)return Proj4js.reportError("merc:forward: llInputOutOfRange: "+i+" : "+s),null;var e,o;if(Math.abs(Math.abs(s)-Proj4js.common.HALF_PI)<=Proj4js.common.EPSLN)return Proj4js.reportError("merc:forward: ll2mAtPoles"),null;if(this.sphere)e=this.x0+this.a*this.k0*Proj4js.common.adjust_lon(i-this.long0),o=this.y0+this.a*this.k0*Math.log(Math.tan(Proj4js.common.FORTPI+.5*s));else{var n=Math.sin(s),a=Proj4js.common.tsfnz(this.e,s,n);e=this.x0+this.a*this.k0*Proj4js.common.adjust_lon(i-this.long0),o=this.y0-this.a*this.k0*Math.log(a)}return t.x=e,t.y=o,t},inverse:function(t){var i,s,e=t.x-this.x0,o=t.y-this.y0;if(this.sphere)s=Proj4js.common.HALF_PI-2*Math.atan(Math.exp(-o/this.a*this.k0));else{var n=Math.exp(-o/(this.a*this.k0));if(s=Proj4js.common.phi2z(this.e,n),-9999==s)return Proj4js.reportError("merc:inverse: lat = -9999"),null}return i=Proj4js.common.adjust_lon(this.long0+e/(this.a*this.k0)),t.x=i,t.y=s,t}},Proj4js.Proj.utm={dependsOn:"tmerc",init:function(){return this.zone?(this.lat0=0,this.long0=(6*Math.abs(this.zone)-183)*Proj4js.common.D2R,this.x0=5e5,this.y0=this.utmSouth?1e7:0,this.k0=.9996,Proj4js.Proj.tmerc.init.apply(this),this.forward=Proj4js.Proj.tmerc.forward,this.inverse=Proj4js.Proj.tmerc.inverse,void 0):(Proj4js.reportError("utm:init: zone must be specified for UTM"),void 0)}},Proj4js.Proj.eqdc={init:function(){this.mode||(this.mode=0),this.temp=this.b/this.a,this.es=1-Math.pow(this.temp,2),this.e=Math.sqrt(this.es),this.e0=Proj4js.common.e0fn(this.es),this.e1=Proj4js.common.e1fn(this.es),this.e2=Proj4js.common.e2fn(this.es),this.e3=Proj4js.common.e3fn(this.es),this.sinphi=Math.sin(this.lat1),this.cosphi=Math.cos(this.lat1),this.ms1=Proj4js.common.msfnz(this.e,this.sinphi,this.cosphi),this.ml1=Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,this.lat1),0!=this.mode?(Math.abs(this.lat1+this.lat2)=Proj4js.common.EPSLN?(this.ms1-this.ms2)/(this.ml2-this.ml1):this.sinphi):this.ns=this.sinphi,this.g=this.ml1+this.ms1/this.ns,this.ml0=Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,this.lat0),this.rh=this.a*(this.g-this.ml0)},forward:function(t){var i=t.x,s=t.y,e=Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,s),o=this.a*(this.g-e),n=this.ns*Proj4js.common.adjust_lon(i-this.long0),a=this.x0+o*Math.sin(n),r=this.y0+this.rh-o*Math.cos(n);return t.x=a,t.y=r,t},inverse:function(t){t.x-=this.x0,t.y=this.rh-t.y+this.y0;var i,s;this.ns>=0?(s=Math.sqrt(t.x*t.x+t.y*t.y),i=1):(s=-Math.sqrt(t.x*t.x+t.y*t.y),i=-1);var e=0;0!=s&&(e=Math.atan2(i*t.x,i*t.y));var o=this.g-s/this.a,n=this.phi3z(o,this.e0,this.e1,this.e2,this.e3),a=Proj4js.common.adjust_lon(this.long0+e/this.ns);return t.x=a,t.y=n,t},phi3z:function(t,i,s,e,o){var n,a;n=t;for(var r=0;15>r;r++)if(a=(t+s*Math.sin(2*n)-e*Math.sin(4*n)+o*Math.sin(6*n))/i-n,n+=a,1e-10>=Math.abs(a))return n;return Proj4js.reportError("PHI3Z-CONV:Latitude failed to converge after 15 iterations"),null}},Proj4js.Proj.tmerc={init:function(){this.e0=Proj4js.common.e0fn(this.es),this.e1=Proj4js.common.e1fn(this.es),this.e2=Proj4js.common.e2fn(this.es),this.e3=Proj4js.common.e3fn(this.es),this.ml0=this.a*Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,this.lat0)},forward:function(t){var i,s,e,o=t.x,n=t.y,a=Proj4js.common.adjust_lon(o-this.long0),r=Math.sin(n),h=Math.cos(n);if(this.sphere){var l=h*Math.sin(a);if(1e-10>Math.abs(Math.abs(l)-1))return Proj4js.reportError("tmerc:forward: Point projects into infinity"),93;s=.5*this.a*this.k0*Math.log((1+l)/(1-l)),i=Math.acos(h*Math.cos(a)/Math.sqrt(1-l*l)),0>n&&(i=-i),e=this.a*this.k0*(i-this.lat0)}else{var c=h*a,m=Math.pow(c,2),u=this.ep2*Math.pow(h,2),d=Math.tan(n),p=Math.pow(d,2);i=1-this.es*Math.pow(r,2);var _=this.a/Math.sqrt(i),f=this.a*Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,n);s=this.k0*_*c*(1+m/6*(1-p+u+m/20*(5-18*p+Math.pow(p,2)+72*u-58*this.ep2)))+this.x0,e=this.k0*(f-this.ml0+_*d*m*(.5+m/24*(5-p+9*u+4*Math.pow(u,2)+m/30*(61-58*p+Math.pow(p,2)+600*u-330*this.ep2))))+this.y0}return t.x=s,t.y=e,t},inverse:function(t){var i,s,e,o,n,a,r=6;if(this.sphere){var h=Math.exp(t.x/(this.a*this.k0)),l=.5*(h-1/h),c=this.lat0+t.y/(this.a*this.k0),m=Math.cos(c);i=Math.sqrt((1-m*m)/(1+l*l)),n=Proj4js.common.asinz(i),0>c&&(n=-n),a=0==l&&0==m?this.long0:Proj4js.common.adjust_lon(Math.atan2(l,m)+this.long0)}else{var u=t.x-this.x0,d=t.y-this.y0;for(i=(this.ml0+d/this.k0)/this.a,s=i,o=0;!0&&(e=(i+this.e1*Math.sin(2*s)-this.e2*Math.sin(4*s)+this.e3*Math.sin(6*s))/this.e0-s,s+=e,!(Math.abs(e)<=Proj4js.common.EPSLN));o++)if(o>=r)return Proj4js.reportError("tmerc:inverse: Latitude failed to converge"),95;if(Math.abs(s)0||Math.abs(a)<=Proj4js.common.EPSLN)var l=this.a*n*s*Math.sin(e),c=this.y0+this.a*n*(this.cos_p14*i-this.sin_p14*s*o);else Proj4js.reportError("orthoFwdPointError");return t.x=l,t.y=c,t},inverse:function(t){var i,s,e,o,n,a,r;return t.x-=this.x0,t.y-=this.y0,i=Math.sqrt(t.x*t.x+t.y*t.y),i>this.a+1e-7&&Proj4js.reportError("orthoInvDataError"),s=Proj4js.common.asinz(i/this.a),e=Math.sin(s),o=Math.cos(s),a=this.long0,Math.abs(i)<=Proj4js.common.EPSLN&&(r=this.lat0),r=Proj4js.common.asinz(o*this.sin_p14+t.y*e*this.cos_p14/i),n=Math.abs(this.lat0)-Proj4js.common.HALF_PI,Math.abs(n)<=Proj4js.common.EPSLN&&(a=this.lat0>=0?Proj4js.common.adjust_lon(this.long0+Math.atan2(t.x,-t.y)):Proj4js.common.adjust_lon(this.long0-Math.atan2(-t.x,t.y))),n=o-this.sin_p14*Math.sin(r),t.x=a,t.y=r,t}},Proj4js.Proj.krovak={init:function(){this.a=6377397.155,this.es=.006674372230614,this.e=Math.sqrt(this.es),this.lat0||(this.lat0=.863937979737193),this.long0||(this.long0=.4334234309119251),this.k0||(this.k0=.9999),this.s45=.785398163397448,this.s90=2*this.s45,this.fi0=this.lat0,this.e2=this.es,this.e=Math.sqrt(this.e2),this.alfa=Math.sqrt(1+this.e2*Math.pow(Math.cos(this.fi0),4)/(1-this.e2)),this.uq=1.04216856380474,this.u0=Math.asin(Math.sin(this.fi0)/this.alfa),this.g=Math.pow((1+this.e*Math.sin(this.fi0))/(1-this.e*Math.sin(this.fi0)),this.alfa*this.e/2),this.k=Math.tan(this.u0/2+this.s45)/Math.pow(Math.tan(this.fi0/2+this.s45),this.alfa)*this.g,this.k1=this.k0,this.n0=this.a*Math.sqrt(1-this.e2)/(1-this.e2*Math.pow(Math.sin(this.fi0),2)),this.s0=1.37008346281555,this.n=Math.sin(this.s0),this.ro0=this.k1*this.n0/Math.tan(this.s0),this.ad=this.s90-this.uq},forward:function(t){var i,s,e,o,n,a,r,h=t.x,l=t.y,c=Proj4js.common.adjust_lon(h-this.long0);return i=Math.pow((1+this.e*Math.sin(l))/(1-this.e*Math.sin(l)),this.alfa*this.e/2),s=2*(Math.atan(this.k*Math.pow(Math.tan(l/2+this.s45),this.alfa)/i)-this.s45),e=-c*this.alfa,o=Math.asin(Math.cos(this.ad)*Math.sin(s)+Math.sin(this.ad)*Math.cos(s)*Math.cos(e)),n=Math.asin(Math.cos(s)*Math.sin(e)/Math.cos(o)),a=this.n*n,r=this.ro0*Math.pow(Math.tan(this.s0/2+this.s45),this.n)/Math.pow(Math.tan(o/2+this.s45),this.n),t.y=r*Math.cos(a)/1,t.x=r*Math.sin(a)/1,this.czech&&(t.y*=-1,t.x*=-1),t},inverse:function(t){var i,s,e,o,n,a,r,h,l=t.x;t.x=t.y,t.y=l,this.czech&&(t.y*=-1,t.x*=-1),a=Math.sqrt(t.x*t.x+t.y*t.y),n=Math.atan2(t.y,t.x),o=n/Math.sin(this.s0),e=2*(Math.atan(Math.pow(this.ro0/a,1/this.n)*Math.tan(this.s0/2+this.s45))-this.s45),i=Math.asin(Math.cos(this.ad)*Math.sin(e)-Math.sin(this.ad)*Math.cos(e)*Math.cos(o)),s=Math.asin(Math.cos(e)*Math.sin(o)/Math.cos(i)),t.x=this.long0-s/this.alfa,r=i,h=0;var c=0;do t.y=2*(Math.atan(Math.pow(this.k,-1/this.alfa)*Math.pow(Math.tan(i/2+this.s45),1/this.alfa)*Math.pow((1+this.e*Math.sin(r))/(1-this.e*Math.sin(r)),this.e/2))-this.s45),1e-10>Math.abs(r-t.y)&&(h=1),r=t.y,c+=1;while(0==h&&15>c);return c>=15?(Proj4js.reportError("PHI3Z-CONV:Latitude failed to converge after 15 iterations"),null):t}},Proj4js.Proj.somerc={init:function(){var t=this.lat0;this.lambda0=this.long0;var i=Math.sin(t),s=this.a,e=this.rf,o=1/e,n=2*o-Math.pow(o,2),a=this.e=Math.sqrt(n);this.R=this.k0*s*Math.sqrt(1-n)/(1-n*Math.pow(i,2)),this.alpha=Math.sqrt(1+n/(1-n)*Math.pow(Math.cos(t),4)),this.b0=Math.asin(i/this.alpha),this.K=Math.log(Math.tan(Math.PI/4+this.b0/2))-this.alpha*Math.log(Math.tan(Math.PI/4+t/2))+this.alpha*a/2*Math.log((1+a*i)/(1-a*i))},forward:function(t){var i=Math.log(Math.tan(Math.PI/4-t.y/2)),s=this.e/2*Math.log((1+this.e*Math.sin(t.y))/(1-this.e*Math.sin(t.y))),e=-this.alpha*(i+s)+this.K,o=2*(Math.atan(Math.exp(e))-Math.PI/4),n=this.alpha*(t.x-this.lambda0),a=Math.atan(Math.sin(n)/(Math.sin(this.b0)*Math.tan(o)+Math.cos(this.b0)*Math.cos(n))),r=Math.asin(Math.cos(this.b0)*Math.sin(o)-Math.sin(this.b0)*Math.cos(o)*Math.cos(n));return t.y=this.R/2*Math.log((1+Math.sin(r))/(1-Math.sin(r)))+this.y0,t.x=this.R*a+this.x0,t},inverse:function(t){for(var i=t.x-this.x0,s=t.y-this.y0,e=i/this.R,o=2*(Math.atan(Math.exp(s/this.R))-Math.PI/4),n=Math.asin(Math.cos(this.b0)*Math.sin(o)+Math.sin(this.b0)*Math.cos(o)*Math.cos(e)),a=Math.atan(Math.sin(e)/(Math.cos(this.b0)*Math.cos(e)-Math.sin(this.b0)*Math.tan(o))),r=this.lambda0+a/this.alpha,h=0,l=n,c=-1e3,m=0;Math.abs(l-c)>1e-7;){if(++m>20)return Proj4js.reportError("omercFwdInfinity"),void 0;h=1/this.alpha*(Math.log(Math.tan(Math.PI/4+n/2))-this.K)+this.e*Math.log(Math.tan(Math.PI/4+Math.asin(this.e*Math.sin(l))/2)),c=l,l=2*Math.atan(Math.exp(h))-Math.PI/2}return t.x=r,t.y=l,t}},Proj4js.Proj.stere={ssfn_:function(t,i,s){return i*=s,Math.tan(.5*(Proj4js.common.HALF_PI+t))*Math.pow((1-i)/(1+i),.5*s)},TOL:1e-8,NITER:8,CONV:1e-10,S_POLE:0,N_POLE:1,OBLIQ:2,EQUIT:3,init:function(){this.phits=this.lat_ts?this.lat_ts:Proj4js.common.HALF_PI;var t=Math.abs(this.lat0);if(this.mode=Math.abs(t)-Proj4js.common.HALF_PIthis.lat0?this.S_POLE:this.N_POLE:t>Proj4js.common.EPSLN?this.OBLIQ:this.EQUIT,this.phits=Math.abs(this.phits),this.es){var i;switch(this.mode){case this.N_POLE:case this.S_POLE:Math.abs(this.phits-Proj4js.common.HALF_PI)=Proj4js.common.EPSLN?Math.cos(this.phits)/Math.tan(Proj4js.common.FORTPI-.5*this.phits):2*this.k0}},forward:function(t){var i=t.x;i=Proj4js.common.adjust_lon(i-this.long0);var s,e,o=t.y;if(this.sphere){var n,a,r,h;switch(n=Math.sin(o),a=Math.cos(o),r=Math.cos(i),h=Math.sin(i),this.mode){case this.EQUIT:e=1+a*r,Proj4js.common.EPSLN>=e&&Proj4js.reportError("stere:forward:Equit"),e=this.akm1/e,s=e*a*h,e*=n;break;case this.OBLIQ:e=1+this.sinph0*n+this.cosph0*a*r,Proj4js.common.EPSLN>=e&&Proj4js.reportError("stere:forward:Obliq"),e=this.akm1/e,s=e*a*h,e*=this.cosph0*n-this.sinph0*a*r;break;case this.N_POLE:r=-r,o=-o;case this.S_POLE:Math.abs(o-Proj4js.common.HALF_PI)=l;l++)r*=n,h+=this.A[l]*r;for(var c,m,u=h,d=a,p=1,_=0,f=0,P=0,l=1;6>=l;l++)c=p*u-_*d,m=_*u+p*d,p=c,_=m,f=f+this.B_re[l]*p-this.B_im[l]*_,P=P+this.B_im[l]*p+this.B_re[l]*_;return t.x=P*this.a+this.x0,t.y=f*this.a+this.y0,t},inverse:function(t){for(var i,s,e=t.x,o=t.y,n=e-this.x0,a=o-this.y0,r=a/this.a,h=n/this.a,l=1,c=0,m=0,u=0,d=1;6>=d;d++)i=l*r-c*h,s=c*r+l*h,l=i,c=s,m=m+this.C_re[d]*l-this.C_im[d]*c,u=u+this.C_im[d]*l+this.C_re[d]*c;for(var p=0;this.iterations>p;p++){for(var _,f,P=m,y=u,g=r,L=h,d=2;6>=d;d++)_=P*m-y*u,f=y*m+P*u,P=_,y=f,g+=(d-1)*(this.B_re[d]*P-this.B_im[d]*y),L+=(d-1)*(this.B_im[d]*P+this.B_re[d]*y);P=1,y=0;for(var v=this.B_re[1],j=this.B_im[1],d=2;6>=d;d++)_=P*m-y*u,f=y*m+P*u,P=_,y=f,v+=d*(this.B_re[d]*P-this.B_im[d]*y),j+=d*(this.B_im[d]*P+this.B_re[d]*y);var M=v*v+j*j;m=(g*v+L*j)/M,u=(L*v-g*j)/M}for(var S=m,b=u,x=1,E=0,d=1;9>=d;d++)x*=S,E+=this.D[d]*x;var C=this.lat0+1e5*E*Proj4js.common.SEC_TO_RAD,w=this.long0+b;return t.x=w,t.y=C,t}},Proj4js.Proj.mill={init:function(){},forward:function(t){var i=t.x,s=t.y,e=Proj4js.common.adjust_lon(i-this.long0),o=this.x0+this.a*e,n=this.y0+1.25*this.a*Math.log(Math.tan(Proj4js.common.PI/4+s/2.5));return t.x=o,t.y=n,t},inverse:function(t){t.x-=this.x0,t.y-=this.y0;var i=Proj4js.common.adjust_lon(this.long0+t.x/this.a),s=2.5*(Math.atan(Math.exp(.8*t.y/this.a))-Proj4js.common.PI/4);return t.x=i,t.y=s,t}},Proj4js.Proj.gnom={init:function(){this.sin_p14=Math.sin(this.lat0),this.cos_p14=Math.cos(this.lat0),this.infinity_dist=1e3*this.a,this.rc=1},forward:function(t){var i,s,e,o,n,a,r,h,l=t.x,c=t.y;return e=Proj4js.common.adjust_lon(l-this.long0),i=Math.sin(c),s=Math.cos(c),o=Math.cos(e),a=this.sin_p14*i+this.cos_p14*s*o,n=1,a>0||Math.abs(a)<=Proj4js.common.EPSLN?(r=this.x0+this.a*n*s*Math.sin(e)/a,h=this.y0+this.a*n*(this.cos_p14*i-this.sin_p14*s*o)/a):(Proj4js.reportError("orthoFwdPointError"),r=this.x0+this.infinity_dist*s*Math.sin(e),h=this.y0+this.infinity_dist*(this.cos_p14*i-this.sin_p14*s*o)),t.x=r,t.y=h,t},inverse:function(t){var i,s,e,o,n,a;return t.x=(t.x-this.x0)/this.a,t.y=(t.y-this.y0)/this.a,t.x/=this.k0,t.y/=this.k0,(i=Math.sqrt(t.x*t.x+t.y*t.y))?(o=Math.atan2(i,this.rc),s=Math.sin(o),e=Math.cos(o),a=Proj4js.common.asinz(e*this.sin_p14+t.y*s*this.cos_p14/i),n=Math.atan2(t.x*s,i*this.cos_p14*e-t.y*this.sin_p14*s),n=Proj4js.common.adjust_lon(this.long0+n)):(a=this.phic0,n=0),t.x=n,t.y=a,t}},Proj4js.Proj.sinu={init:function(){this.sphere?(this.n=1,this.m=0,this.es=0,this.C_y=Math.sqrt((this.m+1)/this.n),this.C_x=this.C_y/(this.m+1)):this.en=Proj4js.common.pj_enfn(this.es)},forward:function(t){var i,s,e=t.x,o=t.y;if(e=Proj4js.common.adjust_lon(e-this.long0),this.sphere){if(this.m)for(var n=this.n*Math.sin(o),a=Proj4js.common.MAX_ITER;a;--a){var r=(this.m*o+Math.sin(o)-n)/(this.m+Math.cos(o));if(o-=r,Math.abs(r)o?(o=Math.sin(i),s=this.long0+t.x*Math.sqrt(1-this.es*o*o)/(this.a*Math.cos(i)),e=Proj4js.common.adjust_lon(s)):o-Proj4js.common.EPSLN=0?this.y0+Proj4js.common.PI*this.R*Math.tan(.5*a):this.y0+Proj4js.common.PI*this.R*-Math.tan(.5*a));var r=.5*Math.abs(Proj4js.common.PI/n-n/Proj4js.common.PI),h=r*r,l=Math.sin(a),c=Math.cos(a),m=c/(l+c-1),u=m*m,d=m*(2/l-1),p=d*d,_=Proj4js.common.PI*this.R*(r*(m-p)+Math.sqrt(h*(m-p)*(m-p)-(p+h)*(u-p)))/(p+h);return 0>n&&(_=-_),i=this.x0+_,_=Math.abs(_/(Proj4js.common.PI*this.R)),s=o>=0?this.y0+Proj4js.common.PI*this.R*Math.sqrt(1-_*_-2*r*_):this.y0-Proj4js.common.PI*this.R*Math.sqrt(1-_*_-2*r*_),t.x=i,t.y=s,t},inverse:function(t){var i,s,e,o,n,a,r,h,l,c,m,u,d;return t.x-=this.x0,t.y-=this.y0,m=Proj4js.common.PI*this.R,e=t.x/m,o=t.y/m,n=e*e+o*o,a=-Math.abs(o)*(1+n),r=a-2*o*o+e*e,h=-2*a+1+2*o*o+n*n,d=o*o/h+(2*r*r*r/h/h/h-9*a*r/h/h)/27,l=(a-r*r/3/h)/h,c=2*Math.sqrt(-l/3),m=3*d/l/c,Math.abs(m)>1&&(m=m>=0?1:-1),u=Math.acos(m)/3,s=t.y>=0?(-c*Math.cos(u+Proj4js.common.PI/3)-r/3/h)*Proj4js.common.PI:-(-c*Math.cos(u+Proj4js.common.PI/3)-r/3/h)*Proj4js.common.PI,Math.abs(e)0&&(e=2*Math.atan(o*Proj4js.common.srat(this.e*Math.sin(t.y),-.5*this.e))-Proj4js.common.HALF_PI,!(i>Math.abs(e-t.y)));--n)t.y=e;return n?(t.x=s,t.y=e,t):(Proj4js.reportError("gauss:inverse:convergence failed"),null)}},Proj4js.Proj.omerc={init:function(){this.mode||(this.mode=0),this.lon1||(this.lon1=0,this.mode=1),this.lon2||(this.lon2=0),this.lat2||(this.lat2=0);var t=this.b/this.a,i=1-Math.pow(t,2);Math.sqrt(i),this.sin_p20=Math.sin(this.lat0),this.cos_p20=Math.cos(this.lat0),this.con=1-this.es*this.sin_p20*this.sin_p20,this.com=Math.sqrt(1-i),this.bl=Math.sqrt(1+this.es*Math.pow(this.cos_p20,4)/(1-i)),this.al=this.a*this.bl*this.k0*this.com/this.con,Math.abs(this.lat0)0?this.lat0>=0?this.d+Math.sqrt(this.d*this.d-1):this.d-Math.sqrt(this.d*this.d-1):this.d,this.el=this.f*Math.pow(this.ts,this.bl)),0!=this.mode?(this.g=.5*(this.f-1/this.f),this.gama=Proj4js.common.asinz(Math.sin(this.alpha)/this.d),this.longc=this.longc-Proj4js.common.asinz(this.g*Math.tan(this.gama))/this.bl,this.con=Math.abs(this.lat0),this.con>Proj4js.common.EPSLN&&Math.abs(this.con-Proj4js.common.HALF_PI)>Proj4js.common.EPSLN?(this.singam=Math.sin(this.gama),this.cosgam=Math.cos(this.gama),this.sinaz=Math.sin(this.alpha),this.cosaz=Math.cos(this.alpha),this.u=this.lat0>=0?this.al/this.bl*Math.atan(Math.sqrt(this.d*this.d-1)/this.cosaz):-(this.al/this.bl)*Math.atan(Math.sqrt(this.d*this.d-1)/this.cosaz)):Proj4js.reportError("omerc:Init:DataError")):(this.sinphi=Math.sin(this.at1),this.ts1=Proj4js.common.tsfnz(this.e,this.lat1,this.sinphi),this.sinphi=Math.sin(this.lat2),this.ts2=Proj4js.common.tsfnz(this.e,this.lat2,this.sinphi),this.h=Math.pow(this.ts1,this.bl),this.l=Math.pow(this.ts2,this.bl),this.f=this.el/this.h,this.g=.5*(this.f-1/this.f),this.j=(this.el*this.el-this.l*this.h)/(this.el*this.el+this.l*this.h),this.p=(this.l-this.h)/(this.l+this.h),this.dlon=this.lon1-this.lon2,this.dlon<-Proj4js.common.PI&&(this.lon2=this.lon2-2*Proj4js.common.PI),this.dlon>Proj4js.common.PI&&(this.lon2=this.lon2+2*Proj4js.common.PI),this.dlon=this.lon1-this.lon2,this.longc=.5*(this.lon1+this.lon2)-Math.atan(this.j*Math.tan(.5*this.bl*this.dlon)/this.p)/this.bl,this.dlon=Proj4js.common.adjust_lon(this.lon1-this.longc),this.gama=Math.atan(Math.sin(this.bl*this.dlon)/this.g),this.alpha=Proj4js.common.asinz(this.d*Math.sin(this.gama)),Math.abs(this.lat1-this.lat2)<=Proj4js.common.EPSLN?Proj4js.reportError("omercInitDataError"):this.con=Math.abs(this.lat1),this.con<=Proj4js.common.EPSLN||Math.abs(this.con-Proj4js.common.HALF_PI)<=Proj4js.common.EPSLN?Proj4js.reportError("omercInitDataError"):Math.abs(Math.abs(this.lat0)-Proj4js.common.HALF_PI)<=Proj4js.common.EPSLN&&Proj4js.reportError("omercInitDataError"),this.singam=Math.sin(this.gam),this.cosgam=Math.cos(this.gam),this.sinaz=Math.sin(this.alpha),this.cosaz=Math.cos(this.alpha),this.u=this.lat0>=0?this.al/this.bl*Math.atan(Math.sqrt(this.d*this.d-1)/this.cosaz):-(this.al/this.bl)*Math.atan(Math.sqrt(this.d*this.d-1)/this.cosaz))},forward:function(t){var i,s,e,o,n,a,r,h,l,c,m,u=t.x,d=t.y;i=Math.sin(d),c=Proj4js.common.adjust_lon(u-this.longc),a=Math.sin(this.bl*c),Math.abs(Math.abs(d)-Proj4js.common.HALF_PI)>Proj4js.common.EPSLN?(m=Proj4js.common.tsfnz(this.e,d,i),o=this.el/Math.pow(m,this.bl),l=.5*(o-1/o),s=.5*(o+1/o),r=(l*this.singam-a*this.cosgam)/s,e=Math.cos(this.bl*c),1e-7>Math.abs(e)?n=this.al*this.bl*c:(n=this.al*Math.atan((l*this.cosgam+a*this.singam)/e)/this.bl,0>e&&(n+=Proj4js.common.PI*this.al/this.bl))):(r=d>=0?this.singam:-this.singam,n=this.al*d/this.bl),Math.abs(Math.abs(r)-1)<=Proj4js.common.EPSLN&&Proj4js.reportError("omercFwdInfinity"),h=.5*this.al*Math.log((1-r)/(1+r))/this.bl,n-=this.u;var p=this.x0+h*this.cosaz+n*this.sinaz,_=this.y0+n*this.cosaz-h*this.sinaz;return t.x=p,t.y=_,t},inverse:function(t){var i,s,e,o,n,a,r,h,l,c,m,u,d;return t.x-=this.x0,t.y-=this.y0,d=0,o=t.x*this.cosaz-t.y*this.sinaz,n=t.y*this.cosaz+t.x*this.sinaz,n+=this.u,a=Math.exp(-this.bl*o/this.al),r=.5*(a-1/a),s=.5*(a+1/a),l=Math.sin(this.bl*n/this.al),c=(l*this.cosgam+r*this.singam)/s,Math.abs(Math.abs(c)-1)<=Proj4js.common.EPSLN?(m=this.longc,u=c>=0?Proj4js.common.HALF_PI:-Proj4js.common.HALF_PI):(e=1/this.bl,h=Math.pow(this.el/Math.sqrt((1+c)/(1-c)),e),u=Proj4js.common.phi2z(this.e,h),i=this.longc-Math.atan2(r*this.cosgam-l*this.singam,e)/this.bl,m=Proj4js.common.adjust_lon(i)),t.x=m,t.y=u,t}},Proj4js.Proj.lcc={init:function(){if(this.lat2||(this.lat2=this.lat0),this.k0||(this.k0=1),Math.abs(this.lat1+this.lat2)Proj4js.common.EPSLN?Math.log(e/r)/Math.log(o/h):i,this.f0=e/(this.ns*Math.pow(o,this.ns)),this.rh=this.a*this.f0*Math.pow(l,this.ns),this.title||(this.title="Lambert Conformal Conic")},forward:function(t){var i=t.x,s=t.y;if(!(90>=s&&s>=-90&&180>=i&&i>=-180))return Proj4js.reportError("lcc:forward: llInputOutOfRange: "+i+" : "+s),null;var e,o,n=Math.abs(Math.abs(s)-Proj4js.common.HALF_PI);if(n>Proj4js.common.EPSLN)e=Proj4js.common.tsfnz(this.e,s,Math.sin(s)),o=this.a*this.f0*Math.pow(e,this.ns);else{if(n=s*this.ns,0>=n)return Proj4js.reportError("lcc:forward: No Projection"),null;o=0}var a=this.ns*Proj4js.common.adjust_lon(i-this.long0);return t.x=this.k0*o*Math.sin(a)+this.x0,t.y=this.k0*(this.rh-o*Math.cos(a))+this.y0,t},inverse:function(t){var i,s,e,o,n,a=(t.x-this.x0)/this.k0,r=this.rh-(t.y-this.y0)/this.k0;this.ns>0?(i=Math.sqrt(a*a+r*r),s=1):(i=-Math.sqrt(a*a+r*r),s=-1);var h=0;if(0!=i&&(h=Math.atan2(s*a,s*r)),0!=i||this.ns>0){if(s=1/this.ns,e=Math.pow(i/(this.a*this.f0),s),o=Proj4js.common.phi2z(this.e,e),-9999==o)return null}else o=-Proj4js.common.HALF_PI;return n=Proj4js.common.adjust_lon(h/this.ns+this.long0),t.x=n,t.y=o,t}},Proj4js.Proj.laea={S_POLE:1,N_POLE:2,EQUIT:3,OBLIQ:4,init:function(){var t=Math.abs(this.lat0);if(this.mode=Math.abs(t-Proj4js.common.HALF_PI)this.lat0?this.S_POLE:this.N_POLE:Math.abs(t)0){var i;switch(this.qp=Proj4js.common.qsfnz(this.e,1),this.mmf=.5/(1-this.es),this.apa=this.authset(this.es),this.mode){case this.N_POLE:case this.S_POLE:this.dd=1;break;case this.EQUIT:this.rq=Math.sqrt(.5*this.qp),this.dd=1/this.rq,this.xmf=1,this.ymf=.5*this.qp;break;case this.OBLIQ:this.rq=Math.sqrt(.5*this.qp),i=Math.sin(this.lat0),this.sinb1=Proj4js.common.qsfnz(this.e,i)/this.qp,this.cosb1=Math.sqrt(1-this.sinb1*this.sinb1),this.dd=Math.cos(this.lat0)/(Math.sqrt(1-this.es*i*i)*this.rq*this.cosb1),this.ymf=(this.xmf=this.rq)/this.dd,this.xmf*=this.dd}}else this.mode==this.OBLIQ&&(this.sinph0=Math.sin(this.lat0),this.cosph0=Math.cos(this.lat0))},forward:function(t){var i,s,e=t.x,o=t.y;if(e=Proj4js.common.adjust_lon(e-this.long0),this.sphere){var n,a,r;switch(r=Math.sin(o),a=Math.cos(o),n=Math.cos(e),this.mode){case this.OBLIQ:case this.EQUIT:if(s=this.mode==this.EQUIT?1+a*n:1+this.sinph0*r+this.cosph0*a*n,Proj4js.common.EPSLN>=s)return Proj4js.reportError("laea:fwd:y less than eps"),null;s=Math.sqrt(2/s),i=s*a*Math.sin(e),s*=this.mode==this.EQUIT?r:this.cosph0*r-this.sinph0*a*n;break;case this.N_POLE:n=-n;case this.S_POLE:if(Math.abs(o+this.phi0)=0?(i=(u=Math.sqrt(l))*h,s=n*(this.mode==this.S_POLE?u:-u)):i=s=0}}return t.x=this.a*i+this.x0,t.y=this.a*s+this.y0,t},inverse:function(t){t.x-=this.x0,t.y-=this.y0;var i,s,e=t.x/this.a,o=t.y/this.a;if(this.sphere){var n,a=0,r=0;if(n=Math.sqrt(e*e+o*o),s=.5*n,s>1)return Proj4js.reportError("laea:Inv:DataError"),null;switch(s=2*Math.asin(s),(this.mode==this.OBLIQ||this.mode==this.EQUIT)&&(r=Math.sin(s),a=Math.cos(s)),this.mode){case this.EQUIT:s=Math.abs(n)<=Proj4js.common.EPSLN?0:Math.asin(o*r/n),e*=r,o=a*n;break;case this.OBLIQ:s=Math.abs(n)<=Proj4js.common.EPSLN?this.phi0:Math.asin(a*this.sinph0+o*r*this.cosph0/n),e*=r*this.cosph0,o=(a-Math.sin(s)*this.sinph0)*n;break;case this.N_POLE:o=-o,s=Proj4js.common.HALF_PI-s;break;case this.S_POLE:s-=Proj4js.common.HALF_PI}i=0!=o||this.mode!=this.EQUIT&&this.mode!=this.OBLIQ?Math.atan2(e,o):0}else{var h,l,c,m,u=0;switch(this.mode){case this.EQUIT:case this.OBLIQ:if(e/=this.dd,o*=this.dd,m=Math.sqrt(e*e+o*o),Proj4js.common.EPSLN>m)return t.x=0,t.y=this.phi0,t;l=2*Math.asin(.5*m/this.rq),h=Math.cos(l),e*=l=Math.sin(l),this.mode==this.OBLIQ?(u=h*this.sinb1+o*l*this.cosb1/m,c=this.qp*u,o=m*this.cosb1*h-o*this.sinb1*l):(u=o*l/m,c=this.qp*u,o=m*h);break;case this.N_POLE:o=-o;case this.S_POLE:if(c=e*e+o*o,!c)return t.x=0,t.y=this.phi0,t;u=1-c/this.qp,this.mode==this.S_POLE&&(u=-u)}i=Math.atan2(e,o),s=this.authlat(Math.asin(u),this.apa)}return t.x=Proj4js.common.adjust_lon(this.long0+i),t.y=s,t},P00:.3333333333333333,P01:.17222222222222222,P02:.10257936507936508,P10:.06388888888888888,P11:.0664021164021164,P20:.016415012942191543,authset:function(t){var i,s=[];return s[0]=t*this.P00,i=t*t,s[0]+=i*this.P01,s[1]=i*this.P10,i*=t,s[0]+=i*this.P02,s[1]+=i*this.P11,s[2]=i*this.P20,s},authlat:function(t,i){var s=t+t;return t+i[0]*Math.sin(s)+i[1]*Math.sin(s+s)+i[2]*Math.sin(s+s+s)}},Proj4js.Proj.aeqd={init:function(){this.sin_p12=Math.sin(this.lat0),this.cos_p12=Math.cos(this.lat0)},forward:function(t){var i=t.x;t.y;var s,e=Math.sin(t.y),o=Math.cos(t.y),n=Proj4js.common.adjust_lon(i-this.long0),a=Math.cos(n),r=this.sin_p12*e+this.cos_p12*o*a;if(Math.abs(Math.abs(r)-1)r)return Proj4js.reportError("aeqd:Fwd:PointError"),void 0}else{var h=Math.acos(r);s=h/Math.sin(h)}return t.x=this.x0+this.a*s*o*Math.sin(n),t.y=this.y0+this.a*s*(this.cos_p12*e-this.sin_p12*o*a),t},inverse:function(t){t.x-=this.x0,t.y-=this.y0;var i=Math.sqrt(t.x*t.x+t.y*t.y);if(i>2*Proj4js.common.HALF_PI*this.a)return Proj4js.reportError("aeqdInvDataError"),void 0;var s,e=i/this.a,o=Math.sin(e),n=Math.cos(e),a=this.long0;if(Math.abs(i)<=Proj4js.common.EPSLN)s=this.lat0;else{s=Proj4js.common.asinz(n*this.sin_p12+t.y*o*this.cos_p12/i);var r=Math.abs(this.lat0)-Proj4js.common.HALF_PI;Math.abs(r)<=Proj4js.common.EPSLN?a=this.lat0>=0?Proj4js.common.adjust_lon(this.long0+Math.atan2(t.x,-t.y)):Proj4js.common.adjust_lon(this.long0-Math.atan2(-t.x,t.y)):(r=n-this.sin_p12*Math.sin(s),Math.abs(r)=50&&Proj4js.reportError("moll:Fwd:IterationError")}o/=2,Proj4js.common.PI/2-Math.abs(s).999999999999&&(s=.999999999999);var i=Math.asin(s),e=Proj4js.common.adjust_lon(this.long0+t.x/(.900316316158*this.a*Math.cos(i)));-Proj4js.common.PI>e&&(e=-Proj4js.common.PI),e>Proj4js.common.PI&&(e=Proj4js.common.PI),s=(2*i+Math.sin(2*i))/Proj4js.common.PI,Math.abs(s)>1&&(s=1);var o=Math.asin(s);return t.x=e,t.y=o,t}},function(t,i,s){var e,o;typeof exports!=s+""?e=exports:(o=t.L,e={},e.noConflict=function(){return t.L=o,this},t.L=e),e.version="0.5.1",e.Util={extend:function(t){var i,s,e,o,n=Array.prototype.slice.call(arguments,1);for(s=0,e=n.length;e>s;s++){o=n[s]||{};for(i in o)o.hasOwnProperty(i)&&(t[i]=o[i])}return t},bind:function(t,i){var s=arguments.length>2?Array.prototype.slice.call(arguments,2):null;return function(){return t.apply(i,s||arguments)}},stamp:function(){var t=0,i="_leaflet_id";return function(s){return s[i]=s[i]||++t,s[i]}}(),limitExecByInterval:function(t,i,e){var o,n;return function a(){var r=arguments;return o?(n=!0,s):(o=!0,setTimeout(function(){o=!1,n&&(a.apply(e,r),n=!1)},i),t.apply(e,r),s)}},falseFn:function(){return!1},formatNum:function(t,i){var s=Math.pow(10,i||5);return Math.round(t*s)/s},splitWords:function(t){return t.replace(/^\s+|\s+$/g,"").split(/\s+/)},setOptions:function(t,i){return t.options=e.extend({},t.options,i),t.options},getParamString:function(t,i){var s=[];for(var e in t)t.hasOwnProperty(e)&&s.push(e+"="+t[e]);return(i&&-1!==i.indexOf("?")?"&":"?")+s.join("&")},template:function(t,i){return t.replace(/\{ *([\w_]+) *\}/g,function(t,s){var e=i[s];if(!i.hasOwnProperty(s))throw Error("No value provided for variable "+t);return e})},isArray:function(t){return"[object Array]"===Object.prototype.toString.call(t)},emptyImageUrl:"data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs="},function(){function i(i){var s,e,o=["webkit","moz","o","ms"];for(s=0;o.length>s&&!e;s++)e=t[o[s]+i];return e}function o(i){var s=+new Date,e=Math.max(0,16-(s-n));return n=s+e,t.setTimeout(i,e)}var n=0,a=t.requestAnimationFrame||i("RequestAnimationFrame")||o,r=t.cancelAnimationFrame||i("CancelAnimationFrame")||i("CancelRequestAnimationFrame")||function(i){t.clearTimeout(i)};e.Util.requestAnimFrame=function(i,n,r,h){return i=e.bind(i,n),r&&a===o?(i(),s):a.call(t,i,h)},e.Util.cancelAnimFrame=function(i){i&&r.call(t,i)}}(),e.extend=e.Util.extend,e.bind=e.Util.bind,e.stamp=e.Util.stamp,e.setOptions=e.Util.setOptions,e.Class=function(){},e.Class.extend=function(t){var i=function(){this.initialize&&this.initialize.apply(this,arguments),this._initHooks&&this.callInitHooks()},s=function(){};s.prototype=this.prototype;var o=new s;o.constructor=i,i.prototype=o;for(var n in this)this.hasOwnProperty(n)&&"prototype"!==n&&(i[n]=this[n]);t.statics&&(e.extend(i,t.statics),delete t.statics),t.includes&&(e.Util.extend.apply(null,[o].concat(t.includes)),delete t.includes),t.options&&o.options&&(t.options=e.extend({},o.options,t.options)),e.extend(o,t),o._initHooks=[];var a=this;return o.callInitHooks=function(){if(!this._initHooksCalled){a.prototype.callInitHooks&&a.prototype.callInitHooks.call(this),this._initHooksCalled=!0;for(var t=0,i=o._initHooks.length;i>t;t++)o._initHooks[t].call(this)}},i},e.Class.include=function(t){e.extend(this.prototype,t)},e.Class.mergeOptions=function(t){e.extend(this.prototype.options,t)},e.Class.addInitHook=function(t){var i=Array.prototype.slice.call(arguments,1),s="function"==typeof t?t:function(){this[t].apply(this,i)};this.prototype._initHooks=this.prototype._initHooks||[],this.prototype._initHooks.push(s)};var n="_leaflet_events";e.Mixin={},e.Mixin.Events={addEventListener:function(t,i,s){var o,a,r,h=this[n]=this[n]||{};if("object"==typeof t){for(o in t)t.hasOwnProperty(o)&&this.addEventListener(o,t[o],i);return this}for(t=e.Util.splitWords(t),a=0,r=t.length;r>a;a++)h[t[a]]=h[t[a]]||[],h[t[a]].push({action:i,context:s||this});return this},hasEventListeners:function(t){return n in this&&t in this[n]&&this[n][t].length>0},removeEventListener:function(t,i,s){var o,a,r,h,l,c=this[n];if("object"==typeof t){for(o in t)t.hasOwnProperty(o)&&this.removeEventListener(o,t[o],i);return this}for(t=e.Util.splitWords(t),a=0,r=t.length;r>a;a++)if(this.hasEventListeners(t[a]))for(h=c[t[a]],l=h.length-1;l>=0;l--)i&&h[l].action!==i||s&&h[l].context!==s||h.splice(l,1);return this},fireEvent:function(t,i){if(!this.hasEventListeners(t))return this;for(var s=e.extend({type:t,target:this},i),o=this[n][t].slice(),a=0,r=o.length;r>a;a++)o[a].action.call(o[a].context||this,s);return this}},e.Mixin.Events.on=e.Mixin.Events.addEventListener,e.Mixin.Events.off=e.Mixin.Events.removeEventListener,e.Mixin.Events.fire=e.Mixin.Events.fireEvent,function(){var o=!!t.ActiveXObject,n=o&&!t.XMLHttpRequest,a=o&&!i.querySelector,r=navigator.userAgent.toLowerCase(),h=-1!==r.indexOf("webkit"),l=-1!==r.indexOf("chrome"),c=-1!==r.indexOf("android"),m=-1!==r.search("android [23]"),u=typeof orientation!=s+"",d=t.navigator&&t.navigator.msPointerEnabled&&t.navigator.msMaxTouchPoints,p="devicePixelRatio"in t&&t.devicePixelRatio>1||"matchMedia"in t&&t.matchMedia("(min-resolution:144dpi)")&&t.matchMedia("(min-resolution:144dpi)").matches,_=i.documentElement,f=o&&"transition"in _.style,P="WebKitCSSMatrix"in t&&"m11"in new t.WebKitCSSMatrix,y="MozPerspective"in _.style,g="OTransition"in _.style,L=!t.L_DISABLE_3D&&(f||P||y||g),v=!t.L_NO_TOUCH&&function(){var t="ontouchstart";if(d||t in _)return!0;var s=i.createElement("div"),e=!1;return s.setAttribute?(s.setAttribute(t,"return;"),"function"==typeof s[t]&&(e=!0),s.removeAttribute(t),s=null,e):!1}();e.Browser={ie:o,ie6:n,ie7:a,webkit:h,android:c,android23:m,chrome:l,ie3d:f,webkit3d:P,gecko3d:y,opera3d:g,any3d:L,mobile:u,mobileWebkit:u&&h,mobileWebkit3d:u&&P,mobileOpera:u&&t.opera,touch:v,msTouch:d,retina:p}}(),e.Point=function(t,i,s){this.x=s?Math.round(t):t,this.y=s?Math.round(i):i},e.Point.prototype={clone:function(){return new e.Point(this.x,this.y)},add:function(t){return this.clone()._add(e.point(t))},_add:function(t){return this.x+=t.x,this.y+=t.y,this},subtract:function(t){return this.clone()._subtract(e.point(t))},_subtract:function(t){return this.x-=t.x,this.y-=t.y,this},divideBy:function(t){return this.clone()._divideBy(t)},_divideBy:function(t){return this.x/=t,this.y/=t,this},multiplyBy:function(t){return this.clone()._multiplyBy(t)},_multiplyBy:function(t){return this.x*=t,this.y*=t,this},round:function(){return this.clone()._round()},_round:function(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this},floor:function(){return this.clone()._floor()},_floor:function(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this},distanceTo:function(t){t=e.point(t);var i=t.x-this.x,s=t.y-this.y;return Math.sqrt(i*i+s*s)},equals:function(t){return t.x===this.x&&t.y===this.y},toString:function(){return"Point("+e.Util.formatNum(this.x)+", "+e.Util.formatNum(this.y)+")"}},e.point=function(t,i,s){return t instanceof e.Point?t:e.Util.isArray(t)?new e.Point(t[0],t[1]):isNaN(t)?t:new e.Point(t,i,s)},e.Bounds=function(t,i){if(t)for(var s=i?[t,i]:t,e=0,o=s.length;o>e;e++)this.extend(s[e])},e.Bounds.prototype={extend:function(t){return t=e.point(t),this.min||this.max?(this.min.x=Math.min(t.x,this.min.x),this.max.x=Math.max(t.x,this.max.x),this.min.y=Math.min(t.y,this.min.y),this.max.y=Math.max(t.y,this.max.y)):(this.min=t.clone(),this.max=t.clone()),this},getCenter:function(t){return new e.Point((this.min.x+this.max.x)/2,(this.min.y+this.max.y)/2,t)},getBottomLeft:function(){return new e.Point(this.min.x,this.max.y)},getTopRight:function(){return new e.Point(this.max.x,this.min.y)},getSize:function(){return this.max.subtract(this.min)},contains:function(t){var i,s;return t="number"==typeof t[0]||t instanceof e.Point?e.point(t):e.bounds(t),t instanceof e.Bounds?(i=t.min,s=t.max):i=s=t,i.x>=this.min.x&&s.x<=this.max.x&&i.y>=this.min.y&&s.y<=this.max.y},intersects:function(t){t=e.bounds(t);var i=this.min,s=this.max,o=t.min,n=t.max,a=n.x>=i.x&&o.x<=s.x,r=n.y>=i.y&&o.y<=s.y;return a&&r},isValid:function(){return!(!this.min||!this.max)}},e.bounds=function(t,i){return!t||t instanceof e.Bounds?t:new e.Bounds(t,i)},e.Transformation=function(t,i,s,e){this._a=t,this._b=i,this._c=s,this._d=e},e.Transformation.prototype={transform:function(t,i){return this._transform(t.clone(),i)},_transform:function(t,i){return i=i||1,t.x=i*(this._a*t.x+this._b),t.y=i*(this._c*t.y+this._d),t},untransform:function(t,i){return i=i||1,new e.Point((t.x/i-this._b)/this._a,(t.y/i-this._d)/this._c)}},e.DomUtil={get:function(t){return"string"==typeof t?i.getElementById(t):t},getStyle:function(t,s){var e=t.style[s];if(!e&&t.currentStyle&&(e=t.currentStyle[s]),(!e||"auto"===e)&&i.defaultView){var o=i.defaultView.getComputedStyle(t,null);e=o?o[s]:null}return"auto"===e?null:e},getViewportOffset:function(t){var s,o=0,n=0,a=t,r=i.body,h=e.Browser.ie7;do{if(o+=a.offsetTop||0,n+=a.offsetLeft||0,o+=parseInt(e.DomUtil.getStyle(a,"borderTopWidth"),10)||0,n+=parseInt(e.DomUtil.getStyle(a,"borderLeftWidth"),10)||0,s=e.DomUtil.getStyle(a,"position"),a.offsetParent===r&&"absolute"===s)break;if("fixed"===s){o+=r.scrollTop||0,n+=r.scrollLeft||0;break}a=a.offsetParent}while(a);a=t;do{if(a===r)break;o-=a.scrollTop||0,n-=a.scrollLeft||0,e.DomUtil.documentIsLtr()||!e.Browser.webkit&&!h||(n+=a.scrollWidth-a.clientWidth,h&&"hidden"!==e.DomUtil.getStyle(a,"overflow-y")&&"hidden"!==e.DomUtil.getStyle(a,"overflow")&&(n+=17)),a=a.parentNode}while(a);return new e.Point(n,o)},documentIsLtr:function(){return e.DomUtil._docIsLtrCached||(e.DomUtil._docIsLtrCached=!0,e.DomUtil._docIsLtr="ltr"===e.DomUtil.getStyle(i.body,"direction")),e.DomUtil._docIsLtr},create:function(t,s,e){var o=i.createElement(t);return o.className=s,e&&e.appendChild(o),o},disableTextSelection:function(){i.selection&&i.selection.empty&&i.selection.empty(),this._onselectstart||(this._onselectstart=i.onselectstart||null,i.onselectstart=e.Util.falseFn)},enableTextSelection:function(){i.onselectstart===e.Util.falseFn&&(i.onselectstart=this._onselectstart,this._onselectstart=null)},hasClass:function(t,i){return t.className.length>0&&RegExp("(^|\\s)"+i+"(\\s|$)").test(t.className)},addClass:function(t,i){e.DomUtil.hasClass(t,i)||(t.className+=(t.className?" ":"")+i)},removeClass:function(t,i){function s(t,s){return s===i?"":t}t.className=t.className.replace(/(\S+)\s*/g,s).replace(/(^\s+|\s+$)/,"")},setOpacity:function(t,i){if("opacity"in t.style)t.style.opacity=i;else if("filter"in t.style){var s=!1,e="DXImageTransform.Microsoft.Alpha";try{s=t.filters.item(e)}catch(o){}i=Math.round(100*i),s?(s.Enabled=100!==i,s.Opacity=i):t.style.filter+=" progid:"+e+"(opacity="+i+")"}},testProp:function(t){for(var s=i.documentElement.style,e=0;t.length>e;e++)if(t[e]in s)return t[e];return!1},getTranslateString:function(t){var i=e.Browser.webkit3d,s="translate"+(i?"3d":"")+"(",o=(i?",0":"")+")";return s+t.x+"px,"+t.y+"px"+o},getScaleString:function(t,i){var s=e.DomUtil.getTranslateString(i.add(i.multiplyBy(-1*t))),o=" scale("+t+") ";return s+o},setPosition:function(t,i,s){t._leaflet_pos=i,!s&&e.Browser.any3d?(t.style[e.DomUtil.TRANSFORM]=e.DomUtil.getTranslateString(i),e.Browser.mobileWebkit3d&&(t.style.WebkitBackfaceVisibility="hidden")):(t.style.left=i.x+"px",t.style.top=i.y+"px")},getPosition:function(t){return t._leaflet_pos}},e.DomUtil.TRANSFORM=e.DomUtil.testProp(["transform","WebkitTransform","OTransform","MozTransform","msTransform"]),e.DomUtil.TRANSITION=e.DomUtil.testProp(["webkitTransition","transition","OTransition","MozTransition","msTransition"]),e.DomUtil.TRANSITION_END="webkitTransition"===e.DomUtil.TRANSITION||"OTransition"===e.DomUtil.TRANSITION?e.DomUtil.TRANSITION+"End":"transitionend",e.LatLng=function(t,i){var s=parseFloat(t),e=parseFloat(i);if(isNaN(s)||isNaN(e))throw Error("Invalid LatLng object: ("+t+", "+i+")");this.lat=s,this.lng=e},e.extend(e.LatLng,{DEG_TO_RAD:Math.PI/180,RAD_TO_DEG:180/Math.PI,MAX_MARGIN:1e-9}),e.LatLng.prototype={equals:function(t){if(!t)return!1;t=e.latLng(t);var i=Math.max(Math.abs(this.lat-t.lat),Math.abs(this.lng-t.lng));return e.LatLng.MAX_MARGIN>=i},toString:function(t){return"LatLng("+e.Util.formatNum(this.lat,t)+", "+e.Util.formatNum(this.lng,t)+")"},distanceTo:function(t){t=e.latLng(t);var i=6378137,s=e.LatLng.DEG_TO_RAD,o=(t.lat-this.lat)*s,n=(t.lng-this.lng)*s,a=this.lat*s,r=t.lat*s,h=Math.sin(o/2),l=Math.sin(n/2),c=h*h+l*l*Math.cos(a)*Math.cos(r);return 2*i*Math.atan2(Math.sqrt(c),Math.sqrt(1-c))},wrap:function(t,i){var s=this.lng;return t=t||-180,i=i||180,s=(s+i)%(i-t)+(t>s||s===i?i:t),new e.LatLng(this.lat,s)}},e.latLng=function(t,i){return t instanceof e.LatLng?t:e.Util.isArray(t)?new e.LatLng(t[0],t[1]):isNaN(t)?t:new e.LatLng(t,i)},e.LatLngBounds=function(t,i){if(t)for(var s=i?[t,i]:t,e=0,o=s.length;o>e;e++)this.extend(s[e])},e.LatLngBounds.prototype={extend:function(t){return t="number"==typeof t[0]||"string"==typeof t[0]||t instanceof e.LatLng?e.latLng(t):e.latLngBounds(t),t instanceof e.LatLng?this._southWest||this._northEast?(this._southWest.lat=Math.min(t.lat,this._southWest.lat),this._southWest.lng=Math.min(t.lng,this._southWest.lng),this._northEast.lat=Math.max(t.lat,this._northEast.lat),this._northEast.lng=Math.max(t.lng,this._northEast.lng)):(this._southWest=new e.LatLng(t.lat,t.lng),this._northEast=new e.LatLng(t.lat,t.lng)):t instanceof e.LatLngBounds&&(this.extend(t._southWest),this.extend(t._northEast)),this},pad:function(t){var i=this._southWest,s=this._northEast,o=Math.abs(i.lat-s.lat)*t,n=Math.abs(i.lng-s.lng)*t;return new e.LatLngBounds(new e.LatLng(i.lat-o,i.lng-n),new e.LatLng(s.lat+o,s.lng+n))},getCenter:function(){return new e.LatLng((this._southWest.lat+this._northEast.lat)/2,(this._southWest.lng+this._northEast.lng)/2)},getSouthWest:function(){return this._southWest},getNorthEast:function(){return this._northEast},getNorthWest:function(){return new e.LatLng(this._northEast.lat,this._southWest.lng)},getSouthEast:function(){return new e.LatLng(this._southWest.lat,this._northEast.lng)},contains:function(t){t="number"==typeof t[0]||t instanceof e.LatLng?e.latLng(t):e.latLngBounds(t);var i,s,o=this._southWest,n=this._northEast;return t instanceof e.LatLngBounds?(i=t.getSouthWest(),s=t.getNorthEast()):i=s=t,i.lat>=o.lat&&s.lat<=n.lat&&i.lng>=o.lng&&s.lng<=n.lng},intersects:function(t){t=e.latLngBounds(t);var i=this._southWest,s=this._northEast,o=t.getSouthWest(),n=t.getNorthEast(),a=n.lat>=i.lat&&o.lat<=s.lat,r=n.lng>=i.lng&&o.lng<=s.lng;return a&&r},toBBoxString:function(){var t=this._southWest,i=this._northEast;return[t.lng,t.lat,i.lng,i.lat].join(",")},equals:function(t){return t?(t=e.latLngBounds(t),this._southWest.equals(t.getSouthWest())&&this._northEast.equals(t.getNorthEast())):!1},isValid:function(){return!(!this._southWest||!this._northEast)}},e.latLngBounds=function(t,i){return!t||t instanceof e.LatLngBounds?t:new e.LatLngBounds(t,i)},e.Projection={},e.Projection.SphericalMercator={MAX_LATITUDE:85.0511287798,project:function(t){var i=e.LatLng.DEG_TO_RAD,s=this.MAX_LATITUDE,o=Math.max(Math.min(s,t.lat),-s),n=t.lng*i,a=o*i;return a=Math.log(Math.tan(Math.PI/4+a/2)),new e.Point(n,a)},unproject:function(t){var i=e.LatLng.RAD_TO_DEG,s=t.x*i,o=(2*Math.atan(Math.exp(t.y))-Math.PI/2)*i;return new e.LatLng(o,s)}},e.Projection.LonLat={project:function(t){return new e.Point(t.lng,t.lat)},unproject:function(t){return new e.LatLng(t.y,t.x)}},e.CRS={latLngToPoint:function(t,i){var s=this.projection.project(t),e=this.scale(i);return this.transformation._transform(s,e)},pointToLatLng:function(t,i){var s=this.scale(i),e=this.transformation.untransform(t,s);return this.projection.unproject(e)},project:function(t){return this.projection.project(t)},scale:function(t){return 256*Math.pow(2,t)}},e.CRS.Simple=e.extend({},e.CRS,{projection:e.Projection.LonLat,transformation:new e.Transformation(1,0,-1,0),scale:function(t){return Math.pow(2,t)}}),e.CRS.EPSG3857=e.extend({},e.CRS,{code:"EPSG:3857",projection:e.Projection.SphericalMercator,transformation:new e.Transformation(.5/Math.PI,.5,-.5/Math.PI,.5),project:function(t){var i=this.projection.project(t),s=6378137;return i.multiplyBy(s)}}),e.CRS.EPSG900913=e.extend({},e.CRS.EPSG3857,{code:"EPSG:900913"}),e.CRS.EPSG4326=e.extend({},e.CRS,{code:"EPSG:4326",projection:e.Projection.LonLat,transformation:new e.Transformation(1/360,.5,-1/360,.5)}),e.Map=e.Class.extend({includes:e.Mixin.Events,options:{crs:e.CRS.EPSG3857,fadeAnimation:e.DomUtil.TRANSITION&&!e.Browser.android23,trackResize:!0,markerZoomAnimation:e.DomUtil.TRANSITION&&e.Browser.any3d},initialize:function(t,i){i=e.setOptions(this,i),this._initContainer(t),this._initLayout(),this.callInitHooks(),this._initEvents(),i.maxBounds&&this.setMaxBounds(i.maxBounds),i.center&&i.zoom!==s&&this.setView(e.latLng(i.center),i.zoom,!0),this._initLayers(i.layers)},setView:function(t,i){return this._resetView(e.latLng(t),this._limitZoom(i)),this},setZoom:function(t){return this.setView(this.getCenter(),t)},zoomIn:function(t){return this.setZoom(this._zoom+(t||1))},zoomOut:function(t){return this.setZoom(this._zoom-(t||1))},fitBounds:function(t){var i=this.getBoundsZoom(t);return this.setView(e.latLngBounds(t).getCenter(),i)},fitWorld:function(){var t=new e.LatLng(-60,-170),i=new e.LatLng(85,179);return this.fitBounds(new e.LatLngBounds(t,i))},panTo:function(t){return this.setView(t,this._zoom)},panBy:function(t){return this.fire("movestart"),this._rawPanBy(e.point(t)),this.fire("move"),this.fire("moveend")},setMaxBounds:function(t){if(t=e.latLngBounds(t),this.options.maxBounds=t,!t)return this._boundsMinZoom=null,this;var i=this.getBoundsZoom(t,!0);return this._boundsMinZoom=i,this._loaded&&(i>this._zoom?this.setView(t.getCenter(),i):this.panInsideBounds(t)),this},panInsideBounds:function(t){t=e.latLngBounds(t);var i=this.getBounds(),s=this.project(i.getSouthWest()),o=this.project(i.getNorthEast()),n=this.project(t.getSouthWest()),a=this.project(t.getNorthEast()),r=0,h=0;return o.ya.x&&(r=a.x-o.x),s.y>n.y&&(h=n.y-s.y),s.x=r);return m&&i?null:i?r:r-1},getSize:function(){return(!this._size||this._sizeChanged)&&(this._size=new e.Point(this._container.clientWidth,this._container.clientHeight),this._sizeChanged=!1),this._size.clone()},getPixelBounds:function(){var t=this._getTopLeftPoint();return new e.Bounds(t,t.add(this.getSize()))},getPixelOrigin:function(){return this._initialTopLeftPoint},getPanes:function(){return this._panes},getContainer:function(){return this._container},getZoomScale:function(t){var i=this.options.crs;return i.scale(t)/i.scale(this._zoom)},getScaleZoom:function(t){return this._zoom+Math.log(t)/Math.LN2},project:function(t,i){return i=i===s?this._zoom:i,this.options.crs.latLngToPoint(e.latLng(t),i)},unproject:function(t,i){return i=i===s?this._zoom:i,this.options.crs.pointToLatLng(e.point(t),i)},layerPointToLatLng:function(t){var i=e.point(t).add(this._initialTopLeftPoint);return this.unproject(i)},latLngToLayerPoint:function(t){var i=this.project(e.latLng(t))._round();return i._subtract(this._initialTopLeftPoint)},containerPointToLayerPoint:function(t){return e.point(t).subtract(this._getMapPanePos())},layerPointToContainerPoint:function(t){return e.point(t).add(this._getMapPanePos())},containerPointToLatLng:function(t){var i=this.containerPointToLayerPoint(e.point(t));return this.layerPointToLatLng(i)},latLngToContainerPoint:function(t){return this.layerPointToContainerPoint(this.latLngToLayerPoint(e.latLng(t)))},mouseEventToContainerPoint:function(t){return e.DomEvent.getMousePosition(t,this._container)},mouseEventToLayerPoint:function(t){return this.containerPointToLayerPoint(this.mouseEventToContainerPoint(t))},mouseEventToLatLng:function(t){return this.layerPointToLatLng(this.mouseEventToLayerPoint(t))},_initContainer:function(t){var i=this._container=e.DomUtil.get(t);if(i._leaflet)throw Error("Map container is already initialized.");i._leaflet=!0},_initLayout:function(){var t=this._container;e.DomUtil.addClass(t,"leaflet-container"),e.Browser.touch&&e.DomUtil.addClass(t,"leaflet-touch"),this.options.fadeAnimation&&e.DomUtil.addClass(t,"leaflet-fade-anim");var i=e.DomUtil.getStyle(t,"position");"absolute"!==i&&"relative"!==i&&"fixed"!==i&&(t.style.position="relative"),this._initPanes(),this._initControlPos&&this._initControlPos()},_initPanes:function(){var t=this._panes={};this._mapPane=t.mapPane=this._createPane("leaflet-map-pane",this._container),this._tilePane=t.tilePane=this._createPane("leaflet-tile-pane",this._mapPane),t.objectsPane=this._createPane("leaflet-objects-pane",this._mapPane),t.shadowPane=this._createPane("leaflet-shadow-pane"),t.overlayPane=this._createPane("leaflet-overlay-pane"),t.markerPane=this._createPane("leaflet-marker-pane"),t.popupPane=this._createPane("leaflet-popup-pane");var i=" leaflet-zoom-hide";this.options.markerZoomAnimation||(e.DomUtil.addClass(t.markerPane,i),e.DomUtil.addClass(t.shadowPane,i),e.DomUtil.addClass(t.popupPane,i))},_createPane:function(t,i){return e.DomUtil.create("div",t,i||this._panes.objectsPane)},_initLayers:function(t){t=t?e.Util.isArray(t)?t:[t]:[],this._layers={},this._zoomBoundLayers={},this._tileLayersNum=0;var i,s;for(i=0,s=t.length;s>i;i++)this.addLayer(t[i])},_resetView:function(t,i,s,o){var n=this._zoom!==i;o||(this.fire("movestart"),n&&this.fire("zoomstart")),this._zoom=i,this._initialTopLeftPoint=this._getNewTopLeftPoint(t),s?this._initialTopLeftPoint._add(this._getMapPanePos()):e.DomUtil.setPosition(this._mapPane,new e.Point(0,0)),this._tileLayersToLoad=this._tileLayersNum;var a=!this._loaded;this._loaded=!0,this.fire("viewreset",{hard:!s}),this.fire("move"),(n||o)&&this.fire("zoomend"),this.fire("moveend",{hard:!s}),a&&this.fire("load")},_rawPanBy:function(t){e.DomUtil.setPosition(this._mapPane,this._getMapPanePos().subtract(t))},_updateZoomLevels:function(){var t,i=1/0,e=-1/0;for(t in this._zoomBoundLayers)if(this._zoomBoundLayers.hasOwnProperty(t)){var o=this._zoomBoundLayers[t];isNaN(o.options.minZoom)||(i=Math.min(i,o.options.minZoom)),isNaN(o.options.maxZoom)||(e=Math.max(e,o.options.maxZoom))}t===s?this._layersMaxZoom=this._layersMinZoom=s:(this._layersMaxZoom=e,this._layersMinZoom=i)},_initEvents:function(){if(e.DomEvent){e.DomEvent.on(this._container,"click",this._onMouseClick,this);var i,s,o=["dblclick","mousedown","mouseup","mouseenter","mouseleave","mousemove","contextmenu"];for(i=0,s=o.length;s>i;i++)e.DomEvent.on(this._container,o[i],this._fireMouseEvent,this);this.options.trackResize&&e.DomEvent.on(t,"resize",this._onResize,this)}},_onResize:function(){e.Util.cancelAnimFrame(this._resizeRequest),this._resizeRequest=e.Util.requestAnimFrame(this.invalidateSize,this,!1,this._container)},_onMouseClick:function(t){!this._loaded||this.dragging&&this.dragging.moved()||(this.fire("preclick"),this._fireMouseEvent(t))},_fireMouseEvent:function(t){if(this._loaded){var i=t.type;if(i="mouseenter"===i?"mouseover":"mouseleave"===i?"mouseout":i,this.hasEventListeners(i)){"contextmenu"===i&&e.DomEvent.preventDefault(t);var s=this.mouseEventToContainerPoint(t),o=this.containerPointToLayerPoint(s),n=this.layerPointToLatLng(o);this.fire(i,{latlng:n,layerPoint:o,containerPoint:s,originalEvent:t})}}},_onTileLayerLoad:function(){this._tileLayersToLoad--,this._tileLayersNum&&!this._tileLayersToLoad&&this._tileBg&&(clearTimeout(this._clearTileBgTimer),this._clearTileBgTimer=setTimeout(e.bind(this._clearTileBg,this),500))},whenReady:function(t,i){return this._loaded?t.call(i||this,this):this.on("load",t,i),this},_getMapPanePos:function(){return e.DomUtil.getPosition(this._mapPane)},_getTopLeftPoint:function(){if(!this._loaded)throw Error("Set map center and zoom first.");return this._initialTopLeftPoint.subtract(this._getMapPanePos())},_getNewTopLeftPoint:function(t,i){var s=this.getSize()._divideBy(2);return this.project(t,i)._subtract(s)._round()},_latLngToNewLayerPoint:function(t,i,s){var e=this._getNewTopLeftPoint(s,i).add(this._getMapPanePos());return this.project(t,i)._subtract(e)},_getCenterLayerPoint:function(){return this.containerPointToLayerPoint(this.getSize()._divideBy(2))},_getCenterOffset:function(t){return this.latLngToLayerPoint(t).subtract(this._getCenterLayerPoint())},_limitZoom:function(t){var i=this.getMinZoom(),s=this.getMaxZoom();return Math.max(i,Math.min(s,t))}}),e.map=function(t,i){return new e.Map(t,i)},e.Projection.Mercator={MAX_LATITUDE:85.0840591556,R_MINOR:6356752.3142,R_MAJOR:6378137,project:function(t){var i=e.LatLng.DEG_TO_RAD,s=this.MAX_LATITUDE,o=Math.max(Math.min(s,t.lat),-s),n=this.R_MAJOR,a=this.R_MINOR,r=t.lng*i*n,h=o*i,l=a/n,c=Math.sqrt(1-l*l),m=c*Math.sin(h);m=Math.pow((1-m)/(1+m),.5*c);var u=Math.tan(.5*(.5*Math.PI-h))/m;return h=-a*Math.log(u),new e.Point(r,h)},unproject:function(t){for(var i,s=e.LatLng.RAD_TO_DEG,o=this.R_MAJOR,n=this.R_MINOR,a=t.x*s/o,r=n/o,h=Math.sqrt(1-r*r),l=Math.exp(-t.y/n),c=Math.PI/2-2*Math.atan(l),m=15,u=1e-7,d=m,p=.1;Math.abs(p)>u&&--d>0;)i=h*Math.sin(c),p=Math.PI/2-2*Math.atan(l*Math.pow((1-i)/(1+i),.5*h))-c,c+=p;return new e.LatLng(c*s,a)}},e.CRS.EPSG3395=e.extend({},e.CRS,{code:"EPSG:3395",projection:e.Projection.Mercator,transformation:function(){var t=e.Projection.Mercator,i=t.R_MAJOR,s=t.R_MINOR;return new e.Transformation(.5/(Math.PI*i),.5,-.5/(Math.PI*s),.5)}()}),e.TileLayer=e.Class.extend({includes:e.Mixin.Events,options:{minZoom:0,maxZoom:18,tileSize:256,subdomains:"abc",errorTileUrl:"",attribution:"",zoomOffset:0,opacity:1,unloadInvisibleTiles:e.Browser.mobile,updateWhenIdle:e.Browser.mobile},initialize:function(t,i){i=e.setOptions(this,i),i.detectRetina&&e.Browser.retina&&i.maxZoom>0&&(i.tileSize=Math.floor(i.tileSize/2),i.zoomOffset++,i.minZoom>0&&i.minZoom--,this.options.maxZoom--),this._url=t;var s=this.options.subdomains;"string"==typeof s&&(this.options.subdomains=s.split(""))},onAdd:function(t){this._map=t,this._initContainer(),this._createTileProto(),t.on({viewreset:this._resetCallback,moveend:this._update},this),this.options.updateWhenIdle||(this._limitedUpdate=e.Util.limitExecByInterval(this._update,150,this),t.on("move",this._limitedUpdate,this)),this._reset(),this._update()},addTo:function(t){return t.addLayer(this),this},onRemove:function(t){this._container.parentNode.removeChild(this._container),t.off({viewreset:this._resetCallback,moveend:this._update},this),this.options.updateWhenIdle||t.off("move",this._limitedUpdate,this),this._container=null,this._map=null},bringToFront:function(){var t=this._map._panes.tilePane;return this._container&&(t.appendChild(this._container),this._setAutoZIndex(t,Math.max)),this},bringToBack:function(){var t=this._map._panes.tilePane;return this._container&&(t.insertBefore(this._container,t.firstChild),this._setAutoZIndex(t,Math.min)),this},getAttribution:function(){return this.options.attribution},setOpacity:function(t){return this.options.opacity=t,this._map&&this._updateOpacity(),this},setZIndex:function(t){return this.options.zIndex=t,this._updateZIndex(),this},setUrl:function(t,i){return this._url=t,i||this.redraw(),this},redraw:function(){return this._map&&(this._map._panes.tilePane.empty=!1,this._reset(!0),this._update()),this},_updateZIndex:function(){this._container&&this.options.zIndex!==s&&(this._container.style.zIndex=this.options.zIndex)},_setAutoZIndex:function(t,i){var s,e,o,n=t.children,a=-i(1/0,-1/0);for(e=0,o=n.length;o>e;e++)n[e]!==this._container&&(s=parseInt(n[e].style.zIndex,10),isNaN(s)||(a=i(a,s)));this.options.zIndex=this._container.style.zIndex=(isFinite(a)?a:0)+i(1,-1)},_updateOpacity:function(){e.DomUtil.setOpacity(this._container,this.options.opacity);var t,i=this._tiles;if(e.Browser.webkit)for(t in i)i.hasOwnProperty(t)&&(i[t].style.webkitTransform+=" translate(0,0)")},_initContainer:function(){var t=this._map._panes.tilePane;(!this._container||t.empty)&&(this._container=e.DomUtil.create("div","leaflet-layer"),this._updateZIndex(),t.appendChild(this._container),1>this.options.opacity&&this._updateOpacity())},_resetCallback:function(t){this._reset(t.hard)},_reset:function(t){var i=this._tiles;for(var s in i)i.hasOwnProperty(s)&&this.fire("tileunload",{tile:i[s]});this._tiles={},this._tilesToLoad=0,this.options.reuseTiles&&(this._unusedTiles=[]),t&&this._container&&(this._container.innerHTML=""),this._initContainer()},_update:function(){if(this._map){var t=this._map.getPixelBounds(),i=this._map.getZoom(),s=this.options.tileSize;if(!(i>this.options.maxZoom||this.options.minZoom>i)){var o=new e.Point(Math.floor(t.min.x/s),Math.floor(t.min.y/s)),n=new e.Point(Math.floor(t.max.x/s),Math.floor(t.max.y/s)),a=new e.Bounds(o,n);this._addTilesFromCenterOut(a),(this.options.unloadInvisibleTiles||this.options.reuseTiles)&&this._removeOtherTiles(a)}}},_addTilesFromCenterOut:function(t){var s,o,n,a=[],r=t.getCenter();for(s=t.min.y;t.max.y>=s;s++)for(o=t.min.x;t.max.x>=o;o++)n=new e.Point(o,s),this._tileShouldBeLoaded(n)&&a.push(n);var h=a.length;if(0!==h){a.sort(function(t,i){return t.distanceTo(r)-i.distanceTo(r)});var l=i.createDocumentFragment();for(this._tilesToLoad||this.fire("loading"),this._tilesToLoad+=h,o=0;h>o;o++)this._addTile(a[o],l);this._container.appendChild(l)}},_tileShouldBeLoaded:function(t){ -if(t.x+":"+t.y in this._tiles)return!1;if(!this.options.continuousWorld){var i=this._getWrapTileNum();if(this.options.noWrap&&(0>t.x||t.x>=i)||0>t.y||t.y>=i)return!1}return!0},_removeOtherTiles:function(t){var i,s,e,o;for(o in this._tiles)this._tiles.hasOwnProperty(o)&&(i=o.split(":"),s=parseInt(i[0],10),e=parseInt(i[1],10),(t.min.x>s||s>t.max.x||t.min.y>e||e>t.max.y)&&this._removeTile(o))},_removeTile:function(t){var i=this._tiles[t];this.fire("tileunload",{tile:i,url:i.src}),this.options.reuseTiles?(e.DomUtil.removeClass(i,"leaflet-tile-loaded"),this._unusedTiles.push(i)):i.parentNode===this._container&&this._container.removeChild(i),e.Browser.android||(i.src=e.Util.emptyImageUrl),delete this._tiles[t]},_addTile:function(t,i){var s=this._getTilePos(t),o=this._getTile();e.DomUtil.setPosition(o,s,e.Browser.chrome||e.Browser.android23),this._tiles[t.x+":"+t.y]=o,this._loadTile(o,t),o.parentNode!==this._container&&i.appendChild(o)},_getZoomForUrl:function(){var t=this.options,i=this._map.getZoom();return t.zoomReverse&&(i=t.maxZoom-i),i+t.zoomOffset},_getTilePos:function(t){var i=this._map.getPixelOrigin(),s=this.options.tileSize;return t.multiplyBy(s).subtract(i)},getTileUrl:function(t){return this._adjustTilePoint(t),e.Util.template(this._url,e.extend({s:this._getSubdomain(t),z:this._getZoomForUrl(),x:t.x,y:t.y},this.options))},_getWrapTileNum:function(){return Math.pow(2,this._getZoomForUrl())},_adjustTilePoint:function(t){var i=this._getWrapTileNum();this.options.continuousWorld||this.options.noWrap||(t.x=(t.x%i+i)%i),this.options.tms&&(t.y=i-t.y-1)},_getSubdomain:function(t){var i=(t.x+t.y)%this.options.subdomains.length;return this.options.subdomains[i]},_createTileProto:function(){var t=this._tileImg=e.DomUtil.create("img","leaflet-tile");t.style.width=t.style.height=this.options.tileSize+"px",t.galleryimg="no"},_getTile:function(){if(this.options.reuseTiles&&this._unusedTiles.length>0){var t=this._unusedTiles.pop();return this._resetTile(t),t}return this._createTile()},_resetTile:function(){},_createTile:function(){var t=this._tileImg.cloneNode(!1);return t.onselectstart=t.onmousemove=e.Util.falseFn,t},_loadTile:function(t,i){t._layer=this,t.onload=this._tileOnLoad,t.onerror=this._tileOnError,t.src=this.getTileUrl(i)},_tileLoaded:function(){this._tilesToLoad--,this._tilesToLoad||this.fire("load")},_tileOnLoad:function(){var t=this._layer;this.src!==e.Util.emptyImageUrl&&(e.DomUtil.addClass(this,"leaflet-tile-loaded"),t.fire("tileload",{tile:this,url:this.src})),t._tileLoaded()},_tileOnError:function(){var t=this._layer;t.fire("tileerror",{tile:this,url:this.src});var i=t.options.errorTileUrl;i&&(this.src=i),t._tileLoaded()}}),e.tileLayer=function(t,i){return new e.TileLayer(t,i)},e.TileLayer.WMS=e.TileLayer.extend({defaultWmsParams:{service:"WMS",request:"GetMap",version:"1.1.1",layers:"",styles:"",format:"image/jpeg",transparent:!1},initialize:function(t,i){this._url=t;var s=e.extend({},this.defaultWmsParams);s.width=s.height=i.detectRetina&&e.Browser.retina?2*this.options.tileSize:this.options.tileSize;for(var o in i)this.options.hasOwnProperty(o)||(s[o]=i[o]);this.wmsParams=s,e.setOptions(this,i)},onAdd:function(t){var i=parseFloat(this.wmsParams.version)>=1.3?"crs":"srs";this.wmsParams[i]=t.options.crs.code,e.TileLayer.prototype.onAdd.call(this,t)},getTileUrl:function(t,i){this._adjustTilePoint(t);var s=this._map,o=s.options.crs,n=this.options.tileSize,a=t.multiplyBy(n),r=a.add(new e.Point(n,n)),h=o.project(s.unproject(a,i)),l=o.project(s.unproject(r,i)),c=[h.x,l.y,l.x,h.y].join(","),m=e.Util.template(this._url,{s:this._getSubdomain(t)});return m+e.Util.getParamString(this.wmsParams,m)+"&bbox="+c},setParams:function(t,i){return e.extend(this.wmsParams,t),i||this.redraw(),this}}),e.tileLayer.wms=function(t,i){return new e.TileLayer.WMS(t,i)},e.TileLayer.Canvas=e.TileLayer.extend({options:{async:!1},initialize:function(t){e.setOptions(this,t)},redraw:function(){var t=this._tiles;for(var i in t)t.hasOwnProperty(i)&&this._redrawTile(t[i])},_redrawTile:function(t){this.drawTile(t,t._tilePoint,this._map._zoom)},_createTileProto:function(){var t=this._canvasProto=e.DomUtil.create("canvas","leaflet-tile");t.width=t.height=this.options.tileSize},_createTile:function(){var t=this._canvasProto.cloneNode(!1);return t.onselectstart=t.onmousemove=e.Util.falseFn,t},_loadTile:function(t,i){t._layer=this,t._tilePoint=i,this._redrawTile(t),this.options.async||this.tileDrawn(t)},drawTile:function(){},tileDrawn:function(t){this._tileOnLoad.call(t)}}),e.tileLayer.canvas=function(t){return new e.TileLayer.Canvas(t)},e.ImageOverlay=e.Class.extend({includes:e.Mixin.Events,options:{opacity:1},initialize:function(t,i,s){this._url=t,this._bounds=e.latLngBounds(i),e.setOptions(this,s)},onAdd:function(t){this._map=t,this._image||this._initImage(),t._panes.overlayPane.appendChild(this._image),t.on("viewreset",this._reset,this),t.options.zoomAnimation&&e.Browser.any3d&&t.on("zoomanim",this._animateZoom,this),this._reset()},onRemove:function(t){t.getPanes().overlayPane.removeChild(this._image),t.off("viewreset",this._reset,this),t.options.zoomAnimation&&t.off("zoomanim",this._animateZoom,this)},addTo:function(t){return t.addLayer(this),this},setOpacity:function(t){return this.options.opacity=t,this._updateOpacity(),this},bringToFront:function(){return this._image&&this._map._panes.overlayPane.appendChild(this._image),this},bringToBack:function(){var t=this._map._panes.overlayPane;return this._image&&t.insertBefore(this._image,t.firstChild),this},_initImage:function(){this._image=e.DomUtil.create("img","leaflet-image-layer"),this._map.options.zoomAnimation&&e.Browser.any3d?e.DomUtil.addClass(this._image,"leaflet-zoom-animated"):e.DomUtil.addClass(this._image,"leaflet-zoom-hide"),this._updateOpacity(),e.extend(this._image,{galleryimg:"no",onselectstart:e.Util.falseFn,onmousemove:e.Util.falseFn,onload:e.bind(this._onImageLoad,this),src:this._url})},_animateZoom:function(t){var i=this._map,s=this._image,o=i.getZoomScale(t.zoom),n=this._bounds.getNorthWest(),a=this._bounds.getSouthEast(),r=i._latLngToNewLayerPoint(n,t.zoom,t.center),h=i._latLngToNewLayerPoint(a,t.zoom,t.center)._subtract(r),l=r._add(h._multiplyBy(.5*(1-1/o)));s.style[e.DomUtil.TRANSFORM]=e.DomUtil.getTranslateString(l)+" scale("+o+") "},_reset:function(){var t=this._image,i=this._map.latLngToLayerPoint(this._bounds.getNorthWest()),s=this._map.latLngToLayerPoint(this._bounds.getSouthEast())._subtract(i);e.DomUtil.setPosition(t,i),t.style.width=s.x+"px",t.style.height=s.y+"px"},_onImageLoad:function(){this.fire("load")},_updateOpacity:function(){e.DomUtil.setOpacity(this._image,this.options.opacity)}}),e.imageOverlay=function(t,i,s){return new e.ImageOverlay(t,i,s)},e.Icon=e.Class.extend({options:{className:""},initialize:function(t){e.setOptions(this,t)},createIcon:function(){return this._createIcon("icon")},createShadow:function(){return this._createIcon("shadow")},_createIcon:function(t){var i=this._getIconUrl(t);if(!i){if("icon"===t)throw Error("iconUrl not set in Icon options (see the docs).");return null}var s=this._createImg(i);return this._setIconStyles(s,t),s},_setIconStyles:function(t,i){var s,o=this.options,n=e.point(o[i+"Size"]);s="shadow"===i?e.point(o.shadowAnchor||o.iconAnchor):e.point(o.iconAnchor),!s&&n&&(s=n.divideBy(2,!0)),t.className="leaflet-marker-"+i+" "+o.className,s&&(t.style.marginLeft=-s.x+"px",t.style.marginTop=-s.y+"px"),n&&(t.style.width=n.x+"px",t.style.height=n.y+"px")},_createImg:function(t){var s;return e.Browser.ie6?(s=i.createElement("div"),s.style.filter='progid:DXImageTransform.Microsoft.AlphaImageLoader(src="'+t+'")'):(s=i.createElement("img"),s.src=t),s},_getIconUrl:function(t){return e.Browser.retina&&this.options[t+"RetinaUrl"]?this.options[t+"RetinaUrl"]:this.options[t+"Url"]}}),e.icon=function(t){return new e.Icon(t)},e.Icon.Default=e.Icon.extend({options:{iconSize:new e.Point(25,41),iconAnchor:new e.Point(12,41),popupAnchor:new e.Point(1,-34),shadowSize:new e.Point(41,41)},_getIconUrl:function(t){var i=t+"Url";if(this.options[i])return this.options[i];e.Browser.retina&&"icon"===t&&(t+="@2x");var s=e.Icon.Default.imagePath;if(!s)throw Error("Couldn't autodetect L.Icon.Default.imagePath, set it manually.");return"marker-"+t+".png"}}),e.Icon.Default.imagePath=function(){var t,s,e,o,n=i.getElementsByTagName("script"),a=/\/?leaflet[\-\._]?([\w\-\._]*)\.js\??/;for(t=0,s=n.length;s>t;t++)if(e=n[t].src,o=e.match(a))return e.split(a)[0]+""}(),e.Marker=e.Class.extend({includes:e.Mixin.Events,options:{icon:new e.Icon.Default,title:"",clickable:!0,draggable:!1,zIndexOffset:0,opacity:1,riseOnHover:!1,riseOffset:250},initialize:function(t,i){e.setOptions(this,i),this._latlng=e.latLng(t)},onAdd:function(t){this._map=t,t.on("viewreset",this.update,this),this._initIcon(),this.update(),t.options.zoomAnimation&&t.options.markerZoomAnimation&&t.on("zoomanim",this._animateZoom,this)},addTo:function(t){return t.addLayer(this),this},onRemove:function(t){this._removeIcon(),this.fire("remove"),t.off({viewreset:this.update,zoomanim:this._animateZoom},this),this._map=null},getLatLng:function(){return this._latlng},setLatLng:function(t){return this._latlng=e.latLng(t),this.update(),this.fire("move",{latlng:this._latlng})},setZIndexOffset:function(t){return this.options.zIndexOffset=t,this.update(),this},setIcon:function(t){return this._map&&this._removeIcon(),this.options.icon=t,this._map&&(this._initIcon(),this.update()),this},update:function(){if(this._icon){var t=this._map.latLngToLayerPoint(this._latlng).round();this._setPos(t)}return this},_initIcon:function(){var t=this.options,i=this._map,s=i.options.zoomAnimation&&i.options.markerZoomAnimation,o=s?"leaflet-zoom-animated":"leaflet-zoom-hide",n=!1;this._icon||(this._icon=t.icon.createIcon(),t.title&&(this._icon.title=t.title),this._initInteraction(),n=1>this.options.opacity,e.DomUtil.addClass(this._icon,o),t.riseOnHover&&e.DomEvent.on(this._icon,"mouseover",this._bringToFront,this).on(this._icon,"mouseout",this._resetZIndex,this)),this._shadow||(this._shadow=t.icon.createShadow(),this._shadow&&(e.DomUtil.addClass(this._shadow,o),n=1>this.options.opacity)),n&&this._updateOpacity();var a=this._map._panes;a.markerPane.appendChild(this._icon),this._shadow&&a.shadowPane.appendChild(this._shadow)},_removeIcon:function(){var t=this._map._panes;this.options.riseOnHover&&e.DomEvent.off(this._icon,"mouseover",this._bringToFront).off(this._icon,"mouseout",this._resetZIndex),t.markerPane.removeChild(this._icon),this._shadow&&t.shadowPane.removeChild(this._shadow),this._icon=this._shadow=null},_setPos:function(t){e.DomUtil.setPosition(this._icon,t),this._shadow&&e.DomUtil.setPosition(this._shadow,t),this._zIndex=t.y+this.options.zIndexOffset,this._resetZIndex()},_updateZIndex:function(t){this._icon.style.zIndex=this._zIndex+t},_animateZoom:function(t){var i=this._map._latLngToNewLayerPoint(this._latlng,t.zoom,t.center);this._setPos(i)},_initInteraction:function(){if(this.options.clickable){var t=this._icon,i=["dblclick","mousedown","mouseover","mouseout","contextmenu"];e.DomUtil.addClass(t,"leaflet-clickable"),e.DomEvent.on(t,"click",this._onMouseClick,this);for(var s=0;i.length>s;s++)e.DomEvent.on(t,i[s],this._fireMouseEvent,this);e.Handler.MarkerDrag&&(this.dragging=new e.Handler.MarkerDrag(this),this.options.draggable&&this.dragging.enable())}},_onMouseClick:function(t){var i=this.dragging&&this.dragging.moved();(this.hasEventListeners(t.type)||i)&&e.DomEvent.stopPropagation(t),i||(this.dragging&&this.dragging._enabled||!this._map.dragging||!this._map.dragging.moved())&&this.fire(t.type,{originalEvent:t})},_fireMouseEvent:function(t){this.fire(t.type,{originalEvent:t}),"contextmenu"===t.type&&this.hasEventListeners(t.type)&&e.DomEvent.preventDefault(t),"mousedown"!==t.type&&e.DomEvent.stopPropagation(t)},setOpacity:function(t){this.options.opacity=t,this._map&&this._updateOpacity()},_updateOpacity:function(){e.DomUtil.setOpacity(this._icon,this.options.opacity),this._shadow&&e.DomUtil.setOpacity(this._shadow,this.options.opacity)},_bringToFront:function(){this._updateZIndex(this.options.riseOffset)},_resetZIndex:function(){this._updateZIndex(0)}}),e.marker=function(t,i){return new e.Marker(t,i)},e.DivIcon=e.Icon.extend({options:{iconSize:new e.Point(12,12),className:"leaflet-div-icon"},createIcon:function(){var t=i.createElement("div"),s=this.options;return s.html&&(t.innerHTML=s.html),s.bgPos&&(t.style.backgroundPosition=-s.bgPos.x+"px "+-s.bgPos.y+"px"),this._setIconStyles(t,"icon"),t},createShadow:function(){return null}}),e.divIcon=function(t){return new e.DivIcon(t)},e.Map.mergeOptions({closePopupOnClick:!0}),e.Popup=e.Class.extend({includes:e.Mixin.Events,options:{minWidth:50,maxWidth:300,maxHeight:null,autoPan:!0,closeButton:!0,offset:new e.Point(0,6),autoPanPadding:new e.Point(5,5),className:"",zoomAnimation:!0},initialize:function(t,i){e.setOptions(this,t),this._source=i,this._animated=e.Browser.any3d&&this.options.zoomAnimation},onAdd:function(t){this._map=t,this._container||this._initLayout(),this._updateContent();var i=t.options.fadeAnimation;i&&e.DomUtil.setOpacity(this._container,0),t._panes.popupPane.appendChild(this._container),t.on("viewreset",this._updatePosition,this),this._animated&&t.on("zoomanim",this._zoomAnimation,this),t.options.closePopupOnClick&&t.on("preclick",this._close,this),this._update(),i&&e.DomUtil.setOpacity(this._container,1)},addTo:function(t){return t.addLayer(this),this},openOn:function(t){return t.openPopup(this),this},onRemove:function(t){t._panes.popupPane.removeChild(this._container),e.Util.falseFn(this._container.offsetWidth),t.off({viewreset:this._updatePosition,preclick:this._close,zoomanim:this._zoomAnimation},this),t.options.fadeAnimation&&e.DomUtil.setOpacity(this._container,0),this._map=null},setLatLng:function(t){return this._latlng=e.latLng(t),this._update(),this},setContent:function(t){return this._content=t,this._update(),this},_close:function(){var t=this._map;t&&(t._popup=null,t.removeLayer(this).fire("popupclose",{popup:this}))},_initLayout:function(){var t,i="leaflet-popup",s=i+" "+this.options.className+" leaflet-zoom-"+(this._animated?"animated":"hide"),o=this._container=e.DomUtil.create("div",s);this.options.closeButton&&(t=this._closeButton=e.DomUtil.create("a",i+"-close-button",o),t.href="#close",t.innerHTML="×",e.DomEvent.on(t,"click",this._onCloseButtonClick,this));var n=this._wrapper=e.DomUtil.create("div",i+"-content-wrapper",o);e.DomEvent.disableClickPropagation(n),this._contentNode=e.DomUtil.create("div",i+"-content",n),e.DomEvent.on(this._contentNode,"mousewheel",e.DomEvent.stopPropagation),this._tipContainer=e.DomUtil.create("div",i+"-tip-container",o),this._tip=e.DomUtil.create("div",i+"-tip",this._tipContainer)},_update:function(){this._map&&(this._container.style.visibility="hidden",this._updateContent(),this._updateLayout(),this._updatePosition(),this._container.style.visibility="",this._adjustPan())},_updateContent:function(){if(this._content){if("string"==typeof this._content)this._contentNode.innerHTML=this._content;else{for(;this._contentNode.hasChildNodes();)this._contentNode.removeChild(this._contentNode.firstChild);this._contentNode.appendChild(this._content)}this.fire("contentupdate")}},_updateLayout:function(){var t=this._contentNode,i=t.style;i.width="",i.whiteSpace="nowrap";var s=t.offsetWidth;s=Math.min(s,this.options.maxWidth),s=Math.max(s,this.options.minWidth),i.width=s+1+"px",i.whiteSpace="",i.height="";var o=t.offsetHeight,n=this.options.maxHeight,a="leaflet-popup-scrolled";n&&o>n?(i.height=n+"px",e.DomUtil.addClass(t,a)):e.DomUtil.removeClass(t,a),this._containerWidth=this._container.offsetWidth},_updatePosition:function(){if(this._map){var t=this._map.latLngToLayerPoint(this._latlng),i=this._animated,s=this.options.offset;i&&e.DomUtil.setPosition(this._container,t),this._containerBottom=-s.y-(i?0:t.y),this._containerLeft=-Math.round(this._containerWidth/2)+s.x+(i?0:t.x),this._container.style.bottom=this._containerBottom+"px",this._container.style.left=this._containerLeft+"px"}},_zoomAnimation:function(t){var i=this._map._latLngToNewLayerPoint(this._latlng,t.zoom,t.center);e.DomUtil.setPosition(this._container,i)},_adjustPan:function(){if(this.options.autoPan){var t=this._map,i=this._container.offsetHeight,s=this._containerWidth,o=new e.Point(this._containerLeft,-i-this._containerBottom);this._animated&&o._add(e.DomUtil.getPosition(this._container));var n=t.layerPointToContainerPoint(o),a=this.options.autoPanPadding,r=t.getSize(),h=0,l=0;0>n.x&&(h=n.x-a.x),n.x+s>r.x&&(h=n.x+s-r.x+a.x),0>n.y&&(l=n.y-a.y),n.y+i>r.y&&(l=n.y+i-r.y+a.y),(h||l)&&t.panBy(new e.Point(h,l))}},_onCloseButtonClick:function(t){this._close(),e.DomEvent.stop(t)}}),e.popup=function(t,i){return new e.Popup(t,i)},e.Marker.include({openPopup:function(){return this._popup&&this._map&&(this._popup.setLatLng(this._latlng),this._map.openPopup(this._popup)),this},closePopup:function(){return this._popup&&this._popup._close(),this},bindPopup:function(t,i){var s=e.point(this.options.icon.options.popupAnchor)||new e.Point(0,0);return s=s.add(e.Popup.prototype.options.offset),i&&i.offset&&(s=s.add(i.offset)),i=e.extend({offset:s},i),this._popup||this.on("click",this.openPopup,this).on("remove",this.closePopup,this).on("move",this._movePopup,this),this._popup=new e.Popup(i,this).setContent(t),this},unbindPopup:function(){return this._popup&&(this._popup=null,this.off("click",this.openPopup).off("remove",this.closePopup).off("move",this._movePopup)),this},_movePopup:function(t){this._popup.setLatLng(t.latlng)}}),e.Map.include({openPopup:function(t){return this.closePopup(),this._popup=t,this.addLayer(t).fire("popupopen",{popup:this._popup})},closePopup:function(){return this._popup&&this._popup._close(),this}}),e.LayerGroup=e.Class.extend({initialize:function(t){this._layers={};var i,s;if(t)for(i=0,s=t.length;s>i;i++)this.addLayer(t[i])},addLayer:function(t){var i=e.stamp(t);return this._layers[i]=t,this._map&&this._map.addLayer(t),this},removeLayer:function(t){var i=e.stamp(t);return delete this._layers[i],this._map&&this._map.removeLayer(t),this},clearLayers:function(){return this.eachLayer(this.removeLayer,this),this},invoke:function(t){var i,s,e=Array.prototype.slice.call(arguments,1);for(i in this._layers)this._layers.hasOwnProperty(i)&&(s=this._layers[i],s[t]&&s[t].apply(s,e));return this},onAdd:function(t){this._map=t,this.eachLayer(t.addLayer,t)},onRemove:function(t){this.eachLayer(t.removeLayer,t),this._map=null},addTo:function(t){return t.addLayer(this),this},eachLayer:function(t,i){for(var s in this._layers)this._layers.hasOwnProperty(s)&&t.call(i,this._layers[s])},setZIndex:function(t){return this.invoke("setZIndex",t)}}),e.layerGroup=function(t){return new e.LayerGroup(t)},e.FeatureGroup=e.LayerGroup.extend({includes:e.Mixin.Events,statics:{EVENTS:"click dblclick mouseover mouseout mousemove contextmenu"},addLayer:function(t){return this._layers[e.stamp(t)]?this:(t.on(e.FeatureGroup.EVENTS,this._propagateEvent,this),e.LayerGroup.prototype.addLayer.call(this,t),this._popupContent&&t.bindPopup&&t.bindPopup(this._popupContent,this._popupOptions),this.fire("layeradd",{layer:t}))},removeLayer:function(t){return t.off(e.FeatureGroup.EVENTS,this._propagateEvent,this),e.LayerGroup.prototype.removeLayer.call(this,t),this._popupContent&&this.invoke("unbindPopup"),this.fire("layerremove",{layer:t})},bindPopup:function(t,i){return this._popupContent=t,this._popupOptions=i,this.invoke("bindPopup",t,i)},setStyle:function(t){return this.invoke("setStyle",t)},bringToFront:function(){return this.invoke("bringToFront")},bringToBack:function(){return this.invoke("bringToBack")},getBounds:function(){var t=new e.LatLngBounds;return this.eachLayer(function(i){t.extend(i instanceof e.Marker?i.getLatLng():i.getBounds())}),t},_propagateEvent:function(t){t.layer=t.target,t.target=this,this.fire(t.type,t)}}),e.featureGroup=function(t){return new e.FeatureGroup(t)},e.Path=e.Class.extend({includes:[e.Mixin.Events],statics:{CLIP_PADDING:e.Browser.mobile?Math.max(0,Math.min(.5,(1280/Math.max(t.innerWidth,t.innerHeight)-1)/2)):.5},options:{stroke:!0,color:"#0033ff",dashArray:null,weight:5,opacity:.5,fill:!1,fillColor:null,fillOpacity:.2,clickable:!0},initialize:function(t){e.setOptions(this,t)},onAdd:function(t){this._map=t,this._container||(this._initElements(),this._initEvents()),this.projectLatlngs(),this._updatePath(),this._container&&this._map._pathRoot.appendChild(this._container),this.fire("add"),t.on({viewreset:this.projectLatlngs,moveend:this._updatePath},this)},addTo:function(t){return t.addLayer(this),this},onRemove:function(t){t._pathRoot.removeChild(this._container),this.fire("remove"),this._map=null,e.Browser.vml&&(this._container=null,this._stroke=null,this._fill=null),t.off({viewreset:this.projectLatlngs,moveend:this._updatePath},this)},projectLatlngs:function(){},setStyle:function(t){return e.setOptions(this,t),this._container&&this._updateStyle(),this},redraw:function(){return this._map&&(this.projectLatlngs(),this._updatePath()),this}}),e.Map.include({_updatePathViewport:function(){var t=e.Path.CLIP_PADDING,i=this.getSize(),s=e.DomUtil.getPosition(this._mapPane),o=s.multiplyBy(-1)._subtract(i.multiplyBy(t)._round()),n=o.add(i.multiplyBy(1+2*t)._round());this._pathViewport=new e.Bounds(o,n)}}),e.Path.SVG_NS="http://www.w3.org/2000/svg",e.Browser.svg=!(!i.createElementNS||!i.createElementNS(e.Path.SVG_NS,"svg").createSVGRect),e.Path=e.Path.extend({statics:{SVG:e.Browser.svg},bringToFront:function(){var t=this._map._pathRoot,i=this._container;return i&&t.lastChild!==i&&t.appendChild(i),this},bringToBack:function(){var t=this._map._pathRoot,i=this._container,s=t.firstChild;return i&&s!==i&&t.insertBefore(i,s),this},getPathString:function(){},_createElement:function(t){return i.createElementNS(e.Path.SVG_NS,t)},_initElements:function(){this._map._initPathRoot(),this._initPath(),this._initStyle()},_initPath:function(){this._container=this._createElement("g"),this._path=this._createElement("path"),this._container.appendChild(this._path)},_initStyle:function(){this.options.stroke&&(this._path.setAttribute("stroke-linejoin","round"),this._path.setAttribute("stroke-linecap","round")),this.options.fill&&this._path.setAttribute("fill-rule","evenodd"),this._updateStyle()},_updateStyle:function(){this.options.stroke?(this._path.setAttribute("stroke",this.options.color),this._path.setAttribute("stroke-opacity",this.options.opacity),this._path.setAttribute("stroke-width",this.options.weight),this.options.dashArray?this._path.setAttribute("stroke-dasharray",this.options.dashArray):this._path.removeAttribute("stroke-dasharray")):this._path.setAttribute("stroke","none"),this.options.fill?(this._path.setAttribute("fill",this.options.fillColor||this.options.color),this._path.setAttribute("fill-opacity",this.options.fillOpacity)):this._path.setAttribute("fill","none")},_updatePath:function(){var t=this.getPathString();t||(t="M0 0"),this._path.setAttribute("d",t)},_initEvents:function(){if(this.options.clickable){(e.Browser.svg||!e.Browser.vml)&&this._path.setAttribute("class","leaflet-clickable"),e.DomEvent.on(this._container,"click",this._onMouseClick,this);for(var t=["dblclick","mousedown","mouseover","mouseout","mousemove","contextmenu"],i=0;t.length>i;i++)e.DomEvent.on(this._container,t[i],this._fireMouseEvent,this)}},_onMouseClick:function(t){this._map.dragging&&this._map.dragging.moved()||this._fireMouseEvent(t)},_fireMouseEvent:function(t){if(this.hasEventListeners(t.type)){var i=this._map,s=i.mouseEventToContainerPoint(t),o=i.containerPointToLayerPoint(s),n=i.layerPointToLatLng(o);this.fire(t.type,{latlng:n,layerPoint:o,containerPoint:s,originalEvent:t}),"contextmenu"===t.type&&e.DomEvent.preventDefault(t),"mousemove"!==t.type&&e.DomEvent.stopPropagation(t)}}}),e.Map.include({_initPathRoot:function(){this._pathRoot||(this._pathRoot=e.Path.prototype._createElement("svg"),this._panes.overlayPane.appendChild(this._pathRoot),this.options.zoomAnimation&&e.Browser.any3d?(this._pathRoot.setAttribute("class"," leaflet-zoom-animated"),this.on({zoomanim:this._animatePathZoom,zoomend:this._endPathZoom})):this._pathRoot.setAttribute("class"," leaflet-zoom-hide"),this.on("moveend",this._updateSvgViewport),this._updateSvgViewport())},_animatePathZoom:function(t){var i=this.getZoomScale(t.zoom),s=this._getCenterOffset(t.center)._multiplyBy(-i)._add(this._pathViewport.min);this._pathRoot.style[e.DomUtil.TRANSFORM]=e.DomUtil.getTranslateString(s)+" scale("+i+") ",this._pathZooming=!0},_endPathZoom:function(){this._pathZooming=!1},_updateSvgViewport:function(){if(!this._pathZooming){this._updatePathViewport();var t=this._pathViewport,i=t.min,s=t.max,o=s.x-i.x,n=s.y-i.y,a=this._pathRoot,r=this._panes.overlayPane;e.Browser.mobileWebkit&&r.removeChild(a),e.DomUtil.setPosition(a,i),a.setAttribute("width",o),a.setAttribute("height",n),a.setAttribute("viewBox",[i.x,i.y,o,n].join(" ")),e.Browser.mobileWebkit&&r.appendChild(a)}}}),e.Path.include({bindPopup:function(t,i){return(!this._popup||i)&&(this._popup=new e.Popup(i,this)),this._popup.setContent(t),this._popupHandlersAdded||(this.on("click",this._openPopup,this).on("remove",this.closePopup,this),this._popupHandlersAdded=!0),this},unbindPopup:function(){return this._popup&&(this._popup=null,this.off("click",this._openPopup).off("remove",this.closePopup),this._popupHandlersAdded=!1),this},openPopup:function(t){return this._popup&&(t=t||this._latlng||this._latlngs[Math.floor(this._latlngs.length/2)],this._openPopup({latlng:t})),this},closePopup:function(){return this._popup&&this._popup._close(),this},_openPopup:function(t){this._popup.setLatLng(t.latlng),this._map.openPopup(this._popup)}}),e.Browser.vml=!e.Browser.svg&&function(){try{var t=i.createElement("div");t.innerHTML='';var s=t.firstChild;return s.style.behavior="url(#default#VML)",s&&"object"==typeof s.adj}catch(e){return!1}}(),e.Path=e.Browser.svg||!e.Browser.vml?e.Path:e.Path.extend({statics:{VML:!0,CLIP_PADDING:.02},_createElement:function(){try{return i.namespaces.add("lvml","urn:schemas-microsoft-com:vml"),function(t){return i.createElement("')}}catch(t){return function(t){return i.createElement("<"+t+' xmlns="urn:schemas-microsoft.com:vml" class="lvml">')}}}(),_initPath:function(){var t=this._container=this._createElement("shape");e.DomUtil.addClass(t,"leaflet-vml-shape"),this.options.clickable&&e.DomUtil.addClass(t,"leaflet-clickable"),t.coordsize="1 1",this._path=this._createElement("path"),t.appendChild(this._path),this._map._pathRoot.appendChild(t)},_initStyle:function(){this._updateStyle()},_updateStyle:function(){var t=this._stroke,i=this._fill,s=this.options,e=this._container;e.stroked=s.stroke,e.filled=s.fill,s.stroke?(t||(t=this._stroke=this._createElement("stroke"),t.endcap="round",e.appendChild(t)),t.weight=s.weight+"px",t.color=s.color,t.opacity=s.opacity,t.dashStyle=s.dashArray?s.dashArray instanceof Array?s.dashArray.join(" "):s.dashArray.replace(/ *, */g," "):""):t&&(e.removeChild(t),this._stroke=null),s.fill?(i||(i=this._fill=this._createElement("fill"),e.appendChild(i)),i.color=s.fillColor||s.color,i.opacity=s.fillOpacity):i&&(e.removeChild(i),this._fill=null)},_updatePath:function(){var t=this._container.style;t.display="none",this._path.v=this.getPathString()+" ",t.display=""}}),e.Map.include(e.Browser.svg||!e.Browser.vml?{}:{_initPathRoot:function(){if(!this._pathRoot){var t=this._pathRoot=i.createElement("div");t.className="leaflet-vml-container",this._panes.overlayPane.appendChild(t),this.on("moveend",this._updatePathViewport),this._updatePathViewport()}}}),e.Browser.canvas=function(){return!!i.createElement("canvas").getContext}(),e.Path=e.Path.SVG&&!t.L_PREFER_CANVAS||!e.Browser.canvas?e.Path:e.Path.extend({statics:{CANVAS:!0,SVG:!1},redraw:function(){return this._map&&(this.projectLatlngs(),this._requestUpdate()),this},setStyle:function(t){return e.setOptions(this,t),this._map&&(this._updateStyle(),this._requestUpdate()),this},onRemove:function(t){t.off("viewreset",this.projectLatlngs,this).off("moveend",this._updatePath,this),this.options.clickable&&this._map.off("click",this._onClick,this),this._requestUpdate(),this._map=null},_requestUpdate:function(){this._map&&!e.Path._updateRequest&&(e.Path._updateRequest=e.Util.requestAnimFrame(this._fireMapMoveEnd,this._map))},_fireMapMoveEnd:function(){e.Path._updateRequest=null,this.fire("moveend")},_initElements:function(){this._map._initPathRoot(),this._ctx=this._map._canvasCtx},_updateStyle:function(){var t=this.options;t.stroke&&(this._ctx.lineWidth=t.weight,this._ctx.strokeStyle=t.color),t.fill&&(this._ctx.fillStyle=t.fillColor||t.color)},_drawPath:function(){var t,i,s,o,n,a;for(this._ctx.beginPath(),t=0,s=this._parts.length;s>t;t++){for(i=0,o=this._parts[t].length;o>i;i++)n=this._parts[t][i],a=(0===i?"move":"line")+"To",this._ctx[a](n.x,n.y);this instanceof e.Polygon&&this._ctx.closePath()}},_checkIfEmpty:function(){return!this._parts.length},_updatePath:function(){if(!this._checkIfEmpty()){var t=this._ctx,i=this.options;this._drawPath(),t.save(),this._updateStyle(),i.fill&&(t.globalAlpha=i.fillOpacity,t.fill()),i.stroke&&(t.globalAlpha=i.opacity,t.stroke()),t.restore()}},_initEvents:function(){this.options.clickable&&this._map.on("click",this._onClick,this)},_onClick:function(t){this._containsPoint(t.layerPoint)&&this.fire("click",{latlng:t.latlng,layerPoint:t.layerPoint,containerPoint:t.containerPoint,originalEvent:t})}}),e.Map.include(e.Path.SVG&&!t.L_PREFER_CANVAS||!e.Browser.canvas?{}:{_initPathRoot:function(){var t,s=this._pathRoot;s||(s=this._pathRoot=i.createElement("canvas"),s.style.position="absolute",t=this._canvasCtx=s.getContext("2d"),t.lineCap="round",t.lineJoin="round",this._panes.overlayPane.appendChild(s),this.options.zoomAnimation&&(this._pathRoot.className="leaflet-zoom-animated",this.on("zoomanim",this._animatePathZoom),this.on("zoomend",this._endPathZoom)),this.on("moveend",this._updateCanvasViewport),this._updateCanvasViewport())},_updateCanvasViewport:function(){if(!this._pathZooming){this._updatePathViewport();var t=this._pathViewport,i=t.min,s=t.max.subtract(i),o=this._pathRoot;e.DomUtil.setPosition(o,i),o.width=s.x,o.height=s.y,o.getContext("2d").translate(-i.x,-i.y)}}}),e.LineUtil={simplify:function(t,i){if(!i||!t.length)return t.slice();var s=i*i;return t=this._reducePoints(t,s),t=this._simplifyDP(t,s)},pointToSegmentDistance:function(t,i,s){return Math.sqrt(this._sqClosestPointOnSegment(t,i,s,!0))},closestPointOnSegment:function(t,i,s){return this._sqClosestPointOnSegment(t,i,s)},_simplifyDP:function(t,i){var e=t.length,o=typeof Uint8Array!=s+""?Uint8Array:Array,n=new o(e);n[0]=n[e-1]=1,this._simplifyDPStep(t,n,i,0,e-1);var a,r=[];for(a=0;e>a;a++)n[a]&&r.push(t[a]);return r},_simplifyDPStep:function(t,i,s,e,o){var n,a,r,h=0;for(a=e+1;o-1>=a;a++)r=this._sqClosestPointOnSegment(t[a],t[e],t[o],!0),r>h&&(n=a,h=r);h>s&&(i[n]=1,this._simplifyDPStep(t,i,s,e,n),this._simplifyDPStep(t,i,s,n,o))},_reducePoints:function(t,i){for(var s=[t[0]],e=1,o=0,n=t.length;n>e;e++)this._sqDist(t[e],t[o])>i&&(s.push(t[e]),o=e);return n-1>o&&s.push(t[n-1]),s},clipSegment:function(t,i,s,e){var o,n,a,r=e?this._lastCode:this._getBitCode(t,s),h=this._getBitCode(i,s);for(this._lastCode=h;;){if(!(r|h))return[t,i];if(r&h)return!1;o=r||h,n=this._getEdgeIntersection(t,i,o,s),a=this._getBitCode(n,s),o===r?(t=n,r=a):(i=n,h=a)}},_getEdgeIntersection:function(t,i,o,n){var a=i.x-t.x,r=i.y-t.y,h=n.min,l=n.max;return 8&o?new e.Point(t.x+a*(l.y-t.y)/r,l.y):4&o?new e.Point(t.x+a*(h.y-t.y)/r,h.y):2&o?new e.Point(l.x,t.y+r*(l.x-t.x)/a):1&o?new e.Point(h.x,t.y+r*(h.x-t.x)/a):s},_getBitCode:function(t,i){var s=0;return t.xi.max.x&&(s|=2),t.yi.max.y&&(s|=8),s},_sqDist:function(t,i){var s=i.x-t.x,e=i.y-t.y;return s*s+e*e},_sqClosestPointOnSegment:function(t,i,s,o){var n,a=i.x,r=i.y,h=s.x-a,l=s.y-r,c=h*h+l*l;return c>0&&(n=((t.x-a)*h+(t.y-r)*l)/c, -n>1?(a=s.x,r=s.y):n>0&&(a+=h*n,r+=l*n)),h=t.x-a,l=t.y-r,o?h*h+l*l:new e.Point(a,r)}},e.Polyline=e.Path.extend({initialize:function(t,i){e.Path.prototype.initialize.call(this,i),this._latlngs=this._convertLatLngs(t)},options:{smoothFactor:1,noClip:!1},projectLatlngs:function(){this._originalPoints=[];for(var t=0,i=this._latlngs.length;i>t;t++)this._originalPoints[t]=this._map.latLngToLayerPoint(this._latlngs[t])},getPathString:function(){for(var t=0,i=this._parts.length,s="";i>t;t++)s+=this._getPathPartStr(this._parts[t]);return s},getLatLngs:function(){return this._latlngs},setLatLngs:function(t){return this._latlngs=this._convertLatLngs(t),this.redraw()},addLatLng:function(t){return this._latlngs.push(e.latLng(t)),this.redraw()},spliceLatLngs:function(){var t=[].splice.apply(this._latlngs,arguments);return this._convertLatLngs(this._latlngs),this.redraw(),t},closestLayerPoint:function(t){for(var i,s,o=1/0,n=this._parts,a=null,r=0,h=n.length;h>r;r++)for(var l=n[r],c=1,m=l.length;m>c;c++){i=l[c-1],s=l[c];var u=e.LineUtil._sqClosestPointOnSegment(t,i,s,!0);o>u&&(o=u,a=e.LineUtil._sqClosestPointOnSegment(t,i,s))}return a&&(a.distance=Math.sqrt(o)),a},getBounds:function(){var t,i,s=new e.LatLngBounds,o=this.getLatLngs();for(t=0,i=o.length;i>t;t++)s.extend(o[t]);return s},_convertLatLngs:function(t){var i,s;for(i=0,s=t.length;s>i;i++){if(e.Util.isArray(t[i])&&"number"!=typeof t[i][0])return;t[i]=e.latLng(t[i])}return t},_initEvents:function(){e.Path.prototype._initEvents.call(this)},_getPathPartStr:function(t){for(var i,s=e.Path.VML,o=0,n=t.length,a="";n>o;o++)i=t[o],s&&i._round(),a+=(o?"L":"M")+i.x+" "+i.y;return a},_clipPoints:function(){var t,i,o,n=this._originalPoints,a=n.length;if(this.options.noClip)return this._parts=[n],s;this._parts=[];var r=this._parts,h=this._map._pathViewport,l=e.LineUtil;for(t=0,i=0;a-1>t;t++)o=l.clipSegment(n[t],n[t+1],h,t),o&&(r[i]=r[i]||[],r[i].push(o[0]),(o[1]!==n[t+1]||t===a-2)&&(r[i].push(o[1]),i++))},_simplifyPoints:function(){for(var t=this._parts,i=e.LineUtil,s=0,o=t.length;o>s;s++)t[s]=i.simplify(t[s],this.options.smoothFactor)},_updatePath:function(){this._map&&(this._clipPoints(),this._simplifyPoints(),e.Path.prototype._updatePath.call(this))}}),e.polyline=function(t,i){return new e.Polyline(t,i)},e.PolyUtil={},e.PolyUtil.clipPolygon=function(t,i){var s,o,n,a,r,h,l,c,m,u=[1,4,2,8],d=e.LineUtil;for(o=0,l=t.length;l>o;o++)t[o]._code=d._getBitCode(t[o],i);for(a=0;4>a;a++){for(c=u[a],s=[],o=0,l=t.length,n=l-1;l>o;n=o++)r=t[o],h=t[n],r._code&c?h._code&c||(m=d._getEdgeIntersection(h,r,c,i),m._code=d._getBitCode(m,i),s.push(m)):(h._code&c&&(m=d._getEdgeIntersection(h,r,c,i),m._code=d._getBitCode(m,i),s.push(m)),s.push(r));t=s}return t},e.Polygon=e.Polyline.extend({options:{fill:!0},initialize:function(t,i){e.Polyline.prototype.initialize.call(this,t,i),t&&e.Util.isArray(t[0])&&"number"!=typeof t[0][0]&&(this._latlngs=this._convertLatLngs(t[0]),this._holes=t.slice(1))},projectLatlngs:function(){if(e.Polyline.prototype.projectLatlngs.call(this),this._holePoints=[],this._holes){var t,i,s,o;for(t=0,s=this._holes.length;s>t;t++)for(this._holePoints[t]=[],i=0,o=this._holes[t].length;o>i;i++)this._holePoints[t][i]=this._map.latLngToLayerPoint(this._holes[t][i])}},_clipPoints:function(){var t=this._originalPoints,i=[];if(this._parts=[t].concat(this._holePoints),!this.options.noClip){for(var s=0,o=this._parts.length;o>s;s++){var n=e.PolyUtil.clipPolygon(this._parts[s],this._map._pathViewport);n.length&&i.push(n)}this._parts=i}},_getPathPartStr:function(t){var i=e.Polyline.prototype._getPathPartStr.call(this,t);return i+(e.Browser.svg?"z":"x")}}),e.polygon=function(t,i){return new e.Polygon(t,i)},function(){function t(t){return e.FeatureGroup.extend({initialize:function(t,i){this._layers={},this._options=i,this.setLatLngs(t)},setLatLngs:function(i){var s=0,e=i.length;for(this.eachLayer(function(t){e>s?t.setLatLngs(i[s++]):this.removeLayer(t)},this);e>s;)this.addLayer(new t(i[s++],this._options));return this}})}e.MultiPolyline=t(e.Polyline),e.MultiPolygon=t(e.Polygon),e.multiPolyline=function(t,i){return new e.MultiPolyline(t,i)},e.multiPolygon=function(t,i){return new e.MultiPolygon(t,i)}}(),e.Rectangle=e.Polygon.extend({initialize:function(t,i){e.Polygon.prototype.initialize.call(this,this._boundsToLatLngs(t),i)},setBounds:function(t){this.setLatLngs(this._boundsToLatLngs(t))},_boundsToLatLngs:function(t){return t=e.latLngBounds(t),[t.getSouthWest(),t.getNorthWest(),t.getNorthEast(),t.getSouthEast()]}}),e.rectangle=function(t,i){return new e.Rectangle(t,i)},e.Circle=e.Path.extend({initialize:function(t,i,s){e.Path.prototype.initialize.call(this,s),this._latlng=e.latLng(t),this._mRadius=i},options:{fill:!0},setLatLng:function(t){return this._latlng=e.latLng(t),this.redraw()},setRadius:function(t){return this._mRadius=t,this.redraw()},projectLatlngs:function(){var t=this._getLngRadius(),i=new e.LatLng(this._latlng.lat,this._latlng.lng-t),s=this._map.latLngToLayerPoint(i);this._point=this._map.latLngToLayerPoint(this._latlng),this._radius=Math.max(Math.round(this._point.x-s.x),1)},getBounds:function(){var t=this._getLngRadius(),i=360*(this._mRadius/40075017),s=this._latlng,o=new e.LatLng(s.lat-i,s.lng-t),n=new e.LatLng(s.lat+i,s.lng+t);return new e.LatLngBounds(o,n)},getLatLng:function(){return this._latlng},getPathString:function(){var t=this._point,i=this._radius;return this._checkIfEmpty()?"":e.Browser.svg?"M"+t.x+","+(t.y-i)+"A"+i+","+i+",0,1,1,"+(t.x-.1)+","+(t.y-i)+" z":(t._round(),i=Math.round(i),"AL "+t.x+","+t.y+" "+i+","+i+" 0,"+23592600)},getRadius:function(){return this._mRadius},_getLatRadius:function(){return 360*(this._mRadius/40075017)},_getLngRadius:function(){return this._getLatRadius()/Math.cos(e.LatLng.DEG_TO_RAD*this._latlng.lat)},_checkIfEmpty:function(){if(!this._map)return!1;var t=this._map._pathViewport,i=this._radius,s=this._point;return s.x-i>t.max.x||s.y-i>t.max.y||s.x+is;s++)for(l=this._parts[s],o=0,r=l.length,n=r-1;r>o;n=o++)if((i||0!==o)&&(h=e.LineUtil.pointToSegmentDistance(t,l[n],l[o]),c>=h))return!0;return!1}}:{}),e.Polygon.include(e.Path.CANVAS?{_containsPoint:function(t){var i,s,o,n,a,r,h,l,c=!1;if(e.Polyline.prototype._containsPoint.call(this,t,!0))return!0;for(n=0,h=this._parts.length;h>n;n++)for(i=this._parts[n],a=0,l=i.length,r=l-1;l>a;r=a++)s=i[a],o=i[r],s.y>t.y!=o.y>t.y&&t.x<(o.x-s.x)*(t.y-s.y)/(o.y-s.y)+s.x&&(c=!c);return c}}:{}),e.Circle.include(e.Path.CANVAS?{_drawPath:function(){var t=this._point;this._ctx.beginPath(),this._ctx.arc(t.x,t.y,this._radius,0,2*Math.PI,!1)},_containsPoint:function(t){var i=this._point,s=this.options.stroke?this.options.weight/2:0;return t.distanceTo(i)<=this._radius+s}}:{}),e.GeoJSON=e.FeatureGroup.extend({initialize:function(t,i){e.setOptions(this,i),this._layers={},t&&this.addData(t)},addData:function(t){var i,s,o=e.Util.isArray(t)?t:t.features;if(o){for(i=0,s=o.length;s>i;i++)(o[i].geometries||o[i].geometry||o[i].features)&&this.addData(o[i]);return this}var n=this.options;if(!n.filter||n.filter(t)){var a=e.GeoJSON.geometryToLayer(t,n.pointToLayer);return a.feature=t,a.defaultOptions=a.options,this.resetStyle(a),n.onEachFeature&&n.onEachFeature(t,a),this.addLayer(a)}},resetStyle:function(t){var i=this.options.style;i&&(e.Util.extend(t.options,t.defaultOptions),this._setLayerStyle(t,i))},setStyle:function(t){this.eachLayer(function(i){this._setLayerStyle(i,t)},this)},_setLayerStyle:function(t,i){"function"==typeof i&&(i=i(t.feature)),t.setStyle&&t.setStyle(i)}}),e.extend(e.GeoJSON,{geometryToLayer:function(t,i){var s,o,n,a,r,h="Feature"===t.type?t.geometry:t,l=h.coordinates,c=[];switch(h.type){case"Point":return s=this.coordsToLatLng(l),i?i(t,s):new e.Marker(s);case"MultiPoint":for(n=0,a=l.length;a>n;n++)s=this.coordsToLatLng(l[n]),r=i?i(t,s):new e.Marker(s),c.push(r);return new e.FeatureGroup(c);case"LineString":return o=this.coordsToLatLngs(l),new e.Polyline(o);case"Polygon":return o=this.coordsToLatLngs(l,1),new e.Polygon(o);case"MultiLineString":return o=this.coordsToLatLngs(l,1),new e.MultiPolyline(o);case"MultiPolygon":return o=this.coordsToLatLngs(l,2),new e.MultiPolygon(o);case"GeometryCollection":for(n=0,a=h.geometries.length;a>n;n++)r=this.geometryToLayer({geometry:h.geometries[n],type:"Feature",properties:t.properties},i),c.push(r);return new e.FeatureGroup(c);default:throw Error("Invalid GeoJSON object.")}},coordsToLatLng:function(t,i){var s=parseFloat(t[i?0:1]),o=parseFloat(t[i?1:0]);return new e.LatLng(s,o)},coordsToLatLngs:function(t,i,s){var e,o,n,a=[];for(o=0,n=t.length;n>o;o++)e=i?this.coordsToLatLngs(t[o],i-1,s):this.coordsToLatLng(t[o],s),a.push(e);return a}}),e.geoJson=function(t,i){return new e.GeoJSON(t,i)},e.DomEvent={addListener:function(t,i,o,n){var a,r,h,l=e.stamp(o),c="_leaflet_"+i+l;return t[c]?this:(a=function(i){return o.call(n||t,i||e.DomEvent._getEvent())},e.Browser.msTouch&&0===i.indexOf("touch")?this.addMsTouchListener(t,i,a,l):(e.Browser.touch&&"dblclick"===i&&this.addDoubleTapListener&&this.addDoubleTapListener(t,a,l),"addEventListener"in t?"mousewheel"===i?(t.addEventListener("DOMMouseScroll",a,!1),t.addEventListener(i,a,!1)):"mouseenter"===i||"mouseleave"===i?(r=a,h="mouseenter"===i?"mouseover":"mouseout",a=function(i){return e.DomEvent._checkMouse(t,i)?r(i):s},t.addEventListener(h,a,!1)):t.addEventListener(i,a,!1):"attachEvent"in t&&t.attachEvent("on"+i,a),t[c]=a,this))},removeListener:function(t,i,s){var o=e.stamp(s),n="_leaflet_"+i+o,a=t[n];if(a)return e.Browser.msTouch&&0===i.indexOf("touch")?this.removeMsTouchListener(t,i,o):e.Browser.touch&&"dblclick"===i&&this.removeDoubleTapListener?this.removeDoubleTapListener(t,o):"removeEventListener"in t?"mousewheel"===i?(t.removeEventListener("DOMMouseScroll",a,!1),t.removeEventListener(i,a,!1)):"mouseenter"===i||"mouseleave"===i?t.removeEventListener("mouseenter"===i?"mouseover":"mouseout",a,!1):t.removeEventListener(i,a,!1):"detachEvent"in t&&t.detachEvent("on"+i,a),t[n]=null,this},stopPropagation:function(t){return t.stopPropagation?t.stopPropagation():t.cancelBubble=!0,this},disableClickPropagation:function(t){for(var i=e.DomEvent.stopPropagation,s=e.Draggable.START.length-1;s>=0;s--)e.DomEvent.addListener(t,e.Draggable.START[s],i);return e.DomEvent.addListener(t,"click",i).addListener(t,"dblclick",i)},preventDefault:function(t){return t.preventDefault?t.preventDefault():t.returnValue=!1,this},stop:function(t){return e.DomEvent.preventDefault(t).stopPropagation(t)},getMousePosition:function(t,s){var o=i.body,n=i.documentElement,a=t.pageX?t.pageX:t.clientX+o.scrollLeft+n.scrollLeft,r=t.pageY?t.pageY:t.clientY+o.scrollTop+n.scrollTop,h=new e.Point(a,r);return s?h._subtract(e.DomUtil.getViewportOffset(s)):h},getWheelDelta:function(t){var i=0;return t.wheelDelta&&(i=t.wheelDelta/120),t.detail&&(i=-t.detail/3),i},_checkMouse:function(t,i){var s=i.relatedTarget;if(!s)return!0;try{for(;s&&s!==t;)s=s.parentNode}catch(e){return!1}return s!==t},_getEvent:function(){var i=t.event;if(!i)for(var s=arguments.callee.caller;s&&(i=s.arguments[0],!i||t.Event!==i.constructor);)s=s.caller;return i}},e.DomEvent.on=e.DomEvent.addListener,e.DomEvent.off=e.DomEvent.removeListener,e.Draggable=e.Class.extend({includes:e.Mixin.Events,statics:{START:e.Browser.touch?["touchstart","mousedown"]:["mousedown"],END:{mousedown:"mouseup",touchstart:"touchend",MSPointerDown:"touchend"},MOVE:{mousedown:"mousemove",touchstart:"touchmove",MSPointerDown:"touchmove"},TAP_TOLERANCE:15},initialize:function(t,i,s){this._element=t,this._dragStartTarget=i||t,this._longPress=s&&!e.Browser.msTouch},enable:function(){if(!this._enabled){for(var t=e.Draggable.START.length-1;t>=0;t--)e.DomEvent.on(this._dragStartTarget,e.Draggable.START[t],this._onDown,this);this._enabled=!0}},disable:function(){if(this._enabled){for(var t=e.Draggable.START.length-1;t>=0;t--)e.DomEvent.off(this._dragStartTarget,e.Draggable.START[t],this._onDown,this);this._enabled=!1,this._moved=!1}},_onDown:function(t){if(!(!e.Browser.touch&&t.shiftKey||1!==t.which&&1!==t.button&&!t.touches||(e.DomEvent.preventDefault(t),e.DomEvent.stopPropagation(t),e.Draggable._disabled))){if(this._simulateClick=!0,t.touches&&t.touches.length>1)return this._simulateClick=!1,clearTimeout(this._longPressTimeout),s;var o=t.touches&&1===t.touches.length?t.touches[0]:t,n=o.target;e.Browser.touch&&"a"===n.tagName.toLowerCase()&&e.DomUtil.addClass(n,"leaflet-active"),this._moved=!1,this._moving||(this._startPoint=new e.Point(o.clientX,o.clientY),this._startPos=this._newPos=e.DomUtil.getPosition(this._element),t.touches&&1===t.touches.length&&e.Browser.touch&&this._longPress&&(this._longPressTimeout=setTimeout(e.bind(function(){var t=this._newPos&&this._newPos.distanceTo(this._startPos)||0;e.Draggable.TAP_TOLERANCE>t&&(this._simulateClick=!1,this._onUp(),this._simulateEvent("contextmenu",o))},this),1e3)),e.DomEvent.on(i,e.Draggable.MOVE[t.type],this._onMove,this),e.DomEvent.on(i,e.Draggable.END[t.type],this._onUp,this))}},_onMove:function(t){if(!(t.touches&&t.touches.length>1)){var i=t.touches&&1===t.touches.length?t.touches[0]:t,s=new e.Point(i.clientX,i.clientY),o=s.subtract(this._startPoint);(o.x||o.y)&&(e.DomEvent.preventDefault(t),this._moved||(this.fire("dragstart"),this._moved=!0,this._startPos=e.DomUtil.getPosition(this._element).subtract(o),e.Browser.touch||(e.DomUtil.disableTextSelection(),this._setMovingCursor())),this._newPos=this._startPos.add(o),this._moving=!0,e.Util.cancelAnimFrame(this._animRequest),this._animRequest=e.Util.requestAnimFrame(this._updatePosition,this,!0,this._dragStartTarget))}},_updatePosition:function(){this.fire("predrag"),e.DomUtil.setPosition(this._element,this._newPos),this.fire("drag")},_onUp:function(t){var s;if(clearTimeout(this._longPressTimeout),this._simulateClick&&t.changedTouches){var o=t.changedTouches[0],n=o.target,a=this._newPos&&this._newPos.distanceTo(this._startPos)||0;"a"===n.tagName.toLowerCase()&&e.DomUtil.removeClass(n,"leaflet-active"),e.Draggable.TAP_TOLERANCE>a&&(s=o)}e.Browser.touch||(e.DomUtil.enableTextSelection(),this._restoreCursor());for(var r in e.Draggable.MOVE)e.Draggable.MOVE.hasOwnProperty(r)&&(e.DomEvent.off(i,e.Draggable.MOVE[r],this._onMove),e.DomEvent.off(i,e.Draggable.END[r],this._onUp));this._moved&&(e.Util.cancelAnimFrame(this._animRequest),this.fire("dragend")),this._moving=!1,s&&(this._moved=!1,this._simulateEvent("click",s))},_setMovingCursor:function(){e.DomUtil.addClass(i.body,"leaflet-dragging")},_restoreCursor:function(){e.DomUtil.removeClass(i.body,"leaflet-dragging")},_simulateEvent:function(s,e){var o=i.createEvent("MouseEvents");o.initMouseEvent(s,!0,!0,t,1,e.screenX,e.screenY,e.clientX,e.clientY,!1,!1,!1,!1,0,null),e.target.dispatchEvent(o)}}),e.Handler=e.Class.extend({initialize:function(t){this._map=t},enable:function(){this._enabled||(this._enabled=!0,this.addHooks())},disable:function(){this._enabled&&(this._enabled=!1,this.removeHooks())},enabled:function(){return!!this._enabled}}),e.Map.mergeOptions({dragging:!0,inertia:!e.Browser.android23,inertiaDeceleration:3400,inertiaMaxSpeed:1/0,inertiaThreshold:e.Browser.touch?32:18,easeLinearity:.25,longPress:!0,worldCopyJump:!1}),e.Map.Drag=e.Handler.extend({addHooks:function(){if(!this._draggable){var t=this._map;this._draggable=new e.Draggable(t._mapPane,t._container,t.options.longPress),this._draggable.on({dragstart:this._onDragStart,drag:this._onDrag,dragend:this._onDragEnd},this),t.options.worldCopyJump&&(this._draggable.on("predrag",this._onPreDrag,this),t.on("viewreset",this._onViewReset,this))}this._draggable.enable()},removeHooks:function(){this._draggable.disable()},moved:function(){return this._draggable&&this._draggable._moved},_onDragStart:function(){var t=this._map;t._panAnim&&t._panAnim.stop(),t.fire("movestart").fire("dragstart"),t.options.inertia&&(this._positions=[],this._times=[])},_onDrag:function(){if(this._map.options.inertia){var t=this._lastTime=+new Date,i=this._lastPos=this._draggable._newPos;this._positions.push(i),this._times.push(t),t-this._times[0]>200&&(this._positions.shift(),this._times.shift())}this._map.fire("move").fire("drag")},_onViewReset:function(){var t=this._map.getSize()._divideBy(2),i=this._map.latLngToLayerPoint(new e.LatLng(0,0));this._initialWorldOffset=i.subtract(t).x,this._worldWidth=this._map.project(new e.LatLng(0,180)).x},_onPreDrag:function(){var t=this._worldWidth,i=Math.round(t/2),s=this._initialWorldOffset,e=this._draggable._newPos.x,o=(e-i+s)%t+i-s,n=(e+i+s)%t-i-s,a=Math.abs(o+s)i.inertiaThreshold||!this._positions[0];if(o)t.fire("moveend");else{var n=this._lastPos.subtract(this._positions[0]),a=(this._lastTime+s-this._times[0])/1e3,r=i.easeLinearity,h=n.multiplyBy(r/a),l=h.distanceTo(new e.Point(0,0)),c=Math.min(i.inertiaMaxSpeed,l),m=h.multiplyBy(c/l),u=c/(i.inertiaDeceleration*r),d=m.multiplyBy(-u/2).round();e.Util.requestAnimFrame(function(){t.panBy(d,u,r)})}t.fire("dragend"),i.maxBounds&&e.Util.requestAnimFrame(this._panInsideMaxBounds,t,!0,t._container)},_panInsideMaxBounds:function(){this.panInsideBounds(this.options.maxBounds)}}),e.Map.addInitHook("addHandler","dragging",e.Map.Drag),e.Map.mergeOptions({doubleClickZoom:!0}),e.Map.DoubleClickZoom=e.Handler.extend({addHooks:function(){this._map.on("dblclick",this._onDoubleClick)},removeHooks:function(){this._map.off("dblclick",this._onDoubleClick)},_onDoubleClick:function(t){this.setView(t.latlng,this._zoom+1)}}),e.Map.addInitHook("addHandler","doubleClickZoom",e.Map.DoubleClickZoom),e.Map.mergeOptions({scrollWheelZoom:!0}),e.Map.ScrollWheelZoom=e.Handler.extend({addHooks:function(){e.DomEvent.on(this._map._container,"mousewheel",this._onWheelScroll,this),this._delta=0},removeHooks:function(){e.DomEvent.off(this._map._container,"mousewheel",this._onWheelScroll)},_onWheelScroll:function(t){var i=e.DomEvent.getWheelDelta(t);this._delta+=i,this._lastMousePos=this._map.mouseEventToContainerPoint(t),this._startTime||(this._startTime=+new Date);var s=Math.max(40-(+new Date-this._startTime),0);clearTimeout(this._timer),this._timer=setTimeout(e.bind(this._performZoom,this),s),e.DomEvent.preventDefault(t),e.DomEvent.stopPropagation(t)},_performZoom:function(){var t=this._map,i=this._delta,s=t.getZoom();if(i=i>0?Math.ceil(i):Math.round(i),i=Math.max(Math.min(i,4),-4),i=t._limitZoom(s+i)-s,this._delta=0,this._startTime=null,i){var e=s+i,o=this._getCenterForScrollWheelZoom(e);t.setView(o,e)}},_getCenterForScrollWheelZoom:function(t){var i=this._map,s=i.getZoomScale(t),e=i.getSize()._divideBy(2),o=this._lastMousePos._subtract(e)._multiplyBy(1-1/s),n=i._getTopLeftPoint()._add(e)._add(o);return i.unproject(n)}}),e.Map.addInitHook("addHandler","scrollWheelZoom",e.Map.ScrollWheelZoom),e.extend(e.DomEvent,{_touchstart:e.Browser.msTouch?"MSPointerDown":"touchstart",_touchend:e.Browser.msTouch?"MSPointerUp":"touchend",addDoubleTapListener:function(t,s,o){function n(t){var i;if(e.Browser.msTouch?(p.push(t.pointerId),i=p.length):i=t.touches.length,!(i>1)){var s=Date.now(),o=s-(r||s);h=t.touches?t.touches[0]:t,l=o>0&&c>=o,r=s}}function a(t){if(e.Browser.msTouch){var i=p.indexOf(t.pointerId);if(-1===i)return;p.splice(i,1)}if(l){if(e.Browser.msTouch){var o,n={};for(var a in h)o=h[a],n[a]="function"==typeof o?o.bind(h):o;h=n}h.type="dblclick",s(h),r=null}}var r,h,l=!1,c=250,m="_leaflet_",u=this._touchstart,d=this._touchend,p=[];t[m+u+o]=n,t[m+d+o]=a;var _=e.Browser.msTouch?i.documentElement:t;return t.addEventListener(u,n,!1),_.addEventListener(d,a,!1),e.Browser.msTouch&&_.addEventListener("MSPointerCancel",a,!1),this},removeDoubleTapListener:function(t,s){var o="_leaflet_";return t.removeEventListener(this._touchstart,t[o+this._touchstart+s],!1),(e.Browser.msTouch?i.documentElement:t).removeEventListener(this._touchend,t[o+this._touchend+s],!1),e.Browser.msTouch&&i.documentElement.removeEventListener("MSPointerCancel",t[o+this._touchend+s],!1),this}}),e.extend(e.DomEvent,{_msTouches:[],_msDocumentListener:!1,addMsTouchListener:function(t,i,s,e){switch(i){case"touchstart":return this.addMsTouchListenerStart(t,i,s,e);case"touchend":return this.addMsTouchListenerEnd(t,i,s,e);case"touchmove":return this.addMsTouchListenerMove(t,i,s,e);default:throw"Unknown touch event type"}},addMsTouchListenerStart:function(t,s,e,o){var n="_leaflet_",a=this._msTouches,r=function(t){for(var i=!1,s=0;a.length>s;s++)if(a[s].pointerId===t.pointerId){i=!0;break}i||a.push(t),t.touches=a.slice(),t.changedTouches=[t],e(t)};if(t[n+"touchstart"+o]=r,t.addEventListener("MSPointerDown",r,!1),!this._msDocumentListener){var h=function(t){for(var i=0;a.length>i;i++)if(a[i].pointerId===t.pointerId){a.splice(i,1);break}};i.documentElement.addEventListener("MSPointerUp",h,!1),i.documentElement.addEventListener("MSPointerCancel",h,!1),this._msDocumentListener=!0}return this},addMsTouchListenerMove:function(t,i,s,e){function o(t){if(t.pointerType!==t.MSPOINTER_TYPE_MOUSE||0!==t.buttons){for(var i=0;a.length>i;i++)if(a[i].pointerId===t.pointerId){a[i]=t;break}t.touches=a.slice(),t.changedTouches=[t],s(t)}}var n="_leaflet_",a=this._msTouches;return t[n+"touchmove"+e]=o,t.addEventListener("MSPointerMove",o,!1),this},addMsTouchListenerEnd:function(t,i,s,e){var o="_leaflet_",n=this._msTouches,a=function(t){for(var i=0;n.length>i;i++)if(n[i].pointerId===t.pointerId){n.splice(i,1);break}t.touches=n.slice(),t.changedTouches=[t],s(t)};return t[o+"touchend"+e]=a,t.addEventListener("MSPointerUp",a,!1),t.addEventListener("MSPointerCancel",a,!1),this},removeMsTouchListener:function(t,i,s){var e="_leaflet_",o=t[e+i+s];switch(i){case"touchstart":t.removeEventListener("MSPointerDown",o,!1);break;case"touchmove":t.removeEventListener("MSPointerMove",o,!1);break;case"touchend":t.removeEventListener("MSPointerUp",o,!1),t.removeEventListener("MSPointerCancel",o,!1)}return this}}),e.Map.mergeOptions({touchZoom:e.Browser.touch&&!e.Browser.android23}),e.Map.TouchZoom=e.Handler.extend({addHooks:function(){e.DomEvent.on(this._map._container,"touchstart",this._onTouchStart,this)},removeHooks:function(){e.DomEvent.off(this._map._container,"touchstart",this._onTouchStart,this)},_onTouchStart:function(t){var s=this._map;if(t.touches&&2===t.touches.length&&!s._animatingZoom&&!this._zooming){var o=s.mouseEventToLayerPoint(t.touches[0]),n=s.mouseEventToLayerPoint(t.touches[1]),a=s._getCenterLayerPoint();this._startCenter=o.add(n)._divideBy(2),this._startDist=o.distanceTo(n),this._moved=!1,this._zooming=!0,this._centerOffset=a.subtract(this._startCenter),s._panAnim&&s._panAnim.stop(),e.DomEvent.on(i,"touchmove",this._onTouchMove,this).on(i,"touchend",this._onTouchEnd,this),e.DomEvent.preventDefault(t)}},_onTouchMove:function(t){if(t.touches&&2===t.touches.length){var i=this._map,s=i.mouseEventToLayerPoint(t.touches[0]),o=i.mouseEventToLayerPoint(t.touches[1]);this._scale=s.distanceTo(o)/this._startDist,this._delta=s._add(o)._divideBy(2)._subtract(this._startCenter),1!==this._scale&&(this._moved||(e.DomUtil.addClass(i._mapPane,"leaflet-zoom-anim leaflet-touching"),i.fire("movestart").fire("zoomstart")._prepareTileBg(),this._moved=!0),e.Util.cancelAnimFrame(this._animRequest),this._animRequest=e.Util.requestAnimFrame(this._updateOnMove,this,!0,this._map._container),e.DomEvent.preventDefault(t))}},_updateOnMove:function(){var t=this._map,i=this._getScaleOrigin(),s=t.layerPointToLatLng(i);t.fire("zoomanim",{center:s,zoom:t.getScaleZoom(this._scale)}),t._tileBg.style[e.DomUtil.TRANSFORM]=e.DomUtil.getTranslateString(this._delta)+" "+e.DomUtil.getScaleString(this._scale,this._startCenter)},_onTouchEnd:function(){if(this._moved&&this._zooming){var t=this._map;this._zooming=!1,e.DomUtil.removeClass(t._mapPane,"leaflet-touching"),e.DomEvent.off(i,"touchmove",this._onTouchMove).off(i,"touchend",this._onTouchEnd);var s=this._getScaleOrigin(),o=t.layerPointToLatLng(s),n=t.getZoom(),a=t.getScaleZoom(this._scale)-n,r=a>0?Math.ceil(a):Math.floor(a),h=t._limitZoom(n+r);t.fire("zoomanim",{center:o,zoom:h}),t._runAnimation(o,h,t.getZoomScale(h)/this._scale,s,!0)}},_getScaleOrigin:function(){var t=this._centerOffset.subtract(this._delta).divideBy(this._scale);return this._startCenter.add(t)}}),e.Map.addInitHook("addHandler","touchZoom",e.Map.TouchZoom),e.Map.mergeOptions({boxZoom:!0}),e.Map.BoxZoom=e.Handler.extend({initialize:function(t){this._map=t,this._container=t._container,this._pane=t._panes.overlayPane},addHooks:function(){e.DomEvent.on(this._container,"mousedown",this._onMouseDown,this)},removeHooks:function(){e.DomEvent.off(this._container,"mousedown",this._onMouseDown)},_onMouseDown:function(t){return!t.shiftKey||1!==t.which&&1!==t.button?!1:(e.DomUtil.disableTextSelection(),this._startLayerPoint=this._map.mouseEventToLayerPoint(t),this._box=e.DomUtil.create("div","leaflet-zoom-box",this._pane),e.DomUtil.setPosition(this._box,this._startLayerPoint),this._container.style.cursor="crosshair",e.DomEvent.on(i,"mousemove",this._onMouseMove,this).on(i,"mouseup",this._onMouseUp,this).preventDefault(t),this._map.fire("boxzoomstart"),s)},_onMouseMove:function(t){var i=this._startLayerPoint,s=this._box,o=this._map.mouseEventToLayerPoint(t),n=o.subtract(i),a=new e.Point(Math.min(o.x,i.x),Math.min(o.y,i.y));e.DomUtil.setPosition(s,a),s.style.width=Math.max(0,Math.abs(n.x)-4)+"px",s.style.height=Math.max(0,Math.abs(n.y)-4)+"px"},_onMouseUp:function(t){this._pane.removeChild(this._box),this._container.style.cursor="",e.DomUtil.enableTextSelection(),e.DomEvent.off(i,"mousemove",this._onMouseMove).off(i,"mouseup",this._onMouseUp);var s=this._map,o=s.mouseEventToLayerPoint(t);if(!this._startLayerPoint.equals(o)){var n=new e.LatLngBounds(s.layerPointToLatLng(this._startLayerPoint),s.layerPointToLatLng(o));s.fitBounds(n),s.fire("boxzoomend",{boxZoomBounds:n})}}}),e.Map.addInitHook("addHandler","boxZoom",e.Map.BoxZoom),e.Map.mergeOptions({keyboard:!0,keyboardPanOffset:80,keyboardZoomOffset:1}),e.Map.Keyboard=e.Handler.extend({keyCodes:{left:[37],right:[39],down:[40],up:[38],zoomIn:[187,107,61],zoomOut:[189,109,173]},initialize:function(t){this._map=t,this._setPanOffset(t.options.keyboardPanOffset),this._setZoomOffset(t.options.keyboardZoomOffset)},addHooks:function(){var t=this._map._container;-1===t.tabIndex&&(t.tabIndex="0"),e.DomEvent.on(t,"focus",this._onFocus,this).on(t,"blur",this._onBlur,this).on(t,"mousedown",this._onMouseDown,this),this._map.on("focus",this._addHooks,this).on("blur",this._removeHooks,this)},removeHooks:function(){this._removeHooks();var t=this._map._container;e.DomEvent.off(t,"focus",this._onFocus,this).off(t,"blur",this._onBlur,this).off(t,"mousedown",this._onMouseDown,this),this._map.off("focus",this._addHooks,this).off("blur",this._removeHooks,this)},_onMouseDown:function(){this._focused||this._map._container.focus()},_onFocus:function(){this._focused=!0,this._map.fire("focus")},_onBlur:function(){this._focused=!1,this._map.fire("blur")},_setPanOffset:function(t){var i,s,e=this._panKeys={},o=this.keyCodes;for(i=0,s=o.left.length;s>i;i++)e[o.left[i]]=[-1*t,0];for(i=0,s=o.right.length;s>i;i++)e[o.right[i]]=[t,0];for(i=0,s=o.down.length;s>i;i++)e[o.down[i]]=[0,t];for(i=0,s=o.up.length;s>i;i++)e[o.up[i]]=[0,-1*t]},_setZoomOffset:function(t){var i,s,e=this._zoomKeys={},o=this.keyCodes;for(i=0,s=o.zoomIn.length;s>i;i++)e[o.zoomIn[i]]=t;for(i=0,s=o.zoomOut.length;s>i;i++)e[o.zoomOut[i]]=-t},_addHooks:function(){e.DomEvent.on(i,"keydown",this._onKeyDown,this)},_removeHooks:function(){e.DomEvent.off(i,"keydown",this._onKeyDown,this)},_onKeyDown:function(t){var i=t.keyCode,s=this._map;if(this._panKeys.hasOwnProperty(i))s.panBy(this._panKeys[i]),s.options.maxBounds&&s.panInsideBounds(s.options.maxBounds);else{if(!this._zoomKeys.hasOwnProperty(i))return;s.setZoom(s.getZoom()+this._zoomKeys[i])}e.DomEvent.stop(t)}}),e.Map.addInitHook("addHandler","keyboard",e.Map.Keyboard),e.Handler.MarkerDrag=e.Handler.extend({initialize:function(t){this._marker=t},addHooks:function(){var t=this._marker._icon;this._draggable||(this._draggable=new e.Draggable(t,t).on("dragstart",this._onDragStart,this).on("drag",this._onDrag,this).on("dragend",this._onDragEnd,this)),this._draggable.enable()},removeHooks:function(){this._draggable.disable()},moved:function(){return this._draggable&&this._draggable._moved},_onDragStart:function(){this._marker.closePopup().fire("movestart").fire("dragstart")},_onDrag:function(){var t=this._marker,i=t._shadow,s=e.DomUtil.getPosition(t._icon),o=t._map.layerPointToLatLng(s);i&&e.DomUtil.setPosition(i,s),t._latlng=o,t.fire("move",{latlng:o}).fire("drag")},_onDragEnd:function(){this._marker.fire("moveend").fire("dragend")}}),e.Handler.PolyEdit=e.Handler.extend({options:{icon:new e.DivIcon({iconSize:new e.Point(8,8),className:"leaflet-div-icon leaflet-editing-icon"})},initialize:function(t,i){this._poly=t,e.setOptions(this,i)},addHooks:function(){this._poly._map&&(this._markerGroup||this._initMarkers(),this._poly._map.addLayer(this._markerGroup))},removeHooks:function(){this._poly._map&&(this._poly._map.removeLayer(this._markerGroup),delete this._markerGroup,delete this._markers)},updateMarkers:function(){this._markerGroup.clearLayers(),this._initMarkers()},_initMarkers:function(){this._markerGroup||(this._markerGroup=new e.LayerGroup),this._markers=[];var t,i,s,o,n=this._poly._latlngs;for(t=0,s=n.length;s>t;t++)o=this._createMarker(n[t],t),o.on("click",this._onMarkerClick,this),this._markers.push(o);var a,r;for(t=0,i=s-1;s>t;i=t++)(0!==t||e.Polygon&&this._poly instanceof e.Polygon)&&(a=this._markers[i],r=this._markers[t],this._createMiddleMarker(a,r),this._updatePrevNext(a,r))},_createMarker:function(t,i){var s=new e.Marker(t,{draggable:!0,icon:this.options.icon});return s._origLatLng=t,s._index=i,s.on("drag",this._onMarkerDrag,this),s.on("dragend",this._fireEdit,this),this._markerGroup.addLayer(s),s},_fireEdit:function(){this._poly.fire("edit")},_onMarkerDrag:function(t){var i=t.target;e.extend(i._origLatLng,i._latlng),i._middleLeft&&i._middleLeft.setLatLng(this._getMiddleLatLng(i._prev,i)),i._middleRight&&i._middleRight.setLatLng(this._getMiddleLatLng(i,i._next)),this._poly.redraw()},_onMarkerClick:function(t){if(!(3>this._poly._latlngs.length)){var i=t.target,s=i._index;this._markerGroup.removeLayer(i),this._markers.splice(s,1),this._poly.spliceLatLngs(s,1),this._updateIndexes(s,-1),this._updatePrevNext(i._prev,i._next),i._middleLeft&&this._markerGroup.removeLayer(i._middleLeft),i._middleRight&&this._markerGroup.removeLayer(i._middleRight),i._prev&&i._next?this._createMiddleMarker(i._prev,i._next):i._prev?i._next||(i._prev._middleRight=null):i._next._middleLeft=null,this._poly.fire("edit")}},_updateIndexes:function(t,i){this._markerGroup.eachLayer(function(s){s._index>t&&(s._index+=i)})},_createMiddleMarker:function(t,i){var s,e,o,n=this._getMiddleLatLng(t,i),a=this._createMarker(n);a.setOpacity(.6),t._middleRight=i._middleLeft=a,e=function(){var e=i._index;a._index=e,a.off("click",s).on("click",this._onMarkerClick,this),n.lat=a.getLatLng().lat,n.lng=a.getLatLng().lng,this._poly.spliceLatLngs(e,0,n),this._markers.splice(e,0,a),a.setOpacity(1),this._updateIndexes(e,1),i._index++,this._updatePrevNext(t,a),this._updatePrevNext(a,i)},o=function(){a.off("dragstart",e,this),a.off("dragend",o,this), -this._createMiddleMarker(t,a),this._createMiddleMarker(a,i)},s=function(){e.call(this),o.call(this),this._poly.fire("edit")},a.on("click",s,this).on("dragstart",e,this).on("dragend",o,this),this._markerGroup.addLayer(a)},_updatePrevNext:function(t,i){t&&(t._next=i),i&&(i._prev=t)},_getMiddleLatLng:function(t,i){var s=this._poly._map,e=s.latLngToLayerPoint(t.getLatLng()),o=s.latLngToLayerPoint(i.getLatLng());return s.layerPointToLatLng(e._add(o)._divideBy(2))}}),e.Polyline.addInitHook(function(){e.Handler.PolyEdit&&(this.editing=new e.Handler.PolyEdit(this),this.options.editable&&this.editing.enable()),this.on("add",function(){this.editing&&this.editing.enabled()&&this.editing.addHooks()}),this.on("remove",function(){this.editing&&this.editing.enabled()&&this.editing.removeHooks()})}),e.Control=e.Class.extend({options:{position:"topright"},initialize:function(t){e.setOptions(this,t)},getPosition:function(){return this.options.position},setPosition:function(t){var i=this._map;return i&&i.removeControl(this),this.options.position=t,i&&i.addControl(this),this},addTo:function(t){this._map=t;var i=this._container=this.onAdd(t),s=this.getPosition(),o=t._controlCorners[s];return e.DomUtil.addClass(i,"leaflet-control"),-1!==s.indexOf("bottom")?o.insertBefore(i,o.firstChild):o.appendChild(i),this},removeFrom:function(t){var i=this.getPosition(),s=t._controlCorners[i];return s.removeChild(this._container),this._map=null,this.onRemove&&this.onRemove(t),this}}),e.control=function(t){return new e.Control(t)},e.Map.include({addControl:function(t){return t.addTo(this),this},removeControl:function(t){return t.removeFrom(this),this},_initControlPos:function(){function t(t,n){var a=s+t+" "+s+n;i[t+n]=e.DomUtil.create("div",a,o)}var i=this._controlCorners={},s="leaflet-",o=this._controlContainer=e.DomUtil.create("div",s+"control-container",this._container);t("top","left"),t("top","right"),t("bottom","left"),t("bottom","right")}}),e.Control.Zoom=e.Control.extend({options:{position:"topleft"},onAdd:function(t){var i="leaflet-control-zoom",s="leaflet-bar",o=s+"-part",n=e.DomUtil.create("div",i+" "+s);return this._map=t,this._zoomInButton=this._createButton("+","Zoom in",i+"-in "+o+" "+o+"-top",n,this._zoomIn,this),this._zoomOutButton=this._createButton("-","Zoom out",i+"-out "+o+" "+o+"-bottom",n,this._zoomOut,this),t.on("zoomend",this._updateDisabled,this),n},onRemove:function(t){t.off("zoomend",this._updateDisabled,this)},_zoomIn:function(t){this._map.zoomIn(t.shiftKey?3:1)},_zoomOut:function(t){this._map.zoomOut(t.shiftKey?3:1)},_createButton:function(t,i,s,o,n,a){var r=e.DomUtil.create("a",s,o);r.innerHTML=t,r.href="#",r.title=i;var h=e.DomEvent.stopPropagation;return e.DomEvent.on(r,"click",h).on(r,"mousedown",h).on(r,"dblclick",h).on(r,"click",e.DomEvent.preventDefault).on(r,"click",n,a),r},_updateDisabled:function(){var t=this._map,i="leaflet-control-zoom-disabled";e.DomUtil.removeClass(this._zoomInButton,i),e.DomUtil.removeClass(this._zoomOutButton,i),t._zoom===t.getMinZoom()&&e.DomUtil.addClass(this._zoomOutButton,i),t._zoom===t.getMaxZoom()&&e.DomUtil.addClass(this._zoomInButton,i)}}),e.Map.mergeOptions({zoomControl:!0}),e.Map.addInitHook(function(){this.options.zoomControl&&(this.zoomControl=new e.Control.Zoom,this.addControl(this.zoomControl))}),e.control.zoom=function(t){return new e.Control.Zoom(t)},e.Control.Attribution=e.Control.extend({options:{position:"bottomright",prefix:'Powered by Leaflet'},initialize:function(t){e.setOptions(this,t),this._attributions={}},onAdd:function(t){return this._container=e.DomUtil.create("div","leaflet-control-attribution"),e.DomEvent.disableClickPropagation(this._container),t.on("layeradd",this._onLayerAdd,this).on("layerremove",this._onLayerRemove,this),this._update(),this._container},onRemove:function(t){t.off("layeradd",this._onLayerAdd).off("layerremove",this._onLayerRemove)},setPrefix:function(t){return this.options.prefix=t,this._update(),this},addAttribution:function(t){return t?(this._attributions[t]||(this._attributions[t]=0),this._attributions[t]++,this._update(),this):s},removeAttribution:function(t){return t?(this._attributions[t]--,this._update(),this):s},_update:function(){if(this._map){var t=[];for(var i in this._attributions)this._attributions.hasOwnProperty(i)&&this._attributions[i]&&t.push(i);var s=[];this.options.prefix&&s.push(this.options.prefix),t.length&&s.push(t.join(", ")),this._container.innerHTML=s.join(" — ")}},_onLayerAdd:function(t){t.layer.getAttribution&&this.addAttribution(t.layer.getAttribution())},_onLayerRemove:function(t){t.layer.getAttribution&&this.removeAttribution(t.layer.getAttribution())}}),e.Map.mergeOptions({attributionControl:!0}),e.Map.addInitHook(function(){this.options.attributionControl&&(this.attributionControl=(new e.Control.Attribution).addTo(this))}),e.control.attribution=function(t){return new e.Control.Attribution(t)},e.Control.Scale=e.Control.extend({options:{position:"bottomleft",maxWidth:100,metric:!0,imperial:!0,updateWhenIdle:!1},onAdd:function(t){this._map=t;var i="leaflet-control-scale",s=e.DomUtil.create("div",i),o=this.options;return this._addScales(o,i,s),t.on(o.updateWhenIdle?"moveend":"move",this._update,this),t.whenReady(this._update,this),s},onRemove:function(t){t.off(this.options.updateWhenIdle?"moveend":"move",this._update,this)},_addScales:function(t,i,s){t.metric&&(this._mScale=e.DomUtil.create("div",i+"-line",s)),t.imperial&&(this._iScale=e.DomUtil.create("div",i+"-line",s))},_update:function(){var t=this._map.getBounds(),i=t.getCenter().lat,s=6378137*Math.PI*Math.cos(i*Math.PI/180),e=s*(t.getNorthEast().lng-t.getSouthWest().lng)/180,o=this._map.getSize(),n=this.options,a=0;o.x>0&&(a=e*(n.maxWidth/o.x)),this._updateScales(n,a)},_updateScales:function(t,i){t.metric&&i&&this._updateMetric(i),t.imperial&&i&&this._updateImperial(i)},_updateMetric:function(t){var i=this._getRoundNum(t);this._mScale.style.width=this._getScaleWidth(i/t)+"px",this._mScale.innerHTML=1e3>i?i+" m":i/1e3+" km"},_updateImperial:function(t){var i,s,e,o=3.2808399*t,n=this._iScale;o>5280?(i=o/5280,s=this._getRoundNum(i),n.style.width=this._getScaleWidth(s/i)+"px",n.innerHTML=s+" mi"):(e=this._getRoundNum(o),n.style.width=this._getScaleWidth(e/o)+"px",n.innerHTML=e+" ft")},_getScaleWidth:function(t){return Math.round(this.options.maxWidth*t)-10},_getRoundNum:function(t){var i=Math.pow(10,(Math.floor(t)+"").length-1),s=t/i;return s=s>=10?10:s>=5?5:s>=3?3:s>=2?2:1,i*s}}),e.control.scale=function(t){return new e.Control.Scale(t)},e.Control.Layers=e.Control.extend({options:{collapsed:!0,position:"topright",autoZIndex:!0},initialize:function(t,i,s){e.setOptions(this,s),this._layers={},this._lastZIndex=0,this._handlingClick=!1;for(var o in t)t.hasOwnProperty(o)&&this._addLayer(t[o],o);for(o in i)i.hasOwnProperty(o)&&this._addLayer(i[o],o,!0)},onAdd:function(t){return this._initLayout(),this._update(),t.on("layeradd",this._onLayerChange,this).on("layerremove",this._onLayerChange,this),this._container},onRemove:function(t){t.off("layeradd",this._onLayerChange).off("layerremove",this._onLayerChange)},addBaseLayer:function(t,i){return this._addLayer(t,i),this._update(),this},addOverlay:function(t,i){return this._addLayer(t,i,!0),this._update(),this},removeLayer:function(t){var i=e.stamp(t);return delete this._layers[i],this._update(),this},_initLayout:function(){var t="leaflet-control-layers",i=this._container=e.DomUtil.create("div",t);e.Browser.touch?e.DomEvent.on(i,"click",e.DomEvent.stopPropagation):(e.DomEvent.disableClickPropagation(i),e.DomEvent.on(i,"mousewheel",e.DomEvent.stopPropagation));var s=this._form=e.DomUtil.create("form",t+"-list");if(this.options.collapsed){e.DomEvent.on(i,"mouseover",this._expand,this).on(i,"mouseout",this._collapse,this);var o=this._layersLink=e.DomUtil.create("a",t+"-toggle",i);o.href="#",o.title="Layers",e.Browser.touch?e.DomEvent.on(o,"click",e.DomEvent.stopPropagation).on(o,"click",e.DomEvent.preventDefault).on(o,"click",this._expand,this):e.DomEvent.on(o,"focus",this._expand,this),this._map.on("movestart",this._collapse,this)}else this._expand();this._baseLayersList=e.DomUtil.create("div",t+"-base",s),this._separator=e.DomUtil.create("div",t+"-separator",s),this._overlaysList=e.DomUtil.create("div",t+"-overlays",s),i.appendChild(s)},_addLayer:function(t,i,s){var o=e.stamp(t);this._layers[o]={layer:t,name:i,overlay:s},this.options.autoZIndex&&t.setZIndex&&(this._lastZIndex++,t.setZIndex(this._lastZIndex))},_update:function(){if(this._container){this._baseLayersList.innerHTML="",this._overlaysList.innerHTML="";var t=!1,i=!1;for(var s in this._layers)if(this._layers.hasOwnProperty(s)){var e=this._layers[s];this._addItem(e),i=i||e.overlay,t=t||!e.overlay}this._separator.style.display=i&&t?"":"none"}},_onLayerChange:function(t){var i=e.stamp(t.layer);this._layers[i]&&!this._handlingClick&&this._update()},_createRadioElement:function(t,s){var e='t;t++)i=o[t],s=this._layers[i.layerId],i.checked&&!this._map.hasLayer(s.layer)?(this._map.addLayer(s.layer),s.overlay||(e=s.layer)):!i.checked&&this._map.hasLayer(s.layer)&&this._map.removeLayer(s.layer);e&&(this._map.setZoom(this._map.getZoom()),this._map.fire("baselayerchange",{layer:e})),this._handlingClick=!1},_expand:function(){e.DomUtil.addClass(this._container,"leaflet-control-layers-expanded")},_collapse:function(){this._container.className=this._container.className.replace(" leaflet-control-layers-expanded","")}}),e.control.layers=function(t,i,s){return new e.Control.Layers(t,i,s)},e.PosAnimation=e.Class.extend({includes:e.Mixin.Events,run:function(t,i,s,o){this.stop(),this._el=t,this._inProgress=!0,this.fire("start"),t.style[e.DomUtil.TRANSITION]="all "+(s||.25)+"s cubic-bezier(0,0,"+(o||.5)+",1)",e.DomEvent.on(t,e.DomUtil.TRANSITION_END,this._onTransitionEnd,this),e.DomUtil.setPosition(t,i),e.Util.falseFn(t.offsetWidth),this._stepTimer=setInterval(e.bind(this.fire,this,"step"),50)},stop:function(){this._inProgress&&(e.DomUtil.setPosition(this._el,this._getPos()),this._onTransitionEnd(),e.Util.falseFn(this._el.offsetWidth))},_transformRe:/(-?[\d\.]+), (-?[\d\.]+)\)/,_getPos:function(){var i,s,o,n=this._el,a=t.getComputedStyle(n);return e.Browser.any3d?(o=a[e.DomUtil.TRANSFORM].match(this._transformRe),i=parseFloat(o[1]),s=parseFloat(o[2])):(i=parseFloat(a.left),s=parseFloat(a.top)),new e.Point(i,s,!0)},_onTransitionEnd:function(){e.DomEvent.off(this._el,e.DomUtil.TRANSITION_END,this._onTransitionEnd,this),this._inProgress&&(this._inProgress=!1,this._el.style[e.DomUtil.TRANSITION]="",clearInterval(this._stepTimer),this.fire("step").fire("end"))}}),e.Map.include({setView:function(t,i,s){i=this._limitZoom(i);var e=this._zoom!==i;if(this._loaded&&!s&&this._layers){this._panAnim&&this._panAnim.stop();var o=e?this._zoomToIfClose&&this._zoomToIfClose(t,i):this._panByIfClose(t);if(o)return clearTimeout(this._sizeTimer),this}return this._resetView(t,i),this},panBy:function(t,i,s){if(t=e.point(t),!t.x&&!t.y)return this;this._panAnim||(this._panAnim=new e.PosAnimation,this._panAnim.on({step:this._onPanTransitionStep,end:this._onPanTransitionEnd},this)),this.fire("movestart"),e.DomUtil.addClass(this._mapPane,"leaflet-pan-anim");var o=e.DomUtil.getPosition(this._mapPane).subtract(t)._round();return this._panAnim.run(this._mapPane,o,i||.25,s),this},_onPanTransitionStep:function(){this.fire("move")},_onPanTransitionEnd:function(){e.DomUtil.removeClass(this._mapPane,"leaflet-pan-anim"),this.fire("moveend")},_panByIfClose:function(t){var i=this._getCenterOffset(t)._floor();return this._offsetIsWithinView(i)?(this.panBy(i),!0):!1},_offsetIsWithinView:function(t,i){var s=i||1,e=this.getSize();return Math.abs(t.x)<=e.x*s&&Math.abs(t.y)<=e.y*s}}),e.PosAnimation=e.DomUtil.TRANSITION?e.PosAnimation:e.PosAnimation.extend({run:function(t,i,s,o){this.stop(),this._el=t,this._inProgress=!0,this._duration=s||.25,this._easeOutPower=1/Math.max(o||.5,.2),this._startPos=e.DomUtil.getPosition(t),this._offset=i.subtract(this._startPos),this._startTime=+new Date,this.fire("start"),this._animate()},stop:function(){this._inProgress&&(this._step(),this._complete())},_animate:function(){this._animId=e.Util.requestAnimFrame(this._animate,this),this._step()},_step:function(){var t=+new Date-this._startTime,i=1e3*this._duration;i>t?this._runFrame(this._easeOut(t/i)):(this._runFrame(1),this._complete())},_runFrame:function(t){var i=this._startPos.add(this._offset.multiplyBy(t));e.DomUtil.setPosition(this._el,i),this.fire("step")},_complete:function(){e.Util.cancelAnimFrame(this._animId),this._inProgress=!1,this.fire("end")},_easeOut:function(t){return 1-Math.pow(1-t,this._easeOutPower)}}),e.Map.mergeOptions({zoomAnimation:e.DomUtil.TRANSITION&&!e.Browser.android23&&!e.Browser.mobileOpera}),e.DomUtil.TRANSITION&&e.Map.addInitHook(function(){e.DomEvent.on(this._mapPane,e.DomUtil.TRANSITION_END,this._catchTransitionEnd,this)}),e.Map.include(e.DomUtil.TRANSITION?{_zoomToIfClose:function(t,i){if(this._animatingZoom)return!0;if(!this.options.zoomAnimation)return!1;var s=this.getZoomScale(i),o=this._getCenterOffset(t)._divideBy(1-1/s);if(!this._offsetIsWithinView(o,1))return!1;e.DomUtil.addClass(this._mapPane,"leaflet-zoom-anim"),this.fire("movestart").fire("zoomstart"),this.fire("zoomanim",{center:t,zoom:i});var n=this._getCenterLayerPoint().add(o);return this._prepareTileBg(),this._runAnimation(t,i,s,n),!0},_catchTransitionEnd:function(){this._animatingZoom&&this._onZoomTransitionEnd()},_runAnimation:function(t,i,s,o,n){this._animateToCenter=t,this._animateToZoom=i,this._animatingZoom=!0,e.Draggable&&(e.Draggable._disabled=!0);var a=e.DomUtil.TRANSFORM,r=this._tileBg;clearTimeout(this._clearTileBgTimer),e.Util.falseFn(r.offsetWidth);var h=e.DomUtil.getScaleString(s,o),l=r.style[a];r.style[a]=n?l+" "+h:h+" "+l},_prepareTileBg:function(){var t=this._tilePane,i=this._tileBg;if(i&&this._getLoadedTilesPercentage(i)>.5&&.5>this._getLoadedTilesPercentage(t))return t.style.visibility="hidden",t.empty=!0,this._stopLoadingImages(t),s;i||(i=this._tileBg=this._createPane("leaflet-tile-pane",this._mapPane),i.style.zIndex=1),i.style[e.DomUtil.TRANSFORM]="",i.style.visibility="hidden",i.empty=!0,t.empty=!1,this._tilePane=this._panes.tilePane=i;var o=this._tileBg=t;e.DomUtil.addClass(o,"leaflet-zoom-animated"),this._stopLoadingImages(o)},_getLoadedTilesPercentage:function(t){var i,s,e=t.getElementsByTagName("img"),o=0;for(i=0,s=e.length;s>i;i++)e[i].complete&&o++;return o/s},_stopLoadingImages:function(t){var i,s,o,n=Array.prototype.slice.call(t.getElementsByTagName("img"));for(i=0,s=n.length;s>i;i++)o=n[i],o.complete||(o.onload=e.Util.falseFn,o.onerror=e.Util.falseFn,o.src=e.Util.emptyImageUrl,o.parentNode.removeChild(o))},_onZoomTransitionEnd:function(){this._restoreTileFront(),e.DomUtil.removeClass(this._mapPane,"leaflet-zoom-anim"),e.Util.falseFn(this._tileBg.offsetWidth),this._animatingZoom=!1,this._resetView(this._animateToCenter,this._animateToZoom,!0,!0),e.Draggable&&(e.Draggable._disabled=!1)},_restoreTileFront:function(){this._tilePane.innerHTML="",this._tilePane.style.visibility="",this._tilePane.style.zIndex=2,this._tileBg.style.zIndex=1},_clearTileBg:function(){this._animatingZoom||this.touchZoom._zooming||(this._tileBg.innerHTML="")}}:{}),e.Map.include({_defaultLocateOptions:{watch:!1,setView:!1,maxZoom:1/0,timeout:1e4,maximumAge:0,enableHighAccuracy:!1},locate:function(t){if(t=this._locationOptions=e.extend(this._defaultLocateOptions,t),!navigator.geolocation)return this._handleGeolocationError({code:0,message:"Geolocation not supported."}),this;var i=e.bind(this._handleGeolocationResponse,this),s=e.bind(this._handleGeolocationError,this);return t.watch?this._locationWatchId=navigator.geolocation.watchPosition(i,s,t):navigator.geolocation.getCurrentPosition(i,s,t),this},stopLocate:function(){return navigator.geolocation&&navigator.geolocation.clearWatch(this._locationWatchId),this},_handleGeolocationError:function(t){var i=t.code,s=t.message||(1===i?"permission denied":2===i?"position unavailable":"timeout");this._locationOptions.setView&&!this._loaded&&this.fitWorld(),this.fire("locationerror",{code:i,message:"Geolocation error: "+s+"."})},_handleGeolocationResponse:function(t){var i=180*t.coords.accuracy/4e7,s=2*i,o=t.coords.latitude,n=t.coords.longitude,a=new e.LatLng(o,n),r=new e.LatLng(o-i,n-s),h=new e.LatLng(o+i,n+s),l=new e.LatLngBounds(r,h),c=this._locationOptions;if(c.setView){var m=Math.min(this.getBoundsZoom(l),c.maxZoom);this.setView(a,m)}this.fire("locationfound",{latlng:a,bounds:l,accuracy:t.coords.accuracy})}})}(this,document),L.Proj={},L.Proj._isProj4Proj=function(t){return t.projName!==void 0},L.Proj.Projection=L.Class.extend({initialize:function(t,i){if(L.Proj._isProj4Proj(t))this._proj=t;else{var s=t;Proj4js.defs[s]=i,this._proj=new Proj4js.Proj(s)}},project:function(t){var i=new L.Point(t.lng,t.lat);return Proj4js.transform(Proj4js.WGS84,this._proj,i)},unproject:function(t,i){var s=Proj4js.transform(this._proj,Proj4js.WGS84,t.clone());return new L.LatLng(s.y,s.x,i)}}),L.Proj.CRS=L.Class.extend({includes:L.CRS,options:{transformation:new L.Transformation(1,0,-1,0)},initialize:function(t,i,s){var e,o,n,a;L.Proj._isProj4Proj(t)?(o=t,e=o.srsCode,a=i||{},this.projection=new L.Proj.Projection(o)):(e=t,n=i,a=s||{},this.projection=new L.Proj.Projection(e,n)),L.Util.setOptions(this,a),this.code=e,this.transformation=this.options.transformation,this.options.origin&&(this.transformation=new L.Transformation(1,-this.options.origin[0],-1,this.options.origin[1])),this.options.scales?this.scale=function(t){return this.options.scales[t]}:this.options.resolutions&&(this.scale=function(t){return 1/this.options.resolutions[t]})}}),L.Proj.CRS.TMS=L.Proj.CRS.extend({initialize:function(t,i,s,e){if(L.Proj._isProj4Proj(t)){var o=t,n=i,a=s||{};a.origin=[n[0],n[3]],L.Proj.CRS.prototype.initialize(o,a)}else{var r=t,h=i,n=s,a=e||{};a.origin=[n[0],n[3]],L.Proj.CRS.prototype.initialize(r,h,a)}this.projectedBounds=n}}),L.Proj.TileLayer={},L.Proj.TileLayer.TMS=L.TileLayer.extend({options:{tms:!0,continuousWorld:!0},initialize:function(t,i,s){if(!(i instanceof L.Proj.CRS.TMS))throw Error("CRS is not L.Proj.CRS.TMS.");L.TileLayer.prototype.initialize.call(this,t,s),this.crs=i;for(var e=this.options.minZoom;this.options.maxZoom>e;e++){var o=(this.crs.projectedBounds[3]-this.crs.projectedBounds[1])/this._projectedTileSize(e);if(Math.abs(o-Math.round(o))>.001)throw Error("Projected bounds does not match grid at zoom "+e)}},getTileUrl:function(t){var i=Math.round((this.crs.projectedBounds[3]-this.crs.projectedBounds[1])/this._projectedTileSize(this._map.getZoom()));return L.Util.template(this._url,L.Util.extend({s:this._getSubdomain(t),z:this._getZoomForUrl(),x:t.x,y:i-t.y-1},this.options))},_projectedTileSize:function(t){return this.options.tileSize/this.crs.scale(t)}}),"undefined"!=typeof module&&(module.exports=L.Proj),"undefined"!=typeof L&&L.CRS!==void 0&&(L.CRS.proj4js=function(){return function(t,i,s,e){return e=e||{},s&&(e.transformation=s),new L.Proj.CRS(t,i,e)}}()),L.Control.MousePosition=L.Control.extend({options:{position:"bottomleft",separator:" : ",emptyString:"Unavailable",lngFirst:!1,numDigits:5,lngFormatter:void 0,latFormatter:void 0},onAdd:function(t){return this._container=L.DomUtil.create("div","leaflet-control-mouseposition"),L.DomEvent.disableClickPropagation(this._container),t.on("mousemove",this._onMouseMove,this),this._container.innerHTML=this.options.emptyString,this._container},onRemove:function(t){t.off("mousemove",this._onMouseMove)},_onMouseMove:function(t){var i=L.Util.formatNum(t.latlng.lng,this.options.numDigits),s=L.Util.formatNum(t.latlng.lat,this.options.numDigits);this.options.lngFormatter&&(i=this.options.lngFormatter(i)),this.options.latFormatter&&(s=this.options.latFormatter(s));var e=this.options.lngFirst?i+this.options.separator+s:s+this.options.separator+i;this._container.innerHTML=e}}),L.Map.mergeOptions({positionControl:!1}),L.Map.addInitHook(function(){this.options.positionControl&&(this.positionControl=new L.Control.MousePosition,this.addControl(this.positionControl))}),L.control.mousePosition=function(t){return new L.Control.MousePosition(t)},function(t,i){L.KSP={},L.KSP.version="0.2.1",L.KSP.CRS={},L.KSP.CRS.EPSG4326=new L.Proj.CRS.TMS(new Proj4js.Proj("EPSG:4326"),[-180,-90,180,90],{resolutions:[.703125,.3515625,.17578125,.087890625,.0439453125,.02197265625]}),L.KSP.CelestialBody=L.Class.extend({initialize:function(t){if(!t.hasOwnProperty("id"))throw Error("must specify id");if(!t.hasOwnProperty("name"))throw Error("must specify name");if(t.hasOwnProperty("crs")){if(!(t.crs instanceof L.Proj.CRS.TMS))throw Error("crs is not an instance of L.Proj.CRS.TMS")}else this.crs=L.KSP.CRS.EPSG4326;t.hasOwnProperty("radius")||(this.radius=1),t.hasOwnProperty("thumbnail")||(this.thumbnail="body-unknown.png"),t.hasOwnProperty("baseLayers")||(this.baseLayers={}),L.Util.extend(this,t)},addTo:function(t){var i,s=t._body;if(t._body=this,t.fire("bodychangestart",{body:this,oldBody:s}),s){for(i in s.baseLayers)s.baseLayers.hasOwnProperty(i)&&t.removeLayer(s.baseLayers[i]);for(i in s.overlays)s.overlays.hasOwnProperty(i)&&t.removeLayer(s.overlays[i])}var e=this.defaultLayer||this.baseLayers.Satellite;if(e){for(i in this.baseLayers)if(this.baseLayers.hasOwnProperty(i)&&this.baseLayers[i]._type===t._baseLayerType){e=this.baseLayers[i];break}t.addLayer(e),t.fire("baselayerchange",{layer:e})}for(i in this.overlays)this.overlays.hasOwnProperty(i)&&t._overlayTypes.indexOf(this.overlays[i]._type)>=0&&(t.addLayer(this.overlays[i]),t.fire("layeradd",{layer:this.overlays[i]}));t.fire("bodychangeend",{body:this,oldBody:s})},onAdd:function(t){this.addTo(t)},removeFrom:function(t){L.KSP.CelestialBody.DUMMY.addTo(t)},onRemove:function(t){this.removeFrom(t)}}),L.KSP.celestialBody=function(t){return new L.KSP.CelestialBody(t)},L.KSP.CelestialBody.DUMMY=L.KSP.celestialBody({id:"",name:"",crs:L.KSP.CRS.EPSG4326}),L.KSP.CelestialBody.ALL_PLANETARY=[L.KSP.CelestialBody.DUMMY],L.KSP.Map=L.Map.extend({options:{crs:L.KSP.CRS.EPSG4326,continuousWorld:!0},initialize:function(t,i){this._baseLayerType=-1,this._overlayTypes=[],L.Util.setOptions(this,i),this.startTrackingLayerState(),this.on("bodychangestart",this._onBodyChangeStart).on("bodychangeend",this._onBodyChangeEnd),L.Map.prototype.initialize.call(this,t,this.options)},clampZoom:function(){var t=this.getZoom(),i=this.getMinZoom(),s=this.getMaxZoom();i>t?this.setZoom(i):t>s?this.setZoom(s):this.fire("zoomend",this)},_onBodyChangeStart:function(){this.stopTrackingLayerState()},_onBodyChangeEnd:function(){this.clampZoom(),this.startTrackingLayerState()},_onLayerStateChange:function(t){if("layeradd"===t.type)t.layer instanceof L.KSP.TileLayer?this._baseLayerType=t.layer._type:t.layer instanceof L.KSP.LayerGroup&&0>this._overlayTypes.indexOf(t.layer._type)&&this._overlayTypes.push(t.layer._type);else if(t.layer instanceof L.KSP.LayerGroup){var i,s,e=t.layer._type,o=this._overlayTypes;for(i=o.length-1;i>=0;i--)s=o[i],s===e&&o.splice(i,1)}},startTrackingLayerState:function(){this.on("layeradd",this._onLayerStateChange).on("layerremove",this._onLayerStateChange)},stopTrackingLayerState:function(){this.off("layeradd",this._onLayerStateChange).off("layerremove",this._onLayerStateChange)}}),L.KSP.map=function(t,i){return new L.KSP.Map(t,i)},L.KSP.TileLayer=L.Proj.TileLayer.TMS.extend({statics:{TYPE_SATELLITE:0,TYPE_COLORRELIEF:1,TYPE_SLOPE:2,DEFAULT_URL:"http://tiles.kerbalmaps.com/{body}/{style}/{z}/{x}/{y}.png"},options:{continuousWorld:!1,noWrap:!1,minZoom:0,maxZoom:5,attribution:"Map data © Joel Pedraza"},initialize:function(t,i,s,e){L.Util.setOptions(this,e),this._type=t,L.Proj.TileLayer.TMS.prototype.initialize.call(this,i,s,this.options)}}),L.KSP.tileLayer=function(t,i,s,e){return new L.KSP.TileLayer(t,i,s,e)},L.KSP.LayerGroup=L.LayerGroup.extend({statics:{TYPE_SPACECENTER:0,TYPE_ANOMALY:1},initialize:function(t,i){this._type=t,L.LayerGroup.prototype.initialize.call(this,i)}}),L.KSP.layerGroup=function(t,i){return new L.KSP.LayerGroup(t,i)},L.KSP.Icon={},L.KSP.Icon.SPACECENTER=new L.Icon({iconUrl:"../assets/images/markers-spacecenter.png",shadowUrl:"../assets/images/markers-shadow.png",iconSize:[30,40],shadowSize:[35,16],iconAnchor:[15,40],shadowAnchor:[10,12],popupAnchor:[0,-35]}),L.KSP.Icon.ANOMALY=new L.Icon({iconUrl:"../assets/images/markers-anomaly.png",shadowUrl:"../assets/images/markers-shadow.png",iconSize:[30,40],shadowSize:[35,16],iconAnchor:[15,40],shadowAnchor:[10,12],popupAnchor:[0,-35]}),L.KSP.Legend={},L.KSP.Legend.SLOPE={"≥ 60°":"#E19678","< 60°":"#C86464","< 30°":"#965A64","< 15°":"#645064","< 5°":"#325064","0°":"#32465A"},L.KSP.Control=L.KSP.control={},L.KSP.Control.Legend=L.Control.extend({options:{position:"bottomright"},onAdd:function(t){return this._container=L.DomUtil.create("div","leaflet-control-legend"),t.on("baselayerchange",this._onLayerChange,this),this._container},_update:function(t){if(this._container.innerHTML="",t){for(var i in t)t.hasOwnProperty(i)&&(this._container.innerHTML+=''+i+"
    ");L.DomUtil.addClass(this._container,"leaflet-control-legend-visible")}else this._container.className=this._container.className.replace(" leaflet-control-legend-visible","")},_onLayerChange:function(t){this._update(t.layer.options.legend)}}),L.Map.mergeOptions({legendControl:!0}),L.Map.addInitHook(function(){this.options.bodyControl&&(this.legendControl=new L.KSP.Control.Legend,this.addControl(this.legendControl))}),L.control.legend=function(t){return new L.KSP.Control.Legend(t)},L.KSP.Control.Scale=L.Control.Scale.extend({options:{imperial:!1},onAdd:function(t){this._radius=0,t._body&&(this._radius=t._body.radius);var i=L.Control.Scale.prototype.onAdd.call(this,t);return t.on("bodychangeend",this._onBodyChangeEnd,this),i},onRemove:function(t){L.Control.Scale.prototype.onRemove.call(this,t),t.off("bodychangeend",this._onBodyChangeEnd)},_onBodyChangeEnd:function(t){this._radius=t.body.radius,this._update()},_update:function(){var t=this._map.getBounds(),i=t.getCenter().lat,s=this._radius*Math.PI*Math.cos(i*Math.PI/180),e=s*(t.getNorthEast().lng-t.getSouthWest().lng)/180,o=this._map.getSize(),n=this.options,a=0;o.x>0&&(a=e*(n.maxWidth/o.x)),this._updateScales(n,a)}}),L.KSP.Map.mergeOptions({scaleControl:!1}),L.KSP.Map.addInitHook(function(){this.options.scaleControl&&(this.scaleControl=new L.KSP.Control.Scale,this.addControl(this.scaleControl))}),L.KSP.control.scale=function(t){return new L.KSP.Control.Scale(t)},L.KSP.Control.CelestialBody=L.Control.extend({options:{position:"topright",collapsed:!0},initialize:function(t,i){L.Util.setOptions(this,i),this._bodies=t,this._timeInMillis=(new Date).valueOf(),this._weekInMillis=6048e5},onAdd:function(){return this._initLayout(),this._update(),this._map.on("bodychangeend",this._update,this),this._container},_initLayout:function(){var t="leaflet-control-celestialbodies",s=this._container=L.DomUtil.create("div",t),e=this._bodies;if(this.options.collapsed){L.DomEvent.on(s,"mouseover",this._expand,this).on(s,"mouseout",this._collapse,this);var o=this._bodiesLink=L.DomUtil.create("a",t+"-toggle",s);o.href="#",o.title="Celestial Bodies",L.DomEvent.on(o,"focus",this._expand,this),this._map.on("movestart",this._collapse,this)}var n=this._list=L.DomUtil.create("ul",t+"-list",s);for(var a in e)if(e.hasOwnProperty(a)){var r=this._addBody(e[a],n);if(e[a].children){var h=i.createElement("ul");for(var l in e[a].children)e[a].children.hasOwnProperty(l)&&this._addBody(e[a].children[l],h);r.appendChild(h)}}},_update:function(){this._map._body&&(this._bodiesLink.style.backgroundImage='url("'+this._map._body.thumbnail+'")')},_addBody:function(t,s){var e,o=i.createElement("li"),n=i.createElement("img");if(n.src=t.thumbnail,n.alt=o.title=t.name,t.addedOn){this._timeInMillis-t.addedOnKerbal Space Center
    -0.0969 : -74.6004"),L.marker([20.5829,-146.5116],{icon:L.KSP.Icon.SPACECENTER}).bindPopup("Kerbal Space Center 2
    20.5829 : -146.5116"),L.marker([-1.5409,-71.9099],{icon:L.KSP.Icon.SPACECENTER}).bindPopup("Island Airfield
    -1.5409 : -71.9099")]),Anomalies:L.KSP.layerGroup(L.KSP.LayerGroup.TYPE_ANOMALY,[L.marker([.1023,-74.5684],{icon:L.KSP.Icon.ANOMALY}).bindPopup("0.1023 : -74.5684"),L.marker([20.6709,-146.4968],{icon:L.KSP.Icon.ANOMALY}).bindPopup("20.6709 : -146.4968"),L.marker([35.5705,-74.9773],{icon:L.KSP.Icon.ANOMALY}).bindPopup("35.5705 : -74.9773"),L.marker([-.6402,-80.7668],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-0.6402 : -80.7668"),L.marker([-28.8083,-13.4401],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-28.8083 : -13.4401"),L.marker([-6.5057,-141.6856],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-6.5057 : -141.6856"),L.marker([81.9551,-128.518],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-81.9551 : -128.518")])}}),L.KSP.CelestialBody.MUN=L.KSP.celestialBody({id:"mun",name:"Mun",crs:L.KSP.CRS.EPSG4326,radius:2e5,addedOn:13682304e5,lastUpdated:1368144e6,thumbnail:"body-mun.png",baseLayers:{Satellite:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SATELLITE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{body:"mun",style:"sat"}),"Color Relief":L.KSP.tileLayer(L.KSP.TileLayer.TYPE_COLORRELIEF,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{body:"mun",style:"color",legend:{"3150 m":"#EBEBEB","-180 m":"#232323"}}),Slope:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SLOPE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{body:"mun",style:"slope",legend:L.KSP.Legend.SLOPE})},overlays:{Anomalies:L.KSP.layerGroup(L.KSP.LayerGroup.TYPE_ANOMALY,[L.marker([-9.8314,25.9177],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-9.8314 : 25.9177"),L.marker([-82.2063,102.9305],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-82.2063 : 102.9305"),L.marker([57.6604,9.1422],{icon:L.KSP.Icon.ANOMALY}).bindPopup("57.6604 : 9.1422"),L.marker([2.4695,81.5133],{icon:L.KSP.Icon.ANOMALY}).bindPopup("2.4695 : 81.5133"),L.marker([12.4432,39.178],{icon:L.KSP.Icon.ANOMALY}).bindPopup("12.4432 : 39.1780"),L.marker([-12.4431,-140.822],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-12.4431 : -140.8220"),L.marker([.7027,22.747],{icon:L.KSP.Icon.ANOMALY}).bindPopup("0.7027 : 22.7470"),L.marker([-70.9556,-68.1378],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-70.9556,-68.1378")])}}),L.KSP.CelestialBody.MINMUS=L.KSP.celestialBody({id:"minmus",name:"Minmus",crs:L.KSP.CRS.EPSG4326,radius:6e4,addedOn:13682304e5,lastUpdated:13682304e5,thumbnail:"body-minmus.png",baseLayers:{Satellite:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SATELLITE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"sat",body:"minmus"}),"Color Relief":L.KSP.tileLayer(L.KSP.TileLayer.TYPE_COLORRELIEF,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"color",body:"minmus",legend:{"5750 m":"#414B41","2500 m":"#BEE6C3","1 m":"#96CDB4","0 m":"#87B9A5"}}),Slope:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SLOPE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"slope",body:"minmus",legend:L.KSP.Legend.SLOPE})},overlays:{Anomalies:L.KSP.layerGroup(L.KSP.LayerGroup.TYPE_ANOMALY,[L.marker([23.7768,60.0462],{icon:L.KSP.Icon.ANOMALY}).bindPopup("23.7768 : 60.0462")])}}),L.KSP.CelestialBody.DUNA=L.KSP.celestialBody({id:"duna",name:"Duna",crs:L.KSP.CRS.EPSG4326,radius:32e4,addedOn:13688352e5,lastUpdated:13688352e5,thumbnail:"body-duna.png",baseLayers:{Satellite:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SATELLITE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"sat",body:"duna"}),"Color Relief":L.KSP.tileLayer(L.KSP.TileLayer.TYPE_COLORRELIEF,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"color",body:"duna",legend:{"4800 m":"#C3A082","4000 m":"#966446","3000 m":"#733219","2000 m":"#501E14","1000 m":"#3C140F","0 m":"#280F0A"}}),Slope:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SLOPE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"slope",body:"duna",legend:L.KSP.Legend.SLOPE})},overlays:{Anomalies:L.KSP.layerGroup(L.KSP.LayerGroup.TYPE_ANOMALY,[L.marker([17.0483,-85.4717],{icon:L.KSP.Icon.ANOMALY}).bindPopup("17.0483 : -85.4717"),L.marker([-30.3525,-28.6828],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-30.3525 : -28.6828"),L.marker([-66.1344,-160.7432],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-66.1344 : -160.7432")])}}),L.KSP.CelestialBody.IKE=L.KSP.celestialBody({id:"ike",name:"Ike",crs:L.KSP.CRS.EPSG4326,radius:13e4,addedOn:13688352e5,lastUpdated:13688352e5,thumbnail:"body-ike.png",baseLayers:{Satellite:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SATELLITE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"sat",body:"ike"}),"Color Relief":L.KSP.tileLayer(L.KSP.TileLayer.TYPE_COLORRELIEF,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"color",body:"ike",legend:{"13000 m":"#828282","11000 m":"#6E6E6E","9000 m":"#5A5A5A","7000 m":"#464646","5000 m":"#323232","2500 m":"#191919","70 m":"#070707"}}),Slope:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SLOPE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"slope",body:"ike",legend:L.KSP.Legend.SLOPE})},overlays:{}}),L.KSP.CelestialBody.DRES=L.KSP.celestialBody({id:"dres",name:"Dres",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-dres.png"}),L.KSP.CelestialBody.JOOL=L.KSP.celestialBody({id:"jool",name:"Jool",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-jool.png"}),L.KSP.CelestialBody.LAYTHE=L.KSP.celestialBody({id:"laythe",name:"Laythe",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-laythe.png"}),L.KSP.CelestialBody.VALL=L.KSP.celestialBody({id:"vall",name:"Vall",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-vall.png"}),L.KSP.CelestialBody.TYLO=L.KSP.celestialBody({id:"tylo",name:"Tylo",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-tylo.png"}),L.KSP.CelestialBody.BOP=L.KSP.celestialBody({id:"bop",name:"Bop",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-bop.png"}),L.KSP.CelestialBody.POL=L.KSP.celestialBody({id:"pol",name:"Pol",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-pol.png"}),L.KSP.CelestialBody.EELOO=L.KSP.celestialBody({id:"eeloo",name:"Eeloo",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-eeloo.png"}),L.KSP.CelestialBody.KERBIN.defaultLayer=L.KSP.CelestialBody.KERBIN.baseLayers.Satellite,L.KSP.CelestialBody.MUN.defaultLayer=L.KSP.CelestialBody.MUN.baseLayers.Satellite,L.KSP.CelestialBody.MINMUS.defaultLayer=L.KSP.CelestialBody.MINMUS.baseLayers.Satellite,L.KSP.CelestialBody.EVE.children=[L.KSP.CelestialBody.GILLY],L.KSP.CelestialBody.KERBIN.children=[L.KSP.CelestialBody.MUN,L.KSP.CelestialBody.MINMUS],L.KSP.CelestialBody.DUNA.children=[L.KSP.CelestialBody.IKE],L.KSP.CelestialBody.JOOL.children=[L.KSP.CelestialBody.LAYTHE,L.KSP.CelestialBody.VALL,L.KSP.CelestialBody.TYLO,L.KSP.CelestialBody.BOP,L.KSP.CelestialBody.POL],L.KSP.CelestialBody.GILLY.parent=L.KSP.CelestialBody.EVE,L.KSP.CelestialBody.MUN.parent=L.KSP.CelestialBody.MINMUS.parent=L.KSP.CelestialBody.KERBIN,L.KSP.CelestialBody.IKE.parent=L.KSP.CelestialBody.DUNA,L.KSP.CelestialBody.LAYTHE.parent=L.KSP.CelestialBody.VALL.parent=L.KSP.CelestialBody.TYLO.parent=L.KSP.CelestialBody.BOP.parent=L.KSP.CelestialBody.POL.parent=L.KSP.CelestialBody.JOOL,L.KSP.CelestialBody.ALL_PLANETARY=[L.KSP.CelestialBody.MOHO,L.KSP.CelestialBody.EVE,L.KSP.CelestialBody.KERBIN,L.KSP.CelestialBody.DUNA,L.KSP.CelestialBody.DRES,L.KSP.CelestialBody.JOOL,L.KSP.CelestialBody.EELOO],L.KSP.Map.addInitHook(function(){this.options.layers=[L.KSP.CelestialBody.KERBIN]})}(this,document);var Settings=Class.create({initialize:function(defaultHost,defaultPort){if(!this.getHost()){this.setHost(defaultHost)}if(!this.getPort()){this.setPort(defaultPort)}},getHost:function(){return this.get("host")},getPort:function(){return this.get("port")},setHost:function(value){return this.set("host",value)},setPort:function(value){return this.set("port",value)},get:function(property){return localStorage.getItem(property)},set:function(property,value){return localStorage.setItem(property,value)}});var Telemachus=Class.create({initialize:function(host,port){this.updateConnection(host,port);this.receiverFunctions=[];this.subscribedFields={};this.orbitingBodies=this.getOrbitalBodies();this.rate=500;this.loopTimeout=setTimeout(this.poll.bind(this),this.rate)},url:function(){return"http://"+this.host+":"+this.port+"/telemachus/datalink"},updateConnection:function(host,port){this.host=host;this.port=port},addReceiverFunction:function(func){this.receiverFunctions.push(func)},subscribeToData:function(fields){for(var i=fields.length-1;i>=0;i--){var field=fields[i];this.subscribedFields[field]=field}},dispatchMessages:function(data){for(var i=this.receiverFunctions.length-1;i>=0;i--){try{this.receiverFunctions[i](data)}catch(e){console.error(e)}}},send:function(message){this.socket.send(JSON.stringify(message))},getOrbitalBodyInfo:function(name){var properties=this.orbitingBodies[name];if(properties){return Object.extend({name:name},properties)}else{return null}},notifyIfLOS:function(request){if(request.transport.status==0){document.fire("telemachus:loss-of-signal");return true}return false},prepareParams:function(params){var normalizedParams=[];Object.keys(params).forEach(function(field){var sanitizedFieldName=field.replace("[","{").replace("]","}");normalizedParams.push(sanitizedFieldName+"="+field)});return normalizedParams},convertData:function(rawData){var data={};var startBracesRegexp=/\{/g;var endBracesRegexp=/\}/g;Object.keys(rawData).forEach(function(key){var convertedFieldName=key.replace(startBracesRegexp,"[").replace(endBracesRegexp,"]");data[convertedFieldName]=rawData[key]});return data},poll:function(){var params=this.prepareParams(this.subscribedFields);var requestURL=this.url()+"?"+params.join("&");new Ajax.Request(requestURL,{method:"get",onSuccess:function(response){var rawData=JSON.parse(response.responseText);var data=this.convertData(rawData);this.dispatchMessages(data)}.bind(this),onException:this.notifyIfLOS.bind(this),onComplete:function(response){setTimeout(this.poll.bind(this),this.rate)}.bind(this)})},sendMessage:function(params,callback){new Ajax.Request(this.url(),{method:"post",postBody:JSON.stringify(params),onSuccess:function(response){var rawData=JSON.parse(response.responseText);var data=this.convertData(rawData);callback(data)}.bind(this),onException:this.notifyIfLOS.bind(this)})},getOrbitalBodies:function(){return{Sun:{id:0,referenceBodyName:null,mapBody:null,atmosphericRadius:0,color:"#FFFF00",surfaceGravity:17.1},Kerbin:{id:1,referenceBodyName:"Sun",mapBody:L.KSP.CelestialBody.KERBIN,atmosphericRadius:7e4,color:"#4a5472",surfaceGravity:9.81},Mun:{id:2,referenceBodyName:"Kerbin",mapBody:L.KSP.CelestialBody.MUN,atmosphericRadius:0,color:"#e2e0d7",surfaceGravity:1.63},Minmus:{id:3,referenceBodyName:"Kerbin",mapBody:L.KSP.CelestialBody.MINMUS,color:"#98f2c5",atmosphericRadius:0,surfaceGravity:.491},Moho:{id:4,referenceBodyName:"Sun",mapBody:L.KSP.CelestialBody.MOHO,atmosphericRadius:0,color:"#fdc39e",surfaceGravity:2.7},Eve:{id:5,referenceBodyName:"Sun",mapBody:L.KSP.CelestialBody.EVE,atmosphericRadius:9e4,color:"#c394fe",surfaceGravity:16.7},Duna:{id:6,referenceBodyName:"Sun",mapBody:L.KSP.CelestialBody.DUNA,atmosphericRadius:5e4,color:"#fc5e49",surfaceGravity:2.94},Ike:{id:7,referenceBodyName:"Duna",mapBody:L.KSP.CelestialBody.IKE,atmosphericRadius:0,color:"#e2e0d7",surfaceGravity:1.1},Jool:{id:8,referenceBodyName:"Sun",mapBody:L.KSP.CelestialBody.JOOL,atmosphericRadius:2e5,color:"#C5DCAB",surfaceGravity:7.85},Laythe:{id:9,referenceBodyName:"Jool",mapBody:L.KSP.CelestialBody.LAYTHE,atmosphericRadius:5e4,color:"#a8b4fe",surfaceGravity:7.85},Vall:{id:10,referenceBodyName:"Jool",mapBody:L.KSP.CelestialBody.VALL,atmosphericRadius:0,color:"#b0f4fe",surfaceGravity:2.31},Bop:{id:11,referenceBodyName:"Jool",mapBody:L.KSP.CelestialBody.BOP,atmosphericRadius:0,color:"#c64605",surfaceGravity:.589},Tylo:{id:12,referenceBodyName:"Jool",mapBody:L.KSP.CelestialBody.TYLO,atmosphericRadius:0,color:"#fdf7ed",surfaceGravity:7.85},Gilly:{id:13,referenceBodyName:"Eve",mapBody:L.KSP.CelestialBody.GILLY,atmosphericRadius:0,color:"#fdcbb1",surfaceGravity:.049},Pol:{id:14,referenceBodyName:"Pol",mapBody:L.KSP.CelestialBody.POL,atmosphericRadius:0,color:"#fec681",surfaceGravity:.373},Dres:{id:15,referenceBodyName:"Sun",mapBody:L.KSP.CelestialBody.DRES,atmosphericRadius:0,color:"#fef8f9",surfaceGravity:1.13},Eeloo:{id:16,referenceBodyName:"Sun",mapBody:L.KSP.CelestialBody.EELOO,atmosphericRadius:0,color:"#e5fafe",surfaceGravity:1.69}}}});var TitleBar=Class.create({initialize:function(datalink,title_bar_id){this.datalink=datalink;this.title_bar_id=title_bar_id;this.title_bar=$(this.title_bar_id);this.initializeLOSNotifier();this.initializeDatalink()},update:function(data){window.requestAnimationFrame(function(){this.title_bar.down("#world-clock").update(TimeFormatters.formatUT(data["t.universalTime"]));this.title_bar.down("#mission-time").update(TimeFormatters.formatMET(data["v.missionTime"]));this.title_bar.down("#mission-time").removeClassName("loss-of-signal")}.bind(this))},initializeLOSNotifier:function(){document.observe("telemachus:loss-of-signal",function(){window.requestAnimationFrame(function(){this.title_bar.down("#mission-time").update("⚠ LOS ⚠");this.title_bar.down("#mission-time").addClassName("loss-of-signal")}.bind(this))}.bind(this))},initializeDatalink:function(){this.datalink.subscribeToData(["t.timeWarp","t.universalTime","v.missionTime"]);this.datalink.addReceiverFunction(this.update.bind(this))}});var ButtonIndicator=Class.create({initialize:function(datalink,indicatorId,apiButtonString){this.datalink=datalink;this.indicatorId=indicatorId;this.indicator=$(this.indicatorId);this.apiButtonString=apiButtonString;this.initializeDatalink()},update:function(data){if(data[this.apiButtonString]==true){this.indicator.addClassName("on")}else{this.indicator.removeClassName("on")}},initializeDatalink:function(){this.datalink.subscribeToData([this.apiButtonString]);this.datalink.addReceiverFunction(this.update.bind(this))}});var ReadoutTable=Class.create({initialize:function(datalink,tableId,dataRows){this.datalink=datalink;this.tableId=tableId;this.table=$(this.tableId);this.dataRows=dataRows;this.initializeDatalink()},update:function(data){window.requestAnimationFrame(function(){this.dataRows.forEach(function(row){var rowId=row.label;var tableRow=this.table.down("tr[data-label='"+rowId+"']");if(!tableRow){var tableRow=new Element("tr",{"data-label":rowId});tableRow.insert(""+row.label+"");this.table.insert(tableRow)}tableRow.down("td").update(row.formatter(data[row.value]))}.bind(this))}.bind(this))},initializeDatalink:function(){var dataValues=this.dataRows.map(function(dataRow){return dataRow.value});this.datalink.subscribeToData(dataValues);this.datalink.addReceiverFunction(this.update.bind(this))}});var ResourceMonitor=Class.create({initialize:function(datalink,resourceName,options){this.datalink=datalink;this.resourceName=resourceName;this.options=Object.extend({currentStageProgressBar:null,totalProgressBar:null,valuePrefix:null},options);this.resourceStrings=this.buildResourceStrings();this.initializeDatalink()},update:function(data){window.requestAnimationFrame(function(){if(this.options.totalProgressBar){this.options.totalProgressBar.value=data[this.resourceStrings.totalAvailable];this.options.totalProgressBar.max=data[this.resourceStrings.totalMax]}if(this.options.currentStageProgressBar){this.options.currentStageProgressBar.value=data[this.resourceStrings.currentStageAvailable];this.options.currentStageProgressBar.max=data[this.resourceStrings.currentStageMax]}this.updateValue("-total-value",data[this.resourceStrings.totalAvailable]);this.updateValue("-total-max",data[this.resourceStrings.totalMax]);this.updateValue("-current-stage-value",data[this.resourceStrings.currentStageAvailable]);this.updateValue("-current-stage-max",data[this.resourceStrings.currentStageMax])}.bind(this))},updateValue:function(id,value){if($(this.options.valuePrefix+id)){if(value<0){$(this.options.valuePrefix+id).update("NA")}else{$(this.options.valuePrefix+id).update(value.toFixed(2))}}},buildResourceStrings:function(){return{totalAvailable:"r.resource["+this.resourceName+"]",totalMax:"r.resourceMax["+this.resourceName+"]",currentStageAvailable:"r.resourceCurrent["+this.resourceName+"]",currentStageMax:"r.resourceCurrentMax["+this.resourceName+"]"}},initializeDatalink:function(){this.datalink.subscribeToData([this.resourceStrings.totalAvailable,this.resourceStrings.totalMax,this.resourceStrings.currentStageAvailable,this.resourceStrings.currentStageMax]);this.datalink.addReceiverFunction(this.update.bind(this))}});var DataTable=Class.create({initialize:function(tableID,dataRows){this.tableID=tableID;this.table=$(this.tableID);this.dataRows=dataRows},update:function(){window.requestAnimationFrame(function(){this.dataRows.forEach(function(row){var rowId=row.label;var tableRow=this.table.down("tr[data-label='"+rowId+"']");if(!tableRow){var tableRow=new Element("tr",{"data-label":rowId});tableRow.insert(""+row.label+"");this.table.insert(tableRow)}tableRow.down("td").update(row.value)}.bind(this))}.bind(this))},clear:function(){window.requestAnimationFrame(function(){this.dataRows=[];this.table.innerHTML=""}.bind(this))}});var AtmosphericDensityGauge=Class.create({initialize:function(datalink,gaugeID){this.datalink=datalink;this.gaugeID=gaugeID;this.gauge=$(this.gaugeID);this.initializeDatalink();this.func=function(x){return Math.log(2*x)}},update:function(data){var max=this.func(100);var value=this.func(data["v.atmosphericPressure"]*100);if(!isFinite(value)){value=0}this.gauge.value=value;this.gauge.max=max},initializeDatalink:function(){this.datalink.subscribeToData(["v.atmosphericPressure"]);this.datalink.addReceiverFunction(this.update.bind(this))}});var ThrottleGauge=Class.create({initialize:function(datalink,gaugeID){this.datalink=datalink;this.gaugeID=gaugeID;this.gauge=$(this.gaugeID);this.initializeDatalink()},update:function(data){this.gauge.value=data["f.throttle"]*100;this.gauge.max=100},initializeDatalink:function(){this.datalink.subscribeToData(["f.throttle"]);this.datalink.addReceiverFunction(this.update.bind(this))}});"use strict";var THREE={REVISION:"75"};"function"===typeof define&&define.amd?define("three",THREE):"undefined"!==typeof exports&&"undefined"!==typeof module&&(module.exports=THREE);void 0===Number.EPSILON&&(Number.EPSILON=Math.pow(2,-52));void 0===Math.sign&&(Math.sign=function(a){return 0>a?-1:0>16&255)/255;this.g=(a>>8&255)/255;this.b=(a&255)/255;return this},setRGB:function(a,b,c){this.r=a;this.g=b;this.b=c;return this},setHSL:function(){function a(a,c,d){0>d&&(d+=1);1d?c:d<2/3?a+6*(c-a)*(2/3-d):a}return function(b,c,d){b=THREE.Math.euclideanModulo(b,1);c=THREE.Math.clamp(c,0,1);d=THREE.Math.clamp(d,0,1);0===c?this.r=this.g=this.b=d:(c=.5>=d?d*(1+c):d+c-d*c,d=2*d-c,this.r=a(d,c,b+1/3),this.g=a(d,c,b),this.b=a(d,c,b-1/3));return this}}(),setStyle:function(a){function b(b){void 0!==b&&1>parseFloat(b)&&console.warn("THREE.Color: Alpha component of "+a+" will be ignored.")}var c;if(c=/^((?:rgb|hsl)a?)\(\s*([^\)]*)\)/.exec(a)){var d=c[2];switch(c[1]){case"rgb":case"rgba":if(c=/^(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(d))return this.r=Math.min(255,parseInt(c[1],10))/255,this.g=Math.min(255,parseInt(c[2],10))/255,this.b=Math.min(255,parseInt(c[3],10))/255,b(c[5]),this;if(c=/^(\d+)\%\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(d))return this.r=Math.min(100,parseInt(c[1],10))/100,this.g=Math.min(100,parseInt(c[2],10))/100,this.b=Math.min(100,parseInt(c[3],10))/100,b(c[5]),this;break;case"hsl":case"hsla":if(c=/^([0-9]*\.?[0-9]+)\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(d)){var d=parseFloat(c[1])/360,e=parseInt(c[2],10)/100,f=parseInt(c[3],10)/100;b(c[5]);return this.setHSL(d,e,f)}}}else if(c=/^\#([A-Fa-f0-9]+)$/.exec(a)){c=c[1];d=c.length;if(3===d)return this.r=parseInt(c.charAt(0)+c.charAt(0),16)/255,this.g=parseInt(c.charAt(1)+c.charAt(1),16)/255,this.b=parseInt(c.charAt(2)+c.charAt(2),16)/255,this;if(6===d)return this.r=parseInt(c.charAt(0)+c.charAt(1),16)/255,this.g=parseInt(c.charAt(2)+c.charAt(3),16)/255,this.b=parseInt(c.charAt(4)+c.charAt(5),16)/255,this}a&&0=h?k/(e+f):k/(2-e-f);switch(e){case b:g=(c-d)/k+(cf&&c>b?(c=2*Math.sqrt(1+c-f-b),this._w=(k-g)/c,this._x=.25*c,this._y=(a+e)/c,this._z=(d+h)/c):f>b?(c=2*Math.sqrt(1+f-c-b),this._w=(d-h)/c,this._x=(a+e)/c,this._y=.25*c,this._z=(g+k)/c):(c=2*Math.sqrt(1+b-c-f),this._w=(e-a)/c,this._x=(d+h)/c,this._y=(g+k)/c,this._z=.25*c);this.onChangeCallback();return this},setFromUnitVectors:function(){var a,b;return function(c,d){void 0===a&&(a=new THREE.Vector3); +Math.cosh = Math.cosh || function(x) { + return (Math.exp(x) + Math.exp(-x)) / 2; +} -b=c.dot(d)+1;1e-6>b?(b=0,Math.abs(c.x)>Math.abs(c.z)?a.set(-c.y,c.x,0):a.set(0,-c.z,c.y)):a.crossVectors(c,d);this._x=a.x;this._y=a.y;this._z=a.z;this._w=b;this.normalize();return this}}(),inverse:function(){this.conjugate().normalize();return this},conjugate:function(){this._x*=-1;this._y*=-1;this._z*=-1;this.onChangeCallback();return this},dot:function(a){return this._x*a._x+this._y*a._y+this._z*a._z+this._w*a._w},lengthSq:function(){return this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w},length:function(){return Math.sqrt(this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w)},normalize:function(){var a=this.length();0===a?(this._z=this._y=this._x=0,this._w=1):(a=1/a,this._x*=a,this._y*=a,this._z*=a,this._w*=a);this.onChangeCallback();return this},multiply:function(a,b){return void 0!==b?(console.warn("THREE.Quaternion: .multiply() now only accepts one argument. Use .multiplyQuaternions( a, b ) instead."),this.multiplyQuaternions(a,b)):this.multiplyQuaternions(this,a)},multiplyQuaternions:function(a,b){var c=a._x,d=a._y,e=a._z,f=a._w,g=b._x,h=b._y,k=b._z,l=b._w;this._x=c*l+f*g+d*k-e*h;this._y=d*l+f*h+e*g-c*k;this._z=e*l+f*k+c*h-d*g;this._w=f*l-c*g-d*h-e*k;this.onChangeCallback();return this},slerp:function(a,b){if(0===b)return this;if(1===b)return this.copy(a);var c=this._x,d=this._y,e=this._z,f=this._w,g=f*a._w+c*a._x+d*a._y+e*a._z;0>g?(this._w=-a._w,this._x=-a._x,this._y=-a._y,this._z=-a._z,g=-g):this.copy(a);if(1<=g)return this._w=f,this._x=c,this._y=d,this._z=e,this;var h=Math.sqrt(1-g*g);if(.001>Math.abs(h))return this._w=.5*(f+this._w),this._x=.5*(c+this._x),this._y=.5*(d+this._y),this._z=.5*(e+this._z),this;var k=Math.atan2(h,g),g=Math.sin((1-b)*k)/h,h=Math.sin(b*k)/h;this._w=f*g+this._w*h;this._x=c*g+this._x*h;this._y=d*g+this._y*h;this._z=e*g+this._z*h;this.onChangeCallback();return this},equals:function(a){return a._x===this._x&&a._y===this._y&&a._z===this._z&&a._w===this._w},fromArray:function(a,b){void 0===b&&(b=0);this._x=a[b];this._y=a[b+1];this._z=a[b+2];this._w=a[b+3];this.onChangeCallback();return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);a[b]=this._x;a[b+1]=this._y;a[b+2]=this._z;a[b+3]=this._w;return a},onChange:function(a){this.onChangeCallback=a;return this},onChangeCallback:function(){}};Object.assign(THREE.Quaternion,{slerp:function(a,b,c,d){return c.copy(a).slerp(b,d)},slerpFlat:function(a,b,c,d,e,f,g){var h=c[d+0],k=c[d+1],l=c[d+2];c=c[d+3];d=e[f+0];var p=e[f+1],n=e[f+2];e=e[f+3];if(c!==e||h!==d||k!==p||l!==n){f=1-g;var m=h*d+k*p+l*n+c*e,q=0<=m?1:-1,u=1-m*m;u>Number.EPSILON&&(u=Math.sqrt(u),m=Math.atan2(u,m*q),f=Math.sin(f*m)/u,g=Math.sin(g*m)/u);q*=g;h=h*f+d*q;k=k*f+p*q;l=l*f+n*q;c=c*f+e*q;f===1-g&&(g=1/Math.sqrt(h*h+k*k+l*l+c*c),h*=g,k*=g,l*=g,c*=g)}a[b]=h;a[b+1]=k;a[b+2]=l;a[b+3]=c}});THREE.Vector2=function(a,b){this.x=a||0;this.y=b||0};THREE.Vector2.prototype={constructor:THREE.Vector2,get width(){return this.x},set width(a){this.x=a},get height(){return this.y},set height(a){this.y=a},set:function(a,b){this.x=a;this.y=b;return this},setScalar:function(a){this.y=this.x=a;return this},setX:function(a){this.x=a;return this},setY:function(a){this.y=a;return this},setComponent:function(a,b){switch(a){case 0:this.x=b;break;case 1:this.y=b;break;default:throw Error("index is out of range: "+a)}},getComponent:function(a){switch(a){case 0:return this.x;case 1:return this.y;default:throw Error("index is out of range: "+a)}},clone:function(){return new this.constructor(this.x,this.y)},copy:function(a){this.x=a.x;this.y=a.y;return this},add:function(a,b){if(void 0!==b)return console.warn("THREE.Vector2: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(a,b);this.x+=a.x;this.y+=a.y;return this},addScalar:function(a){this.x+=a;this.y+=a;return this},addVectors:function(a,b){this.x=a.x+b.x;this.y=a.y+b.y;return this},addScaledVector:function(a,b){this.x+=a.x*b;this.y+=a.y*b;return this},sub:function(a,b){if(void 0!==b)return console.warn("THREE.Vector2: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(a,b);this.x-=a.x;this.y-=a.y;return this},subScalar:function(a){this.x-=a;this.y-=a;return this},subVectors:function(a,b){this.x=a.x-b.x;this.y=a.y-b.y;return this},multiply:function(a){this.x*=a.x;this.y*=a.y;return this},multiplyScalar:function(a){isFinite(a)?(this.x*=a,this.y*=a):this.y=this.x=0;return this},divide:function(a){this.x/=a.x;this.y/=a.y;return this},divideScalar:function(a){return this.multiplyScalar(1/a)},min:function(a){this.x=Math.min(this.x,a.x);this.y=Math.min(this.y,a.y);return this},max:function(a){this.x=Math.max(this.x,a.x);this.y=Math.max(this.y,a.y);return this},clamp:function(a,b){this.x=Math.max(a.x,Math.min(b.x,this.x));this.y=Math.max(a.y,Math.min(b.y,this.y));return this},clampScalar:function(){var a,b;return function(c,d){void 0===a&&(a=new THREE.Vector2,b=new THREE.Vector2);a.set(c,c);b.set(d,d);return this.clamp(a,b)}}(),clampLength:function(a,b){var c=this.length();this.multiplyScalar(Math.max(a,Math.min(b,c))/c);return this},floor:function(){this.x=Math.floor(this.x);this.y=Math.floor(this.y);return this},ceil:function(){this.x=Math.ceil(this.x);this.y=Math.ceil(this.y);return this},round:function(){this.x=Math.round(this.x);this.y=Math.round(this.y);return this},roundToZero:function(){this.x=0>this.x?Math.ceil(this.x):Math.floor(this.x);this.y=0>this.y?Math.ceil(this.y):Math.floor(this.y);return this},negate:function(){this.x=-this.x;this.y=-this.y;return this},dot:function(a){return this.x*a.x+this.y*a.y},lengthSq:function(){return this.x*this.x+this.y*this.y},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y)},lengthManhattan:function(){return Math.abs(this.x)+Math.abs(this.y)},normalize:function(){return this.divideScalar(this.length())},angle:function(){var a=Math.atan2(this.y,this.x);0>a&&(a+=2*Math.PI);return a},distanceTo:function(a){return Math.sqrt(this.distanceToSquared(a))},distanceToSquared:function(a){var b=this.x-a.x;a=this.y-a.y;return b*b+a*a},setLength:function(a){return this.multiplyScalar(a/this.length())},lerp:function(a,b){this.x+=(a.x-this.x)*b;this.y+=(a.y-this.y)*b;return this},lerpVectors:function(a,b,c){this.subVectors(b,a).multiplyScalar(c).add(a);return this},equals:function(a){return a.x===this.x&&a.y===this.y},fromArray:function(a,b){void 0===b&&(b=0);this.x=a[b];this.y=a[b+1];return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);a[b]=this.x;a[b+1]=this.y;return a},fromAttribute:function(a,b,c){void 0===c&&(c=0);b=b*a.itemSize+c;this.x=a.array[b];this.y=a.array[b+1];return this},rotateAround:function(a,b){var c=Math.cos(b),d=Math.sin(b),e=this.x-a.x,f=this.y-a.y;this.x=e*c-f*d+a.x;this.y=e*d+f*c+a.y;return this}};THREE.Vector3=function(a,b,c){this.x=a||0;this.y=b||0;this.z=c||0};THREE.Vector3.prototype={constructor:THREE.Vector3,set:function(a,b,c){this.x=a;this.y=b;this.z=c;return this},setScalar:function(a){this.z=this.y=this.x=a;return this},setX:function(a){this.x=a;return this},setY:function(a){this.y=a;return this},setZ:function(a){this.z=a;return this},setComponent:function(a,b){switch(a){case 0:this.x=b;break;case 1:this.y=b;break;case 2:this.z=b;break;default:throw Error("index is out of range: "+a)}},getComponent:function(a){switch(a){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw Error("index is out of range: "+a)}},clone:function(){return new this.constructor(this.x,this.y,this.z)},copy:function(a){this.x=a.x;this.y=a.y;this.z=a.z;return this},add:function(a,b){if(void 0!==b)return console.warn("THREE.Vector3: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(a,b);this.x+=a.x;this.y+=a.y;this.z+=a.z;return this},addScalar:function(a){this.x+=a;this.y+=a;this.z+=a;return this},addVectors:function(a,b){this.x=a.x+b.x;this.y=a.y+b.y;this.z=a.z+b.z;return this},addScaledVector:function(a,b){this.x+=a.x*b;this.y+=a.y*b;this.z+=a.z*b;return this},sub:function(a,b){if(void 0!==b)return console.warn("THREE.Vector3: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(a,b);this.x-=a.x;this.y-=a.y;this.z-=a.z;return this},subScalar:function(a){this.x-=a;this.y-=a;this.z-=a;return this},subVectors:function(a,b){this.x=a.x-b.x;this.y=a.y-b.y;this.z=a.z-b.z;return this},multiply:function(a,b){if(void 0!==b)return console.warn("THREE.Vector3: .multiply() now only accepts one argument. Use .multiplyVectors( a, b ) instead."),this.multiplyVectors(a,b);this.x*=a.x;this.y*=a.y;this.z*=a.z;return this},multiplyScalar:function(a){isFinite(a)?(this.x*=a,this.y*=a,this.z*=a):this.z=this.y=this.x=0;return this},multiplyVectors:function(a,b){this.x=a.x*b.x;this.y=a.y*b.y;this.z=a.z*b.z;return this},applyEuler:function(){var a;return function(b){!1===b instanceof THREE.Euler&&console.error("THREE.Vector3: .applyEuler() now expects an Euler rotation rather than a Vector3 and order.");void 0===a&&(a=new THREE.Quaternion);this.applyQuaternion(a.setFromEuler(b));return this}}(),applyAxisAngle:function(){var a;return function(b,c){void 0===a&&(a=new THREE.Quaternion);this.applyQuaternion(a.setFromAxisAngle(b,c));return this}}(),applyMatrix3:function(a){var b=this.x,c=this.y,d=this.z;a=a.elements;this.x=a[0]*b+a[3]*c+a[6]*d;this.y=a[1]*b+a[4]*c+a[7]*d;this.z=a[2]*b+a[5]*c+a[8]*d;return this},applyMatrix4:function(a){var b=this.x,c=this.y,d=this.z;a=a.elements;this.x=a[0]*b+a[4]*c+a[8]*d+a[12];this.y=a[1]*b+a[5]*c+a[9]*d+a[13];this.z=a[2]*b+a[6]*c+a[10]*d+a[14];return this},applyProjection:function(a){var b=this.x,c=this.y,d=this.z;a=a.elements;var e=1/(a[3]*b+a[7]*c+a[11]*d+a[15]);this.x=(a[0]*b+a[4]*c+a[8]*d+a[12])*e;this.y=(a[1]*b+a[5]*c+a[9]*d+a[13])*e;this.z=(a[2]*b+a[6]*c+a[10]*d+a[14])*e;return this},applyQuaternion:function(a){var b=this.x,c=this.y,d=this.z,e=a.x,f=a.y,g=a.z;a=a.w;var h=a*b+f*d-g*c,k=a*c+g*b-e*d,l=a*d+e*c-f*b,b=-e*b-f*c-g*d;this.x=h*a+b*-e+k*-g-l*-f;this.y=k*a+b*-f+l*-e-h*-g;this.z=l*a+b*-g+h*-f-k*-e;return this},project:function(){var a;return function(b){void 0===a&&(a=new THREE.Matrix4);a.multiplyMatrices(b.projectionMatrix,a.getInverse(b.matrixWorld));return this.applyProjection(a)}}(),unproject:function(){var a;return function(b){void 0===a&&(a=new THREE.Matrix4);a.multiplyMatrices(b.matrixWorld,a.getInverse(b.projectionMatrix));return this.applyProjection(a)}}(),transformDirection:function(a){var b=this.x,c=this.y,d=this.z;a=a.elements;this.x=a[0]*b+a[4]*c+a[8]*d;this.y=a[1]*b+a[5]*c+a[9]*d;this.z=a[2]*b+a[6]*c+a[10]*d;this.normalize();return this},divide:function(a){this.x/=a.x;this.y/=a.y;this.z/=a.z;return this},divideScalar:function(a){return this.multiplyScalar(1/a)},min:function(a){this.x=Math.min(this.x,a.x);this.y=Math.min(this.y,a.y);this.z=Math.min(this.z,a.z);return this},max:function(a){this.x=Math.max(this.x,a.x);this.y=Math.max(this.y,a.y);this.z=Math.max(this.z,a.z);return this},clamp:function(a,b){this.x=Math.max(a.x,Math.min(b.x,this.x));this.y=Math.max(a.y,Math.min(b.y,this.y));this.z=Math.max(a.z,Math.min(b.z,this.z));return this},clampScalar:function(){var a,b;return function(c,d){void 0===a&&(a=new THREE.Vector3,b=new THREE.Vector3);a.set(c,c,c);b.set(d,d,d);return this.clamp(a,b)}}(),clampLength:function(a,b){var c=this.length();this.multiplyScalar(Math.max(a,Math.min(b,c))/c);return this},floor:function(){this.x=Math.floor(this.x);this.y=Math.floor(this.y);this.z=Math.floor(this.z);return this},ceil:function(){this.x=Math.ceil(this.x);this.y=Math.ceil(this.y);this.z=Math.ceil(this.z);return this},round:function(){this.x=Math.round(this.x);this.y=Math.round(this.y);this.z=Math.round(this.z);return this},roundToZero:function(){this.x=0>this.x?Math.ceil(this.x):Math.floor(this.x);this.y=0>this.y?Math.ceil(this.y):Math.floor(this.y);this.z=0>this.z?Math.ceil(this.z):Math.floor(this.z);return this},negate:function(){this.x=-this.x;this.y=-this.y;this.z=-this.z;return this},dot:function(a){return this.x*a.x+this.y*a.y+this.z*a.z},lengthSq:function(){return this.x*this.x+this.y*this.y+this.z*this.z},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)},lengthManhattan:function(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)},normalize:function(){return this.divideScalar(this.length())},setLength:function(a){return this.multiplyScalar(a/this.length())},lerp:function(a,b){this.x+=(a.x-this.x)*b;this.y+=(a.y-this.y)*b;this.z+=(a.z-this.z)*b;return this},lerpVectors:function(a,b,c){this.subVectors(b,a).multiplyScalar(c).add(a);return this},cross:function(a,b){if(void 0!==b)return console.warn("THREE.Vector3: .cross() now only accepts one argument. Use .crossVectors( a, b ) instead."),this.crossVectors(a,b);var c=this.x,d=this.y,e=this.z;this.x=d*a.z-e*a.y;this.y=e*a.x-c*a.z;this.z=c*a.y-d*a.x;return this},crossVectors:function(a,b){var c=a.x,d=a.y,e=a.z,f=b.x,g=b.y,h=b.z;this.x=d*h-e*g;this.y=e*f-c*h;this.z=c*g-d*f;return this},projectOnVector:function(){var a,b;return function(c){void 0===a&&(a=new THREE.Vector3);a.copy(c).normalize();b=this.dot(a);return this.copy(a).multiplyScalar(b)}}(),projectOnPlane:function(){var a;return function(b){void 0===a&&(a=new THREE.Vector3);a.copy(this).projectOnVector(b);return this.sub(a)}}(),reflect:function(){var a;return function(b){void 0===a&&(a=new THREE.Vector3);return this.sub(a.copy(b).multiplyScalar(2*this.dot(b)))}}(),angleTo:function(a){a=this.dot(a)/Math.sqrt(this.lengthSq()*a.lengthSq());return Math.acos(THREE.Math.clamp(a,-1,1))},distanceTo:function(a){return Math.sqrt(this.distanceToSquared(a))},distanceToSquared:function(a){var b=this.x-a.x,c=this.y-a.y;a=this.z-a.z;return b*b+c*c+a*a},setFromSpherical:function(a){var b=Math.sin(a.phi)*a.radius;this.x=b*Math.sin(a.theta);this.y=Math.cos(a.phi)*a.radius;this.z=b*Math.cos(a.theta);return this},setFromMatrixPosition:function(a){return this.setFromMatrixColumn(a,3)},setFromMatrixScale:function(a){var b=this.setFromMatrixColumn(a,0).length(),c=this.setFromMatrixColumn(a,1).length();a=this.setFromMatrixColumn(a,2).length();this.x=b;this.y=c;this.z=a;return this},setFromMatrixColumn:function(a,b){"number"===typeof a&&(console.warn("THREE.Vector3: setFromMatrixColumn now expects ( matrix, index )."),b=a=b);return this.fromArray(a.elements,4*b)},equals:function(a){return a.x===this.x&&a.y===this.y&&a.z===this.z},fromArray:function(a,b){void 0===b&&(b=0);this.x=a[b];this.y=a[b+1];this.z=a[b+2];return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);a[b]=this.x;a[b+1]=this.y;a[b+2]=this.z;return a},fromAttribute:function(a,b,c){void 0===c&&(c=0);b=b*a.itemSize+c;this.x=a.array[b];this.y=a.array[b+1];this.z=a.array[b+2];return this}};THREE.Vector4=function(a,b,c,d){this.x=a||0;this.y=b||0;this.z=c||0;this.w=void 0!==d?d:1};THREE.Vector4.prototype={constructor:THREE.Vector4,set:function(a,b,c,d){this.x=a;this.y=b;this.z=c;this.w=d;return this},setScalar:function(a){this.w=this.z=this.y=this.x=a;return this},setX:function(a){this.x=a;return this},setY:function(a){this.y=a;return this},setZ:function(a){this.z=a;return this},setW:function(a){this.w=a;return this},setComponent:function(a,b){switch(a){case 0:this.x=b;break;case 1:this.y=b;break;case 2:this.z=b;break;case 3:this.w=b;break;default:throw Error("index is out of range: "+a)}},getComponent:function(a){switch(a){case 0:return this.x;case 1:return this.y;case 2:return this.z;case 3:return this.w;default:throw Error("index is out of range: "+a)}},clone:function(){return new this.constructor(this.x,this.y,this.z,this.w)},copy:function(a){this.x=a.x;this.y=a.y;this.z=a.z;this.w=void 0!==a.w?a.w:1;return this},add:function(a,b){if(void 0!==b)return console.warn("THREE.Vector4: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(a,b);this.x+=a.x;this.y+=a.y;this.z+=a.z;this.w+=a.w;return this},addScalar:function(a){this.x+=a;this.y+=a;this.z+=a;this.w+=a;return this},addVectors:function(a,b){this.x=a.x+b.x;this.y=a.y+b.y;this.z=a.z+b.z;this.w=a.w+b.w;return this},addScaledVector:function(a,b){this.x+=a.x*b;this.y+=a.y*b;this.z+=a.z*b;this.w+=a.w*b;return this},sub:function(a,b){if(void 0!==b)return console.warn("THREE.Vector4: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(a,b);this.x-=a.x;this.y-=a.y;this.z-=a.z;this.w-=a.w;return this},subScalar:function(a){this.x-=a;this.y-=a;this.z-=a;this.w-=a;return this},subVectors:function(a,b){this.x=a.x-b.x;this.y=a.y-b.y;this.z=a.z-b.z;this.w=a.w-b.w;return this},multiplyScalar:function(a){isFinite(a)?(this.x*=a,this.y*=a,this.z*=a,this.w*=a):this.w=this.z=this.y=this.x=0;return this},applyMatrix4:function(a){var b=this.x,c=this.y,d=this.z,e=this.w;a=a.elements;this.x=a[0]*b+a[4]*c+a[8]*d+a[12]*e;this.y=a[1]*b+a[5]*c+a[9]*d+a[13]*e;this.z=a[2]*b+a[6]*c+a[10]*d+a[14]*e;this.w=a[3]*b+a[7]*c+a[11]*d+a[15]*e;return this},divideScalar:function(a){return this.multiplyScalar(1/a)},setAxisAngleFromQuaternion:function(a){this.w=2*Math.acos(a.w);var b=Math.sqrt(1-a.w*a.w);1e-4>b?(this.x=1,this.z=this.y=0):(this.x=a.x/b,this.y=a.y/b,this.z=a.z/b);return this},setAxisAngleFromRotationMatrix:function(a){var b,c,d;a=a.elements;var e=a[0];d=a[4];var f=a[8],g=a[1],h=a[5],k=a[9];c=a[2];b=a[6];var l=a[10];if(.01>Math.abs(d-g)&&.01>Math.abs(f-c)&&.01>Math.abs(k-b)){if(.1>Math.abs(d+g)&&.1>Math.abs(f+c)&&.1>Math.abs(k+b)&&.1>Math.abs(e+h+l-3))return this.set(1,0,0,0),this;a=Math.PI;e=(e+1)/2;h=(h+1)/2;l=(l+1)/2;d=(d+g)/4;f=(f+c)/4;k=(k+b)/4;e>h&&e>l?.01>e?(b=0,d=c=.707106781):(b=Math.sqrt(e),c=d/b,d=f/b):h>l?.01>h?(b=.707106781,c=0,d=.707106781):(c=Math.sqrt(h),b=d/c,d=k/c):.01>l?(c=b=.707106781,d=0):(d=Math.sqrt(l),b=f/d,c=k/d);this.set(b,c,d,a);return this}a=Math.sqrt((b-k)*(b-k)+(f-c)*(f-c)+(g-d)*(g-d));.001>Math.abs(a)&&(a=1);this.x=(b-k)/a;this.y=(f-c)/a;this.z=(g-d)/a;this.w=Math.acos((e+h+l-1)/2);return this},min:function(a){this.x=Math.min(this.x,a.x);this.y=Math.min(this.y,a.y);this.z=Math.min(this.z,a.z);this.w=Math.min(this.w,a.w);return this},max:function(a){this.x=Math.max(this.x,a.x);this.y=Math.max(this.y,a.y);this.z=Math.max(this.z,a.z);this.w=Math.max(this.w,a.w);return this},clamp:function(a,b){this.x=Math.max(a.x,Math.min(b.x,this.x));this.y=Math.max(a.y,Math.min(b.y,this.y));this.z=Math.max(a.z,Math.min(b.z,this.z));this.w=Math.max(a.w,Math.min(b.w,this.w));return this},clampScalar:function(){var a,b;return function(c,d){void 0===a&&(a=new THREE.Vector4,b=new THREE.Vector4);a.set(c,c,c,c);b.set(d,d,d,d);return this.clamp(a,b)}}(),floor:function(){this.x=Math.floor(this.x);this.y=Math.floor(this.y);this.z=Math.floor(this.z);this.w=Math.floor(this.w);return this},ceil:function(){this.x=Math.ceil(this.x);this.y=Math.ceil(this.y);this.z=Math.ceil(this.z);this.w=Math.ceil(this.w);return this},round:function(){this.x=Math.round(this.x);this.y=Math.round(this.y);this.z=Math.round(this.z);this.w=Math.round(this.w);return this},roundToZero:function(){this.x=0>this.x?Math.ceil(this.x):Math.floor(this.x);this.y=0>this.y?Math.ceil(this.y):Math.floor(this.y);this.z=0>this.z?Math.ceil(this.z):Math.floor(this.z);this.w=0>this.w?Math.ceil(this.w):Math.floor(this.w);return this},negate:function(){this.x=-this.x;this.y=-this.y;this.z=-this.z;this.w=-this.w;return this},dot:function(a){return this.x*a.x+this.y*a.y+this.z*a.z+this.w*a.w},lengthSq:function(){return this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w)},lengthManhattan:function(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)+Math.abs(this.w)},normalize:function(){return this.divideScalar(this.length())},setLength:function(a){return this.multiplyScalar(a/this.length())},lerp:function(a,b){this.x+=(a.x-this.x)*b;this.y+=(a.y-this.y)*b;this.z+=(a.z-this.z)*b;this.w+=(a.w-this.w)*b;return this},lerpVectors:function(a,b,c){this.subVectors(b,a).multiplyScalar(c).add(a);return this},equals:function(a){return a.x===this.x&&a.y===this.y&&a.z===this.z&&a.w===this.w},fromArray:function(a,b){void 0===b&&(b=0);this.x=a[b];this.y=a[b+1];this.z=a[b+2];this.w=a[b+3];return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);a[b]=this.x;a[b+1]=this.y;a[b+2]=this.z;a[b+3]=this.w;return a},fromAttribute:function(a,b,c){void 0===c&&(c=0);b=b*a.itemSize+c;this.x=a.array[b];this.y=a.array[b+1];this.z=a.array[b+2];this.w=a.array[b+3];return this}};THREE.Euler=function(a,b,c,d){this._x=a||0;this._y=b||0;this._z=c||0;this._order=d||THREE.Euler.DefaultOrder};THREE.Euler.RotationOrders="XYZ YZX ZXY XZY YXZ ZYX".split(" ");THREE.Euler.DefaultOrder="XYZ";THREE.Euler.prototype={constructor:THREE.Euler,get x(){return this._x},set x(a){this._x=a;this.onChangeCallback()},get y(){return this._y},set y(a){this._y=a;this.onChangeCallback()},get z(){return this._z},set z(a){this._z=a;this.onChangeCallback()},get order(){return this._order},set order(a){this._order=a;this.onChangeCallback()},set:function(a,b,c,d){this._x=a;this._y=b;this._z=c;this._order=d||this._order;this.onChangeCallback();return this},clone:function(){return new this.constructor(this._x,this._y,this._z,this._order)},copy:function(a){this._x=a._x;this._y=a._y;this._z=a._z;this._order=a._order;this.onChangeCallback();return this},setFromRotationMatrix:function(a,b,c){var d=THREE.Math.clamp,e=a.elements;a=e[0];var f=e[4],g=e[8],h=e[1],k=e[5],l=e[9],p=e[2],n=e[6],e=e[10];b=b||this._order;"XYZ"===b?(this._y=Math.asin(d(g,-1,1)),.99999>Math.abs(g)?(this._x=Math.atan2(-l,e),this._z=Math.atan2(-f,a)):(this._x=Math.atan2(n,k),this._z=0)):"YXZ"===b?(this._x=Math.asin(-d(l,-1,1)),.99999>Math.abs(l)?(this._y=Math.atan2(g,e),this._z=Math.atan2(h,k)):(this._y=Math.atan2(-p,a),this._z=0)):"ZXY"===b?(this._x=Math.asin(d(n,-1,1)),.99999>Math.abs(n)?(this._y=Math.atan2(-p,e),this._z=Math.atan2(-f,k)):(this._y=0,this._z=Math.atan2(h,a))):"ZYX"===b?(this._y=Math.asin(-d(p,-1,1)),.99999>Math.abs(p)?(this._x=Math.atan2(n,e),this._z=Math.atan2(h,a)):(this._x=0,this._z=Math.atan2(-f,k))):"YZX"===b?(this._z=Math.asin(d(h,-1,1)),.99999>Math.abs(h)?(this._x=Math.atan2(-l,k),this._y=Math.atan2(-p,a)):(this._x=0,this._y=Math.atan2(g,e))):"XZY"===b?(this._z=Math.asin(-d(f,-1,1)),.99999>Math.abs(f)?(this._x=Math.atan2(n,k),this._y=Math.atan2(g,a)):(this._x=Math.atan2(-l,e),this._y=0)):console.warn("THREE.Euler: .setFromRotationMatrix() given unsupported order: "+b);this._order=b;if(!1!==c)this.onChangeCallback();return this},setFromQuaternion:function(){var a;return function(b,c,d){void 0===a&&(a=new THREE.Matrix4);a.makeRotationFromQuaternion(b);this.setFromRotationMatrix(a,c,d);return this}}(),setFromVector3:function(a,b){return this.set(a.x,a.y,a.z,b||this._order)},reorder:function(){var a=new THREE.Quaternion;return function(b){a.setFromEuler(this);this.setFromQuaternion(a,b)}}(),equals:function(a){return a._x===this._x&&a._y===this._y&&a._z===this._z&&a._order===this._order},fromArray:function(a){this._x=a[0];this._y=a[1];this._z=a[2];void 0!==a[3]&&(this._order=a[3]);this.onChangeCallback();return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);a[b]=this._x;a[b+1]=this._y;a[b+2]=this._z;a[b+3]=this._order;return a},toVector3:function(a){return a?a.set(this._x,this._y,this._z):new THREE.Vector3(this._x,this._y,this._z)},onChange:function(a){this.onChangeCallback=a;return this},onChangeCallback:function(){}};THREE.Line3=function(a,b){this.start=void 0!==a?a:new THREE.Vector3;this.end=void 0!==b?b:new THREE.Vector3};THREE.Line3.prototype={constructor:THREE.Line3,set:function(a,b){this.start.copy(a);this.end.copy(b);return this},clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.start.copy(a.start);this.end.copy(a.end);return this},center:function(a){return(a||new THREE.Vector3).addVectors(this.start,this.end).multiplyScalar(.5)},delta:function(a){return(a||new THREE.Vector3).subVectors(this.end,this.start)},distanceSq:function(){return this.start.distanceToSquared(this.end)},distance:function(){return this.start.distanceTo(this.end)},at:function(a,b){var c=b||new THREE.Vector3;return this.delta(c).multiplyScalar(a).add(this.start)},closestPointToPointParameter:function(){var a=new THREE.Vector3,b=new THREE.Vector3;return function(c,d){a.subVectors(c,this.start);b.subVectors(this.end,this.start);var e=b.dot(b),e=b.dot(a)/e;d&&(e=THREE.Math.clamp(e,0,1));return e}}(),closestPointToPoint:function(a,b,c){a=this.closestPointToPointParameter(a,b);c=c||new THREE.Vector3;return this.delta(c).multiplyScalar(a).add(this.start)},applyMatrix4:function(a){this.start.applyMatrix4(a);this.end.applyMatrix4(a);return this},equals:function(a){return a.start.equals(this.start)&&a.end.equals(this.end)}};THREE.Box2=function(a,b){this.min=void 0!==a?a:new THREE.Vector2(Infinity,Infinity);this.max=void 0!==b?b:new THREE.Vector2(-Infinity,-Infinity)};THREE.Box2.prototype={constructor:THREE.Box2,set:function(a,b){this.min.copy(a);this.max.copy(b);return this},setFromPoints:function(a){this.makeEmpty();for(var b=0,c=a.length;bthis.max.x||a.ythis.max.y?!1:!0},containsBox:function(a){return this.min.x<=a.min.x&&a.max.x<=this.max.x&&this.min.y<=a.min.y&&a.max.y<=this.max.y?!0:!1},getParameter:function(a,b){return(b||new THREE.Vector2).set((a.x-this.min.x)/(this.max.x-this.min.x),(a.y-this.min.y)/(this.max.y-this.min.y))},intersectsBox:function(a){return a.max.xthis.max.x||a.max.ythis.max.y?!1:!0},clampPoint:function(a,b){return(b||new THREE.Vector2).copy(a).clamp(this.min,this.max)},distanceToPoint:function(){var a=new THREE.Vector2;return function(b){return a.copy(b).clamp(this.min,this.max).sub(b).length()}}(),intersect:function(a){this.min.max(a.min);this.max.min(a.max);return this},union:function(a){this.min.min(a.min);this.max.max(a.max);return this},translate:function(a){this.min.add(a);this.max.add(a);return this},equals:function(a){return a.min.equals(this.min)&&a.max.equals(this.max)}};THREE.Box3=function(a,b){this.min=void 0!==a?a:new THREE.Vector3(Infinity,Infinity,Infinity);this.max=void 0!==b?b:new THREE.Vector3(-Infinity,-Infinity,-Infinity)};THREE.Box3.prototype={constructor:THREE.Box3,set:function(a,b){this.min.copy(a);this.max.copy(b);return this},setFromArray:function(a){this.makeEmpty();for(var b=Infinity,c=Infinity,d=Infinity,e=-Infinity,f=-Infinity,g=-Infinity,h=0,k=a.length;he&&(e=l);p>f&&(f=p);n>g&&(g=n)}this.min.set(b,c,d);this.max.set(e,f,g)},setFromPoints:function(a){this.makeEmpty();for(var b=0,c=a.length;bthis.max.x||a.ythis.max.y||a.zthis.max.z?!1:!0},containsBox:function(a){return this.min.x<=a.min.x&&a.max.x<=this.max.x&&this.min.y<=a.min.y&&a.max.y<=this.max.y&&this.min.z<=a.min.z&&a.max.z<=this.max.z?!0:!1},getParameter:function(a,b){return(b||new THREE.Vector3).set((a.x-this.min.x)/(this.max.x-this.min.x),(a.y-this.min.y)/(this.max.y-this.min.y),(a.z-this.min.z)/(this.max.z-this.min.z))},intersectsBox:function(a){return a.max.xthis.max.x||a.max.ythis.max.y||a.max.zthis.max.z?!1:!0},intersectsSphere:function(){var a;return function(b){void 0===a&&(a=new THREE.Vector3);this.clampPoint(b.center,a);return a.distanceToSquared(b.center)<=b.radius*b.radius}}(),intersectsPlane:function(a){var b,c;0=a.constant},clampPoint:function(a,b){return(b||new THREE.Vector3).copy(a).clamp(this.min,this.max)},distanceToPoint:function(){var a=new THREE.Vector3;return function(b){return a.copy(b).clamp(this.min,this.max).sub(b).length()}}(),getBoundingSphere:function(){var a=new THREE.Vector3;return function(b){b=b||new THREE.Sphere;b.center=this.center();b.radius=.5*this.size(a).length();return b}}(),intersect:function(a){this.min.max(a.min);this.max.min(a.max);return this},union:function(a){this.min.min(a.min);this.max.max(a.max);return this},applyMatrix4:function(){var a=[new THREE.Vector3,new THREE.Vector3,new THREE.Vector3,new THREE.Vector3,new THREE.Vector3,new THREE.Vector3,new THREE.Vector3,new THREE.Vector3];return function(b){a[0].set(this.min.x,this.min.y,this.min.z).applyMatrix4(b);a[1].set(this.min.x,this.min.y,this.max.z).applyMatrix4(b);a[2].set(this.min.x,this.max.y,this.min.z).applyMatrix4(b);a[3].set(this.min.x,this.max.y,this.max.z).applyMatrix4(b);a[4].set(this.max.x,this.min.y,this.min.z).applyMatrix4(b);a[5].set(this.max.x,this.min.y,this.max.z).applyMatrix4(b);a[6].set(this.max.x,this.max.y,this.min.z).applyMatrix4(b);a[7].set(this.max.x,this.max.y,this.max.z).applyMatrix4(b);this.makeEmpty();this.setFromPoints(a);return this}}(),translate:function(a){this.min.add(a);this.max.add(a);return this},equals:function(a){return a.min.equals(this.min)&&a.max.equals(this.max)}};THREE.Matrix3=function(){this.elements=new Float32Array([1,0,0,0,1,0,0,0,1]);0this.determinant()&&(g=-g);c.x=f[12];c.y=f[13];c.z=f[14];b.elements.set(this.elements);c=1/g;var f=1/h,l=1/k;b.elements[0]*=c;b.elements[1]*=c;b.elements[2]*=c;b.elements[4]*=f;b.elements[5]*=f;b.elements[6]*=f;b.elements[8]*=l;b.elements[9]*=l;b.elements[10]*=l;d.setFromRotationMatrix(b);e.x=g;e.y=h;e.z=k;return this}}(),makeFrustum:function(a,b,c,d,e,f){var g=this.elements;g[0]=2*e/(b-a);g[4]=0;g[8]=(b+a)/(b-a);g[12]=0;g[1]=0;g[5]=2*e/(d-c);g[9]=(d+c)/(d-c);g[13]=0;g[2]=0;g[6]=0;g[10]=-(f+e)/(f-e);g[14]=-2*f*e/(f-e);g[3]=0;g[7]=0;g[11]=-1;g[15]=0;return this},makePerspective:function(a,b,c,d){a=c*Math.tan(THREE.Math.degToRad(.5*a));var e=-a;return this.makeFrustum(e*b,a*b,e,a,c,d)},makeOrthographic:function(a,b,c,d,e,f){var g=this.elements,h=1/(b-a),k=1/(c-d),l=1/(f-e);g[0]=2*h;g[4]=0;g[8]=0;g[12]=-((b+a)*h);g[1]=0;g[5]=2*k;g[9]=0;g[13]=-((c+d)*k);g[2]=0;g[6]=0;g[10]=-2*l;g[14]=-((f+e)*l);g[3]=0;g[7]=0;g[11]=0;g[15]=1;return this},equals:function(a){var b=this.elements;a=a.elements;for(var c=0;16>c;c++)if(b[c]!==a[c])return!1;return!0},fromArray:function(a){this.elements.set(a);return this},toArray:function(){var a=this.elements;return[a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8],a[9],a[10],a[11],a[12],a[13],a[14],a[15]]}};THREE.Ray=function(a,b){this.origin=void 0!==a?a:new THREE.Vector3;this.direction=void 0!==b?b:new THREE.Vector3};THREE.Ray.prototype={constructor:THREE.Ray,set:function(a,b){this.origin.copy(a);this.direction.copy(b);return this},clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.origin.copy(a.origin);this.direction.copy(a.direction);return this},at:function(a,b){return(b||new THREE.Vector3).copy(this.direction).multiplyScalar(a).add(this.origin)},lookAt:function(a){this.direction.copy(a).sub(this.origin).normalize()},recast:function(){var a=new THREE.Vector3;return function(b){this.origin.copy(this.at(b,a));return this}}(),closestPointToPoint:function(a,b){var c=b||new THREE.Vector3;c.subVectors(a,this.origin);var d=c.dot(this.direction);return 0>d?c.copy(this.origin):c.copy(this.direction).multiplyScalar(d).add(this.origin)},distanceToPoint:function(a){return Math.sqrt(this.distanceSqToPoint(a))},distanceSqToPoint:function(){var a=new THREE.Vector3;return function(b){var c=a.subVectors(b,this.origin).dot(this.direction);if(0>c)return this.origin.distanceToSquared(b);a.copy(this.direction).multiplyScalar(c).add(this.origin);return a.distanceToSquared(b)}}(),distanceSqToSegment:function(){var a=new THREE.Vector3,b=new THREE.Vector3,c=new THREE.Vector3;return function(d,e,f,g){a.copy(d).add(e).multiplyScalar(.5);b.copy(e).sub(d).normalize();c.copy(this.origin).sub(a);var h=.5*d.distanceTo(e),k=-this.direction.dot(b),l=c.dot(this.direction),p=-c.dot(b),n=c.lengthSq(),m=Math.abs(1-k*k),q;0=-q?e<=q?(h=1/m,d*=h,e*=h,k=d*(d+k*e+2*l)+e*(k*d+e+2*p)+n):(e=h,d=Math.max(0,-(k*e+l)),k=-d*d+e*(e+2*p)+n):(e=-h,d=Math.max(0,-(k*e+l)),k=-d*d+e*(e+2*p)+n):e<=-q?(d=Math.max(0,-(-k*h+l)),e=0f)return null;f=Math.sqrt(f-e);e=d-f;d+=f;return 0>e&&0>d?null:0>e?this.at(d,c):this.at(e,c)}}(),intersectsSphere:function(a){return this.distanceToPoint(a.center)<=a.radius},distanceToPlane:function(a){var b=a.normal.dot(this.direction);if(0===b)return 0===a.distanceToPoint(this.origin)?0:null;a=-(this.origin.dot(a.normal)+a.constant)/b;return 0<=a?a:null},intersectPlane:function(a,b){var c=this.distanceToPlane(a);return null===c?null:this.at(c,b)},intersectsPlane:function(a){var b=a.distanceToPoint(this.origin);return 0===b||0>a.normal.dot(this.direction)*b?!0:!1},intersectBox:function(a,b){var c,d,e,f,g;d=1/this.direction.x;f=1/this.direction.y;g=1/this.direction.z;var h=this.origin;0<=d?(c=(a.min.x-h.x)*d,d*=a.max.x-h.x):(c=(a.max.x-h.x)*d,d*=a.min.x-h.x);0<=f?(e=(a.min.y-h.y)*f,f*=a.max.y-h.y):(e=(a.max.y-h.y)*f,f*=a.min.y-h.y);if(c>f||e>d)return null;if(e>c||c!==c)c=e;if(fg||e>d)return null;if(e>c||c!==c)c=e;if(gd?null:this.at(0<=c?c:d,b)},intersectsBox:function(){var a=new THREE.Vector3;return function(b){return null!==this.intersectBox(b,a)}}(),intersectTriangle:function(){var a=new THREE.Vector3,b=new THREE.Vector3,c=new THREE.Vector3,d=new THREE.Vector3;return function(e,f,g,h,k){b.subVectors(f,e);c.subVectors(g,e);d.crossVectors(b,c);f=this.direction.dot(d);if(0f)h=-1,f=-f;else return null;a.subVectors(this.origin,e);e=h*this.direction.dot(c.crossVectors(a,c));if(0>e)return null;g=h*this.direction.dot(b.cross(a));if(0>g||e+g>f)return null;e=-h*a.dot(d);return 0>e?null:this.at(e/f,k)}}(),applyMatrix4:function(a){this.direction.add(this.origin).applyMatrix4(a);this.origin.applyMatrix4(a);this.direction.sub(this.origin);this.direction.normalize();return this},equals:function(a){return a.origin.equals(this.origin)&&a.direction.equals(this.direction)}};THREE.Sphere=function(a,b){this.center=void 0!==a?a:new THREE.Vector3;this.radius=void 0!==b?b:0};THREE.Sphere.prototype={constructor:THREE.Sphere,set:function(a,b){this.center.copy(a);this.radius=b;return this},setFromPoints:function(){var a=new THREE.Box3;return function(b,c){var d=this.center;void 0!==c?d.copy(c):a.setFromPoints(b).center(d);for(var e=0,f=0,g=b.length;f=this.radius},containsPoint:function(a){return a.distanceToSquared(this.center)<=this.radius*this.radius},distanceToPoint:function(a){return a.distanceTo(this.center)-this.radius},intersectsSphere:function(a){var b=this.radius+a.radius;return a.center.distanceToSquared(this.center)<=b*b},intersectsBox:function(a){return a.intersectsSphere(this)},intersectsPlane:function(a){return Math.abs(this.center.dot(a.normal)-a.constant)<=this.radius},clampPoint:function(a,b){var c=this.center.distanceToSquared(a),d=b||new THREE.Vector3;d.copy(a);c>this.radius*this.radius&&(d.sub(this.center).normalize(),d.multiplyScalar(this.radius).add(this.center));return d},getBoundingBox:function(a){a=a||new THREE.Box3;a.set(this.center,this.center);a.expandByScalar(this.radius);return a},applyMatrix4:function(a){this.center.applyMatrix4(a);this.radius*=a.getMaxScaleOnAxis();return this},translate:function(a){this.center.add(a);return this},equals:function(a){return a.center.equals(this.center)&&a.radius===this.radius}};THREE.Frustum=function(a,b,c,d,e,f){this.planes=[void 0!==a?a:new THREE.Plane,void 0!==b?b:new THREE.Plane,void 0!==c?c:new THREE.Plane,void 0!==d?d:new THREE.Plane,void 0!==e?e:new THREE.Plane,void 0!==f?f:new THREE.Plane]};THREE.Frustum.prototype={constructor:THREE.Frustum,set:function(a,b,c,d,e,f){var g=this.planes;g[0].copy(a);g[1].copy(b);g[2].copy(c);g[3].copy(d);g[4].copy(e);g[5].copy(f);return this},clone:function(){return(new this.constructor).copy(this)},copy:function(a){for(var b=this.planes,c=0;6>c;c++)b[c].copy(a.planes[c]);return this},setFromMatrix:function(a){var b=this.planes,c=a.elements;a=c[0];var d=c[1],e=c[2],f=c[3],g=c[4],h=c[5],k=c[6],l=c[7],p=c[8],n=c[9],m=c[10],q=c[11],u=c[12],v=c[13],t=c[14],c=c[15];b[0].setComponents(f-a,l-g,q-p,c-u).normalize();b[1].setComponents(f+a,l+g,q+p,c+u).normalize();b[2].setComponents(f+d,l+h,q+n,c+v).normalize();b[3].setComponents(f-d,l-h,q-n,c-v).normalize();b[4].setComponents(f-e,l-k,q-m,c-t).normalize();b[5].setComponents(f+e,l+k,q+m,c+t).normalize();return this},intersectsObject:function(){var a=new THREE.Sphere;return function(b){var c=b.geometry;null===c.boundingSphere&&c.computeBoundingSphere();a.copy(c.boundingSphere);a.applyMatrix4(b.matrixWorld);return this.intersectsSphere(a)}}(),intersectsSphere:function(a){var b=this.planes,c=a.center;a=-a.radius;for(var d=0;6>d;d++)if(b[d].distanceToPoint(c)e;e++){var f=d[e];a.x=0g&&0>f)return!1}return!0}}(),containsPoint:function(a){for(var b=this.planes,c=0;6>c;c++)if(0>b[c].distanceToPoint(a))return!1;return!0}};THREE.Plane=function(a,b){this.normal=void 0!==a?a:new THREE.Vector3(1,0,0);this.constant=void 0!==b?b:0};THREE.Plane.prototype={constructor:THREE.Plane,set:function(a,b){this.normal.copy(a);this.constant=b;return this},setComponents:function(a,b,c,d){this.normal.set(a,b,c);this.constant=d;return this},setFromNormalAndCoplanarPoint:function(a,b){this.normal.copy(a);this.constant=-b.dot(this.normal);return this},setFromCoplanarPoints:function(){var a=new THREE.Vector3,b=new THREE.Vector3;return function(c,d,e){d=a.subVectors(e,d).cross(b.subVectors(c,d)).normalize();this.setFromNormalAndCoplanarPoint(d,c);return this}}(),clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.normal.copy(a.normal);this.constant=a.constant;return this},normalize:function(){var a=1/this.normal.length();this.normal.multiplyScalar(a);this.constant*=a;return this},negate:function(){this.constant*=-1;this.normal.negate();return this},distanceToPoint:function(a){return this.normal.dot(a)+this.constant},distanceToSphere:function(a){return this.distanceToPoint(a.center)-a.radius},projectPoint:function(a,b){return this.orthoPoint(a,b).sub(a).negate()},orthoPoint:function(a,b){var c=this.distanceToPoint(a);return(b||new THREE.Vector3).copy(this.normal).multiplyScalar(c)},intersectLine:function(){var a=new THREE.Vector3;return function(b,c){var d=c||new THREE.Vector3,e=b.delta(a),f=this.normal.dot(e);if(0===f){if(0===this.distanceToPoint(b.start))return d.copy(b.start)}else return f=-(b.start.dot(this.normal)+this.constant)/f,0>f||1b&&0a&&0e;e++)8===e||13===e||18===e||23===e?b[e]="-":14===e?b[e]="4":(2>=c&&(c=33554432+16777216*Math.random()|0),d=c&15,c>>=4,b[e]=a[19===e?d&3|8:d]);return b.join("")}}(),clamp:function(a,b,c){return Math.max(b,Math.min(c,a))},euclideanModulo:function(a,b){return(a%b+b)%b},mapLinear:function(a,b,c,d,e){return d+(a-b)*(e-d)/(c-b)},smoothstep:function(a,b,c){if(a<=b)return 0;if(a>=c)return 1;a=(a-b)/(c-b);return a*a*(3-2*a)},smootherstep:function(a,b,c){if(a<=b)return 0;if(a>=c)return 1;a=(a-b)/(c-b);return a*a*a*(a*(6*a-15)+10)},random16:function(){console.warn("THREE.Math.random16() has been deprecated. Use Math.random() instead.");return Math.random()},randInt:function(a,b){return a+Math.floor(Math.random()*(b-a+1))},randFloat:function(a,b){return a+Math.random()*(b-a)},randFloatSpread:function(a){return a*(.5-Math.random())},degToRad:function(){var a=Math.PI/180;return function(b){return b*a}}(),radToDeg:function(){var a=180/Math.PI;return function(b){return b*a}}(),isPowerOfTwo:function(a){return 0===(a&a-1)&&0!==a},nearestPowerOfTwo:function(a){return Math.pow(2,Math.round(Math.log(a)/Math.LN2))},nextPowerOfTwo:function(a){a--;a|=a>>1;a|=a>>2;a|=a>>4;a|=a>>8;a|=a>>16;a++;return a}};THREE.Spline=function(a){function b(a,b,c,d,e,f,g){a=.5*(c-a);d=.5*(d-b);return(2*(b-c)+a+d)*g+(-3*(b-c)-2*a-d)*f+a*e+b}this.points=a;var c=[],d={x:0,y:0,z:0},e,f,g,h,k,l,p,n,m;this.initFromArray=function(a){this.points=[];for(var b=0;bthis.points.length-2?this.points.length-1:f+1;c[3]=f>this.points.length-3?this.points.length-1:f+2;l=this.points[c[0]];p=this.points[c[1]];n=this.points[c[2]];m=this.points[c[3]];h=g*g;k=g*h;d.x=b(l.x,p.x,n.x,m.x,g,h,k);d.y=b(l.y,p.y,n.y,m.y,g,h,k);d.z=b(l.z,p.z,n.z,m.z,g,h,k);return d};this.getControlPointsArray=function(){var a,b,c=this.points.length,d=[];for(a=0;a=b.x+b.y}}();THREE.Triangle.prototype={constructor:THREE.Triangle,set:function(a,b,c){this.a.copy(a);this.b.copy(b);this.c.copy(c);return this},setFromPointsAndIndices:function(a,b,c,d){this.a.copy(a[b]);this.b.copy(a[c]);this.c.copy(a[d]);return this},clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.a.copy(a.a);this.b.copy(a.b);this.c.copy(a.c);return this},area:function(){var a=new THREE.Vector3,b=new THREE.Vector3;return function(){a.subVectors(this.c,this.b);b.subVectors(this.a,this.b);return.5*a.cross(b).length()}}(),midpoint:function(a){return(a||new THREE.Vector3).addVectors(this.a,this.b).add(this.c).multiplyScalar(1/3)},normal:function(a){return THREE.Triangle.normal(this.a,this.b,this.c,a)},plane:function(a){return(a||new THREE.Plane).setFromCoplanarPoints(this.a,this.b,this.c)},barycoordFromPoint:function(a,b){return THREE.Triangle.barycoordFromPoint(a,this.a,this.b,this.c,b)},containsPoint:function(a){return THREE.Triangle.containsPoint(a,this.a,this.b,this.c)},equals:function(a){return a.a.equals(this.a)&&a.b.equals(this.b)&&a.c.equals(this.c)}};THREE.Interpolant=function(a,b,c,d){this.parameterPositions=a;this._cachedIndex=0;this.resultBuffer=void 0!==d?d:new b.constructor(c);this.sampleValues=b;this.valueSize=c};THREE.Interpolant.prototype={constructor:THREE.Interpolant,evaluate:function(a){var b=this.parameterPositions,c=this._cachedIndex,d=b[c],e=b[c-1];a:{b:{c:{d:if(!(a=e)break a;else{f=b[1];a=e)break b}d=c;c=0}}for(;c>>1,ad;d++)if(e[d]===e[(d+1)%3]){a.push(f);break}for(f=a.length-1;0<=f;f--)for(e=a[f],this.faces.splice(e,1),c=0,g=this.faceVertexUvs.length;cthis.duration&&this.resetDuration();this.trim();this.optimize()};THREE.AnimationClip.prototype={constructor:THREE.AnimationClip,resetDuration:function(){for(var a=0,b=0,c=this.tracks.length;b!==c;++b)var d=this.tracks[b],a=Math.max(a,d.times[d.times.length-1]);this.duration=a},trim:function(){for(var a=0;ab||0===c)return;this._startTime=null;b*=c}b*=this._updateTimeScale(a);c=this._updateTime(b);a=this._updateWeight(a);if(0c.parameterPositions[1]&&(this.stopFading(),0===d&&(this.enabled=!1))}}return this._effectiveWeight=b},_updateTimeScale:function(a){var b=0;if(!this.paused){var b=this.timeScale,c=this._timeScaleInterpolant;if(null!==c){var d=c.evaluate(a)[0],b=b*d;a>c.parameterPositions[1]&&(this.stopWarping(),0===b?this.pause=!0:this.timeScale=b)}}return this._effectiveTimeScale=b},_updateTime:function(a){var b=this.time+a;if(0===a)return b;var c=this._clip.duration,d=this.loop,e=this._loopCount,f=!1;switch(d){case THREE.LoopOnce:-1===e&&(this.loopCount=0,this._setEndings(!0,!0,!1));if(b>=c)b=c;else if(0>b)b=0;else break;this.clampWhenFinished?this.pause=!0:this.enabled=!1;this._mixer.dispatchEvent({type:"finished",action:this,direction:0>a?-1:1});break;case THREE.LoopPingPong:f=!0;case THREE.LoopRepeat:-1===e&&(0=c||0>b){var g=Math.floor(b/c),b=b-c*g,e=e+Math.abs(g),h=this.repetitions-e;if(0>h){this.clampWhenFinished?this.paused=!0:this.enabled=!1;b=0a,this._setEndings(a,!a,f)):this._setEndings(!1,!1,f);this._loopCount=e;this._mixer.dispatchEvent({type:"loop",action:this,loopDelta:g})}if(d===THREE.LoopPingPong&&1===(e&1))return this.time=b,c-b}return this.time=b},_setEndings:function(a,b,c){var d=this._interpolantSettings;c?(d.endingStart=THREE.ZeroSlopeEnding,d.endingEnd=THREE.ZeroSlopeEnding):(d.endingStart=a?this.zeroSlopeAtStart?THREE.ZeroSlopeEnding:THREE.ZeroCurvatureEnding:THREE.WrapAroundEnding,d.endingEnd=b?this.zeroSlopeAtEnd?THREE.ZeroSlopeEnding:THREE.ZeroCurvatureEnding:THREE.WrapAroundEnding)},_scheduleFading:function(a,b,c){var d=this._mixer,e=d.time,f=this._weightInterpolant;null===f&&(this._weightInterpolant=f=d._lendControlInterpolant());d=f.parameterPositions;f=f.sampleValues;d[0]=e;f[0]=b;d[1]=e+a;f[1]=c;return this}};Object.assign(THREE.AnimationMixer.prototype,{_bindAction:function(a,b){var c=a._localRoot||this._root,d=a._clip.tracks,e=d.length,f=a._propertyBindings,g=a._interpolants,h=c.uuid,k=this._bindingsByRootAndName,l=k[h];void 0===l&&(l={},k[h]=l);for(k=0;k!==e;++k){var p=d[k],n=p.name,m=l[n];if(void 0===m){m=f[k];if(void 0!==m){null===m._cacheIndex&&(++m.referenceCount,this._addInactiveBinding(m,h,n));continue}m=new THREE.PropertyMixer(THREE.PropertyBinding.create(c,n,b&&b._propertyBindings[k].binding.parsedPath),p.ValueTypeName,p.getValueSize());++m.referenceCount;this._addInactiveBinding(m,h,n)}f[k]=m;g[k].resultBuffer=m.buffer}},_activateAction:function(a){if(!this._isActiveAction(a)){if(null===a._cacheIndex){var b=(a._localRoot||this._root).uuid,c=a._clip.name,d=this._actionsByClip[c];this._bindAction(a,d&&d.knownActions[0]);this._addInactiveAction(a,c,b)}b=a._propertyBindings;c=0;for(d=b.length;c!==d;++c){var e=b[c];0===e.useCount++&&(this._lendBinding(e),e.saveOriginalState())}this._lendAction(a)}},_deactivateAction:function(a){if(this._isActiveAction(a)){for(var b=a._propertyBindings,c=0,d=b.length;c!==d;++c){var e=b[c];0===--e.useCount&&(e.restoreOriginalState(),this._takeBackBinding(e))}this._takeBackAction(a)}},_initMemoryManager:function(){this._actions=[];this._nActiveActions=0;this._actionsByClip={};this._bindings=[];this._nActiveBindings=0;this._bindingsByRootAndName={};this._controlInterpolants=[];this._nActiveControlInterpolants=0;var a=this;this.stats={actions:{get total(){return a._actions.length},get inUse(){return a._nActiveActions}},bindings:{get total(){return a._bindings.length},get inUse(){return a._nActiveBindings}},controlInterpolants:{get total(){return a._controlInterpolants.length},get inUse(){return a._nActiveControlInterpolants}}}},_isActiveAction:function(a){a=a._cacheIndex;return null!==a&&a=c){var n=c++,m=b[n];d[m.uuid]=p;b[p]=m;d[l]=n;b[n]=k;k=0;for(l=f;k!==l;++k){var m=e[k],q=m[p];m[p]=m[n];m[n]=q}}}this.nCachedObjects_=c},uncache:function(a){for(var b=this._objects,c=b.length,d=this.nCachedObjects_,e=this._indicesByUUID,f=this._bindings,g=f.length,h=0,k=arguments.length;h!==k;++h){var l=arguments[h].uuid,p=e[l];if(void 0!==p)if(delete e[l],pb;)--f;++f;if(0!==e||f!==d)e>=f&&(f=Math.max(f,1),e=f-1),d=this.getValueSize(),this.times=THREE.AnimationUtils.arraySlice(c,e,f),this.values=THREE.AnimationUtils.arraySlice(this.values,e*d,f*d);return this},validate:function(){var a=!0,b=this.getValueSize();0!==b-Math.floor(b)&&(console.error("invalid value size in track",this),a=!1);var c=this.times,b=this.values,d=c.length;0===d&&(console.error("track is empty",this),a=!1);for(var e=null,f=0;f!==d;f++){var g=c[f];if("number"===typeof g&&isNaN(g)){console.error("time is not a valid number",this,f,g);a=!1;break}if(null!==e&&e>g){console.error("out of order keys",this,f,g,e);a=!1;break}e=g}if(void 0!==b&&THREE.AnimationUtils.isTypedArray(b))for(f=0,c=b.length;f!==c;++f)if(d=b[f],isNaN(d)){console.error("value is not a valid number",this,f,d);a=!1;break}return a},optimize:function(){for(var a=this.times,b=this.values,c=this.getValueSize(),d=1,e=1,f=a.length-1;e<=f;++e){var g=!1,h=a[e];if(h!==a[e+1]&&(1!==e||h!==h[0]))for(var k=e*c,l=k-c,p=k+c,h=0;h!==c;++h){var n=b[k+h];if(n!==b[l+h]||n!==b[p+h]){g=!0;break}}if(g){if(e!==d)for(a[d]=a[e],g=e*c,k=d*c,h=0;h!==c;++h)b[k+h]=b[g+h];++d}}d!==a.length&&(this.times=THREE.AnimationUtils.arraySlice(a,0,d),this.values=THREE.AnimationUtils.arraySlice(b,0,d*c));return this}};Object.assign(THREE.KeyframeTrack,{parse:function(a){if(void 0===a.type)throw Error("track type undefined, can not parse");var b=THREE.KeyframeTrack._getTrackTypeForValueTypeName(a.type);if(void 0===a.times){console.warn("legacy JSON format detected, converting");var c=[],d=[];THREE.AnimationUtils.flattenJSON(a.keys,c,d,"value");a.times=c;a.values=d}return void 0!==b.parse?b.parse(a):new b(a.name,a.times,a.values,a.interpolation)},toJSON:function(a){var b=a.constructor;if(void 0!==b.toJSON)b=b.toJSON(a);else{var b={name:a.name,times:THREE.AnimationUtils.convertArray(a.times,Array),values:THREE.AnimationUtils.convertArray(a.values,Array)},c=a.getInterpolation();c!==a.DefaultInterpolation&&(b.interpolation=c)}b.type=a.ValueTypeName;return b},_getTrackTypeForValueTypeName:function(a){switch(a.toLowerCase()){case"scalar":case"double":case"float":case"number":case"integer":return THREE.NumberKeyframeTrack;case"vector":case"vector2":case"vector3":case"vector4":return THREE.VectorKeyframeTrack;case"color":return THREE.ColorKeyframeTrack;case"quaternion":return THREE.QuaternionKeyframeTrack;case"bool":case"boolean":return THREE.BooleanKeyframeTrack;case"string":return THREE.StringKeyframeTrack}throw Error("Unsupported typeName: "+a)}});THREE.PropertyBinding=function(a,b,c){this.path=b;this.parsedPath=c||THREE.PropertyBinding.parseTrackName(b);this.node=THREE.PropertyBinding.findNode(a,this.parsedPath.nodeName)||a;this.rootNode=a};THREE.PropertyBinding.prototype={constructor:THREE.PropertyBinding,getValue:function(a,b){this.bind();this.getValue(a,b)},setValue:function(a,b){this.bind();this.setValue(a,b)},bind:function(){var a=this.node,b=this.parsedPath,c=b.objectName,d=b.propertyName,e=b.propertyIndex;a||(this.node=a=THREE.PropertyBinding.findNode(this.rootNode,b.nodeName)||this.rootNode);this.getValue=this._getValue_unavailable;this.setValue=this._setValue_unavailable;if(a){if(c){var f=b.objectIndex;switch(c){case"materials":if(!a.material){console.error(" can not bind to material as node does not have a material",this);return}if(!a.material.materials){console.error(" can not bind to material.materials as node.material does not have a materials array",this);return}a=a.material.materials;break;case"bones":if(!a.skeleton){console.error(" can not bind to bones as node does not have a skeleton",this);return}a=a.skeleton.bones;for(c=0;cd&&this._mixBufferRegion(c,a,3*b,1-d,b);for(var d=b,f=b+b;d!==f;++d)if(c[d]!==c[d+b]){e.setValue(c,a);break}},saveOriginalState:function(){var a=this.buffer,b=this.valueSize,c=3*b;this.binding.getValue(a,c);for(var d=b;d!==c;++d)a[d]=a[c+d%b];this.cumulativeWeight=0},restoreOriginalState:function(){this.binding.setValue(this.buffer,3*this.valueSize)},_select:function(a,b,c,d,e){if(.5<=d)for(d=0;d!==e;++d)a[b+d]=a[c+d]},_slerp:function(a,b,c,d,e){THREE.Quaternion.slerpFlat(a,b,a,b,a,c,d)},_lerp:function(a,b,c,d,e){for(var f=1-d,g=0;g!==e;++g){var h=b+g;a[h]=a[h]*f+a[c+g]*d}}};THREE.BooleanKeyframeTrack=function(a,b,c){THREE.KeyframeTrack.call(this,a,b,c)};THREE.BooleanKeyframeTrack.prototype=Object.assign(Object.create(THREE.KeyframeTrack.prototype),{constructor:THREE.BooleanKeyframeTrack,ValueTypeName:"bool",ValueBufferType:Array,DefaultInterpolation:THREE.IntepolateDiscrete,InterpolantFactoryMethodLinear:void 0,InterpolantFactoryMethodSmooth:void 0});THREE.NumberKeyframeTrack=function(a,b,c,d){THREE.KeyframeTrack.call(this,a,b,c,d)};THREE.NumberKeyframeTrack.prototype=Object.assign(Object.create(THREE.KeyframeTrack.prototype),{constructor:THREE.NumberKeyframeTrack,ValueTypeName:"number"});THREE.QuaternionKeyframeTrack=function(a,b,c,d){THREE.KeyframeTrack.call(this,a,b,c,d)};THREE.QuaternionKeyframeTrack.prototype=Object.assign(Object.create(THREE.KeyframeTrack.prototype),{constructor:THREE.QuaternionKeyframeTrack,ValueTypeName:"quaternion",DefaultInterpolation:THREE.InterpolateLinear,InterpolantFactoryMethodLinear:function(a){return new THREE.QuaternionLinearInterpolant(this.times,this.values,this.getValueSize(),a)},InterpolantFactoryMethodSmooth:void 0});THREE.StringKeyframeTrack=function(a,b,c,d){THREE.KeyframeTrack.call(this,a,b,c,d)};THREE.StringKeyframeTrack.prototype=Object.assign(Object.create(THREE.KeyframeTrack.prototype),{constructor:THREE.StringKeyframeTrack,ValueTypeName:"string",ValueBufferType:Array,DefaultInterpolation:THREE.IntepolateDiscrete,InterpolantFactoryMethodLinear:void 0,InterpolantFactoryMethodSmooth:void 0});THREE.VectorKeyframeTrack=function(a,b,c,d){THREE.KeyframeTrack.call(this,a,b,c,d)};THREE.VectorKeyframeTrack.prototype=Object.assign(Object.create(THREE.KeyframeTrack.prototype),{constructor:THREE.VectorKeyframeTrack,ValueTypeName:"vector"});THREE.Audio=function(a){THREE.Object3D.call(this);this.type="Audio";this.context=a.context;this.source=this.context.createBufferSource();this.source.onended=this.onEnded.bind(this);this.gain=this.context.createGain();this.gain.connect(a.getInput());this.autoplay=!1;this.startTime=0;this.playbackRate=1;this.isPlaying=!1;this.hasPlaybackControl=!0;this.sourceType="empty";this.filter=null};THREE.Audio.prototype=Object.create(THREE.Object3D.prototype);THREE.Audio.prototype.constructor=THREE.Audio;THREE.Audio.prototype.getOutput=function(){return this.gain};THREE.Audio.prototype.load=function(a){var b=new THREE.AudioBuffer(this.context);b.load(a);this.setBuffer(b);return this};THREE.Audio.prototype.setNodeSource=function(a){this.hasPlaybackControl=!1;this.sourceType="audioNode";this.source=a;this.connect();return this};THREE.Audio.prototype.setBuffer=function(a){var b=this;a.onReady(function(a){b.source.buffer=a;b.sourceType="buffer";b.autoplay&&b.play()});return this};THREE.Audio.prototype.play=function(){if(!0===this.isPlaying)console.warn("THREE.Audio: Audio is already playing.");else if(!1===this.hasPlaybackControl)console.warn("THREE.Audio: this Audio has no playback control.");else{var a=this.context.createBufferSource();a.buffer=this.source.buffer;a.loop=this.source.loop;a.onended=this.source.onended;a.start(0,this.startTime);a.playbackRate.value=this.playbackRate;this.isPlaying=!0;this.source=a;this.connect()}};THREE.Audio.prototype.pause=function(){!1===this.hasPlaybackControl?console.warn("THREE.Audio: this Audio has no playback control."):(this.source.stop(),this.startTime=this.context.currentTime)};THREE.Audio.prototype.stop=function(){!1===this.hasPlaybackControl?console.warn("THREE.Audio: this Audio has no playback control."):(this.source.stop(),this.startTime=0)};THREE.Audio.prototype.connect=function(){null!==this.filter?(this.source.connect(this.filter),this.filter.connect(this.getOutput())):this.source.connect(this.getOutput())};THREE.Audio.prototype.disconnect=function(){null!==this.filter?(this.source.disconnect(this.filter),this.filter.disconnect(this.getOutput())):this.source.disconnect(this.getOutput())};THREE.Audio.prototype.getFilter=function(){return this.filter};THREE.Audio.prototype.setFilter=function(a){void 0===a&&(a=null);!0===this.isPlaying?(this.disconnect(),this.filter=a,this.connect()):this.filter=a};THREE.Audio.prototype.setPlaybackRate=function(a){!1===this.hasPlaybackControl?console.warn("THREE.Audio: this Audio has no playback control."):(this.playbackRate=a,!0===this.isPlaying&&(this.source.playbackRate.value=this.playbackRate))};THREE.Audio.prototype.getPlaybackRate=function(){return this.playbackRate};THREE.Audio.prototype.onEnded=function(){this.isPlaying=!1};THREE.Audio.prototype.setLoop=function(a){!1===this.hasPlaybackControl?console.warn("THREE.Audio: this Audio has no playback control."):this.source.loop=a};THREE.Audio.prototype.getLoop=function(){return!1===this.hasPlaybackControl?(console.warn("THREE.Audio: this Audio has no playback control."),!1):this.source.loop};THREE.Audio.prototype.setVolume=function(a){this.gain.gain.value=a};THREE.Audio.prototype.getVolume=function(){return this.gain.gain.value};THREE.AudioAnalyser=function(a,b){this.analyser=a.context.createAnalyser();this.analyser.fftSize=void 0!==b?b:2048;this.data=new Uint8Array(this.analyser.frequencyBinCount);a.getOutput().connect(this.analyser)};THREE.AudioAnalyser.prototype={constructor:THREE.AudioAnalyser,getData:function(){this.analyser.getByteFrequencyData(this.data);return this.data}};THREE.AudioBuffer=function(a){this.context=a;this.ready=!1;this.readyCallbacks=[]};THREE.AudioBuffer.prototype.load=function(a){var b=this,c=new XMLHttpRequest;c.open("GET",a,!0);c.responseType="arraybuffer";c.onload=function(a){b.context.decodeAudioData(this.response,function(a){b.buffer=a;b.ready=!0;for(a=0;a-1?e(a,b,c):b.indexOf("%")>-1?f(a,b,c):b.indexOf(":")>-1?g(a,b):i(a._value,b,c)}function d(a,b){var c,d,e,f,g,i=b,j=["KB","MB","GB","TB","PB","EB","ZB","YB"],k=!1;if(b.indexOf(":")>-1)a._value=h(b);else if(b===q)a._value=0;else{for("."!==o[p].delimiters.decimal&&(b=b.replace(/\./g,"").replace(o[p].delimiters.decimal,".")),c=new RegExp("[^a-zA-Z]"+o[p].abbreviations.thousand+"(?:\\)|(\\"+o[p].currency.symbol+")?(?:\\))?)?$"),d=new RegExp("[^a-zA-Z]"+o[p].abbreviations.million+"(?:\\)|(\\"+o[p].currency.symbol+")?(?:\\))?)?$"),e=new RegExp("[^a-zA-Z]"+o[p].abbreviations.billion+"(?:\\)|(\\"+o[p].currency.symbol+")?(?:\\))?)?$"),f=new RegExp("[^a-zA-Z]"+o[p].abbreviations.trillion+"(?:\\)|(\\"+o[p].currency.symbol+")?(?:\\))?)?$"),g=0;g<=j.length&&!(k=b.indexOf(j[g])>-1?Math.pow(1024,g+1):!1);g++);a._value=(k?k:1)*(i.match(c)?Math.pow(10,3):1)*(i.match(d)?Math.pow(10,6):1)*(i.match(e)?Math.pow(10,9):1)*(i.match(f)?Math.pow(10,12):1)*(b.indexOf("%")>-1?.01:1)*((b.split("-").length+Math.min(b.split("(").length-1,b.split(")").length-1))%2?1:-1)*Number(b.replace(/[^0-9\.]+/g,"")),a._value=k?Math.ceil(a._value):a._value}return a._value}function e(a,b,c){var d,e,f=b.indexOf("$"),g=b.indexOf("("),h=b.indexOf("-"),j="";return b.indexOf(" $")>-1?(j=" ",b=b.replace(" $","")):b.indexOf("$ ")>-1?(j=" ",b=b.replace("$ ","")):b=b.replace("$",""),e=i(a._value,b,c),1>=f?e.indexOf("(")>-1||e.indexOf("-")>-1?(e=e.split(""),d=1,(g>f||h>f)&&(d=0),e.splice(d,0,o[p].currency.symbol+j),e=e.join("")):e=o[p].currency.symbol+j+e:e.indexOf(")")>-1?(e=e.split(""),e.splice(-1,0,j+o[p].currency.symbol),e=e.join("")):e=e+j+o[p].currency.symbol,e}function f(a,b,c){var d,e="",f=100*a._value;return b.indexOf(" %")>-1?(e=" ",b=b.replace(" %","")):b=b.replace("%",""),d=i(f,b,c),d.indexOf(")")>-1?(d=d.split(""),d.splice(-1,0,e+"%"),d=d.join("")):d=d+e+"%",d}function g(a){var b=Math.floor(a._value/60/60),c=Math.floor((a._value-60*b*60)/60),d=Math.round(a._value-60*b*60-60*c);return b+":"+(10>c?"0"+c:c)+":"+(10>d?"0"+d:d)}function h(a){var b=a.split(":"),c=0;return 3===b.length?(c+=60*Number(b[0])*60,c+=60*Number(b[1]),c+=Number(b[2])):2===b.length&&(c+=60*Number(b[0]),c+=Number(b[1])),Number(c)}function i(a,c,d){var e,f,g,h,i,j,k=!1,l=!1,m=!1,n="",r=!1,s=!1,t=!1,u=!1,v=!1,w="",x="",y=Math.abs(a),z=["B","KB","MB","GB","TB","PB","EB","ZB","YB"],A="",B=!1;if(0===a&&null!==q)return q;if(c.indexOf("(")>-1?(k=!0,c=c.slice(1,-1)):c.indexOf("+")>-1&&(l=!0,c=c.replace(/\+/g,"")),c.indexOf("a")>-1&&(r=c.indexOf("aK")>=0,s=c.indexOf("aM")>=0,t=c.indexOf("aB")>=0,u=c.indexOf("aT")>=0,v=r||s||t||u,c.indexOf(" a")>-1?(n=" ",c=c.replace(" a","")):c=c.replace("a",""),y>=Math.pow(10,12)&&!v||u?(n+=o[p].abbreviations.trillion,a/=Math.pow(10,12)):y=Math.pow(10,9)&&!v||t?(n+=o[p].abbreviations.billion,a/=Math.pow(10,9)):y=Math.pow(10,6)&&!v||s?(n+=o[p].abbreviations.million,a/=Math.pow(10,6)):(y=Math.pow(10,3)&&!v||r)&&(n+=o[p].abbreviations.thousand,a/=Math.pow(10,3))),c.indexOf("b")>-1)for(c.indexOf(" b")>-1?(w=" ",c=c.replace(" b","")):c=c.replace("b",""),g=0;g<=z.length;g++)if(e=Math.pow(1024,g),f=Math.pow(1024,g+1),a>=e&&f>a){w+=z[g],e>0&&(a/=e);break}return c.indexOf("o")>-1&&(c.indexOf(" o")>-1?(x=" ",c=c.replace(" o","")):c=c.replace("o",""),x+=o[p].ordinal(a)),c.indexOf("[.]")>-1&&(m=!0,c=c.replace("[.]",".")),h=a.toString().split(".")[0],i=c.split(".")[1],j=c.indexOf(","),i?(i.indexOf("[")>-1?(i=i.replace("]",""),i=i.split("["),A=b(a,i[0].length+i[1].length,d,i[1].length)):A=b(a,i.length,d),h=A.split(".")[0],A=A.split(".")[1].length?o[p].delimiters.decimal+A.split(".")[1]:"",m&&0===Number(A.slice(1))&&(A="")):h=b(a,null,d),h.indexOf("-")>-1&&(h=h.slice(1),B=!0),j>-1&&(h=h.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g,"$1"+o[p].delimiters.thousands)),0===c.indexOf(".")&&(h=""),(k&&B?"(":"")+(!k&&B?"-":"")+(!B&&l?"+":"")+h+A+(x?x:"")+(n?n:"")+(w?w:"")+(k&&B?")":"")}function j(a,b){o[a]=b}function k(a){var b=a.toString().split(".");return b.length<2?1:Math.pow(10,b[1].length)}function l(){var a=Array.prototype.slice.call(arguments);return a.reduce(function(a,b){var c=k(a),d=k(b);return c>d?c:d},-1/0)}var m,n="1.5.3",o={},p="en",q=null,r="0,0",s="undefined"!=typeof module&&module.exports;m=function(b){return m.isNumeral(b)?b=b.value():0===b||"undefined"==typeof b?b=0:Number(b)||(b=m.fn.unformat(b)),new a(Number(b))},m.version=n,m.isNumeral=function(b){return b instanceof a},m.language=function(a,b){if(!a)return p;if(a&&!b){if(!o[a])throw new Error("Unknown language : "+a);p=a}return(b||!o[a])&&j(a,b),m},m.languageData=function(a){if(!a)return o[p];if(!o[a])throw new Error("Unknown language : "+a);return o[a]},m.language("en",{delimiters:{thousands:",",decimal:"."},abbreviations:{thousand:"k",million:"m",billion:"b",trillion:"t"},ordinal:function(a){var b=a%10;return 1===~~(a%100/10)?"th":1===b?"st":2===b?"nd":3===b?"rd":"th"},currency:{symbol:"$"}}),m.zeroFormat=function(a){q="string"==typeof a?a:null},m.defaultFormat=function(a){r="string"==typeof a?a:"0.0"},"function"!=typeof Array.prototype.reduce&&(Array.prototype.reduce=function(a,b){"use strict";if(null===this||"undefined"==typeof this)throw new TypeError("Array.prototype.reduce called on null or undefined");if("function"!=typeof a)throw new TypeError(a+" is not a function");var c,d,e=this.length>>>0,f=!1;for(1c;++c)this.hasOwnProperty(c)&&(f?d=a(d,this[c],c,this):(d=this[c],f=!0));if(!f)throw new TypeError("Reduce of empty array with no initial value");return d}),m.fn=a.prototype={clone:function(){return m(this)},format:function(a,b){return c(this,a?a:r,void 0!==b?b:Math.round)},unformat:function(a){return"[object Number]"===Object.prototype.toString.call(a)?a:d(this,a?a:r)},value:function(){return this._value},valueOf:function(){return this._value},set:function(a){return this._value=Number(a),this},add:function(a){function b(a,b){return a+c*b}var c=l.call(null,this._value,a);return this._value=[this._value,a].reduce(b,0)/c,this},subtract:function(a){function b(a,b){return a-c*b}var c=l.call(null,this._value,a);return this._value=[a].reduce(b,this._value*c)/c,this},multiply:function(a){function b(a,b){var c=l(a,b);return a*c*b*c/(c*c)}return this._value=[this._value,a].reduce(b,1),this},divide:function(a){function b(a,b){var c=l(a,b);return a*c/(b*c)}return this._value=[this._value,a].reduce(b),this},difference:function(a){return Math.abs(m(this._value).subtract(a).value())}},s&&(module.exports=m),"undefined"==typeof ender&&(this.numeral=m),"function"==typeof define&&define.amd&&define([],function(){return m})}).call(this); +// Extracted Richard Bunt's work in Telemachus: https://github.com/richardbunt/Telemachus/blob/master/WebPages/WebPages/src/console.js -break;case"mapAORepeat":case"mapAOOffset":case"mapAOWrap":case"mapAOAnisotropy":break;case"mapBump":k.bumpMap=g(p,d.mapBumpRepeat,d.mapBumpOffset,d.mapBumpWrap,d.mapBumpAnisotropy);break;case"mapBumpScale":k.bumpScale=p;break;case"mapBumpRepeat":case"mapBumpOffset":case"mapBumpWrap":case"mapBumpAnisotropy":break;case"mapNormal":k.normalMap=g(p,d.mapNormalRepeat,d.mapNormalOffset,d.mapNormalWrap,d.mapNormalAnisotropy);break;case"mapNormalFactor":k.normalScale=[p,p];break;case"mapNormalRepeat":case"mapNormalOffset":case"mapNormalWrap":case"mapNormalAnisotropy":break;case"mapSpecular":k.specularMap=g(p,d.mapSpecularRepeat,d.mapSpecularOffset,d.mapSpecularWrap,d.mapSpecularAnisotropy);break;case"mapSpecularRepeat":case"mapSpecularOffset":case"mapSpecularWrap":case"mapSpecularAnisotropy":break;case"mapAlpha":k.alphaMap=g(p,d.mapAlphaRepeat,d.mapAlphaOffset,d.mapAlphaWrap,d.mapAlphaAnisotropy);break;case"mapAlphaRepeat":case"mapAlphaOffset":case"mapAlphaWrap":case"mapAlphaAnisotropy":break;case"flipSided":k.side=THREE.BackSide;break;case"doubleSided":k.side=THREE.DoubleSide;break;case"transparency":console.warn("THREE.Loader.createMaterial: transparency has been renamed to opacity");k.opacity=p;break;case"depthTest":case"depthWrite":case"colorWrite":case"opacity":case"reflectivity":case"transparent":case"visible":case"wireframe":k[l]=p;break;case"vertexColors":!0===p&&(k.vertexColors=THREE.VertexColors);"face"===p&&(k.vertexColors=THREE.FaceColors);break;default:console.error("THREE.Loader.createMaterial: Unsupported",l,p)}}"MeshBasicMaterial"===k.type&&delete k.emissive;"MeshPhongMaterial"!==k.type&&delete k.specular;1>k.opacity&&(k.transparent=!0);c.setTextures(h);return c.parse(k)}}()};THREE.Loader.Handlers={handlers:[],add:function(a,b){this.handlers.push(a,b)},get:function(a){for(var b=this.handlers,c=0,d=b.length;cg;g++)m=w[k++],s=t[2*m],m=t[2*m+1],s=new THREE.Vector2(s,m),2!==g&&c.faceVertexUvs[d][h].push(s),0!==g&&c.faceVertexUvs[d][h+1].push(s);n&&(n=3*w[k++],q.normal.set(E[n++],E[n++],E[n]),v.normal.copy(q.normal));if(u)for(d=0;4>d;d++)n=3*w[k++],u=new THREE.Vector3(E[n++],E[n++],E[n]),2!==d&&q.vertexNormals.push(u),0!==d&&v.vertexNormals.push(u);p&&(p=w[k++],p=x[p],q.color.setHex(p),v.color.setHex(p));if(b)for(d=0;4>d;d++)p=w[k++],p=x[p],2!==d&&q.vertexColors.push(new THREE.Color(p)),0!==d&&v.vertexColors.push(new THREE.Color(p));c.faces.push(q);c.faces.push(v)}else{q=new THREE.Face3;q.a=w[k++];q.b=w[k++];q.c=w[k++];h&&(h=w[k++],q.materialIndex=h);h=c.faces.length;if(d)for(d=0;dg;g++)m=w[k++],s=t[2*m],m=t[2*m+1],s=new THREE.Vector2(s,m),c.faceVertexUvs[d][h].push(s);n&&(n=3*w[k++],q.normal.set(E[n++],E[n++],E[n]));if(u)for(d=0;3>d;d++)n=3*w[k++],u=new THREE.Vector3(E[n++],E[n++],E[n]),q.vertexNormals.push(u);p&&(p=w[k++],q.color.setHex(x[p]));if(b)for(d=0;3>d;d++)p=w[k++],q.vertexColors.push(new THREE.Color(x[p]));c.faces.push(q)}})(d);(function(){var b=void 0!==a.influencesPerVertex?a.influencesPerVertex:2;if(a.skinWeights)for(var d=0,g=a.skinWeights.length;dthis.opacity&&(d.opacity=this.opacity);!0===this.transparent&&(d.transparent=this.transparent);0a.x||1a.x?0:1;break;case THREE.MirroredRepeatWrapping:1===Math.abs(Math.floor(a.x)%2)?a.x=Math.ceil(a.x)-a.x:a.x-=Math.floor(a.x)}if(0>a.y||1a.y?0:1;break;case THREE.MirroredRepeatWrapping:1===Math.abs(Math.floor(a.y)%2)?a.y=Math.ceil(a.y)-a.y:a.y-=Math.floor(a.y)}this.flipY&&(a.y=1-a.y)}}};THREE.EventDispatcher.prototype.apply(THREE.Texture.prototype);THREE.TextureIdCount=0;THREE.CanvasTexture=function(a,b,c,d,e,f,g,h,k){THREE.Texture.call(this,a,b,c,d,e,f,g,h,k);this.needsUpdate=!0};THREE.CanvasTexture.prototype=Object.create(THREE.Texture.prototype);THREE.CanvasTexture.prototype.constructor=THREE.CanvasTexture;THREE.CubeTexture=function(a,b,c,d,e,f,g,h,k){a=void 0!==a?a:[];b=void 0!==b?b:THREE.CubeReflectionMapping;THREE.Texture.call(this,a,b,c,d,e,f,g,h,k);this.flipY=!1};THREE.CubeTexture.prototype=Object.create(THREE.Texture.prototype);THREE.CubeTexture.prototype.constructor=THREE.CubeTexture;Object.defineProperty(THREE.CubeTexture.prototype,"images",{get:function(){return this.image},set:function(a){this.image=a}});THREE.CompressedTexture=function(a,b,c,d,e,f,g,h,k,l,p){THREE.Texture.call(this,null,f,g,h,k,l,d,e,p);this.image={width:b,height:c};this.mipmaps=a;this.generateMipmaps=this.flipY=!1};THREE.CompressedTexture.prototype=Object.create(THREE.Texture.prototype);THREE.CompressedTexture.prototype.constructor=THREE.CompressedTexture;THREE.DataTexture=function(a,b,c,d,e,f,g,h,k,l,p){THREE.Texture.call(this,null,f,g,h,k,l,d,e,p);this.image={data:a,width:b,height:c};this.magFilter=void 0!==k?k:THREE.NearestFilter;this.minFilter=void 0!==l?l:THREE.NearestFilter;this.generateMipmaps=this.flipY=!1};THREE.DataTexture.prototype=Object.create(THREE.Texture.prototype);THREE.DataTexture.prototype.constructor=THREE.DataTexture;THREE.VideoTexture=function(a,b,c,d,e,f,g,h,k){function l(){requestAnimationFrame(l);a.readyState===a.HAVE_ENOUGH_DATA&&(p.needsUpdate=!0)}THREE.Texture.call(this,a,b,c,d,e,f,g,h,k);this.generateMipmaps=!1;var p=this;l()};THREE.VideoTexture.prototype=Object.create(THREE.Texture.prototype);THREE.VideoTexture.prototype.constructor=THREE.VideoTexture;THREE.Group=function(){THREE.Object3D.call(this);this.type="Group"};THREE.Group.prototype=Object.create(THREE.Object3D.prototype);THREE.Group.prototype.constructor=THREE.Group;THREE.Points=function(a,b){THREE.Object3D.call(this);this.type="Points";this.geometry=void 0!==a?a:new THREE.Geometry;this.material=void 0!==b?b:new THREE.PointsMaterial({color:16777215*Math.random()})};THREE.Points.prototype=Object.create(THREE.Object3D.prototype);THREE.Points.prototype.constructor=THREE.Points;THREE.Points.prototype.raycast=function(){var a=new THREE.Matrix4,b=new THREE.Ray,c=new THREE.Sphere;return function(d,e){function f(a,c){var f=b.distanceSqToPoint(a);if(fd.far||e.push({distance:l,distanceToRay:Math.sqrt(f),point:h.clone(),index:c,face:null,object:g})}}var g=this,h=this.geometry,k=this.matrixWorld,l=d.params.Points.threshold;null===h.boundingSphere&&h.computeBoundingSphere();c.copy(h.boundingSphere);c.applyMatrix4(k);if(!1!==d.ray.intersectsSphere(c)){a.getInverse(k);b.copy(d.ray).applyMatrix4(a);var l=l/((this.scale.x+this.scale.y+this.scale.z)/3),p=l*l,l=new THREE.Vector3;if(h instanceof THREE.BufferGeometry){var n=h.index,h=h.attributes.position.array;if(null!==n)for(var m=n.array,n=0,q=m.length;nf||(p.applyMatrix4(this.matrixWorld),v=d.ray.origin.distanceTo(p),vd.far||e.push({distance:v,point:h.clone().applyMatrix4(this.matrixWorld),index:g,face:null,faceIndex:null,object:this}))}else for(g=0,u=q.length/3-1;gf||(p.applyMatrix4(this.matrixWorld),v=d.ray.origin.distanceTo(p),vd.far||e.push({distance:v,point:h.clone().applyMatrix4(this.matrixWorld),index:g,face:null,faceIndex:null,object:this}))}else if(g instanceof THREE.Geometry)for(k=g.vertices,l=k.length,g=0;gf||(p.applyMatrix4(this.matrixWorld),v=d.ray.origin.distanceTo(p),vd.far||e.push({distance:v,point:h.clone().applyMatrix4(this.matrixWorld),index:g,face:null,faceIndex:null,object:this}))}}}();THREE.Line.prototype.clone=function(){return new this.constructor(this.geometry,this.material).copy(this)};THREE.LineStrip=0;THREE.LinePieces=1;THREE.LineSegments=function(a,b){THREE.Line.call(this,a,b);this.type="LineSegments"};THREE.LineSegments.prototype=Object.create(THREE.Line.prototype);THREE.LineSegments.prototype.constructor=THREE.LineSegments;THREE.Mesh=function(a,b){THREE.Object3D.call(this);this.type="Mesh";this.geometry=void 0!==a?a:new THREE.Geometry;this.material=void 0!==b?b:new THREE.MeshBasicMaterial({color:16777215*Math.random()});this.drawMode=THREE.TrianglesDrawMode;this.updateMorphTargets()};THREE.Mesh.prototype=Object.create(THREE.Object3D.prototype);THREE.Mesh.prototype.constructor=THREE.Mesh;THREE.Mesh.prototype.setDrawMode=function(a){this.drawMode=a};THREE.Mesh.prototype.updateMorphTargets=function(){if(void 0!==this.geometry.morphTargets&&0b.far?null:{distance:c,point:s.clone(),object:a}}function c(c,d,e,f,l,p,n,s){g.fromArray(f,3*p);h.fromArray(f,3*n);k.fromArray(f,3*s);if(c=b(c,d,e,g,h,k,t))l&&(m.fromArray(l,2*p),q.fromArray(l,2*n),u.fromArray(l,2*s),c.uv=a(t,g,h,k,m,q,u)),c.face=new THREE.Face3(p,n,s,THREE.Triangle.normal(g,h,k)),c.faceIndex=p;return c}var d=new THREE.Matrix4,e=new THREE.Ray,f=new THREE.Sphere,g=new THREE.Vector3,h=new THREE.Vector3,k=new THREE.Vector3,l=new THREE.Vector3,p=new THREE.Vector3,n=new THREE.Vector3,m=new THREE.Vector2,q=new THREE.Vector2,u=new THREE.Vector2,v=new THREE.Vector3,t=new THREE.Vector3,s=new THREE.Vector3;return function(s,v){var x=this.geometry,D=this.material,z=this.matrixWorld;if(void 0!==D&&(null===x.boundingSphere&&x.computeBoundingSphere(),f.copy(x.boundingSphere),f.applyMatrix4(z),!1!==s.ray.intersectsSphere(f)&&(d.getInverse(z),e.copy(s.ray).applyMatrix4(d),null===x.boundingBox||!1!==e.intersectsBox(x.boundingBox)))){var y,B;if(x instanceof THREE.BufferGeometry){var G,F,D=x.index,z=x.attributes,x=z.position.array;void 0!==z.uv&&(y=z.uv.array);if(null!==D)for(var z=D.array,H=0,L=z.length;H=d[e].distance)d[e-1].object.visible=!1,d[e].object.visible=!0;else break;for(;ethis.scale.x*this.scale.y||c.push({distance:Math.sqrt(d),point:this.position,face:null,object:this})}}();THREE.Sprite.prototype.clone=function(){return new this.constructor(this.material).copy(this)};THREE.Particle=THREE.Sprite;THREE.LensFlare=function(a,b,c,d,e){THREE.Object3D.call(this);this.lensFlares=[];this.positionScreen=new THREE.Vector3;this.customUpdateCallback=void 0;void 0!==a&&this.add(a,b,c,d,e)};THREE.LensFlare.prototype=Object.create(THREE.Object3D.prototype);THREE.LensFlare.prototype.constructor=THREE.LensFlare;THREE.LensFlare.prototype.add=function(a,b,c,d,e,f){void 0===b&&(b=-1);void 0===c&&(c=0);void 0===f&&(f=1);void 0===e&&(e=new THREE.Color(16777215));void 0===d&&(d=THREE.NormalBlending);c=Math.min(c,Math.max(0,c));this.lensFlares.push({texture:a,size:b,distance:c,x:0,y:0,z:0,scale:1,rotation:0,opacity:f,color:e,blending:d})};THREE.LensFlare.prototype.updateLensFlares=function(){var a,b=this.lensFlares.length,c,d=2*-this.positionScreen.x,e=2*-this.positionScreen.y;for(a=0;a= 365 * 24 * 3600) { + result += (t / (365 * 24 * 3600) | 0) + ":"; + t %= 365 * 24 * 3600; + if (t < 24 * 3600) { + result += "0:"; + } + } + if (t >= 24 * 3600) { + result += (t / (24 * 3600) | 0) + ":"; + } + t %= 24 * 3600; + return result + this.hourMinSec(t) + " MET"; + }, -THREE.ShaderChunk.alphamap_pars_fragment="#ifdef USE_ALPHAMAP\n uniform sampler2D alphaMap;\n#endif\n";THREE.ShaderChunk.alphatest_fragment="#ifdef ALPHATEST\n if ( diffuseColor.a < ALPHATEST ) discard;\n#endif\n";THREE.ShaderChunk.aomap_fragment="#ifdef USE_AOMAP\n float ambientOcclusion = ( texture2D( aoMap, vUv2 ).r - 1.0 ) * aoMapIntensity + 1.0;\n reflectedLight.indirectDiffuse *= ambientOcclusion;\n #if defined( USE_ENVMAP ) && defined( STANDARD )\n float dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n reflectedLight.indirectSpecular *= computeSpecularOcclusion( dotNV, ambientOcclusion, material.specularRoughness );\n #endif\n#endif\n";THREE.ShaderChunk.aomap_pars_fragment="#ifdef USE_AOMAP\n uniform sampler2D aoMap;\n uniform float aoMapIntensity;\n#endif";THREE.ShaderChunk.begin_vertex="\nvec3 transformed = vec3( position );\n";THREE.ShaderChunk.beginnormal_vertex="\nvec3 objectNormal = vec3( normal );\n";THREE.ShaderChunk.bsdfs="bool testLightInRange( const in float lightDistance, const in float cutoffDistance ) {\n return any( bvec2( cutoffDistance == 0.0, lightDistance < cutoffDistance ) );\n}\nfloat punctualLightIntensityToIrradianceFactor( const in float lightDistance, const in float cutoffDistance, const in float decayExponent ) {\n if( decayExponent > 0.0 ) {\n#if defined ( PHYSICALLY_CORRECT_LIGHTS )\n float distanceFalloff = 1.0 / max( pow( lightDistance, decayExponent ), 0.01 );\n float maxDistanceCutoffFactor = pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) );\n return distanceFalloff * maxDistanceCutoffFactor;\n#else\n return pow( saturate( -lightDistance / cutoffDistance + 1.0 ), decayExponent );\n#endif\n }\n return 1.0;\n}\nvec3 BRDF_Diffuse_Lambert( const in vec3 diffuseColor ) {\n return RECIPROCAL_PI * diffuseColor;\n}\nvec3 F_Schlick( const in vec3 specularColor, const in float dotLH ) {\n float fresnel = exp2( ( -5.55473 * dotLH - 6.98316 ) * dotLH );\n return ( 1.0 - specularColor ) * fresnel + specularColor;\n}\nfloat G_GGX_Smith( const in float alpha, const in float dotNL, const in float dotNV ) {\n float a2 = pow2( alpha );\n float gl = dotNL + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\n float gv = dotNV + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\n return 1.0 / ( gl * gv );\n}\nfloat D_GGX( const in float alpha, const in float dotNH ) {\n float a2 = pow2( alpha );\n float denom = pow2( dotNH ) * ( a2 - 1.0 ) + 1.0;\n return RECIPROCAL_PI * a2 / pow2( denom );\n}\nvec3 BRDF_Specular_GGX( const in IncidentLight incidentLight, const in GeometricContext geometry, const in vec3 specularColor, const in float roughness ) {\n float alpha = pow2( roughness );\n vec3 halfDir = normalize( incidentLight.direction + geometry.viewDir );\n float dotNL = saturate( dot( geometry.normal, incidentLight.direction ) );\n float dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n float dotNH = saturate( dot( geometry.normal, halfDir ) );\n float dotLH = saturate( dot( incidentLight.direction, halfDir ) );\n vec3 F = F_Schlick( specularColor, dotLH );\n float G = G_GGX_Smith( alpha, dotNL, dotNV );\n float D = D_GGX( alpha, dotNH );\n return F * ( G * D );\n}\nvec3 BRDF_Specular_GGX_Environment( const in GeometricContext geometry, const in vec3 specularColor, const in float roughness ) {\n float dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n const vec4 c0 = vec4( - 1, - 0.0275, - 0.572, 0.022 );\n const vec4 c1 = vec4( 1, 0.0425, 1.04, - 0.04 );\n vec4 r = roughness * c0 + c1;\n float a004 = min( r.x * r.x, exp2( - 9.28 * dotNV ) ) * r.x + r.y;\n vec2 AB = vec2( -1.04, 1.04 ) * a004 + r.zw;\n return specularColor * AB.x + AB.y;\n}\nfloat G_BlinnPhong_Implicit( ) {\n return 0.25;\n}\nfloat D_BlinnPhong( const in float shininess, const in float dotNH ) {\n return RECIPROCAL_PI * ( shininess * 0.5 + 1.0 ) * pow( dotNH, shininess );\n}\nvec3 BRDF_Specular_BlinnPhong( const in IncidentLight incidentLight, const in GeometricContext geometry, const in vec3 specularColor, const in float shininess ) {\n vec3 halfDir = normalize( incidentLight.direction + geometry.viewDir );\n float dotNH = saturate( dot( geometry.normal, halfDir ) );\n float dotLH = saturate( dot( incidentLight.direction, halfDir ) );\n vec3 F = F_Schlick( specularColor, dotLH );\n float G = G_BlinnPhong_Implicit( );\n float D = D_BlinnPhong( shininess, dotNH );\n return F * ( G * D );\n}\nfloat GGXRoughnessToBlinnExponent( const in float ggxRoughness ) {\n return ( 2.0 / pow2( ggxRoughness + 0.0001 ) - 2.0 );\n}\nfloat BlinnExponentToGGXRoughness( const in float blinnExponent ) {\n return sqrt( 2.0 / ( blinnExponent + 2.0 ) );\n}\n";THREE.ShaderChunk.bumpmap_pars_fragment="#ifdef USE_BUMPMAP\n uniform sampler2D bumpMap;\n uniform float bumpScale;\n vec2 dHdxy_fwd() {\n vec2 dSTdx = dFdx( vUv );\n vec2 dSTdy = dFdy( vUv );\n float Hll = bumpScale * texture2D( bumpMap, vUv ).x;\n float dBx = bumpScale * texture2D( bumpMap, vUv + dSTdx ).x - Hll;\n float dBy = bumpScale * texture2D( bumpMap, vUv + dSTdy ).x - Hll;\n return vec2( dBx, dBy );\n }\n vec3 perturbNormalArb( vec3 surf_pos, vec3 surf_norm, vec2 dHdxy ) {\n vec3 vSigmaX = dFdx( surf_pos );\n vec3 vSigmaY = dFdy( surf_pos );\n vec3 vN = surf_norm;\n vec3 R1 = cross( vSigmaY, vN );\n vec3 R2 = cross( vN, vSigmaX );\n float fDet = dot( vSigmaX, R1 );\n vec3 vGrad = sign( fDet ) * ( dHdxy.x * R1 + dHdxy.y * R2 );\n return normalize( abs( fDet ) * surf_norm - vGrad );\n }\n#endif\n";THREE.ShaderChunk.color_fragment="#ifdef USE_COLOR\n diffuseColor.rgb *= vColor;\n#endif";THREE.ShaderChunk.color_pars_fragment="#ifdef USE_COLOR\n varying vec3 vColor;\n#endif\n";THREE.ShaderChunk.color_pars_vertex="#ifdef USE_COLOR\n varying vec3 vColor;\n#endif";THREE.ShaderChunk.color_vertex="#ifdef USE_COLOR\n vColor.xyz = color.xyz;\n#endif";THREE.ShaderChunk.common="#define PI 3.14159\n#define PI2 6.28318\n#define RECIPROCAL_PI 0.31830988618\n#define RECIPROCAL_PI2 0.15915494\n#define LOG2 1.442695\n#define EPSILON 1e-6\n#define saturate(a) clamp( a, 0.0, 1.0 )\n#define whiteCompliment(a) ( 1.0 - saturate( a ) )\nfloat pow2( const in float x ) { return x*x; }\nfloat pow3( const in float x ) { return x*x*x; }\nfloat pow4( const in float x ) { float x2 = x*x; return x2*x2; }\nfloat average( const in vec3 color ) { return dot( color, vec3( 0.3333 ) ); }\nstruct IncidentLight {\n vec3 color;\n vec3 direction;\n bool visible;\n};\nstruct ReflectedLight {\n vec3 directDiffuse;\n vec3 directSpecular;\n vec3 indirectDiffuse;\n vec3 indirectSpecular;\n};\nstruct GeometricContext {\n vec3 position;\n vec3 normal;\n vec3 viewDir;\n};\nvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n return normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n}\nvec3 inverseTransformDirection( in vec3 dir, in mat4 matrix ) {\n return normalize( ( vec4( dir, 0.0 ) * matrix ).xyz );\n}\nvec3 projectOnPlane(in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\n float distance = dot( planeNormal, point - pointOnPlane );\n return - distance * planeNormal + point;\n}\nfloat sideOfPlane( in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\n return sign( dot( point - pointOnPlane, planeNormal ) );\n}\nvec3 linePlaneIntersect( in vec3 pointOnLine, in vec3 lineDirection, in vec3 pointOnPlane, in vec3 planeNormal ) {\n return lineDirection * ( dot( planeNormal, pointOnPlane - pointOnLine ) / dot( planeNormal, lineDirection ) ) + pointOnLine;\n}\n";THREE.ShaderChunk.cube_uv_reflection_fragment="#ifdef ENVMAP_TYPE_CUBE_UV\nconst float cubeUV_textureSize = 1024.0;\nint getFaceFromDirection(vec3 direction) {\n vec3 absDirection = abs(direction);\n int face = -1;\n if( absDirection.x > absDirection.z ) {\n if(absDirection.x > absDirection.y )\n face = direction.x > 0.0 ? 0 : 3;\n else\n face = direction.y > 0.0 ? 1 : 4;\n }\n else {\n if(absDirection.z > absDirection.y )\n face = direction.z > 0.0 ? 2 : 5;\n else\n face = direction.y > 0.0 ? 1 : 4;\n }\n return face;\n}\nconst float cubeUV_maxLods1 = log2(cubeUV_textureSize*0.25) - 1.0;\nconst float cubeUV_rangeClamp = exp2((6.0 - 1.0) * 2.0);\nvec2 MipLevelInfo( vec3 vec, float roughnessLevel, float roughness ) {\n float scale = exp2(cubeUV_maxLods1 - roughnessLevel);\n float dxRoughness = dFdx(roughness);\n float dyRoughness = dFdy(roughness);\n vec3 dx = dFdx( vec * scale * dxRoughness );\n vec3 dy = dFdy( vec * scale * dyRoughness );\n float d = max( dot( dx, dx ), dot( dy, dy ) );\n d = clamp(d, 1.0, cubeUV_rangeClamp);\n float mipLevel = 0.5 * log2(d);\n return vec2(floor(mipLevel), fract(mipLevel));\n}\nconst float cubeUV_maxLods2 = log2(cubeUV_textureSize*0.25) - 2.0;\nconst float cubeUV_rcpTextureSize = 1.0 / cubeUV_textureSize;\nvec2 getCubeUV(vec3 direction, float roughnessLevel, float mipLevel) {\n mipLevel = roughnessLevel > cubeUV_maxLods2 - 3.0 ? 0.0 : mipLevel;\n float a = 16.0 * cubeUV_rcpTextureSize;\n vec2 exp2_packed = exp2( vec2( roughnessLevel, mipLevel ) );\n vec2 rcp_exp2_packed = vec2( 1.0 ) / exp2_packed;\n float powScale = exp2_packed.x * exp2_packed.y;\n float scale = rcp_exp2_packed.x * rcp_exp2_packed.y * 0.25;\n float mipOffset = 0.75*(1.0 - rcp_exp2_packed.y) * rcp_exp2_packed.x;\n bool bRes = mipLevel == 0.0;\n scale = bRes && (scale < a) ? a : scale;\n vec3 r;\n vec2 offset;\n int face = getFaceFromDirection(direction);\n float rcpPowScale = 1.0 / powScale;\n if( face == 0) {\n r = vec3(direction.x, -direction.z, direction.y);\n offset = vec2(0.0+mipOffset,0.75 * rcpPowScale);\n offset.y = bRes && (offset.y < 2.0*a) ? a : offset.y;\n }\n else if( face == 1) {\n r = vec3(direction.y, direction.x, direction.z);\n offset = vec2(scale+mipOffset, 0.75 * rcpPowScale);\n offset.y = bRes && (offset.y < 2.0*a) ? a : offset.y;\n }\n else if( face == 2) {\n r = vec3(direction.z, direction.x, direction.y);\n offset = vec2(2.0*scale+mipOffset, 0.75 * rcpPowScale);\n offset.y = bRes && (offset.y < 2.0*a) ? a : offset.y;\n }\n else if( face == 3) {\n r = vec3(direction.x, direction.z, direction.y);\n offset = vec2(0.0+mipOffset,0.5 * rcpPowScale);\n offset.y = bRes && (offset.y < 2.0*a) ? 0.0 : offset.y;\n }\n else if( face == 4) {\n r = vec3(direction.y, direction.x, -direction.z);\n offset = vec2(scale+mipOffset, 0.5 * rcpPowScale);\n offset.y = bRes && (offset.y < 2.0*a) ? 0.0 : offset.y;\n }\n else {\n r = vec3(direction.z, -direction.x, direction.y);\n offset = vec2(2.0*scale+mipOffset, 0.5 * rcpPowScale);\n offset.y = bRes && (offset.y < 2.0*a) ? 0.0 : offset.y;\n }\n r = normalize(r);\n float texelOffset = 0.5 * cubeUV_rcpTextureSize;\n vec2 s = ( r.yz / abs( r.x ) + vec2( 1.0 ) ) * 0.5;\n vec2 base = offset + vec2( texelOffset );\n return base + s * ( scale - 2.0 * texelOffset );\n}\nconst float cubeUV_maxLods3 = log2(cubeUV_textureSize*0.25) - 3.0;\nvec4 textureCubeUV(vec3 reflectedDirection, float roughness ) {\n float roughnessVal = roughness* cubeUV_maxLods3;\n float r1 = floor(roughnessVal);\n float r2 = r1 + 1.0;\n float t = fract(roughnessVal);\n vec2 mipInfo = MipLevelInfo(reflectedDirection, r1, roughness);\n float s = mipInfo.y;\n float level0 = mipInfo.x;\n float level1 = level0 + 1.0;\n level1 = level1 > 5.0 ? 5.0 : level1;\n level0 += min( floor( s + 0.5 ), 5.0 );\n vec2 uv_10 = getCubeUV(reflectedDirection, r1, level0);\n vec4 color10 = envMapTexelToLinear(texture2D(envMap, uv_10));\n vec2 uv_20 = getCubeUV(reflectedDirection, r2, level0);\n vec4 color20 = envMapTexelToLinear(texture2D(envMap, uv_20));\n vec4 result = mix(color10, color20, t);\n return vec4(result.rgb, 1.0);\n}\n#endif\n";THREE.ShaderChunk.defaultnormal_vertex="#ifdef FLIP_SIDED\n objectNormal = -objectNormal;\n#endif\nvec3 transformedNormal = normalMatrix * objectNormal;\n";THREE.ShaderChunk.displacementmap_vertex="#ifdef USE_DISPLACEMENTMAP\n transformed += normal * ( texture2D( displacementMap, uv ).x * displacementScale + displacementBias );\n#endif\n";THREE.ShaderChunk.displacementmap_pars_vertex="#ifdef USE_DISPLACEMENTMAP\n uniform sampler2D displacementMap;\n uniform float displacementScale;\n uniform float displacementBias;\n#endif\n";THREE.ShaderChunk.emissivemap_fragment="#ifdef USE_EMISSIVEMAP\n vec4 emissiveColor = texture2D( emissiveMap, vUv );\n emissiveColor.rgb = emissiveMapTexelToLinear( emissiveColor ).rgb;\n totalEmissiveRadiance *= emissiveColor.rgb;\n#endif\n";THREE.ShaderChunk.emissivemap_pars_fragment="#ifdef USE_EMISSIVEMAP\n uniform sampler2D emissiveMap;\n#endif\n";THREE.ShaderChunk.encodings_pars_fragment="\nvec4 LinearToLinear( in vec4 value ) {\n return value;\n}\nvec4 GammaToLinear( in vec4 value, in float gammaFactor ) {\n return vec4( pow( value.xyz, vec3( gammaFactor ) ), value.w );\n}\nvec4 LinearToGamma( in vec4 value, in float gammaFactor ) {\n return vec4( pow( value.xyz, vec3( 1.0 / gammaFactor ) ), value.w );\n}\nvec4 sRGBToLinear( in vec4 value ) {\n return vec4( mix( pow( value.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), value.rgb * 0.0773993808, vec3( lessThanEqual( value.rgb, vec3( 0.04045 ) ) ) ), value.w );\n}\nvec4 LinearTosRGB( in vec4 value ) {\n return vec4( mix( pow( value.rgb, vec3( 0.41666 ) ) * 1.055 - vec3( 0.055 ), value.rgb * 12.92, vec3( lessThanEqual( value.rgb, vec3( 0.0031308 ) ) ) ), value.w );\n}\nvec4 RGBEToLinear( in vec4 value ) {\n return vec4( value.rgb * exp2( value.a * 255.0 - 128.0 ), 1.0 );\n}\nvec4 LinearToRGBE( in vec4 value ) {\n float maxComponent = max( max( value.r, value.g ), value.b );\n float fExp = clamp( ceil( log2( maxComponent ) ), -128.0, 127.0 );\n return vec4( value.rgb / exp2( fExp ), ( fExp + 128.0 ) / 255.0 );\n}\nvec4 RGBMToLinear( in vec4 value, in float maxRange ) {\n return vec4( value.xyz * value.w * maxRange, 1.0 );\n}\nvec4 LinearToRGBM( in vec4 value, in float maxRange ) {\n float maxRGB = max( value.x, max( value.g, value.b ) );\n float M = clamp( maxRGB / maxRange, 0.0, 1.0 );\n M = ceil( M * 255.0 ) / 255.0;\n return vec4( value.rgb / ( M * maxRange ), M );\n}\nvec4 RGBDToLinear( in vec4 value, in float maxRange ) {\n return vec4( value.rgb * ( ( maxRange / 255.0 ) / value.a ), 1.0 );\n}\nvec4 LinearToRGBD( in vec4 value, in float maxRange ) {\n float maxRGB = max( value.x, max( value.g, value.b ) );\n float D = max( maxRange / maxRGB, 1.0 );\n D = min( floor( D ) / 255.0, 1.0 );\n return vec4( value.rgb * ( D * ( 255.0 / maxRange ) ), D );\n}\nconst mat3 cLogLuvM = mat3( 0.2209, 0.3390, 0.4184, 0.1138, 0.6780, 0.7319, 0.0102, 0.1130, 0.2969 );\nvec4 LinearToLogLuv( in vec4 value ) {\n vec3 Xp_Y_XYZp = value.rgb * cLogLuvM;\n Xp_Y_XYZp = max(Xp_Y_XYZp, vec3(1e-6, 1e-6, 1e-6));\n vec4 vResult;\n vResult.xy = Xp_Y_XYZp.xy / Xp_Y_XYZp.z;\n float Le = 2.0 * log2(Xp_Y_XYZp.y) + 127.0;\n vResult.w = fract(Le);\n vResult.z = (Le - (floor(vResult.w*255.0))/255.0)/255.0;\n return vResult;\n}\nconst mat3 cLogLuvInverseM = mat3( 6.0014, -2.7008, -1.7996, -1.3320, 3.1029, -5.7721, 0.3008, -1.0882, 5.6268 );\nvec4 LogLuvToLinear( in vec4 value ) {\n float Le = value.z * 255.0 + value.w;\n vec3 Xp_Y_XYZp;\n Xp_Y_XYZp.y = exp2((Le - 127.0) / 2.0);\n Xp_Y_XYZp.z = Xp_Y_XYZp.y / value.y;\n Xp_Y_XYZp.x = value.x * Xp_Y_XYZp.z;\n vec3 vRGB = Xp_Y_XYZp.rgb * cLogLuvInverseM;\n return vec4( max(vRGB, 0.0), 1.0 );\n}\n";THREE.ShaderChunk.encodings_fragment=" gl_FragColor = linearToOutputTexel( gl_FragColor );\n";THREE.ShaderChunk.envmap_fragment="#ifdef USE_ENVMAP\n #if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\n vec3 cameraToVertex = normalize( vWorldPosition - cameraPosition );\n vec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n #ifdef ENVMAP_MODE_REFLECTION\n vec3 reflectVec = reflect( cameraToVertex, worldNormal );\n #else\n vec3 reflectVec = refract( cameraToVertex, worldNormal, refractionRatio );\n #endif\n #else\n vec3 reflectVec = vReflect;\n #endif\n #ifdef DOUBLE_SIDED\n float flipNormal = ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n #else\n float flipNormal = 1.0;\n #endif\n #ifdef ENVMAP_TYPE_CUBE\n vec4 envColor = textureCube( envMap, flipNormal * vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\n #elif defined( ENVMAP_TYPE_EQUIREC )\n vec2 sampleUV;\n sampleUV.y = saturate( flipNormal * reflectVec.y * 0.5 + 0.5 );\n sampleUV.x = atan( flipNormal * reflectVec.z, flipNormal * reflectVec.x ) * RECIPROCAL_PI2 + 0.5;\n vec4 envColor = texture2D( envMap, sampleUV );\n #elif defined( ENVMAP_TYPE_SPHERE )\n vec3 reflectView = flipNormal * normalize((viewMatrix * vec4( reflectVec, 0.0 )).xyz + vec3(0.0,0.0,1.0));\n vec4 envColor = texture2D( envMap, reflectView.xy * 0.5 + 0.5 );\n #endif\n envColor = envMapTexelToLinear( envColor );\n #ifdef ENVMAP_BLENDING_MULTIPLY\n outgoingLight = mix( outgoingLight, outgoingLight * envColor.xyz, specularStrength * reflectivity );\n #elif defined( ENVMAP_BLENDING_MIX )\n outgoingLight = mix( outgoingLight, envColor.xyz, specularStrength * reflectivity );\n #elif defined( ENVMAP_BLENDING_ADD )\n outgoingLight += envColor.xyz * specularStrength * reflectivity;\n #endif\n#endif\n";THREE.ShaderChunk.envmap_pars_fragment="#if defined( USE_ENVMAP ) || defined( STANDARD )\n uniform float reflectivity;\n uniform float envMapIntenstiy;\n#endif\n#ifdef USE_ENVMAP\n #ifdef ENVMAP_TYPE_CUBE\n uniform samplerCube envMap;\n #else\n uniform sampler2D envMap;\n #endif\n uniform float flipEnvMap;\n #if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) || defined( STANDARD )\n uniform float refractionRatio;\n #else\n varying vec3 vReflect;\n #endif\n#endif\n";THREE.ShaderChunk.envmap_pars_vertex="#if defined( USE_ENVMAP ) && ! defined( USE_BUMPMAP ) && ! defined( USE_NORMALMAP ) && ! defined( PHONG ) && ! defined( STANDARD )\n varying vec3 vReflect;\n uniform float refractionRatio;\n#endif\n";THREE.ShaderChunk.envmap_vertex="#if defined( USE_ENVMAP ) && ! defined( USE_BUMPMAP ) && ! defined( USE_NORMALMAP ) && ! defined( PHONG ) && ! defined( STANDARD )\n vec3 cameraToVertex = normalize( worldPosition.xyz - cameraPosition );\n vec3 worldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n #ifdef ENVMAP_MODE_REFLECTION\n vReflect = reflect( cameraToVertex, worldNormal );\n #else\n vReflect = refract( cameraToVertex, worldNormal, refractionRatio );\n #endif\n#endif\n";THREE.ShaderChunk.fog_fragment="#ifdef USE_FOG\n #ifdef USE_LOGDEPTHBUF_EXT\n float depth = gl_FragDepthEXT / gl_FragCoord.w;\n #else\n float depth = gl_FragCoord.z / gl_FragCoord.w;\n #endif\n #ifdef FOG_EXP2\n float fogFactor = whiteCompliment( exp2( - fogDensity * fogDensity * depth * depth * LOG2 ) );\n #else\n float fogFactor = smoothstep( fogNear, fogFar, depth );\n #endif\n gl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );\n#endif\n";THREE.ShaderChunk.fog_pars_fragment="#ifdef USE_FOG\n uniform vec3 fogColor;\n #ifdef FOG_EXP2\n uniform float fogDensity;\n #else\n uniform float fogNear;\n uniform float fogFar;\n #endif\n#endif";THREE.ShaderChunk.lightmap_fragment="#ifdef USE_LIGHTMAP\n reflectedLight.indirectDiffuse += PI * texture2D( lightMap, vUv2 ).xyz * lightMapIntensity;\n#endif\n";THREE.ShaderChunk.lightmap_pars_fragment="#ifdef USE_LIGHTMAP\n uniform sampler2D lightMap;\n uniform float lightMapIntensity;\n#endif";THREE.ShaderChunk.lights_lambert_vertex="vec3 diffuse = vec3( 1.0 );\nGeometricContext geometry;\ngeometry.position = mvPosition.xyz;\ngeometry.normal = normalize( transformedNormal );\ngeometry.viewDir = normalize( -mvPosition.xyz );\nGeometricContext backGeometry;\nbackGeometry.position = geometry.position;\nbackGeometry.normal = -geometry.normal;\nbackGeometry.viewDir = geometry.viewDir;\nvLightFront = vec3( 0.0 );\n#ifdef DOUBLE_SIDED\n vLightBack = vec3( 0.0 );\n#endif\nIncidentLight directLight;\nfloat dotNL;\nvec3 directLightColor_Diffuse;\n#if NUM_POINT_LIGHTS > 0\n for ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n directLight = getPointDirectLightIrradiance( pointLights[ i ], geometry );\n dotNL = dot( geometry.normal, directLight.direction );\n directLightColor_Diffuse = PI * directLight.color;\n vLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n #ifdef DOUBLE_SIDED\n vLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n #endif\n }\n#endif\n#if NUM_SPOT_LIGHTS > 0\n for ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n directLight = getSpotDirectLightIrradiance( spotLights[ i ], geometry );\n dotNL = dot( geometry.normal, directLight.direction );\n directLightColor_Diffuse = PI * directLight.color;\n vLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n #ifdef DOUBLE_SIDED\n vLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n #endif\n }\n#endif\n#if NUM_DIR_LIGHTS > 0\n for ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n directLight = getDirectionalDirectLightIrradiance( directionalLights[ i ], geometry );\n dotNL = dot( geometry.normal, directLight.direction );\n directLightColor_Diffuse = PI * directLight.color;\n vLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n #ifdef DOUBLE_SIDED\n vLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n #endif\n }\n#endif\n#if NUM_HEMI_LIGHTS > 0\n for ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n vLightFront += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\n #ifdef DOUBLE_SIDED\n vLightBack += getHemisphereLightIrradiance( hemisphereLights[ i ], backGeometry );\n #endif\n }\n#endif\n";THREE.ShaderChunk.lights_pars="uniform vec3 ambientLightColor;\nvec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) {\n vec3 irradiance = ambientLightColor;\n #ifndef PHYSICALLY_CORRECT_LIGHTS\n irradiance *= PI;\n #endif\n return irradiance;\n}\n#if NUM_DIR_LIGHTS > 0\n struct DirectionalLight {\n vec3 direction;\n vec3 color;\n int shadow;\n float shadowBias;\n float shadowRadius;\n vec2 shadowMapSize;\n };\n uniform DirectionalLight directionalLights[ NUM_DIR_LIGHTS ];\n IncidentLight getDirectionalDirectLightIrradiance( const in DirectionalLight directionalLight, const in GeometricContext geometry ) {\n IncidentLight directLight;\n directLight.color = directionalLight.color;\n directLight.direction = directionalLight.direction;\n directLight.visible = true;\n return directLight;\n }\n#endif\n#if NUM_POINT_LIGHTS > 0\n struct PointLight {\n vec3 position;\n vec3 color;\n float distance;\n float decay;\n int shadow;\n float shadowBias;\n float shadowRadius;\n vec2 shadowMapSize;\n };\n uniform PointLight pointLights[ NUM_POINT_LIGHTS ];\n IncidentLight getPointDirectLightIrradiance( const in PointLight pointLight, const in GeometricContext geometry ) {\n IncidentLight directLight;\n vec3 lVector = pointLight.position - geometry.position;\n directLight.direction = normalize( lVector );\n float lightDistance = length( lVector );\n if ( testLightInRange( lightDistance, pointLight.distance ) ) {\n directLight.color = pointLight.color;\n directLight.color *= punctualLightIntensityToIrradianceFactor( lightDistance, pointLight.distance, pointLight.decay );\n directLight.visible = true;\n } else {\n directLight.color = vec3( 0.0 );\n directLight.visible = false;\n }\n return directLight;\n }\n#endif\n#if NUM_SPOT_LIGHTS > 0\n struct SpotLight {\n vec3 position;\n vec3 direction;\n vec3 color;\n float distance;\n float decay;\n float coneCos;\n float penumbraCos;\n int shadow;\n float shadowBias;\n float shadowRadius;\n vec2 shadowMapSize;\n };\n uniform SpotLight spotLights[ NUM_SPOT_LIGHTS ];\n IncidentLight getSpotDirectLightIrradiance( const in SpotLight spotLight, const in GeometricContext geometry ) {\n IncidentLight directLight;\n vec3 lVector = spotLight.position - geometry.position;\n directLight.direction = normalize( lVector );\n float lightDistance = length( lVector );\n float angleCos = dot( directLight.direction, spotLight.direction );\n if ( all( bvec2( angleCos > spotLight.coneCos, testLightInRange( lightDistance, spotLight.distance ) ) ) ) {\n float spotEffect = smoothstep( spotLight.coneCos, spotLight.penumbraCos, angleCos );\n directLight.color = spotLight.color;\n directLight.color *= spotEffect * punctualLightIntensityToIrradianceFactor( lightDistance, spotLight.distance, spotLight.decay );\n directLight.visible = true;\n } else {\n directLight.color = vec3( 0.0 );\n directLight.visible = false;\n }\n return directLight;\n }\n#endif\n#if NUM_HEMI_LIGHTS > 0\n struct HemisphereLight {\n vec3 direction;\n vec3 skyColor;\n vec3 groundColor;\n };\n uniform HemisphereLight hemisphereLights[ NUM_HEMI_LIGHTS ];\n vec3 getHemisphereLightIrradiance( const in HemisphereLight hemiLight, const in GeometricContext geometry ) {\n float dotNL = dot( geometry.normal, hemiLight.direction );\n float hemiDiffuseWeight = 0.5 * dotNL + 0.5;\n vec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight );\n #ifndef PHYSICALLY_CORRECT_LIGHTS\n irradiance *= PI;\n #endif\n return irradiance;\n }\n#endif\n#if defined( USE_ENVMAP ) && defined( STANDARD )\n vec3 getLightProbeIndirectIrradiance( const in GeometricContext geometry, const in int maxMIPLevel ) {\n #ifdef DOUBLE_SIDED\n float flipNormal = ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n #else\n float flipNormal = 1.0;\n #endif\n vec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );\n #ifdef ENVMAP_TYPE_CUBE\n vec3 queryVec = flipNormal * vec3( flipEnvMap * worldNormal.x, worldNormal.yz );\n #ifdef TEXTURE_LOD_EXT\n vec4 envMapColor = textureCubeLodEXT( envMap, queryVec, float( maxMIPLevel ) );\n #else\n vec4 envMapColor = textureCube( envMap, queryVec, float( maxMIPLevel ) );\n #endif\n #elif defined( ENVMAP_TYPE_CUBE_UV )\n vec3 queryVec = flipNormal * vec3( flipEnvMap * worldNormal.x, worldNormal.yz );\n vec4 envMapColor = textureCubeUV( queryVec, 1.0 );\n #else\n vec4 envMapColor = vec4( 0.0 );\n #endif\n envMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n return PI * envMapColor.rgb * envMapIntensity;\n }\n float getSpecularMIPLevel( const in float blinnShininessExponent, const in int maxMIPLevel ) {\n float maxMIPLevelScalar = float( maxMIPLevel );\n float desiredMIPLevel = maxMIPLevelScalar - 0.79248 - 0.5 * log2( pow2( blinnShininessExponent ) + 1.0 );\n return clamp( desiredMIPLevel, 0.0, maxMIPLevelScalar );\n }\n vec3 getLightProbeIndirectRadiance( const in GeometricContext geometry, const in float blinnShininessExponent, const in int maxMIPLevel ) {\n #ifdef ENVMAP_MODE_REFLECTION\n vec3 reflectVec = reflect( -geometry.viewDir, geometry.normal );\n #else\n vec3 reflectVec = refract( -geometry.viewDir, geometry.normal, refractionRatio );\n #endif\n #ifdef DOUBLE_SIDED\n float flipNormal = ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n #else\n float flipNormal = 1.0;\n #endif\n reflectVec = inverseTransformDirection( reflectVec, viewMatrix );\n float specularMIPLevel = getSpecularMIPLevel( blinnShininessExponent, maxMIPLevel );\n #ifdef ENVMAP_TYPE_CUBE\n vec3 queryReflectVec = flipNormal * vec3( flipEnvMap * reflectVec.x, reflectVec.yz );\n #ifdef TEXTURE_LOD_EXT\n vec4 envMapColor = textureCubeLodEXT( envMap, queryReflectVec, specularMIPLevel );\n #else\n vec4 envMapColor = textureCube( envMap, queryReflectVec, specularMIPLevel );\n #endif\n #elif defined( ENVMAP_TYPE_CUBE_UV )\n vec3 queryReflectVec = flipNormal * vec3( flipEnvMap * reflectVec.x, reflectVec.yz );\n vec4 envMapColor = textureCubeUV(queryReflectVec, BlinnExponentToGGXRoughness(blinnShininessExponent));\n #elif defined( ENVMAP_TYPE_EQUIREC )\n vec2 sampleUV;\n sampleUV.y = saturate( flipNormal * reflectVec.y * 0.5 + 0.5 );\n sampleUV.x = atan( flipNormal * reflectVec.z, flipNormal * reflectVec.x ) * RECIPROCAL_PI2 + 0.5;\n #ifdef TEXTURE_LOD_EXT\n vec4 envMapColor = texture2DLodEXT( envMap, sampleUV, specularMIPLevel );\n #else\n vec4 envMapColor = texture2D( envMap, sampleUV, specularMIPLevel );\n #endif\n #elif defined( ENVMAP_TYPE_SPHERE )\n vec3 reflectView = flipNormal * normalize((viewMatrix * vec4( reflectVec, 0.0 )).xyz + vec3(0.0,0.0,1.0));\n #ifdef TEXTURE_LOD_EXT\n vec4 envMapColor = texture2DLodEXT( envMap, reflectView.xy * 0.5 + 0.5, specularMIPLevel );\n #else\n vec4 envMapColor = texture2D( envMap, reflectView.xy * 0.5 + 0.5, specularMIPLevel );\n #endif\n #endif\n envMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n return envMapColor.rgb * envMapIntensity;\n }\n#endif\n";THREE.ShaderChunk.lights_phong_fragment="BlinnPhongMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;\nmaterial.specularColor = specular;\nmaterial.specularShininess = shininess;\nmaterial.specularStrength = specularStrength;\n";THREE.ShaderChunk.lights_phong_pars_fragment="#ifdef USE_ENVMAP\n varying vec3 vWorldPosition;\n#endif\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n varying vec3 vNormal;\n#endif\nstruct BlinnPhongMaterial {\n vec3 diffuseColor;\n vec3 specularColor;\n float specularShininess;\n float specularStrength;\n};\nvoid RE_Direct_BlinnPhong( const in IncidentLight directLight, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n float dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n vec3 irradiance = dotNL * directLight.color;\n #ifndef PHYSICALLY_CORRECT_LIGHTS\n irradiance *= PI;\n #endif\n reflectedLight.directDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n reflectedLight.directSpecular += irradiance * BRDF_Specular_BlinnPhong( directLight, geometry, material.specularColor, material.specularShininess ) * material.specularStrength;\n}\nvoid RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n reflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\n#define RE_Direct RE_Direct_BlinnPhong\n#define RE_IndirectDiffuse RE_IndirectDiffuse_BlinnPhong\n#define Material_LightProbeLOD( material ) (0)\n";THREE.ShaderChunk.lights_phong_pars_vertex="#ifdef USE_ENVMAP\n varying vec3 vWorldPosition;\n#endif\n";THREE.ShaderChunk.lights_phong_vertex="#ifdef USE_ENVMAP\n vWorldPosition = worldPosition.xyz;\n#endif\n";THREE.ShaderChunk.lights_standard_fragment="StandardMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor );\nmaterial.specularRoughness = clamp( roughnessFactor, 0.04, 1.0 );\nmaterial.specularColor = mix( vec3( 0.04 ), diffuseColor.rgb, metalnessFactor );\n";THREE.ShaderChunk.lights_standard_pars_fragment="struct StandardMaterial {\n vec3 diffuseColor;\n float specularRoughness;\n vec3 specularColor;\n};\nvoid RE_Direct_Standard( const in IncidentLight directLight, const in GeometricContext geometry, const in StandardMaterial material, inout ReflectedLight reflectedLight ) {\n float dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n vec3 irradiance = dotNL * directLight.color;\n #ifndef PHYSICALLY_CORRECT_LIGHTS\n irradiance *= PI;\n #endif\n reflectedLight.directDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n reflectedLight.directSpecular += irradiance * BRDF_Specular_GGX( directLight, geometry, material.specularColor, material.specularRoughness );\n}\nvoid RE_IndirectDiffuse_Standard( const in vec3 irradiance, const in GeometricContext geometry, const in StandardMaterial material, inout ReflectedLight reflectedLight ) {\n reflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectSpecular_Standard( const in vec3 radiance, const in GeometricContext geometry, const in StandardMaterial material, inout ReflectedLight reflectedLight ) {\n reflectedLight.indirectSpecular += radiance * BRDF_Specular_GGX_Environment( geometry, material.specularColor, material.specularRoughness );\n}\n#define RE_Direct RE_Direct_Standard\n#define RE_IndirectDiffuse RE_IndirectDiffuse_Standard\n#define RE_IndirectSpecular RE_IndirectSpecular_Standard\n#define Material_BlinnShininessExponent( material ) GGXRoughnessToBlinnExponent( material.specularRoughness )\nfloat computeSpecularOcclusion( const in float dotNV, const in float ambientOcclusion, const in float roughness ) {\n return saturate( pow( dotNV + ambientOcclusion, exp2( - 16.0 * roughness - 1.0 ) ) - 1.0 + ambientOcclusion );\n}\n"; + hourMinSec: function(t) { + var hour, min, sec; + if (t == null) { + t = 0; + } + hour = (t / 3600) | 0; + if (hour < 10) { + hour = "0" + hour; + } + t %= 3600; + min = (t / 60) | 0; + if (min < 10) { + min = "0" + min; + } + sec = (t % 60 | 0).toFixed(); + if (sec < 10) { + sec = "0" + sec; + } + return "" + hour + ":" + min + ":" + sec; + }, -THREE.ShaderChunk.lights_template="\nGeometricContext geometry;\ngeometry.position = - vViewPosition;\ngeometry.normal = normal;\ngeometry.viewDir = normalize( vViewPosition );\nIncidentLight directLight;\n#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct )\n PointLight pointLight;\n for ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n pointLight = pointLights[ i ];\n directLight = getPointDirectLightIrradiance( pointLight, geometry );\n #ifdef USE_SHADOWMAP\n directLight.color *= all( bvec2( pointLight.shadow, directLight.visible ) ) ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ] ) : 1.0;\n #endif\n RE_Direct( directLight, geometry, material, reflectedLight );\n }\n#endif\n#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct )\n SpotLight spotLight;\n for ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n spotLight = spotLights[ i ];\n directLight = getSpotDirectLightIrradiance( spotLight, geometry );\n #ifdef USE_SHADOWMAP\n directLight.color *= all( bvec2( spotLight.shadow, directLight.visible ) ) ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n #endif\n RE_Direct( directLight, geometry, material, reflectedLight );\n }\n#endif\n#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct )\n DirectionalLight directionalLight;\n for ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n directionalLight = directionalLights[ i ];\n directLight = getDirectionalDirectLightIrradiance( directionalLight, geometry );\n #ifdef USE_SHADOWMAP\n directLight.color *= all( bvec2( directionalLight.shadow, directLight.visible ) ) ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n #endif\n RE_Direct( directLight, geometry, material, reflectedLight );\n }\n#endif\n#if defined( RE_IndirectDiffuse )\n vec3 irradiance = getAmbientLightIrradiance( ambientLightColor );\n #ifdef USE_LIGHTMAP\n vec3 lightMapIrradiance = texture2D( lightMap, vUv2 ).xyz * lightMapIntensity;\n #ifndef PHYSICALLY_CORRECT_LIGHTS\n lightMapIrradiance *= PI;\n #endif\n irradiance += lightMapIrradiance;\n #endif\n #if ( NUM_HEMI_LIGHTS > 0 )\n for ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n irradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\n }\n #endif\n #if defined( USE_ENVMAP ) && defined( STANDARD ) && defined( ENVMAP_TYPE_CUBE_UV )\n irradiance += getLightProbeIndirectIrradiance( geometry, 8 );\n #endif\n RE_IndirectDiffuse( irradiance, geometry, material, reflectedLight );\n#endif\n#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )\n vec3 radiance = getLightProbeIndirectRadiance( geometry, Material_BlinnShininessExponent( material ), 8 );\n RE_IndirectSpecular( radiance, geometry, material, reflectedLight );\n#endif\n";THREE.ShaderChunk.logdepthbuf_fragment="#if defined(USE_LOGDEPTHBUF) && defined(USE_LOGDEPTHBUF_EXT)\n gl_FragDepthEXT = log2(vFragDepth) * logDepthBufFC * 0.5;\n#endif";THREE.ShaderChunk.logdepthbuf_pars_fragment="#ifdef USE_LOGDEPTHBUF\n uniform float logDepthBufFC;\n #ifdef USE_LOGDEPTHBUF_EXT\n varying float vFragDepth;\n #endif\n#endif\n";THREE.ShaderChunk.logdepthbuf_pars_vertex="#ifdef USE_LOGDEPTHBUF\n #ifdef USE_LOGDEPTHBUF_EXT\n varying float vFragDepth;\n #endif\n uniform float logDepthBufFC;\n#endif";THREE.ShaderChunk.logdepthbuf_vertex="#ifdef USE_LOGDEPTHBUF\n gl_Position.z = log2(max( EPSILON, gl_Position.w + 1.0 )) * logDepthBufFC;\n #ifdef USE_LOGDEPTHBUF_EXT\n vFragDepth = 1.0 + gl_Position.w;\n #else\n gl_Position.z = (gl_Position.z - 1.0) * gl_Position.w;\n #endif\n#endif\n";THREE.ShaderChunk.map_fragment="#ifdef USE_MAP\n vec4 texelColor = texture2D( map, vUv );\n texelColor = mapTexelToLinear( texelColor );\n diffuseColor *= texelColor;\n#endif\n";THREE.ShaderChunk.map_pars_fragment="#ifdef USE_MAP\n uniform sampler2D map;\n#endif\n";THREE.ShaderChunk.map_particle_fragment="#ifdef USE_MAP\n vec4 mapTexel = texture2D( map, vec2( gl_PointCoord.x, 1.0 - gl_PointCoord.y ) * offsetRepeat.zw + offsetRepeat.xy );\n diffuseColor *= mapTexelToLinear( mapTexel );\n#endif\n";THREE.ShaderChunk.map_particle_pars_fragment="#ifdef USE_MAP\n uniform vec4 offsetRepeat;\n uniform sampler2D map;\n#endif\n";THREE.ShaderChunk.metalnessmap_fragment="float metalnessFactor = metalness;\n#ifdef USE_METALNESSMAP\n vec4 texelMetalness = texture2D( metalnessMap, vUv );\n metalnessFactor *= texelMetalness.r;\n#endif\n";THREE.ShaderChunk.metalnessmap_pars_fragment="#ifdef USE_METALNESSMAP\n uniform sampler2D metalnessMap;\n#endif";THREE.ShaderChunk.morphnormal_vertex="#ifdef USE_MORPHNORMALS\n objectNormal += ( morphNormal0 - normal ) * morphTargetInfluences[ 0 ];\n objectNormal += ( morphNormal1 - normal ) * morphTargetInfluences[ 1 ];\n objectNormal += ( morphNormal2 - normal ) * morphTargetInfluences[ 2 ];\n objectNormal += ( morphNormal3 - normal ) * morphTargetInfluences[ 3 ];\n#endif\n";THREE.ShaderChunk.morphtarget_pars_vertex="#ifdef USE_MORPHTARGETS\n #ifndef USE_MORPHNORMALS\n uniform float morphTargetInfluences[ 8 ];\n #else\n uniform float morphTargetInfluences[ 4 ];\n #endif\n#endif";THREE.ShaderChunk.morphtarget_vertex="#ifdef USE_MORPHTARGETS\n transformed += ( morphTarget0 - position ) * morphTargetInfluences[ 0 ];\n transformed += ( morphTarget1 - position ) * morphTargetInfluences[ 1 ];\n transformed += ( morphTarget2 - position ) * morphTargetInfluences[ 2 ];\n transformed += ( morphTarget3 - position ) * morphTargetInfluences[ 3 ];\n #ifndef USE_MORPHNORMALS\n transformed += ( morphTarget4 - position ) * morphTargetInfluences[ 4 ];\n transformed += ( morphTarget5 - position ) * morphTargetInfluences[ 5 ];\n transformed += ( morphTarget6 - position ) * morphTargetInfluences[ 6 ];\n transformed += ( morphTarget7 - position ) * morphTargetInfluences[ 7 ];\n #endif\n#endif\n";THREE.ShaderChunk.normal_fragment="#ifdef FLAT_SHADED\n vec3 fdx = vec3( dFdx( vViewPosition.x ), dFdx( vViewPosition.y ), dFdx( vViewPosition.z ) );\n vec3 fdy = vec3( dFdy( vViewPosition.x ), dFdy( vViewPosition.y ), dFdy( vViewPosition.z ) );\n vec3 normal = normalize( cross( fdx, fdy ) );\n#else\n vec3 normal = normalize( vNormal );\n #ifdef DOUBLE_SIDED\n normal = normal * ( -1.0 + 2.0 * float( gl_FrontFacing ) );\n #endif\n#endif\n#ifdef USE_NORMALMAP\n normal = perturbNormal2Arb( -vViewPosition, normal );\n#elif defined( USE_BUMPMAP )\n normal = perturbNormalArb( -vViewPosition, normal, dHdxy_fwd() );\n#endif\n";THREE.ShaderChunk.normalmap_pars_fragment="#ifdef USE_NORMALMAP\n uniform sampler2D normalMap;\n uniform vec2 normalScale;\n vec3 perturbNormal2Arb( vec3 eye_pos, vec3 surf_norm ) {\n vec3 q0 = dFdx( eye_pos.xyz );\n vec3 q1 = dFdy( eye_pos.xyz );\n vec2 st0 = dFdx( vUv.st );\n vec2 st1 = dFdy( vUv.st );\n vec3 S = normalize( q0 * st1.t - q1 * st0.t );\n vec3 T = normalize( -q0 * st1.s + q1 * st0.s );\n vec3 N = normalize( surf_norm );\n vec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n mapN.xy = normalScale * mapN.xy;\n mat3 tsn = mat3( S, T, N );\n return normalize( tsn * mapN );\n }\n#endif\n";THREE.ShaderChunk.premultiplied_alpha_fragment="#ifdef PREMULTIPLIED_ALPHA\n gl_FragColor.rgb *= gl_FragColor.a;\n#endif\n";THREE.ShaderChunk.project_vertex="#ifdef USE_SKINNING\n vec4 mvPosition = modelViewMatrix * skinned;\n#else\n vec4 mvPosition = modelViewMatrix * vec4( transformed, 1.0 );\n#endif\ngl_Position = projectionMatrix * mvPosition;\n";THREE.ShaderChunk.roughnessmap_fragment="float roughnessFactor = roughness;\n#ifdef USE_ROUGHNESSMAP\n vec4 texelRoughness = texture2D( roughnessMap, vUv );\n roughnessFactor *= texelRoughness.r;\n#endif\n";THREE.ShaderChunk.roughnessmap_pars_fragment="#ifdef USE_ROUGHNESSMAP\n uniform sampler2D roughnessMap;\n#endif";THREE.ShaderChunk.shadowmap_pars_fragment="#ifdef USE_SHADOWMAP\n #if NUM_DIR_LIGHTS > 0\n uniform sampler2D directionalShadowMap[ NUM_DIR_LIGHTS ];\n varying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHTS ];\n #endif\n #if NUM_SPOT_LIGHTS > 0\n uniform sampler2D spotShadowMap[ NUM_SPOT_LIGHTS ];\n varying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHTS ];\n #endif\n #if NUM_POINT_LIGHTS > 0\n uniform sampler2D pointShadowMap[ NUM_POINT_LIGHTS ];\n varying vec4 vPointShadowCoord[ NUM_POINT_LIGHTS ];\n #endif\n float unpackDepth( const in vec4 rgba_depth ) {\n const vec4 bit_shift = vec4( 1.0 / ( 256.0 * 256.0 * 256.0 ), 1.0 / ( 256.0 * 256.0 ), 1.0 / 256.0, 1.0 );\n return dot( rgba_depth, bit_shift );\n }\n float texture2DCompare( sampler2D depths, vec2 uv, float compare ) {\n return step( compare, unpackDepth( texture2D( depths, uv ) ) );\n }\n float texture2DShadowLerp( sampler2D depths, vec2 size, vec2 uv, float compare ) {\n const vec2 offset = vec2( 0.0, 1.0 );\n vec2 texelSize = vec2( 1.0 ) / size;\n vec2 centroidUV = floor( uv * size + 0.5 ) / size;\n float lb = texture2DCompare( depths, centroidUV + texelSize * offset.xx, compare );\n float lt = texture2DCompare( depths, centroidUV + texelSize * offset.xy, compare );\n float rb = texture2DCompare( depths, centroidUV + texelSize * offset.yx, compare );\n float rt = texture2DCompare( depths, centroidUV + texelSize * offset.yy, compare );\n vec2 f = fract( uv * size + 0.5 );\n float a = mix( lb, lt, f.y );\n float b = mix( rb, rt, f.y );\n float c = mix( a, b, f.x );\n return c;\n }\n float getShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord ) {\n shadowCoord.xyz /= shadowCoord.w;\n shadowCoord.z += shadowBias;\n bvec4 inFrustumVec = bvec4 ( shadowCoord.x >= 0.0, shadowCoord.x <= 1.0, shadowCoord.y >= 0.0, shadowCoord.y <= 1.0 );\n bool inFrustum = all( inFrustumVec );\n bvec2 frustumTestVec = bvec2( inFrustum, shadowCoord.z <= 1.0 );\n bool frustumTest = all( frustumTestVec );\n if ( frustumTest ) {\n #if defined( SHADOWMAP_TYPE_PCF )\n vec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n float dx0 = - texelSize.x * shadowRadius;\n float dy0 = - texelSize.y * shadowRadius;\n float dx1 = + texelSize.x * shadowRadius;\n float dy1 = + texelSize.y * shadowRadius;\n return (\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\n ) * ( 1.0 / 9.0 );\n #elif defined( SHADOWMAP_TYPE_PCF_SOFT )\n vec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n float dx0 = - texelSize.x * shadowRadius;\n float dy0 = - texelSize.y * shadowRadius;\n float dx1 = + texelSize.x * shadowRadius;\n float dy1 = + texelSize.y * shadowRadius;\n return (\n texture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\n texture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\n texture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\n texture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\n texture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy, shadowCoord.z ) +\n texture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\n texture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\n texture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\n texture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\n ) * ( 1.0 / 9.0 );\n #else\n return texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z );\n #endif\n }\n return 1.0;\n }\n vec2 cubeToUV( vec3 v, float texelSizeY ) {\n vec3 absV = abs( v );\n float scaleToCube = 1.0 / max( absV.x, max( absV.y, absV.z ) );\n absV *= scaleToCube;\n v *= scaleToCube * ( 1.0 - 2.0 * texelSizeY );\n vec2 planar = v.xy;\n float almostATexel = 1.5 * texelSizeY;\n float almostOne = 1.0 - almostATexel;\n if ( absV.z >= almostOne ) {\n if ( v.z > 0.0 )\n planar.x = 4.0 - v.x;\n } else if ( absV.x >= almostOne ) {\n float signX = sign( v.x );\n planar.x = v.z * signX + 2.0 * signX;\n } else if ( absV.y >= almostOne ) {\n float signY = sign( v.y );\n planar.x = v.x + 2.0 * signY + 2.0;\n planar.y = v.z * signY - 2.0;\n }\n return vec2( 0.125, 0.25 ) * planar + vec2( 0.375, 0.75 );\n }\n float getPointShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord ) {\n vec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) );\n vec3 lightToPosition = shadowCoord.xyz;\n vec3 bd3D = normalize( lightToPosition );\n float dp = ( length( lightToPosition ) - shadowBias ) / 1000.0;\n #if defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_PCF_SOFT )\n vec2 offset = vec2( - 1, 1 ) * shadowRadius * texelSize.y;\n return (\n texture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyy, texelSize.y ), dp ) +\n texture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyy, texelSize.y ), dp ) +\n texture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyx, texelSize.y ), dp ) +\n texture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyx, texelSize.y ), dp ) +\n texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ) +\n texture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxy, texelSize.y ), dp ) +\n texture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxy, texelSize.y ), dp ) +\n texture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxx, texelSize.y ), dp ) +\n texture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxx, texelSize.y ), dp )\n ) * ( 1.0 / 9.0 );\n #else\n return texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp );\n #endif\n }\n#endif\n";THREE.ShaderChunk.shadowmap_pars_vertex="#ifdef USE_SHADOWMAP\n #if NUM_DIR_LIGHTS > 0\n uniform mat4 directionalShadowMatrix[ NUM_DIR_LIGHTS ];\n varying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHTS ];\n #endif\n #if NUM_SPOT_LIGHTS > 0\n uniform mat4 spotShadowMatrix[ NUM_SPOT_LIGHTS ];\n varying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHTS ];\n #endif\n #if NUM_POINT_LIGHTS > 0\n uniform mat4 pointShadowMatrix[ NUM_POINT_LIGHTS ];\n varying vec4 vPointShadowCoord[ NUM_POINT_LIGHTS ];\n #endif\n#endif\n";THREE.ShaderChunk.shadowmap_vertex="#ifdef USE_SHADOWMAP\n #if NUM_DIR_LIGHTS > 0\n for ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n vDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * worldPosition;\n }\n #endif\n #if NUM_SPOT_LIGHTS > 0\n for ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n vSpotShadowCoord[ i ] = spotShadowMatrix[ i ] * worldPosition;\n }\n #endif\n #if NUM_POINT_LIGHTS > 0\n for ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n vPointShadowCoord[ i ] = pointShadowMatrix[ i ] * worldPosition;\n }\n #endif\n#endif\n";THREE.ShaderChunk.shadowmask_pars_fragment="float getShadowMask() {\n float shadow = 1.0;\n #ifdef USE_SHADOWMAP\n #if NUM_DIR_LIGHTS > 0\n DirectionalLight directionalLight;\n for ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n directionalLight = directionalLights[ i ];\n shadow *= bool( directionalLight.shadow ) ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n }\n #endif\n #if NUM_SPOT_LIGHTS > 0\n SpotLight spotLight;\n for ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n spotLight = spotLights[ i ];\n shadow *= bool( spotLight.shadow ) ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n }\n #endif\n #if NUM_POINT_LIGHTS > 0\n PointLight pointLight;\n for ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n pointLight = pointLights[ i ];\n shadow *= bool( pointLight.shadow ) ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ] ) : 1.0;\n }\n #endif\n #endif\n return shadow;\n}\n";THREE.ShaderChunk.skinbase_vertex="#ifdef USE_SKINNING\n mat4 boneMatX = getBoneMatrix( skinIndex.x );\n mat4 boneMatY = getBoneMatrix( skinIndex.y );\n mat4 boneMatZ = getBoneMatrix( skinIndex.z );\n mat4 boneMatW = getBoneMatrix( skinIndex.w );\n#endif";THREE.ShaderChunk.skinning_pars_vertex="#ifdef USE_SKINNING\n uniform mat4 bindMatrix;\n uniform mat4 bindMatrixInverse;\n #ifdef BONE_TEXTURE\n uniform sampler2D boneTexture;\n uniform int boneTextureWidth;\n uniform int boneTextureHeight;\n mat4 getBoneMatrix( const in float i ) {\n float j = i * 4.0;\n float x = mod( j, float( boneTextureWidth ) );\n float y = floor( j / float( boneTextureWidth ) );\n float dx = 1.0 / float( boneTextureWidth );\n float dy = 1.0 / float( boneTextureHeight );\n y = dy * ( y + 0.5 );\n vec4 v1 = texture2D( boneTexture, vec2( dx * ( x + 0.5 ), y ) );\n vec4 v2 = texture2D( boneTexture, vec2( dx * ( x + 1.5 ), y ) );\n vec4 v3 = texture2D( boneTexture, vec2( dx * ( x + 2.5 ), y ) );\n vec4 v4 = texture2D( boneTexture, vec2( dx * ( x + 3.5 ), y ) );\n mat4 bone = mat4( v1, v2, v3, v4 );\n return bone;\n }\n #else\n uniform mat4 boneGlobalMatrices[ MAX_BONES ];\n mat4 getBoneMatrix( const in float i ) {\n mat4 bone = boneGlobalMatrices[ int(i) ];\n return bone;\n }\n #endif\n#endif\n";THREE.ShaderChunk.skinning_vertex="#ifdef USE_SKINNING\n vec4 skinVertex = bindMatrix * vec4( transformed, 1.0 );\n vec4 skinned = vec4( 0.0 );\n skinned += boneMatX * skinVertex * skinWeight.x;\n skinned += boneMatY * skinVertex * skinWeight.y;\n skinned += boneMatZ * skinVertex * skinWeight.z;\n skinned += boneMatW * skinVertex * skinWeight.w;\n skinned = bindMatrixInverse * skinned;\n#endif\n";THREE.ShaderChunk.skinnormal_vertex="#ifdef USE_SKINNING\n mat4 skinMatrix = mat4( 0.0 );\n skinMatrix += skinWeight.x * boneMatX;\n skinMatrix += skinWeight.y * boneMatY;\n skinMatrix += skinWeight.z * boneMatZ;\n skinMatrix += skinWeight.w * boneMatW;\n skinMatrix = bindMatrixInverse * skinMatrix * bindMatrix;\n objectNormal = vec4( skinMatrix * vec4( objectNormal, 0.0 ) ).xyz;\n#endif\n";THREE.ShaderChunk.specularmap_fragment="float specularStrength;\n#ifdef USE_SPECULARMAP\n vec4 texelSpecular = texture2D( specularMap, vUv );\n specularStrength = texelSpecular.r;\n#else\n specularStrength = 1.0;\n#endif";THREE.ShaderChunk.specularmap_pars_fragment="#ifdef USE_SPECULARMAP\n uniform sampler2D specularMap;\n#endif";THREE.ShaderChunk.tonemapping_fragment="#if defined( TONE_MAPPING )\n gl_FragColor.rgb = toneMapping( gl_FragColor.rgb );\n#endif\n";THREE.ShaderChunk.tonemapping_pars_fragment="#define saturate(a) clamp( a, 0.0, 1.0 )\nuniform float toneMappingExposure;\nuniform float toneMappingWhitePoint;\nvec3 LinearToneMapping( vec3 color ) {\n return toneMappingExposure * color;\n}\nvec3 ReinhardToneMapping( vec3 color ) {\n color *= toneMappingExposure;\n return saturate( color / ( vec3( 1.0 ) + color ) );\n}\n#define Uncharted2Helper( x ) max( ( ( x * ( 0.15 * x + 0.10 * 0.50 ) + 0.20 * 0.02 ) / ( x * ( 0.15 * x + 0.50 ) + 0.20 * 0.30 ) ) - 0.02 / 0.30, vec3( 0.0 ) )\nvec3 Uncharted2ToneMapping( vec3 color ) {\n color *= toneMappingExposure;\n return saturate( Uncharted2Helper( color ) / Uncharted2Helper( vec3( toneMappingWhitePoint ) ) );\n}\nvec3 OptimizedCineonToneMapping( vec3 color ) {\n color *= toneMappingExposure;\n color = max( vec3( 0.0 ), color - 0.004 );\n return pow( ( color * ( 6.2 * color + 0.5 ) ) / ( color * ( 6.2 * color + 1.7 ) + 0.06 ), vec3( 2.2 ) );\n}\n";THREE.ShaderChunk.uv2_pars_fragment="#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n varying vec2 vUv2;\n#endif";THREE.ShaderChunk.uv2_pars_vertex="#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n attribute vec2 uv2;\n varying vec2 vUv2;\n#endif";THREE.ShaderChunk.uv2_vertex="#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n vUv2 = uv2;\n#endif";THREE.ShaderChunk.uv_pars_fragment="#if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP ) || defined( USE_ALPHAMAP ) || defined( USE_EMISSIVEMAP ) || defined( USE_ROUGHNESSMAP ) || defined( USE_METALNESSMAP )\n varying vec2 vUv;\n#endif";THREE.ShaderChunk.uv_pars_vertex="#if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP ) || defined( USE_ALPHAMAP ) || defined( USE_EMISSIVEMAP ) || defined( USE_ROUGHNESSMAP ) || defined( USE_METALNESSMAP )\n varying vec2 vUv;\n uniform vec4 offsetRepeat;\n#endif\n";THREE.ShaderChunk.uv_vertex="#if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP ) || defined( USE_ALPHAMAP ) || defined( USE_EMISSIVEMAP ) || defined( USE_ROUGHNESSMAP ) || defined( USE_METALNESSMAP )\n vUv = uv * offsetRepeat.zw + offsetRepeat.xy;\n#endif";THREE.ShaderChunk.worldpos_vertex="#if defined( USE_ENVMAP ) || defined( PHONG ) || defined( STANDARD ) || defined( LAMBERT ) || defined ( USE_SHADOWMAP )\n #ifdef USE_SKINNING\n vec4 worldPosition = modelMatrix * skinned;\n #else\n vec4 worldPosition = modelMatrix * vec4( transformed, 1.0 );\n #endif\n#endif\n";THREE.UniformsUtils={merge:function(a){for(var b={},c=0;c= 365 * 24 * 3600) { + result += (t / (365 * 24 * 3600) | 0) + " years "; + t %= 365 * 24 * 3600; + if (t < 24 * 3600) { + result += "0 days "; + } + } + if (t >= 24 * 3600) { + result += (t / (24 * 3600) | 0) + " days "; + } + t %= 24 * 3600; + return result + this.hourMinSec(t); + } +} +var DataFormatters = { + distanceString: function(value){ + return numeral(value).format('0,0.000 a') + "m" + }, -THREE.ShaderChunk.meshlambert_frag="uniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\nvarying vec3 vLightFront;\n#ifdef DOUBLE_SIDED\n varying vec3 vLightBack;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n vec4 diffuseColor = vec4( diffuse, opacity );\n ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n vec3 totalEmissiveRadiance = emissive;\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n reflectedLight.indirectDiffuse = getAmbientLightIrradiance( ambientLightColor );\n #include \n reflectedLight.indirectDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb );\n #ifdef DOUBLE_SIDED\n reflectedLight.directDiffuse = ( gl_FrontFacing ) ? vLightFront : vLightBack;\n #else\n reflectedLight.directDiffuse = vLightFront;\n #endif\n reflectedLight.directDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb ) * getShadowMask();\n #include \n vec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n #include \n gl_FragColor = vec4( outgoingLight, diffuseColor.a );\n #include \n #include \n #include \n #include \n}\n";THREE.ShaderChunk.meshlambert_vert="#define LAMBERT\nvarying vec3 vLightFront;\n#ifdef DOUBLE_SIDED\n varying vec3 vLightBack;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n}\n";THREE.ShaderChunk.meshphong_frag="#define PHONG\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform vec3 specular;\nuniform float shininess;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n vec4 diffuseColor = vec4( diffuse, opacity );\n ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n vec3 totalEmissiveRadiance = emissive;\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n vec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n #include \n gl_FragColor = vec4( outgoingLight, diffuseColor.a );\n #include \n #include \n #include \n #include \n}\n";THREE.ShaderChunk.meshphong_vert="#define PHONG\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n varying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n#ifndef FLAT_SHADED\n vNormal = normalize( transformedNormal );\n#endif\n #include \n #include \n #include \n #include \n #include \n #include \n vViewPosition = - mvPosition.xyz;\n #include \n #include \n #include \n #include \n}\n";THREE.ShaderChunk.meshstandard_frag="#define STANDARD\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float roughness;\nuniform float metalness;\nuniform float opacity;\nuniform float envMapIntensity;\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n varying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n vec4 diffuseColor = vec4( diffuse, opacity );\n ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n vec3 totalEmissiveRadiance = emissive;\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n vec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n gl_FragColor = vec4( outgoingLight, diffuseColor.a );\n #include \n #include \n #include \n #include \n}\n";THREE.ShaderChunk.meshstandard_vert="#define STANDARD\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n varying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n#ifndef FLAT_SHADED\n vNormal = normalize( transformedNormal );\n#endif\n #include \n #include \n #include \n #include \n #include \n #include \n vViewPosition = - mvPosition.xyz;\n #include \n #include \n #include \n}\n";THREE.ShaderChunk.normal_frag="uniform float opacity;\nvarying vec3 vNormal;\n#include \n#include \nvoid main() {\n gl_FragColor = vec4( 0.5 * normalize( vNormal ) + 0.5, opacity );\n #include \n}\n";THREE.ShaderChunk.normal_vert="varying vec3 vNormal;\n#include \n#include \n#include \nvoid main() {\n vNormal = normalize( normalMatrix * normal );\n #include \n #include \n #include \n #include \n}\n";THREE.ShaderChunk.points_frag="uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n vec3 outgoingLight = vec3( 0.0 );\n vec4 diffuseColor = vec4( diffuse, opacity );\n #include \n #include \n #include \n #include \n outgoingLight = diffuseColor.rgb;\n gl_FragColor = vec4( outgoingLight, diffuseColor.a );\n #include \n #include \n #include \n #include \n}\n";THREE.ShaderChunk.points_vert="uniform float size;\nuniform float scale;\n#include \n#include \n#include \n#include \nvoid main() {\n #include \n #include \n #include \n #ifdef USE_SIZEATTENUATION\n gl_PointSize = size * ( scale / - mvPosition.z );\n #else\n gl_PointSize = size;\n #endif\n #include \n #include \n #include \n}\n";THREE.ShaderLib={basic:{uniforms:THREE.UniformsUtils.merge([THREE.UniformsLib.common,THREE.UniformsLib.aomap,THREE.UniformsLib.fog]),vertexShader:THREE.ShaderChunk.meshbasic_vert,fragmentShader:THREE.ShaderChunk.meshbasic_frag},lambert:{uniforms:THREE.UniformsUtils.merge([THREE.UniformsLib.common,THREE.UniformsLib.aomap,THREE.UniformsLib.lightmap,THREE.UniformsLib.emissivemap,THREE.UniformsLib.fog,THREE.UniformsLib.lights,{emissive:{type:"c",value:new THREE.Color(0)}}]),vertexShader:THREE.ShaderChunk.meshlambert_vert,fragmentShader:THREE.ShaderChunk.meshlambert_frag},phong:{uniforms:THREE.UniformsUtils.merge([THREE.UniformsLib.common,THREE.UniformsLib.aomap,THREE.UniformsLib.lightmap,THREE.UniformsLib.emissivemap,THREE.UniformsLib.bumpmap,THREE.UniformsLib.normalmap,THREE.UniformsLib.displacementmap,THREE.UniformsLib.fog,THREE.UniformsLib.lights,{emissive:{type:"c",value:new THREE.Color(0)},specular:{type:"c",value:new THREE.Color(1118481)},shininess:{type:"f",value:30}}]),vertexShader:THREE.ShaderChunk.meshphong_vert,fragmentShader:THREE.ShaderChunk.meshphong_frag},standard:{uniforms:THREE.UniformsUtils.merge([THREE.UniformsLib.common,THREE.UniformsLib.aomap,THREE.UniformsLib.lightmap,THREE.UniformsLib.emissivemap,THREE.UniformsLib.bumpmap,THREE.UniformsLib.normalmap,THREE.UniformsLib.displacementmap,THREE.UniformsLib.roughnessmap,THREE.UniformsLib.metalnessmap,THREE.UniformsLib.fog,THREE.UniformsLib.lights,{emissive:{type:"c",value:new THREE.Color(0)},roughness:{type:"f",value:.5},metalness:{type:"f",value:0},envMapIntensity:{type:"f",value:1}}]),vertexShader:THREE.ShaderChunk.meshstandard_vert,fragmentShader:THREE.ShaderChunk.meshstandard_frag},points:{uniforms:THREE.UniformsUtils.merge([THREE.UniformsLib.points,THREE.UniformsLib.fog]),vertexShader:THREE.ShaderChunk.points_vert,fragmentShader:THREE.ShaderChunk.points_frag},dashed:{uniforms:THREE.UniformsUtils.merge([THREE.UniformsLib.common,THREE.UniformsLib.fog,{scale:{type:"f",value:1},dashSize:{type:"f",value:1},totalSize:{type:"f",value:2}}]),vertexShader:THREE.ShaderChunk.linedashed_vert,fragmentShader:THREE.ShaderChunk.linedashed_frag},depth:{uniforms:{mNear:{type:"f",value:1},mFar:{type:"f",value:2e3},opacity:{type:"f",value:1}},vertexShader:THREE.ShaderChunk.depth_vert,fragmentShader:THREE.ShaderChunk.depth_frag},normal:{uniforms:{opacity:{type:"f",value:1}},vertexShader:THREE.ShaderChunk.normal_vert,fragmentShader:THREE.ShaderChunk.normal_frag},cube:{uniforms:{tCube:{type:"t",value:null},tFlip:{type:"f",value:-1}},vertexShader:THREE.ShaderChunk.cube_vert,fragmentShader:THREE.ShaderChunk.cube_frag},equirect:{uniforms:{tEquirect:{type:"t",value:null},tFlip:{type:"f",value:-1}},vertexShader:THREE.ShaderChunk.equirect_vert,fragmentShader:THREE.ShaderChunk.equirect_frag},depthRGBA:{uniforms:{},vertexShader:THREE.ShaderChunk.depthRGBA_vert,fragmentShader:THREE.ShaderChunk.depthRGBA_frag},distanceRGBA:{uniforms:{lightPos:{type:"v3",value:new THREE.Vector3(0,0,0)}},vertexShader:THREE.ShaderChunk.distanceRGBA_vert,fragmentShader:THREE.ShaderChunk.distanceRGBA_frag}};THREE.WebGLRenderer=function(a){function b(a,b,c,d){!0===P&&(a*=d,b*=d,c*=d);K.clearColor(a,b,c,d)}function c(){K.init();K.scissor(qa.copy(ya).multiplyScalar(aa));K.viewport(ka.copy(la).multiplyScalar(aa));b(ba.r,ba.g,ba.b,ga)}function d(){ma=ha=null;na="";ra=-1;K.reset()}function e(a){a.preventDefault();d();c();U.clear()}function f(a){a=a.target;a.removeEventListener("dispose",f);a:{var b=U.get(a);if(a.image&&b.__image__webglTextureCube)r.deleteTexture(b.__image__webglTextureCube);else{if(void 0===b.__webglInit)break a;r.deleteTexture(b.__webglTexture)}U.delete(a)}ia.textures--}function g(a){a=a.target;a.removeEventListener("dispose",g);var b=U.get(a),c=U.get(a.texture);if(a&&void 0!==c.__webglTexture){r.deleteTexture(c.__webglTexture);if(a instanceof THREE.WebGLRenderTargetCube)for(c=0;6>c;c++)r.deleteFramebuffer(b.__webglFramebuffer[c]),r.deleteRenderbuffer(b.__webglDepthbuffer[c]);else r.deleteFramebuffer(b.__webglFramebuffer),r.deleteRenderbuffer(b.__webglDepthbuffer);U.delete(a.texture);U.delete(a)}ia.textures--}function h(a){a=a.target;a.removeEventListener("dispose",h);k(a);U.delete(a)}function k(a){var b=U.get(a).program;a.program=void 0;void 0!==b&&oa.releaseProgram(b)}function l(a,b){return Math.abs(b[0])-Math.abs(a[0])}function p(a,b){return a.object.renderOrder!==b.object.renderOrder?a.object.renderOrder-b.object.renderOrder:a.material.id!==b.material.id?a.material.id-b.material.id:a.z!==b.z?a.z-b.z:a.id-b.id}function n(a,b){return a.object.renderOrder!==b.object.renderOrder?a.object.renderOrder-b.object.renderOrder:a.z!==b.z?b.z-a.z:a.id-b.id}function m(a,b,c,d,e){var f;c.transparent?(d=S,f=++Y):(d=C,f=++Z);f=d[f];void 0!==f?(f.id=a.id,f.object=a,f.geometry=b,f.material=c,f.z=W.z,f.group=e):(f={id:a.id,object:a,geometry:b,material:c,z:W.z,group:e},d.push(f))}function q(a,b){if(!1!==a.visible){if(a.layers.test(b.layers))if(a instanceof THREE.Light)J.push(a);else if(a instanceof THREE.Sprite)!1!==a.frustumCulled&&!0!==za.intersectsObject(a)||ja.push(a);else if(a instanceof THREE.LensFlare)ea.push(a);else if(a instanceof THREE.ImmediateRenderObject)!0===X.sortObjects&&(W.setFromMatrixPosition(a.matrixWorld),W.applyProjection(sa)),m(a,null,a.material,W.z,null);else if(a instanceof THREE.Mesh||a instanceof THREE.Line||a instanceof THREE.Points)if(a instanceof THREE.SkinnedMesh&&a.skeleton.update(),!1===a.frustumCulled||!0===za.intersectsObject(a)){var c=a.material;if(!0===c.visible){!0===X.sortObjects&&(W.setFromMatrixPosition(a.matrixWorld),W.applyProjection(sa));var d=pa.update(a);if(c instanceof THREE.MultiMaterial)for(var e=d.groups,f=c.materials,c=0,g=e.length;c=da.maxTextures&&console.warn("WebGLRenderer: trying to use "+a+" texture units while this GPU supports only "+da.maxTextures);ta+=1;return a}function w(a,b,c,d){var e;if("1i"===b)r.uniform1i(c,d);else if("1f"===b)r.uniform1f(c,d);else if("2f"===b)r.uniform2f(c,d[0],d[1]);else if("3f"===b)r.uniform3f(c,d[0],d[1],d[2]);else if("4f"===b)r.uniform4f(c,d[0],d[1],d[2],d[3]);else if("1iv"===b)r.uniform1iv(c,d);else if("3iv"===b)r.uniform3iv(c,d);else if("1fv"===b)r.uniform1fv(c,d);else if("2fv"===b)r.uniform2fv(c,d);else if("3fv"===b)r.uniform3fv(c,d);else if("4fv"===b)r.uniform4fv(c,d);else if("Matrix2fv"===b)r.uniformMatrix2fv(c,!1,d);else if("Matrix3fv"===b)r.uniformMatrix3fv(c,!1,d);else if("Matrix4fv"===b)r.uniformMatrix4fv(c,!1,d);else if("i"===b)r.uniform1i(c,d);else if("f"===b)r.uniform1f(c,d);else if("v2"===b)r.uniform2f(c,d.x,d.y);else if("v3"===b)r.uniform3f(c,d.x,d.y,d.z);else if("v4"===b)r.uniform4f(c,d.x,d.y,d.z,d.w);else if("c"===b)r.uniform3f(c,d.r,d.g,d.b);else if("s"===b){a=a.properties;for(var g in a){e=a[g];var f=c[g],h=d[g];w(e,e.type,f,h)}}else if("sa"===b){a=a.properties;b=0;for(var k=d.length;bb||a.height>b){var c=b/Math.max(a.width,a.height),d=document.createElement("canvas");d.width=Math.floor(a.width*c);d.height=Math.floor(a.height*c);d.getContext("2d").drawImage(a,0,0,a.width,a.height,0,0,d.width,d.height);console.warn("THREE.WebGLRenderer: image is too big ("+a.width+"x"+a.height+"). Resized to "+d.width+"x"+d.height,a);return d}return a}function z(a){return THREE.Math.isPowerOfTwo(a.width)&&THREE.Math.isPowerOfTwo(a.height)}function y(a,b){var c=U.get(a);if(6===a.image.length)if(0h;h++)g[h]=!X.autoScaleCubemaps||d||e?e?a.image[h].image:a.image[h]:D(a.image[h],da.maxCubemapSize);var k=z(g[0]),l=L(a.format),m=L(a.type);x(r.TEXTURE_CUBE_MAP,a,k);for(h=0;6>h;h++)if(d)for(var n,p=g[h].mipmaps,q=0,s=p.length;qf;f++)b.__webglFramebuffer[f]=r.createFramebuffer()}else b.__webglFramebuffer=r.createFramebuffer();if(d){K.bindTexture(r.TEXTURE_CUBE_MAP,c.__webglTexture);x(r.TEXTURE_CUBE_MAP,a.texture,e);for(f=0;6>f;f++)G(b.__webglFramebuffer[f],a,r.COLOR_ATTACHMENT0,r.TEXTURE_CUBE_MAP_POSITIVE_X+f);a.texture.generateMipmaps&&e&&r.generateMipmap(r.TEXTURE_CUBE_MAP);K.bindTexture(r.TEXTURE_CUBE_MAP,null)}else K.bindTexture(r.TEXTURE_2D,c.__webglTexture),x(r.TEXTURE_2D,a.texture,e),G(b.__webglFramebuffer,a,r.COLOR_ATTACHMENT0,r.TEXTURE_2D),a.texture.generateMipmaps&&e&&r.generateMipmap(r.TEXTURE_2D),K.bindTexture(r.TEXTURE_2D,null);if(a.depthBuffer){b=U.get(a);if(a instanceof THREE.WebGLRenderTargetCube)for(b.__webglDepthbuffer=[],c=0;6>c;c++)r.bindFramebuffer(r.FRAMEBUFFER,b.__webglFramebuffer[c]),b.__webglDepthbuffer[c]=r.createRenderbuffer(),F(b.__webglDepthbuffer[c],a);else r.bindFramebuffer(r.FRAMEBUFFER,b.__webglFramebuffer),b.__webglDepthbuffer=r.createRenderbuffer(),F(b.__webglDepthbuffer,a);r.bindFramebuffer(r.FRAMEBUFFER,null)}}b=a instanceof THREE.WebGLRenderTargetCube;a?(c=U.get(a),c=b?c.__webglFramebuffer[a.activeCubeFace]:c.__webglFramebuffer,qa.copy(a.scissor),Aa=a.scissorTest,ka.copy(a.viewport)):(c=null,qa.copy(ya).multiplyScalar(aa),Aa=Ba,ka.copy(la).multiplyScalar(aa));ua!==c&&(r.bindFramebuffer(r.FRAMEBUFFER,c),ua=c);K.scissor(qa);K.setScissorTest(Aa);K.viewport(ka);b&&(b=U.get(a.texture),r.framebufferTexture2D(r.FRAMEBUFFER,r.COLOR_ATTACHMENT0,r.TEXTURE_CUBE_MAP_POSITIVE_X+a.activeCubeFace,b.__webglTexture,a.activeMipMapLevel))};this.readRenderTargetPixels=function(a,b,c,d,e,g){if(!1===a instanceof THREE.WebGLRenderTarget)console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.");else{var f=U.get(a).__webglFramebuffer;if(f){var h=!1;f!==ua&&(r.bindFramebuffer(r.FRAMEBUFFER,f),h=!0);try{var k=a.texture;k.format!==THREE.RGBAFormat&&L(k.format)!==r.getParameter(r.IMPLEMENTATION_COLOR_READ_FORMAT)?console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format."):k.type===THREE.UnsignedByteType||L(k.type)===r.getParameter(r.IMPLEMENTATION_COLOR_READ_TYPE)||k.type===THREE.FloatType&&V.get("WEBGL_color_buffer_float")||k.type===THREE.HalfFloatType&&V.get("EXT_color_buffer_half_float")?r.checkFramebufferStatus(r.FRAMEBUFFER)===r.FRAMEBUFFER_COMPLETE?r.readPixels(b,c,d,e,L(k.format),L(k.type),g):console.error("THREE.WebGLRenderer.readRenderTargetPixels: readPixels from renderTarget failed. Framebuffer not complete."):console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.")}finally{h&&r.bindFramebuffer(r.FRAMEBUFFER,ua)}}}}};THREE.WebGLRenderTarget=function(a,b,c){this.uuid=THREE.Math.generateUUID();this.width=a;this.height=b;this.scissor=new THREE.Vector4(0,0,a,b);this.scissorTest=!1;this.viewport=new THREE.Vector4(0,0,a,b);c=c||{};void 0===c.minFilter&&(c.minFilter=THREE.LinearFilter);this.texture=new THREE.Texture(void 0,void 0,c.wrapS,c.wrapT,c.magFilter,c.minFilter,c.format,c.type,c.anisotropy);this.depthBuffer=void 0!==c.depthBuffer?c.depthBuffer:!0;this.stencilBuffer=void 0!==c.stencilBuffer?c.stencilBuffer:!0};THREE.WebGLRenderTarget.prototype={constructor:THREE.WebGLRenderTarget,setSize:function(a,b){if(this.width!==a||this.height!==b)this.width=a,this.height=b,this.dispose();this.viewport.set(0,0,a,b);this.scissor.set(0,0,a,b)},clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.width=a.width;this.height=a.height;this.viewport.copy(a.viewport);this.texture=a.texture.clone();this.depthBuffer=a.depthBuffer;this.stencilBuffer=a.stencilBuffer;return this},dispose:function(){this.dispatchEvent({type:"dispose"})}};THREE.EventDispatcher.prototype.apply(THREE.WebGLRenderTarget.prototype);THREE.WebGLRenderTargetCube=function(a,b,c){THREE.WebGLRenderTarget.call(this,a,b,c);this.activeMipMapLevel=this.activeCubeFace=0};THREE.WebGLRenderTargetCube.prototype=Object.create(THREE.WebGLRenderTarget.prototype);THREE.WebGLRenderTargetCube.prototype.constructor=THREE.WebGLRenderTargetCube;THREE.WebGLBufferRenderer=function(a,b,c){var d;this.setMode=function(a){d=a};this.render=function(b,f){a.drawArrays(d,b,f);c.calls++;c.vertices+=f;d===a.TRIANGLES&&(c.faces+=f/3)};this.renderInstances=function(e){var f=b.get("ANGLE_instanced_arrays");if(null===f)console.error("THREE.WebGLBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.");else{var g=e.attributes.position,h=0,h=g instanceof THREE.InterleavedBufferAttribute?g.data.count:g.count;f.drawArraysInstancedANGLE(d,0,h,e.maxInstancedCount);c.calls++;c.vertices+=h*e.maxInstancedCount;d===a.TRIANGLES&&(c.faces+=e.maxInstancedCount*h/3)}}};THREE.WebGLIndexedBufferRenderer=function(a,b,c){var d,e,f;this.setMode=function(a){d=a};this.setIndex=function(c){c.array instanceof Uint32Array&&b.get("OES_element_index_uint")?(e=a.UNSIGNED_INT,f=4):(e=a.UNSIGNED_SHORT,f=2)};this.render=function(b,h){a.drawElements(d,h,e,b*f);c.calls++;c.vertices+=h;d===a.TRIANGLES&&(c.faces+=h/3)};this.renderInstances=function(g,h,k){var l=b.get("ANGLE_instanced_arrays");null===l?console.error("THREE.WebGLBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays."):(l.drawElementsInstancedANGLE(d,k,e,h*f,g.maxInstancedCount),c.calls++,c.vertices+=k*g.maxInstancedCount,d===a.TRIANGLES&&(c.faces+=g.maxInstancedCount*k/3))}};THREE.WebGLExtensions=function(a){var b={};this.get=function(c){if(void 0!==b[c])return b[c];var d;switch(c){case"EXT_texture_filter_anisotropic":d=a.getExtension("EXT_texture_filter_anisotropic")||a.getExtension("MOZ_EXT_texture_filter_anisotropic")||a.getExtension("WEBKIT_EXT_texture_filter_anisotropic");break;case"WEBGL_compressed_texture_s3tc":d=a.getExtension("WEBGL_compressed_texture_s3tc")||a.getExtension("MOZ_WEBGL_compressed_texture_s3tc")||a.getExtension("WEBKIT_WEBGL_compressed_texture_s3tc");break;case"WEBGL_compressed_texture_pvrtc":d=a.getExtension("WEBGL_compressed_texture_pvrtc")||a.getExtension("WEBKIT_WEBGL_compressed_texture_pvrtc");break;case"WEBGL_compressed_texture_etc1":d=a.getExtension("WEBGL_compressed_texture_etc1");break;default:d=a.getExtension(c)}null===d&&console.warn("THREE.WebGLRenderer: "+c+" extension not supported.");return b[c]=d}};THREE.WebGLCapabilities=function(a,b,c){function d(b){if("highp"===b){if(0c){var d=b;b=c;c=d}d=a[b];return void 0===d?(a[b]=[c],!0):-1===d.indexOf(c)?(d.push(c),!0):!1}var f=new THREE.WebGLGeometries(a,b,c);this.getAttributeBuffer=function(a){return a instanceof THREE.InterleavedBufferAttribute?b.get(a.data).__webglBuffer:b.get(a).__webglBuffer};this.getWireframeAttribute=function(c){var f=b.get(c);if(void 0!==f.wireframe)return f.wireframe;var k=[],l=c.index,p=c.attributes;c=p.position;if(null!==l)for(var p={},l=l.array,n=0,m=l.length;n/g,function(a,b){var c=THREE.ShaderChunk[b];if(void 0===c)throw Error("Can not resolve #include <"+b+">");return k(c)})}function l(a){return a.replace(/for \( int i \= (\d+)\; i < (\d+)\; i \+\+ \) \{([\s\S]+?)(?=\})\}/g,function(a,b,c,d){a="";for(b=parseInt(b);b 0 ) {\nfloat depth = gl_FragCoord.z / gl_FragCoord.w;\nfloat fogFactor = 0.0;\nif ( fogType == 1 ) {\nfogFactor = smoothstep( fogNear, fogFar, depth );\n} else {\nconst float LOG2 = 1.442695;\nfogFactor = exp2( - fogDensity * fogDensity * depth * depth * LOG2 );\nfogFactor = 1.0 - clamp( fogFactor, 0.0, 1.0 );\n}\ngl_FragColor = mix( gl_FragColor, vec4( fogColor, gl_FragColor.w ), fogFactor );\n}\n}"].join("\n")); + degreeString: function(value){ + return numeral(value).format('0.000') + "°" + }, -x.compileShader(I);x.compileShader(O);x.attachShader(M,I);x.attachShader(M,O);x.linkProgram(M);B=M;s=x.getAttribLocation(B,"position");w=x.getAttribLocation(B,"uv");c=x.getUniformLocation(B,"uvOffset");d=x.getUniformLocation(B,"uvScale");e=x.getUniformLocation(B,"rotation");f=x.getUniformLocation(B,"scale");g=x.getUniformLocation(B,"color");h=x.getUniformLocation(B,"map");k=x.getUniformLocation(B,"opacity");l=x.getUniformLocation(B,"modelViewMatrix");p=x.getUniformLocation(B,"projectionMatrix");n=x.getUniformLocation(B,"fogType");m=x.getUniformLocation(B,"fogDensity");q=x.getUniformLocation(B,"fogNear");u=x.getUniformLocation(B,"fogFar");v=x.getUniformLocation(B,"fogColor");t=x.getUniformLocation(B,"alphaTest");M=document.createElement("canvas");M.width=8;M.height=8;I=M.getContext("2d");I.fillStyle="white";I.fillRect(0,0,8,8);G=new THREE.Texture(M);G.needsUpdate=!0}x.useProgram(B);D.initAttributes();D.enableAttribute(s);D.enableAttribute(w);D.disableUnusedAttributes();D.disable(x.CULL_FACE);D.enable(x.BLEND);x.bindBuffer(x.ARRAY_BUFFER,z);x.vertexAttribPointer(s,2,x.FLOAT,!1,16,0);x.vertexAttribPointer(w,2,x.FLOAT,!1,16,8);x.bindBuffer(x.ELEMENT_ARRAY_BUFFER,y);x.uniformMatrix4fv(p,!1,N.projectionMatrix.elements);D.activeTexture(x.TEXTURE0);x.uniform1i(h,0);I=M=0;(O=A.fog)?(x.uniform3f(v,O.color.r,O.color.g,O.color.b),O instanceof THREE.Fog?(x.uniform1f(q,O.near),x.uniform1f(u,O.far),x.uniform1i(n,1),I=M=1):O instanceof THREE.FogExp2&&(x.uniform1f(m,O.density),x.uniform1i(n,2),I=M=2)):(x.uniform1i(n,0),I=M=0);for(var O=0,Q=b.length;Oc)return null;var d=[],e=[],f=[],g,h,k;if(0=l--){console.warn("THREE.ShapeUtils: Unable to triangulate polygon! in triangulate()");break}g=h;c<=g&&(g=0);h=g+1;c<=h&&(h=0);k=h+1;c<=k&&(k=0);var p;a:{var n=p=void 0,m=void 0,q=void 0,u=void 0,v=void 0,t=void 0,s=void 0,w=void 0,n=a[e[g]].x,m=a[e[g]].y,q=a[e[h]].x,u=a[e[h]].y,v=a[e[k]].x,t=a[e[k]].y;if(Number.EPSILON>(q-n)*(t-m)-(u-m)*(v-n))p=!1;else{var E=void 0,x=void 0,D=void 0,z=void 0,y=void 0,B=void 0,G=void 0,F=void 0,H=void 0,L=void 0,H=F=G=w=s=void 0,E=v-q,x=t-u,D=n-v,z=m-t,y=q-n,B=u-m;for(p=0;p=-Number.EPSILON&&F>=-Number.EPSILON&&G>=-Number.EPSILON)){p=!1;break a}p=!0}}if(p){d.push([a[e[g]],a[e[h]],a[e[k]]]);f.push([e[g],e[h],e[k]]);g=h;for(k=h+1;kNumber.EPSILON){if(0B||B>y)return[];k=l*n-k*p;if(0>k||k>y)return[]}else{if(0d?[]:k===d?f?[]:[g]:a<=d?[g,h]:[g,l]}function e(a,b,c,d){var e=b.x-a.x,f=b.y-a.y;b=c.x-a.x;c=c.y-a.y;var g=d.x-a.x;d=d.y-a.y;a=e*c-f*b;e=e*d-f*g;return Math.abs(a)>Number.EPSILON?(b=g*c-d*b,0f&&(f=d);var g=a+1;g>d&&(g=0);d=e(h[a],h[f],h[g],k[b]);if(!d)return!1;d=k.length-1;f=b-1;0>f&&(f=d);g=b+1;g>d&&(g=0);return(d=e(k[b],k[f],k[g],h[a]))?!0:!1}function f(a,b){var c,e;for(c=0;cN){console.log("Infinite Loop! Holes left:"+l.length+", Probably Hole outside Shape!");break}for(p=F;ph;h++)l=k[h].x+":"+k[h].y,l=p[l],void 0!==l&&(k[h]=l);return n.concat()},isClockWise:function(a){return 0>THREE.ShapeUtils.area(a)},b2:function(){return function(a,b,c,d){var e=1-a;return e*e*b+2*(1-a)*a*c+a*a*d}}(),b3:function(){return function(a,b,c,d,e){var f=1-a,g=1-a;return f*f*f*b+3*g*g*a*c+3*(1-a)*a*a*d+a*a*a*e}}()};THREE.Curve=function(){};THREE.Curve.prototype={constructor:THREE.Curve,getPoint:function(a){console.warn("THREE.Curve: Warning, getPoint() not implemented!");return null},getPointAt:function(a){a=this.getUtoTmapping(a);return this.getPoint(a)},getPoints:function(a){a||(a=5);var b,c=[];for(b=0;b<=a;b++)c.push(this.getPoint(b/a));return c},getSpacedPoints:function(a){a||(a=5);var b,c=[];for(b=0;b<=a;b++)c.push(this.getPointAt(b/a));return c},getLength:function(){var a=this.getLengths();return a[a.length-1]},getLengths:function(a){a||(a=this.__arcLengthDivisions?this.__arcLengthDivisions:200);if(this.cacheArcLengths&&this.cacheArcLengths.length===a+1&&!this.needsUpdate)return this.cacheArcLengths;this.needsUpdate=!1;var b=[],c,d=this.getPoint(0),e,f=0;b.push(0);for(e=1;e<=a;e++)c=this.getPoint(e/a),f+=c.distanceTo(d),b.push(f),d=c;return this.cacheArcLengths=b},updateArcLengths:function(){this.needsUpdate=!0;this.getLengths()},getUtoTmapping:function(a,b){var c=this.getLengths(),d=0,e=c.length,f;f=b?b:a*c[e-1];for(var g=0,h=e-1,k;g<=h;)if(d=Math.floor(g+(h-g)/2),k=c[d]-f,0>k)g=d+1;else if(0b&&(b=0);1=b)return a=this.curves[d],b=1-(c[d]-b)/a.getLength(),a.getPointAt(b);d++}return null};THREE.CurvePath.prototype.getLength=function(){var a=this.getCurveLengths();return a[a.length-1]};THREE.CurvePath.prototype.getCurveLengths=function(){if(this.cacheLengths&&this.cacheLengths.length===this.curves.length)return this.cacheLengths;for(var a=[],b=0,c=0,d=this.curves.length;cNumber.EPSILON){if(0>l&&(g=b[f],k=-k,h=b[e],l=-l),!(a.yh.y))if(a.y===g.y){if(a.x===g.x)return!0}else{e=l*(a.x-g.x)-k*(a.y-g.y);if(0===e)return!0;0>e||(d=!d)}}else if(a.y===g.y&&(h.x<=a.x&&a.x<=g.x||g.x<=a.x&&a.x<=h.x))return!0}return d}var e=THREE.ShapeUtils.isClockWise,f=function(a){for(var b=[],c=new THREE.Path,d=0,e=a.length;db.length-2?b.length-1:c+1],b=b[c>b.length-3?b.length-1:c+2],c=THREE.CurveUtils.interpolate;return new THREE.Vector2(c(d.x,e.x,f.x,b.x,a),c(d.y,e.y,f.y,b.y,a))};THREE.EllipseCurve=function(a,b,c,d,e,f,g,h){this.aX=a;this.aY=b;this.xRadius=c;this.yRadius=d;this.aStartAngle=e;this.aEndAngle=f;this.aClockwise=g;this.aRotation=h||0};THREE.EllipseCurve.prototype=Object.create(THREE.Curve.prototype);THREE.EllipseCurve.prototype.constructor=THREE.EllipseCurve;THREE.EllipseCurve.prototype.getPoint=function(a){var b=this.aEndAngle-this.aStartAngle;0>b&&(b+=2*Math.PI);b>2*Math.PI&&(b-=2*Math.PI);b=!0===this.aClockwise?this.aEndAngle+(1-a)*(2*Math.PI-b):this.aStartAngle+a*b;a=this.aX+this.xRadius*Math.cos(b);var c=this.aY+this.yRadius*Math.sin(b);if(0!==this.aRotation){var b=Math.cos(this.aRotation),d=Math.sin(this.aRotation),e=a;a=(e-this.aX)*b-(c-this.aY)*d+this.aX;c=(e-this.aX)*d+(c-this.aY)*b+this.aY}return new THREE.Vector2(a,c)};THREE.ArcCurve=function(a,b,c,d,e,f){THREE.EllipseCurve.call(this,a,b,c,c,d,e,f)};THREE.ArcCurve.prototype=Object.create(THREE.EllipseCurve.prototype);THREE.ArcCurve.prototype.constructor=THREE.ArcCurve;THREE.LineCurve3=THREE.Curve.create(function(a,b){this.v1=a;this.v2=b},function(a){var b=new THREE.Vector3;b.subVectors(this.v2,this.v1);b.multiplyScalar(a);b.add(this.v1);return b});THREE.QuadraticBezierCurve3=THREE.Curve.create(function(a,b,c){this.v0=a;this.v1=b;this.v2=c},function(a){var b=THREE.ShapeUtils.b2;return new THREE.Vector3(b(a,this.v0.x,this.v1.x,this.v2.x),b(a,this.v0.y,this.v1.y,this.v2.y),b(a,this.v0.z,this.v1.z,this.v2.z))});THREE.CubicBezierCurve3=THREE.Curve.create(function(a,b,c,d){this.v0=a;this.v1=b;this.v2=c;this.v3=d},function(a){var b=THREE.ShapeUtils.b3;return new THREE.Vector3(b(a,this.v0.x,this.v1.x,this.v2.x,this.v3.x),b(a,this.v0.y,this.v1.y,this.v2.y,this.v3.y),b(a,this.v0.z,this.v1.z,this.v2.z,this.v3.z))});THREE.SplineCurve3=THREE.Curve.create(function(a){console.warn("THREE.SplineCurve3 will be deprecated. Please use THREE.CatmullRomCurve3");this.points=void 0==a?[]:a},function(a){var b=this.points;a*=b.length-1;var c=Math.floor(a);a-=c;var d=b[0==c?c:c-1],e=b[c],f=b[c>b.length-2?b.length-1:c+1],b=b[c>b.length-3?b.length-1:c+2],c=THREE.CurveUtils.interpolate;return new THREE.Vector3(c(d.x,e.x,f.x,b.x,a),c(d.y,e.y,f.y,b.y,a),c(d.z,e.z,f.z,b.z,a))});THREE.CatmullRomCurve3=function(){function a(){}var b=new THREE.Vector3,c=new a,d=new a,e=new a;a.prototype.init=function(a,b,c,d){this.c0=a;this.c1=c;this.c2=-3*a+3*b-2*c-d;this.c3=2*a-2*b+c+d};a.prototype.initNonuniformCatmullRom=function(a,b,c,d,e,p,n){a=((b-a)/e-(c-a)/(e+p)+(c-b)/p)*p;d=((c-b)/p-(d-b)/(p+n)+(d-c)/n)*p;this.init(b,c,a,d)};a.prototype.initCatmullRom=function(a,b,c,d,e){this.init(b,c,e*(c-a),e*(d-b))};a.prototype.calc=function(a){var b=a*a;return this.c0+this.c1*a+this.c2*b+this.c3*b*a};return THREE.Curve.create(function(a){this.points=a||[];this.closed=!1},function(a){var g=this.points,h,k;k=g.length;2>k&&console.log("duh, you need at least 2 points");a*=k-(this.closed?0:1);h=Math.floor(a);a-=h;this.closed?h+=0h&&(h=1);1e-4>k&&(k=h);1e-4>m&&(m=h);c.initNonuniformCatmullRom(l.x,p.x,n.x,g.x,k,h,m);d.initNonuniformCatmullRom(l.y,p.y,n.y,g.y,k,h,m);e.initNonuniformCatmullRom(l.z,p.z,n.z,g.z,k,h,m)}else"catmullrom"===this.type&&(k=void 0!==this.tension?this.tension:.5,c.initCatmullRom(l.x,p.x,n.x,g.x,k),d.initCatmullRom(l.y,p.y,n.y,g.y,k),e.initCatmullRom(l.z,p.z,n.z,g.z,k));return new THREE.Vector3(c.calc(a),d.calc(a),e.calc(a))})}();THREE.ClosedSplineCurve3=function(a){console.warn("THREE.ClosedSplineCurve3 has been deprecated. Please use THREE.CatmullRomCurve3.");THREE.CatmullRomCurve3.call(this,a);this.type="catmullrom";this.closed=!0};THREE.ClosedSplineCurve3.prototype=Object.create(THREE.CatmullRomCurve3.prototype);THREE.BoxGeometry=function(a,b,c,d,e,f){THREE.Geometry.call(this);this.type="BoxGeometry";this.parameters={width:a,height:b,depth:c,widthSegments:d,heightSegments:e,depthSegments:f};this.fromBufferGeometry(new THREE.BoxBufferGeometry(a,b,c,d,e,f));this.mergeVertices()};THREE.BoxGeometry.prototype=Object.create(THREE.Geometry.prototype);THREE.BoxGeometry.prototype.constructor=THREE.BoxGeometry;THREE.CubeGeometry=THREE.BoxGeometry;THREE.BoxBufferGeometry=function(a,b,c,d,e,f){function g(a,b,c,d,e,f,g,k,l,L,A){var N=f/l,M=g/L,I=f/2,O=g/2,Q=k/2;g=l+1;for(var P=L+1,T=f=0,J=new THREE.Vector3,C=0;Cm;m++){e[0]=n[g[m]];e[1]=n[g[(m+1)%3]];e.sort(c);var q=e.toString();void 0===f[q]?f[q]={vert1:e[0],vert2:e[1],face1:l,face2:void 0}:f[q].face2=l}e=[];for(q in f)if(g=f[q],void 0===g.face2||h[g.face1].normal.dot(h[g.face2].normal)<=d)l=k[g.vert1],e.push(l.x),e.push(l.y),e.push(l.z),l=k[g.vert2],e.push(l.x),e.push(l.y),e.push(l.z);this.addAttribute("position",new THREE.BufferAttribute(new Float32Array(e),3))};THREE.EdgesGeometry.prototype=Object.create(THREE.BufferGeometry.prototype);THREE.EdgesGeometry.prototype.constructor=THREE.EdgesGeometry;THREE.ExtrudeGeometry=function(a,b){"undefined"!==typeof a&&(THREE.Geometry.call(this),this.type="ExtrudeGeometry",a=Array.isArray(a)?a:[a],this.addShapeList(a,b),this.computeFaceNormals())};THREE.ExtrudeGeometry.prototype=Object.create(THREE.Geometry.prototype);THREE.ExtrudeGeometry.prototype.constructor=THREE.ExtrudeGeometry;THREE.ExtrudeGeometry.prototype.addShapeList=function(a,b){for(var c=a.length,d=0;dNumber.EPSILON){var k=Math.sqrt(h),l=Math.sqrt(f*f+g*g),h=b.x-e/k;b=b.y+d/k;f=((c.x-g/l-h)*g-(c.y+f/l-b)*f)/(d*g-e*f);c=h+d*f-a.x;a=b+e*f-a.y;d=c*c+a*a;if(2>=d)return new THREE.Vector2(c,a);d=Math.sqrt(d/2)}else a=!1,d>Number.EPSILON?f>Number.EPSILON&&(a=!0):d<-Number.EPSILON?f<-Number.EPSILON&&(a=!0):Math.sign(e)===Math.sign(g)&&(a=!0),a?(c=-e,a=d,d=Math.sqrt(h)):(c=d,a=e,d=Math.sqrt(h/2));return new THREE.Vector2(c/d,a/d)}function e(a,b){var c,d;for(C=a.length;0<=--C;){c=C;d=C-1;0>d&&(d=a.length-1);for(var e=0,f=q+2*p,e=0;eMath.abs(b.y-c.y)?[new THREE.Vector2(b.x,1-b.z),new THREE.Vector2(c.x,1-c.z),new THREE.Vector2(d.x,1-d.z),new THREE.Vector2(e.x,1-e.z)]:[new THREE.Vector2(b.y,1-b.z),new THREE.Vector2(c.y,1-c.z),new THREE.Vector2(d.y,1-d.z),new THREE.Vector2(e.y,1-e.z)]}};THREE.ShapeGeometry=function(a,b){THREE.Geometry.call(this);this.type="ShapeGeometry";!1===Array.isArray(a)&&(a=[a]);this.addShapeList(a,b);this.computeFaceNormals()};THREE.ShapeGeometry.prototype=Object.create(THREE.Geometry.prototype);THREE.ShapeGeometry.prototype.constructor=THREE.ShapeGeometry;THREE.ShapeGeometry.prototype.addShapeList=function(a,b){for(var c=0,d=a.length;cNumber.EPSILON&&(h.normalize(),d=Math.acos(THREE.Math.clamp(e[l-1].dot(e[l]),-1,1)),f[l].applyMatrix4(k.makeRotationAxis(h,d))),g[l].crossVectors(e[l],f[l]);if(c)for(d=Math.acos(THREE.Math.clamp(f[0].dot(f[b-1]),-1,1)),d/=b-1,0c&&1===a.x&&(a=new THREE.Vector2(a.x-1,a.y));0===b.x&&0===b.z&&(a=new THREE.Vector2(c/2/Math.PI+.5,a.y));return a.clone()}THREE.Geometry.call(this);this.type="PolyhedronGeometry";this.parameters={vertices:a,indices:b,radius:c,detail:d};c=c||1;d=d||0;for(var k=this,l=0,p=a.length;lq&&(.2>d&&(b[0].x+=1),.2>a&&(b[1].x+=1),.2>n&&(b[2].x+=1));l=0;for(p=this.vertices.length;ln;n++){c[0]=p[e[n]];c[1]=p[e[(n+1)%3]];c.sort(b);var m=c.toString();void 0===d[m]&&(k[2*h]=c[0],k[2*h+1]=c[1],d[m]=!0,h++)}c=new Float32Array(6*h);a=0;for(l=h;an;n++)d=f[k[2*a+n]],h=6*a+3*n,c[h+0]=d.x,c[h+1]=d.y,c[h+2]=d.z;this.addAttribute("position",new THREE.BufferAttribute(c,3))}else if(a instanceof THREE.BufferGeometry){if(null!==a.index){l=a.index.array;f=a.attributes.position;e=a.groups;h=0;0===e.length&&a.addGroup(0,l.length);k=new Uint32Array(2*l.length);g=0;for(p=e.length;gn;n++)c[0]=l[a+n],c[1]=l[a+(n+1)%3],c.sort(b),m=c.toString(),void 0===d[m]&&(k[2*h]=c[0],k[2*h+1]=c[1],d[m]=!0,h++)}c=new Float32Array(6*h);a=0;for(l=h;an;n++)h=6*a+3*n,d=k[2*a+n],c[h+0]=f.getX(d),c[h+1]=f.getY(d),c[h+2]=f.getZ(d)}else for(f=a.attributes.position.array,h=f.length/3,k=h/3,c=new Float32Array(6*h),a=0,l=k;an;n++)h=18*a+6*n,k=9*a+3*n,c[h+0]=f[k],c[h+1]=f[k+1],c[h+2]=f[k+2],d=9*a+(n+1)%3*3,c[h+3]=f[d],c[h+4]=f[d+1],c[h+5]=f[d+2];this.addAttribute("position",new THREE.BufferAttribute(c,3))}};THREE.WireframeGeometry.prototype=Object.create(THREE.BufferGeometry.prototype);THREE.WireframeGeometry.prototype.constructor=THREE.WireframeGeometry;THREE.AxisHelper=function(a){a=a||1;var b=new Float32Array([0,0,0,a,0,0,0,0,0,0,a,0,0,0,0,0,0,a]),c=new Float32Array([1,0,0,1,.6,0,0,1,0,.6,1,0,0,0,1,0,.6,1]);a=new THREE.BufferGeometry;a.addAttribute("position",new THREE.BufferAttribute(b,3));a.addAttribute("color",new THREE.BufferAttribute(c,3));b=new THREE.LineBasicMaterial({vertexColors:THREE.VertexColors});THREE.LineSegments.call(this,a,b)};THREE.AxisHelper.prototype=Object.create(THREE.LineSegments.prototype);THREE.AxisHelper.prototype.constructor=THREE.AxisHelper;THREE.ArrowHelper=function(){var a=new THREE.Geometry;a.vertices.push(new THREE.Vector3(0,0,0),new THREE.Vector3(0,1,0));var b=new THREE.CylinderGeometry(0,.5,1,5,1);b.translate(0,-.5,0);return function(c,d,e,f,g,h){THREE.Object3D.call(this);void 0===f&&(f=16776960);void 0===e&&(e=1);void 0===g&&(g=.2*e);void 0===h&&(h=.2*g);this.position.copy(d);this.line=new THREE.Line(a,new THREE.LineBasicMaterial({color:f}));this.line.matrixAutoUpdate=!1;this.add(this.line);this.cone=new THREE.Mesh(b,new THREE.MeshBasicMaterial({color:f}));this.cone.matrixAutoUpdate=!1;this.add(this.cone);this.setDirection(c);this.setLength(e,g,h)}}();THREE.ArrowHelper.prototype=Object.create(THREE.Object3D.prototype);THREE.ArrowHelper.prototype.constructor=THREE.ArrowHelper;THREE.ArrowHelper.prototype.setDirection=function(){var a=new THREE.Vector3,b;return function(c){.99999c.y?this.quaternion.set(1,0,0,0):(a.set(c.z,0,-c.x).normalize(),b=Math.acos(c.y),this.quaternion.setFromAxisAngle(a,b))}}();THREE.ArrowHelper.prototype.setLength=function(a,b,c){void 0===b&&(b=.2*a);void 0===c&&(c=.2*b);this.line.scale.set(1,Math.max(0,a-b),1);this.line.updateMatrix();this.cone.scale.set(c,b,c);this.cone.position.y=a;this.cone.updateMatrix()};THREE.ArrowHelper.prototype.setColor=function(a){this.line.material.color.set(a);this.cone.material.color.set(a)};THREE.BoxHelper=function(a){var b=new Uint16Array([0,1,1,2,2,3,3,0,4,5,5,6,6,7,7,4,0,4,1,5,2,6,3,7]),c=new Float32Array(24),d=new THREE.BufferGeometry;d.setIndex(new THREE.BufferAttribute(b,1));d.addAttribute("position",new THREE.BufferAttribute(c,3));THREE.LineSegments.call(this,d,new THREE.LineBasicMaterial({color:16776960}));void 0!==a&&this.update(a)};THREE.BoxHelper.prototype=Object.create(THREE.LineSegments.prototype);THREE.BoxHelper.prototype.constructor=THREE.BoxHelper;THREE.BoxHelper.prototype.update=function(){var a=new THREE.Box3;return function(b){a.setFromObject(b);if(!a.isEmpty()){b=a.min;var c=a.max,d=this.geometry.attributes.position,e=d.array;e[0]=c.x;e[1]=c.y;e[2]=c.z;e[3]=b.x;e[4]=c.y;e[5]=c.z;e[6]=b.x;e[7]=b.y;e[8]=c.z;e[9]=c.x;e[10]=b.y;e[11]=c.z;e[12]=c.x;e[13]=c.y;e[14]=b.z;e[15]=b.x;e[16]=c.y;e[17]=b.z;e[18]=b.x;e[19]=b.y;e[20]=b.z;e[21]=c.x;e[22]=b.y;e[23]=b.z;d.needsUpdate=!0;this.geometry.computeBoundingSphere()}}}();THREE.BoundingBoxHelper=function(a,b){var c=void 0!==b?b:8947848;this.object=a;this.box=new THREE.Box3;THREE.Mesh.call(this,new THREE.BoxGeometry(1,1,1),new THREE.MeshBasicMaterial({color:c,wireframe:!0}))};THREE.BoundingBoxHelper.prototype=Object.create(THREE.Mesh.prototype);THREE.BoundingBoxHelper.prototype.constructor=THREE.BoundingBoxHelper;THREE.BoundingBoxHelper.prototype.update=function(){this.box.setFromObject(this.object);this.box.size(this.scale);this.box.center(this.position)};THREE.CameraHelper=function(a){function b(a,b,d){c(a,d);c(b,d)}function c(a,b){d.vertices.push(new THREE.Vector3);d.colors.push(new THREE.Color(b));void 0===f[a]&&(f[a]=[]);f[a].push(d.vertices.length-1)}var d=new THREE.Geometry,e=new THREE.LineBasicMaterial({color:16777215,vertexColors:THREE.FaceColors}),f={};b("n1","n2",16755200);b("n2","n4",16755200);b("n4","n3",16755200);b("n3","n1",16755200);b("f1","f2",16755200);b("f2","f4",16755200);b("f4","f3",16755200);b("f3","f1",16755200);b("n1","f1",16755200);b("n2","f2",16755200);b("n3","f3",16755200);b("n4","f4",16755200);b("p","n1",16711680);b("p","n2",16711680);b("p","n3",16711680);b("p","n4",16711680);b("u1","u2",43775);b("u2","u3",43775);b("u3","u1",43775);b("c","t",16777215);b("p","c",3355443);b("cn1","cn2",3355443);b("cn3","cn4",3355443);b("cf1","cf2",3355443);b("cf3","cf4",3355443);THREE.LineSegments.call(this,d,e);this.camera=a;this.camera.updateProjectionMatrix();this.matrix=a.matrixWorld;this.matrixAutoUpdate=!1;this.pointMap=f;this.update()};THREE.CameraHelper.prototype=Object.create(THREE.LineSegments.prototype);THREE.CameraHelper.prototype.constructor=THREE.CameraHelper;THREE.CameraHelper.prototype.update=function(){function a(a,g,h,k){d.set(g,h,k).unproject(e);a=c[a];if(void 0!==a)for(g=0,h=a.length;gd;d++)c.faces[d].color=this.colors[4>d?0:1];d=new THREE.MeshBasicMaterial({vertexColors:THREE.FaceColors,wireframe:!0});this.lightSphere=new THREE.Mesh(c,d);this.add(this.lightSphere);this.update()};THREE.HemisphereLightHelper.prototype=Object.create(THREE.Object3D.prototype);THREE.HemisphereLightHelper.prototype.constructor=THREE.HemisphereLightHelper;THREE.HemisphereLightHelper.prototype.dispose=function(){this.lightSphere.geometry.dispose();this.lightSphere.material.dispose()};THREE.HemisphereLightHelper.prototype.update=function(){var a=new THREE.Vector3;return function(){this.colors[0].copy(this.light.color).multiplyScalar(this.light.intensity);this.colors[1].copy(this.light.groundColor).multiplyScalar(this.light.intensity);this.lightSphere.lookAt(a.setFromMatrixPosition(this.light.matrixWorld).negate());this.lightSphere.geometry.colorsNeedUpdate=!0}}();THREE.PointLightHelper=function(a,b){this.light=a;this.light.updateMatrixWorld();var c=new THREE.SphereGeometry(b,4,2),d=new THREE.MeshBasicMaterial({wireframe:!0,fog:!1});d.color.copy(this.light.color).multiplyScalar(this.light.intensity);THREE.Mesh.call(this,c,d);this.matrix=this.light.matrixWorld;this.matrixAutoUpdate=!1};THREE.PointLightHelper.prototype=Object.create(THREE.Mesh.prototype);THREE.PointLightHelper.prototype.constructor=THREE.PointLightHelper;THREE.PointLightHelper.prototype.dispose=function(){this.geometry.dispose();this.material.dispose()};THREE.PointLightHelper.prototype.update=function(){this.material.color.copy(this.light.color).multiplyScalar(this.light.intensity)};THREE.SkeletonHelper=function(a){this.bones=this.getBoneList(a);for(var b=new THREE.Geometry,c=0;ch.end&&(h.end=f);c||(c=k)}}for(k in d)h=d[k],this.createAnimation(k,h.start,h.end,a);this.firstAnimation=c};THREE.MorphBlendMesh.prototype.setAnimationDirectionForward=function(a){if(a=this.animationsMap[a])a.direction=1,a.directionBackwards=!1};THREE.MorphBlendMesh.prototype.setAnimationDirectionBackward=function(a){if(a=this.animationsMap[a])a.direction=-1,a.directionBackwards=!0};THREE.MorphBlendMesh.prototype.setAnimationFPS=function(a,b){var c=this.animationsMap[a];c&&(c.fps=b,c.duration=(c.end-c.start)/c.fps)};THREE.MorphBlendMesh.prototype.setAnimationDuration=function(a,b){var c=this.animationsMap[a];c&&(c.duration=b,c.fps=(c.end-c.start)/c.duration)};THREE.MorphBlendMesh.prototype.setAnimationWeight=function(a,b){var c=this.animationsMap[a];c&&(c.weight=b)};THREE.MorphBlendMesh.prototype.setAnimationTime=function(a,b){var c=this.animationsMap[a];c&&(c.time=b)};THREE.MorphBlendMesh.prototype.getAnimationTime=function(a){var b=0;if(a=this.animationsMap[a])b=a.time;return b};THREE.MorphBlendMesh.prototype.getAnimationDuration=function(a){var b=-1;if(a=this.animationsMap[a])b=a.duration;return b};THREE.MorphBlendMesh.prototype.playAnimation=function(a){var b=this.animationsMap[a];b?(b.time=0,b.active=!0):console.warn("THREE.MorphBlendMesh: animation["+a+"] undefined in .playAnimation()")};THREE.MorphBlendMesh.prototype.stopAnimation=function(a){if(a=this.animationsMap[a])a.active=!1};THREE.MorphBlendMesh.prototype.update=function(a){for(var b=0,c=this.animationsList.length;bd.duration||0>d.time)d.direction*=-1,d.time>d.duration&&(d.time=d.duration,d.directionBackwards=!0),0>d.time&&(d.time=0,d.directionBackwards=!1)}else d.time%=d.duration,0>d.time&&(d.time+=d.duration);var f=d.start+THREE.Math.clamp(Math.floor(d.time/e),0,d.length-1),g=d.weight;f!==d.currentFrame&&(this.morphTargetInfluences[d.lastFrame]=0,this.morphTargetInfluences[d.currentFrame]=1*g,this.morphTargetInfluences[f]=0,d.lastFrame=d.currentFrame,d.currentFrame=f);e=d.time%e/e;d.directionBackwards&&(e=1-e);d.currentFrame!==d.lastFrame?(this.morphTargetInfluences[d.currentFrame]=e*g,this.morphTargetInfluences[d.lastFrame]=(1-e)*g):this.morphTargetInfluences[d.currentFrame]=g}}};var THREEx=THREEx||{};THREEx.FullScreen=THREEx.FullScreen||{};THREEx.FullScreen.available=function(){return this._hasWebkitFullScreen||this._hasMozFullScreen};THREEx.FullScreen.activated=function(){if(this._hasWebkitFullScreen){return document.webkitIsFullScreen}else if(this._hasMozFullScreen){return document.mozFullScreen}else{console.assert(false)}};THREEx.FullScreen.request=function(element){element=element||document.body;if(this._hasWebkitFullScreen){element.webkitRequestFullScreen()}else if(this._hasMozFullScreen){element.mozRequestFullScreen()}else{console.assert(false)}};THREEx.FullScreen.cancel=function(){if(this._hasWebkitFullScreen){document.webkitCancelFullScreen()}else if(this._hasMozFullScreen){document.mozCancelFullScreen()}else{console.assert(false)}};THREEx.FullScreen._hasWebkitFullScreen="webkitCancelFullScreen"in document?true:false;THREEx.FullScreen._hasMozFullScreen="mozCancelFullScreen"in document?true:false;THREE.OrbitControls=function(object,domElement){this.object=object;this.domElement=domElement!==undefined?domElement:document;this.enabled=true;this.target=new THREE.Vector3;this.minDistance=0;this.maxDistance=Infinity;this.minZoom=0;this.maxZoom=Infinity;this.minPolarAngle=0;this.maxPolarAngle=Math.PI;this.minAzimuthAngle=-Infinity;this.maxAzimuthAngle=Infinity;this.enableDamping=false;this.dampingFactor=.25;this.enableZoom=true;this.zoomSpeed=1;this.enableRotate=true;this.rotateSpeed=1;this.enablePan=true;this.keyPanSpeed=7;this.autoRotate=false;this.autoRotateSpeed=2;this.enableKeys=true;this.keys={LEFT:37,UP:38,RIGHT:39,BOTTOM:40};this.mouseButtons={ORBIT:THREE.MOUSE.LEFT,ZOOM:THREE.MOUSE.MIDDLE, -PAN:THREE.MOUSE.RIGHT};this.target0=this.target.clone();this.position0=this.object.position.clone();this.zoom0=this.object.zoom;this.getPolarAngle=function(){return phi};this.getAzimuthalAngle=function(){return theta};this.reset=function(){scope.target.copy(scope.target0);scope.object.position.copy(scope.position0);scope.object.zoom=scope.zoom0;scope.object.updateProjectionMatrix();scope.dispatchEvent(changeEvent);scope.update();state=STATE.NONE};this.update=function(){var offset=new THREE.Vector3;var quat=(new THREE.Quaternion).setFromUnitVectors(object.up,new THREE.Vector3(0,1,0));var quatInverse=quat.clone().inverse();var lastPosition=new THREE.Vector3;var lastQuaternion=new THREE.Quaternion;return function(){var position=scope.object.position;offset.copy(position).sub(scope.target);offset.applyQuaternion(quat);spherical.setFromVector3(offset);if(scope.autoRotate&&state===STATE.NONE){rotateLeft(getAutoRotationAngle())}spherical.theta+=sphericalDelta.theta;spherical.phi+=sphericalDelta.phi;spherical.theta=Math.max(scope.minAzimuthAngle,Math.min(scope.maxAzimuthAngle,spherical.theta));spherical.phi=Math.max(scope.minPolarAngle,Math.min(scope.maxPolarAngle,spherical.phi));spherical.makeSafe();spherical.radius*=scale;spherical.radius=Math.max(scope.minDistance,Math.min(scope.maxDistance,spherical.radius));scope.target.add(panOffset);offset.setFromSpherical(spherical);offset.applyQuaternion(quatInverse);position.copy(scope.target).add(offset);scope.object.lookAt(scope.target);if(scope.enableDamping===true){sphericalDelta.theta*=1-scope.dampingFactor;sphericalDelta.phi*=1-scope.dampingFactor}else{sphericalDelta.set(0,0,0)}scale=1;panOffset.set(0,0,0);if(zoomChanged||lastPosition.distanceToSquared(scope.object.position)>EPS||8*(1-lastQuaternion.dot(scope.object.quaternion))>EPS){scope.dispatchEvent(changeEvent);lastPosition.copy(scope.object.position);lastQuaternion.copy(scope.object.quaternion);zoomChanged=false;return true}return false}}();this.dispose=function(){scope.domElement.removeEventListener("contextmenu",onContextMenu,false);scope.domElement.removeEventListener("mousedown",onMouseDown,false);scope.domElement.removeEventListener("mousewheel",onMouseWheel,false);scope.domElement.removeEventListener("MozMousePixelScroll",onMouseWheel,false);scope.domElement.removeEventListener("touchstart",onTouchStart,false);scope.domElement.removeEventListener("touchend",onTouchEnd,false);scope.domElement.removeEventListener("touchmove",onTouchMove,false);document.removeEventListener("mousemove",onMouseMove,false);document.removeEventListener("mouseup",onMouseUp,false);document.removeEventListener("mouseout",onMouseUp,false);window.removeEventListener("keydown",onKeyDown,false)};var scope=this;var changeEvent={type:"change"};var startEvent={type:"start"};var endEvent={type:"end"};var STATE={NONE:-1,ROTATE:0,DOLLY:1,PAN:2,TOUCH_ROTATE:3,TOUCH_DOLLY:4,TOUCH_PAN:5};var state=STATE.NONE;var EPS=1e-6;var spherical=new THREE.Spherical;var sphericalDelta=new THREE.Spherical;var scale=1;var panOffset=new THREE.Vector3;var zoomChanged=false;var rotateStart=new THREE.Vector2;var rotateEnd=new THREE.Vector2;var rotateDelta=new THREE.Vector2;var panStart=new THREE.Vector2;var panEnd=new THREE.Vector2;var panDelta=new THREE.Vector2;var dollyStart=new THREE.Vector2;var dollyEnd=new THREE.Vector2;var dollyDelta=new THREE.Vector2;function getAutoRotationAngle(){return 2*Math.PI/60/60*scope.autoRotateSpeed}function getZoomScale(){return Math.pow(.95,scope.zoomSpeed)}function rotateLeft(angle){sphericalDelta.theta-=angle}function rotateUp(angle){sphericalDelta.phi-=angle}var panLeft=function(){var v=new THREE.Vector3;return function panLeft(distance,objectMatrix){v.setFromMatrixColumn(objectMatrix,0);v.multiplyScalar(-distance);panOffset.add(v)}}();var panUp=function(){var v=new THREE.Vector3;return function panUp(distance,objectMatrix){v.setFromMatrixColumn(objectMatrix,1);v.multiplyScalar(distance);panOffset.add(v)}}();var pan=function(){var offset=new THREE.Vector3;return function(deltaX,deltaY){var element=scope.domElement===document?scope.domElement.body:scope.domElement;if(scope.object instanceof THREE.PerspectiveCamera){var position=scope.object.position;offset.copy(position).sub(scope.target);var targetDistance=offset.length();targetDistance*=Math.tan(scope.object.fov/2*Math.PI/180);panLeft(2*deltaX*targetDistance/element.clientHeight,scope.object.matrix);panUp(2*deltaY*targetDistance/element.clientHeight,scope.object.matrix)}else if(scope.object instanceof THREE.OrthographicCamera){panLeft(deltaX*(scope.object.right-scope.object.left)/scope.object.zoom/element.clientWidth,scope.object.matrix);panUp(deltaY*(scope.object.top-scope.object.bottom)/scope.object.zoom/element.clientHeight,scope.object.matrix)}else{console.warn("WARNING: OrbitControls.js encountered an unknown camera type - pan disabled.");scope.enablePan=false}}}();function dollyIn(dollyScale){if(scope.object instanceof THREE.PerspectiveCamera){scale/=dollyScale}else if(scope.object instanceof THREE.OrthographicCamera){scope.object.zoom=Math.max(scope.minZoom,Math.min(scope.maxZoom,scope.object.zoom*dollyScale));scope.object.updateProjectionMatrix();zoomChanged=true}else{console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.");scope.enableZoom=false}}function dollyOut(dollyScale){if(scope.object instanceof THREE.PerspectiveCamera){scale*=dollyScale}else if(scope.object instanceof THREE.OrthographicCamera){scope.object.zoom=Math.max(scope.minZoom,Math.min(scope.maxZoom,scope.object.zoom/dollyScale));scope.object.updateProjectionMatrix();zoomChanged=true}else{console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.");scope.enableZoom=false}}function handleMouseDownRotate(event){rotateStart.set(event.clientX,event.clientY)}function handleMouseDownDolly(event){dollyStart.set(event.clientX,event.clientY)}function handleMouseDownPan(event){panStart.set(event.clientX,event.clientY)}function handleMouseMoveRotate(event){rotateEnd.set(event.clientX,event.clientY);rotateDelta.subVectors(rotateEnd,rotateStart);var element=scope.domElement===document?scope.domElement.body:scope.domElement;rotateLeft(2*Math.PI*rotateDelta.x/element.clientWidth*scope.rotateSpeed);rotateUp(2*Math.PI*rotateDelta.y/element.clientHeight*scope.rotateSpeed);rotateStart.copy(rotateEnd);scope.update()}function handleMouseMoveDolly(event){dollyEnd.set(event.clientX,event.clientY);dollyDelta.subVectors(dollyEnd,dollyStart);if(dollyDelta.y>0){dollyIn(getZoomScale())}else if(dollyDelta.y<0){dollyOut(getZoomScale())}dollyStart.copy(dollyEnd);scope.update()}function handleMouseMovePan(event){panEnd.set(event.clientX,event.clientY);panDelta.subVectors(panEnd,panStart);pan(panDelta.x,panDelta.y);panStart.copy(panEnd);scope.update()}function handleMouseUp(event){}function handleMouseWheel(event){var delta=0;if(event.wheelDelta!==undefined){delta=event.wheelDelta}else if(event.detail!==undefined){delta=-event.detail}if(delta>0){dollyOut(getZoomScale())}else if(delta<0){dollyIn(getZoomScale())}scope.update()}function handleKeyDown(event){switch(event.keyCode){case scope.keys.UP:pan(0,scope.keyPanSpeed);scope.update();break;case scope.keys.BOTTOM:pan(0,-scope.keyPanSpeed);scope.update();break;case scope.keys.LEFT:pan(scope.keyPanSpeed,0);scope.update();break;case scope.keys.RIGHT:pan(-scope.keyPanSpeed,0);scope.update();break}}function handleTouchStartRotate(event){rotateStart.set(event.touches[0].pageX,event.touches[0].pageY)}function handleTouchStartDolly(event){var dx=event.touches[0].pageX-event.touches[1].pageX;var dy=event.touches[0].pageY-event.touches[1].pageY;var distance=Math.sqrt(dx*dx+dy*dy);dollyStart.set(0,distance)}function handleTouchStartPan(event){panStart.set(event.touches[0].pageX,event.touches[0].pageY)}function handleTouchMoveRotate(event){rotateEnd.set(event.touches[0].pageX,event.touches[0].pageY);rotateDelta.subVectors(rotateEnd,rotateStart);var element=scope.domElement===document?scope.domElement.body:scope.domElement;rotateLeft(2*Math.PI*rotateDelta.x/element.clientWidth*scope.rotateSpeed);rotateUp(2*Math.PI*rotateDelta.y/element.clientHeight*scope.rotateSpeed);rotateStart.copy(rotateEnd);scope.update()}function handleTouchMoveDolly(event){var dx=event.touches[0].pageX-event.touches[1].pageX;var dy=event.touches[0].pageY-event.touches[1].pageY;var distance=Math.sqrt(dx*dx+dy*dy);dollyEnd.set(0,distance);dollyDelta.subVectors(dollyEnd,dollyStart);if(dollyDelta.y>0){dollyOut(getZoomScale())}else if(dollyDelta.y<0){dollyIn(getZoomScale())}dollyStart.copy(dollyEnd);scope.update()}function handleTouchMovePan(event){panEnd.set(event.touches[0].pageX,event.touches[0].pageY);panDelta.subVectors(panEnd,panStart);pan(panDelta.x,panDelta.y);panStart.copy(panEnd);scope.update()}function handleTouchEnd(event){}function onMouseDown(event){if(scope.enabled===false)return;event.preventDefault();if(event.button===scope.mouseButtons.ORBIT){if(scope.enableRotate===false)return;handleMouseDownRotate(event);state=STATE.ROTATE}else if(event.button===scope.mouseButtons.ZOOM){if(scope.enableZoom===false)return;handleMouseDownDolly(event);state=STATE.DOLLY}else if(event.button===scope.mouseButtons.PAN){if(scope.enablePan===false)return;handleMouseDownPan(event);state=STATE.PAN}if(state!==STATE.NONE){document.addEventListener("mousemove",onMouseMove,false);document.addEventListener("mouseup",onMouseUp,false);document.addEventListener("mouseout",onMouseUp,false);scope.dispatchEvent(startEvent)}}function onMouseMove(event){if(scope.enabled===false)return;event.preventDefault();if(state===STATE.ROTATE){if(scope.enableRotate===false)return;handleMouseMoveRotate(event)}else if(state===STATE.DOLLY){if(scope.enableZoom===false)return;handleMouseMoveDolly(event)}else if(state===STATE.PAN){if(scope.enablePan===false)return;handleMouseMovePan(event)}}function onMouseUp(event){if(scope.enabled===false)return;handleMouseUp(event);document.removeEventListener("mousemove",onMouseMove,false);document.removeEventListener("mouseup",onMouseUp,false);document.removeEventListener("mouseout",onMouseUp,false);scope.dispatchEvent(endEvent);state=STATE.NONE}function onMouseWheel(event){if(scope.enabled===false||scope.enableZoom===false||state!==STATE.NONE)return;event.preventDefault();event.stopPropagation();handleMouseWheel(event);scope.dispatchEvent(startEvent);scope.dispatchEvent(endEvent)}function onKeyDown(event){if(scope.enabled===false||scope.enableKeys===false||scope.enablePan===false)return;handleKeyDown(event)}function onTouchStart(event){if(scope.enabled===false)return;switch(event.touches.length){case 1:if(scope.enableRotate===false)return;handleTouchStartRotate(event);state=STATE.TOUCH_ROTATE;break;case 2:if(scope.enableZoom===false)return;handleTouchStartDolly(event);state=STATE.TOUCH_DOLLY;break;case 3:if(scope.enablePan===false)return;handleTouchStartPan(event);state=STATE.TOUCH_PAN;break;default:state=STATE.NONE}if(state!==STATE.NONE){scope.dispatchEvent(startEvent)}}function onTouchMove(event){if(scope.enabled===false)return;event.preventDefault();event.stopPropagation();switch(event.touches.length){case 1:if(scope.enableRotate===false)return;if(state!==STATE.TOUCH_ROTATE)return;handleTouchMoveRotate(event);break;case 2:if(scope.enableZoom===false)return;if(state!==STATE.TOUCH_DOLLY)return;handleTouchMoveDolly(event);break;case 3:if(scope.enablePan===false)return;if(state!==STATE.TOUCH_PAN)return;handleTouchMovePan(event);break;default:state=STATE.NONE}}function onTouchEnd(event){if(scope.enabled===false)return;handleTouchEnd(event);scope.dispatchEvent(endEvent);state=STATE.NONE}function onContextMenu(event){event.preventDefault()}scope.domElement.addEventListener("contextmenu",onContextMenu,false);scope.domElement.addEventListener("mousedown",onMouseDown,false);scope.domElement.addEventListener("mousewheel",onMouseWheel,false);scope.domElement.addEventListener("MozMousePixelScroll",onMouseWheel,false);scope.domElement.addEventListener("touchstart",onTouchStart,false);scope.domElement.addEventListener("touchend",onTouchEnd,false);scope.domElement.addEventListener("touchmove",onTouchMove,false);window.addEventListener("keydown",onKeyDown,false);this.update()};THREE.OrbitControls.prototype=Object.create(THREE.EventDispatcher.prototype);THREE.OrbitControls.prototype.constructor=THREE.OrbitControls;Object.defineProperties(THREE.OrbitControls.prototype,{center:{get:function(){console.warn("THREE.OrbitControls: .center has been renamed to .target");return this.target}},noZoom:{get:function(){console.warn("THREE.OrbitControls: .noZoom has been deprecated. Use .enableZoom instead.");return!this.enableZoom},set:function(value){console.warn("THREE.OrbitControls: .noZoom has been deprecated. Use .enableZoom instead.");this.enableZoom=!value}},noRotate:{get:function(){console.warn("THREE.OrbitControls: .noRotate has been deprecated. Use .enableRotate instead.");return!this.enableRotate},set:function(value){console.warn("THREE.OrbitControls: .noRotate has been deprecated. Use .enableRotate instead.");this.enableRotate=!value}},noPan:{get:function(){console.warn("THREE.OrbitControls: .noPan has been deprecated. Use .enablePan instead.");return!this.enablePan},set:function(value){console.warn("THREE.OrbitControls: .noPan has been deprecated. Use .enablePan instead.");this.enablePan=!value}},noKeys:{get:function(){console.warn("THREE.OrbitControls: .noKeys has been deprecated. Use .enableKeys instead.");return!this.enableKeys},set:function(value){console.warn("THREE.OrbitControls: .noKeys has been deprecated. Use .enableKeys instead.");this.enableKeys=!value}},staticMoving:{get:function(){console.warn("THREE.OrbitControls: .staticMoving has been deprecated. Use .enableDamping instead.");return!this.constraint.enableDamping},set:function(value){console.warn("THREE.OrbitControls: .staticMoving has been deprecated. Use .enableDamping instead.");this.constraint.enableDamping=!value}},dynamicDampingFactor:{get:function(){console.warn("THREE.OrbitControls: .dynamicDampingFactor has been renamed. Use .dampingFactor instead.");return this.constraint.dampingFactor},set:function(value){console.warn("THREE.OrbitControls: .dynamicDampingFactor has been renamed. Use .dampingFactor instead.");this.constraint.dampingFactor=value}}});"use strict";void 0===Date.now&&(Date.now=function(){return(new Date).valueOf()});var TWEEN=TWEEN||function(){var a=[];return{REVISION:"14",getAll:function(){return a},removeAll:function(){a=[]},add:function(c){a.push(c)},remove:function(c){c=a.indexOf(c);-1!==c&&a.splice(c,1)},update:function(c){if(0===a.length)return!1;for(var b=0,c=void 0!==c?c:"undefined"!==typeof window&&void 0!==window.performance&&void 0!==window.performance.now?window.performance.now():Date.now();b(a*=2)?.5*a*a:-.5*(--a*(a-2)-1)}},Cubic:{In:function(a){return a*a*a},Out:function(a){return--a*a*a+1},InOut:function(a){return 1>(a*=2)?.5*a*a*a:.5*((a-=2)*a*a+2)}},Quartic:{In:function(a){return a*a*a*a},Out:function(a){return 1- --a*a*a*a},InOut:function(a){return 1>(a*=2)?.5*a*a*a*a:-.5*((a-=2)*a*a*a-2)}},Quintic:{In:function(a){return a*a*a*a*a},Out:function(a){return--a*a*a*a*a+1},InOut:function(a){return 1>(a*=2)?.5*a*a*a*a*a:.5*((a-=2)*a*a*a*a+2)}},Sinusoidal:{In:function(a){return 1-Math.cos(a*Math.PI/2)},Out:function(a){return Math.sin(a*Math.PI/2)},InOut:function(a){return.5*(1-Math.cos(Math.PI*a))}},Exponential:{In:function(a){return 0===a?0:Math.pow(1024,a-1)},Out:function(a){return 1===a?1:1-Math.pow(2,-10*a)},InOut:function(a){return 0===a?0:1===a?1:1>(a*=2)?.5*Math.pow(1024,a-1):.5*(-Math.pow(2,-10*(a-1))+2)}},Circular:{In:function(a){return 1-Math.sqrt(1-a*a)},Out:function(a){return Math.sqrt(1- --a*a)},InOut:function(a){return 1>(a*=2)?-.5*(Math.sqrt(1-a*a)-1):.5*(Math.sqrt(1-(a-=2)*a)+1)}},Elastic:{In:function(a){var c,b=.1;if(0===a)return 0;if(1===a)return 1;!b||1>b?(b=1,c=.1):c=.4*Math.asin(1/b)/(2*Math.PI);return-(b*Math.pow(2,10*(a-=1))*Math.sin((a-c)*2*Math.PI/.4))},Out:function(a){var c,b=.1;if(0===a)return 0;if(1===a)return 1;!b||1>b?(b=1,c=.1):c=.4*Math.asin(1/b)/(2*Math.PI);return b*Math.pow(2,-10*a)*Math.sin((a-c)*2*Math.PI/.4)+1},InOut:function(a){var c,b=.1;if(0===a)return 0;if(1===a)return 1;!b||1>b?(b=1,c=.1):c=.4*Math.asin(1/b)/(2*Math.PI);return 1>(a*=2)?-.5*b*Math.pow(2,10*(a-=1))*Math.sin((a-c)*2*Math.PI/.4):.5*b*Math.pow(2,-10*(a-=1))*Math.sin((a-c)*2*Math.PI/.4)+1}},Back:{In:function(a){return a*a*(2.70158*a-1.70158)},Out:function(a){return--a*a*(2.70158*a+1.70158)+1},InOut:function(a){return 1>(a*=2)?.5*a*a*(3.5949095*a-2.5949095):.5*((a-=2)*a*(3.5949095*a+2.5949095)+2)}},Bounce:{In:function(a){return 1-TWEEN.Easing.Bounce.Out(1-a)},Out:function(a){return a<1/2.75?7.5625*a*a:a<2/2.75?7.5625*(a-=1.5/2.75)*a+.75:a<2.5/2.75?7.5625*(a-=2.25/2.75)*a+.9375:7.5625*(a-=2.625/2.75)*a+.984375},InOut:function(a){return.5>a?.5*TWEEN.Easing.Bounce.In(2*a):.5*TWEEN.Easing.Bounce.Out(2*a-1)+.5}}};TWEEN.Interpolation={Linear:function(a,c){var b=a.length-1,d=b*c,e=Math.floor(d),g=TWEEN.Interpolation.Utils.Linear;return 0>c?g(a[0],a[1],d):1b?b:e+1],d-e)},Bezier:function(a,c){var b=0,d=a.length-1,e=Math.pow,g=TWEEN.Interpolation.Utils.Bernstein,h;for(h=0;h<=d;h++)b+=e(1-c,d-h)*e(c,h)*a[h]*g(d,h);return b},CatmullRom:function(a,c){var b=a.length-1,d=b*c,e=Math.floor(d),g=TWEEN.Interpolation.Utils.CatmullRom;return a[0]===a[b]?(0>c&&(e=Math.floor(d=b*(1+c))),g(a[(e-1+b)%b],a[e],a[(e+1)%b],a[(e+2)%b],d-e)):0>c?a[0]-(g(a[0],a[0],a[1],a[1],-d)-a[0]):1this.__max&&(a=this.__max);void 0!==this.__step&&0!=a%this.__step&&(a=Math.round(a/this.__step)*this.__step);return e.superclass.prototype.setValue.call(this,a)},min:function(a){this.__min=a;return this},max:function(a){this.__max=a;return this},step:function(a){this.__impliedStep=this.__step=a;this.__precision=d(a);return this}});return e}(dat.controllers.Controller,dat.utils.common);dat.controllers.NumberControllerBox=function(f,a,d){var e=function(c,b,f){function q(){var a=parseFloat(n.__input.value);d.isNaN(a)||n.setValue(a)}function l(a){var b=u-a.clientY;n.setValue(n.getValue()+b*n.__impliedStep);u=a.clientY}function r(){a.unbind(window,"mousemove",l);a.unbind(window,"mouseup",r)}this.__truncationSuspended=!1;e.superclass.call(this,c,b,f);var n=this,u;this.__input=document.createElement("input");this.__input.setAttribute("type","text");a.bind(this.__input,"change",q);a.bind(this.__input,"blur",function(){q();n.__onFinishChange&&n.__onFinishChange.call(n,n.getValue())});a.bind(this.__input,"mousedown",function(b){a.bind(window,"mousemove",l);a.bind(window,"mouseup",r);u=b.clientY});a.bind(this.__input,"keydown",function(a){13===a.keyCode&&(n.__truncationSuspended=!0,this.blur(),n.__truncationSuspended=!1)});this.updateDisplay();this.domElement.appendChild(this.__input)};e.superclass=f;d.extend(e.prototype,f.prototype,{updateDisplay:function(){var a=this.__input,b;if(this.__truncationSuspended)b=this.getValue();else{b=this.getValue();var d=Math.pow(10,this.__precision);b=Math.round(b*d)/d}a.value=b;return e.superclass.prototype.updateDisplay.call(this)}});return e}(dat.controllers.NumberController,dat.dom.dom,dat.utils.common);dat.controllers.NumberControllerSlider=function(f,a,d,e,c){function b(a,b,c,e,d){return e+(a-b)/(c-b)*(d-e)}var p=function(c,e,d,f,u){function A(c){c.preventDefault();var e=a.getOffset(k.__background),d=a.getWidth(k.__background);k.setValue(b(c.clientX,e.left,e.left+d,k.__min,k.__max));return!1}function g(){a.unbind(window,"mousemove",A);a.unbind(window,"mouseup",g);k.__onFinishChange&&k.__onFinishChange.call(k,k.getValue())}p.superclass.call(this,c,e,{min:d,max:f,step:u});var k=this;this.__background=document.createElement("div");this.__foreground=document.createElement("div");a.bind(this.__background,"mousedown",function(b){a.bind(window,"mousemove",A);a.bind(window,"mouseup",g);A(b)});a.addClass(this.__background,"slider");a.addClass(this.__foreground,"slider-fg");this.updateDisplay();this.__background.appendChild(this.__foreground);this.domElement.appendChild(this.__background)};p.superclass=f;p.useDefaultStyles=function(){d.inject(c)};e.extend(p.prototype,f.prototype,{updateDisplay:function(){var a=(this.getValue()-this.__min)/(this.__max-this.__min);this.__foreground.style.width=100*a+"%";return p.superclass.prototype.updateDisplay.call(this)}});return p}(dat.controllers.NumberController,dat.dom.dom,dat.utils.css,dat.utils.common,"/**\n * dat-gui JavaScript Controller Library\n * http://code.google.com/p/dat-gui\n *\n * Copyright 2011 Data Arts Team, Google Creative Lab\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n */\n\n.slider {\n box-shadow: inset 0 2px 4px rgba(0,0,0,0.15);\n height: 1em;\n border-radius: 1em;\n background-color: #eee;\n padding: 0 0.5em;\n overflow: hidden;\n}\n\n.slider-fg {\n padding: 1px 0 2px 0;\n background-color: #aaa;\n height: 1em;\n margin-left: -0.5em;\n padding-right: 0.5em;\n border-radius: 1em 0 0 1em;\n}\n\n.slider-fg:after {\n display: inline-block;\n border-radius: 1em;\n background-color: #fff;\n border: 1px solid #aaa;\n content: '';\n float: right;\n margin-right: -1em;\n margin-top: -1px;\n height: 0.9em;\n width: 0.9em;\n}");dat.controllers.FunctionController=function(f,a,d){var e=function(c,b,d){e.superclass.call(this,c,b);var f=this;this.__button=document.createElement("div");this.__button.innerHTML=void 0===d?"Fire":d;a.bind(this.__button,"click",function(a){a.preventDefault();f.fire();return!1});a.addClass(this.__button,"button");this.domElement.appendChild(this.__button)};e.superclass=f;d.extend(e.prototype,f.prototype,{fire:function(){this.__onChange&&this.__onChange.call(this);this.getValue().call(this.object);this.__onFinishChange&&this.__onFinishChange.call(this,this.getValue())}});return e}(dat.controllers.Controller,dat.dom.dom,dat.utils.common);dat.controllers.BooleanController=function(f,a,d){var e=function(c,b){e.superclass.call(this,c,b);var d=this;this.__prev=this.getValue();this.__checkbox=document.createElement("input");this.__checkbox.setAttribute("type","checkbox");a.bind(this.__checkbox,"change",function(){d.setValue(!d.__prev)},!1);this.domElement.appendChild(this.__checkbox);this.updateDisplay()};e.superclass=f;d.extend(e.prototype,f.prototype,{setValue:function(a){a=e.superclass.prototype.setValue.call(this,a);this.__onFinishChange&&this.__onFinishChange.call(this,this.getValue());this.__prev=this.getValue();return a},updateDisplay:function(){!0===this.getValue()?(this.__checkbox.setAttribute("checked","checked"),this.__checkbox.checked=!0):this.__checkbox.checked=!1;return e.superclass.prototype.updateDisplay.call(this)}});return e; + temperatureString: function(value){ + if(!value){return "NA"} + return numeral(value).format('0,000') + "°C" + }, -}(dat.controllers.Controller,dat.dom.dom,dat.utils.common);dat.color.toString=function(f){return function(a){if(1==a.a||f.isUndefined(a.a)){for(a=a.hex.toString(16);6>a.length;)a="0"+a;return"#"+a}return"rgba("+Math.round(a.r)+","+Math.round(a.g)+","+Math.round(a.b)+","+a.a+")"}}(dat.utils.common);dat.color.interpret=function(f,a){var d,e,c=[{litmus:a.isString,conversions:{THREE_CHAR_HEX:{read:function(a){a=a.match(/^#([A-F0-9])([A-F0-9])([A-F0-9])$/i);return null===a?!1:{space:"HEX",hex:parseInt("0x"+a[1].toString()+a[1].toString()+a[2].toString()+a[2].toString()+a[3].toString()+a[3].toString())}},write:f},SIX_CHAR_HEX:{read:function(a){a=a.match(/^#([A-F0-9]{6})$/i);return null===a?!1:{space:"HEX",hex:parseInt("0x"+a[1].toString())}},write:f},CSS_RGB:{read:function(a){a=a.match(/^rgb\(\s*(.+)\s*,\s*(.+)\s*,\s*(.+)\s*\)/);return null===a?!1:{space:"RGB",r:parseFloat(a[1]),g:parseFloat(a[2]),b:parseFloat(a[3])}},write:f},CSS_RGBA:{read:function(a){a=a.match(/^rgba\(\s*(.+)\s*,\s*(.+)\s*,\s*(.+)\s*\,\s*(.+)\s*\)/);return null===a?!1:{space:"RGB",r:parseFloat(a[1]),g:parseFloat(a[2]),b:parseFloat(a[3]),a:parseFloat(a[4])}},write:f}}},{litmus:a.isNumber,conversions:{HEX:{read:function(a){return{space:"HEX",hex:a,conversionName:"HEX"}},write:function(a){return a.hex}}}},{litmus:a.isArray,conversions:{RGB_ARRAY:{read:function(a){return 3!=a.length?!1:{space:"RGB",r:a[0],g:a[1],b:a[2]}},write:function(a){return[a.r,a.g,a.b]}},RGBA_ARRAY:{read:function(a){return 4!=a.length?!1:{space:"RGB",r:a[0],g:a[1],b:a[2],a:a[3]}},write:function(a){return[a.r,a.g,a.b,a.a]}}}},{litmus:a.isObject,conversions:{RGBA_OBJ:{read:function(b){return a.isNumber(b.r)&&a.isNumber(b.g)&&a.isNumber(b.b)&&a.isNumber(b.a)?{space:"RGB",r:b.r,g:b.g,b:b.b,a:b.a}:!1},write:function(a){return{r:a.r,g:a.g,b:a.b,a:a.a}}},RGB_OBJ:{read:function(b){return a.isNumber(b.r)&&a.isNumber(b.g)&&a.isNumber(b.b)?{space:"RGB",r:b.r,g:b.g,b:b.b}:!1},write:function(a){return{r:a.r,g:a.g,b:a.b}}},HSVA_OBJ:{read:function(b){return a.isNumber(b.h)&&a.isNumber(b.s)&&a.isNumber(b.v)&&a.isNumber(b.a)?{space:"HSV",h:b.h,s:b.s,v:b.v,a:b.a}:!1},write:function(a){return{h:a.h,s:a.s,v:a.v,a:a.a}}},HSV_OBJ:{read:function(b){return a.isNumber(b.h)&&a.isNumber(b.s)&&a.isNumber(b.v)?{space:"HSV",h:b.h,s:b.s,v:b.v}:!1},write:function(a){return{h:a.h,s:a.s,v:a.v}}}}}];return function(){e=!1;var b=1\n\n Here\'s the new load parameter for your GUI\'s constructor:\n\n \n\n
    \n\n Automatically save\n values to localStorage on exit.\n\n
    The values saved to localStorage will\n override those passed to dat.GUI\'s constructor. This makes it\n easier to work incrementally, but localStorage is fragile,\n and your friends may not see the same values you do.\n \n
    \n \n
    \n\n
    ',".dg {\n /** Clear list styles */\n /* Auto-place container */\n /* Auto-placed GUI's */\n /* Line items that don't contain folders. */\n /** Folder names */\n /** Hides closed items */\n /** Controller row */\n /** Name-half (left) */\n /** Controller-half (right) */\n /** Controller placement */\n /** Shorter number boxes when slider is present. */\n /** Ensure the entire boolean and function row shows a hand */ }\n .dg ul {\n list-style: none;\n margin: 0;\n padding: 0;\n width: 100%;\n clear: both; }\n .dg.ac {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n height: 0;\n z-index: 0; }\n .dg:not(.ac) .main {\n /** Exclude mains in ac so that we don't hide close button */\n overflow: hidden; }\n .dg.main {\n -webkit-transition: opacity 0.1s linear;\n -o-transition: opacity 0.1s linear;\n -moz-transition: opacity 0.1s linear;\n transition: opacity 0.1s linear; }\n .dg.main.taller-than-window {\n overflow-y: auto; }\n .dg.main.taller-than-window .close-button {\n opacity: 1;\n /* TODO, these are style notes */\n margin-top: -1px;\n border-top: 1px solid #2c2c2c; }\n .dg.main ul.closed .close-button {\n opacity: 1 !important; }\n .dg.main:hover .close-button,\n .dg.main .close-button.drag {\n opacity: 1; }\n .dg.main .close-button {\n /*opacity: 0;*/\n -webkit-transition: opacity 0.1s linear;\n -o-transition: opacity 0.1s linear;\n -moz-transition: opacity 0.1s linear;\n transition: opacity 0.1s linear;\n border: 0;\n position: absolute;\n line-height: 19px;\n height: 20px;\n /* TODO, these are style notes */\n cursor: pointer;\n text-align: center;\n background-color: #000; }\n .dg.main .close-button:hover {\n background-color: #111; }\n .dg.a {\n float: right;\n margin-right: 15px;\n overflow-x: hidden; }\n .dg.a.has-save > ul {\n margin-top: 27px; }\n .dg.a.has-save > ul.closed {\n margin-top: 0; }\n .dg.a .save-row {\n position: fixed;\n top: 0;\n z-index: 1002; }\n .dg li {\n -webkit-transition: height 0.1s ease-out;\n -o-transition: height 0.1s ease-out;\n -moz-transition: height 0.1s ease-out;\n transition: height 0.1s ease-out; }\n .dg li:not(.folder) {\n cursor: auto;\n height: 27px;\n line-height: 27px;\n overflow: hidden;\n padding: 0 4px 0 5px; }\n .dg li.folder {\n padding: 0;\n border-left: 4px solid rgba(0, 0, 0, 0); }\n .dg li.title {\n cursor: pointer;\n margin-left: -4px; }\n .dg .closed li:not(.title),\n .dg .closed ul li,\n .dg .closed ul li > * {\n height: 0;\n overflow: hidden;\n border: 0; }\n .dg .cr {\n clear: both;\n padding-left: 3px;\n height: 27px; }\n .dg .property-name {\n cursor: default;\n float: left;\n clear: left;\n width: 40%;\n overflow: hidden;\n text-overflow: ellipsis; }\n .dg .c {\n float: left;\n width: 60%; }\n .dg .c input[type=text] {\n border: 0;\n margin-top: 4px;\n padding: 3px;\n width: 100%;\n float: right; }\n .dg .has-slider input[type=text] {\n width: 30%;\n /*display: none;*/\n margin-left: 0; }\n .dg .slider {\n float: left;\n width: 66%;\n margin-left: -5px;\n margin-right: 0;\n height: 19px;\n margin-top: 4px; }\n .dg .slider-fg {\n height: 100%; }\n .dg .c input[type=checkbox] {\n margin-top: 9px; }\n .dg .c select {\n margin-top: 5px; }\n .dg .cr.function,\n .dg .cr.function .property-name,\n .dg .cr.function *,\n .dg .cr.boolean,\n .dg .cr.boolean * {\n cursor: pointer; }\n .dg .selector {\n display: none;\n position: absolute;\n margin-left: -9px;\n margin-top: 23px;\n z-index: 10; }\n .dg .c:hover .selector,\n .dg .selector.drag {\n display: block; }\n .dg li.save-row {\n padding: 0; }\n .dg li.save-row .button {\n display: inline-block;\n padding: 0px 6px; }\n .dg.dialogue {\n background-color: #222;\n width: 460px;\n padding: 15px;\n font-size: 13px;\n line-height: 15px; }\n\n/* TODO Separate style and structure */\n#dg-new-constructor {\n padding: 10px;\n color: #222;\n font-family: Monaco, monospace;\n font-size: 10px;\n border: 0;\n resize: none;\n box-shadow: inset 1px 1px 1px #888;\n word-wrap: break-word;\n margin: 12px 0;\n display: block;\n width: 440px;\n overflow-y: scroll;\n height: 100px;\n position: relative; }\n\n#dg-local-explain {\n display: none;\n font-size: 11px;\n line-height: 17px;\n border-radius: 3px;\n background-color: #333;\n padding: 8px;\n margin-top: 10px; }\n #dg-local-explain code {\n font-size: 10px; }\n\n#dat-gui-save-locally {\n display: none; }\n\n/** Main type */\n.dg {\n color: #eee;\n font: 11px 'Lucida Grande', sans-serif;\n text-shadow: 0 -1px 0 #111;\n /** Auto place */\n /* Controller row,
  • */\n /** Controllers */ }\n .dg.main {\n /** Scrollbar */ }\n .dg.main::-webkit-scrollbar {\n width: 5px;\n background: #1a1a1a; }\n .dg.main::-webkit-scrollbar-corner {\n height: 0;\n display: none; }\n .dg.main::-webkit-scrollbar-thumb {\n border-radius: 5px;\n background: #676767; }\n .dg li:not(.folder) {\n background: #1a1a1a;\n border-bottom: 1px solid #2c2c2c; }\n .dg li.save-row {\n line-height: 25px;\n background: #dad5cb;\n border: 0; }\n .dg li.save-row select {\n margin-left: 5px;\n width: 108px; }\n .dg li.save-row .button {\n margin-left: 5px;\n margin-top: 1px;\n border-radius: 2px;\n font-size: 9px;\n line-height: 7px;\n padding: 4px 4px 5px 4px;\n background: #c5bdad;\n color: #fff;\n text-shadow: 0 1px 0 #b0a58f;\n box-shadow: 0 -1px 0 #b0a58f;\n cursor: pointer; }\n .dg li.save-row .button.gears {\n background: #c5bdad url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAANCAYAAAB/9ZQ7AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAQJJREFUeNpiYKAU/P//PwGIC/ApCABiBSAW+I8AClAcgKxQ4T9hoMAEUrxx2QSGN6+egDX+/vWT4e7N82AMYoPAx/evwWoYoSYbACX2s7KxCxzcsezDh3evFoDEBYTEEqycggWAzA9AuUSQQgeYPa9fPv6/YWm/Acx5IPb7ty/fw+QZblw67vDs8R0YHyQhgObx+yAJkBqmG5dPPDh1aPOGR/eugW0G4vlIoTIfyFcA+QekhhHJhPdQxbiAIguMBTQZrPD7108M6roWYDFQiIAAv6Aow/1bFwXgis+f2LUAynwoIaNcz8XNx3Dl7MEJUDGQpx9gtQ8YCueB+D26OECAAQDadt7e46D42QAAAABJRU5ErkJggg==) 2px 1px no-repeat;\n height: 7px;\n width: 8px; }\n .dg li.save-row .button:hover {\n background-color: #bab19e;\n box-shadow: 0 -1px 0 #b0a58f; }\n .dg li.folder {\n border-bottom: 0; }\n .dg li.title {\n padding-left: 16px;\n background: black url(data:image/gif;base64,R0lGODlhBQAFAJEAAP////Pz8////////yH5BAEAAAIALAAAAAAFAAUAAAIIlI+hKgFxoCgAOw==) 6px 10px no-repeat;\n cursor: pointer;\n border-bottom: 1px solid rgba(255, 255, 255, 0.2); }\n .dg .closed li.title {\n background-image: url(data:image/gif;base64,R0lGODlhBQAFAJEAAP////Pz8////////yH5BAEAAAIALAAAAAAFAAUAAAIIlGIWqMCbWAEAOw==); }\n .dg .cr.boolean {\n border-left: 3px solid #806787; }\n .dg .cr.function {\n border-left: 3px solid #e61d5f; }\n .dg .cr.number {\n border-left: 3px solid #2fa1d6; }\n .dg .cr.number input[type=text] {\n color: #2fa1d6; }\n .dg .cr.string {\n border-left: 3px solid #1ed36f; }\n .dg .cr.string input[type=text] {\n color: #1ed36f; }\n .dg .cr.function:hover, .dg .cr.boolean:hover {\n background: #111; }\n .dg .c input[type=text] {\n background: #303030;\n outline: none; }\n .dg .c input[type=text]:hover {\n background: #3c3c3c; }\n .dg .c input[type=text]:focus {\n background: #494949;\n color: #fff; }\n .dg .c .slider {\n background: #303030;\n cursor: ew-resize; }\n .dg .c .slider-fg {\n background: #2fa1d6; }\n .dg .c .slider:hover {\n background: #3c3c3c; }\n .dg .c .slider:hover .slider-fg {\n background: #44abda; }\n",dat.controllers.factory=function(f,a,d,e,c,b,p){return function(q,l,r,n){var u=q[l];if(p.isArray(r)||p.isObject(r))return new f(q,l,r);if(p.isNumber(u))return p.isNumber(r)&&p.isNumber(n)?new d(q,l,r,n):new a(q,l,{min:r,max:n});if(p.isString(u))return new e(q,l);if(p.isFunction(u))return new c(q,l,"");if(p.isBoolean(u))return new b(q,l)}}(dat.controllers.OptionController,dat.controllers.NumberControllerBox,dat.controllers.NumberControllerSlider,dat.controllers.StringController=function(f,a,d){var e=function(c,b){function d(){f.setValue(f.__input.value)}e.superclass.call(this,c,b);var f=this;this.__input=document.createElement("input");this.__input.setAttribute("type","text");a.bind(this.__input,"keyup",d);a.bind(this.__input,"change",d);a.bind(this.__input,"blur",function(){f.__onFinishChange&&f.__onFinishChange.call(f,f.getValue())});a.bind(this.__input,"keydown",function(a){13===a.keyCode&&this.blur()});this.updateDisplay();this.domElement.appendChild(this.__input)};e.superclass=f;d.extend(e.prototype,f.prototype,{updateDisplay:function(){a.isActive(this.__input)||(this.__input.value=this.getValue());return e.superclass.prototype.updateDisplay.call(this)}});return e}(dat.controllers.Controller,dat.dom.dom,dat.utils.common),dat.controllers.FunctionController,dat.controllers.BooleanController,dat.utils.common),dat.controllers.Controller,dat.controllers.BooleanController,dat.controllers.FunctionController,dat.controllers.NumberControllerBox,dat.controllers.NumberControllerSlider,dat.controllers.OptionController,dat.controllers.ColorController=function(f,a,d,e,c){function b(a,b,d,e){a.style.background="";c.each(l,function(c){a.style.cssText+="background: "+c+"linear-gradient("+b+", "+d+" 0%, "+e+" 100%); "})}function p(a){a.style.background="";a.style.cssText+="background: -moz-linear-gradient(top, #ff0000 0%, #ff00ff 17%, #0000ff 34%, #00ffff 50%, #00ff00 67%, #ffff00 84%, #ff0000 100%);";a.style.cssText+="background: -webkit-linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);";a.style.cssText+="background: -o-linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);";a.style.cssText+="background: -ms-linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);";a.style.cssText+="background: linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);"}var q=function(f,n){function u(b){v(b);a.bind(window,"mousemove",v);a.bind(window,"mouseup",l)}function l(){a.unbind(window,"mousemove",v);a.unbind(window,"mouseup",l)}function g(){var a=e(this.value);!1!==a?(t.__color.__state=a,t.setValue(t.__color.toOriginal())):this.value=t.__color.toString()}function k(){a.unbind(window,"mousemove",w);a.unbind(window,"mouseup",k)}function v(b){b.preventDefault();var c=a.getWidth(t.__saturation_field),d=a.getOffset(t.__saturation_field),e=(b.clientX-d.left+document.body.scrollLeft)/c;b=1-(b.clientY-d.top+document.body.scrollTop)/c;1b&&(b=0);1e&&(e=0);t.__color.v=b;t.__color.s=e;t.setValue(t.__color.toOriginal());return!1}function w(b){b.preventDefault();var c=a.getHeight(t.__hue_field),d=a.getOffset(t.__hue_field);b=1-(b.clientY-d.top+document.body.scrollTop)/c;1b&&(b=0);t.__color.h=360*b;t.setValue(t.__color.toOriginal());return!1}q.superclass.call(this,f,n);this.__color=new d(this.getValue());this.__temp=new d(0);var t=this;this.domElement=document.createElement("div");a.makeSelectable(this.domElement,!1);this.__selector=document.createElement("div");this.__selector.className="selector";this.__saturation_field=document.createElement("div");this.__saturation_field.className="saturation-field";this.__field_knob=document.createElement("div");this.__field_knob.className="field-knob";this.__field_knob_border="2px solid ";this.__hue_knob=document.createElement("div");this.__hue_knob.className="hue-knob";this.__hue_field=document.createElement("div");this.__hue_field.className="hue-field";this.__input=document.createElement("input");this.__input.type="text";this.__input_textShadow="0 1px 1px ";a.bind(this.__input,"keydown",function(a){13===a.keyCode&&g.call(this)});a.bind(this.__input,"blur",g);a.bind(this.__selector,"mousedown",function(b){a.addClass(this,"drag").bind(window,"mouseup",function(b){a.removeClass(t.__selector,"drag")})});var y=document.createElement("div");c.extend(this.__selector.style,{width:"122px",height:"102px",padding:"3px",backgroundColor:"#222",boxShadow:"0px 1px 3px rgba(0,0,0,0.3)"});c.extend(this.__field_knob.style,{position:"absolute",width:"12px",height:"12px",border:this.__field_knob_border+(.5>this.__color.v?"#fff":"#000"),boxShadow:"0px 1px 3px rgba(0,0,0,0.5)",borderRadius:"12px",zIndex:1});c.extend(this.__hue_knob.style,{position:"absolute",width:"15px",height:"2px",borderRight:"4px solid #fff",zIndex:1});c.extend(this.__saturation_field.style,{width:"100px",height:"100px",border:"1px solid #555",marginRight:"3px",display:"inline-block",cursor:"pointer"});c.extend(y.style,{width:"100%",height:"100%",background:"none"});b(y,"top","rgba(0,0,0,0)","#000");c.extend(this.__hue_field.style,{width:"15px",height:"100px",display:"inline-block",border:"1px solid #555",cursor:"ns-resize"});p(this.__hue_field);c.extend(this.__input.style,{outline:"none",textAlign:"center",color:"#fff",border:0,fontWeight:"bold",textShadow:this.__input_textShadow+"rgba(0,0,0,0.7)"});a.bind(this.__saturation_field,"mousedown",u);a.bind(this.__field_knob,"mousedown",u);a.bind(this.__hue_field,"mousedown",function(b){w(b);a.bind(window,"mousemove",w);a.bind(window,"mouseup",k)});this.__saturation_field.appendChild(y);this.__selector.appendChild(this.__field_knob);this.__selector.appendChild(this.__saturation_field);this.__selector.appendChild(this.__hue_field);this.__hue_field.appendChild(this.__hue_knob);this.domElement.appendChild(this.__input);this.domElement.appendChild(this.__selector);this.updateDisplay()};q.superclass=f;c.extend(q.prototype,f.prototype,{updateDisplay:function(){var a=e(this.getValue());if(!1!==a){var f=!1;c.each(d.COMPONENTS,function(b){if(!c.isUndefined(a[b])&&!c.isUndefined(this.__color.__state[b])&&a[b]!==this.__color.__state[b])return f=!0,{}},this);f&&c.extend(this.__color.__state,a)}c.extend(this.__temp.__state,this.__color.__state);this.__temp.a=1;var l=.5>this.__color.v||.5a&&(a+=1);return{h:360*a,s:c/b,v:b/255}},rgb_to_hex:function(a,d,e){a=this.hex_with_component(0,2,a);a=this.hex_with_component(a,1,d);return a=this.hex_with_component(a,0,e)},component_from_hex:function(a,d){return a>>8*d&255},hex_with_component:function(a,d,e){return e<<(f=8*d)|a&~(255<0){this.buildRelativePositionRequestsForOrbitPatches(requestParams,"targetCurrentOrbit",positionData["tar.o.orbitPatches"],positionData["currentUniversalTime"],"tar.o");requestParams["targetCurrentPositionRelativePosition"]="tar.o.relativePositionAtUTForOrbitPatch["+0+","+positionData["currentUniversalTime"]+"]"}else{var body=this.datalink.getOrbitalBodyInfo(positionData["tar.name"]);requestParams[body.name+"[metadata]radius"]="b.radius["+body.id+"]";requestParams[body.name+"["+positionData["currentUniversalTime"]+"]TruePosition"]="b.o.truePositionAtUT["+body.id+","+positionData["currentUniversalTime"]+"]";requestParams[body.name+"[metadata]currentTruePosition"]="b.o.truePositionAtUT["+body.id+","+positionData["currentUniversalTime"]+"]"}}this.datalink.sendMessage(requestParams,function(data){positionData["currentReferenceBodyRadius"]=data["currentReferenceBodyRadius"];positionData["currentReferenceBodyTruePosition"]=data["currentReferenceBodyTruePosition"];this.buildReferenceBodyPositionData(data,positionData);this.buildReferenceBodyMetadata(data,positionData);positionData["vesselCurrentPosition"]["relativePosition"]=data["vesselCurrentPositionRelativePosition"];this.buildRelativePositionPositionDataForOrbitPatches(data,positionData,"vesselCurrentOrbit","o.orbitPatches");if(positionData["o.maneuverNodes"]){this.buildRelativePositionPositionDataForManeuverNodeOrbitPatches(data,positionData,"vesselManeuverNodes","o.maneuverNodes")}if(positionData["tar.o.orbitPatches"]){this.buildRelativePositionPositionDataForOrbitPatches(data,positionData,"targetCurrentOrbit","tar.o.orbitPatches","tar.o");positionData["targetCurrentPosition"]["relativePosition"]=data["targetCurrentPositionRelativePosition"]}this.mutexUnlock();this.options.onRecalculate&&this.options.onRecalculate(positionData)}.bind(this))},buildRelativePositionRequestsForOrbitPatches:function(requestParams,orbitPatchType,orbitPatches,currentUniversalTime,requestPrefix){requestPrefix=requestPrefix||"o";for(var i=0;iendUT){UTForInterval=endUT}requestParams[this.rootReferenceBody.name+"["+UTForInterval+"]TruePosition"]="b.o.truePositionAtUT["+this.rootReferenceBody.id+","+UTForInterval+"]";requestParams[orbitPatchType+"["+i+"]["+UTForInterval+"]RelativePosition"]=requestPrefix+".relativePositionAtUTForOrbitPatch["+i+","+UTForInterval+"]";requestParams[orbitPatch["referenceBody"]+"["+UTForInterval+"]TruePosition"]="b.o.truePositionAtUT["+referenceBody.id+","+UTForInterval+"]"}requestParams[orbitPatch["referenceBody"]+"[metadata]radius"]="b.radius["+referenceBody.id+"]";requestParams[orbitPatch["referenceBody"]+"[metadata]currentTruePosition"]="b.o.truePositionAtUT["+referenceBody.id+","+currentUniversalTime+"]"}},buildRelativePositionRequestsForManeuverNodeOrbitPatches:function(requestParams,maneuverNodeType,maneuverNodes,currentUniversalTime){var requestPrefix="o.maneuverNodes.relativePositionAtUTForManeuverNodesOrbitPatch";for(var i=0;iendUT){UTForInterval=endUT}var args=[i,j,UTForInterval];requestParams[this.rootReferenceBody.name+"["+UTForInterval+"]TruePosition"]="b.o.truePositionAtUT["+this.rootReferenceBody.id+","+UTForInterval+"]";requestParams[labelPrefix+"["+j+"]["+UTForInterval+"]RelativePosition"]=requestPrefix+"["+args.join(",")+"]";requestParams[orbitPatch["referenceBody"]+"["+UTForInterval+"]TruePosition"]="b.o.truePositionAtUT["+referenceBody.id+","+UTForInterval+"]"}requestParams[orbitPatch["referenceBody"]+"[metadata]radius"]="b.radius["+referenceBody.id+"]";requestParams[orbitPatch["referenceBody"]+"[metadata]currentTruePosition"]="b.o.truePositionAtUT["+referenceBody.id+","+currentUniversalTime+"]"}}},buildRelativePositionPositionDataForOrbitPatches:function(rawData,positionData,orbitPatchType,orbitPatchesKey){var relativePositionFieldRegex=new RegExp(orbitPatchType+"\\[(\\d+)\\]\\[([\\d\\.]+)\\]RelativePosition");var orbitPatches=positionData[orbitPatchesKey]=positionData[orbitPatchesKey]||{};var rawDataKeys=Object.keys(rawData);for(var i=rawDataKeys.length-1;i>=0;i--){var key=rawDataKeys[i];if(relativePositionFieldRegex.test(key)){var matchParts=relativePositionFieldRegex.exec(key);var orbitPatchIndex=parseInt(matchParts[1]);var universalTime=matchParts[2];var relativePosition=rawData[key];var orbitPatch=orbitPatches[orbitPatchIndex]=orbitPatches[orbitPatchIndex]||{};var orbitPatchPositionData=orbitPatch["positionData"]=orbitPatch["positionData"]||{};orbitPatchPositionData[universalTime]=orbitPatchPositionData[universalTime]||{};orbitPatchPositionData[universalTime]["relativePosition"]=relativePosition}}},buildRelativePositionPositionDataForManeuverNodeOrbitPatches:function(rawData,positionData,maneuverNodeType,maneuverNodesKey){var relativePositionFieldRegex=new RegExp(maneuverNodeType+"\\[(\\d+)\\]\\[(\\d+)\\]\\[([\\d\\.]+)\\]RelativePosition");var maneuverNodes=positionData[maneuverNodesKey]=positionData[maneuverNodesKey]||{};var rawDataKeys=Object.keys(rawData);for(var i=rawDataKeys.length-1;i>=0;i--){var key=rawDataKeys[i];if(relativePositionFieldRegex.test(key)){var matchParts=relativePositionFieldRegex.exec(key);var maneuverNodeIndex=parseInt(matchParts[1]);var orbitPatchIndex=parseInt(matchParts[2]);var universalTime=matchParts[3];var relativePosition=rawData[key];var orbitPatch=maneuverNodes[maneuverNodeIndex]["orbitPatches"][orbitPatchIndex]=maneuverNodes[maneuverNodeIndex]["orbitPatches"][orbitPatchIndex]||{};var orbitPatchPositionData=orbitPatch["positionData"]=orbitPatch["positionData"]||{};orbitPatchPositionData[universalTime]=orbitPatchPositionData[universalTime]||{};orbitPatchPositionData[universalTime]["relativePosition"]=relativePosition}}},buildReferenceBodyPositionData:function(rawData,positionData){var referenceBodyTruePositionRegex=new RegExp(/(\w+)\[([\d\.]+)\]TruePosition$/);var rawDataKeys=Object.keys(rawData);for(var i=rawDataKeys.length-1;i>=0;i--){var key=rawDataKeys[i];if(referenceBodyTruePositionRegex.test(key)){var matchParts=referenceBodyTruePositionRegex.exec(key);var referenceBodyName=matchParts[1];var universalTime=matchParts[2];var truePosition=rawData[key];var referenceBodies=positionData["referenceBodies"]=positionData["referenceBodies"]||{};var referenceBodyObject=referenceBodies[referenceBodyName]=referenceBodies[referenceBodyName]||{};referenceBodyObject["positionData"]=referenceBodyObject["positionData"]||{};referenceBodyObject["positionData"][universalTime]=referenceBodyObject["positionData"][universalTime]||{};referenceBodyObject["positionData"][universalTime]["truePosition"]=truePosition}}},buildReferenceBodyMetadata:function(rawData,positionData){var referenceBodyTruePositionRegex=new RegExp(/(\w+)\[metadata\](\w+)$/);var rawDataKeys=Object.keys(rawData);for(var i=rawDataKeys.length-1;i>=0;i--){var key=rawDataKeys[i];if(referenceBodyTruePositionRegex.test(key)){var matchParts=referenceBodyTruePositionRegex.exec(key);var referenceBodyName=matchParts[1];var field=matchParts[2];var data=rawData[key];var referenceBodies=positionData["referenceBodies"]=positionData["referenceBodies"]||{};var referenceBodyObject=referenceBodies[referenceBodyName]=referenceBodies[referenceBodyName]||{};referenceBodyObject[field]=data}}},adjustUniversalTime:function(ut){return ut},initializeDatalink:function(){this.datalink.subscribeToData(["o.orbitPatches","t.universalTime","v.body","tar.name","tar.type","tar.o.orbitingBody","tar.o.orbitPatches","o.maneuverNodes"]);this.datalink.addReceiverFunction(this.recalculate.bind(this))}});var PositionDataFormatter=Class.create({initialize:function(orbitalPositionData,datalink,options){this.datalink=datalink;this.orbitalPositionData=orbitalPositionData;this.orbitalPositionData.options.onRecalculate=this.format.bind(this);this.rootReferenceBodyName=null;this.options=Object.extend({onFormat:null,numberOfSegments:120},options)},format:function(positionData){var formattedData={referenceBodies:[],vessels:[],orbitPatches:[],maneuverNodes:[],referenceBodyPaths:[],distancesFromRootReferenceBody:[],currentUniversalTime:positionData.currentUniversalTime};this.formatReferenceBodies(positionData,formattedData);this.formatCurrentVessel(positionData,formattedData);this.formatTargetVessel(positionData,formattedData);this.formatOrbitalPatches(positionData,formattedData);this.formatManeuverNodes(positionData,formattedData);this.formatTargetOrbitPatches(positionData,formattedData);this.formatReferenceBodyPaths(positionData,formattedData);this.options.onFormat&&this.options.onFormat(formattedData)},formatReferenceBodies:function(positionData,formattedData){referenceBodyNames=Object.keys(positionData.referenceBodies);for(var i=referenceBodyNames.length-1;i>=0;i--){var name=referenceBodyNames[i];var info=positionData.referenceBodies[name];var type="currentPosition";if(positionData["tar.type"]=="CelestialBody"&&positionData["tar.name"]==name){type="targetBodyCurrentPosition"}var x=this.buildReferenceBody({name:name,type:type,radius:info.radius,truePosition:this.formatTruePositionVector(info.currentTruePosition),atmosphericRadius:this.datalink.getOrbitalBodyInfo(name).atmosphericRadius,color:this.datalink.getOrbitalBodyInfo(name).color});formattedData["referenceBodies"].push(x)}},formatReferenceBodyPaths:function(positionData,formattedData){referenceBodyNames=Object.keys(positionData.referenceBodies);for(var i=referenceBodyNames.length-1;i>=0;i--){var name=referenceBodyNames[i];var info=positionData.referenceBodies[name];var positionDataKeys=Object.keys(info.positionData);var sortedUniversalTimes=positionDataKeys.map(function(x){return parseFloat(x)}).reverse();var positions=[];for(var j=0;j=0;i--){var name=referenceBodyNames[i];if(name==this.rootReferenceBodyName){continue}var body=positionData.referenceBodies[name];var sortedUniversalTimes=this.sortedUniversalTimes(body.positionData);var renderPoints=[sortedUniversalTimes.first(),sortedUniversalTimes.last(),sortedUniversalTimes[59]];for(var j=0;j0){formattedData.orbitPatches=formattedData.orbitPatches.concat(this.formatOrbitPatches(formattedData,positionData,positionData["tar.o.orbitPatches"],{type:"orbitPatch",parentType:"targetVessel",parentName:positionData["tar.name"]},{linkedPatchType:"orbitPatch"}))}},formatOrbitalPatches:function(positionData,formattedData){formattedData.orbitPatches=this.formatOrbitPatches(formattedData,positionData,positionData["o.orbitPatches"],{type:"orbitPatch",parentType:"vessel",parentName:"current vessel"},{linkedPatchType:"orbitPatch"})},formatManeuverNodes:function(positionData,formattedData){for(var i=0;i=0;i--){var info=formattedData.referenceBodies[i];if(info.color){var color=info.color}else{var color=this.colors[i]}var radius=info.radius*this.referenceBodyScaleFactor;if(info.name=="Sun"){color="yellow"}if(info.type=="currentPosition"){var material=new THREE.MeshBasicMaterial({color:color,wireframe:false})}else if(info.type=="targetBodyCurrentPosition"){var material=new THREE.MeshBasicMaterial({color:this.targetColor,wireframe:false});radius=radius*1.2}else{if(info.name!="Sun"){if(info.linkedPatchType=="maneuverNode"){color=this.orbitPathColors[info.linkedPatchID]}else{color=this.orbitPathColors[info.linkedPatchID]}}var material=new THREE.MeshBasicMaterial({color:color,wireframe:true})}var sphereGeometry=new THREE.SphereGeometry(radius,20,20);var sphere=new THREE.Mesh(sphereGeometry,material);this.setPosition(sphere,info.truePosition);this.group.add(sphere);if(info.atmosphericRadius>0){var customMaterial=new THREE.ShaderMaterial({uniforms:{c:{type:"f",value:1},p:{type:"f",value:1.5},glowColor:{type:"c",value:new THREE.Color("white")},viewVector:{type:"v3",value:this.camera&&this.camera.position||sphere.position}},vertexShader:document.getElementById("vertexShader").textContent,fragmentShader:document.getElementById("fragmentShader").textContent,side:THREE.FrontSide,blending:THREE.AdditiveBlending,transparent:true});var atmoGeometry=new THREE.SphereGeometry((info.radius+info.atmosphericRadius)*this.referenceBodyScaleFactor,20,20);atmo=new THREE.Mesh(atmoGeometry,customMaterial);this.setPosition(atmo,info.truePosition);this.group.add(atmo)}}},buildVesselGeometry:function(formattedData){for(var i=formattedData.vessels.length-1;i>=0;i--){var info=formattedData.vessels[i];if(info.type=="currentVessel"){var materials=[new THREE.MeshBasicMaterial({color:"white",wireframe:false}),new THREE.MeshBasicMaterial({color:"grey",wireframe:true})]}else{var materials=[new THREE.MeshBasicMaterial({color:this.targetColor,wireframe:false}),new THREE.MeshBasicMaterial({color:"grey",wireframe:true})]}var length=this.vehicleLength;var geometry=new THREE.BoxGeometry(length,length,length);var cube=THREE.SceneUtils.createMultiMaterialObject(geometry,materials);if(info.type=="currentVessel"){this.currentVesselGeometry=cube}this.setPosition(cube,info.truePosition);this.group.add(cube)}},buildOrbitPathGeometry:function(formattedData){for(var i=formattedData.orbitPatches.length-1;i>=0;i--){var points=formattedData.orbitPatches[i].truePositions.map(function(x){return this.buildVector(x)}.bind(this));if(formattedData.orbitPatches[i].parentType=="targetVessel"){var color=this.targetColor}else{var color=this.orbitPathColors[i]}var geometry=this.buildCurveGeometryFromPoints(points);var material=new THREE.LineBasicMaterial({color:color,linewidth:3});var spline=new THREE.Line(geometry,material);this.group.add(spline)}},buildManeuverNodeGeometry:function(formattedData){for(var i=formattedData.maneuverNodes.length-1;i>=0;i--){var maneuverNode=formattedData.maneuverNodes[i];for(var j=maneuverNode.orbitPatches.length-1;j>=0;j--){ -var orbitPatch=maneuverNode.orbitPatches[j];var points=orbitPatch.truePositions.map(function(x){return this.buildVector(x)}.bind(this));var geometry=this.buildCurveGeometryFromPoints(points);geometry.computeBoundingBox();var dashSize=geometry.boundingBox.size().x/Math.ceil(geometry.boundingBox.size().x/this.dashedLineLength);var material=new THREE.LineDashedMaterial({color:this.orbitPathColors[j],dashSize:dashSize,gapSize:dashSize,linewidth:3});var spline=new THREE.Line(geometry,material);this.group.add(spline)}}},buildReferenceBodyOrbitPaths:function(formattedData){for(var i=formattedData.referenceBodyPaths.length-1;i>=0;i--){var points=formattedData.referenceBodyPaths[i].truePositions.map(function(x){return this.buildVector(x)}.bind(this));var material=new THREE.LineBasicMaterial({color:"white",linewidth:formattedData.referenceBodies[0].radius*.1});var geometry=this.buildCurveGeometryFromPoints(points);var spline=new THREE.Line(geometry,material);this.group.add(spline)}},buildDistancesFromRootReferenceBodyPaths:function(formattedData){var colors=["teal","magenta","purple","green","blue","red"];for(var i=formattedData.distancesFromRootReferenceBody.length-1;i>=0;i--){var points=formattedData.distancesFromRootReferenceBody[i].truePositions.map(function(x){return this.buildVector(x)}.bind(this));var material=new THREE.LineBasicMaterial({color:colors[i],linewidth:formattedData.referenceBodies[0].radius*.1});var spline=this.buildSplineWithMaterial(points,material);this.group.add(spline)}},positionCamera:function(){var boundingBox=(new THREE.Box3).setFromObject(this.group);var scaleFactor=Math.max(this.maxLengthInThreeJS/boundingBox.max.x,this.maxLengthInThreeJS/boundingBox.max.y,this.maxLengthInThreeJS/boundingBox.max.z);this.group.scale.set(scaleFactor,scaleFactor,scaleFactor);var boundingBox=(new THREE.Box3).setFromObject(this.group);var vector=this.currentVesselGeometry.position.clone();vector.multiplyScalar(scaleFactor);var axisHelper=new THREE.AxisHelper(this.vehicleLength*3*scaleFactor);axisHelper.position.set(vector.x,vector.y,vector.z);axisHelper.rotation=this.currentVesselGeometry.rotation;this.scene.add(axisHelper);var cameraX=vector.x+this.vehicleLength*this.defaultZoomFactor*scaleFactor;var cameraY=vector.y+this.vehicleLength*this.defaultZoomFactor*scaleFactor;var cameraZ=vector.z+this.vehicleLength*this.defaultZoomFactor*scaleFactor;if(!this.camera){this.camera=new THREE.PerspectiveCamera(75,window.innerWidth/window.innerHeight,.1,Number.MAX_SAFE_INTEGER)}if(!this.controls){this.controls=new THREE.OrbitControls(this.camera,this.renderer.domElement);this.controls.addEventListener("change",function(){this.renderer.render(this.scene,this.camera)}.bind(this))}if(!this.cameraSet){this.controls.target=vector;this.camera.position.set(cameraX,cameraY,cameraZ);this.camera.lookAt(vector);this.cameraSet=true}else{this.controls.target0=vector.clone();this.controls.position0=new THREE.Vector3(cameraX,cameraY,cameraZ)}this.controls.maxDistance=Math.max(Math.abs(boundingBox.min.x)+Math.abs(boundingBox.max.x),Math.abs(boundingBox.min.y)+Math.abs(boundingBox.max.y),Math.abs(boundingBox.min.z)+Math.abs(boundingBox.max.z))*2;this.controls.minDistance=this.vehicleLength*scaleFactor},resetPosition:function(){this.controls.reset()},getMiddle:function(min,max){return min+(Math.abs(min)+Math.abs(max))/2},setPosition:function(mesh,vector){var vector=this.buildVector(vector);mesh.position.x=vector.x;mesh.position.y=vector.y;mesh.position.z=vector.z},buildVector:function(vector){return new THREE.Vector3(vector[0]*this.distanceScaleFactor,vector[1]*this.distanceScaleFactor,vector[2]*this.distanceScaleFactor)},buildCurveGeometryFromPoints:function(points){var curve=new THREE.CatmullRomCurve3(points);var geometry=new THREE.Geometry;geometry.vertices=curve.getPoints(360);geometry.computeLineDistances();return geometry},render:function(formattedData){requestAnimationFrame(function(){this.buildScene();this.buildGeometry(formattedData);this.positionCamera();this.renderer.render(this.scene,this.camera);this.GUIParameters.lastUpdate=TimeFormatters.formatUT(formattedData.currentUniversalTime)}.bind(this))}});(function(root,factory){if(typeof define==="function"&&define.amd){define(factory)}else if(typeof exports==="object"){module.exports=factory()}else{root.ResizeSensor=factory()}})(this,function(){var requestAnimationFrame=window.requestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||function(fn){return window.setTimeout(fn,20)};function forEachElement(elements,callback){var elementsType=Object.prototype.toString.call(elements);var isCollectionTyped="[object Array]"===elementsType||"[object NodeList]"===elementsType||"[object HTMLCollection]"===elementsType||"undefined"!==typeof jQuery&&elements instanceof jQuery||"undefined"!==typeof Elements&&elements instanceof Elements;var i=0,j=elements.length;if(isCollectionTyped){for(;i
  • */\n /** Controllers */ }\n .dg.main {\n /** Scrollbar */ }\n .dg.main::-webkit-scrollbar {\n width: 5px;\n background: #1a1a1a; }\n .dg.main::-webkit-scrollbar-corner {\n height: 0;\n display: none; }\n .dg.main::-webkit-scrollbar-thumb {\n border-radius: 5px;\n background: #676767; }\n .dg li:not(.folder) {\n background: #1a1a1a;\n border-bottom: 1px solid #2c2c2c; }\n .dg li.save-row {\n line-height: 25px;\n background: #dad5cb;\n border: 0; }\n .dg li.save-row select {\n margin-left: 5px;\n width: 108px; }\n .dg li.save-row .button {\n margin-left: 5px;\n margin-top: 1px;\n border-radius: 2px;\n font-size: 9px;\n line-height: 7px;\n padding: 4px 4px 5px 4px;\n background: #c5bdad;\n color: #fff;\n text-shadow: 0 1px 0 #b0a58f;\n box-shadow: 0 -1px 0 #b0a58f;\n cursor: pointer; }\n .dg li.save-row .button.gears {\n background: #c5bdad url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAANCAYAAAB/9ZQ7AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAQJJREFUeNpiYKAU/P//PwGIC/ApCABiBSAW+I8AClAcgKxQ4T9hoMAEUrxx2QSGN6+egDX+/vWT4e7N82AMYoPAx/evwWoYoSYbACX2s7KxCxzcsezDh3evFoDEBYTEEqycggWAzA9AuUSQQgeYPa9fPv6/YWm/Acx5IPb7ty/fw+QZblw67vDs8R0YHyQhgObx+yAJkBqmG5dPPDh1aPOGR/eugW0G4vlIoTIfyFcA+QekhhHJhPdQxbiAIguMBTQZrPD7108M6roWYDFQiIAAv6Aow/1bFwXgis+f2LUAynwoIaNcz8XNx3Dl7MEJUDGQpx9gtQ8YCueB+D26OECAAQDadt7e46D42QAAAABJRU5ErkJggg==) 2px 1px no-repeat;\n height: 7px;\n width: 8px; }\n .dg li.save-row .button:hover {\n background-color: #bab19e;\n box-shadow: 0 -1px 0 #b0a58f; }\n .dg li.folder {\n border-bottom: 0; }\n .dg li.title {\n padding-left: 16px;\n background: black url(data:image/gif;base64,R0lGODlhBQAFAJEAAP////Pz8////////yH5BAEAAAIALAAAAAAFAAUAAAIIlI+hKgFxoCgAOw==) 6px 10px no-repeat;\n cursor: pointer;\n border-bottom: 1px solid rgba(255, 255, 255, 0.2); }\n .dg .closed li.title {\n background-image: url(data:image/gif;base64,R0lGODlhBQAFAJEAAP////Pz8////////yH5BAEAAAIALAAAAAAFAAUAAAIIlGIWqMCbWAEAOw==); }\n .dg .cr.boolean {\n border-left: 3px solid #806787; }\n .dg .cr.function {\n border-left: 3px solid #e61d5f; }\n .dg .cr.number {\n border-left: 3px solid #2fa1d6; }\n .dg .cr.number input[type=text] {\n color: #2fa1d6; }\n .dg .cr.string {\n border-left: 3px solid #1ed36f; }\n .dg .cr.string input[type=text] {\n color: #1ed36f; }\n .dg .cr.function:hover, .dg .cr.boolean:hover {\n background: #111; }\n .dg .c input[type=text] {\n background: #303030;\n outline: none; }\n .dg .c input[type=text]:hover {\n background: #3c3c3c; }\n .dg .c input[type=text]:focus {\n background: #494949;\n color: #fff; }\n .dg .c .slider {\n background: #303030;\n cursor: ew-resize; }\n .dg .c .slider-fg {\n background: #2fa1d6; }\n .dg .c .slider:hover {\n background: #3c3c3c; }\n .dg .c .slider:hover .slider-fg {\n background: #44abda; }\n", +dat.controllers.factory=function(f,a,d,e,c,b,p){return function(q,l,r,n){var u=q[l];if(p.isArray(r)||p.isObject(r))return new f(q,l,r);if(p.isNumber(u))return p.isNumber(r)&&p.isNumber(n)?new d(q,l,r,n):new a(q,l,{min:r,max:n});if(p.isString(u))return new e(q,l);if(p.isFunction(u))return new c(q,l,"");if(p.isBoolean(u))return new b(q,l)}}(dat.controllers.OptionController,dat.controllers.NumberControllerBox,dat.controllers.NumberControllerSlider,dat.controllers.StringController=function(f,a,d){var e= +function(c,b){function d(){f.setValue(f.__input.value)}e.superclass.call(this,c,b);var f=this;this.__input=document.createElement("input");this.__input.setAttribute("type","text");a.bind(this.__input,"keyup",d);a.bind(this.__input,"change",d);a.bind(this.__input,"blur",function(){f.__onFinishChange&&f.__onFinishChange.call(f,f.getValue())});a.bind(this.__input,"keydown",function(a){13===a.keyCode&&this.blur()});this.updateDisplay();this.domElement.appendChild(this.__input)};e.superclass=f;d.extend(e.prototype, +f.prototype,{updateDisplay:function(){a.isActive(this.__input)||(this.__input.value=this.getValue());return e.superclass.prototype.updateDisplay.call(this)}});return e}(dat.controllers.Controller,dat.dom.dom,dat.utils.common),dat.controllers.FunctionController,dat.controllers.BooleanController,dat.utils.common),dat.controllers.Controller,dat.controllers.BooleanController,dat.controllers.FunctionController,dat.controllers.NumberControllerBox,dat.controllers.NumberControllerSlider,dat.controllers.OptionController, +dat.controllers.ColorController=function(f,a,d,e,c){function b(a,b,d,e){a.style.background="";c.each(l,function(c){a.style.cssText+="background: "+c+"linear-gradient("+b+", "+d+" 0%, "+e+" 100%); "})}function p(a){a.style.background="";a.style.cssText+="background: -moz-linear-gradient(top, #ff0000 0%, #ff00ff 17%, #0000ff 34%, #00ffff 50%, #00ff00 67%, #ffff00 84%, #ff0000 100%);";a.style.cssText+="background: -webkit-linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);"; +a.style.cssText+="background: -o-linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);";a.style.cssText+="background: -ms-linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);";a.style.cssText+="background: linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);"}var q=function(f,n){function u(b){v(b);a.bind(window,"mousemove",v);a.bind(window, +"mouseup",l)}function l(){a.unbind(window,"mousemove",v);a.unbind(window,"mouseup",l)}function g(){var a=e(this.value);!1!==a?(t.__color.__state=a,t.setValue(t.__color.toOriginal())):this.value=t.__color.toString()}function k(){a.unbind(window,"mousemove",w);a.unbind(window,"mouseup",k)}function v(b){b.preventDefault();var c=a.getWidth(t.__saturation_field),d=a.getOffset(t.__saturation_field),e=(b.clientX-d.left+document.body.scrollLeft)/c;b=1-(b.clientY-d.top+document.body.scrollTop)/c;1 +b&&(b=0);1e&&(e=0);t.__color.v=b;t.__color.s=e;t.setValue(t.__color.toOriginal());return!1}function w(b){b.preventDefault();var c=a.getHeight(t.__hue_field),d=a.getOffset(t.__hue_field);b=1-(b.clientY-d.top+document.body.scrollTop)/c;1b&&(b=0);t.__color.h=360*b;t.setValue(t.__color.toOriginal());return!1}q.superclass.call(this,f,n);this.__color=new d(this.getValue());this.__temp=new d(0);var t=this;this.domElement=document.createElement("div");a.makeSelectable(this.domElement,!1); +this.__selector=document.createElement("div");this.__selector.className="selector";this.__saturation_field=document.createElement("div");this.__saturation_field.className="saturation-field";this.__field_knob=document.createElement("div");this.__field_knob.className="field-knob";this.__field_knob_border="2px solid ";this.__hue_knob=document.createElement("div");this.__hue_knob.className="hue-knob";this.__hue_field=document.createElement("div");this.__hue_field.className="hue-field";this.__input=document.createElement("input"); +this.__input.type="text";this.__input_textShadow="0 1px 1px ";a.bind(this.__input,"keydown",function(a){13===a.keyCode&&g.call(this)});a.bind(this.__input,"blur",g);a.bind(this.__selector,"mousedown",function(b){a.addClass(this,"drag").bind(window,"mouseup",function(b){a.removeClass(t.__selector,"drag")})});var y=document.createElement("div");c.extend(this.__selector.style,{width:"122px",height:"102px",padding:"3px",backgroundColor:"#222",boxShadow:"0px 1px 3px rgba(0,0,0,0.3)"});c.extend(this.__field_knob.style, +{position:"absolute",width:"12px",height:"12px",border:this.__field_knob_border+(.5>this.__color.v?"#fff":"#000"),boxShadow:"0px 1px 3px rgba(0,0,0,0.5)",borderRadius:"12px",zIndex:1});c.extend(this.__hue_knob.style,{position:"absolute",width:"15px",height:"2px",borderRight:"4px solid #fff",zIndex:1});c.extend(this.__saturation_field.style,{width:"100px",height:"100px",border:"1px solid #555",marginRight:"3px",display:"inline-block",cursor:"pointer"});c.extend(y.style,{width:"100%",height:"100%", +background:"none"});b(y,"top","rgba(0,0,0,0)","#000");c.extend(this.__hue_field.style,{width:"15px",height:"100px",display:"inline-block",border:"1px solid #555",cursor:"ns-resize"});p(this.__hue_field);c.extend(this.__input.style,{outline:"none",textAlign:"center",color:"#fff",border:0,fontWeight:"bold",textShadow:this.__input_textShadow+"rgba(0,0,0,0.7)"});a.bind(this.__saturation_field,"mousedown",u);a.bind(this.__field_knob,"mousedown",u);a.bind(this.__hue_field,"mousedown",function(b){w(b);a.bind(window, +"mousemove",w);a.bind(window,"mouseup",k)});this.__saturation_field.appendChild(y);this.__selector.appendChild(this.__field_knob);this.__selector.appendChild(this.__saturation_field);this.__selector.appendChild(this.__hue_field);this.__hue_field.appendChild(this.__hue_knob);this.domElement.appendChild(this.__input);this.domElement.appendChild(this.__selector);this.updateDisplay()};q.superclass=f;c.extend(q.prototype,f.prototype,{updateDisplay:function(){var a=e(this.getValue());if(!1!==a){var f=!1; +c.each(d.COMPONENTS,function(b){if(!c.isUndefined(a[b])&&!c.isUndefined(this.__color.__state[b])&&a[b]!==this.__color.__state[b])return f=!0,{}},this);f&&c.extend(this.__color.__state,a)}c.extend(this.__temp.__state,this.__color.__state);this.__temp.a=1;var l=.5>this.__color.v||.5a&&(a+=1);return{h:360*a,s:c/b,v:b/255}},rgb_to_hex:function(a,d,e){a=this.hex_with_component(0,2,a);a=this.hex_with_component(a,1,d);return a=this.hex_with_component(a,0,e)},component_from_hex:function(a,d){return a>>8*d&255},hex_with_component:function(a,d,e){return e<<(f=8*d)|a&~(255< 0){ + this.buildRelativePositionRequestsForOrbitPatches(requestParams, "targetCurrentOrbit", positionData['tar.o.orbitPatches'], positionData["currentUniversalTime"], 'tar.o') + requestParams["targetCurrentPositionRelativePosition"] = "tar.o.relativePositionAtUTForOrbitPatch[" + 0 +","+ positionData["currentUniversalTime"] + "]" + } else{ + var body = this.datalink.getOrbitalBodyInfo(positionData['tar.name']) + requestParams[body.name + "[metadata]radius"] = 'b.radius[' + body.id + ']' + requestParams[body.name + "["+ positionData["currentUniversalTime"] +"]TruePosition"] = 'b.o.truePositionAtUT[' + body.id + ',' + positionData["currentUniversalTime"] + ']' + requestParams[body.name + "[metadata]currentTruePosition"] = 'b.o.truePositionAtUT[' + body.id + ',' + positionData["currentUniversalTime"] + ']' + } + } + + this.datalink.sendMessage(requestParams, function(data){ + positionData["currentReferenceBodyRadius"] = data["currentReferenceBodyRadius"] + positionData["currentReferenceBodyTruePosition"] = data["currentReferenceBodyTruePosition"] + + this.buildReferenceBodyPositionData(data, positionData) + this.buildReferenceBodyMetadata(data, positionData) + + positionData["vesselCurrentPosition"]["relativePosition"] = data["vesselCurrentPositionRelativePosition"] + this.buildRelativePositionPositionDataForOrbitPatches(data, positionData, "vesselCurrentOrbit", 'o.orbitPatches') + + if(positionData['o.maneuverNodes']){ + this.buildRelativePositionPositionDataForManeuverNodeOrbitPatches(data, positionData, "vesselManeuverNodes", 'o.maneuverNodes') + } + + if(positionData['tar.o.orbitPatches']){ + this.buildRelativePositionPositionDataForOrbitPatches(data, positionData, "targetCurrentOrbit", 'tar.o.orbitPatches', 'tar.o') + positionData["targetCurrentPosition"]["relativePosition"] = data["targetCurrentPositionRelativePosition"] + } + + this.mutexUnlock() + this.options.onRecalculate && this.options.onRecalculate(positionData) + }.bind(this)) + }, + + buildRelativePositionRequestsForOrbitPatches: function(requestParams, orbitPatchType, orbitPatches, currentUniversalTime, requestPrefix){ + requestPrefix = requestPrefix || 'o' + for (var i = 0; i < orbitPatches.length; i++) { + var orbitPatch = orbitPatches[i] + + // get the start and the end universal times for the patch + var startUT = this.adjustUniversalTime(orbitPatch["startUT"]) + var endUT = this.adjustUniversalTime(orbitPatch["endUT"]) + + //ask for the true position for the current body right now and the radius + var referenceBody = this.datalink.getOrbitalBodyInfo(orbitPatch["referenceBody"]) + + var timeInterval = (endUT-startUT)/this.options.numberOfSegments + var UTForInterval = null + for(var j = 0; j < this.options.numberOfSegments; j++){ + UTForInterval = this.adjustUniversalTime(startUT + (timeInterval * j)) + if(UTForInterval > endUT){ + UTForInterval = endUT + } + + //get the true position of the root reference body at this UT as well + requestParams[this.rootReferenceBody.name + "["+ UTForInterval +"]TruePosition"] = 'b.o.truePositionAtUT[' + this.rootReferenceBody.id + ',' + UTForInterval + ']' + + requestParams[orbitPatchType + "[" + i + "][" + UTForInterval + "]RelativePosition"] = requestPrefix + ".relativePositionAtUTForOrbitPatch[" + i +","+ UTForInterval + "]" + requestParams[orbitPatch["referenceBody"] + "["+ UTForInterval +"]TruePosition"] = 'b.o.truePositionAtUT[' + referenceBody.id + ',' + UTForInterval + ']' + } + + requestParams[orbitPatch["referenceBody"] + "[metadata]radius"] = 'b.radius[' + referenceBody.id + ']' + requestParams[orbitPatch["referenceBody"] + "[metadata]currentTruePosition"] = 'b.o.truePositionAtUT[' + referenceBody.id + ',' + currentUniversalTime + ']' + } + }, + + buildRelativePositionRequestsForManeuverNodeOrbitPatches: function(requestParams, maneuverNodeType, maneuverNodes, currentUniversalTime){ + var requestPrefix = "o.maneuverNodes.relativePositionAtUTForManeuverNodesOrbitPatch" + for (var i = 0; i < maneuverNodes.length; i++) { + var maneuverNode = maneuverNodes[i] + + /* + "apistring": "o.maneuverNodes.relativePositionAtUTForManeuverNodesOrbitPatch", + "name": "For a maneuver node, The orbit patch's True Anomaly at Universal Time [int id, orbit patch index, universal time]", + "units": "DEG", + "plotable": true + */ + + var labelPrefix = maneuverNodeType + "[" + i + "]" + + for (var j = 0; j < maneuverNode['orbitPatches'].length; j++) { + var orbitPatch = maneuverNode['orbitPatches'][j] + + // get the start and the end universal times for the patch + var startUT = this.adjustUniversalTime(orbitPatch["startUT"]) + var endUT = this.adjustUniversalTime(orbitPatch["endUT"]) + var period = this.adjustUniversalTime(orbitPatch["period"]) + var endTransition = this.adjustUniversalTime(orbitPatch["patchEndTransition"]) + + //ask for the true position for the current body right now and the radius + var referenceBody = this.datalink.getOrbitalBodyInfo(orbitPatch["referenceBody"]) + var expectedUT = startUT + period + + if(expectedUT < endUT && endTransition == "MANEUVER"){ + var timeInterval = (expectedUT - startUT)/this.options.numberOfSegments + } else{ + var timeInterval = (endUT-startUT)/this.options.numberOfSegments + } + + var UTForInterval = null + for(var k = 0; k < this.options.numberOfSegments; k++){ + UTForInterval = this.adjustUniversalTime((UTForInterval || startUT) + timeInterval) + if(UTForInterval > endUT){ + UTForInterval = endUT + } + + var args = [i,j,UTForInterval] + + //get the true position of the root reference body at this UT as well + requestParams[this.rootReferenceBody.name + "["+ UTForInterval +"]TruePosition"] = 'b.o.truePositionAtUT[' + this.rootReferenceBody.id + ',' + UTForInterval + ']' + + requestParams[labelPrefix + "[" + j + "][" + UTForInterval + "]RelativePosition"] = requestPrefix + "[" + args.join(',') + "]" + requestParams[orbitPatch["referenceBody"] + "["+ UTForInterval +"]TruePosition"] = 'b.o.truePositionAtUT[' + referenceBody.id + ',' + UTForInterval + ']' + } + + requestParams[orbitPatch["referenceBody"] + "[metadata]radius"] = 'b.radius[' + referenceBody.id + ']' + requestParams[orbitPatch["referenceBody"] + "[metadata]currentTruePosition"] = 'b.o.truePositionAtUT[' + referenceBody.id + ',' + currentUniversalTime + ']' + } + }; + }, + + buildRelativePositionPositionDataForOrbitPatches: function(rawData, positionData, orbitPatchType, orbitPatchesKey){ + var relativePositionFieldRegex = new RegExp(orbitPatchType + "\\[(\\d+)\\]\\[([\\d\\.]+)\\]RelativePosition") + var orbitPatches = positionData[orbitPatchesKey] = positionData[orbitPatchesKey] || {} + + var rawDataKeys = Object.keys(rawData) + for (var i = rawDataKeys.length - 1; i >= 0; i--) { + var key = rawDataKeys[i] + if(relativePositionFieldRegex.test(key)){ + var matchParts = relativePositionFieldRegex.exec(key) + var orbitPatchIndex = parseInt(matchParts[1]) + var universalTime = matchParts[2] + var relativePosition = rawData[key] + + var orbitPatch = orbitPatches[orbitPatchIndex] = orbitPatches[orbitPatchIndex] || {} + var orbitPatchPositionData = orbitPatch["positionData"] = orbitPatch["positionData"] || {} + orbitPatchPositionData[universalTime] = orbitPatchPositionData[universalTime] || {} + orbitPatchPositionData[universalTime]["relativePosition"] = relativePosition + } + }; + }, + + buildRelativePositionPositionDataForManeuverNodeOrbitPatches: function(rawData, positionData, maneuverNodeType, maneuverNodesKey){ + var relativePositionFieldRegex = new RegExp(maneuverNodeType + "\\[(\\d+)\\]\\[(\\d+)\\]\\[([\\d\\.]+)\\]RelativePosition") + var maneuverNodes = positionData[maneuverNodesKey] = positionData[maneuverNodesKey] || {} + + var rawDataKeys = Object.keys(rawData) + for (var i = rawDataKeys.length - 1; i >= 0; i--) { + var key = rawDataKeys[i] + if(relativePositionFieldRegex.test(key)){ + var matchParts = relativePositionFieldRegex.exec(key) + var maneuverNodeIndex = parseInt(matchParts[1]) + var orbitPatchIndex = parseInt(matchParts[2]) + var universalTime = matchParts[3] + var relativePosition = rawData[key] + + var orbitPatch = maneuverNodes[maneuverNodeIndex]['orbitPatches'][orbitPatchIndex] = maneuverNodes[maneuverNodeIndex]['orbitPatches'][orbitPatchIndex] || {} + var orbitPatchPositionData = orbitPatch["positionData"] = orbitPatch["positionData"] || {} + orbitPatchPositionData[universalTime] = orbitPatchPositionData[universalTime] || {} + orbitPatchPositionData[universalTime]["relativePosition"] = relativePosition + } + }; + }, + + buildReferenceBodyPositionData: function(rawData, positionData){ + var referenceBodyTruePositionRegex = new RegExp(/(\w+)\[([\d\.]+)\]TruePosition$/) + + var rawDataKeys = Object.keys(rawData) + for (var i = rawDataKeys.length - 1; i >= 0; i--) { + var key = rawDataKeys[i] + if(referenceBodyTruePositionRegex.test(key)){ + var matchParts = referenceBodyTruePositionRegex.exec(key) + var referenceBodyName = matchParts[1] + var universalTime = matchParts[2] + var truePosition = rawData[key] + + var referenceBodies = positionData["referenceBodies"] = positionData["referenceBodies"] || {} + var referenceBodyObject = referenceBodies[referenceBodyName] = referenceBodies[referenceBodyName] || {} + referenceBodyObject["positionData"] = referenceBodyObject["positionData"] || {} + referenceBodyObject["positionData"][universalTime] = referenceBodyObject["positionData"][universalTime] || {} + referenceBodyObject["positionData"][universalTime]["truePosition"] = truePosition + } + } + }, + + buildReferenceBodyMetadata: function(rawData, positionData){ + var referenceBodyTruePositionRegex = new RegExp(/(\w+)\[metadata\](\w+)$/) + + var rawDataKeys = Object.keys(rawData) + for (var i = rawDataKeys.length - 1; i >= 0; i--) { + var key = rawDataKeys[i] + if(referenceBodyTruePositionRegex.test(key)){ + var matchParts = referenceBodyTruePositionRegex.exec(key) + var referenceBodyName = matchParts[1] + var field = matchParts[2] + var data = rawData[key] + + var referenceBodies = positionData["referenceBodies"] = positionData["referenceBodies"] || {} + var referenceBodyObject = referenceBodies[referenceBodyName] = referenceBodies[referenceBodyName] || {} + referenceBodyObject[field] = data + } + } + }, + + adjustUniversalTime: function(ut){ + return ut//.toFixed(3) + }, + + initializeDatalink: function(){ + this.datalink.subscribeToData([ + 'o.orbitPatches', 't.universalTime', 'v.body', + 'tar.name', 'tar.type', 'tar.o.orbitingBody', + 'tar.o.orbitPatches', 'o.maneuverNodes' + ]) + + this.datalink.addReceiverFunction(this.recalculate.bind(this)) + }, +}) +var PositionDataFormatter = Class.create({ + initialize: function(orbitalPositionData, datalink, options){ + this.datalink = datalink + this.orbitalPositionData = orbitalPositionData; + this.orbitalPositionData.options.onRecalculate = this.format.bind(this) + + this.rootReferenceBodyName = null + + this.options = Object.extend({ + onFormat: null, + numberOfSegments: 120 + }, options) + }, + + format: function(positionData){ + var formattedData = { + "referenceBodies": [], + "vessels": [], + "orbitPatches": [], + "maneuverNodes": [], + "referenceBodyPaths": [], + "distancesFromRootReferenceBody": [], + "currentUniversalTime": positionData.currentUniversalTime + } + + this.formatReferenceBodies(positionData, formattedData) + this.formatCurrentVessel(positionData, formattedData) + this.formatTargetVessel(positionData, formattedData) + this.formatOrbitalPatches(positionData, formattedData) + this.formatManeuverNodes(positionData, formattedData) + this.formatTargetOrbitPatches(positionData, formattedData) + this.formatReferenceBodyPaths(positionData, formattedData) + // this.formatDistancesFromRootReferenceBody(positionData, formattedData) + + this.options.onFormat && this.options.onFormat(formattedData) + }, + + formatReferenceBodies: function(positionData, formattedData){ + referenceBodyNames = Object.keys(positionData.referenceBodies) + + for (var i = referenceBodyNames.length - 1; i >= 0; i--) { + var name = referenceBodyNames[i] + var info = positionData.referenceBodies[name] + var type = "currentPosition" + + if(positionData["tar.type"] == "CelestialBody" && positionData["tar.name"] == name){ + type = "targetBodyCurrentPosition" + } + + var x = this.buildReferenceBody({ + name: name, + type: type, + radius: info.radius, + truePosition: this.formatTruePositionVector(info.currentTruePosition), + atmosphericRadius: this.datalink.getOrbitalBodyInfo(name).atmosphericRadius, + color: this.datalink.getOrbitalBodyInfo(name).color + }) + + formattedData["referenceBodies"].push(x) + } + }, + + formatReferenceBodyPaths: function(positionData, formattedData){ + referenceBodyNames = Object.keys(positionData.referenceBodies) + for (var i = referenceBodyNames.length - 1; i >= 0; i--) { + var name = referenceBodyNames[i] + + // if(name == this.rootReferenceBodyName){ continue; } + var info = positionData.referenceBodies[name] + var positionDataKeys = Object.keys(info.positionData) + var sortedUniversalTimes = positionDataKeys.map(function(x){return parseFloat(x)}).reverse() + + var positions = [] + + for (var j = 0; j < sortedUniversalTimes.length; j++) { + var key = sortedUniversalTimes[j].toString() + + positions.push(this.formatTruePositionVector(info.positionData[key].truePosition)) + } + + var x = this.buildReferenceBodyPath({ + referenceBodyName: name, + truePositions: positions + }) + + formattedData.referenceBodyPaths.push(x) + } + }, + + formatDistancesFromRootReferenceBody: function(positionData, formattedData){ + referenceBodyNames = Object.keys(positionData.referenceBodies) + var rootReferenceBody = positionData.referenceBodies[this.rootReferenceBodyName] + + for (var i = referenceBodyNames.length - 1; i >= 0; i--) { + var name = referenceBodyNames[i] + if(name == this.rootReferenceBodyName){ continue; } + + var body = positionData.referenceBodies[name] + var sortedUniversalTimes = this.sortedUniversalTimes(body.positionData) + + var renderPoints = [sortedUniversalTimes.first(),sortedUniversalTimes.last(), sortedUniversalTimes[59]] + + for (var j = 0; j < renderPoints.length; j++) { + var firstUniversalTime = renderPoints[j] + + var projectedPositionOfReferenceBody = this.findProjectedPositionOfReferenceBody(rootReferenceBody, body, firstUniversalTime) + + var positions = [ + rootReferenceBody.currentTruePosition, + projectedPositionOfReferenceBody + ] + + var x = this.buildDistanceFromRootReferenceBody({ + referenceBodyName: name, + truePositions: positions + }) + + formattedData.distancesFromRootReferenceBody.push(x) + } + } + }, + + formatCurrentVessel: function(positionData, formattedData){ + var currentVesselTruePosition = this.truePositionForRelativePosition( + positionData["vesselCurrentPosition"]["relativePosition"], + this.formatTruePositionVector(positionData.referenceBodies[positionData["vesselBody"]].currentTruePosition) + ) + + this.rootReferenceBodyName = positionData["vesselBody"] + + formattedData.vessels.push( + this.buildVessel({ + name: "current vessel", + type: "currentVessel", + truePosition: currentVesselTruePosition, + referenceBodyName: positionData["vesselBody"] + }) + ) + }, + + formatTargetVessel: function(positionData, formattedData){ + if(!positionData['tar.type']){ return } + if(positionData["tar.type"] == "Vessel"){ + var targetCurrentTruePosition = this.truePositionForRelativePosition( + positionData["targetCurrentPosition"]["relativePosition"], + this.formatTruePositionVector(positionData.referenceBodies[positionData["tar.o.orbitingBody"]].currentTruePosition) + ) + + formattedData.vessels.push(this.buildVessel({ + name: positionData["tar.name"], + type: "targetVessel", + truePosition: targetCurrentTruePosition, + referenceBodyName: positionData["tar.o.orbitingBody"] + })) + } + }, + + formatTargetOrbitPatches: function(positionData, formattedData){ + if(!positionData['tar.type']){ return } + if(positionData["tar.o.orbitPatches"].length > 0){ + formattedData.orbitPatches = formattedData.orbitPatches.concat(this.formatOrbitPatches( + formattedData, positionData, positionData["tar.o.orbitPatches"], { + type: "orbitPatch", + parentType: "targetVessel", + parentName: positionData["tar.name"] + },{ linkedPatchType: "orbitPatch" } + )) + } + }, + + formatOrbitalPatches: function(positionData, formattedData){ + formattedData.orbitPatches = this.formatOrbitPatches(formattedData, + positionData, positionData["o.orbitPatches"],{ + type: "orbitPatch", + parentType: "vessel", + parentName: "current vessel" + }, { linkedPatchType: "orbitPatch" } + ) + }, + + formatManeuverNodes: function(positionData, formattedData){ + for (var i = 0; i < positionData["o.maneuverNodes"].length; i++){ + var maneuverNode = positionData["o.maneuverNodes"][i] + var orbitPatches = this.formatOrbitPatches(formattedData, positionData, maneuverNode.orbitPatches, { + type: "maneuverNode", parentType: "vessel", parentName: "current vessel" + }, { linkedPatchType: "maneuverNode" }) + + for (var j = 0; j < maneuverNode.orbitPatches.length; j++) { + var orbitPatch = maneuverNode.orbitPatches[j] + if(orbitPatch.referenceBody != this.rootReferenceBodyName){ + var referenceBody = positionData.referenceBodies[orbitPatch.referenceBody] + var sortedUniversalTimes = this.sortedUniversalTimes(orbitPatch.positionData) + var middleUniversalTime = sortedUniversalTimes[Math.floor((sortedUniversalTimes.length-1)/2.0)] + + var frameOfReferenceVector = this.findProjectedPositionOfReferenceBody( + this.rootReferenceBody(positionData), referenceBody, middleUniversalTime + ) + } + } + + formattedData.maneuverNodes.push(this.buildManeuverNode({ + type: "maneuverNode", + parentType: "vessel", + parentName: "current vessel", + orbitPatches: orbitPatches + })) + } + }, + + findDistanceVectorBetweenBodiesAtTime: function(rootBody, targetBody, universalTime){ + var closestUniversalTime = this.findTruePositionClosestToRelativeTime(universalTime, rootBody.positionData) + + return [ + rootBody.positionData[closestUniversalTime].truePosition, + targetBody.positionData[universalTime].truePosition + ] + }, + + findProjectedPositionOfReferenceBody: function(rootReferenceBody, body, universalTime){ + var distancePoints = this.findDistanceVectorBetweenBodiesAtTime(rootReferenceBody, body, universalTime) + var distanceVector = Math.matrixAdd( + distancePoints[1], + Math.scaleMatrix(-1, distancePoints[0]) + ) + return distanceVector + }, + + truePositionForRelativePosition: function(relativePositionVector, frameOfReferenceVector){ + var transformedRelativePositionVector = [ + relativePositionVector[0], + relativePositionVector[2], + relativePositionVector[1], + ] + + return Math.matrixAdd(frameOfReferenceVector, transformedRelativePositionVector) + }, + + findTruePositionClosestToRelativeTime: function(universalTime, positionData){ + var positionDataKeys = Object.keys(positionData) + var sortedUniversalTimes = positionDataKeys.map(function(x){return parseFloat(x)}).sortBy(function(s) { + return s; + }) + + var closestTime = null + var closestDistance = null + + for (var i = 0; i < sortedUniversalTimes.length; i++) { + var time = sortedUniversalTimes[i] + var distance = Math.abs(universalTime - time) + + if((closestTime == null && closestDistance == null) || distance < closestDistance ){ + closestTime = time + closestDistance = distance + } + } + + return closestTime + }, + + formatOrbitPatches: function(formattedData, positionData, rawOrbitPatches, orbitPatchOptions, referenceBodyOptions){ + var formattedOrbitPatches = [] + var lastPatchesPoint = null + var firstPointInPatch = null + referenceBodyOptions = referenceBodyOptions || {} + + for (var j = 0; j < rawOrbitPatches.length; j++){ + var orbitPatch = rawOrbitPatches[j] + var referenceBody = positionData.referenceBodies[orbitPatch.referenceBody] + var sortedUniversalTimes = this.sortedUniversalTimes(orbitPatch.positionData) + var positions = [] + var distanceFromLastPatchesPoint = null + var middleUniversalTime = sortedUniversalTimes[Math.floor((sortedUniversalTimes.length-1)/2)] + + for (var k = 0; k < sortedUniversalTimes.length; k++){ + var key = sortedUniversalTimes[k].toString() + + if(orbitPatch.referenceBody == this.rootReferenceBodyName || orbitPatch.referenceBody == "Sun"){ + var frameOfReferenceVector = this.formatTruePositionVector(referenceBody.currentTruePosition) + } else{ + var frameOfReferenceVector = this.findProjectedPositionOfReferenceBody( + this.rootReferenceBody(positionData), referenceBody, sortedUniversalTimes[k] + ) + } + + var relativePositionVector = orbitPatch.positionData[key].relativePosition + + var projectedTruePosition = this.truePositionForRelativePosition( + relativePositionVector, frameOfReferenceVector + ) + + if(lastPatchesPoint != null){ + if(k == 0){ + firstPointInPatch = projectedTruePosition + distanceFromLastPatchesPoint = [ + lastPatchesPoint[0] - firstPointInPatch[0], + lastPatchesPoint[1] - firstPointInPatch[1], + lastPatchesPoint[2] - firstPointInPatch[2], + ] + } + + var projectedTruePosition = [ + projectedTruePosition[0] + distanceFromLastPatchesPoint[0], + projectedTruePosition[1] + distanceFromLastPatchesPoint[1], + projectedTruePosition[2] + distanceFromLastPatchesPoint[2], + ] + + if(middleUniversalTime == sortedUniversalTimes[k] && orbitPatch.referenceBody != this.rootReferenceBodyName){ + var positionOfReferenceBody = [ + frameOfReferenceVector[0] + distanceFromLastPatchesPoint[0], + frameOfReferenceVector[1] + distanceFromLastPatchesPoint[1], + frameOfReferenceVector[2] + distanceFromLastPatchesPoint[2], + ] + + formattedData["referenceBodies"].push(this.buildReferenceBody(Object.extend({ + name: orbitPatch.referenceBody, + type: "projected", + radius: referenceBody.radius, + truePosition: positionOfReferenceBody, + linkedPatchID: j, + atmosphericRadius: this.datalink.getOrbitalBodyInfo(orbitPatch.referenceBody).atmosphericRadius + }, referenceBodyOptions))) + } + } + + positions.push(projectedTruePosition) + } + + lastPatchesPoint = positions.last() + + formattedOrbitPatches.push(this.buildOrbitPatch(Object.extend({ + truePositions: positions + }, orbitPatchOptions))) + } + + return formattedOrbitPatches + }, + + formatTruePositionVector: function(vector){ + return vector + }, + + buildReferenceBody: function(options){ + return { + name: options.name, + type: options.type, + radius: options.radius, + truePosition: options.truePosition, + linkedPatchID: options.linkedPatchID, + linkedPatchType: options.linkedPatchType, + atmosphericRadius: options.atmosphericRadius, + color: options.color + } + }, + + buildReferenceBodyPath: function(options){ + return { + referenceBodyName: options.referenceBodyName, + truePositions: options.truePositions + } + }, + + buildVessel: function(options){ + return { + name: options.name, + type: options.type, + truePosition: options.truePosition, + referenceBodyName: options.referenceBodyName + } + }, + + buildOrbitPatch: function(options){ + return { + type: options.type, + parentType: options.parentType, + parentName: options.parentName, + truePositions: options.truePositions + } + }, + + buildManeuverNode: function(options){ + return { + type: options.type, + parentType: options.parentType, + parentName: options.parentName, + orbitPatches: options.orbitPatches + } + }, + + buildDistanceFromRootReferenceBody: function(options){ + return { + referenceBodyName: options.referenceBodyName, + truePositions: options.truePositions + } + }, + + sortedUniversalTimes: function(positionData){ + var positionDataKeys = Object.keys(positionData) + return positionDataKeys.map(function(x){return parseFloat(x)}).sortBy(function(x){ x }).reverse() + }, + + rootReferenceBody: function(positionData){ + return positionData.referenceBodies[this.rootReferenceBodyName] + } +}) +var OrbitalMap = Class.create({ + initialize: function(positionDataFormatter, datalink, containerID){ + this.container = $(containerID) + + this.GUIParameters = { + "reset": this.resetPosition.bind(this), + "fullscreen": this.toggleFullscreen.bind(this), + "lastUpdate": '00:00:00' + } + + this.buildSceneCameraAndRenderer() + this.buildGUI() + + this.distanceScaleFactor = 1 + this.referenceBodyScaleFactor = 1 + this.sunBodyScaleFactor = 1 + this.dashedLineLength = 100000 + this.maxLengthInThreeJS = 2000 + this.vehicleLength = 25000 + this.defaultZoomFactor = 40 + + this.referenceBodyGeometry = {} + + this.colors = ["#b4f489", "#f48e77", "#a4d1f2", "#99ffc6", "#fcc2e7", "#99ffc6", "#9d67e5", "#f49ab2", "#ffcc99", "#b7fca4", "#ff7cd1", "#ffc9de", "#a4f9ac", "#b6ff77", "#80e6f2", "#f9bdbb", "#e79bef", "#85f7d5", "#88c4ea", "#68a9d8"] + this.orbitPathColors = ["orange", "#b4c6f7", "#987cf9", "#6baedb", "#d0f788", "#f774dd", "#9dc3f9", "#edef70", "#f97292", "#adffb6", "#efc9ff", "#bfc0ff", "#ffe3c4", "#8eb2f9", "#83f7b7", "#8cfc8a", "#97f4b5", "#96dff7", "#ffaabe", "#eda371"] + this.targetColor = '#51ff07' + + this.datalink = datalink + this.positionDataFormatter = positionDataFormatter + this.positionDataFormatter.options.onFormat = this.render.bind(this) + }, + + buildGUI: function(){ + var gui = new dat.GUI({ autoPlace: false }); + gui.add( this.GUIParameters, 'reset' ).name('Reset'); + gui.add( this.GUIParameters, 'fullscreen' ).name('ToggleFullscreen'); + gui.add( this.GUIParameters, 'lastUpdate' ).name('Updated').listen(); + + this.container.appendChild(gui.domElement); + }, + + toggleFullscreen: function(){ + if(!THREEx.FullScreen.available()){return} + + if(THREEx.FullScreen.activated()){ + THREEx.FullScreen.cancel() + } else{ + THREEx.FullScreen.request(this.container) + this.renderer.domElement.focus() + } + }, + + resizeRenderer: function(){ + this.renderer.setSize(1, 1) + this.camera.aspect = this.container.clientWidth/this.container.clientHeight + this.camera.updateProjectionMatrix() + this.renderer.setSize(this.container.clientWidth, this.container.clientHeight) + }, + + buildSceneCameraAndRenderer: function(){ + this.renderer = new THREE.WebGLRenderer({antialias: true}) + + this.renderer.setSize( this.container.clientWidth, this.container.clientHeight ) + this.renderer.setClearColor('#3A1604') + this.container.appendChild( this.renderer.domElement ) + + new ResizeSensor(this.container, function() { + if(this.camera){ + this.resizeRenderer() + } + }.bind(this)); + }, + + buildScene: function(){ + this.scene = new THREE.Scene() + }, + + buildGeometry: function(formattedData){ + this.group = new THREE.Group() + this.scene.add(this.group) + + this.buildReferenceBodyGeometry(formattedData) + this.buildVesselGeometry(formattedData) + this.buildOrbitPathGeometry(formattedData) + this.buildManeuverNodeGeometry(formattedData) + // this.buildReferenceBodyOrbitPaths(formattedData) + // this.buildDistancesFromRootReferenceBodyPaths(formattedData) + }, + + buildReferenceBodyGeometry: function(formattedData){ + var i = 0 + for (var i = formattedData.referenceBodies.length - 1; i >= 0; i--) { + var info = formattedData.referenceBodies[i] + + //render the sun last, and separately + // if(info.name == "Sun"){ continue; } + + if(info.color){ + var color = info.color + } else { + var color = this.colors[i] + } + var radius = info.radius * this.referenceBodyScaleFactor + + if(info.name == "Sun"){ color = 'yellow' } + + if(info.type == "currentPosition"){ + var material = new THREE.MeshBasicMaterial( { color: color, 'wireframe': false } ) + } else if(info.type == "targetBodyCurrentPosition"){ + var material = new THREE.MeshBasicMaterial( { color: this.targetColor, 'wireframe': false } ) + radius = radius * 1.2 + } else{ + if(info.name != "Sun"){ + if(info.linkedPatchType == "maneuverNode"){ + color = this.orbitPathColors[info.linkedPatchID] + } else{ + color = this.orbitPathColors[info.linkedPatchID] + } + } + + var material = new THREE.MeshBasicMaterial( { color: color, 'wireframe': true } ) + } + + var sphereGeometry = new THREE.SphereGeometry(radius, 20, 20) + var sphere = new THREE.Mesh( sphereGeometry, material ) + this.setPosition(sphere, info.truePosition) + this.group.add(sphere) + + if(info.atmosphericRadius > 0){ + // Now to add the atmospheric glow + var customMaterial = new THREE.ShaderMaterial( + { + uniforms: + { + "c": { type: "f", value: 1 }, + "p": { type: "f", value: 1.5 }, + glowColor: { type: "c", value: new THREE.Color('white') }, + viewVector: { type: "v3", value: (this.camera && this.camera.position) || sphere.position } + }, + vertexShader: document.getElementById( 'vertexShader' ).textContent, + fragmentShader: document.getElementById( 'fragmentShader' ).textContent, + side: THREE.FrontSide, + blending: THREE.AdditiveBlending, + transparent: true + } ); + + var atmoGeometry = new THREE.SphereGeometry((info.radius + info.atmosphericRadius) * this.referenceBodyScaleFactor, 20, 20) + atmo = new THREE.Mesh( atmoGeometry, customMaterial ); + this.setPosition(atmo, info.truePosition) + this.group.add( atmo ); + } + } + }, + + buildVesselGeometry: function(formattedData){ + for (var i = formattedData.vessels.length - 1; i >= 0; i--) { + var info = formattedData.vessels[i] + + if(info.type == "currentVessel"){ + var materials = [ + new THREE.MeshBasicMaterial( { color: 'white', 'wireframe': false } ), + new THREE.MeshBasicMaterial( { color: 'grey', 'wireframe': true } ) + ]; + } else{ + var materials = [ + new THREE.MeshBasicMaterial( { color: this.targetColor, 'wireframe': false } ), + new THREE.MeshBasicMaterial( { color: 'grey', 'wireframe': true } ) + ]; + } + + var length = this.vehicleLength + + var geometry = new THREE.BoxGeometry( length, length, length) + var cube = THREE.SceneUtils.createMultiMaterialObject( geometry, materials ); + + if(info.type == "currentVessel"){ + this.currentVesselGeometry = cube + } + + this.setPosition(cube, info.truePosition) + this.group.add(cube) + } + }, + + buildOrbitPathGeometry: function(formattedData){ + for (var i = formattedData.orbitPatches.length - 1; i >= 0; i--) { + var points = formattedData.orbitPatches[i].truePositions.map(function(x){ return this.buildVector(x) }.bind(this)) + + if(formattedData.orbitPatches[i].parentType == "targetVessel"){ + var color = this.targetColor + } else{ + var color = this.orbitPathColors[i] + } + + var geometry = this.buildCurveGeometryFromPoints(points) + var material = new THREE.LineBasicMaterial({ + color: color, + linewidth: 3 + }) + + var spline = new THREE.Line( geometry, material ) + + this.group.add(spline) + } + }, + + buildManeuverNodeGeometry: function(formattedData){ + for (var i = formattedData.maneuverNodes.length - 1; i >= 0; i--) { + var maneuverNode = formattedData.maneuverNodes[i] + + for (var j = maneuverNode.orbitPatches.length - 1; j >= 0; j--) { + var orbitPatch = maneuverNode.orbitPatches[j] + var points = orbitPatch.truePositions.map(function(x){ return this.buildVector(x) }.bind(this)) + + var geometry = this.buildCurveGeometryFromPoints(points) + + geometry.computeBoundingBox() + var dashSize = geometry.boundingBox.size().x/Math.ceil(geometry.boundingBox.size().x/this.dashedLineLength) + + var material = new THREE.LineDashedMaterial({ + color: this.orbitPathColors[j], + dashSize: dashSize, + gapSize: dashSize, + linewidth: 3 + }) + + var spline = new THREE.Line( geometry, material ) + + this.group.add(spline) + } + } + }, + + buildReferenceBodyOrbitPaths: function(formattedData){ + for (var i = formattedData.referenceBodyPaths.length - 1; i >= 0; i--) { + var points = formattedData.referenceBodyPaths[i].truePositions.map(function(x){ return this.buildVector(x) }.bind(this)) + var material = new THREE.LineBasicMaterial( { color : 'white', linewidth: formattedData.referenceBodies[0].radius * .1 } ); + + var geometry = this.buildCurveGeometryFromPoints(points) + + var spline = new THREE.Line( geometry, material ) + + this.group.add(spline) + } + }, + + buildDistancesFromRootReferenceBodyPaths: function(formattedData){ + var colors = ['teal', 'magenta','purple', 'green', 'blue', 'red'] + + for (var i = formattedData.distancesFromRootReferenceBody.length - 1; i >= 0; i--) { + var points = formattedData.distancesFromRootReferenceBody[i].truePositions.map(function(x){ return this.buildVector(x) }.bind(this)) + var material = new THREE.LineBasicMaterial( { color : colors[i], linewidth: formattedData.referenceBodies[0].radius * .1 } ); + + var spline = this.buildSplineWithMaterial(points, material) + + this.group.add(spline) + } + }, + + positionCamera: function(){ + var boundingBox = new THREE.Box3().setFromObject(this.group) + var scaleFactor = Math.max( + (this.maxLengthInThreeJS/boundingBox.max.x), + (this.maxLengthInThreeJS/boundingBox.max.y), + (this.maxLengthInThreeJS/boundingBox.max.z) + ) + + this.group.scale.set(scaleFactor, scaleFactor, scaleFactor) + var boundingBox = new THREE.Box3().setFromObject(this.group) + + // var hex = 0xff0000; + // var bbox = new THREE.BoundingBoxHelper( this.group, hex ); + // bbox.update(); + // this.scene.add( bbox ); + + var vector = this.currentVesselGeometry.position.clone() + vector.multiplyScalar(scaleFactor) + var axisHelper = new THREE.AxisHelper(this.vehicleLength * 3 * scaleFactor); + axisHelper.position.set(vector.x, vector.y, vector.z) + axisHelper.rotation = this.currentVesselGeometry.rotation + + this.scene.add( axisHelper ); + + var cameraX = vector.x + ((this.vehicleLength * this.defaultZoomFactor) * scaleFactor) + var cameraY = vector.y + ((this.vehicleLength * this.defaultZoomFactor) * scaleFactor) + var cameraZ = vector.z + ((this.vehicleLength * this.defaultZoomFactor) * scaleFactor) + + if(!this.camera){ + this.camera = new THREE.PerspectiveCamera( 75, window.innerWidth/window.innerHeight, 0.1, Number.MAX_SAFE_INTEGER) + } + + if(!this.controls){ + this.controls = new THREE.OrbitControls( this.camera, this.renderer.domElement); + this.controls.addEventListener( 'change', function(){this.renderer.render(this.scene, this.camera)}.bind(this) ); // add this only if there is no animation loop (requestAnimationFrame) + } + + if(!this.cameraSet){ + this.controls.target = vector + this.camera.position.set(cameraX, cameraY, cameraZ) + this.camera.lookAt(vector) + // this.controls.rotate.x = -Math.PI/2 + this.cameraSet = true + } else{ + this.controls.target0 = vector.clone() + this.controls.position0 = new THREE.Vector3(cameraX, cameraY, cameraZ) + } + + this.controls.maxDistance = Math.max( + (Math.abs(boundingBox.min.x) + Math.abs(boundingBox.max.x)), + (Math.abs(boundingBox.min.y) + Math.abs(boundingBox.max.y)), + (Math.abs(boundingBox.min.z) + Math.abs(boundingBox.max.z)) + ) * 2 + this.controls.minDistance = this.vehicleLength * scaleFactor + }, + + resetPosition: function(){ + this.controls.reset() + }, + + getMiddle: function(min, max){ + return min + ((Math.abs(min) + Math.abs(max))/2.0) + }, + + setPosition: function(mesh, vector){ + var vector = this.buildVector(vector) + mesh.position.x = vector.x + mesh.position.y = vector.y + mesh.position.z = vector.z + }, + + buildVector: function(vector){ + return new THREE.Vector3( vector[0] * this.distanceScaleFactor, vector[1] * this.distanceScaleFactor, vector[2] * this.distanceScaleFactor ); + }, + + buildCurveGeometryFromPoints: function(points){ + var curve = new THREE.CatmullRomCurve3(points); + var geometry = new THREE.Geometry() + geometry.vertices = curve.getPoints( 360 ); + geometry.computeLineDistances() + return geometry + }, + + render: function (formattedData) { + requestAnimationFrame( function(){ + this.buildScene() + this.buildGeometry(formattedData) + this.positionCamera() + this.renderer.render(this.scene, this.camera) + this.GUIParameters.lastUpdate = TimeFormatters.formatUT(formattedData.currentUniversalTime) + }.bind(this)) + } +}) +/** + * Copyright Marc J. Schmidt. See the LICENSE file at the top-level + * directory of this distribution and at + * https://github.com/marcj/css-element-queries/blob/master/LICENSE. + */ +; +(function (root, factory) { + if (typeof define === "function" && define.amd) { + define(factory); + } else if (typeof exports === "object") { + module.exports = factory(); + } else { + root.ResizeSensor = factory(); + } +}(this, function () { + + // Only used for the dirty checking, so the event callback count is limted to max 1 call per fps per sensor. + // In combination with the event based resize sensor this saves cpu time, because the sensor is too fast and + // would generate too many unnecessary events. + var requestAnimationFrame = window.requestAnimationFrame || + window.mozRequestAnimationFrame || + window.webkitRequestAnimationFrame || + function (fn) { + return window.setTimeout(fn, 20); + }; + + /** + * Iterate over each of the provided element(s). + * + * @param {HTMLElement|HTMLElement[]} elements + * @param {Function} callback + */ + function forEachElement(elements, callback){ + var elementsType = Object.prototype.toString.call(elements); + var isCollectionTyped = ('[object Array]' === elementsType + || ('[object NodeList]' === elementsType) + || ('[object HTMLCollection]' === elementsType) + || ('undefined' !== typeof jQuery && elements instanceof jQuery) //jquery + || ('undefined' !== typeof Elements && elements instanceof Elements) //mootools + ); + var i = 0, j = elements.length; + if (isCollectionTyped) { + for (; i < j; i++) { + callback(elements[i]); + } + } else { + callback(elements); + } + } + + /** + * Class for dimension change detection. + * + * @param {Element|Element[]|Elements|jQuery} element + * @param {Function} callback + * + * @constructor + */ + var ResizeSensor = function(element, callback) { + /** + * + * @constructor + */ + function EventQueue() { + var q = []; + this.add = function(ev) { + q.push(ev); + }; + + var i, j; + this.call = function() { + for (i = 0, j = q.length; i < j; i++) { + q[i].call(); + } + }; + + this.remove = function(ev) { + var newQueue = []; + for(i = 0, j = q.length; i < j; i++) { + if(q[i] !== ev) newQueue.push(q[i]); + } + q = newQueue; + } + + this.length = function() { + return q.length; + } + } + + /** + * @param {HTMLElement} element + * @param {String} prop + * @returns {String|Number} + */ + function getComputedStyle(element, prop) { + if (element.currentStyle) { + return element.currentStyle[prop]; + } else if (window.getComputedStyle) { + return window.getComputedStyle(element, null).getPropertyValue(prop); + } else { + return element.style[prop]; + } + } + + /** + * + * @param {HTMLElement} element + * @param {Function} resized + */ + function attachResizeEvent(element, resized) { + if (!element.resizedAttached) { + element.resizedAttached = new EventQueue(); + element.resizedAttached.add(resized); + } else if (element.resizedAttached) { + element.resizedAttached.add(resized); + return; + } + + element.resizeSensor = document.createElement('div'); + element.resizeSensor.className = 'resize-sensor'; + var style = 'position: absolute; left: 0; top: 0; right: 0; bottom: 0; overflow: hidden; z-index: -1; visibility: hidden;'; + var styleChild = 'position: absolute; left: 0; top: 0; transition: 0s;'; + + element.resizeSensor.style.cssText = style; + element.resizeSensor.innerHTML = + '
    ' + + '
    ' + + '
    ' + + '
    ' + + '
    ' + + '
    '; + element.appendChild(element.resizeSensor); + + if (getComputedStyle(element, 'position') == 'static') { + element.style.position = 'relative'; + } + + var expand = element.resizeSensor.childNodes[0]; + var expandChild = expand.childNodes[0]; + var shrink = element.resizeSensor.childNodes[1]; + + var reset = function() { + expandChild.style.width = 100000 + 'px'; + expandChild.style.height = 100000 + 'px'; + + expand.scrollLeft = 100000; + expand.scrollTop = 100000; + + shrink.scrollLeft = 100000; + shrink.scrollTop = 100000; + }; + + reset(); + var dirty = false; + + var dirtyChecking = function() { + if (!element.resizedAttached) return; + + if (dirty) { + element.resizedAttached.call(); + dirty = false; + } + + requestAnimationFrame(dirtyChecking); + }; + + requestAnimationFrame(dirtyChecking); + var lastWidth, lastHeight; + var cachedWidth, cachedHeight; //useful to not query offsetWidth twice + + var onScroll = function() { + if ((cachedWidth = element.offsetWidth) != lastWidth || (cachedHeight = element.offsetHeight) != lastHeight) { + dirty = true; + + lastWidth = cachedWidth; + lastHeight = cachedHeight; + } + reset(); + }; + + var addEvent = function(el, name, cb) { + if (el.attachEvent) { + el.attachEvent('on' + name, cb); + } else { + el.addEventListener(name, cb); + } + }; + + addEvent(expand, 'scroll', onScroll); + addEvent(shrink, 'scroll', onScroll); + } + + forEachElement(element, function(elem){ + attachResizeEvent(elem, callback); + }); + + this.detach = function(ev) { + ResizeSensor.detach(element, ev); + }; + }; + + ResizeSensor.detach = function(element, ev) { + forEachElement(element, function(elem){ + if(elem.resizedAttached && typeof ev == "function"){ + elem.resizedAttached.remove(ev); + if(elem.resizedAttached.length()) return; + } + if (elem.resizeSensor) { + elem.removeChild(elem.resizeSensor); + delete elem.resizeSensor; + delete elem.resizedAttached; + } + }); + }; + + return ResizeSensor; + +})); diff --git a/public/assets/app.js b/public/assets/app.js index a123485..73e4684 100644 --- a/public/assets/app.js +++ b/public/assets/app.js @@ -1,16 +1,8324 @@ -Math.toDegrees=function(angleInRadians){return angleInRadians*(180/Math.PI)};Math.toRadians=function(angleInDegrees){return angleInDegrees*(Math.PI/180)};Math.crossProduct=function(x,y){[x[1]*y[2]-x[2]*y[1],x[2]*y[0]-x[0]*y[2],x[0]*y[1]-x[1]*y[0]]};Math.sign=Math.sign||function(x){x=+x;if(x===0||isNaN(x)){return x}return x>0?1:-1};Math.cosh=Math.cosh||function(x){return(Math.exp(x)+Math.exp(-x))/2};Math.sinh=Math.sinh||function(x){return(Math.exp(x)-Math.exp(-x))/2};Math.matrixAdd=Math.matrixAdd||function(){var arrays=arguments,results=[],count=arrays[0].length,L=arrays.length,sum,next=0,i;while(next-1?e(a,b,c):b.indexOf("%")>-1?f(a,b,c):b.indexOf(":")>-1?g(a,b):i(a._value,b,c)}function d(a,b){var c,d,e,f,g,i=b,j=["KB","MB","GB","TB","PB","EB","ZB","YB"],k=!1;if(b.indexOf(":")>-1)a._value=h(b);else if(b===q)a._value=0;else{for("."!==o[p].delimiters.decimal&&(b=b.replace(/\./g,"").replace(o[p].delimiters.decimal,".")),c=new RegExp("[^a-zA-Z]"+o[p].abbreviations.thousand+"(?:\\)|(\\"+o[p].currency.symbol+")?(?:\\))?)?$"),d=new RegExp("[^a-zA-Z]"+o[p].abbreviations.million+"(?:\\)|(\\"+o[p].currency.symbol+")?(?:\\))?)?$"),e=new RegExp("[^a-zA-Z]"+o[p].abbreviations.billion+"(?:\\)|(\\"+o[p].currency.symbol+")?(?:\\))?)?$"),f=new RegExp("[^a-zA-Z]"+o[p].abbreviations.trillion+"(?:\\)|(\\"+o[p].currency.symbol+")?(?:\\))?)?$"),g=0;g<=j.length&&!(k=b.indexOf(j[g])>-1?Math.pow(1024,g+1):!1);g++);a._value=(k?k:1)*(i.match(c)?Math.pow(10,3):1)*(i.match(d)?Math.pow(10,6):1)*(i.match(e)?Math.pow(10,9):1)*(i.match(f)?Math.pow(10,12):1)*(b.indexOf("%")>-1?.01:1)*((b.split("-").length+Math.min(b.split("(").length-1,b.split(")").length-1))%2?1:-1)*Number(b.replace(/[^0-9\.]+/g,"")),a._value=k?Math.ceil(a._value):a._value}return a._value}function e(a,b,c){var d,e,f=b.indexOf("$"),g=b.indexOf("("),h=b.indexOf("-"),j="";return b.indexOf(" $")>-1?(j=" ",b=b.replace(" $","")):b.indexOf("$ ")>-1?(j=" ",b=b.replace("$ ","")):b=b.replace("$",""),e=i(a._value,b,c),1>=f?e.indexOf("(")>-1||e.indexOf("-")>-1?(e=e.split(""),d=1,(g>f||h>f)&&(d=0),e.splice(d,0,o[p].currency.symbol+j),e=e.join("")):e=o[p].currency.symbol+j+e:e.indexOf(")")>-1?(e=e.split(""),e.splice(-1,0,j+o[p].currency.symbol),e=e.join("")):e=e+j+o[p].currency.symbol,e}function f(a,b,c){var d,e="",f=100*a._value;return b.indexOf(" %")>-1?(e=" ",b=b.replace(" %","")):b=b.replace("%",""),d=i(f,b,c),d.indexOf(")")>-1?(d=d.split(""),d.splice(-1,0,e+"%"),d=d.join("")):d=d+e+"%",d}function g(a){var b=Math.floor(a._value/60/60),c=Math.floor((a._value-60*b*60)/60),d=Math.round(a._value-60*b*60-60*c);return b+":"+(10>c?"0"+c:c)+":"+(10>d?"0"+d:d)}function h(a){var b=a.split(":"),c=0;return 3===b.length?(c+=60*Number(b[0])*60,c+=60*Number(b[1]),c+=Number(b[2])):2===b.length&&(c+=60*Number(b[0]),c+=Number(b[1])),Number(c)}function i(a,c,d){var e,f,g,h,i,j,k=!1,l=!1,m=!1,n="",r=!1,s=!1,t=!1,u=!1,v=!1,w="",x="",y=Math.abs(a),z=["B","KB","MB","GB","TB","PB","EB","ZB","YB"],A="",B=!1;if(0===a&&null!==q)return q;if(c.indexOf("(")>-1?(k=!0,c=c.slice(1,-1)):c.indexOf("+")>-1&&(l=!0,c=c.replace(/\+/g,"")),c.indexOf("a")>-1&&(r=c.indexOf("aK")>=0,s=c.indexOf("aM")>=0,t=c.indexOf("aB")>=0,u=c.indexOf("aT")>=0,v=r||s||t||u,c.indexOf(" a")>-1?(n=" ",c=c.replace(" a","")):c=c.replace("a",""),y>=Math.pow(10,12)&&!v||u?(n+=o[p].abbreviations.trillion,a/=Math.pow(10,12)):y=Math.pow(10,9)&&!v||t?(n+=o[p].abbreviations.billion,a/=Math.pow(10,9)):y=Math.pow(10,6)&&!v||s?(n+=o[p].abbreviations.million,a/=Math.pow(10,6)):(y=Math.pow(10,3)&&!v||r)&&(n+=o[p].abbreviations.thousand,a/=Math.pow(10,3))),c.indexOf("b")>-1)for(c.indexOf(" b")>-1?(w=" ",c=c.replace(" b","")):c=c.replace("b",""),g=0;g<=z.length;g++)if(e=Math.pow(1024,g),f=Math.pow(1024,g+1),a>=e&&f>a){w+=z[g],e>0&&(a/=e);break}return c.indexOf("o")>-1&&(c.indexOf(" o")>-1?(x=" ",c=c.replace(" o","")):c=c.replace("o",""),x+=o[p].ordinal(a)),c.indexOf("[.]")>-1&&(m=!0,c=c.replace("[.]",".")),h=a.toString().split(".")[0],i=c.split(".")[1],j=c.indexOf(","),i?(i.indexOf("[")>-1?(i=i.replace("]",""),i=i.split("["),A=b(a,i[0].length+i[1].length,d,i[1].length)):A=b(a,i.length,d),h=A.split(".")[0],A=A.split(".")[1].length?o[p].delimiters.decimal+A.split(".")[1]:"",m&&0===Number(A.slice(1))&&(A="")):h=b(a,null,d),h.indexOf("-")>-1&&(h=h.slice(1),B=!0),j>-1&&(h=h.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g,"$1"+o[p].delimiters.thousands)),0===c.indexOf(".")&&(h=""),(k&&B?"(":"")+(!k&&B?"-":"")+(!B&&l?"+":"")+h+A+(x?x:"")+(n?n:"")+(w?w:"")+(k&&B?")":"")}function j(a,b){o[a]=b}function k(a){var b=a.toString().split(".");return b.length<2?1:Math.pow(10,b[1].length)}function l(){var a=Array.prototype.slice.call(arguments);return a.reduce(function(a,b){var c=k(a),d=k(b);return c>d?c:d},-1/0)}var m,n="1.5.3",o={},p="en",q=null,r="0,0",s="undefined"!=typeof module&&module.exports;m=function(b){return m.isNumeral(b)?b=b.value():0===b||"undefined"==typeof b?b=0:Number(b)||(b=m.fn.unformat(b)),new a(Number(b))},m.version=n,m.isNumeral=function(b){return b instanceof a},m.language=function(a,b){if(!a)return p;if(a&&!b){if(!o[a])throw new Error("Unknown language : "+a);p=a}return(b||!o[a])&&j(a,b),m},m.languageData=function(a){if(!a)return o[p];if(!o[a])throw new Error("Unknown language : "+a);return o[a]},m.language("en",{delimiters:{thousands:",",decimal:"."},abbreviations:{thousand:"k",million:"m",billion:"b",trillion:"t"},ordinal:function(a){var b=a%10;return 1===~~(a%100/10)?"th":1===b?"st":2===b?"nd":3===b?"rd":"th"},currency:{symbol:"$"}}),m.zeroFormat=function(a){q="string"==typeof a?a:null},m.defaultFormat=function(a){r="string"==typeof a?a:"0.0"},"function"!=typeof Array.prototype.reduce&&(Array.prototype.reduce=function(a,b){"use strict";if(null===this||"undefined"==typeof this)throw new TypeError("Array.prototype.reduce called on null or undefined");if("function"!=typeof a)throw new TypeError(a+" is not a function");var c,d,e=this.length>>>0,f=!1;for(1c;++c)this.hasOwnProperty(c)&&(f?d=a(d,this[c],c,this):(d=this[c],f=!0));if(!f)throw new TypeError("Reduce of empty array with no initial value");return d}),m.fn=a.prototype={clone:function(){return m(this)},format:function(a,b){return c(this,a?a:r,void 0!==b?b:Math.round)},unformat:function(a){return"[object Number]"===Object.prototype.toString.call(a)?a:d(this,a?a:r)},value:function(){return this._value},valueOf:function(){return this._value},set:function(a){return this._value=Number(a),this},add:function(a){function b(a,b){return a+c*b}var c=l.call(null,this._value,a);return this._value=[this._value,a].reduce(b,0)/c,this},subtract:function(a){function b(a,b){return a-c*b}var c=l.call(null,this._value,a);return this._value=[a].reduce(b,this._value*c)/c,this},multiply:function(a){function b(a,b){var c=l(a,b);return a*c*b*c/(c*c)}return this._value=[this._value,a].reduce(b,1),this},divide:function(a){function b(a,b){var c=l(a,b);return a*c/(b*c)}return this._value=[this._value,a].reduce(b),this},difference:function(a){return Math.abs(m(this._value).subtract(a).value())}},s&&(module.exports=m),"undefined"==typeof ender&&(this.numeral=m),"function"==typeof define&&define.amd&&define([],function(){return m})}).call(this);var TimeFormatters={formatUT:function(t){var day,year;if(t==null){t=0}year=(t/(365*24*3600)|0)+1;t%=365*24*3600;day=(t/(24*3600)|0)+1;t%=24*3600;return"Year "+year+", Day "+day+", "+this.hourMinSec(t)+" UT"},formatMET:function(t){var result;if(t==null){t=0}result="T+";if(t>=365*24*3600){result+=(t/(365*24*3600)|0)+":";t%=365*24*3600;if(t<24*3600){result+="0:"}}if(t>=24*3600){result+=(t/(24*3600)|0)+":"}t%=24*3600;return result+this.hourMinSec(t)+" MET"},hourMinSec:function(t){var hour,min,sec;if(t==null){t=0}hour=t/3600|0;if(hour<10){hour="0"+hour}t%=3600;min=t/60|0;if(min<10){min="0"+min}sec=(t%60|0).toFixed();if(sec<10){sec="0"+sec}return""+hour+":"+min+":"+sec},durationString:function(t){var result;if(t==null){t=0}result=t<0?"-":"";t=Math.abs(t);if(t>=365*24*3600){result+=(t/(365*24*3600)|0)+" years ";t%=365*24*3600;if(t<24*3600){result+="0 days "}}if(t>=24*3600){result+=(t/(24*3600)|0)+" days "}t%=24*3600;return result+this.hourMinSec(t)}};var DataFormatters={distanceString:function(value){return numeral(value).format("0,0.000 a")+"m"},heightFromTerrainString:function(value){if(value<=-1){return"NA"}return numeral(value).format("0,0.000 a")+"m"},degreeString:function(value){return numeral(value).format("0.000")+"°"},velocityString:function(value){return numeral(value).format("0,0.000 a")+"m/s"},temperatureString:function(value){if(!value){return"NA"}return numeral(value).format("0,000")+"°C"},accelerationSensorString:function(value){if(value[0]=="No Sensors of the Appropriate Type"){return"NA"}return numeral(value[1][0]).format("0,000")+"G"},pressureSensorString:function(value){if(value[0]=="No Sensors of the Appropriate Type"){return"NA"}return numeral(value[1][0]).format("0,000")+"Pa"},gravitySensorString:function(value){if(value[0]=="No Sensors of the Appropriate Type"){return"NA"}return numeral(value[1][0]).format("0,000 a")+"m/s²"},newtonsString:function(value){return numeral(value).format("0,0.00")+" N"},percentageString:function(value){return numeral(value).format("0%")},tonnageString:function(value){return numeral(value).format("0,0.00")+" t"},timeString:function(value){return numeral(value).format("00:00:00")},plainNumberString:function(value){return numeral(value).format("0,0.00")}};var Prototype={Version:"1.7.2",Browser:function(){var ua=navigator.userAgent;var isOpera=Object.prototype.toString.call(window.opera)=="[object Opera]";return{IE:!!window.attachEvent&&!isOpera,Opera:isOpera,WebKit:ua.indexOf("AppleWebKit/")>-1,Gecko:ua.indexOf("Gecko")>-1&&ua.indexOf("KHTML")===-1,MobileSafari:/Apple.*Mobile/.test(ua)}}(),BrowserFeatures:{XPath:!!document.evaluate,SelectorsAPI:!!document.querySelector,ElementExtensions:function(){var constructor=window.Element||window.HTMLElement;return!!(constructor&&constructor.prototype)}(),SpecificElementExtensions:function(){if(typeof window.HTMLDivElement!=="undefined")return true;var div=document.createElement("div"),form=document.createElement("form"),isSupported=false;if(div["__proto__"]&&div["__proto__"]!==form["__proto__"]){isSupported=true}div=form=null;return isSupported}()},ScriptFragment:"]*>([\\S\\s]*?)",JSONFilter:/^\/\*-secure-([\s\S]*)\*\/\s*$/,emptyFunction:function(){},K:function(x){return x}};if(Prototype.Browser.MobileSafari)Prototype.BrowserFeatures.SpecificElementExtensions=false;var Class=function(){var IS_DONTENUM_BUGGY=function(){for(var p in{toString:1}){if(p==="toString")return false}return true}();function subclass(){}function create(){var parent=null,properties=$A(arguments);if(Object.isFunction(properties[0]))parent=properties.shift();function klass(){this.initialize.apply(this,arguments)}Object.extend(klass,Class.Methods);klass.superclass=parent;klass.subclasses=[];if(parent){subclass.prototype=parent.prototype;klass.prototype=new subclass;parent.subclasses.push(klass)}for(var i=0,length=properties.length;i0){match=source.match(pattern);if(match&&match[0].length>0){result+=source.slice(0,match.index);result+=String.interpret(replacement(match));source=source.slice(match.index+match[0].length)}else{result+=source,source=""}}return result}function sub(pattern,replacement,count){replacement=prepareReplacement(replacement);count=Object.isUndefined(count)?1:count;return this.gsub(pattern,function(match){if(--count<0)return match[0];return replacement(match)})}function scan(pattern,iterator){this.gsub(pattern,iterator);return String(this)}function truncate(length,truncation){length=length||30;truncation=Object.isUndefined(truncation)?"...":truncation;return this.length>length?this.slice(0,length-truncation.length)+truncation:String(this)}function strip(){return this.replace(/^\s+/,"").replace(/\s+$/,"")}function stripTags(){return this.replace(/<\w+(\s+("[^"]*"|'[^']*'|[^>])+)?>|<\/\w+>/gi,"")}function stripScripts(){return this.replace(new RegExp(Prototype.ScriptFragment,"img"),"")}function extractScripts(){var matchAll=new RegExp(Prototype.ScriptFragment,"img"),matchOne=new RegExp(Prototype.ScriptFragment,"im");return(this.match(matchAll)||[]).map(function(scriptTag){return(scriptTag.match(matchOne)||["",""])[1]})}function evalScripts(){return this.extractScripts().map(function(script){return eval(script)})}function escapeHTML(){return this.replace(/&/g,"&").replace(//g,">")}function unescapeHTML(){return this.stripTags().replace(/</g,"<").replace(/>/g,">").replace(/&/g,"&")}function toQueryParams(separator){var match=this.strip().match(/([^?#]*)(#.*)?$/);if(!match)return{};return match[1].split(separator||"&").inject({},function(hash,pair){if((pair=pair.split("="))[0]){var key=decodeURIComponent(pair.shift()),value=pair.length>1?pair.join("="):pair[0];if(value!=undefined){value=value.gsub("+"," ");value=decodeURIComponent(value)}if(key in hash){if(!Object.isArray(hash[key]))hash[key]=[hash[key]];hash[key].push(value)}else hash[key]=value}return hash})}function toArray(){return this.split("")}function succ(){return this.slice(0,this.length-1)+String.fromCharCode(this.charCodeAt(this.length-1)+1)}function times(count){return count<1?"":new Array(count+1).join(this)}function camelize(){return this.replace(/-+(.)?/g,function(match,chr){return chr?chr.toUpperCase():""})}function capitalize(){return this.charAt(0).toUpperCase()+this.substring(1).toLowerCase()}function underscore(){return this.replace(/::/g,"/").replace(/([A-Z]+)([A-Z][a-z])/g,"$1_$2").replace(/([a-z\d])([A-Z])/g,"$1_$2").replace(/-/g,"_").toLowerCase()}function dasherize(){return this.replace(/_/g,"-")}function inspect(useDoubleQuotes){var escapedString=this.replace(/[\x00-\x1f\\]/g,function(character){if(character in String.specialChar){return String.specialChar[character]}return"\\u00"+character.charCodeAt().toPaddedString(2,16)});if(useDoubleQuotes)return'"'+escapedString.replace(/"/g,'\\"')+'"';return"'"+escapedString.replace(/'/g,"\\'")+"'"}function unfilterJSON(filter){return this.replace(filter||Prototype.JSONFilter,"$1")}function isJSON(){var str=this;if(str.blank())return false;str=str.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,"@");str=str.replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,"]");str=str.replace(/(?:^|:|,)(?:\s*\[)+/g,"");return/^[\],:{}\s]*$/.test(str)}function evalJSON(sanitize){var json=this.unfilterJSON(),cx=/[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g;if(cx.test(json)){json=json.replace(cx,function(a){return"\\u"+("0000"+a.charCodeAt(0).toString(16)).slice(-4)})}try{if(!sanitize||json.isJSON())return eval("("+json+")")}catch(e){}throw new SyntaxError("Badly formed JSON string: "+this.inspect())}function parseJSON(){var json=this.unfilterJSON();return JSON.parse(json)}function include(pattern){return this.indexOf(pattern)>-1}function startsWith(pattern,position){position=Object.isNumber(position)?position:0;return this.lastIndexOf(pattern,position)===position}function endsWith(pattern,position){pattern=String(pattern);position=Object.isNumber(position)?position:this.length;if(position<0)position=0;if(position>this.length)position=this.length;var d=position-pattern.length;return d>=0&&this.indexOf(pattern,d)===d}function empty(){return this==""}function blank(){return/^\s*$/.test(this)}function interpolate(object,pattern){return new Template(this,pattern).evaluate(object)}return{gsub:gsub,sub:sub,scan:scan,truncate:truncate,strip:String.prototype.trim||strip,stripTags:stripTags,stripScripts:stripScripts,extractScripts:extractScripts,evalScripts:evalScripts,escapeHTML:escapeHTML,unescapeHTML:unescapeHTML,toQueryParams:toQueryParams,parseQuery:toQueryParams,toArray:toArray,succ:succ,times:times,camelize:camelize,capitalize:capitalize,underscore:underscore,dasherize:dasherize,inspect:inspect,unfilterJSON:unfilterJSON,isJSON:isJSON,evalJSON:NATIVE_JSON_PARSE_SUPPORT?parseJSON:evalJSON,include:include,startsWith:String.prototype.startsWith||startsWith,endsWith:String.prototype.endsWith||endsWith,empty:empty,blank:blank,interpolate:interpolate}}());var Template=Class.create({initialize:function(template,pattern){this.template=template.toString();this.pattern=pattern||Template.Pattern},evaluate:function(object){if(object&&Object.isFunction(object.toTemplateReplacements))object=object.toTemplateReplacements();return this.template.gsub(this.pattern,function(match){if(object==null)return match[1]+"";var before=match[1]||"";if(before=="\\")return match[2];var ctx=object,expr=match[3],pattern=/^([^.[]+|\[((?:.*?[^\\])?)\])(\.|\[|$)/;match=pattern.exec(expr);if(match==null)return before;while(match!=null){var comp=match[1].startsWith("[")?match[2].replace(/\\\\]/g,"]"):match[1];ctx=ctx[comp];if(null==ctx||""==match[3])break;expr=expr.substring("["==match[3]?match[1].length:match[0].length);match=pattern.exec(expr)}return before+String.interpret(ctx)})}});Template.Pattern=/(^|.|\r|\n)(#\{(.*?)\})/;var $break={};var Enumerable=function(){function each(iterator,context){try{this._each(iterator,context)}catch(e){if(e!=$break)throw e}return this}function eachSlice(number,iterator,context){var index=-number,slices=[],array=this.toArray();if(number<1)return array;while((index+=number)=result)result=value},this);return result}function min(iterator,context){iterator=iterator||Prototype.K;var result;this.each(function(value,index){value=iterator.call(context,value,index,this);if(result==null||valueb?1:0}).pluck("value")}function toArray(){return this.map()}function zip(){var iterator=Prototype.K,args=$A(arguments);if(Object.isFunction(args.last()))iterator=args.pop();var collections=[this].concat(args).map($A);return this.map(function(value,index){return iterator(collections.pluck(index))})}function size(){return this.toArray().length}function inspect(){return"#"}return{each:each,eachSlice:eachSlice,all:all,every:all,any:any,some:any,collect:collect,map:collect,detect:detect,findAll:findAll,select:findAll,filter:findAll,grep:grep,include:include,member:include,inGroupsOf:inGroupsOf,inject:inject,invoke:invoke,max:max,min:min,partition:partition,pluck:pluck,reject:reject,sortBy:sortBy,toArray:toArray,entries:toArray,zip:zip,size:size,inspect:inspect,find:detect}}();function $A(iterable){if(!iterable)return[];if("toArray"in Object(iterable))return iterable.toArray();var length=iterable.length||0,results=new Array(length);while(length--)results[length]=iterable[length];return results}function $w(string){if(!Object.isString(string))return[];string=string.strip();return string?string.split(/\s+/):[]}Array.from=$A;(function(){var arrayProto=Array.prototype,slice=arrayProto.slice,_each=arrayProto.forEach;function each(iterator,context){for(var i=0,length=this.length>>>0;i>>0;if(length===0)return-1;i=Number(i);if(isNaN(i)){i=0}else if(i!==0&&isFinite(i)){i=(i>0?1:-1)*Math.floor(Math.abs(i))}if(i>length)return-1;var k=i>=0?i:Math.max(length-Math.abs(i),0);for(;k>>0;if(length===0)return-1;if(!Object.isUndefined(i)){i=Number(i);if(isNaN(i)){i=0}else if(i!==0&&isFinite(i)){i=(i>0?1:-1)*Math.floor(Math.abs(i))}}else{i=length}var k=i>=0?Math.min(i,length-1):length-Math.abs(i);for(;k>=0;k--)if(k in array&&array[k]===item)return k;return-1}function concat(_){var array=[],items=slice.call(arguments,0),item,n=0;items.unshift(this);for(var i=0,length=items.length;i>>0;i>>0;i>>0;i>>0;i"}function clone(){return new Hash(this)}return{initialize:initialize,_each:_each,set:set,get:get,unset:unset,toObject:toObject,toTemplateReplacements:toObject,keys:keys,values:values,index:index,merge:merge,update:update,toQueryString:toQueryString,inspect:inspect,toJSON:toObject,clone:clone}}());Hash.from=$H;Object.extend(Number.prototype,function(){function toColorPart(){return this.toPaddedString(2,16)}function succ(){return this+1}function times(iterator,context){$R(0,this,true).each(iterator,context);return this}function toPaddedString(length,radix){var string=this.toString(radix||10);return"0".times(length-string.length)+string}function abs(){return Math.abs(this)}function round(){return Math.round(this)}function ceil(){return Math.ceil(this)}function floor(){return Math.floor(this)}return{toColorPart:toColorPart,succ:succ,times:times,toPaddedString:toPaddedString,abs:abs,round:round,ceil:ceil,floor:floor}}());function $R(start,end,exclusive){return new ObjectRange(start,end,exclusive)}var ObjectRange=Class.create(Enumerable,function(){function initialize(start,end,exclusive){this.start=start;this.end=end;this.exclusive=exclusive}function _each(iterator,context){var value=this.start,i;for(i=0;this.include(value);i++){iterator.call(context,value,i);value=value.succ()}}function include(value){if(value1&&!(readyState==4&&this._complete))this.respondToReadyState(this.transport.readyState)},setRequestHeaders:function(){var headers={"X-Requested-With":"XMLHttpRequest","X-Prototype-Version":Prototype.Version,Accept:"text/javascript, text/html, application/xml, text/xml, */*"};if(this.method=="post"){headers["Content-type"]=this.options.contentType+(this.options.encoding?"; charset="+this.options.encoding:"");if(this.transport.overrideMimeType&&(navigator.userAgent.match(/Gecko\/(\d{4})/)||[0,2005])[1]<2005)headers["Connection"]="close"}if(typeof this.options.requestHeaders=="object"){var extras=this.options.requestHeaders;if(Object.isFunction(extras.push))for(var i=0,length=extras.length;i=200&&status<300||status==304},getStatus:function(){try{if(this.transport.status===1223)return 204;return this.transport.status||0}catch(e){return 0}},respondToReadyState:function(readyState){var state=Ajax.Request.Events[readyState],response=new Ajax.Response(this);if(state=="Complete"){try{this._complete=true;(this.options["on"+response.status]||this.options["on"+(this.success()?"Success":"Failure")]||Prototype.emptyFunction)(response,response.headerJSON)}catch(e){this.dispatchException(e)}var contentType=response.getHeader("Content-type");if(this.options.evalJS=="force"||this.options.evalJS&&this.isSameOrigin()&&contentType&&contentType.match(/^\s*(text|application)\/(x-)?(java|ecma)script(;.*)?\s*$/i))this.evalResponse()}try{(this.options["on"+state]||Prototype.emptyFunction)(response,response.headerJSON);Ajax.Responders.dispatch("on"+state,this,response,response.headerJSON)}catch(e){this.dispatchException(e)}if(state=="Complete"){this.transport.onreadystatechange=Prototype.emptyFunction}},isSameOrigin:function(){var m=this.url.match(/^\s*https?:\/\/[^\/]*/);return!m||m[0]=="#{protocol}//#{domain}#{port}".interpolate({protocol:location.protocol,domain:document.domain,port:location.port?":"+location.port:""})},getHeader:function(name){try{return this.transport.getResponseHeader(name)||null}catch(e){return null}},evalResponse:function(){try{return eval((this.transport.responseText||"").unfilterJSON())}catch(e){this.dispatchException(e)}},dispatchException:function(exception){(this.options.onException||Prototype.emptyFunction)(this,exception);Ajax.Responders.dispatch("onException",this,exception)}});Ajax.Request.Events=["Uninitialized","Loading","Loaded","Interactive","Complete"];Ajax.Response=Class.create({initialize:function(request){this.request=request;var transport=this.transport=request.transport,readyState=this.readyState=transport.readyState;if(readyState>2&&!Prototype.Browser.IE||readyState==4){this.status=this.getStatus();this.statusText=this.getStatusText();this.responseText=String.interpret(transport.responseText);this.headerJSON=this._getHeaderJSON()}if(readyState==4){var xml=transport.responseXML;this.responseXML=Object.isUndefined(xml)?null:xml;this.responseJSON=this._getResponseJSON()}},status:0,statusText:"",getStatus:Ajax.Request.prototype.getStatus,getStatusText:function(){try{return this.transport.statusText||""}catch(e){return""}},getHeader:Ajax.Request.prototype.getHeader,getAllHeaders:function(){try{return this.getAllResponseHeaders()}catch(e){return null}},getResponseHeader:function(name){return this.transport.getResponseHeader(name)},getAllResponseHeaders:function(){return this.transport.getAllResponseHeaders()},_getHeaderJSON:function(){var json=this.getHeader("X-JSON");if(!json)return null;try{json=decodeURIComponent(escape(json))}catch(e){}try{return json.evalJSON(this.request.options.sanitizeJSON||!this.request.isSameOrigin())}catch(e){this.request.dispatchException(e)}},_getResponseJSON:function(){var options=this.request.options;if(!options.evalJSON||options.evalJSON!="force"&&!(this.getHeader("Content-type")||"").include("application/json")||this.responseText.blank())return null;try{return this.responseText.evalJSON(options.sanitizeJSON||!this.request.isSameOrigin())}catch(e){this.request.dispatchException(e)}}});Ajax.Updater=Class.create(Ajax.Request,{initialize:function($super,container,url,options){this.container={success:container.success||container,failure:container.failure||(container.success?null:container)};options=Object.clone(options);var onComplete=options.onComplete;options.onComplete=function(response,json){this.updateContent(response.responseText);if(Object.isFunction(onComplete))onComplete(response,json)}.bind(this);$super(url,options)},updateContent:function(responseText){var receiver=this.container[this.success()?"success":"failure"],options=this.options;if(!options.evalScripts)responseText=responseText.stripScripts();if(receiver=$(receiver)){if(options.insertion){if(Object.isString(options.insertion)){var insertion={};insertion[options.insertion]=responseText;receiver.insert(insertion)}else options.insertion(receiver,responseText)}else receiver.update(responseText)}}});Ajax.PeriodicalUpdater=Class.create(Ajax.Base,{initialize:function($super,container,url,options){$super(options);this.onComplete=this.options.onComplete;this.frequency=this.options.frequency||2;this.decay=this.options.decay||1;this.updater={};this.container=container;this.url=url;this.start()},start:function(){this.options.onComplete=this.updateComplete.bind(this);this.onTimerEvent()},stop:function(){this.updater.options.onComplete=undefined;clearTimeout(this.timer);(this.onComplete||Prototype.emptyFunction).apply(this,arguments)},updateComplete:function(response){if(this.options.decay){this.decay=response.responseText==this.lastText?this.decay*this.options.decay:1;this.lastText=response.responseText}this.timer=this.onTimerEvent.bind(this).delay(this.decay*this.frequency)},onTimerEvent:function(){this.updater=new Ajax.Updater(this.container,this.url,this.options)}});(function(GLOBAL){var UNDEFINED;var SLICE=Array.prototype.slice;var DIV=document.createElement("div");function $(element){if(arguments.length>1){for(var i=0,elements=[],length=arguments.length;i');return el.tagName.toLowerCase()==="input"&&el.name==="x"}catch(err){return false}}();var oldElement=GLOBAL.Element;function Element(tagName,attributes){attributes=attributes||{};tagName=tagName.toLowerCase();if(HAS_EXTENDED_CREATE_ELEMENT_SYNTAX&&attributes.name){tagName="<"+tagName+' name="'+attributes.name+'">';delete attributes.name;return Element.writeAttribute(document.createElement(tagName),attributes)}if(!ELEMENT_CACHE[tagName])ELEMENT_CACHE[tagName]=Element.extend(document.createElement(tagName));var node=shouldUseCreationCache(tagName,attributes)?ELEMENT_CACHE[tagName].cloneNode(false):document.createElement(tagName);return Element.writeAttribute(node,attributes)}GLOBAL.Element=Element;Object.extend(GLOBAL.Element,oldElement||{});if(oldElement)GLOBAL.Element.prototype=oldElement.prototype;Element.Methods={ByTag:{},Simulated:{}};var methods={};var INSPECT_ATTRIBUTES={id:"id",className:"class"};function inspect(element){element=$(element);var result="<"+element.tagName.toLowerCase();var attribute,value;for(var property in INSPECT_ATTRIBUTES){attribute=INSPECT_ATTRIBUTES[property];value=(element[property]||"").toString();if(value)result+=" "+attribute+"="+value.inspect(true)}return result+">"}methods.inspect=inspect;function visible(element){return $(element).style.display!=="none"}function toggle(element,bool){element=$(element);if(Object.isUndefined(bool))bool=!Element.visible(element);Element[bool?"show":"hide"](element);return element}function hide(element){element=$(element);element.style.display="none";return element}function show(element){element=$(element);element.style.display="";return element}Object.extend(methods,{visible:visible,toggle:toggle,hide:hide,show:show});function remove(element){element=$(element);element.parentNode.removeChild(element);return element}var SELECT_ELEMENT_INNERHTML_BUGGY=function(){var el=document.createElement("select"),isBuggy=true;el.innerHTML='';if(el.options&&el.options[0]){isBuggy=el.options[0].nodeName.toUpperCase()!=="OPTION"}el=null;return isBuggy}();var TABLE_ELEMENT_INNERHTML_BUGGY=function(){try{var el=document.createElement("table");if(el&&el.tBodies){el.innerHTML="test";var isBuggy=typeof el.tBodies[0]=="undefined";el=null;return isBuggy}}catch(e){return true}}();var LINK_ELEMENT_INNERHTML_BUGGY=function(){try{var el=document.createElement("div");el.innerHTML="";var isBuggy=el.childNodes.length===0;el=null;return isBuggy}catch(e){return true}}();var ANY_INNERHTML_BUGGY=SELECT_ELEMENT_INNERHTML_BUGGY||TABLE_ELEMENT_INNERHTML_BUGGY||LINK_ELEMENT_INNERHTML_BUGGY;var SCRIPT_ELEMENT_REJECTS_TEXTNODE_APPENDING=function(){var s=document.createElement("script"),isBuggy=false;try{s.appendChild(document.createTextNode(""));isBuggy=!s.firstChild||s.firstChild&&s.firstChild.nodeType!==3}catch(e){isBuggy=true}s=null;return isBuggy}();function update(element,content){element=$(element);var descendants=element.getElementsByTagName("*"),i=descendants.length;while(i--)purgeElement(descendants[i]);if(content&&content.toElement)content=content.toElement();if(Object.isElement(content))return element.update().insert(content);content=Object.toHTML(content);var tagName=element.tagName.toUpperCase();if(tagName==="SCRIPT"&&SCRIPT_ELEMENT_REJECTS_TEXTNODE_APPENDING){element.text=content;return element}if(ANY_INNERHTML_BUGGY){if(tagName in INSERTION_TRANSLATIONS.tags){while(element.firstChild)element.removeChild(element.firstChild);var nodes=getContentFromAnonymousElement(tagName,content.stripScripts());for(var i=0,node;node=nodes[i];i++)element.appendChild(node)}else if(LINK_ELEMENT_INNERHTML_BUGGY&&Object.isString(content)&&content.indexOf("-1){while(element.firstChild)element.removeChild(element.firstChild);var nodes=getContentFromAnonymousElement(tagName,content.stripScripts(),true);for(var i=0,node;node=nodes[i];i++)element.appendChild(node)}else{element.innerHTML=content.stripScripts()}}else{element.innerHTML=content.stripScripts()}content.evalScripts.bind(content).defer();return element}function replace(element,content){element=$(element);if(content&&content.toElement){content=content.toElement()}else if(!Object.isElement(content)){content=Object.toHTML(content);var range=element.ownerDocument.createRange();range.selectNode(element);content.evalScripts.bind(content).defer();content=range.createContextualFragment(content.stripScripts())}element.parentNode.replaceChild(content,element);return element}var INSERTION_TRANSLATIONS={before:function(element,node){element.parentNode.insertBefore(node,element)},top:function(element,node){element.insertBefore(node,element.firstChild)},bottom:function(element,node){element.appendChild(node)},after:function(element,node){element.parentNode.insertBefore(node,element.nextSibling)},tags:{TABLE:["","
    ",1],TBODY:["","
    ",2],TR:["","
    ",3],TD:["
    ","
    ",4],SELECT:["",1]}};var tags=INSERTION_TRANSLATIONS.tags;Object.extend(tags,{THEAD:tags.TBODY,TFOOT:tags.TBODY,TH:tags.TD});function replace_IE(element,content){element=$(element);if(content&&content.toElement)content=content.toElement();if(Object.isElement(content)){element.parentNode.replaceChild(content,element);return element}content=Object.toHTML(content);var parent=element.parentNode,tagName=parent.tagName.toUpperCase();if(tagName in INSERTION_TRANSLATIONS.tags){var nextSibling=Element.next(element);var fragments=getContentFromAnonymousElement(tagName,content.stripScripts());parent.removeChild(element);var iterator;if(nextSibling)iterator=function(node){parent.insertBefore(node,nextSibling)};else iterator=function(node){parent.appendChild(node)};fragments.each(iterator)}else{element.outerHTML=content.stripScripts()}content.evalScripts.bind(content).defer();return element}if("outerHTML"in document.documentElement)replace=replace_IE;function isContent(content){if(Object.isUndefined(content)||content===null)return false;if(Object.isString(content)||Object.isNumber(content))return true;if(Object.isElement(content))return true;if(content.toElement||content.toHTML)return true;return false}function insertContentAt(element,content,position){position=position.toLowerCase();var method=INSERTION_TRANSLATIONS[position];if(content&&content.toElement)content=content.toElement();if(Object.isElement(content)){method(element,content);return element}content=Object.toHTML(content);var tagName=(position==="before"||position==="after"?element.parentNode:element).tagName.toUpperCase();var childNodes=getContentFromAnonymousElement(tagName,content.stripScripts());if(position==="top"||position==="after")childNodes.reverse();for(var i=0,node;node=childNodes[i];i++)method(element,node);content.evalScripts.bind(content).defer()}function insert(element,insertions){element=$(element);if(isContent(insertions))insertions={bottom:insertions};for(var position in insertions)insertContentAt(element,insertions[position],position);return element}function wrap(element,wrapper,attributes){element=$(element);if(Object.isElement(wrapper)){$(wrapper).writeAttribute(attributes||{})}else if(Object.isString(wrapper)){wrapper=new Element(wrapper,attributes)}else{wrapper=new Element("div",wrapper)}if(element.parentNode)element.parentNode.replaceChild(wrapper,element);wrapper.appendChild(element);return wrapper}function cleanWhitespace(element){element=$(element);var node=element.firstChild;while(node){var nextNode=node.nextSibling;if(node.nodeType===Node.TEXT_NODE&&!/\S/.test(node.nodeValue))element.removeChild(node);node=nextNode}return element}function empty(element){return $(element).innerHTML.blank()}function getContentFromAnonymousElement(tagName,html,force){var t=INSERTION_TRANSLATIONS.tags[tagName],div=DIV;var workaround=!!t;if(!workaround&&force){workaround=true;t=["","",0]}if(workaround){div.innerHTML=" "+t[0]+html+t[1];div.removeChild(div.firstChild);for(var i=t[2];i--;)div=div.firstChild}else{div.innerHTML=html}return $A(div.childNodes)}function clone(element,deep){if(!(element=$(element)))return;var clone=element.cloneNode(deep);if(!HAS_UNIQUE_ID_PROPERTY){clone._prototypeUID=UNDEFINED;if(deep){var descendants=Element.select(clone,"*"),i=descendants.length;while(i--)descendants[i]._prototypeUID=UNDEFINED}}return Element.extend(clone)}function purgeElement(element){var uid=getUniqueElementID(element);if(uid){Element.stopObserving(element);if(!HAS_UNIQUE_ID_PROPERTY)element._prototypeUID=UNDEFINED;delete Element.Storage[uid]}}function purgeCollection(elements){var i=elements.length;while(i--)purgeElement(elements[i])}function purgeCollection_IE(elements){var i=elements.length,element,uid;while(i--){element=elements[i];uid=getUniqueElementID(element);delete Element.Storage[uid];delete Event.cache[uid]}}if(HAS_UNIQUE_ID_PROPERTY){purgeCollection=purgeCollection_IE}function purge(element){if(!(element=$(element)))return;purgeElement(element);var descendants=element.getElementsByTagName("*"),i=descendants.length;while(i--)purgeElement(descendants[i]);return null}Object.extend(methods,{remove:remove,update:update,replace:replace,insert:insert,wrap:wrap,cleanWhitespace:cleanWhitespace,empty:empty,clone:clone,purge:purge});function recursivelyCollect(element,property,maximumLength){element=$(element);maximumLength=maximumLength||-1;var elements=[];while(element=element[property]){if(element.nodeType===Node.ELEMENT_NODE)elements.push(Element.extend(element));if(elements.length===maximumLength)break}return elements}function ancestors(element){return recursivelyCollect(element,"parentNode")}function descendants(element){return Element.select(element,"*")}function firstDescendant(element){element=$(element).firstChild;while(element&&element.nodeType!==Node.ELEMENT_NODE)element=element.nextSibling;return $(element)}function immediateDescendants(element){var results=[],child=$(element).firstChild;while(child){if(child.nodeType===Node.ELEMENT_NODE)results.push(Element.extend(child));child=child.nextSibling}return results}function previousSiblings(element){return recursivelyCollect(element,"previousSibling")}function nextSiblings(element){return recursivelyCollect(element,"nextSibling")}function siblings(element){element=$(element);var previous=previousSiblings(element),next=nextSiblings(element);return previous.reverse().concat(next)}function match(element,selector){element=$(element);if(Object.isString(selector))return Prototype.Selector.match(element,selector);return selector.match(element)}function _recursivelyFind(element,property,expression,index){element=$(element),expression=expression||0,index=index||0;if(Object.isNumber(expression)){index=expression,expression=null}while(element=element[property]){if(element.nodeType!==1)continue;if(expression&&!Prototype.Selector.match(element,expression))continue;if(--index>=0)continue;return Element.extend(element)}}function up(element,expression,index){element=$(element);if(arguments.length===1)return $(element.parentNode);return _recursivelyFind(element,"parentNode",expression,index)}function down(element,expression,index){if(arguments.length===1)return firstDescendant(element);element=$(element),expression=expression||0,index=index||0;if(Object.isNumber(expression))index=expression,expression="*";var node=Prototype.Selector.select(expression,element)[index];return Element.extend(node)}function previous(element,expression,index){return _recursivelyFind(element,"previousSibling",expression,index)}function next(element,expression,index){return _recursivelyFind(element,"nextSibling",expression,index)}function select(element){element=$(element);var expressions=SLICE.call(arguments,1).join(", ");return Prototype.Selector.select(expressions,element)}function adjacent(element){element=$(element);var expressions=SLICE.call(arguments,1).join(", ");var siblings=Element.siblings(element),results=[];for(var i=0,sibling;sibling=siblings[i];i++){if(Prototype.Selector.match(sibling,expressions))results.push(sibling)}return results}function descendantOf_DOM(element,ancestor){element=$(element),ancestor=$(ancestor);while(element=element.parentNode)if(element===ancestor)return true;return false}function descendantOf_contains(element,ancestor){element=$(element),ancestor=$(ancestor);if(!ancestor.contains)return descendantOf_DOM(element,ancestor);return ancestor.contains(element)&&ancestor!==element}function descendantOf_compareDocumentPosition(element,ancestor){element=$(element),ancestor=$(ancestor);return(element.compareDocumentPosition(ancestor)&8)===8}var descendantOf;if(DIV.compareDocumentPosition){descendantOf=descendantOf_compareDocumentPosition}else if(DIV.contains){descendantOf=descendantOf_contains}else{descendantOf=descendantOf_DOM}Object.extend(methods,{recursivelyCollect:recursivelyCollect,ancestors:ancestors,descendants:descendants,firstDescendant:firstDescendant,immediateDescendants:immediateDescendants,previousSiblings:previousSiblings,nextSiblings:nextSiblings,siblings:siblings,match:match,up:up,down:down,previous:previous,next:next,select:select,adjacent:adjacent,descendantOf:descendantOf,getElementsBySelector:select,childElements:immediateDescendants});var idCounter=1;function identify(element){element=$(element);var id=Element.readAttribute(element,"id");if(id)return id;do{id="anonymous_element_"+idCounter++}while($(id));Element.writeAttribute(element,"id",id);return id}function readAttribute(element,name){return $(element).getAttribute(name)}function readAttribute_IE(element,name){element=$(element);var table=ATTRIBUTE_TRANSLATIONS.read;if(table.values[name])return table.values[name](element,name);if(table.names[name])name=table.names[name];if(name.include(":")){if(!element.attributes||!element.attributes[name])return null;return element.attributes[name].value}return element.getAttribute(name)}function readAttribute_Opera(element,name){if(name==="title")return element.title;return element.getAttribute(name)}var PROBLEMATIC_ATTRIBUTE_READING=function(){DIV.setAttribute("onclick",[]);var value=DIV.getAttribute("onclick");var isFunction=Object.isArray(value);DIV.removeAttribute("onclick");return isFunction}();if(PROBLEMATIC_ATTRIBUTE_READING){readAttribute=readAttribute_IE}else if(Prototype.Browser.Opera){readAttribute=readAttribute_Opera}function writeAttribute(element,name,value){element=$(element);var attributes={},table=ATTRIBUTE_TRANSLATIONS.write; +Math.toRadians = function(angleInDegrees){ + return angleInDegrees * (Math.PI/180) +} -if(typeof name==="object"){attributes=name}else{attributes[name]=Object.isUndefined(value)?true:value}for(var attr in attributes){name=table.names[attr]||attr;value=attributes[attr];if(table.values[attr])name=table.values[attr](element,value)||name;if(value===false||value===null)element.removeAttribute(name);else if(value===true)element.setAttribute(name,name);else element.setAttribute(name,value)}return element}var PROBLEMATIC_HAS_ATTRIBUTE_WITH_CHECKBOXES=function(){if(!HAS_EXTENDED_CREATE_ELEMENT_SYNTAX){return false}var checkbox=document.createElement('');checkbox.checked=true;var node=checkbox.getAttributeNode("checked");return!node||!node.specified}();function hasAttribute(element,attribute){attribute=ATTRIBUTE_TRANSLATIONS.has[attribute]||attribute;var node=$(element).getAttributeNode(attribute);return!!(node&&node.specified)}function hasAttribute_IE(element,attribute){if(attribute==="checked"){return element.checked}return hasAttribute(element,attribute)}GLOBAL.Element.Methods.Simulated.hasAttribute=PROBLEMATIC_HAS_ATTRIBUTE_WITH_CHECKBOXES?hasAttribute_IE:hasAttribute;function classNames(element){return new Element.ClassNames(element)}var regExpCache={};function getRegExpForClassName(className){if(regExpCache[className])return regExpCache[className];var re=new RegExp("(^|\\s+)"+className+"(\\s+|$)");regExpCache[className]=re;return re}function hasClassName(element,className){if(!(element=$(element)))return;var elementClassName=element.className;if(elementClassName.length===0)return false;if(elementClassName===className)return true;return getRegExpForClassName(className).test(elementClassName)}function addClassName(element,className){if(!(element=$(element)))return;if(!hasClassName(element,className))element.className+=(element.className?" ":"")+className;return element}function removeClassName(element,className){if(!(element=$(element)))return;element.className=element.className.replace(getRegExpForClassName(className)," ").strip();return element}function toggleClassName(element,className,bool){if(!(element=$(element)))return;if(Object.isUndefined(bool))bool=!hasClassName(element,className);var method=Element[bool?"addClassName":"removeClassName"];return method(element,className)}var ATTRIBUTE_TRANSLATIONS={};var classProp="className",forProp="for";DIV.setAttribute(classProp,"x");if(DIV.className!=="x"){DIV.setAttribute("class","x");if(DIV.className==="x")classProp="class"}var LABEL=document.createElement("label");LABEL.setAttribute(forProp,"x");if(LABEL.htmlFor!=="x"){LABEL.setAttribute("htmlFor","x");if(LABEL.htmlFor==="x")forProp="htmlFor"}LABEL=null;function _getAttr(element,attribute){return element.getAttribute(attribute)}function _getAttr2(element,attribute){return element.getAttribute(attribute,2)}function _getAttrNode(element,attribute){var node=element.getAttributeNode(attribute);return node?node.value:""}function _getFlag(element,attribute){return $(element).hasAttribute(attribute)?attribute:null}DIV.onclick=Prototype.emptyFunction;var onclickValue=DIV.getAttribute("onclick");var _getEv;if(String(onclickValue).indexOf("{")>-1){_getEv=function(element,attribute){var value=element.getAttribute(attribute);if(!value)return null;value=value.toString();value=value.split("{")[1];value=value.split("}")[0];return value.strip()}}else if(onclickValue===""){_getEv=function(element,attribute){var value=element.getAttribute(attribute);if(!value)return null;return value.strip()}}ATTRIBUTE_TRANSLATIONS.read={names:{class:classProp,className:classProp,for:forProp,htmlFor:forProp},values:{style:function(element){return element.style.cssText.toLowerCase()},title:function(element){return element.title}}};ATTRIBUTE_TRANSLATIONS.write={names:{className:"class",htmlFor:"for",cellpadding:"cellPadding",cellspacing:"cellSpacing"},values:{checked:function(element,value){element.checked=!!value},style:function(element,value){element.style.cssText=value?value:""}}};ATTRIBUTE_TRANSLATIONS.has={names:{}};Object.extend(ATTRIBUTE_TRANSLATIONS.write.names,ATTRIBUTE_TRANSLATIONS.read.names);var CAMEL_CASED_ATTRIBUTE_NAMES=$w("colSpan rowSpan vAlign dateTime "+"accessKey tabIndex encType maxLength readOnly longDesc frameBorder");for(var i=0,attr;attr=CAMEL_CASED_ATTRIBUTE_NAMES[i];i++){ATTRIBUTE_TRANSLATIONS.write.names[attr.toLowerCase()]=attr;ATTRIBUTE_TRANSLATIONS.has.names[attr.toLowerCase()]=attr}Object.extend(ATTRIBUTE_TRANSLATIONS.read.values,{href:_getAttr2,src:_getAttr2,type:_getAttr,action:_getAttrNode,disabled:_getFlag,checked:_getFlag,readonly:_getFlag,multiple:_getFlag,onload:_getEv,onunload:_getEv,onclick:_getEv,ondblclick:_getEv,onmousedown:_getEv,onmouseup:_getEv,onmouseover:_getEv,onmousemove:_getEv,onmouseout:_getEv,onfocus:_getEv,onblur:_getEv,onkeypress:_getEv,onkeydown:_getEv,onkeyup:_getEv,onsubmit:_getEv,onreset:_getEv,onselect:_getEv,onchange:_getEv});Object.extend(methods,{identify:identify,readAttribute:readAttribute,writeAttribute:writeAttribute,classNames:classNames,hasClassName:hasClassName,addClassName:addClassName,removeClassName:removeClassName,toggleClassName:toggleClassName});function normalizeStyleName(style){if(style==="float"||style==="styleFloat")return"cssFloat";return style.camelize()}function normalizeStyleName_IE(style){if(style==="float"||style==="cssFloat")return"styleFloat";return style.camelize()}function setStyle(element,styles){element=$(element);var elementStyle=element.style,match;if(Object.isString(styles)){elementStyle.cssText+=";"+styles;if(styles.include("opacity")){var opacity=styles.match(/opacity:\s*(\d?\.?\d*)/)[1];Element.setOpacity(element,opacity)}return element}for(var property in styles){if(property==="opacity"){Element.setOpacity(element,styles[property])}else{var value=styles[property];if(property==="float"||property==="cssFloat"){property=Object.isUndefined(elementStyle.styleFloat)?"cssFloat":"styleFloat"}elementStyle[property]=value}}return element}function getStyle(element,style){element=$(element);style=normalizeStyleName(style);var value=element.style[style];if(!value||value==="auto"){var css=document.defaultView.getComputedStyle(element,null);value=css?css[style]:null}if(style==="opacity")return value?parseFloat(value):1;return value==="auto"?null:value}function getStyle_Opera(element,style){switch(style){case"height":case"width":if(!Element.visible(element))return null;var dim=parseInt(getStyle(element,style),10);if(dim!==element["offset"+style.capitalize()])return dim+"px";return Element.measure(element,style);default:return getStyle(element,style)}}function getStyle_IE(element,style){element=$(element);style=normalizeStyleName_IE(style);var value=element.style[style];if(!value&&element.currentStyle){value=element.currentStyle[style]}if(style==="opacity"&&!STANDARD_CSS_OPACITY_SUPPORTED)return getOpacity_IE(element);if(value==="auto"){if((style==="width"||style==="height")&&Element.visible(element))return Element.measure(element,style)+"px";return null}return value}function stripAlphaFromFilter_IE(filter){return(filter||"").replace(/alpha\([^\)]*\)/gi,"")}function hasLayout_IE(element){if(!element.currentStyle||!element.currentStyle.hasLayout)element.style.zoom=1;return element}var STANDARD_CSS_OPACITY_SUPPORTED=function(){DIV.style.cssText="opacity:.55";return/^0.55/.test(DIV.style.opacity)}();function setOpacity(element,value){element=$(element);if(value==1||value==="")value="";else if(value<1e-5)value=0;element.style.opacity=value;return element}function setOpacity_IE(element,value){if(STANDARD_CSS_OPACITY_SUPPORTED)return setOpacity(element,value);element=hasLayout_IE($(element));var filter=Element.getStyle(element,"filter"),style=element.style;if(value==1||value===""){filter=stripAlphaFromFilter_IE(filter);if(filter)style.filter=filter;else style.removeAttribute("filter");return element}if(value<1e-5)value=0;style.filter=stripAlphaFromFilter_IE(filter)+"alpha(opacity="+value*100+")";return element}function getOpacity(element){return Element.getStyle(element,"opacity")}function getOpacity_IE(element){if(STANDARD_CSS_OPACITY_SUPPORTED)return getOpacity(element);var filter=Element.getStyle(element,"filter");if(filter.length===0)return 1;var match=(filter||"").match(/alpha\(opacity=(.*)\)/);if(match&&match[1])return parseFloat(match[1])/100;return 1}Object.extend(methods,{setStyle:setStyle,getStyle:getStyle,setOpacity:setOpacity,getOpacity:getOpacity});if("styleFloat"in DIV.style){methods.getStyle=getStyle_IE;methods.setOpacity=setOpacity_IE;methods.getOpacity=getOpacity_IE}var UID=0;GLOBAL.Element.Storage={UID:1};function getUniqueElementID(element){if(element===window)return 0;if(typeof element._prototypeUID==="undefined")element._prototypeUID=Element.Storage.UID++;return element._prototypeUID}function getUniqueElementID_IE(element){if(element===window)return 0;if(element==document)return 1;return element.uniqueID}var HAS_UNIQUE_ID_PROPERTY="uniqueID"in DIV;if(HAS_UNIQUE_ID_PROPERTY)getUniqueElementID=getUniqueElementID_IE;function getStorage(element){if(!(element=$(element)))return;var uid=getUniqueElementID(element);if(!Element.Storage[uid])Element.Storage[uid]=$H();return Element.Storage[uid]}function store(element,key,value){if(!(element=$(element)))return;var storage=getStorage(element);if(arguments.length===2){storage.update(key)}else{storage.set(key,value)}return element}function retrieve(element,key,defaultValue){if(!(element=$(element)))return;var storage=getStorage(element),value=storage.get(key);if(Object.isUndefined(value)){storage.set(key,defaultValue);value=defaultValue}return value}Object.extend(methods,{getStorage:getStorage,store:store,retrieve:retrieve});var Methods={},ByTag=Element.Methods.ByTag,F=Prototype.BrowserFeatures;if(!F.ElementExtensions&&"__proto__"in DIV){GLOBAL.HTMLElement={};GLOBAL.HTMLElement.prototype=DIV["__proto__"];F.ElementExtensions=true}function checkElementPrototypeDeficiency(tagName){if(typeof window.Element==="undefined")return false;if(!HAS_EXTENDED_CREATE_ELEMENT_SYNTAX)return false;var proto=window.Element.prototype;if(proto){var id="_"+(Math.random()+"").slice(2),el=document.createElement(tagName);proto[id]="x";var isBuggy=el[id]!=="x";delete proto[id];el=null;return isBuggy}return false}var HTMLOBJECTELEMENT_PROTOTYPE_BUGGY=checkElementPrototypeDeficiency("object");function extendElementWith(element,methods){for(var property in methods){var value=methods[property];if(Object.isFunction(value)&&!(property in element))element[property]=value.methodize()}}var EXTENDED={};function elementIsExtended(element){var uid=getUniqueElementID(element);return uid in EXTENDED}function extend(element){if(!element||elementIsExtended(element))return element;if(element.nodeType!==Node.ELEMENT_NODE||element==window)return element;var methods=Object.clone(Methods),tagName=element.tagName.toUpperCase();if(ByTag[tagName])Object.extend(methods,ByTag[tagName]);extendElementWith(element,methods);EXTENDED[getUniqueElementID(element)]=true;return element}function extend_IE8(element){if(!element||elementIsExtended(element))return element;var t=element.tagName;if(t&&/^(?:object|applet|embed)$/i.test(t)){extendElementWith(element,Element.Methods);extendElementWith(element,Element.Methods.Simulated);extendElementWith(element,Element.Methods.ByTag[t.toUpperCase()])}return element}if(F.SpecificElementExtensions){extend=HTMLOBJECTELEMENT_PROTOTYPE_BUGGY?extend_IE8:Prototype.K}function addMethodsToTagName(tagName,methods){tagName=tagName.toUpperCase();if(!ByTag[tagName])ByTag[tagName]={};Object.extend(ByTag[tagName],methods)}function mergeMethods(destination,methods,onlyIfAbsent){if(Object.isUndefined(onlyIfAbsent))onlyIfAbsent=false;for(var property in methods){var value=methods[property];if(!Object.isFunction(value))continue;if(!onlyIfAbsent||!(property in destination))destination[property]=value.methodize()}}function findDOMClass(tagName){var klass;var trans={OPTGROUP:"OptGroup",TEXTAREA:"TextArea",P:"Paragraph",FIELDSET:"FieldSet",UL:"UList",OL:"OList",DL:"DList",DIR:"Directory",H1:"Heading",H2:"Heading",H3:"Heading",H4:"Heading",H5:"Heading",H6:"Heading",Q:"Quote",INS:"Mod",DEL:"Mod",A:"Anchor",IMG:"Image",CAPTION:"TableCaption",COL:"TableCol",COLGROUP:"TableCol",THEAD:"TableSection",TFOOT:"TableSection",TBODY:"TableSection",TR:"TableRow",TH:"TableCell",TD:"TableCell",FRAMESET:"FrameSet",IFRAME:"IFrame"};if(trans[tagName])klass="HTML"+trans[tagName]+"Element";if(window[klass])return window[klass];klass="HTML"+tagName+"Element";if(window[klass])return window[klass];klass="HTML"+tagName.capitalize()+"Element";if(window[klass])return window[klass];var element=document.createElement(tagName),proto=element["__proto__"]||element.constructor.prototype;element=null;return proto}function addMethods(methods){if(arguments.length===0)addFormMethods();if(arguments.length===2){var tagName=methods;methods=arguments[1]}if(!tagName){Object.extend(Element.Methods,methods||{})}else{if(Object.isArray(tagName)){for(var i=0,tag;tag=tagName[i];i++)addMethodsToTagName(tag,methods)}else{addMethodsToTagName(tagName,methods)}}var ELEMENT_PROTOTYPE=window.HTMLElement?HTMLElement.prototype:Element.prototype;if(F.ElementExtensions){mergeMethods(ELEMENT_PROTOTYPE,Element.Methods);mergeMethods(ELEMENT_PROTOTYPE,Element.Methods.Simulated,true)}if(F.SpecificElementExtensions){for(var tag in Element.Methods.ByTag){var klass=findDOMClass(tag);if(Object.isUndefined(klass))continue;mergeMethods(klass.prototype,ByTag[tag])}}Object.extend(Element,Element.Methods);Object.extend(Element,Element.Methods.Simulated);delete Element.ByTag;delete Element.Simulated;Element.extend.refresh();ELEMENT_CACHE={}}Object.extend(GLOBAL.Element,{extend:extend,addMethods:addMethods});if(extend===Prototype.K){GLOBAL.Element.extend.refresh=Prototype.emptyFunction}else{GLOBAL.Element.extend.refresh=function(){if(Prototype.BrowserFeatures.ElementExtensions)return;Object.extend(Methods,Element.Methods);Object.extend(Methods,Element.Methods.Simulated);EXTENDED={}}}function addFormMethods(){Object.extend(Form,Form.Methods);Object.extend(Form.Element,Form.Element.Methods);Object.extend(Element.Methods.ByTag,{FORM:Object.clone(Form.Methods),INPUT:Object.clone(Form.Element.Methods),SELECT:Object.clone(Form.Element.Methods),TEXTAREA:Object.clone(Form.Element.Methods),BUTTON:Object.clone(Form.Element.Methods)})}Element.addMethods(methods);function destroyCache_IE(){DIV=null;ELEMENT_CACHE=null}if(window.attachEvent)window.attachEvent("onunload",destroyCache_IE)})(this);(function(){function toDecimal(pctString){var match=pctString.match(/^(\d+)%?$/i);if(!match)return null;return Number(match[1])/100}function getRawStyle(element,style){element=$(element);var value=element.style[style];if(!value||value==="auto"){var css=document.defaultView.getComputedStyle(element,null);value=css?css[style]:null}if(style==="opacity")return value?parseFloat(value):1;return value==="auto"?null:value}function getRawStyle_IE(element,style){var value=element.style[style];if(!value&&element.currentStyle){value=element.currentStyle[style]}return value}function getContentWidth(element,context){var boxWidth=element.offsetWidth;var bl=getPixelValue(element,"borderLeftWidth",context)||0;var br=getPixelValue(element,"borderRightWidth",context)||0;var pl=getPixelValue(element,"paddingLeft",context)||0;var pr=getPixelValue(element,"paddingRight",context)||0;return boxWidth-bl-br-pl-pr}if("currentStyle"in document.documentElement){getRawStyle=getRawStyle_IE}function getPixelValue(value,property,context){var element=null;if(Object.isElement(value)){element=value;value=getRawStyle(element,property)}if(value===null||Object.isUndefined(value)){return null}if(/^(?:-)?\d+(\.\d+)?(px)?$/i.test(value)){return window.parseFloat(value)}var isPercentage=value.include("%"),isViewport=context===document.viewport;if(/\d/.test(value)&&element&&element.runtimeStyle&&!(isPercentage&&isViewport)){var style=element.style.left,rStyle=element.runtimeStyle.left;element.runtimeStyle.left=element.currentStyle.left;element.style.left=value||0;value=element.style.pixelLeft;element.style.left=style;element.runtimeStyle.left=rStyle;return value}if(element&&isPercentage){context=context||element.parentNode;var decimal=toDecimal(value),whole=null;var isHorizontal=property.include("left")||property.include("right")||property.include("width");var isVertical=property.include("top")||property.include("bottom")||property.include("height");if(context===document.viewport){if(isHorizontal){whole=document.viewport.getWidth()}else if(isVertical){whole=document.viewport.getHeight()}}else{if(isHorizontal){whole=$(context).measure("width")}else if(isVertical){whole=$(context).measure("height")}}return whole===null?0:whole*decimal}return 0}function toCSSPixels(number){if(Object.isString(number)&&number.endsWith("px"))return number;return number+"px"}function isDisplayed(element){while(element&&element.parentNode){var display=element.getStyle("display");if(display==="none"){return false}element=$(element.parentNode)}return true}var hasLayout=Prototype.K;if("currentStyle"in document.documentElement){hasLayout=function(element){if(!element.currentStyle.hasLayout){element.style.zoom=1}return element}}function cssNameFor(key){if(key.include("border"))key=key+"-width";return key.camelize()}Element.Layout=Class.create(Hash,{initialize:function($super,element,preCompute){$super();this.element=$(element);Element.Layout.PROPERTIES.each(function(property){this._set(property,null)},this);if(preCompute){this._preComputing=true;this._begin();Element.Layout.PROPERTIES.each(this._compute,this);this._end();this._preComputing=false}},_set:function(property,value){return Hash.prototype.set.call(this,property,value)},set:function(property,value){throw"Properties of Element.Layout are read-only."},get:function($super,property){var value=$super(property);return value===null?this._compute(property):value},_begin:function(){if(this._isPrepared())return;var element=this.element;if(isDisplayed(element)){this._setPrepared(true);return}var originalStyles={position:element.style.position||"",width:element.style.width||"",visibility:element.style.visibility||"",display:element.style.display||""};element.store("prototype_original_styles",originalStyles);var position=getRawStyle(element,"position"),width=element.offsetWidth;if(width===0||width===null){element.style.display="block";width=element.offsetWidth}var context=position==="fixed"?document.viewport:element.parentNode;var tempStyles={visibility:"hidden",display:"block"};if(position!=="fixed")tempStyles.position="absolute";element.setStyle(tempStyles);var positionedWidth=element.offsetWidth,newWidth;if(width&&positionedWidth===width){newWidth=getContentWidth(element,context)}else if(position==="absolute"||position==="fixed"){newWidth=getContentWidth(element,context)}else{var parent=element.parentNode,pLayout=$(parent).getLayout();newWidth=pLayout.get("width")-this.get("margin-left")-this.get("border-left")-this.get("padding-left")-this.get("padding-right")-this.get("border-right")-this.get("margin-right")}element.setStyle({width:newWidth+"px"});this._setPrepared(true)},_end:function(){var element=this.element;var originalStyles=element.retrieve("prototype_original_styles");element.store("prototype_original_styles",null);element.setStyle(originalStyles);this._setPrepared(false)},_compute:function(property){var COMPUTATIONS=Element.Layout.COMPUTATIONS;if(!(property in COMPUTATIONS)){throw"Property not found."}return this._set(property,COMPUTATIONS[property].call(this,this.element))},_isPrepared:function(){return this.element.retrieve("prototype_element_layout_prepared",false)},_setPrepared:function(bool){return this.element.store("prototype_element_layout_prepared",bool)},toObject:function(){var args=$A(arguments);var keys=args.length===0?Element.Layout.PROPERTIES:args.join(" ").split(" ");var obj={};keys.each(function(key){if(!Element.Layout.PROPERTIES.include(key))return;var value=this.get(key);if(value!=null)obj[key]=value},this);return obj},toHash:function(){var obj=this.toObject.apply(this,arguments);return new Hash(obj)},toCSS:function(){var args=$A(arguments);var keys=args.length===0?Element.Layout.PROPERTIES:args.join(" ").split(" ");var css={};keys.each(function(key){if(!Element.Layout.PROPERTIES.include(key))return;if(Element.Layout.COMPOSITE_PROPERTIES.include(key))return;var value=this.get(key);if(value!=null)css[cssNameFor(key)]=value+"px"},this);return css},inspect:function(){return"#"}});Object.extend(Element.Layout,{PROPERTIES:$w("height width top left right bottom border-left border-right border-top border-bottom padding-left padding-right padding-top padding-bottom margin-top margin-bottom margin-left margin-right padding-box-width padding-box-height border-box-width border-box-height margin-box-width margin-box-height"),COMPOSITE_PROPERTIES:$w("padding-box-width padding-box-height margin-box-width margin-box-height border-box-width border-box-height"),COMPUTATIONS:{height:function(element){if(!this._preComputing)this._begin();var bHeight=this.get("border-box-height");if(bHeight<=0){if(!this._preComputing)this._end();return 0}var bTop=this.get("border-top"),bBottom=this.get("border-bottom");var pTop=this.get("padding-top"),pBottom=this.get("padding-bottom");if(!this._preComputing)this._end();return bHeight-bTop-bBottom-pTop-pBottom},width:function(element){if(!this._preComputing)this._begin();var bWidth=this.get("border-box-width");if(bWidth<=0){if(!this._preComputing)this._end();return 0}var bLeft=this.get("border-left"),bRight=this.get("border-right");var pLeft=this.get("padding-left"),pRight=this.get("padding-right");if(!this._preComputing)this._end();return bWidth-bLeft-bRight-pLeft-pRight},"padding-box-height":function(element){var height=this.get("height"),pTop=this.get("padding-top"),pBottom=this.get("padding-bottom");return height+pTop+pBottom},"padding-box-width":function(element){var width=this.get("width"),pLeft=this.get("padding-left"),pRight=this.get("padding-right");return width+pLeft+pRight},"border-box-height":function(element){if(!this._preComputing)this._begin();var height=element.offsetHeight;if(!this._preComputing)this._end();return height},"border-box-width":function(element){if(!this._preComputing)this._begin();var width=element.offsetWidth;if(!this._preComputing)this._end();return width},"margin-box-height":function(element){var bHeight=this.get("border-box-height"),mTop=this.get("margin-top"),mBottom=this.get("margin-bottom");if(bHeight<=0)return 0;return bHeight+mTop+mBottom},"margin-box-width":function(element){var bWidth=this.get("border-box-width"),mLeft=this.get("margin-left"),mRight=this.get("margin-right");if(bWidth<=0)return 0;return bWidth+mLeft+mRight},top:function(element){var offset=element.positionedOffset();return offset.top},bottom:function(element){var offset=element.positionedOffset(),parent=element.getOffsetParent(),pHeight=parent.measure("height");var mHeight=this.get("border-box-height");return pHeight-mHeight-offset.top},left:function(element){var offset=element.positionedOffset();return offset.left},right:function(element){var offset=element.positionedOffset(),parent=element.getOffsetParent(),pWidth=parent.measure("width");var mWidth=this.get("border-box-width");return pWidth-mWidth-offset.left},"padding-top":function(element){return getPixelValue(element,"paddingTop")},"padding-bottom":function(element){return getPixelValue(element,"paddingBottom")},"padding-left":function(element){return getPixelValue(element,"paddingLeft")},"padding-right":function(element){return getPixelValue(element,"paddingRight")},"border-top":function(element){return getPixelValue(element,"borderTopWidth")},"border-bottom":function(element){return getPixelValue(element,"borderBottomWidth")},"border-left":function(element){return getPixelValue(element,"borderLeftWidth")},"border-right":function(element){return getPixelValue(element,"borderRightWidth")},"margin-top":function(element){return getPixelValue(element,"marginTop")},"margin-bottom":function(element){return getPixelValue(element,"marginBottom")},"margin-left":function(element){return getPixelValue(element,"marginLeft")},"margin-right":function(element){return getPixelValue(element,"marginRight")}}});if("getBoundingClientRect"in document.documentElement){Object.extend(Element.Layout.COMPUTATIONS,{right:function(element){var parent=hasLayout(element.getOffsetParent());var rect=element.getBoundingClientRect(),pRect=parent.getBoundingClientRect();return(pRect.right-rect.right).round()},bottom:function(element){var parent=hasLayout(element.getOffsetParent());var rect=element.getBoundingClientRect(),pRect=parent.getBoundingClientRect();return(pRect.bottom-rect.bottom).round()}})}Element.Offset=Class.create({initialize:function(left,top){this.left=left.round();this.top=top.round();this[0]=this.left;this[1]=this.top},relativeTo:function(offset){return new Element.Offset(this.left-offset.left,this.top-offset.top)},inspect:function(){return"#".interpolate(this)},toString:function(){return"[#{left}, #{top}]".interpolate(this)},toArray:function(){return[this.left,this.top]}});function getLayout(element,preCompute){return new Element.Layout(element,preCompute)}function measure(element,property){return $(element).getLayout().get(property)}function getHeight(element){return Element.getDimensions(element).height}function getWidth(element){return Element.getDimensions(element).width}function getDimensions(element){element=$(element);var display=Element.getStyle(element,"display");if(display&&display!=="none"){return{width:element.offsetWidth,height:element.offsetHeight}}var style=element.style;var originalStyles={visibility:style.visibility,position:style.position,display:style.display};var newStyles={visibility:"hidden",display:"block"};if(originalStyles.position!=="fixed")newStyles.position="absolute";Element.setStyle(element,newStyles);var dimensions={width:element.offsetWidth,height:element.offsetHeight};Element.setStyle(element,originalStyles);return dimensions}function getOffsetParent(element){element=$(element);if(isDocument(element)||isDetached(element)||isBody(element)||isHtml(element))return $(document.body);var isInline=Element.getStyle(element,"display")==="inline";if(!isInline&&element.offsetParent)return $(element.offsetParent);while((element=element.parentNode)&&element!==document.body){if(Element.getStyle(element,"position")!=="static"){return isHtml(element)?$(document.body):$(element)}}return $(document.body)}function cumulativeOffset(element){element=$(element);var valueT=0,valueL=0;if(element.parentNode){do{valueT+=element.offsetTop||0;valueL+=element.offsetLeft||0;element=element.offsetParent}while(element)}return new Element.Offset(valueL,valueT)}function positionedOffset(element){element=$(element);var layout=element.getLayout();var valueT=0,valueL=0;do{valueT+=element.offsetTop||0;valueL+=element.offsetLeft||0;element=element.offsetParent;if(element){if(isBody(element))break;var p=Element.getStyle(element,"position");if(p!=="static")break}}while(element);valueL-=layout.get("margin-top");valueT-=layout.get("margin-left");return new Element.Offset(valueL,valueT)}function cumulativeScrollOffset(element){var valueT=0,valueL=0;do{if(element===document.body){var bodyScrollNode=document.documentElement||document.body.parentNode||document.body;valueT+=!Object.isUndefined(window.pageYOffset)?window.pageYOffset:bodyScrollNode.scrollTop||0;valueL+=!Object.isUndefined(window.pageXOffset)?window.pageXOffset:bodyScrollNode.scrollLeft||0;break}else{valueT+=element.scrollTop||0;valueL+=element.scrollLeft||0;element=element.parentNode}}while(element);return new Element.Offset(valueL,valueT)}function viewportOffset(forElement){var valueT=0,valueL=0,docBody=document.body;forElement=$(forElement);var element=forElement;do{valueT+=element.offsetTop||0;valueL+=element.offsetLeft||0;if(element.offsetParent==docBody&&Element.getStyle(element,"position")=="absolute")break}while(element=element.offsetParent);element=forElement;do{if(element!=docBody){valueT-=element.scrollTop||0;valueL-=element.scrollLeft||0}}while(element=element.parentNode);return new Element.Offset(valueL,valueT)}function absolutize(element){element=$(element);if(Element.getStyle(element,"position")==="absolute"){return element}var offsetParent=getOffsetParent(element);var eOffset=element.viewportOffset(),pOffset=offsetParent.viewportOffset();var offset=eOffset.relativeTo(pOffset);var layout=element.getLayout();element.store("prototype_absolutize_original_styles",{position:element.getStyle("position"),left:element.getStyle("left"),top:element.getStyle("top"),width:element.getStyle("width"),height:element.getStyle("height")});element.setStyle({position:"absolute",top:offset.top+"px",left:offset.left+"px",width:layout.get("width")+"px",height:layout.get("height")+"px"});return element}function relativize(element){element=$(element);if(Element.getStyle(element,"position")==="relative"){return element}var originalStyles=element.retrieve("prototype_absolutize_original_styles");if(originalStyles)element.setStyle(originalStyles);return element}function scrollTo(element){element=$(element);var pos=Element.cumulativeOffset(element);window.scrollTo(pos.left,pos.top);return element}function makePositioned(element){element=$(element);var position=Element.getStyle(element,"position"),styles={};if(position==="static"||!position){styles.position="relative";if(Prototype.Browser.Opera){styles.top=0;styles.left=0}Element.setStyle(element,styles);Element.store(element,"prototype_made_positioned",true)}return element}function undoPositioned(element){element=$(element);var storage=Element.getStorage(element),madePositioned=storage.get("prototype_made_positioned");if(madePositioned){storage.unset("prototype_made_positioned");Element.setStyle(element,{position:"",top:"",bottom:"",left:"",right:""})}return element}function makeClipping(element){element=$(element);var storage=Element.getStorage(element),madeClipping=storage.get("prototype_made_clipping");if(Object.isUndefined(madeClipping)){var overflow=Element.getStyle(element,"overflow");storage.set("prototype_made_clipping",overflow);if(overflow!=="hidden")element.style.overflow="hidden"}return element}function undoClipping(element){element=$(element);var storage=Element.getStorage(element),overflow=storage.get("prototype_made_clipping");if(!Object.isUndefined(overflow)){storage.unset("prototype_made_clipping");element.style.overflow=overflow||""}return element}function clonePosition(element,source,options){options=Object.extend({setLeft:true,setTop:true,setWidth:true,setHeight:true,offsetTop:0,offsetLeft:0},options||{});source=$(source);element=$(element);var p,delta,layout,styles={};if(options.setLeft||options.setTop){p=Element.viewportOffset(source);delta=[0,0];if(Element.getStyle(element,"position")==="absolute"){var parent=Element.getOffsetParent(element);if(parent!==document.body)delta=Element.viewportOffset(parent)}}if(options.setWidth||options.setHeight){layout=Element.getLayout(source)}if(options.setLeft)styles.left=p[0]-delta[0]+options.offsetLeft+"px";if(options.setTop)styles.top=p[1]-delta[1]+options.offsetTop+"px";if(options.setWidth)styles.width=layout.get("border-box-width")+"px";if(options.setHeight)styles.height=layout.get("border-box-height")+"px";return Element.setStyle(element,styles)}if(Prototype.Browser.IE){getOffsetParent=getOffsetParent.wrap(function(proceed,element){element=$(element);if(isDocument(element)||isDetached(element)||isBody(element)||isHtml(element))return $(document.body);var position=element.getStyle("position");if(position!=="static")return proceed(element);element.setStyle({position:"relative"});var value=proceed(element);element.setStyle({position:position});return value});positionedOffset=positionedOffset.wrap(function(proceed,element){element=$(element);if(!element.parentNode)return new Element.Offset(0,0);var position=element.getStyle("position"); +Math.crossProduct = function(x, y){ + [ + x[1]*y[2]-x[2]*y[1], + x[2]*y[0]-x[0]*y[2], + x[0]*y[1]-x[1]*y[0] + ] +} -if(position!=="static")return proceed(element);var offsetParent=element.getOffsetParent();if(offsetParent&&offsetParent.getStyle("position")==="fixed")hasLayout(offsetParent);element.setStyle({position:"relative"});var value=proceed(element);element.setStyle({position:position});return value})}else if(Prototype.Browser.Webkit){cumulativeOffset=function(element){element=$(element);var valueT=0,valueL=0;do{valueT+=element.offsetTop||0;valueL+=element.offsetLeft||0;if(element.offsetParent==document.body){if(Element.getStyle(element,"position")=="absolute")break}element=element.offsetParent}while(element);return new Element.Offset(valueL,valueT)}}Element.addMethods({getLayout:getLayout,measure:measure,getWidth:getWidth,getHeight:getHeight,getDimensions:getDimensions,getOffsetParent:getOffsetParent,cumulativeOffset:cumulativeOffset,positionedOffset:positionedOffset,cumulativeScrollOffset:cumulativeScrollOffset,viewportOffset:viewportOffset,absolutize:absolutize,relativize:relativize,scrollTo:scrollTo,makePositioned:makePositioned,undoPositioned:undoPositioned,makeClipping:makeClipping,undoClipping:undoClipping,clonePosition:clonePosition});function isBody(element){return element.nodeName.toUpperCase()==="BODY"}function isHtml(element){return element.nodeName.toUpperCase()==="HTML"}function isDocument(element){return element.nodeType===Node.DOCUMENT_NODE}function isDetached(element){return element!==document.body&&!Element.descendantOf(element,document.body)}if("getBoundingClientRect"in document.documentElement){Element.addMethods({viewportOffset:function(element){element=$(element);if(isDetached(element))return new Element.Offset(0,0);var rect=element.getBoundingClientRect(),docEl=document.documentElement;return new Element.Offset(rect.left-docEl.clientLeft,rect.top-docEl.clientTop)}})}})();(function(){var IS_OLD_OPERA=Prototype.Browser.Opera&&window.parseFloat(window.opera.version())<9.5;var ROOT=null;function getRootElement(){if(ROOT)return ROOT;ROOT=IS_OLD_OPERA?document.body:document.documentElement;return ROOT}function getDimensions(){return{width:this.getWidth(),height:this.getHeight()}}function getWidth(){return getRootElement().clientWidth}function getHeight(){return getRootElement().clientHeight}function getScrollOffsets(){var x=window.pageXOffset||document.documentElement.scrollLeft||document.body.scrollLeft;var y=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop;return new Element.Offset(x,y)}document.viewport={getDimensions:getDimensions,getWidth:getWidth,getHeight:getHeight,getScrollOffsets:getScrollOffsets}})();window.$$=function(){var expression=$A(arguments).join(", ");return Prototype.Selector.select(expression,document)};Prototype.Selector=function(){function select(){throw new Error('Method "Prototype.Selector.select" must be defined.')}function match(){throw new Error('Method "Prototype.Selector.match" must be defined.')}function find(elements,expression,index){index=index||0;var match=Prototype.Selector.match,length=elements.length,matchIndex=0,i;for(i=0;i+~]|"+whitespace+")"+whitespace+"*"),rattributeQuotes=new RegExp("="+whitespace+"*([^\\]'\"]*?)"+whitespace+"*\\]","g"),rpseudo=new RegExp(pseudos),ridentifier=new RegExp("^"+identifier+"$"),matchExpr={ID:new RegExp("^#("+characterEncoding+")"),CLASS:new RegExp("^\\.("+characterEncoding+")"),TAG:new RegExp("^("+characterEncoding.replace("w","w*")+")"),ATTR:new RegExp("^"+attributes),PSEUDO:new RegExp("^"+pseudos),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+whitespace+"*(even|odd|(([+-]|)(\\d*)n|)"+whitespace+"*(?:([+-]|)"+whitespace+"*(\\d+)|))"+whitespace+"*\\)|)","i"),bool:new RegExp("^(?:"+booleans+")$","i"),needsContext:new RegExp("^"+whitespace+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+whitespace+"*((?:-\\d)?\\d*)"+whitespace+"*\\)|)(?=[^-]|$)","i")},rinputs=/^(?:input|select|textarea|button)$/i,rheader=/^h\d$/i,rnative=/^[^{]+\{\s*\[native \w/,rquickExpr=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,rsibling=/[+~]/,rescape=/'|\\/g,runescape=new RegExp("\\\\([\\da-f]{1,6}"+whitespace+"?|("+whitespace+")|.)","ig"),funescape=function(_,escaped,escapedWhitespace){var high="0x"+escaped-65536;return high!==high||escapedWhitespace?escaped:high<0?String.fromCharCode(high+65536):String.fromCharCode(high>>10|55296,high&1023|56320)};try{push.apply(arr=slice.call(preferredDoc.childNodes),preferredDoc.childNodes);arr[preferredDoc.childNodes.length].nodeType}catch(e){push={apply:arr.length?function(target,els){push_native.apply(target,slice.call(els))}:function(target,els){var j=target.length,i=0;while(target[j++]=els[i++]){}target.length=j-1}}}function Sizzle(selector,context,results,seed){var match,elem,m,nodeType,i,groups,old,nid,newContext,newSelector;if((context?context.ownerDocument||context:preferredDoc)!==document){setDocument(context)}context=context||document;results=results||[];if(!selector||typeof selector!=="string"){return results}if((nodeType=context.nodeType)!==1&&nodeType!==9){return[]}if(documentIsHTML&&!seed){if(match=rquickExpr.exec(selector)){if(m=match[1]){if(nodeType===9){elem=context.getElementById(m);if(elem&&elem.parentNode){if(elem.id===m){results.push(elem);return results}}else{return results}}else{if(context.ownerDocument&&(elem=context.ownerDocument.getElementById(m))&&contains(context,elem)&&elem.id===m){results.push(elem);return results}}}else if(match[2]){push.apply(results,context.getElementsByTagName(selector));return results}else if((m=match[3])&&support.getElementsByClassName&&context.getElementsByClassName){push.apply(results,context.getElementsByClassName(m));return results}}if(support.qsa&&(!rbuggyQSA||!rbuggyQSA.test(selector))){nid=old=expando;newContext=context;newSelector=nodeType===9&&selector;if(nodeType===1&&context.nodeName.toLowerCase()!=="object"){groups=tokenize(selector);if(old=context.getAttribute("id")){nid=old.replace(rescape,"\\$&")}else{context.setAttribute("id",nid)}nid="[id='"+nid+"'] ";i=groups.length;while(i--){groups[i]=nid+toSelector(groups[i])}newContext=rsibling.test(selector)&&testContext(context.parentNode)||context;newSelector=groups.join(",")}if(newSelector){try{push.apply(results,newContext.querySelectorAll(newSelector));return results}catch(qsaError){}finally{if(!old){context.removeAttribute("id")}}}}}return select(selector.replace(rtrim,"$1"),context,results,seed)}function createCache(){var keys=[];function cache(key,value){if(keys.push(key+" ")>Expr.cacheLength){delete cache[keys.shift()]}return cache[key+" "]=value}return cache}function markFunction(fn){fn[expando]=true;return fn}function assert(fn){var div=document.createElement("div");try{return!!fn(div)}catch(e){return false}finally{if(div.parentNode){div.parentNode.removeChild(div)}div=null}}function addHandle(attrs,handler){var arr=attrs.split("|"),i=attrs.length;while(i--){Expr.attrHandle[arr[i]]=handler}}function siblingCheck(a,b){var cur=b&&a,diff=cur&&a.nodeType===1&&b.nodeType===1&&(~b.sourceIndex||MAX_NEGATIVE)-(~a.sourceIndex||MAX_NEGATIVE);if(diff){return diff}if(cur){while(cur=cur.nextSibling){if(cur===b){return-1}}}return a?1:-1}function createInputPseudo(type){return function(elem){var name=elem.nodeName.toLowerCase();return name==="input"&&elem.type===type}}function createButtonPseudo(type){return function(elem){var name=elem.nodeName.toLowerCase();return(name==="input"||name==="button")&&elem.type===type}}function createPositionalPseudo(fn){return markFunction(function(argument){argument=+argument;return markFunction(function(seed,matches){var j,matchIndexes=fn([],seed.length,argument),i=matchIndexes.length;while(i--){if(seed[j=matchIndexes[i]]){seed[j]=!(matches[j]=seed[j])}}})})}function testContext(context){return context&&typeof context.getElementsByTagName!==strundefined&&context}support=Sizzle.support={};isXML=Sizzle.isXML=function(elem){var documentElement=elem&&(elem.ownerDocument||elem).documentElement;return documentElement?documentElement.nodeName!=="HTML":false};setDocument=Sizzle.setDocument=function(node){var hasCompare,doc=node?node.ownerDocument||node:preferredDoc,parent=doc.defaultView;if(doc===document||doc.nodeType!==9||!doc.documentElement){return document}document=doc;docElem=doc.documentElement;documentIsHTML=!isXML(doc);if(parent&&parent!==parent.top){if(parent.addEventListener){parent.addEventListener("unload",function(){setDocument()},false)}else if(parent.attachEvent){parent.attachEvent("onunload",function(){setDocument()})}}support.attributes=assert(function(div){div.className="i";return!div.getAttribute("className")});support.getElementsByTagName=assert(function(div){div.appendChild(doc.createComment(""));return!div.getElementsByTagName("*").length});support.getElementsByClassName=rnative.test(doc.getElementsByClassName)&&assert(function(div){div.innerHTML="
    ";div.firstChild.className="i";return div.getElementsByClassName("i").length===2});support.getById=assert(function(div){docElem.appendChild(div).id=expando;return!doc.getElementsByName||!doc.getElementsByName(expando).length});if(support.getById){Expr.find["ID"]=function(id,context){if(typeof context.getElementById!==strundefined&&documentIsHTML){var m=context.getElementById(id);return m&&m.parentNode?[m]:[]}};Expr.filter["ID"]=function(id){var attrId=id.replace(runescape,funescape);return function(elem){return elem.getAttribute("id")===attrId}}}else{delete Expr.find["ID"];Expr.filter["ID"]=function(id){var attrId=id.replace(runescape,funescape);return function(elem){var node=typeof elem.getAttributeNode!==strundefined&&elem.getAttributeNode("id");return node&&node.value===attrId}}}Expr.find["TAG"]=support.getElementsByTagName?function(tag,context){if(typeof context.getElementsByTagName!==strundefined){return context.getElementsByTagName(tag)}}:function(tag,context){var elem,tmp=[],i=0,results=context.getElementsByTagName(tag);if(tag==="*"){while(elem=results[i++]){if(elem.nodeType===1){tmp.push(elem)}}return tmp}return results};Expr.find["CLASS"]=support.getElementsByClassName&&function(className,context){if(typeof context.getElementsByClassName!==strundefined&&documentIsHTML){return context.getElementsByClassName(className)}};rbuggyMatches=[];rbuggyQSA=[];if(support.qsa=rnative.test(doc.querySelectorAll)){assert(function(div){div.innerHTML="";if(div.querySelectorAll("[t^='']").length){rbuggyQSA.push("[*^$]="+whitespace+"*(?:''|\"\")")}if(!div.querySelectorAll("[selected]").length){rbuggyQSA.push("\\["+whitespace+"*(?:value|"+booleans+")")}if(!div.querySelectorAll(":checked").length){rbuggyQSA.push(":checked")}});assert(function(div){var input=doc.createElement("input");input.setAttribute("type","hidden");div.appendChild(input).setAttribute("name","D");if(div.querySelectorAll("[name=d]").length){rbuggyQSA.push("name"+whitespace+"*[*^$|!~]?=")}if(!div.querySelectorAll(":enabled").length){rbuggyQSA.push(":enabled",":disabled")}div.querySelectorAll("*,:x");rbuggyQSA.push(",.*:")})}if(support.matchesSelector=rnative.test(matches=docElem.webkitMatchesSelector||docElem.mozMatchesSelector||docElem.oMatchesSelector||docElem.msMatchesSelector)){assert(function(div){support.disconnectedMatch=matches.call(div,"div");matches.call(div,"[s!='']:x");rbuggyMatches.push("!=",pseudos)})}rbuggyQSA=rbuggyQSA.length&&new RegExp(rbuggyQSA.join("|"));rbuggyMatches=rbuggyMatches.length&&new RegExp(rbuggyMatches.join("|"));hasCompare=rnative.test(docElem.compareDocumentPosition);contains=hasCompare||rnative.test(docElem.contains)?function(a,b){var adown=a.nodeType===9?a.documentElement:a,bup=b&&b.parentNode;return a===bup||!!(bup&&bup.nodeType===1&&(adown.contains?adown.contains(bup):a.compareDocumentPosition&&a.compareDocumentPosition(bup)&16))}:function(a,b){if(b){while(b=b.parentNode){if(b===a){return true}}}return false};sortOrder=hasCompare?function(a,b){if(a===b){hasDuplicate=true;return 0}var compare=!a.compareDocumentPosition-!b.compareDocumentPosition;if(compare){return compare}compare=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1;if(compare&1||!support.sortDetached&&b.compareDocumentPosition(a)===compare){if(a===doc||a.ownerDocument===preferredDoc&&contains(preferredDoc,a)){return-1}if(b===doc||b.ownerDocument===preferredDoc&&contains(preferredDoc,b)){return 1}return sortInput?indexOf.call(sortInput,a)-indexOf.call(sortInput,b):0}return compare&4?-1:1}:function(a,b){if(a===b){hasDuplicate=true;return 0}var cur,i=0,aup=a.parentNode,bup=b.parentNode,ap=[a],bp=[b];if(!aup||!bup){return a===doc?-1:b===doc?1:aup?-1:bup?1:sortInput?indexOf.call(sortInput,a)-indexOf.call(sortInput,b):0}else if(aup===bup){return siblingCheck(a,b)}cur=a;while(cur=cur.parentNode){ap.unshift(cur)}cur=b;while(cur=cur.parentNode){bp.unshift(cur)}while(ap[i]===bp[i]){i++}return i?siblingCheck(ap[i],bp[i]):ap[i]===preferredDoc?-1:bp[i]===preferredDoc?1:0};return doc};Sizzle.matches=function(expr,elements){return Sizzle(expr,null,null,elements)};Sizzle.matchesSelector=function(elem,expr){if((elem.ownerDocument||elem)!==document){setDocument(elem)}expr=expr.replace(rattributeQuotes,"='$1']");if(support.matchesSelector&&documentIsHTML&&(!rbuggyMatches||!rbuggyMatches.test(expr))&&(!rbuggyQSA||!rbuggyQSA.test(expr))){try{var ret=matches.call(elem,expr);if(ret||support.disconnectedMatch||elem.document&&elem.document.nodeType!==11){return ret}}catch(e){}}return Sizzle(expr,document,null,[elem]).length>0};Sizzle.contains=function(context,elem){if((context.ownerDocument||context)!==document){setDocument(context)}return contains(context,elem)};Sizzle.attr=function(elem,name){if((elem.ownerDocument||elem)!==document){setDocument(elem)}var fn=Expr.attrHandle[name.toLowerCase()],val=fn&&hasOwn.call(Expr.attrHandle,name.toLowerCase())?fn(elem,name,!documentIsHTML):undefined;return val!==undefined?val:support.attributes||!documentIsHTML?elem.getAttribute(name):(val=elem.getAttributeNode(name))&&val.specified?val.value:null};Sizzle.error=function(msg){throw new Error("Syntax error, unrecognized expression: "+msg)};Sizzle.uniqueSort=function(results){var elem,duplicates=[],j=0,i=0;hasDuplicate=!support.detectDuplicates;sortInput=!support.sortStable&&results.slice(0);results.sort(sortOrder);if(hasDuplicate){while(elem=results[i++]){if(elem===results[i]){j=duplicates.push(i)}}while(j--){results.splice(duplicates[j],1)}}sortInput=null;return results};getText=Sizzle.getText=function(elem){var node,ret="",i=0,nodeType=elem.nodeType;if(!nodeType){while(node=elem[i++]){ret+=getText(node)}}else if(nodeType===1||nodeType===9||nodeType===11){if(typeof elem.textContent==="string"){return elem.textContent}else{for(elem=elem.firstChild;elem;elem=elem.nextSibling){ret+=getText(elem)}}}else if(nodeType===3||nodeType===4){return elem.nodeValue}return ret};Expr=Sizzle.selectors={cacheLength:50,createPseudo:markFunction,match:matchExpr,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:true}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:true},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(match){match[1]=match[1].replace(runescape,funescape);match[3]=(match[4]||match[5]||"").replace(runescape,funescape);if(match[2]==="~="){match[3]=" "+match[3]+" "}return match.slice(0,4)},CHILD:function(match){match[1]=match[1].toLowerCase();if(match[1].slice(0,3)==="nth"){if(!match[3]){Sizzle.error(match[0])}match[4]=+(match[4]?match[5]+(match[6]||1):2*(match[3]==="even"||match[3]==="odd"));match[5]=+(match[7]+match[8]||match[3]==="odd")}else if(match[3]){Sizzle.error(match[0])}return match},PSEUDO:function(match){var excess,unquoted=!match[5]&&match[2];if(matchExpr["CHILD"].test(match[0])){return null}if(match[3]&&match[4]!==undefined){match[2]=match[4]}else if(unquoted&&rpseudo.test(unquoted)&&(excess=tokenize(unquoted,true))&&(excess=unquoted.indexOf(")",unquoted.length-excess)-unquoted.length)){match[0]=match[0].slice(0,excess);match[2]=unquoted.slice(0,excess)}return match.slice(0,3)}},filter:{TAG:function(nodeNameSelector){var nodeName=nodeNameSelector.replace(runescape,funescape).toLowerCase();return nodeNameSelector==="*"?function(){return true}:function(elem){return elem.nodeName&&elem.nodeName.toLowerCase()===nodeName}},CLASS:function(className){var pattern=classCache[className+" "];return pattern||(pattern=new RegExp("(^|"+whitespace+")"+className+"("+whitespace+"|$)"))&&classCache(className,function(elem){return pattern.test(typeof elem.className==="string"&&elem.className||typeof elem.getAttribute!==strundefined&&elem.getAttribute("class")||"")})},ATTR:function(name,operator,check){return function(elem){var result=Sizzle.attr(elem,name);if(result==null){return operator==="!="}if(!operator){return true}result+="";return operator==="="?result===check:operator==="!="?result!==check:operator==="^="?check&&result.indexOf(check)===0:operator==="*="?check&&result.indexOf(check)>-1:operator==="$="?check&&result.slice(-check.length)===check:operator==="~="?(" "+result+" ").indexOf(check)>-1:operator==="|="?result===check||result.slice(0,check.length+1)===check+"-":false}},CHILD:function(type,what,argument,first,last){var simple=type.slice(0,3)!=="nth",forward=type.slice(-4)!=="last",ofType=what==="of-type";return first===1&&last===0?function(elem){return!!elem.parentNode}:function(elem,context,xml){var cache,outerCache,node,diff,nodeIndex,start,dir=simple!==forward?"nextSibling":"previousSibling",parent=elem.parentNode,name=ofType&&elem.nodeName.toLowerCase(),useCache=!xml&&!ofType;if(parent){if(simple){while(dir){node=elem;while(node=node[dir]){if(ofType?node.nodeName.toLowerCase()===name:node.nodeType===1){return false}}start=dir=type==="only"&&!start&&"nextSibling"}return true}start=[forward?parent.firstChild:parent.lastChild];if(forward&&useCache){outerCache=parent[expando]||(parent[expando]={});cache=outerCache[type]||[];nodeIndex=cache[0]===dirruns&&cache[1];diff=cache[0]===dirruns&&cache[2];node=nodeIndex&&parent.childNodes[nodeIndex];while(node=++nodeIndex&&node&&node[dir]||(diff=nodeIndex=0)||start.pop()){if(node.nodeType===1&&++diff&&node===elem){outerCache[type]=[dirruns,nodeIndex,diff];break}}}else if(useCache&&(cache=(elem[expando]||(elem[expando]={}))[type])&&cache[0]===dirruns){diff=cache[1]}else{while(node=++nodeIndex&&node&&node[dir]||(diff=nodeIndex=0)||start.pop()){if((ofType?node.nodeName.toLowerCase()===name:node.nodeType===1)&&++diff){if(useCache){(node[expando]||(node[expando]={}))[type]=[dirruns,diff]}if(node===elem){break}}}}diff-=last;return diff===first||diff%first===0&&diff/first>=0}}},PSEUDO:function(pseudo,argument){var args,fn=Expr.pseudos[pseudo]||Expr.setFilters[pseudo.toLowerCase()]||Sizzle.error("unsupported pseudo: "+pseudo);if(fn[expando]){return fn(argument)}if(fn.length>1){args=[pseudo,pseudo,"",argument];return Expr.setFilters.hasOwnProperty(pseudo.toLowerCase())?markFunction(function(seed,matches){var idx,matched=fn(seed,argument),i=matched.length;while(i--){idx=indexOf.call(seed,matched[i]);seed[idx]=!(matches[idx]=matched[i])}}):function(elem){return fn(elem,0,args)}}return fn}},pseudos:{not:markFunction(function(selector){var input=[],results=[],matcher=compile(selector.replace(rtrim,"$1"));return matcher[expando]?markFunction(function(seed,matches,context,xml){var elem,unmatched=matcher(seed,null,xml,[]),i=seed.length;while(i--){if(elem=unmatched[i]){seed[i]=!(matches[i]=elem)}}}):function(elem,context,xml){input[0]=elem;matcher(input,null,xml,results);return!results.pop()}}),has:markFunction(function(selector){return function(elem){return Sizzle(selector,elem).length>0}}),contains:markFunction(function(text){return function(elem){return(elem.textContent||elem.innerText||getText(elem)).indexOf(text)>-1}}),lang:markFunction(function(lang){if(!ridentifier.test(lang||"")){Sizzle.error("unsupported lang: "+lang)}lang=lang.replace(runescape,funescape).toLowerCase();return function(elem){var elemLang;do{if(elemLang=documentIsHTML?elem.lang:elem.getAttribute("xml:lang")||elem.getAttribute("lang")){elemLang=elemLang.toLowerCase();return elemLang===lang||elemLang.indexOf(lang+"-")===0}}while((elem=elem.parentNode)&&elem.nodeType===1);return false}}),target:function(elem){var hash=window.location&&window.location.hash;return hash&&hash.slice(1)===elem.id},root:function(elem){return elem===docElem},focus:function(elem){return elem===document.activeElement&&(!document.hasFocus||document.hasFocus())&&!!(elem.type||elem.href||~elem.tabIndex)},enabled:function(elem){return elem.disabled===false},disabled:function(elem){return elem.disabled===true},checked:function(elem){var nodeName=elem.nodeName.toLowerCase();return nodeName==="input"&&!!elem.checked||nodeName==="option"&&!!elem.selected},selected:function(elem){if(elem.parentNode){elem.parentNode.selectedIndex}return elem.selected===true},empty:function(elem){for(elem=elem.firstChild;elem;elem=elem.nextSibling){if(elem.nodeType<6){return false}}return true},parent:function(elem){return!Expr.pseudos["empty"](elem)},header:function(elem){return rheader.test(elem.nodeName)},input:function(elem){return rinputs.test(elem.nodeName)},button:function(elem){var name=elem.nodeName.toLowerCase();return name==="input"&&elem.type==="button"||name==="button"},text:function(elem){var attr;return elem.nodeName.toLowerCase()==="input"&&elem.type==="text"&&((attr=elem.getAttribute("type"))==null||attr.toLowerCase()==="text")},first:createPositionalPseudo(function(){return[0]}),last:createPositionalPseudo(function(matchIndexes,length){return[length-1]}),eq:createPositionalPseudo(function(matchIndexes,length,argument){return[argument<0?argument+length:argument]}),even:createPositionalPseudo(function(matchIndexes,length){var i=0;for(;i=0;){matchIndexes.push(i)}return matchIndexes}),gt:createPositionalPseudo(function(matchIndexes,length,argument){var i=argument<0?argument+length:argument;for(;++i1?function(elem,context,xml){var i=matchers.length;while(i--){if(!matchers[i](elem,context,xml)){return false}}return true}:matchers[0]}function multipleContexts(selector,contexts,results){var i=0,len=contexts.length;for(;i-1){seed[temp]=!(results[temp]=elem)}}}}else{matcherOut=condense(matcherOut===results?matcherOut.splice(preexisting,matcherOut.length):matcherOut);if(postFinder){postFinder(null,results,matcherOut,xml)}else{push.apply(results,matcherOut)}}})}function matcherFromTokens(tokens){var checkContext,matcher,j,len=tokens.length,leadingRelative=Expr.relative[tokens[0].type],implicitRelative=leadingRelative||Expr.relative[" "],i=leadingRelative?1:0,matchContext=addCombinator(function(elem){return elem===checkContext},implicitRelative,true),matchAnyContext=addCombinator(function(elem){return indexOf.call(checkContext,elem)>-1},implicitRelative,true),matchers=[function(elem,context,xml){return!leadingRelative&&(xml||context!==outermostContext)||((checkContext=context).nodeType?matchContext(elem,context,xml):matchAnyContext(elem,context,xml))}];for(;i1&&elementMatcher(matchers),i>1&&toSelector(tokens.slice(0,i-1).concat({value:tokens[i-2].type===" "?"*":""})).replace(rtrim,"$1"),matcher,i0,byElement=elementMatchers.length>0,superMatcher=function(seed,context,xml,results,outermost){var elem,j,matcher,matchedCount=0,i="0",unmatched=seed&&[],setMatched=[],contextBackup=outermostContext,elems=seed||byElement&&Expr.find["TAG"]("*",outermost),dirrunsUnique=dirruns+=contextBackup==null?1:Math.random()||.1,len=elems.length;if(outermost){outermostContext=context!==document&&context}for(;i!==len&&(elem=elems[i])!=null;i++){if(byElement&&elem){j=0;while(matcher=elementMatchers[j++]){if(matcher(elem,context,xml)){results.push(elem);break}}if(outermost){dirruns=dirrunsUnique}}if(bySet){if(elem=!matcher&&elem){matchedCount--}if(seed){unmatched.push(elem)}}}matchedCount+=i;if(bySet&&i!==matchedCount){j=0;while(matcher=setMatchers[j++]){matcher(unmatched,setMatched,context,xml)}if(seed){if(matchedCount>0){while(i--){if(!(unmatched[i]||setMatched[i])){setMatched[i]=pop.call(results)}}}setMatched=condense(setMatched)}push.apply(results,setMatched);if(outermost&&!seed&&setMatched.length>0&&matchedCount+setMatchers.length>1){Sizzle.uniqueSort(results)}}if(outermost){dirruns=dirrunsUnique;outermostContext=contextBackup}return unmatched};return bySet?markFunction(superMatcher):superMatcher}compile=Sizzle.compile=function(selector,match){var i,setMatchers=[],elementMatchers=[],cached=compilerCache[selector+" "];if(!cached){if(!match){match=tokenize(selector)}i=match.length;while(i--){cached=matcherFromTokens(match[i]);if(cached[expando]){setMatchers.push(cached)}else{elementMatchers.push(cached)}}cached=compilerCache(selector,matcherFromGroupMatchers(elementMatchers,setMatchers));cached.selector=selector}return cached};select=Sizzle.select=function(selector,context,results,seed){var i,tokens,token,type,find,compiled=typeof selector==="function"&&selector,match=!seed&&tokenize(selector=compiled.selector||selector);results=results||[];if(match.length===1){tokens=match[0]=match[0].slice(0);if(tokens.length>2&&(token=tokens[0]).type==="ID"&&support.getById&&context.nodeType===9&&documentIsHTML&&Expr.relative[tokens[1].type]){context=(Expr.find["ID"](token.matches[0].replace(runescape,funescape),context)||[])[0];if(!context){return results}else if(compiled){context=context.parentNode}selector=selector.slice(tokens.shift().value.length)}i=matchExpr["needsContext"].test(selector)?0:tokens.length;while(i--){token=tokens[i];if(Expr.relative[type=token.type]){break}if(find=Expr.find[type]){if(seed=find(token.matches[0].replace(runescape,funescape),rsibling.test(tokens[0].type)&&testContext(context.parentNode)||context)){ -tokens.splice(i,1);selector=seed.length&&toSelector(tokens);if(!selector){push.apply(results,seed);return results}break}}}}(compiled||compile(selector,match))(seed,context,!documentIsHTML,results,rsibling.test(selector)&&testContext(context.parentNode)||context);return results};support.sortStable=expando.split("").sort(sortOrder).join("")===expando;support.detectDuplicates=!!hasDuplicate;setDocument();support.sortDetached=assert(function(div1){return div1.compareDocumentPosition(document.createElement("div"))&1});if(!assert(function(div){div.innerHTML="";return div.firstChild.getAttribute("href")==="#"})){addHandle("type|href|height|width",function(elem,name,isXML){if(!isXML){return elem.getAttribute(name,name.toLowerCase()==="type"?1:2)}})}if(!support.attributes||!assert(function(div){div.innerHTML="";div.firstChild.setAttribute("value","");return div.firstChild.getAttribute("value")===""})){addHandle("value",function(elem,name,isXML){if(!isXML&&elem.nodeName.toLowerCase()==="input"){return elem.defaultValue}})}if(!assert(function(div){return div.getAttribute("disabled")==null})){addHandle(booleans,function(elem,name,isXML){var val;if(!isXML){return elem[name]===true?name.toLowerCase():(val=elem.getAttributeNode(name))&&val.specified?val.value:null}})}if(typeof define==="function"&&define.amd){define(function(){return Sizzle})}else if(typeof module!=="undefined"&&module.exports){module.exports=Sizzle}else{window.Sizzle=Sizzle}})(window);(function(engine){var extendElements=Prototype.Selector.extendElements;function select(selector,scope){return extendElements(engine(selector,scope||document))}function match(element,selector){return engine.matches(selector,[element]).length==1}Prototype.Selector.engine=engine;Prototype.Selector.select=select;Prototype.Selector.match=match})(Sizzle);window.Sizzle=Prototype._original_property;delete Prototype._original_property;var Form={reset:function(form){form=$(form);form.reset();return form},serializeElements:function(elements,options){if(typeof options!="object")options={hash:!!options};else if(Object.isUndefined(options.hash))options.hash=true;var key,value,submitted=false,submit=options.submit,accumulator,initial;if(options.hash){initial={};accumulator=function(result,key,value){if(key in result){if(!Object.isArray(result[key]))result[key]=[result[key]];result[key]=result[key].concat(value)}else result[key]=value;return result}}else{initial="";accumulator=function(result,key,values){if(!Object.isArray(values)){values=[values]}if(!values.length){return result}var encodedKey=encodeURIComponent(key).gsub(/%20/,"+");return result+(result?"&":"")+values.map(function(value){value=value.gsub(/(\r)?\n/,"\r\n");value=encodeURIComponent(value);value=value.gsub(/%20/,"+");return encodedKey+"="+value}).join("&")}}return elements.inject(initial,function(result,element){if(!element.disabled&&element.name){key=element.name;value=$(element).getValue();if(value!=null&&element.type!="file"&&(element.type!="submit"||!submitted&&submit!==false&&(!submit||key==submit)&&(submitted=true))){result=accumulator(result,key,value)}}return result})}};Form.Methods={serialize:function(form,options){return Form.serializeElements(Form.getElements(form),options)},getElements:function(form){var elements=$(form).getElementsByTagName("*");var element,results=[],serializers=Form.Element.Serializers;for(var i=0;element=elements[i];i++){if(serializers[element.tagName.toLowerCase()])results.push(Element.extend(element))}return results},getInputs:function(form,typeName,name){form=$(form);var inputs=form.getElementsByTagName("input");if(!typeName&&!name)return $A(inputs).map(Element.extend);for(var i=0,matchingInputs=[],length=inputs.length;i=0}).sortBy(function(element){return element.tabIndex}).first();return firstByIndex?firstByIndex:elements.find(function(element){return/^(?:input|select|textarea)$/i.test(element.tagName)})},focusFirstElement:function(form){form=$(form);var element=form.findFirstElement();if(element)element.activate();return form},request:function(form,options){form=$(form),options=Object.clone(options||{});var params=options.parameters,action=form.readAttribute("action")||"";if(action.blank())action=window.location.href;options.parameters=form.serialize(true);if(params){if(Object.isString(params))params=params.toQueryParams();Object.extend(options.parameters,params)}if(form.hasAttribute("method")&&!options.method)options.method=form.method;return new Ajax.Request(action,options)}};Form.Element={focus:function(element){$(element).focus();return element},select:function(element){$(element).select();return element}};Form.Element.Methods={serialize:function(element){element=$(element);if(!element.disabled&&element.name){var value=element.getValue();if(value!=undefined){var pair={};pair[element.name]=value;return Object.toQueryString(pair)}}return""},getValue:function(element){element=$(element);var method=element.tagName.toLowerCase();return Form.Element.Serializers[method](element)},setValue:function(element,value){element=$(element);var method=element.tagName.toLowerCase();Form.Element.Serializers[method](element,value);return element},clear:function(element){$(element).value="";return element},present:function(element){return $(element).value!=""},activate:function(element){element=$(element);try{element.focus();if(element.select&&(element.tagName.toLowerCase()!="input"||!/^(?:button|reset|submit)$/i.test(element.type)))element.select()}catch(e){}return element},disable:function(element){element=$(element);element.disabled=true;return element},enable:function(element){element=$(element);element.disabled=false;return element}};var Field=Form.Element;var $F=Form.Element.Methods.getValue;Form.Element.Serializers=function(){function input(element,value){switch(element.type.toLowerCase()){case"checkbox":case"radio":return inputSelector(element,value);default:return valueSelector(element,value)}}function inputSelector(element,value){if(Object.isUndefined(value))return element.checked?element.value:null;else element.checked=!!value}function valueSelector(element,value){if(Object.isUndefined(value))return element.value;else element.value=value}function select(element,value){if(Object.isUndefined(value))return(element.type==="select-one"?selectOne:selectMany)(element);var opt,currentValue,single=!Object.isArray(value);for(var i=0,length=element.length;i=0?optionValue(element.options[index]):null}function selectMany(element){var values,length=element.length;if(!length)return null;for(var i=0,values=[];i=this.offset[1]&&y=this.offset[0]&&x=this.offset[1]&&this.ycomp=this.offset[0]&&this.xcomp0})._each(iterator,context)},set:function(className){this.element.className=className},add:function(classNameToAdd){if(this.include(classNameToAdd))return;this.set($A(this).concat(classNameToAdd).join(" "))},remove:function(classNameToRemove){if(!this.include(classNameToRemove))return;this.set($A(this).without(classNameToRemove).join(" "))},toString:function(){return $A(this).join(" ")}};Object.extend(Element.ClassNames.prototype,Enumerable);(function(){window.Selector=Class.create({initialize:function(expression){this.expression=expression.strip()},findElements:function(rootElement){return Prototype.Selector.select(this.expression,rootElement)},match:function(element){return Prototype.Selector.match(element,this.expression)},toString:function(){return this.expression},inspect:function(){return"#"}});Object.extend(Selector,{matchElements:function(elements,expression){var match=Prototype.Selector.match,results=[];for(var i=0,length=elements.length;i=y;y++)if(l=Math.sin(h),m=Math.tan(h),r=m*Math.sqrt(1-t*l*l),c=Math.sin(2*h),u=i*h-s*c+e*Math.sin(4*h)-o*Math.sin(6*h),d=i-2*s*Math.cos(2*h)+4*e*Math.cos(4*h)-6*o*Math.cos(6*h),p=2*u+r*(u*u+a)-2*n*(r*u+1),_=t*c*(u*u+a-2*n*u)/(2*r),f=2*(n-u)*(r*d-2/c)-2*d,P=p/(_+f),h+=P,1e-10>=Math.abs(P))return h;return Proj4js.reportError("phi4z: No convergence"),null}function e4fn(t){var i,s;return i=1+t,s=1-t,Math.sqrt(Math.pow(i,i)*Math.pow(s,s))}var Proj4js={defaultDatum:"WGS84",transform:function(t,i,s){if(!t.readyToUse)return this.reportError("Proj4js initialization for:"+t.srsCode+" not yet complete"),s;if(!i.readyToUse)return this.reportError("Proj4js initialization for:"+i.srsCode+" not yet complete"),s;if(t.datum&&i.datum&&((t.datum.datum_type==Proj4js.common.PJD_3PARAM||t.datum.datum_type==Proj4js.common.PJD_7PARAM)&&"WGS84"!=i.datumCode||(i.datum.datum_type==Proj4js.common.PJD_3PARAM||i.datum.datum_type==Proj4js.common.PJD_7PARAM)&&"WGS84"!=t.datumCode)){var e=Proj4js.WGS84;this.transform(t,e,s),t=e}return"enu"!=t.axis&&this.adjust_axis(t,!1,s),"longlat"==t.projName?(s.x*=Proj4js.common.D2R,s.y*=Proj4js.common.D2R):(t.to_meter&&(s.x*=t.to_meter,s.y*=t.to_meter),t.inverse(s)),t.from_greenwich&&(s.x+=t.from_greenwich),s=this.datum_transform(t.datum,i.datum,s),i.from_greenwich&&(s.x-=i.from_greenwich),"longlat"==i.projName?(s.x*=Proj4js.common.R2D,s.y*=Proj4js.common.R2D):(i.forward(s),i.to_meter&&(s.x/=i.to_meter,s.y/=i.to_meter)),"enu"!=i.axis&&this.adjust_axis(i,!0,s),s},datum_transform:function(t,i,s){return t.compare_datums(i)?s:t.datum_type==Proj4js.common.PJD_NODATUM||i.datum_type==Proj4js.common.PJD_NODATUM?s:((t.es!=i.es||t.a!=i.a||t.datum_type==Proj4js.common.PJD_3PARAM||t.datum_type==Proj4js.common.PJD_7PARAM||i.datum_type==Proj4js.common.PJD_3PARAM||i.datum_type==Proj4js.common.PJD_7PARAM)&&(t.geodetic_to_geocentric(s),(t.datum_type==Proj4js.common.PJD_3PARAM||t.datum_type==Proj4js.common.PJD_7PARAM)&&t.geocentric_to_wgs84(s),(i.datum_type==Proj4js.common.PJD_3PARAM||i.datum_type==Proj4js.common.PJD_7PARAM)&&i.geocentric_from_wgs84(s),i.geocentric_to_geodetic(s)),s)},adjust_axis:function(t,i,s){for(var e,o,n=s.x,a=s.y,r=s.z||0,h=0;3>h;h++)if(!i||2!=h||void 0!==s.z)switch(0==h?(e=n,o="x"):1==h?(e=a,o="y"):(e=r,o="z"),t.axis[h]){case"e":s[o]=e;break;case"w":s[o]=-e;break;case"n":s[o]=e;break;case"s":s[o]=-e;break;case"u":void 0!==s[o]&&(s.z=e);break;case"d":void 0!==s[o]&&(s.z=-e);break;default:return alert("ERROR: unknow axis ("+t.axis[h]+") - check definition of "+t.projName),null}return s},reportError:function(){},extend:function(t,i){if(t=t||{},i)for(var s in i){var e=i[s];void 0!==e&&(t[s]=e)}return t},Class:function(){for(var t,i=function(){this.initialize.apply(this,arguments)},s={},e=0;arguments.length>e;++e)t="function"==typeof arguments[e]?arguments[e].prototype:arguments[e],Proj4js.extend(s,t);return i.prototype=s,i},bind:function(t,i){var s=Array.prototype.slice.apply(arguments,[2]);return function(){var e=s.concat(Array.prototype.slice.apply(arguments,[0])); +Math.sign = Math.sign || function(x) { + x = +x; // convert to a number + if (x === 0 || isNaN(x)) { + return x; + } + return x > 0 ? 1 : -1; +} -return t.apply(i,e)}},scriptName:"proj4js-combined.js",defsLookupService:"http://spatialreference.org/ref",libPath:null,getScriptLocation:function(){if(this.libPath)return this.libPath;for(var t=this.scriptName,i=t.length,s=document.getElementsByTagName("script"),e=0;s.length>e;e++){var o=s[e].getAttribute("src");if(o){var n=o.lastIndexOf(t);if(n>-1&&n+i==o.length){this.libPath=o.slice(0,-i);break}}}return this.libPath||""},loadScript:function(t,i,s,e){var o=document.createElement("script");o.defer=!1,o.type="text/javascript",o.id=t,o.src=t,o.onload=i,o.onerror=s,o.loadCheck=e,/MSIE/.test(navigator.userAgent)&&(o.onreadystatechange=this.checkReadyState),document.getElementsByTagName("head")[0].appendChild(o)},checkReadyState:function(){"loaded"==this.readyState&&(this.loadCheck()?this.onload():this.onerror())}};Proj4js.Proj=Proj4js.Class({readyToUse:!1,title:null,projName:null,units:null,datum:null,x0:0,y0:0,localCS:!1,queue:null,initialize:function(t,i){if(this.srsCodeInput=t,this.queue=[],i&&this.queue.push(i),t.indexOf("GEOGCS")>=0||t.indexOf("GEOCCS")>=0||t.indexOf("PROJCS")>=0||t.indexOf("LOCAL_CS")>=0)return this.parseWKT(t),this.deriveConstants(),this.loadProjCode(this.projName),void 0;if(0==t.indexOf("urn:")){var s=t.split(":");"ogc"!=s[1]&&"x-ogc"!=s[1]||"def"!=s[2]||"crs"!=s[3]||(t=s[4]+":"+s[s.length-1])}else if(0==t.indexOf("http://")){var e=t.split("#");e[0].match(/epsg.org/)?t="EPSG:"+e[1]:e[0].match(/RIG.xml/)&&(t="IGNF:"+e[1])}this.srsCode=t.toUpperCase(),0==this.srsCode.indexOf("EPSG")?(this.srsCode=this.srsCode,this.srsAuth="epsg",this.srsProjNumber=this.srsCode.substring(5)):0==this.srsCode.indexOf("IGNF")?(this.srsCode=this.srsCode,this.srsAuth="IGNF",this.srsProjNumber=this.srsCode.substring(5)):0==this.srsCode.indexOf("CRS")?(this.srsCode=this.srsCode,this.srsAuth="CRS",this.srsProjNumber=this.srsCode.substring(4)):(this.srsAuth="",this.srsProjNumber=this.srsCode),this.loadProjDefinition()},loadProjDefinition:function(){if(Proj4js.defs[this.srsCode])return this.defsLoaded(),void 0;var t=Proj4js.getScriptLocation()+"defs/"+this.srsAuth.toUpperCase()+this.srsProjNumber+".js";Proj4js.loadScript(t,Proj4js.bind(this.defsLoaded,this),Proj4js.bind(this.loadFromService,this),Proj4js.bind(this.checkDefsLoaded,this))},loadFromService:function(){var t=Proj4js.defsLookupService+"/"+this.srsAuth+"/"+this.srsProjNumber+"/proj4js/";Proj4js.loadScript(t,Proj4js.bind(this.defsLoaded,this),Proj4js.bind(this.defsFailed,this),Proj4js.bind(this.checkDefsLoaded,this))},defsLoaded:function(){this.parseDefs(),this.loadProjCode(this.projName)},checkDefsLoaded:function(){return Proj4js.defs[this.srsCode]?!0:!1},defsFailed:function(){Proj4js.reportError("failed to load projection definition for: "+this.srsCode),Proj4js.defs[this.srsCode]=Proj4js.defs.WGS84,this.defsLoaded()},loadProjCode:function(t){if(Proj4js.Proj[t])return this.initTransforms(),void 0;var i=Proj4js.getScriptLocation()+"projCode/"+t+".js";Proj4js.loadScript(i,Proj4js.bind(this.loadProjCodeSuccess,this,t),Proj4js.bind(this.loadProjCodeFailure,this,t),Proj4js.bind(this.checkCodeLoaded,this,t))},loadProjCodeSuccess:function(t){Proj4js.Proj[t].dependsOn?this.loadProjCode(Proj4js.Proj[t].dependsOn):this.initTransforms()},loadProjCodeFailure:function(t){Proj4js.reportError("failed to find projection file for: "+t)},checkCodeLoaded:function(t){return Proj4js.Proj[t]?!0:!1},initTransforms:function(){if(Proj4js.extend(this,Proj4js.Proj[this.projName]),this.init(),this.readyToUse=!0,this.queue)for(var t;t=this.queue.shift();)t.call(this,this)},wktRE:/^(\w+)\[(.*)\]$/,parseWKT:function(t){var i=t.match(this.wktRE);if(i){var s,e=i[1],o=i[2],n=o.split(",");s="TOWGS84"==e.toUpperCase()?e:n.shift(),s=s.replace(/^\"/,""),s=s.replace(/\"$/,"");for(var a=[],r=0,h="",l=0;n.length>l;++l){for(var c=n[l],m=0;c.length>m;++m)"["==c.charAt(m)&&++r,"]"==c.charAt(m)&&--r;h+=c,0===r?(a.push(h),h=""):h+=","}switch(e){case"LOCAL_CS":this.projName="identity",this.localCS=!0,this.srsCode=s;break;case"GEOGCS":this.projName="longlat",this.geocsCode=s,this.srsCode||(this.srsCode=s);break;case"PROJCS":this.srsCode=s;break;case"GEOCCS":break;case"PROJECTION":this.projName=Proj4js.wktProjections[s];break;case"DATUM":this.datumName=s;break;case"LOCAL_DATUM":this.datumCode="none";break;case"SPHEROID":this.ellps=s,this.a=parseFloat(a.shift()),this.rf=parseFloat(a.shift());break;case"PRIMEM":this.from_greenwich=parseFloat(a.shift());break;case"UNIT":this.units=s,this.unitsPerMeter=parseFloat(a.shift());break;case"PARAMETER":var u=s.toLowerCase(),d=parseFloat(a.shift());switch(u){case"false_easting":this.x0=d;break;case"false_northing":this.y0=d;break;case"scale_factor":this.k0=d;break;case"central_meridian":this.long0=d*Proj4js.common.D2R;break;case"latitude_of_origin":this.lat0=d*Proj4js.common.D2R;break;case"more_here":break;default:}break;case"TOWGS84":this.datum_params=a;break;case"AXIS":var u=s.toLowerCase(),d=a.shift();switch(d){case"EAST":d="e";break;case"WEST":d="w";break;case"NORTH":d="n";break;case"SOUTH":d="s";break;case"UP":d="u";break;case"DOWN":d="d";break;case"OTHER":default:d=" "}switch(this.axis||(this.axis="enu"),u){case"x":this.axis=d+this.axis.substr(1,2);break;case"y":this.axis=this.axis.substr(0,1)+d+this.axis.substr(2,1);break;case"z":this.axis=this.axis.substr(0,2)+d;break;default:}case"MORE_HERE":break;default:}for(var l=0;a.length>l;++l)this.parseWKT(a[l])}},parseDefs:function(){this.defData=Proj4js.defs[this.srsCode];var t,i;if(this.defData){for(var s=this.defData.split("+"),e=0;s.length>e;e++){var o=s[e].split("=");switch(t=o[0].toLowerCase(),i=o[1],t.replace(/\s/gi,"")){case"":break;case"title":this.title=i;break;case"proj":this.projName=i.replace(/\s/gi,"");break;case"units":this.units=i.replace(/\s/gi,"");break;case"datum":this.datumCode=i.replace(/\s/gi,"");break;case"nadgrids":this.nagrids=i.replace(/\s/gi,"");break;case"ellps":this.ellps=i.replace(/\s/gi,"");break;case"a":this.a=parseFloat(i);break;case"b":this.b=parseFloat(i);break;case"rf":this.rf=parseFloat(i);break;case"lat_0":this.lat0=i*Proj4js.common.D2R;break;case"lat_1":this.lat1=i*Proj4js.common.D2R;break;case"lat_2":this.lat2=i*Proj4js.common.D2R;break;case"lat_ts":this.lat_ts=i*Proj4js.common.D2R;break;case"lon_0":this.long0=i*Proj4js.common.D2R;break;case"alpha":this.alpha=parseFloat(i)*Proj4js.common.D2R;break;case"lonc":this.longc=i*Proj4js.common.D2R;break;case"x_0":this.x0=parseFloat(i);break;case"y_0":this.y0=parseFloat(i);break;case"k_0":this.k0=parseFloat(i);break;case"k":this.k0=parseFloat(i);break;case"r_a":this.R_A=!0;break;case"zone":this.zone=parseInt(i,10);break;case"south":this.utmSouth=!0;break;case"towgs84":this.datum_params=i.split(",");break;case"to_meter":this.to_meter=parseFloat(i);break;case"from_greenwich":this.from_greenwich=i*Proj4js.common.D2R;break;case"pm":i=i.replace(/\s/gi,""),this.from_greenwich=Proj4js.PrimeMeridian[i]?Proj4js.PrimeMeridian[i]:parseFloat(i),this.from_greenwich*=Proj4js.common.D2R;break;case"axis":i=i.replace(/\s/gi,"");var n="ewnsud";3==i.length&&-1!=n.indexOf(i.substr(0,1))&&-1!=n.indexOf(i.substr(1,1))&&-1!=n.indexOf(i.substr(2,1))&&(this.axis=i);break;case"no_defs":break;default:}}this.deriveConstants()}},deriveConstants:function(){if("@null"==this.nagrids&&(this.datumCode="none"),this.datumCode&&"none"!=this.datumCode){var t=Proj4js.Datum[this.datumCode];t&&(this.datum_params=t.towgs84?t.towgs84.split(","):null,this.ellps=t.ellipse,this.datumName=t.datumName?t.datumName:this.datumCode)}if(!this.a){var i=Proj4js.Ellipsoid[this.ellps]?Proj4js.Ellipsoid[this.ellps]:Proj4js.Ellipsoid.WGS84;Proj4js.extend(this,i)}this.rf&&!this.b&&(this.b=(1-1/this.rf)*this.a),(0===this.rf||Math.abs(this.a-this.b)=a;a++)if(s=t*Math.sin(n),e=this.HALF_PI-2*Math.atan(i*Math.pow((1-s)/(1+s),o))-n,n+=e,1e-10>=Math.abs(e))return n;return alert("phi2z has NoConvergence"),-9999},qsfnz:function(t,i){var s;return t>1e-7?(s=t*i,(1-t*t)*(i/(1-s*s)-.5/t*Math.log((1-s)/(1+s)))):2*i},asinz:function(t){return Math.abs(t)>1&&(t=t>1?1:-1),Math.asin(t)},e0fn:function(t){return 1-.25*t*(1+t/16*(3+1.25*t))},e1fn:function(t){return.375*t*(1+.25*t*(1+.46875*t))},e2fn:function(t){return.05859375*t*t*(1+.75*t)},e3fn:function(t){return t*t*t*(35/3072)},mlfn:function(t,i,s,e,o){return t*o-i*Math.sin(2*o)+s*Math.sin(4*o)-e*Math.sin(6*o)},srat:function(t,i){return Math.pow((1-t)/(1+t),i)},sign:function(t){return 0>t?-1:1},adjust_lon:function(t){return t=Math.abs(t)this.HALF_PI)return+Number.NaN;if(i==this.HALF_PI)return Number.POSITIVE_INFINITY;if(i==-1*this.HALF_PI)return-1*Number.POSITIVE_INFINITY;var e=t*s;return Math.log(Math.tan((this.HALF_PI+i)/2))+t*Math.log((1-e)/(1+e))/2},fL:function(t,i){return 2*Math.atan(t*Math.exp(i))-this.HALF_PI},invlatiso:function(t,i){var s=this.fL(1,i),e=0,o=0;do e=s,o=t*Math.sin(e),s=this.fL(Math.exp(t*Math.log((1+o)/(1-o))/2),i);while(Math.abs(s-e)>1e-12);return s},sinh:function(t){var i=Math.exp(t);return i=(i-1/i)/2},cosh:function(t){var i=Math.exp(t);return i=(i+1/i)/2},tanh:function(t){var i=Math.exp(t);return i=(i-1/i)/(i+1/i)},asinh:function(t){var i=t>=0?1:-1;return i*Math.log(Math.abs(t)+Math.sqrt(t*t+1))},acosh:function(t){return 2*Math.log(Math.sqrt((t+1)/2)+Math.sqrt((t-1)/2))},atanh:function(t){return Math.log((t-1)/(t+1))/2},gN:function(t,i,s){var e=i*s;return t/Math.sqrt(1-e*e)},pj_enfn:function(t){var i=[];i[0]=this.C00-t*(this.C02+t*(this.C04+t*(this.C06+t*this.C08))),i[1]=t*(this.C22-t*(this.C04+t*(this.C06+t*this.C08)));var s=t*t;return i[2]=s*(this.C44-t*(this.C46+t*this.C48)),s*=t,i[3]=s*(this.C66-t*this.C68),i[4]=s*t*this.C88,i},pj_mlfn:function(t,i,s,e){return s*=i,i*=i,e[0]*t-s*(e[1]+i*(e[2]+i*(e[3]+i*e[4])))},pj_inv_mlfn:function(t,i,s){for(var e=1/(1-i),o=t,n=Proj4js.common.MAX_ITER;n;--n){var a=Math.sin(o),r=1-i*a*a;if(r=(this.pj_mlfn(o,a,Math.cos(o),s)-t)*r*Math.sqrt(r)*e,o-=r,Math.abs(r)i;i++)t.datum_params[i]=parseFloat(t.datum_params[i]);(0!=t.datum_params[0]||0!=t.datum_params[1]||0!=t.datum_params[2])&&(this.datum_type=Proj4js.common.PJD_3PARAM),t.datum_params.length>3&&(0!=t.datum_params[3]||0!=t.datum_params[4]||0!=t.datum_params[5]||0!=t.datum_params[6])&&(this.datum_type=Proj4js.common.PJD_7PARAM,t.datum_params[3]*=Proj4js.common.SEC_TO_RAD,t.datum_params[4]*=Proj4js.common.SEC_TO_RAD,t.datum_params[5]*=Proj4js.common.SEC_TO_RAD,t.datum_params[6]=t.datum_params[6]/1e6+1)}t&&(this.a=t.a,this.b=t.b,this.es=t.es,this.ep2=t.ep2,this.datum_params=t.datum_params)},compare_datums:function(t){return this.datum_type!=t.datum_type?!1:this.a!=t.a||Math.abs(this.es-t.es)>5e-11?!1:this.datum_type==Proj4js.common.PJD_3PARAM?this.datum_params[0]==t.datum_params[0]&&this.datum_params[1]==t.datum_params[1]&&this.datum_params[2]==t.datum_params[2]:this.datum_type==Proj4js.common.PJD_7PARAM?this.datum_params[0]==t.datum_params[0]&&this.datum_params[1]==t.datum_params[1]&&this.datum_params[2]==t.datum_params[2]&&this.datum_params[3]==t.datum_params[3]&&this.datum_params[4]==t.datum_params[4]&&this.datum_params[5]==t.datum_params[5]&&this.datum_params[6]==t.datum_params[6]:this.datum_type==Proj4js.common.PJD_GRIDSHIFT||t.datum_type==Proj4js.common.PJD_GRIDSHIFT?(alert("ERROR: Grid shift transformations are not implemented."),!1):!0},geodetic_to_geocentric:function(t){var i,s,e,o,n,a,r,h=t.x,l=t.y,c=t.z?t.z:0,m=0;if(-Proj4js.common.HALF_PI>l&&l>-1.001*Proj4js.common.HALF_PI)l=-Proj4js.common.HALF_PI;else if(l>Proj4js.common.HALF_PI&&1.001*Proj4js.common.HALF_PI>l)l=Proj4js.common.HALF_PI;else if(-Proj4js.common.HALF_PI>l||l>Proj4js.common.HALF_PI)return Proj4js.reportError("geocent:lat out of range:"+l),null;return h>Proj4js.common.PI&&(h-=2*Proj4js.common.PI),n=Math.sin(l),r=Math.cos(l),a=n*n,o=this.a/Math.sqrt(1-this.es*a),i=(o+c)*r*Math.cos(h),s=(o+c)*r*Math.sin(h),e=(o*(1-this.es)+c)*n,t.x=i,t.y=s,t.z=e,m},geocentric_to_geodetic:function(t){var i,s,e,o,n,a,r,h,l,c,m,u,d,p,_,f,P,y=1e-12,g=y*y,L=30,v=t.x,j=t.y,M=t.z?t.z:0;if(d=!1,i=Math.sqrt(v*v+j*j),s=Math.sqrt(v*v+j*j+M*M),y>i/this.a){if(d=!0,_=0,y>s/this.a)return f=Proj4js.common.HALF_PI,P=-this.b,void 0}else _=Math.atan2(j,v);e=M/s,o=i/s,n=1/Math.sqrt(1-this.es*(2-this.es)*o*o),h=o*(1-this.es)*n,l=e*n,p=0;do p++,r=this.a/Math.sqrt(1-this.es*l*l),P=i*h+M*l-r*(1-this.es*l*l),a=this.es*r/(r+P),n=1/Math.sqrt(1-a*(2-a)*o*o),c=o*(1-a)*n,m=e*n,u=m*h-c*l,h=c,l=m;while(u*u>g&&L>p);return f=Math.atan(m/Math.abs(c)),t.x=_,t.y=f,t.z=P,t},geocentric_to_geodetic_noniter:function(t){var i,s,e,o,n,a,r,h,l,c,m,u,d,p,_,f,P,y=t.x,g=t.y,L=t.z?t.z:0;if(y=parseFloat(y),g=parseFloat(g),L=parseFloat(L),P=!1,0!=y)i=Math.atan2(g,y);else if(g>0)i=Proj4js.common.HALF_PI;else if(0>g)i=-Proj4js.common.HALF_PI;else if(P=!0,i=0,L>0)s=Proj4js.common.HALF_PI;else{if(!(0>L))return s=Proj4js.common.HALF_PI,e=-this.b,void 0;s=-Proj4js.common.HALF_PI}return n=y*y+g*g,o=Math.sqrt(n),a=L*Proj4js.common.AD_C,h=Math.sqrt(a*a+n),c=a/h,u=o/h,m=c*c*c,r=L+this.b*this.ep2*m,f=o-this.a*this.es*u*u*u,l=Math.sqrt(r*r+f*f),d=r/l,p=f/l,_=this.a/Math.sqrt(1-this.es*d*d),e=p>=Proj4js.common.COS_67P5?o/p-_:-Proj4js.common.COS_67P5>=p?o/-p-_:L/d+_*(this.es-1),0==P&&(s=Math.atan(d/p)),t.x=i,t.y=s,t.z=e,t},geocentric_to_wgs84:function(t){if(this.datum_type==Proj4js.common.PJD_3PARAM)t.x+=this.datum_params[0],t.y+=this.datum_params[1],t.z+=this.datum_params[2];else if(this.datum_type==Proj4js.common.PJD_7PARAM){var i=this.datum_params[0],s=this.datum_params[1],e=this.datum_params[2],o=this.datum_params[3],n=this.datum_params[4],a=this.datum_params[5],r=this.datum_params[6],h=r*(t.x-a*t.y+n*t.z)+i,l=r*(a*t.x+t.y-o*t.z)+s,c=r*(-n*t.x+o*t.y+t.z)+e;t.x=h,t.y=l,t.z=c}},geocentric_from_wgs84:function(t){if(this.datum_type==Proj4js.common.PJD_3PARAM)t.x-=this.datum_params[0],t.y-=this.datum_params[1],t.z-=this.datum_params[2];else if(this.datum_type==Proj4js.common.PJD_7PARAM){var i=this.datum_params[0],s=this.datum_params[1],e=this.datum_params[2],o=this.datum_params[3],n=this.datum_params[4],a=this.datum_params[5],r=this.datum_params[6],h=(t.x-i)/r,l=(t.y-s)/r,c=(t.z-e)/r;t.x=h+a*l-n*c,t.y=-a*h+l+o*c,t.z=n*h-o*l+c}}}),Proj4js.Point=Proj4js.Class({initialize:function(t,i,s){if("object"==typeof t)this.x=t[0],this.y=t[1],this.z=t[2]||0;else if("string"==typeof t&&i===void 0){var e=t.split(",");this.x=parseFloat(e[0]),this.y=parseFloat(e[1]),this.z=parseFloat(e[2])||0}else this.x=t,this.y=i,this.z=s||0},clone:function(){return new Proj4js.Point(this.x,this.y,this.z)},toString:function(){return"x="+this.x+",y="+this.y},toShortString:function(){return this.x+", "+this.y}}),Proj4js.PrimeMeridian={greenwich:0,lisbon:-9.131906111111,paris:2.337229166667,bogota:-74.080916666667,madrid:-3.687938888889,rome:12.452333333333,bern:7.439583333333,jakarta:106.807719444444,ferro:-17.666666666667,brussels:4.367975,stockholm:18.058277777778,athens:23.7163375,oslo:10.722916666667},Proj4js.Ellipsoid={MERIT:{a:6378137,rf:298.257,ellipseName:"MERIT 1983"},SGS85:{a:6378136,rf:298.257,ellipseName:"Soviet Geodetic System 85"},GRS80:{a:6378137,rf:298.257222101,ellipseName:"GRS 1980(IUGG, 1980)"},IAU76:{a:6378140,rf:298.257,ellipseName:"IAU 1976"},airy:{a:6377563.396,b:6356256.91,ellipseName:"Airy 1830"},"APL4.":{a:6378137,rf:298.25,ellipseName:"Appl. Physics. 1965"},NWL9D:{a:6378145,rf:298.25,ellipseName:"Naval Weapons Lab., 1965"},mod_airy:{a:6377340.189,b:6356034.446,ellipseName:"Modified Airy"},andrae:{a:6377104.43,rf:300,ellipseName:"Andrae 1876 (Den., Iclnd.)"},aust_SA:{a:6378160,rf:298.25,ellipseName:"Australian Natl & S. Amer. 1969"},GRS67:{a:6378160,rf:298.247167427,ellipseName:"GRS 67(IUGG 1967)"},bessel:{a:6377397.155,rf:299.1528128,ellipseName:"Bessel 1841"},bess_nam:{a:6377483.865,rf:299.1528128,ellipseName:"Bessel 1841 (Namibia)"},clrk66:{a:6378206.4,b:6356583.8,ellipseName:"Clarke 1866"},clrk80:{a:6378249.145,rf:293.4663,ellipseName:"Clarke 1880 mod."},CPM:{a:6375738.7,rf:334.29,ellipseName:"Comm. des Poids et Mesures 1799"},delmbr:{a:6376428,rf:311.5,ellipseName:"Delambre 1810 (Belgium)"},engelis:{a:6378136.05,rf:298.2566,ellipseName:"Engelis 1985"},evrst30:{a:6377276.345,rf:300.8017,ellipseName:"Everest 1830"},evrst48:{a:6377304.063,rf:300.8017,ellipseName:"Everest 1948"},evrst56:{a:6377301.243,rf:300.8017,ellipseName:"Everest 1956"},evrst69:{a:6377295.664,rf:300.8017,ellipseName:"Everest 1969"},evrstSS:{a:6377298.556,rf:300.8017,ellipseName:"Everest (Sabah & Sarawak)"},fschr60:{a:6378166,rf:298.3,ellipseName:"Fischer (Mercury Datum) 1960"},fschr60m:{a:6378155,rf:298.3,ellipseName:"Fischer 1960"},fschr68:{a:6378150,rf:298.3,ellipseName:"Fischer 1968"},helmert:{a:6378200,rf:298.3,ellipseName:"Helmert 1906"},hough:{a:6378270,rf:297,ellipseName:"Hough"},intl:{a:6378388,rf:297,ellipseName:"International 1909 (Hayford)"},kaula:{a:6378163,rf:298.24,ellipseName:"Kaula 1961"},lerch:{a:6378139,rf:298.257,ellipseName:"Lerch 1979"},mprts:{a:6397300,rf:191,ellipseName:"Maupertius 1738"},new_intl:{a:6378157.5,b:6356772.2,ellipseName:"New International 1967"},plessis:{a:6376523,rf:6355863,ellipseName:"Plessis 1817 (France)"},krass:{a:6378245,rf:298.3,ellipseName:"Krassovsky, 1942"},SEasia:{a:6378155,b:6356773.3205,ellipseName:"Southeast Asia"},walbeck:{a:6376896,b:6355834.8467,ellipseName:"Walbeck"},WGS60:{a:6378165,rf:298.3,ellipseName:"WGS 60"},WGS66:{a:6378145,rf:298.25,ellipseName:"WGS 66"},WGS72:{a:6378135,rf:298.26,ellipseName:"WGS 72"},WGS84:{a:6378137,rf:298.257223563,ellipseName:"WGS 84"},sphere:{a:6370997,b:6370997,ellipseName:"Normal Sphere (r=6370997)"}},Proj4js.Datum={WGS84:{towgs84:"0,0,0",ellipse:"WGS84",datumName:"WGS84"},GGRS87:{towgs84:"-199.87,74.79,246.62",ellipse:"GRS80",datumName:"Greek_Geodetic_Reference_System_1987"},NAD83:{towgs84:"0,0,0",ellipse:"GRS80",datumName:"North_American_Datum_1983"},NAD27:{nadgrids:"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat",ellipse:"clrk66",datumName:"North_American_Datum_1927"},potsdam:{towgs84:"606.0,23.0,413.0",ellipse:"bessel",datumName:"Potsdam Rauenberg 1950 DHDN"},carthage:{towgs84:"-263.0,6.0,431.0",ellipse:"clark80",datumName:"Carthage 1934 Tunisia"},hermannskogel:{towgs84:"653.0,-212.0,449.0",ellipse:"bessel",datumName:"Hermannskogel"},ire65:{towgs84:"482.530,-130.596,564.557,-1.042,-0.214,-0.631,8.15",ellipse:"mod_airy",datumName:"Ireland 1965"},nzgd49:{towgs84:"59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993",ellipse:"intl",datumName:"New Zealand Geodetic Datum 1949"},OSGB36:{towgs84:"446.448,-125.157,542.060,0.1502,0.2470,0.8421,-20.4894",ellipse:"airy",datumName:"Airy 1830"}},Proj4js.WGS84=new Proj4js.Proj("WGS84"),Proj4js.Datum.OSB36=Proj4js.Datum.OSGB36,Proj4js.wktProjections={"Lambert Tangential Conformal Conic Projection":"lcc",Mercator:"merc","Popular Visualisation Pseudo Mercator":"merc",Mercator_1SP:"merc",Transverse_Mercator:"tmerc","Transverse Mercator":"tmerc","Lambert Azimuthal Equal Area":"laea","Universal Transverse Mercator System":"utm"},Proj4js.Proj.aea={init:function(){return Math.abs(this.lat1+this.lat2)Proj4js.common.EPSLN?(this.ms1*this.ms1-this.ms2*this.ms2)/(this.qs2-this.qs1):this.con,this.c=this.ms1*this.ms1+this.ns0*this.qs1,this.rh=this.a*Math.sqrt(this.c-this.ns0*this.qs0)/this.ns0,void 0)},forward:function(t){var i=t.x,s=t.y;this.sin_phi=Math.sin(s),this.cos_phi=Math.cos(s);var e=Proj4js.common.qsfnz(this.e3,this.sin_phi,this.cos_phi),o=this.a*Math.sqrt(this.c-this.ns0*e)/this.ns0,n=this.ns0*Proj4js.common.adjust_lon(i-this.long0),a=o*Math.sin(n)+this.x0,r=this.rh-o*Math.cos(n)+this.y0;return t.x=a,t.y=r,t},inverse:function(t){var i,s,e,o,n,a;return t.x-=this.x0,t.y=this.rh-t.y+this.y0,this.ns0>=0?(i=Math.sqrt(t.x*t.x+t.y*t.y),e=1):(i=-Math.sqrt(t.x*t.x+t.y*t.y),e=-1),o=0,0!=i&&(o=Math.atan2(e*t.x,e*t.y)),e=i*this.ns0/this.a,s=(this.c-e*e)/this.ns0,this.e3>=1e-10?(e=1-.5*(1-this.es)*Math.log((1-this.e3)/(1+this.e3))/this.e3,a=Math.abs(Math.abs(e)-Math.abs(s))>1e-10?this.phi1z(this.e3,s):s>=0?.5*Proj4js.common.PI:-.5*Proj4js.common.PI):a=this.phi1z(this.e3,s),n=Proj4js.common.adjust_lon(o/this.ns0+this.long0),t.x=n,t.y=a,t},phi1z:function(t,i){var s,e,o,n,a,r=Proj4js.common.asinz(.5*i);if(Proj4js.common.EPSLN>t)return r;for(var h=t*t,l=1;25>=l;l++)if(s=Math.sin(r),e=Math.cos(r),o=t*s,n=1-o*o,a=.5*n*n/e*(i/(1-h)-s/n+.5/t*Math.log((1-o)/(1+o))),r+=a,1e-7>=Math.abs(a))return r;return Proj4js.reportError("aea:phi1z:Convergence error"),null}},Proj4js.Proj.sterea={dependsOn:"gauss",init:function(){return Proj4js.Proj.gauss.init.apply(this),this.rc?(this.sinc0=Math.sin(this.phic0),this.cosc0=Math.cos(this.phic0),this.R2=2*this.rc,this.title||(this.title="Oblique Stereographic Alternative"),void 0):(Proj4js.reportError("sterea:init:E_ERROR_0"),void 0)},forward:function(t){var i,s,e,o;return t.x=Proj4js.common.adjust_lon(t.x-this.long0),Proj4js.Proj.gauss.forward.apply(this,[t]),i=Math.sin(t.y),s=Math.cos(t.y),e=Math.cos(t.x),o=this.k0*this.R2/(1+this.sinc0*i+this.cosc0*s*e),t.x=o*s*Math.sin(t.x),t.y=o*(this.cosc0*i-this.sinc0*s*e),t.x=this.a*t.x+this.x0,t.y=this.a*t.y+this.y0,t},inverse:function(t){var i,s,e,o,n;if(t.x=(t.x-this.x0)/this.a,t.y=(t.y-this.y0)/this.a,t.x/=this.k0,t.y/=this.k0,n=Math.sqrt(t.x*t.x+t.y*t.y)){var a=2*Math.atan2(n,this.R2);i=Math.sin(a),s=Math.cos(a),o=Math.asin(s*this.sinc0+t.y*i*this.cosc0/n),e=Math.atan2(t.x*i,n*this.cosc0*s-t.y*this.sinc0*i)}else o=this.phic0,e=0;return t.x=e,t.y=o,Proj4js.Proj.gauss.inverse.apply(this,[t]),t.x=Proj4js.common.adjust_lon(t.x+this.long0),t}},Proj4js.Proj.poly={init:function(){0==this.lat0&&(this.lat0=90),this.temp=this.b/this.a,this.es=1-Math.pow(this.temp,2),this.e=Math.sqrt(this.es),this.e0=Proj4js.common.e0fn(this.es),this.e1=Proj4js.common.e1fn(this.es),this.e2=Proj4js.common.e2fn(this.es),this.e3=Proj4js.common.e3fn(this.es),this.ml0=Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,this.lat0)},forward:function(t){var i,s,e,o,n,a,r,h=t.x,l=t.y;return e=Proj4js.common.adjust_lon(h-this.long0),1e-7>=Math.abs(l)?(a=this.x0+this.a*e,r=this.y0-this.a*this.ml0):(i=Math.sin(l),s=Math.cos(l),o=Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,l),n=Proj4js.common.msfnz(this.e,i,s),e=i,a=this.x0+this.a*n*Math.sin(e)/i,r=this.y0+this.a*(o-this.ml0+n*(1-Math.cos(e))/i)),t.x=a,t.y=r,t},inverse:function(t){var i,s,e,o,n,a;if(t.x-=this.x0,t.y-=this.y0,i=this.ml0+t.y/this.a,o=0,1e-7>=Math.abs(i))n=t.x/this.a+this.long0,a=0;else{if(s=i*i+t.x/this.a*(t.x/this.a),o=phi4z(this.es,this.e0,this.e1,this.e2,this.e3,this.al,s,e,a),1!=o)return o;n=Proj4js.common.adjust_lon(Proj4js.common.asinz(t.x*e/this.a)/Math.sin(a)+this.long0)}return t.x=n,t.y=a,t}},Proj4js.Proj.equi={init:function(){this.x0||(this.x0=0),this.y0||(this.y0=0),this.lat0||(this.lat0=0),this.long0||(this.long0=0)},forward:function(t){var i=t.x,s=t.y,e=Proj4js.common.adjust_lon(i-this.long0),o=this.x0+this.a*e*Math.cos(this.lat0),n=this.y0+this.a*s;return this.t1=o,this.t2=Math.cos(this.lat0),t.x=o,t.y=n,t},inverse:function(t){t.x-=this.x0,t.y-=this.y0;var i=t.y/this.a;Math.abs(i)>Proj4js.common.HALF_PI&&Proj4js.reportError("equi:Inv:DataError");var s=Proj4js.common.adjust_lon(this.long0+t.x/(this.a*Math.cos(this.lat0)));t.x=s,t.y=i}},Proj4js.Proj.merc={init:function(){this.lat_ts&&(this.k0=this.sphere?Math.cos(this.lat_ts):Proj4js.common.msfnz(this.es,Math.sin(this.lat_ts),Math.cos(this.lat_ts)))},forward:function(t){var i=t.x,s=t.y;if(s*Proj4js.common.R2D>90&&-90>s*Proj4js.common.R2D&&i*Proj4js.common.R2D>180&&-180>i*Proj4js.common.R2D)return Proj4js.reportError("merc:forward: llInputOutOfRange: "+i+" : "+s),null;var e,o;if(Math.abs(Math.abs(s)-Proj4js.common.HALF_PI)<=Proj4js.common.EPSLN)return Proj4js.reportError("merc:forward: ll2mAtPoles"),null;if(this.sphere)e=this.x0+this.a*this.k0*Proj4js.common.adjust_lon(i-this.long0),o=this.y0+this.a*this.k0*Math.log(Math.tan(Proj4js.common.FORTPI+.5*s));else{var n=Math.sin(s),a=Proj4js.common.tsfnz(this.e,s,n);e=this.x0+this.a*this.k0*Proj4js.common.adjust_lon(i-this.long0),o=this.y0-this.a*this.k0*Math.log(a)}return t.x=e,t.y=o,t},inverse:function(t){var i,s,e=t.x-this.x0,o=t.y-this.y0;if(this.sphere)s=Proj4js.common.HALF_PI-2*Math.atan(Math.exp(-o/this.a*this.k0));else{var n=Math.exp(-o/(this.a*this.k0));if(s=Proj4js.common.phi2z(this.e,n),-9999==s)return Proj4js.reportError("merc:inverse: lat = -9999"),null}return i=Proj4js.common.adjust_lon(this.long0+e/(this.a*this.k0)),t.x=i,t.y=s,t}},Proj4js.Proj.utm={dependsOn:"tmerc",init:function(){return this.zone?(this.lat0=0,this.long0=(6*Math.abs(this.zone)-183)*Proj4js.common.D2R,this.x0=5e5,this.y0=this.utmSouth?1e7:0,this.k0=.9996,Proj4js.Proj.tmerc.init.apply(this),this.forward=Proj4js.Proj.tmerc.forward,this.inverse=Proj4js.Proj.tmerc.inverse,void 0):(Proj4js.reportError("utm:init: zone must be specified for UTM"),void 0)}},Proj4js.Proj.eqdc={init:function(){this.mode||(this.mode=0),this.temp=this.b/this.a,this.es=1-Math.pow(this.temp,2),this.e=Math.sqrt(this.es),this.e0=Proj4js.common.e0fn(this.es),this.e1=Proj4js.common.e1fn(this.es),this.e2=Proj4js.common.e2fn(this.es),this.e3=Proj4js.common.e3fn(this.es),this.sinphi=Math.sin(this.lat1),this.cosphi=Math.cos(this.lat1),this.ms1=Proj4js.common.msfnz(this.e,this.sinphi,this.cosphi),this.ml1=Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,this.lat1),0!=this.mode?(Math.abs(this.lat1+this.lat2)=Proj4js.common.EPSLN?(this.ms1-this.ms2)/(this.ml2-this.ml1):this.sinphi):this.ns=this.sinphi,this.g=this.ml1+this.ms1/this.ns,this.ml0=Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,this.lat0),this.rh=this.a*(this.g-this.ml0)},forward:function(t){var i=t.x,s=t.y,e=Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,s),o=this.a*(this.g-e),n=this.ns*Proj4js.common.adjust_lon(i-this.long0),a=this.x0+o*Math.sin(n),r=this.y0+this.rh-o*Math.cos(n);return t.x=a,t.y=r,t},inverse:function(t){t.x-=this.x0,t.y=this.rh-t.y+this.y0;var i,s;this.ns>=0?(s=Math.sqrt(t.x*t.x+t.y*t.y),i=1):(s=-Math.sqrt(t.x*t.x+t.y*t.y),i=-1);var e=0;0!=s&&(e=Math.atan2(i*t.x,i*t.y));var o=this.g-s/this.a,n=this.phi3z(o,this.e0,this.e1,this.e2,this.e3),a=Proj4js.common.adjust_lon(this.long0+e/this.ns);return t.x=a,t.y=n,t},phi3z:function(t,i,s,e,o){var n,a;n=t;for(var r=0;15>r;r++)if(a=(t+s*Math.sin(2*n)-e*Math.sin(4*n)+o*Math.sin(6*n))/i-n,n+=a,1e-10>=Math.abs(a))return n;return Proj4js.reportError("PHI3Z-CONV:Latitude failed to converge after 15 iterations"),null}},Proj4js.Proj.tmerc={init:function(){this.e0=Proj4js.common.e0fn(this.es),this.e1=Proj4js.common.e1fn(this.es),this.e2=Proj4js.common.e2fn(this.es),this.e3=Proj4js.common.e3fn(this.es),this.ml0=this.a*Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,this.lat0)},forward:function(t){var i,s,e,o=t.x,n=t.y,a=Proj4js.common.adjust_lon(o-this.long0),r=Math.sin(n),h=Math.cos(n);if(this.sphere){var l=h*Math.sin(a);if(1e-10>Math.abs(Math.abs(l)-1))return Proj4js.reportError("tmerc:forward: Point projects into infinity"),93;s=.5*this.a*this.k0*Math.log((1+l)/(1-l)),i=Math.acos(h*Math.cos(a)/Math.sqrt(1-l*l)),0>n&&(i=-i),e=this.a*this.k0*(i-this.lat0)}else{var c=h*a,m=Math.pow(c,2),u=this.ep2*Math.pow(h,2),d=Math.tan(n),p=Math.pow(d,2);i=1-this.es*Math.pow(r,2);var _=this.a/Math.sqrt(i),f=this.a*Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,n);s=this.k0*_*c*(1+m/6*(1-p+u+m/20*(5-18*p+Math.pow(p,2)+72*u-58*this.ep2)))+this.x0,e=this.k0*(f-this.ml0+_*d*m*(.5+m/24*(5-p+9*u+4*Math.pow(u,2)+m/30*(61-58*p+Math.pow(p,2)+600*u-330*this.ep2))))+this.y0}return t.x=s,t.y=e,t},inverse:function(t){var i,s,e,o,n,a,r=6;if(this.sphere){var h=Math.exp(t.x/(this.a*this.k0)),l=.5*(h-1/h),c=this.lat0+t.y/(this.a*this.k0),m=Math.cos(c);i=Math.sqrt((1-m*m)/(1+l*l)),n=Proj4js.common.asinz(i),0>c&&(n=-n),a=0==l&&0==m?this.long0:Proj4js.common.adjust_lon(Math.atan2(l,m)+this.long0)}else{var u=t.x-this.x0,d=t.y-this.y0;for(i=(this.ml0+d/this.k0)/this.a,s=i,o=0;!0&&(e=(i+this.e1*Math.sin(2*s)-this.e2*Math.sin(4*s)+this.e3*Math.sin(6*s))/this.e0-s,s+=e,!(Math.abs(e)<=Proj4js.common.EPSLN));o++)if(o>=r)return Proj4js.reportError("tmerc:inverse: Latitude failed to converge"),95;if(Math.abs(s)0||Math.abs(a)<=Proj4js.common.EPSLN)var l=this.a*n*s*Math.sin(e),c=this.y0+this.a*n*(this.cos_p14*i-this.sin_p14*s*o);else Proj4js.reportError("orthoFwdPointError");return t.x=l,t.y=c,t},inverse:function(t){var i,s,e,o,n,a,r;return t.x-=this.x0,t.y-=this.y0,i=Math.sqrt(t.x*t.x+t.y*t.y),i>this.a+1e-7&&Proj4js.reportError("orthoInvDataError"),s=Proj4js.common.asinz(i/this.a),e=Math.sin(s),o=Math.cos(s),a=this.long0,Math.abs(i)<=Proj4js.common.EPSLN&&(r=this.lat0),r=Proj4js.common.asinz(o*this.sin_p14+t.y*e*this.cos_p14/i),n=Math.abs(this.lat0)-Proj4js.common.HALF_PI,Math.abs(n)<=Proj4js.common.EPSLN&&(a=this.lat0>=0?Proj4js.common.adjust_lon(this.long0+Math.atan2(t.x,-t.y)):Proj4js.common.adjust_lon(this.long0-Math.atan2(-t.x,t.y))),n=o-this.sin_p14*Math.sin(r),t.x=a,t.y=r,t}},Proj4js.Proj.krovak={init:function(){this.a=6377397.155,this.es=.006674372230614,this.e=Math.sqrt(this.es),this.lat0||(this.lat0=.863937979737193),this.long0||(this.long0=.4334234309119251),this.k0||(this.k0=.9999),this.s45=.785398163397448,this.s90=2*this.s45,this.fi0=this.lat0,this.e2=this.es,this.e=Math.sqrt(this.e2),this.alfa=Math.sqrt(1+this.e2*Math.pow(Math.cos(this.fi0),4)/(1-this.e2)),this.uq=1.04216856380474,this.u0=Math.asin(Math.sin(this.fi0)/this.alfa),this.g=Math.pow((1+this.e*Math.sin(this.fi0))/(1-this.e*Math.sin(this.fi0)),this.alfa*this.e/2),this.k=Math.tan(this.u0/2+this.s45)/Math.pow(Math.tan(this.fi0/2+this.s45),this.alfa)*this.g,this.k1=this.k0,this.n0=this.a*Math.sqrt(1-this.e2)/(1-this.e2*Math.pow(Math.sin(this.fi0),2)),this.s0=1.37008346281555,this.n=Math.sin(this.s0),this.ro0=this.k1*this.n0/Math.tan(this.s0),this.ad=this.s90-this.uq},forward:function(t){var i,s,e,o,n,a,r,h=t.x,l=t.y,c=Proj4js.common.adjust_lon(h-this.long0);return i=Math.pow((1+this.e*Math.sin(l))/(1-this.e*Math.sin(l)),this.alfa*this.e/2),s=2*(Math.atan(this.k*Math.pow(Math.tan(l/2+this.s45),this.alfa)/i)-this.s45),e=-c*this.alfa,o=Math.asin(Math.cos(this.ad)*Math.sin(s)+Math.sin(this.ad)*Math.cos(s)*Math.cos(e)),n=Math.asin(Math.cos(s)*Math.sin(e)/Math.cos(o)),a=this.n*n,r=this.ro0*Math.pow(Math.tan(this.s0/2+this.s45),this.n)/Math.pow(Math.tan(o/2+this.s45),this.n),t.y=r*Math.cos(a)/1,t.x=r*Math.sin(a)/1,this.czech&&(t.y*=-1,t.x*=-1),t},inverse:function(t){var i,s,e,o,n,a,r,h,l=t.x;t.x=t.y,t.y=l,this.czech&&(t.y*=-1,t.x*=-1),a=Math.sqrt(t.x*t.x+t.y*t.y),n=Math.atan2(t.y,t.x),o=n/Math.sin(this.s0),e=2*(Math.atan(Math.pow(this.ro0/a,1/this.n)*Math.tan(this.s0/2+this.s45))-this.s45),i=Math.asin(Math.cos(this.ad)*Math.sin(e)-Math.sin(this.ad)*Math.cos(e)*Math.cos(o)),s=Math.asin(Math.cos(e)*Math.sin(o)/Math.cos(i)),t.x=this.long0-s/this.alfa,r=i,h=0;var c=0;do t.y=2*(Math.atan(Math.pow(this.k,-1/this.alfa)*Math.pow(Math.tan(i/2+this.s45),1/this.alfa)*Math.pow((1+this.e*Math.sin(r))/(1-this.e*Math.sin(r)),this.e/2))-this.s45),1e-10>Math.abs(r-t.y)&&(h=1),r=t.y,c+=1;while(0==h&&15>c);return c>=15?(Proj4js.reportError("PHI3Z-CONV:Latitude failed to converge after 15 iterations"),null):t}},Proj4js.Proj.somerc={init:function(){var t=this.lat0;this.lambda0=this.long0;var i=Math.sin(t),s=this.a,e=this.rf,o=1/e,n=2*o-Math.pow(o,2),a=this.e=Math.sqrt(n);this.R=this.k0*s*Math.sqrt(1-n)/(1-n*Math.pow(i,2)),this.alpha=Math.sqrt(1+n/(1-n)*Math.pow(Math.cos(t),4)),this.b0=Math.asin(i/this.alpha),this.K=Math.log(Math.tan(Math.PI/4+this.b0/2))-this.alpha*Math.log(Math.tan(Math.PI/4+t/2))+this.alpha*a/2*Math.log((1+a*i)/(1-a*i))},forward:function(t){var i=Math.log(Math.tan(Math.PI/4-t.y/2)),s=this.e/2*Math.log((1+this.e*Math.sin(t.y))/(1-this.e*Math.sin(t.y))),e=-this.alpha*(i+s)+this.K,o=2*(Math.atan(Math.exp(e))-Math.PI/4),n=this.alpha*(t.x-this.lambda0),a=Math.atan(Math.sin(n)/(Math.sin(this.b0)*Math.tan(o)+Math.cos(this.b0)*Math.cos(n))),r=Math.asin(Math.cos(this.b0)*Math.sin(o)-Math.sin(this.b0)*Math.cos(o)*Math.cos(n));return t.y=this.R/2*Math.log((1+Math.sin(r))/(1-Math.sin(r)))+this.y0,t.x=this.R*a+this.x0,t},inverse:function(t){for(var i=t.x-this.x0,s=t.y-this.y0,e=i/this.R,o=2*(Math.atan(Math.exp(s/this.R))-Math.PI/4),n=Math.asin(Math.cos(this.b0)*Math.sin(o)+Math.sin(this.b0)*Math.cos(o)*Math.cos(e)),a=Math.atan(Math.sin(e)/(Math.cos(this.b0)*Math.cos(e)-Math.sin(this.b0)*Math.tan(o))),r=this.lambda0+a/this.alpha,h=0,l=n,c=-1e3,m=0;Math.abs(l-c)>1e-7;){if(++m>20)return Proj4js.reportError("omercFwdInfinity"),void 0;h=1/this.alpha*(Math.log(Math.tan(Math.PI/4+n/2))-this.K)+this.e*Math.log(Math.tan(Math.PI/4+Math.asin(this.e*Math.sin(l))/2)),c=l,l=2*Math.atan(Math.exp(h))-Math.PI/2}return t.x=r,t.y=l,t}},Proj4js.Proj.stere={ssfn_:function(t,i,s){return i*=s,Math.tan(.5*(Proj4js.common.HALF_PI+t))*Math.pow((1-i)/(1+i),.5*s)},TOL:1e-8,NITER:8,CONV:1e-10,S_POLE:0,N_POLE:1,OBLIQ:2,EQUIT:3,init:function(){this.phits=this.lat_ts?this.lat_ts:Proj4js.common.HALF_PI;var t=Math.abs(this.lat0);if(this.mode=Math.abs(t)-Proj4js.common.HALF_PIthis.lat0?this.S_POLE:this.N_POLE:t>Proj4js.common.EPSLN?this.OBLIQ:this.EQUIT,this.phits=Math.abs(this.phits),this.es){var i;switch(this.mode){case this.N_POLE:case this.S_POLE:Math.abs(this.phits-Proj4js.common.HALF_PI)=Proj4js.common.EPSLN?Math.cos(this.phits)/Math.tan(Proj4js.common.FORTPI-.5*this.phits):2*this.k0}},forward:function(t){var i=t.x;i=Proj4js.common.adjust_lon(i-this.long0);var s,e,o=t.y;if(this.sphere){var n,a,r,h;switch(n=Math.sin(o),a=Math.cos(o),r=Math.cos(i),h=Math.sin(i),this.mode){case this.EQUIT:e=1+a*r,Proj4js.common.EPSLN>=e&&Proj4js.reportError("stere:forward:Equit"),e=this.akm1/e,s=e*a*h,e*=n;break;case this.OBLIQ:e=1+this.sinph0*n+this.cosph0*a*r,Proj4js.common.EPSLN>=e&&Proj4js.reportError("stere:forward:Obliq"),e=this.akm1/e,s=e*a*h,e*=this.cosph0*n-this.sinph0*a*r;break;case this.N_POLE:r=-r,o=-o;case this.S_POLE:Math.abs(o-Proj4js.common.HALF_PI)=l;l++)r*=n,h+=this.A[l]*r;for(var c,m,u=h,d=a,p=1,_=0,f=0,P=0,l=1;6>=l;l++)c=p*u-_*d,m=_*u+p*d,p=c,_=m,f=f+this.B_re[l]*p-this.B_im[l]*_,P=P+this.B_im[l]*p+this.B_re[l]*_;return t.x=P*this.a+this.x0,t.y=f*this.a+this.y0,t},inverse:function(t){for(var i,s,e=t.x,o=t.y,n=e-this.x0,a=o-this.y0,r=a/this.a,h=n/this.a,l=1,c=0,m=0,u=0,d=1;6>=d;d++)i=l*r-c*h,s=c*r+l*h,l=i,c=s,m=m+this.C_re[d]*l-this.C_im[d]*c,u=u+this.C_im[d]*l+this.C_re[d]*c;for(var p=0;this.iterations>p;p++){for(var _,f,P=m,y=u,g=r,L=h,d=2;6>=d;d++)_=P*m-y*u,f=y*m+P*u,P=_,y=f,g+=(d-1)*(this.B_re[d]*P-this.B_im[d]*y),L+=(d-1)*(this.B_im[d]*P+this.B_re[d]*y);P=1,y=0;for(var v=this.B_re[1],j=this.B_im[1],d=2;6>=d;d++)_=P*m-y*u,f=y*m+P*u,P=_,y=f,v+=d*(this.B_re[d]*P-this.B_im[d]*y),j+=d*(this.B_im[d]*P+this.B_re[d]*y);var M=v*v+j*j;m=(g*v+L*j)/M,u=(L*v-g*j)/M}for(var S=m,b=u,x=1,E=0,d=1;9>=d;d++)x*=S,E+=this.D[d]*x;var C=this.lat0+1e5*E*Proj4js.common.SEC_TO_RAD,w=this.long0+b;return t.x=w,t.y=C,t}},Proj4js.Proj.mill={init:function(){},forward:function(t){var i=t.x,s=t.y,e=Proj4js.common.adjust_lon(i-this.long0),o=this.x0+this.a*e,n=this.y0+1.25*this.a*Math.log(Math.tan(Proj4js.common.PI/4+s/2.5));return t.x=o,t.y=n,t},inverse:function(t){t.x-=this.x0,t.y-=this.y0;var i=Proj4js.common.adjust_lon(this.long0+t.x/this.a),s=2.5*(Math.atan(Math.exp(.8*t.y/this.a))-Proj4js.common.PI/4);return t.x=i,t.y=s,t}},Proj4js.Proj.gnom={init:function(){this.sin_p14=Math.sin(this.lat0),this.cos_p14=Math.cos(this.lat0),this.infinity_dist=1e3*this.a,this.rc=1},forward:function(t){var i,s,e,o,n,a,r,h,l=t.x,c=t.y;return e=Proj4js.common.adjust_lon(l-this.long0),i=Math.sin(c),s=Math.cos(c),o=Math.cos(e),a=this.sin_p14*i+this.cos_p14*s*o,n=1,a>0||Math.abs(a)<=Proj4js.common.EPSLN?(r=this.x0+this.a*n*s*Math.sin(e)/a,h=this.y0+this.a*n*(this.cos_p14*i-this.sin_p14*s*o)/a):(Proj4js.reportError("orthoFwdPointError"),r=this.x0+this.infinity_dist*s*Math.sin(e),h=this.y0+this.infinity_dist*(this.cos_p14*i-this.sin_p14*s*o)),t.x=r,t.y=h,t},inverse:function(t){var i,s,e,o,n,a;return t.x=(t.x-this.x0)/this.a,t.y=(t.y-this.y0)/this.a,t.x/=this.k0,t.y/=this.k0,(i=Math.sqrt(t.x*t.x+t.y*t.y))?(o=Math.atan2(i,this.rc),s=Math.sin(o),e=Math.cos(o),a=Proj4js.common.asinz(e*this.sin_p14+t.y*s*this.cos_p14/i),n=Math.atan2(t.x*s,i*this.cos_p14*e-t.y*this.sin_p14*s),n=Proj4js.common.adjust_lon(this.long0+n)):(a=this.phic0,n=0),t.x=n,t.y=a,t}},Proj4js.Proj.sinu={init:function(){this.sphere?(this.n=1,this.m=0,this.es=0,this.C_y=Math.sqrt((this.m+1)/this.n),this.C_x=this.C_y/(this.m+1)):this.en=Proj4js.common.pj_enfn(this.es)},forward:function(t){var i,s,e=t.x,o=t.y;if(e=Proj4js.common.adjust_lon(e-this.long0),this.sphere){if(this.m)for(var n=this.n*Math.sin(o),a=Proj4js.common.MAX_ITER;a;--a){var r=(this.m*o+Math.sin(o)-n)/(this.m+Math.cos(o));if(o-=r,Math.abs(r)o?(o=Math.sin(i),s=this.long0+t.x*Math.sqrt(1-this.es*o*o)/(this.a*Math.cos(i)),e=Proj4js.common.adjust_lon(s)):o-Proj4js.common.EPSLN=0?this.y0+Proj4js.common.PI*this.R*Math.tan(.5*a):this.y0+Proj4js.common.PI*this.R*-Math.tan(.5*a));var r=.5*Math.abs(Proj4js.common.PI/n-n/Proj4js.common.PI),h=r*r,l=Math.sin(a),c=Math.cos(a),m=c/(l+c-1),u=m*m,d=m*(2/l-1),p=d*d,_=Proj4js.common.PI*this.R*(r*(m-p)+Math.sqrt(h*(m-p)*(m-p)-(p+h)*(u-p)))/(p+h);return 0>n&&(_=-_),i=this.x0+_,_=Math.abs(_/(Proj4js.common.PI*this.R)),s=o>=0?this.y0+Proj4js.common.PI*this.R*Math.sqrt(1-_*_-2*r*_):this.y0-Proj4js.common.PI*this.R*Math.sqrt(1-_*_-2*r*_),t.x=i,t.y=s,t},inverse:function(t){var i,s,e,o,n,a,r,h,l,c,m,u,d;return t.x-=this.x0,t.y-=this.y0,m=Proj4js.common.PI*this.R,e=t.x/m,o=t.y/m,n=e*e+o*o,a=-Math.abs(o)*(1+n),r=a-2*o*o+e*e,h=-2*a+1+2*o*o+n*n,d=o*o/h+(2*r*r*r/h/h/h-9*a*r/h/h)/27,l=(a-r*r/3/h)/h,c=2*Math.sqrt(-l/3),m=3*d/l/c,Math.abs(m)>1&&(m=m>=0?1:-1),u=Math.acos(m)/3,s=t.y>=0?(-c*Math.cos(u+Proj4js.common.PI/3)-r/3/h)*Proj4js.common.PI:-(-c*Math.cos(u+Proj4js.common.PI/3)-r/3/h)*Proj4js.common.PI,Math.abs(e)0&&(e=2*Math.atan(o*Proj4js.common.srat(this.e*Math.sin(t.y),-.5*this.e))-Proj4js.common.HALF_PI,!(i>Math.abs(e-t.y)));--n)t.y=e;return n?(t.x=s,t.y=e,t):(Proj4js.reportError("gauss:inverse:convergence failed"),null)}},Proj4js.Proj.omerc={init:function(){this.mode||(this.mode=0),this.lon1||(this.lon1=0,this.mode=1),this.lon2||(this.lon2=0),this.lat2||(this.lat2=0);var t=this.b/this.a,i=1-Math.pow(t,2);Math.sqrt(i),this.sin_p20=Math.sin(this.lat0),this.cos_p20=Math.cos(this.lat0),this.con=1-this.es*this.sin_p20*this.sin_p20,this.com=Math.sqrt(1-i),this.bl=Math.sqrt(1+this.es*Math.pow(this.cos_p20,4)/(1-i)),this.al=this.a*this.bl*this.k0*this.com/this.con,Math.abs(this.lat0)0?this.lat0>=0?this.d+Math.sqrt(this.d*this.d-1):this.d-Math.sqrt(this.d*this.d-1):this.d,this.el=this.f*Math.pow(this.ts,this.bl)),0!=this.mode?(this.g=.5*(this.f-1/this.f),this.gama=Proj4js.common.asinz(Math.sin(this.alpha)/this.d),this.longc=this.longc-Proj4js.common.asinz(this.g*Math.tan(this.gama))/this.bl,this.con=Math.abs(this.lat0),this.con>Proj4js.common.EPSLN&&Math.abs(this.con-Proj4js.common.HALF_PI)>Proj4js.common.EPSLN?(this.singam=Math.sin(this.gama),this.cosgam=Math.cos(this.gama),this.sinaz=Math.sin(this.alpha),this.cosaz=Math.cos(this.alpha),this.u=this.lat0>=0?this.al/this.bl*Math.atan(Math.sqrt(this.d*this.d-1)/this.cosaz):-(this.al/this.bl)*Math.atan(Math.sqrt(this.d*this.d-1)/this.cosaz)):Proj4js.reportError("omerc:Init:DataError")):(this.sinphi=Math.sin(this.at1),this.ts1=Proj4js.common.tsfnz(this.e,this.lat1,this.sinphi),this.sinphi=Math.sin(this.lat2),this.ts2=Proj4js.common.tsfnz(this.e,this.lat2,this.sinphi),this.h=Math.pow(this.ts1,this.bl),this.l=Math.pow(this.ts2,this.bl),this.f=this.el/this.h,this.g=.5*(this.f-1/this.f),this.j=(this.el*this.el-this.l*this.h)/(this.el*this.el+this.l*this.h),this.p=(this.l-this.h)/(this.l+this.h),this.dlon=this.lon1-this.lon2,this.dlon<-Proj4js.common.PI&&(this.lon2=this.lon2-2*Proj4js.common.PI),this.dlon>Proj4js.common.PI&&(this.lon2=this.lon2+2*Proj4js.common.PI),this.dlon=this.lon1-this.lon2,this.longc=.5*(this.lon1+this.lon2)-Math.atan(this.j*Math.tan(.5*this.bl*this.dlon)/this.p)/this.bl,this.dlon=Proj4js.common.adjust_lon(this.lon1-this.longc),this.gama=Math.atan(Math.sin(this.bl*this.dlon)/this.g),this.alpha=Proj4js.common.asinz(this.d*Math.sin(this.gama)),Math.abs(this.lat1-this.lat2)<=Proj4js.common.EPSLN?Proj4js.reportError("omercInitDataError"):this.con=Math.abs(this.lat1),this.con<=Proj4js.common.EPSLN||Math.abs(this.con-Proj4js.common.HALF_PI)<=Proj4js.common.EPSLN?Proj4js.reportError("omercInitDataError"):Math.abs(Math.abs(this.lat0)-Proj4js.common.HALF_PI)<=Proj4js.common.EPSLN&&Proj4js.reportError("omercInitDataError"),this.singam=Math.sin(this.gam),this.cosgam=Math.cos(this.gam),this.sinaz=Math.sin(this.alpha),this.cosaz=Math.cos(this.alpha),this.u=this.lat0>=0?this.al/this.bl*Math.atan(Math.sqrt(this.d*this.d-1)/this.cosaz):-(this.al/this.bl)*Math.atan(Math.sqrt(this.d*this.d-1)/this.cosaz))},forward:function(t){var i,s,e,o,n,a,r,h,l,c,m,u=t.x,d=t.y;i=Math.sin(d),c=Proj4js.common.adjust_lon(u-this.longc),a=Math.sin(this.bl*c),Math.abs(Math.abs(d)-Proj4js.common.HALF_PI)>Proj4js.common.EPSLN?(m=Proj4js.common.tsfnz(this.e,d,i),o=this.el/Math.pow(m,this.bl),l=.5*(o-1/o),s=.5*(o+1/o),r=(l*this.singam-a*this.cosgam)/s,e=Math.cos(this.bl*c),1e-7>Math.abs(e)?n=this.al*this.bl*c:(n=this.al*Math.atan((l*this.cosgam+a*this.singam)/e)/this.bl,0>e&&(n+=Proj4js.common.PI*this.al/this.bl))):(r=d>=0?this.singam:-this.singam,n=this.al*d/this.bl),Math.abs(Math.abs(r)-1)<=Proj4js.common.EPSLN&&Proj4js.reportError("omercFwdInfinity"),h=.5*this.al*Math.log((1-r)/(1+r))/this.bl,n-=this.u;var p=this.x0+h*this.cosaz+n*this.sinaz,_=this.y0+n*this.cosaz-h*this.sinaz;return t.x=p,t.y=_,t},inverse:function(t){var i,s,e,o,n,a,r,h,l,c,m,u,d;return t.x-=this.x0,t.y-=this.y0,d=0,o=t.x*this.cosaz-t.y*this.sinaz,n=t.y*this.cosaz+t.x*this.sinaz,n+=this.u,a=Math.exp(-this.bl*o/this.al),r=.5*(a-1/a),s=.5*(a+1/a),l=Math.sin(this.bl*n/this.al),c=(l*this.cosgam+r*this.singam)/s,Math.abs(Math.abs(c)-1)<=Proj4js.common.EPSLN?(m=this.longc,u=c>=0?Proj4js.common.HALF_PI:-Proj4js.common.HALF_PI):(e=1/this.bl,h=Math.pow(this.el/Math.sqrt((1+c)/(1-c)),e),u=Proj4js.common.phi2z(this.e,h),i=this.longc-Math.atan2(r*this.cosgam-l*this.singam,e)/this.bl,m=Proj4js.common.adjust_lon(i)),t.x=m,t.y=u,t}},Proj4js.Proj.lcc={init:function(){if(this.lat2||(this.lat2=this.lat0),this.k0||(this.k0=1),Math.abs(this.lat1+this.lat2)Proj4js.common.EPSLN?Math.log(e/r)/Math.log(o/h):i,this.f0=e/(this.ns*Math.pow(o,this.ns)),this.rh=this.a*this.f0*Math.pow(l,this.ns),this.title||(this.title="Lambert Conformal Conic")},forward:function(t){var i=t.x,s=t.y;if(!(90>=s&&s>=-90&&180>=i&&i>=-180))return Proj4js.reportError("lcc:forward: llInputOutOfRange: "+i+" : "+s),null;var e,o,n=Math.abs(Math.abs(s)-Proj4js.common.HALF_PI);if(n>Proj4js.common.EPSLN)e=Proj4js.common.tsfnz(this.e,s,Math.sin(s)),o=this.a*this.f0*Math.pow(e,this.ns);else{if(n=s*this.ns,0>=n)return Proj4js.reportError("lcc:forward: No Projection"),null;o=0}var a=this.ns*Proj4js.common.adjust_lon(i-this.long0);return t.x=this.k0*o*Math.sin(a)+this.x0,t.y=this.k0*(this.rh-o*Math.cos(a))+this.y0,t},inverse:function(t){var i,s,e,o,n,a=(t.x-this.x0)/this.k0,r=this.rh-(t.y-this.y0)/this.k0;this.ns>0?(i=Math.sqrt(a*a+r*r),s=1):(i=-Math.sqrt(a*a+r*r),s=-1);var h=0;if(0!=i&&(h=Math.atan2(s*a,s*r)),0!=i||this.ns>0){if(s=1/this.ns,e=Math.pow(i/(this.a*this.f0),s),o=Proj4js.common.phi2z(this.e,e),-9999==o)return null}else o=-Proj4js.common.HALF_PI;return n=Proj4js.common.adjust_lon(h/this.ns+this.long0),t.x=n,t.y=o,t}},Proj4js.Proj.laea={S_POLE:1,N_POLE:2,EQUIT:3,OBLIQ:4,init:function(){var t=Math.abs(this.lat0);if(this.mode=Math.abs(t-Proj4js.common.HALF_PI)this.lat0?this.S_POLE:this.N_POLE:Math.abs(t)0){var i;switch(this.qp=Proj4js.common.qsfnz(this.e,1),this.mmf=.5/(1-this.es),this.apa=this.authset(this.es),this.mode){case this.N_POLE:case this.S_POLE:this.dd=1;break;case this.EQUIT:this.rq=Math.sqrt(.5*this.qp),this.dd=1/this.rq,this.xmf=1,this.ymf=.5*this.qp;break;case this.OBLIQ:this.rq=Math.sqrt(.5*this.qp),i=Math.sin(this.lat0),this.sinb1=Proj4js.common.qsfnz(this.e,i)/this.qp,this.cosb1=Math.sqrt(1-this.sinb1*this.sinb1),this.dd=Math.cos(this.lat0)/(Math.sqrt(1-this.es*i*i)*this.rq*this.cosb1),this.ymf=(this.xmf=this.rq)/this.dd,this.xmf*=this.dd}}else this.mode==this.OBLIQ&&(this.sinph0=Math.sin(this.lat0),this.cosph0=Math.cos(this.lat0))},forward:function(t){var i,s,e=t.x,o=t.y;if(e=Proj4js.common.adjust_lon(e-this.long0),this.sphere){var n,a,r;switch(r=Math.sin(o),a=Math.cos(o),n=Math.cos(e),this.mode){case this.OBLIQ:case this.EQUIT:if(s=this.mode==this.EQUIT?1+a*n:1+this.sinph0*r+this.cosph0*a*n,Proj4js.common.EPSLN>=s)return Proj4js.reportError("laea:fwd:y less than eps"),null;s=Math.sqrt(2/s),i=s*a*Math.sin(e),s*=this.mode==this.EQUIT?r:this.cosph0*r-this.sinph0*a*n;break;case this.N_POLE:n=-n;case this.S_POLE:if(Math.abs(o+this.phi0)=0?(i=(u=Math.sqrt(l))*h,s=n*(this.mode==this.S_POLE?u:-u)):i=s=0}}return t.x=this.a*i+this.x0,t.y=this.a*s+this.y0,t},inverse:function(t){t.x-=this.x0,t.y-=this.y0;var i,s,e=t.x/this.a,o=t.y/this.a;if(this.sphere){var n,a=0,r=0;if(n=Math.sqrt(e*e+o*o),s=.5*n,s>1)return Proj4js.reportError("laea:Inv:DataError"),null;switch(s=2*Math.asin(s),(this.mode==this.OBLIQ||this.mode==this.EQUIT)&&(r=Math.sin(s),a=Math.cos(s)),this.mode){case this.EQUIT:s=Math.abs(n)<=Proj4js.common.EPSLN?0:Math.asin(o*r/n),e*=r,o=a*n;break;case this.OBLIQ:s=Math.abs(n)<=Proj4js.common.EPSLN?this.phi0:Math.asin(a*this.sinph0+o*r*this.cosph0/n),e*=r*this.cosph0,o=(a-Math.sin(s)*this.sinph0)*n;break;case this.N_POLE:o=-o,s=Proj4js.common.HALF_PI-s;break;case this.S_POLE:s-=Proj4js.common.HALF_PI}i=0!=o||this.mode!=this.EQUIT&&this.mode!=this.OBLIQ?Math.atan2(e,o):0}else{var h,l,c,m,u=0;switch(this.mode){case this.EQUIT:case this.OBLIQ:if(e/=this.dd,o*=this.dd,m=Math.sqrt(e*e+o*o),Proj4js.common.EPSLN>m)return t.x=0,t.y=this.phi0,t;l=2*Math.asin(.5*m/this.rq),h=Math.cos(l),e*=l=Math.sin(l),this.mode==this.OBLIQ?(u=h*this.sinb1+o*l*this.cosb1/m,c=this.qp*u,o=m*this.cosb1*h-o*this.sinb1*l):(u=o*l/m,c=this.qp*u,o=m*h);break;case this.N_POLE:o=-o;case this.S_POLE:if(c=e*e+o*o,!c)return t.x=0,t.y=this.phi0,t;u=1-c/this.qp,this.mode==this.S_POLE&&(u=-u)}i=Math.atan2(e,o),s=this.authlat(Math.asin(u),this.apa)}return t.x=Proj4js.common.adjust_lon(this.long0+i),t.y=s,t},P00:.3333333333333333,P01:.17222222222222222,P02:.10257936507936508,P10:.06388888888888888,P11:.0664021164021164,P20:.016415012942191543,authset:function(t){var i,s=[];return s[0]=t*this.P00,i=t*t,s[0]+=i*this.P01,s[1]=i*this.P10,i*=t,s[0]+=i*this.P02,s[1]+=i*this.P11,s[2]=i*this.P20,s},authlat:function(t,i){var s=t+t;return t+i[0]*Math.sin(s)+i[1]*Math.sin(s+s)+i[2]*Math.sin(s+s+s)}},Proj4js.Proj.aeqd={init:function(){this.sin_p12=Math.sin(this.lat0),this.cos_p12=Math.cos(this.lat0)},forward:function(t){var i=t.x;t.y;var s,e=Math.sin(t.y),o=Math.cos(t.y),n=Proj4js.common.adjust_lon(i-this.long0),a=Math.cos(n),r=this.sin_p12*e+this.cos_p12*o*a;if(Math.abs(Math.abs(r)-1)r)return Proj4js.reportError("aeqd:Fwd:PointError"),void 0}else{var h=Math.acos(r);s=h/Math.sin(h)}return t.x=this.x0+this.a*s*o*Math.sin(n),t.y=this.y0+this.a*s*(this.cos_p12*e-this.sin_p12*o*a),t},inverse:function(t){t.x-=this.x0,t.y-=this.y0;var i=Math.sqrt(t.x*t.x+t.y*t.y);if(i>2*Proj4js.common.HALF_PI*this.a)return Proj4js.reportError("aeqdInvDataError"),void 0;var s,e=i/this.a,o=Math.sin(e),n=Math.cos(e),a=this.long0;if(Math.abs(i)<=Proj4js.common.EPSLN)s=this.lat0;else{s=Proj4js.common.asinz(n*this.sin_p12+t.y*o*this.cos_p12/i);var r=Math.abs(this.lat0)-Proj4js.common.HALF_PI;Math.abs(r)<=Proj4js.common.EPSLN?a=this.lat0>=0?Proj4js.common.adjust_lon(this.long0+Math.atan2(t.x,-t.y)):Proj4js.common.adjust_lon(this.long0-Math.atan2(-t.x,t.y)):(r=n-this.sin_p12*Math.sin(s),Math.abs(r)=50&&Proj4js.reportError("moll:Fwd:IterationError")}o/=2,Proj4js.common.PI/2-Math.abs(s).999999999999&&(s=.999999999999);var i=Math.asin(s),e=Proj4js.common.adjust_lon(this.long0+t.x/(.900316316158*this.a*Math.cos(i)));-Proj4js.common.PI>e&&(e=-Proj4js.common.PI),e>Proj4js.common.PI&&(e=Proj4js.common.PI),s=(2*i+Math.sin(2*i))/Proj4js.common.PI,Math.abs(s)>1&&(s=1);var o=Math.asin(s);return t.x=e,t.y=o,t}},function(t,i,s){var e,o;typeof exports!=s+""?e=exports:(o=t.L,e={},e.noConflict=function(){return t.L=o,this},t.L=e),e.version="0.5.1",e.Util={extend:function(t){var i,s,e,o,n=Array.prototype.slice.call(arguments,1);for(s=0,e=n.length;e>s;s++){o=n[s]||{};for(i in o)o.hasOwnProperty(i)&&(t[i]=o[i])}return t},bind:function(t,i){var s=arguments.length>2?Array.prototype.slice.call(arguments,2):null;return function(){return t.apply(i,s||arguments)}},stamp:function(){var t=0,i="_leaflet_id";return function(s){return s[i]=s[i]||++t,s[i]}}(),limitExecByInterval:function(t,i,e){var o,n;return function a(){var r=arguments;return o?(n=!0,s):(o=!0,setTimeout(function(){o=!1,n&&(a.apply(e,r),n=!1)},i),t.apply(e,r),s)}},falseFn:function(){return!1},formatNum:function(t,i){var s=Math.pow(10,i||5);return Math.round(t*s)/s},splitWords:function(t){return t.replace(/^\s+|\s+$/g,"").split(/\s+/)},setOptions:function(t,i){return t.options=e.extend({},t.options,i),t.options},getParamString:function(t,i){var s=[];for(var e in t)t.hasOwnProperty(e)&&s.push(e+"="+t[e]);return(i&&-1!==i.indexOf("?")?"&":"?")+s.join("&")},template:function(t,i){return t.replace(/\{ *([\w_]+) *\}/g,function(t,s){var e=i[s];if(!i.hasOwnProperty(s))throw Error("No value provided for variable "+t);return e})},isArray:function(t){return"[object Array]"===Object.prototype.toString.call(t)},emptyImageUrl:"data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs="},function(){function i(i){var s,e,o=["webkit","moz","o","ms"];for(s=0;o.length>s&&!e;s++)e=t[o[s]+i];return e}function o(i){var s=+new Date,e=Math.max(0,16-(s-n));return n=s+e,t.setTimeout(i,e)}var n=0,a=t.requestAnimationFrame||i("RequestAnimationFrame")||o,r=t.cancelAnimationFrame||i("CancelAnimationFrame")||i("CancelRequestAnimationFrame")||function(i){t.clearTimeout(i)};e.Util.requestAnimFrame=function(i,n,r,h){return i=e.bind(i,n),r&&a===o?(i(),s):a.call(t,i,h)},e.Util.cancelAnimFrame=function(i){i&&r.call(t,i)}}(),e.extend=e.Util.extend,e.bind=e.Util.bind,e.stamp=e.Util.stamp,e.setOptions=e.Util.setOptions,e.Class=function(){},e.Class.extend=function(t){var i=function(){this.initialize&&this.initialize.apply(this,arguments),this._initHooks&&this.callInitHooks()},s=function(){};s.prototype=this.prototype;var o=new s;o.constructor=i,i.prototype=o;for(var n in this)this.hasOwnProperty(n)&&"prototype"!==n&&(i[n]=this[n]);t.statics&&(e.extend(i,t.statics),delete t.statics),t.includes&&(e.Util.extend.apply(null,[o].concat(t.includes)),delete t.includes),t.options&&o.options&&(t.options=e.extend({},o.options,t.options)),e.extend(o,t),o._initHooks=[];var a=this;return o.callInitHooks=function(){if(!this._initHooksCalled){a.prototype.callInitHooks&&a.prototype.callInitHooks.call(this),this._initHooksCalled=!0;for(var t=0,i=o._initHooks.length;i>t;t++)o._initHooks[t].call(this)}},i},e.Class.include=function(t){e.extend(this.prototype,t)},e.Class.mergeOptions=function(t){e.extend(this.prototype.options,t)},e.Class.addInitHook=function(t){var i=Array.prototype.slice.call(arguments,1),s="function"==typeof t?t:function(){this[t].apply(this,i)};this.prototype._initHooks=this.prototype._initHooks||[],this.prototype._initHooks.push(s)};var n="_leaflet_events";e.Mixin={},e.Mixin.Events={addEventListener:function(t,i,s){var o,a,r,h=this[n]=this[n]||{};if("object"==typeof t){for(o in t)t.hasOwnProperty(o)&&this.addEventListener(o,t[o],i);return this}for(t=e.Util.splitWords(t),a=0,r=t.length;r>a;a++)h[t[a]]=h[t[a]]||[],h[t[a]].push({action:i,context:s||this});return this},hasEventListeners:function(t){return n in this&&t in this[n]&&this[n][t].length>0},removeEventListener:function(t,i,s){var o,a,r,h,l,c=this[n];if("object"==typeof t){for(o in t)t.hasOwnProperty(o)&&this.removeEventListener(o,t[o],i);return this}for(t=e.Util.splitWords(t),a=0,r=t.length;r>a;a++)if(this.hasEventListeners(t[a]))for(h=c[t[a]],l=h.length-1;l>=0;l--)i&&h[l].action!==i||s&&h[l].context!==s||h.splice(l,1);return this},fireEvent:function(t,i){if(!this.hasEventListeners(t))return this;for(var s=e.extend({type:t,target:this},i),o=this[n][t].slice(),a=0,r=o.length;r>a;a++)o[a].action.call(o[a].context||this,s);return this}},e.Mixin.Events.on=e.Mixin.Events.addEventListener,e.Mixin.Events.off=e.Mixin.Events.removeEventListener,e.Mixin.Events.fire=e.Mixin.Events.fireEvent,function(){var o=!!t.ActiveXObject,n=o&&!t.XMLHttpRequest,a=o&&!i.querySelector,r=navigator.userAgent.toLowerCase(),h=-1!==r.indexOf("webkit"),l=-1!==r.indexOf("chrome"),c=-1!==r.indexOf("android"),m=-1!==r.search("android [23]"),u=typeof orientation!=s+"",d=t.navigator&&t.navigator.msPointerEnabled&&t.navigator.msMaxTouchPoints,p="devicePixelRatio"in t&&t.devicePixelRatio>1||"matchMedia"in t&&t.matchMedia("(min-resolution:144dpi)")&&t.matchMedia("(min-resolution:144dpi)").matches,_=i.documentElement,f=o&&"transition"in _.style,P="WebKitCSSMatrix"in t&&"m11"in new t.WebKitCSSMatrix,y="MozPerspective"in _.style,g="OTransition"in _.style,L=!t.L_DISABLE_3D&&(f||P||y||g),v=!t.L_NO_TOUCH&&function(){var t="ontouchstart";if(d||t in _)return!0;var s=i.createElement("div"),e=!1;return s.setAttribute?(s.setAttribute(t,"return;"),"function"==typeof s[t]&&(e=!0),s.removeAttribute(t),s=null,e):!1}();e.Browser={ie:o,ie6:n,ie7:a,webkit:h,android:c,android23:m,chrome:l,ie3d:f,webkit3d:P,gecko3d:y,opera3d:g,any3d:L,mobile:u,mobileWebkit:u&&h,mobileWebkit3d:u&&P,mobileOpera:u&&t.opera,touch:v,msTouch:d,retina:p}}(),e.Point=function(t,i,s){this.x=s?Math.round(t):t,this.y=s?Math.round(i):i},e.Point.prototype={clone:function(){return new e.Point(this.x,this.y)},add:function(t){return this.clone()._add(e.point(t))},_add:function(t){return this.x+=t.x,this.y+=t.y,this},subtract:function(t){return this.clone()._subtract(e.point(t))},_subtract:function(t){return this.x-=t.x,this.y-=t.y,this},divideBy:function(t){return this.clone()._divideBy(t)},_divideBy:function(t){return this.x/=t,this.y/=t,this},multiplyBy:function(t){return this.clone()._multiplyBy(t)},_multiplyBy:function(t){return this.x*=t,this.y*=t,this},round:function(){return this.clone()._round()},_round:function(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this},floor:function(){return this.clone()._floor()},_floor:function(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this},distanceTo:function(t){t=e.point(t);var i=t.x-this.x,s=t.y-this.y;return Math.sqrt(i*i+s*s)},equals:function(t){return t.x===this.x&&t.y===this.y},toString:function(){return"Point("+e.Util.formatNum(this.x)+", "+e.Util.formatNum(this.y)+")"}},e.point=function(t,i,s){return t instanceof e.Point?t:e.Util.isArray(t)?new e.Point(t[0],t[1]):isNaN(t)?t:new e.Point(t,i,s)},e.Bounds=function(t,i){if(t)for(var s=i?[t,i]:t,e=0,o=s.length;o>e;e++)this.extend(s[e])},e.Bounds.prototype={extend:function(t){return t=e.point(t),this.min||this.max?(this.min.x=Math.min(t.x,this.min.x),this.max.x=Math.max(t.x,this.max.x),this.min.y=Math.min(t.y,this.min.y),this.max.y=Math.max(t.y,this.max.y)):(this.min=t.clone(),this.max=t.clone()),this},getCenter:function(t){return new e.Point((this.min.x+this.max.x)/2,(this.min.y+this.max.y)/2,t)},getBottomLeft:function(){return new e.Point(this.min.x,this.max.y)},getTopRight:function(){return new e.Point(this.max.x,this.min.y)},getSize:function(){return this.max.subtract(this.min)},contains:function(t){var i,s;return t="number"==typeof t[0]||t instanceof e.Point?e.point(t):e.bounds(t),t instanceof e.Bounds?(i=t.min,s=t.max):i=s=t,i.x>=this.min.x&&s.x<=this.max.x&&i.y>=this.min.y&&s.y<=this.max.y},intersects:function(t){t=e.bounds(t);var i=this.min,s=this.max,o=t.min,n=t.max,a=n.x>=i.x&&o.x<=s.x,r=n.y>=i.y&&o.y<=s.y;return a&&r},isValid:function(){return!(!this.min||!this.max)}},e.bounds=function(t,i){return!t||t instanceof e.Bounds?t:new e.Bounds(t,i)},e.Transformation=function(t,i,s,e){this._a=t,this._b=i,this._c=s,this._d=e},e.Transformation.prototype={transform:function(t,i){return this._transform(t.clone(),i)},_transform:function(t,i){return i=i||1,t.x=i*(this._a*t.x+this._b),t.y=i*(this._c*t.y+this._d),t},untransform:function(t,i){return i=i||1,new e.Point((t.x/i-this._b)/this._a,(t.y/i-this._d)/this._c)}},e.DomUtil={get:function(t){return"string"==typeof t?i.getElementById(t):t},getStyle:function(t,s){var e=t.style[s];if(!e&&t.currentStyle&&(e=t.currentStyle[s]),(!e||"auto"===e)&&i.defaultView){var o=i.defaultView.getComputedStyle(t,null);e=o?o[s]:null}return"auto"===e?null:e},getViewportOffset:function(t){var s,o=0,n=0,a=t,r=i.body,h=e.Browser.ie7;do{if(o+=a.offsetTop||0,n+=a.offsetLeft||0,o+=parseInt(e.DomUtil.getStyle(a,"borderTopWidth"),10)||0,n+=parseInt(e.DomUtil.getStyle(a,"borderLeftWidth"),10)||0,s=e.DomUtil.getStyle(a,"position"),a.offsetParent===r&&"absolute"===s)break;if("fixed"===s){o+=r.scrollTop||0,n+=r.scrollLeft||0;break}a=a.offsetParent}while(a);a=t;do{if(a===r)break;o-=a.scrollTop||0,n-=a.scrollLeft||0,e.DomUtil.documentIsLtr()||!e.Browser.webkit&&!h||(n+=a.scrollWidth-a.clientWidth,h&&"hidden"!==e.DomUtil.getStyle(a,"overflow-y")&&"hidden"!==e.DomUtil.getStyle(a,"overflow")&&(n+=17)),a=a.parentNode}while(a);return new e.Point(n,o)},documentIsLtr:function(){return e.DomUtil._docIsLtrCached||(e.DomUtil._docIsLtrCached=!0,e.DomUtil._docIsLtr="ltr"===e.DomUtil.getStyle(i.body,"direction")),e.DomUtil._docIsLtr},create:function(t,s,e){var o=i.createElement(t);return o.className=s,e&&e.appendChild(o),o},disableTextSelection:function(){i.selection&&i.selection.empty&&i.selection.empty(),this._onselectstart||(this._onselectstart=i.onselectstart||null,i.onselectstart=e.Util.falseFn)},enableTextSelection:function(){i.onselectstart===e.Util.falseFn&&(i.onselectstart=this._onselectstart,this._onselectstart=null)},hasClass:function(t,i){return t.className.length>0&&RegExp("(^|\\s)"+i+"(\\s|$)").test(t.className)},addClass:function(t,i){e.DomUtil.hasClass(t,i)||(t.className+=(t.className?" ":"")+i)},removeClass:function(t,i){function s(t,s){return s===i?"":t}t.className=t.className.replace(/(\S+)\s*/g,s).replace(/(^\s+|\s+$)/,"")},setOpacity:function(t,i){if("opacity"in t.style)t.style.opacity=i;else if("filter"in t.style){var s=!1,e="DXImageTransform.Microsoft.Alpha";try{s=t.filters.item(e)}catch(o){}i=Math.round(100*i),s?(s.Enabled=100!==i,s.Opacity=i):t.style.filter+=" progid:"+e+"(opacity="+i+")"}},testProp:function(t){for(var s=i.documentElement.style,e=0;t.length>e;e++)if(t[e]in s)return t[e];return!1},getTranslateString:function(t){var i=e.Browser.webkit3d,s="translate"+(i?"3d":"")+"(",o=(i?",0":"")+")";return s+t.x+"px,"+t.y+"px"+o},getScaleString:function(t,i){var s=e.DomUtil.getTranslateString(i.add(i.multiplyBy(-1*t))),o=" scale("+t+") ";return s+o},setPosition:function(t,i,s){t._leaflet_pos=i,!s&&e.Browser.any3d?(t.style[e.DomUtil.TRANSFORM]=e.DomUtil.getTranslateString(i),e.Browser.mobileWebkit3d&&(t.style.WebkitBackfaceVisibility="hidden")):(t.style.left=i.x+"px",t.style.top=i.y+"px")},getPosition:function(t){return t._leaflet_pos}},e.DomUtil.TRANSFORM=e.DomUtil.testProp(["transform","WebkitTransform","OTransform","MozTransform","msTransform"]),e.DomUtil.TRANSITION=e.DomUtil.testProp(["webkitTransition","transition","OTransition","MozTransition","msTransition"]),e.DomUtil.TRANSITION_END="webkitTransition"===e.DomUtil.TRANSITION||"OTransition"===e.DomUtil.TRANSITION?e.DomUtil.TRANSITION+"End":"transitionend",e.LatLng=function(t,i){var s=parseFloat(t),e=parseFloat(i);if(isNaN(s)||isNaN(e))throw Error("Invalid LatLng object: ("+t+", "+i+")");this.lat=s,this.lng=e},e.extend(e.LatLng,{DEG_TO_RAD:Math.PI/180,RAD_TO_DEG:180/Math.PI,MAX_MARGIN:1e-9}),e.LatLng.prototype={equals:function(t){if(!t)return!1;t=e.latLng(t);var i=Math.max(Math.abs(this.lat-t.lat),Math.abs(this.lng-t.lng));return e.LatLng.MAX_MARGIN>=i},toString:function(t){return"LatLng("+e.Util.formatNum(this.lat,t)+", "+e.Util.formatNum(this.lng,t)+")"},distanceTo:function(t){t=e.latLng(t);var i=6378137,s=e.LatLng.DEG_TO_RAD,o=(t.lat-this.lat)*s,n=(t.lng-this.lng)*s,a=this.lat*s,r=t.lat*s,h=Math.sin(o/2),l=Math.sin(n/2),c=h*h+l*l*Math.cos(a)*Math.cos(r);return 2*i*Math.atan2(Math.sqrt(c),Math.sqrt(1-c))},wrap:function(t,i){var s=this.lng;return t=t||-180,i=i||180,s=(s+i)%(i-t)+(t>s||s===i?i:t),new e.LatLng(this.lat,s)}},e.latLng=function(t,i){return t instanceof e.LatLng?t:e.Util.isArray(t)?new e.LatLng(t[0],t[1]):isNaN(t)?t:new e.LatLng(t,i)},e.LatLngBounds=function(t,i){if(t)for(var s=i?[t,i]:t,e=0,o=s.length;o>e;e++)this.extend(s[e])},e.LatLngBounds.prototype={extend:function(t){return t="number"==typeof t[0]||"string"==typeof t[0]||t instanceof e.LatLng?e.latLng(t):e.latLngBounds(t),t instanceof e.LatLng?this._southWest||this._northEast?(this._southWest.lat=Math.min(t.lat,this._southWest.lat),this._southWest.lng=Math.min(t.lng,this._southWest.lng),this._northEast.lat=Math.max(t.lat,this._northEast.lat),this._northEast.lng=Math.max(t.lng,this._northEast.lng)):(this._southWest=new e.LatLng(t.lat,t.lng),this._northEast=new e.LatLng(t.lat,t.lng)):t instanceof e.LatLngBounds&&(this.extend(t._southWest),this.extend(t._northEast)),this},pad:function(t){var i=this._southWest,s=this._northEast,o=Math.abs(i.lat-s.lat)*t,n=Math.abs(i.lng-s.lng)*t;return new e.LatLngBounds(new e.LatLng(i.lat-o,i.lng-n),new e.LatLng(s.lat+o,s.lng+n))},getCenter:function(){return new e.LatLng((this._southWest.lat+this._northEast.lat)/2,(this._southWest.lng+this._northEast.lng)/2)},getSouthWest:function(){return this._southWest},getNorthEast:function(){return this._northEast},getNorthWest:function(){return new e.LatLng(this._northEast.lat,this._southWest.lng)},getSouthEast:function(){return new e.LatLng(this._southWest.lat,this._northEast.lng)},contains:function(t){t="number"==typeof t[0]||t instanceof e.LatLng?e.latLng(t):e.latLngBounds(t);var i,s,o=this._southWest,n=this._northEast;return t instanceof e.LatLngBounds?(i=t.getSouthWest(),s=t.getNorthEast()):i=s=t,i.lat>=o.lat&&s.lat<=n.lat&&i.lng>=o.lng&&s.lng<=n.lng},intersects:function(t){t=e.latLngBounds(t);var i=this._southWest,s=this._northEast,o=t.getSouthWest(),n=t.getNorthEast(),a=n.lat>=i.lat&&o.lat<=s.lat,r=n.lng>=i.lng&&o.lng<=s.lng;return a&&r},toBBoxString:function(){var t=this._southWest,i=this._northEast;return[t.lng,t.lat,i.lng,i.lat].join(",")},equals:function(t){return t?(t=e.latLngBounds(t),this._southWest.equals(t.getSouthWest())&&this._northEast.equals(t.getNorthEast())):!1},isValid:function(){return!(!this._southWest||!this._northEast)}},e.latLngBounds=function(t,i){return!t||t instanceof e.LatLngBounds?t:new e.LatLngBounds(t,i)},e.Projection={},e.Projection.SphericalMercator={MAX_LATITUDE:85.0511287798,project:function(t){var i=e.LatLng.DEG_TO_RAD,s=this.MAX_LATITUDE,o=Math.max(Math.min(s,t.lat),-s),n=t.lng*i,a=o*i;return a=Math.log(Math.tan(Math.PI/4+a/2)),new e.Point(n,a)},unproject:function(t){var i=e.LatLng.RAD_TO_DEG,s=t.x*i,o=(2*Math.atan(Math.exp(t.y))-Math.PI/2)*i;return new e.LatLng(o,s)}},e.Projection.LonLat={project:function(t){return new e.Point(t.lng,t.lat)},unproject:function(t){return new e.LatLng(t.y,t.x)}},e.CRS={latLngToPoint:function(t,i){var s=this.projection.project(t),e=this.scale(i);return this.transformation._transform(s,e)},pointToLatLng:function(t,i){var s=this.scale(i),e=this.transformation.untransform(t,s);return this.projection.unproject(e)},project:function(t){return this.projection.project(t)},scale:function(t){return 256*Math.pow(2,t)}},e.CRS.Simple=e.extend({},e.CRS,{projection:e.Projection.LonLat,transformation:new e.Transformation(1,0,-1,0),scale:function(t){return Math.pow(2,t)}}),e.CRS.EPSG3857=e.extend({},e.CRS,{code:"EPSG:3857",projection:e.Projection.SphericalMercator,transformation:new e.Transformation(.5/Math.PI,.5,-.5/Math.PI,.5),project:function(t){var i=this.projection.project(t),s=6378137;return i.multiplyBy(s)}}),e.CRS.EPSG900913=e.extend({},e.CRS.EPSG3857,{code:"EPSG:900913"}),e.CRS.EPSG4326=e.extend({},e.CRS,{code:"EPSG:4326",projection:e.Projection.LonLat,transformation:new e.Transformation(1/360,.5,-1/360,.5)}),e.Map=e.Class.extend({includes:e.Mixin.Events,options:{crs:e.CRS.EPSG3857,fadeAnimation:e.DomUtil.TRANSITION&&!e.Browser.android23,trackResize:!0,markerZoomAnimation:e.DomUtil.TRANSITION&&e.Browser.any3d},initialize:function(t,i){i=e.setOptions(this,i),this._initContainer(t),this._initLayout(),this.callInitHooks(),this._initEvents(),i.maxBounds&&this.setMaxBounds(i.maxBounds),i.center&&i.zoom!==s&&this.setView(e.latLng(i.center),i.zoom,!0),this._initLayers(i.layers)},setView:function(t,i){return this._resetView(e.latLng(t),this._limitZoom(i)),this},setZoom:function(t){return this.setView(this.getCenter(),t)},zoomIn:function(t){return this.setZoom(this._zoom+(t||1))},zoomOut:function(t){return this.setZoom(this._zoom-(t||1))},fitBounds:function(t){var i=this.getBoundsZoom(t);return this.setView(e.latLngBounds(t).getCenter(),i)},fitWorld:function(){var t=new e.LatLng(-60,-170),i=new e.LatLng(85,179);return this.fitBounds(new e.LatLngBounds(t,i))},panTo:function(t){return this.setView(t,this._zoom)},panBy:function(t){return this.fire("movestart"),this._rawPanBy(e.point(t)),this.fire("move"),this.fire("moveend")},setMaxBounds:function(t){if(t=e.latLngBounds(t),this.options.maxBounds=t,!t)return this._boundsMinZoom=null,this;var i=this.getBoundsZoom(t,!0);return this._boundsMinZoom=i,this._loaded&&(i>this._zoom?this.setView(t.getCenter(),i):this.panInsideBounds(t)),this},panInsideBounds:function(t){t=e.latLngBounds(t);var i=this.getBounds(),s=this.project(i.getSouthWest()),o=this.project(i.getNorthEast()),n=this.project(t.getSouthWest()),a=this.project(t.getNorthEast()),r=0,h=0;return o.ya.x&&(r=a.x-o.x),s.y>n.y&&(h=n.y-s.y),s.x=r);return m&&i?null:i?r:r-1},getSize:function(){return(!this._size||this._sizeChanged)&&(this._size=new e.Point(this._container.clientWidth,this._container.clientHeight),this._sizeChanged=!1),this._size.clone()},getPixelBounds:function(){var t=this._getTopLeftPoint();return new e.Bounds(t,t.add(this.getSize()))},getPixelOrigin:function(){return this._initialTopLeftPoint},getPanes:function(){return this._panes},getContainer:function(){return this._container},getZoomScale:function(t){var i=this.options.crs;return i.scale(t)/i.scale(this._zoom)},getScaleZoom:function(t){return this._zoom+Math.log(t)/Math.LN2},project:function(t,i){return i=i===s?this._zoom:i,this.options.crs.latLngToPoint(e.latLng(t),i)},unproject:function(t,i){return i=i===s?this._zoom:i,this.options.crs.pointToLatLng(e.point(t),i)},layerPointToLatLng:function(t){var i=e.point(t).add(this._initialTopLeftPoint);return this.unproject(i)},latLngToLayerPoint:function(t){var i=this.project(e.latLng(t))._round();return i._subtract(this._initialTopLeftPoint)},containerPointToLayerPoint:function(t){return e.point(t).subtract(this._getMapPanePos())},layerPointToContainerPoint:function(t){return e.point(t).add(this._getMapPanePos())},containerPointToLatLng:function(t){var i=this.containerPointToLayerPoint(e.point(t));return this.layerPointToLatLng(i)},latLngToContainerPoint:function(t){return this.layerPointToContainerPoint(this.latLngToLayerPoint(e.latLng(t)))},mouseEventToContainerPoint:function(t){return e.DomEvent.getMousePosition(t,this._container)},mouseEventToLayerPoint:function(t){return this.containerPointToLayerPoint(this.mouseEventToContainerPoint(t))},mouseEventToLatLng:function(t){return this.layerPointToLatLng(this.mouseEventToLayerPoint(t))},_initContainer:function(t){var i=this._container=e.DomUtil.get(t);if(i._leaflet)throw Error("Map container is already initialized.");i._leaflet=!0},_initLayout:function(){var t=this._container;e.DomUtil.addClass(t,"leaflet-container"),e.Browser.touch&&e.DomUtil.addClass(t,"leaflet-touch"),this.options.fadeAnimation&&e.DomUtil.addClass(t,"leaflet-fade-anim");var i=e.DomUtil.getStyle(t,"position");"absolute"!==i&&"relative"!==i&&"fixed"!==i&&(t.style.position="relative"),this._initPanes(),this._initControlPos&&this._initControlPos()},_initPanes:function(){var t=this._panes={};this._mapPane=t.mapPane=this._createPane("leaflet-map-pane",this._container),this._tilePane=t.tilePane=this._createPane("leaflet-tile-pane",this._mapPane),t.objectsPane=this._createPane("leaflet-objects-pane",this._mapPane),t.shadowPane=this._createPane("leaflet-shadow-pane"),t.overlayPane=this._createPane("leaflet-overlay-pane"),t.markerPane=this._createPane("leaflet-marker-pane"),t.popupPane=this._createPane("leaflet-popup-pane");var i=" leaflet-zoom-hide";this.options.markerZoomAnimation||(e.DomUtil.addClass(t.markerPane,i),e.DomUtil.addClass(t.shadowPane,i),e.DomUtil.addClass(t.popupPane,i))},_createPane:function(t,i){return e.DomUtil.create("div",t,i||this._panes.objectsPane)},_initLayers:function(t){t=t?e.Util.isArray(t)?t:[t]:[],this._layers={},this._zoomBoundLayers={},this._tileLayersNum=0;var i,s;for(i=0,s=t.length;s>i;i++)this.addLayer(t[i])},_resetView:function(t,i,s,o){var n=this._zoom!==i;o||(this.fire("movestart"),n&&this.fire("zoomstart")),this._zoom=i,this._initialTopLeftPoint=this._getNewTopLeftPoint(t),s?this._initialTopLeftPoint._add(this._getMapPanePos()):e.DomUtil.setPosition(this._mapPane,new e.Point(0,0)),this._tileLayersToLoad=this._tileLayersNum;var a=!this._loaded;this._loaded=!0,this.fire("viewreset",{hard:!s}),this.fire("move"),(n||o)&&this.fire("zoomend"),this.fire("moveend",{hard:!s}),a&&this.fire("load")},_rawPanBy:function(t){e.DomUtil.setPosition(this._mapPane,this._getMapPanePos().subtract(t))},_updateZoomLevels:function(){var t,i=1/0,e=-1/0;for(t in this._zoomBoundLayers)if(this._zoomBoundLayers.hasOwnProperty(t)){var o=this._zoomBoundLayers[t];isNaN(o.options.minZoom)||(i=Math.min(i,o.options.minZoom)),isNaN(o.options.maxZoom)||(e=Math.max(e,o.options.maxZoom))}t===s?this._layersMaxZoom=this._layersMinZoom=s:(this._layersMaxZoom=e,this._layersMinZoom=i)},_initEvents:function(){if(e.DomEvent){e.DomEvent.on(this._container,"click",this._onMouseClick,this);var i,s,o=["dblclick","mousedown","mouseup","mouseenter","mouseleave","mousemove","contextmenu"];for(i=0,s=o.length;s>i;i++)e.DomEvent.on(this._container,o[i],this._fireMouseEvent,this);this.options.trackResize&&e.DomEvent.on(t,"resize",this._onResize,this)}},_onResize:function(){e.Util.cancelAnimFrame(this._resizeRequest),this._resizeRequest=e.Util.requestAnimFrame(this.invalidateSize,this,!1,this._container)},_onMouseClick:function(t){!this._loaded||this.dragging&&this.dragging.moved()||(this.fire("preclick"),this._fireMouseEvent(t))},_fireMouseEvent:function(t){if(this._loaded){var i=t.type;if(i="mouseenter"===i?"mouseover":"mouseleave"===i?"mouseout":i,this.hasEventListeners(i)){"contextmenu"===i&&e.DomEvent.preventDefault(t);var s=this.mouseEventToContainerPoint(t),o=this.containerPointToLayerPoint(s),n=this.layerPointToLatLng(o);this.fire(i,{latlng:n,layerPoint:o,containerPoint:s,originalEvent:t})}}},_onTileLayerLoad:function(){this._tileLayersToLoad--,this._tileLayersNum&&!this._tileLayersToLoad&&this._tileBg&&(clearTimeout(this._clearTileBgTimer),this._clearTileBgTimer=setTimeout(e.bind(this._clearTileBg,this),500))},whenReady:function(t,i){return this._loaded?t.call(i||this,this):this.on("load",t,i),this},_getMapPanePos:function(){return e.DomUtil.getPosition(this._mapPane)},_getTopLeftPoint:function(){if(!this._loaded)throw Error("Set map center and zoom first.");return this._initialTopLeftPoint.subtract(this._getMapPanePos())},_getNewTopLeftPoint:function(t,i){var s=this.getSize()._divideBy(2);return this.project(t,i)._subtract(s)._round()},_latLngToNewLayerPoint:function(t,i,s){var e=this._getNewTopLeftPoint(s,i).add(this._getMapPanePos());return this.project(t,i)._subtract(e)},_getCenterLayerPoint:function(){return this.containerPointToLayerPoint(this.getSize()._divideBy(2))},_getCenterOffset:function(t){return this.latLngToLayerPoint(t).subtract(this._getCenterLayerPoint())},_limitZoom:function(t){var i=this.getMinZoom(),s=this.getMaxZoom();return Math.max(i,Math.min(s,t))}}),e.map=function(t,i){return new e.Map(t,i)},e.Projection.Mercator={MAX_LATITUDE:85.0840591556,R_MINOR:6356752.3142,R_MAJOR:6378137,project:function(t){var i=e.LatLng.DEG_TO_RAD,s=this.MAX_LATITUDE,o=Math.max(Math.min(s,t.lat),-s),n=this.R_MAJOR,a=this.R_MINOR,r=t.lng*i*n,h=o*i,l=a/n,c=Math.sqrt(1-l*l),m=c*Math.sin(h);m=Math.pow((1-m)/(1+m),.5*c);var u=Math.tan(.5*(.5*Math.PI-h))/m;return h=-a*Math.log(u),new e.Point(r,h)},unproject:function(t){for(var i,s=e.LatLng.RAD_TO_DEG,o=this.R_MAJOR,n=this.R_MINOR,a=t.x*s/o,r=n/o,h=Math.sqrt(1-r*r),l=Math.exp(-t.y/n),c=Math.PI/2-2*Math.atan(l),m=15,u=1e-7,d=m,p=.1;Math.abs(p)>u&&--d>0;)i=h*Math.sin(c),p=Math.PI/2-2*Math.atan(l*Math.pow((1-i)/(1+i),.5*h))-c,c+=p;return new e.LatLng(c*s,a)}},e.CRS.EPSG3395=e.extend({},e.CRS,{code:"EPSG:3395",projection:e.Projection.Mercator,transformation:function(){var t=e.Projection.Mercator,i=t.R_MAJOR,s=t.R_MINOR;return new e.Transformation(.5/(Math.PI*i),.5,-.5/(Math.PI*s),.5)}()}),e.TileLayer=e.Class.extend({includes:e.Mixin.Events,options:{minZoom:0,maxZoom:18,tileSize:256,subdomains:"abc",errorTileUrl:"",attribution:"",zoomOffset:0,opacity:1,unloadInvisibleTiles:e.Browser.mobile,updateWhenIdle:e.Browser.mobile},initialize:function(t,i){i=e.setOptions(this,i),i.detectRetina&&e.Browser.retina&&i.maxZoom>0&&(i.tileSize=Math.floor(i.tileSize/2),i.zoomOffset++,i.minZoom>0&&i.minZoom--,this.options.maxZoom--),this._url=t;var s=this.options.subdomains;"string"==typeof s&&(this.options.subdomains=s.split(""))},onAdd:function(t){this._map=t,this._initContainer(),this._createTileProto(),t.on({viewreset:this._resetCallback,moveend:this._update},this),this.options.updateWhenIdle||(this._limitedUpdate=e.Util.limitExecByInterval(this._update,150,this),t.on("move",this._limitedUpdate,this)),this._reset(),this._update()},addTo:function(t){return t.addLayer(this),this},onRemove:function(t){this._container.parentNode.removeChild(this._container),t.off({viewreset:this._resetCallback,moveend:this._update},this),this.options.updateWhenIdle||t.off("move",this._limitedUpdate,this),this._container=null,this._map=null},bringToFront:function(){var t=this._map._panes.tilePane;return this._container&&(t.appendChild(this._container),this._setAutoZIndex(t,Math.max)),this},bringToBack:function(){var t=this._map._panes.tilePane;return this._container&&(t.insertBefore(this._container,t.firstChild),this._setAutoZIndex(t,Math.min)),this},getAttribution:function(){return this.options.attribution},setOpacity:function(t){return this.options.opacity=t,this._map&&this._updateOpacity(),this},setZIndex:function(t){return this.options.zIndex=t,this._updateZIndex(),this},setUrl:function(t,i){return this._url=t,i||this.redraw(),this},redraw:function(){return this._map&&(this._map._panes.tilePane.empty=!1,this._reset(!0),this._update()),this},_updateZIndex:function(){this._container&&this.options.zIndex!==s&&(this._container.style.zIndex=this.options.zIndex)},_setAutoZIndex:function(t,i){var s,e,o,n=t.children,a=-i(1/0,-1/0);for(e=0,o=n.length;o>e;e++)n[e]!==this._container&&(s=parseInt(n[e].style.zIndex,10),isNaN(s)||(a=i(a,s)));this.options.zIndex=this._container.style.zIndex=(isFinite(a)?a:0)+i(1,-1)},_updateOpacity:function(){e.DomUtil.setOpacity(this._container,this.options.opacity);var t,i=this._tiles;if(e.Browser.webkit)for(t in i)i.hasOwnProperty(t)&&(i[t].style.webkitTransform+=" translate(0,0)")},_initContainer:function(){var t=this._map._panes.tilePane;(!this._container||t.empty)&&(this._container=e.DomUtil.create("div","leaflet-layer"),this._updateZIndex(),t.appendChild(this._container),1>this.options.opacity&&this._updateOpacity())},_resetCallback:function(t){this._reset(t.hard)},_reset:function(t){var i=this._tiles;for(var s in i)i.hasOwnProperty(s)&&this.fire("tileunload",{tile:i[s]});this._tiles={},this._tilesToLoad=0,this.options.reuseTiles&&(this._unusedTiles=[]),t&&this._container&&(this._container.innerHTML=""),this._initContainer()},_update:function(){if(this._map){var t=this._map.getPixelBounds(),i=this._map.getZoom(),s=this.options.tileSize;if(!(i>this.options.maxZoom||this.options.minZoom>i)){var o=new e.Point(Math.floor(t.min.x/s),Math.floor(t.min.y/s)),n=new e.Point(Math.floor(t.max.x/s),Math.floor(t.max.y/s)),a=new e.Bounds(o,n);this._addTilesFromCenterOut(a),(this.options.unloadInvisibleTiles||this.options.reuseTiles)&&this._removeOtherTiles(a)}}},_addTilesFromCenterOut:function(t){var s,o,n,a=[],r=t.getCenter();for(s=t.min.y;t.max.y>=s;s++)for(o=t.min.x;t.max.x>=o;o++)n=new e.Point(o,s),this._tileShouldBeLoaded(n)&&a.push(n);var h=a.length;if(0!==h){a.sort(function(t,i){return t.distanceTo(r)-i.distanceTo(r)});var l=i.createDocumentFragment();for(this._tilesToLoad||this.fire("loading"),this._tilesToLoad+=h,o=0;h>o;o++)this._addTile(a[o],l);this._container.appendChild(l)}},_tileShouldBeLoaded:function(t){ -if(t.x+":"+t.y in this._tiles)return!1;if(!this.options.continuousWorld){var i=this._getWrapTileNum();if(this.options.noWrap&&(0>t.x||t.x>=i)||0>t.y||t.y>=i)return!1}return!0},_removeOtherTiles:function(t){var i,s,e,o;for(o in this._tiles)this._tiles.hasOwnProperty(o)&&(i=o.split(":"),s=parseInt(i[0],10),e=parseInt(i[1],10),(t.min.x>s||s>t.max.x||t.min.y>e||e>t.max.y)&&this._removeTile(o))},_removeTile:function(t){var i=this._tiles[t];this.fire("tileunload",{tile:i,url:i.src}),this.options.reuseTiles?(e.DomUtil.removeClass(i,"leaflet-tile-loaded"),this._unusedTiles.push(i)):i.parentNode===this._container&&this._container.removeChild(i),e.Browser.android||(i.src=e.Util.emptyImageUrl),delete this._tiles[t]},_addTile:function(t,i){var s=this._getTilePos(t),o=this._getTile();e.DomUtil.setPosition(o,s,e.Browser.chrome||e.Browser.android23),this._tiles[t.x+":"+t.y]=o,this._loadTile(o,t),o.parentNode!==this._container&&i.appendChild(o)},_getZoomForUrl:function(){var t=this.options,i=this._map.getZoom();return t.zoomReverse&&(i=t.maxZoom-i),i+t.zoomOffset},_getTilePos:function(t){var i=this._map.getPixelOrigin(),s=this.options.tileSize;return t.multiplyBy(s).subtract(i)},getTileUrl:function(t){return this._adjustTilePoint(t),e.Util.template(this._url,e.extend({s:this._getSubdomain(t),z:this._getZoomForUrl(),x:t.x,y:t.y},this.options))},_getWrapTileNum:function(){return Math.pow(2,this._getZoomForUrl())},_adjustTilePoint:function(t){var i=this._getWrapTileNum();this.options.continuousWorld||this.options.noWrap||(t.x=(t.x%i+i)%i),this.options.tms&&(t.y=i-t.y-1)},_getSubdomain:function(t){var i=(t.x+t.y)%this.options.subdomains.length;return this.options.subdomains[i]},_createTileProto:function(){var t=this._tileImg=e.DomUtil.create("img","leaflet-tile");t.style.width=t.style.height=this.options.tileSize+"px",t.galleryimg="no"},_getTile:function(){if(this.options.reuseTiles&&this._unusedTiles.length>0){var t=this._unusedTiles.pop();return this._resetTile(t),t}return this._createTile()},_resetTile:function(){},_createTile:function(){var t=this._tileImg.cloneNode(!1);return t.onselectstart=t.onmousemove=e.Util.falseFn,t},_loadTile:function(t,i){t._layer=this,t.onload=this._tileOnLoad,t.onerror=this._tileOnError,t.src=this.getTileUrl(i)},_tileLoaded:function(){this._tilesToLoad--,this._tilesToLoad||this.fire("load")},_tileOnLoad:function(){var t=this._layer;this.src!==e.Util.emptyImageUrl&&(e.DomUtil.addClass(this,"leaflet-tile-loaded"),t.fire("tileload",{tile:this,url:this.src})),t._tileLoaded()},_tileOnError:function(){var t=this._layer;t.fire("tileerror",{tile:this,url:this.src});var i=t.options.errorTileUrl;i&&(this.src=i),t._tileLoaded()}}),e.tileLayer=function(t,i){return new e.TileLayer(t,i)},e.TileLayer.WMS=e.TileLayer.extend({defaultWmsParams:{service:"WMS",request:"GetMap",version:"1.1.1",layers:"",styles:"",format:"image/jpeg",transparent:!1},initialize:function(t,i){this._url=t;var s=e.extend({},this.defaultWmsParams);s.width=s.height=i.detectRetina&&e.Browser.retina?2*this.options.tileSize:this.options.tileSize;for(var o in i)this.options.hasOwnProperty(o)||(s[o]=i[o]);this.wmsParams=s,e.setOptions(this,i)},onAdd:function(t){var i=parseFloat(this.wmsParams.version)>=1.3?"crs":"srs";this.wmsParams[i]=t.options.crs.code,e.TileLayer.prototype.onAdd.call(this,t)},getTileUrl:function(t,i){this._adjustTilePoint(t);var s=this._map,o=s.options.crs,n=this.options.tileSize,a=t.multiplyBy(n),r=a.add(new e.Point(n,n)),h=o.project(s.unproject(a,i)),l=o.project(s.unproject(r,i)),c=[h.x,l.y,l.x,h.y].join(","),m=e.Util.template(this._url,{s:this._getSubdomain(t)});return m+e.Util.getParamString(this.wmsParams,m)+"&bbox="+c},setParams:function(t,i){return e.extend(this.wmsParams,t),i||this.redraw(),this}}),e.tileLayer.wms=function(t,i){return new e.TileLayer.WMS(t,i)},e.TileLayer.Canvas=e.TileLayer.extend({options:{async:!1},initialize:function(t){e.setOptions(this,t)},redraw:function(){var t=this._tiles;for(var i in t)t.hasOwnProperty(i)&&this._redrawTile(t[i])},_redrawTile:function(t){this.drawTile(t,t._tilePoint,this._map._zoom)},_createTileProto:function(){var t=this._canvasProto=e.DomUtil.create("canvas","leaflet-tile");t.width=t.height=this.options.tileSize},_createTile:function(){var t=this._canvasProto.cloneNode(!1);return t.onselectstart=t.onmousemove=e.Util.falseFn,t},_loadTile:function(t,i){t._layer=this,t._tilePoint=i,this._redrawTile(t),this.options.async||this.tileDrawn(t)},drawTile:function(){},tileDrawn:function(t){this._tileOnLoad.call(t)}}),e.tileLayer.canvas=function(t){return new e.TileLayer.Canvas(t)},e.ImageOverlay=e.Class.extend({includes:e.Mixin.Events,options:{opacity:1},initialize:function(t,i,s){this._url=t,this._bounds=e.latLngBounds(i),e.setOptions(this,s)},onAdd:function(t){this._map=t,this._image||this._initImage(),t._panes.overlayPane.appendChild(this._image),t.on("viewreset",this._reset,this),t.options.zoomAnimation&&e.Browser.any3d&&t.on("zoomanim",this._animateZoom,this),this._reset()},onRemove:function(t){t.getPanes().overlayPane.removeChild(this._image),t.off("viewreset",this._reset,this),t.options.zoomAnimation&&t.off("zoomanim",this._animateZoom,this)},addTo:function(t){return t.addLayer(this),this},setOpacity:function(t){return this.options.opacity=t,this._updateOpacity(),this},bringToFront:function(){return this._image&&this._map._panes.overlayPane.appendChild(this._image),this},bringToBack:function(){var t=this._map._panes.overlayPane;return this._image&&t.insertBefore(this._image,t.firstChild),this},_initImage:function(){this._image=e.DomUtil.create("img","leaflet-image-layer"),this._map.options.zoomAnimation&&e.Browser.any3d?e.DomUtil.addClass(this._image,"leaflet-zoom-animated"):e.DomUtil.addClass(this._image,"leaflet-zoom-hide"),this._updateOpacity(),e.extend(this._image,{galleryimg:"no",onselectstart:e.Util.falseFn,onmousemove:e.Util.falseFn,onload:e.bind(this._onImageLoad,this),src:this._url})},_animateZoom:function(t){var i=this._map,s=this._image,o=i.getZoomScale(t.zoom),n=this._bounds.getNorthWest(),a=this._bounds.getSouthEast(),r=i._latLngToNewLayerPoint(n,t.zoom,t.center),h=i._latLngToNewLayerPoint(a,t.zoom,t.center)._subtract(r),l=r._add(h._multiplyBy(.5*(1-1/o)));s.style[e.DomUtil.TRANSFORM]=e.DomUtil.getTranslateString(l)+" scale("+o+") "},_reset:function(){var t=this._image,i=this._map.latLngToLayerPoint(this._bounds.getNorthWest()),s=this._map.latLngToLayerPoint(this._bounds.getSouthEast())._subtract(i);e.DomUtil.setPosition(t,i),t.style.width=s.x+"px",t.style.height=s.y+"px"},_onImageLoad:function(){this.fire("load")},_updateOpacity:function(){e.DomUtil.setOpacity(this._image,this.options.opacity)}}),e.imageOverlay=function(t,i,s){return new e.ImageOverlay(t,i,s)},e.Icon=e.Class.extend({options:{className:""},initialize:function(t){e.setOptions(this,t)},createIcon:function(){return this._createIcon("icon")},createShadow:function(){return this._createIcon("shadow")},_createIcon:function(t){var i=this._getIconUrl(t);if(!i){if("icon"===t)throw Error("iconUrl not set in Icon options (see the docs).");return null}var s=this._createImg(i);return this._setIconStyles(s,t),s},_setIconStyles:function(t,i){var s,o=this.options,n=e.point(o[i+"Size"]);s="shadow"===i?e.point(o.shadowAnchor||o.iconAnchor):e.point(o.iconAnchor),!s&&n&&(s=n.divideBy(2,!0)),t.className="leaflet-marker-"+i+" "+o.className,s&&(t.style.marginLeft=-s.x+"px",t.style.marginTop=-s.y+"px"),n&&(t.style.width=n.x+"px",t.style.height=n.y+"px")},_createImg:function(t){var s;return e.Browser.ie6?(s=i.createElement("div"),s.style.filter='progid:DXImageTransform.Microsoft.AlphaImageLoader(src="'+t+'")'):(s=i.createElement("img"),s.src=t),s},_getIconUrl:function(t){return e.Browser.retina&&this.options[t+"RetinaUrl"]?this.options[t+"RetinaUrl"]:this.options[t+"Url"]}}),e.icon=function(t){return new e.Icon(t)},e.Icon.Default=e.Icon.extend({options:{iconSize:new e.Point(25,41),iconAnchor:new e.Point(12,41),popupAnchor:new e.Point(1,-34),shadowSize:new e.Point(41,41)},_getIconUrl:function(t){var i=t+"Url";if(this.options[i])return this.options[i];e.Browser.retina&&"icon"===t&&(t+="@2x");var s=e.Icon.Default.imagePath;if(!s)throw Error("Couldn't autodetect L.Icon.Default.imagePath, set it manually.");return"marker-"+t+".png"}}),e.Icon.Default.imagePath=function(){var t,s,e,o,n=i.getElementsByTagName("script"),a=/\/?leaflet[\-\._]?([\w\-\._]*)\.js\??/;for(t=0,s=n.length;s>t;t++)if(e=n[t].src,o=e.match(a))return e.split(a)[0]+""}(),e.Marker=e.Class.extend({includes:e.Mixin.Events,options:{icon:new e.Icon.Default,title:"",clickable:!0,draggable:!1,zIndexOffset:0,opacity:1,riseOnHover:!1,riseOffset:250},initialize:function(t,i){e.setOptions(this,i),this._latlng=e.latLng(t)},onAdd:function(t){this._map=t,t.on("viewreset",this.update,this),this._initIcon(),this.update(),t.options.zoomAnimation&&t.options.markerZoomAnimation&&t.on("zoomanim",this._animateZoom,this)},addTo:function(t){return t.addLayer(this),this},onRemove:function(t){this._removeIcon(),this.fire("remove"),t.off({viewreset:this.update,zoomanim:this._animateZoom},this),this._map=null},getLatLng:function(){return this._latlng},setLatLng:function(t){return this._latlng=e.latLng(t),this.update(),this.fire("move",{latlng:this._latlng})},setZIndexOffset:function(t){return this.options.zIndexOffset=t,this.update(),this},setIcon:function(t){return this._map&&this._removeIcon(),this.options.icon=t,this._map&&(this._initIcon(),this.update()),this},update:function(){if(this._icon){var t=this._map.latLngToLayerPoint(this._latlng).round();this._setPos(t)}return this},_initIcon:function(){var t=this.options,i=this._map,s=i.options.zoomAnimation&&i.options.markerZoomAnimation,o=s?"leaflet-zoom-animated":"leaflet-zoom-hide",n=!1;this._icon||(this._icon=t.icon.createIcon(),t.title&&(this._icon.title=t.title),this._initInteraction(),n=1>this.options.opacity,e.DomUtil.addClass(this._icon,o),t.riseOnHover&&e.DomEvent.on(this._icon,"mouseover",this._bringToFront,this).on(this._icon,"mouseout",this._resetZIndex,this)),this._shadow||(this._shadow=t.icon.createShadow(),this._shadow&&(e.DomUtil.addClass(this._shadow,o),n=1>this.options.opacity)),n&&this._updateOpacity();var a=this._map._panes;a.markerPane.appendChild(this._icon),this._shadow&&a.shadowPane.appendChild(this._shadow)},_removeIcon:function(){var t=this._map._panes;this.options.riseOnHover&&e.DomEvent.off(this._icon,"mouseover",this._bringToFront).off(this._icon,"mouseout",this._resetZIndex),t.markerPane.removeChild(this._icon),this._shadow&&t.shadowPane.removeChild(this._shadow),this._icon=this._shadow=null},_setPos:function(t){e.DomUtil.setPosition(this._icon,t),this._shadow&&e.DomUtil.setPosition(this._shadow,t),this._zIndex=t.y+this.options.zIndexOffset,this._resetZIndex()},_updateZIndex:function(t){this._icon.style.zIndex=this._zIndex+t},_animateZoom:function(t){var i=this._map._latLngToNewLayerPoint(this._latlng,t.zoom,t.center);this._setPos(i)},_initInteraction:function(){if(this.options.clickable){var t=this._icon,i=["dblclick","mousedown","mouseover","mouseout","contextmenu"];e.DomUtil.addClass(t,"leaflet-clickable"),e.DomEvent.on(t,"click",this._onMouseClick,this);for(var s=0;i.length>s;s++)e.DomEvent.on(t,i[s],this._fireMouseEvent,this);e.Handler.MarkerDrag&&(this.dragging=new e.Handler.MarkerDrag(this),this.options.draggable&&this.dragging.enable())}},_onMouseClick:function(t){var i=this.dragging&&this.dragging.moved();(this.hasEventListeners(t.type)||i)&&e.DomEvent.stopPropagation(t),i||(this.dragging&&this.dragging._enabled||!this._map.dragging||!this._map.dragging.moved())&&this.fire(t.type,{originalEvent:t})},_fireMouseEvent:function(t){this.fire(t.type,{originalEvent:t}),"contextmenu"===t.type&&this.hasEventListeners(t.type)&&e.DomEvent.preventDefault(t),"mousedown"!==t.type&&e.DomEvent.stopPropagation(t)},setOpacity:function(t){this.options.opacity=t,this._map&&this._updateOpacity()},_updateOpacity:function(){e.DomUtil.setOpacity(this._icon,this.options.opacity),this._shadow&&e.DomUtil.setOpacity(this._shadow,this.options.opacity)},_bringToFront:function(){this._updateZIndex(this.options.riseOffset)},_resetZIndex:function(){this._updateZIndex(0)}}),e.marker=function(t,i){return new e.Marker(t,i)},e.DivIcon=e.Icon.extend({options:{iconSize:new e.Point(12,12),className:"leaflet-div-icon"},createIcon:function(){var t=i.createElement("div"),s=this.options;return s.html&&(t.innerHTML=s.html),s.bgPos&&(t.style.backgroundPosition=-s.bgPos.x+"px "+-s.bgPos.y+"px"),this._setIconStyles(t,"icon"),t},createShadow:function(){return null}}),e.divIcon=function(t){return new e.DivIcon(t)},e.Map.mergeOptions({closePopupOnClick:!0}),e.Popup=e.Class.extend({includes:e.Mixin.Events,options:{minWidth:50,maxWidth:300,maxHeight:null,autoPan:!0,closeButton:!0,offset:new e.Point(0,6),autoPanPadding:new e.Point(5,5),className:"",zoomAnimation:!0},initialize:function(t,i){e.setOptions(this,t),this._source=i,this._animated=e.Browser.any3d&&this.options.zoomAnimation},onAdd:function(t){this._map=t,this._container||this._initLayout(),this._updateContent();var i=t.options.fadeAnimation;i&&e.DomUtil.setOpacity(this._container,0),t._panes.popupPane.appendChild(this._container),t.on("viewreset",this._updatePosition,this),this._animated&&t.on("zoomanim",this._zoomAnimation,this),t.options.closePopupOnClick&&t.on("preclick",this._close,this),this._update(),i&&e.DomUtil.setOpacity(this._container,1)},addTo:function(t){return t.addLayer(this),this},openOn:function(t){return t.openPopup(this),this},onRemove:function(t){t._panes.popupPane.removeChild(this._container),e.Util.falseFn(this._container.offsetWidth),t.off({viewreset:this._updatePosition,preclick:this._close,zoomanim:this._zoomAnimation},this),t.options.fadeAnimation&&e.DomUtil.setOpacity(this._container,0),this._map=null},setLatLng:function(t){return this._latlng=e.latLng(t),this._update(),this},setContent:function(t){return this._content=t,this._update(),this},_close:function(){var t=this._map;t&&(t._popup=null,t.removeLayer(this).fire("popupclose",{popup:this}))},_initLayout:function(){var t,i="leaflet-popup",s=i+" "+this.options.className+" leaflet-zoom-"+(this._animated?"animated":"hide"),o=this._container=e.DomUtil.create("div",s);this.options.closeButton&&(t=this._closeButton=e.DomUtil.create("a",i+"-close-button",o),t.href="#close",t.innerHTML="×",e.DomEvent.on(t,"click",this._onCloseButtonClick,this));var n=this._wrapper=e.DomUtil.create("div",i+"-content-wrapper",o);e.DomEvent.disableClickPropagation(n),this._contentNode=e.DomUtil.create("div",i+"-content",n),e.DomEvent.on(this._contentNode,"mousewheel",e.DomEvent.stopPropagation),this._tipContainer=e.DomUtil.create("div",i+"-tip-container",o),this._tip=e.DomUtil.create("div",i+"-tip",this._tipContainer)},_update:function(){this._map&&(this._container.style.visibility="hidden",this._updateContent(),this._updateLayout(),this._updatePosition(),this._container.style.visibility="",this._adjustPan())},_updateContent:function(){if(this._content){if("string"==typeof this._content)this._contentNode.innerHTML=this._content;else{for(;this._contentNode.hasChildNodes();)this._contentNode.removeChild(this._contentNode.firstChild);this._contentNode.appendChild(this._content)}this.fire("contentupdate")}},_updateLayout:function(){var t=this._contentNode,i=t.style;i.width="",i.whiteSpace="nowrap";var s=t.offsetWidth;s=Math.min(s,this.options.maxWidth),s=Math.max(s,this.options.minWidth),i.width=s+1+"px",i.whiteSpace="",i.height="";var o=t.offsetHeight,n=this.options.maxHeight,a="leaflet-popup-scrolled";n&&o>n?(i.height=n+"px",e.DomUtil.addClass(t,a)):e.DomUtil.removeClass(t,a),this._containerWidth=this._container.offsetWidth},_updatePosition:function(){if(this._map){var t=this._map.latLngToLayerPoint(this._latlng),i=this._animated,s=this.options.offset;i&&e.DomUtil.setPosition(this._container,t),this._containerBottom=-s.y-(i?0:t.y),this._containerLeft=-Math.round(this._containerWidth/2)+s.x+(i?0:t.x),this._container.style.bottom=this._containerBottom+"px",this._container.style.left=this._containerLeft+"px"}},_zoomAnimation:function(t){var i=this._map._latLngToNewLayerPoint(this._latlng,t.zoom,t.center);e.DomUtil.setPosition(this._container,i)},_adjustPan:function(){if(this.options.autoPan){var t=this._map,i=this._container.offsetHeight,s=this._containerWidth,o=new e.Point(this._containerLeft,-i-this._containerBottom);this._animated&&o._add(e.DomUtil.getPosition(this._container));var n=t.layerPointToContainerPoint(o),a=this.options.autoPanPadding,r=t.getSize(),h=0,l=0;0>n.x&&(h=n.x-a.x),n.x+s>r.x&&(h=n.x+s-r.x+a.x),0>n.y&&(l=n.y-a.y),n.y+i>r.y&&(l=n.y+i-r.y+a.y),(h||l)&&t.panBy(new e.Point(h,l))}},_onCloseButtonClick:function(t){this._close(),e.DomEvent.stop(t)}}),e.popup=function(t,i){return new e.Popup(t,i)},e.Marker.include({openPopup:function(){return this._popup&&this._map&&(this._popup.setLatLng(this._latlng),this._map.openPopup(this._popup)),this},closePopup:function(){return this._popup&&this._popup._close(),this},bindPopup:function(t,i){var s=e.point(this.options.icon.options.popupAnchor)||new e.Point(0,0);return s=s.add(e.Popup.prototype.options.offset),i&&i.offset&&(s=s.add(i.offset)),i=e.extend({offset:s},i),this._popup||this.on("click",this.openPopup,this).on("remove",this.closePopup,this).on("move",this._movePopup,this),this._popup=new e.Popup(i,this).setContent(t),this},unbindPopup:function(){return this._popup&&(this._popup=null,this.off("click",this.openPopup).off("remove",this.closePopup).off("move",this._movePopup)),this},_movePopup:function(t){this._popup.setLatLng(t.latlng)}}),e.Map.include({openPopup:function(t){return this.closePopup(),this._popup=t,this.addLayer(t).fire("popupopen",{popup:this._popup})},closePopup:function(){return this._popup&&this._popup._close(),this}}),e.LayerGroup=e.Class.extend({initialize:function(t){this._layers={};var i,s;if(t)for(i=0,s=t.length;s>i;i++)this.addLayer(t[i])},addLayer:function(t){var i=e.stamp(t);return this._layers[i]=t,this._map&&this._map.addLayer(t),this},removeLayer:function(t){var i=e.stamp(t);return delete this._layers[i],this._map&&this._map.removeLayer(t),this},clearLayers:function(){return this.eachLayer(this.removeLayer,this),this},invoke:function(t){var i,s,e=Array.prototype.slice.call(arguments,1);for(i in this._layers)this._layers.hasOwnProperty(i)&&(s=this._layers[i],s[t]&&s[t].apply(s,e));return this},onAdd:function(t){this._map=t,this.eachLayer(t.addLayer,t)},onRemove:function(t){this.eachLayer(t.removeLayer,t),this._map=null},addTo:function(t){return t.addLayer(this),this},eachLayer:function(t,i){for(var s in this._layers)this._layers.hasOwnProperty(s)&&t.call(i,this._layers[s])},setZIndex:function(t){return this.invoke("setZIndex",t)}}),e.layerGroup=function(t){return new e.LayerGroup(t)},e.FeatureGroup=e.LayerGroup.extend({includes:e.Mixin.Events,statics:{EVENTS:"click dblclick mouseover mouseout mousemove contextmenu"},addLayer:function(t){return this._layers[e.stamp(t)]?this:(t.on(e.FeatureGroup.EVENTS,this._propagateEvent,this),e.LayerGroup.prototype.addLayer.call(this,t),this._popupContent&&t.bindPopup&&t.bindPopup(this._popupContent,this._popupOptions),this.fire("layeradd",{layer:t}))},removeLayer:function(t){return t.off(e.FeatureGroup.EVENTS,this._propagateEvent,this),e.LayerGroup.prototype.removeLayer.call(this,t),this._popupContent&&this.invoke("unbindPopup"),this.fire("layerremove",{layer:t})},bindPopup:function(t,i){return this._popupContent=t,this._popupOptions=i,this.invoke("bindPopup",t,i)},setStyle:function(t){return this.invoke("setStyle",t)},bringToFront:function(){return this.invoke("bringToFront")},bringToBack:function(){return this.invoke("bringToBack")},getBounds:function(){var t=new e.LatLngBounds;return this.eachLayer(function(i){t.extend(i instanceof e.Marker?i.getLatLng():i.getBounds())}),t},_propagateEvent:function(t){t.layer=t.target,t.target=this,this.fire(t.type,t)}}),e.featureGroup=function(t){return new e.FeatureGroup(t)},e.Path=e.Class.extend({includes:[e.Mixin.Events],statics:{CLIP_PADDING:e.Browser.mobile?Math.max(0,Math.min(.5,(1280/Math.max(t.innerWidth,t.innerHeight)-1)/2)):.5},options:{stroke:!0,color:"#0033ff",dashArray:null,weight:5,opacity:.5,fill:!1,fillColor:null,fillOpacity:.2,clickable:!0},initialize:function(t){e.setOptions(this,t)},onAdd:function(t){this._map=t,this._container||(this._initElements(),this._initEvents()),this.projectLatlngs(),this._updatePath(),this._container&&this._map._pathRoot.appendChild(this._container),this.fire("add"),t.on({viewreset:this.projectLatlngs,moveend:this._updatePath},this)},addTo:function(t){return t.addLayer(this),this},onRemove:function(t){t._pathRoot.removeChild(this._container),this.fire("remove"),this._map=null,e.Browser.vml&&(this._container=null,this._stroke=null,this._fill=null),t.off({viewreset:this.projectLatlngs,moveend:this._updatePath},this)},projectLatlngs:function(){},setStyle:function(t){return e.setOptions(this,t),this._container&&this._updateStyle(),this},redraw:function(){return this._map&&(this.projectLatlngs(),this._updatePath()),this}}),e.Map.include({_updatePathViewport:function(){var t=e.Path.CLIP_PADDING,i=this.getSize(),s=e.DomUtil.getPosition(this._mapPane),o=s.multiplyBy(-1)._subtract(i.multiplyBy(t)._round()),n=o.add(i.multiplyBy(1+2*t)._round());this._pathViewport=new e.Bounds(o,n)}}),e.Path.SVG_NS="http://www.w3.org/2000/svg",e.Browser.svg=!(!i.createElementNS||!i.createElementNS(e.Path.SVG_NS,"svg").createSVGRect),e.Path=e.Path.extend({statics:{SVG:e.Browser.svg},bringToFront:function(){var t=this._map._pathRoot,i=this._container;return i&&t.lastChild!==i&&t.appendChild(i),this},bringToBack:function(){var t=this._map._pathRoot,i=this._container,s=t.firstChild;return i&&s!==i&&t.insertBefore(i,s),this},getPathString:function(){},_createElement:function(t){return i.createElementNS(e.Path.SVG_NS,t)},_initElements:function(){this._map._initPathRoot(),this._initPath(),this._initStyle()},_initPath:function(){this._container=this._createElement("g"),this._path=this._createElement("path"),this._container.appendChild(this._path)},_initStyle:function(){this.options.stroke&&(this._path.setAttribute("stroke-linejoin","round"),this._path.setAttribute("stroke-linecap","round")),this.options.fill&&this._path.setAttribute("fill-rule","evenodd"),this._updateStyle()},_updateStyle:function(){this.options.stroke?(this._path.setAttribute("stroke",this.options.color),this._path.setAttribute("stroke-opacity",this.options.opacity),this._path.setAttribute("stroke-width",this.options.weight),this.options.dashArray?this._path.setAttribute("stroke-dasharray",this.options.dashArray):this._path.removeAttribute("stroke-dasharray")):this._path.setAttribute("stroke","none"),this.options.fill?(this._path.setAttribute("fill",this.options.fillColor||this.options.color),this._path.setAttribute("fill-opacity",this.options.fillOpacity)):this._path.setAttribute("fill","none")},_updatePath:function(){var t=this.getPathString();t||(t="M0 0"),this._path.setAttribute("d",t)},_initEvents:function(){if(this.options.clickable){(e.Browser.svg||!e.Browser.vml)&&this._path.setAttribute("class","leaflet-clickable"),e.DomEvent.on(this._container,"click",this._onMouseClick,this);for(var t=["dblclick","mousedown","mouseover","mouseout","mousemove","contextmenu"],i=0;t.length>i;i++)e.DomEvent.on(this._container,t[i],this._fireMouseEvent,this)}},_onMouseClick:function(t){this._map.dragging&&this._map.dragging.moved()||this._fireMouseEvent(t)},_fireMouseEvent:function(t){if(this.hasEventListeners(t.type)){var i=this._map,s=i.mouseEventToContainerPoint(t),o=i.containerPointToLayerPoint(s),n=i.layerPointToLatLng(o);this.fire(t.type,{latlng:n,layerPoint:o,containerPoint:s,originalEvent:t}),"contextmenu"===t.type&&e.DomEvent.preventDefault(t),"mousemove"!==t.type&&e.DomEvent.stopPropagation(t)}}}),e.Map.include({_initPathRoot:function(){this._pathRoot||(this._pathRoot=e.Path.prototype._createElement("svg"),this._panes.overlayPane.appendChild(this._pathRoot),this.options.zoomAnimation&&e.Browser.any3d?(this._pathRoot.setAttribute("class"," leaflet-zoom-animated"),this.on({zoomanim:this._animatePathZoom,zoomend:this._endPathZoom})):this._pathRoot.setAttribute("class"," leaflet-zoom-hide"),this.on("moveend",this._updateSvgViewport),this._updateSvgViewport())},_animatePathZoom:function(t){var i=this.getZoomScale(t.zoom),s=this._getCenterOffset(t.center)._multiplyBy(-i)._add(this._pathViewport.min);this._pathRoot.style[e.DomUtil.TRANSFORM]=e.DomUtil.getTranslateString(s)+" scale("+i+") ",this._pathZooming=!0},_endPathZoom:function(){this._pathZooming=!1},_updateSvgViewport:function(){if(!this._pathZooming){this._updatePathViewport();var t=this._pathViewport,i=t.min,s=t.max,o=s.x-i.x,n=s.y-i.y,a=this._pathRoot,r=this._panes.overlayPane;e.Browser.mobileWebkit&&r.removeChild(a),e.DomUtil.setPosition(a,i),a.setAttribute("width",o),a.setAttribute("height",n),a.setAttribute("viewBox",[i.x,i.y,o,n].join(" ")),e.Browser.mobileWebkit&&r.appendChild(a)}}}),e.Path.include({bindPopup:function(t,i){return(!this._popup||i)&&(this._popup=new e.Popup(i,this)),this._popup.setContent(t),this._popupHandlersAdded||(this.on("click",this._openPopup,this).on("remove",this.closePopup,this),this._popupHandlersAdded=!0),this},unbindPopup:function(){return this._popup&&(this._popup=null,this.off("click",this._openPopup).off("remove",this.closePopup),this._popupHandlersAdded=!1),this},openPopup:function(t){return this._popup&&(t=t||this._latlng||this._latlngs[Math.floor(this._latlngs.length/2)],this._openPopup({latlng:t})),this},closePopup:function(){return this._popup&&this._popup._close(),this},_openPopup:function(t){this._popup.setLatLng(t.latlng),this._map.openPopup(this._popup)}}),e.Browser.vml=!e.Browser.svg&&function(){try{var t=i.createElement("div");t.innerHTML='';var s=t.firstChild;return s.style.behavior="url(#default#VML)",s&&"object"==typeof s.adj}catch(e){return!1}}(),e.Path=e.Browser.svg||!e.Browser.vml?e.Path:e.Path.extend({statics:{VML:!0,CLIP_PADDING:.02},_createElement:function(){try{return i.namespaces.add("lvml","urn:schemas-microsoft-com:vml"),function(t){return i.createElement("')}}catch(t){return function(t){return i.createElement("<"+t+' xmlns="urn:schemas-microsoft.com:vml" class="lvml">')}}}(),_initPath:function(){var t=this._container=this._createElement("shape");e.DomUtil.addClass(t,"leaflet-vml-shape"),this.options.clickable&&e.DomUtil.addClass(t,"leaflet-clickable"),t.coordsize="1 1",this._path=this._createElement("path"),t.appendChild(this._path),this._map._pathRoot.appendChild(t)},_initStyle:function(){this._updateStyle()},_updateStyle:function(){var t=this._stroke,i=this._fill,s=this.options,e=this._container;e.stroked=s.stroke,e.filled=s.fill,s.stroke?(t||(t=this._stroke=this._createElement("stroke"),t.endcap="round",e.appendChild(t)),t.weight=s.weight+"px",t.color=s.color,t.opacity=s.opacity,t.dashStyle=s.dashArray?s.dashArray instanceof Array?s.dashArray.join(" "):s.dashArray.replace(/ *, */g," "):""):t&&(e.removeChild(t),this._stroke=null),s.fill?(i||(i=this._fill=this._createElement("fill"),e.appendChild(i)),i.color=s.fillColor||s.color,i.opacity=s.fillOpacity):i&&(e.removeChild(i),this._fill=null)},_updatePath:function(){var t=this._container.style;t.display="none",this._path.v=this.getPathString()+" ",t.display=""}}),e.Map.include(e.Browser.svg||!e.Browser.vml?{}:{_initPathRoot:function(){if(!this._pathRoot){var t=this._pathRoot=i.createElement("div");t.className="leaflet-vml-container",this._panes.overlayPane.appendChild(t),this.on("moveend",this._updatePathViewport),this._updatePathViewport()}}}),e.Browser.canvas=function(){return!!i.createElement("canvas").getContext}(),e.Path=e.Path.SVG&&!t.L_PREFER_CANVAS||!e.Browser.canvas?e.Path:e.Path.extend({statics:{CANVAS:!0,SVG:!1},redraw:function(){return this._map&&(this.projectLatlngs(),this._requestUpdate()),this},setStyle:function(t){return e.setOptions(this,t),this._map&&(this._updateStyle(),this._requestUpdate()),this},onRemove:function(t){t.off("viewreset",this.projectLatlngs,this).off("moveend",this._updatePath,this),this.options.clickable&&this._map.off("click",this._onClick,this),this._requestUpdate(),this._map=null},_requestUpdate:function(){this._map&&!e.Path._updateRequest&&(e.Path._updateRequest=e.Util.requestAnimFrame(this._fireMapMoveEnd,this._map))},_fireMapMoveEnd:function(){e.Path._updateRequest=null,this.fire("moveend")},_initElements:function(){this._map._initPathRoot(),this._ctx=this._map._canvasCtx},_updateStyle:function(){var t=this.options;t.stroke&&(this._ctx.lineWidth=t.weight,this._ctx.strokeStyle=t.color),t.fill&&(this._ctx.fillStyle=t.fillColor||t.color)},_drawPath:function(){var t,i,s,o,n,a;for(this._ctx.beginPath(),t=0,s=this._parts.length;s>t;t++){for(i=0,o=this._parts[t].length;o>i;i++)n=this._parts[t][i],a=(0===i?"move":"line")+"To",this._ctx[a](n.x,n.y);this instanceof e.Polygon&&this._ctx.closePath()}},_checkIfEmpty:function(){return!this._parts.length},_updatePath:function(){if(!this._checkIfEmpty()){var t=this._ctx,i=this.options;this._drawPath(),t.save(),this._updateStyle(),i.fill&&(t.globalAlpha=i.fillOpacity,t.fill()),i.stroke&&(t.globalAlpha=i.opacity,t.stroke()),t.restore()}},_initEvents:function(){this.options.clickable&&this._map.on("click",this._onClick,this)},_onClick:function(t){this._containsPoint(t.layerPoint)&&this.fire("click",{latlng:t.latlng,layerPoint:t.layerPoint,containerPoint:t.containerPoint,originalEvent:t})}}),e.Map.include(e.Path.SVG&&!t.L_PREFER_CANVAS||!e.Browser.canvas?{}:{_initPathRoot:function(){var t,s=this._pathRoot;s||(s=this._pathRoot=i.createElement("canvas"),s.style.position="absolute",t=this._canvasCtx=s.getContext("2d"),t.lineCap="round",t.lineJoin="round",this._panes.overlayPane.appendChild(s),this.options.zoomAnimation&&(this._pathRoot.className="leaflet-zoom-animated",this.on("zoomanim",this._animatePathZoom),this.on("zoomend",this._endPathZoom)),this.on("moveend",this._updateCanvasViewport),this._updateCanvasViewport())},_updateCanvasViewport:function(){if(!this._pathZooming){this._updatePathViewport();var t=this._pathViewport,i=t.min,s=t.max.subtract(i),o=this._pathRoot;e.DomUtil.setPosition(o,i),o.width=s.x,o.height=s.y,o.getContext("2d").translate(-i.x,-i.y)}}}),e.LineUtil={simplify:function(t,i){if(!i||!t.length)return t.slice();var s=i*i;return t=this._reducePoints(t,s),t=this._simplifyDP(t,s)},pointToSegmentDistance:function(t,i,s){return Math.sqrt(this._sqClosestPointOnSegment(t,i,s,!0))},closestPointOnSegment:function(t,i,s){return this._sqClosestPointOnSegment(t,i,s)},_simplifyDP:function(t,i){var e=t.length,o=typeof Uint8Array!=s+""?Uint8Array:Array,n=new o(e);n[0]=n[e-1]=1,this._simplifyDPStep(t,n,i,0,e-1);var a,r=[];for(a=0;e>a;a++)n[a]&&r.push(t[a]);return r},_simplifyDPStep:function(t,i,s,e,o){var n,a,r,h=0;for(a=e+1;o-1>=a;a++)r=this._sqClosestPointOnSegment(t[a],t[e],t[o],!0),r>h&&(n=a,h=r);h>s&&(i[n]=1,this._simplifyDPStep(t,i,s,e,n),this._simplifyDPStep(t,i,s,n,o))},_reducePoints:function(t,i){for(var s=[t[0]],e=1,o=0,n=t.length;n>e;e++)this._sqDist(t[e],t[o])>i&&(s.push(t[e]),o=e);return n-1>o&&s.push(t[n-1]),s},clipSegment:function(t,i,s,e){var o,n,a,r=e?this._lastCode:this._getBitCode(t,s),h=this._getBitCode(i,s);for(this._lastCode=h;;){if(!(r|h))return[t,i];if(r&h)return!1;o=r||h,n=this._getEdgeIntersection(t,i,o,s),a=this._getBitCode(n,s),o===r?(t=n,r=a):(i=n,h=a)}},_getEdgeIntersection:function(t,i,o,n){var a=i.x-t.x,r=i.y-t.y,h=n.min,l=n.max;return 8&o?new e.Point(t.x+a*(l.y-t.y)/r,l.y):4&o?new e.Point(t.x+a*(h.y-t.y)/r,h.y):2&o?new e.Point(l.x,t.y+r*(l.x-t.x)/a):1&o?new e.Point(h.x,t.y+r*(h.x-t.x)/a):s},_getBitCode:function(t,i){var s=0;return t.xi.max.x&&(s|=2),t.yi.max.y&&(s|=8),s},_sqDist:function(t,i){var s=i.x-t.x,e=i.y-t.y;return s*s+e*e},_sqClosestPointOnSegment:function(t,i,s,o){var n,a=i.x,r=i.y,h=s.x-a,l=s.y-r,c=h*h+l*l;return c>0&&(n=((t.x-a)*h+(t.y-r)*l)/c, -n>1?(a=s.x,r=s.y):n>0&&(a+=h*n,r+=l*n)),h=t.x-a,l=t.y-r,o?h*h+l*l:new e.Point(a,r)}},e.Polyline=e.Path.extend({initialize:function(t,i){e.Path.prototype.initialize.call(this,i),this._latlngs=this._convertLatLngs(t)},options:{smoothFactor:1,noClip:!1},projectLatlngs:function(){this._originalPoints=[];for(var t=0,i=this._latlngs.length;i>t;t++)this._originalPoints[t]=this._map.latLngToLayerPoint(this._latlngs[t])},getPathString:function(){for(var t=0,i=this._parts.length,s="";i>t;t++)s+=this._getPathPartStr(this._parts[t]);return s},getLatLngs:function(){return this._latlngs},setLatLngs:function(t){return this._latlngs=this._convertLatLngs(t),this.redraw()},addLatLng:function(t){return this._latlngs.push(e.latLng(t)),this.redraw()},spliceLatLngs:function(){var t=[].splice.apply(this._latlngs,arguments);return this._convertLatLngs(this._latlngs),this.redraw(),t},closestLayerPoint:function(t){for(var i,s,o=1/0,n=this._parts,a=null,r=0,h=n.length;h>r;r++)for(var l=n[r],c=1,m=l.length;m>c;c++){i=l[c-1],s=l[c];var u=e.LineUtil._sqClosestPointOnSegment(t,i,s,!0);o>u&&(o=u,a=e.LineUtil._sqClosestPointOnSegment(t,i,s))}return a&&(a.distance=Math.sqrt(o)),a},getBounds:function(){var t,i,s=new e.LatLngBounds,o=this.getLatLngs();for(t=0,i=o.length;i>t;t++)s.extend(o[t]);return s},_convertLatLngs:function(t){var i,s;for(i=0,s=t.length;s>i;i++){if(e.Util.isArray(t[i])&&"number"!=typeof t[i][0])return;t[i]=e.latLng(t[i])}return t},_initEvents:function(){e.Path.prototype._initEvents.call(this)},_getPathPartStr:function(t){for(var i,s=e.Path.VML,o=0,n=t.length,a="";n>o;o++)i=t[o],s&&i._round(),a+=(o?"L":"M")+i.x+" "+i.y;return a},_clipPoints:function(){var t,i,o,n=this._originalPoints,a=n.length;if(this.options.noClip)return this._parts=[n],s;this._parts=[];var r=this._parts,h=this._map._pathViewport,l=e.LineUtil;for(t=0,i=0;a-1>t;t++)o=l.clipSegment(n[t],n[t+1],h,t),o&&(r[i]=r[i]||[],r[i].push(o[0]),(o[1]!==n[t+1]||t===a-2)&&(r[i].push(o[1]),i++))},_simplifyPoints:function(){for(var t=this._parts,i=e.LineUtil,s=0,o=t.length;o>s;s++)t[s]=i.simplify(t[s],this.options.smoothFactor)},_updatePath:function(){this._map&&(this._clipPoints(),this._simplifyPoints(),e.Path.prototype._updatePath.call(this))}}),e.polyline=function(t,i){return new e.Polyline(t,i)},e.PolyUtil={},e.PolyUtil.clipPolygon=function(t,i){var s,o,n,a,r,h,l,c,m,u=[1,4,2,8],d=e.LineUtil;for(o=0,l=t.length;l>o;o++)t[o]._code=d._getBitCode(t[o],i);for(a=0;4>a;a++){for(c=u[a],s=[],o=0,l=t.length,n=l-1;l>o;n=o++)r=t[o],h=t[n],r._code&c?h._code&c||(m=d._getEdgeIntersection(h,r,c,i),m._code=d._getBitCode(m,i),s.push(m)):(h._code&c&&(m=d._getEdgeIntersection(h,r,c,i),m._code=d._getBitCode(m,i),s.push(m)),s.push(r));t=s}return t},e.Polygon=e.Polyline.extend({options:{fill:!0},initialize:function(t,i){e.Polyline.prototype.initialize.call(this,t,i),t&&e.Util.isArray(t[0])&&"number"!=typeof t[0][0]&&(this._latlngs=this._convertLatLngs(t[0]),this._holes=t.slice(1))},projectLatlngs:function(){if(e.Polyline.prototype.projectLatlngs.call(this),this._holePoints=[],this._holes){var t,i,s,o;for(t=0,s=this._holes.length;s>t;t++)for(this._holePoints[t]=[],i=0,o=this._holes[t].length;o>i;i++)this._holePoints[t][i]=this._map.latLngToLayerPoint(this._holes[t][i])}},_clipPoints:function(){var t=this._originalPoints,i=[];if(this._parts=[t].concat(this._holePoints),!this.options.noClip){for(var s=0,o=this._parts.length;o>s;s++){var n=e.PolyUtil.clipPolygon(this._parts[s],this._map._pathViewport);n.length&&i.push(n)}this._parts=i}},_getPathPartStr:function(t){var i=e.Polyline.prototype._getPathPartStr.call(this,t);return i+(e.Browser.svg?"z":"x")}}),e.polygon=function(t,i){return new e.Polygon(t,i)},function(){function t(t){return e.FeatureGroup.extend({initialize:function(t,i){this._layers={},this._options=i,this.setLatLngs(t)},setLatLngs:function(i){var s=0,e=i.length;for(this.eachLayer(function(t){e>s?t.setLatLngs(i[s++]):this.removeLayer(t)},this);e>s;)this.addLayer(new t(i[s++],this._options));return this}})}e.MultiPolyline=t(e.Polyline),e.MultiPolygon=t(e.Polygon),e.multiPolyline=function(t,i){return new e.MultiPolyline(t,i)},e.multiPolygon=function(t,i){return new e.MultiPolygon(t,i)}}(),e.Rectangle=e.Polygon.extend({initialize:function(t,i){e.Polygon.prototype.initialize.call(this,this._boundsToLatLngs(t),i)},setBounds:function(t){this.setLatLngs(this._boundsToLatLngs(t))},_boundsToLatLngs:function(t){return t=e.latLngBounds(t),[t.getSouthWest(),t.getNorthWest(),t.getNorthEast(),t.getSouthEast()]}}),e.rectangle=function(t,i){return new e.Rectangle(t,i)},e.Circle=e.Path.extend({initialize:function(t,i,s){e.Path.prototype.initialize.call(this,s),this._latlng=e.latLng(t),this._mRadius=i},options:{fill:!0},setLatLng:function(t){return this._latlng=e.latLng(t),this.redraw()},setRadius:function(t){return this._mRadius=t,this.redraw()},projectLatlngs:function(){var t=this._getLngRadius(),i=new e.LatLng(this._latlng.lat,this._latlng.lng-t),s=this._map.latLngToLayerPoint(i);this._point=this._map.latLngToLayerPoint(this._latlng),this._radius=Math.max(Math.round(this._point.x-s.x),1)},getBounds:function(){var t=this._getLngRadius(),i=360*(this._mRadius/40075017),s=this._latlng,o=new e.LatLng(s.lat-i,s.lng-t),n=new e.LatLng(s.lat+i,s.lng+t);return new e.LatLngBounds(o,n)},getLatLng:function(){return this._latlng},getPathString:function(){var t=this._point,i=this._radius;return this._checkIfEmpty()?"":e.Browser.svg?"M"+t.x+","+(t.y-i)+"A"+i+","+i+",0,1,1,"+(t.x-.1)+","+(t.y-i)+" z":(t._round(),i=Math.round(i),"AL "+t.x+","+t.y+" "+i+","+i+" 0,"+23592600)},getRadius:function(){return this._mRadius},_getLatRadius:function(){return 360*(this._mRadius/40075017)},_getLngRadius:function(){return this._getLatRadius()/Math.cos(e.LatLng.DEG_TO_RAD*this._latlng.lat)},_checkIfEmpty:function(){if(!this._map)return!1;var t=this._map._pathViewport,i=this._radius,s=this._point;return s.x-i>t.max.x||s.y-i>t.max.y||s.x+is;s++)for(l=this._parts[s],o=0,r=l.length,n=r-1;r>o;n=o++)if((i||0!==o)&&(h=e.LineUtil.pointToSegmentDistance(t,l[n],l[o]),c>=h))return!0;return!1}}:{}),e.Polygon.include(e.Path.CANVAS?{_containsPoint:function(t){var i,s,o,n,a,r,h,l,c=!1;if(e.Polyline.prototype._containsPoint.call(this,t,!0))return!0;for(n=0,h=this._parts.length;h>n;n++)for(i=this._parts[n],a=0,l=i.length,r=l-1;l>a;r=a++)s=i[a],o=i[r],s.y>t.y!=o.y>t.y&&t.x<(o.x-s.x)*(t.y-s.y)/(o.y-s.y)+s.x&&(c=!c);return c}}:{}),e.Circle.include(e.Path.CANVAS?{_drawPath:function(){var t=this._point;this._ctx.beginPath(),this._ctx.arc(t.x,t.y,this._radius,0,2*Math.PI,!1)},_containsPoint:function(t){var i=this._point,s=this.options.stroke?this.options.weight/2:0;return t.distanceTo(i)<=this._radius+s}}:{}),e.GeoJSON=e.FeatureGroup.extend({initialize:function(t,i){e.setOptions(this,i),this._layers={},t&&this.addData(t)},addData:function(t){var i,s,o=e.Util.isArray(t)?t:t.features;if(o){for(i=0,s=o.length;s>i;i++)(o[i].geometries||o[i].geometry||o[i].features)&&this.addData(o[i]);return this}var n=this.options;if(!n.filter||n.filter(t)){var a=e.GeoJSON.geometryToLayer(t,n.pointToLayer);return a.feature=t,a.defaultOptions=a.options,this.resetStyle(a),n.onEachFeature&&n.onEachFeature(t,a),this.addLayer(a)}},resetStyle:function(t){var i=this.options.style;i&&(e.Util.extend(t.options,t.defaultOptions),this._setLayerStyle(t,i))},setStyle:function(t){this.eachLayer(function(i){this._setLayerStyle(i,t)},this)},_setLayerStyle:function(t,i){"function"==typeof i&&(i=i(t.feature)),t.setStyle&&t.setStyle(i)}}),e.extend(e.GeoJSON,{geometryToLayer:function(t,i){var s,o,n,a,r,h="Feature"===t.type?t.geometry:t,l=h.coordinates,c=[];switch(h.type){case"Point":return s=this.coordsToLatLng(l),i?i(t,s):new e.Marker(s);case"MultiPoint":for(n=0,a=l.length;a>n;n++)s=this.coordsToLatLng(l[n]),r=i?i(t,s):new e.Marker(s),c.push(r);return new e.FeatureGroup(c);case"LineString":return o=this.coordsToLatLngs(l),new e.Polyline(o);case"Polygon":return o=this.coordsToLatLngs(l,1),new e.Polygon(o);case"MultiLineString":return o=this.coordsToLatLngs(l,1),new e.MultiPolyline(o);case"MultiPolygon":return o=this.coordsToLatLngs(l,2),new e.MultiPolygon(o);case"GeometryCollection":for(n=0,a=h.geometries.length;a>n;n++)r=this.geometryToLayer({geometry:h.geometries[n],type:"Feature",properties:t.properties},i),c.push(r);return new e.FeatureGroup(c);default:throw Error("Invalid GeoJSON object.")}},coordsToLatLng:function(t,i){var s=parseFloat(t[i?0:1]),o=parseFloat(t[i?1:0]);return new e.LatLng(s,o)},coordsToLatLngs:function(t,i,s){var e,o,n,a=[];for(o=0,n=t.length;n>o;o++)e=i?this.coordsToLatLngs(t[o],i-1,s):this.coordsToLatLng(t[o],s),a.push(e);return a}}),e.geoJson=function(t,i){return new e.GeoJSON(t,i)},e.DomEvent={addListener:function(t,i,o,n){var a,r,h,l=e.stamp(o),c="_leaflet_"+i+l;return t[c]?this:(a=function(i){return o.call(n||t,i||e.DomEvent._getEvent())},e.Browser.msTouch&&0===i.indexOf("touch")?this.addMsTouchListener(t,i,a,l):(e.Browser.touch&&"dblclick"===i&&this.addDoubleTapListener&&this.addDoubleTapListener(t,a,l),"addEventListener"in t?"mousewheel"===i?(t.addEventListener("DOMMouseScroll",a,!1),t.addEventListener(i,a,!1)):"mouseenter"===i||"mouseleave"===i?(r=a,h="mouseenter"===i?"mouseover":"mouseout",a=function(i){return e.DomEvent._checkMouse(t,i)?r(i):s},t.addEventListener(h,a,!1)):t.addEventListener(i,a,!1):"attachEvent"in t&&t.attachEvent("on"+i,a),t[c]=a,this))},removeListener:function(t,i,s){var o=e.stamp(s),n="_leaflet_"+i+o,a=t[n];if(a)return e.Browser.msTouch&&0===i.indexOf("touch")?this.removeMsTouchListener(t,i,o):e.Browser.touch&&"dblclick"===i&&this.removeDoubleTapListener?this.removeDoubleTapListener(t,o):"removeEventListener"in t?"mousewheel"===i?(t.removeEventListener("DOMMouseScroll",a,!1),t.removeEventListener(i,a,!1)):"mouseenter"===i||"mouseleave"===i?t.removeEventListener("mouseenter"===i?"mouseover":"mouseout",a,!1):t.removeEventListener(i,a,!1):"detachEvent"in t&&t.detachEvent("on"+i,a),t[n]=null,this},stopPropagation:function(t){return t.stopPropagation?t.stopPropagation():t.cancelBubble=!0,this},disableClickPropagation:function(t){for(var i=e.DomEvent.stopPropagation,s=e.Draggable.START.length-1;s>=0;s--)e.DomEvent.addListener(t,e.Draggable.START[s],i);return e.DomEvent.addListener(t,"click",i).addListener(t,"dblclick",i)},preventDefault:function(t){return t.preventDefault?t.preventDefault():t.returnValue=!1,this},stop:function(t){return e.DomEvent.preventDefault(t).stopPropagation(t)},getMousePosition:function(t,s){var o=i.body,n=i.documentElement,a=t.pageX?t.pageX:t.clientX+o.scrollLeft+n.scrollLeft,r=t.pageY?t.pageY:t.clientY+o.scrollTop+n.scrollTop,h=new e.Point(a,r);return s?h._subtract(e.DomUtil.getViewportOffset(s)):h},getWheelDelta:function(t){var i=0;return t.wheelDelta&&(i=t.wheelDelta/120),t.detail&&(i=-t.detail/3),i},_checkMouse:function(t,i){var s=i.relatedTarget;if(!s)return!0;try{for(;s&&s!==t;)s=s.parentNode}catch(e){return!1}return s!==t},_getEvent:function(){var i=t.event;if(!i)for(var s=arguments.callee.caller;s&&(i=s.arguments[0],!i||t.Event!==i.constructor);)s=s.caller;return i}},e.DomEvent.on=e.DomEvent.addListener,e.DomEvent.off=e.DomEvent.removeListener,e.Draggable=e.Class.extend({includes:e.Mixin.Events,statics:{START:e.Browser.touch?["touchstart","mousedown"]:["mousedown"],END:{mousedown:"mouseup",touchstart:"touchend",MSPointerDown:"touchend"},MOVE:{mousedown:"mousemove",touchstart:"touchmove",MSPointerDown:"touchmove"},TAP_TOLERANCE:15},initialize:function(t,i,s){this._element=t,this._dragStartTarget=i||t,this._longPress=s&&!e.Browser.msTouch},enable:function(){if(!this._enabled){for(var t=e.Draggable.START.length-1;t>=0;t--)e.DomEvent.on(this._dragStartTarget,e.Draggable.START[t],this._onDown,this);this._enabled=!0}},disable:function(){if(this._enabled){for(var t=e.Draggable.START.length-1;t>=0;t--)e.DomEvent.off(this._dragStartTarget,e.Draggable.START[t],this._onDown,this);this._enabled=!1,this._moved=!1}},_onDown:function(t){if(!(!e.Browser.touch&&t.shiftKey||1!==t.which&&1!==t.button&&!t.touches||(e.DomEvent.preventDefault(t),e.DomEvent.stopPropagation(t),e.Draggable._disabled))){if(this._simulateClick=!0,t.touches&&t.touches.length>1)return this._simulateClick=!1,clearTimeout(this._longPressTimeout),s;var o=t.touches&&1===t.touches.length?t.touches[0]:t,n=o.target;e.Browser.touch&&"a"===n.tagName.toLowerCase()&&e.DomUtil.addClass(n,"leaflet-active"),this._moved=!1,this._moving||(this._startPoint=new e.Point(o.clientX,o.clientY),this._startPos=this._newPos=e.DomUtil.getPosition(this._element),t.touches&&1===t.touches.length&&e.Browser.touch&&this._longPress&&(this._longPressTimeout=setTimeout(e.bind(function(){var t=this._newPos&&this._newPos.distanceTo(this._startPos)||0;e.Draggable.TAP_TOLERANCE>t&&(this._simulateClick=!1,this._onUp(),this._simulateEvent("contextmenu",o))},this),1e3)),e.DomEvent.on(i,e.Draggable.MOVE[t.type],this._onMove,this),e.DomEvent.on(i,e.Draggable.END[t.type],this._onUp,this))}},_onMove:function(t){if(!(t.touches&&t.touches.length>1)){var i=t.touches&&1===t.touches.length?t.touches[0]:t,s=new e.Point(i.clientX,i.clientY),o=s.subtract(this._startPoint);(o.x||o.y)&&(e.DomEvent.preventDefault(t),this._moved||(this.fire("dragstart"),this._moved=!0,this._startPos=e.DomUtil.getPosition(this._element).subtract(o),e.Browser.touch||(e.DomUtil.disableTextSelection(),this._setMovingCursor())),this._newPos=this._startPos.add(o),this._moving=!0,e.Util.cancelAnimFrame(this._animRequest),this._animRequest=e.Util.requestAnimFrame(this._updatePosition,this,!0,this._dragStartTarget))}},_updatePosition:function(){this.fire("predrag"),e.DomUtil.setPosition(this._element,this._newPos),this.fire("drag")},_onUp:function(t){var s;if(clearTimeout(this._longPressTimeout),this._simulateClick&&t.changedTouches){var o=t.changedTouches[0],n=o.target,a=this._newPos&&this._newPos.distanceTo(this._startPos)||0;"a"===n.tagName.toLowerCase()&&e.DomUtil.removeClass(n,"leaflet-active"),e.Draggable.TAP_TOLERANCE>a&&(s=o)}e.Browser.touch||(e.DomUtil.enableTextSelection(),this._restoreCursor());for(var r in e.Draggable.MOVE)e.Draggable.MOVE.hasOwnProperty(r)&&(e.DomEvent.off(i,e.Draggable.MOVE[r],this._onMove),e.DomEvent.off(i,e.Draggable.END[r],this._onUp));this._moved&&(e.Util.cancelAnimFrame(this._animRequest),this.fire("dragend")),this._moving=!1,s&&(this._moved=!1,this._simulateEvent("click",s))},_setMovingCursor:function(){e.DomUtil.addClass(i.body,"leaflet-dragging")},_restoreCursor:function(){e.DomUtil.removeClass(i.body,"leaflet-dragging")},_simulateEvent:function(s,e){var o=i.createEvent("MouseEvents");o.initMouseEvent(s,!0,!0,t,1,e.screenX,e.screenY,e.clientX,e.clientY,!1,!1,!1,!1,0,null),e.target.dispatchEvent(o)}}),e.Handler=e.Class.extend({initialize:function(t){this._map=t},enable:function(){this._enabled||(this._enabled=!0,this.addHooks())},disable:function(){this._enabled&&(this._enabled=!1,this.removeHooks())},enabled:function(){return!!this._enabled}}),e.Map.mergeOptions({dragging:!0,inertia:!e.Browser.android23,inertiaDeceleration:3400,inertiaMaxSpeed:1/0,inertiaThreshold:e.Browser.touch?32:18,easeLinearity:.25,longPress:!0,worldCopyJump:!1}),e.Map.Drag=e.Handler.extend({addHooks:function(){if(!this._draggable){var t=this._map;this._draggable=new e.Draggable(t._mapPane,t._container,t.options.longPress),this._draggable.on({dragstart:this._onDragStart,drag:this._onDrag,dragend:this._onDragEnd},this),t.options.worldCopyJump&&(this._draggable.on("predrag",this._onPreDrag,this),t.on("viewreset",this._onViewReset,this))}this._draggable.enable()},removeHooks:function(){this._draggable.disable()},moved:function(){return this._draggable&&this._draggable._moved},_onDragStart:function(){var t=this._map;t._panAnim&&t._panAnim.stop(),t.fire("movestart").fire("dragstart"),t.options.inertia&&(this._positions=[],this._times=[])},_onDrag:function(){if(this._map.options.inertia){var t=this._lastTime=+new Date,i=this._lastPos=this._draggable._newPos;this._positions.push(i),this._times.push(t),t-this._times[0]>200&&(this._positions.shift(),this._times.shift())}this._map.fire("move").fire("drag")},_onViewReset:function(){var t=this._map.getSize()._divideBy(2),i=this._map.latLngToLayerPoint(new e.LatLng(0,0));this._initialWorldOffset=i.subtract(t).x,this._worldWidth=this._map.project(new e.LatLng(0,180)).x},_onPreDrag:function(){var t=this._worldWidth,i=Math.round(t/2),s=this._initialWorldOffset,e=this._draggable._newPos.x,o=(e-i+s)%t+i-s,n=(e+i+s)%t-i-s,a=Math.abs(o+s)i.inertiaThreshold||!this._positions[0];if(o)t.fire("moveend");else{var n=this._lastPos.subtract(this._positions[0]),a=(this._lastTime+s-this._times[0])/1e3,r=i.easeLinearity,h=n.multiplyBy(r/a),l=h.distanceTo(new e.Point(0,0)),c=Math.min(i.inertiaMaxSpeed,l),m=h.multiplyBy(c/l),u=c/(i.inertiaDeceleration*r),d=m.multiplyBy(-u/2).round();e.Util.requestAnimFrame(function(){t.panBy(d,u,r)})}t.fire("dragend"),i.maxBounds&&e.Util.requestAnimFrame(this._panInsideMaxBounds,t,!0,t._container)},_panInsideMaxBounds:function(){this.panInsideBounds(this.options.maxBounds)}}),e.Map.addInitHook("addHandler","dragging",e.Map.Drag),e.Map.mergeOptions({doubleClickZoom:!0}),e.Map.DoubleClickZoom=e.Handler.extend({addHooks:function(){this._map.on("dblclick",this._onDoubleClick)},removeHooks:function(){this._map.off("dblclick",this._onDoubleClick)},_onDoubleClick:function(t){this.setView(t.latlng,this._zoom+1)}}),e.Map.addInitHook("addHandler","doubleClickZoom",e.Map.DoubleClickZoom),e.Map.mergeOptions({scrollWheelZoom:!0}),e.Map.ScrollWheelZoom=e.Handler.extend({addHooks:function(){e.DomEvent.on(this._map._container,"mousewheel",this._onWheelScroll,this),this._delta=0},removeHooks:function(){e.DomEvent.off(this._map._container,"mousewheel",this._onWheelScroll)},_onWheelScroll:function(t){var i=e.DomEvent.getWheelDelta(t);this._delta+=i,this._lastMousePos=this._map.mouseEventToContainerPoint(t),this._startTime||(this._startTime=+new Date);var s=Math.max(40-(+new Date-this._startTime),0);clearTimeout(this._timer),this._timer=setTimeout(e.bind(this._performZoom,this),s),e.DomEvent.preventDefault(t),e.DomEvent.stopPropagation(t)},_performZoom:function(){var t=this._map,i=this._delta,s=t.getZoom();if(i=i>0?Math.ceil(i):Math.round(i),i=Math.max(Math.min(i,4),-4),i=t._limitZoom(s+i)-s,this._delta=0,this._startTime=null,i){var e=s+i,o=this._getCenterForScrollWheelZoom(e);t.setView(o,e)}},_getCenterForScrollWheelZoom:function(t){var i=this._map,s=i.getZoomScale(t),e=i.getSize()._divideBy(2),o=this._lastMousePos._subtract(e)._multiplyBy(1-1/s),n=i._getTopLeftPoint()._add(e)._add(o);return i.unproject(n)}}),e.Map.addInitHook("addHandler","scrollWheelZoom",e.Map.ScrollWheelZoom),e.extend(e.DomEvent,{_touchstart:e.Browser.msTouch?"MSPointerDown":"touchstart",_touchend:e.Browser.msTouch?"MSPointerUp":"touchend",addDoubleTapListener:function(t,s,o){function n(t){var i;if(e.Browser.msTouch?(p.push(t.pointerId),i=p.length):i=t.touches.length,!(i>1)){var s=Date.now(),o=s-(r||s);h=t.touches?t.touches[0]:t,l=o>0&&c>=o,r=s}}function a(t){if(e.Browser.msTouch){var i=p.indexOf(t.pointerId);if(-1===i)return;p.splice(i,1)}if(l){if(e.Browser.msTouch){var o,n={};for(var a in h)o=h[a],n[a]="function"==typeof o?o.bind(h):o;h=n}h.type="dblclick",s(h),r=null}}var r,h,l=!1,c=250,m="_leaflet_",u=this._touchstart,d=this._touchend,p=[];t[m+u+o]=n,t[m+d+o]=a;var _=e.Browser.msTouch?i.documentElement:t;return t.addEventListener(u,n,!1),_.addEventListener(d,a,!1),e.Browser.msTouch&&_.addEventListener("MSPointerCancel",a,!1),this},removeDoubleTapListener:function(t,s){var o="_leaflet_";return t.removeEventListener(this._touchstart,t[o+this._touchstart+s],!1),(e.Browser.msTouch?i.documentElement:t).removeEventListener(this._touchend,t[o+this._touchend+s],!1),e.Browser.msTouch&&i.documentElement.removeEventListener("MSPointerCancel",t[o+this._touchend+s],!1),this}}),e.extend(e.DomEvent,{_msTouches:[],_msDocumentListener:!1,addMsTouchListener:function(t,i,s,e){switch(i){case"touchstart":return this.addMsTouchListenerStart(t,i,s,e);case"touchend":return this.addMsTouchListenerEnd(t,i,s,e);case"touchmove":return this.addMsTouchListenerMove(t,i,s,e);default:throw"Unknown touch event type"}},addMsTouchListenerStart:function(t,s,e,o){var n="_leaflet_",a=this._msTouches,r=function(t){for(var i=!1,s=0;a.length>s;s++)if(a[s].pointerId===t.pointerId){i=!0;break}i||a.push(t),t.touches=a.slice(),t.changedTouches=[t],e(t)};if(t[n+"touchstart"+o]=r,t.addEventListener("MSPointerDown",r,!1),!this._msDocumentListener){var h=function(t){for(var i=0;a.length>i;i++)if(a[i].pointerId===t.pointerId){a.splice(i,1);break}};i.documentElement.addEventListener("MSPointerUp",h,!1),i.documentElement.addEventListener("MSPointerCancel",h,!1),this._msDocumentListener=!0}return this},addMsTouchListenerMove:function(t,i,s,e){function o(t){if(t.pointerType!==t.MSPOINTER_TYPE_MOUSE||0!==t.buttons){for(var i=0;a.length>i;i++)if(a[i].pointerId===t.pointerId){a[i]=t;break}t.touches=a.slice(),t.changedTouches=[t],s(t)}}var n="_leaflet_",a=this._msTouches;return t[n+"touchmove"+e]=o,t.addEventListener("MSPointerMove",o,!1),this},addMsTouchListenerEnd:function(t,i,s,e){var o="_leaflet_",n=this._msTouches,a=function(t){for(var i=0;n.length>i;i++)if(n[i].pointerId===t.pointerId){n.splice(i,1);break}t.touches=n.slice(),t.changedTouches=[t],s(t)};return t[o+"touchend"+e]=a,t.addEventListener("MSPointerUp",a,!1),t.addEventListener("MSPointerCancel",a,!1),this},removeMsTouchListener:function(t,i,s){var e="_leaflet_",o=t[e+i+s];switch(i){case"touchstart":t.removeEventListener("MSPointerDown",o,!1);break;case"touchmove":t.removeEventListener("MSPointerMove",o,!1);break;case"touchend":t.removeEventListener("MSPointerUp",o,!1),t.removeEventListener("MSPointerCancel",o,!1)}return this}}),e.Map.mergeOptions({touchZoom:e.Browser.touch&&!e.Browser.android23}),e.Map.TouchZoom=e.Handler.extend({addHooks:function(){e.DomEvent.on(this._map._container,"touchstart",this._onTouchStart,this)},removeHooks:function(){e.DomEvent.off(this._map._container,"touchstart",this._onTouchStart,this)},_onTouchStart:function(t){var s=this._map;if(t.touches&&2===t.touches.length&&!s._animatingZoom&&!this._zooming){var o=s.mouseEventToLayerPoint(t.touches[0]),n=s.mouseEventToLayerPoint(t.touches[1]),a=s._getCenterLayerPoint();this._startCenter=o.add(n)._divideBy(2),this._startDist=o.distanceTo(n),this._moved=!1,this._zooming=!0,this._centerOffset=a.subtract(this._startCenter),s._panAnim&&s._panAnim.stop(),e.DomEvent.on(i,"touchmove",this._onTouchMove,this).on(i,"touchend",this._onTouchEnd,this),e.DomEvent.preventDefault(t)}},_onTouchMove:function(t){if(t.touches&&2===t.touches.length){var i=this._map,s=i.mouseEventToLayerPoint(t.touches[0]),o=i.mouseEventToLayerPoint(t.touches[1]);this._scale=s.distanceTo(o)/this._startDist,this._delta=s._add(o)._divideBy(2)._subtract(this._startCenter),1!==this._scale&&(this._moved||(e.DomUtil.addClass(i._mapPane,"leaflet-zoom-anim leaflet-touching"),i.fire("movestart").fire("zoomstart")._prepareTileBg(),this._moved=!0),e.Util.cancelAnimFrame(this._animRequest),this._animRequest=e.Util.requestAnimFrame(this._updateOnMove,this,!0,this._map._container),e.DomEvent.preventDefault(t))}},_updateOnMove:function(){var t=this._map,i=this._getScaleOrigin(),s=t.layerPointToLatLng(i);t.fire("zoomanim",{center:s,zoom:t.getScaleZoom(this._scale)}),t._tileBg.style[e.DomUtil.TRANSFORM]=e.DomUtil.getTranslateString(this._delta)+" "+e.DomUtil.getScaleString(this._scale,this._startCenter)},_onTouchEnd:function(){if(this._moved&&this._zooming){var t=this._map;this._zooming=!1,e.DomUtil.removeClass(t._mapPane,"leaflet-touching"),e.DomEvent.off(i,"touchmove",this._onTouchMove).off(i,"touchend",this._onTouchEnd);var s=this._getScaleOrigin(),o=t.layerPointToLatLng(s),n=t.getZoom(),a=t.getScaleZoom(this._scale)-n,r=a>0?Math.ceil(a):Math.floor(a),h=t._limitZoom(n+r);t.fire("zoomanim",{center:o,zoom:h}),t._runAnimation(o,h,t.getZoomScale(h)/this._scale,s,!0)}},_getScaleOrigin:function(){var t=this._centerOffset.subtract(this._delta).divideBy(this._scale);return this._startCenter.add(t)}}),e.Map.addInitHook("addHandler","touchZoom",e.Map.TouchZoom),e.Map.mergeOptions({boxZoom:!0}),e.Map.BoxZoom=e.Handler.extend({initialize:function(t){this._map=t,this._container=t._container,this._pane=t._panes.overlayPane},addHooks:function(){e.DomEvent.on(this._container,"mousedown",this._onMouseDown,this)},removeHooks:function(){e.DomEvent.off(this._container,"mousedown",this._onMouseDown)},_onMouseDown:function(t){return!t.shiftKey||1!==t.which&&1!==t.button?!1:(e.DomUtil.disableTextSelection(),this._startLayerPoint=this._map.mouseEventToLayerPoint(t),this._box=e.DomUtil.create("div","leaflet-zoom-box",this._pane),e.DomUtil.setPosition(this._box,this._startLayerPoint),this._container.style.cursor="crosshair",e.DomEvent.on(i,"mousemove",this._onMouseMove,this).on(i,"mouseup",this._onMouseUp,this).preventDefault(t),this._map.fire("boxzoomstart"),s)},_onMouseMove:function(t){var i=this._startLayerPoint,s=this._box,o=this._map.mouseEventToLayerPoint(t),n=o.subtract(i),a=new e.Point(Math.min(o.x,i.x),Math.min(o.y,i.y));e.DomUtil.setPosition(s,a),s.style.width=Math.max(0,Math.abs(n.x)-4)+"px",s.style.height=Math.max(0,Math.abs(n.y)-4)+"px"},_onMouseUp:function(t){this._pane.removeChild(this._box),this._container.style.cursor="",e.DomUtil.enableTextSelection(),e.DomEvent.off(i,"mousemove",this._onMouseMove).off(i,"mouseup",this._onMouseUp);var s=this._map,o=s.mouseEventToLayerPoint(t);if(!this._startLayerPoint.equals(o)){var n=new e.LatLngBounds(s.layerPointToLatLng(this._startLayerPoint),s.layerPointToLatLng(o));s.fitBounds(n),s.fire("boxzoomend",{boxZoomBounds:n})}}}),e.Map.addInitHook("addHandler","boxZoom",e.Map.BoxZoom),e.Map.mergeOptions({keyboard:!0,keyboardPanOffset:80,keyboardZoomOffset:1}),e.Map.Keyboard=e.Handler.extend({keyCodes:{left:[37],right:[39],down:[40],up:[38],zoomIn:[187,107,61],zoomOut:[189,109,173]},initialize:function(t){this._map=t,this._setPanOffset(t.options.keyboardPanOffset),this._setZoomOffset(t.options.keyboardZoomOffset)},addHooks:function(){var t=this._map._container;-1===t.tabIndex&&(t.tabIndex="0"),e.DomEvent.on(t,"focus",this._onFocus,this).on(t,"blur",this._onBlur,this).on(t,"mousedown",this._onMouseDown,this),this._map.on("focus",this._addHooks,this).on("blur",this._removeHooks,this)},removeHooks:function(){this._removeHooks();var t=this._map._container;e.DomEvent.off(t,"focus",this._onFocus,this).off(t,"blur",this._onBlur,this).off(t,"mousedown",this._onMouseDown,this),this._map.off("focus",this._addHooks,this).off("blur",this._removeHooks,this)},_onMouseDown:function(){this._focused||this._map._container.focus()},_onFocus:function(){this._focused=!0,this._map.fire("focus")},_onBlur:function(){this._focused=!1,this._map.fire("blur")},_setPanOffset:function(t){var i,s,e=this._panKeys={},o=this.keyCodes;for(i=0,s=o.left.length;s>i;i++)e[o.left[i]]=[-1*t,0];for(i=0,s=o.right.length;s>i;i++)e[o.right[i]]=[t,0];for(i=0,s=o.down.length;s>i;i++)e[o.down[i]]=[0,t];for(i=0,s=o.up.length;s>i;i++)e[o.up[i]]=[0,-1*t]},_setZoomOffset:function(t){var i,s,e=this._zoomKeys={},o=this.keyCodes;for(i=0,s=o.zoomIn.length;s>i;i++)e[o.zoomIn[i]]=t;for(i=0,s=o.zoomOut.length;s>i;i++)e[o.zoomOut[i]]=-t},_addHooks:function(){e.DomEvent.on(i,"keydown",this._onKeyDown,this)},_removeHooks:function(){e.DomEvent.off(i,"keydown",this._onKeyDown,this)},_onKeyDown:function(t){var i=t.keyCode,s=this._map;if(this._panKeys.hasOwnProperty(i))s.panBy(this._panKeys[i]),s.options.maxBounds&&s.panInsideBounds(s.options.maxBounds);else{if(!this._zoomKeys.hasOwnProperty(i))return;s.setZoom(s.getZoom()+this._zoomKeys[i])}e.DomEvent.stop(t)}}),e.Map.addInitHook("addHandler","keyboard",e.Map.Keyboard),e.Handler.MarkerDrag=e.Handler.extend({initialize:function(t){this._marker=t},addHooks:function(){var t=this._marker._icon;this._draggable||(this._draggable=new e.Draggable(t,t).on("dragstart",this._onDragStart,this).on("drag",this._onDrag,this).on("dragend",this._onDragEnd,this)),this._draggable.enable()},removeHooks:function(){this._draggable.disable()},moved:function(){return this._draggable&&this._draggable._moved},_onDragStart:function(){this._marker.closePopup().fire("movestart").fire("dragstart")},_onDrag:function(){var t=this._marker,i=t._shadow,s=e.DomUtil.getPosition(t._icon),o=t._map.layerPointToLatLng(s);i&&e.DomUtil.setPosition(i,s),t._latlng=o,t.fire("move",{latlng:o}).fire("drag")},_onDragEnd:function(){this._marker.fire("moveend").fire("dragend")}}),e.Handler.PolyEdit=e.Handler.extend({options:{icon:new e.DivIcon({iconSize:new e.Point(8,8),className:"leaflet-div-icon leaflet-editing-icon"})},initialize:function(t,i){this._poly=t,e.setOptions(this,i)},addHooks:function(){this._poly._map&&(this._markerGroup||this._initMarkers(),this._poly._map.addLayer(this._markerGroup))},removeHooks:function(){this._poly._map&&(this._poly._map.removeLayer(this._markerGroup),delete this._markerGroup,delete this._markers)},updateMarkers:function(){this._markerGroup.clearLayers(),this._initMarkers()},_initMarkers:function(){this._markerGroup||(this._markerGroup=new e.LayerGroup),this._markers=[];var t,i,s,o,n=this._poly._latlngs;for(t=0,s=n.length;s>t;t++)o=this._createMarker(n[t],t),o.on("click",this._onMarkerClick,this),this._markers.push(o);var a,r;for(t=0,i=s-1;s>t;i=t++)(0!==t||e.Polygon&&this._poly instanceof e.Polygon)&&(a=this._markers[i],r=this._markers[t],this._createMiddleMarker(a,r),this._updatePrevNext(a,r))},_createMarker:function(t,i){var s=new e.Marker(t,{draggable:!0,icon:this.options.icon});return s._origLatLng=t,s._index=i,s.on("drag",this._onMarkerDrag,this),s.on("dragend",this._fireEdit,this),this._markerGroup.addLayer(s),s},_fireEdit:function(){this._poly.fire("edit")},_onMarkerDrag:function(t){var i=t.target;e.extend(i._origLatLng,i._latlng),i._middleLeft&&i._middleLeft.setLatLng(this._getMiddleLatLng(i._prev,i)),i._middleRight&&i._middleRight.setLatLng(this._getMiddleLatLng(i,i._next)),this._poly.redraw()},_onMarkerClick:function(t){if(!(3>this._poly._latlngs.length)){var i=t.target,s=i._index;this._markerGroup.removeLayer(i),this._markers.splice(s,1),this._poly.spliceLatLngs(s,1),this._updateIndexes(s,-1),this._updatePrevNext(i._prev,i._next),i._middleLeft&&this._markerGroup.removeLayer(i._middleLeft),i._middleRight&&this._markerGroup.removeLayer(i._middleRight),i._prev&&i._next?this._createMiddleMarker(i._prev,i._next):i._prev?i._next||(i._prev._middleRight=null):i._next._middleLeft=null,this._poly.fire("edit")}},_updateIndexes:function(t,i){this._markerGroup.eachLayer(function(s){s._index>t&&(s._index+=i)})},_createMiddleMarker:function(t,i){var s,e,o,n=this._getMiddleLatLng(t,i),a=this._createMarker(n);a.setOpacity(.6),t._middleRight=i._middleLeft=a,e=function(){var e=i._index;a._index=e,a.off("click",s).on("click",this._onMarkerClick,this),n.lat=a.getLatLng().lat,n.lng=a.getLatLng().lng,this._poly.spliceLatLngs(e,0,n),this._markers.splice(e,0,a),a.setOpacity(1),this._updateIndexes(e,1),i._index++,this._updatePrevNext(t,a),this._updatePrevNext(a,i)},o=function(){a.off("dragstart",e,this),a.off("dragend",o,this), -this._createMiddleMarker(t,a),this._createMiddleMarker(a,i)},s=function(){e.call(this),o.call(this),this._poly.fire("edit")},a.on("click",s,this).on("dragstart",e,this).on("dragend",o,this),this._markerGroup.addLayer(a)},_updatePrevNext:function(t,i){t&&(t._next=i),i&&(i._prev=t)},_getMiddleLatLng:function(t,i){var s=this._poly._map,e=s.latLngToLayerPoint(t.getLatLng()),o=s.latLngToLayerPoint(i.getLatLng());return s.layerPointToLatLng(e._add(o)._divideBy(2))}}),e.Polyline.addInitHook(function(){e.Handler.PolyEdit&&(this.editing=new e.Handler.PolyEdit(this),this.options.editable&&this.editing.enable()),this.on("add",function(){this.editing&&this.editing.enabled()&&this.editing.addHooks()}),this.on("remove",function(){this.editing&&this.editing.enabled()&&this.editing.removeHooks()})}),e.Control=e.Class.extend({options:{position:"topright"},initialize:function(t){e.setOptions(this,t)},getPosition:function(){return this.options.position},setPosition:function(t){var i=this._map;return i&&i.removeControl(this),this.options.position=t,i&&i.addControl(this),this},addTo:function(t){this._map=t;var i=this._container=this.onAdd(t),s=this.getPosition(),o=t._controlCorners[s];return e.DomUtil.addClass(i,"leaflet-control"),-1!==s.indexOf("bottom")?o.insertBefore(i,o.firstChild):o.appendChild(i),this},removeFrom:function(t){var i=this.getPosition(),s=t._controlCorners[i];return s.removeChild(this._container),this._map=null,this.onRemove&&this.onRemove(t),this}}),e.control=function(t){return new e.Control(t)},e.Map.include({addControl:function(t){return t.addTo(this),this},removeControl:function(t){return t.removeFrom(this),this},_initControlPos:function(){function t(t,n){var a=s+t+" "+s+n;i[t+n]=e.DomUtil.create("div",a,o)}var i=this._controlCorners={},s="leaflet-",o=this._controlContainer=e.DomUtil.create("div",s+"control-container",this._container);t("top","left"),t("top","right"),t("bottom","left"),t("bottom","right")}}),e.Control.Zoom=e.Control.extend({options:{position:"topleft"},onAdd:function(t){var i="leaflet-control-zoom",s="leaflet-bar",o=s+"-part",n=e.DomUtil.create("div",i+" "+s);return this._map=t,this._zoomInButton=this._createButton("+","Zoom in",i+"-in "+o+" "+o+"-top",n,this._zoomIn,this),this._zoomOutButton=this._createButton("-","Zoom out",i+"-out "+o+" "+o+"-bottom",n,this._zoomOut,this),t.on("zoomend",this._updateDisabled,this),n},onRemove:function(t){t.off("zoomend",this._updateDisabled,this)},_zoomIn:function(t){this._map.zoomIn(t.shiftKey?3:1)},_zoomOut:function(t){this._map.zoomOut(t.shiftKey?3:1)},_createButton:function(t,i,s,o,n,a){var r=e.DomUtil.create("a",s,o);r.innerHTML=t,r.href="#",r.title=i;var h=e.DomEvent.stopPropagation;return e.DomEvent.on(r,"click",h).on(r,"mousedown",h).on(r,"dblclick",h).on(r,"click",e.DomEvent.preventDefault).on(r,"click",n,a),r},_updateDisabled:function(){var t=this._map,i="leaflet-control-zoom-disabled";e.DomUtil.removeClass(this._zoomInButton,i),e.DomUtil.removeClass(this._zoomOutButton,i),t._zoom===t.getMinZoom()&&e.DomUtil.addClass(this._zoomOutButton,i),t._zoom===t.getMaxZoom()&&e.DomUtil.addClass(this._zoomInButton,i)}}),e.Map.mergeOptions({zoomControl:!0}),e.Map.addInitHook(function(){this.options.zoomControl&&(this.zoomControl=new e.Control.Zoom,this.addControl(this.zoomControl))}),e.control.zoom=function(t){return new e.Control.Zoom(t)},e.Control.Attribution=e.Control.extend({options:{position:"bottomright",prefix:'Powered by Leaflet'},initialize:function(t){e.setOptions(this,t),this._attributions={}},onAdd:function(t){return this._container=e.DomUtil.create("div","leaflet-control-attribution"),e.DomEvent.disableClickPropagation(this._container),t.on("layeradd",this._onLayerAdd,this).on("layerremove",this._onLayerRemove,this),this._update(),this._container},onRemove:function(t){t.off("layeradd",this._onLayerAdd).off("layerremove",this._onLayerRemove)},setPrefix:function(t){return this.options.prefix=t,this._update(),this},addAttribution:function(t){return t?(this._attributions[t]||(this._attributions[t]=0),this._attributions[t]++,this._update(),this):s},removeAttribution:function(t){return t?(this._attributions[t]--,this._update(),this):s},_update:function(){if(this._map){var t=[];for(var i in this._attributions)this._attributions.hasOwnProperty(i)&&this._attributions[i]&&t.push(i);var s=[];this.options.prefix&&s.push(this.options.prefix),t.length&&s.push(t.join(", ")),this._container.innerHTML=s.join(" — ")}},_onLayerAdd:function(t){t.layer.getAttribution&&this.addAttribution(t.layer.getAttribution())},_onLayerRemove:function(t){t.layer.getAttribution&&this.removeAttribution(t.layer.getAttribution())}}),e.Map.mergeOptions({attributionControl:!0}),e.Map.addInitHook(function(){this.options.attributionControl&&(this.attributionControl=(new e.Control.Attribution).addTo(this))}),e.control.attribution=function(t){return new e.Control.Attribution(t)},e.Control.Scale=e.Control.extend({options:{position:"bottomleft",maxWidth:100,metric:!0,imperial:!0,updateWhenIdle:!1},onAdd:function(t){this._map=t;var i="leaflet-control-scale",s=e.DomUtil.create("div",i),o=this.options;return this._addScales(o,i,s),t.on(o.updateWhenIdle?"moveend":"move",this._update,this),t.whenReady(this._update,this),s},onRemove:function(t){t.off(this.options.updateWhenIdle?"moveend":"move",this._update,this)},_addScales:function(t,i,s){t.metric&&(this._mScale=e.DomUtil.create("div",i+"-line",s)),t.imperial&&(this._iScale=e.DomUtil.create("div",i+"-line",s))},_update:function(){var t=this._map.getBounds(),i=t.getCenter().lat,s=6378137*Math.PI*Math.cos(i*Math.PI/180),e=s*(t.getNorthEast().lng-t.getSouthWest().lng)/180,o=this._map.getSize(),n=this.options,a=0;o.x>0&&(a=e*(n.maxWidth/o.x)),this._updateScales(n,a)},_updateScales:function(t,i){t.metric&&i&&this._updateMetric(i),t.imperial&&i&&this._updateImperial(i)},_updateMetric:function(t){var i=this._getRoundNum(t);this._mScale.style.width=this._getScaleWidth(i/t)+"px",this._mScale.innerHTML=1e3>i?i+" m":i/1e3+" km"},_updateImperial:function(t){var i,s,e,o=3.2808399*t,n=this._iScale;o>5280?(i=o/5280,s=this._getRoundNum(i),n.style.width=this._getScaleWidth(s/i)+"px",n.innerHTML=s+" mi"):(e=this._getRoundNum(o),n.style.width=this._getScaleWidth(e/o)+"px",n.innerHTML=e+" ft")},_getScaleWidth:function(t){return Math.round(this.options.maxWidth*t)-10},_getRoundNum:function(t){var i=Math.pow(10,(Math.floor(t)+"").length-1),s=t/i;return s=s>=10?10:s>=5?5:s>=3?3:s>=2?2:1,i*s}}),e.control.scale=function(t){return new e.Control.Scale(t)},e.Control.Layers=e.Control.extend({options:{collapsed:!0,position:"topright",autoZIndex:!0},initialize:function(t,i,s){e.setOptions(this,s),this._layers={},this._lastZIndex=0,this._handlingClick=!1;for(var o in t)t.hasOwnProperty(o)&&this._addLayer(t[o],o);for(o in i)i.hasOwnProperty(o)&&this._addLayer(i[o],o,!0)},onAdd:function(t){return this._initLayout(),this._update(),t.on("layeradd",this._onLayerChange,this).on("layerremove",this._onLayerChange,this),this._container},onRemove:function(t){t.off("layeradd",this._onLayerChange).off("layerremove",this._onLayerChange)},addBaseLayer:function(t,i){return this._addLayer(t,i),this._update(),this},addOverlay:function(t,i){return this._addLayer(t,i,!0),this._update(),this},removeLayer:function(t){var i=e.stamp(t);return delete this._layers[i],this._update(),this},_initLayout:function(){var t="leaflet-control-layers",i=this._container=e.DomUtil.create("div",t);e.Browser.touch?e.DomEvent.on(i,"click",e.DomEvent.stopPropagation):(e.DomEvent.disableClickPropagation(i),e.DomEvent.on(i,"mousewheel",e.DomEvent.stopPropagation));var s=this._form=e.DomUtil.create("form",t+"-list");if(this.options.collapsed){e.DomEvent.on(i,"mouseover",this._expand,this).on(i,"mouseout",this._collapse,this);var o=this._layersLink=e.DomUtil.create("a",t+"-toggle",i);o.href="#",o.title="Layers",e.Browser.touch?e.DomEvent.on(o,"click",e.DomEvent.stopPropagation).on(o,"click",e.DomEvent.preventDefault).on(o,"click",this._expand,this):e.DomEvent.on(o,"focus",this._expand,this),this._map.on("movestart",this._collapse,this)}else this._expand();this._baseLayersList=e.DomUtil.create("div",t+"-base",s),this._separator=e.DomUtil.create("div",t+"-separator",s),this._overlaysList=e.DomUtil.create("div",t+"-overlays",s),i.appendChild(s)},_addLayer:function(t,i,s){var o=e.stamp(t);this._layers[o]={layer:t,name:i,overlay:s},this.options.autoZIndex&&t.setZIndex&&(this._lastZIndex++,t.setZIndex(this._lastZIndex))},_update:function(){if(this._container){this._baseLayersList.innerHTML="",this._overlaysList.innerHTML="";var t=!1,i=!1;for(var s in this._layers)if(this._layers.hasOwnProperty(s)){var e=this._layers[s];this._addItem(e),i=i||e.overlay,t=t||!e.overlay}this._separator.style.display=i&&t?"":"none"}},_onLayerChange:function(t){var i=e.stamp(t.layer);this._layers[i]&&!this._handlingClick&&this._update()},_createRadioElement:function(t,s){var e='t;t++)i=o[t],s=this._layers[i.layerId],i.checked&&!this._map.hasLayer(s.layer)?(this._map.addLayer(s.layer),s.overlay||(e=s.layer)):!i.checked&&this._map.hasLayer(s.layer)&&this._map.removeLayer(s.layer);e&&(this._map.setZoom(this._map.getZoom()),this._map.fire("baselayerchange",{layer:e})),this._handlingClick=!1},_expand:function(){e.DomUtil.addClass(this._container,"leaflet-control-layers-expanded")},_collapse:function(){this._container.className=this._container.className.replace(" leaflet-control-layers-expanded","")}}),e.control.layers=function(t,i,s){return new e.Control.Layers(t,i,s)},e.PosAnimation=e.Class.extend({includes:e.Mixin.Events,run:function(t,i,s,o){this.stop(),this._el=t,this._inProgress=!0,this.fire("start"),t.style[e.DomUtil.TRANSITION]="all "+(s||.25)+"s cubic-bezier(0,0,"+(o||.5)+",1)",e.DomEvent.on(t,e.DomUtil.TRANSITION_END,this._onTransitionEnd,this),e.DomUtil.setPosition(t,i),e.Util.falseFn(t.offsetWidth),this._stepTimer=setInterval(e.bind(this.fire,this,"step"),50)},stop:function(){this._inProgress&&(e.DomUtil.setPosition(this._el,this._getPos()),this._onTransitionEnd(),e.Util.falseFn(this._el.offsetWidth))},_transformRe:/(-?[\d\.]+), (-?[\d\.]+)\)/,_getPos:function(){var i,s,o,n=this._el,a=t.getComputedStyle(n);return e.Browser.any3d?(o=a[e.DomUtil.TRANSFORM].match(this._transformRe),i=parseFloat(o[1]),s=parseFloat(o[2])):(i=parseFloat(a.left),s=parseFloat(a.top)),new e.Point(i,s,!0)},_onTransitionEnd:function(){e.DomEvent.off(this._el,e.DomUtil.TRANSITION_END,this._onTransitionEnd,this),this._inProgress&&(this._inProgress=!1,this._el.style[e.DomUtil.TRANSITION]="",clearInterval(this._stepTimer),this.fire("step").fire("end"))}}),e.Map.include({setView:function(t,i,s){i=this._limitZoom(i);var e=this._zoom!==i;if(this._loaded&&!s&&this._layers){this._panAnim&&this._panAnim.stop();var o=e?this._zoomToIfClose&&this._zoomToIfClose(t,i):this._panByIfClose(t);if(o)return clearTimeout(this._sizeTimer),this}return this._resetView(t,i),this},panBy:function(t,i,s){if(t=e.point(t),!t.x&&!t.y)return this;this._panAnim||(this._panAnim=new e.PosAnimation,this._panAnim.on({step:this._onPanTransitionStep,end:this._onPanTransitionEnd},this)),this.fire("movestart"),e.DomUtil.addClass(this._mapPane,"leaflet-pan-anim");var o=e.DomUtil.getPosition(this._mapPane).subtract(t)._round();return this._panAnim.run(this._mapPane,o,i||.25,s),this},_onPanTransitionStep:function(){this.fire("move")},_onPanTransitionEnd:function(){e.DomUtil.removeClass(this._mapPane,"leaflet-pan-anim"),this.fire("moveend")},_panByIfClose:function(t){var i=this._getCenterOffset(t)._floor();return this._offsetIsWithinView(i)?(this.panBy(i),!0):!1},_offsetIsWithinView:function(t,i){var s=i||1,e=this.getSize();return Math.abs(t.x)<=e.x*s&&Math.abs(t.y)<=e.y*s}}),e.PosAnimation=e.DomUtil.TRANSITION?e.PosAnimation:e.PosAnimation.extend({run:function(t,i,s,o){this.stop(),this._el=t,this._inProgress=!0,this._duration=s||.25,this._easeOutPower=1/Math.max(o||.5,.2),this._startPos=e.DomUtil.getPosition(t),this._offset=i.subtract(this._startPos),this._startTime=+new Date,this.fire("start"),this._animate()},stop:function(){this._inProgress&&(this._step(),this._complete())},_animate:function(){this._animId=e.Util.requestAnimFrame(this._animate,this),this._step()},_step:function(){var t=+new Date-this._startTime,i=1e3*this._duration;i>t?this._runFrame(this._easeOut(t/i)):(this._runFrame(1),this._complete())},_runFrame:function(t){var i=this._startPos.add(this._offset.multiplyBy(t));e.DomUtil.setPosition(this._el,i),this.fire("step")},_complete:function(){e.Util.cancelAnimFrame(this._animId),this._inProgress=!1,this.fire("end")},_easeOut:function(t){return 1-Math.pow(1-t,this._easeOutPower)}}),e.Map.mergeOptions({zoomAnimation:e.DomUtil.TRANSITION&&!e.Browser.android23&&!e.Browser.mobileOpera}),e.DomUtil.TRANSITION&&e.Map.addInitHook(function(){e.DomEvent.on(this._mapPane,e.DomUtil.TRANSITION_END,this._catchTransitionEnd,this)}),e.Map.include(e.DomUtil.TRANSITION?{_zoomToIfClose:function(t,i){if(this._animatingZoom)return!0;if(!this.options.zoomAnimation)return!1;var s=this.getZoomScale(i),o=this._getCenterOffset(t)._divideBy(1-1/s);if(!this._offsetIsWithinView(o,1))return!1;e.DomUtil.addClass(this._mapPane,"leaflet-zoom-anim"),this.fire("movestart").fire("zoomstart"),this.fire("zoomanim",{center:t,zoom:i});var n=this._getCenterLayerPoint().add(o);return this._prepareTileBg(),this._runAnimation(t,i,s,n),!0},_catchTransitionEnd:function(){this._animatingZoom&&this._onZoomTransitionEnd()},_runAnimation:function(t,i,s,o,n){this._animateToCenter=t,this._animateToZoom=i,this._animatingZoom=!0,e.Draggable&&(e.Draggable._disabled=!0);var a=e.DomUtil.TRANSFORM,r=this._tileBg;clearTimeout(this._clearTileBgTimer),e.Util.falseFn(r.offsetWidth);var h=e.DomUtil.getScaleString(s,o),l=r.style[a];r.style[a]=n?l+" "+h:h+" "+l},_prepareTileBg:function(){var t=this._tilePane,i=this._tileBg;if(i&&this._getLoadedTilesPercentage(i)>.5&&.5>this._getLoadedTilesPercentage(t))return t.style.visibility="hidden",t.empty=!0,this._stopLoadingImages(t),s;i||(i=this._tileBg=this._createPane("leaflet-tile-pane",this._mapPane),i.style.zIndex=1),i.style[e.DomUtil.TRANSFORM]="",i.style.visibility="hidden",i.empty=!0,t.empty=!1,this._tilePane=this._panes.tilePane=i;var o=this._tileBg=t;e.DomUtil.addClass(o,"leaflet-zoom-animated"),this._stopLoadingImages(o)},_getLoadedTilesPercentage:function(t){var i,s,e=t.getElementsByTagName("img"),o=0;for(i=0,s=e.length;s>i;i++)e[i].complete&&o++;return o/s},_stopLoadingImages:function(t){var i,s,o,n=Array.prototype.slice.call(t.getElementsByTagName("img"));for(i=0,s=n.length;s>i;i++)o=n[i],o.complete||(o.onload=e.Util.falseFn,o.onerror=e.Util.falseFn,o.src=e.Util.emptyImageUrl,o.parentNode.removeChild(o))},_onZoomTransitionEnd:function(){this._restoreTileFront(),e.DomUtil.removeClass(this._mapPane,"leaflet-zoom-anim"),e.Util.falseFn(this._tileBg.offsetWidth),this._animatingZoom=!1,this._resetView(this._animateToCenter,this._animateToZoom,!0,!0),e.Draggable&&(e.Draggable._disabled=!1)},_restoreTileFront:function(){this._tilePane.innerHTML="",this._tilePane.style.visibility="",this._tilePane.style.zIndex=2,this._tileBg.style.zIndex=1},_clearTileBg:function(){this._animatingZoom||this.touchZoom._zooming||(this._tileBg.innerHTML="")}}:{}),e.Map.include({_defaultLocateOptions:{watch:!1,setView:!1,maxZoom:1/0,timeout:1e4,maximumAge:0,enableHighAccuracy:!1},locate:function(t){if(t=this._locationOptions=e.extend(this._defaultLocateOptions,t),!navigator.geolocation)return this._handleGeolocationError({code:0,message:"Geolocation not supported."}),this;var i=e.bind(this._handleGeolocationResponse,this),s=e.bind(this._handleGeolocationError,this);return t.watch?this._locationWatchId=navigator.geolocation.watchPosition(i,s,t):navigator.geolocation.getCurrentPosition(i,s,t),this},stopLocate:function(){return navigator.geolocation&&navigator.geolocation.clearWatch(this._locationWatchId),this},_handleGeolocationError:function(t){var i=t.code,s=t.message||(1===i?"permission denied":2===i?"position unavailable":"timeout");this._locationOptions.setView&&!this._loaded&&this.fitWorld(),this.fire("locationerror",{code:i,message:"Geolocation error: "+s+"."})},_handleGeolocationResponse:function(t){var i=180*t.coords.accuracy/4e7,s=2*i,o=t.coords.latitude,n=t.coords.longitude,a=new e.LatLng(o,n),r=new e.LatLng(o-i,n-s),h=new e.LatLng(o+i,n+s),l=new e.LatLngBounds(r,h),c=this._locationOptions;if(c.setView){var m=Math.min(this.getBoundsZoom(l),c.maxZoom);this.setView(a,m)}this.fire("locationfound",{latlng:a,bounds:l,accuracy:t.coords.accuracy})}})}(this,document),L.Proj={},L.Proj._isProj4Proj=function(t){return t.projName!==void 0},L.Proj.Projection=L.Class.extend({initialize:function(t,i){if(L.Proj._isProj4Proj(t))this._proj=t;else{var s=t;Proj4js.defs[s]=i,this._proj=new Proj4js.Proj(s)}},project:function(t){var i=new L.Point(t.lng,t.lat);return Proj4js.transform(Proj4js.WGS84,this._proj,i)},unproject:function(t,i){var s=Proj4js.transform(this._proj,Proj4js.WGS84,t.clone());return new L.LatLng(s.y,s.x,i)}}),L.Proj.CRS=L.Class.extend({includes:L.CRS,options:{transformation:new L.Transformation(1,0,-1,0)},initialize:function(t,i,s){var e,o,n,a;L.Proj._isProj4Proj(t)?(o=t,e=o.srsCode,a=i||{},this.projection=new L.Proj.Projection(o)):(e=t,n=i,a=s||{},this.projection=new L.Proj.Projection(e,n)),L.Util.setOptions(this,a),this.code=e,this.transformation=this.options.transformation,this.options.origin&&(this.transformation=new L.Transformation(1,-this.options.origin[0],-1,this.options.origin[1])),this.options.scales?this.scale=function(t){return this.options.scales[t]}:this.options.resolutions&&(this.scale=function(t){return 1/this.options.resolutions[t]})}}),L.Proj.CRS.TMS=L.Proj.CRS.extend({initialize:function(t,i,s,e){if(L.Proj._isProj4Proj(t)){var o=t,n=i,a=s||{};a.origin=[n[0],n[3]],L.Proj.CRS.prototype.initialize(o,a)}else{var r=t,h=i,n=s,a=e||{};a.origin=[n[0],n[3]],L.Proj.CRS.prototype.initialize(r,h,a)}this.projectedBounds=n}}),L.Proj.TileLayer={},L.Proj.TileLayer.TMS=L.TileLayer.extend({options:{tms:!0,continuousWorld:!0},initialize:function(t,i,s){if(!(i instanceof L.Proj.CRS.TMS))throw Error("CRS is not L.Proj.CRS.TMS.");L.TileLayer.prototype.initialize.call(this,t,s),this.crs=i;for(var e=this.options.minZoom;this.options.maxZoom>e;e++){var o=(this.crs.projectedBounds[3]-this.crs.projectedBounds[1])/this._projectedTileSize(e);if(Math.abs(o-Math.round(o))>.001)throw Error("Projected bounds does not match grid at zoom "+e)}},getTileUrl:function(t){var i=Math.round((this.crs.projectedBounds[3]-this.crs.projectedBounds[1])/this._projectedTileSize(this._map.getZoom()));return L.Util.template(this._url,L.Util.extend({s:this._getSubdomain(t),z:this._getZoomForUrl(),x:t.x,y:i-t.y-1},this.options))},_projectedTileSize:function(t){return this.options.tileSize/this.crs.scale(t)}}),"undefined"!=typeof module&&(module.exports=L.Proj),"undefined"!=typeof L&&L.CRS!==void 0&&(L.CRS.proj4js=function(){return function(t,i,s,e){return e=e||{},s&&(e.transformation=s),new L.Proj.CRS(t,i,e)}}()),L.Control.MousePosition=L.Control.extend({options:{position:"bottomleft",separator:" : ",emptyString:"Unavailable",lngFirst:!1,numDigits:5,lngFormatter:void 0,latFormatter:void 0},onAdd:function(t){return this._container=L.DomUtil.create("div","leaflet-control-mouseposition"),L.DomEvent.disableClickPropagation(this._container),t.on("mousemove",this._onMouseMove,this),this._container.innerHTML=this.options.emptyString,this._container},onRemove:function(t){t.off("mousemove",this._onMouseMove)},_onMouseMove:function(t){var i=L.Util.formatNum(t.latlng.lng,this.options.numDigits),s=L.Util.formatNum(t.latlng.lat,this.options.numDigits);this.options.lngFormatter&&(i=this.options.lngFormatter(i)),this.options.latFormatter&&(s=this.options.latFormatter(s));var e=this.options.lngFirst?i+this.options.separator+s:s+this.options.separator+i;this._container.innerHTML=e}}),L.Map.mergeOptions({positionControl:!1}),L.Map.addInitHook(function(){this.options.positionControl&&(this.positionControl=new L.Control.MousePosition,this.addControl(this.positionControl))}),L.control.mousePosition=function(t){return new L.Control.MousePosition(t)},function(t,i){L.KSP={},L.KSP.version="0.2.1",L.KSP.CRS={},L.KSP.CRS.EPSG4326=new L.Proj.CRS.TMS(new Proj4js.Proj("EPSG:4326"),[-180,-90,180,90],{resolutions:[.703125,.3515625,.17578125,.087890625,.0439453125,.02197265625]}),L.KSP.CelestialBody=L.Class.extend({initialize:function(t){if(!t.hasOwnProperty("id"))throw Error("must specify id");if(!t.hasOwnProperty("name"))throw Error("must specify name");if(t.hasOwnProperty("crs")){if(!(t.crs instanceof L.Proj.CRS.TMS))throw Error("crs is not an instance of L.Proj.CRS.TMS")}else this.crs=L.KSP.CRS.EPSG4326;t.hasOwnProperty("radius")||(this.radius=1),t.hasOwnProperty("thumbnail")||(this.thumbnail="body-unknown.png"),t.hasOwnProperty("baseLayers")||(this.baseLayers={}),L.Util.extend(this,t)},addTo:function(t){var i,s=t._body;if(t._body=this,t.fire("bodychangestart",{body:this,oldBody:s}),s){for(i in s.baseLayers)s.baseLayers.hasOwnProperty(i)&&t.removeLayer(s.baseLayers[i]);for(i in s.overlays)s.overlays.hasOwnProperty(i)&&t.removeLayer(s.overlays[i])}var e=this.defaultLayer||this.baseLayers.Satellite;if(e){for(i in this.baseLayers)if(this.baseLayers.hasOwnProperty(i)&&this.baseLayers[i]._type===t._baseLayerType){e=this.baseLayers[i];break}t.addLayer(e),t.fire("baselayerchange",{layer:e})}for(i in this.overlays)this.overlays.hasOwnProperty(i)&&t._overlayTypes.indexOf(this.overlays[i]._type)>=0&&(t.addLayer(this.overlays[i]),t.fire("layeradd",{layer:this.overlays[i]}));t.fire("bodychangeend",{body:this,oldBody:s})},onAdd:function(t){this.addTo(t)},removeFrom:function(t){L.KSP.CelestialBody.DUMMY.addTo(t)},onRemove:function(t){this.removeFrom(t)}}),L.KSP.celestialBody=function(t){return new L.KSP.CelestialBody(t)},L.KSP.CelestialBody.DUMMY=L.KSP.celestialBody({id:"",name:"",crs:L.KSP.CRS.EPSG4326}),L.KSP.CelestialBody.ALL_PLANETARY=[L.KSP.CelestialBody.DUMMY],L.KSP.Map=L.Map.extend({options:{crs:L.KSP.CRS.EPSG4326,continuousWorld:!0},initialize:function(t,i){this._baseLayerType=-1,this._overlayTypes=[],L.Util.setOptions(this,i),this.startTrackingLayerState(),this.on("bodychangestart",this._onBodyChangeStart).on("bodychangeend",this._onBodyChangeEnd),L.Map.prototype.initialize.call(this,t,this.options)},clampZoom:function(){var t=this.getZoom(),i=this.getMinZoom(),s=this.getMaxZoom();i>t?this.setZoom(i):t>s?this.setZoom(s):this.fire("zoomend",this)},_onBodyChangeStart:function(){this.stopTrackingLayerState()},_onBodyChangeEnd:function(){this.clampZoom(),this.startTrackingLayerState()},_onLayerStateChange:function(t){if("layeradd"===t.type)t.layer instanceof L.KSP.TileLayer?this._baseLayerType=t.layer._type:t.layer instanceof L.KSP.LayerGroup&&0>this._overlayTypes.indexOf(t.layer._type)&&this._overlayTypes.push(t.layer._type);else if(t.layer instanceof L.KSP.LayerGroup){var i,s,e=t.layer._type,o=this._overlayTypes;for(i=o.length-1;i>=0;i--)s=o[i],s===e&&o.splice(i,1)}},startTrackingLayerState:function(){this.on("layeradd",this._onLayerStateChange).on("layerremove",this._onLayerStateChange)},stopTrackingLayerState:function(){this.off("layeradd",this._onLayerStateChange).off("layerremove",this._onLayerStateChange)}}),L.KSP.map=function(t,i){return new L.KSP.Map(t,i)},L.KSP.TileLayer=L.Proj.TileLayer.TMS.extend({statics:{TYPE_SATELLITE:0,TYPE_COLORRELIEF:1,TYPE_SLOPE:2,DEFAULT_URL:"http://tiles.kerbalmaps.com/{body}/{style}/{z}/{x}/{y}.png"},options:{continuousWorld:!1,noWrap:!1,minZoom:0,maxZoom:5,attribution:"Map data © Joel Pedraza"},initialize:function(t,i,s,e){L.Util.setOptions(this,e),this._type=t,L.Proj.TileLayer.TMS.prototype.initialize.call(this,i,s,this.options)}}),L.KSP.tileLayer=function(t,i,s,e){return new L.KSP.TileLayer(t,i,s,e)},L.KSP.LayerGroup=L.LayerGroup.extend({statics:{TYPE_SPACECENTER:0,TYPE_ANOMALY:1},initialize:function(t,i){this._type=t,L.LayerGroup.prototype.initialize.call(this,i)}}),L.KSP.layerGroup=function(t,i){return new L.KSP.LayerGroup(t,i)},L.KSP.Icon={},L.KSP.Icon.SPACECENTER=new L.Icon({iconUrl:"../assets/images/markers-spacecenter.png",shadowUrl:"../assets/images/markers-shadow.png",iconSize:[30,40],shadowSize:[35,16],iconAnchor:[15,40],shadowAnchor:[10,12],popupAnchor:[0,-35]}),L.KSP.Icon.ANOMALY=new L.Icon({iconUrl:"../assets/images/markers-anomaly.png",shadowUrl:"../assets/images/markers-shadow.png",iconSize:[30,40],shadowSize:[35,16],iconAnchor:[15,40],shadowAnchor:[10,12],popupAnchor:[0,-35]}),L.KSP.Legend={},L.KSP.Legend.SLOPE={"≥ 60°":"#E19678","< 60°":"#C86464","< 30°":"#965A64","< 15°":"#645064","< 5°":"#325064","0°":"#32465A"},L.KSP.Control=L.KSP.control={},L.KSP.Control.Legend=L.Control.extend({options:{position:"bottomright"},onAdd:function(t){return this._container=L.DomUtil.create("div","leaflet-control-legend"),t.on("baselayerchange",this._onLayerChange,this),this._container},_update:function(t){if(this._container.innerHTML="",t){for(var i in t)t.hasOwnProperty(i)&&(this._container.innerHTML+=''+i+"
    ");L.DomUtil.addClass(this._container,"leaflet-control-legend-visible")}else this._container.className=this._container.className.replace(" leaflet-control-legend-visible","")},_onLayerChange:function(t){this._update(t.layer.options.legend)}}),L.Map.mergeOptions({legendControl:!0}),L.Map.addInitHook(function(){this.options.bodyControl&&(this.legendControl=new L.KSP.Control.Legend,this.addControl(this.legendControl))}),L.control.legend=function(t){return new L.KSP.Control.Legend(t)},L.KSP.Control.Scale=L.Control.Scale.extend({options:{imperial:!1},onAdd:function(t){this._radius=0,t._body&&(this._radius=t._body.radius);var i=L.Control.Scale.prototype.onAdd.call(this,t);return t.on("bodychangeend",this._onBodyChangeEnd,this),i},onRemove:function(t){L.Control.Scale.prototype.onRemove.call(this,t),t.off("bodychangeend",this._onBodyChangeEnd)},_onBodyChangeEnd:function(t){this._radius=t.body.radius,this._update()},_update:function(){var t=this._map.getBounds(),i=t.getCenter().lat,s=this._radius*Math.PI*Math.cos(i*Math.PI/180),e=s*(t.getNorthEast().lng-t.getSouthWest().lng)/180,o=this._map.getSize(),n=this.options,a=0;o.x>0&&(a=e*(n.maxWidth/o.x)),this._updateScales(n,a)}}),L.KSP.Map.mergeOptions({scaleControl:!1}),L.KSP.Map.addInitHook(function(){this.options.scaleControl&&(this.scaleControl=new L.KSP.Control.Scale,this.addControl(this.scaleControl))}),L.KSP.control.scale=function(t){return new L.KSP.Control.Scale(t)},L.KSP.Control.CelestialBody=L.Control.extend({options:{position:"topright",collapsed:!0},initialize:function(t,i){L.Util.setOptions(this,i),this._bodies=t,this._timeInMillis=(new Date).valueOf(),this._weekInMillis=6048e5},onAdd:function(){return this._initLayout(),this._update(),this._map.on("bodychangeend",this._update,this),this._container},_initLayout:function(){var t="leaflet-control-celestialbodies",s=this._container=L.DomUtil.create("div",t),e=this._bodies;if(this.options.collapsed){L.DomEvent.on(s,"mouseover",this._expand,this).on(s,"mouseout",this._collapse,this);var o=this._bodiesLink=L.DomUtil.create("a",t+"-toggle",s);o.href="#",o.title="Celestial Bodies",L.DomEvent.on(o,"focus",this._expand,this),this._map.on("movestart",this._collapse,this)}var n=this._list=L.DomUtil.create("ul",t+"-list",s);for(var a in e)if(e.hasOwnProperty(a)){var r=this._addBody(e[a],n);if(e[a].children){var h=i.createElement("ul");for(var l in e[a].children)e[a].children.hasOwnProperty(l)&&this._addBody(e[a].children[l],h);r.appendChild(h)}}},_update:function(){this._map._body&&(this._bodiesLink.style.backgroundImage='url("'+this._map._body.thumbnail+'")')},_addBody:function(t,s){var e,o=i.createElement("li"),n=i.createElement("img");if(n.src=t.thumbnail,n.alt=o.title=t.name,t.addedOn){this._timeInMillis-t.addedOnKerbal Space Center
    -0.0969 : -74.6004"),L.marker([20.5829,-146.5116],{icon:L.KSP.Icon.SPACECENTER}).bindPopup("Kerbal Space Center 2
    20.5829 : -146.5116"),L.marker([-1.5409,-71.9099],{icon:L.KSP.Icon.SPACECENTER}).bindPopup("Island Airfield
    -1.5409 : -71.9099")]),Anomalies:L.KSP.layerGroup(L.KSP.LayerGroup.TYPE_ANOMALY,[L.marker([.1023,-74.5684],{icon:L.KSP.Icon.ANOMALY}).bindPopup("0.1023 : -74.5684"),L.marker([20.6709,-146.4968],{icon:L.KSP.Icon.ANOMALY}).bindPopup("20.6709 : -146.4968"),L.marker([35.5705,-74.9773],{icon:L.KSP.Icon.ANOMALY}).bindPopup("35.5705 : -74.9773"),L.marker([-.6402,-80.7668],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-0.6402 : -80.7668"),L.marker([-28.8083,-13.4401],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-28.8083 : -13.4401"),L.marker([-6.5057,-141.6856],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-6.5057 : -141.6856"),L.marker([81.9551,-128.518],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-81.9551 : -128.518")])}}),L.KSP.CelestialBody.MUN=L.KSP.celestialBody({id:"mun",name:"Mun",crs:L.KSP.CRS.EPSG4326,radius:2e5,addedOn:13682304e5,lastUpdated:1368144e6,thumbnail:"body-mun.png",baseLayers:{Satellite:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SATELLITE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{body:"mun",style:"sat"}),"Color Relief":L.KSP.tileLayer(L.KSP.TileLayer.TYPE_COLORRELIEF,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{body:"mun",style:"color",legend:{"3150 m":"#EBEBEB","-180 m":"#232323"}}),Slope:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SLOPE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{body:"mun",style:"slope",legend:L.KSP.Legend.SLOPE})},overlays:{Anomalies:L.KSP.layerGroup(L.KSP.LayerGroup.TYPE_ANOMALY,[L.marker([-9.8314,25.9177],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-9.8314 : 25.9177"),L.marker([-82.2063,102.9305],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-82.2063 : 102.9305"),L.marker([57.6604,9.1422],{icon:L.KSP.Icon.ANOMALY}).bindPopup("57.6604 : 9.1422"),L.marker([2.4695,81.5133],{icon:L.KSP.Icon.ANOMALY}).bindPopup("2.4695 : 81.5133"),L.marker([12.4432,39.178],{icon:L.KSP.Icon.ANOMALY}).bindPopup("12.4432 : 39.1780"),L.marker([-12.4431,-140.822],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-12.4431 : -140.8220"),L.marker([.7027,22.747],{icon:L.KSP.Icon.ANOMALY}).bindPopup("0.7027 : 22.7470"),L.marker([-70.9556,-68.1378],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-70.9556,-68.1378")])}}),L.KSP.CelestialBody.MINMUS=L.KSP.celestialBody({id:"minmus",name:"Minmus",crs:L.KSP.CRS.EPSG4326,radius:6e4,addedOn:13682304e5,lastUpdated:13682304e5,thumbnail:"body-minmus.png",baseLayers:{Satellite:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SATELLITE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"sat",body:"minmus"}),"Color Relief":L.KSP.tileLayer(L.KSP.TileLayer.TYPE_COLORRELIEF,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"color",body:"minmus",legend:{"5750 m":"#414B41","2500 m":"#BEE6C3","1 m":"#96CDB4","0 m":"#87B9A5"}}),Slope:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SLOPE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"slope",body:"minmus",legend:L.KSP.Legend.SLOPE})},overlays:{Anomalies:L.KSP.layerGroup(L.KSP.LayerGroup.TYPE_ANOMALY,[L.marker([23.7768,60.0462],{icon:L.KSP.Icon.ANOMALY}).bindPopup("23.7768 : 60.0462")])}}),L.KSP.CelestialBody.DUNA=L.KSP.celestialBody({id:"duna",name:"Duna",crs:L.KSP.CRS.EPSG4326,radius:32e4,addedOn:13688352e5,lastUpdated:13688352e5,thumbnail:"body-duna.png",baseLayers:{Satellite:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SATELLITE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"sat",body:"duna"}),"Color Relief":L.KSP.tileLayer(L.KSP.TileLayer.TYPE_COLORRELIEF,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"color",body:"duna",legend:{"4800 m":"#C3A082","4000 m":"#966446","3000 m":"#733219","2000 m":"#501E14","1000 m":"#3C140F","0 m":"#280F0A"}}),Slope:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SLOPE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"slope",body:"duna",legend:L.KSP.Legend.SLOPE})},overlays:{Anomalies:L.KSP.layerGroup(L.KSP.LayerGroup.TYPE_ANOMALY,[L.marker([17.0483,-85.4717],{icon:L.KSP.Icon.ANOMALY}).bindPopup("17.0483 : -85.4717"),L.marker([-30.3525,-28.6828],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-30.3525 : -28.6828"),L.marker([-66.1344,-160.7432],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-66.1344 : -160.7432")])}}),L.KSP.CelestialBody.IKE=L.KSP.celestialBody({id:"ike",name:"Ike",crs:L.KSP.CRS.EPSG4326,radius:13e4,addedOn:13688352e5,lastUpdated:13688352e5,thumbnail:"body-ike.png",baseLayers:{Satellite:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SATELLITE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"sat",body:"ike"}),"Color Relief":L.KSP.tileLayer(L.KSP.TileLayer.TYPE_COLORRELIEF,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"color",body:"ike",legend:{"13000 m":"#828282","11000 m":"#6E6E6E","9000 m":"#5A5A5A","7000 m":"#464646","5000 m":"#323232","2500 m":"#191919","70 m":"#070707"}}),Slope:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SLOPE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"slope",body:"ike",legend:L.KSP.Legend.SLOPE})},overlays:{}}),L.KSP.CelestialBody.DRES=L.KSP.celestialBody({id:"dres",name:"Dres",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-dres.png"}),L.KSP.CelestialBody.JOOL=L.KSP.celestialBody({id:"jool",name:"Jool",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-jool.png"}),L.KSP.CelestialBody.LAYTHE=L.KSP.celestialBody({id:"laythe",name:"Laythe",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-laythe.png"}),L.KSP.CelestialBody.VALL=L.KSP.celestialBody({id:"vall",name:"Vall",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-vall.png"}),L.KSP.CelestialBody.TYLO=L.KSP.celestialBody({id:"tylo",name:"Tylo",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-tylo.png"}),L.KSP.CelestialBody.BOP=L.KSP.celestialBody({id:"bop",name:"Bop",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-bop.png"}),L.KSP.CelestialBody.POL=L.KSP.celestialBody({id:"pol",name:"Pol",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-pol.png"}),L.KSP.CelestialBody.EELOO=L.KSP.celestialBody({id:"eeloo",name:"Eeloo",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-eeloo.png"}),L.KSP.CelestialBody.KERBIN.defaultLayer=L.KSP.CelestialBody.KERBIN.baseLayers.Satellite,L.KSP.CelestialBody.MUN.defaultLayer=L.KSP.CelestialBody.MUN.baseLayers.Satellite,L.KSP.CelestialBody.MINMUS.defaultLayer=L.KSP.CelestialBody.MINMUS.baseLayers.Satellite,L.KSP.CelestialBody.EVE.children=[L.KSP.CelestialBody.GILLY],L.KSP.CelestialBody.KERBIN.children=[L.KSP.CelestialBody.MUN,L.KSP.CelestialBody.MINMUS],L.KSP.CelestialBody.DUNA.children=[L.KSP.CelestialBody.IKE],L.KSP.CelestialBody.JOOL.children=[L.KSP.CelestialBody.LAYTHE,L.KSP.CelestialBody.VALL,L.KSP.CelestialBody.TYLO,L.KSP.CelestialBody.BOP,L.KSP.CelestialBody.POL],L.KSP.CelestialBody.GILLY.parent=L.KSP.CelestialBody.EVE,L.KSP.CelestialBody.MUN.parent=L.KSP.CelestialBody.MINMUS.parent=L.KSP.CelestialBody.KERBIN,L.KSP.CelestialBody.IKE.parent=L.KSP.CelestialBody.DUNA,L.KSP.CelestialBody.LAYTHE.parent=L.KSP.CelestialBody.VALL.parent=L.KSP.CelestialBody.TYLO.parent=L.KSP.CelestialBody.BOP.parent=L.KSP.CelestialBody.POL.parent=L.KSP.CelestialBody.JOOL,L.KSP.CelestialBody.ALL_PLANETARY=[L.KSP.CelestialBody.MOHO,L.KSP.CelestialBody.EVE,L.KSP.CelestialBody.KERBIN,L.KSP.CelestialBody.DUNA,L.KSP.CelestialBody.DRES,L.KSP.CelestialBody.JOOL,L.KSP.CelestialBody.EELOO],L.KSP.Map.addInitHook(function(){this.options.layers=[L.KSP.CelestialBody.KERBIN]})}(this,document);var Settings=Class.create({initialize:function(defaultHost,defaultPort){if(!this.getHost()){this.setHost(defaultHost)}if(!this.getPort()){this.setPort(defaultPort)}},getHost:function(){return this.get("host")},getPort:function(){return this.get("port")},setHost:function(value){return this.set("host",value)},setPort:function(value){return this.set("port",value)},get:function(property){return localStorage.getItem(property)},set:function(property,value){return localStorage.setItem(property,value)}});var Telemachus=Class.create({initialize:function(host,port){this.updateConnection(host,port);this.receiverFunctions=[];this.subscribedFields={};this.orbitingBodies=this.getOrbitalBodies();this.rate=500;this.loopTimeout=setTimeout(this.poll.bind(this),this.rate)},url:function(){return"http://"+this.host+":"+this.port+"/telemachus/datalink"},updateConnection:function(host,port){this.host=host;this.port=port},addReceiverFunction:function(func){this.receiverFunctions.push(func)},subscribeToData:function(fields){for(var i=fields.length-1;i>=0;i--){var field=fields[i];this.subscribedFields[field]=field}},dispatchMessages:function(data){for(var i=this.receiverFunctions.length-1;i>=0;i--){try{this.receiverFunctions[i](data)}catch(e){console.error(e)}}},send:function(message){this.socket.send(JSON.stringify(message))},getOrbitalBodyInfo:function(name){var properties=this.orbitingBodies[name];if(properties){return Object.extend({name:name},properties)}else{return null}},notifyIfLOS:function(request){if(request.transport.status==0){document.fire("telemachus:loss-of-signal");return true}return false},prepareParams:function(params){var normalizedParams=[];Object.keys(params).forEach(function(field){var sanitizedFieldName=field.replace("[","{").replace("]","}");normalizedParams.push(sanitizedFieldName+"="+field)});return normalizedParams},convertData:function(rawData){var data={};var startBracesRegexp=/\{/g;var endBracesRegexp=/\}/g;Object.keys(rawData).forEach(function(key){var convertedFieldName=key.replace(startBracesRegexp,"[").replace(endBracesRegexp,"]");data[convertedFieldName]=rawData[key]});return data},poll:function(){var params=this.prepareParams(this.subscribedFields);var requestURL=this.url()+"?"+params.join("&");new Ajax.Request(requestURL,{method:"get",onSuccess:function(response){var rawData=JSON.parse(response.responseText);var data=this.convertData(rawData);this.dispatchMessages(data)}.bind(this),onException:this.notifyIfLOS.bind(this),onComplete:function(response){setTimeout(this.poll.bind(this),this.rate)}.bind(this)})},sendMessage:function(params,callback){new Ajax.Request(this.url(),{method:"post",postBody:JSON.stringify(params),onSuccess:function(response){var rawData=JSON.parse(response.responseText);var data=this.convertData(rawData);callback(data)}.bind(this),onException:this.notifyIfLOS.bind(this)})},getOrbitalBodies:function(){return{Sun:{id:0,referenceBodyName:null,mapBody:null,atmosphericRadius:0,color:"#FFFF00",surfaceGravity:17.1},Kerbin:{id:1,referenceBodyName:"Sun",mapBody:L.KSP.CelestialBody.KERBIN,atmosphericRadius:7e4,color:"#4a5472",surfaceGravity:9.81},Mun:{id:2,referenceBodyName:"Kerbin",mapBody:L.KSP.CelestialBody.MUN,atmosphericRadius:0,color:"#e2e0d7",surfaceGravity:1.63},Minmus:{id:3,referenceBodyName:"Kerbin",mapBody:L.KSP.CelestialBody.MINMUS,color:"#98f2c5",atmosphericRadius:0,surfaceGravity:.491},Moho:{id:4,referenceBodyName:"Sun",mapBody:L.KSP.CelestialBody.MOHO,atmosphericRadius:0,color:"#fdc39e",surfaceGravity:2.7},Eve:{id:5,referenceBodyName:"Sun",mapBody:L.KSP.CelestialBody.EVE,atmosphericRadius:9e4,color:"#c394fe",surfaceGravity:16.7},Duna:{id:6,referenceBodyName:"Sun",mapBody:L.KSP.CelestialBody.DUNA,atmosphericRadius:5e4,color:"#fc5e49",surfaceGravity:2.94},Ike:{id:7,referenceBodyName:"Duna",mapBody:L.KSP.CelestialBody.IKE,atmosphericRadius:0,color:"#e2e0d7",surfaceGravity:1.1},Jool:{id:8,referenceBodyName:"Sun",mapBody:L.KSP.CelestialBody.JOOL,atmosphericRadius:2e5,color:"#C5DCAB",surfaceGravity:7.85},Laythe:{id:9,referenceBodyName:"Jool",mapBody:L.KSP.CelestialBody.LAYTHE,atmosphericRadius:5e4,color:"#a8b4fe",surfaceGravity:7.85},Vall:{id:10,referenceBodyName:"Jool",mapBody:L.KSP.CelestialBody.VALL,atmosphericRadius:0,color:"#b0f4fe",surfaceGravity:2.31},Bop:{id:11,referenceBodyName:"Jool",mapBody:L.KSP.CelestialBody.BOP,atmosphericRadius:0,color:"#c64605",surfaceGravity:.589},Tylo:{id:12,referenceBodyName:"Jool",mapBody:L.KSP.CelestialBody.TYLO,atmosphericRadius:0,color:"#fdf7ed",surfaceGravity:7.85},Gilly:{id:13,referenceBodyName:"Eve",mapBody:L.KSP.CelestialBody.GILLY,atmosphericRadius:0,color:"#fdcbb1",surfaceGravity:.049},Pol:{id:14,referenceBodyName:"Pol",mapBody:L.KSP.CelestialBody.POL,atmosphericRadius:0,color:"#fec681",surfaceGravity:.373},Dres:{id:15,referenceBodyName:"Sun",mapBody:L.KSP.CelestialBody.DRES,atmosphericRadius:0,color:"#fef8f9",surfaceGravity:1.13},Eeloo:{id:16,referenceBodyName:"Sun",mapBody:L.KSP.CelestialBody.EELOO,atmosphericRadius:0,color:"#e5fafe",surfaceGravity:1.69}}}});var TitleBar=Class.create({initialize:function(datalink,title_bar_id){this.datalink=datalink;this.title_bar_id=title_bar_id;this.title_bar=$(this.title_bar_id);this.initializeLOSNotifier();this.initializeDatalink()},update:function(data){window.requestAnimationFrame(function(){this.title_bar.down("#world-clock").update(TimeFormatters.formatUT(data["t.universalTime"]));this.title_bar.down("#mission-time").update(TimeFormatters.formatMET(data["v.missionTime"]));this.title_bar.down("#mission-time").removeClassName("loss-of-signal")}.bind(this))},initializeLOSNotifier:function(){document.observe("telemachus:loss-of-signal",function(){window.requestAnimationFrame(function(){this.title_bar.down("#mission-time").update("⚠ LOS ⚠");this.title_bar.down("#mission-time").addClassName("loss-of-signal")}.bind(this))}.bind(this))},initializeDatalink:function(){this.datalink.subscribeToData(["t.timeWarp","t.universalTime","v.missionTime"]);this.datalink.addReceiverFunction(this.update.bind(this))}});var ButtonIndicator=Class.create({initialize:function(datalink,indicatorId,apiButtonString){this.datalink=datalink;this.indicatorId=indicatorId;this.indicator=$(this.indicatorId);this.apiButtonString=apiButtonString;this.initializeDatalink()},update:function(data){if(data[this.apiButtonString]==true){this.indicator.addClassName("on")}else{this.indicator.removeClassName("on")}},initializeDatalink:function(){this.datalink.subscribeToData([this.apiButtonString]);this.datalink.addReceiverFunction(this.update.bind(this))}});var ReadoutTable=Class.create({initialize:function(datalink,tableId,dataRows){this.datalink=datalink;this.tableId=tableId;this.table=$(this.tableId);this.dataRows=dataRows;this.initializeDatalink()},update:function(data){window.requestAnimationFrame(function(){this.dataRows.forEach(function(row){var rowId=row.label;var tableRow=this.table.down("tr[data-label='"+rowId+"']");if(!tableRow){var tableRow=new Element("tr",{"data-label":rowId});tableRow.insert(""+row.label+"");this.table.insert(tableRow)}tableRow.down("td").update(row.formatter(data[row.value]))}.bind(this))}.bind(this))},initializeDatalink:function(){var dataValues=this.dataRows.map(function(dataRow){return dataRow.value});this.datalink.subscribeToData(dataValues);this.datalink.addReceiverFunction(this.update.bind(this))}});var ResourceMonitor=Class.create({initialize:function(datalink,resourceName,options){this.datalink=datalink;this.resourceName=resourceName;this.options=Object.extend({currentStageProgressBar:null,totalProgressBar:null,valuePrefix:null},options);this.resourceStrings=this.buildResourceStrings();this.initializeDatalink()},update:function(data){window.requestAnimationFrame(function(){if(this.options.totalProgressBar){this.options.totalProgressBar.value=data[this.resourceStrings.totalAvailable];this.options.totalProgressBar.max=data[this.resourceStrings.totalMax]}if(this.options.currentStageProgressBar){this.options.currentStageProgressBar.value=data[this.resourceStrings.currentStageAvailable];this.options.currentStageProgressBar.max=data[this.resourceStrings.currentStageMax]}this.updateValue("-total-value",data[this.resourceStrings.totalAvailable]);this.updateValue("-total-max",data[this.resourceStrings.totalMax]);this.updateValue("-current-stage-value",data[this.resourceStrings.currentStageAvailable]);this.updateValue("-current-stage-max",data[this.resourceStrings.currentStageMax])}.bind(this))},updateValue:function(id,value){if($(this.options.valuePrefix+id)){if(value<0){$(this.options.valuePrefix+id).update("NA")}else{$(this.options.valuePrefix+id).update(value.toFixed(2))}}},buildResourceStrings:function(){return{totalAvailable:"r.resource["+this.resourceName+"]",totalMax:"r.resourceMax["+this.resourceName+"]",currentStageAvailable:"r.resourceCurrent["+this.resourceName+"]",currentStageMax:"r.resourceCurrentMax["+this.resourceName+"]"}},initializeDatalink:function(){this.datalink.subscribeToData([this.resourceStrings.totalAvailable,this.resourceStrings.totalMax,this.resourceStrings.currentStageAvailable,this.resourceStrings.currentStageMax]);this.datalink.addReceiverFunction(this.update.bind(this))}});var DataTable=Class.create({initialize:function(tableID,dataRows){this.tableID=tableID;this.table=$(this.tableID);this.dataRows=dataRows},update:function(){window.requestAnimationFrame(function(){this.dataRows.forEach(function(row){var rowId=row.label;var tableRow=this.table.down("tr[data-label='"+rowId+"']");if(!tableRow){var tableRow=new Element("tr",{"data-label":rowId});tableRow.insert(""+row.label+"");this.table.insert(tableRow)}tableRow.down("td").update(row.value)}.bind(this))}.bind(this))},clear:function(){window.requestAnimationFrame(function(){this.dataRows=[];this.table.innerHTML=""}.bind(this))}});var AtmosphericDensityGauge=Class.create({initialize:function(datalink,gaugeID){this.datalink=datalink;this.gaugeID=gaugeID;this.gauge=$(this.gaugeID);this.initializeDatalink();this.func=function(x){return Math.log(2*x)}},update:function(data){var max=this.func(100);var value=this.func(data["v.atmosphericPressure"]*100);if(!isFinite(value)){value=0}this.gauge.value=value;this.gauge.max=max},initializeDatalink:function(){this.datalink.subscribeToData(["v.atmosphericPressure"]);this.datalink.addReceiverFunction(this.update.bind(this))}});var ThrottleGauge=Class.create({initialize:function(datalink,gaugeID){this.datalink=datalink;this.gaugeID=gaugeID;this.gauge=$(this.gaugeID);this.initializeDatalink()},update:function(data){this.gauge.value=data["f.throttle"]*100;this.gauge.max=100},initializeDatalink:function(){this.datalink.subscribeToData(["f.throttle"]);this.datalink.addReceiverFunction(this.update.bind(this))}}); \ No newline at end of file +Math.cosh = Math.cosh || function(x) { + return (Math.exp(x) + Math.exp(-x)) / 2; +} + +Math.sinh = Math.sinh || function(x) { + return (Math.exp(x) - Math.exp(-x)) / 2; +}; + +Math.matrixAdd = Math.matrixAdd || function(){ + var arrays= arguments, results= [], + count= arrays[0].length, L= arrays.length, + sum, next= 0, i; + while(next-1?e(a,b,c):b.indexOf("%")>-1?f(a,b,c):b.indexOf(":")>-1?g(a,b):i(a._value,b,c)}function d(a,b){var c,d,e,f,g,i=b,j=["KB","MB","GB","TB","PB","EB","ZB","YB"],k=!1;if(b.indexOf(":")>-1)a._value=h(b);else if(b===q)a._value=0;else{for("."!==o[p].delimiters.decimal&&(b=b.replace(/\./g,"").replace(o[p].delimiters.decimal,".")),c=new RegExp("[^a-zA-Z]"+o[p].abbreviations.thousand+"(?:\\)|(\\"+o[p].currency.symbol+")?(?:\\))?)?$"),d=new RegExp("[^a-zA-Z]"+o[p].abbreviations.million+"(?:\\)|(\\"+o[p].currency.symbol+")?(?:\\))?)?$"),e=new RegExp("[^a-zA-Z]"+o[p].abbreviations.billion+"(?:\\)|(\\"+o[p].currency.symbol+")?(?:\\))?)?$"),f=new RegExp("[^a-zA-Z]"+o[p].abbreviations.trillion+"(?:\\)|(\\"+o[p].currency.symbol+")?(?:\\))?)?$"),g=0;g<=j.length&&!(k=b.indexOf(j[g])>-1?Math.pow(1024,g+1):!1);g++);a._value=(k?k:1)*(i.match(c)?Math.pow(10,3):1)*(i.match(d)?Math.pow(10,6):1)*(i.match(e)?Math.pow(10,9):1)*(i.match(f)?Math.pow(10,12):1)*(b.indexOf("%")>-1?.01:1)*((b.split("-").length+Math.min(b.split("(").length-1,b.split(")").length-1))%2?1:-1)*Number(b.replace(/[^0-9\.]+/g,"")),a._value=k?Math.ceil(a._value):a._value}return a._value}function e(a,b,c){var d,e,f=b.indexOf("$"),g=b.indexOf("("),h=b.indexOf("-"),j="";return b.indexOf(" $")>-1?(j=" ",b=b.replace(" $","")):b.indexOf("$ ")>-1?(j=" ",b=b.replace("$ ","")):b=b.replace("$",""),e=i(a._value,b,c),1>=f?e.indexOf("(")>-1||e.indexOf("-")>-1?(e=e.split(""),d=1,(g>f||h>f)&&(d=0),e.splice(d,0,o[p].currency.symbol+j),e=e.join("")):e=o[p].currency.symbol+j+e:e.indexOf(")")>-1?(e=e.split(""),e.splice(-1,0,j+o[p].currency.symbol),e=e.join("")):e=e+j+o[p].currency.symbol,e}function f(a,b,c){var d,e="",f=100*a._value;return b.indexOf(" %")>-1?(e=" ",b=b.replace(" %","")):b=b.replace("%",""),d=i(f,b,c),d.indexOf(")")>-1?(d=d.split(""),d.splice(-1,0,e+"%"),d=d.join("")):d=d+e+"%",d}function g(a){var b=Math.floor(a._value/60/60),c=Math.floor((a._value-60*b*60)/60),d=Math.round(a._value-60*b*60-60*c);return b+":"+(10>c?"0"+c:c)+":"+(10>d?"0"+d:d)}function h(a){var b=a.split(":"),c=0;return 3===b.length?(c+=60*Number(b[0])*60,c+=60*Number(b[1]),c+=Number(b[2])):2===b.length&&(c+=60*Number(b[0]),c+=Number(b[1])),Number(c)}function i(a,c,d){var e,f,g,h,i,j,k=!1,l=!1,m=!1,n="",r=!1,s=!1,t=!1,u=!1,v=!1,w="",x="",y=Math.abs(a),z=["B","KB","MB","GB","TB","PB","EB","ZB","YB"],A="",B=!1;if(0===a&&null!==q)return q;if(c.indexOf("(")>-1?(k=!0,c=c.slice(1,-1)):c.indexOf("+")>-1&&(l=!0,c=c.replace(/\+/g,"")),c.indexOf("a")>-1&&(r=c.indexOf("aK")>=0,s=c.indexOf("aM")>=0,t=c.indexOf("aB")>=0,u=c.indexOf("aT")>=0,v=r||s||t||u,c.indexOf(" a")>-1?(n=" ",c=c.replace(" a","")):c=c.replace("a",""),y>=Math.pow(10,12)&&!v||u?(n+=o[p].abbreviations.trillion,a/=Math.pow(10,12)):y=Math.pow(10,9)&&!v||t?(n+=o[p].abbreviations.billion,a/=Math.pow(10,9)):y=Math.pow(10,6)&&!v||s?(n+=o[p].abbreviations.million,a/=Math.pow(10,6)):(y=Math.pow(10,3)&&!v||r)&&(n+=o[p].abbreviations.thousand,a/=Math.pow(10,3))),c.indexOf("b")>-1)for(c.indexOf(" b")>-1?(w=" ",c=c.replace(" b","")):c=c.replace("b",""),g=0;g<=z.length;g++)if(e=Math.pow(1024,g),f=Math.pow(1024,g+1),a>=e&&f>a){w+=z[g],e>0&&(a/=e);break}return c.indexOf("o")>-1&&(c.indexOf(" o")>-1?(x=" ",c=c.replace(" o","")):c=c.replace("o",""),x+=o[p].ordinal(a)),c.indexOf("[.]")>-1&&(m=!0,c=c.replace("[.]",".")),h=a.toString().split(".")[0],i=c.split(".")[1],j=c.indexOf(","),i?(i.indexOf("[")>-1?(i=i.replace("]",""),i=i.split("["),A=b(a,i[0].length+i[1].length,d,i[1].length)):A=b(a,i.length,d),h=A.split(".")[0],A=A.split(".")[1].length?o[p].delimiters.decimal+A.split(".")[1]:"",m&&0===Number(A.slice(1))&&(A="")):h=b(a,null,d),h.indexOf("-")>-1&&(h=h.slice(1),B=!0),j>-1&&(h=h.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g,"$1"+o[p].delimiters.thousands)),0===c.indexOf(".")&&(h=""),(k&&B?"(":"")+(!k&&B?"-":"")+(!B&&l?"+":"")+h+A+(x?x:"")+(n?n:"")+(w?w:"")+(k&&B?")":"")}function j(a,b){o[a]=b}function k(a){var b=a.toString().split(".");return b.length<2?1:Math.pow(10,b[1].length)}function l(){var a=Array.prototype.slice.call(arguments);return a.reduce(function(a,b){var c=k(a),d=k(b);return c>d?c:d},-1/0)}var m,n="1.5.3",o={},p="en",q=null,r="0,0",s="undefined"!=typeof module&&module.exports;m=function(b){return m.isNumeral(b)?b=b.value():0===b||"undefined"==typeof b?b=0:Number(b)||(b=m.fn.unformat(b)),new a(Number(b))},m.version=n,m.isNumeral=function(b){return b instanceof a},m.language=function(a,b){if(!a)return p;if(a&&!b){if(!o[a])throw new Error("Unknown language : "+a);p=a}return(b||!o[a])&&j(a,b),m},m.languageData=function(a){if(!a)return o[p];if(!o[a])throw new Error("Unknown language : "+a);return o[a]},m.language("en",{delimiters:{thousands:",",decimal:"."},abbreviations:{thousand:"k",million:"m",billion:"b",trillion:"t"},ordinal:function(a){var b=a%10;return 1===~~(a%100/10)?"th":1===b?"st":2===b?"nd":3===b?"rd":"th"},currency:{symbol:"$"}}),m.zeroFormat=function(a){q="string"==typeof a?a:null},m.defaultFormat=function(a){r="string"==typeof a?a:"0.0"},"function"!=typeof Array.prototype.reduce&&(Array.prototype.reduce=function(a,b){"use strict";if(null===this||"undefined"==typeof this)throw new TypeError("Array.prototype.reduce called on null or undefined");if("function"!=typeof a)throw new TypeError(a+" is not a function");var c,d,e=this.length>>>0,f=!1;for(1c;++c)this.hasOwnProperty(c)&&(f?d=a(d,this[c],c,this):(d=this[c],f=!0));if(!f)throw new TypeError("Reduce of empty array with no initial value");return d}),m.fn=a.prototype={clone:function(){return m(this)},format:function(a,b){return c(this,a?a:r,void 0!==b?b:Math.round)},unformat:function(a){return"[object Number]"===Object.prototype.toString.call(a)?a:d(this,a?a:r)},value:function(){return this._value},valueOf:function(){return this._value},set:function(a){return this._value=Number(a),this},add:function(a){function b(a,b){return a+c*b}var c=l.call(null,this._value,a);return this._value=[this._value,a].reduce(b,0)/c,this},subtract:function(a){function b(a,b){return a-c*b}var c=l.call(null,this._value,a);return this._value=[a].reduce(b,this._value*c)/c,this},multiply:function(a){function b(a,b){var c=l(a,b);return a*c*b*c/(c*c)}return this._value=[this._value,a].reduce(b,1),this},divide:function(a){function b(a,b){var c=l(a,b);return a*c/(b*c)}return this._value=[this._value,a].reduce(b),this},difference:function(a){return Math.abs(m(this._value).subtract(a).value())}},s&&(module.exports=m),"undefined"==typeof ender&&(this.numeral=m),"function"==typeof define&&define.amd&&define([],function(){return m})}).call(this); +// Extracted Richard Bunt's work in Telemachus: https://github.com/richardbunt/Telemachus/blob/master/WebPages/WebPages/src/console.js + +var TimeFormatters = { + formatUT: function(t){ + var day, year; + if (t == null) { + t = 0; + } + year = ((t / (365 * 24 * 3600)) | 0) + 1; + t %= 365 * 24 * 3600; + day = ((t / (24 * 3600)) | 0) + 1; + t %= 24 * 3600; + return "Year " + year + ", Day " + day + ", " + (this.hourMinSec(t)) + " UT"; + }, + + formatMET: function(t){ + var result; + if (t == null) { + t = 0; + } + result = "T+"; + if (t >= 365 * 24 * 3600) { + result += (t / (365 * 24 * 3600) | 0) + ":"; + t %= 365 * 24 * 3600; + if (t < 24 * 3600) { + result += "0:"; + } + } + if (t >= 24 * 3600) { + result += (t / (24 * 3600) | 0) + ":"; + } + t %= 24 * 3600; + return result + this.hourMinSec(t) + " MET"; + }, + + hourMinSec: function(t) { + var hour, min, sec; + if (t == null) { + t = 0; + } + hour = (t / 3600) | 0; + if (hour < 10) { + hour = "0" + hour; + } + t %= 3600; + min = (t / 60) | 0; + if (min < 10) { + min = "0" + min; + } + sec = (t % 60 | 0).toFixed(); + if (sec < 10) { + sec = "0" + sec; + } + return "" + hour + ":" + min + ":" + sec; + }, + + durationString: function(t) { + var result; + if (t == null) { + t = 0; + } + result = t < 0 ? "-" : ""; + t = Math.abs(t); + if (t >= 365 * 24 * 3600) { + result += (t / (365 * 24 * 3600) | 0) + " years "; + t %= 365 * 24 * 3600; + if (t < 24 * 3600) { + result += "0 days "; + } + } + if (t >= 24 * 3600) { + result += (t / (24 * 3600) | 0) + " days "; + } + t %= 24 * 3600; + return result + this.hourMinSec(t); + } +} +var DataFormatters = { + distanceString: function(value){ + return numeral(value).format('0,0.000 a') + "m" + }, + + heightFromTerrainString: function(value){ + if(value <= -1 ){ return "NA" } + return numeral(value).format('0,0.000 a') + "m" + }, + + degreeString: function(value){ + return numeral(value).format('0.000') + "°" + }, + + velocityString: function(value){ + return numeral(value).format('0,0.000 a') + "m/s" + }, + + temperatureString: function(value){ + if(!value){return "NA"} + return numeral(value).format('0,000') + "°C" + }, + + accelerationSensorString: function(value){ + if(value[0] == "No Sensors of the Appropriate Type"){return "NA"} + return numeral(value[1][0]).format('0,000') + "G" + }, + + pressureSensorString: function(value){ + if(value[0] == "No Sensors of the Appropriate Type"){return "NA"} + return numeral(value[1][0]).format('0,000') + "Pa" + }, + + gravitySensorString: function(value){ + if(value[0] == "No Sensors of the Appropriate Type"){return "NA"} + return numeral(value[1][0]).format('0,000 a') + "m/s²" + }, + + newtonsString: function(value){ + return numeral(value).format('0,0.00') + " N" + }, + + percentageString: function(value){ + return numeral(value).format("0%") + }, + + tonnageString: function(value){ + return numeral(value).format("0,0.00") + " t" + }, + + timeString: function(value){ + return numeral(value).format('00:00:00') + }, + + plainNumberString: function(value){ + return numeral(value).format("0,0.00") + } +} +/* Prototype JavaScript framework, version 1.7.2 + * (c) 2005-2010 Sam Stephenson + * + * Prototype is freely distributable under the terms of an MIT-style license. + * For details, see the Prototype web site: http://www.prototypejs.org/ + * + *--------------------------------------------------------------------------*/ + +var Prototype = { + + Version: '1.7.2', + + Browser: (function(){ + var ua = navigator.userAgent; + var isOpera = Object.prototype.toString.call(window.opera) == '[object Opera]'; + return { + IE: !!window.attachEvent && !isOpera, + Opera: isOpera, + WebKit: ua.indexOf('AppleWebKit/') > -1, + Gecko: ua.indexOf('Gecko') > -1 && ua.indexOf('KHTML') === -1, + MobileSafari: /Apple.*Mobile/.test(ua) + } + })(), + + BrowserFeatures: { + XPath: !!document.evaluate, + + SelectorsAPI: !!document.querySelector, + + ElementExtensions: (function() { + var constructor = window.Element || window.HTMLElement; + return !!(constructor && constructor.prototype); + })(), + SpecificElementExtensions: (function() { + if (typeof window.HTMLDivElement !== 'undefined') + return true; + + var div = document.createElement('div'), + form = document.createElement('form'), + isSupported = false; + + if (div['__proto__'] && (div['__proto__'] !== form['__proto__'])) { + isSupported = true; + } + + div = form = null; + + return isSupported; + })() + }, + + ScriptFragment: ']*>([\\S\\s]*?)<\/script\\s*>', + JSONFilter: /^\/\*-secure-([\s\S]*)\*\/\s*$/, + + emptyFunction: function() { }, + + K: function(x) { return x } +}; + +if (Prototype.Browser.MobileSafari) + Prototype.BrowserFeatures.SpecificElementExtensions = false; +/* Based on Alex Arnell's inheritance implementation. */ + +var Class = (function() { + + var IS_DONTENUM_BUGGY = (function(){ + for (var p in { toString: 1 }) { + if (p === 'toString') return false; + } + return true; + })(); + + function subclass() {}; + function create() { + var parent = null, properties = $A(arguments); + if (Object.isFunction(properties[0])) + parent = properties.shift(); + + function klass() { + this.initialize.apply(this, arguments); + } + + Object.extend(klass, Class.Methods); + klass.superclass = parent; + klass.subclasses = []; + + if (parent) { + subclass.prototype = parent.prototype; + klass.prototype = new subclass; + parent.subclasses.push(klass); + } + + for (var i = 0, length = properties.length; i < length; i++) + klass.addMethods(properties[i]); + + if (!klass.prototype.initialize) + klass.prototype.initialize = Prototype.emptyFunction; + + klass.prototype.constructor = klass; + return klass; + } + + function addMethods(source) { + var ancestor = this.superclass && this.superclass.prototype, + properties = Object.keys(source); + + if (IS_DONTENUM_BUGGY) { + if (source.toString != Object.prototype.toString) + properties.push("toString"); + if (source.valueOf != Object.prototype.valueOf) + properties.push("valueOf"); + } + + for (var i = 0, length = properties.length; i < length; i++) { + var property = properties[i], value = source[property]; + if (ancestor && Object.isFunction(value) && + value.argumentNames()[0] == "$super") { + var method = value; + value = (function(m) { + return function() { return ancestor[m].apply(this, arguments); }; + })(property).wrap(method); + + value.valueOf = (function(method) { + return function() { return method.valueOf.call(method); }; + })(method); + + value.toString = (function(method) { + return function() { return method.toString.call(method); }; + })(method); + } + this.prototype[property] = value; + } + + return this; + } + + return { + create: create, + Methods: { + addMethods: addMethods + } + }; +})(); +(function() { + + var _toString = Object.prototype.toString, + _hasOwnProperty = Object.prototype.hasOwnProperty, + NULL_TYPE = 'Null', + UNDEFINED_TYPE = 'Undefined', + BOOLEAN_TYPE = 'Boolean', + NUMBER_TYPE = 'Number', + STRING_TYPE = 'String', + OBJECT_TYPE = 'Object', + FUNCTION_CLASS = '[object Function]', + BOOLEAN_CLASS = '[object Boolean]', + NUMBER_CLASS = '[object Number]', + STRING_CLASS = '[object String]', + ARRAY_CLASS = '[object Array]', + DATE_CLASS = '[object Date]', + NATIVE_JSON_STRINGIFY_SUPPORT = window.JSON && + typeof JSON.stringify === 'function' && + JSON.stringify(0) === '0' && + typeof JSON.stringify(Prototype.K) === 'undefined'; + + + + var DONT_ENUMS = ['toString', 'toLocaleString', 'valueOf', + 'hasOwnProperty', 'isPrototypeOf', 'propertyIsEnumerable', 'constructor']; + + var IS_DONTENUM_BUGGY = (function(){ + for (var p in { toString: 1 }) { + if (p === 'toString') return false; + } + return true; + })(); + + function Type(o) { + switch(o) { + case null: return NULL_TYPE; + case (void 0): return UNDEFINED_TYPE; + } + var type = typeof o; + switch(type) { + case 'boolean': return BOOLEAN_TYPE; + case 'number': return NUMBER_TYPE; + case 'string': return STRING_TYPE; + } + return OBJECT_TYPE; + } + + function extend(destination, source) { + for (var property in source) + destination[property] = source[property]; + return destination; + } + + function inspect(object) { + try { + if (isUndefined(object)) return 'undefined'; + if (object === null) return 'null'; + return object.inspect ? object.inspect() : String(object); + } catch (e) { + if (e instanceof RangeError) return '...'; + throw e; + } + } + + function toJSON(value) { + return Str('', { '': value }, []); + } + + function Str(key, holder, stack) { + var value = holder[key]; + if (Type(value) === OBJECT_TYPE && typeof value.toJSON === 'function') { + value = value.toJSON(key); + } + + var _class = _toString.call(value); + + switch (_class) { + case NUMBER_CLASS: + case BOOLEAN_CLASS: + case STRING_CLASS: + value = value.valueOf(); + } + + switch (value) { + case null: return 'null'; + case true: return 'true'; + case false: return 'false'; + } + + var type = typeof value; + switch (type) { + case 'string': + return value.inspect(true); + case 'number': + return isFinite(value) ? String(value) : 'null'; + case 'object': + + for (var i = 0, length = stack.length; i < length; i++) { + if (stack[i] === value) { + throw new TypeError("Cyclic reference to '" + value + "' in object"); + } + } + stack.push(value); + + var partial = []; + if (_class === ARRAY_CLASS) { + for (var i = 0, length = value.length; i < length; i++) { + var str = Str(i, value, stack); + partial.push(typeof str === 'undefined' ? 'null' : str); + } + partial = '[' + partial.join(',') + ']'; + } else { + var keys = Object.keys(value); + for (var i = 0, length = keys.length; i < length; i++) { + var key = keys[i], str = Str(key, value, stack); + if (typeof str !== "undefined") { + partial.push(key.inspect(true)+ ':' + str); + } + } + partial = '{' + partial.join(',') + '}'; + } + stack.pop(); + return partial; + } + } + + function stringify(object) { + return JSON.stringify(object); + } + + function toQueryString(object) { + return $H(object).toQueryString(); + } + + function toHTML(object) { + return object && object.toHTML ? object.toHTML() : String.interpret(object); + } + + function keys(object) { + if (Type(object) !== OBJECT_TYPE) { throw new TypeError(); } + var results = []; + for (var property in object) { + if (_hasOwnProperty.call(object, property)) + results.push(property); + } + + if (IS_DONTENUM_BUGGY) { + for (var i = 0; property = DONT_ENUMS[i]; i++) { + if (_hasOwnProperty.call(object, property)) + results.push(property); + } + } + + return results; + } + + function values(object) { + var results = []; + for (var property in object) + results.push(object[property]); + return results; + } + + function clone(object) { + return extend({ }, object); + } + + function isElement(object) { + return !!(object && object.nodeType == 1); + } + + function isArray(object) { + return _toString.call(object) === ARRAY_CLASS; + } + + var hasNativeIsArray = (typeof Array.isArray == 'function') + && Array.isArray([]) && !Array.isArray({}); + + if (hasNativeIsArray) { + isArray = Array.isArray; + } + + function isHash(object) { + return object instanceof Hash; + } + + function isFunction(object) { + return _toString.call(object) === FUNCTION_CLASS; + } + + function isString(object) { + return _toString.call(object) === STRING_CLASS; + } + + function isNumber(object) { + return _toString.call(object) === NUMBER_CLASS; + } + + function isDate(object) { + return _toString.call(object) === DATE_CLASS; + } + + function isUndefined(object) { + return typeof object === "undefined"; + } + + extend(Object, { + extend: extend, + inspect: inspect, + toJSON: NATIVE_JSON_STRINGIFY_SUPPORT ? stringify : toJSON, + toQueryString: toQueryString, + toHTML: toHTML, + keys: Object.keys || keys, + values: values, + clone: clone, + isElement: isElement, + isArray: isArray, + isHash: isHash, + isFunction: isFunction, + isString: isString, + isNumber: isNumber, + isDate: isDate, + isUndefined: isUndefined + }); +})(); +Object.extend(Function.prototype, (function() { + var slice = Array.prototype.slice; + + function update(array, args) { + var arrayLength = array.length, length = args.length; + while (length--) array[arrayLength + length] = args[length]; + return array; + } + + function merge(array, args) { + array = slice.call(array, 0); + return update(array, args); + } + + function argumentNames() { + var names = this.toString().match(/^[\s\(]*function[^(]*\(([^)]*)\)/)[1] + .replace(/\/\/.*?[\r\n]|\/\*(?:.|[\r\n])*?\*\//g, '') + .replace(/\s+/g, '').split(','); + return names.length == 1 && !names[0] ? [] : names; + } + + + function bind(context) { + if (arguments.length < 2 && Object.isUndefined(arguments[0])) + return this; + + if (!Object.isFunction(this)) + throw new TypeError("The object is not callable."); + + var nop = function() {}; + var __method = this, args = slice.call(arguments, 1); + + var bound = function() { + var a = merge(args, arguments); + var c = this instanceof bound ? this : context; + return __method.apply(c, a); + }; + + nop.prototype = this.prototype; + bound.prototype = new nop(); + + return bound; + } + + function bindAsEventListener(context) { + var __method = this, args = slice.call(arguments, 1); + return function(event) { + var a = update([event || window.event], args); + return __method.apply(context, a); + } + } + + function curry() { + if (!arguments.length) return this; + var __method = this, args = slice.call(arguments, 0); + return function() { + var a = merge(args, arguments); + return __method.apply(this, a); + } + } + + function delay(timeout) { + var __method = this, args = slice.call(arguments, 1); + timeout = timeout * 1000; + return window.setTimeout(function() { + return __method.apply(__method, args); + }, timeout); + } + + function defer() { + var args = update([0.01], arguments); + return this.delay.apply(this, args); + } + + function wrap(wrapper) { + var __method = this; + return function() { + var a = update([__method.bind(this)], arguments); + return wrapper.apply(this, a); + } + } + + function methodize() { + if (this._methodized) return this._methodized; + var __method = this; + return this._methodized = function() { + var a = update([this], arguments); + return __method.apply(null, a); + }; + } + + var extensions = { + argumentNames: argumentNames, + bindAsEventListener: bindAsEventListener, + curry: curry, + delay: delay, + defer: defer, + wrap: wrap, + methodize: methodize + }; + + if (!Function.prototype.bind) + extensions.bind = bind; + + return extensions; +})()); + + + +(function(proto) { + + + function toISOString() { + return this.getUTCFullYear() + '-' + + (this.getUTCMonth() + 1).toPaddedString(2) + '-' + + this.getUTCDate().toPaddedString(2) + 'T' + + this.getUTCHours().toPaddedString(2) + ':' + + this.getUTCMinutes().toPaddedString(2) + ':' + + this.getUTCSeconds().toPaddedString(2) + 'Z'; + } + + + function toJSON() { + return this.toISOString(); + } + + if (!proto.toISOString) proto.toISOString = toISOString; + if (!proto.toJSON) proto.toJSON = toJSON; + +})(Date.prototype); + + +RegExp.prototype.match = RegExp.prototype.test; + +RegExp.escape = function(str) { + return String(str).replace(/([.*+?^=!:${}()|[\]\/\\])/g, '\\$1'); +}; +var PeriodicalExecuter = Class.create({ + initialize: function(callback, frequency) { + this.callback = callback; + this.frequency = frequency; + this.currentlyExecuting = false; + + this.registerCallback(); + }, + + registerCallback: function() { + this.timer = setInterval(this.onTimerEvent.bind(this), this.frequency * 1000); + }, + + execute: function() { + this.callback(this); + }, + + stop: function() { + if (!this.timer) return; + clearInterval(this.timer); + this.timer = null; + }, + + onTimerEvent: function() { + if (!this.currentlyExecuting) { + try { + this.currentlyExecuting = true; + this.execute(); + this.currentlyExecuting = false; + } catch(e) { + this.currentlyExecuting = false; + throw e; + } + } + } +}); +Object.extend(String, { + interpret: function(value) { + return value == null ? '' : String(value); + }, + specialChar: { + '\b': '\\b', + '\t': '\\t', + '\n': '\\n', + '\f': '\\f', + '\r': '\\r', + '\\': '\\\\' + } +}); + +Object.extend(String.prototype, (function() { + var NATIVE_JSON_PARSE_SUPPORT = window.JSON && + typeof JSON.parse === 'function' && + JSON.parse('{"test": true}').test; + + function prepareReplacement(replacement) { + if (Object.isFunction(replacement)) return replacement; + var template = new Template(replacement); + return function(match) { return template.evaluate(match) }; + } + + function isNonEmptyRegExp(regexp) { + return regexp.source && regexp.source !== '(?:)'; + } + + + function gsub(pattern, replacement) { + var result = '', source = this, match; + replacement = prepareReplacement(replacement); + + if (Object.isString(pattern)) + pattern = RegExp.escape(pattern); + + if (!(pattern.length || isNonEmptyRegExp(pattern))) { + replacement = replacement(''); + return replacement + source.split('').join(replacement) + replacement; + } + + while (source.length > 0) { + match = source.match(pattern) + if (match && match[0].length > 0) { + result += source.slice(0, match.index); + result += String.interpret(replacement(match)); + source = source.slice(match.index + match[0].length); + } else { + result += source, source = ''; + } + } + return result; + } + + function sub(pattern, replacement, count) { + replacement = prepareReplacement(replacement); + count = Object.isUndefined(count) ? 1 : count; + + return this.gsub(pattern, function(match) { + if (--count < 0) return match[0]; + return replacement(match); + }); + } + + function scan(pattern, iterator) { + this.gsub(pattern, iterator); + return String(this); + } + + function truncate(length, truncation) { + length = length || 30; + truncation = Object.isUndefined(truncation) ? '...' : truncation; + return this.length > length ? + this.slice(0, length - truncation.length) + truncation : String(this); + } + + function strip() { + return this.replace(/^\s+/, '').replace(/\s+$/, ''); + } + + function stripTags() { + return this.replace(/<\w+(\s+("[^"]*"|'[^']*'|[^>])+)?>|<\/\w+>/gi, ''); + } + + function stripScripts() { + return this.replace(new RegExp(Prototype.ScriptFragment, 'img'), ''); + } + + function extractScripts() { + var matchAll = new RegExp(Prototype.ScriptFragment, 'img'), + matchOne = new RegExp(Prototype.ScriptFragment, 'im'); + return (this.match(matchAll) || []).map(function(scriptTag) { + return (scriptTag.match(matchOne) || ['', ''])[1]; + }); + } + + function evalScripts() { + return this.extractScripts().map(function(script) { return eval(script); }); + } + + function escapeHTML() { + return this.replace(/&/g,'&').replace(//g,'>'); + } + + function unescapeHTML() { + return this.stripTags().replace(/</g,'<').replace(/>/g,'>').replace(/&/g,'&'); + } + + + function toQueryParams(separator) { + var match = this.strip().match(/([^?#]*)(#.*)?$/); + if (!match) return { }; + + return match[1].split(separator || '&').inject({ }, function(hash, pair) { + if ((pair = pair.split('='))[0]) { + var key = decodeURIComponent(pair.shift()), + value = pair.length > 1 ? pair.join('=') : pair[0]; + + if (value != undefined) { + value = value.gsub('+', ' '); + value = decodeURIComponent(value); + } + + if (key in hash) { + if (!Object.isArray(hash[key])) hash[key] = [hash[key]]; + hash[key].push(value); + } + else hash[key] = value; + } + return hash; + }); + } + + function toArray() { + return this.split(''); + } + + function succ() { + return this.slice(0, this.length - 1) + + String.fromCharCode(this.charCodeAt(this.length - 1) + 1); + } + + function times(count) { + return count < 1 ? '' : new Array(count + 1).join(this); + } + + function camelize() { + return this.replace(/-+(.)?/g, function(match, chr) { + return chr ? chr.toUpperCase() : ''; + }); + } + + function capitalize() { + return this.charAt(0).toUpperCase() + this.substring(1).toLowerCase(); + } + + function underscore() { + return this.replace(/::/g, '/') + .replace(/([A-Z]+)([A-Z][a-z])/g, '$1_$2') + .replace(/([a-z\d])([A-Z])/g, '$1_$2') + .replace(/-/g, '_') + .toLowerCase(); + } + + function dasherize() { + return this.replace(/_/g, '-'); + } + + function inspect(useDoubleQuotes) { + var escapedString = this.replace(/[\x00-\x1f\\]/g, function(character) { + if (character in String.specialChar) { + return String.specialChar[character]; + } + return '\\u00' + character.charCodeAt().toPaddedString(2, 16); + }); + if (useDoubleQuotes) return '"' + escapedString.replace(/"/g, '\\"') + '"'; + return "'" + escapedString.replace(/'/g, '\\\'') + "'"; + } + + function unfilterJSON(filter) { + return this.replace(filter || Prototype.JSONFilter, '$1'); + } + + function isJSON() { + var str = this; + if (str.blank()) return false; + str = str.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@'); + str = str.replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']'); + str = str.replace(/(?:^|:|,)(?:\s*\[)+/g, ''); + return (/^[\],:{}\s]*$/).test(str); + } + + function evalJSON(sanitize) { + var json = this.unfilterJSON(), + cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g; + if (cx.test(json)) { + json = json.replace(cx, function (a) { + return '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4); + }); + } + try { + if (!sanitize || json.isJSON()) return eval('(' + json + ')'); + } catch (e) { } + throw new SyntaxError('Badly formed JSON string: ' + this.inspect()); + } + + function parseJSON() { + var json = this.unfilterJSON(); + return JSON.parse(json); + } + + function include(pattern) { + return this.indexOf(pattern) > -1; + } + + function startsWith(pattern, position) { + position = Object.isNumber(position) ? position : 0; + return this.lastIndexOf(pattern, position) === position; + } + + function endsWith(pattern, position) { + pattern = String(pattern); + position = Object.isNumber(position) ? position : this.length; + if (position < 0) position = 0; + if (position > this.length) position = this.length; + var d = position - pattern.length; + return d >= 0 && this.indexOf(pattern, d) === d; + } + + function empty() { + return this == ''; + } + + function blank() { + return /^\s*$/.test(this); + } + + function interpolate(object, pattern) { + return new Template(this, pattern).evaluate(object); + } + + return { + gsub: gsub, + sub: sub, + scan: scan, + truncate: truncate, + strip: String.prototype.trim || strip, + stripTags: stripTags, + stripScripts: stripScripts, + extractScripts: extractScripts, + evalScripts: evalScripts, + escapeHTML: escapeHTML, + unescapeHTML: unescapeHTML, + toQueryParams: toQueryParams, + parseQuery: toQueryParams, + toArray: toArray, + succ: succ, + times: times, + camelize: camelize, + capitalize: capitalize, + underscore: underscore, + dasherize: dasherize, + inspect: inspect, + unfilterJSON: unfilterJSON, + isJSON: isJSON, + evalJSON: NATIVE_JSON_PARSE_SUPPORT ? parseJSON : evalJSON, + include: include, + startsWith: String.prototype.startsWith || startsWith, + endsWith: String.prototype.endsWith || endsWith, + empty: empty, + blank: blank, + interpolate: interpolate + }; +})()); + +var Template = Class.create({ + initialize: function(template, pattern) { + this.template = template.toString(); + this.pattern = pattern || Template.Pattern; + }, + + evaluate: function(object) { + if (object && Object.isFunction(object.toTemplateReplacements)) + object = object.toTemplateReplacements(); + + return this.template.gsub(this.pattern, function(match) { + if (object == null) return (match[1] + ''); + + var before = match[1] || ''; + if (before == '\\') return match[2]; + + var ctx = object, expr = match[3], + pattern = /^([^.[]+|\[((?:.*?[^\\])?)\])(\.|\[|$)/; + + match = pattern.exec(expr); + if (match == null) return before; + + while (match != null) { + var comp = match[1].startsWith('[') ? match[2].replace(/\\\\]/g, ']') : match[1]; + ctx = ctx[comp]; + if (null == ctx || '' == match[3]) break; + expr = expr.substring('[' == match[3] ? match[1].length : match[0].length); + match = pattern.exec(expr); + } + + return before + String.interpret(ctx); + }); + } +}); +Template.Pattern = /(^|.|\r|\n)(#\{(.*?)\})/; + +var $break = { }; + +var Enumerable = (function() { + function each(iterator, context) { + try { + this._each(iterator, context); + } catch (e) { + if (e != $break) throw e; + } + return this; + } + + function eachSlice(number, iterator, context) { + var index = -number, slices = [], array = this.toArray(); + if (number < 1) return array; + while ((index += number) < array.length) + slices.push(array.slice(index, index+number)); + return slices.collect(iterator, context); + } + + function all(iterator, context) { + iterator = iterator || Prototype.K; + var result = true; + this.each(function(value, index) { + result = result && !!iterator.call(context, value, index, this); + if (!result) throw $break; + }, this); + return result; + } + + function any(iterator, context) { + iterator = iterator || Prototype.K; + var result = false; + this.each(function(value, index) { + if (result = !!iterator.call(context, value, index, this)) + throw $break; + }, this); + return result; + } + + function collect(iterator, context) { + iterator = iterator || Prototype.K; + var results = []; + this.each(function(value, index) { + results.push(iterator.call(context, value, index, this)); + }, this); + return results; + } + + function detect(iterator, context) { + var result; + this.each(function(value, index) { + if (iterator.call(context, value, index, this)) { + result = value; + throw $break; + } + }, this); + return result; + } + + function findAll(iterator, context) { + var results = []; + this.each(function(value, index) { + if (iterator.call(context, value, index, this)) + results.push(value); + }, this); + return results; + } + + function grep(filter, iterator, context) { + iterator = iterator || Prototype.K; + var results = []; + + if (Object.isString(filter)) + filter = new RegExp(RegExp.escape(filter)); + + this.each(function(value, index) { + if (filter.match(value)) + results.push(iterator.call(context, value, index, this)); + }, this); + return results; + } + + function include(object) { + if (Object.isFunction(this.indexOf) && this.indexOf(object) != -1) + return true; + + var found = false; + this.each(function(value) { + if (value == object) { + found = true; + throw $break; + } + }); + return found; + } + + function inGroupsOf(number, fillWith) { + fillWith = Object.isUndefined(fillWith) ? null : fillWith; + return this.eachSlice(number, function(slice) { + while(slice.length < number) slice.push(fillWith); + return slice; + }); + } + + function inject(memo, iterator, context) { + this.each(function(value, index) { + memo = iterator.call(context, memo, value, index, this); + }, this); + return memo; + } + + function invoke(method) { + var args = $A(arguments).slice(1); + return this.map(function(value) { + return value[method].apply(value, args); + }); + } + + function max(iterator, context) { + iterator = iterator || Prototype.K; + var result; + this.each(function(value, index) { + value = iterator.call(context, value, index, this); + if (result == null || value >= result) + result = value; + }, this); + return result; + } + + function min(iterator, context) { + iterator = iterator || Prototype.K; + var result; + this.each(function(value, index) { + value = iterator.call(context, value, index, this); + if (result == null || value < result) + result = value; + }, this); + return result; + } + + function partition(iterator, context) { + iterator = iterator || Prototype.K; + var trues = [], falses = []; + this.each(function(value, index) { + (iterator.call(context, value, index, this) ? + trues : falses).push(value); + }, this); + return [trues, falses]; + } + + function pluck(property) { + var results = []; + this.each(function(value) { + results.push(value[property]); + }); + return results; + } + + function reject(iterator, context) { + var results = []; + this.each(function(value, index) { + if (!iterator.call(context, value, index, this)) + results.push(value); + }, this); + return results; + } + + function sortBy(iterator, context) { + return this.map(function(value, index) { + return { + value: value, + criteria: iterator.call(context, value, index, this) + }; + }, this).sort(function(left, right) { + var a = left.criteria, b = right.criteria; + return a < b ? -1 : a > b ? 1 : 0; + }).pluck('value'); + } + + function toArray() { + return this.map(); + } + + function zip() { + var iterator = Prototype.K, args = $A(arguments); + if (Object.isFunction(args.last())) + iterator = args.pop(); + + var collections = [this].concat(args).map($A); + return this.map(function(value, index) { + return iterator(collections.pluck(index)); + }); + } + + function size() { + return this.toArray().length; + } + + function inspect() { + return '#'; + } + + + + + + + + + + return { + each: each, + eachSlice: eachSlice, + all: all, + every: all, + any: any, + some: any, + collect: collect, + map: collect, + detect: detect, + findAll: findAll, + select: findAll, + filter: findAll, + grep: grep, + include: include, + member: include, + inGroupsOf: inGroupsOf, + inject: inject, + invoke: invoke, + max: max, + min: min, + partition: partition, + pluck: pluck, + reject: reject, + sortBy: sortBy, + toArray: toArray, + entries: toArray, + zip: zip, + size: size, + inspect: inspect, + find: detect + }; +})(); + +function $A(iterable) { + if (!iterable) return []; + if ('toArray' in Object(iterable)) return iterable.toArray(); + var length = iterable.length || 0, results = new Array(length); + while (length--) results[length] = iterable[length]; + return results; +} + + +function $w(string) { + if (!Object.isString(string)) return []; + string = string.strip(); + return string ? string.split(/\s+/) : []; +} + +Array.from = $A; + + +(function() { + var arrayProto = Array.prototype, + slice = arrayProto.slice, + _each = arrayProto.forEach; // use native browser JS 1.6 implementation if available + + function each(iterator, context) { + for (var i = 0, length = this.length >>> 0; i < length; i++) { + if (i in this) iterator.call(context, this[i], i, this); + } + } + if (!_each) _each = each; + + function clear() { + this.length = 0; + return this; + } + + function first() { + return this[0]; + } + + function last() { + return this[this.length - 1]; + } + + function compact() { + return this.select(function(value) { + return value != null; + }); + } + + function flatten() { + return this.inject([], function(array, value) { + if (Object.isArray(value)) + return array.concat(value.flatten()); + array.push(value); + return array; + }); + } + + function without() { + var values = slice.call(arguments, 0); + return this.select(function(value) { + return !values.include(value); + }); + } + + function reverse(inline) { + return (inline === false ? this.toArray() : this)._reverse(); + } + + function uniq(sorted) { + return this.inject([], function(array, value, index) { + if (0 == index || (sorted ? array.last() != value : !array.include(value))) + array.push(value); + return array; + }); + } + + function intersect(array) { + return this.uniq().findAll(function(item) { + return array.indexOf(item) !== -1; + }); + } + + + function clone() { + return slice.call(this, 0); + } + + function size() { + return this.length; + } + + function inspect() { + return '[' + this.map(Object.inspect).join(', ') + ']'; + } + + function indexOf(item, i) { + if (this == null) throw new TypeError(); + + var array = Object(this), length = array.length >>> 0; + if (length === 0) return -1; + + i = Number(i); + if (isNaN(i)) { + i = 0; + } else if (i !== 0 && isFinite(i)) { + i = (i > 0 ? 1 : -1) * Math.floor(Math.abs(i)); + } + + if (i > length) return -1; + + var k = i >= 0 ? i : Math.max(length - Math.abs(i), 0); + for (; k < length; k++) + if (k in array && array[k] === item) return k; + return -1; + } + + + function lastIndexOf(item, i) { + if (this == null) throw new TypeError(); + + var array = Object(this), length = array.length >>> 0; + if (length === 0) return -1; + + if (!Object.isUndefined(i)) { + i = Number(i); + if (isNaN(i)) { + i = 0; + } else if (i !== 0 && isFinite(i)) { + i = (i > 0 ? 1 : -1) * Math.floor(Math.abs(i)); + } + } else { + i = length; + } + + var k = i >= 0 ? Math.min(i, length - 1) : + length - Math.abs(i); + + for (; k >= 0; k--) + if (k in array && array[k] === item) return k; + return -1; + } + + function concat(_) { + var array = [], items = slice.call(arguments, 0), item, n = 0; + items.unshift(this); + for (var i = 0, length = items.length; i < length; i++) { + item = items[i]; + if (Object.isArray(item) && !('callee' in item)) { + for (var j = 0, arrayLength = item.length; j < arrayLength; j++) { + if (j in item) array[n] = item[j]; + n++; + } + } else { + array[n++] = item; + } + } + array.length = n; + return array; + } + + + function wrapNative(method) { + return function() { + if (arguments.length === 0) { + return method.call(this, Prototype.K); + } else if (arguments[0] === undefined) { + var args = slice.call(arguments, 1); + args.unshift(Prototype.K); + return method.apply(this, args); + } else { + return method.apply(this, arguments); + } + }; + } + + + function map(iterator) { + if (this == null) throw new TypeError(); + iterator = iterator || Prototype.K; + + var object = Object(this); + var results = [], context = arguments[1], n = 0; + + for (var i = 0, length = object.length >>> 0; i < length; i++) { + if (i in object) { + results[n] = iterator.call(context, object[i], i, object); + } + n++; + } + results.length = n; + return results; + } + + if (arrayProto.map) { + map = wrapNative(Array.prototype.map); + } + + function filter(iterator) { + if (this == null || !Object.isFunction(iterator)) + throw new TypeError(); + + var object = Object(this); + var results = [], context = arguments[1], value; + + for (var i = 0, length = object.length >>> 0; i < length; i++) { + if (i in object) { + value = object[i]; + if (iterator.call(context, value, i, object)) { + results.push(value); + } + } + } + return results; + } + + if (arrayProto.filter) { + filter = Array.prototype.filter; + } + + function some(iterator) { + if (this == null) throw new TypeError(); + iterator = iterator || Prototype.K; + var context = arguments[1]; + + var object = Object(this); + for (var i = 0, length = object.length >>> 0; i < length; i++) { + if (i in object && iterator.call(context, object[i], i, object)) { + return true; + } + } + + return false; + } + + if (arrayProto.some) { + var some = wrapNative(Array.prototype.some); + } + + + function every(iterator) { + if (this == null) throw new TypeError(); + iterator = iterator || Prototype.K; + var context = arguments[1]; + + var object = Object(this); + for (var i = 0, length = object.length >>> 0; i < length; i++) { + if (i in object && !iterator.call(context, object[i], i, object)) { + return false; + } + } + + return true; + } + + if (arrayProto.every) { + var every = wrapNative(Array.prototype.every); + } + + var _reduce = arrayProto.reduce; + function inject(memo, iterator) { + iterator = iterator || Prototype.K; + var context = arguments[2]; + return _reduce.call(this, iterator.bind(context), memo); + } + + if (!arrayProto.reduce) { + var inject = Enumerable.inject; + } + + Object.extend(arrayProto, Enumerable); + + if (!arrayProto._reverse) + arrayProto._reverse = arrayProto.reverse; + + Object.extend(arrayProto, { + _each: _each, + + map: map, + collect: map, + select: filter, + filter: filter, + findAll: filter, + some: some, + any: some, + every: every, + all: every, + inject: inject, + + clear: clear, + first: first, + last: last, + compact: compact, + flatten: flatten, + without: without, + reverse: reverse, + uniq: uniq, + intersect: intersect, + clone: clone, + toArray: clone, + size: size, + inspect: inspect + }); + + var CONCAT_ARGUMENTS_BUGGY = (function() { + return [].concat(arguments)[0][0] !== 1; + })(1,2); + + if (CONCAT_ARGUMENTS_BUGGY) arrayProto.concat = concat; + + if (!arrayProto.indexOf) arrayProto.indexOf = indexOf; + if (!arrayProto.lastIndexOf) arrayProto.lastIndexOf = lastIndexOf; +})(); +function $H(object) { + return new Hash(object); +}; + +var Hash = Class.create(Enumerable, (function() { + function initialize(object) { + this._object = Object.isHash(object) ? object.toObject() : Object.clone(object); + } + + + function _each(iterator, context) { + var i = 0; + for (var key in this._object) { + var value = this._object[key], pair = [key, value]; + pair.key = key; + pair.value = value; + iterator.call(context, pair, i); + i++; + } + } + + function set(key, value) { + return this._object[key] = value; + } + + function get(key) { + if (this._object[key] !== Object.prototype[key]) + return this._object[key]; + } + + function unset(key) { + var value = this._object[key]; + delete this._object[key]; + return value; + } + + function toObject() { + return Object.clone(this._object); + } + + + + function keys() { + return this.pluck('key'); + } + + function values() { + return this.pluck('value'); + } + + function index(value) { + var match = this.detect(function(pair) { + return pair.value === value; + }); + return match && match.key; + } + + function merge(object) { + return this.clone().update(object); + } + + function update(object) { + return new Hash(object).inject(this, function(result, pair) { + result.set(pair.key, pair.value); + return result; + }); + } + + function toQueryPair(key, value) { + if (Object.isUndefined(value)) return key; + + value = String.interpret(value); + + value = value.gsub(/(\r)?\n/, '\r\n'); + value = encodeURIComponent(value); + value = value.gsub(/%20/, '+'); + return key + '=' + value; + } + + function toQueryString() { + return this.inject([], function(results, pair) { + var key = encodeURIComponent(pair.key), values = pair.value; + + if (values && typeof values == 'object') { + if (Object.isArray(values)) { + var queryValues = []; + for (var i = 0, len = values.length, value; i < len; i++) { + value = values[i]; + queryValues.push(toQueryPair(key, value)); + } + return results.concat(queryValues); + } + } else results.push(toQueryPair(key, values)); + return results; + }).join('&'); + } + + function inspect() { + return '#'; + } + + function clone() { + return new Hash(this); + } + + return { + initialize: initialize, + _each: _each, + set: set, + get: get, + unset: unset, + toObject: toObject, + toTemplateReplacements: toObject, + keys: keys, + values: values, + index: index, + merge: merge, + update: update, + toQueryString: toQueryString, + inspect: inspect, + toJSON: toObject, + clone: clone + }; +})()); + +Hash.from = $H; +Object.extend(Number.prototype, (function() { + function toColorPart() { + return this.toPaddedString(2, 16); + } + + function succ() { + return this + 1; + } + + function times(iterator, context) { + $R(0, this, true).each(iterator, context); + return this; + } + + function toPaddedString(length, radix) { + var string = this.toString(radix || 10); + return '0'.times(length - string.length) + string; + } + + function abs() { + return Math.abs(this); + } + + function round() { + return Math.round(this); + } + + function ceil() { + return Math.ceil(this); + } + + function floor() { + return Math.floor(this); + } + + return { + toColorPart: toColorPart, + succ: succ, + times: times, + toPaddedString: toPaddedString, + abs: abs, + round: round, + ceil: ceil, + floor: floor + }; +})()); + +function $R(start, end, exclusive) { + return new ObjectRange(start, end, exclusive); +} + +var ObjectRange = Class.create(Enumerable, (function() { + function initialize(start, end, exclusive) { + this.start = start; + this.end = end; + this.exclusive = exclusive; + } + + function _each(iterator, context) { + var value = this.start, i; + for (i = 0; this.include(value); i++) { + iterator.call(context, value, i); + value = value.succ(); + } + } + + function include(value) { + if (value < this.start) + return false; + if (this.exclusive) + return value < this.end; + return value <= this.end; + } + + return { + initialize: initialize, + _each: _each, + include: include + }; +})()); + + + +var Abstract = { }; + + +var Try = { + these: function() { + var returnValue; + + for (var i = 0, length = arguments.length; i < length; i++) { + var lambda = arguments[i]; + try { + returnValue = lambda(); + break; + } catch (e) { } + } + + return returnValue; + } +}; + +var Ajax = { + getTransport: function() { + return Try.these( + function() {return new XMLHttpRequest()}, + function() {return new ActiveXObject('Msxml2.XMLHTTP')}, + function() {return new ActiveXObject('Microsoft.XMLHTTP')} + ) || false; + }, + + activeRequestCount: 0 +}; + +Ajax.Responders = { + responders: [], + + _each: function(iterator, context) { + this.responders._each(iterator, context); + }, + + register: function(responder) { + if (!this.include(responder)) + this.responders.push(responder); + }, + + unregister: function(responder) { + this.responders = this.responders.without(responder); + }, + + dispatch: function(callback, request, transport, json) { + this.each(function(responder) { + if (Object.isFunction(responder[callback])) { + try { + responder[callback].apply(responder, [request, transport, json]); + } catch (e) { } + } + }); + } +}; + +Object.extend(Ajax.Responders, Enumerable); + +Ajax.Responders.register({ + onCreate: function() { Ajax.activeRequestCount++ }, + onComplete: function() { Ajax.activeRequestCount-- } +}); +Ajax.Base = Class.create({ + initialize: function(options) { + this.options = { + method: 'post', + asynchronous: true, + contentType: 'application/x-www-form-urlencoded', + encoding: 'UTF-8', + parameters: '', + evalJSON: true, + evalJS: true + }; + Object.extend(this.options, options || { }); + + this.options.method = this.options.method.toLowerCase(); + + if (Object.isHash(this.options.parameters)) + this.options.parameters = this.options.parameters.toObject(); + } +}); +Ajax.Request = Class.create(Ajax.Base, { + _complete: false, + + initialize: function($super, url, options) { + $super(options); + this.transport = Ajax.getTransport(); + this.request(url); + }, + + request: function(url) { + this.url = url; + this.method = this.options.method; + var params = Object.isString(this.options.parameters) ? + this.options.parameters : + Object.toQueryString(this.options.parameters); + + if (!['get', 'post'].include(this.method)) { + params += (params ? '&' : '') + "_method=" + this.method; + this.method = 'post'; + } + + if (params && this.method === 'get') { + this.url += (this.url.include('?') ? '&' : '?') + params; + } + + this.parameters = params.toQueryParams(); + + try { + var response = new Ajax.Response(this); + if (this.options.onCreate) this.options.onCreate(response); + Ajax.Responders.dispatch('onCreate', this, response); + + this.transport.open(this.method.toUpperCase(), this.url, + this.options.asynchronous); + + if (this.options.asynchronous) this.respondToReadyState.bind(this).defer(1); + + this.transport.onreadystatechange = this.onStateChange.bind(this); + this.setRequestHeaders(); + + this.body = this.method == 'post' ? (this.options.postBody || params) : null; + this.transport.send(this.body); + + /* Force Firefox to handle ready state 4 for synchronous requests */ + if (!this.options.asynchronous && this.transport.overrideMimeType) + this.onStateChange(); + + } + catch (e) { + this.dispatchException(e); + } + }, + + onStateChange: function() { + var readyState = this.transport.readyState; + if (readyState > 1 && !((readyState == 4) && this._complete)) + this.respondToReadyState(this.transport.readyState); + }, + + setRequestHeaders: function() { + var headers = { + 'X-Requested-With': 'XMLHttpRequest', + 'X-Prototype-Version': Prototype.Version, + 'Accept': 'text/javascript, text/html, application/xml, text/xml, */*' + }; + + if (this.method == 'post') { + headers['Content-type'] = this.options.contentType + + (this.options.encoding ? '; charset=' + this.options.encoding : ''); + + /* Force "Connection: close" for older Mozilla browsers to work + * around a bug where XMLHttpRequest sends an incorrect + * Content-length header. See Mozilla Bugzilla #246651. + */ + if (this.transport.overrideMimeType && + (navigator.userAgent.match(/Gecko\/(\d{4})/) || [0,2005])[1] < 2005) + headers['Connection'] = 'close'; + } + + if (typeof this.options.requestHeaders == 'object') { + var extras = this.options.requestHeaders; + + if (Object.isFunction(extras.push)) + for (var i = 0, length = extras.length; i < length; i += 2) + headers[extras[i]] = extras[i+1]; + else + $H(extras).each(function(pair) { headers[pair.key] = pair.value }); + } + + for (var name in headers) + if (headers[name] != null) + this.transport.setRequestHeader(name, headers[name]); + }, + + success: function() { + var status = this.getStatus(); + return !status || (status >= 200 && status < 300) || status == 304; + }, + + getStatus: function() { + try { + if (this.transport.status === 1223) return 204; + return this.transport.status || 0; + } catch (e) { return 0 } + }, + + respondToReadyState: function(readyState) { + var state = Ajax.Request.Events[readyState], response = new Ajax.Response(this); + + if (state == 'Complete') { + try { + this._complete = true; + (this.options['on' + response.status] + || this.options['on' + (this.success() ? 'Success' : 'Failure')] + || Prototype.emptyFunction)(response, response.headerJSON); + } catch (e) { + this.dispatchException(e); + } + + var contentType = response.getHeader('Content-type'); + if (this.options.evalJS == 'force' + || (this.options.evalJS && this.isSameOrigin() && contentType + && contentType.match(/^\s*(text|application)\/(x-)?(java|ecma)script(;.*)?\s*$/i))) + this.evalResponse(); + } + + try { + (this.options['on' + state] || Prototype.emptyFunction)(response, response.headerJSON); + Ajax.Responders.dispatch('on' + state, this, response, response.headerJSON); + } catch (e) { + this.dispatchException(e); + } + + if (state == 'Complete') { + this.transport.onreadystatechange = Prototype.emptyFunction; + } + }, + + isSameOrigin: function() { + var m = this.url.match(/^\s*https?:\/\/[^\/]*/); + return !m || (m[0] == '#{protocol}//#{domain}#{port}'.interpolate({ + protocol: location.protocol, + domain: document.domain, + port: location.port ? ':' + location.port : '' + })); + }, + + getHeader: function(name) { + try { + return this.transport.getResponseHeader(name) || null; + } catch (e) { return null; } + }, + + evalResponse: function() { + try { + return eval((this.transport.responseText || '').unfilterJSON()); + } catch (e) { + this.dispatchException(e); + } + }, + + dispatchException: function(exception) { + (this.options.onException || Prototype.emptyFunction)(this, exception); + Ajax.Responders.dispatch('onException', this, exception); + } +}); + +Ajax.Request.Events = + ['Uninitialized', 'Loading', 'Loaded', 'Interactive', 'Complete']; + + + + + + + + +Ajax.Response = Class.create({ + initialize: function(request){ + this.request = request; + var transport = this.transport = request.transport, + readyState = this.readyState = transport.readyState; + + if ((readyState > 2 && !Prototype.Browser.IE) || readyState == 4) { + this.status = this.getStatus(); + this.statusText = this.getStatusText(); + this.responseText = String.interpret(transport.responseText); + this.headerJSON = this._getHeaderJSON(); + } + + if (readyState == 4) { + var xml = transport.responseXML; + this.responseXML = Object.isUndefined(xml) ? null : xml; + this.responseJSON = this._getResponseJSON(); + } + }, + + status: 0, + + statusText: '', + + getStatus: Ajax.Request.prototype.getStatus, + + getStatusText: function() { + try { + return this.transport.statusText || ''; + } catch (e) { return '' } + }, + + getHeader: Ajax.Request.prototype.getHeader, + + getAllHeaders: function() { + try { + return this.getAllResponseHeaders(); + } catch (e) { return null } + }, + + getResponseHeader: function(name) { + return this.transport.getResponseHeader(name); + }, + + getAllResponseHeaders: function() { + return this.transport.getAllResponseHeaders(); + }, + + _getHeaderJSON: function() { + var json = this.getHeader('X-JSON'); + if (!json) return null; + + try { + json = decodeURIComponent(escape(json)); + } catch(e) { + } + + try { + return json.evalJSON(this.request.options.sanitizeJSON || + !this.request.isSameOrigin()); + } catch (e) { + this.request.dispatchException(e); + } + }, + + _getResponseJSON: function() { + var options = this.request.options; + if (!options.evalJSON || (options.evalJSON != 'force' && + !(this.getHeader('Content-type') || '').include('application/json')) || + this.responseText.blank()) + return null; + try { + return this.responseText.evalJSON(options.sanitizeJSON || + !this.request.isSameOrigin()); + } catch (e) { + this.request.dispatchException(e); + } + } +}); + +Ajax.Updater = Class.create(Ajax.Request, { + initialize: function($super, container, url, options) { + this.container = { + success: (container.success || container), + failure: (container.failure || (container.success ? null : container)) + }; + + options = Object.clone(options); + var onComplete = options.onComplete; + options.onComplete = (function(response, json) { + this.updateContent(response.responseText); + if (Object.isFunction(onComplete)) onComplete(response, json); + }).bind(this); + + $super(url, options); + }, + + updateContent: function(responseText) { + var receiver = this.container[this.success() ? 'success' : 'failure'], + options = this.options; + + if (!options.evalScripts) responseText = responseText.stripScripts(); + + if (receiver = $(receiver)) { + if (options.insertion) { + if (Object.isString(options.insertion)) { + var insertion = { }; insertion[options.insertion] = responseText; + receiver.insert(insertion); + } + else options.insertion(receiver, responseText); + } + else receiver.update(responseText); + } + } +}); + +Ajax.PeriodicalUpdater = Class.create(Ajax.Base, { + initialize: function($super, container, url, options) { + $super(options); + this.onComplete = this.options.onComplete; + + this.frequency = (this.options.frequency || 2); + this.decay = (this.options.decay || 1); + + this.updater = { }; + this.container = container; + this.url = url; + + this.start(); + }, + + start: function() { + this.options.onComplete = this.updateComplete.bind(this); + this.onTimerEvent(); + }, + + stop: function() { + this.updater.options.onComplete = undefined; + clearTimeout(this.timer); + (this.onComplete || Prototype.emptyFunction).apply(this, arguments); + }, + + updateComplete: function(response) { + if (this.options.decay) { + this.decay = (response.responseText == this.lastText ? + this.decay * this.options.decay : 1); + + this.lastText = response.responseText; + } + this.timer = this.onTimerEvent.bind(this).delay(this.decay * this.frequency); + }, + + onTimerEvent: function() { + this.updater = new Ajax.Updater(this.container, this.url, this.options); + } +}); + +(function(GLOBAL) { + + var UNDEFINED; + var SLICE = Array.prototype.slice; + + var DIV = document.createElement('div'); + + + function $(element) { + if (arguments.length > 1) { + for (var i = 0, elements = [], length = arguments.length; i < length; i++) + elements.push($(arguments[i])); + return elements; + } + + if (Object.isString(element)) + element = document.getElementById(element); + return Element.extend(element); + } + + GLOBAL.$ = $; + + + if (!GLOBAL.Node) GLOBAL.Node = {}; + + if (!GLOBAL.Node.ELEMENT_NODE) { + Object.extend(GLOBAL.Node, { + ELEMENT_NODE: 1, + ATTRIBUTE_NODE: 2, + TEXT_NODE: 3, + CDATA_SECTION_NODE: 4, + ENTITY_REFERENCE_NODE: 5, + ENTITY_NODE: 6, + PROCESSING_INSTRUCTION_NODE: 7, + COMMENT_NODE: 8, + DOCUMENT_NODE: 9, + DOCUMENT_TYPE_NODE: 10, + DOCUMENT_FRAGMENT_NODE: 11, + NOTATION_NODE: 12 + }); + } + + var ELEMENT_CACHE = {}; + + function shouldUseCreationCache(tagName, attributes) { + if (tagName === 'select') return false; + if ('type' in attributes) return false; + return true; + } + + var HAS_EXTENDED_CREATE_ELEMENT_SYNTAX = (function(){ + try { + var el = document.createElement(''); + return el.tagName.toLowerCase() === 'input' && el.name === 'x'; + } + catch(err) { + return false; + } + })(); + + + var oldElement = GLOBAL.Element; + function Element(tagName, attributes) { + attributes = attributes || {}; + tagName = tagName.toLowerCase(); + + if (HAS_EXTENDED_CREATE_ELEMENT_SYNTAX && attributes.name) { + tagName = '<' + tagName + ' name="' + attributes.name + '">'; + delete attributes.name; + return Element.writeAttribute(document.createElement(tagName), attributes); + } + + if (!ELEMENT_CACHE[tagName]) + ELEMENT_CACHE[tagName] = Element.extend(document.createElement(tagName)); + + var node = shouldUseCreationCache(tagName, attributes) ? + ELEMENT_CACHE[tagName].cloneNode(false) : document.createElement(tagName); + + return Element.writeAttribute(node, attributes); + } + + GLOBAL.Element = Element; + + Object.extend(GLOBAL.Element, oldElement || {}); + if (oldElement) GLOBAL.Element.prototype = oldElement.prototype; + + Element.Methods = { ByTag: {}, Simulated: {} }; + + var methods = {}; + + var INSPECT_ATTRIBUTES = { id: 'id', className: 'class' }; + function inspect(element) { + element = $(element); + var result = '<' + element.tagName.toLowerCase(); + + var attribute, value; + for (var property in INSPECT_ATTRIBUTES) { + attribute = INSPECT_ATTRIBUTES[property]; + value = (element[property] || '').toString(); + if (value) result += ' ' + attribute + '=' + value.inspect(true); + } + + return result + '>'; + } + + methods.inspect = inspect; + + + function visible(element) { + return $(element).style.display !== 'none'; + } + + function toggle(element, bool) { + element = $(element); + if (Object.isUndefined(bool)) + bool = !Element.visible(element); + Element[bool ? 'show' : 'hide'](element); + + return element; + } + + function hide(element) { + element = $(element); + element.style.display = 'none'; + return element; + } + + function show(element) { + element = $(element); + element.style.display = ''; + return element; + } + + + Object.extend(methods, { + visible: visible, + toggle: toggle, + hide: hide, + show: show + }); + + + function remove(element) { + element = $(element); + element.parentNode.removeChild(element); + return element; + } + + var SELECT_ELEMENT_INNERHTML_BUGGY = (function(){ + var el = document.createElement("select"), + isBuggy = true; + el.innerHTML = ""; + if (el.options && el.options[0]) { + isBuggy = el.options[0].nodeName.toUpperCase() !== "OPTION"; + } + el = null; + return isBuggy; + })(); + + var TABLE_ELEMENT_INNERHTML_BUGGY = (function(){ + try { + var el = document.createElement("table"); + if (el && el.tBodies) { + el.innerHTML = "test"; + var isBuggy = typeof el.tBodies[0] == "undefined"; + el = null; + return isBuggy; + } + } catch (e) { + return true; + } + })(); + + var LINK_ELEMENT_INNERHTML_BUGGY = (function() { + try { + var el = document.createElement('div'); + el.innerHTML = ""; + var isBuggy = (el.childNodes.length === 0); + el = null; + return isBuggy; + } catch(e) { + return true; + } + })(); + + var ANY_INNERHTML_BUGGY = SELECT_ELEMENT_INNERHTML_BUGGY || + TABLE_ELEMENT_INNERHTML_BUGGY || LINK_ELEMENT_INNERHTML_BUGGY; + + var SCRIPT_ELEMENT_REJECTS_TEXTNODE_APPENDING = (function () { + var s = document.createElement("script"), + isBuggy = false; + try { + s.appendChild(document.createTextNode("")); + isBuggy = !s.firstChild || + s.firstChild && s.firstChild.nodeType !== 3; + } catch (e) { + isBuggy = true; + } + s = null; + return isBuggy; + })(); + + function update(element, content) { + element = $(element); + + var descendants = element.getElementsByTagName('*'), + i = descendants.length; + while (i--) purgeElement(descendants[i]); + + if (content && content.toElement) + content = content.toElement(); + + if (Object.isElement(content)) + return element.update().insert(content); + + + content = Object.toHTML(content); + var tagName = element.tagName.toUpperCase(); + + if (tagName === 'SCRIPT' && SCRIPT_ELEMENT_REJECTS_TEXTNODE_APPENDING) { + element.text = content; + return element; + } + + if (ANY_INNERHTML_BUGGY) { + if (tagName in INSERTION_TRANSLATIONS.tags) { + while (element.firstChild) + element.removeChild(element.firstChild); + + var nodes = getContentFromAnonymousElement(tagName, content.stripScripts()); + for (var i = 0, node; node = nodes[i]; i++) + element.appendChild(node); + + } else if (LINK_ELEMENT_INNERHTML_BUGGY && Object.isString(content) && content.indexOf(' -1) { + while (element.firstChild) + element.removeChild(element.firstChild); + + var nodes = getContentFromAnonymousElement(tagName, + content.stripScripts(), true); + + for (var i = 0, node; node = nodes[i]; i++) + element.appendChild(node); + } else { + element.innerHTML = content.stripScripts(); + } + } else { + element.innerHTML = content.stripScripts(); + } + + content.evalScripts.bind(content).defer(); + return element; + } + + function replace(element, content) { + element = $(element); + + if (content && content.toElement) { + content = content.toElement(); + } else if (!Object.isElement(content)) { + content = Object.toHTML(content); + var range = element.ownerDocument.createRange(); + range.selectNode(element); + content.evalScripts.bind(content).defer(); + content = range.createContextualFragment(content.stripScripts()); + } + + element.parentNode.replaceChild(content, element); + return element; + } + + var INSERTION_TRANSLATIONS = { + before: function(element, node) { + element.parentNode.insertBefore(node, element); + }, + top: function(element, node) { + element.insertBefore(node, element.firstChild); + }, + bottom: function(element, node) { + element.appendChild(node); + }, + after: function(element, node) { + element.parentNode.insertBefore(node, element.nextSibling); + }, + + tags: { + TABLE: ['', '
    ', 1], + TBODY: ['', '
    ', 2], + TR: ['', '
    ', 3], + TD: ['
    ', '
    ', 4], + SELECT: ['', 1] + } + }; + + var tags = INSERTION_TRANSLATIONS.tags; + + Object.extend(tags, { + THEAD: tags.TBODY, + TFOOT: tags.TBODY, + TH: tags.TD + }); + + function replace_IE(element, content) { + element = $(element); + if (content && content.toElement) + content = content.toElement(); + if (Object.isElement(content)) { + element.parentNode.replaceChild(content, element); + return element; + } + + content = Object.toHTML(content); + var parent = element.parentNode, tagName = parent.tagName.toUpperCase(); + + if (tagName in INSERTION_TRANSLATIONS.tags) { + var nextSibling = Element.next(element); + var fragments = getContentFromAnonymousElement( + tagName, content.stripScripts()); + + parent.removeChild(element); + + var iterator; + if (nextSibling) + iterator = function(node) { parent.insertBefore(node, nextSibling) }; + else + iterator = function(node) { parent.appendChild(node); } + + fragments.each(iterator); + } else { + element.outerHTML = content.stripScripts(); + } + + content.evalScripts.bind(content).defer(); + return element; + } + + if ('outerHTML' in document.documentElement) + replace = replace_IE; + + function isContent(content) { + if (Object.isUndefined(content) || content === null) return false; + + if (Object.isString(content) || Object.isNumber(content)) return true; + if (Object.isElement(content)) return true; + if (content.toElement || content.toHTML) return true; + + return false; + } + + function insertContentAt(element, content, position) { + position = position.toLowerCase(); + var method = INSERTION_TRANSLATIONS[position]; + + if (content && content.toElement) content = content.toElement(); + if (Object.isElement(content)) { + method(element, content); + return element; + } + + content = Object.toHTML(content); + var tagName = ((position === 'before' || position === 'after') ? + element.parentNode : element).tagName.toUpperCase(); + + var childNodes = getContentFromAnonymousElement(tagName, content.stripScripts()); + + if (position === 'top' || position === 'after') childNodes.reverse(); + + for (var i = 0, node; node = childNodes[i]; i++) + method(element, node); + + content.evalScripts.bind(content).defer(); + } + + function insert(element, insertions) { + element = $(element); + + if (isContent(insertions)) + insertions = { bottom: insertions }; + + for (var position in insertions) + insertContentAt(element, insertions[position], position); + + return element; + } + + function wrap(element, wrapper, attributes) { + element = $(element); + + if (Object.isElement(wrapper)) { + $(wrapper).writeAttribute(attributes || {}); + } else if (Object.isString(wrapper)) { + wrapper = new Element(wrapper, attributes); + } else { + wrapper = new Element('div', wrapper); + } + + if (element.parentNode) + element.parentNode.replaceChild(wrapper, element); + + wrapper.appendChild(element); + + return wrapper; + } + + function cleanWhitespace(element) { + element = $(element); + var node = element.firstChild; + + while (node) { + var nextNode = node.nextSibling; + if (node.nodeType === Node.TEXT_NODE && !/\S/.test(node.nodeValue)) + element.removeChild(node); + node = nextNode; + } + return element; + } + + function empty(element) { + return $(element).innerHTML.blank(); + } + + function getContentFromAnonymousElement(tagName, html, force) { + var t = INSERTION_TRANSLATIONS.tags[tagName], div = DIV; + + var workaround = !!t; + if (!workaround && force) { + workaround = true; + t = ['', '', 0]; + } + + if (workaround) { + div.innerHTML = ' ' + t[0] + html + t[1]; + div.removeChild(div.firstChild); + for (var i = t[2]; i--; ) + div = div.firstChild; + } else { + div.innerHTML = html; + } + + return $A(div.childNodes); + } + + function clone(element, deep) { + if (!(element = $(element))) return; + var clone = element.cloneNode(deep); + if (!HAS_UNIQUE_ID_PROPERTY) { + clone._prototypeUID = UNDEFINED; + if (deep) { + var descendants = Element.select(clone, '*'), + i = descendants.length; + while (i--) + descendants[i]._prototypeUID = UNDEFINED; + } + } + return Element.extend(clone); + } + + function purgeElement(element) { + var uid = getUniqueElementID(element); + if (uid) { + Element.stopObserving(element); + if (!HAS_UNIQUE_ID_PROPERTY) + element._prototypeUID = UNDEFINED; + delete Element.Storage[uid]; + } + } + + function purgeCollection(elements) { + var i = elements.length; + while (i--) + purgeElement(elements[i]); + } + + function purgeCollection_IE(elements) { + var i = elements.length, element, uid; + while (i--) { + element = elements[i]; + uid = getUniqueElementID(element); + delete Element.Storage[uid]; + delete Event.cache[uid]; + } + } + + if (HAS_UNIQUE_ID_PROPERTY) { + purgeCollection = purgeCollection_IE; + } + + + function purge(element) { + if (!(element = $(element))) return; + purgeElement(element); + + var descendants = element.getElementsByTagName('*'), + i = descendants.length; + + while (i--) purgeElement(descendants[i]); + + return null; + } + + Object.extend(methods, { + remove: remove, + update: update, + replace: replace, + insert: insert, + wrap: wrap, + cleanWhitespace: cleanWhitespace, + empty: empty, + clone: clone, + purge: purge + }); + + + + function recursivelyCollect(element, property, maximumLength) { + element = $(element); + maximumLength = maximumLength || -1; + var elements = []; + + while (element = element[property]) { + if (element.nodeType === Node.ELEMENT_NODE) + elements.push(Element.extend(element)); + + if (elements.length === maximumLength) break; + } + + return elements; + } + + + function ancestors(element) { + return recursivelyCollect(element, 'parentNode'); + } + + function descendants(element) { + return Element.select(element, '*'); + } + + function firstDescendant(element) { + element = $(element).firstChild; + while (element && element.nodeType !== Node.ELEMENT_NODE) + element = element.nextSibling; + + return $(element); + } + + function immediateDescendants(element) { + var results = [], child = $(element).firstChild; + + while (child) { + if (child.nodeType === Node.ELEMENT_NODE) + results.push(Element.extend(child)); + + child = child.nextSibling; + } + + return results; + } + + function previousSiblings(element) { + return recursivelyCollect(element, 'previousSibling'); + } + + function nextSiblings(element) { + return recursivelyCollect(element, 'nextSibling'); + } + + function siblings(element) { + element = $(element); + var previous = previousSiblings(element), + next = nextSiblings(element); + return previous.reverse().concat(next); + } + + function match(element, selector) { + element = $(element); + + if (Object.isString(selector)) + return Prototype.Selector.match(element, selector); + + return selector.match(element); + } + + + function _recursivelyFind(element, property, expression, index) { + element = $(element), expression = expression || 0, index = index || 0; + if (Object.isNumber(expression)) { + index = expression, expression = null; + } + + while (element = element[property]) { + if (element.nodeType !== 1) continue; + if (expression && !Prototype.Selector.match(element, expression)) + continue; + if (--index >= 0) continue; + + return Element.extend(element); + } + } + + + function up(element, expression, index) { + element = $(element); + + if (arguments.length === 1) return $(element.parentNode); + return _recursivelyFind(element, 'parentNode', expression, index); + } + + function down(element, expression, index) { + if (arguments.length === 1) return firstDescendant(element); + element = $(element), expression = expression || 0, index = index || 0; + + if (Object.isNumber(expression)) + index = expression, expression = '*'; + + var node = Prototype.Selector.select(expression, element)[index]; + return Element.extend(node); + } + + function previous(element, expression, index) { + return _recursivelyFind(element, 'previousSibling', expression, index); + } + + function next(element, expression, index) { + return _recursivelyFind(element, 'nextSibling', expression, index); + } + + function select(element) { + element = $(element); + var expressions = SLICE.call(arguments, 1).join(', '); + return Prototype.Selector.select(expressions, element); + } + + function adjacent(element) { + element = $(element); + var expressions = SLICE.call(arguments, 1).join(', '); + var siblings = Element.siblings(element), results = []; + for (var i = 0, sibling; sibling = siblings[i]; i++) { + if (Prototype.Selector.match(sibling, expressions)) + results.push(sibling); + } + + return results; + } + + function descendantOf_DOM(element, ancestor) { + element = $(element), ancestor = $(ancestor); + while (element = element.parentNode) + if (element === ancestor) return true; + return false; + } + + function descendantOf_contains(element, ancestor) { + element = $(element), ancestor = $(ancestor); + if (!ancestor.contains) return descendantOf_DOM(element, ancestor); + return ancestor.contains(element) && ancestor !== element; + } + + function descendantOf_compareDocumentPosition(element, ancestor) { + element = $(element), ancestor = $(ancestor); + return (element.compareDocumentPosition(ancestor) & 8) === 8; + } + + var descendantOf; + if (DIV.compareDocumentPosition) { + descendantOf = descendantOf_compareDocumentPosition; + } else if (DIV.contains) { + descendantOf = descendantOf_contains; + } else { + descendantOf = descendantOf_DOM; + } + + + Object.extend(methods, { + recursivelyCollect: recursivelyCollect, + ancestors: ancestors, + descendants: descendants, + firstDescendant: firstDescendant, + immediateDescendants: immediateDescendants, + previousSiblings: previousSiblings, + nextSiblings: nextSiblings, + siblings: siblings, + match: match, + up: up, + down: down, + previous: previous, + next: next, + select: select, + adjacent: adjacent, + descendantOf: descendantOf, + + getElementsBySelector: select, + + childElements: immediateDescendants + }); + + + var idCounter = 1; + function identify(element) { + element = $(element); + var id = Element.readAttribute(element, 'id'); + if (id) return id; + + do { id = 'anonymous_element_' + idCounter++ } while ($(id)); + + Element.writeAttribute(element, 'id', id); + return id; + } + + + function readAttribute(element, name) { + return $(element).getAttribute(name); + } + + function readAttribute_IE(element, name) { + element = $(element); + + var table = ATTRIBUTE_TRANSLATIONS.read; + if (table.values[name]) + return table.values[name](element, name); + + if (table.names[name]) name = table.names[name]; + + if (name.include(':')) { + if (!element.attributes || !element.attributes[name]) return null; + return element.attributes[name].value; + } + + return element.getAttribute(name); + } + + function readAttribute_Opera(element, name) { + if (name === 'title') return element.title; + return element.getAttribute(name); + } + + var PROBLEMATIC_ATTRIBUTE_READING = (function() { + DIV.setAttribute('onclick', []); + var value = DIV.getAttribute('onclick'); + var isFunction = Object.isArray(value); + DIV.removeAttribute('onclick'); + return isFunction; + })(); + + if (PROBLEMATIC_ATTRIBUTE_READING) { + readAttribute = readAttribute_IE; + } else if (Prototype.Browser.Opera) { + readAttribute = readAttribute_Opera; + } + + + function writeAttribute(element, name, value) { + element = $(element); + var attributes = {}, table = ATTRIBUTE_TRANSLATIONS.write; + + if (typeof name === 'object') { + attributes = name; + } else { + attributes[name] = Object.isUndefined(value) ? true : value; + } + + for (var attr in attributes) { + name = table.names[attr] || attr; + value = attributes[attr]; + if (table.values[attr]) + name = table.values[attr](element, value) || name; + if (value === false || value === null) + element.removeAttribute(name); + else if (value === true) + element.setAttribute(name, name); + else element.setAttribute(name, value); + } + + return element; + } + + var PROBLEMATIC_HAS_ATTRIBUTE_WITH_CHECKBOXES = (function () { + if (!HAS_EXTENDED_CREATE_ELEMENT_SYNTAX) { + return false; + } + var checkbox = document.createElement(''); + checkbox.checked = true; + var node = checkbox.getAttributeNode('checked'); + return !node || !node.specified; + })(); + + function hasAttribute(element, attribute) { + attribute = ATTRIBUTE_TRANSLATIONS.has[attribute] || attribute; + var node = $(element).getAttributeNode(attribute); + return !!(node && node.specified); + } + + function hasAttribute_IE(element, attribute) { + if (attribute === 'checked') { + return element.checked; + } + return hasAttribute(element, attribute); + } + + GLOBAL.Element.Methods.Simulated.hasAttribute = + PROBLEMATIC_HAS_ATTRIBUTE_WITH_CHECKBOXES ? + hasAttribute_IE : hasAttribute; + + function classNames(element) { + return new Element.ClassNames(element); + } + + var regExpCache = {}; + function getRegExpForClassName(className) { + if (regExpCache[className]) return regExpCache[className]; + + var re = new RegExp("(^|\\s+)" + className + "(\\s+|$)"); + regExpCache[className] = re; + return re; + } + + function hasClassName(element, className) { + if (!(element = $(element))) return; + + var elementClassName = element.className; + + if (elementClassName.length === 0) return false; + if (elementClassName === className) return true; + + return getRegExpForClassName(className).test(elementClassName); + } + + function addClassName(element, className) { + if (!(element = $(element))) return; + + if (!hasClassName(element, className)) + element.className += (element.className ? ' ' : '') + className; + + return element; + } + + function removeClassName(element, className) { + if (!(element = $(element))) return; + + element.className = element.className.replace( + getRegExpForClassName(className), ' ').strip(); + + return element; + } + + function toggleClassName(element, className, bool) { + if (!(element = $(element))) return; + + if (Object.isUndefined(bool)) + bool = !hasClassName(element, className); + + var method = Element[bool ? 'addClassName' : 'removeClassName']; + return method(element, className); + } + + var ATTRIBUTE_TRANSLATIONS = {}; + + var classProp = 'className', forProp = 'for'; + + DIV.setAttribute(classProp, 'x'); + if (DIV.className !== 'x') { + DIV.setAttribute('class', 'x'); + if (DIV.className === 'x') + classProp = 'class'; + } + + var LABEL = document.createElement('label'); + LABEL.setAttribute(forProp, 'x'); + if (LABEL.htmlFor !== 'x') { + LABEL.setAttribute('htmlFor', 'x'); + if (LABEL.htmlFor === 'x') + forProp = 'htmlFor'; + } + LABEL = null; + + function _getAttr(element, attribute) { + return element.getAttribute(attribute); + } + + function _getAttr2(element, attribute) { + return element.getAttribute(attribute, 2); + } + + function _getAttrNode(element, attribute) { + var node = element.getAttributeNode(attribute); + return node ? node.value : ''; + } + + function _getFlag(element, attribute) { + return $(element).hasAttribute(attribute) ? attribute : null; + } + + DIV.onclick = Prototype.emptyFunction; + var onclickValue = DIV.getAttribute('onclick'); + + var _getEv; + + if (String(onclickValue).indexOf('{') > -1) { + _getEv = function(element, attribute) { + var value = element.getAttribute(attribute); + if (!value) return null; + value = value.toString(); + value = value.split('{')[1]; + value = value.split('}')[0]; + return value.strip(); + }; + } + else if (onclickValue === '') { + _getEv = function(element, attribute) { + var value = element.getAttribute(attribute); + if (!value) return null; + return value.strip(); + }; + } + + ATTRIBUTE_TRANSLATIONS.read = { + names: { + 'class': classProp, + 'className': classProp, + 'for': forProp, + 'htmlFor': forProp + }, + + values: { + style: function(element) { + return element.style.cssText.toLowerCase(); + }, + title: function(element) { + return element.title; + } + } + }; + + ATTRIBUTE_TRANSLATIONS.write = { + names: { + className: 'class', + htmlFor: 'for', + cellpadding: 'cellPadding', + cellspacing: 'cellSpacing' + }, + + values: { + checked: function(element, value) { + element.checked = !!value; + }, + + style: function(element, value) { + element.style.cssText = value ? value : ''; + } + } + }; + + ATTRIBUTE_TRANSLATIONS.has = { names: {} }; + + Object.extend(ATTRIBUTE_TRANSLATIONS.write.names, + ATTRIBUTE_TRANSLATIONS.read.names); + + var CAMEL_CASED_ATTRIBUTE_NAMES = $w('colSpan rowSpan vAlign dateTime ' + + 'accessKey tabIndex encType maxLength readOnly longDesc frameBorder'); + + for (var i = 0, attr; attr = CAMEL_CASED_ATTRIBUTE_NAMES[i]; i++) { + ATTRIBUTE_TRANSLATIONS.write.names[attr.toLowerCase()] = attr; + ATTRIBUTE_TRANSLATIONS.has.names[attr.toLowerCase()] = attr; + } + + Object.extend(ATTRIBUTE_TRANSLATIONS.read.values, { + href: _getAttr2, + src: _getAttr2, + type: _getAttr, + action: _getAttrNode, + disabled: _getFlag, + checked: _getFlag, + readonly: _getFlag, + multiple: _getFlag, + onload: _getEv, + onunload: _getEv, + onclick: _getEv, + ondblclick: _getEv, + onmousedown: _getEv, + onmouseup: _getEv, + onmouseover: _getEv, + onmousemove: _getEv, + onmouseout: _getEv, + onfocus: _getEv, + onblur: _getEv, + onkeypress: _getEv, + onkeydown: _getEv, + onkeyup: _getEv, + onsubmit: _getEv, + onreset: _getEv, + onselect: _getEv, + onchange: _getEv + }); + + + Object.extend(methods, { + identify: identify, + readAttribute: readAttribute, + writeAttribute: writeAttribute, + classNames: classNames, + hasClassName: hasClassName, + addClassName: addClassName, + removeClassName: removeClassName, + toggleClassName: toggleClassName + }); + + + function normalizeStyleName(style) { + if (style === 'float' || style === 'styleFloat') + return 'cssFloat'; + return style.camelize(); + } + + function normalizeStyleName_IE(style) { + if (style === 'float' || style === 'cssFloat') + return 'styleFloat'; + return style.camelize(); + } + + function setStyle(element, styles) { + element = $(element); + var elementStyle = element.style, match; + + if (Object.isString(styles)) { + elementStyle.cssText += ';' + styles; + if (styles.include('opacity')) { + var opacity = styles.match(/opacity:\s*(\d?\.?\d*)/)[1]; + Element.setOpacity(element, opacity); + } + return element; + } + + for (var property in styles) { + if (property === 'opacity') { + Element.setOpacity(element, styles[property]); + } else { + var value = styles[property]; + if (property === 'float' || property === 'cssFloat') { + property = Object.isUndefined(elementStyle.styleFloat) ? + 'cssFloat' : 'styleFloat'; + } + elementStyle[property] = value; + } + } + + return element; + } + + + function getStyle(element, style) { + element = $(element); + style = normalizeStyleName(style); + + var value = element.style[style]; + if (!value || value === 'auto') { + var css = document.defaultView.getComputedStyle(element, null); + value = css ? css[style] : null; + } + + if (style === 'opacity') return value ? parseFloat(value) : 1.0; + return value === 'auto' ? null : value; + } + + function getStyle_Opera(element, style) { + switch (style) { + case 'height': case 'width': + if (!Element.visible(element)) return null; + + var dim = parseInt(getStyle(element, style), 10); + + if (dim !== element['offset' + style.capitalize()]) + return dim + 'px'; + + return Element.measure(element, style); + + default: return getStyle(element, style); + } + } + + function getStyle_IE(element, style) { + element = $(element); + style = normalizeStyleName_IE(style); + + var value = element.style[style]; + if (!value && element.currentStyle) { + value = element.currentStyle[style]; + } + + if (style === 'opacity' && !STANDARD_CSS_OPACITY_SUPPORTED) + return getOpacity_IE(element); + + if (value === 'auto') { + if ((style === 'width' || style === 'height') && Element.visible(element)) + return Element.measure(element, style) + 'px'; + return null; + } + + return value; + } + + function stripAlphaFromFilter_IE(filter) { + return (filter || '').replace(/alpha\([^\)]*\)/gi, ''); + } + + function hasLayout_IE(element) { + if (!element.currentStyle || !element.currentStyle.hasLayout) + element.style.zoom = 1; + return element; + } + + var STANDARD_CSS_OPACITY_SUPPORTED = (function() { + DIV.style.cssText = "opacity:.55"; + return /^0.55/.test(DIV.style.opacity); + })(); + + function setOpacity(element, value) { + element = $(element); + if (value == 1 || value === '') value = ''; + else if (value < 0.00001) value = 0; + element.style.opacity = value; + return element; + } + + function setOpacity_IE(element, value) { + if (STANDARD_CSS_OPACITY_SUPPORTED) + return setOpacity(element, value); + + element = hasLayout_IE($(element)); + var filter = Element.getStyle(element, 'filter'), + style = element.style; + + if (value == 1 || value === '') { + filter = stripAlphaFromFilter_IE(filter); + if (filter) style.filter = filter; + else style.removeAttribute('filter'); + return element; + } + + if (value < 0.00001) value = 0; + + style.filter = stripAlphaFromFilter_IE(filter) + + 'alpha(opacity=' + (value * 100) + ')'; + + return element; + } + + + function getOpacity(element) { + return Element.getStyle(element, 'opacity'); + } + + function getOpacity_IE(element) { + if (STANDARD_CSS_OPACITY_SUPPORTED) + return getOpacity(element); + + var filter = Element.getStyle(element, 'filter'); + if (filter.length === 0) return 1.0; + var match = (filter || '').match(/alpha\(opacity=(.*)\)/); + if (match && match[1]) return parseFloat(match[1]) / 100; + return 1.0; + } + + + Object.extend(methods, { + setStyle: setStyle, + getStyle: getStyle, + setOpacity: setOpacity, + getOpacity: getOpacity + }); + + if ('styleFloat' in DIV.style) { + methods.getStyle = getStyle_IE; + methods.setOpacity = setOpacity_IE; + methods.getOpacity = getOpacity_IE; + } + + var UID = 0; + + GLOBAL.Element.Storage = { UID: 1 }; + + function getUniqueElementID(element) { + if (element === window) return 0; + + if (typeof element._prototypeUID === 'undefined') + element._prototypeUID = Element.Storage.UID++; + return element._prototypeUID; + } + + function getUniqueElementID_IE(element) { + if (element === window) return 0; + if (element == document) return 1; + return element.uniqueID; + } + + var HAS_UNIQUE_ID_PROPERTY = ('uniqueID' in DIV); + if (HAS_UNIQUE_ID_PROPERTY) + getUniqueElementID = getUniqueElementID_IE; + + function getStorage(element) { + if (!(element = $(element))) return; + + var uid = getUniqueElementID(element); + + if (!Element.Storage[uid]) + Element.Storage[uid] = $H(); + + return Element.Storage[uid]; + } + + function store(element, key, value) { + if (!(element = $(element))) return; + var storage = getStorage(element); + if (arguments.length === 2) { + storage.update(key); + } else { + storage.set(key, value); + } + return element; + } + + function retrieve(element, key, defaultValue) { + if (!(element = $(element))) return; + var storage = getStorage(element), value = storage.get(key); + + if (Object.isUndefined(value)) { + storage.set(key, defaultValue); + value = defaultValue; + } + + return value; + } + + + Object.extend(methods, { + getStorage: getStorage, + store: store, + retrieve: retrieve + }); + + + var Methods = {}, ByTag = Element.Methods.ByTag, + F = Prototype.BrowserFeatures; + + if (!F.ElementExtensions && ('__proto__' in DIV)) { + GLOBAL.HTMLElement = {}; + GLOBAL.HTMLElement.prototype = DIV['__proto__']; + F.ElementExtensions = true; + } + + function checkElementPrototypeDeficiency(tagName) { + if (typeof window.Element === 'undefined') return false; + if (!HAS_EXTENDED_CREATE_ELEMENT_SYNTAX) return false; + var proto = window.Element.prototype; + if (proto) { + var id = '_' + (Math.random() + '').slice(2), + el = document.createElement(tagName); + proto[id] = 'x'; + var isBuggy = (el[id] !== 'x'); + delete proto[id]; + el = null; + return isBuggy; + } + + return false; + } + + var HTMLOBJECTELEMENT_PROTOTYPE_BUGGY = + checkElementPrototypeDeficiency('object'); + + function extendElementWith(element, methods) { + for (var property in methods) { + var value = methods[property]; + if (Object.isFunction(value) && !(property in element)) + element[property] = value.methodize(); + } + } + + var EXTENDED = {}; + function elementIsExtended(element) { + var uid = getUniqueElementID(element); + return (uid in EXTENDED); + } + + function extend(element) { + if (!element || elementIsExtended(element)) return element; + if (element.nodeType !== Node.ELEMENT_NODE || element == window) + return element; + + var methods = Object.clone(Methods), + tagName = element.tagName.toUpperCase(); + + if (ByTag[tagName]) Object.extend(methods, ByTag[tagName]); + + extendElementWith(element, methods); + EXTENDED[getUniqueElementID(element)] = true; + return element; + } + + function extend_IE8(element) { + if (!element || elementIsExtended(element)) return element; + + var t = element.tagName; + if (t && (/^(?:object|applet|embed)$/i.test(t))) { + extendElementWith(element, Element.Methods); + extendElementWith(element, Element.Methods.Simulated); + extendElementWith(element, Element.Methods.ByTag[t.toUpperCase()]); + } + + return element; + } + + if (F.SpecificElementExtensions) { + extend = HTMLOBJECTELEMENT_PROTOTYPE_BUGGY ? extend_IE8 : Prototype.K; + } + + function addMethodsToTagName(tagName, methods) { + tagName = tagName.toUpperCase(); + if (!ByTag[tagName]) ByTag[tagName] = {}; + Object.extend(ByTag[tagName], methods); + } + + function mergeMethods(destination, methods, onlyIfAbsent) { + if (Object.isUndefined(onlyIfAbsent)) onlyIfAbsent = false; + for (var property in methods) { + var value = methods[property]; + if (!Object.isFunction(value)) continue; + if (!onlyIfAbsent || !(property in destination)) + destination[property] = value.methodize(); + } + } + + function findDOMClass(tagName) { + var klass; + var trans = { + "OPTGROUP": "OptGroup", "TEXTAREA": "TextArea", "P": "Paragraph", + "FIELDSET": "FieldSet", "UL": "UList", "OL": "OList", "DL": "DList", + "DIR": "Directory", "H1": "Heading", "H2": "Heading", "H3": "Heading", + "H4": "Heading", "H5": "Heading", "H6": "Heading", "Q": "Quote", + "INS": "Mod", "DEL": "Mod", "A": "Anchor", "IMG": "Image", "CAPTION": + "TableCaption", "COL": "TableCol", "COLGROUP": "TableCol", "THEAD": + "TableSection", "TFOOT": "TableSection", "TBODY": "TableSection", "TR": + "TableRow", "TH": "TableCell", "TD": "TableCell", "FRAMESET": + "FrameSet", "IFRAME": "IFrame" + }; + if (trans[tagName]) klass = 'HTML' + trans[tagName] + 'Element'; + if (window[klass]) return window[klass]; + klass = 'HTML' + tagName + 'Element'; + if (window[klass]) return window[klass]; + klass = 'HTML' + tagName.capitalize() + 'Element'; + if (window[klass]) return window[klass]; + + var element = document.createElement(tagName), + proto = element['__proto__'] || element.constructor.prototype; + + element = null; + return proto; + } + + function addMethods(methods) { + if (arguments.length === 0) addFormMethods(); + + if (arguments.length === 2) { + var tagName = methods; + methods = arguments[1]; + } + + if (!tagName) { + Object.extend(Element.Methods, methods || {}); + } else { + if (Object.isArray(tagName)) { + for (var i = 0, tag; tag = tagName[i]; i++) + addMethodsToTagName(tag, methods); + } else { + addMethodsToTagName(tagName, methods); + } + } + + var ELEMENT_PROTOTYPE = window.HTMLElement ? HTMLElement.prototype : + Element.prototype; + + if (F.ElementExtensions) { + mergeMethods(ELEMENT_PROTOTYPE, Element.Methods); + mergeMethods(ELEMENT_PROTOTYPE, Element.Methods.Simulated, true); + } + + if (F.SpecificElementExtensions) { + for (var tag in Element.Methods.ByTag) { + var klass = findDOMClass(tag); + if (Object.isUndefined(klass)) continue; + mergeMethods(klass.prototype, ByTag[tag]); + } + } + + Object.extend(Element, Element.Methods); + Object.extend(Element, Element.Methods.Simulated); + delete Element.ByTag; + delete Element.Simulated; + + Element.extend.refresh(); + + ELEMENT_CACHE = {}; + } + + Object.extend(GLOBAL.Element, { + extend: extend, + addMethods: addMethods + }); + + if (extend === Prototype.K) { + GLOBAL.Element.extend.refresh = Prototype.emptyFunction; + } else { + GLOBAL.Element.extend.refresh = function() { + if (Prototype.BrowserFeatures.ElementExtensions) return; + Object.extend(Methods, Element.Methods); + Object.extend(Methods, Element.Methods.Simulated); + + EXTENDED = {}; + }; + } + + function addFormMethods() { + Object.extend(Form, Form.Methods); + Object.extend(Form.Element, Form.Element.Methods); + Object.extend(Element.Methods.ByTag, { + "FORM": Object.clone(Form.Methods), + "INPUT": Object.clone(Form.Element.Methods), + "SELECT": Object.clone(Form.Element.Methods), + "TEXTAREA": Object.clone(Form.Element.Methods), + "BUTTON": Object.clone(Form.Element.Methods) + }); + } + + Element.addMethods(methods); + + function destroyCache_IE() { + DIV = null; + ELEMENT_CACHE = null; + } + + if (window.attachEvent) + window.attachEvent('onunload', destroyCache_IE); + +})(this); +(function() { + + function toDecimal(pctString) { + var match = pctString.match(/^(\d+)%?$/i); + if (!match) return null; + return (Number(match[1]) / 100); + } + + function getRawStyle(element, style) { + element = $(element); + + var value = element.style[style]; + if (!value || value === 'auto') { + var css = document.defaultView.getComputedStyle(element, null); + value = css ? css[style] : null; + } + + if (style === 'opacity') return value ? parseFloat(value) : 1.0; + return value === 'auto' ? null : value; + } + + function getRawStyle_IE(element, style) { + var value = element.style[style]; + if (!value && element.currentStyle) { + value = element.currentStyle[style]; + } + return value; + } + + function getContentWidth(element, context) { + var boxWidth = element.offsetWidth; + + var bl = getPixelValue(element, 'borderLeftWidth', context) || 0; + var br = getPixelValue(element, 'borderRightWidth', context) || 0; + var pl = getPixelValue(element, 'paddingLeft', context) || 0; + var pr = getPixelValue(element, 'paddingRight', context) || 0; + + return boxWidth - bl - br - pl - pr; + } + + if ('currentStyle' in document.documentElement) { + getRawStyle = getRawStyle_IE; + } + + + function getPixelValue(value, property, context) { + var element = null; + if (Object.isElement(value)) { + element = value; + value = getRawStyle(element, property); + } + + if (value === null || Object.isUndefined(value)) { + return null; + } + + if ((/^(?:-)?\d+(\.\d+)?(px)?$/i).test(value)) { + return window.parseFloat(value); + } + + var isPercentage = value.include('%'), isViewport = (context === document.viewport); + + if (/\d/.test(value) && element && element.runtimeStyle && !(isPercentage && isViewport)) { + var style = element.style.left, rStyle = element.runtimeStyle.left; + element.runtimeStyle.left = element.currentStyle.left; + element.style.left = value || 0; + value = element.style.pixelLeft; + element.style.left = style; + element.runtimeStyle.left = rStyle; + + return value; + } + + if (element && isPercentage) { + context = context || element.parentNode; + var decimal = toDecimal(value), whole = null; + + var isHorizontal = property.include('left') || property.include('right') || + property.include('width'); + + var isVertical = property.include('top') || property.include('bottom') || + property.include('height'); + + if (context === document.viewport) { + if (isHorizontal) { + whole = document.viewport.getWidth(); + } else if (isVertical) { + whole = document.viewport.getHeight(); + } + } else { + if (isHorizontal) { + whole = $(context).measure('width'); + } else if (isVertical) { + whole = $(context).measure('height'); + } + } + + return (whole === null) ? 0 : whole * decimal; + } + + return 0; + } + + function toCSSPixels(number) { + if (Object.isString(number) && number.endsWith('px')) + return number; + return number + 'px'; + } + + function isDisplayed(element) { + while (element && element.parentNode) { + var display = element.getStyle('display'); + if (display === 'none') { + return false; + } + element = $(element.parentNode); + } + return true; + } + + var hasLayout = Prototype.K; + if ('currentStyle' in document.documentElement) { + hasLayout = function(element) { + if (!element.currentStyle.hasLayout) { + element.style.zoom = 1; + } + return element; + }; + } + + function cssNameFor(key) { + if (key.include('border')) key = key + '-width'; + return key.camelize(); + } + + Element.Layout = Class.create(Hash, { + initialize: function($super, element, preCompute) { + $super(); + this.element = $(element); + + Element.Layout.PROPERTIES.each( function(property) { + this._set(property, null); + }, this); + + if (preCompute) { + this._preComputing = true; + this._begin(); + Element.Layout.PROPERTIES.each( this._compute, this ); + this._end(); + this._preComputing = false; + } + }, + + _set: function(property, value) { + return Hash.prototype.set.call(this, property, value); + }, + + set: function(property, value) { + throw "Properties of Element.Layout are read-only."; + }, + + get: function($super, property) { + var value = $super(property); + return value === null ? this._compute(property) : value; + }, + + _begin: function() { + if (this._isPrepared()) return; + + var element = this.element; + if (isDisplayed(element)) { + this._setPrepared(true); + return; + } + + + var originalStyles = { + position: element.style.position || '', + width: element.style.width || '', + visibility: element.style.visibility || '', + display: element.style.display || '' + }; + + element.store('prototype_original_styles', originalStyles); + + var position = getRawStyle(element, 'position'), width = element.offsetWidth; + + if (width === 0 || width === null) { + element.style.display = 'block'; + width = element.offsetWidth; + } + + var context = (position === 'fixed') ? document.viewport : + element.parentNode; + + var tempStyles = { + visibility: 'hidden', + display: 'block' + }; + + if (position !== 'fixed') tempStyles.position = 'absolute'; + + element.setStyle(tempStyles); + + var positionedWidth = element.offsetWidth, newWidth; + if (width && (positionedWidth === width)) { + newWidth = getContentWidth(element, context); + } else if (position === 'absolute' || position === 'fixed') { + newWidth = getContentWidth(element, context); + } else { + var parent = element.parentNode, pLayout = $(parent).getLayout(); + + newWidth = pLayout.get('width') - + this.get('margin-left') - + this.get('border-left') - + this.get('padding-left') - + this.get('padding-right') - + this.get('border-right') - + this.get('margin-right'); + } + + element.setStyle({ width: newWidth + 'px' }); + + this._setPrepared(true); + }, + + _end: function() { + var element = this.element; + var originalStyles = element.retrieve('prototype_original_styles'); + element.store('prototype_original_styles', null); + element.setStyle(originalStyles); + this._setPrepared(false); + }, + + _compute: function(property) { + var COMPUTATIONS = Element.Layout.COMPUTATIONS; + if (!(property in COMPUTATIONS)) { + throw "Property not found."; + } + + return this._set(property, COMPUTATIONS[property].call(this, this.element)); + }, + + _isPrepared: function() { + return this.element.retrieve('prototype_element_layout_prepared', false); + }, + + _setPrepared: function(bool) { + return this.element.store('prototype_element_layout_prepared', bool); + }, + + toObject: function() { + var args = $A(arguments); + var keys = (args.length === 0) ? Element.Layout.PROPERTIES : + args.join(' ').split(' '); + var obj = {}; + keys.each( function(key) { + if (!Element.Layout.PROPERTIES.include(key)) return; + var value = this.get(key); + if (value != null) obj[key] = value; + }, this); + return obj; + }, + + toHash: function() { + var obj = this.toObject.apply(this, arguments); + return new Hash(obj); + }, + + toCSS: function() { + var args = $A(arguments); + var keys = (args.length === 0) ? Element.Layout.PROPERTIES : + args.join(' ').split(' '); + var css = {}; + + keys.each( function(key) { + if (!Element.Layout.PROPERTIES.include(key)) return; + if (Element.Layout.COMPOSITE_PROPERTIES.include(key)) return; + + var value = this.get(key); + if (value != null) css[cssNameFor(key)] = value + 'px'; + }, this); + return css; + }, + + inspect: function() { + return "#"; + } + }); + + Object.extend(Element.Layout, { + PROPERTIES: $w('height width top left right bottom border-left border-right border-top border-bottom padding-left padding-right padding-top padding-bottom margin-top margin-bottom margin-left margin-right padding-box-width padding-box-height border-box-width border-box-height margin-box-width margin-box-height'), + + COMPOSITE_PROPERTIES: $w('padding-box-width padding-box-height margin-box-width margin-box-height border-box-width border-box-height'), + + COMPUTATIONS: { + 'height': function(element) { + if (!this._preComputing) this._begin(); + + var bHeight = this.get('border-box-height'); + if (bHeight <= 0) { + if (!this._preComputing) this._end(); + return 0; + } + + var bTop = this.get('border-top'), + bBottom = this.get('border-bottom'); + + var pTop = this.get('padding-top'), + pBottom = this.get('padding-bottom'); + + if (!this._preComputing) this._end(); + + return bHeight - bTop - bBottom - pTop - pBottom; + }, + + 'width': function(element) { + if (!this._preComputing) this._begin(); + + var bWidth = this.get('border-box-width'); + if (bWidth <= 0) { + if (!this._preComputing) this._end(); + return 0; + } + + var bLeft = this.get('border-left'), + bRight = this.get('border-right'); + + var pLeft = this.get('padding-left'), + pRight = this.get('padding-right'); + + if (!this._preComputing) this._end(); + return bWidth - bLeft - bRight - pLeft - pRight; + }, + + 'padding-box-height': function(element) { + var height = this.get('height'), + pTop = this.get('padding-top'), + pBottom = this.get('padding-bottom'); + + return height + pTop + pBottom; + }, + + 'padding-box-width': function(element) { + var width = this.get('width'), + pLeft = this.get('padding-left'), + pRight = this.get('padding-right'); + + return width + pLeft + pRight; + }, + + 'border-box-height': function(element) { + if (!this._preComputing) this._begin(); + var height = element.offsetHeight; + if (!this._preComputing) this._end(); + return height; + }, + + 'border-box-width': function(element) { + if (!this._preComputing) this._begin(); + var width = element.offsetWidth; + if (!this._preComputing) this._end(); + return width; + }, + + 'margin-box-height': function(element) { + var bHeight = this.get('border-box-height'), + mTop = this.get('margin-top'), + mBottom = this.get('margin-bottom'); + + if (bHeight <= 0) return 0; + + return bHeight + mTop + mBottom; + }, + + 'margin-box-width': function(element) { + var bWidth = this.get('border-box-width'), + mLeft = this.get('margin-left'), + mRight = this.get('margin-right'); + + if (bWidth <= 0) return 0; + + return bWidth + mLeft + mRight; + }, + + 'top': function(element) { + var offset = element.positionedOffset(); + return offset.top; + }, + + 'bottom': function(element) { + var offset = element.positionedOffset(), + parent = element.getOffsetParent(), + pHeight = parent.measure('height'); + + var mHeight = this.get('border-box-height'); + + return pHeight - mHeight - offset.top; + }, + + 'left': function(element) { + var offset = element.positionedOffset(); + return offset.left; + }, + + 'right': function(element) { + var offset = element.positionedOffset(), + parent = element.getOffsetParent(), + pWidth = parent.measure('width'); + + var mWidth = this.get('border-box-width'); + + return pWidth - mWidth - offset.left; + }, + + 'padding-top': function(element) { + return getPixelValue(element, 'paddingTop'); + }, + + 'padding-bottom': function(element) { + return getPixelValue(element, 'paddingBottom'); + }, + + 'padding-left': function(element) { + return getPixelValue(element, 'paddingLeft'); + }, + + 'padding-right': function(element) { + return getPixelValue(element, 'paddingRight'); + }, + + 'border-top': function(element) { + return getPixelValue(element, 'borderTopWidth'); + }, + + 'border-bottom': function(element) { + return getPixelValue(element, 'borderBottomWidth'); + }, + + 'border-left': function(element) { + return getPixelValue(element, 'borderLeftWidth'); + }, + + 'border-right': function(element) { + return getPixelValue(element, 'borderRightWidth'); + }, + + 'margin-top': function(element) { + return getPixelValue(element, 'marginTop'); + }, + + 'margin-bottom': function(element) { + return getPixelValue(element, 'marginBottom'); + }, + + 'margin-left': function(element) { + return getPixelValue(element, 'marginLeft'); + }, + + 'margin-right': function(element) { + return getPixelValue(element, 'marginRight'); + } + } + }); + + if ('getBoundingClientRect' in document.documentElement) { + Object.extend(Element.Layout.COMPUTATIONS, { + 'right': function(element) { + var parent = hasLayout(element.getOffsetParent()); + var rect = element.getBoundingClientRect(), + pRect = parent.getBoundingClientRect(); + + return (pRect.right - rect.right).round(); + }, + + 'bottom': function(element) { + var parent = hasLayout(element.getOffsetParent()); + var rect = element.getBoundingClientRect(), + pRect = parent.getBoundingClientRect(); + + return (pRect.bottom - rect.bottom).round(); + } + }); + } + + Element.Offset = Class.create({ + initialize: function(left, top) { + this.left = left.round(); + this.top = top.round(); + + this[0] = this.left; + this[1] = this.top; + }, + + relativeTo: function(offset) { + return new Element.Offset( + this.left - offset.left, + this.top - offset.top + ); + }, + + inspect: function() { + return "#".interpolate(this); + }, + + toString: function() { + return "[#{left}, #{top}]".interpolate(this); + }, + + toArray: function() { + return [this.left, this.top]; + } + }); + + function getLayout(element, preCompute) { + return new Element.Layout(element, preCompute); + } + + function measure(element, property) { + return $(element).getLayout().get(property); + } + + function getHeight(element) { + return Element.getDimensions(element).height; + } + + function getWidth(element) { + return Element.getDimensions(element).width; + } + + function getDimensions(element) { + element = $(element); + var display = Element.getStyle(element, 'display'); + + if (display && display !== 'none') { + return { width: element.offsetWidth, height: element.offsetHeight }; + } + + var style = element.style; + var originalStyles = { + visibility: style.visibility, + position: style.position, + display: style.display + }; + + var newStyles = { + visibility: 'hidden', + display: 'block' + }; + + if (originalStyles.position !== 'fixed') + newStyles.position = 'absolute'; + + Element.setStyle(element, newStyles); + + var dimensions = { + width: element.offsetWidth, + height: element.offsetHeight + }; + + Element.setStyle(element, originalStyles); + + return dimensions; + } + + function getOffsetParent(element) { + element = $(element); + + if (isDocument(element) || isDetached(element) || isBody(element) || isHtml(element)) + return $(document.body); + + var isInline = (Element.getStyle(element, 'display') === 'inline'); + if (!isInline && element.offsetParent) return $(element.offsetParent); + + while ((element = element.parentNode) && element !== document.body) { + if (Element.getStyle(element, 'position') !== 'static') { + return isHtml(element) ? $(document.body) : $(element); + } + } + + return $(document.body); + } + + + function cumulativeOffset(element) { + element = $(element); + var valueT = 0, valueL = 0; + if (element.parentNode) { + do { + valueT += element.offsetTop || 0; + valueL += element.offsetLeft || 0; + element = element.offsetParent; + } while (element); + } + return new Element.Offset(valueL, valueT); + } + + function positionedOffset(element) { + element = $(element); + + var layout = element.getLayout(); + + var valueT = 0, valueL = 0; + do { + valueT += element.offsetTop || 0; + valueL += element.offsetLeft || 0; + element = element.offsetParent; + if (element) { + if (isBody(element)) break; + var p = Element.getStyle(element, 'position'); + if (p !== 'static') break; + } + } while (element); + + valueL -= layout.get('margin-top'); + valueT -= layout.get('margin-left'); + + return new Element.Offset(valueL, valueT); + } + + function cumulativeScrollOffset(element) { + var valueT = 0, valueL = 0; + do { + if (element === document.body) { + var bodyScrollNode = document.documentElement || document.body.parentNode || document.body; + valueT += !Object.isUndefined(window.pageYOffset) ? window.pageYOffset : bodyScrollNode.scrollTop || 0; + valueL += !Object.isUndefined(window.pageXOffset) ? window.pageXOffset : bodyScrollNode.scrollLeft || 0; + break; + } else { + valueT += element.scrollTop || 0; + valueL += element.scrollLeft || 0; + element = element.parentNode; + } + } while (element); + return new Element.Offset(valueL, valueT); + } + + function viewportOffset(forElement) { + var valueT = 0, valueL = 0, docBody = document.body; + + forElement = $(forElement); + var element = forElement; + do { + valueT += element.offsetTop || 0; + valueL += element.offsetLeft || 0; + if (element.offsetParent == docBody && + Element.getStyle(element, 'position') == 'absolute') break; + } while (element = element.offsetParent); + + element = forElement; + do { + if (element != docBody) { + valueT -= element.scrollTop || 0; + valueL -= element.scrollLeft || 0; + } + } while (element = element.parentNode); + return new Element.Offset(valueL, valueT); + } + + function absolutize(element) { + element = $(element); + + if (Element.getStyle(element, 'position') === 'absolute') { + return element; + } + + var offsetParent = getOffsetParent(element); + var eOffset = element.viewportOffset(), + pOffset = offsetParent.viewportOffset(); + + var offset = eOffset.relativeTo(pOffset); + var layout = element.getLayout(); + + element.store('prototype_absolutize_original_styles', { + position: element.getStyle('position'), + left: element.getStyle('left'), + top: element.getStyle('top'), + width: element.getStyle('width'), + height: element.getStyle('height') + }); + + element.setStyle({ + position: 'absolute', + top: offset.top + 'px', + left: offset.left + 'px', + width: layout.get('width') + 'px', + height: layout.get('height') + 'px' + }); + + return element; + } + + function relativize(element) { + element = $(element); + if (Element.getStyle(element, 'position') === 'relative') { + return element; + } + + var originalStyles = + element.retrieve('prototype_absolutize_original_styles'); + + if (originalStyles) element.setStyle(originalStyles); + return element; + } + + + function scrollTo(element) { + element = $(element); + var pos = Element.cumulativeOffset(element); + window.scrollTo(pos.left, pos.top); + return element; + } + + + function makePositioned(element) { + element = $(element); + var position = Element.getStyle(element, 'position'), styles = {}; + if (position === 'static' || !position) { + styles.position = 'relative'; + if (Prototype.Browser.Opera) { + styles.top = 0; + styles.left = 0; + } + Element.setStyle(element, styles); + Element.store(element, 'prototype_made_positioned', true); + } + return element; + } + + function undoPositioned(element) { + element = $(element); + var storage = Element.getStorage(element), + madePositioned = storage.get('prototype_made_positioned'); + + if (madePositioned) { + storage.unset('prototype_made_positioned'); + Element.setStyle(element, { + position: '', + top: '', + bottom: '', + left: '', + right: '' + }); + } + return element; + } + + function makeClipping(element) { + element = $(element); + + var storage = Element.getStorage(element), + madeClipping = storage.get('prototype_made_clipping'); + + if (Object.isUndefined(madeClipping)) { + var overflow = Element.getStyle(element, 'overflow'); + storage.set('prototype_made_clipping', overflow); + if (overflow !== 'hidden') + element.style.overflow = 'hidden'; + } + + return element; + } + + function undoClipping(element) { + element = $(element); + var storage = Element.getStorage(element), + overflow = storage.get('prototype_made_clipping'); + + if (!Object.isUndefined(overflow)) { + storage.unset('prototype_made_clipping'); + element.style.overflow = overflow || ''; + } + + return element; + } + + function clonePosition(element, source, options) { + options = Object.extend({ + setLeft: true, + setTop: true, + setWidth: true, + setHeight: true, + offsetTop: 0, + offsetLeft: 0 + }, options || {}); + + source = $(source); + element = $(element); + var p, delta, layout, styles = {}; + + if (options.setLeft || options.setTop) { + p = Element.viewportOffset(source); + delta = [0, 0]; + if (Element.getStyle(element, 'position') === 'absolute') { + var parent = Element.getOffsetParent(element); + if (parent !== document.body) delta = Element.viewportOffset(parent); + } + } + + if (options.setWidth || options.setHeight) { + layout = Element.getLayout(source); + } + + if (options.setLeft) + styles.left = (p[0] - delta[0] + options.offsetLeft) + 'px'; + if (options.setTop) + styles.top = (p[1] - delta[1] + options.offsetTop) + 'px'; + + if (options.setWidth) + styles.width = layout.get('border-box-width') + 'px'; + if (options.setHeight) + styles.height = layout.get('border-box-height') + 'px'; + + return Element.setStyle(element, styles); + } + + + if (Prototype.Browser.IE) { + getOffsetParent = getOffsetParent.wrap( + function(proceed, element) { + element = $(element); + + if (isDocument(element) || isDetached(element) || isBody(element) || isHtml(element)) + return $(document.body); + + var position = element.getStyle('position'); + if (position !== 'static') return proceed(element); + + element.setStyle({ position: 'relative' }); + var value = proceed(element); + element.setStyle({ position: position }); + return value; + } + ); + + positionedOffset = positionedOffset.wrap(function(proceed, element) { + element = $(element); + if (!element.parentNode) return new Element.Offset(0, 0); + var position = element.getStyle('position'); + if (position !== 'static') return proceed(element); + + var offsetParent = element.getOffsetParent(); + if (offsetParent && offsetParent.getStyle('position') === 'fixed') + hasLayout(offsetParent); + + element.setStyle({ position: 'relative' }); + var value = proceed(element); + element.setStyle({ position: position }); + return value; + }); + } else if (Prototype.Browser.Webkit) { + cumulativeOffset = function(element) { + element = $(element); + var valueT = 0, valueL = 0; + do { + valueT += element.offsetTop || 0; + valueL += element.offsetLeft || 0; + if (element.offsetParent == document.body) { + if (Element.getStyle(element, 'position') == 'absolute') break; + } + + element = element.offsetParent; + } while (element); + + return new Element.Offset(valueL, valueT); + }; + } + + + Element.addMethods({ + getLayout: getLayout, + measure: measure, + getWidth: getWidth, + getHeight: getHeight, + getDimensions: getDimensions, + getOffsetParent: getOffsetParent, + cumulativeOffset: cumulativeOffset, + positionedOffset: positionedOffset, + cumulativeScrollOffset: cumulativeScrollOffset, + viewportOffset: viewportOffset, + absolutize: absolutize, + relativize: relativize, + scrollTo: scrollTo, + makePositioned: makePositioned, + undoPositioned: undoPositioned, + makeClipping: makeClipping, + undoClipping: undoClipping, + clonePosition: clonePosition + }); + + function isBody(element) { + return element.nodeName.toUpperCase() === 'BODY'; + } + + function isHtml(element) { + return element.nodeName.toUpperCase() === 'HTML'; + } + + function isDocument(element) { + return element.nodeType === Node.DOCUMENT_NODE; + } + + function isDetached(element) { + return element !== document.body && + !Element.descendantOf(element, document.body); + } + + if ('getBoundingClientRect' in document.documentElement) { + Element.addMethods({ + viewportOffset: function(element) { + element = $(element); + if (isDetached(element)) return new Element.Offset(0, 0); + + var rect = element.getBoundingClientRect(), + docEl = document.documentElement; + return new Element.Offset(rect.left - docEl.clientLeft, + rect.top - docEl.clientTop); + } + }); + } + + +})(); + +(function() { + + var IS_OLD_OPERA = Prototype.Browser.Opera && + (window.parseFloat(window.opera.version()) < 9.5); + var ROOT = null; + function getRootElement() { + if (ROOT) return ROOT; + ROOT = IS_OLD_OPERA ? document.body : document.documentElement; + return ROOT; + } + + function getDimensions() { + return { width: this.getWidth(), height: this.getHeight() }; + } + + function getWidth() { + return getRootElement().clientWidth; + } + + function getHeight() { + return getRootElement().clientHeight; + } + + function getScrollOffsets() { + var x = window.pageXOffset || document.documentElement.scrollLeft || + document.body.scrollLeft; + var y = window.pageYOffset || document.documentElement.scrollTop || + document.body.scrollTop; + + return new Element.Offset(x, y); + } + + document.viewport = { + getDimensions: getDimensions, + getWidth: getWidth, + getHeight: getHeight, + getScrollOffsets: getScrollOffsets + }; + +})(); +window.$$ = function() { + var expression = $A(arguments).join(', '); + return Prototype.Selector.select(expression, document); +}; + +Prototype.Selector = (function() { + + function select() { + throw new Error('Method "Prototype.Selector.select" must be defined.'); + } + + function match() { + throw new Error('Method "Prototype.Selector.match" must be defined.'); + } + + function find(elements, expression, index) { + index = index || 0; + var match = Prototype.Selector.match, length = elements.length, matchIndex = 0, i; + + for (i = 0; i < length; i++) { + if (match(elements[i], expression) && index == matchIndex++) { + return Element.extend(elements[i]); + } + } + } + + function extendElements(elements) { + for (var i = 0, length = elements.length; i < length; i++) { + Element.extend(elements[i]); + } + return elements; + } + + + var K = Prototype.K; + + return { + select: select, + match: match, + find: find, + extendElements: (Element.extend === K) ? K : extendElements, + extendElement: Element.extend + }; +})(); +Prototype._original_property = window.Sizzle; +/*! + * Sizzle CSS Selector Engine v@VERSION + * http://sizzlejs.com/ + * + * Copyright 2013 jQuery Foundation, Inc. and other contributors + * Released under the MIT license + * http://jquery.org/license + * + * Date: @DATE + */ +(function( window ) { + +var i, + support, + Expr, + getText, + isXML, + compile, + select, + outermostContext, + sortInput, + hasDuplicate, + + setDocument, + document, + docElem, + documentIsHTML, + rbuggyQSA, + rbuggyMatches, + matches, + contains, + + expando = "sizzle" + -(new Date()), + preferredDoc = window.document, + dirruns = 0, + done = 0, + classCache = createCache(), + tokenCache = createCache(), + compilerCache = createCache(), + sortOrder = function( a, b ) { + if ( a === b ) { + hasDuplicate = true; + } + return 0; + }, + + strundefined = typeof undefined, + MAX_NEGATIVE = 1 << 31, + + hasOwn = ({}).hasOwnProperty, + arr = [], + pop = arr.pop, + push_native = arr.push, + push = arr.push, + slice = arr.slice, + indexOf = arr.indexOf || function( elem ) { + var i = 0, + len = this.length; + for ( ; i < len; i++ ) { + if ( this[i] === elem ) { + return i; + } + } + return -1; + }, + + booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped", + + + whitespace = "[\\x20\\t\\r\\n\\f]", + characterEncoding = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+", + + identifier = characterEncoding.replace( "w", "w#" ), + + attributes = "\\[" + whitespace + "*(" + characterEncoding + ")" + whitespace + + "*(?:([*^$|!~]?=)" + whitespace + "*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|(" + identifier + ")|)|)" + whitespace + "*\\]", + + pseudos = ":(" + characterEncoding + ")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|" + attributes.replace( 3, 8 ) + ")*)|.*)\\)|)", + + rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ), + + rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), + rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ), + + rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]", "g" ), + + rpseudo = new RegExp( pseudos ), + ridentifier = new RegExp( "^" + identifier + "$" ), + + matchExpr = { + "ID": new RegExp( "^#(" + characterEncoding + ")" ), + "CLASS": new RegExp( "^\\.(" + characterEncoding + ")" ), + "TAG": new RegExp( "^(" + characterEncoding.replace( "w", "w*" ) + ")" ), + "ATTR": new RegExp( "^" + attributes ), + "PSEUDO": new RegExp( "^" + pseudos ), + "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace + + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace + + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), + "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), + "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + + whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) + }, + + rinputs = /^(?:input|select|textarea|button)$/i, + rheader = /^h\d$/i, + + rnative = /^[^{]+\{\s*\[native \w/, + + rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, + + rsibling = /[+~]/, + rescape = /'|\\/g, + + runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ), + funescape = function( _, escaped, escapedWhitespace ) { + var high = "0x" + escaped - 0x10000; + return high !== high || escapedWhitespace ? + escaped : + high < 0 ? + String.fromCharCode( high + 0x10000 ) : + String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); + }; + +try { + push.apply( + (arr = slice.call( preferredDoc.childNodes )), + preferredDoc.childNodes + ); + arr[ preferredDoc.childNodes.length ].nodeType; +} catch ( e ) { + push = { apply: arr.length ? + + function( target, els ) { + push_native.apply( target, slice.call(els) ); + } : + + function( target, els ) { + var j = target.length, + i = 0; + while ( (target[j++] = els[i++]) ) {} + target.length = j - 1; + } + }; +} + +function Sizzle( selector, context, results, seed ) { + var match, elem, m, nodeType, + i, groups, old, nid, newContext, newSelector; + + if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) { + setDocument( context ); + } + + context = context || document; + results = results || []; + + if ( !selector || typeof selector !== "string" ) { + return results; + } + + if ( (nodeType = context.nodeType) !== 1 && nodeType !== 9 ) { + return []; + } + + if ( documentIsHTML && !seed ) { + + if ( (match = rquickExpr.exec( selector )) ) { + if ( (m = match[1]) ) { + if ( nodeType === 9 ) { + elem = context.getElementById( m ); + if ( elem && elem.parentNode ) { + if ( elem.id === m ) { + results.push( elem ); + return results; + } + } else { + return results; + } + } else { + if ( context.ownerDocument && (elem = context.ownerDocument.getElementById( m )) && + contains( context, elem ) && elem.id === m ) { + results.push( elem ); + return results; + } + } + + } else if ( match[2] ) { + push.apply( results, context.getElementsByTagName( selector ) ); + return results; + + } else if ( (m = match[3]) && support.getElementsByClassName && context.getElementsByClassName ) { + push.apply( results, context.getElementsByClassName( m ) ); + return results; + } + } + + if ( support.qsa && (!rbuggyQSA || !rbuggyQSA.test( selector )) ) { + nid = old = expando; + newContext = context; + newSelector = nodeType === 9 && selector; + + if ( nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) { + groups = tokenize( selector ); + + if ( (old = context.getAttribute("id")) ) { + nid = old.replace( rescape, "\\$&" ); + } else { + context.setAttribute( "id", nid ); + } + nid = "[id='" + nid + "'] "; + + i = groups.length; + while ( i-- ) { + groups[i] = nid + toSelector( groups[i] ); + } + newContext = rsibling.test( selector ) && testContext( context.parentNode ) || context; + newSelector = groups.join(","); + } + + if ( newSelector ) { + try { + push.apply( results, + newContext.querySelectorAll( newSelector ) + ); + return results; + } catch(qsaError) { + } finally { + if ( !old ) { + context.removeAttribute("id"); + } + } + } + } + } + + return select( selector.replace( rtrim, "$1" ), context, results, seed ); +} + +/** + * Create key-value caches of limited size + * @returns {Function(string, Object)} Returns the Object data after storing it on itself with + * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) + * deleting the oldest entry + */ +function createCache() { + var keys = []; + + function cache( key, value ) { + if ( keys.push( key + " " ) > Expr.cacheLength ) { + delete cache[ keys.shift() ]; + } + return (cache[ key + " " ] = value); + } + return cache; +} + +/** + * Mark a function for special use by Sizzle + * @param {Function} fn The function to mark + */ +function markFunction( fn ) { + fn[ expando ] = true; + return fn; +} + +/** + * Support testing using an element + * @param {Function} fn Passed the created div and expects a boolean result + */ +function assert( fn ) { + var div = document.createElement("div"); + + try { + return !!fn( div ); + } catch (e) { + return false; + } finally { + if ( div.parentNode ) { + div.parentNode.removeChild( div ); + } + div = null; + } +} + +/** + * Adds the same handler for all of the specified attrs + * @param {String} attrs Pipe-separated list of attributes + * @param {Function} handler The method that will be applied + */ +function addHandle( attrs, handler ) { + var arr = attrs.split("|"), + i = attrs.length; + + while ( i-- ) { + Expr.attrHandle[ arr[i] ] = handler; + } +} + +/** + * Checks document order of two siblings + * @param {Element} a + * @param {Element} b + * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b + */ +function siblingCheck( a, b ) { + var cur = b && a, + diff = cur && a.nodeType === 1 && b.nodeType === 1 && + ( ~b.sourceIndex || MAX_NEGATIVE ) - + ( ~a.sourceIndex || MAX_NEGATIVE ); + + if ( diff ) { + return diff; + } + + if ( cur ) { + while ( (cur = cur.nextSibling) ) { + if ( cur === b ) { + return -1; + } + } + } + + return a ? 1 : -1; +} + +/** + * Returns a function to use in pseudos for input types + * @param {String} type + */ +function createInputPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for buttons + * @param {String} type + */ +function createButtonPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return (name === "input" || name === "button") && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for positionals + * @param {Function} fn + */ +function createPositionalPseudo( fn ) { + return markFunction(function( argument ) { + argument = +argument; + return markFunction(function( seed, matches ) { + var j, + matchIndexes = fn( [], seed.length, argument ), + i = matchIndexes.length; + + while ( i-- ) { + if ( seed[ (j = matchIndexes[i]) ] ) { + seed[j] = !(matches[j] = seed[j]); + } + } + }); + }); +} + +/** + * Checks a node for validity as a Sizzle context + * @param {Element|Object=} context + * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value + */ +function testContext( context ) { + return context && typeof context.getElementsByTagName !== strundefined && context; +} + +support = Sizzle.support = {}; + +/** + * Detects XML nodes + * @param {Element|Object} elem An element or a document + * @returns {Boolean} True iff elem is a non-HTML XML node + */ +isXML = Sizzle.isXML = function( elem ) { + var documentElement = elem && (elem.ownerDocument || elem).documentElement; + return documentElement ? documentElement.nodeName !== "HTML" : false; +}; + +/** + * Sets document-related variables once based on the current document + * @param {Element|Object} [doc] An element or document object to use to set the document + * @returns {Object} Returns the current document + */ +setDocument = Sizzle.setDocument = function( node ) { + var hasCompare, + doc = node ? node.ownerDocument || node : preferredDoc, + parent = doc.defaultView; + + if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) { + return document; + } + + document = doc; + docElem = doc.documentElement; + + documentIsHTML = !isXML( doc ); + + if ( parent && parent !== parent.top ) { + if ( parent.addEventListener ) { + parent.addEventListener( "unload", function() { + setDocument(); + }, false ); + } else if ( parent.attachEvent ) { + parent.attachEvent( "onunload", function() { + setDocument(); + }); + } + } + + /* Attributes + ---------------------------------------------------------------------- */ + + support.attributes = assert(function( div ) { + div.className = "i"; + return !div.getAttribute("className"); + }); + + /* getElement(s)By* + ---------------------------------------------------------------------- */ + + support.getElementsByTagName = assert(function( div ) { + div.appendChild( doc.createComment("") ); + return !div.getElementsByTagName("*").length; + }); + + support.getElementsByClassName = rnative.test( doc.getElementsByClassName ) && assert(function( div ) { + div.innerHTML = "
    "; + + div.firstChild.className = "i"; + return div.getElementsByClassName("i").length === 2; + }); + + support.getById = assert(function( div ) { + docElem.appendChild( div ).id = expando; + return !doc.getElementsByName || !doc.getElementsByName( expando ).length; + }); + + if ( support.getById ) { + Expr.find["ID"] = function( id, context ) { + if ( typeof context.getElementById !== strundefined && documentIsHTML ) { + var m = context.getElementById( id ); + return m && m.parentNode ? [m] : []; + } + }; + Expr.filter["ID"] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + return elem.getAttribute("id") === attrId; + }; + }; + } else { + delete Expr.find["ID"]; + + Expr.filter["ID"] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + var node = typeof elem.getAttributeNode !== strundefined && elem.getAttributeNode("id"); + return node && node.value === attrId; + }; + }; + } + + Expr.find["TAG"] = support.getElementsByTagName ? + function( tag, context ) { + if ( typeof context.getElementsByTagName !== strundefined ) { + return context.getElementsByTagName( tag ); + } + } : + function( tag, context ) { + var elem, + tmp = [], + i = 0, + results = context.getElementsByTagName( tag ); + + if ( tag === "*" ) { + while ( (elem = results[i++]) ) { + if ( elem.nodeType === 1 ) { + tmp.push( elem ); + } + } + + return tmp; + } + return results; + }; + + Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) { + if ( typeof context.getElementsByClassName !== strundefined && documentIsHTML ) { + return context.getElementsByClassName( className ); + } + }; + + /* QSA/matchesSelector + ---------------------------------------------------------------------- */ + + + rbuggyMatches = []; + + rbuggyQSA = []; + + if ( (support.qsa = rnative.test( doc.querySelectorAll )) ) { + assert(function( div ) { + div.innerHTML = ""; + + if ( div.querySelectorAll("[t^='']").length ) { + rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); + } + + if ( !div.querySelectorAll("[selected]").length ) { + rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); + } + + if ( !div.querySelectorAll(":checked").length ) { + rbuggyQSA.push(":checked"); + } + }); + + assert(function( div ) { + var input = doc.createElement("input"); + input.setAttribute( "type", "hidden" ); + div.appendChild( input ).setAttribute( "name", "D" ); + + if ( div.querySelectorAll("[name=d]").length ) { + rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" ); + } + + if ( !div.querySelectorAll(":enabled").length ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + div.querySelectorAll("*,:x"); + rbuggyQSA.push(",.*:"); + }); + } + + if ( (support.matchesSelector = rnative.test( (matches = docElem.webkitMatchesSelector || + docElem.mozMatchesSelector || + docElem.oMatchesSelector || + docElem.msMatchesSelector) )) ) { + + assert(function( div ) { + support.disconnectedMatch = matches.call( div, "div" ); + + matches.call( div, "[s!='']:x" ); + rbuggyMatches.push( "!=", pseudos ); + }); + } + + rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") ); + rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") ); + + /* Contains + ---------------------------------------------------------------------- */ + hasCompare = rnative.test( docElem.compareDocumentPosition ); + + contains = hasCompare || rnative.test( docElem.contains ) ? + function( a, b ) { + var adown = a.nodeType === 9 ? a.documentElement : a, + bup = b && b.parentNode; + return a === bup || !!( bup && bup.nodeType === 1 && ( + adown.contains ? + adown.contains( bup ) : + a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 + )); + } : + function( a, b ) { + if ( b ) { + while ( (b = b.parentNode) ) { + if ( b === a ) { + return true; + } + } + } + return false; + }; + + /* Sorting + ---------------------------------------------------------------------- */ + + sortOrder = hasCompare ? + function( a, b ) { + + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; + if ( compare ) { + return compare; + } + + compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ? + a.compareDocumentPosition( b ) : + + 1; + + if ( compare & 1 || + (!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) { + + if ( a === doc || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) { + return -1; + } + if ( b === doc || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) { + return 1; + } + + return sortInput ? + ( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) : + 0; + } + + return compare & 4 ? -1 : 1; + } : + function( a, b ) { + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + var cur, + i = 0, + aup = a.parentNode, + bup = b.parentNode, + ap = [ a ], + bp = [ b ]; + + if ( !aup || !bup ) { + return a === doc ? -1 : + b === doc ? 1 : + aup ? -1 : + bup ? 1 : + sortInput ? + ( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) : + 0; + + } else if ( aup === bup ) { + return siblingCheck( a, b ); + } + + cur = a; + while ( (cur = cur.parentNode) ) { + ap.unshift( cur ); + } + cur = b; + while ( (cur = cur.parentNode) ) { + bp.unshift( cur ); + } + + while ( ap[i] === bp[i] ) { + i++; + } + + return i ? + siblingCheck( ap[i], bp[i] ) : + + ap[i] === preferredDoc ? -1 : + bp[i] === preferredDoc ? 1 : + 0; + }; + + return doc; +}; + +Sizzle.matches = function( expr, elements ) { + return Sizzle( expr, null, null, elements ); +}; + +Sizzle.matchesSelector = function( elem, expr ) { + if ( ( elem.ownerDocument || elem ) !== document ) { + setDocument( elem ); + } + + expr = expr.replace( rattributeQuotes, "='$1']" ); + + if ( support.matchesSelector && documentIsHTML && + ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) && + ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { + + try { + var ret = matches.call( elem, expr ); + + if ( ret || support.disconnectedMatch || + elem.document && elem.document.nodeType !== 11 ) { + return ret; + } + } catch(e) {} + } + + return Sizzle( expr, document, null, [elem] ).length > 0; +}; + +Sizzle.contains = function( context, elem ) { + if ( ( context.ownerDocument || context ) !== document ) { + setDocument( context ); + } + return contains( context, elem ); +}; + +Sizzle.attr = function( elem, name ) { + if ( ( elem.ownerDocument || elem ) !== document ) { + setDocument( elem ); + } + + var fn = Expr.attrHandle[ name.toLowerCase() ], + val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? + fn( elem, name, !documentIsHTML ) : + undefined; + + return val !== undefined ? + val : + support.attributes || !documentIsHTML ? + elem.getAttribute( name ) : + (val = elem.getAttributeNode(name)) && val.specified ? + val.value : + null; +}; + +Sizzle.error = function( msg ) { + throw new Error( "Syntax error, unrecognized expression: " + msg ); +}; + +/** + * Document sorting and removing duplicates + * @param {ArrayLike} results + */ +Sizzle.uniqueSort = function( results ) { + var elem, + duplicates = [], + j = 0, + i = 0; + + hasDuplicate = !support.detectDuplicates; + sortInput = !support.sortStable && results.slice( 0 ); + results.sort( sortOrder ); + + if ( hasDuplicate ) { + while ( (elem = results[i++]) ) { + if ( elem === results[ i ] ) { + j = duplicates.push( i ); + } + } + while ( j-- ) { + results.splice( duplicates[ j ], 1 ); + } + } + + sortInput = null; + + return results; +}; + +/** + * Utility function for retrieving the text value of an array of DOM nodes + * @param {Array|Element} elem + */ +getText = Sizzle.getText = function( elem ) { + var node, + ret = "", + i = 0, + nodeType = elem.nodeType; + + if ( !nodeType ) { + while ( (node = elem[i++]) ) { + ret += getText( node ); + } + } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { + if ( typeof elem.textContent === "string" ) { + return elem.textContent; + } else { + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + ret += getText( elem ); + } + } + } else if ( nodeType === 3 || nodeType === 4 ) { + return elem.nodeValue; + } + + return ret; +}; + +Expr = Sizzle.selectors = { + + cacheLength: 50, + + createPseudo: markFunction, + + match: matchExpr, + + attrHandle: {}, + + find: {}, + + relative: { + ">": { dir: "parentNode", first: true }, + " ": { dir: "parentNode" }, + "+": { dir: "previousSibling", first: true }, + "~": { dir: "previousSibling" } + }, + + preFilter: { + "ATTR": function( match ) { + match[1] = match[1].replace( runescape, funescape ); + + match[3] = ( match[4] || match[5] || "" ).replace( runescape, funescape ); + + if ( match[2] === "~=" ) { + match[3] = " " + match[3] + " "; + } + + return match.slice( 0, 4 ); + }, + + "CHILD": function( match ) { + /* matches from matchExpr["CHILD"] + 1 type (only|nth|...) + 2 what (child|of-type) + 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) + 4 xn-component of xn+y argument ([+-]?\d*n|) + 5 sign of xn-component + 6 x of xn-component + 7 sign of y-component + 8 y of y-component + */ + match[1] = match[1].toLowerCase(); + + if ( match[1].slice( 0, 3 ) === "nth" ) { + if ( !match[3] ) { + Sizzle.error( match[0] ); + } + + match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) ); + match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" ); + + } else if ( match[3] ) { + Sizzle.error( match[0] ); + } + + return match; + }, + + "PSEUDO": function( match ) { + var excess, + unquoted = !match[5] && match[2]; + + if ( matchExpr["CHILD"].test( match[0] ) ) { + return null; + } + + if ( match[3] && match[4] !== undefined ) { + match[2] = match[4]; + + } else if ( unquoted && rpseudo.test( unquoted ) && + (excess = tokenize( unquoted, true )) && + (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) { + + match[0] = match[0].slice( 0, excess ); + match[2] = unquoted.slice( 0, excess ); + } + + return match.slice( 0, 3 ); + } + }, + + filter: { + + "TAG": function( nodeNameSelector ) { + var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); + return nodeNameSelector === "*" ? + function() { return true; } : + function( elem ) { + return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; + }; + }, + + "CLASS": function( className ) { + var pattern = classCache[ className + " " ]; + + return pattern || + (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) && + classCache( className, function( elem ) { + return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== strundefined && elem.getAttribute("class") || "" ); + }); + }, + + "ATTR": function( name, operator, check ) { + return function( elem ) { + var result = Sizzle.attr( elem, name ); + + if ( result == null ) { + return operator === "!="; + } + if ( !operator ) { + return true; + } + + result += ""; + + return operator === "=" ? result === check : + operator === "!=" ? result !== check : + operator === "^=" ? check && result.indexOf( check ) === 0 : + operator === "*=" ? check && result.indexOf( check ) > -1 : + operator === "$=" ? check && result.slice( -check.length ) === check : + operator === "~=" ? ( " " + result + " " ).indexOf( check ) > -1 : + operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : + false; + }; + }, + + "CHILD": function( type, what, argument, first, last ) { + var simple = type.slice( 0, 3 ) !== "nth", + forward = type.slice( -4 ) !== "last", + ofType = what === "of-type"; + + return first === 1 && last === 0 ? + + function( elem ) { + return !!elem.parentNode; + } : + + function( elem, context, xml ) { + var cache, outerCache, node, diff, nodeIndex, start, + dir = simple !== forward ? "nextSibling" : "previousSibling", + parent = elem.parentNode, + name = ofType && elem.nodeName.toLowerCase(), + useCache = !xml && !ofType; + + if ( parent ) { + + if ( simple ) { + while ( dir ) { + node = elem; + while ( (node = node[ dir ]) ) { + if ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) { + return false; + } + } + start = dir = type === "only" && !start && "nextSibling"; + } + return true; + } + + start = [ forward ? parent.firstChild : parent.lastChild ]; + + if ( forward && useCache ) { + outerCache = parent[ expando ] || (parent[ expando ] = {}); + cache = outerCache[ type ] || []; + nodeIndex = cache[0] === dirruns && cache[1]; + diff = cache[0] === dirruns && cache[2]; + node = nodeIndex && parent.childNodes[ nodeIndex ]; + + while ( (node = ++nodeIndex && node && node[ dir ] || + + (diff = nodeIndex = 0) || start.pop()) ) { + + if ( node.nodeType === 1 && ++diff && node === elem ) { + outerCache[ type ] = [ dirruns, nodeIndex, diff ]; + break; + } + } + + } else if ( useCache && (cache = (elem[ expando ] || (elem[ expando ] = {}))[ type ]) && cache[0] === dirruns ) { + diff = cache[1]; + + } else { + while ( (node = ++nodeIndex && node && node[ dir ] || + (diff = nodeIndex = 0) || start.pop()) ) { + + if ( ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) && ++diff ) { + if ( useCache ) { + (node[ expando ] || (node[ expando ] = {}))[ type ] = [ dirruns, diff ]; + } + + if ( node === elem ) { + break; + } + } + } + } + + diff -= last; + return diff === first || ( diff % first === 0 && diff / first >= 0 ); + } + }; + }, + + "PSEUDO": function( pseudo, argument ) { + var args, + fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || + Sizzle.error( "unsupported pseudo: " + pseudo ); + + if ( fn[ expando ] ) { + return fn( argument ); + } + + if ( fn.length > 1 ) { + args = [ pseudo, pseudo, "", argument ]; + return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? + markFunction(function( seed, matches ) { + var idx, + matched = fn( seed, argument ), + i = matched.length; + while ( i-- ) { + idx = indexOf.call( seed, matched[i] ); + seed[ idx ] = !( matches[ idx ] = matched[i] ); + } + }) : + function( elem ) { + return fn( elem, 0, args ); + }; + } + + return fn; + } + }, + + pseudos: { + "not": markFunction(function( selector ) { + var input = [], + results = [], + matcher = compile( selector.replace( rtrim, "$1" ) ); + + return matcher[ expando ] ? + markFunction(function( seed, matches, context, xml ) { + var elem, + unmatched = matcher( seed, null, xml, [] ), + i = seed.length; + + while ( i-- ) { + if ( (elem = unmatched[i]) ) { + seed[i] = !(matches[i] = elem); + } + } + }) : + function( elem, context, xml ) { + input[0] = elem; + matcher( input, null, xml, results ); + return !results.pop(); + }; + }), + + "has": markFunction(function( selector ) { + return function( elem ) { + return Sizzle( selector, elem ).length > 0; + }; + }), + + "contains": markFunction(function( text ) { + return function( elem ) { + return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1; + }; + }), + + "lang": markFunction( function( lang ) { + if ( !ridentifier.test(lang || "") ) { + Sizzle.error( "unsupported lang: " + lang ); + } + lang = lang.replace( runescape, funescape ).toLowerCase(); + return function( elem ) { + var elemLang; + do { + if ( (elemLang = documentIsHTML ? + elem.lang : + elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) { + + elemLang = elemLang.toLowerCase(); + return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; + } + } while ( (elem = elem.parentNode) && elem.nodeType === 1 ); + return false; + }; + }), + + "target": function( elem ) { + var hash = window.location && window.location.hash; + return hash && hash.slice( 1 ) === elem.id; + }, + + "root": function( elem ) { + return elem === docElem; + }, + + "focus": function( elem ) { + return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex); + }, + + "enabled": function( elem ) { + return elem.disabled === false; + }, + + "disabled": function( elem ) { + return elem.disabled === true; + }, + + "checked": function( elem ) { + var nodeName = elem.nodeName.toLowerCase(); + return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected); + }, + + "selected": function( elem ) { + if ( elem.parentNode ) { + elem.parentNode.selectedIndex; + } + + return elem.selected === true; + }, + + "empty": function( elem ) { + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + if ( elem.nodeType < 6 ) { + return false; + } + } + return true; + }, + + "parent": function( elem ) { + return !Expr.pseudos["empty"]( elem ); + }, + + "header": function( elem ) { + return rheader.test( elem.nodeName ); + }, + + "input": function( elem ) { + return rinputs.test( elem.nodeName ); + }, + + "button": function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === "button" || name === "button"; + }, + + "text": function( elem ) { + var attr; + return elem.nodeName.toLowerCase() === "input" && + elem.type === "text" && + + ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" ); + }, + + "first": createPositionalPseudo(function() { + return [ 0 ]; + }), + + "last": createPositionalPseudo(function( matchIndexes, length ) { + return [ length - 1 ]; + }), + + "eq": createPositionalPseudo(function( matchIndexes, length, argument ) { + return [ argument < 0 ? argument + length : argument ]; + }), + + "even": createPositionalPseudo(function( matchIndexes, length ) { + var i = 0; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "odd": createPositionalPseudo(function( matchIndexes, length ) { + var i = 1; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "lt": createPositionalPseudo(function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; --i >= 0; ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "gt": createPositionalPseudo(function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; ++i < length; ) { + matchIndexes.push( i ); + } + return matchIndexes; + }) + } +}; + +Expr.pseudos["nth"] = Expr.pseudos["eq"]; + +for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { + Expr.pseudos[ i ] = createInputPseudo( i ); +} +for ( i in { submit: true, reset: true } ) { + Expr.pseudos[ i ] = createButtonPseudo( i ); +} + +function setFilters() {} +setFilters.prototype = Expr.filters = Expr.pseudos; +Expr.setFilters = new setFilters(); + +function tokenize( selector, parseOnly ) { + var matched, match, tokens, type, + soFar, groups, preFilters, + cached = tokenCache[ selector + " " ]; + + if ( cached ) { + return parseOnly ? 0 : cached.slice( 0 ); + } + + soFar = selector; + groups = []; + preFilters = Expr.preFilter; + + while ( soFar ) { + + if ( !matched || (match = rcomma.exec( soFar )) ) { + if ( match ) { + soFar = soFar.slice( match[0].length ) || soFar; + } + groups.push( (tokens = []) ); + } + + matched = false; + + if ( (match = rcombinators.exec( soFar )) ) { + matched = match.shift(); + tokens.push({ + value: matched, + type: match[0].replace( rtrim, " " ) + }); + soFar = soFar.slice( matched.length ); + } + + for ( type in Expr.filter ) { + if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] || + (match = preFilters[ type ]( match ))) ) { + matched = match.shift(); + tokens.push({ + value: matched, + type: type, + matches: match + }); + soFar = soFar.slice( matched.length ); + } + } + + if ( !matched ) { + break; + } + } + + return parseOnly ? + soFar.length : + soFar ? + Sizzle.error( selector ) : + tokenCache( selector, groups ).slice( 0 ); +} + +function toSelector( tokens ) { + var i = 0, + len = tokens.length, + selector = ""; + for ( ; i < len; i++ ) { + selector += tokens[i].value; + } + return selector; +} + +function addCombinator( matcher, combinator, base ) { + var dir = combinator.dir, + checkNonElements = base && dir === "parentNode", + doneName = done++; + + return combinator.first ? + function( elem, context, xml ) { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + return matcher( elem, context, xml ); + } + } + } : + + function( elem, context, xml ) { + var oldCache, outerCache, + newCache = [ dirruns, doneName ]; + + if ( xml ) { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + if ( matcher( elem, context, xml ) ) { + return true; + } + } + } + } else { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + outerCache = elem[ expando ] || (elem[ expando ] = {}); + if ( (oldCache = outerCache[ dir ]) && + oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { + + return (newCache[ 2 ] = oldCache[ 2 ]); + } else { + outerCache[ dir ] = newCache; + + if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) { + return true; + } + } + } + } + } + }; +} + +function elementMatcher( matchers ) { + return matchers.length > 1 ? + function( elem, context, xml ) { + var i = matchers.length; + while ( i-- ) { + if ( !matchers[i]( elem, context, xml ) ) { + return false; + } + } + return true; + } : + matchers[0]; +} + +function multipleContexts( selector, contexts, results ) { + var i = 0, + len = contexts.length; + for ( ; i < len; i++ ) { + Sizzle( selector, contexts[i], results ); + } + return results; +} + +function condense( unmatched, map, filter, context, xml ) { + var elem, + newUnmatched = [], + i = 0, + len = unmatched.length, + mapped = map != null; + + for ( ; i < len; i++ ) { + if ( (elem = unmatched[i]) ) { + if ( !filter || filter( elem, context, xml ) ) { + newUnmatched.push( elem ); + if ( mapped ) { + map.push( i ); + } + } + } + } + + return newUnmatched; +} + +function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { + if ( postFilter && !postFilter[ expando ] ) { + postFilter = setMatcher( postFilter ); + } + if ( postFinder && !postFinder[ expando ] ) { + postFinder = setMatcher( postFinder, postSelector ); + } + return markFunction(function( seed, results, context, xml ) { + var temp, i, elem, + preMap = [], + postMap = [], + preexisting = results.length, + + elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ), + + matcherIn = preFilter && ( seed || !selector ) ? + condense( elems, preMap, preFilter, context, xml ) : + elems, + + matcherOut = matcher ? + postFinder || ( seed ? preFilter : preexisting || postFilter ) ? + + [] : + + results : + matcherIn; + + if ( matcher ) { + matcher( matcherIn, matcherOut, context, xml ); + } + + if ( postFilter ) { + temp = condense( matcherOut, postMap ); + postFilter( temp, [], context, xml ); + + i = temp.length; + while ( i-- ) { + if ( (elem = temp[i]) ) { + matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem); + } + } + } + + if ( seed ) { + if ( postFinder || preFilter ) { + if ( postFinder ) { + temp = []; + i = matcherOut.length; + while ( i-- ) { + if ( (elem = matcherOut[i]) ) { + temp.push( (matcherIn[i] = elem) ); + } + } + postFinder( null, (matcherOut = []), temp, xml ); + } + + i = matcherOut.length; + while ( i-- ) { + if ( (elem = matcherOut[i]) && + (temp = postFinder ? indexOf.call( seed, elem ) : preMap[i]) > -1 ) { + + seed[temp] = !(results[temp] = elem); + } + } + } + + } else { + matcherOut = condense( + matcherOut === results ? + matcherOut.splice( preexisting, matcherOut.length ) : + matcherOut + ); + if ( postFinder ) { + postFinder( null, results, matcherOut, xml ); + } else { + push.apply( results, matcherOut ); + } + } + }); +} + +function matcherFromTokens( tokens ) { + var checkContext, matcher, j, + len = tokens.length, + leadingRelative = Expr.relative[ tokens[0].type ], + implicitRelative = leadingRelative || Expr.relative[" "], + i = leadingRelative ? 1 : 0, + + matchContext = addCombinator( function( elem ) { + return elem === checkContext; + }, implicitRelative, true ), + matchAnyContext = addCombinator( function( elem ) { + return indexOf.call( checkContext, elem ) > -1; + }, implicitRelative, true ), + matchers = [ function( elem, context, xml ) { + return ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( + (checkContext = context).nodeType ? + matchContext( elem, context, xml ) : + matchAnyContext( elem, context, xml ) ); + } ]; + + for ( ; i < len; i++ ) { + if ( (matcher = Expr.relative[ tokens[i].type ]) ) { + matchers = [ addCombinator(elementMatcher( matchers ), matcher) ]; + } else { + matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches ); + + if ( matcher[ expando ] ) { + j = ++i; + for ( ; j < len; j++ ) { + if ( Expr.relative[ tokens[j].type ] ) { + break; + } + } + return setMatcher( + i > 1 && elementMatcher( matchers ), + i > 1 && toSelector( + tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" }) + ).replace( rtrim, "$1" ), + matcher, + i < j && matcherFromTokens( tokens.slice( i, j ) ), + j < len && matcherFromTokens( (tokens = tokens.slice( j )) ), + j < len && toSelector( tokens ) + ); + } + matchers.push( matcher ); + } + } + + return elementMatcher( matchers ); +} + +function matcherFromGroupMatchers( elementMatchers, setMatchers ) { + var bySet = setMatchers.length > 0, + byElement = elementMatchers.length > 0, + superMatcher = function( seed, context, xml, results, outermost ) { + var elem, j, matcher, + matchedCount = 0, + i = "0", + unmatched = seed && [], + setMatched = [], + contextBackup = outermostContext, + elems = seed || byElement && Expr.find["TAG"]( "*", outermost ), + dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1), + len = elems.length; + + if ( outermost ) { + outermostContext = context !== document && context; + } + + for ( ; i !== len && (elem = elems[i]) != null; i++ ) { + if ( byElement && elem ) { + j = 0; + while ( (matcher = elementMatchers[j++]) ) { + if ( matcher( elem, context, xml ) ) { + results.push( elem ); + break; + } + } + if ( outermost ) { + dirruns = dirrunsUnique; + } + } + + if ( bySet ) { + if ( (elem = !matcher && elem) ) { + matchedCount--; + } + + if ( seed ) { + unmatched.push( elem ); + } + } + } + + matchedCount += i; + if ( bySet && i !== matchedCount ) { + j = 0; + while ( (matcher = setMatchers[j++]) ) { + matcher( unmatched, setMatched, context, xml ); + } + + if ( seed ) { + if ( matchedCount > 0 ) { + while ( i-- ) { + if ( !(unmatched[i] || setMatched[i]) ) { + setMatched[i] = pop.call( results ); + } + } + } + + setMatched = condense( setMatched ); + } + + push.apply( results, setMatched ); + + if ( outermost && !seed && setMatched.length > 0 && + ( matchedCount + setMatchers.length ) > 1 ) { + + Sizzle.uniqueSort( results ); + } + } + + if ( outermost ) { + dirruns = dirrunsUnique; + outermostContext = contextBackup; + } + + return unmatched; + }; + + return bySet ? + markFunction( superMatcher ) : + superMatcher; +} + +compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) { + var i, + setMatchers = [], + elementMatchers = [], + cached = compilerCache[ selector + " " ]; + + if ( !cached ) { + if ( !match ) { + match = tokenize( selector ); + } + i = match.length; + while ( i-- ) { + cached = matcherFromTokens( match[i] ); + if ( cached[ expando ] ) { + setMatchers.push( cached ); + } else { + elementMatchers.push( cached ); + } + } + + cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) ); + + cached.selector = selector; + } + return cached; +}; + +/** + * A low-level selection function that works with Sizzle's compiled + * selector functions + * @param {String|Function} selector A selector or a pre-compiled + * selector function built with Sizzle.compile + * @param {Element} context + * @param {Array} [results] + * @param {Array} [seed] A set of elements to match against + */ +select = Sizzle.select = function( selector, context, results, seed ) { + var i, tokens, token, type, find, + compiled = typeof selector === "function" && selector, + match = !seed && tokenize( (selector = compiled.selector || selector) ); + + results = results || []; + + if ( match.length === 1 ) { + + tokens = match[0] = match[0].slice( 0 ); + if ( tokens.length > 2 && (token = tokens[0]).type === "ID" && + support.getById && context.nodeType === 9 && documentIsHTML && + Expr.relative[ tokens[1].type ] ) { + + context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0]; + if ( !context ) { + return results; + + } else if ( compiled ) { + context = context.parentNode; + } + + selector = selector.slice( tokens.shift().value.length ); + } + + i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length; + while ( i-- ) { + token = tokens[i]; + + if ( Expr.relative[ (type = token.type) ] ) { + break; + } + if ( (find = Expr.find[ type ]) ) { + if ( (seed = find( + token.matches[0].replace( runescape, funescape ), + rsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context + )) ) { + + tokens.splice( i, 1 ); + selector = seed.length && toSelector( tokens ); + if ( !selector ) { + push.apply( results, seed ); + return results; + } + + break; + } + } + } + } + + ( compiled || compile( selector, match ) )( + seed, + context, + !documentIsHTML, + results, + rsibling.test( selector ) && testContext( context.parentNode ) || context + ); + return results; +}; + + +support.sortStable = expando.split("").sort( sortOrder ).join("") === expando; + +support.detectDuplicates = !!hasDuplicate; + +setDocument(); + +support.sortDetached = assert(function( div1 ) { + return div1.compareDocumentPosition( document.createElement("div") ) & 1; +}); + +if ( !assert(function( div ) { + div.innerHTML = ""; + return div.firstChild.getAttribute("href") === "#" ; +}) ) { + addHandle( "type|href|height|width", function( elem, name, isXML ) { + if ( !isXML ) { + return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 ); + } + }); +} + +if ( !support.attributes || !assert(function( div ) { + div.innerHTML = ""; + div.firstChild.setAttribute( "value", "" ); + return div.firstChild.getAttribute( "value" ) === ""; +}) ) { + addHandle( "value", function( elem, name, isXML ) { + if ( !isXML && elem.nodeName.toLowerCase() === "input" ) { + return elem.defaultValue; + } + }); +} + +if ( !assert(function( div ) { + return div.getAttribute("disabled") == null; +}) ) { + addHandle( booleans, function( elem, name, isXML ) { + var val; + if ( !isXML ) { + return elem[ name ] === true ? name.toLowerCase() : + (val = elem.getAttributeNode( name )) && val.specified ? + val.value : + null; + } + }); +} + +if ( typeof define === "function" && define.amd ) { + define(function() { return Sizzle; }); +} else if ( typeof module !== "undefined" && module.exports ) { + module.exports = Sizzle; +} else { + window.Sizzle = Sizzle; +} + +})( window ); + +;(function(engine) { + var extendElements = Prototype.Selector.extendElements; + + function select(selector, scope) { + return extendElements(engine(selector, scope || document)); + } + + function match(element, selector) { + return engine.matches(selector, [element]).length == 1; + } + + Prototype.Selector.engine = engine; + Prototype.Selector.select = select; + Prototype.Selector.match = match; +})(Sizzle); + +window.Sizzle = Prototype._original_property; +delete Prototype._original_property; + +var Form = { + reset: function(form) { + form = $(form); + form.reset(); + return form; + }, + + serializeElements: function(elements, options) { + if (typeof options != 'object') options = { hash: !!options }; + else if (Object.isUndefined(options.hash)) options.hash = true; + var key, value, submitted = false, submit = options.submit, accumulator, initial; + + if (options.hash) { + initial = {}; + accumulator = function(result, key, value) { + if (key in result) { + if (!Object.isArray(result[key])) result[key] = [result[key]]; + result[key] = result[key].concat(value); + } else result[key] = value; + return result; + }; + } else { + initial = ''; + accumulator = function(result, key, values) { + if (!Object.isArray(values)) {values = [values];} + if (!values.length) {return result;} + var encodedKey = encodeURIComponent(key).gsub(/%20/, '+'); + return result + (result ? "&" : "") + values.map(function (value) { + value = value.gsub(/(\r)?\n/, '\r\n'); + value = encodeURIComponent(value); + value = value.gsub(/%20/, '+'); + return encodedKey + "=" + value; + }).join("&"); + }; + } + + return elements.inject(initial, function(result, element) { + if (!element.disabled && element.name) { + key = element.name; value = $(element).getValue(); + if (value != null && element.type != 'file' && (element.type != 'submit' || (!submitted && + submit !== false && (!submit || key == submit) && (submitted = true)))) { + result = accumulator(result, key, value); + } + } + return result; + }); + } +}; + +Form.Methods = { + serialize: function(form, options) { + return Form.serializeElements(Form.getElements(form), options); + }, + + + getElements: function(form) { + var elements = $(form).getElementsByTagName('*'); + var element, results = [], serializers = Form.Element.Serializers; + + for (var i = 0; element = elements[i]; i++) { + if (serializers[element.tagName.toLowerCase()]) + results.push(Element.extend(element)); + } + return results; + }, + + getInputs: function(form, typeName, name) { + form = $(form); + var inputs = form.getElementsByTagName('input'); + + if (!typeName && !name) return $A(inputs).map(Element.extend); + + for (var i = 0, matchingInputs = [], length = inputs.length; i < length; i++) { + var input = inputs[i]; + if ((typeName && input.type != typeName) || (name && input.name != name)) + continue; + matchingInputs.push(Element.extend(input)); + } + + return matchingInputs; + }, + + disable: function(form) { + form = $(form); + Form.getElements(form).invoke('disable'); + return form; + }, + + enable: function(form) { + form = $(form); + Form.getElements(form).invoke('enable'); + return form; + }, + + findFirstElement: function(form) { + var elements = $(form).getElements().findAll(function(element) { + return 'hidden' != element.type && !element.disabled; + }); + var firstByIndex = elements.findAll(function(element) { + return element.hasAttribute('tabIndex') && element.tabIndex >= 0; + }).sortBy(function(element) { return element.tabIndex }).first(); + + return firstByIndex ? firstByIndex : elements.find(function(element) { + return /^(?:input|select|textarea)$/i.test(element.tagName); + }); + }, + + focusFirstElement: function(form) { + form = $(form); + var element = form.findFirstElement(); + if (element) element.activate(); + return form; + }, + + request: function(form, options) { + form = $(form), options = Object.clone(options || { }); + + var params = options.parameters, action = form.readAttribute('action') || ''; + if (action.blank()) action = window.location.href; + options.parameters = form.serialize(true); + + if (params) { + if (Object.isString(params)) params = params.toQueryParams(); + Object.extend(options.parameters, params); + } + + if (form.hasAttribute('method') && !options.method) + options.method = form.method; + + return new Ajax.Request(action, options); + } +}; + +/*--------------------------------------------------------------------------*/ + + +Form.Element = { + focus: function(element) { + $(element).focus(); + return element; + }, + + select: function(element) { + $(element).select(); + return element; + } +}; + +Form.Element.Methods = { + + serialize: function(element) { + element = $(element); + if (!element.disabled && element.name) { + var value = element.getValue(); + if (value != undefined) { + var pair = { }; + pair[element.name] = value; + return Object.toQueryString(pair); + } + } + return ''; + }, + + getValue: function(element) { + element = $(element); + var method = element.tagName.toLowerCase(); + return Form.Element.Serializers[method](element); + }, + + setValue: function(element, value) { + element = $(element); + var method = element.tagName.toLowerCase(); + Form.Element.Serializers[method](element, value); + return element; + }, + + clear: function(element) { + $(element).value = ''; + return element; + }, + + present: function(element) { + return $(element).value != ''; + }, + + activate: function(element) { + element = $(element); + try { + element.focus(); + if (element.select && (element.tagName.toLowerCase() != 'input' || + !(/^(?:button|reset|submit)$/i.test(element.type)))) + element.select(); + } catch (e) { } + return element; + }, + + disable: function(element) { + element = $(element); + element.disabled = true; + return element; + }, + + enable: function(element) { + element = $(element); + element.disabled = false; + return element; + } +}; + +/*--------------------------------------------------------------------------*/ + +var Field = Form.Element; + +var $F = Form.Element.Methods.getValue; + +/*--------------------------------------------------------------------------*/ + +Form.Element.Serializers = (function() { + function input(element, value) { + switch (element.type.toLowerCase()) { + case 'checkbox': + case 'radio': + return inputSelector(element, value); + default: + return valueSelector(element, value); + } + } + + function inputSelector(element, value) { + if (Object.isUndefined(value)) + return element.checked ? element.value : null; + else element.checked = !!value; + } + + function valueSelector(element, value) { + if (Object.isUndefined(value)) return element.value; + else element.value = value; + } + + function select(element, value) { + if (Object.isUndefined(value)) + return (element.type === 'select-one' ? selectOne : selectMany)(element); + + var opt, currentValue, single = !Object.isArray(value); + for (var i = 0, length = element.length; i < length; i++) { + opt = element.options[i]; + currentValue = this.optionValue(opt); + if (single) { + if (currentValue == value) { + opt.selected = true; + return; + } + } + else opt.selected = value.include(currentValue); + } + } + + function selectOne(element) { + var index = element.selectedIndex; + return index >= 0 ? optionValue(element.options[index]) : null; + } + + function selectMany(element) { + var values, length = element.length; + if (!length) return null; + + for (var i = 0, values = []; i < length; i++) { + var opt = element.options[i]; + if (opt.selected) values.push(optionValue(opt)); + } + return values; + } + + function optionValue(opt) { + return Element.hasAttribute(opt, 'value') ? opt.value : opt.text; + } + + return { + input: input, + inputSelector: inputSelector, + textarea: valueSelector, + select: select, + selectOne: selectOne, + selectMany: selectMany, + optionValue: optionValue, + button: valueSelector + }; +})(); + +/*--------------------------------------------------------------------------*/ + + +Abstract.TimedObserver = Class.create(PeriodicalExecuter, { + initialize: function($super, element, frequency, callback) { + $super(callback, frequency); + this.element = $(element); + this.lastValue = this.getValue(); + }, + + execute: function() { + var value = this.getValue(); + if (Object.isString(this.lastValue) && Object.isString(value) ? + this.lastValue != value : String(this.lastValue) != String(value)) { + this.callback(this.element, value); + this.lastValue = value; + } + } +}); + +Form.Element.Observer = Class.create(Abstract.TimedObserver, { + getValue: function() { + return Form.Element.getValue(this.element); + } +}); + +Form.Observer = Class.create(Abstract.TimedObserver, { + getValue: function() { + return Form.serialize(this.element); + } +}); + +/*--------------------------------------------------------------------------*/ + +Abstract.EventObserver = Class.create({ + initialize: function(element, callback) { + this.element = $(element); + this.callback = callback; + + this.lastValue = this.getValue(); + if (this.element.tagName.toLowerCase() == 'form') + this.registerFormCallbacks(); + else + this.registerCallback(this.element); + }, + + onElementEvent: function() { + var value = this.getValue(); + if (this.lastValue != value) { + this.callback(this.element, value); + this.lastValue = value; + } + }, + + registerFormCallbacks: function() { + Form.getElements(this.element).each(this.registerCallback, this); + }, + + registerCallback: function(element) { + if (element.type) { + switch (element.type.toLowerCase()) { + case 'checkbox': + case 'radio': + Event.observe(element, 'click', this.onElementEvent.bind(this)); + break; + default: + Event.observe(element, 'change', this.onElementEvent.bind(this)); + break; + } + } + } +}); + +Form.Element.EventObserver = Class.create(Abstract.EventObserver, { + getValue: function() { + return Form.Element.getValue(this.element); + } +}); + +Form.EventObserver = Class.create(Abstract.EventObserver, { + getValue: function() { + return Form.serialize(this.element); + } +}); +(function(GLOBAL) { + var DIV = document.createElement('div'); + var docEl = document.documentElement; + var MOUSEENTER_MOUSELEAVE_EVENTS_SUPPORTED = 'onmouseenter' in docEl + && 'onmouseleave' in docEl; + + var Event = { + KEY_BACKSPACE: 8, + KEY_TAB: 9, + KEY_RETURN: 13, + KEY_ESC: 27, + KEY_LEFT: 37, + KEY_UP: 38, + KEY_RIGHT: 39, + KEY_DOWN: 40, + KEY_DELETE: 46, + KEY_HOME: 36, + KEY_END: 35, + KEY_PAGEUP: 33, + KEY_PAGEDOWN: 34, + KEY_INSERT: 45 + }; + + + var isIELegacyEvent = function(event) { return false; }; + + if (window.attachEvent) { + if (window.addEventListener) { + isIELegacyEvent = function(event) { + return !(event instanceof window.Event); + }; + } else { + isIELegacyEvent = function(event) { return true; }; + } + } + + var _isButton; + + function _isButtonForDOMEvents(event, code) { + return event.which ? (event.which === code + 1) : (event.button === code); + } + + var legacyButtonMap = { 0: 1, 1: 4, 2: 2 }; + function _isButtonForLegacyEvents(event, code) { + return event.button === legacyButtonMap[code]; + } + + function _isButtonForWebKit(event, code) { + switch (code) { + case 0: return event.which == 1 && !event.metaKey; + case 1: return event.which == 2 || (event.which == 1 && event.metaKey); + case 2: return event.which == 3; + default: return false; + } + } + + if (window.attachEvent) { + if (!window.addEventListener) { + _isButton = _isButtonForLegacyEvents; + } else { + _isButton = function(event, code) { + return isIELegacyEvent(event) ? _isButtonForLegacyEvents(event, code) : + _isButtonForDOMEvents(event, code); + } + } + } else if (Prototype.Browser.WebKit) { + _isButton = _isButtonForWebKit; + } else { + _isButton = _isButtonForDOMEvents; + } + + function isLeftClick(event) { return _isButton(event, 0) } + + function isMiddleClick(event) { return _isButton(event, 1) } + + function isRightClick(event) { return _isButton(event, 2) } + + function element(event) { + return Element.extend(_element(event)); + } + + function _element(event) { + event = Event.extend(event); + + var node = event.target, type = event.type, + currentTarget = event.currentTarget; + + if (currentTarget && currentTarget.tagName) { + if (type === 'load' || type === 'error' || + (type === 'click' && currentTarget.tagName.toLowerCase() === 'input' + && currentTarget.type === 'radio')) + node = currentTarget; + } + + return node.nodeType == Node.TEXT_NODE ? node.parentNode : node; + } + + function findElement(event, expression) { + var element = _element(event), selector = Prototype.Selector; + if (!expression) return Element.extend(element); + while (element) { + if (Object.isElement(element) && selector.match(element, expression)) + return Element.extend(element); + element = element.parentNode; + } + } + + function pointer(event) { + return { x: pointerX(event), y: pointerY(event) }; + } + + function pointerX(event) { + var docElement = document.documentElement, + body = document.body || { scrollLeft: 0 }; + + return event.pageX || (event.clientX + + (docElement.scrollLeft || body.scrollLeft) - + (docElement.clientLeft || 0)); + } + + function pointerY(event) { + var docElement = document.documentElement, + body = document.body || { scrollTop: 0 }; + + return event.pageY || (event.clientY + + (docElement.scrollTop || body.scrollTop) - + (docElement.clientTop || 0)); + } + + + function stop(event) { + Event.extend(event); + event.preventDefault(); + event.stopPropagation(); + + event.stopped = true; + } + + + Event.Methods = { + isLeftClick: isLeftClick, + isMiddleClick: isMiddleClick, + isRightClick: isRightClick, + + element: element, + findElement: findElement, + + pointer: pointer, + pointerX: pointerX, + pointerY: pointerY, + + stop: stop + }; + + var methods = Object.keys(Event.Methods).inject({ }, function(m, name) { + m[name] = Event.Methods[name].methodize(); + return m; + }); + + if (window.attachEvent) { + function _relatedTarget(event) { + var element; + switch (event.type) { + case 'mouseover': + case 'mouseenter': + element = event.fromElement; + break; + case 'mouseout': + case 'mouseleave': + element = event.toElement; + break; + default: + return null; + } + return Element.extend(element); + } + + var additionalMethods = { + stopPropagation: function() { this.cancelBubble = true }, + preventDefault: function() { this.returnValue = false }, + inspect: function() { return '[object Event]' } + }; + + Event.extend = function(event, element) { + if (!event) return false; + + if (!isIELegacyEvent(event)) return event; + + if (event._extendedByPrototype) return event; + event._extendedByPrototype = Prototype.emptyFunction; + + var pointer = Event.pointer(event); + + Object.extend(event, { + target: event.srcElement || element, + relatedTarget: _relatedTarget(event), + pageX: pointer.x, + pageY: pointer.y + }); + + Object.extend(event, methods); + Object.extend(event, additionalMethods); + + return event; + }; + } else { + Event.extend = Prototype.K; + } + + if (window.addEventListener) { + Event.prototype = window.Event.prototype || document.createEvent('HTMLEvents').__proto__; + Object.extend(Event.prototype, methods); + } + + var EVENT_TRANSLATIONS = { + mouseenter: 'mouseover', + mouseleave: 'mouseout' + }; + + function getDOMEventName(eventName) { + return EVENT_TRANSLATIONS[eventName] || eventName; + } + + if (MOUSEENTER_MOUSELEAVE_EVENTS_SUPPORTED) + getDOMEventName = Prototype.K; + + function getUniqueElementID(element) { + if (element === window) return 0; + + if (typeof element._prototypeUID === 'undefined') + element._prototypeUID = Element.Storage.UID++; + return element._prototypeUID; + } + + function getUniqueElementID_IE(element) { + if (element === window) return 0; + if (element == document) return 1; + return element.uniqueID; + } + + if ('uniqueID' in DIV) + getUniqueElementID = getUniqueElementID_IE; + + function isCustomEvent(eventName) { + return eventName.include(':'); + } + + Event._isCustomEvent = isCustomEvent; + + function getRegistryForElement(element, uid) { + var CACHE = GLOBAL.Event.cache; + if (Object.isUndefined(uid)) + uid = getUniqueElementID(element); + if (!CACHE[uid]) CACHE[uid] = { element: element }; + return CACHE[uid]; + } + + function destroyRegistryForElement(element, uid) { + if (Object.isUndefined(uid)) + uid = getUniqueElementID(element); + delete GLOBAL.Event.cache[uid]; + } + + + function register(element, eventName, handler) { + var registry = getRegistryForElement(element); + if (!registry[eventName]) registry[eventName] = []; + var entries = registry[eventName]; + + var i = entries.length; + while (i--) + if (entries[i].handler === handler) return null; + + var uid = getUniqueElementID(element); + var responder = GLOBAL.Event._createResponder(uid, eventName, handler); + var entry = { + responder: responder, + handler: handler + }; + + entries.push(entry); + return entry; + } + + function unregister(element, eventName, handler) { + var registry = getRegistryForElement(element); + var entries = registry[eventName]; + if (!entries) return; + + var i = entries.length, entry; + while (i--) { + if (entries[i].handler === handler) { + entry = entries[i]; + break; + } + } + + if (!entry) return; + + var index = entries.indexOf(entry); + entries.splice(index, 1); + + return entry; + } + + + function observe(element, eventName, handler) { + element = $(element); + var entry = register(element, eventName, handler); + + if (entry === null) return element; + + var responder = entry.responder; + if (isCustomEvent(eventName)) + observeCustomEvent(element, eventName, responder); + else + observeStandardEvent(element, eventName, responder); + + return element; + } + + function observeStandardEvent(element, eventName, responder) { + var actualEventName = getDOMEventName(eventName); + if (element.addEventListener) { + element.addEventListener(actualEventName, responder, false); + } else { + element.attachEvent('on' + actualEventName, responder); + } + } + + function observeCustomEvent(element, eventName, responder) { + if (element.addEventListener) { + element.addEventListener('dataavailable', responder, false); + } else { + element.attachEvent('ondataavailable', responder); + element.attachEvent('onlosecapture', responder); + } + } + + function stopObserving(element, eventName, handler) { + element = $(element); + var handlerGiven = !Object.isUndefined(handler), + eventNameGiven = !Object.isUndefined(eventName); + + if (!eventNameGiven && !handlerGiven) { + stopObservingElement(element); + return element; + } + + if (!handlerGiven) { + stopObservingEventName(element, eventName); + return element; + } + + var entry = unregister(element, eventName, handler); + + if (!entry) return element; + removeEvent(element, eventName, entry.responder); + return element; + } + + function stopObservingStandardEvent(element, eventName, responder) { + var actualEventName = getDOMEventName(eventName); + if (element.removeEventListener) { + element.removeEventListener(actualEventName, responder, false); + } else { + element.detachEvent('on' + actualEventName, responder); + } + } + + function stopObservingCustomEvent(element, eventName, responder) { + if (element.removeEventListener) { + element.removeEventListener('dataavailable', responder, false); + } else { + element.detachEvent('ondataavailable', responder); + element.detachEvent('onlosecapture', responder); + } + } + + + + function stopObservingElement(element) { + var uid = getUniqueElementID(element), registry = GLOBAL.Event.cache[uid]; + if (!registry) return; + + destroyRegistryForElement(element, uid); + + var entries, i; + for (var eventName in registry) { + if (eventName === 'element') continue; + + entries = registry[eventName]; + i = entries.length; + while (i--) + removeEvent(element, eventName, entries[i].responder); + } + } + + function stopObservingEventName(element, eventName) { + var registry = getRegistryForElement(element); + var entries = registry[eventName]; + if (!entries) return; + delete registry[eventName]; + + var i = entries.length; + while (i--) + removeEvent(element, eventName, entries[i].responder); + } + + + function removeEvent(element, eventName, handler) { + if (isCustomEvent(eventName)) + stopObservingCustomEvent(element, eventName, handler); + else + stopObservingStandardEvent(element, eventName, handler); + } + + + + function getFireTarget(element) { + if (element !== document) return element; + if (document.createEvent && !element.dispatchEvent) + return document.documentElement; + return element; + } + + function fire(element, eventName, memo, bubble) { + element = getFireTarget($(element)); + if (Object.isUndefined(bubble)) bubble = true; + memo = memo || {}; + + var event = fireEvent(element, eventName, memo, bubble); + return Event.extend(event); + } + + function fireEvent_DOM(element, eventName, memo, bubble) { + var event = document.createEvent('HTMLEvents'); + event.initEvent('dataavailable', bubble, true); + + event.eventName = eventName; + event.memo = memo; + + element.dispatchEvent(event); + return event; + } + + function fireEvent_IE(element, eventName, memo, bubble) { + var event = document.createEventObject(); + event.eventType = bubble ? 'ondataavailable' : 'onlosecapture'; + + event.eventName = eventName; + event.memo = memo; + + element.fireEvent(event.eventType, event); + return event; + } + + var fireEvent = document.createEvent ? fireEvent_DOM : fireEvent_IE; + + + + Event.Handler = Class.create({ + initialize: function(element, eventName, selector, callback) { + this.element = $(element); + this.eventName = eventName; + this.selector = selector; + this.callback = callback; + this.handler = this.handleEvent.bind(this); + }, + + + start: function() { + Event.observe(this.element, this.eventName, this.handler); + return this; + }, + + stop: function() { + Event.stopObserving(this.element, this.eventName, this.handler); + return this; + }, + + handleEvent: function(event) { + var element = Event.findElement(event, this.selector); + if (element) this.callback.call(this.element, event, element); + } + }); + + function on(element, eventName, selector, callback) { + element = $(element); + if (Object.isFunction(selector) && Object.isUndefined(callback)) { + callback = selector, selector = null; + } + + return new Event.Handler(element, eventName, selector, callback).start(); + } + + Object.extend(Event, Event.Methods); + + Object.extend(Event, { + fire: fire, + observe: observe, + stopObserving: stopObserving, + on: on + }); + + Element.addMethods({ + fire: fire, + + observe: observe, + + stopObserving: stopObserving, + + on: on + }); + + Object.extend(document, { + fire: fire.methodize(), + + observe: observe.methodize(), + + stopObserving: stopObserving.methodize(), + + on: on.methodize(), + + loaded: false + }); + + if (GLOBAL.Event) Object.extend(window.Event, Event); + else GLOBAL.Event = Event; + + GLOBAL.Event.cache = {}; + + function destroyCache_IE() { + GLOBAL.Event.cache = null; + } + + if (window.attachEvent) + window.attachEvent('onunload', destroyCache_IE); + + DIV = null; + docEl = null; +})(this); + +(function(GLOBAL) { + /* Code for creating leak-free event responders is based on work by + John-David Dalton. */ + + var docEl = document.documentElement; + var MOUSEENTER_MOUSELEAVE_EVENTS_SUPPORTED = 'onmouseenter' in docEl + && 'onmouseleave' in docEl; + + function isSimulatedMouseEnterLeaveEvent(eventName) { + return !MOUSEENTER_MOUSELEAVE_EVENTS_SUPPORTED && + (eventName === 'mouseenter' || eventName === 'mouseleave'); + } + + function createResponder(uid, eventName, handler) { + if (Event._isCustomEvent(eventName)) + return createResponderForCustomEvent(uid, eventName, handler); + if (isSimulatedMouseEnterLeaveEvent(eventName)) + return createMouseEnterLeaveResponder(uid, eventName, handler); + + return function(event) { + if (!Event.cache) return; + + var element = Event.cache[uid].element; + Event.extend(event, element); + handler.call(element, event); + }; + } + + function createResponderForCustomEvent(uid, eventName, handler) { + return function(event) { + var element = Event.cache[uid].element; + + if (Object.isUndefined(event.eventName)) + return false; + + if (event.eventName !== eventName) + return false; + + Event.extend(event, element); + handler.call(element, event); + }; + } + + function createMouseEnterLeaveResponder(uid, eventName, handler) { + return function(event) { + var element = Event.cache[uid].element; + + Event.extend(event, element); + var parent = event.relatedTarget; + + while (parent && parent !== element) { + try { parent = parent.parentNode; } + catch(e) { parent = element; } + } + + if (parent === element) return; + handler.call(element, event); + } + } + + GLOBAL.Event._createResponder = createResponder; + docEl = null; +})(this); + +(function(GLOBAL) { + /* Support for the DOMContentLoaded event is based on work by Dan Webb, + Matthias Miller, Dean Edwards, John Resig, and Diego Perini. */ + + var TIMER; + + function fireContentLoadedEvent() { + if (document.loaded) return; + if (TIMER) window.clearTimeout(TIMER); + document.loaded = true; + document.fire('dom:loaded'); + } + + function checkReadyState() { + if (document.readyState === 'complete') { + document.detachEvent('onreadystatechange', checkReadyState); + fireContentLoadedEvent(); + } + } + + function pollDoScroll() { + try { + document.documentElement.doScroll('left'); + } catch (e) { + TIMER = pollDoScroll.defer(); + return; + } + + fireContentLoadedEvent(); + } + + + if (document.readyState === 'complete') { + fireContentLoadedEvent(); + return; + } + + if (document.addEventListener) { + document.addEventListener('DOMContentLoaded', fireContentLoadedEvent, false); + } else { + document.attachEvent('onreadystatechange', checkReadyState); + if (window == top) TIMER = pollDoScroll.defer(); + } + + Event.observe(window, 'load', fireContentLoadedEvent); +})(this); + + +Element.addMethods(); +/*------------------------------- DEPRECATED -------------------------------*/ + +Hash.toQueryString = Object.toQueryString; + +var Toggle = { display: Element.toggle }; + +Element.Methods.childOf = Element.Methods.descendantOf; + +var Insertion = { + Before: function(element, content) { + return Element.insert(element, {before:content}); + }, + + Top: function(element, content) { + return Element.insert(element, {top:content}); + }, + + Bottom: function(element, content) { + return Element.insert(element, {bottom:content}); + }, + + After: function(element, content) { + return Element.insert(element, {after:content}); + } +}; + +var $continue = new Error('"throw $continue" is deprecated, use "return" instead'); + +var Position = { + includeScrollOffsets: false, + + prepare: function() { + this.deltaX = window.pageXOffset + || document.documentElement.scrollLeft + || document.body.scrollLeft + || 0; + this.deltaY = window.pageYOffset + || document.documentElement.scrollTop + || document.body.scrollTop + || 0; + }, + + within: function(element, x, y) { + if (this.includeScrollOffsets) + return this.withinIncludingScrolloffsets(element, x, y); + this.xcomp = x; + this.ycomp = y; + this.offset = Element.cumulativeOffset(element); + + return (y >= this.offset[1] && + y < this.offset[1] + element.offsetHeight && + x >= this.offset[0] && + x < this.offset[0] + element.offsetWidth); + }, + + withinIncludingScrolloffsets: function(element, x, y) { + var offsetcache = Element.cumulativeScrollOffset(element); + + this.xcomp = x + offsetcache[0] - this.deltaX; + this.ycomp = y + offsetcache[1] - this.deltaY; + this.offset = Element.cumulativeOffset(element); + + return (this.ycomp >= this.offset[1] && + this.ycomp < this.offset[1] + element.offsetHeight && + this.xcomp >= this.offset[0] && + this.xcomp < this.offset[0] + element.offsetWidth); + }, + + overlap: function(mode, element) { + if (!mode) return 0; + if (mode == 'vertical') + return ((this.offset[1] + element.offsetHeight) - this.ycomp) / + element.offsetHeight; + if (mode == 'horizontal') + return ((this.offset[0] + element.offsetWidth) - this.xcomp) / + element.offsetWidth; + }, + + + cumulativeOffset: Element.Methods.cumulativeOffset, + + positionedOffset: Element.Methods.positionedOffset, + + absolutize: function(element) { + Position.prepare(); + return Element.absolutize(element); + }, + + relativize: function(element) { + Position.prepare(); + return Element.relativize(element); + }, + + realOffset: Element.Methods.cumulativeScrollOffset, + + offsetParent: Element.Methods.getOffsetParent, + + page: Element.Methods.viewportOffset, + + clone: function(source, target, options) { + options = options || { }; + return Element.clonePosition(target, source, options); + } +}; + +/*--------------------------------------------------------------------------*/ + +if (!document.getElementsByClassName) document.getElementsByClassName = function(instanceMethods){ + function iter(name) { + return name.blank() ? null : "[contains(concat(' ', @class, ' '), ' " + name + " ')]"; + } + + instanceMethods.getElementsByClassName = Prototype.BrowserFeatures.XPath ? + function(element, className) { + className = className.toString().strip(); + var cond = /\s/.test(className) ? $w(className).map(iter).join('') : iter(className); + return cond ? document._getElementsByXPath('.//*' + cond, element) : []; + } : function(element, className) { + className = className.toString().strip(); + var elements = [], classNames = (/\s/.test(className) ? $w(className) : null); + if (!classNames && !className) return elements; + + var nodes = $(element).getElementsByTagName('*'); + className = ' ' + className + ' '; + + for (var i = 0, child, cn; child = nodes[i]; i++) { + if (child.className && (cn = ' ' + child.className + ' ') && (cn.include(className) || + (classNames && classNames.all(function(name) { + return !name.toString().blank() && cn.include(' ' + name + ' '); + })))) + elements.push(Element.extend(child)); + } + return elements; + }; + + return function(className, parentElement) { + return $(parentElement || document.body).getElementsByClassName(className); + }; +}(Element.Methods); + +/*--------------------------------------------------------------------------*/ + +Element.ClassNames = Class.create(); +Element.ClassNames.prototype = { + initialize: function(element) { + this.element = $(element); + }, + + _each: function(iterator, context) { + this.element.className.split(/\s+/).select(function(name) { + return name.length > 0; + })._each(iterator, context); + }, + + set: function(className) { + this.element.className = className; + }, + + add: function(classNameToAdd) { + if (this.include(classNameToAdd)) return; + this.set($A(this).concat(classNameToAdd).join(' ')); + }, + + remove: function(classNameToRemove) { + if (!this.include(classNameToRemove)) return; + this.set($A(this).without(classNameToRemove).join(' ')); + }, + + toString: function() { + return $A(this).join(' '); + } +}; + +Object.extend(Element.ClassNames.prototype, Enumerable); + +/*--------------------------------------------------------------------------*/ + +(function() { + window.Selector = Class.create({ + initialize: function(expression) { + this.expression = expression.strip(); + }, + + findElements: function(rootElement) { + return Prototype.Selector.select(this.expression, rootElement); + }, + + match: function(element) { + return Prototype.Selector.match(element, this.expression); + }, + + toString: function() { + return this.expression; + }, + + inspect: function() { + return "#"; + } + }); + + Object.extend(Selector, { + matchElements: function(elements, expression) { + var match = Prototype.Selector.match, + results = []; + + for (var i = 0, length = elements.length; i < length; i++) { + var element = elements[i]; + if (match(element, expression)) { + results.push(Element.extend(element)); + } + } + return results; + }, + + findElement: function(elements, expression, index) { + index = index || 0; + var matchIndex = 0, element; + for (var i = 0, length = elements.length; i < length; i++) { + element = elements[i]; + if (Prototype.Selector.match(element, expression) && index === matchIndex++) { + return Element.extend(element); + } + } + }, + + findChildElements: function(element, expressions) { + var selector = expressions.toArray().join(', '); + return Prototype.Selector.select(selector, element || document); + } + }); +})(); + +/** + * Event.simulate(@element, eventName[, options]) -> Element + * + * - @element: element to fire event on + * - eventName: name of event to fire (only MouseEvents and HTMLEvents interfaces are supported) + * - options: optional object to fine-tune event properties - pointerX, pointerY, ctrlKey, etc. + * + * $('foo').simulate('click'); // => fires "click" event on an element with id=foo + * + **/ +(function(){ + + var eventMatchers = { + 'HTMLEvents': /^(?:load|unload|abort|error|select|change|submit|reset|focus|blur|resize|scroll|input)$/, + 'MouseEvents': /^(?:click|mouse(?:down|up|over|move|out))$/ + } + var defaultOptions = { + pointerX: 0, + pointerY: 0, + button: 0, + ctrlKey: false, + altKey: false, + shiftKey: false, + metaKey: false, + bubbles: true, + cancelable: true + } + + Event.simulate = function(element, eventName) { + var options = Object.extend(defaultOptions, arguments[2] || { }); + var oEvent, eventType = null; + + element = $(element); + + for (var name in eventMatchers) { + if (eventMatchers[name].test(eventName)) { eventType = name; break; } + } + + if (!eventType) + throw new SyntaxError('Only HTMLEvents and MouseEvents interfaces are supported'); + + if (document.createEvent) { + oEvent = document.createEvent(eventType); + if (eventType == 'HTMLEvents') { + oEvent.initEvent(eventName, options.bubbles, options.cancelable); + } + else { + oEvent.initMouseEvent(eventName, options.bubbles, options.cancelable, document.defaultView, + options.button, options.pointerX, options.pointerY, options.pointerX, options.pointerY, + options.ctrlKey, options.altKey, options.shiftKey, options.metaKey, options.button, element); + } + element.dispatchEvent(oEvent); + } + else { + options.clientX = options.pointerX; + options.clientY = options.pointerY; + oEvent = Object.extend(document.createEventObject(), options); + element.fireEvent('on' + eventName, oEvent); + } + return element; + } + + Element.addMethods({ simulate: Event.simulate }); +})() +function phi4z(t,i,s,e,o,n,a,r,h){var l,c,m,u,d,p,_,f,P,y;for(h=n,y=1;15>=y;y++)if(l=Math.sin(h),m=Math.tan(h),r=m*Math.sqrt(1-t*l*l),c=Math.sin(2*h),u=i*h-s*c+e*Math.sin(4*h)-o*Math.sin(6*h),d=i-2*s*Math.cos(2*h)+4*e*Math.cos(4*h)-6*o*Math.cos(6*h),p=2*u+r*(u*u+a)-2*n*(r*u+1),_=t*c*(u*u+a-2*n*u)/(2*r),f=2*(n-u)*(r*d-2/c)-2*d,P=p/(_+f),h+=P,1e-10>=Math.abs(P))return h;return Proj4js.reportError("phi4z: No convergence"),null}function e4fn(t){var i,s;return i=1+t,s=1-t,Math.sqrt(Math.pow(i,i)*Math.pow(s,s))}var Proj4js={defaultDatum:"WGS84",transform:function(t,i,s){if(!t.readyToUse)return this.reportError("Proj4js initialization for:"+t.srsCode+" not yet complete"),s;if(!i.readyToUse)return this.reportError("Proj4js initialization for:"+i.srsCode+" not yet complete"),s;if(t.datum&&i.datum&&((t.datum.datum_type==Proj4js.common.PJD_3PARAM||t.datum.datum_type==Proj4js.common.PJD_7PARAM)&&"WGS84"!=i.datumCode||(i.datum.datum_type==Proj4js.common.PJD_3PARAM||i.datum.datum_type==Proj4js.common.PJD_7PARAM)&&"WGS84"!=t.datumCode)){var e=Proj4js.WGS84;this.transform(t,e,s),t=e}return"enu"!=t.axis&&this.adjust_axis(t,!1,s),"longlat"==t.projName?(s.x*=Proj4js.common.D2R,s.y*=Proj4js.common.D2R):(t.to_meter&&(s.x*=t.to_meter,s.y*=t.to_meter),t.inverse(s)),t.from_greenwich&&(s.x+=t.from_greenwich),s=this.datum_transform(t.datum,i.datum,s),i.from_greenwich&&(s.x-=i.from_greenwich),"longlat"==i.projName?(s.x*=Proj4js.common.R2D,s.y*=Proj4js.common.R2D):(i.forward(s),i.to_meter&&(s.x/=i.to_meter,s.y/=i.to_meter)),"enu"!=i.axis&&this.adjust_axis(i,!0,s),s},datum_transform:function(t,i,s){return t.compare_datums(i)?s:t.datum_type==Proj4js.common.PJD_NODATUM||i.datum_type==Proj4js.common.PJD_NODATUM?s:((t.es!=i.es||t.a!=i.a||t.datum_type==Proj4js.common.PJD_3PARAM||t.datum_type==Proj4js.common.PJD_7PARAM||i.datum_type==Proj4js.common.PJD_3PARAM||i.datum_type==Proj4js.common.PJD_7PARAM)&&(t.geodetic_to_geocentric(s),(t.datum_type==Proj4js.common.PJD_3PARAM||t.datum_type==Proj4js.common.PJD_7PARAM)&&t.geocentric_to_wgs84(s),(i.datum_type==Proj4js.common.PJD_3PARAM||i.datum_type==Proj4js.common.PJD_7PARAM)&&i.geocentric_from_wgs84(s),i.geocentric_to_geodetic(s)),s)},adjust_axis:function(t,i,s){for(var e,o,n=s.x,a=s.y,r=s.z||0,h=0;3>h;h++)if(!i||2!=h||void 0!==s.z)switch(0==h?(e=n,o="x"):1==h?(e=a,o="y"):(e=r,o="z"),t.axis[h]){case"e":s[o]=e;break;case"w":s[o]=-e;break;case"n":s[o]=e;break;case"s":s[o]=-e;break;case"u":void 0!==s[o]&&(s.z=e);break;case"d":void 0!==s[o]&&(s.z=-e);break;default:return alert("ERROR: unknow axis ("+t.axis[h]+") - check definition of "+t.projName),null}return s},reportError:function(){},extend:function(t,i){if(t=t||{},i)for(var s in i){var e=i[s];void 0!==e&&(t[s]=e)}return t},Class:function(){for(var t,i=function(){this.initialize.apply(this,arguments)},s={},e=0;arguments.length>e;++e)t="function"==typeof arguments[e]?arguments[e].prototype:arguments[e],Proj4js.extend(s,t);return i.prototype=s,i},bind:function(t,i){var s=Array.prototype.slice.apply(arguments,[2]);return function(){var e=s.concat(Array.prototype.slice.apply(arguments,[0]));return t.apply(i,e)}},scriptName:"proj4js-combined.js",defsLookupService:"http://spatialreference.org/ref",libPath:null,getScriptLocation:function(){if(this.libPath)return this.libPath;for(var t=this.scriptName,i=t.length,s=document.getElementsByTagName("script"),e=0;s.length>e;e++){var o=s[e].getAttribute("src");if(o){var n=o.lastIndexOf(t);if(n>-1&&n+i==o.length){this.libPath=o.slice(0,-i);break}}}return this.libPath||""},loadScript:function(t,i,s,e){var o=document.createElement("script");o.defer=!1,o.type="text/javascript",o.id=t,o.src=t,o.onload=i,o.onerror=s,o.loadCheck=e,/MSIE/.test(navigator.userAgent)&&(o.onreadystatechange=this.checkReadyState),document.getElementsByTagName("head")[0].appendChild(o)},checkReadyState:function(){"loaded"==this.readyState&&(this.loadCheck()?this.onload():this.onerror())}};Proj4js.Proj=Proj4js.Class({readyToUse:!1,title:null,projName:null,units:null,datum:null,x0:0,y0:0,localCS:!1,queue:null,initialize:function(t,i){if(this.srsCodeInput=t,this.queue=[],i&&this.queue.push(i),t.indexOf("GEOGCS")>=0||t.indexOf("GEOCCS")>=0||t.indexOf("PROJCS")>=0||t.indexOf("LOCAL_CS")>=0)return this.parseWKT(t),this.deriveConstants(),this.loadProjCode(this.projName),void 0;if(0==t.indexOf("urn:")){var s=t.split(":");"ogc"!=s[1]&&"x-ogc"!=s[1]||"def"!=s[2]||"crs"!=s[3]||(t=s[4]+":"+s[s.length-1])}else if(0==t.indexOf("http://")){var e=t.split("#");e[0].match(/epsg.org/)?t="EPSG:"+e[1]:e[0].match(/RIG.xml/)&&(t="IGNF:"+e[1])}this.srsCode=t.toUpperCase(),0==this.srsCode.indexOf("EPSG")?(this.srsCode=this.srsCode,this.srsAuth="epsg",this.srsProjNumber=this.srsCode.substring(5)):0==this.srsCode.indexOf("IGNF")?(this.srsCode=this.srsCode,this.srsAuth="IGNF",this.srsProjNumber=this.srsCode.substring(5)):0==this.srsCode.indexOf("CRS")?(this.srsCode=this.srsCode,this.srsAuth="CRS",this.srsProjNumber=this.srsCode.substring(4)):(this.srsAuth="",this.srsProjNumber=this.srsCode),this.loadProjDefinition()},loadProjDefinition:function(){if(Proj4js.defs[this.srsCode])return this.defsLoaded(),void 0;var t=Proj4js.getScriptLocation()+"defs/"+this.srsAuth.toUpperCase()+this.srsProjNumber+".js";Proj4js.loadScript(t,Proj4js.bind(this.defsLoaded,this),Proj4js.bind(this.loadFromService,this),Proj4js.bind(this.checkDefsLoaded,this))},loadFromService:function(){var t=Proj4js.defsLookupService+"/"+this.srsAuth+"/"+this.srsProjNumber+"/proj4js/";Proj4js.loadScript(t,Proj4js.bind(this.defsLoaded,this),Proj4js.bind(this.defsFailed,this),Proj4js.bind(this.checkDefsLoaded,this))},defsLoaded:function(){this.parseDefs(),this.loadProjCode(this.projName)},checkDefsLoaded:function(){return Proj4js.defs[this.srsCode]?!0:!1},defsFailed:function(){Proj4js.reportError("failed to load projection definition for: "+this.srsCode),Proj4js.defs[this.srsCode]=Proj4js.defs.WGS84,this.defsLoaded()},loadProjCode:function(t){if(Proj4js.Proj[t])return this.initTransforms(),void 0;var i=Proj4js.getScriptLocation()+"projCode/"+t+".js";Proj4js.loadScript(i,Proj4js.bind(this.loadProjCodeSuccess,this,t),Proj4js.bind(this.loadProjCodeFailure,this,t),Proj4js.bind(this.checkCodeLoaded,this,t))},loadProjCodeSuccess:function(t){Proj4js.Proj[t].dependsOn?this.loadProjCode(Proj4js.Proj[t].dependsOn):this.initTransforms()},loadProjCodeFailure:function(t){Proj4js.reportError("failed to find projection file for: "+t)},checkCodeLoaded:function(t){return Proj4js.Proj[t]?!0:!1},initTransforms:function(){if(Proj4js.extend(this,Proj4js.Proj[this.projName]),this.init(),this.readyToUse=!0,this.queue)for(var t;t=this.queue.shift();)t.call(this,this)},wktRE:/^(\w+)\[(.*)\]$/,parseWKT:function(t){var i=t.match(this.wktRE);if(i){var s,e=i[1],o=i[2],n=o.split(",");s="TOWGS84"==e.toUpperCase()?e:n.shift(),s=s.replace(/^\"/,""),s=s.replace(/\"$/,"");for(var a=[],r=0,h="",l=0;n.length>l;++l){for(var c=n[l],m=0;c.length>m;++m)"["==c.charAt(m)&&++r,"]"==c.charAt(m)&&--r;h+=c,0===r?(a.push(h),h=""):h+=","}switch(e){case"LOCAL_CS":this.projName="identity",this.localCS=!0,this.srsCode=s;break;case"GEOGCS":this.projName="longlat",this.geocsCode=s,this.srsCode||(this.srsCode=s);break;case"PROJCS":this.srsCode=s;break;case"GEOCCS":break;case"PROJECTION":this.projName=Proj4js.wktProjections[s];break;case"DATUM":this.datumName=s;break;case"LOCAL_DATUM":this.datumCode="none";break;case"SPHEROID":this.ellps=s,this.a=parseFloat(a.shift()),this.rf=parseFloat(a.shift());break;case"PRIMEM":this.from_greenwich=parseFloat(a.shift());break;case"UNIT":this.units=s,this.unitsPerMeter=parseFloat(a.shift());break;case"PARAMETER":var u=s.toLowerCase(),d=parseFloat(a.shift());switch(u){case"false_easting":this.x0=d;break;case"false_northing":this.y0=d;break;case"scale_factor":this.k0=d;break;case"central_meridian":this.long0=d*Proj4js.common.D2R;break;case"latitude_of_origin":this.lat0=d*Proj4js.common.D2R;break;case"more_here":break;default:}break;case"TOWGS84":this.datum_params=a;break;case"AXIS":var u=s.toLowerCase(),d=a.shift();switch(d){case"EAST":d="e";break;case"WEST":d="w";break;case"NORTH":d="n";break;case"SOUTH":d="s";break;case"UP":d="u";break;case"DOWN":d="d";break;case"OTHER":default:d=" "}switch(this.axis||(this.axis="enu"),u){case"x":this.axis=d+this.axis.substr(1,2);break;case"y":this.axis=this.axis.substr(0,1)+d+this.axis.substr(2,1);break;case"z":this.axis=this.axis.substr(0,2)+d;break;default:}case"MORE_HERE":break;default:}for(var l=0;a.length>l;++l)this.parseWKT(a[l])}},parseDefs:function(){this.defData=Proj4js.defs[this.srsCode];var t,i;if(this.defData){for(var s=this.defData.split("+"),e=0;s.length>e;e++){var o=s[e].split("=");switch(t=o[0].toLowerCase(),i=o[1],t.replace(/\s/gi,"")){case"":break;case"title":this.title=i;break;case"proj":this.projName=i.replace(/\s/gi,"");break;case"units":this.units=i.replace(/\s/gi,"");break;case"datum":this.datumCode=i.replace(/\s/gi,"");break;case"nadgrids":this.nagrids=i.replace(/\s/gi,"");break;case"ellps":this.ellps=i.replace(/\s/gi,"");break;case"a":this.a=parseFloat(i);break;case"b":this.b=parseFloat(i);break;case"rf":this.rf=parseFloat(i);break;case"lat_0":this.lat0=i*Proj4js.common.D2R;break;case"lat_1":this.lat1=i*Proj4js.common.D2R;break;case"lat_2":this.lat2=i*Proj4js.common.D2R;break;case"lat_ts":this.lat_ts=i*Proj4js.common.D2R;break;case"lon_0":this.long0=i*Proj4js.common.D2R;break;case"alpha":this.alpha=parseFloat(i)*Proj4js.common.D2R;break;case"lonc":this.longc=i*Proj4js.common.D2R;break;case"x_0":this.x0=parseFloat(i);break;case"y_0":this.y0=parseFloat(i);break;case"k_0":this.k0=parseFloat(i);break;case"k":this.k0=parseFloat(i);break;case"r_a":this.R_A=!0;break;case"zone":this.zone=parseInt(i,10);break;case"south":this.utmSouth=!0;break;case"towgs84":this.datum_params=i.split(",");break;case"to_meter":this.to_meter=parseFloat(i);break;case"from_greenwich":this.from_greenwich=i*Proj4js.common.D2R;break;case"pm":i=i.replace(/\s/gi,""),this.from_greenwich=Proj4js.PrimeMeridian[i]?Proj4js.PrimeMeridian[i]:parseFloat(i),this.from_greenwich*=Proj4js.common.D2R;break;case"axis":i=i.replace(/\s/gi,"");var n="ewnsud";3==i.length&&-1!=n.indexOf(i.substr(0,1))&&-1!=n.indexOf(i.substr(1,1))&&-1!=n.indexOf(i.substr(2,1))&&(this.axis=i);break;case"no_defs":break;default:}}this.deriveConstants()}},deriveConstants:function(){if("@null"==this.nagrids&&(this.datumCode="none"),this.datumCode&&"none"!=this.datumCode){var t=Proj4js.Datum[this.datumCode];t&&(this.datum_params=t.towgs84?t.towgs84.split(","):null,this.ellps=t.ellipse,this.datumName=t.datumName?t.datumName:this.datumCode)}if(!this.a){var i=Proj4js.Ellipsoid[this.ellps]?Proj4js.Ellipsoid[this.ellps]:Proj4js.Ellipsoid.WGS84;Proj4js.extend(this,i)}this.rf&&!this.b&&(this.b=(1-1/this.rf)*this.a),(0===this.rf||Math.abs(this.a-this.b)=a;a++)if(s=t*Math.sin(n),e=this.HALF_PI-2*Math.atan(i*Math.pow((1-s)/(1+s),o))-n,n+=e,1e-10>=Math.abs(e))return n;return alert("phi2z has NoConvergence"),-9999},qsfnz:function(t,i){var s;return t>1e-7?(s=t*i,(1-t*t)*(i/(1-s*s)-.5/t*Math.log((1-s)/(1+s)))):2*i},asinz:function(t){return Math.abs(t)>1&&(t=t>1?1:-1),Math.asin(t)},e0fn:function(t){return 1-.25*t*(1+t/16*(3+1.25*t))},e1fn:function(t){return.375*t*(1+.25*t*(1+.46875*t))},e2fn:function(t){return.05859375*t*t*(1+.75*t)},e3fn:function(t){return t*t*t*(35/3072)},mlfn:function(t,i,s,e,o){return t*o-i*Math.sin(2*o)+s*Math.sin(4*o)-e*Math.sin(6*o)},srat:function(t,i){return Math.pow((1-t)/(1+t),i)},sign:function(t){return 0>t?-1:1},adjust_lon:function(t){return t=Math.abs(t)this.HALF_PI)return+Number.NaN;if(i==this.HALF_PI)return Number.POSITIVE_INFINITY;if(i==-1*this.HALF_PI)return-1*Number.POSITIVE_INFINITY;var e=t*s;return Math.log(Math.tan((this.HALF_PI+i)/2))+t*Math.log((1-e)/(1+e))/2},fL:function(t,i){return 2*Math.atan(t*Math.exp(i))-this.HALF_PI},invlatiso:function(t,i){var s=this.fL(1,i),e=0,o=0;do e=s,o=t*Math.sin(e),s=this.fL(Math.exp(t*Math.log((1+o)/(1-o))/2),i);while(Math.abs(s-e)>1e-12);return s},sinh:function(t){var i=Math.exp(t);return i=(i-1/i)/2},cosh:function(t){var i=Math.exp(t);return i=(i+1/i)/2},tanh:function(t){var i=Math.exp(t);return i=(i-1/i)/(i+1/i)},asinh:function(t){var i=t>=0?1:-1;return i*Math.log(Math.abs(t)+Math.sqrt(t*t+1))},acosh:function(t){return 2*Math.log(Math.sqrt((t+1)/2)+Math.sqrt((t-1)/2))},atanh:function(t){return Math.log((t-1)/(t+1))/2},gN:function(t,i,s){var e=i*s;return t/Math.sqrt(1-e*e)},pj_enfn:function(t){var i=[];i[0]=this.C00-t*(this.C02+t*(this.C04+t*(this.C06+t*this.C08))),i[1]=t*(this.C22-t*(this.C04+t*(this.C06+t*this.C08)));var s=t*t;return i[2]=s*(this.C44-t*(this.C46+t*this.C48)),s*=t,i[3]=s*(this.C66-t*this.C68),i[4]=s*t*this.C88,i},pj_mlfn:function(t,i,s,e){return s*=i,i*=i,e[0]*t-s*(e[1]+i*(e[2]+i*(e[3]+i*e[4])))},pj_inv_mlfn:function(t,i,s){for(var e=1/(1-i),o=t,n=Proj4js.common.MAX_ITER;n;--n){var a=Math.sin(o),r=1-i*a*a;if(r=(this.pj_mlfn(o,a,Math.cos(o),s)-t)*r*Math.sqrt(r)*e,o-=r,Math.abs(r)i;i++)t.datum_params[i]=parseFloat(t.datum_params[i]);(0!=t.datum_params[0]||0!=t.datum_params[1]||0!=t.datum_params[2])&&(this.datum_type=Proj4js.common.PJD_3PARAM),t.datum_params.length>3&&(0!=t.datum_params[3]||0!=t.datum_params[4]||0!=t.datum_params[5]||0!=t.datum_params[6])&&(this.datum_type=Proj4js.common.PJD_7PARAM,t.datum_params[3]*=Proj4js.common.SEC_TO_RAD,t.datum_params[4]*=Proj4js.common.SEC_TO_RAD,t.datum_params[5]*=Proj4js.common.SEC_TO_RAD,t.datum_params[6]=t.datum_params[6]/1e6+1)}t&&(this.a=t.a,this.b=t.b,this.es=t.es,this.ep2=t.ep2,this.datum_params=t.datum_params)},compare_datums:function(t){return this.datum_type!=t.datum_type?!1:this.a!=t.a||Math.abs(this.es-t.es)>5e-11?!1:this.datum_type==Proj4js.common.PJD_3PARAM?this.datum_params[0]==t.datum_params[0]&&this.datum_params[1]==t.datum_params[1]&&this.datum_params[2]==t.datum_params[2]:this.datum_type==Proj4js.common.PJD_7PARAM?this.datum_params[0]==t.datum_params[0]&&this.datum_params[1]==t.datum_params[1]&&this.datum_params[2]==t.datum_params[2]&&this.datum_params[3]==t.datum_params[3]&&this.datum_params[4]==t.datum_params[4]&&this.datum_params[5]==t.datum_params[5]&&this.datum_params[6]==t.datum_params[6]:this.datum_type==Proj4js.common.PJD_GRIDSHIFT||t.datum_type==Proj4js.common.PJD_GRIDSHIFT?(alert("ERROR: Grid shift transformations are not implemented."),!1):!0},geodetic_to_geocentric:function(t){var i,s,e,o,n,a,r,h=t.x,l=t.y,c=t.z?t.z:0,m=0;if(-Proj4js.common.HALF_PI>l&&l>-1.001*Proj4js.common.HALF_PI)l=-Proj4js.common.HALF_PI;else if(l>Proj4js.common.HALF_PI&&1.001*Proj4js.common.HALF_PI>l)l=Proj4js.common.HALF_PI;else if(-Proj4js.common.HALF_PI>l||l>Proj4js.common.HALF_PI)return Proj4js.reportError("geocent:lat out of range:"+l),null;return h>Proj4js.common.PI&&(h-=2*Proj4js.common.PI),n=Math.sin(l),r=Math.cos(l),a=n*n,o=this.a/Math.sqrt(1-this.es*a),i=(o+c)*r*Math.cos(h),s=(o+c)*r*Math.sin(h),e=(o*(1-this.es)+c)*n,t.x=i,t.y=s,t.z=e,m},geocentric_to_geodetic:function(t){var i,s,e,o,n,a,r,h,l,c,m,u,d,p,_,f,P,y=1e-12,g=y*y,L=30,v=t.x,j=t.y,M=t.z?t.z:0;if(d=!1,i=Math.sqrt(v*v+j*j),s=Math.sqrt(v*v+j*j+M*M),y>i/this.a){if(d=!0,_=0,y>s/this.a)return f=Proj4js.common.HALF_PI,P=-this.b,void 0}else _=Math.atan2(j,v);e=M/s,o=i/s,n=1/Math.sqrt(1-this.es*(2-this.es)*o*o),h=o*(1-this.es)*n,l=e*n,p=0;do p++,r=this.a/Math.sqrt(1-this.es*l*l),P=i*h+M*l-r*(1-this.es*l*l),a=this.es*r/(r+P),n=1/Math.sqrt(1-a*(2-a)*o*o),c=o*(1-a)*n,m=e*n,u=m*h-c*l,h=c,l=m;while(u*u>g&&L>p);return f=Math.atan(m/Math.abs(c)),t.x=_,t.y=f,t.z=P,t},geocentric_to_geodetic_noniter:function(t){var i,s,e,o,n,a,r,h,l,c,m,u,d,p,_,f,P,y=t.x,g=t.y,L=t.z?t.z:0;if(y=parseFloat(y),g=parseFloat(g),L=parseFloat(L),P=!1,0!=y)i=Math.atan2(g,y);else if(g>0)i=Proj4js.common.HALF_PI;else if(0>g)i=-Proj4js.common.HALF_PI;else if(P=!0,i=0,L>0)s=Proj4js.common.HALF_PI;else{if(!(0>L))return s=Proj4js.common.HALF_PI,e=-this.b,void 0;s=-Proj4js.common.HALF_PI}return n=y*y+g*g,o=Math.sqrt(n),a=L*Proj4js.common.AD_C,h=Math.sqrt(a*a+n),c=a/h,u=o/h,m=c*c*c,r=L+this.b*this.ep2*m,f=o-this.a*this.es*u*u*u,l=Math.sqrt(r*r+f*f),d=r/l,p=f/l,_=this.a/Math.sqrt(1-this.es*d*d),e=p>=Proj4js.common.COS_67P5?o/p-_:-Proj4js.common.COS_67P5>=p?o/-p-_:L/d+_*(this.es-1),0==P&&(s=Math.atan(d/p)),t.x=i,t.y=s,t.z=e,t},geocentric_to_wgs84:function(t){if(this.datum_type==Proj4js.common.PJD_3PARAM)t.x+=this.datum_params[0],t.y+=this.datum_params[1],t.z+=this.datum_params[2];else if(this.datum_type==Proj4js.common.PJD_7PARAM){var i=this.datum_params[0],s=this.datum_params[1],e=this.datum_params[2],o=this.datum_params[3],n=this.datum_params[4],a=this.datum_params[5],r=this.datum_params[6],h=r*(t.x-a*t.y+n*t.z)+i,l=r*(a*t.x+t.y-o*t.z)+s,c=r*(-n*t.x+o*t.y+t.z)+e;t.x=h,t.y=l,t.z=c}},geocentric_from_wgs84:function(t){if(this.datum_type==Proj4js.common.PJD_3PARAM)t.x-=this.datum_params[0],t.y-=this.datum_params[1],t.z-=this.datum_params[2];else if(this.datum_type==Proj4js.common.PJD_7PARAM){var i=this.datum_params[0],s=this.datum_params[1],e=this.datum_params[2],o=this.datum_params[3],n=this.datum_params[4],a=this.datum_params[5],r=this.datum_params[6],h=(t.x-i)/r,l=(t.y-s)/r,c=(t.z-e)/r;t.x=h+a*l-n*c,t.y=-a*h+l+o*c,t.z=n*h-o*l+c}}}),Proj4js.Point=Proj4js.Class({initialize:function(t,i,s){if("object"==typeof t)this.x=t[0],this.y=t[1],this.z=t[2]||0;else if("string"==typeof t&&i===void 0){var e=t.split(",");this.x=parseFloat(e[0]),this.y=parseFloat(e[1]),this.z=parseFloat(e[2])||0}else this.x=t,this.y=i,this.z=s||0},clone:function(){return new Proj4js.Point(this.x,this.y,this.z)},toString:function(){return"x="+this.x+",y="+this.y},toShortString:function(){return this.x+", "+this.y}}),Proj4js.PrimeMeridian={greenwich:0,lisbon:-9.131906111111,paris:2.337229166667,bogota:-74.080916666667,madrid:-3.687938888889,rome:12.452333333333,bern:7.439583333333,jakarta:106.807719444444,ferro:-17.666666666667,brussels:4.367975,stockholm:18.058277777778,athens:23.7163375,oslo:10.722916666667},Proj4js.Ellipsoid={MERIT:{a:6378137,rf:298.257,ellipseName:"MERIT 1983"},SGS85:{a:6378136,rf:298.257,ellipseName:"Soviet Geodetic System 85"},GRS80:{a:6378137,rf:298.257222101,ellipseName:"GRS 1980(IUGG, 1980)"},IAU76:{a:6378140,rf:298.257,ellipseName:"IAU 1976"},airy:{a:6377563.396,b:6356256.91,ellipseName:"Airy 1830"},"APL4.":{a:6378137,rf:298.25,ellipseName:"Appl. Physics. 1965"},NWL9D:{a:6378145,rf:298.25,ellipseName:"Naval Weapons Lab., 1965"},mod_airy:{a:6377340.189,b:6356034.446,ellipseName:"Modified Airy"},andrae:{a:6377104.43,rf:300,ellipseName:"Andrae 1876 (Den., Iclnd.)"},aust_SA:{a:6378160,rf:298.25,ellipseName:"Australian Natl & S. Amer. 1969"},GRS67:{a:6378160,rf:298.247167427,ellipseName:"GRS 67(IUGG 1967)"},bessel:{a:6377397.155,rf:299.1528128,ellipseName:"Bessel 1841"},bess_nam:{a:6377483.865,rf:299.1528128,ellipseName:"Bessel 1841 (Namibia)"},clrk66:{a:6378206.4,b:6356583.8,ellipseName:"Clarke 1866"},clrk80:{a:6378249.145,rf:293.4663,ellipseName:"Clarke 1880 mod."},CPM:{a:6375738.7,rf:334.29,ellipseName:"Comm. des Poids et Mesures 1799"},delmbr:{a:6376428,rf:311.5,ellipseName:"Delambre 1810 (Belgium)"},engelis:{a:6378136.05,rf:298.2566,ellipseName:"Engelis 1985"},evrst30:{a:6377276.345,rf:300.8017,ellipseName:"Everest 1830"},evrst48:{a:6377304.063,rf:300.8017,ellipseName:"Everest 1948"},evrst56:{a:6377301.243,rf:300.8017,ellipseName:"Everest 1956"},evrst69:{a:6377295.664,rf:300.8017,ellipseName:"Everest 1969"},evrstSS:{a:6377298.556,rf:300.8017,ellipseName:"Everest (Sabah & Sarawak)"},fschr60:{a:6378166,rf:298.3,ellipseName:"Fischer (Mercury Datum) 1960"},fschr60m:{a:6378155,rf:298.3,ellipseName:"Fischer 1960"},fschr68:{a:6378150,rf:298.3,ellipseName:"Fischer 1968"},helmert:{a:6378200,rf:298.3,ellipseName:"Helmert 1906"},hough:{a:6378270,rf:297,ellipseName:"Hough"},intl:{a:6378388,rf:297,ellipseName:"International 1909 (Hayford)"},kaula:{a:6378163,rf:298.24,ellipseName:"Kaula 1961"},lerch:{a:6378139,rf:298.257,ellipseName:"Lerch 1979"},mprts:{a:6397300,rf:191,ellipseName:"Maupertius 1738"},new_intl:{a:6378157.5,b:6356772.2,ellipseName:"New International 1967"},plessis:{a:6376523,rf:6355863,ellipseName:"Plessis 1817 (France)"},krass:{a:6378245,rf:298.3,ellipseName:"Krassovsky, 1942"},SEasia:{a:6378155,b:6356773.3205,ellipseName:"Southeast Asia"},walbeck:{a:6376896,b:6355834.8467,ellipseName:"Walbeck"},WGS60:{a:6378165,rf:298.3,ellipseName:"WGS 60"},WGS66:{a:6378145,rf:298.25,ellipseName:"WGS 66"},WGS72:{a:6378135,rf:298.26,ellipseName:"WGS 72"},WGS84:{a:6378137,rf:298.257223563,ellipseName:"WGS 84"},sphere:{a:6370997,b:6370997,ellipseName:"Normal Sphere (r=6370997)"}},Proj4js.Datum={WGS84:{towgs84:"0,0,0",ellipse:"WGS84",datumName:"WGS84"},GGRS87:{towgs84:"-199.87,74.79,246.62",ellipse:"GRS80",datumName:"Greek_Geodetic_Reference_System_1987"},NAD83:{towgs84:"0,0,0",ellipse:"GRS80",datumName:"North_American_Datum_1983"},NAD27:{nadgrids:"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat",ellipse:"clrk66",datumName:"North_American_Datum_1927"},potsdam:{towgs84:"606.0,23.0,413.0",ellipse:"bessel",datumName:"Potsdam Rauenberg 1950 DHDN"},carthage:{towgs84:"-263.0,6.0,431.0",ellipse:"clark80",datumName:"Carthage 1934 Tunisia"},hermannskogel:{towgs84:"653.0,-212.0,449.0",ellipse:"bessel",datumName:"Hermannskogel"},ire65:{towgs84:"482.530,-130.596,564.557,-1.042,-0.214,-0.631,8.15",ellipse:"mod_airy",datumName:"Ireland 1965"},nzgd49:{towgs84:"59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993",ellipse:"intl",datumName:"New Zealand Geodetic Datum 1949"},OSGB36:{towgs84:"446.448,-125.157,542.060,0.1502,0.2470,0.8421,-20.4894",ellipse:"airy",datumName:"Airy 1830"}},Proj4js.WGS84=new Proj4js.Proj("WGS84"),Proj4js.Datum.OSB36=Proj4js.Datum.OSGB36,Proj4js.wktProjections={"Lambert Tangential Conformal Conic Projection":"lcc",Mercator:"merc","Popular Visualisation Pseudo Mercator":"merc",Mercator_1SP:"merc",Transverse_Mercator:"tmerc","Transverse Mercator":"tmerc","Lambert Azimuthal Equal Area":"laea","Universal Transverse Mercator System":"utm"},Proj4js.Proj.aea={init:function(){return Math.abs(this.lat1+this.lat2)Proj4js.common.EPSLN?(this.ms1*this.ms1-this.ms2*this.ms2)/(this.qs2-this.qs1):this.con,this.c=this.ms1*this.ms1+this.ns0*this.qs1,this.rh=this.a*Math.sqrt(this.c-this.ns0*this.qs0)/this.ns0,void 0)},forward:function(t){var i=t.x,s=t.y;this.sin_phi=Math.sin(s),this.cos_phi=Math.cos(s);var e=Proj4js.common.qsfnz(this.e3,this.sin_phi,this.cos_phi),o=this.a*Math.sqrt(this.c-this.ns0*e)/this.ns0,n=this.ns0*Proj4js.common.adjust_lon(i-this.long0),a=o*Math.sin(n)+this.x0,r=this.rh-o*Math.cos(n)+this.y0;return t.x=a,t.y=r,t},inverse:function(t){var i,s,e,o,n,a;return t.x-=this.x0,t.y=this.rh-t.y+this.y0,this.ns0>=0?(i=Math.sqrt(t.x*t.x+t.y*t.y),e=1):(i=-Math.sqrt(t.x*t.x+t.y*t.y),e=-1),o=0,0!=i&&(o=Math.atan2(e*t.x,e*t.y)),e=i*this.ns0/this.a,s=(this.c-e*e)/this.ns0,this.e3>=1e-10?(e=1-.5*(1-this.es)*Math.log((1-this.e3)/(1+this.e3))/this.e3,a=Math.abs(Math.abs(e)-Math.abs(s))>1e-10?this.phi1z(this.e3,s):s>=0?.5*Proj4js.common.PI:-.5*Proj4js.common.PI):a=this.phi1z(this.e3,s),n=Proj4js.common.adjust_lon(o/this.ns0+this.long0),t.x=n,t.y=a,t},phi1z:function(t,i){var s,e,o,n,a,r=Proj4js.common.asinz(.5*i);if(Proj4js.common.EPSLN>t)return r;for(var h=t*t,l=1;25>=l;l++)if(s=Math.sin(r),e=Math.cos(r),o=t*s,n=1-o*o,a=.5*n*n/e*(i/(1-h)-s/n+.5/t*Math.log((1-o)/(1+o))),r+=a,1e-7>=Math.abs(a))return r;return Proj4js.reportError("aea:phi1z:Convergence error"),null}},Proj4js.Proj.sterea={dependsOn:"gauss",init:function(){return Proj4js.Proj.gauss.init.apply(this),this.rc?(this.sinc0=Math.sin(this.phic0),this.cosc0=Math.cos(this.phic0),this.R2=2*this.rc,this.title||(this.title="Oblique Stereographic Alternative"),void 0):(Proj4js.reportError("sterea:init:E_ERROR_0"),void 0)},forward:function(t){var i,s,e,o;return t.x=Proj4js.common.adjust_lon(t.x-this.long0),Proj4js.Proj.gauss.forward.apply(this,[t]),i=Math.sin(t.y),s=Math.cos(t.y),e=Math.cos(t.x),o=this.k0*this.R2/(1+this.sinc0*i+this.cosc0*s*e),t.x=o*s*Math.sin(t.x),t.y=o*(this.cosc0*i-this.sinc0*s*e),t.x=this.a*t.x+this.x0,t.y=this.a*t.y+this.y0,t},inverse:function(t){var i,s,e,o,n;if(t.x=(t.x-this.x0)/this.a,t.y=(t.y-this.y0)/this.a,t.x/=this.k0,t.y/=this.k0,n=Math.sqrt(t.x*t.x+t.y*t.y)){var a=2*Math.atan2(n,this.R2);i=Math.sin(a),s=Math.cos(a),o=Math.asin(s*this.sinc0+t.y*i*this.cosc0/n),e=Math.atan2(t.x*i,n*this.cosc0*s-t.y*this.sinc0*i)}else o=this.phic0,e=0;return t.x=e,t.y=o,Proj4js.Proj.gauss.inverse.apply(this,[t]),t.x=Proj4js.common.adjust_lon(t.x+this.long0),t}},Proj4js.Proj.poly={init:function(){0==this.lat0&&(this.lat0=90),this.temp=this.b/this.a,this.es=1-Math.pow(this.temp,2),this.e=Math.sqrt(this.es),this.e0=Proj4js.common.e0fn(this.es),this.e1=Proj4js.common.e1fn(this.es),this.e2=Proj4js.common.e2fn(this.es),this.e3=Proj4js.common.e3fn(this.es),this.ml0=Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,this.lat0)},forward:function(t){var i,s,e,o,n,a,r,h=t.x,l=t.y;return e=Proj4js.common.adjust_lon(h-this.long0),1e-7>=Math.abs(l)?(a=this.x0+this.a*e,r=this.y0-this.a*this.ml0):(i=Math.sin(l),s=Math.cos(l),o=Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,l),n=Proj4js.common.msfnz(this.e,i,s),e=i,a=this.x0+this.a*n*Math.sin(e)/i,r=this.y0+this.a*(o-this.ml0+n*(1-Math.cos(e))/i)),t.x=a,t.y=r,t},inverse:function(t){var i,s,e,o,n,a;if(t.x-=this.x0,t.y-=this.y0,i=this.ml0+t.y/this.a,o=0,1e-7>=Math.abs(i))n=t.x/this.a+this.long0,a=0;else{if(s=i*i+t.x/this.a*(t.x/this.a),o=phi4z(this.es,this.e0,this.e1,this.e2,this.e3,this.al,s,e,a),1!=o)return o;n=Proj4js.common.adjust_lon(Proj4js.common.asinz(t.x*e/this.a)/Math.sin(a)+this.long0)}return t.x=n,t.y=a,t}},Proj4js.Proj.equi={init:function(){this.x0||(this.x0=0),this.y0||(this.y0=0),this.lat0||(this.lat0=0),this.long0||(this.long0=0)},forward:function(t){var i=t.x,s=t.y,e=Proj4js.common.adjust_lon(i-this.long0),o=this.x0+this.a*e*Math.cos(this.lat0),n=this.y0+this.a*s;return this.t1=o,this.t2=Math.cos(this.lat0),t.x=o,t.y=n,t},inverse:function(t){t.x-=this.x0,t.y-=this.y0;var i=t.y/this.a;Math.abs(i)>Proj4js.common.HALF_PI&&Proj4js.reportError("equi:Inv:DataError");var s=Proj4js.common.adjust_lon(this.long0+t.x/(this.a*Math.cos(this.lat0)));t.x=s,t.y=i}},Proj4js.Proj.merc={init:function(){this.lat_ts&&(this.k0=this.sphere?Math.cos(this.lat_ts):Proj4js.common.msfnz(this.es,Math.sin(this.lat_ts),Math.cos(this.lat_ts)))},forward:function(t){var i=t.x,s=t.y;if(s*Proj4js.common.R2D>90&&-90>s*Proj4js.common.R2D&&i*Proj4js.common.R2D>180&&-180>i*Proj4js.common.R2D)return Proj4js.reportError("merc:forward: llInputOutOfRange: "+i+" : "+s),null;var e,o;if(Math.abs(Math.abs(s)-Proj4js.common.HALF_PI)<=Proj4js.common.EPSLN)return Proj4js.reportError("merc:forward: ll2mAtPoles"),null;if(this.sphere)e=this.x0+this.a*this.k0*Proj4js.common.adjust_lon(i-this.long0),o=this.y0+this.a*this.k0*Math.log(Math.tan(Proj4js.common.FORTPI+.5*s));else{var n=Math.sin(s),a=Proj4js.common.tsfnz(this.e,s,n);e=this.x0+this.a*this.k0*Proj4js.common.adjust_lon(i-this.long0),o=this.y0-this.a*this.k0*Math.log(a)}return t.x=e,t.y=o,t},inverse:function(t){var i,s,e=t.x-this.x0,o=t.y-this.y0;if(this.sphere)s=Proj4js.common.HALF_PI-2*Math.atan(Math.exp(-o/this.a*this.k0));else{var n=Math.exp(-o/(this.a*this.k0));if(s=Proj4js.common.phi2z(this.e,n),-9999==s)return Proj4js.reportError("merc:inverse: lat = -9999"),null}return i=Proj4js.common.adjust_lon(this.long0+e/(this.a*this.k0)),t.x=i,t.y=s,t}},Proj4js.Proj.utm={dependsOn:"tmerc",init:function(){return this.zone?(this.lat0=0,this.long0=(6*Math.abs(this.zone)-183)*Proj4js.common.D2R,this.x0=5e5,this.y0=this.utmSouth?1e7:0,this.k0=.9996,Proj4js.Proj.tmerc.init.apply(this),this.forward=Proj4js.Proj.tmerc.forward,this.inverse=Proj4js.Proj.tmerc.inverse,void 0):(Proj4js.reportError("utm:init: zone must be specified for UTM"),void 0)}},Proj4js.Proj.eqdc={init:function(){this.mode||(this.mode=0),this.temp=this.b/this.a,this.es=1-Math.pow(this.temp,2),this.e=Math.sqrt(this.es),this.e0=Proj4js.common.e0fn(this.es),this.e1=Proj4js.common.e1fn(this.es),this.e2=Proj4js.common.e2fn(this.es),this.e3=Proj4js.common.e3fn(this.es),this.sinphi=Math.sin(this.lat1),this.cosphi=Math.cos(this.lat1),this.ms1=Proj4js.common.msfnz(this.e,this.sinphi,this.cosphi),this.ml1=Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,this.lat1),0!=this.mode?(Math.abs(this.lat1+this.lat2)=Proj4js.common.EPSLN?(this.ms1-this.ms2)/(this.ml2-this.ml1):this.sinphi):this.ns=this.sinphi,this.g=this.ml1+this.ms1/this.ns,this.ml0=Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,this.lat0),this.rh=this.a*(this.g-this.ml0) +},forward:function(t){var i=t.x,s=t.y,e=Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,s),o=this.a*(this.g-e),n=this.ns*Proj4js.common.adjust_lon(i-this.long0),a=this.x0+o*Math.sin(n),r=this.y0+this.rh-o*Math.cos(n);return t.x=a,t.y=r,t},inverse:function(t){t.x-=this.x0,t.y=this.rh-t.y+this.y0;var i,s;this.ns>=0?(s=Math.sqrt(t.x*t.x+t.y*t.y),i=1):(s=-Math.sqrt(t.x*t.x+t.y*t.y),i=-1);var e=0;0!=s&&(e=Math.atan2(i*t.x,i*t.y));var o=this.g-s/this.a,n=this.phi3z(o,this.e0,this.e1,this.e2,this.e3),a=Proj4js.common.adjust_lon(this.long0+e/this.ns);return t.x=a,t.y=n,t},phi3z:function(t,i,s,e,o){var n,a;n=t;for(var r=0;15>r;r++)if(a=(t+s*Math.sin(2*n)-e*Math.sin(4*n)+o*Math.sin(6*n))/i-n,n+=a,1e-10>=Math.abs(a))return n;return Proj4js.reportError("PHI3Z-CONV:Latitude failed to converge after 15 iterations"),null}},Proj4js.Proj.tmerc={init:function(){this.e0=Proj4js.common.e0fn(this.es),this.e1=Proj4js.common.e1fn(this.es),this.e2=Proj4js.common.e2fn(this.es),this.e3=Proj4js.common.e3fn(this.es),this.ml0=this.a*Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,this.lat0)},forward:function(t){var i,s,e,o=t.x,n=t.y,a=Proj4js.common.adjust_lon(o-this.long0),r=Math.sin(n),h=Math.cos(n);if(this.sphere){var l=h*Math.sin(a);if(1e-10>Math.abs(Math.abs(l)-1))return Proj4js.reportError("tmerc:forward: Point projects into infinity"),93;s=.5*this.a*this.k0*Math.log((1+l)/(1-l)),i=Math.acos(h*Math.cos(a)/Math.sqrt(1-l*l)),0>n&&(i=-i),e=this.a*this.k0*(i-this.lat0)}else{var c=h*a,m=Math.pow(c,2),u=this.ep2*Math.pow(h,2),d=Math.tan(n),p=Math.pow(d,2);i=1-this.es*Math.pow(r,2);var _=this.a/Math.sqrt(i),f=this.a*Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,n);s=this.k0*_*c*(1+m/6*(1-p+u+m/20*(5-18*p+Math.pow(p,2)+72*u-58*this.ep2)))+this.x0,e=this.k0*(f-this.ml0+_*d*m*(.5+m/24*(5-p+9*u+4*Math.pow(u,2)+m/30*(61-58*p+Math.pow(p,2)+600*u-330*this.ep2))))+this.y0}return t.x=s,t.y=e,t},inverse:function(t){var i,s,e,o,n,a,r=6;if(this.sphere){var h=Math.exp(t.x/(this.a*this.k0)),l=.5*(h-1/h),c=this.lat0+t.y/(this.a*this.k0),m=Math.cos(c);i=Math.sqrt((1-m*m)/(1+l*l)),n=Proj4js.common.asinz(i),0>c&&(n=-n),a=0==l&&0==m?this.long0:Proj4js.common.adjust_lon(Math.atan2(l,m)+this.long0)}else{var u=t.x-this.x0,d=t.y-this.y0;for(i=(this.ml0+d/this.k0)/this.a,s=i,o=0;!0&&(e=(i+this.e1*Math.sin(2*s)-this.e2*Math.sin(4*s)+this.e3*Math.sin(6*s))/this.e0-s,s+=e,!(Math.abs(e)<=Proj4js.common.EPSLN));o++)if(o>=r)return Proj4js.reportError("tmerc:inverse: Latitude failed to converge"),95;if(Math.abs(s)0||Math.abs(a)<=Proj4js.common.EPSLN)var l=this.a*n*s*Math.sin(e),c=this.y0+this.a*n*(this.cos_p14*i-this.sin_p14*s*o);else Proj4js.reportError("orthoFwdPointError");return t.x=l,t.y=c,t},inverse:function(t){var i,s,e,o,n,a,r;return t.x-=this.x0,t.y-=this.y0,i=Math.sqrt(t.x*t.x+t.y*t.y),i>this.a+1e-7&&Proj4js.reportError("orthoInvDataError"),s=Proj4js.common.asinz(i/this.a),e=Math.sin(s),o=Math.cos(s),a=this.long0,Math.abs(i)<=Proj4js.common.EPSLN&&(r=this.lat0),r=Proj4js.common.asinz(o*this.sin_p14+t.y*e*this.cos_p14/i),n=Math.abs(this.lat0)-Proj4js.common.HALF_PI,Math.abs(n)<=Proj4js.common.EPSLN&&(a=this.lat0>=0?Proj4js.common.adjust_lon(this.long0+Math.atan2(t.x,-t.y)):Proj4js.common.adjust_lon(this.long0-Math.atan2(-t.x,t.y))),n=o-this.sin_p14*Math.sin(r),t.x=a,t.y=r,t}},Proj4js.Proj.krovak={init:function(){this.a=6377397.155,this.es=.006674372230614,this.e=Math.sqrt(this.es),this.lat0||(this.lat0=.863937979737193),this.long0||(this.long0=.4334234309119251),this.k0||(this.k0=.9999),this.s45=.785398163397448,this.s90=2*this.s45,this.fi0=this.lat0,this.e2=this.es,this.e=Math.sqrt(this.e2),this.alfa=Math.sqrt(1+this.e2*Math.pow(Math.cos(this.fi0),4)/(1-this.e2)),this.uq=1.04216856380474,this.u0=Math.asin(Math.sin(this.fi0)/this.alfa),this.g=Math.pow((1+this.e*Math.sin(this.fi0))/(1-this.e*Math.sin(this.fi0)),this.alfa*this.e/2),this.k=Math.tan(this.u0/2+this.s45)/Math.pow(Math.tan(this.fi0/2+this.s45),this.alfa)*this.g,this.k1=this.k0,this.n0=this.a*Math.sqrt(1-this.e2)/(1-this.e2*Math.pow(Math.sin(this.fi0),2)),this.s0=1.37008346281555,this.n=Math.sin(this.s0),this.ro0=this.k1*this.n0/Math.tan(this.s0),this.ad=this.s90-this.uq},forward:function(t){var i,s,e,o,n,a,r,h=t.x,l=t.y,c=Proj4js.common.adjust_lon(h-this.long0);return i=Math.pow((1+this.e*Math.sin(l))/(1-this.e*Math.sin(l)),this.alfa*this.e/2),s=2*(Math.atan(this.k*Math.pow(Math.tan(l/2+this.s45),this.alfa)/i)-this.s45),e=-c*this.alfa,o=Math.asin(Math.cos(this.ad)*Math.sin(s)+Math.sin(this.ad)*Math.cos(s)*Math.cos(e)),n=Math.asin(Math.cos(s)*Math.sin(e)/Math.cos(o)),a=this.n*n,r=this.ro0*Math.pow(Math.tan(this.s0/2+this.s45),this.n)/Math.pow(Math.tan(o/2+this.s45),this.n),t.y=r*Math.cos(a)/1,t.x=r*Math.sin(a)/1,this.czech&&(t.y*=-1,t.x*=-1),t},inverse:function(t){var i,s,e,o,n,a,r,h,l=t.x;t.x=t.y,t.y=l,this.czech&&(t.y*=-1,t.x*=-1),a=Math.sqrt(t.x*t.x+t.y*t.y),n=Math.atan2(t.y,t.x),o=n/Math.sin(this.s0),e=2*(Math.atan(Math.pow(this.ro0/a,1/this.n)*Math.tan(this.s0/2+this.s45))-this.s45),i=Math.asin(Math.cos(this.ad)*Math.sin(e)-Math.sin(this.ad)*Math.cos(e)*Math.cos(o)),s=Math.asin(Math.cos(e)*Math.sin(o)/Math.cos(i)),t.x=this.long0-s/this.alfa,r=i,h=0;var c=0;do t.y=2*(Math.atan(Math.pow(this.k,-1/this.alfa)*Math.pow(Math.tan(i/2+this.s45),1/this.alfa)*Math.pow((1+this.e*Math.sin(r))/(1-this.e*Math.sin(r)),this.e/2))-this.s45),1e-10>Math.abs(r-t.y)&&(h=1),r=t.y,c+=1;while(0==h&&15>c);return c>=15?(Proj4js.reportError("PHI3Z-CONV:Latitude failed to converge after 15 iterations"),null):t}},Proj4js.Proj.somerc={init:function(){var t=this.lat0;this.lambda0=this.long0;var i=Math.sin(t),s=this.a,e=this.rf,o=1/e,n=2*o-Math.pow(o,2),a=this.e=Math.sqrt(n);this.R=this.k0*s*Math.sqrt(1-n)/(1-n*Math.pow(i,2)),this.alpha=Math.sqrt(1+n/(1-n)*Math.pow(Math.cos(t),4)),this.b0=Math.asin(i/this.alpha),this.K=Math.log(Math.tan(Math.PI/4+this.b0/2))-this.alpha*Math.log(Math.tan(Math.PI/4+t/2))+this.alpha*a/2*Math.log((1+a*i)/(1-a*i))},forward:function(t){var i=Math.log(Math.tan(Math.PI/4-t.y/2)),s=this.e/2*Math.log((1+this.e*Math.sin(t.y))/(1-this.e*Math.sin(t.y))),e=-this.alpha*(i+s)+this.K,o=2*(Math.atan(Math.exp(e))-Math.PI/4),n=this.alpha*(t.x-this.lambda0),a=Math.atan(Math.sin(n)/(Math.sin(this.b0)*Math.tan(o)+Math.cos(this.b0)*Math.cos(n))),r=Math.asin(Math.cos(this.b0)*Math.sin(o)-Math.sin(this.b0)*Math.cos(o)*Math.cos(n));return t.y=this.R/2*Math.log((1+Math.sin(r))/(1-Math.sin(r)))+this.y0,t.x=this.R*a+this.x0,t},inverse:function(t){for(var i=t.x-this.x0,s=t.y-this.y0,e=i/this.R,o=2*(Math.atan(Math.exp(s/this.R))-Math.PI/4),n=Math.asin(Math.cos(this.b0)*Math.sin(o)+Math.sin(this.b0)*Math.cos(o)*Math.cos(e)),a=Math.atan(Math.sin(e)/(Math.cos(this.b0)*Math.cos(e)-Math.sin(this.b0)*Math.tan(o))),r=this.lambda0+a/this.alpha,h=0,l=n,c=-1e3,m=0;Math.abs(l-c)>1e-7;){if(++m>20)return Proj4js.reportError("omercFwdInfinity"),void 0;h=1/this.alpha*(Math.log(Math.tan(Math.PI/4+n/2))-this.K)+this.e*Math.log(Math.tan(Math.PI/4+Math.asin(this.e*Math.sin(l))/2)),c=l,l=2*Math.atan(Math.exp(h))-Math.PI/2}return t.x=r,t.y=l,t}},Proj4js.Proj.stere={ssfn_:function(t,i,s){return i*=s,Math.tan(.5*(Proj4js.common.HALF_PI+t))*Math.pow((1-i)/(1+i),.5*s)},TOL:1e-8,NITER:8,CONV:1e-10,S_POLE:0,N_POLE:1,OBLIQ:2,EQUIT:3,init:function(){this.phits=this.lat_ts?this.lat_ts:Proj4js.common.HALF_PI;var t=Math.abs(this.lat0);if(this.mode=Math.abs(t)-Proj4js.common.HALF_PIthis.lat0?this.S_POLE:this.N_POLE:t>Proj4js.common.EPSLN?this.OBLIQ:this.EQUIT,this.phits=Math.abs(this.phits),this.es){var i;switch(this.mode){case this.N_POLE:case this.S_POLE:Math.abs(this.phits-Proj4js.common.HALF_PI)=Proj4js.common.EPSLN?Math.cos(this.phits)/Math.tan(Proj4js.common.FORTPI-.5*this.phits):2*this.k0}},forward:function(t){var i=t.x;i=Proj4js.common.adjust_lon(i-this.long0);var s,e,o=t.y;if(this.sphere){var n,a,r,h;switch(n=Math.sin(o),a=Math.cos(o),r=Math.cos(i),h=Math.sin(i),this.mode){case this.EQUIT:e=1+a*r,Proj4js.common.EPSLN>=e&&Proj4js.reportError("stere:forward:Equit"),e=this.akm1/e,s=e*a*h,e*=n;break;case this.OBLIQ:e=1+this.sinph0*n+this.cosph0*a*r,Proj4js.common.EPSLN>=e&&Proj4js.reportError("stere:forward:Obliq"),e=this.akm1/e,s=e*a*h,e*=this.cosph0*n-this.sinph0*a*r;break;case this.N_POLE:r=-r,o=-o;case this.S_POLE:Math.abs(o-Proj4js.common.HALF_PI)=l;l++)r*=n,h+=this.A[l]*r;for(var c,m,u=h,d=a,p=1,_=0,f=0,P=0,l=1;6>=l;l++)c=p*u-_*d,m=_*u+p*d,p=c,_=m,f=f+this.B_re[l]*p-this.B_im[l]*_,P=P+this.B_im[l]*p+this.B_re[l]*_;return t.x=P*this.a+this.x0,t.y=f*this.a+this.y0,t},inverse:function(t){for(var i,s,e=t.x,o=t.y,n=e-this.x0,a=o-this.y0,r=a/this.a,h=n/this.a,l=1,c=0,m=0,u=0,d=1;6>=d;d++)i=l*r-c*h,s=c*r+l*h,l=i,c=s,m=m+this.C_re[d]*l-this.C_im[d]*c,u=u+this.C_im[d]*l+this.C_re[d]*c;for(var p=0;this.iterations>p;p++){for(var _,f,P=m,y=u,g=r,L=h,d=2;6>=d;d++)_=P*m-y*u,f=y*m+P*u,P=_,y=f,g+=(d-1)*(this.B_re[d]*P-this.B_im[d]*y),L+=(d-1)*(this.B_im[d]*P+this.B_re[d]*y);P=1,y=0;for(var v=this.B_re[1],j=this.B_im[1],d=2;6>=d;d++)_=P*m-y*u,f=y*m+P*u,P=_,y=f,v+=d*(this.B_re[d]*P-this.B_im[d]*y),j+=d*(this.B_im[d]*P+this.B_re[d]*y);var M=v*v+j*j;m=(g*v+L*j)/M,u=(L*v-g*j)/M}for(var S=m,b=u,x=1,E=0,d=1;9>=d;d++)x*=S,E+=this.D[d]*x;var C=this.lat0+1e5*E*Proj4js.common.SEC_TO_RAD,w=this.long0+b;return t.x=w,t.y=C,t}},Proj4js.Proj.mill={init:function(){},forward:function(t){var i=t.x,s=t.y,e=Proj4js.common.adjust_lon(i-this.long0),o=this.x0+this.a*e,n=this.y0+1.25*this.a*Math.log(Math.tan(Proj4js.common.PI/4+s/2.5));return t.x=o,t.y=n,t},inverse:function(t){t.x-=this.x0,t.y-=this.y0;var i=Proj4js.common.adjust_lon(this.long0+t.x/this.a),s=2.5*(Math.atan(Math.exp(.8*t.y/this.a))-Proj4js.common.PI/4);return t.x=i,t.y=s,t}},Proj4js.Proj.gnom={init:function(){this.sin_p14=Math.sin(this.lat0),this.cos_p14=Math.cos(this.lat0),this.infinity_dist=1e3*this.a,this.rc=1},forward:function(t){var i,s,e,o,n,a,r,h,l=t.x,c=t.y;return e=Proj4js.common.adjust_lon(l-this.long0),i=Math.sin(c),s=Math.cos(c),o=Math.cos(e),a=this.sin_p14*i+this.cos_p14*s*o,n=1,a>0||Math.abs(a)<=Proj4js.common.EPSLN?(r=this.x0+this.a*n*s*Math.sin(e)/a,h=this.y0+this.a*n*(this.cos_p14*i-this.sin_p14*s*o)/a):(Proj4js.reportError("orthoFwdPointError"),r=this.x0+this.infinity_dist*s*Math.sin(e),h=this.y0+this.infinity_dist*(this.cos_p14*i-this.sin_p14*s*o)),t.x=r,t.y=h,t},inverse:function(t){var i,s,e,o,n,a;return t.x=(t.x-this.x0)/this.a,t.y=(t.y-this.y0)/this.a,t.x/=this.k0,t.y/=this.k0,(i=Math.sqrt(t.x*t.x+t.y*t.y))?(o=Math.atan2(i,this.rc),s=Math.sin(o),e=Math.cos(o),a=Proj4js.common.asinz(e*this.sin_p14+t.y*s*this.cos_p14/i),n=Math.atan2(t.x*s,i*this.cos_p14*e-t.y*this.sin_p14*s),n=Proj4js.common.adjust_lon(this.long0+n)):(a=this.phic0,n=0),t.x=n,t.y=a,t}},Proj4js.Proj.sinu={init:function(){this.sphere?(this.n=1,this.m=0,this.es=0,this.C_y=Math.sqrt((this.m+1)/this.n),this.C_x=this.C_y/(this.m+1)):this.en=Proj4js.common.pj_enfn(this.es)},forward:function(t){var i,s,e=t.x,o=t.y;if(e=Proj4js.common.adjust_lon(e-this.long0),this.sphere){if(this.m)for(var n=this.n*Math.sin(o),a=Proj4js.common.MAX_ITER;a;--a){var r=(this.m*o+Math.sin(o)-n)/(this.m+Math.cos(o));if(o-=r,Math.abs(r)o?(o=Math.sin(i),s=this.long0+t.x*Math.sqrt(1-this.es*o*o)/(this.a*Math.cos(i)),e=Proj4js.common.adjust_lon(s)):o-Proj4js.common.EPSLN=0?this.y0+Proj4js.common.PI*this.R*Math.tan(.5*a):this.y0+Proj4js.common.PI*this.R*-Math.tan(.5*a));var r=.5*Math.abs(Proj4js.common.PI/n-n/Proj4js.common.PI),h=r*r,l=Math.sin(a),c=Math.cos(a),m=c/(l+c-1),u=m*m,d=m*(2/l-1),p=d*d,_=Proj4js.common.PI*this.R*(r*(m-p)+Math.sqrt(h*(m-p)*(m-p)-(p+h)*(u-p)))/(p+h);return 0>n&&(_=-_),i=this.x0+_,_=Math.abs(_/(Proj4js.common.PI*this.R)),s=o>=0?this.y0+Proj4js.common.PI*this.R*Math.sqrt(1-_*_-2*r*_):this.y0-Proj4js.common.PI*this.R*Math.sqrt(1-_*_-2*r*_),t.x=i,t.y=s,t},inverse:function(t){var i,s,e,o,n,a,r,h,l,c,m,u,d;return t.x-=this.x0,t.y-=this.y0,m=Proj4js.common.PI*this.R,e=t.x/m,o=t.y/m,n=e*e+o*o,a=-Math.abs(o)*(1+n),r=a-2*o*o+e*e,h=-2*a+1+2*o*o+n*n,d=o*o/h+(2*r*r*r/h/h/h-9*a*r/h/h)/27,l=(a-r*r/3/h)/h,c=2*Math.sqrt(-l/3),m=3*d/l/c,Math.abs(m)>1&&(m=m>=0?1:-1),u=Math.acos(m)/3,s=t.y>=0?(-c*Math.cos(u+Proj4js.common.PI/3)-r/3/h)*Proj4js.common.PI:-(-c*Math.cos(u+Proj4js.common.PI/3)-r/3/h)*Proj4js.common.PI,Math.abs(e)0&&(e=2*Math.atan(o*Proj4js.common.srat(this.e*Math.sin(t.y),-.5*this.e))-Proj4js.common.HALF_PI,!(i>Math.abs(e-t.y)));--n)t.y=e;return n?(t.x=s,t.y=e,t):(Proj4js.reportError("gauss:inverse:convergence failed"),null)}},Proj4js.Proj.omerc={init:function(){this.mode||(this.mode=0),this.lon1||(this.lon1=0,this.mode=1),this.lon2||(this.lon2=0),this.lat2||(this.lat2=0);var t=this.b/this.a,i=1-Math.pow(t,2);Math.sqrt(i),this.sin_p20=Math.sin(this.lat0),this.cos_p20=Math.cos(this.lat0),this.con=1-this.es*this.sin_p20*this.sin_p20,this.com=Math.sqrt(1-i),this.bl=Math.sqrt(1+this.es*Math.pow(this.cos_p20,4)/(1-i)),this.al=this.a*this.bl*this.k0*this.com/this.con,Math.abs(this.lat0)0?this.lat0>=0?this.d+Math.sqrt(this.d*this.d-1):this.d-Math.sqrt(this.d*this.d-1):this.d,this.el=this.f*Math.pow(this.ts,this.bl)),0!=this.mode?(this.g=.5*(this.f-1/this.f),this.gama=Proj4js.common.asinz(Math.sin(this.alpha)/this.d),this.longc=this.longc-Proj4js.common.asinz(this.g*Math.tan(this.gama))/this.bl,this.con=Math.abs(this.lat0),this.con>Proj4js.common.EPSLN&&Math.abs(this.con-Proj4js.common.HALF_PI)>Proj4js.common.EPSLN?(this.singam=Math.sin(this.gama),this.cosgam=Math.cos(this.gama),this.sinaz=Math.sin(this.alpha),this.cosaz=Math.cos(this.alpha),this.u=this.lat0>=0?this.al/this.bl*Math.atan(Math.sqrt(this.d*this.d-1)/this.cosaz):-(this.al/this.bl)*Math.atan(Math.sqrt(this.d*this.d-1)/this.cosaz)):Proj4js.reportError("omerc:Init:DataError")):(this.sinphi=Math.sin(this.at1),this.ts1=Proj4js.common.tsfnz(this.e,this.lat1,this.sinphi),this.sinphi=Math.sin(this.lat2),this.ts2=Proj4js.common.tsfnz(this.e,this.lat2,this.sinphi),this.h=Math.pow(this.ts1,this.bl),this.l=Math.pow(this.ts2,this.bl),this.f=this.el/this.h,this.g=.5*(this.f-1/this.f),this.j=(this.el*this.el-this.l*this.h)/(this.el*this.el+this.l*this.h),this.p=(this.l-this.h)/(this.l+this.h),this.dlon=this.lon1-this.lon2,this.dlon<-Proj4js.common.PI&&(this.lon2=this.lon2-2*Proj4js.common.PI),this.dlon>Proj4js.common.PI&&(this.lon2=this.lon2+2*Proj4js.common.PI),this.dlon=this.lon1-this.lon2,this.longc=.5*(this.lon1+this.lon2)-Math.atan(this.j*Math.tan(.5*this.bl*this.dlon)/this.p)/this.bl,this.dlon=Proj4js.common.adjust_lon(this.lon1-this.longc),this.gama=Math.atan(Math.sin(this.bl*this.dlon)/this.g),this.alpha=Proj4js.common.asinz(this.d*Math.sin(this.gama)),Math.abs(this.lat1-this.lat2)<=Proj4js.common.EPSLN?Proj4js.reportError("omercInitDataError"):this.con=Math.abs(this.lat1),this.con<=Proj4js.common.EPSLN||Math.abs(this.con-Proj4js.common.HALF_PI)<=Proj4js.common.EPSLN?Proj4js.reportError("omercInitDataError"):Math.abs(Math.abs(this.lat0)-Proj4js.common.HALF_PI)<=Proj4js.common.EPSLN&&Proj4js.reportError("omercInitDataError"),this.singam=Math.sin(this.gam),this.cosgam=Math.cos(this.gam),this.sinaz=Math.sin(this.alpha),this.cosaz=Math.cos(this.alpha),this.u=this.lat0>=0?this.al/this.bl*Math.atan(Math.sqrt(this.d*this.d-1)/this.cosaz):-(this.al/this.bl)*Math.atan(Math.sqrt(this.d*this.d-1)/this.cosaz))},forward:function(t){var i,s,e,o,n,a,r,h,l,c,m,u=t.x,d=t.y;i=Math.sin(d),c=Proj4js.common.adjust_lon(u-this.longc),a=Math.sin(this.bl*c),Math.abs(Math.abs(d)-Proj4js.common.HALF_PI)>Proj4js.common.EPSLN?(m=Proj4js.common.tsfnz(this.e,d,i),o=this.el/Math.pow(m,this.bl),l=.5*(o-1/o),s=.5*(o+1/o),r=(l*this.singam-a*this.cosgam)/s,e=Math.cos(this.bl*c),1e-7>Math.abs(e)?n=this.al*this.bl*c:(n=this.al*Math.atan((l*this.cosgam+a*this.singam)/e)/this.bl,0>e&&(n+=Proj4js.common.PI*this.al/this.bl))):(r=d>=0?this.singam:-this.singam,n=this.al*d/this.bl),Math.abs(Math.abs(r)-1)<=Proj4js.common.EPSLN&&Proj4js.reportError("omercFwdInfinity"),h=.5*this.al*Math.log((1-r)/(1+r))/this.bl,n-=this.u;var p=this.x0+h*this.cosaz+n*this.sinaz,_=this.y0+n*this.cosaz-h*this.sinaz;return t.x=p,t.y=_,t},inverse:function(t){var i,s,e,o,n,a,r,h,l,c,m,u,d;return t.x-=this.x0,t.y-=this.y0,d=0,o=t.x*this.cosaz-t.y*this.sinaz,n=t.y*this.cosaz+t.x*this.sinaz,n+=this.u,a=Math.exp(-this.bl*o/this.al),r=.5*(a-1/a),s=.5*(a+1/a),l=Math.sin(this.bl*n/this.al),c=(l*this.cosgam+r*this.singam)/s,Math.abs(Math.abs(c)-1)<=Proj4js.common.EPSLN?(m=this.longc,u=c>=0?Proj4js.common.HALF_PI:-Proj4js.common.HALF_PI):(e=1/this.bl,h=Math.pow(this.el/Math.sqrt((1+c)/(1-c)),e),u=Proj4js.common.phi2z(this.e,h),i=this.longc-Math.atan2(r*this.cosgam-l*this.singam,e)/this.bl,m=Proj4js.common.adjust_lon(i)),t.x=m,t.y=u,t}},Proj4js.Proj.lcc={init:function(){if(this.lat2||(this.lat2=this.lat0),this.k0||(this.k0=1),Math.abs(this.lat1+this.lat2)Proj4js.common.EPSLN?Math.log(e/r)/Math.log(o/h):i,this.f0=e/(this.ns*Math.pow(o,this.ns)),this.rh=this.a*this.f0*Math.pow(l,this.ns),this.title||(this.title="Lambert Conformal Conic")},forward:function(t){var i=t.x,s=t.y;if(!(90>=s&&s>=-90&&180>=i&&i>=-180))return Proj4js.reportError("lcc:forward: llInputOutOfRange: "+i+" : "+s),null;var e,o,n=Math.abs(Math.abs(s)-Proj4js.common.HALF_PI);if(n>Proj4js.common.EPSLN)e=Proj4js.common.tsfnz(this.e,s,Math.sin(s)),o=this.a*this.f0*Math.pow(e,this.ns);else{if(n=s*this.ns,0>=n)return Proj4js.reportError("lcc:forward: No Projection"),null;o=0}var a=this.ns*Proj4js.common.adjust_lon(i-this.long0);return t.x=this.k0*o*Math.sin(a)+this.x0,t.y=this.k0*(this.rh-o*Math.cos(a))+this.y0,t},inverse:function(t){var i,s,e,o,n,a=(t.x-this.x0)/this.k0,r=this.rh-(t.y-this.y0)/this.k0;this.ns>0?(i=Math.sqrt(a*a+r*r),s=1):(i=-Math.sqrt(a*a+r*r),s=-1);var h=0;if(0!=i&&(h=Math.atan2(s*a,s*r)),0!=i||this.ns>0){if(s=1/this.ns,e=Math.pow(i/(this.a*this.f0),s),o=Proj4js.common.phi2z(this.e,e),-9999==o)return null}else o=-Proj4js.common.HALF_PI;return n=Proj4js.common.adjust_lon(h/this.ns+this.long0),t.x=n,t.y=o,t}},Proj4js.Proj.laea={S_POLE:1,N_POLE:2,EQUIT:3,OBLIQ:4,init:function(){var t=Math.abs(this.lat0);if(this.mode=Math.abs(t-Proj4js.common.HALF_PI)this.lat0?this.S_POLE:this.N_POLE:Math.abs(t)0){var i;switch(this.qp=Proj4js.common.qsfnz(this.e,1),this.mmf=.5/(1-this.es),this.apa=this.authset(this.es),this.mode){case this.N_POLE:case this.S_POLE:this.dd=1;break;case this.EQUIT:this.rq=Math.sqrt(.5*this.qp),this.dd=1/this.rq,this.xmf=1,this.ymf=.5*this.qp;break;case this.OBLIQ:this.rq=Math.sqrt(.5*this.qp),i=Math.sin(this.lat0),this.sinb1=Proj4js.common.qsfnz(this.e,i)/this.qp,this.cosb1=Math.sqrt(1-this.sinb1*this.sinb1),this.dd=Math.cos(this.lat0)/(Math.sqrt(1-this.es*i*i)*this.rq*this.cosb1),this.ymf=(this.xmf=this.rq)/this.dd,this.xmf*=this.dd}}else this.mode==this.OBLIQ&&(this.sinph0=Math.sin(this.lat0),this.cosph0=Math.cos(this.lat0))},forward:function(t){var i,s,e=t.x,o=t.y;if(e=Proj4js.common.adjust_lon(e-this.long0),this.sphere){var n,a,r;switch(r=Math.sin(o),a=Math.cos(o),n=Math.cos(e),this.mode){case this.OBLIQ:case this.EQUIT:if(s=this.mode==this.EQUIT?1+a*n:1+this.sinph0*r+this.cosph0*a*n,Proj4js.common.EPSLN>=s)return Proj4js.reportError("laea:fwd:y less than eps"),null;s=Math.sqrt(2/s),i=s*a*Math.sin(e),s*=this.mode==this.EQUIT?r:this.cosph0*r-this.sinph0*a*n;break;case this.N_POLE:n=-n;case this.S_POLE:if(Math.abs(o+this.phi0)=0?(i=(u=Math.sqrt(l))*h,s=n*(this.mode==this.S_POLE?u:-u)):i=s=0}}return t.x=this.a*i+this.x0,t.y=this.a*s+this.y0,t},inverse:function(t){t.x-=this.x0,t.y-=this.y0;var i,s,e=t.x/this.a,o=t.y/this.a;if(this.sphere){var n,a=0,r=0;if(n=Math.sqrt(e*e+o*o),s=.5*n,s>1)return Proj4js.reportError("laea:Inv:DataError"),null; +switch(s=2*Math.asin(s),(this.mode==this.OBLIQ||this.mode==this.EQUIT)&&(r=Math.sin(s),a=Math.cos(s)),this.mode){case this.EQUIT:s=Math.abs(n)<=Proj4js.common.EPSLN?0:Math.asin(o*r/n),e*=r,o=a*n;break;case this.OBLIQ:s=Math.abs(n)<=Proj4js.common.EPSLN?this.phi0:Math.asin(a*this.sinph0+o*r*this.cosph0/n),e*=r*this.cosph0,o=(a-Math.sin(s)*this.sinph0)*n;break;case this.N_POLE:o=-o,s=Proj4js.common.HALF_PI-s;break;case this.S_POLE:s-=Proj4js.common.HALF_PI}i=0!=o||this.mode!=this.EQUIT&&this.mode!=this.OBLIQ?Math.atan2(e,o):0}else{var h,l,c,m,u=0;switch(this.mode){case this.EQUIT:case this.OBLIQ:if(e/=this.dd,o*=this.dd,m=Math.sqrt(e*e+o*o),Proj4js.common.EPSLN>m)return t.x=0,t.y=this.phi0,t;l=2*Math.asin(.5*m/this.rq),h=Math.cos(l),e*=l=Math.sin(l),this.mode==this.OBLIQ?(u=h*this.sinb1+o*l*this.cosb1/m,c=this.qp*u,o=m*this.cosb1*h-o*this.sinb1*l):(u=o*l/m,c=this.qp*u,o=m*h);break;case this.N_POLE:o=-o;case this.S_POLE:if(c=e*e+o*o,!c)return t.x=0,t.y=this.phi0,t;u=1-c/this.qp,this.mode==this.S_POLE&&(u=-u)}i=Math.atan2(e,o),s=this.authlat(Math.asin(u),this.apa)}return t.x=Proj4js.common.adjust_lon(this.long0+i),t.y=s,t},P00:.3333333333333333,P01:.17222222222222222,P02:.10257936507936508,P10:.06388888888888888,P11:.0664021164021164,P20:.016415012942191543,authset:function(t){var i,s=[];return s[0]=t*this.P00,i=t*t,s[0]+=i*this.P01,s[1]=i*this.P10,i*=t,s[0]+=i*this.P02,s[1]+=i*this.P11,s[2]=i*this.P20,s},authlat:function(t,i){var s=t+t;return t+i[0]*Math.sin(s)+i[1]*Math.sin(s+s)+i[2]*Math.sin(s+s+s)}},Proj4js.Proj.aeqd={init:function(){this.sin_p12=Math.sin(this.lat0),this.cos_p12=Math.cos(this.lat0)},forward:function(t){var i=t.x;t.y;var s,e=Math.sin(t.y),o=Math.cos(t.y),n=Proj4js.common.adjust_lon(i-this.long0),a=Math.cos(n),r=this.sin_p12*e+this.cos_p12*o*a;if(Math.abs(Math.abs(r)-1)r)return Proj4js.reportError("aeqd:Fwd:PointError"),void 0}else{var h=Math.acos(r);s=h/Math.sin(h)}return t.x=this.x0+this.a*s*o*Math.sin(n),t.y=this.y0+this.a*s*(this.cos_p12*e-this.sin_p12*o*a),t},inverse:function(t){t.x-=this.x0,t.y-=this.y0;var i=Math.sqrt(t.x*t.x+t.y*t.y);if(i>2*Proj4js.common.HALF_PI*this.a)return Proj4js.reportError("aeqdInvDataError"),void 0;var s,e=i/this.a,o=Math.sin(e),n=Math.cos(e),a=this.long0;if(Math.abs(i)<=Proj4js.common.EPSLN)s=this.lat0;else{s=Proj4js.common.asinz(n*this.sin_p12+t.y*o*this.cos_p12/i);var r=Math.abs(this.lat0)-Proj4js.common.HALF_PI;Math.abs(r)<=Proj4js.common.EPSLN?a=this.lat0>=0?Proj4js.common.adjust_lon(this.long0+Math.atan2(t.x,-t.y)):Proj4js.common.adjust_lon(this.long0-Math.atan2(-t.x,t.y)):(r=n-this.sin_p12*Math.sin(s),Math.abs(r)=50&&Proj4js.reportError("moll:Fwd:IterationError")}o/=2,Proj4js.common.PI/2-Math.abs(s).999999999999&&(s=.999999999999);var i=Math.asin(s),e=Proj4js.common.adjust_lon(this.long0+t.x/(.900316316158*this.a*Math.cos(i)));-Proj4js.common.PI>e&&(e=-Proj4js.common.PI),e>Proj4js.common.PI&&(e=Proj4js.common.PI),s=(2*i+Math.sin(2*i))/Proj4js.common.PI,Math.abs(s)>1&&(s=1);var o=Math.asin(s);return t.x=e,t.y=o,t}},function(t,i,s){var e,o;typeof exports!=s+""?e=exports:(o=t.L,e={},e.noConflict=function(){return t.L=o,this},t.L=e),e.version="0.5.1",e.Util={extend:function(t){var i,s,e,o,n=Array.prototype.slice.call(arguments,1);for(s=0,e=n.length;e>s;s++){o=n[s]||{};for(i in o)o.hasOwnProperty(i)&&(t[i]=o[i])}return t},bind:function(t,i){var s=arguments.length>2?Array.prototype.slice.call(arguments,2):null;return function(){return t.apply(i,s||arguments)}},stamp:function(){var t=0,i="_leaflet_id";return function(s){return s[i]=s[i]||++t,s[i]}}(),limitExecByInterval:function(t,i,e){var o,n;return function a(){var r=arguments;return o?(n=!0,s):(o=!0,setTimeout(function(){o=!1,n&&(a.apply(e,r),n=!1)},i),t.apply(e,r),s)}},falseFn:function(){return!1},formatNum:function(t,i){var s=Math.pow(10,i||5);return Math.round(t*s)/s},splitWords:function(t){return t.replace(/^\s+|\s+$/g,"").split(/\s+/)},setOptions:function(t,i){return t.options=e.extend({},t.options,i),t.options},getParamString:function(t,i){var s=[];for(var e in t)t.hasOwnProperty(e)&&s.push(e+"="+t[e]);return(i&&-1!==i.indexOf("?")?"&":"?")+s.join("&")},template:function(t,i){return t.replace(/\{ *([\w_]+) *\}/g,function(t,s){var e=i[s];if(!i.hasOwnProperty(s))throw Error("No value provided for variable "+t);return e})},isArray:function(t){return"[object Array]"===Object.prototype.toString.call(t)},emptyImageUrl:"data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs="},function(){function i(i){var s,e,o=["webkit","moz","o","ms"];for(s=0;o.length>s&&!e;s++)e=t[o[s]+i];return e}function o(i){var s=+new Date,e=Math.max(0,16-(s-n));return n=s+e,t.setTimeout(i,e)}var n=0,a=t.requestAnimationFrame||i("RequestAnimationFrame")||o,r=t.cancelAnimationFrame||i("CancelAnimationFrame")||i("CancelRequestAnimationFrame")||function(i){t.clearTimeout(i)};e.Util.requestAnimFrame=function(i,n,r,h){return i=e.bind(i,n),r&&a===o?(i(),s):a.call(t,i,h)},e.Util.cancelAnimFrame=function(i){i&&r.call(t,i)}}(),e.extend=e.Util.extend,e.bind=e.Util.bind,e.stamp=e.Util.stamp,e.setOptions=e.Util.setOptions,e.Class=function(){},e.Class.extend=function(t){var i=function(){this.initialize&&this.initialize.apply(this,arguments),this._initHooks&&this.callInitHooks()},s=function(){};s.prototype=this.prototype;var o=new s;o.constructor=i,i.prototype=o;for(var n in this)this.hasOwnProperty(n)&&"prototype"!==n&&(i[n]=this[n]);t.statics&&(e.extend(i,t.statics),delete t.statics),t.includes&&(e.Util.extend.apply(null,[o].concat(t.includes)),delete t.includes),t.options&&o.options&&(t.options=e.extend({},o.options,t.options)),e.extend(o,t),o._initHooks=[];var a=this;return o.callInitHooks=function(){if(!this._initHooksCalled){a.prototype.callInitHooks&&a.prototype.callInitHooks.call(this),this._initHooksCalled=!0;for(var t=0,i=o._initHooks.length;i>t;t++)o._initHooks[t].call(this)}},i},e.Class.include=function(t){e.extend(this.prototype,t)},e.Class.mergeOptions=function(t){e.extend(this.prototype.options,t)},e.Class.addInitHook=function(t){var i=Array.prototype.slice.call(arguments,1),s="function"==typeof t?t:function(){this[t].apply(this,i)};this.prototype._initHooks=this.prototype._initHooks||[],this.prototype._initHooks.push(s)};var n="_leaflet_events";e.Mixin={},e.Mixin.Events={addEventListener:function(t,i,s){var o,a,r,h=this[n]=this[n]||{};if("object"==typeof t){for(o in t)t.hasOwnProperty(o)&&this.addEventListener(o,t[o],i);return this}for(t=e.Util.splitWords(t),a=0,r=t.length;r>a;a++)h[t[a]]=h[t[a]]||[],h[t[a]].push({action:i,context:s||this});return this},hasEventListeners:function(t){return n in this&&t in this[n]&&this[n][t].length>0},removeEventListener:function(t,i,s){var o,a,r,h,l,c=this[n];if("object"==typeof t){for(o in t)t.hasOwnProperty(o)&&this.removeEventListener(o,t[o],i);return this}for(t=e.Util.splitWords(t),a=0,r=t.length;r>a;a++)if(this.hasEventListeners(t[a]))for(h=c[t[a]],l=h.length-1;l>=0;l--)i&&h[l].action!==i||s&&h[l].context!==s||h.splice(l,1);return this},fireEvent:function(t,i){if(!this.hasEventListeners(t))return this;for(var s=e.extend({type:t,target:this},i),o=this[n][t].slice(),a=0,r=o.length;r>a;a++)o[a].action.call(o[a].context||this,s);return this}},e.Mixin.Events.on=e.Mixin.Events.addEventListener,e.Mixin.Events.off=e.Mixin.Events.removeEventListener,e.Mixin.Events.fire=e.Mixin.Events.fireEvent,function(){var o=!!t.ActiveXObject,n=o&&!t.XMLHttpRequest,a=o&&!i.querySelector,r=navigator.userAgent.toLowerCase(),h=-1!==r.indexOf("webkit"),l=-1!==r.indexOf("chrome"),c=-1!==r.indexOf("android"),m=-1!==r.search("android [23]"),u=typeof orientation!=s+"",d=t.navigator&&t.navigator.msPointerEnabled&&t.navigator.msMaxTouchPoints,p="devicePixelRatio"in t&&t.devicePixelRatio>1||"matchMedia"in t&&t.matchMedia("(min-resolution:144dpi)")&&t.matchMedia("(min-resolution:144dpi)").matches,_=i.documentElement,f=o&&"transition"in _.style,P="WebKitCSSMatrix"in t&&"m11"in new t.WebKitCSSMatrix,y="MozPerspective"in _.style,g="OTransition"in _.style,L=!t.L_DISABLE_3D&&(f||P||y||g),v=!t.L_NO_TOUCH&&function(){var t="ontouchstart";if(d||t in _)return!0;var s=i.createElement("div"),e=!1;return s.setAttribute?(s.setAttribute(t,"return;"),"function"==typeof s[t]&&(e=!0),s.removeAttribute(t),s=null,e):!1}();e.Browser={ie:o,ie6:n,ie7:a,webkit:h,android:c,android23:m,chrome:l,ie3d:f,webkit3d:P,gecko3d:y,opera3d:g,any3d:L,mobile:u,mobileWebkit:u&&h,mobileWebkit3d:u&&P,mobileOpera:u&&t.opera,touch:v,msTouch:d,retina:p}}(),e.Point=function(t,i,s){this.x=s?Math.round(t):t,this.y=s?Math.round(i):i},e.Point.prototype={clone:function(){return new e.Point(this.x,this.y)},add:function(t){return this.clone()._add(e.point(t))},_add:function(t){return this.x+=t.x,this.y+=t.y,this},subtract:function(t){return this.clone()._subtract(e.point(t))},_subtract:function(t){return this.x-=t.x,this.y-=t.y,this},divideBy:function(t){return this.clone()._divideBy(t)},_divideBy:function(t){return this.x/=t,this.y/=t,this},multiplyBy:function(t){return this.clone()._multiplyBy(t)},_multiplyBy:function(t){return this.x*=t,this.y*=t,this},round:function(){return this.clone()._round()},_round:function(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this},floor:function(){return this.clone()._floor()},_floor:function(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this},distanceTo:function(t){t=e.point(t);var i=t.x-this.x,s=t.y-this.y;return Math.sqrt(i*i+s*s)},equals:function(t){return t.x===this.x&&t.y===this.y},toString:function(){return"Point("+e.Util.formatNum(this.x)+", "+e.Util.formatNum(this.y)+")"}},e.point=function(t,i,s){return t instanceof e.Point?t:e.Util.isArray(t)?new e.Point(t[0],t[1]):isNaN(t)?t:new e.Point(t,i,s)},e.Bounds=function(t,i){if(t)for(var s=i?[t,i]:t,e=0,o=s.length;o>e;e++)this.extend(s[e])},e.Bounds.prototype={extend:function(t){return t=e.point(t),this.min||this.max?(this.min.x=Math.min(t.x,this.min.x),this.max.x=Math.max(t.x,this.max.x),this.min.y=Math.min(t.y,this.min.y),this.max.y=Math.max(t.y,this.max.y)):(this.min=t.clone(),this.max=t.clone()),this},getCenter:function(t){return new e.Point((this.min.x+this.max.x)/2,(this.min.y+this.max.y)/2,t)},getBottomLeft:function(){return new e.Point(this.min.x,this.max.y)},getTopRight:function(){return new e.Point(this.max.x,this.min.y)},getSize:function(){return this.max.subtract(this.min)},contains:function(t){var i,s;return t="number"==typeof t[0]||t instanceof e.Point?e.point(t):e.bounds(t),t instanceof e.Bounds?(i=t.min,s=t.max):i=s=t,i.x>=this.min.x&&s.x<=this.max.x&&i.y>=this.min.y&&s.y<=this.max.y},intersects:function(t){t=e.bounds(t);var i=this.min,s=this.max,o=t.min,n=t.max,a=n.x>=i.x&&o.x<=s.x,r=n.y>=i.y&&o.y<=s.y;return a&&r},isValid:function(){return!(!this.min||!this.max)}},e.bounds=function(t,i){return!t||t instanceof e.Bounds?t:new e.Bounds(t,i)},e.Transformation=function(t,i,s,e){this._a=t,this._b=i,this._c=s,this._d=e},e.Transformation.prototype={transform:function(t,i){return this._transform(t.clone(),i)},_transform:function(t,i){return i=i||1,t.x=i*(this._a*t.x+this._b),t.y=i*(this._c*t.y+this._d),t},untransform:function(t,i){return i=i||1,new e.Point((t.x/i-this._b)/this._a,(t.y/i-this._d)/this._c)}},e.DomUtil={get:function(t){return"string"==typeof t?i.getElementById(t):t},getStyle:function(t,s){var e=t.style[s];if(!e&&t.currentStyle&&(e=t.currentStyle[s]),(!e||"auto"===e)&&i.defaultView){var o=i.defaultView.getComputedStyle(t,null);e=o?o[s]:null}return"auto"===e?null:e},getViewportOffset:function(t){var s,o=0,n=0,a=t,r=i.body,h=e.Browser.ie7;do{if(o+=a.offsetTop||0,n+=a.offsetLeft||0,o+=parseInt(e.DomUtil.getStyle(a,"borderTopWidth"),10)||0,n+=parseInt(e.DomUtil.getStyle(a,"borderLeftWidth"),10)||0,s=e.DomUtil.getStyle(a,"position"),a.offsetParent===r&&"absolute"===s)break;if("fixed"===s){o+=r.scrollTop||0,n+=r.scrollLeft||0;break}a=a.offsetParent}while(a);a=t;do{if(a===r)break;o-=a.scrollTop||0,n-=a.scrollLeft||0,e.DomUtil.documentIsLtr()||!e.Browser.webkit&&!h||(n+=a.scrollWidth-a.clientWidth,h&&"hidden"!==e.DomUtil.getStyle(a,"overflow-y")&&"hidden"!==e.DomUtil.getStyle(a,"overflow")&&(n+=17)),a=a.parentNode}while(a);return new e.Point(n,o)},documentIsLtr:function(){return e.DomUtil._docIsLtrCached||(e.DomUtil._docIsLtrCached=!0,e.DomUtil._docIsLtr="ltr"===e.DomUtil.getStyle(i.body,"direction")),e.DomUtil._docIsLtr},create:function(t,s,e){var o=i.createElement(t);return o.className=s,e&&e.appendChild(o),o},disableTextSelection:function(){i.selection&&i.selection.empty&&i.selection.empty(),this._onselectstart||(this._onselectstart=i.onselectstart||null,i.onselectstart=e.Util.falseFn)},enableTextSelection:function(){i.onselectstart===e.Util.falseFn&&(i.onselectstart=this._onselectstart,this._onselectstart=null)},hasClass:function(t,i){return t.className.length>0&&RegExp("(^|\\s)"+i+"(\\s|$)").test(t.className)},addClass:function(t,i){e.DomUtil.hasClass(t,i)||(t.className+=(t.className?" ":"")+i)},removeClass:function(t,i){function s(t,s){return s===i?"":t}t.className=t.className.replace(/(\S+)\s*/g,s).replace(/(^\s+|\s+$)/,"")},setOpacity:function(t,i){if("opacity"in t.style)t.style.opacity=i;else if("filter"in t.style){var s=!1,e="DXImageTransform.Microsoft.Alpha";try{s=t.filters.item(e)}catch(o){}i=Math.round(100*i),s?(s.Enabled=100!==i,s.Opacity=i):t.style.filter+=" progid:"+e+"(opacity="+i+")"}},testProp:function(t){for(var s=i.documentElement.style,e=0;t.length>e;e++)if(t[e]in s)return t[e];return!1},getTranslateString:function(t){var i=e.Browser.webkit3d,s="translate"+(i?"3d":"")+"(",o=(i?",0":"")+")";return s+t.x+"px,"+t.y+"px"+o},getScaleString:function(t,i){var s=e.DomUtil.getTranslateString(i.add(i.multiplyBy(-1*t))),o=" scale("+t+") ";return s+o},setPosition:function(t,i,s){t._leaflet_pos=i,!s&&e.Browser.any3d?(t.style[e.DomUtil.TRANSFORM]=e.DomUtil.getTranslateString(i),e.Browser.mobileWebkit3d&&(t.style.WebkitBackfaceVisibility="hidden")):(t.style.left=i.x+"px",t.style.top=i.y+"px")},getPosition:function(t){return t._leaflet_pos}},e.DomUtil.TRANSFORM=e.DomUtil.testProp(["transform","WebkitTransform","OTransform","MozTransform","msTransform"]),e.DomUtil.TRANSITION=e.DomUtil.testProp(["webkitTransition","transition","OTransition","MozTransition","msTransition"]),e.DomUtil.TRANSITION_END="webkitTransition"===e.DomUtil.TRANSITION||"OTransition"===e.DomUtil.TRANSITION?e.DomUtil.TRANSITION+"End":"transitionend",e.LatLng=function(t,i){var s=parseFloat(t),e=parseFloat(i);if(isNaN(s)||isNaN(e))throw Error("Invalid LatLng object: ("+t+", "+i+")");this.lat=s,this.lng=e},e.extend(e.LatLng,{DEG_TO_RAD:Math.PI/180,RAD_TO_DEG:180/Math.PI,MAX_MARGIN:1e-9}),e.LatLng.prototype={equals:function(t){if(!t)return!1;t=e.latLng(t);var i=Math.max(Math.abs(this.lat-t.lat),Math.abs(this.lng-t.lng));return e.LatLng.MAX_MARGIN>=i},toString:function(t){return"LatLng("+e.Util.formatNum(this.lat,t)+", "+e.Util.formatNum(this.lng,t)+")"},distanceTo:function(t){t=e.latLng(t);var i=6378137,s=e.LatLng.DEG_TO_RAD,o=(t.lat-this.lat)*s,n=(t.lng-this.lng)*s,a=this.lat*s,r=t.lat*s,h=Math.sin(o/2),l=Math.sin(n/2),c=h*h+l*l*Math.cos(a)*Math.cos(r);return 2*i*Math.atan2(Math.sqrt(c),Math.sqrt(1-c))},wrap:function(t,i){var s=this.lng;return t=t||-180,i=i||180,s=(s+i)%(i-t)+(t>s||s===i?i:t),new e.LatLng(this.lat,s)}},e.latLng=function(t,i){return t instanceof e.LatLng?t:e.Util.isArray(t)?new e.LatLng(t[0],t[1]):isNaN(t)?t:new e.LatLng(t,i)},e.LatLngBounds=function(t,i){if(t)for(var s=i?[t,i]:t,e=0,o=s.length;o>e;e++)this.extend(s[e])},e.LatLngBounds.prototype={extend:function(t){return t="number"==typeof t[0]||"string"==typeof t[0]||t instanceof e.LatLng?e.latLng(t):e.latLngBounds(t),t instanceof e.LatLng?this._southWest||this._northEast?(this._southWest.lat=Math.min(t.lat,this._southWest.lat),this._southWest.lng=Math.min(t.lng,this._southWest.lng),this._northEast.lat=Math.max(t.lat,this._northEast.lat),this._northEast.lng=Math.max(t.lng,this._northEast.lng)):(this._southWest=new e.LatLng(t.lat,t.lng),this._northEast=new e.LatLng(t.lat,t.lng)):t instanceof e.LatLngBounds&&(this.extend(t._southWest),this.extend(t._northEast)),this},pad:function(t){var i=this._southWest,s=this._northEast,o=Math.abs(i.lat-s.lat)*t,n=Math.abs(i.lng-s.lng)*t;return new e.LatLngBounds(new e.LatLng(i.lat-o,i.lng-n),new e.LatLng(s.lat+o,s.lng+n))},getCenter:function(){return new e.LatLng((this._southWest.lat+this._northEast.lat)/2,(this._southWest.lng+this._northEast.lng)/2)},getSouthWest:function(){return this._southWest},getNorthEast:function(){return this._northEast},getNorthWest:function(){return new e.LatLng(this._northEast.lat,this._southWest.lng)},getSouthEast:function(){return new e.LatLng(this._southWest.lat,this._northEast.lng)},contains:function(t){t="number"==typeof t[0]||t instanceof e.LatLng?e.latLng(t):e.latLngBounds(t);var i,s,o=this._southWest,n=this._northEast;return t instanceof e.LatLngBounds?(i=t.getSouthWest(),s=t.getNorthEast()):i=s=t,i.lat>=o.lat&&s.lat<=n.lat&&i.lng>=o.lng&&s.lng<=n.lng},intersects:function(t){t=e.latLngBounds(t);var i=this._southWest,s=this._northEast,o=t.getSouthWest(),n=t.getNorthEast(),a=n.lat>=i.lat&&o.lat<=s.lat,r=n.lng>=i.lng&&o.lng<=s.lng;return a&&r},toBBoxString:function(){var t=this._southWest,i=this._northEast;return[t.lng,t.lat,i.lng,i.lat].join(",")},equals:function(t){return t?(t=e.latLngBounds(t),this._southWest.equals(t.getSouthWest())&&this._northEast.equals(t.getNorthEast())):!1},isValid:function(){return!(!this._southWest||!this._northEast)}},e.latLngBounds=function(t,i){return!t||t instanceof e.LatLngBounds?t:new e.LatLngBounds(t,i)},e.Projection={},e.Projection.SphericalMercator={MAX_LATITUDE:85.0511287798,project:function(t){var i=e.LatLng.DEG_TO_RAD,s=this.MAX_LATITUDE,o=Math.max(Math.min(s,t.lat),-s),n=t.lng*i,a=o*i;return a=Math.log(Math.tan(Math.PI/4+a/2)),new e.Point(n,a)},unproject:function(t){var i=e.LatLng.RAD_TO_DEG,s=t.x*i,o=(2*Math.atan(Math.exp(t.y))-Math.PI/2)*i;return new e.LatLng(o,s)}},e.Projection.LonLat={project:function(t){return new e.Point(t.lng,t.lat)},unproject:function(t){return new e.LatLng(t.y,t.x)}},e.CRS={latLngToPoint:function(t,i){var s=this.projection.project(t),e=this.scale(i);return this.transformation._transform(s,e)},pointToLatLng:function(t,i){var s=this.scale(i),e=this.transformation.untransform(t,s);return this.projection.unproject(e)},project:function(t){return this.projection.project(t)},scale:function(t){return 256*Math.pow(2,t)}},e.CRS.Simple=e.extend({},e.CRS,{projection:e.Projection.LonLat,transformation:new e.Transformation(1,0,-1,0),scale:function(t){return Math.pow(2,t)}}),e.CRS.EPSG3857=e.extend({},e.CRS,{code:"EPSG:3857",projection:e.Projection.SphericalMercator,transformation:new e.Transformation(.5/Math.PI,.5,-.5/Math.PI,.5),project:function(t){var i=this.projection.project(t),s=6378137;return i.multiplyBy(s)}}),e.CRS.EPSG900913=e.extend({},e.CRS.EPSG3857,{code:"EPSG:900913"}),e.CRS.EPSG4326=e.extend({},e.CRS,{code:"EPSG:4326",projection:e.Projection.LonLat,transformation:new e.Transformation(1/360,.5,-1/360,.5)}),e.Map=e.Class.extend({includes:e.Mixin.Events,options:{crs:e.CRS.EPSG3857,fadeAnimation:e.DomUtil.TRANSITION&&!e.Browser.android23,trackResize:!0,markerZoomAnimation:e.DomUtil.TRANSITION&&e.Browser.any3d},initialize:function(t,i){i=e.setOptions(this,i),this._initContainer(t),this._initLayout(),this.callInitHooks(),this._initEvents(),i.maxBounds&&this.setMaxBounds(i.maxBounds),i.center&&i.zoom!==s&&this.setView(e.latLng(i.center),i.zoom,!0),this._initLayers(i.layers)},setView:function(t,i){return this._resetView(e.latLng(t),this._limitZoom(i)),this},setZoom:function(t){return this.setView(this.getCenter(),t)},zoomIn:function(t){return this.setZoom(this._zoom+(t||1))},zoomOut:function(t){return this.setZoom(this._zoom-(t||1))},fitBounds:function(t){var i=this.getBoundsZoom(t);return this.setView(e.latLngBounds(t).getCenter(),i)},fitWorld:function(){var t=new e.LatLng(-60,-170),i=new e.LatLng(85,179);return this.fitBounds(new e.LatLngBounds(t,i))},panTo:function(t){return this.setView(t,this._zoom)},panBy:function(t){return this.fire("movestart"),this._rawPanBy(e.point(t)),this.fire("move"),this.fire("moveend")},setMaxBounds:function(t){if(t=e.latLngBounds(t),this.options.maxBounds=t,!t)return this._boundsMinZoom=null,this;var i=this.getBoundsZoom(t,!0);return this._boundsMinZoom=i,this._loaded&&(i>this._zoom?this.setView(t.getCenter(),i):this.panInsideBounds(t)),this},panInsideBounds:function(t){t=e.latLngBounds(t);var i=this.getBounds(),s=this.project(i.getSouthWest()),o=this.project(i.getNorthEast()),n=this.project(t.getSouthWest()),a=this.project(t.getNorthEast()),r=0,h=0;return o.ya.x&&(r=a.x-o.x),s.y>n.y&&(h=n.y-s.y),s.x=r);return m&&i?null:i?r:r-1},getSize:function(){return(!this._size||this._sizeChanged)&&(this._size=new e.Point(this._container.clientWidth,this._container.clientHeight),this._sizeChanged=!1),this._size.clone()},getPixelBounds:function(){var t=this._getTopLeftPoint();return new e.Bounds(t,t.add(this.getSize()))},getPixelOrigin:function(){return this._initialTopLeftPoint},getPanes:function(){return this._panes},getContainer:function(){return this._container},getZoomScale:function(t){var i=this.options.crs;return i.scale(t)/i.scale(this._zoom)},getScaleZoom:function(t){return this._zoom+Math.log(t)/Math.LN2},project:function(t,i){return i=i===s?this._zoom:i,this.options.crs.latLngToPoint(e.latLng(t),i)},unproject:function(t,i){return i=i===s?this._zoom:i,this.options.crs.pointToLatLng(e.point(t),i)},layerPointToLatLng:function(t){var i=e.point(t).add(this._initialTopLeftPoint);return this.unproject(i)},latLngToLayerPoint:function(t){var i=this.project(e.latLng(t))._round();return i._subtract(this._initialTopLeftPoint)},containerPointToLayerPoint:function(t){return e.point(t).subtract(this._getMapPanePos())},layerPointToContainerPoint:function(t){return e.point(t).add(this._getMapPanePos())},containerPointToLatLng:function(t){var i=this.containerPointToLayerPoint(e.point(t));return this.layerPointToLatLng(i)},latLngToContainerPoint:function(t){return this.layerPointToContainerPoint(this.latLngToLayerPoint(e.latLng(t)))},mouseEventToContainerPoint:function(t){return e.DomEvent.getMousePosition(t,this._container)},mouseEventToLayerPoint:function(t){return this.containerPointToLayerPoint(this.mouseEventToContainerPoint(t))},mouseEventToLatLng:function(t){return this.layerPointToLatLng(this.mouseEventToLayerPoint(t))},_initContainer:function(t){var i=this._container=e.DomUtil.get(t);if(i._leaflet)throw Error("Map container is already initialized.");i._leaflet=!0},_initLayout:function(){var t=this._container;e.DomUtil.addClass(t,"leaflet-container"),e.Browser.touch&&e.DomUtil.addClass(t,"leaflet-touch"),this.options.fadeAnimation&&e.DomUtil.addClass(t,"leaflet-fade-anim");var i=e.DomUtil.getStyle(t,"position");"absolute"!==i&&"relative"!==i&&"fixed"!==i&&(t.style.position="relative"),this._initPanes(),this._initControlPos&&this._initControlPos()},_initPanes:function(){var t=this._panes={};this._mapPane=t.mapPane=this._createPane("leaflet-map-pane",this._container),this._tilePane=t.tilePane=this._createPane("leaflet-tile-pane",this._mapPane),t.objectsPane=this._createPane("leaflet-objects-pane",this._mapPane),t.shadowPane=this._createPane("leaflet-shadow-pane"),t.overlayPane=this._createPane("leaflet-overlay-pane"),t.markerPane=this._createPane("leaflet-marker-pane"),t.popupPane=this._createPane("leaflet-popup-pane");var i=" leaflet-zoom-hide";this.options.markerZoomAnimation||(e.DomUtil.addClass(t.markerPane,i),e.DomUtil.addClass(t.shadowPane,i),e.DomUtil.addClass(t.popupPane,i))},_createPane:function(t,i){return e.DomUtil.create("div",t,i||this._panes.objectsPane)},_initLayers:function(t){t=t?e.Util.isArray(t)?t:[t]:[],this._layers={},this._zoomBoundLayers={},this._tileLayersNum=0;var i,s;for(i=0,s=t.length;s>i;i++)this.addLayer(t[i])},_resetView:function(t,i,s,o){var n=this._zoom!==i;o||(this.fire("movestart"),n&&this.fire("zoomstart")),this._zoom=i,this._initialTopLeftPoint=this._getNewTopLeftPoint(t),s?this._initialTopLeftPoint._add(this._getMapPanePos()):e.DomUtil.setPosition(this._mapPane,new e.Point(0,0)),this._tileLayersToLoad=this._tileLayersNum;var a=!this._loaded;this._loaded=!0,this.fire("viewreset",{hard:!s}),this.fire("move"),(n||o)&&this.fire("zoomend"),this.fire("moveend",{hard:!s}),a&&this.fire("load")},_rawPanBy:function(t){e.DomUtil.setPosition(this._mapPane,this._getMapPanePos().subtract(t))},_updateZoomLevels:function(){var t,i=1/0,e=-1/0;for(t in this._zoomBoundLayers)if(this._zoomBoundLayers.hasOwnProperty(t)){var o=this._zoomBoundLayers[t];isNaN(o.options.minZoom)||(i=Math.min(i,o.options.minZoom)),isNaN(o.options.maxZoom)||(e=Math.max(e,o.options.maxZoom))}t===s?this._layersMaxZoom=this._layersMinZoom=s:(this._layersMaxZoom=e,this._layersMinZoom=i)},_initEvents:function(){if(e.DomEvent){e.DomEvent.on(this._container,"click",this._onMouseClick,this);var i,s,o=["dblclick","mousedown","mouseup","mouseenter","mouseleave","mousemove","contextmenu"];for(i=0,s=o.length;s>i;i++)e.DomEvent.on(this._container,o[i],this._fireMouseEvent,this);this.options.trackResize&&e.DomEvent.on(t,"resize",this._onResize,this)}},_onResize:function(){e.Util.cancelAnimFrame(this._resizeRequest),this._resizeRequest=e.Util.requestAnimFrame(this.invalidateSize,this,!1,this._container)},_onMouseClick:function(t){!this._loaded||this.dragging&&this.dragging.moved()||(this.fire("preclick"),this._fireMouseEvent(t))},_fireMouseEvent:function(t){if(this._loaded){var i=t.type;if(i="mouseenter"===i?"mouseover":"mouseleave"===i?"mouseout":i,this.hasEventListeners(i)){"contextmenu"===i&&e.DomEvent.preventDefault(t);var s=this.mouseEventToContainerPoint(t),o=this.containerPointToLayerPoint(s),n=this.layerPointToLatLng(o);this.fire(i,{latlng:n,layerPoint:o,containerPoint:s,originalEvent:t})}}},_onTileLayerLoad:function(){this._tileLayersToLoad--,this._tileLayersNum&&!this._tileLayersToLoad&&this._tileBg&&(clearTimeout(this._clearTileBgTimer),this._clearTileBgTimer=setTimeout(e.bind(this._clearTileBg,this),500))},whenReady:function(t,i){return this._loaded?t.call(i||this,this):this.on("load",t,i),this},_getMapPanePos:function(){return e.DomUtil.getPosition(this._mapPane)},_getTopLeftPoint:function(){if(!this._loaded)throw Error("Set map center and zoom first.");return this._initialTopLeftPoint.subtract(this._getMapPanePos())},_getNewTopLeftPoint:function(t,i){var s=this.getSize()._divideBy(2);return this.project(t,i)._subtract(s)._round()},_latLngToNewLayerPoint:function(t,i,s){var e=this._getNewTopLeftPoint(s,i).add(this._getMapPanePos());return this.project(t,i)._subtract(e)},_getCenterLayerPoint:function(){return this.containerPointToLayerPoint(this.getSize()._divideBy(2))},_getCenterOffset:function(t){return this.latLngToLayerPoint(t).subtract(this._getCenterLayerPoint())},_limitZoom:function(t){var i=this.getMinZoom(),s=this.getMaxZoom();return Math.max(i,Math.min(s,t))}}),e.map=function(t,i){return new e.Map(t,i)},e.Projection.Mercator={MAX_LATITUDE:85.0840591556,R_MINOR:6356752.3142,R_MAJOR:6378137,project:function(t){var i=e.LatLng.DEG_TO_RAD,s=this.MAX_LATITUDE,o=Math.max(Math.min(s,t.lat),-s),n=this.R_MAJOR,a=this.R_MINOR,r=t.lng*i*n,h=o*i,l=a/n,c=Math.sqrt(1-l*l),m=c*Math.sin(h);m=Math.pow((1-m)/(1+m),.5*c);var u=Math.tan(.5*(.5*Math.PI-h))/m;return h=-a*Math.log(u),new e.Point(r,h)},unproject:function(t){for(var i,s=e.LatLng.RAD_TO_DEG,o=this.R_MAJOR,n=this.R_MINOR,a=t.x*s/o,r=n/o,h=Math.sqrt(1-r*r),l=Math.exp(-t.y/n),c=Math.PI/2-2*Math.atan(l),m=15,u=1e-7,d=m,p=.1;Math.abs(p)>u&&--d>0;)i=h*Math.sin(c),p=Math.PI/2-2*Math.atan(l*Math.pow((1-i)/(1+i),.5*h))-c,c+=p;return new e.LatLng(c*s,a)}},e.CRS.EPSG3395=e.extend({},e.CRS,{code:"EPSG:3395",projection:e.Projection.Mercator,transformation:function(){var t=e.Projection.Mercator,i=t.R_MAJOR,s=t.R_MINOR;return new e.Transformation(.5/(Math.PI*i),.5,-.5/(Math.PI*s),.5)}()}),e.TileLayer=e.Class.extend({includes:e.Mixin.Events,options:{minZoom:0,maxZoom:18,tileSize:256,subdomains:"abc",errorTileUrl:"",attribution:"",zoomOffset:0,opacity:1,unloadInvisibleTiles:e.Browser.mobile,updateWhenIdle:e.Browser.mobile},initialize:function(t,i){i=e.setOptions(this,i),i.detectRetina&&e.Browser.retina&&i.maxZoom>0&&(i.tileSize=Math.floor(i.tileSize/2),i.zoomOffset++,i.minZoom>0&&i.minZoom--,this.options.maxZoom--),this._url=t;var s=this.options.subdomains;"string"==typeof s&&(this.options.subdomains=s.split(""))},onAdd:function(t){this._map=t,this._initContainer(),this._createTileProto(),t.on({viewreset:this._resetCallback,moveend:this._update},this),this.options.updateWhenIdle||(this._limitedUpdate=e.Util.limitExecByInterval(this._update,150,this),t.on("move",this._limitedUpdate,this)),this._reset(),this._update()},addTo:function(t){return t.addLayer(this),this},onRemove:function(t){this._container.parentNode.removeChild(this._container),t.off({viewreset:this._resetCallback,moveend:this._update},this),this.options.updateWhenIdle||t.off("move",this._limitedUpdate,this),this._container=null,this._map=null +},bringToFront:function(){var t=this._map._panes.tilePane;return this._container&&(t.appendChild(this._container),this._setAutoZIndex(t,Math.max)),this},bringToBack:function(){var t=this._map._panes.tilePane;return this._container&&(t.insertBefore(this._container,t.firstChild),this._setAutoZIndex(t,Math.min)),this},getAttribution:function(){return this.options.attribution},setOpacity:function(t){return this.options.opacity=t,this._map&&this._updateOpacity(),this},setZIndex:function(t){return this.options.zIndex=t,this._updateZIndex(),this},setUrl:function(t,i){return this._url=t,i||this.redraw(),this},redraw:function(){return this._map&&(this._map._panes.tilePane.empty=!1,this._reset(!0),this._update()),this},_updateZIndex:function(){this._container&&this.options.zIndex!==s&&(this._container.style.zIndex=this.options.zIndex)},_setAutoZIndex:function(t,i){var s,e,o,n=t.children,a=-i(1/0,-1/0);for(e=0,o=n.length;o>e;e++)n[e]!==this._container&&(s=parseInt(n[e].style.zIndex,10),isNaN(s)||(a=i(a,s)));this.options.zIndex=this._container.style.zIndex=(isFinite(a)?a:0)+i(1,-1)},_updateOpacity:function(){e.DomUtil.setOpacity(this._container,this.options.opacity);var t,i=this._tiles;if(e.Browser.webkit)for(t in i)i.hasOwnProperty(t)&&(i[t].style.webkitTransform+=" translate(0,0)")},_initContainer:function(){var t=this._map._panes.tilePane;(!this._container||t.empty)&&(this._container=e.DomUtil.create("div","leaflet-layer"),this._updateZIndex(),t.appendChild(this._container),1>this.options.opacity&&this._updateOpacity())},_resetCallback:function(t){this._reset(t.hard)},_reset:function(t){var i=this._tiles;for(var s in i)i.hasOwnProperty(s)&&this.fire("tileunload",{tile:i[s]});this._tiles={},this._tilesToLoad=0,this.options.reuseTiles&&(this._unusedTiles=[]),t&&this._container&&(this._container.innerHTML=""),this._initContainer()},_update:function(){if(this._map){var t=this._map.getPixelBounds(),i=this._map.getZoom(),s=this.options.tileSize;if(!(i>this.options.maxZoom||this.options.minZoom>i)){var o=new e.Point(Math.floor(t.min.x/s),Math.floor(t.min.y/s)),n=new e.Point(Math.floor(t.max.x/s),Math.floor(t.max.y/s)),a=new e.Bounds(o,n);this._addTilesFromCenterOut(a),(this.options.unloadInvisibleTiles||this.options.reuseTiles)&&this._removeOtherTiles(a)}}},_addTilesFromCenterOut:function(t){var s,o,n,a=[],r=t.getCenter();for(s=t.min.y;t.max.y>=s;s++)for(o=t.min.x;t.max.x>=o;o++)n=new e.Point(o,s),this._tileShouldBeLoaded(n)&&a.push(n);var h=a.length;if(0!==h){a.sort(function(t,i){return t.distanceTo(r)-i.distanceTo(r)});var l=i.createDocumentFragment();for(this._tilesToLoad||this.fire("loading"),this._tilesToLoad+=h,o=0;h>o;o++)this._addTile(a[o],l);this._container.appendChild(l)}},_tileShouldBeLoaded:function(t){if(t.x+":"+t.y in this._tiles)return!1;if(!this.options.continuousWorld){var i=this._getWrapTileNum();if(this.options.noWrap&&(0>t.x||t.x>=i)||0>t.y||t.y>=i)return!1}return!0},_removeOtherTiles:function(t){var i,s,e,o;for(o in this._tiles)this._tiles.hasOwnProperty(o)&&(i=o.split(":"),s=parseInt(i[0],10),e=parseInt(i[1],10),(t.min.x>s||s>t.max.x||t.min.y>e||e>t.max.y)&&this._removeTile(o))},_removeTile:function(t){var i=this._tiles[t];this.fire("tileunload",{tile:i,url:i.src}),this.options.reuseTiles?(e.DomUtil.removeClass(i,"leaflet-tile-loaded"),this._unusedTiles.push(i)):i.parentNode===this._container&&this._container.removeChild(i),e.Browser.android||(i.src=e.Util.emptyImageUrl),delete this._tiles[t]},_addTile:function(t,i){var s=this._getTilePos(t),o=this._getTile();e.DomUtil.setPosition(o,s,e.Browser.chrome||e.Browser.android23),this._tiles[t.x+":"+t.y]=o,this._loadTile(o,t),o.parentNode!==this._container&&i.appendChild(o)},_getZoomForUrl:function(){var t=this.options,i=this._map.getZoom();return t.zoomReverse&&(i=t.maxZoom-i),i+t.zoomOffset},_getTilePos:function(t){var i=this._map.getPixelOrigin(),s=this.options.tileSize;return t.multiplyBy(s).subtract(i)},getTileUrl:function(t){return this._adjustTilePoint(t),e.Util.template(this._url,e.extend({s:this._getSubdomain(t),z:this._getZoomForUrl(),x:t.x,y:t.y},this.options))},_getWrapTileNum:function(){return Math.pow(2,this._getZoomForUrl())},_adjustTilePoint:function(t){var i=this._getWrapTileNum();this.options.continuousWorld||this.options.noWrap||(t.x=(t.x%i+i)%i),this.options.tms&&(t.y=i-t.y-1)},_getSubdomain:function(t){var i=(t.x+t.y)%this.options.subdomains.length;return this.options.subdomains[i]},_createTileProto:function(){var t=this._tileImg=e.DomUtil.create("img","leaflet-tile");t.style.width=t.style.height=this.options.tileSize+"px",t.galleryimg="no"},_getTile:function(){if(this.options.reuseTiles&&this._unusedTiles.length>0){var t=this._unusedTiles.pop();return this._resetTile(t),t}return this._createTile()},_resetTile:function(){},_createTile:function(){var t=this._tileImg.cloneNode(!1);return t.onselectstart=t.onmousemove=e.Util.falseFn,t},_loadTile:function(t,i){t._layer=this,t.onload=this._tileOnLoad,t.onerror=this._tileOnError,t.src=this.getTileUrl(i)},_tileLoaded:function(){this._tilesToLoad--,this._tilesToLoad||this.fire("load")},_tileOnLoad:function(){var t=this._layer;this.src!==e.Util.emptyImageUrl&&(e.DomUtil.addClass(this,"leaflet-tile-loaded"),t.fire("tileload",{tile:this,url:this.src})),t._tileLoaded()},_tileOnError:function(){var t=this._layer;t.fire("tileerror",{tile:this,url:this.src});var i=t.options.errorTileUrl;i&&(this.src=i),t._tileLoaded()}}),e.tileLayer=function(t,i){return new e.TileLayer(t,i)},e.TileLayer.WMS=e.TileLayer.extend({defaultWmsParams:{service:"WMS",request:"GetMap",version:"1.1.1",layers:"",styles:"",format:"image/jpeg",transparent:!1},initialize:function(t,i){this._url=t;var s=e.extend({},this.defaultWmsParams);s.width=s.height=i.detectRetina&&e.Browser.retina?2*this.options.tileSize:this.options.tileSize;for(var o in i)this.options.hasOwnProperty(o)||(s[o]=i[o]);this.wmsParams=s,e.setOptions(this,i)},onAdd:function(t){var i=parseFloat(this.wmsParams.version)>=1.3?"crs":"srs";this.wmsParams[i]=t.options.crs.code,e.TileLayer.prototype.onAdd.call(this,t)},getTileUrl:function(t,i){this._adjustTilePoint(t);var s=this._map,o=s.options.crs,n=this.options.tileSize,a=t.multiplyBy(n),r=a.add(new e.Point(n,n)),h=o.project(s.unproject(a,i)),l=o.project(s.unproject(r,i)),c=[h.x,l.y,l.x,h.y].join(","),m=e.Util.template(this._url,{s:this._getSubdomain(t)});return m+e.Util.getParamString(this.wmsParams,m)+"&bbox="+c},setParams:function(t,i){return e.extend(this.wmsParams,t),i||this.redraw(),this}}),e.tileLayer.wms=function(t,i){return new e.TileLayer.WMS(t,i)},e.TileLayer.Canvas=e.TileLayer.extend({options:{async:!1},initialize:function(t){e.setOptions(this,t)},redraw:function(){var t=this._tiles;for(var i in t)t.hasOwnProperty(i)&&this._redrawTile(t[i])},_redrawTile:function(t){this.drawTile(t,t._tilePoint,this._map._zoom)},_createTileProto:function(){var t=this._canvasProto=e.DomUtil.create("canvas","leaflet-tile");t.width=t.height=this.options.tileSize},_createTile:function(){var t=this._canvasProto.cloneNode(!1);return t.onselectstart=t.onmousemove=e.Util.falseFn,t},_loadTile:function(t,i){t._layer=this,t._tilePoint=i,this._redrawTile(t),this.options.async||this.tileDrawn(t)},drawTile:function(){},tileDrawn:function(t){this._tileOnLoad.call(t)}}),e.tileLayer.canvas=function(t){return new e.TileLayer.Canvas(t)},e.ImageOverlay=e.Class.extend({includes:e.Mixin.Events,options:{opacity:1},initialize:function(t,i,s){this._url=t,this._bounds=e.latLngBounds(i),e.setOptions(this,s)},onAdd:function(t){this._map=t,this._image||this._initImage(),t._panes.overlayPane.appendChild(this._image),t.on("viewreset",this._reset,this),t.options.zoomAnimation&&e.Browser.any3d&&t.on("zoomanim",this._animateZoom,this),this._reset()},onRemove:function(t){t.getPanes().overlayPane.removeChild(this._image),t.off("viewreset",this._reset,this),t.options.zoomAnimation&&t.off("zoomanim",this._animateZoom,this)},addTo:function(t){return t.addLayer(this),this},setOpacity:function(t){return this.options.opacity=t,this._updateOpacity(),this},bringToFront:function(){return this._image&&this._map._panes.overlayPane.appendChild(this._image),this},bringToBack:function(){var t=this._map._panes.overlayPane;return this._image&&t.insertBefore(this._image,t.firstChild),this},_initImage:function(){this._image=e.DomUtil.create("img","leaflet-image-layer"),this._map.options.zoomAnimation&&e.Browser.any3d?e.DomUtil.addClass(this._image,"leaflet-zoom-animated"):e.DomUtil.addClass(this._image,"leaflet-zoom-hide"),this._updateOpacity(),e.extend(this._image,{galleryimg:"no",onselectstart:e.Util.falseFn,onmousemove:e.Util.falseFn,onload:e.bind(this._onImageLoad,this),src:this._url})},_animateZoom:function(t){var i=this._map,s=this._image,o=i.getZoomScale(t.zoom),n=this._bounds.getNorthWest(),a=this._bounds.getSouthEast(),r=i._latLngToNewLayerPoint(n,t.zoom,t.center),h=i._latLngToNewLayerPoint(a,t.zoom,t.center)._subtract(r),l=r._add(h._multiplyBy(.5*(1-1/o)));s.style[e.DomUtil.TRANSFORM]=e.DomUtil.getTranslateString(l)+" scale("+o+") "},_reset:function(){var t=this._image,i=this._map.latLngToLayerPoint(this._bounds.getNorthWest()),s=this._map.latLngToLayerPoint(this._bounds.getSouthEast())._subtract(i);e.DomUtil.setPosition(t,i),t.style.width=s.x+"px",t.style.height=s.y+"px"},_onImageLoad:function(){this.fire("load")},_updateOpacity:function(){e.DomUtil.setOpacity(this._image,this.options.opacity)}}),e.imageOverlay=function(t,i,s){return new e.ImageOverlay(t,i,s)},e.Icon=e.Class.extend({options:{className:""},initialize:function(t){e.setOptions(this,t)},createIcon:function(){return this._createIcon("icon")},createShadow:function(){return this._createIcon("shadow")},_createIcon:function(t){var i=this._getIconUrl(t);if(!i){if("icon"===t)throw Error("iconUrl not set in Icon options (see the docs).");return null}var s=this._createImg(i);return this._setIconStyles(s,t),s},_setIconStyles:function(t,i){var s,o=this.options,n=e.point(o[i+"Size"]);s="shadow"===i?e.point(o.shadowAnchor||o.iconAnchor):e.point(o.iconAnchor),!s&&n&&(s=n.divideBy(2,!0)),t.className="leaflet-marker-"+i+" "+o.className,s&&(t.style.marginLeft=-s.x+"px",t.style.marginTop=-s.y+"px"),n&&(t.style.width=n.x+"px",t.style.height=n.y+"px")},_createImg:function(t){var s;return e.Browser.ie6?(s=i.createElement("div"),s.style.filter='progid:DXImageTransform.Microsoft.AlphaImageLoader(src="'+t+'")'):(s=i.createElement("img"),s.src=t),s},_getIconUrl:function(t){return e.Browser.retina&&this.options[t+"RetinaUrl"]?this.options[t+"RetinaUrl"]:this.options[t+"Url"]}}),e.icon=function(t){return new e.Icon(t)},e.Icon.Default=e.Icon.extend({options:{iconSize:new e.Point(25,41),iconAnchor:new e.Point(12,41),popupAnchor:new e.Point(1,-34),shadowSize:new e.Point(41,41)},_getIconUrl:function(t){var i=t+"Url";if(this.options[i])return this.options[i];e.Browser.retina&&"icon"===t&&(t+="@2x");var s=e.Icon.Default.imagePath;if(!s)throw Error("Couldn't autodetect L.Icon.Default.imagePath, set it manually.");return "marker-"+t+".png"}}),e.Icon.Default.imagePath=function(){var t,s,e,o,n=i.getElementsByTagName("script"),a=/\/?leaflet[\-\._]?([\w\-\._]*)\.js\??/;for(t=0,s=n.length;s>t;t++)if(e=n[t].src,o=e.match(a))return e.split(a)[0]+""}(),e.Marker=e.Class.extend({includes:e.Mixin.Events,options:{icon:new e.Icon.Default,title:"",clickable:!0,draggable:!1,zIndexOffset:0,opacity:1,riseOnHover:!1,riseOffset:250},initialize:function(t,i){e.setOptions(this,i),this._latlng=e.latLng(t)},onAdd:function(t){this._map=t,t.on("viewreset",this.update,this),this._initIcon(),this.update(),t.options.zoomAnimation&&t.options.markerZoomAnimation&&t.on("zoomanim",this._animateZoom,this)},addTo:function(t){return t.addLayer(this),this},onRemove:function(t){this._removeIcon(),this.fire("remove"),t.off({viewreset:this.update,zoomanim:this._animateZoom},this),this._map=null},getLatLng:function(){return this._latlng},setLatLng:function(t){return this._latlng=e.latLng(t),this.update(),this.fire("move",{latlng:this._latlng})},setZIndexOffset:function(t){return this.options.zIndexOffset=t,this.update(),this},setIcon:function(t){return this._map&&this._removeIcon(),this.options.icon=t,this._map&&(this._initIcon(),this.update()),this},update:function(){if(this._icon){var t=this._map.latLngToLayerPoint(this._latlng).round();this._setPos(t)}return this},_initIcon:function(){var t=this.options,i=this._map,s=i.options.zoomAnimation&&i.options.markerZoomAnimation,o=s?"leaflet-zoom-animated":"leaflet-zoom-hide",n=!1;this._icon||(this._icon=t.icon.createIcon(),t.title&&(this._icon.title=t.title),this._initInteraction(),n=1>this.options.opacity,e.DomUtil.addClass(this._icon,o),t.riseOnHover&&e.DomEvent.on(this._icon,"mouseover",this._bringToFront,this).on(this._icon,"mouseout",this._resetZIndex,this)),this._shadow||(this._shadow=t.icon.createShadow(),this._shadow&&(e.DomUtil.addClass(this._shadow,o),n=1>this.options.opacity)),n&&this._updateOpacity();var a=this._map._panes;a.markerPane.appendChild(this._icon),this._shadow&&a.shadowPane.appendChild(this._shadow)},_removeIcon:function(){var t=this._map._panes;this.options.riseOnHover&&e.DomEvent.off(this._icon,"mouseover",this._bringToFront).off(this._icon,"mouseout",this._resetZIndex),t.markerPane.removeChild(this._icon),this._shadow&&t.shadowPane.removeChild(this._shadow),this._icon=this._shadow=null},_setPos:function(t){e.DomUtil.setPosition(this._icon,t),this._shadow&&e.DomUtil.setPosition(this._shadow,t),this._zIndex=t.y+this.options.zIndexOffset,this._resetZIndex()},_updateZIndex:function(t){this._icon.style.zIndex=this._zIndex+t},_animateZoom:function(t){var i=this._map._latLngToNewLayerPoint(this._latlng,t.zoom,t.center);this._setPos(i)},_initInteraction:function(){if(this.options.clickable){var t=this._icon,i=["dblclick","mousedown","mouseover","mouseout","contextmenu"];e.DomUtil.addClass(t,"leaflet-clickable"),e.DomEvent.on(t,"click",this._onMouseClick,this);for(var s=0;i.length>s;s++)e.DomEvent.on(t,i[s],this._fireMouseEvent,this);e.Handler.MarkerDrag&&(this.dragging=new e.Handler.MarkerDrag(this),this.options.draggable&&this.dragging.enable())}},_onMouseClick:function(t){var i=this.dragging&&this.dragging.moved();(this.hasEventListeners(t.type)||i)&&e.DomEvent.stopPropagation(t),i||(this.dragging&&this.dragging._enabled||!this._map.dragging||!this._map.dragging.moved())&&this.fire(t.type,{originalEvent:t})},_fireMouseEvent:function(t){this.fire(t.type,{originalEvent:t}),"contextmenu"===t.type&&this.hasEventListeners(t.type)&&e.DomEvent.preventDefault(t),"mousedown"!==t.type&&e.DomEvent.stopPropagation(t)},setOpacity:function(t){this.options.opacity=t,this._map&&this._updateOpacity()},_updateOpacity:function(){e.DomUtil.setOpacity(this._icon,this.options.opacity),this._shadow&&e.DomUtil.setOpacity(this._shadow,this.options.opacity)},_bringToFront:function(){this._updateZIndex(this.options.riseOffset)},_resetZIndex:function(){this._updateZIndex(0)}}),e.marker=function(t,i){return new e.Marker(t,i)},e.DivIcon=e.Icon.extend({options:{iconSize:new e.Point(12,12),className:"leaflet-div-icon"},createIcon:function(){var t=i.createElement("div"),s=this.options;return s.html&&(t.innerHTML=s.html),s.bgPos&&(t.style.backgroundPosition=-s.bgPos.x+"px "+-s.bgPos.y+"px"),this._setIconStyles(t,"icon"),t},createShadow:function(){return null}}),e.divIcon=function(t){return new e.DivIcon(t)},e.Map.mergeOptions({closePopupOnClick:!0}),e.Popup=e.Class.extend({includes:e.Mixin.Events,options:{minWidth:50,maxWidth:300,maxHeight:null,autoPan:!0,closeButton:!0,offset:new e.Point(0,6),autoPanPadding:new e.Point(5,5),className:"",zoomAnimation:!0},initialize:function(t,i){e.setOptions(this,t),this._source=i,this._animated=e.Browser.any3d&&this.options.zoomAnimation},onAdd:function(t){this._map=t,this._container||this._initLayout(),this._updateContent();var i=t.options.fadeAnimation;i&&e.DomUtil.setOpacity(this._container,0),t._panes.popupPane.appendChild(this._container),t.on("viewreset",this._updatePosition,this),this._animated&&t.on("zoomanim",this._zoomAnimation,this),t.options.closePopupOnClick&&t.on("preclick",this._close,this),this._update(),i&&e.DomUtil.setOpacity(this._container,1)},addTo:function(t){return t.addLayer(this),this},openOn:function(t){return t.openPopup(this),this},onRemove:function(t){t._panes.popupPane.removeChild(this._container),e.Util.falseFn(this._container.offsetWidth),t.off({viewreset:this._updatePosition,preclick:this._close,zoomanim:this._zoomAnimation},this),t.options.fadeAnimation&&e.DomUtil.setOpacity(this._container,0),this._map=null},setLatLng:function(t){return this._latlng=e.latLng(t),this._update(),this},setContent:function(t){return this._content=t,this._update(),this},_close:function(){var t=this._map;t&&(t._popup=null,t.removeLayer(this).fire("popupclose",{popup:this}))},_initLayout:function(){var t,i="leaflet-popup",s=i+" "+this.options.className+" leaflet-zoom-"+(this._animated?"animated":"hide"),o=this._container=e.DomUtil.create("div",s);this.options.closeButton&&(t=this._closeButton=e.DomUtil.create("a",i+"-close-button",o),t.href="#close",t.innerHTML="×",e.DomEvent.on(t,"click",this._onCloseButtonClick,this));var n=this._wrapper=e.DomUtil.create("div",i+"-content-wrapper",o);e.DomEvent.disableClickPropagation(n),this._contentNode=e.DomUtil.create("div",i+"-content",n),e.DomEvent.on(this._contentNode,"mousewheel",e.DomEvent.stopPropagation),this._tipContainer=e.DomUtil.create("div",i+"-tip-container",o),this._tip=e.DomUtil.create("div",i+"-tip",this._tipContainer)},_update:function(){this._map&&(this._container.style.visibility="hidden",this._updateContent(),this._updateLayout(),this._updatePosition(),this._container.style.visibility="",this._adjustPan())},_updateContent:function(){if(this._content){if("string"==typeof this._content)this._contentNode.innerHTML=this._content;else{for(;this._contentNode.hasChildNodes();)this._contentNode.removeChild(this._contentNode.firstChild);this._contentNode.appendChild(this._content)}this.fire("contentupdate")}},_updateLayout:function(){var t=this._contentNode,i=t.style;i.width="",i.whiteSpace="nowrap";var s=t.offsetWidth;s=Math.min(s,this.options.maxWidth),s=Math.max(s,this.options.minWidth),i.width=s+1+"px",i.whiteSpace="",i.height="";var o=t.offsetHeight,n=this.options.maxHeight,a="leaflet-popup-scrolled";n&&o>n?(i.height=n+"px",e.DomUtil.addClass(t,a)):e.DomUtil.removeClass(t,a),this._containerWidth=this._container.offsetWidth},_updatePosition:function(){if(this._map){var t=this._map.latLngToLayerPoint(this._latlng),i=this._animated,s=this.options.offset;i&&e.DomUtil.setPosition(this._container,t),this._containerBottom=-s.y-(i?0:t.y),this._containerLeft=-Math.round(this._containerWidth/2)+s.x+(i?0:t.x),this._container.style.bottom=this._containerBottom+"px",this._container.style.left=this._containerLeft+"px"}},_zoomAnimation:function(t){var i=this._map._latLngToNewLayerPoint(this._latlng,t.zoom,t.center);e.DomUtil.setPosition(this._container,i)},_adjustPan:function(){if(this.options.autoPan){var t=this._map,i=this._container.offsetHeight,s=this._containerWidth,o=new e.Point(this._containerLeft,-i-this._containerBottom);this._animated&&o._add(e.DomUtil.getPosition(this._container));var n=t.layerPointToContainerPoint(o),a=this.options.autoPanPadding,r=t.getSize(),h=0,l=0;0>n.x&&(h=n.x-a.x),n.x+s>r.x&&(h=n.x+s-r.x+a.x),0>n.y&&(l=n.y-a.y),n.y+i>r.y&&(l=n.y+i-r.y+a.y),(h||l)&&t.panBy(new e.Point(h,l))}},_onCloseButtonClick:function(t){this._close(),e.DomEvent.stop(t)}}),e.popup=function(t,i){return new e.Popup(t,i)},e.Marker.include({openPopup:function(){return this._popup&&this._map&&(this._popup.setLatLng(this._latlng),this._map.openPopup(this._popup)),this},closePopup:function(){return this._popup&&this._popup._close(),this},bindPopup:function(t,i){var s=e.point(this.options.icon.options.popupAnchor)||new e.Point(0,0);return s=s.add(e.Popup.prototype.options.offset),i&&i.offset&&(s=s.add(i.offset)),i=e.extend({offset:s},i),this._popup||this.on("click",this.openPopup,this).on("remove",this.closePopup,this).on("move",this._movePopup,this),this._popup=new e.Popup(i,this).setContent(t),this},unbindPopup:function(){return this._popup&&(this._popup=null,this.off("click",this.openPopup).off("remove",this.closePopup).off("move",this._movePopup)),this},_movePopup:function(t){this._popup.setLatLng(t.latlng)}}),e.Map.include({openPopup:function(t){return this.closePopup(),this._popup=t,this.addLayer(t).fire("popupopen",{popup:this._popup})},closePopup:function(){return this._popup&&this._popup._close(),this}}),e.LayerGroup=e.Class.extend({initialize:function(t){this._layers={};var i,s;if(t)for(i=0,s=t.length;s>i;i++)this.addLayer(t[i])},addLayer:function(t){var i=e.stamp(t);return this._layers[i]=t,this._map&&this._map.addLayer(t),this},removeLayer:function(t){var i=e.stamp(t);return delete this._layers[i],this._map&&this._map.removeLayer(t),this},clearLayers:function(){return this.eachLayer(this.removeLayer,this),this},invoke:function(t){var i,s,e=Array.prototype.slice.call(arguments,1);for(i in this._layers)this._layers.hasOwnProperty(i)&&(s=this._layers[i],s[t]&&s[t].apply(s,e));return this},onAdd:function(t){this._map=t,this.eachLayer(t.addLayer,t)},onRemove:function(t){this.eachLayer(t.removeLayer,t),this._map=null},addTo:function(t){return t.addLayer(this),this},eachLayer:function(t,i){for(var s in this._layers)this._layers.hasOwnProperty(s)&&t.call(i,this._layers[s])},setZIndex:function(t){return this.invoke("setZIndex",t)}}),e.layerGroup=function(t){return new e.LayerGroup(t)},e.FeatureGroup=e.LayerGroup.extend({includes:e.Mixin.Events,statics:{EVENTS:"click dblclick mouseover mouseout mousemove contextmenu"},addLayer:function(t){return this._layers[e.stamp(t)]?this:(t.on(e.FeatureGroup.EVENTS,this._propagateEvent,this),e.LayerGroup.prototype.addLayer.call(this,t),this._popupContent&&t.bindPopup&&t.bindPopup(this._popupContent,this._popupOptions),this.fire("layeradd",{layer:t}))},removeLayer:function(t){return t.off(e.FeatureGroup.EVENTS,this._propagateEvent,this),e.LayerGroup.prototype.removeLayer.call(this,t),this._popupContent&&this.invoke("unbindPopup"),this.fire("layerremove",{layer:t})},bindPopup:function(t,i){return this._popupContent=t,this._popupOptions=i,this.invoke("bindPopup",t,i)},setStyle:function(t){return this.invoke("setStyle",t)},bringToFront:function(){return this.invoke("bringToFront")},bringToBack:function(){return this.invoke("bringToBack")},getBounds:function(){var t=new e.LatLngBounds;return this.eachLayer(function(i){t.extend(i instanceof e.Marker?i.getLatLng():i.getBounds())}),t},_propagateEvent:function(t){t.layer=t.target,t.target=this,this.fire(t.type,t)}}),e.featureGroup=function(t){return new e.FeatureGroup(t)},e.Path=e.Class.extend({includes:[e.Mixin.Events],statics:{CLIP_PADDING:e.Browser.mobile?Math.max(0,Math.min(.5,(1280/Math.max(t.innerWidth,t.innerHeight)-1)/2)):.5},options:{stroke:!0,color:"#0033ff",dashArray:null,weight:5,opacity:.5,fill:!1,fillColor:null,fillOpacity:.2,clickable:!0},initialize:function(t){e.setOptions(this,t)},onAdd:function(t){this._map=t,this._container||(this._initElements(),this._initEvents()),this.projectLatlngs(),this._updatePath(),this._container&&this._map._pathRoot.appendChild(this._container),this.fire("add"),t.on({viewreset:this.projectLatlngs,moveend:this._updatePath},this)},addTo:function(t){return t.addLayer(this),this},onRemove:function(t){t._pathRoot.removeChild(this._container),this.fire("remove"),this._map=null,e.Browser.vml&&(this._container=null,this._stroke=null,this._fill=null),t.off({viewreset:this.projectLatlngs,moveend:this._updatePath},this)},projectLatlngs:function(){},setStyle:function(t){return e.setOptions(this,t),this._container&&this._updateStyle(),this},redraw:function(){return this._map&&(this.projectLatlngs(),this._updatePath()),this}}),e.Map.include({_updatePathViewport:function(){var t=e.Path.CLIP_PADDING,i=this.getSize(),s=e.DomUtil.getPosition(this._mapPane),o=s.multiplyBy(-1)._subtract(i.multiplyBy(t)._round()),n=o.add(i.multiplyBy(1+2*t)._round());this._pathViewport=new e.Bounds(o,n)}}),e.Path.SVG_NS="http://www.w3.org/2000/svg",e.Browser.svg=!(!i.createElementNS||!i.createElementNS(e.Path.SVG_NS,"svg").createSVGRect),e.Path=e.Path.extend({statics:{SVG:e.Browser.svg},bringToFront:function(){var t=this._map._pathRoot,i=this._container;return i&&t.lastChild!==i&&t.appendChild(i),this},bringToBack:function(){var t=this._map._pathRoot,i=this._container,s=t.firstChild;return i&&s!==i&&t.insertBefore(i,s),this},getPathString:function(){},_createElement:function(t){return i.createElementNS(e.Path.SVG_NS,t)},_initElements:function(){this._map._initPathRoot(),this._initPath(),this._initStyle()},_initPath:function(){this._container=this._createElement("g"),this._path=this._createElement("path"),this._container.appendChild(this._path)},_initStyle:function(){this.options.stroke&&(this._path.setAttribute("stroke-linejoin","round"),this._path.setAttribute("stroke-linecap","round")),this.options.fill&&this._path.setAttribute("fill-rule","evenodd"),this._updateStyle()},_updateStyle:function(){this.options.stroke?(this._path.setAttribute("stroke",this.options.color),this._path.setAttribute("stroke-opacity",this.options.opacity),this._path.setAttribute("stroke-width",this.options.weight),this.options.dashArray?this._path.setAttribute("stroke-dasharray",this.options.dashArray):this._path.removeAttribute("stroke-dasharray")):this._path.setAttribute("stroke","none"),this.options.fill?(this._path.setAttribute("fill",this.options.fillColor||this.options.color),this._path.setAttribute("fill-opacity",this.options.fillOpacity)):this._path.setAttribute("fill","none")},_updatePath:function(){var t=this.getPathString();t||(t="M0 0"),this._path.setAttribute("d",t)},_initEvents:function(){if(this.options.clickable){(e.Browser.svg||!e.Browser.vml)&&this._path.setAttribute("class","leaflet-clickable"),e.DomEvent.on(this._container,"click",this._onMouseClick,this);for(var t=["dblclick","mousedown","mouseover","mouseout","mousemove","contextmenu"],i=0;t.length>i;i++)e.DomEvent.on(this._container,t[i],this._fireMouseEvent,this)}},_onMouseClick:function(t){this._map.dragging&&this._map.dragging.moved()||this._fireMouseEvent(t)},_fireMouseEvent:function(t){if(this.hasEventListeners(t.type)){var i=this._map,s=i.mouseEventToContainerPoint(t),o=i.containerPointToLayerPoint(s),n=i.layerPointToLatLng(o);this.fire(t.type,{latlng:n,layerPoint:o,containerPoint:s,originalEvent:t}),"contextmenu"===t.type&&e.DomEvent.preventDefault(t),"mousemove"!==t.type&&e.DomEvent.stopPropagation(t)}}}),e.Map.include({_initPathRoot:function(){this._pathRoot||(this._pathRoot=e.Path.prototype._createElement("svg"),this._panes.overlayPane.appendChild(this._pathRoot),this.options.zoomAnimation&&e.Browser.any3d?(this._pathRoot.setAttribute("class"," leaflet-zoom-animated"),this.on({zoomanim:this._animatePathZoom,zoomend:this._endPathZoom})):this._pathRoot.setAttribute("class"," leaflet-zoom-hide"),this.on("moveend",this._updateSvgViewport),this._updateSvgViewport())},_animatePathZoom:function(t){var i=this.getZoomScale(t.zoom),s=this._getCenterOffset(t.center)._multiplyBy(-i)._add(this._pathViewport.min);this._pathRoot.style[e.DomUtil.TRANSFORM]=e.DomUtil.getTranslateString(s)+" scale("+i+") ",this._pathZooming=!0},_endPathZoom:function(){this._pathZooming=!1},_updateSvgViewport:function(){if(!this._pathZooming){this._updatePathViewport();var t=this._pathViewport,i=t.min,s=t.max,o=s.x-i.x,n=s.y-i.y,a=this._pathRoot,r=this._panes.overlayPane;e.Browser.mobileWebkit&&r.removeChild(a),e.DomUtil.setPosition(a,i),a.setAttribute("width",o),a.setAttribute("height",n),a.setAttribute("viewBox",[i.x,i.y,o,n].join(" ")),e.Browser.mobileWebkit&&r.appendChild(a)}}}),e.Path.include({bindPopup:function(t,i){return(!this._popup||i)&&(this._popup=new e.Popup(i,this)),this._popup.setContent(t),this._popupHandlersAdded||(this.on("click",this._openPopup,this).on("remove",this.closePopup,this),this._popupHandlersAdded=!0),this},unbindPopup:function(){return this._popup&&(this._popup=null,this.off("click",this._openPopup).off("remove",this.closePopup),this._popupHandlersAdded=!1),this},openPopup:function(t){return this._popup&&(t=t||this._latlng||this._latlngs[Math.floor(this._latlngs.length/2)],this._openPopup({latlng:t})),this},closePopup:function(){return this._popup&&this._popup._close(),this},_openPopup:function(t){this._popup.setLatLng(t.latlng),this._map.openPopup(this._popup)}}),e.Browser.vml=!e.Browser.svg&&function(){try{var t=i.createElement("div");t.innerHTML='';var s=t.firstChild;return s.style.behavior="url(#default#VML)",s&&"object"==typeof s.adj}catch(e){return!1}}(),e.Path=e.Browser.svg||!e.Browser.vml?e.Path:e.Path.extend({statics:{VML:!0,CLIP_PADDING:.02},_createElement:function(){try{return i.namespaces.add("lvml","urn:schemas-microsoft-com:vml"),function(t){return i.createElement("')}}catch(t){return function(t){return i.createElement("<"+t+' xmlns="urn:schemas-microsoft.com:vml" class="lvml">')}}}(),_initPath:function(){var t=this._container=this._createElement("shape");e.DomUtil.addClass(t,"leaflet-vml-shape"),this.options.clickable&&e.DomUtil.addClass(t,"leaflet-clickable"),t.coordsize="1 1",this._path=this._createElement("path"),t.appendChild(this._path),this._map._pathRoot.appendChild(t)},_initStyle:function(){this._updateStyle()},_updateStyle:function(){var t=this._stroke,i=this._fill,s=this.options,e=this._container;e.stroked=s.stroke,e.filled=s.fill,s.stroke?(t||(t=this._stroke=this._createElement("stroke"),t.endcap="round",e.appendChild(t)),t.weight=s.weight+"px",t.color=s.color,t.opacity=s.opacity,t.dashStyle=s.dashArray?s.dashArray instanceof Array?s.dashArray.join(" "):s.dashArray.replace(/ *, */g," "):""):t&&(e.removeChild(t),this._stroke=null),s.fill?(i||(i=this._fill=this._createElement("fill"),e.appendChild(i)),i.color=s.fillColor||s.color,i.opacity=s.fillOpacity):i&&(e.removeChild(i),this._fill=null)},_updatePath:function(){var t=this._container.style;t.display="none",this._path.v=this.getPathString()+" ",t.display=""}}),e.Map.include(e.Browser.svg||!e.Browser.vml?{}:{_initPathRoot:function(){if(!this._pathRoot){var t=this._pathRoot=i.createElement("div");t.className="leaflet-vml-container",this._panes.overlayPane.appendChild(t),this.on("moveend",this._updatePathViewport),this._updatePathViewport()}}}),e.Browser.canvas=function(){return!!i.createElement("canvas").getContext}(),e.Path=e.Path.SVG&&!t.L_PREFER_CANVAS||!e.Browser.canvas?e.Path:e.Path.extend({statics:{CANVAS:!0,SVG:!1},redraw:function(){return this._map&&(this.projectLatlngs(),this._requestUpdate()),this},setStyle:function(t){return e.setOptions(this,t),this._map&&(this._updateStyle(),this._requestUpdate()),this},onRemove:function(t){t.off("viewreset",this.projectLatlngs,this).off("moveend",this._updatePath,this),this.options.clickable&&this._map.off("click",this._onClick,this),this._requestUpdate(),this._map=null},_requestUpdate:function(){this._map&&!e.Path._updateRequest&&(e.Path._updateRequest=e.Util.requestAnimFrame(this._fireMapMoveEnd,this._map))},_fireMapMoveEnd:function(){e.Path._updateRequest=null,this.fire("moveend")},_initElements:function(){this._map._initPathRoot(),this._ctx=this._map._canvasCtx},_updateStyle:function(){var t=this.options;t.stroke&&(this._ctx.lineWidth=t.weight,this._ctx.strokeStyle=t.color),t.fill&&(this._ctx.fillStyle=t.fillColor||t.color)},_drawPath:function(){var t,i,s,o,n,a;for(this._ctx.beginPath(),t=0,s=this._parts.length;s>t;t++){for(i=0,o=this._parts[t].length;o>i;i++)n=this._parts[t][i],a=(0===i?"move":"line")+"To",this._ctx[a](n.x,n.y);this instanceof e.Polygon&&this._ctx.closePath()}},_checkIfEmpty:function(){return!this._parts.length},_updatePath:function(){if(!this._checkIfEmpty()){var t=this._ctx,i=this.options;this._drawPath(),t.save(),this._updateStyle(),i.fill&&(t.globalAlpha=i.fillOpacity,t.fill()),i.stroke&&(t.globalAlpha=i.opacity,t.stroke()),t.restore() +}},_initEvents:function(){this.options.clickable&&this._map.on("click",this._onClick,this)},_onClick:function(t){this._containsPoint(t.layerPoint)&&this.fire("click",{latlng:t.latlng,layerPoint:t.layerPoint,containerPoint:t.containerPoint,originalEvent:t})}}),e.Map.include(e.Path.SVG&&!t.L_PREFER_CANVAS||!e.Browser.canvas?{}:{_initPathRoot:function(){var t,s=this._pathRoot;s||(s=this._pathRoot=i.createElement("canvas"),s.style.position="absolute",t=this._canvasCtx=s.getContext("2d"),t.lineCap="round",t.lineJoin="round",this._panes.overlayPane.appendChild(s),this.options.zoomAnimation&&(this._pathRoot.className="leaflet-zoom-animated",this.on("zoomanim",this._animatePathZoom),this.on("zoomend",this._endPathZoom)),this.on("moveend",this._updateCanvasViewport),this._updateCanvasViewport())},_updateCanvasViewport:function(){if(!this._pathZooming){this._updatePathViewport();var t=this._pathViewport,i=t.min,s=t.max.subtract(i),o=this._pathRoot;e.DomUtil.setPosition(o,i),o.width=s.x,o.height=s.y,o.getContext("2d").translate(-i.x,-i.y)}}}),e.LineUtil={simplify:function(t,i){if(!i||!t.length)return t.slice();var s=i*i;return t=this._reducePoints(t,s),t=this._simplifyDP(t,s)},pointToSegmentDistance:function(t,i,s){return Math.sqrt(this._sqClosestPointOnSegment(t,i,s,!0))},closestPointOnSegment:function(t,i,s){return this._sqClosestPointOnSegment(t,i,s)},_simplifyDP:function(t,i){var e=t.length,o=typeof Uint8Array!=s+""?Uint8Array:Array,n=new o(e);n[0]=n[e-1]=1,this._simplifyDPStep(t,n,i,0,e-1);var a,r=[];for(a=0;e>a;a++)n[a]&&r.push(t[a]);return r},_simplifyDPStep:function(t,i,s,e,o){var n,a,r,h=0;for(a=e+1;o-1>=a;a++)r=this._sqClosestPointOnSegment(t[a],t[e],t[o],!0),r>h&&(n=a,h=r);h>s&&(i[n]=1,this._simplifyDPStep(t,i,s,e,n),this._simplifyDPStep(t,i,s,n,o))},_reducePoints:function(t,i){for(var s=[t[0]],e=1,o=0,n=t.length;n>e;e++)this._sqDist(t[e],t[o])>i&&(s.push(t[e]),o=e);return n-1>o&&s.push(t[n-1]),s},clipSegment:function(t,i,s,e){var o,n,a,r=e?this._lastCode:this._getBitCode(t,s),h=this._getBitCode(i,s);for(this._lastCode=h;;){if(!(r|h))return[t,i];if(r&h)return!1;o=r||h,n=this._getEdgeIntersection(t,i,o,s),a=this._getBitCode(n,s),o===r?(t=n,r=a):(i=n,h=a)}},_getEdgeIntersection:function(t,i,o,n){var a=i.x-t.x,r=i.y-t.y,h=n.min,l=n.max;return 8&o?new e.Point(t.x+a*(l.y-t.y)/r,l.y):4&o?new e.Point(t.x+a*(h.y-t.y)/r,h.y):2&o?new e.Point(l.x,t.y+r*(l.x-t.x)/a):1&o?new e.Point(h.x,t.y+r*(h.x-t.x)/a):s},_getBitCode:function(t,i){var s=0;return t.xi.max.x&&(s|=2),t.yi.max.y&&(s|=8),s},_sqDist:function(t,i){var s=i.x-t.x,e=i.y-t.y;return s*s+e*e},_sqClosestPointOnSegment:function(t,i,s,o){var n,a=i.x,r=i.y,h=s.x-a,l=s.y-r,c=h*h+l*l;return c>0&&(n=((t.x-a)*h+(t.y-r)*l)/c,n>1?(a=s.x,r=s.y):n>0&&(a+=h*n,r+=l*n)),h=t.x-a,l=t.y-r,o?h*h+l*l:new e.Point(a,r)}},e.Polyline=e.Path.extend({initialize:function(t,i){e.Path.prototype.initialize.call(this,i),this._latlngs=this._convertLatLngs(t)},options:{smoothFactor:1,noClip:!1},projectLatlngs:function(){this._originalPoints=[];for(var t=0,i=this._latlngs.length;i>t;t++)this._originalPoints[t]=this._map.latLngToLayerPoint(this._latlngs[t])},getPathString:function(){for(var t=0,i=this._parts.length,s="";i>t;t++)s+=this._getPathPartStr(this._parts[t]);return s},getLatLngs:function(){return this._latlngs},setLatLngs:function(t){return this._latlngs=this._convertLatLngs(t),this.redraw()},addLatLng:function(t){return this._latlngs.push(e.latLng(t)),this.redraw()},spliceLatLngs:function(){var t=[].splice.apply(this._latlngs,arguments);return this._convertLatLngs(this._latlngs),this.redraw(),t},closestLayerPoint:function(t){for(var i,s,o=1/0,n=this._parts,a=null,r=0,h=n.length;h>r;r++)for(var l=n[r],c=1,m=l.length;m>c;c++){i=l[c-1],s=l[c];var u=e.LineUtil._sqClosestPointOnSegment(t,i,s,!0);o>u&&(o=u,a=e.LineUtil._sqClosestPointOnSegment(t,i,s))}return a&&(a.distance=Math.sqrt(o)),a},getBounds:function(){var t,i,s=new e.LatLngBounds,o=this.getLatLngs();for(t=0,i=o.length;i>t;t++)s.extend(o[t]);return s},_convertLatLngs:function(t){var i,s;for(i=0,s=t.length;s>i;i++){if(e.Util.isArray(t[i])&&"number"!=typeof t[i][0])return;t[i]=e.latLng(t[i])}return t},_initEvents:function(){e.Path.prototype._initEvents.call(this)},_getPathPartStr:function(t){for(var i,s=e.Path.VML,o=0,n=t.length,a="";n>o;o++)i=t[o],s&&i._round(),a+=(o?"L":"M")+i.x+" "+i.y;return a},_clipPoints:function(){var t,i,o,n=this._originalPoints,a=n.length;if(this.options.noClip)return this._parts=[n],s;this._parts=[];var r=this._parts,h=this._map._pathViewport,l=e.LineUtil;for(t=0,i=0;a-1>t;t++)o=l.clipSegment(n[t],n[t+1],h,t),o&&(r[i]=r[i]||[],r[i].push(o[0]),(o[1]!==n[t+1]||t===a-2)&&(r[i].push(o[1]),i++))},_simplifyPoints:function(){for(var t=this._parts,i=e.LineUtil,s=0,o=t.length;o>s;s++)t[s]=i.simplify(t[s],this.options.smoothFactor)},_updatePath:function(){this._map&&(this._clipPoints(),this._simplifyPoints(),e.Path.prototype._updatePath.call(this))}}),e.polyline=function(t,i){return new e.Polyline(t,i)},e.PolyUtil={},e.PolyUtil.clipPolygon=function(t,i){var s,o,n,a,r,h,l,c,m,u=[1,4,2,8],d=e.LineUtil;for(o=0,l=t.length;l>o;o++)t[o]._code=d._getBitCode(t[o],i);for(a=0;4>a;a++){for(c=u[a],s=[],o=0,l=t.length,n=l-1;l>o;n=o++)r=t[o],h=t[n],r._code&c?h._code&c||(m=d._getEdgeIntersection(h,r,c,i),m._code=d._getBitCode(m,i),s.push(m)):(h._code&c&&(m=d._getEdgeIntersection(h,r,c,i),m._code=d._getBitCode(m,i),s.push(m)),s.push(r));t=s}return t},e.Polygon=e.Polyline.extend({options:{fill:!0},initialize:function(t,i){e.Polyline.prototype.initialize.call(this,t,i),t&&e.Util.isArray(t[0])&&"number"!=typeof t[0][0]&&(this._latlngs=this._convertLatLngs(t[0]),this._holes=t.slice(1))},projectLatlngs:function(){if(e.Polyline.prototype.projectLatlngs.call(this),this._holePoints=[],this._holes){var t,i,s,o;for(t=0,s=this._holes.length;s>t;t++)for(this._holePoints[t]=[],i=0,o=this._holes[t].length;o>i;i++)this._holePoints[t][i]=this._map.latLngToLayerPoint(this._holes[t][i])}},_clipPoints:function(){var t=this._originalPoints,i=[];if(this._parts=[t].concat(this._holePoints),!this.options.noClip){for(var s=0,o=this._parts.length;o>s;s++){var n=e.PolyUtil.clipPolygon(this._parts[s],this._map._pathViewport);n.length&&i.push(n)}this._parts=i}},_getPathPartStr:function(t){var i=e.Polyline.prototype._getPathPartStr.call(this,t);return i+(e.Browser.svg?"z":"x")}}),e.polygon=function(t,i){return new e.Polygon(t,i)},function(){function t(t){return e.FeatureGroup.extend({initialize:function(t,i){this._layers={},this._options=i,this.setLatLngs(t)},setLatLngs:function(i){var s=0,e=i.length;for(this.eachLayer(function(t){e>s?t.setLatLngs(i[s++]):this.removeLayer(t)},this);e>s;)this.addLayer(new t(i[s++],this._options));return this}})}e.MultiPolyline=t(e.Polyline),e.MultiPolygon=t(e.Polygon),e.multiPolyline=function(t,i){return new e.MultiPolyline(t,i)},e.multiPolygon=function(t,i){return new e.MultiPolygon(t,i)}}(),e.Rectangle=e.Polygon.extend({initialize:function(t,i){e.Polygon.prototype.initialize.call(this,this._boundsToLatLngs(t),i)},setBounds:function(t){this.setLatLngs(this._boundsToLatLngs(t))},_boundsToLatLngs:function(t){return t=e.latLngBounds(t),[t.getSouthWest(),t.getNorthWest(),t.getNorthEast(),t.getSouthEast()]}}),e.rectangle=function(t,i){return new e.Rectangle(t,i)},e.Circle=e.Path.extend({initialize:function(t,i,s){e.Path.prototype.initialize.call(this,s),this._latlng=e.latLng(t),this._mRadius=i},options:{fill:!0},setLatLng:function(t){return this._latlng=e.latLng(t),this.redraw()},setRadius:function(t){return this._mRadius=t,this.redraw()},projectLatlngs:function(){var t=this._getLngRadius(),i=new e.LatLng(this._latlng.lat,this._latlng.lng-t),s=this._map.latLngToLayerPoint(i);this._point=this._map.latLngToLayerPoint(this._latlng),this._radius=Math.max(Math.round(this._point.x-s.x),1)},getBounds:function(){var t=this._getLngRadius(),i=360*(this._mRadius/40075017),s=this._latlng,o=new e.LatLng(s.lat-i,s.lng-t),n=new e.LatLng(s.lat+i,s.lng+t);return new e.LatLngBounds(o,n)},getLatLng:function(){return this._latlng},getPathString:function(){var t=this._point,i=this._radius;return this._checkIfEmpty()?"":e.Browser.svg?"M"+t.x+","+(t.y-i)+"A"+i+","+i+",0,1,1,"+(t.x-.1)+","+(t.y-i)+" z":(t._round(),i=Math.round(i),"AL "+t.x+","+t.y+" "+i+","+i+" 0,"+23592600)},getRadius:function(){return this._mRadius},_getLatRadius:function(){return 360*(this._mRadius/40075017)},_getLngRadius:function(){return this._getLatRadius()/Math.cos(e.LatLng.DEG_TO_RAD*this._latlng.lat)},_checkIfEmpty:function(){if(!this._map)return!1;var t=this._map._pathViewport,i=this._radius,s=this._point;return s.x-i>t.max.x||s.y-i>t.max.y||s.x+is;s++)for(l=this._parts[s],o=0,r=l.length,n=r-1;r>o;n=o++)if((i||0!==o)&&(h=e.LineUtil.pointToSegmentDistance(t,l[n],l[o]),c>=h))return!0;return!1}}:{}),e.Polygon.include(e.Path.CANVAS?{_containsPoint:function(t){var i,s,o,n,a,r,h,l,c=!1;if(e.Polyline.prototype._containsPoint.call(this,t,!0))return!0;for(n=0,h=this._parts.length;h>n;n++)for(i=this._parts[n],a=0,l=i.length,r=l-1;l>a;r=a++)s=i[a],o=i[r],s.y>t.y!=o.y>t.y&&t.x<(o.x-s.x)*(t.y-s.y)/(o.y-s.y)+s.x&&(c=!c);return c}}:{}),e.Circle.include(e.Path.CANVAS?{_drawPath:function(){var t=this._point;this._ctx.beginPath(),this._ctx.arc(t.x,t.y,this._radius,0,2*Math.PI,!1)},_containsPoint:function(t){var i=this._point,s=this.options.stroke?this.options.weight/2:0;return t.distanceTo(i)<=this._radius+s}}:{}),e.GeoJSON=e.FeatureGroup.extend({initialize:function(t,i){e.setOptions(this,i),this._layers={},t&&this.addData(t)},addData:function(t){var i,s,o=e.Util.isArray(t)?t:t.features;if(o){for(i=0,s=o.length;s>i;i++)(o[i].geometries||o[i].geometry||o[i].features)&&this.addData(o[i]);return this}var n=this.options;if(!n.filter||n.filter(t)){var a=e.GeoJSON.geometryToLayer(t,n.pointToLayer);return a.feature=t,a.defaultOptions=a.options,this.resetStyle(a),n.onEachFeature&&n.onEachFeature(t,a),this.addLayer(a)}},resetStyle:function(t){var i=this.options.style;i&&(e.Util.extend(t.options,t.defaultOptions),this._setLayerStyle(t,i))},setStyle:function(t){this.eachLayer(function(i){this._setLayerStyle(i,t)},this)},_setLayerStyle:function(t,i){"function"==typeof i&&(i=i(t.feature)),t.setStyle&&t.setStyle(i)}}),e.extend(e.GeoJSON,{geometryToLayer:function(t,i){var s,o,n,a,r,h="Feature"===t.type?t.geometry:t,l=h.coordinates,c=[];switch(h.type){case"Point":return s=this.coordsToLatLng(l),i?i(t,s):new e.Marker(s);case"MultiPoint":for(n=0,a=l.length;a>n;n++)s=this.coordsToLatLng(l[n]),r=i?i(t,s):new e.Marker(s),c.push(r);return new e.FeatureGroup(c);case"LineString":return o=this.coordsToLatLngs(l),new e.Polyline(o);case"Polygon":return o=this.coordsToLatLngs(l,1),new e.Polygon(o);case"MultiLineString":return o=this.coordsToLatLngs(l,1),new e.MultiPolyline(o);case"MultiPolygon":return o=this.coordsToLatLngs(l,2),new e.MultiPolygon(o);case"GeometryCollection":for(n=0,a=h.geometries.length;a>n;n++)r=this.geometryToLayer({geometry:h.geometries[n],type:"Feature",properties:t.properties},i),c.push(r);return new e.FeatureGroup(c);default:throw Error("Invalid GeoJSON object.")}},coordsToLatLng:function(t,i){var s=parseFloat(t[i?0:1]),o=parseFloat(t[i?1:0]);return new e.LatLng(s,o)},coordsToLatLngs:function(t,i,s){var e,o,n,a=[];for(o=0,n=t.length;n>o;o++)e=i?this.coordsToLatLngs(t[o],i-1,s):this.coordsToLatLng(t[o],s),a.push(e);return a}}),e.geoJson=function(t,i){return new e.GeoJSON(t,i)},e.DomEvent={addListener:function(t,i,o,n){var a,r,h,l=e.stamp(o),c="_leaflet_"+i+l;return t[c]?this:(a=function(i){return o.call(n||t,i||e.DomEvent._getEvent())},e.Browser.msTouch&&0===i.indexOf("touch")?this.addMsTouchListener(t,i,a,l):(e.Browser.touch&&"dblclick"===i&&this.addDoubleTapListener&&this.addDoubleTapListener(t,a,l),"addEventListener"in t?"mousewheel"===i?(t.addEventListener("DOMMouseScroll",a,!1),t.addEventListener(i,a,!1)):"mouseenter"===i||"mouseleave"===i?(r=a,h="mouseenter"===i?"mouseover":"mouseout",a=function(i){return e.DomEvent._checkMouse(t,i)?r(i):s},t.addEventListener(h,a,!1)):t.addEventListener(i,a,!1):"attachEvent"in t&&t.attachEvent("on"+i,a),t[c]=a,this))},removeListener:function(t,i,s){var o=e.stamp(s),n="_leaflet_"+i+o,a=t[n];if(a)return e.Browser.msTouch&&0===i.indexOf("touch")?this.removeMsTouchListener(t,i,o):e.Browser.touch&&"dblclick"===i&&this.removeDoubleTapListener?this.removeDoubleTapListener(t,o):"removeEventListener"in t?"mousewheel"===i?(t.removeEventListener("DOMMouseScroll",a,!1),t.removeEventListener(i,a,!1)):"mouseenter"===i||"mouseleave"===i?t.removeEventListener("mouseenter"===i?"mouseover":"mouseout",a,!1):t.removeEventListener(i,a,!1):"detachEvent"in t&&t.detachEvent("on"+i,a),t[n]=null,this},stopPropagation:function(t){return t.stopPropagation?t.stopPropagation():t.cancelBubble=!0,this},disableClickPropagation:function(t){for(var i=e.DomEvent.stopPropagation,s=e.Draggable.START.length-1;s>=0;s--)e.DomEvent.addListener(t,e.Draggable.START[s],i);return e.DomEvent.addListener(t,"click",i).addListener(t,"dblclick",i)},preventDefault:function(t){return t.preventDefault?t.preventDefault():t.returnValue=!1,this},stop:function(t){return e.DomEvent.preventDefault(t).stopPropagation(t)},getMousePosition:function(t,s){var o=i.body,n=i.documentElement,a=t.pageX?t.pageX:t.clientX+o.scrollLeft+n.scrollLeft,r=t.pageY?t.pageY:t.clientY+o.scrollTop+n.scrollTop,h=new e.Point(a,r);return s?h._subtract(e.DomUtil.getViewportOffset(s)):h},getWheelDelta:function(t){var i=0;return t.wheelDelta&&(i=t.wheelDelta/120),t.detail&&(i=-t.detail/3),i},_checkMouse:function(t,i){var s=i.relatedTarget;if(!s)return!0;try{for(;s&&s!==t;)s=s.parentNode}catch(e){return!1}return s!==t},_getEvent:function(){var i=t.event;if(!i)for(var s=arguments.callee.caller;s&&(i=s.arguments[0],!i||t.Event!==i.constructor);)s=s.caller;return i}},e.DomEvent.on=e.DomEvent.addListener,e.DomEvent.off=e.DomEvent.removeListener,e.Draggable=e.Class.extend({includes:e.Mixin.Events,statics:{START:e.Browser.touch?["touchstart","mousedown"]:["mousedown"],END:{mousedown:"mouseup",touchstart:"touchend",MSPointerDown:"touchend"},MOVE:{mousedown:"mousemove",touchstart:"touchmove",MSPointerDown:"touchmove"},TAP_TOLERANCE:15},initialize:function(t,i,s){this._element=t,this._dragStartTarget=i||t,this._longPress=s&&!e.Browser.msTouch},enable:function(){if(!this._enabled){for(var t=e.Draggable.START.length-1;t>=0;t--)e.DomEvent.on(this._dragStartTarget,e.Draggable.START[t],this._onDown,this);this._enabled=!0}},disable:function(){if(this._enabled){for(var t=e.Draggable.START.length-1;t>=0;t--)e.DomEvent.off(this._dragStartTarget,e.Draggable.START[t],this._onDown,this);this._enabled=!1,this._moved=!1}},_onDown:function(t){if(!(!e.Browser.touch&&t.shiftKey||1!==t.which&&1!==t.button&&!t.touches||(e.DomEvent.preventDefault(t),e.DomEvent.stopPropagation(t),e.Draggable._disabled))){if(this._simulateClick=!0,t.touches&&t.touches.length>1)return this._simulateClick=!1,clearTimeout(this._longPressTimeout),s;var o=t.touches&&1===t.touches.length?t.touches[0]:t,n=o.target;e.Browser.touch&&"a"===n.tagName.toLowerCase()&&e.DomUtil.addClass(n,"leaflet-active"),this._moved=!1,this._moving||(this._startPoint=new e.Point(o.clientX,o.clientY),this._startPos=this._newPos=e.DomUtil.getPosition(this._element),t.touches&&1===t.touches.length&&e.Browser.touch&&this._longPress&&(this._longPressTimeout=setTimeout(e.bind(function(){var t=this._newPos&&this._newPos.distanceTo(this._startPos)||0;e.Draggable.TAP_TOLERANCE>t&&(this._simulateClick=!1,this._onUp(),this._simulateEvent("contextmenu",o))},this),1e3)),e.DomEvent.on(i,e.Draggable.MOVE[t.type],this._onMove,this),e.DomEvent.on(i,e.Draggable.END[t.type],this._onUp,this))}},_onMove:function(t){if(!(t.touches&&t.touches.length>1)){var i=t.touches&&1===t.touches.length?t.touches[0]:t,s=new e.Point(i.clientX,i.clientY),o=s.subtract(this._startPoint);(o.x||o.y)&&(e.DomEvent.preventDefault(t),this._moved||(this.fire("dragstart"),this._moved=!0,this._startPos=e.DomUtil.getPosition(this._element).subtract(o),e.Browser.touch||(e.DomUtil.disableTextSelection(),this._setMovingCursor())),this._newPos=this._startPos.add(o),this._moving=!0,e.Util.cancelAnimFrame(this._animRequest),this._animRequest=e.Util.requestAnimFrame(this._updatePosition,this,!0,this._dragStartTarget))}},_updatePosition:function(){this.fire("predrag"),e.DomUtil.setPosition(this._element,this._newPos),this.fire("drag")},_onUp:function(t){var s;if(clearTimeout(this._longPressTimeout),this._simulateClick&&t.changedTouches){var o=t.changedTouches[0],n=o.target,a=this._newPos&&this._newPos.distanceTo(this._startPos)||0;"a"===n.tagName.toLowerCase()&&e.DomUtil.removeClass(n,"leaflet-active"),e.Draggable.TAP_TOLERANCE>a&&(s=o)}e.Browser.touch||(e.DomUtil.enableTextSelection(),this._restoreCursor());for(var r in e.Draggable.MOVE)e.Draggable.MOVE.hasOwnProperty(r)&&(e.DomEvent.off(i,e.Draggable.MOVE[r],this._onMove),e.DomEvent.off(i,e.Draggable.END[r],this._onUp));this._moved&&(e.Util.cancelAnimFrame(this._animRequest),this.fire("dragend")),this._moving=!1,s&&(this._moved=!1,this._simulateEvent("click",s))},_setMovingCursor:function(){e.DomUtil.addClass(i.body,"leaflet-dragging")},_restoreCursor:function(){e.DomUtil.removeClass(i.body,"leaflet-dragging")},_simulateEvent:function(s,e){var o=i.createEvent("MouseEvents");o.initMouseEvent(s,!0,!0,t,1,e.screenX,e.screenY,e.clientX,e.clientY,!1,!1,!1,!1,0,null),e.target.dispatchEvent(o)}}),e.Handler=e.Class.extend({initialize:function(t){this._map=t},enable:function(){this._enabled||(this._enabled=!0,this.addHooks())},disable:function(){this._enabled&&(this._enabled=!1,this.removeHooks())},enabled:function(){return!!this._enabled}}),e.Map.mergeOptions({dragging:!0,inertia:!e.Browser.android23,inertiaDeceleration:3400,inertiaMaxSpeed:1/0,inertiaThreshold:e.Browser.touch?32:18,easeLinearity:.25,longPress:!0,worldCopyJump:!1}),e.Map.Drag=e.Handler.extend({addHooks:function(){if(!this._draggable){var t=this._map;this._draggable=new e.Draggable(t._mapPane,t._container,t.options.longPress),this._draggable.on({dragstart:this._onDragStart,drag:this._onDrag,dragend:this._onDragEnd},this),t.options.worldCopyJump&&(this._draggable.on("predrag",this._onPreDrag,this),t.on("viewreset",this._onViewReset,this))}this._draggable.enable()},removeHooks:function(){this._draggable.disable()},moved:function(){return this._draggable&&this._draggable._moved},_onDragStart:function(){var t=this._map;t._panAnim&&t._panAnim.stop(),t.fire("movestart").fire("dragstart"),t.options.inertia&&(this._positions=[],this._times=[])},_onDrag:function(){if(this._map.options.inertia){var t=this._lastTime=+new Date,i=this._lastPos=this._draggable._newPos;this._positions.push(i),this._times.push(t),t-this._times[0]>200&&(this._positions.shift(),this._times.shift())}this._map.fire("move").fire("drag")},_onViewReset:function(){var t=this._map.getSize()._divideBy(2),i=this._map.latLngToLayerPoint(new e.LatLng(0,0));this._initialWorldOffset=i.subtract(t).x,this._worldWidth=this._map.project(new e.LatLng(0,180)).x},_onPreDrag:function(){var t=this._worldWidth,i=Math.round(t/2),s=this._initialWorldOffset,e=this._draggable._newPos.x,o=(e-i+s)%t+i-s,n=(e+i+s)%t-i-s,a=Math.abs(o+s)i.inertiaThreshold||!this._positions[0];if(o)t.fire("moveend");else{var n=this._lastPos.subtract(this._positions[0]),a=(this._lastTime+s-this._times[0])/1e3,r=i.easeLinearity,h=n.multiplyBy(r/a),l=h.distanceTo(new e.Point(0,0)),c=Math.min(i.inertiaMaxSpeed,l),m=h.multiplyBy(c/l),u=c/(i.inertiaDeceleration*r),d=m.multiplyBy(-u/2).round();e.Util.requestAnimFrame(function(){t.panBy(d,u,r)})}t.fire("dragend"),i.maxBounds&&e.Util.requestAnimFrame(this._panInsideMaxBounds,t,!0,t._container)},_panInsideMaxBounds:function(){this.panInsideBounds(this.options.maxBounds)}}),e.Map.addInitHook("addHandler","dragging",e.Map.Drag),e.Map.mergeOptions({doubleClickZoom:!0}),e.Map.DoubleClickZoom=e.Handler.extend({addHooks:function(){this._map.on("dblclick",this._onDoubleClick)},removeHooks:function(){this._map.off("dblclick",this._onDoubleClick)},_onDoubleClick:function(t){this.setView(t.latlng,this._zoom+1)}}),e.Map.addInitHook("addHandler","doubleClickZoom",e.Map.DoubleClickZoom),e.Map.mergeOptions({scrollWheelZoom:!0}),e.Map.ScrollWheelZoom=e.Handler.extend({addHooks:function(){e.DomEvent.on(this._map._container,"mousewheel",this._onWheelScroll,this),this._delta=0},removeHooks:function(){e.DomEvent.off(this._map._container,"mousewheel",this._onWheelScroll)},_onWheelScroll:function(t){var i=e.DomEvent.getWheelDelta(t);this._delta+=i,this._lastMousePos=this._map.mouseEventToContainerPoint(t),this._startTime||(this._startTime=+new Date);var s=Math.max(40-(+new Date-this._startTime),0);clearTimeout(this._timer),this._timer=setTimeout(e.bind(this._performZoom,this),s),e.DomEvent.preventDefault(t),e.DomEvent.stopPropagation(t)},_performZoom:function(){var t=this._map,i=this._delta,s=t.getZoom();if(i=i>0?Math.ceil(i):Math.round(i),i=Math.max(Math.min(i,4),-4),i=t._limitZoom(s+i)-s,this._delta=0,this._startTime=null,i){var e=s+i,o=this._getCenterForScrollWheelZoom(e);t.setView(o,e)}},_getCenterForScrollWheelZoom:function(t){var i=this._map,s=i.getZoomScale(t),e=i.getSize()._divideBy(2),o=this._lastMousePos._subtract(e)._multiplyBy(1-1/s),n=i._getTopLeftPoint()._add(e)._add(o);return i.unproject(n)}}),e.Map.addInitHook("addHandler","scrollWheelZoom",e.Map.ScrollWheelZoom),e.extend(e.DomEvent,{_touchstart:e.Browser.msTouch?"MSPointerDown":"touchstart",_touchend:e.Browser.msTouch?"MSPointerUp":"touchend",addDoubleTapListener:function(t,s,o){function n(t){var i;if(e.Browser.msTouch?(p.push(t.pointerId),i=p.length):i=t.touches.length,!(i>1)){var s=Date.now(),o=s-(r||s);h=t.touches?t.touches[0]:t,l=o>0&&c>=o,r=s}}function a(t){if(e.Browser.msTouch){var i=p.indexOf(t.pointerId);if(-1===i)return;p.splice(i,1)}if(l){if(e.Browser.msTouch){var o,n={};for(var a in h)o=h[a],n[a]="function"==typeof o?o.bind(h):o;h=n}h.type="dblclick",s(h),r=null}}var r,h,l=!1,c=250,m="_leaflet_",u=this._touchstart,d=this._touchend,p=[];t[m+u+o]=n,t[m+d+o]=a;var _=e.Browser.msTouch?i.documentElement:t;return t.addEventListener(u,n,!1),_.addEventListener(d,a,!1),e.Browser.msTouch&&_.addEventListener("MSPointerCancel",a,!1),this},removeDoubleTapListener:function(t,s){var o="_leaflet_";return t.removeEventListener(this._touchstart,t[o+this._touchstart+s],!1),(e.Browser.msTouch?i.documentElement:t).removeEventListener(this._touchend,t[o+this._touchend+s],!1),e.Browser.msTouch&&i.documentElement.removeEventListener("MSPointerCancel",t[o+this._touchend+s],!1),this}}),e.extend(e.DomEvent,{_msTouches:[],_msDocumentListener:!1,addMsTouchListener:function(t,i,s,e){switch(i){case"touchstart":return this.addMsTouchListenerStart(t,i,s,e);case"touchend":return this.addMsTouchListenerEnd(t,i,s,e);case"touchmove":return this.addMsTouchListenerMove(t,i,s,e);default:throw"Unknown touch event type"}},addMsTouchListenerStart:function(t,s,e,o){var n="_leaflet_",a=this._msTouches,r=function(t){for(var i=!1,s=0;a.length>s;s++)if(a[s].pointerId===t.pointerId){i=!0;break}i||a.push(t),t.touches=a.slice(),t.changedTouches=[t],e(t)};if(t[n+"touchstart"+o]=r,t.addEventListener("MSPointerDown",r,!1),!this._msDocumentListener){var h=function(t){for(var i=0;a.length>i;i++)if(a[i].pointerId===t.pointerId){a.splice(i,1);break}};i.documentElement.addEventListener("MSPointerUp",h,!1),i.documentElement.addEventListener("MSPointerCancel",h,!1),this._msDocumentListener=!0}return this},addMsTouchListenerMove:function(t,i,s,e){function o(t){if(t.pointerType!==t.MSPOINTER_TYPE_MOUSE||0!==t.buttons){for(var i=0;a.length>i;i++)if(a[i].pointerId===t.pointerId){a[i]=t;break}t.touches=a.slice(),t.changedTouches=[t],s(t)}}var n="_leaflet_",a=this._msTouches;return t[n+"touchmove"+e]=o,t.addEventListener("MSPointerMove",o,!1),this},addMsTouchListenerEnd:function(t,i,s,e){var o="_leaflet_",n=this._msTouches,a=function(t){for(var i=0;n.length>i;i++)if(n[i].pointerId===t.pointerId){n.splice(i,1);break}t.touches=n.slice(),t.changedTouches=[t],s(t)};return t[o+"touchend"+e]=a,t.addEventListener("MSPointerUp",a,!1),t.addEventListener("MSPointerCancel",a,!1),this},removeMsTouchListener:function(t,i,s){var e="_leaflet_",o=t[e+i+s];switch(i){case"touchstart":t.removeEventListener("MSPointerDown",o,!1);break;case"touchmove":t.removeEventListener("MSPointerMove",o,!1);break;case"touchend":t.removeEventListener("MSPointerUp",o,!1),t.removeEventListener("MSPointerCancel",o,!1)}return this}}),e.Map.mergeOptions({touchZoom:e.Browser.touch&&!e.Browser.android23}),e.Map.TouchZoom=e.Handler.extend({addHooks:function(){e.DomEvent.on(this._map._container,"touchstart",this._onTouchStart,this)},removeHooks:function(){e.DomEvent.off(this._map._container,"touchstart",this._onTouchStart,this)},_onTouchStart:function(t){var s=this._map;if(t.touches&&2===t.touches.length&&!s._animatingZoom&&!this._zooming){var o=s.mouseEventToLayerPoint(t.touches[0]),n=s.mouseEventToLayerPoint(t.touches[1]),a=s._getCenterLayerPoint();this._startCenter=o.add(n)._divideBy(2),this._startDist=o.distanceTo(n),this._moved=!1,this._zooming=!0,this._centerOffset=a.subtract(this._startCenter),s._panAnim&&s._panAnim.stop(),e.DomEvent.on(i,"touchmove",this._onTouchMove,this).on(i,"touchend",this._onTouchEnd,this),e.DomEvent.preventDefault(t)}},_onTouchMove:function(t){if(t.touches&&2===t.touches.length){var i=this._map,s=i.mouseEventToLayerPoint(t.touches[0]),o=i.mouseEventToLayerPoint(t.touches[1]);this._scale=s.distanceTo(o)/this._startDist,this._delta=s._add(o)._divideBy(2)._subtract(this._startCenter),1!==this._scale&&(this._moved||(e.DomUtil.addClass(i._mapPane,"leaflet-zoom-anim leaflet-touching"),i.fire("movestart").fire("zoomstart")._prepareTileBg(),this._moved=!0),e.Util.cancelAnimFrame(this._animRequest),this._animRequest=e.Util.requestAnimFrame(this._updateOnMove,this,!0,this._map._container),e.DomEvent.preventDefault(t))}},_updateOnMove:function(){var t=this._map,i=this._getScaleOrigin(),s=t.layerPointToLatLng(i);t.fire("zoomanim",{center:s,zoom:t.getScaleZoom(this._scale)}),t._tileBg.style[e.DomUtil.TRANSFORM]=e.DomUtil.getTranslateString(this._delta)+" "+e.DomUtil.getScaleString(this._scale,this._startCenter)},_onTouchEnd:function(){if(this._moved&&this._zooming){var t=this._map;this._zooming=!1,e.DomUtil.removeClass(t._mapPane,"leaflet-touching"),e.DomEvent.off(i,"touchmove",this._onTouchMove).off(i,"touchend",this._onTouchEnd);var s=this._getScaleOrigin(),o=t.layerPointToLatLng(s),n=t.getZoom(),a=t.getScaleZoom(this._scale)-n,r=a>0?Math.ceil(a):Math.floor(a),h=t._limitZoom(n+r);t.fire("zoomanim",{center:o,zoom:h}),t._runAnimation(o,h,t.getZoomScale(h)/this._scale,s,!0)}},_getScaleOrigin:function(){var t=this._centerOffset.subtract(this._delta).divideBy(this._scale);return this._startCenter.add(t)}}),e.Map.addInitHook("addHandler","touchZoom",e.Map.TouchZoom),e.Map.mergeOptions({boxZoom:!0}),e.Map.BoxZoom=e.Handler.extend({initialize:function(t){this._map=t,this._container=t._container,this._pane=t._panes.overlayPane},addHooks:function(){e.DomEvent.on(this._container,"mousedown",this._onMouseDown,this)},removeHooks:function(){e.DomEvent.off(this._container,"mousedown",this._onMouseDown)},_onMouseDown:function(t){return!t.shiftKey||1!==t.which&&1!==t.button?!1:(e.DomUtil.disableTextSelection(),this._startLayerPoint=this._map.mouseEventToLayerPoint(t),this._box=e.DomUtil.create("div","leaflet-zoom-box",this._pane),e.DomUtil.setPosition(this._box,this._startLayerPoint),this._container.style.cursor="crosshair",e.DomEvent.on(i,"mousemove",this._onMouseMove,this).on(i,"mouseup",this._onMouseUp,this).preventDefault(t),this._map.fire("boxzoomstart"),s)},_onMouseMove:function(t){var i=this._startLayerPoint,s=this._box,o=this._map.mouseEventToLayerPoint(t),n=o.subtract(i),a=new e.Point(Math.min(o.x,i.x),Math.min(o.y,i.y));e.DomUtil.setPosition(s,a),s.style.width=Math.max(0,Math.abs(n.x)-4)+"px",s.style.height=Math.max(0,Math.abs(n.y)-4)+"px"},_onMouseUp:function(t){this._pane.removeChild(this._box),this._container.style.cursor="",e.DomUtil.enableTextSelection(),e.DomEvent.off(i,"mousemove",this._onMouseMove).off(i,"mouseup",this._onMouseUp);var s=this._map,o=s.mouseEventToLayerPoint(t);if(!this._startLayerPoint.equals(o)){var n=new e.LatLngBounds(s.layerPointToLatLng(this._startLayerPoint),s.layerPointToLatLng(o));s.fitBounds(n),s.fire("boxzoomend",{boxZoomBounds:n})}}}),e.Map.addInitHook("addHandler","boxZoom",e.Map.BoxZoom),e.Map.mergeOptions({keyboard:!0,keyboardPanOffset:80,keyboardZoomOffset:1}),e.Map.Keyboard=e.Handler.extend({keyCodes:{left:[37],right:[39],down:[40],up:[38],zoomIn:[187,107,61],zoomOut:[189,109,173]},initialize:function(t){this._map=t,this._setPanOffset(t.options.keyboardPanOffset),this._setZoomOffset(t.options.keyboardZoomOffset)},addHooks:function(){var t=this._map._container;-1===t.tabIndex&&(t.tabIndex="0"),e.DomEvent.on(t,"focus",this._onFocus,this).on(t,"blur",this._onBlur,this).on(t,"mousedown",this._onMouseDown,this),this._map.on("focus",this._addHooks,this).on("blur",this._removeHooks,this)},removeHooks:function(){this._removeHooks();var t=this._map._container;e.DomEvent.off(t,"focus",this._onFocus,this).off(t,"blur",this._onBlur,this).off(t,"mousedown",this._onMouseDown,this),this._map.off("focus",this._addHooks,this).off("blur",this._removeHooks,this)},_onMouseDown:function(){this._focused||this._map._container.focus()},_onFocus:function(){this._focused=!0,this._map.fire("focus")},_onBlur:function(){this._focused=!1,this._map.fire("blur")},_setPanOffset:function(t){var i,s,e=this._panKeys={},o=this.keyCodes;for(i=0,s=o.left.length;s>i;i++)e[o.left[i]]=[-1*t,0];for(i=0,s=o.right.length;s>i;i++)e[o.right[i]]=[t,0];for(i=0,s=o.down.length;s>i;i++)e[o.down[i]]=[0,t];for(i=0,s=o.up.length;s>i;i++)e[o.up[i]]=[0,-1*t]},_setZoomOffset:function(t){var i,s,e=this._zoomKeys={},o=this.keyCodes;for(i=0,s=o.zoomIn.length;s>i;i++)e[o.zoomIn[i]]=t;for(i=0,s=o.zoomOut.length;s>i;i++)e[o.zoomOut[i]]=-t},_addHooks:function(){e.DomEvent.on(i,"keydown",this._onKeyDown,this)},_removeHooks:function(){e.DomEvent.off(i,"keydown",this._onKeyDown,this)},_onKeyDown:function(t){var i=t.keyCode,s=this._map;if(this._panKeys.hasOwnProperty(i))s.panBy(this._panKeys[i]),s.options.maxBounds&&s.panInsideBounds(s.options.maxBounds);else{if(!this._zoomKeys.hasOwnProperty(i))return;s.setZoom(s.getZoom()+this._zoomKeys[i])}e.DomEvent.stop(t)}}),e.Map.addInitHook("addHandler","keyboard",e.Map.Keyboard),e.Handler.MarkerDrag=e.Handler.extend({initialize:function(t){this._marker=t},addHooks:function(){var t=this._marker._icon;this._draggable||(this._draggable=new e.Draggable(t,t).on("dragstart",this._onDragStart,this).on("drag",this._onDrag,this).on("dragend",this._onDragEnd,this)),this._draggable.enable()},removeHooks:function(){this._draggable.disable()},moved:function(){return this._draggable&&this._draggable._moved},_onDragStart:function(){this._marker.closePopup().fire("movestart").fire("dragstart")},_onDrag:function(){var t=this._marker,i=t._shadow,s=e.DomUtil.getPosition(t._icon),o=t._map.layerPointToLatLng(s);i&&e.DomUtil.setPosition(i,s),t._latlng=o,t.fire("move",{latlng:o}).fire("drag") +},_onDragEnd:function(){this._marker.fire("moveend").fire("dragend")}}),e.Handler.PolyEdit=e.Handler.extend({options:{icon:new e.DivIcon({iconSize:new e.Point(8,8),className:"leaflet-div-icon leaflet-editing-icon"})},initialize:function(t,i){this._poly=t,e.setOptions(this,i)},addHooks:function(){this._poly._map&&(this._markerGroup||this._initMarkers(),this._poly._map.addLayer(this._markerGroup))},removeHooks:function(){this._poly._map&&(this._poly._map.removeLayer(this._markerGroup),delete this._markerGroup,delete this._markers)},updateMarkers:function(){this._markerGroup.clearLayers(),this._initMarkers()},_initMarkers:function(){this._markerGroup||(this._markerGroup=new e.LayerGroup),this._markers=[];var t,i,s,o,n=this._poly._latlngs;for(t=0,s=n.length;s>t;t++)o=this._createMarker(n[t],t),o.on("click",this._onMarkerClick,this),this._markers.push(o);var a,r;for(t=0,i=s-1;s>t;i=t++)(0!==t||e.Polygon&&this._poly instanceof e.Polygon)&&(a=this._markers[i],r=this._markers[t],this._createMiddleMarker(a,r),this._updatePrevNext(a,r))},_createMarker:function(t,i){var s=new e.Marker(t,{draggable:!0,icon:this.options.icon});return s._origLatLng=t,s._index=i,s.on("drag",this._onMarkerDrag,this),s.on("dragend",this._fireEdit,this),this._markerGroup.addLayer(s),s},_fireEdit:function(){this._poly.fire("edit")},_onMarkerDrag:function(t){var i=t.target;e.extend(i._origLatLng,i._latlng),i._middleLeft&&i._middleLeft.setLatLng(this._getMiddleLatLng(i._prev,i)),i._middleRight&&i._middleRight.setLatLng(this._getMiddleLatLng(i,i._next)),this._poly.redraw()},_onMarkerClick:function(t){if(!(3>this._poly._latlngs.length)){var i=t.target,s=i._index;this._markerGroup.removeLayer(i),this._markers.splice(s,1),this._poly.spliceLatLngs(s,1),this._updateIndexes(s,-1),this._updatePrevNext(i._prev,i._next),i._middleLeft&&this._markerGroup.removeLayer(i._middleLeft),i._middleRight&&this._markerGroup.removeLayer(i._middleRight),i._prev&&i._next?this._createMiddleMarker(i._prev,i._next):i._prev?i._next||(i._prev._middleRight=null):i._next._middleLeft=null,this._poly.fire("edit")}},_updateIndexes:function(t,i){this._markerGroup.eachLayer(function(s){s._index>t&&(s._index+=i)})},_createMiddleMarker:function(t,i){var s,e,o,n=this._getMiddleLatLng(t,i),a=this._createMarker(n);a.setOpacity(.6),t._middleRight=i._middleLeft=a,e=function(){var e=i._index;a._index=e,a.off("click",s).on("click",this._onMarkerClick,this),n.lat=a.getLatLng().lat,n.lng=a.getLatLng().lng,this._poly.spliceLatLngs(e,0,n),this._markers.splice(e,0,a),a.setOpacity(1),this._updateIndexes(e,1),i._index++,this._updatePrevNext(t,a),this._updatePrevNext(a,i)},o=function(){a.off("dragstart",e,this),a.off("dragend",o,this),this._createMiddleMarker(t,a),this._createMiddleMarker(a,i)},s=function(){e.call(this),o.call(this),this._poly.fire("edit")},a.on("click",s,this).on("dragstart",e,this).on("dragend",o,this),this._markerGroup.addLayer(a)},_updatePrevNext:function(t,i){t&&(t._next=i),i&&(i._prev=t)},_getMiddleLatLng:function(t,i){var s=this._poly._map,e=s.latLngToLayerPoint(t.getLatLng()),o=s.latLngToLayerPoint(i.getLatLng());return s.layerPointToLatLng(e._add(o)._divideBy(2))}}),e.Polyline.addInitHook(function(){e.Handler.PolyEdit&&(this.editing=new e.Handler.PolyEdit(this),this.options.editable&&this.editing.enable()),this.on("add",function(){this.editing&&this.editing.enabled()&&this.editing.addHooks()}),this.on("remove",function(){this.editing&&this.editing.enabled()&&this.editing.removeHooks()})}),e.Control=e.Class.extend({options:{position:"topright"},initialize:function(t){e.setOptions(this,t)},getPosition:function(){return this.options.position},setPosition:function(t){var i=this._map;return i&&i.removeControl(this),this.options.position=t,i&&i.addControl(this),this},addTo:function(t){this._map=t;var i=this._container=this.onAdd(t),s=this.getPosition(),o=t._controlCorners[s];return e.DomUtil.addClass(i,"leaflet-control"),-1!==s.indexOf("bottom")?o.insertBefore(i,o.firstChild):o.appendChild(i),this},removeFrom:function(t){var i=this.getPosition(),s=t._controlCorners[i];return s.removeChild(this._container),this._map=null,this.onRemove&&this.onRemove(t),this}}),e.control=function(t){return new e.Control(t)},e.Map.include({addControl:function(t){return t.addTo(this),this},removeControl:function(t){return t.removeFrom(this),this},_initControlPos:function(){function t(t,n){var a=s+t+" "+s+n;i[t+n]=e.DomUtil.create("div",a,o)}var i=this._controlCorners={},s="leaflet-",o=this._controlContainer=e.DomUtil.create("div",s+"control-container",this._container);t("top","left"),t("top","right"),t("bottom","left"),t("bottom","right")}}),e.Control.Zoom=e.Control.extend({options:{position:"topleft"},onAdd:function(t){var i="leaflet-control-zoom",s="leaflet-bar",o=s+"-part",n=e.DomUtil.create("div",i+" "+s);return this._map=t,this._zoomInButton=this._createButton("+","Zoom in",i+"-in "+o+" "+o+"-top",n,this._zoomIn,this),this._zoomOutButton=this._createButton("-","Zoom out",i+"-out "+o+" "+o+"-bottom",n,this._zoomOut,this),t.on("zoomend",this._updateDisabled,this),n},onRemove:function(t){t.off("zoomend",this._updateDisabled,this)},_zoomIn:function(t){this._map.zoomIn(t.shiftKey?3:1)},_zoomOut:function(t){this._map.zoomOut(t.shiftKey?3:1)},_createButton:function(t,i,s,o,n,a){var r=e.DomUtil.create("a",s,o);r.innerHTML=t,r.href="#",r.title=i;var h=e.DomEvent.stopPropagation;return e.DomEvent.on(r,"click",h).on(r,"mousedown",h).on(r,"dblclick",h).on(r,"click",e.DomEvent.preventDefault).on(r,"click",n,a),r},_updateDisabled:function(){var t=this._map,i="leaflet-control-zoom-disabled";e.DomUtil.removeClass(this._zoomInButton,i),e.DomUtil.removeClass(this._zoomOutButton,i),t._zoom===t.getMinZoom()&&e.DomUtil.addClass(this._zoomOutButton,i),t._zoom===t.getMaxZoom()&&e.DomUtil.addClass(this._zoomInButton,i)}}),e.Map.mergeOptions({zoomControl:!0}),e.Map.addInitHook(function(){this.options.zoomControl&&(this.zoomControl=new e.Control.Zoom,this.addControl(this.zoomControl))}),e.control.zoom=function(t){return new e.Control.Zoom(t)},e.Control.Attribution=e.Control.extend({options:{position:"bottomright",prefix:'Powered by Leaflet'},initialize:function(t){e.setOptions(this,t),this._attributions={}},onAdd:function(t){return this._container=e.DomUtil.create("div","leaflet-control-attribution"),e.DomEvent.disableClickPropagation(this._container),t.on("layeradd",this._onLayerAdd,this).on("layerremove",this._onLayerRemove,this),this._update(),this._container},onRemove:function(t){t.off("layeradd",this._onLayerAdd).off("layerremove",this._onLayerRemove)},setPrefix:function(t){return this.options.prefix=t,this._update(),this},addAttribution:function(t){return t?(this._attributions[t]||(this._attributions[t]=0),this._attributions[t]++,this._update(),this):s},removeAttribution:function(t){return t?(this._attributions[t]--,this._update(),this):s},_update:function(){if(this._map){var t=[];for(var i in this._attributions)this._attributions.hasOwnProperty(i)&&this._attributions[i]&&t.push(i);var s=[];this.options.prefix&&s.push(this.options.prefix),t.length&&s.push(t.join(", ")),this._container.innerHTML=s.join(" — ")}},_onLayerAdd:function(t){t.layer.getAttribution&&this.addAttribution(t.layer.getAttribution())},_onLayerRemove:function(t){t.layer.getAttribution&&this.removeAttribution(t.layer.getAttribution())}}),e.Map.mergeOptions({attributionControl:!0}),e.Map.addInitHook(function(){this.options.attributionControl&&(this.attributionControl=(new e.Control.Attribution).addTo(this))}),e.control.attribution=function(t){return new e.Control.Attribution(t)},e.Control.Scale=e.Control.extend({options:{position:"bottomleft",maxWidth:100,metric:!0,imperial:!0,updateWhenIdle:!1},onAdd:function(t){this._map=t;var i="leaflet-control-scale",s=e.DomUtil.create("div",i),o=this.options;return this._addScales(o,i,s),t.on(o.updateWhenIdle?"moveend":"move",this._update,this),t.whenReady(this._update,this),s},onRemove:function(t){t.off(this.options.updateWhenIdle?"moveend":"move",this._update,this)},_addScales:function(t,i,s){t.metric&&(this._mScale=e.DomUtil.create("div",i+"-line",s)),t.imperial&&(this._iScale=e.DomUtil.create("div",i+"-line",s))},_update:function(){var t=this._map.getBounds(),i=t.getCenter().lat,s=6378137*Math.PI*Math.cos(i*Math.PI/180),e=s*(t.getNorthEast().lng-t.getSouthWest().lng)/180,o=this._map.getSize(),n=this.options,a=0;o.x>0&&(a=e*(n.maxWidth/o.x)),this._updateScales(n,a)},_updateScales:function(t,i){t.metric&&i&&this._updateMetric(i),t.imperial&&i&&this._updateImperial(i)},_updateMetric:function(t){var i=this._getRoundNum(t);this._mScale.style.width=this._getScaleWidth(i/t)+"px",this._mScale.innerHTML=1e3>i?i+" m":i/1e3+" km"},_updateImperial:function(t){var i,s,e,o=3.2808399*t,n=this._iScale;o>5280?(i=o/5280,s=this._getRoundNum(i),n.style.width=this._getScaleWidth(s/i)+"px",n.innerHTML=s+" mi"):(e=this._getRoundNum(o),n.style.width=this._getScaleWidth(e/o)+"px",n.innerHTML=e+" ft")},_getScaleWidth:function(t){return Math.round(this.options.maxWidth*t)-10},_getRoundNum:function(t){var i=Math.pow(10,(Math.floor(t)+"").length-1),s=t/i;return s=s>=10?10:s>=5?5:s>=3?3:s>=2?2:1,i*s}}),e.control.scale=function(t){return new e.Control.Scale(t)},e.Control.Layers=e.Control.extend({options:{collapsed:!0,position:"topright",autoZIndex:!0},initialize:function(t,i,s){e.setOptions(this,s),this._layers={},this._lastZIndex=0,this._handlingClick=!1;for(var o in t)t.hasOwnProperty(o)&&this._addLayer(t[o],o);for(o in i)i.hasOwnProperty(o)&&this._addLayer(i[o],o,!0)},onAdd:function(t){return this._initLayout(),this._update(),t.on("layeradd",this._onLayerChange,this).on("layerremove",this._onLayerChange,this),this._container},onRemove:function(t){t.off("layeradd",this._onLayerChange).off("layerremove",this._onLayerChange)},addBaseLayer:function(t,i){return this._addLayer(t,i),this._update(),this},addOverlay:function(t,i){return this._addLayer(t,i,!0),this._update(),this},removeLayer:function(t){var i=e.stamp(t);return delete this._layers[i],this._update(),this},_initLayout:function(){var t="leaflet-control-layers",i=this._container=e.DomUtil.create("div",t);e.Browser.touch?e.DomEvent.on(i,"click",e.DomEvent.stopPropagation):(e.DomEvent.disableClickPropagation(i),e.DomEvent.on(i,"mousewheel",e.DomEvent.stopPropagation));var s=this._form=e.DomUtil.create("form",t+"-list");if(this.options.collapsed){e.DomEvent.on(i,"mouseover",this._expand,this).on(i,"mouseout",this._collapse,this);var o=this._layersLink=e.DomUtil.create("a",t+"-toggle",i);o.href="#",o.title="Layers",e.Browser.touch?e.DomEvent.on(o,"click",e.DomEvent.stopPropagation).on(o,"click",e.DomEvent.preventDefault).on(o,"click",this._expand,this):e.DomEvent.on(o,"focus",this._expand,this),this._map.on("movestart",this._collapse,this)}else this._expand();this._baseLayersList=e.DomUtil.create("div",t+"-base",s),this._separator=e.DomUtil.create("div",t+"-separator",s),this._overlaysList=e.DomUtil.create("div",t+"-overlays",s),i.appendChild(s)},_addLayer:function(t,i,s){var o=e.stamp(t);this._layers[o]={layer:t,name:i,overlay:s},this.options.autoZIndex&&t.setZIndex&&(this._lastZIndex++,t.setZIndex(this._lastZIndex))},_update:function(){if(this._container){this._baseLayersList.innerHTML="",this._overlaysList.innerHTML="";var t=!1,i=!1;for(var s in this._layers)if(this._layers.hasOwnProperty(s)){var e=this._layers[s];this._addItem(e),i=i||e.overlay,t=t||!e.overlay}this._separator.style.display=i&&t?"":"none"}},_onLayerChange:function(t){var i=e.stamp(t.layer);this._layers[i]&&!this._handlingClick&&this._update()},_createRadioElement:function(t,s){var e='t;t++)i=o[t],s=this._layers[i.layerId],i.checked&&!this._map.hasLayer(s.layer)?(this._map.addLayer(s.layer),s.overlay||(e=s.layer)):!i.checked&&this._map.hasLayer(s.layer)&&this._map.removeLayer(s.layer);e&&(this._map.setZoom(this._map.getZoom()),this._map.fire("baselayerchange",{layer:e})),this._handlingClick=!1},_expand:function(){e.DomUtil.addClass(this._container,"leaflet-control-layers-expanded")},_collapse:function(){this._container.className=this._container.className.replace(" leaflet-control-layers-expanded","")}}),e.control.layers=function(t,i,s){return new e.Control.Layers(t,i,s)},e.PosAnimation=e.Class.extend({includes:e.Mixin.Events,run:function(t,i,s,o){this.stop(),this._el=t,this._inProgress=!0,this.fire("start"),t.style[e.DomUtil.TRANSITION]="all "+(s||.25)+"s cubic-bezier(0,0,"+(o||.5)+",1)",e.DomEvent.on(t,e.DomUtil.TRANSITION_END,this._onTransitionEnd,this),e.DomUtil.setPosition(t,i),e.Util.falseFn(t.offsetWidth),this._stepTimer=setInterval(e.bind(this.fire,this,"step"),50)},stop:function(){this._inProgress&&(e.DomUtil.setPosition(this._el,this._getPos()),this._onTransitionEnd(),e.Util.falseFn(this._el.offsetWidth))},_transformRe:/(-?[\d\.]+), (-?[\d\.]+)\)/,_getPos:function(){var i,s,o,n=this._el,a=t.getComputedStyle(n);return e.Browser.any3d?(o=a[e.DomUtil.TRANSFORM].match(this._transformRe),i=parseFloat(o[1]),s=parseFloat(o[2])):(i=parseFloat(a.left),s=parseFloat(a.top)),new e.Point(i,s,!0)},_onTransitionEnd:function(){e.DomEvent.off(this._el,e.DomUtil.TRANSITION_END,this._onTransitionEnd,this),this._inProgress&&(this._inProgress=!1,this._el.style[e.DomUtil.TRANSITION]="",clearInterval(this._stepTimer),this.fire("step").fire("end"))}}),e.Map.include({setView:function(t,i,s){i=this._limitZoom(i);var e=this._zoom!==i;if(this._loaded&&!s&&this._layers){this._panAnim&&this._panAnim.stop();var o=e?this._zoomToIfClose&&this._zoomToIfClose(t,i):this._panByIfClose(t);if(o)return clearTimeout(this._sizeTimer),this}return this._resetView(t,i),this},panBy:function(t,i,s){if(t=e.point(t),!t.x&&!t.y)return this;this._panAnim||(this._panAnim=new e.PosAnimation,this._panAnim.on({step:this._onPanTransitionStep,end:this._onPanTransitionEnd},this)),this.fire("movestart"),e.DomUtil.addClass(this._mapPane,"leaflet-pan-anim");var o=e.DomUtil.getPosition(this._mapPane).subtract(t)._round();return this._panAnim.run(this._mapPane,o,i||.25,s),this},_onPanTransitionStep:function(){this.fire("move")},_onPanTransitionEnd:function(){e.DomUtil.removeClass(this._mapPane,"leaflet-pan-anim"),this.fire("moveend")},_panByIfClose:function(t){var i=this._getCenterOffset(t)._floor();return this._offsetIsWithinView(i)?(this.panBy(i),!0):!1},_offsetIsWithinView:function(t,i){var s=i||1,e=this.getSize();return Math.abs(t.x)<=e.x*s&&Math.abs(t.y)<=e.y*s}}),e.PosAnimation=e.DomUtil.TRANSITION?e.PosAnimation:e.PosAnimation.extend({run:function(t,i,s,o){this.stop(),this._el=t,this._inProgress=!0,this._duration=s||.25,this._easeOutPower=1/Math.max(o||.5,.2),this._startPos=e.DomUtil.getPosition(t),this._offset=i.subtract(this._startPos),this._startTime=+new Date,this.fire("start"),this._animate()},stop:function(){this._inProgress&&(this._step(),this._complete())},_animate:function(){this._animId=e.Util.requestAnimFrame(this._animate,this),this._step()},_step:function(){var t=+new Date-this._startTime,i=1e3*this._duration;i>t?this._runFrame(this._easeOut(t/i)):(this._runFrame(1),this._complete())},_runFrame:function(t){var i=this._startPos.add(this._offset.multiplyBy(t));e.DomUtil.setPosition(this._el,i),this.fire("step")},_complete:function(){e.Util.cancelAnimFrame(this._animId),this._inProgress=!1,this.fire("end")},_easeOut:function(t){return 1-Math.pow(1-t,this._easeOutPower)}}),e.Map.mergeOptions({zoomAnimation:e.DomUtil.TRANSITION&&!e.Browser.android23&&!e.Browser.mobileOpera}),e.DomUtil.TRANSITION&&e.Map.addInitHook(function(){e.DomEvent.on(this._mapPane,e.DomUtil.TRANSITION_END,this._catchTransitionEnd,this)}),e.Map.include(e.DomUtil.TRANSITION?{_zoomToIfClose:function(t,i){if(this._animatingZoom)return!0;if(!this.options.zoomAnimation)return!1;var s=this.getZoomScale(i),o=this._getCenterOffset(t)._divideBy(1-1/s);if(!this._offsetIsWithinView(o,1))return!1;e.DomUtil.addClass(this._mapPane,"leaflet-zoom-anim"),this.fire("movestart").fire("zoomstart"),this.fire("zoomanim",{center:t,zoom:i});var n=this._getCenterLayerPoint().add(o);return this._prepareTileBg(),this._runAnimation(t,i,s,n),!0},_catchTransitionEnd:function(){this._animatingZoom&&this._onZoomTransitionEnd()},_runAnimation:function(t,i,s,o,n){this._animateToCenter=t,this._animateToZoom=i,this._animatingZoom=!0,e.Draggable&&(e.Draggable._disabled=!0);var a=e.DomUtil.TRANSFORM,r=this._tileBg;clearTimeout(this._clearTileBgTimer),e.Util.falseFn(r.offsetWidth);var h=e.DomUtil.getScaleString(s,o),l=r.style[a];r.style[a]=n?l+" "+h:h+" "+l},_prepareTileBg:function(){var t=this._tilePane,i=this._tileBg;if(i&&this._getLoadedTilesPercentage(i)>.5&&.5>this._getLoadedTilesPercentage(t))return t.style.visibility="hidden",t.empty=!0,this._stopLoadingImages(t),s;i||(i=this._tileBg=this._createPane("leaflet-tile-pane",this._mapPane),i.style.zIndex=1),i.style[e.DomUtil.TRANSFORM]="",i.style.visibility="hidden",i.empty=!0,t.empty=!1,this._tilePane=this._panes.tilePane=i;var o=this._tileBg=t;e.DomUtil.addClass(o,"leaflet-zoom-animated"),this._stopLoadingImages(o)},_getLoadedTilesPercentage:function(t){var i,s,e=t.getElementsByTagName("img"),o=0;for(i=0,s=e.length;s>i;i++)e[i].complete&&o++;return o/s},_stopLoadingImages:function(t){var i,s,o,n=Array.prototype.slice.call(t.getElementsByTagName("img"));for(i=0,s=n.length;s>i;i++)o=n[i],o.complete||(o.onload=e.Util.falseFn,o.onerror=e.Util.falseFn,o.src=e.Util.emptyImageUrl,o.parentNode.removeChild(o))},_onZoomTransitionEnd:function(){this._restoreTileFront(),e.DomUtil.removeClass(this._mapPane,"leaflet-zoom-anim"),e.Util.falseFn(this._tileBg.offsetWidth),this._animatingZoom=!1,this._resetView(this._animateToCenter,this._animateToZoom,!0,!0),e.Draggable&&(e.Draggable._disabled=!1)},_restoreTileFront:function(){this._tilePane.innerHTML="",this._tilePane.style.visibility="",this._tilePane.style.zIndex=2,this._tileBg.style.zIndex=1},_clearTileBg:function(){this._animatingZoom||this.touchZoom._zooming||(this._tileBg.innerHTML="")}}:{}),e.Map.include({_defaultLocateOptions:{watch:!1,setView:!1,maxZoom:1/0,timeout:1e4,maximumAge:0,enableHighAccuracy:!1},locate:function(t){if(t=this._locationOptions=e.extend(this._defaultLocateOptions,t),!navigator.geolocation)return this._handleGeolocationError({code:0,message:"Geolocation not supported."}),this;var i=e.bind(this._handleGeolocationResponse,this),s=e.bind(this._handleGeolocationError,this);return t.watch?this._locationWatchId=navigator.geolocation.watchPosition(i,s,t):navigator.geolocation.getCurrentPosition(i,s,t),this},stopLocate:function(){return navigator.geolocation&&navigator.geolocation.clearWatch(this._locationWatchId),this},_handleGeolocationError:function(t){var i=t.code,s=t.message||(1===i?"permission denied":2===i?"position unavailable":"timeout");this._locationOptions.setView&&!this._loaded&&this.fitWorld(),this.fire("locationerror",{code:i,message:"Geolocation error: "+s+"."})},_handleGeolocationResponse:function(t){var i=180*t.coords.accuracy/4e7,s=2*i,o=t.coords.latitude,n=t.coords.longitude,a=new e.LatLng(o,n),r=new e.LatLng(o-i,n-s),h=new e.LatLng(o+i,n+s),l=new e.LatLngBounds(r,h),c=this._locationOptions;if(c.setView){var m=Math.min(this.getBoundsZoom(l),c.maxZoom);this.setView(a,m)}this.fire("locationfound",{latlng:a,bounds:l,accuracy:t.coords.accuracy})}})}(this,document),L.Proj={},L.Proj._isProj4Proj=function(t){return t.projName!==void 0},L.Proj.Projection=L.Class.extend({initialize:function(t,i){if(L.Proj._isProj4Proj(t))this._proj=t;else{var s=t;Proj4js.defs[s]=i,this._proj=new Proj4js.Proj(s)}},project:function(t){var i=new L.Point(t.lng,t.lat);return Proj4js.transform(Proj4js.WGS84,this._proj,i)},unproject:function(t,i){var s=Proj4js.transform(this._proj,Proj4js.WGS84,t.clone());return new L.LatLng(s.y,s.x,i)}}),L.Proj.CRS=L.Class.extend({includes:L.CRS,options:{transformation:new L.Transformation(1,0,-1,0)},initialize:function(t,i,s){var e,o,n,a;L.Proj._isProj4Proj(t)?(o=t,e=o.srsCode,a=i||{},this.projection=new L.Proj.Projection(o)):(e=t,n=i,a=s||{},this.projection=new L.Proj.Projection(e,n)),L.Util.setOptions(this,a),this.code=e,this.transformation=this.options.transformation,this.options.origin&&(this.transformation=new L.Transformation(1,-this.options.origin[0],-1,this.options.origin[1])),this.options.scales?this.scale=function(t){return this.options.scales[t]}:this.options.resolutions&&(this.scale=function(t){return 1/this.options.resolutions[t]})}}),L.Proj.CRS.TMS=L.Proj.CRS.extend({initialize:function(t,i,s,e){if(L.Proj._isProj4Proj(t)){var o=t,n=i,a=s||{};a.origin=[n[0],n[3]],L.Proj.CRS.prototype.initialize(o,a)}else{var r=t,h=i,n=s,a=e||{};a.origin=[n[0],n[3]],L.Proj.CRS.prototype.initialize(r,h,a)}this.projectedBounds=n}}),L.Proj.TileLayer={},L.Proj.TileLayer.TMS=L.TileLayer.extend({options:{tms:!0,continuousWorld:!0},initialize:function(t,i,s){if(!(i instanceof L.Proj.CRS.TMS))throw Error("CRS is not L.Proj.CRS.TMS.");L.TileLayer.prototype.initialize.call(this,t,s),this.crs=i;for(var e=this.options.minZoom;this.options.maxZoom>e;e++){var o=(this.crs.projectedBounds[3]-this.crs.projectedBounds[1])/this._projectedTileSize(e);if(Math.abs(o-Math.round(o))>.001)throw Error("Projected bounds does not match grid at zoom "+e)}},getTileUrl:function(t){var i=Math.round((this.crs.projectedBounds[3]-this.crs.projectedBounds[1])/this._projectedTileSize(this._map.getZoom()));return L.Util.template(this._url,L.Util.extend({s:this._getSubdomain(t),z:this._getZoomForUrl(),x:t.x,y:i-t.y-1},this.options))},_projectedTileSize:function(t){return this.options.tileSize/this.crs.scale(t)}}),"undefined"!=typeof module&&(module.exports=L.Proj),"undefined"!=typeof L&&L.CRS!==void 0&&(L.CRS.proj4js=function(){return function(t,i,s,e){return e=e||{},s&&(e.transformation=s),new L.Proj.CRS(t,i,e)}}()),L.Control.MousePosition=L.Control.extend({options:{position:"bottomleft",separator:" : ",emptyString:"Unavailable",lngFirst:!1,numDigits:5,lngFormatter:void 0,latFormatter:void 0},onAdd:function(t){return this._container=L.DomUtil.create("div","leaflet-control-mouseposition"),L.DomEvent.disableClickPropagation(this._container),t.on("mousemove",this._onMouseMove,this),this._container.innerHTML=this.options.emptyString,this._container},onRemove:function(t){t.off("mousemove",this._onMouseMove)},_onMouseMove:function(t){var i=L.Util.formatNum(t.latlng.lng,this.options.numDigits),s=L.Util.formatNum(t.latlng.lat,this.options.numDigits);this.options.lngFormatter&&(i=this.options.lngFormatter(i)),this.options.latFormatter&&(s=this.options.latFormatter(s));var e=this.options.lngFirst?i+this.options.separator+s:s+this.options.separator+i;this._container.innerHTML=e}}),L.Map.mergeOptions({positionControl:!1}),L.Map.addInitHook(function(){this.options.positionControl&&(this.positionControl=new L.Control.MousePosition,this.addControl(this.positionControl))}),L.control.mousePosition=function(t){return new L.Control.MousePosition(t)},function(t,i){L.KSP={},L.KSP.version="0.2.1",L.KSP.CRS={},L.KSP.CRS.EPSG4326=new L.Proj.CRS.TMS(new Proj4js.Proj("EPSG:4326"),[-180,-90,180,90],{resolutions:[.703125,.3515625,.17578125,.087890625,.0439453125,.02197265625]}),L.KSP.CelestialBody=L.Class.extend({initialize:function(t){if(!t.hasOwnProperty("id"))throw Error("must specify id");if(!t.hasOwnProperty("name"))throw Error("must specify name");if(t.hasOwnProperty("crs")){if(!(t.crs instanceof L.Proj.CRS.TMS))throw Error("crs is not an instance of L.Proj.CRS.TMS")}else this.crs=L.KSP.CRS.EPSG4326;t.hasOwnProperty("radius")||(this.radius=1),t.hasOwnProperty("thumbnail")||(this.thumbnail="body-unknown.png"),t.hasOwnProperty("baseLayers")||(this.baseLayers={}),L.Util.extend(this,t)},addTo:function(t){var i,s=t._body;if(t._body=this,t.fire("bodychangestart",{body:this,oldBody:s}),s){for(i in s.baseLayers)s.baseLayers.hasOwnProperty(i)&&t.removeLayer(s.baseLayers[i]);for(i in s.overlays)s.overlays.hasOwnProperty(i)&&t.removeLayer(s.overlays[i])}var e=this.defaultLayer||this.baseLayers.Satellite;if(e){for(i in this.baseLayers)if(this.baseLayers.hasOwnProperty(i)&&this.baseLayers[i]._type===t._baseLayerType){e=this.baseLayers[i];break}t.addLayer(e),t.fire("baselayerchange",{layer:e})}for(i in this.overlays)this.overlays.hasOwnProperty(i)&&t._overlayTypes.indexOf(this.overlays[i]._type)>=0&&(t.addLayer(this.overlays[i]),t.fire("layeradd",{layer:this.overlays[i]}));t.fire("bodychangeend",{body:this,oldBody:s})},onAdd:function(t){this.addTo(t)},removeFrom:function(t){L.KSP.CelestialBody.DUMMY.addTo(t)},onRemove:function(t){this.removeFrom(t)}}),L.KSP.celestialBody=function(t){return new L.KSP.CelestialBody(t)},L.KSP.CelestialBody.DUMMY=L.KSP.celestialBody({id:"",name:"",crs:L.KSP.CRS.EPSG4326}),L.KSP.CelestialBody.ALL_PLANETARY=[L.KSP.CelestialBody.DUMMY],L.KSP.Map=L.Map.extend({options:{crs:L.KSP.CRS.EPSG4326,continuousWorld:!0},initialize:function(t,i){this._baseLayerType=-1,this._overlayTypes=[],L.Util.setOptions(this,i),this.startTrackingLayerState(),this.on("bodychangestart",this._onBodyChangeStart).on("bodychangeend",this._onBodyChangeEnd),L.Map.prototype.initialize.call(this,t,this.options)},clampZoom:function(){var t=this.getZoom(),i=this.getMinZoom(),s=this.getMaxZoom();i>t?this.setZoom(i):t>s?this.setZoom(s):this.fire("zoomend",this)},_onBodyChangeStart:function(){this.stopTrackingLayerState()},_onBodyChangeEnd:function(){this.clampZoom(),this.startTrackingLayerState()},_onLayerStateChange:function(t){if("layeradd"===t.type)t.layer instanceof L.KSP.TileLayer?this._baseLayerType=t.layer._type:t.layer instanceof L.KSP.LayerGroup&&0>this._overlayTypes.indexOf(t.layer._type)&&this._overlayTypes.push(t.layer._type);else if(t.layer instanceof L.KSP.LayerGroup){var i,s,e=t.layer._type,o=this._overlayTypes;for(i=o.length-1;i>=0;i--)s=o[i],s===e&&o.splice(i,1)}},startTrackingLayerState:function(){this.on("layeradd",this._onLayerStateChange).on("layerremove",this._onLayerStateChange)},stopTrackingLayerState:function(){this.off("layeradd",this._onLayerStateChange).off("layerremove",this._onLayerStateChange)}}),L.KSP.map=function(t,i){return new L.KSP.Map(t,i)},L.KSP.TileLayer=L.Proj.TileLayer.TMS.extend({statics:{TYPE_SATELLITE:0,TYPE_COLORRELIEF:1,TYPE_SLOPE:2,DEFAULT_URL:"http://tiles.kerbalmaps.com/{body}/{style}/{z}/{x}/{y}.png"},options:{continuousWorld:!1,noWrap:!1,minZoom:0,maxZoom:5,attribution:"Map data © Joel Pedraza"},initialize:function(t,i,s,e){L.Util.setOptions(this,e),this._type=t,L.Proj.TileLayer.TMS.prototype.initialize.call(this,i,s,this.options)}}),L.KSP.tileLayer=function(t,i,s,e){return new L.KSP.TileLayer(t,i,s,e)},L.KSP.LayerGroup=L.LayerGroup.extend({statics:{TYPE_SPACECENTER:0,TYPE_ANOMALY:1},initialize:function(t,i){this._type=t,L.LayerGroup.prototype.initialize.call(this,i)}}),L.KSP.layerGroup=function(t,i){return new L.KSP.LayerGroup(t,i)},L.KSP.Icon={},L.KSP.Icon.SPACECENTER=new L.Icon({iconUrl:"../assets/images/markers-spacecenter.png",shadowUrl:"../assets/images/markers-shadow.png",iconSize:[30,40],shadowSize:[35,16],iconAnchor:[15,40],shadowAnchor:[10,12],popupAnchor:[0,-35]}),L.KSP.Icon.ANOMALY=new L.Icon({iconUrl:"../assets/images/markers-anomaly.png",shadowUrl:"../assets/images/markers-shadow.png",iconSize:[30,40],shadowSize:[35,16],iconAnchor:[15,40],shadowAnchor:[10,12],popupAnchor:[0,-35]}),L.KSP.Legend={},L.KSP.Legend.SLOPE={"≥ 60°":"#E19678","< 60°":"#C86464","< 30°":"#965A64","< 15°":"#645064","< 5°":"#325064","0°":"#32465A"},L.KSP.Control=L.KSP.control={},L.KSP.Control.Legend=L.Control.extend({options:{position:"bottomright"},onAdd:function(t){return this._container=L.DomUtil.create("div","leaflet-control-legend"),t.on("baselayerchange",this._onLayerChange,this),this._container},_update:function(t){if(this._container.innerHTML="",t){for(var i in t)t.hasOwnProperty(i)&&(this._container.innerHTML+=''+i+"
    ");L.DomUtil.addClass(this._container,"leaflet-control-legend-visible")}else this._container.className=this._container.className.replace(" leaflet-control-legend-visible","")},_onLayerChange:function(t){this._update(t.layer.options.legend)}}),L.Map.mergeOptions({legendControl:!0}),L.Map.addInitHook(function(){this.options.bodyControl&&(this.legendControl=new L.KSP.Control.Legend,this.addControl(this.legendControl))}),L.control.legend=function(t){return new L.KSP.Control.Legend(t)},L.KSP.Control.Scale=L.Control.Scale.extend({options:{imperial:!1},onAdd:function(t){this._radius=0,t._body&&(this._radius=t._body.radius);var i=L.Control.Scale.prototype.onAdd.call(this,t);return t.on("bodychangeend",this._onBodyChangeEnd,this),i},onRemove:function(t){L.Control.Scale.prototype.onRemove.call(this,t),t.off("bodychangeend",this._onBodyChangeEnd)},_onBodyChangeEnd:function(t){this._radius=t.body.radius,this._update()},_update:function(){var t=this._map.getBounds(),i=t.getCenter().lat,s=this._radius*Math.PI*Math.cos(i*Math.PI/180),e=s*(t.getNorthEast().lng-t.getSouthWest().lng)/180,o=this._map.getSize(),n=this.options,a=0;o.x>0&&(a=e*(n.maxWidth/o.x)),this._updateScales(n,a)}}),L.KSP.Map.mergeOptions({scaleControl:!1}),L.KSP.Map.addInitHook(function(){this.options.scaleControl&&(this.scaleControl=new L.KSP.Control.Scale,this.addControl(this.scaleControl))}),L.KSP.control.scale=function(t){return new L.KSP.Control.Scale(t)},L.KSP.Control.CelestialBody=L.Control.extend({options:{position:"topright",collapsed:!0},initialize:function(t,i){L.Util.setOptions(this,i),this._bodies=t,this._timeInMillis=(new Date).valueOf(),this._weekInMillis=6048e5},onAdd:function(){return this._initLayout(),this._update(),this._map.on("bodychangeend",this._update,this),this._container},_initLayout:function(){var t="leaflet-control-celestialbodies",s=this._container=L.DomUtil.create("div",t),e=this._bodies;if(this.options.collapsed){L.DomEvent.on(s,"mouseover",this._expand,this).on(s,"mouseout",this._collapse,this);var o=this._bodiesLink=L.DomUtil.create("a",t+"-toggle",s);o.href="#",o.title="Celestial Bodies",L.DomEvent.on(o,"focus",this._expand,this),this._map.on("movestart",this._collapse,this)}var n=this._list=L.DomUtil.create("ul",t+"-list",s);for(var a in e)if(e.hasOwnProperty(a)){var r=this._addBody(e[a],n);if(e[a].children){var h=i.createElement("ul");for(var l in e[a].children)e[a].children.hasOwnProperty(l)&&this._addBody(e[a].children[l],h);r.appendChild(h)}}},_update:function(){this._map._body&&(this._bodiesLink.style.backgroundImage='url("'+this._map._body.thumbnail+'")')},_addBody:function(t,s){var e,o=i.createElement("li"),n=i.createElement("img");if(n.src=t.thumbnail,n.alt=o.title=t.name,t.addedOn){this._timeInMillis-t.addedOnKerbal Space Center
    -0.0969 : -74.6004"),L.marker([20.5829,-146.5116],{icon:L.KSP.Icon.SPACECENTER}).bindPopup("Kerbal Space Center 2
    20.5829 : -146.5116"),L.marker([-1.5409,-71.9099],{icon:L.KSP.Icon.SPACECENTER}).bindPopup("Island Airfield
    -1.5409 : -71.9099")]),Anomalies:L.KSP.layerGroup(L.KSP.LayerGroup.TYPE_ANOMALY,[L.marker([.1023,-74.5684],{icon:L.KSP.Icon.ANOMALY}).bindPopup("0.1023 : -74.5684"),L.marker([20.6709,-146.4968],{icon:L.KSP.Icon.ANOMALY}).bindPopup("20.6709 : -146.4968"),L.marker([35.5705,-74.9773],{icon:L.KSP.Icon.ANOMALY}).bindPopup("35.5705 : -74.9773"),L.marker([-.6402,-80.7668],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-0.6402 : -80.7668"),L.marker([-28.8083,-13.4401],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-28.8083 : -13.4401"),L.marker([-6.5057,-141.6856],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-6.5057 : -141.6856"),L.marker([81.9551,-128.518],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-81.9551 : -128.518")])}}),L.KSP.CelestialBody.MUN=L.KSP.celestialBody({id:"mun",name:"Mun",crs:L.KSP.CRS.EPSG4326,radius:2e5,addedOn:13682304e5,lastUpdated:1368144e6,thumbnail:"body-mun.png",baseLayers:{Satellite:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SATELLITE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{body:"mun",style:"sat"}),"Color Relief":L.KSP.tileLayer(L.KSP.TileLayer.TYPE_COLORRELIEF,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{body:"mun",style:"color",legend:{"3150 m":"#EBEBEB","-180 m":"#232323"}}),Slope:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SLOPE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{body:"mun",style:"slope",legend:L.KSP.Legend.SLOPE})},overlays:{Anomalies:L.KSP.layerGroup(L.KSP.LayerGroup.TYPE_ANOMALY,[L.marker([-9.8314,25.9177],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-9.8314 : 25.9177"),L.marker([-82.2063,102.9305],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-82.2063 : 102.9305"),L.marker([57.6604,9.1422],{icon:L.KSP.Icon.ANOMALY}).bindPopup("57.6604 : 9.1422"),L.marker([2.4695,81.5133],{icon:L.KSP.Icon.ANOMALY}).bindPopup("2.4695 : 81.5133"),L.marker([12.4432,39.178],{icon:L.KSP.Icon.ANOMALY}).bindPopup("12.4432 : 39.1780"),L.marker([-12.4431,-140.822],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-12.4431 : -140.8220"),L.marker([.7027,22.747],{icon:L.KSP.Icon.ANOMALY}).bindPopup("0.7027 : 22.7470"),L.marker([-70.9556,-68.1378],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-70.9556,-68.1378")])}}),L.KSP.CelestialBody.MINMUS=L.KSP.celestialBody({id:"minmus",name:"Minmus",crs:L.KSP.CRS.EPSG4326,radius:6e4,addedOn:13682304e5,lastUpdated:13682304e5,thumbnail:"body-minmus.png",baseLayers:{Satellite:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SATELLITE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"sat",body:"minmus"}),"Color Relief":L.KSP.tileLayer(L.KSP.TileLayer.TYPE_COLORRELIEF,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"color",body:"minmus",legend:{"5750 m":"#414B41","2500 m":"#BEE6C3","1 m":"#96CDB4","0 m":"#87B9A5"}}),Slope:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SLOPE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"slope",body:"minmus",legend:L.KSP.Legend.SLOPE})},overlays:{Anomalies:L.KSP.layerGroup(L.KSP.LayerGroup.TYPE_ANOMALY,[L.marker([23.7768,60.0462],{icon:L.KSP.Icon.ANOMALY}).bindPopup("23.7768 : 60.0462")])}}),L.KSP.CelestialBody.DUNA=L.KSP.celestialBody({id:"duna",name:"Duna",crs:L.KSP.CRS.EPSG4326,radius:32e4,addedOn:13688352e5,lastUpdated:13688352e5,thumbnail:"body-duna.png",baseLayers:{Satellite:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SATELLITE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"sat",body:"duna"}),"Color Relief":L.KSP.tileLayer(L.KSP.TileLayer.TYPE_COLORRELIEF,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"color",body:"duna",legend:{"4800 m":"#C3A082","4000 m":"#966446","3000 m":"#733219","2000 m":"#501E14","1000 m":"#3C140F","0 m":"#280F0A"}}),Slope:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SLOPE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"slope",body:"duna",legend:L.KSP.Legend.SLOPE})},overlays:{Anomalies:L.KSP.layerGroup(L.KSP.LayerGroup.TYPE_ANOMALY,[L.marker([17.0483,-85.4717],{icon:L.KSP.Icon.ANOMALY}).bindPopup("17.0483 : -85.4717"),L.marker([-30.3525,-28.6828],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-30.3525 : -28.6828"),L.marker([-66.1344,-160.7432],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-66.1344 : -160.7432")])}}),L.KSP.CelestialBody.IKE=L.KSP.celestialBody({id:"ike",name:"Ike",crs:L.KSP.CRS.EPSG4326,radius:13e4,addedOn:13688352e5,lastUpdated:13688352e5,thumbnail:"body-ike.png",baseLayers:{Satellite:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SATELLITE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"sat",body:"ike"}),"Color Relief":L.KSP.tileLayer(L.KSP.TileLayer.TYPE_COLORRELIEF,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"color",body:"ike",legend:{"13000 m":"#828282","11000 m":"#6E6E6E","9000 m":"#5A5A5A","7000 m":"#464646","5000 m":"#323232","2500 m":"#191919","70 m":"#070707"}}),Slope:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SLOPE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"slope",body:"ike",legend:L.KSP.Legend.SLOPE})},overlays:{}}),L.KSP.CelestialBody.DRES=L.KSP.celestialBody({id:"dres",name:"Dres",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-dres.png"}),L.KSP.CelestialBody.JOOL=L.KSP.celestialBody({id:"jool",name:"Jool",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-jool.png"}),L.KSP.CelestialBody.LAYTHE=L.KSP.celestialBody({id:"laythe",name:"Laythe",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-laythe.png"}),L.KSP.CelestialBody.VALL=L.KSP.celestialBody({id:"vall",name:"Vall",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-vall.png"}),L.KSP.CelestialBody.TYLO=L.KSP.celestialBody({id:"tylo",name:"Tylo",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-tylo.png"}),L.KSP.CelestialBody.BOP=L.KSP.celestialBody({id:"bop",name:"Bop",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-bop.png"}),L.KSP.CelestialBody.POL=L.KSP.celestialBody({id:"pol",name:"Pol",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-pol.png"}),L.KSP.CelestialBody.EELOO=L.KSP.celestialBody({id:"eeloo",name:"Eeloo",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-eeloo.png"}),L.KSP.CelestialBody.KERBIN.defaultLayer=L.KSP.CelestialBody.KERBIN.baseLayers.Satellite,L.KSP.CelestialBody.MUN.defaultLayer=L.KSP.CelestialBody.MUN.baseLayers.Satellite,L.KSP.CelestialBody.MINMUS.defaultLayer=L.KSP.CelestialBody.MINMUS.baseLayers.Satellite,L.KSP.CelestialBody.EVE.children=[L.KSP.CelestialBody.GILLY],L.KSP.CelestialBody.KERBIN.children=[L.KSP.CelestialBody.MUN,L.KSP.CelestialBody.MINMUS],L.KSP.CelestialBody.DUNA.children=[L.KSP.CelestialBody.IKE],L.KSP.CelestialBody.JOOL.children=[L.KSP.CelestialBody.LAYTHE,L.KSP.CelestialBody.VALL,L.KSP.CelestialBody.TYLO,L.KSP.CelestialBody.BOP,L.KSP.CelestialBody.POL],L.KSP.CelestialBody.GILLY.parent=L.KSP.CelestialBody.EVE,L.KSP.CelestialBody.MUN.parent=L.KSP.CelestialBody.MINMUS.parent=L.KSP.CelestialBody.KERBIN,L.KSP.CelestialBody.IKE.parent=L.KSP.CelestialBody.DUNA,L.KSP.CelestialBody.LAYTHE.parent=L.KSP.CelestialBody.VALL.parent=L.KSP.CelestialBody.TYLO.parent=L.KSP.CelestialBody.BOP.parent=L.KSP.CelestialBody.POL.parent=L.KSP.CelestialBody.JOOL,L.KSP.CelestialBody.ALL_PLANETARY=[L.KSP.CelestialBody.MOHO,L.KSP.CelestialBody.EVE,L.KSP.CelestialBody.KERBIN,L.KSP.CelestialBody.DUNA,L.KSP.CelestialBody.DRES,L.KSP.CelestialBody.JOOL,L.KSP.CelestialBody.EELOO],L.KSP.Map.addInitHook(function(){this.options.layers=[L.KSP.CelestialBody.KERBIN]})}(this,document); +var Settings = Class.create({ + initialize: function(defaultHost, defaultPort){ + if(!this.getHost()){ this.setHost(defaultHost)} + if(!this.getPort()){ this.setPort(defaultPort)} + }, + + getHost: function(){ + return this.get('host') + }, + + getPort: function(){ + return this.get('port') + }, + + setHost: function(value){ + return this.set('host', value) + }, + + setPort: function(value){ + return this.set('port', value) + }, + + get: function(property){ + return localStorage.getItem(property) + }, + + set: function(property, value){ + return localStorage.setItem(property, value) + } +}) +var Telemachus = Class.create({ + initialize: function(host, port){ + this.updateConnection(host, port) + this.receiverFunctions = [] + this.subscribedFields = {} + this.orbitingBodies = this.getOrbitalBodies() + this.rate = 500 + + this.loopTimeout = setTimeout(this.poll.bind(this), this.rate) + }, + + url: function(){ + return "http://" + this.host + ":" + this.port + "/telemachus/datalink" + }, + + updateConnection: function(host, port){ + this.host = host + this.port = port + }, + + addReceiverFunction: function(func){ + this.receiverFunctions.push(func) + }, + + subscribeToData: function(fields){ + for (var i = fields.length - 1; i >= 0; i--) { + var field = fields[i] + this.subscribedFields[field] = field + }; + }, + + dispatchMessages: function(data){ + for (var i = this.receiverFunctions.length - 1; i >= 0; i--) { + try{ + this.receiverFunctions[i](data) + } catch(e){ + console.error(e) + } + }; + }, + + send: function(message){ + this.socket.send(JSON.stringify(message)) + }, + + getOrbitalBodyInfo: function(name){ + var properties = this.orbitingBodies[name] + + if(properties){ + return Object.extend({name: name}, properties) + } else{ + return null + } + }, + + notifyIfLOS: function(request){ + if(request.transport.status == 0){ + document.fire('telemachus:loss-of-signal') + return true + } + return false + }, + + prepareParams: function(params){ + var normalizedParams = [] + Object.keys(params).forEach(function(field){ + var sanitizedFieldName = field.replace("[", "{").replace("]","}") + normalizedParams.push(sanitizedFieldName + "=" + field) + }) + return normalizedParams + }, + + convertData: function(rawData){ + var data = {} + var startBracesRegexp = /\{/g + var endBracesRegexp = /\}/g + + Object.keys(rawData).forEach(function(key){ + var convertedFieldName = key.replace(startBracesRegexp, "[").replace(endBracesRegexp, "]") + data[convertedFieldName] = rawData[key] + }) + + return data + }, + + poll: function(){ + var params = this.prepareParams(this.subscribedFields) + var requestURL = this.url() + "?" + params.join("&") + + new Ajax.Request(requestURL, { + method: "get", + onSuccess: function(response){ + var rawData = JSON.parse(response.responseText) + var data = this.convertData(rawData) + + this.dispatchMessages(data) + }.bind(this), + onException: this.notifyIfLOS.bind(this), + onComplete: function(response){ + setTimeout(this.poll.bind(this),this.rate); + }.bind(this) + }) + }, + + sendMessage: function(params, callback){ + new Ajax.Request(this.url(), { + method: "post", + postBody: JSON.stringify(params), + // parameters: params, + onSuccess: function(response){ + var rawData = JSON.parse(response.responseText) + var data = this.convertData(rawData) + callback(data) + }.bind(this), + onException: this.notifyIfLOS.bind(this) + }) + }, + + cameraURL: function(){ + return "http://" + this.host + ":" + this.port + "/telemachus/cameras" + }, + + getCameraList: function(callback){ + new Ajax.Request(this.cameraURL(), { + method: "get", + // parameters: params, + onSuccess: function(response){ + var data = JSON.parse(response.responseText) + callback(data) + }.bind(this), + onException: this.notifyIfLOS.bind(this) + }) + }, + + getOrbitalBodies: function(){ + return { + "Sun" : { + id: 0, + referenceBodyName: null, + mapBody: null, + atmosphericRadius: 0, + color: '#FFFF00', + surfaceGravity: 17.1 //m/s^2, + }, + "Kerbin" : { + id: 1, + referenceBodyName: "Sun", + mapBody: L.KSP.CelestialBody.KERBIN, + atmosphericRadius: 70000, + color: '#4a5472', + surfaceGravity: 9.81 //m/s^2 + }, + "Mun" : { + id: 2, + referenceBodyName: "Kerbin", + mapBody: L.KSP.CelestialBody.MUN, + atmosphericRadius: 0, + color: '#e2e0d7', + surfaceGravity: 1.63 //m/s^2 + }, + "Minmus" : { + id: 3, + referenceBodyName: "Kerbin", + mapBody: L.KSP.CelestialBody.MINMUS, + color: '#98f2c5', + atmosphericRadius: 0, + surfaceGravity: 0.491 //m/s^2 + }, + "Moho" : { + id: 4, + referenceBodyName: "Sun", + mapBody: L.KSP.CelestialBody.MOHO, + atmosphericRadius: 0, + color: '#fdc39e', + surfaceGravity: 2.70 //m/s^2 + }, + "Eve" : { + id: 5, + referenceBodyName: "Sun", + mapBody: L.KSP.CelestialBody.EVE, + atmosphericRadius: 90000, + color: '#c394fe', + surfaceGravity: 16.7 //m/s^2 + }, + "Duna" : { + id: 6, + referenceBodyName: "Sun", + mapBody: L.KSP.CelestialBody.DUNA, + atmosphericRadius: 50000, + color: '#fc5e49', + surfaceGravity: 2.94 //m/s^2 + }, + "Ike" : { + id: 7, + referenceBodyName: "Duna", + mapBody: L.KSP.CelestialBody.IKE, + atmosphericRadius: 0, + color: '#e2e0d7', + surfaceGravity: 1.10 //m/s^2 + }, + "Jool" : { + id: 8, + referenceBodyName: "Sun", + mapBody: L.KSP.CelestialBody.JOOL, + atmosphericRadius: 200000, + color: '#C5DCAB', + surfaceGravity: 7.85 //m/s^2 + }, + "Laythe" : { + id: 9, + referenceBodyName: "Jool", + mapBody: L.KSP.CelestialBody.LAYTHE, + atmosphericRadius: 50000, + color: '#a8b4fe', + surfaceGravity: 7.85 //m/s^2 + }, + "Vall" : { + id: 10, + referenceBodyName: "Jool", + mapBody: L.KSP.CelestialBody.VALL, + atmosphericRadius: 0, + color: '#b0f4fe', + surfaceGravity: 2.31 //m/s^2 + }, + "Bop" : { + id: 11, + referenceBodyName: "Jool", + mapBody: L.KSP.CelestialBody.BOP, + atmosphericRadius: 0, + color: '#c64605', + surfaceGravity: 0.589 //m/s^2 + }, + "Tylo" : { + id: 12, + referenceBodyName: "Jool", + mapBody: L.KSP.CelestialBody.TYLO, + atmosphericRadius: 0, + color: '#fdf7ed', + surfaceGravity: 7.85 //m/s^2 + }, + "Gilly" : { + id: 13, + referenceBodyName: "Eve", + mapBody: L.KSP.CelestialBody.GILLY, + atmosphericRadius: 0, + color: '#fdcbb1', + surfaceGravity: 0.049 //m/s^2 + }, + "Pol" : { + id: 14, + referenceBodyName: "Pol", + mapBody: L.KSP.CelestialBody.POL, + atmosphericRadius: 0, + color: '#fec681', + surfaceGravity: 0.373 //m/s^2 + }, + "Dres" : { + id: 15, + referenceBodyName: "Sun", + mapBody: L.KSP.CelestialBody.DRES, + atmosphericRadius: 0, + color: '#fef8f9', + surfaceGravity: 1.13 //m/s^2 + }, + "Eeloo" : { + id: 16, + referenceBodyName: "Sun", + mapBody: L.KSP.CelestialBody.EELOO, + atmosphericRadius: 0, + color: '#e5fafe', + surfaceGravity: 1.69 //m/s^2 + } + } + } +}) +var TitleBar = Class.create({ + initialize: function(datalink, title_bar_id){ + this.datalink = datalink + this.title_bar_id = title_bar_id + this.title_bar = $(this.title_bar_id) + this.initializeLOSNotifier() + this.initializeDatalink() + }, + + update: function(data){ + window.requestAnimationFrame(function(){ + this.title_bar.down("#world-clock").update(TimeFormatters.formatUT(data["t.universalTime"])) + this.title_bar.down("#mission-time").update(TimeFormatters.formatMET(data["v.missionTime"])) + + this.title_bar.down("#mission-time").removeClassName("loss-of-signal") + }.bind(this)) + }, + + initializeLOSNotifier:function(){ + document.observe('telemachus:loss-of-signal', function(){ + window.requestAnimationFrame(function(){ + this.title_bar.down("#mission-time").update("⚠ LOS ⚠") + this.title_bar.down("#mission-time").addClassName("loss-of-signal") + }.bind(this)) + }.bind(this)) + }, + + initializeDatalink: function(){ + this.datalink.subscribeToData([ + 't.timeWarp', 't.universalTime', 'v.missionTime' + ]) + + this.datalink.addReceiverFunction(this.update.bind(this)) + }, +}) +var ButtonIndicator = Class.create({ + initialize: function(datalink, indicatorId, apiButtonString){ + this.datalink = datalink + this.indicatorId = indicatorId + this.indicator = $(this.indicatorId) + this.apiButtonString = apiButtonString + this.initializeDatalink() + }, + + update: function(data){ + if(data[this.apiButtonString] == true){ + this.indicator.addClassName("on") + } else{ + this.indicator.removeClassName("on") + } + }, + + initializeDatalink: function(){ + this.datalink.subscribeToData([this.apiButtonString]) + + this.datalink.addReceiverFunction(this.update.bind(this)) + }, +}) +var ReadoutTable = Class.create({ + initialize: function(datalink, tableId, dataRows){ + this.datalink = datalink + this.tableId = tableId + this.table = $(this.tableId) + this.dataRows = dataRows + this.initializeDatalink() + }, + + update: function(data){ + window.requestAnimationFrame(function(){ + this.dataRows.forEach(function(row){ + var rowId = row.label + var tableRow = this.table.down("tr[data-label='"+ rowId +"']") + + if(!tableRow){ + var tableRow = new Element("tr", { + "data-label" : rowId + }) + + tableRow.insert("" + row.label + "") + this.table.insert(tableRow) + } + + tableRow.down("td").update(row.formatter(data[row.value])) + }.bind(this)) + }.bind(this)) + }, + + initializeDatalink: function(){ + var dataValues = this.dataRows.map(function(dataRow){ + return dataRow.value + }) + + this.datalink.subscribeToData(dataValues) + + this.datalink.addReceiverFunction(this.update.bind(this)) + }, +}) +var ResourceMonitor = Class.create({ + initialize: function(datalink, resourceName, options){ + this.datalink = datalink + this.resourceName = resourceName + this.options = Object.extend({ + currentStageProgressBar: null, + totalProgressBar: null, + valuePrefix: null + }, options) + + this.resourceStrings = this.buildResourceStrings() + + this.initializeDatalink() + }, + + update: function(data){ + window.requestAnimationFrame(function(){ + if(this.options.totalProgressBar){ + this.options.totalProgressBar.value = data[this.resourceStrings.totalAvailable] + this.options.totalProgressBar.max = data[this.resourceStrings.totalMax] + } + + if(this.options.currentStageProgressBar){ + this.options.currentStageProgressBar.value = data[this.resourceStrings.currentStageAvailable] + this.options.currentStageProgressBar.max = data[this.resourceStrings.currentStageMax] + } + + this.updateValue("-total-value", data[this.resourceStrings.totalAvailable]) + this.updateValue("-total-max", data[this.resourceStrings.totalMax]) + + this.updateValue("-current-stage-value", data[this.resourceStrings.currentStageAvailable]) + this.updateValue("-current-stage-max", data[this.resourceStrings.currentStageMax]) + }.bind(this)) + }, + + updateValue: function(id, value){ + if($(this.options.valuePrefix + id)){ + if(value < 0){ + $(this.options.valuePrefix + id).update("NA") + } else{ + $(this.options.valuePrefix + id).update(value.toFixed(2)) + } + } + }, + + buildResourceStrings: function(){ + return { + totalAvailable: "r.resource["+ this.resourceName +"]", + totalMax: "r.resourceMax["+ this.resourceName +"]", + currentStageAvailable: "r.resourceCurrent["+ this.resourceName +"]", + currentStageMax: "r.resourceCurrentMax["+ this.resourceName +"]", + } + }, + + initializeDatalink: function(){ + this.datalink.subscribeToData([ + this.resourceStrings.totalAvailable, + this.resourceStrings.totalMax, + this.resourceStrings.currentStageAvailable, + this.resourceStrings.currentStageMax + ]) + + this.datalink.addReceiverFunction(this.update.bind(this)) + }, +}) +var DataTable = Class.create({ + initialize: function(tableID, dataRows){ + this.tableID = tableID + this.table = $(this.tableID) + this.dataRows = dataRows + }, + + update: function(){ + window.requestAnimationFrame(function(){ + this.dataRows.forEach(function(row){ + var rowId = row.label + var tableRow = this.table.down("tr[data-label='"+ rowId +"']") + + if(!tableRow){ + var tableRow = new Element("tr", { + "data-label" : rowId + }) + + tableRow.insert("" + row.label + "") + this.table.insert(tableRow) + } + + tableRow.down("td").update(row.value) + }.bind(this)) + }.bind(this)) + }, + + clear: function(){ + window.requestAnimationFrame(function(){ + this.dataRows = [] + this.table.innerHTML = "" + }.bind(this)) + } +}) +var AtmosphericDensityGauge = Class.create({ + initialize: function(datalink, gaugeID){ + this.datalink = datalink + this.gaugeID = gaugeID + this.gauge = $(this.gaugeID) + this.initializeDatalink() + this.func = function(x){return Math.log(2.0 * x)} + }, + + update: function(data){ + var max = this.func(100) + var value = this.func(data['v.atmosphericPressure'] * 100) + if(!isFinite(value)){ value = 0 } + + this.gauge.value = value + this.gauge.max = max + }, + + initializeDatalink: function(){ + this.datalink.subscribeToData(['v.atmosphericPressure']) + + this.datalink.addReceiverFunction(this.update.bind(this)) + }, +}) +var ThrottleGauge = Class.create({ + initialize: function(datalink, gaugeID){ + this.datalink = datalink + this.gaugeID = gaugeID + this.gauge = $(this.gaugeID) + this.initializeDatalink() + }, + + update: function(data){ + this.gauge.value = data['f.throttle'] * 100 + this.gauge.max = 100 + }, + + initializeDatalink: function(){ + this.datalink.subscribeToData(['f.throttle']) + + this.datalink.addReceiverFunction(this.update.bind(this)) + }, +}) \ No newline at end of file diff --git a/public/assets/ascension.js b/public/assets/ascension.js index 3e54ba8..cc41b81 100644 --- a/public/assets/ascension.js +++ b/public/assets/ascension.js @@ -1,44 +1,9870 @@ -Math.toDegrees=function(angleInRadians){return angleInRadians*(180/Math.PI)};Math.toRadians=function(angleInDegrees){return angleInDegrees*(Math.PI/180)};Math.crossProduct=function(x,y){[x[1]*y[2]-x[2]*y[1],x[2]*y[0]-x[0]*y[2],x[0]*y[1]-x[1]*y[0]]};Math.sign=Math.sign||function(x){x=+x;if(x===0||isNaN(x)){return x}return x>0?1:-1};Math.cosh=Math.cosh||function(x){return(Math.exp(x)+Math.exp(-x))/2};Math.sinh=Math.sinh||function(x){return(Math.exp(x)-Math.exp(-x))/2};Math.matrixAdd=Math.matrixAdd||function(){var arrays=arguments,results=[],count=arrays[0].length,L=arrays.length,sum,next=0,i;while(next-1?e(a,b,c):b.indexOf("%")>-1?f(a,b,c):b.indexOf(":")>-1?g(a,b):i(a._value,b,c)}function d(a,b){var c,d,e,f,g,i=b,j=["KB","MB","GB","TB","PB","EB","ZB","YB"],k=!1;if(b.indexOf(":")>-1)a._value=h(b);else if(b===q)a._value=0;else{for("."!==o[p].delimiters.decimal&&(b=b.replace(/\./g,"").replace(o[p].delimiters.decimal,".")),c=new RegExp("[^a-zA-Z]"+o[p].abbreviations.thousand+"(?:\\)|(\\"+o[p].currency.symbol+")?(?:\\))?)?$"),d=new RegExp("[^a-zA-Z]"+o[p].abbreviations.million+"(?:\\)|(\\"+o[p].currency.symbol+")?(?:\\))?)?$"),e=new RegExp("[^a-zA-Z]"+o[p].abbreviations.billion+"(?:\\)|(\\"+o[p].currency.symbol+")?(?:\\))?)?$"),f=new RegExp("[^a-zA-Z]"+o[p].abbreviations.trillion+"(?:\\)|(\\"+o[p].currency.symbol+")?(?:\\))?)?$"),g=0;g<=j.length&&!(k=b.indexOf(j[g])>-1?Math.pow(1024,g+1):!1);g++);a._value=(k?k:1)*(i.match(c)?Math.pow(10,3):1)*(i.match(d)?Math.pow(10,6):1)*(i.match(e)?Math.pow(10,9):1)*(i.match(f)?Math.pow(10,12):1)*(b.indexOf("%")>-1?.01:1)*((b.split("-").length+Math.min(b.split("(").length-1,b.split(")").length-1))%2?1:-1)*Number(b.replace(/[^0-9\.]+/g,"")),a._value=k?Math.ceil(a._value):a._value}return a._value}function e(a,b,c){var d,e,f=b.indexOf("$"),g=b.indexOf("("),h=b.indexOf("-"),j="";return b.indexOf(" $")>-1?(j=" ",b=b.replace(" $","")):b.indexOf("$ ")>-1?(j=" ",b=b.replace("$ ","")):b=b.replace("$",""),e=i(a._value,b,c),1>=f?e.indexOf("(")>-1||e.indexOf("-")>-1?(e=e.split(""),d=1,(g>f||h>f)&&(d=0),e.splice(d,0,o[p].currency.symbol+j),e=e.join("")):e=o[p].currency.symbol+j+e:e.indexOf(")")>-1?(e=e.split(""),e.splice(-1,0,j+o[p].currency.symbol),e=e.join("")):e=e+j+o[p].currency.symbol,e}function f(a,b,c){var d,e="",f=100*a._value;return b.indexOf(" %")>-1?(e=" ",b=b.replace(" %","")):b=b.replace("%",""),d=i(f,b,c),d.indexOf(")")>-1?(d=d.split(""),d.splice(-1,0,e+"%"),d=d.join("")):d=d+e+"%",d}function g(a){var b=Math.floor(a._value/60/60),c=Math.floor((a._value-60*b*60)/60),d=Math.round(a._value-60*b*60-60*c);return b+":"+(10>c?"0"+c:c)+":"+(10>d?"0"+d:d)}function h(a){var b=a.split(":"),c=0;return 3===b.length?(c+=60*Number(b[0])*60,c+=60*Number(b[1]),c+=Number(b[2])):2===b.length&&(c+=60*Number(b[0]),c+=Number(b[1])),Number(c)}function i(a,c,d){var e,f,g,h,i,j,k=!1,l=!1,m=!1,n="",r=!1,s=!1,t=!1,u=!1,v=!1,w="",x="",y=Math.abs(a),z=["B","KB","MB","GB","TB","PB","EB","ZB","YB"],A="",B=!1;if(0===a&&null!==q)return q;if(c.indexOf("(")>-1?(k=!0,c=c.slice(1,-1)):c.indexOf("+")>-1&&(l=!0,c=c.replace(/\+/g,"")),c.indexOf("a")>-1&&(r=c.indexOf("aK")>=0,s=c.indexOf("aM")>=0,t=c.indexOf("aB")>=0,u=c.indexOf("aT")>=0,v=r||s||t||u,c.indexOf(" a")>-1?(n=" ",c=c.replace(" a","")):c=c.replace("a",""),y>=Math.pow(10,12)&&!v||u?(n+=o[p].abbreviations.trillion,a/=Math.pow(10,12)):y=Math.pow(10,9)&&!v||t?(n+=o[p].abbreviations.billion,a/=Math.pow(10,9)):y=Math.pow(10,6)&&!v||s?(n+=o[p].abbreviations.million,a/=Math.pow(10,6)):(y=Math.pow(10,3)&&!v||r)&&(n+=o[p].abbreviations.thousand,a/=Math.pow(10,3))),c.indexOf("b")>-1)for(c.indexOf(" b")>-1?(w=" ",c=c.replace(" b","")):c=c.replace("b",""),g=0;g<=z.length;g++)if(e=Math.pow(1024,g),f=Math.pow(1024,g+1),a>=e&&f>a){w+=z[g],e>0&&(a/=e);break}return c.indexOf("o")>-1&&(c.indexOf(" o")>-1?(x=" ",c=c.replace(" o","")):c=c.replace("o",""),x+=o[p].ordinal(a)),c.indexOf("[.]")>-1&&(m=!0,c=c.replace("[.]",".")),h=a.toString().split(".")[0],i=c.split(".")[1],j=c.indexOf(","),i?(i.indexOf("[")>-1?(i=i.replace("]",""),i=i.split("["),A=b(a,i[0].length+i[1].length,d,i[1].length)):A=b(a,i.length,d),h=A.split(".")[0],A=A.split(".")[1].length?o[p].delimiters.decimal+A.split(".")[1]:"",m&&0===Number(A.slice(1))&&(A="")):h=b(a,null,d),h.indexOf("-")>-1&&(h=h.slice(1),B=!0),j>-1&&(h=h.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g,"$1"+o[p].delimiters.thousands)),0===c.indexOf(".")&&(h=""),(k&&B?"(":"")+(!k&&B?"-":"")+(!B&&l?"+":"")+h+A+(x?x:"")+(n?n:"")+(w?w:"")+(k&&B?")":"")}function j(a,b){o[a]=b}function k(a){var b=a.toString().split(".");return b.length<2?1:Math.pow(10,b[1].length)}function l(){var a=Array.prototype.slice.call(arguments);return a.reduce(function(a,b){var c=k(a),d=k(b);return c>d?c:d},-1/0)}var m,n="1.5.3",o={},p="en",q=null,r="0,0",s="undefined"!=typeof module&&module.exports;m=function(b){return m.isNumeral(b)?b=b.value():0===b||"undefined"==typeof b?b=0:Number(b)||(b=m.fn.unformat(b)),new a(Number(b))},m.version=n,m.isNumeral=function(b){return b instanceof a},m.language=function(a,b){if(!a)return p;if(a&&!b){if(!o[a])throw new Error("Unknown language : "+a);p=a}return(b||!o[a])&&j(a,b),m},m.languageData=function(a){if(!a)return o[p];if(!o[a])throw new Error("Unknown language : "+a);return o[a]},m.language("en",{delimiters:{thousands:",",decimal:"."},abbreviations:{thousand:"k",million:"m",billion:"b",trillion:"t"},ordinal:function(a){var b=a%10;return 1===~~(a%100/10)?"th":1===b?"st":2===b?"nd":3===b?"rd":"th"},currency:{symbol:"$"}}),m.zeroFormat=function(a){q="string"==typeof a?a:null},m.defaultFormat=function(a){r="string"==typeof a?a:"0.0"},"function"!=typeof Array.prototype.reduce&&(Array.prototype.reduce=function(a,b){"use strict";if(null===this||"undefined"==typeof this)throw new TypeError("Array.prototype.reduce called on null or undefined");if("function"!=typeof a)throw new TypeError(a+" is not a function");var c,d,e=this.length>>>0,f=!1;for(1c;++c)this.hasOwnProperty(c)&&(f?d=a(d,this[c],c,this):(d=this[c],f=!0));if(!f)throw new TypeError("Reduce of empty array with no initial value");return d}),m.fn=a.prototype={clone:function(){return m(this)},format:function(a,b){return c(this,a?a:r,void 0!==b?b:Math.round)},unformat:function(a){return"[object Number]"===Object.prototype.toString.call(a)?a:d(this,a?a:r)},value:function(){return this._value},valueOf:function(){return this._value},set:function(a){return this._value=Number(a),this},add:function(a){function b(a,b){return a+c*b}var c=l.call(null,this._value,a);return this._value=[this._value,a].reduce(b,0)/c,this},subtract:function(a){function b(a,b){return a-c*b}var c=l.call(null,this._value,a);return this._value=[a].reduce(b,this._value*c)/c,this},multiply:function(a){function b(a,b){var c=l(a,b);return a*c*b*c/(c*c)}return this._value=[this._value,a].reduce(b,1),this},divide:function(a){function b(a,b){var c=l(a,b);return a*c/(b*c)}return this._value=[this._value,a].reduce(b),this},difference:function(a){return Math.abs(m(this._value).subtract(a).value())}},s&&(module.exports=m),"undefined"==typeof ender&&(this.numeral=m),"function"==typeof define&&define.amd&&define([],function(){return m})}).call(this);var TimeFormatters={formatUT:function(t){var day,year;if(t==null){t=0}year=(t/(365*24*3600)|0)+1;t%=365*24*3600;day=(t/(24*3600)|0)+1;t%=24*3600;return"Year "+year+", Day "+day+", "+this.hourMinSec(t)+" UT"},formatMET:function(t){var result;if(t==null){t=0}result="T+";if(t>=365*24*3600){result+=(t/(365*24*3600)|0)+":";t%=365*24*3600;if(t<24*3600){result+="0:"}}if(t>=24*3600){result+=(t/(24*3600)|0)+":"}t%=24*3600;return result+this.hourMinSec(t)+" MET"},hourMinSec:function(t){var hour,min,sec;if(t==null){t=0}hour=t/3600|0;if(hour<10){hour="0"+hour}t%=3600;min=t/60|0;if(min<10){min="0"+min}sec=(t%60|0).toFixed();if(sec<10){sec="0"+sec}return""+hour+":"+min+":"+sec},durationString:function(t){var result;if(t==null){t=0}result=t<0?"-":"";t=Math.abs(t);if(t>=365*24*3600){result+=(t/(365*24*3600)|0)+" years ";t%=365*24*3600;if(t<24*3600){result+="0 days "}}if(t>=24*3600){result+=(t/(24*3600)|0)+" days "}t%=24*3600;return result+this.hourMinSec(t)}};var DataFormatters={distanceString:function(value){return numeral(value).format("0,0.000 a")+"m"},heightFromTerrainString:function(value){if(value<=-1){return"NA"}return numeral(value).format("0,0.000 a")+"m"},degreeString:function(value){return numeral(value).format("0.000")+"°"},velocityString:function(value){return numeral(value).format("0,0.000 a")+"m/s"},temperatureString:function(value){if(!value){return"NA"}return numeral(value).format("0,000")+"°C"},accelerationSensorString:function(value){if(value[0]=="No Sensors of the Appropriate Type"){return"NA"}return numeral(value[1][0]).format("0,000")+"G"},pressureSensorString:function(value){if(value[0]=="No Sensors of the Appropriate Type"){return"NA"}return numeral(value[1][0]).format("0,000")+"Pa"},gravitySensorString:function(value){if(value[0]=="No Sensors of the Appropriate Type"){return"NA"}return numeral(value[1][0]).format("0,000 a")+"m/s²"},newtonsString:function(value){return numeral(value).format("0,0.00")+" N"},percentageString:function(value){return numeral(value).format("0%")},tonnageString:function(value){return numeral(value).format("0,0.00")+" t"},timeString:function(value){return numeral(value).format("00:00:00")},plainNumberString:function(value){return numeral(value).format("0,0.00")}};var Prototype={Version:"1.7.2",Browser:function(){var ua=navigator.userAgent;var isOpera=Object.prototype.toString.call(window.opera)=="[object Opera]";return{IE:!!window.attachEvent&&!isOpera,Opera:isOpera,WebKit:ua.indexOf("AppleWebKit/")>-1,Gecko:ua.indexOf("Gecko")>-1&&ua.indexOf("KHTML")===-1,MobileSafari:/Apple.*Mobile/.test(ua)}}(),BrowserFeatures:{XPath:!!document.evaluate,SelectorsAPI:!!document.querySelector,ElementExtensions:function(){var constructor=window.Element||window.HTMLElement;return!!(constructor&&constructor.prototype)}(),SpecificElementExtensions:function(){if(typeof window.HTMLDivElement!=="undefined")return true;var div=document.createElement("div"),form=document.createElement("form"),isSupported=false;if(div["__proto__"]&&div["__proto__"]!==form["__proto__"]){isSupported=true}div=form=null;return isSupported}()},ScriptFragment:"]*>([\\S\\s]*?)",JSONFilter:/^\/\*-secure-([\s\S]*)\*\/\s*$/,emptyFunction:function(){},K:function(x){return x}};if(Prototype.Browser.MobileSafari)Prototype.BrowserFeatures.SpecificElementExtensions=false;var Class=function(){var IS_DONTENUM_BUGGY=function(){for(var p in{toString:1}){if(p==="toString")return false}return true}();function subclass(){}function create(){var parent=null,properties=$A(arguments);if(Object.isFunction(properties[0]))parent=properties.shift();function klass(){this.initialize.apply(this,arguments)}Object.extend(klass,Class.Methods);klass.superclass=parent;klass.subclasses=[];if(parent){subclass.prototype=parent.prototype;klass.prototype=new subclass;parent.subclasses.push(klass)}for(var i=0,length=properties.length;i0){match=source.match(pattern);if(match&&match[0].length>0){result+=source.slice(0,match.index);result+=String.interpret(replacement(match));source=source.slice(match.index+match[0].length)}else{result+=source,source=""}}return result}function sub(pattern,replacement,count){replacement=prepareReplacement(replacement);count=Object.isUndefined(count)?1:count;return this.gsub(pattern,function(match){if(--count<0)return match[0];return replacement(match)})}function scan(pattern,iterator){this.gsub(pattern,iterator);return String(this)}function truncate(length,truncation){length=length||30;truncation=Object.isUndefined(truncation)?"...":truncation;return this.length>length?this.slice(0,length-truncation.length)+truncation:String(this)}function strip(){return this.replace(/^\s+/,"").replace(/\s+$/,"")}function stripTags(){return this.replace(/<\w+(\s+("[^"]*"|'[^']*'|[^>])+)?>|<\/\w+>/gi,"")}function stripScripts(){return this.replace(new RegExp(Prototype.ScriptFragment,"img"),"")}function extractScripts(){var matchAll=new RegExp(Prototype.ScriptFragment,"img"),matchOne=new RegExp(Prototype.ScriptFragment,"im");return(this.match(matchAll)||[]).map(function(scriptTag){return(scriptTag.match(matchOne)||["",""])[1]})}function evalScripts(){return this.extractScripts().map(function(script){return eval(script)})}function escapeHTML(){return this.replace(/&/g,"&").replace(//g,">")}function unescapeHTML(){return this.stripTags().replace(/</g,"<").replace(/>/g,">").replace(/&/g,"&")}function toQueryParams(separator){var match=this.strip().match(/([^?#]*)(#.*)?$/);if(!match)return{};return match[1].split(separator||"&").inject({},function(hash,pair){if((pair=pair.split("="))[0]){var key=decodeURIComponent(pair.shift()),value=pair.length>1?pair.join("="):pair[0];if(value!=undefined){value=value.gsub("+"," ");value=decodeURIComponent(value)}if(key in hash){if(!Object.isArray(hash[key]))hash[key]=[hash[key]];hash[key].push(value)}else hash[key]=value}return hash})}function toArray(){return this.split("")}function succ(){return this.slice(0,this.length-1)+String.fromCharCode(this.charCodeAt(this.length-1)+1)}function times(count){return count<1?"":new Array(count+1).join(this)}function camelize(){return this.replace(/-+(.)?/g,function(match,chr){return chr?chr.toUpperCase():""})}function capitalize(){return this.charAt(0).toUpperCase()+this.substring(1).toLowerCase()}function underscore(){return this.replace(/::/g,"/").replace(/([A-Z]+)([A-Z][a-z])/g,"$1_$2").replace(/([a-z\d])([A-Z])/g,"$1_$2").replace(/-/g,"_").toLowerCase()}function dasherize(){return this.replace(/_/g,"-")}function inspect(useDoubleQuotes){var escapedString=this.replace(/[\x00-\x1f\\]/g,function(character){if(character in String.specialChar){return String.specialChar[character]}return"\\u00"+character.charCodeAt().toPaddedString(2,16)});if(useDoubleQuotes)return'"'+escapedString.replace(/"/g,'\\"')+'"';return"'"+escapedString.replace(/'/g,"\\'")+"'"}function unfilterJSON(filter){return this.replace(filter||Prototype.JSONFilter,"$1")}function isJSON(){var str=this;if(str.blank())return false;str=str.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,"@");str=str.replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,"]");str=str.replace(/(?:^|:|,)(?:\s*\[)+/g,"");return/^[\],:{}\s]*$/.test(str)}function evalJSON(sanitize){var json=this.unfilterJSON(),cx=/[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g;if(cx.test(json)){json=json.replace(cx,function(a){return"\\u"+("0000"+a.charCodeAt(0).toString(16)).slice(-4)})}try{if(!sanitize||json.isJSON())return eval("("+json+")")}catch(e){}throw new SyntaxError("Badly formed JSON string: "+this.inspect())}function parseJSON(){var json=this.unfilterJSON();return JSON.parse(json)}function include(pattern){return this.indexOf(pattern)>-1}function startsWith(pattern,position){position=Object.isNumber(position)?position:0;return this.lastIndexOf(pattern,position)===position}function endsWith(pattern,position){pattern=String(pattern);position=Object.isNumber(position)?position:this.length;if(position<0)position=0;if(position>this.length)position=this.length;var d=position-pattern.length;return d>=0&&this.indexOf(pattern,d)===d}function empty(){return this==""}function blank(){return/^\s*$/.test(this)}function interpolate(object,pattern){return new Template(this,pattern).evaluate(object)}return{gsub:gsub,sub:sub,scan:scan,truncate:truncate,strip:String.prototype.trim||strip,stripTags:stripTags,stripScripts:stripScripts,extractScripts:extractScripts,evalScripts:evalScripts,escapeHTML:escapeHTML,unescapeHTML:unescapeHTML,toQueryParams:toQueryParams,parseQuery:toQueryParams,toArray:toArray,succ:succ,times:times,camelize:camelize,capitalize:capitalize,underscore:underscore,dasherize:dasherize,inspect:inspect,unfilterJSON:unfilterJSON,isJSON:isJSON,evalJSON:NATIVE_JSON_PARSE_SUPPORT?parseJSON:evalJSON,include:include,startsWith:String.prototype.startsWith||startsWith,endsWith:String.prototype.endsWith||endsWith,empty:empty,blank:blank,interpolate:interpolate}}());var Template=Class.create({initialize:function(template,pattern){this.template=template.toString();this.pattern=pattern||Template.Pattern},evaluate:function(object){if(object&&Object.isFunction(object.toTemplateReplacements))object=object.toTemplateReplacements();return this.template.gsub(this.pattern,function(match){if(object==null)return match[1]+"";var before=match[1]||"";if(before=="\\")return match[2];var ctx=object,expr=match[3],pattern=/^([^.[]+|\[((?:.*?[^\\])?)\])(\.|\[|$)/;match=pattern.exec(expr);if(match==null)return before;while(match!=null){var comp=match[1].startsWith("[")?match[2].replace(/\\\\]/g,"]"):match[1];ctx=ctx[comp];if(null==ctx||""==match[3])break;expr=expr.substring("["==match[3]?match[1].length:match[0].length);match=pattern.exec(expr)}return before+String.interpret(ctx)})}});Template.Pattern=/(^|.|\r|\n)(#\{(.*?)\})/;var $break={};var Enumerable=function(){function each(iterator,context){try{this._each(iterator,context)}catch(e){if(e!=$break)throw e}return this}function eachSlice(number,iterator,context){var index=-number,slices=[],array=this.toArray();if(number<1)return array;while((index+=number)=result)result=value},this);return result}function min(iterator,context){iterator=iterator||Prototype.K;var result;this.each(function(value,index){value=iterator.call(context,value,index,this);if(result==null||valueb?1:0}).pluck("value")}function toArray(){return this.map()}function zip(){var iterator=Prototype.K,args=$A(arguments);if(Object.isFunction(args.last()))iterator=args.pop();var collections=[this].concat(args).map($A);return this.map(function(value,index){return iterator(collections.pluck(index))})}function size(){return this.toArray().length}function inspect(){return"#"}return{each:each,eachSlice:eachSlice,all:all,every:all,any:any,some:any,collect:collect,map:collect,detect:detect,findAll:findAll,select:findAll,filter:findAll,grep:grep,include:include,member:include,inGroupsOf:inGroupsOf,inject:inject,invoke:invoke,max:max,min:min,partition:partition,pluck:pluck,reject:reject,sortBy:sortBy,toArray:toArray,entries:toArray,zip:zip,size:size,inspect:inspect,find:detect}}();function $A(iterable){if(!iterable)return[];if("toArray"in Object(iterable))return iterable.toArray();var length=iterable.length||0,results=new Array(length);while(length--)results[length]=iterable[length];return results}function $w(string){if(!Object.isString(string))return[];string=string.strip();return string?string.split(/\s+/):[]}Array.from=$A;(function(){var arrayProto=Array.prototype,slice=arrayProto.slice,_each=arrayProto.forEach;function each(iterator,context){for(var i=0,length=this.length>>>0;i>>0;if(length===0)return-1;i=Number(i);if(isNaN(i)){i=0}else if(i!==0&&isFinite(i)){i=(i>0?1:-1)*Math.floor(Math.abs(i))}if(i>length)return-1;var k=i>=0?i:Math.max(length-Math.abs(i),0);for(;k>>0;if(length===0)return-1;if(!Object.isUndefined(i)){i=Number(i);if(isNaN(i)){i=0}else if(i!==0&&isFinite(i)){i=(i>0?1:-1)*Math.floor(Math.abs(i))}}else{i=length}var k=i>=0?Math.min(i,length-1):length-Math.abs(i);for(;k>=0;k--)if(k in array&&array[k]===item)return k;return-1}function concat(_){var array=[],items=slice.call(arguments,0),item,n=0;items.unshift(this);for(var i=0,length=items.length;i>>0;i>>0;i>>0;i>>0;i"}function clone(){return new Hash(this)}return{initialize:initialize,_each:_each,set:set,get:get,unset:unset,toObject:toObject,toTemplateReplacements:toObject,keys:keys,values:values,index:index,merge:merge,update:update,toQueryString:toQueryString,inspect:inspect,toJSON:toObject,clone:clone}}());Hash.from=$H;Object.extend(Number.prototype,function(){function toColorPart(){return this.toPaddedString(2,16)}function succ(){return this+1}function times(iterator,context){$R(0,this,true).each(iterator,context);return this}function toPaddedString(length,radix){var string=this.toString(radix||10);return"0".times(length-string.length)+string}function abs(){return Math.abs(this)}function round(){return Math.round(this)}function ceil(){return Math.ceil(this)}function floor(){return Math.floor(this)}return{toColorPart:toColorPart,succ:succ,times:times,toPaddedString:toPaddedString,abs:abs,round:round,ceil:ceil,floor:floor}}());function $R(start,end,exclusive){return new ObjectRange(start,end,exclusive)}var ObjectRange=Class.create(Enumerable,function(){function initialize(start,end,exclusive){this.start=start;this.end=end;this.exclusive=exclusive}function _each(iterator,context){var value=this.start,i;for(i=0;this.include(value);i++){iterator.call(context,value,i);value=value.succ()}}function include(value){if(value1&&!(readyState==4&&this._complete))this.respondToReadyState(this.transport.readyState)},setRequestHeaders:function(){var headers={"X-Requested-With":"XMLHttpRequest","X-Prototype-Version":Prototype.Version,Accept:"text/javascript, text/html, application/xml, text/xml, */*"};if(this.method=="post"){headers["Content-type"]=this.options.contentType+(this.options.encoding?"; charset="+this.options.encoding:"");if(this.transport.overrideMimeType&&(navigator.userAgent.match(/Gecko\/(\d{4})/)||[0,2005])[1]<2005)headers["Connection"]="close"}if(typeof this.options.requestHeaders=="object"){var extras=this.options.requestHeaders;if(Object.isFunction(extras.push))for(var i=0,length=extras.length;i=200&&status<300||status==304},getStatus:function(){try{if(this.transport.status===1223)return 204;return this.transport.status||0}catch(e){return 0}},respondToReadyState:function(readyState){var state=Ajax.Request.Events[readyState],response=new Ajax.Response(this);if(state=="Complete"){try{this._complete=true;(this.options["on"+response.status]||this.options["on"+(this.success()?"Success":"Failure")]||Prototype.emptyFunction)(response,response.headerJSON)}catch(e){this.dispatchException(e)}var contentType=response.getHeader("Content-type");if(this.options.evalJS=="force"||this.options.evalJS&&this.isSameOrigin()&&contentType&&contentType.match(/^\s*(text|application)\/(x-)?(java|ecma)script(;.*)?\s*$/i))this.evalResponse()}try{(this.options["on"+state]||Prototype.emptyFunction)(response,response.headerJSON);Ajax.Responders.dispatch("on"+state,this,response,response.headerJSON)}catch(e){this.dispatchException(e)}if(state=="Complete"){this.transport.onreadystatechange=Prototype.emptyFunction}},isSameOrigin:function(){var m=this.url.match(/^\s*https?:\/\/[^\/]*/);return!m||m[0]=="#{protocol}//#{domain}#{port}".interpolate({protocol:location.protocol,domain:document.domain,port:location.port?":"+location.port:""})},getHeader:function(name){try{return this.transport.getResponseHeader(name)||null}catch(e){return null}},evalResponse:function(){try{return eval((this.transport.responseText||"").unfilterJSON())}catch(e){this.dispatchException(e)}},dispatchException:function(exception){(this.options.onException||Prototype.emptyFunction)(this,exception);Ajax.Responders.dispatch("onException",this,exception)}});Ajax.Request.Events=["Uninitialized","Loading","Loaded","Interactive","Complete"];Ajax.Response=Class.create({initialize:function(request){this.request=request;var transport=this.transport=request.transport,readyState=this.readyState=transport.readyState;if(readyState>2&&!Prototype.Browser.IE||readyState==4){this.status=this.getStatus();this.statusText=this.getStatusText();this.responseText=String.interpret(transport.responseText);this.headerJSON=this._getHeaderJSON()}if(readyState==4){var xml=transport.responseXML;this.responseXML=Object.isUndefined(xml)?null:xml;this.responseJSON=this._getResponseJSON()}},status:0,statusText:"",getStatus:Ajax.Request.prototype.getStatus,getStatusText:function(){try{return this.transport.statusText||""}catch(e){return""}},getHeader:Ajax.Request.prototype.getHeader,getAllHeaders:function(){try{return this.getAllResponseHeaders()}catch(e){return null}},getResponseHeader:function(name){return this.transport.getResponseHeader(name)},getAllResponseHeaders:function(){return this.transport.getAllResponseHeaders()},_getHeaderJSON:function(){var json=this.getHeader("X-JSON");if(!json)return null;try{json=decodeURIComponent(escape(json))}catch(e){}try{return json.evalJSON(this.request.options.sanitizeJSON||!this.request.isSameOrigin())}catch(e){this.request.dispatchException(e)}},_getResponseJSON:function(){var options=this.request.options;if(!options.evalJSON||options.evalJSON!="force"&&!(this.getHeader("Content-type")||"").include("application/json")||this.responseText.blank())return null;try{return this.responseText.evalJSON(options.sanitizeJSON||!this.request.isSameOrigin())}catch(e){this.request.dispatchException(e)}}});Ajax.Updater=Class.create(Ajax.Request,{initialize:function($super,container,url,options){this.container={success:container.success||container,failure:container.failure||(container.success?null:container)};options=Object.clone(options);var onComplete=options.onComplete;options.onComplete=function(response,json){this.updateContent(response.responseText);if(Object.isFunction(onComplete))onComplete(response,json)}.bind(this);$super(url,options)},updateContent:function(responseText){var receiver=this.container[this.success()?"success":"failure"],options=this.options;if(!options.evalScripts)responseText=responseText.stripScripts();if(receiver=$(receiver)){if(options.insertion){if(Object.isString(options.insertion)){var insertion={};insertion[options.insertion]=responseText;receiver.insert(insertion)}else options.insertion(receiver,responseText)}else receiver.update(responseText)}}});Ajax.PeriodicalUpdater=Class.create(Ajax.Base,{initialize:function($super,container,url,options){$super(options);this.onComplete=this.options.onComplete;this.frequency=this.options.frequency||2;this.decay=this.options.decay||1;this.updater={};this.container=container;this.url=url;this.start()},start:function(){this.options.onComplete=this.updateComplete.bind(this);this.onTimerEvent()},stop:function(){this.updater.options.onComplete=undefined;clearTimeout(this.timer);(this.onComplete||Prototype.emptyFunction).apply(this,arguments)},updateComplete:function(response){if(this.options.decay){this.decay=response.responseText==this.lastText?this.decay*this.options.decay:1;this.lastText=response.responseText}this.timer=this.onTimerEvent.bind(this).delay(this.decay*this.frequency)},onTimerEvent:function(){this.updater=new Ajax.Updater(this.container,this.url,this.options)}});(function(GLOBAL){var UNDEFINED;var SLICE=Array.prototype.slice;var DIV=document.createElement("div");function $(element){if(arguments.length>1){for(var i=0,elements=[],length=arguments.length;i');return el.tagName.toLowerCase()==="input"&&el.name==="x"}catch(err){return false}}();var oldElement=GLOBAL.Element;function Element(tagName,attributes){attributes=attributes||{};tagName=tagName.toLowerCase();if(HAS_EXTENDED_CREATE_ELEMENT_SYNTAX&&attributes.name){tagName="<"+tagName+' name="'+attributes.name+'">';delete attributes.name;return Element.writeAttribute(document.createElement(tagName),attributes)}if(!ELEMENT_CACHE[tagName])ELEMENT_CACHE[tagName]=Element.extend(document.createElement(tagName));var node=shouldUseCreationCache(tagName,attributes)?ELEMENT_CACHE[tagName].cloneNode(false):document.createElement(tagName);return Element.writeAttribute(node,attributes)}GLOBAL.Element=Element;Object.extend(GLOBAL.Element,oldElement||{});if(oldElement)GLOBAL.Element.prototype=oldElement.prototype;Element.Methods={ByTag:{},Simulated:{}};var methods={};var INSPECT_ATTRIBUTES={id:"id",className:"class"};function inspect(element){element=$(element);var result="<"+element.tagName.toLowerCase();var attribute,value;for(var property in INSPECT_ATTRIBUTES){attribute=INSPECT_ATTRIBUTES[property];value=(element[property]||"").toString();if(value)result+=" "+attribute+"="+value.inspect(true)}return result+">"}methods.inspect=inspect;function visible(element){return $(element).style.display!=="none"}function toggle(element,bool){element=$(element);if(Object.isUndefined(bool))bool=!Element.visible(element);Element[bool?"show":"hide"](element);return element}function hide(element){element=$(element);element.style.display="none";return element}function show(element){element=$(element);element.style.display="";return element}Object.extend(methods,{visible:visible,toggle:toggle,hide:hide,show:show});function remove(element){element=$(element);element.parentNode.removeChild(element);return element}var SELECT_ELEMENT_INNERHTML_BUGGY=function(){var el=document.createElement("select"),isBuggy=true;el.innerHTML='';if(el.options&&el.options[0]){isBuggy=el.options[0].nodeName.toUpperCase()!=="OPTION"}el=null;return isBuggy}();var TABLE_ELEMENT_INNERHTML_BUGGY=function(){try{var el=document.createElement("table");if(el&&el.tBodies){el.innerHTML="test";var isBuggy=typeof el.tBodies[0]=="undefined";el=null;return isBuggy}}catch(e){return true}}();var LINK_ELEMENT_INNERHTML_BUGGY=function(){try{var el=document.createElement("div");el.innerHTML="";var isBuggy=el.childNodes.length===0;el=null;return isBuggy}catch(e){return true}}();var ANY_INNERHTML_BUGGY=SELECT_ELEMENT_INNERHTML_BUGGY||TABLE_ELEMENT_INNERHTML_BUGGY||LINK_ELEMENT_INNERHTML_BUGGY;var SCRIPT_ELEMENT_REJECTS_TEXTNODE_APPENDING=function(){var s=document.createElement("script"),isBuggy=false;try{s.appendChild(document.createTextNode(""));isBuggy=!s.firstChild||s.firstChild&&s.firstChild.nodeType!==3}catch(e){isBuggy=true}s=null;return isBuggy}();function update(element,content){element=$(element);var descendants=element.getElementsByTagName("*"),i=descendants.length;while(i--)purgeElement(descendants[i]);if(content&&content.toElement)content=content.toElement();if(Object.isElement(content))return element.update().insert(content);content=Object.toHTML(content);var tagName=element.tagName.toUpperCase();if(tagName==="SCRIPT"&&SCRIPT_ELEMENT_REJECTS_TEXTNODE_APPENDING){element.text=content;return element}if(ANY_INNERHTML_BUGGY){if(tagName in INSERTION_TRANSLATIONS.tags){while(element.firstChild)element.removeChild(element.firstChild);var nodes=getContentFromAnonymousElement(tagName,content.stripScripts());for(var i=0,node;node=nodes[i];i++)element.appendChild(node)}else if(LINK_ELEMENT_INNERHTML_BUGGY&&Object.isString(content)&&content.indexOf("-1){while(element.firstChild)element.removeChild(element.firstChild);var nodes=getContentFromAnonymousElement(tagName,content.stripScripts(),true);for(var i=0,node;node=nodes[i];i++)element.appendChild(node)}else{element.innerHTML=content.stripScripts()}}else{element.innerHTML=content.stripScripts()}content.evalScripts.bind(content).defer();return element}function replace(element,content){element=$(element);if(content&&content.toElement){content=content.toElement()}else if(!Object.isElement(content)){content=Object.toHTML(content);var range=element.ownerDocument.createRange();range.selectNode(element);content.evalScripts.bind(content).defer();content=range.createContextualFragment(content.stripScripts())}element.parentNode.replaceChild(content,element);return element}var INSERTION_TRANSLATIONS={before:function(element,node){element.parentNode.insertBefore(node,element)},top:function(element,node){element.insertBefore(node,element.firstChild)},bottom:function(element,node){element.appendChild(node)},after:function(element,node){element.parentNode.insertBefore(node,element.nextSibling)},tags:{TABLE:["","
    ",1],TBODY:["","
    ",2],TR:["","
    ",3],TD:["
    ","
    ",4],SELECT:["",1]}};var tags=INSERTION_TRANSLATIONS.tags;Object.extend(tags,{THEAD:tags.TBODY,TFOOT:tags.TBODY,TH:tags.TD});function replace_IE(element,content){element=$(element);if(content&&content.toElement)content=content.toElement();if(Object.isElement(content)){element.parentNode.replaceChild(content,element);return element}content=Object.toHTML(content);var parent=element.parentNode,tagName=parent.tagName.toUpperCase();if(tagName in INSERTION_TRANSLATIONS.tags){var nextSibling=Element.next(element);var fragments=getContentFromAnonymousElement(tagName,content.stripScripts());parent.removeChild(element);var iterator;if(nextSibling)iterator=function(node){parent.insertBefore(node,nextSibling)};else iterator=function(node){parent.appendChild(node)};fragments.each(iterator)}else{element.outerHTML=content.stripScripts()}content.evalScripts.bind(content).defer();return element}if("outerHTML"in document.documentElement)replace=replace_IE;function isContent(content){if(Object.isUndefined(content)||content===null)return false;if(Object.isString(content)||Object.isNumber(content))return true;if(Object.isElement(content))return true;if(content.toElement||content.toHTML)return true;return false}function insertContentAt(element,content,position){position=position.toLowerCase();var method=INSERTION_TRANSLATIONS[position];if(content&&content.toElement)content=content.toElement();if(Object.isElement(content)){method(element,content);return element}content=Object.toHTML(content);var tagName=(position==="before"||position==="after"?element.parentNode:element).tagName.toUpperCase();var childNodes=getContentFromAnonymousElement(tagName,content.stripScripts());if(position==="top"||position==="after")childNodes.reverse();for(var i=0,node;node=childNodes[i];i++)method(element,node);content.evalScripts.bind(content).defer()}function insert(element,insertions){element=$(element);if(isContent(insertions))insertions={bottom:insertions};for(var position in insertions)insertContentAt(element,insertions[position],position);return element}function wrap(element,wrapper,attributes){element=$(element);if(Object.isElement(wrapper)){$(wrapper).writeAttribute(attributes||{})}else if(Object.isString(wrapper)){wrapper=new Element(wrapper,attributes)}else{wrapper=new Element("div",wrapper)}if(element.parentNode)element.parentNode.replaceChild(wrapper,element);wrapper.appendChild(element);return wrapper}function cleanWhitespace(element){element=$(element);var node=element.firstChild;while(node){var nextNode=node.nextSibling;if(node.nodeType===Node.TEXT_NODE&&!/\S/.test(node.nodeValue))element.removeChild(node);node=nextNode}return element}function empty(element){return $(element).innerHTML.blank()}function getContentFromAnonymousElement(tagName,html,force){var t=INSERTION_TRANSLATIONS.tags[tagName],div=DIV;var workaround=!!t;if(!workaround&&force){workaround=true;t=["","",0]}if(workaround){div.innerHTML=" "+t[0]+html+t[1];div.removeChild(div.firstChild);for(var i=t[2];i--;)div=div.firstChild}else{div.innerHTML=html}return $A(div.childNodes)}function clone(element,deep){if(!(element=$(element)))return;var clone=element.cloneNode(deep);if(!HAS_UNIQUE_ID_PROPERTY){clone._prototypeUID=UNDEFINED;if(deep){var descendants=Element.select(clone,"*"),i=descendants.length;while(i--)descendants[i]._prototypeUID=UNDEFINED}}return Element.extend(clone)}function purgeElement(element){var uid=getUniqueElementID(element);if(uid){Element.stopObserving(element);if(!HAS_UNIQUE_ID_PROPERTY)element._prototypeUID=UNDEFINED;delete Element.Storage[uid]}}function purgeCollection(elements){var i=elements.length;while(i--)purgeElement(elements[i])}function purgeCollection_IE(elements){var i=elements.length,element,uid;while(i--){element=elements[i];uid=getUniqueElementID(element);delete Element.Storage[uid];delete Event.cache[uid]}}if(HAS_UNIQUE_ID_PROPERTY){purgeCollection=purgeCollection_IE}function purge(element){if(!(element=$(element)))return;purgeElement(element);var descendants=element.getElementsByTagName("*"),i=descendants.length;while(i--)purgeElement(descendants[i]);return null}Object.extend(methods,{remove:remove,update:update,replace:replace,insert:insert,wrap:wrap,cleanWhitespace:cleanWhitespace,empty:empty,clone:clone,purge:purge});function recursivelyCollect(element,property,maximumLength){element=$(element);maximumLength=maximumLength||-1;var elements=[];while(element=element[property]){if(element.nodeType===Node.ELEMENT_NODE)elements.push(Element.extend(element));if(elements.length===maximumLength)break}return elements}function ancestors(element){return recursivelyCollect(element,"parentNode")}function descendants(element){return Element.select(element,"*")}function firstDescendant(element){element=$(element).firstChild;while(element&&element.nodeType!==Node.ELEMENT_NODE)element=element.nextSibling;return $(element)}function immediateDescendants(element){var results=[],child=$(element).firstChild;while(child){if(child.nodeType===Node.ELEMENT_NODE)results.push(Element.extend(child));child=child.nextSibling}return results}function previousSiblings(element){return recursivelyCollect(element,"previousSibling")}function nextSiblings(element){return recursivelyCollect(element,"nextSibling")}function siblings(element){element=$(element);var previous=previousSiblings(element),next=nextSiblings(element);return previous.reverse().concat(next)}function match(element,selector){element=$(element);if(Object.isString(selector))return Prototype.Selector.match(element,selector);return selector.match(element)}function _recursivelyFind(element,property,expression,index){element=$(element),expression=expression||0,index=index||0;if(Object.isNumber(expression)){index=expression,expression=null}while(element=element[property]){if(element.nodeType!==1)continue;if(expression&&!Prototype.Selector.match(element,expression))continue;if(--index>=0)continue;return Element.extend(element)}}function up(element,expression,index){element=$(element);if(arguments.length===1)return $(element.parentNode);return _recursivelyFind(element,"parentNode",expression,index)}function down(element,expression,index){if(arguments.length===1)return firstDescendant(element);element=$(element),expression=expression||0,index=index||0;if(Object.isNumber(expression))index=expression,expression="*";var node=Prototype.Selector.select(expression,element)[index];return Element.extend(node)}function previous(element,expression,index){return _recursivelyFind(element,"previousSibling",expression,index)}function next(element,expression,index){return _recursivelyFind(element,"nextSibling",expression,index)}function select(element){element=$(element);var expressions=SLICE.call(arguments,1).join(", ");return Prototype.Selector.select(expressions,element)}function adjacent(element){element=$(element);var expressions=SLICE.call(arguments,1).join(", ");var siblings=Element.siblings(element),results=[];for(var i=0,sibling;sibling=siblings[i];i++){if(Prototype.Selector.match(sibling,expressions))results.push(sibling)}return results}function descendantOf_DOM(element,ancestor){element=$(element),ancestor=$(ancestor);while(element=element.parentNode)if(element===ancestor)return true;return false}function descendantOf_contains(element,ancestor){element=$(element),ancestor=$(ancestor);if(!ancestor.contains)return descendantOf_DOM(element,ancestor);return ancestor.contains(element)&&ancestor!==element}function descendantOf_compareDocumentPosition(element,ancestor){element=$(element),ancestor=$(ancestor);return(element.compareDocumentPosition(ancestor)&8)===8}var descendantOf;if(DIV.compareDocumentPosition){descendantOf=descendantOf_compareDocumentPosition}else if(DIV.contains){descendantOf=descendantOf_contains}else{descendantOf=descendantOf_DOM}Object.extend(methods,{recursivelyCollect:recursivelyCollect,ancestors:ancestors,descendants:descendants,firstDescendant:firstDescendant,immediateDescendants:immediateDescendants,previousSiblings:previousSiblings,nextSiblings:nextSiblings,siblings:siblings,match:match,up:up,down:down,previous:previous,next:next,select:select,adjacent:adjacent,descendantOf:descendantOf,getElementsBySelector:select,childElements:immediateDescendants});var idCounter=1;function identify(element){element=$(element);var id=Element.readAttribute(element,"id");if(id)return id;do{id="anonymous_element_"+idCounter++}while($(id));Element.writeAttribute(element,"id",id);return id}function readAttribute(element,name){return $(element).getAttribute(name)}function readAttribute_IE(element,name){element=$(element);var table=ATTRIBUTE_TRANSLATIONS.read;if(table.values[name])return table.values[name](element,name);if(table.names[name])name=table.names[name];if(name.include(":")){if(!element.attributes||!element.attributes[name])return null;return element.attributes[name].value}return element.getAttribute(name)}function readAttribute_Opera(element,name){if(name==="title")return element.title;return element.getAttribute(name)}var PROBLEMATIC_ATTRIBUTE_READING=function(){DIV.setAttribute("onclick",[]);var value=DIV.getAttribute("onclick");var isFunction=Object.isArray(value);DIV.removeAttribute("onclick");return isFunction}();if(PROBLEMATIC_ATTRIBUTE_READING){readAttribute=readAttribute_IE}else if(Prototype.Browser.Opera){readAttribute=readAttribute_Opera}function writeAttribute(element,name,value){element=$(element);var attributes={},table=ATTRIBUTE_TRANSLATIONS.write; +Math.toRadians = function(angleInDegrees){ + return angleInDegrees * (Math.PI/180) +} -if(typeof name==="object"){attributes=name}else{attributes[name]=Object.isUndefined(value)?true:value}for(var attr in attributes){name=table.names[attr]||attr;value=attributes[attr];if(table.values[attr])name=table.values[attr](element,value)||name;if(value===false||value===null)element.removeAttribute(name);else if(value===true)element.setAttribute(name,name);else element.setAttribute(name,value)}return element}var PROBLEMATIC_HAS_ATTRIBUTE_WITH_CHECKBOXES=function(){if(!HAS_EXTENDED_CREATE_ELEMENT_SYNTAX){return false}var checkbox=document.createElement('');checkbox.checked=true;var node=checkbox.getAttributeNode("checked");return!node||!node.specified}();function hasAttribute(element,attribute){attribute=ATTRIBUTE_TRANSLATIONS.has[attribute]||attribute;var node=$(element).getAttributeNode(attribute);return!!(node&&node.specified)}function hasAttribute_IE(element,attribute){if(attribute==="checked"){return element.checked}return hasAttribute(element,attribute)}GLOBAL.Element.Methods.Simulated.hasAttribute=PROBLEMATIC_HAS_ATTRIBUTE_WITH_CHECKBOXES?hasAttribute_IE:hasAttribute;function classNames(element){return new Element.ClassNames(element)}var regExpCache={};function getRegExpForClassName(className){if(regExpCache[className])return regExpCache[className];var re=new RegExp("(^|\\s+)"+className+"(\\s+|$)");regExpCache[className]=re;return re}function hasClassName(element,className){if(!(element=$(element)))return;var elementClassName=element.className;if(elementClassName.length===0)return false;if(elementClassName===className)return true;return getRegExpForClassName(className).test(elementClassName)}function addClassName(element,className){if(!(element=$(element)))return;if(!hasClassName(element,className))element.className+=(element.className?" ":"")+className;return element}function removeClassName(element,className){if(!(element=$(element)))return;element.className=element.className.replace(getRegExpForClassName(className)," ").strip();return element}function toggleClassName(element,className,bool){if(!(element=$(element)))return;if(Object.isUndefined(bool))bool=!hasClassName(element,className);var method=Element[bool?"addClassName":"removeClassName"];return method(element,className)}var ATTRIBUTE_TRANSLATIONS={};var classProp="className",forProp="for";DIV.setAttribute(classProp,"x");if(DIV.className!=="x"){DIV.setAttribute("class","x");if(DIV.className==="x")classProp="class"}var LABEL=document.createElement("label");LABEL.setAttribute(forProp,"x");if(LABEL.htmlFor!=="x"){LABEL.setAttribute("htmlFor","x");if(LABEL.htmlFor==="x")forProp="htmlFor"}LABEL=null;function _getAttr(element,attribute){return element.getAttribute(attribute)}function _getAttr2(element,attribute){return element.getAttribute(attribute,2)}function _getAttrNode(element,attribute){var node=element.getAttributeNode(attribute);return node?node.value:""}function _getFlag(element,attribute){return $(element).hasAttribute(attribute)?attribute:null}DIV.onclick=Prototype.emptyFunction;var onclickValue=DIV.getAttribute("onclick");var _getEv;if(String(onclickValue).indexOf("{")>-1){_getEv=function(element,attribute){var value=element.getAttribute(attribute);if(!value)return null;value=value.toString();value=value.split("{")[1];value=value.split("}")[0];return value.strip()}}else if(onclickValue===""){_getEv=function(element,attribute){var value=element.getAttribute(attribute);if(!value)return null;return value.strip()}}ATTRIBUTE_TRANSLATIONS.read={names:{class:classProp,className:classProp,for:forProp,htmlFor:forProp},values:{style:function(element){return element.style.cssText.toLowerCase()},title:function(element){return element.title}}};ATTRIBUTE_TRANSLATIONS.write={names:{className:"class",htmlFor:"for",cellpadding:"cellPadding",cellspacing:"cellSpacing"},values:{checked:function(element,value){element.checked=!!value},style:function(element,value){element.style.cssText=value?value:""}}};ATTRIBUTE_TRANSLATIONS.has={names:{}};Object.extend(ATTRIBUTE_TRANSLATIONS.write.names,ATTRIBUTE_TRANSLATIONS.read.names);var CAMEL_CASED_ATTRIBUTE_NAMES=$w("colSpan rowSpan vAlign dateTime "+"accessKey tabIndex encType maxLength readOnly longDesc frameBorder");for(var i=0,attr;attr=CAMEL_CASED_ATTRIBUTE_NAMES[i];i++){ATTRIBUTE_TRANSLATIONS.write.names[attr.toLowerCase()]=attr;ATTRIBUTE_TRANSLATIONS.has.names[attr.toLowerCase()]=attr}Object.extend(ATTRIBUTE_TRANSLATIONS.read.values,{href:_getAttr2,src:_getAttr2,type:_getAttr,action:_getAttrNode,disabled:_getFlag,checked:_getFlag,readonly:_getFlag,multiple:_getFlag,onload:_getEv,onunload:_getEv,onclick:_getEv,ondblclick:_getEv,onmousedown:_getEv,onmouseup:_getEv,onmouseover:_getEv,onmousemove:_getEv,onmouseout:_getEv,onfocus:_getEv,onblur:_getEv,onkeypress:_getEv,onkeydown:_getEv,onkeyup:_getEv,onsubmit:_getEv,onreset:_getEv,onselect:_getEv,onchange:_getEv});Object.extend(methods,{identify:identify,readAttribute:readAttribute,writeAttribute:writeAttribute,classNames:classNames,hasClassName:hasClassName,addClassName:addClassName,removeClassName:removeClassName,toggleClassName:toggleClassName});function normalizeStyleName(style){if(style==="float"||style==="styleFloat")return"cssFloat";return style.camelize()}function normalizeStyleName_IE(style){if(style==="float"||style==="cssFloat")return"styleFloat";return style.camelize()}function setStyle(element,styles){element=$(element);var elementStyle=element.style,match;if(Object.isString(styles)){elementStyle.cssText+=";"+styles;if(styles.include("opacity")){var opacity=styles.match(/opacity:\s*(\d?\.?\d*)/)[1];Element.setOpacity(element,opacity)}return element}for(var property in styles){if(property==="opacity"){Element.setOpacity(element,styles[property])}else{var value=styles[property];if(property==="float"||property==="cssFloat"){property=Object.isUndefined(elementStyle.styleFloat)?"cssFloat":"styleFloat"}elementStyle[property]=value}}return element}function getStyle(element,style){element=$(element);style=normalizeStyleName(style);var value=element.style[style];if(!value||value==="auto"){var css=document.defaultView.getComputedStyle(element,null);value=css?css[style]:null}if(style==="opacity")return value?parseFloat(value):1;return value==="auto"?null:value}function getStyle_Opera(element,style){switch(style){case"height":case"width":if(!Element.visible(element))return null;var dim=parseInt(getStyle(element,style),10);if(dim!==element["offset"+style.capitalize()])return dim+"px";return Element.measure(element,style);default:return getStyle(element,style)}}function getStyle_IE(element,style){element=$(element);style=normalizeStyleName_IE(style);var value=element.style[style];if(!value&&element.currentStyle){value=element.currentStyle[style]}if(style==="opacity"&&!STANDARD_CSS_OPACITY_SUPPORTED)return getOpacity_IE(element);if(value==="auto"){if((style==="width"||style==="height")&&Element.visible(element))return Element.measure(element,style)+"px";return null}return value}function stripAlphaFromFilter_IE(filter){return(filter||"").replace(/alpha\([^\)]*\)/gi,"")}function hasLayout_IE(element){if(!element.currentStyle||!element.currentStyle.hasLayout)element.style.zoom=1;return element}var STANDARD_CSS_OPACITY_SUPPORTED=function(){DIV.style.cssText="opacity:.55";return/^0.55/.test(DIV.style.opacity)}();function setOpacity(element,value){element=$(element);if(value==1||value==="")value="";else if(value<1e-5)value=0;element.style.opacity=value;return element}function setOpacity_IE(element,value){if(STANDARD_CSS_OPACITY_SUPPORTED)return setOpacity(element,value);element=hasLayout_IE($(element));var filter=Element.getStyle(element,"filter"),style=element.style;if(value==1||value===""){filter=stripAlphaFromFilter_IE(filter);if(filter)style.filter=filter;else style.removeAttribute("filter");return element}if(value<1e-5)value=0;style.filter=stripAlphaFromFilter_IE(filter)+"alpha(opacity="+value*100+")";return element}function getOpacity(element){return Element.getStyle(element,"opacity")}function getOpacity_IE(element){if(STANDARD_CSS_OPACITY_SUPPORTED)return getOpacity(element);var filter=Element.getStyle(element,"filter");if(filter.length===0)return 1;var match=(filter||"").match(/alpha\(opacity=(.*)\)/);if(match&&match[1])return parseFloat(match[1])/100;return 1}Object.extend(methods,{setStyle:setStyle,getStyle:getStyle,setOpacity:setOpacity,getOpacity:getOpacity});if("styleFloat"in DIV.style){methods.getStyle=getStyle_IE;methods.setOpacity=setOpacity_IE;methods.getOpacity=getOpacity_IE}var UID=0;GLOBAL.Element.Storage={UID:1};function getUniqueElementID(element){if(element===window)return 0;if(typeof element._prototypeUID==="undefined")element._prototypeUID=Element.Storage.UID++;return element._prototypeUID}function getUniqueElementID_IE(element){if(element===window)return 0;if(element==document)return 1;return element.uniqueID}var HAS_UNIQUE_ID_PROPERTY="uniqueID"in DIV;if(HAS_UNIQUE_ID_PROPERTY)getUniqueElementID=getUniqueElementID_IE;function getStorage(element){if(!(element=$(element)))return;var uid=getUniqueElementID(element);if(!Element.Storage[uid])Element.Storage[uid]=$H();return Element.Storage[uid]}function store(element,key,value){if(!(element=$(element)))return;var storage=getStorage(element);if(arguments.length===2){storage.update(key)}else{storage.set(key,value)}return element}function retrieve(element,key,defaultValue){if(!(element=$(element)))return;var storage=getStorage(element),value=storage.get(key);if(Object.isUndefined(value)){storage.set(key,defaultValue);value=defaultValue}return value}Object.extend(methods,{getStorage:getStorage,store:store,retrieve:retrieve});var Methods={},ByTag=Element.Methods.ByTag,F=Prototype.BrowserFeatures;if(!F.ElementExtensions&&"__proto__"in DIV){GLOBAL.HTMLElement={};GLOBAL.HTMLElement.prototype=DIV["__proto__"];F.ElementExtensions=true}function checkElementPrototypeDeficiency(tagName){if(typeof window.Element==="undefined")return false;if(!HAS_EXTENDED_CREATE_ELEMENT_SYNTAX)return false;var proto=window.Element.prototype;if(proto){var id="_"+(Math.random()+"").slice(2),el=document.createElement(tagName);proto[id]="x";var isBuggy=el[id]!=="x";delete proto[id];el=null;return isBuggy}return false}var HTMLOBJECTELEMENT_PROTOTYPE_BUGGY=checkElementPrototypeDeficiency("object");function extendElementWith(element,methods){for(var property in methods){var value=methods[property];if(Object.isFunction(value)&&!(property in element))element[property]=value.methodize()}}var EXTENDED={};function elementIsExtended(element){var uid=getUniqueElementID(element);return uid in EXTENDED}function extend(element){if(!element||elementIsExtended(element))return element;if(element.nodeType!==Node.ELEMENT_NODE||element==window)return element;var methods=Object.clone(Methods),tagName=element.tagName.toUpperCase();if(ByTag[tagName])Object.extend(methods,ByTag[tagName]);extendElementWith(element,methods);EXTENDED[getUniqueElementID(element)]=true;return element}function extend_IE8(element){if(!element||elementIsExtended(element))return element;var t=element.tagName;if(t&&/^(?:object|applet|embed)$/i.test(t)){extendElementWith(element,Element.Methods);extendElementWith(element,Element.Methods.Simulated);extendElementWith(element,Element.Methods.ByTag[t.toUpperCase()])}return element}if(F.SpecificElementExtensions){extend=HTMLOBJECTELEMENT_PROTOTYPE_BUGGY?extend_IE8:Prototype.K}function addMethodsToTagName(tagName,methods){tagName=tagName.toUpperCase();if(!ByTag[tagName])ByTag[tagName]={};Object.extend(ByTag[tagName],methods)}function mergeMethods(destination,methods,onlyIfAbsent){if(Object.isUndefined(onlyIfAbsent))onlyIfAbsent=false;for(var property in methods){var value=methods[property];if(!Object.isFunction(value))continue;if(!onlyIfAbsent||!(property in destination))destination[property]=value.methodize()}}function findDOMClass(tagName){var klass;var trans={OPTGROUP:"OptGroup",TEXTAREA:"TextArea",P:"Paragraph",FIELDSET:"FieldSet",UL:"UList",OL:"OList",DL:"DList",DIR:"Directory",H1:"Heading",H2:"Heading",H3:"Heading",H4:"Heading",H5:"Heading",H6:"Heading",Q:"Quote",INS:"Mod",DEL:"Mod",A:"Anchor",IMG:"Image",CAPTION:"TableCaption",COL:"TableCol",COLGROUP:"TableCol",THEAD:"TableSection",TFOOT:"TableSection",TBODY:"TableSection",TR:"TableRow",TH:"TableCell",TD:"TableCell",FRAMESET:"FrameSet",IFRAME:"IFrame"};if(trans[tagName])klass="HTML"+trans[tagName]+"Element";if(window[klass])return window[klass];klass="HTML"+tagName+"Element";if(window[klass])return window[klass];klass="HTML"+tagName.capitalize()+"Element";if(window[klass])return window[klass];var element=document.createElement(tagName),proto=element["__proto__"]||element.constructor.prototype;element=null;return proto}function addMethods(methods){if(arguments.length===0)addFormMethods();if(arguments.length===2){var tagName=methods;methods=arguments[1]}if(!tagName){Object.extend(Element.Methods,methods||{})}else{if(Object.isArray(tagName)){for(var i=0,tag;tag=tagName[i];i++)addMethodsToTagName(tag,methods)}else{addMethodsToTagName(tagName,methods)}}var ELEMENT_PROTOTYPE=window.HTMLElement?HTMLElement.prototype:Element.prototype;if(F.ElementExtensions){mergeMethods(ELEMENT_PROTOTYPE,Element.Methods);mergeMethods(ELEMENT_PROTOTYPE,Element.Methods.Simulated,true)}if(F.SpecificElementExtensions){for(var tag in Element.Methods.ByTag){var klass=findDOMClass(tag);if(Object.isUndefined(klass))continue;mergeMethods(klass.prototype,ByTag[tag])}}Object.extend(Element,Element.Methods);Object.extend(Element,Element.Methods.Simulated);delete Element.ByTag;delete Element.Simulated;Element.extend.refresh();ELEMENT_CACHE={}}Object.extend(GLOBAL.Element,{extend:extend,addMethods:addMethods});if(extend===Prototype.K){GLOBAL.Element.extend.refresh=Prototype.emptyFunction}else{GLOBAL.Element.extend.refresh=function(){if(Prototype.BrowserFeatures.ElementExtensions)return;Object.extend(Methods,Element.Methods);Object.extend(Methods,Element.Methods.Simulated);EXTENDED={}}}function addFormMethods(){Object.extend(Form,Form.Methods);Object.extend(Form.Element,Form.Element.Methods);Object.extend(Element.Methods.ByTag,{FORM:Object.clone(Form.Methods),INPUT:Object.clone(Form.Element.Methods),SELECT:Object.clone(Form.Element.Methods),TEXTAREA:Object.clone(Form.Element.Methods),BUTTON:Object.clone(Form.Element.Methods)})}Element.addMethods(methods);function destroyCache_IE(){DIV=null;ELEMENT_CACHE=null}if(window.attachEvent)window.attachEvent("onunload",destroyCache_IE)})(this);(function(){function toDecimal(pctString){var match=pctString.match(/^(\d+)%?$/i);if(!match)return null;return Number(match[1])/100}function getRawStyle(element,style){element=$(element);var value=element.style[style];if(!value||value==="auto"){var css=document.defaultView.getComputedStyle(element,null);value=css?css[style]:null}if(style==="opacity")return value?parseFloat(value):1;return value==="auto"?null:value}function getRawStyle_IE(element,style){var value=element.style[style];if(!value&&element.currentStyle){value=element.currentStyle[style]}return value}function getContentWidth(element,context){var boxWidth=element.offsetWidth;var bl=getPixelValue(element,"borderLeftWidth",context)||0;var br=getPixelValue(element,"borderRightWidth",context)||0;var pl=getPixelValue(element,"paddingLeft",context)||0;var pr=getPixelValue(element,"paddingRight",context)||0;return boxWidth-bl-br-pl-pr}if("currentStyle"in document.documentElement){getRawStyle=getRawStyle_IE}function getPixelValue(value,property,context){var element=null;if(Object.isElement(value)){element=value;value=getRawStyle(element,property)}if(value===null||Object.isUndefined(value)){return null}if(/^(?:-)?\d+(\.\d+)?(px)?$/i.test(value)){return window.parseFloat(value)}var isPercentage=value.include("%"),isViewport=context===document.viewport;if(/\d/.test(value)&&element&&element.runtimeStyle&&!(isPercentage&&isViewport)){var style=element.style.left,rStyle=element.runtimeStyle.left;element.runtimeStyle.left=element.currentStyle.left;element.style.left=value||0;value=element.style.pixelLeft;element.style.left=style;element.runtimeStyle.left=rStyle;return value}if(element&&isPercentage){context=context||element.parentNode;var decimal=toDecimal(value),whole=null;var isHorizontal=property.include("left")||property.include("right")||property.include("width");var isVertical=property.include("top")||property.include("bottom")||property.include("height");if(context===document.viewport){if(isHorizontal){whole=document.viewport.getWidth()}else if(isVertical){whole=document.viewport.getHeight()}}else{if(isHorizontal){whole=$(context).measure("width")}else if(isVertical){whole=$(context).measure("height")}}return whole===null?0:whole*decimal}return 0}function toCSSPixels(number){if(Object.isString(number)&&number.endsWith("px"))return number;return number+"px"}function isDisplayed(element){while(element&&element.parentNode){var display=element.getStyle("display");if(display==="none"){return false}element=$(element.parentNode)}return true}var hasLayout=Prototype.K;if("currentStyle"in document.documentElement){hasLayout=function(element){if(!element.currentStyle.hasLayout){element.style.zoom=1}return element}}function cssNameFor(key){if(key.include("border"))key=key+"-width";return key.camelize()}Element.Layout=Class.create(Hash,{initialize:function($super,element,preCompute){$super();this.element=$(element);Element.Layout.PROPERTIES.each(function(property){this._set(property,null)},this);if(preCompute){this._preComputing=true;this._begin();Element.Layout.PROPERTIES.each(this._compute,this);this._end();this._preComputing=false}},_set:function(property,value){return Hash.prototype.set.call(this,property,value)},set:function(property,value){throw"Properties of Element.Layout are read-only."},get:function($super,property){var value=$super(property);return value===null?this._compute(property):value},_begin:function(){if(this._isPrepared())return;var element=this.element;if(isDisplayed(element)){this._setPrepared(true);return}var originalStyles={position:element.style.position||"",width:element.style.width||"",visibility:element.style.visibility||"",display:element.style.display||""};element.store("prototype_original_styles",originalStyles);var position=getRawStyle(element,"position"),width=element.offsetWidth;if(width===0||width===null){element.style.display="block";width=element.offsetWidth}var context=position==="fixed"?document.viewport:element.parentNode;var tempStyles={visibility:"hidden",display:"block"};if(position!=="fixed")tempStyles.position="absolute";element.setStyle(tempStyles);var positionedWidth=element.offsetWidth,newWidth;if(width&&positionedWidth===width){newWidth=getContentWidth(element,context)}else if(position==="absolute"||position==="fixed"){newWidth=getContentWidth(element,context)}else{var parent=element.parentNode,pLayout=$(parent).getLayout();newWidth=pLayout.get("width")-this.get("margin-left")-this.get("border-left")-this.get("padding-left")-this.get("padding-right")-this.get("border-right")-this.get("margin-right")}element.setStyle({width:newWidth+"px"});this._setPrepared(true)},_end:function(){var element=this.element;var originalStyles=element.retrieve("prototype_original_styles");element.store("prototype_original_styles",null);element.setStyle(originalStyles);this._setPrepared(false)},_compute:function(property){var COMPUTATIONS=Element.Layout.COMPUTATIONS;if(!(property in COMPUTATIONS)){throw"Property not found."}return this._set(property,COMPUTATIONS[property].call(this,this.element))},_isPrepared:function(){return this.element.retrieve("prototype_element_layout_prepared",false)},_setPrepared:function(bool){return this.element.store("prototype_element_layout_prepared",bool)},toObject:function(){var args=$A(arguments);var keys=args.length===0?Element.Layout.PROPERTIES:args.join(" ").split(" ");var obj={};keys.each(function(key){if(!Element.Layout.PROPERTIES.include(key))return;var value=this.get(key);if(value!=null)obj[key]=value},this);return obj},toHash:function(){var obj=this.toObject.apply(this,arguments);return new Hash(obj)},toCSS:function(){var args=$A(arguments);var keys=args.length===0?Element.Layout.PROPERTIES:args.join(" ").split(" ");var css={};keys.each(function(key){if(!Element.Layout.PROPERTIES.include(key))return;if(Element.Layout.COMPOSITE_PROPERTIES.include(key))return;var value=this.get(key);if(value!=null)css[cssNameFor(key)]=value+"px"},this);return css},inspect:function(){return"#"}});Object.extend(Element.Layout,{PROPERTIES:$w("height width top left right bottom border-left border-right border-top border-bottom padding-left padding-right padding-top padding-bottom margin-top margin-bottom margin-left margin-right padding-box-width padding-box-height border-box-width border-box-height margin-box-width margin-box-height"),COMPOSITE_PROPERTIES:$w("padding-box-width padding-box-height margin-box-width margin-box-height border-box-width border-box-height"),COMPUTATIONS:{height:function(element){if(!this._preComputing)this._begin();var bHeight=this.get("border-box-height");if(bHeight<=0){if(!this._preComputing)this._end();return 0}var bTop=this.get("border-top"),bBottom=this.get("border-bottom");var pTop=this.get("padding-top"),pBottom=this.get("padding-bottom");if(!this._preComputing)this._end();return bHeight-bTop-bBottom-pTop-pBottom},width:function(element){if(!this._preComputing)this._begin();var bWidth=this.get("border-box-width");if(bWidth<=0){if(!this._preComputing)this._end();return 0}var bLeft=this.get("border-left"),bRight=this.get("border-right");var pLeft=this.get("padding-left"),pRight=this.get("padding-right");if(!this._preComputing)this._end();return bWidth-bLeft-bRight-pLeft-pRight},"padding-box-height":function(element){var height=this.get("height"),pTop=this.get("padding-top"),pBottom=this.get("padding-bottom");return height+pTop+pBottom},"padding-box-width":function(element){var width=this.get("width"),pLeft=this.get("padding-left"),pRight=this.get("padding-right");return width+pLeft+pRight},"border-box-height":function(element){if(!this._preComputing)this._begin();var height=element.offsetHeight;if(!this._preComputing)this._end();return height},"border-box-width":function(element){if(!this._preComputing)this._begin();var width=element.offsetWidth;if(!this._preComputing)this._end();return width},"margin-box-height":function(element){var bHeight=this.get("border-box-height"),mTop=this.get("margin-top"),mBottom=this.get("margin-bottom");if(bHeight<=0)return 0;return bHeight+mTop+mBottom},"margin-box-width":function(element){var bWidth=this.get("border-box-width"),mLeft=this.get("margin-left"),mRight=this.get("margin-right");if(bWidth<=0)return 0;return bWidth+mLeft+mRight},top:function(element){var offset=element.positionedOffset();return offset.top},bottom:function(element){var offset=element.positionedOffset(),parent=element.getOffsetParent(),pHeight=parent.measure("height");var mHeight=this.get("border-box-height");return pHeight-mHeight-offset.top},left:function(element){var offset=element.positionedOffset();return offset.left},right:function(element){var offset=element.positionedOffset(),parent=element.getOffsetParent(),pWidth=parent.measure("width");var mWidth=this.get("border-box-width");return pWidth-mWidth-offset.left},"padding-top":function(element){return getPixelValue(element,"paddingTop")},"padding-bottom":function(element){return getPixelValue(element,"paddingBottom")},"padding-left":function(element){return getPixelValue(element,"paddingLeft")},"padding-right":function(element){return getPixelValue(element,"paddingRight")},"border-top":function(element){return getPixelValue(element,"borderTopWidth")},"border-bottom":function(element){return getPixelValue(element,"borderBottomWidth")},"border-left":function(element){return getPixelValue(element,"borderLeftWidth")},"border-right":function(element){return getPixelValue(element,"borderRightWidth")},"margin-top":function(element){return getPixelValue(element,"marginTop")},"margin-bottom":function(element){return getPixelValue(element,"marginBottom")},"margin-left":function(element){return getPixelValue(element,"marginLeft")},"margin-right":function(element){return getPixelValue(element,"marginRight")}}});if("getBoundingClientRect"in document.documentElement){Object.extend(Element.Layout.COMPUTATIONS,{right:function(element){var parent=hasLayout(element.getOffsetParent());var rect=element.getBoundingClientRect(),pRect=parent.getBoundingClientRect();return(pRect.right-rect.right).round()},bottom:function(element){var parent=hasLayout(element.getOffsetParent());var rect=element.getBoundingClientRect(),pRect=parent.getBoundingClientRect();return(pRect.bottom-rect.bottom).round()}})}Element.Offset=Class.create({initialize:function(left,top){this.left=left.round();this.top=top.round();this[0]=this.left;this[1]=this.top},relativeTo:function(offset){return new Element.Offset(this.left-offset.left,this.top-offset.top)},inspect:function(){return"#".interpolate(this)},toString:function(){return"[#{left}, #{top}]".interpolate(this)},toArray:function(){return[this.left,this.top]}});function getLayout(element,preCompute){return new Element.Layout(element,preCompute)}function measure(element,property){return $(element).getLayout().get(property)}function getHeight(element){return Element.getDimensions(element).height}function getWidth(element){return Element.getDimensions(element).width}function getDimensions(element){element=$(element);var display=Element.getStyle(element,"display");if(display&&display!=="none"){return{width:element.offsetWidth,height:element.offsetHeight}}var style=element.style;var originalStyles={visibility:style.visibility,position:style.position,display:style.display};var newStyles={visibility:"hidden",display:"block"};if(originalStyles.position!=="fixed")newStyles.position="absolute";Element.setStyle(element,newStyles);var dimensions={width:element.offsetWidth,height:element.offsetHeight};Element.setStyle(element,originalStyles);return dimensions}function getOffsetParent(element){element=$(element);if(isDocument(element)||isDetached(element)||isBody(element)||isHtml(element))return $(document.body);var isInline=Element.getStyle(element,"display")==="inline";if(!isInline&&element.offsetParent)return $(element.offsetParent);while((element=element.parentNode)&&element!==document.body){if(Element.getStyle(element,"position")!=="static"){return isHtml(element)?$(document.body):$(element)}}return $(document.body)}function cumulativeOffset(element){element=$(element);var valueT=0,valueL=0;if(element.parentNode){do{valueT+=element.offsetTop||0;valueL+=element.offsetLeft||0;element=element.offsetParent}while(element)}return new Element.Offset(valueL,valueT)}function positionedOffset(element){element=$(element);var layout=element.getLayout();var valueT=0,valueL=0;do{valueT+=element.offsetTop||0;valueL+=element.offsetLeft||0;element=element.offsetParent;if(element){if(isBody(element))break;var p=Element.getStyle(element,"position");if(p!=="static")break}}while(element);valueL-=layout.get("margin-top");valueT-=layout.get("margin-left");return new Element.Offset(valueL,valueT)}function cumulativeScrollOffset(element){var valueT=0,valueL=0;do{if(element===document.body){var bodyScrollNode=document.documentElement||document.body.parentNode||document.body;valueT+=!Object.isUndefined(window.pageYOffset)?window.pageYOffset:bodyScrollNode.scrollTop||0;valueL+=!Object.isUndefined(window.pageXOffset)?window.pageXOffset:bodyScrollNode.scrollLeft||0;break}else{valueT+=element.scrollTop||0;valueL+=element.scrollLeft||0;element=element.parentNode}}while(element);return new Element.Offset(valueL,valueT)}function viewportOffset(forElement){var valueT=0,valueL=0,docBody=document.body;forElement=$(forElement);var element=forElement;do{valueT+=element.offsetTop||0;valueL+=element.offsetLeft||0;if(element.offsetParent==docBody&&Element.getStyle(element,"position")=="absolute")break}while(element=element.offsetParent);element=forElement;do{if(element!=docBody){valueT-=element.scrollTop||0;valueL-=element.scrollLeft||0}}while(element=element.parentNode);return new Element.Offset(valueL,valueT)}function absolutize(element){element=$(element);if(Element.getStyle(element,"position")==="absolute"){return element}var offsetParent=getOffsetParent(element);var eOffset=element.viewportOffset(),pOffset=offsetParent.viewportOffset();var offset=eOffset.relativeTo(pOffset);var layout=element.getLayout();element.store("prototype_absolutize_original_styles",{position:element.getStyle("position"),left:element.getStyle("left"),top:element.getStyle("top"),width:element.getStyle("width"),height:element.getStyle("height")});element.setStyle({position:"absolute",top:offset.top+"px",left:offset.left+"px",width:layout.get("width")+"px",height:layout.get("height")+"px"});return element}function relativize(element){element=$(element);if(Element.getStyle(element,"position")==="relative"){return element}var originalStyles=element.retrieve("prototype_absolutize_original_styles");if(originalStyles)element.setStyle(originalStyles);return element}function scrollTo(element){element=$(element);var pos=Element.cumulativeOffset(element);window.scrollTo(pos.left,pos.top);return element}function makePositioned(element){element=$(element);var position=Element.getStyle(element,"position"),styles={};if(position==="static"||!position){styles.position="relative";if(Prototype.Browser.Opera){styles.top=0;styles.left=0}Element.setStyle(element,styles);Element.store(element,"prototype_made_positioned",true)}return element}function undoPositioned(element){element=$(element);var storage=Element.getStorage(element),madePositioned=storage.get("prototype_made_positioned");if(madePositioned){storage.unset("prototype_made_positioned");Element.setStyle(element,{position:"",top:"",bottom:"",left:"",right:""})}return element}function makeClipping(element){element=$(element);var storage=Element.getStorage(element),madeClipping=storage.get("prototype_made_clipping");if(Object.isUndefined(madeClipping)){var overflow=Element.getStyle(element,"overflow");storage.set("prototype_made_clipping",overflow);if(overflow!=="hidden")element.style.overflow="hidden"}return element}function undoClipping(element){element=$(element);var storage=Element.getStorage(element),overflow=storage.get("prototype_made_clipping");if(!Object.isUndefined(overflow)){storage.unset("prototype_made_clipping");element.style.overflow=overflow||""}return element}function clonePosition(element,source,options){options=Object.extend({setLeft:true,setTop:true,setWidth:true,setHeight:true,offsetTop:0,offsetLeft:0},options||{});source=$(source);element=$(element);var p,delta,layout,styles={};if(options.setLeft||options.setTop){p=Element.viewportOffset(source);delta=[0,0];if(Element.getStyle(element,"position")==="absolute"){var parent=Element.getOffsetParent(element);if(parent!==document.body)delta=Element.viewportOffset(parent)}}if(options.setWidth||options.setHeight){layout=Element.getLayout(source)}if(options.setLeft)styles.left=p[0]-delta[0]+options.offsetLeft+"px";if(options.setTop)styles.top=p[1]-delta[1]+options.offsetTop+"px";if(options.setWidth)styles.width=layout.get("border-box-width")+"px";if(options.setHeight)styles.height=layout.get("border-box-height")+"px";return Element.setStyle(element,styles)}if(Prototype.Browser.IE){getOffsetParent=getOffsetParent.wrap(function(proceed,element){element=$(element);if(isDocument(element)||isDetached(element)||isBody(element)||isHtml(element))return $(document.body);var position=element.getStyle("position");if(position!=="static")return proceed(element);element.setStyle({position:"relative"});var value=proceed(element);element.setStyle({position:position});return value});positionedOffset=positionedOffset.wrap(function(proceed,element){element=$(element);if(!element.parentNode)return new Element.Offset(0,0);var position=element.getStyle("position"); +Math.crossProduct = function(x, y){ + [ + x[1]*y[2]-x[2]*y[1], + x[2]*y[0]-x[0]*y[2], + x[0]*y[1]-x[1]*y[0] + ] +} -if(position!=="static")return proceed(element);var offsetParent=element.getOffsetParent();if(offsetParent&&offsetParent.getStyle("position")==="fixed")hasLayout(offsetParent);element.setStyle({position:"relative"});var value=proceed(element);element.setStyle({position:position});return value})}else if(Prototype.Browser.Webkit){cumulativeOffset=function(element){element=$(element);var valueT=0,valueL=0;do{valueT+=element.offsetTop||0;valueL+=element.offsetLeft||0;if(element.offsetParent==document.body){if(Element.getStyle(element,"position")=="absolute")break}element=element.offsetParent}while(element);return new Element.Offset(valueL,valueT)}}Element.addMethods({getLayout:getLayout,measure:measure,getWidth:getWidth,getHeight:getHeight,getDimensions:getDimensions,getOffsetParent:getOffsetParent,cumulativeOffset:cumulativeOffset,positionedOffset:positionedOffset,cumulativeScrollOffset:cumulativeScrollOffset,viewportOffset:viewportOffset,absolutize:absolutize,relativize:relativize,scrollTo:scrollTo,makePositioned:makePositioned,undoPositioned:undoPositioned,makeClipping:makeClipping,undoClipping:undoClipping,clonePosition:clonePosition});function isBody(element){return element.nodeName.toUpperCase()==="BODY"}function isHtml(element){return element.nodeName.toUpperCase()==="HTML"}function isDocument(element){return element.nodeType===Node.DOCUMENT_NODE}function isDetached(element){return element!==document.body&&!Element.descendantOf(element,document.body)}if("getBoundingClientRect"in document.documentElement){Element.addMethods({viewportOffset:function(element){element=$(element);if(isDetached(element))return new Element.Offset(0,0);var rect=element.getBoundingClientRect(),docEl=document.documentElement;return new Element.Offset(rect.left-docEl.clientLeft,rect.top-docEl.clientTop)}})}})();(function(){var IS_OLD_OPERA=Prototype.Browser.Opera&&window.parseFloat(window.opera.version())<9.5;var ROOT=null;function getRootElement(){if(ROOT)return ROOT;ROOT=IS_OLD_OPERA?document.body:document.documentElement;return ROOT}function getDimensions(){return{width:this.getWidth(),height:this.getHeight()}}function getWidth(){return getRootElement().clientWidth}function getHeight(){return getRootElement().clientHeight}function getScrollOffsets(){var x=window.pageXOffset||document.documentElement.scrollLeft||document.body.scrollLeft;var y=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop;return new Element.Offset(x,y)}document.viewport={getDimensions:getDimensions,getWidth:getWidth,getHeight:getHeight,getScrollOffsets:getScrollOffsets}})();window.$$=function(){var expression=$A(arguments).join(", ");return Prototype.Selector.select(expression,document)};Prototype.Selector=function(){function select(){throw new Error('Method "Prototype.Selector.select" must be defined.')}function match(){throw new Error('Method "Prototype.Selector.match" must be defined.')}function find(elements,expression,index){index=index||0;var match=Prototype.Selector.match,length=elements.length,matchIndex=0,i;for(i=0;i+~]|"+whitespace+")"+whitespace+"*"),rattributeQuotes=new RegExp("="+whitespace+"*([^\\]'\"]*?)"+whitespace+"*\\]","g"),rpseudo=new RegExp(pseudos),ridentifier=new RegExp("^"+identifier+"$"),matchExpr={ID:new RegExp("^#("+characterEncoding+")"),CLASS:new RegExp("^\\.("+characterEncoding+")"),TAG:new RegExp("^("+characterEncoding.replace("w","w*")+")"),ATTR:new RegExp("^"+attributes),PSEUDO:new RegExp("^"+pseudos),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+whitespace+"*(even|odd|(([+-]|)(\\d*)n|)"+whitespace+"*(?:([+-]|)"+whitespace+"*(\\d+)|))"+whitespace+"*\\)|)","i"),bool:new RegExp("^(?:"+booleans+")$","i"),needsContext:new RegExp("^"+whitespace+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+whitespace+"*((?:-\\d)?\\d*)"+whitespace+"*\\)|)(?=[^-]|$)","i")},rinputs=/^(?:input|select|textarea|button)$/i,rheader=/^h\d$/i,rnative=/^[^{]+\{\s*\[native \w/,rquickExpr=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,rsibling=/[+~]/,rescape=/'|\\/g,runescape=new RegExp("\\\\([\\da-f]{1,6}"+whitespace+"?|("+whitespace+")|.)","ig"),funescape=function(_,escaped,escapedWhitespace){var high="0x"+escaped-65536;return high!==high||escapedWhitespace?escaped:high<0?String.fromCharCode(high+65536):String.fromCharCode(high>>10|55296,high&1023|56320)};try{push.apply(arr=slice.call(preferredDoc.childNodes),preferredDoc.childNodes);arr[preferredDoc.childNodes.length].nodeType}catch(e){push={apply:arr.length?function(target,els){push_native.apply(target,slice.call(els))}:function(target,els){var j=target.length,i=0;while(target[j++]=els[i++]){}target.length=j-1}}}function Sizzle(selector,context,results,seed){var match,elem,m,nodeType,i,groups,old,nid,newContext,newSelector;if((context?context.ownerDocument||context:preferredDoc)!==document){setDocument(context)}context=context||document;results=results||[];if(!selector||typeof selector!=="string"){return results}if((nodeType=context.nodeType)!==1&&nodeType!==9){return[]}if(documentIsHTML&&!seed){if(match=rquickExpr.exec(selector)){if(m=match[1]){if(nodeType===9){elem=context.getElementById(m);if(elem&&elem.parentNode){if(elem.id===m){results.push(elem);return results}}else{return results}}else{if(context.ownerDocument&&(elem=context.ownerDocument.getElementById(m))&&contains(context,elem)&&elem.id===m){results.push(elem);return results}}}else if(match[2]){push.apply(results,context.getElementsByTagName(selector));return results}else if((m=match[3])&&support.getElementsByClassName&&context.getElementsByClassName){push.apply(results,context.getElementsByClassName(m));return results}}if(support.qsa&&(!rbuggyQSA||!rbuggyQSA.test(selector))){nid=old=expando;newContext=context;newSelector=nodeType===9&&selector;if(nodeType===1&&context.nodeName.toLowerCase()!=="object"){groups=tokenize(selector);if(old=context.getAttribute("id")){nid=old.replace(rescape,"\\$&")}else{context.setAttribute("id",nid)}nid="[id='"+nid+"'] ";i=groups.length;while(i--){groups[i]=nid+toSelector(groups[i])}newContext=rsibling.test(selector)&&testContext(context.parentNode)||context;newSelector=groups.join(",")}if(newSelector){try{push.apply(results,newContext.querySelectorAll(newSelector));return results}catch(qsaError){}finally{if(!old){context.removeAttribute("id")}}}}}return select(selector.replace(rtrim,"$1"),context,results,seed)}function createCache(){var keys=[];function cache(key,value){if(keys.push(key+" ")>Expr.cacheLength){delete cache[keys.shift()]}return cache[key+" "]=value}return cache}function markFunction(fn){fn[expando]=true;return fn}function assert(fn){var div=document.createElement("div");try{return!!fn(div)}catch(e){return false}finally{if(div.parentNode){div.parentNode.removeChild(div)}div=null}}function addHandle(attrs,handler){var arr=attrs.split("|"),i=attrs.length;while(i--){Expr.attrHandle[arr[i]]=handler}}function siblingCheck(a,b){var cur=b&&a,diff=cur&&a.nodeType===1&&b.nodeType===1&&(~b.sourceIndex||MAX_NEGATIVE)-(~a.sourceIndex||MAX_NEGATIVE);if(diff){return diff}if(cur){while(cur=cur.nextSibling){if(cur===b){return-1}}}return a?1:-1}function createInputPseudo(type){return function(elem){var name=elem.nodeName.toLowerCase();return name==="input"&&elem.type===type}}function createButtonPseudo(type){return function(elem){var name=elem.nodeName.toLowerCase();return(name==="input"||name==="button")&&elem.type===type}}function createPositionalPseudo(fn){return markFunction(function(argument){argument=+argument;return markFunction(function(seed,matches){var j,matchIndexes=fn([],seed.length,argument),i=matchIndexes.length;while(i--){if(seed[j=matchIndexes[i]]){seed[j]=!(matches[j]=seed[j])}}})})}function testContext(context){return context&&typeof context.getElementsByTagName!==strundefined&&context}support=Sizzle.support={};isXML=Sizzle.isXML=function(elem){var documentElement=elem&&(elem.ownerDocument||elem).documentElement;return documentElement?documentElement.nodeName!=="HTML":false};setDocument=Sizzle.setDocument=function(node){var hasCompare,doc=node?node.ownerDocument||node:preferredDoc,parent=doc.defaultView;if(doc===document||doc.nodeType!==9||!doc.documentElement){return document}document=doc;docElem=doc.documentElement;documentIsHTML=!isXML(doc);if(parent&&parent!==parent.top){if(parent.addEventListener){parent.addEventListener("unload",function(){setDocument()},false)}else if(parent.attachEvent){parent.attachEvent("onunload",function(){setDocument()})}}support.attributes=assert(function(div){div.className="i";return!div.getAttribute("className")});support.getElementsByTagName=assert(function(div){div.appendChild(doc.createComment(""));return!div.getElementsByTagName("*").length});support.getElementsByClassName=rnative.test(doc.getElementsByClassName)&&assert(function(div){div.innerHTML="
    ";div.firstChild.className="i";return div.getElementsByClassName("i").length===2});support.getById=assert(function(div){docElem.appendChild(div).id=expando;return!doc.getElementsByName||!doc.getElementsByName(expando).length});if(support.getById){Expr.find["ID"]=function(id,context){if(typeof context.getElementById!==strundefined&&documentIsHTML){var m=context.getElementById(id);return m&&m.parentNode?[m]:[]}};Expr.filter["ID"]=function(id){var attrId=id.replace(runescape,funescape);return function(elem){return elem.getAttribute("id")===attrId}}}else{delete Expr.find["ID"];Expr.filter["ID"]=function(id){var attrId=id.replace(runescape,funescape);return function(elem){var node=typeof elem.getAttributeNode!==strundefined&&elem.getAttributeNode("id");return node&&node.value===attrId}}}Expr.find["TAG"]=support.getElementsByTagName?function(tag,context){if(typeof context.getElementsByTagName!==strundefined){return context.getElementsByTagName(tag)}}:function(tag,context){var elem,tmp=[],i=0,results=context.getElementsByTagName(tag);if(tag==="*"){while(elem=results[i++]){if(elem.nodeType===1){tmp.push(elem)}}return tmp}return results};Expr.find["CLASS"]=support.getElementsByClassName&&function(className,context){if(typeof context.getElementsByClassName!==strundefined&&documentIsHTML){return context.getElementsByClassName(className)}};rbuggyMatches=[];rbuggyQSA=[];if(support.qsa=rnative.test(doc.querySelectorAll)){assert(function(div){div.innerHTML="";if(div.querySelectorAll("[t^='']").length){rbuggyQSA.push("[*^$]="+whitespace+"*(?:''|\"\")")}if(!div.querySelectorAll("[selected]").length){rbuggyQSA.push("\\["+whitespace+"*(?:value|"+booleans+")")}if(!div.querySelectorAll(":checked").length){rbuggyQSA.push(":checked")}});assert(function(div){var input=doc.createElement("input");input.setAttribute("type","hidden");div.appendChild(input).setAttribute("name","D");if(div.querySelectorAll("[name=d]").length){rbuggyQSA.push("name"+whitespace+"*[*^$|!~]?=")}if(!div.querySelectorAll(":enabled").length){rbuggyQSA.push(":enabled",":disabled")}div.querySelectorAll("*,:x");rbuggyQSA.push(",.*:")})}if(support.matchesSelector=rnative.test(matches=docElem.webkitMatchesSelector||docElem.mozMatchesSelector||docElem.oMatchesSelector||docElem.msMatchesSelector)){assert(function(div){support.disconnectedMatch=matches.call(div,"div");matches.call(div,"[s!='']:x");rbuggyMatches.push("!=",pseudos)})}rbuggyQSA=rbuggyQSA.length&&new RegExp(rbuggyQSA.join("|"));rbuggyMatches=rbuggyMatches.length&&new RegExp(rbuggyMatches.join("|"));hasCompare=rnative.test(docElem.compareDocumentPosition);contains=hasCompare||rnative.test(docElem.contains)?function(a,b){var adown=a.nodeType===9?a.documentElement:a,bup=b&&b.parentNode;return a===bup||!!(bup&&bup.nodeType===1&&(adown.contains?adown.contains(bup):a.compareDocumentPosition&&a.compareDocumentPosition(bup)&16))}:function(a,b){if(b){while(b=b.parentNode){if(b===a){return true}}}return false};sortOrder=hasCompare?function(a,b){if(a===b){hasDuplicate=true;return 0}var compare=!a.compareDocumentPosition-!b.compareDocumentPosition;if(compare){return compare}compare=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1;if(compare&1||!support.sortDetached&&b.compareDocumentPosition(a)===compare){if(a===doc||a.ownerDocument===preferredDoc&&contains(preferredDoc,a)){return-1}if(b===doc||b.ownerDocument===preferredDoc&&contains(preferredDoc,b)){return 1}return sortInput?indexOf.call(sortInput,a)-indexOf.call(sortInput,b):0}return compare&4?-1:1}:function(a,b){if(a===b){hasDuplicate=true;return 0}var cur,i=0,aup=a.parentNode,bup=b.parentNode,ap=[a],bp=[b];if(!aup||!bup){return a===doc?-1:b===doc?1:aup?-1:bup?1:sortInput?indexOf.call(sortInput,a)-indexOf.call(sortInput,b):0}else if(aup===bup){return siblingCheck(a,b)}cur=a;while(cur=cur.parentNode){ap.unshift(cur)}cur=b;while(cur=cur.parentNode){bp.unshift(cur)}while(ap[i]===bp[i]){i++}return i?siblingCheck(ap[i],bp[i]):ap[i]===preferredDoc?-1:bp[i]===preferredDoc?1:0};return doc};Sizzle.matches=function(expr,elements){return Sizzle(expr,null,null,elements)};Sizzle.matchesSelector=function(elem,expr){if((elem.ownerDocument||elem)!==document){setDocument(elem)}expr=expr.replace(rattributeQuotes,"='$1']");if(support.matchesSelector&&documentIsHTML&&(!rbuggyMatches||!rbuggyMatches.test(expr))&&(!rbuggyQSA||!rbuggyQSA.test(expr))){try{var ret=matches.call(elem,expr);if(ret||support.disconnectedMatch||elem.document&&elem.document.nodeType!==11){return ret}}catch(e){}}return Sizzle(expr,document,null,[elem]).length>0};Sizzle.contains=function(context,elem){if((context.ownerDocument||context)!==document){setDocument(context)}return contains(context,elem)};Sizzle.attr=function(elem,name){if((elem.ownerDocument||elem)!==document){setDocument(elem)}var fn=Expr.attrHandle[name.toLowerCase()],val=fn&&hasOwn.call(Expr.attrHandle,name.toLowerCase())?fn(elem,name,!documentIsHTML):undefined;return val!==undefined?val:support.attributes||!documentIsHTML?elem.getAttribute(name):(val=elem.getAttributeNode(name))&&val.specified?val.value:null};Sizzle.error=function(msg){throw new Error("Syntax error, unrecognized expression: "+msg)};Sizzle.uniqueSort=function(results){var elem,duplicates=[],j=0,i=0;hasDuplicate=!support.detectDuplicates;sortInput=!support.sortStable&&results.slice(0);results.sort(sortOrder);if(hasDuplicate){while(elem=results[i++]){if(elem===results[i]){j=duplicates.push(i)}}while(j--){results.splice(duplicates[j],1)}}sortInput=null;return results};getText=Sizzle.getText=function(elem){var node,ret="",i=0,nodeType=elem.nodeType;if(!nodeType){while(node=elem[i++]){ret+=getText(node)}}else if(nodeType===1||nodeType===9||nodeType===11){if(typeof elem.textContent==="string"){return elem.textContent}else{for(elem=elem.firstChild;elem;elem=elem.nextSibling){ret+=getText(elem)}}}else if(nodeType===3||nodeType===4){return elem.nodeValue}return ret};Expr=Sizzle.selectors={cacheLength:50,createPseudo:markFunction,match:matchExpr,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:true}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:true},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(match){match[1]=match[1].replace(runescape,funescape);match[3]=(match[4]||match[5]||"").replace(runescape,funescape);if(match[2]==="~="){match[3]=" "+match[3]+" "}return match.slice(0,4)},CHILD:function(match){match[1]=match[1].toLowerCase();if(match[1].slice(0,3)==="nth"){if(!match[3]){Sizzle.error(match[0])}match[4]=+(match[4]?match[5]+(match[6]||1):2*(match[3]==="even"||match[3]==="odd"));match[5]=+(match[7]+match[8]||match[3]==="odd")}else if(match[3]){Sizzle.error(match[0])}return match},PSEUDO:function(match){var excess,unquoted=!match[5]&&match[2];if(matchExpr["CHILD"].test(match[0])){return null}if(match[3]&&match[4]!==undefined){match[2]=match[4]}else if(unquoted&&rpseudo.test(unquoted)&&(excess=tokenize(unquoted,true))&&(excess=unquoted.indexOf(")",unquoted.length-excess)-unquoted.length)){match[0]=match[0].slice(0,excess);match[2]=unquoted.slice(0,excess)}return match.slice(0,3)}},filter:{TAG:function(nodeNameSelector){var nodeName=nodeNameSelector.replace(runescape,funescape).toLowerCase();return nodeNameSelector==="*"?function(){return true}:function(elem){return elem.nodeName&&elem.nodeName.toLowerCase()===nodeName}},CLASS:function(className){var pattern=classCache[className+" "];return pattern||(pattern=new RegExp("(^|"+whitespace+")"+className+"("+whitespace+"|$)"))&&classCache(className,function(elem){return pattern.test(typeof elem.className==="string"&&elem.className||typeof elem.getAttribute!==strundefined&&elem.getAttribute("class")||"")})},ATTR:function(name,operator,check){return function(elem){var result=Sizzle.attr(elem,name);if(result==null){return operator==="!="}if(!operator){return true}result+="";return operator==="="?result===check:operator==="!="?result!==check:operator==="^="?check&&result.indexOf(check)===0:operator==="*="?check&&result.indexOf(check)>-1:operator==="$="?check&&result.slice(-check.length)===check:operator==="~="?(" "+result+" ").indexOf(check)>-1:operator==="|="?result===check||result.slice(0,check.length+1)===check+"-":false}},CHILD:function(type,what,argument,first,last){var simple=type.slice(0,3)!=="nth",forward=type.slice(-4)!=="last",ofType=what==="of-type";return first===1&&last===0?function(elem){return!!elem.parentNode}:function(elem,context,xml){var cache,outerCache,node,diff,nodeIndex,start,dir=simple!==forward?"nextSibling":"previousSibling",parent=elem.parentNode,name=ofType&&elem.nodeName.toLowerCase(),useCache=!xml&&!ofType;if(parent){if(simple){while(dir){node=elem;while(node=node[dir]){if(ofType?node.nodeName.toLowerCase()===name:node.nodeType===1){return false}}start=dir=type==="only"&&!start&&"nextSibling"}return true}start=[forward?parent.firstChild:parent.lastChild];if(forward&&useCache){outerCache=parent[expando]||(parent[expando]={});cache=outerCache[type]||[];nodeIndex=cache[0]===dirruns&&cache[1];diff=cache[0]===dirruns&&cache[2];node=nodeIndex&&parent.childNodes[nodeIndex];while(node=++nodeIndex&&node&&node[dir]||(diff=nodeIndex=0)||start.pop()){if(node.nodeType===1&&++diff&&node===elem){outerCache[type]=[dirruns,nodeIndex,diff];break}}}else if(useCache&&(cache=(elem[expando]||(elem[expando]={}))[type])&&cache[0]===dirruns){diff=cache[1]}else{while(node=++nodeIndex&&node&&node[dir]||(diff=nodeIndex=0)||start.pop()){if((ofType?node.nodeName.toLowerCase()===name:node.nodeType===1)&&++diff){if(useCache){(node[expando]||(node[expando]={}))[type]=[dirruns,diff]}if(node===elem){break}}}}diff-=last;return diff===first||diff%first===0&&diff/first>=0}}},PSEUDO:function(pseudo,argument){var args,fn=Expr.pseudos[pseudo]||Expr.setFilters[pseudo.toLowerCase()]||Sizzle.error("unsupported pseudo: "+pseudo);if(fn[expando]){return fn(argument)}if(fn.length>1){args=[pseudo,pseudo,"",argument];return Expr.setFilters.hasOwnProperty(pseudo.toLowerCase())?markFunction(function(seed,matches){var idx,matched=fn(seed,argument),i=matched.length;while(i--){idx=indexOf.call(seed,matched[i]);seed[idx]=!(matches[idx]=matched[i])}}):function(elem){return fn(elem,0,args)}}return fn}},pseudos:{not:markFunction(function(selector){var input=[],results=[],matcher=compile(selector.replace(rtrim,"$1"));return matcher[expando]?markFunction(function(seed,matches,context,xml){var elem,unmatched=matcher(seed,null,xml,[]),i=seed.length;while(i--){if(elem=unmatched[i]){seed[i]=!(matches[i]=elem)}}}):function(elem,context,xml){input[0]=elem;matcher(input,null,xml,results);return!results.pop()}}),has:markFunction(function(selector){return function(elem){return Sizzle(selector,elem).length>0}}),contains:markFunction(function(text){return function(elem){return(elem.textContent||elem.innerText||getText(elem)).indexOf(text)>-1}}),lang:markFunction(function(lang){if(!ridentifier.test(lang||"")){Sizzle.error("unsupported lang: "+lang)}lang=lang.replace(runescape,funescape).toLowerCase();return function(elem){var elemLang;do{if(elemLang=documentIsHTML?elem.lang:elem.getAttribute("xml:lang")||elem.getAttribute("lang")){elemLang=elemLang.toLowerCase();return elemLang===lang||elemLang.indexOf(lang+"-")===0}}while((elem=elem.parentNode)&&elem.nodeType===1);return false}}),target:function(elem){var hash=window.location&&window.location.hash;return hash&&hash.slice(1)===elem.id},root:function(elem){return elem===docElem},focus:function(elem){return elem===document.activeElement&&(!document.hasFocus||document.hasFocus())&&!!(elem.type||elem.href||~elem.tabIndex)},enabled:function(elem){return elem.disabled===false},disabled:function(elem){return elem.disabled===true},checked:function(elem){var nodeName=elem.nodeName.toLowerCase();return nodeName==="input"&&!!elem.checked||nodeName==="option"&&!!elem.selected},selected:function(elem){if(elem.parentNode){elem.parentNode.selectedIndex}return elem.selected===true},empty:function(elem){for(elem=elem.firstChild;elem;elem=elem.nextSibling){if(elem.nodeType<6){return false}}return true},parent:function(elem){return!Expr.pseudos["empty"](elem)},header:function(elem){return rheader.test(elem.nodeName)},input:function(elem){return rinputs.test(elem.nodeName)},button:function(elem){var name=elem.nodeName.toLowerCase();return name==="input"&&elem.type==="button"||name==="button"},text:function(elem){var attr;return elem.nodeName.toLowerCase()==="input"&&elem.type==="text"&&((attr=elem.getAttribute("type"))==null||attr.toLowerCase()==="text")},first:createPositionalPseudo(function(){return[0]}),last:createPositionalPseudo(function(matchIndexes,length){return[length-1]}),eq:createPositionalPseudo(function(matchIndexes,length,argument){return[argument<0?argument+length:argument]}),even:createPositionalPseudo(function(matchIndexes,length){var i=0;for(;i=0;){matchIndexes.push(i)}return matchIndexes}),gt:createPositionalPseudo(function(matchIndexes,length,argument){var i=argument<0?argument+length:argument;for(;++i1?function(elem,context,xml){var i=matchers.length;while(i--){if(!matchers[i](elem,context,xml)){return false}}return true}:matchers[0]}function multipleContexts(selector,contexts,results){var i=0,len=contexts.length;for(;i-1){seed[temp]=!(results[temp]=elem)}}}}else{matcherOut=condense(matcherOut===results?matcherOut.splice(preexisting,matcherOut.length):matcherOut);if(postFinder){postFinder(null,results,matcherOut,xml)}else{push.apply(results,matcherOut)}}})}function matcherFromTokens(tokens){var checkContext,matcher,j,len=tokens.length,leadingRelative=Expr.relative[tokens[0].type],implicitRelative=leadingRelative||Expr.relative[" "],i=leadingRelative?1:0,matchContext=addCombinator(function(elem){return elem===checkContext},implicitRelative,true),matchAnyContext=addCombinator(function(elem){return indexOf.call(checkContext,elem)>-1},implicitRelative,true),matchers=[function(elem,context,xml){return!leadingRelative&&(xml||context!==outermostContext)||((checkContext=context).nodeType?matchContext(elem,context,xml):matchAnyContext(elem,context,xml))}];for(;i1&&elementMatcher(matchers),i>1&&toSelector(tokens.slice(0,i-1).concat({value:tokens[i-2].type===" "?"*":""})).replace(rtrim,"$1"),matcher,i0,byElement=elementMatchers.length>0,superMatcher=function(seed,context,xml,results,outermost){var elem,j,matcher,matchedCount=0,i="0",unmatched=seed&&[],setMatched=[],contextBackup=outermostContext,elems=seed||byElement&&Expr.find["TAG"]("*",outermost),dirrunsUnique=dirruns+=contextBackup==null?1:Math.random()||.1,len=elems.length;if(outermost){outermostContext=context!==document&&context}for(;i!==len&&(elem=elems[i])!=null;i++){if(byElement&&elem){j=0;while(matcher=elementMatchers[j++]){if(matcher(elem,context,xml)){results.push(elem);break}}if(outermost){dirruns=dirrunsUnique}}if(bySet){if(elem=!matcher&&elem){matchedCount--}if(seed){unmatched.push(elem)}}}matchedCount+=i;if(bySet&&i!==matchedCount){j=0;while(matcher=setMatchers[j++]){matcher(unmatched,setMatched,context,xml)}if(seed){if(matchedCount>0){while(i--){if(!(unmatched[i]||setMatched[i])){setMatched[i]=pop.call(results)}}}setMatched=condense(setMatched)}push.apply(results,setMatched);if(outermost&&!seed&&setMatched.length>0&&matchedCount+setMatchers.length>1){Sizzle.uniqueSort(results)}}if(outermost){dirruns=dirrunsUnique;outermostContext=contextBackup}return unmatched};return bySet?markFunction(superMatcher):superMatcher}compile=Sizzle.compile=function(selector,match){var i,setMatchers=[],elementMatchers=[],cached=compilerCache[selector+" "];if(!cached){if(!match){match=tokenize(selector)}i=match.length;while(i--){cached=matcherFromTokens(match[i]);if(cached[expando]){setMatchers.push(cached)}else{elementMatchers.push(cached)}}cached=compilerCache(selector,matcherFromGroupMatchers(elementMatchers,setMatchers));cached.selector=selector}return cached};select=Sizzle.select=function(selector,context,results,seed){var i,tokens,token,type,find,compiled=typeof selector==="function"&&selector,match=!seed&&tokenize(selector=compiled.selector||selector);results=results||[];if(match.length===1){tokens=match[0]=match[0].slice(0);if(tokens.length>2&&(token=tokens[0]).type==="ID"&&support.getById&&context.nodeType===9&&documentIsHTML&&Expr.relative[tokens[1].type]){context=(Expr.find["ID"](token.matches[0].replace(runescape,funescape),context)||[])[0];if(!context){return results}else if(compiled){context=context.parentNode}selector=selector.slice(tokens.shift().value.length)}i=matchExpr["needsContext"].test(selector)?0:tokens.length;while(i--){token=tokens[i];if(Expr.relative[type=token.type]){break}if(find=Expr.find[type]){if(seed=find(token.matches[0].replace(runescape,funescape),rsibling.test(tokens[0].type)&&testContext(context.parentNode)||context)){ -tokens.splice(i,1);selector=seed.length&&toSelector(tokens);if(!selector){push.apply(results,seed);return results}break}}}}(compiled||compile(selector,match))(seed,context,!documentIsHTML,results,rsibling.test(selector)&&testContext(context.parentNode)||context);return results};support.sortStable=expando.split("").sort(sortOrder).join("")===expando;support.detectDuplicates=!!hasDuplicate;setDocument();support.sortDetached=assert(function(div1){return div1.compareDocumentPosition(document.createElement("div"))&1});if(!assert(function(div){div.innerHTML="";return div.firstChild.getAttribute("href")==="#"})){addHandle("type|href|height|width",function(elem,name,isXML){if(!isXML){return elem.getAttribute(name,name.toLowerCase()==="type"?1:2)}})}if(!support.attributes||!assert(function(div){div.innerHTML="";div.firstChild.setAttribute("value","");return div.firstChild.getAttribute("value")===""})){addHandle("value",function(elem,name,isXML){if(!isXML&&elem.nodeName.toLowerCase()==="input"){return elem.defaultValue}})}if(!assert(function(div){return div.getAttribute("disabled")==null})){addHandle(booleans,function(elem,name,isXML){var val;if(!isXML){return elem[name]===true?name.toLowerCase():(val=elem.getAttributeNode(name))&&val.specified?val.value:null}})}if(typeof define==="function"&&define.amd){define(function(){return Sizzle})}else if(typeof module!=="undefined"&&module.exports){module.exports=Sizzle}else{window.Sizzle=Sizzle}})(window);(function(engine){var extendElements=Prototype.Selector.extendElements;function select(selector,scope){return extendElements(engine(selector,scope||document))}function match(element,selector){return engine.matches(selector,[element]).length==1}Prototype.Selector.engine=engine;Prototype.Selector.select=select;Prototype.Selector.match=match})(Sizzle);window.Sizzle=Prototype._original_property;delete Prototype._original_property;var Form={reset:function(form){form=$(form);form.reset();return form},serializeElements:function(elements,options){if(typeof options!="object")options={hash:!!options};else if(Object.isUndefined(options.hash))options.hash=true;var key,value,submitted=false,submit=options.submit,accumulator,initial;if(options.hash){initial={};accumulator=function(result,key,value){if(key in result){if(!Object.isArray(result[key]))result[key]=[result[key]];result[key]=result[key].concat(value)}else result[key]=value;return result}}else{initial="";accumulator=function(result,key,values){if(!Object.isArray(values)){values=[values]}if(!values.length){return result}var encodedKey=encodeURIComponent(key).gsub(/%20/,"+");return result+(result?"&":"")+values.map(function(value){value=value.gsub(/(\r)?\n/,"\r\n");value=encodeURIComponent(value);value=value.gsub(/%20/,"+");return encodedKey+"="+value}).join("&")}}return elements.inject(initial,function(result,element){if(!element.disabled&&element.name){key=element.name;value=$(element).getValue();if(value!=null&&element.type!="file"&&(element.type!="submit"||!submitted&&submit!==false&&(!submit||key==submit)&&(submitted=true))){result=accumulator(result,key,value)}}return result})}};Form.Methods={serialize:function(form,options){return Form.serializeElements(Form.getElements(form),options)},getElements:function(form){var elements=$(form).getElementsByTagName("*");var element,results=[],serializers=Form.Element.Serializers;for(var i=0;element=elements[i];i++){if(serializers[element.tagName.toLowerCase()])results.push(Element.extend(element))}return results},getInputs:function(form,typeName,name){form=$(form);var inputs=form.getElementsByTagName("input");if(!typeName&&!name)return $A(inputs).map(Element.extend);for(var i=0,matchingInputs=[],length=inputs.length;i=0}).sortBy(function(element){return element.tabIndex}).first();return firstByIndex?firstByIndex:elements.find(function(element){return/^(?:input|select|textarea)$/i.test(element.tagName)})},focusFirstElement:function(form){form=$(form);var element=form.findFirstElement();if(element)element.activate();return form},request:function(form,options){form=$(form),options=Object.clone(options||{});var params=options.parameters,action=form.readAttribute("action")||"";if(action.blank())action=window.location.href;options.parameters=form.serialize(true);if(params){if(Object.isString(params))params=params.toQueryParams();Object.extend(options.parameters,params)}if(form.hasAttribute("method")&&!options.method)options.method=form.method;return new Ajax.Request(action,options)}};Form.Element={focus:function(element){$(element).focus();return element},select:function(element){$(element).select();return element}};Form.Element.Methods={serialize:function(element){element=$(element);if(!element.disabled&&element.name){var value=element.getValue();if(value!=undefined){var pair={};pair[element.name]=value;return Object.toQueryString(pair)}}return""},getValue:function(element){element=$(element);var method=element.tagName.toLowerCase();return Form.Element.Serializers[method](element)},setValue:function(element,value){element=$(element);var method=element.tagName.toLowerCase();Form.Element.Serializers[method](element,value);return element},clear:function(element){$(element).value="";return element},present:function(element){return $(element).value!=""},activate:function(element){element=$(element);try{element.focus();if(element.select&&(element.tagName.toLowerCase()!="input"||!/^(?:button|reset|submit)$/i.test(element.type)))element.select()}catch(e){}return element},disable:function(element){element=$(element);element.disabled=true;return element},enable:function(element){element=$(element);element.disabled=false;return element}};var Field=Form.Element;var $F=Form.Element.Methods.getValue;Form.Element.Serializers=function(){function input(element,value){switch(element.type.toLowerCase()){case"checkbox":case"radio":return inputSelector(element,value);default:return valueSelector(element,value)}}function inputSelector(element,value){if(Object.isUndefined(value))return element.checked?element.value:null;else element.checked=!!value}function valueSelector(element,value){if(Object.isUndefined(value))return element.value;else element.value=value}function select(element,value){if(Object.isUndefined(value))return(element.type==="select-one"?selectOne:selectMany)(element);var opt,currentValue,single=!Object.isArray(value);for(var i=0,length=element.length;i=0?optionValue(element.options[index]):null}function selectMany(element){var values,length=element.length;if(!length)return null;for(var i=0,values=[];i=this.offset[1]&&y=this.offset[0]&&x=this.offset[1]&&this.ycomp=this.offset[0]&&this.xcomp0})._each(iterator,context)},set:function(className){this.element.className=className},add:function(classNameToAdd){if(this.include(classNameToAdd))return;this.set($A(this).concat(classNameToAdd).join(" "))},remove:function(classNameToRemove){if(!this.include(classNameToRemove))return;this.set($A(this).without(classNameToRemove).join(" "))},toString:function(){return $A(this).join(" ")}};Object.extend(Element.ClassNames.prototype,Enumerable);(function(){window.Selector=Class.create({initialize:function(expression){this.expression=expression.strip()},findElements:function(rootElement){return Prototype.Selector.select(this.expression,rootElement)},match:function(element){return Prototype.Selector.match(element,this.expression)},toString:function(){return this.expression},inspect:function(){return"#"}});Object.extend(Selector,{matchElements:function(elements,expression){var match=Prototype.Selector.match,results=[];for(var i=0,length=elements.length;i=y;y++)if(l=Math.sin(h),m=Math.tan(h),r=m*Math.sqrt(1-t*l*l),c=Math.sin(2*h),u=i*h-s*c+e*Math.sin(4*h)-o*Math.sin(6*h),d=i-2*s*Math.cos(2*h)+4*e*Math.cos(4*h)-6*o*Math.cos(6*h),p=2*u+r*(u*u+a)-2*n*(r*u+1),_=t*c*(u*u+a-2*n*u)/(2*r),f=2*(n-u)*(r*d-2/c)-2*d,P=p/(_+f),h+=P,1e-10>=Math.abs(P))return h;return Proj4js.reportError("phi4z: No convergence"),null}function e4fn(t){var i,s;return i=1+t,s=1-t,Math.sqrt(Math.pow(i,i)*Math.pow(s,s))}var Proj4js={defaultDatum:"WGS84",transform:function(t,i,s){if(!t.readyToUse)return this.reportError("Proj4js initialization for:"+t.srsCode+" not yet complete"),s;if(!i.readyToUse)return this.reportError("Proj4js initialization for:"+i.srsCode+" not yet complete"),s;if(t.datum&&i.datum&&((t.datum.datum_type==Proj4js.common.PJD_3PARAM||t.datum.datum_type==Proj4js.common.PJD_7PARAM)&&"WGS84"!=i.datumCode||(i.datum.datum_type==Proj4js.common.PJD_3PARAM||i.datum.datum_type==Proj4js.common.PJD_7PARAM)&&"WGS84"!=t.datumCode)){var e=Proj4js.WGS84;this.transform(t,e,s),t=e}return"enu"!=t.axis&&this.adjust_axis(t,!1,s),"longlat"==t.projName?(s.x*=Proj4js.common.D2R,s.y*=Proj4js.common.D2R):(t.to_meter&&(s.x*=t.to_meter,s.y*=t.to_meter),t.inverse(s)),t.from_greenwich&&(s.x+=t.from_greenwich),s=this.datum_transform(t.datum,i.datum,s),i.from_greenwich&&(s.x-=i.from_greenwich),"longlat"==i.projName?(s.x*=Proj4js.common.R2D,s.y*=Proj4js.common.R2D):(i.forward(s),i.to_meter&&(s.x/=i.to_meter,s.y/=i.to_meter)),"enu"!=i.axis&&this.adjust_axis(i,!0,s),s},datum_transform:function(t,i,s){return t.compare_datums(i)?s:t.datum_type==Proj4js.common.PJD_NODATUM||i.datum_type==Proj4js.common.PJD_NODATUM?s:((t.es!=i.es||t.a!=i.a||t.datum_type==Proj4js.common.PJD_3PARAM||t.datum_type==Proj4js.common.PJD_7PARAM||i.datum_type==Proj4js.common.PJD_3PARAM||i.datum_type==Proj4js.common.PJD_7PARAM)&&(t.geodetic_to_geocentric(s),(t.datum_type==Proj4js.common.PJD_3PARAM||t.datum_type==Proj4js.common.PJD_7PARAM)&&t.geocentric_to_wgs84(s),(i.datum_type==Proj4js.common.PJD_3PARAM||i.datum_type==Proj4js.common.PJD_7PARAM)&&i.geocentric_from_wgs84(s),i.geocentric_to_geodetic(s)),s)},adjust_axis:function(t,i,s){for(var e,o,n=s.x,a=s.y,r=s.z||0,h=0;3>h;h++)if(!i||2!=h||void 0!==s.z)switch(0==h?(e=n,o="x"):1==h?(e=a,o="y"):(e=r,o="z"),t.axis[h]){case"e":s[o]=e;break;case"w":s[o]=-e;break;case"n":s[o]=e;break;case"s":s[o]=-e;break;case"u":void 0!==s[o]&&(s.z=e);break;case"d":void 0!==s[o]&&(s.z=-e);break;default:return alert("ERROR: unknow axis ("+t.axis[h]+") - check definition of "+t.projName),null}return s},reportError:function(){},extend:function(t,i){if(t=t||{},i)for(var s in i){var e=i[s];void 0!==e&&(t[s]=e)}return t},Class:function(){for(var t,i=function(){this.initialize.apply(this,arguments)},s={},e=0;arguments.length>e;++e)t="function"==typeof arguments[e]?arguments[e].prototype:arguments[e],Proj4js.extend(s,t);return i.prototype=s,i},bind:function(t,i){var s=Array.prototype.slice.apply(arguments,[2]);return function(){var e=s.concat(Array.prototype.slice.apply(arguments,[0])); +Math.sign = Math.sign || function(x) { + x = +x; // convert to a number + if (x === 0 || isNaN(x)) { + return x; + } + return x > 0 ? 1 : -1; +} -return t.apply(i,e)}},scriptName:"proj4js-combined.js",defsLookupService:"http://spatialreference.org/ref",libPath:null,getScriptLocation:function(){if(this.libPath)return this.libPath;for(var t=this.scriptName,i=t.length,s=document.getElementsByTagName("script"),e=0;s.length>e;e++){var o=s[e].getAttribute("src");if(o){var n=o.lastIndexOf(t);if(n>-1&&n+i==o.length){this.libPath=o.slice(0,-i);break}}}return this.libPath||""},loadScript:function(t,i,s,e){var o=document.createElement("script");o.defer=!1,o.type="text/javascript",o.id=t,o.src=t,o.onload=i,o.onerror=s,o.loadCheck=e,/MSIE/.test(navigator.userAgent)&&(o.onreadystatechange=this.checkReadyState),document.getElementsByTagName("head")[0].appendChild(o)},checkReadyState:function(){"loaded"==this.readyState&&(this.loadCheck()?this.onload():this.onerror())}};Proj4js.Proj=Proj4js.Class({readyToUse:!1,title:null,projName:null,units:null,datum:null,x0:0,y0:0,localCS:!1,queue:null,initialize:function(t,i){if(this.srsCodeInput=t,this.queue=[],i&&this.queue.push(i),t.indexOf("GEOGCS")>=0||t.indexOf("GEOCCS")>=0||t.indexOf("PROJCS")>=0||t.indexOf("LOCAL_CS")>=0)return this.parseWKT(t),this.deriveConstants(),this.loadProjCode(this.projName),void 0;if(0==t.indexOf("urn:")){var s=t.split(":");"ogc"!=s[1]&&"x-ogc"!=s[1]||"def"!=s[2]||"crs"!=s[3]||(t=s[4]+":"+s[s.length-1])}else if(0==t.indexOf("http://")){var e=t.split("#");e[0].match(/epsg.org/)?t="EPSG:"+e[1]:e[0].match(/RIG.xml/)&&(t="IGNF:"+e[1])}this.srsCode=t.toUpperCase(),0==this.srsCode.indexOf("EPSG")?(this.srsCode=this.srsCode,this.srsAuth="epsg",this.srsProjNumber=this.srsCode.substring(5)):0==this.srsCode.indexOf("IGNF")?(this.srsCode=this.srsCode,this.srsAuth="IGNF",this.srsProjNumber=this.srsCode.substring(5)):0==this.srsCode.indexOf("CRS")?(this.srsCode=this.srsCode,this.srsAuth="CRS",this.srsProjNumber=this.srsCode.substring(4)):(this.srsAuth="",this.srsProjNumber=this.srsCode),this.loadProjDefinition()},loadProjDefinition:function(){if(Proj4js.defs[this.srsCode])return this.defsLoaded(),void 0;var t=Proj4js.getScriptLocation()+"defs/"+this.srsAuth.toUpperCase()+this.srsProjNumber+".js";Proj4js.loadScript(t,Proj4js.bind(this.defsLoaded,this),Proj4js.bind(this.loadFromService,this),Proj4js.bind(this.checkDefsLoaded,this))},loadFromService:function(){var t=Proj4js.defsLookupService+"/"+this.srsAuth+"/"+this.srsProjNumber+"/proj4js/";Proj4js.loadScript(t,Proj4js.bind(this.defsLoaded,this),Proj4js.bind(this.defsFailed,this),Proj4js.bind(this.checkDefsLoaded,this))},defsLoaded:function(){this.parseDefs(),this.loadProjCode(this.projName)},checkDefsLoaded:function(){return Proj4js.defs[this.srsCode]?!0:!1},defsFailed:function(){Proj4js.reportError("failed to load projection definition for: "+this.srsCode),Proj4js.defs[this.srsCode]=Proj4js.defs.WGS84,this.defsLoaded()},loadProjCode:function(t){if(Proj4js.Proj[t])return this.initTransforms(),void 0;var i=Proj4js.getScriptLocation()+"projCode/"+t+".js";Proj4js.loadScript(i,Proj4js.bind(this.loadProjCodeSuccess,this,t),Proj4js.bind(this.loadProjCodeFailure,this,t),Proj4js.bind(this.checkCodeLoaded,this,t))},loadProjCodeSuccess:function(t){Proj4js.Proj[t].dependsOn?this.loadProjCode(Proj4js.Proj[t].dependsOn):this.initTransforms()},loadProjCodeFailure:function(t){Proj4js.reportError("failed to find projection file for: "+t)},checkCodeLoaded:function(t){return Proj4js.Proj[t]?!0:!1},initTransforms:function(){if(Proj4js.extend(this,Proj4js.Proj[this.projName]),this.init(),this.readyToUse=!0,this.queue)for(var t;t=this.queue.shift();)t.call(this,this)},wktRE:/^(\w+)\[(.*)\]$/,parseWKT:function(t){var i=t.match(this.wktRE);if(i){var s,e=i[1],o=i[2],n=o.split(",");s="TOWGS84"==e.toUpperCase()?e:n.shift(),s=s.replace(/^\"/,""),s=s.replace(/\"$/,"");for(var a=[],r=0,h="",l=0;n.length>l;++l){for(var c=n[l],m=0;c.length>m;++m)"["==c.charAt(m)&&++r,"]"==c.charAt(m)&&--r;h+=c,0===r?(a.push(h),h=""):h+=","}switch(e){case"LOCAL_CS":this.projName="identity",this.localCS=!0,this.srsCode=s;break;case"GEOGCS":this.projName="longlat",this.geocsCode=s,this.srsCode||(this.srsCode=s);break;case"PROJCS":this.srsCode=s;break;case"GEOCCS":break;case"PROJECTION":this.projName=Proj4js.wktProjections[s];break;case"DATUM":this.datumName=s;break;case"LOCAL_DATUM":this.datumCode="none";break;case"SPHEROID":this.ellps=s,this.a=parseFloat(a.shift()),this.rf=parseFloat(a.shift());break;case"PRIMEM":this.from_greenwich=parseFloat(a.shift());break;case"UNIT":this.units=s,this.unitsPerMeter=parseFloat(a.shift());break;case"PARAMETER":var u=s.toLowerCase(),d=parseFloat(a.shift());switch(u){case"false_easting":this.x0=d;break;case"false_northing":this.y0=d;break;case"scale_factor":this.k0=d;break;case"central_meridian":this.long0=d*Proj4js.common.D2R;break;case"latitude_of_origin":this.lat0=d*Proj4js.common.D2R;break;case"more_here":break;default:}break;case"TOWGS84":this.datum_params=a;break;case"AXIS":var u=s.toLowerCase(),d=a.shift();switch(d){case"EAST":d="e";break;case"WEST":d="w";break;case"NORTH":d="n";break;case"SOUTH":d="s";break;case"UP":d="u";break;case"DOWN":d="d";break;case"OTHER":default:d=" "}switch(this.axis||(this.axis="enu"),u){case"x":this.axis=d+this.axis.substr(1,2);break;case"y":this.axis=this.axis.substr(0,1)+d+this.axis.substr(2,1);break;case"z":this.axis=this.axis.substr(0,2)+d;break;default:}case"MORE_HERE":break;default:}for(var l=0;a.length>l;++l)this.parseWKT(a[l])}},parseDefs:function(){this.defData=Proj4js.defs[this.srsCode];var t,i;if(this.defData){for(var s=this.defData.split("+"),e=0;s.length>e;e++){var o=s[e].split("=");switch(t=o[0].toLowerCase(),i=o[1],t.replace(/\s/gi,"")){case"":break;case"title":this.title=i;break;case"proj":this.projName=i.replace(/\s/gi,"");break;case"units":this.units=i.replace(/\s/gi,"");break;case"datum":this.datumCode=i.replace(/\s/gi,"");break;case"nadgrids":this.nagrids=i.replace(/\s/gi,"");break;case"ellps":this.ellps=i.replace(/\s/gi,"");break;case"a":this.a=parseFloat(i);break;case"b":this.b=parseFloat(i);break;case"rf":this.rf=parseFloat(i);break;case"lat_0":this.lat0=i*Proj4js.common.D2R;break;case"lat_1":this.lat1=i*Proj4js.common.D2R;break;case"lat_2":this.lat2=i*Proj4js.common.D2R;break;case"lat_ts":this.lat_ts=i*Proj4js.common.D2R;break;case"lon_0":this.long0=i*Proj4js.common.D2R;break;case"alpha":this.alpha=parseFloat(i)*Proj4js.common.D2R;break;case"lonc":this.longc=i*Proj4js.common.D2R;break;case"x_0":this.x0=parseFloat(i);break;case"y_0":this.y0=parseFloat(i);break;case"k_0":this.k0=parseFloat(i);break;case"k":this.k0=parseFloat(i);break;case"r_a":this.R_A=!0;break;case"zone":this.zone=parseInt(i,10);break;case"south":this.utmSouth=!0;break;case"towgs84":this.datum_params=i.split(",");break;case"to_meter":this.to_meter=parseFloat(i);break;case"from_greenwich":this.from_greenwich=i*Proj4js.common.D2R;break;case"pm":i=i.replace(/\s/gi,""),this.from_greenwich=Proj4js.PrimeMeridian[i]?Proj4js.PrimeMeridian[i]:parseFloat(i),this.from_greenwich*=Proj4js.common.D2R;break;case"axis":i=i.replace(/\s/gi,"");var n="ewnsud";3==i.length&&-1!=n.indexOf(i.substr(0,1))&&-1!=n.indexOf(i.substr(1,1))&&-1!=n.indexOf(i.substr(2,1))&&(this.axis=i);break;case"no_defs":break;default:}}this.deriveConstants()}},deriveConstants:function(){if("@null"==this.nagrids&&(this.datumCode="none"),this.datumCode&&"none"!=this.datumCode){var t=Proj4js.Datum[this.datumCode];t&&(this.datum_params=t.towgs84?t.towgs84.split(","):null,this.ellps=t.ellipse,this.datumName=t.datumName?t.datumName:this.datumCode)}if(!this.a){var i=Proj4js.Ellipsoid[this.ellps]?Proj4js.Ellipsoid[this.ellps]:Proj4js.Ellipsoid.WGS84;Proj4js.extend(this,i)}this.rf&&!this.b&&(this.b=(1-1/this.rf)*this.a),(0===this.rf||Math.abs(this.a-this.b)=a;a++)if(s=t*Math.sin(n),e=this.HALF_PI-2*Math.atan(i*Math.pow((1-s)/(1+s),o))-n,n+=e,1e-10>=Math.abs(e))return n;return alert("phi2z has NoConvergence"),-9999},qsfnz:function(t,i){var s;return t>1e-7?(s=t*i,(1-t*t)*(i/(1-s*s)-.5/t*Math.log((1-s)/(1+s)))):2*i},asinz:function(t){return Math.abs(t)>1&&(t=t>1?1:-1),Math.asin(t)},e0fn:function(t){return 1-.25*t*(1+t/16*(3+1.25*t))},e1fn:function(t){return.375*t*(1+.25*t*(1+.46875*t))},e2fn:function(t){return.05859375*t*t*(1+.75*t)},e3fn:function(t){return t*t*t*(35/3072)},mlfn:function(t,i,s,e,o){return t*o-i*Math.sin(2*o)+s*Math.sin(4*o)-e*Math.sin(6*o)},srat:function(t,i){return Math.pow((1-t)/(1+t),i)},sign:function(t){return 0>t?-1:1},adjust_lon:function(t){return t=Math.abs(t)this.HALF_PI)return+Number.NaN;if(i==this.HALF_PI)return Number.POSITIVE_INFINITY;if(i==-1*this.HALF_PI)return-1*Number.POSITIVE_INFINITY;var e=t*s;return Math.log(Math.tan((this.HALF_PI+i)/2))+t*Math.log((1-e)/(1+e))/2},fL:function(t,i){return 2*Math.atan(t*Math.exp(i))-this.HALF_PI},invlatiso:function(t,i){var s=this.fL(1,i),e=0,o=0;do e=s,o=t*Math.sin(e),s=this.fL(Math.exp(t*Math.log((1+o)/(1-o))/2),i);while(Math.abs(s-e)>1e-12);return s},sinh:function(t){var i=Math.exp(t);return i=(i-1/i)/2},cosh:function(t){var i=Math.exp(t);return i=(i+1/i)/2},tanh:function(t){var i=Math.exp(t);return i=(i-1/i)/(i+1/i)},asinh:function(t){var i=t>=0?1:-1;return i*Math.log(Math.abs(t)+Math.sqrt(t*t+1))},acosh:function(t){return 2*Math.log(Math.sqrt((t+1)/2)+Math.sqrt((t-1)/2))},atanh:function(t){return Math.log((t-1)/(t+1))/2},gN:function(t,i,s){var e=i*s;return t/Math.sqrt(1-e*e)},pj_enfn:function(t){var i=[];i[0]=this.C00-t*(this.C02+t*(this.C04+t*(this.C06+t*this.C08))),i[1]=t*(this.C22-t*(this.C04+t*(this.C06+t*this.C08)));var s=t*t;return i[2]=s*(this.C44-t*(this.C46+t*this.C48)),s*=t,i[3]=s*(this.C66-t*this.C68),i[4]=s*t*this.C88,i},pj_mlfn:function(t,i,s,e){return s*=i,i*=i,e[0]*t-s*(e[1]+i*(e[2]+i*(e[3]+i*e[4])))},pj_inv_mlfn:function(t,i,s){for(var e=1/(1-i),o=t,n=Proj4js.common.MAX_ITER;n;--n){var a=Math.sin(o),r=1-i*a*a;if(r=(this.pj_mlfn(o,a,Math.cos(o),s)-t)*r*Math.sqrt(r)*e,o-=r,Math.abs(r)i;i++)t.datum_params[i]=parseFloat(t.datum_params[i]);(0!=t.datum_params[0]||0!=t.datum_params[1]||0!=t.datum_params[2])&&(this.datum_type=Proj4js.common.PJD_3PARAM),t.datum_params.length>3&&(0!=t.datum_params[3]||0!=t.datum_params[4]||0!=t.datum_params[5]||0!=t.datum_params[6])&&(this.datum_type=Proj4js.common.PJD_7PARAM,t.datum_params[3]*=Proj4js.common.SEC_TO_RAD,t.datum_params[4]*=Proj4js.common.SEC_TO_RAD,t.datum_params[5]*=Proj4js.common.SEC_TO_RAD,t.datum_params[6]=t.datum_params[6]/1e6+1)}t&&(this.a=t.a,this.b=t.b,this.es=t.es,this.ep2=t.ep2,this.datum_params=t.datum_params)},compare_datums:function(t){return this.datum_type!=t.datum_type?!1:this.a!=t.a||Math.abs(this.es-t.es)>5e-11?!1:this.datum_type==Proj4js.common.PJD_3PARAM?this.datum_params[0]==t.datum_params[0]&&this.datum_params[1]==t.datum_params[1]&&this.datum_params[2]==t.datum_params[2]:this.datum_type==Proj4js.common.PJD_7PARAM?this.datum_params[0]==t.datum_params[0]&&this.datum_params[1]==t.datum_params[1]&&this.datum_params[2]==t.datum_params[2]&&this.datum_params[3]==t.datum_params[3]&&this.datum_params[4]==t.datum_params[4]&&this.datum_params[5]==t.datum_params[5]&&this.datum_params[6]==t.datum_params[6]:this.datum_type==Proj4js.common.PJD_GRIDSHIFT||t.datum_type==Proj4js.common.PJD_GRIDSHIFT?(alert("ERROR: Grid shift transformations are not implemented."),!1):!0},geodetic_to_geocentric:function(t){var i,s,e,o,n,a,r,h=t.x,l=t.y,c=t.z?t.z:0,m=0;if(-Proj4js.common.HALF_PI>l&&l>-1.001*Proj4js.common.HALF_PI)l=-Proj4js.common.HALF_PI;else if(l>Proj4js.common.HALF_PI&&1.001*Proj4js.common.HALF_PI>l)l=Proj4js.common.HALF_PI;else if(-Proj4js.common.HALF_PI>l||l>Proj4js.common.HALF_PI)return Proj4js.reportError("geocent:lat out of range:"+l),null;return h>Proj4js.common.PI&&(h-=2*Proj4js.common.PI),n=Math.sin(l),r=Math.cos(l),a=n*n,o=this.a/Math.sqrt(1-this.es*a),i=(o+c)*r*Math.cos(h),s=(o+c)*r*Math.sin(h),e=(o*(1-this.es)+c)*n,t.x=i,t.y=s,t.z=e,m},geocentric_to_geodetic:function(t){var i,s,e,o,n,a,r,h,l,c,m,u,d,p,_,f,P,y=1e-12,g=y*y,L=30,v=t.x,j=t.y,M=t.z?t.z:0;if(d=!1,i=Math.sqrt(v*v+j*j),s=Math.sqrt(v*v+j*j+M*M),y>i/this.a){if(d=!0,_=0,y>s/this.a)return f=Proj4js.common.HALF_PI,P=-this.b,void 0}else _=Math.atan2(j,v);e=M/s,o=i/s,n=1/Math.sqrt(1-this.es*(2-this.es)*o*o),h=o*(1-this.es)*n,l=e*n,p=0;do p++,r=this.a/Math.sqrt(1-this.es*l*l),P=i*h+M*l-r*(1-this.es*l*l),a=this.es*r/(r+P),n=1/Math.sqrt(1-a*(2-a)*o*o),c=o*(1-a)*n,m=e*n,u=m*h-c*l,h=c,l=m;while(u*u>g&&L>p);return f=Math.atan(m/Math.abs(c)),t.x=_,t.y=f,t.z=P,t},geocentric_to_geodetic_noniter:function(t){var i,s,e,o,n,a,r,h,l,c,m,u,d,p,_,f,P,y=t.x,g=t.y,L=t.z?t.z:0;if(y=parseFloat(y),g=parseFloat(g),L=parseFloat(L),P=!1,0!=y)i=Math.atan2(g,y);else if(g>0)i=Proj4js.common.HALF_PI;else if(0>g)i=-Proj4js.common.HALF_PI;else if(P=!0,i=0,L>0)s=Proj4js.common.HALF_PI;else{if(!(0>L))return s=Proj4js.common.HALF_PI,e=-this.b,void 0;s=-Proj4js.common.HALF_PI}return n=y*y+g*g,o=Math.sqrt(n),a=L*Proj4js.common.AD_C,h=Math.sqrt(a*a+n),c=a/h,u=o/h,m=c*c*c,r=L+this.b*this.ep2*m,f=o-this.a*this.es*u*u*u,l=Math.sqrt(r*r+f*f),d=r/l,p=f/l,_=this.a/Math.sqrt(1-this.es*d*d),e=p>=Proj4js.common.COS_67P5?o/p-_:-Proj4js.common.COS_67P5>=p?o/-p-_:L/d+_*(this.es-1),0==P&&(s=Math.atan(d/p)),t.x=i,t.y=s,t.z=e,t},geocentric_to_wgs84:function(t){if(this.datum_type==Proj4js.common.PJD_3PARAM)t.x+=this.datum_params[0],t.y+=this.datum_params[1],t.z+=this.datum_params[2];else if(this.datum_type==Proj4js.common.PJD_7PARAM){var i=this.datum_params[0],s=this.datum_params[1],e=this.datum_params[2],o=this.datum_params[3],n=this.datum_params[4],a=this.datum_params[5],r=this.datum_params[6],h=r*(t.x-a*t.y+n*t.z)+i,l=r*(a*t.x+t.y-o*t.z)+s,c=r*(-n*t.x+o*t.y+t.z)+e;t.x=h,t.y=l,t.z=c}},geocentric_from_wgs84:function(t){if(this.datum_type==Proj4js.common.PJD_3PARAM)t.x-=this.datum_params[0],t.y-=this.datum_params[1],t.z-=this.datum_params[2];else if(this.datum_type==Proj4js.common.PJD_7PARAM){var i=this.datum_params[0],s=this.datum_params[1],e=this.datum_params[2],o=this.datum_params[3],n=this.datum_params[4],a=this.datum_params[5],r=this.datum_params[6],h=(t.x-i)/r,l=(t.y-s)/r,c=(t.z-e)/r;t.x=h+a*l-n*c,t.y=-a*h+l+o*c,t.z=n*h-o*l+c}}}),Proj4js.Point=Proj4js.Class({initialize:function(t,i,s){if("object"==typeof t)this.x=t[0],this.y=t[1],this.z=t[2]||0;else if("string"==typeof t&&i===void 0){var e=t.split(",");this.x=parseFloat(e[0]),this.y=parseFloat(e[1]),this.z=parseFloat(e[2])||0}else this.x=t,this.y=i,this.z=s||0},clone:function(){return new Proj4js.Point(this.x,this.y,this.z)},toString:function(){return"x="+this.x+",y="+this.y},toShortString:function(){return this.x+", "+this.y}}),Proj4js.PrimeMeridian={greenwich:0,lisbon:-9.131906111111,paris:2.337229166667,bogota:-74.080916666667,madrid:-3.687938888889,rome:12.452333333333,bern:7.439583333333,jakarta:106.807719444444,ferro:-17.666666666667,brussels:4.367975,stockholm:18.058277777778,athens:23.7163375,oslo:10.722916666667},Proj4js.Ellipsoid={MERIT:{a:6378137,rf:298.257,ellipseName:"MERIT 1983"},SGS85:{a:6378136,rf:298.257,ellipseName:"Soviet Geodetic System 85"},GRS80:{a:6378137,rf:298.257222101,ellipseName:"GRS 1980(IUGG, 1980)"},IAU76:{a:6378140,rf:298.257,ellipseName:"IAU 1976"},airy:{a:6377563.396,b:6356256.91,ellipseName:"Airy 1830"},"APL4.":{a:6378137,rf:298.25,ellipseName:"Appl. Physics. 1965"},NWL9D:{a:6378145,rf:298.25,ellipseName:"Naval Weapons Lab., 1965"},mod_airy:{a:6377340.189,b:6356034.446,ellipseName:"Modified Airy"},andrae:{a:6377104.43,rf:300,ellipseName:"Andrae 1876 (Den., Iclnd.)"},aust_SA:{a:6378160,rf:298.25,ellipseName:"Australian Natl & S. Amer. 1969"},GRS67:{a:6378160,rf:298.247167427,ellipseName:"GRS 67(IUGG 1967)"},bessel:{a:6377397.155,rf:299.1528128,ellipseName:"Bessel 1841"},bess_nam:{a:6377483.865,rf:299.1528128,ellipseName:"Bessel 1841 (Namibia)"},clrk66:{a:6378206.4,b:6356583.8,ellipseName:"Clarke 1866"},clrk80:{a:6378249.145,rf:293.4663,ellipseName:"Clarke 1880 mod."},CPM:{a:6375738.7,rf:334.29,ellipseName:"Comm. des Poids et Mesures 1799"},delmbr:{a:6376428,rf:311.5,ellipseName:"Delambre 1810 (Belgium)"},engelis:{a:6378136.05,rf:298.2566,ellipseName:"Engelis 1985"},evrst30:{a:6377276.345,rf:300.8017,ellipseName:"Everest 1830"},evrst48:{a:6377304.063,rf:300.8017,ellipseName:"Everest 1948"},evrst56:{a:6377301.243,rf:300.8017,ellipseName:"Everest 1956"},evrst69:{a:6377295.664,rf:300.8017,ellipseName:"Everest 1969"},evrstSS:{a:6377298.556,rf:300.8017,ellipseName:"Everest (Sabah & Sarawak)"},fschr60:{a:6378166,rf:298.3,ellipseName:"Fischer (Mercury Datum) 1960"},fschr60m:{a:6378155,rf:298.3,ellipseName:"Fischer 1960"},fschr68:{a:6378150,rf:298.3,ellipseName:"Fischer 1968"},helmert:{a:6378200,rf:298.3,ellipseName:"Helmert 1906"},hough:{a:6378270,rf:297,ellipseName:"Hough"},intl:{a:6378388,rf:297,ellipseName:"International 1909 (Hayford)"},kaula:{a:6378163,rf:298.24,ellipseName:"Kaula 1961"},lerch:{a:6378139,rf:298.257,ellipseName:"Lerch 1979"},mprts:{a:6397300,rf:191,ellipseName:"Maupertius 1738"},new_intl:{a:6378157.5,b:6356772.2,ellipseName:"New International 1967"},plessis:{a:6376523,rf:6355863,ellipseName:"Plessis 1817 (France)"},krass:{a:6378245,rf:298.3,ellipseName:"Krassovsky, 1942"},SEasia:{a:6378155,b:6356773.3205,ellipseName:"Southeast Asia"},walbeck:{a:6376896,b:6355834.8467,ellipseName:"Walbeck"},WGS60:{a:6378165,rf:298.3,ellipseName:"WGS 60"},WGS66:{a:6378145,rf:298.25,ellipseName:"WGS 66"},WGS72:{a:6378135,rf:298.26,ellipseName:"WGS 72"},WGS84:{a:6378137,rf:298.257223563,ellipseName:"WGS 84"},sphere:{a:6370997,b:6370997,ellipseName:"Normal Sphere (r=6370997)"}},Proj4js.Datum={WGS84:{towgs84:"0,0,0",ellipse:"WGS84",datumName:"WGS84"},GGRS87:{towgs84:"-199.87,74.79,246.62",ellipse:"GRS80",datumName:"Greek_Geodetic_Reference_System_1987"},NAD83:{towgs84:"0,0,0",ellipse:"GRS80",datumName:"North_American_Datum_1983"},NAD27:{nadgrids:"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat",ellipse:"clrk66",datumName:"North_American_Datum_1927"},potsdam:{towgs84:"606.0,23.0,413.0",ellipse:"bessel",datumName:"Potsdam Rauenberg 1950 DHDN"},carthage:{towgs84:"-263.0,6.0,431.0",ellipse:"clark80",datumName:"Carthage 1934 Tunisia"},hermannskogel:{towgs84:"653.0,-212.0,449.0",ellipse:"bessel",datumName:"Hermannskogel"},ire65:{towgs84:"482.530,-130.596,564.557,-1.042,-0.214,-0.631,8.15",ellipse:"mod_airy",datumName:"Ireland 1965"},nzgd49:{towgs84:"59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993",ellipse:"intl",datumName:"New Zealand Geodetic Datum 1949"},OSGB36:{towgs84:"446.448,-125.157,542.060,0.1502,0.2470,0.8421,-20.4894",ellipse:"airy",datumName:"Airy 1830"}},Proj4js.WGS84=new Proj4js.Proj("WGS84"),Proj4js.Datum.OSB36=Proj4js.Datum.OSGB36,Proj4js.wktProjections={"Lambert Tangential Conformal Conic Projection":"lcc",Mercator:"merc","Popular Visualisation Pseudo Mercator":"merc",Mercator_1SP:"merc",Transverse_Mercator:"tmerc","Transverse Mercator":"tmerc","Lambert Azimuthal Equal Area":"laea","Universal Transverse Mercator System":"utm"},Proj4js.Proj.aea={init:function(){return Math.abs(this.lat1+this.lat2)Proj4js.common.EPSLN?(this.ms1*this.ms1-this.ms2*this.ms2)/(this.qs2-this.qs1):this.con,this.c=this.ms1*this.ms1+this.ns0*this.qs1,this.rh=this.a*Math.sqrt(this.c-this.ns0*this.qs0)/this.ns0,void 0)},forward:function(t){var i=t.x,s=t.y;this.sin_phi=Math.sin(s),this.cos_phi=Math.cos(s);var e=Proj4js.common.qsfnz(this.e3,this.sin_phi,this.cos_phi),o=this.a*Math.sqrt(this.c-this.ns0*e)/this.ns0,n=this.ns0*Proj4js.common.adjust_lon(i-this.long0),a=o*Math.sin(n)+this.x0,r=this.rh-o*Math.cos(n)+this.y0;return t.x=a,t.y=r,t},inverse:function(t){var i,s,e,o,n,a;return t.x-=this.x0,t.y=this.rh-t.y+this.y0,this.ns0>=0?(i=Math.sqrt(t.x*t.x+t.y*t.y),e=1):(i=-Math.sqrt(t.x*t.x+t.y*t.y),e=-1),o=0,0!=i&&(o=Math.atan2(e*t.x,e*t.y)),e=i*this.ns0/this.a,s=(this.c-e*e)/this.ns0,this.e3>=1e-10?(e=1-.5*(1-this.es)*Math.log((1-this.e3)/(1+this.e3))/this.e3,a=Math.abs(Math.abs(e)-Math.abs(s))>1e-10?this.phi1z(this.e3,s):s>=0?.5*Proj4js.common.PI:-.5*Proj4js.common.PI):a=this.phi1z(this.e3,s),n=Proj4js.common.adjust_lon(o/this.ns0+this.long0),t.x=n,t.y=a,t},phi1z:function(t,i){var s,e,o,n,a,r=Proj4js.common.asinz(.5*i);if(Proj4js.common.EPSLN>t)return r;for(var h=t*t,l=1;25>=l;l++)if(s=Math.sin(r),e=Math.cos(r),o=t*s,n=1-o*o,a=.5*n*n/e*(i/(1-h)-s/n+.5/t*Math.log((1-o)/(1+o))),r+=a,1e-7>=Math.abs(a))return r;return Proj4js.reportError("aea:phi1z:Convergence error"),null}},Proj4js.Proj.sterea={dependsOn:"gauss",init:function(){return Proj4js.Proj.gauss.init.apply(this),this.rc?(this.sinc0=Math.sin(this.phic0),this.cosc0=Math.cos(this.phic0),this.R2=2*this.rc,this.title||(this.title="Oblique Stereographic Alternative"),void 0):(Proj4js.reportError("sterea:init:E_ERROR_0"),void 0)},forward:function(t){var i,s,e,o;return t.x=Proj4js.common.adjust_lon(t.x-this.long0),Proj4js.Proj.gauss.forward.apply(this,[t]),i=Math.sin(t.y),s=Math.cos(t.y),e=Math.cos(t.x),o=this.k0*this.R2/(1+this.sinc0*i+this.cosc0*s*e),t.x=o*s*Math.sin(t.x),t.y=o*(this.cosc0*i-this.sinc0*s*e),t.x=this.a*t.x+this.x0,t.y=this.a*t.y+this.y0,t},inverse:function(t){var i,s,e,o,n;if(t.x=(t.x-this.x0)/this.a,t.y=(t.y-this.y0)/this.a,t.x/=this.k0,t.y/=this.k0,n=Math.sqrt(t.x*t.x+t.y*t.y)){var a=2*Math.atan2(n,this.R2);i=Math.sin(a),s=Math.cos(a),o=Math.asin(s*this.sinc0+t.y*i*this.cosc0/n),e=Math.atan2(t.x*i,n*this.cosc0*s-t.y*this.sinc0*i)}else o=this.phic0,e=0;return t.x=e,t.y=o,Proj4js.Proj.gauss.inverse.apply(this,[t]),t.x=Proj4js.common.adjust_lon(t.x+this.long0),t}},Proj4js.Proj.poly={init:function(){0==this.lat0&&(this.lat0=90),this.temp=this.b/this.a,this.es=1-Math.pow(this.temp,2),this.e=Math.sqrt(this.es),this.e0=Proj4js.common.e0fn(this.es),this.e1=Proj4js.common.e1fn(this.es),this.e2=Proj4js.common.e2fn(this.es),this.e3=Proj4js.common.e3fn(this.es),this.ml0=Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,this.lat0)},forward:function(t){var i,s,e,o,n,a,r,h=t.x,l=t.y;return e=Proj4js.common.adjust_lon(h-this.long0),1e-7>=Math.abs(l)?(a=this.x0+this.a*e,r=this.y0-this.a*this.ml0):(i=Math.sin(l),s=Math.cos(l),o=Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,l),n=Proj4js.common.msfnz(this.e,i,s),e=i,a=this.x0+this.a*n*Math.sin(e)/i,r=this.y0+this.a*(o-this.ml0+n*(1-Math.cos(e))/i)),t.x=a,t.y=r,t},inverse:function(t){var i,s,e,o,n,a;if(t.x-=this.x0,t.y-=this.y0,i=this.ml0+t.y/this.a,o=0,1e-7>=Math.abs(i))n=t.x/this.a+this.long0,a=0;else{if(s=i*i+t.x/this.a*(t.x/this.a),o=phi4z(this.es,this.e0,this.e1,this.e2,this.e3,this.al,s,e,a),1!=o)return o;n=Proj4js.common.adjust_lon(Proj4js.common.asinz(t.x*e/this.a)/Math.sin(a)+this.long0)}return t.x=n,t.y=a,t}},Proj4js.Proj.equi={init:function(){this.x0||(this.x0=0),this.y0||(this.y0=0),this.lat0||(this.lat0=0),this.long0||(this.long0=0)},forward:function(t){var i=t.x,s=t.y,e=Proj4js.common.adjust_lon(i-this.long0),o=this.x0+this.a*e*Math.cos(this.lat0),n=this.y0+this.a*s;return this.t1=o,this.t2=Math.cos(this.lat0),t.x=o,t.y=n,t},inverse:function(t){t.x-=this.x0,t.y-=this.y0;var i=t.y/this.a;Math.abs(i)>Proj4js.common.HALF_PI&&Proj4js.reportError("equi:Inv:DataError");var s=Proj4js.common.adjust_lon(this.long0+t.x/(this.a*Math.cos(this.lat0)));t.x=s,t.y=i}},Proj4js.Proj.merc={init:function(){this.lat_ts&&(this.k0=this.sphere?Math.cos(this.lat_ts):Proj4js.common.msfnz(this.es,Math.sin(this.lat_ts),Math.cos(this.lat_ts)))},forward:function(t){var i=t.x,s=t.y;if(s*Proj4js.common.R2D>90&&-90>s*Proj4js.common.R2D&&i*Proj4js.common.R2D>180&&-180>i*Proj4js.common.R2D)return Proj4js.reportError("merc:forward: llInputOutOfRange: "+i+" : "+s),null;var e,o;if(Math.abs(Math.abs(s)-Proj4js.common.HALF_PI)<=Proj4js.common.EPSLN)return Proj4js.reportError("merc:forward: ll2mAtPoles"),null;if(this.sphere)e=this.x0+this.a*this.k0*Proj4js.common.adjust_lon(i-this.long0),o=this.y0+this.a*this.k0*Math.log(Math.tan(Proj4js.common.FORTPI+.5*s));else{var n=Math.sin(s),a=Proj4js.common.tsfnz(this.e,s,n);e=this.x0+this.a*this.k0*Proj4js.common.adjust_lon(i-this.long0),o=this.y0-this.a*this.k0*Math.log(a)}return t.x=e,t.y=o,t},inverse:function(t){var i,s,e=t.x-this.x0,o=t.y-this.y0;if(this.sphere)s=Proj4js.common.HALF_PI-2*Math.atan(Math.exp(-o/this.a*this.k0));else{var n=Math.exp(-o/(this.a*this.k0));if(s=Proj4js.common.phi2z(this.e,n),-9999==s)return Proj4js.reportError("merc:inverse: lat = -9999"),null}return i=Proj4js.common.adjust_lon(this.long0+e/(this.a*this.k0)),t.x=i,t.y=s,t}},Proj4js.Proj.utm={dependsOn:"tmerc",init:function(){return this.zone?(this.lat0=0,this.long0=(6*Math.abs(this.zone)-183)*Proj4js.common.D2R,this.x0=5e5,this.y0=this.utmSouth?1e7:0,this.k0=.9996,Proj4js.Proj.tmerc.init.apply(this),this.forward=Proj4js.Proj.tmerc.forward,this.inverse=Proj4js.Proj.tmerc.inverse,void 0):(Proj4js.reportError("utm:init: zone must be specified for UTM"),void 0)}},Proj4js.Proj.eqdc={init:function(){this.mode||(this.mode=0),this.temp=this.b/this.a,this.es=1-Math.pow(this.temp,2),this.e=Math.sqrt(this.es),this.e0=Proj4js.common.e0fn(this.es),this.e1=Proj4js.common.e1fn(this.es),this.e2=Proj4js.common.e2fn(this.es),this.e3=Proj4js.common.e3fn(this.es),this.sinphi=Math.sin(this.lat1),this.cosphi=Math.cos(this.lat1),this.ms1=Proj4js.common.msfnz(this.e,this.sinphi,this.cosphi),this.ml1=Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,this.lat1),0!=this.mode?(Math.abs(this.lat1+this.lat2)=Proj4js.common.EPSLN?(this.ms1-this.ms2)/(this.ml2-this.ml1):this.sinphi):this.ns=this.sinphi,this.g=this.ml1+this.ms1/this.ns,this.ml0=Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,this.lat0),this.rh=this.a*(this.g-this.ml0)},forward:function(t){var i=t.x,s=t.y,e=Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,s),o=this.a*(this.g-e),n=this.ns*Proj4js.common.adjust_lon(i-this.long0),a=this.x0+o*Math.sin(n),r=this.y0+this.rh-o*Math.cos(n);return t.x=a,t.y=r,t},inverse:function(t){t.x-=this.x0,t.y=this.rh-t.y+this.y0;var i,s;this.ns>=0?(s=Math.sqrt(t.x*t.x+t.y*t.y),i=1):(s=-Math.sqrt(t.x*t.x+t.y*t.y),i=-1);var e=0;0!=s&&(e=Math.atan2(i*t.x,i*t.y));var o=this.g-s/this.a,n=this.phi3z(o,this.e0,this.e1,this.e2,this.e3),a=Proj4js.common.adjust_lon(this.long0+e/this.ns);return t.x=a,t.y=n,t},phi3z:function(t,i,s,e,o){var n,a;n=t;for(var r=0;15>r;r++)if(a=(t+s*Math.sin(2*n)-e*Math.sin(4*n)+o*Math.sin(6*n))/i-n,n+=a,1e-10>=Math.abs(a))return n;return Proj4js.reportError("PHI3Z-CONV:Latitude failed to converge after 15 iterations"),null}},Proj4js.Proj.tmerc={init:function(){this.e0=Proj4js.common.e0fn(this.es),this.e1=Proj4js.common.e1fn(this.es),this.e2=Proj4js.common.e2fn(this.es),this.e3=Proj4js.common.e3fn(this.es),this.ml0=this.a*Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,this.lat0)},forward:function(t){var i,s,e,o=t.x,n=t.y,a=Proj4js.common.adjust_lon(o-this.long0),r=Math.sin(n),h=Math.cos(n);if(this.sphere){var l=h*Math.sin(a);if(1e-10>Math.abs(Math.abs(l)-1))return Proj4js.reportError("tmerc:forward: Point projects into infinity"),93;s=.5*this.a*this.k0*Math.log((1+l)/(1-l)),i=Math.acos(h*Math.cos(a)/Math.sqrt(1-l*l)),0>n&&(i=-i),e=this.a*this.k0*(i-this.lat0)}else{var c=h*a,m=Math.pow(c,2),u=this.ep2*Math.pow(h,2),d=Math.tan(n),p=Math.pow(d,2);i=1-this.es*Math.pow(r,2);var _=this.a/Math.sqrt(i),f=this.a*Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,n);s=this.k0*_*c*(1+m/6*(1-p+u+m/20*(5-18*p+Math.pow(p,2)+72*u-58*this.ep2)))+this.x0,e=this.k0*(f-this.ml0+_*d*m*(.5+m/24*(5-p+9*u+4*Math.pow(u,2)+m/30*(61-58*p+Math.pow(p,2)+600*u-330*this.ep2))))+this.y0}return t.x=s,t.y=e,t},inverse:function(t){var i,s,e,o,n,a,r=6;if(this.sphere){var h=Math.exp(t.x/(this.a*this.k0)),l=.5*(h-1/h),c=this.lat0+t.y/(this.a*this.k0),m=Math.cos(c);i=Math.sqrt((1-m*m)/(1+l*l)),n=Proj4js.common.asinz(i),0>c&&(n=-n),a=0==l&&0==m?this.long0:Proj4js.common.adjust_lon(Math.atan2(l,m)+this.long0)}else{var u=t.x-this.x0,d=t.y-this.y0;for(i=(this.ml0+d/this.k0)/this.a,s=i,o=0;!0&&(e=(i+this.e1*Math.sin(2*s)-this.e2*Math.sin(4*s)+this.e3*Math.sin(6*s))/this.e0-s,s+=e,!(Math.abs(e)<=Proj4js.common.EPSLN));o++)if(o>=r)return Proj4js.reportError("tmerc:inverse: Latitude failed to converge"),95;if(Math.abs(s)0||Math.abs(a)<=Proj4js.common.EPSLN)var l=this.a*n*s*Math.sin(e),c=this.y0+this.a*n*(this.cos_p14*i-this.sin_p14*s*o);else Proj4js.reportError("orthoFwdPointError");return t.x=l,t.y=c,t},inverse:function(t){var i,s,e,o,n,a,r;return t.x-=this.x0,t.y-=this.y0,i=Math.sqrt(t.x*t.x+t.y*t.y),i>this.a+1e-7&&Proj4js.reportError("orthoInvDataError"),s=Proj4js.common.asinz(i/this.a),e=Math.sin(s),o=Math.cos(s),a=this.long0,Math.abs(i)<=Proj4js.common.EPSLN&&(r=this.lat0),r=Proj4js.common.asinz(o*this.sin_p14+t.y*e*this.cos_p14/i),n=Math.abs(this.lat0)-Proj4js.common.HALF_PI,Math.abs(n)<=Proj4js.common.EPSLN&&(a=this.lat0>=0?Proj4js.common.adjust_lon(this.long0+Math.atan2(t.x,-t.y)):Proj4js.common.adjust_lon(this.long0-Math.atan2(-t.x,t.y))),n=o-this.sin_p14*Math.sin(r),t.x=a,t.y=r,t}},Proj4js.Proj.krovak={init:function(){this.a=6377397.155,this.es=.006674372230614,this.e=Math.sqrt(this.es),this.lat0||(this.lat0=.863937979737193),this.long0||(this.long0=.4334234309119251),this.k0||(this.k0=.9999),this.s45=.785398163397448,this.s90=2*this.s45,this.fi0=this.lat0,this.e2=this.es,this.e=Math.sqrt(this.e2),this.alfa=Math.sqrt(1+this.e2*Math.pow(Math.cos(this.fi0),4)/(1-this.e2)),this.uq=1.04216856380474,this.u0=Math.asin(Math.sin(this.fi0)/this.alfa),this.g=Math.pow((1+this.e*Math.sin(this.fi0))/(1-this.e*Math.sin(this.fi0)),this.alfa*this.e/2),this.k=Math.tan(this.u0/2+this.s45)/Math.pow(Math.tan(this.fi0/2+this.s45),this.alfa)*this.g,this.k1=this.k0,this.n0=this.a*Math.sqrt(1-this.e2)/(1-this.e2*Math.pow(Math.sin(this.fi0),2)),this.s0=1.37008346281555,this.n=Math.sin(this.s0),this.ro0=this.k1*this.n0/Math.tan(this.s0),this.ad=this.s90-this.uq},forward:function(t){var i,s,e,o,n,a,r,h=t.x,l=t.y,c=Proj4js.common.adjust_lon(h-this.long0);return i=Math.pow((1+this.e*Math.sin(l))/(1-this.e*Math.sin(l)),this.alfa*this.e/2),s=2*(Math.atan(this.k*Math.pow(Math.tan(l/2+this.s45),this.alfa)/i)-this.s45),e=-c*this.alfa,o=Math.asin(Math.cos(this.ad)*Math.sin(s)+Math.sin(this.ad)*Math.cos(s)*Math.cos(e)),n=Math.asin(Math.cos(s)*Math.sin(e)/Math.cos(o)),a=this.n*n,r=this.ro0*Math.pow(Math.tan(this.s0/2+this.s45),this.n)/Math.pow(Math.tan(o/2+this.s45),this.n),t.y=r*Math.cos(a)/1,t.x=r*Math.sin(a)/1,this.czech&&(t.y*=-1,t.x*=-1),t},inverse:function(t){var i,s,e,o,n,a,r,h,l=t.x;t.x=t.y,t.y=l,this.czech&&(t.y*=-1,t.x*=-1),a=Math.sqrt(t.x*t.x+t.y*t.y),n=Math.atan2(t.y,t.x),o=n/Math.sin(this.s0),e=2*(Math.atan(Math.pow(this.ro0/a,1/this.n)*Math.tan(this.s0/2+this.s45))-this.s45),i=Math.asin(Math.cos(this.ad)*Math.sin(e)-Math.sin(this.ad)*Math.cos(e)*Math.cos(o)),s=Math.asin(Math.cos(e)*Math.sin(o)/Math.cos(i)),t.x=this.long0-s/this.alfa,r=i,h=0;var c=0;do t.y=2*(Math.atan(Math.pow(this.k,-1/this.alfa)*Math.pow(Math.tan(i/2+this.s45),1/this.alfa)*Math.pow((1+this.e*Math.sin(r))/(1-this.e*Math.sin(r)),this.e/2))-this.s45),1e-10>Math.abs(r-t.y)&&(h=1),r=t.y,c+=1;while(0==h&&15>c);return c>=15?(Proj4js.reportError("PHI3Z-CONV:Latitude failed to converge after 15 iterations"),null):t}},Proj4js.Proj.somerc={init:function(){var t=this.lat0;this.lambda0=this.long0;var i=Math.sin(t),s=this.a,e=this.rf,o=1/e,n=2*o-Math.pow(o,2),a=this.e=Math.sqrt(n);this.R=this.k0*s*Math.sqrt(1-n)/(1-n*Math.pow(i,2)),this.alpha=Math.sqrt(1+n/(1-n)*Math.pow(Math.cos(t),4)),this.b0=Math.asin(i/this.alpha),this.K=Math.log(Math.tan(Math.PI/4+this.b0/2))-this.alpha*Math.log(Math.tan(Math.PI/4+t/2))+this.alpha*a/2*Math.log((1+a*i)/(1-a*i))},forward:function(t){var i=Math.log(Math.tan(Math.PI/4-t.y/2)),s=this.e/2*Math.log((1+this.e*Math.sin(t.y))/(1-this.e*Math.sin(t.y))),e=-this.alpha*(i+s)+this.K,o=2*(Math.atan(Math.exp(e))-Math.PI/4),n=this.alpha*(t.x-this.lambda0),a=Math.atan(Math.sin(n)/(Math.sin(this.b0)*Math.tan(o)+Math.cos(this.b0)*Math.cos(n))),r=Math.asin(Math.cos(this.b0)*Math.sin(o)-Math.sin(this.b0)*Math.cos(o)*Math.cos(n));return t.y=this.R/2*Math.log((1+Math.sin(r))/(1-Math.sin(r)))+this.y0,t.x=this.R*a+this.x0,t},inverse:function(t){for(var i=t.x-this.x0,s=t.y-this.y0,e=i/this.R,o=2*(Math.atan(Math.exp(s/this.R))-Math.PI/4),n=Math.asin(Math.cos(this.b0)*Math.sin(o)+Math.sin(this.b0)*Math.cos(o)*Math.cos(e)),a=Math.atan(Math.sin(e)/(Math.cos(this.b0)*Math.cos(e)-Math.sin(this.b0)*Math.tan(o))),r=this.lambda0+a/this.alpha,h=0,l=n,c=-1e3,m=0;Math.abs(l-c)>1e-7;){if(++m>20)return Proj4js.reportError("omercFwdInfinity"),void 0;h=1/this.alpha*(Math.log(Math.tan(Math.PI/4+n/2))-this.K)+this.e*Math.log(Math.tan(Math.PI/4+Math.asin(this.e*Math.sin(l))/2)),c=l,l=2*Math.atan(Math.exp(h))-Math.PI/2}return t.x=r,t.y=l,t}},Proj4js.Proj.stere={ssfn_:function(t,i,s){return i*=s,Math.tan(.5*(Proj4js.common.HALF_PI+t))*Math.pow((1-i)/(1+i),.5*s)},TOL:1e-8,NITER:8,CONV:1e-10,S_POLE:0,N_POLE:1,OBLIQ:2,EQUIT:3,init:function(){this.phits=this.lat_ts?this.lat_ts:Proj4js.common.HALF_PI;var t=Math.abs(this.lat0);if(this.mode=Math.abs(t)-Proj4js.common.HALF_PIthis.lat0?this.S_POLE:this.N_POLE:t>Proj4js.common.EPSLN?this.OBLIQ:this.EQUIT,this.phits=Math.abs(this.phits),this.es){var i;switch(this.mode){case this.N_POLE:case this.S_POLE:Math.abs(this.phits-Proj4js.common.HALF_PI)=Proj4js.common.EPSLN?Math.cos(this.phits)/Math.tan(Proj4js.common.FORTPI-.5*this.phits):2*this.k0}},forward:function(t){var i=t.x;i=Proj4js.common.adjust_lon(i-this.long0);var s,e,o=t.y;if(this.sphere){var n,a,r,h;switch(n=Math.sin(o),a=Math.cos(o),r=Math.cos(i),h=Math.sin(i),this.mode){case this.EQUIT:e=1+a*r,Proj4js.common.EPSLN>=e&&Proj4js.reportError("stere:forward:Equit"),e=this.akm1/e,s=e*a*h,e*=n;break;case this.OBLIQ:e=1+this.sinph0*n+this.cosph0*a*r,Proj4js.common.EPSLN>=e&&Proj4js.reportError("stere:forward:Obliq"),e=this.akm1/e,s=e*a*h,e*=this.cosph0*n-this.sinph0*a*r;break;case this.N_POLE:r=-r,o=-o;case this.S_POLE:Math.abs(o-Proj4js.common.HALF_PI)=l;l++)r*=n,h+=this.A[l]*r;for(var c,m,u=h,d=a,p=1,_=0,f=0,P=0,l=1;6>=l;l++)c=p*u-_*d,m=_*u+p*d,p=c,_=m,f=f+this.B_re[l]*p-this.B_im[l]*_,P=P+this.B_im[l]*p+this.B_re[l]*_;return t.x=P*this.a+this.x0,t.y=f*this.a+this.y0,t},inverse:function(t){for(var i,s,e=t.x,o=t.y,n=e-this.x0,a=o-this.y0,r=a/this.a,h=n/this.a,l=1,c=0,m=0,u=0,d=1;6>=d;d++)i=l*r-c*h,s=c*r+l*h,l=i,c=s,m=m+this.C_re[d]*l-this.C_im[d]*c,u=u+this.C_im[d]*l+this.C_re[d]*c;for(var p=0;this.iterations>p;p++){for(var _,f,P=m,y=u,g=r,L=h,d=2;6>=d;d++)_=P*m-y*u,f=y*m+P*u,P=_,y=f,g+=(d-1)*(this.B_re[d]*P-this.B_im[d]*y),L+=(d-1)*(this.B_im[d]*P+this.B_re[d]*y);P=1,y=0;for(var v=this.B_re[1],j=this.B_im[1],d=2;6>=d;d++)_=P*m-y*u,f=y*m+P*u,P=_,y=f,v+=d*(this.B_re[d]*P-this.B_im[d]*y),j+=d*(this.B_im[d]*P+this.B_re[d]*y);var M=v*v+j*j;m=(g*v+L*j)/M,u=(L*v-g*j)/M}for(var S=m,b=u,x=1,E=0,d=1;9>=d;d++)x*=S,E+=this.D[d]*x;var C=this.lat0+1e5*E*Proj4js.common.SEC_TO_RAD,w=this.long0+b;return t.x=w,t.y=C,t}},Proj4js.Proj.mill={init:function(){},forward:function(t){var i=t.x,s=t.y,e=Proj4js.common.adjust_lon(i-this.long0),o=this.x0+this.a*e,n=this.y0+1.25*this.a*Math.log(Math.tan(Proj4js.common.PI/4+s/2.5));return t.x=o,t.y=n,t},inverse:function(t){t.x-=this.x0,t.y-=this.y0;var i=Proj4js.common.adjust_lon(this.long0+t.x/this.a),s=2.5*(Math.atan(Math.exp(.8*t.y/this.a))-Proj4js.common.PI/4);return t.x=i,t.y=s,t}},Proj4js.Proj.gnom={init:function(){this.sin_p14=Math.sin(this.lat0),this.cos_p14=Math.cos(this.lat0),this.infinity_dist=1e3*this.a,this.rc=1},forward:function(t){var i,s,e,o,n,a,r,h,l=t.x,c=t.y;return e=Proj4js.common.adjust_lon(l-this.long0),i=Math.sin(c),s=Math.cos(c),o=Math.cos(e),a=this.sin_p14*i+this.cos_p14*s*o,n=1,a>0||Math.abs(a)<=Proj4js.common.EPSLN?(r=this.x0+this.a*n*s*Math.sin(e)/a,h=this.y0+this.a*n*(this.cos_p14*i-this.sin_p14*s*o)/a):(Proj4js.reportError("orthoFwdPointError"),r=this.x0+this.infinity_dist*s*Math.sin(e),h=this.y0+this.infinity_dist*(this.cos_p14*i-this.sin_p14*s*o)),t.x=r,t.y=h,t},inverse:function(t){var i,s,e,o,n,a;return t.x=(t.x-this.x0)/this.a,t.y=(t.y-this.y0)/this.a,t.x/=this.k0,t.y/=this.k0,(i=Math.sqrt(t.x*t.x+t.y*t.y))?(o=Math.atan2(i,this.rc),s=Math.sin(o),e=Math.cos(o),a=Proj4js.common.asinz(e*this.sin_p14+t.y*s*this.cos_p14/i),n=Math.atan2(t.x*s,i*this.cos_p14*e-t.y*this.sin_p14*s),n=Proj4js.common.adjust_lon(this.long0+n)):(a=this.phic0,n=0),t.x=n,t.y=a,t}},Proj4js.Proj.sinu={init:function(){this.sphere?(this.n=1,this.m=0,this.es=0,this.C_y=Math.sqrt((this.m+1)/this.n),this.C_x=this.C_y/(this.m+1)):this.en=Proj4js.common.pj_enfn(this.es)},forward:function(t){var i,s,e=t.x,o=t.y;if(e=Proj4js.common.adjust_lon(e-this.long0),this.sphere){if(this.m)for(var n=this.n*Math.sin(o),a=Proj4js.common.MAX_ITER;a;--a){var r=(this.m*o+Math.sin(o)-n)/(this.m+Math.cos(o));if(o-=r,Math.abs(r)o?(o=Math.sin(i),s=this.long0+t.x*Math.sqrt(1-this.es*o*o)/(this.a*Math.cos(i)),e=Proj4js.common.adjust_lon(s)):o-Proj4js.common.EPSLN=0?this.y0+Proj4js.common.PI*this.R*Math.tan(.5*a):this.y0+Proj4js.common.PI*this.R*-Math.tan(.5*a));var r=.5*Math.abs(Proj4js.common.PI/n-n/Proj4js.common.PI),h=r*r,l=Math.sin(a),c=Math.cos(a),m=c/(l+c-1),u=m*m,d=m*(2/l-1),p=d*d,_=Proj4js.common.PI*this.R*(r*(m-p)+Math.sqrt(h*(m-p)*(m-p)-(p+h)*(u-p)))/(p+h);return 0>n&&(_=-_),i=this.x0+_,_=Math.abs(_/(Proj4js.common.PI*this.R)),s=o>=0?this.y0+Proj4js.common.PI*this.R*Math.sqrt(1-_*_-2*r*_):this.y0-Proj4js.common.PI*this.R*Math.sqrt(1-_*_-2*r*_),t.x=i,t.y=s,t},inverse:function(t){var i,s,e,o,n,a,r,h,l,c,m,u,d;return t.x-=this.x0,t.y-=this.y0,m=Proj4js.common.PI*this.R,e=t.x/m,o=t.y/m,n=e*e+o*o,a=-Math.abs(o)*(1+n),r=a-2*o*o+e*e,h=-2*a+1+2*o*o+n*n,d=o*o/h+(2*r*r*r/h/h/h-9*a*r/h/h)/27,l=(a-r*r/3/h)/h,c=2*Math.sqrt(-l/3),m=3*d/l/c,Math.abs(m)>1&&(m=m>=0?1:-1),u=Math.acos(m)/3,s=t.y>=0?(-c*Math.cos(u+Proj4js.common.PI/3)-r/3/h)*Proj4js.common.PI:-(-c*Math.cos(u+Proj4js.common.PI/3)-r/3/h)*Proj4js.common.PI,Math.abs(e)0&&(e=2*Math.atan(o*Proj4js.common.srat(this.e*Math.sin(t.y),-.5*this.e))-Proj4js.common.HALF_PI,!(i>Math.abs(e-t.y)));--n)t.y=e;return n?(t.x=s,t.y=e,t):(Proj4js.reportError("gauss:inverse:convergence failed"),null)}},Proj4js.Proj.omerc={init:function(){this.mode||(this.mode=0),this.lon1||(this.lon1=0,this.mode=1),this.lon2||(this.lon2=0),this.lat2||(this.lat2=0);var t=this.b/this.a,i=1-Math.pow(t,2);Math.sqrt(i),this.sin_p20=Math.sin(this.lat0),this.cos_p20=Math.cos(this.lat0),this.con=1-this.es*this.sin_p20*this.sin_p20,this.com=Math.sqrt(1-i),this.bl=Math.sqrt(1+this.es*Math.pow(this.cos_p20,4)/(1-i)),this.al=this.a*this.bl*this.k0*this.com/this.con,Math.abs(this.lat0)0?this.lat0>=0?this.d+Math.sqrt(this.d*this.d-1):this.d-Math.sqrt(this.d*this.d-1):this.d,this.el=this.f*Math.pow(this.ts,this.bl)),0!=this.mode?(this.g=.5*(this.f-1/this.f),this.gama=Proj4js.common.asinz(Math.sin(this.alpha)/this.d),this.longc=this.longc-Proj4js.common.asinz(this.g*Math.tan(this.gama))/this.bl,this.con=Math.abs(this.lat0),this.con>Proj4js.common.EPSLN&&Math.abs(this.con-Proj4js.common.HALF_PI)>Proj4js.common.EPSLN?(this.singam=Math.sin(this.gama),this.cosgam=Math.cos(this.gama),this.sinaz=Math.sin(this.alpha),this.cosaz=Math.cos(this.alpha),this.u=this.lat0>=0?this.al/this.bl*Math.atan(Math.sqrt(this.d*this.d-1)/this.cosaz):-(this.al/this.bl)*Math.atan(Math.sqrt(this.d*this.d-1)/this.cosaz)):Proj4js.reportError("omerc:Init:DataError")):(this.sinphi=Math.sin(this.at1),this.ts1=Proj4js.common.tsfnz(this.e,this.lat1,this.sinphi),this.sinphi=Math.sin(this.lat2),this.ts2=Proj4js.common.tsfnz(this.e,this.lat2,this.sinphi),this.h=Math.pow(this.ts1,this.bl),this.l=Math.pow(this.ts2,this.bl),this.f=this.el/this.h,this.g=.5*(this.f-1/this.f),this.j=(this.el*this.el-this.l*this.h)/(this.el*this.el+this.l*this.h),this.p=(this.l-this.h)/(this.l+this.h),this.dlon=this.lon1-this.lon2,this.dlon<-Proj4js.common.PI&&(this.lon2=this.lon2-2*Proj4js.common.PI),this.dlon>Proj4js.common.PI&&(this.lon2=this.lon2+2*Proj4js.common.PI),this.dlon=this.lon1-this.lon2,this.longc=.5*(this.lon1+this.lon2)-Math.atan(this.j*Math.tan(.5*this.bl*this.dlon)/this.p)/this.bl,this.dlon=Proj4js.common.adjust_lon(this.lon1-this.longc),this.gama=Math.atan(Math.sin(this.bl*this.dlon)/this.g),this.alpha=Proj4js.common.asinz(this.d*Math.sin(this.gama)),Math.abs(this.lat1-this.lat2)<=Proj4js.common.EPSLN?Proj4js.reportError("omercInitDataError"):this.con=Math.abs(this.lat1),this.con<=Proj4js.common.EPSLN||Math.abs(this.con-Proj4js.common.HALF_PI)<=Proj4js.common.EPSLN?Proj4js.reportError("omercInitDataError"):Math.abs(Math.abs(this.lat0)-Proj4js.common.HALF_PI)<=Proj4js.common.EPSLN&&Proj4js.reportError("omercInitDataError"),this.singam=Math.sin(this.gam),this.cosgam=Math.cos(this.gam),this.sinaz=Math.sin(this.alpha),this.cosaz=Math.cos(this.alpha),this.u=this.lat0>=0?this.al/this.bl*Math.atan(Math.sqrt(this.d*this.d-1)/this.cosaz):-(this.al/this.bl)*Math.atan(Math.sqrt(this.d*this.d-1)/this.cosaz))},forward:function(t){var i,s,e,o,n,a,r,h,l,c,m,u=t.x,d=t.y;i=Math.sin(d),c=Proj4js.common.adjust_lon(u-this.longc),a=Math.sin(this.bl*c),Math.abs(Math.abs(d)-Proj4js.common.HALF_PI)>Proj4js.common.EPSLN?(m=Proj4js.common.tsfnz(this.e,d,i),o=this.el/Math.pow(m,this.bl),l=.5*(o-1/o),s=.5*(o+1/o),r=(l*this.singam-a*this.cosgam)/s,e=Math.cos(this.bl*c),1e-7>Math.abs(e)?n=this.al*this.bl*c:(n=this.al*Math.atan((l*this.cosgam+a*this.singam)/e)/this.bl,0>e&&(n+=Proj4js.common.PI*this.al/this.bl))):(r=d>=0?this.singam:-this.singam,n=this.al*d/this.bl),Math.abs(Math.abs(r)-1)<=Proj4js.common.EPSLN&&Proj4js.reportError("omercFwdInfinity"),h=.5*this.al*Math.log((1-r)/(1+r))/this.bl,n-=this.u;var p=this.x0+h*this.cosaz+n*this.sinaz,_=this.y0+n*this.cosaz-h*this.sinaz;return t.x=p,t.y=_,t},inverse:function(t){var i,s,e,o,n,a,r,h,l,c,m,u,d;return t.x-=this.x0,t.y-=this.y0,d=0,o=t.x*this.cosaz-t.y*this.sinaz,n=t.y*this.cosaz+t.x*this.sinaz,n+=this.u,a=Math.exp(-this.bl*o/this.al),r=.5*(a-1/a),s=.5*(a+1/a),l=Math.sin(this.bl*n/this.al),c=(l*this.cosgam+r*this.singam)/s,Math.abs(Math.abs(c)-1)<=Proj4js.common.EPSLN?(m=this.longc,u=c>=0?Proj4js.common.HALF_PI:-Proj4js.common.HALF_PI):(e=1/this.bl,h=Math.pow(this.el/Math.sqrt((1+c)/(1-c)),e),u=Proj4js.common.phi2z(this.e,h),i=this.longc-Math.atan2(r*this.cosgam-l*this.singam,e)/this.bl,m=Proj4js.common.adjust_lon(i)),t.x=m,t.y=u,t}},Proj4js.Proj.lcc={init:function(){if(this.lat2||(this.lat2=this.lat0),this.k0||(this.k0=1),Math.abs(this.lat1+this.lat2)Proj4js.common.EPSLN?Math.log(e/r)/Math.log(o/h):i,this.f0=e/(this.ns*Math.pow(o,this.ns)),this.rh=this.a*this.f0*Math.pow(l,this.ns),this.title||(this.title="Lambert Conformal Conic")},forward:function(t){var i=t.x,s=t.y;if(!(90>=s&&s>=-90&&180>=i&&i>=-180))return Proj4js.reportError("lcc:forward: llInputOutOfRange: "+i+" : "+s),null;var e,o,n=Math.abs(Math.abs(s)-Proj4js.common.HALF_PI);if(n>Proj4js.common.EPSLN)e=Proj4js.common.tsfnz(this.e,s,Math.sin(s)),o=this.a*this.f0*Math.pow(e,this.ns);else{if(n=s*this.ns,0>=n)return Proj4js.reportError("lcc:forward: No Projection"),null;o=0}var a=this.ns*Proj4js.common.adjust_lon(i-this.long0);return t.x=this.k0*o*Math.sin(a)+this.x0,t.y=this.k0*(this.rh-o*Math.cos(a))+this.y0,t},inverse:function(t){var i,s,e,o,n,a=(t.x-this.x0)/this.k0,r=this.rh-(t.y-this.y0)/this.k0;this.ns>0?(i=Math.sqrt(a*a+r*r),s=1):(i=-Math.sqrt(a*a+r*r),s=-1);var h=0;if(0!=i&&(h=Math.atan2(s*a,s*r)),0!=i||this.ns>0){if(s=1/this.ns,e=Math.pow(i/(this.a*this.f0),s),o=Proj4js.common.phi2z(this.e,e),-9999==o)return null}else o=-Proj4js.common.HALF_PI;return n=Proj4js.common.adjust_lon(h/this.ns+this.long0),t.x=n,t.y=o,t}},Proj4js.Proj.laea={S_POLE:1,N_POLE:2,EQUIT:3,OBLIQ:4,init:function(){var t=Math.abs(this.lat0);if(this.mode=Math.abs(t-Proj4js.common.HALF_PI)this.lat0?this.S_POLE:this.N_POLE:Math.abs(t)0){var i;switch(this.qp=Proj4js.common.qsfnz(this.e,1),this.mmf=.5/(1-this.es),this.apa=this.authset(this.es),this.mode){case this.N_POLE:case this.S_POLE:this.dd=1;break;case this.EQUIT:this.rq=Math.sqrt(.5*this.qp),this.dd=1/this.rq,this.xmf=1,this.ymf=.5*this.qp;break;case this.OBLIQ:this.rq=Math.sqrt(.5*this.qp),i=Math.sin(this.lat0),this.sinb1=Proj4js.common.qsfnz(this.e,i)/this.qp,this.cosb1=Math.sqrt(1-this.sinb1*this.sinb1),this.dd=Math.cos(this.lat0)/(Math.sqrt(1-this.es*i*i)*this.rq*this.cosb1),this.ymf=(this.xmf=this.rq)/this.dd,this.xmf*=this.dd}}else this.mode==this.OBLIQ&&(this.sinph0=Math.sin(this.lat0),this.cosph0=Math.cos(this.lat0))},forward:function(t){var i,s,e=t.x,o=t.y;if(e=Proj4js.common.adjust_lon(e-this.long0),this.sphere){var n,a,r;switch(r=Math.sin(o),a=Math.cos(o),n=Math.cos(e),this.mode){case this.OBLIQ:case this.EQUIT:if(s=this.mode==this.EQUIT?1+a*n:1+this.sinph0*r+this.cosph0*a*n,Proj4js.common.EPSLN>=s)return Proj4js.reportError("laea:fwd:y less than eps"),null;s=Math.sqrt(2/s),i=s*a*Math.sin(e),s*=this.mode==this.EQUIT?r:this.cosph0*r-this.sinph0*a*n;break;case this.N_POLE:n=-n;case this.S_POLE:if(Math.abs(o+this.phi0)=0?(i=(u=Math.sqrt(l))*h,s=n*(this.mode==this.S_POLE?u:-u)):i=s=0}}return t.x=this.a*i+this.x0,t.y=this.a*s+this.y0,t},inverse:function(t){t.x-=this.x0,t.y-=this.y0;var i,s,e=t.x/this.a,o=t.y/this.a;if(this.sphere){var n,a=0,r=0;if(n=Math.sqrt(e*e+o*o),s=.5*n,s>1)return Proj4js.reportError("laea:Inv:DataError"),null;switch(s=2*Math.asin(s),(this.mode==this.OBLIQ||this.mode==this.EQUIT)&&(r=Math.sin(s),a=Math.cos(s)),this.mode){case this.EQUIT:s=Math.abs(n)<=Proj4js.common.EPSLN?0:Math.asin(o*r/n),e*=r,o=a*n;break;case this.OBLIQ:s=Math.abs(n)<=Proj4js.common.EPSLN?this.phi0:Math.asin(a*this.sinph0+o*r*this.cosph0/n),e*=r*this.cosph0,o=(a-Math.sin(s)*this.sinph0)*n;break;case this.N_POLE:o=-o,s=Proj4js.common.HALF_PI-s;break;case this.S_POLE:s-=Proj4js.common.HALF_PI}i=0!=o||this.mode!=this.EQUIT&&this.mode!=this.OBLIQ?Math.atan2(e,o):0}else{var h,l,c,m,u=0;switch(this.mode){case this.EQUIT:case this.OBLIQ:if(e/=this.dd,o*=this.dd,m=Math.sqrt(e*e+o*o),Proj4js.common.EPSLN>m)return t.x=0,t.y=this.phi0,t;l=2*Math.asin(.5*m/this.rq),h=Math.cos(l),e*=l=Math.sin(l),this.mode==this.OBLIQ?(u=h*this.sinb1+o*l*this.cosb1/m,c=this.qp*u,o=m*this.cosb1*h-o*this.sinb1*l):(u=o*l/m,c=this.qp*u,o=m*h);break;case this.N_POLE:o=-o;case this.S_POLE:if(c=e*e+o*o,!c)return t.x=0,t.y=this.phi0,t;u=1-c/this.qp,this.mode==this.S_POLE&&(u=-u)}i=Math.atan2(e,o),s=this.authlat(Math.asin(u),this.apa)}return t.x=Proj4js.common.adjust_lon(this.long0+i),t.y=s,t},P00:.3333333333333333,P01:.17222222222222222,P02:.10257936507936508,P10:.06388888888888888,P11:.0664021164021164,P20:.016415012942191543,authset:function(t){var i,s=[];return s[0]=t*this.P00,i=t*t,s[0]+=i*this.P01,s[1]=i*this.P10,i*=t,s[0]+=i*this.P02,s[1]+=i*this.P11,s[2]=i*this.P20,s},authlat:function(t,i){var s=t+t;return t+i[0]*Math.sin(s)+i[1]*Math.sin(s+s)+i[2]*Math.sin(s+s+s)}},Proj4js.Proj.aeqd={init:function(){this.sin_p12=Math.sin(this.lat0),this.cos_p12=Math.cos(this.lat0)},forward:function(t){var i=t.x;t.y;var s,e=Math.sin(t.y),o=Math.cos(t.y),n=Proj4js.common.adjust_lon(i-this.long0),a=Math.cos(n),r=this.sin_p12*e+this.cos_p12*o*a;if(Math.abs(Math.abs(r)-1)r)return Proj4js.reportError("aeqd:Fwd:PointError"),void 0}else{var h=Math.acos(r);s=h/Math.sin(h)}return t.x=this.x0+this.a*s*o*Math.sin(n),t.y=this.y0+this.a*s*(this.cos_p12*e-this.sin_p12*o*a),t},inverse:function(t){t.x-=this.x0,t.y-=this.y0;var i=Math.sqrt(t.x*t.x+t.y*t.y);if(i>2*Proj4js.common.HALF_PI*this.a)return Proj4js.reportError("aeqdInvDataError"),void 0;var s,e=i/this.a,o=Math.sin(e),n=Math.cos(e),a=this.long0;if(Math.abs(i)<=Proj4js.common.EPSLN)s=this.lat0;else{s=Proj4js.common.asinz(n*this.sin_p12+t.y*o*this.cos_p12/i);var r=Math.abs(this.lat0)-Proj4js.common.HALF_PI;Math.abs(r)<=Proj4js.common.EPSLN?a=this.lat0>=0?Proj4js.common.adjust_lon(this.long0+Math.atan2(t.x,-t.y)):Proj4js.common.adjust_lon(this.long0-Math.atan2(-t.x,t.y)):(r=n-this.sin_p12*Math.sin(s),Math.abs(r)=50&&Proj4js.reportError("moll:Fwd:IterationError")}o/=2,Proj4js.common.PI/2-Math.abs(s).999999999999&&(s=.999999999999);var i=Math.asin(s),e=Proj4js.common.adjust_lon(this.long0+t.x/(.900316316158*this.a*Math.cos(i)));-Proj4js.common.PI>e&&(e=-Proj4js.common.PI),e>Proj4js.common.PI&&(e=Proj4js.common.PI),s=(2*i+Math.sin(2*i))/Proj4js.common.PI,Math.abs(s)>1&&(s=1);var o=Math.asin(s);return t.x=e,t.y=o,t}},function(t,i,s){var e,o;typeof exports!=s+""?e=exports:(o=t.L,e={},e.noConflict=function(){return t.L=o,this},t.L=e),e.version="0.5.1",e.Util={extend:function(t){var i,s,e,o,n=Array.prototype.slice.call(arguments,1);for(s=0,e=n.length;e>s;s++){o=n[s]||{};for(i in o)o.hasOwnProperty(i)&&(t[i]=o[i])}return t},bind:function(t,i){var s=arguments.length>2?Array.prototype.slice.call(arguments,2):null;return function(){return t.apply(i,s||arguments)}},stamp:function(){var t=0,i="_leaflet_id";return function(s){return s[i]=s[i]||++t,s[i]}}(),limitExecByInterval:function(t,i,e){var o,n;return function a(){var r=arguments;return o?(n=!0,s):(o=!0,setTimeout(function(){o=!1,n&&(a.apply(e,r),n=!1)},i),t.apply(e,r),s)}},falseFn:function(){return!1},formatNum:function(t,i){var s=Math.pow(10,i||5);return Math.round(t*s)/s},splitWords:function(t){return t.replace(/^\s+|\s+$/g,"").split(/\s+/)},setOptions:function(t,i){return t.options=e.extend({},t.options,i),t.options},getParamString:function(t,i){var s=[];for(var e in t)t.hasOwnProperty(e)&&s.push(e+"="+t[e]);return(i&&-1!==i.indexOf("?")?"&":"?")+s.join("&")},template:function(t,i){return t.replace(/\{ *([\w_]+) *\}/g,function(t,s){var e=i[s];if(!i.hasOwnProperty(s))throw Error("No value provided for variable "+t);return e})},isArray:function(t){return"[object Array]"===Object.prototype.toString.call(t)},emptyImageUrl:"data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs="},function(){function i(i){var s,e,o=["webkit","moz","o","ms"];for(s=0;o.length>s&&!e;s++)e=t[o[s]+i];return e}function o(i){var s=+new Date,e=Math.max(0,16-(s-n));return n=s+e,t.setTimeout(i,e)}var n=0,a=t.requestAnimationFrame||i("RequestAnimationFrame")||o,r=t.cancelAnimationFrame||i("CancelAnimationFrame")||i("CancelRequestAnimationFrame")||function(i){t.clearTimeout(i)};e.Util.requestAnimFrame=function(i,n,r,h){return i=e.bind(i,n),r&&a===o?(i(),s):a.call(t,i,h)},e.Util.cancelAnimFrame=function(i){i&&r.call(t,i)}}(),e.extend=e.Util.extend,e.bind=e.Util.bind,e.stamp=e.Util.stamp,e.setOptions=e.Util.setOptions,e.Class=function(){},e.Class.extend=function(t){var i=function(){this.initialize&&this.initialize.apply(this,arguments),this._initHooks&&this.callInitHooks()},s=function(){};s.prototype=this.prototype;var o=new s;o.constructor=i,i.prototype=o;for(var n in this)this.hasOwnProperty(n)&&"prototype"!==n&&(i[n]=this[n]);t.statics&&(e.extend(i,t.statics),delete t.statics),t.includes&&(e.Util.extend.apply(null,[o].concat(t.includes)),delete t.includes),t.options&&o.options&&(t.options=e.extend({},o.options,t.options)),e.extend(o,t),o._initHooks=[];var a=this;return o.callInitHooks=function(){if(!this._initHooksCalled){a.prototype.callInitHooks&&a.prototype.callInitHooks.call(this),this._initHooksCalled=!0;for(var t=0,i=o._initHooks.length;i>t;t++)o._initHooks[t].call(this)}},i},e.Class.include=function(t){e.extend(this.prototype,t)},e.Class.mergeOptions=function(t){e.extend(this.prototype.options,t)},e.Class.addInitHook=function(t){var i=Array.prototype.slice.call(arguments,1),s="function"==typeof t?t:function(){this[t].apply(this,i)};this.prototype._initHooks=this.prototype._initHooks||[],this.prototype._initHooks.push(s)};var n="_leaflet_events";e.Mixin={},e.Mixin.Events={addEventListener:function(t,i,s){var o,a,r,h=this[n]=this[n]||{};if("object"==typeof t){for(o in t)t.hasOwnProperty(o)&&this.addEventListener(o,t[o],i);return this}for(t=e.Util.splitWords(t),a=0,r=t.length;r>a;a++)h[t[a]]=h[t[a]]||[],h[t[a]].push({action:i,context:s||this});return this},hasEventListeners:function(t){return n in this&&t in this[n]&&this[n][t].length>0},removeEventListener:function(t,i,s){var o,a,r,h,l,c=this[n];if("object"==typeof t){for(o in t)t.hasOwnProperty(o)&&this.removeEventListener(o,t[o],i);return this}for(t=e.Util.splitWords(t),a=0,r=t.length;r>a;a++)if(this.hasEventListeners(t[a]))for(h=c[t[a]],l=h.length-1;l>=0;l--)i&&h[l].action!==i||s&&h[l].context!==s||h.splice(l,1);return this},fireEvent:function(t,i){if(!this.hasEventListeners(t))return this;for(var s=e.extend({type:t,target:this},i),o=this[n][t].slice(),a=0,r=o.length;r>a;a++)o[a].action.call(o[a].context||this,s);return this}},e.Mixin.Events.on=e.Mixin.Events.addEventListener,e.Mixin.Events.off=e.Mixin.Events.removeEventListener,e.Mixin.Events.fire=e.Mixin.Events.fireEvent,function(){var o=!!t.ActiveXObject,n=o&&!t.XMLHttpRequest,a=o&&!i.querySelector,r=navigator.userAgent.toLowerCase(),h=-1!==r.indexOf("webkit"),l=-1!==r.indexOf("chrome"),c=-1!==r.indexOf("android"),m=-1!==r.search("android [23]"),u=typeof orientation!=s+"",d=t.navigator&&t.navigator.msPointerEnabled&&t.navigator.msMaxTouchPoints,p="devicePixelRatio"in t&&t.devicePixelRatio>1||"matchMedia"in t&&t.matchMedia("(min-resolution:144dpi)")&&t.matchMedia("(min-resolution:144dpi)").matches,_=i.documentElement,f=o&&"transition"in _.style,P="WebKitCSSMatrix"in t&&"m11"in new t.WebKitCSSMatrix,y="MozPerspective"in _.style,g="OTransition"in _.style,L=!t.L_DISABLE_3D&&(f||P||y||g),v=!t.L_NO_TOUCH&&function(){var t="ontouchstart";if(d||t in _)return!0;var s=i.createElement("div"),e=!1;return s.setAttribute?(s.setAttribute(t,"return;"),"function"==typeof s[t]&&(e=!0),s.removeAttribute(t),s=null,e):!1}();e.Browser={ie:o,ie6:n,ie7:a,webkit:h,android:c,android23:m,chrome:l,ie3d:f,webkit3d:P,gecko3d:y,opera3d:g,any3d:L,mobile:u,mobileWebkit:u&&h,mobileWebkit3d:u&&P,mobileOpera:u&&t.opera,touch:v,msTouch:d,retina:p}}(),e.Point=function(t,i,s){this.x=s?Math.round(t):t,this.y=s?Math.round(i):i},e.Point.prototype={clone:function(){return new e.Point(this.x,this.y)},add:function(t){return this.clone()._add(e.point(t))},_add:function(t){return this.x+=t.x,this.y+=t.y,this},subtract:function(t){return this.clone()._subtract(e.point(t))},_subtract:function(t){return this.x-=t.x,this.y-=t.y,this},divideBy:function(t){return this.clone()._divideBy(t)},_divideBy:function(t){return this.x/=t,this.y/=t,this},multiplyBy:function(t){return this.clone()._multiplyBy(t)},_multiplyBy:function(t){return this.x*=t,this.y*=t,this},round:function(){return this.clone()._round()},_round:function(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this},floor:function(){return this.clone()._floor()},_floor:function(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this},distanceTo:function(t){t=e.point(t);var i=t.x-this.x,s=t.y-this.y;return Math.sqrt(i*i+s*s)},equals:function(t){return t.x===this.x&&t.y===this.y},toString:function(){return"Point("+e.Util.formatNum(this.x)+", "+e.Util.formatNum(this.y)+")"}},e.point=function(t,i,s){return t instanceof e.Point?t:e.Util.isArray(t)?new e.Point(t[0],t[1]):isNaN(t)?t:new e.Point(t,i,s)},e.Bounds=function(t,i){if(t)for(var s=i?[t,i]:t,e=0,o=s.length;o>e;e++)this.extend(s[e])},e.Bounds.prototype={extend:function(t){return t=e.point(t),this.min||this.max?(this.min.x=Math.min(t.x,this.min.x),this.max.x=Math.max(t.x,this.max.x),this.min.y=Math.min(t.y,this.min.y),this.max.y=Math.max(t.y,this.max.y)):(this.min=t.clone(),this.max=t.clone()),this},getCenter:function(t){return new e.Point((this.min.x+this.max.x)/2,(this.min.y+this.max.y)/2,t)},getBottomLeft:function(){return new e.Point(this.min.x,this.max.y)},getTopRight:function(){return new e.Point(this.max.x,this.min.y)},getSize:function(){return this.max.subtract(this.min)},contains:function(t){var i,s;return t="number"==typeof t[0]||t instanceof e.Point?e.point(t):e.bounds(t),t instanceof e.Bounds?(i=t.min,s=t.max):i=s=t,i.x>=this.min.x&&s.x<=this.max.x&&i.y>=this.min.y&&s.y<=this.max.y},intersects:function(t){t=e.bounds(t);var i=this.min,s=this.max,o=t.min,n=t.max,a=n.x>=i.x&&o.x<=s.x,r=n.y>=i.y&&o.y<=s.y;return a&&r},isValid:function(){return!(!this.min||!this.max)}},e.bounds=function(t,i){return!t||t instanceof e.Bounds?t:new e.Bounds(t,i)},e.Transformation=function(t,i,s,e){this._a=t,this._b=i,this._c=s,this._d=e},e.Transformation.prototype={transform:function(t,i){return this._transform(t.clone(),i)},_transform:function(t,i){return i=i||1,t.x=i*(this._a*t.x+this._b),t.y=i*(this._c*t.y+this._d),t},untransform:function(t,i){return i=i||1,new e.Point((t.x/i-this._b)/this._a,(t.y/i-this._d)/this._c)}},e.DomUtil={get:function(t){return"string"==typeof t?i.getElementById(t):t},getStyle:function(t,s){var e=t.style[s];if(!e&&t.currentStyle&&(e=t.currentStyle[s]),(!e||"auto"===e)&&i.defaultView){var o=i.defaultView.getComputedStyle(t,null);e=o?o[s]:null}return"auto"===e?null:e},getViewportOffset:function(t){var s,o=0,n=0,a=t,r=i.body,h=e.Browser.ie7;do{if(o+=a.offsetTop||0,n+=a.offsetLeft||0,o+=parseInt(e.DomUtil.getStyle(a,"borderTopWidth"),10)||0,n+=parseInt(e.DomUtil.getStyle(a,"borderLeftWidth"),10)||0,s=e.DomUtil.getStyle(a,"position"),a.offsetParent===r&&"absolute"===s)break;if("fixed"===s){o+=r.scrollTop||0,n+=r.scrollLeft||0;break}a=a.offsetParent}while(a);a=t;do{if(a===r)break;o-=a.scrollTop||0,n-=a.scrollLeft||0,e.DomUtil.documentIsLtr()||!e.Browser.webkit&&!h||(n+=a.scrollWidth-a.clientWidth,h&&"hidden"!==e.DomUtil.getStyle(a,"overflow-y")&&"hidden"!==e.DomUtil.getStyle(a,"overflow")&&(n+=17)),a=a.parentNode}while(a);return new e.Point(n,o)},documentIsLtr:function(){return e.DomUtil._docIsLtrCached||(e.DomUtil._docIsLtrCached=!0,e.DomUtil._docIsLtr="ltr"===e.DomUtil.getStyle(i.body,"direction")),e.DomUtil._docIsLtr},create:function(t,s,e){var o=i.createElement(t);return o.className=s,e&&e.appendChild(o),o},disableTextSelection:function(){i.selection&&i.selection.empty&&i.selection.empty(),this._onselectstart||(this._onselectstart=i.onselectstart||null,i.onselectstart=e.Util.falseFn)},enableTextSelection:function(){i.onselectstart===e.Util.falseFn&&(i.onselectstart=this._onselectstart,this._onselectstart=null)},hasClass:function(t,i){return t.className.length>0&&RegExp("(^|\\s)"+i+"(\\s|$)").test(t.className)},addClass:function(t,i){e.DomUtil.hasClass(t,i)||(t.className+=(t.className?" ":"")+i)},removeClass:function(t,i){function s(t,s){return s===i?"":t}t.className=t.className.replace(/(\S+)\s*/g,s).replace(/(^\s+|\s+$)/,"")},setOpacity:function(t,i){if("opacity"in t.style)t.style.opacity=i;else if("filter"in t.style){var s=!1,e="DXImageTransform.Microsoft.Alpha";try{s=t.filters.item(e)}catch(o){}i=Math.round(100*i),s?(s.Enabled=100!==i,s.Opacity=i):t.style.filter+=" progid:"+e+"(opacity="+i+")"}},testProp:function(t){for(var s=i.documentElement.style,e=0;t.length>e;e++)if(t[e]in s)return t[e];return!1},getTranslateString:function(t){var i=e.Browser.webkit3d,s="translate"+(i?"3d":"")+"(",o=(i?",0":"")+")";return s+t.x+"px,"+t.y+"px"+o},getScaleString:function(t,i){var s=e.DomUtil.getTranslateString(i.add(i.multiplyBy(-1*t))),o=" scale("+t+") ";return s+o},setPosition:function(t,i,s){t._leaflet_pos=i,!s&&e.Browser.any3d?(t.style[e.DomUtil.TRANSFORM]=e.DomUtil.getTranslateString(i),e.Browser.mobileWebkit3d&&(t.style.WebkitBackfaceVisibility="hidden")):(t.style.left=i.x+"px",t.style.top=i.y+"px")},getPosition:function(t){return t._leaflet_pos}},e.DomUtil.TRANSFORM=e.DomUtil.testProp(["transform","WebkitTransform","OTransform","MozTransform","msTransform"]),e.DomUtil.TRANSITION=e.DomUtil.testProp(["webkitTransition","transition","OTransition","MozTransition","msTransition"]),e.DomUtil.TRANSITION_END="webkitTransition"===e.DomUtil.TRANSITION||"OTransition"===e.DomUtil.TRANSITION?e.DomUtil.TRANSITION+"End":"transitionend",e.LatLng=function(t,i){var s=parseFloat(t),e=parseFloat(i);if(isNaN(s)||isNaN(e))throw Error("Invalid LatLng object: ("+t+", "+i+")");this.lat=s,this.lng=e},e.extend(e.LatLng,{DEG_TO_RAD:Math.PI/180,RAD_TO_DEG:180/Math.PI,MAX_MARGIN:1e-9}),e.LatLng.prototype={equals:function(t){if(!t)return!1;t=e.latLng(t);var i=Math.max(Math.abs(this.lat-t.lat),Math.abs(this.lng-t.lng));return e.LatLng.MAX_MARGIN>=i},toString:function(t){return"LatLng("+e.Util.formatNum(this.lat,t)+", "+e.Util.formatNum(this.lng,t)+")"},distanceTo:function(t){t=e.latLng(t);var i=6378137,s=e.LatLng.DEG_TO_RAD,o=(t.lat-this.lat)*s,n=(t.lng-this.lng)*s,a=this.lat*s,r=t.lat*s,h=Math.sin(o/2),l=Math.sin(n/2),c=h*h+l*l*Math.cos(a)*Math.cos(r);return 2*i*Math.atan2(Math.sqrt(c),Math.sqrt(1-c))},wrap:function(t,i){var s=this.lng;return t=t||-180,i=i||180,s=(s+i)%(i-t)+(t>s||s===i?i:t),new e.LatLng(this.lat,s)}},e.latLng=function(t,i){return t instanceof e.LatLng?t:e.Util.isArray(t)?new e.LatLng(t[0],t[1]):isNaN(t)?t:new e.LatLng(t,i)},e.LatLngBounds=function(t,i){if(t)for(var s=i?[t,i]:t,e=0,o=s.length;o>e;e++)this.extend(s[e])},e.LatLngBounds.prototype={extend:function(t){return t="number"==typeof t[0]||"string"==typeof t[0]||t instanceof e.LatLng?e.latLng(t):e.latLngBounds(t),t instanceof e.LatLng?this._southWest||this._northEast?(this._southWest.lat=Math.min(t.lat,this._southWest.lat),this._southWest.lng=Math.min(t.lng,this._southWest.lng),this._northEast.lat=Math.max(t.lat,this._northEast.lat),this._northEast.lng=Math.max(t.lng,this._northEast.lng)):(this._southWest=new e.LatLng(t.lat,t.lng),this._northEast=new e.LatLng(t.lat,t.lng)):t instanceof e.LatLngBounds&&(this.extend(t._southWest),this.extend(t._northEast)),this},pad:function(t){var i=this._southWest,s=this._northEast,o=Math.abs(i.lat-s.lat)*t,n=Math.abs(i.lng-s.lng)*t;return new e.LatLngBounds(new e.LatLng(i.lat-o,i.lng-n),new e.LatLng(s.lat+o,s.lng+n))},getCenter:function(){return new e.LatLng((this._southWest.lat+this._northEast.lat)/2,(this._southWest.lng+this._northEast.lng)/2)},getSouthWest:function(){return this._southWest},getNorthEast:function(){return this._northEast},getNorthWest:function(){return new e.LatLng(this._northEast.lat,this._southWest.lng)},getSouthEast:function(){return new e.LatLng(this._southWest.lat,this._northEast.lng)},contains:function(t){t="number"==typeof t[0]||t instanceof e.LatLng?e.latLng(t):e.latLngBounds(t);var i,s,o=this._southWest,n=this._northEast;return t instanceof e.LatLngBounds?(i=t.getSouthWest(),s=t.getNorthEast()):i=s=t,i.lat>=o.lat&&s.lat<=n.lat&&i.lng>=o.lng&&s.lng<=n.lng},intersects:function(t){t=e.latLngBounds(t);var i=this._southWest,s=this._northEast,o=t.getSouthWest(),n=t.getNorthEast(),a=n.lat>=i.lat&&o.lat<=s.lat,r=n.lng>=i.lng&&o.lng<=s.lng;return a&&r},toBBoxString:function(){var t=this._southWest,i=this._northEast;return[t.lng,t.lat,i.lng,i.lat].join(",")},equals:function(t){return t?(t=e.latLngBounds(t),this._southWest.equals(t.getSouthWest())&&this._northEast.equals(t.getNorthEast())):!1},isValid:function(){return!(!this._southWest||!this._northEast)}},e.latLngBounds=function(t,i){return!t||t instanceof e.LatLngBounds?t:new e.LatLngBounds(t,i)},e.Projection={},e.Projection.SphericalMercator={MAX_LATITUDE:85.0511287798,project:function(t){var i=e.LatLng.DEG_TO_RAD,s=this.MAX_LATITUDE,o=Math.max(Math.min(s,t.lat),-s),n=t.lng*i,a=o*i;return a=Math.log(Math.tan(Math.PI/4+a/2)),new e.Point(n,a)},unproject:function(t){var i=e.LatLng.RAD_TO_DEG,s=t.x*i,o=(2*Math.atan(Math.exp(t.y))-Math.PI/2)*i;return new e.LatLng(o,s)}},e.Projection.LonLat={project:function(t){return new e.Point(t.lng,t.lat)},unproject:function(t){return new e.LatLng(t.y,t.x)}},e.CRS={latLngToPoint:function(t,i){var s=this.projection.project(t),e=this.scale(i);return this.transformation._transform(s,e)},pointToLatLng:function(t,i){var s=this.scale(i),e=this.transformation.untransform(t,s);return this.projection.unproject(e)},project:function(t){return this.projection.project(t)},scale:function(t){return 256*Math.pow(2,t)}},e.CRS.Simple=e.extend({},e.CRS,{projection:e.Projection.LonLat,transformation:new e.Transformation(1,0,-1,0),scale:function(t){return Math.pow(2,t)}}),e.CRS.EPSG3857=e.extend({},e.CRS,{code:"EPSG:3857",projection:e.Projection.SphericalMercator,transformation:new e.Transformation(.5/Math.PI,.5,-.5/Math.PI,.5),project:function(t){var i=this.projection.project(t),s=6378137;return i.multiplyBy(s)}}),e.CRS.EPSG900913=e.extend({},e.CRS.EPSG3857,{code:"EPSG:900913"}),e.CRS.EPSG4326=e.extend({},e.CRS,{code:"EPSG:4326",projection:e.Projection.LonLat,transformation:new e.Transformation(1/360,.5,-1/360,.5)}),e.Map=e.Class.extend({includes:e.Mixin.Events,options:{crs:e.CRS.EPSG3857,fadeAnimation:e.DomUtil.TRANSITION&&!e.Browser.android23,trackResize:!0,markerZoomAnimation:e.DomUtil.TRANSITION&&e.Browser.any3d},initialize:function(t,i){i=e.setOptions(this,i),this._initContainer(t),this._initLayout(),this.callInitHooks(),this._initEvents(),i.maxBounds&&this.setMaxBounds(i.maxBounds),i.center&&i.zoom!==s&&this.setView(e.latLng(i.center),i.zoom,!0),this._initLayers(i.layers)},setView:function(t,i){return this._resetView(e.latLng(t),this._limitZoom(i)),this},setZoom:function(t){return this.setView(this.getCenter(),t)},zoomIn:function(t){return this.setZoom(this._zoom+(t||1))},zoomOut:function(t){return this.setZoom(this._zoom-(t||1))},fitBounds:function(t){var i=this.getBoundsZoom(t);return this.setView(e.latLngBounds(t).getCenter(),i)},fitWorld:function(){var t=new e.LatLng(-60,-170),i=new e.LatLng(85,179);return this.fitBounds(new e.LatLngBounds(t,i))},panTo:function(t){return this.setView(t,this._zoom)},panBy:function(t){return this.fire("movestart"),this._rawPanBy(e.point(t)),this.fire("move"),this.fire("moveend")},setMaxBounds:function(t){if(t=e.latLngBounds(t),this.options.maxBounds=t,!t)return this._boundsMinZoom=null,this;var i=this.getBoundsZoom(t,!0);return this._boundsMinZoom=i,this._loaded&&(i>this._zoom?this.setView(t.getCenter(),i):this.panInsideBounds(t)),this},panInsideBounds:function(t){t=e.latLngBounds(t);var i=this.getBounds(),s=this.project(i.getSouthWest()),o=this.project(i.getNorthEast()),n=this.project(t.getSouthWest()),a=this.project(t.getNorthEast()),r=0,h=0;return o.ya.x&&(r=a.x-o.x),s.y>n.y&&(h=n.y-s.y),s.x=r);return m&&i?null:i?r:r-1},getSize:function(){return(!this._size||this._sizeChanged)&&(this._size=new e.Point(this._container.clientWidth,this._container.clientHeight),this._sizeChanged=!1),this._size.clone()},getPixelBounds:function(){var t=this._getTopLeftPoint();return new e.Bounds(t,t.add(this.getSize()))},getPixelOrigin:function(){return this._initialTopLeftPoint},getPanes:function(){return this._panes},getContainer:function(){return this._container},getZoomScale:function(t){var i=this.options.crs;return i.scale(t)/i.scale(this._zoom)},getScaleZoom:function(t){return this._zoom+Math.log(t)/Math.LN2},project:function(t,i){return i=i===s?this._zoom:i,this.options.crs.latLngToPoint(e.latLng(t),i)},unproject:function(t,i){return i=i===s?this._zoom:i,this.options.crs.pointToLatLng(e.point(t),i)},layerPointToLatLng:function(t){var i=e.point(t).add(this._initialTopLeftPoint);return this.unproject(i)},latLngToLayerPoint:function(t){var i=this.project(e.latLng(t))._round();return i._subtract(this._initialTopLeftPoint)},containerPointToLayerPoint:function(t){return e.point(t).subtract(this._getMapPanePos())},layerPointToContainerPoint:function(t){return e.point(t).add(this._getMapPanePos())},containerPointToLatLng:function(t){var i=this.containerPointToLayerPoint(e.point(t));return this.layerPointToLatLng(i)},latLngToContainerPoint:function(t){return this.layerPointToContainerPoint(this.latLngToLayerPoint(e.latLng(t)))},mouseEventToContainerPoint:function(t){return e.DomEvent.getMousePosition(t,this._container)},mouseEventToLayerPoint:function(t){return this.containerPointToLayerPoint(this.mouseEventToContainerPoint(t))},mouseEventToLatLng:function(t){return this.layerPointToLatLng(this.mouseEventToLayerPoint(t))},_initContainer:function(t){var i=this._container=e.DomUtil.get(t);if(i._leaflet)throw Error("Map container is already initialized.");i._leaflet=!0},_initLayout:function(){var t=this._container;e.DomUtil.addClass(t,"leaflet-container"),e.Browser.touch&&e.DomUtil.addClass(t,"leaflet-touch"),this.options.fadeAnimation&&e.DomUtil.addClass(t,"leaflet-fade-anim");var i=e.DomUtil.getStyle(t,"position");"absolute"!==i&&"relative"!==i&&"fixed"!==i&&(t.style.position="relative"),this._initPanes(),this._initControlPos&&this._initControlPos()},_initPanes:function(){var t=this._panes={};this._mapPane=t.mapPane=this._createPane("leaflet-map-pane",this._container),this._tilePane=t.tilePane=this._createPane("leaflet-tile-pane",this._mapPane),t.objectsPane=this._createPane("leaflet-objects-pane",this._mapPane),t.shadowPane=this._createPane("leaflet-shadow-pane"),t.overlayPane=this._createPane("leaflet-overlay-pane"),t.markerPane=this._createPane("leaflet-marker-pane"),t.popupPane=this._createPane("leaflet-popup-pane");var i=" leaflet-zoom-hide";this.options.markerZoomAnimation||(e.DomUtil.addClass(t.markerPane,i),e.DomUtil.addClass(t.shadowPane,i),e.DomUtil.addClass(t.popupPane,i))},_createPane:function(t,i){return e.DomUtil.create("div",t,i||this._panes.objectsPane)},_initLayers:function(t){t=t?e.Util.isArray(t)?t:[t]:[],this._layers={},this._zoomBoundLayers={},this._tileLayersNum=0;var i,s;for(i=0,s=t.length;s>i;i++)this.addLayer(t[i])},_resetView:function(t,i,s,o){var n=this._zoom!==i;o||(this.fire("movestart"),n&&this.fire("zoomstart")),this._zoom=i,this._initialTopLeftPoint=this._getNewTopLeftPoint(t),s?this._initialTopLeftPoint._add(this._getMapPanePos()):e.DomUtil.setPosition(this._mapPane,new e.Point(0,0)),this._tileLayersToLoad=this._tileLayersNum;var a=!this._loaded;this._loaded=!0,this.fire("viewreset",{hard:!s}),this.fire("move"),(n||o)&&this.fire("zoomend"),this.fire("moveend",{hard:!s}),a&&this.fire("load")},_rawPanBy:function(t){e.DomUtil.setPosition(this._mapPane,this._getMapPanePos().subtract(t))},_updateZoomLevels:function(){var t,i=1/0,e=-1/0;for(t in this._zoomBoundLayers)if(this._zoomBoundLayers.hasOwnProperty(t)){var o=this._zoomBoundLayers[t];isNaN(o.options.minZoom)||(i=Math.min(i,o.options.minZoom)),isNaN(o.options.maxZoom)||(e=Math.max(e,o.options.maxZoom))}t===s?this._layersMaxZoom=this._layersMinZoom=s:(this._layersMaxZoom=e,this._layersMinZoom=i)},_initEvents:function(){if(e.DomEvent){e.DomEvent.on(this._container,"click",this._onMouseClick,this);var i,s,o=["dblclick","mousedown","mouseup","mouseenter","mouseleave","mousemove","contextmenu"];for(i=0,s=o.length;s>i;i++)e.DomEvent.on(this._container,o[i],this._fireMouseEvent,this);this.options.trackResize&&e.DomEvent.on(t,"resize",this._onResize,this)}},_onResize:function(){e.Util.cancelAnimFrame(this._resizeRequest),this._resizeRequest=e.Util.requestAnimFrame(this.invalidateSize,this,!1,this._container)},_onMouseClick:function(t){!this._loaded||this.dragging&&this.dragging.moved()||(this.fire("preclick"),this._fireMouseEvent(t))},_fireMouseEvent:function(t){if(this._loaded){var i=t.type;if(i="mouseenter"===i?"mouseover":"mouseleave"===i?"mouseout":i,this.hasEventListeners(i)){"contextmenu"===i&&e.DomEvent.preventDefault(t);var s=this.mouseEventToContainerPoint(t),o=this.containerPointToLayerPoint(s),n=this.layerPointToLatLng(o);this.fire(i,{latlng:n,layerPoint:o,containerPoint:s,originalEvent:t})}}},_onTileLayerLoad:function(){this._tileLayersToLoad--,this._tileLayersNum&&!this._tileLayersToLoad&&this._tileBg&&(clearTimeout(this._clearTileBgTimer),this._clearTileBgTimer=setTimeout(e.bind(this._clearTileBg,this),500))},whenReady:function(t,i){return this._loaded?t.call(i||this,this):this.on("load",t,i),this},_getMapPanePos:function(){return e.DomUtil.getPosition(this._mapPane)},_getTopLeftPoint:function(){if(!this._loaded)throw Error("Set map center and zoom first.");return this._initialTopLeftPoint.subtract(this._getMapPanePos())},_getNewTopLeftPoint:function(t,i){var s=this.getSize()._divideBy(2);return this.project(t,i)._subtract(s)._round()},_latLngToNewLayerPoint:function(t,i,s){var e=this._getNewTopLeftPoint(s,i).add(this._getMapPanePos());return this.project(t,i)._subtract(e)},_getCenterLayerPoint:function(){return this.containerPointToLayerPoint(this.getSize()._divideBy(2))},_getCenterOffset:function(t){return this.latLngToLayerPoint(t).subtract(this._getCenterLayerPoint())},_limitZoom:function(t){var i=this.getMinZoom(),s=this.getMaxZoom();return Math.max(i,Math.min(s,t))}}),e.map=function(t,i){return new e.Map(t,i)},e.Projection.Mercator={MAX_LATITUDE:85.0840591556,R_MINOR:6356752.3142,R_MAJOR:6378137,project:function(t){var i=e.LatLng.DEG_TO_RAD,s=this.MAX_LATITUDE,o=Math.max(Math.min(s,t.lat),-s),n=this.R_MAJOR,a=this.R_MINOR,r=t.lng*i*n,h=o*i,l=a/n,c=Math.sqrt(1-l*l),m=c*Math.sin(h);m=Math.pow((1-m)/(1+m),.5*c);var u=Math.tan(.5*(.5*Math.PI-h))/m;return h=-a*Math.log(u),new e.Point(r,h)},unproject:function(t){for(var i,s=e.LatLng.RAD_TO_DEG,o=this.R_MAJOR,n=this.R_MINOR,a=t.x*s/o,r=n/o,h=Math.sqrt(1-r*r),l=Math.exp(-t.y/n),c=Math.PI/2-2*Math.atan(l),m=15,u=1e-7,d=m,p=.1;Math.abs(p)>u&&--d>0;)i=h*Math.sin(c),p=Math.PI/2-2*Math.atan(l*Math.pow((1-i)/(1+i),.5*h))-c,c+=p;return new e.LatLng(c*s,a)}},e.CRS.EPSG3395=e.extend({},e.CRS,{code:"EPSG:3395",projection:e.Projection.Mercator,transformation:function(){var t=e.Projection.Mercator,i=t.R_MAJOR,s=t.R_MINOR;return new e.Transformation(.5/(Math.PI*i),.5,-.5/(Math.PI*s),.5)}()}),e.TileLayer=e.Class.extend({includes:e.Mixin.Events,options:{minZoom:0,maxZoom:18,tileSize:256,subdomains:"abc",errorTileUrl:"",attribution:"",zoomOffset:0,opacity:1,unloadInvisibleTiles:e.Browser.mobile,updateWhenIdle:e.Browser.mobile},initialize:function(t,i){i=e.setOptions(this,i),i.detectRetina&&e.Browser.retina&&i.maxZoom>0&&(i.tileSize=Math.floor(i.tileSize/2),i.zoomOffset++,i.minZoom>0&&i.minZoom--,this.options.maxZoom--),this._url=t;var s=this.options.subdomains;"string"==typeof s&&(this.options.subdomains=s.split(""))},onAdd:function(t){this._map=t,this._initContainer(),this._createTileProto(),t.on({viewreset:this._resetCallback,moveend:this._update},this),this.options.updateWhenIdle||(this._limitedUpdate=e.Util.limitExecByInterval(this._update,150,this),t.on("move",this._limitedUpdate,this)),this._reset(),this._update()},addTo:function(t){return t.addLayer(this),this},onRemove:function(t){this._container.parentNode.removeChild(this._container),t.off({viewreset:this._resetCallback,moveend:this._update},this),this.options.updateWhenIdle||t.off("move",this._limitedUpdate,this),this._container=null,this._map=null},bringToFront:function(){var t=this._map._panes.tilePane;return this._container&&(t.appendChild(this._container),this._setAutoZIndex(t,Math.max)),this},bringToBack:function(){var t=this._map._panes.tilePane;return this._container&&(t.insertBefore(this._container,t.firstChild),this._setAutoZIndex(t,Math.min)),this},getAttribution:function(){return this.options.attribution},setOpacity:function(t){return this.options.opacity=t,this._map&&this._updateOpacity(),this},setZIndex:function(t){return this.options.zIndex=t,this._updateZIndex(),this},setUrl:function(t,i){return this._url=t,i||this.redraw(),this},redraw:function(){return this._map&&(this._map._panes.tilePane.empty=!1,this._reset(!0),this._update()),this},_updateZIndex:function(){this._container&&this.options.zIndex!==s&&(this._container.style.zIndex=this.options.zIndex)},_setAutoZIndex:function(t,i){var s,e,o,n=t.children,a=-i(1/0,-1/0);for(e=0,o=n.length;o>e;e++)n[e]!==this._container&&(s=parseInt(n[e].style.zIndex,10),isNaN(s)||(a=i(a,s)));this.options.zIndex=this._container.style.zIndex=(isFinite(a)?a:0)+i(1,-1)},_updateOpacity:function(){e.DomUtil.setOpacity(this._container,this.options.opacity);var t,i=this._tiles;if(e.Browser.webkit)for(t in i)i.hasOwnProperty(t)&&(i[t].style.webkitTransform+=" translate(0,0)")},_initContainer:function(){var t=this._map._panes.tilePane;(!this._container||t.empty)&&(this._container=e.DomUtil.create("div","leaflet-layer"),this._updateZIndex(),t.appendChild(this._container),1>this.options.opacity&&this._updateOpacity())},_resetCallback:function(t){this._reset(t.hard)},_reset:function(t){var i=this._tiles;for(var s in i)i.hasOwnProperty(s)&&this.fire("tileunload",{tile:i[s]});this._tiles={},this._tilesToLoad=0,this.options.reuseTiles&&(this._unusedTiles=[]),t&&this._container&&(this._container.innerHTML=""),this._initContainer()},_update:function(){if(this._map){var t=this._map.getPixelBounds(),i=this._map.getZoom(),s=this.options.tileSize;if(!(i>this.options.maxZoom||this.options.minZoom>i)){var o=new e.Point(Math.floor(t.min.x/s),Math.floor(t.min.y/s)),n=new e.Point(Math.floor(t.max.x/s),Math.floor(t.max.y/s)),a=new e.Bounds(o,n);this._addTilesFromCenterOut(a),(this.options.unloadInvisibleTiles||this.options.reuseTiles)&&this._removeOtherTiles(a)}}},_addTilesFromCenterOut:function(t){var s,o,n,a=[],r=t.getCenter();for(s=t.min.y;t.max.y>=s;s++)for(o=t.min.x;t.max.x>=o;o++)n=new e.Point(o,s),this._tileShouldBeLoaded(n)&&a.push(n);var h=a.length;if(0!==h){a.sort(function(t,i){return t.distanceTo(r)-i.distanceTo(r)});var l=i.createDocumentFragment();for(this._tilesToLoad||this.fire("loading"),this._tilesToLoad+=h,o=0;h>o;o++)this._addTile(a[o],l);this._container.appendChild(l)}},_tileShouldBeLoaded:function(t){ -if(t.x+":"+t.y in this._tiles)return!1;if(!this.options.continuousWorld){var i=this._getWrapTileNum();if(this.options.noWrap&&(0>t.x||t.x>=i)||0>t.y||t.y>=i)return!1}return!0},_removeOtherTiles:function(t){var i,s,e,o;for(o in this._tiles)this._tiles.hasOwnProperty(o)&&(i=o.split(":"),s=parseInt(i[0],10),e=parseInt(i[1],10),(t.min.x>s||s>t.max.x||t.min.y>e||e>t.max.y)&&this._removeTile(o))},_removeTile:function(t){var i=this._tiles[t];this.fire("tileunload",{tile:i,url:i.src}),this.options.reuseTiles?(e.DomUtil.removeClass(i,"leaflet-tile-loaded"),this._unusedTiles.push(i)):i.parentNode===this._container&&this._container.removeChild(i),e.Browser.android||(i.src=e.Util.emptyImageUrl),delete this._tiles[t]},_addTile:function(t,i){var s=this._getTilePos(t),o=this._getTile();e.DomUtil.setPosition(o,s,e.Browser.chrome||e.Browser.android23),this._tiles[t.x+":"+t.y]=o,this._loadTile(o,t),o.parentNode!==this._container&&i.appendChild(o)},_getZoomForUrl:function(){var t=this.options,i=this._map.getZoom();return t.zoomReverse&&(i=t.maxZoom-i),i+t.zoomOffset},_getTilePos:function(t){var i=this._map.getPixelOrigin(),s=this.options.tileSize;return t.multiplyBy(s).subtract(i)},getTileUrl:function(t){return this._adjustTilePoint(t),e.Util.template(this._url,e.extend({s:this._getSubdomain(t),z:this._getZoomForUrl(),x:t.x,y:t.y},this.options))},_getWrapTileNum:function(){return Math.pow(2,this._getZoomForUrl())},_adjustTilePoint:function(t){var i=this._getWrapTileNum();this.options.continuousWorld||this.options.noWrap||(t.x=(t.x%i+i)%i),this.options.tms&&(t.y=i-t.y-1)},_getSubdomain:function(t){var i=(t.x+t.y)%this.options.subdomains.length;return this.options.subdomains[i]},_createTileProto:function(){var t=this._tileImg=e.DomUtil.create("img","leaflet-tile");t.style.width=t.style.height=this.options.tileSize+"px",t.galleryimg="no"},_getTile:function(){if(this.options.reuseTiles&&this._unusedTiles.length>0){var t=this._unusedTiles.pop();return this._resetTile(t),t}return this._createTile()},_resetTile:function(){},_createTile:function(){var t=this._tileImg.cloneNode(!1);return t.onselectstart=t.onmousemove=e.Util.falseFn,t},_loadTile:function(t,i){t._layer=this,t.onload=this._tileOnLoad,t.onerror=this._tileOnError,t.src=this.getTileUrl(i)},_tileLoaded:function(){this._tilesToLoad--,this._tilesToLoad||this.fire("load")},_tileOnLoad:function(){var t=this._layer;this.src!==e.Util.emptyImageUrl&&(e.DomUtil.addClass(this,"leaflet-tile-loaded"),t.fire("tileload",{tile:this,url:this.src})),t._tileLoaded()},_tileOnError:function(){var t=this._layer;t.fire("tileerror",{tile:this,url:this.src});var i=t.options.errorTileUrl;i&&(this.src=i),t._tileLoaded()}}),e.tileLayer=function(t,i){return new e.TileLayer(t,i)},e.TileLayer.WMS=e.TileLayer.extend({defaultWmsParams:{service:"WMS",request:"GetMap",version:"1.1.1",layers:"",styles:"",format:"image/jpeg",transparent:!1},initialize:function(t,i){this._url=t;var s=e.extend({},this.defaultWmsParams);s.width=s.height=i.detectRetina&&e.Browser.retina?2*this.options.tileSize:this.options.tileSize;for(var o in i)this.options.hasOwnProperty(o)||(s[o]=i[o]);this.wmsParams=s,e.setOptions(this,i)},onAdd:function(t){var i=parseFloat(this.wmsParams.version)>=1.3?"crs":"srs";this.wmsParams[i]=t.options.crs.code,e.TileLayer.prototype.onAdd.call(this,t)},getTileUrl:function(t,i){this._adjustTilePoint(t);var s=this._map,o=s.options.crs,n=this.options.tileSize,a=t.multiplyBy(n),r=a.add(new e.Point(n,n)),h=o.project(s.unproject(a,i)),l=o.project(s.unproject(r,i)),c=[h.x,l.y,l.x,h.y].join(","),m=e.Util.template(this._url,{s:this._getSubdomain(t)});return m+e.Util.getParamString(this.wmsParams,m)+"&bbox="+c},setParams:function(t,i){return e.extend(this.wmsParams,t),i||this.redraw(),this}}),e.tileLayer.wms=function(t,i){return new e.TileLayer.WMS(t,i)},e.TileLayer.Canvas=e.TileLayer.extend({options:{async:!1},initialize:function(t){e.setOptions(this,t)},redraw:function(){var t=this._tiles;for(var i in t)t.hasOwnProperty(i)&&this._redrawTile(t[i])},_redrawTile:function(t){this.drawTile(t,t._tilePoint,this._map._zoom)},_createTileProto:function(){var t=this._canvasProto=e.DomUtil.create("canvas","leaflet-tile");t.width=t.height=this.options.tileSize},_createTile:function(){var t=this._canvasProto.cloneNode(!1);return t.onselectstart=t.onmousemove=e.Util.falseFn,t},_loadTile:function(t,i){t._layer=this,t._tilePoint=i,this._redrawTile(t),this.options.async||this.tileDrawn(t)},drawTile:function(){},tileDrawn:function(t){this._tileOnLoad.call(t)}}),e.tileLayer.canvas=function(t){return new e.TileLayer.Canvas(t)},e.ImageOverlay=e.Class.extend({includes:e.Mixin.Events,options:{opacity:1},initialize:function(t,i,s){this._url=t,this._bounds=e.latLngBounds(i),e.setOptions(this,s)},onAdd:function(t){this._map=t,this._image||this._initImage(),t._panes.overlayPane.appendChild(this._image),t.on("viewreset",this._reset,this),t.options.zoomAnimation&&e.Browser.any3d&&t.on("zoomanim",this._animateZoom,this),this._reset()},onRemove:function(t){t.getPanes().overlayPane.removeChild(this._image),t.off("viewreset",this._reset,this),t.options.zoomAnimation&&t.off("zoomanim",this._animateZoom,this)},addTo:function(t){return t.addLayer(this),this},setOpacity:function(t){return this.options.opacity=t,this._updateOpacity(),this},bringToFront:function(){return this._image&&this._map._panes.overlayPane.appendChild(this._image),this},bringToBack:function(){var t=this._map._panes.overlayPane;return this._image&&t.insertBefore(this._image,t.firstChild),this},_initImage:function(){this._image=e.DomUtil.create("img","leaflet-image-layer"),this._map.options.zoomAnimation&&e.Browser.any3d?e.DomUtil.addClass(this._image,"leaflet-zoom-animated"):e.DomUtil.addClass(this._image,"leaflet-zoom-hide"),this._updateOpacity(),e.extend(this._image,{galleryimg:"no",onselectstart:e.Util.falseFn,onmousemove:e.Util.falseFn,onload:e.bind(this._onImageLoad,this),src:this._url})},_animateZoom:function(t){var i=this._map,s=this._image,o=i.getZoomScale(t.zoom),n=this._bounds.getNorthWest(),a=this._bounds.getSouthEast(),r=i._latLngToNewLayerPoint(n,t.zoom,t.center),h=i._latLngToNewLayerPoint(a,t.zoom,t.center)._subtract(r),l=r._add(h._multiplyBy(.5*(1-1/o)));s.style[e.DomUtil.TRANSFORM]=e.DomUtil.getTranslateString(l)+" scale("+o+") "},_reset:function(){var t=this._image,i=this._map.latLngToLayerPoint(this._bounds.getNorthWest()),s=this._map.latLngToLayerPoint(this._bounds.getSouthEast())._subtract(i);e.DomUtil.setPosition(t,i),t.style.width=s.x+"px",t.style.height=s.y+"px"},_onImageLoad:function(){this.fire("load")},_updateOpacity:function(){e.DomUtil.setOpacity(this._image,this.options.opacity)}}),e.imageOverlay=function(t,i,s){return new e.ImageOverlay(t,i,s)},e.Icon=e.Class.extend({options:{className:""},initialize:function(t){e.setOptions(this,t)},createIcon:function(){return this._createIcon("icon")},createShadow:function(){return this._createIcon("shadow")},_createIcon:function(t){var i=this._getIconUrl(t);if(!i){if("icon"===t)throw Error("iconUrl not set in Icon options (see the docs).");return null}var s=this._createImg(i);return this._setIconStyles(s,t),s},_setIconStyles:function(t,i){var s,o=this.options,n=e.point(o[i+"Size"]);s="shadow"===i?e.point(o.shadowAnchor||o.iconAnchor):e.point(o.iconAnchor),!s&&n&&(s=n.divideBy(2,!0)),t.className="leaflet-marker-"+i+" "+o.className,s&&(t.style.marginLeft=-s.x+"px",t.style.marginTop=-s.y+"px"),n&&(t.style.width=n.x+"px",t.style.height=n.y+"px")},_createImg:function(t){var s;return e.Browser.ie6?(s=i.createElement("div"),s.style.filter='progid:DXImageTransform.Microsoft.AlphaImageLoader(src="'+t+'")'):(s=i.createElement("img"),s.src=t),s},_getIconUrl:function(t){return e.Browser.retina&&this.options[t+"RetinaUrl"]?this.options[t+"RetinaUrl"]:this.options[t+"Url"]}}),e.icon=function(t){return new e.Icon(t)},e.Icon.Default=e.Icon.extend({options:{iconSize:new e.Point(25,41),iconAnchor:new e.Point(12,41),popupAnchor:new e.Point(1,-34),shadowSize:new e.Point(41,41)},_getIconUrl:function(t){var i=t+"Url";if(this.options[i])return this.options[i];e.Browser.retina&&"icon"===t&&(t+="@2x");var s=e.Icon.Default.imagePath;if(!s)throw Error("Couldn't autodetect L.Icon.Default.imagePath, set it manually.");return"marker-"+t+".png"}}),e.Icon.Default.imagePath=function(){var t,s,e,o,n=i.getElementsByTagName("script"),a=/\/?leaflet[\-\._]?([\w\-\._]*)\.js\??/;for(t=0,s=n.length;s>t;t++)if(e=n[t].src,o=e.match(a))return e.split(a)[0]+""}(),e.Marker=e.Class.extend({includes:e.Mixin.Events,options:{icon:new e.Icon.Default,title:"",clickable:!0,draggable:!1,zIndexOffset:0,opacity:1,riseOnHover:!1,riseOffset:250},initialize:function(t,i){e.setOptions(this,i),this._latlng=e.latLng(t)},onAdd:function(t){this._map=t,t.on("viewreset",this.update,this),this._initIcon(),this.update(),t.options.zoomAnimation&&t.options.markerZoomAnimation&&t.on("zoomanim",this._animateZoom,this)},addTo:function(t){return t.addLayer(this),this},onRemove:function(t){this._removeIcon(),this.fire("remove"),t.off({viewreset:this.update,zoomanim:this._animateZoom},this),this._map=null},getLatLng:function(){return this._latlng},setLatLng:function(t){return this._latlng=e.latLng(t),this.update(),this.fire("move",{latlng:this._latlng})},setZIndexOffset:function(t){return this.options.zIndexOffset=t,this.update(),this},setIcon:function(t){return this._map&&this._removeIcon(),this.options.icon=t,this._map&&(this._initIcon(),this.update()),this},update:function(){if(this._icon){var t=this._map.latLngToLayerPoint(this._latlng).round();this._setPos(t)}return this},_initIcon:function(){var t=this.options,i=this._map,s=i.options.zoomAnimation&&i.options.markerZoomAnimation,o=s?"leaflet-zoom-animated":"leaflet-zoom-hide",n=!1;this._icon||(this._icon=t.icon.createIcon(),t.title&&(this._icon.title=t.title),this._initInteraction(),n=1>this.options.opacity,e.DomUtil.addClass(this._icon,o),t.riseOnHover&&e.DomEvent.on(this._icon,"mouseover",this._bringToFront,this).on(this._icon,"mouseout",this._resetZIndex,this)),this._shadow||(this._shadow=t.icon.createShadow(),this._shadow&&(e.DomUtil.addClass(this._shadow,o),n=1>this.options.opacity)),n&&this._updateOpacity();var a=this._map._panes;a.markerPane.appendChild(this._icon),this._shadow&&a.shadowPane.appendChild(this._shadow)},_removeIcon:function(){var t=this._map._panes;this.options.riseOnHover&&e.DomEvent.off(this._icon,"mouseover",this._bringToFront).off(this._icon,"mouseout",this._resetZIndex),t.markerPane.removeChild(this._icon),this._shadow&&t.shadowPane.removeChild(this._shadow),this._icon=this._shadow=null},_setPos:function(t){e.DomUtil.setPosition(this._icon,t),this._shadow&&e.DomUtil.setPosition(this._shadow,t),this._zIndex=t.y+this.options.zIndexOffset,this._resetZIndex()},_updateZIndex:function(t){this._icon.style.zIndex=this._zIndex+t},_animateZoom:function(t){var i=this._map._latLngToNewLayerPoint(this._latlng,t.zoom,t.center);this._setPos(i)},_initInteraction:function(){if(this.options.clickable){var t=this._icon,i=["dblclick","mousedown","mouseover","mouseout","contextmenu"];e.DomUtil.addClass(t,"leaflet-clickable"),e.DomEvent.on(t,"click",this._onMouseClick,this);for(var s=0;i.length>s;s++)e.DomEvent.on(t,i[s],this._fireMouseEvent,this);e.Handler.MarkerDrag&&(this.dragging=new e.Handler.MarkerDrag(this),this.options.draggable&&this.dragging.enable())}},_onMouseClick:function(t){var i=this.dragging&&this.dragging.moved();(this.hasEventListeners(t.type)||i)&&e.DomEvent.stopPropagation(t),i||(this.dragging&&this.dragging._enabled||!this._map.dragging||!this._map.dragging.moved())&&this.fire(t.type,{originalEvent:t})},_fireMouseEvent:function(t){this.fire(t.type,{originalEvent:t}),"contextmenu"===t.type&&this.hasEventListeners(t.type)&&e.DomEvent.preventDefault(t),"mousedown"!==t.type&&e.DomEvent.stopPropagation(t)},setOpacity:function(t){this.options.opacity=t,this._map&&this._updateOpacity()},_updateOpacity:function(){e.DomUtil.setOpacity(this._icon,this.options.opacity),this._shadow&&e.DomUtil.setOpacity(this._shadow,this.options.opacity)},_bringToFront:function(){this._updateZIndex(this.options.riseOffset)},_resetZIndex:function(){this._updateZIndex(0)}}),e.marker=function(t,i){return new e.Marker(t,i)},e.DivIcon=e.Icon.extend({options:{iconSize:new e.Point(12,12),className:"leaflet-div-icon"},createIcon:function(){var t=i.createElement("div"),s=this.options;return s.html&&(t.innerHTML=s.html),s.bgPos&&(t.style.backgroundPosition=-s.bgPos.x+"px "+-s.bgPos.y+"px"),this._setIconStyles(t,"icon"),t},createShadow:function(){return null}}),e.divIcon=function(t){return new e.DivIcon(t)},e.Map.mergeOptions({closePopupOnClick:!0}),e.Popup=e.Class.extend({includes:e.Mixin.Events,options:{minWidth:50,maxWidth:300,maxHeight:null,autoPan:!0,closeButton:!0,offset:new e.Point(0,6),autoPanPadding:new e.Point(5,5),className:"",zoomAnimation:!0},initialize:function(t,i){e.setOptions(this,t),this._source=i,this._animated=e.Browser.any3d&&this.options.zoomAnimation},onAdd:function(t){this._map=t,this._container||this._initLayout(),this._updateContent();var i=t.options.fadeAnimation;i&&e.DomUtil.setOpacity(this._container,0),t._panes.popupPane.appendChild(this._container),t.on("viewreset",this._updatePosition,this),this._animated&&t.on("zoomanim",this._zoomAnimation,this),t.options.closePopupOnClick&&t.on("preclick",this._close,this),this._update(),i&&e.DomUtil.setOpacity(this._container,1)},addTo:function(t){return t.addLayer(this),this},openOn:function(t){return t.openPopup(this),this},onRemove:function(t){t._panes.popupPane.removeChild(this._container),e.Util.falseFn(this._container.offsetWidth),t.off({viewreset:this._updatePosition,preclick:this._close,zoomanim:this._zoomAnimation},this),t.options.fadeAnimation&&e.DomUtil.setOpacity(this._container,0),this._map=null},setLatLng:function(t){return this._latlng=e.latLng(t),this._update(),this},setContent:function(t){return this._content=t,this._update(),this},_close:function(){var t=this._map;t&&(t._popup=null,t.removeLayer(this).fire("popupclose",{popup:this}))},_initLayout:function(){var t,i="leaflet-popup",s=i+" "+this.options.className+" leaflet-zoom-"+(this._animated?"animated":"hide"),o=this._container=e.DomUtil.create("div",s);this.options.closeButton&&(t=this._closeButton=e.DomUtil.create("a",i+"-close-button",o),t.href="#close",t.innerHTML="×",e.DomEvent.on(t,"click",this._onCloseButtonClick,this));var n=this._wrapper=e.DomUtil.create("div",i+"-content-wrapper",o);e.DomEvent.disableClickPropagation(n),this._contentNode=e.DomUtil.create("div",i+"-content",n),e.DomEvent.on(this._contentNode,"mousewheel",e.DomEvent.stopPropagation),this._tipContainer=e.DomUtil.create("div",i+"-tip-container",o),this._tip=e.DomUtil.create("div",i+"-tip",this._tipContainer)},_update:function(){this._map&&(this._container.style.visibility="hidden",this._updateContent(),this._updateLayout(),this._updatePosition(),this._container.style.visibility="",this._adjustPan())},_updateContent:function(){if(this._content){if("string"==typeof this._content)this._contentNode.innerHTML=this._content;else{for(;this._contentNode.hasChildNodes();)this._contentNode.removeChild(this._contentNode.firstChild);this._contentNode.appendChild(this._content)}this.fire("contentupdate")}},_updateLayout:function(){var t=this._contentNode,i=t.style;i.width="",i.whiteSpace="nowrap";var s=t.offsetWidth;s=Math.min(s,this.options.maxWidth),s=Math.max(s,this.options.minWidth),i.width=s+1+"px",i.whiteSpace="",i.height="";var o=t.offsetHeight,n=this.options.maxHeight,a="leaflet-popup-scrolled";n&&o>n?(i.height=n+"px",e.DomUtil.addClass(t,a)):e.DomUtil.removeClass(t,a),this._containerWidth=this._container.offsetWidth},_updatePosition:function(){if(this._map){var t=this._map.latLngToLayerPoint(this._latlng),i=this._animated,s=this.options.offset;i&&e.DomUtil.setPosition(this._container,t),this._containerBottom=-s.y-(i?0:t.y),this._containerLeft=-Math.round(this._containerWidth/2)+s.x+(i?0:t.x),this._container.style.bottom=this._containerBottom+"px",this._container.style.left=this._containerLeft+"px"}},_zoomAnimation:function(t){var i=this._map._latLngToNewLayerPoint(this._latlng,t.zoom,t.center);e.DomUtil.setPosition(this._container,i)},_adjustPan:function(){if(this.options.autoPan){var t=this._map,i=this._container.offsetHeight,s=this._containerWidth,o=new e.Point(this._containerLeft,-i-this._containerBottom);this._animated&&o._add(e.DomUtil.getPosition(this._container));var n=t.layerPointToContainerPoint(o),a=this.options.autoPanPadding,r=t.getSize(),h=0,l=0;0>n.x&&(h=n.x-a.x),n.x+s>r.x&&(h=n.x+s-r.x+a.x),0>n.y&&(l=n.y-a.y),n.y+i>r.y&&(l=n.y+i-r.y+a.y),(h||l)&&t.panBy(new e.Point(h,l))}},_onCloseButtonClick:function(t){this._close(),e.DomEvent.stop(t)}}),e.popup=function(t,i){return new e.Popup(t,i)},e.Marker.include({openPopup:function(){return this._popup&&this._map&&(this._popup.setLatLng(this._latlng),this._map.openPopup(this._popup)),this},closePopup:function(){return this._popup&&this._popup._close(),this},bindPopup:function(t,i){var s=e.point(this.options.icon.options.popupAnchor)||new e.Point(0,0);return s=s.add(e.Popup.prototype.options.offset),i&&i.offset&&(s=s.add(i.offset)),i=e.extend({offset:s},i),this._popup||this.on("click",this.openPopup,this).on("remove",this.closePopup,this).on("move",this._movePopup,this),this._popup=new e.Popup(i,this).setContent(t),this},unbindPopup:function(){return this._popup&&(this._popup=null,this.off("click",this.openPopup).off("remove",this.closePopup).off("move",this._movePopup)),this},_movePopup:function(t){this._popup.setLatLng(t.latlng)}}),e.Map.include({openPopup:function(t){return this.closePopup(),this._popup=t,this.addLayer(t).fire("popupopen",{popup:this._popup})},closePopup:function(){return this._popup&&this._popup._close(),this}}),e.LayerGroup=e.Class.extend({initialize:function(t){this._layers={};var i,s;if(t)for(i=0,s=t.length;s>i;i++)this.addLayer(t[i])},addLayer:function(t){var i=e.stamp(t);return this._layers[i]=t,this._map&&this._map.addLayer(t),this},removeLayer:function(t){var i=e.stamp(t);return delete this._layers[i],this._map&&this._map.removeLayer(t),this},clearLayers:function(){return this.eachLayer(this.removeLayer,this),this},invoke:function(t){var i,s,e=Array.prototype.slice.call(arguments,1);for(i in this._layers)this._layers.hasOwnProperty(i)&&(s=this._layers[i],s[t]&&s[t].apply(s,e));return this},onAdd:function(t){this._map=t,this.eachLayer(t.addLayer,t)},onRemove:function(t){this.eachLayer(t.removeLayer,t),this._map=null},addTo:function(t){return t.addLayer(this),this},eachLayer:function(t,i){for(var s in this._layers)this._layers.hasOwnProperty(s)&&t.call(i,this._layers[s])},setZIndex:function(t){return this.invoke("setZIndex",t)}}),e.layerGroup=function(t){return new e.LayerGroup(t)},e.FeatureGroup=e.LayerGroup.extend({includes:e.Mixin.Events,statics:{EVENTS:"click dblclick mouseover mouseout mousemove contextmenu"},addLayer:function(t){return this._layers[e.stamp(t)]?this:(t.on(e.FeatureGroup.EVENTS,this._propagateEvent,this),e.LayerGroup.prototype.addLayer.call(this,t),this._popupContent&&t.bindPopup&&t.bindPopup(this._popupContent,this._popupOptions),this.fire("layeradd",{layer:t}))},removeLayer:function(t){return t.off(e.FeatureGroup.EVENTS,this._propagateEvent,this),e.LayerGroup.prototype.removeLayer.call(this,t),this._popupContent&&this.invoke("unbindPopup"),this.fire("layerremove",{layer:t})},bindPopup:function(t,i){return this._popupContent=t,this._popupOptions=i,this.invoke("bindPopup",t,i)},setStyle:function(t){return this.invoke("setStyle",t)},bringToFront:function(){return this.invoke("bringToFront")},bringToBack:function(){return this.invoke("bringToBack")},getBounds:function(){var t=new e.LatLngBounds;return this.eachLayer(function(i){t.extend(i instanceof e.Marker?i.getLatLng():i.getBounds())}),t},_propagateEvent:function(t){t.layer=t.target,t.target=this,this.fire(t.type,t)}}),e.featureGroup=function(t){return new e.FeatureGroup(t)},e.Path=e.Class.extend({includes:[e.Mixin.Events],statics:{CLIP_PADDING:e.Browser.mobile?Math.max(0,Math.min(.5,(1280/Math.max(t.innerWidth,t.innerHeight)-1)/2)):.5},options:{stroke:!0,color:"#0033ff",dashArray:null,weight:5,opacity:.5,fill:!1,fillColor:null,fillOpacity:.2,clickable:!0},initialize:function(t){e.setOptions(this,t)},onAdd:function(t){this._map=t,this._container||(this._initElements(),this._initEvents()),this.projectLatlngs(),this._updatePath(),this._container&&this._map._pathRoot.appendChild(this._container),this.fire("add"),t.on({viewreset:this.projectLatlngs,moveend:this._updatePath},this)},addTo:function(t){return t.addLayer(this),this},onRemove:function(t){t._pathRoot.removeChild(this._container),this.fire("remove"),this._map=null,e.Browser.vml&&(this._container=null,this._stroke=null,this._fill=null),t.off({viewreset:this.projectLatlngs,moveend:this._updatePath},this)},projectLatlngs:function(){},setStyle:function(t){return e.setOptions(this,t),this._container&&this._updateStyle(),this},redraw:function(){return this._map&&(this.projectLatlngs(),this._updatePath()),this}}),e.Map.include({_updatePathViewport:function(){var t=e.Path.CLIP_PADDING,i=this.getSize(),s=e.DomUtil.getPosition(this._mapPane),o=s.multiplyBy(-1)._subtract(i.multiplyBy(t)._round()),n=o.add(i.multiplyBy(1+2*t)._round());this._pathViewport=new e.Bounds(o,n)}}),e.Path.SVG_NS="http://www.w3.org/2000/svg",e.Browser.svg=!(!i.createElementNS||!i.createElementNS(e.Path.SVG_NS,"svg").createSVGRect),e.Path=e.Path.extend({statics:{SVG:e.Browser.svg},bringToFront:function(){var t=this._map._pathRoot,i=this._container;return i&&t.lastChild!==i&&t.appendChild(i),this},bringToBack:function(){var t=this._map._pathRoot,i=this._container,s=t.firstChild;return i&&s!==i&&t.insertBefore(i,s),this},getPathString:function(){},_createElement:function(t){return i.createElementNS(e.Path.SVG_NS,t)},_initElements:function(){this._map._initPathRoot(),this._initPath(),this._initStyle()},_initPath:function(){this._container=this._createElement("g"),this._path=this._createElement("path"),this._container.appendChild(this._path)},_initStyle:function(){this.options.stroke&&(this._path.setAttribute("stroke-linejoin","round"),this._path.setAttribute("stroke-linecap","round")),this.options.fill&&this._path.setAttribute("fill-rule","evenodd"),this._updateStyle()},_updateStyle:function(){this.options.stroke?(this._path.setAttribute("stroke",this.options.color),this._path.setAttribute("stroke-opacity",this.options.opacity),this._path.setAttribute("stroke-width",this.options.weight),this.options.dashArray?this._path.setAttribute("stroke-dasharray",this.options.dashArray):this._path.removeAttribute("stroke-dasharray")):this._path.setAttribute("stroke","none"),this.options.fill?(this._path.setAttribute("fill",this.options.fillColor||this.options.color),this._path.setAttribute("fill-opacity",this.options.fillOpacity)):this._path.setAttribute("fill","none")},_updatePath:function(){var t=this.getPathString();t||(t="M0 0"),this._path.setAttribute("d",t)},_initEvents:function(){if(this.options.clickable){(e.Browser.svg||!e.Browser.vml)&&this._path.setAttribute("class","leaflet-clickable"),e.DomEvent.on(this._container,"click",this._onMouseClick,this);for(var t=["dblclick","mousedown","mouseover","mouseout","mousemove","contextmenu"],i=0;t.length>i;i++)e.DomEvent.on(this._container,t[i],this._fireMouseEvent,this)}},_onMouseClick:function(t){this._map.dragging&&this._map.dragging.moved()||this._fireMouseEvent(t)},_fireMouseEvent:function(t){if(this.hasEventListeners(t.type)){var i=this._map,s=i.mouseEventToContainerPoint(t),o=i.containerPointToLayerPoint(s),n=i.layerPointToLatLng(o);this.fire(t.type,{latlng:n,layerPoint:o,containerPoint:s,originalEvent:t}),"contextmenu"===t.type&&e.DomEvent.preventDefault(t),"mousemove"!==t.type&&e.DomEvent.stopPropagation(t)}}}),e.Map.include({_initPathRoot:function(){this._pathRoot||(this._pathRoot=e.Path.prototype._createElement("svg"),this._panes.overlayPane.appendChild(this._pathRoot),this.options.zoomAnimation&&e.Browser.any3d?(this._pathRoot.setAttribute("class"," leaflet-zoom-animated"),this.on({zoomanim:this._animatePathZoom,zoomend:this._endPathZoom})):this._pathRoot.setAttribute("class"," leaflet-zoom-hide"),this.on("moveend",this._updateSvgViewport),this._updateSvgViewport())},_animatePathZoom:function(t){var i=this.getZoomScale(t.zoom),s=this._getCenterOffset(t.center)._multiplyBy(-i)._add(this._pathViewport.min);this._pathRoot.style[e.DomUtil.TRANSFORM]=e.DomUtil.getTranslateString(s)+" scale("+i+") ",this._pathZooming=!0},_endPathZoom:function(){this._pathZooming=!1},_updateSvgViewport:function(){if(!this._pathZooming){this._updatePathViewport();var t=this._pathViewport,i=t.min,s=t.max,o=s.x-i.x,n=s.y-i.y,a=this._pathRoot,r=this._panes.overlayPane;e.Browser.mobileWebkit&&r.removeChild(a),e.DomUtil.setPosition(a,i),a.setAttribute("width",o),a.setAttribute("height",n),a.setAttribute("viewBox",[i.x,i.y,o,n].join(" ")),e.Browser.mobileWebkit&&r.appendChild(a)}}}),e.Path.include({bindPopup:function(t,i){return(!this._popup||i)&&(this._popup=new e.Popup(i,this)),this._popup.setContent(t),this._popupHandlersAdded||(this.on("click",this._openPopup,this).on("remove",this.closePopup,this),this._popupHandlersAdded=!0),this},unbindPopup:function(){return this._popup&&(this._popup=null,this.off("click",this._openPopup).off("remove",this.closePopup),this._popupHandlersAdded=!1),this},openPopup:function(t){return this._popup&&(t=t||this._latlng||this._latlngs[Math.floor(this._latlngs.length/2)],this._openPopup({latlng:t})),this},closePopup:function(){return this._popup&&this._popup._close(),this},_openPopup:function(t){this._popup.setLatLng(t.latlng),this._map.openPopup(this._popup)}}),e.Browser.vml=!e.Browser.svg&&function(){try{var t=i.createElement("div");t.innerHTML='';var s=t.firstChild;return s.style.behavior="url(#default#VML)",s&&"object"==typeof s.adj}catch(e){return!1}}(),e.Path=e.Browser.svg||!e.Browser.vml?e.Path:e.Path.extend({statics:{VML:!0,CLIP_PADDING:.02},_createElement:function(){try{return i.namespaces.add("lvml","urn:schemas-microsoft-com:vml"),function(t){return i.createElement("')}}catch(t){return function(t){return i.createElement("<"+t+' xmlns="urn:schemas-microsoft.com:vml" class="lvml">')}}}(),_initPath:function(){var t=this._container=this._createElement("shape");e.DomUtil.addClass(t,"leaflet-vml-shape"),this.options.clickable&&e.DomUtil.addClass(t,"leaflet-clickable"),t.coordsize="1 1",this._path=this._createElement("path"),t.appendChild(this._path),this._map._pathRoot.appendChild(t)},_initStyle:function(){this._updateStyle()},_updateStyle:function(){var t=this._stroke,i=this._fill,s=this.options,e=this._container;e.stroked=s.stroke,e.filled=s.fill,s.stroke?(t||(t=this._stroke=this._createElement("stroke"),t.endcap="round",e.appendChild(t)),t.weight=s.weight+"px",t.color=s.color,t.opacity=s.opacity,t.dashStyle=s.dashArray?s.dashArray instanceof Array?s.dashArray.join(" "):s.dashArray.replace(/ *, */g," "):""):t&&(e.removeChild(t),this._stroke=null),s.fill?(i||(i=this._fill=this._createElement("fill"),e.appendChild(i)),i.color=s.fillColor||s.color,i.opacity=s.fillOpacity):i&&(e.removeChild(i),this._fill=null)},_updatePath:function(){var t=this._container.style;t.display="none",this._path.v=this.getPathString()+" ",t.display=""}}),e.Map.include(e.Browser.svg||!e.Browser.vml?{}:{_initPathRoot:function(){if(!this._pathRoot){var t=this._pathRoot=i.createElement("div");t.className="leaflet-vml-container",this._panes.overlayPane.appendChild(t),this.on("moveend",this._updatePathViewport),this._updatePathViewport()}}}),e.Browser.canvas=function(){return!!i.createElement("canvas").getContext}(),e.Path=e.Path.SVG&&!t.L_PREFER_CANVAS||!e.Browser.canvas?e.Path:e.Path.extend({statics:{CANVAS:!0,SVG:!1},redraw:function(){return this._map&&(this.projectLatlngs(),this._requestUpdate()),this},setStyle:function(t){return e.setOptions(this,t),this._map&&(this._updateStyle(),this._requestUpdate()),this},onRemove:function(t){t.off("viewreset",this.projectLatlngs,this).off("moveend",this._updatePath,this),this.options.clickable&&this._map.off("click",this._onClick,this),this._requestUpdate(),this._map=null},_requestUpdate:function(){this._map&&!e.Path._updateRequest&&(e.Path._updateRequest=e.Util.requestAnimFrame(this._fireMapMoveEnd,this._map))},_fireMapMoveEnd:function(){e.Path._updateRequest=null,this.fire("moveend")},_initElements:function(){this._map._initPathRoot(),this._ctx=this._map._canvasCtx},_updateStyle:function(){var t=this.options;t.stroke&&(this._ctx.lineWidth=t.weight,this._ctx.strokeStyle=t.color),t.fill&&(this._ctx.fillStyle=t.fillColor||t.color)},_drawPath:function(){var t,i,s,o,n,a;for(this._ctx.beginPath(),t=0,s=this._parts.length;s>t;t++){for(i=0,o=this._parts[t].length;o>i;i++)n=this._parts[t][i],a=(0===i?"move":"line")+"To",this._ctx[a](n.x,n.y);this instanceof e.Polygon&&this._ctx.closePath()}},_checkIfEmpty:function(){return!this._parts.length},_updatePath:function(){if(!this._checkIfEmpty()){var t=this._ctx,i=this.options;this._drawPath(),t.save(),this._updateStyle(),i.fill&&(t.globalAlpha=i.fillOpacity,t.fill()),i.stroke&&(t.globalAlpha=i.opacity,t.stroke()),t.restore()}},_initEvents:function(){this.options.clickable&&this._map.on("click",this._onClick,this)},_onClick:function(t){this._containsPoint(t.layerPoint)&&this.fire("click",{latlng:t.latlng,layerPoint:t.layerPoint,containerPoint:t.containerPoint,originalEvent:t})}}),e.Map.include(e.Path.SVG&&!t.L_PREFER_CANVAS||!e.Browser.canvas?{}:{_initPathRoot:function(){var t,s=this._pathRoot;s||(s=this._pathRoot=i.createElement("canvas"),s.style.position="absolute",t=this._canvasCtx=s.getContext("2d"),t.lineCap="round",t.lineJoin="round",this._panes.overlayPane.appendChild(s),this.options.zoomAnimation&&(this._pathRoot.className="leaflet-zoom-animated",this.on("zoomanim",this._animatePathZoom),this.on("zoomend",this._endPathZoom)),this.on("moveend",this._updateCanvasViewport),this._updateCanvasViewport())},_updateCanvasViewport:function(){if(!this._pathZooming){this._updatePathViewport();var t=this._pathViewport,i=t.min,s=t.max.subtract(i),o=this._pathRoot;e.DomUtil.setPosition(o,i),o.width=s.x,o.height=s.y,o.getContext("2d").translate(-i.x,-i.y)}}}),e.LineUtil={simplify:function(t,i){if(!i||!t.length)return t.slice();var s=i*i;return t=this._reducePoints(t,s),t=this._simplifyDP(t,s)},pointToSegmentDistance:function(t,i,s){return Math.sqrt(this._sqClosestPointOnSegment(t,i,s,!0))},closestPointOnSegment:function(t,i,s){return this._sqClosestPointOnSegment(t,i,s)},_simplifyDP:function(t,i){var e=t.length,o=typeof Uint8Array!=s+""?Uint8Array:Array,n=new o(e);n[0]=n[e-1]=1,this._simplifyDPStep(t,n,i,0,e-1);var a,r=[];for(a=0;e>a;a++)n[a]&&r.push(t[a]);return r},_simplifyDPStep:function(t,i,s,e,o){var n,a,r,h=0;for(a=e+1;o-1>=a;a++)r=this._sqClosestPointOnSegment(t[a],t[e],t[o],!0),r>h&&(n=a,h=r);h>s&&(i[n]=1,this._simplifyDPStep(t,i,s,e,n),this._simplifyDPStep(t,i,s,n,o))},_reducePoints:function(t,i){for(var s=[t[0]],e=1,o=0,n=t.length;n>e;e++)this._sqDist(t[e],t[o])>i&&(s.push(t[e]),o=e);return n-1>o&&s.push(t[n-1]),s},clipSegment:function(t,i,s,e){var o,n,a,r=e?this._lastCode:this._getBitCode(t,s),h=this._getBitCode(i,s);for(this._lastCode=h;;){if(!(r|h))return[t,i];if(r&h)return!1;o=r||h,n=this._getEdgeIntersection(t,i,o,s),a=this._getBitCode(n,s),o===r?(t=n,r=a):(i=n,h=a)}},_getEdgeIntersection:function(t,i,o,n){var a=i.x-t.x,r=i.y-t.y,h=n.min,l=n.max;return 8&o?new e.Point(t.x+a*(l.y-t.y)/r,l.y):4&o?new e.Point(t.x+a*(h.y-t.y)/r,h.y):2&o?new e.Point(l.x,t.y+r*(l.x-t.x)/a):1&o?new e.Point(h.x,t.y+r*(h.x-t.x)/a):s},_getBitCode:function(t,i){var s=0;return t.xi.max.x&&(s|=2),t.yi.max.y&&(s|=8),s},_sqDist:function(t,i){var s=i.x-t.x,e=i.y-t.y;return s*s+e*e},_sqClosestPointOnSegment:function(t,i,s,o){var n,a=i.x,r=i.y,h=s.x-a,l=s.y-r,c=h*h+l*l;return c>0&&(n=((t.x-a)*h+(t.y-r)*l)/c, -n>1?(a=s.x,r=s.y):n>0&&(a+=h*n,r+=l*n)),h=t.x-a,l=t.y-r,o?h*h+l*l:new e.Point(a,r)}},e.Polyline=e.Path.extend({initialize:function(t,i){e.Path.prototype.initialize.call(this,i),this._latlngs=this._convertLatLngs(t)},options:{smoothFactor:1,noClip:!1},projectLatlngs:function(){this._originalPoints=[];for(var t=0,i=this._latlngs.length;i>t;t++)this._originalPoints[t]=this._map.latLngToLayerPoint(this._latlngs[t])},getPathString:function(){for(var t=0,i=this._parts.length,s="";i>t;t++)s+=this._getPathPartStr(this._parts[t]);return s},getLatLngs:function(){return this._latlngs},setLatLngs:function(t){return this._latlngs=this._convertLatLngs(t),this.redraw()},addLatLng:function(t){return this._latlngs.push(e.latLng(t)),this.redraw()},spliceLatLngs:function(){var t=[].splice.apply(this._latlngs,arguments);return this._convertLatLngs(this._latlngs),this.redraw(),t},closestLayerPoint:function(t){for(var i,s,o=1/0,n=this._parts,a=null,r=0,h=n.length;h>r;r++)for(var l=n[r],c=1,m=l.length;m>c;c++){i=l[c-1],s=l[c];var u=e.LineUtil._sqClosestPointOnSegment(t,i,s,!0);o>u&&(o=u,a=e.LineUtil._sqClosestPointOnSegment(t,i,s))}return a&&(a.distance=Math.sqrt(o)),a},getBounds:function(){var t,i,s=new e.LatLngBounds,o=this.getLatLngs();for(t=0,i=o.length;i>t;t++)s.extend(o[t]);return s},_convertLatLngs:function(t){var i,s;for(i=0,s=t.length;s>i;i++){if(e.Util.isArray(t[i])&&"number"!=typeof t[i][0])return;t[i]=e.latLng(t[i])}return t},_initEvents:function(){e.Path.prototype._initEvents.call(this)},_getPathPartStr:function(t){for(var i,s=e.Path.VML,o=0,n=t.length,a="";n>o;o++)i=t[o],s&&i._round(),a+=(o?"L":"M")+i.x+" "+i.y;return a},_clipPoints:function(){var t,i,o,n=this._originalPoints,a=n.length;if(this.options.noClip)return this._parts=[n],s;this._parts=[];var r=this._parts,h=this._map._pathViewport,l=e.LineUtil;for(t=0,i=0;a-1>t;t++)o=l.clipSegment(n[t],n[t+1],h,t),o&&(r[i]=r[i]||[],r[i].push(o[0]),(o[1]!==n[t+1]||t===a-2)&&(r[i].push(o[1]),i++))},_simplifyPoints:function(){for(var t=this._parts,i=e.LineUtil,s=0,o=t.length;o>s;s++)t[s]=i.simplify(t[s],this.options.smoothFactor)},_updatePath:function(){this._map&&(this._clipPoints(),this._simplifyPoints(),e.Path.prototype._updatePath.call(this))}}),e.polyline=function(t,i){return new e.Polyline(t,i)},e.PolyUtil={},e.PolyUtil.clipPolygon=function(t,i){var s,o,n,a,r,h,l,c,m,u=[1,4,2,8],d=e.LineUtil;for(o=0,l=t.length;l>o;o++)t[o]._code=d._getBitCode(t[o],i);for(a=0;4>a;a++){for(c=u[a],s=[],o=0,l=t.length,n=l-1;l>o;n=o++)r=t[o],h=t[n],r._code&c?h._code&c||(m=d._getEdgeIntersection(h,r,c,i),m._code=d._getBitCode(m,i),s.push(m)):(h._code&c&&(m=d._getEdgeIntersection(h,r,c,i),m._code=d._getBitCode(m,i),s.push(m)),s.push(r));t=s}return t},e.Polygon=e.Polyline.extend({options:{fill:!0},initialize:function(t,i){e.Polyline.prototype.initialize.call(this,t,i),t&&e.Util.isArray(t[0])&&"number"!=typeof t[0][0]&&(this._latlngs=this._convertLatLngs(t[0]),this._holes=t.slice(1))},projectLatlngs:function(){if(e.Polyline.prototype.projectLatlngs.call(this),this._holePoints=[],this._holes){var t,i,s,o;for(t=0,s=this._holes.length;s>t;t++)for(this._holePoints[t]=[],i=0,o=this._holes[t].length;o>i;i++)this._holePoints[t][i]=this._map.latLngToLayerPoint(this._holes[t][i])}},_clipPoints:function(){var t=this._originalPoints,i=[];if(this._parts=[t].concat(this._holePoints),!this.options.noClip){for(var s=0,o=this._parts.length;o>s;s++){var n=e.PolyUtil.clipPolygon(this._parts[s],this._map._pathViewport);n.length&&i.push(n)}this._parts=i}},_getPathPartStr:function(t){var i=e.Polyline.prototype._getPathPartStr.call(this,t);return i+(e.Browser.svg?"z":"x")}}),e.polygon=function(t,i){return new e.Polygon(t,i)},function(){function t(t){return e.FeatureGroup.extend({initialize:function(t,i){this._layers={},this._options=i,this.setLatLngs(t)},setLatLngs:function(i){var s=0,e=i.length;for(this.eachLayer(function(t){e>s?t.setLatLngs(i[s++]):this.removeLayer(t)},this);e>s;)this.addLayer(new t(i[s++],this._options));return this}})}e.MultiPolyline=t(e.Polyline),e.MultiPolygon=t(e.Polygon),e.multiPolyline=function(t,i){return new e.MultiPolyline(t,i)},e.multiPolygon=function(t,i){return new e.MultiPolygon(t,i)}}(),e.Rectangle=e.Polygon.extend({initialize:function(t,i){e.Polygon.prototype.initialize.call(this,this._boundsToLatLngs(t),i)},setBounds:function(t){this.setLatLngs(this._boundsToLatLngs(t))},_boundsToLatLngs:function(t){return t=e.latLngBounds(t),[t.getSouthWest(),t.getNorthWest(),t.getNorthEast(),t.getSouthEast()]}}),e.rectangle=function(t,i){return new e.Rectangle(t,i)},e.Circle=e.Path.extend({initialize:function(t,i,s){e.Path.prototype.initialize.call(this,s),this._latlng=e.latLng(t),this._mRadius=i},options:{fill:!0},setLatLng:function(t){return this._latlng=e.latLng(t),this.redraw()},setRadius:function(t){return this._mRadius=t,this.redraw()},projectLatlngs:function(){var t=this._getLngRadius(),i=new e.LatLng(this._latlng.lat,this._latlng.lng-t),s=this._map.latLngToLayerPoint(i);this._point=this._map.latLngToLayerPoint(this._latlng),this._radius=Math.max(Math.round(this._point.x-s.x),1)},getBounds:function(){var t=this._getLngRadius(),i=360*(this._mRadius/40075017),s=this._latlng,o=new e.LatLng(s.lat-i,s.lng-t),n=new e.LatLng(s.lat+i,s.lng+t);return new e.LatLngBounds(o,n)},getLatLng:function(){return this._latlng},getPathString:function(){var t=this._point,i=this._radius;return this._checkIfEmpty()?"":e.Browser.svg?"M"+t.x+","+(t.y-i)+"A"+i+","+i+",0,1,1,"+(t.x-.1)+","+(t.y-i)+" z":(t._round(),i=Math.round(i),"AL "+t.x+","+t.y+" "+i+","+i+" 0,"+23592600)},getRadius:function(){return this._mRadius},_getLatRadius:function(){return 360*(this._mRadius/40075017)},_getLngRadius:function(){return this._getLatRadius()/Math.cos(e.LatLng.DEG_TO_RAD*this._latlng.lat)},_checkIfEmpty:function(){if(!this._map)return!1;var t=this._map._pathViewport,i=this._radius,s=this._point;return s.x-i>t.max.x||s.y-i>t.max.y||s.x+is;s++)for(l=this._parts[s],o=0,r=l.length,n=r-1;r>o;n=o++)if((i||0!==o)&&(h=e.LineUtil.pointToSegmentDistance(t,l[n],l[o]),c>=h))return!0;return!1}}:{}),e.Polygon.include(e.Path.CANVAS?{_containsPoint:function(t){var i,s,o,n,a,r,h,l,c=!1;if(e.Polyline.prototype._containsPoint.call(this,t,!0))return!0;for(n=0,h=this._parts.length;h>n;n++)for(i=this._parts[n],a=0,l=i.length,r=l-1;l>a;r=a++)s=i[a],o=i[r],s.y>t.y!=o.y>t.y&&t.x<(o.x-s.x)*(t.y-s.y)/(o.y-s.y)+s.x&&(c=!c);return c}}:{}),e.Circle.include(e.Path.CANVAS?{_drawPath:function(){var t=this._point;this._ctx.beginPath(),this._ctx.arc(t.x,t.y,this._radius,0,2*Math.PI,!1)},_containsPoint:function(t){var i=this._point,s=this.options.stroke?this.options.weight/2:0;return t.distanceTo(i)<=this._radius+s}}:{}),e.GeoJSON=e.FeatureGroup.extend({initialize:function(t,i){e.setOptions(this,i),this._layers={},t&&this.addData(t)},addData:function(t){var i,s,o=e.Util.isArray(t)?t:t.features;if(o){for(i=0,s=o.length;s>i;i++)(o[i].geometries||o[i].geometry||o[i].features)&&this.addData(o[i]);return this}var n=this.options;if(!n.filter||n.filter(t)){var a=e.GeoJSON.geometryToLayer(t,n.pointToLayer);return a.feature=t,a.defaultOptions=a.options,this.resetStyle(a),n.onEachFeature&&n.onEachFeature(t,a),this.addLayer(a)}},resetStyle:function(t){var i=this.options.style;i&&(e.Util.extend(t.options,t.defaultOptions),this._setLayerStyle(t,i))},setStyle:function(t){this.eachLayer(function(i){this._setLayerStyle(i,t)},this)},_setLayerStyle:function(t,i){"function"==typeof i&&(i=i(t.feature)),t.setStyle&&t.setStyle(i)}}),e.extend(e.GeoJSON,{geometryToLayer:function(t,i){var s,o,n,a,r,h="Feature"===t.type?t.geometry:t,l=h.coordinates,c=[];switch(h.type){case"Point":return s=this.coordsToLatLng(l),i?i(t,s):new e.Marker(s);case"MultiPoint":for(n=0,a=l.length;a>n;n++)s=this.coordsToLatLng(l[n]),r=i?i(t,s):new e.Marker(s),c.push(r);return new e.FeatureGroup(c);case"LineString":return o=this.coordsToLatLngs(l),new e.Polyline(o);case"Polygon":return o=this.coordsToLatLngs(l,1),new e.Polygon(o);case"MultiLineString":return o=this.coordsToLatLngs(l,1),new e.MultiPolyline(o);case"MultiPolygon":return o=this.coordsToLatLngs(l,2),new e.MultiPolygon(o);case"GeometryCollection":for(n=0,a=h.geometries.length;a>n;n++)r=this.geometryToLayer({geometry:h.geometries[n],type:"Feature",properties:t.properties},i),c.push(r);return new e.FeatureGroup(c);default:throw Error("Invalid GeoJSON object.")}},coordsToLatLng:function(t,i){var s=parseFloat(t[i?0:1]),o=parseFloat(t[i?1:0]);return new e.LatLng(s,o)},coordsToLatLngs:function(t,i,s){var e,o,n,a=[];for(o=0,n=t.length;n>o;o++)e=i?this.coordsToLatLngs(t[o],i-1,s):this.coordsToLatLng(t[o],s),a.push(e);return a}}),e.geoJson=function(t,i){return new e.GeoJSON(t,i)},e.DomEvent={addListener:function(t,i,o,n){var a,r,h,l=e.stamp(o),c="_leaflet_"+i+l;return t[c]?this:(a=function(i){return o.call(n||t,i||e.DomEvent._getEvent())},e.Browser.msTouch&&0===i.indexOf("touch")?this.addMsTouchListener(t,i,a,l):(e.Browser.touch&&"dblclick"===i&&this.addDoubleTapListener&&this.addDoubleTapListener(t,a,l),"addEventListener"in t?"mousewheel"===i?(t.addEventListener("DOMMouseScroll",a,!1),t.addEventListener(i,a,!1)):"mouseenter"===i||"mouseleave"===i?(r=a,h="mouseenter"===i?"mouseover":"mouseout",a=function(i){return e.DomEvent._checkMouse(t,i)?r(i):s},t.addEventListener(h,a,!1)):t.addEventListener(i,a,!1):"attachEvent"in t&&t.attachEvent("on"+i,a),t[c]=a,this))},removeListener:function(t,i,s){var o=e.stamp(s),n="_leaflet_"+i+o,a=t[n];if(a)return e.Browser.msTouch&&0===i.indexOf("touch")?this.removeMsTouchListener(t,i,o):e.Browser.touch&&"dblclick"===i&&this.removeDoubleTapListener?this.removeDoubleTapListener(t,o):"removeEventListener"in t?"mousewheel"===i?(t.removeEventListener("DOMMouseScroll",a,!1),t.removeEventListener(i,a,!1)):"mouseenter"===i||"mouseleave"===i?t.removeEventListener("mouseenter"===i?"mouseover":"mouseout",a,!1):t.removeEventListener(i,a,!1):"detachEvent"in t&&t.detachEvent("on"+i,a),t[n]=null,this},stopPropagation:function(t){return t.stopPropagation?t.stopPropagation():t.cancelBubble=!0,this},disableClickPropagation:function(t){for(var i=e.DomEvent.stopPropagation,s=e.Draggable.START.length-1;s>=0;s--)e.DomEvent.addListener(t,e.Draggable.START[s],i);return e.DomEvent.addListener(t,"click",i).addListener(t,"dblclick",i)},preventDefault:function(t){return t.preventDefault?t.preventDefault():t.returnValue=!1,this},stop:function(t){return e.DomEvent.preventDefault(t).stopPropagation(t)},getMousePosition:function(t,s){var o=i.body,n=i.documentElement,a=t.pageX?t.pageX:t.clientX+o.scrollLeft+n.scrollLeft,r=t.pageY?t.pageY:t.clientY+o.scrollTop+n.scrollTop,h=new e.Point(a,r);return s?h._subtract(e.DomUtil.getViewportOffset(s)):h},getWheelDelta:function(t){var i=0;return t.wheelDelta&&(i=t.wheelDelta/120),t.detail&&(i=-t.detail/3),i},_checkMouse:function(t,i){var s=i.relatedTarget;if(!s)return!0;try{for(;s&&s!==t;)s=s.parentNode}catch(e){return!1}return s!==t},_getEvent:function(){var i=t.event;if(!i)for(var s=arguments.callee.caller;s&&(i=s.arguments[0],!i||t.Event!==i.constructor);)s=s.caller;return i}},e.DomEvent.on=e.DomEvent.addListener,e.DomEvent.off=e.DomEvent.removeListener,e.Draggable=e.Class.extend({includes:e.Mixin.Events,statics:{START:e.Browser.touch?["touchstart","mousedown"]:["mousedown"],END:{mousedown:"mouseup",touchstart:"touchend",MSPointerDown:"touchend"},MOVE:{mousedown:"mousemove",touchstart:"touchmove",MSPointerDown:"touchmove"},TAP_TOLERANCE:15},initialize:function(t,i,s){this._element=t,this._dragStartTarget=i||t,this._longPress=s&&!e.Browser.msTouch},enable:function(){if(!this._enabled){for(var t=e.Draggable.START.length-1;t>=0;t--)e.DomEvent.on(this._dragStartTarget,e.Draggable.START[t],this._onDown,this);this._enabled=!0}},disable:function(){if(this._enabled){for(var t=e.Draggable.START.length-1;t>=0;t--)e.DomEvent.off(this._dragStartTarget,e.Draggable.START[t],this._onDown,this);this._enabled=!1,this._moved=!1}},_onDown:function(t){if(!(!e.Browser.touch&&t.shiftKey||1!==t.which&&1!==t.button&&!t.touches||(e.DomEvent.preventDefault(t),e.DomEvent.stopPropagation(t),e.Draggable._disabled))){if(this._simulateClick=!0,t.touches&&t.touches.length>1)return this._simulateClick=!1,clearTimeout(this._longPressTimeout),s;var o=t.touches&&1===t.touches.length?t.touches[0]:t,n=o.target;e.Browser.touch&&"a"===n.tagName.toLowerCase()&&e.DomUtil.addClass(n,"leaflet-active"),this._moved=!1,this._moving||(this._startPoint=new e.Point(o.clientX,o.clientY),this._startPos=this._newPos=e.DomUtil.getPosition(this._element),t.touches&&1===t.touches.length&&e.Browser.touch&&this._longPress&&(this._longPressTimeout=setTimeout(e.bind(function(){var t=this._newPos&&this._newPos.distanceTo(this._startPos)||0;e.Draggable.TAP_TOLERANCE>t&&(this._simulateClick=!1,this._onUp(),this._simulateEvent("contextmenu",o))},this),1e3)),e.DomEvent.on(i,e.Draggable.MOVE[t.type],this._onMove,this),e.DomEvent.on(i,e.Draggable.END[t.type],this._onUp,this))}},_onMove:function(t){if(!(t.touches&&t.touches.length>1)){var i=t.touches&&1===t.touches.length?t.touches[0]:t,s=new e.Point(i.clientX,i.clientY),o=s.subtract(this._startPoint);(o.x||o.y)&&(e.DomEvent.preventDefault(t),this._moved||(this.fire("dragstart"),this._moved=!0,this._startPos=e.DomUtil.getPosition(this._element).subtract(o),e.Browser.touch||(e.DomUtil.disableTextSelection(),this._setMovingCursor())),this._newPos=this._startPos.add(o),this._moving=!0,e.Util.cancelAnimFrame(this._animRequest),this._animRequest=e.Util.requestAnimFrame(this._updatePosition,this,!0,this._dragStartTarget))}},_updatePosition:function(){this.fire("predrag"),e.DomUtil.setPosition(this._element,this._newPos),this.fire("drag")},_onUp:function(t){var s;if(clearTimeout(this._longPressTimeout),this._simulateClick&&t.changedTouches){var o=t.changedTouches[0],n=o.target,a=this._newPos&&this._newPos.distanceTo(this._startPos)||0;"a"===n.tagName.toLowerCase()&&e.DomUtil.removeClass(n,"leaflet-active"),e.Draggable.TAP_TOLERANCE>a&&(s=o)}e.Browser.touch||(e.DomUtil.enableTextSelection(),this._restoreCursor());for(var r in e.Draggable.MOVE)e.Draggable.MOVE.hasOwnProperty(r)&&(e.DomEvent.off(i,e.Draggable.MOVE[r],this._onMove),e.DomEvent.off(i,e.Draggable.END[r],this._onUp));this._moved&&(e.Util.cancelAnimFrame(this._animRequest),this.fire("dragend")),this._moving=!1,s&&(this._moved=!1,this._simulateEvent("click",s))},_setMovingCursor:function(){e.DomUtil.addClass(i.body,"leaflet-dragging")},_restoreCursor:function(){e.DomUtil.removeClass(i.body,"leaflet-dragging")},_simulateEvent:function(s,e){var o=i.createEvent("MouseEvents");o.initMouseEvent(s,!0,!0,t,1,e.screenX,e.screenY,e.clientX,e.clientY,!1,!1,!1,!1,0,null),e.target.dispatchEvent(o)}}),e.Handler=e.Class.extend({initialize:function(t){this._map=t},enable:function(){this._enabled||(this._enabled=!0,this.addHooks())},disable:function(){this._enabled&&(this._enabled=!1,this.removeHooks())},enabled:function(){return!!this._enabled}}),e.Map.mergeOptions({dragging:!0,inertia:!e.Browser.android23,inertiaDeceleration:3400,inertiaMaxSpeed:1/0,inertiaThreshold:e.Browser.touch?32:18,easeLinearity:.25,longPress:!0,worldCopyJump:!1}),e.Map.Drag=e.Handler.extend({addHooks:function(){if(!this._draggable){var t=this._map;this._draggable=new e.Draggable(t._mapPane,t._container,t.options.longPress),this._draggable.on({dragstart:this._onDragStart,drag:this._onDrag,dragend:this._onDragEnd},this),t.options.worldCopyJump&&(this._draggable.on("predrag",this._onPreDrag,this),t.on("viewreset",this._onViewReset,this))}this._draggable.enable()},removeHooks:function(){this._draggable.disable()},moved:function(){return this._draggable&&this._draggable._moved},_onDragStart:function(){var t=this._map;t._panAnim&&t._panAnim.stop(),t.fire("movestart").fire("dragstart"),t.options.inertia&&(this._positions=[],this._times=[])},_onDrag:function(){if(this._map.options.inertia){var t=this._lastTime=+new Date,i=this._lastPos=this._draggable._newPos;this._positions.push(i),this._times.push(t),t-this._times[0]>200&&(this._positions.shift(),this._times.shift())}this._map.fire("move").fire("drag")},_onViewReset:function(){var t=this._map.getSize()._divideBy(2),i=this._map.latLngToLayerPoint(new e.LatLng(0,0));this._initialWorldOffset=i.subtract(t).x,this._worldWidth=this._map.project(new e.LatLng(0,180)).x},_onPreDrag:function(){var t=this._worldWidth,i=Math.round(t/2),s=this._initialWorldOffset,e=this._draggable._newPos.x,o=(e-i+s)%t+i-s,n=(e+i+s)%t-i-s,a=Math.abs(o+s)i.inertiaThreshold||!this._positions[0];if(o)t.fire("moveend");else{var n=this._lastPos.subtract(this._positions[0]),a=(this._lastTime+s-this._times[0])/1e3,r=i.easeLinearity,h=n.multiplyBy(r/a),l=h.distanceTo(new e.Point(0,0)),c=Math.min(i.inertiaMaxSpeed,l),m=h.multiplyBy(c/l),u=c/(i.inertiaDeceleration*r),d=m.multiplyBy(-u/2).round();e.Util.requestAnimFrame(function(){t.panBy(d,u,r)})}t.fire("dragend"),i.maxBounds&&e.Util.requestAnimFrame(this._panInsideMaxBounds,t,!0,t._container)},_panInsideMaxBounds:function(){this.panInsideBounds(this.options.maxBounds)}}),e.Map.addInitHook("addHandler","dragging",e.Map.Drag),e.Map.mergeOptions({doubleClickZoom:!0}),e.Map.DoubleClickZoom=e.Handler.extend({addHooks:function(){this._map.on("dblclick",this._onDoubleClick)},removeHooks:function(){this._map.off("dblclick",this._onDoubleClick)},_onDoubleClick:function(t){this.setView(t.latlng,this._zoom+1)}}),e.Map.addInitHook("addHandler","doubleClickZoom",e.Map.DoubleClickZoom),e.Map.mergeOptions({scrollWheelZoom:!0}),e.Map.ScrollWheelZoom=e.Handler.extend({addHooks:function(){e.DomEvent.on(this._map._container,"mousewheel",this._onWheelScroll,this),this._delta=0},removeHooks:function(){e.DomEvent.off(this._map._container,"mousewheel",this._onWheelScroll)},_onWheelScroll:function(t){var i=e.DomEvent.getWheelDelta(t);this._delta+=i,this._lastMousePos=this._map.mouseEventToContainerPoint(t),this._startTime||(this._startTime=+new Date);var s=Math.max(40-(+new Date-this._startTime),0);clearTimeout(this._timer),this._timer=setTimeout(e.bind(this._performZoom,this),s),e.DomEvent.preventDefault(t),e.DomEvent.stopPropagation(t)},_performZoom:function(){var t=this._map,i=this._delta,s=t.getZoom();if(i=i>0?Math.ceil(i):Math.round(i),i=Math.max(Math.min(i,4),-4),i=t._limitZoom(s+i)-s,this._delta=0,this._startTime=null,i){var e=s+i,o=this._getCenterForScrollWheelZoom(e);t.setView(o,e)}},_getCenterForScrollWheelZoom:function(t){var i=this._map,s=i.getZoomScale(t),e=i.getSize()._divideBy(2),o=this._lastMousePos._subtract(e)._multiplyBy(1-1/s),n=i._getTopLeftPoint()._add(e)._add(o);return i.unproject(n)}}),e.Map.addInitHook("addHandler","scrollWheelZoom",e.Map.ScrollWheelZoom),e.extend(e.DomEvent,{_touchstart:e.Browser.msTouch?"MSPointerDown":"touchstart",_touchend:e.Browser.msTouch?"MSPointerUp":"touchend",addDoubleTapListener:function(t,s,o){function n(t){var i;if(e.Browser.msTouch?(p.push(t.pointerId),i=p.length):i=t.touches.length,!(i>1)){var s=Date.now(),o=s-(r||s);h=t.touches?t.touches[0]:t,l=o>0&&c>=o,r=s}}function a(t){if(e.Browser.msTouch){var i=p.indexOf(t.pointerId);if(-1===i)return;p.splice(i,1)}if(l){if(e.Browser.msTouch){var o,n={};for(var a in h)o=h[a],n[a]="function"==typeof o?o.bind(h):o;h=n}h.type="dblclick",s(h),r=null}}var r,h,l=!1,c=250,m="_leaflet_",u=this._touchstart,d=this._touchend,p=[];t[m+u+o]=n,t[m+d+o]=a;var _=e.Browser.msTouch?i.documentElement:t;return t.addEventListener(u,n,!1),_.addEventListener(d,a,!1),e.Browser.msTouch&&_.addEventListener("MSPointerCancel",a,!1),this},removeDoubleTapListener:function(t,s){var o="_leaflet_";return t.removeEventListener(this._touchstart,t[o+this._touchstart+s],!1),(e.Browser.msTouch?i.documentElement:t).removeEventListener(this._touchend,t[o+this._touchend+s],!1),e.Browser.msTouch&&i.documentElement.removeEventListener("MSPointerCancel",t[o+this._touchend+s],!1),this}}),e.extend(e.DomEvent,{_msTouches:[],_msDocumentListener:!1,addMsTouchListener:function(t,i,s,e){switch(i){case"touchstart":return this.addMsTouchListenerStart(t,i,s,e);case"touchend":return this.addMsTouchListenerEnd(t,i,s,e);case"touchmove":return this.addMsTouchListenerMove(t,i,s,e);default:throw"Unknown touch event type"}},addMsTouchListenerStart:function(t,s,e,o){var n="_leaflet_",a=this._msTouches,r=function(t){for(var i=!1,s=0;a.length>s;s++)if(a[s].pointerId===t.pointerId){i=!0;break}i||a.push(t),t.touches=a.slice(),t.changedTouches=[t],e(t)};if(t[n+"touchstart"+o]=r,t.addEventListener("MSPointerDown",r,!1),!this._msDocumentListener){var h=function(t){for(var i=0;a.length>i;i++)if(a[i].pointerId===t.pointerId){a.splice(i,1);break}};i.documentElement.addEventListener("MSPointerUp",h,!1),i.documentElement.addEventListener("MSPointerCancel",h,!1),this._msDocumentListener=!0}return this},addMsTouchListenerMove:function(t,i,s,e){function o(t){if(t.pointerType!==t.MSPOINTER_TYPE_MOUSE||0!==t.buttons){for(var i=0;a.length>i;i++)if(a[i].pointerId===t.pointerId){a[i]=t;break}t.touches=a.slice(),t.changedTouches=[t],s(t)}}var n="_leaflet_",a=this._msTouches;return t[n+"touchmove"+e]=o,t.addEventListener("MSPointerMove",o,!1),this},addMsTouchListenerEnd:function(t,i,s,e){var o="_leaflet_",n=this._msTouches,a=function(t){for(var i=0;n.length>i;i++)if(n[i].pointerId===t.pointerId){n.splice(i,1);break}t.touches=n.slice(),t.changedTouches=[t],s(t)};return t[o+"touchend"+e]=a,t.addEventListener("MSPointerUp",a,!1),t.addEventListener("MSPointerCancel",a,!1),this},removeMsTouchListener:function(t,i,s){var e="_leaflet_",o=t[e+i+s];switch(i){case"touchstart":t.removeEventListener("MSPointerDown",o,!1);break;case"touchmove":t.removeEventListener("MSPointerMove",o,!1);break;case"touchend":t.removeEventListener("MSPointerUp",o,!1),t.removeEventListener("MSPointerCancel",o,!1)}return this}}),e.Map.mergeOptions({touchZoom:e.Browser.touch&&!e.Browser.android23}),e.Map.TouchZoom=e.Handler.extend({addHooks:function(){e.DomEvent.on(this._map._container,"touchstart",this._onTouchStart,this)},removeHooks:function(){e.DomEvent.off(this._map._container,"touchstart",this._onTouchStart,this)},_onTouchStart:function(t){var s=this._map;if(t.touches&&2===t.touches.length&&!s._animatingZoom&&!this._zooming){var o=s.mouseEventToLayerPoint(t.touches[0]),n=s.mouseEventToLayerPoint(t.touches[1]),a=s._getCenterLayerPoint();this._startCenter=o.add(n)._divideBy(2),this._startDist=o.distanceTo(n),this._moved=!1,this._zooming=!0,this._centerOffset=a.subtract(this._startCenter),s._panAnim&&s._panAnim.stop(),e.DomEvent.on(i,"touchmove",this._onTouchMove,this).on(i,"touchend",this._onTouchEnd,this),e.DomEvent.preventDefault(t)}},_onTouchMove:function(t){if(t.touches&&2===t.touches.length){var i=this._map,s=i.mouseEventToLayerPoint(t.touches[0]),o=i.mouseEventToLayerPoint(t.touches[1]);this._scale=s.distanceTo(o)/this._startDist,this._delta=s._add(o)._divideBy(2)._subtract(this._startCenter),1!==this._scale&&(this._moved||(e.DomUtil.addClass(i._mapPane,"leaflet-zoom-anim leaflet-touching"),i.fire("movestart").fire("zoomstart")._prepareTileBg(),this._moved=!0),e.Util.cancelAnimFrame(this._animRequest),this._animRequest=e.Util.requestAnimFrame(this._updateOnMove,this,!0,this._map._container),e.DomEvent.preventDefault(t))}},_updateOnMove:function(){var t=this._map,i=this._getScaleOrigin(),s=t.layerPointToLatLng(i);t.fire("zoomanim",{center:s,zoom:t.getScaleZoom(this._scale)}),t._tileBg.style[e.DomUtil.TRANSFORM]=e.DomUtil.getTranslateString(this._delta)+" "+e.DomUtil.getScaleString(this._scale,this._startCenter)},_onTouchEnd:function(){if(this._moved&&this._zooming){var t=this._map;this._zooming=!1,e.DomUtil.removeClass(t._mapPane,"leaflet-touching"),e.DomEvent.off(i,"touchmove",this._onTouchMove).off(i,"touchend",this._onTouchEnd);var s=this._getScaleOrigin(),o=t.layerPointToLatLng(s),n=t.getZoom(),a=t.getScaleZoom(this._scale)-n,r=a>0?Math.ceil(a):Math.floor(a),h=t._limitZoom(n+r);t.fire("zoomanim",{center:o,zoom:h}),t._runAnimation(o,h,t.getZoomScale(h)/this._scale,s,!0)}},_getScaleOrigin:function(){var t=this._centerOffset.subtract(this._delta).divideBy(this._scale);return this._startCenter.add(t)}}),e.Map.addInitHook("addHandler","touchZoom",e.Map.TouchZoom),e.Map.mergeOptions({boxZoom:!0}),e.Map.BoxZoom=e.Handler.extend({initialize:function(t){this._map=t,this._container=t._container,this._pane=t._panes.overlayPane},addHooks:function(){e.DomEvent.on(this._container,"mousedown",this._onMouseDown,this)},removeHooks:function(){e.DomEvent.off(this._container,"mousedown",this._onMouseDown)},_onMouseDown:function(t){return!t.shiftKey||1!==t.which&&1!==t.button?!1:(e.DomUtil.disableTextSelection(),this._startLayerPoint=this._map.mouseEventToLayerPoint(t),this._box=e.DomUtil.create("div","leaflet-zoom-box",this._pane),e.DomUtil.setPosition(this._box,this._startLayerPoint),this._container.style.cursor="crosshair",e.DomEvent.on(i,"mousemove",this._onMouseMove,this).on(i,"mouseup",this._onMouseUp,this).preventDefault(t),this._map.fire("boxzoomstart"),s)},_onMouseMove:function(t){var i=this._startLayerPoint,s=this._box,o=this._map.mouseEventToLayerPoint(t),n=o.subtract(i),a=new e.Point(Math.min(o.x,i.x),Math.min(o.y,i.y));e.DomUtil.setPosition(s,a),s.style.width=Math.max(0,Math.abs(n.x)-4)+"px",s.style.height=Math.max(0,Math.abs(n.y)-4)+"px"},_onMouseUp:function(t){this._pane.removeChild(this._box),this._container.style.cursor="",e.DomUtil.enableTextSelection(),e.DomEvent.off(i,"mousemove",this._onMouseMove).off(i,"mouseup",this._onMouseUp);var s=this._map,o=s.mouseEventToLayerPoint(t);if(!this._startLayerPoint.equals(o)){var n=new e.LatLngBounds(s.layerPointToLatLng(this._startLayerPoint),s.layerPointToLatLng(o));s.fitBounds(n),s.fire("boxzoomend",{boxZoomBounds:n})}}}),e.Map.addInitHook("addHandler","boxZoom",e.Map.BoxZoom),e.Map.mergeOptions({keyboard:!0,keyboardPanOffset:80,keyboardZoomOffset:1}),e.Map.Keyboard=e.Handler.extend({keyCodes:{left:[37],right:[39],down:[40],up:[38],zoomIn:[187,107,61],zoomOut:[189,109,173]},initialize:function(t){this._map=t,this._setPanOffset(t.options.keyboardPanOffset),this._setZoomOffset(t.options.keyboardZoomOffset)},addHooks:function(){var t=this._map._container;-1===t.tabIndex&&(t.tabIndex="0"),e.DomEvent.on(t,"focus",this._onFocus,this).on(t,"blur",this._onBlur,this).on(t,"mousedown",this._onMouseDown,this),this._map.on("focus",this._addHooks,this).on("blur",this._removeHooks,this)},removeHooks:function(){this._removeHooks();var t=this._map._container;e.DomEvent.off(t,"focus",this._onFocus,this).off(t,"blur",this._onBlur,this).off(t,"mousedown",this._onMouseDown,this),this._map.off("focus",this._addHooks,this).off("blur",this._removeHooks,this)},_onMouseDown:function(){this._focused||this._map._container.focus()},_onFocus:function(){this._focused=!0,this._map.fire("focus")},_onBlur:function(){this._focused=!1,this._map.fire("blur")},_setPanOffset:function(t){var i,s,e=this._panKeys={},o=this.keyCodes;for(i=0,s=o.left.length;s>i;i++)e[o.left[i]]=[-1*t,0];for(i=0,s=o.right.length;s>i;i++)e[o.right[i]]=[t,0];for(i=0,s=o.down.length;s>i;i++)e[o.down[i]]=[0,t];for(i=0,s=o.up.length;s>i;i++)e[o.up[i]]=[0,-1*t]},_setZoomOffset:function(t){var i,s,e=this._zoomKeys={},o=this.keyCodes;for(i=0,s=o.zoomIn.length;s>i;i++)e[o.zoomIn[i]]=t;for(i=0,s=o.zoomOut.length;s>i;i++)e[o.zoomOut[i]]=-t},_addHooks:function(){e.DomEvent.on(i,"keydown",this._onKeyDown,this)},_removeHooks:function(){e.DomEvent.off(i,"keydown",this._onKeyDown,this)},_onKeyDown:function(t){var i=t.keyCode,s=this._map;if(this._panKeys.hasOwnProperty(i))s.panBy(this._panKeys[i]),s.options.maxBounds&&s.panInsideBounds(s.options.maxBounds);else{if(!this._zoomKeys.hasOwnProperty(i))return;s.setZoom(s.getZoom()+this._zoomKeys[i])}e.DomEvent.stop(t)}}),e.Map.addInitHook("addHandler","keyboard",e.Map.Keyboard),e.Handler.MarkerDrag=e.Handler.extend({initialize:function(t){this._marker=t},addHooks:function(){var t=this._marker._icon;this._draggable||(this._draggable=new e.Draggable(t,t).on("dragstart",this._onDragStart,this).on("drag",this._onDrag,this).on("dragend",this._onDragEnd,this)),this._draggable.enable()},removeHooks:function(){this._draggable.disable()},moved:function(){return this._draggable&&this._draggable._moved},_onDragStart:function(){this._marker.closePopup().fire("movestart").fire("dragstart")},_onDrag:function(){var t=this._marker,i=t._shadow,s=e.DomUtil.getPosition(t._icon),o=t._map.layerPointToLatLng(s);i&&e.DomUtil.setPosition(i,s),t._latlng=o,t.fire("move",{latlng:o}).fire("drag")},_onDragEnd:function(){this._marker.fire("moveend").fire("dragend")}}),e.Handler.PolyEdit=e.Handler.extend({options:{icon:new e.DivIcon({iconSize:new e.Point(8,8),className:"leaflet-div-icon leaflet-editing-icon"})},initialize:function(t,i){this._poly=t,e.setOptions(this,i)},addHooks:function(){this._poly._map&&(this._markerGroup||this._initMarkers(),this._poly._map.addLayer(this._markerGroup))},removeHooks:function(){this._poly._map&&(this._poly._map.removeLayer(this._markerGroup),delete this._markerGroup,delete this._markers)},updateMarkers:function(){this._markerGroup.clearLayers(),this._initMarkers()},_initMarkers:function(){this._markerGroup||(this._markerGroup=new e.LayerGroup),this._markers=[];var t,i,s,o,n=this._poly._latlngs;for(t=0,s=n.length;s>t;t++)o=this._createMarker(n[t],t),o.on("click",this._onMarkerClick,this),this._markers.push(o);var a,r;for(t=0,i=s-1;s>t;i=t++)(0!==t||e.Polygon&&this._poly instanceof e.Polygon)&&(a=this._markers[i],r=this._markers[t],this._createMiddleMarker(a,r),this._updatePrevNext(a,r))},_createMarker:function(t,i){var s=new e.Marker(t,{draggable:!0,icon:this.options.icon});return s._origLatLng=t,s._index=i,s.on("drag",this._onMarkerDrag,this),s.on("dragend",this._fireEdit,this),this._markerGroup.addLayer(s),s},_fireEdit:function(){this._poly.fire("edit")},_onMarkerDrag:function(t){var i=t.target;e.extend(i._origLatLng,i._latlng),i._middleLeft&&i._middleLeft.setLatLng(this._getMiddleLatLng(i._prev,i)),i._middleRight&&i._middleRight.setLatLng(this._getMiddleLatLng(i,i._next)),this._poly.redraw()},_onMarkerClick:function(t){if(!(3>this._poly._latlngs.length)){var i=t.target,s=i._index;this._markerGroup.removeLayer(i),this._markers.splice(s,1),this._poly.spliceLatLngs(s,1),this._updateIndexes(s,-1),this._updatePrevNext(i._prev,i._next),i._middleLeft&&this._markerGroup.removeLayer(i._middleLeft),i._middleRight&&this._markerGroup.removeLayer(i._middleRight),i._prev&&i._next?this._createMiddleMarker(i._prev,i._next):i._prev?i._next||(i._prev._middleRight=null):i._next._middleLeft=null,this._poly.fire("edit")}},_updateIndexes:function(t,i){this._markerGroup.eachLayer(function(s){s._index>t&&(s._index+=i)})},_createMiddleMarker:function(t,i){var s,e,o,n=this._getMiddleLatLng(t,i),a=this._createMarker(n);a.setOpacity(.6),t._middleRight=i._middleLeft=a,e=function(){var e=i._index;a._index=e,a.off("click",s).on("click",this._onMarkerClick,this),n.lat=a.getLatLng().lat,n.lng=a.getLatLng().lng,this._poly.spliceLatLngs(e,0,n),this._markers.splice(e,0,a),a.setOpacity(1),this._updateIndexes(e,1),i._index++,this._updatePrevNext(t,a),this._updatePrevNext(a,i)},o=function(){a.off("dragstart",e,this),a.off("dragend",o,this), -this._createMiddleMarker(t,a),this._createMiddleMarker(a,i)},s=function(){e.call(this),o.call(this),this._poly.fire("edit")},a.on("click",s,this).on("dragstart",e,this).on("dragend",o,this),this._markerGroup.addLayer(a)},_updatePrevNext:function(t,i){t&&(t._next=i),i&&(i._prev=t)},_getMiddleLatLng:function(t,i){var s=this._poly._map,e=s.latLngToLayerPoint(t.getLatLng()),o=s.latLngToLayerPoint(i.getLatLng());return s.layerPointToLatLng(e._add(o)._divideBy(2))}}),e.Polyline.addInitHook(function(){e.Handler.PolyEdit&&(this.editing=new e.Handler.PolyEdit(this),this.options.editable&&this.editing.enable()),this.on("add",function(){this.editing&&this.editing.enabled()&&this.editing.addHooks()}),this.on("remove",function(){this.editing&&this.editing.enabled()&&this.editing.removeHooks()})}),e.Control=e.Class.extend({options:{position:"topright"},initialize:function(t){e.setOptions(this,t)},getPosition:function(){return this.options.position},setPosition:function(t){var i=this._map;return i&&i.removeControl(this),this.options.position=t,i&&i.addControl(this),this},addTo:function(t){this._map=t;var i=this._container=this.onAdd(t),s=this.getPosition(),o=t._controlCorners[s];return e.DomUtil.addClass(i,"leaflet-control"),-1!==s.indexOf("bottom")?o.insertBefore(i,o.firstChild):o.appendChild(i),this},removeFrom:function(t){var i=this.getPosition(),s=t._controlCorners[i];return s.removeChild(this._container),this._map=null,this.onRemove&&this.onRemove(t),this}}),e.control=function(t){return new e.Control(t)},e.Map.include({addControl:function(t){return t.addTo(this),this},removeControl:function(t){return t.removeFrom(this),this},_initControlPos:function(){function t(t,n){var a=s+t+" "+s+n;i[t+n]=e.DomUtil.create("div",a,o)}var i=this._controlCorners={},s="leaflet-",o=this._controlContainer=e.DomUtil.create("div",s+"control-container",this._container);t("top","left"),t("top","right"),t("bottom","left"),t("bottom","right")}}),e.Control.Zoom=e.Control.extend({options:{position:"topleft"},onAdd:function(t){var i="leaflet-control-zoom",s="leaflet-bar",o=s+"-part",n=e.DomUtil.create("div",i+" "+s);return this._map=t,this._zoomInButton=this._createButton("+","Zoom in",i+"-in "+o+" "+o+"-top",n,this._zoomIn,this),this._zoomOutButton=this._createButton("-","Zoom out",i+"-out "+o+" "+o+"-bottom",n,this._zoomOut,this),t.on("zoomend",this._updateDisabled,this),n},onRemove:function(t){t.off("zoomend",this._updateDisabled,this)},_zoomIn:function(t){this._map.zoomIn(t.shiftKey?3:1)},_zoomOut:function(t){this._map.zoomOut(t.shiftKey?3:1)},_createButton:function(t,i,s,o,n,a){var r=e.DomUtil.create("a",s,o);r.innerHTML=t,r.href="#",r.title=i;var h=e.DomEvent.stopPropagation;return e.DomEvent.on(r,"click",h).on(r,"mousedown",h).on(r,"dblclick",h).on(r,"click",e.DomEvent.preventDefault).on(r,"click",n,a),r},_updateDisabled:function(){var t=this._map,i="leaflet-control-zoom-disabled";e.DomUtil.removeClass(this._zoomInButton,i),e.DomUtil.removeClass(this._zoomOutButton,i),t._zoom===t.getMinZoom()&&e.DomUtil.addClass(this._zoomOutButton,i),t._zoom===t.getMaxZoom()&&e.DomUtil.addClass(this._zoomInButton,i)}}),e.Map.mergeOptions({zoomControl:!0}),e.Map.addInitHook(function(){this.options.zoomControl&&(this.zoomControl=new e.Control.Zoom,this.addControl(this.zoomControl))}),e.control.zoom=function(t){return new e.Control.Zoom(t)},e.Control.Attribution=e.Control.extend({options:{position:"bottomright",prefix:'Powered by Leaflet'},initialize:function(t){e.setOptions(this,t),this._attributions={}},onAdd:function(t){return this._container=e.DomUtil.create("div","leaflet-control-attribution"),e.DomEvent.disableClickPropagation(this._container),t.on("layeradd",this._onLayerAdd,this).on("layerremove",this._onLayerRemove,this),this._update(),this._container},onRemove:function(t){t.off("layeradd",this._onLayerAdd).off("layerremove",this._onLayerRemove)},setPrefix:function(t){return this.options.prefix=t,this._update(),this},addAttribution:function(t){return t?(this._attributions[t]||(this._attributions[t]=0),this._attributions[t]++,this._update(),this):s},removeAttribution:function(t){return t?(this._attributions[t]--,this._update(),this):s},_update:function(){if(this._map){var t=[];for(var i in this._attributions)this._attributions.hasOwnProperty(i)&&this._attributions[i]&&t.push(i);var s=[];this.options.prefix&&s.push(this.options.prefix),t.length&&s.push(t.join(", ")),this._container.innerHTML=s.join(" — ")}},_onLayerAdd:function(t){t.layer.getAttribution&&this.addAttribution(t.layer.getAttribution())},_onLayerRemove:function(t){t.layer.getAttribution&&this.removeAttribution(t.layer.getAttribution())}}),e.Map.mergeOptions({attributionControl:!0}),e.Map.addInitHook(function(){this.options.attributionControl&&(this.attributionControl=(new e.Control.Attribution).addTo(this))}),e.control.attribution=function(t){return new e.Control.Attribution(t)},e.Control.Scale=e.Control.extend({options:{position:"bottomleft",maxWidth:100,metric:!0,imperial:!0,updateWhenIdle:!1},onAdd:function(t){this._map=t;var i="leaflet-control-scale",s=e.DomUtil.create("div",i),o=this.options;return this._addScales(o,i,s),t.on(o.updateWhenIdle?"moveend":"move",this._update,this),t.whenReady(this._update,this),s},onRemove:function(t){t.off(this.options.updateWhenIdle?"moveend":"move",this._update,this)},_addScales:function(t,i,s){t.metric&&(this._mScale=e.DomUtil.create("div",i+"-line",s)),t.imperial&&(this._iScale=e.DomUtil.create("div",i+"-line",s))},_update:function(){var t=this._map.getBounds(),i=t.getCenter().lat,s=6378137*Math.PI*Math.cos(i*Math.PI/180),e=s*(t.getNorthEast().lng-t.getSouthWest().lng)/180,o=this._map.getSize(),n=this.options,a=0;o.x>0&&(a=e*(n.maxWidth/o.x)),this._updateScales(n,a)},_updateScales:function(t,i){t.metric&&i&&this._updateMetric(i),t.imperial&&i&&this._updateImperial(i)},_updateMetric:function(t){var i=this._getRoundNum(t);this._mScale.style.width=this._getScaleWidth(i/t)+"px",this._mScale.innerHTML=1e3>i?i+" m":i/1e3+" km"},_updateImperial:function(t){var i,s,e,o=3.2808399*t,n=this._iScale;o>5280?(i=o/5280,s=this._getRoundNum(i),n.style.width=this._getScaleWidth(s/i)+"px",n.innerHTML=s+" mi"):(e=this._getRoundNum(o),n.style.width=this._getScaleWidth(e/o)+"px",n.innerHTML=e+" ft")},_getScaleWidth:function(t){return Math.round(this.options.maxWidth*t)-10},_getRoundNum:function(t){var i=Math.pow(10,(Math.floor(t)+"").length-1),s=t/i;return s=s>=10?10:s>=5?5:s>=3?3:s>=2?2:1,i*s}}),e.control.scale=function(t){return new e.Control.Scale(t)},e.Control.Layers=e.Control.extend({options:{collapsed:!0,position:"topright",autoZIndex:!0},initialize:function(t,i,s){e.setOptions(this,s),this._layers={},this._lastZIndex=0,this._handlingClick=!1;for(var o in t)t.hasOwnProperty(o)&&this._addLayer(t[o],o);for(o in i)i.hasOwnProperty(o)&&this._addLayer(i[o],o,!0)},onAdd:function(t){return this._initLayout(),this._update(),t.on("layeradd",this._onLayerChange,this).on("layerremove",this._onLayerChange,this),this._container},onRemove:function(t){t.off("layeradd",this._onLayerChange).off("layerremove",this._onLayerChange)},addBaseLayer:function(t,i){return this._addLayer(t,i),this._update(),this},addOverlay:function(t,i){return this._addLayer(t,i,!0),this._update(),this},removeLayer:function(t){var i=e.stamp(t);return delete this._layers[i],this._update(),this},_initLayout:function(){var t="leaflet-control-layers",i=this._container=e.DomUtil.create("div",t);e.Browser.touch?e.DomEvent.on(i,"click",e.DomEvent.stopPropagation):(e.DomEvent.disableClickPropagation(i),e.DomEvent.on(i,"mousewheel",e.DomEvent.stopPropagation));var s=this._form=e.DomUtil.create("form",t+"-list");if(this.options.collapsed){e.DomEvent.on(i,"mouseover",this._expand,this).on(i,"mouseout",this._collapse,this);var o=this._layersLink=e.DomUtil.create("a",t+"-toggle",i);o.href="#",o.title="Layers",e.Browser.touch?e.DomEvent.on(o,"click",e.DomEvent.stopPropagation).on(o,"click",e.DomEvent.preventDefault).on(o,"click",this._expand,this):e.DomEvent.on(o,"focus",this._expand,this),this._map.on("movestart",this._collapse,this)}else this._expand();this._baseLayersList=e.DomUtil.create("div",t+"-base",s),this._separator=e.DomUtil.create("div",t+"-separator",s),this._overlaysList=e.DomUtil.create("div",t+"-overlays",s),i.appendChild(s)},_addLayer:function(t,i,s){var o=e.stamp(t);this._layers[o]={layer:t,name:i,overlay:s},this.options.autoZIndex&&t.setZIndex&&(this._lastZIndex++,t.setZIndex(this._lastZIndex))},_update:function(){if(this._container){this._baseLayersList.innerHTML="",this._overlaysList.innerHTML="";var t=!1,i=!1;for(var s in this._layers)if(this._layers.hasOwnProperty(s)){var e=this._layers[s];this._addItem(e),i=i||e.overlay,t=t||!e.overlay}this._separator.style.display=i&&t?"":"none"}},_onLayerChange:function(t){var i=e.stamp(t.layer);this._layers[i]&&!this._handlingClick&&this._update()},_createRadioElement:function(t,s){var e='t;t++)i=o[t],s=this._layers[i.layerId],i.checked&&!this._map.hasLayer(s.layer)?(this._map.addLayer(s.layer),s.overlay||(e=s.layer)):!i.checked&&this._map.hasLayer(s.layer)&&this._map.removeLayer(s.layer);e&&(this._map.setZoom(this._map.getZoom()),this._map.fire("baselayerchange",{layer:e})),this._handlingClick=!1},_expand:function(){e.DomUtil.addClass(this._container,"leaflet-control-layers-expanded")},_collapse:function(){this._container.className=this._container.className.replace(" leaflet-control-layers-expanded","")}}),e.control.layers=function(t,i,s){return new e.Control.Layers(t,i,s)},e.PosAnimation=e.Class.extend({includes:e.Mixin.Events,run:function(t,i,s,o){this.stop(),this._el=t,this._inProgress=!0,this.fire("start"),t.style[e.DomUtil.TRANSITION]="all "+(s||.25)+"s cubic-bezier(0,0,"+(o||.5)+",1)",e.DomEvent.on(t,e.DomUtil.TRANSITION_END,this._onTransitionEnd,this),e.DomUtil.setPosition(t,i),e.Util.falseFn(t.offsetWidth),this._stepTimer=setInterval(e.bind(this.fire,this,"step"),50)},stop:function(){this._inProgress&&(e.DomUtil.setPosition(this._el,this._getPos()),this._onTransitionEnd(),e.Util.falseFn(this._el.offsetWidth))},_transformRe:/(-?[\d\.]+), (-?[\d\.]+)\)/,_getPos:function(){var i,s,o,n=this._el,a=t.getComputedStyle(n);return e.Browser.any3d?(o=a[e.DomUtil.TRANSFORM].match(this._transformRe),i=parseFloat(o[1]),s=parseFloat(o[2])):(i=parseFloat(a.left),s=parseFloat(a.top)),new e.Point(i,s,!0)},_onTransitionEnd:function(){e.DomEvent.off(this._el,e.DomUtil.TRANSITION_END,this._onTransitionEnd,this),this._inProgress&&(this._inProgress=!1,this._el.style[e.DomUtil.TRANSITION]="",clearInterval(this._stepTimer),this.fire("step").fire("end"))}}),e.Map.include({setView:function(t,i,s){i=this._limitZoom(i);var e=this._zoom!==i;if(this._loaded&&!s&&this._layers){this._panAnim&&this._panAnim.stop();var o=e?this._zoomToIfClose&&this._zoomToIfClose(t,i):this._panByIfClose(t);if(o)return clearTimeout(this._sizeTimer),this}return this._resetView(t,i),this},panBy:function(t,i,s){if(t=e.point(t),!t.x&&!t.y)return this;this._panAnim||(this._panAnim=new e.PosAnimation,this._panAnim.on({step:this._onPanTransitionStep,end:this._onPanTransitionEnd},this)),this.fire("movestart"),e.DomUtil.addClass(this._mapPane,"leaflet-pan-anim");var o=e.DomUtil.getPosition(this._mapPane).subtract(t)._round();return this._panAnim.run(this._mapPane,o,i||.25,s),this},_onPanTransitionStep:function(){this.fire("move")},_onPanTransitionEnd:function(){e.DomUtil.removeClass(this._mapPane,"leaflet-pan-anim"),this.fire("moveend")},_panByIfClose:function(t){var i=this._getCenterOffset(t)._floor();return this._offsetIsWithinView(i)?(this.panBy(i),!0):!1},_offsetIsWithinView:function(t,i){var s=i||1,e=this.getSize();return Math.abs(t.x)<=e.x*s&&Math.abs(t.y)<=e.y*s}}),e.PosAnimation=e.DomUtil.TRANSITION?e.PosAnimation:e.PosAnimation.extend({run:function(t,i,s,o){this.stop(),this._el=t,this._inProgress=!0,this._duration=s||.25,this._easeOutPower=1/Math.max(o||.5,.2),this._startPos=e.DomUtil.getPosition(t),this._offset=i.subtract(this._startPos),this._startTime=+new Date,this.fire("start"),this._animate()},stop:function(){this._inProgress&&(this._step(),this._complete())},_animate:function(){this._animId=e.Util.requestAnimFrame(this._animate,this),this._step()},_step:function(){var t=+new Date-this._startTime,i=1e3*this._duration;i>t?this._runFrame(this._easeOut(t/i)):(this._runFrame(1),this._complete())},_runFrame:function(t){var i=this._startPos.add(this._offset.multiplyBy(t));e.DomUtil.setPosition(this._el,i),this.fire("step")},_complete:function(){e.Util.cancelAnimFrame(this._animId),this._inProgress=!1,this.fire("end")},_easeOut:function(t){return 1-Math.pow(1-t,this._easeOutPower)}}),e.Map.mergeOptions({zoomAnimation:e.DomUtil.TRANSITION&&!e.Browser.android23&&!e.Browser.mobileOpera}),e.DomUtil.TRANSITION&&e.Map.addInitHook(function(){e.DomEvent.on(this._mapPane,e.DomUtil.TRANSITION_END,this._catchTransitionEnd,this)}),e.Map.include(e.DomUtil.TRANSITION?{_zoomToIfClose:function(t,i){if(this._animatingZoom)return!0;if(!this.options.zoomAnimation)return!1;var s=this.getZoomScale(i),o=this._getCenterOffset(t)._divideBy(1-1/s);if(!this._offsetIsWithinView(o,1))return!1;e.DomUtil.addClass(this._mapPane,"leaflet-zoom-anim"),this.fire("movestart").fire("zoomstart"),this.fire("zoomanim",{center:t,zoom:i});var n=this._getCenterLayerPoint().add(o);return this._prepareTileBg(),this._runAnimation(t,i,s,n),!0},_catchTransitionEnd:function(){this._animatingZoom&&this._onZoomTransitionEnd()},_runAnimation:function(t,i,s,o,n){this._animateToCenter=t,this._animateToZoom=i,this._animatingZoom=!0,e.Draggable&&(e.Draggable._disabled=!0);var a=e.DomUtil.TRANSFORM,r=this._tileBg;clearTimeout(this._clearTileBgTimer),e.Util.falseFn(r.offsetWidth);var h=e.DomUtil.getScaleString(s,o),l=r.style[a];r.style[a]=n?l+" "+h:h+" "+l},_prepareTileBg:function(){var t=this._tilePane,i=this._tileBg;if(i&&this._getLoadedTilesPercentage(i)>.5&&.5>this._getLoadedTilesPercentage(t))return t.style.visibility="hidden",t.empty=!0,this._stopLoadingImages(t),s;i||(i=this._tileBg=this._createPane("leaflet-tile-pane",this._mapPane),i.style.zIndex=1),i.style[e.DomUtil.TRANSFORM]="",i.style.visibility="hidden",i.empty=!0,t.empty=!1,this._tilePane=this._panes.tilePane=i;var o=this._tileBg=t;e.DomUtil.addClass(o,"leaflet-zoom-animated"),this._stopLoadingImages(o)},_getLoadedTilesPercentage:function(t){var i,s,e=t.getElementsByTagName("img"),o=0;for(i=0,s=e.length;s>i;i++)e[i].complete&&o++;return o/s},_stopLoadingImages:function(t){var i,s,o,n=Array.prototype.slice.call(t.getElementsByTagName("img"));for(i=0,s=n.length;s>i;i++)o=n[i],o.complete||(o.onload=e.Util.falseFn,o.onerror=e.Util.falseFn,o.src=e.Util.emptyImageUrl,o.parentNode.removeChild(o))},_onZoomTransitionEnd:function(){this._restoreTileFront(),e.DomUtil.removeClass(this._mapPane,"leaflet-zoom-anim"),e.Util.falseFn(this._tileBg.offsetWidth),this._animatingZoom=!1,this._resetView(this._animateToCenter,this._animateToZoom,!0,!0),e.Draggable&&(e.Draggable._disabled=!1)},_restoreTileFront:function(){this._tilePane.innerHTML="",this._tilePane.style.visibility="",this._tilePane.style.zIndex=2,this._tileBg.style.zIndex=1},_clearTileBg:function(){this._animatingZoom||this.touchZoom._zooming||(this._tileBg.innerHTML="")}}:{}),e.Map.include({_defaultLocateOptions:{watch:!1,setView:!1,maxZoom:1/0,timeout:1e4,maximumAge:0,enableHighAccuracy:!1},locate:function(t){if(t=this._locationOptions=e.extend(this._defaultLocateOptions,t),!navigator.geolocation)return this._handleGeolocationError({code:0,message:"Geolocation not supported."}),this;var i=e.bind(this._handleGeolocationResponse,this),s=e.bind(this._handleGeolocationError,this);return t.watch?this._locationWatchId=navigator.geolocation.watchPosition(i,s,t):navigator.geolocation.getCurrentPosition(i,s,t),this},stopLocate:function(){return navigator.geolocation&&navigator.geolocation.clearWatch(this._locationWatchId),this},_handleGeolocationError:function(t){var i=t.code,s=t.message||(1===i?"permission denied":2===i?"position unavailable":"timeout");this._locationOptions.setView&&!this._loaded&&this.fitWorld(),this.fire("locationerror",{code:i,message:"Geolocation error: "+s+"."})},_handleGeolocationResponse:function(t){var i=180*t.coords.accuracy/4e7,s=2*i,o=t.coords.latitude,n=t.coords.longitude,a=new e.LatLng(o,n),r=new e.LatLng(o-i,n-s),h=new e.LatLng(o+i,n+s),l=new e.LatLngBounds(r,h),c=this._locationOptions;if(c.setView){var m=Math.min(this.getBoundsZoom(l),c.maxZoom);this.setView(a,m)}this.fire("locationfound",{latlng:a,bounds:l,accuracy:t.coords.accuracy})}})}(this,document),L.Proj={},L.Proj._isProj4Proj=function(t){return t.projName!==void 0},L.Proj.Projection=L.Class.extend({initialize:function(t,i){if(L.Proj._isProj4Proj(t))this._proj=t;else{var s=t;Proj4js.defs[s]=i,this._proj=new Proj4js.Proj(s)}},project:function(t){var i=new L.Point(t.lng,t.lat);return Proj4js.transform(Proj4js.WGS84,this._proj,i)},unproject:function(t,i){var s=Proj4js.transform(this._proj,Proj4js.WGS84,t.clone());return new L.LatLng(s.y,s.x,i)}}),L.Proj.CRS=L.Class.extend({includes:L.CRS,options:{transformation:new L.Transformation(1,0,-1,0)},initialize:function(t,i,s){var e,o,n,a;L.Proj._isProj4Proj(t)?(o=t,e=o.srsCode,a=i||{},this.projection=new L.Proj.Projection(o)):(e=t,n=i,a=s||{},this.projection=new L.Proj.Projection(e,n)),L.Util.setOptions(this,a),this.code=e,this.transformation=this.options.transformation,this.options.origin&&(this.transformation=new L.Transformation(1,-this.options.origin[0],-1,this.options.origin[1])),this.options.scales?this.scale=function(t){return this.options.scales[t]}:this.options.resolutions&&(this.scale=function(t){return 1/this.options.resolutions[t]})}}),L.Proj.CRS.TMS=L.Proj.CRS.extend({initialize:function(t,i,s,e){if(L.Proj._isProj4Proj(t)){var o=t,n=i,a=s||{};a.origin=[n[0],n[3]],L.Proj.CRS.prototype.initialize(o,a)}else{var r=t,h=i,n=s,a=e||{};a.origin=[n[0],n[3]],L.Proj.CRS.prototype.initialize(r,h,a)}this.projectedBounds=n}}),L.Proj.TileLayer={},L.Proj.TileLayer.TMS=L.TileLayer.extend({options:{tms:!0,continuousWorld:!0},initialize:function(t,i,s){if(!(i instanceof L.Proj.CRS.TMS))throw Error("CRS is not L.Proj.CRS.TMS.");L.TileLayer.prototype.initialize.call(this,t,s),this.crs=i;for(var e=this.options.minZoom;this.options.maxZoom>e;e++){var o=(this.crs.projectedBounds[3]-this.crs.projectedBounds[1])/this._projectedTileSize(e);if(Math.abs(o-Math.round(o))>.001)throw Error("Projected bounds does not match grid at zoom "+e)}},getTileUrl:function(t){var i=Math.round((this.crs.projectedBounds[3]-this.crs.projectedBounds[1])/this._projectedTileSize(this._map.getZoom()));return L.Util.template(this._url,L.Util.extend({s:this._getSubdomain(t),z:this._getZoomForUrl(),x:t.x,y:i-t.y-1},this.options))},_projectedTileSize:function(t){return this.options.tileSize/this.crs.scale(t)}}),"undefined"!=typeof module&&(module.exports=L.Proj),"undefined"!=typeof L&&L.CRS!==void 0&&(L.CRS.proj4js=function(){return function(t,i,s,e){return e=e||{},s&&(e.transformation=s),new L.Proj.CRS(t,i,e)}}()),L.Control.MousePosition=L.Control.extend({options:{position:"bottomleft",separator:" : ",emptyString:"Unavailable",lngFirst:!1,numDigits:5,lngFormatter:void 0,latFormatter:void 0},onAdd:function(t){return this._container=L.DomUtil.create("div","leaflet-control-mouseposition"),L.DomEvent.disableClickPropagation(this._container),t.on("mousemove",this._onMouseMove,this),this._container.innerHTML=this.options.emptyString,this._container},onRemove:function(t){t.off("mousemove",this._onMouseMove)},_onMouseMove:function(t){var i=L.Util.formatNum(t.latlng.lng,this.options.numDigits),s=L.Util.formatNum(t.latlng.lat,this.options.numDigits);this.options.lngFormatter&&(i=this.options.lngFormatter(i)),this.options.latFormatter&&(s=this.options.latFormatter(s));var e=this.options.lngFirst?i+this.options.separator+s:s+this.options.separator+i;this._container.innerHTML=e}}),L.Map.mergeOptions({positionControl:!1}),L.Map.addInitHook(function(){this.options.positionControl&&(this.positionControl=new L.Control.MousePosition,this.addControl(this.positionControl))}),L.control.mousePosition=function(t){return new L.Control.MousePosition(t)},function(t,i){L.KSP={},L.KSP.version="0.2.1",L.KSP.CRS={},L.KSP.CRS.EPSG4326=new L.Proj.CRS.TMS(new Proj4js.Proj("EPSG:4326"),[-180,-90,180,90],{resolutions:[.703125,.3515625,.17578125,.087890625,.0439453125,.02197265625]}),L.KSP.CelestialBody=L.Class.extend({initialize:function(t){if(!t.hasOwnProperty("id"))throw Error("must specify id");if(!t.hasOwnProperty("name"))throw Error("must specify name");if(t.hasOwnProperty("crs")){if(!(t.crs instanceof L.Proj.CRS.TMS))throw Error("crs is not an instance of L.Proj.CRS.TMS")}else this.crs=L.KSP.CRS.EPSG4326;t.hasOwnProperty("radius")||(this.radius=1),t.hasOwnProperty("thumbnail")||(this.thumbnail="body-unknown.png"),t.hasOwnProperty("baseLayers")||(this.baseLayers={}),L.Util.extend(this,t)},addTo:function(t){var i,s=t._body;if(t._body=this,t.fire("bodychangestart",{body:this,oldBody:s}),s){for(i in s.baseLayers)s.baseLayers.hasOwnProperty(i)&&t.removeLayer(s.baseLayers[i]);for(i in s.overlays)s.overlays.hasOwnProperty(i)&&t.removeLayer(s.overlays[i])}var e=this.defaultLayer||this.baseLayers.Satellite;if(e){for(i in this.baseLayers)if(this.baseLayers.hasOwnProperty(i)&&this.baseLayers[i]._type===t._baseLayerType){e=this.baseLayers[i];break}t.addLayer(e),t.fire("baselayerchange",{layer:e})}for(i in this.overlays)this.overlays.hasOwnProperty(i)&&t._overlayTypes.indexOf(this.overlays[i]._type)>=0&&(t.addLayer(this.overlays[i]),t.fire("layeradd",{layer:this.overlays[i]}));t.fire("bodychangeend",{body:this,oldBody:s})},onAdd:function(t){this.addTo(t)},removeFrom:function(t){L.KSP.CelestialBody.DUMMY.addTo(t)},onRemove:function(t){this.removeFrom(t)}}),L.KSP.celestialBody=function(t){return new L.KSP.CelestialBody(t)},L.KSP.CelestialBody.DUMMY=L.KSP.celestialBody({id:"",name:"",crs:L.KSP.CRS.EPSG4326}),L.KSP.CelestialBody.ALL_PLANETARY=[L.KSP.CelestialBody.DUMMY],L.KSP.Map=L.Map.extend({options:{crs:L.KSP.CRS.EPSG4326,continuousWorld:!0},initialize:function(t,i){this._baseLayerType=-1,this._overlayTypes=[],L.Util.setOptions(this,i),this.startTrackingLayerState(),this.on("bodychangestart",this._onBodyChangeStart).on("bodychangeend",this._onBodyChangeEnd),L.Map.prototype.initialize.call(this,t,this.options)},clampZoom:function(){var t=this.getZoom(),i=this.getMinZoom(),s=this.getMaxZoom();i>t?this.setZoom(i):t>s?this.setZoom(s):this.fire("zoomend",this)},_onBodyChangeStart:function(){this.stopTrackingLayerState()},_onBodyChangeEnd:function(){this.clampZoom(),this.startTrackingLayerState()},_onLayerStateChange:function(t){if("layeradd"===t.type)t.layer instanceof L.KSP.TileLayer?this._baseLayerType=t.layer._type:t.layer instanceof L.KSP.LayerGroup&&0>this._overlayTypes.indexOf(t.layer._type)&&this._overlayTypes.push(t.layer._type);else if(t.layer instanceof L.KSP.LayerGroup){var i,s,e=t.layer._type,o=this._overlayTypes;for(i=o.length-1;i>=0;i--)s=o[i],s===e&&o.splice(i,1)}},startTrackingLayerState:function(){this.on("layeradd",this._onLayerStateChange).on("layerremove",this._onLayerStateChange)},stopTrackingLayerState:function(){this.off("layeradd",this._onLayerStateChange).off("layerremove",this._onLayerStateChange)}}),L.KSP.map=function(t,i){return new L.KSP.Map(t,i)},L.KSP.TileLayer=L.Proj.TileLayer.TMS.extend({statics:{TYPE_SATELLITE:0,TYPE_COLORRELIEF:1,TYPE_SLOPE:2,DEFAULT_URL:"http://tiles.kerbalmaps.com/{body}/{style}/{z}/{x}/{y}.png"},options:{continuousWorld:!1,noWrap:!1,minZoom:0,maxZoom:5,attribution:"Map data © Joel Pedraza"},initialize:function(t,i,s,e){L.Util.setOptions(this,e),this._type=t,L.Proj.TileLayer.TMS.prototype.initialize.call(this,i,s,this.options)}}),L.KSP.tileLayer=function(t,i,s,e){return new L.KSP.TileLayer(t,i,s,e)},L.KSP.LayerGroup=L.LayerGroup.extend({statics:{TYPE_SPACECENTER:0,TYPE_ANOMALY:1},initialize:function(t,i){this._type=t,L.LayerGroup.prototype.initialize.call(this,i)}}),L.KSP.layerGroup=function(t,i){return new L.KSP.LayerGroup(t,i)},L.KSP.Icon={},L.KSP.Icon.SPACECENTER=new L.Icon({iconUrl:"../assets/images/markers-spacecenter.png",shadowUrl:"../assets/images/markers-shadow.png",iconSize:[30,40],shadowSize:[35,16],iconAnchor:[15,40],shadowAnchor:[10,12],popupAnchor:[0,-35]}),L.KSP.Icon.ANOMALY=new L.Icon({iconUrl:"../assets/images/markers-anomaly.png",shadowUrl:"../assets/images/markers-shadow.png",iconSize:[30,40],shadowSize:[35,16],iconAnchor:[15,40],shadowAnchor:[10,12],popupAnchor:[0,-35]}),L.KSP.Legend={},L.KSP.Legend.SLOPE={"≥ 60°":"#E19678","< 60°":"#C86464","< 30°":"#965A64","< 15°":"#645064","< 5°":"#325064","0°":"#32465A"},L.KSP.Control=L.KSP.control={},L.KSP.Control.Legend=L.Control.extend({options:{position:"bottomright"},onAdd:function(t){return this._container=L.DomUtil.create("div","leaflet-control-legend"),t.on("baselayerchange",this._onLayerChange,this),this._container},_update:function(t){if(this._container.innerHTML="",t){for(var i in t)t.hasOwnProperty(i)&&(this._container.innerHTML+=''+i+"
    ");L.DomUtil.addClass(this._container,"leaflet-control-legend-visible")}else this._container.className=this._container.className.replace(" leaflet-control-legend-visible","")},_onLayerChange:function(t){this._update(t.layer.options.legend)}}),L.Map.mergeOptions({legendControl:!0}),L.Map.addInitHook(function(){this.options.bodyControl&&(this.legendControl=new L.KSP.Control.Legend,this.addControl(this.legendControl))}),L.control.legend=function(t){return new L.KSP.Control.Legend(t)},L.KSP.Control.Scale=L.Control.Scale.extend({options:{imperial:!1},onAdd:function(t){this._radius=0,t._body&&(this._radius=t._body.radius);var i=L.Control.Scale.prototype.onAdd.call(this,t);return t.on("bodychangeend",this._onBodyChangeEnd,this),i},onRemove:function(t){L.Control.Scale.prototype.onRemove.call(this,t),t.off("bodychangeend",this._onBodyChangeEnd)},_onBodyChangeEnd:function(t){this._radius=t.body.radius,this._update()},_update:function(){var t=this._map.getBounds(),i=t.getCenter().lat,s=this._radius*Math.PI*Math.cos(i*Math.PI/180),e=s*(t.getNorthEast().lng-t.getSouthWest().lng)/180,o=this._map.getSize(),n=this.options,a=0;o.x>0&&(a=e*(n.maxWidth/o.x)),this._updateScales(n,a)}}),L.KSP.Map.mergeOptions({scaleControl:!1}),L.KSP.Map.addInitHook(function(){this.options.scaleControl&&(this.scaleControl=new L.KSP.Control.Scale,this.addControl(this.scaleControl))}),L.KSP.control.scale=function(t){return new L.KSP.Control.Scale(t)},L.KSP.Control.CelestialBody=L.Control.extend({options:{position:"topright",collapsed:!0},initialize:function(t,i){L.Util.setOptions(this,i),this._bodies=t,this._timeInMillis=(new Date).valueOf(),this._weekInMillis=6048e5},onAdd:function(){return this._initLayout(),this._update(),this._map.on("bodychangeend",this._update,this),this._container},_initLayout:function(){var t="leaflet-control-celestialbodies",s=this._container=L.DomUtil.create("div",t),e=this._bodies;if(this.options.collapsed){L.DomEvent.on(s,"mouseover",this._expand,this).on(s,"mouseout",this._collapse,this);var o=this._bodiesLink=L.DomUtil.create("a",t+"-toggle",s);o.href="#",o.title="Celestial Bodies",L.DomEvent.on(o,"focus",this._expand,this),this._map.on("movestart",this._collapse,this)}var n=this._list=L.DomUtil.create("ul",t+"-list",s);for(var a in e)if(e.hasOwnProperty(a)){var r=this._addBody(e[a],n);if(e[a].children){var h=i.createElement("ul");for(var l in e[a].children)e[a].children.hasOwnProperty(l)&&this._addBody(e[a].children[l],h);r.appendChild(h)}}},_update:function(){this._map._body&&(this._bodiesLink.style.backgroundImage='url("'+this._map._body.thumbnail+'")')},_addBody:function(t,s){var e,o=i.createElement("li"),n=i.createElement("img");if(n.src=t.thumbnail,n.alt=o.title=t.name,t.addedOn){this._timeInMillis-t.addedOnKerbal Space Center
    -0.0969 : -74.6004"),L.marker([20.5829,-146.5116],{icon:L.KSP.Icon.SPACECENTER}).bindPopup("Kerbal Space Center 2
    20.5829 : -146.5116"),L.marker([-1.5409,-71.9099],{icon:L.KSP.Icon.SPACECENTER}).bindPopup("Island Airfield
    -1.5409 : -71.9099")]),Anomalies:L.KSP.layerGroup(L.KSP.LayerGroup.TYPE_ANOMALY,[L.marker([.1023,-74.5684],{icon:L.KSP.Icon.ANOMALY}).bindPopup("0.1023 : -74.5684"),L.marker([20.6709,-146.4968],{icon:L.KSP.Icon.ANOMALY}).bindPopup("20.6709 : -146.4968"),L.marker([35.5705,-74.9773],{icon:L.KSP.Icon.ANOMALY}).bindPopup("35.5705 : -74.9773"),L.marker([-.6402,-80.7668],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-0.6402 : -80.7668"),L.marker([-28.8083,-13.4401],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-28.8083 : -13.4401"),L.marker([-6.5057,-141.6856],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-6.5057 : -141.6856"),L.marker([81.9551,-128.518],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-81.9551 : -128.518")])}}),L.KSP.CelestialBody.MUN=L.KSP.celestialBody({id:"mun",name:"Mun",crs:L.KSP.CRS.EPSG4326,radius:2e5,addedOn:13682304e5,lastUpdated:1368144e6,thumbnail:"body-mun.png",baseLayers:{Satellite:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SATELLITE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{body:"mun",style:"sat"}),"Color Relief":L.KSP.tileLayer(L.KSP.TileLayer.TYPE_COLORRELIEF,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{body:"mun",style:"color",legend:{"3150 m":"#EBEBEB","-180 m":"#232323"}}),Slope:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SLOPE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{body:"mun",style:"slope",legend:L.KSP.Legend.SLOPE})},overlays:{Anomalies:L.KSP.layerGroup(L.KSP.LayerGroup.TYPE_ANOMALY,[L.marker([-9.8314,25.9177],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-9.8314 : 25.9177"),L.marker([-82.2063,102.9305],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-82.2063 : 102.9305"),L.marker([57.6604,9.1422],{icon:L.KSP.Icon.ANOMALY}).bindPopup("57.6604 : 9.1422"),L.marker([2.4695,81.5133],{icon:L.KSP.Icon.ANOMALY}).bindPopup("2.4695 : 81.5133"),L.marker([12.4432,39.178],{icon:L.KSP.Icon.ANOMALY}).bindPopup("12.4432 : 39.1780"),L.marker([-12.4431,-140.822],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-12.4431 : -140.8220"),L.marker([.7027,22.747],{icon:L.KSP.Icon.ANOMALY}).bindPopup("0.7027 : 22.7470"),L.marker([-70.9556,-68.1378],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-70.9556,-68.1378")])}}),L.KSP.CelestialBody.MINMUS=L.KSP.celestialBody({id:"minmus",name:"Minmus",crs:L.KSP.CRS.EPSG4326,radius:6e4,addedOn:13682304e5,lastUpdated:13682304e5,thumbnail:"body-minmus.png",baseLayers:{Satellite:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SATELLITE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"sat",body:"minmus"}),"Color Relief":L.KSP.tileLayer(L.KSP.TileLayer.TYPE_COLORRELIEF,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"color",body:"minmus",legend:{"5750 m":"#414B41","2500 m":"#BEE6C3","1 m":"#96CDB4","0 m":"#87B9A5"}}),Slope:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SLOPE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"slope",body:"minmus",legend:L.KSP.Legend.SLOPE})},overlays:{Anomalies:L.KSP.layerGroup(L.KSP.LayerGroup.TYPE_ANOMALY,[L.marker([23.7768,60.0462],{icon:L.KSP.Icon.ANOMALY}).bindPopup("23.7768 : 60.0462")])}}),L.KSP.CelestialBody.DUNA=L.KSP.celestialBody({id:"duna",name:"Duna",crs:L.KSP.CRS.EPSG4326,radius:32e4,addedOn:13688352e5,lastUpdated:13688352e5,thumbnail:"body-duna.png",baseLayers:{Satellite:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SATELLITE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"sat",body:"duna"}),"Color Relief":L.KSP.tileLayer(L.KSP.TileLayer.TYPE_COLORRELIEF,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"color",body:"duna",legend:{"4800 m":"#C3A082","4000 m":"#966446","3000 m":"#733219","2000 m":"#501E14","1000 m":"#3C140F","0 m":"#280F0A"}}),Slope:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SLOPE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"slope",body:"duna",legend:L.KSP.Legend.SLOPE})},overlays:{Anomalies:L.KSP.layerGroup(L.KSP.LayerGroup.TYPE_ANOMALY,[L.marker([17.0483,-85.4717],{icon:L.KSP.Icon.ANOMALY}).bindPopup("17.0483 : -85.4717"),L.marker([-30.3525,-28.6828],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-30.3525 : -28.6828"),L.marker([-66.1344,-160.7432],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-66.1344 : -160.7432")])}}),L.KSP.CelestialBody.IKE=L.KSP.celestialBody({id:"ike",name:"Ike",crs:L.KSP.CRS.EPSG4326,radius:13e4,addedOn:13688352e5,lastUpdated:13688352e5,thumbnail:"body-ike.png",baseLayers:{Satellite:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SATELLITE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"sat",body:"ike"}),"Color Relief":L.KSP.tileLayer(L.KSP.TileLayer.TYPE_COLORRELIEF,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"color",body:"ike",legend:{"13000 m":"#828282","11000 m":"#6E6E6E","9000 m":"#5A5A5A","7000 m":"#464646","5000 m":"#323232","2500 m":"#191919","70 m":"#070707"}}),Slope:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SLOPE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"slope",body:"ike",legend:L.KSP.Legend.SLOPE})},overlays:{}}),L.KSP.CelestialBody.DRES=L.KSP.celestialBody({id:"dres",name:"Dres",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-dres.png"}),L.KSP.CelestialBody.JOOL=L.KSP.celestialBody({id:"jool",name:"Jool",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-jool.png"}),L.KSP.CelestialBody.LAYTHE=L.KSP.celestialBody({id:"laythe",name:"Laythe",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-laythe.png"}),L.KSP.CelestialBody.VALL=L.KSP.celestialBody({id:"vall",name:"Vall",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-vall.png"}),L.KSP.CelestialBody.TYLO=L.KSP.celestialBody({id:"tylo",name:"Tylo",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-tylo.png"}),L.KSP.CelestialBody.BOP=L.KSP.celestialBody({id:"bop",name:"Bop",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-bop.png"}),L.KSP.CelestialBody.POL=L.KSP.celestialBody({id:"pol",name:"Pol",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-pol.png"}),L.KSP.CelestialBody.EELOO=L.KSP.celestialBody({id:"eeloo",name:"Eeloo",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-eeloo.png"}),L.KSP.CelestialBody.KERBIN.defaultLayer=L.KSP.CelestialBody.KERBIN.baseLayers.Satellite,L.KSP.CelestialBody.MUN.defaultLayer=L.KSP.CelestialBody.MUN.baseLayers.Satellite,L.KSP.CelestialBody.MINMUS.defaultLayer=L.KSP.CelestialBody.MINMUS.baseLayers.Satellite,L.KSP.CelestialBody.EVE.children=[L.KSP.CelestialBody.GILLY],L.KSP.CelestialBody.KERBIN.children=[L.KSP.CelestialBody.MUN,L.KSP.CelestialBody.MINMUS],L.KSP.CelestialBody.DUNA.children=[L.KSP.CelestialBody.IKE],L.KSP.CelestialBody.JOOL.children=[L.KSP.CelestialBody.LAYTHE,L.KSP.CelestialBody.VALL,L.KSP.CelestialBody.TYLO,L.KSP.CelestialBody.BOP,L.KSP.CelestialBody.POL],L.KSP.CelestialBody.GILLY.parent=L.KSP.CelestialBody.EVE,L.KSP.CelestialBody.MUN.parent=L.KSP.CelestialBody.MINMUS.parent=L.KSP.CelestialBody.KERBIN,L.KSP.CelestialBody.IKE.parent=L.KSP.CelestialBody.DUNA,L.KSP.CelestialBody.LAYTHE.parent=L.KSP.CelestialBody.VALL.parent=L.KSP.CelestialBody.TYLO.parent=L.KSP.CelestialBody.BOP.parent=L.KSP.CelestialBody.POL.parent=L.KSP.CelestialBody.JOOL,L.KSP.CelestialBody.ALL_PLANETARY=[L.KSP.CelestialBody.MOHO,L.KSP.CelestialBody.EVE,L.KSP.CelestialBody.KERBIN,L.KSP.CelestialBody.DUNA,L.KSP.CelestialBody.DRES,L.KSP.CelestialBody.JOOL,L.KSP.CelestialBody.EELOO],L.KSP.Map.addInitHook(function(){this.options.layers=[L.KSP.CelestialBody.KERBIN]})}(this,document);var Settings=Class.create({initialize:function(defaultHost,defaultPort){if(!this.getHost()){this.setHost(defaultHost)}if(!this.getPort()){this.setPort(defaultPort)}},getHost:function(){return this.get("host")},getPort:function(){return this.get("port")},setHost:function(value){return this.set("host",value)},setPort:function(value){return this.set("port",value)},get:function(property){return localStorage.getItem(property)},set:function(property,value){return localStorage.setItem(property,value)}});var Telemachus=Class.create({initialize:function(host,port){this.updateConnection(host,port);this.receiverFunctions=[];this.subscribedFields={};this.orbitingBodies=this.getOrbitalBodies();this.rate=500;this.loopTimeout=setTimeout(this.poll.bind(this),this.rate)},url:function(){return"http://"+this.host+":"+this.port+"/telemachus/datalink"},updateConnection:function(host,port){this.host=host;this.port=port},addReceiverFunction:function(func){this.receiverFunctions.push(func)},subscribeToData:function(fields){for(var i=fields.length-1;i>=0;i--){var field=fields[i];this.subscribedFields[field]=field}},dispatchMessages:function(data){for(var i=this.receiverFunctions.length-1;i>=0;i--){try{this.receiverFunctions[i](data)}catch(e){console.error(e)}}},send:function(message){this.socket.send(JSON.stringify(message))},getOrbitalBodyInfo:function(name){var properties=this.orbitingBodies[name];if(properties){return Object.extend({name:name},properties)}else{return null}},notifyIfLOS:function(request){if(request.transport.status==0){document.fire("telemachus:loss-of-signal");return true}return false},prepareParams:function(params){var normalizedParams=[];Object.keys(params).forEach(function(field){var sanitizedFieldName=field.replace("[","{").replace("]","}");normalizedParams.push(sanitizedFieldName+"="+field)});return normalizedParams},convertData:function(rawData){var data={};var startBracesRegexp=/\{/g;var endBracesRegexp=/\}/g;Object.keys(rawData).forEach(function(key){var convertedFieldName=key.replace(startBracesRegexp,"[").replace(endBracesRegexp,"]");data[convertedFieldName]=rawData[key]});return data},poll:function(){var params=this.prepareParams(this.subscribedFields);var requestURL=this.url()+"?"+params.join("&");new Ajax.Request(requestURL,{method:"get",onSuccess:function(response){var rawData=JSON.parse(response.responseText);var data=this.convertData(rawData);this.dispatchMessages(data)}.bind(this),onException:this.notifyIfLOS.bind(this),onComplete:function(response){setTimeout(this.poll.bind(this),this.rate)}.bind(this)})},sendMessage:function(params,callback){new Ajax.Request(this.url(),{method:"post",postBody:JSON.stringify(params),onSuccess:function(response){var rawData=JSON.parse(response.responseText);var data=this.convertData(rawData);callback(data)}.bind(this),onException:this.notifyIfLOS.bind(this)})},getOrbitalBodies:function(){return{Sun:{id:0,referenceBodyName:null,mapBody:null,atmosphericRadius:0,color:"#FFFF00",surfaceGravity:17.1},Kerbin:{id:1,referenceBodyName:"Sun",mapBody:L.KSP.CelestialBody.KERBIN,atmosphericRadius:7e4,color:"#4a5472",surfaceGravity:9.81},Mun:{id:2,referenceBodyName:"Kerbin",mapBody:L.KSP.CelestialBody.MUN,atmosphericRadius:0,color:"#e2e0d7",surfaceGravity:1.63},Minmus:{id:3,referenceBodyName:"Kerbin",mapBody:L.KSP.CelestialBody.MINMUS,color:"#98f2c5",atmosphericRadius:0,surfaceGravity:.491},Moho:{id:4,referenceBodyName:"Sun",mapBody:L.KSP.CelestialBody.MOHO,atmosphericRadius:0,color:"#fdc39e",surfaceGravity:2.7},Eve:{id:5,referenceBodyName:"Sun",mapBody:L.KSP.CelestialBody.EVE,atmosphericRadius:9e4,color:"#c394fe",surfaceGravity:16.7},Duna:{id:6,referenceBodyName:"Sun",mapBody:L.KSP.CelestialBody.DUNA,atmosphericRadius:5e4,color:"#fc5e49",surfaceGravity:2.94},Ike:{id:7,referenceBodyName:"Duna",mapBody:L.KSP.CelestialBody.IKE,atmosphericRadius:0,color:"#e2e0d7",surfaceGravity:1.1},Jool:{id:8,referenceBodyName:"Sun",mapBody:L.KSP.CelestialBody.JOOL,atmosphericRadius:2e5,color:"#C5DCAB",surfaceGravity:7.85},Laythe:{id:9,referenceBodyName:"Jool",mapBody:L.KSP.CelestialBody.LAYTHE,atmosphericRadius:5e4,color:"#a8b4fe",surfaceGravity:7.85},Vall:{id:10,referenceBodyName:"Jool",mapBody:L.KSP.CelestialBody.VALL,atmosphericRadius:0,color:"#b0f4fe",surfaceGravity:2.31},Bop:{id:11,referenceBodyName:"Jool",mapBody:L.KSP.CelestialBody.BOP,atmosphericRadius:0,color:"#c64605",surfaceGravity:.589},Tylo:{id:12,referenceBodyName:"Jool",mapBody:L.KSP.CelestialBody.TYLO,atmosphericRadius:0,color:"#fdf7ed",surfaceGravity:7.85},Gilly:{id:13,referenceBodyName:"Eve",mapBody:L.KSP.CelestialBody.GILLY,atmosphericRadius:0,color:"#fdcbb1",surfaceGravity:.049},Pol:{id:14,referenceBodyName:"Pol",mapBody:L.KSP.CelestialBody.POL,atmosphericRadius:0,color:"#fec681",surfaceGravity:.373},Dres:{id:15,referenceBodyName:"Sun",mapBody:L.KSP.CelestialBody.DRES,atmosphericRadius:0,color:"#fef8f9",surfaceGravity:1.13},Eeloo:{id:16,referenceBodyName:"Sun",mapBody:L.KSP.CelestialBody.EELOO,atmosphericRadius:0,color:"#e5fafe",surfaceGravity:1.69}}}});var TitleBar=Class.create({initialize:function(datalink,title_bar_id){this.datalink=datalink;this.title_bar_id=title_bar_id;this.title_bar=$(this.title_bar_id);this.initializeLOSNotifier();this.initializeDatalink()},update:function(data){window.requestAnimationFrame(function(){this.title_bar.down("#world-clock").update(TimeFormatters.formatUT(data["t.universalTime"]));this.title_bar.down("#mission-time").update(TimeFormatters.formatMET(data["v.missionTime"]));this.title_bar.down("#mission-time").removeClassName("loss-of-signal")}.bind(this))},initializeLOSNotifier:function(){document.observe("telemachus:loss-of-signal",function(){window.requestAnimationFrame(function(){this.title_bar.down("#mission-time").update("⚠ LOS ⚠");this.title_bar.down("#mission-time").addClassName("loss-of-signal")}.bind(this))}.bind(this))},initializeDatalink:function(){this.datalink.subscribeToData(["t.timeWarp","t.universalTime","v.missionTime"]);this.datalink.addReceiverFunction(this.update.bind(this))}});var ButtonIndicator=Class.create({initialize:function(datalink,indicatorId,apiButtonString){this.datalink=datalink;this.indicatorId=indicatorId;this.indicator=$(this.indicatorId);this.apiButtonString=apiButtonString;this.initializeDatalink()},update:function(data){if(data[this.apiButtonString]==true){this.indicator.addClassName("on")}else{this.indicator.removeClassName("on")}},initializeDatalink:function(){this.datalink.subscribeToData([this.apiButtonString]);this.datalink.addReceiverFunction(this.update.bind(this))}});var ReadoutTable=Class.create({initialize:function(datalink,tableId,dataRows){this.datalink=datalink;this.tableId=tableId;this.table=$(this.tableId);this.dataRows=dataRows;this.initializeDatalink()},update:function(data){window.requestAnimationFrame(function(){this.dataRows.forEach(function(row){var rowId=row.label;var tableRow=this.table.down("tr[data-label='"+rowId+"']");if(!tableRow){var tableRow=new Element("tr",{"data-label":rowId});tableRow.insert(""+row.label+"");this.table.insert(tableRow)}tableRow.down("td").update(row.formatter(data[row.value]))}.bind(this))}.bind(this))},initializeDatalink:function(){var dataValues=this.dataRows.map(function(dataRow){return dataRow.value});this.datalink.subscribeToData(dataValues);this.datalink.addReceiverFunction(this.update.bind(this))}});var ResourceMonitor=Class.create({initialize:function(datalink,resourceName,options){this.datalink=datalink;this.resourceName=resourceName;this.options=Object.extend({currentStageProgressBar:null,totalProgressBar:null,valuePrefix:null},options);this.resourceStrings=this.buildResourceStrings();this.initializeDatalink()},update:function(data){window.requestAnimationFrame(function(){if(this.options.totalProgressBar){this.options.totalProgressBar.value=data[this.resourceStrings.totalAvailable];this.options.totalProgressBar.max=data[this.resourceStrings.totalMax]}if(this.options.currentStageProgressBar){this.options.currentStageProgressBar.value=data[this.resourceStrings.currentStageAvailable];this.options.currentStageProgressBar.max=data[this.resourceStrings.currentStageMax]}this.updateValue("-total-value",data[this.resourceStrings.totalAvailable]);this.updateValue("-total-max",data[this.resourceStrings.totalMax]);this.updateValue("-current-stage-value",data[this.resourceStrings.currentStageAvailable]);this.updateValue("-current-stage-max",data[this.resourceStrings.currentStageMax])}.bind(this))},updateValue:function(id,value){if($(this.options.valuePrefix+id)){if(value<0){$(this.options.valuePrefix+id).update("NA")}else{$(this.options.valuePrefix+id).update(value.toFixed(2))}}},buildResourceStrings:function(){return{totalAvailable:"r.resource["+this.resourceName+"]",totalMax:"r.resourceMax["+this.resourceName+"]",currentStageAvailable:"r.resourceCurrent["+this.resourceName+"]",currentStageMax:"r.resourceCurrentMax["+this.resourceName+"]"}},initializeDatalink:function(){this.datalink.subscribeToData([this.resourceStrings.totalAvailable,this.resourceStrings.totalMax,this.resourceStrings.currentStageAvailable,this.resourceStrings.currentStageMax]);this.datalink.addReceiverFunction(this.update.bind(this))}});var DataTable=Class.create({initialize:function(tableID,dataRows){this.tableID=tableID;this.table=$(this.tableID);this.dataRows=dataRows},update:function(){window.requestAnimationFrame(function(){this.dataRows.forEach(function(row){var rowId=row.label;var tableRow=this.table.down("tr[data-label='"+rowId+"']");if(!tableRow){var tableRow=new Element("tr",{"data-label":rowId});tableRow.insert(""+row.label+"");this.table.insert(tableRow)}tableRow.down("td").update(row.value)}.bind(this))}.bind(this))},clear:function(){window.requestAnimationFrame(function(){this.dataRows=[];this.table.innerHTML=""}.bind(this))}});var AtmosphericDensityGauge=Class.create({initialize:function(datalink,gaugeID){this.datalink=datalink;this.gaugeID=gaugeID;this.gauge=$(this.gaugeID);this.initializeDatalink();this.func=function(x){return Math.log(2*x)}},update:function(data){var max=this.func(100);var value=this.func(data["v.atmosphericPressure"]*100);if(!isFinite(value)){value=0}this.gauge.value=value;this.gauge.max=max},initializeDatalink:function(){this.datalink.subscribeToData(["v.atmosphericPressure"]);this.datalink.addReceiverFunction(this.update.bind(this))}});var ThrottleGauge=Class.create({initialize:function(datalink,gaugeID){this.datalink=datalink;this.gaugeID=gaugeID;this.gauge=$(this.gaugeID);this.initializeDatalink()},update:function(data){this.gauge.value=data["f.throttle"]*100;this.gauge.max=100},initializeDatalink:function(){this.datalink.subscribeToData(["f.throttle"]);this.datalink.addReceiverFunction(this.update.bind(this))}});L.Graticule=L.GeoJSON.extend({options:{style:{color:"#333",weight:1},interval:20},initialize:function(options){L.Util.setOptions(this,options);this._layers={};if(this.options.sphere){this.addData(this._getFrame())}else{this.addData(this._getGraticule())}},_getFrame:function(){return{type:"Polygon",coordinates:[this._getMeridian(-180).concat(this._getMeridian(180).reverse())]}},_getGraticule:function(){var features=[],interval=this.options.interval;for(var lng=0;lng<=180;lng=lng+interval){features.push(this._getFeature(this._getMeridian(lng),{name:lng?lng.toString()+"° E":"Prime meridian"}));if(lng!==0){features.push(this._getFeature(this._getMeridian(-lng),{name:lng.toString()+"° W"}))}}for(var lat=0;lat<=90;lat=lat+interval){features.push(this._getFeature(this._getParallel(lat),{name:lat?lat.toString()+"° N":"Equator"}));if(lat!==0){features.push(this._getFeature(this._getParallel(-lat),{name:lat.toString()+"° S"}))}}return{type:"FeatureCollection",features:features}},_getMeridian:function(lng){lng=this._lngFix(lng);var coords=[];for(var lat=-90;lat<=90;lat++){coords.push([lng,lat])}return coords},_getParallel:function(lat){var coords=[];for(var lng=-180;lng<=180;lng++){coords.push([this._lngFix(lng),lat])}return coords},_getFeature:function(coords,prop){return{type:"Feature",geometry:{type:"LineString",coordinates:coords},properties:prop}},_lngFix:function(lng){if(lng>=180)return 179.999999;if(lng<=-180)return-179.999999;return lng}});L.graticule=function(options){return new L.Graticule(options)};var PositionMap=Class.create({initialize:function(datalink,mapId,options){this.datalink=datalink;this.mapId=mapId;this.noMapIndicatorId=mapId+"-no-map";this.previousBody="KERBIN";this.options=Object.extend({lockOnVessel:true},options);this.initializeMap();this.initializeNoMapIndicator();this.initializeDatalink()},update:function(data){window.requestAnimationFrame(function(){if(this.isMapAvailable(data)){this.showMap();this.updateBodyIfNecessary(data);this.setCoordinatesForMapObject(this.coordinates,data["v.lat"],data["v.long"]);if(this.options.lockOnVessel){this.map.panTo([data["v.lat"],data["v.long"]])}}else{this.hideMap()}}.bind(this))},updateBodyIfNecessary:function(data){var bodyName=data["v.body"].toUpperCase();if(this.previousBody!=bodyName){newBody=L.KSP.CelestialBody[bodyName];newBody.addTo(this.map);this.previousBody=bodyName}},initializeMap:function(){this.map=new L.KSP.Map(this.mapId,{layers:[L.KSP.CelestialBody[this.previousBody.toUpperCase()]],zoom:"fit",bodyControl:false,layerControl:true,scaleControl:true});this.map.fitWorld();L.graticule().addTo(this.map);var circleMarkerOptions={color:"#FD7E23",opacity:1,fillOpacity:1,radius:5};this.coordinates=L.circleMarker([0,0],circleMarkerOptions);this.coordinates.addTo(this.map)},convertCoordinatesToMap:function(latitude,longitude){return[latitude,longitude>180?longitude-360:longitude]},setCoordinatesForMapObject:function(object,latitude,longitude){var convertedCoordinates=this.convertCoordinatesToMap(latitude,longitude);object.setLatLng([convertedCoordinates[0],convertedCoordinates[1]])},isMapAvailable:function(data){return data["v.body"].toUpperCase()!="SUN"},hideMap:function(){$(this.mapId).hide();this.noMapIndicator.removeClassName("hidden")},showMap:function(){$(this.mapId).show();this.noMapIndicator.addClassName("hidden")},initializeNoMapIndicator:function(){this.noMapIndicator=$(this.noMapIndicatorId)},initializeDatalink:function(){this.datalink.subscribeToData(["v.lat","v.long","v.body"]);this.datalink.addReceiverFunction(this.update.bind(this))}});"use strict";var THREE={REVISION:"75"};"function"===typeof define&&define.amd?define("three",THREE):"undefined"!==typeof exports&&"undefined"!==typeof module&&(module.exports=THREE);void 0===Number.EPSILON&&(Number.EPSILON=Math.pow(2,-52));void 0===Math.sign&&(Math.sign=function(a){return 0>a?-1:0>16&255)/255;this.g=(a>>8&255)/255;this.b=(a&255)/255;return this},setRGB:function(a,b,c){this.r=a;this.g=b;this.b=c;return this},setHSL:function(){function a(a,c,d){0>d&&(d+=1);1d?c:d<2/3?a+6*(c-a)*(2/3-d):a}return function(b,c,d){b=THREE.Math.euclideanModulo(b,1);c=THREE.Math.clamp(c,0,1);d=THREE.Math.clamp(d,0,1);0===c?this.r=this.g=this.b=d:(c=.5>=d?d*(1+c):d+c-d*c,d=2*d-c,this.r=a(d,c,b+1/3),this.g=a(d,c,b),this.b=a(d,c,b-1/3));return this}}(),setStyle:function(a){function b(b){void 0!==b&&1>parseFloat(b)&&console.warn("THREE.Color: Alpha component of "+a+" will be ignored.")}var c;if(c=/^((?:rgb|hsl)a?)\(\s*([^\)]*)\)/.exec(a)){var d=c[2];switch(c[1]){case"rgb":case"rgba":if(c=/^(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(d))return this.r=Math.min(255,parseInt(c[1],10))/255,this.g=Math.min(255,parseInt(c[2],10))/255,this.b=Math.min(255,parseInt(c[3],10))/255,b(c[5]),this;if(c=/^(\d+)\%\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(d))return this.r=Math.min(100,parseInt(c[1],10))/100,this.g=Math.min(100,parseInt(c[2],10))/100,this.b=Math.min(100,parseInt(c[3],10))/100,b(c[5]),this;break;case"hsl":case"hsla":if(c=/^([0-9]*\.?[0-9]+)\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(d)){var d=parseFloat(c[1])/360,e=parseInt(c[2],10)/100,f=parseInt(c[3],10)/100;b(c[5]);return this.setHSL(d,e,f)}}}else if(c=/^\#([A-Fa-f0-9]+)$/.exec(a)){c=c[1];d=c.length;if(3===d)return this.r=parseInt(c.charAt(0)+c.charAt(0),16)/255,this.g=parseInt(c.charAt(1)+c.charAt(1),16)/255,this.b=parseInt(c.charAt(2)+c.charAt(2),16)/255,this;if(6===d)return this.r=parseInt(c.charAt(0)+c.charAt(1),16)/255,this.g=parseInt(c.charAt(2)+c.charAt(3),16)/255,this.b=parseInt(c.charAt(4)+c.charAt(5),16)/255,this}a&&0=h?k/(e+f):k/(2-e-f);switch(e){case b:g=(c-d)/k+(cf&&c>b?(c=2*Math.sqrt(1+c-f-b),this._w=(k-g)/c,this._x=.25*c,this._y=(a+e)/c,this._z=(d+h)/c):f>b?(c=2*Math.sqrt(1+f-c-b),this._w=(d-h)/c,this._x=(a+e)/c,this._y=.25*c,this._z=(g+k)/c):(c=2*Math.sqrt(1+b-c-f),this._w=(e-a)/c,this._x=(d+h)/c,this._y=(g+k)/c,this._z=.25*c);this.onChangeCallback();return this},setFromUnitVectors:function(){var a,b;return function(c,d){void 0===a&&(a=new THREE.Vector3);b=c.dot(d)+1;1e-6>b?(b=0,Math.abs(c.x)>Math.abs(c.z)?a.set(-c.y,c.x,0):a.set(0,-c.z,c.y)):a.crossVectors(c,d);this._x=a.x;this._y=a.y;this._z=a.z;this._w=b;this.normalize();return this}}(),inverse:function(){this.conjugate().normalize();return this},conjugate:function(){this._x*=-1;this._y*=-1;this._z*=-1;this.onChangeCallback();return this},dot:function(a){return this._x*a._x+this._y*a._y+this._z*a._z+this._w*a._w},lengthSq:function(){return this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w},length:function(){return Math.sqrt(this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w)},normalize:function(){var a=this.length();0===a?(this._z=this._y=this._x=0,this._w=1):(a=1/a,this._x*=a,this._y*=a,this._z*=a,this._w*=a);this.onChangeCallback();return this},multiply:function(a,b){return void 0!==b?(console.warn("THREE.Quaternion: .multiply() now only accepts one argument. Use .multiplyQuaternions( a, b ) instead."),this.multiplyQuaternions(a,b)):this.multiplyQuaternions(this,a)},multiplyQuaternions:function(a,b){var c=a._x,d=a._y,e=a._z,f=a._w,g=b._x,h=b._y,k=b._z,l=b._w;this._x=c*l+f*g+d*k-e*h;this._y=d*l+f*h+e*g-c*k;this._z=e*l+f*k+c*h-d*g;this._w=f*l-c*g-d*h-e*k;this.onChangeCallback();return this},slerp:function(a,b){if(0===b)return this;if(1===b)return this.copy(a);var c=this._x,d=this._y,e=this._z,f=this._w,g=f*a._w+c*a._x+d*a._y+e*a._z;0>g?(this._w=-a._w,this._x=-a._x,this._y=-a._y,this._z=-a._z,g=-g):this.copy(a);if(1<=g)return this._w=f,this._x=c,this._y=d,this._z=e,this;var h=Math.sqrt(1-g*g);if(.001>Math.abs(h))return this._w=.5*(f+this._w),this._x=.5*(c+this._x),this._y=.5*(d+this._y),this._z=.5*(e+this._z),this;var k=Math.atan2(h,g),g=Math.sin((1-b)*k)/h,h=Math.sin(b*k)/h;this._w=f*g+this._w*h;this._x=c*g+this._x*h;this._y=d*g+this._y*h;this._z=e*g+this._z*h;this.onChangeCallback();return this},equals:function(a){return a._x===this._x&&a._y===this._y&&a._z===this._z&&a._w===this._w},fromArray:function(a,b){void 0===b&&(b=0);this._x=a[b];this._y=a[b+1];this._z=a[b+2];this._w=a[b+3];this.onChangeCallback();return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);a[b]=this._x;a[b+1]=this._y;a[b+2]=this._z;a[b+3]=this._w;return a},onChange:function(a){this.onChangeCallback=a;return this},onChangeCallback:function(){}};Object.assign(THREE.Quaternion,{slerp:function(a,b,c,d){return c.copy(a).slerp(b,d)},slerpFlat:function(a,b,c,d,e,f,g){var h=c[d+0],k=c[d+1],l=c[d+2];c=c[d+3];d=e[f+0];var p=e[f+1],n=e[f+2];e=e[f+3];if(c!==e||h!==d||k!==p||l!==n){f=1-g;var m=h*d+k*p+l*n+c*e,q=0<=m?1:-1,u=1-m*m;u>Number.EPSILON&&(u=Math.sqrt(u),m=Math.atan2(u,m*q),f=Math.sin(f*m)/u,g=Math.sin(g*m)/u);q*=g;h=h*f+d*q;k=k*f+p*q;l=l*f+n*q;c=c*f+e*q;f===1-g&&(g=1/Math.sqrt(h*h+k*k+l*l+c*c),h*=g,k*=g,l*=g,c*=g)}a[b]=h;a[b+1]=k;a[b+2]=l;a[b+3]=c}});THREE.Vector2=function(a,b){this.x=a||0;this.y=b||0};THREE.Vector2.prototype={constructor:THREE.Vector2,get width(){return this.x},set width(a){this.x=a},get height(){return this.y},set height(a){this.y=a},set:function(a,b){this.x=a;this.y=b;return this},setScalar:function(a){this.y=this.x=a;return this},setX:function(a){this.x=a;return this},setY:function(a){this.y=a;return this},setComponent:function(a,b){switch(a){case 0:this.x=b;break;case 1:this.y=b;break;default:throw Error("index is out of range: "+a)}},getComponent:function(a){switch(a){case 0:return this.x;case 1:return this.y;default:throw Error("index is out of range: "+a)}},clone:function(){return new this.constructor(this.x,this.y)},copy:function(a){this.x=a.x;this.y=a.y;return this},add:function(a,b){if(void 0!==b)return console.warn("THREE.Vector2: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(a,b);this.x+=a.x;this.y+=a.y;return this},addScalar:function(a){this.x+=a;this.y+=a;return this},addVectors:function(a,b){this.x=a.x+b.x;this.y=a.y+b.y;return this},addScaledVector:function(a,b){this.x+=a.x*b;this.y+=a.y*b;return this},sub:function(a,b){if(void 0!==b)return console.warn("THREE.Vector2: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(a,b);this.x-=a.x;this.y-=a.y;return this},subScalar:function(a){this.x-=a;this.y-=a;return this},subVectors:function(a,b){this.x=a.x-b.x;this.y=a.y-b.y;return this},multiply:function(a){this.x*=a.x;this.y*=a.y;return this},multiplyScalar:function(a){isFinite(a)?(this.x*=a,this.y*=a):this.y=this.x=0;return this},divide:function(a){this.x/=a.x;this.y/=a.y;return this},divideScalar:function(a){return this.multiplyScalar(1/a)},min:function(a){this.x=Math.min(this.x,a.x);this.y=Math.min(this.y,a.y);return this},max:function(a){this.x=Math.max(this.x,a.x);this.y=Math.max(this.y,a.y);return this},clamp:function(a,b){this.x=Math.max(a.x,Math.min(b.x,this.x));this.y=Math.max(a.y,Math.min(b.y,this.y));return this},clampScalar:function(){var a,b;return function(c,d){void 0===a&&(a=new THREE.Vector2,b=new THREE.Vector2);a.set(c,c);b.set(d,d);return this.clamp(a,b)}}(),clampLength:function(a,b){var c=this.length();this.multiplyScalar(Math.max(a,Math.min(b,c))/c);return this},floor:function(){this.x=Math.floor(this.x);this.y=Math.floor(this.y);return this},ceil:function(){this.x=Math.ceil(this.x);this.y=Math.ceil(this.y);return this},round:function(){this.x=Math.round(this.x);this.y=Math.round(this.y);return this},roundToZero:function(){this.x=0>this.x?Math.ceil(this.x):Math.floor(this.x);this.y=0>this.y?Math.ceil(this.y):Math.floor(this.y);return this},negate:function(){this.x=-this.x;this.y=-this.y;return this},dot:function(a){return this.x*a.x+this.y*a.y},lengthSq:function(){return this.x*this.x+this.y*this.y},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y)},lengthManhattan:function(){return Math.abs(this.x)+Math.abs(this.y)},normalize:function(){return this.divideScalar(this.length())},angle:function(){var a=Math.atan2(this.y,this.x);0>a&&(a+=2*Math.PI);return a},distanceTo:function(a){return Math.sqrt(this.distanceToSquared(a))},distanceToSquared:function(a){var b=this.x-a.x;a=this.y-a.y;return b*b+a*a},setLength:function(a){return this.multiplyScalar(a/this.length())},lerp:function(a,b){this.x+=(a.x-this.x)*b;this.y+=(a.y-this.y)*b;return this},lerpVectors:function(a,b,c){this.subVectors(b,a).multiplyScalar(c).add(a);return this},equals:function(a){return a.x===this.x&&a.y===this.y},fromArray:function(a,b){void 0===b&&(b=0);this.x=a[b];this.y=a[b+1];return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);a[b]=this.x;a[b+1]=this.y;return a},fromAttribute:function(a,b,c){void 0===c&&(c=0);b=b*a.itemSize+c;this.x=a.array[b];this.y=a.array[b+1];return this},rotateAround:function(a,b){var c=Math.cos(b),d=Math.sin(b),e=this.x-a.x,f=this.y-a.y;this.x=e*c-f*d+a.x;this.y=e*d+f*c+a.y;return this}};THREE.Vector3=function(a,b,c){this.x=a||0;this.y=b||0;this.z=c||0};THREE.Vector3.prototype={constructor:THREE.Vector3,set:function(a,b,c){this.x=a;this.y=b;this.z=c;return this},setScalar:function(a){this.z=this.y=this.x=a;return this},setX:function(a){this.x=a;return this},setY:function(a){this.y=a;return this},setZ:function(a){this.z=a;return this},setComponent:function(a,b){switch(a){case 0:this.x=b;break;case 1:this.y=b;break;case 2:this.z=b;break;default:throw Error("index is out of range: "+a)}},getComponent:function(a){switch(a){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw Error("index is out of range: "+a)}},clone:function(){return new this.constructor(this.x,this.y,this.z)},copy:function(a){this.x=a.x;this.y=a.y;this.z=a.z;return this},add:function(a,b){if(void 0!==b)return console.warn("THREE.Vector3: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(a,b);this.x+=a.x;this.y+=a.y;this.z+=a.z;return this},addScalar:function(a){this.x+=a;this.y+=a;this.z+=a;return this},addVectors:function(a,b){this.x=a.x+b.x;this.y=a.y+b.y;this.z=a.z+b.z;return this},addScaledVector:function(a,b){this.x+=a.x*b;this.y+=a.y*b;this.z+=a.z*b;return this},sub:function(a,b){if(void 0!==b)return console.warn("THREE.Vector3: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(a,b);this.x-=a.x;this.y-=a.y;this.z-=a.z;return this},subScalar:function(a){this.x-=a;this.y-=a;this.z-=a;return this},subVectors:function(a,b){this.x=a.x-b.x;this.y=a.y-b.y;this.z=a.z-b.z;return this},multiply:function(a,b){if(void 0!==b)return console.warn("THREE.Vector3: .multiply() now only accepts one argument. Use .multiplyVectors( a, b ) instead."),this.multiplyVectors(a,b);this.x*=a.x;this.y*=a.y;this.z*=a.z;return this},multiplyScalar:function(a){isFinite(a)?(this.x*=a,this.y*=a,this.z*=a):this.z=this.y=this.x=0;return this},multiplyVectors:function(a,b){this.x=a.x*b.x;this.y=a.y*b.y;this.z=a.z*b.z;return this},applyEuler:function(){var a;return function(b){!1===b instanceof THREE.Euler&&console.error("THREE.Vector3: .applyEuler() now expects an Euler rotation rather than a Vector3 and order.");void 0===a&&(a=new THREE.Quaternion);this.applyQuaternion(a.setFromEuler(b));return this}}(),applyAxisAngle:function(){var a;return function(b,c){void 0===a&&(a=new THREE.Quaternion);this.applyQuaternion(a.setFromAxisAngle(b,c));return this}}(),applyMatrix3:function(a){var b=this.x,c=this.y,d=this.z;a=a.elements;this.x=a[0]*b+a[3]*c+a[6]*d;this.y=a[1]*b+a[4]*c+a[7]*d;this.z=a[2]*b+a[5]*c+a[8]*d;return this},applyMatrix4:function(a){var b=this.x,c=this.y,d=this.z;a=a.elements;this.x=a[0]*b+a[4]*c+a[8]*d+a[12];this.y=a[1]*b+a[5]*c+a[9]*d+a[13];this.z=a[2]*b+a[6]*c+a[10]*d+a[14];return this},applyProjection:function(a){var b=this.x,c=this.y,d=this.z;a=a.elements;var e=1/(a[3]*b+a[7]*c+a[11]*d+a[15]);this.x=(a[0]*b+a[4]*c+a[8]*d+a[12])*e;this.y=(a[1]*b+a[5]*c+a[9]*d+a[13])*e;this.z=(a[2]*b+a[6]*c+a[10]*d+a[14])*e;return this},applyQuaternion:function(a){var b=this.x,c=this.y,d=this.z,e=a.x,f=a.y,g=a.z;a=a.w;var h=a*b+f*d-g*c,k=a*c+g*b-e*d,l=a*d+e*c-f*b,b=-e*b-f*c-g*d;this.x=h*a+b*-e+k*-g-l*-f;this.y=k*a+b*-f+l*-e-h*-g;this.z=l*a+b*-g+h*-f-k*-e;return this},project:function(){var a;return function(b){void 0===a&&(a=new THREE.Matrix4);a.multiplyMatrices(b.projectionMatrix,a.getInverse(b.matrixWorld));return this.applyProjection(a)}}(),unproject:function(){var a;return function(b){void 0===a&&(a=new THREE.Matrix4);a.multiplyMatrices(b.matrixWorld,a.getInverse(b.projectionMatrix));return this.applyProjection(a)}}(),transformDirection:function(a){var b=this.x,c=this.y,d=this.z;a=a.elements;this.x=a[0]*b+a[4]*c+a[8]*d;this.y=a[1]*b+a[5]*c+a[9]*d;this.z=a[2]*b+a[6]*c+a[10]*d;this.normalize();return this},divide:function(a){this.x/=a.x;this.y/=a.y;this.z/=a.z;return this},divideScalar:function(a){return this.multiplyScalar(1/a)},min:function(a){this.x=Math.min(this.x,a.x);this.y=Math.min(this.y,a.y);this.z=Math.min(this.z,a.z);return this},max:function(a){this.x=Math.max(this.x,a.x);this.y=Math.max(this.y,a.y);this.z=Math.max(this.z,a.z);return this},clamp:function(a,b){this.x=Math.max(a.x,Math.min(b.x,this.x));this.y=Math.max(a.y,Math.min(b.y,this.y));this.z=Math.max(a.z,Math.min(b.z,this.z));return this},clampScalar:function(){var a,b;return function(c,d){void 0===a&&(a=new THREE.Vector3,b=new THREE.Vector3);a.set(c,c,c);b.set(d,d,d);return this.clamp(a,b)}}(),clampLength:function(a,b){var c=this.length();this.multiplyScalar(Math.max(a,Math.min(b,c))/c);return this},floor:function(){this.x=Math.floor(this.x);this.y=Math.floor(this.y);this.z=Math.floor(this.z);return this},ceil:function(){this.x=Math.ceil(this.x);this.y=Math.ceil(this.y);this.z=Math.ceil(this.z);return this},round:function(){this.x=Math.round(this.x);this.y=Math.round(this.y);this.z=Math.round(this.z);return this},roundToZero:function(){this.x=0>this.x?Math.ceil(this.x):Math.floor(this.x);this.y=0>this.y?Math.ceil(this.y):Math.floor(this.y);this.z=0>this.z?Math.ceil(this.z):Math.floor(this.z);return this},negate:function(){this.x=-this.x;this.y=-this.y;this.z=-this.z;return this},dot:function(a){return this.x*a.x+this.y*a.y+this.z*a.z},lengthSq:function(){return this.x*this.x+this.y*this.y+this.z*this.z},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)},lengthManhattan:function(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)},normalize:function(){return this.divideScalar(this.length())},setLength:function(a){return this.multiplyScalar(a/this.length())},lerp:function(a,b){this.x+=(a.x-this.x)*b;this.y+=(a.y-this.y)*b;this.z+=(a.z-this.z)*b;return this},lerpVectors:function(a,b,c){this.subVectors(b,a).multiplyScalar(c).add(a);return this},cross:function(a,b){if(void 0!==b)return console.warn("THREE.Vector3: .cross() now only accepts one argument. Use .crossVectors( a, b ) instead."),this.crossVectors(a,b);var c=this.x,d=this.y,e=this.z;this.x=d*a.z-e*a.y;this.y=e*a.x-c*a.z;this.z=c*a.y-d*a.x;return this},crossVectors:function(a,b){var c=a.x,d=a.y,e=a.z,f=b.x,g=b.y,h=b.z;this.x=d*h-e*g;this.y=e*f-c*h;this.z=c*g-d*f;return this},projectOnVector:function(){var a,b;return function(c){void 0===a&&(a=new THREE.Vector3);a.copy(c).normalize();b=this.dot(a);return this.copy(a).multiplyScalar(b)}}(),projectOnPlane:function(){var a;return function(b){void 0===a&&(a=new THREE.Vector3);a.copy(this).projectOnVector(b);return this.sub(a)}}(),reflect:function(){var a;return function(b){void 0===a&&(a=new THREE.Vector3);return this.sub(a.copy(b).multiplyScalar(2*this.dot(b)))}}(),angleTo:function(a){a=this.dot(a)/Math.sqrt(this.lengthSq()*a.lengthSq());return Math.acos(THREE.Math.clamp(a,-1,1))},distanceTo:function(a){return Math.sqrt(this.distanceToSquared(a))},distanceToSquared:function(a){var b=this.x-a.x,c=this.y-a.y;a=this.z-a.z;return b*b+c*c+a*a},setFromSpherical:function(a){var b=Math.sin(a.phi)*a.radius;this.x=b*Math.sin(a.theta);this.y=Math.cos(a.phi)*a.radius;this.z=b*Math.cos(a.theta);return this},setFromMatrixPosition:function(a){return this.setFromMatrixColumn(a,3)},setFromMatrixScale:function(a){var b=this.setFromMatrixColumn(a,0).length(),c=this.setFromMatrixColumn(a,1).length();a=this.setFromMatrixColumn(a,2).length();this.x=b;this.y=c;this.z=a;return this},setFromMatrixColumn:function(a,b){"number"===typeof a&&(console.warn("THREE.Vector3: setFromMatrixColumn now expects ( matrix, index )."),b=a=b);return this.fromArray(a.elements,4*b)},equals:function(a){return a.x===this.x&&a.y===this.y&&a.z===this.z},fromArray:function(a,b){void 0===b&&(b=0);this.x=a[b];this.y=a[b+1];this.z=a[b+2];return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);a[b]=this.x;a[b+1]=this.y;a[b+2]=this.z;return a},fromAttribute:function(a,b,c){void 0===c&&(c=0);b=b*a.itemSize+c;this.x=a.array[b];this.y=a.array[b+1];this.z=a.array[b+2];return this}};THREE.Vector4=function(a,b,c,d){this.x=a||0;this.y=b||0;this.z=c||0;this.w=void 0!==d?d:1};THREE.Vector4.prototype={constructor:THREE.Vector4,set:function(a,b,c,d){this.x=a;this.y=b;this.z=c;this.w=d;return this},setScalar:function(a){this.w=this.z=this.y=this.x=a;return this},setX:function(a){this.x=a;return this},setY:function(a){this.y=a;return this},setZ:function(a){this.z=a;return this},setW:function(a){this.w=a;return this},setComponent:function(a,b){switch(a){case 0:this.x=b;break;case 1:this.y=b;break;case 2:this.z=b;break;case 3:this.w=b;break;default:throw Error("index is out of range: "+a)}},getComponent:function(a){switch(a){case 0:return this.x;case 1:return this.y;case 2:return this.z;case 3:return this.w;default:throw Error("index is out of range: "+a)}},clone:function(){return new this.constructor(this.x,this.y,this.z,this.w)},copy:function(a){this.x=a.x;this.y=a.y;this.z=a.z;this.w=void 0!==a.w?a.w:1;return this},add:function(a,b){if(void 0!==b)return console.warn("THREE.Vector4: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(a,b);this.x+=a.x;this.y+=a.y;this.z+=a.z;this.w+=a.w;return this},addScalar:function(a){this.x+=a;this.y+=a;this.z+=a;this.w+=a;return this},addVectors:function(a,b){this.x=a.x+b.x;this.y=a.y+b.y;this.z=a.z+b.z;this.w=a.w+b.w;return this},addScaledVector:function(a,b){this.x+=a.x*b;this.y+=a.y*b;this.z+=a.z*b;this.w+=a.w*b;return this},sub:function(a,b){if(void 0!==b)return console.warn("THREE.Vector4: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(a,b);this.x-=a.x;this.y-=a.y;this.z-=a.z;this.w-=a.w;return this},subScalar:function(a){this.x-=a;this.y-=a;this.z-=a;this.w-=a;return this},subVectors:function(a,b){this.x=a.x-b.x;this.y=a.y-b.y;this.z=a.z-b.z;this.w=a.w-b.w;return this},multiplyScalar:function(a){isFinite(a)?(this.x*=a,this.y*=a,this.z*=a,this.w*=a):this.w=this.z=this.y=this.x=0;return this},applyMatrix4:function(a){var b=this.x,c=this.y,d=this.z,e=this.w;a=a.elements;this.x=a[0]*b+a[4]*c+a[8]*d+a[12]*e;this.y=a[1]*b+a[5]*c+a[9]*d+a[13]*e;this.z=a[2]*b+a[6]*c+a[10]*d+a[14]*e;this.w=a[3]*b+a[7]*c+a[11]*d+a[15]*e;return this},divideScalar:function(a){return this.multiplyScalar(1/a)},setAxisAngleFromQuaternion:function(a){this.w=2*Math.acos(a.w);var b=Math.sqrt(1-a.w*a.w);1e-4>b?(this.x=1,this.z=this.y=0):(this.x=a.x/b,this.y=a.y/b,this.z=a.z/b);return this},setAxisAngleFromRotationMatrix:function(a){var b,c,d;a=a.elements;var e=a[0];d=a[4];var f=a[8],g=a[1],h=a[5],k=a[9];c=a[2];b=a[6];var l=a[10];if(.01>Math.abs(d-g)&&.01>Math.abs(f-c)&&.01>Math.abs(k-b)){if(.1>Math.abs(d+g)&&.1>Math.abs(f+c)&&.1>Math.abs(k+b)&&.1>Math.abs(e+h+l-3))return this.set(1,0,0,0),this;a=Math.PI;e=(e+1)/2;h=(h+1)/2;l=(l+1)/2;d=(d+g)/4;f=(f+c)/4;k=(k+b)/4;e>h&&e>l?.01>e?(b=0,d=c=.707106781):(b=Math.sqrt(e),c=d/b,d=f/b):h>l?.01>h?(b=.707106781,c=0,d=.707106781):(c=Math.sqrt(h),b=d/c,d=k/c):.01>l?(c=b=.707106781,d=0):(d=Math.sqrt(l),b=f/d,c=k/d);this.set(b,c,d,a);return this}a=Math.sqrt((b-k)*(b-k)+(f-c)*(f-c)+(g-d)*(g-d));.001>Math.abs(a)&&(a=1);this.x=(b-k)/a;this.y=(f-c)/a;this.z=(g-d)/a;this.w=Math.acos((e+h+l-1)/2);return this},min:function(a){this.x=Math.min(this.x,a.x);this.y=Math.min(this.y,a.y);this.z=Math.min(this.z,a.z);this.w=Math.min(this.w,a.w);return this},max:function(a){this.x=Math.max(this.x,a.x);this.y=Math.max(this.y,a.y);this.z=Math.max(this.z,a.z);this.w=Math.max(this.w,a.w);return this},clamp:function(a,b){this.x=Math.max(a.x,Math.min(b.x,this.x));this.y=Math.max(a.y,Math.min(b.y,this.y));this.z=Math.max(a.z,Math.min(b.z,this.z));this.w=Math.max(a.w,Math.min(b.w,this.w));return this},clampScalar:function(){var a,b;return function(c,d){void 0===a&&(a=new THREE.Vector4,b=new THREE.Vector4);a.set(c,c,c,c);b.set(d,d,d,d);return this.clamp(a,b)}}(),floor:function(){this.x=Math.floor(this.x);this.y=Math.floor(this.y);this.z=Math.floor(this.z);this.w=Math.floor(this.w);return this},ceil:function(){this.x=Math.ceil(this.x);this.y=Math.ceil(this.y);this.z=Math.ceil(this.z);this.w=Math.ceil(this.w);return this},round:function(){this.x=Math.round(this.x);this.y=Math.round(this.y);this.z=Math.round(this.z);this.w=Math.round(this.w);return this},roundToZero:function(){this.x=0>this.x?Math.ceil(this.x):Math.floor(this.x);this.y=0>this.y?Math.ceil(this.y):Math.floor(this.y);this.z=0>this.z?Math.ceil(this.z):Math.floor(this.z);this.w=0>this.w?Math.ceil(this.w):Math.floor(this.w);return this},negate:function(){this.x=-this.x;this.y=-this.y;this.z=-this.z;this.w=-this.w;return this},dot:function(a){return this.x*a.x+this.y*a.y+this.z*a.z+this.w*a.w},lengthSq:function(){return this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w)},lengthManhattan:function(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)+Math.abs(this.w)},normalize:function(){return this.divideScalar(this.length())},setLength:function(a){return this.multiplyScalar(a/this.length())},lerp:function(a,b){this.x+=(a.x-this.x)*b;this.y+=(a.y-this.y)*b;this.z+=(a.z-this.z)*b;this.w+=(a.w-this.w)*b;return this},lerpVectors:function(a,b,c){this.subVectors(b,a).multiplyScalar(c).add(a);return this},equals:function(a){return a.x===this.x&&a.y===this.y&&a.z===this.z&&a.w===this.w},fromArray:function(a,b){void 0===b&&(b=0);this.x=a[b];this.y=a[b+1];this.z=a[b+2];this.w=a[b+3];return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);a[b]=this.x;a[b+1]=this.y;a[b+2]=this.z;a[b+3]=this.w;return a},fromAttribute:function(a,b,c){void 0===c&&(c=0);b=b*a.itemSize+c;this.x=a.array[b];this.y=a.array[b+1];this.z=a.array[b+2];this.w=a.array[b+3];return this}};THREE.Euler=function(a,b,c,d){this._x=a||0;this._y=b||0;this._z=c||0;this._order=d||THREE.Euler.DefaultOrder};THREE.Euler.RotationOrders="XYZ YZX ZXY XZY YXZ ZYX".split(" ");THREE.Euler.DefaultOrder="XYZ";THREE.Euler.prototype={constructor:THREE.Euler,get x(){return this._x},set x(a){this._x=a;this.onChangeCallback()},get y(){return this._y},set y(a){this._y=a;this.onChangeCallback()},get z(){return this._z},set z(a){this._z=a;this.onChangeCallback()},get order(){return this._order},set order(a){this._order=a;this.onChangeCallback()},set:function(a,b,c,d){this._x=a;this._y=b;this._z=c;this._order=d||this._order;this.onChangeCallback();return this},clone:function(){return new this.constructor(this._x,this._y,this._z,this._order)},copy:function(a){this._x=a._x;this._y=a._y;this._z=a._z;this._order=a._order;this.onChangeCallback();return this},setFromRotationMatrix:function(a,b,c){var d=THREE.Math.clamp,e=a.elements;a=e[0];var f=e[4],g=e[8],h=e[1],k=e[5],l=e[9],p=e[2],n=e[6],e=e[10];b=b||this._order;"XYZ"===b?(this._y=Math.asin(d(g,-1,1)),.99999>Math.abs(g)?(this._x=Math.atan2(-l,e),this._z=Math.atan2(-f,a)):(this._x=Math.atan2(n,k),this._z=0)):"YXZ"===b?(this._x=Math.asin(-d(l,-1,1)),.99999>Math.abs(l)?(this._y=Math.atan2(g,e),this._z=Math.atan2(h,k)):(this._y=Math.atan2(-p,a),this._z=0)):"ZXY"===b?(this._x=Math.asin(d(n,-1,1)),.99999>Math.abs(n)?(this._y=Math.atan2(-p,e),this._z=Math.atan2(-f,k)):(this._y=0,this._z=Math.atan2(h,a))):"ZYX"===b?(this._y=Math.asin(-d(p,-1,1)),.99999>Math.abs(p)?(this._x=Math.atan2(n,e),this._z=Math.atan2(h,a)):(this._x=0,this._z=Math.atan2(-f,k))):"YZX"===b?(this._z=Math.asin(d(h,-1,1)),.99999>Math.abs(h)?(this._x=Math.atan2(-l,k),this._y=Math.atan2(-p,a)):(this._x=0,this._y=Math.atan2(g,e))):"XZY"===b?(this._z=Math.asin(-d(f,-1,1)),.99999>Math.abs(f)?(this._x=Math.atan2(n,k),this._y=Math.atan2(g,a)):(this._x=Math.atan2(-l,e),this._y=0)):console.warn("THREE.Euler: .setFromRotationMatrix() given unsupported order: "+b);this._order=b;if(!1!==c)this.onChangeCallback();return this},setFromQuaternion:function(){var a;return function(b,c,d){void 0===a&&(a=new THREE.Matrix4);a.makeRotationFromQuaternion(b);this.setFromRotationMatrix(a,c,d);return this}}(),setFromVector3:function(a,b){return this.set(a.x,a.y,a.z,b||this._order)},reorder:function(){var a=new THREE.Quaternion;return function(b){a.setFromEuler(this);this.setFromQuaternion(a,b)}}(),equals:function(a){return a._x===this._x&&a._y===this._y&&a._z===this._z&&a._order===this._order},fromArray:function(a){this._x=a[0];this._y=a[1];this._z=a[2];void 0!==a[3]&&(this._order=a[3]);this.onChangeCallback();return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);a[b]=this._x;a[b+1]=this._y;a[b+2]=this._z;a[b+3]=this._order;return a},toVector3:function(a){return a?a.set(this._x,this._y,this._z):new THREE.Vector3(this._x,this._y,this._z)},onChange:function(a){this.onChangeCallback=a;return this},onChangeCallback:function(){}};THREE.Line3=function(a,b){this.start=void 0!==a?a:new THREE.Vector3;this.end=void 0!==b?b:new THREE.Vector3};THREE.Line3.prototype={constructor:THREE.Line3,set:function(a,b){this.start.copy(a);this.end.copy(b);return this},clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.start.copy(a.start);this.end.copy(a.end);return this},center:function(a){return(a||new THREE.Vector3).addVectors(this.start,this.end).multiplyScalar(.5)},delta:function(a){return(a||new THREE.Vector3).subVectors(this.end,this.start)},distanceSq:function(){return this.start.distanceToSquared(this.end)},distance:function(){return this.start.distanceTo(this.end)},at:function(a,b){var c=b||new THREE.Vector3;return this.delta(c).multiplyScalar(a).add(this.start)},closestPointToPointParameter:function(){var a=new THREE.Vector3,b=new THREE.Vector3;return function(c,d){a.subVectors(c,this.start);b.subVectors(this.end,this.start);var e=b.dot(b),e=b.dot(a)/e;d&&(e=THREE.Math.clamp(e,0,1));return e}}(),closestPointToPoint:function(a,b,c){a=this.closestPointToPointParameter(a,b);c=c||new THREE.Vector3;return this.delta(c).multiplyScalar(a).add(this.start)},applyMatrix4:function(a){this.start.applyMatrix4(a);this.end.applyMatrix4(a);return this},equals:function(a){return a.start.equals(this.start)&&a.end.equals(this.end)}};THREE.Box2=function(a,b){this.min=void 0!==a?a:new THREE.Vector2(Infinity,Infinity);this.max=void 0!==b?b:new THREE.Vector2(-Infinity,-Infinity)};THREE.Box2.prototype={constructor:THREE.Box2,set:function(a,b){this.min.copy(a);this.max.copy(b);return this},setFromPoints:function(a){this.makeEmpty();for(var b=0,c=a.length;bthis.max.x||a.ythis.max.y?!1:!0},containsBox:function(a){return this.min.x<=a.min.x&&a.max.x<=this.max.x&&this.min.y<=a.min.y&&a.max.y<=this.max.y?!0:!1},getParameter:function(a,b){return(b||new THREE.Vector2).set((a.x-this.min.x)/(this.max.x-this.min.x),(a.y-this.min.y)/(this.max.y-this.min.y))},intersectsBox:function(a){return a.max.xthis.max.x||a.max.ythis.max.y?!1:!0},clampPoint:function(a,b){return(b||new THREE.Vector2).copy(a).clamp(this.min,this.max)},distanceToPoint:function(){var a=new THREE.Vector2;return function(b){return a.copy(b).clamp(this.min,this.max).sub(b).length()}}(),intersect:function(a){this.min.max(a.min);this.max.min(a.max);return this},union:function(a){this.min.min(a.min);this.max.max(a.max);return this},translate:function(a){this.min.add(a);this.max.add(a);return this},equals:function(a){return a.min.equals(this.min)&&a.max.equals(this.max)}};THREE.Box3=function(a,b){this.min=void 0!==a?a:new THREE.Vector3(Infinity,Infinity,Infinity);this.max=void 0!==b?b:new THREE.Vector3(-Infinity,-Infinity,-Infinity)};THREE.Box3.prototype={constructor:THREE.Box3,set:function(a,b){this.min.copy(a);this.max.copy(b);return this},setFromArray:function(a){this.makeEmpty();for(var b=Infinity,c=Infinity,d=Infinity,e=-Infinity,f=-Infinity,g=-Infinity,h=0,k=a.length;he&&(e=l);p>f&&(f=p);n>g&&(g=n)}this.min.set(b,c,d);this.max.set(e,f,g)},setFromPoints:function(a){this.makeEmpty();for(var b=0,c=a.length;bthis.max.x||a.ythis.max.y||a.zthis.max.z?!1:!0},containsBox:function(a){return this.min.x<=a.min.x&&a.max.x<=this.max.x&&this.min.y<=a.min.y&&a.max.y<=this.max.y&&this.min.z<=a.min.z&&a.max.z<=this.max.z?!0:!1},getParameter:function(a,b){return(b||new THREE.Vector3).set((a.x-this.min.x)/(this.max.x-this.min.x),(a.y-this.min.y)/(this.max.y-this.min.y),(a.z-this.min.z)/(this.max.z-this.min.z))},intersectsBox:function(a){return a.max.xthis.max.x||a.max.ythis.max.y||a.max.zthis.max.z?!1:!0},intersectsSphere:function(){var a;return function(b){void 0===a&&(a=new THREE.Vector3);this.clampPoint(b.center,a);return a.distanceToSquared(b.center)<=b.radius*b.radius}}(),intersectsPlane:function(a){var b,c;0=a.constant},clampPoint:function(a,b){return(b||new THREE.Vector3).copy(a).clamp(this.min,this.max)},distanceToPoint:function(){var a=new THREE.Vector3;return function(b){return a.copy(b).clamp(this.min,this.max).sub(b).length()}}(),getBoundingSphere:function(){var a=new THREE.Vector3;return function(b){b=b||new THREE.Sphere;b.center=this.center();b.radius=.5*this.size(a).length();return b}}(),intersect:function(a){this.min.max(a.min);this.max.min(a.max);return this},union:function(a){this.min.min(a.min);this.max.max(a.max);return this},applyMatrix4:function(){var a=[new THREE.Vector3,new THREE.Vector3,new THREE.Vector3,new THREE.Vector3,new THREE.Vector3,new THREE.Vector3,new THREE.Vector3,new THREE.Vector3];return function(b){a[0].set(this.min.x,this.min.y,this.min.z).applyMatrix4(b);a[1].set(this.min.x,this.min.y,this.max.z).applyMatrix4(b);a[2].set(this.min.x,this.max.y,this.min.z).applyMatrix4(b);a[3].set(this.min.x,this.max.y,this.max.z).applyMatrix4(b);a[4].set(this.max.x,this.min.y,this.min.z).applyMatrix4(b);a[5].set(this.max.x,this.min.y,this.max.z).applyMatrix4(b);a[6].set(this.max.x,this.max.y,this.min.z).applyMatrix4(b);a[7].set(this.max.x,this.max.y,this.max.z).applyMatrix4(b);this.makeEmpty();this.setFromPoints(a);return this}}(),translate:function(a){this.min.add(a);this.max.add(a);return this},equals:function(a){return a.min.equals(this.min)&&a.max.equals(this.max)}};THREE.Matrix3=function(){this.elements=new Float32Array([1,0,0,0,1,0,0,0,1]);0this.determinant()&&(g=-g);c.x=f[12];c.y=f[13];c.z=f[14];b.elements.set(this.elements);c=1/g;var f=1/h,l=1/k;b.elements[0]*=c;b.elements[1]*=c;b.elements[2]*=c;b.elements[4]*=f;b.elements[5]*=f;b.elements[6]*=f;b.elements[8]*=l;b.elements[9]*=l;b.elements[10]*=l;d.setFromRotationMatrix(b);e.x=g;e.y=h;e.z=k;return this}}(),makeFrustum:function(a,b,c,d,e,f){var g=this.elements;g[0]=2*e/(b-a);g[4]=0;g[8]=(b+a)/(b-a);g[12]=0;g[1]=0;g[5]=2*e/(d-c);g[9]=(d+c)/(d-c);g[13]=0;g[2]=0;g[6]=0;g[10]=-(f+e)/(f-e);g[14]=-2*f*e/(f-e);g[3]=0;g[7]=0;g[11]=-1;g[15]=0;return this},makePerspective:function(a,b,c,d){a=c*Math.tan(THREE.Math.degToRad(.5*a));var e=-a;return this.makeFrustum(e*b,a*b,e,a,c,d)},makeOrthographic:function(a,b,c,d,e,f){var g=this.elements,h=1/(b-a),k=1/(c-d),l=1/(f-e);g[0]=2*h;g[4]=0;g[8]=0;g[12]=-((b+a)*h);g[1]=0;g[5]=2*k;g[9]=0;g[13]=-((c+d)*k);g[2]=0;g[6]=0;g[10]=-2*l;g[14]=-((f+e)*l);g[3]=0;g[7]=0;g[11]=0;g[15]=1;return this},equals:function(a){var b=this.elements;a=a.elements;for(var c=0;16>c;c++)if(b[c]!==a[c])return!1;return!0},fromArray:function(a){this.elements.set(a);return this},toArray:function(){var a=this.elements;return[a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8],a[9],a[10],a[11],a[12],a[13],a[14],a[15]]}};THREE.Ray=function(a,b){this.origin=void 0!==a?a:new THREE.Vector3;this.direction=void 0!==b?b:new THREE.Vector3};THREE.Ray.prototype={constructor:THREE.Ray,set:function(a,b){this.origin.copy(a);this.direction.copy(b);return this},clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.origin.copy(a.origin);this.direction.copy(a.direction);return this},at:function(a,b){return(b||new THREE.Vector3).copy(this.direction).multiplyScalar(a).add(this.origin)},lookAt:function(a){this.direction.copy(a).sub(this.origin).normalize()},recast:function(){var a=new THREE.Vector3;return function(b){this.origin.copy(this.at(b,a));return this}}(),closestPointToPoint:function(a,b){var c=b||new THREE.Vector3;c.subVectors(a,this.origin);var d=c.dot(this.direction);return 0>d?c.copy(this.origin):c.copy(this.direction).multiplyScalar(d).add(this.origin)},distanceToPoint:function(a){return Math.sqrt(this.distanceSqToPoint(a))},distanceSqToPoint:function(){var a=new THREE.Vector3;return function(b){var c=a.subVectors(b,this.origin).dot(this.direction);if(0>c)return this.origin.distanceToSquared(b);a.copy(this.direction).multiplyScalar(c).add(this.origin);return a.distanceToSquared(b)}}(),distanceSqToSegment:function(){var a=new THREE.Vector3,b=new THREE.Vector3,c=new THREE.Vector3;return function(d,e,f,g){a.copy(d).add(e).multiplyScalar(.5);b.copy(e).sub(d).normalize();c.copy(this.origin).sub(a);var h=.5*d.distanceTo(e),k=-this.direction.dot(b),l=c.dot(this.direction),p=-c.dot(b),n=c.lengthSq(),m=Math.abs(1-k*k),q;0=-q?e<=q?(h=1/m,d*=h,e*=h,k=d*(d+k*e+2*l)+e*(k*d+e+2*p)+n):(e=h,d=Math.max(0,-(k*e+l)),k=-d*d+e*(e+2*p)+n):(e=-h,d=Math.max(0,-(k*e+l)),k=-d*d+e*(e+2*p)+n):e<=-q?(d=Math.max(0,-(-k*h+l)),e=0f)return null;f=Math.sqrt(f-e);e=d-f;d+=f;return 0>e&&0>d?null:0>e?this.at(d,c):this.at(e,c)}}(),intersectsSphere:function(a){return this.distanceToPoint(a.center)<=a.radius},distanceToPlane:function(a){var b=a.normal.dot(this.direction);if(0===b)return 0===a.distanceToPoint(this.origin)?0:null;a=-(this.origin.dot(a.normal)+a.constant)/b;return 0<=a?a:null},intersectPlane:function(a,b){var c=this.distanceToPlane(a);return null===c?null:this.at(c,b)},intersectsPlane:function(a){var b=a.distanceToPoint(this.origin);return 0===b||0>a.normal.dot(this.direction)*b?!0:!1},intersectBox:function(a,b){var c,d,e,f,g;d=1/this.direction.x;f=1/this.direction.y;g=1/this.direction.z;var h=this.origin;0<=d?(c=(a.min.x-h.x)*d,d*=a.max.x-h.x):(c=(a.max.x-h.x)*d,d*=a.min.x-h.x);0<=f?(e=(a.min.y-h.y)*f,f*=a.max.y-h.y):(e=(a.max.y-h.y)*f,f*=a.min.y-h.y);if(c>f||e>d)return null;if(e>c||c!==c)c=e;if(fg||e>d)return null;if(e>c||c!==c)c=e;if(gd?null:this.at(0<=c?c:d,b)},intersectsBox:function(){var a=new THREE.Vector3;return function(b){return null!==this.intersectBox(b,a)}}(),intersectTriangle:function(){var a=new THREE.Vector3,b=new THREE.Vector3,c=new THREE.Vector3,d=new THREE.Vector3;return function(e,f,g,h,k){b.subVectors(f,e);c.subVectors(g,e);d.crossVectors(b,c);f=this.direction.dot(d);if(0f)h=-1,f=-f;else return null;a.subVectors(this.origin,e);e=h*this.direction.dot(c.crossVectors(a,c));if(0>e)return null;g=h*this.direction.dot(b.cross(a));if(0>g||e+g>f)return null;e=-h*a.dot(d);return 0>e?null:this.at(e/f,k)}}(),applyMatrix4:function(a){this.direction.add(this.origin).applyMatrix4(a);this.origin.applyMatrix4(a);this.direction.sub(this.origin);this.direction.normalize();return this},equals:function(a){return a.origin.equals(this.origin)&&a.direction.equals(this.direction)}};THREE.Sphere=function(a,b){this.center=void 0!==a?a:new THREE.Vector3;this.radius=void 0!==b?b:0};THREE.Sphere.prototype={constructor:THREE.Sphere,set:function(a,b){this.center.copy(a);this.radius=b;return this},setFromPoints:function(){var a=new THREE.Box3;return function(b,c){var d=this.center;void 0!==c?d.copy(c):a.setFromPoints(b).center(d);for(var e=0,f=0,g=b.length;f=this.radius},containsPoint:function(a){return a.distanceToSquared(this.center)<=this.radius*this.radius},distanceToPoint:function(a){return a.distanceTo(this.center)-this.radius},intersectsSphere:function(a){var b=this.radius+a.radius;return a.center.distanceToSquared(this.center)<=b*b},intersectsBox:function(a){return a.intersectsSphere(this)},intersectsPlane:function(a){return Math.abs(this.center.dot(a.normal)-a.constant)<=this.radius},clampPoint:function(a,b){var c=this.center.distanceToSquared(a),d=b||new THREE.Vector3;d.copy(a);c>this.radius*this.radius&&(d.sub(this.center).normalize(),d.multiplyScalar(this.radius).add(this.center));return d},getBoundingBox:function(a){a=a||new THREE.Box3;a.set(this.center,this.center);a.expandByScalar(this.radius);return a},applyMatrix4:function(a){this.center.applyMatrix4(a);this.radius*=a.getMaxScaleOnAxis();return this},translate:function(a){this.center.add(a);return this},equals:function(a){return a.center.equals(this.center)&&a.radius===this.radius}};THREE.Frustum=function(a,b,c,d,e,f){this.planes=[void 0!==a?a:new THREE.Plane,void 0!==b?b:new THREE.Plane,void 0!==c?c:new THREE.Plane,void 0!==d?d:new THREE.Plane,void 0!==e?e:new THREE.Plane,void 0!==f?f:new THREE.Plane]};THREE.Frustum.prototype={constructor:THREE.Frustum,set:function(a,b,c,d,e,f){var g=this.planes;g[0].copy(a);g[1].copy(b);g[2].copy(c);g[3].copy(d);g[4].copy(e);g[5].copy(f);return this},clone:function(){return(new this.constructor).copy(this)},copy:function(a){for(var b=this.planes,c=0;6>c;c++)b[c].copy(a.planes[c]);return this},setFromMatrix:function(a){var b=this.planes,c=a.elements;a=c[0];var d=c[1],e=c[2],f=c[3],g=c[4],h=c[5],k=c[6],l=c[7],p=c[8],n=c[9],m=c[10],q=c[11],u=c[12],v=c[13],t=c[14],c=c[15];b[0].setComponents(f-a,l-g,q-p,c-u).normalize();b[1].setComponents(f+a,l+g,q+p,c+u).normalize();b[2].setComponents(f+d,l+h,q+n,c+v).normalize();b[3].setComponents(f-d,l-h,q-n,c-v).normalize();b[4].setComponents(f-e,l-k,q-m,c-t).normalize();b[5].setComponents(f+e,l+k,q+m,c+t).normalize();return this},intersectsObject:function(){var a=new THREE.Sphere;return function(b){var c=b.geometry;null===c.boundingSphere&&c.computeBoundingSphere();a.copy(c.boundingSphere);a.applyMatrix4(b.matrixWorld);return this.intersectsSphere(a)}}(),intersectsSphere:function(a){var b=this.planes,c=a.center;a=-a.radius;for(var d=0;6>d;d++)if(b[d].distanceToPoint(c)e;e++){var f=d[e];a.x=0g&&0>f)return!1}return!0}}(),containsPoint:function(a){for(var b=this.planes,c=0;6>c;c++)if(0>b[c].distanceToPoint(a))return!1;return!0}};THREE.Plane=function(a,b){this.normal=void 0!==a?a:new THREE.Vector3(1,0,0);this.constant=void 0!==b?b:0};THREE.Plane.prototype={constructor:THREE.Plane,set:function(a,b){this.normal.copy(a);this.constant=b;return this},setComponents:function(a,b,c,d){this.normal.set(a,b,c);this.constant=d;return this},setFromNormalAndCoplanarPoint:function(a,b){this.normal.copy(a);this.constant=-b.dot(this.normal);return this},setFromCoplanarPoints:function(){var a=new THREE.Vector3,b=new THREE.Vector3;return function(c,d,e){d=a.subVectors(e,d).cross(b.subVectors(c,d)).normalize();this.setFromNormalAndCoplanarPoint(d,c);return this}}(),clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.normal.copy(a.normal);this.constant=a.constant;return this},normalize:function(){var a=1/this.normal.length();this.normal.multiplyScalar(a);this.constant*=a;return this},negate:function(){this.constant*=-1;this.normal.negate();return this},distanceToPoint:function(a){return this.normal.dot(a)+this.constant},distanceToSphere:function(a){return this.distanceToPoint(a.center)-a.radius},projectPoint:function(a,b){return this.orthoPoint(a,b).sub(a).negate()},orthoPoint:function(a,b){var c=this.distanceToPoint(a);return(b||new THREE.Vector3).copy(this.normal).multiplyScalar(c)},intersectLine:function(){var a=new THREE.Vector3;return function(b,c){var d=c||new THREE.Vector3,e=b.delta(a),f=this.normal.dot(e);if(0===f){if(0===this.distanceToPoint(b.start))return d.copy(b.start)}else return f=-(b.start.dot(this.normal)+this.constant)/f,0>f||1b&&0a&&0e;e++)8===e||13===e||18===e||23===e?b[e]="-":14===e?b[e]="4":(2>=c&&(c=33554432+16777216*Math.random()|0),d=c&15,c>>=4,b[e]=a[19===e?d&3|8:d]);return b.join("")}}(),clamp:function(a,b,c){return Math.max(b,Math.min(c,a))},euclideanModulo:function(a,b){return(a%b+b)%b},mapLinear:function(a,b,c,d,e){return d+(a-b)*(e-d)/(c-b)},smoothstep:function(a,b,c){if(a<=b)return 0;if(a>=c)return 1;a=(a-b)/(c-b);return a*a*(3-2*a)},smootherstep:function(a,b,c){if(a<=b)return 0;if(a>=c)return 1;a=(a-b)/(c-b);return a*a*a*(a*(6*a-15)+10)},random16:function(){console.warn("THREE.Math.random16() has been deprecated. Use Math.random() instead.");return Math.random()},randInt:function(a,b){return a+Math.floor(Math.random()*(b-a+1))},randFloat:function(a,b){return a+Math.random()*(b-a)},randFloatSpread:function(a){return a*(.5-Math.random())},degToRad:function(){var a=Math.PI/180;return function(b){return b*a}}(),radToDeg:function(){var a=180/Math.PI;return function(b){return b*a}}(),isPowerOfTwo:function(a){return 0===(a&a-1)&&0!==a},nearestPowerOfTwo:function(a){return Math.pow(2,Math.round(Math.log(a)/Math.LN2))},nextPowerOfTwo:function(a){a--;a|=a>>1;a|=a>>2;a|=a>>4;a|=a>>8;a|=a>>16;a++;return a}};THREE.Spline=function(a){function b(a,b,c,d,e,f,g){a=.5*(c-a);d=.5*(d-b);return(2*(b-c)+a+d)*g+(-3*(b-c)-2*a-d)*f+a*e+b}this.points=a;var c=[],d={x:0,y:0,z:0},e,f,g,h,k,l,p,n,m;this.initFromArray=function(a){this.points=[];for(var b=0;bthis.points.length-2?this.points.length-1:f+1;c[3]=f>this.points.length-3?this.points.length-1:f+2;l=this.points[c[0]];p=this.points[c[1]];n=this.points[c[2]];m=this.points[c[3]];h=g*g;k=g*h;d.x=b(l.x,p.x,n.x,m.x,g,h,k);d.y=b(l.y,p.y,n.y,m.y,g,h,k);d.z=b(l.z,p.z,n.z,m.z,g,h,k);return d};this.getControlPointsArray=function(){var a,b,c=this.points.length,d=[];for(a=0;a=b.x+b.y}}();THREE.Triangle.prototype={constructor:THREE.Triangle,set:function(a,b,c){this.a.copy(a);this.b.copy(b);this.c.copy(c);return this},setFromPointsAndIndices:function(a,b,c,d){this.a.copy(a[b]);this.b.copy(a[c]);this.c.copy(a[d]);return this},clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.a.copy(a.a);this.b.copy(a.b);this.c.copy(a.c);return this},area:function(){var a=new THREE.Vector3,b=new THREE.Vector3;return function(){a.subVectors(this.c,this.b);b.subVectors(this.a,this.b);return.5*a.cross(b).length()}}(),midpoint:function(a){return(a||new THREE.Vector3).addVectors(this.a,this.b).add(this.c).multiplyScalar(1/3)},normal:function(a){return THREE.Triangle.normal(this.a,this.b,this.c,a)},plane:function(a){return(a||new THREE.Plane).setFromCoplanarPoints(this.a,this.b,this.c)},barycoordFromPoint:function(a,b){return THREE.Triangle.barycoordFromPoint(a,this.a,this.b,this.c,b)},containsPoint:function(a){return THREE.Triangle.containsPoint(a,this.a,this.b,this.c)},equals:function(a){return a.a.equals(this.a)&&a.b.equals(this.b)&&a.c.equals(this.c)}};THREE.Interpolant=function(a,b,c,d){this.parameterPositions=a;this._cachedIndex=0;this.resultBuffer=void 0!==d?d:new b.constructor(c);this.sampleValues=b;this.valueSize=c};THREE.Interpolant.prototype={constructor:THREE.Interpolant,evaluate:function(a){var b=this.parameterPositions,c=this._cachedIndex,d=b[c],e=b[c-1]; +Math.cosh = Math.cosh || function(x) { + return (Math.exp(x) + Math.exp(-x)) / 2; +} -a:{b:{c:{d:if(!(a=e)break a;else{f=b[1];a=e)break b}d=c;c=0}}for(;c>>1,ad;d++)if(e[d]===e[(d+1)%3]){a.push(f);break}for(f=a.length-1;0<=f;f--)for(e=a[f],this.faces.splice(e,1),c=0,g=this.faceVertexUvs.length;cthis.duration&&this.resetDuration();this.trim();this.optimize()};THREE.AnimationClip.prototype={constructor:THREE.AnimationClip,resetDuration:function(){for(var a=0,b=0,c=this.tracks.length;b!==c;++b)var d=this.tracks[b],a=Math.max(a,d.times[d.times.length-1]);this.duration=a},trim:function(){for(var a=0;ab||0===c)return;this._startTime=null;b*=c}b*=this._updateTimeScale(a);c=this._updateTime(b);a=this._updateWeight(a);if(0c.parameterPositions[1]&&(this.stopFading(),0===d&&(this.enabled=!1))}}return this._effectiveWeight=b},_updateTimeScale:function(a){var b=0;if(!this.paused){var b=this.timeScale,c=this._timeScaleInterpolant;if(null!==c){var d=c.evaluate(a)[0],b=b*d;a>c.parameterPositions[1]&&(this.stopWarping(),0===b?this.pause=!0:this.timeScale=b)}}return this._effectiveTimeScale=b},_updateTime:function(a){var b=this.time+a;if(0===a)return b;var c=this._clip.duration,d=this.loop,e=this._loopCount,f=!1;switch(d){case THREE.LoopOnce:-1===e&&(this.loopCount=0,this._setEndings(!0,!0,!1));if(b>=c)b=c;else if(0>b)b=0;else break;this.clampWhenFinished?this.pause=!0:this.enabled=!1;this._mixer.dispatchEvent({type:"finished",action:this,direction:0>a?-1:1});break;case THREE.LoopPingPong:f=!0;case THREE.LoopRepeat:-1===e&&(0=c||0>b){var g=Math.floor(b/c),b=b-c*g,e=e+Math.abs(g),h=this.repetitions-e;if(0>h){this.clampWhenFinished?this.paused=!0:this.enabled=!1;b=0a,this._setEndings(a,!a,f)):this._setEndings(!1,!1,f);this._loopCount=e;this._mixer.dispatchEvent({type:"loop",action:this,loopDelta:g})}if(d===THREE.LoopPingPong&&1===(e&1))return this.time=b,c-b}return this.time=b},_setEndings:function(a,b,c){var d=this._interpolantSettings;c?(d.endingStart=THREE.ZeroSlopeEnding,d.endingEnd=THREE.ZeroSlopeEnding):(d.endingStart=a?this.zeroSlopeAtStart?THREE.ZeroSlopeEnding:THREE.ZeroCurvatureEnding:THREE.WrapAroundEnding,d.endingEnd=b?this.zeroSlopeAtEnd?THREE.ZeroSlopeEnding:THREE.ZeroCurvatureEnding:THREE.WrapAroundEnding)},_scheduleFading:function(a,b,c){var d=this._mixer,e=d.time,f=this._weightInterpolant;null===f&&(this._weightInterpolant=f=d._lendControlInterpolant());d=f.parameterPositions;f=f.sampleValues;d[0]=e;f[0]=b;d[1]=e+a;f[1]=c;return this}};Object.assign(THREE.AnimationMixer.prototype,{_bindAction:function(a,b){var c=a._localRoot||this._root,d=a._clip.tracks,e=d.length,f=a._propertyBindings,g=a._interpolants,h=c.uuid,k=this._bindingsByRootAndName,l=k[h];void 0===l&&(l={},k[h]=l);for(k=0;k!==e;++k){var p=d[k],n=p.name,m=l[n];if(void 0===m){m=f[k];if(void 0!==m){null===m._cacheIndex&&(++m.referenceCount,this._addInactiveBinding(m,h,n));continue}m=new THREE.PropertyMixer(THREE.PropertyBinding.create(c,n,b&&b._propertyBindings[k].binding.parsedPath),p.ValueTypeName,p.getValueSize());++m.referenceCount;this._addInactiveBinding(m,h,n)}f[k]=m;g[k].resultBuffer=m.buffer}},_activateAction:function(a){if(!this._isActiveAction(a)){if(null===a._cacheIndex){var b=(a._localRoot||this._root).uuid,c=a._clip.name,d=this._actionsByClip[c];this._bindAction(a,d&&d.knownActions[0]);this._addInactiveAction(a,c,b)}b=a._propertyBindings;c=0;for(d=b.length;c!==d;++c){var e=b[c];0===e.useCount++&&(this._lendBinding(e),e.saveOriginalState())}this._lendAction(a)}},_deactivateAction:function(a){if(this._isActiveAction(a)){for(var b=a._propertyBindings,c=0,d=b.length;c!==d;++c){var e=b[c];0===--e.useCount&&(e.restoreOriginalState(),this._takeBackBinding(e))}this._takeBackAction(a)}},_initMemoryManager:function(){this._actions=[];this._nActiveActions=0;this._actionsByClip={};this._bindings=[];this._nActiveBindings=0;this._bindingsByRootAndName={};this._controlInterpolants=[];this._nActiveControlInterpolants=0;var a=this;this.stats={actions:{get total(){return a._actions.length},get inUse(){return a._nActiveActions}},bindings:{get total(){return a._bindings.length},get inUse(){return a._nActiveBindings}},controlInterpolants:{get total(){return a._controlInterpolants.length},get inUse(){return a._nActiveControlInterpolants}}}},_isActiveAction:function(a){a=a._cacheIndex;return null!==a&&a=c){var n=c++,m=b[n];d[m.uuid]=p;b[p]=m;d[l]=n;b[n]=k;k=0;for(l=f;k!==l;++k){var m=e[k],q=m[p];m[p]=m[n];m[n]=q}}}this.nCachedObjects_=c},uncache:function(a){for(var b=this._objects,c=b.length,d=this.nCachedObjects_,e=this._indicesByUUID,f=this._bindings,g=f.length,h=0,k=arguments.length;h!==k;++h){var l=arguments[h].uuid,p=e[l];if(void 0!==p)if(delete e[l],pb;)--f;++f;if(0!==e||f!==d)e>=f&&(f=Math.max(f,1),e=f-1),d=this.getValueSize(),this.times=THREE.AnimationUtils.arraySlice(c,e,f),this.values=THREE.AnimationUtils.arraySlice(this.values,e*d,f*d);return this},validate:function(){var a=!0,b=this.getValueSize();0!==b-Math.floor(b)&&(console.error("invalid value size in track",this),a=!1);var c=this.times,b=this.values,d=c.length;0===d&&(console.error("track is empty",this),a=!1);for(var e=null,f=0;f!==d;f++){var g=c[f];if("number"===typeof g&&isNaN(g)){console.error("time is not a valid number",this,f,g);a=!1;break}if(null!==e&&e>g){console.error("out of order keys",this,f,g,e);a=!1;break}e=g}if(void 0!==b&&THREE.AnimationUtils.isTypedArray(b))for(f=0,c=b.length;f!==c;++f)if(d=b[f],isNaN(d)){console.error("value is not a valid number",this,f,d);a=!1;break}return a},optimize:function(){for(var a=this.times,b=this.values,c=this.getValueSize(),d=1,e=1,f=a.length-1;e<=f;++e){var g=!1,h=a[e];if(h!==a[e+1]&&(1!==e||h!==h[0]))for(var k=e*c,l=k-c,p=k+c,h=0;h!==c;++h){var n=b[k+h];if(n!==b[l+h]||n!==b[p+h]){g=!0;break}}if(g){if(e!==d)for(a[d]=a[e],g=e*c,k=d*c,h=0;h!==c;++h)b[k+h]=b[g+h];++d}}d!==a.length&&(this.times=THREE.AnimationUtils.arraySlice(a,0,d),this.values=THREE.AnimationUtils.arraySlice(b,0,d*c));return this}};Object.assign(THREE.KeyframeTrack,{parse:function(a){if(void 0===a.type)throw Error("track type undefined, can not parse");var b=THREE.KeyframeTrack._getTrackTypeForValueTypeName(a.type);if(void 0===a.times){console.warn("legacy JSON format detected, converting");var c=[],d=[];THREE.AnimationUtils.flattenJSON(a.keys,c,d,"value");a.times=c;a.values=d}return void 0!==b.parse?b.parse(a):new b(a.name,a.times,a.values,a.interpolation)},toJSON:function(a){var b=a.constructor;if(void 0!==b.toJSON)b=b.toJSON(a);else{var b={name:a.name,times:THREE.AnimationUtils.convertArray(a.times,Array),values:THREE.AnimationUtils.convertArray(a.values,Array)},c=a.getInterpolation();c!==a.DefaultInterpolation&&(b.interpolation=c)}b.type=a.ValueTypeName;return b},_getTrackTypeForValueTypeName:function(a){switch(a.toLowerCase()){case"scalar":case"double":case"float":case"number":case"integer":return THREE.NumberKeyframeTrack;case"vector":case"vector2":case"vector3":case"vector4":return THREE.VectorKeyframeTrack;case"color":return THREE.ColorKeyframeTrack;case"quaternion":return THREE.QuaternionKeyframeTrack;case"bool":case"boolean":return THREE.BooleanKeyframeTrack;case"string":return THREE.StringKeyframeTrack}throw Error("Unsupported typeName: "+a)}});THREE.PropertyBinding=function(a,b,c){this.path=b;this.parsedPath=c||THREE.PropertyBinding.parseTrackName(b);this.node=THREE.PropertyBinding.findNode(a,this.parsedPath.nodeName)||a;this.rootNode=a};THREE.PropertyBinding.prototype={constructor:THREE.PropertyBinding,getValue:function(a,b){this.bind();this.getValue(a,b)},setValue:function(a,b){this.bind();this.setValue(a,b)},bind:function(){var a=this.node,b=this.parsedPath,c=b.objectName,d=b.propertyName,e=b.propertyIndex;a||(this.node=a=THREE.PropertyBinding.findNode(this.rootNode,b.nodeName)||this.rootNode);this.getValue=this._getValue_unavailable;this.setValue=this._setValue_unavailable;if(a){if(c){var f=b.objectIndex;switch(c){case"materials":if(!a.material){console.error(" can not bind to material as node does not have a material",this);return}if(!a.material.materials){console.error(" can not bind to material.materials as node.material does not have a materials array",this);return}a=a.material.materials;break;case"bones":if(!a.skeleton){console.error(" can not bind to bones as node does not have a skeleton",this);return}a=a.skeleton.bones;for(c=0;cd&&this._mixBufferRegion(c,a,3*b,1-d,b);for(var d=b,f=b+b;d!==f;++d)if(c[d]!==c[d+b]){e.setValue(c,a);break}},saveOriginalState:function(){var a=this.buffer,b=this.valueSize,c=3*b;this.binding.getValue(a,c);for(var d=b;d!==c;++d)a[d]=a[c+d%b];this.cumulativeWeight=0},restoreOriginalState:function(){this.binding.setValue(this.buffer,3*this.valueSize)},_select:function(a,b,c,d,e){if(.5<=d)for(d=0;d!==e;++d)a[b+d]=a[c+d]},_slerp:function(a,b,c,d,e){THREE.Quaternion.slerpFlat(a,b,a,b,a,c,d)},_lerp:function(a,b,c,d,e){for(var f=1-d,g=0;g!==e;++g){var h=b+g;a[h]=a[h]*f+a[c+g]*d}}};THREE.BooleanKeyframeTrack=function(a,b,c){THREE.KeyframeTrack.call(this,a,b,c)};THREE.BooleanKeyframeTrack.prototype=Object.assign(Object.create(THREE.KeyframeTrack.prototype),{constructor:THREE.BooleanKeyframeTrack,ValueTypeName:"bool",ValueBufferType:Array,DefaultInterpolation:THREE.IntepolateDiscrete,InterpolantFactoryMethodLinear:void 0,InterpolantFactoryMethodSmooth:void 0});THREE.NumberKeyframeTrack=function(a,b,c,d){THREE.KeyframeTrack.call(this,a,b,c,d)};THREE.NumberKeyframeTrack.prototype=Object.assign(Object.create(THREE.KeyframeTrack.prototype),{constructor:THREE.NumberKeyframeTrack,ValueTypeName:"number"});THREE.QuaternionKeyframeTrack=function(a,b,c,d){THREE.KeyframeTrack.call(this,a,b,c,d)};THREE.QuaternionKeyframeTrack.prototype=Object.assign(Object.create(THREE.KeyframeTrack.prototype),{constructor:THREE.QuaternionKeyframeTrack,ValueTypeName:"quaternion",DefaultInterpolation:THREE.InterpolateLinear,InterpolantFactoryMethodLinear:function(a){return new THREE.QuaternionLinearInterpolant(this.times,this.values,this.getValueSize(),a)},InterpolantFactoryMethodSmooth:void 0});THREE.StringKeyframeTrack=function(a,b,c,d){THREE.KeyframeTrack.call(this,a,b,c,d)};THREE.StringKeyframeTrack.prototype=Object.assign(Object.create(THREE.KeyframeTrack.prototype),{constructor:THREE.StringKeyframeTrack,ValueTypeName:"string",ValueBufferType:Array,DefaultInterpolation:THREE.IntepolateDiscrete,InterpolantFactoryMethodLinear:void 0,InterpolantFactoryMethodSmooth:void 0});THREE.VectorKeyframeTrack=function(a,b,c,d){THREE.KeyframeTrack.call(this,a,b,c,d)};THREE.VectorKeyframeTrack.prototype=Object.assign(Object.create(THREE.KeyframeTrack.prototype),{constructor:THREE.VectorKeyframeTrack,ValueTypeName:"vector"});THREE.Audio=function(a){THREE.Object3D.call(this);this.type="Audio";this.context=a.context;this.source=this.context.createBufferSource();this.source.onended=this.onEnded.bind(this);this.gain=this.context.createGain();this.gain.connect(a.getInput());this.autoplay=!1;this.startTime=0;this.playbackRate=1;this.isPlaying=!1;this.hasPlaybackControl=!0;this.sourceType="empty";this.filter=null};THREE.Audio.prototype=Object.create(THREE.Object3D.prototype);THREE.Audio.prototype.constructor=THREE.Audio;THREE.Audio.prototype.getOutput=function(){return this.gain};THREE.Audio.prototype.load=function(a){var b=new THREE.AudioBuffer(this.context);b.load(a);this.setBuffer(b);return this};THREE.Audio.prototype.setNodeSource=function(a){this.hasPlaybackControl=!1;this.sourceType="audioNode";this.source=a;this.connect();return this};THREE.Audio.prototype.setBuffer=function(a){var b=this;a.onReady(function(a){b.source.buffer=a;b.sourceType="buffer";b.autoplay&&b.play()});return this};THREE.Audio.prototype.play=function(){if(!0===this.isPlaying)console.warn("THREE.Audio: Audio is already playing.");else if(!1===this.hasPlaybackControl)console.warn("THREE.Audio: this Audio has no playback control.");else{var a=this.context.createBufferSource();a.buffer=this.source.buffer;a.loop=this.source.loop;a.onended=this.source.onended;a.start(0,this.startTime);a.playbackRate.value=this.playbackRate;this.isPlaying=!0;this.source=a;this.connect()}};THREE.Audio.prototype.pause=function(){!1===this.hasPlaybackControl?console.warn("THREE.Audio: this Audio has no playback control."):(this.source.stop(),this.startTime=this.context.currentTime)};THREE.Audio.prototype.stop=function(){!1===this.hasPlaybackControl?console.warn("THREE.Audio: this Audio has no playback control."):(this.source.stop(),this.startTime=0)};THREE.Audio.prototype.connect=function(){null!==this.filter?(this.source.connect(this.filter),this.filter.connect(this.getOutput())):this.source.connect(this.getOutput())};THREE.Audio.prototype.disconnect=function(){null!==this.filter?(this.source.disconnect(this.filter),this.filter.disconnect(this.getOutput())):this.source.disconnect(this.getOutput())};THREE.Audio.prototype.getFilter=function(){return this.filter};THREE.Audio.prototype.setFilter=function(a){void 0===a&&(a=null);!0===this.isPlaying?(this.disconnect(),this.filter=a,this.connect()):this.filter=a};THREE.Audio.prototype.setPlaybackRate=function(a){!1===this.hasPlaybackControl?console.warn("THREE.Audio: this Audio has no playback control."):(this.playbackRate=a,!0===this.isPlaying&&(this.source.playbackRate.value=this.playbackRate))};THREE.Audio.prototype.getPlaybackRate=function(){return this.playbackRate};THREE.Audio.prototype.onEnded=function(){this.isPlaying=!1};THREE.Audio.prototype.setLoop=function(a){!1===this.hasPlaybackControl?console.warn("THREE.Audio: this Audio has no playback control."):this.source.loop=a};THREE.Audio.prototype.getLoop=function(){return!1===this.hasPlaybackControl?(console.warn("THREE.Audio: this Audio has no playback control."),!1):this.source.loop};THREE.Audio.prototype.setVolume=function(a){this.gain.gain.value=a};THREE.Audio.prototype.getVolume=function(){return this.gain.gain.value};THREE.AudioAnalyser=function(a,b){this.analyser=a.context.createAnalyser();this.analyser.fftSize=void 0!==b?b:2048;this.data=new Uint8Array(this.analyser.frequencyBinCount);a.getOutput().connect(this.analyser)};THREE.AudioAnalyser.prototype={constructor:THREE.AudioAnalyser,getData:function(){this.analyser.getByteFrequencyData(this.data);return this.data}};THREE.AudioBuffer=function(a){this.context=a;this.ready=!1;this.readyCallbacks=[]};THREE.AudioBuffer.prototype.load=function(a){var b=this,c=new XMLHttpRequest;c.open("GET",a,!0);c.responseType="arraybuffer";c.onload=function(a){b.context.decodeAudioData(this.response,function(a){b.buffer=a;b.ready=!0;for(a=0;ak.opacity&&(k.transparent=!0);c.setTextures(h);return c.parse(k)}}()};THREE.Loader.Handlers={handlers:[],add:function(a,b){this.handlers.push(a,b)},get:function(a){for(var b=this.handlers,c=0,d=b.length;cg;g++)m=w[k++],s=t[2*m],m=t[2*m+1],s=new THREE.Vector2(s,m),2!==g&&c.faceVertexUvs[d][h].push(s),0!==g&&c.faceVertexUvs[d][h+1].push(s);n&&(n=3*w[k++],q.normal.set(E[n++],E[n++],E[n]),v.normal.copy(q.normal));if(u)for(d=0;4>d;d++)n=3*w[k++],u=new THREE.Vector3(E[n++],E[n++],E[n]),2!==d&&q.vertexNormals.push(u),0!==d&&v.vertexNormals.push(u);p&&(p=w[k++],p=x[p],q.color.setHex(p),v.color.setHex(p));if(b)for(d=0;4>d;d++)p=w[k++],p=x[p],2!==d&&q.vertexColors.push(new THREE.Color(p)),0!==d&&v.vertexColors.push(new THREE.Color(p));c.faces.push(q);c.faces.push(v)}else{q=new THREE.Face3;q.a=w[k++];q.b=w[k++];q.c=w[k++];h&&(h=w[k++],q.materialIndex=h);h=c.faces.length;if(d)for(d=0;dg;g++)m=w[k++],s=t[2*m],m=t[2*m+1],s=new THREE.Vector2(s,m),c.faceVertexUvs[d][h].push(s);n&&(n=3*w[k++],q.normal.set(E[n++],E[n++],E[n]));if(u)for(d=0;3>d;d++)n=3*w[k++],u=new THREE.Vector3(E[n++],E[n++],E[n]),q.vertexNormals.push(u);p&&(p=w[k++],q.color.setHex(x[p]));if(b)for(d=0;3>d;d++)p=w[k++],q.vertexColors.push(new THREE.Color(x[p]));c.faces.push(q)}})(d);(function(){var b=void 0!==a.influencesPerVertex?a.influencesPerVertex:2;if(a.skinWeights)for(var d=0,g=a.skinWeights.length;dthis.opacity&&(d.opacity=this.opacity);!0===this.transparent&&(d.transparent=this.transparent);0a.x||1a.x?0:1;break;case THREE.MirroredRepeatWrapping:1===Math.abs(Math.floor(a.x)%2)?a.x=Math.ceil(a.x)-a.x:a.x-=Math.floor(a.x)}if(0>a.y||1a.y?0:1;break;case THREE.MirroredRepeatWrapping:1===Math.abs(Math.floor(a.y)%2)?a.y=Math.ceil(a.y)-a.y:a.y-=Math.floor(a.y)}this.flipY&&(a.y=1-a.y)}}};THREE.EventDispatcher.prototype.apply(THREE.Texture.prototype);THREE.TextureIdCount=0;THREE.CanvasTexture=function(a,b,c,d,e,f,g,h,k){THREE.Texture.call(this,a,b,c,d,e,f,g,h,k);this.needsUpdate=!0};THREE.CanvasTexture.prototype=Object.create(THREE.Texture.prototype);THREE.CanvasTexture.prototype.constructor=THREE.CanvasTexture;THREE.CubeTexture=function(a,b,c,d,e,f,g,h,k){a=void 0!==a?a:[];b=void 0!==b?b:THREE.CubeReflectionMapping;THREE.Texture.call(this,a,b,c,d,e,f,g,h,k);this.flipY=!1};THREE.CubeTexture.prototype=Object.create(THREE.Texture.prototype);THREE.CubeTexture.prototype.constructor=THREE.CubeTexture;Object.defineProperty(THREE.CubeTexture.prototype,"images",{get:function(){return this.image},set:function(a){this.image=a}});THREE.CompressedTexture=function(a,b,c,d,e,f,g,h,k,l,p){THREE.Texture.call(this,null,f,g,h,k,l,d,e,p);this.image={width:b,height:c};this.mipmaps=a;this.generateMipmaps=this.flipY=!1};THREE.CompressedTexture.prototype=Object.create(THREE.Texture.prototype);THREE.CompressedTexture.prototype.constructor=THREE.CompressedTexture;THREE.DataTexture=function(a,b,c,d,e,f,g,h,k,l,p){THREE.Texture.call(this,null,f,g,h,k,l,d,e,p);this.image={data:a,width:b,height:c};this.magFilter=void 0!==k?k:THREE.NearestFilter;this.minFilter=void 0!==l?l:THREE.NearestFilter;this.generateMipmaps=this.flipY=!1};THREE.DataTexture.prototype=Object.create(THREE.Texture.prototype);THREE.DataTexture.prototype.constructor=THREE.DataTexture;THREE.VideoTexture=function(a,b,c,d,e,f,g,h,k){function l(){requestAnimationFrame(l);a.readyState===a.HAVE_ENOUGH_DATA&&(p.needsUpdate=!0)}THREE.Texture.call(this,a,b,c,d,e,f,g,h,k);this.generateMipmaps=!1;var p=this;l()};THREE.VideoTexture.prototype=Object.create(THREE.Texture.prototype);THREE.VideoTexture.prototype.constructor=THREE.VideoTexture;THREE.Group=function(){THREE.Object3D.call(this);this.type="Group"};THREE.Group.prototype=Object.create(THREE.Object3D.prototype);THREE.Group.prototype.constructor=THREE.Group;THREE.Points=function(a,b){THREE.Object3D.call(this);this.type="Points";this.geometry=void 0!==a?a:new THREE.Geometry;this.material=void 0!==b?b:new THREE.PointsMaterial({color:16777215*Math.random()})};THREE.Points.prototype=Object.create(THREE.Object3D.prototype);THREE.Points.prototype.constructor=THREE.Points;THREE.Points.prototype.raycast=function(){var a=new THREE.Matrix4,b=new THREE.Ray,c=new THREE.Sphere;return function(d,e){function f(a,c){var f=b.distanceSqToPoint(a);if(fd.far||e.push({distance:l,distanceToRay:Math.sqrt(f),point:h.clone(),index:c,face:null,object:g})}}var g=this,h=this.geometry,k=this.matrixWorld,l=d.params.Points.threshold;null===h.boundingSphere&&h.computeBoundingSphere();c.copy(h.boundingSphere);c.applyMatrix4(k);if(!1!==d.ray.intersectsSphere(c)){a.getInverse(k);b.copy(d.ray).applyMatrix4(a);var l=l/((this.scale.x+this.scale.y+this.scale.z)/3),p=l*l,l=new THREE.Vector3;if(h instanceof THREE.BufferGeometry){var n=h.index,h=h.attributes.position.array;if(null!==n)for(var m=n.array,n=0,q=m.length;nf||(p.applyMatrix4(this.matrixWorld),v=d.ray.origin.distanceTo(p),vd.far||e.push({distance:v,point:h.clone().applyMatrix4(this.matrixWorld),index:g,face:null,faceIndex:null,object:this}))}else for(g=0,u=q.length/3-1;gf||(p.applyMatrix4(this.matrixWorld),v=d.ray.origin.distanceTo(p),vd.far||e.push({distance:v,point:h.clone().applyMatrix4(this.matrixWorld),index:g,face:null,faceIndex:null,object:this}))}else if(g instanceof THREE.Geometry)for(k=g.vertices,l=k.length,g=0;gf||(p.applyMatrix4(this.matrixWorld),v=d.ray.origin.distanceTo(p),vd.far||e.push({distance:v,point:h.clone().applyMatrix4(this.matrixWorld),index:g,face:null,faceIndex:null,object:this}))}}}();THREE.Line.prototype.clone=function(){return new this.constructor(this.geometry,this.material).copy(this)};THREE.LineStrip=0;THREE.LinePieces=1;THREE.LineSegments=function(a,b){THREE.Line.call(this,a,b);this.type="LineSegments"};THREE.LineSegments.prototype=Object.create(THREE.Line.prototype);THREE.LineSegments.prototype.constructor=THREE.LineSegments;THREE.Mesh=function(a,b){THREE.Object3D.call(this);this.type="Mesh";this.geometry=void 0!==a?a:new THREE.Geometry;this.material=void 0!==b?b:new THREE.MeshBasicMaterial({color:16777215*Math.random()});this.drawMode=THREE.TrianglesDrawMode;this.updateMorphTargets()};THREE.Mesh.prototype=Object.create(THREE.Object3D.prototype);THREE.Mesh.prototype.constructor=THREE.Mesh;THREE.Mesh.prototype.setDrawMode=function(a){this.drawMode=a};THREE.Mesh.prototype.updateMorphTargets=function(){if(void 0!==this.geometry.morphTargets&&0b.far?null:{distance:c,point:s.clone(),object:a}}function c(c,d,e,f,l,p,n,s){g.fromArray(f,3*p);h.fromArray(f,3*n);k.fromArray(f,3*s);if(c=b(c,d,e,g,h,k,t))l&&(m.fromArray(l,2*p),q.fromArray(l,2*n),u.fromArray(l,2*s),c.uv=a(t,g,h,k,m,q,u)),c.face=new THREE.Face3(p,n,s,THREE.Triangle.normal(g,h,k)),c.faceIndex=p;return c}var d=new THREE.Matrix4,e=new THREE.Ray,f=new THREE.Sphere,g=new THREE.Vector3,h=new THREE.Vector3,k=new THREE.Vector3,l=new THREE.Vector3,p=new THREE.Vector3,n=new THREE.Vector3,m=new THREE.Vector2,q=new THREE.Vector2,u=new THREE.Vector2,v=new THREE.Vector3,t=new THREE.Vector3,s=new THREE.Vector3;return function(s,v){var x=this.geometry,D=this.material,z=this.matrixWorld;if(void 0!==D&&(null===x.boundingSphere&&x.computeBoundingSphere(),f.copy(x.boundingSphere),f.applyMatrix4(z),!1!==s.ray.intersectsSphere(f)&&(d.getInverse(z),e.copy(s.ray).applyMatrix4(d),null===x.boundingBox||!1!==e.intersectsBox(x.boundingBox)))){var y,B;if(x instanceof THREE.BufferGeometry){var G,F,D=x.index,z=x.attributes,x=z.position.array;void 0!==z.uv&&(y=z.uv.array);if(null!==D)for(var z=D.array,H=0,L=z.length;H=d[e].distance)d[e-1].object.visible=!1,d[e].object.visible=!0;else break;for(;ethis.scale.x*this.scale.y||c.push({distance:Math.sqrt(d),point:this.position,face:null,object:this})}}();THREE.Sprite.prototype.clone=function(){return new this.constructor(this.material).copy(this)};THREE.Particle=THREE.Sprite;THREE.LensFlare=function(a,b,c,d,e){THREE.Object3D.call(this);this.lensFlares=[];this.positionScreen=new THREE.Vector3;this.customUpdateCallback=void 0;void 0!==a&&this.add(a,b,c,d,e)};THREE.LensFlare.prototype=Object.create(THREE.Object3D.prototype);THREE.LensFlare.prototype.constructor=THREE.LensFlare;THREE.LensFlare.prototype.add=function(a,b,c,d,e,f){void 0===b&&(b=-1);void 0===c&&(c=0);void 0===f&&(f=1);void 0===e&&(e=new THREE.Color(16777215));void 0===d&&(d=THREE.NormalBlending);c=Math.min(c,Math.max(0,c));this.lensFlares.push({texture:a,size:b,distance:c,x:0,y:0,z:0,scale:1,rotation:0,opacity:f,color:e,blending:d})};THREE.LensFlare.prototype.updateLensFlares=function(){var a,b=this.lensFlares.length,c,d=2*-this.positionScreen.x,e=2*-this.positionScreen.y;for(a=0;a-1?e(a,b,c):b.indexOf("%")>-1?f(a,b,c):b.indexOf(":")>-1?g(a,b):i(a._value,b,c)}function d(a,b){var c,d,e,f,g,i=b,j=["KB","MB","GB","TB","PB","EB","ZB","YB"],k=!1;if(b.indexOf(":")>-1)a._value=h(b);else if(b===q)a._value=0;else{for("."!==o[p].delimiters.decimal&&(b=b.replace(/\./g,"").replace(o[p].delimiters.decimal,".")),c=new RegExp("[^a-zA-Z]"+o[p].abbreviations.thousand+"(?:\\)|(\\"+o[p].currency.symbol+")?(?:\\))?)?$"),d=new RegExp("[^a-zA-Z]"+o[p].abbreviations.million+"(?:\\)|(\\"+o[p].currency.symbol+")?(?:\\))?)?$"),e=new RegExp("[^a-zA-Z]"+o[p].abbreviations.billion+"(?:\\)|(\\"+o[p].currency.symbol+")?(?:\\))?)?$"),f=new RegExp("[^a-zA-Z]"+o[p].abbreviations.trillion+"(?:\\)|(\\"+o[p].currency.symbol+")?(?:\\))?)?$"),g=0;g<=j.length&&!(k=b.indexOf(j[g])>-1?Math.pow(1024,g+1):!1);g++);a._value=(k?k:1)*(i.match(c)?Math.pow(10,3):1)*(i.match(d)?Math.pow(10,6):1)*(i.match(e)?Math.pow(10,9):1)*(i.match(f)?Math.pow(10,12):1)*(b.indexOf("%")>-1?.01:1)*((b.split("-").length+Math.min(b.split("(").length-1,b.split(")").length-1))%2?1:-1)*Number(b.replace(/[^0-9\.]+/g,"")),a._value=k?Math.ceil(a._value):a._value}return a._value}function e(a,b,c){var d,e,f=b.indexOf("$"),g=b.indexOf("("),h=b.indexOf("-"),j="";return b.indexOf(" $")>-1?(j=" ",b=b.replace(" $","")):b.indexOf("$ ")>-1?(j=" ",b=b.replace("$ ","")):b=b.replace("$",""),e=i(a._value,b,c),1>=f?e.indexOf("(")>-1||e.indexOf("-")>-1?(e=e.split(""),d=1,(g>f||h>f)&&(d=0),e.splice(d,0,o[p].currency.symbol+j),e=e.join("")):e=o[p].currency.symbol+j+e:e.indexOf(")")>-1?(e=e.split(""),e.splice(-1,0,j+o[p].currency.symbol),e=e.join("")):e=e+j+o[p].currency.symbol,e}function f(a,b,c){var d,e="",f=100*a._value;return b.indexOf(" %")>-1?(e=" ",b=b.replace(" %","")):b=b.replace("%",""),d=i(f,b,c),d.indexOf(")")>-1?(d=d.split(""),d.splice(-1,0,e+"%"),d=d.join("")):d=d+e+"%",d}function g(a){var b=Math.floor(a._value/60/60),c=Math.floor((a._value-60*b*60)/60),d=Math.round(a._value-60*b*60-60*c);return b+":"+(10>c?"0"+c:c)+":"+(10>d?"0"+d:d)}function h(a){var b=a.split(":"),c=0;return 3===b.length?(c+=60*Number(b[0])*60,c+=60*Number(b[1]),c+=Number(b[2])):2===b.length&&(c+=60*Number(b[0]),c+=Number(b[1])),Number(c)}function i(a,c,d){var e,f,g,h,i,j,k=!1,l=!1,m=!1,n="",r=!1,s=!1,t=!1,u=!1,v=!1,w="",x="",y=Math.abs(a),z=["B","KB","MB","GB","TB","PB","EB","ZB","YB"],A="",B=!1;if(0===a&&null!==q)return q;if(c.indexOf("(")>-1?(k=!0,c=c.slice(1,-1)):c.indexOf("+")>-1&&(l=!0,c=c.replace(/\+/g,"")),c.indexOf("a")>-1&&(r=c.indexOf("aK")>=0,s=c.indexOf("aM")>=0,t=c.indexOf("aB")>=0,u=c.indexOf("aT")>=0,v=r||s||t||u,c.indexOf(" a")>-1?(n=" ",c=c.replace(" a","")):c=c.replace("a",""),y>=Math.pow(10,12)&&!v||u?(n+=o[p].abbreviations.trillion,a/=Math.pow(10,12)):y=Math.pow(10,9)&&!v||t?(n+=o[p].abbreviations.billion,a/=Math.pow(10,9)):y=Math.pow(10,6)&&!v||s?(n+=o[p].abbreviations.million,a/=Math.pow(10,6)):(y=Math.pow(10,3)&&!v||r)&&(n+=o[p].abbreviations.thousand,a/=Math.pow(10,3))),c.indexOf("b")>-1)for(c.indexOf(" b")>-1?(w=" ",c=c.replace(" b","")):c=c.replace("b",""),g=0;g<=z.length;g++)if(e=Math.pow(1024,g),f=Math.pow(1024,g+1),a>=e&&f>a){w+=z[g],e>0&&(a/=e);break}return c.indexOf("o")>-1&&(c.indexOf(" o")>-1?(x=" ",c=c.replace(" o","")):c=c.replace("o",""),x+=o[p].ordinal(a)),c.indexOf("[.]")>-1&&(m=!0,c=c.replace("[.]",".")),h=a.toString().split(".")[0],i=c.split(".")[1],j=c.indexOf(","),i?(i.indexOf("[")>-1?(i=i.replace("]",""),i=i.split("["),A=b(a,i[0].length+i[1].length,d,i[1].length)):A=b(a,i.length,d),h=A.split(".")[0],A=A.split(".")[1].length?o[p].delimiters.decimal+A.split(".")[1]:"",m&&0===Number(A.slice(1))&&(A="")):h=b(a,null,d),h.indexOf("-")>-1&&(h=h.slice(1),B=!0),j>-1&&(h=h.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g,"$1"+o[p].delimiters.thousands)),0===c.indexOf(".")&&(h=""),(k&&B?"(":"")+(!k&&B?"-":"")+(!B&&l?"+":"")+h+A+(x?x:"")+(n?n:"")+(w?w:"")+(k&&B?")":"")}function j(a,b){o[a]=b}function k(a){var b=a.toString().split(".");return b.length<2?1:Math.pow(10,b[1].length)}function l(){var a=Array.prototype.slice.call(arguments);return a.reduce(function(a,b){var c=k(a),d=k(b);return c>d?c:d},-1/0)}var m,n="1.5.3",o={},p="en",q=null,r="0,0",s="undefined"!=typeof module&&module.exports;m=function(b){return m.isNumeral(b)?b=b.value():0===b||"undefined"==typeof b?b=0:Number(b)||(b=m.fn.unformat(b)),new a(Number(b))},m.version=n,m.isNumeral=function(b){return b instanceof a},m.language=function(a,b){if(!a)return p;if(a&&!b){if(!o[a])throw new Error("Unknown language : "+a);p=a}return(b||!o[a])&&j(a,b),m},m.languageData=function(a){if(!a)return o[p];if(!o[a])throw new Error("Unknown language : "+a);return o[a]},m.language("en",{delimiters:{thousands:",",decimal:"."},abbreviations:{thousand:"k",million:"m",billion:"b",trillion:"t"},ordinal:function(a){var b=a%10;return 1===~~(a%100/10)?"th":1===b?"st":2===b?"nd":3===b?"rd":"th"},currency:{symbol:"$"}}),m.zeroFormat=function(a){q="string"==typeof a?a:null},m.defaultFormat=function(a){r="string"==typeof a?a:"0.0"},"function"!=typeof Array.prototype.reduce&&(Array.prototype.reduce=function(a,b){"use strict";if(null===this||"undefined"==typeof this)throw new TypeError("Array.prototype.reduce called on null or undefined");if("function"!=typeof a)throw new TypeError(a+" is not a function");var c,d,e=this.length>>>0,f=!1;for(1c;++c)this.hasOwnProperty(c)&&(f?d=a(d,this[c],c,this):(d=this[c],f=!0));if(!f)throw new TypeError("Reduce of empty array with no initial value");return d}),m.fn=a.prototype={clone:function(){return m(this)},format:function(a,b){return c(this,a?a:r,void 0!==b?b:Math.round)},unformat:function(a){return"[object Number]"===Object.prototype.toString.call(a)?a:d(this,a?a:r)},value:function(){return this._value},valueOf:function(){return this._value},set:function(a){return this._value=Number(a),this},add:function(a){function b(a,b){return a+c*b}var c=l.call(null,this._value,a);return this._value=[this._value,a].reduce(b,0)/c,this},subtract:function(a){function b(a,b){return a-c*b}var c=l.call(null,this._value,a);return this._value=[a].reduce(b,this._value*c)/c,this},multiply:function(a){function b(a,b){var c=l(a,b);return a*c*b*c/(c*c)}return this._value=[this._value,a].reduce(b,1),this},divide:function(a){function b(a,b){var c=l(a,b);return a*c/(b*c)}return this._value=[this._value,a].reduce(b),this},difference:function(a){return Math.abs(m(this._value).subtract(a).value())}},s&&(module.exports=m),"undefined"==typeof ender&&(this.numeral=m),"function"==typeof define&&define.amd&&define([],function(){return m})}).call(this); +// Extracted Richard Bunt's work in Telemachus: https://github.com/richardbunt/Telemachus/blob/master/WebPages/WebPages/src/console.js -THREE.ShaderChunk.lights_phong_fragment="BlinnPhongMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;\nmaterial.specularColor = specular;\nmaterial.specularShininess = shininess;\nmaterial.specularStrength = specularStrength;\n";THREE.ShaderChunk.lights_phong_pars_fragment="#ifdef USE_ENVMAP\n varying vec3 vWorldPosition;\n#endif\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n varying vec3 vNormal;\n#endif\nstruct BlinnPhongMaterial {\n vec3 diffuseColor;\n vec3 specularColor;\n float specularShininess;\n float specularStrength;\n};\nvoid RE_Direct_BlinnPhong( const in IncidentLight directLight, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n float dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n vec3 irradiance = dotNL * directLight.color;\n #ifndef PHYSICALLY_CORRECT_LIGHTS\n irradiance *= PI;\n #endif\n reflectedLight.directDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n reflectedLight.directSpecular += irradiance * BRDF_Specular_BlinnPhong( directLight, geometry, material.specularColor, material.specularShininess ) * material.specularStrength;\n}\nvoid RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n reflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\n#define RE_Direct RE_Direct_BlinnPhong\n#define RE_IndirectDiffuse RE_IndirectDiffuse_BlinnPhong\n#define Material_LightProbeLOD( material ) (0)\n";THREE.ShaderChunk.lights_phong_pars_vertex="#ifdef USE_ENVMAP\n varying vec3 vWorldPosition;\n#endif\n";THREE.ShaderChunk.lights_phong_vertex="#ifdef USE_ENVMAP\n vWorldPosition = worldPosition.xyz;\n#endif\n";THREE.ShaderChunk.lights_standard_fragment="StandardMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor );\nmaterial.specularRoughness = clamp( roughnessFactor, 0.04, 1.0 );\nmaterial.specularColor = mix( vec3( 0.04 ), diffuseColor.rgb, metalnessFactor );\n";THREE.ShaderChunk.lights_standard_pars_fragment="struct StandardMaterial {\n vec3 diffuseColor;\n float specularRoughness;\n vec3 specularColor;\n};\nvoid RE_Direct_Standard( const in IncidentLight directLight, const in GeometricContext geometry, const in StandardMaterial material, inout ReflectedLight reflectedLight ) {\n float dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n vec3 irradiance = dotNL * directLight.color;\n #ifndef PHYSICALLY_CORRECT_LIGHTS\n irradiance *= PI;\n #endif\n reflectedLight.directDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n reflectedLight.directSpecular += irradiance * BRDF_Specular_GGX( directLight, geometry, material.specularColor, material.specularRoughness );\n}\nvoid RE_IndirectDiffuse_Standard( const in vec3 irradiance, const in GeometricContext geometry, const in StandardMaterial material, inout ReflectedLight reflectedLight ) {\n reflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectSpecular_Standard( const in vec3 radiance, const in GeometricContext geometry, const in StandardMaterial material, inout ReflectedLight reflectedLight ) {\n reflectedLight.indirectSpecular += radiance * BRDF_Specular_GGX_Environment( geometry, material.specularColor, material.specularRoughness );\n}\n#define RE_Direct RE_Direct_Standard\n#define RE_IndirectDiffuse RE_IndirectDiffuse_Standard\n#define RE_IndirectSpecular RE_IndirectSpecular_Standard\n#define Material_BlinnShininessExponent( material ) GGXRoughnessToBlinnExponent( material.specularRoughness )\nfloat computeSpecularOcclusion( const in float dotNV, const in float ambientOcclusion, const in float roughness ) {\n return saturate( pow( dotNV + ambientOcclusion, exp2( - 16.0 * roughness - 1.0 ) ) - 1.0 + ambientOcclusion );\n}\n";THREE.ShaderChunk.lights_template="\nGeometricContext geometry;\ngeometry.position = - vViewPosition;\ngeometry.normal = normal;\ngeometry.viewDir = normalize( vViewPosition );\nIncidentLight directLight;\n#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct )\n PointLight pointLight;\n for ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n pointLight = pointLights[ i ];\n directLight = getPointDirectLightIrradiance( pointLight, geometry );\n #ifdef USE_SHADOWMAP\n directLight.color *= all( bvec2( pointLight.shadow, directLight.visible ) ) ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ] ) : 1.0;\n #endif\n RE_Direct( directLight, geometry, material, reflectedLight );\n }\n#endif\n#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct )\n SpotLight spotLight;\n for ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n spotLight = spotLights[ i ];\n directLight = getSpotDirectLightIrradiance( spotLight, geometry );\n #ifdef USE_SHADOWMAP\n directLight.color *= all( bvec2( spotLight.shadow, directLight.visible ) ) ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n #endif\n RE_Direct( directLight, geometry, material, reflectedLight );\n }\n#endif\n#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct )\n DirectionalLight directionalLight;\n for ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n directionalLight = directionalLights[ i ];\n directLight = getDirectionalDirectLightIrradiance( directionalLight, geometry );\n #ifdef USE_SHADOWMAP\n directLight.color *= all( bvec2( directionalLight.shadow, directLight.visible ) ) ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n #endif\n RE_Direct( directLight, geometry, material, reflectedLight );\n }\n#endif\n#if defined( RE_IndirectDiffuse )\n vec3 irradiance = getAmbientLightIrradiance( ambientLightColor );\n #ifdef USE_LIGHTMAP\n vec3 lightMapIrradiance = texture2D( lightMap, vUv2 ).xyz * lightMapIntensity;\n #ifndef PHYSICALLY_CORRECT_LIGHTS\n lightMapIrradiance *= PI;\n #endif\n irradiance += lightMapIrradiance;\n #endif\n #if ( NUM_HEMI_LIGHTS > 0 )\n for ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n irradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\n }\n #endif\n #if defined( USE_ENVMAP ) && defined( STANDARD ) && defined( ENVMAP_TYPE_CUBE_UV )\n irradiance += getLightProbeIndirectIrradiance( geometry, 8 );\n #endif\n RE_IndirectDiffuse( irradiance, geometry, material, reflectedLight );\n#endif\n#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )\n vec3 radiance = getLightProbeIndirectRadiance( geometry, Material_BlinnShininessExponent( material ), 8 );\n RE_IndirectSpecular( radiance, geometry, material, reflectedLight );\n#endif\n";THREE.ShaderChunk.logdepthbuf_fragment="#if defined(USE_LOGDEPTHBUF) && defined(USE_LOGDEPTHBUF_EXT)\n gl_FragDepthEXT = log2(vFragDepth) * logDepthBufFC * 0.5;\n#endif";THREE.ShaderChunk.logdepthbuf_pars_fragment="#ifdef USE_LOGDEPTHBUF\n uniform float logDepthBufFC;\n #ifdef USE_LOGDEPTHBUF_EXT\n varying float vFragDepth;\n #endif\n#endif\n";THREE.ShaderChunk.logdepthbuf_pars_vertex="#ifdef USE_LOGDEPTHBUF\n #ifdef USE_LOGDEPTHBUF_EXT\n varying float vFragDepth;\n #endif\n uniform float logDepthBufFC;\n#endif";THREE.ShaderChunk.logdepthbuf_vertex="#ifdef USE_LOGDEPTHBUF\n gl_Position.z = log2(max( EPSILON, gl_Position.w + 1.0 )) * logDepthBufFC;\n #ifdef USE_LOGDEPTHBUF_EXT\n vFragDepth = 1.0 + gl_Position.w;\n #else\n gl_Position.z = (gl_Position.z - 1.0) * gl_Position.w;\n #endif\n#endif\n";THREE.ShaderChunk.map_fragment="#ifdef USE_MAP\n vec4 texelColor = texture2D( map, vUv );\n texelColor = mapTexelToLinear( texelColor );\n diffuseColor *= texelColor;\n#endif\n";THREE.ShaderChunk.map_pars_fragment="#ifdef USE_MAP\n uniform sampler2D map;\n#endif\n";THREE.ShaderChunk.map_particle_fragment="#ifdef USE_MAP\n vec4 mapTexel = texture2D( map, vec2( gl_PointCoord.x, 1.0 - gl_PointCoord.y ) * offsetRepeat.zw + offsetRepeat.xy );\n diffuseColor *= mapTexelToLinear( mapTexel );\n#endif\n";THREE.ShaderChunk.map_particle_pars_fragment="#ifdef USE_MAP\n uniform vec4 offsetRepeat;\n uniform sampler2D map;\n#endif\n";THREE.ShaderChunk.metalnessmap_fragment="float metalnessFactor = metalness;\n#ifdef USE_METALNESSMAP\n vec4 texelMetalness = texture2D( metalnessMap, vUv );\n metalnessFactor *= texelMetalness.r;\n#endif\n";THREE.ShaderChunk.metalnessmap_pars_fragment="#ifdef USE_METALNESSMAP\n uniform sampler2D metalnessMap;\n#endif";THREE.ShaderChunk.morphnormal_vertex="#ifdef USE_MORPHNORMALS\n objectNormal += ( morphNormal0 - normal ) * morphTargetInfluences[ 0 ];\n objectNormal += ( morphNormal1 - normal ) * morphTargetInfluences[ 1 ];\n objectNormal += ( morphNormal2 - normal ) * morphTargetInfluences[ 2 ];\n objectNormal += ( morphNormal3 - normal ) * morphTargetInfluences[ 3 ];\n#endif\n";THREE.ShaderChunk.morphtarget_pars_vertex="#ifdef USE_MORPHTARGETS\n #ifndef USE_MORPHNORMALS\n uniform float morphTargetInfluences[ 8 ];\n #else\n uniform float morphTargetInfluences[ 4 ];\n #endif\n#endif";THREE.ShaderChunk.morphtarget_vertex="#ifdef USE_MORPHTARGETS\n transformed += ( morphTarget0 - position ) * morphTargetInfluences[ 0 ];\n transformed += ( morphTarget1 - position ) * morphTargetInfluences[ 1 ];\n transformed += ( morphTarget2 - position ) * morphTargetInfluences[ 2 ];\n transformed += ( morphTarget3 - position ) * morphTargetInfluences[ 3 ];\n #ifndef USE_MORPHNORMALS\n transformed += ( morphTarget4 - position ) * morphTargetInfluences[ 4 ];\n transformed += ( morphTarget5 - position ) * morphTargetInfluences[ 5 ];\n transformed += ( morphTarget6 - position ) * morphTargetInfluences[ 6 ];\n transformed += ( morphTarget7 - position ) * morphTargetInfluences[ 7 ];\n #endif\n#endif\n";THREE.ShaderChunk.normal_fragment="#ifdef FLAT_SHADED\n vec3 fdx = vec3( dFdx( vViewPosition.x ), dFdx( vViewPosition.y ), dFdx( vViewPosition.z ) );\n vec3 fdy = vec3( dFdy( vViewPosition.x ), dFdy( vViewPosition.y ), dFdy( vViewPosition.z ) );\n vec3 normal = normalize( cross( fdx, fdy ) );\n#else\n vec3 normal = normalize( vNormal );\n #ifdef DOUBLE_SIDED\n normal = normal * ( -1.0 + 2.0 * float( gl_FrontFacing ) );\n #endif\n#endif\n#ifdef USE_NORMALMAP\n normal = perturbNormal2Arb( -vViewPosition, normal );\n#elif defined( USE_BUMPMAP )\n normal = perturbNormalArb( -vViewPosition, normal, dHdxy_fwd() );\n#endif\n";THREE.ShaderChunk.normalmap_pars_fragment="#ifdef USE_NORMALMAP\n uniform sampler2D normalMap;\n uniform vec2 normalScale;\n vec3 perturbNormal2Arb( vec3 eye_pos, vec3 surf_norm ) {\n vec3 q0 = dFdx( eye_pos.xyz );\n vec3 q1 = dFdy( eye_pos.xyz );\n vec2 st0 = dFdx( vUv.st );\n vec2 st1 = dFdy( vUv.st );\n vec3 S = normalize( q0 * st1.t - q1 * st0.t );\n vec3 T = normalize( -q0 * st1.s + q1 * st0.s );\n vec3 N = normalize( surf_norm );\n vec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n mapN.xy = normalScale * mapN.xy;\n mat3 tsn = mat3( S, T, N );\n return normalize( tsn * mapN );\n }\n#endif\n";THREE.ShaderChunk.premultiplied_alpha_fragment="#ifdef PREMULTIPLIED_ALPHA\n gl_FragColor.rgb *= gl_FragColor.a;\n#endif\n";THREE.ShaderChunk.project_vertex="#ifdef USE_SKINNING\n vec4 mvPosition = modelViewMatrix * skinned;\n#else\n vec4 mvPosition = modelViewMatrix * vec4( transformed, 1.0 );\n#endif\ngl_Position = projectionMatrix * mvPosition;\n";THREE.ShaderChunk.roughnessmap_fragment="float roughnessFactor = roughness;\n#ifdef USE_ROUGHNESSMAP\n vec4 texelRoughness = texture2D( roughnessMap, vUv );\n roughnessFactor *= texelRoughness.r;\n#endif\n";THREE.ShaderChunk.roughnessmap_pars_fragment="#ifdef USE_ROUGHNESSMAP\n uniform sampler2D roughnessMap;\n#endif";THREE.ShaderChunk.shadowmap_pars_fragment="#ifdef USE_SHADOWMAP\n #if NUM_DIR_LIGHTS > 0\n uniform sampler2D directionalShadowMap[ NUM_DIR_LIGHTS ];\n varying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHTS ];\n #endif\n #if NUM_SPOT_LIGHTS > 0\n uniform sampler2D spotShadowMap[ NUM_SPOT_LIGHTS ];\n varying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHTS ];\n #endif\n #if NUM_POINT_LIGHTS > 0\n uniform sampler2D pointShadowMap[ NUM_POINT_LIGHTS ];\n varying vec4 vPointShadowCoord[ NUM_POINT_LIGHTS ];\n #endif\n float unpackDepth( const in vec4 rgba_depth ) {\n const vec4 bit_shift = vec4( 1.0 / ( 256.0 * 256.0 * 256.0 ), 1.0 / ( 256.0 * 256.0 ), 1.0 / 256.0, 1.0 );\n return dot( rgba_depth, bit_shift );\n }\n float texture2DCompare( sampler2D depths, vec2 uv, float compare ) {\n return step( compare, unpackDepth( texture2D( depths, uv ) ) );\n }\n float texture2DShadowLerp( sampler2D depths, vec2 size, vec2 uv, float compare ) {\n const vec2 offset = vec2( 0.0, 1.0 );\n vec2 texelSize = vec2( 1.0 ) / size;\n vec2 centroidUV = floor( uv * size + 0.5 ) / size;\n float lb = texture2DCompare( depths, centroidUV + texelSize * offset.xx, compare );\n float lt = texture2DCompare( depths, centroidUV + texelSize * offset.xy, compare );\n float rb = texture2DCompare( depths, centroidUV + texelSize * offset.yx, compare );\n float rt = texture2DCompare( depths, centroidUV + texelSize * offset.yy, compare );\n vec2 f = fract( uv * size + 0.5 );\n float a = mix( lb, lt, f.y );\n float b = mix( rb, rt, f.y );\n float c = mix( a, b, f.x );\n return c;\n }\n float getShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord ) {\n shadowCoord.xyz /= shadowCoord.w;\n shadowCoord.z += shadowBias;\n bvec4 inFrustumVec = bvec4 ( shadowCoord.x >= 0.0, shadowCoord.x <= 1.0, shadowCoord.y >= 0.0, shadowCoord.y <= 1.0 );\n bool inFrustum = all( inFrustumVec );\n bvec2 frustumTestVec = bvec2( inFrustum, shadowCoord.z <= 1.0 );\n bool frustumTest = all( frustumTestVec );\n if ( frustumTest ) {\n #if defined( SHADOWMAP_TYPE_PCF )\n vec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n float dx0 = - texelSize.x * shadowRadius;\n float dy0 = - texelSize.y * shadowRadius;\n float dx1 = + texelSize.x * shadowRadius;\n float dy1 = + texelSize.y * shadowRadius;\n return (\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\n ) * ( 1.0 / 9.0 );\n #elif defined( SHADOWMAP_TYPE_PCF_SOFT )\n vec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n float dx0 = - texelSize.x * shadowRadius;\n float dy0 = - texelSize.y * shadowRadius;\n float dx1 = + texelSize.x * shadowRadius;\n float dy1 = + texelSize.y * shadowRadius;\n return (\n texture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\n texture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\n texture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\n texture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\n texture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy, shadowCoord.z ) +\n texture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\n texture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\n texture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\n texture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\n ) * ( 1.0 / 9.0 );\n #else\n return texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z );\n #endif\n }\n return 1.0;\n }\n vec2 cubeToUV( vec3 v, float texelSizeY ) {\n vec3 absV = abs( v );\n float scaleToCube = 1.0 / max( absV.x, max( absV.y, absV.z ) );\n absV *= scaleToCube;\n v *= scaleToCube * ( 1.0 - 2.0 * texelSizeY );\n vec2 planar = v.xy;\n float almostATexel = 1.5 * texelSizeY;\n float almostOne = 1.0 - almostATexel;\n if ( absV.z >= almostOne ) {\n if ( v.z > 0.0 )\n planar.x = 4.0 - v.x;\n } else if ( absV.x >= almostOne ) {\n float signX = sign( v.x );\n planar.x = v.z * signX + 2.0 * signX;\n } else if ( absV.y >= almostOne ) {\n float signY = sign( v.y );\n planar.x = v.x + 2.0 * signY + 2.0;\n planar.y = v.z * signY - 2.0;\n }\n return vec2( 0.125, 0.25 ) * planar + vec2( 0.375, 0.75 );\n }\n float getPointShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord ) {\n vec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) );\n vec3 lightToPosition = shadowCoord.xyz;\n vec3 bd3D = normalize( lightToPosition );\n float dp = ( length( lightToPosition ) - shadowBias ) / 1000.0;\n #if defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_PCF_SOFT )\n vec2 offset = vec2( - 1, 1 ) * shadowRadius * texelSize.y;\n return (\n texture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyy, texelSize.y ), dp ) +\n texture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyy, texelSize.y ), dp ) +\n texture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyx, texelSize.y ), dp ) +\n texture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyx, texelSize.y ), dp ) +\n texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ) +\n texture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxy, texelSize.y ), dp ) +\n texture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxy, texelSize.y ), dp ) +\n texture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxx, texelSize.y ), dp ) +\n texture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxx, texelSize.y ), dp )\n ) * ( 1.0 / 9.0 );\n #else\n return texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp );\n #endif\n }\n#endif\n";THREE.ShaderChunk.shadowmap_pars_vertex="#ifdef USE_SHADOWMAP\n #if NUM_DIR_LIGHTS > 0\n uniform mat4 directionalShadowMatrix[ NUM_DIR_LIGHTS ];\n varying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHTS ];\n #endif\n #if NUM_SPOT_LIGHTS > 0\n uniform mat4 spotShadowMatrix[ NUM_SPOT_LIGHTS ];\n varying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHTS ];\n #endif\n #if NUM_POINT_LIGHTS > 0\n uniform mat4 pointShadowMatrix[ NUM_POINT_LIGHTS ];\n varying vec4 vPointShadowCoord[ NUM_POINT_LIGHTS ];\n #endif\n#endif\n";THREE.ShaderChunk.shadowmap_vertex="#ifdef USE_SHADOWMAP\n #if NUM_DIR_LIGHTS > 0\n for ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n vDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * worldPosition;\n }\n #endif\n #if NUM_SPOT_LIGHTS > 0\n for ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n vSpotShadowCoord[ i ] = spotShadowMatrix[ i ] * worldPosition;\n }\n #endif\n #if NUM_POINT_LIGHTS > 0\n for ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n vPointShadowCoord[ i ] = pointShadowMatrix[ i ] * worldPosition;\n }\n #endif\n#endif\n";THREE.ShaderChunk.shadowmask_pars_fragment="float getShadowMask() {\n float shadow = 1.0;\n #ifdef USE_SHADOWMAP\n #if NUM_DIR_LIGHTS > 0\n DirectionalLight directionalLight;\n for ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n directionalLight = directionalLights[ i ];\n shadow *= bool( directionalLight.shadow ) ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n }\n #endif\n #if NUM_SPOT_LIGHTS > 0\n SpotLight spotLight;\n for ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n spotLight = spotLights[ i ];\n shadow *= bool( spotLight.shadow ) ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n }\n #endif\n #if NUM_POINT_LIGHTS > 0\n PointLight pointLight;\n for ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n pointLight = pointLights[ i ];\n shadow *= bool( pointLight.shadow ) ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ] ) : 1.0;\n }\n #endif\n #endif\n return shadow;\n}\n";THREE.ShaderChunk.skinbase_vertex="#ifdef USE_SKINNING\n mat4 boneMatX = getBoneMatrix( skinIndex.x );\n mat4 boneMatY = getBoneMatrix( skinIndex.y );\n mat4 boneMatZ = getBoneMatrix( skinIndex.z );\n mat4 boneMatW = getBoneMatrix( skinIndex.w );\n#endif";THREE.ShaderChunk.skinning_pars_vertex="#ifdef USE_SKINNING\n uniform mat4 bindMatrix;\n uniform mat4 bindMatrixInverse;\n #ifdef BONE_TEXTURE\n uniform sampler2D boneTexture;\n uniform int boneTextureWidth;\n uniform int boneTextureHeight;\n mat4 getBoneMatrix( const in float i ) {\n float j = i * 4.0;\n float x = mod( j, float( boneTextureWidth ) );\n float y = floor( j / float( boneTextureWidth ) );\n float dx = 1.0 / float( boneTextureWidth );\n float dy = 1.0 / float( boneTextureHeight );\n y = dy * ( y + 0.5 );\n vec4 v1 = texture2D( boneTexture, vec2( dx * ( x + 0.5 ), y ) );\n vec4 v2 = texture2D( boneTexture, vec2( dx * ( x + 1.5 ), y ) );\n vec4 v3 = texture2D( boneTexture, vec2( dx * ( x + 2.5 ), y ) );\n vec4 v4 = texture2D( boneTexture, vec2( dx * ( x + 3.5 ), y ) );\n mat4 bone = mat4( v1, v2, v3, v4 );\n return bone;\n }\n #else\n uniform mat4 boneGlobalMatrices[ MAX_BONES ];\n mat4 getBoneMatrix( const in float i ) {\n mat4 bone = boneGlobalMatrices[ int(i) ];\n return bone;\n }\n #endif\n#endif\n";THREE.ShaderChunk.skinning_vertex="#ifdef USE_SKINNING\n vec4 skinVertex = bindMatrix * vec4( transformed, 1.0 );\n vec4 skinned = vec4( 0.0 );\n skinned += boneMatX * skinVertex * skinWeight.x;\n skinned += boneMatY * skinVertex * skinWeight.y;\n skinned += boneMatZ * skinVertex * skinWeight.z;\n skinned += boneMatW * skinVertex * skinWeight.w;\n skinned = bindMatrixInverse * skinned;\n#endif\n";THREE.ShaderChunk.skinnormal_vertex="#ifdef USE_SKINNING\n mat4 skinMatrix = mat4( 0.0 );\n skinMatrix += skinWeight.x * boneMatX;\n skinMatrix += skinWeight.y * boneMatY;\n skinMatrix += skinWeight.z * boneMatZ;\n skinMatrix += skinWeight.w * boneMatW;\n skinMatrix = bindMatrixInverse * skinMatrix * bindMatrix;\n objectNormal = vec4( skinMatrix * vec4( objectNormal, 0.0 ) ).xyz;\n#endif\n";THREE.ShaderChunk.specularmap_fragment="float specularStrength;\n#ifdef USE_SPECULARMAP\n vec4 texelSpecular = texture2D( specularMap, vUv );\n specularStrength = texelSpecular.r;\n#else\n specularStrength = 1.0;\n#endif";THREE.ShaderChunk.specularmap_pars_fragment="#ifdef USE_SPECULARMAP\n uniform sampler2D specularMap;\n#endif";THREE.ShaderChunk.tonemapping_fragment="#if defined( TONE_MAPPING )\n gl_FragColor.rgb = toneMapping( gl_FragColor.rgb );\n#endif\n";THREE.ShaderChunk.tonemapping_pars_fragment="#define saturate(a) clamp( a, 0.0, 1.0 )\nuniform float toneMappingExposure;\nuniform float toneMappingWhitePoint;\nvec3 LinearToneMapping( vec3 color ) {\n return toneMappingExposure * color;\n}\nvec3 ReinhardToneMapping( vec3 color ) {\n color *= toneMappingExposure;\n return saturate( color / ( vec3( 1.0 ) + color ) );\n}\n#define Uncharted2Helper( x ) max( ( ( x * ( 0.15 * x + 0.10 * 0.50 ) + 0.20 * 0.02 ) / ( x * ( 0.15 * x + 0.50 ) + 0.20 * 0.30 ) ) - 0.02 / 0.30, vec3( 0.0 ) )\nvec3 Uncharted2ToneMapping( vec3 color ) {\n color *= toneMappingExposure;\n return saturate( Uncharted2Helper( color ) / Uncharted2Helper( vec3( toneMappingWhitePoint ) ) );\n}\nvec3 OptimizedCineonToneMapping( vec3 color ) {\n color *= toneMappingExposure;\n color = max( vec3( 0.0 ), color - 0.004 );\n return pow( ( color * ( 6.2 * color + 0.5 ) ) / ( color * ( 6.2 * color + 1.7 ) + 0.06 ), vec3( 2.2 ) );\n}\n";THREE.ShaderChunk.uv2_pars_fragment="#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n varying vec2 vUv2;\n#endif";THREE.ShaderChunk.uv2_pars_vertex="#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n attribute vec2 uv2;\n varying vec2 vUv2;\n#endif";THREE.ShaderChunk.uv2_vertex="#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n vUv2 = uv2;\n#endif";THREE.ShaderChunk.uv_pars_fragment="#if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP ) || defined( USE_ALPHAMAP ) || defined( USE_EMISSIVEMAP ) || defined( USE_ROUGHNESSMAP ) || defined( USE_METALNESSMAP )\n varying vec2 vUv;\n#endif";THREE.ShaderChunk.uv_pars_vertex="#if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP ) || defined( USE_ALPHAMAP ) || defined( USE_EMISSIVEMAP ) || defined( USE_ROUGHNESSMAP ) || defined( USE_METALNESSMAP )\n varying vec2 vUv;\n uniform vec4 offsetRepeat;\n#endif\n";THREE.ShaderChunk.uv_vertex="#if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP ) || defined( USE_ALPHAMAP ) || defined( USE_EMISSIVEMAP ) || defined( USE_ROUGHNESSMAP ) || defined( USE_METALNESSMAP )\n vUv = uv * offsetRepeat.zw + offsetRepeat.xy;\n#endif";THREE.ShaderChunk.worldpos_vertex="#if defined( USE_ENVMAP ) || defined( PHONG ) || defined( STANDARD ) || defined( LAMBERT ) || defined ( USE_SHADOWMAP )\n #ifdef USE_SKINNING\n vec4 worldPosition = modelMatrix * skinned;\n #else\n vec4 worldPosition = modelMatrix * vec4( transformed, 1.0 );\n #endif\n#endif\n";THREE.UniformsUtils={merge:function(a){for(var b={},c=0;cc;c++)r.deleteFramebuffer(b.__webglFramebuffer[c]),r.deleteRenderbuffer(b.__webglDepthbuffer[c]);else r.deleteFramebuffer(b.__webglFramebuffer),r.deleteRenderbuffer(b.__webglDepthbuffer);U.delete(a.texture);U.delete(a)}ia.textures--}function h(a){a=a.target;a.removeEventListener("dispose",h);k(a);U.delete(a)}function k(a){var b=U.get(a).program;a.program=void 0;void 0!==b&&oa.releaseProgram(b)}function l(a,b){return Math.abs(b[0])-Math.abs(a[0])}function p(a,b){return a.object.renderOrder!==b.object.renderOrder?a.object.renderOrder-b.object.renderOrder:a.material.id!==b.material.id?a.material.id-b.material.id:a.z!==b.z?a.z-b.z:a.id-b.id}function n(a,b){return a.object.renderOrder!==b.object.renderOrder?a.object.renderOrder-b.object.renderOrder:a.z!==b.z?b.z-a.z:a.id-b.id}function m(a,b,c,d,e){var f;c.transparent?(d=S,f=++Y):(d=C,f=++Z);f=d[f];void 0!==f?(f.id=a.id,f.object=a,f.geometry=b,f.material=c,f.z=W.z,f.group=e):(f={id:a.id,object:a,geometry:b,material:c,z:W.z,group:e},d.push(f))}function q(a,b){if(!1!==a.visible){if(a.layers.test(b.layers))if(a instanceof THREE.Light)J.push(a);else if(a instanceof THREE.Sprite)!1!==a.frustumCulled&&!0!==za.intersectsObject(a)||ja.push(a);else if(a instanceof THREE.LensFlare)ea.push(a);else if(a instanceof THREE.ImmediateRenderObject)!0===X.sortObjects&&(W.setFromMatrixPosition(a.matrixWorld),W.applyProjection(sa)),m(a,null,a.material,W.z,null);else if(a instanceof THREE.Mesh||a instanceof THREE.Line||a instanceof THREE.Points)if(a instanceof THREE.SkinnedMesh&&a.skeleton.update(),!1===a.frustumCulled||!0===za.intersectsObject(a)){var c=a.material;if(!0===c.visible){!0===X.sortObjects&&(W.setFromMatrixPosition(a.matrixWorld),W.applyProjection(sa));var d=pa.update(a);if(c instanceof THREE.MultiMaterial)for(var e=d.groups,f=c.materials,c=0,g=e.length;c=da.maxTextures&&console.warn("WebGLRenderer: trying to use "+a+" texture units while this GPU supports only "+da.maxTextures);ta+=1;return a}function w(a,b,c,d){var e;if("1i"===b)r.uniform1i(c,d);else if("1f"===b)r.uniform1f(c,d);else if("2f"===b)r.uniform2f(c,d[0],d[1]);else if("3f"===b)r.uniform3f(c,d[0],d[1],d[2]);else if("4f"===b)r.uniform4f(c,d[0],d[1],d[2],d[3]);else if("1iv"===b)r.uniform1iv(c,d);else if("3iv"===b)r.uniform3iv(c,d);else if("1fv"===b)r.uniform1fv(c,d);else if("2fv"===b)r.uniform2fv(c,d);else if("3fv"===b)r.uniform3fv(c,d);else if("4fv"===b)r.uniform4fv(c,d);else if("Matrix2fv"===b)r.uniformMatrix2fv(c,!1,d);else if("Matrix3fv"===b)r.uniformMatrix3fv(c,!1,d);else if("Matrix4fv"===b)r.uniformMatrix4fv(c,!1,d);else if("i"===b)r.uniform1i(c,d);else if("f"===b)r.uniform1f(c,d);else if("v2"===b)r.uniform2f(c,d.x,d.y);else if("v3"===b)r.uniform3f(c,d.x,d.y,d.z);else if("v4"===b)r.uniform4f(c,d.x,d.y,d.z,d.w);else if("c"===b)r.uniform3f(c,d.r,d.g,d.b);else if("s"===b){a=a.properties;for(var g in a){e=a[g];var f=c[g],h=d[g];w(e,e.type,f,h)}}else if("sa"===b){a=a.properties;b=0;for(var k=d.length;b= 365 * 24 * 3600) { + result += (t / (365 * 24 * 3600) | 0) + ":"; + t %= 365 * 24 * 3600; + if (t < 24 * 3600) { + result += "0:"; + } + } + if (t >= 24 * 3600) { + result += (t / (24 * 3600) | 0) + ":"; + } + t %= 24 * 3600; + return result + this.hourMinSec(t) + " MET"; + }, -b=0;for(g=a.value.length;bb||a.height>b){var c=b/Math.max(a.width,a.height),d=document.createElement("canvas");d.width=Math.floor(a.width*c);d.height=Math.floor(a.height*c);d.getContext("2d").drawImage(a,0,0,a.width,a.height,0,0,d.width,d.height);console.warn("THREE.WebGLRenderer: image is too big ("+a.width+"x"+a.height+"). Resized to "+d.width+"x"+d.height,a);return d}return a}function z(a){return THREE.Math.isPowerOfTwo(a.width)&&THREE.Math.isPowerOfTwo(a.height)}function y(a,b){var c=U.get(a);if(6===a.image.length)if(0h;h++)g[h]=!X.autoScaleCubemaps||d||e?e?a.image[h].image:a.image[h]:D(a.image[h],da.maxCubemapSize);var k=z(g[0]),l=L(a.format),m=L(a.type);x(r.TEXTURE_CUBE_MAP,a,k);for(h=0;6>h;h++)if(d)for(var n,p=g[h].mipmaps,q=0,s=p.length;qf;f++)b.__webglFramebuffer[f]=r.createFramebuffer()}else b.__webglFramebuffer=r.createFramebuffer();if(d){K.bindTexture(r.TEXTURE_CUBE_MAP,c.__webglTexture);x(r.TEXTURE_CUBE_MAP,a.texture,e);for(f=0;6>f;f++)G(b.__webglFramebuffer[f],a,r.COLOR_ATTACHMENT0,r.TEXTURE_CUBE_MAP_POSITIVE_X+f);a.texture.generateMipmaps&&e&&r.generateMipmap(r.TEXTURE_CUBE_MAP);K.bindTexture(r.TEXTURE_CUBE_MAP,null)}else K.bindTexture(r.TEXTURE_2D,c.__webglTexture),x(r.TEXTURE_2D,a.texture,e),G(b.__webglFramebuffer,a,r.COLOR_ATTACHMENT0,r.TEXTURE_2D),a.texture.generateMipmaps&&e&&r.generateMipmap(r.TEXTURE_2D),K.bindTexture(r.TEXTURE_2D,null);if(a.depthBuffer){b=U.get(a);if(a instanceof THREE.WebGLRenderTargetCube)for(b.__webglDepthbuffer=[],c=0;6>c;c++)r.bindFramebuffer(r.FRAMEBUFFER,b.__webglFramebuffer[c]),b.__webglDepthbuffer[c]=r.createRenderbuffer(),F(b.__webglDepthbuffer[c],a);else r.bindFramebuffer(r.FRAMEBUFFER,b.__webglFramebuffer),b.__webglDepthbuffer=r.createRenderbuffer(),F(b.__webglDepthbuffer,a);r.bindFramebuffer(r.FRAMEBUFFER,null)}}b=a instanceof THREE.WebGLRenderTargetCube;a?(c=U.get(a),c=b?c.__webglFramebuffer[a.activeCubeFace]:c.__webglFramebuffer,qa.copy(a.scissor),Aa=a.scissorTest,ka.copy(a.viewport)):(c=null,qa.copy(ya).multiplyScalar(aa),Aa=Ba,ka.copy(la).multiplyScalar(aa));ua!==c&&(r.bindFramebuffer(r.FRAMEBUFFER,c),ua=c);K.scissor(qa);K.setScissorTest(Aa);K.viewport(ka);b&&(b=U.get(a.texture),r.framebufferTexture2D(r.FRAMEBUFFER,r.COLOR_ATTACHMENT0,r.TEXTURE_CUBE_MAP_POSITIVE_X+a.activeCubeFace,b.__webglTexture,a.activeMipMapLevel))};this.readRenderTargetPixels=function(a,b,c,d,e,g){if(!1===a instanceof THREE.WebGLRenderTarget)console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.");else{var f=U.get(a).__webglFramebuffer;if(f){var h=!1;f!==ua&&(r.bindFramebuffer(r.FRAMEBUFFER,f),h=!0);try{var k=a.texture;k.format!==THREE.RGBAFormat&&L(k.format)!==r.getParameter(r.IMPLEMENTATION_COLOR_READ_FORMAT)?console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format."):k.type===THREE.UnsignedByteType||L(k.type)===r.getParameter(r.IMPLEMENTATION_COLOR_READ_TYPE)||k.type===THREE.FloatType&&V.get("WEBGL_color_buffer_float")||k.type===THREE.HalfFloatType&&V.get("EXT_color_buffer_half_float")?r.checkFramebufferStatus(r.FRAMEBUFFER)===r.FRAMEBUFFER_COMPLETE?r.readPixels(b,c,d,e,L(k.format),L(k.type),g):console.error("THREE.WebGLRenderer.readRenderTargetPixels: readPixels from renderTarget failed. Framebuffer not complete."):console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.")}finally{h&&r.bindFramebuffer(r.FRAMEBUFFER,ua)}}}}};THREE.WebGLRenderTarget=function(a,b,c){this.uuid=THREE.Math.generateUUID();this.width=a;this.height=b;this.scissor=new THREE.Vector4(0,0,a,b);this.scissorTest=!1;this.viewport=new THREE.Vector4(0,0,a,b);c=c||{};void 0===c.minFilter&&(c.minFilter=THREE.LinearFilter);this.texture=new THREE.Texture(void 0,void 0,c.wrapS,c.wrapT,c.magFilter,c.minFilter,c.format,c.type,c.anisotropy);this.depthBuffer=void 0!==c.depthBuffer?c.depthBuffer:!0;this.stencilBuffer=void 0!==c.stencilBuffer?c.stencilBuffer:!0};THREE.WebGLRenderTarget.prototype={constructor:THREE.WebGLRenderTarget,setSize:function(a,b){if(this.width!==a||this.height!==b)this.width=a,this.height=b,this.dispose();this.viewport.set(0,0,a,b);this.scissor.set(0,0,a,b)},clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.width=a.width;this.height=a.height;this.viewport.copy(a.viewport);this.texture=a.texture.clone();this.depthBuffer=a.depthBuffer;this.stencilBuffer=a.stencilBuffer;return this},dispose:function(){this.dispatchEvent({type:"dispose"})}};THREE.EventDispatcher.prototype.apply(THREE.WebGLRenderTarget.prototype);THREE.WebGLRenderTargetCube=function(a,b,c){THREE.WebGLRenderTarget.call(this,a,b,c);this.activeMipMapLevel=this.activeCubeFace=0};THREE.WebGLRenderTargetCube.prototype=Object.create(THREE.WebGLRenderTarget.prototype);THREE.WebGLRenderTargetCube.prototype.constructor=THREE.WebGLRenderTargetCube;THREE.WebGLBufferRenderer=function(a,b,c){var d;this.setMode=function(a){d=a};this.render=function(b,f){a.drawArrays(d,b,f);c.calls++;c.vertices+=f;d===a.TRIANGLES&&(c.faces+=f/3)};this.renderInstances=function(e){var f=b.get("ANGLE_instanced_arrays");if(null===f)console.error("THREE.WebGLBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.");else{var g=e.attributes.position,h=0,h=g instanceof THREE.InterleavedBufferAttribute?g.data.count:g.count;f.drawArraysInstancedANGLE(d,0,h,e.maxInstancedCount);c.calls++;c.vertices+=h*e.maxInstancedCount;d===a.TRIANGLES&&(c.faces+=e.maxInstancedCount*h/3)}}};THREE.WebGLIndexedBufferRenderer=function(a,b,c){var d,e,f;this.setMode=function(a){d=a};this.setIndex=function(c){c.array instanceof Uint32Array&&b.get("OES_element_index_uint")?(e=a.UNSIGNED_INT,f=4):(e=a.UNSIGNED_SHORT,f=2)};this.render=function(b,h){a.drawElements(d,h,e,b*f);c.calls++;c.vertices+=h;d===a.TRIANGLES&&(c.faces+=h/3)};this.renderInstances=function(g,h,k){var l=b.get("ANGLE_instanced_arrays");null===l?console.error("THREE.WebGLBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays."):(l.drawElementsInstancedANGLE(d,k,e,h*f,g.maxInstancedCount),c.calls++,c.vertices+=k*g.maxInstancedCount,d===a.TRIANGLES&&(c.faces+=g.maxInstancedCount*k/3))}};THREE.WebGLExtensions=function(a){var b={};this.get=function(c){if(void 0!==b[c])return b[c];var d;switch(c){case"EXT_texture_filter_anisotropic":d=a.getExtension("EXT_texture_filter_anisotropic")||a.getExtension("MOZ_EXT_texture_filter_anisotropic")||a.getExtension("WEBKIT_EXT_texture_filter_anisotropic");break;case"WEBGL_compressed_texture_s3tc":d=a.getExtension("WEBGL_compressed_texture_s3tc")||a.getExtension("MOZ_WEBGL_compressed_texture_s3tc")||a.getExtension("WEBKIT_WEBGL_compressed_texture_s3tc");break;case"WEBGL_compressed_texture_pvrtc":d=a.getExtension("WEBGL_compressed_texture_pvrtc")||a.getExtension("WEBKIT_WEBGL_compressed_texture_pvrtc");break;case"WEBGL_compressed_texture_etc1":d=a.getExtension("WEBGL_compressed_texture_etc1");break;default:d=a.getExtension(c)}null===d&&console.warn("THREE.WebGLRenderer: "+c+" extension not supported.");return b[c]=d}};THREE.WebGLCapabilities=function(a,b,c){function d(b){if("highp"===b){if(0c){var d=b;b=c;c=d}d=a[b];return void 0===d?(a[b]=[c],!0):-1===d.indexOf(c)?(d.push(c),!0):!1}var f=new THREE.WebGLGeometries(a,b,c);this.getAttributeBuffer=function(a){return a instanceof THREE.InterleavedBufferAttribute?b.get(a.data).__webglBuffer:b.get(a).__webglBuffer};this.getWireframeAttribute=function(c){var f=b.get(c);if(void 0!==f.wireframe)return f.wireframe;var k=[],l=c.index,p=c.attributes;c=p.position;if(null!==l)for(var p={},l=l.array,n=0,m=l.length;n/g,function(a,b){var c=THREE.ShaderChunk[b];if(void 0===c)throw Error("Can not resolve #include <"+b+">");return k(c)})}function l(a){return a.replace(/for \( int i \= (\d+)\; i < (\d+)\; i \+\+ \) \{([\s\S]+?)(?=\})\}/g,function(a,b,c,d){a="";for(b=parseInt(b);b= 365 * 24 * 3600) { + result += (t / (365 * 24 * 3600) | 0) + " years "; + t %= 365 * 24 * 3600; + if (t < 24 * 3600) { + result += "0 days "; + } + } + if (t >= 24 * 3600) { + result += (t / (24 * 3600) | 0) + " days "; + } + t %= 24 * 3600; + return result + this.hourMinSec(t); + } +} +var DataFormatters = { + distanceString: function(value){ + return numeral(value).format('0,0.000 a') + "m" + }, -f=m.getUniformLocation(t,"opacity");g=m.getUniformLocation(t,"color");h=m.getUniformLocation(t,"scale");k=m.getUniformLocation(t,"rotation");l=m.getUniformLocation(t,"screenPosition")}m.useProgram(t);q.initAttributes();q.enableAttribute(p);q.enableAttribute(n);q.disableUnusedAttributes();m.uniform1i(e,0);m.uniform1i(d,1);m.bindBuffer(m.ARRAY_BUFFER,u);m.vertexAttribPointer(p,2,m.FLOAT,!1,16,0);m.vertexAttribPointer(n,2,m.FLOAT,!1,16,8);m.bindBuffer(m.ELEMENT_ARRAY_BUFFER,v);q.disable(m.CULL_FACE);q.setDepthWrite(!1);N=0;for(M=b.length;N 0 ) {\nfloat depth = gl_FragCoord.z / gl_FragCoord.w;\nfloat fogFactor = 0.0;\nif ( fogType == 1 ) {\nfogFactor = smoothstep( fogNear, fogFar, depth );\n} else {\nconst float LOG2 = 1.442695;\nfogFactor = exp2( - fogDensity * fogDensity * depth * depth * LOG2 );\nfogFactor = 1.0 - clamp( fogFactor, 0.0, 1.0 );\n}\ngl_FragColor = mix( gl_FragColor, vec4( fogColor, gl_FragColor.w ), fogFactor );\n}\n}"].join("\n"));x.compileShader(I);x.compileShader(O);x.attachShader(M,I);x.attachShader(M,O);x.linkProgram(M);B=M;s=x.getAttribLocation(B,"position");w=x.getAttribLocation(B,"uv");c=x.getUniformLocation(B,"uvOffset");d=x.getUniformLocation(B,"uvScale");e=x.getUniformLocation(B,"rotation");f=x.getUniformLocation(B,"scale");g=x.getUniformLocation(B,"color");h=x.getUniformLocation(B,"map");k=x.getUniformLocation(B,"opacity");l=x.getUniformLocation(B,"modelViewMatrix");p=x.getUniformLocation(B,"projectionMatrix");n=x.getUniformLocation(B,"fogType");m=x.getUniformLocation(B,"fogDensity");q=x.getUniformLocation(B,"fogNear");u=x.getUniformLocation(B,"fogFar");v=x.getUniformLocation(B,"fogColor");t=x.getUniformLocation(B,"alphaTest");M=document.createElement("canvas");M.width=8;M.height=8;I=M.getContext("2d");I.fillStyle="white";I.fillRect(0,0,8,8);G=new THREE.Texture(M);G.needsUpdate=!0}x.useProgram(B);D.initAttributes();D.enableAttribute(s);D.enableAttribute(w);D.disableUnusedAttributes();D.disable(x.CULL_FACE);D.enable(x.BLEND);x.bindBuffer(x.ARRAY_BUFFER,z);x.vertexAttribPointer(s,2,x.FLOAT,!1,16,0);x.vertexAttribPointer(w,2,x.FLOAT,!1,16,8);x.bindBuffer(x.ELEMENT_ARRAY_BUFFER,y);x.uniformMatrix4fv(p,!1,N.projectionMatrix.elements);D.activeTexture(x.TEXTURE0);x.uniform1i(h,0);I=M=0;(O=A.fog)?(x.uniform3f(v,O.color.r,O.color.g,O.color.b),O instanceof THREE.Fog?(x.uniform1f(q,O.near),x.uniform1f(u,O.far),x.uniform1i(n,1),I=M=1):O instanceof THREE.FogExp2&&(x.uniform1f(m,O.density),x.uniform1i(n,2),I=M=2)):(x.uniform1i(n,0),I=M=0);for(var O=0,Q=b.length;Oc)return null;var d=[],e=[],f=[],g,h,k;if(0=l--){console.warn("THREE.ShapeUtils: Unable to triangulate polygon! in triangulate()");break}g=h;c<=g&&(g=0);h=g+1;c<=h&&(h=0);k=h+1;c<=k&&(k=0);var p;a:{var n=p=void 0,m=void 0,q=void 0,u=void 0,v=void 0,t=void 0,s=void 0,w=void 0,n=a[e[g]].x,m=a[e[g]].y,q=a[e[h]].x,u=a[e[h]].y,v=a[e[k]].x,t=a[e[k]].y;if(Number.EPSILON>(q-n)*(t-m)-(u-m)*(v-n))p=!1;else{var E=void 0,x=void 0,D=void 0,z=void 0,y=void 0,B=void 0,G=void 0,F=void 0,H=void 0,L=void 0,H=F=G=w=s=void 0,E=v-q,x=t-u,D=n-v,z=m-t,y=q-n,B=u-m;for(p=0;p=-Number.EPSILON&&F>=-Number.EPSILON&&G>=-Number.EPSILON)){p=!1;break a}p=!0}}if(p){d.push([a[e[g]],a[e[h]],a[e[k]]]);f.push([e[g],e[h],e[k]]);g=h;for(k=h+1;kNumber.EPSILON){if(0B||B>y)return[];k=l*n-k*p;if(0>k||k>y)return[]}else{if(0d?[]:k===d?f?[]:[g]:a<=d?[g,h]:[g,l]}function e(a,b,c,d){var e=b.x-a.x,f=b.y-a.y;b=c.x-a.x;c=c.y-a.y;var g=d.x-a.x;d=d.y-a.y;a=e*c-f*b;e=e*d-f*g;return Math.abs(a)>Number.EPSILON?(b=g*c-d*b,0f&&(f=d);var g=a+1;g>d&&(g=0);d=e(h[a],h[f],h[g],k[b]);if(!d)return!1;d=k.length-1;f=b-1;0>f&&(f=d);g=b+1;g>d&&(g=0);return(d=e(k[b],k[f],k[g],h[a]))?!0:!1}function f(a,b){var c,e;for(c=0;cN){console.log("Infinite Loop! Holes left:"+l.length+", Probably Hole outside Shape!");break}for(p=F;ph;h++)l=k[h].x+":"+k[h].y,l=p[l],void 0!==l&&(k[h]=l);return n.concat()},isClockWise:function(a){return 0>THREE.ShapeUtils.area(a)},b2:function(){return function(a,b,c,d){var e=1-a;return e*e*b+2*(1-a)*a*c+a*a*d}}(),b3:function(){return function(a,b,c,d,e){var f=1-a,g=1-a;return f*f*f*b+3*g*g*a*c+3*(1-a)*a*a*d+a*a*a*e}}()};THREE.Curve=function(){};THREE.Curve.prototype={constructor:THREE.Curve,getPoint:function(a){console.warn("THREE.Curve: Warning, getPoint() not implemented!");return null},getPointAt:function(a){a=this.getUtoTmapping(a);return this.getPoint(a)},getPoints:function(a){a||(a=5);var b,c=[];for(b=0;b<=a;b++)c.push(this.getPoint(b/a));return c},getSpacedPoints:function(a){a||(a=5);var b,c=[];for(b=0;b<=a;b++)c.push(this.getPointAt(b/a));return c},getLength:function(){var a=this.getLengths();return a[a.length-1]},getLengths:function(a){a||(a=this.__arcLengthDivisions?this.__arcLengthDivisions:200);if(this.cacheArcLengths&&this.cacheArcLengths.length===a+1&&!this.needsUpdate)return this.cacheArcLengths;this.needsUpdate=!1;var b=[],c,d=this.getPoint(0),e,f=0;b.push(0);for(e=1;e<=a;e++)c=this.getPoint(e/a),f+=c.distanceTo(d),b.push(f),d=c;return this.cacheArcLengths=b},updateArcLengths:function(){this.needsUpdate=!0;this.getLengths()},getUtoTmapping:function(a,b){var c=this.getLengths(),d=0,e=c.length,f;f=b?b:a*c[e-1];for(var g=0,h=e-1,k;g<=h;)if(d=Math.floor(g+(h-g)/2),k=c[d]-f,0>k)g=d+1;else if(0b&&(b=0);1=b)return a=this.curves[d],b=1-(c[d]-b)/a.getLength(),a.getPointAt(b);d++}return null};THREE.CurvePath.prototype.getLength=function(){var a=this.getCurveLengths();return a[a.length-1]};THREE.CurvePath.prototype.getCurveLengths=function(){if(this.cacheLengths&&this.cacheLengths.length===this.curves.length)return this.cacheLengths;for(var a=[],b=0,c=0,d=this.curves.length;cNumber.EPSILON){if(0>l&&(g=b[f],k=-k,h=b[e],l=-l),!(a.yh.y))if(a.y===g.y){if(a.x===g.x)return!0}else{e=l*(a.x-g.x)-k*(a.y-g.y);if(0===e)return!0;0>e||(d=!d)}}else if(a.y===g.y&&(h.x<=a.x&&a.x<=g.x||g.x<=a.x&&a.x<=h.x))return!0}return d}var e=THREE.ShapeUtils.isClockWise,f=function(a){for(var b=[],c=new THREE.Path,d=0,e=a.length;db.length-2?b.length-1:c+1],b=b[c>b.length-3?b.length-1:c+2],c=THREE.CurveUtils.interpolate;return new THREE.Vector2(c(d.x,e.x,f.x,b.x,a),c(d.y,e.y,f.y,b.y,a))};THREE.EllipseCurve=function(a,b,c,d,e,f,g,h){this.aX=a;this.aY=b;this.xRadius=c;this.yRadius=d;this.aStartAngle=e;this.aEndAngle=f;this.aClockwise=g;this.aRotation=h||0};THREE.EllipseCurve.prototype=Object.create(THREE.Curve.prototype);THREE.EllipseCurve.prototype.constructor=THREE.EllipseCurve;THREE.EllipseCurve.prototype.getPoint=function(a){var b=this.aEndAngle-this.aStartAngle;0>b&&(b+=2*Math.PI);b>2*Math.PI&&(b-=2*Math.PI);b=!0===this.aClockwise?this.aEndAngle+(1-a)*(2*Math.PI-b):this.aStartAngle+a*b;a=this.aX+this.xRadius*Math.cos(b);var c=this.aY+this.yRadius*Math.sin(b);if(0!==this.aRotation){var b=Math.cos(this.aRotation),d=Math.sin(this.aRotation),e=a;a=(e-this.aX)*b-(c-this.aY)*d+this.aX;c=(e-this.aX)*d+(c-this.aY)*b+this.aY}return new THREE.Vector2(a,c)};THREE.ArcCurve=function(a,b,c,d,e,f){THREE.EllipseCurve.call(this,a,b,c,c,d,e,f)};THREE.ArcCurve.prototype=Object.create(THREE.EllipseCurve.prototype);THREE.ArcCurve.prototype.constructor=THREE.ArcCurve;THREE.LineCurve3=THREE.Curve.create(function(a,b){this.v1=a;this.v2=b},function(a){var b=new THREE.Vector3;b.subVectors(this.v2,this.v1);b.multiplyScalar(a);b.add(this.v1);return b});THREE.QuadraticBezierCurve3=THREE.Curve.create(function(a,b,c){this.v0=a;this.v1=b;this.v2=c},function(a){var b=THREE.ShapeUtils.b2;return new THREE.Vector3(b(a,this.v0.x,this.v1.x,this.v2.x),b(a,this.v0.y,this.v1.y,this.v2.y),b(a,this.v0.z,this.v1.z,this.v2.z))});THREE.CubicBezierCurve3=THREE.Curve.create(function(a,b,c,d){this.v0=a;this.v1=b;this.v2=c;this.v3=d},function(a){var b=THREE.ShapeUtils.b3;return new THREE.Vector3(b(a,this.v0.x,this.v1.x,this.v2.x,this.v3.x),b(a,this.v0.y,this.v1.y,this.v2.y,this.v3.y),b(a,this.v0.z,this.v1.z,this.v2.z,this.v3.z))});THREE.SplineCurve3=THREE.Curve.create(function(a){console.warn("THREE.SplineCurve3 will be deprecated. Please use THREE.CatmullRomCurve3");this.points=void 0==a?[]:a},function(a){var b=this.points;a*=b.length-1;var c=Math.floor(a);a-=c;var d=b[0==c?c:c-1],e=b[c],f=b[c>b.length-2?b.length-1:c+1],b=b[c>b.length-3?b.length-1:c+2],c=THREE.CurveUtils.interpolate;return new THREE.Vector3(c(d.x,e.x,f.x,b.x,a),c(d.y,e.y,f.y,b.y,a),c(d.z,e.z,f.z,b.z,a))});THREE.CatmullRomCurve3=function(){function a(){}var b=new THREE.Vector3,c=new a,d=new a,e=new a;a.prototype.init=function(a,b,c,d){this.c0=a;this.c1=c;this.c2=-3*a+3*b-2*c-d;this.c3=2*a-2*b+c+d};a.prototype.initNonuniformCatmullRom=function(a,b,c,d,e,p,n){a=((b-a)/e-(c-a)/(e+p)+(c-b)/p)*p;d=((c-b)/p-(d-b)/(p+n)+(d-c)/n)*p;this.init(b,c,a,d)};a.prototype.initCatmullRom=function(a,b,c,d,e){this.init(b,c,e*(c-a),e*(d-b))};a.prototype.calc=function(a){var b=a*a;return this.c0+this.c1*a+this.c2*b+this.c3*b*a};return THREE.Curve.create(function(a){this.points=a||[];this.closed=!1},function(a){var g=this.points,h,k;k=g.length;2>k&&console.log("duh, you need at least 2 points");a*=k-(this.closed?0:1);h=Math.floor(a);a-=h;this.closed?h+=0h&&(h=1);1e-4>k&&(k=h);1e-4>m&&(m=h);c.initNonuniformCatmullRom(l.x,p.x,n.x,g.x,k,h,m);d.initNonuniformCatmullRom(l.y,p.y,n.y,g.y,k,h,m);e.initNonuniformCatmullRom(l.z,p.z,n.z,g.z,k,h,m)}else"catmullrom"===this.type&&(k=void 0!==this.tension?this.tension:.5,c.initCatmullRom(l.x,p.x,n.x,g.x,k),d.initCatmullRom(l.y,p.y,n.y,g.y,k),e.initCatmullRom(l.z,p.z,n.z,g.z,k));return new THREE.Vector3(c.calc(a),d.calc(a),e.calc(a))})}();THREE.ClosedSplineCurve3=function(a){console.warn("THREE.ClosedSplineCurve3 has been deprecated. Please use THREE.CatmullRomCurve3.");THREE.CatmullRomCurve3.call(this,a);this.type="catmullrom";this.closed=!0};THREE.ClosedSplineCurve3.prototype=Object.create(THREE.CatmullRomCurve3.prototype);THREE.BoxGeometry=function(a,b,c,d,e,f){THREE.Geometry.call(this);this.type="BoxGeometry";this.parameters={width:a,height:b,depth:c,widthSegments:d,heightSegments:e,depthSegments:f};this.fromBufferGeometry(new THREE.BoxBufferGeometry(a,b,c,d,e,f));this.mergeVertices()};THREE.BoxGeometry.prototype=Object.create(THREE.Geometry.prototype);THREE.BoxGeometry.prototype.constructor=THREE.BoxGeometry;THREE.CubeGeometry=THREE.BoxGeometry;THREE.BoxBufferGeometry=function(a,b,c,d,e,f){function g(a,b,c,d,e,f,g,k,l,L,A){var N=f/l,M=g/L,I=f/2,O=g/2,Q=k/2;g=l+1;for(var P=L+1,T=f=0,J=new THREE.Vector3,C=0;Cm;m++){e[0]=n[g[m]];e[1]=n[g[(m+1)%3]];e.sort(c);var q=e.toString();void 0===f[q]?f[q]={vert1:e[0],vert2:e[1],face1:l,face2:void 0}:f[q].face2=l}e=[];for(q in f)if(g=f[q],void 0===g.face2||h[g.face1].normal.dot(h[g.face2].normal)<=d)l=k[g.vert1],e.push(l.x),e.push(l.y),e.push(l.z),l=k[g.vert2],e.push(l.x),e.push(l.y),e.push(l.z);this.addAttribute("position",new THREE.BufferAttribute(new Float32Array(e),3))};THREE.EdgesGeometry.prototype=Object.create(THREE.BufferGeometry.prototype);THREE.EdgesGeometry.prototype.constructor=THREE.EdgesGeometry;THREE.ExtrudeGeometry=function(a,b){"undefined"!==typeof a&&(THREE.Geometry.call(this),this.type="ExtrudeGeometry",a=Array.isArray(a)?a:[a],this.addShapeList(a,b),this.computeFaceNormals())};THREE.ExtrudeGeometry.prototype=Object.create(THREE.Geometry.prototype);THREE.ExtrudeGeometry.prototype.constructor=THREE.ExtrudeGeometry;THREE.ExtrudeGeometry.prototype.addShapeList=function(a,b){for(var c=a.length,d=0;dNumber.EPSILON){var k=Math.sqrt(h),l=Math.sqrt(f*f+g*g),h=b.x-e/k;b=b.y+d/k;f=((c.x-g/l-h)*g-(c.y+f/l-b)*f)/(d*g-e*f);c=h+d*f-a.x;a=b+e*f-a.y;d=c*c+a*a;if(2>=d)return new THREE.Vector2(c,a);d=Math.sqrt(d/2)}else a=!1,d>Number.EPSILON?f>Number.EPSILON&&(a=!0):d<-Number.EPSILON?f<-Number.EPSILON&&(a=!0):Math.sign(e)===Math.sign(g)&&(a=!0),a?(c=-e,a=d,d=Math.sqrt(h)):(c=d,a=e,d=Math.sqrt(h/2));return new THREE.Vector2(c/d,a/d)}function e(a,b){var c,d;for(C=a.length;0<=--C;){c=C;d=C-1;0>d&&(d=a.length-1);for(var e=0,f=q+2*p,e=0;eMath.abs(b.y-c.y)?[new THREE.Vector2(b.x,1-b.z),new THREE.Vector2(c.x,1-c.z),new THREE.Vector2(d.x,1-d.z),new THREE.Vector2(e.x,1-e.z)]:[new THREE.Vector2(b.y,1-b.z),new THREE.Vector2(c.y,1-c.z),new THREE.Vector2(d.y,1-d.z),new THREE.Vector2(e.y,1-e.z)]}};THREE.ShapeGeometry=function(a,b){THREE.Geometry.call(this);this.type="ShapeGeometry";!1===Array.isArray(a)&&(a=[a]);this.addShapeList(a,b);this.computeFaceNormals()};THREE.ShapeGeometry.prototype=Object.create(THREE.Geometry.prototype);THREE.ShapeGeometry.prototype.constructor=THREE.ShapeGeometry;THREE.ShapeGeometry.prototype.addShapeList=function(a,b){for(var c=0,d=a.length;cNumber.EPSILON&&(h.normalize(),d=Math.acos(THREE.Math.clamp(e[l-1].dot(e[l]),-1,1)),f[l].applyMatrix4(k.makeRotationAxis(h,d))),g[l].crossVectors(e[l],f[l]);if(c)for(d=Math.acos(THREE.Math.clamp(f[0].dot(f[b-1]),-1,1)),d/=b-1,0c&&1===a.x&&(a=new THREE.Vector2(a.x-1,a.y));0===b.x&&0===b.z&&(a=new THREE.Vector2(c/2/Math.PI+.5,a.y));return a.clone()}THREE.Geometry.call(this);this.type="PolyhedronGeometry";this.parameters={vertices:a,indices:b,radius:c,detail:d};c=c||1;d=d||0;for(var k=this,l=0,p=a.length;lq&&(.2>d&&(b[0].x+=1),.2>a&&(b[1].x+=1),.2>n&&(b[2].x+=1));l=0;for(p=this.vertices.length;ln;n++){c[0]=p[e[n]];c[1]=p[e[(n+1)%3]];c.sort(b);var m=c.toString();void 0===d[m]&&(k[2*h]=c[0],k[2*h+1]=c[1],d[m]=!0,h++)}c=new Float32Array(6*h);a=0;for(l=h;an;n++)d=f[k[2*a+n]],h=6*a+3*n,c[h+0]=d.x,c[h+1]=d.y,c[h+2]=d.z;this.addAttribute("position",new THREE.BufferAttribute(c,3))}else if(a instanceof THREE.BufferGeometry){if(null!==a.index){l=a.index.array;f=a.attributes.position;e=a.groups;h=0;0===e.length&&a.addGroup(0,l.length);k=new Uint32Array(2*l.length);g=0;for(p=e.length;gn;n++)c[0]=l[a+n],c[1]=l[a+(n+1)%3],c.sort(b),m=c.toString(),void 0===d[m]&&(k[2*h]=c[0],k[2*h+1]=c[1],d[m]=!0,h++)}c=new Float32Array(6*h);a=0;for(l=h;an;n++)h=6*a+3*n,d=k[2*a+n],c[h+0]=f.getX(d),c[h+1]=f.getY(d),c[h+2]=f.getZ(d)}else for(f=a.attributes.position.array,h=f.length/3,k=h/3,c=new Float32Array(6*h),a=0,l=k;an;n++)h=18*a+6*n,k=9*a+3*n,c[h+0]=f[k],c[h+1]=f[k+1],c[h+2]=f[k+2],d=9*a+(n+1)%3*3,c[h+3]=f[d],c[h+4]=f[d+1],c[h+5]=f[d+2];this.addAttribute("position",new THREE.BufferAttribute(c,3))}};THREE.WireframeGeometry.prototype=Object.create(THREE.BufferGeometry.prototype);THREE.WireframeGeometry.prototype.constructor=THREE.WireframeGeometry;THREE.AxisHelper=function(a){a=a||1;var b=new Float32Array([0,0,0,a,0,0,0,0,0,0,a,0,0,0,0,0,0,a]),c=new Float32Array([1,0,0,1,.6,0,0,1,0,.6,1,0,0,0,1,0,.6,1]);a=new THREE.BufferGeometry;a.addAttribute("position",new THREE.BufferAttribute(b,3));a.addAttribute("color",new THREE.BufferAttribute(c,3));b=new THREE.LineBasicMaterial({vertexColors:THREE.VertexColors});THREE.LineSegments.call(this,a,b)};THREE.AxisHelper.prototype=Object.create(THREE.LineSegments.prototype);THREE.AxisHelper.prototype.constructor=THREE.AxisHelper;THREE.ArrowHelper=function(){var a=new THREE.Geometry;a.vertices.push(new THREE.Vector3(0,0,0),new THREE.Vector3(0,1,0));var b=new THREE.CylinderGeometry(0,.5,1,5,1);b.translate(0,-.5,0);return function(c,d,e,f,g,h){THREE.Object3D.call(this);void 0===f&&(f=16776960);void 0===e&&(e=1);void 0===g&&(g=.2*e);void 0===h&&(h=.2*g);this.position.copy(d);this.line=new THREE.Line(a,new THREE.LineBasicMaterial({color:f}));this.line.matrixAutoUpdate=!1;this.add(this.line);this.cone=new THREE.Mesh(b,new THREE.MeshBasicMaterial({color:f}));this.cone.matrixAutoUpdate=!1;this.add(this.cone);this.setDirection(c);this.setLength(e,g,h)}}();THREE.ArrowHelper.prototype=Object.create(THREE.Object3D.prototype);THREE.ArrowHelper.prototype.constructor=THREE.ArrowHelper;THREE.ArrowHelper.prototype.setDirection=function(){var a=new THREE.Vector3,b;return function(c){.99999c.y?this.quaternion.set(1,0,0,0):(a.set(c.z,0,-c.x).normalize(),b=Math.acos(c.y),this.quaternion.setFromAxisAngle(a,b))}}();THREE.ArrowHelper.prototype.setLength=function(a,b,c){void 0===b&&(b=.2*a);void 0===c&&(c=.2*b);this.line.scale.set(1,Math.max(0,a-b),1);this.line.updateMatrix();this.cone.scale.set(c,b,c);this.cone.position.y=a;this.cone.updateMatrix()};THREE.ArrowHelper.prototype.setColor=function(a){this.line.material.color.set(a);this.cone.material.color.set(a)};THREE.BoxHelper=function(a){var b=new Uint16Array([0,1,1,2,2,3,3,0,4,5,5,6,6,7,7,4,0,4,1,5,2,6,3,7]),c=new Float32Array(24),d=new THREE.BufferGeometry;d.setIndex(new THREE.BufferAttribute(b,1));d.addAttribute("position",new THREE.BufferAttribute(c,3));THREE.LineSegments.call(this,d,new THREE.LineBasicMaterial({color:16776960}));void 0!==a&&this.update(a)};THREE.BoxHelper.prototype=Object.create(THREE.LineSegments.prototype);THREE.BoxHelper.prototype.constructor=THREE.BoxHelper;THREE.BoxHelper.prototype.update=function(){var a=new THREE.Box3;return function(b){a.setFromObject(b);if(!a.isEmpty()){b=a.min;var c=a.max,d=this.geometry.attributes.position,e=d.array;e[0]=c.x;e[1]=c.y;e[2]=c.z;e[3]=b.x;e[4]=c.y;e[5]=c.z;e[6]=b.x;e[7]=b.y;e[8]=c.z;e[9]=c.x;e[10]=b.y;e[11]=c.z;e[12]=c.x;e[13]=c.y;e[14]=b.z;e[15]=b.x;e[16]=c.y;e[17]=b.z;e[18]=b.x;e[19]=b.y;e[20]=b.z;e[21]=c.x;e[22]=b.y;e[23]=b.z;d.needsUpdate=!0;this.geometry.computeBoundingSphere()}}}();THREE.BoundingBoxHelper=function(a,b){var c=void 0!==b?b:8947848;this.object=a;this.box=new THREE.Box3;THREE.Mesh.call(this,new THREE.BoxGeometry(1,1,1),new THREE.MeshBasicMaterial({color:c,wireframe:!0}))};THREE.BoundingBoxHelper.prototype=Object.create(THREE.Mesh.prototype);THREE.BoundingBoxHelper.prototype.constructor=THREE.BoundingBoxHelper;THREE.BoundingBoxHelper.prototype.update=function(){this.box.setFromObject(this.object);this.box.size(this.scale);this.box.center(this.position)};THREE.CameraHelper=function(a){function b(a,b,d){c(a,d);c(b,d)}function c(a,b){d.vertices.push(new THREE.Vector3);d.colors.push(new THREE.Color(b));void 0===f[a]&&(f[a]=[]);f[a].push(d.vertices.length-1)}var d=new THREE.Geometry,e=new THREE.LineBasicMaterial({color:16777215,vertexColors:THREE.FaceColors}),f={};b("n1","n2",16755200);b("n2","n4",16755200);b("n4","n3",16755200);b("n3","n1",16755200);b("f1","f2",16755200);b("f2","f4",16755200);b("f4","f3",16755200);b("f3","f1",16755200);b("n1","f1",16755200);b("n2","f2",16755200);b("n3","f3",16755200);b("n4","f4",16755200);b("p","n1",16711680);b("p","n2",16711680);b("p","n3",16711680);b("p","n4",16711680);b("u1","u2",43775);b("u2","u3",43775);b("u3","u1",43775);b("c","t",16777215);b("p","c",3355443);b("cn1","cn2",3355443);b("cn3","cn4",3355443);b("cf1","cf2",3355443);b("cf3","cf4",3355443);THREE.LineSegments.call(this,d,e);this.camera=a;this.camera.updateProjectionMatrix();this.matrix=a.matrixWorld;this.matrixAutoUpdate=!1;this.pointMap=f;this.update()};THREE.CameraHelper.prototype=Object.create(THREE.LineSegments.prototype);THREE.CameraHelper.prototype.constructor=THREE.CameraHelper;THREE.CameraHelper.prototype.update=function(){function a(a,g,h,k){d.set(g,h,k).unproject(e);a=c[a];if(void 0!==a)for(g=0,h=a.length;gd;d++)c.faces[d].color=this.colors[4>d?0:1];d=new THREE.MeshBasicMaterial({vertexColors:THREE.FaceColors,wireframe:!0});this.lightSphere=new THREE.Mesh(c,d);this.add(this.lightSphere);this.update()};THREE.HemisphereLightHelper.prototype=Object.create(THREE.Object3D.prototype);THREE.HemisphereLightHelper.prototype.constructor=THREE.HemisphereLightHelper;THREE.HemisphereLightHelper.prototype.dispose=function(){this.lightSphere.geometry.dispose();this.lightSphere.material.dispose()};THREE.HemisphereLightHelper.prototype.update=function(){var a=new THREE.Vector3;return function(){this.colors[0].copy(this.light.color).multiplyScalar(this.light.intensity);this.colors[1].copy(this.light.groundColor).multiplyScalar(this.light.intensity);this.lightSphere.lookAt(a.setFromMatrixPosition(this.light.matrixWorld).negate());this.lightSphere.geometry.colorsNeedUpdate=!0}}();THREE.PointLightHelper=function(a,b){this.light=a;this.light.updateMatrixWorld();var c=new THREE.SphereGeometry(b,4,2),d=new THREE.MeshBasicMaterial({wireframe:!0,fog:!1});d.color.copy(this.light.color).multiplyScalar(this.light.intensity);THREE.Mesh.call(this,c,d);this.matrix=this.light.matrixWorld;this.matrixAutoUpdate=!1};THREE.PointLightHelper.prototype=Object.create(THREE.Mesh.prototype);THREE.PointLightHelper.prototype.constructor=THREE.PointLightHelper;THREE.PointLightHelper.prototype.dispose=function(){this.geometry.dispose();this.material.dispose()};THREE.PointLightHelper.prototype.update=function(){this.material.color.copy(this.light.color).multiplyScalar(this.light.intensity)};THREE.SkeletonHelper=function(a){this.bones=this.getBoneList(a);for(var b=new THREE.Geometry,c=0;ch.end&&(h.end=f);c||(c=k)}}for(k in d)h=d[k],this.createAnimation(k,h.start,h.end,a);this.firstAnimation=c};THREE.MorphBlendMesh.prototype.setAnimationDirectionForward=function(a){if(a=this.animationsMap[a])a.direction=1,a.directionBackwards=!1};THREE.MorphBlendMesh.prototype.setAnimationDirectionBackward=function(a){if(a=this.animationsMap[a])a.direction=-1,a.directionBackwards=!0};THREE.MorphBlendMesh.prototype.setAnimationFPS=function(a,b){var c=this.animationsMap[a];c&&(c.fps=b,c.duration=(c.end-c.start)/c.fps)};THREE.MorphBlendMesh.prototype.setAnimationDuration=function(a,b){var c=this.animationsMap[a];c&&(c.duration=b,c.fps=(c.end-c.start)/c.duration)};THREE.MorphBlendMesh.prototype.setAnimationWeight=function(a,b){var c=this.animationsMap[a];c&&(c.weight=b)};THREE.MorphBlendMesh.prototype.setAnimationTime=function(a,b){var c=this.animationsMap[a];c&&(c.time=b)};THREE.MorphBlendMesh.prototype.getAnimationTime=function(a){var b=0;if(a=this.animationsMap[a])b=a.time;return b};THREE.MorphBlendMesh.prototype.getAnimationDuration=function(a){var b=-1;if(a=this.animationsMap[a])b=a.duration;return b};THREE.MorphBlendMesh.prototype.playAnimation=function(a){var b=this.animationsMap[a];b?(b.time=0,b.active=!0):console.warn("THREE.MorphBlendMesh: animation["+a+"] undefined in .playAnimation()")};THREE.MorphBlendMesh.prototype.stopAnimation=function(a){if(a=this.animationsMap[a])a.active=!1};THREE.MorphBlendMesh.prototype.update=function(a){for(var b=0,c=this.animationsList.length;bd.duration||0>d.time)d.direction*=-1,d.time>d.duration&&(d.time=d.duration,d.directionBackwards=!0),0>d.time&&(d.time=0,d.directionBackwards=!1)}else d.time%=d.duration,0>d.time&&(d.time+=d.duration);var f=d.start+THREE.Math.clamp(Math.floor(d.time/e),0,d.length-1),g=d.weight;f!==d.currentFrame&&(this.morphTargetInfluences[d.lastFrame]=0,this.morphTargetInfluences[d.currentFrame]=1*g,this.morphTargetInfluences[f]=0,d.lastFrame=d.currentFrame,d.currentFrame=f);e=d.time%e/e;d.directionBackwards&&(e=1-e);d.currentFrame!==d.lastFrame?(this.morphTargetInfluences[d.currentFrame]=e*g,this.morphTargetInfluences[d.lastFrame]=(1-e)*g):this.morphTargetInfluences[d.currentFrame]=g}}};"use strict";void 0===Date.now&&(Date.now=function(){return(new Date).valueOf()});var TWEEN=TWEEN||function(){var a=[];return{REVISION:"14",getAll:function(){return a},removeAll:function(){a=[]},add:function(c){a.push(c)},remove:function(c){c=a.indexOf(c);-1!==c&&a.splice(c,1)},update:function(c){if(0===a.length)return!1;for(var b=0,c=void 0!==c?c:"undefined"!==typeof window&&void 0!==window.performance&&void 0!==window.performance.now?window.performance.now():Date.now();b(a*=2)?.5*a*a:-.5*(--a*(a-2)-1)}},Cubic:{In:function(a){return a*a*a},Out:function(a){return--a*a*a+1},InOut:function(a){return 1>(a*=2)?.5*a*a*a:.5*((a-=2)*a*a+2)}},Quartic:{In:function(a){return a*a*a*a},Out:function(a){return 1- --a*a*a*a},InOut:function(a){return 1>(a*=2)?.5*a*a*a*a:-.5*((a-=2)*a*a*a-2)}},Quintic:{In:function(a){return a*a*a*a*a},Out:function(a){return--a*a*a*a*a+1},InOut:function(a){return 1>(a*=2)?.5*a*a*a*a*a:.5*((a-=2)*a*a*a*a+2)}},Sinusoidal:{In:function(a){return 1-Math.cos(a*Math.PI/2)},Out:function(a){return Math.sin(a*Math.PI/2)},InOut:function(a){return.5*(1-Math.cos(Math.PI*a))}},Exponential:{In:function(a){return 0===a?0:Math.pow(1024,a-1)},Out:function(a){return 1===a?1:1-Math.pow(2,-10*a)},InOut:function(a){return 0===a?0:1===a?1:1>(a*=2)?.5*Math.pow(1024,a-1):.5*(-Math.pow(2,-10*(a-1))+2)}},Circular:{In:function(a){return 1-Math.sqrt(1-a*a)},Out:function(a){return Math.sqrt(1- --a*a)},InOut:function(a){return 1>(a*=2)?-.5*(Math.sqrt(1-a*a)-1):.5*(Math.sqrt(1-(a-=2)*a)+1)}},Elastic:{In:function(a){var c,b=.1;if(0===a)return 0;if(1===a)return 1;!b||1>b?(b=1,c=.1):c=.4*Math.asin(1/b)/(2*Math.PI);return-(b*Math.pow(2,10*(a-=1))*Math.sin((a-c)*2*Math.PI/.4))},Out:function(a){var c,b=.1;if(0===a)return 0;if(1===a)return 1;!b||1>b?(b=1,c=.1):c=.4*Math.asin(1/b)/(2*Math.PI);return b*Math.pow(2,-10*a)*Math.sin((a-c)*2*Math.PI/.4)+1},InOut:function(a){var c,b=.1;if(0===a)return 0;if(1===a)return 1;!b||1>b?(b=1,c=.1):c=.4*Math.asin(1/b)/(2*Math.PI);return 1>(a*=2)?-.5*b*Math.pow(2,10*(a-=1))*Math.sin((a-c)*2*Math.PI/.4):.5*b*Math.pow(2,-10*(a-=1))*Math.sin((a-c)*2*Math.PI/.4)+1}},Back:{In:function(a){return a*a*(2.70158*a-1.70158)},Out:function(a){return--a*a*(2.70158*a+1.70158)+1},InOut:function(a){return 1>(a*=2)?.5*a*a*(3.5949095*a-2.5949095):.5*((a-=2)*a*(3.5949095*a+2.5949095)+2)}},Bounce:{In:function(a){return 1-TWEEN.Easing.Bounce.Out(1-a)},Out:function(a){return a<1/2.75?7.5625*a*a:a<2/2.75?7.5625*(a-=1.5/2.75)*a+.75:a<2.5/2.75?7.5625*(a-=2.25/2.75)*a+.9375:7.5625*(a-=2.625/2.75)*a+.984375},InOut:function(a){return.5>a?.5*TWEEN.Easing.Bounce.In(2*a):.5*TWEEN.Easing.Bounce.Out(2*a-1)+.5}}};TWEEN.Interpolation={Linear:function(a,c){var b=a.length-1,d=b*c,e=Math.floor(d),g=TWEEN.Interpolation.Utils.Linear;return 0>c?g(a[0],a[1],d):1b?b:e+1],d-e)},Bezier:function(a,c){var b=0,d=a.length-1,e=Math.pow,g=TWEEN.Interpolation.Utils.Bernstein,h;for(h=0;h<=d;h++)b+=e(1-c,d-h)*e(c,h)*a[h]*g(d,h);return b},CatmullRom:function(a,c){var b=a.length-1,d=b*c,e=Math.floor(d),g=TWEEN.Interpolation.Utils.CatmullRom;return a[0]===a[b]?(0>c&&(e=Math.floor(d=b*(1+c))),g(a[(e-1+b)%b],a[e],a[(e+1)%b],a[(e+2)%b],d-e)):0>c?a[0]-(g(a[0],a[0],a[1],a[1],-d)-a[0]):1180){delta=delta-360}else if(delta<-180){delta=360+delta}return delta},initializeNavBall:function(){this.renderer=new THREE.WebGLRenderer({alpha:true,antialias:true});this.renderer.setSize(1,1);this.container.update(this.renderer.domElement);this.resize();Event.observe(window,"resize",this.resize.bind(this));var scene=new THREE.Scene;var camera=new THREE.PerspectiveCamera(32,1,.01,1e3);camera.position.z=190;scene.add(new THREE.AmbientLight(11184810));var light1=new THREE.DirectionalLight(16777215,1);light1.position.set(1500,1500,500);var light2=new THREE.DirectionalLight(16777215,.5);light2.position.set(-1500,-1500,500);scene.add(light1);scene.add(light2);var navballGeometry=new THREE.SphereGeometry(this.displayRadius,48,48);var navballTexture=THREE.ImageUtils.loadTexture("../assets/images/navball.png");navballTexture.anisotropy=this.renderer.getMaxAnisotropy();var navballMaterial=new THREE.MeshPhongMaterial({map:navballTexture,bumpMap:THREE.ImageUtils.loadTexture("../assets/images/navball-normal.png"),bumpScale:.25,shininess:80});this.navballMesh=new THREE.Mesh(navballGeometry,navballMaterial);scene.add(this.navballMesh);var animate=function(){window.setTimeout(function(){requestAnimationFrame(animate)},this.datalink.rate/60);TWEEN.update();this.renderer.render(scene,camera)}.bind(this);requestAnimationFrame(animate)},resize:function(){var width=this.container.getWidth();var height=this.container.getHeight();this.renderer.setSize(width,height)},initializeDatalink:function(){this.datalink.subscribeToData(["n.pitch","n.roll","n.heading"]);this.datalink.addReceiverFunction(this.update.bind(this))}});!function(a,b){"function"==typeof define&&define.amd?define([],function(){return a.Chartist=b()}):"object"==typeof exports?module.exports=b():a.Chartist=b()}(this,function(){var a={version:"0.9.4"};return function(a,b,c){"use strict";c.noop=function(a){return a},c.alphaNumerate=function(a){return String.fromCharCode(97+a%26)},c.extend=function(a){a=a||{};var b=Array.prototype.slice.call(arguments,1);return b.forEach(function(b){for(var d in b)"object"!=typeof b[d]||null===b[d]||b[d]instanceof Array?a[d]=b[d]:a[d]=c.extend({},a[d],b[d])}),a},c.replaceAll=function(a,b,c){return a.replace(new RegExp(b,"g"),c)},c.stripUnit=function(a){return"string"==typeof a&&(a=a.replace(/[^0-9\+-\.]/g,"")),+a},c.ensureUnit=function(a,b){return"number"==typeof a&&(a+=b),a},c.querySelector=function(a){return a instanceof Node?a:b.querySelector(a)},c.times=function(a){return Array.apply(null,new Array(a))},c.sum=function(a,b){return a+(b?b:0)},c.mapMultiply=function(a){return function(b){return b*a}},c.mapAdd=function(a){return function(b){return b+a}},c.serialMap=function(a,b){var d=[],e=Math.max.apply(null,a.map(function(a){return a.length}));return c.times(e).forEach(function(c,e){var f=a.map(function(a){return a[e]});d[e]=b.apply(null,f)}),d},c.roundWithPrecision=function(a,b){var d=Math.pow(10,b||c.precision);return Math.round(a*d)/d},c.precision=8,c.escapingMap={"&":"&","<":"<",">":">",'"':""","'":"'"},c.serialize=function(a){return null===a||void 0===a?a:("number"==typeof a?a=""+a:"object"==typeof a&&(a=JSON.stringify({data:a})),Object.keys(c.escapingMap).reduce(function(a,b){return c.replaceAll(a,b,c.escapingMap[b])},a))},c.deserialize=function(a){if("string"!=typeof a)return a;a=Object.keys(c.escapingMap).reduce(function(a,b){return c.replaceAll(a,c.escapingMap[b],b)},a);try{a=JSON.parse(a),a=void 0!==a.data?a.data:a}catch(b){}return a},c.createSvg=function(a,b,d,e){var f;return b=b||"100%",d=d||"100%",Array.prototype.slice.call(a.querySelectorAll("svg")).filter(function(a){return a.getAttributeNS("http://www.w3.org/2000/xmlns/",c.xmlNs.prefix)}).forEach(function(b){a.removeChild(b)}),f=new c.Svg("svg").attr({width:b,height:d}).addClass(e).attr({style:"width: "+b+"; height: "+d+";"}),a.appendChild(f._node),f},c.reverseData=function(a){a.labels.reverse(),a.series.reverse();for(var b=0;bf.high&&(f.high=c),h&&ck,m=e?c.rho(j.range):0;if(e&&c.projectLength(a,1,j)>=d)j.step=1;else if(e&&m=d)j.step=m;else for(;;){if(l&&c.projectLength(a,j.step,j)<=d)j.step*=2;else{if(l||!(c.projectLength(a,j.step/2,j)>=d))break;if(j.step/=2,e&&j.step%1!==0){j.step*=2;break}}if(i++>1e3)throw new Error("Exceeded maximum number of iterations while optimizing scale step!")}for(g=j.min,h=j.max;g+j.step<=j.low;)g+=j.step;for(;h-j.step>=j.high;)h-=j.step;for(j.min=g,j.max=h,j.range=j.max-j.min,j.values=[],f=j.min;f<=j.max;f+=j.step)j.values.push(c.roundWithPrecision(f));return j},c.polarToCartesian=function(a,b,c,d){var e=(d-90)*Math.PI/180;return{x:a+c*Math.cos(e),y:b+c*Math.sin(e)}},c.createChartRect=function(a,b,d){var e=!(!b.axisX&&!b.axisY),f=e?b.axisY.offset:0,g=e?b.axisX.offset:0,h=a.width()||c.stripUnit(b.width)||0,i=a.height()||c.stripUnit(b.height)||0,j=c.normalizePadding(b.chartPadding,d);h=Math.max(h,f+j.left+j.right),i=Math.max(i,g+j.top+j.bottom);var k={padding:j,width:function(){return this.x2-this.x1},height:function(){return this.y1-this.y2}};return e?("start"===b.axisX.position?(k.y2=j.top+g,k.y1=Math.max(i-j.bottom,k.y2+1)):(k.y2=j.top,k.y1=Math.max(i-j.bottom-g,k.y2+1)),"start"===b.axisY.position?(k.x1=j.left+f,k.x2=Math.max(h-j.right,k.x1+1)):(k.x1=j.left,k.x2=Math.max(h-j.right-f,k.x1+1))):(k.x1=j.left,k.x2=Math.max(h-j.right,k.x1+1),k.y2=j.top,k.y1=Math.max(i-j.bottom,k.y2+1)),k},c.createGrid=function(a,b,d,e,f,g,h,i){var j={};j[d.units.pos+"1"]=a,j[d.units.pos+"2"]=a,j[d.counterUnits.pos+"1"]=e,j[d.counterUnits.pos+"2"]=e+f;var k=g.elem("line",j,h.join(" "));i.emit("draw",c.extend({type:"grid",axis:d,index:b,group:g,element:k},j))},c.createLabel=function(a,b,d,e,f,g,h,i,j,k,l){var m,n={};if(n[f.units.pos]=a+h[f.units.pos],n[f.counterUnits.pos]=h[f.counterUnits.pos],n[f.units.len]=b,n[f.counterUnits.len]=g-10,k){var o=''+e[d]+"";m=i.foreignObject(o,c.extend({style:"overflow: visible;"},n))}else m=i.elem("text",n,j.join(" ")).text(e[d]);l.emit("draw",c.extend({type:"label",axis:f,index:d,group:i,element:m,text:e[d]},n))},c.getSeriesOption=function(a,b,c){if(a.name&&b.series&&b.series[a.name]){var d=b.series[a.name];return d.hasOwnProperty(c)?d[c]:b[c]}return b[c]},c.optionsProvider=function(b,d,e){function f(b){var f=h;if(h=c.extend({},j),d)for(i=0;i1){var i=[];return h.forEach(function(a){i.push(g(a.pathCoordinates,a.valueData))}),c.Svg.Path.join(i)}if(a=h[0].pathCoordinates,d=h[0].valueData,a.length<=4)return c.Interpolation.none()(a,d);for(var j,k=(new c.Svg.Path).move(a[0],a[1],!1,d[0]),l=0,m=a.length;m-2*!j>l;l+=2){var n=[{x:+a[l-2],y:+a[l-1]},{x:+a[l],y:+a[l+1]},{x:+a[l+2],y:+a[l+3]},{x:+a[l+4],y:+a[l+5]}];j?l?m-4===l?n[3]={x:+a[0],y:+a[1]}:m-2===l&&(n[2]={x:+a[0],y:+a[1]},n[3]={x:+a[2],y:+a[3]}):n[0]={x:+a[m-2],y:+a[m-1]}:m-4===l?n[3]=n[2]:l||(n[0]={x:+a[l],y:+a[l+1]}),k.curve(e*(-n[0].x+6*n[1].x+n[2].x)/6+f*n[2].x,e*(-n[0].y+6*n[1].y+n[2].y)/6+f*n[2].y,e*(n[1].x+6*n[2].x-n[3].x)/6+f*n[2].x,e*(n[1].y+6*n[2].y-n[3].y)/6+f*n[2].y,n[2].x,n[2].y,!1,d[(l+2)/2])}return k}},c.Interpolation.step=function(a){var b={postpone:!0};return a=c.extend({},b,a),function(b,d){for(var e=new c.Svg.Path,f=!0,g=2;g1}).map(function(a){var b=a.pathElements[0],c=a.pathElements[a.pathElements.length-1];return a.clone(!0).position(0).remove(1).move(b.x,r).line(b.x,b.y).position(a.pathElements.length+1).line(c.x,r)}).forEach(function(h){var k=i.elem("path",{d:h.stringify()},a.classNames.area,!0).attr({values:b.normalized[g]},c.xmlNs.uri);this.eventEmitter.emit("draw",{type:"area",values:b.normalized[g],path:h.clone(),series:f,seriesIndex:g,axisX:d,axisY:e,chartRect:j,index:g,group:i,element:k})}.bind(this))}}.bind(this)),this.eventEmitter.emit("created",{bounds:e.bounds,chartRect:j,axisX:d,axisY:e,svg:this.svg,options:a})}function e(a,b,d,e){c.Line["super"].constructor.call(this,a,b,f,c.extend({},f,d),e)}var f={axisX:{offset:30,position:"end",labelOffset:{x:0,y:0},showLabel:!0,showGrid:!0,labelInterpolationFnc:c.noop,type:void 0},axisY:{offset:40,position:"start",labelOffset:{x:0,y:0},showLabel:!0,showGrid:!0,labelInterpolationFnc:c.noop,type:void 0,scaleMinSpace:20,onlyInteger:!1},width:void 0,height:void 0,showLine:!0,showPoint:!0,showArea:!1,areaBase:0,lineSmooth:!0,low:void 0,high:void 0,chartPadding:{top:15,right:15,bottom:5,left:10},fullWidth:!1,reverseData:!1,classNames:{chart:"ct-chart-line",label:"ct-label",labelGroup:"ct-labels",series:"ct-series",line:"ct-line",point:"ct-point",area:"ct-area",grid:"ct-grid",gridGroup:"ct-grids",vertical:"ct-vertical",horizontal:"ct-horizontal",start:"ct-start",end:"ct-end"}};c.Line=c.Base.extend({constructor:e,createChart:d})}(window,document,a),function(a,b,c){"use strict";function d(a){var b,d={raw:this.data,normalized:a.distributeSeries?c.getDataArray(this.data,a.reverseData,a.horizontalBars?"x":"y").map(function(a){return[a]}):c.getDataArray(this.data,a.reverseData,a.horizontalBars?"x":"y")};this.svg=c.createSvg(this.container,a.width,a.height,a.classNames.chart+(a.horizontalBars?" "+a.classNames.horizontalBars:""));var e=this.svg.elem("g").addClass(a.classNames.gridGroup),g=this.svg.elem("g"),h=this.svg.elem("g").addClass(a.classNames.labelGroup);if(a.stackBars){var i=c.serialMap(d.normalized,function(){return Array.prototype.slice.call(arguments).map(function(a){return a}).reduce(function(a,b){return{x:a.x+b.x||0,y:a.y+b.y||0}},{x:0,y:0})});b=c.getHighLow([i],c.extend({},a,{referenceValue:0}),a.horizontalBars?"x":"y")}else b=c.getHighLow(d.normalized,c.extend({},a,{referenceValue:0}),a.horizontalBars?"x":"y");b.high=+a.high||(0===a.high?0:b.high),b.low=+a.low||(0===a.low?0:b.low);var j,k,l,m,n,o=c.createChartRect(this.svg,a,f.padding);k=a.distributeSeries&&a.stackBars?d.raw.labels.slice(0,1):d.raw.labels,a.horizontalBars?(j=m=void 0===a.axisX.type?new c.AutoScaleAxis(c.Axis.units.x,d,o,c.extend({},a.axisX,{highLow:b,referenceValue:0})):a.axisX.type.call(c,c.Axis.units.x,d,o,c.extend({},a.axisX,{highLow:b,referenceValue:0})),l=n=void 0===a.axisY.type?new c.StepAxis(c.Axis.units.y,d,o,{ticks:k}):a.axisY.type.call(c,c.Axis.units.y,d,o,a.axisY)):(l=m=void 0===a.axisX.type?new c.StepAxis(c.Axis.units.x,d,o,{ticks:k}):a.axisX.type.call(c,c.Axis.units.x,d,o,a.axisX),j=n=void 0===a.axisY.type?new c.AutoScaleAxis(c.Axis.units.y,d,o,c.extend({},a.axisY,{highLow:b,referenceValue:0})):a.axisY.type.call(c,c.Axis.units.y,d,o,c.extend({},a.axisY,{highLow:b,referenceValue:0})));var p=a.horizontalBars?o.x1+j.projectValue(0):o.y1-j.projectValue(0),q=[];l.createGridAndLabels(e,h,this.supportsForeignObject,a,this.eventEmitter),j.createGridAndLabels(e,h,this.supportsForeignObject,a,this.eventEmitter),d.raw.series.forEach(function(b,e){var f,h,i=e-(d.raw.series.length-1)/2;f=a.distributeSeries&&!a.stackBars?l.axisLength/d.normalized.length/2:a.distributeSeries&&a.stackBars?l.axisLength/2:l.axisLength/d.normalized[e].length/2,h=g.elem("g"),h.attr({"series-name":b.name,meta:c.serialize(b.meta)},c.xmlNs.uri),h.addClass([a.classNames.series,b.className||a.classNames.series+"-"+c.alphaNumerate(e)].join(" ")),d.normalized[e].forEach(function(g,k){var r,s,t,u;if(u=a.distributeSeries&&!a.stackBars?e:a.distributeSeries&&a.stackBars?0:k,r=a.horizontalBars?{x:o.x1+j.projectValue(g&&g.x?g.x:0,k,d.normalized[e]),y:o.y1-l.projectValue(g&&g.y?g.y:0,u,d.normalized[e])}:{x:o.x1+l.projectValue(g&&g.x?g.x:0,u,d.normalized[e]),y:o.y1-j.projectValue(g&&g.y?g.y:0,k,d.normalized[e])},l instanceof c.StepAxis&&(l.options.stretch||(r[l.units.pos]+=f*(a.horizontalBars?-1:1)),r[l.units.pos]+=a.stackBars||a.distributeSeries?0:i*a.seriesBarDistance*(a.horizontalBars?-1:1)),t=q[k]||p,q[k]=t-(p-r[l.counterUnits.pos]),void 0!==g){var v={};v[l.units.pos+"1"]=r[l.units.pos],v[l.units.pos+"2"]=r[l.units.pos],v[l.counterUnits.pos+"1"]=a.stackBars?t:p,v[l.counterUnits.pos+"2"]=a.stackBars?q[k]:r[l.counterUnits.pos],v.x1=Math.min(Math.max(v.x1,o.x1),o.x2),v.x2=Math.min(Math.max(v.x2,o.x1),o.x2),v.y1=Math.min(Math.max(v.y1,o.y2),o.y1),v.y2=Math.min(Math.max(v.y2,o.y2),o.y1),s=h.elem("line",v,a.classNames.bar).attr({value:[g.x,g.y].filter(function(a){return a}).join(","),meta:c.getMetaData(b,k)},c.xmlNs.uri),this.eventEmitter.emit("draw",c.extend({type:"bar",value:g,index:k,meta:c.getMetaData(b,k),series:b,seriesIndex:e,axisX:m,axisY:n,chartRect:o,group:h,element:s},v))}}.bind(this))}.bind(this)),this.eventEmitter.emit("created",{bounds:j.bounds,chartRect:o,axisX:m,axisY:n,svg:this.svg,options:a})}function e(a,b,d,e){c.Bar["super"].constructor.call(this,a,b,f,c.extend({},f,d),e)}var f={axisX:{offset:30,position:"end",labelOffset:{x:0,y:0},showLabel:!0,showGrid:!0,labelInterpolationFnc:c.noop,scaleMinSpace:30,onlyInteger:!1},axisY:{offset:40,position:"start",labelOffset:{x:0,y:0},showLabel:!0,showGrid:!0,labelInterpolationFnc:c.noop,scaleMinSpace:20,onlyInteger:!1},width:void 0,height:void 0,high:void 0,low:void 0,onlyInteger:!1,chartPadding:{top:15,right:15,bottom:5,left:10},seriesBarDistance:15,stackBars:!1,horizontalBars:!1,distributeSeries:!1,reverseData:!1,classNames:{chart:"ct-chart-bar",horizontalBars:"ct-horizontal-bars",label:"ct-label",labelGroup:"ct-labels",series:"ct-series",bar:"ct-bar",grid:"ct-grid",gridGroup:"ct-grids",vertical:"ct-vertical",horizontal:"ct-horizontal",start:"ct-start",end:"ct-end"}};c.Bar=c.Base.extend({constructor:e,createChart:d})}(window,document,a),function(a,b,c){"use strict";function d(a,b,c){var d=b.x>a.x;return d&&"explode"===c||!d&&"implode"===c?"start":d&&"implode"===c||!d&&"explode"===c?"end":"middle"}function e(a){var b,e,f,h,i,j=[],k=a.startAngle,l=c.getDataArray(this.data,a.reverseData);this.svg=c.createSvg(this.container,a.width,a.height,a.donut?a.classNames.chartDonut:a.classNames.chartPie),e=c.createChartRect(this.svg,a,g.padding),f=Math.min(e.width()/2,e.height()/2),i=a.total||l.reduce(function(a,b){return a+b},0),f-=a.donut?a.donutWidth/2:0,h="outside"===a.labelPosition||a.donut?f:"center"===a.labelPosition?0:f/2,h+=a.labelOffset;var m={x:e.x1+e.width()/2,y:e.y2+e.height()/2},n=1===this.data.series.filter(function(a){return a.hasOwnProperty("value")?0!==a.value:0!==a}).length;a.showLabel&&(b=this.svg.elem("g",null,null,!0));for(var o=0;o180,0,r.x,r.y);a.donut||t.line(m.x,m.y);var u=j[o].elem("path",{d:t.stringify()},a.donut?a.classNames.sliceDonut:a.classNames.slicePie);if(u.attr({value:l[o],meta:c.serialize(p.meta)},c.xmlNs.uri),a.donut&&u.attr({style:"stroke-width: "+ +a.donutWidth+"px"}),this.eventEmitter.emit("draw",{type:"slice",value:l[o],totalDataSum:i,index:o,meta:p.meta,series:p,group:j[o],element:u,path:t.clone(),center:m,radius:f,startAngle:k,endAngle:q}),a.showLabel){var v=c.polarToCartesian(m.x,m.y,h,k+(q-k)/2),w=a.labelInterpolationFnc(this.data.labels?this.data.labels[o]:l[o],o);if(w||0===w){var x=b.elem("text",{dx:v.x,dy:v.y,"text-anchor":d(m,v,a.labelDirection)},a.classNames.label).text(""+w);this.eventEmitter.emit("draw",{type:"label",index:o,group:b,element:x,text:""+w,x:v.x,y:v.y})}}k=q}this.eventEmitter.emit("created",{chartRect:e,svg:this.svg,options:a})}function f(a,b,d,e){c.Pie["super"].constructor.call(this,a,b,g,c.extend({},g,d),e)}var g={width:void 0,height:void 0,chartPadding:5,classNames:{chartPie:"ct-chart-pie",chartDonut:"ct-chart-donut",series:"ct-series",slicePie:"ct-slice-pie",sliceDonut:"ct-slice-donut",label:"ct-label"},startAngle:0,total:void 0,donut:!1,donutWidth:60,showLabel:!0,labelOffset:0,labelPosition:"inside",labelInterpolationFnc:c.noop,labelDirection:"neutral",reverseData:!1};c.Pie=c.Base.extend({constructor:f,createChart:e,determineAnchorPosition:d})}(window,document,a),a});var AltitudeTracker=Class.create({initialize:function(datalink,altitudeTrackerId,options){this.datalink=datalink;this.altitudeTrackerId=altitudeTrackerId;this.altitudeTracker=$(this.altitudeTrackerId);this.options=Object.extend({maxDataPoints:10},options);this.altitudeData=[];this.heightFromTerrainData=[];this.initializeDatalink()},update:function(data){this.altitudeData.push(data["v.altitude"]);if(data["v.terrainHeight"]>-1&&data["v.heightFromTerrain"]>-1){this.heightFromTerrainData.push(data["v.terrainHeight"])}else{this.heightFromTerrainData.push(0)}if(this.altitudeData.length>=this.options.maxDataPoints){this.altitudeData.shift()}if(this.heightFromTerrainData.length>=this.options.maxDataPoints){this.heightFromTerrainData.shift()}if(!this.altitudeTrackerChart){this.initializeChart()}window.requestAnimationFrame(function(){this.altitudeTrackerChart.update(this.generateData())}.bind(this))},initializeDatalink:function(){this.datalink.subscribeToData(["v.altitude","v.terrainHeight","v.heightFromTerrain"]);this.datalink.addReceiverFunction(this.update.bind(this))},generateData:function(){var labelSize=Math.max(this.altitudeData.length,this.heightFromTerrainData.length);var labels=[];for(var i=0;i -1, + Gecko: ua.indexOf('Gecko') > -1 && ua.indexOf('KHTML') === -1, + MobileSafari: /Apple.*Mobile/.test(ua) + } + })(), + + BrowserFeatures: { + XPath: !!document.evaluate, + + SelectorsAPI: !!document.querySelector, + + ElementExtensions: (function() { + var constructor = window.Element || window.HTMLElement; + return !!(constructor && constructor.prototype); + })(), + SpecificElementExtensions: (function() { + if (typeof window.HTMLDivElement !== 'undefined') + return true; + + var div = document.createElement('div'), + form = document.createElement('form'), + isSupported = false; + + if (div['__proto__'] && (div['__proto__'] !== form['__proto__'])) { + isSupported = true; + } + + div = form = null; + + return isSupported; + })() + }, + + ScriptFragment: ']*>([\\S\\s]*?)<\/script\\s*>', + JSONFilter: /^\/\*-secure-([\s\S]*)\*\/\s*$/, + + emptyFunction: function() { }, + + K: function(x) { return x } +}; + +if (Prototype.Browser.MobileSafari) + Prototype.BrowserFeatures.SpecificElementExtensions = false; +/* Based on Alex Arnell's inheritance implementation. */ + +var Class = (function() { + + var IS_DONTENUM_BUGGY = (function(){ + for (var p in { toString: 1 }) { + if (p === 'toString') return false; + } + return true; + })(); + + function subclass() {}; + function create() { + var parent = null, properties = $A(arguments); + if (Object.isFunction(properties[0])) + parent = properties.shift(); + + function klass() { + this.initialize.apply(this, arguments); + } + + Object.extend(klass, Class.Methods); + klass.superclass = parent; + klass.subclasses = []; + + if (parent) { + subclass.prototype = parent.prototype; + klass.prototype = new subclass; + parent.subclasses.push(klass); + } + + for (var i = 0, length = properties.length; i < length; i++) + klass.addMethods(properties[i]); + + if (!klass.prototype.initialize) + klass.prototype.initialize = Prototype.emptyFunction; + + klass.prototype.constructor = klass; + return klass; + } + + function addMethods(source) { + var ancestor = this.superclass && this.superclass.prototype, + properties = Object.keys(source); + + if (IS_DONTENUM_BUGGY) { + if (source.toString != Object.prototype.toString) + properties.push("toString"); + if (source.valueOf != Object.prototype.valueOf) + properties.push("valueOf"); + } + + for (var i = 0, length = properties.length; i < length; i++) { + var property = properties[i], value = source[property]; + if (ancestor && Object.isFunction(value) && + value.argumentNames()[0] == "$super") { + var method = value; + value = (function(m) { + return function() { return ancestor[m].apply(this, arguments); }; + })(property).wrap(method); + + value.valueOf = (function(method) { + return function() { return method.valueOf.call(method); }; + })(method); + + value.toString = (function(method) { + return function() { return method.toString.call(method); }; + })(method); + } + this.prototype[property] = value; + } + + return this; + } + + return { + create: create, + Methods: { + addMethods: addMethods + } + }; +})(); +(function() { + + var _toString = Object.prototype.toString, + _hasOwnProperty = Object.prototype.hasOwnProperty, + NULL_TYPE = 'Null', + UNDEFINED_TYPE = 'Undefined', + BOOLEAN_TYPE = 'Boolean', + NUMBER_TYPE = 'Number', + STRING_TYPE = 'String', + OBJECT_TYPE = 'Object', + FUNCTION_CLASS = '[object Function]', + BOOLEAN_CLASS = '[object Boolean]', + NUMBER_CLASS = '[object Number]', + STRING_CLASS = '[object String]', + ARRAY_CLASS = '[object Array]', + DATE_CLASS = '[object Date]', + NATIVE_JSON_STRINGIFY_SUPPORT = window.JSON && + typeof JSON.stringify === 'function' && + JSON.stringify(0) === '0' && + typeof JSON.stringify(Prototype.K) === 'undefined'; + + + + var DONT_ENUMS = ['toString', 'toLocaleString', 'valueOf', + 'hasOwnProperty', 'isPrototypeOf', 'propertyIsEnumerable', 'constructor']; + + var IS_DONTENUM_BUGGY = (function(){ + for (var p in { toString: 1 }) { + if (p === 'toString') return false; + } + return true; + })(); + + function Type(o) { + switch(o) { + case null: return NULL_TYPE; + case (void 0): return UNDEFINED_TYPE; + } + var type = typeof o; + switch(type) { + case 'boolean': return BOOLEAN_TYPE; + case 'number': return NUMBER_TYPE; + case 'string': return STRING_TYPE; + } + return OBJECT_TYPE; + } + + function extend(destination, source) { + for (var property in source) + destination[property] = source[property]; + return destination; + } + + function inspect(object) { + try { + if (isUndefined(object)) return 'undefined'; + if (object === null) return 'null'; + return object.inspect ? object.inspect() : String(object); + } catch (e) { + if (e instanceof RangeError) return '...'; + throw e; + } + } + + function toJSON(value) { + return Str('', { '': value }, []); + } + + function Str(key, holder, stack) { + var value = holder[key]; + if (Type(value) === OBJECT_TYPE && typeof value.toJSON === 'function') { + value = value.toJSON(key); + } + + var _class = _toString.call(value); + + switch (_class) { + case NUMBER_CLASS: + case BOOLEAN_CLASS: + case STRING_CLASS: + value = value.valueOf(); + } + + switch (value) { + case null: return 'null'; + case true: return 'true'; + case false: return 'false'; + } + + var type = typeof value; + switch (type) { + case 'string': + return value.inspect(true); + case 'number': + return isFinite(value) ? String(value) : 'null'; + case 'object': + + for (var i = 0, length = stack.length; i < length; i++) { + if (stack[i] === value) { + throw new TypeError("Cyclic reference to '" + value + "' in object"); + } + } + stack.push(value); + + var partial = []; + if (_class === ARRAY_CLASS) { + for (var i = 0, length = value.length; i < length; i++) { + var str = Str(i, value, stack); + partial.push(typeof str === 'undefined' ? 'null' : str); + } + partial = '[' + partial.join(',') + ']'; + } else { + var keys = Object.keys(value); + for (var i = 0, length = keys.length; i < length; i++) { + var key = keys[i], str = Str(key, value, stack); + if (typeof str !== "undefined") { + partial.push(key.inspect(true)+ ':' + str); + } + } + partial = '{' + partial.join(',') + '}'; + } + stack.pop(); + return partial; + } + } + + function stringify(object) { + return JSON.stringify(object); + } + + function toQueryString(object) { + return $H(object).toQueryString(); + } + + function toHTML(object) { + return object && object.toHTML ? object.toHTML() : String.interpret(object); + } + + function keys(object) { + if (Type(object) !== OBJECT_TYPE) { throw new TypeError(); } + var results = []; + for (var property in object) { + if (_hasOwnProperty.call(object, property)) + results.push(property); + } + + if (IS_DONTENUM_BUGGY) { + for (var i = 0; property = DONT_ENUMS[i]; i++) { + if (_hasOwnProperty.call(object, property)) + results.push(property); + } + } + + return results; + } + + function values(object) { + var results = []; + for (var property in object) + results.push(object[property]); + return results; + } + + function clone(object) { + return extend({ }, object); + } + + function isElement(object) { + return !!(object && object.nodeType == 1); + } + + function isArray(object) { + return _toString.call(object) === ARRAY_CLASS; + } + + var hasNativeIsArray = (typeof Array.isArray == 'function') + && Array.isArray([]) && !Array.isArray({}); + + if (hasNativeIsArray) { + isArray = Array.isArray; + } + + function isHash(object) { + return object instanceof Hash; + } + + function isFunction(object) { + return _toString.call(object) === FUNCTION_CLASS; + } + + function isString(object) { + return _toString.call(object) === STRING_CLASS; + } + + function isNumber(object) { + return _toString.call(object) === NUMBER_CLASS; + } + + function isDate(object) { + return _toString.call(object) === DATE_CLASS; + } + + function isUndefined(object) { + return typeof object === "undefined"; + } + + extend(Object, { + extend: extend, + inspect: inspect, + toJSON: NATIVE_JSON_STRINGIFY_SUPPORT ? stringify : toJSON, + toQueryString: toQueryString, + toHTML: toHTML, + keys: Object.keys || keys, + values: values, + clone: clone, + isElement: isElement, + isArray: isArray, + isHash: isHash, + isFunction: isFunction, + isString: isString, + isNumber: isNumber, + isDate: isDate, + isUndefined: isUndefined + }); +})(); +Object.extend(Function.prototype, (function() { + var slice = Array.prototype.slice; + + function update(array, args) { + var arrayLength = array.length, length = args.length; + while (length--) array[arrayLength + length] = args[length]; + return array; + } + + function merge(array, args) { + array = slice.call(array, 0); + return update(array, args); + } + + function argumentNames() { + var names = this.toString().match(/^[\s\(]*function[^(]*\(([^)]*)\)/)[1] + .replace(/\/\/.*?[\r\n]|\/\*(?:.|[\r\n])*?\*\//g, '') + .replace(/\s+/g, '').split(','); + return names.length == 1 && !names[0] ? [] : names; + } + + + function bind(context) { + if (arguments.length < 2 && Object.isUndefined(arguments[0])) + return this; + + if (!Object.isFunction(this)) + throw new TypeError("The object is not callable."); + + var nop = function() {}; + var __method = this, args = slice.call(arguments, 1); + + var bound = function() { + var a = merge(args, arguments); + var c = this instanceof bound ? this : context; + return __method.apply(c, a); + }; + + nop.prototype = this.prototype; + bound.prototype = new nop(); + + return bound; + } + + function bindAsEventListener(context) { + var __method = this, args = slice.call(arguments, 1); + return function(event) { + var a = update([event || window.event], args); + return __method.apply(context, a); + } + } + + function curry() { + if (!arguments.length) return this; + var __method = this, args = slice.call(arguments, 0); + return function() { + var a = merge(args, arguments); + return __method.apply(this, a); + } + } + + function delay(timeout) { + var __method = this, args = slice.call(arguments, 1); + timeout = timeout * 1000; + return window.setTimeout(function() { + return __method.apply(__method, args); + }, timeout); + } + + function defer() { + var args = update([0.01], arguments); + return this.delay.apply(this, args); + } + + function wrap(wrapper) { + var __method = this; + return function() { + var a = update([__method.bind(this)], arguments); + return wrapper.apply(this, a); + } + } + + function methodize() { + if (this._methodized) return this._methodized; + var __method = this; + return this._methodized = function() { + var a = update([this], arguments); + return __method.apply(null, a); + }; + } + + var extensions = { + argumentNames: argumentNames, + bindAsEventListener: bindAsEventListener, + curry: curry, + delay: delay, + defer: defer, + wrap: wrap, + methodize: methodize + }; + + if (!Function.prototype.bind) + extensions.bind = bind; + + return extensions; +})()); + + + +(function(proto) { + + + function toISOString() { + return this.getUTCFullYear() + '-' + + (this.getUTCMonth() + 1).toPaddedString(2) + '-' + + this.getUTCDate().toPaddedString(2) + 'T' + + this.getUTCHours().toPaddedString(2) + ':' + + this.getUTCMinutes().toPaddedString(2) + ':' + + this.getUTCSeconds().toPaddedString(2) + 'Z'; + } + + + function toJSON() { + return this.toISOString(); + } + + if (!proto.toISOString) proto.toISOString = toISOString; + if (!proto.toJSON) proto.toJSON = toJSON; + +})(Date.prototype); + + +RegExp.prototype.match = RegExp.prototype.test; + +RegExp.escape = function(str) { + return String(str).replace(/([.*+?^=!:${}()|[\]\/\\])/g, '\\$1'); +}; +var PeriodicalExecuter = Class.create({ + initialize: function(callback, frequency) { + this.callback = callback; + this.frequency = frequency; + this.currentlyExecuting = false; + + this.registerCallback(); + }, + + registerCallback: function() { + this.timer = setInterval(this.onTimerEvent.bind(this), this.frequency * 1000); + }, + + execute: function() { + this.callback(this); + }, + + stop: function() { + if (!this.timer) return; + clearInterval(this.timer); + this.timer = null; + }, + + onTimerEvent: function() { + if (!this.currentlyExecuting) { + try { + this.currentlyExecuting = true; + this.execute(); + this.currentlyExecuting = false; + } catch(e) { + this.currentlyExecuting = false; + throw e; + } + } + } +}); +Object.extend(String, { + interpret: function(value) { + return value == null ? '' : String(value); + }, + specialChar: { + '\b': '\\b', + '\t': '\\t', + '\n': '\\n', + '\f': '\\f', + '\r': '\\r', + '\\': '\\\\' + } +}); + +Object.extend(String.prototype, (function() { + var NATIVE_JSON_PARSE_SUPPORT = window.JSON && + typeof JSON.parse === 'function' && + JSON.parse('{"test": true}').test; + + function prepareReplacement(replacement) { + if (Object.isFunction(replacement)) return replacement; + var template = new Template(replacement); + return function(match) { return template.evaluate(match) }; + } + + function isNonEmptyRegExp(regexp) { + return regexp.source && regexp.source !== '(?:)'; + } + + + function gsub(pattern, replacement) { + var result = '', source = this, match; + replacement = prepareReplacement(replacement); + + if (Object.isString(pattern)) + pattern = RegExp.escape(pattern); + + if (!(pattern.length || isNonEmptyRegExp(pattern))) { + replacement = replacement(''); + return replacement + source.split('').join(replacement) + replacement; + } + + while (source.length > 0) { + match = source.match(pattern) + if (match && match[0].length > 0) { + result += source.slice(0, match.index); + result += String.interpret(replacement(match)); + source = source.slice(match.index + match[0].length); + } else { + result += source, source = ''; + } + } + return result; + } + + function sub(pattern, replacement, count) { + replacement = prepareReplacement(replacement); + count = Object.isUndefined(count) ? 1 : count; + + return this.gsub(pattern, function(match) { + if (--count < 0) return match[0]; + return replacement(match); + }); + } + + function scan(pattern, iterator) { + this.gsub(pattern, iterator); + return String(this); + } + + function truncate(length, truncation) { + length = length || 30; + truncation = Object.isUndefined(truncation) ? '...' : truncation; + return this.length > length ? + this.slice(0, length - truncation.length) + truncation : String(this); + } + + function strip() { + return this.replace(/^\s+/, '').replace(/\s+$/, ''); + } + + function stripTags() { + return this.replace(/<\w+(\s+("[^"]*"|'[^']*'|[^>])+)?>|<\/\w+>/gi, ''); + } + + function stripScripts() { + return this.replace(new RegExp(Prototype.ScriptFragment, 'img'), ''); + } + + function extractScripts() { + var matchAll = new RegExp(Prototype.ScriptFragment, 'img'), + matchOne = new RegExp(Prototype.ScriptFragment, 'im'); + return (this.match(matchAll) || []).map(function(scriptTag) { + return (scriptTag.match(matchOne) || ['', ''])[1]; + }); + } + + function evalScripts() { + return this.extractScripts().map(function(script) { return eval(script); }); + } + + function escapeHTML() { + return this.replace(/&/g,'&').replace(//g,'>'); + } + + function unescapeHTML() { + return this.stripTags().replace(/</g,'<').replace(/>/g,'>').replace(/&/g,'&'); + } + + + function toQueryParams(separator) { + var match = this.strip().match(/([^?#]*)(#.*)?$/); + if (!match) return { }; + + return match[1].split(separator || '&').inject({ }, function(hash, pair) { + if ((pair = pair.split('='))[0]) { + var key = decodeURIComponent(pair.shift()), + value = pair.length > 1 ? pair.join('=') : pair[0]; + + if (value != undefined) { + value = value.gsub('+', ' '); + value = decodeURIComponent(value); + } + + if (key in hash) { + if (!Object.isArray(hash[key])) hash[key] = [hash[key]]; + hash[key].push(value); + } + else hash[key] = value; + } + return hash; + }); + } + + function toArray() { + return this.split(''); + } + + function succ() { + return this.slice(0, this.length - 1) + + String.fromCharCode(this.charCodeAt(this.length - 1) + 1); + } + + function times(count) { + return count < 1 ? '' : new Array(count + 1).join(this); + } + + function camelize() { + return this.replace(/-+(.)?/g, function(match, chr) { + return chr ? chr.toUpperCase() : ''; + }); + } + + function capitalize() { + return this.charAt(0).toUpperCase() + this.substring(1).toLowerCase(); + } + + function underscore() { + return this.replace(/::/g, '/') + .replace(/([A-Z]+)([A-Z][a-z])/g, '$1_$2') + .replace(/([a-z\d])([A-Z])/g, '$1_$2') + .replace(/-/g, '_') + .toLowerCase(); + } + + function dasherize() { + return this.replace(/_/g, '-'); + } + + function inspect(useDoubleQuotes) { + var escapedString = this.replace(/[\x00-\x1f\\]/g, function(character) { + if (character in String.specialChar) { + return String.specialChar[character]; + } + return '\\u00' + character.charCodeAt().toPaddedString(2, 16); + }); + if (useDoubleQuotes) return '"' + escapedString.replace(/"/g, '\\"') + '"'; + return "'" + escapedString.replace(/'/g, '\\\'') + "'"; + } + + function unfilterJSON(filter) { + return this.replace(filter || Prototype.JSONFilter, '$1'); + } + + function isJSON() { + var str = this; + if (str.blank()) return false; + str = str.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@'); + str = str.replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']'); + str = str.replace(/(?:^|:|,)(?:\s*\[)+/g, ''); + return (/^[\],:{}\s]*$/).test(str); + } + + function evalJSON(sanitize) { + var json = this.unfilterJSON(), + cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g; + if (cx.test(json)) { + json = json.replace(cx, function (a) { + return '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4); + }); + } + try { + if (!sanitize || json.isJSON()) return eval('(' + json + ')'); + } catch (e) { } + throw new SyntaxError('Badly formed JSON string: ' + this.inspect()); + } + + function parseJSON() { + var json = this.unfilterJSON(); + return JSON.parse(json); + } + + function include(pattern) { + return this.indexOf(pattern) > -1; + } + + function startsWith(pattern, position) { + position = Object.isNumber(position) ? position : 0; + return this.lastIndexOf(pattern, position) === position; + } + + function endsWith(pattern, position) { + pattern = String(pattern); + position = Object.isNumber(position) ? position : this.length; + if (position < 0) position = 0; + if (position > this.length) position = this.length; + var d = position - pattern.length; + return d >= 0 && this.indexOf(pattern, d) === d; + } + + function empty() { + return this == ''; + } + + function blank() { + return /^\s*$/.test(this); + } + + function interpolate(object, pattern) { + return new Template(this, pattern).evaluate(object); + } + + return { + gsub: gsub, + sub: sub, + scan: scan, + truncate: truncate, + strip: String.prototype.trim || strip, + stripTags: stripTags, + stripScripts: stripScripts, + extractScripts: extractScripts, + evalScripts: evalScripts, + escapeHTML: escapeHTML, + unescapeHTML: unescapeHTML, + toQueryParams: toQueryParams, + parseQuery: toQueryParams, + toArray: toArray, + succ: succ, + times: times, + camelize: camelize, + capitalize: capitalize, + underscore: underscore, + dasherize: dasherize, + inspect: inspect, + unfilterJSON: unfilterJSON, + isJSON: isJSON, + evalJSON: NATIVE_JSON_PARSE_SUPPORT ? parseJSON : evalJSON, + include: include, + startsWith: String.prototype.startsWith || startsWith, + endsWith: String.prototype.endsWith || endsWith, + empty: empty, + blank: blank, + interpolate: interpolate + }; +})()); + +var Template = Class.create({ + initialize: function(template, pattern) { + this.template = template.toString(); + this.pattern = pattern || Template.Pattern; + }, + + evaluate: function(object) { + if (object && Object.isFunction(object.toTemplateReplacements)) + object = object.toTemplateReplacements(); + + return this.template.gsub(this.pattern, function(match) { + if (object == null) return (match[1] + ''); + + var before = match[1] || ''; + if (before == '\\') return match[2]; + + var ctx = object, expr = match[3], + pattern = /^([^.[]+|\[((?:.*?[^\\])?)\])(\.|\[|$)/; + + match = pattern.exec(expr); + if (match == null) return before; + + while (match != null) { + var comp = match[1].startsWith('[') ? match[2].replace(/\\\\]/g, ']') : match[1]; + ctx = ctx[comp]; + if (null == ctx || '' == match[3]) break; + expr = expr.substring('[' == match[3] ? match[1].length : match[0].length); + match = pattern.exec(expr); + } + + return before + String.interpret(ctx); + }); + } +}); +Template.Pattern = /(^|.|\r|\n)(#\{(.*?)\})/; + +var $break = { }; + +var Enumerable = (function() { + function each(iterator, context) { + try { + this._each(iterator, context); + } catch (e) { + if (e != $break) throw e; + } + return this; + } + + function eachSlice(number, iterator, context) { + var index = -number, slices = [], array = this.toArray(); + if (number < 1) return array; + while ((index += number) < array.length) + slices.push(array.slice(index, index+number)); + return slices.collect(iterator, context); + } + + function all(iterator, context) { + iterator = iterator || Prototype.K; + var result = true; + this.each(function(value, index) { + result = result && !!iterator.call(context, value, index, this); + if (!result) throw $break; + }, this); + return result; + } + + function any(iterator, context) { + iterator = iterator || Prototype.K; + var result = false; + this.each(function(value, index) { + if (result = !!iterator.call(context, value, index, this)) + throw $break; + }, this); + return result; + } + + function collect(iterator, context) { + iterator = iterator || Prototype.K; + var results = []; + this.each(function(value, index) { + results.push(iterator.call(context, value, index, this)); + }, this); + return results; + } + + function detect(iterator, context) { + var result; + this.each(function(value, index) { + if (iterator.call(context, value, index, this)) { + result = value; + throw $break; + } + }, this); + return result; + } + + function findAll(iterator, context) { + var results = []; + this.each(function(value, index) { + if (iterator.call(context, value, index, this)) + results.push(value); + }, this); + return results; + } + + function grep(filter, iterator, context) { + iterator = iterator || Prototype.K; + var results = []; + + if (Object.isString(filter)) + filter = new RegExp(RegExp.escape(filter)); + + this.each(function(value, index) { + if (filter.match(value)) + results.push(iterator.call(context, value, index, this)); + }, this); + return results; + } + + function include(object) { + if (Object.isFunction(this.indexOf) && this.indexOf(object) != -1) + return true; + + var found = false; + this.each(function(value) { + if (value == object) { + found = true; + throw $break; + } + }); + return found; + } + + function inGroupsOf(number, fillWith) { + fillWith = Object.isUndefined(fillWith) ? null : fillWith; + return this.eachSlice(number, function(slice) { + while(slice.length < number) slice.push(fillWith); + return slice; + }); + } + + function inject(memo, iterator, context) { + this.each(function(value, index) { + memo = iterator.call(context, memo, value, index, this); + }, this); + return memo; + } + + function invoke(method) { + var args = $A(arguments).slice(1); + return this.map(function(value) { + return value[method].apply(value, args); + }); + } + + function max(iterator, context) { + iterator = iterator || Prototype.K; + var result; + this.each(function(value, index) { + value = iterator.call(context, value, index, this); + if (result == null || value >= result) + result = value; + }, this); + return result; + } + + function min(iterator, context) { + iterator = iterator || Prototype.K; + var result; + this.each(function(value, index) { + value = iterator.call(context, value, index, this); + if (result == null || value < result) + result = value; + }, this); + return result; + } + + function partition(iterator, context) { + iterator = iterator || Prototype.K; + var trues = [], falses = []; + this.each(function(value, index) { + (iterator.call(context, value, index, this) ? + trues : falses).push(value); + }, this); + return [trues, falses]; + } + + function pluck(property) { + var results = []; + this.each(function(value) { + results.push(value[property]); + }); + return results; + } + + function reject(iterator, context) { + var results = []; + this.each(function(value, index) { + if (!iterator.call(context, value, index, this)) + results.push(value); + }, this); + return results; + } + + function sortBy(iterator, context) { + return this.map(function(value, index) { + return { + value: value, + criteria: iterator.call(context, value, index, this) + }; + }, this).sort(function(left, right) { + var a = left.criteria, b = right.criteria; + return a < b ? -1 : a > b ? 1 : 0; + }).pluck('value'); + } + + function toArray() { + return this.map(); + } + + function zip() { + var iterator = Prototype.K, args = $A(arguments); + if (Object.isFunction(args.last())) + iterator = args.pop(); + + var collections = [this].concat(args).map($A); + return this.map(function(value, index) { + return iterator(collections.pluck(index)); + }); + } + + function size() { + return this.toArray().length; + } + + function inspect() { + return '#'; + } + + + + + + + + + + return { + each: each, + eachSlice: eachSlice, + all: all, + every: all, + any: any, + some: any, + collect: collect, + map: collect, + detect: detect, + findAll: findAll, + select: findAll, + filter: findAll, + grep: grep, + include: include, + member: include, + inGroupsOf: inGroupsOf, + inject: inject, + invoke: invoke, + max: max, + min: min, + partition: partition, + pluck: pluck, + reject: reject, + sortBy: sortBy, + toArray: toArray, + entries: toArray, + zip: zip, + size: size, + inspect: inspect, + find: detect + }; +})(); + +function $A(iterable) { + if (!iterable) return []; + if ('toArray' in Object(iterable)) return iterable.toArray(); + var length = iterable.length || 0, results = new Array(length); + while (length--) results[length] = iterable[length]; + return results; +} + + +function $w(string) { + if (!Object.isString(string)) return []; + string = string.strip(); + return string ? string.split(/\s+/) : []; +} + +Array.from = $A; + + +(function() { + var arrayProto = Array.prototype, + slice = arrayProto.slice, + _each = arrayProto.forEach; // use native browser JS 1.6 implementation if available + + function each(iterator, context) { + for (var i = 0, length = this.length >>> 0; i < length; i++) { + if (i in this) iterator.call(context, this[i], i, this); + } + } + if (!_each) _each = each; + + function clear() { + this.length = 0; + return this; + } + + function first() { + return this[0]; + } + + function last() { + return this[this.length - 1]; + } + + function compact() { + return this.select(function(value) { + return value != null; + }); + } + + function flatten() { + return this.inject([], function(array, value) { + if (Object.isArray(value)) + return array.concat(value.flatten()); + array.push(value); + return array; + }); + } + + function without() { + var values = slice.call(arguments, 0); + return this.select(function(value) { + return !values.include(value); + }); + } + + function reverse(inline) { + return (inline === false ? this.toArray() : this)._reverse(); + } + + function uniq(sorted) { + return this.inject([], function(array, value, index) { + if (0 == index || (sorted ? array.last() != value : !array.include(value))) + array.push(value); + return array; + }); + } + + function intersect(array) { + return this.uniq().findAll(function(item) { + return array.indexOf(item) !== -1; + }); + } + + + function clone() { + return slice.call(this, 0); + } + + function size() { + return this.length; + } + + function inspect() { + return '[' + this.map(Object.inspect).join(', ') + ']'; + } + + function indexOf(item, i) { + if (this == null) throw new TypeError(); + + var array = Object(this), length = array.length >>> 0; + if (length === 0) return -1; + + i = Number(i); + if (isNaN(i)) { + i = 0; + } else if (i !== 0 && isFinite(i)) { + i = (i > 0 ? 1 : -1) * Math.floor(Math.abs(i)); + } + + if (i > length) return -1; + + var k = i >= 0 ? i : Math.max(length - Math.abs(i), 0); + for (; k < length; k++) + if (k in array && array[k] === item) return k; + return -1; + } + + + function lastIndexOf(item, i) { + if (this == null) throw new TypeError(); + + var array = Object(this), length = array.length >>> 0; + if (length === 0) return -1; + + if (!Object.isUndefined(i)) { + i = Number(i); + if (isNaN(i)) { + i = 0; + } else if (i !== 0 && isFinite(i)) { + i = (i > 0 ? 1 : -1) * Math.floor(Math.abs(i)); + } + } else { + i = length; + } + + var k = i >= 0 ? Math.min(i, length - 1) : + length - Math.abs(i); + + for (; k >= 0; k--) + if (k in array && array[k] === item) return k; + return -1; + } + + function concat(_) { + var array = [], items = slice.call(arguments, 0), item, n = 0; + items.unshift(this); + for (var i = 0, length = items.length; i < length; i++) { + item = items[i]; + if (Object.isArray(item) && !('callee' in item)) { + for (var j = 0, arrayLength = item.length; j < arrayLength; j++) { + if (j in item) array[n] = item[j]; + n++; + } + } else { + array[n++] = item; + } + } + array.length = n; + return array; + } + + + function wrapNative(method) { + return function() { + if (arguments.length === 0) { + return method.call(this, Prototype.K); + } else if (arguments[0] === undefined) { + var args = slice.call(arguments, 1); + args.unshift(Prototype.K); + return method.apply(this, args); + } else { + return method.apply(this, arguments); + } + }; + } + + + function map(iterator) { + if (this == null) throw new TypeError(); + iterator = iterator || Prototype.K; + + var object = Object(this); + var results = [], context = arguments[1], n = 0; + + for (var i = 0, length = object.length >>> 0; i < length; i++) { + if (i in object) { + results[n] = iterator.call(context, object[i], i, object); + } + n++; + } + results.length = n; + return results; + } + + if (arrayProto.map) { + map = wrapNative(Array.prototype.map); + } + + function filter(iterator) { + if (this == null || !Object.isFunction(iterator)) + throw new TypeError(); + + var object = Object(this); + var results = [], context = arguments[1], value; + + for (var i = 0, length = object.length >>> 0; i < length; i++) { + if (i in object) { + value = object[i]; + if (iterator.call(context, value, i, object)) { + results.push(value); + } + } + } + return results; + } + + if (arrayProto.filter) { + filter = Array.prototype.filter; + } + + function some(iterator) { + if (this == null) throw new TypeError(); + iterator = iterator || Prototype.K; + var context = arguments[1]; + + var object = Object(this); + for (var i = 0, length = object.length >>> 0; i < length; i++) { + if (i in object && iterator.call(context, object[i], i, object)) { + return true; + } + } + + return false; + } + + if (arrayProto.some) { + var some = wrapNative(Array.prototype.some); + } + + + function every(iterator) { + if (this == null) throw new TypeError(); + iterator = iterator || Prototype.K; + var context = arguments[1]; + + var object = Object(this); + for (var i = 0, length = object.length >>> 0; i < length; i++) { + if (i in object && !iterator.call(context, object[i], i, object)) { + return false; + } + } + + return true; + } + + if (arrayProto.every) { + var every = wrapNative(Array.prototype.every); + } + + var _reduce = arrayProto.reduce; + function inject(memo, iterator) { + iterator = iterator || Prototype.K; + var context = arguments[2]; + return _reduce.call(this, iterator.bind(context), memo); + } + + if (!arrayProto.reduce) { + var inject = Enumerable.inject; + } + + Object.extend(arrayProto, Enumerable); + + if (!arrayProto._reverse) + arrayProto._reverse = arrayProto.reverse; + + Object.extend(arrayProto, { + _each: _each, + + map: map, + collect: map, + select: filter, + filter: filter, + findAll: filter, + some: some, + any: some, + every: every, + all: every, + inject: inject, + + clear: clear, + first: first, + last: last, + compact: compact, + flatten: flatten, + without: without, + reverse: reverse, + uniq: uniq, + intersect: intersect, + clone: clone, + toArray: clone, + size: size, + inspect: inspect + }); + + var CONCAT_ARGUMENTS_BUGGY = (function() { + return [].concat(arguments)[0][0] !== 1; + })(1,2); + + if (CONCAT_ARGUMENTS_BUGGY) arrayProto.concat = concat; + + if (!arrayProto.indexOf) arrayProto.indexOf = indexOf; + if (!arrayProto.lastIndexOf) arrayProto.lastIndexOf = lastIndexOf; +})(); +function $H(object) { + return new Hash(object); +}; + +var Hash = Class.create(Enumerable, (function() { + function initialize(object) { + this._object = Object.isHash(object) ? object.toObject() : Object.clone(object); + } + + + function _each(iterator, context) { + var i = 0; + for (var key in this._object) { + var value = this._object[key], pair = [key, value]; + pair.key = key; + pair.value = value; + iterator.call(context, pair, i); + i++; + } + } + + function set(key, value) { + return this._object[key] = value; + } + + function get(key) { + if (this._object[key] !== Object.prototype[key]) + return this._object[key]; + } + + function unset(key) { + var value = this._object[key]; + delete this._object[key]; + return value; + } + + function toObject() { + return Object.clone(this._object); + } + + + + function keys() { + return this.pluck('key'); + } + + function values() { + return this.pluck('value'); + } + + function index(value) { + var match = this.detect(function(pair) { + return pair.value === value; + }); + return match && match.key; + } + + function merge(object) { + return this.clone().update(object); + } + + function update(object) { + return new Hash(object).inject(this, function(result, pair) { + result.set(pair.key, pair.value); + return result; + }); + } + + function toQueryPair(key, value) { + if (Object.isUndefined(value)) return key; + + value = String.interpret(value); + + value = value.gsub(/(\r)?\n/, '\r\n'); + value = encodeURIComponent(value); + value = value.gsub(/%20/, '+'); + return key + '=' + value; + } + + function toQueryString() { + return this.inject([], function(results, pair) { + var key = encodeURIComponent(pair.key), values = pair.value; + + if (values && typeof values == 'object') { + if (Object.isArray(values)) { + var queryValues = []; + for (var i = 0, len = values.length, value; i < len; i++) { + value = values[i]; + queryValues.push(toQueryPair(key, value)); + } + return results.concat(queryValues); + } + } else results.push(toQueryPair(key, values)); + return results; + }).join('&'); + } + + function inspect() { + return '#'; + } + + function clone() { + return new Hash(this); + } + + return { + initialize: initialize, + _each: _each, + set: set, + get: get, + unset: unset, + toObject: toObject, + toTemplateReplacements: toObject, + keys: keys, + values: values, + index: index, + merge: merge, + update: update, + toQueryString: toQueryString, + inspect: inspect, + toJSON: toObject, + clone: clone + }; +})()); + +Hash.from = $H; +Object.extend(Number.prototype, (function() { + function toColorPart() { + return this.toPaddedString(2, 16); + } + + function succ() { + return this + 1; + } + + function times(iterator, context) { + $R(0, this, true).each(iterator, context); + return this; + } + + function toPaddedString(length, radix) { + var string = this.toString(radix || 10); + return '0'.times(length - string.length) + string; + } + + function abs() { + return Math.abs(this); + } + + function round() { + return Math.round(this); + } + + function ceil() { + return Math.ceil(this); + } + + function floor() { + return Math.floor(this); + } + + return { + toColorPart: toColorPart, + succ: succ, + times: times, + toPaddedString: toPaddedString, + abs: abs, + round: round, + ceil: ceil, + floor: floor + }; +})()); + +function $R(start, end, exclusive) { + return new ObjectRange(start, end, exclusive); +} + +var ObjectRange = Class.create(Enumerable, (function() { + function initialize(start, end, exclusive) { + this.start = start; + this.end = end; + this.exclusive = exclusive; + } + + function _each(iterator, context) { + var value = this.start, i; + for (i = 0; this.include(value); i++) { + iterator.call(context, value, i); + value = value.succ(); + } + } + + function include(value) { + if (value < this.start) + return false; + if (this.exclusive) + return value < this.end; + return value <= this.end; + } + + return { + initialize: initialize, + _each: _each, + include: include + }; +})()); + + + +var Abstract = { }; + + +var Try = { + these: function() { + var returnValue; + + for (var i = 0, length = arguments.length; i < length; i++) { + var lambda = arguments[i]; + try { + returnValue = lambda(); + break; + } catch (e) { } + } + + return returnValue; + } +}; + +var Ajax = { + getTransport: function() { + return Try.these( + function() {return new XMLHttpRequest()}, + function() {return new ActiveXObject('Msxml2.XMLHTTP')}, + function() {return new ActiveXObject('Microsoft.XMLHTTP')} + ) || false; + }, + + activeRequestCount: 0 +}; + +Ajax.Responders = { + responders: [], + + _each: function(iterator, context) { + this.responders._each(iterator, context); + }, + + register: function(responder) { + if (!this.include(responder)) + this.responders.push(responder); + }, + + unregister: function(responder) { + this.responders = this.responders.without(responder); + }, + + dispatch: function(callback, request, transport, json) { + this.each(function(responder) { + if (Object.isFunction(responder[callback])) { + try { + responder[callback].apply(responder, [request, transport, json]); + } catch (e) { } + } + }); + } +}; + +Object.extend(Ajax.Responders, Enumerable); + +Ajax.Responders.register({ + onCreate: function() { Ajax.activeRequestCount++ }, + onComplete: function() { Ajax.activeRequestCount-- } +}); +Ajax.Base = Class.create({ + initialize: function(options) { + this.options = { + method: 'post', + asynchronous: true, + contentType: 'application/x-www-form-urlencoded', + encoding: 'UTF-8', + parameters: '', + evalJSON: true, + evalJS: true + }; + Object.extend(this.options, options || { }); + + this.options.method = this.options.method.toLowerCase(); + + if (Object.isHash(this.options.parameters)) + this.options.parameters = this.options.parameters.toObject(); + } +}); +Ajax.Request = Class.create(Ajax.Base, { + _complete: false, + + initialize: function($super, url, options) { + $super(options); + this.transport = Ajax.getTransport(); + this.request(url); + }, + + request: function(url) { + this.url = url; + this.method = this.options.method; + var params = Object.isString(this.options.parameters) ? + this.options.parameters : + Object.toQueryString(this.options.parameters); + + if (!['get', 'post'].include(this.method)) { + params += (params ? '&' : '') + "_method=" + this.method; + this.method = 'post'; + } + + if (params && this.method === 'get') { + this.url += (this.url.include('?') ? '&' : '?') + params; + } + + this.parameters = params.toQueryParams(); + + try { + var response = new Ajax.Response(this); + if (this.options.onCreate) this.options.onCreate(response); + Ajax.Responders.dispatch('onCreate', this, response); + + this.transport.open(this.method.toUpperCase(), this.url, + this.options.asynchronous); + + if (this.options.asynchronous) this.respondToReadyState.bind(this).defer(1); + + this.transport.onreadystatechange = this.onStateChange.bind(this); + this.setRequestHeaders(); + + this.body = this.method == 'post' ? (this.options.postBody || params) : null; + this.transport.send(this.body); + + /* Force Firefox to handle ready state 4 for synchronous requests */ + if (!this.options.asynchronous && this.transport.overrideMimeType) + this.onStateChange(); + + } + catch (e) { + this.dispatchException(e); + } + }, + + onStateChange: function() { + var readyState = this.transport.readyState; + if (readyState > 1 && !((readyState == 4) && this._complete)) + this.respondToReadyState(this.transport.readyState); + }, + + setRequestHeaders: function() { + var headers = { + 'X-Requested-With': 'XMLHttpRequest', + 'X-Prototype-Version': Prototype.Version, + 'Accept': 'text/javascript, text/html, application/xml, text/xml, */*' + }; + + if (this.method == 'post') { + headers['Content-type'] = this.options.contentType + + (this.options.encoding ? '; charset=' + this.options.encoding : ''); + + /* Force "Connection: close" for older Mozilla browsers to work + * around a bug where XMLHttpRequest sends an incorrect + * Content-length header. See Mozilla Bugzilla #246651. + */ + if (this.transport.overrideMimeType && + (navigator.userAgent.match(/Gecko\/(\d{4})/) || [0,2005])[1] < 2005) + headers['Connection'] = 'close'; + } + + if (typeof this.options.requestHeaders == 'object') { + var extras = this.options.requestHeaders; + + if (Object.isFunction(extras.push)) + for (var i = 0, length = extras.length; i < length; i += 2) + headers[extras[i]] = extras[i+1]; + else + $H(extras).each(function(pair) { headers[pair.key] = pair.value }); + } + + for (var name in headers) + if (headers[name] != null) + this.transport.setRequestHeader(name, headers[name]); + }, + + success: function() { + var status = this.getStatus(); + return !status || (status >= 200 && status < 300) || status == 304; + }, + + getStatus: function() { + try { + if (this.transport.status === 1223) return 204; + return this.transport.status || 0; + } catch (e) { return 0 } + }, + + respondToReadyState: function(readyState) { + var state = Ajax.Request.Events[readyState], response = new Ajax.Response(this); + + if (state == 'Complete') { + try { + this._complete = true; + (this.options['on' + response.status] + || this.options['on' + (this.success() ? 'Success' : 'Failure')] + || Prototype.emptyFunction)(response, response.headerJSON); + } catch (e) { + this.dispatchException(e); + } + + var contentType = response.getHeader('Content-type'); + if (this.options.evalJS == 'force' + || (this.options.evalJS && this.isSameOrigin() && contentType + && contentType.match(/^\s*(text|application)\/(x-)?(java|ecma)script(;.*)?\s*$/i))) + this.evalResponse(); + } + + try { + (this.options['on' + state] || Prototype.emptyFunction)(response, response.headerJSON); + Ajax.Responders.dispatch('on' + state, this, response, response.headerJSON); + } catch (e) { + this.dispatchException(e); + } + + if (state == 'Complete') { + this.transport.onreadystatechange = Prototype.emptyFunction; + } + }, + + isSameOrigin: function() { + var m = this.url.match(/^\s*https?:\/\/[^\/]*/); + return !m || (m[0] == '#{protocol}//#{domain}#{port}'.interpolate({ + protocol: location.protocol, + domain: document.domain, + port: location.port ? ':' + location.port : '' + })); + }, + + getHeader: function(name) { + try { + return this.transport.getResponseHeader(name) || null; + } catch (e) { return null; } + }, + + evalResponse: function() { + try { + return eval((this.transport.responseText || '').unfilterJSON()); + } catch (e) { + this.dispatchException(e); + } + }, + + dispatchException: function(exception) { + (this.options.onException || Prototype.emptyFunction)(this, exception); + Ajax.Responders.dispatch('onException', this, exception); + } +}); + +Ajax.Request.Events = + ['Uninitialized', 'Loading', 'Loaded', 'Interactive', 'Complete']; + + + + + + + + +Ajax.Response = Class.create({ + initialize: function(request){ + this.request = request; + var transport = this.transport = request.transport, + readyState = this.readyState = transport.readyState; + + if ((readyState > 2 && !Prototype.Browser.IE) || readyState == 4) { + this.status = this.getStatus(); + this.statusText = this.getStatusText(); + this.responseText = String.interpret(transport.responseText); + this.headerJSON = this._getHeaderJSON(); + } + + if (readyState == 4) { + var xml = transport.responseXML; + this.responseXML = Object.isUndefined(xml) ? null : xml; + this.responseJSON = this._getResponseJSON(); + } + }, + + status: 0, + + statusText: '', + + getStatus: Ajax.Request.prototype.getStatus, + + getStatusText: function() { + try { + return this.transport.statusText || ''; + } catch (e) { return '' } + }, + + getHeader: Ajax.Request.prototype.getHeader, + + getAllHeaders: function() { + try { + return this.getAllResponseHeaders(); + } catch (e) { return null } + }, + + getResponseHeader: function(name) { + return this.transport.getResponseHeader(name); + }, + + getAllResponseHeaders: function() { + return this.transport.getAllResponseHeaders(); + }, + + _getHeaderJSON: function() { + var json = this.getHeader('X-JSON'); + if (!json) return null; + + try { + json = decodeURIComponent(escape(json)); + } catch(e) { + } + + try { + return json.evalJSON(this.request.options.sanitizeJSON || + !this.request.isSameOrigin()); + } catch (e) { + this.request.dispatchException(e); + } + }, + + _getResponseJSON: function() { + var options = this.request.options; + if (!options.evalJSON || (options.evalJSON != 'force' && + !(this.getHeader('Content-type') || '').include('application/json')) || + this.responseText.blank()) + return null; + try { + return this.responseText.evalJSON(options.sanitizeJSON || + !this.request.isSameOrigin()); + } catch (e) { + this.request.dispatchException(e); + } + } +}); + +Ajax.Updater = Class.create(Ajax.Request, { + initialize: function($super, container, url, options) { + this.container = { + success: (container.success || container), + failure: (container.failure || (container.success ? null : container)) + }; + + options = Object.clone(options); + var onComplete = options.onComplete; + options.onComplete = (function(response, json) { + this.updateContent(response.responseText); + if (Object.isFunction(onComplete)) onComplete(response, json); + }).bind(this); + + $super(url, options); + }, + + updateContent: function(responseText) { + var receiver = this.container[this.success() ? 'success' : 'failure'], + options = this.options; + + if (!options.evalScripts) responseText = responseText.stripScripts(); + + if (receiver = $(receiver)) { + if (options.insertion) { + if (Object.isString(options.insertion)) { + var insertion = { }; insertion[options.insertion] = responseText; + receiver.insert(insertion); + } + else options.insertion(receiver, responseText); + } + else receiver.update(responseText); + } + } +}); + +Ajax.PeriodicalUpdater = Class.create(Ajax.Base, { + initialize: function($super, container, url, options) { + $super(options); + this.onComplete = this.options.onComplete; + + this.frequency = (this.options.frequency || 2); + this.decay = (this.options.decay || 1); + + this.updater = { }; + this.container = container; + this.url = url; + + this.start(); + }, + + start: function() { + this.options.onComplete = this.updateComplete.bind(this); + this.onTimerEvent(); + }, + + stop: function() { + this.updater.options.onComplete = undefined; + clearTimeout(this.timer); + (this.onComplete || Prototype.emptyFunction).apply(this, arguments); + }, + + updateComplete: function(response) { + if (this.options.decay) { + this.decay = (response.responseText == this.lastText ? + this.decay * this.options.decay : 1); + + this.lastText = response.responseText; + } + this.timer = this.onTimerEvent.bind(this).delay(this.decay * this.frequency); + }, + + onTimerEvent: function() { + this.updater = new Ajax.Updater(this.container, this.url, this.options); + } +}); + +(function(GLOBAL) { + + var UNDEFINED; + var SLICE = Array.prototype.slice; + + var DIV = document.createElement('div'); + + + function $(element) { + if (arguments.length > 1) { + for (var i = 0, elements = [], length = arguments.length; i < length; i++) + elements.push($(arguments[i])); + return elements; + } + + if (Object.isString(element)) + element = document.getElementById(element); + return Element.extend(element); + } + + GLOBAL.$ = $; + + + if (!GLOBAL.Node) GLOBAL.Node = {}; + + if (!GLOBAL.Node.ELEMENT_NODE) { + Object.extend(GLOBAL.Node, { + ELEMENT_NODE: 1, + ATTRIBUTE_NODE: 2, + TEXT_NODE: 3, + CDATA_SECTION_NODE: 4, + ENTITY_REFERENCE_NODE: 5, + ENTITY_NODE: 6, + PROCESSING_INSTRUCTION_NODE: 7, + COMMENT_NODE: 8, + DOCUMENT_NODE: 9, + DOCUMENT_TYPE_NODE: 10, + DOCUMENT_FRAGMENT_NODE: 11, + NOTATION_NODE: 12 + }); + } + + var ELEMENT_CACHE = {}; + + function shouldUseCreationCache(tagName, attributes) { + if (tagName === 'select') return false; + if ('type' in attributes) return false; + return true; + } + + var HAS_EXTENDED_CREATE_ELEMENT_SYNTAX = (function(){ + try { + var el = document.createElement(''); + return el.tagName.toLowerCase() === 'input' && el.name === 'x'; + } + catch(err) { + return false; + } + })(); + + + var oldElement = GLOBAL.Element; + function Element(tagName, attributes) { + attributes = attributes || {}; + tagName = tagName.toLowerCase(); + + if (HAS_EXTENDED_CREATE_ELEMENT_SYNTAX && attributes.name) { + tagName = '<' + tagName + ' name="' + attributes.name + '">'; + delete attributes.name; + return Element.writeAttribute(document.createElement(tagName), attributes); + } + + if (!ELEMENT_CACHE[tagName]) + ELEMENT_CACHE[tagName] = Element.extend(document.createElement(tagName)); + + var node = shouldUseCreationCache(tagName, attributes) ? + ELEMENT_CACHE[tagName].cloneNode(false) : document.createElement(tagName); + + return Element.writeAttribute(node, attributes); + } + + GLOBAL.Element = Element; + + Object.extend(GLOBAL.Element, oldElement || {}); + if (oldElement) GLOBAL.Element.prototype = oldElement.prototype; + + Element.Methods = { ByTag: {}, Simulated: {} }; + + var methods = {}; + + var INSPECT_ATTRIBUTES = { id: 'id', className: 'class' }; + function inspect(element) { + element = $(element); + var result = '<' + element.tagName.toLowerCase(); + + var attribute, value; + for (var property in INSPECT_ATTRIBUTES) { + attribute = INSPECT_ATTRIBUTES[property]; + value = (element[property] || '').toString(); + if (value) result += ' ' + attribute + '=' + value.inspect(true); + } + + return result + '>'; + } + + methods.inspect = inspect; + + + function visible(element) { + return $(element).style.display !== 'none'; + } + + function toggle(element, bool) { + element = $(element); + if (Object.isUndefined(bool)) + bool = !Element.visible(element); + Element[bool ? 'show' : 'hide'](element); + + return element; + } + + function hide(element) { + element = $(element); + element.style.display = 'none'; + return element; + } + + function show(element) { + element = $(element); + element.style.display = ''; + return element; + } + + + Object.extend(methods, { + visible: visible, + toggle: toggle, + hide: hide, + show: show + }); + + + function remove(element) { + element = $(element); + element.parentNode.removeChild(element); + return element; + } + + var SELECT_ELEMENT_INNERHTML_BUGGY = (function(){ + var el = document.createElement("select"), + isBuggy = true; + el.innerHTML = ""; + if (el.options && el.options[0]) { + isBuggy = el.options[0].nodeName.toUpperCase() !== "OPTION"; + } + el = null; + return isBuggy; + })(); + + var TABLE_ELEMENT_INNERHTML_BUGGY = (function(){ + try { + var el = document.createElement("table"); + if (el && el.tBodies) { + el.innerHTML = "test"; + var isBuggy = typeof el.tBodies[0] == "undefined"; + el = null; + return isBuggy; + } + } catch (e) { + return true; + } + })(); + + var LINK_ELEMENT_INNERHTML_BUGGY = (function() { + try { + var el = document.createElement('div'); + el.innerHTML = ""; + var isBuggy = (el.childNodes.length === 0); + el = null; + return isBuggy; + } catch(e) { + return true; + } + })(); + + var ANY_INNERHTML_BUGGY = SELECT_ELEMENT_INNERHTML_BUGGY || + TABLE_ELEMENT_INNERHTML_BUGGY || LINK_ELEMENT_INNERHTML_BUGGY; + + var SCRIPT_ELEMENT_REJECTS_TEXTNODE_APPENDING = (function () { + var s = document.createElement("script"), + isBuggy = false; + try { + s.appendChild(document.createTextNode("")); + isBuggy = !s.firstChild || + s.firstChild && s.firstChild.nodeType !== 3; + } catch (e) { + isBuggy = true; + } + s = null; + return isBuggy; + })(); + + function update(element, content) { + element = $(element); + + var descendants = element.getElementsByTagName('*'), + i = descendants.length; + while (i--) purgeElement(descendants[i]); + + if (content && content.toElement) + content = content.toElement(); + + if (Object.isElement(content)) + return element.update().insert(content); + + + content = Object.toHTML(content); + var tagName = element.tagName.toUpperCase(); + + if (tagName === 'SCRIPT' && SCRIPT_ELEMENT_REJECTS_TEXTNODE_APPENDING) { + element.text = content; + return element; + } + + if (ANY_INNERHTML_BUGGY) { + if (tagName in INSERTION_TRANSLATIONS.tags) { + while (element.firstChild) + element.removeChild(element.firstChild); + + var nodes = getContentFromAnonymousElement(tagName, content.stripScripts()); + for (var i = 0, node; node = nodes[i]; i++) + element.appendChild(node); + + } else if (LINK_ELEMENT_INNERHTML_BUGGY && Object.isString(content) && content.indexOf(' -1) { + while (element.firstChild) + element.removeChild(element.firstChild); + + var nodes = getContentFromAnonymousElement(tagName, + content.stripScripts(), true); + + for (var i = 0, node; node = nodes[i]; i++) + element.appendChild(node); + } else { + element.innerHTML = content.stripScripts(); + } + } else { + element.innerHTML = content.stripScripts(); + } + + content.evalScripts.bind(content).defer(); + return element; + } + + function replace(element, content) { + element = $(element); + + if (content && content.toElement) { + content = content.toElement(); + } else if (!Object.isElement(content)) { + content = Object.toHTML(content); + var range = element.ownerDocument.createRange(); + range.selectNode(element); + content.evalScripts.bind(content).defer(); + content = range.createContextualFragment(content.stripScripts()); + } + + element.parentNode.replaceChild(content, element); + return element; + } + + var INSERTION_TRANSLATIONS = { + before: function(element, node) { + element.parentNode.insertBefore(node, element); + }, + top: function(element, node) { + element.insertBefore(node, element.firstChild); + }, + bottom: function(element, node) { + element.appendChild(node); + }, + after: function(element, node) { + element.parentNode.insertBefore(node, element.nextSibling); + }, + + tags: { + TABLE: ['', '
    ', 1], + TBODY: ['', '
    ', 2], + TR: ['', '
    ', 3], + TD: ['
    ', '
    ', 4], + SELECT: ['', 1] + } + }; + + var tags = INSERTION_TRANSLATIONS.tags; + + Object.extend(tags, { + THEAD: tags.TBODY, + TFOOT: tags.TBODY, + TH: tags.TD + }); + + function replace_IE(element, content) { + element = $(element); + if (content && content.toElement) + content = content.toElement(); + if (Object.isElement(content)) { + element.parentNode.replaceChild(content, element); + return element; + } + + content = Object.toHTML(content); + var parent = element.parentNode, tagName = parent.tagName.toUpperCase(); + + if (tagName in INSERTION_TRANSLATIONS.tags) { + var nextSibling = Element.next(element); + var fragments = getContentFromAnonymousElement( + tagName, content.stripScripts()); + + parent.removeChild(element); + + var iterator; + if (nextSibling) + iterator = function(node) { parent.insertBefore(node, nextSibling) }; + else + iterator = function(node) { parent.appendChild(node); } + + fragments.each(iterator); + } else { + element.outerHTML = content.stripScripts(); + } + + content.evalScripts.bind(content).defer(); + return element; + } + + if ('outerHTML' in document.documentElement) + replace = replace_IE; + + function isContent(content) { + if (Object.isUndefined(content) || content === null) return false; + + if (Object.isString(content) || Object.isNumber(content)) return true; + if (Object.isElement(content)) return true; + if (content.toElement || content.toHTML) return true; + + return false; + } + + function insertContentAt(element, content, position) { + position = position.toLowerCase(); + var method = INSERTION_TRANSLATIONS[position]; + + if (content && content.toElement) content = content.toElement(); + if (Object.isElement(content)) { + method(element, content); + return element; + } + + content = Object.toHTML(content); + var tagName = ((position === 'before' || position === 'after') ? + element.parentNode : element).tagName.toUpperCase(); + + var childNodes = getContentFromAnonymousElement(tagName, content.stripScripts()); + + if (position === 'top' || position === 'after') childNodes.reverse(); + + for (var i = 0, node; node = childNodes[i]; i++) + method(element, node); + + content.evalScripts.bind(content).defer(); + } + + function insert(element, insertions) { + element = $(element); + + if (isContent(insertions)) + insertions = { bottom: insertions }; + + for (var position in insertions) + insertContentAt(element, insertions[position], position); + + return element; + } + + function wrap(element, wrapper, attributes) { + element = $(element); + + if (Object.isElement(wrapper)) { + $(wrapper).writeAttribute(attributes || {}); + } else if (Object.isString(wrapper)) { + wrapper = new Element(wrapper, attributes); + } else { + wrapper = new Element('div', wrapper); + } + + if (element.parentNode) + element.parentNode.replaceChild(wrapper, element); + + wrapper.appendChild(element); + + return wrapper; + } + + function cleanWhitespace(element) { + element = $(element); + var node = element.firstChild; + + while (node) { + var nextNode = node.nextSibling; + if (node.nodeType === Node.TEXT_NODE && !/\S/.test(node.nodeValue)) + element.removeChild(node); + node = nextNode; + } + return element; + } + + function empty(element) { + return $(element).innerHTML.blank(); + } + + function getContentFromAnonymousElement(tagName, html, force) { + var t = INSERTION_TRANSLATIONS.tags[tagName], div = DIV; + + var workaround = !!t; + if (!workaround && force) { + workaround = true; + t = ['', '', 0]; + } + + if (workaround) { + div.innerHTML = ' ' + t[0] + html + t[1]; + div.removeChild(div.firstChild); + for (var i = t[2]; i--; ) + div = div.firstChild; + } else { + div.innerHTML = html; + } + + return $A(div.childNodes); + } + + function clone(element, deep) { + if (!(element = $(element))) return; + var clone = element.cloneNode(deep); + if (!HAS_UNIQUE_ID_PROPERTY) { + clone._prototypeUID = UNDEFINED; + if (deep) { + var descendants = Element.select(clone, '*'), + i = descendants.length; + while (i--) + descendants[i]._prototypeUID = UNDEFINED; + } + } + return Element.extend(clone); + } + + function purgeElement(element) { + var uid = getUniqueElementID(element); + if (uid) { + Element.stopObserving(element); + if (!HAS_UNIQUE_ID_PROPERTY) + element._prototypeUID = UNDEFINED; + delete Element.Storage[uid]; + } + } + + function purgeCollection(elements) { + var i = elements.length; + while (i--) + purgeElement(elements[i]); + } + + function purgeCollection_IE(elements) { + var i = elements.length, element, uid; + while (i--) { + element = elements[i]; + uid = getUniqueElementID(element); + delete Element.Storage[uid]; + delete Event.cache[uid]; + } + } + + if (HAS_UNIQUE_ID_PROPERTY) { + purgeCollection = purgeCollection_IE; + } + + + function purge(element) { + if (!(element = $(element))) return; + purgeElement(element); + + var descendants = element.getElementsByTagName('*'), + i = descendants.length; + + while (i--) purgeElement(descendants[i]); + + return null; + } + + Object.extend(methods, { + remove: remove, + update: update, + replace: replace, + insert: insert, + wrap: wrap, + cleanWhitespace: cleanWhitespace, + empty: empty, + clone: clone, + purge: purge + }); + + + + function recursivelyCollect(element, property, maximumLength) { + element = $(element); + maximumLength = maximumLength || -1; + var elements = []; + + while (element = element[property]) { + if (element.nodeType === Node.ELEMENT_NODE) + elements.push(Element.extend(element)); + + if (elements.length === maximumLength) break; + } + + return elements; + } + + + function ancestors(element) { + return recursivelyCollect(element, 'parentNode'); + } + + function descendants(element) { + return Element.select(element, '*'); + } + + function firstDescendant(element) { + element = $(element).firstChild; + while (element && element.nodeType !== Node.ELEMENT_NODE) + element = element.nextSibling; + + return $(element); + } + + function immediateDescendants(element) { + var results = [], child = $(element).firstChild; + + while (child) { + if (child.nodeType === Node.ELEMENT_NODE) + results.push(Element.extend(child)); + + child = child.nextSibling; + } + + return results; + } + + function previousSiblings(element) { + return recursivelyCollect(element, 'previousSibling'); + } + + function nextSiblings(element) { + return recursivelyCollect(element, 'nextSibling'); + } + + function siblings(element) { + element = $(element); + var previous = previousSiblings(element), + next = nextSiblings(element); + return previous.reverse().concat(next); + } + + function match(element, selector) { + element = $(element); + + if (Object.isString(selector)) + return Prototype.Selector.match(element, selector); + + return selector.match(element); + } + + + function _recursivelyFind(element, property, expression, index) { + element = $(element), expression = expression || 0, index = index || 0; + if (Object.isNumber(expression)) { + index = expression, expression = null; + } + + while (element = element[property]) { + if (element.nodeType !== 1) continue; + if (expression && !Prototype.Selector.match(element, expression)) + continue; + if (--index >= 0) continue; + + return Element.extend(element); + } + } + + + function up(element, expression, index) { + element = $(element); + + if (arguments.length === 1) return $(element.parentNode); + return _recursivelyFind(element, 'parentNode', expression, index); + } + + function down(element, expression, index) { + if (arguments.length === 1) return firstDescendant(element); + element = $(element), expression = expression || 0, index = index || 0; + + if (Object.isNumber(expression)) + index = expression, expression = '*'; + + var node = Prototype.Selector.select(expression, element)[index]; + return Element.extend(node); + } + + function previous(element, expression, index) { + return _recursivelyFind(element, 'previousSibling', expression, index); + } + + function next(element, expression, index) { + return _recursivelyFind(element, 'nextSibling', expression, index); + } + + function select(element) { + element = $(element); + var expressions = SLICE.call(arguments, 1).join(', '); + return Prototype.Selector.select(expressions, element); + } + + function adjacent(element) { + element = $(element); + var expressions = SLICE.call(arguments, 1).join(', '); + var siblings = Element.siblings(element), results = []; + for (var i = 0, sibling; sibling = siblings[i]; i++) { + if (Prototype.Selector.match(sibling, expressions)) + results.push(sibling); + } + + return results; + } + + function descendantOf_DOM(element, ancestor) { + element = $(element), ancestor = $(ancestor); + while (element = element.parentNode) + if (element === ancestor) return true; + return false; + } + + function descendantOf_contains(element, ancestor) { + element = $(element), ancestor = $(ancestor); + if (!ancestor.contains) return descendantOf_DOM(element, ancestor); + return ancestor.contains(element) && ancestor !== element; + } + + function descendantOf_compareDocumentPosition(element, ancestor) { + element = $(element), ancestor = $(ancestor); + return (element.compareDocumentPosition(ancestor) & 8) === 8; + } + + var descendantOf; + if (DIV.compareDocumentPosition) { + descendantOf = descendantOf_compareDocumentPosition; + } else if (DIV.contains) { + descendantOf = descendantOf_contains; + } else { + descendantOf = descendantOf_DOM; + } + + + Object.extend(methods, { + recursivelyCollect: recursivelyCollect, + ancestors: ancestors, + descendants: descendants, + firstDescendant: firstDescendant, + immediateDescendants: immediateDescendants, + previousSiblings: previousSiblings, + nextSiblings: nextSiblings, + siblings: siblings, + match: match, + up: up, + down: down, + previous: previous, + next: next, + select: select, + adjacent: adjacent, + descendantOf: descendantOf, + + getElementsBySelector: select, + + childElements: immediateDescendants + }); + + + var idCounter = 1; + function identify(element) { + element = $(element); + var id = Element.readAttribute(element, 'id'); + if (id) return id; + + do { id = 'anonymous_element_' + idCounter++ } while ($(id)); + + Element.writeAttribute(element, 'id', id); + return id; + } + + + function readAttribute(element, name) { + return $(element).getAttribute(name); + } + + function readAttribute_IE(element, name) { + element = $(element); + + var table = ATTRIBUTE_TRANSLATIONS.read; + if (table.values[name]) + return table.values[name](element, name); + + if (table.names[name]) name = table.names[name]; + + if (name.include(':')) { + if (!element.attributes || !element.attributes[name]) return null; + return element.attributes[name].value; + } + + return element.getAttribute(name); + } + + function readAttribute_Opera(element, name) { + if (name === 'title') return element.title; + return element.getAttribute(name); + } + + var PROBLEMATIC_ATTRIBUTE_READING = (function() { + DIV.setAttribute('onclick', []); + var value = DIV.getAttribute('onclick'); + var isFunction = Object.isArray(value); + DIV.removeAttribute('onclick'); + return isFunction; + })(); + + if (PROBLEMATIC_ATTRIBUTE_READING) { + readAttribute = readAttribute_IE; + } else if (Prototype.Browser.Opera) { + readAttribute = readAttribute_Opera; + } + + + function writeAttribute(element, name, value) { + element = $(element); + var attributes = {}, table = ATTRIBUTE_TRANSLATIONS.write; + + if (typeof name === 'object') { + attributes = name; + } else { + attributes[name] = Object.isUndefined(value) ? true : value; + } + + for (var attr in attributes) { + name = table.names[attr] || attr; + value = attributes[attr]; + if (table.values[attr]) + name = table.values[attr](element, value) || name; + if (value === false || value === null) + element.removeAttribute(name); + else if (value === true) + element.setAttribute(name, name); + else element.setAttribute(name, value); + } + + return element; + } + + var PROBLEMATIC_HAS_ATTRIBUTE_WITH_CHECKBOXES = (function () { + if (!HAS_EXTENDED_CREATE_ELEMENT_SYNTAX) { + return false; + } + var checkbox = document.createElement(''); + checkbox.checked = true; + var node = checkbox.getAttributeNode('checked'); + return !node || !node.specified; + })(); + + function hasAttribute(element, attribute) { + attribute = ATTRIBUTE_TRANSLATIONS.has[attribute] || attribute; + var node = $(element).getAttributeNode(attribute); + return !!(node && node.specified); + } + + function hasAttribute_IE(element, attribute) { + if (attribute === 'checked') { + return element.checked; + } + return hasAttribute(element, attribute); + } + + GLOBAL.Element.Methods.Simulated.hasAttribute = + PROBLEMATIC_HAS_ATTRIBUTE_WITH_CHECKBOXES ? + hasAttribute_IE : hasAttribute; + + function classNames(element) { + return new Element.ClassNames(element); + } + + var regExpCache = {}; + function getRegExpForClassName(className) { + if (regExpCache[className]) return regExpCache[className]; + + var re = new RegExp("(^|\\s+)" + className + "(\\s+|$)"); + regExpCache[className] = re; + return re; + } + + function hasClassName(element, className) { + if (!(element = $(element))) return; + + var elementClassName = element.className; + + if (elementClassName.length === 0) return false; + if (elementClassName === className) return true; + + return getRegExpForClassName(className).test(elementClassName); + } + + function addClassName(element, className) { + if (!(element = $(element))) return; + + if (!hasClassName(element, className)) + element.className += (element.className ? ' ' : '') + className; + + return element; + } + + function removeClassName(element, className) { + if (!(element = $(element))) return; + + element.className = element.className.replace( + getRegExpForClassName(className), ' ').strip(); + + return element; + } + + function toggleClassName(element, className, bool) { + if (!(element = $(element))) return; + + if (Object.isUndefined(bool)) + bool = !hasClassName(element, className); + + var method = Element[bool ? 'addClassName' : 'removeClassName']; + return method(element, className); + } + + var ATTRIBUTE_TRANSLATIONS = {}; + + var classProp = 'className', forProp = 'for'; + + DIV.setAttribute(classProp, 'x'); + if (DIV.className !== 'x') { + DIV.setAttribute('class', 'x'); + if (DIV.className === 'x') + classProp = 'class'; + } + + var LABEL = document.createElement('label'); + LABEL.setAttribute(forProp, 'x'); + if (LABEL.htmlFor !== 'x') { + LABEL.setAttribute('htmlFor', 'x'); + if (LABEL.htmlFor === 'x') + forProp = 'htmlFor'; + } + LABEL = null; + + function _getAttr(element, attribute) { + return element.getAttribute(attribute); + } + + function _getAttr2(element, attribute) { + return element.getAttribute(attribute, 2); + } + + function _getAttrNode(element, attribute) { + var node = element.getAttributeNode(attribute); + return node ? node.value : ''; + } + + function _getFlag(element, attribute) { + return $(element).hasAttribute(attribute) ? attribute : null; + } + + DIV.onclick = Prototype.emptyFunction; + var onclickValue = DIV.getAttribute('onclick'); + + var _getEv; + + if (String(onclickValue).indexOf('{') > -1) { + _getEv = function(element, attribute) { + var value = element.getAttribute(attribute); + if (!value) return null; + value = value.toString(); + value = value.split('{')[1]; + value = value.split('}')[0]; + return value.strip(); + }; + } + else if (onclickValue === '') { + _getEv = function(element, attribute) { + var value = element.getAttribute(attribute); + if (!value) return null; + return value.strip(); + }; + } + + ATTRIBUTE_TRANSLATIONS.read = { + names: { + 'class': classProp, + 'className': classProp, + 'for': forProp, + 'htmlFor': forProp + }, + + values: { + style: function(element) { + return element.style.cssText.toLowerCase(); + }, + title: function(element) { + return element.title; + } + } + }; + + ATTRIBUTE_TRANSLATIONS.write = { + names: { + className: 'class', + htmlFor: 'for', + cellpadding: 'cellPadding', + cellspacing: 'cellSpacing' + }, + + values: { + checked: function(element, value) { + element.checked = !!value; + }, + + style: function(element, value) { + element.style.cssText = value ? value : ''; + } + } + }; + + ATTRIBUTE_TRANSLATIONS.has = { names: {} }; + + Object.extend(ATTRIBUTE_TRANSLATIONS.write.names, + ATTRIBUTE_TRANSLATIONS.read.names); + + var CAMEL_CASED_ATTRIBUTE_NAMES = $w('colSpan rowSpan vAlign dateTime ' + + 'accessKey tabIndex encType maxLength readOnly longDesc frameBorder'); + + for (var i = 0, attr; attr = CAMEL_CASED_ATTRIBUTE_NAMES[i]; i++) { + ATTRIBUTE_TRANSLATIONS.write.names[attr.toLowerCase()] = attr; + ATTRIBUTE_TRANSLATIONS.has.names[attr.toLowerCase()] = attr; + } + + Object.extend(ATTRIBUTE_TRANSLATIONS.read.values, { + href: _getAttr2, + src: _getAttr2, + type: _getAttr, + action: _getAttrNode, + disabled: _getFlag, + checked: _getFlag, + readonly: _getFlag, + multiple: _getFlag, + onload: _getEv, + onunload: _getEv, + onclick: _getEv, + ondblclick: _getEv, + onmousedown: _getEv, + onmouseup: _getEv, + onmouseover: _getEv, + onmousemove: _getEv, + onmouseout: _getEv, + onfocus: _getEv, + onblur: _getEv, + onkeypress: _getEv, + onkeydown: _getEv, + onkeyup: _getEv, + onsubmit: _getEv, + onreset: _getEv, + onselect: _getEv, + onchange: _getEv + }); + + + Object.extend(methods, { + identify: identify, + readAttribute: readAttribute, + writeAttribute: writeAttribute, + classNames: classNames, + hasClassName: hasClassName, + addClassName: addClassName, + removeClassName: removeClassName, + toggleClassName: toggleClassName + }); + + + function normalizeStyleName(style) { + if (style === 'float' || style === 'styleFloat') + return 'cssFloat'; + return style.camelize(); + } + + function normalizeStyleName_IE(style) { + if (style === 'float' || style === 'cssFloat') + return 'styleFloat'; + return style.camelize(); + } + + function setStyle(element, styles) { + element = $(element); + var elementStyle = element.style, match; + + if (Object.isString(styles)) { + elementStyle.cssText += ';' + styles; + if (styles.include('opacity')) { + var opacity = styles.match(/opacity:\s*(\d?\.?\d*)/)[1]; + Element.setOpacity(element, opacity); + } + return element; + } + + for (var property in styles) { + if (property === 'opacity') { + Element.setOpacity(element, styles[property]); + } else { + var value = styles[property]; + if (property === 'float' || property === 'cssFloat') { + property = Object.isUndefined(elementStyle.styleFloat) ? + 'cssFloat' : 'styleFloat'; + } + elementStyle[property] = value; + } + } + + return element; + } + + + function getStyle(element, style) { + element = $(element); + style = normalizeStyleName(style); + + var value = element.style[style]; + if (!value || value === 'auto') { + var css = document.defaultView.getComputedStyle(element, null); + value = css ? css[style] : null; + } + + if (style === 'opacity') return value ? parseFloat(value) : 1.0; + return value === 'auto' ? null : value; + } + + function getStyle_Opera(element, style) { + switch (style) { + case 'height': case 'width': + if (!Element.visible(element)) return null; + + var dim = parseInt(getStyle(element, style), 10); + + if (dim !== element['offset' + style.capitalize()]) + return dim + 'px'; + + return Element.measure(element, style); + + default: return getStyle(element, style); + } + } + + function getStyle_IE(element, style) { + element = $(element); + style = normalizeStyleName_IE(style); + + var value = element.style[style]; + if (!value && element.currentStyle) { + value = element.currentStyle[style]; + } + + if (style === 'opacity' && !STANDARD_CSS_OPACITY_SUPPORTED) + return getOpacity_IE(element); + + if (value === 'auto') { + if ((style === 'width' || style === 'height') && Element.visible(element)) + return Element.measure(element, style) + 'px'; + return null; + } + + return value; + } + + function stripAlphaFromFilter_IE(filter) { + return (filter || '').replace(/alpha\([^\)]*\)/gi, ''); + } + + function hasLayout_IE(element) { + if (!element.currentStyle || !element.currentStyle.hasLayout) + element.style.zoom = 1; + return element; + } + + var STANDARD_CSS_OPACITY_SUPPORTED = (function() { + DIV.style.cssText = "opacity:.55"; + return /^0.55/.test(DIV.style.opacity); + })(); + + function setOpacity(element, value) { + element = $(element); + if (value == 1 || value === '') value = ''; + else if (value < 0.00001) value = 0; + element.style.opacity = value; + return element; + } + + function setOpacity_IE(element, value) { + if (STANDARD_CSS_OPACITY_SUPPORTED) + return setOpacity(element, value); + + element = hasLayout_IE($(element)); + var filter = Element.getStyle(element, 'filter'), + style = element.style; + + if (value == 1 || value === '') { + filter = stripAlphaFromFilter_IE(filter); + if (filter) style.filter = filter; + else style.removeAttribute('filter'); + return element; + } + + if (value < 0.00001) value = 0; + + style.filter = stripAlphaFromFilter_IE(filter) + + 'alpha(opacity=' + (value * 100) + ')'; + + return element; + } + + + function getOpacity(element) { + return Element.getStyle(element, 'opacity'); + } + + function getOpacity_IE(element) { + if (STANDARD_CSS_OPACITY_SUPPORTED) + return getOpacity(element); + + var filter = Element.getStyle(element, 'filter'); + if (filter.length === 0) return 1.0; + var match = (filter || '').match(/alpha\(opacity=(.*)\)/); + if (match && match[1]) return parseFloat(match[1]) / 100; + return 1.0; + } + + + Object.extend(methods, { + setStyle: setStyle, + getStyle: getStyle, + setOpacity: setOpacity, + getOpacity: getOpacity + }); + + if ('styleFloat' in DIV.style) { + methods.getStyle = getStyle_IE; + methods.setOpacity = setOpacity_IE; + methods.getOpacity = getOpacity_IE; + } + + var UID = 0; + + GLOBAL.Element.Storage = { UID: 1 }; + + function getUniqueElementID(element) { + if (element === window) return 0; + + if (typeof element._prototypeUID === 'undefined') + element._prototypeUID = Element.Storage.UID++; + return element._prototypeUID; + } + + function getUniqueElementID_IE(element) { + if (element === window) return 0; + if (element == document) return 1; + return element.uniqueID; + } + + var HAS_UNIQUE_ID_PROPERTY = ('uniqueID' in DIV); + if (HAS_UNIQUE_ID_PROPERTY) + getUniqueElementID = getUniqueElementID_IE; + + function getStorage(element) { + if (!(element = $(element))) return; + + var uid = getUniqueElementID(element); + + if (!Element.Storage[uid]) + Element.Storage[uid] = $H(); + + return Element.Storage[uid]; + } + + function store(element, key, value) { + if (!(element = $(element))) return; + var storage = getStorage(element); + if (arguments.length === 2) { + storage.update(key); + } else { + storage.set(key, value); + } + return element; + } + + function retrieve(element, key, defaultValue) { + if (!(element = $(element))) return; + var storage = getStorage(element), value = storage.get(key); + + if (Object.isUndefined(value)) { + storage.set(key, defaultValue); + value = defaultValue; + } + + return value; + } + + + Object.extend(methods, { + getStorage: getStorage, + store: store, + retrieve: retrieve + }); + + + var Methods = {}, ByTag = Element.Methods.ByTag, + F = Prototype.BrowserFeatures; + + if (!F.ElementExtensions && ('__proto__' in DIV)) { + GLOBAL.HTMLElement = {}; + GLOBAL.HTMLElement.prototype = DIV['__proto__']; + F.ElementExtensions = true; + } + + function checkElementPrototypeDeficiency(tagName) { + if (typeof window.Element === 'undefined') return false; + if (!HAS_EXTENDED_CREATE_ELEMENT_SYNTAX) return false; + var proto = window.Element.prototype; + if (proto) { + var id = '_' + (Math.random() + '').slice(2), + el = document.createElement(tagName); + proto[id] = 'x'; + var isBuggy = (el[id] !== 'x'); + delete proto[id]; + el = null; + return isBuggy; + } + + return false; + } + + var HTMLOBJECTELEMENT_PROTOTYPE_BUGGY = + checkElementPrototypeDeficiency('object'); + + function extendElementWith(element, methods) { + for (var property in methods) { + var value = methods[property]; + if (Object.isFunction(value) && !(property in element)) + element[property] = value.methodize(); + } + } + + var EXTENDED = {}; + function elementIsExtended(element) { + var uid = getUniqueElementID(element); + return (uid in EXTENDED); + } + + function extend(element) { + if (!element || elementIsExtended(element)) return element; + if (element.nodeType !== Node.ELEMENT_NODE || element == window) + return element; + + var methods = Object.clone(Methods), + tagName = element.tagName.toUpperCase(); + + if (ByTag[tagName]) Object.extend(methods, ByTag[tagName]); + + extendElementWith(element, methods); + EXTENDED[getUniqueElementID(element)] = true; + return element; + } + + function extend_IE8(element) { + if (!element || elementIsExtended(element)) return element; + + var t = element.tagName; + if (t && (/^(?:object|applet|embed)$/i.test(t))) { + extendElementWith(element, Element.Methods); + extendElementWith(element, Element.Methods.Simulated); + extendElementWith(element, Element.Methods.ByTag[t.toUpperCase()]); + } + + return element; + } + + if (F.SpecificElementExtensions) { + extend = HTMLOBJECTELEMENT_PROTOTYPE_BUGGY ? extend_IE8 : Prototype.K; + } + + function addMethodsToTagName(tagName, methods) { + tagName = tagName.toUpperCase(); + if (!ByTag[tagName]) ByTag[tagName] = {}; + Object.extend(ByTag[tagName], methods); + } + + function mergeMethods(destination, methods, onlyIfAbsent) { + if (Object.isUndefined(onlyIfAbsent)) onlyIfAbsent = false; + for (var property in methods) { + var value = methods[property]; + if (!Object.isFunction(value)) continue; + if (!onlyIfAbsent || !(property in destination)) + destination[property] = value.methodize(); + } + } + + function findDOMClass(tagName) { + var klass; + var trans = { + "OPTGROUP": "OptGroup", "TEXTAREA": "TextArea", "P": "Paragraph", + "FIELDSET": "FieldSet", "UL": "UList", "OL": "OList", "DL": "DList", + "DIR": "Directory", "H1": "Heading", "H2": "Heading", "H3": "Heading", + "H4": "Heading", "H5": "Heading", "H6": "Heading", "Q": "Quote", + "INS": "Mod", "DEL": "Mod", "A": "Anchor", "IMG": "Image", "CAPTION": + "TableCaption", "COL": "TableCol", "COLGROUP": "TableCol", "THEAD": + "TableSection", "TFOOT": "TableSection", "TBODY": "TableSection", "TR": + "TableRow", "TH": "TableCell", "TD": "TableCell", "FRAMESET": + "FrameSet", "IFRAME": "IFrame" + }; + if (trans[tagName]) klass = 'HTML' + trans[tagName] + 'Element'; + if (window[klass]) return window[klass]; + klass = 'HTML' + tagName + 'Element'; + if (window[klass]) return window[klass]; + klass = 'HTML' + tagName.capitalize() + 'Element'; + if (window[klass]) return window[klass]; + + var element = document.createElement(tagName), + proto = element['__proto__'] || element.constructor.prototype; + + element = null; + return proto; + } + + function addMethods(methods) { + if (arguments.length === 0) addFormMethods(); + + if (arguments.length === 2) { + var tagName = methods; + methods = arguments[1]; + } + + if (!tagName) { + Object.extend(Element.Methods, methods || {}); + } else { + if (Object.isArray(tagName)) { + for (var i = 0, tag; tag = tagName[i]; i++) + addMethodsToTagName(tag, methods); + } else { + addMethodsToTagName(tagName, methods); + } + } + + var ELEMENT_PROTOTYPE = window.HTMLElement ? HTMLElement.prototype : + Element.prototype; + + if (F.ElementExtensions) { + mergeMethods(ELEMENT_PROTOTYPE, Element.Methods); + mergeMethods(ELEMENT_PROTOTYPE, Element.Methods.Simulated, true); + } + + if (F.SpecificElementExtensions) { + for (var tag in Element.Methods.ByTag) { + var klass = findDOMClass(tag); + if (Object.isUndefined(klass)) continue; + mergeMethods(klass.prototype, ByTag[tag]); + } + } + + Object.extend(Element, Element.Methods); + Object.extend(Element, Element.Methods.Simulated); + delete Element.ByTag; + delete Element.Simulated; + + Element.extend.refresh(); + + ELEMENT_CACHE = {}; + } + + Object.extend(GLOBAL.Element, { + extend: extend, + addMethods: addMethods + }); + + if (extend === Prototype.K) { + GLOBAL.Element.extend.refresh = Prototype.emptyFunction; + } else { + GLOBAL.Element.extend.refresh = function() { + if (Prototype.BrowserFeatures.ElementExtensions) return; + Object.extend(Methods, Element.Methods); + Object.extend(Methods, Element.Methods.Simulated); + + EXTENDED = {}; + }; + } + + function addFormMethods() { + Object.extend(Form, Form.Methods); + Object.extend(Form.Element, Form.Element.Methods); + Object.extend(Element.Methods.ByTag, { + "FORM": Object.clone(Form.Methods), + "INPUT": Object.clone(Form.Element.Methods), + "SELECT": Object.clone(Form.Element.Methods), + "TEXTAREA": Object.clone(Form.Element.Methods), + "BUTTON": Object.clone(Form.Element.Methods) + }); + } + + Element.addMethods(methods); + + function destroyCache_IE() { + DIV = null; + ELEMENT_CACHE = null; + } + + if (window.attachEvent) + window.attachEvent('onunload', destroyCache_IE); + +})(this); +(function() { + + function toDecimal(pctString) { + var match = pctString.match(/^(\d+)%?$/i); + if (!match) return null; + return (Number(match[1]) / 100); + } + + function getRawStyle(element, style) { + element = $(element); + + var value = element.style[style]; + if (!value || value === 'auto') { + var css = document.defaultView.getComputedStyle(element, null); + value = css ? css[style] : null; + } + + if (style === 'opacity') return value ? parseFloat(value) : 1.0; + return value === 'auto' ? null : value; + } + + function getRawStyle_IE(element, style) { + var value = element.style[style]; + if (!value && element.currentStyle) { + value = element.currentStyle[style]; + } + return value; + } + + function getContentWidth(element, context) { + var boxWidth = element.offsetWidth; + + var bl = getPixelValue(element, 'borderLeftWidth', context) || 0; + var br = getPixelValue(element, 'borderRightWidth', context) || 0; + var pl = getPixelValue(element, 'paddingLeft', context) || 0; + var pr = getPixelValue(element, 'paddingRight', context) || 0; + + return boxWidth - bl - br - pl - pr; + } + + if ('currentStyle' in document.documentElement) { + getRawStyle = getRawStyle_IE; + } + + + function getPixelValue(value, property, context) { + var element = null; + if (Object.isElement(value)) { + element = value; + value = getRawStyle(element, property); + } + + if (value === null || Object.isUndefined(value)) { + return null; + } + + if ((/^(?:-)?\d+(\.\d+)?(px)?$/i).test(value)) { + return window.parseFloat(value); + } + + var isPercentage = value.include('%'), isViewport = (context === document.viewport); + + if (/\d/.test(value) && element && element.runtimeStyle && !(isPercentage && isViewport)) { + var style = element.style.left, rStyle = element.runtimeStyle.left; + element.runtimeStyle.left = element.currentStyle.left; + element.style.left = value || 0; + value = element.style.pixelLeft; + element.style.left = style; + element.runtimeStyle.left = rStyle; + + return value; + } + + if (element && isPercentage) { + context = context || element.parentNode; + var decimal = toDecimal(value), whole = null; + + var isHorizontal = property.include('left') || property.include('right') || + property.include('width'); + + var isVertical = property.include('top') || property.include('bottom') || + property.include('height'); + + if (context === document.viewport) { + if (isHorizontal) { + whole = document.viewport.getWidth(); + } else if (isVertical) { + whole = document.viewport.getHeight(); + } + } else { + if (isHorizontal) { + whole = $(context).measure('width'); + } else if (isVertical) { + whole = $(context).measure('height'); + } + } + + return (whole === null) ? 0 : whole * decimal; + } + + return 0; + } + + function toCSSPixels(number) { + if (Object.isString(number) && number.endsWith('px')) + return number; + return number + 'px'; + } + + function isDisplayed(element) { + while (element && element.parentNode) { + var display = element.getStyle('display'); + if (display === 'none') { + return false; + } + element = $(element.parentNode); + } + return true; + } + + var hasLayout = Prototype.K; + if ('currentStyle' in document.documentElement) { + hasLayout = function(element) { + if (!element.currentStyle.hasLayout) { + element.style.zoom = 1; + } + return element; + }; + } + + function cssNameFor(key) { + if (key.include('border')) key = key + '-width'; + return key.camelize(); + } + + Element.Layout = Class.create(Hash, { + initialize: function($super, element, preCompute) { + $super(); + this.element = $(element); + + Element.Layout.PROPERTIES.each( function(property) { + this._set(property, null); + }, this); + + if (preCompute) { + this._preComputing = true; + this._begin(); + Element.Layout.PROPERTIES.each( this._compute, this ); + this._end(); + this._preComputing = false; + } + }, + + _set: function(property, value) { + return Hash.prototype.set.call(this, property, value); + }, + + set: function(property, value) { + throw "Properties of Element.Layout are read-only."; + }, + + get: function($super, property) { + var value = $super(property); + return value === null ? this._compute(property) : value; + }, + + _begin: function() { + if (this._isPrepared()) return; + + var element = this.element; + if (isDisplayed(element)) { + this._setPrepared(true); + return; + } + + + var originalStyles = { + position: element.style.position || '', + width: element.style.width || '', + visibility: element.style.visibility || '', + display: element.style.display || '' + }; + + element.store('prototype_original_styles', originalStyles); + + var position = getRawStyle(element, 'position'), width = element.offsetWidth; + + if (width === 0 || width === null) { + element.style.display = 'block'; + width = element.offsetWidth; + } + + var context = (position === 'fixed') ? document.viewport : + element.parentNode; + + var tempStyles = { + visibility: 'hidden', + display: 'block' + }; + + if (position !== 'fixed') tempStyles.position = 'absolute'; + + element.setStyle(tempStyles); + + var positionedWidth = element.offsetWidth, newWidth; + if (width && (positionedWidth === width)) { + newWidth = getContentWidth(element, context); + } else if (position === 'absolute' || position === 'fixed') { + newWidth = getContentWidth(element, context); + } else { + var parent = element.parentNode, pLayout = $(parent).getLayout(); + + newWidth = pLayout.get('width') - + this.get('margin-left') - + this.get('border-left') - + this.get('padding-left') - + this.get('padding-right') - + this.get('border-right') - + this.get('margin-right'); + } + + element.setStyle({ width: newWidth + 'px' }); + + this._setPrepared(true); + }, + + _end: function() { + var element = this.element; + var originalStyles = element.retrieve('prototype_original_styles'); + element.store('prototype_original_styles', null); + element.setStyle(originalStyles); + this._setPrepared(false); + }, + + _compute: function(property) { + var COMPUTATIONS = Element.Layout.COMPUTATIONS; + if (!(property in COMPUTATIONS)) { + throw "Property not found."; + } + + return this._set(property, COMPUTATIONS[property].call(this, this.element)); + }, + + _isPrepared: function() { + return this.element.retrieve('prototype_element_layout_prepared', false); + }, + + _setPrepared: function(bool) { + return this.element.store('prototype_element_layout_prepared', bool); + }, + + toObject: function() { + var args = $A(arguments); + var keys = (args.length === 0) ? Element.Layout.PROPERTIES : + args.join(' ').split(' '); + var obj = {}; + keys.each( function(key) { + if (!Element.Layout.PROPERTIES.include(key)) return; + var value = this.get(key); + if (value != null) obj[key] = value; + }, this); + return obj; + }, + + toHash: function() { + var obj = this.toObject.apply(this, arguments); + return new Hash(obj); + }, + + toCSS: function() { + var args = $A(arguments); + var keys = (args.length === 0) ? Element.Layout.PROPERTIES : + args.join(' ').split(' '); + var css = {}; + + keys.each( function(key) { + if (!Element.Layout.PROPERTIES.include(key)) return; + if (Element.Layout.COMPOSITE_PROPERTIES.include(key)) return; + + var value = this.get(key); + if (value != null) css[cssNameFor(key)] = value + 'px'; + }, this); + return css; + }, + + inspect: function() { + return "#"; + } + }); + + Object.extend(Element.Layout, { + PROPERTIES: $w('height width top left right bottom border-left border-right border-top border-bottom padding-left padding-right padding-top padding-bottom margin-top margin-bottom margin-left margin-right padding-box-width padding-box-height border-box-width border-box-height margin-box-width margin-box-height'), + + COMPOSITE_PROPERTIES: $w('padding-box-width padding-box-height margin-box-width margin-box-height border-box-width border-box-height'), + + COMPUTATIONS: { + 'height': function(element) { + if (!this._preComputing) this._begin(); + + var bHeight = this.get('border-box-height'); + if (bHeight <= 0) { + if (!this._preComputing) this._end(); + return 0; + } + + var bTop = this.get('border-top'), + bBottom = this.get('border-bottom'); + + var pTop = this.get('padding-top'), + pBottom = this.get('padding-bottom'); + + if (!this._preComputing) this._end(); + + return bHeight - bTop - bBottom - pTop - pBottom; + }, + + 'width': function(element) { + if (!this._preComputing) this._begin(); + + var bWidth = this.get('border-box-width'); + if (bWidth <= 0) { + if (!this._preComputing) this._end(); + return 0; + } + + var bLeft = this.get('border-left'), + bRight = this.get('border-right'); + + var pLeft = this.get('padding-left'), + pRight = this.get('padding-right'); + + if (!this._preComputing) this._end(); + return bWidth - bLeft - bRight - pLeft - pRight; + }, + + 'padding-box-height': function(element) { + var height = this.get('height'), + pTop = this.get('padding-top'), + pBottom = this.get('padding-bottom'); + + return height + pTop + pBottom; + }, + + 'padding-box-width': function(element) { + var width = this.get('width'), + pLeft = this.get('padding-left'), + pRight = this.get('padding-right'); + + return width + pLeft + pRight; + }, + + 'border-box-height': function(element) { + if (!this._preComputing) this._begin(); + var height = element.offsetHeight; + if (!this._preComputing) this._end(); + return height; + }, + + 'border-box-width': function(element) { + if (!this._preComputing) this._begin(); + var width = element.offsetWidth; + if (!this._preComputing) this._end(); + return width; + }, + + 'margin-box-height': function(element) { + var bHeight = this.get('border-box-height'), + mTop = this.get('margin-top'), + mBottom = this.get('margin-bottom'); + + if (bHeight <= 0) return 0; + + return bHeight + mTop + mBottom; + }, + + 'margin-box-width': function(element) { + var bWidth = this.get('border-box-width'), + mLeft = this.get('margin-left'), + mRight = this.get('margin-right'); + + if (bWidth <= 0) return 0; + + return bWidth + mLeft + mRight; + }, + + 'top': function(element) { + var offset = element.positionedOffset(); + return offset.top; + }, + + 'bottom': function(element) { + var offset = element.positionedOffset(), + parent = element.getOffsetParent(), + pHeight = parent.measure('height'); + + var mHeight = this.get('border-box-height'); + + return pHeight - mHeight - offset.top; + }, + + 'left': function(element) { + var offset = element.positionedOffset(); + return offset.left; + }, + + 'right': function(element) { + var offset = element.positionedOffset(), + parent = element.getOffsetParent(), + pWidth = parent.measure('width'); + + var mWidth = this.get('border-box-width'); + + return pWidth - mWidth - offset.left; + }, + + 'padding-top': function(element) { + return getPixelValue(element, 'paddingTop'); + }, + + 'padding-bottom': function(element) { + return getPixelValue(element, 'paddingBottom'); + }, + + 'padding-left': function(element) { + return getPixelValue(element, 'paddingLeft'); + }, + + 'padding-right': function(element) { + return getPixelValue(element, 'paddingRight'); + }, + + 'border-top': function(element) { + return getPixelValue(element, 'borderTopWidth'); + }, + + 'border-bottom': function(element) { + return getPixelValue(element, 'borderBottomWidth'); + }, + + 'border-left': function(element) { + return getPixelValue(element, 'borderLeftWidth'); + }, + + 'border-right': function(element) { + return getPixelValue(element, 'borderRightWidth'); + }, + + 'margin-top': function(element) { + return getPixelValue(element, 'marginTop'); + }, + + 'margin-bottom': function(element) { + return getPixelValue(element, 'marginBottom'); + }, + + 'margin-left': function(element) { + return getPixelValue(element, 'marginLeft'); + }, + + 'margin-right': function(element) { + return getPixelValue(element, 'marginRight'); + } + } + }); + + if ('getBoundingClientRect' in document.documentElement) { + Object.extend(Element.Layout.COMPUTATIONS, { + 'right': function(element) { + var parent = hasLayout(element.getOffsetParent()); + var rect = element.getBoundingClientRect(), + pRect = parent.getBoundingClientRect(); + + return (pRect.right - rect.right).round(); + }, + + 'bottom': function(element) { + var parent = hasLayout(element.getOffsetParent()); + var rect = element.getBoundingClientRect(), + pRect = parent.getBoundingClientRect(); + + return (pRect.bottom - rect.bottom).round(); + } + }); + } + + Element.Offset = Class.create({ + initialize: function(left, top) { + this.left = left.round(); + this.top = top.round(); + + this[0] = this.left; + this[1] = this.top; + }, + + relativeTo: function(offset) { + return new Element.Offset( + this.left - offset.left, + this.top - offset.top + ); + }, + + inspect: function() { + return "#".interpolate(this); + }, + + toString: function() { + return "[#{left}, #{top}]".interpolate(this); + }, + + toArray: function() { + return [this.left, this.top]; + } + }); + + function getLayout(element, preCompute) { + return new Element.Layout(element, preCompute); + } + + function measure(element, property) { + return $(element).getLayout().get(property); + } + + function getHeight(element) { + return Element.getDimensions(element).height; + } + + function getWidth(element) { + return Element.getDimensions(element).width; + } + + function getDimensions(element) { + element = $(element); + var display = Element.getStyle(element, 'display'); + + if (display && display !== 'none') { + return { width: element.offsetWidth, height: element.offsetHeight }; + } + + var style = element.style; + var originalStyles = { + visibility: style.visibility, + position: style.position, + display: style.display + }; + + var newStyles = { + visibility: 'hidden', + display: 'block' + }; + + if (originalStyles.position !== 'fixed') + newStyles.position = 'absolute'; + + Element.setStyle(element, newStyles); + + var dimensions = { + width: element.offsetWidth, + height: element.offsetHeight + }; + + Element.setStyle(element, originalStyles); + + return dimensions; + } + + function getOffsetParent(element) { + element = $(element); + + if (isDocument(element) || isDetached(element) || isBody(element) || isHtml(element)) + return $(document.body); + + var isInline = (Element.getStyle(element, 'display') === 'inline'); + if (!isInline && element.offsetParent) return $(element.offsetParent); + + while ((element = element.parentNode) && element !== document.body) { + if (Element.getStyle(element, 'position') !== 'static') { + return isHtml(element) ? $(document.body) : $(element); + } + } + + return $(document.body); + } + + + function cumulativeOffset(element) { + element = $(element); + var valueT = 0, valueL = 0; + if (element.parentNode) { + do { + valueT += element.offsetTop || 0; + valueL += element.offsetLeft || 0; + element = element.offsetParent; + } while (element); + } + return new Element.Offset(valueL, valueT); + } + + function positionedOffset(element) { + element = $(element); + + var layout = element.getLayout(); + + var valueT = 0, valueL = 0; + do { + valueT += element.offsetTop || 0; + valueL += element.offsetLeft || 0; + element = element.offsetParent; + if (element) { + if (isBody(element)) break; + var p = Element.getStyle(element, 'position'); + if (p !== 'static') break; + } + } while (element); + + valueL -= layout.get('margin-top'); + valueT -= layout.get('margin-left'); + + return new Element.Offset(valueL, valueT); + } + + function cumulativeScrollOffset(element) { + var valueT = 0, valueL = 0; + do { + if (element === document.body) { + var bodyScrollNode = document.documentElement || document.body.parentNode || document.body; + valueT += !Object.isUndefined(window.pageYOffset) ? window.pageYOffset : bodyScrollNode.scrollTop || 0; + valueL += !Object.isUndefined(window.pageXOffset) ? window.pageXOffset : bodyScrollNode.scrollLeft || 0; + break; + } else { + valueT += element.scrollTop || 0; + valueL += element.scrollLeft || 0; + element = element.parentNode; + } + } while (element); + return new Element.Offset(valueL, valueT); + } + + function viewportOffset(forElement) { + var valueT = 0, valueL = 0, docBody = document.body; + + forElement = $(forElement); + var element = forElement; + do { + valueT += element.offsetTop || 0; + valueL += element.offsetLeft || 0; + if (element.offsetParent == docBody && + Element.getStyle(element, 'position') == 'absolute') break; + } while (element = element.offsetParent); + + element = forElement; + do { + if (element != docBody) { + valueT -= element.scrollTop || 0; + valueL -= element.scrollLeft || 0; + } + } while (element = element.parentNode); + return new Element.Offset(valueL, valueT); + } + + function absolutize(element) { + element = $(element); + + if (Element.getStyle(element, 'position') === 'absolute') { + return element; + } + + var offsetParent = getOffsetParent(element); + var eOffset = element.viewportOffset(), + pOffset = offsetParent.viewportOffset(); + + var offset = eOffset.relativeTo(pOffset); + var layout = element.getLayout(); + + element.store('prototype_absolutize_original_styles', { + position: element.getStyle('position'), + left: element.getStyle('left'), + top: element.getStyle('top'), + width: element.getStyle('width'), + height: element.getStyle('height') + }); + + element.setStyle({ + position: 'absolute', + top: offset.top + 'px', + left: offset.left + 'px', + width: layout.get('width') + 'px', + height: layout.get('height') + 'px' + }); + + return element; + } + + function relativize(element) { + element = $(element); + if (Element.getStyle(element, 'position') === 'relative') { + return element; + } + + var originalStyles = + element.retrieve('prototype_absolutize_original_styles'); + + if (originalStyles) element.setStyle(originalStyles); + return element; + } + + + function scrollTo(element) { + element = $(element); + var pos = Element.cumulativeOffset(element); + window.scrollTo(pos.left, pos.top); + return element; + } + + + function makePositioned(element) { + element = $(element); + var position = Element.getStyle(element, 'position'), styles = {}; + if (position === 'static' || !position) { + styles.position = 'relative'; + if (Prototype.Browser.Opera) { + styles.top = 0; + styles.left = 0; + } + Element.setStyle(element, styles); + Element.store(element, 'prototype_made_positioned', true); + } + return element; + } + + function undoPositioned(element) { + element = $(element); + var storage = Element.getStorage(element), + madePositioned = storage.get('prototype_made_positioned'); + + if (madePositioned) { + storage.unset('prototype_made_positioned'); + Element.setStyle(element, { + position: '', + top: '', + bottom: '', + left: '', + right: '' + }); + } + return element; + } + + function makeClipping(element) { + element = $(element); + + var storage = Element.getStorage(element), + madeClipping = storage.get('prototype_made_clipping'); + + if (Object.isUndefined(madeClipping)) { + var overflow = Element.getStyle(element, 'overflow'); + storage.set('prototype_made_clipping', overflow); + if (overflow !== 'hidden') + element.style.overflow = 'hidden'; + } + + return element; + } + + function undoClipping(element) { + element = $(element); + var storage = Element.getStorage(element), + overflow = storage.get('prototype_made_clipping'); + + if (!Object.isUndefined(overflow)) { + storage.unset('prototype_made_clipping'); + element.style.overflow = overflow || ''; + } + + return element; + } + + function clonePosition(element, source, options) { + options = Object.extend({ + setLeft: true, + setTop: true, + setWidth: true, + setHeight: true, + offsetTop: 0, + offsetLeft: 0 + }, options || {}); + + source = $(source); + element = $(element); + var p, delta, layout, styles = {}; + + if (options.setLeft || options.setTop) { + p = Element.viewportOffset(source); + delta = [0, 0]; + if (Element.getStyle(element, 'position') === 'absolute') { + var parent = Element.getOffsetParent(element); + if (parent !== document.body) delta = Element.viewportOffset(parent); + } + } + + if (options.setWidth || options.setHeight) { + layout = Element.getLayout(source); + } + + if (options.setLeft) + styles.left = (p[0] - delta[0] + options.offsetLeft) + 'px'; + if (options.setTop) + styles.top = (p[1] - delta[1] + options.offsetTop) + 'px'; + + if (options.setWidth) + styles.width = layout.get('border-box-width') + 'px'; + if (options.setHeight) + styles.height = layout.get('border-box-height') + 'px'; + + return Element.setStyle(element, styles); + } + + + if (Prototype.Browser.IE) { + getOffsetParent = getOffsetParent.wrap( + function(proceed, element) { + element = $(element); + + if (isDocument(element) || isDetached(element) || isBody(element) || isHtml(element)) + return $(document.body); + + var position = element.getStyle('position'); + if (position !== 'static') return proceed(element); + + element.setStyle({ position: 'relative' }); + var value = proceed(element); + element.setStyle({ position: position }); + return value; + } + ); + + positionedOffset = positionedOffset.wrap(function(proceed, element) { + element = $(element); + if (!element.parentNode) return new Element.Offset(0, 0); + var position = element.getStyle('position'); + if (position !== 'static') return proceed(element); + + var offsetParent = element.getOffsetParent(); + if (offsetParent && offsetParent.getStyle('position') === 'fixed') + hasLayout(offsetParent); + + element.setStyle({ position: 'relative' }); + var value = proceed(element); + element.setStyle({ position: position }); + return value; + }); + } else if (Prototype.Browser.Webkit) { + cumulativeOffset = function(element) { + element = $(element); + var valueT = 0, valueL = 0; + do { + valueT += element.offsetTop || 0; + valueL += element.offsetLeft || 0; + if (element.offsetParent == document.body) { + if (Element.getStyle(element, 'position') == 'absolute') break; + } + + element = element.offsetParent; + } while (element); + + return new Element.Offset(valueL, valueT); + }; + } + + + Element.addMethods({ + getLayout: getLayout, + measure: measure, + getWidth: getWidth, + getHeight: getHeight, + getDimensions: getDimensions, + getOffsetParent: getOffsetParent, + cumulativeOffset: cumulativeOffset, + positionedOffset: positionedOffset, + cumulativeScrollOffset: cumulativeScrollOffset, + viewportOffset: viewportOffset, + absolutize: absolutize, + relativize: relativize, + scrollTo: scrollTo, + makePositioned: makePositioned, + undoPositioned: undoPositioned, + makeClipping: makeClipping, + undoClipping: undoClipping, + clonePosition: clonePosition + }); + + function isBody(element) { + return element.nodeName.toUpperCase() === 'BODY'; + } + + function isHtml(element) { + return element.nodeName.toUpperCase() === 'HTML'; + } + + function isDocument(element) { + return element.nodeType === Node.DOCUMENT_NODE; + } + + function isDetached(element) { + return element !== document.body && + !Element.descendantOf(element, document.body); + } + + if ('getBoundingClientRect' in document.documentElement) { + Element.addMethods({ + viewportOffset: function(element) { + element = $(element); + if (isDetached(element)) return new Element.Offset(0, 0); + + var rect = element.getBoundingClientRect(), + docEl = document.documentElement; + return new Element.Offset(rect.left - docEl.clientLeft, + rect.top - docEl.clientTop); + } + }); + } + + +})(); + +(function() { + + var IS_OLD_OPERA = Prototype.Browser.Opera && + (window.parseFloat(window.opera.version()) < 9.5); + var ROOT = null; + function getRootElement() { + if (ROOT) return ROOT; + ROOT = IS_OLD_OPERA ? document.body : document.documentElement; + return ROOT; + } + + function getDimensions() { + return { width: this.getWidth(), height: this.getHeight() }; + } + + function getWidth() { + return getRootElement().clientWidth; + } + + function getHeight() { + return getRootElement().clientHeight; + } + + function getScrollOffsets() { + var x = window.pageXOffset || document.documentElement.scrollLeft || + document.body.scrollLeft; + var y = window.pageYOffset || document.documentElement.scrollTop || + document.body.scrollTop; + + return new Element.Offset(x, y); + } + + document.viewport = { + getDimensions: getDimensions, + getWidth: getWidth, + getHeight: getHeight, + getScrollOffsets: getScrollOffsets + }; + +})(); +window.$$ = function() { + var expression = $A(arguments).join(', '); + return Prototype.Selector.select(expression, document); +}; + +Prototype.Selector = (function() { + + function select() { + throw new Error('Method "Prototype.Selector.select" must be defined.'); + } + + function match() { + throw new Error('Method "Prototype.Selector.match" must be defined.'); + } + + function find(elements, expression, index) { + index = index || 0; + var match = Prototype.Selector.match, length = elements.length, matchIndex = 0, i; + + for (i = 0; i < length; i++) { + if (match(elements[i], expression) && index == matchIndex++) { + return Element.extend(elements[i]); + } + } + } + + function extendElements(elements) { + for (var i = 0, length = elements.length; i < length; i++) { + Element.extend(elements[i]); + } + return elements; + } + + + var K = Prototype.K; + + return { + select: select, + match: match, + find: find, + extendElements: (Element.extend === K) ? K : extendElements, + extendElement: Element.extend + }; +})(); +Prototype._original_property = window.Sizzle; +/*! + * Sizzle CSS Selector Engine v@VERSION + * http://sizzlejs.com/ + * + * Copyright 2013 jQuery Foundation, Inc. and other contributors + * Released under the MIT license + * http://jquery.org/license + * + * Date: @DATE + */ +(function( window ) { + +var i, + support, + Expr, + getText, + isXML, + compile, + select, + outermostContext, + sortInput, + hasDuplicate, + + setDocument, + document, + docElem, + documentIsHTML, + rbuggyQSA, + rbuggyMatches, + matches, + contains, + + expando = "sizzle" + -(new Date()), + preferredDoc = window.document, + dirruns = 0, + done = 0, + classCache = createCache(), + tokenCache = createCache(), + compilerCache = createCache(), + sortOrder = function( a, b ) { + if ( a === b ) { + hasDuplicate = true; + } + return 0; + }, + + strundefined = typeof undefined, + MAX_NEGATIVE = 1 << 31, + + hasOwn = ({}).hasOwnProperty, + arr = [], + pop = arr.pop, + push_native = arr.push, + push = arr.push, + slice = arr.slice, + indexOf = arr.indexOf || function( elem ) { + var i = 0, + len = this.length; + for ( ; i < len; i++ ) { + if ( this[i] === elem ) { + return i; + } + } + return -1; + }, + + booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped", + + + whitespace = "[\\x20\\t\\r\\n\\f]", + characterEncoding = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+", + + identifier = characterEncoding.replace( "w", "w#" ), + + attributes = "\\[" + whitespace + "*(" + characterEncoding + ")" + whitespace + + "*(?:([*^$|!~]?=)" + whitespace + "*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|(" + identifier + ")|)|)" + whitespace + "*\\]", + + pseudos = ":(" + characterEncoding + ")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|" + attributes.replace( 3, 8 ) + ")*)|.*)\\)|)", + + rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ), + + rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), + rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ), + + rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]", "g" ), + + rpseudo = new RegExp( pseudos ), + ridentifier = new RegExp( "^" + identifier + "$" ), + + matchExpr = { + "ID": new RegExp( "^#(" + characterEncoding + ")" ), + "CLASS": new RegExp( "^\\.(" + characterEncoding + ")" ), + "TAG": new RegExp( "^(" + characterEncoding.replace( "w", "w*" ) + ")" ), + "ATTR": new RegExp( "^" + attributes ), + "PSEUDO": new RegExp( "^" + pseudos ), + "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace + + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace + + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), + "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), + "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + + whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) + }, + + rinputs = /^(?:input|select|textarea|button)$/i, + rheader = /^h\d$/i, + + rnative = /^[^{]+\{\s*\[native \w/, + + rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, + + rsibling = /[+~]/, + rescape = /'|\\/g, + + runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ), + funescape = function( _, escaped, escapedWhitespace ) { + var high = "0x" + escaped - 0x10000; + return high !== high || escapedWhitespace ? + escaped : + high < 0 ? + String.fromCharCode( high + 0x10000 ) : + String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); + }; + +try { + push.apply( + (arr = slice.call( preferredDoc.childNodes )), + preferredDoc.childNodes + ); + arr[ preferredDoc.childNodes.length ].nodeType; +} catch ( e ) { + push = { apply: arr.length ? + + function( target, els ) { + push_native.apply( target, slice.call(els) ); + } : + + function( target, els ) { + var j = target.length, + i = 0; + while ( (target[j++] = els[i++]) ) {} + target.length = j - 1; + } + }; +} + +function Sizzle( selector, context, results, seed ) { + var match, elem, m, nodeType, + i, groups, old, nid, newContext, newSelector; + + if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) { + setDocument( context ); + } + + context = context || document; + results = results || []; + + if ( !selector || typeof selector !== "string" ) { + return results; + } + + if ( (nodeType = context.nodeType) !== 1 && nodeType !== 9 ) { + return []; + } + + if ( documentIsHTML && !seed ) { + + if ( (match = rquickExpr.exec( selector )) ) { + if ( (m = match[1]) ) { + if ( nodeType === 9 ) { + elem = context.getElementById( m ); + if ( elem && elem.parentNode ) { + if ( elem.id === m ) { + results.push( elem ); + return results; + } + } else { + return results; + } + } else { + if ( context.ownerDocument && (elem = context.ownerDocument.getElementById( m )) && + contains( context, elem ) && elem.id === m ) { + results.push( elem ); + return results; + } + } + + } else if ( match[2] ) { + push.apply( results, context.getElementsByTagName( selector ) ); + return results; + + } else if ( (m = match[3]) && support.getElementsByClassName && context.getElementsByClassName ) { + push.apply( results, context.getElementsByClassName( m ) ); + return results; + } + } + + if ( support.qsa && (!rbuggyQSA || !rbuggyQSA.test( selector )) ) { + nid = old = expando; + newContext = context; + newSelector = nodeType === 9 && selector; + + if ( nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) { + groups = tokenize( selector ); + + if ( (old = context.getAttribute("id")) ) { + nid = old.replace( rescape, "\\$&" ); + } else { + context.setAttribute( "id", nid ); + } + nid = "[id='" + nid + "'] "; + + i = groups.length; + while ( i-- ) { + groups[i] = nid + toSelector( groups[i] ); + } + newContext = rsibling.test( selector ) && testContext( context.parentNode ) || context; + newSelector = groups.join(","); + } + + if ( newSelector ) { + try { + push.apply( results, + newContext.querySelectorAll( newSelector ) + ); + return results; + } catch(qsaError) { + } finally { + if ( !old ) { + context.removeAttribute("id"); + } + } + } + } + } + + return select( selector.replace( rtrim, "$1" ), context, results, seed ); +} + +/** + * Create key-value caches of limited size + * @returns {Function(string, Object)} Returns the Object data after storing it on itself with + * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) + * deleting the oldest entry + */ +function createCache() { + var keys = []; + + function cache( key, value ) { + if ( keys.push( key + " " ) > Expr.cacheLength ) { + delete cache[ keys.shift() ]; + } + return (cache[ key + " " ] = value); + } + return cache; +} + +/** + * Mark a function for special use by Sizzle + * @param {Function} fn The function to mark + */ +function markFunction( fn ) { + fn[ expando ] = true; + return fn; +} + +/** + * Support testing using an element + * @param {Function} fn Passed the created div and expects a boolean result + */ +function assert( fn ) { + var div = document.createElement("div"); + + try { + return !!fn( div ); + } catch (e) { + return false; + } finally { + if ( div.parentNode ) { + div.parentNode.removeChild( div ); + } + div = null; + } +} + +/** + * Adds the same handler for all of the specified attrs + * @param {String} attrs Pipe-separated list of attributes + * @param {Function} handler The method that will be applied + */ +function addHandle( attrs, handler ) { + var arr = attrs.split("|"), + i = attrs.length; + + while ( i-- ) { + Expr.attrHandle[ arr[i] ] = handler; + } +} + +/** + * Checks document order of two siblings + * @param {Element} a + * @param {Element} b + * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b + */ +function siblingCheck( a, b ) { + var cur = b && a, + diff = cur && a.nodeType === 1 && b.nodeType === 1 && + ( ~b.sourceIndex || MAX_NEGATIVE ) - + ( ~a.sourceIndex || MAX_NEGATIVE ); + + if ( diff ) { + return diff; + } + + if ( cur ) { + while ( (cur = cur.nextSibling) ) { + if ( cur === b ) { + return -1; + } + } + } + + return a ? 1 : -1; +} + +/** + * Returns a function to use in pseudos for input types + * @param {String} type + */ +function createInputPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for buttons + * @param {String} type + */ +function createButtonPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return (name === "input" || name === "button") && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for positionals + * @param {Function} fn + */ +function createPositionalPseudo( fn ) { + return markFunction(function( argument ) { + argument = +argument; + return markFunction(function( seed, matches ) { + var j, + matchIndexes = fn( [], seed.length, argument ), + i = matchIndexes.length; + + while ( i-- ) { + if ( seed[ (j = matchIndexes[i]) ] ) { + seed[j] = !(matches[j] = seed[j]); + } + } + }); + }); +} + +/** + * Checks a node for validity as a Sizzle context + * @param {Element|Object=} context + * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value + */ +function testContext( context ) { + return context && typeof context.getElementsByTagName !== strundefined && context; +} + +support = Sizzle.support = {}; + +/** + * Detects XML nodes + * @param {Element|Object} elem An element or a document + * @returns {Boolean} True iff elem is a non-HTML XML node + */ +isXML = Sizzle.isXML = function( elem ) { + var documentElement = elem && (elem.ownerDocument || elem).documentElement; + return documentElement ? documentElement.nodeName !== "HTML" : false; +}; + +/** + * Sets document-related variables once based on the current document + * @param {Element|Object} [doc] An element or document object to use to set the document + * @returns {Object} Returns the current document + */ +setDocument = Sizzle.setDocument = function( node ) { + var hasCompare, + doc = node ? node.ownerDocument || node : preferredDoc, + parent = doc.defaultView; + + if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) { + return document; + } + + document = doc; + docElem = doc.documentElement; + + documentIsHTML = !isXML( doc ); + + if ( parent && parent !== parent.top ) { + if ( parent.addEventListener ) { + parent.addEventListener( "unload", function() { + setDocument(); + }, false ); + } else if ( parent.attachEvent ) { + parent.attachEvent( "onunload", function() { + setDocument(); + }); + } + } + + /* Attributes + ---------------------------------------------------------------------- */ + + support.attributes = assert(function( div ) { + div.className = "i"; + return !div.getAttribute("className"); + }); + + /* getElement(s)By* + ---------------------------------------------------------------------- */ + + support.getElementsByTagName = assert(function( div ) { + div.appendChild( doc.createComment("") ); + return !div.getElementsByTagName("*").length; + }); + + support.getElementsByClassName = rnative.test( doc.getElementsByClassName ) && assert(function( div ) { + div.innerHTML = "
    "; + + div.firstChild.className = "i"; + return div.getElementsByClassName("i").length === 2; + }); + + support.getById = assert(function( div ) { + docElem.appendChild( div ).id = expando; + return !doc.getElementsByName || !doc.getElementsByName( expando ).length; + }); + + if ( support.getById ) { + Expr.find["ID"] = function( id, context ) { + if ( typeof context.getElementById !== strundefined && documentIsHTML ) { + var m = context.getElementById( id ); + return m && m.parentNode ? [m] : []; + } + }; + Expr.filter["ID"] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + return elem.getAttribute("id") === attrId; + }; + }; + } else { + delete Expr.find["ID"]; + + Expr.filter["ID"] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + var node = typeof elem.getAttributeNode !== strundefined && elem.getAttributeNode("id"); + return node && node.value === attrId; + }; + }; + } + + Expr.find["TAG"] = support.getElementsByTagName ? + function( tag, context ) { + if ( typeof context.getElementsByTagName !== strundefined ) { + return context.getElementsByTagName( tag ); + } + } : + function( tag, context ) { + var elem, + tmp = [], + i = 0, + results = context.getElementsByTagName( tag ); + + if ( tag === "*" ) { + while ( (elem = results[i++]) ) { + if ( elem.nodeType === 1 ) { + tmp.push( elem ); + } + } + + return tmp; + } + return results; + }; + + Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) { + if ( typeof context.getElementsByClassName !== strundefined && documentIsHTML ) { + return context.getElementsByClassName( className ); + } + }; + + /* QSA/matchesSelector + ---------------------------------------------------------------------- */ + + + rbuggyMatches = []; + + rbuggyQSA = []; + + if ( (support.qsa = rnative.test( doc.querySelectorAll )) ) { + assert(function( div ) { + div.innerHTML = ""; + + if ( div.querySelectorAll("[t^='']").length ) { + rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); + } + + if ( !div.querySelectorAll("[selected]").length ) { + rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); + } + + if ( !div.querySelectorAll(":checked").length ) { + rbuggyQSA.push(":checked"); + } + }); + + assert(function( div ) { + var input = doc.createElement("input"); + input.setAttribute( "type", "hidden" ); + div.appendChild( input ).setAttribute( "name", "D" ); + + if ( div.querySelectorAll("[name=d]").length ) { + rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" ); + } + + if ( !div.querySelectorAll(":enabled").length ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + div.querySelectorAll("*,:x"); + rbuggyQSA.push(",.*:"); + }); + } + + if ( (support.matchesSelector = rnative.test( (matches = docElem.webkitMatchesSelector || + docElem.mozMatchesSelector || + docElem.oMatchesSelector || + docElem.msMatchesSelector) )) ) { + + assert(function( div ) { + support.disconnectedMatch = matches.call( div, "div" ); + + matches.call( div, "[s!='']:x" ); + rbuggyMatches.push( "!=", pseudos ); + }); + } + + rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") ); + rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") ); + + /* Contains + ---------------------------------------------------------------------- */ + hasCompare = rnative.test( docElem.compareDocumentPosition ); + + contains = hasCompare || rnative.test( docElem.contains ) ? + function( a, b ) { + var adown = a.nodeType === 9 ? a.documentElement : a, + bup = b && b.parentNode; + return a === bup || !!( bup && bup.nodeType === 1 && ( + adown.contains ? + adown.contains( bup ) : + a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 + )); + } : + function( a, b ) { + if ( b ) { + while ( (b = b.parentNode) ) { + if ( b === a ) { + return true; + } + } + } + return false; + }; + + /* Sorting + ---------------------------------------------------------------------- */ + + sortOrder = hasCompare ? + function( a, b ) { + + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; + if ( compare ) { + return compare; + } + + compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ? + a.compareDocumentPosition( b ) : + + 1; + + if ( compare & 1 || + (!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) { + + if ( a === doc || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) { + return -1; + } + if ( b === doc || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) { + return 1; + } + + return sortInput ? + ( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) : + 0; + } + + return compare & 4 ? -1 : 1; + } : + function( a, b ) { + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + var cur, + i = 0, + aup = a.parentNode, + bup = b.parentNode, + ap = [ a ], + bp = [ b ]; + + if ( !aup || !bup ) { + return a === doc ? -1 : + b === doc ? 1 : + aup ? -1 : + bup ? 1 : + sortInput ? + ( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) : + 0; + + } else if ( aup === bup ) { + return siblingCheck( a, b ); + } + + cur = a; + while ( (cur = cur.parentNode) ) { + ap.unshift( cur ); + } + cur = b; + while ( (cur = cur.parentNode) ) { + bp.unshift( cur ); + } + + while ( ap[i] === bp[i] ) { + i++; + } + + return i ? + siblingCheck( ap[i], bp[i] ) : + + ap[i] === preferredDoc ? -1 : + bp[i] === preferredDoc ? 1 : + 0; + }; + + return doc; +}; + +Sizzle.matches = function( expr, elements ) { + return Sizzle( expr, null, null, elements ); +}; + +Sizzle.matchesSelector = function( elem, expr ) { + if ( ( elem.ownerDocument || elem ) !== document ) { + setDocument( elem ); + } + + expr = expr.replace( rattributeQuotes, "='$1']" ); + + if ( support.matchesSelector && documentIsHTML && + ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) && + ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { + + try { + var ret = matches.call( elem, expr ); + + if ( ret || support.disconnectedMatch || + elem.document && elem.document.nodeType !== 11 ) { + return ret; + } + } catch(e) {} + } + + return Sizzle( expr, document, null, [elem] ).length > 0; +}; + +Sizzle.contains = function( context, elem ) { + if ( ( context.ownerDocument || context ) !== document ) { + setDocument( context ); + } + return contains( context, elem ); +}; + +Sizzle.attr = function( elem, name ) { + if ( ( elem.ownerDocument || elem ) !== document ) { + setDocument( elem ); + } + + var fn = Expr.attrHandle[ name.toLowerCase() ], + val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? + fn( elem, name, !documentIsHTML ) : + undefined; + + return val !== undefined ? + val : + support.attributes || !documentIsHTML ? + elem.getAttribute( name ) : + (val = elem.getAttributeNode(name)) && val.specified ? + val.value : + null; +}; + +Sizzle.error = function( msg ) { + throw new Error( "Syntax error, unrecognized expression: " + msg ); +}; + +/** + * Document sorting and removing duplicates + * @param {ArrayLike} results + */ +Sizzle.uniqueSort = function( results ) { + var elem, + duplicates = [], + j = 0, + i = 0; + + hasDuplicate = !support.detectDuplicates; + sortInput = !support.sortStable && results.slice( 0 ); + results.sort( sortOrder ); + + if ( hasDuplicate ) { + while ( (elem = results[i++]) ) { + if ( elem === results[ i ] ) { + j = duplicates.push( i ); + } + } + while ( j-- ) { + results.splice( duplicates[ j ], 1 ); + } + } + + sortInput = null; + + return results; +}; + +/** + * Utility function for retrieving the text value of an array of DOM nodes + * @param {Array|Element} elem + */ +getText = Sizzle.getText = function( elem ) { + var node, + ret = "", + i = 0, + nodeType = elem.nodeType; + + if ( !nodeType ) { + while ( (node = elem[i++]) ) { + ret += getText( node ); + } + } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { + if ( typeof elem.textContent === "string" ) { + return elem.textContent; + } else { + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + ret += getText( elem ); + } + } + } else if ( nodeType === 3 || nodeType === 4 ) { + return elem.nodeValue; + } + + return ret; +}; + +Expr = Sizzle.selectors = { + + cacheLength: 50, + + createPseudo: markFunction, + + match: matchExpr, + + attrHandle: {}, + + find: {}, + + relative: { + ">": { dir: "parentNode", first: true }, + " ": { dir: "parentNode" }, + "+": { dir: "previousSibling", first: true }, + "~": { dir: "previousSibling" } + }, + + preFilter: { + "ATTR": function( match ) { + match[1] = match[1].replace( runescape, funescape ); + + match[3] = ( match[4] || match[5] || "" ).replace( runescape, funescape ); + + if ( match[2] === "~=" ) { + match[3] = " " + match[3] + " "; + } + + return match.slice( 0, 4 ); + }, + + "CHILD": function( match ) { + /* matches from matchExpr["CHILD"] + 1 type (only|nth|...) + 2 what (child|of-type) + 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) + 4 xn-component of xn+y argument ([+-]?\d*n|) + 5 sign of xn-component + 6 x of xn-component + 7 sign of y-component + 8 y of y-component + */ + match[1] = match[1].toLowerCase(); + + if ( match[1].slice( 0, 3 ) === "nth" ) { + if ( !match[3] ) { + Sizzle.error( match[0] ); + } + + match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) ); + match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" ); + + } else if ( match[3] ) { + Sizzle.error( match[0] ); + } + + return match; + }, + + "PSEUDO": function( match ) { + var excess, + unquoted = !match[5] && match[2]; + + if ( matchExpr["CHILD"].test( match[0] ) ) { + return null; + } + + if ( match[3] && match[4] !== undefined ) { + match[2] = match[4]; + + } else if ( unquoted && rpseudo.test( unquoted ) && + (excess = tokenize( unquoted, true )) && + (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) { + + match[0] = match[0].slice( 0, excess ); + match[2] = unquoted.slice( 0, excess ); + } + + return match.slice( 0, 3 ); + } + }, + + filter: { + + "TAG": function( nodeNameSelector ) { + var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); + return nodeNameSelector === "*" ? + function() { return true; } : + function( elem ) { + return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; + }; + }, + + "CLASS": function( className ) { + var pattern = classCache[ className + " " ]; + + return pattern || + (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) && + classCache( className, function( elem ) { + return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== strundefined && elem.getAttribute("class") || "" ); + }); + }, + + "ATTR": function( name, operator, check ) { + return function( elem ) { + var result = Sizzle.attr( elem, name ); + + if ( result == null ) { + return operator === "!="; + } + if ( !operator ) { + return true; + } + + result += ""; + + return operator === "=" ? result === check : + operator === "!=" ? result !== check : + operator === "^=" ? check && result.indexOf( check ) === 0 : + operator === "*=" ? check && result.indexOf( check ) > -1 : + operator === "$=" ? check && result.slice( -check.length ) === check : + operator === "~=" ? ( " " + result + " " ).indexOf( check ) > -1 : + operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : + false; + }; + }, + + "CHILD": function( type, what, argument, first, last ) { + var simple = type.slice( 0, 3 ) !== "nth", + forward = type.slice( -4 ) !== "last", + ofType = what === "of-type"; + + return first === 1 && last === 0 ? + + function( elem ) { + return !!elem.parentNode; + } : + + function( elem, context, xml ) { + var cache, outerCache, node, diff, nodeIndex, start, + dir = simple !== forward ? "nextSibling" : "previousSibling", + parent = elem.parentNode, + name = ofType && elem.nodeName.toLowerCase(), + useCache = !xml && !ofType; + + if ( parent ) { + + if ( simple ) { + while ( dir ) { + node = elem; + while ( (node = node[ dir ]) ) { + if ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) { + return false; + } + } + start = dir = type === "only" && !start && "nextSibling"; + } + return true; + } + + start = [ forward ? parent.firstChild : parent.lastChild ]; + + if ( forward && useCache ) { + outerCache = parent[ expando ] || (parent[ expando ] = {}); + cache = outerCache[ type ] || []; + nodeIndex = cache[0] === dirruns && cache[1]; + diff = cache[0] === dirruns && cache[2]; + node = nodeIndex && parent.childNodes[ nodeIndex ]; + + while ( (node = ++nodeIndex && node && node[ dir ] || + + (diff = nodeIndex = 0) || start.pop()) ) { + + if ( node.nodeType === 1 && ++diff && node === elem ) { + outerCache[ type ] = [ dirruns, nodeIndex, diff ]; + break; + } + } + + } else if ( useCache && (cache = (elem[ expando ] || (elem[ expando ] = {}))[ type ]) && cache[0] === dirruns ) { + diff = cache[1]; + + } else { + while ( (node = ++nodeIndex && node && node[ dir ] || + (diff = nodeIndex = 0) || start.pop()) ) { + + if ( ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) && ++diff ) { + if ( useCache ) { + (node[ expando ] || (node[ expando ] = {}))[ type ] = [ dirruns, diff ]; + } + + if ( node === elem ) { + break; + } + } + } + } + + diff -= last; + return diff === first || ( diff % first === 0 && diff / first >= 0 ); + } + }; + }, + + "PSEUDO": function( pseudo, argument ) { + var args, + fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || + Sizzle.error( "unsupported pseudo: " + pseudo ); + + if ( fn[ expando ] ) { + return fn( argument ); + } + + if ( fn.length > 1 ) { + args = [ pseudo, pseudo, "", argument ]; + return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? + markFunction(function( seed, matches ) { + var idx, + matched = fn( seed, argument ), + i = matched.length; + while ( i-- ) { + idx = indexOf.call( seed, matched[i] ); + seed[ idx ] = !( matches[ idx ] = matched[i] ); + } + }) : + function( elem ) { + return fn( elem, 0, args ); + }; + } + + return fn; + } + }, + + pseudos: { + "not": markFunction(function( selector ) { + var input = [], + results = [], + matcher = compile( selector.replace( rtrim, "$1" ) ); + + return matcher[ expando ] ? + markFunction(function( seed, matches, context, xml ) { + var elem, + unmatched = matcher( seed, null, xml, [] ), + i = seed.length; + + while ( i-- ) { + if ( (elem = unmatched[i]) ) { + seed[i] = !(matches[i] = elem); + } + } + }) : + function( elem, context, xml ) { + input[0] = elem; + matcher( input, null, xml, results ); + return !results.pop(); + }; + }), + + "has": markFunction(function( selector ) { + return function( elem ) { + return Sizzle( selector, elem ).length > 0; + }; + }), + + "contains": markFunction(function( text ) { + return function( elem ) { + return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1; + }; + }), + + "lang": markFunction( function( lang ) { + if ( !ridentifier.test(lang || "") ) { + Sizzle.error( "unsupported lang: " + lang ); + } + lang = lang.replace( runescape, funescape ).toLowerCase(); + return function( elem ) { + var elemLang; + do { + if ( (elemLang = documentIsHTML ? + elem.lang : + elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) { + + elemLang = elemLang.toLowerCase(); + return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; + } + } while ( (elem = elem.parentNode) && elem.nodeType === 1 ); + return false; + }; + }), + + "target": function( elem ) { + var hash = window.location && window.location.hash; + return hash && hash.slice( 1 ) === elem.id; + }, + + "root": function( elem ) { + return elem === docElem; + }, + + "focus": function( elem ) { + return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex); + }, + + "enabled": function( elem ) { + return elem.disabled === false; + }, + + "disabled": function( elem ) { + return elem.disabled === true; + }, + + "checked": function( elem ) { + var nodeName = elem.nodeName.toLowerCase(); + return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected); + }, + + "selected": function( elem ) { + if ( elem.parentNode ) { + elem.parentNode.selectedIndex; + } + + return elem.selected === true; + }, + + "empty": function( elem ) { + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + if ( elem.nodeType < 6 ) { + return false; + } + } + return true; + }, + + "parent": function( elem ) { + return !Expr.pseudos["empty"]( elem ); + }, + + "header": function( elem ) { + return rheader.test( elem.nodeName ); + }, + + "input": function( elem ) { + return rinputs.test( elem.nodeName ); + }, + + "button": function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === "button" || name === "button"; + }, + + "text": function( elem ) { + var attr; + return elem.nodeName.toLowerCase() === "input" && + elem.type === "text" && + + ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" ); + }, + + "first": createPositionalPseudo(function() { + return [ 0 ]; + }), + + "last": createPositionalPseudo(function( matchIndexes, length ) { + return [ length - 1 ]; + }), + + "eq": createPositionalPseudo(function( matchIndexes, length, argument ) { + return [ argument < 0 ? argument + length : argument ]; + }), + + "even": createPositionalPseudo(function( matchIndexes, length ) { + var i = 0; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "odd": createPositionalPseudo(function( matchIndexes, length ) { + var i = 1; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "lt": createPositionalPseudo(function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; --i >= 0; ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "gt": createPositionalPseudo(function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; ++i < length; ) { + matchIndexes.push( i ); + } + return matchIndexes; + }) + } +}; + +Expr.pseudos["nth"] = Expr.pseudos["eq"]; + +for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { + Expr.pseudos[ i ] = createInputPseudo( i ); +} +for ( i in { submit: true, reset: true } ) { + Expr.pseudos[ i ] = createButtonPseudo( i ); +} + +function setFilters() {} +setFilters.prototype = Expr.filters = Expr.pseudos; +Expr.setFilters = new setFilters(); + +function tokenize( selector, parseOnly ) { + var matched, match, tokens, type, + soFar, groups, preFilters, + cached = tokenCache[ selector + " " ]; + + if ( cached ) { + return parseOnly ? 0 : cached.slice( 0 ); + } + + soFar = selector; + groups = []; + preFilters = Expr.preFilter; + + while ( soFar ) { + + if ( !matched || (match = rcomma.exec( soFar )) ) { + if ( match ) { + soFar = soFar.slice( match[0].length ) || soFar; + } + groups.push( (tokens = []) ); + } + + matched = false; + + if ( (match = rcombinators.exec( soFar )) ) { + matched = match.shift(); + tokens.push({ + value: matched, + type: match[0].replace( rtrim, " " ) + }); + soFar = soFar.slice( matched.length ); + } + + for ( type in Expr.filter ) { + if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] || + (match = preFilters[ type ]( match ))) ) { + matched = match.shift(); + tokens.push({ + value: matched, + type: type, + matches: match + }); + soFar = soFar.slice( matched.length ); + } + } + + if ( !matched ) { + break; + } + } + + return parseOnly ? + soFar.length : + soFar ? + Sizzle.error( selector ) : + tokenCache( selector, groups ).slice( 0 ); +} + +function toSelector( tokens ) { + var i = 0, + len = tokens.length, + selector = ""; + for ( ; i < len; i++ ) { + selector += tokens[i].value; + } + return selector; +} + +function addCombinator( matcher, combinator, base ) { + var dir = combinator.dir, + checkNonElements = base && dir === "parentNode", + doneName = done++; + + return combinator.first ? + function( elem, context, xml ) { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + return matcher( elem, context, xml ); + } + } + } : + + function( elem, context, xml ) { + var oldCache, outerCache, + newCache = [ dirruns, doneName ]; + + if ( xml ) { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + if ( matcher( elem, context, xml ) ) { + return true; + } + } + } + } else { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + outerCache = elem[ expando ] || (elem[ expando ] = {}); + if ( (oldCache = outerCache[ dir ]) && + oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { + + return (newCache[ 2 ] = oldCache[ 2 ]); + } else { + outerCache[ dir ] = newCache; + + if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) { + return true; + } + } + } + } + } + }; +} + +function elementMatcher( matchers ) { + return matchers.length > 1 ? + function( elem, context, xml ) { + var i = matchers.length; + while ( i-- ) { + if ( !matchers[i]( elem, context, xml ) ) { + return false; + } + } + return true; + } : + matchers[0]; +} + +function multipleContexts( selector, contexts, results ) { + var i = 0, + len = contexts.length; + for ( ; i < len; i++ ) { + Sizzle( selector, contexts[i], results ); + } + return results; +} + +function condense( unmatched, map, filter, context, xml ) { + var elem, + newUnmatched = [], + i = 0, + len = unmatched.length, + mapped = map != null; + + for ( ; i < len; i++ ) { + if ( (elem = unmatched[i]) ) { + if ( !filter || filter( elem, context, xml ) ) { + newUnmatched.push( elem ); + if ( mapped ) { + map.push( i ); + } + } + } + } + + return newUnmatched; +} + +function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { + if ( postFilter && !postFilter[ expando ] ) { + postFilter = setMatcher( postFilter ); + } + if ( postFinder && !postFinder[ expando ] ) { + postFinder = setMatcher( postFinder, postSelector ); + } + return markFunction(function( seed, results, context, xml ) { + var temp, i, elem, + preMap = [], + postMap = [], + preexisting = results.length, + + elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ), + + matcherIn = preFilter && ( seed || !selector ) ? + condense( elems, preMap, preFilter, context, xml ) : + elems, + + matcherOut = matcher ? + postFinder || ( seed ? preFilter : preexisting || postFilter ) ? + + [] : + + results : + matcherIn; + + if ( matcher ) { + matcher( matcherIn, matcherOut, context, xml ); + } + + if ( postFilter ) { + temp = condense( matcherOut, postMap ); + postFilter( temp, [], context, xml ); + + i = temp.length; + while ( i-- ) { + if ( (elem = temp[i]) ) { + matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem); + } + } + } + + if ( seed ) { + if ( postFinder || preFilter ) { + if ( postFinder ) { + temp = []; + i = matcherOut.length; + while ( i-- ) { + if ( (elem = matcherOut[i]) ) { + temp.push( (matcherIn[i] = elem) ); + } + } + postFinder( null, (matcherOut = []), temp, xml ); + } + + i = matcherOut.length; + while ( i-- ) { + if ( (elem = matcherOut[i]) && + (temp = postFinder ? indexOf.call( seed, elem ) : preMap[i]) > -1 ) { + + seed[temp] = !(results[temp] = elem); + } + } + } + + } else { + matcherOut = condense( + matcherOut === results ? + matcherOut.splice( preexisting, matcherOut.length ) : + matcherOut + ); + if ( postFinder ) { + postFinder( null, results, matcherOut, xml ); + } else { + push.apply( results, matcherOut ); + } + } + }); +} + +function matcherFromTokens( tokens ) { + var checkContext, matcher, j, + len = tokens.length, + leadingRelative = Expr.relative[ tokens[0].type ], + implicitRelative = leadingRelative || Expr.relative[" "], + i = leadingRelative ? 1 : 0, + + matchContext = addCombinator( function( elem ) { + return elem === checkContext; + }, implicitRelative, true ), + matchAnyContext = addCombinator( function( elem ) { + return indexOf.call( checkContext, elem ) > -1; + }, implicitRelative, true ), + matchers = [ function( elem, context, xml ) { + return ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( + (checkContext = context).nodeType ? + matchContext( elem, context, xml ) : + matchAnyContext( elem, context, xml ) ); + } ]; + + for ( ; i < len; i++ ) { + if ( (matcher = Expr.relative[ tokens[i].type ]) ) { + matchers = [ addCombinator(elementMatcher( matchers ), matcher) ]; + } else { + matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches ); + + if ( matcher[ expando ] ) { + j = ++i; + for ( ; j < len; j++ ) { + if ( Expr.relative[ tokens[j].type ] ) { + break; + } + } + return setMatcher( + i > 1 && elementMatcher( matchers ), + i > 1 && toSelector( + tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" }) + ).replace( rtrim, "$1" ), + matcher, + i < j && matcherFromTokens( tokens.slice( i, j ) ), + j < len && matcherFromTokens( (tokens = tokens.slice( j )) ), + j < len && toSelector( tokens ) + ); + } + matchers.push( matcher ); + } + } + + return elementMatcher( matchers ); +} + +function matcherFromGroupMatchers( elementMatchers, setMatchers ) { + var bySet = setMatchers.length > 0, + byElement = elementMatchers.length > 0, + superMatcher = function( seed, context, xml, results, outermost ) { + var elem, j, matcher, + matchedCount = 0, + i = "0", + unmatched = seed && [], + setMatched = [], + contextBackup = outermostContext, + elems = seed || byElement && Expr.find["TAG"]( "*", outermost ), + dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1), + len = elems.length; + + if ( outermost ) { + outermostContext = context !== document && context; + } + + for ( ; i !== len && (elem = elems[i]) != null; i++ ) { + if ( byElement && elem ) { + j = 0; + while ( (matcher = elementMatchers[j++]) ) { + if ( matcher( elem, context, xml ) ) { + results.push( elem ); + break; + } + } + if ( outermost ) { + dirruns = dirrunsUnique; + } + } + + if ( bySet ) { + if ( (elem = !matcher && elem) ) { + matchedCount--; + } + + if ( seed ) { + unmatched.push( elem ); + } + } + } + + matchedCount += i; + if ( bySet && i !== matchedCount ) { + j = 0; + while ( (matcher = setMatchers[j++]) ) { + matcher( unmatched, setMatched, context, xml ); + } + + if ( seed ) { + if ( matchedCount > 0 ) { + while ( i-- ) { + if ( !(unmatched[i] || setMatched[i]) ) { + setMatched[i] = pop.call( results ); + } + } + } + + setMatched = condense( setMatched ); + } + + push.apply( results, setMatched ); + + if ( outermost && !seed && setMatched.length > 0 && + ( matchedCount + setMatchers.length ) > 1 ) { + + Sizzle.uniqueSort( results ); + } + } + + if ( outermost ) { + dirruns = dirrunsUnique; + outermostContext = contextBackup; + } + + return unmatched; + }; + + return bySet ? + markFunction( superMatcher ) : + superMatcher; +} + +compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) { + var i, + setMatchers = [], + elementMatchers = [], + cached = compilerCache[ selector + " " ]; + + if ( !cached ) { + if ( !match ) { + match = tokenize( selector ); + } + i = match.length; + while ( i-- ) { + cached = matcherFromTokens( match[i] ); + if ( cached[ expando ] ) { + setMatchers.push( cached ); + } else { + elementMatchers.push( cached ); + } + } + + cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) ); + + cached.selector = selector; + } + return cached; +}; + +/** + * A low-level selection function that works with Sizzle's compiled + * selector functions + * @param {String|Function} selector A selector or a pre-compiled + * selector function built with Sizzle.compile + * @param {Element} context + * @param {Array} [results] + * @param {Array} [seed] A set of elements to match against + */ +select = Sizzle.select = function( selector, context, results, seed ) { + var i, tokens, token, type, find, + compiled = typeof selector === "function" && selector, + match = !seed && tokenize( (selector = compiled.selector || selector) ); + + results = results || []; + + if ( match.length === 1 ) { + + tokens = match[0] = match[0].slice( 0 ); + if ( tokens.length > 2 && (token = tokens[0]).type === "ID" && + support.getById && context.nodeType === 9 && documentIsHTML && + Expr.relative[ tokens[1].type ] ) { + + context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0]; + if ( !context ) { + return results; + + } else if ( compiled ) { + context = context.parentNode; + } + + selector = selector.slice( tokens.shift().value.length ); + } + + i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length; + while ( i-- ) { + token = tokens[i]; + + if ( Expr.relative[ (type = token.type) ] ) { + break; + } + if ( (find = Expr.find[ type ]) ) { + if ( (seed = find( + token.matches[0].replace( runescape, funescape ), + rsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context + )) ) { + + tokens.splice( i, 1 ); + selector = seed.length && toSelector( tokens ); + if ( !selector ) { + push.apply( results, seed ); + return results; + } + + break; + } + } + } + } + + ( compiled || compile( selector, match ) )( + seed, + context, + !documentIsHTML, + results, + rsibling.test( selector ) && testContext( context.parentNode ) || context + ); + return results; +}; + + +support.sortStable = expando.split("").sort( sortOrder ).join("") === expando; + +support.detectDuplicates = !!hasDuplicate; + +setDocument(); + +support.sortDetached = assert(function( div1 ) { + return div1.compareDocumentPosition( document.createElement("div") ) & 1; +}); + +if ( !assert(function( div ) { + div.innerHTML = ""; + return div.firstChild.getAttribute("href") === "#" ; +}) ) { + addHandle( "type|href|height|width", function( elem, name, isXML ) { + if ( !isXML ) { + return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 ); + } + }); +} + +if ( !support.attributes || !assert(function( div ) { + div.innerHTML = ""; + div.firstChild.setAttribute( "value", "" ); + return div.firstChild.getAttribute( "value" ) === ""; +}) ) { + addHandle( "value", function( elem, name, isXML ) { + if ( !isXML && elem.nodeName.toLowerCase() === "input" ) { + return elem.defaultValue; + } + }); +} + +if ( !assert(function( div ) { + return div.getAttribute("disabled") == null; +}) ) { + addHandle( booleans, function( elem, name, isXML ) { + var val; + if ( !isXML ) { + return elem[ name ] === true ? name.toLowerCase() : + (val = elem.getAttributeNode( name )) && val.specified ? + val.value : + null; + } + }); +} + +if ( typeof define === "function" && define.amd ) { + define(function() { return Sizzle; }); +} else if ( typeof module !== "undefined" && module.exports ) { + module.exports = Sizzle; +} else { + window.Sizzle = Sizzle; +} + +})( window ); + +;(function(engine) { + var extendElements = Prototype.Selector.extendElements; + + function select(selector, scope) { + return extendElements(engine(selector, scope || document)); + } + + function match(element, selector) { + return engine.matches(selector, [element]).length == 1; + } + + Prototype.Selector.engine = engine; + Prototype.Selector.select = select; + Prototype.Selector.match = match; +})(Sizzle); + +window.Sizzle = Prototype._original_property; +delete Prototype._original_property; + +var Form = { + reset: function(form) { + form = $(form); + form.reset(); + return form; + }, + + serializeElements: function(elements, options) { + if (typeof options != 'object') options = { hash: !!options }; + else if (Object.isUndefined(options.hash)) options.hash = true; + var key, value, submitted = false, submit = options.submit, accumulator, initial; + + if (options.hash) { + initial = {}; + accumulator = function(result, key, value) { + if (key in result) { + if (!Object.isArray(result[key])) result[key] = [result[key]]; + result[key] = result[key].concat(value); + } else result[key] = value; + return result; + }; + } else { + initial = ''; + accumulator = function(result, key, values) { + if (!Object.isArray(values)) {values = [values];} + if (!values.length) {return result;} + var encodedKey = encodeURIComponent(key).gsub(/%20/, '+'); + return result + (result ? "&" : "") + values.map(function (value) { + value = value.gsub(/(\r)?\n/, '\r\n'); + value = encodeURIComponent(value); + value = value.gsub(/%20/, '+'); + return encodedKey + "=" + value; + }).join("&"); + }; + } + + return elements.inject(initial, function(result, element) { + if (!element.disabled && element.name) { + key = element.name; value = $(element).getValue(); + if (value != null && element.type != 'file' && (element.type != 'submit' || (!submitted && + submit !== false && (!submit || key == submit) && (submitted = true)))) { + result = accumulator(result, key, value); + } + } + return result; + }); + } +}; + +Form.Methods = { + serialize: function(form, options) { + return Form.serializeElements(Form.getElements(form), options); + }, + + + getElements: function(form) { + var elements = $(form).getElementsByTagName('*'); + var element, results = [], serializers = Form.Element.Serializers; + + for (var i = 0; element = elements[i]; i++) { + if (serializers[element.tagName.toLowerCase()]) + results.push(Element.extend(element)); + } + return results; + }, + + getInputs: function(form, typeName, name) { + form = $(form); + var inputs = form.getElementsByTagName('input'); + + if (!typeName && !name) return $A(inputs).map(Element.extend); + + for (var i = 0, matchingInputs = [], length = inputs.length; i < length; i++) { + var input = inputs[i]; + if ((typeName && input.type != typeName) || (name && input.name != name)) + continue; + matchingInputs.push(Element.extend(input)); + } + + return matchingInputs; + }, + + disable: function(form) { + form = $(form); + Form.getElements(form).invoke('disable'); + return form; + }, + + enable: function(form) { + form = $(form); + Form.getElements(form).invoke('enable'); + return form; + }, + + findFirstElement: function(form) { + var elements = $(form).getElements().findAll(function(element) { + return 'hidden' != element.type && !element.disabled; + }); + var firstByIndex = elements.findAll(function(element) { + return element.hasAttribute('tabIndex') && element.tabIndex >= 0; + }).sortBy(function(element) { return element.tabIndex }).first(); + + return firstByIndex ? firstByIndex : elements.find(function(element) { + return /^(?:input|select|textarea)$/i.test(element.tagName); + }); + }, + + focusFirstElement: function(form) { + form = $(form); + var element = form.findFirstElement(); + if (element) element.activate(); + return form; + }, + + request: function(form, options) { + form = $(form), options = Object.clone(options || { }); + + var params = options.parameters, action = form.readAttribute('action') || ''; + if (action.blank()) action = window.location.href; + options.parameters = form.serialize(true); + + if (params) { + if (Object.isString(params)) params = params.toQueryParams(); + Object.extend(options.parameters, params); + } + + if (form.hasAttribute('method') && !options.method) + options.method = form.method; + + return new Ajax.Request(action, options); + } +}; + +/*--------------------------------------------------------------------------*/ + + +Form.Element = { + focus: function(element) { + $(element).focus(); + return element; + }, + + select: function(element) { + $(element).select(); + return element; + } +}; + +Form.Element.Methods = { + + serialize: function(element) { + element = $(element); + if (!element.disabled && element.name) { + var value = element.getValue(); + if (value != undefined) { + var pair = { }; + pair[element.name] = value; + return Object.toQueryString(pair); + } + } + return ''; + }, + + getValue: function(element) { + element = $(element); + var method = element.tagName.toLowerCase(); + return Form.Element.Serializers[method](element); + }, + + setValue: function(element, value) { + element = $(element); + var method = element.tagName.toLowerCase(); + Form.Element.Serializers[method](element, value); + return element; + }, + + clear: function(element) { + $(element).value = ''; + return element; + }, + + present: function(element) { + return $(element).value != ''; + }, + + activate: function(element) { + element = $(element); + try { + element.focus(); + if (element.select && (element.tagName.toLowerCase() != 'input' || + !(/^(?:button|reset|submit)$/i.test(element.type)))) + element.select(); + } catch (e) { } + return element; + }, + + disable: function(element) { + element = $(element); + element.disabled = true; + return element; + }, + + enable: function(element) { + element = $(element); + element.disabled = false; + return element; + } +}; + +/*--------------------------------------------------------------------------*/ + +var Field = Form.Element; + +var $F = Form.Element.Methods.getValue; + +/*--------------------------------------------------------------------------*/ + +Form.Element.Serializers = (function() { + function input(element, value) { + switch (element.type.toLowerCase()) { + case 'checkbox': + case 'radio': + return inputSelector(element, value); + default: + return valueSelector(element, value); + } + } + + function inputSelector(element, value) { + if (Object.isUndefined(value)) + return element.checked ? element.value : null; + else element.checked = !!value; + } + + function valueSelector(element, value) { + if (Object.isUndefined(value)) return element.value; + else element.value = value; + } + + function select(element, value) { + if (Object.isUndefined(value)) + return (element.type === 'select-one' ? selectOne : selectMany)(element); + + var opt, currentValue, single = !Object.isArray(value); + for (var i = 0, length = element.length; i < length; i++) { + opt = element.options[i]; + currentValue = this.optionValue(opt); + if (single) { + if (currentValue == value) { + opt.selected = true; + return; + } + } + else opt.selected = value.include(currentValue); + } + } + + function selectOne(element) { + var index = element.selectedIndex; + return index >= 0 ? optionValue(element.options[index]) : null; + } + + function selectMany(element) { + var values, length = element.length; + if (!length) return null; + + for (var i = 0, values = []; i < length; i++) { + var opt = element.options[i]; + if (opt.selected) values.push(optionValue(opt)); + } + return values; + } + + function optionValue(opt) { + return Element.hasAttribute(opt, 'value') ? opt.value : opt.text; + } + + return { + input: input, + inputSelector: inputSelector, + textarea: valueSelector, + select: select, + selectOne: selectOne, + selectMany: selectMany, + optionValue: optionValue, + button: valueSelector + }; +})(); + +/*--------------------------------------------------------------------------*/ + + +Abstract.TimedObserver = Class.create(PeriodicalExecuter, { + initialize: function($super, element, frequency, callback) { + $super(callback, frequency); + this.element = $(element); + this.lastValue = this.getValue(); + }, + + execute: function() { + var value = this.getValue(); + if (Object.isString(this.lastValue) && Object.isString(value) ? + this.lastValue != value : String(this.lastValue) != String(value)) { + this.callback(this.element, value); + this.lastValue = value; + } + } +}); + +Form.Element.Observer = Class.create(Abstract.TimedObserver, { + getValue: function() { + return Form.Element.getValue(this.element); + } +}); + +Form.Observer = Class.create(Abstract.TimedObserver, { + getValue: function() { + return Form.serialize(this.element); + } +}); + +/*--------------------------------------------------------------------------*/ + +Abstract.EventObserver = Class.create({ + initialize: function(element, callback) { + this.element = $(element); + this.callback = callback; + + this.lastValue = this.getValue(); + if (this.element.tagName.toLowerCase() == 'form') + this.registerFormCallbacks(); + else + this.registerCallback(this.element); + }, + + onElementEvent: function() { + var value = this.getValue(); + if (this.lastValue != value) { + this.callback(this.element, value); + this.lastValue = value; + } + }, + + registerFormCallbacks: function() { + Form.getElements(this.element).each(this.registerCallback, this); + }, + + registerCallback: function(element) { + if (element.type) { + switch (element.type.toLowerCase()) { + case 'checkbox': + case 'radio': + Event.observe(element, 'click', this.onElementEvent.bind(this)); + break; + default: + Event.observe(element, 'change', this.onElementEvent.bind(this)); + break; + } + } + } +}); + +Form.Element.EventObserver = Class.create(Abstract.EventObserver, { + getValue: function() { + return Form.Element.getValue(this.element); + } +}); + +Form.EventObserver = Class.create(Abstract.EventObserver, { + getValue: function() { + return Form.serialize(this.element); + } +}); +(function(GLOBAL) { + var DIV = document.createElement('div'); + var docEl = document.documentElement; + var MOUSEENTER_MOUSELEAVE_EVENTS_SUPPORTED = 'onmouseenter' in docEl + && 'onmouseleave' in docEl; + + var Event = { + KEY_BACKSPACE: 8, + KEY_TAB: 9, + KEY_RETURN: 13, + KEY_ESC: 27, + KEY_LEFT: 37, + KEY_UP: 38, + KEY_RIGHT: 39, + KEY_DOWN: 40, + KEY_DELETE: 46, + KEY_HOME: 36, + KEY_END: 35, + KEY_PAGEUP: 33, + KEY_PAGEDOWN: 34, + KEY_INSERT: 45 + }; + + + var isIELegacyEvent = function(event) { return false; }; + + if (window.attachEvent) { + if (window.addEventListener) { + isIELegacyEvent = function(event) { + return !(event instanceof window.Event); + }; + } else { + isIELegacyEvent = function(event) { return true; }; + } + } + + var _isButton; + + function _isButtonForDOMEvents(event, code) { + return event.which ? (event.which === code + 1) : (event.button === code); + } + + var legacyButtonMap = { 0: 1, 1: 4, 2: 2 }; + function _isButtonForLegacyEvents(event, code) { + return event.button === legacyButtonMap[code]; + } + + function _isButtonForWebKit(event, code) { + switch (code) { + case 0: return event.which == 1 && !event.metaKey; + case 1: return event.which == 2 || (event.which == 1 && event.metaKey); + case 2: return event.which == 3; + default: return false; + } + } + + if (window.attachEvent) { + if (!window.addEventListener) { + _isButton = _isButtonForLegacyEvents; + } else { + _isButton = function(event, code) { + return isIELegacyEvent(event) ? _isButtonForLegacyEvents(event, code) : + _isButtonForDOMEvents(event, code); + } + } + } else if (Prototype.Browser.WebKit) { + _isButton = _isButtonForWebKit; + } else { + _isButton = _isButtonForDOMEvents; + } + + function isLeftClick(event) { return _isButton(event, 0) } + + function isMiddleClick(event) { return _isButton(event, 1) } + + function isRightClick(event) { return _isButton(event, 2) } + + function element(event) { + return Element.extend(_element(event)); + } + + function _element(event) { + event = Event.extend(event); + + var node = event.target, type = event.type, + currentTarget = event.currentTarget; + + if (currentTarget && currentTarget.tagName) { + if (type === 'load' || type === 'error' || + (type === 'click' && currentTarget.tagName.toLowerCase() === 'input' + && currentTarget.type === 'radio')) + node = currentTarget; + } + + return node.nodeType == Node.TEXT_NODE ? node.parentNode : node; + } + + function findElement(event, expression) { + var element = _element(event), selector = Prototype.Selector; + if (!expression) return Element.extend(element); + while (element) { + if (Object.isElement(element) && selector.match(element, expression)) + return Element.extend(element); + element = element.parentNode; + } + } + + function pointer(event) { + return { x: pointerX(event), y: pointerY(event) }; + } + + function pointerX(event) { + var docElement = document.documentElement, + body = document.body || { scrollLeft: 0 }; + + return event.pageX || (event.clientX + + (docElement.scrollLeft || body.scrollLeft) - + (docElement.clientLeft || 0)); + } + + function pointerY(event) { + var docElement = document.documentElement, + body = document.body || { scrollTop: 0 }; + + return event.pageY || (event.clientY + + (docElement.scrollTop || body.scrollTop) - + (docElement.clientTop || 0)); + } + + + function stop(event) { + Event.extend(event); + event.preventDefault(); + event.stopPropagation(); + + event.stopped = true; + } + + + Event.Methods = { + isLeftClick: isLeftClick, + isMiddleClick: isMiddleClick, + isRightClick: isRightClick, + + element: element, + findElement: findElement, + + pointer: pointer, + pointerX: pointerX, + pointerY: pointerY, + + stop: stop + }; + + var methods = Object.keys(Event.Methods).inject({ }, function(m, name) { + m[name] = Event.Methods[name].methodize(); + return m; + }); + + if (window.attachEvent) { + function _relatedTarget(event) { + var element; + switch (event.type) { + case 'mouseover': + case 'mouseenter': + element = event.fromElement; + break; + case 'mouseout': + case 'mouseleave': + element = event.toElement; + break; + default: + return null; + } + return Element.extend(element); + } + + var additionalMethods = { + stopPropagation: function() { this.cancelBubble = true }, + preventDefault: function() { this.returnValue = false }, + inspect: function() { return '[object Event]' } + }; + + Event.extend = function(event, element) { + if (!event) return false; + + if (!isIELegacyEvent(event)) return event; + + if (event._extendedByPrototype) return event; + event._extendedByPrototype = Prototype.emptyFunction; + + var pointer = Event.pointer(event); + + Object.extend(event, { + target: event.srcElement || element, + relatedTarget: _relatedTarget(event), + pageX: pointer.x, + pageY: pointer.y + }); + + Object.extend(event, methods); + Object.extend(event, additionalMethods); + + return event; + }; + } else { + Event.extend = Prototype.K; + } + + if (window.addEventListener) { + Event.prototype = window.Event.prototype || document.createEvent('HTMLEvents').__proto__; + Object.extend(Event.prototype, methods); + } + + var EVENT_TRANSLATIONS = { + mouseenter: 'mouseover', + mouseleave: 'mouseout' + }; + + function getDOMEventName(eventName) { + return EVENT_TRANSLATIONS[eventName] || eventName; + } + + if (MOUSEENTER_MOUSELEAVE_EVENTS_SUPPORTED) + getDOMEventName = Prototype.K; + + function getUniqueElementID(element) { + if (element === window) return 0; + + if (typeof element._prototypeUID === 'undefined') + element._prototypeUID = Element.Storage.UID++; + return element._prototypeUID; + } + + function getUniqueElementID_IE(element) { + if (element === window) return 0; + if (element == document) return 1; + return element.uniqueID; + } + + if ('uniqueID' in DIV) + getUniqueElementID = getUniqueElementID_IE; + + function isCustomEvent(eventName) { + return eventName.include(':'); + } + + Event._isCustomEvent = isCustomEvent; + + function getRegistryForElement(element, uid) { + var CACHE = GLOBAL.Event.cache; + if (Object.isUndefined(uid)) + uid = getUniqueElementID(element); + if (!CACHE[uid]) CACHE[uid] = { element: element }; + return CACHE[uid]; + } + + function destroyRegistryForElement(element, uid) { + if (Object.isUndefined(uid)) + uid = getUniqueElementID(element); + delete GLOBAL.Event.cache[uid]; + } + + + function register(element, eventName, handler) { + var registry = getRegistryForElement(element); + if (!registry[eventName]) registry[eventName] = []; + var entries = registry[eventName]; + + var i = entries.length; + while (i--) + if (entries[i].handler === handler) return null; + + var uid = getUniqueElementID(element); + var responder = GLOBAL.Event._createResponder(uid, eventName, handler); + var entry = { + responder: responder, + handler: handler + }; + + entries.push(entry); + return entry; + } + + function unregister(element, eventName, handler) { + var registry = getRegistryForElement(element); + var entries = registry[eventName]; + if (!entries) return; + + var i = entries.length, entry; + while (i--) { + if (entries[i].handler === handler) { + entry = entries[i]; + break; + } + } + + if (!entry) return; + + var index = entries.indexOf(entry); + entries.splice(index, 1); + + return entry; + } + + + function observe(element, eventName, handler) { + element = $(element); + var entry = register(element, eventName, handler); + + if (entry === null) return element; + + var responder = entry.responder; + if (isCustomEvent(eventName)) + observeCustomEvent(element, eventName, responder); + else + observeStandardEvent(element, eventName, responder); + + return element; + } + + function observeStandardEvent(element, eventName, responder) { + var actualEventName = getDOMEventName(eventName); + if (element.addEventListener) { + element.addEventListener(actualEventName, responder, false); + } else { + element.attachEvent('on' + actualEventName, responder); + } + } + + function observeCustomEvent(element, eventName, responder) { + if (element.addEventListener) { + element.addEventListener('dataavailable', responder, false); + } else { + element.attachEvent('ondataavailable', responder); + element.attachEvent('onlosecapture', responder); + } + } + + function stopObserving(element, eventName, handler) { + element = $(element); + var handlerGiven = !Object.isUndefined(handler), + eventNameGiven = !Object.isUndefined(eventName); + + if (!eventNameGiven && !handlerGiven) { + stopObservingElement(element); + return element; + } + + if (!handlerGiven) { + stopObservingEventName(element, eventName); + return element; + } + + var entry = unregister(element, eventName, handler); + + if (!entry) return element; + removeEvent(element, eventName, entry.responder); + return element; + } + + function stopObservingStandardEvent(element, eventName, responder) { + var actualEventName = getDOMEventName(eventName); + if (element.removeEventListener) { + element.removeEventListener(actualEventName, responder, false); + } else { + element.detachEvent('on' + actualEventName, responder); + } + } + + function stopObservingCustomEvent(element, eventName, responder) { + if (element.removeEventListener) { + element.removeEventListener('dataavailable', responder, false); + } else { + element.detachEvent('ondataavailable', responder); + element.detachEvent('onlosecapture', responder); + } + } + + + + function stopObservingElement(element) { + var uid = getUniqueElementID(element), registry = GLOBAL.Event.cache[uid]; + if (!registry) return; + + destroyRegistryForElement(element, uid); + + var entries, i; + for (var eventName in registry) { + if (eventName === 'element') continue; + + entries = registry[eventName]; + i = entries.length; + while (i--) + removeEvent(element, eventName, entries[i].responder); + } + } + + function stopObservingEventName(element, eventName) { + var registry = getRegistryForElement(element); + var entries = registry[eventName]; + if (!entries) return; + delete registry[eventName]; + + var i = entries.length; + while (i--) + removeEvent(element, eventName, entries[i].responder); + } + + + function removeEvent(element, eventName, handler) { + if (isCustomEvent(eventName)) + stopObservingCustomEvent(element, eventName, handler); + else + stopObservingStandardEvent(element, eventName, handler); + } + + + + function getFireTarget(element) { + if (element !== document) return element; + if (document.createEvent && !element.dispatchEvent) + return document.documentElement; + return element; + } + + function fire(element, eventName, memo, bubble) { + element = getFireTarget($(element)); + if (Object.isUndefined(bubble)) bubble = true; + memo = memo || {}; + + var event = fireEvent(element, eventName, memo, bubble); + return Event.extend(event); + } + + function fireEvent_DOM(element, eventName, memo, bubble) { + var event = document.createEvent('HTMLEvents'); + event.initEvent('dataavailable', bubble, true); + + event.eventName = eventName; + event.memo = memo; + + element.dispatchEvent(event); + return event; + } + + function fireEvent_IE(element, eventName, memo, bubble) { + var event = document.createEventObject(); + event.eventType = bubble ? 'ondataavailable' : 'onlosecapture'; + + event.eventName = eventName; + event.memo = memo; + + element.fireEvent(event.eventType, event); + return event; + } + + var fireEvent = document.createEvent ? fireEvent_DOM : fireEvent_IE; + + + + Event.Handler = Class.create({ + initialize: function(element, eventName, selector, callback) { + this.element = $(element); + this.eventName = eventName; + this.selector = selector; + this.callback = callback; + this.handler = this.handleEvent.bind(this); + }, + + + start: function() { + Event.observe(this.element, this.eventName, this.handler); + return this; + }, + + stop: function() { + Event.stopObserving(this.element, this.eventName, this.handler); + return this; + }, + + handleEvent: function(event) { + var element = Event.findElement(event, this.selector); + if (element) this.callback.call(this.element, event, element); + } + }); + + function on(element, eventName, selector, callback) { + element = $(element); + if (Object.isFunction(selector) && Object.isUndefined(callback)) { + callback = selector, selector = null; + } + + return new Event.Handler(element, eventName, selector, callback).start(); + } + + Object.extend(Event, Event.Methods); + + Object.extend(Event, { + fire: fire, + observe: observe, + stopObserving: stopObserving, + on: on + }); + + Element.addMethods({ + fire: fire, + + observe: observe, + + stopObserving: stopObserving, + + on: on + }); + + Object.extend(document, { + fire: fire.methodize(), + + observe: observe.methodize(), + + stopObserving: stopObserving.methodize(), + + on: on.methodize(), + + loaded: false + }); + + if (GLOBAL.Event) Object.extend(window.Event, Event); + else GLOBAL.Event = Event; + + GLOBAL.Event.cache = {}; + + function destroyCache_IE() { + GLOBAL.Event.cache = null; + } + + if (window.attachEvent) + window.attachEvent('onunload', destroyCache_IE); + + DIV = null; + docEl = null; +})(this); + +(function(GLOBAL) { + /* Code for creating leak-free event responders is based on work by + John-David Dalton. */ + + var docEl = document.documentElement; + var MOUSEENTER_MOUSELEAVE_EVENTS_SUPPORTED = 'onmouseenter' in docEl + && 'onmouseleave' in docEl; + + function isSimulatedMouseEnterLeaveEvent(eventName) { + return !MOUSEENTER_MOUSELEAVE_EVENTS_SUPPORTED && + (eventName === 'mouseenter' || eventName === 'mouseleave'); + } + + function createResponder(uid, eventName, handler) { + if (Event._isCustomEvent(eventName)) + return createResponderForCustomEvent(uid, eventName, handler); + if (isSimulatedMouseEnterLeaveEvent(eventName)) + return createMouseEnterLeaveResponder(uid, eventName, handler); + + return function(event) { + if (!Event.cache) return; + + var element = Event.cache[uid].element; + Event.extend(event, element); + handler.call(element, event); + }; + } + + function createResponderForCustomEvent(uid, eventName, handler) { + return function(event) { + var element = Event.cache[uid].element; + + if (Object.isUndefined(event.eventName)) + return false; + + if (event.eventName !== eventName) + return false; + + Event.extend(event, element); + handler.call(element, event); + }; + } + + function createMouseEnterLeaveResponder(uid, eventName, handler) { + return function(event) { + var element = Event.cache[uid].element; + + Event.extend(event, element); + var parent = event.relatedTarget; + + while (parent && parent !== element) { + try { parent = parent.parentNode; } + catch(e) { parent = element; } + } + + if (parent === element) return; + handler.call(element, event); + } + } + + GLOBAL.Event._createResponder = createResponder; + docEl = null; +})(this); + +(function(GLOBAL) { + /* Support for the DOMContentLoaded event is based on work by Dan Webb, + Matthias Miller, Dean Edwards, John Resig, and Diego Perini. */ + + var TIMER; + + function fireContentLoadedEvent() { + if (document.loaded) return; + if (TIMER) window.clearTimeout(TIMER); + document.loaded = true; + document.fire('dom:loaded'); + } + + function checkReadyState() { + if (document.readyState === 'complete') { + document.detachEvent('onreadystatechange', checkReadyState); + fireContentLoadedEvent(); + } + } + + function pollDoScroll() { + try { + document.documentElement.doScroll('left'); + } catch (e) { + TIMER = pollDoScroll.defer(); + return; + } + + fireContentLoadedEvent(); + } + + + if (document.readyState === 'complete') { + fireContentLoadedEvent(); + return; + } + + if (document.addEventListener) { + document.addEventListener('DOMContentLoaded', fireContentLoadedEvent, false); + } else { + document.attachEvent('onreadystatechange', checkReadyState); + if (window == top) TIMER = pollDoScroll.defer(); + } + + Event.observe(window, 'load', fireContentLoadedEvent); +})(this); + + +Element.addMethods(); +/*------------------------------- DEPRECATED -------------------------------*/ + +Hash.toQueryString = Object.toQueryString; + +var Toggle = { display: Element.toggle }; + +Element.Methods.childOf = Element.Methods.descendantOf; + +var Insertion = { + Before: function(element, content) { + return Element.insert(element, {before:content}); + }, + + Top: function(element, content) { + return Element.insert(element, {top:content}); + }, + + Bottom: function(element, content) { + return Element.insert(element, {bottom:content}); + }, + + After: function(element, content) { + return Element.insert(element, {after:content}); + } +}; + +var $continue = new Error('"throw $continue" is deprecated, use "return" instead'); + +var Position = { + includeScrollOffsets: false, + + prepare: function() { + this.deltaX = window.pageXOffset + || document.documentElement.scrollLeft + || document.body.scrollLeft + || 0; + this.deltaY = window.pageYOffset + || document.documentElement.scrollTop + || document.body.scrollTop + || 0; + }, + + within: function(element, x, y) { + if (this.includeScrollOffsets) + return this.withinIncludingScrolloffsets(element, x, y); + this.xcomp = x; + this.ycomp = y; + this.offset = Element.cumulativeOffset(element); + + return (y >= this.offset[1] && + y < this.offset[1] + element.offsetHeight && + x >= this.offset[0] && + x < this.offset[0] + element.offsetWidth); + }, + + withinIncludingScrolloffsets: function(element, x, y) { + var offsetcache = Element.cumulativeScrollOffset(element); + + this.xcomp = x + offsetcache[0] - this.deltaX; + this.ycomp = y + offsetcache[1] - this.deltaY; + this.offset = Element.cumulativeOffset(element); + + return (this.ycomp >= this.offset[1] && + this.ycomp < this.offset[1] + element.offsetHeight && + this.xcomp >= this.offset[0] && + this.xcomp < this.offset[0] + element.offsetWidth); + }, + + overlap: function(mode, element) { + if (!mode) return 0; + if (mode == 'vertical') + return ((this.offset[1] + element.offsetHeight) - this.ycomp) / + element.offsetHeight; + if (mode == 'horizontal') + return ((this.offset[0] + element.offsetWidth) - this.xcomp) / + element.offsetWidth; + }, + + + cumulativeOffset: Element.Methods.cumulativeOffset, + + positionedOffset: Element.Methods.positionedOffset, + + absolutize: function(element) { + Position.prepare(); + return Element.absolutize(element); + }, + + relativize: function(element) { + Position.prepare(); + return Element.relativize(element); + }, + + realOffset: Element.Methods.cumulativeScrollOffset, + + offsetParent: Element.Methods.getOffsetParent, + + page: Element.Methods.viewportOffset, + + clone: function(source, target, options) { + options = options || { }; + return Element.clonePosition(target, source, options); + } +}; + +/*--------------------------------------------------------------------------*/ + +if (!document.getElementsByClassName) document.getElementsByClassName = function(instanceMethods){ + function iter(name) { + return name.blank() ? null : "[contains(concat(' ', @class, ' '), ' " + name + " ')]"; + } + + instanceMethods.getElementsByClassName = Prototype.BrowserFeatures.XPath ? + function(element, className) { + className = className.toString().strip(); + var cond = /\s/.test(className) ? $w(className).map(iter).join('') : iter(className); + return cond ? document._getElementsByXPath('.//*' + cond, element) : []; + } : function(element, className) { + className = className.toString().strip(); + var elements = [], classNames = (/\s/.test(className) ? $w(className) : null); + if (!classNames && !className) return elements; + + var nodes = $(element).getElementsByTagName('*'); + className = ' ' + className + ' '; + + for (var i = 0, child, cn; child = nodes[i]; i++) { + if (child.className && (cn = ' ' + child.className + ' ') && (cn.include(className) || + (classNames && classNames.all(function(name) { + return !name.toString().blank() && cn.include(' ' + name + ' '); + })))) + elements.push(Element.extend(child)); + } + return elements; + }; + + return function(className, parentElement) { + return $(parentElement || document.body).getElementsByClassName(className); + }; +}(Element.Methods); + +/*--------------------------------------------------------------------------*/ + +Element.ClassNames = Class.create(); +Element.ClassNames.prototype = { + initialize: function(element) { + this.element = $(element); + }, + + _each: function(iterator, context) { + this.element.className.split(/\s+/).select(function(name) { + return name.length > 0; + })._each(iterator, context); + }, + + set: function(className) { + this.element.className = className; + }, + + add: function(classNameToAdd) { + if (this.include(classNameToAdd)) return; + this.set($A(this).concat(classNameToAdd).join(' ')); + }, + + remove: function(classNameToRemove) { + if (!this.include(classNameToRemove)) return; + this.set($A(this).without(classNameToRemove).join(' ')); + }, + + toString: function() { + return $A(this).join(' '); + } +}; + +Object.extend(Element.ClassNames.prototype, Enumerable); + +/*--------------------------------------------------------------------------*/ + +(function() { + window.Selector = Class.create({ + initialize: function(expression) { + this.expression = expression.strip(); + }, + + findElements: function(rootElement) { + return Prototype.Selector.select(this.expression, rootElement); + }, + + match: function(element) { + return Prototype.Selector.match(element, this.expression); + }, + + toString: function() { + return this.expression; + }, + + inspect: function() { + return "#"; + } + }); + + Object.extend(Selector, { + matchElements: function(elements, expression) { + var match = Prototype.Selector.match, + results = []; + + for (var i = 0, length = elements.length; i < length; i++) { + var element = elements[i]; + if (match(element, expression)) { + results.push(Element.extend(element)); + } + } + return results; + }, + + findElement: function(elements, expression, index) { + index = index || 0; + var matchIndex = 0, element; + for (var i = 0, length = elements.length; i < length; i++) { + element = elements[i]; + if (Prototype.Selector.match(element, expression) && index === matchIndex++) { + return Element.extend(element); + } + } + }, + + findChildElements: function(element, expressions) { + var selector = expressions.toArray().join(', '); + return Prototype.Selector.select(selector, element || document); + } + }); +})(); + +/** + * Event.simulate(@element, eventName[, options]) -> Element + * + * - @element: element to fire event on + * - eventName: name of event to fire (only MouseEvents and HTMLEvents interfaces are supported) + * - options: optional object to fine-tune event properties - pointerX, pointerY, ctrlKey, etc. + * + * $('foo').simulate('click'); // => fires "click" event on an element with id=foo + * + **/ +(function(){ + + var eventMatchers = { + 'HTMLEvents': /^(?:load|unload|abort|error|select|change|submit|reset|focus|blur|resize|scroll|input)$/, + 'MouseEvents': /^(?:click|mouse(?:down|up|over|move|out))$/ + } + var defaultOptions = { + pointerX: 0, + pointerY: 0, + button: 0, + ctrlKey: false, + altKey: false, + shiftKey: false, + metaKey: false, + bubbles: true, + cancelable: true + } + + Event.simulate = function(element, eventName) { + var options = Object.extend(defaultOptions, arguments[2] || { }); + var oEvent, eventType = null; + + element = $(element); + + for (var name in eventMatchers) { + if (eventMatchers[name].test(eventName)) { eventType = name; break; } + } + + if (!eventType) + throw new SyntaxError('Only HTMLEvents and MouseEvents interfaces are supported'); + + if (document.createEvent) { + oEvent = document.createEvent(eventType); + if (eventType == 'HTMLEvents') { + oEvent.initEvent(eventName, options.bubbles, options.cancelable); + } + else { + oEvent.initMouseEvent(eventName, options.bubbles, options.cancelable, document.defaultView, + options.button, options.pointerX, options.pointerY, options.pointerX, options.pointerY, + options.ctrlKey, options.altKey, options.shiftKey, options.metaKey, options.button, element); + } + element.dispatchEvent(oEvent); + } + else { + options.clientX = options.pointerX; + options.clientY = options.pointerY; + oEvent = Object.extend(document.createEventObject(), options); + element.fireEvent('on' + eventName, oEvent); + } + return element; + } + + Element.addMethods({ simulate: Event.simulate }); +})() +function phi4z(t,i,s,e,o,n,a,r,h){var l,c,m,u,d,p,_,f,P,y;for(h=n,y=1;15>=y;y++)if(l=Math.sin(h),m=Math.tan(h),r=m*Math.sqrt(1-t*l*l),c=Math.sin(2*h),u=i*h-s*c+e*Math.sin(4*h)-o*Math.sin(6*h),d=i-2*s*Math.cos(2*h)+4*e*Math.cos(4*h)-6*o*Math.cos(6*h),p=2*u+r*(u*u+a)-2*n*(r*u+1),_=t*c*(u*u+a-2*n*u)/(2*r),f=2*(n-u)*(r*d-2/c)-2*d,P=p/(_+f),h+=P,1e-10>=Math.abs(P))return h;return Proj4js.reportError("phi4z: No convergence"),null}function e4fn(t){var i,s;return i=1+t,s=1-t,Math.sqrt(Math.pow(i,i)*Math.pow(s,s))}var Proj4js={defaultDatum:"WGS84",transform:function(t,i,s){if(!t.readyToUse)return this.reportError("Proj4js initialization for:"+t.srsCode+" not yet complete"),s;if(!i.readyToUse)return this.reportError("Proj4js initialization for:"+i.srsCode+" not yet complete"),s;if(t.datum&&i.datum&&((t.datum.datum_type==Proj4js.common.PJD_3PARAM||t.datum.datum_type==Proj4js.common.PJD_7PARAM)&&"WGS84"!=i.datumCode||(i.datum.datum_type==Proj4js.common.PJD_3PARAM||i.datum.datum_type==Proj4js.common.PJD_7PARAM)&&"WGS84"!=t.datumCode)){var e=Proj4js.WGS84;this.transform(t,e,s),t=e}return"enu"!=t.axis&&this.adjust_axis(t,!1,s),"longlat"==t.projName?(s.x*=Proj4js.common.D2R,s.y*=Proj4js.common.D2R):(t.to_meter&&(s.x*=t.to_meter,s.y*=t.to_meter),t.inverse(s)),t.from_greenwich&&(s.x+=t.from_greenwich),s=this.datum_transform(t.datum,i.datum,s),i.from_greenwich&&(s.x-=i.from_greenwich),"longlat"==i.projName?(s.x*=Proj4js.common.R2D,s.y*=Proj4js.common.R2D):(i.forward(s),i.to_meter&&(s.x/=i.to_meter,s.y/=i.to_meter)),"enu"!=i.axis&&this.adjust_axis(i,!0,s),s},datum_transform:function(t,i,s){return t.compare_datums(i)?s:t.datum_type==Proj4js.common.PJD_NODATUM||i.datum_type==Proj4js.common.PJD_NODATUM?s:((t.es!=i.es||t.a!=i.a||t.datum_type==Proj4js.common.PJD_3PARAM||t.datum_type==Proj4js.common.PJD_7PARAM||i.datum_type==Proj4js.common.PJD_3PARAM||i.datum_type==Proj4js.common.PJD_7PARAM)&&(t.geodetic_to_geocentric(s),(t.datum_type==Proj4js.common.PJD_3PARAM||t.datum_type==Proj4js.common.PJD_7PARAM)&&t.geocentric_to_wgs84(s),(i.datum_type==Proj4js.common.PJD_3PARAM||i.datum_type==Proj4js.common.PJD_7PARAM)&&i.geocentric_from_wgs84(s),i.geocentric_to_geodetic(s)),s)},adjust_axis:function(t,i,s){for(var e,o,n=s.x,a=s.y,r=s.z||0,h=0;3>h;h++)if(!i||2!=h||void 0!==s.z)switch(0==h?(e=n,o="x"):1==h?(e=a,o="y"):(e=r,o="z"),t.axis[h]){case"e":s[o]=e;break;case"w":s[o]=-e;break;case"n":s[o]=e;break;case"s":s[o]=-e;break;case"u":void 0!==s[o]&&(s.z=e);break;case"d":void 0!==s[o]&&(s.z=-e);break;default:return alert("ERROR: unknow axis ("+t.axis[h]+") - check definition of "+t.projName),null}return s},reportError:function(){},extend:function(t,i){if(t=t||{},i)for(var s in i){var e=i[s];void 0!==e&&(t[s]=e)}return t},Class:function(){for(var t,i=function(){this.initialize.apply(this,arguments)},s={},e=0;arguments.length>e;++e)t="function"==typeof arguments[e]?arguments[e].prototype:arguments[e],Proj4js.extend(s,t);return i.prototype=s,i},bind:function(t,i){var s=Array.prototype.slice.apply(arguments,[2]);return function(){var e=s.concat(Array.prototype.slice.apply(arguments,[0]));return t.apply(i,e)}},scriptName:"proj4js-combined.js",defsLookupService:"http://spatialreference.org/ref",libPath:null,getScriptLocation:function(){if(this.libPath)return this.libPath;for(var t=this.scriptName,i=t.length,s=document.getElementsByTagName("script"),e=0;s.length>e;e++){var o=s[e].getAttribute("src");if(o){var n=o.lastIndexOf(t);if(n>-1&&n+i==o.length){this.libPath=o.slice(0,-i);break}}}return this.libPath||""},loadScript:function(t,i,s,e){var o=document.createElement("script");o.defer=!1,o.type="text/javascript",o.id=t,o.src=t,o.onload=i,o.onerror=s,o.loadCheck=e,/MSIE/.test(navigator.userAgent)&&(o.onreadystatechange=this.checkReadyState),document.getElementsByTagName("head")[0].appendChild(o)},checkReadyState:function(){"loaded"==this.readyState&&(this.loadCheck()?this.onload():this.onerror())}};Proj4js.Proj=Proj4js.Class({readyToUse:!1,title:null,projName:null,units:null,datum:null,x0:0,y0:0,localCS:!1,queue:null,initialize:function(t,i){if(this.srsCodeInput=t,this.queue=[],i&&this.queue.push(i),t.indexOf("GEOGCS")>=0||t.indexOf("GEOCCS")>=0||t.indexOf("PROJCS")>=0||t.indexOf("LOCAL_CS")>=0)return this.parseWKT(t),this.deriveConstants(),this.loadProjCode(this.projName),void 0;if(0==t.indexOf("urn:")){var s=t.split(":");"ogc"!=s[1]&&"x-ogc"!=s[1]||"def"!=s[2]||"crs"!=s[3]||(t=s[4]+":"+s[s.length-1])}else if(0==t.indexOf("http://")){var e=t.split("#");e[0].match(/epsg.org/)?t="EPSG:"+e[1]:e[0].match(/RIG.xml/)&&(t="IGNF:"+e[1])}this.srsCode=t.toUpperCase(),0==this.srsCode.indexOf("EPSG")?(this.srsCode=this.srsCode,this.srsAuth="epsg",this.srsProjNumber=this.srsCode.substring(5)):0==this.srsCode.indexOf("IGNF")?(this.srsCode=this.srsCode,this.srsAuth="IGNF",this.srsProjNumber=this.srsCode.substring(5)):0==this.srsCode.indexOf("CRS")?(this.srsCode=this.srsCode,this.srsAuth="CRS",this.srsProjNumber=this.srsCode.substring(4)):(this.srsAuth="",this.srsProjNumber=this.srsCode),this.loadProjDefinition()},loadProjDefinition:function(){if(Proj4js.defs[this.srsCode])return this.defsLoaded(),void 0;var t=Proj4js.getScriptLocation()+"defs/"+this.srsAuth.toUpperCase()+this.srsProjNumber+".js";Proj4js.loadScript(t,Proj4js.bind(this.defsLoaded,this),Proj4js.bind(this.loadFromService,this),Proj4js.bind(this.checkDefsLoaded,this))},loadFromService:function(){var t=Proj4js.defsLookupService+"/"+this.srsAuth+"/"+this.srsProjNumber+"/proj4js/";Proj4js.loadScript(t,Proj4js.bind(this.defsLoaded,this),Proj4js.bind(this.defsFailed,this),Proj4js.bind(this.checkDefsLoaded,this))},defsLoaded:function(){this.parseDefs(),this.loadProjCode(this.projName)},checkDefsLoaded:function(){return Proj4js.defs[this.srsCode]?!0:!1},defsFailed:function(){Proj4js.reportError("failed to load projection definition for: "+this.srsCode),Proj4js.defs[this.srsCode]=Proj4js.defs.WGS84,this.defsLoaded()},loadProjCode:function(t){if(Proj4js.Proj[t])return this.initTransforms(),void 0;var i=Proj4js.getScriptLocation()+"projCode/"+t+".js";Proj4js.loadScript(i,Proj4js.bind(this.loadProjCodeSuccess,this,t),Proj4js.bind(this.loadProjCodeFailure,this,t),Proj4js.bind(this.checkCodeLoaded,this,t))},loadProjCodeSuccess:function(t){Proj4js.Proj[t].dependsOn?this.loadProjCode(Proj4js.Proj[t].dependsOn):this.initTransforms()},loadProjCodeFailure:function(t){Proj4js.reportError("failed to find projection file for: "+t)},checkCodeLoaded:function(t){return Proj4js.Proj[t]?!0:!1},initTransforms:function(){if(Proj4js.extend(this,Proj4js.Proj[this.projName]),this.init(),this.readyToUse=!0,this.queue)for(var t;t=this.queue.shift();)t.call(this,this)},wktRE:/^(\w+)\[(.*)\]$/,parseWKT:function(t){var i=t.match(this.wktRE);if(i){var s,e=i[1],o=i[2],n=o.split(",");s="TOWGS84"==e.toUpperCase()?e:n.shift(),s=s.replace(/^\"/,""),s=s.replace(/\"$/,"");for(var a=[],r=0,h="",l=0;n.length>l;++l){for(var c=n[l],m=0;c.length>m;++m)"["==c.charAt(m)&&++r,"]"==c.charAt(m)&&--r;h+=c,0===r?(a.push(h),h=""):h+=","}switch(e){case"LOCAL_CS":this.projName="identity",this.localCS=!0,this.srsCode=s;break;case"GEOGCS":this.projName="longlat",this.geocsCode=s,this.srsCode||(this.srsCode=s);break;case"PROJCS":this.srsCode=s;break;case"GEOCCS":break;case"PROJECTION":this.projName=Proj4js.wktProjections[s];break;case"DATUM":this.datumName=s;break;case"LOCAL_DATUM":this.datumCode="none";break;case"SPHEROID":this.ellps=s,this.a=parseFloat(a.shift()),this.rf=parseFloat(a.shift());break;case"PRIMEM":this.from_greenwich=parseFloat(a.shift());break;case"UNIT":this.units=s,this.unitsPerMeter=parseFloat(a.shift());break;case"PARAMETER":var u=s.toLowerCase(),d=parseFloat(a.shift());switch(u){case"false_easting":this.x0=d;break;case"false_northing":this.y0=d;break;case"scale_factor":this.k0=d;break;case"central_meridian":this.long0=d*Proj4js.common.D2R;break;case"latitude_of_origin":this.lat0=d*Proj4js.common.D2R;break;case"more_here":break;default:}break;case"TOWGS84":this.datum_params=a;break;case"AXIS":var u=s.toLowerCase(),d=a.shift();switch(d){case"EAST":d="e";break;case"WEST":d="w";break;case"NORTH":d="n";break;case"SOUTH":d="s";break;case"UP":d="u";break;case"DOWN":d="d";break;case"OTHER":default:d=" "}switch(this.axis||(this.axis="enu"),u){case"x":this.axis=d+this.axis.substr(1,2);break;case"y":this.axis=this.axis.substr(0,1)+d+this.axis.substr(2,1);break;case"z":this.axis=this.axis.substr(0,2)+d;break;default:}case"MORE_HERE":break;default:}for(var l=0;a.length>l;++l)this.parseWKT(a[l])}},parseDefs:function(){this.defData=Proj4js.defs[this.srsCode];var t,i;if(this.defData){for(var s=this.defData.split("+"),e=0;s.length>e;e++){var o=s[e].split("=");switch(t=o[0].toLowerCase(),i=o[1],t.replace(/\s/gi,"")){case"":break;case"title":this.title=i;break;case"proj":this.projName=i.replace(/\s/gi,"");break;case"units":this.units=i.replace(/\s/gi,"");break;case"datum":this.datumCode=i.replace(/\s/gi,"");break;case"nadgrids":this.nagrids=i.replace(/\s/gi,"");break;case"ellps":this.ellps=i.replace(/\s/gi,"");break;case"a":this.a=parseFloat(i);break;case"b":this.b=parseFloat(i);break;case"rf":this.rf=parseFloat(i);break;case"lat_0":this.lat0=i*Proj4js.common.D2R;break;case"lat_1":this.lat1=i*Proj4js.common.D2R;break;case"lat_2":this.lat2=i*Proj4js.common.D2R;break;case"lat_ts":this.lat_ts=i*Proj4js.common.D2R;break;case"lon_0":this.long0=i*Proj4js.common.D2R;break;case"alpha":this.alpha=parseFloat(i)*Proj4js.common.D2R;break;case"lonc":this.longc=i*Proj4js.common.D2R;break;case"x_0":this.x0=parseFloat(i);break;case"y_0":this.y0=parseFloat(i);break;case"k_0":this.k0=parseFloat(i);break;case"k":this.k0=parseFloat(i);break;case"r_a":this.R_A=!0;break;case"zone":this.zone=parseInt(i,10);break;case"south":this.utmSouth=!0;break;case"towgs84":this.datum_params=i.split(",");break;case"to_meter":this.to_meter=parseFloat(i);break;case"from_greenwich":this.from_greenwich=i*Proj4js.common.D2R;break;case"pm":i=i.replace(/\s/gi,""),this.from_greenwich=Proj4js.PrimeMeridian[i]?Proj4js.PrimeMeridian[i]:parseFloat(i),this.from_greenwich*=Proj4js.common.D2R;break;case"axis":i=i.replace(/\s/gi,"");var n="ewnsud";3==i.length&&-1!=n.indexOf(i.substr(0,1))&&-1!=n.indexOf(i.substr(1,1))&&-1!=n.indexOf(i.substr(2,1))&&(this.axis=i);break;case"no_defs":break;default:}}this.deriveConstants()}},deriveConstants:function(){if("@null"==this.nagrids&&(this.datumCode="none"),this.datumCode&&"none"!=this.datumCode){var t=Proj4js.Datum[this.datumCode];t&&(this.datum_params=t.towgs84?t.towgs84.split(","):null,this.ellps=t.ellipse,this.datumName=t.datumName?t.datumName:this.datumCode)}if(!this.a){var i=Proj4js.Ellipsoid[this.ellps]?Proj4js.Ellipsoid[this.ellps]:Proj4js.Ellipsoid.WGS84;Proj4js.extend(this,i)}this.rf&&!this.b&&(this.b=(1-1/this.rf)*this.a),(0===this.rf||Math.abs(this.a-this.b)=a;a++)if(s=t*Math.sin(n),e=this.HALF_PI-2*Math.atan(i*Math.pow((1-s)/(1+s),o))-n,n+=e,1e-10>=Math.abs(e))return n;return alert("phi2z has NoConvergence"),-9999},qsfnz:function(t,i){var s;return t>1e-7?(s=t*i,(1-t*t)*(i/(1-s*s)-.5/t*Math.log((1-s)/(1+s)))):2*i},asinz:function(t){return Math.abs(t)>1&&(t=t>1?1:-1),Math.asin(t)},e0fn:function(t){return 1-.25*t*(1+t/16*(3+1.25*t))},e1fn:function(t){return.375*t*(1+.25*t*(1+.46875*t))},e2fn:function(t){return.05859375*t*t*(1+.75*t)},e3fn:function(t){return t*t*t*(35/3072)},mlfn:function(t,i,s,e,o){return t*o-i*Math.sin(2*o)+s*Math.sin(4*o)-e*Math.sin(6*o)},srat:function(t,i){return Math.pow((1-t)/(1+t),i)},sign:function(t){return 0>t?-1:1},adjust_lon:function(t){return t=Math.abs(t)this.HALF_PI)return+Number.NaN;if(i==this.HALF_PI)return Number.POSITIVE_INFINITY;if(i==-1*this.HALF_PI)return-1*Number.POSITIVE_INFINITY;var e=t*s;return Math.log(Math.tan((this.HALF_PI+i)/2))+t*Math.log((1-e)/(1+e))/2},fL:function(t,i){return 2*Math.atan(t*Math.exp(i))-this.HALF_PI},invlatiso:function(t,i){var s=this.fL(1,i),e=0,o=0;do e=s,o=t*Math.sin(e),s=this.fL(Math.exp(t*Math.log((1+o)/(1-o))/2),i);while(Math.abs(s-e)>1e-12);return s},sinh:function(t){var i=Math.exp(t);return i=(i-1/i)/2},cosh:function(t){var i=Math.exp(t);return i=(i+1/i)/2},tanh:function(t){var i=Math.exp(t);return i=(i-1/i)/(i+1/i)},asinh:function(t){var i=t>=0?1:-1;return i*Math.log(Math.abs(t)+Math.sqrt(t*t+1))},acosh:function(t){return 2*Math.log(Math.sqrt((t+1)/2)+Math.sqrt((t-1)/2))},atanh:function(t){return Math.log((t-1)/(t+1))/2},gN:function(t,i,s){var e=i*s;return t/Math.sqrt(1-e*e)},pj_enfn:function(t){var i=[];i[0]=this.C00-t*(this.C02+t*(this.C04+t*(this.C06+t*this.C08))),i[1]=t*(this.C22-t*(this.C04+t*(this.C06+t*this.C08)));var s=t*t;return i[2]=s*(this.C44-t*(this.C46+t*this.C48)),s*=t,i[3]=s*(this.C66-t*this.C68),i[4]=s*t*this.C88,i},pj_mlfn:function(t,i,s,e){return s*=i,i*=i,e[0]*t-s*(e[1]+i*(e[2]+i*(e[3]+i*e[4])))},pj_inv_mlfn:function(t,i,s){for(var e=1/(1-i),o=t,n=Proj4js.common.MAX_ITER;n;--n){var a=Math.sin(o),r=1-i*a*a;if(r=(this.pj_mlfn(o,a,Math.cos(o),s)-t)*r*Math.sqrt(r)*e,o-=r,Math.abs(r)i;i++)t.datum_params[i]=parseFloat(t.datum_params[i]);(0!=t.datum_params[0]||0!=t.datum_params[1]||0!=t.datum_params[2])&&(this.datum_type=Proj4js.common.PJD_3PARAM),t.datum_params.length>3&&(0!=t.datum_params[3]||0!=t.datum_params[4]||0!=t.datum_params[5]||0!=t.datum_params[6])&&(this.datum_type=Proj4js.common.PJD_7PARAM,t.datum_params[3]*=Proj4js.common.SEC_TO_RAD,t.datum_params[4]*=Proj4js.common.SEC_TO_RAD,t.datum_params[5]*=Proj4js.common.SEC_TO_RAD,t.datum_params[6]=t.datum_params[6]/1e6+1)}t&&(this.a=t.a,this.b=t.b,this.es=t.es,this.ep2=t.ep2,this.datum_params=t.datum_params)},compare_datums:function(t){return this.datum_type!=t.datum_type?!1:this.a!=t.a||Math.abs(this.es-t.es)>5e-11?!1:this.datum_type==Proj4js.common.PJD_3PARAM?this.datum_params[0]==t.datum_params[0]&&this.datum_params[1]==t.datum_params[1]&&this.datum_params[2]==t.datum_params[2]:this.datum_type==Proj4js.common.PJD_7PARAM?this.datum_params[0]==t.datum_params[0]&&this.datum_params[1]==t.datum_params[1]&&this.datum_params[2]==t.datum_params[2]&&this.datum_params[3]==t.datum_params[3]&&this.datum_params[4]==t.datum_params[4]&&this.datum_params[5]==t.datum_params[5]&&this.datum_params[6]==t.datum_params[6]:this.datum_type==Proj4js.common.PJD_GRIDSHIFT||t.datum_type==Proj4js.common.PJD_GRIDSHIFT?(alert("ERROR: Grid shift transformations are not implemented."),!1):!0},geodetic_to_geocentric:function(t){var i,s,e,o,n,a,r,h=t.x,l=t.y,c=t.z?t.z:0,m=0;if(-Proj4js.common.HALF_PI>l&&l>-1.001*Proj4js.common.HALF_PI)l=-Proj4js.common.HALF_PI;else if(l>Proj4js.common.HALF_PI&&1.001*Proj4js.common.HALF_PI>l)l=Proj4js.common.HALF_PI;else if(-Proj4js.common.HALF_PI>l||l>Proj4js.common.HALF_PI)return Proj4js.reportError("geocent:lat out of range:"+l),null;return h>Proj4js.common.PI&&(h-=2*Proj4js.common.PI),n=Math.sin(l),r=Math.cos(l),a=n*n,o=this.a/Math.sqrt(1-this.es*a),i=(o+c)*r*Math.cos(h),s=(o+c)*r*Math.sin(h),e=(o*(1-this.es)+c)*n,t.x=i,t.y=s,t.z=e,m},geocentric_to_geodetic:function(t){var i,s,e,o,n,a,r,h,l,c,m,u,d,p,_,f,P,y=1e-12,g=y*y,L=30,v=t.x,j=t.y,M=t.z?t.z:0;if(d=!1,i=Math.sqrt(v*v+j*j),s=Math.sqrt(v*v+j*j+M*M),y>i/this.a){if(d=!0,_=0,y>s/this.a)return f=Proj4js.common.HALF_PI,P=-this.b,void 0}else _=Math.atan2(j,v);e=M/s,o=i/s,n=1/Math.sqrt(1-this.es*(2-this.es)*o*o),h=o*(1-this.es)*n,l=e*n,p=0;do p++,r=this.a/Math.sqrt(1-this.es*l*l),P=i*h+M*l-r*(1-this.es*l*l),a=this.es*r/(r+P),n=1/Math.sqrt(1-a*(2-a)*o*o),c=o*(1-a)*n,m=e*n,u=m*h-c*l,h=c,l=m;while(u*u>g&&L>p);return f=Math.atan(m/Math.abs(c)),t.x=_,t.y=f,t.z=P,t},geocentric_to_geodetic_noniter:function(t){var i,s,e,o,n,a,r,h,l,c,m,u,d,p,_,f,P,y=t.x,g=t.y,L=t.z?t.z:0;if(y=parseFloat(y),g=parseFloat(g),L=parseFloat(L),P=!1,0!=y)i=Math.atan2(g,y);else if(g>0)i=Proj4js.common.HALF_PI;else if(0>g)i=-Proj4js.common.HALF_PI;else if(P=!0,i=0,L>0)s=Proj4js.common.HALF_PI;else{if(!(0>L))return s=Proj4js.common.HALF_PI,e=-this.b,void 0;s=-Proj4js.common.HALF_PI}return n=y*y+g*g,o=Math.sqrt(n),a=L*Proj4js.common.AD_C,h=Math.sqrt(a*a+n),c=a/h,u=o/h,m=c*c*c,r=L+this.b*this.ep2*m,f=o-this.a*this.es*u*u*u,l=Math.sqrt(r*r+f*f),d=r/l,p=f/l,_=this.a/Math.sqrt(1-this.es*d*d),e=p>=Proj4js.common.COS_67P5?o/p-_:-Proj4js.common.COS_67P5>=p?o/-p-_:L/d+_*(this.es-1),0==P&&(s=Math.atan(d/p)),t.x=i,t.y=s,t.z=e,t},geocentric_to_wgs84:function(t){if(this.datum_type==Proj4js.common.PJD_3PARAM)t.x+=this.datum_params[0],t.y+=this.datum_params[1],t.z+=this.datum_params[2];else if(this.datum_type==Proj4js.common.PJD_7PARAM){var i=this.datum_params[0],s=this.datum_params[1],e=this.datum_params[2],o=this.datum_params[3],n=this.datum_params[4],a=this.datum_params[5],r=this.datum_params[6],h=r*(t.x-a*t.y+n*t.z)+i,l=r*(a*t.x+t.y-o*t.z)+s,c=r*(-n*t.x+o*t.y+t.z)+e;t.x=h,t.y=l,t.z=c}},geocentric_from_wgs84:function(t){if(this.datum_type==Proj4js.common.PJD_3PARAM)t.x-=this.datum_params[0],t.y-=this.datum_params[1],t.z-=this.datum_params[2];else if(this.datum_type==Proj4js.common.PJD_7PARAM){var i=this.datum_params[0],s=this.datum_params[1],e=this.datum_params[2],o=this.datum_params[3],n=this.datum_params[4],a=this.datum_params[5],r=this.datum_params[6],h=(t.x-i)/r,l=(t.y-s)/r,c=(t.z-e)/r;t.x=h+a*l-n*c,t.y=-a*h+l+o*c,t.z=n*h-o*l+c}}}),Proj4js.Point=Proj4js.Class({initialize:function(t,i,s){if("object"==typeof t)this.x=t[0],this.y=t[1],this.z=t[2]||0;else if("string"==typeof t&&i===void 0){var e=t.split(",");this.x=parseFloat(e[0]),this.y=parseFloat(e[1]),this.z=parseFloat(e[2])||0}else this.x=t,this.y=i,this.z=s||0},clone:function(){return new Proj4js.Point(this.x,this.y,this.z)},toString:function(){return"x="+this.x+",y="+this.y},toShortString:function(){return this.x+", "+this.y}}),Proj4js.PrimeMeridian={greenwich:0,lisbon:-9.131906111111,paris:2.337229166667,bogota:-74.080916666667,madrid:-3.687938888889,rome:12.452333333333,bern:7.439583333333,jakarta:106.807719444444,ferro:-17.666666666667,brussels:4.367975,stockholm:18.058277777778,athens:23.7163375,oslo:10.722916666667},Proj4js.Ellipsoid={MERIT:{a:6378137,rf:298.257,ellipseName:"MERIT 1983"},SGS85:{a:6378136,rf:298.257,ellipseName:"Soviet Geodetic System 85"},GRS80:{a:6378137,rf:298.257222101,ellipseName:"GRS 1980(IUGG, 1980)"},IAU76:{a:6378140,rf:298.257,ellipseName:"IAU 1976"},airy:{a:6377563.396,b:6356256.91,ellipseName:"Airy 1830"},"APL4.":{a:6378137,rf:298.25,ellipseName:"Appl. Physics. 1965"},NWL9D:{a:6378145,rf:298.25,ellipseName:"Naval Weapons Lab., 1965"},mod_airy:{a:6377340.189,b:6356034.446,ellipseName:"Modified Airy"},andrae:{a:6377104.43,rf:300,ellipseName:"Andrae 1876 (Den., Iclnd.)"},aust_SA:{a:6378160,rf:298.25,ellipseName:"Australian Natl & S. Amer. 1969"},GRS67:{a:6378160,rf:298.247167427,ellipseName:"GRS 67(IUGG 1967)"},bessel:{a:6377397.155,rf:299.1528128,ellipseName:"Bessel 1841"},bess_nam:{a:6377483.865,rf:299.1528128,ellipseName:"Bessel 1841 (Namibia)"},clrk66:{a:6378206.4,b:6356583.8,ellipseName:"Clarke 1866"},clrk80:{a:6378249.145,rf:293.4663,ellipseName:"Clarke 1880 mod."},CPM:{a:6375738.7,rf:334.29,ellipseName:"Comm. des Poids et Mesures 1799"},delmbr:{a:6376428,rf:311.5,ellipseName:"Delambre 1810 (Belgium)"},engelis:{a:6378136.05,rf:298.2566,ellipseName:"Engelis 1985"},evrst30:{a:6377276.345,rf:300.8017,ellipseName:"Everest 1830"},evrst48:{a:6377304.063,rf:300.8017,ellipseName:"Everest 1948"},evrst56:{a:6377301.243,rf:300.8017,ellipseName:"Everest 1956"},evrst69:{a:6377295.664,rf:300.8017,ellipseName:"Everest 1969"},evrstSS:{a:6377298.556,rf:300.8017,ellipseName:"Everest (Sabah & Sarawak)"},fschr60:{a:6378166,rf:298.3,ellipseName:"Fischer (Mercury Datum) 1960"},fschr60m:{a:6378155,rf:298.3,ellipseName:"Fischer 1960"},fschr68:{a:6378150,rf:298.3,ellipseName:"Fischer 1968"},helmert:{a:6378200,rf:298.3,ellipseName:"Helmert 1906"},hough:{a:6378270,rf:297,ellipseName:"Hough"},intl:{a:6378388,rf:297,ellipseName:"International 1909 (Hayford)"},kaula:{a:6378163,rf:298.24,ellipseName:"Kaula 1961"},lerch:{a:6378139,rf:298.257,ellipseName:"Lerch 1979"},mprts:{a:6397300,rf:191,ellipseName:"Maupertius 1738"},new_intl:{a:6378157.5,b:6356772.2,ellipseName:"New International 1967"},plessis:{a:6376523,rf:6355863,ellipseName:"Plessis 1817 (France)"},krass:{a:6378245,rf:298.3,ellipseName:"Krassovsky, 1942"},SEasia:{a:6378155,b:6356773.3205,ellipseName:"Southeast Asia"},walbeck:{a:6376896,b:6355834.8467,ellipseName:"Walbeck"},WGS60:{a:6378165,rf:298.3,ellipseName:"WGS 60"},WGS66:{a:6378145,rf:298.25,ellipseName:"WGS 66"},WGS72:{a:6378135,rf:298.26,ellipseName:"WGS 72"},WGS84:{a:6378137,rf:298.257223563,ellipseName:"WGS 84"},sphere:{a:6370997,b:6370997,ellipseName:"Normal Sphere (r=6370997)"}},Proj4js.Datum={WGS84:{towgs84:"0,0,0",ellipse:"WGS84",datumName:"WGS84"},GGRS87:{towgs84:"-199.87,74.79,246.62",ellipse:"GRS80",datumName:"Greek_Geodetic_Reference_System_1987"},NAD83:{towgs84:"0,0,0",ellipse:"GRS80",datumName:"North_American_Datum_1983"},NAD27:{nadgrids:"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat",ellipse:"clrk66",datumName:"North_American_Datum_1927"},potsdam:{towgs84:"606.0,23.0,413.0",ellipse:"bessel",datumName:"Potsdam Rauenberg 1950 DHDN"},carthage:{towgs84:"-263.0,6.0,431.0",ellipse:"clark80",datumName:"Carthage 1934 Tunisia"},hermannskogel:{towgs84:"653.0,-212.0,449.0",ellipse:"bessel",datumName:"Hermannskogel"},ire65:{towgs84:"482.530,-130.596,564.557,-1.042,-0.214,-0.631,8.15",ellipse:"mod_airy",datumName:"Ireland 1965"},nzgd49:{towgs84:"59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993",ellipse:"intl",datumName:"New Zealand Geodetic Datum 1949"},OSGB36:{towgs84:"446.448,-125.157,542.060,0.1502,0.2470,0.8421,-20.4894",ellipse:"airy",datumName:"Airy 1830"}},Proj4js.WGS84=new Proj4js.Proj("WGS84"),Proj4js.Datum.OSB36=Proj4js.Datum.OSGB36,Proj4js.wktProjections={"Lambert Tangential Conformal Conic Projection":"lcc",Mercator:"merc","Popular Visualisation Pseudo Mercator":"merc",Mercator_1SP:"merc",Transverse_Mercator:"tmerc","Transverse Mercator":"tmerc","Lambert Azimuthal Equal Area":"laea","Universal Transverse Mercator System":"utm"},Proj4js.Proj.aea={init:function(){return Math.abs(this.lat1+this.lat2)Proj4js.common.EPSLN?(this.ms1*this.ms1-this.ms2*this.ms2)/(this.qs2-this.qs1):this.con,this.c=this.ms1*this.ms1+this.ns0*this.qs1,this.rh=this.a*Math.sqrt(this.c-this.ns0*this.qs0)/this.ns0,void 0)},forward:function(t){var i=t.x,s=t.y;this.sin_phi=Math.sin(s),this.cos_phi=Math.cos(s);var e=Proj4js.common.qsfnz(this.e3,this.sin_phi,this.cos_phi),o=this.a*Math.sqrt(this.c-this.ns0*e)/this.ns0,n=this.ns0*Proj4js.common.adjust_lon(i-this.long0),a=o*Math.sin(n)+this.x0,r=this.rh-o*Math.cos(n)+this.y0;return t.x=a,t.y=r,t},inverse:function(t){var i,s,e,o,n,a;return t.x-=this.x0,t.y=this.rh-t.y+this.y0,this.ns0>=0?(i=Math.sqrt(t.x*t.x+t.y*t.y),e=1):(i=-Math.sqrt(t.x*t.x+t.y*t.y),e=-1),o=0,0!=i&&(o=Math.atan2(e*t.x,e*t.y)),e=i*this.ns0/this.a,s=(this.c-e*e)/this.ns0,this.e3>=1e-10?(e=1-.5*(1-this.es)*Math.log((1-this.e3)/(1+this.e3))/this.e3,a=Math.abs(Math.abs(e)-Math.abs(s))>1e-10?this.phi1z(this.e3,s):s>=0?.5*Proj4js.common.PI:-.5*Proj4js.common.PI):a=this.phi1z(this.e3,s),n=Proj4js.common.adjust_lon(o/this.ns0+this.long0),t.x=n,t.y=a,t},phi1z:function(t,i){var s,e,o,n,a,r=Proj4js.common.asinz(.5*i);if(Proj4js.common.EPSLN>t)return r;for(var h=t*t,l=1;25>=l;l++)if(s=Math.sin(r),e=Math.cos(r),o=t*s,n=1-o*o,a=.5*n*n/e*(i/(1-h)-s/n+.5/t*Math.log((1-o)/(1+o))),r+=a,1e-7>=Math.abs(a))return r;return Proj4js.reportError("aea:phi1z:Convergence error"),null}},Proj4js.Proj.sterea={dependsOn:"gauss",init:function(){return Proj4js.Proj.gauss.init.apply(this),this.rc?(this.sinc0=Math.sin(this.phic0),this.cosc0=Math.cos(this.phic0),this.R2=2*this.rc,this.title||(this.title="Oblique Stereographic Alternative"),void 0):(Proj4js.reportError("sterea:init:E_ERROR_0"),void 0)},forward:function(t){var i,s,e,o;return t.x=Proj4js.common.adjust_lon(t.x-this.long0),Proj4js.Proj.gauss.forward.apply(this,[t]),i=Math.sin(t.y),s=Math.cos(t.y),e=Math.cos(t.x),o=this.k0*this.R2/(1+this.sinc0*i+this.cosc0*s*e),t.x=o*s*Math.sin(t.x),t.y=o*(this.cosc0*i-this.sinc0*s*e),t.x=this.a*t.x+this.x0,t.y=this.a*t.y+this.y0,t},inverse:function(t){var i,s,e,o,n;if(t.x=(t.x-this.x0)/this.a,t.y=(t.y-this.y0)/this.a,t.x/=this.k0,t.y/=this.k0,n=Math.sqrt(t.x*t.x+t.y*t.y)){var a=2*Math.atan2(n,this.R2);i=Math.sin(a),s=Math.cos(a),o=Math.asin(s*this.sinc0+t.y*i*this.cosc0/n),e=Math.atan2(t.x*i,n*this.cosc0*s-t.y*this.sinc0*i)}else o=this.phic0,e=0;return t.x=e,t.y=o,Proj4js.Proj.gauss.inverse.apply(this,[t]),t.x=Proj4js.common.adjust_lon(t.x+this.long0),t}},Proj4js.Proj.poly={init:function(){0==this.lat0&&(this.lat0=90),this.temp=this.b/this.a,this.es=1-Math.pow(this.temp,2),this.e=Math.sqrt(this.es),this.e0=Proj4js.common.e0fn(this.es),this.e1=Proj4js.common.e1fn(this.es),this.e2=Proj4js.common.e2fn(this.es),this.e3=Proj4js.common.e3fn(this.es),this.ml0=Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,this.lat0)},forward:function(t){var i,s,e,o,n,a,r,h=t.x,l=t.y;return e=Proj4js.common.adjust_lon(h-this.long0),1e-7>=Math.abs(l)?(a=this.x0+this.a*e,r=this.y0-this.a*this.ml0):(i=Math.sin(l),s=Math.cos(l),o=Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,l),n=Proj4js.common.msfnz(this.e,i,s),e=i,a=this.x0+this.a*n*Math.sin(e)/i,r=this.y0+this.a*(o-this.ml0+n*(1-Math.cos(e))/i)),t.x=a,t.y=r,t},inverse:function(t){var i,s,e,o,n,a;if(t.x-=this.x0,t.y-=this.y0,i=this.ml0+t.y/this.a,o=0,1e-7>=Math.abs(i))n=t.x/this.a+this.long0,a=0;else{if(s=i*i+t.x/this.a*(t.x/this.a),o=phi4z(this.es,this.e0,this.e1,this.e2,this.e3,this.al,s,e,a),1!=o)return o;n=Proj4js.common.adjust_lon(Proj4js.common.asinz(t.x*e/this.a)/Math.sin(a)+this.long0)}return t.x=n,t.y=a,t}},Proj4js.Proj.equi={init:function(){this.x0||(this.x0=0),this.y0||(this.y0=0),this.lat0||(this.lat0=0),this.long0||(this.long0=0)},forward:function(t){var i=t.x,s=t.y,e=Proj4js.common.adjust_lon(i-this.long0),o=this.x0+this.a*e*Math.cos(this.lat0),n=this.y0+this.a*s;return this.t1=o,this.t2=Math.cos(this.lat0),t.x=o,t.y=n,t},inverse:function(t){t.x-=this.x0,t.y-=this.y0;var i=t.y/this.a;Math.abs(i)>Proj4js.common.HALF_PI&&Proj4js.reportError("equi:Inv:DataError");var s=Proj4js.common.adjust_lon(this.long0+t.x/(this.a*Math.cos(this.lat0)));t.x=s,t.y=i}},Proj4js.Proj.merc={init:function(){this.lat_ts&&(this.k0=this.sphere?Math.cos(this.lat_ts):Proj4js.common.msfnz(this.es,Math.sin(this.lat_ts),Math.cos(this.lat_ts)))},forward:function(t){var i=t.x,s=t.y;if(s*Proj4js.common.R2D>90&&-90>s*Proj4js.common.R2D&&i*Proj4js.common.R2D>180&&-180>i*Proj4js.common.R2D)return Proj4js.reportError("merc:forward: llInputOutOfRange: "+i+" : "+s),null;var e,o;if(Math.abs(Math.abs(s)-Proj4js.common.HALF_PI)<=Proj4js.common.EPSLN)return Proj4js.reportError("merc:forward: ll2mAtPoles"),null;if(this.sphere)e=this.x0+this.a*this.k0*Proj4js.common.adjust_lon(i-this.long0),o=this.y0+this.a*this.k0*Math.log(Math.tan(Proj4js.common.FORTPI+.5*s));else{var n=Math.sin(s),a=Proj4js.common.tsfnz(this.e,s,n);e=this.x0+this.a*this.k0*Proj4js.common.adjust_lon(i-this.long0),o=this.y0-this.a*this.k0*Math.log(a)}return t.x=e,t.y=o,t},inverse:function(t){var i,s,e=t.x-this.x0,o=t.y-this.y0;if(this.sphere)s=Proj4js.common.HALF_PI-2*Math.atan(Math.exp(-o/this.a*this.k0));else{var n=Math.exp(-o/(this.a*this.k0));if(s=Proj4js.common.phi2z(this.e,n),-9999==s)return Proj4js.reportError("merc:inverse: lat = -9999"),null}return i=Proj4js.common.adjust_lon(this.long0+e/(this.a*this.k0)),t.x=i,t.y=s,t}},Proj4js.Proj.utm={dependsOn:"tmerc",init:function(){return this.zone?(this.lat0=0,this.long0=(6*Math.abs(this.zone)-183)*Proj4js.common.D2R,this.x0=5e5,this.y0=this.utmSouth?1e7:0,this.k0=.9996,Proj4js.Proj.tmerc.init.apply(this),this.forward=Proj4js.Proj.tmerc.forward,this.inverse=Proj4js.Proj.tmerc.inverse,void 0):(Proj4js.reportError("utm:init: zone must be specified for UTM"),void 0)}},Proj4js.Proj.eqdc={init:function(){this.mode||(this.mode=0),this.temp=this.b/this.a,this.es=1-Math.pow(this.temp,2),this.e=Math.sqrt(this.es),this.e0=Proj4js.common.e0fn(this.es),this.e1=Proj4js.common.e1fn(this.es),this.e2=Proj4js.common.e2fn(this.es),this.e3=Proj4js.common.e3fn(this.es),this.sinphi=Math.sin(this.lat1),this.cosphi=Math.cos(this.lat1),this.ms1=Proj4js.common.msfnz(this.e,this.sinphi,this.cosphi),this.ml1=Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,this.lat1),0!=this.mode?(Math.abs(this.lat1+this.lat2)=Proj4js.common.EPSLN?(this.ms1-this.ms2)/(this.ml2-this.ml1):this.sinphi):this.ns=this.sinphi,this.g=this.ml1+this.ms1/this.ns,this.ml0=Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,this.lat0),this.rh=this.a*(this.g-this.ml0) +},forward:function(t){var i=t.x,s=t.y,e=Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,s),o=this.a*(this.g-e),n=this.ns*Proj4js.common.adjust_lon(i-this.long0),a=this.x0+o*Math.sin(n),r=this.y0+this.rh-o*Math.cos(n);return t.x=a,t.y=r,t},inverse:function(t){t.x-=this.x0,t.y=this.rh-t.y+this.y0;var i,s;this.ns>=0?(s=Math.sqrt(t.x*t.x+t.y*t.y),i=1):(s=-Math.sqrt(t.x*t.x+t.y*t.y),i=-1);var e=0;0!=s&&(e=Math.atan2(i*t.x,i*t.y));var o=this.g-s/this.a,n=this.phi3z(o,this.e0,this.e1,this.e2,this.e3),a=Proj4js.common.adjust_lon(this.long0+e/this.ns);return t.x=a,t.y=n,t},phi3z:function(t,i,s,e,o){var n,a;n=t;for(var r=0;15>r;r++)if(a=(t+s*Math.sin(2*n)-e*Math.sin(4*n)+o*Math.sin(6*n))/i-n,n+=a,1e-10>=Math.abs(a))return n;return Proj4js.reportError("PHI3Z-CONV:Latitude failed to converge after 15 iterations"),null}},Proj4js.Proj.tmerc={init:function(){this.e0=Proj4js.common.e0fn(this.es),this.e1=Proj4js.common.e1fn(this.es),this.e2=Proj4js.common.e2fn(this.es),this.e3=Proj4js.common.e3fn(this.es),this.ml0=this.a*Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,this.lat0)},forward:function(t){var i,s,e,o=t.x,n=t.y,a=Proj4js.common.adjust_lon(o-this.long0),r=Math.sin(n),h=Math.cos(n);if(this.sphere){var l=h*Math.sin(a);if(1e-10>Math.abs(Math.abs(l)-1))return Proj4js.reportError("tmerc:forward: Point projects into infinity"),93;s=.5*this.a*this.k0*Math.log((1+l)/(1-l)),i=Math.acos(h*Math.cos(a)/Math.sqrt(1-l*l)),0>n&&(i=-i),e=this.a*this.k0*(i-this.lat0)}else{var c=h*a,m=Math.pow(c,2),u=this.ep2*Math.pow(h,2),d=Math.tan(n),p=Math.pow(d,2);i=1-this.es*Math.pow(r,2);var _=this.a/Math.sqrt(i),f=this.a*Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,n);s=this.k0*_*c*(1+m/6*(1-p+u+m/20*(5-18*p+Math.pow(p,2)+72*u-58*this.ep2)))+this.x0,e=this.k0*(f-this.ml0+_*d*m*(.5+m/24*(5-p+9*u+4*Math.pow(u,2)+m/30*(61-58*p+Math.pow(p,2)+600*u-330*this.ep2))))+this.y0}return t.x=s,t.y=e,t},inverse:function(t){var i,s,e,o,n,a,r=6;if(this.sphere){var h=Math.exp(t.x/(this.a*this.k0)),l=.5*(h-1/h),c=this.lat0+t.y/(this.a*this.k0),m=Math.cos(c);i=Math.sqrt((1-m*m)/(1+l*l)),n=Proj4js.common.asinz(i),0>c&&(n=-n),a=0==l&&0==m?this.long0:Proj4js.common.adjust_lon(Math.atan2(l,m)+this.long0)}else{var u=t.x-this.x0,d=t.y-this.y0;for(i=(this.ml0+d/this.k0)/this.a,s=i,o=0;!0&&(e=(i+this.e1*Math.sin(2*s)-this.e2*Math.sin(4*s)+this.e3*Math.sin(6*s))/this.e0-s,s+=e,!(Math.abs(e)<=Proj4js.common.EPSLN));o++)if(o>=r)return Proj4js.reportError("tmerc:inverse: Latitude failed to converge"),95;if(Math.abs(s)0||Math.abs(a)<=Proj4js.common.EPSLN)var l=this.a*n*s*Math.sin(e),c=this.y0+this.a*n*(this.cos_p14*i-this.sin_p14*s*o);else Proj4js.reportError("orthoFwdPointError");return t.x=l,t.y=c,t},inverse:function(t){var i,s,e,o,n,a,r;return t.x-=this.x0,t.y-=this.y0,i=Math.sqrt(t.x*t.x+t.y*t.y),i>this.a+1e-7&&Proj4js.reportError("orthoInvDataError"),s=Proj4js.common.asinz(i/this.a),e=Math.sin(s),o=Math.cos(s),a=this.long0,Math.abs(i)<=Proj4js.common.EPSLN&&(r=this.lat0),r=Proj4js.common.asinz(o*this.sin_p14+t.y*e*this.cos_p14/i),n=Math.abs(this.lat0)-Proj4js.common.HALF_PI,Math.abs(n)<=Proj4js.common.EPSLN&&(a=this.lat0>=0?Proj4js.common.adjust_lon(this.long0+Math.atan2(t.x,-t.y)):Proj4js.common.adjust_lon(this.long0-Math.atan2(-t.x,t.y))),n=o-this.sin_p14*Math.sin(r),t.x=a,t.y=r,t}},Proj4js.Proj.krovak={init:function(){this.a=6377397.155,this.es=.006674372230614,this.e=Math.sqrt(this.es),this.lat0||(this.lat0=.863937979737193),this.long0||(this.long0=.4334234309119251),this.k0||(this.k0=.9999),this.s45=.785398163397448,this.s90=2*this.s45,this.fi0=this.lat0,this.e2=this.es,this.e=Math.sqrt(this.e2),this.alfa=Math.sqrt(1+this.e2*Math.pow(Math.cos(this.fi0),4)/(1-this.e2)),this.uq=1.04216856380474,this.u0=Math.asin(Math.sin(this.fi0)/this.alfa),this.g=Math.pow((1+this.e*Math.sin(this.fi0))/(1-this.e*Math.sin(this.fi0)),this.alfa*this.e/2),this.k=Math.tan(this.u0/2+this.s45)/Math.pow(Math.tan(this.fi0/2+this.s45),this.alfa)*this.g,this.k1=this.k0,this.n0=this.a*Math.sqrt(1-this.e2)/(1-this.e2*Math.pow(Math.sin(this.fi0),2)),this.s0=1.37008346281555,this.n=Math.sin(this.s0),this.ro0=this.k1*this.n0/Math.tan(this.s0),this.ad=this.s90-this.uq},forward:function(t){var i,s,e,o,n,a,r,h=t.x,l=t.y,c=Proj4js.common.adjust_lon(h-this.long0);return i=Math.pow((1+this.e*Math.sin(l))/(1-this.e*Math.sin(l)),this.alfa*this.e/2),s=2*(Math.atan(this.k*Math.pow(Math.tan(l/2+this.s45),this.alfa)/i)-this.s45),e=-c*this.alfa,o=Math.asin(Math.cos(this.ad)*Math.sin(s)+Math.sin(this.ad)*Math.cos(s)*Math.cos(e)),n=Math.asin(Math.cos(s)*Math.sin(e)/Math.cos(o)),a=this.n*n,r=this.ro0*Math.pow(Math.tan(this.s0/2+this.s45),this.n)/Math.pow(Math.tan(o/2+this.s45),this.n),t.y=r*Math.cos(a)/1,t.x=r*Math.sin(a)/1,this.czech&&(t.y*=-1,t.x*=-1),t},inverse:function(t){var i,s,e,o,n,a,r,h,l=t.x;t.x=t.y,t.y=l,this.czech&&(t.y*=-1,t.x*=-1),a=Math.sqrt(t.x*t.x+t.y*t.y),n=Math.atan2(t.y,t.x),o=n/Math.sin(this.s0),e=2*(Math.atan(Math.pow(this.ro0/a,1/this.n)*Math.tan(this.s0/2+this.s45))-this.s45),i=Math.asin(Math.cos(this.ad)*Math.sin(e)-Math.sin(this.ad)*Math.cos(e)*Math.cos(o)),s=Math.asin(Math.cos(e)*Math.sin(o)/Math.cos(i)),t.x=this.long0-s/this.alfa,r=i,h=0;var c=0;do t.y=2*(Math.atan(Math.pow(this.k,-1/this.alfa)*Math.pow(Math.tan(i/2+this.s45),1/this.alfa)*Math.pow((1+this.e*Math.sin(r))/(1-this.e*Math.sin(r)),this.e/2))-this.s45),1e-10>Math.abs(r-t.y)&&(h=1),r=t.y,c+=1;while(0==h&&15>c);return c>=15?(Proj4js.reportError("PHI3Z-CONV:Latitude failed to converge after 15 iterations"),null):t}},Proj4js.Proj.somerc={init:function(){var t=this.lat0;this.lambda0=this.long0;var i=Math.sin(t),s=this.a,e=this.rf,o=1/e,n=2*o-Math.pow(o,2),a=this.e=Math.sqrt(n);this.R=this.k0*s*Math.sqrt(1-n)/(1-n*Math.pow(i,2)),this.alpha=Math.sqrt(1+n/(1-n)*Math.pow(Math.cos(t),4)),this.b0=Math.asin(i/this.alpha),this.K=Math.log(Math.tan(Math.PI/4+this.b0/2))-this.alpha*Math.log(Math.tan(Math.PI/4+t/2))+this.alpha*a/2*Math.log((1+a*i)/(1-a*i))},forward:function(t){var i=Math.log(Math.tan(Math.PI/4-t.y/2)),s=this.e/2*Math.log((1+this.e*Math.sin(t.y))/(1-this.e*Math.sin(t.y))),e=-this.alpha*(i+s)+this.K,o=2*(Math.atan(Math.exp(e))-Math.PI/4),n=this.alpha*(t.x-this.lambda0),a=Math.atan(Math.sin(n)/(Math.sin(this.b0)*Math.tan(o)+Math.cos(this.b0)*Math.cos(n))),r=Math.asin(Math.cos(this.b0)*Math.sin(o)-Math.sin(this.b0)*Math.cos(o)*Math.cos(n));return t.y=this.R/2*Math.log((1+Math.sin(r))/(1-Math.sin(r)))+this.y0,t.x=this.R*a+this.x0,t},inverse:function(t){for(var i=t.x-this.x0,s=t.y-this.y0,e=i/this.R,o=2*(Math.atan(Math.exp(s/this.R))-Math.PI/4),n=Math.asin(Math.cos(this.b0)*Math.sin(o)+Math.sin(this.b0)*Math.cos(o)*Math.cos(e)),a=Math.atan(Math.sin(e)/(Math.cos(this.b0)*Math.cos(e)-Math.sin(this.b0)*Math.tan(o))),r=this.lambda0+a/this.alpha,h=0,l=n,c=-1e3,m=0;Math.abs(l-c)>1e-7;){if(++m>20)return Proj4js.reportError("omercFwdInfinity"),void 0;h=1/this.alpha*(Math.log(Math.tan(Math.PI/4+n/2))-this.K)+this.e*Math.log(Math.tan(Math.PI/4+Math.asin(this.e*Math.sin(l))/2)),c=l,l=2*Math.atan(Math.exp(h))-Math.PI/2}return t.x=r,t.y=l,t}},Proj4js.Proj.stere={ssfn_:function(t,i,s){return i*=s,Math.tan(.5*(Proj4js.common.HALF_PI+t))*Math.pow((1-i)/(1+i),.5*s)},TOL:1e-8,NITER:8,CONV:1e-10,S_POLE:0,N_POLE:1,OBLIQ:2,EQUIT:3,init:function(){this.phits=this.lat_ts?this.lat_ts:Proj4js.common.HALF_PI;var t=Math.abs(this.lat0);if(this.mode=Math.abs(t)-Proj4js.common.HALF_PIthis.lat0?this.S_POLE:this.N_POLE:t>Proj4js.common.EPSLN?this.OBLIQ:this.EQUIT,this.phits=Math.abs(this.phits),this.es){var i;switch(this.mode){case this.N_POLE:case this.S_POLE:Math.abs(this.phits-Proj4js.common.HALF_PI)=Proj4js.common.EPSLN?Math.cos(this.phits)/Math.tan(Proj4js.common.FORTPI-.5*this.phits):2*this.k0}},forward:function(t){var i=t.x;i=Proj4js.common.adjust_lon(i-this.long0);var s,e,o=t.y;if(this.sphere){var n,a,r,h;switch(n=Math.sin(o),a=Math.cos(o),r=Math.cos(i),h=Math.sin(i),this.mode){case this.EQUIT:e=1+a*r,Proj4js.common.EPSLN>=e&&Proj4js.reportError("stere:forward:Equit"),e=this.akm1/e,s=e*a*h,e*=n;break;case this.OBLIQ:e=1+this.sinph0*n+this.cosph0*a*r,Proj4js.common.EPSLN>=e&&Proj4js.reportError("stere:forward:Obliq"),e=this.akm1/e,s=e*a*h,e*=this.cosph0*n-this.sinph0*a*r;break;case this.N_POLE:r=-r,o=-o;case this.S_POLE:Math.abs(o-Proj4js.common.HALF_PI)=l;l++)r*=n,h+=this.A[l]*r;for(var c,m,u=h,d=a,p=1,_=0,f=0,P=0,l=1;6>=l;l++)c=p*u-_*d,m=_*u+p*d,p=c,_=m,f=f+this.B_re[l]*p-this.B_im[l]*_,P=P+this.B_im[l]*p+this.B_re[l]*_;return t.x=P*this.a+this.x0,t.y=f*this.a+this.y0,t},inverse:function(t){for(var i,s,e=t.x,o=t.y,n=e-this.x0,a=o-this.y0,r=a/this.a,h=n/this.a,l=1,c=0,m=0,u=0,d=1;6>=d;d++)i=l*r-c*h,s=c*r+l*h,l=i,c=s,m=m+this.C_re[d]*l-this.C_im[d]*c,u=u+this.C_im[d]*l+this.C_re[d]*c;for(var p=0;this.iterations>p;p++){for(var _,f,P=m,y=u,g=r,L=h,d=2;6>=d;d++)_=P*m-y*u,f=y*m+P*u,P=_,y=f,g+=(d-1)*(this.B_re[d]*P-this.B_im[d]*y),L+=(d-1)*(this.B_im[d]*P+this.B_re[d]*y);P=1,y=0;for(var v=this.B_re[1],j=this.B_im[1],d=2;6>=d;d++)_=P*m-y*u,f=y*m+P*u,P=_,y=f,v+=d*(this.B_re[d]*P-this.B_im[d]*y),j+=d*(this.B_im[d]*P+this.B_re[d]*y);var M=v*v+j*j;m=(g*v+L*j)/M,u=(L*v-g*j)/M}for(var S=m,b=u,x=1,E=0,d=1;9>=d;d++)x*=S,E+=this.D[d]*x;var C=this.lat0+1e5*E*Proj4js.common.SEC_TO_RAD,w=this.long0+b;return t.x=w,t.y=C,t}},Proj4js.Proj.mill={init:function(){},forward:function(t){var i=t.x,s=t.y,e=Proj4js.common.adjust_lon(i-this.long0),o=this.x0+this.a*e,n=this.y0+1.25*this.a*Math.log(Math.tan(Proj4js.common.PI/4+s/2.5));return t.x=o,t.y=n,t},inverse:function(t){t.x-=this.x0,t.y-=this.y0;var i=Proj4js.common.adjust_lon(this.long0+t.x/this.a),s=2.5*(Math.atan(Math.exp(.8*t.y/this.a))-Proj4js.common.PI/4);return t.x=i,t.y=s,t}},Proj4js.Proj.gnom={init:function(){this.sin_p14=Math.sin(this.lat0),this.cos_p14=Math.cos(this.lat0),this.infinity_dist=1e3*this.a,this.rc=1},forward:function(t){var i,s,e,o,n,a,r,h,l=t.x,c=t.y;return e=Proj4js.common.adjust_lon(l-this.long0),i=Math.sin(c),s=Math.cos(c),o=Math.cos(e),a=this.sin_p14*i+this.cos_p14*s*o,n=1,a>0||Math.abs(a)<=Proj4js.common.EPSLN?(r=this.x0+this.a*n*s*Math.sin(e)/a,h=this.y0+this.a*n*(this.cos_p14*i-this.sin_p14*s*o)/a):(Proj4js.reportError("orthoFwdPointError"),r=this.x0+this.infinity_dist*s*Math.sin(e),h=this.y0+this.infinity_dist*(this.cos_p14*i-this.sin_p14*s*o)),t.x=r,t.y=h,t},inverse:function(t){var i,s,e,o,n,a;return t.x=(t.x-this.x0)/this.a,t.y=(t.y-this.y0)/this.a,t.x/=this.k0,t.y/=this.k0,(i=Math.sqrt(t.x*t.x+t.y*t.y))?(o=Math.atan2(i,this.rc),s=Math.sin(o),e=Math.cos(o),a=Proj4js.common.asinz(e*this.sin_p14+t.y*s*this.cos_p14/i),n=Math.atan2(t.x*s,i*this.cos_p14*e-t.y*this.sin_p14*s),n=Proj4js.common.adjust_lon(this.long0+n)):(a=this.phic0,n=0),t.x=n,t.y=a,t}},Proj4js.Proj.sinu={init:function(){this.sphere?(this.n=1,this.m=0,this.es=0,this.C_y=Math.sqrt((this.m+1)/this.n),this.C_x=this.C_y/(this.m+1)):this.en=Proj4js.common.pj_enfn(this.es)},forward:function(t){var i,s,e=t.x,o=t.y;if(e=Proj4js.common.adjust_lon(e-this.long0),this.sphere){if(this.m)for(var n=this.n*Math.sin(o),a=Proj4js.common.MAX_ITER;a;--a){var r=(this.m*o+Math.sin(o)-n)/(this.m+Math.cos(o));if(o-=r,Math.abs(r)o?(o=Math.sin(i),s=this.long0+t.x*Math.sqrt(1-this.es*o*o)/(this.a*Math.cos(i)),e=Proj4js.common.adjust_lon(s)):o-Proj4js.common.EPSLN=0?this.y0+Proj4js.common.PI*this.R*Math.tan(.5*a):this.y0+Proj4js.common.PI*this.R*-Math.tan(.5*a));var r=.5*Math.abs(Proj4js.common.PI/n-n/Proj4js.common.PI),h=r*r,l=Math.sin(a),c=Math.cos(a),m=c/(l+c-1),u=m*m,d=m*(2/l-1),p=d*d,_=Proj4js.common.PI*this.R*(r*(m-p)+Math.sqrt(h*(m-p)*(m-p)-(p+h)*(u-p)))/(p+h);return 0>n&&(_=-_),i=this.x0+_,_=Math.abs(_/(Proj4js.common.PI*this.R)),s=o>=0?this.y0+Proj4js.common.PI*this.R*Math.sqrt(1-_*_-2*r*_):this.y0-Proj4js.common.PI*this.R*Math.sqrt(1-_*_-2*r*_),t.x=i,t.y=s,t},inverse:function(t){var i,s,e,o,n,a,r,h,l,c,m,u,d;return t.x-=this.x0,t.y-=this.y0,m=Proj4js.common.PI*this.R,e=t.x/m,o=t.y/m,n=e*e+o*o,a=-Math.abs(o)*(1+n),r=a-2*o*o+e*e,h=-2*a+1+2*o*o+n*n,d=o*o/h+(2*r*r*r/h/h/h-9*a*r/h/h)/27,l=(a-r*r/3/h)/h,c=2*Math.sqrt(-l/3),m=3*d/l/c,Math.abs(m)>1&&(m=m>=0?1:-1),u=Math.acos(m)/3,s=t.y>=0?(-c*Math.cos(u+Proj4js.common.PI/3)-r/3/h)*Proj4js.common.PI:-(-c*Math.cos(u+Proj4js.common.PI/3)-r/3/h)*Proj4js.common.PI,Math.abs(e)0&&(e=2*Math.atan(o*Proj4js.common.srat(this.e*Math.sin(t.y),-.5*this.e))-Proj4js.common.HALF_PI,!(i>Math.abs(e-t.y)));--n)t.y=e;return n?(t.x=s,t.y=e,t):(Proj4js.reportError("gauss:inverse:convergence failed"),null)}},Proj4js.Proj.omerc={init:function(){this.mode||(this.mode=0),this.lon1||(this.lon1=0,this.mode=1),this.lon2||(this.lon2=0),this.lat2||(this.lat2=0);var t=this.b/this.a,i=1-Math.pow(t,2);Math.sqrt(i),this.sin_p20=Math.sin(this.lat0),this.cos_p20=Math.cos(this.lat0),this.con=1-this.es*this.sin_p20*this.sin_p20,this.com=Math.sqrt(1-i),this.bl=Math.sqrt(1+this.es*Math.pow(this.cos_p20,4)/(1-i)),this.al=this.a*this.bl*this.k0*this.com/this.con,Math.abs(this.lat0)0?this.lat0>=0?this.d+Math.sqrt(this.d*this.d-1):this.d-Math.sqrt(this.d*this.d-1):this.d,this.el=this.f*Math.pow(this.ts,this.bl)),0!=this.mode?(this.g=.5*(this.f-1/this.f),this.gama=Proj4js.common.asinz(Math.sin(this.alpha)/this.d),this.longc=this.longc-Proj4js.common.asinz(this.g*Math.tan(this.gama))/this.bl,this.con=Math.abs(this.lat0),this.con>Proj4js.common.EPSLN&&Math.abs(this.con-Proj4js.common.HALF_PI)>Proj4js.common.EPSLN?(this.singam=Math.sin(this.gama),this.cosgam=Math.cos(this.gama),this.sinaz=Math.sin(this.alpha),this.cosaz=Math.cos(this.alpha),this.u=this.lat0>=0?this.al/this.bl*Math.atan(Math.sqrt(this.d*this.d-1)/this.cosaz):-(this.al/this.bl)*Math.atan(Math.sqrt(this.d*this.d-1)/this.cosaz)):Proj4js.reportError("omerc:Init:DataError")):(this.sinphi=Math.sin(this.at1),this.ts1=Proj4js.common.tsfnz(this.e,this.lat1,this.sinphi),this.sinphi=Math.sin(this.lat2),this.ts2=Proj4js.common.tsfnz(this.e,this.lat2,this.sinphi),this.h=Math.pow(this.ts1,this.bl),this.l=Math.pow(this.ts2,this.bl),this.f=this.el/this.h,this.g=.5*(this.f-1/this.f),this.j=(this.el*this.el-this.l*this.h)/(this.el*this.el+this.l*this.h),this.p=(this.l-this.h)/(this.l+this.h),this.dlon=this.lon1-this.lon2,this.dlon<-Proj4js.common.PI&&(this.lon2=this.lon2-2*Proj4js.common.PI),this.dlon>Proj4js.common.PI&&(this.lon2=this.lon2+2*Proj4js.common.PI),this.dlon=this.lon1-this.lon2,this.longc=.5*(this.lon1+this.lon2)-Math.atan(this.j*Math.tan(.5*this.bl*this.dlon)/this.p)/this.bl,this.dlon=Proj4js.common.adjust_lon(this.lon1-this.longc),this.gama=Math.atan(Math.sin(this.bl*this.dlon)/this.g),this.alpha=Proj4js.common.asinz(this.d*Math.sin(this.gama)),Math.abs(this.lat1-this.lat2)<=Proj4js.common.EPSLN?Proj4js.reportError("omercInitDataError"):this.con=Math.abs(this.lat1),this.con<=Proj4js.common.EPSLN||Math.abs(this.con-Proj4js.common.HALF_PI)<=Proj4js.common.EPSLN?Proj4js.reportError("omercInitDataError"):Math.abs(Math.abs(this.lat0)-Proj4js.common.HALF_PI)<=Proj4js.common.EPSLN&&Proj4js.reportError("omercInitDataError"),this.singam=Math.sin(this.gam),this.cosgam=Math.cos(this.gam),this.sinaz=Math.sin(this.alpha),this.cosaz=Math.cos(this.alpha),this.u=this.lat0>=0?this.al/this.bl*Math.atan(Math.sqrt(this.d*this.d-1)/this.cosaz):-(this.al/this.bl)*Math.atan(Math.sqrt(this.d*this.d-1)/this.cosaz))},forward:function(t){var i,s,e,o,n,a,r,h,l,c,m,u=t.x,d=t.y;i=Math.sin(d),c=Proj4js.common.adjust_lon(u-this.longc),a=Math.sin(this.bl*c),Math.abs(Math.abs(d)-Proj4js.common.HALF_PI)>Proj4js.common.EPSLN?(m=Proj4js.common.tsfnz(this.e,d,i),o=this.el/Math.pow(m,this.bl),l=.5*(o-1/o),s=.5*(o+1/o),r=(l*this.singam-a*this.cosgam)/s,e=Math.cos(this.bl*c),1e-7>Math.abs(e)?n=this.al*this.bl*c:(n=this.al*Math.atan((l*this.cosgam+a*this.singam)/e)/this.bl,0>e&&(n+=Proj4js.common.PI*this.al/this.bl))):(r=d>=0?this.singam:-this.singam,n=this.al*d/this.bl),Math.abs(Math.abs(r)-1)<=Proj4js.common.EPSLN&&Proj4js.reportError("omercFwdInfinity"),h=.5*this.al*Math.log((1-r)/(1+r))/this.bl,n-=this.u;var p=this.x0+h*this.cosaz+n*this.sinaz,_=this.y0+n*this.cosaz-h*this.sinaz;return t.x=p,t.y=_,t},inverse:function(t){var i,s,e,o,n,a,r,h,l,c,m,u,d;return t.x-=this.x0,t.y-=this.y0,d=0,o=t.x*this.cosaz-t.y*this.sinaz,n=t.y*this.cosaz+t.x*this.sinaz,n+=this.u,a=Math.exp(-this.bl*o/this.al),r=.5*(a-1/a),s=.5*(a+1/a),l=Math.sin(this.bl*n/this.al),c=(l*this.cosgam+r*this.singam)/s,Math.abs(Math.abs(c)-1)<=Proj4js.common.EPSLN?(m=this.longc,u=c>=0?Proj4js.common.HALF_PI:-Proj4js.common.HALF_PI):(e=1/this.bl,h=Math.pow(this.el/Math.sqrt((1+c)/(1-c)),e),u=Proj4js.common.phi2z(this.e,h),i=this.longc-Math.atan2(r*this.cosgam-l*this.singam,e)/this.bl,m=Proj4js.common.adjust_lon(i)),t.x=m,t.y=u,t}},Proj4js.Proj.lcc={init:function(){if(this.lat2||(this.lat2=this.lat0),this.k0||(this.k0=1),Math.abs(this.lat1+this.lat2)Proj4js.common.EPSLN?Math.log(e/r)/Math.log(o/h):i,this.f0=e/(this.ns*Math.pow(o,this.ns)),this.rh=this.a*this.f0*Math.pow(l,this.ns),this.title||(this.title="Lambert Conformal Conic")},forward:function(t){var i=t.x,s=t.y;if(!(90>=s&&s>=-90&&180>=i&&i>=-180))return Proj4js.reportError("lcc:forward: llInputOutOfRange: "+i+" : "+s),null;var e,o,n=Math.abs(Math.abs(s)-Proj4js.common.HALF_PI);if(n>Proj4js.common.EPSLN)e=Proj4js.common.tsfnz(this.e,s,Math.sin(s)),o=this.a*this.f0*Math.pow(e,this.ns);else{if(n=s*this.ns,0>=n)return Proj4js.reportError("lcc:forward: No Projection"),null;o=0}var a=this.ns*Proj4js.common.adjust_lon(i-this.long0);return t.x=this.k0*o*Math.sin(a)+this.x0,t.y=this.k0*(this.rh-o*Math.cos(a))+this.y0,t},inverse:function(t){var i,s,e,o,n,a=(t.x-this.x0)/this.k0,r=this.rh-(t.y-this.y0)/this.k0;this.ns>0?(i=Math.sqrt(a*a+r*r),s=1):(i=-Math.sqrt(a*a+r*r),s=-1);var h=0;if(0!=i&&(h=Math.atan2(s*a,s*r)),0!=i||this.ns>0){if(s=1/this.ns,e=Math.pow(i/(this.a*this.f0),s),o=Proj4js.common.phi2z(this.e,e),-9999==o)return null}else o=-Proj4js.common.HALF_PI;return n=Proj4js.common.adjust_lon(h/this.ns+this.long0),t.x=n,t.y=o,t}},Proj4js.Proj.laea={S_POLE:1,N_POLE:2,EQUIT:3,OBLIQ:4,init:function(){var t=Math.abs(this.lat0);if(this.mode=Math.abs(t-Proj4js.common.HALF_PI)this.lat0?this.S_POLE:this.N_POLE:Math.abs(t)0){var i;switch(this.qp=Proj4js.common.qsfnz(this.e,1),this.mmf=.5/(1-this.es),this.apa=this.authset(this.es),this.mode){case this.N_POLE:case this.S_POLE:this.dd=1;break;case this.EQUIT:this.rq=Math.sqrt(.5*this.qp),this.dd=1/this.rq,this.xmf=1,this.ymf=.5*this.qp;break;case this.OBLIQ:this.rq=Math.sqrt(.5*this.qp),i=Math.sin(this.lat0),this.sinb1=Proj4js.common.qsfnz(this.e,i)/this.qp,this.cosb1=Math.sqrt(1-this.sinb1*this.sinb1),this.dd=Math.cos(this.lat0)/(Math.sqrt(1-this.es*i*i)*this.rq*this.cosb1),this.ymf=(this.xmf=this.rq)/this.dd,this.xmf*=this.dd}}else this.mode==this.OBLIQ&&(this.sinph0=Math.sin(this.lat0),this.cosph0=Math.cos(this.lat0))},forward:function(t){var i,s,e=t.x,o=t.y;if(e=Proj4js.common.adjust_lon(e-this.long0),this.sphere){var n,a,r;switch(r=Math.sin(o),a=Math.cos(o),n=Math.cos(e),this.mode){case this.OBLIQ:case this.EQUIT:if(s=this.mode==this.EQUIT?1+a*n:1+this.sinph0*r+this.cosph0*a*n,Proj4js.common.EPSLN>=s)return Proj4js.reportError("laea:fwd:y less than eps"),null;s=Math.sqrt(2/s),i=s*a*Math.sin(e),s*=this.mode==this.EQUIT?r:this.cosph0*r-this.sinph0*a*n;break;case this.N_POLE:n=-n;case this.S_POLE:if(Math.abs(o+this.phi0)=0?(i=(u=Math.sqrt(l))*h,s=n*(this.mode==this.S_POLE?u:-u)):i=s=0}}return t.x=this.a*i+this.x0,t.y=this.a*s+this.y0,t},inverse:function(t){t.x-=this.x0,t.y-=this.y0;var i,s,e=t.x/this.a,o=t.y/this.a;if(this.sphere){var n,a=0,r=0;if(n=Math.sqrt(e*e+o*o),s=.5*n,s>1)return Proj4js.reportError("laea:Inv:DataError"),null; +switch(s=2*Math.asin(s),(this.mode==this.OBLIQ||this.mode==this.EQUIT)&&(r=Math.sin(s),a=Math.cos(s)),this.mode){case this.EQUIT:s=Math.abs(n)<=Proj4js.common.EPSLN?0:Math.asin(o*r/n),e*=r,o=a*n;break;case this.OBLIQ:s=Math.abs(n)<=Proj4js.common.EPSLN?this.phi0:Math.asin(a*this.sinph0+o*r*this.cosph0/n),e*=r*this.cosph0,o=(a-Math.sin(s)*this.sinph0)*n;break;case this.N_POLE:o=-o,s=Proj4js.common.HALF_PI-s;break;case this.S_POLE:s-=Proj4js.common.HALF_PI}i=0!=o||this.mode!=this.EQUIT&&this.mode!=this.OBLIQ?Math.atan2(e,o):0}else{var h,l,c,m,u=0;switch(this.mode){case this.EQUIT:case this.OBLIQ:if(e/=this.dd,o*=this.dd,m=Math.sqrt(e*e+o*o),Proj4js.common.EPSLN>m)return t.x=0,t.y=this.phi0,t;l=2*Math.asin(.5*m/this.rq),h=Math.cos(l),e*=l=Math.sin(l),this.mode==this.OBLIQ?(u=h*this.sinb1+o*l*this.cosb1/m,c=this.qp*u,o=m*this.cosb1*h-o*this.sinb1*l):(u=o*l/m,c=this.qp*u,o=m*h);break;case this.N_POLE:o=-o;case this.S_POLE:if(c=e*e+o*o,!c)return t.x=0,t.y=this.phi0,t;u=1-c/this.qp,this.mode==this.S_POLE&&(u=-u)}i=Math.atan2(e,o),s=this.authlat(Math.asin(u),this.apa)}return t.x=Proj4js.common.adjust_lon(this.long0+i),t.y=s,t},P00:.3333333333333333,P01:.17222222222222222,P02:.10257936507936508,P10:.06388888888888888,P11:.0664021164021164,P20:.016415012942191543,authset:function(t){var i,s=[];return s[0]=t*this.P00,i=t*t,s[0]+=i*this.P01,s[1]=i*this.P10,i*=t,s[0]+=i*this.P02,s[1]+=i*this.P11,s[2]=i*this.P20,s},authlat:function(t,i){var s=t+t;return t+i[0]*Math.sin(s)+i[1]*Math.sin(s+s)+i[2]*Math.sin(s+s+s)}},Proj4js.Proj.aeqd={init:function(){this.sin_p12=Math.sin(this.lat0),this.cos_p12=Math.cos(this.lat0)},forward:function(t){var i=t.x;t.y;var s,e=Math.sin(t.y),o=Math.cos(t.y),n=Proj4js.common.adjust_lon(i-this.long0),a=Math.cos(n),r=this.sin_p12*e+this.cos_p12*o*a;if(Math.abs(Math.abs(r)-1)r)return Proj4js.reportError("aeqd:Fwd:PointError"),void 0}else{var h=Math.acos(r);s=h/Math.sin(h)}return t.x=this.x0+this.a*s*o*Math.sin(n),t.y=this.y0+this.a*s*(this.cos_p12*e-this.sin_p12*o*a),t},inverse:function(t){t.x-=this.x0,t.y-=this.y0;var i=Math.sqrt(t.x*t.x+t.y*t.y);if(i>2*Proj4js.common.HALF_PI*this.a)return Proj4js.reportError("aeqdInvDataError"),void 0;var s,e=i/this.a,o=Math.sin(e),n=Math.cos(e),a=this.long0;if(Math.abs(i)<=Proj4js.common.EPSLN)s=this.lat0;else{s=Proj4js.common.asinz(n*this.sin_p12+t.y*o*this.cos_p12/i);var r=Math.abs(this.lat0)-Proj4js.common.HALF_PI;Math.abs(r)<=Proj4js.common.EPSLN?a=this.lat0>=0?Proj4js.common.adjust_lon(this.long0+Math.atan2(t.x,-t.y)):Proj4js.common.adjust_lon(this.long0-Math.atan2(-t.x,t.y)):(r=n-this.sin_p12*Math.sin(s),Math.abs(r)=50&&Proj4js.reportError("moll:Fwd:IterationError")}o/=2,Proj4js.common.PI/2-Math.abs(s).999999999999&&(s=.999999999999);var i=Math.asin(s),e=Proj4js.common.adjust_lon(this.long0+t.x/(.900316316158*this.a*Math.cos(i)));-Proj4js.common.PI>e&&(e=-Proj4js.common.PI),e>Proj4js.common.PI&&(e=Proj4js.common.PI),s=(2*i+Math.sin(2*i))/Proj4js.common.PI,Math.abs(s)>1&&(s=1);var o=Math.asin(s);return t.x=e,t.y=o,t}},function(t,i,s){var e,o;typeof exports!=s+""?e=exports:(o=t.L,e={},e.noConflict=function(){return t.L=o,this},t.L=e),e.version="0.5.1",e.Util={extend:function(t){var i,s,e,o,n=Array.prototype.slice.call(arguments,1);for(s=0,e=n.length;e>s;s++){o=n[s]||{};for(i in o)o.hasOwnProperty(i)&&(t[i]=o[i])}return t},bind:function(t,i){var s=arguments.length>2?Array.prototype.slice.call(arguments,2):null;return function(){return t.apply(i,s||arguments)}},stamp:function(){var t=0,i="_leaflet_id";return function(s){return s[i]=s[i]||++t,s[i]}}(),limitExecByInterval:function(t,i,e){var o,n;return function a(){var r=arguments;return o?(n=!0,s):(o=!0,setTimeout(function(){o=!1,n&&(a.apply(e,r),n=!1)},i),t.apply(e,r),s)}},falseFn:function(){return!1},formatNum:function(t,i){var s=Math.pow(10,i||5);return Math.round(t*s)/s},splitWords:function(t){return t.replace(/^\s+|\s+$/g,"").split(/\s+/)},setOptions:function(t,i){return t.options=e.extend({},t.options,i),t.options},getParamString:function(t,i){var s=[];for(var e in t)t.hasOwnProperty(e)&&s.push(e+"="+t[e]);return(i&&-1!==i.indexOf("?")?"&":"?")+s.join("&")},template:function(t,i){return t.replace(/\{ *([\w_]+) *\}/g,function(t,s){var e=i[s];if(!i.hasOwnProperty(s))throw Error("No value provided for variable "+t);return e})},isArray:function(t){return"[object Array]"===Object.prototype.toString.call(t)},emptyImageUrl:"data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs="},function(){function i(i){var s,e,o=["webkit","moz","o","ms"];for(s=0;o.length>s&&!e;s++)e=t[o[s]+i];return e}function o(i){var s=+new Date,e=Math.max(0,16-(s-n));return n=s+e,t.setTimeout(i,e)}var n=0,a=t.requestAnimationFrame||i("RequestAnimationFrame")||o,r=t.cancelAnimationFrame||i("CancelAnimationFrame")||i("CancelRequestAnimationFrame")||function(i){t.clearTimeout(i)};e.Util.requestAnimFrame=function(i,n,r,h){return i=e.bind(i,n),r&&a===o?(i(),s):a.call(t,i,h)},e.Util.cancelAnimFrame=function(i){i&&r.call(t,i)}}(),e.extend=e.Util.extend,e.bind=e.Util.bind,e.stamp=e.Util.stamp,e.setOptions=e.Util.setOptions,e.Class=function(){},e.Class.extend=function(t){var i=function(){this.initialize&&this.initialize.apply(this,arguments),this._initHooks&&this.callInitHooks()},s=function(){};s.prototype=this.prototype;var o=new s;o.constructor=i,i.prototype=o;for(var n in this)this.hasOwnProperty(n)&&"prototype"!==n&&(i[n]=this[n]);t.statics&&(e.extend(i,t.statics),delete t.statics),t.includes&&(e.Util.extend.apply(null,[o].concat(t.includes)),delete t.includes),t.options&&o.options&&(t.options=e.extend({},o.options,t.options)),e.extend(o,t),o._initHooks=[];var a=this;return o.callInitHooks=function(){if(!this._initHooksCalled){a.prototype.callInitHooks&&a.prototype.callInitHooks.call(this),this._initHooksCalled=!0;for(var t=0,i=o._initHooks.length;i>t;t++)o._initHooks[t].call(this)}},i},e.Class.include=function(t){e.extend(this.prototype,t)},e.Class.mergeOptions=function(t){e.extend(this.prototype.options,t)},e.Class.addInitHook=function(t){var i=Array.prototype.slice.call(arguments,1),s="function"==typeof t?t:function(){this[t].apply(this,i)};this.prototype._initHooks=this.prototype._initHooks||[],this.prototype._initHooks.push(s)};var n="_leaflet_events";e.Mixin={},e.Mixin.Events={addEventListener:function(t,i,s){var o,a,r,h=this[n]=this[n]||{};if("object"==typeof t){for(o in t)t.hasOwnProperty(o)&&this.addEventListener(o,t[o],i);return this}for(t=e.Util.splitWords(t),a=0,r=t.length;r>a;a++)h[t[a]]=h[t[a]]||[],h[t[a]].push({action:i,context:s||this});return this},hasEventListeners:function(t){return n in this&&t in this[n]&&this[n][t].length>0},removeEventListener:function(t,i,s){var o,a,r,h,l,c=this[n];if("object"==typeof t){for(o in t)t.hasOwnProperty(o)&&this.removeEventListener(o,t[o],i);return this}for(t=e.Util.splitWords(t),a=0,r=t.length;r>a;a++)if(this.hasEventListeners(t[a]))for(h=c[t[a]],l=h.length-1;l>=0;l--)i&&h[l].action!==i||s&&h[l].context!==s||h.splice(l,1);return this},fireEvent:function(t,i){if(!this.hasEventListeners(t))return this;for(var s=e.extend({type:t,target:this},i),o=this[n][t].slice(),a=0,r=o.length;r>a;a++)o[a].action.call(o[a].context||this,s);return this}},e.Mixin.Events.on=e.Mixin.Events.addEventListener,e.Mixin.Events.off=e.Mixin.Events.removeEventListener,e.Mixin.Events.fire=e.Mixin.Events.fireEvent,function(){var o=!!t.ActiveXObject,n=o&&!t.XMLHttpRequest,a=o&&!i.querySelector,r=navigator.userAgent.toLowerCase(),h=-1!==r.indexOf("webkit"),l=-1!==r.indexOf("chrome"),c=-1!==r.indexOf("android"),m=-1!==r.search("android [23]"),u=typeof orientation!=s+"",d=t.navigator&&t.navigator.msPointerEnabled&&t.navigator.msMaxTouchPoints,p="devicePixelRatio"in t&&t.devicePixelRatio>1||"matchMedia"in t&&t.matchMedia("(min-resolution:144dpi)")&&t.matchMedia("(min-resolution:144dpi)").matches,_=i.documentElement,f=o&&"transition"in _.style,P="WebKitCSSMatrix"in t&&"m11"in new t.WebKitCSSMatrix,y="MozPerspective"in _.style,g="OTransition"in _.style,L=!t.L_DISABLE_3D&&(f||P||y||g),v=!t.L_NO_TOUCH&&function(){var t="ontouchstart";if(d||t in _)return!0;var s=i.createElement("div"),e=!1;return s.setAttribute?(s.setAttribute(t,"return;"),"function"==typeof s[t]&&(e=!0),s.removeAttribute(t),s=null,e):!1}();e.Browser={ie:o,ie6:n,ie7:a,webkit:h,android:c,android23:m,chrome:l,ie3d:f,webkit3d:P,gecko3d:y,opera3d:g,any3d:L,mobile:u,mobileWebkit:u&&h,mobileWebkit3d:u&&P,mobileOpera:u&&t.opera,touch:v,msTouch:d,retina:p}}(),e.Point=function(t,i,s){this.x=s?Math.round(t):t,this.y=s?Math.round(i):i},e.Point.prototype={clone:function(){return new e.Point(this.x,this.y)},add:function(t){return this.clone()._add(e.point(t))},_add:function(t){return this.x+=t.x,this.y+=t.y,this},subtract:function(t){return this.clone()._subtract(e.point(t))},_subtract:function(t){return this.x-=t.x,this.y-=t.y,this},divideBy:function(t){return this.clone()._divideBy(t)},_divideBy:function(t){return this.x/=t,this.y/=t,this},multiplyBy:function(t){return this.clone()._multiplyBy(t)},_multiplyBy:function(t){return this.x*=t,this.y*=t,this},round:function(){return this.clone()._round()},_round:function(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this},floor:function(){return this.clone()._floor()},_floor:function(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this},distanceTo:function(t){t=e.point(t);var i=t.x-this.x,s=t.y-this.y;return Math.sqrt(i*i+s*s)},equals:function(t){return t.x===this.x&&t.y===this.y},toString:function(){return"Point("+e.Util.formatNum(this.x)+", "+e.Util.formatNum(this.y)+")"}},e.point=function(t,i,s){return t instanceof e.Point?t:e.Util.isArray(t)?new e.Point(t[0],t[1]):isNaN(t)?t:new e.Point(t,i,s)},e.Bounds=function(t,i){if(t)for(var s=i?[t,i]:t,e=0,o=s.length;o>e;e++)this.extend(s[e])},e.Bounds.prototype={extend:function(t){return t=e.point(t),this.min||this.max?(this.min.x=Math.min(t.x,this.min.x),this.max.x=Math.max(t.x,this.max.x),this.min.y=Math.min(t.y,this.min.y),this.max.y=Math.max(t.y,this.max.y)):(this.min=t.clone(),this.max=t.clone()),this},getCenter:function(t){return new e.Point((this.min.x+this.max.x)/2,(this.min.y+this.max.y)/2,t)},getBottomLeft:function(){return new e.Point(this.min.x,this.max.y)},getTopRight:function(){return new e.Point(this.max.x,this.min.y)},getSize:function(){return this.max.subtract(this.min)},contains:function(t){var i,s;return t="number"==typeof t[0]||t instanceof e.Point?e.point(t):e.bounds(t),t instanceof e.Bounds?(i=t.min,s=t.max):i=s=t,i.x>=this.min.x&&s.x<=this.max.x&&i.y>=this.min.y&&s.y<=this.max.y},intersects:function(t){t=e.bounds(t);var i=this.min,s=this.max,o=t.min,n=t.max,a=n.x>=i.x&&o.x<=s.x,r=n.y>=i.y&&o.y<=s.y;return a&&r},isValid:function(){return!(!this.min||!this.max)}},e.bounds=function(t,i){return!t||t instanceof e.Bounds?t:new e.Bounds(t,i)},e.Transformation=function(t,i,s,e){this._a=t,this._b=i,this._c=s,this._d=e},e.Transformation.prototype={transform:function(t,i){return this._transform(t.clone(),i)},_transform:function(t,i){return i=i||1,t.x=i*(this._a*t.x+this._b),t.y=i*(this._c*t.y+this._d),t},untransform:function(t,i){return i=i||1,new e.Point((t.x/i-this._b)/this._a,(t.y/i-this._d)/this._c)}},e.DomUtil={get:function(t){return"string"==typeof t?i.getElementById(t):t},getStyle:function(t,s){var e=t.style[s];if(!e&&t.currentStyle&&(e=t.currentStyle[s]),(!e||"auto"===e)&&i.defaultView){var o=i.defaultView.getComputedStyle(t,null);e=o?o[s]:null}return"auto"===e?null:e},getViewportOffset:function(t){var s,o=0,n=0,a=t,r=i.body,h=e.Browser.ie7;do{if(o+=a.offsetTop||0,n+=a.offsetLeft||0,o+=parseInt(e.DomUtil.getStyle(a,"borderTopWidth"),10)||0,n+=parseInt(e.DomUtil.getStyle(a,"borderLeftWidth"),10)||0,s=e.DomUtil.getStyle(a,"position"),a.offsetParent===r&&"absolute"===s)break;if("fixed"===s){o+=r.scrollTop||0,n+=r.scrollLeft||0;break}a=a.offsetParent}while(a);a=t;do{if(a===r)break;o-=a.scrollTop||0,n-=a.scrollLeft||0,e.DomUtil.documentIsLtr()||!e.Browser.webkit&&!h||(n+=a.scrollWidth-a.clientWidth,h&&"hidden"!==e.DomUtil.getStyle(a,"overflow-y")&&"hidden"!==e.DomUtil.getStyle(a,"overflow")&&(n+=17)),a=a.parentNode}while(a);return new e.Point(n,o)},documentIsLtr:function(){return e.DomUtil._docIsLtrCached||(e.DomUtil._docIsLtrCached=!0,e.DomUtil._docIsLtr="ltr"===e.DomUtil.getStyle(i.body,"direction")),e.DomUtil._docIsLtr},create:function(t,s,e){var o=i.createElement(t);return o.className=s,e&&e.appendChild(o),o},disableTextSelection:function(){i.selection&&i.selection.empty&&i.selection.empty(),this._onselectstart||(this._onselectstart=i.onselectstart||null,i.onselectstart=e.Util.falseFn)},enableTextSelection:function(){i.onselectstart===e.Util.falseFn&&(i.onselectstart=this._onselectstart,this._onselectstart=null)},hasClass:function(t,i){return t.className.length>0&&RegExp("(^|\\s)"+i+"(\\s|$)").test(t.className)},addClass:function(t,i){e.DomUtil.hasClass(t,i)||(t.className+=(t.className?" ":"")+i)},removeClass:function(t,i){function s(t,s){return s===i?"":t}t.className=t.className.replace(/(\S+)\s*/g,s).replace(/(^\s+|\s+$)/,"")},setOpacity:function(t,i){if("opacity"in t.style)t.style.opacity=i;else if("filter"in t.style){var s=!1,e="DXImageTransform.Microsoft.Alpha";try{s=t.filters.item(e)}catch(o){}i=Math.round(100*i),s?(s.Enabled=100!==i,s.Opacity=i):t.style.filter+=" progid:"+e+"(opacity="+i+")"}},testProp:function(t){for(var s=i.documentElement.style,e=0;t.length>e;e++)if(t[e]in s)return t[e];return!1},getTranslateString:function(t){var i=e.Browser.webkit3d,s="translate"+(i?"3d":"")+"(",o=(i?",0":"")+")";return s+t.x+"px,"+t.y+"px"+o},getScaleString:function(t,i){var s=e.DomUtil.getTranslateString(i.add(i.multiplyBy(-1*t))),o=" scale("+t+") ";return s+o},setPosition:function(t,i,s){t._leaflet_pos=i,!s&&e.Browser.any3d?(t.style[e.DomUtil.TRANSFORM]=e.DomUtil.getTranslateString(i),e.Browser.mobileWebkit3d&&(t.style.WebkitBackfaceVisibility="hidden")):(t.style.left=i.x+"px",t.style.top=i.y+"px")},getPosition:function(t){return t._leaflet_pos}},e.DomUtil.TRANSFORM=e.DomUtil.testProp(["transform","WebkitTransform","OTransform","MozTransform","msTransform"]),e.DomUtil.TRANSITION=e.DomUtil.testProp(["webkitTransition","transition","OTransition","MozTransition","msTransition"]),e.DomUtil.TRANSITION_END="webkitTransition"===e.DomUtil.TRANSITION||"OTransition"===e.DomUtil.TRANSITION?e.DomUtil.TRANSITION+"End":"transitionend",e.LatLng=function(t,i){var s=parseFloat(t),e=parseFloat(i);if(isNaN(s)||isNaN(e))throw Error("Invalid LatLng object: ("+t+", "+i+")");this.lat=s,this.lng=e},e.extend(e.LatLng,{DEG_TO_RAD:Math.PI/180,RAD_TO_DEG:180/Math.PI,MAX_MARGIN:1e-9}),e.LatLng.prototype={equals:function(t){if(!t)return!1;t=e.latLng(t);var i=Math.max(Math.abs(this.lat-t.lat),Math.abs(this.lng-t.lng));return e.LatLng.MAX_MARGIN>=i},toString:function(t){return"LatLng("+e.Util.formatNum(this.lat,t)+", "+e.Util.formatNum(this.lng,t)+")"},distanceTo:function(t){t=e.latLng(t);var i=6378137,s=e.LatLng.DEG_TO_RAD,o=(t.lat-this.lat)*s,n=(t.lng-this.lng)*s,a=this.lat*s,r=t.lat*s,h=Math.sin(o/2),l=Math.sin(n/2),c=h*h+l*l*Math.cos(a)*Math.cos(r);return 2*i*Math.atan2(Math.sqrt(c),Math.sqrt(1-c))},wrap:function(t,i){var s=this.lng;return t=t||-180,i=i||180,s=(s+i)%(i-t)+(t>s||s===i?i:t),new e.LatLng(this.lat,s)}},e.latLng=function(t,i){return t instanceof e.LatLng?t:e.Util.isArray(t)?new e.LatLng(t[0],t[1]):isNaN(t)?t:new e.LatLng(t,i)},e.LatLngBounds=function(t,i){if(t)for(var s=i?[t,i]:t,e=0,o=s.length;o>e;e++)this.extend(s[e])},e.LatLngBounds.prototype={extend:function(t){return t="number"==typeof t[0]||"string"==typeof t[0]||t instanceof e.LatLng?e.latLng(t):e.latLngBounds(t),t instanceof e.LatLng?this._southWest||this._northEast?(this._southWest.lat=Math.min(t.lat,this._southWest.lat),this._southWest.lng=Math.min(t.lng,this._southWest.lng),this._northEast.lat=Math.max(t.lat,this._northEast.lat),this._northEast.lng=Math.max(t.lng,this._northEast.lng)):(this._southWest=new e.LatLng(t.lat,t.lng),this._northEast=new e.LatLng(t.lat,t.lng)):t instanceof e.LatLngBounds&&(this.extend(t._southWest),this.extend(t._northEast)),this},pad:function(t){var i=this._southWest,s=this._northEast,o=Math.abs(i.lat-s.lat)*t,n=Math.abs(i.lng-s.lng)*t;return new e.LatLngBounds(new e.LatLng(i.lat-o,i.lng-n),new e.LatLng(s.lat+o,s.lng+n))},getCenter:function(){return new e.LatLng((this._southWest.lat+this._northEast.lat)/2,(this._southWest.lng+this._northEast.lng)/2)},getSouthWest:function(){return this._southWest},getNorthEast:function(){return this._northEast},getNorthWest:function(){return new e.LatLng(this._northEast.lat,this._southWest.lng)},getSouthEast:function(){return new e.LatLng(this._southWest.lat,this._northEast.lng)},contains:function(t){t="number"==typeof t[0]||t instanceof e.LatLng?e.latLng(t):e.latLngBounds(t);var i,s,o=this._southWest,n=this._northEast;return t instanceof e.LatLngBounds?(i=t.getSouthWest(),s=t.getNorthEast()):i=s=t,i.lat>=o.lat&&s.lat<=n.lat&&i.lng>=o.lng&&s.lng<=n.lng},intersects:function(t){t=e.latLngBounds(t);var i=this._southWest,s=this._northEast,o=t.getSouthWest(),n=t.getNorthEast(),a=n.lat>=i.lat&&o.lat<=s.lat,r=n.lng>=i.lng&&o.lng<=s.lng;return a&&r},toBBoxString:function(){var t=this._southWest,i=this._northEast;return[t.lng,t.lat,i.lng,i.lat].join(",")},equals:function(t){return t?(t=e.latLngBounds(t),this._southWest.equals(t.getSouthWest())&&this._northEast.equals(t.getNorthEast())):!1},isValid:function(){return!(!this._southWest||!this._northEast)}},e.latLngBounds=function(t,i){return!t||t instanceof e.LatLngBounds?t:new e.LatLngBounds(t,i)},e.Projection={},e.Projection.SphericalMercator={MAX_LATITUDE:85.0511287798,project:function(t){var i=e.LatLng.DEG_TO_RAD,s=this.MAX_LATITUDE,o=Math.max(Math.min(s,t.lat),-s),n=t.lng*i,a=o*i;return a=Math.log(Math.tan(Math.PI/4+a/2)),new e.Point(n,a)},unproject:function(t){var i=e.LatLng.RAD_TO_DEG,s=t.x*i,o=(2*Math.atan(Math.exp(t.y))-Math.PI/2)*i;return new e.LatLng(o,s)}},e.Projection.LonLat={project:function(t){return new e.Point(t.lng,t.lat)},unproject:function(t){return new e.LatLng(t.y,t.x)}},e.CRS={latLngToPoint:function(t,i){var s=this.projection.project(t),e=this.scale(i);return this.transformation._transform(s,e)},pointToLatLng:function(t,i){var s=this.scale(i),e=this.transformation.untransform(t,s);return this.projection.unproject(e)},project:function(t){return this.projection.project(t)},scale:function(t){return 256*Math.pow(2,t)}},e.CRS.Simple=e.extend({},e.CRS,{projection:e.Projection.LonLat,transformation:new e.Transformation(1,0,-1,0),scale:function(t){return Math.pow(2,t)}}),e.CRS.EPSG3857=e.extend({},e.CRS,{code:"EPSG:3857",projection:e.Projection.SphericalMercator,transformation:new e.Transformation(.5/Math.PI,.5,-.5/Math.PI,.5),project:function(t){var i=this.projection.project(t),s=6378137;return i.multiplyBy(s)}}),e.CRS.EPSG900913=e.extend({},e.CRS.EPSG3857,{code:"EPSG:900913"}),e.CRS.EPSG4326=e.extend({},e.CRS,{code:"EPSG:4326",projection:e.Projection.LonLat,transformation:new e.Transformation(1/360,.5,-1/360,.5)}),e.Map=e.Class.extend({includes:e.Mixin.Events,options:{crs:e.CRS.EPSG3857,fadeAnimation:e.DomUtil.TRANSITION&&!e.Browser.android23,trackResize:!0,markerZoomAnimation:e.DomUtil.TRANSITION&&e.Browser.any3d},initialize:function(t,i){i=e.setOptions(this,i),this._initContainer(t),this._initLayout(),this.callInitHooks(),this._initEvents(),i.maxBounds&&this.setMaxBounds(i.maxBounds),i.center&&i.zoom!==s&&this.setView(e.latLng(i.center),i.zoom,!0),this._initLayers(i.layers)},setView:function(t,i){return this._resetView(e.latLng(t),this._limitZoom(i)),this},setZoom:function(t){return this.setView(this.getCenter(),t)},zoomIn:function(t){return this.setZoom(this._zoom+(t||1))},zoomOut:function(t){return this.setZoom(this._zoom-(t||1))},fitBounds:function(t){var i=this.getBoundsZoom(t);return this.setView(e.latLngBounds(t).getCenter(),i)},fitWorld:function(){var t=new e.LatLng(-60,-170),i=new e.LatLng(85,179);return this.fitBounds(new e.LatLngBounds(t,i))},panTo:function(t){return this.setView(t,this._zoom)},panBy:function(t){return this.fire("movestart"),this._rawPanBy(e.point(t)),this.fire("move"),this.fire("moveend")},setMaxBounds:function(t){if(t=e.latLngBounds(t),this.options.maxBounds=t,!t)return this._boundsMinZoom=null,this;var i=this.getBoundsZoom(t,!0);return this._boundsMinZoom=i,this._loaded&&(i>this._zoom?this.setView(t.getCenter(),i):this.panInsideBounds(t)),this},panInsideBounds:function(t){t=e.latLngBounds(t);var i=this.getBounds(),s=this.project(i.getSouthWest()),o=this.project(i.getNorthEast()),n=this.project(t.getSouthWest()),a=this.project(t.getNorthEast()),r=0,h=0;return o.ya.x&&(r=a.x-o.x),s.y>n.y&&(h=n.y-s.y),s.x=r);return m&&i?null:i?r:r-1},getSize:function(){return(!this._size||this._sizeChanged)&&(this._size=new e.Point(this._container.clientWidth,this._container.clientHeight),this._sizeChanged=!1),this._size.clone()},getPixelBounds:function(){var t=this._getTopLeftPoint();return new e.Bounds(t,t.add(this.getSize()))},getPixelOrigin:function(){return this._initialTopLeftPoint},getPanes:function(){return this._panes},getContainer:function(){return this._container},getZoomScale:function(t){var i=this.options.crs;return i.scale(t)/i.scale(this._zoom)},getScaleZoom:function(t){return this._zoom+Math.log(t)/Math.LN2},project:function(t,i){return i=i===s?this._zoom:i,this.options.crs.latLngToPoint(e.latLng(t),i)},unproject:function(t,i){return i=i===s?this._zoom:i,this.options.crs.pointToLatLng(e.point(t),i)},layerPointToLatLng:function(t){var i=e.point(t).add(this._initialTopLeftPoint);return this.unproject(i)},latLngToLayerPoint:function(t){var i=this.project(e.latLng(t))._round();return i._subtract(this._initialTopLeftPoint)},containerPointToLayerPoint:function(t){return e.point(t).subtract(this._getMapPanePos())},layerPointToContainerPoint:function(t){return e.point(t).add(this._getMapPanePos())},containerPointToLatLng:function(t){var i=this.containerPointToLayerPoint(e.point(t));return this.layerPointToLatLng(i)},latLngToContainerPoint:function(t){return this.layerPointToContainerPoint(this.latLngToLayerPoint(e.latLng(t)))},mouseEventToContainerPoint:function(t){return e.DomEvent.getMousePosition(t,this._container)},mouseEventToLayerPoint:function(t){return this.containerPointToLayerPoint(this.mouseEventToContainerPoint(t))},mouseEventToLatLng:function(t){return this.layerPointToLatLng(this.mouseEventToLayerPoint(t))},_initContainer:function(t){var i=this._container=e.DomUtil.get(t);if(i._leaflet)throw Error("Map container is already initialized.");i._leaflet=!0},_initLayout:function(){var t=this._container;e.DomUtil.addClass(t,"leaflet-container"),e.Browser.touch&&e.DomUtil.addClass(t,"leaflet-touch"),this.options.fadeAnimation&&e.DomUtil.addClass(t,"leaflet-fade-anim");var i=e.DomUtil.getStyle(t,"position");"absolute"!==i&&"relative"!==i&&"fixed"!==i&&(t.style.position="relative"),this._initPanes(),this._initControlPos&&this._initControlPos()},_initPanes:function(){var t=this._panes={};this._mapPane=t.mapPane=this._createPane("leaflet-map-pane",this._container),this._tilePane=t.tilePane=this._createPane("leaflet-tile-pane",this._mapPane),t.objectsPane=this._createPane("leaflet-objects-pane",this._mapPane),t.shadowPane=this._createPane("leaflet-shadow-pane"),t.overlayPane=this._createPane("leaflet-overlay-pane"),t.markerPane=this._createPane("leaflet-marker-pane"),t.popupPane=this._createPane("leaflet-popup-pane");var i=" leaflet-zoom-hide";this.options.markerZoomAnimation||(e.DomUtil.addClass(t.markerPane,i),e.DomUtil.addClass(t.shadowPane,i),e.DomUtil.addClass(t.popupPane,i))},_createPane:function(t,i){return e.DomUtil.create("div",t,i||this._panes.objectsPane)},_initLayers:function(t){t=t?e.Util.isArray(t)?t:[t]:[],this._layers={},this._zoomBoundLayers={},this._tileLayersNum=0;var i,s;for(i=0,s=t.length;s>i;i++)this.addLayer(t[i])},_resetView:function(t,i,s,o){var n=this._zoom!==i;o||(this.fire("movestart"),n&&this.fire("zoomstart")),this._zoom=i,this._initialTopLeftPoint=this._getNewTopLeftPoint(t),s?this._initialTopLeftPoint._add(this._getMapPanePos()):e.DomUtil.setPosition(this._mapPane,new e.Point(0,0)),this._tileLayersToLoad=this._tileLayersNum;var a=!this._loaded;this._loaded=!0,this.fire("viewreset",{hard:!s}),this.fire("move"),(n||o)&&this.fire("zoomend"),this.fire("moveend",{hard:!s}),a&&this.fire("load")},_rawPanBy:function(t){e.DomUtil.setPosition(this._mapPane,this._getMapPanePos().subtract(t))},_updateZoomLevels:function(){var t,i=1/0,e=-1/0;for(t in this._zoomBoundLayers)if(this._zoomBoundLayers.hasOwnProperty(t)){var o=this._zoomBoundLayers[t];isNaN(o.options.minZoom)||(i=Math.min(i,o.options.minZoom)),isNaN(o.options.maxZoom)||(e=Math.max(e,o.options.maxZoom))}t===s?this._layersMaxZoom=this._layersMinZoom=s:(this._layersMaxZoom=e,this._layersMinZoom=i)},_initEvents:function(){if(e.DomEvent){e.DomEvent.on(this._container,"click",this._onMouseClick,this);var i,s,o=["dblclick","mousedown","mouseup","mouseenter","mouseleave","mousemove","contextmenu"];for(i=0,s=o.length;s>i;i++)e.DomEvent.on(this._container,o[i],this._fireMouseEvent,this);this.options.trackResize&&e.DomEvent.on(t,"resize",this._onResize,this)}},_onResize:function(){e.Util.cancelAnimFrame(this._resizeRequest),this._resizeRequest=e.Util.requestAnimFrame(this.invalidateSize,this,!1,this._container)},_onMouseClick:function(t){!this._loaded||this.dragging&&this.dragging.moved()||(this.fire("preclick"),this._fireMouseEvent(t))},_fireMouseEvent:function(t){if(this._loaded){var i=t.type;if(i="mouseenter"===i?"mouseover":"mouseleave"===i?"mouseout":i,this.hasEventListeners(i)){"contextmenu"===i&&e.DomEvent.preventDefault(t);var s=this.mouseEventToContainerPoint(t),o=this.containerPointToLayerPoint(s),n=this.layerPointToLatLng(o);this.fire(i,{latlng:n,layerPoint:o,containerPoint:s,originalEvent:t})}}},_onTileLayerLoad:function(){this._tileLayersToLoad--,this._tileLayersNum&&!this._tileLayersToLoad&&this._tileBg&&(clearTimeout(this._clearTileBgTimer),this._clearTileBgTimer=setTimeout(e.bind(this._clearTileBg,this),500))},whenReady:function(t,i){return this._loaded?t.call(i||this,this):this.on("load",t,i),this},_getMapPanePos:function(){return e.DomUtil.getPosition(this._mapPane)},_getTopLeftPoint:function(){if(!this._loaded)throw Error("Set map center and zoom first.");return this._initialTopLeftPoint.subtract(this._getMapPanePos())},_getNewTopLeftPoint:function(t,i){var s=this.getSize()._divideBy(2);return this.project(t,i)._subtract(s)._round()},_latLngToNewLayerPoint:function(t,i,s){var e=this._getNewTopLeftPoint(s,i).add(this._getMapPanePos());return this.project(t,i)._subtract(e)},_getCenterLayerPoint:function(){return this.containerPointToLayerPoint(this.getSize()._divideBy(2))},_getCenterOffset:function(t){return this.latLngToLayerPoint(t).subtract(this._getCenterLayerPoint())},_limitZoom:function(t){var i=this.getMinZoom(),s=this.getMaxZoom();return Math.max(i,Math.min(s,t))}}),e.map=function(t,i){return new e.Map(t,i)},e.Projection.Mercator={MAX_LATITUDE:85.0840591556,R_MINOR:6356752.3142,R_MAJOR:6378137,project:function(t){var i=e.LatLng.DEG_TO_RAD,s=this.MAX_LATITUDE,o=Math.max(Math.min(s,t.lat),-s),n=this.R_MAJOR,a=this.R_MINOR,r=t.lng*i*n,h=o*i,l=a/n,c=Math.sqrt(1-l*l),m=c*Math.sin(h);m=Math.pow((1-m)/(1+m),.5*c);var u=Math.tan(.5*(.5*Math.PI-h))/m;return h=-a*Math.log(u),new e.Point(r,h)},unproject:function(t){for(var i,s=e.LatLng.RAD_TO_DEG,o=this.R_MAJOR,n=this.R_MINOR,a=t.x*s/o,r=n/o,h=Math.sqrt(1-r*r),l=Math.exp(-t.y/n),c=Math.PI/2-2*Math.atan(l),m=15,u=1e-7,d=m,p=.1;Math.abs(p)>u&&--d>0;)i=h*Math.sin(c),p=Math.PI/2-2*Math.atan(l*Math.pow((1-i)/(1+i),.5*h))-c,c+=p;return new e.LatLng(c*s,a)}},e.CRS.EPSG3395=e.extend({},e.CRS,{code:"EPSG:3395",projection:e.Projection.Mercator,transformation:function(){var t=e.Projection.Mercator,i=t.R_MAJOR,s=t.R_MINOR;return new e.Transformation(.5/(Math.PI*i),.5,-.5/(Math.PI*s),.5)}()}),e.TileLayer=e.Class.extend({includes:e.Mixin.Events,options:{minZoom:0,maxZoom:18,tileSize:256,subdomains:"abc",errorTileUrl:"",attribution:"",zoomOffset:0,opacity:1,unloadInvisibleTiles:e.Browser.mobile,updateWhenIdle:e.Browser.mobile},initialize:function(t,i){i=e.setOptions(this,i),i.detectRetina&&e.Browser.retina&&i.maxZoom>0&&(i.tileSize=Math.floor(i.tileSize/2),i.zoomOffset++,i.minZoom>0&&i.minZoom--,this.options.maxZoom--),this._url=t;var s=this.options.subdomains;"string"==typeof s&&(this.options.subdomains=s.split(""))},onAdd:function(t){this._map=t,this._initContainer(),this._createTileProto(),t.on({viewreset:this._resetCallback,moveend:this._update},this),this.options.updateWhenIdle||(this._limitedUpdate=e.Util.limitExecByInterval(this._update,150,this),t.on("move",this._limitedUpdate,this)),this._reset(),this._update()},addTo:function(t){return t.addLayer(this),this},onRemove:function(t){this._container.parentNode.removeChild(this._container),t.off({viewreset:this._resetCallback,moveend:this._update},this),this.options.updateWhenIdle||t.off("move",this._limitedUpdate,this),this._container=null,this._map=null +},bringToFront:function(){var t=this._map._panes.tilePane;return this._container&&(t.appendChild(this._container),this._setAutoZIndex(t,Math.max)),this},bringToBack:function(){var t=this._map._panes.tilePane;return this._container&&(t.insertBefore(this._container,t.firstChild),this._setAutoZIndex(t,Math.min)),this},getAttribution:function(){return this.options.attribution},setOpacity:function(t){return this.options.opacity=t,this._map&&this._updateOpacity(),this},setZIndex:function(t){return this.options.zIndex=t,this._updateZIndex(),this},setUrl:function(t,i){return this._url=t,i||this.redraw(),this},redraw:function(){return this._map&&(this._map._panes.tilePane.empty=!1,this._reset(!0),this._update()),this},_updateZIndex:function(){this._container&&this.options.zIndex!==s&&(this._container.style.zIndex=this.options.zIndex)},_setAutoZIndex:function(t,i){var s,e,o,n=t.children,a=-i(1/0,-1/0);for(e=0,o=n.length;o>e;e++)n[e]!==this._container&&(s=parseInt(n[e].style.zIndex,10),isNaN(s)||(a=i(a,s)));this.options.zIndex=this._container.style.zIndex=(isFinite(a)?a:0)+i(1,-1)},_updateOpacity:function(){e.DomUtil.setOpacity(this._container,this.options.opacity);var t,i=this._tiles;if(e.Browser.webkit)for(t in i)i.hasOwnProperty(t)&&(i[t].style.webkitTransform+=" translate(0,0)")},_initContainer:function(){var t=this._map._panes.tilePane;(!this._container||t.empty)&&(this._container=e.DomUtil.create("div","leaflet-layer"),this._updateZIndex(),t.appendChild(this._container),1>this.options.opacity&&this._updateOpacity())},_resetCallback:function(t){this._reset(t.hard)},_reset:function(t){var i=this._tiles;for(var s in i)i.hasOwnProperty(s)&&this.fire("tileunload",{tile:i[s]});this._tiles={},this._tilesToLoad=0,this.options.reuseTiles&&(this._unusedTiles=[]),t&&this._container&&(this._container.innerHTML=""),this._initContainer()},_update:function(){if(this._map){var t=this._map.getPixelBounds(),i=this._map.getZoom(),s=this.options.tileSize;if(!(i>this.options.maxZoom||this.options.minZoom>i)){var o=new e.Point(Math.floor(t.min.x/s),Math.floor(t.min.y/s)),n=new e.Point(Math.floor(t.max.x/s),Math.floor(t.max.y/s)),a=new e.Bounds(o,n);this._addTilesFromCenterOut(a),(this.options.unloadInvisibleTiles||this.options.reuseTiles)&&this._removeOtherTiles(a)}}},_addTilesFromCenterOut:function(t){var s,o,n,a=[],r=t.getCenter();for(s=t.min.y;t.max.y>=s;s++)for(o=t.min.x;t.max.x>=o;o++)n=new e.Point(o,s),this._tileShouldBeLoaded(n)&&a.push(n);var h=a.length;if(0!==h){a.sort(function(t,i){return t.distanceTo(r)-i.distanceTo(r)});var l=i.createDocumentFragment();for(this._tilesToLoad||this.fire("loading"),this._tilesToLoad+=h,o=0;h>o;o++)this._addTile(a[o],l);this._container.appendChild(l)}},_tileShouldBeLoaded:function(t){if(t.x+":"+t.y in this._tiles)return!1;if(!this.options.continuousWorld){var i=this._getWrapTileNum();if(this.options.noWrap&&(0>t.x||t.x>=i)||0>t.y||t.y>=i)return!1}return!0},_removeOtherTiles:function(t){var i,s,e,o;for(o in this._tiles)this._tiles.hasOwnProperty(o)&&(i=o.split(":"),s=parseInt(i[0],10),e=parseInt(i[1],10),(t.min.x>s||s>t.max.x||t.min.y>e||e>t.max.y)&&this._removeTile(o))},_removeTile:function(t){var i=this._tiles[t];this.fire("tileunload",{tile:i,url:i.src}),this.options.reuseTiles?(e.DomUtil.removeClass(i,"leaflet-tile-loaded"),this._unusedTiles.push(i)):i.parentNode===this._container&&this._container.removeChild(i),e.Browser.android||(i.src=e.Util.emptyImageUrl),delete this._tiles[t]},_addTile:function(t,i){var s=this._getTilePos(t),o=this._getTile();e.DomUtil.setPosition(o,s,e.Browser.chrome||e.Browser.android23),this._tiles[t.x+":"+t.y]=o,this._loadTile(o,t),o.parentNode!==this._container&&i.appendChild(o)},_getZoomForUrl:function(){var t=this.options,i=this._map.getZoom();return t.zoomReverse&&(i=t.maxZoom-i),i+t.zoomOffset},_getTilePos:function(t){var i=this._map.getPixelOrigin(),s=this.options.tileSize;return t.multiplyBy(s).subtract(i)},getTileUrl:function(t){return this._adjustTilePoint(t),e.Util.template(this._url,e.extend({s:this._getSubdomain(t),z:this._getZoomForUrl(),x:t.x,y:t.y},this.options))},_getWrapTileNum:function(){return Math.pow(2,this._getZoomForUrl())},_adjustTilePoint:function(t){var i=this._getWrapTileNum();this.options.continuousWorld||this.options.noWrap||(t.x=(t.x%i+i)%i),this.options.tms&&(t.y=i-t.y-1)},_getSubdomain:function(t){var i=(t.x+t.y)%this.options.subdomains.length;return this.options.subdomains[i]},_createTileProto:function(){var t=this._tileImg=e.DomUtil.create("img","leaflet-tile");t.style.width=t.style.height=this.options.tileSize+"px",t.galleryimg="no"},_getTile:function(){if(this.options.reuseTiles&&this._unusedTiles.length>0){var t=this._unusedTiles.pop();return this._resetTile(t),t}return this._createTile()},_resetTile:function(){},_createTile:function(){var t=this._tileImg.cloneNode(!1);return t.onselectstart=t.onmousemove=e.Util.falseFn,t},_loadTile:function(t,i){t._layer=this,t.onload=this._tileOnLoad,t.onerror=this._tileOnError,t.src=this.getTileUrl(i)},_tileLoaded:function(){this._tilesToLoad--,this._tilesToLoad||this.fire("load")},_tileOnLoad:function(){var t=this._layer;this.src!==e.Util.emptyImageUrl&&(e.DomUtil.addClass(this,"leaflet-tile-loaded"),t.fire("tileload",{tile:this,url:this.src})),t._tileLoaded()},_tileOnError:function(){var t=this._layer;t.fire("tileerror",{tile:this,url:this.src});var i=t.options.errorTileUrl;i&&(this.src=i),t._tileLoaded()}}),e.tileLayer=function(t,i){return new e.TileLayer(t,i)},e.TileLayer.WMS=e.TileLayer.extend({defaultWmsParams:{service:"WMS",request:"GetMap",version:"1.1.1",layers:"",styles:"",format:"image/jpeg",transparent:!1},initialize:function(t,i){this._url=t;var s=e.extend({},this.defaultWmsParams);s.width=s.height=i.detectRetina&&e.Browser.retina?2*this.options.tileSize:this.options.tileSize;for(var o in i)this.options.hasOwnProperty(o)||(s[o]=i[o]);this.wmsParams=s,e.setOptions(this,i)},onAdd:function(t){var i=parseFloat(this.wmsParams.version)>=1.3?"crs":"srs";this.wmsParams[i]=t.options.crs.code,e.TileLayer.prototype.onAdd.call(this,t)},getTileUrl:function(t,i){this._adjustTilePoint(t);var s=this._map,o=s.options.crs,n=this.options.tileSize,a=t.multiplyBy(n),r=a.add(new e.Point(n,n)),h=o.project(s.unproject(a,i)),l=o.project(s.unproject(r,i)),c=[h.x,l.y,l.x,h.y].join(","),m=e.Util.template(this._url,{s:this._getSubdomain(t)});return m+e.Util.getParamString(this.wmsParams,m)+"&bbox="+c},setParams:function(t,i){return e.extend(this.wmsParams,t),i||this.redraw(),this}}),e.tileLayer.wms=function(t,i){return new e.TileLayer.WMS(t,i)},e.TileLayer.Canvas=e.TileLayer.extend({options:{async:!1},initialize:function(t){e.setOptions(this,t)},redraw:function(){var t=this._tiles;for(var i in t)t.hasOwnProperty(i)&&this._redrawTile(t[i])},_redrawTile:function(t){this.drawTile(t,t._tilePoint,this._map._zoom)},_createTileProto:function(){var t=this._canvasProto=e.DomUtil.create("canvas","leaflet-tile");t.width=t.height=this.options.tileSize},_createTile:function(){var t=this._canvasProto.cloneNode(!1);return t.onselectstart=t.onmousemove=e.Util.falseFn,t},_loadTile:function(t,i){t._layer=this,t._tilePoint=i,this._redrawTile(t),this.options.async||this.tileDrawn(t)},drawTile:function(){},tileDrawn:function(t){this._tileOnLoad.call(t)}}),e.tileLayer.canvas=function(t){return new e.TileLayer.Canvas(t)},e.ImageOverlay=e.Class.extend({includes:e.Mixin.Events,options:{opacity:1},initialize:function(t,i,s){this._url=t,this._bounds=e.latLngBounds(i),e.setOptions(this,s)},onAdd:function(t){this._map=t,this._image||this._initImage(),t._panes.overlayPane.appendChild(this._image),t.on("viewreset",this._reset,this),t.options.zoomAnimation&&e.Browser.any3d&&t.on("zoomanim",this._animateZoom,this),this._reset()},onRemove:function(t){t.getPanes().overlayPane.removeChild(this._image),t.off("viewreset",this._reset,this),t.options.zoomAnimation&&t.off("zoomanim",this._animateZoom,this)},addTo:function(t){return t.addLayer(this),this},setOpacity:function(t){return this.options.opacity=t,this._updateOpacity(),this},bringToFront:function(){return this._image&&this._map._panes.overlayPane.appendChild(this._image),this},bringToBack:function(){var t=this._map._panes.overlayPane;return this._image&&t.insertBefore(this._image,t.firstChild),this},_initImage:function(){this._image=e.DomUtil.create("img","leaflet-image-layer"),this._map.options.zoomAnimation&&e.Browser.any3d?e.DomUtil.addClass(this._image,"leaflet-zoom-animated"):e.DomUtil.addClass(this._image,"leaflet-zoom-hide"),this._updateOpacity(),e.extend(this._image,{galleryimg:"no",onselectstart:e.Util.falseFn,onmousemove:e.Util.falseFn,onload:e.bind(this._onImageLoad,this),src:this._url})},_animateZoom:function(t){var i=this._map,s=this._image,o=i.getZoomScale(t.zoom),n=this._bounds.getNorthWest(),a=this._bounds.getSouthEast(),r=i._latLngToNewLayerPoint(n,t.zoom,t.center),h=i._latLngToNewLayerPoint(a,t.zoom,t.center)._subtract(r),l=r._add(h._multiplyBy(.5*(1-1/o)));s.style[e.DomUtil.TRANSFORM]=e.DomUtil.getTranslateString(l)+" scale("+o+") "},_reset:function(){var t=this._image,i=this._map.latLngToLayerPoint(this._bounds.getNorthWest()),s=this._map.latLngToLayerPoint(this._bounds.getSouthEast())._subtract(i);e.DomUtil.setPosition(t,i),t.style.width=s.x+"px",t.style.height=s.y+"px"},_onImageLoad:function(){this.fire("load")},_updateOpacity:function(){e.DomUtil.setOpacity(this._image,this.options.opacity)}}),e.imageOverlay=function(t,i,s){return new e.ImageOverlay(t,i,s)},e.Icon=e.Class.extend({options:{className:""},initialize:function(t){e.setOptions(this,t)},createIcon:function(){return this._createIcon("icon")},createShadow:function(){return this._createIcon("shadow")},_createIcon:function(t){var i=this._getIconUrl(t);if(!i){if("icon"===t)throw Error("iconUrl not set in Icon options (see the docs).");return null}var s=this._createImg(i);return this._setIconStyles(s,t),s},_setIconStyles:function(t,i){var s,o=this.options,n=e.point(o[i+"Size"]);s="shadow"===i?e.point(o.shadowAnchor||o.iconAnchor):e.point(o.iconAnchor),!s&&n&&(s=n.divideBy(2,!0)),t.className="leaflet-marker-"+i+" "+o.className,s&&(t.style.marginLeft=-s.x+"px",t.style.marginTop=-s.y+"px"),n&&(t.style.width=n.x+"px",t.style.height=n.y+"px")},_createImg:function(t){var s;return e.Browser.ie6?(s=i.createElement("div"),s.style.filter='progid:DXImageTransform.Microsoft.AlphaImageLoader(src="'+t+'")'):(s=i.createElement("img"),s.src=t),s},_getIconUrl:function(t){return e.Browser.retina&&this.options[t+"RetinaUrl"]?this.options[t+"RetinaUrl"]:this.options[t+"Url"]}}),e.icon=function(t){return new e.Icon(t)},e.Icon.Default=e.Icon.extend({options:{iconSize:new e.Point(25,41),iconAnchor:new e.Point(12,41),popupAnchor:new e.Point(1,-34),shadowSize:new e.Point(41,41)},_getIconUrl:function(t){var i=t+"Url";if(this.options[i])return this.options[i];e.Browser.retina&&"icon"===t&&(t+="@2x");var s=e.Icon.Default.imagePath;if(!s)throw Error("Couldn't autodetect L.Icon.Default.imagePath, set it manually.");return "marker-"+t+".png"}}),e.Icon.Default.imagePath=function(){var t,s,e,o,n=i.getElementsByTagName("script"),a=/\/?leaflet[\-\._]?([\w\-\._]*)\.js\??/;for(t=0,s=n.length;s>t;t++)if(e=n[t].src,o=e.match(a))return e.split(a)[0]+""}(),e.Marker=e.Class.extend({includes:e.Mixin.Events,options:{icon:new e.Icon.Default,title:"",clickable:!0,draggable:!1,zIndexOffset:0,opacity:1,riseOnHover:!1,riseOffset:250},initialize:function(t,i){e.setOptions(this,i),this._latlng=e.latLng(t)},onAdd:function(t){this._map=t,t.on("viewreset",this.update,this),this._initIcon(),this.update(),t.options.zoomAnimation&&t.options.markerZoomAnimation&&t.on("zoomanim",this._animateZoom,this)},addTo:function(t){return t.addLayer(this),this},onRemove:function(t){this._removeIcon(),this.fire("remove"),t.off({viewreset:this.update,zoomanim:this._animateZoom},this),this._map=null},getLatLng:function(){return this._latlng},setLatLng:function(t){return this._latlng=e.latLng(t),this.update(),this.fire("move",{latlng:this._latlng})},setZIndexOffset:function(t){return this.options.zIndexOffset=t,this.update(),this},setIcon:function(t){return this._map&&this._removeIcon(),this.options.icon=t,this._map&&(this._initIcon(),this.update()),this},update:function(){if(this._icon){var t=this._map.latLngToLayerPoint(this._latlng).round();this._setPos(t)}return this},_initIcon:function(){var t=this.options,i=this._map,s=i.options.zoomAnimation&&i.options.markerZoomAnimation,o=s?"leaflet-zoom-animated":"leaflet-zoom-hide",n=!1;this._icon||(this._icon=t.icon.createIcon(),t.title&&(this._icon.title=t.title),this._initInteraction(),n=1>this.options.opacity,e.DomUtil.addClass(this._icon,o),t.riseOnHover&&e.DomEvent.on(this._icon,"mouseover",this._bringToFront,this).on(this._icon,"mouseout",this._resetZIndex,this)),this._shadow||(this._shadow=t.icon.createShadow(),this._shadow&&(e.DomUtil.addClass(this._shadow,o),n=1>this.options.opacity)),n&&this._updateOpacity();var a=this._map._panes;a.markerPane.appendChild(this._icon),this._shadow&&a.shadowPane.appendChild(this._shadow)},_removeIcon:function(){var t=this._map._panes;this.options.riseOnHover&&e.DomEvent.off(this._icon,"mouseover",this._bringToFront).off(this._icon,"mouseout",this._resetZIndex),t.markerPane.removeChild(this._icon),this._shadow&&t.shadowPane.removeChild(this._shadow),this._icon=this._shadow=null},_setPos:function(t){e.DomUtil.setPosition(this._icon,t),this._shadow&&e.DomUtil.setPosition(this._shadow,t),this._zIndex=t.y+this.options.zIndexOffset,this._resetZIndex()},_updateZIndex:function(t){this._icon.style.zIndex=this._zIndex+t},_animateZoom:function(t){var i=this._map._latLngToNewLayerPoint(this._latlng,t.zoom,t.center);this._setPos(i)},_initInteraction:function(){if(this.options.clickable){var t=this._icon,i=["dblclick","mousedown","mouseover","mouseout","contextmenu"];e.DomUtil.addClass(t,"leaflet-clickable"),e.DomEvent.on(t,"click",this._onMouseClick,this);for(var s=0;i.length>s;s++)e.DomEvent.on(t,i[s],this._fireMouseEvent,this);e.Handler.MarkerDrag&&(this.dragging=new e.Handler.MarkerDrag(this),this.options.draggable&&this.dragging.enable())}},_onMouseClick:function(t){var i=this.dragging&&this.dragging.moved();(this.hasEventListeners(t.type)||i)&&e.DomEvent.stopPropagation(t),i||(this.dragging&&this.dragging._enabled||!this._map.dragging||!this._map.dragging.moved())&&this.fire(t.type,{originalEvent:t})},_fireMouseEvent:function(t){this.fire(t.type,{originalEvent:t}),"contextmenu"===t.type&&this.hasEventListeners(t.type)&&e.DomEvent.preventDefault(t),"mousedown"!==t.type&&e.DomEvent.stopPropagation(t)},setOpacity:function(t){this.options.opacity=t,this._map&&this._updateOpacity()},_updateOpacity:function(){e.DomUtil.setOpacity(this._icon,this.options.opacity),this._shadow&&e.DomUtil.setOpacity(this._shadow,this.options.opacity)},_bringToFront:function(){this._updateZIndex(this.options.riseOffset)},_resetZIndex:function(){this._updateZIndex(0)}}),e.marker=function(t,i){return new e.Marker(t,i)},e.DivIcon=e.Icon.extend({options:{iconSize:new e.Point(12,12),className:"leaflet-div-icon"},createIcon:function(){var t=i.createElement("div"),s=this.options;return s.html&&(t.innerHTML=s.html),s.bgPos&&(t.style.backgroundPosition=-s.bgPos.x+"px "+-s.bgPos.y+"px"),this._setIconStyles(t,"icon"),t},createShadow:function(){return null}}),e.divIcon=function(t){return new e.DivIcon(t)},e.Map.mergeOptions({closePopupOnClick:!0}),e.Popup=e.Class.extend({includes:e.Mixin.Events,options:{minWidth:50,maxWidth:300,maxHeight:null,autoPan:!0,closeButton:!0,offset:new e.Point(0,6),autoPanPadding:new e.Point(5,5),className:"",zoomAnimation:!0},initialize:function(t,i){e.setOptions(this,t),this._source=i,this._animated=e.Browser.any3d&&this.options.zoomAnimation},onAdd:function(t){this._map=t,this._container||this._initLayout(),this._updateContent();var i=t.options.fadeAnimation;i&&e.DomUtil.setOpacity(this._container,0),t._panes.popupPane.appendChild(this._container),t.on("viewreset",this._updatePosition,this),this._animated&&t.on("zoomanim",this._zoomAnimation,this),t.options.closePopupOnClick&&t.on("preclick",this._close,this),this._update(),i&&e.DomUtil.setOpacity(this._container,1)},addTo:function(t){return t.addLayer(this),this},openOn:function(t){return t.openPopup(this),this},onRemove:function(t){t._panes.popupPane.removeChild(this._container),e.Util.falseFn(this._container.offsetWidth),t.off({viewreset:this._updatePosition,preclick:this._close,zoomanim:this._zoomAnimation},this),t.options.fadeAnimation&&e.DomUtil.setOpacity(this._container,0),this._map=null},setLatLng:function(t){return this._latlng=e.latLng(t),this._update(),this},setContent:function(t){return this._content=t,this._update(),this},_close:function(){var t=this._map;t&&(t._popup=null,t.removeLayer(this).fire("popupclose",{popup:this}))},_initLayout:function(){var t,i="leaflet-popup",s=i+" "+this.options.className+" leaflet-zoom-"+(this._animated?"animated":"hide"),o=this._container=e.DomUtil.create("div",s);this.options.closeButton&&(t=this._closeButton=e.DomUtil.create("a",i+"-close-button",o),t.href="#close",t.innerHTML="×",e.DomEvent.on(t,"click",this._onCloseButtonClick,this));var n=this._wrapper=e.DomUtil.create("div",i+"-content-wrapper",o);e.DomEvent.disableClickPropagation(n),this._contentNode=e.DomUtil.create("div",i+"-content",n),e.DomEvent.on(this._contentNode,"mousewheel",e.DomEvent.stopPropagation),this._tipContainer=e.DomUtil.create("div",i+"-tip-container",o),this._tip=e.DomUtil.create("div",i+"-tip",this._tipContainer)},_update:function(){this._map&&(this._container.style.visibility="hidden",this._updateContent(),this._updateLayout(),this._updatePosition(),this._container.style.visibility="",this._adjustPan())},_updateContent:function(){if(this._content){if("string"==typeof this._content)this._contentNode.innerHTML=this._content;else{for(;this._contentNode.hasChildNodes();)this._contentNode.removeChild(this._contentNode.firstChild);this._contentNode.appendChild(this._content)}this.fire("contentupdate")}},_updateLayout:function(){var t=this._contentNode,i=t.style;i.width="",i.whiteSpace="nowrap";var s=t.offsetWidth;s=Math.min(s,this.options.maxWidth),s=Math.max(s,this.options.minWidth),i.width=s+1+"px",i.whiteSpace="",i.height="";var o=t.offsetHeight,n=this.options.maxHeight,a="leaflet-popup-scrolled";n&&o>n?(i.height=n+"px",e.DomUtil.addClass(t,a)):e.DomUtil.removeClass(t,a),this._containerWidth=this._container.offsetWidth},_updatePosition:function(){if(this._map){var t=this._map.latLngToLayerPoint(this._latlng),i=this._animated,s=this.options.offset;i&&e.DomUtil.setPosition(this._container,t),this._containerBottom=-s.y-(i?0:t.y),this._containerLeft=-Math.round(this._containerWidth/2)+s.x+(i?0:t.x),this._container.style.bottom=this._containerBottom+"px",this._container.style.left=this._containerLeft+"px"}},_zoomAnimation:function(t){var i=this._map._latLngToNewLayerPoint(this._latlng,t.zoom,t.center);e.DomUtil.setPosition(this._container,i)},_adjustPan:function(){if(this.options.autoPan){var t=this._map,i=this._container.offsetHeight,s=this._containerWidth,o=new e.Point(this._containerLeft,-i-this._containerBottom);this._animated&&o._add(e.DomUtil.getPosition(this._container));var n=t.layerPointToContainerPoint(o),a=this.options.autoPanPadding,r=t.getSize(),h=0,l=0;0>n.x&&(h=n.x-a.x),n.x+s>r.x&&(h=n.x+s-r.x+a.x),0>n.y&&(l=n.y-a.y),n.y+i>r.y&&(l=n.y+i-r.y+a.y),(h||l)&&t.panBy(new e.Point(h,l))}},_onCloseButtonClick:function(t){this._close(),e.DomEvent.stop(t)}}),e.popup=function(t,i){return new e.Popup(t,i)},e.Marker.include({openPopup:function(){return this._popup&&this._map&&(this._popup.setLatLng(this._latlng),this._map.openPopup(this._popup)),this},closePopup:function(){return this._popup&&this._popup._close(),this},bindPopup:function(t,i){var s=e.point(this.options.icon.options.popupAnchor)||new e.Point(0,0);return s=s.add(e.Popup.prototype.options.offset),i&&i.offset&&(s=s.add(i.offset)),i=e.extend({offset:s},i),this._popup||this.on("click",this.openPopup,this).on("remove",this.closePopup,this).on("move",this._movePopup,this),this._popup=new e.Popup(i,this).setContent(t),this},unbindPopup:function(){return this._popup&&(this._popup=null,this.off("click",this.openPopup).off("remove",this.closePopup).off("move",this._movePopup)),this},_movePopup:function(t){this._popup.setLatLng(t.latlng)}}),e.Map.include({openPopup:function(t){return this.closePopup(),this._popup=t,this.addLayer(t).fire("popupopen",{popup:this._popup})},closePopup:function(){return this._popup&&this._popup._close(),this}}),e.LayerGroup=e.Class.extend({initialize:function(t){this._layers={};var i,s;if(t)for(i=0,s=t.length;s>i;i++)this.addLayer(t[i])},addLayer:function(t){var i=e.stamp(t);return this._layers[i]=t,this._map&&this._map.addLayer(t),this},removeLayer:function(t){var i=e.stamp(t);return delete this._layers[i],this._map&&this._map.removeLayer(t),this},clearLayers:function(){return this.eachLayer(this.removeLayer,this),this},invoke:function(t){var i,s,e=Array.prototype.slice.call(arguments,1);for(i in this._layers)this._layers.hasOwnProperty(i)&&(s=this._layers[i],s[t]&&s[t].apply(s,e));return this},onAdd:function(t){this._map=t,this.eachLayer(t.addLayer,t)},onRemove:function(t){this.eachLayer(t.removeLayer,t),this._map=null},addTo:function(t){return t.addLayer(this),this},eachLayer:function(t,i){for(var s in this._layers)this._layers.hasOwnProperty(s)&&t.call(i,this._layers[s])},setZIndex:function(t){return this.invoke("setZIndex",t)}}),e.layerGroup=function(t){return new e.LayerGroup(t)},e.FeatureGroup=e.LayerGroup.extend({includes:e.Mixin.Events,statics:{EVENTS:"click dblclick mouseover mouseout mousemove contextmenu"},addLayer:function(t){return this._layers[e.stamp(t)]?this:(t.on(e.FeatureGroup.EVENTS,this._propagateEvent,this),e.LayerGroup.prototype.addLayer.call(this,t),this._popupContent&&t.bindPopup&&t.bindPopup(this._popupContent,this._popupOptions),this.fire("layeradd",{layer:t}))},removeLayer:function(t){return t.off(e.FeatureGroup.EVENTS,this._propagateEvent,this),e.LayerGroup.prototype.removeLayer.call(this,t),this._popupContent&&this.invoke("unbindPopup"),this.fire("layerremove",{layer:t})},bindPopup:function(t,i){return this._popupContent=t,this._popupOptions=i,this.invoke("bindPopup",t,i)},setStyle:function(t){return this.invoke("setStyle",t)},bringToFront:function(){return this.invoke("bringToFront")},bringToBack:function(){return this.invoke("bringToBack")},getBounds:function(){var t=new e.LatLngBounds;return this.eachLayer(function(i){t.extend(i instanceof e.Marker?i.getLatLng():i.getBounds())}),t},_propagateEvent:function(t){t.layer=t.target,t.target=this,this.fire(t.type,t)}}),e.featureGroup=function(t){return new e.FeatureGroup(t)},e.Path=e.Class.extend({includes:[e.Mixin.Events],statics:{CLIP_PADDING:e.Browser.mobile?Math.max(0,Math.min(.5,(1280/Math.max(t.innerWidth,t.innerHeight)-1)/2)):.5},options:{stroke:!0,color:"#0033ff",dashArray:null,weight:5,opacity:.5,fill:!1,fillColor:null,fillOpacity:.2,clickable:!0},initialize:function(t){e.setOptions(this,t)},onAdd:function(t){this._map=t,this._container||(this._initElements(),this._initEvents()),this.projectLatlngs(),this._updatePath(),this._container&&this._map._pathRoot.appendChild(this._container),this.fire("add"),t.on({viewreset:this.projectLatlngs,moveend:this._updatePath},this)},addTo:function(t){return t.addLayer(this),this},onRemove:function(t){t._pathRoot.removeChild(this._container),this.fire("remove"),this._map=null,e.Browser.vml&&(this._container=null,this._stroke=null,this._fill=null),t.off({viewreset:this.projectLatlngs,moveend:this._updatePath},this)},projectLatlngs:function(){},setStyle:function(t){return e.setOptions(this,t),this._container&&this._updateStyle(),this},redraw:function(){return this._map&&(this.projectLatlngs(),this._updatePath()),this}}),e.Map.include({_updatePathViewport:function(){var t=e.Path.CLIP_PADDING,i=this.getSize(),s=e.DomUtil.getPosition(this._mapPane),o=s.multiplyBy(-1)._subtract(i.multiplyBy(t)._round()),n=o.add(i.multiplyBy(1+2*t)._round());this._pathViewport=new e.Bounds(o,n)}}),e.Path.SVG_NS="http://www.w3.org/2000/svg",e.Browser.svg=!(!i.createElementNS||!i.createElementNS(e.Path.SVG_NS,"svg").createSVGRect),e.Path=e.Path.extend({statics:{SVG:e.Browser.svg},bringToFront:function(){var t=this._map._pathRoot,i=this._container;return i&&t.lastChild!==i&&t.appendChild(i),this},bringToBack:function(){var t=this._map._pathRoot,i=this._container,s=t.firstChild;return i&&s!==i&&t.insertBefore(i,s),this},getPathString:function(){},_createElement:function(t){return i.createElementNS(e.Path.SVG_NS,t)},_initElements:function(){this._map._initPathRoot(),this._initPath(),this._initStyle()},_initPath:function(){this._container=this._createElement("g"),this._path=this._createElement("path"),this._container.appendChild(this._path)},_initStyle:function(){this.options.stroke&&(this._path.setAttribute("stroke-linejoin","round"),this._path.setAttribute("stroke-linecap","round")),this.options.fill&&this._path.setAttribute("fill-rule","evenodd"),this._updateStyle()},_updateStyle:function(){this.options.stroke?(this._path.setAttribute("stroke",this.options.color),this._path.setAttribute("stroke-opacity",this.options.opacity),this._path.setAttribute("stroke-width",this.options.weight),this.options.dashArray?this._path.setAttribute("stroke-dasharray",this.options.dashArray):this._path.removeAttribute("stroke-dasharray")):this._path.setAttribute("stroke","none"),this.options.fill?(this._path.setAttribute("fill",this.options.fillColor||this.options.color),this._path.setAttribute("fill-opacity",this.options.fillOpacity)):this._path.setAttribute("fill","none")},_updatePath:function(){var t=this.getPathString();t||(t="M0 0"),this._path.setAttribute("d",t)},_initEvents:function(){if(this.options.clickable){(e.Browser.svg||!e.Browser.vml)&&this._path.setAttribute("class","leaflet-clickable"),e.DomEvent.on(this._container,"click",this._onMouseClick,this);for(var t=["dblclick","mousedown","mouseover","mouseout","mousemove","contextmenu"],i=0;t.length>i;i++)e.DomEvent.on(this._container,t[i],this._fireMouseEvent,this)}},_onMouseClick:function(t){this._map.dragging&&this._map.dragging.moved()||this._fireMouseEvent(t)},_fireMouseEvent:function(t){if(this.hasEventListeners(t.type)){var i=this._map,s=i.mouseEventToContainerPoint(t),o=i.containerPointToLayerPoint(s),n=i.layerPointToLatLng(o);this.fire(t.type,{latlng:n,layerPoint:o,containerPoint:s,originalEvent:t}),"contextmenu"===t.type&&e.DomEvent.preventDefault(t),"mousemove"!==t.type&&e.DomEvent.stopPropagation(t)}}}),e.Map.include({_initPathRoot:function(){this._pathRoot||(this._pathRoot=e.Path.prototype._createElement("svg"),this._panes.overlayPane.appendChild(this._pathRoot),this.options.zoomAnimation&&e.Browser.any3d?(this._pathRoot.setAttribute("class"," leaflet-zoom-animated"),this.on({zoomanim:this._animatePathZoom,zoomend:this._endPathZoom})):this._pathRoot.setAttribute("class"," leaflet-zoom-hide"),this.on("moveend",this._updateSvgViewport),this._updateSvgViewport())},_animatePathZoom:function(t){var i=this.getZoomScale(t.zoom),s=this._getCenterOffset(t.center)._multiplyBy(-i)._add(this._pathViewport.min);this._pathRoot.style[e.DomUtil.TRANSFORM]=e.DomUtil.getTranslateString(s)+" scale("+i+") ",this._pathZooming=!0},_endPathZoom:function(){this._pathZooming=!1},_updateSvgViewport:function(){if(!this._pathZooming){this._updatePathViewport();var t=this._pathViewport,i=t.min,s=t.max,o=s.x-i.x,n=s.y-i.y,a=this._pathRoot,r=this._panes.overlayPane;e.Browser.mobileWebkit&&r.removeChild(a),e.DomUtil.setPosition(a,i),a.setAttribute("width",o),a.setAttribute("height",n),a.setAttribute("viewBox",[i.x,i.y,o,n].join(" ")),e.Browser.mobileWebkit&&r.appendChild(a)}}}),e.Path.include({bindPopup:function(t,i){return(!this._popup||i)&&(this._popup=new e.Popup(i,this)),this._popup.setContent(t),this._popupHandlersAdded||(this.on("click",this._openPopup,this).on("remove",this.closePopup,this),this._popupHandlersAdded=!0),this},unbindPopup:function(){return this._popup&&(this._popup=null,this.off("click",this._openPopup).off("remove",this.closePopup),this._popupHandlersAdded=!1),this},openPopup:function(t){return this._popup&&(t=t||this._latlng||this._latlngs[Math.floor(this._latlngs.length/2)],this._openPopup({latlng:t})),this},closePopup:function(){return this._popup&&this._popup._close(),this},_openPopup:function(t){this._popup.setLatLng(t.latlng),this._map.openPopup(this._popup)}}),e.Browser.vml=!e.Browser.svg&&function(){try{var t=i.createElement("div");t.innerHTML='';var s=t.firstChild;return s.style.behavior="url(#default#VML)",s&&"object"==typeof s.adj}catch(e){return!1}}(),e.Path=e.Browser.svg||!e.Browser.vml?e.Path:e.Path.extend({statics:{VML:!0,CLIP_PADDING:.02},_createElement:function(){try{return i.namespaces.add("lvml","urn:schemas-microsoft-com:vml"),function(t){return i.createElement("')}}catch(t){return function(t){return i.createElement("<"+t+' xmlns="urn:schemas-microsoft.com:vml" class="lvml">')}}}(),_initPath:function(){var t=this._container=this._createElement("shape");e.DomUtil.addClass(t,"leaflet-vml-shape"),this.options.clickable&&e.DomUtil.addClass(t,"leaflet-clickable"),t.coordsize="1 1",this._path=this._createElement("path"),t.appendChild(this._path),this._map._pathRoot.appendChild(t)},_initStyle:function(){this._updateStyle()},_updateStyle:function(){var t=this._stroke,i=this._fill,s=this.options,e=this._container;e.stroked=s.stroke,e.filled=s.fill,s.stroke?(t||(t=this._stroke=this._createElement("stroke"),t.endcap="round",e.appendChild(t)),t.weight=s.weight+"px",t.color=s.color,t.opacity=s.opacity,t.dashStyle=s.dashArray?s.dashArray instanceof Array?s.dashArray.join(" "):s.dashArray.replace(/ *, */g," "):""):t&&(e.removeChild(t),this._stroke=null),s.fill?(i||(i=this._fill=this._createElement("fill"),e.appendChild(i)),i.color=s.fillColor||s.color,i.opacity=s.fillOpacity):i&&(e.removeChild(i),this._fill=null)},_updatePath:function(){var t=this._container.style;t.display="none",this._path.v=this.getPathString()+" ",t.display=""}}),e.Map.include(e.Browser.svg||!e.Browser.vml?{}:{_initPathRoot:function(){if(!this._pathRoot){var t=this._pathRoot=i.createElement("div");t.className="leaflet-vml-container",this._panes.overlayPane.appendChild(t),this.on("moveend",this._updatePathViewport),this._updatePathViewport()}}}),e.Browser.canvas=function(){return!!i.createElement("canvas").getContext}(),e.Path=e.Path.SVG&&!t.L_PREFER_CANVAS||!e.Browser.canvas?e.Path:e.Path.extend({statics:{CANVAS:!0,SVG:!1},redraw:function(){return this._map&&(this.projectLatlngs(),this._requestUpdate()),this},setStyle:function(t){return e.setOptions(this,t),this._map&&(this._updateStyle(),this._requestUpdate()),this},onRemove:function(t){t.off("viewreset",this.projectLatlngs,this).off("moveend",this._updatePath,this),this.options.clickable&&this._map.off("click",this._onClick,this),this._requestUpdate(),this._map=null},_requestUpdate:function(){this._map&&!e.Path._updateRequest&&(e.Path._updateRequest=e.Util.requestAnimFrame(this._fireMapMoveEnd,this._map))},_fireMapMoveEnd:function(){e.Path._updateRequest=null,this.fire("moveend")},_initElements:function(){this._map._initPathRoot(),this._ctx=this._map._canvasCtx},_updateStyle:function(){var t=this.options;t.stroke&&(this._ctx.lineWidth=t.weight,this._ctx.strokeStyle=t.color),t.fill&&(this._ctx.fillStyle=t.fillColor||t.color)},_drawPath:function(){var t,i,s,o,n,a;for(this._ctx.beginPath(),t=0,s=this._parts.length;s>t;t++){for(i=0,o=this._parts[t].length;o>i;i++)n=this._parts[t][i],a=(0===i?"move":"line")+"To",this._ctx[a](n.x,n.y);this instanceof e.Polygon&&this._ctx.closePath()}},_checkIfEmpty:function(){return!this._parts.length},_updatePath:function(){if(!this._checkIfEmpty()){var t=this._ctx,i=this.options;this._drawPath(),t.save(),this._updateStyle(),i.fill&&(t.globalAlpha=i.fillOpacity,t.fill()),i.stroke&&(t.globalAlpha=i.opacity,t.stroke()),t.restore() +}},_initEvents:function(){this.options.clickable&&this._map.on("click",this._onClick,this)},_onClick:function(t){this._containsPoint(t.layerPoint)&&this.fire("click",{latlng:t.latlng,layerPoint:t.layerPoint,containerPoint:t.containerPoint,originalEvent:t})}}),e.Map.include(e.Path.SVG&&!t.L_PREFER_CANVAS||!e.Browser.canvas?{}:{_initPathRoot:function(){var t,s=this._pathRoot;s||(s=this._pathRoot=i.createElement("canvas"),s.style.position="absolute",t=this._canvasCtx=s.getContext("2d"),t.lineCap="round",t.lineJoin="round",this._panes.overlayPane.appendChild(s),this.options.zoomAnimation&&(this._pathRoot.className="leaflet-zoom-animated",this.on("zoomanim",this._animatePathZoom),this.on("zoomend",this._endPathZoom)),this.on("moveend",this._updateCanvasViewport),this._updateCanvasViewport())},_updateCanvasViewport:function(){if(!this._pathZooming){this._updatePathViewport();var t=this._pathViewport,i=t.min,s=t.max.subtract(i),o=this._pathRoot;e.DomUtil.setPosition(o,i),o.width=s.x,o.height=s.y,o.getContext("2d").translate(-i.x,-i.y)}}}),e.LineUtil={simplify:function(t,i){if(!i||!t.length)return t.slice();var s=i*i;return t=this._reducePoints(t,s),t=this._simplifyDP(t,s)},pointToSegmentDistance:function(t,i,s){return Math.sqrt(this._sqClosestPointOnSegment(t,i,s,!0))},closestPointOnSegment:function(t,i,s){return this._sqClosestPointOnSegment(t,i,s)},_simplifyDP:function(t,i){var e=t.length,o=typeof Uint8Array!=s+""?Uint8Array:Array,n=new o(e);n[0]=n[e-1]=1,this._simplifyDPStep(t,n,i,0,e-1);var a,r=[];for(a=0;e>a;a++)n[a]&&r.push(t[a]);return r},_simplifyDPStep:function(t,i,s,e,o){var n,a,r,h=0;for(a=e+1;o-1>=a;a++)r=this._sqClosestPointOnSegment(t[a],t[e],t[o],!0),r>h&&(n=a,h=r);h>s&&(i[n]=1,this._simplifyDPStep(t,i,s,e,n),this._simplifyDPStep(t,i,s,n,o))},_reducePoints:function(t,i){for(var s=[t[0]],e=1,o=0,n=t.length;n>e;e++)this._sqDist(t[e],t[o])>i&&(s.push(t[e]),o=e);return n-1>o&&s.push(t[n-1]),s},clipSegment:function(t,i,s,e){var o,n,a,r=e?this._lastCode:this._getBitCode(t,s),h=this._getBitCode(i,s);for(this._lastCode=h;;){if(!(r|h))return[t,i];if(r&h)return!1;o=r||h,n=this._getEdgeIntersection(t,i,o,s),a=this._getBitCode(n,s),o===r?(t=n,r=a):(i=n,h=a)}},_getEdgeIntersection:function(t,i,o,n){var a=i.x-t.x,r=i.y-t.y,h=n.min,l=n.max;return 8&o?new e.Point(t.x+a*(l.y-t.y)/r,l.y):4&o?new e.Point(t.x+a*(h.y-t.y)/r,h.y):2&o?new e.Point(l.x,t.y+r*(l.x-t.x)/a):1&o?new e.Point(h.x,t.y+r*(h.x-t.x)/a):s},_getBitCode:function(t,i){var s=0;return t.xi.max.x&&(s|=2),t.yi.max.y&&(s|=8),s},_sqDist:function(t,i){var s=i.x-t.x,e=i.y-t.y;return s*s+e*e},_sqClosestPointOnSegment:function(t,i,s,o){var n,a=i.x,r=i.y,h=s.x-a,l=s.y-r,c=h*h+l*l;return c>0&&(n=((t.x-a)*h+(t.y-r)*l)/c,n>1?(a=s.x,r=s.y):n>0&&(a+=h*n,r+=l*n)),h=t.x-a,l=t.y-r,o?h*h+l*l:new e.Point(a,r)}},e.Polyline=e.Path.extend({initialize:function(t,i){e.Path.prototype.initialize.call(this,i),this._latlngs=this._convertLatLngs(t)},options:{smoothFactor:1,noClip:!1},projectLatlngs:function(){this._originalPoints=[];for(var t=0,i=this._latlngs.length;i>t;t++)this._originalPoints[t]=this._map.latLngToLayerPoint(this._latlngs[t])},getPathString:function(){for(var t=0,i=this._parts.length,s="";i>t;t++)s+=this._getPathPartStr(this._parts[t]);return s},getLatLngs:function(){return this._latlngs},setLatLngs:function(t){return this._latlngs=this._convertLatLngs(t),this.redraw()},addLatLng:function(t){return this._latlngs.push(e.latLng(t)),this.redraw()},spliceLatLngs:function(){var t=[].splice.apply(this._latlngs,arguments);return this._convertLatLngs(this._latlngs),this.redraw(),t},closestLayerPoint:function(t){for(var i,s,o=1/0,n=this._parts,a=null,r=0,h=n.length;h>r;r++)for(var l=n[r],c=1,m=l.length;m>c;c++){i=l[c-1],s=l[c];var u=e.LineUtil._sqClosestPointOnSegment(t,i,s,!0);o>u&&(o=u,a=e.LineUtil._sqClosestPointOnSegment(t,i,s))}return a&&(a.distance=Math.sqrt(o)),a},getBounds:function(){var t,i,s=new e.LatLngBounds,o=this.getLatLngs();for(t=0,i=o.length;i>t;t++)s.extend(o[t]);return s},_convertLatLngs:function(t){var i,s;for(i=0,s=t.length;s>i;i++){if(e.Util.isArray(t[i])&&"number"!=typeof t[i][0])return;t[i]=e.latLng(t[i])}return t},_initEvents:function(){e.Path.prototype._initEvents.call(this)},_getPathPartStr:function(t){for(var i,s=e.Path.VML,o=0,n=t.length,a="";n>o;o++)i=t[o],s&&i._round(),a+=(o?"L":"M")+i.x+" "+i.y;return a},_clipPoints:function(){var t,i,o,n=this._originalPoints,a=n.length;if(this.options.noClip)return this._parts=[n],s;this._parts=[];var r=this._parts,h=this._map._pathViewport,l=e.LineUtil;for(t=0,i=0;a-1>t;t++)o=l.clipSegment(n[t],n[t+1],h,t),o&&(r[i]=r[i]||[],r[i].push(o[0]),(o[1]!==n[t+1]||t===a-2)&&(r[i].push(o[1]),i++))},_simplifyPoints:function(){for(var t=this._parts,i=e.LineUtil,s=0,o=t.length;o>s;s++)t[s]=i.simplify(t[s],this.options.smoothFactor)},_updatePath:function(){this._map&&(this._clipPoints(),this._simplifyPoints(),e.Path.prototype._updatePath.call(this))}}),e.polyline=function(t,i){return new e.Polyline(t,i)},e.PolyUtil={},e.PolyUtil.clipPolygon=function(t,i){var s,o,n,a,r,h,l,c,m,u=[1,4,2,8],d=e.LineUtil;for(o=0,l=t.length;l>o;o++)t[o]._code=d._getBitCode(t[o],i);for(a=0;4>a;a++){for(c=u[a],s=[],o=0,l=t.length,n=l-1;l>o;n=o++)r=t[o],h=t[n],r._code&c?h._code&c||(m=d._getEdgeIntersection(h,r,c,i),m._code=d._getBitCode(m,i),s.push(m)):(h._code&c&&(m=d._getEdgeIntersection(h,r,c,i),m._code=d._getBitCode(m,i),s.push(m)),s.push(r));t=s}return t},e.Polygon=e.Polyline.extend({options:{fill:!0},initialize:function(t,i){e.Polyline.prototype.initialize.call(this,t,i),t&&e.Util.isArray(t[0])&&"number"!=typeof t[0][0]&&(this._latlngs=this._convertLatLngs(t[0]),this._holes=t.slice(1))},projectLatlngs:function(){if(e.Polyline.prototype.projectLatlngs.call(this),this._holePoints=[],this._holes){var t,i,s,o;for(t=0,s=this._holes.length;s>t;t++)for(this._holePoints[t]=[],i=0,o=this._holes[t].length;o>i;i++)this._holePoints[t][i]=this._map.latLngToLayerPoint(this._holes[t][i])}},_clipPoints:function(){var t=this._originalPoints,i=[];if(this._parts=[t].concat(this._holePoints),!this.options.noClip){for(var s=0,o=this._parts.length;o>s;s++){var n=e.PolyUtil.clipPolygon(this._parts[s],this._map._pathViewport);n.length&&i.push(n)}this._parts=i}},_getPathPartStr:function(t){var i=e.Polyline.prototype._getPathPartStr.call(this,t);return i+(e.Browser.svg?"z":"x")}}),e.polygon=function(t,i){return new e.Polygon(t,i)},function(){function t(t){return e.FeatureGroup.extend({initialize:function(t,i){this._layers={},this._options=i,this.setLatLngs(t)},setLatLngs:function(i){var s=0,e=i.length;for(this.eachLayer(function(t){e>s?t.setLatLngs(i[s++]):this.removeLayer(t)},this);e>s;)this.addLayer(new t(i[s++],this._options));return this}})}e.MultiPolyline=t(e.Polyline),e.MultiPolygon=t(e.Polygon),e.multiPolyline=function(t,i){return new e.MultiPolyline(t,i)},e.multiPolygon=function(t,i){return new e.MultiPolygon(t,i)}}(),e.Rectangle=e.Polygon.extend({initialize:function(t,i){e.Polygon.prototype.initialize.call(this,this._boundsToLatLngs(t),i)},setBounds:function(t){this.setLatLngs(this._boundsToLatLngs(t))},_boundsToLatLngs:function(t){return t=e.latLngBounds(t),[t.getSouthWest(),t.getNorthWest(),t.getNorthEast(),t.getSouthEast()]}}),e.rectangle=function(t,i){return new e.Rectangle(t,i)},e.Circle=e.Path.extend({initialize:function(t,i,s){e.Path.prototype.initialize.call(this,s),this._latlng=e.latLng(t),this._mRadius=i},options:{fill:!0},setLatLng:function(t){return this._latlng=e.latLng(t),this.redraw()},setRadius:function(t){return this._mRadius=t,this.redraw()},projectLatlngs:function(){var t=this._getLngRadius(),i=new e.LatLng(this._latlng.lat,this._latlng.lng-t),s=this._map.latLngToLayerPoint(i);this._point=this._map.latLngToLayerPoint(this._latlng),this._radius=Math.max(Math.round(this._point.x-s.x),1)},getBounds:function(){var t=this._getLngRadius(),i=360*(this._mRadius/40075017),s=this._latlng,o=new e.LatLng(s.lat-i,s.lng-t),n=new e.LatLng(s.lat+i,s.lng+t);return new e.LatLngBounds(o,n)},getLatLng:function(){return this._latlng},getPathString:function(){var t=this._point,i=this._radius;return this._checkIfEmpty()?"":e.Browser.svg?"M"+t.x+","+(t.y-i)+"A"+i+","+i+",0,1,1,"+(t.x-.1)+","+(t.y-i)+" z":(t._round(),i=Math.round(i),"AL "+t.x+","+t.y+" "+i+","+i+" 0,"+23592600)},getRadius:function(){return this._mRadius},_getLatRadius:function(){return 360*(this._mRadius/40075017)},_getLngRadius:function(){return this._getLatRadius()/Math.cos(e.LatLng.DEG_TO_RAD*this._latlng.lat)},_checkIfEmpty:function(){if(!this._map)return!1;var t=this._map._pathViewport,i=this._radius,s=this._point;return s.x-i>t.max.x||s.y-i>t.max.y||s.x+is;s++)for(l=this._parts[s],o=0,r=l.length,n=r-1;r>o;n=o++)if((i||0!==o)&&(h=e.LineUtil.pointToSegmentDistance(t,l[n],l[o]),c>=h))return!0;return!1}}:{}),e.Polygon.include(e.Path.CANVAS?{_containsPoint:function(t){var i,s,o,n,a,r,h,l,c=!1;if(e.Polyline.prototype._containsPoint.call(this,t,!0))return!0;for(n=0,h=this._parts.length;h>n;n++)for(i=this._parts[n],a=0,l=i.length,r=l-1;l>a;r=a++)s=i[a],o=i[r],s.y>t.y!=o.y>t.y&&t.x<(o.x-s.x)*(t.y-s.y)/(o.y-s.y)+s.x&&(c=!c);return c}}:{}),e.Circle.include(e.Path.CANVAS?{_drawPath:function(){var t=this._point;this._ctx.beginPath(),this._ctx.arc(t.x,t.y,this._radius,0,2*Math.PI,!1)},_containsPoint:function(t){var i=this._point,s=this.options.stroke?this.options.weight/2:0;return t.distanceTo(i)<=this._radius+s}}:{}),e.GeoJSON=e.FeatureGroup.extend({initialize:function(t,i){e.setOptions(this,i),this._layers={},t&&this.addData(t)},addData:function(t){var i,s,o=e.Util.isArray(t)?t:t.features;if(o){for(i=0,s=o.length;s>i;i++)(o[i].geometries||o[i].geometry||o[i].features)&&this.addData(o[i]);return this}var n=this.options;if(!n.filter||n.filter(t)){var a=e.GeoJSON.geometryToLayer(t,n.pointToLayer);return a.feature=t,a.defaultOptions=a.options,this.resetStyle(a),n.onEachFeature&&n.onEachFeature(t,a),this.addLayer(a)}},resetStyle:function(t){var i=this.options.style;i&&(e.Util.extend(t.options,t.defaultOptions),this._setLayerStyle(t,i))},setStyle:function(t){this.eachLayer(function(i){this._setLayerStyle(i,t)},this)},_setLayerStyle:function(t,i){"function"==typeof i&&(i=i(t.feature)),t.setStyle&&t.setStyle(i)}}),e.extend(e.GeoJSON,{geometryToLayer:function(t,i){var s,o,n,a,r,h="Feature"===t.type?t.geometry:t,l=h.coordinates,c=[];switch(h.type){case"Point":return s=this.coordsToLatLng(l),i?i(t,s):new e.Marker(s);case"MultiPoint":for(n=0,a=l.length;a>n;n++)s=this.coordsToLatLng(l[n]),r=i?i(t,s):new e.Marker(s),c.push(r);return new e.FeatureGroup(c);case"LineString":return o=this.coordsToLatLngs(l),new e.Polyline(o);case"Polygon":return o=this.coordsToLatLngs(l,1),new e.Polygon(o);case"MultiLineString":return o=this.coordsToLatLngs(l,1),new e.MultiPolyline(o);case"MultiPolygon":return o=this.coordsToLatLngs(l,2),new e.MultiPolygon(o);case"GeometryCollection":for(n=0,a=h.geometries.length;a>n;n++)r=this.geometryToLayer({geometry:h.geometries[n],type:"Feature",properties:t.properties},i),c.push(r);return new e.FeatureGroup(c);default:throw Error("Invalid GeoJSON object.")}},coordsToLatLng:function(t,i){var s=parseFloat(t[i?0:1]),o=parseFloat(t[i?1:0]);return new e.LatLng(s,o)},coordsToLatLngs:function(t,i,s){var e,o,n,a=[];for(o=0,n=t.length;n>o;o++)e=i?this.coordsToLatLngs(t[o],i-1,s):this.coordsToLatLng(t[o],s),a.push(e);return a}}),e.geoJson=function(t,i){return new e.GeoJSON(t,i)},e.DomEvent={addListener:function(t,i,o,n){var a,r,h,l=e.stamp(o),c="_leaflet_"+i+l;return t[c]?this:(a=function(i){return o.call(n||t,i||e.DomEvent._getEvent())},e.Browser.msTouch&&0===i.indexOf("touch")?this.addMsTouchListener(t,i,a,l):(e.Browser.touch&&"dblclick"===i&&this.addDoubleTapListener&&this.addDoubleTapListener(t,a,l),"addEventListener"in t?"mousewheel"===i?(t.addEventListener("DOMMouseScroll",a,!1),t.addEventListener(i,a,!1)):"mouseenter"===i||"mouseleave"===i?(r=a,h="mouseenter"===i?"mouseover":"mouseout",a=function(i){return e.DomEvent._checkMouse(t,i)?r(i):s},t.addEventListener(h,a,!1)):t.addEventListener(i,a,!1):"attachEvent"in t&&t.attachEvent("on"+i,a),t[c]=a,this))},removeListener:function(t,i,s){var o=e.stamp(s),n="_leaflet_"+i+o,a=t[n];if(a)return e.Browser.msTouch&&0===i.indexOf("touch")?this.removeMsTouchListener(t,i,o):e.Browser.touch&&"dblclick"===i&&this.removeDoubleTapListener?this.removeDoubleTapListener(t,o):"removeEventListener"in t?"mousewheel"===i?(t.removeEventListener("DOMMouseScroll",a,!1),t.removeEventListener(i,a,!1)):"mouseenter"===i||"mouseleave"===i?t.removeEventListener("mouseenter"===i?"mouseover":"mouseout",a,!1):t.removeEventListener(i,a,!1):"detachEvent"in t&&t.detachEvent("on"+i,a),t[n]=null,this},stopPropagation:function(t){return t.stopPropagation?t.stopPropagation():t.cancelBubble=!0,this},disableClickPropagation:function(t){for(var i=e.DomEvent.stopPropagation,s=e.Draggable.START.length-1;s>=0;s--)e.DomEvent.addListener(t,e.Draggable.START[s],i);return e.DomEvent.addListener(t,"click",i).addListener(t,"dblclick",i)},preventDefault:function(t){return t.preventDefault?t.preventDefault():t.returnValue=!1,this},stop:function(t){return e.DomEvent.preventDefault(t).stopPropagation(t)},getMousePosition:function(t,s){var o=i.body,n=i.documentElement,a=t.pageX?t.pageX:t.clientX+o.scrollLeft+n.scrollLeft,r=t.pageY?t.pageY:t.clientY+o.scrollTop+n.scrollTop,h=new e.Point(a,r);return s?h._subtract(e.DomUtil.getViewportOffset(s)):h},getWheelDelta:function(t){var i=0;return t.wheelDelta&&(i=t.wheelDelta/120),t.detail&&(i=-t.detail/3),i},_checkMouse:function(t,i){var s=i.relatedTarget;if(!s)return!0;try{for(;s&&s!==t;)s=s.parentNode}catch(e){return!1}return s!==t},_getEvent:function(){var i=t.event;if(!i)for(var s=arguments.callee.caller;s&&(i=s.arguments[0],!i||t.Event!==i.constructor);)s=s.caller;return i}},e.DomEvent.on=e.DomEvent.addListener,e.DomEvent.off=e.DomEvent.removeListener,e.Draggable=e.Class.extend({includes:e.Mixin.Events,statics:{START:e.Browser.touch?["touchstart","mousedown"]:["mousedown"],END:{mousedown:"mouseup",touchstart:"touchend",MSPointerDown:"touchend"},MOVE:{mousedown:"mousemove",touchstart:"touchmove",MSPointerDown:"touchmove"},TAP_TOLERANCE:15},initialize:function(t,i,s){this._element=t,this._dragStartTarget=i||t,this._longPress=s&&!e.Browser.msTouch},enable:function(){if(!this._enabled){for(var t=e.Draggable.START.length-1;t>=0;t--)e.DomEvent.on(this._dragStartTarget,e.Draggable.START[t],this._onDown,this);this._enabled=!0}},disable:function(){if(this._enabled){for(var t=e.Draggable.START.length-1;t>=0;t--)e.DomEvent.off(this._dragStartTarget,e.Draggable.START[t],this._onDown,this);this._enabled=!1,this._moved=!1}},_onDown:function(t){if(!(!e.Browser.touch&&t.shiftKey||1!==t.which&&1!==t.button&&!t.touches||(e.DomEvent.preventDefault(t),e.DomEvent.stopPropagation(t),e.Draggable._disabled))){if(this._simulateClick=!0,t.touches&&t.touches.length>1)return this._simulateClick=!1,clearTimeout(this._longPressTimeout),s;var o=t.touches&&1===t.touches.length?t.touches[0]:t,n=o.target;e.Browser.touch&&"a"===n.tagName.toLowerCase()&&e.DomUtil.addClass(n,"leaflet-active"),this._moved=!1,this._moving||(this._startPoint=new e.Point(o.clientX,o.clientY),this._startPos=this._newPos=e.DomUtil.getPosition(this._element),t.touches&&1===t.touches.length&&e.Browser.touch&&this._longPress&&(this._longPressTimeout=setTimeout(e.bind(function(){var t=this._newPos&&this._newPos.distanceTo(this._startPos)||0;e.Draggable.TAP_TOLERANCE>t&&(this._simulateClick=!1,this._onUp(),this._simulateEvent("contextmenu",o))},this),1e3)),e.DomEvent.on(i,e.Draggable.MOVE[t.type],this._onMove,this),e.DomEvent.on(i,e.Draggable.END[t.type],this._onUp,this))}},_onMove:function(t){if(!(t.touches&&t.touches.length>1)){var i=t.touches&&1===t.touches.length?t.touches[0]:t,s=new e.Point(i.clientX,i.clientY),o=s.subtract(this._startPoint);(o.x||o.y)&&(e.DomEvent.preventDefault(t),this._moved||(this.fire("dragstart"),this._moved=!0,this._startPos=e.DomUtil.getPosition(this._element).subtract(o),e.Browser.touch||(e.DomUtil.disableTextSelection(),this._setMovingCursor())),this._newPos=this._startPos.add(o),this._moving=!0,e.Util.cancelAnimFrame(this._animRequest),this._animRequest=e.Util.requestAnimFrame(this._updatePosition,this,!0,this._dragStartTarget))}},_updatePosition:function(){this.fire("predrag"),e.DomUtil.setPosition(this._element,this._newPos),this.fire("drag")},_onUp:function(t){var s;if(clearTimeout(this._longPressTimeout),this._simulateClick&&t.changedTouches){var o=t.changedTouches[0],n=o.target,a=this._newPos&&this._newPos.distanceTo(this._startPos)||0;"a"===n.tagName.toLowerCase()&&e.DomUtil.removeClass(n,"leaflet-active"),e.Draggable.TAP_TOLERANCE>a&&(s=o)}e.Browser.touch||(e.DomUtil.enableTextSelection(),this._restoreCursor());for(var r in e.Draggable.MOVE)e.Draggable.MOVE.hasOwnProperty(r)&&(e.DomEvent.off(i,e.Draggable.MOVE[r],this._onMove),e.DomEvent.off(i,e.Draggable.END[r],this._onUp));this._moved&&(e.Util.cancelAnimFrame(this._animRequest),this.fire("dragend")),this._moving=!1,s&&(this._moved=!1,this._simulateEvent("click",s))},_setMovingCursor:function(){e.DomUtil.addClass(i.body,"leaflet-dragging")},_restoreCursor:function(){e.DomUtil.removeClass(i.body,"leaflet-dragging")},_simulateEvent:function(s,e){var o=i.createEvent("MouseEvents");o.initMouseEvent(s,!0,!0,t,1,e.screenX,e.screenY,e.clientX,e.clientY,!1,!1,!1,!1,0,null),e.target.dispatchEvent(o)}}),e.Handler=e.Class.extend({initialize:function(t){this._map=t},enable:function(){this._enabled||(this._enabled=!0,this.addHooks())},disable:function(){this._enabled&&(this._enabled=!1,this.removeHooks())},enabled:function(){return!!this._enabled}}),e.Map.mergeOptions({dragging:!0,inertia:!e.Browser.android23,inertiaDeceleration:3400,inertiaMaxSpeed:1/0,inertiaThreshold:e.Browser.touch?32:18,easeLinearity:.25,longPress:!0,worldCopyJump:!1}),e.Map.Drag=e.Handler.extend({addHooks:function(){if(!this._draggable){var t=this._map;this._draggable=new e.Draggable(t._mapPane,t._container,t.options.longPress),this._draggable.on({dragstart:this._onDragStart,drag:this._onDrag,dragend:this._onDragEnd},this),t.options.worldCopyJump&&(this._draggable.on("predrag",this._onPreDrag,this),t.on("viewreset",this._onViewReset,this))}this._draggable.enable()},removeHooks:function(){this._draggable.disable()},moved:function(){return this._draggable&&this._draggable._moved},_onDragStart:function(){var t=this._map;t._panAnim&&t._panAnim.stop(),t.fire("movestart").fire("dragstart"),t.options.inertia&&(this._positions=[],this._times=[])},_onDrag:function(){if(this._map.options.inertia){var t=this._lastTime=+new Date,i=this._lastPos=this._draggable._newPos;this._positions.push(i),this._times.push(t),t-this._times[0]>200&&(this._positions.shift(),this._times.shift())}this._map.fire("move").fire("drag")},_onViewReset:function(){var t=this._map.getSize()._divideBy(2),i=this._map.latLngToLayerPoint(new e.LatLng(0,0));this._initialWorldOffset=i.subtract(t).x,this._worldWidth=this._map.project(new e.LatLng(0,180)).x},_onPreDrag:function(){var t=this._worldWidth,i=Math.round(t/2),s=this._initialWorldOffset,e=this._draggable._newPos.x,o=(e-i+s)%t+i-s,n=(e+i+s)%t-i-s,a=Math.abs(o+s)i.inertiaThreshold||!this._positions[0];if(o)t.fire("moveend");else{var n=this._lastPos.subtract(this._positions[0]),a=(this._lastTime+s-this._times[0])/1e3,r=i.easeLinearity,h=n.multiplyBy(r/a),l=h.distanceTo(new e.Point(0,0)),c=Math.min(i.inertiaMaxSpeed,l),m=h.multiplyBy(c/l),u=c/(i.inertiaDeceleration*r),d=m.multiplyBy(-u/2).round();e.Util.requestAnimFrame(function(){t.panBy(d,u,r)})}t.fire("dragend"),i.maxBounds&&e.Util.requestAnimFrame(this._panInsideMaxBounds,t,!0,t._container)},_panInsideMaxBounds:function(){this.panInsideBounds(this.options.maxBounds)}}),e.Map.addInitHook("addHandler","dragging",e.Map.Drag),e.Map.mergeOptions({doubleClickZoom:!0}),e.Map.DoubleClickZoom=e.Handler.extend({addHooks:function(){this._map.on("dblclick",this._onDoubleClick)},removeHooks:function(){this._map.off("dblclick",this._onDoubleClick)},_onDoubleClick:function(t){this.setView(t.latlng,this._zoom+1)}}),e.Map.addInitHook("addHandler","doubleClickZoom",e.Map.DoubleClickZoom),e.Map.mergeOptions({scrollWheelZoom:!0}),e.Map.ScrollWheelZoom=e.Handler.extend({addHooks:function(){e.DomEvent.on(this._map._container,"mousewheel",this._onWheelScroll,this),this._delta=0},removeHooks:function(){e.DomEvent.off(this._map._container,"mousewheel",this._onWheelScroll)},_onWheelScroll:function(t){var i=e.DomEvent.getWheelDelta(t);this._delta+=i,this._lastMousePos=this._map.mouseEventToContainerPoint(t),this._startTime||(this._startTime=+new Date);var s=Math.max(40-(+new Date-this._startTime),0);clearTimeout(this._timer),this._timer=setTimeout(e.bind(this._performZoom,this),s),e.DomEvent.preventDefault(t),e.DomEvent.stopPropagation(t)},_performZoom:function(){var t=this._map,i=this._delta,s=t.getZoom();if(i=i>0?Math.ceil(i):Math.round(i),i=Math.max(Math.min(i,4),-4),i=t._limitZoom(s+i)-s,this._delta=0,this._startTime=null,i){var e=s+i,o=this._getCenterForScrollWheelZoom(e);t.setView(o,e)}},_getCenterForScrollWheelZoom:function(t){var i=this._map,s=i.getZoomScale(t),e=i.getSize()._divideBy(2),o=this._lastMousePos._subtract(e)._multiplyBy(1-1/s),n=i._getTopLeftPoint()._add(e)._add(o);return i.unproject(n)}}),e.Map.addInitHook("addHandler","scrollWheelZoom",e.Map.ScrollWheelZoom),e.extend(e.DomEvent,{_touchstart:e.Browser.msTouch?"MSPointerDown":"touchstart",_touchend:e.Browser.msTouch?"MSPointerUp":"touchend",addDoubleTapListener:function(t,s,o){function n(t){var i;if(e.Browser.msTouch?(p.push(t.pointerId),i=p.length):i=t.touches.length,!(i>1)){var s=Date.now(),o=s-(r||s);h=t.touches?t.touches[0]:t,l=o>0&&c>=o,r=s}}function a(t){if(e.Browser.msTouch){var i=p.indexOf(t.pointerId);if(-1===i)return;p.splice(i,1)}if(l){if(e.Browser.msTouch){var o,n={};for(var a in h)o=h[a],n[a]="function"==typeof o?o.bind(h):o;h=n}h.type="dblclick",s(h),r=null}}var r,h,l=!1,c=250,m="_leaflet_",u=this._touchstart,d=this._touchend,p=[];t[m+u+o]=n,t[m+d+o]=a;var _=e.Browser.msTouch?i.documentElement:t;return t.addEventListener(u,n,!1),_.addEventListener(d,a,!1),e.Browser.msTouch&&_.addEventListener("MSPointerCancel",a,!1),this},removeDoubleTapListener:function(t,s){var o="_leaflet_";return t.removeEventListener(this._touchstart,t[o+this._touchstart+s],!1),(e.Browser.msTouch?i.documentElement:t).removeEventListener(this._touchend,t[o+this._touchend+s],!1),e.Browser.msTouch&&i.documentElement.removeEventListener("MSPointerCancel",t[o+this._touchend+s],!1),this}}),e.extend(e.DomEvent,{_msTouches:[],_msDocumentListener:!1,addMsTouchListener:function(t,i,s,e){switch(i){case"touchstart":return this.addMsTouchListenerStart(t,i,s,e);case"touchend":return this.addMsTouchListenerEnd(t,i,s,e);case"touchmove":return this.addMsTouchListenerMove(t,i,s,e);default:throw"Unknown touch event type"}},addMsTouchListenerStart:function(t,s,e,o){var n="_leaflet_",a=this._msTouches,r=function(t){for(var i=!1,s=0;a.length>s;s++)if(a[s].pointerId===t.pointerId){i=!0;break}i||a.push(t),t.touches=a.slice(),t.changedTouches=[t],e(t)};if(t[n+"touchstart"+o]=r,t.addEventListener("MSPointerDown",r,!1),!this._msDocumentListener){var h=function(t){for(var i=0;a.length>i;i++)if(a[i].pointerId===t.pointerId){a.splice(i,1);break}};i.documentElement.addEventListener("MSPointerUp",h,!1),i.documentElement.addEventListener("MSPointerCancel",h,!1),this._msDocumentListener=!0}return this},addMsTouchListenerMove:function(t,i,s,e){function o(t){if(t.pointerType!==t.MSPOINTER_TYPE_MOUSE||0!==t.buttons){for(var i=0;a.length>i;i++)if(a[i].pointerId===t.pointerId){a[i]=t;break}t.touches=a.slice(),t.changedTouches=[t],s(t)}}var n="_leaflet_",a=this._msTouches;return t[n+"touchmove"+e]=o,t.addEventListener("MSPointerMove",o,!1),this},addMsTouchListenerEnd:function(t,i,s,e){var o="_leaflet_",n=this._msTouches,a=function(t){for(var i=0;n.length>i;i++)if(n[i].pointerId===t.pointerId){n.splice(i,1);break}t.touches=n.slice(),t.changedTouches=[t],s(t)};return t[o+"touchend"+e]=a,t.addEventListener("MSPointerUp",a,!1),t.addEventListener("MSPointerCancel",a,!1),this},removeMsTouchListener:function(t,i,s){var e="_leaflet_",o=t[e+i+s];switch(i){case"touchstart":t.removeEventListener("MSPointerDown",o,!1);break;case"touchmove":t.removeEventListener("MSPointerMove",o,!1);break;case"touchend":t.removeEventListener("MSPointerUp",o,!1),t.removeEventListener("MSPointerCancel",o,!1)}return this}}),e.Map.mergeOptions({touchZoom:e.Browser.touch&&!e.Browser.android23}),e.Map.TouchZoom=e.Handler.extend({addHooks:function(){e.DomEvent.on(this._map._container,"touchstart",this._onTouchStart,this)},removeHooks:function(){e.DomEvent.off(this._map._container,"touchstart",this._onTouchStart,this)},_onTouchStart:function(t){var s=this._map;if(t.touches&&2===t.touches.length&&!s._animatingZoom&&!this._zooming){var o=s.mouseEventToLayerPoint(t.touches[0]),n=s.mouseEventToLayerPoint(t.touches[1]),a=s._getCenterLayerPoint();this._startCenter=o.add(n)._divideBy(2),this._startDist=o.distanceTo(n),this._moved=!1,this._zooming=!0,this._centerOffset=a.subtract(this._startCenter),s._panAnim&&s._panAnim.stop(),e.DomEvent.on(i,"touchmove",this._onTouchMove,this).on(i,"touchend",this._onTouchEnd,this),e.DomEvent.preventDefault(t)}},_onTouchMove:function(t){if(t.touches&&2===t.touches.length){var i=this._map,s=i.mouseEventToLayerPoint(t.touches[0]),o=i.mouseEventToLayerPoint(t.touches[1]);this._scale=s.distanceTo(o)/this._startDist,this._delta=s._add(o)._divideBy(2)._subtract(this._startCenter),1!==this._scale&&(this._moved||(e.DomUtil.addClass(i._mapPane,"leaflet-zoom-anim leaflet-touching"),i.fire("movestart").fire("zoomstart")._prepareTileBg(),this._moved=!0),e.Util.cancelAnimFrame(this._animRequest),this._animRequest=e.Util.requestAnimFrame(this._updateOnMove,this,!0,this._map._container),e.DomEvent.preventDefault(t))}},_updateOnMove:function(){var t=this._map,i=this._getScaleOrigin(),s=t.layerPointToLatLng(i);t.fire("zoomanim",{center:s,zoom:t.getScaleZoom(this._scale)}),t._tileBg.style[e.DomUtil.TRANSFORM]=e.DomUtil.getTranslateString(this._delta)+" "+e.DomUtil.getScaleString(this._scale,this._startCenter)},_onTouchEnd:function(){if(this._moved&&this._zooming){var t=this._map;this._zooming=!1,e.DomUtil.removeClass(t._mapPane,"leaflet-touching"),e.DomEvent.off(i,"touchmove",this._onTouchMove).off(i,"touchend",this._onTouchEnd);var s=this._getScaleOrigin(),o=t.layerPointToLatLng(s),n=t.getZoom(),a=t.getScaleZoom(this._scale)-n,r=a>0?Math.ceil(a):Math.floor(a),h=t._limitZoom(n+r);t.fire("zoomanim",{center:o,zoom:h}),t._runAnimation(o,h,t.getZoomScale(h)/this._scale,s,!0)}},_getScaleOrigin:function(){var t=this._centerOffset.subtract(this._delta).divideBy(this._scale);return this._startCenter.add(t)}}),e.Map.addInitHook("addHandler","touchZoom",e.Map.TouchZoom),e.Map.mergeOptions({boxZoom:!0}),e.Map.BoxZoom=e.Handler.extend({initialize:function(t){this._map=t,this._container=t._container,this._pane=t._panes.overlayPane},addHooks:function(){e.DomEvent.on(this._container,"mousedown",this._onMouseDown,this)},removeHooks:function(){e.DomEvent.off(this._container,"mousedown",this._onMouseDown)},_onMouseDown:function(t){return!t.shiftKey||1!==t.which&&1!==t.button?!1:(e.DomUtil.disableTextSelection(),this._startLayerPoint=this._map.mouseEventToLayerPoint(t),this._box=e.DomUtil.create("div","leaflet-zoom-box",this._pane),e.DomUtil.setPosition(this._box,this._startLayerPoint),this._container.style.cursor="crosshair",e.DomEvent.on(i,"mousemove",this._onMouseMove,this).on(i,"mouseup",this._onMouseUp,this).preventDefault(t),this._map.fire("boxzoomstart"),s)},_onMouseMove:function(t){var i=this._startLayerPoint,s=this._box,o=this._map.mouseEventToLayerPoint(t),n=o.subtract(i),a=new e.Point(Math.min(o.x,i.x),Math.min(o.y,i.y));e.DomUtil.setPosition(s,a),s.style.width=Math.max(0,Math.abs(n.x)-4)+"px",s.style.height=Math.max(0,Math.abs(n.y)-4)+"px"},_onMouseUp:function(t){this._pane.removeChild(this._box),this._container.style.cursor="",e.DomUtil.enableTextSelection(),e.DomEvent.off(i,"mousemove",this._onMouseMove).off(i,"mouseup",this._onMouseUp);var s=this._map,o=s.mouseEventToLayerPoint(t);if(!this._startLayerPoint.equals(o)){var n=new e.LatLngBounds(s.layerPointToLatLng(this._startLayerPoint),s.layerPointToLatLng(o));s.fitBounds(n),s.fire("boxzoomend",{boxZoomBounds:n})}}}),e.Map.addInitHook("addHandler","boxZoom",e.Map.BoxZoom),e.Map.mergeOptions({keyboard:!0,keyboardPanOffset:80,keyboardZoomOffset:1}),e.Map.Keyboard=e.Handler.extend({keyCodes:{left:[37],right:[39],down:[40],up:[38],zoomIn:[187,107,61],zoomOut:[189,109,173]},initialize:function(t){this._map=t,this._setPanOffset(t.options.keyboardPanOffset),this._setZoomOffset(t.options.keyboardZoomOffset)},addHooks:function(){var t=this._map._container;-1===t.tabIndex&&(t.tabIndex="0"),e.DomEvent.on(t,"focus",this._onFocus,this).on(t,"blur",this._onBlur,this).on(t,"mousedown",this._onMouseDown,this),this._map.on("focus",this._addHooks,this).on("blur",this._removeHooks,this)},removeHooks:function(){this._removeHooks();var t=this._map._container;e.DomEvent.off(t,"focus",this._onFocus,this).off(t,"blur",this._onBlur,this).off(t,"mousedown",this._onMouseDown,this),this._map.off("focus",this._addHooks,this).off("blur",this._removeHooks,this)},_onMouseDown:function(){this._focused||this._map._container.focus()},_onFocus:function(){this._focused=!0,this._map.fire("focus")},_onBlur:function(){this._focused=!1,this._map.fire("blur")},_setPanOffset:function(t){var i,s,e=this._panKeys={},o=this.keyCodes;for(i=0,s=o.left.length;s>i;i++)e[o.left[i]]=[-1*t,0];for(i=0,s=o.right.length;s>i;i++)e[o.right[i]]=[t,0];for(i=0,s=o.down.length;s>i;i++)e[o.down[i]]=[0,t];for(i=0,s=o.up.length;s>i;i++)e[o.up[i]]=[0,-1*t]},_setZoomOffset:function(t){var i,s,e=this._zoomKeys={},o=this.keyCodes;for(i=0,s=o.zoomIn.length;s>i;i++)e[o.zoomIn[i]]=t;for(i=0,s=o.zoomOut.length;s>i;i++)e[o.zoomOut[i]]=-t},_addHooks:function(){e.DomEvent.on(i,"keydown",this._onKeyDown,this)},_removeHooks:function(){e.DomEvent.off(i,"keydown",this._onKeyDown,this)},_onKeyDown:function(t){var i=t.keyCode,s=this._map;if(this._panKeys.hasOwnProperty(i))s.panBy(this._panKeys[i]),s.options.maxBounds&&s.panInsideBounds(s.options.maxBounds);else{if(!this._zoomKeys.hasOwnProperty(i))return;s.setZoom(s.getZoom()+this._zoomKeys[i])}e.DomEvent.stop(t)}}),e.Map.addInitHook("addHandler","keyboard",e.Map.Keyboard),e.Handler.MarkerDrag=e.Handler.extend({initialize:function(t){this._marker=t},addHooks:function(){var t=this._marker._icon;this._draggable||(this._draggable=new e.Draggable(t,t).on("dragstart",this._onDragStart,this).on("drag",this._onDrag,this).on("dragend",this._onDragEnd,this)),this._draggable.enable()},removeHooks:function(){this._draggable.disable()},moved:function(){return this._draggable&&this._draggable._moved},_onDragStart:function(){this._marker.closePopup().fire("movestart").fire("dragstart")},_onDrag:function(){var t=this._marker,i=t._shadow,s=e.DomUtil.getPosition(t._icon),o=t._map.layerPointToLatLng(s);i&&e.DomUtil.setPosition(i,s),t._latlng=o,t.fire("move",{latlng:o}).fire("drag") +},_onDragEnd:function(){this._marker.fire("moveend").fire("dragend")}}),e.Handler.PolyEdit=e.Handler.extend({options:{icon:new e.DivIcon({iconSize:new e.Point(8,8),className:"leaflet-div-icon leaflet-editing-icon"})},initialize:function(t,i){this._poly=t,e.setOptions(this,i)},addHooks:function(){this._poly._map&&(this._markerGroup||this._initMarkers(),this._poly._map.addLayer(this._markerGroup))},removeHooks:function(){this._poly._map&&(this._poly._map.removeLayer(this._markerGroup),delete this._markerGroup,delete this._markers)},updateMarkers:function(){this._markerGroup.clearLayers(),this._initMarkers()},_initMarkers:function(){this._markerGroup||(this._markerGroup=new e.LayerGroup),this._markers=[];var t,i,s,o,n=this._poly._latlngs;for(t=0,s=n.length;s>t;t++)o=this._createMarker(n[t],t),o.on("click",this._onMarkerClick,this),this._markers.push(o);var a,r;for(t=0,i=s-1;s>t;i=t++)(0!==t||e.Polygon&&this._poly instanceof e.Polygon)&&(a=this._markers[i],r=this._markers[t],this._createMiddleMarker(a,r),this._updatePrevNext(a,r))},_createMarker:function(t,i){var s=new e.Marker(t,{draggable:!0,icon:this.options.icon});return s._origLatLng=t,s._index=i,s.on("drag",this._onMarkerDrag,this),s.on("dragend",this._fireEdit,this),this._markerGroup.addLayer(s),s},_fireEdit:function(){this._poly.fire("edit")},_onMarkerDrag:function(t){var i=t.target;e.extend(i._origLatLng,i._latlng),i._middleLeft&&i._middleLeft.setLatLng(this._getMiddleLatLng(i._prev,i)),i._middleRight&&i._middleRight.setLatLng(this._getMiddleLatLng(i,i._next)),this._poly.redraw()},_onMarkerClick:function(t){if(!(3>this._poly._latlngs.length)){var i=t.target,s=i._index;this._markerGroup.removeLayer(i),this._markers.splice(s,1),this._poly.spliceLatLngs(s,1),this._updateIndexes(s,-1),this._updatePrevNext(i._prev,i._next),i._middleLeft&&this._markerGroup.removeLayer(i._middleLeft),i._middleRight&&this._markerGroup.removeLayer(i._middleRight),i._prev&&i._next?this._createMiddleMarker(i._prev,i._next):i._prev?i._next||(i._prev._middleRight=null):i._next._middleLeft=null,this._poly.fire("edit")}},_updateIndexes:function(t,i){this._markerGroup.eachLayer(function(s){s._index>t&&(s._index+=i)})},_createMiddleMarker:function(t,i){var s,e,o,n=this._getMiddleLatLng(t,i),a=this._createMarker(n);a.setOpacity(.6),t._middleRight=i._middleLeft=a,e=function(){var e=i._index;a._index=e,a.off("click",s).on("click",this._onMarkerClick,this),n.lat=a.getLatLng().lat,n.lng=a.getLatLng().lng,this._poly.spliceLatLngs(e,0,n),this._markers.splice(e,0,a),a.setOpacity(1),this._updateIndexes(e,1),i._index++,this._updatePrevNext(t,a),this._updatePrevNext(a,i)},o=function(){a.off("dragstart",e,this),a.off("dragend",o,this),this._createMiddleMarker(t,a),this._createMiddleMarker(a,i)},s=function(){e.call(this),o.call(this),this._poly.fire("edit")},a.on("click",s,this).on("dragstart",e,this).on("dragend",o,this),this._markerGroup.addLayer(a)},_updatePrevNext:function(t,i){t&&(t._next=i),i&&(i._prev=t)},_getMiddleLatLng:function(t,i){var s=this._poly._map,e=s.latLngToLayerPoint(t.getLatLng()),o=s.latLngToLayerPoint(i.getLatLng());return s.layerPointToLatLng(e._add(o)._divideBy(2))}}),e.Polyline.addInitHook(function(){e.Handler.PolyEdit&&(this.editing=new e.Handler.PolyEdit(this),this.options.editable&&this.editing.enable()),this.on("add",function(){this.editing&&this.editing.enabled()&&this.editing.addHooks()}),this.on("remove",function(){this.editing&&this.editing.enabled()&&this.editing.removeHooks()})}),e.Control=e.Class.extend({options:{position:"topright"},initialize:function(t){e.setOptions(this,t)},getPosition:function(){return this.options.position},setPosition:function(t){var i=this._map;return i&&i.removeControl(this),this.options.position=t,i&&i.addControl(this),this},addTo:function(t){this._map=t;var i=this._container=this.onAdd(t),s=this.getPosition(),o=t._controlCorners[s];return e.DomUtil.addClass(i,"leaflet-control"),-1!==s.indexOf("bottom")?o.insertBefore(i,o.firstChild):o.appendChild(i),this},removeFrom:function(t){var i=this.getPosition(),s=t._controlCorners[i];return s.removeChild(this._container),this._map=null,this.onRemove&&this.onRemove(t),this}}),e.control=function(t){return new e.Control(t)},e.Map.include({addControl:function(t){return t.addTo(this),this},removeControl:function(t){return t.removeFrom(this),this},_initControlPos:function(){function t(t,n){var a=s+t+" "+s+n;i[t+n]=e.DomUtil.create("div",a,o)}var i=this._controlCorners={},s="leaflet-",o=this._controlContainer=e.DomUtil.create("div",s+"control-container",this._container);t("top","left"),t("top","right"),t("bottom","left"),t("bottom","right")}}),e.Control.Zoom=e.Control.extend({options:{position:"topleft"},onAdd:function(t){var i="leaflet-control-zoom",s="leaflet-bar",o=s+"-part",n=e.DomUtil.create("div",i+" "+s);return this._map=t,this._zoomInButton=this._createButton("+","Zoom in",i+"-in "+o+" "+o+"-top",n,this._zoomIn,this),this._zoomOutButton=this._createButton("-","Zoom out",i+"-out "+o+" "+o+"-bottom",n,this._zoomOut,this),t.on("zoomend",this._updateDisabled,this),n},onRemove:function(t){t.off("zoomend",this._updateDisabled,this)},_zoomIn:function(t){this._map.zoomIn(t.shiftKey?3:1)},_zoomOut:function(t){this._map.zoomOut(t.shiftKey?3:1)},_createButton:function(t,i,s,o,n,a){var r=e.DomUtil.create("a",s,o);r.innerHTML=t,r.href="#",r.title=i;var h=e.DomEvent.stopPropagation;return e.DomEvent.on(r,"click",h).on(r,"mousedown",h).on(r,"dblclick",h).on(r,"click",e.DomEvent.preventDefault).on(r,"click",n,a),r},_updateDisabled:function(){var t=this._map,i="leaflet-control-zoom-disabled";e.DomUtil.removeClass(this._zoomInButton,i),e.DomUtil.removeClass(this._zoomOutButton,i),t._zoom===t.getMinZoom()&&e.DomUtil.addClass(this._zoomOutButton,i),t._zoom===t.getMaxZoom()&&e.DomUtil.addClass(this._zoomInButton,i)}}),e.Map.mergeOptions({zoomControl:!0}),e.Map.addInitHook(function(){this.options.zoomControl&&(this.zoomControl=new e.Control.Zoom,this.addControl(this.zoomControl))}),e.control.zoom=function(t){return new e.Control.Zoom(t)},e.Control.Attribution=e.Control.extend({options:{position:"bottomright",prefix:'Powered by Leaflet'},initialize:function(t){e.setOptions(this,t),this._attributions={}},onAdd:function(t){return this._container=e.DomUtil.create("div","leaflet-control-attribution"),e.DomEvent.disableClickPropagation(this._container),t.on("layeradd",this._onLayerAdd,this).on("layerremove",this._onLayerRemove,this),this._update(),this._container},onRemove:function(t){t.off("layeradd",this._onLayerAdd).off("layerremove",this._onLayerRemove)},setPrefix:function(t){return this.options.prefix=t,this._update(),this},addAttribution:function(t){return t?(this._attributions[t]||(this._attributions[t]=0),this._attributions[t]++,this._update(),this):s},removeAttribution:function(t){return t?(this._attributions[t]--,this._update(),this):s},_update:function(){if(this._map){var t=[];for(var i in this._attributions)this._attributions.hasOwnProperty(i)&&this._attributions[i]&&t.push(i);var s=[];this.options.prefix&&s.push(this.options.prefix),t.length&&s.push(t.join(", ")),this._container.innerHTML=s.join(" — ")}},_onLayerAdd:function(t){t.layer.getAttribution&&this.addAttribution(t.layer.getAttribution())},_onLayerRemove:function(t){t.layer.getAttribution&&this.removeAttribution(t.layer.getAttribution())}}),e.Map.mergeOptions({attributionControl:!0}),e.Map.addInitHook(function(){this.options.attributionControl&&(this.attributionControl=(new e.Control.Attribution).addTo(this))}),e.control.attribution=function(t){return new e.Control.Attribution(t)},e.Control.Scale=e.Control.extend({options:{position:"bottomleft",maxWidth:100,metric:!0,imperial:!0,updateWhenIdle:!1},onAdd:function(t){this._map=t;var i="leaflet-control-scale",s=e.DomUtil.create("div",i),o=this.options;return this._addScales(o,i,s),t.on(o.updateWhenIdle?"moveend":"move",this._update,this),t.whenReady(this._update,this),s},onRemove:function(t){t.off(this.options.updateWhenIdle?"moveend":"move",this._update,this)},_addScales:function(t,i,s){t.metric&&(this._mScale=e.DomUtil.create("div",i+"-line",s)),t.imperial&&(this._iScale=e.DomUtil.create("div",i+"-line",s))},_update:function(){var t=this._map.getBounds(),i=t.getCenter().lat,s=6378137*Math.PI*Math.cos(i*Math.PI/180),e=s*(t.getNorthEast().lng-t.getSouthWest().lng)/180,o=this._map.getSize(),n=this.options,a=0;o.x>0&&(a=e*(n.maxWidth/o.x)),this._updateScales(n,a)},_updateScales:function(t,i){t.metric&&i&&this._updateMetric(i),t.imperial&&i&&this._updateImperial(i)},_updateMetric:function(t){var i=this._getRoundNum(t);this._mScale.style.width=this._getScaleWidth(i/t)+"px",this._mScale.innerHTML=1e3>i?i+" m":i/1e3+" km"},_updateImperial:function(t){var i,s,e,o=3.2808399*t,n=this._iScale;o>5280?(i=o/5280,s=this._getRoundNum(i),n.style.width=this._getScaleWidth(s/i)+"px",n.innerHTML=s+" mi"):(e=this._getRoundNum(o),n.style.width=this._getScaleWidth(e/o)+"px",n.innerHTML=e+" ft")},_getScaleWidth:function(t){return Math.round(this.options.maxWidth*t)-10},_getRoundNum:function(t){var i=Math.pow(10,(Math.floor(t)+"").length-1),s=t/i;return s=s>=10?10:s>=5?5:s>=3?3:s>=2?2:1,i*s}}),e.control.scale=function(t){return new e.Control.Scale(t)},e.Control.Layers=e.Control.extend({options:{collapsed:!0,position:"topright",autoZIndex:!0},initialize:function(t,i,s){e.setOptions(this,s),this._layers={},this._lastZIndex=0,this._handlingClick=!1;for(var o in t)t.hasOwnProperty(o)&&this._addLayer(t[o],o);for(o in i)i.hasOwnProperty(o)&&this._addLayer(i[o],o,!0)},onAdd:function(t){return this._initLayout(),this._update(),t.on("layeradd",this._onLayerChange,this).on("layerremove",this._onLayerChange,this),this._container},onRemove:function(t){t.off("layeradd",this._onLayerChange).off("layerremove",this._onLayerChange)},addBaseLayer:function(t,i){return this._addLayer(t,i),this._update(),this},addOverlay:function(t,i){return this._addLayer(t,i,!0),this._update(),this},removeLayer:function(t){var i=e.stamp(t);return delete this._layers[i],this._update(),this},_initLayout:function(){var t="leaflet-control-layers",i=this._container=e.DomUtil.create("div",t);e.Browser.touch?e.DomEvent.on(i,"click",e.DomEvent.stopPropagation):(e.DomEvent.disableClickPropagation(i),e.DomEvent.on(i,"mousewheel",e.DomEvent.stopPropagation));var s=this._form=e.DomUtil.create("form",t+"-list");if(this.options.collapsed){e.DomEvent.on(i,"mouseover",this._expand,this).on(i,"mouseout",this._collapse,this);var o=this._layersLink=e.DomUtil.create("a",t+"-toggle",i);o.href="#",o.title="Layers",e.Browser.touch?e.DomEvent.on(o,"click",e.DomEvent.stopPropagation).on(o,"click",e.DomEvent.preventDefault).on(o,"click",this._expand,this):e.DomEvent.on(o,"focus",this._expand,this),this._map.on("movestart",this._collapse,this)}else this._expand();this._baseLayersList=e.DomUtil.create("div",t+"-base",s),this._separator=e.DomUtil.create("div",t+"-separator",s),this._overlaysList=e.DomUtil.create("div",t+"-overlays",s),i.appendChild(s)},_addLayer:function(t,i,s){var o=e.stamp(t);this._layers[o]={layer:t,name:i,overlay:s},this.options.autoZIndex&&t.setZIndex&&(this._lastZIndex++,t.setZIndex(this._lastZIndex))},_update:function(){if(this._container){this._baseLayersList.innerHTML="",this._overlaysList.innerHTML="";var t=!1,i=!1;for(var s in this._layers)if(this._layers.hasOwnProperty(s)){var e=this._layers[s];this._addItem(e),i=i||e.overlay,t=t||!e.overlay}this._separator.style.display=i&&t?"":"none"}},_onLayerChange:function(t){var i=e.stamp(t.layer);this._layers[i]&&!this._handlingClick&&this._update()},_createRadioElement:function(t,s){var e='t;t++)i=o[t],s=this._layers[i.layerId],i.checked&&!this._map.hasLayer(s.layer)?(this._map.addLayer(s.layer),s.overlay||(e=s.layer)):!i.checked&&this._map.hasLayer(s.layer)&&this._map.removeLayer(s.layer);e&&(this._map.setZoom(this._map.getZoom()),this._map.fire("baselayerchange",{layer:e})),this._handlingClick=!1},_expand:function(){e.DomUtil.addClass(this._container,"leaflet-control-layers-expanded")},_collapse:function(){this._container.className=this._container.className.replace(" leaflet-control-layers-expanded","")}}),e.control.layers=function(t,i,s){return new e.Control.Layers(t,i,s)},e.PosAnimation=e.Class.extend({includes:e.Mixin.Events,run:function(t,i,s,o){this.stop(),this._el=t,this._inProgress=!0,this.fire("start"),t.style[e.DomUtil.TRANSITION]="all "+(s||.25)+"s cubic-bezier(0,0,"+(o||.5)+",1)",e.DomEvent.on(t,e.DomUtil.TRANSITION_END,this._onTransitionEnd,this),e.DomUtil.setPosition(t,i),e.Util.falseFn(t.offsetWidth),this._stepTimer=setInterval(e.bind(this.fire,this,"step"),50)},stop:function(){this._inProgress&&(e.DomUtil.setPosition(this._el,this._getPos()),this._onTransitionEnd(),e.Util.falseFn(this._el.offsetWidth))},_transformRe:/(-?[\d\.]+), (-?[\d\.]+)\)/,_getPos:function(){var i,s,o,n=this._el,a=t.getComputedStyle(n);return e.Browser.any3d?(o=a[e.DomUtil.TRANSFORM].match(this._transformRe),i=parseFloat(o[1]),s=parseFloat(o[2])):(i=parseFloat(a.left),s=parseFloat(a.top)),new e.Point(i,s,!0)},_onTransitionEnd:function(){e.DomEvent.off(this._el,e.DomUtil.TRANSITION_END,this._onTransitionEnd,this),this._inProgress&&(this._inProgress=!1,this._el.style[e.DomUtil.TRANSITION]="",clearInterval(this._stepTimer),this.fire("step").fire("end"))}}),e.Map.include({setView:function(t,i,s){i=this._limitZoom(i);var e=this._zoom!==i;if(this._loaded&&!s&&this._layers){this._panAnim&&this._panAnim.stop();var o=e?this._zoomToIfClose&&this._zoomToIfClose(t,i):this._panByIfClose(t);if(o)return clearTimeout(this._sizeTimer),this}return this._resetView(t,i),this},panBy:function(t,i,s){if(t=e.point(t),!t.x&&!t.y)return this;this._panAnim||(this._panAnim=new e.PosAnimation,this._panAnim.on({step:this._onPanTransitionStep,end:this._onPanTransitionEnd},this)),this.fire("movestart"),e.DomUtil.addClass(this._mapPane,"leaflet-pan-anim");var o=e.DomUtil.getPosition(this._mapPane).subtract(t)._round();return this._panAnim.run(this._mapPane,o,i||.25,s),this},_onPanTransitionStep:function(){this.fire("move")},_onPanTransitionEnd:function(){e.DomUtil.removeClass(this._mapPane,"leaflet-pan-anim"),this.fire("moveend")},_panByIfClose:function(t){var i=this._getCenterOffset(t)._floor();return this._offsetIsWithinView(i)?(this.panBy(i),!0):!1},_offsetIsWithinView:function(t,i){var s=i||1,e=this.getSize();return Math.abs(t.x)<=e.x*s&&Math.abs(t.y)<=e.y*s}}),e.PosAnimation=e.DomUtil.TRANSITION?e.PosAnimation:e.PosAnimation.extend({run:function(t,i,s,o){this.stop(),this._el=t,this._inProgress=!0,this._duration=s||.25,this._easeOutPower=1/Math.max(o||.5,.2),this._startPos=e.DomUtil.getPosition(t),this._offset=i.subtract(this._startPos),this._startTime=+new Date,this.fire("start"),this._animate()},stop:function(){this._inProgress&&(this._step(),this._complete())},_animate:function(){this._animId=e.Util.requestAnimFrame(this._animate,this),this._step()},_step:function(){var t=+new Date-this._startTime,i=1e3*this._duration;i>t?this._runFrame(this._easeOut(t/i)):(this._runFrame(1),this._complete())},_runFrame:function(t){var i=this._startPos.add(this._offset.multiplyBy(t));e.DomUtil.setPosition(this._el,i),this.fire("step")},_complete:function(){e.Util.cancelAnimFrame(this._animId),this._inProgress=!1,this.fire("end")},_easeOut:function(t){return 1-Math.pow(1-t,this._easeOutPower)}}),e.Map.mergeOptions({zoomAnimation:e.DomUtil.TRANSITION&&!e.Browser.android23&&!e.Browser.mobileOpera}),e.DomUtil.TRANSITION&&e.Map.addInitHook(function(){e.DomEvent.on(this._mapPane,e.DomUtil.TRANSITION_END,this._catchTransitionEnd,this)}),e.Map.include(e.DomUtil.TRANSITION?{_zoomToIfClose:function(t,i){if(this._animatingZoom)return!0;if(!this.options.zoomAnimation)return!1;var s=this.getZoomScale(i),o=this._getCenterOffset(t)._divideBy(1-1/s);if(!this._offsetIsWithinView(o,1))return!1;e.DomUtil.addClass(this._mapPane,"leaflet-zoom-anim"),this.fire("movestart").fire("zoomstart"),this.fire("zoomanim",{center:t,zoom:i});var n=this._getCenterLayerPoint().add(o);return this._prepareTileBg(),this._runAnimation(t,i,s,n),!0},_catchTransitionEnd:function(){this._animatingZoom&&this._onZoomTransitionEnd()},_runAnimation:function(t,i,s,o,n){this._animateToCenter=t,this._animateToZoom=i,this._animatingZoom=!0,e.Draggable&&(e.Draggable._disabled=!0);var a=e.DomUtil.TRANSFORM,r=this._tileBg;clearTimeout(this._clearTileBgTimer),e.Util.falseFn(r.offsetWidth);var h=e.DomUtil.getScaleString(s,o),l=r.style[a];r.style[a]=n?l+" "+h:h+" "+l},_prepareTileBg:function(){var t=this._tilePane,i=this._tileBg;if(i&&this._getLoadedTilesPercentage(i)>.5&&.5>this._getLoadedTilesPercentage(t))return t.style.visibility="hidden",t.empty=!0,this._stopLoadingImages(t),s;i||(i=this._tileBg=this._createPane("leaflet-tile-pane",this._mapPane),i.style.zIndex=1),i.style[e.DomUtil.TRANSFORM]="",i.style.visibility="hidden",i.empty=!0,t.empty=!1,this._tilePane=this._panes.tilePane=i;var o=this._tileBg=t;e.DomUtil.addClass(o,"leaflet-zoom-animated"),this._stopLoadingImages(o)},_getLoadedTilesPercentage:function(t){var i,s,e=t.getElementsByTagName("img"),o=0;for(i=0,s=e.length;s>i;i++)e[i].complete&&o++;return o/s},_stopLoadingImages:function(t){var i,s,o,n=Array.prototype.slice.call(t.getElementsByTagName("img"));for(i=0,s=n.length;s>i;i++)o=n[i],o.complete||(o.onload=e.Util.falseFn,o.onerror=e.Util.falseFn,o.src=e.Util.emptyImageUrl,o.parentNode.removeChild(o))},_onZoomTransitionEnd:function(){this._restoreTileFront(),e.DomUtil.removeClass(this._mapPane,"leaflet-zoom-anim"),e.Util.falseFn(this._tileBg.offsetWidth),this._animatingZoom=!1,this._resetView(this._animateToCenter,this._animateToZoom,!0,!0),e.Draggable&&(e.Draggable._disabled=!1)},_restoreTileFront:function(){this._tilePane.innerHTML="",this._tilePane.style.visibility="",this._tilePane.style.zIndex=2,this._tileBg.style.zIndex=1},_clearTileBg:function(){this._animatingZoom||this.touchZoom._zooming||(this._tileBg.innerHTML="")}}:{}),e.Map.include({_defaultLocateOptions:{watch:!1,setView:!1,maxZoom:1/0,timeout:1e4,maximumAge:0,enableHighAccuracy:!1},locate:function(t){if(t=this._locationOptions=e.extend(this._defaultLocateOptions,t),!navigator.geolocation)return this._handleGeolocationError({code:0,message:"Geolocation not supported."}),this;var i=e.bind(this._handleGeolocationResponse,this),s=e.bind(this._handleGeolocationError,this);return t.watch?this._locationWatchId=navigator.geolocation.watchPosition(i,s,t):navigator.geolocation.getCurrentPosition(i,s,t),this},stopLocate:function(){return navigator.geolocation&&navigator.geolocation.clearWatch(this._locationWatchId),this},_handleGeolocationError:function(t){var i=t.code,s=t.message||(1===i?"permission denied":2===i?"position unavailable":"timeout");this._locationOptions.setView&&!this._loaded&&this.fitWorld(),this.fire("locationerror",{code:i,message:"Geolocation error: "+s+"."})},_handleGeolocationResponse:function(t){var i=180*t.coords.accuracy/4e7,s=2*i,o=t.coords.latitude,n=t.coords.longitude,a=new e.LatLng(o,n),r=new e.LatLng(o-i,n-s),h=new e.LatLng(o+i,n+s),l=new e.LatLngBounds(r,h),c=this._locationOptions;if(c.setView){var m=Math.min(this.getBoundsZoom(l),c.maxZoom);this.setView(a,m)}this.fire("locationfound",{latlng:a,bounds:l,accuracy:t.coords.accuracy})}})}(this,document),L.Proj={},L.Proj._isProj4Proj=function(t){return t.projName!==void 0},L.Proj.Projection=L.Class.extend({initialize:function(t,i){if(L.Proj._isProj4Proj(t))this._proj=t;else{var s=t;Proj4js.defs[s]=i,this._proj=new Proj4js.Proj(s)}},project:function(t){var i=new L.Point(t.lng,t.lat);return Proj4js.transform(Proj4js.WGS84,this._proj,i)},unproject:function(t,i){var s=Proj4js.transform(this._proj,Proj4js.WGS84,t.clone());return new L.LatLng(s.y,s.x,i)}}),L.Proj.CRS=L.Class.extend({includes:L.CRS,options:{transformation:new L.Transformation(1,0,-1,0)},initialize:function(t,i,s){var e,o,n,a;L.Proj._isProj4Proj(t)?(o=t,e=o.srsCode,a=i||{},this.projection=new L.Proj.Projection(o)):(e=t,n=i,a=s||{},this.projection=new L.Proj.Projection(e,n)),L.Util.setOptions(this,a),this.code=e,this.transformation=this.options.transformation,this.options.origin&&(this.transformation=new L.Transformation(1,-this.options.origin[0],-1,this.options.origin[1])),this.options.scales?this.scale=function(t){return this.options.scales[t]}:this.options.resolutions&&(this.scale=function(t){return 1/this.options.resolutions[t]})}}),L.Proj.CRS.TMS=L.Proj.CRS.extend({initialize:function(t,i,s,e){if(L.Proj._isProj4Proj(t)){var o=t,n=i,a=s||{};a.origin=[n[0],n[3]],L.Proj.CRS.prototype.initialize(o,a)}else{var r=t,h=i,n=s,a=e||{};a.origin=[n[0],n[3]],L.Proj.CRS.prototype.initialize(r,h,a)}this.projectedBounds=n}}),L.Proj.TileLayer={},L.Proj.TileLayer.TMS=L.TileLayer.extend({options:{tms:!0,continuousWorld:!0},initialize:function(t,i,s){if(!(i instanceof L.Proj.CRS.TMS))throw Error("CRS is not L.Proj.CRS.TMS.");L.TileLayer.prototype.initialize.call(this,t,s),this.crs=i;for(var e=this.options.minZoom;this.options.maxZoom>e;e++){var o=(this.crs.projectedBounds[3]-this.crs.projectedBounds[1])/this._projectedTileSize(e);if(Math.abs(o-Math.round(o))>.001)throw Error("Projected bounds does not match grid at zoom "+e)}},getTileUrl:function(t){var i=Math.round((this.crs.projectedBounds[3]-this.crs.projectedBounds[1])/this._projectedTileSize(this._map.getZoom()));return L.Util.template(this._url,L.Util.extend({s:this._getSubdomain(t),z:this._getZoomForUrl(),x:t.x,y:i-t.y-1},this.options))},_projectedTileSize:function(t){return this.options.tileSize/this.crs.scale(t)}}),"undefined"!=typeof module&&(module.exports=L.Proj),"undefined"!=typeof L&&L.CRS!==void 0&&(L.CRS.proj4js=function(){return function(t,i,s,e){return e=e||{},s&&(e.transformation=s),new L.Proj.CRS(t,i,e)}}()),L.Control.MousePosition=L.Control.extend({options:{position:"bottomleft",separator:" : ",emptyString:"Unavailable",lngFirst:!1,numDigits:5,lngFormatter:void 0,latFormatter:void 0},onAdd:function(t){return this._container=L.DomUtil.create("div","leaflet-control-mouseposition"),L.DomEvent.disableClickPropagation(this._container),t.on("mousemove",this._onMouseMove,this),this._container.innerHTML=this.options.emptyString,this._container},onRemove:function(t){t.off("mousemove",this._onMouseMove)},_onMouseMove:function(t){var i=L.Util.formatNum(t.latlng.lng,this.options.numDigits),s=L.Util.formatNum(t.latlng.lat,this.options.numDigits);this.options.lngFormatter&&(i=this.options.lngFormatter(i)),this.options.latFormatter&&(s=this.options.latFormatter(s));var e=this.options.lngFirst?i+this.options.separator+s:s+this.options.separator+i;this._container.innerHTML=e}}),L.Map.mergeOptions({positionControl:!1}),L.Map.addInitHook(function(){this.options.positionControl&&(this.positionControl=new L.Control.MousePosition,this.addControl(this.positionControl))}),L.control.mousePosition=function(t){return new L.Control.MousePosition(t)},function(t,i){L.KSP={},L.KSP.version="0.2.1",L.KSP.CRS={},L.KSP.CRS.EPSG4326=new L.Proj.CRS.TMS(new Proj4js.Proj("EPSG:4326"),[-180,-90,180,90],{resolutions:[.703125,.3515625,.17578125,.087890625,.0439453125,.02197265625]}),L.KSP.CelestialBody=L.Class.extend({initialize:function(t){if(!t.hasOwnProperty("id"))throw Error("must specify id");if(!t.hasOwnProperty("name"))throw Error("must specify name");if(t.hasOwnProperty("crs")){if(!(t.crs instanceof L.Proj.CRS.TMS))throw Error("crs is not an instance of L.Proj.CRS.TMS")}else this.crs=L.KSP.CRS.EPSG4326;t.hasOwnProperty("radius")||(this.radius=1),t.hasOwnProperty("thumbnail")||(this.thumbnail="body-unknown.png"),t.hasOwnProperty("baseLayers")||(this.baseLayers={}),L.Util.extend(this,t)},addTo:function(t){var i,s=t._body;if(t._body=this,t.fire("bodychangestart",{body:this,oldBody:s}),s){for(i in s.baseLayers)s.baseLayers.hasOwnProperty(i)&&t.removeLayer(s.baseLayers[i]);for(i in s.overlays)s.overlays.hasOwnProperty(i)&&t.removeLayer(s.overlays[i])}var e=this.defaultLayer||this.baseLayers.Satellite;if(e){for(i in this.baseLayers)if(this.baseLayers.hasOwnProperty(i)&&this.baseLayers[i]._type===t._baseLayerType){e=this.baseLayers[i];break}t.addLayer(e),t.fire("baselayerchange",{layer:e})}for(i in this.overlays)this.overlays.hasOwnProperty(i)&&t._overlayTypes.indexOf(this.overlays[i]._type)>=0&&(t.addLayer(this.overlays[i]),t.fire("layeradd",{layer:this.overlays[i]}));t.fire("bodychangeend",{body:this,oldBody:s})},onAdd:function(t){this.addTo(t)},removeFrom:function(t){L.KSP.CelestialBody.DUMMY.addTo(t)},onRemove:function(t){this.removeFrom(t)}}),L.KSP.celestialBody=function(t){return new L.KSP.CelestialBody(t)},L.KSP.CelestialBody.DUMMY=L.KSP.celestialBody({id:"",name:"",crs:L.KSP.CRS.EPSG4326}),L.KSP.CelestialBody.ALL_PLANETARY=[L.KSP.CelestialBody.DUMMY],L.KSP.Map=L.Map.extend({options:{crs:L.KSP.CRS.EPSG4326,continuousWorld:!0},initialize:function(t,i){this._baseLayerType=-1,this._overlayTypes=[],L.Util.setOptions(this,i),this.startTrackingLayerState(),this.on("bodychangestart",this._onBodyChangeStart).on("bodychangeend",this._onBodyChangeEnd),L.Map.prototype.initialize.call(this,t,this.options)},clampZoom:function(){var t=this.getZoom(),i=this.getMinZoom(),s=this.getMaxZoom();i>t?this.setZoom(i):t>s?this.setZoom(s):this.fire("zoomend",this)},_onBodyChangeStart:function(){this.stopTrackingLayerState()},_onBodyChangeEnd:function(){this.clampZoom(),this.startTrackingLayerState()},_onLayerStateChange:function(t){if("layeradd"===t.type)t.layer instanceof L.KSP.TileLayer?this._baseLayerType=t.layer._type:t.layer instanceof L.KSP.LayerGroup&&0>this._overlayTypes.indexOf(t.layer._type)&&this._overlayTypes.push(t.layer._type);else if(t.layer instanceof L.KSP.LayerGroup){var i,s,e=t.layer._type,o=this._overlayTypes;for(i=o.length-1;i>=0;i--)s=o[i],s===e&&o.splice(i,1)}},startTrackingLayerState:function(){this.on("layeradd",this._onLayerStateChange).on("layerremove",this._onLayerStateChange)},stopTrackingLayerState:function(){this.off("layeradd",this._onLayerStateChange).off("layerremove",this._onLayerStateChange)}}),L.KSP.map=function(t,i){return new L.KSP.Map(t,i)},L.KSP.TileLayer=L.Proj.TileLayer.TMS.extend({statics:{TYPE_SATELLITE:0,TYPE_COLORRELIEF:1,TYPE_SLOPE:2,DEFAULT_URL:"http://tiles.kerbalmaps.com/{body}/{style}/{z}/{x}/{y}.png"},options:{continuousWorld:!1,noWrap:!1,minZoom:0,maxZoom:5,attribution:"Map data © Joel Pedraza"},initialize:function(t,i,s,e){L.Util.setOptions(this,e),this._type=t,L.Proj.TileLayer.TMS.prototype.initialize.call(this,i,s,this.options)}}),L.KSP.tileLayer=function(t,i,s,e){return new L.KSP.TileLayer(t,i,s,e)},L.KSP.LayerGroup=L.LayerGroup.extend({statics:{TYPE_SPACECENTER:0,TYPE_ANOMALY:1},initialize:function(t,i){this._type=t,L.LayerGroup.prototype.initialize.call(this,i)}}),L.KSP.layerGroup=function(t,i){return new L.KSP.LayerGroup(t,i)},L.KSP.Icon={},L.KSP.Icon.SPACECENTER=new L.Icon({iconUrl:"../assets/images/markers-spacecenter.png",shadowUrl:"../assets/images/markers-shadow.png",iconSize:[30,40],shadowSize:[35,16],iconAnchor:[15,40],shadowAnchor:[10,12],popupAnchor:[0,-35]}),L.KSP.Icon.ANOMALY=new L.Icon({iconUrl:"../assets/images/markers-anomaly.png",shadowUrl:"../assets/images/markers-shadow.png",iconSize:[30,40],shadowSize:[35,16],iconAnchor:[15,40],shadowAnchor:[10,12],popupAnchor:[0,-35]}),L.KSP.Legend={},L.KSP.Legend.SLOPE={"≥ 60°":"#E19678","< 60°":"#C86464","< 30°":"#965A64","< 15°":"#645064","< 5°":"#325064","0°":"#32465A"},L.KSP.Control=L.KSP.control={},L.KSP.Control.Legend=L.Control.extend({options:{position:"bottomright"},onAdd:function(t){return this._container=L.DomUtil.create("div","leaflet-control-legend"),t.on("baselayerchange",this._onLayerChange,this),this._container},_update:function(t){if(this._container.innerHTML="",t){for(var i in t)t.hasOwnProperty(i)&&(this._container.innerHTML+=''+i+"
    ");L.DomUtil.addClass(this._container,"leaflet-control-legend-visible")}else this._container.className=this._container.className.replace(" leaflet-control-legend-visible","")},_onLayerChange:function(t){this._update(t.layer.options.legend)}}),L.Map.mergeOptions({legendControl:!0}),L.Map.addInitHook(function(){this.options.bodyControl&&(this.legendControl=new L.KSP.Control.Legend,this.addControl(this.legendControl))}),L.control.legend=function(t){return new L.KSP.Control.Legend(t)},L.KSP.Control.Scale=L.Control.Scale.extend({options:{imperial:!1},onAdd:function(t){this._radius=0,t._body&&(this._radius=t._body.radius);var i=L.Control.Scale.prototype.onAdd.call(this,t);return t.on("bodychangeend",this._onBodyChangeEnd,this),i},onRemove:function(t){L.Control.Scale.prototype.onRemove.call(this,t),t.off("bodychangeend",this._onBodyChangeEnd)},_onBodyChangeEnd:function(t){this._radius=t.body.radius,this._update()},_update:function(){var t=this._map.getBounds(),i=t.getCenter().lat,s=this._radius*Math.PI*Math.cos(i*Math.PI/180),e=s*(t.getNorthEast().lng-t.getSouthWest().lng)/180,o=this._map.getSize(),n=this.options,a=0;o.x>0&&(a=e*(n.maxWidth/o.x)),this._updateScales(n,a)}}),L.KSP.Map.mergeOptions({scaleControl:!1}),L.KSP.Map.addInitHook(function(){this.options.scaleControl&&(this.scaleControl=new L.KSP.Control.Scale,this.addControl(this.scaleControl))}),L.KSP.control.scale=function(t){return new L.KSP.Control.Scale(t)},L.KSP.Control.CelestialBody=L.Control.extend({options:{position:"topright",collapsed:!0},initialize:function(t,i){L.Util.setOptions(this,i),this._bodies=t,this._timeInMillis=(new Date).valueOf(),this._weekInMillis=6048e5},onAdd:function(){return this._initLayout(),this._update(),this._map.on("bodychangeend",this._update,this),this._container},_initLayout:function(){var t="leaflet-control-celestialbodies",s=this._container=L.DomUtil.create("div",t),e=this._bodies;if(this.options.collapsed){L.DomEvent.on(s,"mouseover",this._expand,this).on(s,"mouseout",this._collapse,this);var o=this._bodiesLink=L.DomUtil.create("a",t+"-toggle",s);o.href="#",o.title="Celestial Bodies",L.DomEvent.on(o,"focus",this._expand,this),this._map.on("movestart",this._collapse,this)}var n=this._list=L.DomUtil.create("ul",t+"-list",s);for(var a in e)if(e.hasOwnProperty(a)){var r=this._addBody(e[a],n);if(e[a].children){var h=i.createElement("ul");for(var l in e[a].children)e[a].children.hasOwnProperty(l)&&this._addBody(e[a].children[l],h);r.appendChild(h)}}},_update:function(){this._map._body&&(this._bodiesLink.style.backgroundImage='url("'+this._map._body.thumbnail+'")')},_addBody:function(t,s){var e,o=i.createElement("li"),n=i.createElement("img");if(n.src=t.thumbnail,n.alt=o.title=t.name,t.addedOn){this._timeInMillis-t.addedOnKerbal Space Center
    -0.0969 : -74.6004"),L.marker([20.5829,-146.5116],{icon:L.KSP.Icon.SPACECENTER}).bindPopup("Kerbal Space Center 2
    20.5829 : -146.5116"),L.marker([-1.5409,-71.9099],{icon:L.KSP.Icon.SPACECENTER}).bindPopup("Island Airfield
    -1.5409 : -71.9099")]),Anomalies:L.KSP.layerGroup(L.KSP.LayerGroup.TYPE_ANOMALY,[L.marker([.1023,-74.5684],{icon:L.KSP.Icon.ANOMALY}).bindPopup("0.1023 : -74.5684"),L.marker([20.6709,-146.4968],{icon:L.KSP.Icon.ANOMALY}).bindPopup("20.6709 : -146.4968"),L.marker([35.5705,-74.9773],{icon:L.KSP.Icon.ANOMALY}).bindPopup("35.5705 : -74.9773"),L.marker([-.6402,-80.7668],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-0.6402 : -80.7668"),L.marker([-28.8083,-13.4401],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-28.8083 : -13.4401"),L.marker([-6.5057,-141.6856],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-6.5057 : -141.6856"),L.marker([81.9551,-128.518],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-81.9551 : -128.518")])}}),L.KSP.CelestialBody.MUN=L.KSP.celestialBody({id:"mun",name:"Mun",crs:L.KSP.CRS.EPSG4326,radius:2e5,addedOn:13682304e5,lastUpdated:1368144e6,thumbnail:"body-mun.png",baseLayers:{Satellite:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SATELLITE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{body:"mun",style:"sat"}),"Color Relief":L.KSP.tileLayer(L.KSP.TileLayer.TYPE_COLORRELIEF,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{body:"mun",style:"color",legend:{"3150 m":"#EBEBEB","-180 m":"#232323"}}),Slope:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SLOPE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{body:"mun",style:"slope",legend:L.KSP.Legend.SLOPE})},overlays:{Anomalies:L.KSP.layerGroup(L.KSP.LayerGroup.TYPE_ANOMALY,[L.marker([-9.8314,25.9177],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-9.8314 : 25.9177"),L.marker([-82.2063,102.9305],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-82.2063 : 102.9305"),L.marker([57.6604,9.1422],{icon:L.KSP.Icon.ANOMALY}).bindPopup("57.6604 : 9.1422"),L.marker([2.4695,81.5133],{icon:L.KSP.Icon.ANOMALY}).bindPopup("2.4695 : 81.5133"),L.marker([12.4432,39.178],{icon:L.KSP.Icon.ANOMALY}).bindPopup("12.4432 : 39.1780"),L.marker([-12.4431,-140.822],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-12.4431 : -140.8220"),L.marker([.7027,22.747],{icon:L.KSP.Icon.ANOMALY}).bindPopup("0.7027 : 22.7470"),L.marker([-70.9556,-68.1378],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-70.9556,-68.1378")])}}),L.KSP.CelestialBody.MINMUS=L.KSP.celestialBody({id:"minmus",name:"Minmus",crs:L.KSP.CRS.EPSG4326,radius:6e4,addedOn:13682304e5,lastUpdated:13682304e5,thumbnail:"body-minmus.png",baseLayers:{Satellite:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SATELLITE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"sat",body:"minmus"}),"Color Relief":L.KSP.tileLayer(L.KSP.TileLayer.TYPE_COLORRELIEF,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"color",body:"minmus",legend:{"5750 m":"#414B41","2500 m":"#BEE6C3","1 m":"#96CDB4","0 m":"#87B9A5"}}),Slope:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SLOPE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"slope",body:"minmus",legend:L.KSP.Legend.SLOPE})},overlays:{Anomalies:L.KSP.layerGroup(L.KSP.LayerGroup.TYPE_ANOMALY,[L.marker([23.7768,60.0462],{icon:L.KSP.Icon.ANOMALY}).bindPopup("23.7768 : 60.0462")])}}),L.KSP.CelestialBody.DUNA=L.KSP.celestialBody({id:"duna",name:"Duna",crs:L.KSP.CRS.EPSG4326,radius:32e4,addedOn:13688352e5,lastUpdated:13688352e5,thumbnail:"body-duna.png",baseLayers:{Satellite:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SATELLITE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"sat",body:"duna"}),"Color Relief":L.KSP.tileLayer(L.KSP.TileLayer.TYPE_COLORRELIEF,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"color",body:"duna",legend:{"4800 m":"#C3A082","4000 m":"#966446","3000 m":"#733219","2000 m":"#501E14","1000 m":"#3C140F","0 m":"#280F0A"}}),Slope:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SLOPE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"slope",body:"duna",legend:L.KSP.Legend.SLOPE})},overlays:{Anomalies:L.KSP.layerGroup(L.KSP.LayerGroup.TYPE_ANOMALY,[L.marker([17.0483,-85.4717],{icon:L.KSP.Icon.ANOMALY}).bindPopup("17.0483 : -85.4717"),L.marker([-30.3525,-28.6828],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-30.3525 : -28.6828"),L.marker([-66.1344,-160.7432],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-66.1344 : -160.7432")])}}),L.KSP.CelestialBody.IKE=L.KSP.celestialBody({id:"ike",name:"Ike",crs:L.KSP.CRS.EPSG4326,radius:13e4,addedOn:13688352e5,lastUpdated:13688352e5,thumbnail:"body-ike.png",baseLayers:{Satellite:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SATELLITE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"sat",body:"ike"}),"Color Relief":L.KSP.tileLayer(L.KSP.TileLayer.TYPE_COLORRELIEF,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"color",body:"ike",legend:{"13000 m":"#828282","11000 m":"#6E6E6E","9000 m":"#5A5A5A","7000 m":"#464646","5000 m":"#323232","2500 m":"#191919","70 m":"#070707"}}),Slope:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SLOPE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"slope",body:"ike",legend:L.KSP.Legend.SLOPE})},overlays:{}}),L.KSP.CelestialBody.DRES=L.KSP.celestialBody({id:"dres",name:"Dres",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-dres.png"}),L.KSP.CelestialBody.JOOL=L.KSP.celestialBody({id:"jool",name:"Jool",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-jool.png"}),L.KSP.CelestialBody.LAYTHE=L.KSP.celestialBody({id:"laythe",name:"Laythe",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-laythe.png"}),L.KSP.CelestialBody.VALL=L.KSP.celestialBody({id:"vall",name:"Vall",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-vall.png"}),L.KSP.CelestialBody.TYLO=L.KSP.celestialBody({id:"tylo",name:"Tylo",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-tylo.png"}),L.KSP.CelestialBody.BOP=L.KSP.celestialBody({id:"bop",name:"Bop",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-bop.png"}),L.KSP.CelestialBody.POL=L.KSP.celestialBody({id:"pol",name:"Pol",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-pol.png"}),L.KSP.CelestialBody.EELOO=L.KSP.celestialBody({id:"eeloo",name:"Eeloo",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-eeloo.png"}),L.KSP.CelestialBody.KERBIN.defaultLayer=L.KSP.CelestialBody.KERBIN.baseLayers.Satellite,L.KSP.CelestialBody.MUN.defaultLayer=L.KSP.CelestialBody.MUN.baseLayers.Satellite,L.KSP.CelestialBody.MINMUS.defaultLayer=L.KSP.CelestialBody.MINMUS.baseLayers.Satellite,L.KSP.CelestialBody.EVE.children=[L.KSP.CelestialBody.GILLY],L.KSP.CelestialBody.KERBIN.children=[L.KSP.CelestialBody.MUN,L.KSP.CelestialBody.MINMUS],L.KSP.CelestialBody.DUNA.children=[L.KSP.CelestialBody.IKE],L.KSP.CelestialBody.JOOL.children=[L.KSP.CelestialBody.LAYTHE,L.KSP.CelestialBody.VALL,L.KSP.CelestialBody.TYLO,L.KSP.CelestialBody.BOP,L.KSP.CelestialBody.POL],L.KSP.CelestialBody.GILLY.parent=L.KSP.CelestialBody.EVE,L.KSP.CelestialBody.MUN.parent=L.KSP.CelestialBody.MINMUS.parent=L.KSP.CelestialBody.KERBIN,L.KSP.CelestialBody.IKE.parent=L.KSP.CelestialBody.DUNA,L.KSP.CelestialBody.LAYTHE.parent=L.KSP.CelestialBody.VALL.parent=L.KSP.CelestialBody.TYLO.parent=L.KSP.CelestialBody.BOP.parent=L.KSP.CelestialBody.POL.parent=L.KSP.CelestialBody.JOOL,L.KSP.CelestialBody.ALL_PLANETARY=[L.KSP.CelestialBody.MOHO,L.KSP.CelestialBody.EVE,L.KSP.CelestialBody.KERBIN,L.KSP.CelestialBody.DUNA,L.KSP.CelestialBody.DRES,L.KSP.CelestialBody.JOOL,L.KSP.CelestialBody.EELOO],L.KSP.Map.addInitHook(function(){this.options.layers=[L.KSP.CelestialBody.KERBIN]})}(this,document); +var Settings = Class.create({ + initialize: function(defaultHost, defaultPort){ + if(!this.getHost()){ this.setHost(defaultHost)} + if(!this.getPort()){ this.setPort(defaultPort)} + }, + + getHost: function(){ + return this.get('host') + }, + + getPort: function(){ + return this.get('port') + }, + + setHost: function(value){ + return this.set('host', value) + }, + + setPort: function(value){ + return this.set('port', value) + }, + + get: function(property){ + return localStorage.getItem(property) + }, + + set: function(property, value){ + return localStorage.setItem(property, value) + } +}) +var Telemachus = Class.create({ + initialize: function(host, port){ + this.updateConnection(host, port) + this.receiverFunctions = [] + this.subscribedFields = {} + this.orbitingBodies = this.getOrbitalBodies() + this.rate = 500 + + this.loopTimeout = setTimeout(this.poll.bind(this), this.rate) + }, + + url: function(){ + return "http://" + this.host + ":" + this.port + "/telemachus/datalink" + }, + + updateConnection: function(host, port){ + this.host = host + this.port = port + }, + + addReceiverFunction: function(func){ + this.receiverFunctions.push(func) + }, + + subscribeToData: function(fields){ + for (var i = fields.length - 1; i >= 0; i--) { + var field = fields[i] + this.subscribedFields[field] = field + }; + }, + + dispatchMessages: function(data){ + for (var i = this.receiverFunctions.length - 1; i >= 0; i--) { + try{ + this.receiverFunctions[i](data) + } catch(e){ + console.error(e) + } + }; + }, + + send: function(message){ + this.socket.send(JSON.stringify(message)) + }, + + getOrbitalBodyInfo: function(name){ + var properties = this.orbitingBodies[name] + + if(properties){ + return Object.extend({name: name}, properties) + } else{ + return null + } + }, + + notifyIfLOS: function(request){ + if(request.transport.status == 0){ + document.fire('telemachus:loss-of-signal') + return true + } + return false + }, + + prepareParams: function(params){ + var normalizedParams = [] + Object.keys(params).forEach(function(field){ + var sanitizedFieldName = field.replace("[", "{").replace("]","}") + normalizedParams.push(sanitizedFieldName + "=" + field) + }) + return normalizedParams + }, + + convertData: function(rawData){ + var data = {} + var startBracesRegexp = /\{/g + var endBracesRegexp = /\}/g + + Object.keys(rawData).forEach(function(key){ + var convertedFieldName = key.replace(startBracesRegexp, "[").replace(endBracesRegexp, "]") + data[convertedFieldName] = rawData[key] + }) + + return data + }, + + poll: function(){ + var params = this.prepareParams(this.subscribedFields) + var requestURL = this.url() + "?" + params.join("&") + + new Ajax.Request(requestURL, { + method: "get", + onSuccess: function(response){ + var rawData = JSON.parse(response.responseText) + var data = this.convertData(rawData) + + this.dispatchMessages(data) + }.bind(this), + onException: this.notifyIfLOS.bind(this), + onComplete: function(response){ + setTimeout(this.poll.bind(this),this.rate); + }.bind(this) + }) + }, + + sendMessage: function(params, callback){ + new Ajax.Request(this.url(), { + method: "post", + postBody: JSON.stringify(params), + // parameters: params, + onSuccess: function(response){ + var rawData = JSON.parse(response.responseText) + var data = this.convertData(rawData) + callback(data) + }.bind(this), + onException: this.notifyIfLOS.bind(this) + }) + }, + + cameraURL: function(){ + return "http://" + this.host + ":" + this.port + "/telemachus/cameras" + }, + + getCameraList: function(callback){ + new Ajax.Request(this.cameraURL(), { + method: "get", + // parameters: params, + onSuccess: function(response){ + var data = JSON.parse(response.responseText) + callback(data) + }.bind(this), + onException: this.notifyIfLOS.bind(this) + }) + }, + + getOrbitalBodies: function(){ + return { + "Sun" : { + id: 0, + referenceBodyName: null, + mapBody: null, + atmosphericRadius: 0, + color: '#FFFF00', + surfaceGravity: 17.1 //m/s^2, + }, + "Kerbin" : { + id: 1, + referenceBodyName: "Sun", + mapBody: L.KSP.CelestialBody.KERBIN, + atmosphericRadius: 70000, + color: '#4a5472', + surfaceGravity: 9.81 //m/s^2 + }, + "Mun" : { + id: 2, + referenceBodyName: "Kerbin", + mapBody: L.KSP.CelestialBody.MUN, + atmosphericRadius: 0, + color: '#e2e0d7', + surfaceGravity: 1.63 //m/s^2 + }, + "Minmus" : { + id: 3, + referenceBodyName: "Kerbin", + mapBody: L.KSP.CelestialBody.MINMUS, + color: '#98f2c5', + atmosphericRadius: 0, + surfaceGravity: 0.491 //m/s^2 + }, + "Moho" : { + id: 4, + referenceBodyName: "Sun", + mapBody: L.KSP.CelestialBody.MOHO, + atmosphericRadius: 0, + color: '#fdc39e', + surfaceGravity: 2.70 //m/s^2 + }, + "Eve" : { + id: 5, + referenceBodyName: "Sun", + mapBody: L.KSP.CelestialBody.EVE, + atmosphericRadius: 90000, + color: '#c394fe', + surfaceGravity: 16.7 //m/s^2 + }, + "Duna" : { + id: 6, + referenceBodyName: "Sun", + mapBody: L.KSP.CelestialBody.DUNA, + atmosphericRadius: 50000, + color: '#fc5e49', + surfaceGravity: 2.94 //m/s^2 + }, + "Ike" : { + id: 7, + referenceBodyName: "Duna", + mapBody: L.KSP.CelestialBody.IKE, + atmosphericRadius: 0, + color: '#e2e0d7', + surfaceGravity: 1.10 //m/s^2 + }, + "Jool" : { + id: 8, + referenceBodyName: "Sun", + mapBody: L.KSP.CelestialBody.JOOL, + atmosphericRadius: 200000, + color: '#C5DCAB', + surfaceGravity: 7.85 //m/s^2 + }, + "Laythe" : { + id: 9, + referenceBodyName: "Jool", + mapBody: L.KSP.CelestialBody.LAYTHE, + atmosphericRadius: 50000, + color: '#a8b4fe', + surfaceGravity: 7.85 //m/s^2 + }, + "Vall" : { + id: 10, + referenceBodyName: "Jool", + mapBody: L.KSP.CelestialBody.VALL, + atmosphericRadius: 0, + color: '#b0f4fe', + surfaceGravity: 2.31 //m/s^2 + }, + "Bop" : { + id: 11, + referenceBodyName: "Jool", + mapBody: L.KSP.CelestialBody.BOP, + atmosphericRadius: 0, + color: '#c64605', + surfaceGravity: 0.589 //m/s^2 + }, + "Tylo" : { + id: 12, + referenceBodyName: "Jool", + mapBody: L.KSP.CelestialBody.TYLO, + atmosphericRadius: 0, + color: '#fdf7ed', + surfaceGravity: 7.85 //m/s^2 + }, + "Gilly" : { + id: 13, + referenceBodyName: "Eve", + mapBody: L.KSP.CelestialBody.GILLY, + atmosphericRadius: 0, + color: '#fdcbb1', + surfaceGravity: 0.049 //m/s^2 + }, + "Pol" : { + id: 14, + referenceBodyName: "Pol", + mapBody: L.KSP.CelestialBody.POL, + atmosphericRadius: 0, + color: '#fec681', + surfaceGravity: 0.373 //m/s^2 + }, + "Dres" : { + id: 15, + referenceBodyName: "Sun", + mapBody: L.KSP.CelestialBody.DRES, + atmosphericRadius: 0, + color: '#fef8f9', + surfaceGravity: 1.13 //m/s^2 + }, + "Eeloo" : { + id: 16, + referenceBodyName: "Sun", + mapBody: L.KSP.CelestialBody.EELOO, + atmosphericRadius: 0, + color: '#e5fafe', + surfaceGravity: 1.69 //m/s^2 + } + } + } +}) +var TitleBar = Class.create({ + initialize: function(datalink, title_bar_id){ + this.datalink = datalink + this.title_bar_id = title_bar_id + this.title_bar = $(this.title_bar_id) + this.initializeLOSNotifier() + this.initializeDatalink() + }, + + update: function(data){ + window.requestAnimationFrame(function(){ + this.title_bar.down("#world-clock").update(TimeFormatters.formatUT(data["t.universalTime"])) + this.title_bar.down("#mission-time").update(TimeFormatters.formatMET(data["v.missionTime"])) + + this.title_bar.down("#mission-time").removeClassName("loss-of-signal") + }.bind(this)) + }, + + initializeLOSNotifier:function(){ + document.observe('telemachus:loss-of-signal', function(){ + window.requestAnimationFrame(function(){ + this.title_bar.down("#mission-time").update("⚠ LOS ⚠") + this.title_bar.down("#mission-time").addClassName("loss-of-signal") + }.bind(this)) + }.bind(this)) + }, + + initializeDatalink: function(){ + this.datalink.subscribeToData([ + 't.timeWarp', 't.universalTime', 'v.missionTime' + ]) + + this.datalink.addReceiverFunction(this.update.bind(this)) + }, +}) +var ButtonIndicator = Class.create({ + initialize: function(datalink, indicatorId, apiButtonString){ + this.datalink = datalink + this.indicatorId = indicatorId + this.indicator = $(this.indicatorId) + this.apiButtonString = apiButtonString + this.initializeDatalink() + }, + + update: function(data){ + if(data[this.apiButtonString] == true){ + this.indicator.addClassName("on") + } else{ + this.indicator.removeClassName("on") + } + }, + + initializeDatalink: function(){ + this.datalink.subscribeToData([this.apiButtonString]) + + this.datalink.addReceiverFunction(this.update.bind(this)) + }, +}) +var ReadoutTable = Class.create({ + initialize: function(datalink, tableId, dataRows){ + this.datalink = datalink + this.tableId = tableId + this.table = $(this.tableId) + this.dataRows = dataRows + this.initializeDatalink() + }, + + update: function(data){ + window.requestAnimationFrame(function(){ + this.dataRows.forEach(function(row){ + var rowId = row.label + var tableRow = this.table.down("tr[data-label='"+ rowId +"']") + + if(!tableRow){ + var tableRow = new Element("tr", { + "data-label" : rowId + }) + + tableRow.insert("" + row.label + "") + this.table.insert(tableRow) + } + + tableRow.down("td").update(row.formatter(data[row.value])) + }.bind(this)) + }.bind(this)) + }, + + initializeDatalink: function(){ + var dataValues = this.dataRows.map(function(dataRow){ + return dataRow.value + }) + + this.datalink.subscribeToData(dataValues) + + this.datalink.addReceiverFunction(this.update.bind(this)) + }, +}) +var ResourceMonitor = Class.create({ + initialize: function(datalink, resourceName, options){ + this.datalink = datalink + this.resourceName = resourceName + this.options = Object.extend({ + currentStageProgressBar: null, + totalProgressBar: null, + valuePrefix: null + }, options) + + this.resourceStrings = this.buildResourceStrings() + + this.initializeDatalink() + }, + + update: function(data){ + window.requestAnimationFrame(function(){ + if(this.options.totalProgressBar){ + this.options.totalProgressBar.value = data[this.resourceStrings.totalAvailable] + this.options.totalProgressBar.max = data[this.resourceStrings.totalMax] + } + + if(this.options.currentStageProgressBar){ + this.options.currentStageProgressBar.value = data[this.resourceStrings.currentStageAvailable] + this.options.currentStageProgressBar.max = data[this.resourceStrings.currentStageMax] + } + + this.updateValue("-total-value", data[this.resourceStrings.totalAvailable]) + this.updateValue("-total-max", data[this.resourceStrings.totalMax]) + + this.updateValue("-current-stage-value", data[this.resourceStrings.currentStageAvailable]) + this.updateValue("-current-stage-max", data[this.resourceStrings.currentStageMax]) + }.bind(this)) + }, + + updateValue: function(id, value){ + if($(this.options.valuePrefix + id)){ + if(value < 0){ + $(this.options.valuePrefix + id).update("NA") + } else{ + $(this.options.valuePrefix + id).update(value.toFixed(2)) + } + } + }, + + buildResourceStrings: function(){ + return { + totalAvailable: "r.resource["+ this.resourceName +"]", + totalMax: "r.resourceMax["+ this.resourceName +"]", + currentStageAvailable: "r.resourceCurrent["+ this.resourceName +"]", + currentStageMax: "r.resourceCurrentMax["+ this.resourceName +"]", + } + }, + + initializeDatalink: function(){ + this.datalink.subscribeToData([ + this.resourceStrings.totalAvailable, + this.resourceStrings.totalMax, + this.resourceStrings.currentStageAvailable, + this.resourceStrings.currentStageMax + ]) + + this.datalink.addReceiverFunction(this.update.bind(this)) + }, +}) +var DataTable = Class.create({ + initialize: function(tableID, dataRows){ + this.tableID = tableID + this.table = $(this.tableID) + this.dataRows = dataRows + }, + + update: function(){ + window.requestAnimationFrame(function(){ + this.dataRows.forEach(function(row){ + var rowId = row.label + var tableRow = this.table.down("tr[data-label='"+ rowId +"']") + + if(!tableRow){ + var tableRow = new Element("tr", { + "data-label" : rowId + }) + + tableRow.insert("" + row.label + "") + this.table.insert(tableRow) + } + + tableRow.down("td").update(row.value) + }.bind(this)) + }.bind(this)) + }, + + clear: function(){ + window.requestAnimationFrame(function(){ + this.dataRows = [] + this.table.innerHTML = "" + }.bind(this)) + } +}) +var AtmosphericDensityGauge = Class.create({ + initialize: function(datalink, gaugeID){ + this.datalink = datalink + this.gaugeID = gaugeID + this.gauge = $(this.gaugeID) + this.initializeDatalink() + this.func = function(x){return Math.log(2.0 * x)} + }, + + update: function(data){ + var max = this.func(100) + var value = this.func(data['v.atmosphericPressure'] * 100) + if(!isFinite(value)){ value = 0 } + + this.gauge.value = value + this.gauge.max = max + }, + + initializeDatalink: function(){ + this.datalink.subscribeToData(['v.atmosphericPressure']) + + this.datalink.addReceiverFunction(this.update.bind(this)) + }, +}) +var ThrottleGauge = Class.create({ + initialize: function(datalink, gaugeID){ + this.datalink = datalink + this.gaugeID = gaugeID + this.gauge = $(this.gaugeID) + this.initializeDatalink() + }, + + update: function(data){ + this.gauge.value = data['f.throttle'] * 100 + this.gauge.max = 100 + }, + + initializeDatalink: function(){ + this.datalink.subscribeToData(['f.throttle']) + + this.datalink.addReceiverFunction(this.update.bind(this)) + }, +}) +/* + Graticule plugin for Leaflet powered maps. +*/ +L.Graticule = L.GeoJSON.extend({ + + options: { + style: { + color: '#333', + weight: 1 + }, + interval: 20 + }, + + initialize: function (options) { + L.Util.setOptions(this, options); + this._layers = {}; + + if (this.options.sphere) { + this.addData(this._getFrame()); + } else { + this.addData(this._getGraticule()); + } + }, + + _getFrame: function() { + return { "type": "Polygon", + "coordinates": [ + this._getMeridian(-180).concat(this._getMeridian(180).reverse()) + ] + }; + }, + + _getGraticule: function () { + var features = [], interval = this.options.interval; + + // Meridians + for (var lng = 0; lng <= 180; lng = lng + interval) { + features.push(this._getFeature(this._getMeridian(lng), { + "name": (lng) ? lng.toString() + "° E" : "Prime meridian" + })); + if (lng !== 0) { + features.push(this._getFeature(this._getMeridian(-lng), { + "name": lng.toString() + "° W" + })); + } + } + + // Parallels + for (var lat = 0; lat <= 90; lat = lat + interval) { + features.push(this._getFeature(this._getParallel(lat), { + "name": (lat) ? lat.toString() + "° N" : "Equator" + })); + if (lat !== 0) { + features.push(this._getFeature(this._getParallel(-lat), { + "name": lat.toString() + "° S" + })); + } + } + + return { + "type": "FeatureCollection", + "features": features + }; + }, + + _getMeridian: function (lng) { + lng = this._lngFix(lng); + var coords = []; + for (var lat = -90; lat <= 90; lat++) { + coords.push([lng, lat]); + } + return coords; + }, + + _getParallel: function (lat) { + var coords = []; + for (var lng = -180; lng <= 180; lng++) { + coords.push([this._lngFix(lng), lat]); + } + return coords; + }, + + _getFeature: function (coords, prop) { + return { + "type": "Feature", + "geometry": { + "type": "LineString", + "coordinates": coords + }, + "properties": prop + }; + }, + + _lngFix: function (lng) { + if (lng >= 180) return 179.999999; + if (lng <= -180) return -179.999999; + return lng; + } + +}); + +L.graticule = function (options) { + return new L.Graticule(options); +}; +var PositionMap = Class.create({ + initialize: function(datalink, mapId, options){ + this.datalink = datalink + this.mapId = mapId + this.noMapIndicatorId = (mapId + '-no-map') + this.previousBody = "KERBIN" + this.options = Object.extend({ + lockOnVessel: true + }, options) + this.initializeMap() + this.initializeNoMapIndicator() + this.initializeDatalink() + }, + + update: function(data){ + window.requestAnimationFrame(function(){ + if(this.isMapAvailable(data)){ + this.showMap() + this.updateBodyIfNecessary(data) + this.setCoordinatesForMapObject(this.coordinates, data['v.lat'], data['v.long']) + if(this.options.lockOnVessel){ + this.map.panTo([data['v.lat'], data['v.long']]) + } + } else{ + this.hideMap() + } + }.bind(this)) + }, + + updateBodyIfNecessary: function(data){ + var bodyName = data['v.body'].toUpperCase() + if(this.previousBody != bodyName){ + newBody = L.KSP.CelestialBody[bodyName]; + newBody.addTo(this.map); + this.previousBody = bodyName; + } + }, + + initializeMap: function(){ + this.map = new L.KSP.Map(this.mapId, { + layers: [L.KSP.CelestialBody[this.previousBody.toUpperCase()]], + zoom: 'fit', + bodyControl: false, + layerControl: true, + scaleControl: true + }) + + this.map.fitWorld() + + L.graticule().addTo(this.map) + + var circleMarkerOptions = { + // fill: false, + color: '#FD7E23', + opacity: 1.0, + fillOpacity: 1.0, + radius: 5 + } + + this.coordinates = L.circleMarker([0, 0], circleMarkerOptions) + this.coordinates.addTo(this.map) + }, + + convertCoordinatesToMap: function(latitude, longitude){ + return [latitude, longitude > 180 ? longitude - 360 : longitude] + }, + + setCoordinatesForMapObject: function(object, latitude, longitude){ + var convertedCoordinates = this.convertCoordinatesToMap(latitude, longitude) + object.setLatLng([convertedCoordinates[0], convertedCoordinates[1]]) + }, + + isMapAvailable: function(data){ + return data['v.body'].toUpperCase() != "SUN" + }, + + hideMap: function(){ + $(this.mapId).hide() + this.noMapIndicator.removeClassName("hidden") + }, + + showMap: function(){ + $(this.mapId).show() + this.noMapIndicator.addClassName("hidden") + }, + + initializeNoMapIndicator: function(){ + this.noMapIndicator = $(this.noMapIndicatorId) + }, + + initializeDatalink: function(){ + this.datalink.subscribeToData(['v.lat', 'v.long', 'v.body']) + + this.datalink.addReceiverFunction(this.update.bind(this)) + } +}) +// threejs.org/license +'use strict';var THREE={REVISION:"75"};"function"===typeof define&&define.amd?define("three",THREE):"undefined"!==typeof exports&&"undefined"!==typeof module&&(module.exports=THREE);void 0===Number.EPSILON&&(Number.EPSILON=Math.pow(2,-52));void 0===Math.sign&&(Math.sign=function(a){return 0>a?-1:0>16&255)/255;this.g=(a>>8&255)/255;this.b=(a&255)/255;return this},setRGB:function(a,b,c){this.r=a;this.g=b;this.b=c;return this},setHSL:function(){function a(a,c,d){0>d&&(d+=1);1d?c:d<2/3?a+6*(c-a)*(2/3-d):a}return function(b,c,d){b=THREE.Math.euclideanModulo(b,1);c=THREE.Math.clamp(c,0,1);d=THREE.Math.clamp(d,0,1);0===c?this.r=this.g=this.b=d:(c=.5>=d?d*(1+c):d+c-d*c,d=2*d-c,this.r=a(d,c,b+1/3),this.g=a(d,c,b),this.b=a(d,c,b-1/3));return this}}(),setStyle:function(a){function b(b){void 0!==b&&1>parseFloat(b)&&console.warn("THREE.Color: Alpha component of "+a+" will be ignored.")}var c;if(c=/^((?:rgb|hsl)a?)\(\s*([^\)]*)\)/.exec(a)){var d=c[2];switch(c[1]){case "rgb":case "rgba":if(c= +/^(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(d))return this.r=Math.min(255,parseInt(c[1],10))/255,this.g=Math.min(255,parseInt(c[2],10))/255,this.b=Math.min(255,parseInt(c[3],10))/255,b(c[5]),this;if(c=/^(\d+)\%\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(d))return this.r=Math.min(100,parseInt(c[1],10))/100,this.g=Math.min(100,parseInt(c[2],10))/100,this.b=Math.min(100,parseInt(c[3],10))/100,b(c[5]),this;break;case "hsl":case "hsla":if(c=/^([0-9]*\.?[0-9]+)\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(d)){var d= +parseFloat(c[1])/360,e=parseInt(c[2],10)/100,f=parseInt(c[3],10)/100;b(c[5]);return this.setHSL(d,e,f)}}}else if(c=/^\#([A-Fa-f0-9]+)$/.exec(a)){c=c[1];d=c.length;if(3===d)return this.r=parseInt(c.charAt(0)+c.charAt(0),16)/255,this.g=parseInt(c.charAt(1)+c.charAt(1),16)/255,this.b=parseInt(c.charAt(2)+c.charAt(2),16)/255,this;if(6===d)return this.r=parseInt(c.charAt(0)+c.charAt(1),16)/255,this.g=parseInt(c.charAt(2)+c.charAt(3),16)/255,this.b=parseInt(c.charAt(4)+c.charAt(5),16)/255,this}a&&0=h?k/(e+f):k/(2-e-f);switch(e){case b:g=(c-d)/k+(cf&&c>b?(c=2*Math.sqrt(1+c-f-b),this._w=(k-g)/c,this._x=.25*c,this._y=(a+e)/c,this._z=(d+h)/c):f>b?(c=2*Math.sqrt(1+f-c-b),this._w=(d-h)/c,this._x=(a+e)/c,this._y= +.25*c,this._z=(g+k)/c):(c=2*Math.sqrt(1+b-c-f),this._w=(e-a)/c,this._x=(d+h)/c,this._y=(g+k)/c,this._z=.25*c);this.onChangeCallback();return this},setFromUnitVectors:function(){var a,b;return function(c,d){void 0===a&&(a=new THREE.Vector3);b=c.dot(d)+1;1E-6>b?(b=0,Math.abs(c.x)>Math.abs(c.z)?a.set(-c.y,c.x,0):a.set(0,-c.z,c.y)):a.crossVectors(c,d);this._x=a.x;this._y=a.y;this._z=a.z;this._w=b;this.normalize();return this}}(),inverse:function(){this.conjugate().normalize();return this},conjugate:function(){this._x*= +-1;this._y*=-1;this._z*=-1;this.onChangeCallback();return this},dot:function(a){return this._x*a._x+this._y*a._y+this._z*a._z+this._w*a._w},lengthSq:function(){return this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w},length:function(){return Math.sqrt(this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w)},normalize:function(){var a=this.length();0===a?(this._z=this._y=this._x=0,this._w=1):(a=1/a,this._x*=a,this._y*=a,this._z*=a,this._w*=a);this.onChangeCallback();return this}, +multiply:function(a,b){return void 0!==b?(console.warn("THREE.Quaternion: .multiply() now only accepts one argument. Use .multiplyQuaternions( a, b ) instead."),this.multiplyQuaternions(a,b)):this.multiplyQuaternions(this,a)},multiplyQuaternions:function(a,b){var c=a._x,d=a._y,e=a._z,f=a._w,g=b._x,h=b._y,k=b._z,l=b._w;this._x=c*l+f*g+d*k-e*h;this._y=d*l+f*h+e*g-c*k;this._z=e*l+f*k+c*h-d*g;this._w=f*l-c*g-d*h-e*k;this.onChangeCallback();return this},slerp:function(a,b){if(0===b)return this;if(1=== +b)return this.copy(a);var c=this._x,d=this._y,e=this._z,f=this._w,g=f*a._w+c*a._x+d*a._y+e*a._z;0>g?(this._w=-a._w,this._x=-a._x,this._y=-a._y,this._z=-a._z,g=-g):this.copy(a);if(1<=g)return this._w=f,this._x=c,this._y=d,this._z=e,this;var h=Math.sqrt(1-g*g);if(.001>Math.abs(h))return this._w=.5*(f+this._w),this._x=.5*(c+this._x),this._y=.5*(d+this._y),this._z=.5*(e+this._z),this;var k=Math.atan2(h,g),g=Math.sin((1-b)*k)/h,h=Math.sin(b*k)/h;this._w=f*g+this._w*h;this._x=c*g+this._x*h;this._y=d*g+ +this._y*h;this._z=e*g+this._z*h;this.onChangeCallback();return this},equals:function(a){return a._x===this._x&&a._y===this._y&&a._z===this._z&&a._w===this._w},fromArray:function(a,b){void 0===b&&(b=0);this._x=a[b];this._y=a[b+1];this._z=a[b+2];this._w=a[b+3];this.onChangeCallback();return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);a[b]=this._x;a[b+1]=this._y;a[b+2]=this._z;a[b+3]=this._w;return a},onChange:function(a){this.onChangeCallback=a;return this},onChangeCallback:function(){}}; +Object.assign(THREE.Quaternion,{slerp:function(a,b,c,d){return c.copy(a).slerp(b,d)},slerpFlat:function(a,b,c,d,e,f,g){var h=c[d+0],k=c[d+1],l=c[d+2];c=c[d+3];d=e[f+0];var p=e[f+1],n=e[f+2];e=e[f+3];if(c!==e||h!==d||k!==p||l!==n){f=1-g;var m=h*d+k*p+l*n+c*e,q=0<=m?1:-1,u=1-m*m;u>Number.EPSILON&&(u=Math.sqrt(u),m=Math.atan2(u,m*q),f=Math.sin(f*m)/u,g=Math.sin(g*m)/u);q*=g;h=h*f+d*q;k=k*f+p*q;l=l*f+n*q;c=c*f+e*q;f===1-g&&(g=1/Math.sqrt(h*h+k*k+l*l+c*c),h*=g,k*=g,l*=g,c*=g)}a[b]=h;a[b+1]=k;a[b+2]=l; +a[b+3]=c}});THREE.Vector2=function(a,b){this.x=a||0;this.y=b||0}; +THREE.Vector2.prototype={constructor:THREE.Vector2,get width(){return this.x},set width(a){this.x=a},get height(){return this.y},set height(a){this.y=a},set:function(a,b){this.x=a;this.y=b;return this},setScalar:function(a){this.y=this.x=a;return this},setX:function(a){this.x=a;return this},setY:function(a){this.y=a;return this},setComponent:function(a,b){switch(a){case 0:this.x=b;break;case 1:this.y=b;break;default:throw Error("index is out of range: "+a);}},getComponent:function(a){switch(a){case 0:return this.x; +case 1:return this.y;default:throw Error("index is out of range: "+a);}},clone:function(){return new this.constructor(this.x,this.y)},copy:function(a){this.x=a.x;this.y=a.y;return this},add:function(a,b){if(void 0!==b)return console.warn("THREE.Vector2: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(a,b);this.x+=a.x;this.y+=a.y;return this},addScalar:function(a){this.x+=a;this.y+=a;return this},addVectors:function(a,b){this.x=a.x+b.x;this.y=a.y+b.y;return this}, +addScaledVector:function(a,b){this.x+=a.x*b;this.y+=a.y*b;return this},sub:function(a,b){if(void 0!==b)return console.warn("THREE.Vector2: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(a,b);this.x-=a.x;this.y-=a.y;return this},subScalar:function(a){this.x-=a;this.y-=a;return this},subVectors:function(a,b){this.x=a.x-b.x;this.y=a.y-b.y;return this},multiply:function(a){this.x*=a.x;this.y*=a.y;return this},multiplyScalar:function(a){isFinite(a)?(this.x*=a, +this.y*=a):this.y=this.x=0;return this},divide:function(a){this.x/=a.x;this.y/=a.y;return this},divideScalar:function(a){return this.multiplyScalar(1/a)},min:function(a){this.x=Math.min(this.x,a.x);this.y=Math.min(this.y,a.y);return this},max:function(a){this.x=Math.max(this.x,a.x);this.y=Math.max(this.y,a.y);return this},clamp:function(a,b){this.x=Math.max(a.x,Math.min(b.x,this.x));this.y=Math.max(a.y,Math.min(b.y,this.y));return this},clampScalar:function(){var a,b;return function(c,d){void 0=== +a&&(a=new THREE.Vector2,b=new THREE.Vector2);a.set(c,c);b.set(d,d);return this.clamp(a,b)}}(),clampLength:function(a,b){var c=this.length();this.multiplyScalar(Math.max(a,Math.min(b,c))/c);return this},floor:function(){this.x=Math.floor(this.x);this.y=Math.floor(this.y);return this},ceil:function(){this.x=Math.ceil(this.x);this.y=Math.ceil(this.y);return this},round:function(){this.x=Math.round(this.x);this.y=Math.round(this.y);return this},roundToZero:function(){this.x=0>this.x?Math.ceil(this.x): +Math.floor(this.x);this.y=0>this.y?Math.ceil(this.y):Math.floor(this.y);return this},negate:function(){this.x=-this.x;this.y=-this.y;return this},dot:function(a){return this.x*a.x+this.y*a.y},lengthSq:function(){return this.x*this.x+this.y*this.y},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y)},lengthManhattan:function(){return Math.abs(this.x)+Math.abs(this.y)},normalize:function(){return this.divideScalar(this.length())},angle:function(){var a=Math.atan2(this.y,this.x);0>a&&(a+= +2*Math.PI);return a},distanceTo:function(a){return Math.sqrt(this.distanceToSquared(a))},distanceToSquared:function(a){var b=this.x-a.x;a=this.y-a.y;return b*b+a*a},setLength:function(a){return this.multiplyScalar(a/this.length())},lerp:function(a,b){this.x+=(a.x-this.x)*b;this.y+=(a.y-this.y)*b;return this},lerpVectors:function(a,b,c){this.subVectors(b,a).multiplyScalar(c).add(a);return this},equals:function(a){return a.x===this.x&&a.y===this.y},fromArray:function(a,b){void 0===b&&(b=0);this.x=a[b]; +this.y=a[b+1];return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);a[b]=this.x;a[b+1]=this.y;return a},fromAttribute:function(a,b,c){void 0===c&&(c=0);b=b*a.itemSize+c;this.x=a.array[b];this.y=a.array[b+1];return this},rotateAround:function(a,b){var c=Math.cos(b),d=Math.sin(b),e=this.x-a.x,f=this.y-a.y;this.x=e*c-f*d+a.x;this.y=e*d+f*c+a.y;return this}};THREE.Vector3=function(a,b,c){this.x=a||0;this.y=b||0;this.z=c||0}; +THREE.Vector3.prototype={constructor:THREE.Vector3,set:function(a,b,c){this.x=a;this.y=b;this.z=c;return this},setScalar:function(a){this.z=this.y=this.x=a;return this},setX:function(a){this.x=a;return this},setY:function(a){this.y=a;return this},setZ:function(a){this.z=a;return this},setComponent:function(a,b){switch(a){case 0:this.x=b;break;case 1:this.y=b;break;case 2:this.z=b;break;default:throw Error("index is out of range: "+a);}},getComponent:function(a){switch(a){case 0:return this.x;case 1:return this.y; +case 2:return this.z;default:throw Error("index is out of range: "+a);}},clone:function(){return new this.constructor(this.x,this.y,this.z)},copy:function(a){this.x=a.x;this.y=a.y;this.z=a.z;return this},add:function(a,b){if(void 0!==b)return console.warn("THREE.Vector3: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(a,b);this.x+=a.x;this.y+=a.y;this.z+=a.z;return this},addScalar:function(a){this.x+=a;this.y+=a;this.z+=a;return this},addVectors:function(a, +b){this.x=a.x+b.x;this.y=a.y+b.y;this.z=a.z+b.z;return this},addScaledVector:function(a,b){this.x+=a.x*b;this.y+=a.y*b;this.z+=a.z*b;return this},sub:function(a,b){if(void 0!==b)return console.warn("THREE.Vector3: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(a,b);this.x-=a.x;this.y-=a.y;this.z-=a.z;return this},subScalar:function(a){this.x-=a;this.y-=a;this.z-=a;return this},subVectors:function(a,b){this.x=a.x-b.x;this.y=a.y-b.y;this.z=a.z-b.z;return this}, +multiply:function(a,b){if(void 0!==b)return console.warn("THREE.Vector3: .multiply() now only accepts one argument. Use .multiplyVectors( a, b ) instead."),this.multiplyVectors(a,b);this.x*=a.x;this.y*=a.y;this.z*=a.z;return this},multiplyScalar:function(a){isFinite(a)?(this.x*=a,this.y*=a,this.z*=a):this.z=this.y=this.x=0;return this},multiplyVectors:function(a,b){this.x=a.x*b.x;this.y=a.y*b.y;this.z=a.z*b.z;return this},applyEuler:function(){var a;return function(b){!1===b instanceof THREE.Euler&& +console.error("THREE.Vector3: .applyEuler() now expects an Euler rotation rather than a Vector3 and order.");void 0===a&&(a=new THREE.Quaternion);this.applyQuaternion(a.setFromEuler(b));return this}}(),applyAxisAngle:function(){var a;return function(b,c){void 0===a&&(a=new THREE.Quaternion);this.applyQuaternion(a.setFromAxisAngle(b,c));return this}}(),applyMatrix3:function(a){var b=this.x,c=this.y,d=this.z;a=a.elements;this.x=a[0]*b+a[3]*c+a[6]*d;this.y=a[1]*b+a[4]*c+a[7]*d;this.z=a[2]*b+a[5]*c+a[8]* +d;return this},applyMatrix4:function(a){var b=this.x,c=this.y,d=this.z;a=a.elements;this.x=a[0]*b+a[4]*c+a[8]*d+a[12];this.y=a[1]*b+a[5]*c+a[9]*d+a[13];this.z=a[2]*b+a[6]*c+a[10]*d+a[14];return this},applyProjection:function(a){var b=this.x,c=this.y,d=this.z;a=a.elements;var e=1/(a[3]*b+a[7]*c+a[11]*d+a[15]);this.x=(a[0]*b+a[4]*c+a[8]*d+a[12])*e;this.y=(a[1]*b+a[5]*c+a[9]*d+a[13])*e;this.z=(a[2]*b+a[6]*c+a[10]*d+a[14])*e;return this},applyQuaternion:function(a){var b=this.x,c=this.y,d=this.z,e=a.x, +f=a.y,g=a.z;a=a.w;var h=a*b+f*d-g*c,k=a*c+g*b-e*d,l=a*d+e*c-f*b,b=-e*b-f*c-g*d;this.x=h*a+b*-e+k*-g-l*-f;this.y=k*a+b*-f+l*-e-h*-g;this.z=l*a+b*-g+h*-f-k*-e;return this},project:function(){var a;return function(b){void 0===a&&(a=new THREE.Matrix4);a.multiplyMatrices(b.projectionMatrix,a.getInverse(b.matrixWorld));return this.applyProjection(a)}}(),unproject:function(){var a;return function(b){void 0===a&&(a=new THREE.Matrix4);a.multiplyMatrices(b.matrixWorld,a.getInverse(b.projectionMatrix));return this.applyProjection(a)}}(), +transformDirection:function(a){var b=this.x,c=this.y,d=this.z;a=a.elements;this.x=a[0]*b+a[4]*c+a[8]*d;this.y=a[1]*b+a[5]*c+a[9]*d;this.z=a[2]*b+a[6]*c+a[10]*d;this.normalize();return this},divide:function(a){this.x/=a.x;this.y/=a.y;this.z/=a.z;return this},divideScalar:function(a){return this.multiplyScalar(1/a)},min:function(a){this.x=Math.min(this.x,a.x);this.y=Math.min(this.y,a.y);this.z=Math.min(this.z,a.z);return this},max:function(a){this.x=Math.max(this.x,a.x);this.y=Math.max(this.y,a.y); +this.z=Math.max(this.z,a.z);return this},clamp:function(a,b){this.x=Math.max(a.x,Math.min(b.x,this.x));this.y=Math.max(a.y,Math.min(b.y,this.y));this.z=Math.max(a.z,Math.min(b.z,this.z));return this},clampScalar:function(){var a,b;return function(c,d){void 0===a&&(a=new THREE.Vector3,b=new THREE.Vector3);a.set(c,c,c);b.set(d,d,d);return this.clamp(a,b)}}(),clampLength:function(a,b){var c=this.length();this.multiplyScalar(Math.max(a,Math.min(b,c))/c);return this},floor:function(){this.x=Math.floor(this.x); +this.y=Math.floor(this.y);this.z=Math.floor(this.z);return this},ceil:function(){this.x=Math.ceil(this.x);this.y=Math.ceil(this.y);this.z=Math.ceil(this.z);return this},round:function(){this.x=Math.round(this.x);this.y=Math.round(this.y);this.z=Math.round(this.z);return this},roundToZero:function(){this.x=0>this.x?Math.ceil(this.x):Math.floor(this.x);this.y=0>this.y?Math.ceil(this.y):Math.floor(this.y);this.z=0>this.z?Math.ceil(this.z):Math.floor(this.z);return this},negate:function(){this.x=-this.x; +this.y=-this.y;this.z=-this.z;return this},dot:function(a){return this.x*a.x+this.y*a.y+this.z*a.z},lengthSq:function(){return this.x*this.x+this.y*this.y+this.z*this.z},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)},lengthManhattan:function(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)},normalize:function(){return this.divideScalar(this.length())},setLength:function(a){return this.multiplyScalar(a/this.length())},lerp:function(a,b){this.x+=(a.x-this.x)* +b;this.y+=(a.y-this.y)*b;this.z+=(a.z-this.z)*b;return this},lerpVectors:function(a,b,c){this.subVectors(b,a).multiplyScalar(c).add(a);return this},cross:function(a,b){if(void 0!==b)return console.warn("THREE.Vector3: .cross() now only accepts one argument. Use .crossVectors( a, b ) instead."),this.crossVectors(a,b);var c=this.x,d=this.y,e=this.z;this.x=d*a.z-e*a.y;this.y=e*a.x-c*a.z;this.z=c*a.y-d*a.x;return this},crossVectors:function(a,b){var c=a.x,d=a.y,e=a.z,f=b.x,g=b.y,h=b.z;this.x=d*h-e*g; +this.y=e*f-c*h;this.z=c*g-d*f;return this},projectOnVector:function(){var a,b;return function(c){void 0===a&&(a=new THREE.Vector3);a.copy(c).normalize();b=this.dot(a);return this.copy(a).multiplyScalar(b)}}(),projectOnPlane:function(){var a;return function(b){void 0===a&&(a=new THREE.Vector3);a.copy(this).projectOnVector(b);return this.sub(a)}}(),reflect:function(){var a;return function(b){void 0===a&&(a=new THREE.Vector3);return this.sub(a.copy(b).multiplyScalar(2*this.dot(b)))}}(),angleTo:function(a){a= +this.dot(a)/Math.sqrt(this.lengthSq()*a.lengthSq());return Math.acos(THREE.Math.clamp(a,-1,1))},distanceTo:function(a){return Math.sqrt(this.distanceToSquared(a))},distanceToSquared:function(a){var b=this.x-a.x,c=this.y-a.y;a=this.z-a.z;return b*b+c*c+a*a},setFromSpherical:function(a){var b=Math.sin(a.phi)*a.radius;this.x=b*Math.sin(a.theta);this.y=Math.cos(a.phi)*a.radius;this.z=b*Math.cos(a.theta);return this},setFromMatrixPosition:function(a){return this.setFromMatrixColumn(a,3)},setFromMatrixScale:function(a){var b= +this.setFromMatrixColumn(a,0).length(),c=this.setFromMatrixColumn(a,1).length();a=this.setFromMatrixColumn(a,2).length();this.x=b;this.y=c;this.z=a;return this},setFromMatrixColumn:function(a,b){"number"===typeof a&&(console.warn("THREE.Vector3: setFromMatrixColumn now expects ( matrix, index )."),b=a=b);return this.fromArray(a.elements,4*b)},equals:function(a){return a.x===this.x&&a.y===this.y&&a.z===this.z},fromArray:function(a,b){void 0===b&&(b=0);this.x=a[b];this.y=a[b+1];this.z=a[b+2];return this}, +toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);a[b]=this.x;a[b+1]=this.y;a[b+2]=this.z;return a},fromAttribute:function(a,b,c){void 0===c&&(c=0);b=b*a.itemSize+c;this.x=a.array[b];this.y=a.array[b+1];this.z=a.array[b+2];return this}};THREE.Vector4=function(a,b,c,d){this.x=a||0;this.y=b||0;this.z=c||0;this.w=void 0!==d?d:1}; +THREE.Vector4.prototype={constructor:THREE.Vector4,set:function(a,b,c,d){this.x=a;this.y=b;this.z=c;this.w=d;return this},setScalar:function(a){this.w=this.z=this.y=this.x=a;return this},setX:function(a){this.x=a;return this},setY:function(a){this.y=a;return this},setZ:function(a){this.z=a;return this},setW:function(a){this.w=a;return this},setComponent:function(a,b){switch(a){case 0:this.x=b;break;case 1:this.y=b;break;case 2:this.z=b;break;case 3:this.w=b;break;default:throw Error("index is out of range: "+ +a);}},getComponent:function(a){switch(a){case 0:return this.x;case 1:return this.y;case 2:return this.z;case 3:return this.w;default:throw Error("index is out of range: "+a);}},clone:function(){return new this.constructor(this.x,this.y,this.z,this.w)},copy:function(a){this.x=a.x;this.y=a.y;this.z=a.z;this.w=void 0!==a.w?a.w:1;return this},add:function(a,b){if(void 0!==b)return console.warn("THREE.Vector4: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(a,b); +this.x+=a.x;this.y+=a.y;this.z+=a.z;this.w+=a.w;return this},addScalar:function(a){this.x+=a;this.y+=a;this.z+=a;this.w+=a;return this},addVectors:function(a,b){this.x=a.x+b.x;this.y=a.y+b.y;this.z=a.z+b.z;this.w=a.w+b.w;return this},addScaledVector:function(a,b){this.x+=a.x*b;this.y+=a.y*b;this.z+=a.z*b;this.w+=a.w*b;return this},sub:function(a,b){if(void 0!==b)return console.warn("THREE.Vector4: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(a,b);this.x-= +a.x;this.y-=a.y;this.z-=a.z;this.w-=a.w;return this},subScalar:function(a){this.x-=a;this.y-=a;this.z-=a;this.w-=a;return this},subVectors:function(a,b){this.x=a.x-b.x;this.y=a.y-b.y;this.z=a.z-b.z;this.w=a.w-b.w;return this},multiplyScalar:function(a){isFinite(a)?(this.x*=a,this.y*=a,this.z*=a,this.w*=a):this.w=this.z=this.y=this.x=0;return this},applyMatrix4:function(a){var b=this.x,c=this.y,d=this.z,e=this.w;a=a.elements;this.x=a[0]*b+a[4]*c+a[8]*d+a[12]*e;this.y=a[1]*b+a[5]*c+a[9]*d+a[13]*e;this.z= +a[2]*b+a[6]*c+a[10]*d+a[14]*e;this.w=a[3]*b+a[7]*c+a[11]*d+a[15]*e;return this},divideScalar:function(a){return this.multiplyScalar(1/a)},setAxisAngleFromQuaternion:function(a){this.w=2*Math.acos(a.w);var b=Math.sqrt(1-a.w*a.w);1E-4>b?(this.x=1,this.z=this.y=0):(this.x=a.x/b,this.y=a.y/b,this.z=a.z/b);return this},setAxisAngleFromRotationMatrix:function(a){var b,c,d;a=a.elements;var e=a[0];d=a[4];var f=a[8],g=a[1],h=a[5],k=a[9];c=a[2];b=a[6];var l=a[10];if(.01>Math.abs(d-g)&&.01>Math.abs(f-c)&&.01> +Math.abs(k-b)){if(.1>Math.abs(d+g)&&.1>Math.abs(f+c)&&.1>Math.abs(k+b)&&.1>Math.abs(e+h+l-3))return this.set(1,0,0,0),this;a=Math.PI;e=(e+1)/2;h=(h+1)/2;l=(l+1)/2;d=(d+g)/4;f=(f+c)/4;k=(k+b)/4;e>h&&e>l?.01>e?(b=0,d=c=.707106781):(b=Math.sqrt(e),c=d/b,d=f/b):h>l?.01>h?(b=.707106781,c=0,d=.707106781):(c=Math.sqrt(h),b=d/c,d=k/c):.01>l?(c=b=.707106781,d=0):(d=Math.sqrt(l),b=f/d,c=k/d);this.set(b,c,d,a);return this}a=Math.sqrt((b-k)*(b-k)+(f-c)*(f-c)+(g-d)*(g-d));.001>Math.abs(a)&&(a=1);this.x=(b-k)/ +a;this.y=(f-c)/a;this.z=(g-d)/a;this.w=Math.acos((e+h+l-1)/2);return this},min:function(a){this.x=Math.min(this.x,a.x);this.y=Math.min(this.y,a.y);this.z=Math.min(this.z,a.z);this.w=Math.min(this.w,a.w);return this},max:function(a){this.x=Math.max(this.x,a.x);this.y=Math.max(this.y,a.y);this.z=Math.max(this.z,a.z);this.w=Math.max(this.w,a.w);return this},clamp:function(a,b){this.x=Math.max(a.x,Math.min(b.x,this.x));this.y=Math.max(a.y,Math.min(b.y,this.y));this.z=Math.max(a.z,Math.min(b.z,this.z)); +this.w=Math.max(a.w,Math.min(b.w,this.w));return this},clampScalar:function(){var a,b;return function(c,d){void 0===a&&(a=new THREE.Vector4,b=new THREE.Vector4);a.set(c,c,c,c);b.set(d,d,d,d);return this.clamp(a,b)}}(),floor:function(){this.x=Math.floor(this.x);this.y=Math.floor(this.y);this.z=Math.floor(this.z);this.w=Math.floor(this.w);return this},ceil:function(){this.x=Math.ceil(this.x);this.y=Math.ceil(this.y);this.z=Math.ceil(this.z);this.w=Math.ceil(this.w);return this},round:function(){this.x= +Math.round(this.x);this.y=Math.round(this.y);this.z=Math.round(this.z);this.w=Math.round(this.w);return this},roundToZero:function(){this.x=0>this.x?Math.ceil(this.x):Math.floor(this.x);this.y=0>this.y?Math.ceil(this.y):Math.floor(this.y);this.z=0>this.z?Math.ceil(this.z):Math.floor(this.z);this.w=0>this.w?Math.ceil(this.w):Math.floor(this.w);return this},negate:function(){this.x=-this.x;this.y=-this.y;this.z=-this.z;this.w=-this.w;return this},dot:function(a){return this.x*a.x+this.y*a.y+this.z* +a.z+this.w*a.w},lengthSq:function(){return this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w)},lengthManhattan:function(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)+Math.abs(this.w)},normalize:function(){return this.divideScalar(this.length())},setLength:function(a){return this.multiplyScalar(a/this.length())},lerp:function(a,b){this.x+=(a.x-this.x)*b;this.y+=(a.y-this.y)*b;this.z+=(a.z- +this.z)*b;this.w+=(a.w-this.w)*b;return this},lerpVectors:function(a,b,c){this.subVectors(b,a).multiplyScalar(c).add(a);return this},equals:function(a){return a.x===this.x&&a.y===this.y&&a.z===this.z&&a.w===this.w},fromArray:function(a,b){void 0===b&&(b=0);this.x=a[b];this.y=a[b+1];this.z=a[b+2];this.w=a[b+3];return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);a[b]=this.x;a[b+1]=this.y;a[b+2]=this.z;a[b+3]=this.w;return a},fromAttribute:function(a,b,c){void 0===c&&(c=0);b=b*a.itemSize+ +c;this.x=a.array[b];this.y=a.array[b+1];this.z=a.array[b+2];this.w=a.array[b+3];return this}};THREE.Euler=function(a,b,c,d){this._x=a||0;this._y=b||0;this._z=c||0;this._order=d||THREE.Euler.DefaultOrder};THREE.Euler.RotationOrders="XYZ YZX ZXY XZY YXZ ZYX".split(" ");THREE.Euler.DefaultOrder="XYZ"; +THREE.Euler.prototype={constructor:THREE.Euler,get x(){return this._x},set x(a){this._x=a;this.onChangeCallback()},get y(){return this._y},set y(a){this._y=a;this.onChangeCallback()},get z(){return this._z},set z(a){this._z=a;this.onChangeCallback()},get order(){return this._order},set order(a){this._order=a;this.onChangeCallback()},set:function(a,b,c,d){this._x=a;this._y=b;this._z=c;this._order=d||this._order;this.onChangeCallback();return this},clone:function(){return new this.constructor(this._x, +this._y,this._z,this._order)},copy:function(a){this._x=a._x;this._y=a._y;this._z=a._z;this._order=a._order;this.onChangeCallback();return this},setFromRotationMatrix:function(a,b,c){var d=THREE.Math.clamp,e=a.elements;a=e[0];var f=e[4],g=e[8],h=e[1],k=e[5],l=e[9],p=e[2],n=e[6],e=e[10];b=b||this._order;"XYZ"===b?(this._y=Math.asin(d(g,-1,1)),.99999>Math.abs(g)?(this._x=Math.atan2(-l,e),this._z=Math.atan2(-f,a)):(this._x=Math.atan2(n,k),this._z=0)):"YXZ"===b?(this._x=Math.asin(-d(l,-1,1)),.99999>Math.abs(l)? +(this._y=Math.atan2(g,e),this._z=Math.atan2(h,k)):(this._y=Math.atan2(-p,a),this._z=0)):"ZXY"===b?(this._x=Math.asin(d(n,-1,1)),.99999>Math.abs(n)?(this._y=Math.atan2(-p,e),this._z=Math.atan2(-f,k)):(this._y=0,this._z=Math.atan2(h,a))):"ZYX"===b?(this._y=Math.asin(-d(p,-1,1)),.99999>Math.abs(p)?(this._x=Math.atan2(n,e),this._z=Math.atan2(h,a)):(this._x=0,this._z=Math.atan2(-f,k))):"YZX"===b?(this._z=Math.asin(d(h,-1,1)),.99999>Math.abs(h)?(this._x=Math.atan2(-l,k),this._y=Math.atan2(-p,a)):(this._x= +0,this._y=Math.atan2(g,e))):"XZY"===b?(this._z=Math.asin(-d(f,-1,1)),.99999>Math.abs(f)?(this._x=Math.atan2(n,k),this._y=Math.atan2(g,a)):(this._x=Math.atan2(-l,e),this._y=0)):console.warn("THREE.Euler: .setFromRotationMatrix() given unsupported order: "+b);this._order=b;if(!1!==c)this.onChangeCallback();return this},setFromQuaternion:function(){var a;return function(b,c,d){void 0===a&&(a=new THREE.Matrix4);a.makeRotationFromQuaternion(b);this.setFromRotationMatrix(a,c,d);return this}}(),setFromVector3:function(a, +b){return this.set(a.x,a.y,a.z,b||this._order)},reorder:function(){var a=new THREE.Quaternion;return function(b){a.setFromEuler(this);this.setFromQuaternion(a,b)}}(),equals:function(a){return a._x===this._x&&a._y===this._y&&a._z===this._z&&a._order===this._order},fromArray:function(a){this._x=a[0];this._y=a[1];this._z=a[2];void 0!==a[3]&&(this._order=a[3]);this.onChangeCallback();return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);a[b]=this._x;a[b+1]=this._y;a[b+2]=this._z;a[b+ +3]=this._order;return a},toVector3:function(a){return a?a.set(this._x,this._y,this._z):new THREE.Vector3(this._x,this._y,this._z)},onChange:function(a){this.onChangeCallback=a;return this},onChangeCallback:function(){}};THREE.Line3=function(a,b){this.start=void 0!==a?a:new THREE.Vector3;this.end=void 0!==b?b:new THREE.Vector3}; +THREE.Line3.prototype={constructor:THREE.Line3,set:function(a,b){this.start.copy(a);this.end.copy(b);return this},clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.start.copy(a.start);this.end.copy(a.end);return this},center:function(a){return(a||new THREE.Vector3).addVectors(this.start,this.end).multiplyScalar(.5)},delta:function(a){return(a||new THREE.Vector3).subVectors(this.end,this.start)},distanceSq:function(){return this.start.distanceToSquared(this.end)},distance:function(){return this.start.distanceTo(this.end)}, +at:function(a,b){var c=b||new THREE.Vector3;return this.delta(c).multiplyScalar(a).add(this.start)},closestPointToPointParameter:function(){var a=new THREE.Vector3,b=new THREE.Vector3;return function(c,d){a.subVectors(c,this.start);b.subVectors(this.end,this.start);var e=b.dot(b),e=b.dot(a)/e;d&&(e=THREE.Math.clamp(e,0,1));return e}}(),closestPointToPoint:function(a,b,c){a=this.closestPointToPointParameter(a,b);c=c||new THREE.Vector3;return this.delta(c).multiplyScalar(a).add(this.start)},applyMatrix4:function(a){this.start.applyMatrix4(a); +this.end.applyMatrix4(a);return this},equals:function(a){return a.start.equals(this.start)&&a.end.equals(this.end)}};THREE.Box2=function(a,b){this.min=void 0!==a?a:new THREE.Vector2(Infinity,Infinity);this.max=void 0!==b?b:new THREE.Vector2(-Infinity,-Infinity)}; +THREE.Box2.prototype={constructor:THREE.Box2,set:function(a,b){this.min.copy(a);this.max.copy(b);return this},setFromPoints:function(a){this.makeEmpty();for(var b=0,c=a.length;bthis.max.x||a.ythis.max.y?!1:!0},containsBox:function(a){return this.min.x<=a.min.x&&a.max.x<=this.max.x&&this.min.y<=a.min.y&&a.max.y<=this.max.y?!0:!1},getParameter:function(a,b){return(b||new THREE.Vector2).set((a.x-this.min.x)/(this.max.x-this.min.x),(a.y-this.min.y)/(this.max.y-this.min.y))},intersectsBox:function(a){return a.max.xthis.max.x||a.max.y +this.max.y?!1:!0},clampPoint:function(a,b){return(b||new THREE.Vector2).copy(a).clamp(this.min,this.max)},distanceToPoint:function(){var a=new THREE.Vector2;return function(b){return a.copy(b).clamp(this.min,this.max).sub(b).length()}}(),intersect:function(a){this.min.max(a.min);this.max.min(a.max);return this},union:function(a){this.min.min(a.min);this.max.max(a.max);return this},translate:function(a){this.min.add(a);this.max.add(a);return this},equals:function(a){return a.min.equals(this.min)&& +a.max.equals(this.max)}};THREE.Box3=function(a,b){this.min=void 0!==a?a:new THREE.Vector3(Infinity,Infinity,Infinity);this.max=void 0!==b?b:new THREE.Vector3(-Infinity,-Infinity,-Infinity)}; +THREE.Box3.prototype={constructor:THREE.Box3,set:function(a,b){this.min.copy(a);this.max.copy(b);return this},setFromArray:function(a){this.makeEmpty();for(var b=Infinity,c=Infinity,d=Infinity,e=-Infinity,f=-Infinity,g=-Infinity,h=0,k=a.length;he&&(e=l);p>f&&(f=p);n>g&&(g=n)}this.min.set(b,c,d);this.max.set(e,f,g)},setFromPoints:function(a){this.makeEmpty();for(var b=0,c=a.length;bthis.max.x||a.ythis.max.y||a.zthis.max.z?!1:!0},containsBox:function(a){return this.min.x<=a.min.x&&a.max.x<=this.max.x&&this.min.y<=a.min.y&&a.max.y<=this.max.y&&this.min.z<= +a.min.z&&a.max.z<=this.max.z?!0:!1},getParameter:function(a,b){return(b||new THREE.Vector3).set((a.x-this.min.x)/(this.max.x-this.min.x),(a.y-this.min.y)/(this.max.y-this.min.y),(a.z-this.min.z)/(this.max.z-this.min.z))},intersectsBox:function(a){return a.max.xthis.max.x||a.max.ythis.max.y||a.max.zthis.max.z?!1:!0},intersectsSphere:function(){var a;return function(b){void 0===a&&(a=new THREE.Vector3);this.clampPoint(b.center,a);return a.distanceToSquared(b.center)<= +b.radius*b.radius}}(),intersectsPlane:function(a){var b,c;0=a.constant},clampPoint:function(a,b){return(b||new THREE.Vector3).copy(a).clamp(this.min, +this.max)},distanceToPoint:function(){var a=new THREE.Vector3;return function(b){return a.copy(b).clamp(this.min,this.max).sub(b).length()}}(),getBoundingSphere:function(){var a=new THREE.Vector3;return function(b){b=b||new THREE.Sphere;b.center=this.center();b.radius=.5*this.size(a).length();return b}}(),intersect:function(a){this.min.max(a.min);this.max.min(a.max);return this},union:function(a){this.min.min(a.min);this.max.max(a.max);return this},applyMatrix4:function(){var a=[new THREE.Vector3, +new THREE.Vector3,new THREE.Vector3,new THREE.Vector3,new THREE.Vector3,new THREE.Vector3,new THREE.Vector3,new THREE.Vector3];return function(b){a[0].set(this.min.x,this.min.y,this.min.z).applyMatrix4(b);a[1].set(this.min.x,this.min.y,this.max.z).applyMatrix4(b);a[2].set(this.min.x,this.max.y,this.min.z).applyMatrix4(b);a[3].set(this.min.x,this.max.y,this.max.z).applyMatrix4(b);a[4].set(this.max.x,this.min.y,this.min.z).applyMatrix4(b);a[5].set(this.max.x,this.min.y,this.max.z).applyMatrix4(b);a[6].set(this.max.x, +this.max.y,this.min.z).applyMatrix4(b);a[7].set(this.max.x,this.max.y,this.max.z).applyMatrix4(b);this.makeEmpty();this.setFromPoints(a);return this}}(),translate:function(a){this.min.add(a);this.max.add(a);return this},equals:function(a){return a.min.equals(this.min)&&a.max.equals(this.max)}};THREE.Matrix3=function(){this.elements=new Float32Array([1,0,0,0,1,0,0,0,1]);0this.determinant()&&(g=-g);c.x= +f[12];c.y=f[13];c.z=f[14];b.elements.set(this.elements);c=1/g;var f=1/h,l=1/k;b.elements[0]*=c;b.elements[1]*=c;b.elements[2]*=c;b.elements[4]*=f;b.elements[5]*=f;b.elements[6]*=f;b.elements[8]*=l;b.elements[9]*=l;b.elements[10]*=l;d.setFromRotationMatrix(b);e.x=g;e.y=h;e.z=k;return this}}(),makeFrustum:function(a,b,c,d,e,f){var g=this.elements;g[0]=2*e/(b-a);g[4]=0;g[8]=(b+a)/(b-a);g[12]=0;g[1]=0;g[5]=2*e/(d-c);g[9]=(d+c)/(d-c);g[13]=0;g[2]=0;g[6]=0;g[10]=-(f+e)/(f-e);g[14]=-2*f*e/(f-e);g[3]=0;g[7]= +0;g[11]=-1;g[15]=0;return this},makePerspective:function(a,b,c,d){a=c*Math.tan(THREE.Math.degToRad(.5*a));var e=-a;return this.makeFrustum(e*b,a*b,e,a,c,d)},makeOrthographic:function(a,b,c,d,e,f){var g=this.elements,h=1/(b-a),k=1/(c-d),l=1/(f-e);g[0]=2*h;g[4]=0;g[8]=0;g[12]=-((b+a)*h);g[1]=0;g[5]=2*k;g[9]=0;g[13]=-((c+d)*k);g[2]=0;g[6]=0;g[10]=-2*l;g[14]=-((f+e)*l);g[3]=0;g[7]=0;g[11]=0;g[15]=1;return this},equals:function(a){var b=this.elements;a=a.elements;for(var c=0;16>c;c++)if(b[c]!==a[c])return!1; +return!0},fromArray:function(a){this.elements.set(a);return this},toArray:function(){var a=this.elements;return[a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8],a[9],a[10],a[11],a[12],a[13],a[14],a[15]]}};THREE.Ray=function(a,b){this.origin=void 0!==a?a:new THREE.Vector3;this.direction=void 0!==b?b:new THREE.Vector3}; +THREE.Ray.prototype={constructor:THREE.Ray,set:function(a,b){this.origin.copy(a);this.direction.copy(b);return this},clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.origin.copy(a.origin);this.direction.copy(a.direction);return this},at:function(a,b){return(b||new THREE.Vector3).copy(this.direction).multiplyScalar(a).add(this.origin)},lookAt:function(a){this.direction.copy(a).sub(this.origin).normalize()},recast:function(){var a=new THREE.Vector3;return function(b){this.origin.copy(this.at(b, +a));return this}}(),closestPointToPoint:function(a,b){var c=b||new THREE.Vector3;c.subVectors(a,this.origin);var d=c.dot(this.direction);return 0>d?c.copy(this.origin):c.copy(this.direction).multiplyScalar(d).add(this.origin)},distanceToPoint:function(a){return Math.sqrt(this.distanceSqToPoint(a))},distanceSqToPoint:function(){var a=new THREE.Vector3;return function(b){var c=a.subVectors(b,this.origin).dot(this.direction);if(0>c)return this.origin.distanceToSquared(b);a.copy(this.direction).multiplyScalar(c).add(this.origin); +return a.distanceToSquared(b)}}(),distanceSqToSegment:function(){var a=new THREE.Vector3,b=new THREE.Vector3,c=new THREE.Vector3;return function(d,e,f,g){a.copy(d).add(e).multiplyScalar(.5);b.copy(e).sub(d).normalize();c.copy(this.origin).sub(a);var h=.5*d.distanceTo(e),k=-this.direction.dot(b),l=c.dot(this.direction),p=-c.dot(b),n=c.lengthSq(),m=Math.abs(1-k*k),q;0=-q?e<=q?(h=1/m,d*=h,e*=h,k=d*(d+k*e+2*l)+e*(k*d+e+2*p)+n):(e=h,d=Math.max(0,-(k*e+l)),k=-d*d+e*(e+2* +p)+n):(e=-h,d=Math.max(0,-(k*e+l)),k=-d*d+e*(e+2*p)+n):e<=-q?(d=Math.max(0,-(-k*h+l)),e=0f)return null;f=Math.sqrt(f-e);e=d-f;d+=f;return 0>e&&0>d?null:0>e?this.at(d,c):this.at(e,c)}}(),intersectsSphere:function(a){return this.distanceToPoint(a.center)<=a.radius},distanceToPlane:function(a){var b=a.normal.dot(this.direction);if(0===b)return 0===a.distanceToPoint(this.origin)?0:null;a=-(this.origin.dot(a.normal)+a.constant)/b;return 0<=a?a:null},intersectPlane:function(a,b){var c= +this.distanceToPlane(a);return null===c?null:this.at(c,b)},intersectsPlane:function(a){var b=a.distanceToPoint(this.origin);return 0===b||0>a.normal.dot(this.direction)*b?!0:!1},intersectBox:function(a,b){var c,d,e,f,g;d=1/this.direction.x;f=1/this.direction.y;g=1/this.direction.z;var h=this.origin;0<=d?(c=(a.min.x-h.x)*d,d*=a.max.x-h.x):(c=(a.max.x-h.x)*d,d*=a.min.x-h.x);0<=f?(e=(a.min.y-h.y)*f,f*=a.max.y-h.y):(e=(a.max.y-h.y)*f,f*=a.min.y-h.y);if(c>f||e>d)return null;if(e>c||c!==c)c=e;if(fg||e>d)return null;if(e>c||c!==c)c=e;if(gd?null:this.at(0<=c?c:d,b)},intersectsBox:function(){var a=new THREE.Vector3;return function(b){return null!==this.intersectBox(b,a)}}(),intersectTriangle:function(){var a=new THREE.Vector3,b=new THREE.Vector3,c=new THREE.Vector3,d=new THREE.Vector3;return function(e,f,g,h,k){b.subVectors(f,e);c.subVectors(g,e);d.crossVectors(b,c);f=this.direction.dot(d); +if(0f)h=-1,f=-f;else return null;a.subVectors(this.origin,e);e=h*this.direction.dot(c.crossVectors(a,c));if(0>e)return null;g=h*this.direction.dot(b.cross(a));if(0>g||e+g>f)return null;e=-h*a.dot(d);return 0>e?null:this.at(e/f,k)}}(),applyMatrix4:function(a){this.direction.add(this.origin).applyMatrix4(a);this.origin.applyMatrix4(a);this.direction.sub(this.origin);this.direction.normalize();return this},equals:function(a){return a.origin.equals(this.origin)&&a.direction.equals(this.direction)}}; +THREE.Sphere=function(a,b){this.center=void 0!==a?a:new THREE.Vector3;this.radius=void 0!==b?b:0}; +THREE.Sphere.prototype={constructor:THREE.Sphere,set:function(a,b){this.center.copy(a);this.radius=b;return this},setFromPoints:function(){var a=new THREE.Box3;return function(b,c){var d=this.center;void 0!==c?d.copy(c):a.setFromPoints(b).center(d);for(var e=0,f=0,g=b.length;f=this.radius},containsPoint:function(a){return a.distanceToSquared(this.center)<=this.radius*this.radius},distanceToPoint:function(a){return a.distanceTo(this.center)-this.radius},intersectsSphere:function(a){var b=this.radius+a.radius;return a.center.distanceToSquared(this.center)<=b*b},intersectsBox:function(a){return a.intersectsSphere(this)},intersectsPlane:function(a){return Math.abs(this.center.dot(a.normal)-a.constant)<=this.radius},clampPoint:function(a,b){var c= +this.center.distanceToSquared(a),d=b||new THREE.Vector3;d.copy(a);c>this.radius*this.radius&&(d.sub(this.center).normalize(),d.multiplyScalar(this.radius).add(this.center));return d},getBoundingBox:function(a){a=a||new THREE.Box3;a.set(this.center,this.center);a.expandByScalar(this.radius);return a},applyMatrix4:function(a){this.center.applyMatrix4(a);this.radius*=a.getMaxScaleOnAxis();return this},translate:function(a){this.center.add(a);return this},equals:function(a){return a.center.equals(this.center)&& +a.radius===this.radius}};THREE.Frustum=function(a,b,c,d,e,f){this.planes=[void 0!==a?a:new THREE.Plane,void 0!==b?b:new THREE.Plane,void 0!==c?c:new THREE.Plane,void 0!==d?d:new THREE.Plane,void 0!==e?e:new THREE.Plane,void 0!==f?f:new THREE.Plane]}; +THREE.Frustum.prototype={constructor:THREE.Frustum,set:function(a,b,c,d,e,f){var g=this.planes;g[0].copy(a);g[1].copy(b);g[2].copy(c);g[3].copy(d);g[4].copy(e);g[5].copy(f);return this},clone:function(){return(new this.constructor).copy(this)},copy:function(a){for(var b=this.planes,c=0;6>c;c++)b[c].copy(a.planes[c]);return this},setFromMatrix:function(a){var b=this.planes,c=a.elements;a=c[0];var d=c[1],e=c[2],f=c[3],g=c[4],h=c[5],k=c[6],l=c[7],p=c[8],n=c[9],m=c[10],q=c[11],u=c[12],v=c[13],t=c[14], +c=c[15];b[0].setComponents(f-a,l-g,q-p,c-u).normalize();b[1].setComponents(f+a,l+g,q+p,c+u).normalize();b[2].setComponents(f+d,l+h,q+n,c+v).normalize();b[3].setComponents(f-d,l-h,q-n,c-v).normalize();b[4].setComponents(f-e,l-k,q-m,c-t).normalize();b[5].setComponents(f+e,l+k,q+m,c+t).normalize();return this},intersectsObject:function(){var a=new THREE.Sphere;return function(b){var c=b.geometry;null===c.boundingSphere&&c.computeBoundingSphere();a.copy(c.boundingSphere);a.applyMatrix4(b.matrixWorld); +return this.intersectsSphere(a)}}(),intersectsSphere:function(a){var b=this.planes,c=a.center;a=-a.radius;for(var d=0;6>d;d++)if(b[d].distanceToPoint(c)e;e++){var f=d[e];a.x=0g&&0>f)return!1}return!0}}(),containsPoint:function(a){for(var b=this.planes,c=0;6>c;c++)if(0>b[c].distanceToPoint(a))return!1;return!0}};THREE.Plane=function(a,b){this.normal=void 0!==a?a:new THREE.Vector3(1,0,0);this.constant=void 0!==b?b:0}; +THREE.Plane.prototype={constructor:THREE.Plane,set:function(a,b){this.normal.copy(a);this.constant=b;return this},setComponents:function(a,b,c,d){this.normal.set(a,b,c);this.constant=d;return this},setFromNormalAndCoplanarPoint:function(a,b){this.normal.copy(a);this.constant=-b.dot(this.normal);return this},setFromCoplanarPoints:function(){var a=new THREE.Vector3,b=new THREE.Vector3;return function(c,d,e){d=a.subVectors(e,d).cross(b.subVectors(c,d)).normalize();this.setFromNormalAndCoplanarPoint(d, +c);return this}}(),clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.normal.copy(a.normal);this.constant=a.constant;return this},normalize:function(){var a=1/this.normal.length();this.normal.multiplyScalar(a);this.constant*=a;return this},negate:function(){this.constant*=-1;this.normal.negate();return this},distanceToPoint:function(a){return this.normal.dot(a)+this.constant},distanceToSphere:function(a){return this.distanceToPoint(a.center)-a.radius},projectPoint:function(a, +b){return this.orthoPoint(a,b).sub(a).negate()},orthoPoint:function(a,b){var c=this.distanceToPoint(a);return(b||new THREE.Vector3).copy(this.normal).multiplyScalar(c)},intersectLine:function(){var a=new THREE.Vector3;return function(b,c){var d=c||new THREE.Vector3,e=b.delta(a),f=this.normal.dot(e);if(0===f){if(0===this.distanceToPoint(b.start))return d.copy(b.start)}else return f=-(b.start.dot(this.normal)+this.constant)/f,0>f||1b&&0a&&0e;e++)8===e||13===e||18===e||23===e?b[e]="-":14===e?b[e]="4":(2>=c&&(c=33554432+16777216*Math.random()|0),d=c&15,c>>=4,b[e]=a[19===e?d&3|8:d]);return b.join("")}}(),clamp:function(a,b,c){return Math.max(b,Math.min(c,a))},euclideanModulo:function(a,b){return(a%b+b)%b},mapLinear:function(a,b,c,d,e){return d+(a-b)*(e-d)/(c-b)},smoothstep:function(a, +b,c){if(a<=b)return 0;if(a>=c)return 1;a=(a-b)/(c-b);return a*a*(3-2*a)},smootherstep:function(a,b,c){if(a<=b)return 0;if(a>=c)return 1;a=(a-b)/(c-b);return a*a*a*(a*(6*a-15)+10)},random16:function(){console.warn("THREE.Math.random16() has been deprecated. Use Math.random() instead.");return Math.random()},randInt:function(a,b){return a+Math.floor(Math.random()*(b-a+1))},randFloat:function(a,b){return a+Math.random()*(b-a)},randFloatSpread:function(a){return a*(.5-Math.random())},degToRad:function(){var a= +Math.PI/180;return function(b){return b*a}}(),radToDeg:function(){var a=180/Math.PI;return function(b){return b*a}}(),isPowerOfTwo:function(a){return 0===(a&a-1)&&0!==a},nearestPowerOfTwo:function(a){return Math.pow(2,Math.round(Math.log(a)/Math.LN2))},nextPowerOfTwo:function(a){a--;a|=a>>1;a|=a>>2;a|=a>>4;a|=a>>8;a|=a>>16;a++;return a}}; +THREE.Spline=function(a){function b(a,b,c,d,e,f,g){a=.5*(c-a);d=.5*(d-b);return(2*(b-c)+a+d)*g+(-3*(b-c)-2*a-d)*f+a*e+b}this.points=a;var c=[],d={x:0,y:0,z:0},e,f,g,h,k,l,p,n,m;this.initFromArray=function(a){this.points=[];for(var b=0;bthis.points.length-2?this.points.length-1:f+1;c[3]=f>this.points.length-3?this.points.length-1:f+ +2;l=this.points[c[0]];p=this.points[c[1]];n=this.points[c[2]];m=this.points[c[3]];h=g*g;k=g*h;d.x=b(l.x,p.x,n.x,m.x,g,h,k);d.y=b(l.y,p.y,n.y,m.y,g,h,k);d.z=b(l.z,p.z,n.z,m.z,g,h,k);return d};this.getControlPointsArray=function(){var a,b,c=this.points.length,d=[];for(a=0;a=b.x+b.y}}(); +THREE.Triangle.prototype={constructor:THREE.Triangle,set:function(a,b,c){this.a.copy(a);this.b.copy(b);this.c.copy(c);return this},setFromPointsAndIndices:function(a,b,c,d){this.a.copy(a[b]);this.b.copy(a[c]);this.c.copy(a[d]);return this},clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.a.copy(a.a);this.b.copy(a.b);this.c.copy(a.c);return this},area:function(){var a=new THREE.Vector3,b=new THREE.Vector3;return function(){a.subVectors(this.c,this.b);b.subVectors(this.a, +this.b);return.5*a.cross(b).length()}}(),midpoint:function(a){return(a||new THREE.Vector3).addVectors(this.a,this.b).add(this.c).multiplyScalar(1/3)},normal:function(a){return THREE.Triangle.normal(this.a,this.b,this.c,a)},plane:function(a){return(a||new THREE.Plane).setFromCoplanarPoints(this.a,this.b,this.c)},barycoordFromPoint:function(a,b){return THREE.Triangle.barycoordFromPoint(a,this.a,this.b,this.c,b)},containsPoint:function(a){return THREE.Triangle.containsPoint(a,this.a,this.b,this.c)}, +equals:function(a){return a.a.equals(this.a)&&a.b.equals(this.b)&&a.c.equals(this.c)}};THREE.Interpolant=function(a,b,c,d){this.parameterPositions=a;this._cachedIndex=0;this.resultBuffer=void 0!==d?d:new b.constructor(c);this.sampleValues=b;this.valueSize=c}; +THREE.Interpolant.prototype={constructor:THREE.Interpolant,evaluate:function(a){var b=this.parameterPositions,c=this._cachedIndex,d=b[c],e=b[c-1];a:{b:{c:{d:if(!(a=e)break a;else{f=b[1];a=e)break b}d= +c;c=0}}for(;c>>1,ad;d++)if(e[d]===e[(d+1)%3]){a.push(f);break}for(f=a.length-1;0<=f;f--)for(e=a[f],this.faces.splice(e, +1),c=0,g=this.faceVertexUvs.length;cthis.duration&&this.resetDuration();this.trim();this.optimize()}; +THREE.AnimationClip.prototype={constructor:THREE.AnimationClip,resetDuration:function(){for(var a=0,b=0,c=this.tracks.length;b!==c;++b)var d=this.tracks[b],a=Math.max(a,d.times[d.times.length-1]);this.duration=a},trim:function(){for(var a=0;ab||0===c)return;this._startTime=null;b*=c}b*=this._updateTimeScale(a);c=this._updateTime(b);a=this._updateWeight(a);if(0c.parameterPositions[1]&&(this.stopFading(),0===d&&(this.enabled=!1))}}return this._effectiveWeight=b},_updateTimeScale:function(a){var b=0;if(!this.paused){var b=this.timeScale,c=this._timeScaleInterpolant;if(null!==c){var d=c.evaluate(a)[0],b=b*d;a>c.parameterPositions[1]&&(this.stopWarping(),0===b?this.pause=!0:this.timeScale=b)}}return this._effectiveTimeScale= +b},_updateTime:function(a){var b=this.time+a;if(0===a)return b;var c=this._clip.duration,d=this.loop,e=this._loopCount,f=!1;switch(d){case THREE.LoopOnce:-1===e&&(this.loopCount=0,this._setEndings(!0,!0,!1));if(b>=c)b=c;else if(0>b)b=0;else break;this.clampWhenFinished?this.pause=!0:this.enabled=!1;this._mixer.dispatchEvent({type:"finished",action:this,direction:0>a?-1:1});break;case THREE.LoopPingPong:f=!0;case THREE.LoopRepeat:-1===e&&(0=c||0>b){var g=Math.floor(b/c),b=b-c*g,e=e+Math.abs(g),h=this.repetitions-e;if(0>h){this.clampWhenFinished?this.paused=!0:this.enabled=!1;b=0a,this._setEndings(a,!a,f)):this._setEndings(!1,!1,f);this._loopCount=e;this._mixer.dispatchEvent({type:"loop",action:this,loopDelta:g})}if(d===THREE.LoopPingPong&&1===(e&1))return this.time=b,c-b}return this.time=b},_setEndings:function(a, +b,c){var d=this._interpolantSettings;c?(d.endingStart=THREE.ZeroSlopeEnding,d.endingEnd=THREE.ZeroSlopeEnding):(d.endingStart=a?this.zeroSlopeAtStart?THREE.ZeroSlopeEnding:THREE.ZeroCurvatureEnding:THREE.WrapAroundEnding,d.endingEnd=b?this.zeroSlopeAtEnd?THREE.ZeroSlopeEnding:THREE.ZeroCurvatureEnding:THREE.WrapAroundEnding)},_scheduleFading:function(a,b,c){var d=this._mixer,e=d.time,f=this._weightInterpolant;null===f&&(this._weightInterpolant=f=d._lendControlInterpolant());d=f.parameterPositions; +f=f.sampleValues;d[0]=e;f[0]=b;d[1]=e+a;f[1]=c;return this}}; +Object.assign(THREE.AnimationMixer.prototype,{_bindAction:function(a,b){var c=a._localRoot||this._root,d=a._clip.tracks,e=d.length,f=a._propertyBindings,g=a._interpolants,h=c.uuid,k=this._bindingsByRootAndName,l=k[h];void 0===l&&(l={},k[h]=l);for(k=0;k!==e;++k){var p=d[k],n=p.name,m=l[n];if(void 0===m){m=f[k];if(void 0!==m){null===m._cacheIndex&&(++m.referenceCount,this._addInactiveBinding(m,h,n));continue}m=new THREE.PropertyMixer(THREE.PropertyBinding.create(c,n,b&&b._propertyBindings[k].binding.parsedPath), +p.ValueTypeName,p.getValueSize());++m.referenceCount;this._addInactiveBinding(m,h,n)}f[k]=m;g[k].resultBuffer=m.buffer}},_activateAction:function(a){if(!this._isActiveAction(a)){if(null===a._cacheIndex){var b=(a._localRoot||this._root).uuid,c=a._clip.name,d=this._actionsByClip[c];this._bindAction(a,d&&d.knownActions[0]);this._addInactiveAction(a,c,b)}b=a._propertyBindings;c=0;for(d=b.length;c!==d;++c){var e=b[c];0===e.useCount++&&(this._lendBinding(e),e.saveOriginalState())}this._lendAction(a)}}, +_deactivateAction:function(a){if(this._isActiveAction(a)){for(var b=a._propertyBindings,c=0,d=b.length;c!==d;++c){var e=b[c];0===--e.useCount&&(e.restoreOriginalState(),this._takeBackBinding(e))}this._takeBackAction(a)}},_initMemoryManager:function(){this._actions=[];this._nActiveActions=0;this._actionsByClip={};this._bindings=[];this._nActiveBindings=0;this._bindingsByRootAndName={};this._controlInterpolants=[];this._nActiveControlInterpolants=0;var a=this;this.stats={actions:{get total(){return a._actions.length}, +get inUse(){return a._nActiveActions}},bindings:{get total(){return a._bindings.length},get inUse(){return a._nActiveBindings}},controlInterpolants:{get total(){return a._controlInterpolants.length},get inUse(){return a._nActiveControlInterpolants}}}},_isActiveAction:function(a){a=a._cacheIndex;return null!==a&&a=c){var n=c++,m=b[n];d[m.uuid]= +p;b[p]=m;d[l]=n;b[n]=k;k=0;for(l=f;k!==l;++k){var m=e[k],q=m[p];m[p]=m[n];m[n]=q}}}this.nCachedObjects_=c},uncache:function(a){for(var b=this._objects,c=b.length,d=this.nCachedObjects_,e=this._indicesByUUID,f=this._bindings,g=f.length,h=0,k=arguments.length;h!==k;++h){var l=arguments[h].uuid,p=e[l];if(void 0!==p)if(delete e[l],pb;)--f;++f;if(0!==e||f!==d)e>=f&&(f=Math.max(f,1),e=f-1),d=this.getValueSize(),this.times=THREE.AnimationUtils.arraySlice(c,e,f),this.values=THREE.AnimationUtils.arraySlice(this.values,e*d,f*d);return this},validate:function(){var a=!0,b=this.getValueSize();0!==b-Math.floor(b)&&(console.error("invalid value size in track", +this),a=!1);var c=this.times,b=this.values,d=c.length;0===d&&(console.error("track is empty",this),a=!1);for(var e=null,f=0;f!==d;f++){var g=c[f];if("number"===typeof g&&isNaN(g)){console.error("time is not a valid number",this,f,g);a=!1;break}if(null!==e&&e>g){console.error("out of order keys",this,f,g,e);a=!1;break}e=g}if(void 0!==b&&THREE.AnimationUtils.isTypedArray(b))for(f=0,c=b.length;f!==c;++f)if(d=b[f],isNaN(d)){console.error("value is not a valid number",this,f,d);a=!1;break}return a},optimize:function(){for(var a= +this.times,b=this.values,c=this.getValueSize(),d=1,e=1,f=a.length-1;e<=f;++e){var g=!1,h=a[e];if(h!==a[e+1]&&(1!==e||h!==h[0]))for(var k=e*c,l=k-c,p=k+c,h=0;h!==c;++h){var n=b[k+h];if(n!==b[l+h]||n!==b[p+h]){g=!0;break}}if(g){if(e!==d)for(a[d]=a[e],g=e*c,k=d*c,h=0;h!==c;++h)b[k+h]=b[g+h];++d}}d!==a.length&&(this.times=THREE.AnimationUtils.arraySlice(a,0,d),this.values=THREE.AnimationUtils.arraySlice(b,0,d*c));return this}}; +Object.assign(THREE.KeyframeTrack,{parse:function(a){if(void 0===a.type)throw Error("track type undefined, can not parse");var b=THREE.KeyframeTrack._getTrackTypeForValueTypeName(a.type);if(void 0===a.times){console.warn("legacy JSON format detected, converting");var c=[],d=[];THREE.AnimationUtils.flattenJSON(a.keys,c,d,"value");a.times=c;a.values=d}return void 0!==b.parse?b.parse(a):new b(a.name,a.times,a.values,a.interpolation)},toJSON:function(a){var b=a.constructor;if(void 0!==b.toJSON)b=b.toJSON(a); +else{var b={name:a.name,times:THREE.AnimationUtils.convertArray(a.times,Array),values:THREE.AnimationUtils.convertArray(a.values,Array)},c=a.getInterpolation();c!==a.DefaultInterpolation&&(b.interpolation=c)}b.type=a.ValueTypeName;return b},_getTrackTypeForValueTypeName:function(a){switch(a.toLowerCase()){case "scalar":case "double":case "float":case "number":case "integer":return THREE.NumberKeyframeTrack;case "vector":case "vector2":case "vector3":case "vector4":return THREE.VectorKeyframeTrack; +case "color":return THREE.ColorKeyframeTrack;case "quaternion":return THREE.QuaternionKeyframeTrack;case "bool":case "boolean":return THREE.BooleanKeyframeTrack;case "string":return THREE.StringKeyframeTrack}throw Error("Unsupported typeName: "+a);}});THREE.PropertyBinding=function(a,b,c){this.path=b;this.parsedPath=c||THREE.PropertyBinding.parseTrackName(b);this.node=THREE.PropertyBinding.findNode(a,this.parsedPath.nodeName)||a;this.rootNode=a}; +THREE.PropertyBinding.prototype={constructor:THREE.PropertyBinding,getValue:function(a,b){this.bind();this.getValue(a,b)},setValue:function(a,b){this.bind();this.setValue(a,b)},bind:function(){var a=this.node,b=this.parsedPath,c=b.objectName,d=b.propertyName,e=b.propertyIndex;a||(this.node=a=THREE.PropertyBinding.findNode(this.rootNode,b.nodeName)||this.rootNode);this.getValue=this._getValue_unavailable;this.setValue=this._setValue_unavailable;if(a){if(c){var f=b.objectIndex;switch(c){case "materials":if(!a.material){console.error(" can not bind to material as node does not have a material", +this);return}if(!a.material.materials){console.error(" can not bind to material.materials as node.material does not have a materials array",this);return}a=a.material.materials;break;case "bones":if(!a.skeleton){console.error(" can not bind to bones as node does not have a skeleton",this);return}a=a.skeleton.bones;for(c=0;cd&&this._mixBufferRegion(c,a,3*b,1-d,b);for(var d=b,f=b+b;d!==f;++d)if(c[d]!==c[d+b]){e.setValue(c,a); +break}},saveOriginalState:function(){var a=this.buffer,b=this.valueSize,c=3*b;this.binding.getValue(a,c);for(var d=b;d!==c;++d)a[d]=a[c+d%b];this.cumulativeWeight=0},restoreOriginalState:function(){this.binding.setValue(this.buffer,3*this.valueSize)},_select:function(a,b,c,d,e){if(.5<=d)for(d=0;d!==e;++d)a[b+d]=a[c+d]},_slerp:function(a,b,c,d,e){THREE.Quaternion.slerpFlat(a,b,a,b,a,c,d)},_lerp:function(a,b,c,d,e){for(var f=1-d,g=0;g!==e;++g){var h=b+g;a[h]=a[h]*f+a[c+g]*d}}}; +THREE.BooleanKeyframeTrack=function(a,b,c){THREE.KeyframeTrack.call(this,a,b,c)};THREE.BooleanKeyframeTrack.prototype=Object.assign(Object.create(THREE.KeyframeTrack.prototype),{constructor:THREE.BooleanKeyframeTrack,ValueTypeName:"bool",ValueBufferType:Array,DefaultInterpolation:THREE.IntepolateDiscrete,InterpolantFactoryMethodLinear:void 0,InterpolantFactoryMethodSmooth:void 0});THREE.NumberKeyframeTrack=function(a,b,c,d){THREE.KeyframeTrack.call(this,a,b,c,d)}; +THREE.NumberKeyframeTrack.prototype=Object.assign(Object.create(THREE.KeyframeTrack.prototype),{constructor:THREE.NumberKeyframeTrack,ValueTypeName:"number"});THREE.QuaternionKeyframeTrack=function(a,b,c,d){THREE.KeyframeTrack.call(this,a,b,c,d)}; +THREE.QuaternionKeyframeTrack.prototype=Object.assign(Object.create(THREE.KeyframeTrack.prototype),{constructor:THREE.QuaternionKeyframeTrack,ValueTypeName:"quaternion",DefaultInterpolation:THREE.InterpolateLinear,InterpolantFactoryMethodLinear:function(a){return new THREE.QuaternionLinearInterpolant(this.times,this.values,this.getValueSize(),a)},InterpolantFactoryMethodSmooth:void 0});THREE.StringKeyframeTrack=function(a,b,c,d){THREE.KeyframeTrack.call(this,a,b,c,d)}; +THREE.StringKeyframeTrack.prototype=Object.assign(Object.create(THREE.KeyframeTrack.prototype),{constructor:THREE.StringKeyframeTrack,ValueTypeName:"string",ValueBufferType:Array,DefaultInterpolation:THREE.IntepolateDiscrete,InterpolantFactoryMethodLinear:void 0,InterpolantFactoryMethodSmooth:void 0});THREE.VectorKeyframeTrack=function(a,b,c,d){THREE.KeyframeTrack.call(this,a,b,c,d)}; +THREE.VectorKeyframeTrack.prototype=Object.assign(Object.create(THREE.KeyframeTrack.prototype),{constructor:THREE.VectorKeyframeTrack,ValueTypeName:"vector"}); +THREE.Audio=function(a){THREE.Object3D.call(this);this.type="Audio";this.context=a.context;this.source=this.context.createBufferSource();this.source.onended=this.onEnded.bind(this);this.gain=this.context.createGain();this.gain.connect(a.getInput());this.autoplay=!1;this.startTime=0;this.playbackRate=1;this.isPlaying=!1;this.hasPlaybackControl=!0;this.sourceType="empty";this.filter=null};THREE.Audio.prototype=Object.create(THREE.Object3D.prototype);THREE.Audio.prototype.constructor=THREE.Audio; +THREE.Audio.prototype.getOutput=function(){return this.gain};THREE.Audio.prototype.load=function(a){var b=new THREE.AudioBuffer(this.context);b.load(a);this.setBuffer(b);return this};THREE.Audio.prototype.setNodeSource=function(a){this.hasPlaybackControl=!1;this.sourceType="audioNode";this.source=a;this.connect();return this};THREE.Audio.prototype.setBuffer=function(a){var b=this;a.onReady(function(a){b.source.buffer=a;b.sourceType="buffer";b.autoplay&&b.play()});return this}; +THREE.Audio.prototype.play=function(){if(!0===this.isPlaying)console.warn("THREE.Audio: Audio is already playing.");else if(!1===this.hasPlaybackControl)console.warn("THREE.Audio: this Audio has no playback control.");else{var a=this.context.createBufferSource();a.buffer=this.source.buffer;a.loop=this.source.loop;a.onended=this.source.onended;a.start(0,this.startTime);a.playbackRate.value=this.playbackRate;this.isPlaying=!0;this.source=a;this.connect()}}; +THREE.Audio.prototype.pause=function(){!1===this.hasPlaybackControl?console.warn("THREE.Audio: this Audio has no playback control."):(this.source.stop(),this.startTime=this.context.currentTime)};THREE.Audio.prototype.stop=function(){!1===this.hasPlaybackControl?console.warn("THREE.Audio: this Audio has no playback control."):(this.source.stop(),this.startTime=0)};THREE.Audio.prototype.connect=function(){null!==this.filter?(this.source.connect(this.filter),this.filter.connect(this.getOutput())):this.source.connect(this.getOutput())}; +THREE.Audio.prototype.disconnect=function(){null!==this.filter?(this.source.disconnect(this.filter),this.filter.disconnect(this.getOutput())):this.source.disconnect(this.getOutput())};THREE.Audio.prototype.getFilter=function(){return this.filter};THREE.Audio.prototype.setFilter=function(a){void 0===a&&(a=null);!0===this.isPlaying?(this.disconnect(),this.filter=a,this.connect()):this.filter=a}; +THREE.Audio.prototype.setPlaybackRate=function(a){!1===this.hasPlaybackControl?console.warn("THREE.Audio: this Audio has no playback control."):(this.playbackRate=a,!0===this.isPlaying&&(this.source.playbackRate.value=this.playbackRate))};THREE.Audio.prototype.getPlaybackRate=function(){return this.playbackRate};THREE.Audio.prototype.onEnded=function(){this.isPlaying=!1}; +THREE.Audio.prototype.setLoop=function(a){!1===this.hasPlaybackControl?console.warn("THREE.Audio: this Audio has no playback control."):this.source.loop=a};THREE.Audio.prototype.getLoop=function(){return!1===this.hasPlaybackControl?(console.warn("THREE.Audio: this Audio has no playback control."),!1):this.source.loop};THREE.Audio.prototype.setVolume=function(a){this.gain.gain.value=a};THREE.Audio.prototype.getVolume=function(){return this.gain.gain.value}; +THREE.AudioAnalyser=function(a,b){this.analyser=a.context.createAnalyser();this.analyser.fftSize=void 0!==b?b:2048;this.data=new Uint8Array(this.analyser.frequencyBinCount);a.getOutput().connect(this.analyser)};THREE.AudioAnalyser.prototype={constructor:THREE.AudioAnalyser,getData:function(){this.analyser.getByteFrequencyData(this.data);return this.data}};THREE.AudioBuffer=function(a){this.context=a;this.ready=!1;this.readyCallbacks=[]}; +THREE.AudioBuffer.prototype.load=function(a){var b=this,c=new XMLHttpRequest;c.open("GET",a,!0);c.responseType="arraybuffer";c.onload=function(a){b.context.decodeAudioData(this.response,function(a){b.buffer=a;b.ready=!0;for(a=0;ak.opacity&&(k.transparent=!0);c.setTextures(h);return c.parse(k)}}()}; +THREE.Loader.Handlers={handlers:[],add:function(a,b){this.handlers.push(a,b)},get:function(a){for(var b=this.handlers,c=0,d=b.length;cg;g++)m=w[k++],s=t[2*m],m=t[2*m+1],s=new THREE.Vector2(s,m),2!==g&&c.faceVertexUvs[d][h].push(s),0!==g&&c.faceVertexUvs[d][h+1].push(s);n&&(n=3*w[k++],q.normal.set(E[n++],E[n++],E[n]),v.normal.copy(q.normal));if(u)for(d=0;4>d;d++)n=3*w[k++],u=new THREE.Vector3(E[n++],E[n++],E[n]),2!==d&&q.vertexNormals.push(u),0!==d&&v.vertexNormals.push(u); +p&&(p=w[k++],p=x[p],q.color.setHex(p),v.color.setHex(p));if(b)for(d=0;4>d;d++)p=w[k++],p=x[p],2!==d&&q.vertexColors.push(new THREE.Color(p)),0!==d&&v.vertexColors.push(new THREE.Color(p));c.faces.push(q);c.faces.push(v)}else{q=new THREE.Face3;q.a=w[k++];q.b=w[k++];q.c=w[k++];h&&(h=w[k++],q.materialIndex=h);h=c.faces.length;if(d)for(d=0;dg;g++)m=w[k++],s=t[2*m],m=t[2*m+1],s=new THREE.Vector2(s,m),c.faceVertexUvs[d][h].push(s);n&&(n=3*w[k++],q.normal.set(E[n++], +E[n++],E[n]));if(u)for(d=0;3>d;d++)n=3*w[k++],u=new THREE.Vector3(E[n++],E[n++],E[n]),q.vertexNormals.push(u);p&&(p=w[k++],q.color.setHex(x[p]));if(b)for(d=0;3>d;d++)p=w[k++],q.vertexColors.push(new THREE.Color(x[p]));c.faces.push(q)}})(d);(function(){var b=void 0!==a.influencesPerVertex?a.influencesPerVertex:2;if(a.skinWeights)for(var d=0,g=a.skinWeights.length;dthis.opacity&&(d.opacity=this.opacity);!0===this.transparent&&(d.transparent=this.transparent);0a.x||1a.x?0:1;break;case THREE.MirroredRepeatWrapping:1===Math.abs(Math.floor(a.x)%2)?a.x=Math.ceil(a.x)-a.x:a.x-=Math.floor(a.x)}if(0>a.y||1a.y?0:1;break;case THREE.MirroredRepeatWrapping:1=== +Math.abs(Math.floor(a.y)%2)?a.y=Math.ceil(a.y)-a.y:a.y-=Math.floor(a.y)}this.flipY&&(a.y=1-a.y)}}};THREE.EventDispatcher.prototype.apply(THREE.Texture.prototype);THREE.TextureIdCount=0;THREE.CanvasTexture=function(a,b,c,d,e,f,g,h,k){THREE.Texture.call(this,a,b,c,d,e,f,g,h,k);this.needsUpdate=!0};THREE.CanvasTexture.prototype=Object.create(THREE.Texture.prototype);THREE.CanvasTexture.prototype.constructor=THREE.CanvasTexture; +THREE.CubeTexture=function(a,b,c,d,e,f,g,h,k){a=void 0!==a?a:[];b=void 0!==b?b:THREE.CubeReflectionMapping;THREE.Texture.call(this,a,b,c,d,e,f,g,h,k);this.flipY=!1};THREE.CubeTexture.prototype=Object.create(THREE.Texture.prototype);THREE.CubeTexture.prototype.constructor=THREE.CubeTexture;Object.defineProperty(THREE.CubeTexture.prototype,"images",{get:function(){return this.image},set:function(a){this.image=a}}); +THREE.CompressedTexture=function(a,b,c,d,e,f,g,h,k,l,p){THREE.Texture.call(this,null,f,g,h,k,l,d,e,p);this.image={width:b,height:c};this.mipmaps=a;this.generateMipmaps=this.flipY=!1};THREE.CompressedTexture.prototype=Object.create(THREE.Texture.prototype);THREE.CompressedTexture.prototype.constructor=THREE.CompressedTexture; +THREE.DataTexture=function(a,b,c,d,e,f,g,h,k,l,p){THREE.Texture.call(this,null,f,g,h,k,l,d,e,p);this.image={data:a,width:b,height:c};this.magFilter=void 0!==k?k:THREE.NearestFilter;this.minFilter=void 0!==l?l:THREE.NearestFilter;this.generateMipmaps=this.flipY=!1};THREE.DataTexture.prototype=Object.create(THREE.Texture.prototype);THREE.DataTexture.prototype.constructor=THREE.DataTexture; +THREE.VideoTexture=function(a,b,c,d,e,f,g,h,k){function l(){requestAnimationFrame(l);a.readyState===a.HAVE_ENOUGH_DATA&&(p.needsUpdate=!0)}THREE.Texture.call(this,a,b,c,d,e,f,g,h,k);this.generateMipmaps=!1;var p=this;l()};THREE.VideoTexture.prototype=Object.create(THREE.Texture.prototype);THREE.VideoTexture.prototype.constructor=THREE.VideoTexture;THREE.Group=function(){THREE.Object3D.call(this);this.type="Group"};THREE.Group.prototype=Object.create(THREE.Object3D.prototype); +THREE.Group.prototype.constructor=THREE.Group;THREE.Points=function(a,b){THREE.Object3D.call(this);this.type="Points";this.geometry=void 0!==a?a:new THREE.Geometry;this.material=void 0!==b?b:new THREE.PointsMaterial({color:16777215*Math.random()})};THREE.Points.prototype=Object.create(THREE.Object3D.prototype);THREE.Points.prototype.constructor=THREE.Points; +THREE.Points.prototype.raycast=function(){var a=new THREE.Matrix4,b=new THREE.Ray,c=new THREE.Sphere;return function(d,e){function f(a,c){var f=b.distanceSqToPoint(a);if(fd.far||e.push({distance:l,distanceToRay:Math.sqrt(f),point:h.clone(),index:c,face:null,object:g})}}var g=this,h=this.geometry,k=this.matrixWorld,l=d.params.Points.threshold;null===h.boundingSphere&&h.computeBoundingSphere();c.copy(h.boundingSphere); +c.applyMatrix4(k);if(!1!==d.ray.intersectsSphere(c)){a.getInverse(k);b.copy(d.ray).applyMatrix4(a);var l=l/((this.scale.x+this.scale.y+this.scale.z)/3),p=l*l,l=new THREE.Vector3;if(h instanceof THREE.BufferGeometry){var n=h.index,h=h.attributes.position.array;if(null!==n)for(var m=n.array,n=0,q=m.length;nf||(p.applyMatrix4(this.matrixWorld),v=d.ray.origin.distanceTo(p),vd.far||e.push({distance:v,point:h.clone().applyMatrix4(this.matrixWorld),index:g,face:null,faceIndex:null,object:this}))}else for(g=0,u=q.length/3-1;gf||(p.applyMatrix4(this.matrixWorld), +v=d.ray.origin.distanceTo(p),vd.far||e.push({distance:v,point:h.clone().applyMatrix4(this.matrixWorld),index:g,face:null,faceIndex:null,object:this}))}else if(g instanceof THREE.Geometry)for(k=g.vertices,l=k.length,g=0;gf||(p.applyMatrix4(this.matrixWorld),v=d.ray.origin.distanceTo(p),vd.far||e.push({distance:v,point:h.clone().applyMatrix4(this.matrixWorld),index:g,face:null,faceIndex:null,object:this}))}}}(); +THREE.Line.prototype.clone=function(){return(new this.constructor(this.geometry,this.material)).copy(this)};THREE.LineStrip=0;THREE.LinePieces=1;THREE.LineSegments=function(a,b){THREE.Line.call(this,a,b);this.type="LineSegments"};THREE.LineSegments.prototype=Object.create(THREE.Line.prototype);THREE.LineSegments.prototype.constructor=THREE.LineSegments; +THREE.Mesh=function(a,b){THREE.Object3D.call(this);this.type="Mesh";this.geometry=void 0!==a?a:new THREE.Geometry;this.material=void 0!==b?b:new THREE.MeshBasicMaterial({color:16777215*Math.random()});this.drawMode=THREE.TrianglesDrawMode;this.updateMorphTargets()};THREE.Mesh.prototype=Object.create(THREE.Object3D.prototype);THREE.Mesh.prototype.constructor=THREE.Mesh;THREE.Mesh.prototype.setDrawMode=function(a){this.drawMode=a}; +THREE.Mesh.prototype.updateMorphTargets=function(){if(void 0!==this.geometry.morphTargets&&0b.far?null:{distance:c,point:s.clone(), +object:a}}function c(c,d,e,f,l,p,n,s){g.fromArray(f,3*p);h.fromArray(f,3*n);k.fromArray(f,3*s);if(c=b(c,d,e,g,h,k,t))l&&(m.fromArray(l,2*p),q.fromArray(l,2*n),u.fromArray(l,2*s),c.uv=a(t,g,h,k,m,q,u)),c.face=new THREE.Face3(p,n,s,THREE.Triangle.normal(g,h,k)),c.faceIndex=p;return c}var d=new THREE.Matrix4,e=new THREE.Ray,f=new THREE.Sphere,g=new THREE.Vector3,h=new THREE.Vector3,k=new THREE.Vector3,l=new THREE.Vector3,p=new THREE.Vector3,n=new THREE.Vector3,m=new THREE.Vector2,q=new THREE.Vector2, +u=new THREE.Vector2,v=new THREE.Vector3,t=new THREE.Vector3,s=new THREE.Vector3;return function(s,v){var x=this.geometry,D=this.material,z=this.matrixWorld;if(void 0!==D&&(null===x.boundingSphere&&x.computeBoundingSphere(),f.copy(x.boundingSphere),f.applyMatrix4(z),!1!==s.ray.intersectsSphere(f)&&(d.getInverse(z),e.copy(s.ray).applyMatrix4(d),null===x.boundingBox||!1!==e.intersectsBox(x.boundingBox)))){var y,B;if(x instanceof THREE.BufferGeometry){var G,F,D=x.index,z=x.attributes,x=z.position.array; +void 0!==z.uv&&(y=z.uv.array);if(null!==D)for(var z=D.array,H=0,L=z.length;H=d[e].distance)d[e-1].object.visible=!1,d[e].object.visible=!0;else break;for(;ethis.scale.x*this.scale.y||c.push({distance:Math.sqrt(d),point:this.position,face:null,object:this})}}();THREE.Sprite.prototype.clone=function(){return(new this.constructor(this.material)).copy(this)};THREE.Particle=THREE.Sprite; +THREE.LensFlare=function(a,b,c,d,e){THREE.Object3D.call(this);this.lensFlares=[];this.positionScreen=new THREE.Vector3;this.customUpdateCallback=void 0;void 0!==a&&this.add(a,b,c,d,e)};THREE.LensFlare.prototype=Object.create(THREE.Object3D.prototype);THREE.LensFlare.prototype.constructor=THREE.LensFlare; +THREE.LensFlare.prototype.add=function(a,b,c,d,e,f){void 0===b&&(b=-1);void 0===c&&(c=0);void 0===f&&(f=1);void 0===e&&(e=new THREE.Color(16777215));void 0===d&&(d=THREE.NormalBlending);c=Math.min(c,Math.max(0,c));this.lensFlares.push({texture:a,size:b,distance:c,x:0,y:0,z:0,scale:1,rotation:0,opacity:f,color:e,blending:d})}; +THREE.LensFlare.prototype.updateLensFlares=function(){var a,b=this.lensFlares.length,c,d=2*-this.positionScreen.x,e=2*-this.positionScreen.y;for(a=0;ac;c++)r.deleteFramebuffer(b.__webglFramebuffer[c]),r.deleteRenderbuffer(b.__webglDepthbuffer[c]);else r.deleteFramebuffer(b.__webglFramebuffer),r.deleteRenderbuffer(b.__webglDepthbuffer);U.delete(a.texture); +U.delete(a)}ia.textures--}function h(a){a=a.target;a.removeEventListener("dispose",h);k(a);U.delete(a)}function k(a){var b=U.get(a).program;a.program=void 0;void 0!==b&&oa.releaseProgram(b)}function l(a,b){return Math.abs(b[0])-Math.abs(a[0])}function p(a,b){return a.object.renderOrder!==b.object.renderOrder?a.object.renderOrder-b.object.renderOrder:a.material.id!==b.material.id?a.material.id-b.material.id:a.z!==b.z?a.z-b.z:a.id-b.id}function n(a,b){return a.object.renderOrder!==b.object.renderOrder? +a.object.renderOrder-b.object.renderOrder:a.z!==b.z?b.z-a.z:a.id-b.id}function m(a,b,c,d,e){var f;c.transparent?(d=S,f=++Y):(d=C,f=++Z);f=d[f];void 0!==f?(f.id=a.id,f.object=a,f.geometry=b,f.material=c,f.z=W.z,f.group=e):(f={id:a.id,object:a,geometry:b,material:c,z:W.z,group:e},d.push(f))}function q(a,b){if(!1!==a.visible){if(a.layers.test(b.layers))if(a instanceof THREE.Light)J.push(a);else if(a instanceof THREE.Sprite)!1!==a.frustumCulled&&!0!==za.intersectsObject(a)||ja.push(a);else if(a instanceof +THREE.LensFlare)ea.push(a);else if(a instanceof THREE.ImmediateRenderObject)!0===X.sortObjects&&(W.setFromMatrixPosition(a.matrixWorld),W.applyProjection(sa)),m(a,null,a.material,W.z,null);else if(a instanceof THREE.Mesh||a instanceof THREE.Line||a instanceof THREE.Points)if(a instanceof THREE.SkinnedMesh&&a.skeleton.update(),!1===a.frustumCulled||!0===za.intersectsObject(a)){var c=a.material;if(!0===c.visible){!0===X.sortObjects&&(W.setFromMatrixPosition(a.matrixWorld),W.applyProjection(sa));var d= +pa.update(a);if(c instanceof THREE.MultiMaterial)for(var e=d.groups,f=c.materials,c=0,g=e.length;c=da.maxTextures&&console.warn("WebGLRenderer: trying to use "+a+" texture units while this GPU supports only "+da.maxTextures);ta+=1;return a}function w(a,b,c,d){var e;if("1i"===b)r.uniform1i(c,d);else if("1f"===b)r.uniform1f(c,d);else if("2f"===b)r.uniform2f(c,d[0],d[1]);else if("3f"=== +b)r.uniform3f(c,d[0],d[1],d[2]);else if("4f"===b)r.uniform4f(c,d[0],d[1],d[2],d[3]);else if("1iv"===b)r.uniform1iv(c,d);else if("3iv"===b)r.uniform3iv(c,d);else if("1fv"===b)r.uniform1fv(c,d);else if("2fv"===b)r.uniform2fv(c,d);else if("3fv"===b)r.uniform3fv(c,d);else if("4fv"===b)r.uniform4fv(c,d);else if("Matrix2fv"===b)r.uniformMatrix2fv(c,!1,d);else if("Matrix3fv"===b)r.uniformMatrix3fv(c,!1,d);else if("Matrix4fv"===b)r.uniformMatrix4fv(c,!1,d);else if("i"===b)r.uniform1i(c,d);else if("f"===b)r.uniform1f(c, +d);else if("v2"===b)r.uniform2f(c,d.x,d.y);else if("v3"===b)r.uniform3f(c,d.x,d.y,d.z);else if("v4"===b)r.uniform4f(c,d.x,d.y,d.z,d.w);else if("c"===b)r.uniform3f(c,d.r,d.g,d.b);else if("s"===b){a=a.properties;for(var g in a){e=a[g];var f=c[g],h=d[g];w(e,e.type,f,h)}}else if("sa"===b){a=a.properties;b=0;for(var k=d.length;bb||a.height>b){var c=b/Math.max(a.width,a.height),d=document.createElement("canvas");d.width=Math.floor(a.width*c);d.height=Math.floor(a.height*c);d.getContext("2d").drawImage(a,0,0,a.width,a.height,0,0,d.width,d.height);console.warn("THREE.WebGLRenderer: image is too big ("+a.width+"x"+a.height+ +"). Resized to "+d.width+"x"+d.height,a);return d}return a}function z(a){return THREE.Math.isPowerOfTwo(a.width)&&THREE.Math.isPowerOfTwo(a.height)}function y(a,b){var c=U.get(a);if(6===a.image.length)if(0h;h++)g[h]=!X.autoScaleCubemaps||d||e?e?a.image[h].image:a.image[h]:D(a.image[h],da.maxCubemapSize);var k=z(g[0]),l=L(a.format),m=L(a.type);x(r.TEXTURE_CUBE_MAP,a,k);for(h=0;6>h;h++)if(d)for(var n,p=g[h].mipmaps,q=0,s=p.length;qf;f++)b.__webglFramebuffer[f]=r.createFramebuffer()}else b.__webglFramebuffer=r.createFramebuffer();if(d){K.bindTexture(r.TEXTURE_CUBE_MAP,c.__webglTexture);x(r.TEXTURE_CUBE_MAP,a.texture,e);for(f= +0;6>f;f++)G(b.__webglFramebuffer[f],a,r.COLOR_ATTACHMENT0,r.TEXTURE_CUBE_MAP_POSITIVE_X+f);a.texture.generateMipmaps&&e&&r.generateMipmap(r.TEXTURE_CUBE_MAP);K.bindTexture(r.TEXTURE_CUBE_MAP,null)}else K.bindTexture(r.TEXTURE_2D,c.__webglTexture),x(r.TEXTURE_2D,a.texture,e),G(b.__webglFramebuffer,a,r.COLOR_ATTACHMENT0,r.TEXTURE_2D),a.texture.generateMipmaps&&e&&r.generateMipmap(r.TEXTURE_2D),K.bindTexture(r.TEXTURE_2D,null);if(a.depthBuffer){b=U.get(a);if(a instanceof THREE.WebGLRenderTargetCube)for(b.__webglDepthbuffer= +[],c=0;6>c;c++)r.bindFramebuffer(r.FRAMEBUFFER,b.__webglFramebuffer[c]),b.__webglDepthbuffer[c]=r.createRenderbuffer(),F(b.__webglDepthbuffer[c],a);else r.bindFramebuffer(r.FRAMEBUFFER,b.__webglFramebuffer),b.__webglDepthbuffer=r.createRenderbuffer(),F(b.__webglDepthbuffer,a);r.bindFramebuffer(r.FRAMEBUFFER,null)}}b=a instanceof THREE.WebGLRenderTargetCube;a?(c=U.get(a),c=b?c.__webglFramebuffer[a.activeCubeFace]:c.__webglFramebuffer,qa.copy(a.scissor),Aa=a.scissorTest,ka.copy(a.viewport)):(c=null, +qa.copy(ya).multiplyScalar(aa),Aa=Ba,ka.copy(la).multiplyScalar(aa));ua!==c&&(r.bindFramebuffer(r.FRAMEBUFFER,c),ua=c);K.scissor(qa);K.setScissorTest(Aa);K.viewport(ka);b&&(b=U.get(a.texture),r.framebufferTexture2D(r.FRAMEBUFFER,r.COLOR_ATTACHMENT0,r.TEXTURE_CUBE_MAP_POSITIVE_X+a.activeCubeFace,b.__webglTexture,a.activeMipMapLevel))};this.readRenderTargetPixels=function(a,b,c,d,e,g){if(!1===a instanceof THREE.WebGLRenderTarget)console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget."); +else{var f=U.get(a).__webglFramebuffer;if(f){var h=!1;f!==ua&&(r.bindFramebuffer(r.FRAMEBUFFER,f),h=!0);try{var k=a.texture;k.format!==THREE.RGBAFormat&&L(k.format)!==r.getParameter(r.IMPLEMENTATION_COLOR_READ_FORMAT)?console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format."):k.type===THREE.UnsignedByteType||L(k.type)===r.getParameter(r.IMPLEMENTATION_COLOR_READ_TYPE)||k.type===THREE.FloatType&&V.get("WEBGL_color_buffer_float")||k.type=== +THREE.HalfFloatType&&V.get("EXT_color_buffer_half_float")?r.checkFramebufferStatus(r.FRAMEBUFFER)===r.FRAMEBUFFER_COMPLETE?r.readPixels(b,c,d,e,L(k.format),L(k.type),g):console.error("THREE.WebGLRenderer.readRenderTargetPixels: readPixels from renderTarget failed. Framebuffer not complete."):console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.")}finally{h&&r.bindFramebuffer(r.FRAMEBUFFER,ua)}}}}}; +THREE.WebGLRenderTarget=function(a,b,c){this.uuid=THREE.Math.generateUUID();this.width=a;this.height=b;this.scissor=new THREE.Vector4(0,0,a,b);this.scissorTest=!1;this.viewport=new THREE.Vector4(0,0,a,b);c=c||{};void 0===c.minFilter&&(c.minFilter=THREE.LinearFilter);this.texture=new THREE.Texture(void 0,void 0,c.wrapS,c.wrapT,c.magFilter,c.minFilter,c.format,c.type,c.anisotropy);this.depthBuffer=void 0!==c.depthBuffer?c.depthBuffer:!0;this.stencilBuffer=void 0!==c.stencilBuffer?c.stencilBuffer:!0}; +THREE.WebGLRenderTarget.prototype={constructor:THREE.WebGLRenderTarget,setSize:function(a,b){if(this.width!==a||this.height!==b)this.width=a,this.height=b,this.dispose();this.viewport.set(0,0,a,b);this.scissor.set(0,0,a,b)},clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.width=a.width;this.height=a.height;this.viewport.copy(a.viewport);this.texture=a.texture.clone();this.depthBuffer=a.depthBuffer;this.stencilBuffer=a.stencilBuffer;return this},dispose:function(){this.dispatchEvent({type:"dispose"})}}; +THREE.EventDispatcher.prototype.apply(THREE.WebGLRenderTarget.prototype);THREE.WebGLRenderTargetCube=function(a,b,c){THREE.WebGLRenderTarget.call(this,a,b,c);this.activeMipMapLevel=this.activeCubeFace=0};THREE.WebGLRenderTargetCube.prototype=Object.create(THREE.WebGLRenderTarget.prototype);THREE.WebGLRenderTargetCube.prototype.constructor=THREE.WebGLRenderTargetCube; +THREE.WebGLBufferRenderer=function(a,b,c){var d;this.setMode=function(a){d=a};this.render=function(b,f){a.drawArrays(d,b,f);c.calls++;c.vertices+=f;d===a.TRIANGLES&&(c.faces+=f/3)};this.renderInstances=function(e){var f=b.get("ANGLE_instanced_arrays");if(null===f)console.error("THREE.WebGLBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.");else{var g=e.attributes.position,h=0,h=g instanceof THREE.InterleavedBufferAttribute?g.data.count: +g.count;f.drawArraysInstancedANGLE(d,0,h,e.maxInstancedCount);c.calls++;c.vertices+=h*e.maxInstancedCount;d===a.TRIANGLES&&(c.faces+=e.maxInstancedCount*h/3)}}}; +THREE.WebGLIndexedBufferRenderer=function(a,b,c){var d,e,f;this.setMode=function(a){d=a};this.setIndex=function(c){c.array instanceof Uint32Array&&b.get("OES_element_index_uint")?(e=a.UNSIGNED_INT,f=4):(e=a.UNSIGNED_SHORT,f=2)};this.render=function(b,h){a.drawElements(d,h,e,b*f);c.calls++;c.vertices+=h;d===a.TRIANGLES&&(c.faces+=h/3)};this.renderInstances=function(g,h,k){var l=b.get("ANGLE_instanced_arrays");null===l?console.error("THREE.WebGLBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays."): +(l.drawElementsInstancedANGLE(d,k,e,h*f,g.maxInstancedCount),c.calls++,c.vertices+=k*g.maxInstancedCount,d===a.TRIANGLES&&(c.faces+=g.maxInstancedCount*k/3))}}; +THREE.WebGLExtensions=function(a){var b={};this.get=function(c){if(void 0!==b[c])return b[c];var d;switch(c){case "EXT_texture_filter_anisotropic":d=a.getExtension("EXT_texture_filter_anisotropic")||a.getExtension("MOZ_EXT_texture_filter_anisotropic")||a.getExtension("WEBKIT_EXT_texture_filter_anisotropic");break;case "WEBGL_compressed_texture_s3tc":d=a.getExtension("WEBGL_compressed_texture_s3tc")||a.getExtension("MOZ_WEBGL_compressed_texture_s3tc")||a.getExtension("WEBKIT_WEBGL_compressed_texture_s3tc"); +break;case "WEBGL_compressed_texture_pvrtc":d=a.getExtension("WEBGL_compressed_texture_pvrtc")||a.getExtension("WEBKIT_WEBGL_compressed_texture_pvrtc");break;case "WEBGL_compressed_texture_etc1":d=a.getExtension("WEBGL_compressed_texture_etc1");break;default:d=a.getExtension(c)}null===d&&console.warn("THREE.WebGLRenderer: "+c+" extension not supported.");return b[c]=d}}; +THREE.WebGLCapabilities=function(a,b,c){function d(b){if("highp"===b){if(0c){var d=b;b=c;c=d}d=a[b];return void 0===d?(a[b]=[c],!0):-1===d.indexOf(c)?(d.push(c),!0):!1}var f=new THREE.WebGLGeometries(a,b,c);this.getAttributeBuffer=function(a){return a instanceof THREE.InterleavedBufferAttribute?b.get(a.data).__webglBuffer:b.get(a).__webglBuffer};this.getWireframeAttribute= +function(c){var f=b.get(c);if(void 0!==f.wireframe)return f.wireframe;var k=[],l=c.index,p=c.attributes;c=p.position;if(null!==l)for(var p={},l=l.array,n=0,m=l.length;n/g,function(a,b){var c=THREE.ShaderChunk[b];if(void 0===c)throw Error("Can not resolve #include <"+ +b+">");return k(c)})}function l(a){return a.replace(/for \( int i \= (\d+)\; i < (\d+)\; i \+\+ \) \{([\s\S]+?)(?=\})\}/g,function(a,b,c,d){a="";for(b=parseInt(b);b 0 ) {\nfloat depth = gl_FragCoord.z / gl_FragCoord.w;\nfloat fogFactor = 0.0;\nif ( fogType == 1 ) {\nfogFactor = smoothstep( fogNear, fogFar, depth );\n} else {\nconst float LOG2 = 1.442695;\nfogFactor = exp2( - fogDensity * fogDensity * depth * depth * LOG2 );\nfogFactor = 1.0 - clamp( fogFactor, 0.0, 1.0 );\n}\ngl_FragColor = mix( gl_FragColor, vec4( fogColor, gl_FragColor.w ), fogFactor );\n}\n}"].join("\n")); +x.compileShader(I);x.compileShader(O);x.attachShader(M,I);x.attachShader(M,O);x.linkProgram(M);B=M;s=x.getAttribLocation(B,"position");w=x.getAttribLocation(B,"uv");c=x.getUniformLocation(B,"uvOffset");d=x.getUniformLocation(B,"uvScale");e=x.getUniformLocation(B,"rotation");f=x.getUniformLocation(B,"scale");g=x.getUniformLocation(B,"color");h=x.getUniformLocation(B,"map");k=x.getUniformLocation(B,"opacity");l=x.getUniformLocation(B,"modelViewMatrix");p=x.getUniformLocation(B,"projectionMatrix");n= +x.getUniformLocation(B,"fogType");m=x.getUniformLocation(B,"fogDensity");q=x.getUniformLocation(B,"fogNear");u=x.getUniformLocation(B,"fogFar");v=x.getUniformLocation(B,"fogColor");t=x.getUniformLocation(B,"alphaTest");M=document.createElement("canvas");M.width=8;M.height=8;I=M.getContext("2d");I.fillStyle="white";I.fillRect(0,0,8,8);G=new THREE.Texture(M);G.needsUpdate=!0}x.useProgram(B);D.initAttributes();D.enableAttribute(s);D.enableAttribute(w);D.disableUnusedAttributes();D.disable(x.CULL_FACE); +D.enable(x.BLEND);x.bindBuffer(x.ARRAY_BUFFER,z);x.vertexAttribPointer(s,2,x.FLOAT,!1,16,0);x.vertexAttribPointer(w,2,x.FLOAT,!1,16,8);x.bindBuffer(x.ELEMENT_ARRAY_BUFFER,y);x.uniformMatrix4fv(p,!1,N.projectionMatrix.elements);D.activeTexture(x.TEXTURE0);x.uniform1i(h,0);I=M=0;(O=A.fog)?(x.uniform3f(v,O.color.r,O.color.g,O.color.b),O instanceof THREE.Fog?(x.uniform1f(q,O.near),x.uniform1f(u,O.far),x.uniform1i(n,1),I=M=1):O instanceof THREE.FogExp2&&(x.uniform1f(m,O.density),x.uniform1i(n,2),I=M=2)): +(x.uniform1i(n,0),I=M=0);for(var O=0,Q=b.length;Oc)return null;var d=[],e=[],f=[],g,h,k;if(0=l--){console.warn("THREE.ShapeUtils: Unable to triangulate polygon! in triangulate()");break}g=h;c<=g&&(g=0);h=g+1;c<=h&&(h=0);k=h+1;c<=k&&(k=0);var p;a:{var n= +p=void 0,m=void 0,q=void 0,u=void 0,v=void 0,t=void 0,s=void 0,w=void 0,n=a[e[g]].x,m=a[e[g]].y,q=a[e[h]].x,u=a[e[h]].y,v=a[e[k]].x,t=a[e[k]].y;if(Number.EPSILON>(q-n)*(t-m)-(u-m)*(v-n))p=!1;else{var E=void 0,x=void 0,D=void 0,z=void 0,y=void 0,B=void 0,G=void 0,F=void 0,H=void 0,L=void 0,H=F=G=w=s=void 0,E=v-q,x=t-u,D=n-v,z=m-t,y=q-n,B=u-m;for(p=0;p=-Number.EPSILON&& +F>=-Number.EPSILON&&G>=-Number.EPSILON)){p=!1;break a}p=!0}}if(p){d.push([a[e[g]],a[e[h]],a[e[k]]]);f.push([e[g],e[h],e[k]]);g=h;for(k=h+1;kNumber.EPSILON){if(0B||B> +y)return[];k=l*n-k*p;if(0>k||k>y)return[]}else{if(0d?[]:k===d?f?[]:[g]:a<=d?[g,h]:[g,l]}function e(a,b,c,d){var e=b.x-a.x,f=b.y-a.y;b=c.x-a.x;c=c.y-a.y;var g=d.x-a.x;d=d.y-a.y;a=e*c-f*b;e=e*d-f*g;return Math.abs(a)>Number.EPSILON?(b=g*c-d*b,0f&&(f=d);var g=a+1;g>d&&(g=0);d=e(h[a],h[f],h[g],k[b]);if(!d)return!1;d=k.length-1;f=b-1;0>f&&(f=d);g=b+1;g>d&&(g=0);return(d=e(k[b],k[f],k[g],h[a]))?!0:!1}function f(a,b){var c,e;for(c=0;cN){console.log("Infinite Loop! Holes left:"+l.length+", Probably Hole outside Shape!");break}for(p=F;ph;h++)l=k[h].x+":"+k[h].y,l=p[l],void 0!==l&&(k[h]=l);return n.concat()},isClockWise:function(a){return 0>THREE.ShapeUtils.area(a)},b2:function(){return function(a,b,c,d){var e=1-a;return e*e*b+2*(1-a)*a*c+a*a*d}}(),b3:function(){return function(a,b,c,d,e){var f= +1-a,g=1-a;return f*f*f*b+3*g*g*a*c+3*(1-a)*a*a*d+a*a*a*e}}()};THREE.Curve=function(){}; +THREE.Curve.prototype={constructor:THREE.Curve,getPoint:function(a){console.warn("THREE.Curve: Warning, getPoint() not implemented!");return null},getPointAt:function(a){a=this.getUtoTmapping(a);return this.getPoint(a)},getPoints:function(a){a||(a=5);var b,c=[];for(b=0;b<=a;b++)c.push(this.getPoint(b/a));return c},getSpacedPoints:function(a){a||(a=5);var b,c=[];for(b=0;b<=a;b++)c.push(this.getPointAt(b/a));return c},getLength:function(){var a=this.getLengths();return a[a.length-1]},getLengths:function(a){a|| +(a=this.__arcLengthDivisions?this.__arcLengthDivisions:200);if(this.cacheArcLengths&&this.cacheArcLengths.length===a+1&&!this.needsUpdate)return this.cacheArcLengths;this.needsUpdate=!1;var b=[],c,d=this.getPoint(0),e,f=0;b.push(0);for(e=1;e<=a;e++)c=this.getPoint(e/a),f+=c.distanceTo(d),b.push(f),d=c;return this.cacheArcLengths=b},updateArcLengths:function(){this.needsUpdate=!0;this.getLengths()},getUtoTmapping:function(a,b){var c=this.getLengths(),d=0,e=c.length,f;f=b?b:a*c[e-1];for(var g=0,h=e- +1,k;g<=h;)if(d=Math.floor(g+(h-g)/2),k=c[d]-f,0>k)g=d+1;else if(0b&&(b=0);1=b)return a=this.curves[d],b=1-(c[d]-b)/a.getLength(),a.getPointAt(b);d++}return null};THREE.CurvePath.prototype.getLength=function(){var a=this.getCurveLengths();return a[a.length-1]}; +THREE.CurvePath.prototype.getCurveLengths=function(){if(this.cacheLengths&&this.cacheLengths.length===this.curves.length)return this.cacheLengths;for(var a=[],b=0,c=0,d=this.curves.length;cNumber.EPSILON){if(0>l&&(g=b[f],k=-k,h=b[e],l=-l),!(a.yh.y))if(a.y===g.y){if(a.x===g.x)return!0}else{e=l*(a.x-g.x)-k*(a.y-g.y);if(0===e)return!0;0>e||(d=!d)}}else if(a.y===g.y&&(h.x<=a.x&&a.x<=g.x|| +g.x<=a.x&&a.x<=h.x))return!0}return d}var e=THREE.ShapeUtils.isClockWise,f=function(a){for(var b=[],c=new THREE.Path,d=0,e=a.length;db.length-2?b.length-1:c+1],b=b[c>b.length-3?b.length-1:c+2],c=THREE.CurveUtils.interpolate;return new THREE.Vector2(c(d.x,e.x,f.x,b.x,a),c(d.y,e.y,f.y,b.y,a))};THREE.EllipseCurve=function(a,b,c,d,e,f,g,h){this.aX=a;this.aY=b;this.xRadius=c;this.yRadius=d;this.aStartAngle=e;this.aEndAngle=f;this.aClockwise=g;this.aRotation=h||0};THREE.EllipseCurve.prototype=Object.create(THREE.Curve.prototype); +THREE.EllipseCurve.prototype.constructor=THREE.EllipseCurve; +THREE.EllipseCurve.prototype.getPoint=function(a){var b=this.aEndAngle-this.aStartAngle;0>b&&(b+=2*Math.PI);b>2*Math.PI&&(b-=2*Math.PI);b=!0===this.aClockwise?this.aEndAngle+(1-a)*(2*Math.PI-b):this.aStartAngle+a*b;a=this.aX+this.xRadius*Math.cos(b);var c=this.aY+this.yRadius*Math.sin(b);if(0!==this.aRotation){var b=Math.cos(this.aRotation),d=Math.sin(this.aRotation),e=a;a=(e-this.aX)*b-(c-this.aY)*d+this.aX;c=(e-this.aX)*d+(c-this.aY)*b+this.aY}return new THREE.Vector2(a,c)}; +THREE.ArcCurve=function(a,b,c,d,e,f){THREE.EllipseCurve.call(this,a,b,c,c,d,e,f)};THREE.ArcCurve.prototype=Object.create(THREE.EllipseCurve.prototype);THREE.ArcCurve.prototype.constructor=THREE.ArcCurve;THREE.LineCurve3=THREE.Curve.create(function(a,b){this.v1=a;this.v2=b},function(a){var b=new THREE.Vector3;b.subVectors(this.v2,this.v1);b.multiplyScalar(a);b.add(this.v1);return b}); +THREE.QuadraticBezierCurve3=THREE.Curve.create(function(a,b,c){this.v0=a;this.v1=b;this.v2=c},function(a){var b=THREE.ShapeUtils.b2;return new THREE.Vector3(b(a,this.v0.x,this.v1.x,this.v2.x),b(a,this.v0.y,this.v1.y,this.v2.y),b(a,this.v0.z,this.v1.z,this.v2.z))}); +THREE.CubicBezierCurve3=THREE.Curve.create(function(a,b,c,d){this.v0=a;this.v1=b;this.v2=c;this.v3=d},function(a){var b=THREE.ShapeUtils.b3;return new THREE.Vector3(b(a,this.v0.x,this.v1.x,this.v2.x,this.v3.x),b(a,this.v0.y,this.v1.y,this.v2.y,this.v3.y),b(a,this.v0.z,this.v1.z,this.v2.z,this.v3.z))}); +THREE.SplineCurve3=THREE.Curve.create(function(a){console.warn("THREE.SplineCurve3 will be deprecated. Please use THREE.CatmullRomCurve3");this.points=void 0==a?[]:a},function(a){var b=this.points;a*=b.length-1;var c=Math.floor(a);a-=c;var d=b[0==c?c:c-1],e=b[c],f=b[c>b.length-2?b.length-1:c+1],b=b[c>b.length-3?b.length-1:c+2],c=THREE.CurveUtils.interpolate;return new THREE.Vector3(c(d.x,e.x,f.x,b.x,a),c(d.y,e.y,f.y,b.y,a),c(d.z,e.z,f.z,b.z,a))}); +THREE.CatmullRomCurve3=function(){function a(){}var b=new THREE.Vector3,c=new a,d=new a,e=new a;a.prototype.init=function(a,b,c,d){this.c0=a;this.c1=c;this.c2=-3*a+3*b-2*c-d;this.c3=2*a-2*b+c+d};a.prototype.initNonuniformCatmullRom=function(a,b,c,d,e,p,n){a=((b-a)/e-(c-a)/(e+p)+(c-b)/p)*p;d=((c-b)/p-(d-b)/(p+n)+(d-c)/n)*p;this.init(b,c,a,d)};a.prototype.initCatmullRom=function(a,b,c,d,e){this.init(b,c,e*(c-a),e*(d-b))};a.prototype.calc=function(a){var b=a*a;return this.c0+this.c1*a+this.c2*b+this.c3* +b*a};return THREE.Curve.create(function(a){this.points=a||[];this.closed=!1},function(a){var g=this.points,h,k;k=g.length;2>k&&console.log("duh, you need at least 2 points");a*=k-(this.closed?0:1);h=Math.floor(a);a-=h;this.closed?h+=0h&&(h=1);1E-4>k&&(k=h);1E-4>m&&(m=h);c.initNonuniformCatmullRom(l.x,p.x,n.x,g.x,k,h,m);d.initNonuniformCatmullRom(l.y,p.y,n.y,g.y,k,h,m);e.initNonuniformCatmullRom(l.z,p.z,n.z,g.z,k,h,m)}else"catmullrom"===this.type&&(k=void 0!==this.tension?this.tension:.5,c.initCatmullRom(l.x,p.x,n.x,g.x, +k),d.initCatmullRom(l.y,p.y,n.y,g.y,k),e.initCatmullRom(l.z,p.z,n.z,g.z,k));return new THREE.Vector3(c.calc(a),d.calc(a),e.calc(a))})}();THREE.ClosedSplineCurve3=function(a){console.warn("THREE.ClosedSplineCurve3 has been deprecated. Please use THREE.CatmullRomCurve3.");THREE.CatmullRomCurve3.call(this,a);this.type="catmullrom";this.closed=!0};THREE.ClosedSplineCurve3.prototype=Object.create(THREE.CatmullRomCurve3.prototype); +THREE.BoxGeometry=function(a,b,c,d,e,f){THREE.Geometry.call(this);this.type="BoxGeometry";this.parameters={width:a,height:b,depth:c,widthSegments:d,heightSegments:e,depthSegments:f};this.fromBufferGeometry(new THREE.BoxBufferGeometry(a,b,c,d,e,f));this.mergeVertices()};THREE.BoxGeometry.prototype=Object.create(THREE.Geometry.prototype);THREE.BoxGeometry.prototype.constructor=THREE.BoxGeometry;THREE.CubeGeometry=THREE.BoxGeometry; +THREE.BoxBufferGeometry=function(a,b,c,d,e,f){function g(a,b,c,d,e,f,g,k,l,L,A){var N=f/l,M=g/L,I=f/2,O=g/2,Q=k/2;g=l+1;for(var P=L+1,T=f=0,J=new THREE.Vector3,C=0;Cm;m++){e[0]=n[g[m]];e[1]=n[g[(m+1)%3]];e.sort(c);var q=e.toString();void 0===f[q]?f[q]={vert1:e[0],vert2:e[1],face1:l, +face2:void 0}:f[q].face2=l}e=[];for(q in f)if(g=f[q],void 0===g.face2||h[g.face1].normal.dot(h[g.face2].normal)<=d)l=k[g.vert1],e.push(l.x),e.push(l.y),e.push(l.z),l=k[g.vert2],e.push(l.x),e.push(l.y),e.push(l.z);this.addAttribute("position",new THREE.BufferAttribute(new Float32Array(e),3))};THREE.EdgesGeometry.prototype=Object.create(THREE.BufferGeometry.prototype);THREE.EdgesGeometry.prototype.constructor=THREE.EdgesGeometry; +THREE.ExtrudeGeometry=function(a,b){"undefined"!==typeof a&&(THREE.Geometry.call(this),this.type="ExtrudeGeometry",a=Array.isArray(a)?a:[a],this.addShapeList(a,b),this.computeFaceNormals())};THREE.ExtrudeGeometry.prototype=Object.create(THREE.Geometry.prototype);THREE.ExtrudeGeometry.prototype.constructor=THREE.ExtrudeGeometry;THREE.ExtrudeGeometry.prototype.addShapeList=function(a,b){for(var c=a.length,d=0;dNumber.EPSILON){var k=Math.sqrt(h),l=Math.sqrt(f*f+g*g),h=b.x-e/k;b=b.y+d/k;f=((c.x-g/l-h)*g-(c.y+f/l-b)*f)/(d*g-e*f);c=h+d*f-a.x;a=b+e*f-a.y;d=c*c+a*a;if(2>=d)return new THREE.Vector2(c,a);d=Math.sqrt(d/2)}else a=!1,d>Number.EPSILON? +f>Number.EPSILON&&(a=!0):d<-Number.EPSILON?f<-Number.EPSILON&&(a=!0):Math.sign(e)===Math.sign(g)&&(a=!0),a?(c=-e,a=d,d=Math.sqrt(h)):(c=d,a=e,d=Math.sqrt(h/2));return new THREE.Vector2(c/d,a/d)}function e(a,b){var c,d;for(C=a.length;0<=--C;){c=C;d=C-1;0>d&&(d=a.length-1);for(var e=0,f=q+2*p,e=0;eMath.abs(b.y-c.y)?[new THREE.Vector2(b.x,1-b.z),new THREE.Vector2(c.x,1-c.z),new THREE.Vector2(d.x,1-d.z),new THREE.Vector2(e.x,1-e.z)]:[new THREE.Vector2(b.y,1-b.z),new THREE.Vector2(c.y,1-c.z),new THREE.Vector2(d.y, +1-d.z),new THREE.Vector2(e.y,1-e.z)]}};THREE.ShapeGeometry=function(a,b){THREE.Geometry.call(this);this.type="ShapeGeometry";!1===Array.isArray(a)&&(a=[a]);this.addShapeList(a,b);this.computeFaceNormals()};THREE.ShapeGeometry.prototype=Object.create(THREE.Geometry.prototype);THREE.ShapeGeometry.prototype.constructor=THREE.ShapeGeometry;THREE.ShapeGeometry.prototype.addShapeList=function(a,b){for(var c=0,d=a.length;cNumber.EPSILON&&(h.normalize(),d=Math.acos(THREE.Math.clamp(e[l-1].dot(e[l]),-1,1)),f[l].applyMatrix4(k.makeRotationAxis(h,d))),g[l].crossVectors(e[l],f[l]);if(c)for(d=Math.acos(THREE.Math.clamp(f[0].dot(f[b-1]),-1,1)),d/=b-1,0c&&1===a.x&&(a=new THREE.Vector2(a.x-1,a.y));0===b.x&&0===b.z&&(a=new THREE.Vector2(c/ +2/Math.PI+.5,a.y));return a.clone()}THREE.Geometry.call(this);this.type="PolyhedronGeometry";this.parameters={vertices:a,indices:b,radius:c,detail:d};c=c||1;d=d||0;for(var k=this,l=0,p=a.length;lq&&(.2>d&&(b[0].x+=1),.2>a&&(b[1].x+=1),.2>n&&(b[2].x+=1));l=0;for(p=this.vertices.length;ln;n++){c[0]=p[e[n]];c[1]=p[e[(n+1)%3]];c.sort(b);var m=c.toString();void 0===d[m]&&(k[2*h]=c[0],k[2*h+1]=c[1],d[m]=!0,h++)}c=new Float32Array(6*h);a=0;for(l=h;an;n++)d=f[k[2*a+n]],h=6*a+3*n,c[h+0]=d.x,c[h+1]=d.y, +c[h+2]=d.z;this.addAttribute("position",new THREE.BufferAttribute(c,3))}else if(a instanceof THREE.BufferGeometry){if(null!==a.index){l=a.index.array;f=a.attributes.position;e=a.groups;h=0;0===e.length&&a.addGroup(0,l.length);k=new Uint32Array(2*l.length);g=0;for(p=e.length;gn;n++)c[0]=l[a+n],c[1]=l[a+(n+1)%3],c.sort(b),m=c.toString(),void 0===d[m]&&(k[2*h]=c[0],k[2*h+1]=c[1],d[m]=!0,h++)}c=new Float32Array(6*h);a=0;for(l=h;a< +l;a++)for(n=0;2>n;n++)h=6*a+3*n,d=k[2*a+n],c[h+0]=f.getX(d),c[h+1]=f.getY(d),c[h+2]=f.getZ(d)}else for(f=a.attributes.position.array,h=f.length/3,k=h/3,c=new Float32Array(6*h),a=0,l=k;an;n++)h=18*a+6*n,k=9*a+3*n,c[h+0]=f[k],c[h+1]=f[k+1],c[h+2]=f[k+2],d=9*a+(n+1)%3*3,c[h+3]=f[d],c[h+4]=f[d+1],c[h+5]=f[d+2];this.addAttribute("position",new THREE.BufferAttribute(c,3))}};THREE.WireframeGeometry.prototype=Object.create(THREE.BufferGeometry.prototype); +THREE.WireframeGeometry.prototype.constructor=THREE.WireframeGeometry;THREE.AxisHelper=function(a){a=a||1;var b=new Float32Array([0,0,0,a,0,0,0,0,0,0,a,0,0,0,0,0,0,a]),c=new Float32Array([1,0,0,1,.6,0,0,1,0,.6,1,0,0,0,1,0,.6,1]);a=new THREE.BufferGeometry;a.addAttribute("position",new THREE.BufferAttribute(b,3));a.addAttribute("color",new THREE.BufferAttribute(c,3));b=new THREE.LineBasicMaterial({vertexColors:THREE.VertexColors});THREE.LineSegments.call(this,a,b)};THREE.AxisHelper.prototype=Object.create(THREE.LineSegments.prototype); +THREE.AxisHelper.prototype.constructor=THREE.AxisHelper; +THREE.ArrowHelper=function(){var a=new THREE.Geometry;a.vertices.push(new THREE.Vector3(0,0,0),new THREE.Vector3(0,1,0));var b=new THREE.CylinderGeometry(0,.5,1,5,1);b.translate(0,-.5,0);return function(c,d,e,f,g,h){THREE.Object3D.call(this);void 0===f&&(f=16776960);void 0===e&&(e=1);void 0===g&&(g=.2*e);void 0===h&&(h=.2*g);this.position.copy(d);this.line=new THREE.Line(a,new THREE.LineBasicMaterial({color:f}));this.line.matrixAutoUpdate=!1;this.add(this.line);this.cone=new THREE.Mesh(b,new THREE.MeshBasicMaterial({color:f})); +this.cone.matrixAutoUpdate=!1;this.add(this.cone);this.setDirection(c);this.setLength(e,g,h)}}();THREE.ArrowHelper.prototype=Object.create(THREE.Object3D.prototype);THREE.ArrowHelper.prototype.constructor=THREE.ArrowHelper;THREE.ArrowHelper.prototype.setDirection=function(){var a=new THREE.Vector3,b;return function(c){.99999c.y?this.quaternion.set(1,0,0,0):(a.set(c.z,0,-c.x).normalize(),b=Math.acos(c.y),this.quaternion.setFromAxisAngle(a,b))}}(); +THREE.ArrowHelper.prototype.setLength=function(a,b,c){void 0===b&&(b=.2*a);void 0===c&&(c=.2*b);this.line.scale.set(1,Math.max(0,a-b),1);this.line.updateMatrix();this.cone.scale.set(c,b,c);this.cone.position.y=a;this.cone.updateMatrix()};THREE.ArrowHelper.prototype.setColor=function(a){this.line.material.color.set(a);this.cone.material.color.set(a)}; +THREE.BoxHelper=function(a){var b=new Uint16Array([0,1,1,2,2,3,3,0,4,5,5,6,6,7,7,4,0,4,1,5,2,6,3,7]),c=new Float32Array(24),d=new THREE.BufferGeometry;d.setIndex(new THREE.BufferAttribute(b,1));d.addAttribute("position",new THREE.BufferAttribute(c,3));THREE.LineSegments.call(this,d,new THREE.LineBasicMaterial({color:16776960}));void 0!==a&&this.update(a)};THREE.BoxHelper.prototype=Object.create(THREE.LineSegments.prototype);THREE.BoxHelper.prototype.constructor=THREE.BoxHelper; +THREE.BoxHelper.prototype.update=function(){var a=new THREE.Box3;return function(b){a.setFromObject(b);if(!a.isEmpty()){b=a.min;var c=a.max,d=this.geometry.attributes.position,e=d.array;e[0]=c.x;e[1]=c.y;e[2]=c.z;e[3]=b.x;e[4]=c.y;e[5]=c.z;e[6]=b.x;e[7]=b.y;e[8]=c.z;e[9]=c.x;e[10]=b.y;e[11]=c.z;e[12]=c.x;e[13]=c.y;e[14]=b.z;e[15]=b.x;e[16]=c.y;e[17]=b.z;e[18]=b.x;e[19]=b.y;e[20]=b.z;e[21]=c.x;e[22]=b.y;e[23]=b.z;d.needsUpdate=!0;this.geometry.computeBoundingSphere()}}}(); +THREE.BoundingBoxHelper=function(a,b){var c=void 0!==b?b:8947848;this.object=a;this.box=new THREE.Box3;THREE.Mesh.call(this,new THREE.BoxGeometry(1,1,1),new THREE.MeshBasicMaterial({color:c,wireframe:!0}))};THREE.BoundingBoxHelper.prototype=Object.create(THREE.Mesh.prototype);THREE.BoundingBoxHelper.prototype.constructor=THREE.BoundingBoxHelper;THREE.BoundingBoxHelper.prototype.update=function(){this.box.setFromObject(this.object);this.box.size(this.scale);this.box.center(this.position)}; +THREE.CameraHelper=function(a){function b(a,b,d){c(a,d);c(b,d)}function c(a,b){d.vertices.push(new THREE.Vector3);d.colors.push(new THREE.Color(b));void 0===f[a]&&(f[a]=[]);f[a].push(d.vertices.length-1)}var d=new THREE.Geometry,e=new THREE.LineBasicMaterial({color:16777215,vertexColors:THREE.FaceColors}),f={};b("n1","n2",16755200);b("n2","n4",16755200);b("n4","n3",16755200);b("n3","n1",16755200);b("f1","f2",16755200);b("f2","f4",16755200);b("f4","f3",16755200);b("f3","f1",16755200);b("n1","f1",16755200); +b("n2","f2",16755200);b("n3","f3",16755200);b("n4","f4",16755200);b("p","n1",16711680);b("p","n2",16711680);b("p","n3",16711680);b("p","n4",16711680);b("u1","u2",43775);b("u2","u3",43775);b("u3","u1",43775);b("c","t",16777215);b("p","c",3355443);b("cn1","cn2",3355443);b("cn3","cn4",3355443);b("cf1","cf2",3355443);b("cf3","cf4",3355443);THREE.LineSegments.call(this,d,e);this.camera=a;this.camera.updateProjectionMatrix();this.matrix=a.matrixWorld;this.matrixAutoUpdate=!1;this.pointMap=f;this.update()}; +THREE.CameraHelper.prototype=Object.create(THREE.LineSegments.prototype);THREE.CameraHelper.prototype.constructor=THREE.CameraHelper; +THREE.CameraHelper.prototype.update=function(){function a(a,g,h,k){d.set(g,h,k).unproject(e);a=c[a];if(void 0!==a)for(g=0,h=a.length;gd;d++)c.faces[d].color=this.colors[4>d?0:1];d=new THREE.MeshBasicMaterial({vertexColors:THREE.FaceColors,wireframe:!0});this.lightSphere=new THREE.Mesh(c,d);this.add(this.lightSphere);this.update()}; +THREE.HemisphereLightHelper.prototype=Object.create(THREE.Object3D.prototype);THREE.HemisphereLightHelper.prototype.constructor=THREE.HemisphereLightHelper;THREE.HemisphereLightHelper.prototype.dispose=function(){this.lightSphere.geometry.dispose();this.lightSphere.material.dispose()}; +THREE.HemisphereLightHelper.prototype.update=function(){var a=new THREE.Vector3;return function(){this.colors[0].copy(this.light.color).multiplyScalar(this.light.intensity);this.colors[1].copy(this.light.groundColor).multiplyScalar(this.light.intensity);this.lightSphere.lookAt(a.setFromMatrixPosition(this.light.matrixWorld).negate());this.lightSphere.geometry.colorsNeedUpdate=!0}}(); +THREE.PointLightHelper=function(a,b){this.light=a;this.light.updateMatrixWorld();var c=new THREE.SphereGeometry(b,4,2),d=new THREE.MeshBasicMaterial({wireframe:!0,fog:!1});d.color.copy(this.light.color).multiplyScalar(this.light.intensity);THREE.Mesh.call(this,c,d);this.matrix=this.light.matrixWorld;this.matrixAutoUpdate=!1};THREE.PointLightHelper.prototype=Object.create(THREE.Mesh.prototype);THREE.PointLightHelper.prototype.constructor=THREE.PointLightHelper; +THREE.PointLightHelper.prototype.dispose=function(){this.geometry.dispose();this.material.dispose()};THREE.PointLightHelper.prototype.update=function(){this.material.color.copy(this.light.color).multiplyScalar(this.light.intensity)}; +THREE.SkeletonHelper=function(a){this.bones=this.getBoneList(a);for(var b=new THREE.Geometry,c=0;ch.end&&(h.end=f);c||(c=k)}}for(k in d)h=d[k],this.createAnimation(k,h.start,h.end,a);this.firstAnimation=c}; +THREE.MorphBlendMesh.prototype.setAnimationDirectionForward=function(a){if(a=this.animationsMap[a])a.direction=1,a.directionBackwards=!1};THREE.MorphBlendMesh.prototype.setAnimationDirectionBackward=function(a){if(a=this.animationsMap[a])a.direction=-1,a.directionBackwards=!0};THREE.MorphBlendMesh.prototype.setAnimationFPS=function(a,b){var c=this.animationsMap[a];c&&(c.fps=b,c.duration=(c.end-c.start)/c.fps)}; +THREE.MorphBlendMesh.prototype.setAnimationDuration=function(a,b){var c=this.animationsMap[a];c&&(c.duration=b,c.fps=(c.end-c.start)/c.duration)};THREE.MorphBlendMesh.prototype.setAnimationWeight=function(a,b){var c=this.animationsMap[a];c&&(c.weight=b)};THREE.MorphBlendMesh.prototype.setAnimationTime=function(a,b){var c=this.animationsMap[a];c&&(c.time=b)};THREE.MorphBlendMesh.prototype.getAnimationTime=function(a){var b=0;if(a=this.animationsMap[a])b=a.time;return b}; +THREE.MorphBlendMesh.prototype.getAnimationDuration=function(a){var b=-1;if(a=this.animationsMap[a])b=a.duration;return b};THREE.MorphBlendMesh.prototype.playAnimation=function(a){var b=this.animationsMap[a];b?(b.time=0,b.active=!0):console.warn("THREE.MorphBlendMesh: animation["+a+"] undefined in .playAnimation()")};THREE.MorphBlendMesh.prototype.stopAnimation=function(a){if(a=this.animationsMap[a])a.active=!1}; +THREE.MorphBlendMesh.prototype.update=function(a){for(var b=0,c=this.animationsList.length;bd.duration||0>d.time)d.direction*=-1,d.time>d.duration&&(d.time=d.duration,d.directionBackwards=!0),0>d.time&&(d.time=0,d.directionBackwards=!1)}else d.time%=d.duration,0>d.time&&(d.time+=d.duration);var f=d.start+THREE.Math.clamp(Math.floor(d.time/e),0,d.length-1),g=d.weight;f!==d.currentFrame&& +(this.morphTargetInfluences[d.lastFrame]=0,this.morphTargetInfluences[d.currentFrame]=1*g,this.morphTargetInfluences[f]=0,d.lastFrame=d.currentFrame,d.currentFrame=f);e=d.time%e/e;d.directionBackwards&&(e=1-e);d.currentFrame!==d.lastFrame?(this.morphTargetInfluences[d.currentFrame]=e*g,this.morphTargetInfluences[d.lastFrame]=(1-e)*g):this.morphTargetInfluences[d.currentFrame]=g}}}; +// tween.js - http://github.com/sole/tween.js - Licensed under the MIT License +'use strict';void 0===Date.now&&(Date.now=function(){return(new Date).valueOf()}); +var TWEEN=TWEEN||function(){var a=[];return{REVISION:"14",getAll:function(){return a},removeAll:function(){a=[]},add:function(c){a.push(c)},remove:function(c){c=a.indexOf(c);-1!==c&&a.splice(c,1)},update:function(c){if(0===a.length)return!1;for(var b=0,c=void 0!==c?c:"undefined"!==typeof window&&void 0!==window.performance&&void 0!==window.performance.now?window.performance.now():Date.now();b(a*=2)?0.5*a*a:-0.5*(--a*(a-2)-1)}},Cubic:{In:function(a){return a*a*a},Out:function(a){return--a*a*a+1},InOut:function(a){return 1>(a*=2)?0.5*a*a*a:0.5*((a-=2)*a*a+2)}},Quartic:{In:function(a){return a*a*a*a},Out:function(a){return 1- --a*a*a*a},InOut:function(a){return 1>(a*=2)?0.5*a*a*a*a:-0.5*((a-=2)*a*a*a-2)}},Quintic:{In:function(a){return a*a*a* +a*a},Out:function(a){return--a*a*a*a*a+1},InOut:function(a){return 1>(a*=2)?0.5*a*a*a*a*a:0.5*((a-=2)*a*a*a*a+2)}},Sinusoidal:{In:function(a){return 1-Math.cos(a*Math.PI/2)},Out:function(a){return Math.sin(a*Math.PI/2)},InOut:function(a){return 0.5*(1-Math.cos(Math.PI*a))}},Exponential:{In:function(a){return 0===a?0:Math.pow(1024,a-1)},Out:function(a){return 1===a?1:1-Math.pow(2,-10*a)},InOut:function(a){return 0===a?0:1===a?1:1>(a*=2)?0.5*Math.pow(1024,a-1):0.5*(-Math.pow(2,-10*(a-1))+2)}},Circular:{In:function(a){return 1- +Math.sqrt(1-a*a)},Out:function(a){return Math.sqrt(1- --a*a)},InOut:function(a){return 1>(a*=2)?-0.5*(Math.sqrt(1-a*a)-1):0.5*(Math.sqrt(1-(a-=2)*a)+1)}},Elastic:{In:function(a){var c,b=0.1;if(0===a)return 0;if(1===a)return 1;!b||1>b?(b=1,c=0.1):c=0.4*Math.asin(1/b)/(2*Math.PI);return-(b*Math.pow(2,10*(a-=1))*Math.sin((a-c)*2*Math.PI/0.4))},Out:function(a){var c,b=0.1;if(0===a)return 0;if(1===a)return 1;!b||1>b?(b=1,c=0.1):c=0.4*Math.asin(1/b)/(2*Math.PI);return b*Math.pow(2,-10*a)*Math.sin((a-c)* +2*Math.PI/0.4)+1},InOut:function(a){var c,b=0.1;if(0===a)return 0;if(1===a)return 1;!b||1>b?(b=1,c=0.1):c=0.4*Math.asin(1/b)/(2*Math.PI);return 1>(a*=2)?-0.5*b*Math.pow(2,10*(a-=1))*Math.sin((a-c)*2*Math.PI/0.4):0.5*b*Math.pow(2,-10*(a-=1))*Math.sin((a-c)*2*Math.PI/0.4)+1}},Back:{In:function(a){return a*a*(2.70158*a-1.70158)},Out:function(a){return--a*a*(2.70158*a+1.70158)+1},InOut:function(a){return 1>(a*=2)?0.5*a*a*(3.5949095*a-2.5949095):0.5*((a-=2)*a*(3.5949095*a+2.5949095)+2)}},Bounce:{In:function(a){return 1- +TWEEN.Easing.Bounce.Out(1-a)},Out:function(a){return a<1/2.75?7.5625*a*a:a<2/2.75?7.5625*(a-=1.5/2.75)*a+0.75:a<2.5/2.75?7.5625*(a-=2.25/2.75)*a+0.9375:7.5625*(a-=2.625/2.75)*a+0.984375},InOut:function(a){return 0.5>a?0.5*TWEEN.Easing.Bounce.In(2*a):0.5*TWEEN.Easing.Bounce.Out(2*a-1)+0.5}}}; +TWEEN.Interpolation={Linear:function(a,c){var b=a.length-1,d=b*c,e=Math.floor(d),g=TWEEN.Interpolation.Utils.Linear;return 0>c?g(a[0],a[1],d):1b?b:e+1],d-e)},Bezier:function(a,c){var b=0,d=a.length-1,e=Math.pow,g=TWEEN.Interpolation.Utils.Bernstein,h;for(h=0;h<=d;h++)b+=e(1-c,d-h)*e(c,h)*a[h]*g(d,h);return b},CatmullRom:function(a,c){var b=a.length-1,d=b*c,e=Math.floor(d),g=TWEEN.Interpolation.Utils.CatmullRom;return a[0]===a[b]?(0>c&&(e=Math.floor(d=b*(1+c))),g(a[(e- +1+b)%b],a[e],a[(e+1)%b],a[(e+2)%b],d-e)):0>c?a[0]-(g(a[0],a[0],a[1],a[1],-d)-a[0]):10deg it will return a delta of +1 instead of -359) + if (delta > 180) { + delta = delta - 360 + } + else if (delta < -180) { + delta = 360 + delta + } + return delta + }, + + initializeNavBall: function(){ + //initialize the three.js renderer + this.renderer = new THREE.WebGLRenderer({ + alpha: true, + antialias: true + }) + + this.renderer.setSize(1,1) + this.container.update(this.renderer.domElement) + + this.resize() + Event.observe(window, "resize", this.resize.bind(this)) + + //scene, camera, lights! + var scene = new THREE.Scene() + var camera = new THREE.PerspectiveCamera(32, 1, 0.01, 1000) + camera.position.z = 190 + + scene.add(new THREE.AmbientLight(0xaaaaaa)) + + var light1 = new THREE.DirectionalLight(0xffffff, 1) + light1.position.set(1500, 1500, 500) + + var light2 = new THREE.DirectionalLight(0xffffff, 0.5) + light2.position.set(-1500, -1500, 500) + + scene.add(light1) + scene.add(light2) + + //initialize the body geometry and materials + var navballGeometry = new THREE.SphereGeometry(this.displayRadius, 48, 48) + var navballTexture = THREE.ImageUtils.loadTexture('../assets/images/navball.png') + navballTexture.anisotropy = this.renderer.getMaxAnisotropy() + + var navballMaterial = new THREE.MeshPhongMaterial({ + map: navballTexture, + bumpMap: THREE.ImageUtils.loadTexture('../assets/images/navball-normal.png'), + bumpScale: 0.25, + shininess: 80, + }) + + this.navballMesh = new THREE.Mesh(navballGeometry, navballMaterial) + + scene.add(this.navballMesh) + + var animate = function(){ + window.setTimeout(function(){ + requestAnimationFrame(animate) + }, this.datalink.rate/60 ) //60 fps + + TWEEN.update() + + this.renderer.render(scene, camera) + }.bind(this) + + requestAnimationFrame(animate) + }, + + resize: function(){ + var width = this.container.getWidth() + var height = this.container.getHeight() + this.renderer.setSize(width, height) + }, + + initializeDatalink: function(){ + this.datalink.subscribeToData(['n.pitch', 'n.roll', 'n.heading']) + + this.datalink.addReceiverFunction(this.update.bind(this)) + }, +}) +/* Chartist.js 0.9.4 + * Copyright © 2015 Gion Kunz + * Free to use under the WTFPL license. + * http://www.wtfpl.net/ + */ + +!function(a,b){"function"==typeof define&&define.amd?define([],function(){return a.Chartist=b()}):"object"==typeof exports?module.exports=b():a.Chartist=b()}(this,function(){var a={version:"0.9.4"};return function(a,b,c){"use strict";c.noop=function(a){return a},c.alphaNumerate=function(a){return String.fromCharCode(97+a%26)},c.extend=function(a){a=a||{};var b=Array.prototype.slice.call(arguments,1);return b.forEach(function(b){for(var d in b)"object"!=typeof b[d]||null===b[d]||b[d]instanceof Array?a[d]=b[d]:a[d]=c.extend({},a[d],b[d])}),a},c.replaceAll=function(a,b,c){return a.replace(new RegExp(b,"g"),c)},c.stripUnit=function(a){return"string"==typeof a&&(a=a.replace(/[^0-9\+-\.]/g,"")),+a},c.ensureUnit=function(a,b){return"number"==typeof a&&(a+=b),a},c.querySelector=function(a){return a instanceof Node?a:b.querySelector(a)},c.times=function(a){return Array.apply(null,new Array(a))},c.sum=function(a,b){return a+(b?b:0)},c.mapMultiply=function(a){return function(b){return b*a}},c.mapAdd=function(a){return function(b){return b+a}},c.serialMap=function(a,b){var d=[],e=Math.max.apply(null,a.map(function(a){return a.length}));return c.times(e).forEach(function(c,e){var f=a.map(function(a){return a[e]});d[e]=b.apply(null,f)}),d},c.roundWithPrecision=function(a,b){var d=Math.pow(10,b||c.precision);return Math.round(a*d)/d},c.precision=8,c.escapingMap={"&":"&","<":"<",">":">",'"':""","'":"'"},c.serialize=function(a){return null===a||void 0===a?a:("number"==typeof a?a=""+a:"object"==typeof a&&(a=JSON.stringify({data:a})),Object.keys(c.escapingMap).reduce(function(a,b){return c.replaceAll(a,b,c.escapingMap[b])},a))},c.deserialize=function(a){if("string"!=typeof a)return a;a=Object.keys(c.escapingMap).reduce(function(a,b){return c.replaceAll(a,c.escapingMap[b],b)},a);try{a=JSON.parse(a),a=void 0!==a.data?a.data:a}catch(b){}return a},c.createSvg=function(a,b,d,e){var f;return b=b||"100%",d=d||"100%",Array.prototype.slice.call(a.querySelectorAll("svg")).filter(function(a){return a.getAttributeNS("http://www.w3.org/2000/xmlns/",c.xmlNs.prefix)}).forEach(function(b){a.removeChild(b)}),f=new c.Svg("svg").attr({width:b,height:d}).addClass(e).attr({style:"width: "+b+"; height: "+d+";"}),a.appendChild(f._node),f},c.reverseData=function(a){a.labels.reverse(),a.series.reverse();for(var b=0;bf.high&&(f.high=c),h&&ck,m=e?c.rho(j.range):0;if(e&&c.projectLength(a,1,j)>=d)j.step=1;else if(e&&m=d)j.step=m;else for(;;){if(l&&c.projectLength(a,j.step,j)<=d)j.step*=2;else{if(l||!(c.projectLength(a,j.step/2,j)>=d))break;if(j.step/=2,e&&j.step%1!==0){j.step*=2;break}}if(i++>1e3)throw new Error("Exceeded maximum number of iterations while optimizing scale step!")}for(g=j.min,h=j.max;g+j.step<=j.low;)g+=j.step;for(;h-j.step>=j.high;)h-=j.step;for(j.min=g,j.max=h,j.range=j.max-j.min,j.values=[],f=j.min;f<=j.max;f+=j.step)j.values.push(c.roundWithPrecision(f));return j},c.polarToCartesian=function(a,b,c,d){var e=(d-90)*Math.PI/180;return{x:a+c*Math.cos(e),y:b+c*Math.sin(e)}},c.createChartRect=function(a,b,d){var e=!(!b.axisX&&!b.axisY),f=e?b.axisY.offset:0,g=e?b.axisX.offset:0,h=a.width()||c.stripUnit(b.width)||0,i=a.height()||c.stripUnit(b.height)||0,j=c.normalizePadding(b.chartPadding,d);h=Math.max(h,f+j.left+j.right),i=Math.max(i,g+j.top+j.bottom);var k={padding:j,width:function(){return this.x2-this.x1},height:function(){return this.y1-this.y2}};return e?("start"===b.axisX.position?(k.y2=j.top+g,k.y1=Math.max(i-j.bottom,k.y2+1)):(k.y2=j.top,k.y1=Math.max(i-j.bottom-g,k.y2+1)),"start"===b.axisY.position?(k.x1=j.left+f,k.x2=Math.max(h-j.right,k.x1+1)):(k.x1=j.left,k.x2=Math.max(h-j.right-f,k.x1+1))):(k.x1=j.left,k.x2=Math.max(h-j.right,k.x1+1),k.y2=j.top,k.y1=Math.max(i-j.bottom,k.y2+1)),k},c.createGrid=function(a,b,d,e,f,g,h,i){var j={};j[d.units.pos+"1"]=a,j[d.units.pos+"2"]=a,j[d.counterUnits.pos+"1"]=e,j[d.counterUnits.pos+"2"]=e+f;var k=g.elem("line",j,h.join(" "));i.emit("draw",c.extend({type:"grid",axis:d,index:b,group:g,element:k},j))},c.createLabel=function(a,b,d,e,f,g,h,i,j,k,l){var m,n={};if(n[f.units.pos]=a+h[f.units.pos],n[f.counterUnits.pos]=h[f.counterUnits.pos],n[f.units.len]=b,n[f.counterUnits.len]=g-10,k){var o=''+e[d]+"";m=i.foreignObject(o,c.extend({style:"overflow: visible;"},n))}else m=i.elem("text",n,j.join(" ")).text(e[d]);l.emit("draw",c.extend({type:"label",axis:f,index:d,group:i,element:m,text:e[d]},n))},c.getSeriesOption=function(a,b,c){if(a.name&&b.series&&b.series[a.name]){var d=b.series[a.name];return d.hasOwnProperty(c)?d[c]:b[c]}return b[c]},c.optionsProvider=function(b,d,e){function f(b){var f=h;if(h=c.extend({},j),d)for(i=0;i1){var i=[];return h.forEach(function(a){i.push(g(a.pathCoordinates,a.valueData))}),c.Svg.Path.join(i)}if(a=h[0].pathCoordinates,d=h[0].valueData,a.length<=4)return c.Interpolation.none()(a,d);for(var j,k=(new c.Svg.Path).move(a[0],a[1],!1,d[0]),l=0,m=a.length;m-2*!j>l;l+=2){var n=[{x:+a[l-2],y:+a[l-1]},{x:+a[l],y:+a[l+1]},{x:+a[l+2],y:+a[l+3]},{x:+a[l+4],y:+a[l+5]}];j?l?m-4===l?n[3]={x:+a[0],y:+a[1]}:m-2===l&&(n[2]={x:+a[0],y:+a[1]},n[3]={x:+a[2],y:+a[3]}):n[0]={x:+a[m-2],y:+a[m-1]}:m-4===l?n[3]=n[2]:l||(n[0]={x:+a[l],y:+a[l+1]}),k.curve(e*(-n[0].x+6*n[1].x+n[2].x)/6+f*n[2].x,e*(-n[0].y+6*n[1].y+n[2].y)/6+f*n[2].y,e*(n[1].x+6*n[2].x-n[3].x)/6+f*n[2].x,e*(n[1].y+6*n[2].y-n[3].y)/6+f*n[2].y,n[2].x,n[2].y,!1,d[(l+2)/2])}return k}},c.Interpolation.step=function(a){var b={postpone:!0};return a=c.extend({},b,a),function(b,d){for(var e=new c.Svg.Path,f=!0,g=2;g1}).map(function(a){var b=a.pathElements[0],c=a.pathElements[a.pathElements.length-1];return a.clone(!0).position(0).remove(1).move(b.x,r).line(b.x,b.y).position(a.pathElements.length+1).line(c.x,r)}).forEach(function(h){var k=i.elem("path",{d:h.stringify()},a.classNames.area,!0).attr({values:b.normalized[g]},c.xmlNs.uri);this.eventEmitter.emit("draw",{type:"area",values:b.normalized[g],path:h.clone(),series:f,seriesIndex:g,axisX:d,axisY:e,chartRect:j,index:g,group:i,element:k})}.bind(this))}}.bind(this)),this.eventEmitter.emit("created",{bounds:e.bounds,chartRect:j,axisX:d,axisY:e,svg:this.svg,options:a})}function e(a,b,d,e){c.Line["super"].constructor.call(this,a,b,f,c.extend({},f,d),e)}var f={axisX:{offset:30,position:"end",labelOffset:{x:0,y:0},showLabel:!0,showGrid:!0,labelInterpolationFnc:c.noop,type:void 0},axisY:{offset:40,position:"start",labelOffset:{x:0,y:0},showLabel:!0,showGrid:!0,labelInterpolationFnc:c.noop,type:void 0,scaleMinSpace:20,onlyInteger:!1},width:void 0,height:void 0,showLine:!0,showPoint:!0,showArea:!1,areaBase:0,lineSmooth:!0,low:void 0,high:void 0,chartPadding:{top:15,right:15,bottom:5,left:10},fullWidth:!1,reverseData:!1,classNames:{chart:"ct-chart-line",label:"ct-label",labelGroup:"ct-labels",series:"ct-series",line:"ct-line",point:"ct-point",area:"ct-area",grid:"ct-grid",gridGroup:"ct-grids",vertical:"ct-vertical",horizontal:"ct-horizontal",start:"ct-start",end:"ct-end"}};c.Line=c.Base.extend({constructor:e,createChart:d})}(window,document,a),function(a,b,c){"use strict";function d(a){var b,d={raw:this.data,normalized:a.distributeSeries?c.getDataArray(this.data,a.reverseData,a.horizontalBars?"x":"y").map(function(a){return[a]}):c.getDataArray(this.data,a.reverseData,a.horizontalBars?"x":"y")};this.svg=c.createSvg(this.container,a.width,a.height,a.classNames.chart+(a.horizontalBars?" "+a.classNames.horizontalBars:""));var e=this.svg.elem("g").addClass(a.classNames.gridGroup),g=this.svg.elem("g"),h=this.svg.elem("g").addClass(a.classNames.labelGroup);if(a.stackBars){var i=c.serialMap(d.normalized,function(){return Array.prototype.slice.call(arguments).map(function(a){return a}).reduce(function(a,b){return{x:a.x+b.x||0,y:a.y+b.y||0}},{x:0,y:0})});b=c.getHighLow([i],c.extend({},a,{referenceValue:0}),a.horizontalBars?"x":"y")}else b=c.getHighLow(d.normalized,c.extend({},a,{referenceValue:0}),a.horizontalBars?"x":"y");b.high=+a.high||(0===a.high?0:b.high),b.low=+a.low||(0===a.low?0:b.low);var j,k,l,m,n,o=c.createChartRect(this.svg,a,f.padding);k=a.distributeSeries&&a.stackBars?d.raw.labels.slice(0,1):d.raw.labels,a.horizontalBars?(j=m=void 0===a.axisX.type?new c.AutoScaleAxis(c.Axis.units.x,d,o,c.extend({},a.axisX,{highLow:b,referenceValue:0})):a.axisX.type.call(c,c.Axis.units.x,d,o,c.extend({},a.axisX,{highLow:b,referenceValue:0})),l=n=void 0===a.axisY.type?new c.StepAxis(c.Axis.units.y,d,o,{ticks:k}):a.axisY.type.call(c,c.Axis.units.y,d,o,a.axisY)):(l=m=void 0===a.axisX.type?new c.StepAxis(c.Axis.units.x,d,o,{ticks:k}):a.axisX.type.call(c,c.Axis.units.x,d,o,a.axisX),j=n=void 0===a.axisY.type?new c.AutoScaleAxis(c.Axis.units.y,d,o,c.extend({},a.axisY,{highLow:b,referenceValue:0})):a.axisY.type.call(c,c.Axis.units.y,d,o,c.extend({},a.axisY,{highLow:b,referenceValue:0})));var p=a.horizontalBars?o.x1+j.projectValue(0):o.y1-j.projectValue(0),q=[];l.createGridAndLabels(e,h,this.supportsForeignObject,a,this.eventEmitter),j.createGridAndLabels(e,h,this.supportsForeignObject,a,this.eventEmitter),d.raw.series.forEach(function(b,e){var f,h,i=e-(d.raw.series.length-1)/2;f=a.distributeSeries&&!a.stackBars?l.axisLength/d.normalized.length/2:a.distributeSeries&&a.stackBars?l.axisLength/2:l.axisLength/d.normalized[e].length/2,h=g.elem("g"),h.attr({"series-name":b.name,meta:c.serialize(b.meta)},c.xmlNs.uri),h.addClass([a.classNames.series,b.className||a.classNames.series+"-"+c.alphaNumerate(e)].join(" ")),d.normalized[e].forEach(function(g,k){var r,s,t,u;if(u=a.distributeSeries&&!a.stackBars?e:a.distributeSeries&&a.stackBars?0:k,r=a.horizontalBars?{x:o.x1+j.projectValue(g&&g.x?g.x:0,k,d.normalized[e]),y:o.y1-l.projectValue(g&&g.y?g.y:0,u,d.normalized[e])}:{x:o.x1+l.projectValue(g&&g.x?g.x:0,u,d.normalized[e]),y:o.y1-j.projectValue(g&&g.y?g.y:0,k,d.normalized[e])},l instanceof c.StepAxis&&(l.options.stretch||(r[l.units.pos]+=f*(a.horizontalBars?-1:1)),r[l.units.pos]+=a.stackBars||a.distributeSeries?0:i*a.seriesBarDistance*(a.horizontalBars?-1:1)),t=q[k]||p,q[k]=t-(p-r[l.counterUnits.pos]),void 0!==g){var v={};v[l.units.pos+"1"]=r[l.units.pos],v[l.units.pos+"2"]=r[l.units.pos],v[l.counterUnits.pos+"1"]=a.stackBars?t:p,v[l.counterUnits.pos+"2"]=a.stackBars?q[k]:r[l.counterUnits.pos],v.x1=Math.min(Math.max(v.x1,o.x1),o.x2),v.x2=Math.min(Math.max(v.x2,o.x1),o.x2),v.y1=Math.min(Math.max(v.y1,o.y2),o.y1),v.y2=Math.min(Math.max(v.y2,o.y2),o.y1),s=h.elem("line",v,a.classNames.bar).attr({value:[g.x,g.y].filter(function(a){return a}).join(","),meta:c.getMetaData(b,k)},c.xmlNs.uri), +this.eventEmitter.emit("draw",c.extend({type:"bar",value:g,index:k,meta:c.getMetaData(b,k),series:b,seriesIndex:e,axisX:m,axisY:n,chartRect:o,group:h,element:s},v))}}.bind(this))}.bind(this)),this.eventEmitter.emit("created",{bounds:j.bounds,chartRect:o,axisX:m,axisY:n,svg:this.svg,options:a})}function e(a,b,d,e){c.Bar["super"].constructor.call(this,a,b,f,c.extend({},f,d),e)}var f={axisX:{offset:30,position:"end",labelOffset:{x:0,y:0},showLabel:!0,showGrid:!0,labelInterpolationFnc:c.noop,scaleMinSpace:30,onlyInteger:!1},axisY:{offset:40,position:"start",labelOffset:{x:0,y:0},showLabel:!0,showGrid:!0,labelInterpolationFnc:c.noop,scaleMinSpace:20,onlyInteger:!1},width:void 0,height:void 0,high:void 0,low:void 0,onlyInteger:!1,chartPadding:{top:15,right:15,bottom:5,left:10},seriesBarDistance:15,stackBars:!1,horizontalBars:!1,distributeSeries:!1,reverseData:!1,classNames:{chart:"ct-chart-bar",horizontalBars:"ct-horizontal-bars",label:"ct-label",labelGroup:"ct-labels",series:"ct-series",bar:"ct-bar",grid:"ct-grid",gridGroup:"ct-grids",vertical:"ct-vertical",horizontal:"ct-horizontal",start:"ct-start",end:"ct-end"}};c.Bar=c.Base.extend({constructor:e,createChart:d})}(window,document,a),function(a,b,c){"use strict";function d(a,b,c){var d=b.x>a.x;return d&&"explode"===c||!d&&"implode"===c?"start":d&&"implode"===c||!d&&"explode"===c?"end":"middle"}function e(a){var b,e,f,h,i,j=[],k=a.startAngle,l=c.getDataArray(this.data,a.reverseData);this.svg=c.createSvg(this.container,a.width,a.height,a.donut?a.classNames.chartDonut:a.classNames.chartPie),e=c.createChartRect(this.svg,a,g.padding),f=Math.min(e.width()/2,e.height()/2),i=a.total||l.reduce(function(a,b){return a+b},0),f-=a.donut?a.donutWidth/2:0,h="outside"===a.labelPosition||a.donut?f:"center"===a.labelPosition?0:f/2,h+=a.labelOffset;var m={x:e.x1+e.width()/2,y:e.y2+e.height()/2},n=1===this.data.series.filter(function(a){return a.hasOwnProperty("value")?0!==a.value:0!==a}).length;a.showLabel&&(b=this.svg.elem("g",null,null,!0));for(var o=0;o180,0,r.x,r.y);a.donut||t.line(m.x,m.y);var u=j[o].elem("path",{d:t.stringify()},a.donut?a.classNames.sliceDonut:a.classNames.slicePie);if(u.attr({value:l[o],meta:c.serialize(p.meta)},c.xmlNs.uri),a.donut&&u.attr({style:"stroke-width: "+ +a.donutWidth+"px"}),this.eventEmitter.emit("draw",{type:"slice",value:l[o],totalDataSum:i,index:o,meta:p.meta,series:p,group:j[o],element:u,path:t.clone(),center:m,radius:f,startAngle:k,endAngle:q}),a.showLabel){var v=c.polarToCartesian(m.x,m.y,h,k+(q-k)/2),w=a.labelInterpolationFnc(this.data.labels?this.data.labels[o]:l[o],o);if(w||0===w){var x=b.elem("text",{dx:v.x,dy:v.y,"text-anchor":d(m,v,a.labelDirection)},a.classNames.label).text(""+w);this.eventEmitter.emit("draw",{type:"label",index:o,group:b,element:x,text:""+w,x:v.x,y:v.y})}}k=q}this.eventEmitter.emit("created",{chartRect:e,svg:this.svg,options:a})}function f(a,b,d,e){c.Pie["super"].constructor.call(this,a,b,g,c.extend({},g,d),e)}var g={width:void 0,height:void 0,chartPadding:5,classNames:{chartPie:"ct-chart-pie",chartDonut:"ct-chart-donut",series:"ct-series",slicePie:"ct-slice-pie",sliceDonut:"ct-slice-donut",label:"ct-label"},startAngle:0,total:void 0,donut:!1,donutWidth:60,showLabel:!0,labelOffset:0,labelPosition:"inside",labelInterpolationFnc:c.noop,labelDirection:"neutral",reverseData:!1};c.Pie=c.Base.extend({constructor:f,createChart:e,determineAnchorPosition:d})}(window,document,a),a}); +var AltitudeTracker = Class.create({ + initialize: function(datalink, altitudeTrackerId, options){ + this.datalink = datalink + this.altitudeTrackerId = altitudeTrackerId + this.altitudeTracker = $(this.altitudeTrackerId) + this.options = Object.extend({ + maxDataPoints: 10 + }, options) + + this.altitudeData = [] + this.heightFromTerrainData = [] + + this.initializeDatalink() + }, + + update: function(data){ + this.altitudeData.push(data['v.altitude']) + if(data['v.terrainHeight'] > -1 && (data['v.heightFromTerrain'] > -1)){ + this.heightFromTerrainData.push(data['v.terrainHeight']) + } else{ + this.heightFromTerrainData.push(0) + } + + if(this.altitudeData.length >= this.options.maxDataPoints){ + this.altitudeData.shift() + } + + if(this.heightFromTerrainData.length >= this.options.maxDataPoints){ + this.heightFromTerrainData.shift() + } + + if(!this.altitudeTrackerChart){ + this.initializeChart() + } + + window.requestAnimationFrame(function(){ + this.altitudeTrackerChart.update(this.generateData()) + }.bind(this)) + }, + + initializeDatalink: function(){ + this.datalink.subscribeToData(['v.altitude', 'v.terrainHeight', 'v.heightFromTerrain']) + + this.datalink.addReceiverFunction(this.update.bind(this)) + }, + + generateData: function(){ + var labelSize = Math.max(this.altitudeData.length, this.heightFromTerrainData.length) + var labels = [] + for(var i = 0; i < labelSize-1; i++){ + labels[i] = 1 + } + + return { + labels: labels, + series: [{ + name: 'altitude', + data: this.altitudeData + }, + { + name: 'terrain', + data: this.heightFromTerrainData + }] + } + }, + + generateOptions: function(){ + return { + series: { + 'terrain' : { + showPoint: false, + showArea: true + }, + 'altitude': { + showPoint: false + } + }, + axisY: { + offset: 80, + position: 'end', + low: 0, + labelInterpolationFnc: function(value) { + return numeral(value).format('0.00a') + "m" + } + }, + axisX: { + showLabel: false + } + } + }, + + initializeChart: function(){ + var data = { + // A labels array that can contain any sort of values + labels: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri'], + // Our series array that contains series objects or in this case series data arrays + series: [ + [5, 2, 4, 2, 0] + ] + }; + + // Create a new line chart object where as first parameter we pass in a selector + // that is resolving to our chart container element. The Second parameter + // is the actual data object. + this.altitudeTrackerChart = new Chartist.Line("#" + this.altitudeTrackerId, + this.generateData(), this.generateOptions() + ) + } +}) +var CameraFeed = Class.create({ + initialize: function(datalink, options){ + this.datalink = datalink + + this.options = options || {} + this.cameraData = [] + this.selectedCameraURL = "" + this.selectedCameraName = "" + this.initializeDatalink() + this.initializeObservers() + this.initializeImageRefresh() + }, + + initializeDatalink: function(){ + setInterval(function(){ + this.datalink.getCameraList(this.updateCameraList.bind(this)) + }.bind(this), 1000); + }, + + initializeImageRefresh: function(){ + setInterval(function(){ + if(!this.hasSelectedCamera()){ return } + this.options.cameraImage.src = this.options.cameraImage.getAttribute('data-base-url') + "?" + Math.floor((Math.random() * 100) + 1) + }.bind(this), 1000); + }, + + initializeObservers: function(){ + this.options.cameraList.observe('click', function(event){ + var clickedButton = event.findElement('button'); + if (clickedButton) { + this.selectCameraAndHideList( + clickedButton.getAttribute("data-image-name"), + clickedButton.getAttribute("data-image-url") + ) + } + }.bind(this)) + + this.options.showCameraList.observe('click', this.toggleCameraList.bind(this)) + }, + + hasSelectedCamera: function(){ + return this.selectedCameraURL != "" + }, + + setSelectedCamera: function(name, image_url){ + this.selectedCameraName = name + this.selectedCameraURL = image_url + this.options.cameraName.update(this.selectedCameraName) + this.options.cameraImage.setAttribute('src', this.selectedCameraURL) + this.options.cameraImage.setAttribute('data-base-url',this.selectedCameraURL) + }, + + selectCameraAndHideList: function(name, image_url){ + this.setSelectedCamera(name, image_url) + this.hideCameraList() + }, + + hideCameraList: function(){ + this.options.cameraListContainer.addClassName('hidden') + }, + + showCameraList: function(){ + this.options.cameraListContainer.removeClassName('hidden') + }, + + toggleCameraList: function(){ + this.options.cameraListContainer.toggleClassName('hidden') + }, + + updateCameraList: function(data){ + // console.log(data) + var sortedData = data.sort(function(a,b){ + //the flight camera should always be on top + if(a.name == "TelemachusFlightCamera"){ + return -1 + } + + //otherwise, compare normally + return a.name.localeCompare(b.name); + }); + + //clear existing child nodes in camera list + while (this.options.cameraList.hasChildNodes()){ + this.options.cameraList.removeChild(this.options.cameraList.lastChild); + } + + for (var i = 0; i < sortedData.length; i++) { + var cameraObject = sortedData[i] + + if(!this.hasSelectedCamera()){ + this.setSelectedCamera(cameraObject.name, cameraObject.url) + } + + var docFragment = document.createDocumentFragment() + var li = document.createElement('li') + var selectCamera = document.createElement("button") + selectCamera.setAttribute('data-image-name', cameraObject.name) + selectCamera.setAttribute('data-image-url', cameraObject.url) + if(this.selectedCameraURL == cameraObject.url){ + selectCamera.addClassName("selected") + } + selectCamera.update(cameraObject.name) + + li.appendChild(selectCamera) + docFragment.appendChild(li) + this.options.cameraList.appendChild(docFragment) + } + + this.cameraData = sortedData + } +}) \ No newline at end of file diff --git a/public/assets/boost.js b/public/assets/boost.js index 395d565..7b89fa6 100644 --- a/public/assets/boost.js +++ b/public/assets/boost.js @@ -1,44 +1,10033 @@ -Math.toDegrees=function(angleInRadians){return angleInRadians*(180/Math.PI)};Math.toRadians=function(angleInDegrees){return angleInDegrees*(Math.PI/180)};Math.crossProduct=function(x,y){[x[1]*y[2]-x[2]*y[1],x[2]*y[0]-x[0]*y[2],x[0]*y[1]-x[1]*y[0]]};Math.sign=Math.sign||function(x){x=+x;if(x===0||isNaN(x)){return x}return x>0?1:-1};Math.cosh=Math.cosh||function(x){return(Math.exp(x)+Math.exp(-x))/2};Math.sinh=Math.sinh||function(x){return(Math.exp(x)-Math.exp(-x))/2};Math.matrixAdd=Math.matrixAdd||function(){var arrays=arguments,results=[],count=arrays[0].length,L=arrays.length,sum,next=0,i;while(next-1?e(a,b,c):b.indexOf("%")>-1?f(a,b,c):b.indexOf(":")>-1?g(a,b):i(a._value,b,c)}function d(a,b){var c,d,e,f,g,i=b,j=["KB","MB","GB","TB","PB","EB","ZB","YB"],k=!1;if(b.indexOf(":")>-1)a._value=h(b);else if(b===q)a._value=0;else{for("."!==o[p].delimiters.decimal&&(b=b.replace(/\./g,"").replace(o[p].delimiters.decimal,".")),c=new RegExp("[^a-zA-Z]"+o[p].abbreviations.thousand+"(?:\\)|(\\"+o[p].currency.symbol+")?(?:\\))?)?$"),d=new RegExp("[^a-zA-Z]"+o[p].abbreviations.million+"(?:\\)|(\\"+o[p].currency.symbol+")?(?:\\))?)?$"),e=new RegExp("[^a-zA-Z]"+o[p].abbreviations.billion+"(?:\\)|(\\"+o[p].currency.symbol+")?(?:\\))?)?$"),f=new RegExp("[^a-zA-Z]"+o[p].abbreviations.trillion+"(?:\\)|(\\"+o[p].currency.symbol+")?(?:\\))?)?$"),g=0;g<=j.length&&!(k=b.indexOf(j[g])>-1?Math.pow(1024,g+1):!1);g++);a._value=(k?k:1)*(i.match(c)?Math.pow(10,3):1)*(i.match(d)?Math.pow(10,6):1)*(i.match(e)?Math.pow(10,9):1)*(i.match(f)?Math.pow(10,12):1)*(b.indexOf("%")>-1?.01:1)*((b.split("-").length+Math.min(b.split("(").length-1,b.split(")").length-1))%2?1:-1)*Number(b.replace(/[^0-9\.]+/g,"")),a._value=k?Math.ceil(a._value):a._value}return a._value}function e(a,b,c){var d,e,f=b.indexOf("$"),g=b.indexOf("("),h=b.indexOf("-"),j="";return b.indexOf(" $")>-1?(j=" ",b=b.replace(" $","")):b.indexOf("$ ")>-1?(j=" ",b=b.replace("$ ","")):b=b.replace("$",""),e=i(a._value,b,c),1>=f?e.indexOf("(")>-1||e.indexOf("-")>-1?(e=e.split(""),d=1,(g>f||h>f)&&(d=0),e.splice(d,0,o[p].currency.symbol+j),e=e.join("")):e=o[p].currency.symbol+j+e:e.indexOf(")")>-1?(e=e.split(""),e.splice(-1,0,j+o[p].currency.symbol),e=e.join("")):e=e+j+o[p].currency.symbol,e}function f(a,b,c){var d,e="",f=100*a._value;return b.indexOf(" %")>-1?(e=" ",b=b.replace(" %","")):b=b.replace("%",""),d=i(f,b,c),d.indexOf(")")>-1?(d=d.split(""),d.splice(-1,0,e+"%"),d=d.join("")):d=d+e+"%",d}function g(a){var b=Math.floor(a._value/60/60),c=Math.floor((a._value-60*b*60)/60),d=Math.round(a._value-60*b*60-60*c);return b+":"+(10>c?"0"+c:c)+":"+(10>d?"0"+d:d)}function h(a){var b=a.split(":"),c=0;return 3===b.length?(c+=60*Number(b[0])*60,c+=60*Number(b[1]),c+=Number(b[2])):2===b.length&&(c+=60*Number(b[0]),c+=Number(b[1])),Number(c)}function i(a,c,d){var e,f,g,h,i,j,k=!1,l=!1,m=!1,n="",r=!1,s=!1,t=!1,u=!1,v=!1,w="",x="",y=Math.abs(a),z=["B","KB","MB","GB","TB","PB","EB","ZB","YB"],A="",B=!1;if(0===a&&null!==q)return q;if(c.indexOf("(")>-1?(k=!0,c=c.slice(1,-1)):c.indexOf("+")>-1&&(l=!0,c=c.replace(/\+/g,"")),c.indexOf("a")>-1&&(r=c.indexOf("aK")>=0,s=c.indexOf("aM")>=0,t=c.indexOf("aB")>=0,u=c.indexOf("aT")>=0,v=r||s||t||u,c.indexOf(" a")>-1?(n=" ",c=c.replace(" a","")):c=c.replace("a",""),y>=Math.pow(10,12)&&!v||u?(n+=o[p].abbreviations.trillion,a/=Math.pow(10,12)):y=Math.pow(10,9)&&!v||t?(n+=o[p].abbreviations.billion,a/=Math.pow(10,9)):y=Math.pow(10,6)&&!v||s?(n+=o[p].abbreviations.million,a/=Math.pow(10,6)):(y=Math.pow(10,3)&&!v||r)&&(n+=o[p].abbreviations.thousand,a/=Math.pow(10,3))),c.indexOf("b")>-1)for(c.indexOf(" b")>-1?(w=" ",c=c.replace(" b","")):c=c.replace("b",""),g=0;g<=z.length;g++)if(e=Math.pow(1024,g),f=Math.pow(1024,g+1),a>=e&&f>a){w+=z[g],e>0&&(a/=e);break}return c.indexOf("o")>-1&&(c.indexOf(" o")>-1?(x=" ",c=c.replace(" o","")):c=c.replace("o",""),x+=o[p].ordinal(a)),c.indexOf("[.]")>-1&&(m=!0,c=c.replace("[.]",".")),h=a.toString().split(".")[0],i=c.split(".")[1],j=c.indexOf(","),i?(i.indexOf("[")>-1?(i=i.replace("]",""),i=i.split("["),A=b(a,i[0].length+i[1].length,d,i[1].length)):A=b(a,i.length,d),h=A.split(".")[0],A=A.split(".")[1].length?o[p].delimiters.decimal+A.split(".")[1]:"",m&&0===Number(A.slice(1))&&(A="")):h=b(a,null,d),h.indexOf("-")>-1&&(h=h.slice(1),B=!0),j>-1&&(h=h.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g,"$1"+o[p].delimiters.thousands)),0===c.indexOf(".")&&(h=""),(k&&B?"(":"")+(!k&&B?"-":"")+(!B&&l?"+":"")+h+A+(x?x:"")+(n?n:"")+(w?w:"")+(k&&B?")":"")}function j(a,b){o[a]=b}function k(a){var b=a.toString().split(".");return b.length<2?1:Math.pow(10,b[1].length)}function l(){var a=Array.prototype.slice.call(arguments);return a.reduce(function(a,b){var c=k(a),d=k(b);return c>d?c:d},-1/0)}var m,n="1.5.3",o={},p="en",q=null,r="0,0",s="undefined"!=typeof module&&module.exports;m=function(b){return m.isNumeral(b)?b=b.value():0===b||"undefined"==typeof b?b=0:Number(b)||(b=m.fn.unformat(b)),new a(Number(b))},m.version=n,m.isNumeral=function(b){return b instanceof a},m.language=function(a,b){if(!a)return p;if(a&&!b){if(!o[a])throw new Error("Unknown language : "+a);p=a}return(b||!o[a])&&j(a,b),m},m.languageData=function(a){if(!a)return o[p];if(!o[a])throw new Error("Unknown language : "+a);return o[a]},m.language("en",{delimiters:{thousands:",",decimal:"."},abbreviations:{thousand:"k",million:"m",billion:"b",trillion:"t"},ordinal:function(a){var b=a%10;return 1===~~(a%100/10)?"th":1===b?"st":2===b?"nd":3===b?"rd":"th"},currency:{symbol:"$"}}),m.zeroFormat=function(a){q="string"==typeof a?a:null},m.defaultFormat=function(a){r="string"==typeof a?a:"0.0"},"function"!=typeof Array.prototype.reduce&&(Array.prototype.reduce=function(a,b){"use strict";if(null===this||"undefined"==typeof this)throw new TypeError("Array.prototype.reduce called on null or undefined");if("function"!=typeof a)throw new TypeError(a+" is not a function");var c,d,e=this.length>>>0,f=!1;for(1c;++c)this.hasOwnProperty(c)&&(f?d=a(d,this[c],c,this):(d=this[c],f=!0));if(!f)throw new TypeError("Reduce of empty array with no initial value");return d}),m.fn=a.prototype={clone:function(){return m(this)},format:function(a,b){return c(this,a?a:r,void 0!==b?b:Math.round)},unformat:function(a){return"[object Number]"===Object.prototype.toString.call(a)?a:d(this,a?a:r)},value:function(){return this._value},valueOf:function(){return this._value},set:function(a){return this._value=Number(a),this},add:function(a){function b(a,b){return a+c*b}var c=l.call(null,this._value,a);return this._value=[this._value,a].reduce(b,0)/c,this},subtract:function(a){function b(a,b){return a-c*b}var c=l.call(null,this._value,a);return this._value=[a].reduce(b,this._value*c)/c,this},multiply:function(a){function b(a,b){var c=l(a,b);return a*c*b*c/(c*c)}return this._value=[this._value,a].reduce(b,1),this},divide:function(a){function b(a,b){var c=l(a,b);return a*c/(b*c)}return this._value=[this._value,a].reduce(b),this},difference:function(a){return Math.abs(m(this._value).subtract(a).value())}},s&&(module.exports=m),"undefined"==typeof ender&&(this.numeral=m),"function"==typeof define&&define.amd&&define([],function(){return m})}).call(this);var TimeFormatters={formatUT:function(t){var day,year;if(t==null){t=0}year=(t/(365*24*3600)|0)+1;t%=365*24*3600;day=(t/(24*3600)|0)+1;t%=24*3600;return"Year "+year+", Day "+day+", "+this.hourMinSec(t)+" UT"},formatMET:function(t){var result;if(t==null){t=0}result="T+";if(t>=365*24*3600){result+=(t/(365*24*3600)|0)+":";t%=365*24*3600;if(t<24*3600){result+="0:"}}if(t>=24*3600){result+=(t/(24*3600)|0)+":"}t%=24*3600;return result+this.hourMinSec(t)+" MET"},hourMinSec:function(t){var hour,min,sec;if(t==null){t=0}hour=t/3600|0;if(hour<10){hour="0"+hour}t%=3600;min=t/60|0;if(min<10){min="0"+min}sec=(t%60|0).toFixed();if(sec<10){sec="0"+sec}return""+hour+":"+min+":"+sec},durationString:function(t){var result;if(t==null){t=0}result=t<0?"-":"";t=Math.abs(t);if(t>=365*24*3600){result+=(t/(365*24*3600)|0)+" years ";t%=365*24*3600;if(t<24*3600){result+="0 days "}}if(t>=24*3600){result+=(t/(24*3600)|0)+" days "}t%=24*3600;return result+this.hourMinSec(t)}};var DataFormatters={distanceString:function(value){return numeral(value).format("0,0.000 a")+"m"},heightFromTerrainString:function(value){if(value<=-1){return"NA"}return numeral(value).format("0,0.000 a")+"m"},degreeString:function(value){return numeral(value).format("0.000")+"°"},velocityString:function(value){return numeral(value).format("0,0.000 a")+"m/s"},temperatureString:function(value){if(!value){return"NA"}return numeral(value).format("0,000")+"°C"},accelerationSensorString:function(value){if(value[0]=="No Sensors of the Appropriate Type"){return"NA"}return numeral(value[1][0]).format("0,000")+"G"},pressureSensorString:function(value){if(value[0]=="No Sensors of the Appropriate Type"){return"NA"}return numeral(value[1][0]).format("0,000")+"Pa"},gravitySensorString:function(value){if(value[0]=="No Sensors of the Appropriate Type"){return"NA"}return numeral(value[1][0]).format("0,000 a")+"m/s²"},newtonsString:function(value){return numeral(value).format("0,0.00")+" N"},percentageString:function(value){return numeral(value).format("0%")},tonnageString:function(value){return numeral(value).format("0,0.00")+" t"},timeString:function(value){return numeral(value).format("00:00:00")},plainNumberString:function(value){return numeral(value).format("0,0.00")}};var Prototype={Version:"1.7.2",Browser:function(){var ua=navigator.userAgent;var isOpera=Object.prototype.toString.call(window.opera)=="[object Opera]";return{IE:!!window.attachEvent&&!isOpera,Opera:isOpera,WebKit:ua.indexOf("AppleWebKit/")>-1,Gecko:ua.indexOf("Gecko")>-1&&ua.indexOf("KHTML")===-1,MobileSafari:/Apple.*Mobile/.test(ua)}}(),BrowserFeatures:{XPath:!!document.evaluate,SelectorsAPI:!!document.querySelector,ElementExtensions:function(){var constructor=window.Element||window.HTMLElement;return!!(constructor&&constructor.prototype)}(),SpecificElementExtensions:function(){if(typeof window.HTMLDivElement!=="undefined")return true;var div=document.createElement("div"),form=document.createElement("form"),isSupported=false;if(div["__proto__"]&&div["__proto__"]!==form["__proto__"]){isSupported=true}div=form=null;return isSupported}()},ScriptFragment:"]*>([\\S\\s]*?)",JSONFilter:/^\/\*-secure-([\s\S]*)\*\/\s*$/,emptyFunction:function(){},K:function(x){return x}};if(Prototype.Browser.MobileSafari)Prototype.BrowserFeatures.SpecificElementExtensions=false;var Class=function(){var IS_DONTENUM_BUGGY=function(){for(var p in{toString:1}){if(p==="toString")return false}return true}();function subclass(){}function create(){var parent=null,properties=$A(arguments);if(Object.isFunction(properties[0]))parent=properties.shift();function klass(){this.initialize.apply(this,arguments)}Object.extend(klass,Class.Methods);klass.superclass=parent;klass.subclasses=[];if(parent){subclass.prototype=parent.prototype;klass.prototype=new subclass;parent.subclasses.push(klass)}for(var i=0,length=properties.length;i0){match=source.match(pattern);if(match&&match[0].length>0){result+=source.slice(0,match.index);result+=String.interpret(replacement(match));source=source.slice(match.index+match[0].length)}else{result+=source,source=""}}return result}function sub(pattern,replacement,count){replacement=prepareReplacement(replacement);count=Object.isUndefined(count)?1:count;return this.gsub(pattern,function(match){if(--count<0)return match[0];return replacement(match)})}function scan(pattern,iterator){this.gsub(pattern,iterator);return String(this)}function truncate(length,truncation){length=length||30;truncation=Object.isUndefined(truncation)?"...":truncation;return this.length>length?this.slice(0,length-truncation.length)+truncation:String(this)}function strip(){return this.replace(/^\s+/,"").replace(/\s+$/,"")}function stripTags(){return this.replace(/<\w+(\s+("[^"]*"|'[^']*'|[^>])+)?>|<\/\w+>/gi,"")}function stripScripts(){return this.replace(new RegExp(Prototype.ScriptFragment,"img"),"")}function extractScripts(){var matchAll=new RegExp(Prototype.ScriptFragment,"img"),matchOne=new RegExp(Prototype.ScriptFragment,"im");return(this.match(matchAll)||[]).map(function(scriptTag){return(scriptTag.match(matchOne)||["",""])[1]})}function evalScripts(){return this.extractScripts().map(function(script){return eval(script)})}function escapeHTML(){return this.replace(/&/g,"&").replace(//g,">")}function unescapeHTML(){return this.stripTags().replace(/</g,"<").replace(/>/g,">").replace(/&/g,"&")}function toQueryParams(separator){var match=this.strip().match(/([^?#]*)(#.*)?$/);if(!match)return{};return match[1].split(separator||"&").inject({},function(hash,pair){if((pair=pair.split("="))[0]){var key=decodeURIComponent(pair.shift()),value=pair.length>1?pair.join("="):pair[0];if(value!=undefined){value=value.gsub("+"," ");value=decodeURIComponent(value)}if(key in hash){if(!Object.isArray(hash[key]))hash[key]=[hash[key]];hash[key].push(value)}else hash[key]=value}return hash})}function toArray(){return this.split("")}function succ(){return this.slice(0,this.length-1)+String.fromCharCode(this.charCodeAt(this.length-1)+1)}function times(count){return count<1?"":new Array(count+1).join(this)}function camelize(){return this.replace(/-+(.)?/g,function(match,chr){return chr?chr.toUpperCase():""})}function capitalize(){return this.charAt(0).toUpperCase()+this.substring(1).toLowerCase()}function underscore(){return this.replace(/::/g,"/").replace(/([A-Z]+)([A-Z][a-z])/g,"$1_$2").replace(/([a-z\d])([A-Z])/g,"$1_$2").replace(/-/g,"_").toLowerCase()}function dasherize(){return this.replace(/_/g,"-")}function inspect(useDoubleQuotes){var escapedString=this.replace(/[\x00-\x1f\\]/g,function(character){if(character in String.specialChar){return String.specialChar[character]}return"\\u00"+character.charCodeAt().toPaddedString(2,16)});if(useDoubleQuotes)return'"'+escapedString.replace(/"/g,'\\"')+'"';return"'"+escapedString.replace(/'/g,"\\'")+"'"}function unfilterJSON(filter){return this.replace(filter||Prototype.JSONFilter,"$1")}function isJSON(){var str=this;if(str.blank())return false;str=str.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,"@");str=str.replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,"]");str=str.replace(/(?:^|:|,)(?:\s*\[)+/g,"");return/^[\],:{}\s]*$/.test(str)}function evalJSON(sanitize){var json=this.unfilterJSON(),cx=/[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g;if(cx.test(json)){json=json.replace(cx,function(a){return"\\u"+("0000"+a.charCodeAt(0).toString(16)).slice(-4)})}try{if(!sanitize||json.isJSON())return eval("("+json+")")}catch(e){}throw new SyntaxError("Badly formed JSON string: "+this.inspect())}function parseJSON(){var json=this.unfilterJSON();return JSON.parse(json)}function include(pattern){return this.indexOf(pattern)>-1}function startsWith(pattern,position){position=Object.isNumber(position)?position:0;return this.lastIndexOf(pattern,position)===position}function endsWith(pattern,position){pattern=String(pattern);position=Object.isNumber(position)?position:this.length;if(position<0)position=0;if(position>this.length)position=this.length;var d=position-pattern.length;return d>=0&&this.indexOf(pattern,d)===d}function empty(){return this==""}function blank(){return/^\s*$/.test(this)}function interpolate(object,pattern){return new Template(this,pattern).evaluate(object)}return{gsub:gsub,sub:sub,scan:scan,truncate:truncate,strip:String.prototype.trim||strip,stripTags:stripTags,stripScripts:stripScripts,extractScripts:extractScripts,evalScripts:evalScripts,escapeHTML:escapeHTML,unescapeHTML:unescapeHTML,toQueryParams:toQueryParams,parseQuery:toQueryParams,toArray:toArray,succ:succ,times:times,camelize:camelize,capitalize:capitalize,underscore:underscore,dasherize:dasherize,inspect:inspect,unfilterJSON:unfilterJSON,isJSON:isJSON,evalJSON:NATIVE_JSON_PARSE_SUPPORT?parseJSON:evalJSON,include:include,startsWith:String.prototype.startsWith||startsWith,endsWith:String.prototype.endsWith||endsWith,empty:empty,blank:blank,interpolate:interpolate}}());var Template=Class.create({initialize:function(template,pattern){this.template=template.toString();this.pattern=pattern||Template.Pattern},evaluate:function(object){if(object&&Object.isFunction(object.toTemplateReplacements))object=object.toTemplateReplacements();return this.template.gsub(this.pattern,function(match){if(object==null)return match[1]+"";var before=match[1]||"";if(before=="\\")return match[2];var ctx=object,expr=match[3],pattern=/^([^.[]+|\[((?:.*?[^\\])?)\])(\.|\[|$)/;match=pattern.exec(expr);if(match==null)return before;while(match!=null){var comp=match[1].startsWith("[")?match[2].replace(/\\\\]/g,"]"):match[1];ctx=ctx[comp];if(null==ctx||""==match[3])break;expr=expr.substring("["==match[3]?match[1].length:match[0].length);match=pattern.exec(expr)}return before+String.interpret(ctx)})}});Template.Pattern=/(^|.|\r|\n)(#\{(.*?)\})/;var $break={};var Enumerable=function(){function each(iterator,context){try{this._each(iterator,context)}catch(e){if(e!=$break)throw e}return this}function eachSlice(number,iterator,context){var index=-number,slices=[],array=this.toArray();if(number<1)return array;while((index+=number)=result)result=value},this);return result}function min(iterator,context){iterator=iterator||Prototype.K;var result;this.each(function(value,index){value=iterator.call(context,value,index,this);if(result==null||valueb?1:0}).pluck("value")}function toArray(){return this.map()}function zip(){var iterator=Prototype.K,args=$A(arguments);if(Object.isFunction(args.last()))iterator=args.pop();var collections=[this].concat(args).map($A);return this.map(function(value,index){return iterator(collections.pluck(index))})}function size(){return this.toArray().length}function inspect(){return"#"}return{each:each,eachSlice:eachSlice,all:all,every:all,any:any,some:any,collect:collect,map:collect,detect:detect,findAll:findAll,select:findAll,filter:findAll,grep:grep,include:include,member:include,inGroupsOf:inGroupsOf,inject:inject,invoke:invoke,max:max,min:min,partition:partition,pluck:pluck,reject:reject,sortBy:sortBy,toArray:toArray,entries:toArray,zip:zip,size:size,inspect:inspect,find:detect}}();function $A(iterable){if(!iterable)return[];if("toArray"in Object(iterable))return iterable.toArray();var length=iterable.length||0,results=new Array(length);while(length--)results[length]=iterable[length];return results}function $w(string){if(!Object.isString(string))return[];string=string.strip();return string?string.split(/\s+/):[]}Array.from=$A;(function(){var arrayProto=Array.prototype,slice=arrayProto.slice,_each=arrayProto.forEach;function each(iterator,context){for(var i=0,length=this.length>>>0;i>>0;if(length===0)return-1;i=Number(i);if(isNaN(i)){i=0}else if(i!==0&&isFinite(i)){i=(i>0?1:-1)*Math.floor(Math.abs(i))}if(i>length)return-1;var k=i>=0?i:Math.max(length-Math.abs(i),0);for(;k>>0;if(length===0)return-1;if(!Object.isUndefined(i)){i=Number(i);if(isNaN(i)){i=0}else if(i!==0&&isFinite(i)){i=(i>0?1:-1)*Math.floor(Math.abs(i))}}else{i=length}var k=i>=0?Math.min(i,length-1):length-Math.abs(i);for(;k>=0;k--)if(k in array&&array[k]===item)return k;return-1}function concat(_){var array=[],items=slice.call(arguments,0),item,n=0;items.unshift(this);for(var i=0,length=items.length;i>>0;i>>0;i>>0;i>>0;i"}function clone(){return new Hash(this)}return{initialize:initialize,_each:_each,set:set,get:get,unset:unset,toObject:toObject,toTemplateReplacements:toObject,keys:keys,values:values,index:index,merge:merge,update:update,toQueryString:toQueryString,inspect:inspect,toJSON:toObject,clone:clone}}());Hash.from=$H;Object.extend(Number.prototype,function(){function toColorPart(){return this.toPaddedString(2,16)}function succ(){return this+1}function times(iterator,context){$R(0,this,true).each(iterator,context);return this}function toPaddedString(length,radix){var string=this.toString(radix||10);return"0".times(length-string.length)+string}function abs(){return Math.abs(this)}function round(){return Math.round(this)}function ceil(){return Math.ceil(this)}function floor(){return Math.floor(this)}return{toColorPart:toColorPart,succ:succ,times:times,toPaddedString:toPaddedString,abs:abs,round:round,ceil:ceil,floor:floor}}());function $R(start,end,exclusive){return new ObjectRange(start,end,exclusive)}var ObjectRange=Class.create(Enumerable,function(){function initialize(start,end,exclusive){this.start=start;this.end=end;this.exclusive=exclusive}function _each(iterator,context){var value=this.start,i;for(i=0;this.include(value);i++){iterator.call(context,value,i);value=value.succ()}}function include(value){if(value1&&!(readyState==4&&this._complete))this.respondToReadyState(this.transport.readyState)},setRequestHeaders:function(){var headers={"X-Requested-With":"XMLHttpRequest","X-Prototype-Version":Prototype.Version,Accept:"text/javascript, text/html, application/xml, text/xml, */*"};if(this.method=="post"){headers["Content-type"]=this.options.contentType+(this.options.encoding?"; charset="+this.options.encoding:"");if(this.transport.overrideMimeType&&(navigator.userAgent.match(/Gecko\/(\d{4})/)||[0,2005])[1]<2005)headers["Connection"]="close"}if(typeof this.options.requestHeaders=="object"){var extras=this.options.requestHeaders;if(Object.isFunction(extras.push))for(var i=0,length=extras.length;i=200&&status<300||status==304},getStatus:function(){try{if(this.transport.status===1223)return 204;return this.transport.status||0}catch(e){return 0}},respondToReadyState:function(readyState){var state=Ajax.Request.Events[readyState],response=new Ajax.Response(this);if(state=="Complete"){try{this._complete=true;(this.options["on"+response.status]||this.options["on"+(this.success()?"Success":"Failure")]||Prototype.emptyFunction)(response,response.headerJSON)}catch(e){this.dispatchException(e)}var contentType=response.getHeader("Content-type");if(this.options.evalJS=="force"||this.options.evalJS&&this.isSameOrigin()&&contentType&&contentType.match(/^\s*(text|application)\/(x-)?(java|ecma)script(;.*)?\s*$/i))this.evalResponse()}try{(this.options["on"+state]||Prototype.emptyFunction)(response,response.headerJSON);Ajax.Responders.dispatch("on"+state,this,response,response.headerJSON)}catch(e){this.dispatchException(e)}if(state=="Complete"){this.transport.onreadystatechange=Prototype.emptyFunction}},isSameOrigin:function(){var m=this.url.match(/^\s*https?:\/\/[^\/]*/);return!m||m[0]=="#{protocol}//#{domain}#{port}".interpolate({protocol:location.protocol,domain:document.domain,port:location.port?":"+location.port:""})},getHeader:function(name){try{return this.transport.getResponseHeader(name)||null}catch(e){return null}},evalResponse:function(){try{return eval((this.transport.responseText||"").unfilterJSON())}catch(e){this.dispatchException(e)}},dispatchException:function(exception){(this.options.onException||Prototype.emptyFunction)(this,exception);Ajax.Responders.dispatch("onException",this,exception)}});Ajax.Request.Events=["Uninitialized","Loading","Loaded","Interactive","Complete"];Ajax.Response=Class.create({initialize:function(request){this.request=request;var transport=this.transport=request.transport,readyState=this.readyState=transport.readyState;if(readyState>2&&!Prototype.Browser.IE||readyState==4){this.status=this.getStatus();this.statusText=this.getStatusText();this.responseText=String.interpret(transport.responseText);this.headerJSON=this._getHeaderJSON()}if(readyState==4){var xml=transport.responseXML;this.responseXML=Object.isUndefined(xml)?null:xml;this.responseJSON=this._getResponseJSON()}},status:0,statusText:"",getStatus:Ajax.Request.prototype.getStatus,getStatusText:function(){try{return this.transport.statusText||""}catch(e){return""}},getHeader:Ajax.Request.prototype.getHeader,getAllHeaders:function(){try{return this.getAllResponseHeaders()}catch(e){return null}},getResponseHeader:function(name){return this.transport.getResponseHeader(name)},getAllResponseHeaders:function(){return this.transport.getAllResponseHeaders()},_getHeaderJSON:function(){var json=this.getHeader("X-JSON");if(!json)return null;try{json=decodeURIComponent(escape(json))}catch(e){}try{return json.evalJSON(this.request.options.sanitizeJSON||!this.request.isSameOrigin())}catch(e){this.request.dispatchException(e)}},_getResponseJSON:function(){var options=this.request.options;if(!options.evalJSON||options.evalJSON!="force"&&!(this.getHeader("Content-type")||"").include("application/json")||this.responseText.blank())return null;try{return this.responseText.evalJSON(options.sanitizeJSON||!this.request.isSameOrigin())}catch(e){this.request.dispatchException(e)}}});Ajax.Updater=Class.create(Ajax.Request,{initialize:function($super,container,url,options){this.container={success:container.success||container,failure:container.failure||(container.success?null:container)};options=Object.clone(options);var onComplete=options.onComplete;options.onComplete=function(response,json){this.updateContent(response.responseText);if(Object.isFunction(onComplete))onComplete(response,json)}.bind(this);$super(url,options)},updateContent:function(responseText){var receiver=this.container[this.success()?"success":"failure"],options=this.options;if(!options.evalScripts)responseText=responseText.stripScripts();if(receiver=$(receiver)){if(options.insertion){if(Object.isString(options.insertion)){var insertion={};insertion[options.insertion]=responseText;receiver.insert(insertion)}else options.insertion(receiver,responseText)}else receiver.update(responseText)}}});Ajax.PeriodicalUpdater=Class.create(Ajax.Base,{initialize:function($super,container,url,options){$super(options);this.onComplete=this.options.onComplete;this.frequency=this.options.frequency||2;this.decay=this.options.decay||1;this.updater={};this.container=container;this.url=url;this.start()},start:function(){this.options.onComplete=this.updateComplete.bind(this);this.onTimerEvent()},stop:function(){this.updater.options.onComplete=undefined;clearTimeout(this.timer);(this.onComplete||Prototype.emptyFunction).apply(this,arguments)},updateComplete:function(response){if(this.options.decay){this.decay=response.responseText==this.lastText?this.decay*this.options.decay:1;this.lastText=response.responseText}this.timer=this.onTimerEvent.bind(this).delay(this.decay*this.frequency)},onTimerEvent:function(){this.updater=new Ajax.Updater(this.container,this.url,this.options)}});(function(GLOBAL){var UNDEFINED;var SLICE=Array.prototype.slice;var DIV=document.createElement("div");function $(element){if(arguments.length>1){for(var i=0,elements=[],length=arguments.length;i');return el.tagName.toLowerCase()==="input"&&el.name==="x"}catch(err){return false}}();var oldElement=GLOBAL.Element;function Element(tagName,attributes){attributes=attributes||{};tagName=tagName.toLowerCase();if(HAS_EXTENDED_CREATE_ELEMENT_SYNTAX&&attributes.name){tagName="<"+tagName+' name="'+attributes.name+'">';delete attributes.name;return Element.writeAttribute(document.createElement(tagName),attributes)}if(!ELEMENT_CACHE[tagName])ELEMENT_CACHE[tagName]=Element.extend(document.createElement(tagName));var node=shouldUseCreationCache(tagName,attributes)?ELEMENT_CACHE[tagName].cloneNode(false):document.createElement(tagName);return Element.writeAttribute(node,attributes)}GLOBAL.Element=Element;Object.extend(GLOBAL.Element,oldElement||{});if(oldElement)GLOBAL.Element.prototype=oldElement.prototype;Element.Methods={ByTag:{},Simulated:{}};var methods={};var INSPECT_ATTRIBUTES={id:"id",className:"class"};function inspect(element){element=$(element);var result="<"+element.tagName.toLowerCase();var attribute,value;for(var property in INSPECT_ATTRIBUTES){attribute=INSPECT_ATTRIBUTES[property];value=(element[property]||"").toString();if(value)result+=" "+attribute+"="+value.inspect(true)}return result+">"}methods.inspect=inspect;function visible(element){return $(element).style.display!=="none"}function toggle(element,bool){element=$(element);if(Object.isUndefined(bool))bool=!Element.visible(element);Element[bool?"show":"hide"](element);return element}function hide(element){element=$(element);element.style.display="none";return element}function show(element){element=$(element);element.style.display="";return element}Object.extend(methods,{visible:visible,toggle:toggle,hide:hide,show:show});function remove(element){element=$(element);element.parentNode.removeChild(element);return element}var SELECT_ELEMENT_INNERHTML_BUGGY=function(){var el=document.createElement("select"),isBuggy=true;el.innerHTML='';if(el.options&&el.options[0]){isBuggy=el.options[0].nodeName.toUpperCase()!=="OPTION"}el=null;return isBuggy}();var TABLE_ELEMENT_INNERHTML_BUGGY=function(){try{var el=document.createElement("table");if(el&&el.tBodies){el.innerHTML="test";var isBuggy=typeof el.tBodies[0]=="undefined";el=null;return isBuggy}}catch(e){return true}}();var LINK_ELEMENT_INNERHTML_BUGGY=function(){try{var el=document.createElement("div");el.innerHTML="";var isBuggy=el.childNodes.length===0;el=null;return isBuggy}catch(e){return true}}();var ANY_INNERHTML_BUGGY=SELECT_ELEMENT_INNERHTML_BUGGY||TABLE_ELEMENT_INNERHTML_BUGGY||LINK_ELEMENT_INNERHTML_BUGGY;var SCRIPT_ELEMENT_REJECTS_TEXTNODE_APPENDING=function(){var s=document.createElement("script"),isBuggy=false;try{s.appendChild(document.createTextNode(""));isBuggy=!s.firstChild||s.firstChild&&s.firstChild.nodeType!==3}catch(e){isBuggy=true}s=null;return isBuggy}();function update(element,content){element=$(element);var descendants=element.getElementsByTagName("*"),i=descendants.length;while(i--)purgeElement(descendants[i]);if(content&&content.toElement)content=content.toElement();if(Object.isElement(content))return element.update().insert(content);content=Object.toHTML(content);var tagName=element.tagName.toUpperCase();if(tagName==="SCRIPT"&&SCRIPT_ELEMENT_REJECTS_TEXTNODE_APPENDING){element.text=content;return element}if(ANY_INNERHTML_BUGGY){if(tagName in INSERTION_TRANSLATIONS.tags){while(element.firstChild)element.removeChild(element.firstChild);var nodes=getContentFromAnonymousElement(tagName,content.stripScripts());for(var i=0,node;node=nodes[i];i++)element.appendChild(node)}else if(LINK_ELEMENT_INNERHTML_BUGGY&&Object.isString(content)&&content.indexOf("-1){while(element.firstChild)element.removeChild(element.firstChild);var nodes=getContentFromAnonymousElement(tagName,content.stripScripts(),true);for(var i=0,node;node=nodes[i];i++)element.appendChild(node)}else{element.innerHTML=content.stripScripts()}}else{element.innerHTML=content.stripScripts()}content.evalScripts.bind(content).defer();return element}function replace(element,content){element=$(element);if(content&&content.toElement){content=content.toElement()}else if(!Object.isElement(content)){content=Object.toHTML(content);var range=element.ownerDocument.createRange();range.selectNode(element);content.evalScripts.bind(content).defer();content=range.createContextualFragment(content.stripScripts())}element.parentNode.replaceChild(content,element);return element}var INSERTION_TRANSLATIONS={before:function(element,node){element.parentNode.insertBefore(node,element)},top:function(element,node){element.insertBefore(node,element.firstChild)},bottom:function(element,node){element.appendChild(node)},after:function(element,node){element.parentNode.insertBefore(node,element.nextSibling)},tags:{TABLE:["","
    ",1],TBODY:["","
    ",2],TR:["","
    ",3],TD:["
    ","
    ",4],SELECT:["",1]}};var tags=INSERTION_TRANSLATIONS.tags;Object.extend(tags,{THEAD:tags.TBODY,TFOOT:tags.TBODY,TH:tags.TD});function replace_IE(element,content){element=$(element);if(content&&content.toElement)content=content.toElement();if(Object.isElement(content)){element.parentNode.replaceChild(content,element);return element}content=Object.toHTML(content);var parent=element.parentNode,tagName=parent.tagName.toUpperCase();if(tagName in INSERTION_TRANSLATIONS.tags){var nextSibling=Element.next(element);var fragments=getContentFromAnonymousElement(tagName,content.stripScripts());parent.removeChild(element);var iterator;if(nextSibling)iterator=function(node){parent.insertBefore(node,nextSibling)};else iterator=function(node){parent.appendChild(node)};fragments.each(iterator)}else{element.outerHTML=content.stripScripts()}content.evalScripts.bind(content).defer();return element}if("outerHTML"in document.documentElement)replace=replace_IE;function isContent(content){if(Object.isUndefined(content)||content===null)return false;if(Object.isString(content)||Object.isNumber(content))return true;if(Object.isElement(content))return true;if(content.toElement||content.toHTML)return true;return false}function insertContentAt(element,content,position){position=position.toLowerCase();var method=INSERTION_TRANSLATIONS[position];if(content&&content.toElement)content=content.toElement();if(Object.isElement(content)){method(element,content);return element}content=Object.toHTML(content);var tagName=(position==="before"||position==="after"?element.parentNode:element).tagName.toUpperCase();var childNodes=getContentFromAnonymousElement(tagName,content.stripScripts());if(position==="top"||position==="after")childNodes.reverse();for(var i=0,node;node=childNodes[i];i++)method(element,node);content.evalScripts.bind(content).defer()}function insert(element,insertions){element=$(element);if(isContent(insertions))insertions={bottom:insertions};for(var position in insertions)insertContentAt(element,insertions[position],position);return element}function wrap(element,wrapper,attributes){element=$(element);if(Object.isElement(wrapper)){$(wrapper).writeAttribute(attributes||{})}else if(Object.isString(wrapper)){wrapper=new Element(wrapper,attributes)}else{wrapper=new Element("div",wrapper)}if(element.parentNode)element.parentNode.replaceChild(wrapper,element);wrapper.appendChild(element);return wrapper}function cleanWhitespace(element){element=$(element);var node=element.firstChild;while(node){var nextNode=node.nextSibling;if(node.nodeType===Node.TEXT_NODE&&!/\S/.test(node.nodeValue))element.removeChild(node);node=nextNode}return element}function empty(element){return $(element).innerHTML.blank()}function getContentFromAnonymousElement(tagName,html,force){var t=INSERTION_TRANSLATIONS.tags[tagName],div=DIV;var workaround=!!t;if(!workaround&&force){workaround=true;t=["","",0]}if(workaround){div.innerHTML=" "+t[0]+html+t[1];div.removeChild(div.firstChild);for(var i=t[2];i--;)div=div.firstChild}else{div.innerHTML=html}return $A(div.childNodes)}function clone(element,deep){if(!(element=$(element)))return;var clone=element.cloneNode(deep);if(!HAS_UNIQUE_ID_PROPERTY){clone._prototypeUID=UNDEFINED;if(deep){var descendants=Element.select(clone,"*"),i=descendants.length;while(i--)descendants[i]._prototypeUID=UNDEFINED}}return Element.extend(clone)}function purgeElement(element){var uid=getUniqueElementID(element);if(uid){Element.stopObserving(element);if(!HAS_UNIQUE_ID_PROPERTY)element._prototypeUID=UNDEFINED;delete Element.Storage[uid]}}function purgeCollection(elements){var i=elements.length;while(i--)purgeElement(elements[i])}function purgeCollection_IE(elements){var i=elements.length,element,uid;while(i--){element=elements[i];uid=getUniqueElementID(element);delete Element.Storage[uid];delete Event.cache[uid]}}if(HAS_UNIQUE_ID_PROPERTY){purgeCollection=purgeCollection_IE}function purge(element){if(!(element=$(element)))return;purgeElement(element);var descendants=element.getElementsByTagName("*"),i=descendants.length;while(i--)purgeElement(descendants[i]);return null}Object.extend(methods,{remove:remove,update:update,replace:replace,insert:insert,wrap:wrap,cleanWhitespace:cleanWhitespace,empty:empty,clone:clone,purge:purge});function recursivelyCollect(element,property,maximumLength){element=$(element);maximumLength=maximumLength||-1;var elements=[];while(element=element[property]){if(element.nodeType===Node.ELEMENT_NODE)elements.push(Element.extend(element));if(elements.length===maximumLength)break}return elements}function ancestors(element){return recursivelyCollect(element,"parentNode")}function descendants(element){return Element.select(element,"*")}function firstDescendant(element){element=$(element).firstChild;while(element&&element.nodeType!==Node.ELEMENT_NODE)element=element.nextSibling;return $(element)}function immediateDescendants(element){var results=[],child=$(element).firstChild;while(child){if(child.nodeType===Node.ELEMENT_NODE)results.push(Element.extend(child));child=child.nextSibling}return results}function previousSiblings(element){return recursivelyCollect(element,"previousSibling")}function nextSiblings(element){return recursivelyCollect(element,"nextSibling")}function siblings(element){element=$(element);var previous=previousSiblings(element),next=nextSiblings(element);return previous.reverse().concat(next)}function match(element,selector){element=$(element);if(Object.isString(selector))return Prototype.Selector.match(element,selector);return selector.match(element)}function _recursivelyFind(element,property,expression,index){element=$(element),expression=expression||0,index=index||0;if(Object.isNumber(expression)){index=expression,expression=null}while(element=element[property]){if(element.nodeType!==1)continue;if(expression&&!Prototype.Selector.match(element,expression))continue;if(--index>=0)continue;return Element.extend(element)}}function up(element,expression,index){element=$(element);if(arguments.length===1)return $(element.parentNode);return _recursivelyFind(element,"parentNode",expression,index)}function down(element,expression,index){if(arguments.length===1)return firstDescendant(element);element=$(element),expression=expression||0,index=index||0;if(Object.isNumber(expression))index=expression,expression="*";var node=Prototype.Selector.select(expression,element)[index];return Element.extend(node)}function previous(element,expression,index){return _recursivelyFind(element,"previousSibling",expression,index)}function next(element,expression,index){return _recursivelyFind(element,"nextSibling",expression,index)}function select(element){element=$(element);var expressions=SLICE.call(arguments,1).join(", ");return Prototype.Selector.select(expressions,element)}function adjacent(element){element=$(element);var expressions=SLICE.call(arguments,1).join(", ");var siblings=Element.siblings(element),results=[];for(var i=0,sibling;sibling=siblings[i];i++){if(Prototype.Selector.match(sibling,expressions))results.push(sibling)}return results}function descendantOf_DOM(element,ancestor){element=$(element),ancestor=$(ancestor);while(element=element.parentNode)if(element===ancestor)return true;return false}function descendantOf_contains(element,ancestor){element=$(element),ancestor=$(ancestor);if(!ancestor.contains)return descendantOf_DOM(element,ancestor);return ancestor.contains(element)&&ancestor!==element}function descendantOf_compareDocumentPosition(element,ancestor){element=$(element),ancestor=$(ancestor);return(element.compareDocumentPosition(ancestor)&8)===8}var descendantOf;if(DIV.compareDocumentPosition){descendantOf=descendantOf_compareDocumentPosition}else if(DIV.contains){descendantOf=descendantOf_contains}else{descendantOf=descendantOf_DOM}Object.extend(methods,{recursivelyCollect:recursivelyCollect,ancestors:ancestors,descendants:descendants,firstDescendant:firstDescendant,immediateDescendants:immediateDescendants,previousSiblings:previousSiblings,nextSiblings:nextSiblings,siblings:siblings,match:match,up:up,down:down,previous:previous,next:next,select:select,adjacent:adjacent,descendantOf:descendantOf,getElementsBySelector:select,childElements:immediateDescendants});var idCounter=1;function identify(element){element=$(element);var id=Element.readAttribute(element,"id");if(id)return id;do{id="anonymous_element_"+idCounter++}while($(id));Element.writeAttribute(element,"id",id);return id}function readAttribute(element,name){return $(element).getAttribute(name)}function readAttribute_IE(element,name){element=$(element);var table=ATTRIBUTE_TRANSLATIONS.read;if(table.values[name])return table.values[name](element,name);if(table.names[name])name=table.names[name];if(name.include(":")){if(!element.attributes||!element.attributes[name])return null;return element.attributes[name].value}return element.getAttribute(name)}function readAttribute_Opera(element,name){if(name==="title")return element.title;return element.getAttribute(name)}var PROBLEMATIC_ATTRIBUTE_READING=function(){DIV.setAttribute("onclick",[]);var value=DIV.getAttribute("onclick");var isFunction=Object.isArray(value);DIV.removeAttribute("onclick");return isFunction}();if(PROBLEMATIC_ATTRIBUTE_READING){readAttribute=readAttribute_IE}else if(Prototype.Browser.Opera){readAttribute=readAttribute_Opera}function writeAttribute(element,name,value){element=$(element);var attributes={},table=ATTRIBUTE_TRANSLATIONS.write; +Math.toRadians = function(angleInDegrees){ + return angleInDegrees * (Math.PI/180) +} -if(typeof name==="object"){attributes=name}else{attributes[name]=Object.isUndefined(value)?true:value}for(var attr in attributes){name=table.names[attr]||attr;value=attributes[attr];if(table.values[attr])name=table.values[attr](element,value)||name;if(value===false||value===null)element.removeAttribute(name);else if(value===true)element.setAttribute(name,name);else element.setAttribute(name,value)}return element}var PROBLEMATIC_HAS_ATTRIBUTE_WITH_CHECKBOXES=function(){if(!HAS_EXTENDED_CREATE_ELEMENT_SYNTAX){return false}var checkbox=document.createElement('');checkbox.checked=true;var node=checkbox.getAttributeNode("checked");return!node||!node.specified}();function hasAttribute(element,attribute){attribute=ATTRIBUTE_TRANSLATIONS.has[attribute]||attribute;var node=$(element).getAttributeNode(attribute);return!!(node&&node.specified)}function hasAttribute_IE(element,attribute){if(attribute==="checked"){return element.checked}return hasAttribute(element,attribute)}GLOBAL.Element.Methods.Simulated.hasAttribute=PROBLEMATIC_HAS_ATTRIBUTE_WITH_CHECKBOXES?hasAttribute_IE:hasAttribute;function classNames(element){return new Element.ClassNames(element)}var regExpCache={};function getRegExpForClassName(className){if(regExpCache[className])return regExpCache[className];var re=new RegExp("(^|\\s+)"+className+"(\\s+|$)");regExpCache[className]=re;return re}function hasClassName(element,className){if(!(element=$(element)))return;var elementClassName=element.className;if(elementClassName.length===0)return false;if(elementClassName===className)return true;return getRegExpForClassName(className).test(elementClassName)}function addClassName(element,className){if(!(element=$(element)))return;if(!hasClassName(element,className))element.className+=(element.className?" ":"")+className;return element}function removeClassName(element,className){if(!(element=$(element)))return;element.className=element.className.replace(getRegExpForClassName(className)," ").strip();return element}function toggleClassName(element,className,bool){if(!(element=$(element)))return;if(Object.isUndefined(bool))bool=!hasClassName(element,className);var method=Element[bool?"addClassName":"removeClassName"];return method(element,className)}var ATTRIBUTE_TRANSLATIONS={};var classProp="className",forProp="for";DIV.setAttribute(classProp,"x");if(DIV.className!=="x"){DIV.setAttribute("class","x");if(DIV.className==="x")classProp="class"}var LABEL=document.createElement("label");LABEL.setAttribute(forProp,"x");if(LABEL.htmlFor!=="x"){LABEL.setAttribute("htmlFor","x");if(LABEL.htmlFor==="x")forProp="htmlFor"}LABEL=null;function _getAttr(element,attribute){return element.getAttribute(attribute)}function _getAttr2(element,attribute){return element.getAttribute(attribute,2)}function _getAttrNode(element,attribute){var node=element.getAttributeNode(attribute);return node?node.value:""}function _getFlag(element,attribute){return $(element).hasAttribute(attribute)?attribute:null}DIV.onclick=Prototype.emptyFunction;var onclickValue=DIV.getAttribute("onclick");var _getEv;if(String(onclickValue).indexOf("{")>-1){_getEv=function(element,attribute){var value=element.getAttribute(attribute);if(!value)return null;value=value.toString();value=value.split("{")[1];value=value.split("}")[0];return value.strip()}}else if(onclickValue===""){_getEv=function(element,attribute){var value=element.getAttribute(attribute);if(!value)return null;return value.strip()}}ATTRIBUTE_TRANSLATIONS.read={names:{class:classProp,className:classProp,for:forProp,htmlFor:forProp},values:{style:function(element){return element.style.cssText.toLowerCase()},title:function(element){return element.title}}};ATTRIBUTE_TRANSLATIONS.write={names:{className:"class",htmlFor:"for",cellpadding:"cellPadding",cellspacing:"cellSpacing"},values:{checked:function(element,value){element.checked=!!value},style:function(element,value){element.style.cssText=value?value:""}}};ATTRIBUTE_TRANSLATIONS.has={names:{}};Object.extend(ATTRIBUTE_TRANSLATIONS.write.names,ATTRIBUTE_TRANSLATIONS.read.names);var CAMEL_CASED_ATTRIBUTE_NAMES=$w("colSpan rowSpan vAlign dateTime "+"accessKey tabIndex encType maxLength readOnly longDesc frameBorder");for(var i=0,attr;attr=CAMEL_CASED_ATTRIBUTE_NAMES[i];i++){ATTRIBUTE_TRANSLATIONS.write.names[attr.toLowerCase()]=attr;ATTRIBUTE_TRANSLATIONS.has.names[attr.toLowerCase()]=attr}Object.extend(ATTRIBUTE_TRANSLATIONS.read.values,{href:_getAttr2,src:_getAttr2,type:_getAttr,action:_getAttrNode,disabled:_getFlag,checked:_getFlag,readonly:_getFlag,multiple:_getFlag,onload:_getEv,onunload:_getEv,onclick:_getEv,ondblclick:_getEv,onmousedown:_getEv,onmouseup:_getEv,onmouseover:_getEv,onmousemove:_getEv,onmouseout:_getEv,onfocus:_getEv,onblur:_getEv,onkeypress:_getEv,onkeydown:_getEv,onkeyup:_getEv,onsubmit:_getEv,onreset:_getEv,onselect:_getEv,onchange:_getEv});Object.extend(methods,{identify:identify,readAttribute:readAttribute,writeAttribute:writeAttribute,classNames:classNames,hasClassName:hasClassName,addClassName:addClassName,removeClassName:removeClassName,toggleClassName:toggleClassName});function normalizeStyleName(style){if(style==="float"||style==="styleFloat")return"cssFloat";return style.camelize()}function normalizeStyleName_IE(style){if(style==="float"||style==="cssFloat")return"styleFloat";return style.camelize()}function setStyle(element,styles){element=$(element);var elementStyle=element.style,match;if(Object.isString(styles)){elementStyle.cssText+=";"+styles;if(styles.include("opacity")){var opacity=styles.match(/opacity:\s*(\d?\.?\d*)/)[1];Element.setOpacity(element,opacity)}return element}for(var property in styles){if(property==="opacity"){Element.setOpacity(element,styles[property])}else{var value=styles[property];if(property==="float"||property==="cssFloat"){property=Object.isUndefined(elementStyle.styleFloat)?"cssFloat":"styleFloat"}elementStyle[property]=value}}return element}function getStyle(element,style){element=$(element);style=normalizeStyleName(style);var value=element.style[style];if(!value||value==="auto"){var css=document.defaultView.getComputedStyle(element,null);value=css?css[style]:null}if(style==="opacity")return value?parseFloat(value):1;return value==="auto"?null:value}function getStyle_Opera(element,style){switch(style){case"height":case"width":if(!Element.visible(element))return null;var dim=parseInt(getStyle(element,style),10);if(dim!==element["offset"+style.capitalize()])return dim+"px";return Element.measure(element,style);default:return getStyle(element,style)}}function getStyle_IE(element,style){element=$(element);style=normalizeStyleName_IE(style);var value=element.style[style];if(!value&&element.currentStyle){value=element.currentStyle[style]}if(style==="opacity"&&!STANDARD_CSS_OPACITY_SUPPORTED)return getOpacity_IE(element);if(value==="auto"){if((style==="width"||style==="height")&&Element.visible(element))return Element.measure(element,style)+"px";return null}return value}function stripAlphaFromFilter_IE(filter){return(filter||"").replace(/alpha\([^\)]*\)/gi,"")}function hasLayout_IE(element){if(!element.currentStyle||!element.currentStyle.hasLayout)element.style.zoom=1;return element}var STANDARD_CSS_OPACITY_SUPPORTED=function(){DIV.style.cssText="opacity:.55";return/^0.55/.test(DIV.style.opacity)}();function setOpacity(element,value){element=$(element);if(value==1||value==="")value="";else if(value<1e-5)value=0;element.style.opacity=value;return element}function setOpacity_IE(element,value){if(STANDARD_CSS_OPACITY_SUPPORTED)return setOpacity(element,value);element=hasLayout_IE($(element));var filter=Element.getStyle(element,"filter"),style=element.style;if(value==1||value===""){filter=stripAlphaFromFilter_IE(filter);if(filter)style.filter=filter;else style.removeAttribute("filter");return element}if(value<1e-5)value=0;style.filter=stripAlphaFromFilter_IE(filter)+"alpha(opacity="+value*100+")";return element}function getOpacity(element){return Element.getStyle(element,"opacity")}function getOpacity_IE(element){if(STANDARD_CSS_OPACITY_SUPPORTED)return getOpacity(element);var filter=Element.getStyle(element,"filter");if(filter.length===0)return 1;var match=(filter||"").match(/alpha\(opacity=(.*)\)/);if(match&&match[1])return parseFloat(match[1])/100;return 1}Object.extend(methods,{setStyle:setStyle,getStyle:getStyle,setOpacity:setOpacity,getOpacity:getOpacity});if("styleFloat"in DIV.style){methods.getStyle=getStyle_IE;methods.setOpacity=setOpacity_IE;methods.getOpacity=getOpacity_IE}var UID=0;GLOBAL.Element.Storage={UID:1};function getUniqueElementID(element){if(element===window)return 0;if(typeof element._prototypeUID==="undefined")element._prototypeUID=Element.Storage.UID++;return element._prototypeUID}function getUniqueElementID_IE(element){if(element===window)return 0;if(element==document)return 1;return element.uniqueID}var HAS_UNIQUE_ID_PROPERTY="uniqueID"in DIV;if(HAS_UNIQUE_ID_PROPERTY)getUniqueElementID=getUniqueElementID_IE;function getStorage(element){if(!(element=$(element)))return;var uid=getUniqueElementID(element);if(!Element.Storage[uid])Element.Storage[uid]=$H();return Element.Storage[uid]}function store(element,key,value){if(!(element=$(element)))return;var storage=getStorage(element);if(arguments.length===2){storage.update(key)}else{storage.set(key,value)}return element}function retrieve(element,key,defaultValue){if(!(element=$(element)))return;var storage=getStorage(element),value=storage.get(key);if(Object.isUndefined(value)){storage.set(key,defaultValue);value=defaultValue}return value}Object.extend(methods,{getStorage:getStorage,store:store,retrieve:retrieve});var Methods={},ByTag=Element.Methods.ByTag,F=Prototype.BrowserFeatures;if(!F.ElementExtensions&&"__proto__"in DIV){GLOBAL.HTMLElement={};GLOBAL.HTMLElement.prototype=DIV["__proto__"];F.ElementExtensions=true}function checkElementPrototypeDeficiency(tagName){if(typeof window.Element==="undefined")return false;if(!HAS_EXTENDED_CREATE_ELEMENT_SYNTAX)return false;var proto=window.Element.prototype;if(proto){var id="_"+(Math.random()+"").slice(2),el=document.createElement(tagName);proto[id]="x";var isBuggy=el[id]!=="x";delete proto[id];el=null;return isBuggy}return false}var HTMLOBJECTELEMENT_PROTOTYPE_BUGGY=checkElementPrototypeDeficiency("object");function extendElementWith(element,methods){for(var property in methods){var value=methods[property];if(Object.isFunction(value)&&!(property in element))element[property]=value.methodize()}}var EXTENDED={};function elementIsExtended(element){var uid=getUniqueElementID(element);return uid in EXTENDED}function extend(element){if(!element||elementIsExtended(element))return element;if(element.nodeType!==Node.ELEMENT_NODE||element==window)return element;var methods=Object.clone(Methods),tagName=element.tagName.toUpperCase();if(ByTag[tagName])Object.extend(methods,ByTag[tagName]);extendElementWith(element,methods);EXTENDED[getUniqueElementID(element)]=true;return element}function extend_IE8(element){if(!element||elementIsExtended(element))return element;var t=element.tagName;if(t&&/^(?:object|applet|embed)$/i.test(t)){extendElementWith(element,Element.Methods);extendElementWith(element,Element.Methods.Simulated);extendElementWith(element,Element.Methods.ByTag[t.toUpperCase()])}return element}if(F.SpecificElementExtensions){extend=HTMLOBJECTELEMENT_PROTOTYPE_BUGGY?extend_IE8:Prototype.K}function addMethodsToTagName(tagName,methods){tagName=tagName.toUpperCase();if(!ByTag[tagName])ByTag[tagName]={};Object.extend(ByTag[tagName],methods)}function mergeMethods(destination,methods,onlyIfAbsent){if(Object.isUndefined(onlyIfAbsent))onlyIfAbsent=false;for(var property in methods){var value=methods[property];if(!Object.isFunction(value))continue;if(!onlyIfAbsent||!(property in destination))destination[property]=value.methodize()}}function findDOMClass(tagName){var klass;var trans={OPTGROUP:"OptGroup",TEXTAREA:"TextArea",P:"Paragraph",FIELDSET:"FieldSet",UL:"UList",OL:"OList",DL:"DList",DIR:"Directory",H1:"Heading",H2:"Heading",H3:"Heading",H4:"Heading",H5:"Heading",H6:"Heading",Q:"Quote",INS:"Mod",DEL:"Mod",A:"Anchor",IMG:"Image",CAPTION:"TableCaption",COL:"TableCol",COLGROUP:"TableCol",THEAD:"TableSection",TFOOT:"TableSection",TBODY:"TableSection",TR:"TableRow",TH:"TableCell",TD:"TableCell",FRAMESET:"FrameSet",IFRAME:"IFrame"};if(trans[tagName])klass="HTML"+trans[tagName]+"Element";if(window[klass])return window[klass];klass="HTML"+tagName+"Element";if(window[klass])return window[klass];klass="HTML"+tagName.capitalize()+"Element";if(window[klass])return window[klass];var element=document.createElement(tagName),proto=element["__proto__"]||element.constructor.prototype;element=null;return proto}function addMethods(methods){if(arguments.length===0)addFormMethods();if(arguments.length===2){var tagName=methods;methods=arguments[1]}if(!tagName){Object.extend(Element.Methods,methods||{})}else{if(Object.isArray(tagName)){for(var i=0,tag;tag=tagName[i];i++)addMethodsToTagName(tag,methods)}else{addMethodsToTagName(tagName,methods)}}var ELEMENT_PROTOTYPE=window.HTMLElement?HTMLElement.prototype:Element.prototype;if(F.ElementExtensions){mergeMethods(ELEMENT_PROTOTYPE,Element.Methods);mergeMethods(ELEMENT_PROTOTYPE,Element.Methods.Simulated,true)}if(F.SpecificElementExtensions){for(var tag in Element.Methods.ByTag){var klass=findDOMClass(tag);if(Object.isUndefined(klass))continue;mergeMethods(klass.prototype,ByTag[tag])}}Object.extend(Element,Element.Methods);Object.extend(Element,Element.Methods.Simulated);delete Element.ByTag;delete Element.Simulated;Element.extend.refresh();ELEMENT_CACHE={}}Object.extend(GLOBAL.Element,{extend:extend,addMethods:addMethods});if(extend===Prototype.K){GLOBAL.Element.extend.refresh=Prototype.emptyFunction}else{GLOBAL.Element.extend.refresh=function(){if(Prototype.BrowserFeatures.ElementExtensions)return;Object.extend(Methods,Element.Methods);Object.extend(Methods,Element.Methods.Simulated);EXTENDED={}}}function addFormMethods(){Object.extend(Form,Form.Methods);Object.extend(Form.Element,Form.Element.Methods);Object.extend(Element.Methods.ByTag,{FORM:Object.clone(Form.Methods),INPUT:Object.clone(Form.Element.Methods),SELECT:Object.clone(Form.Element.Methods),TEXTAREA:Object.clone(Form.Element.Methods),BUTTON:Object.clone(Form.Element.Methods)})}Element.addMethods(methods);function destroyCache_IE(){DIV=null;ELEMENT_CACHE=null}if(window.attachEvent)window.attachEvent("onunload",destroyCache_IE)})(this);(function(){function toDecimal(pctString){var match=pctString.match(/^(\d+)%?$/i);if(!match)return null;return Number(match[1])/100}function getRawStyle(element,style){element=$(element);var value=element.style[style];if(!value||value==="auto"){var css=document.defaultView.getComputedStyle(element,null);value=css?css[style]:null}if(style==="opacity")return value?parseFloat(value):1;return value==="auto"?null:value}function getRawStyle_IE(element,style){var value=element.style[style];if(!value&&element.currentStyle){value=element.currentStyle[style]}return value}function getContentWidth(element,context){var boxWidth=element.offsetWidth;var bl=getPixelValue(element,"borderLeftWidth",context)||0;var br=getPixelValue(element,"borderRightWidth",context)||0;var pl=getPixelValue(element,"paddingLeft",context)||0;var pr=getPixelValue(element,"paddingRight",context)||0;return boxWidth-bl-br-pl-pr}if("currentStyle"in document.documentElement){getRawStyle=getRawStyle_IE}function getPixelValue(value,property,context){var element=null;if(Object.isElement(value)){element=value;value=getRawStyle(element,property)}if(value===null||Object.isUndefined(value)){return null}if(/^(?:-)?\d+(\.\d+)?(px)?$/i.test(value)){return window.parseFloat(value)}var isPercentage=value.include("%"),isViewport=context===document.viewport;if(/\d/.test(value)&&element&&element.runtimeStyle&&!(isPercentage&&isViewport)){var style=element.style.left,rStyle=element.runtimeStyle.left;element.runtimeStyle.left=element.currentStyle.left;element.style.left=value||0;value=element.style.pixelLeft;element.style.left=style;element.runtimeStyle.left=rStyle;return value}if(element&&isPercentage){context=context||element.parentNode;var decimal=toDecimal(value),whole=null;var isHorizontal=property.include("left")||property.include("right")||property.include("width");var isVertical=property.include("top")||property.include("bottom")||property.include("height");if(context===document.viewport){if(isHorizontal){whole=document.viewport.getWidth()}else if(isVertical){whole=document.viewport.getHeight()}}else{if(isHorizontal){whole=$(context).measure("width")}else if(isVertical){whole=$(context).measure("height")}}return whole===null?0:whole*decimal}return 0}function toCSSPixels(number){if(Object.isString(number)&&number.endsWith("px"))return number;return number+"px"}function isDisplayed(element){while(element&&element.parentNode){var display=element.getStyle("display");if(display==="none"){return false}element=$(element.parentNode)}return true}var hasLayout=Prototype.K;if("currentStyle"in document.documentElement){hasLayout=function(element){if(!element.currentStyle.hasLayout){element.style.zoom=1}return element}}function cssNameFor(key){if(key.include("border"))key=key+"-width";return key.camelize()}Element.Layout=Class.create(Hash,{initialize:function($super,element,preCompute){$super();this.element=$(element);Element.Layout.PROPERTIES.each(function(property){this._set(property,null)},this);if(preCompute){this._preComputing=true;this._begin();Element.Layout.PROPERTIES.each(this._compute,this);this._end();this._preComputing=false}},_set:function(property,value){return Hash.prototype.set.call(this,property,value)},set:function(property,value){throw"Properties of Element.Layout are read-only."},get:function($super,property){var value=$super(property);return value===null?this._compute(property):value},_begin:function(){if(this._isPrepared())return;var element=this.element;if(isDisplayed(element)){this._setPrepared(true);return}var originalStyles={position:element.style.position||"",width:element.style.width||"",visibility:element.style.visibility||"",display:element.style.display||""};element.store("prototype_original_styles",originalStyles);var position=getRawStyle(element,"position"),width=element.offsetWidth;if(width===0||width===null){element.style.display="block";width=element.offsetWidth}var context=position==="fixed"?document.viewport:element.parentNode;var tempStyles={visibility:"hidden",display:"block"};if(position!=="fixed")tempStyles.position="absolute";element.setStyle(tempStyles);var positionedWidth=element.offsetWidth,newWidth;if(width&&positionedWidth===width){newWidth=getContentWidth(element,context)}else if(position==="absolute"||position==="fixed"){newWidth=getContentWidth(element,context)}else{var parent=element.parentNode,pLayout=$(parent).getLayout();newWidth=pLayout.get("width")-this.get("margin-left")-this.get("border-left")-this.get("padding-left")-this.get("padding-right")-this.get("border-right")-this.get("margin-right")}element.setStyle({width:newWidth+"px"});this._setPrepared(true)},_end:function(){var element=this.element;var originalStyles=element.retrieve("prototype_original_styles");element.store("prototype_original_styles",null);element.setStyle(originalStyles);this._setPrepared(false)},_compute:function(property){var COMPUTATIONS=Element.Layout.COMPUTATIONS;if(!(property in COMPUTATIONS)){throw"Property not found."}return this._set(property,COMPUTATIONS[property].call(this,this.element))},_isPrepared:function(){return this.element.retrieve("prototype_element_layout_prepared",false)},_setPrepared:function(bool){return this.element.store("prototype_element_layout_prepared",bool)},toObject:function(){var args=$A(arguments);var keys=args.length===0?Element.Layout.PROPERTIES:args.join(" ").split(" ");var obj={};keys.each(function(key){if(!Element.Layout.PROPERTIES.include(key))return;var value=this.get(key);if(value!=null)obj[key]=value},this);return obj},toHash:function(){var obj=this.toObject.apply(this,arguments);return new Hash(obj)},toCSS:function(){var args=$A(arguments);var keys=args.length===0?Element.Layout.PROPERTIES:args.join(" ").split(" ");var css={};keys.each(function(key){if(!Element.Layout.PROPERTIES.include(key))return;if(Element.Layout.COMPOSITE_PROPERTIES.include(key))return;var value=this.get(key);if(value!=null)css[cssNameFor(key)]=value+"px"},this);return css},inspect:function(){return"#"}});Object.extend(Element.Layout,{PROPERTIES:$w("height width top left right bottom border-left border-right border-top border-bottom padding-left padding-right padding-top padding-bottom margin-top margin-bottom margin-left margin-right padding-box-width padding-box-height border-box-width border-box-height margin-box-width margin-box-height"),COMPOSITE_PROPERTIES:$w("padding-box-width padding-box-height margin-box-width margin-box-height border-box-width border-box-height"),COMPUTATIONS:{height:function(element){if(!this._preComputing)this._begin();var bHeight=this.get("border-box-height");if(bHeight<=0){if(!this._preComputing)this._end();return 0}var bTop=this.get("border-top"),bBottom=this.get("border-bottom");var pTop=this.get("padding-top"),pBottom=this.get("padding-bottom");if(!this._preComputing)this._end();return bHeight-bTop-bBottom-pTop-pBottom},width:function(element){if(!this._preComputing)this._begin();var bWidth=this.get("border-box-width");if(bWidth<=0){if(!this._preComputing)this._end();return 0}var bLeft=this.get("border-left"),bRight=this.get("border-right");var pLeft=this.get("padding-left"),pRight=this.get("padding-right");if(!this._preComputing)this._end();return bWidth-bLeft-bRight-pLeft-pRight},"padding-box-height":function(element){var height=this.get("height"),pTop=this.get("padding-top"),pBottom=this.get("padding-bottom");return height+pTop+pBottom},"padding-box-width":function(element){var width=this.get("width"),pLeft=this.get("padding-left"),pRight=this.get("padding-right");return width+pLeft+pRight},"border-box-height":function(element){if(!this._preComputing)this._begin();var height=element.offsetHeight;if(!this._preComputing)this._end();return height},"border-box-width":function(element){if(!this._preComputing)this._begin();var width=element.offsetWidth;if(!this._preComputing)this._end();return width},"margin-box-height":function(element){var bHeight=this.get("border-box-height"),mTop=this.get("margin-top"),mBottom=this.get("margin-bottom");if(bHeight<=0)return 0;return bHeight+mTop+mBottom},"margin-box-width":function(element){var bWidth=this.get("border-box-width"),mLeft=this.get("margin-left"),mRight=this.get("margin-right");if(bWidth<=0)return 0;return bWidth+mLeft+mRight},top:function(element){var offset=element.positionedOffset();return offset.top},bottom:function(element){var offset=element.positionedOffset(),parent=element.getOffsetParent(),pHeight=parent.measure("height");var mHeight=this.get("border-box-height");return pHeight-mHeight-offset.top},left:function(element){var offset=element.positionedOffset();return offset.left},right:function(element){var offset=element.positionedOffset(),parent=element.getOffsetParent(),pWidth=parent.measure("width");var mWidth=this.get("border-box-width");return pWidth-mWidth-offset.left},"padding-top":function(element){return getPixelValue(element,"paddingTop")},"padding-bottom":function(element){return getPixelValue(element,"paddingBottom")},"padding-left":function(element){return getPixelValue(element,"paddingLeft")},"padding-right":function(element){return getPixelValue(element,"paddingRight")},"border-top":function(element){return getPixelValue(element,"borderTopWidth")},"border-bottom":function(element){return getPixelValue(element,"borderBottomWidth")},"border-left":function(element){return getPixelValue(element,"borderLeftWidth")},"border-right":function(element){return getPixelValue(element,"borderRightWidth")},"margin-top":function(element){return getPixelValue(element,"marginTop")},"margin-bottom":function(element){return getPixelValue(element,"marginBottom")},"margin-left":function(element){return getPixelValue(element,"marginLeft")},"margin-right":function(element){return getPixelValue(element,"marginRight")}}});if("getBoundingClientRect"in document.documentElement){Object.extend(Element.Layout.COMPUTATIONS,{right:function(element){var parent=hasLayout(element.getOffsetParent());var rect=element.getBoundingClientRect(),pRect=parent.getBoundingClientRect();return(pRect.right-rect.right).round()},bottom:function(element){var parent=hasLayout(element.getOffsetParent());var rect=element.getBoundingClientRect(),pRect=parent.getBoundingClientRect();return(pRect.bottom-rect.bottom).round()}})}Element.Offset=Class.create({initialize:function(left,top){this.left=left.round();this.top=top.round();this[0]=this.left;this[1]=this.top},relativeTo:function(offset){return new Element.Offset(this.left-offset.left,this.top-offset.top)},inspect:function(){return"#".interpolate(this)},toString:function(){return"[#{left}, #{top}]".interpolate(this)},toArray:function(){return[this.left,this.top]}});function getLayout(element,preCompute){return new Element.Layout(element,preCompute)}function measure(element,property){return $(element).getLayout().get(property)}function getHeight(element){return Element.getDimensions(element).height}function getWidth(element){return Element.getDimensions(element).width}function getDimensions(element){element=$(element);var display=Element.getStyle(element,"display");if(display&&display!=="none"){return{width:element.offsetWidth,height:element.offsetHeight}}var style=element.style;var originalStyles={visibility:style.visibility,position:style.position,display:style.display};var newStyles={visibility:"hidden",display:"block"};if(originalStyles.position!=="fixed")newStyles.position="absolute";Element.setStyle(element,newStyles);var dimensions={width:element.offsetWidth,height:element.offsetHeight};Element.setStyle(element,originalStyles);return dimensions}function getOffsetParent(element){element=$(element);if(isDocument(element)||isDetached(element)||isBody(element)||isHtml(element))return $(document.body);var isInline=Element.getStyle(element,"display")==="inline";if(!isInline&&element.offsetParent)return $(element.offsetParent);while((element=element.parentNode)&&element!==document.body){if(Element.getStyle(element,"position")!=="static"){return isHtml(element)?$(document.body):$(element)}}return $(document.body)}function cumulativeOffset(element){element=$(element);var valueT=0,valueL=0;if(element.parentNode){do{valueT+=element.offsetTop||0;valueL+=element.offsetLeft||0;element=element.offsetParent}while(element)}return new Element.Offset(valueL,valueT)}function positionedOffset(element){element=$(element);var layout=element.getLayout();var valueT=0,valueL=0;do{valueT+=element.offsetTop||0;valueL+=element.offsetLeft||0;element=element.offsetParent;if(element){if(isBody(element))break;var p=Element.getStyle(element,"position");if(p!=="static")break}}while(element);valueL-=layout.get("margin-top");valueT-=layout.get("margin-left");return new Element.Offset(valueL,valueT)}function cumulativeScrollOffset(element){var valueT=0,valueL=0;do{if(element===document.body){var bodyScrollNode=document.documentElement||document.body.parentNode||document.body;valueT+=!Object.isUndefined(window.pageYOffset)?window.pageYOffset:bodyScrollNode.scrollTop||0;valueL+=!Object.isUndefined(window.pageXOffset)?window.pageXOffset:bodyScrollNode.scrollLeft||0;break}else{valueT+=element.scrollTop||0;valueL+=element.scrollLeft||0;element=element.parentNode}}while(element);return new Element.Offset(valueL,valueT)}function viewportOffset(forElement){var valueT=0,valueL=0,docBody=document.body;forElement=$(forElement);var element=forElement;do{valueT+=element.offsetTop||0;valueL+=element.offsetLeft||0;if(element.offsetParent==docBody&&Element.getStyle(element,"position")=="absolute")break}while(element=element.offsetParent);element=forElement;do{if(element!=docBody){valueT-=element.scrollTop||0;valueL-=element.scrollLeft||0}}while(element=element.parentNode);return new Element.Offset(valueL,valueT)}function absolutize(element){element=$(element);if(Element.getStyle(element,"position")==="absolute"){return element}var offsetParent=getOffsetParent(element);var eOffset=element.viewportOffset(),pOffset=offsetParent.viewportOffset();var offset=eOffset.relativeTo(pOffset);var layout=element.getLayout();element.store("prototype_absolutize_original_styles",{position:element.getStyle("position"),left:element.getStyle("left"),top:element.getStyle("top"),width:element.getStyle("width"),height:element.getStyle("height")});element.setStyle({position:"absolute",top:offset.top+"px",left:offset.left+"px",width:layout.get("width")+"px",height:layout.get("height")+"px"});return element}function relativize(element){element=$(element);if(Element.getStyle(element,"position")==="relative"){return element}var originalStyles=element.retrieve("prototype_absolutize_original_styles");if(originalStyles)element.setStyle(originalStyles);return element}function scrollTo(element){element=$(element);var pos=Element.cumulativeOffset(element);window.scrollTo(pos.left,pos.top);return element}function makePositioned(element){element=$(element);var position=Element.getStyle(element,"position"),styles={};if(position==="static"||!position){styles.position="relative";if(Prototype.Browser.Opera){styles.top=0;styles.left=0}Element.setStyle(element,styles);Element.store(element,"prototype_made_positioned",true)}return element}function undoPositioned(element){element=$(element);var storage=Element.getStorage(element),madePositioned=storage.get("prototype_made_positioned");if(madePositioned){storage.unset("prototype_made_positioned");Element.setStyle(element,{position:"",top:"",bottom:"",left:"",right:""})}return element}function makeClipping(element){element=$(element);var storage=Element.getStorage(element),madeClipping=storage.get("prototype_made_clipping");if(Object.isUndefined(madeClipping)){var overflow=Element.getStyle(element,"overflow");storage.set("prototype_made_clipping",overflow);if(overflow!=="hidden")element.style.overflow="hidden"}return element}function undoClipping(element){element=$(element);var storage=Element.getStorage(element),overflow=storage.get("prototype_made_clipping");if(!Object.isUndefined(overflow)){storage.unset("prototype_made_clipping");element.style.overflow=overflow||""}return element}function clonePosition(element,source,options){options=Object.extend({setLeft:true,setTop:true,setWidth:true,setHeight:true,offsetTop:0,offsetLeft:0},options||{});source=$(source);element=$(element);var p,delta,layout,styles={};if(options.setLeft||options.setTop){p=Element.viewportOffset(source);delta=[0,0];if(Element.getStyle(element,"position")==="absolute"){var parent=Element.getOffsetParent(element);if(parent!==document.body)delta=Element.viewportOffset(parent)}}if(options.setWidth||options.setHeight){layout=Element.getLayout(source)}if(options.setLeft)styles.left=p[0]-delta[0]+options.offsetLeft+"px";if(options.setTop)styles.top=p[1]-delta[1]+options.offsetTop+"px";if(options.setWidth)styles.width=layout.get("border-box-width")+"px";if(options.setHeight)styles.height=layout.get("border-box-height")+"px";return Element.setStyle(element,styles)}if(Prototype.Browser.IE){getOffsetParent=getOffsetParent.wrap(function(proceed,element){element=$(element);if(isDocument(element)||isDetached(element)||isBody(element)||isHtml(element))return $(document.body);var position=element.getStyle("position");if(position!=="static")return proceed(element);element.setStyle({position:"relative"});var value=proceed(element);element.setStyle({position:position});return value});positionedOffset=positionedOffset.wrap(function(proceed,element){element=$(element);if(!element.parentNode)return new Element.Offset(0,0);var position=element.getStyle("position"); +Math.crossProduct = function(x, y){ + [ + x[1]*y[2]-x[2]*y[1], + x[2]*y[0]-x[0]*y[2], + x[0]*y[1]-x[1]*y[0] + ] +} -if(position!=="static")return proceed(element);var offsetParent=element.getOffsetParent();if(offsetParent&&offsetParent.getStyle("position")==="fixed")hasLayout(offsetParent);element.setStyle({position:"relative"});var value=proceed(element);element.setStyle({position:position});return value})}else if(Prototype.Browser.Webkit){cumulativeOffset=function(element){element=$(element);var valueT=0,valueL=0;do{valueT+=element.offsetTop||0;valueL+=element.offsetLeft||0;if(element.offsetParent==document.body){if(Element.getStyle(element,"position")=="absolute")break}element=element.offsetParent}while(element);return new Element.Offset(valueL,valueT)}}Element.addMethods({getLayout:getLayout,measure:measure,getWidth:getWidth,getHeight:getHeight,getDimensions:getDimensions,getOffsetParent:getOffsetParent,cumulativeOffset:cumulativeOffset,positionedOffset:positionedOffset,cumulativeScrollOffset:cumulativeScrollOffset,viewportOffset:viewportOffset,absolutize:absolutize,relativize:relativize,scrollTo:scrollTo,makePositioned:makePositioned,undoPositioned:undoPositioned,makeClipping:makeClipping,undoClipping:undoClipping,clonePosition:clonePosition});function isBody(element){return element.nodeName.toUpperCase()==="BODY"}function isHtml(element){return element.nodeName.toUpperCase()==="HTML"}function isDocument(element){return element.nodeType===Node.DOCUMENT_NODE}function isDetached(element){return element!==document.body&&!Element.descendantOf(element,document.body)}if("getBoundingClientRect"in document.documentElement){Element.addMethods({viewportOffset:function(element){element=$(element);if(isDetached(element))return new Element.Offset(0,0);var rect=element.getBoundingClientRect(),docEl=document.documentElement;return new Element.Offset(rect.left-docEl.clientLeft,rect.top-docEl.clientTop)}})}})();(function(){var IS_OLD_OPERA=Prototype.Browser.Opera&&window.parseFloat(window.opera.version())<9.5;var ROOT=null;function getRootElement(){if(ROOT)return ROOT;ROOT=IS_OLD_OPERA?document.body:document.documentElement;return ROOT}function getDimensions(){return{width:this.getWidth(),height:this.getHeight()}}function getWidth(){return getRootElement().clientWidth}function getHeight(){return getRootElement().clientHeight}function getScrollOffsets(){var x=window.pageXOffset||document.documentElement.scrollLeft||document.body.scrollLeft;var y=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop;return new Element.Offset(x,y)}document.viewport={getDimensions:getDimensions,getWidth:getWidth,getHeight:getHeight,getScrollOffsets:getScrollOffsets}})();window.$$=function(){var expression=$A(arguments).join(", ");return Prototype.Selector.select(expression,document)};Prototype.Selector=function(){function select(){throw new Error('Method "Prototype.Selector.select" must be defined.')}function match(){throw new Error('Method "Prototype.Selector.match" must be defined.')}function find(elements,expression,index){index=index||0;var match=Prototype.Selector.match,length=elements.length,matchIndex=0,i;for(i=0;i+~]|"+whitespace+")"+whitespace+"*"),rattributeQuotes=new RegExp("="+whitespace+"*([^\\]'\"]*?)"+whitespace+"*\\]","g"),rpseudo=new RegExp(pseudos),ridentifier=new RegExp("^"+identifier+"$"),matchExpr={ID:new RegExp("^#("+characterEncoding+")"),CLASS:new RegExp("^\\.("+characterEncoding+")"),TAG:new RegExp("^("+characterEncoding.replace("w","w*")+")"),ATTR:new RegExp("^"+attributes),PSEUDO:new RegExp("^"+pseudos),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+whitespace+"*(even|odd|(([+-]|)(\\d*)n|)"+whitespace+"*(?:([+-]|)"+whitespace+"*(\\d+)|))"+whitespace+"*\\)|)","i"),bool:new RegExp("^(?:"+booleans+")$","i"),needsContext:new RegExp("^"+whitespace+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+whitespace+"*((?:-\\d)?\\d*)"+whitespace+"*\\)|)(?=[^-]|$)","i")},rinputs=/^(?:input|select|textarea|button)$/i,rheader=/^h\d$/i,rnative=/^[^{]+\{\s*\[native \w/,rquickExpr=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,rsibling=/[+~]/,rescape=/'|\\/g,runescape=new RegExp("\\\\([\\da-f]{1,6}"+whitespace+"?|("+whitespace+")|.)","ig"),funescape=function(_,escaped,escapedWhitespace){var high="0x"+escaped-65536;return high!==high||escapedWhitespace?escaped:high<0?String.fromCharCode(high+65536):String.fromCharCode(high>>10|55296,high&1023|56320)};try{push.apply(arr=slice.call(preferredDoc.childNodes),preferredDoc.childNodes);arr[preferredDoc.childNodes.length].nodeType}catch(e){push={apply:arr.length?function(target,els){push_native.apply(target,slice.call(els))}:function(target,els){var j=target.length,i=0;while(target[j++]=els[i++]){}target.length=j-1}}}function Sizzle(selector,context,results,seed){var match,elem,m,nodeType,i,groups,old,nid,newContext,newSelector;if((context?context.ownerDocument||context:preferredDoc)!==document){setDocument(context)}context=context||document;results=results||[];if(!selector||typeof selector!=="string"){return results}if((nodeType=context.nodeType)!==1&&nodeType!==9){return[]}if(documentIsHTML&&!seed){if(match=rquickExpr.exec(selector)){if(m=match[1]){if(nodeType===9){elem=context.getElementById(m);if(elem&&elem.parentNode){if(elem.id===m){results.push(elem);return results}}else{return results}}else{if(context.ownerDocument&&(elem=context.ownerDocument.getElementById(m))&&contains(context,elem)&&elem.id===m){results.push(elem);return results}}}else if(match[2]){push.apply(results,context.getElementsByTagName(selector));return results}else if((m=match[3])&&support.getElementsByClassName&&context.getElementsByClassName){push.apply(results,context.getElementsByClassName(m));return results}}if(support.qsa&&(!rbuggyQSA||!rbuggyQSA.test(selector))){nid=old=expando;newContext=context;newSelector=nodeType===9&&selector;if(nodeType===1&&context.nodeName.toLowerCase()!=="object"){groups=tokenize(selector);if(old=context.getAttribute("id")){nid=old.replace(rescape,"\\$&")}else{context.setAttribute("id",nid)}nid="[id='"+nid+"'] ";i=groups.length;while(i--){groups[i]=nid+toSelector(groups[i])}newContext=rsibling.test(selector)&&testContext(context.parentNode)||context;newSelector=groups.join(",")}if(newSelector){try{push.apply(results,newContext.querySelectorAll(newSelector));return results}catch(qsaError){}finally{if(!old){context.removeAttribute("id")}}}}}return select(selector.replace(rtrim,"$1"),context,results,seed)}function createCache(){var keys=[];function cache(key,value){if(keys.push(key+" ")>Expr.cacheLength){delete cache[keys.shift()]}return cache[key+" "]=value}return cache}function markFunction(fn){fn[expando]=true;return fn}function assert(fn){var div=document.createElement("div");try{return!!fn(div)}catch(e){return false}finally{if(div.parentNode){div.parentNode.removeChild(div)}div=null}}function addHandle(attrs,handler){var arr=attrs.split("|"),i=attrs.length;while(i--){Expr.attrHandle[arr[i]]=handler}}function siblingCheck(a,b){var cur=b&&a,diff=cur&&a.nodeType===1&&b.nodeType===1&&(~b.sourceIndex||MAX_NEGATIVE)-(~a.sourceIndex||MAX_NEGATIVE);if(diff){return diff}if(cur){while(cur=cur.nextSibling){if(cur===b){return-1}}}return a?1:-1}function createInputPseudo(type){return function(elem){var name=elem.nodeName.toLowerCase();return name==="input"&&elem.type===type}}function createButtonPseudo(type){return function(elem){var name=elem.nodeName.toLowerCase();return(name==="input"||name==="button")&&elem.type===type}}function createPositionalPseudo(fn){return markFunction(function(argument){argument=+argument;return markFunction(function(seed,matches){var j,matchIndexes=fn([],seed.length,argument),i=matchIndexes.length;while(i--){if(seed[j=matchIndexes[i]]){seed[j]=!(matches[j]=seed[j])}}})})}function testContext(context){return context&&typeof context.getElementsByTagName!==strundefined&&context}support=Sizzle.support={};isXML=Sizzle.isXML=function(elem){var documentElement=elem&&(elem.ownerDocument||elem).documentElement;return documentElement?documentElement.nodeName!=="HTML":false};setDocument=Sizzle.setDocument=function(node){var hasCompare,doc=node?node.ownerDocument||node:preferredDoc,parent=doc.defaultView;if(doc===document||doc.nodeType!==9||!doc.documentElement){return document}document=doc;docElem=doc.documentElement;documentIsHTML=!isXML(doc);if(parent&&parent!==parent.top){if(parent.addEventListener){parent.addEventListener("unload",function(){setDocument()},false)}else if(parent.attachEvent){parent.attachEvent("onunload",function(){setDocument()})}}support.attributes=assert(function(div){div.className="i";return!div.getAttribute("className")});support.getElementsByTagName=assert(function(div){div.appendChild(doc.createComment(""));return!div.getElementsByTagName("*").length});support.getElementsByClassName=rnative.test(doc.getElementsByClassName)&&assert(function(div){div.innerHTML="
    ";div.firstChild.className="i";return div.getElementsByClassName("i").length===2});support.getById=assert(function(div){docElem.appendChild(div).id=expando;return!doc.getElementsByName||!doc.getElementsByName(expando).length});if(support.getById){Expr.find["ID"]=function(id,context){if(typeof context.getElementById!==strundefined&&documentIsHTML){var m=context.getElementById(id);return m&&m.parentNode?[m]:[]}};Expr.filter["ID"]=function(id){var attrId=id.replace(runescape,funescape);return function(elem){return elem.getAttribute("id")===attrId}}}else{delete Expr.find["ID"];Expr.filter["ID"]=function(id){var attrId=id.replace(runescape,funescape);return function(elem){var node=typeof elem.getAttributeNode!==strundefined&&elem.getAttributeNode("id");return node&&node.value===attrId}}}Expr.find["TAG"]=support.getElementsByTagName?function(tag,context){if(typeof context.getElementsByTagName!==strundefined){return context.getElementsByTagName(tag)}}:function(tag,context){var elem,tmp=[],i=0,results=context.getElementsByTagName(tag);if(tag==="*"){while(elem=results[i++]){if(elem.nodeType===1){tmp.push(elem)}}return tmp}return results};Expr.find["CLASS"]=support.getElementsByClassName&&function(className,context){if(typeof context.getElementsByClassName!==strundefined&&documentIsHTML){return context.getElementsByClassName(className)}};rbuggyMatches=[];rbuggyQSA=[];if(support.qsa=rnative.test(doc.querySelectorAll)){assert(function(div){div.innerHTML="";if(div.querySelectorAll("[t^='']").length){rbuggyQSA.push("[*^$]="+whitespace+"*(?:''|\"\")")}if(!div.querySelectorAll("[selected]").length){rbuggyQSA.push("\\["+whitespace+"*(?:value|"+booleans+")")}if(!div.querySelectorAll(":checked").length){rbuggyQSA.push(":checked")}});assert(function(div){var input=doc.createElement("input");input.setAttribute("type","hidden");div.appendChild(input).setAttribute("name","D");if(div.querySelectorAll("[name=d]").length){rbuggyQSA.push("name"+whitespace+"*[*^$|!~]?=")}if(!div.querySelectorAll(":enabled").length){rbuggyQSA.push(":enabled",":disabled")}div.querySelectorAll("*,:x");rbuggyQSA.push(",.*:")})}if(support.matchesSelector=rnative.test(matches=docElem.webkitMatchesSelector||docElem.mozMatchesSelector||docElem.oMatchesSelector||docElem.msMatchesSelector)){assert(function(div){support.disconnectedMatch=matches.call(div,"div");matches.call(div,"[s!='']:x");rbuggyMatches.push("!=",pseudos)})}rbuggyQSA=rbuggyQSA.length&&new RegExp(rbuggyQSA.join("|"));rbuggyMatches=rbuggyMatches.length&&new RegExp(rbuggyMatches.join("|"));hasCompare=rnative.test(docElem.compareDocumentPosition);contains=hasCompare||rnative.test(docElem.contains)?function(a,b){var adown=a.nodeType===9?a.documentElement:a,bup=b&&b.parentNode;return a===bup||!!(bup&&bup.nodeType===1&&(adown.contains?adown.contains(bup):a.compareDocumentPosition&&a.compareDocumentPosition(bup)&16))}:function(a,b){if(b){while(b=b.parentNode){if(b===a){return true}}}return false};sortOrder=hasCompare?function(a,b){if(a===b){hasDuplicate=true;return 0}var compare=!a.compareDocumentPosition-!b.compareDocumentPosition;if(compare){return compare}compare=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1;if(compare&1||!support.sortDetached&&b.compareDocumentPosition(a)===compare){if(a===doc||a.ownerDocument===preferredDoc&&contains(preferredDoc,a)){return-1}if(b===doc||b.ownerDocument===preferredDoc&&contains(preferredDoc,b)){return 1}return sortInput?indexOf.call(sortInput,a)-indexOf.call(sortInput,b):0}return compare&4?-1:1}:function(a,b){if(a===b){hasDuplicate=true;return 0}var cur,i=0,aup=a.parentNode,bup=b.parentNode,ap=[a],bp=[b];if(!aup||!bup){return a===doc?-1:b===doc?1:aup?-1:bup?1:sortInput?indexOf.call(sortInput,a)-indexOf.call(sortInput,b):0}else if(aup===bup){return siblingCheck(a,b)}cur=a;while(cur=cur.parentNode){ap.unshift(cur)}cur=b;while(cur=cur.parentNode){bp.unshift(cur)}while(ap[i]===bp[i]){i++}return i?siblingCheck(ap[i],bp[i]):ap[i]===preferredDoc?-1:bp[i]===preferredDoc?1:0};return doc};Sizzle.matches=function(expr,elements){return Sizzle(expr,null,null,elements)};Sizzle.matchesSelector=function(elem,expr){if((elem.ownerDocument||elem)!==document){setDocument(elem)}expr=expr.replace(rattributeQuotes,"='$1']");if(support.matchesSelector&&documentIsHTML&&(!rbuggyMatches||!rbuggyMatches.test(expr))&&(!rbuggyQSA||!rbuggyQSA.test(expr))){try{var ret=matches.call(elem,expr);if(ret||support.disconnectedMatch||elem.document&&elem.document.nodeType!==11){return ret}}catch(e){}}return Sizzle(expr,document,null,[elem]).length>0};Sizzle.contains=function(context,elem){if((context.ownerDocument||context)!==document){setDocument(context)}return contains(context,elem)};Sizzle.attr=function(elem,name){if((elem.ownerDocument||elem)!==document){setDocument(elem)}var fn=Expr.attrHandle[name.toLowerCase()],val=fn&&hasOwn.call(Expr.attrHandle,name.toLowerCase())?fn(elem,name,!documentIsHTML):undefined;return val!==undefined?val:support.attributes||!documentIsHTML?elem.getAttribute(name):(val=elem.getAttributeNode(name))&&val.specified?val.value:null};Sizzle.error=function(msg){throw new Error("Syntax error, unrecognized expression: "+msg)};Sizzle.uniqueSort=function(results){var elem,duplicates=[],j=0,i=0;hasDuplicate=!support.detectDuplicates;sortInput=!support.sortStable&&results.slice(0);results.sort(sortOrder);if(hasDuplicate){while(elem=results[i++]){if(elem===results[i]){j=duplicates.push(i)}}while(j--){results.splice(duplicates[j],1)}}sortInput=null;return results};getText=Sizzle.getText=function(elem){var node,ret="",i=0,nodeType=elem.nodeType;if(!nodeType){while(node=elem[i++]){ret+=getText(node)}}else if(nodeType===1||nodeType===9||nodeType===11){if(typeof elem.textContent==="string"){return elem.textContent}else{for(elem=elem.firstChild;elem;elem=elem.nextSibling){ret+=getText(elem)}}}else if(nodeType===3||nodeType===4){return elem.nodeValue}return ret};Expr=Sizzle.selectors={cacheLength:50,createPseudo:markFunction,match:matchExpr,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:true}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:true},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(match){match[1]=match[1].replace(runescape,funescape);match[3]=(match[4]||match[5]||"").replace(runescape,funescape);if(match[2]==="~="){match[3]=" "+match[3]+" "}return match.slice(0,4)},CHILD:function(match){match[1]=match[1].toLowerCase();if(match[1].slice(0,3)==="nth"){if(!match[3]){Sizzle.error(match[0])}match[4]=+(match[4]?match[5]+(match[6]||1):2*(match[3]==="even"||match[3]==="odd"));match[5]=+(match[7]+match[8]||match[3]==="odd")}else if(match[3]){Sizzle.error(match[0])}return match},PSEUDO:function(match){var excess,unquoted=!match[5]&&match[2];if(matchExpr["CHILD"].test(match[0])){return null}if(match[3]&&match[4]!==undefined){match[2]=match[4]}else if(unquoted&&rpseudo.test(unquoted)&&(excess=tokenize(unquoted,true))&&(excess=unquoted.indexOf(")",unquoted.length-excess)-unquoted.length)){match[0]=match[0].slice(0,excess);match[2]=unquoted.slice(0,excess)}return match.slice(0,3)}},filter:{TAG:function(nodeNameSelector){var nodeName=nodeNameSelector.replace(runescape,funescape).toLowerCase();return nodeNameSelector==="*"?function(){return true}:function(elem){return elem.nodeName&&elem.nodeName.toLowerCase()===nodeName}},CLASS:function(className){var pattern=classCache[className+" "];return pattern||(pattern=new RegExp("(^|"+whitespace+")"+className+"("+whitespace+"|$)"))&&classCache(className,function(elem){return pattern.test(typeof elem.className==="string"&&elem.className||typeof elem.getAttribute!==strundefined&&elem.getAttribute("class")||"")})},ATTR:function(name,operator,check){return function(elem){var result=Sizzle.attr(elem,name);if(result==null){return operator==="!="}if(!operator){return true}result+="";return operator==="="?result===check:operator==="!="?result!==check:operator==="^="?check&&result.indexOf(check)===0:operator==="*="?check&&result.indexOf(check)>-1:operator==="$="?check&&result.slice(-check.length)===check:operator==="~="?(" "+result+" ").indexOf(check)>-1:operator==="|="?result===check||result.slice(0,check.length+1)===check+"-":false}},CHILD:function(type,what,argument,first,last){var simple=type.slice(0,3)!=="nth",forward=type.slice(-4)!=="last",ofType=what==="of-type";return first===1&&last===0?function(elem){return!!elem.parentNode}:function(elem,context,xml){var cache,outerCache,node,diff,nodeIndex,start,dir=simple!==forward?"nextSibling":"previousSibling",parent=elem.parentNode,name=ofType&&elem.nodeName.toLowerCase(),useCache=!xml&&!ofType;if(parent){if(simple){while(dir){node=elem;while(node=node[dir]){if(ofType?node.nodeName.toLowerCase()===name:node.nodeType===1){return false}}start=dir=type==="only"&&!start&&"nextSibling"}return true}start=[forward?parent.firstChild:parent.lastChild];if(forward&&useCache){outerCache=parent[expando]||(parent[expando]={});cache=outerCache[type]||[];nodeIndex=cache[0]===dirruns&&cache[1];diff=cache[0]===dirruns&&cache[2];node=nodeIndex&&parent.childNodes[nodeIndex];while(node=++nodeIndex&&node&&node[dir]||(diff=nodeIndex=0)||start.pop()){if(node.nodeType===1&&++diff&&node===elem){outerCache[type]=[dirruns,nodeIndex,diff];break}}}else if(useCache&&(cache=(elem[expando]||(elem[expando]={}))[type])&&cache[0]===dirruns){diff=cache[1]}else{while(node=++nodeIndex&&node&&node[dir]||(diff=nodeIndex=0)||start.pop()){if((ofType?node.nodeName.toLowerCase()===name:node.nodeType===1)&&++diff){if(useCache){(node[expando]||(node[expando]={}))[type]=[dirruns,diff]}if(node===elem){break}}}}diff-=last;return diff===first||diff%first===0&&diff/first>=0}}},PSEUDO:function(pseudo,argument){var args,fn=Expr.pseudos[pseudo]||Expr.setFilters[pseudo.toLowerCase()]||Sizzle.error("unsupported pseudo: "+pseudo);if(fn[expando]){return fn(argument)}if(fn.length>1){args=[pseudo,pseudo,"",argument];return Expr.setFilters.hasOwnProperty(pseudo.toLowerCase())?markFunction(function(seed,matches){var idx,matched=fn(seed,argument),i=matched.length;while(i--){idx=indexOf.call(seed,matched[i]);seed[idx]=!(matches[idx]=matched[i])}}):function(elem){return fn(elem,0,args)}}return fn}},pseudos:{not:markFunction(function(selector){var input=[],results=[],matcher=compile(selector.replace(rtrim,"$1"));return matcher[expando]?markFunction(function(seed,matches,context,xml){var elem,unmatched=matcher(seed,null,xml,[]),i=seed.length;while(i--){if(elem=unmatched[i]){seed[i]=!(matches[i]=elem)}}}):function(elem,context,xml){input[0]=elem;matcher(input,null,xml,results);return!results.pop()}}),has:markFunction(function(selector){return function(elem){return Sizzle(selector,elem).length>0}}),contains:markFunction(function(text){return function(elem){return(elem.textContent||elem.innerText||getText(elem)).indexOf(text)>-1}}),lang:markFunction(function(lang){if(!ridentifier.test(lang||"")){Sizzle.error("unsupported lang: "+lang)}lang=lang.replace(runescape,funescape).toLowerCase();return function(elem){var elemLang;do{if(elemLang=documentIsHTML?elem.lang:elem.getAttribute("xml:lang")||elem.getAttribute("lang")){elemLang=elemLang.toLowerCase();return elemLang===lang||elemLang.indexOf(lang+"-")===0}}while((elem=elem.parentNode)&&elem.nodeType===1);return false}}),target:function(elem){var hash=window.location&&window.location.hash;return hash&&hash.slice(1)===elem.id},root:function(elem){return elem===docElem},focus:function(elem){return elem===document.activeElement&&(!document.hasFocus||document.hasFocus())&&!!(elem.type||elem.href||~elem.tabIndex)},enabled:function(elem){return elem.disabled===false},disabled:function(elem){return elem.disabled===true},checked:function(elem){var nodeName=elem.nodeName.toLowerCase();return nodeName==="input"&&!!elem.checked||nodeName==="option"&&!!elem.selected},selected:function(elem){if(elem.parentNode){elem.parentNode.selectedIndex}return elem.selected===true},empty:function(elem){for(elem=elem.firstChild;elem;elem=elem.nextSibling){if(elem.nodeType<6){return false}}return true},parent:function(elem){return!Expr.pseudos["empty"](elem)},header:function(elem){return rheader.test(elem.nodeName)},input:function(elem){return rinputs.test(elem.nodeName)},button:function(elem){var name=elem.nodeName.toLowerCase();return name==="input"&&elem.type==="button"||name==="button"},text:function(elem){var attr;return elem.nodeName.toLowerCase()==="input"&&elem.type==="text"&&((attr=elem.getAttribute("type"))==null||attr.toLowerCase()==="text")},first:createPositionalPseudo(function(){return[0]}),last:createPositionalPseudo(function(matchIndexes,length){return[length-1]}),eq:createPositionalPseudo(function(matchIndexes,length,argument){return[argument<0?argument+length:argument]}),even:createPositionalPseudo(function(matchIndexes,length){var i=0;for(;i=0;){matchIndexes.push(i)}return matchIndexes}),gt:createPositionalPseudo(function(matchIndexes,length,argument){var i=argument<0?argument+length:argument;for(;++i1?function(elem,context,xml){var i=matchers.length;while(i--){if(!matchers[i](elem,context,xml)){return false}}return true}:matchers[0]}function multipleContexts(selector,contexts,results){var i=0,len=contexts.length;for(;i-1){seed[temp]=!(results[temp]=elem)}}}}else{matcherOut=condense(matcherOut===results?matcherOut.splice(preexisting,matcherOut.length):matcherOut);if(postFinder){postFinder(null,results,matcherOut,xml)}else{push.apply(results,matcherOut)}}})}function matcherFromTokens(tokens){var checkContext,matcher,j,len=tokens.length,leadingRelative=Expr.relative[tokens[0].type],implicitRelative=leadingRelative||Expr.relative[" "],i=leadingRelative?1:0,matchContext=addCombinator(function(elem){return elem===checkContext},implicitRelative,true),matchAnyContext=addCombinator(function(elem){return indexOf.call(checkContext,elem)>-1},implicitRelative,true),matchers=[function(elem,context,xml){return!leadingRelative&&(xml||context!==outermostContext)||((checkContext=context).nodeType?matchContext(elem,context,xml):matchAnyContext(elem,context,xml))}];for(;i1&&elementMatcher(matchers),i>1&&toSelector(tokens.slice(0,i-1).concat({value:tokens[i-2].type===" "?"*":""})).replace(rtrim,"$1"),matcher,i0,byElement=elementMatchers.length>0,superMatcher=function(seed,context,xml,results,outermost){var elem,j,matcher,matchedCount=0,i="0",unmatched=seed&&[],setMatched=[],contextBackup=outermostContext,elems=seed||byElement&&Expr.find["TAG"]("*",outermost),dirrunsUnique=dirruns+=contextBackup==null?1:Math.random()||.1,len=elems.length;if(outermost){outermostContext=context!==document&&context}for(;i!==len&&(elem=elems[i])!=null;i++){if(byElement&&elem){j=0;while(matcher=elementMatchers[j++]){if(matcher(elem,context,xml)){results.push(elem);break}}if(outermost){dirruns=dirrunsUnique}}if(bySet){if(elem=!matcher&&elem){matchedCount--}if(seed){unmatched.push(elem)}}}matchedCount+=i;if(bySet&&i!==matchedCount){j=0;while(matcher=setMatchers[j++]){matcher(unmatched,setMatched,context,xml)}if(seed){if(matchedCount>0){while(i--){if(!(unmatched[i]||setMatched[i])){setMatched[i]=pop.call(results)}}}setMatched=condense(setMatched)}push.apply(results,setMatched);if(outermost&&!seed&&setMatched.length>0&&matchedCount+setMatchers.length>1){Sizzle.uniqueSort(results)}}if(outermost){dirruns=dirrunsUnique;outermostContext=contextBackup}return unmatched};return bySet?markFunction(superMatcher):superMatcher}compile=Sizzle.compile=function(selector,match){var i,setMatchers=[],elementMatchers=[],cached=compilerCache[selector+" "];if(!cached){if(!match){match=tokenize(selector)}i=match.length;while(i--){cached=matcherFromTokens(match[i]);if(cached[expando]){setMatchers.push(cached)}else{elementMatchers.push(cached)}}cached=compilerCache(selector,matcherFromGroupMatchers(elementMatchers,setMatchers));cached.selector=selector}return cached};select=Sizzle.select=function(selector,context,results,seed){var i,tokens,token,type,find,compiled=typeof selector==="function"&&selector,match=!seed&&tokenize(selector=compiled.selector||selector);results=results||[];if(match.length===1){tokens=match[0]=match[0].slice(0);if(tokens.length>2&&(token=tokens[0]).type==="ID"&&support.getById&&context.nodeType===9&&documentIsHTML&&Expr.relative[tokens[1].type]){context=(Expr.find["ID"](token.matches[0].replace(runescape,funescape),context)||[])[0];if(!context){return results}else if(compiled){context=context.parentNode}selector=selector.slice(tokens.shift().value.length)}i=matchExpr["needsContext"].test(selector)?0:tokens.length;while(i--){token=tokens[i];if(Expr.relative[type=token.type]){break}if(find=Expr.find[type]){if(seed=find(token.matches[0].replace(runescape,funescape),rsibling.test(tokens[0].type)&&testContext(context.parentNode)||context)){ -tokens.splice(i,1);selector=seed.length&&toSelector(tokens);if(!selector){push.apply(results,seed);return results}break}}}}(compiled||compile(selector,match))(seed,context,!documentIsHTML,results,rsibling.test(selector)&&testContext(context.parentNode)||context);return results};support.sortStable=expando.split("").sort(sortOrder).join("")===expando;support.detectDuplicates=!!hasDuplicate;setDocument();support.sortDetached=assert(function(div1){return div1.compareDocumentPosition(document.createElement("div"))&1});if(!assert(function(div){div.innerHTML="";return div.firstChild.getAttribute("href")==="#"})){addHandle("type|href|height|width",function(elem,name,isXML){if(!isXML){return elem.getAttribute(name,name.toLowerCase()==="type"?1:2)}})}if(!support.attributes||!assert(function(div){div.innerHTML="";div.firstChild.setAttribute("value","");return div.firstChild.getAttribute("value")===""})){addHandle("value",function(elem,name,isXML){if(!isXML&&elem.nodeName.toLowerCase()==="input"){return elem.defaultValue}})}if(!assert(function(div){return div.getAttribute("disabled")==null})){addHandle(booleans,function(elem,name,isXML){var val;if(!isXML){return elem[name]===true?name.toLowerCase():(val=elem.getAttributeNode(name))&&val.specified?val.value:null}})}if(typeof define==="function"&&define.amd){define(function(){return Sizzle})}else if(typeof module!=="undefined"&&module.exports){module.exports=Sizzle}else{window.Sizzle=Sizzle}})(window);(function(engine){var extendElements=Prototype.Selector.extendElements;function select(selector,scope){return extendElements(engine(selector,scope||document))}function match(element,selector){return engine.matches(selector,[element]).length==1}Prototype.Selector.engine=engine;Prototype.Selector.select=select;Prototype.Selector.match=match})(Sizzle);window.Sizzle=Prototype._original_property;delete Prototype._original_property;var Form={reset:function(form){form=$(form);form.reset();return form},serializeElements:function(elements,options){if(typeof options!="object")options={hash:!!options};else if(Object.isUndefined(options.hash))options.hash=true;var key,value,submitted=false,submit=options.submit,accumulator,initial;if(options.hash){initial={};accumulator=function(result,key,value){if(key in result){if(!Object.isArray(result[key]))result[key]=[result[key]];result[key]=result[key].concat(value)}else result[key]=value;return result}}else{initial="";accumulator=function(result,key,values){if(!Object.isArray(values)){values=[values]}if(!values.length){return result}var encodedKey=encodeURIComponent(key).gsub(/%20/,"+");return result+(result?"&":"")+values.map(function(value){value=value.gsub(/(\r)?\n/,"\r\n");value=encodeURIComponent(value);value=value.gsub(/%20/,"+");return encodedKey+"="+value}).join("&")}}return elements.inject(initial,function(result,element){if(!element.disabled&&element.name){key=element.name;value=$(element).getValue();if(value!=null&&element.type!="file"&&(element.type!="submit"||!submitted&&submit!==false&&(!submit||key==submit)&&(submitted=true))){result=accumulator(result,key,value)}}return result})}};Form.Methods={serialize:function(form,options){return Form.serializeElements(Form.getElements(form),options)},getElements:function(form){var elements=$(form).getElementsByTagName("*");var element,results=[],serializers=Form.Element.Serializers;for(var i=0;element=elements[i];i++){if(serializers[element.tagName.toLowerCase()])results.push(Element.extend(element))}return results},getInputs:function(form,typeName,name){form=$(form);var inputs=form.getElementsByTagName("input");if(!typeName&&!name)return $A(inputs).map(Element.extend);for(var i=0,matchingInputs=[],length=inputs.length;i=0}).sortBy(function(element){return element.tabIndex}).first();return firstByIndex?firstByIndex:elements.find(function(element){return/^(?:input|select|textarea)$/i.test(element.tagName)})},focusFirstElement:function(form){form=$(form);var element=form.findFirstElement();if(element)element.activate();return form},request:function(form,options){form=$(form),options=Object.clone(options||{});var params=options.parameters,action=form.readAttribute("action")||"";if(action.blank())action=window.location.href;options.parameters=form.serialize(true);if(params){if(Object.isString(params))params=params.toQueryParams();Object.extend(options.parameters,params)}if(form.hasAttribute("method")&&!options.method)options.method=form.method;return new Ajax.Request(action,options)}};Form.Element={focus:function(element){$(element).focus();return element},select:function(element){$(element).select();return element}};Form.Element.Methods={serialize:function(element){element=$(element);if(!element.disabled&&element.name){var value=element.getValue();if(value!=undefined){var pair={};pair[element.name]=value;return Object.toQueryString(pair)}}return""},getValue:function(element){element=$(element);var method=element.tagName.toLowerCase();return Form.Element.Serializers[method](element)},setValue:function(element,value){element=$(element);var method=element.tagName.toLowerCase();Form.Element.Serializers[method](element,value);return element},clear:function(element){$(element).value="";return element},present:function(element){return $(element).value!=""},activate:function(element){element=$(element);try{element.focus();if(element.select&&(element.tagName.toLowerCase()!="input"||!/^(?:button|reset|submit)$/i.test(element.type)))element.select()}catch(e){}return element},disable:function(element){element=$(element);element.disabled=true;return element},enable:function(element){element=$(element);element.disabled=false;return element}};var Field=Form.Element;var $F=Form.Element.Methods.getValue;Form.Element.Serializers=function(){function input(element,value){switch(element.type.toLowerCase()){case"checkbox":case"radio":return inputSelector(element,value);default:return valueSelector(element,value)}}function inputSelector(element,value){if(Object.isUndefined(value))return element.checked?element.value:null;else element.checked=!!value}function valueSelector(element,value){if(Object.isUndefined(value))return element.value;else element.value=value}function select(element,value){if(Object.isUndefined(value))return(element.type==="select-one"?selectOne:selectMany)(element);var opt,currentValue,single=!Object.isArray(value);for(var i=0,length=element.length;i=0?optionValue(element.options[index]):null}function selectMany(element){var values,length=element.length;if(!length)return null;for(var i=0,values=[];i=this.offset[1]&&y=this.offset[0]&&x=this.offset[1]&&this.ycomp=this.offset[0]&&this.xcomp0})._each(iterator,context)},set:function(className){this.element.className=className},add:function(classNameToAdd){if(this.include(classNameToAdd))return;this.set($A(this).concat(classNameToAdd).join(" "))},remove:function(classNameToRemove){if(!this.include(classNameToRemove))return;this.set($A(this).without(classNameToRemove).join(" "))},toString:function(){return $A(this).join(" ")}};Object.extend(Element.ClassNames.prototype,Enumerable);(function(){window.Selector=Class.create({initialize:function(expression){this.expression=expression.strip()},findElements:function(rootElement){return Prototype.Selector.select(this.expression,rootElement)},match:function(element){return Prototype.Selector.match(element,this.expression)},toString:function(){return this.expression},inspect:function(){return"#"}});Object.extend(Selector,{matchElements:function(elements,expression){var match=Prototype.Selector.match,results=[];for(var i=0,length=elements.length;i=y;y++)if(l=Math.sin(h),m=Math.tan(h),r=m*Math.sqrt(1-t*l*l),c=Math.sin(2*h),u=i*h-s*c+e*Math.sin(4*h)-o*Math.sin(6*h),d=i-2*s*Math.cos(2*h)+4*e*Math.cos(4*h)-6*o*Math.cos(6*h),p=2*u+r*(u*u+a)-2*n*(r*u+1),_=t*c*(u*u+a-2*n*u)/(2*r),f=2*(n-u)*(r*d-2/c)-2*d,P=p/(_+f),h+=P,1e-10>=Math.abs(P))return h;return Proj4js.reportError("phi4z: No convergence"),null}function e4fn(t){var i,s;return i=1+t,s=1-t,Math.sqrt(Math.pow(i,i)*Math.pow(s,s))}var Proj4js={defaultDatum:"WGS84",transform:function(t,i,s){if(!t.readyToUse)return this.reportError("Proj4js initialization for:"+t.srsCode+" not yet complete"),s;if(!i.readyToUse)return this.reportError("Proj4js initialization for:"+i.srsCode+" not yet complete"),s;if(t.datum&&i.datum&&((t.datum.datum_type==Proj4js.common.PJD_3PARAM||t.datum.datum_type==Proj4js.common.PJD_7PARAM)&&"WGS84"!=i.datumCode||(i.datum.datum_type==Proj4js.common.PJD_3PARAM||i.datum.datum_type==Proj4js.common.PJD_7PARAM)&&"WGS84"!=t.datumCode)){var e=Proj4js.WGS84;this.transform(t,e,s),t=e}return"enu"!=t.axis&&this.adjust_axis(t,!1,s),"longlat"==t.projName?(s.x*=Proj4js.common.D2R,s.y*=Proj4js.common.D2R):(t.to_meter&&(s.x*=t.to_meter,s.y*=t.to_meter),t.inverse(s)),t.from_greenwich&&(s.x+=t.from_greenwich),s=this.datum_transform(t.datum,i.datum,s),i.from_greenwich&&(s.x-=i.from_greenwich),"longlat"==i.projName?(s.x*=Proj4js.common.R2D,s.y*=Proj4js.common.R2D):(i.forward(s),i.to_meter&&(s.x/=i.to_meter,s.y/=i.to_meter)),"enu"!=i.axis&&this.adjust_axis(i,!0,s),s},datum_transform:function(t,i,s){return t.compare_datums(i)?s:t.datum_type==Proj4js.common.PJD_NODATUM||i.datum_type==Proj4js.common.PJD_NODATUM?s:((t.es!=i.es||t.a!=i.a||t.datum_type==Proj4js.common.PJD_3PARAM||t.datum_type==Proj4js.common.PJD_7PARAM||i.datum_type==Proj4js.common.PJD_3PARAM||i.datum_type==Proj4js.common.PJD_7PARAM)&&(t.geodetic_to_geocentric(s),(t.datum_type==Proj4js.common.PJD_3PARAM||t.datum_type==Proj4js.common.PJD_7PARAM)&&t.geocentric_to_wgs84(s),(i.datum_type==Proj4js.common.PJD_3PARAM||i.datum_type==Proj4js.common.PJD_7PARAM)&&i.geocentric_from_wgs84(s),i.geocentric_to_geodetic(s)),s)},adjust_axis:function(t,i,s){for(var e,o,n=s.x,a=s.y,r=s.z||0,h=0;3>h;h++)if(!i||2!=h||void 0!==s.z)switch(0==h?(e=n,o="x"):1==h?(e=a,o="y"):(e=r,o="z"),t.axis[h]){case"e":s[o]=e;break;case"w":s[o]=-e;break;case"n":s[o]=e;break;case"s":s[o]=-e;break;case"u":void 0!==s[o]&&(s.z=e);break;case"d":void 0!==s[o]&&(s.z=-e);break;default:return alert("ERROR: unknow axis ("+t.axis[h]+") - check definition of "+t.projName),null}return s},reportError:function(){},extend:function(t,i){if(t=t||{},i)for(var s in i){var e=i[s];void 0!==e&&(t[s]=e)}return t},Class:function(){for(var t,i=function(){this.initialize.apply(this,arguments)},s={},e=0;arguments.length>e;++e)t="function"==typeof arguments[e]?arguments[e].prototype:arguments[e],Proj4js.extend(s,t);return i.prototype=s,i},bind:function(t,i){var s=Array.prototype.slice.apply(arguments,[2]);return function(){var e=s.concat(Array.prototype.slice.apply(arguments,[0])); +Math.sign = Math.sign || function(x) { + x = +x; // convert to a number + if (x === 0 || isNaN(x)) { + return x; + } + return x > 0 ? 1 : -1; +} -return t.apply(i,e)}},scriptName:"proj4js-combined.js",defsLookupService:"http://spatialreference.org/ref",libPath:null,getScriptLocation:function(){if(this.libPath)return this.libPath;for(var t=this.scriptName,i=t.length,s=document.getElementsByTagName("script"),e=0;s.length>e;e++){var o=s[e].getAttribute("src");if(o){var n=o.lastIndexOf(t);if(n>-1&&n+i==o.length){this.libPath=o.slice(0,-i);break}}}return this.libPath||""},loadScript:function(t,i,s,e){var o=document.createElement("script");o.defer=!1,o.type="text/javascript",o.id=t,o.src=t,o.onload=i,o.onerror=s,o.loadCheck=e,/MSIE/.test(navigator.userAgent)&&(o.onreadystatechange=this.checkReadyState),document.getElementsByTagName("head")[0].appendChild(o)},checkReadyState:function(){"loaded"==this.readyState&&(this.loadCheck()?this.onload():this.onerror())}};Proj4js.Proj=Proj4js.Class({readyToUse:!1,title:null,projName:null,units:null,datum:null,x0:0,y0:0,localCS:!1,queue:null,initialize:function(t,i){if(this.srsCodeInput=t,this.queue=[],i&&this.queue.push(i),t.indexOf("GEOGCS")>=0||t.indexOf("GEOCCS")>=0||t.indexOf("PROJCS")>=0||t.indexOf("LOCAL_CS")>=0)return this.parseWKT(t),this.deriveConstants(),this.loadProjCode(this.projName),void 0;if(0==t.indexOf("urn:")){var s=t.split(":");"ogc"!=s[1]&&"x-ogc"!=s[1]||"def"!=s[2]||"crs"!=s[3]||(t=s[4]+":"+s[s.length-1])}else if(0==t.indexOf("http://")){var e=t.split("#");e[0].match(/epsg.org/)?t="EPSG:"+e[1]:e[0].match(/RIG.xml/)&&(t="IGNF:"+e[1])}this.srsCode=t.toUpperCase(),0==this.srsCode.indexOf("EPSG")?(this.srsCode=this.srsCode,this.srsAuth="epsg",this.srsProjNumber=this.srsCode.substring(5)):0==this.srsCode.indexOf("IGNF")?(this.srsCode=this.srsCode,this.srsAuth="IGNF",this.srsProjNumber=this.srsCode.substring(5)):0==this.srsCode.indexOf("CRS")?(this.srsCode=this.srsCode,this.srsAuth="CRS",this.srsProjNumber=this.srsCode.substring(4)):(this.srsAuth="",this.srsProjNumber=this.srsCode),this.loadProjDefinition()},loadProjDefinition:function(){if(Proj4js.defs[this.srsCode])return this.defsLoaded(),void 0;var t=Proj4js.getScriptLocation()+"defs/"+this.srsAuth.toUpperCase()+this.srsProjNumber+".js";Proj4js.loadScript(t,Proj4js.bind(this.defsLoaded,this),Proj4js.bind(this.loadFromService,this),Proj4js.bind(this.checkDefsLoaded,this))},loadFromService:function(){var t=Proj4js.defsLookupService+"/"+this.srsAuth+"/"+this.srsProjNumber+"/proj4js/";Proj4js.loadScript(t,Proj4js.bind(this.defsLoaded,this),Proj4js.bind(this.defsFailed,this),Proj4js.bind(this.checkDefsLoaded,this))},defsLoaded:function(){this.parseDefs(),this.loadProjCode(this.projName)},checkDefsLoaded:function(){return Proj4js.defs[this.srsCode]?!0:!1},defsFailed:function(){Proj4js.reportError("failed to load projection definition for: "+this.srsCode),Proj4js.defs[this.srsCode]=Proj4js.defs.WGS84,this.defsLoaded()},loadProjCode:function(t){if(Proj4js.Proj[t])return this.initTransforms(),void 0;var i=Proj4js.getScriptLocation()+"projCode/"+t+".js";Proj4js.loadScript(i,Proj4js.bind(this.loadProjCodeSuccess,this,t),Proj4js.bind(this.loadProjCodeFailure,this,t),Proj4js.bind(this.checkCodeLoaded,this,t))},loadProjCodeSuccess:function(t){Proj4js.Proj[t].dependsOn?this.loadProjCode(Proj4js.Proj[t].dependsOn):this.initTransforms()},loadProjCodeFailure:function(t){Proj4js.reportError("failed to find projection file for: "+t)},checkCodeLoaded:function(t){return Proj4js.Proj[t]?!0:!1},initTransforms:function(){if(Proj4js.extend(this,Proj4js.Proj[this.projName]),this.init(),this.readyToUse=!0,this.queue)for(var t;t=this.queue.shift();)t.call(this,this)},wktRE:/^(\w+)\[(.*)\]$/,parseWKT:function(t){var i=t.match(this.wktRE);if(i){var s,e=i[1],o=i[2],n=o.split(",");s="TOWGS84"==e.toUpperCase()?e:n.shift(),s=s.replace(/^\"/,""),s=s.replace(/\"$/,"");for(var a=[],r=0,h="",l=0;n.length>l;++l){for(var c=n[l],m=0;c.length>m;++m)"["==c.charAt(m)&&++r,"]"==c.charAt(m)&&--r;h+=c,0===r?(a.push(h),h=""):h+=","}switch(e){case"LOCAL_CS":this.projName="identity",this.localCS=!0,this.srsCode=s;break;case"GEOGCS":this.projName="longlat",this.geocsCode=s,this.srsCode||(this.srsCode=s);break;case"PROJCS":this.srsCode=s;break;case"GEOCCS":break;case"PROJECTION":this.projName=Proj4js.wktProjections[s];break;case"DATUM":this.datumName=s;break;case"LOCAL_DATUM":this.datumCode="none";break;case"SPHEROID":this.ellps=s,this.a=parseFloat(a.shift()),this.rf=parseFloat(a.shift());break;case"PRIMEM":this.from_greenwich=parseFloat(a.shift());break;case"UNIT":this.units=s,this.unitsPerMeter=parseFloat(a.shift());break;case"PARAMETER":var u=s.toLowerCase(),d=parseFloat(a.shift());switch(u){case"false_easting":this.x0=d;break;case"false_northing":this.y0=d;break;case"scale_factor":this.k0=d;break;case"central_meridian":this.long0=d*Proj4js.common.D2R;break;case"latitude_of_origin":this.lat0=d*Proj4js.common.D2R;break;case"more_here":break;default:}break;case"TOWGS84":this.datum_params=a;break;case"AXIS":var u=s.toLowerCase(),d=a.shift();switch(d){case"EAST":d="e";break;case"WEST":d="w";break;case"NORTH":d="n";break;case"SOUTH":d="s";break;case"UP":d="u";break;case"DOWN":d="d";break;case"OTHER":default:d=" "}switch(this.axis||(this.axis="enu"),u){case"x":this.axis=d+this.axis.substr(1,2);break;case"y":this.axis=this.axis.substr(0,1)+d+this.axis.substr(2,1);break;case"z":this.axis=this.axis.substr(0,2)+d;break;default:}case"MORE_HERE":break;default:}for(var l=0;a.length>l;++l)this.parseWKT(a[l])}},parseDefs:function(){this.defData=Proj4js.defs[this.srsCode];var t,i;if(this.defData){for(var s=this.defData.split("+"),e=0;s.length>e;e++){var o=s[e].split("=");switch(t=o[0].toLowerCase(),i=o[1],t.replace(/\s/gi,"")){case"":break;case"title":this.title=i;break;case"proj":this.projName=i.replace(/\s/gi,"");break;case"units":this.units=i.replace(/\s/gi,"");break;case"datum":this.datumCode=i.replace(/\s/gi,"");break;case"nadgrids":this.nagrids=i.replace(/\s/gi,"");break;case"ellps":this.ellps=i.replace(/\s/gi,"");break;case"a":this.a=parseFloat(i);break;case"b":this.b=parseFloat(i);break;case"rf":this.rf=parseFloat(i);break;case"lat_0":this.lat0=i*Proj4js.common.D2R;break;case"lat_1":this.lat1=i*Proj4js.common.D2R;break;case"lat_2":this.lat2=i*Proj4js.common.D2R;break;case"lat_ts":this.lat_ts=i*Proj4js.common.D2R;break;case"lon_0":this.long0=i*Proj4js.common.D2R;break;case"alpha":this.alpha=parseFloat(i)*Proj4js.common.D2R;break;case"lonc":this.longc=i*Proj4js.common.D2R;break;case"x_0":this.x0=parseFloat(i);break;case"y_0":this.y0=parseFloat(i);break;case"k_0":this.k0=parseFloat(i);break;case"k":this.k0=parseFloat(i);break;case"r_a":this.R_A=!0;break;case"zone":this.zone=parseInt(i,10);break;case"south":this.utmSouth=!0;break;case"towgs84":this.datum_params=i.split(",");break;case"to_meter":this.to_meter=parseFloat(i);break;case"from_greenwich":this.from_greenwich=i*Proj4js.common.D2R;break;case"pm":i=i.replace(/\s/gi,""),this.from_greenwich=Proj4js.PrimeMeridian[i]?Proj4js.PrimeMeridian[i]:parseFloat(i),this.from_greenwich*=Proj4js.common.D2R;break;case"axis":i=i.replace(/\s/gi,"");var n="ewnsud";3==i.length&&-1!=n.indexOf(i.substr(0,1))&&-1!=n.indexOf(i.substr(1,1))&&-1!=n.indexOf(i.substr(2,1))&&(this.axis=i);break;case"no_defs":break;default:}}this.deriveConstants()}},deriveConstants:function(){if("@null"==this.nagrids&&(this.datumCode="none"),this.datumCode&&"none"!=this.datumCode){var t=Proj4js.Datum[this.datumCode];t&&(this.datum_params=t.towgs84?t.towgs84.split(","):null,this.ellps=t.ellipse,this.datumName=t.datumName?t.datumName:this.datumCode)}if(!this.a){var i=Proj4js.Ellipsoid[this.ellps]?Proj4js.Ellipsoid[this.ellps]:Proj4js.Ellipsoid.WGS84;Proj4js.extend(this,i)}this.rf&&!this.b&&(this.b=(1-1/this.rf)*this.a),(0===this.rf||Math.abs(this.a-this.b)=a;a++)if(s=t*Math.sin(n),e=this.HALF_PI-2*Math.atan(i*Math.pow((1-s)/(1+s),o))-n,n+=e,1e-10>=Math.abs(e))return n;return alert("phi2z has NoConvergence"),-9999},qsfnz:function(t,i){var s;return t>1e-7?(s=t*i,(1-t*t)*(i/(1-s*s)-.5/t*Math.log((1-s)/(1+s)))):2*i},asinz:function(t){return Math.abs(t)>1&&(t=t>1?1:-1),Math.asin(t)},e0fn:function(t){return 1-.25*t*(1+t/16*(3+1.25*t))},e1fn:function(t){return.375*t*(1+.25*t*(1+.46875*t))},e2fn:function(t){return.05859375*t*t*(1+.75*t)},e3fn:function(t){return t*t*t*(35/3072)},mlfn:function(t,i,s,e,o){return t*o-i*Math.sin(2*o)+s*Math.sin(4*o)-e*Math.sin(6*o)},srat:function(t,i){return Math.pow((1-t)/(1+t),i)},sign:function(t){return 0>t?-1:1},adjust_lon:function(t){return t=Math.abs(t)this.HALF_PI)return+Number.NaN;if(i==this.HALF_PI)return Number.POSITIVE_INFINITY;if(i==-1*this.HALF_PI)return-1*Number.POSITIVE_INFINITY;var e=t*s;return Math.log(Math.tan((this.HALF_PI+i)/2))+t*Math.log((1-e)/(1+e))/2},fL:function(t,i){return 2*Math.atan(t*Math.exp(i))-this.HALF_PI},invlatiso:function(t,i){var s=this.fL(1,i),e=0,o=0;do e=s,o=t*Math.sin(e),s=this.fL(Math.exp(t*Math.log((1+o)/(1-o))/2),i);while(Math.abs(s-e)>1e-12);return s},sinh:function(t){var i=Math.exp(t);return i=(i-1/i)/2},cosh:function(t){var i=Math.exp(t);return i=(i+1/i)/2},tanh:function(t){var i=Math.exp(t);return i=(i-1/i)/(i+1/i)},asinh:function(t){var i=t>=0?1:-1;return i*Math.log(Math.abs(t)+Math.sqrt(t*t+1))},acosh:function(t){return 2*Math.log(Math.sqrt((t+1)/2)+Math.sqrt((t-1)/2))},atanh:function(t){return Math.log((t-1)/(t+1))/2},gN:function(t,i,s){var e=i*s;return t/Math.sqrt(1-e*e)},pj_enfn:function(t){var i=[];i[0]=this.C00-t*(this.C02+t*(this.C04+t*(this.C06+t*this.C08))),i[1]=t*(this.C22-t*(this.C04+t*(this.C06+t*this.C08)));var s=t*t;return i[2]=s*(this.C44-t*(this.C46+t*this.C48)),s*=t,i[3]=s*(this.C66-t*this.C68),i[4]=s*t*this.C88,i},pj_mlfn:function(t,i,s,e){return s*=i,i*=i,e[0]*t-s*(e[1]+i*(e[2]+i*(e[3]+i*e[4])))},pj_inv_mlfn:function(t,i,s){for(var e=1/(1-i),o=t,n=Proj4js.common.MAX_ITER;n;--n){var a=Math.sin(o),r=1-i*a*a;if(r=(this.pj_mlfn(o,a,Math.cos(o),s)-t)*r*Math.sqrt(r)*e,o-=r,Math.abs(r)i;i++)t.datum_params[i]=parseFloat(t.datum_params[i]);(0!=t.datum_params[0]||0!=t.datum_params[1]||0!=t.datum_params[2])&&(this.datum_type=Proj4js.common.PJD_3PARAM),t.datum_params.length>3&&(0!=t.datum_params[3]||0!=t.datum_params[4]||0!=t.datum_params[5]||0!=t.datum_params[6])&&(this.datum_type=Proj4js.common.PJD_7PARAM,t.datum_params[3]*=Proj4js.common.SEC_TO_RAD,t.datum_params[4]*=Proj4js.common.SEC_TO_RAD,t.datum_params[5]*=Proj4js.common.SEC_TO_RAD,t.datum_params[6]=t.datum_params[6]/1e6+1)}t&&(this.a=t.a,this.b=t.b,this.es=t.es,this.ep2=t.ep2,this.datum_params=t.datum_params)},compare_datums:function(t){return this.datum_type!=t.datum_type?!1:this.a!=t.a||Math.abs(this.es-t.es)>5e-11?!1:this.datum_type==Proj4js.common.PJD_3PARAM?this.datum_params[0]==t.datum_params[0]&&this.datum_params[1]==t.datum_params[1]&&this.datum_params[2]==t.datum_params[2]:this.datum_type==Proj4js.common.PJD_7PARAM?this.datum_params[0]==t.datum_params[0]&&this.datum_params[1]==t.datum_params[1]&&this.datum_params[2]==t.datum_params[2]&&this.datum_params[3]==t.datum_params[3]&&this.datum_params[4]==t.datum_params[4]&&this.datum_params[5]==t.datum_params[5]&&this.datum_params[6]==t.datum_params[6]:this.datum_type==Proj4js.common.PJD_GRIDSHIFT||t.datum_type==Proj4js.common.PJD_GRIDSHIFT?(alert("ERROR: Grid shift transformations are not implemented."),!1):!0},geodetic_to_geocentric:function(t){var i,s,e,o,n,a,r,h=t.x,l=t.y,c=t.z?t.z:0,m=0;if(-Proj4js.common.HALF_PI>l&&l>-1.001*Proj4js.common.HALF_PI)l=-Proj4js.common.HALF_PI;else if(l>Proj4js.common.HALF_PI&&1.001*Proj4js.common.HALF_PI>l)l=Proj4js.common.HALF_PI;else if(-Proj4js.common.HALF_PI>l||l>Proj4js.common.HALF_PI)return Proj4js.reportError("geocent:lat out of range:"+l),null;return h>Proj4js.common.PI&&(h-=2*Proj4js.common.PI),n=Math.sin(l),r=Math.cos(l),a=n*n,o=this.a/Math.sqrt(1-this.es*a),i=(o+c)*r*Math.cos(h),s=(o+c)*r*Math.sin(h),e=(o*(1-this.es)+c)*n,t.x=i,t.y=s,t.z=e,m},geocentric_to_geodetic:function(t){var i,s,e,o,n,a,r,h,l,c,m,u,d,p,_,f,P,y=1e-12,g=y*y,L=30,v=t.x,j=t.y,M=t.z?t.z:0;if(d=!1,i=Math.sqrt(v*v+j*j),s=Math.sqrt(v*v+j*j+M*M),y>i/this.a){if(d=!0,_=0,y>s/this.a)return f=Proj4js.common.HALF_PI,P=-this.b,void 0}else _=Math.atan2(j,v);e=M/s,o=i/s,n=1/Math.sqrt(1-this.es*(2-this.es)*o*o),h=o*(1-this.es)*n,l=e*n,p=0;do p++,r=this.a/Math.sqrt(1-this.es*l*l),P=i*h+M*l-r*(1-this.es*l*l),a=this.es*r/(r+P),n=1/Math.sqrt(1-a*(2-a)*o*o),c=o*(1-a)*n,m=e*n,u=m*h-c*l,h=c,l=m;while(u*u>g&&L>p);return f=Math.atan(m/Math.abs(c)),t.x=_,t.y=f,t.z=P,t},geocentric_to_geodetic_noniter:function(t){var i,s,e,o,n,a,r,h,l,c,m,u,d,p,_,f,P,y=t.x,g=t.y,L=t.z?t.z:0;if(y=parseFloat(y),g=parseFloat(g),L=parseFloat(L),P=!1,0!=y)i=Math.atan2(g,y);else if(g>0)i=Proj4js.common.HALF_PI;else if(0>g)i=-Proj4js.common.HALF_PI;else if(P=!0,i=0,L>0)s=Proj4js.common.HALF_PI;else{if(!(0>L))return s=Proj4js.common.HALF_PI,e=-this.b,void 0;s=-Proj4js.common.HALF_PI}return n=y*y+g*g,o=Math.sqrt(n),a=L*Proj4js.common.AD_C,h=Math.sqrt(a*a+n),c=a/h,u=o/h,m=c*c*c,r=L+this.b*this.ep2*m,f=o-this.a*this.es*u*u*u,l=Math.sqrt(r*r+f*f),d=r/l,p=f/l,_=this.a/Math.sqrt(1-this.es*d*d),e=p>=Proj4js.common.COS_67P5?o/p-_:-Proj4js.common.COS_67P5>=p?o/-p-_:L/d+_*(this.es-1),0==P&&(s=Math.atan(d/p)),t.x=i,t.y=s,t.z=e,t},geocentric_to_wgs84:function(t){if(this.datum_type==Proj4js.common.PJD_3PARAM)t.x+=this.datum_params[0],t.y+=this.datum_params[1],t.z+=this.datum_params[2];else if(this.datum_type==Proj4js.common.PJD_7PARAM){var i=this.datum_params[0],s=this.datum_params[1],e=this.datum_params[2],o=this.datum_params[3],n=this.datum_params[4],a=this.datum_params[5],r=this.datum_params[6],h=r*(t.x-a*t.y+n*t.z)+i,l=r*(a*t.x+t.y-o*t.z)+s,c=r*(-n*t.x+o*t.y+t.z)+e;t.x=h,t.y=l,t.z=c}},geocentric_from_wgs84:function(t){if(this.datum_type==Proj4js.common.PJD_3PARAM)t.x-=this.datum_params[0],t.y-=this.datum_params[1],t.z-=this.datum_params[2];else if(this.datum_type==Proj4js.common.PJD_7PARAM){var i=this.datum_params[0],s=this.datum_params[1],e=this.datum_params[2],o=this.datum_params[3],n=this.datum_params[4],a=this.datum_params[5],r=this.datum_params[6],h=(t.x-i)/r,l=(t.y-s)/r,c=(t.z-e)/r;t.x=h+a*l-n*c,t.y=-a*h+l+o*c,t.z=n*h-o*l+c}}}),Proj4js.Point=Proj4js.Class({initialize:function(t,i,s){if("object"==typeof t)this.x=t[0],this.y=t[1],this.z=t[2]||0;else if("string"==typeof t&&i===void 0){var e=t.split(",");this.x=parseFloat(e[0]),this.y=parseFloat(e[1]),this.z=parseFloat(e[2])||0}else this.x=t,this.y=i,this.z=s||0},clone:function(){return new Proj4js.Point(this.x,this.y,this.z)},toString:function(){return"x="+this.x+",y="+this.y},toShortString:function(){return this.x+", "+this.y}}),Proj4js.PrimeMeridian={greenwich:0,lisbon:-9.131906111111,paris:2.337229166667,bogota:-74.080916666667,madrid:-3.687938888889,rome:12.452333333333,bern:7.439583333333,jakarta:106.807719444444,ferro:-17.666666666667,brussels:4.367975,stockholm:18.058277777778,athens:23.7163375,oslo:10.722916666667},Proj4js.Ellipsoid={MERIT:{a:6378137,rf:298.257,ellipseName:"MERIT 1983"},SGS85:{a:6378136,rf:298.257,ellipseName:"Soviet Geodetic System 85"},GRS80:{a:6378137,rf:298.257222101,ellipseName:"GRS 1980(IUGG, 1980)"},IAU76:{a:6378140,rf:298.257,ellipseName:"IAU 1976"},airy:{a:6377563.396,b:6356256.91,ellipseName:"Airy 1830"},"APL4.":{a:6378137,rf:298.25,ellipseName:"Appl. Physics. 1965"},NWL9D:{a:6378145,rf:298.25,ellipseName:"Naval Weapons Lab., 1965"},mod_airy:{a:6377340.189,b:6356034.446,ellipseName:"Modified Airy"},andrae:{a:6377104.43,rf:300,ellipseName:"Andrae 1876 (Den., Iclnd.)"},aust_SA:{a:6378160,rf:298.25,ellipseName:"Australian Natl & S. Amer. 1969"},GRS67:{a:6378160,rf:298.247167427,ellipseName:"GRS 67(IUGG 1967)"},bessel:{a:6377397.155,rf:299.1528128,ellipseName:"Bessel 1841"},bess_nam:{a:6377483.865,rf:299.1528128,ellipseName:"Bessel 1841 (Namibia)"},clrk66:{a:6378206.4,b:6356583.8,ellipseName:"Clarke 1866"},clrk80:{a:6378249.145,rf:293.4663,ellipseName:"Clarke 1880 mod."},CPM:{a:6375738.7,rf:334.29,ellipseName:"Comm. des Poids et Mesures 1799"},delmbr:{a:6376428,rf:311.5,ellipseName:"Delambre 1810 (Belgium)"},engelis:{a:6378136.05,rf:298.2566,ellipseName:"Engelis 1985"},evrst30:{a:6377276.345,rf:300.8017,ellipseName:"Everest 1830"},evrst48:{a:6377304.063,rf:300.8017,ellipseName:"Everest 1948"},evrst56:{a:6377301.243,rf:300.8017,ellipseName:"Everest 1956"},evrst69:{a:6377295.664,rf:300.8017,ellipseName:"Everest 1969"},evrstSS:{a:6377298.556,rf:300.8017,ellipseName:"Everest (Sabah & Sarawak)"},fschr60:{a:6378166,rf:298.3,ellipseName:"Fischer (Mercury Datum) 1960"},fschr60m:{a:6378155,rf:298.3,ellipseName:"Fischer 1960"},fschr68:{a:6378150,rf:298.3,ellipseName:"Fischer 1968"},helmert:{a:6378200,rf:298.3,ellipseName:"Helmert 1906"},hough:{a:6378270,rf:297,ellipseName:"Hough"},intl:{a:6378388,rf:297,ellipseName:"International 1909 (Hayford)"},kaula:{a:6378163,rf:298.24,ellipseName:"Kaula 1961"},lerch:{a:6378139,rf:298.257,ellipseName:"Lerch 1979"},mprts:{a:6397300,rf:191,ellipseName:"Maupertius 1738"},new_intl:{a:6378157.5,b:6356772.2,ellipseName:"New International 1967"},plessis:{a:6376523,rf:6355863,ellipseName:"Plessis 1817 (France)"},krass:{a:6378245,rf:298.3,ellipseName:"Krassovsky, 1942"},SEasia:{a:6378155,b:6356773.3205,ellipseName:"Southeast Asia"},walbeck:{a:6376896,b:6355834.8467,ellipseName:"Walbeck"},WGS60:{a:6378165,rf:298.3,ellipseName:"WGS 60"},WGS66:{a:6378145,rf:298.25,ellipseName:"WGS 66"},WGS72:{a:6378135,rf:298.26,ellipseName:"WGS 72"},WGS84:{a:6378137,rf:298.257223563,ellipseName:"WGS 84"},sphere:{a:6370997,b:6370997,ellipseName:"Normal Sphere (r=6370997)"}},Proj4js.Datum={WGS84:{towgs84:"0,0,0",ellipse:"WGS84",datumName:"WGS84"},GGRS87:{towgs84:"-199.87,74.79,246.62",ellipse:"GRS80",datumName:"Greek_Geodetic_Reference_System_1987"},NAD83:{towgs84:"0,0,0",ellipse:"GRS80",datumName:"North_American_Datum_1983"},NAD27:{nadgrids:"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat",ellipse:"clrk66",datumName:"North_American_Datum_1927"},potsdam:{towgs84:"606.0,23.0,413.0",ellipse:"bessel",datumName:"Potsdam Rauenberg 1950 DHDN"},carthage:{towgs84:"-263.0,6.0,431.0",ellipse:"clark80",datumName:"Carthage 1934 Tunisia"},hermannskogel:{towgs84:"653.0,-212.0,449.0",ellipse:"bessel",datumName:"Hermannskogel"},ire65:{towgs84:"482.530,-130.596,564.557,-1.042,-0.214,-0.631,8.15",ellipse:"mod_airy",datumName:"Ireland 1965"},nzgd49:{towgs84:"59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993",ellipse:"intl",datumName:"New Zealand Geodetic Datum 1949"},OSGB36:{towgs84:"446.448,-125.157,542.060,0.1502,0.2470,0.8421,-20.4894",ellipse:"airy",datumName:"Airy 1830"}},Proj4js.WGS84=new Proj4js.Proj("WGS84"),Proj4js.Datum.OSB36=Proj4js.Datum.OSGB36,Proj4js.wktProjections={"Lambert Tangential Conformal Conic Projection":"lcc",Mercator:"merc","Popular Visualisation Pseudo Mercator":"merc",Mercator_1SP:"merc",Transverse_Mercator:"tmerc","Transverse Mercator":"tmerc","Lambert Azimuthal Equal Area":"laea","Universal Transverse Mercator System":"utm"},Proj4js.Proj.aea={init:function(){return Math.abs(this.lat1+this.lat2)Proj4js.common.EPSLN?(this.ms1*this.ms1-this.ms2*this.ms2)/(this.qs2-this.qs1):this.con,this.c=this.ms1*this.ms1+this.ns0*this.qs1,this.rh=this.a*Math.sqrt(this.c-this.ns0*this.qs0)/this.ns0,void 0)},forward:function(t){var i=t.x,s=t.y;this.sin_phi=Math.sin(s),this.cos_phi=Math.cos(s);var e=Proj4js.common.qsfnz(this.e3,this.sin_phi,this.cos_phi),o=this.a*Math.sqrt(this.c-this.ns0*e)/this.ns0,n=this.ns0*Proj4js.common.adjust_lon(i-this.long0),a=o*Math.sin(n)+this.x0,r=this.rh-o*Math.cos(n)+this.y0;return t.x=a,t.y=r,t},inverse:function(t){var i,s,e,o,n,a;return t.x-=this.x0,t.y=this.rh-t.y+this.y0,this.ns0>=0?(i=Math.sqrt(t.x*t.x+t.y*t.y),e=1):(i=-Math.sqrt(t.x*t.x+t.y*t.y),e=-1),o=0,0!=i&&(o=Math.atan2(e*t.x,e*t.y)),e=i*this.ns0/this.a,s=(this.c-e*e)/this.ns0,this.e3>=1e-10?(e=1-.5*(1-this.es)*Math.log((1-this.e3)/(1+this.e3))/this.e3,a=Math.abs(Math.abs(e)-Math.abs(s))>1e-10?this.phi1z(this.e3,s):s>=0?.5*Proj4js.common.PI:-.5*Proj4js.common.PI):a=this.phi1z(this.e3,s),n=Proj4js.common.adjust_lon(o/this.ns0+this.long0),t.x=n,t.y=a,t},phi1z:function(t,i){var s,e,o,n,a,r=Proj4js.common.asinz(.5*i);if(Proj4js.common.EPSLN>t)return r;for(var h=t*t,l=1;25>=l;l++)if(s=Math.sin(r),e=Math.cos(r),o=t*s,n=1-o*o,a=.5*n*n/e*(i/(1-h)-s/n+.5/t*Math.log((1-o)/(1+o))),r+=a,1e-7>=Math.abs(a))return r;return Proj4js.reportError("aea:phi1z:Convergence error"),null}},Proj4js.Proj.sterea={dependsOn:"gauss",init:function(){return Proj4js.Proj.gauss.init.apply(this),this.rc?(this.sinc0=Math.sin(this.phic0),this.cosc0=Math.cos(this.phic0),this.R2=2*this.rc,this.title||(this.title="Oblique Stereographic Alternative"),void 0):(Proj4js.reportError("sterea:init:E_ERROR_0"),void 0)},forward:function(t){var i,s,e,o;return t.x=Proj4js.common.adjust_lon(t.x-this.long0),Proj4js.Proj.gauss.forward.apply(this,[t]),i=Math.sin(t.y),s=Math.cos(t.y),e=Math.cos(t.x),o=this.k0*this.R2/(1+this.sinc0*i+this.cosc0*s*e),t.x=o*s*Math.sin(t.x),t.y=o*(this.cosc0*i-this.sinc0*s*e),t.x=this.a*t.x+this.x0,t.y=this.a*t.y+this.y0,t},inverse:function(t){var i,s,e,o,n;if(t.x=(t.x-this.x0)/this.a,t.y=(t.y-this.y0)/this.a,t.x/=this.k0,t.y/=this.k0,n=Math.sqrt(t.x*t.x+t.y*t.y)){var a=2*Math.atan2(n,this.R2);i=Math.sin(a),s=Math.cos(a),o=Math.asin(s*this.sinc0+t.y*i*this.cosc0/n),e=Math.atan2(t.x*i,n*this.cosc0*s-t.y*this.sinc0*i)}else o=this.phic0,e=0;return t.x=e,t.y=o,Proj4js.Proj.gauss.inverse.apply(this,[t]),t.x=Proj4js.common.adjust_lon(t.x+this.long0),t}},Proj4js.Proj.poly={init:function(){0==this.lat0&&(this.lat0=90),this.temp=this.b/this.a,this.es=1-Math.pow(this.temp,2),this.e=Math.sqrt(this.es),this.e0=Proj4js.common.e0fn(this.es),this.e1=Proj4js.common.e1fn(this.es),this.e2=Proj4js.common.e2fn(this.es),this.e3=Proj4js.common.e3fn(this.es),this.ml0=Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,this.lat0)},forward:function(t){var i,s,e,o,n,a,r,h=t.x,l=t.y;return e=Proj4js.common.adjust_lon(h-this.long0),1e-7>=Math.abs(l)?(a=this.x0+this.a*e,r=this.y0-this.a*this.ml0):(i=Math.sin(l),s=Math.cos(l),o=Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,l),n=Proj4js.common.msfnz(this.e,i,s),e=i,a=this.x0+this.a*n*Math.sin(e)/i,r=this.y0+this.a*(o-this.ml0+n*(1-Math.cos(e))/i)),t.x=a,t.y=r,t},inverse:function(t){var i,s,e,o,n,a;if(t.x-=this.x0,t.y-=this.y0,i=this.ml0+t.y/this.a,o=0,1e-7>=Math.abs(i))n=t.x/this.a+this.long0,a=0;else{if(s=i*i+t.x/this.a*(t.x/this.a),o=phi4z(this.es,this.e0,this.e1,this.e2,this.e3,this.al,s,e,a),1!=o)return o;n=Proj4js.common.adjust_lon(Proj4js.common.asinz(t.x*e/this.a)/Math.sin(a)+this.long0)}return t.x=n,t.y=a,t}},Proj4js.Proj.equi={init:function(){this.x0||(this.x0=0),this.y0||(this.y0=0),this.lat0||(this.lat0=0),this.long0||(this.long0=0)},forward:function(t){var i=t.x,s=t.y,e=Proj4js.common.adjust_lon(i-this.long0),o=this.x0+this.a*e*Math.cos(this.lat0),n=this.y0+this.a*s;return this.t1=o,this.t2=Math.cos(this.lat0),t.x=o,t.y=n,t},inverse:function(t){t.x-=this.x0,t.y-=this.y0;var i=t.y/this.a;Math.abs(i)>Proj4js.common.HALF_PI&&Proj4js.reportError("equi:Inv:DataError");var s=Proj4js.common.adjust_lon(this.long0+t.x/(this.a*Math.cos(this.lat0)));t.x=s,t.y=i}},Proj4js.Proj.merc={init:function(){this.lat_ts&&(this.k0=this.sphere?Math.cos(this.lat_ts):Proj4js.common.msfnz(this.es,Math.sin(this.lat_ts),Math.cos(this.lat_ts)))},forward:function(t){var i=t.x,s=t.y;if(s*Proj4js.common.R2D>90&&-90>s*Proj4js.common.R2D&&i*Proj4js.common.R2D>180&&-180>i*Proj4js.common.R2D)return Proj4js.reportError("merc:forward: llInputOutOfRange: "+i+" : "+s),null;var e,o;if(Math.abs(Math.abs(s)-Proj4js.common.HALF_PI)<=Proj4js.common.EPSLN)return Proj4js.reportError("merc:forward: ll2mAtPoles"),null;if(this.sphere)e=this.x0+this.a*this.k0*Proj4js.common.adjust_lon(i-this.long0),o=this.y0+this.a*this.k0*Math.log(Math.tan(Proj4js.common.FORTPI+.5*s));else{var n=Math.sin(s),a=Proj4js.common.tsfnz(this.e,s,n);e=this.x0+this.a*this.k0*Proj4js.common.adjust_lon(i-this.long0),o=this.y0-this.a*this.k0*Math.log(a)}return t.x=e,t.y=o,t},inverse:function(t){var i,s,e=t.x-this.x0,o=t.y-this.y0;if(this.sphere)s=Proj4js.common.HALF_PI-2*Math.atan(Math.exp(-o/this.a*this.k0));else{var n=Math.exp(-o/(this.a*this.k0));if(s=Proj4js.common.phi2z(this.e,n),-9999==s)return Proj4js.reportError("merc:inverse: lat = -9999"),null}return i=Proj4js.common.adjust_lon(this.long0+e/(this.a*this.k0)),t.x=i,t.y=s,t}},Proj4js.Proj.utm={dependsOn:"tmerc",init:function(){return this.zone?(this.lat0=0,this.long0=(6*Math.abs(this.zone)-183)*Proj4js.common.D2R,this.x0=5e5,this.y0=this.utmSouth?1e7:0,this.k0=.9996,Proj4js.Proj.tmerc.init.apply(this),this.forward=Proj4js.Proj.tmerc.forward,this.inverse=Proj4js.Proj.tmerc.inverse,void 0):(Proj4js.reportError("utm:init: zone must be specified for UTM"),void 0)}},Proj4js.Proj.eqdc={init:function(){this.mode||(this.mode=0),this.temp=this.b/this.a,this.es=1-Math.pow(this.temp,2),this.e=Math.sqrt(this.es),this.e0=Proj4js.common.e0fn(this.es),this.e1=Proj4js.common.e1fn(this.es),this.e2=Proj4js.common.e2fn(this.es),this.e3=Proj4js.common.e3fn(this.es),this.sinphi=Math.sin(this.lat1),this.cosphi=Math.cos(this.lat1),this.ms1=Proj4js.common.msfnz(this.e,this.sinphi,this.cosphi),this.ml1=Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,this.lat1),0!=this.mode?(Math.abs(this.lat1+this.lat2)=Proj4js.common.EPSLN?(this.ms1-this.ms2)/(this.ml2-this.ml1):this.sinphi):this.ns=this.sinphi,this.g=this.ml1+this.ms1/this.ns,this.ml0=Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,this.lat0),this.rh=this.a*(this.g-this.ml0)},forward:function(t){var i=t.x,s=t.y,e=Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,s),o=this.a*(this.g-e),n=this.ns*Proj4js.common.adjust_lon(i-this.long0),a=this.x0+o*Math.sin(n),r=this.y0+this.rh-o*Math.cos(n);return t.x=a,t.y=r,t},inverse:function(t){t.x-=this.x0,t.y=this.rh-t.y+this.y0;var i,s;this.ns>=0?(s=Math.sqrt(t.x*t.x+t.y*t.y),i=1):(s=-Math.sqrt(t.x*t.x+t.y*t.y),i=-1);var e=0;0!=s&&(e=Math.atan2(i*t.x,i*t.y));var o=this.g-s/this.a,n=this.phi3z(o,this.e0,this.e1,this.e2,this.e3),a=Proj4js.common.adjust_lon(this.long0+e/this.ns);return t.x=a,t.y=n,t},phi3z:function(t,i,s,e,o){var n,a;n=t;for(var r=0;15>r;r++)if(a=(t+s*Math.sin(2*n)-e*Math.sin(4*n)+o*Math.sin(6*n))/i-n,n+=a,1e-10>=Math.abs(a))return n;return Proj4js.reportError("PHI3Z-CONV:Latitude failed to converge after 15 iterations"),null}},Proj4js.Proj.tmerc={init:function(){this.e0=Proj4js.common.e0fn(this.es),this.e1=Proj4js.common.e1fn(this.es),this.e2=Proj4js.common.e2fn(this.es),this.e3=Proj4js.common.e3fn(this.es),this.ml0=this.a*Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,this.lat0)},forward:function(t){var i,s,e,o=t.x,n=t.y,a=Proj4js.common.adjust_lon(o-this.long0),r=Math.sin(n),h=Math.cos(n);if(this.sphere){var l=h*Math.sin(a);if(1e-10>Math.abs(Math.abs(l)-1))return Proj4js.reportError("tmerc:forward: Point projects into infinity"),93;s=.5*this.a*this.k0*Math.log((1+l)/(1-l)),i=Math.acos(h*Math.cos(a)/Math.sqrt(1-l*l)),0>n&&(i=-i),e=this.a*this.k0*(i-this.lat0)}else{var c=h*a,m=Math.pow(c,2),u=this.ep2*Math.pow(h,2),d=Math.tan(n),p=Math.pow(d,2);i=1-this.es*Math.pow(r,2);var _=this.a/Math.sqrt(i),f=this.a*Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,n);s=this.k0*_*c*(1+m/6*(1-p+u+m/20*(5-18*p+Math.pow(p,2)+72*u-58*this.ep2)))+this.x0,e=this.k0*(f-this.ml0+_*d*m*(.5+m/24*(5-p+9*u+4*Math.pow(u,2)+m/30*(61-58*p+Math.pow(p,2)+600*u-330*this.ep2))))+this.y0}return t.x=s,t.y=e,t},inverse:function(t){var i,s,e,o,n,a,r=6;if(this.sphere){var h=Math.exp(t.x/(this.a*this.k0)),l=.5*(h-1/h),c=this.lat0+t.y/(this.a*this.k0),m=Math.cos(c);i=Math.sqrt((1-m*m)/(1+l*l)),n=Proj4js.common.asinz(i),0>c&&(n=-n),a=0==l&&0==m?this.long0:Proj4js.common.adjust_lon(Math.atan2(l,m)+this.long0)}else{var u=t.x-this.x0,d=t.y-this.y0;for(i=(this.ml0+d/this.k0)/this.a,s=i,o=0;!0&&(e=(i+this.e1*Math.sin(2*s)-this.e2*Math.sin(4*s)+this.e3*Math.sin(6*s))/this.e0-s,s+=e,!(Math.abs(e)<=Proj4js.common.EPSLN));o++)if(o>=r)return Proj4js.reportError("tmerc:inverse: Latitude failed to converge"),95;if(Math.abs(s)0||Math.abs(a)<=Proj4js.common.EPSLN)var l=this.a*n*s*Math.sin(e),c=this.y0+this.a*n*(this.cos_p14*i-this.sin_p14*s*o);else Proj4js.reportError("orthoFwdPointError");return t.x=l,t.y=c,t},inverse:function(t){var i,s,e,o,n,a,r;return t.x-=this.x0,t.y-=this.y0,i=Math.sqrt(t.x*t.x+t.y*t.y),i>this.a+1e-7&&Proj4js.reportError("orthoInvDataError"),s=Proj4js.common.asinz(i/this.a),e=Math.sin(s),o=Math.cos(s),a=this.long0,Math.abs(i)<=Proj4js.common.EPSLN&&(r=this.lat0),r=Proj4js.common.asinz(o*this.sin_p14+t.y*e*this.cos_p14/i),n=Math.abs(this.lat0)-Proj4js.common.HALF_PI,Math.abs(n)<=Proj4js.common.EPSLN&&(a=this.lat0>=0?Proj4js.common.adjust_lon(this.long0+Math.atan2(t.x,-t.y)):Proj4js.common.adjust_lon(this.long0-Math.atan2(-t.x,t.y))),n=o-this.sin_p14*Math.sin(r),t.x=a,t.y=r,t}},Proj4js.Proj.krovak={init:function(){this.a=6377397.155,this.es=.006674372230614,this.e=Math.sqrt(this.es),this.lat0||(this.lat0=.863937979737193),this.long0||(this.long0=.4334234309119251),this.k0||(this.k0=.9999),this.s45=.785398163397448,this.s90=2*this.s45,this.fi0=this.lat0,this.e2=this.es,this.e=Math.sqrt(this.e2),this.alfa=Math.sqrt(1+this.e2*Math.pow(Math.cos(this.fi0),4)/(1-this.e2)),this.uq=1.04216856380474,this.u0=Math.asin(Math.sin(this.fi0)/this.alfa),this.g=Math.pow((1+this.e*Math.sin(this.fi0))/(1-this.e*Math.sin(this.fi0)),this.alfa*this.e/2),this.k=Math.tan(this.u0/2+this.s45)/Math.pow(Math.tan(this.fi0/2+this.s45),this.alfa)*this.g,this.k1=this.k0,this.n0=this.a*Math.sqrt(1-this.e2)/(1-this.e2*Math.pow(Math.sin(this.fi0),2)),this.s0=1.37008346281555,this.n=Math.sin(this.s0),this.ro0=this.k1*this.n0/Math.tan(this.s0),this.ad=this.s90-this.uq},forward:function(t){var i,s,e,o,n,a,r,h=t.x,l=t.y,c=Proj4js.common.adjust_lon(h-this.long0);return i=Math.pow((1+this.e*Math.sin(l))/(1-this.e*Math.sin(l)),this.alfa*this.e/2),s=2*(Math.atan(this.k*Math.pow(Math.tan(l/2+this.s45),this.alfa)/i)-this.s45),e=-c*this.alfa,o=Math.asin(Math.cos(this.ad)*Math.sin(s)+Math.sin(this.ad)*Math.cos(s)*Math.cos(e)),n=Math.asin(Math.cos(s)*Math.sin(e)/Math.cos(o)),a=this.n*n,r=this.ro0*Math.pow(Math.tan(this.s0/2+this.s45),this.n)/Math.pow(Math.tan(o/2+this.s45),this.n),t.y=r*Math.cos(a)/1,t.x=r*Math.sin(a)/1,this.czech&&(t.y*=-1,t.x*=-1),t},inverse:function(t){var i,s,e,o,n,a,r,h,l=t.x;t.x=t.y,t.y=l,this.czech&&(t.y*=-1,t.x*=-1),a=Math.sqrt(t.x*t.x+t.y*t.y),n=Math.atan2(t.y,t.x),o=n/Math.sin(this.s0),e=2*(Math.atan(Math.pow(this.ro0/a,1/this.n)*Math.tan(this.s0/2+this.s45))-this.s45),i=Math.asin(Math.cos(this.ad)*Math.sin(e)-Math.sin(this.ad)*Math.cos(e)*Math.cos(o)),s=Math.asin(Math.cos(e)*Math.sin(o)/Math.cos(i)),t.x=this.long0-s/this.alfa,r=i,h=0;var c=0;do t.y=2*(Math.atan(Math.pow(this.k,-1/this.alfa)*Math.pow(Math.tan(i/2+this.s45),1/this.alfa)*Math.pow((1+this.e*Math.sin(r))/(1-this.e*Math.sin(r)),this.e/2))-this.s45),1e-10>Math.abs(r-t.y)&&(h=1),r=t.y,c+=1;while(0==h&&15>c);return c>=15?(Proj4js.reportError("PHI3Z-CONV:Latitude failed to converge after 15 iterations"),null):t}},Proj4js.Proj.somerc={init:function(){var t=this.lat0;this.lambda0=this.long0;var i=Math.sin(t),s=this.a,e=this.rf,o=1/e,n=2*o-Math.pow(o,2),a=this.e=Math.sqrt(n);this.R=this.k0*s*Math.sqrt(1-n)/(1-n*Math.pow(i,2)),this.alpha=Math.sqrt(1+n/(1-n)*Math.pow(Math.cos(t),4)),this.b0=Math.asin(i/this.alpha),this.K=Math.log(Math.tan(Math.PI/4+this.b0/2))-this.alpha*Math.log(Math.tan(Math.PI/4+t/2))+this.alpha*a/2*Math.log((1+a*i)/(1-a*i))},forward:function(t){var i=Math.log(Math.tan(Math.PI/4-t.y/2)),s=this.e/2*Math.log((1+this.e*Math.sin(t.y))/(1-this.e*Math.sin(t.y))),e=-this.alpha*(i+s)+this.K,o=2*(Math.atan(Math.exp(e))-Math.PI/4),n=this.alpha*(t.x-this.lambda0),a=Math.atan(Math.sin(n)/(Math.sin(this.b0)*Math.tan(o)+Math.cos(this.b0)*Math.cos(n))),r=Math.asin(Math.cos(this.b0)*Math.sin(o)-Math.sin(this.b0)*Math.cos(o)*Math.cos(n));return t.y=this.R/2*Math.log((1+Math.sin(r))/(1-Math.sin(r)))+this.y0,t.x=this.R*a+this.x0,t},inverse:function(t){for(var i=t.x-this.x0,s=t.y-this.y0,e=i/this.R,o=2*(Math.atan(Math.exp(s/this.R))-Math.PI/4),n=Math.asin(Math.cos(this.b0)*Math.sin(o)+Math.sin(this.b0)*Math.cos(o)*Math.cos(e)),a=Math.atan(Math.sin(e)/(Math.cos(this.b0)*Math.cos(e)-Math.sin(this.b0)*Math.tan(o))),r=this.lambda0+a/this.alpha,h=0,l=n,c=-1e3,m=0;Math.abs(l-c)>1e-7;){if(++m>20)return Proj4js.reportError("omercFwdInfinity"),void 0;h=1/this.alpha*(Math.log(Math.tan(Math.PI/4+n/2))-this.K)+this.e*Math.log(Math.tan(Math.PI/4+Math.asin(this.e*Math.sin(l))/2)),c=l,l=2*Math.atan(Math.exp(h))-Math.PI/2}return t.x=r,t.y=l,t}},Proj4js.Proj.stere={ssfn_:function(t,i,s){return i*=s,Math.tan(.5*(Proj4js.common.HALF_PI+t))*Math.pow((1-i)/(1+i),.5*s)},TOL:1e-8,NITER:8,CONV:1e-10,S_POLE:0,N_POLE:1,OBLIQ:2,EQUIT:3,init:function(){this.phits=this.lat_ts?this.lat_ts:Proj4js.common.HALF_PI;var t=Math.abs(this.lat0);if(this.mode=Math.abs(t)-Proj4js.common.HALF_PIthis.lat0?this.S_POLE:this.N_POLE:t>Proj4js.common.EPSLN?this.OBLIQ:this.EQUIT,this.phits=Math.abs(this.phits),this.es){var i;switch(this.mode){case this.N_POLE:case this.S_POLE:Math.abs(this.phits-Proj4js.common.HALF_PI)=Proj4js.common.EPSLN?Math.cos(this.phits)/Math.tan(Proj4js.common.FORTPI-.5*this.phits):2*this.k0}},forward:function(t){var i=t.x;i=Proj4js.common.adjust_lon(i-this.long0);var s,e,o=t.y;if(this.sphere){var n,a,r,h;switch(n=Math.sin(o),a=Math.cos(o),r=Math.cos(i),h=Math.sin(i),this.mode){case this.EQUIT:e=1+a*r,Proj4js.common.EPSLN>=e&&Proj4js.reportError("stere:forward:Equit"),e=this.akm1/e,s=e*a*h,e*=n;break;case this.OBLIQ:e=1+this.sinph0*n+this.cosph0*a*r,Proj4js.common.EPSLN>=e&&Proj4js.reportError("stere:forward:Obliq"),e=this.akm1/e,s=e*a*h,e*=this.cosph0*n-this.sinph0*a*r;break;case this.N_POLE:r=-r,o=-o;case this.S_POLE:Math.abs(o-Proj4js.common.HALF_PI)=l;l++)r*=n,h+=this.A[l]*r;for(var c,m,u=h,d=a,p=1,_=0,f=0,P=0,l=1;6>=l;l++)c=p*u-_*d,m=_*u+p*d,p=c,_=m,f=f+this.B_re[l]*p-this.B_im[l]*_,P=P+this.B_im[l]*p+this.B_re[l]*_;return t.x=P*this.a+this.x0,t.y=f*this.a+this.y0,t},inverse:function(t){for(var i,s,e=t.x,o=t.y,n=e-this.x0,a=o-this.y0,r=a/this.a,h=n/this.a,l=1,c=0,m=0,u=0,d=1;6>=d;d++)i=l*r-c*h,s=c*r+l*h,l=i,c=s,m=m+this.C_re[d]*l-this.C_im[d]*c,u=u+this.C_im[d]*l+this.C_re[d]*c;for(var p=0;this.iterations>p;p++){for(var _,f,P=m,y=u,g=r,L=h,d=2;6>=d;d++)_=P*m-y*u,f=y*m+P*u,P=_,y=f,g+=(d-1)*(this.B_re[d]*P-this.B_im[d]*y),L+=(d-1)*(this.B_im[d]*P+this.B_re[d]*y);P=1,y=0;for(var v=this.B_re[1],j=this.B_im[1],d=2;6>=d;d++)_=P*m-y*u,f=y*m+P*u,P=_,y=f,v+=d*(this.B_re[d]*P-this.B_im[d]*y),j+=d*(this.B_im[d]*P+this.B_re[d]*y);var M=v*v+j*j;m=(g*v+L*j)/M,u=(L*v-g*j)/M}for(var S=m,b=u,x=1,E=0,d=1;9>=d;d++)x*=S,E+=this.D[d]*x;var C=this.lat0+1e5*E*Proj4js.common.SEC_TO_RAD,w=this.long0+b;return t.x=w,t.y=C,t}},Proj4js.Proj.mill={init:function(){},forward:function(t){var i=t.x,s=t.y,e=Proj4js.common.adjust_lon(i-this.long0),o=this.x0+this.a*e,n=this.y0+1.25*this.a*Math.log(Math.tan(Proj4js.common.PI/4+s/2.5));return t.x=o,t.y=n,t},inverse:function(t){t.x-=this.x0,t.y-=this.y0;var i=Proj4js.common.adjust_lon(this.long0+t.x/this.a),s=2.5*(Math.atan(Math.exp(.8*t.y/this.a))-Proj4js.common.PI/4);return t.x=i,t.y=s,t}},Proj4js.Proj.gnom={init:function(){this.sin_p14=Math.sin(this.lat0),this.cos_p14=Math.cos(this.lat0),this.infinity_dist=1e3*this.a,this.rc=1},forward:function(t){var i,s,e,o,n,a,r,h,l=t.x,c=t.y;return e=Proj4js.common.adjust_lon(l-this.long0),i=Math.sin(c),s=Math.cos(c),o=Math.cos(e),a=this.sin_p14*i+this.cos_p14*s*o,n=1,a>0||Math.abs(a)<=Proj4js.common.EPSLN?(r=this.x0+this.a*n*s*Math.sin(e)/a,h=this.y0+this.a*n*(this.cos_p14*i-this.sin_p14*s*o)/a):(Proj4js.reportError("orthoFwdPointError"),r=this.x0+this.infinity_dist*s*Math.sin(e),h=this.y0+this.infinity_dist*(this.cos_p14*i-this.sin_p14*s*o)),t.x=r,t.y=h,t},inverse:function(t){var i,s,e,o,n,a;return t.x=(t.x-this.x0)/this.a,t.y=(t.y-this.y0)/this.a,t.x/=this.k0,t.y/=this.k0,(i=Math.sqrt(t.x*t.x+t.y*t.y))?(o=Math.atan2(i,this.rc),s=Math.sin(o),e=Math.cos(o),a=Proj4js.common.asinz(e*this.sin_p14+t.y*s*this.cos_p14/i),n=Math.atan2(t.x*s,i*this.cos_p14*e-t.y*this.sin_p14*s),n=Proj4js.common.adjust_lon(this.long0+n)):(a=this.phic0,n=0),t.x=n,t.y=a,t}},Proj4js.Proj.sinu={init:function(){this.sphere?(this.n=1,this.m=0,this.es=0,this.C_y=Math.sqrt((this.m+1)/this.n),this.C_x=this.C_y/(this.m+1)):this.en=Proj4js.common.pj_enfn(this.es)},forward:function(t){var i,s,e=t.x,o=t.y;if(e=Proj4js.common.adjust_lon(e-this.long0),this.sphere){if(this.m)for(var n=this.n*Math.sin(o),a=Proj4js.common.MAX_ITER;a;--a){var r=(this.m*o+Math.sin(o)-n)/(this.m+Math.cos(o));if(o-=r,Math.abs(r)o?(o=Math.sin(i),s=this.long0+t.x*Math.sqrt(1-this.es*o*o)/(this.a*Math.cos(i)),e=Proj4js.common.adjust_lon(s)):o-Proj4js.common.EPSLN=0?this.y0+Proj4js.common.PI*this.R*Math.tan(.5*a):this.y0+Proj4js.common.PI*this.R*-Math.tan(.5*a));var r=.5*Math.abs(Proj4js.common.PI/n-n/Proj4js.common.PI),h=r*r,l=Math.sin(a),c=Math.cos(a),m=c/(l+c-1),u=m*m,d=m*(2/l-1),p=d*d,_=Proj4js.common.PI*this.R*(r*(m-p)+Math.sqrt(h*(m-p)*(m-p)-(p+h)*(u-p)))/(p+h);return 0>n&&(_=-_),i=this.x0+_,_=Math.abs(_/(Proj4js.common.PI*this.R)),s=o>=0?this.y0+Proj4js.common.PI*this.R*Math.sqrt(1-_*_-2*r*_):this.y0-Proj4js.common.PI*this.R*Math.sqrt(1-_*_-2*r*_),t.x=i,t.y=s,t},inverse:function(t){var i,s,e,o,n,a,r,h,l,c,m,u,d;return t.x-=this.x0,t.y-=this.y0,m=Proj4js.common.PI*this.R,e=t.x/m,o=t.y/m,n=e*e+o*o,a=-Math.abs(o)*(1+n),r=a-2*o*o+e*e,h=-2*a+1+2*o*o+n*n,d=o*o/h+(2*r*r*r/h/h/h-9*a*r/h/h)/27,l=(a-r*r/3/h)/h,c=2*Math.sqrt(-l/3),m=3*d/l/c,Math.abs(m)>1&&(m=m>=0?1:-1),u=Math.acos(m)/3,s=t.y>=0?(-c*Math.cos(u+Proj4js.common.PI/3)-r/3/h)*Proj4js.common.PI:-(-c*Math.cos(u+Proj4js.common.PI/3)-r/3/h)*Proj4js.common.PI,Math.abs(e)0&&(e=2*Math.atan(o*Proj4js.common.srat(this.e*Math.sin(t.y),-.5*this.e))-Proj4js.common.HALF_PI,!(i>Math.abs(e-t.y)));--n)t.y=e;return n?(t.x=s,t.y=e,t):(Proj4js.reportError("gauss:inverse:convergence failed"),null)}},Proj4js.Proj.omerc={init:function(){this.mode||(this.mode=0),this.lon1||(this.lon1=0,this.mode=1),this.lon2||(this.lon2=0),this.lat2||(this.lat2=0);var t=this.b/this.a,i=1-Math.pow(t,2);Math.sqrt(i),this.sin_p20=Math.sin(this.lat0),this.cos_p20=Math.cos(this.lat0),this.con=1-this.es*this.sin_p20*this.sin_p20,this.com=Math.sqrt(1-i),this.bl=Math.sqrt(1+this.es*Math.pow(this.cos_p20,4)/(1-i)),this.al=this.a*this.bl*this.k0*this.com/this.con,Math.abs(this.lat0)0?this.lat0>=0?this.d+Math.sqrt(this.d*this.d-1):this.d-Math.sqrt(this.d*this.d-1):this.d,this.el=this.f*Math.pow(this.ts,this.bl)),0!=this.mode?(this.g=.5*(this.f-1/this.f),this.gama=Proj4js.common.asinz(Math.sin(this.alpha)/this.d),this.longc=this.longc-Proj4js.common.asinz(this.g*Math.tan(this.gama))/this.bl,this.con=Math.abs(this.lat0),this.con>Proj4js.common.EPSLN&&Math.abs(this.con-Proj4js.common.HALF_PI)>Proj4js.common.EPSLN?(this.singam=Math.sin(this.gama),this.cosgam=Math.cos(this.gama),this.sinaz=Math.sin(this.alpha),this.cosaz=Math.cos(this.alpha),this.u=this.lat0>=0?this.al/this.bl*Math.atan(Math.sqrt(this.d*this.d-1)/this.cosaz):-(this.al/this.bl)*Math.atan(Math.sqrt(this.d*this.d-1)/this.cosaz)):Proj4js.reportError("omerc:Init:DataError")):(this.sinphi=Math.sin(this.at1),this.ts1=Proj4js.common.tsfnz(this.e,this.lat1,this.sinphi),this.sinphi=Math.sin(this.lat2),this.ts2=Proj4js.common.tsfnz(this.e,this.lat2,this.sinphi),this.h=Math.pow(this.ts1,this.bl),this.l=Math.pow(this.ts2,this.bl),this.f=this.el/this.h,this.g=.5*(this.f-1/this.f),this.j=(this.el*this.el-this.l*this.h)/(this.el*this.el+this.l*this.h),this.p=(this.l-this.h)/(this.l+this.h),this.dlon=this.lon1-this.lon2,this.dlon<-Proj4js.common.PI&&(this.lon2=this.lon2-2*Proj4js.common.PI),this.dlon>Proj4js.common.PI&&(this.lon2=this.lon2+2*Proj4js.common.PI),this.dlon=this.lon1-this.lon2,this.longc=.5*(this.lon1+this.lon2)-Math.atan(this.j*Math.tan(.5*this.bl*this.dlon)/this.p)/this.bl,this.dlon=Proj4js.common.adjust_lon(this.lon1-this.longc),this.gama=Math.atan(Math.sin(this.bl*this.dlon)/this.g),this.alpha=Proj4js.common.asinz(this.d*Math.sin(this.gama)),Math.abs(this.lat1-this.lat2)<=Proj4js.common.EPSLN?Proj4js.reportError("omercInitDataError"):this.con=Math.abs(this.lat1),this.con<=Proj4js.common.EPSLN||Math.abs(this.con-Proj4js.common.HALF_PI)<=Proj4js.common.EPSLN?Proj4js.reportError("omercInitDataError"):Math.abs(Math.abs(this.lat0)-Proj4js.common.HALF_PI)<=Proj4js.common.EPSLN&&Proj4js.reportError("omercInitDataError"),this.singam=Math.sin(this.gam),this.cosgam=Math.cos(this.gam),this.sinaz=Math.sin(this.alpha),this.cosaz=Math.cos(this.alpha),this.u=this.lat0>=0?this.al/this.bl*Math.atan(Math.sqrt(this.d*this.d-1)/this.cosaz):-(this.al/this.bl)*Math.atan(Math.sqrt(this.d*this.d-1)/this.cosaz))},forward:function(t){var i,s,e,o,n,a,r,h,l,c,m,u=t.x,d=t.y;i=Math.sin(d),c=Proj4js.common.adjust_lon(u-this.longc),a=Math.sin(this.bl*c),Math.abs(Math.abs(d)-Proj4js.common.HALF_PI)>Proj4js.common.EPSLN?(m=Proj4js.common.tsfnz(this.e,d,i),o=this.el/Math.pow(m,this.bl),l=.5*(o-1/o),s=.5*(o+1/o),r=(l*this.singam-a*this.cosgam)/s,e=Math.cos(this.bl*c),1e-7>Math.abs(e)?n=this.al*this.bl*c:(n=this.al*Math.atan((l*this.cosgam+a*this.singam)/e)/this.bl,0>e&&(n+=Proj4js.common.PI*this.al/this.bl))):(r=d>=0?this.singam:-this.singam,n=this.al*d/this.bl),Math.abs(Math.abs(r)-1)<=Proj4js.common.EPSLN&&Proj4js.reportError("omercFwdInfinity"),h=.5*this.al*Math.log((1-r)/(1+r))/this.bl,n-=this.u;var p=this.x0+h*this.cosaz+n*this.sinaz,_=this.y0+n*this.cosaz-h*this.sinaz;return t.x=p,t.y=_,t},inverse:function(t){var i,s,e,o,n,a,r,h,l,c,m,u,d;return t.x-=this.x0,t.y-=this.y0,d=0,o=t.x*this.cosaz-t.y*this.sinaz,n=t.y*this.cosaz+t.x*this.sinaz,n+=this.u,a=Math.exp(-this.bl*o/this.al),r=.5*(a-1/a),s=.5*(a+1/a),l=Math.sin(this.bl*n/this.al),c=(l*this.cosgam+r*this.singam)/s,Math.abs(Math.abs(c)-1)<=Proj4js.common.EPSLN?(m=this.longc,u=c>=0?Proj4js.common.HALF_PI:-Proj4js.common.HALF_PI):(e=1/this.bl,h=Math.pow(this.el/Math.sqrt((1+c)/(1-c)),e),u=Proj4js.common.phi2z(this.e,h),i=this.longc-Math.atan2(r*this.cosgam-l*this.singam,e)/this.bl,m=Proj4js.common.adjust_lon(i)),t.x=m,t.y=u,t}},Proj4js.Proj.lcc={init:function(){if(this.lat2||(this.lat2=this.lat0),this.k0||(this.k0=1),Math.abs(this.lat1+this.lat2)Proj4js.common.EPSLN?Math.log(e/r)/Math.log(o/h):i,this.f0=e/(this.ns*Math.pow(o,this.ns)),this.rh=this.a*this.f0*Math.pow(l,this.ns),this.title||(this.title="Lambert Conformal Conic")},forward:function(t){var i=t.x,s=t.y;if(!(90>=s&&s>=-90&&180>=i&&i>=-180))return Proj4js.reportError("lcc:forward: llInputOutOfRange: "+i+" : "+s),null;var e,o,n=Math.abs(Math.abs(s)-Proj4js.common.HALF_PI);if(n>Proj4js.common.EPSLN)e=Proj4js.common.tsfnz(this.e,s,Math.sin(s)),o=this.a*this.f0*Math.pow(e,this.ns);else{if(n=s*this.ns,0>=n)return Proj4js.reportError("lcc:forward: No Projection"),null;o=0}var a=this.ns*Proj4js.common.adjust_lon(i-this.long0);return t.x=this.k0*o*Math.sin(a)+this.x0,t.y=this.k0*(this.rh-o*Math.cos(a))+this.y0,t},inverse:function(t){var i,s,e,o,n,a=(t.x-this.x0)/this.k0,r=this.rh-(t.y-this.y0)/this.k0;this.ns>0?(i=Math.sqrt(a*a+r*r),s=1):(i=-Math.sqrt(a*a+r*r),s=-1);var h=0;if(0!=i&&(h=Math.atan2(s*a,s*r)),0!=i||this.ns>0){if(s=1/this.ns,e=Math.pow(i/(this.a*this.f0),s),o=Proj4js.common.phi2z(this.e,e),-9999==o)return null}else o=-Proj4js.common.HALF_PI;return n=Proj4js.common.adjust_lon(h/this.ns+this.long0),t.x=n,t.y=o,t}},Proj4js.Proj.laea={S_POLE:1,N_POLE:2,EQUIT:3,OBLIQ:4,init:function(){var t=Math.abs(this.lat0);if(this.mode=Math.abs(t-Proj4js.common.HALF_PI)this.lat0?this.S_POLE:this.N_POLE:Math.abs(t)0){var i;switch(this.qp=Proj4js.common.qsfnz(this.e,1),this.mmf=.5/(1-this.es),this.apa=this.authset(this.es),this.mode){case this.N_POLE:case this.S_POLE:this.dd=1;break;case this.EQUIT:this.rq=Math.sqrt(.5*this.qp),this.dd=1/this.rq,this.xmf=1,this.ymf=.5*this.qp;break;case this.OBLIQ:this.rq=Math.sqrt(.5*this.qp),i=Math.sin(this.lat0),this.sinb1=Proj4js.common.qsfnz(this.e,i)/this.qp,this.cosb1=Math.sqrt(1-this.sinb1*this.sinb1),this.dd=Math.cos(this.lat0)/(Math.sqrt(1-this.es*i*i)*this.rq*this.cosb1),this.ymf=(this.xmf=this.rq)/this.dd,this.xmf*=this.dd}}else this.mode==this.OBLIQ&&(this.sinph0=Math.sin(this.lat0),this.cosph0=Math.cos(this.lat0))},forward:function(t){var i,s,e=t.x,o=t.y;if(e=Proj4js.common.adjust_lon(e-this.long0),this.sphere){var n,a,r;switch(r=Math.sin(o),a=Math.cos(o),n=Math.cos(e),this.mode){case this.OBLIQ:case this.EQUIT:if(s=this.mode==this.EQUIT?1+a*n:1+this.sinph0*r+this.cosph0*a*n,Proj4js.common.EPSLN>=s)return Proj4js.reportError("laea:fwd:y less than eps"),null;s=Math.sqrt(2/s),i=s*a*Math.sin(e),s*=this.mode==this.EQUIT?r:this.cosph0*r-this.sinph0*a*n;break;case this.N_POLE:n=-n;case this.S_POLE:if(Math.abs(o+this.phi0)=0?(i=(u=Math.sqrt(l))*h,s=n*(this.mode==this.S_POLE?u:-u)):i=s=0}}return t.x=this.a*i+this.x0,t.y=this.a*s+this.y0,t},inverse:function(t){t.x-=this.x0,t.y-=this.y0;var i,s,e=t.x/this.a,o=t.y/this.a;if(this.sphere){var n,a=0,r=0;if(n=Math.sqrt(e*e+o*o),s=.5*n,s>1)return Proj4js.reportError("laea:Inv:DataError"),null;switch(s=2*Math.asin(s),(this.mode==this.OBLIQ||this.mode==this.EQUIT)&&(r=Math.sin(s),a=Math.cos(s)),this.mode){case this.EQUIT:s=Math.abs(n)<=Proj4js.common.EPSLN?0:Math.asin(o*r/n),e*=r,o=a*n;break;case this.OBLIQ:s=Math.abs(n)<=Proj4js.common.EPSLN?this.phi0:Math.asin(a*this.sinph0+o*r*this.cosph0/n),e*=r*this.cosph0,o=(a-Math.sin(s)*this.sinph0)*n;break;case this.N_POLE:o=-o,s=Proj4js.common.HALF_PI-s;break;case this.S_POLE:s-=Proj4js.common.HALF_PI}i=0!=o||this.mode!=this.EQUIT&&this.mode!=this.OBLIQ?Math.atan2(e,o):0}else{var h,l,c,m,u=0;switch(this.mode){case this.EQUIT:case this.OBLIQ:if(e/=this.dd,o*=this.dd,m=Math.sqrt(e*e+o*o),Proj4js.common.EPSLN>m)return t.x=0,t.y=this.phi0,t;l=2*Math.asin(.5*m/this.rq),h=Math.cos(l),e*=l=Math.sin(l),this.mode==this.OBLIQ?(u=h*this.sinb1+o*l*this.cosb1/m,c=this.qp*u,o=m*this.cosb1*h-o*this.sinb1*l):(u=o*l/m,c=this.qp*u,o=m*h);break;case this.N_POLE:o=-o;case this.S_POLE:if(c=e*e+o*o,!c)return t.x=0,t.y=this.phi0,t;u=1-c/this.qp,this.mode==this.S_POLE&&(u=-u)}i=Math.atan2(e,o),s=this.authlat(Math.asin(u),this.apa)}return t.x=Proj4js.common.adjust_lon(this.long0+i),t.y=s,t},P00:.3333333333333333,P01:.17222222222222222,P02:.10257936507936508,P10:.06388888888888888,P11:.0664021164021164,P20:.016415012942191543,authset:function(t){var i,s=[];return s[0]=t*this.P00,i=t*t,s[0]+=i*this.P01,s[1]=i*this.P10,i*=t,s[0]+=i*this.P02,s[1]+=i*this.P11,s[2]=i*this.P20,s},authlat:function(t,i){var s=t+t;return t+i[0]*Math.sin(s)+i[1]*Math.sin(s+s)+i[2]*Math.sin(s+s+s)}},Proj4js.Proj.aeqd={init:function(){this.sin_p12=Math.sin(this.lat0),this.cos_p12=Math.cos(this.lat0)},forward:function(t){var i=t.x;t.y;var s,e=Math.sin(t.y),o=Math.cos(t.y),n=Proj4js.common.adjust_lon(i-this.long0),a=Math.cos(n),r=this.sin_p12*e+this.cos_p12*o*a;if(Math.abs(Math.abs(r)-1)r)return Proj4js.reportError("aeqd:Fwd:PointError"),void 0}else{var h=Math.acos(r);s=h/Math.sin(h)}return t.x=this.x0+this.a*s*o*Math.sin(n),t.y=this.y0+this.a*s*(this.cos_p12*e-this.sin_p12*o*a),t},inverse:function(t){t.x-=this.x0,t.y-=this.y0;var i=Math.sqrt(t.x*t.x+t.y*t.y);if(i>2*Proj4js.common.HALF_PI*this.a)return Proj4js.reportError("aeqdInvDataError"),void 0;var s,e=i/this.a,o=Math.sin(e),n=Math.cos(e),a=this.long0;if(Math.abs(i)<=Proj4js.common.EPSLN)s=this.lat0;else{s=Proj4js.common.asinz(n*this.sin_p12+t.y*o*this.cos_p12/i);var r=Math.abs(this.lat0)-Proj4js.common.HALF_PI;Math.abs(r)<=Proj4js.common.EPSLN?a=this.lat0>=0?Proj4js.common.adjust_lon(this.long0+Math.atan2(t.x,-t.y)):Proj4js.common.adjust_lon(this.long0-Math.atan2(-t.x,t.y)):(r=n-this.sin_p12*Math.sin(s),Math.abs(r)=50&&Proj4js.reportError("moll:Fwd:IterationError")}o/=2,Proj4js.common.PI/2-Math.abs(s).999999999999&&(s=.999999999999);var i=Math.asin(s),e=Proj4js.common.adjust_lon(this.long0+t.x/(.900316316158*this.a*Math.cos(i)));-Proj4js.common.PI>e&&(e=-Proj4js.common.PI),e>Proj4js.common.PI&&(e=Proj4js.common.PI),s=(2*i+Math.sin(2*i))/Proj4js.common.PI,Math.abs(s)>1&&(s=1);var o=Math.asin(s);return t.x=e,t.y=o,t}},function(t,i,s){var e,o;typeof exports!=s+""?e=exports:(o=t.L,e={},e.noConflict=function(){return t.L=o,this},t.L=e),e.version="0.5.1",e.Util={extend:function(t){var i,s,e,o,n=Array.prototype.slice.call(arguments,1);for(s=0,e=n.length;e>s;s++){o=n[s]||{};for(i in o)o.hasOwnProperty(i)&&(t[i]=o[i])}return t},bind:function(t,i){var s=arguments.length>2?Array.prototype.slice.call(arguments,2):null;return function(){return t.apply(i,s||arguments)}},stamp:function(){var t=0,i="_leaflet_id";return function(s){return s[i]=s[i]||++t,s[i]}}(),limitExecByInterval:function(t,i,e){var o,n;return function a(){var r=arguments;return o?(n=!0,s):(o=!0,setTimeout(function(){o=!1,n&&(a.apply(e,r),n=!1)},i),t.apply(e,r),s)}},falseFn:function(){return!1},formatNum:function(t,i){var s=Math.pow(10,i||5);return Math.round(t*s)/s},splitWords:function(t){return t.replace(/^\s+|\s+$/g,"").split(/\s+/)},setOptions:function(t,i){return t.options=e.extend({},t.options,i),t.options},getParamString:function(t,i){var s=[];for(var e in t)t.hasOwnProperty(e)&&s.push(e+"="+t[e]);return(i&&-1!==i.indexOf("?")?"&":"?")+s.join("&")},template:function(t,i){return t.replace(/\{ *([\w_]+) *\}/g,function(t,s){var e=i[s];if(!i.hasOwnProperty(s))throw Error("No value provided for variable "+t);return e})},isArray:function(t){return"[object Array]"===Object.prototype.toString.call(t)},emptyImageUrl:"data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs="},function(){function i(i){var s,e,o=["webkit","moz","o","ms"];for(s=0;o.length>s&&!e;s++)e=t[o[s]+i];return e}function o(i){var s=+new Date,e=Math.max(0,16-(s-n));return n=s+e,t.setTimeout(i,e)}var n=0,a=t.requestAnimationFrame||i("RequestAnimationFrame")||o,r=t.cancelAnimationFrame||i("CancelAnimationFrame")||i("CancelRequestAnimationFrame")||function(i){t.clearTimeout(i)};e.Util.requestAnimFrame=function(i,n,r,h){return i=e.bind(i,n),r&&a===o?(i(),s):a.call(t,i,h)},e.Util.cancelAnimFrame=function(i){i&&r.call(t,i)}}(),e.extend=e.Util.extend,e.bind=e.Util.bind,e.stamp=e.Util.stamp,e.setOptions=e.Util.setOptions,e.Class=function(){},e.Class.extend=function(t){var i=function(){this.initialize&&this.initialize.apply(this,arguments),this._initHooks&&this.callInitHooks()},s=function(){};s.prototype=this.prototype;var o=new s;o.constructor=i,i.prototype=o;for(var n in this)this.hasOwnProperty(n)&&"prototype"!==n&&(i[n]=this[n]);t.statics&&(e.extend(i,t.statics),delete t.statics),t.includes&&(e.Util.extend.apply(null,[o].concat(t.includes)),delete t.includes),t.options&&o.options&&(t.options=e.extend({},o.options,t.options)),e.extend(o,t),o._initHooks=[];var a=this;return o.callInitHooks=function(){if(!this._initHooksCalled){a.prototype.callInitHooks&&a.prototype.callInitHooks.call(this),this._initHooksCalled=!0;for(var t=0,i=o._initHooks.length;i>t;t++)o._initHooks[t].call(this)}},i},e.Class.include=function(t){e.extend(this.prototype,t)},e.Class.mergeOptions=function(t){e.extend(this.prototype.options,t)},e.Class.addInitHook=function(t){var i=Array.prototype.slice.call(arguments,1),s="function"==typeof t?t:function(){this[t].apply(this,i)};this.prototype._initHooks=this.prototype._initHooks||[],this.prototype._initHooks.push(s)};var n="_leaflet_events";e.Mixin={},e.Mixin.Events={addEventListener:function(t,i,s){var o,a,r,h=this[n]=this[n]||{};if("object"==typeof t){for(o in t)t.hasOwnProperty(o)&&this.addEventListener(o,t[o],i);return this}for(t=e.Util.splitWords(t),a=0,r=t.length;r>a;a++)h[t[a]]=h[t[a]]||[],h[t[a]].push({action:i,context:s||this});return this},hasEventListeners:function(t){return n in this&&t in this[n]&&this[n][t].length>0},removeEventListener:function(t,i,s){var o,a,r,h,l,c=this[n];if("object"==typeof t){for(o in t)t.hasOwnProperty(o)&&this.removeEventListener(o,t[o],i);return this}for(t=e.Util.splitWords(t),a=0,r=t.length;r>a;a++)if(this.hasEventListeners(t[a]))for(h=c[t[a]],l=h.length-1;l>=0;l--)i&&h[l].action!==i||s&&h[l].context!==s||h.splice(l,1);return this},fireEvent:function(t,i){if(!this.hasEventListeners(t))return this;for(var s=e.extend({type:t,target:this},i),o=this[n][t].slice(),a=0,r=o.length;r>a;a++)o[a].action.call(o[a].context||this,s);return this}},e.Mixin.Events.on=e.Mixin.Events.addEventListener,e.Mixin.Events.off=e.Mixin.Events.removeEventListener,e.Mixin.Events.fire=e.Mixin.Events.fireEvent,function(){var o=!!t.ActiveXObject,n=o&&!t.XMLHttpRequest,a=o&&!i.querySelector,r=navigator.userAgent.toLowerCase(),h=-1!==r.indexOf("webkit"),l=-1!==r.indexOf("chrome"),c=-1!==r.indexOf("android"),m=-1!==r.search("android [23]"),u=typeof orientation!=s+"",d=t.navigator&&t.navigator.msPointerEnabled&&t.navigator.msMaxTouchPoints,p="devicePixelRatio"in t&&t.devicePixelRatio>1||"matchMedia"in t&&t.matchMedia("(min-resolution:144dpi)")&&t.matchMedia("(min-resolution:144dpi)").matches,_=i.documentElement,f=o&&"transition"in _.style,P="WebKitCSSMatrix"in t&&"m11"in new t.WebKitCSSMatrix,y="MozPerspective"in _.style,g="OTransition"in _.style,L=!t.L_DISABLE_3D&&(f||P||y||g),v=!t.L_NO_TOUCH&&function(){var t="ontouchstart";if(d||t in _)return!0;var s=i.createElement("div"),e=!1;return s.setAttribute?(s.setAttribute(t,"return;"),"function"==typeof s[t]&&(e=!0),s.removeAttribute(t),s=null,e):!1}();e.Browser={ie:o,ie6:n,ie7:a,webkit:h,android:c,android23:m,chrome:l,ie3d:f,webkit3d:P,gecko3d:y,opera3d:g,any3d:L,mobile:u,mobileWebkit:u&&h,mobileWebkit3d:u&&P,mobileOpera:u&&t.opera,touch:v,msTouch:d,retina:p}}(),e.Point=function(t,i,s){this.x=s?Math.round(t):t,this.y=s?Math.round(i):i},e.Point.prototype={clone:function(){return new e.Point(this.x,this.y)},add:function(t){return this.clone()._add(e.point(t))},_add:function(t){return this.x+=t.x,this.y+=t.y,this},subtract:function(t){return this.clone()._subtract(e.point(t))},_subtract:function(t){return this.x-=t.x,this.y-=t.y,this},divideBy:function(t){return this.clone()._divideBy(t)},_divideBy:function(t){return this.x/=t,this.y/=t,this},multiplyBy:function(t){return this.clone()._multiplyBy(t)},_multiplyBy:function(t){return this.x*=t,this.y*=t,this},round:function(){return this.clone()._round()},_round:function(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this},floor:function(){return this.clone()._floor()},_floor:function(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this},distanceTo:function(t){t=e.point(t);var i=t.x-this.x,s=t.y-this.y;return Math.sqrt(i*i+s*s)},equals:function(t){return t.x===this.x&&t.y===this.y},toString:function(){return"Point("+e.Util.formatNum(this.x)+", "+e.Util.formatNum(this.y)+")"}},e.point=function(t,i,s){return t instanceof e.Point?t:e.Util.isArray(t)?new e.Point(t[0],t[1]):isNaN(t)?t:new e.Point(t,i,s)},e.Bounds=function(t,i){if(t)for(var s=i?[t,i]:t,e=0,o=s.length;o>e;e++)this.extend(s[e])},e.Bounds.prototype={extend:function(t){return t=e.point(t),this.min||this.max?(this.min.x=Math.min(t.x,this.min.x),this.max.x=Math.max(t.x,this.max.x),this.min.y=Math.min(t.y,this.min.y),this.max.y=Math.max(t.y,this.max.y)):(this.min=t.clone(),this.max=t.clone()),this},getCenter:function(t){return new e.Point((this.min.x+this.max.x)/2,(this.min.y+this.max.y)/2,t)},getBottomLeft:function(){return new e.Point(this.min.x,this.max.y)},getTopRight:function(){return new e.Point(this.max.x,this.min.y)},getSize:function(){return this.max.subtract(this.min)},contains:function(t){var i,s;return t="number"==typeof t[0]||t instanceof e.Point?e.point(t):e.bounds(t),t instanceof e.Bounds?(i=t.min,s=t.max):i=s=t,i.x>=this.min.x&&s.x<=this.max.x&&i.y>=this.min.y&&s.y<=this.max.y},intersects:function(t){t=e.bounds(t);var i=this.min,s=this.max,o=t.min,n=t.max,a=n.x>=i.x&&o.x<=s.x,r=n.y>=i.y&&o.y<=s.y;return a&&r},isValid:function(){return!(!this.min||!this.max)}},e.bounds=function(t,i){return!t||t instanceof e.Bounds?t:new e.Bounds(t,i)},e.Transformation=function(t,i,s,e){this._a=t,this._b=i,this._c=s,this._d=e},e.Transformation.prototype={transform:function(t,i){return this._transform(t.clone(),i)},_transform:function(t,i){return i=i||1,t.x=i*(this._a*t.x+this._b),t.y=i*(this._c*t.y+this._d),t},untransform:function(t,i){return i=i||1,new e.Point((t.x/i-this._b)/this._a,(t.y/i-this._d)/this._c)}},e.DomUtil={get:function(t){return"string"==typeof t?i.getElementById(t):t},getStyle:function(t,s){var e=t.style[s];if(!e&&t.currentStyle&&(e=t.currentStyle[s]),(!e||"auto"===e)&&i.defaultView){var o=i.defaultView.getComputedStyle(t,null);e=o?o[s]:null}return"auto"===e?null:e},getViewportOffset:function(t){var s,o=0,n=0,a=t,r=i.body,h=e.Browser.ie7;do{if(o+=a.offsetTop||0,n+=a.offsetLeft||0,o+=parseInt(e.DomUtil.getStyle(a,"borderTopWidth"),10)||0,n+=parseInt(e.DomUtil.getStyle(a,"borderLeftWidth"),10)||0,s=e.DomUtil.getStyle(a,"position"),a.offsetParent===r&&"absolute"===s)break;if("fixed"===s){o+=r.scrollTop||0,n+=r.scrollLeft||0;break}a=a.offsetParent}while(a);a=t;do{if(a===r)break;o-=a.scrollTop||0,n-=a.scrollLeft||0,e.DomUtil.documentIsLtr()||!e.Browser.webkit&&!h||(n+=a.scrollWidth-a.clientWidth,h&&"hidden"!==e.DomUtil.getStyle(a,"overflow-y")&&"hidden"!==e.DomUtil.getStyle(a,"overflow")&&(n+=17)),a=a.parentNode}while(a);return new e.Point(n,o)},documentIsLtr:function(){return e.DomUtil._docIsLtrCached||(e.DomUtil._docIsLtrCached=!0,e.DomUtil._docIsLtr="ltr"===e.DomUtil.getStyle(i.body,"direction")),e.DomUtil._docIsLtr},create:function(t,s,e){var o=i.createElement(t);return o.className=s,e&&e.appendChild(o),o},disableTextSelection:function(){i.selection&&i.selection.empty&&i.selection.empty(),this._onselectstart||(this._onselectstart=i.onselectstart||null,i.onselectstart=e.Util.falseFn)},enableTextSelection:function(){i.onselectstart===e.Util.falseFn&&(i.onselectstart=this._onselectstart,this._onselectstart=null)},hasClass:function(t,i){return t.className.length>0&&RegExp("(^|\\s)"+i+"(\\s|$)").test(t.className)},addClass:function(t,i){e.DomUtil.hasClass(t,i)||(t.className+=(t.className?" ":"")+i)},removeClass:function(t,i){function s(t,s){return s===i?"":t}t.className=t.className.replace(/(\S+)\s*/g,s).replace(/(^\s+|\s+$)/,"")},setOpacity:function(t,i){if("opacity"in t.style)t.style.opacity=i;else if("filter"in t.style){var s=!1,e="DXImageTransform.Microsoft.Alpha";try{s=t.filters.item(e)}catch(o){}i=Math.round(100*i),s?(s.Enabled=100!==i,s.Opacity=i):t.style.filter+=" progid:"+e+"(opacity="+i+")"}},testProp:function(t){for(var s=i.documentElement.style,e=0;t.length>e;e++)if(t[e]in s)return t[e];return!1},getTranslateString:function(t){var i=e.Browser.webkit3d,s="translate"+(i?"3d":"")+"(",o=(i?",0":"")+")";return s+t.x+"px,"+t.y+"px"+o},getScaleString:function(t,i){var s=e.DomUtil.getTranslateString(i.add(i.multiplyBy(-1*t))),o=" scale("+t+") ";return s+o},setPosition:function(t,i,s){t._leaflet_pos=i,!s&&e.Browser.any3d?(t.style[e.DomUtil.TRANSFORM]=e.DomUtil.getTranslateString(i),e.Browser.mobileWebkit3d&&(t.style.WebkitBackfaceVisibility="hidden")):(t.style.left=i.x+"px",t.style.top=i.y+"px")},getPosition:function(t){return t._leaflet_pos}},e.DomUtil.TRANSFORM=e.DomUtil.testProp(["transform","WebkitTransform","OTransform","MozTransform","msTransform"]),e.DomUtil.TRANSITION=e.DomUtil.testProp(["webkitTransition","transition","OTransition","MozTransition","msTransition"]),e.DomUtil.TRANSITION_END="webkitTransition"===e.DomUtil.TRANSITION||"OTransition"===e.DomUtil.TRANSITION?e.DomUtil.TRANSITION+"End":"transitionend",e.LatLng=function(t,i){var s=parseFloat(t),e=parseFloat(i);if(isNaN(s)||isNaN(e))throw Error("Invalid LatLng object: ("+t+", "+i+")");this.lat=s,this.lng=e},e.extend(e.LatLng,{DEG_TO_RAD:Math.PI/180,RAD_TO_DEG:180/Math.PI,MAX_MARGIN:1e-9}),e.LatLng.prototype={equals:function(t){if(!t)return!1;t=e.latLng(t);var i=Math.max(Math.abs(this.lat-t.lat),Math.abs(this.lng-t.lng));return e.LatLng.MAX_MARGIN>=i},toString:function(t){return"LatLng("+e.Util.formatNum(this.lat,t)+", "+e.Util.formatNum(this.lng,t)+")"},distanceTo:function(t){t=e.latLng(t);var i=6378137,s=e.LatLng.DEG_TO_RAD,o=(t.lat-this.lat)*s,n=(t.lng-this.lng)*s,a=this.lat*s,r=t.lat*s,h=Math.sin(o/2),l=Math.sin(n/2),c=h*h+l*l*Math.cos(a)*Math.cos(r);return 2*i*Math.atan2(Math.sqrt(c),Math.sqrt(1-c))},wrap:function(t,i){var s=this.lng;return t=t||-180,i=i||180,s=(s+i)%(i-t)+(t>s||s===i?i:t),new e.LatLng(this.lat,s)}},e.latLng=function(t,i){return t instanceof e.LatLng?t:e.Util.isArray(t)?new e.LatLng(t[0],t[1]):isNaN(t)?t:new e.LatLng(t,i)},e.LatLngBounds=function(t,i){if(t)for(var s=i?[t,i]:t,e=0,o=s.length;o>e;e++)this.extend(s[e])},e.LatLngBounds.prototype={extend:function(t){return t="number"==typeof t[0]||"string"==typeof t[0]||t instanceof e.LatLng?e.latLng(t):e.latLngBounds(t),t instanceof e.LatLng?this._southWest||this._northEast?(this._southWest.lat=Math.min(t.lat,this._southWest.lat),this._southWest.lng=Math.min(t.lng,this._southWest.lng),this._northEast.lat=Math.max(t.lat,this._northEast.lat),this._northEast.lng=Math.max(t.lng,this._northEast.lng)):(this._southWest=new e.LatLng(t.lat,t.lng),this._northEast=new e.LatLng(t.lat,t.lng)):t instanceof e.LatLngBounds&&(this.extend(t._southWest),this.extend(t._northEast)),this},pad:function(t){var i=this._southWest,s=this._northEast,o=Math.abs(i.lat-s.lat)*t,n=Math.abs(i.lng-s.lng)*t;return new e.LatLngBounds(new e.LatLng(i.lat-o,i.lng-n),new e.LatLng(s.lat+o,s.lng+n))},getCenter:function(){return new e.LatLng((this._southWest.lat+this._northEast.lat)/2,(this._southWest.lng+this._northEast.lng)/2)},getSouthWest:function(){return this._southWest},getNorthEast:function(){return this._northEast},getNorthWest:function(){return new e.LatLng(this._northEast.lat,this._southWest.lng)},getSouthEast:function(){return new e.LatLng(this._southWest.lat,this._northEast.lng)},contains:function(t){t="number"==typeof t[0]||t instanceof e.LatLng?e.latLng(t):e.latLngBounds(t);var i,s,o=this._southWest,n=this._northEast;return t instanceof e.LatLngBounds?(i=t.getSouthWest(),s=t.getNorthEast()):i=s=t,i.lat>=o.lat&&s.lat<=n.lat&&i.lng>=o.lng&&s.lng<=n.lng},intersects:function(t){t=e.latLngBounds(t);var i=this._southWest,s=this._northEast,o=t.getSouthWest(),n=t.getNorthEast(),a=n.lat>=i.lat&&o.lat<=s.lat,r=n.lng>=i.lng&&o.lng<=s.lng;return a&&r},toBBoxString:function(){var t=this._southWest,i=this._northEast;return[t.lng,t.lat,i.lng,i.lat].join(",")},equals:function(t){return t?(t=e.latLngBounds(t),this._southWest.equals(t.getSouthWest())&&this._northEast.equals(t.getNorthEast())):!1},isValid:function(){return!(!this._southWest||!this._northEast)}},e.latLngBounds=function(t,i){return!t||t instanceof e.LatLngBounds?t:new e.LatLngBounds(t,i)},e.Projection={},e.Projection.SphericalMercator={MAX_LATITUDE:85.0511287798,project:function(t){var i=e.LatLng.DEG_TO_RAD,s=this.MAX_LATITUDE,o=Math.max(Math.min(s,t.lat),-s),n=t.lng*i,a=o*i;return a=Math.log(Math.tan(Math.PI/4+a/2)),new e.Point(n,a)},unproject:function(t){var i=e.LatLng.RAD_TO_DEG,s=t.x*i,o=(2*Math.atan(Math.exp(t.y))-Math.PI/2)*i;return new e.LatLng(o,s)}},e.Projection.LonLat={project:function(t){return new e.Point(t.lng,t.lat)},unproject:function(t){return new e.LatLng(t.y,t.x)}},e.CRS={latLngToPoint:function(t,i){var s=this.projection.project(t),e=this.scale(i);return this.transformation._transform(s,e)},pointToLatLng:function(t,i){var s=this.scale(i),e=this.transformation.untransform(t,s);return this.projection.unproject(e)},project:function(t){return this.projection.project(t)},scale:function(t){return 256*Math.pow(2,t)}},e.CRS.Simple=e.extend({},e.CRS,{projection:e.Projection.LonLat,transformation:new e.Transformation(1,0,-1,0),scale:function(t){return Math.pow(2,t)}}),e.CRS.EPSG3857=e.extend({},e.CRS,{code:"EPSG:3857",projection:e.Projection.SphericalMercator,transformation:new e.Transformation(.5/Math.PI,.5,-.5/Math.PI,.5),project:function(t){var i=this.projection.project(t),s=6378137;return i.multiplyBy(s)}}),e.CRS.EPSG900913=e.extend({},e.CRS.EPSG3857,{code:"EPSG:900913"}),e.CRS.EPSG4326=e.extend({},e.CRS,{code:"EPSG:4326",projection:e.Projection.LonLat,transformation:new e.Transformation(1/360,.5,-1/360,.5)}),e.Map=e.Class.extend({includes:e.Mixin.Events,options:{crs:e.CRS.EPSG3857,fadeAnimation:e.DomUtil.TRANSITION&&!e.Browser.android23,trackResize:!0,markerZoomAnimation:e.DomUtil.TRANSITION&&e.Browser.any3d},initialize:function(t,i){i=e.setOptions(this,i),this._initContainer(t),this._initLayout(),this.callInitHooks(),this._initEvents(),i.maxBounds&&this.setMaxBounds(i.maxBounds),i.center&&i.zoom!==s&&this.setView(e.latLng(i.center),i.zoom,!0),this._initLayers(i.layers)},setView:function(t,i){return this._resetView(e.latLng(t),this._limitZoom(i)),this},setZoom:function(t){return this.setView(this.getCenter(),t)},zoomIn:function(t){return this.setZoom(this._zoom+(t||1))},zoomOut:function(t){return this.setZoom(this._zoom-(t||1))},fitBounds:function(t){var i=this.getBoundsZoom(t);return this.setView(e.latLngBounds(t).getCenter(),i)},fitWorld:function(){var t=new e.LatLng(-60,-170),i=new e.LatLng(85,179);return this.fitBounds(new e.LatLngBounds(t,i))},panTo:function(t){return this.setView(t,this._zoom)},panBy:function(t){return this.fire("movestart"),this._rawPanBy(e.point(t)),this.fire("move"),this.fire("moveend")},setMaxBounds:function(t){if(t=e.latLngBounds(t),this.options.maxBounds=t,!t)return this._boundsMinZoom=null,this;var i=this.getBoundsZoom(t,!0);return this._boundsMinZoom=i,this._loaded&&(i>this._zoom?this.setView(t.getCenter(),i):this.panInsideBounds(t)),this},panInsideBounds:function(t){t=e.latLngBounds(t);var i=this.getBounds(),s=this.project(i.getSouthWest()),o=this.project(i.getNorthEast()),n=this.project(t.getSouthWest()),a=this.project(t.getNorthEast()),r=0,h=0;return o.ya.x&&(r=a.x-o.x),s.y>n.y&&(h=n.y-s.y),s.x=r);return m&&i?null:i?r:r-1},getSize:function(){return(!this._size||this._sizeChanged)&&(this._size=new e.Point(this._container.clientWidth,this._container.clientHeight),this._sizeChanged=!1),this._size.clone()},getPixelBounds:function(){var t=this._getTopLeftPoint();return new e.Bounds(t,t.add(this.getSize()))},getPixelOrigin:function(){return this._initialTopLeftPoint},getPanes:function(){return this._panes},getContainer:function(){return this._container},getZoomScale:function(t){var i=this.options.crs;return i.scale(t)/i.scale(this._zoom)},getScaleZoom:function(t){return this._zoom+Math.log(t)/Math.LN2},project:function(t,i){return i=i===s?this._zoom:i,this.options.crs.latLngToPoint(e.latLng(t),i)},unproject:function(t,i){return i=i===s?this._zoom:i,this.options.crs.pointToLatLng(e.point(t),i)},layerPointToLatLng:function(t){var i=e.point(t).add(this._initialTopLeftPoint);return this.unproject(i)},latLngToLayerPoint:function(t){var i=this.project(e.latLng(t))._round();return i._subtract(this._initialTopLeftPoint)},containerPointToLayerPoint:function(t){return e.point(t).subtract(this._getMapPanePos())},layerPointToContainerPoint:function(t){return e.point(t).add(this._getMapPanePos())},containerPointToLatLng:function(t){var i=this.containerPointToLayerPoint(e.point(t));return this.layerPointToLatLng(i)},latLngToContainerPoint:function(t){return this.layerPointToContainerPoint(this.latLngToLayerPoint(e.latLng(t)))},mouseEventToContainerPoint:function(t){return e.DomEvent.getMousePosition(t,this._container)},mouseEventToLayerPoint:function(t){return this.containerPointToLayerPoint(this.mouseEventToContainerPoint(t))},mouseEventToLatLng:function(t){return this.layerPointToLatLng(this.mouseEventToLayerPoint(t))},_initContainer:function(t){var i=this._container=e.DomUtil.get(t);if(i._leaflet)throw Error("Map container is already initialized.");i._leaflet=!0},_initLayout:function(){var t=this._container;e.DomUtil.addClass(t,"leaflet-container"),e.Browser.touch&&e.DomUtil.addClass(t,"leaflet-touch"),this.options.fadeAnimation&&e.DomUtil.addClass(t,"leaflet-fade-anim");var i=e.DomUtil.getStyle(t,"position");"absolute"!==i&&"relative"!==i&&"fixed"!==i&&(t.style.position="relative"),this._initPanes(),this._initControlPos&&this._initControlPos()},_initPanes:function(){var t=this._panes={};this._mapPane=t.mapPane=this._createPane("leaflet-map-pane",this._container),this._tilePane=t.tilePane=this._createPane("leaflet-tile-pane",this._mapPane),t.objectsPane=this._createPane("leaflet-objects-pane",this._mapPane),t.shadowPane=this._createPane("leaflet-shadow-pane"),t.overlayPane=this._createPane("leaflet-overlay-pane"),t.markerPane=this._createPane("leaflet-marker-pane"),t.popupPane=this._createPane("leaflet-popup-pane");var i=" leaflet-zoom-hide";this.options.markerZoomAnimation||(e.DomUtil.addClass(t.markerPane,i),e.DomUtil.addClass(t.shadowPane,i),e.DomUtil.addClass(t.popupPane,i))},_createPane:function(t,i){return e.DomUtil.create("div",t,i||this._panes.objectsPane)},_initLayers:function(t){t=t?e.Util.isArray(t)?t:[t]:[],this._layers={},this._zoomBoundLayers={},this._tileLayersNum=0;var i,s;for(i=0,s=t.length;s>i;i++)this.addLayer(t[i])},_resetView:function(t,i,s,o){var n=this._zoom!==i;o||(this.fire("movestart"),n&&this.fire("zoomstart")),this._zoom=i,this._initialTopLeftPoint=this._getNewTopLeftPoint(t),s?this._initialTopLeftPoint._add(this._getMapPanePos()):e.DomUtil.setPosition(this._mapPane,new e.Point(0,0)),this._tileLayersToLoad=this._tileLayersNum;var a=!this._loaded;this._loaded=!0,this.fire("viewreset",{hard:!s}),this.fire("move"),(n||o)&&this.fire("zoomend"),this.fire("moveend",{hard:!s}),a&&this.fire("load")},_rawPanBy:function(t){e.DomUtil.setPosition(this._mapPane,this._getMapPanePos().subtract(t))},_updateZoomLevels:function(){var t,i=1/0,e=-1/0;for(t in this._zoomBoundLayers)if(this._zoomBoundLayers.hasOwnProperty(t)){var o=this._zoomBoundLayers[t];isNaN(o.options.minZoom)||(i=Math.min(i,o.options.minZoom)),isNaN(o.options.maxZoom)||(e=Math.max(e,o.options.maxZoom))}t===s?this._layersMaxZoom=this._layersMinZoom=s:(this._layersMaxZoom=e,this._layersMinZoom=i)},_initEvents:function(){if(e.DomEvent){e.DomEvent.on(this._container,"click",this._onMouseClick,this);var i,s,o=["dblclick","mousedown","mouseup","mouseenter","mouseleave","mousemove","contextmenu"];for(i=0,s=o.length;s>i;i++)e.DomEvent.on(this._container,o[i],this._fireMouseEvent,this);this.options.trackResize&&e.DomEvent.on(t,"resize",this._onResize,this)}},_onResize:function(){e.Util.cancelAnimFrame(this._resizeRequest),this._resizeRequest=e.Util.requestAnimFrame(this.invalidateSize,this,!1,this._container)},_onMouseClick:function(t){!this._loaded||this.dragging&&this.dragging.moved()||(this.fire("preclick"),this._fireMouseEvent(t))},_fireMouseEvent:function(t){if(this._loaded){var i=t.type;if(i="mouseenter"===i?"mouseover":"mouseleave"===i?"mouseout":i,this.hasEventListeners(i)){"contextmenu"===i&&e.DomEvent.preventDefault(t);var s=this.mouseEventToContainerPoint(t),o=this.containerPointToLayerPoint(s),n=this.layerPointToLatLng(o);this.fire(i,{latlng:n,layerPoint:o,containerPoint:s,originalEvent:t})}}},_onTileLayerLoad:function(){this._tileLayersToLoad--,this._tileLayersNum&&!this._tileLayersToLoad&&this._tileBg&&(clearTimeout(this._clearTileBgTimer),this._clearTileBgTimer=setTimeout(e.bind(this._clearTileBg,this),500))},whenReady:function(t,i){return this._loaded?t.call(i||this,this):this.on("load",t,i),this},_getMapPanePos:function(){return e.DomUtil.getPosition(this._mapPane)},_getTopLeftPoint:function(){if(!this._loaded)throw Error("Set map center and zoom first.");return this._initialTopLeftPoint.subtract(this._getMapPanePos())},_getNewTopLeftPoint:function(t,i){var s=this.getSize()._divideBy(2);return this.project(t,i)._subtract(s)._round()},_latLngToNewLayerPoint:function(t,i,s){var e=this._getNewTopLeftPoint(s,i).add(this._getMapPanePos());return this.project(t,i)._subtract(e)},_getCenterLayerPoint:function(){return this.containerPointToLayerPoint(this.getSize()._divideBy(2))},_getCenterOffset:function(t){return this.latLngToLayerPoint(t).subtract(this._getCenterLayerPoint())},_limitZoom:function(t){var i=this.getMinZoom(),s=this.getMaxZoom();return Math.max(i,Math.min(s,t))}}),e.map=function(t,i){return new e.Map(t,i)},e.Projection.Mercator={MAX_LATITUDE:85.0840591556,R_MINOR:6356752.3142,R_MAJOR:6378137,project:function(t){var i=e.LatLng.DEG_TO_RAD,s=this.MAX_LATITUDE,o=Math.max(Math.min(s,t.lat),-s),n=this.R_MAJOR,a=this.R_MINOR,r=t.lng*i*n,h=o*i,l=a/n,c=Math.sqrt(1-l*l),m=c*Math.sin(h);m=Math.pow((1-m)/(1+m),.5*c);var u=Math.tan(.5*(.5*Math.PI-h))/m;return h=-a*Math.log(u),new e.Point(r,h)},unproject:function(t){for(var i,s=e.LatLng.RAD_TO_DEG,o=this.R_MAJOR,n=this.R_MINOR,a=t.x*s/o,r=n/o,h=Math.sqrt(1-r*r),l=Math.exp(-t.y/n),c=Math.PI/2-2*Math.atan(l),m=15,u=1e-7,d=m,p=.1;Math.abs(p)>u&&--d>0;)i=h*Math.sin(c),p=Math.PI/2-2*Math.atan(l*Math.pow((1-i)/(1+i),.5*h))-c,c+=p;return new e.LatLng(c*s,a)}},e.CRS.EPSG3395=e.extend({},e.CRS,{code:"EPSG:3395",projection:e.Projection.Mercator,transformation:function(){var t=e.Projection.Mercator,i=t.R_MAJOR,s=t.R_MINOR;return new e.Transformation(.5/(Math.PI*i),.5,-.5/(Math.PI*s),.5)}()}),e.TileLayer=e.Class.extend({includes:e.Mixin.Events,options:{minZoom:0,maxZoom:18,tileSize:256,subdomains:"abc",errorTileUrl:"",attribution:"",zoomOffset:0,opacity:1,unloadInvisibleTiles:e.Browser.mobile,updateWhenIdle:e.Browser.mobile},initialize:function(t,i){i=e.setOptions(this,i),i.detectRetina&&e.Browser.retina&&i.maxZoom>0&&(i.tileSize=Math.floor(i.tileSize/2),i.zoomOffset++,i.minZoom>0&&i.minZoom--,this.options.maxZoom--),this._url=t;var s=this.options.subdomains;"string"==typeof s&&(this.options.subdomains=s.split(""))},onAdd:function(t){this._map=t,this._initContainer(),this._createTileProto(),t.on({viewreset:this._resetCallback,moveend:this._update},this),this.options.updateWhenIdle||(this._limitedUpdate=e.Util.limitExecByInterval(this._update,150,this),t.on("move",this._limitedUpdate,this)),this._reset(),this._update()},addTo:function(t){return t.addLayer(this),this},onRemove:function(t){this._container.parentNode.removeChild(this._container),t.off({viewreset:this._resetCallback,moveend:this._update},this),this.options.updateWhenIdle||t.off("move",this._limitedUpdate,this),this._container=null,this._map=null},bringToFront:function(){var t=this._map._panes.tilePane;return this._container&&(t.appendChild(this._container),this._setAutoZIndex(t,Math.max)),this},bringToBack:function(){var t=this._map._panes.tilePane;return this._container&&(t.insertBefore(this._container,t.firstChild),this._setAutoZIndex(t,Math.min)),this},getAttribution:function(){return this.options.attribution},setOpacity:function(t){return this.options.opacity=t,this._map&&this._updateOpacity(),this},setZIndex:function(t){return this.options.zIndex=t,this._updateZIndex(),this},setUrl:function(t,i){return this._url=t,i||this.redraw(),this},redraw:function(){return this._map&&(this._map._panes.tilePane.empty=!1,this._reset(!0),this._update()),this},_updateZIndex:function(){this._container&&this.options.zIndex!==s&&(this._container.style.zIndex=this.options.zIndex)},_setAutoZIndex:function(t,i){var s,e,o,n=t.children,a=-i(1/0,-1/0);for(e=0,o=n.length;o>e;e++)n[e]!==this._container&&(s=parseInt(n[e].style.zIndex,10),isNaN(s)||(a=i(a,s)));this.options.zIndex=this._container.style.zIndex=(isFinite(a)?a:0)+i(1,-1)},_updateOpacity:function(){e.DomUtil.setOpacity(this._container,this.options.opacity);var t,i=this._tiles;if(e.Browser.webkit)for(t in i)i.hasOwnProperty(t)&&(i[t].style.webkitTransform+=" translate(0,0)")},_initContainer:function(){var t=this._map._panes.tilePane;(!this._container||t.empty)&&(this._container=e.DomUtil.create("div","leaflet-layer"),this._updateZIndex(),t.appendChild(this._container),1>this.options.opacity&&this._updateOpacity())},_resetCallback:function(t){this._reset(t.hard)},_reset:function(t){var i=this._tiles;for(var s in i)i.hasOwnProperty(s)&&this.fire("tileunload",{tile:i[s]});this._tiles={},this._tilesToLoad=0,this.options.reuseTiles&&(this._unusedTiles=[]),t&&this._container&&(this._container.innerHTML=""),this._initContainer()},_update:function(){if(this._map){var t=this._map.getPixelBounds(),i=this._map.getZoom(),s=this.options.tileSize;if(!(i>this.options.maxZoom||this.options.minZoom>i)){var o=new e.Point(Math.floor(t.min.x/s),Math.floor(t.min.y/s)),n=new e.Point(Math.floor(t.max.x/s),Math.floor(t.max.y/s)),a=new e.Bounds(o,n);this._addTilesFromCenterOut(a),(this.options.unloadInvisibleTiles||this.options.reuseTiles)&&this._removeOtherTiles(a)}}},_addTilesFromCenterOut:function(t){var s,o,n,a=[],r=t.getCenter();for(s=t.min.y;t.max.y>=s;s++)for(o=t.min.x;t.max.x>=o;o++)n=new e.Point(o,s),this._tileShouldBeLoaded(n)&&a.push(n);var h=a.length;if(0!==h){a.sort(function(t,i){return t.distanceTo(r)-i.distanceTo(r)});var l=i.createDocumentFragment();for(this._tilesToLoad||this.fire("loading"),this._tilesToLoad+=h,o=0;h>o;o++)this._addTile(a[o],l);this._container.appendChild(l)}},_tileShouldBeLoaded:function(t){ -if(t.x+":"+t.y in this._tiles)return!1;if(!this.options.continuousWorld){var i=this._getWrapTileNum();if(this.options.noWrap&&(0>t.x||t.x>=i)||0>t.y||t.y>=i)return!1}return!0},_removeOtherTiles:function(t){var i,s,e,o;for(o in this._tiles)this._tiles.hasOwnProperty(o)&&(i=o.split(":"),s=parseInt(i[0],10),e=parseInt(i[1],10),(t.min.x>s||s>t.max.x||t.min.y>e||e>t.max.y)&&this._removeTile(o))},_removeTile:function(t){var i=this._tiles[t];this.fire("tileunload",{tile:i,url:i.src}),this.options.reuseTiles?(e.DomUtil.removeClass(i,"leaflet-tile-loaded"),this._unusedTiles.push(i)):i.parentNode===this._container&&this._container.removeChild(i),e.Browser.android||(i.src=e.Util.emptyImageUrl),delete this._tiles[t]},_addTile:function(t,i){var s=this._getTilePos(t),o=this._getTile();e.DomUtil.setPosition(o,s,e.Browser.chrome||e.Browser.android23),this._tiles[t.x+":"+t.y]=o,this._loadTile(o,t),o.parentNode!==this._container&&i.appendChild(o)},_getZoomForUrl:function(){var t=this.options,i=this._map.getZoom();return t.zoomReverse&&(i=t.maxZoom-i),i+t.zoomOffset},_getTilePos:function(t){var i=this._map.getPixelOrigin(),s=this.options.tileSize;return t.multiplyBy(s).subtract(i)},getTileUrl:function(t){return this._adjustTilePoint(t),e.Util.template(this._url,e.extend({s:this._getSubdomain(t),z:this._getZoomForUrl(),x:t.x,y:t.y},this.options))},_getWrapTileNum:function(){return Math.pow(2,this._getZoomForUrl())},_adjustTilePoint:function(t){var i=this._getWrapTileNum();this.options.continuousWorld||this.options.noWrap||(t.x=(t.x%i+i)%i),this.options.tms&&(t.y=i-t.y-1)},_getSubdomain:function(t){var i=(t.x+t.y)%this.options.subdomains.length;return this.options.subdomains[i]},_createTileProto:function(){var t=this._tileImg=e.DomUtil.create("img","leaflet-tile");t.style.width=t.style.height=this.options.tileSize+"px",t.galleryimg="no"},_getTile:function(){if(this.options.reuseTiles&&this._unusedTiles.length>0){var t=this._unusedTiles.pop();return this._resetTile(t),t}return this._createTile()},_resetTile:function(){},_createTile:function(){var t=this._tileImg.cloneNode(!1);return t.onselectstart=t.onmousemove=e.Util.falseFn,t},_loadTile:function(t,i){t._layer=this,t.onload=this._tileOnLoad,t.onerror=this._tileOnError,t.src=this.getTileUrl(i)},_tileLoaded:function(){this._tilesToLoad--,this._tilesToLoad||this.fire("load")},_tileOnLoad:function(){var t=this._layer;this.src!==e.Util.emptyImageUrl&&(e.DomUtil.addClass(this,"leaflet-tile-loaded"),t.fire("tileload",{tile:this,url:this.src})),t._tileLoaded()},_tileOnError:function(){var t=this._layer;t.fire("tileerror",{tile:this,url:this.src});var i=t.options.errorTileUrl;i&&(this.src=i),t._tileLoaded()}}),e.tileLayer=function(t,i){return new e.TileLayer(t,i)},e.TileLayer.WMS=e.TileLayer.extend({defaultWmsParams:{service:"WMS",request:"GetMap",version:"1.1.1",layers:"",styles:"",format:"image/jpeg",transparent:!1},initialize:function(t,i){this._url=t;var s=e.extend({},this.defaultWmsParams);s.width=s.height=i.detectRetina&&e.Browser.retina?2*this.options.tileSize:this.options.tileSize;for(var o in i)this.options.hasOwnProperty(o)||(s[o]=i[o]);this.wmsParams=s,e.setOptions(this,i)},onAdd:function(t){var i=parseFloat(this.wmsParams.version)>=1.3?"crs":"srs";this.wmsParams[i]=t.options.crs.code,e.TileLayer.prototype.onAdd.call(this,t)},getTileUrl:function(t,i){this._adjustTilePoint(t);var s=this._map,o=s.options.crs,n=this.options.tileSize,a=t.multiplyBy(n),r=a.add(new e.Point(n,n)),h=o.project(s.unproject(a,i)),l=o.project(s.unproject(r,i)),c=[h.x,l.y,l.x,h.y].join(","),m=e.Util.template(this._url,{s:this._getSubdomain(t)});return m+e.Util.getParamString(this.wmsParams,m)+"&bbox="+c},setParams:function(t,i){return e.extend(this.wmsParams,t),i||this.redraw(),this}}),e.tileLayer.wms=function(t,i){return new e.TileLayer.WMS(t,i)},e.TileLayer.Canvas=e.TileLayer.extend({options:{async:!1},initialize:function(t){e.setOptions(this,t)},redraw:function(){var t=this._tiles;for(var i in t)t.hasOwnProperty(i)&&this._redrawTile(t[i])},_redrawTile:function(t){this.drawTile(t,t._tilePoint,this._map._zoom)},_createTileProto:function(){var t=this._canvasProto=e.DomUtil.create("canvas","leaflet-tile");t.width=t.height=this.options.tileSize},_createTile:function(){var t=this._canvasProto.cloneNode(!1);return t.onselectstart=t.onmousemove=e.Util.falseFn,t},_loadTile:function(t,i){t._layer=this,t._tilePoint=i,this._redrawTile(t),this.options.async||this.tileDrawn(t)},drawTile:function(){},tileDrawn:function(t){this._tileOnLoad.call(t)}}),e.tileLayer.canvas=function(t){return new e.TileLayer.Canvas(t)},e.ImageOverlay=e.Class.extend({includes:e.Mixin.Events,options:{opacity:1},initialize:function(t,i,s){this._url=t,this._bounds=e.latLngBounds(i),e.setOptions(this,s)},onAdd:function(t){this._map=t,this._image||this._initImage(),t._panes.overlayPane.appendChild(this._image),t.on("viewreset",this._reset,this),t.options.zoomAnimation&&e.Browser.any3d&&t.on("zoomanim",this._animateZoom,this),this._reset()},onRemove:function(t){t.getPanes().overlayPane.removeChild(this._image),t.off("viewreset",this._reset,this),t.options.zoomAnimation&&t.off("zoomanim",this._animateZoom,this)},addTo:function(t){return t.addLayer(this),this},setOpacity:function(t){return this.options.opacity=t,this._updateOpacity(),this},bringToFront:function(){return this._image&&this._map._panes.overlayPane.appendChild(this._image),this},bringToBack:function(){var t=this._map._panes.overlayPane;return this._image&&t.insertBefore(this._image,t.firstChild),this},_initImage:function(){this._image=e.DomUtil.create("img","leaflet-image-layer"),this._map.options.zoomAnimation&&e.Browser.any3d?e.DomUtil.addClass(this._image,"leaflet-zoom-animated"):e.DomUtil.addClass(this._image,"leaflet-zoom-hide"),this._updateOpacity(),e.extend(this._image,{galleryimg:"no",onselectstart:e.Util.falseFn,onmousemove:e.Util.falseFn,onload:e.bind(this._onImageLoad,this),src:this._url})},_animateZoom:function(t){var i=this._map,s=this._image,o=i.getZoomScale(t.zoom),n=this._bounds.getNorthWest(),a=this._bounds.getSouthEast(),r=i._latLngToNewLayerPoint(n,t.zoom,t.center),h=i._latLngToNewLayerPoint(a,t.zoom,t.center)._subtract(r),l=r._add(h._multiplyBy(.5*(1-1/o)));s.style[e.DomUtil.TRANSFORM]=e.DomUtil.getTranslateString(l)+" scale("+o+") "},_reset:function(){var t=this._image,i=this._map.latLngToLayerPoint(this._bounds.getNorthWest()),s=this._map.latLngToLayerPoint(this._bounds.getSouthEast())._subtract(i);e.DomUtil.setPosition(t,i),t.style.width=s.x+"px",t.style.height=s.y+"px"},_onImageLoad:function(){this.fire("load")},_updateOpacity:function(){e.DomUtil.setOpacity(this._image,this.options.opacity)}}),e.imageOverlay=function(t,i,s){return new e.ImageOverlay(t,i,s)},e.Icon=e.Class.extend({options:{className:""},initialize:function(t){e.setOptions(this,t)},createIcon:function(){return this._createIcon("icon")},createShadow:function(){return this._createIcon("shadow")},_createIcon:function(t){var i=this._getIconUrl(t);if(!i){if("icon"===t)throw Error("iconUrl not set in Icon options (see the docs).");return null}var s=this._createImg(i);return this._setIconStyles(s,t),s},_setIconStyles:function(t,i){var s,o=this.options,n=e.point(o[i+"Size"]);s="shadow"===i?e.point(o.shadowAnchor||o.iconAnchor):e.point(o.iconAnchor),!s&&n&&(s=n.divideBy(2,!0)),t.className="leaflet-marker-"+i+" "+o.className,s&&(t.style.marginLeft=-s.x+"px",t.style.marginTop=-s.y+"px"),n&&(t.style.width=n.x+"px",t.style.height=n.y+"px")},_createImg:function(t){var s;return e.Browser.ie6?(s=i.createElement("div"),s.style.filter='progid:DXImageTransform.Microsoft.AlphaImageLoader(src="'+t+'")'):(s=i.createElement("img"),s.src=t),s},_getIconUrl:function(t){return e.Browser.retina&&this.options[t+"RetinaUrl"]?this.options[t+"RetinaUrl"]:this.options[t+"Url"]}}),e.icon=function(t){return new e.Icon(t)},e.Icon.Default=e.Icon.extend({options:{iconSize:new e.Point(25,41),iconAnchor:new e.Point(12,41),popupAnchor:new e.Point(1,-34),shadowSize:new e.Point(41,41)},_getIconUrl:function(t){var i=t+"Url";if(this.options[i])return this.options[i];e.Browser.retina&&"icon"===t&&(t+="@2x");var s=e.Icon.Default.imagePath;if(!s)throw Error("Couldn't autodetect L.Icon.Default.imagePath, set it manually.");return"marker-"+t+".png"}}),e.Icon.Default.imagePath=function(){var t,s,e,o,n=i.getElementsByTagName("script"),a=/\/?leaflet[\-\._]?([\w\-\._]*)\.js\??/;for(t=0,s=n.length;s>t;t++)if(e=n[t].src,o=e.match(a))return e.split(a)[0]+""}(),e.Marker=e.Class.extend({includes:e.Mixin.Events,options:{icon:new e.Icon.Default,title:"",clickable:!0,draggable:!1,zIndexOffset:0,opacity:1,riseOnHover:!1,riseOffset:250},initialize:function(t,i){e.setOptions(this,i),this._latlng=e.latLng(t)},onAdd:function(t){this._map=t,t.on("viewreset",this.update,this),this._initIcon(),this.update(),t.options.zoomAnimation&&t.options.markerZoomAnimation&&t.on("zoomanim",this._animateZoom,this)},addTo:function(t){return t.addLayer(this),this},onRemove:function(t){this._removeIcon(),this.fire("remove"),t.off({viewreset:this.update,zoomanim:this._animateZoom},this),this._map=null},getLatLng:function(){return this._latlng},setLatLng:function(t){return this._latlng=e.latLng(t),this.update(),this.fire("move",{latlng:this._latlng})},setZIndexOffset:function(t){return this.options.zIndexOffset=t,this.update(),this},setIcon:function(t){return this._map&&this._removeIcon(),this.options.icon=t,this._map&&(this._initIcon(),this.update()),this},update:function(){if(this._icon){var t=this._map.latLngToLayerPoint(this._latlng).round();this._setPos(t)}return this},_initIcon:function(){var t=this.options,i=this._map,s=i.options.zoomAnimation&&i.options.markerZoomAnimation,o=s?"leaflet-zoom-animated":"leaflet-zoom-hide",n=!1;this._icon||(this._icon=t.icon.createIcon(),t.title&&(this._icon.title=t.title),this._initInteraction(),n=1>this.options.opacity,e.DomUtil.addClass(this._icon,o),t.riseOnHover&&e.DomEvent.on(this._icon,"mouseover",this._bringToFront,this).on(this._icon,"mouseout",this._resetZIndex,this)),this._shadow||(this._shadow=t.icon.createShadow(),this._shadow&&(e.DomUtil.addClass(this._shadow,o),n=1>this.options.opacity)),n&&this._updateOpacity();var a=this._map._panes;a.markerPane.appendChild(this._icon),this._shadow&&a.shadowPane.appendChild(this._shadow)},_removeIcon:function(){var t=this._map._panes;this.options.riseOnHover&&e.DomEvent.off(this._icon,"mouseover",this._bringToFront).off(this._icon,"mouseout",this._resetZIndex),t.markerPane.removeChild(this._icon),this._shadow&&t.shadowPane.removeChild(this._shadow),this._icon=this._shadow=null},_setPos:function(t){e.DomUtil.setPosition(this._icon,t),this._shadow&&e.DomUtil.setPosition(this._shadow,t),this._zIndex=t.y+this.options.zIndexOffset,this._resetZIndex()},_updateZIndex:function(t){this._icon.style.zIndex=this._zIndex+t},_animateZoom:function(t){var i=this._map._latLngToNewLayerPoint(this._latlng,t.zoom,t.center);this._setPos(i)},_initInteraction:function(){if(this.options.clickable){var t=this._icon,i=["dblclick","mousedown","mouseover","mouseout","contextmenu"];e.DomUtil.addClass(t,"leaflet-clickable"),e.DomEvent.on(t,"click",this._onMouseClick,this);for(var s=0;i.length>s;s++)e.DomEvent.on(t,i[s],this._fireMouseEvent,this);e.Handler.MarkerDrag&&(this.dragging=new e.Handler.MarkerDrag(this),this.options.draggable&&this.dragging.enable())}},_onMouseClick:function(t){var i=this.dragging&&this.dragging.moved();(this.hasEventListeners(t.type)||i)&&e.DomEvent.stopPropagation(t),i||(this.dragging&&this.dragging._enabled||!this._map.dragging||!this._map.dragging.moved())&&this.fire(t.type,{originalEvent:t})},_fireMouseEvent:function(t){this.fire(t.type,{originalEvent:t}),"contextmenu"===t.type&&this.hasEventListeners(t.type)&&e.DomEvent.preventDefault(t),"mousedown"!==t.type&&e.DomEvent.stopPropagation(t)},setOpacity:function(t){this.options.opacity=t,this._map&&this._updateOpacity()},_updateOpacity:function(){e.DomUtil.setOpacity(this._icon,this.options.opacity),this._shadow&&e.DomUtil.setOpacity(this._shadow,this.options.opacity)},_bringToFront:function(){this._updateZIndex(this.options.riseOffset)},_resetZIndex:function(){this._updateZIndex(0)}}),e.marker=function(t,i){return new e.Marker(t,i)},e.DivIcon=e.Icon.extend({options:{iconSize:new e.Point(12,12),className:"leaflet-div-icon"},createIcon:function(){var t=i.createElement("div"),s=this.options;return s.html&&(t.innerHTML=s.html),s.bgPos&&(t.style.backgroundPosition=-s.bgPos.x+"px "+-s.bgPos.y+"px"),this._setIconStyles(t,"icon"),t},createShadow:function(){return null}}),e.divIcon=function(t){return new e.DivIcon(t)},e.Map.mergeOptions({closePopupOnClick:!0}),e.Popup=e.Class.extend({includes:e.Mixin.Events,options:{minWidth:50,maxWidth:300,maxHeight:null,autoPan:!0,closeButton:!0,offset:new e.Point(0,6),autoPanPadding:new e.Point(5,5),className:"",zoomAnimation:!0},initialize:function(t,i){e.setOptions(this,t),this._source=i,this._animated=e.Browser.any3d&&this.options.zoomAnimation},onAdd:function(t){this._map=t,this._container||this._initLayout(),this._updateContent();var i=t.options.fadeAnimation;i&&e.DomUtil.setOpacity(this._container,0),t._panes.popupPane.appendChild(this._container),t.on("viewreset",this._updatePosition,this),this._animated&&t.on("zoomanim",this._zoomAnimation,this),t.options.closePopupOnClick&&t.on("preclick",this._close,this),this._update(),i&&e.DomUtil.setOpacity(this._container,1)},addTo:function(t){return t.addLayer(this),this},openOn:function(t){return t.openPopup(this),this},onRemove:function(t){t._panes.popupPane.removeChild(this._container),e.Util.falseFn(this._container.offsetWidth),t.off({viewreset:this._updatePosition,preclick:this._close,zoomanim:this._zoomAnimation},this),t.options.fadeAnimation&&e.DomUtil.setOpacity(this._container,0),this._map=null},setLatLng:function(t){return this._latlng=e.latLng(t),this._update(),this},setContent:function(t){return this._content=t,this._update(),this},_close:function(){var t=this._map;t&&(t._popup=null,t.removeLayer(this).fire("popupclose",{popup:this}))},_initLayout:function(){var t,i="leaflet-popup",s=i+" "+this.options.className+" leaflet-zoom-"+(this._animated?"animated":"hide"),o=this._container=e.DomUtil.create("div",s);this.options.closeButton&&(t=this._closeButton=e.DomUtil.create("a",i+"-close-button",o),t.href="#close",t.innerHTML="×",e.DomEvent.on(t,"click",this._onCloseButtonClick,this));var n=this._wrapper=e.DomUtil.create("div",i+"-content-wrapper",o);e.DomEvent.disableClickPropagation(n),this._contentNode=e.DomUtil.create("div",i+"-content",n),e.DomEvent.on(this._contentNode,"mousewheel",e.DomEvent.stopPropagation),this._tipContainer=e.DomUtil.create("div",i+"-tip-container",o),this._tip=e.DomUtil.create("div",i+"-tip",this._tipContainer)},_update:function(){this._map&&(this._container.style.visibility="hidden",this._updateContent(),this._updateLayout(),this._updatePosition(),this._container.style.visibility="",this._adjustPan())},_updateContent:function(){if(this._content){if("string"==typeof this._content)this._contentNode.innerHTML=this._content;else{for(;this._contentNode.hasChildNodes();)this._contentNode.removeChild(this._contentNode.firstChild);this._contentNode.appendChild(this._content)}this.fire("contentupdate")}},_updateLayout:function(){var t=this._contentNode,i=t.style;i.width="",i.whiteSpace="nowrap";var s=t.offsetWidth;s=Math.min(s,this.options.maxWidth),s=Math.max(s,this.options.minWidth),i.width=s+1+"px",i.whiteSpace="",i.height="";var o=t.offsetHeight,n=this.options.maxHeight,a="leaflet-popup-scrolled";n&&o>n?(i.height=n+"px",e.DomUtil.addClass(t,a)):e.DomUtil.removeClass(t,a),this._containerWidth=this._container.offsetWidth},_updatePosition:function(){if(this._map){var t=this._map.latLngToLayerPoint(this._latlng),i=this._animated,s=this.options.offset;i&&e.DomUtil.setPosition(this._container,t),this._containerBottom=-s.y-(i?0:t.y),this._containerLeft=-Math.round(this._containerWidth/2)+s.x+(i?0:t.x),this._container.style.bottom=this._containerBottom+"px",this._container.style.left=this._containerLeft+"px"}},_zoomAnimation:function(t){var i=this._map._latLngToNewLayerPoint(this._latlng,t.zoom,t.center);e.DomUtil.setPosition(this._container,i)},_adjustPan:function(){if(this.options.autoPan){var t=this._map,i=this._container.offsetHeight,s=this._containerWidth,o=new e.Point(this._containerLeft,-i-this._containerBottom);this._animated&&o._add(e.DomUtil.getPosition(this._container));var n=t.layerPointToContainerPoint(o),a=this.options.autoPanPadding,r=t.getSize(),h=0,l=0;0>n.x&&(h=n.x-a.x),n.x+s>r.x&&(h=n.x+s-r.x+a.x),0>n.y&&(l=n.y-a.y),n.y+i>r.y&&(l=n.y+i-r.y+a.y),(h||l)&&t.panBy(new e.Point(h,l))}},_onCloseButtonClick:function(t){this._close(),e.DomEvent.stop(t)}}),e.popup=function(t,i){return new e.Popup(t,i)},e.Marker.include({openPopup:function(){return this._popup&&this._map&&(this._popup.setLatLng(this._latlng),this._map.openPopup(this._popup)),this},closePopup:function(){return this._popup&&this._popup._close(),this},bindPopup:function(t,i){var s=e.point(this.options.icon.options.popupAnchor)||new e.Point(0,0);return s=s.add(e.Popup.prototype.options.offset),i&&i.offset&&(s=s.add(i.offset)),i=e.extend({offset:s},i),this._popup||this.on("click",this.openPopup,this).on("remove",this.closePopup,this).on("move",this._movePopup,this),this._popup=new e.Popup(i,this).setContent(t),this},unbindPopup:function(){return this._popup&&(this._popup=null,this.off("click",this.openPopup).off("remove",this.closePopup).off("move",this._movePopup)),this},_movePopup:function(t){this._popup.setLatLng(t.latlng)}}),e.Map.include({openPopup:function(t){return this.closePopup(),this._popup=t,this.addLayer(t).fire("popupopen",{popup:this._popup})},closePopup:function(){return this._popup&&this._popup._close(),this}}),e.LayerGroup=e.Class.extend({initialize:function(t){this._layers={};var i,s;if(t)for(i=0,s=t.length;s>i;i++)this.addLayer(t[i])},addLayer:function(t){var i=e.stamp(t);return this._layers[i]=t,this._map&&this._map.addLayer(t),this},removeLayer:function(t){var i=e.stamp(t);return delete this._layers[i],this._map&&this._map.removeLayer(t),this},clearLayers:function(){return this.eachLayer(this.removeLayer,this),this},invoke:function(t){var i,s,e=Array.prototype.slice.call(arguments,1);for(i in this._layers)this._layers.hasOwnProperty(i)&&(s=this._layers[i],s[t]&&s[t].apply(s,e));return this},onAdd:function(t){this._map=t,this.eachLayer(t.addLayer,t)},onRemove:function(t){this.eachLayer(t.removeLayer,t),this._map=null},addTo:function(t){return t.addLayer(this),this},eachLayer:function(t,i){for(var s in this._layers)this._layers.hasOwnProperty(s)&&t.call(i,this._layers[s])},setZIndex:function(t){return this.invoke("setZIndex",t)}}),e.layerGroup=function(t){return new e.LayerGroup(t)},e.FeatureGroup=e.LayerGroup.extend({includes:e.Mixin.Events,statics:{EVENTS:"click dblclick mouseover mouseout mousemove contextmenu"},addLayer:function(t){return this._layers[e.stamp(t)]?this:(t.on(e.FeatureGroup.EVENTS,this._propagateEvent,this),e.LayerGroup.prototype.addLayer.call(this,t),this._popupContent&&t.bindPopup&&t.bindPopup(this._popupContent,this._popupOptions),this.fire("layeradd",{layer:t}))},removeLayer:function(t){return t.off(e.FeatureGroup.EVENTS,this._propagateEvent,this),e.LayerGroup.prototype.removeLayer.call(this,t),this._popupContent&&this.invoke("unbindPopup"),this.fire("layerremove",{layer:t})},bindPopup:function(t,i){return this._popupContent=t,this._popupOptions=i,this.invoke("bindPopup",t,i)},setStyle:function(t){return this.invoke("setStyle",t)},bringToFront:function(){return this.invoke("bringToFront")},bringToBack:function(){return this.invoke("bringToBack")},getBounds:function(){var t=new e.LatLngBounds;return this.eachLayer(function(i){t.extend(i instanceof e.Marker?i.getLatLng():i.getBounds())}),t},_propagateEvent:function(t){t.layer=t.target,t.target=this,this.fire(t.type,t)}}),e.featureGroup=function(t){return new e.FeatureGroup(t)},e.Path=e.Class.extend({includes:[e.Mixin.Events],statics:{CLIP_PADDING:e.Browser.mobile?Math.max(0,Math.min(.5,(1280/Math.max(t.innerWidth,t.innerHeight)-1)/2)):.5},options:{stroke:!0,color:"#0033ff",dashArray:null,weight:5,opacity:.5,fill:!1,fillColor:null,fillOpacity:.2,clickable:!0},initialize:function(t){e.setOptions(this,t)},onAdd:function(t){this._map=t,this._container||(this._initElements(),this._initEvents()),this.projectLatlngs(),this._updatePath(),this._container&&this._map._pathRoot.appendChild(this._container),this.fire("add"),t.on({viewreset:this.projectLatlngs,moveend:this._updatePath},this)},addTo:function(t){return t.addLayer(this),this},onRemove:function(t){t._pathRoot.removeChild(this._container),this.fire("remove"),this._map=null,e.Browser.vml&&(this._container=null,this._stroke=null,this._fill=null),t.off({viewreset:this.projectLatlngs,moveend:this._updatePath},this)},projectLatlngs:function(){},setStyle:function(t){return e.setOptions(this,t),this._container&&this._updateStyle(),this},redraw:function(){return this._map&&(this.projectLatlngs(),this._updatePath()),this}}),e.Map.include({_updatePathViewport:function(){var t=e.Path.CLIP_PADDING,i=this.getSize(),s=e.DomUtil.getPosition(this._mapPane),o=s.multiplyBy(-1)._subtract(i.multiplyBy(t)._round()),n=o.add(i.multiplyBy(1+2*t)._round());this._pathViewport=new e.Bounds(o,n)}}),e.Path.SVG_NS="http://www.w3.org/2000/svg",e.Browser.svg=!(!i.createElementNS||!i.createElementNS(e.Path.SVG_NS,"svg").createSVGRect),e.Path=e.Path.extend({statics:{SVG:e.Browser.svg},bringToFront:function(){var t=this._map._pathRoot,i=this._container;return i&&t.lastChild!==i&&t.appendChild(i),this},bringToBack:function(){var t=this._map._pathRoot,i=this._container,s=t.firstChild;return i&&s!==i&&t.insertBefore(i,s),this},getPathString:function(){},_createElement:function(t){return i.createElementNS(e.Path.SVG_NS,t)},_initElements:function(){this._map._initPathRoot(),this._initPath(),this._initStyle()},_initPath:function(){this._container=this._createElement("g"),this._path=this._createElement("path"),this._container.appendChild(this._path)},_initStyle:function(){this.options.stroke&&(this._path.setAttribute("stroke-linejoin","round"),this._path.setAttribute("stroke-linecap","round")),this.options.fill&&this._path.setAttribute("fill-rule","evenodd"),this._updateStyle()},_updateStyle:function(){this.options.stroke?(this._path.setAttribute("stroke",this.options.color),this._path.setAttribute("stroke-opacity",this.options.opacity),this._path.setAttribute("stroke-width",this.options.weight),this.options.dashArray?this._path.setAttribute("stroke-dasharray",this.options.dashArray):this._path.removeAttribute("stroke-dasharray")):this._path.setAttribute("stroke","none"),this.options.fill?(this._path.setAttribute("fill",this.options.fillColor||this.options.color),this._path.setAttribute("fill-opacity",this.options.fillOpacity)):this._path.setAttribute("fill","none")},_updatePath:function(){var t=this.getPathString();t||(t="M0 0"),this._path.setAttribute("d",t)},_initEvents:function(){if(this.options.clickable){(e.Browser.svg||!e.Browser.vml)&&this._path.setAttribute("class","leaflet-clickable"),e.DomEvent.on(this._container,"click",this._onMouseClick,this);for(var t=["dblclick","mousedown","mouseover","mouseout","mousemove","contextmenu"],i=0;t.length>i;i++)e.DomEvent.on(this._container,t[i],this._fireMouseEvent,this)}},_onMouseClick:function(t){this._map.dragging&&this._map.dragging.moved()||this._fireMouseEvent(t)},_fireMouseEvent:function(t){if(this.hasEventListeners(t.type)){var i=this._map,s=i.mouseEventToContainerPoint(t),o=i.containerPointToLayerPoint(s),n=i.layerPointToLatLng(o);this.fire(t.type,{latlng:n,layerPoint:o,containerPoint:s,originalEvent:t}),"contextmenu"===t.type&&e.DomEvent.preventDefault(t),"mousemove"!==t.type&&e.DomEvent.stopPropagation(t)}}}),e.Map.include({_initPathRoot:function(){this._pathRoot||(this._pathRoot=e.Path.prototype._createElement("svg"),this._panes.overlayPane.appendChild(this._pathRoot),this.options.zoomAnimation&&e.Browser.any3d?(this._pathRoot.setAttribute("class"," leaflet-zoom-animated"),this.on({zoomanim:this._animatePathZoom,zoomend:this._endPathZoom})):this._pathRoot.setAttribute("class"," leaflet-zoom-hide"),this.on("moveend",this._updateSvgViewport),this._updateSvgViewport())},_animatePathZoom:function(t){var i=this.getZoomScale(t.zoom),s=this._getCenterOffset(t.center)._multiplyBy(-i)._add(this._pathViewport.min);this._pathRoot.style[e.DomUtil.TRANSFORM]=e.DomUtil.getTranslateString(s)+" scale("+i+") ",this._pathZooming=!0},_endPathZoom:function(){this._pathZooming=!1},_updateSvgViewport:function(){if(!this._pathZooming){this._updatePathViewport();var t=this._pathViewport,i=t.min,s=t.max,o=s.x-i.x,n=s.y-i.y,a=this._pathRoot,r=this._panes.overlayPane;e.Browser.mobileWebkit&&r.removeChild(a),e.DomUtil.setPosition(a,i),a.setAttribute("width",o),a.setAttribute("height",n),a.setAttribute("viewBox",[i.x,i.y,o,n].join(" ")),e.Browser.mobileWebkit&&r.appendChild(a)}}}),e.Path.include({bindPopup:function(t,i){return(!this._popup||i)&&(this._popup=new e.Popup(i,this)),this._popup.setContent(t),this._popupHandlersAdded||(this.on("click",this._openPopup,this).on("remove",this.closePopup,this),this._popupHandlersAdded=!0),this},unbindPopup:function(){return this._popup&&(this._popup=null,this.off("click",this._openPopup).off("remove",this.closePopup),this._popupHandlersAdded=!1),this},openPopup:function(t){return this._popup&&(t=t||this._latlng||this._latlngs[Math.floor(this._latlngs.length/2)],this._openPopup({latlng:t})),this},closePopup:function(){return this._popup&&this._popup._close(),this},_openPopup:function(t){this._popup.setLatLng(t.latlng),this._map.openPopup(this._popup)}}),e.Browser.vml=!e.Browser.svg&&function(){try{var t=i.createElement("div");t.innerHTML='';var s=t.firstChild;return s.style.behavior="url(#default#VML)",s&&"object"==typeof s.adj}catch(e){return!1}}(),e.Path=e.Browser.svg||!e.Browser.vml?e.Path:e.Path.extend({statics:{VML:!0,CLIP_PADDING:.02},_createElement:function(){try{return i.namespaces.add("lvml","urn:schemas-microsoft-com:vml"),function(t){return i.createElement("')}}catch(t){return function(t){return i.createElement("<"+t+' xmlns="urn:schemas-microsoft.com:vml" class="lvml">')}}}(),_initPath:function(){var t=this._container=this._createElement("shape");e.DomUtil.addClass(t,"leaflet-vml-shape"),this.options.clickable&&e.DomUtil.addClass(t,"leaflet-clickable"),t.coordsize="1 1",this._path=this._createElement("path"),t.appendChild(this._path),this._map._pathRoot.appendChild(t)},_initStyle:function(){this._updateStyle()},_updateStyle:function(){var t=this._stroke,i=this._fill,s=this.options,e=this._container;e.stroked=s.stroke,e.filled=s.fill,s.stroke?(t||(t=this._stroke=this._createElement("stroke"),t.endcap="round",e.appendChild(t)),t.weight=s.weight+"px",t.color=s.color,t.opacity=s.opacity,t.dashStyle=s.dashArray?s.dashArray instanceof Array?s.dashArray.join(" "):s.dashArray.replace(/ *, */g," "):""):t&&(e.removeChild(t),this._stroke=null),s.fill?(i||(i=this._fill=this._createElement("fill"),e.appendChild(i)),i.color=s.fillColor||s.color,i.opacity=s.fillOpacity):i&&(e.removeChild(i),this._fill=null)},_updatePath:function(){var t=this._container.style;t.display="none",this._path.v=this.getPathString()+" ",t.display=""}}),e.Map.include(e.Browser.svg||!e.Browser.vml?{}:{_initPathRoot:function(){if(!this._pathRoot){var t=this._pathRoot=i.createElement("div");t.className="leaflet-vml-container",this._panes.overlayPane.appendChild(t),this.on("moveend",this._updatePathViewport),this._updatePathViewport()}}}),e.Browser.canvas=function(){return!!i.createElement("canvas").getContext}(),e.Path=e.Path.SVG&&!t.L_PREFER_CANVAS||!e.Browser.canvas?e.Path:e.Path.extend({statics:{CANVAS:!0,SVG:!1},redraw:function(){return this._map&&(this.projectLatlngs(),this._requestUpdate()),this},setStyle:function(t){return e.setOptions(this,t),this._map&&(this._updateStyle(),this._requestUpdate()),this},onRemove:function(t){t.off("viewreset",this.projectLatlngs,this).off("moveend",this._updatePath,this),this.options.clickable&&this._map.off("click",this._onClick,this),this._requestUpdate(),this._map=null},_requestUpdate:function(){this._map&&!e.Path._updateRequest&&(e.Path._updateRequest=e.Util.requestAnimFrame(this._fireMapMoveEnd,this._map))},_fireMapMoveEnd:function(){e.Path._updateRequest=null,this.fire("moveend")},_initElements:function(){this._map._initPathRoot(),this._ctx=this._map._canvasCtx},_updateStyle:function(){var t=this.options;t.stroke&&(this._ctx.lineWidth=t.weight,this._ctx.strokeStyle=t.color),t.fill&&(this._ctx.fillStyle=t.fillColor||t.color)},_drawPath:function(){var t,i,s,o,n,a;for(this._ctx.beginPath(),t=0,s=this._parts.length;s>t;t++){for(i=0,o=this._parts[t].length;o>i;i++)n=this._parts[t][i],a=(0===i?"move":"line")+"To",this._ctx[a](n.x,n.y);this instanceof e.Polygon&&this._ctx.closePath()}},_checkIfEmpty:function(){return!this._parts.length},_updatePath:function(){if(!this._checkIfEmpty()){var t=this._ctx,i=this.options;this._drawPath(),t.save(),this._updateStyle(),i.fill&&(t.globalAlpha=i.fillOpacity,t.fill()),i.stroke&&(t.globalAlpha=i.opacity,t.stroke()),t.restore()}},_initEvents:function(){this.options.clickable&&this._map.on("click",this._onClick,this)},_onClick:function(t){this._containsPoint(t.layerPoint)&&this.fire("click",{latlng:t.latlng,layerPoint:t.layerPoint,containerPoint:t.containerPoint,originalEvent:t})}}),e.Map.include(e.Path.SVG&&!t.L_PREFER_CANVAS||!e.Browser.canvas?{}:{_initPathRoot:function(){var t,s=this._pathRoot;s||(s=this._pathRoot=i.createElement("canvas"),s.style.position="absolute",t=this._canvasCtx=s.getContext("2d"),t.lineCap="round",t.lineJoin="round",this._panes.overlayPane.appendChild(s),this.options.zoomAnimation&&(this._pathRoot.className="leaflet-zoom-animated",this.on("zoomanim",this._animatePathZoom),this.on("zoomend",this._endPathZoom)),this.on("moveend",this._updateCanvasViewport),this._updateCanvasViewport())},_updateCanvasViewport:function(){if(!this._pathZooming){this._updatePathViewport();var t=this._pathViewport,i=t.min,s=t.max.subtract(i),o=this._pathRoot;e.DomUtil.setPosition(o,i),o.width=s.x,o.height=s.y,o.getContext("2d").translate(-i.x,-i.y)}}}),e.LineUtil={simplify:function(t,i){if(!i||!t.length)return t.slice();var s=i*i;return t=this._reducePoints(t,s),t=this._simplifyDP(t,s)},pointToSegmentDistance:function(t,i,s){return Math.sqrt(this._sqClosestPointOnSegment(t,i,s,!0))},closestPointOnSegment:function(t,i,s){return this._sqClosestPointOnSegment(t,i,s)},_simplifyDP:function(t,i){var e=t.length,o=typeof Uint8Array!=s+""?Uint8Array:Array,n=new o(e);n[0]=n[e-1]=1,this._simplifyDPStep(t,n,i,0,e-1);var a,r=[];for(a=0;e>a;a++)n[a]&&r.push(t[a]);return r},_simplifyDPStep:function(t,i,s,e,o){var n,a,r,h=0;for(a=e+1;o-1>=a;a++)r=this._sqClosestPointOnSegment(t[a],t[e],t[o],!0),r>h&&(n=a,h=r);h>s&&(i[n]=1,this._simplifyDPStep(t,i,s,e,n),this._simplifyDPStep(t,i,s,n,o))},_reducePoints:function(t,i){for(var s=[t[0]],e=1,o=0,n=t.length;n>e;e++)this._sqDist(t[e],t[o])>i&&(s.push(t[e]),o=e);return n-1>o&&s.push(t[n-1]),s},clipSegment:function(t,i,s,e){var o,n,a,r=e?this._lastCode:this._getBitCode(t,s),h=this._getBitCode(i,s);for(this._lastCode=h;;){if(!(r|h))return[t,i];if(r&h)return!1;o=r||h,n=this._getEdgeIntersection(t,i,o,s),a=this._getBitCode(n,s),o===r?(t=n,r=a):(i=n,h=a)}},_getEdgeIntersection:function(t,i,o,n){var a=i.x-t.x,r=i.y-t.y,h=n.min,l=n.max;return 8&o?new e.Point(t.x+a*(l.y-t.y)/r,l.y):4&o?new e.Point(t.x+a*(h.y-t.y)/r,h.y):2&o?new e.Point(l.x,t.y+r*(l.x-t.x)/a):1&o?new e.Point(h.x,t.y+r*(h.x-t.x)/a):s},_getBitCode:function(t,i){var s=0;return t.xi.max.x&&(s|=2),t.yi.max.y&&(s|=8),s},_sqDist:function(t,i){var s=i.x-t.x,e=i.y-t.y;return s*s+e*e},_sqClosestPointOnSegment:function(t,i,s,o){var n,a=i.x,r=i.y,h=s.x-a,l=s.y-r,c=h*h+l*l;return c>0&&(n=((t.x-a)*h+(t.y-r)*l)/c, -n>1?(a=s.x,r=s.y):n>0&&(a+=h*n,r+=l*n)),h=t.x-a,l=t.y-r,o?h*h+l*l:new e.Point(a,r)}},e.Polyline=e.Path.extend({initialize:function(t,i){e.Path.prototype.initialize.call(this,i),this._latlngs=this._convertLatLngs(t)},options:{smoothFactor:1,noClip:!1},projectLatlngs:function(){this._originalPoints=[];for(var t=0,i=this._latlngs.length;i>t;t++)this._originalPoints[t]=this._map.latLngToLayerPoint(this._latlngs[t])},getPathString:function(){for(var t=0,i=this._parts.length,s="";i>t;t++)s+=this._getPathPartStr(this._parts[t]);return s},getLatLngs:function(){return this._latlngs},setLatLngs:function(t){return this._latlngs=this._convertLatLngs(t),this.redraw()},addLatLng:function(t){return this._latlngs.push(e.latLng(t)),this.redraw()},spliceLatLngs:function(){var t=[].splice.apply(this._latlngs,arguments);return this._convertLatLngs(this._latlngs),this.redraw(),t},closestLayerPoint:function(t){for(var i,s,o=1/0,n=this._parts,a=null,r=0,h=n.length;h>r;r++)for(var l=n[r],c=1,m=l.length;m>c;c++){i=l[c-1],s=l[c];var u=e.LineUtil._sqClosestPointOnSegment(t,i,s,!0);o>u&&(o=u,a=e.LineUtil._sqClosestPointOnSegment(t,i,s))}return a&&(a.distance=Math.sqrt(o)),a},getBounds:function(){var t,i,s=new e.LatLngBounds,o=this.getLatLngs();for(t=0,i=o.length;i>t;t++)s.extend(o[t]);return s},_convertLatLngs:function(t){var i,s;for(i=0,s=t.length;s>i;i++){if(e.Util.isArray(t[i])&&"number"!=typeof t[i][0])return;t[i]=e.latLng(t[i])}return t},_initEvents:function(){e.Path.prototype._initEvents.call(this)},_getPathPartStr:function(t){for(var i,s=e.Path.VML,o=0,n=t.length,a="";n>o;o++)i=t[o],s&&i._round(),a+=(o?"L":"M")+i.x+" "+i.y;return a},_clipPoints:function(){var t,i,o,n=this._originalPoints,a=n.length;if(this.options.noClip)return this._parts=[n],s;this._parts=[];var r=this._parts,h=this._map._pathViewport,l=e.LineUtil;for(t=0,i=0;a-1>t;t++)o=l.clipSegment(n[t],n[t+1],h,t),o&&(r[i]=r[i]||[],r[i].push(o[0]),(o[1]!==n[t+1]||t===a-2)&&(r[i].push(o[1]),i++))},_simplifyPoints:function(){for(var t=this._parts,i=e.LineUtil,s=0,o=t.length;o>s;s++)t[s]=i.simplify(t[s],this.options.smoothFactor)},_updatePath:function(){this._map&&(this._clipPoints(),this._simplifyPoints(),e.Path.prototype._updatePath.call(this))}}),e.polyline=function(t,i){return new e.Polyline(t,i)},e.PolyUtil={},e.PolyUtil.clipPolygon=function(t,i){var s,o,n,a,r,h,l,c,m,u=[1,4,2,8],d=e.LineUtil;for(o=0,l=t.length;l>o;o++)t[o]._code=d._getBitCode(t[o],i);for(a=0;4>a;a++){for(c=u[a],s=[],o=0,l=t.length,n=l-1;l>o;n=o++)r=t[o],h=t[n],r._code&c?h._code&c||(m=d._getEdgeIntersection(h,r,c,i),m._code=d._getBitCode(m,i),s.push(m)):(h._code&c&&(m=d._getEdgeIntersection(h,r,c,i),m._code=d._getBitCode(m,i),s.push(m)),s.push(r));t=s}return t},e.Polygon=e.Polyline.extend({options:{fill:!0},initialize:function(t,i){e.Polyline.prototype.initialize.call(this,t,i),t&&e.Util.isArray(t[0])&&"number"!=typeof t[0][0]&&(this._latlngs=this._convertLatLngs(t[0]),this._holes=t.slice(1))},projectLatlngs:function(){if(e.Polyline.prototype.projectLatlngs.call(this),this._holePoints=[],this._holes){var t,i,s,o;for(t=0,s=this._holes.length;s>t;t++)for(this._holePoints[t]=[],i=0,o=this._holes[t].length;o>i;i++)this._holePoints[t][i]=this._map.latLngToLayerPoint(this._holes[t][i])}},_clipPoints:function(){var t=this._originalPoints,i=[];if(this._parts=[t].concat(this._holePoints),!this.options.noClip){for(var s=0,o=this._parts.length;o>s;s++){var n=e.PolyUtil.clipPolygon(this._parts[s],this._map._pathViewport);n.length&&i.push(n)}this._parts=i}},_getPathPartStr:function(t){var i=e.Polyline.prototype._getPathPartStr.call(this,t);return i+(e.Browser.svg?"z":"x")}}),e.polygon=function(t,i){return new e.Polygon(t,i)},function(){function t(t){return e.FeatureGroup.extend({initialize:function(t,i){this._layers={},this._options=i,this.setLatLngs(t)},setLatLngs:function(i){var s=0,e=i.length;for(this.eachLayer(function(t){e>s?t.setLatLngs(i[s++]):this.removeLayer(t)},this);e>s;)this.addLayer(new t(i[s++],this._options));return this}})}e.MultiPolyline=t(e.Polyline),e.MultiPolygon=t(e.Polygon),e.multiPolyline=function(t,i){return new e.MultiPolyline(t,i)},e.multiPolygon=function(t,i){return new e.MultiPolygon(t,i)}}(),e.Rectangle=e.Polygon.extend({initialize:function(t,i){e.Polygon.prototype.initialize.call(this,this._boundsToLatLngs(t),i)},setBounds:function(t){this.setLatLngs(this._boundsToLatLngs(t))},_boundsToLatLngs:function(t){return t=e.latLngBounds(t),[t.getSouthWest(),t.getNorthWest(),t.getNorthEast(),t.getSouthEast()]}}),e.rectangle=function(t,i){return new e.Rectangle(t,i)},e.Circle=e.Path.extend({initialize:function(t,i,s){e.Path.prototype.initialize.call(this,s),this._latlng=e.latLng(t),this._mRadius=i},options:{fill:!0},setLatLng:function(t){return this._latlng=e.latLng(t),this.redraw()},setRadius:function(t){return this._mRadius=t,this.redraw()},projectLatlngs:function(){var t=this._getLngRadius(),i=new e.LatLng(this._latlng.lat,this._latlng.lng-t),s=this._map.latLngToLayerPoint(i);this._point=this._map.latLngToLayerPoint(this._latlng),this._radius=Math.max(Math.round(this._point.x-s.x),1)},getBounds:function(){var t=this._getLngRadius(),i=360*(this._mRadius/40075017),s=this._latlng,o=new e.LatLng(s.lat-i,s.lng-t),n=new e.LatLng(s.lat+i,s.lng+t);return new e.LatLngBounds(o,n)},getLatLng:function(){return this._latlng},getPathString:function(){var t=this._point,i=this._radius;return this._checkIfEmpty()?"":e.Browser.svg?"M"+t.x+","+(t.y-i)+"A"+i+","+i+",0,1,1,"+(t.x-.1)+","+(t.y-i)+" z":(t._round(),i=Math.round(i),"AL "+t.x+","+t.y+" "+i+","+i+" 0,"+23592600)},getRadius:function(){return this._mRadius},_getLatRadius:function(){return 360*(this._mRadius/40075017)},_getLngRadius:function(){return this._getLatRadius()/Math.cos(e.LatLng.DEG_TO_RAD*this._latlng.lat)},_checkIfEmpty:function(){if(!this._map)return!1;var t=this._map._pathViewport,i=this._radius,s=this._point;return s.x-i>t.max.x||s.y-i>t.max.y||s.x+is;s++)for(l=this._parts[s],o=0,r=l.length,n=r-1;r>o;n=o++)if((i||0!==o)&&(h=e.LineUtil.pointToSegmentDistance(t,l[n],l[o]),c>=h))return!0;return!1}}:{}),e.Polygon.include(e.Path.CANVAS?{_containsPoint:function(t){var i,s,o,n,a,r,h,l,c=!1;if(e.Polyline.prototype._containsPoint.call(this,t,!0))return!0;for(n=0,h=this._parts.length;h>n;n++)for(i=this._parts[n],a=0,l=i.length,r=l-1;l>a;r=a++)s=i[a],o=i[r],s.y>t.y!=o.y>t.y&&t.x<(o.x-s.x)*(t.y-s.y)/(o.y-s.y)+s.x&&(c=!c);return c}}:{}),e.Circle.include(e.Path.CANVAS?{_drawPath:function(){var t=this._point;this._ctx.beginPath(),this._ctx.arc(t.x,t.y,this._radius,0,2*Math.PI,!1)},_containsPoint:function(t){var i=this._point,s=this.options.stroke?this.options.weight/2:0;return t.distanceTo(i)<=this._radius+s}}:{}),e.GeoJSON=e.FeatureGroup.extend({initialize:function(t,i){e.setOptions(this,i),this._layers={},t&&this.addData(t)},addData:function(t){var i,s,o=e.Util.isArray(t)?t:t.features;if(o){for(i=0,s=o.length;s>i;i++)(o[i].geometries||o[i].geometry||o[i].features)&&this.addData(o[i]);return this}var n=this.options;if(!n.filter||n.filter(t)){var a=e.GeoJSON.geometryToLayer(t,n.pointToLayer);return a.feature=t,a.defaultOptions=a.options,this.resetStyle(a),n.onEachFeature&&n.onEachFeature(t,a),this.addLayer(a)}},resetStyle:function(t){var i=this.options.style;i&&(e.Util.extend(t.options,t.defaultOptions),this._setLayerStyle(t,i))},setStyle:function(t){this.eachLayer(function(i){this._setLayerStyle(i,t)},this)},_setLayerStyle:function(t,i){"function"==typeof i&&(i=i(t.feature)),t.setStyle&&t.setStyle(i)}}),e.extend(e.GeoJSON,{geometryToLayer:function(t,i){var s,o,n,a,r,h="Feature"===t.type?t.geometry:t,l=h.coordinates,c=[];switch(h.type){case"Point":return s=this.coordsToLatLng(l),i?i(t,s):new e.Marker(s);case"MultiPoint":for(n=0,a=l.length;a>n;n++)s=this.coordsToLatLng(l[n]),r=i?i(t,s):new e.Marker(s),c.push(r);return new e.FeatureGroup(c);case"LineString":return o=this.coordsToLatLngs(l),new e.Polyline(o);case"Polygon":return o=this.coordsToLatLngs(l,1),new e.Polygon(o);case"MultiLineString":return o=this.coordsToLatLngs(l,1),new e.MultiPolyline(o);case"MultiPolygon":return o=this.coordsToLatLngs(l,2),new e.MultiPolygon(o);case"GeometryCollection":for(n=0,a=h.geometries.length;a>n;n++)r=this.geometryToLayer({geometry:h.geometries[n],type:"Feature",properties:t.properties},i),c.push(r);return new e.FeatureGroup(c);default:throw Error("Invalid GeoJSON object.")}},coordsToLatLng:function(t,i){var s=parseFloat(t[i?0:1]),o=parseFloat(t[i?1:0]);return new e.LatLng(s,o)},coordsToLatLngs:function(t,i,s){var e,o,n,a=[];for(o=0,n=t.length;n>o;o++)e=i?this.coordsToLatLngs(t[o],i-1,s):this.coordsToLatLng(t[o],s),a.push(e);return a}}),e.geoJson=function(t,i){return new e.GeoJSON(t,i)},e.DomEvent={addListener:function(t,i,o,n){var a,r,h,l=e.stamp(o),c="_leaflet_"+i+l;return t[c]?this:(a=function(i){return o.call(n||t,i||e.DomEvent._getEvent())},e.Browser.msTouch&&0===i.indexOf("touch")?this.addMsTouchListener(t,i,a,l):(e.Browser.touch&&"dblclick"===i&&this.addDoubleTapListener&&this.addDoubleTapListener(t,a,l),"addEventListener"in t?"mousewheel"===i?(t.addEventListener("DOMMouseScroll",a,!1),t.addEventListener(i,a,!1)):"mouseenter"===i||"mouseleave"===i?(r=a,h="mouseenter"===i?"mouseover":"mouseout",a=function(i){return e.DomEvent._checkMouse(t,i)?r(i):s},t.addEventListener(h,a,!1)):t.addEventListener(i,a,!1):"attachEvent"in t&&t.attachEvent("on"+i,a),t[c]=a,this))},removeListener:function(t,i,s){var o=e.stamp(s),n="_leaflet_"+i+o,a=t[n];if(a)return e.Browser.msTouch&&0===i.indexOf("touch")?this.removeMsTouchListener(t,i,o):e.Browser.touch&&"dblclick"===i&&this.removeDoubleTapListener?this.removeDoubleTapListener(t,o):"removeEventListener"in t?"mousewheel"===i?(t.removeEventListener("DOMMouseScroll",a,!1),t.removeEventListener(i,a,!1)):"mouseenter"===i||"mouseleave"===i?t.removeEventListener("mouseenter"===i?"mouseover":"mouseout",a,!1):t.removeEventListener(i,a,!1):"detachEvent"in t&&t.detachEvent("on"+i,a),t[n]=null,this},stopPropagation:function(t){return t.stopPropagation?t.stopPropagation():t.cancelBubble=!0,this},disableClickPropagation:function(t){for(var i=e.DomEvent.stopPropagation,s=e.Draggable.START.length-1;s>=0;s--)e.DomEvent.addListener(t,e.Draggable.START[s],i);return e.DomEvent.addListener(t,"click",i).addListener(t,"dblclick",i)},preventDefault:function(t){return t.preventDefault?t.preventDefault():t.returnValue=!1,this},stop:function(t){return e.DomEvent.preventDefault(t).stopPropagation(t)},getMousePosition:function(t,s){var o=i.body,n=i.documentElement,a=t.pageX?t.pageX:t.clientX+o.scrollLeft+n.scrollLeft,r=t.pageY?t.pageY:t.clientY+o.scrollTop+n.scrollTop,h=new e.Point(a,r);return s?h._subtract(e.DomUtil.getViewportOffset(s)):h},getWheelDelta:function(t){var i=0;return t.wheelDelta&&(i=t.wheelDelta/120),t.detail&&(i=-t.detail/3),i},_checkMouse:function(t,i){var s=i.relatedTarget;if(!s)return!0;try{for(;s&&s!==t;)s=s.parentNode}catch(e){return!1}return s!==t},_getEvent:function(){var i=t.event;if(!i)for(var s=arguments.callee.caller;s&&(i=s.arguments[0],!i||t.Event!==i.constructor);)s=s.caller;return i}},e.DomEvent.on=e.DomEvent.addListener,e.DomEvent.off=e.DomEvent.removeListener,e.Draggable=e.Class.extend({includes:e.Mixin.Events,statics:{START:e.Browser.touch?["touchstart","mousedown"]:["mousedown"],END:{mousedown:"mouseup",touchstart:"touchend",MSPointerDown:"touchend"},MOVE:{mousedown:"mousemove",touchstart:"touchmove",MSPointerDown:"touchmove"},TAP_TOLERANCE:15},initialize:function(t,i,s){this._element=t,this._dragStartTarget=i||t,this._longPress=s&&!e.Browser.msTouch},enable:function(){if(!this._enabled){for(var t=e.Draggable.START.length-1;t>=0;t--)e.DomEvent.on(this._dragStartTarget,e.Draggable.START[t],this._onDown,this);this._enabled=!0}},disable:function(){if(this._enabled){for(var t=e.Draggable.START.length-1;t>=0;t--)e.DomEvent.off(this._dragStartTarget,e.Draggable.START[t],this._onDown,this);this._enabled=!1,this._moved=!1}},_onDown:function(t){if(!(!e.Browser.touch&&t.shiftKey||1!==t.which&&1!==t.button&&!t.touches||(e.DomEvent.preventDefault(t),e.DomEvent.stopPropagation(t),e.Draggable._disabled))){if(this._simulateClick=!0,t.touches&&t.touches.length>1)return this._simulateClick=!1,clearTimeout(this._longPressTimeout),s;var o=t.touches&&1===t.touches.length?t.touches[0]:t,n=o.target;e.Browser.touch&&"a"===n.tagName.toLowerCase()&&e.DomUtil.addClass(n,"leaflet-active"),this._moved=!1,this._moving||(this._startPoint=new e.Point(o.clientX,o.clientY),this._startPos=this._newPos=e.DomUtil.getPosition(this._element),t.touches&&1===t.touches.length&&e.Browser.touch&&this._longPress&&(this._longPressTimeout=setTimeout(e.bind(function(){var t=this._newPos&&this._newPos.distanceTo(this._startPos)||0;e.Draggable.TAP_TOLERANCE>t&&(this._simulateClick=!1,this._onUp(),this._simulateEvent("contextmenu",o))},this),1e3)),e.DomEvent.on(i,e.Draggable.MOVE[t.type],this._onMove,this),e.DomEvent.on(i,e.Draggable.END[t.type],this._onUp,this))}},_onMove:function(t){if(!(t.touches&&t.touches.length>1)){var i=t.touches&&1===t.touches.length?t.touches[0]:t,s=new e.Point(i.clientX,i.clientY),o=s.subtract(this._startPoint);(o.x||o.y)&&(e.DomEvent.preventDefault(t),this._moved||(this.fire("dragstart"),this._moved=!0,this._startPos=e.DomUtil.getPosition(this._element).subtract(o),e.Browser.touch||(e.DomUtil.disableTextSelection(),this._setMovingCursor())),this._newPos=this._startPos.add(o),this._moving=!0,e.Util.cancelAnimFrame(this._animRequest),this._animRequest=e.Util.requestAnimFrame(this._updatePosition,this,!0,this._dragStartTarget))}},_updatePosition:function(){this.fire("predrag"),e.DomUtil.setPosition(this._element,this._newPos),this.fire("drag")},_onUp:function(t){var s;if(clearTimeout(this._longPressTimeout),this._simulateClick&&t.changedTouches){var o=t.changedTouches[0],n=o.target,a=this._newPos&&this._newPos.distanceTo(this._startPos)||0;"a"===n.tagName.toLowerCase()&&e.DomUtil.removeClass(n,"leaflet-active"),e.Draggable.TAP_TOLERANCE>a&&(s=o)}e.Browser.touch||(e.DomUtil.enableTextSelection(),this._restoreCursor());for(var r in e.Draggable.MOVE)e.Draggable.MOVE.hasOwnProperty(r)&&(e.DomEvent.off(i,e.Draggable.MOVE[r],this._onMove),e.DomEvent.off(i,e.Draggable.END[r],this._onUp));this._moved&&(e.Util.cancelAnimFrame(this._animRequest),this.fire("dragend")),this._moving=!1,s&&(this._moved=!1,this._simulateEvent("click",s))},_setMovingCursor:function(){e.DomUtil.addClass(i.body,"leaflet-dragging")},_restoreCursor:function(){e.DomUtil.removeClass(i.body,"leaflet-dragging")},_simulateEvent:function(s,e){var o=i.createEvent("MouseEvents");o.initMouseEvent(s,!0,!0,t,1,e.screenX,e.screenY,e.clientX,e.clientY,!1,!1,!1,!1,0,null),e.target.dispatchEvent(o)}}),e.Handler=e.Class.extend({initialize:function(t){this._map=t},enable:function(){this._enabled||(this._enabled=!0,this.addHooks())},disable:function(){this._enabled&&(this._enabled=!1,this.removeHooks())},enabled:function(){return!!this._enabled}}),e.Map.mergeOptions({dragging:!0,inertia:!e.Browser.android23,inertiaDeceleration:3400,inertiaMaxSpeed:1/0,inertiaThreshold:e.Browser.touch?32:18,easeLinearity:.25,longPress:!0,worldCopyJump:!1}),e.Map.Drag=e.Handler.extend({addHooks:function(){if(!this._draggable){var t=this._map;this._draggable=new e.Draggable(t._mapPane,t._container,t.options.longPress),this._draggable.on({dragstart:this._onDragStart,drag:this._onDrag,dragend:this._onDragEnd},this),t.options.worldCopyJump&&(this._draggable.on("predrag",this._onPreDrag,this),t.on("viewreset",this._onViewReset,this))}this._draggable.enable()},removeHooks:function(){this._draggable.disable()},moved:function(){return this._draggable&&this._draggable._moved},_onDragStart:function(){var t=this._map;t._panAnim&&t._panAnim.stop(),t.fire("movestart").fire("dragstart"),t.options.inertia&&(this._positions=[],this._times=[])},_onDrag:function(){if(this._map.options.inertia){var t=this._lastTime=+new Date,i=this._lastPos=this._draggable._newPos;this._positions.push(i),this._times.push(t),t-this._times[0]>200&&(this._positions.shift(),this._times.shift())}this._map.fire("move").fire("drag")},_onViewReset:function(){var t=this._map.getSize()._divideBy(2),i=this._map.latLngToLayerPoint(new e.LatLng(0,0));this._initialWorldOffset=i.subtract(t).x,this._worldWidth=this._map.project(new e.LatLng(0,180)).x},_onPreDrag:function(){var t=this._worldWidth,i=Math.round(t/2),s=this._initialWorldOffset,e=this._draggable._newPos.x,o=(e-i+s)%t+i-s,n=(e+i+s)%t-i-s,a=Math.abs(o+s)i.inertiaThreshold||!this._positions[0];if(o)t.fire("moveend");else{var n=this._lastPos.subtract(this._positions[0]),a=(this._lastTime+s-this._times[0])/1e3,r=i.easeLinearity,h=n.multiplyBy(r/a),l=h.distanceTo(new e.Point(0,0)),c=Math.min(i.inertiaMaxSpeed,l),m=h.multiplyBy(c/l),u=c/(i.inertiaDeceleration*r),d=m.multiplyBy(-u/2).round();e.Util.requestAnimFrame(function(){t.panBy(d,u,r)})}t.fire("dragend"),i.maxBounds&&e.Util.requestAnimFrame(this._panInsideMaxBounds,t,!0,t._container)},_panInsideMaxBounds:function(){this.panInsideBounds(this.options.maxBounds)}}),e.Map.addInitHook("addHandler","dragging",e.Map.Drag),e.Map.mergeOptions({doubleClickZoom:!0}),e.Map.DoubleClickZoom=e.Handler.extend({addHooks:function(){this._map.on("dblclick",this._onDoubleClick)},removeHooks:function(){this._map.off("dblclick",this._onDoubleClick)},_onDoubleClick:function(t){this.setView(t.latlng,this._zoom+1)}}),e.Map.addInitHook("addHandler","doubleClickZoom",e.Map.DoubleClickZoom),e.Map.mergeOptions({scrollWheelZoom:!0}),e.Map.ScrollWheelZoom=e.Handler.extend({addHooks:function(){e.DomEvent.on(this._map._container,"mousewheel",this._onWheelScroll,this),this._delta=0},removeHooks:function(){e.DomEvent.off(this._map._container,"mousewheel",this._onWheelScroll)},_onWheelScroll:function(t){var i=e.DomEvent.getWheelDelta(t);this._delta+=i,this._lastMousePos=this._map.mouseEventToContainerPoint(t),this._startTime||(this._startTime=+new Date);var s=Math.max(40-(+new Date-this._startTime),0);clearTimeout(this._timer),this._timer=setTimeout(e.bind(this._performZoom,this),s),e.DomEvent.preventDefault(t),e.DomEvent.stopPropagation(t)},_performZoom:function(){var t=this._map,i=this._delta,s=t.getZoom();if(i=i>0?Math.ceil(i):Math.round(i),i=Math.max(Math.min(i,4),-4),i=t._limitZoom(s+i)-s,this._delta=0,this._startTime=null,i){var e=s+i,o=this._getCenterForScrollWheelZoom(e);t.setView(o,e)}},_getCenterForScrollWheelZoom:function(t){var i=this._map,s=i.getZoomScale(t),e=i.getSize()._divideBy(2),o=this._lastMousePos._subtract(e)._multiplyBy(1-1/s),n=i._getTopLeftPoint()._add(e)._add(o);return i.unproject(n)}}),e.Map.addInitHook("addHandler","scrollWheelZoom",e.Map.ScrollWheelZoom),e.extend(e.DomEvent,{_touchstart:e.Browser.msTouch?"MSPointerDown":"touchstart",_touchend:e.Browser.msTouch?"MSPointerUp":"touchend",addDoubleTapListener:function(t,s,o){function n(t){var i;if(e.Browser.msTouch?(p.push(t.pointerId),i=p.length):i=t.touches.length,!(i>1)){var s=Date.now(),o=s-(r||s);h=t.touches?t.touches[0]:t,l=o>0&&c>=o,r=s}}function a(t){if(e.Browser.msTouch){var i=p.indexOf(t.pointerId);if(-1===i)return;p.splice(i,1)}if(l){if(e.Browser.msTouch){var o,n={};for(var a in h)o=h[a],n[a]="function"==typeof o?o.bind(h):o;h=n}h.type="dblclick",s(h),r=null}}var r,h,l=!1,c=250,m="_leaflet_",u=this._touchstart,d=this._touchend,p=[];t[m+u+o]=n,t[m+d+o]=a;var _=e.Browser.msTouch?i.documentElement:t;return t.addEventListener(u,n,!1),_.addEventListener(d,a,!1),e.Browser.msTouch&&_.addEventListener("MSPointerCancel",a,!1),this},removeDoubleTapListener:function(t,s){var o="_leaflet_";return t.removeEventListener(this._touchstart,t[o+this._touchstart+s],!1),(e.Browser.msTouch?i.documentElement:t).removeEventListener(this._touchend,t[o+this._touchend+s],!1),e.Browser.msTouch&&i.documentElement.removeEventListener("MSPointerCancel",t[o+this._touchend+s],!1),this}}),e.extend(e.DomEvent,{_msTouches:[],_msDocumentListener:!1,addMsTouchListener:function(t,i,s,e){switch(i){case"touchstart":return this.addMsTouchListenerStart(t,i,s,e);case"touchend":return this.addMsTouchListenerEnd(t,i,s,e);case"touchmove":return this.addMsTouchListenerMove(t,i,s,e);default:throw"Unknown touch event type"}},addMsTouchListenerStart:function(t,s,e,o){var n="_leaflet_",a=this._msTouches,r=function(t){for(var i=!1,s=0;a.length>s;s++)if(a[s].pointerId===t.pointerId){i=!0;break}i||a.push(t),t.touches=a.slice(),t.changedTouches=[t],e(t)};if(t[n+"touchstart"+o]=r,t.addEventListener("MSPointerDown",r,!1),!this._msDocumentListener){var h=function(t){for(var i=0;a.length>i;i++)if(a[i].pointerId===t.pointerId){a.splice(i,1);break}};i.documentElement.addEventListener("MSPointerUp",h,!1),i.documentElement.addEventListener("MSPointerCancel",h,!1),this._msDocumentListener=!0}return this},addMsTouchListenerMove:function(t,i,s,e){function o(t){if(t.pointerType!==t.MSPOINTER_TYPE_MOUSE||0!==t.buttons){for(var i=0;a.length>i;i++)if(a[i].pointerId===t.pointerId){a[i]=t;break}t.touches=a.slice(),t.changedTouches=[t],s(t)}}var n="_leaflet_",a=this._msTouches;return t[n+"touchmove"+e]=o,t.addEventListener("MSPointerMove",o,!1),this},addMsTouchListenerEnd:function(t,i,s,e){var o="_leaflet_",n=this._msTouches,a=function(t){for(var i=0;n.length>i;i++)if(n[i].pointerId===t.pointerId){n.splice(i,1);break}t.touches=n.slice(),t.changedTouches=[t],s(t)};return t[o+"touchend"+e]=a,t.addEventListener("MSPointerUp",a,!1),t.addEventListener("MSPointerCancel",a,!1),this},removeMsTouchListener:function(t,i,s){var e="_leaflet_",o=t[e+i+s];switch(i){case"touchstart":t.removeEventListener("MSPointerDown",o,!1);break;case"touchmove":t.removeEventListener("MSPointerMove",o,!1);break;case"touchend":t.removeEventListener("MSPointerUp",o,!1),t.removeEventListener("MSPointerCancel",o,!1)}return this}}),e.Map.mergeOptions({touchZoom:e.Browser.touch&&!e.Browser.android23}),e.Map.TouchZoom=e.Handler.extend({addHooks:function(){e.DomEvent.on(this._map._container,"touchstart",this._onTouchStart,this)},removeHooks:function(){e.DomEvent.off(this._map._container,"touchstart",this._onTouchStart,this)},_onTouchStart:function(t){var s=this._map;if(t.touches&&2===t.touches.length&&!s._animatingZoom&&!this._zooming){var o=s.mouseEventToLayerPoint(t.touches[0]),n=s.mouseEventToLayerPoint(t.touches[1]),a=s._getCenterLayerPoint();this._startCenter=o.add(n)._divideBy(2),this._startDist=o.distanceTo(n),this._moved=!1,this._zooming=!0,this._centerOffset=a.subtract(this._startCenter),s._panAnim&&s._panAnim.stop(),e.DomEvent.on(i,"touchmove",this._onTouchMove,this).on(i,"touchend",this._onTouchEnd,this),e.DomEvent.preventDefault(t)}},_onTouchMove:function(t){if(t.touches&&2===t.touches.length){var i=this._map,s=i.mouseEventToLayerPoint(t.touches[0]),o=i.mouseEventToLayerPoint(t.touches[1]);this._scale=s.distanceTo(o)/this._startDist,this._delta=s._add(o)._divideBy(2)._subtract(this._startCenter),1!==this._scale&&(this._moved||(e.DomUtil.addClass(i._mapPane,"leaflet-zoom-anim leaflet-touching"),i.fire("movestart").fire("zoomstart")._prepareTileBg(),this._moved=!0),e.Util.cancelAnimFrame(this._animRequest),this._animRequest=e.Util.requestAnimFrame(this._updateOnMove,this,!0,this._map._container),e.DomEvent.preventDefault(t))}},_updateOnMove:function(){var t=this._map,i=this._getScaleOrigin(),s=t.layerPointToLatLng(i);t.fire("zoomanim",{center:s,zoom:t.getScaleZoom(this._scale)}),t._tileBg.style[e.DomUtil.TRANSFORM]=e.DomUtil.getTranslateString(this._delta)+" "+e.DomUtil.getScaleString(this._scale,this._startCenter)},_onTouchEnd:function(){if(this._moved&&this._zooming){var t=this._map;this._zooming=!1,e.DomUtil.removeClass(t._mapPane,"leaflet-touching"),e.DomEvent.off(i,"touchmove",this._onTouchMove).off(i,"touchend",this._onTouchEnd);var s=this._getScaleOrigin(),o=t.layerPointToLatLng(s),n=t.getZoom(),a=t.getScaleZoom(this._scale)-n,r=a>0?Math.ceil(a):Math.floor(a),h=t._limitZoom(n+r);t.fire("zoomanim",{center:o,zoom:h}),t._runAnimation(o,h,t.getZoomScale(h)/this._scale,s,!0)}},_getScaleOrigin:function(){var t=this._centerOffset.subtract(this._delta).divideBy(this._scale);return this._startCenter.add(t)}}),e.Map.addInitHook("addHandler","touchZoom",e.Map.TouchZoom),e.Map.mergeOptions({boxZoom:!0}),e.Map.BoxZoom=e.Handler.extend({initialize:function(t){this._map=t,this._container=t._container,this._pane=t._panes.overlayPane},addHooks:function(){e.DomEvent.on(this._container,"mousedown",this._onMouseDown,this)},removeHooks:function(){e.DomEvent.off(this._container,"mousedown",this._onMouseDown)},_onMouseDown:function(t){return!t.shiftKey||1!==t.which&&1!==t.button?!1:(e.DomUtil.disableTextSelection(),this._startLayerPoint=this._map.mouseEventToLayerPoint(t),this._box=e.DomUtil.create("div","leaflet-zoom-box",this._pane),e.DomUtil.setPosition(this._box,this._startLayerPoint),this._container.style.cursor="crosshair",e.DomEvent.on(i,"mousemove",this._onMouseMove,this).on(i,"mouseup",this._onMouseUp,this).preventDefault(t),this._map.fire("boxzoomstart"),s)},_onMouseMove:function(t){var i=this._startLayerPoint,s=this._box,o=this._map.mouseEventToLayerPoint(t),n=o.subtract(i),a=new e.Point(Math.min(o.x,i.x),Math.min(o.y,i.y));e.DomUtil.setPosition(s,a),s.style.width=Math.max(0,Math.abs(n.x)-4)+"px",s.style.height=Math.max(0,Math.abs(n.y)-4)+"px"},_onMouseUp:function(t){this._pane.removeChild(this._box),this._container.style.cursor="",e.DomUtil.enableTextSelection(),e.DomEvent.off(i,"mousemove",this._onMouseMove).off(i,"mouseup",this._onMouseUp);var s=this._map,o=s.mouseEventToLayerPoint(t);if(!this._startLayerPoint.equals(o)){var n=new e.LatLngBounds(s.layerPointToLatLng(this._startLayerPoint),s.layerPointToLatLng(o));s.fitBounds(n),s.fire("boxzoomend",{boxZoomBounds:n})}}}),e.Map.addInitHook("addHandler","boxZoom",e.Map.BoxZoom),e.Map.mergeOptions({keyboard:!0,keyboardPanOffset:80,keyboardZoomOffset:1}),e.Map.Keyboard=e.Handler.extend({keyCodes:{left:[37],right:[39],down:[40],up:[38],zoomIn:[187,107,61],zoomOut:[189,109,173]},initialize:function(t){this._map=t,this._setPanOffset(t.options.keyboardPanOffset),this._setZoomOffset(t.options.keyboardZoomOffset)},addHooks:function(){var t=this._map._container;-1===t.tabIndex&&(t.tabIndex="0"),e.DomEvent.on(t,"focus",this._onFocus,this).on(t,"blur",this._onBlur,this).on(t,"mousedown",this._onMouseDown,this),this._map.on("focus",this._addHooks,this).on("blur",this._removeHooks,this)},removeHooks:function(){this._removeHooks();var t=this._map._container;e.DomEvent.off(t,"focus",this._onFocus,this).off(t,"blur",this._onBlur,this).off(t,"mousedown",this._onMouseDown,this),this._map.off("focus",this._addHooks,this).off("blur",this._removeHooks,this)},_onMouseDown:function(){this._focused||this._map._container.focus()},_onFocus:function(){this._focused=!0,this._map.fire("focus")},_onBlur:function(){this._focused=!1,this._map.fire("blur")},_setPanOffset:function(t){var i,s,e=this._panKeys={},o=this.keyCodes;for(i=0,s=o.left.length;s>i;i++)e[o.left[i]]=[-1*t,0];for(i=0,s=o.right.length;s>i;i++)e[o.right[i]]=[t,0];for(i=0,s=o.down.length;s>i;i++)e[o.down[i]]=[0,t];for(i=0,s=o.up.length;s>i;i++)e[o.up[i]]=[0,-1*t]},_setZoomOffset:function(t){var i,s,e=this._zoomKeys={},o=this.keyCodes;for(i=0,s=o.zoomIn.length;s>i;i++)e[o.zoomIn[i]]=t;for(i=0,s=o.zoomOut.length;s>i;i++)e[o.zoomOut[i]]=-t},_addHooks:function(){e.DomEvent.on(i,"keydown",this._onKeyDown,this)},_removeHooks:function(){e.DomEvent.off(i,"keydown",this._onKeyDown,this)},_onKeyDown:function(t){var i=t.keyCode,s=this._map;if(this._panKeys.hasOwnProperty(i))s.panBy(this._panKeys[i]),s.options.maxBounds&&s.panInsideBounds(s.options.maxBounds);else{if(!this._zoomKeys.hasOwnProperty(i))return;s.setZoom(s.getZoom()+this._zoomKeys[i])}e.DomEvent.stop(t)}}),e.Map.addInitHook("addHandler","keyboard",e.Map.Keyboard),e.Handler.MarkerDrag=e.Handler.extend({initialize:function(t){this._marker=t},addHooks:function(){var t=this._marker._icon;this._draggable||(this._draggable=new e.Draggable(t,t).on("dragstart",this._onDragStart,this).on("drag",this._onDrag,this).on("dragend",this._onDragEnd,this)),this._draggable.enable()},removeHooks:function(){this._draggable.disable()},moved:function(){return this._draggable&&this._draggable._moved},_onDragStart:function(){this._marker.closePopup().fire("movestart").fire("dragstart")},_onDrag:function(){var t=this._marker,i=t._shadow,s=e.DomUtil.getPosition(t._icon),o=t._map.layerPointToLatLng(s);i&&e.DomUtil.setPosition(i,s),t._latlng=o,t.fire("move",{latlng:o}).fire("drag")},_onDragEnd:function(){this._marker.fire("moveend").fire("dragend")}}),e.Handler.PolyEdit=e.Handler.extend({options:{icon:new e.DivIcon({iconSize:new e.Point(8,8),className:"leaflet-div-icon leaflet-editing-icon"})},initialize:function(t,i){this._poly=t,e.setOptions(this,i)},addHooks:function(){this._poly._map&&(this._markerGroup||this._initMarkers(),this._poly._map.addLayer(this._markerGroup))},removeHooks:function(){this._poly._map&&(this._poly._map.removeLayer(this._markerGroup),delete this._markerGroup,delete this._markers)},updateMarkers:function(){this._markerGroup.clearLayers(),this._initMarkers()},_initMarkers:function(){this._markerGroup||(this._markerGroup=new e.LayerGroup),this._markers=[];var t,i,s,o,n=this._poly._latlngs;for(t=0,s=n.length;s>t;t++)o=this._createMarker(n[t],t),o.on("click",this._onMarkerClick,this),this._markers.push(o);var a,r;for(t=0,i=s-1;s>t;i=t++)(0!==t||e.Polygon&&this._poly instanceof e.Polygon)&&(a=this._markers[i],r=this._markers[t],this._createMiddleMarker(a,r),this._updatePrevNext(a,r))},_createMarker:function(t,i){var s=new e.Marker(t,{draggable:!0,icon:this.options.icon});return s._origLatLng=t,s._index=i,s.on("drag",this._onMarkerDrag,this),s.on("dragend",this._fireEdit,this),this._markerGroup.addLayer(s),s},_fireEdit:function(){this._poly.fire("edit")},_onMarkerDrag:function(t){var i=t.target;e.extend(i._origLatLng,i._latlng),i._middleLeft&&i._middleLeft.setLatLng(this._getMiddleLatLng(i._prev,i)),i._middleRight&&i._middleRight.setLatLng(this._getMiddleLatLng(i,i._next)),this._poly.redraw()},_onMarkerClick:function(t){if(!(3>this._poly._latlngs.length)){var i=t.target,s=i._index;this._markerGroup.removeLayer(i),this._markers.splice(s,1),this._poly.spliceLatLngs(s,1),this._updateIndexes(s,-1),this._updatePrevNext(i._prev,i._next),i._middleLeft&&this._markerGroup.removeLayer(i._middleLeft),i._middleRight&&this._markerGroup.removeLayer(i._middleRight),i._prev&&i._next?this._createMiddleMarker(i._prev,i._next):i._prev?i._next||(i._prev._middleRight=null):i._next._middleLeft=null,this._poly.fire("edit")}},_updateIndexes:function(t,i){this._markerGroup.eachLayer(function(s){s._index>t&&(s._index+=i)})},_createMiddleMarker:function(t,i){var s,e,o,n=this._getMiddleLatLng(t,i),a=this._createMarker(n);a.setOpacity(.6),t._middleRight=i._middleLeft=a,e=function(){var e=i._index;a._index=e,a.off("click",s).on("click",this._onMarkerClick,this),n.lat=a.getLatLng().lat,n.lng=a.getLatLng().lng,this._poly.spliceLatLngs(e,0,n),this._markers.splice(e,0,a),a.setOpacity(1),this._updateIndexes(e,1),i._index++,this._updatePrevNext(t,a),this._updatePrevNext(a,i)},o=function(){a.off("dragstart",e,this),a.off("dragend",o,this), -this._createMiddleMarker(t,a),this._createMiddleMarker(a,i)},s=function(){e.call(this),o.call(this),this._poly.fire("edit")},a.on("click",s,this).on("dragstart",e,this).on("dragend",o,this),this._markerGroup.addLayer(a)},_updatePrevNext:function(t,i){t&&(t._next=i),i&&(i._prev=t)},_getMiddleLatLng:function(t,i){var s=this._poly._map,e=s.latLngToLayerPoint(t.getLatLng()),o=s.latLngToLayerPoint(i.getLatLng());return s.layerPointToLatLng(e._add(o)._divideBy(2))}}),e.Polyline.addInitHook(function(){e.Handler.PolyEdit&&(this.editing=new e.Handler.PolyEdit(this),this.options.editable&&this.editing.enable()),this.on("add",function(){this.editing&&this.editing.enabled()&&this.editing.addHooks()}),this.on("remove",function(){this.editing&&this.editing.enabled()&&this.editing.removeHooks()})}),e.Control=e.Class.extend({options:{position:"topright"},initialize:function(t){e.setOptions(this,t)},getPosition:function(){return this.options.position},setPosition:function(t){var i=this._map;return i&&i.removeControl(this),this.options.position=t,i&&i.addControl(this),this},addTo:function(t){this._map=t;var i=this._container=this.onAdd(t),s=this.getPosition(),o=t._controlCorners[s];return e.DomUtil.addClass(i,"leaflet-control"),-1!==s.indexOf("bottom")?o.insertBefore(i,o.firstChild):o.appendChild(i),this},removeFrom:function(t){var i=this.getPosition(),s=t._controlCorners[i];return s.removeChild(this._container),this._map=null,this.onRemove&&this.onRemove(t),this}}),e.control=function(t){return new e.Control(t)},e.Map.include({addControl:function(t){return t.addTo(this),this},removeControl:function(t){return t.removeFrom(this),this},_initControlPos:function(){function t(t,n){var a=s+t+" "+s+n;i[t+n]=e.DomUtil.create("div",a,o)}var i=this._controlCorners={},s="leaflet-",o=this._controlContainer=e.DomUtil.create("div",s+"control-container",this._container);t("top","left"),t("top","right"),t("bottom","left"),t("bottom","right")}}),e.Control.Zoom=e.Control.extend({options:{position:"topleft"},onAdd:function(t){var i="leaflet-control-zoom",s="leaflet-bar",o=s+"-part",n=e.DomUtil.create("div",i+" "+s);return this._map=t,this._zoomInButton=this._createButton("+","Zoom in",i+"-in "+o+" "+o+"-top",n,this._zoomIn,this),this._zoomOutButton=this._createButton("-","Zoom out",i+"-out "+o+" "+o+"-bottom",n,this._zoomOut,this),t.on("zoomend",this._updateDisabled,this),n},onRemove:function(t){t.off("zoomend",this._updateDisabled,this)},_zoomIn:function(t){this._map.zoomIn(t.shiftKey?3:1)},_zoomOut:function(t){this._map.zoomOut(t.shiftKey?3:1)},_createButton:function(t,i,s,o,n,a){var r=e.DomUtil.create("a",s,o);r.innerHTML=t,r.href="#",r.title=i;var h=e.DomEvent.stopPropagation;return e.DomEvent.on(r,"click",h).on(r,"mousedown",h).on(r,"dblclick",h).on(r,"click",e.DomEvent.preventDefault).on(r,"click",n,a),r},_updateDisabled:function(){var t=this._map,i="leaflet-control-zoom-disabled";e.DomUtil.removeClass(this._zoomInButton,i),e.DomUtil.removeClass(this._zoomOutButton,i),t._zoom===t.getMinZoom()&&e.DomUtil.addClass(this._zoomOutButton,i),t._zoom===t.getMaxZoom()&&e.DomUtil.addClass(this._zoomInButton,i)}}),e.Map.mergeOptions({zoomControl:!0}),e.Map.addInitHook(function(){this.options.zoomControl&&(this.zoomControl=new e.Control.Zoom,this.addControl(this.zoomControl))}),e.control.zoom=function(t){return new e.Control.Zoom(t)},e.Control.Attribution=e.Control.extend({options:{position:"bottomright",prefix:'Powered by Leaflet'},initialize:function(t){e.setOptions(this,t),this._attributions={}},onAdd:function(t){return this._container=e.DomUtil.create("div","leaflet-control-attribution"),e.DomEvent.disableClickPropagation(this._container),t.on("layeradd",this._onLayerAdd,this).on("layerremove",this._onLayerRemove,this),this._update(),this._container},onRemove:function(t){t.off("layeradd",this._onLayerAdd).off("layerremove",this._onLayerRemove)},setPrefix:function(t){return this.options.prefix=t,this._update(),this},addAttribution:function(t){return t?(this._attributions[t]||(this._attributions[t]=0),this._attributions[t]++,this._update(),this):s},removeAttribution:function(t){return t?(this._attributions[t]--,this._update(),this):s},_update:function(){if(this._map){var t=[];for(var i in this._attributions)this._attributions.hasOwnProperty(i)&&this._attributions[i]&&t.push(i);var s=[];this.options.prefix&&s.push(this.options.prefix),t.length&&s.push(t.join(", ")),this._container.innerHTML=s.join(" — ")}},_onLayerAdd:function(t){t.layer.getAttribution&&this.addAttribution(t.layer.getAttribution())},_onLayerRemove:function(t){t.layer.getAttribution&&this.removeAttribution(t.layer.getAttribution())}}),e.Map.mergeOptions({attributionControl:!0}),e.Map.addInitHook(function(){this.options.attributionControl&&(this.attributionControl=(new e.Control.Attribution).addTo(this))}),e.control.attribution=function(t){return new e.Control.Attribution(t)},e.Control.Scale=e.Control.extend({options:{position:"bottomleft",maxWidth:100,metric:!0,imperial:!0,updateWhenIdle:!1},onAdd:function(t){this._map=t;var i="leaflet-control-scale",s=e.DomUtil.create("div",i),o=this.options;return this._addScales(o,i,s),t.on(o.updateWhenIdle?"moveend":"move",this._update,this),t.whenReady(this._update,this),s},onRemove:function(t){t.off(this.options.updateWhenIdle?"moveend":"move",this._update,this)},_addScales:function(t,i,s){t.metric&&(this._mScale=e.DomUtil.create("div",i+"-line",s)),t.imperial&&(this._iScale=e.DomUtil.create("div",i+"-line",s))},_update:function(){var t=this._map.getBounds(),i=t.getCenter().lat,s=6378137*Math.PI*Math.cos(i*Math.PI/180),e=s*(t.getNorthEast().lng-t.getSouthWest().lng)/180,o=this._map.getSize(),n=this.options,a=0;o.x>0&&(a=e*(n.maxWidth/o.x)),this._updateScales(n,a)},_updateScales:function(t,i){t.metric&&i&&this._updateMetric(i),t.imperial&&i&&this._updateImperial(i)},_updateMetric:function(t){var i=this._getRoundNum(t);this._mScale.style.width=this._getScaleWidth(i/t)+"px",this._mScale.innerHTML=1e3>i?i+" m":i/1e3+" km"},_updateImperial:function(t){var i,s,e,o=3.2808399*t,n=this._iScale;o>5280?(i=o/5280,s=this._getRoundNum(i),n.style.width=this._getScaleWidth(s/i)+"px",n.innerHTML=s+" mi"):(e=this._getRoundNum(o),n.style.width=this._getScaleWidth(e/o)+"px",n.innerHTML=e+" ft")},_getScaleWidth:function(t){return Math.round(this.options.maxWidth*t)-10},_getRoundNum:function(t){var i=Math.pow(10,(Math.floor(t)+"").length-1),s=t/i;return s=s>=10?10:s>=5?5:s>=3?3:s>=2?2:1,i*s}}),e.control.scale=function(t){return new e.Control.Scale(t)},e.Control.Layers=e.Control.extend({options:{collapsed:!0,position:"topright",autoZIndex:!0},initialize:function(t,i,s){e.setOptions(this,s),this._layers={},this._lastZIndex=0,this._handlingClick=!1;for(var o in t)t.hasOwnProperty(o)&&this._addLayer(t[o],o);for(o in i)i.hasOwnProperty(o)&&this._addLayer(i[o],o,!0)},onAdd:function(t){return this._initLayout(),this._update(),t.on("layeradd",this._onLayerChange,this).on("layerremove",this._onLayerChange,this),this._container},onRemove:function(t){t.off("layeradd",this._onLayerChange).off("layerremove",this._onLayerChange)},addBaseLayer:function(t,i){return this._addLayer(t,i),this._update(),this},addOverlay:function(t,i){return this._addLayer(t,i,!0),this._update(),this},removeLayer:function(t){var i=e.stamp(t);return delete this._layers[i],this._update(),this},_initLayout:function(){var t="leaflet-control-layers",i=this._container=e.DomUtil.create("div",t);e.Browser.touch?e.DomEvent.on(i,"click",e.DomEvent.stopPropagation):(e.DomEvent.disableClickPropagation(i),e.DomEvent.on(i,"mousewheel",e.DomEvent.stopPropagation));var s=this._form=e.DomUtil.create("form",t+"-list");if(this.options.collapsed){e.DomEvent.on(i,"mouseover",this._expand,this).on(i,"mouseout",this._collapse,this);var o=this._layersLink=e.DomUtil.create("a",t+"-toggle",i);o.href="#",o.title="Layers",e.Browser.touch?e.DomEvent.on(o,"click",e.DomEvent.stopPropagation).on(o,"click",e.DomEvent.preventDefault).on(o,"click",this._expand,this):e.DomEvent.on(o,"focus",this._expand,this),this._map.on("movestart",this._collapse,this)}else this._expand();this._baseLayersList=e.DomUtil.create("div",t+"-base",s),this._separator=e.DomUtil.create("div",t+"-separator",s),this._overlaysList=e.DomUtil.create("div",t+"-overlays",s),i.appendChild(s)},_addLayer:function(t,i,s){var o=e.stamp(t);this._layers[o]={layer:t,name:i,overlay:s},this.options.autoZIndex&&t.setZIndex&&(this._lastZIndex++,t.setZIndex(this._lastZIndex))},_update:function(){if(this._container){this._baseLayersList.innerHTML="",this._overlaysList.innerHTML="";var t=!1,i=!1;for(var s in this._layers)if(this._layers.hasOwnProperty(s)){var e=this._layers[s];this._addItem(e),i=i||e.overlay,t=t||!e.overlay}this._separator.style.display=i&&t?"":"none"}},_onLayerChange:function(t){var i=e.stamp(t.layer);this._layers[i]&&!this._handlingClick&&this._update()},_createRadioElement:function(t,s){var e='t;t++)i=o[t],s=this._layers[i.layerId],i.checked&&!this._map.hasLayer(s.layer)?(this._map.addLayer(s.layer),s.overlay||(e=s.layer)):!i.checked&&this._map.hasLayer(s.layer)&&this._map.removeLayer(s.layer);e&&(this._map.setZoom(this._map.getZoom()),this._map.fire("baselayerchange",{layer:e})),this._handlingClick=!1},_expand:function(){e.DomUtil.addClass(this._container,"leaflet-control-layers-expanded")},_collapse:function(){this._container.className=this._container.className.replace(" leaflet-control-layers-expanded","")}}),e.control.layers=function(t,i,s){return new e.Control.Layers(t,i,s)},e.PosAnimation=e.Class.extend({includes:e.Mixin.Events,run:function(t,i,s,o){this.stop(),this._el=t,this._inProgress=!0,this.fire("start"),t.style[e.DomUtil.TRANSITION]="all "+(s||.25)+"s cubic-bezier(0,0,"+(o||.5)+",1)",e.DomEvent.on(t,e.DomUtil.TRANSITION_END,this._onTransitionEnd,this),e.DomUtil.setPosition(t,i),e.Util.falseFn(t.offsetWidth),this._stepTimer=setInterval(e.bind(this.fire,this,"step"),50)},stop:function(){this._inProgress&&(e.DomUtil.setPosition(this._el,this._getPos()),this._onTransitionEnd(),e.Util.falseFn(this._el.offsetWidth))},_transformRe:/(-?[\d\.]+), (-?[\d\.]+)\)/,_getPos:function(){var i,s,o,n=this._el,a=t.getComputedStyle(n);return e.Browser.any3d?(o=a[e.DomUtil.TRANSFORM].match(this._transformRe),i=parseFloat(o[1]),s=parseFloat(o[2])):(i=parseFloat(a.left),s=parseFloat(a.top)),new e.Point(i,s,!0)},_onTransitionEnd:function(){e.DomEvent.off(this._el,e.DomUtil.TRANSITION_END,this._onTransitionEnd,this),this._inProgress&&(this._inProgress=!1,this._el.style[e.DomUtil.TRANSITION]="",clearInterval(this._stepTimer),this.fire("step").fire("end"))}}),e.Map.include({setView:function(t,i,s){i=this._limitZoom(i);var e=this._zoom!==i;if(this._loaded&&!s&&this._layers){this._panAnim&&this._panAnim.stop();var o=e?this._zoomToIfClose&&this._zoomToIfClose(t,i):this._panByIfClose(t);if(o)return clearTimeout(this._sizeTimer),this}return this._resetView(t,i),this},panBy:function(t,i,s){if(t=e.point(t),!t.x&&!t.y)return this;this._panAnim||(this._panAnim=new e.PosAnimation,this._panAnim.on({step:this._onPanTransitionStep,end:this._onPanTransitionEnd},this)),this.fire("movestart"),e.DomUtil.addClass(this._mapPane,"leaflet-pan-anim");var o=e.DomUtil.getPosition(this._mapPane).subtract(t)._round();return this._panAnim.run(this._mapPane,o,i||.25,s),this},_onPanTransitionStep:function(){this.fire("move")},_onPanTransitionEnd:function(){e.DomUtil.removeClass(this._mapPane,"leaflet-pan-anim"),this.fire("moveend")},_panByIfClose:function(t){var i=this._getCenterOffset(t)._floor();return this._offsetIsWithinView(i)?(this.panBy(i),!0):!1},_offsetIsWithinView:function(t,i){var s=i||1,e=this.getSize();return Math.abs(t.x)<=e.x*s&&Math.abs(t.y)<=e.y*s}}),e.PosAnimation=e.DomUtil.TRANSITION?e.PosAnimation:e.PosAnimation.extend({run:function(t,i,s,o){this.stop(),this._el=t,this._inProgress=!0,this._duration=s||.25,this._easeOutPower=1/Math.max(o||.5,.2),this._startPos=e.DomUtil.getPosition(t),this._offset=i.subtract(this._startPos),this._startTime=+new Date,this.fire("start"),this._animate()},stop:function(){this._inProgress&&(this._step(),this._complete())},_animate:function(){this._animId=e.Util.requestAnimFrame(this._animate,this),this._step()},_step:function(){var t=+new Date-this._startTime,i=1e3*this._duration;i>t?this._runFrame(this._easeOut(t/i)):(this._runFrame(1),this._complete())},_runFrame:function(t){var i=this._startPos.add(this._offset.multiplyBy(t));e.DomUtil.setPosition(this._el,i),this.fire("step")},_complete:function(){e.Util.cancelAnimFrame(this._animId),this._inProgress=!1,this.fire("end")},_easeOut:function(t){return 1-Math.pow(1-t,this._easeOutPower)}}),e.Map.mergeOptions({zoomAnimation:e.DomUtil.TRANSITION&&!e.Browser.android23&&!e.Browser.mobileOpera}),e.DomUtil.TRANSITION&&e.Map.addInitHook(function(){e.DomEvent.on(this._mapPane,e.DomUtil.TRANSITION_END,this._catchTransitionEnd,this)}),e.Map.include(e.DomUtil.TRANSITION?{_zoomToIfClose:function(t,i){if(this._animatingZoom)return!0;if(!this.options.zoomAnimation)return!1;var s=this.getZoomScale(i),o=this._getCenterOffset(t)._divideBy(1-1/s);if(!this._offsetIsWithinView(o,1))return!1;e.DomUtil.addClass(this._mapPane,"leaflet-zoom-anim"),this.fire("movestart").fire("zoomstart"),this.fire("zoomanim",{center:t,zoom:i});var n=this._getCenterLayerPoint().add(o);return this._prepareTileBg(),this._runAnimation(t,i,s,n),!0},_catchTransitionEnd:function(){this._animatingZoom&&this._onZoomTransitionEnd()},_runAnimation:function(t,i,s,o,n){this._animateToCenter=t,this._animateToZoom=i,this._animatingZoom=!0,e.Draggable&&(e.Draggable._disabled=!0);var a=e.DomUtil.TRANSFORM,r=this._tileBg;clearTimeout(this._clearTileBgTimer),e.Util.falseFn(r.offsetWidth);var h=e.DomUtil.getScaleString(s,o),l=r.style[a];r.style[a]=n?l+" "+h:h+" "+l},_prepareTileBg:function(){var t=this._tilePane,i=this._tileBg;if(i&&this._getLoadedTilesPercentage(i)>.5&&.5>this._getLoadedTilesPercentage(t))return t.style.visibility="hidden",t.empty=!0,this._stopLoadingImages(t),s;i||(i=this._tileBg=this._createPane("leaflet-tile-pane",this._mapPane),i.style.zIndex=1),i.style[e.DomUtil.TRANSFORM]="",i.style.visibility="hidden",i.empty=!0,t.empty=!1,this._tilePane=this._panes.tilePane=i;var o=this._tileBg=t;e.DomUtil.addClass(o,"leaflet-zoom-animated"),this._stopLoadingImages(o)},_getLoadedTilesPercentage:function(t){var i,s,e=t.getElementsByTagName("img"),o=0;for(i=0,s=e.length;s>i;i++)e[i].complete&&o++;return o/s},_stopLoadingImages:function(t){var i,s,o,n=Array.prototype.slice.call(t.getElementsByTagName("img"));for(i=0,s=n.length;s>i;i++)o=n[i],o.complete||(o.onload=e.Util.falseFn,o.onerror=e.Util.falseFn,o.src=e.Util.emptyImageUrl,o.parentNode.removeChild(o))},_onZoomTransitionEnd:function(){this._restoreTileFront(),e.DomUtil.removeClass(this._mapPane,"leaflet-zoom-anim"),e.Util.falseFn(this._tileBg.offsetWidth),this._animatingZoom=!1,this._resetView(this._animateToCenter,this._animateToZoom,!0,!0),e.Draggable&&(e.Draggable._disabled=!1)},_restoreTileFront:function(){this._tilePane.innerHTML="",this._tilePane.style.visibility="",this._tilePane.style.zIndex=2,this._tileBg.style.zIndex=1},_clearTileBg:function(){this._animatingZoom||this.touchZoom._zooming||(this._tileBg.innerHTML="")}}:{}),e.Map.include({_defaultLocateOptions:{watch:!1,setView:!1,maxZoom:1/0,timeout:1e4,maximumAge:0,enableHighAccuracy:!1},locate:function(t){if(t=this._locationOptions=e.extend(this._defaultLocateOptions,t),!navigator.geolocation)return this._handleGeolocationError({code:0,message:"Geolocation not supported."}),this;var i=e.bind(this._handleGeolocationResponse,this),s=e.bind(this._handleGeolocationError,this);return t.watch?this._locationWatchId=navigator.geolocation.watchPosition(i,s,t):navigator.geolocation.getCurrentPosition(i,s,t),this},stopLocate:function(){return navigator.geolocation&&navigator.geolocation.clearWatch(this._locationWatchId),this},_handleGeolocationError:function(t){var i=t.code,s=t.message||(1===i?"permission denied":2===i?"position unavailable":"timeout");this._locationOptions.setView&&!this._loaded&&this.fitWorld(),this.fire("locationerror",{code:i,message:"Geolocation error: "+s+"."})},_handleGeolocationResponse:function(t){var i=180*t.coords.accuracy/4e7,s=2*i,o=t.coords.latitude,n=t.coords.longitude,a=new e.LatLng(o,n),r=new e.LatLng(o-i,n-s),h=new e.LatLng(o+i,n+s),l=new e.LatLngBounds(r,h),c=this._locationOptions;if(c.setView){var m=Math.min(this.getBoundsZoom(l),c.maxZoom);this.setView(a,m)}this.fire("locationfound",{latlng:a,bounds:l,accuracy:t.coords.accuracy})}})}(this,document),L.Proj={},L.Proj._isProj4Proj=function(t){return t.projName!==void 0},L.Proj.Projection=L.Class.extend({initialize:function(t,i){if(L.Proj._isProj4Proj(t))this._proj=t;else{var s=t;Proj4js.defs[s]=i,this._proj=new Proj4js.Proj(s)}},project:function(t){var i=new L.Point(t.lng,t.lat);return Proj4js.transform(Proj4js.WGS84,this._proj,i)},unproject:function(t,i){var s=Proj4js.transform(this._proj,Proj4js.WGS84,t.clone());return new L.LatLng(s.y,s.x,i)}}),L.Proj.CRS=L.Class.extend({includes:L.CRS,options:{transformation:new L.Transformation(1,0,-1,0)},initialize:function(t,i,s){var e,o,n,a;L.Proj._isProj4Proj(t)?(o=t,e=o.srsCode,a=i||{},this.projection=new L.Proj.Projection(o)):(e=t,n=i,a=s||{},this.projection=new L.Proj.Projection(e,n)),L.Util.setOptions(this,a),this.code=e,this.transformation=this.options.transformation,this.options.origin&&(this.transformation=new L.Transformation(1,-this.options.origin[0],-1,this.options.origin[1])),this.options.scales?this.scale=function(t){return this.options.scales[t]}:this.options.resolutions&&(this.scale=function(t){return 1/this.options.resolutions[t]})}}),L.Proj.CRS.TMS=L.Proj.CRS.extend({initialize:function(t,i,s,e){if(L.Proj._isProj4Proj(t)){var o=t,n=i,a=s||{};a.origin=[n[0],n[3]],L.Proj.CRS.prototype.initialize(o,a)}else{var r=t,h=i,n=s,a=e||{};a.origin=[n[0],n[3]],L.Proj.CRS.prototype.initialize(r,h,a)}this.projectedBounds=n}}),L.Proj.TileLayer={},L.Proj.TileLayer.TMS=L.TileLayer.extend({options:{tms:!0,continuousWorld:!0},initialize:function(t,i,s){if(!(i instanceof L.Proj.CRS.TMS))throw Error("CRS is not L.Proj.CRS.TMS.");L.TileLayer.prototype.initialize.call(this,t,s),this.crs=i;for(var e=this.options.minZoom;this.options.maxZoom>e;e++){var o=(this.crs.projectedBounds[3]-this.crs.projectedBounds[1])/this._projectedTileSize(e);if(Math.abs(o-Math.round(o))>.001)throw Error("Projected bounds does not match grid at zoom "+e)}},getTileUrl:function(t){var i=Math.round((this.crs.projectedBounds[3]-this.crs.projectedBounds[1])/this._projectedTileSize(this._map.getZoom()));return L.Util.template(this._url,L.Util.extend({s:this._getSubdomain(t),z:this._getZoomForUrl(),x:t.x,y:i-t.y-1},this.options))},_projectedTileSize:function(t){return this.options.tileSize/this.crs.scale(t)}}),"undefined"!=typeof module&&(module.exports=L.Proj),"undefined"!=typeof L&&L.CRS!==void 0&&(L.CRS.proj4js=function(){return function(t,i,s,e){return e=e||{},s&&(e.transformation=s),new L.Proj.CRS(t,i,e)}}()),L.Control.MousePosition=L.Control.extend({options:{position:"bottomleft",separator:" : ",emptyString:"Unavailable",lngFirst:!1,numDigits:5,lngFormatter:void 0,latFormatter:void 0},onAdd:function(t){return this._container=L.DomUtil.create("div","leaflet-control-mouseposition"),L.DomEvent.disableClickPropagation(this._container),t.on("mousemove",this._onMouseMove,this),this._container.innerHTML=this.options.emptyString,this._container},onRemove:function(t){t.off("mousemove",this._onMouseMove)},_onMouseMove:function(t){var i=L.Util.formatNum(t.latlng.lng,this.options.numDigits),s=L.Util.formatNum(t.latlng.lat,this.options.numDigits);this.options.lngFormatter&&(i=this.options.lngFormatter(i)),this.options.latFormatter&&(s=this.options.latFormatter(s));var e=this.options.lngFirst?i+this.options.separator+s:s+this.options.separator+i;this._container.innerHTML=e}}),L.Map.mergeOptions({positionControl:!1}),L.Map.addInitHook(function(){this.options.positionControl&&(this.positionControl=new L.Control.MousePosition,this.addControl(this.positionControl))}),L.control.mousePosition=function(t){return new L.Control.MousePosition(t)},function(t,i){L.KSP={},L.KSP.version="0.2.1",L.KSP.CRS={},L.KSP.CRS.EPSG4326=new L.Proj.CRS.TMS(new Proj4js.Proj("EPSG:4326"),[-180,-90,180,90],{resolutions:[.703125,.3515625,.17578125,.087890625,.0439453125,.02197265625]}),L.KSP.CelestialBody=L.Class.extend({initialize:function(t){if(!t.hasOwnProperty("id"))throw Error("must specify id");if(!t.hasOwnProperty("name"))throw Error("must specify name");if(t.hasOwnProperty("crs")){if(!(t.crs instanceof L.Proj.CRS.TMS))throw Error("crs is not an instance of L.Proj.CRS.TMS")}else this.crs=L.KSP.CRS.EPSG4326;t.hasOwnProperty("radius")||(this.radius=1),t.hasOwnProperty("thumbnail")||(this.thumbnail="body-unknown.png"),t.hasOwnProperty("baseLayers")||(this.baseLayers={}),L.Util.extend(this,t)},addTo:function(t){var i,s=t._body;if(t._body=this,t.fire("bodychangestart",{body:this,oldBody:s}),s){for(i in s.baseLayers)s.baseLayers.hasOwnProperty(i)&&t.removeLayer(s.baseLayers[i]);for(i in s.overlays)s.overlays.hasOwnProperty(i)&&t.removeLayer(s.overlays[i])}var e=this.defaultLayer||this.baseLayers.Satellite;if(e){for(i in this.baseLayers)if(this.baseLayers.hasOwnProperty(i)&&this.baseLayers[i]._type===t._baseLayerType){e=this.baseLayers[i];break}t.addLayer(e),t.fire("baselayerchange",{layer:e})}for(i in this.overlays)this.overlays.hasOwnProperty(i)&&t._overlayTypes.indexOf(this.overlays[i]._type)>=0&&(t.addLayer(this.overlays[i]),t.fire("layeradd",{layer:this.overlays[i]}));t.fire("bodychangeend",{body:this,oldBody:s})},onAdd:function(t){this.addTo(t)},removeFrom:function(t){L.KSP.CelestialBody.DUMMY.addTo(t)},onRemove:function(t){this.removeFrom(t)}}),L.KSP.celestialBody=function(t){return new L.KSP.CelestialBody(t)},L.KSP.CelestialBody.DUMMY=L.KSP.celestialBody({id:"",name:"",crs:L.KSP.CRS.EPSG4326}),L.KSP.CelestialBody.ALL_PLANETARY=[L.KSP.CelestialBody.DUMMY],L.KSP.Map=L.Map.extend({options:{crs:L.KSP.CRS.EPSG4326,continuousWorld:!0},initialize:function(t,i){this._baseLayerType=-1,this._overlayTypes=[],L.Util.setOptions(this,i),this.startTrackingLayerState(),this.on("bodychangestart",this._onBodyChangeStart).on("bodychangeend",this._onBodyChangeEnd),L.Map.prototype.initialize.call(this,t,this.options)},clampZoom:function(){var t=this.getZoom(),i=this.getMinZoom(),s=this.getMaxZoom();i>t?this.setZoom(i):t>s?this.setZoom(s):this.fire("zoomend",this)},_onBodyChangeStart:function(){this.stopTrackingLayerState()},_onBodyChangeEnd:function(){this.clampZoom(),this.startTrackingLayerState()},_onLayerStateChange:function(t){if("layeradd"===t.type)t.layer instanceof L.KSP.TileLayer?this._baseLayerType=t.layer._type:t.layer instanceof L.KSP.LayerGroup&&0>this._overlayTypes.indexOf(t.layer._type)&&this._overlayTypes.push(t.layer._type);else if(t.layer instanceof L.KSP.LayerGroup){var i,s,e=t.layer._type,o=this._overlayTypes;for(i=o.length-1;i>=0;i--)s=o[i],s===e&&o.splice(i,1)}},startTrackingLayerState:function(){this.on("layeradd",this._onLayerStateChange).on("layerremove",this._onLayerStateChange)},stopTrackingLayerState:function(){this.off("layeradd",this._onLayerStateChange).off("layerremove",this._onLayerStateChange)}}),L.KSP.map=function(t,i){return new L.KSP.Map(t,i)},L.KSP.TileLayer=L.Proj.TileLayer.TMS.extend({statics:{TYPE_SATELLITE:0,TYPE_COLORRELIEF:1,TYPE_SLOPE:2,DEFAULT_URL:"http://tiles.kerbalmaps.com/{body}/{style}/{z}/{x}/{y}.png"},options:{continuousWorld:!1,noWrap:!1,minZoom:0,maxZoom:5,attribution:"Map data © Joel Pedraza"},initialize:function(t,i,s,e){L.Util.setOptions(this,e),this._type=t,L.Proj.TileLayer.TMS.prototype.initialize.call(this,i,s,this.options)}}),L.KSP.tileLayer=function(t,i,s,e){return new L.KSP.TileLayer(t,i,s,e)},L.KSP.LayerGroup=L.LayerGroup.extend({statics:{TYPE_SPACECENTER:0,TYPE_ANOMALY:1},initialize:function(t,i){this._type=t,L.LayerGroup.prototype.initialize.call(this,i)}}),L.KSP.layerGroup=function(t,i){return new L.KSP.LayerGroup(t,i)},L.KSP.Icon={},L.KSP.Icon.SPACECENTER=new L.Icon({iconUrl:"../assets/images/markers-spacecenter.png",shadowUrl:"../assets/images/markers-shadow.png",iconSize:[30,40],shadowSize:[35,16],iconAnchor:[15,40],shadowAnchor:[10,12],popupAnchor:[0,-35]}),L.KSP.Icon.ANOMALY=new L.Icon({iconUrl:"../assets/images/markers-anomaly.png",shadowUrl:"../assets/images/markers-shadow.png",iconSize:[30,40],shadowSize:[35,16],iconAnchor:[15,40],shadowAnchor:[10,12],popupAnchor:[0,-35]}),L.KSP.Legend={},L.KSP.Legend.SLOPE={"≥ 60°":"#E19678","< 60°":"#C86464","< 30°":"#965A64","< 15°":"#645064","< 5°":"#325064","0°":"#32465A"},L.KSP.Control=L.KSP.control={},L.KSP.Control.Legend=L.Control.extend({options:{position:"bottomright"},onAdd:function(t){return this._container=L.DomUtil.create("div","leaflet-control-legend"),t.on("baselayerchange",this._onLayerChange,this),this._container},_update:function(t){if(this._container.innerHTML="",t){for(var i in t)t.hasOwnProperty(i)&&(this._container.innerHTML+=''+i+"
    ");L.DomUtil.addClass(this._container,"leaflet-control-legend-visible")}else this._container.className=this._container.className.replace(" leaflet-control-legend-visible","")},_onLayerChange:function(t){this._update(t.layer.options.legend)}}),L.Map.mergeOptions({legendControl:!0}),L.Map.addInitHook(function(){this.options.bodyControl&&(this.legendControl=new L.KSP.Control.Legend,this.addControl(this.legendControl))}),L.control.legend=function(t){return new L.KSP.Control.Legend(t)},L.KSP.Control.Scale=L.Control.Scale.extend({options:{imperial:!1},onAdd:function(t){this._radius=0,t._body&&(this._radius=t._body.radius);var i=L.Control.Scale.prototype.onAdd.call(this,t);return t.on("bodychangeend",this._onBodyChangeEnd,this),i},onRemove:function(t){L.Control.Scale.prototype.onRemove.call(this,t),t.off("bodychangeend",this._onBodyChangeEnd)},_onBodyChangeEnd:function(t){this._radius=t.body.radius,this._update()},_update:function(){var t=this._map.getBounds(),i=t.getCenter().lat,s=this._radius*Math.PI*Math.cos(i*Math.PI/180),e=s*(t.getNorthEast().lng-t.getSouthWest().lng)/180,o=this._map.getSize(),n=this.options,a=0;o.x>0&&(a=e*(n.maxWidth/o.x)),this._updateScales(n,a)}}),L.KSP.Map.mergeOptions({scaleControl:!1}),L.KSP.Map.addInitHook(function(){this.options.scaleControl&&(this.scaleControl=new L.KSP.Control.Scale,this.addControl(this.scaleControl))}),L.KSP.control.scale=function(t){return new L.KSP.Control.Scale(t)},L.KSP.Control.CelestialBody=L.Control.extend({options:{position:"topright",collapsed:!0},initialize:function(t,i){L.Util.setOptions(this,i),this._bodies=t,this._timeInMillis=(new Date).valueOf(),this._weekInMillis=6048e5},onAdd:function(){return this._initLayout(),this._update(),this._map.on("bodychangeend",this._update,this),this._container},_initLayout:function(){var t="leaflet-control-celestialbodies",s=this._container=L.DomUtil.create("div",t),e=this._bodies;if(this.options.collapsed){L.DomEvent.on(s,"mouseover",this._expand,this).on(s,"mouseout",this._collapse,this);var o=this._bodiesLink=L.DomUtil.create("a",t+"-toggle",s);o.href="#",o.title="Celestial Bodies",L.DomEvent.on(o,"focus",this._expand,this),this._map.on("movestart",this._collapse,this)}var n=this._list=L.DomUtil.create("ul",t+"-list",s);for(var a in e)if(e.hasOwnProperty(a)){var r=this._addBody(e[a],n);if(e[a].children){var h=i.createElement("ul");for(var l in e[a].children)e[a].children.hasOwnProperty(l)&&this._addBody(e[a].children[l],h);r.appendChild(h)}}},_update:function(){this._map._body&&(this._bodiesLink.style.backgroundImage='url("'+this._map._body.thumbnail+'")')},_addBody:function(t,s){var e,o=i.createElement("li"),n=i.createElement("img");if(n.src=t.thumbnail,n.alt=o.title=t.name,t.addedOn){this._timeInMillis-t.addedOnKerbal Space Center
    -0.0969 : -74.6004"),L.marker([20.5829,-146.5116],{icon:L.KSP.Icon.SPACECENTER}).bindPopup("Kerbal Space Center 2
    20.5829 : -146.5116"),L.marker([-1.5409,-71.9099],{icon:L.KSP.Icon.SPACECENTER}).bindPopup("Island Airfield
    -1.5409 : -71.9099")]),Anomalies:L.KSP.layerGroup(L.KSP.LayerGroup.TYPE_ANOMALY,[L.marker([.1023,-74.5684],{icon:L.KSP.Icon.ANOMALY}).bindPopup("0.1023 : -74.5684"),L.marker([20.6709,-146.4968],{icon:L.KSP.Icon.ANOMALY}).bindPopup("20.6709 : -146.4968"),L.marker([35.5705,-74.9773],{icon:L.KSP.Icon.ANOMALY}).bindPopup("35.5705 : -74.9773"),L.marker([-.6402,-80.7668],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-0.6402 : -80.7668"),L.marker([-28.8083,-13.4401],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-28.8083 : -13.4401"),L.marker([-6.5057,-141.6856],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-6.5057 : -141.6856"),L.marker([81.9551,-128.518],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-81.9551 : -128.518")])}}),L.KSP.CelestialBody.MUN=L.KSP.celestialBody({id:"mun",name:"Mun",crs:L.KSP.CRS.EPSG4326,radius:2e5,addedOn:13682304e5,lastUpdated:1368144e6,thumbnail:"body-mun.png",baseLayers:{Satellite:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SATELLITE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{body:"mun",style:"sat"}),"Color Relief":L.KSP.tileLayer(L.KSP.TileLayer.TYPE_COLORRELIEF,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{body:"mun",style:"color",legend:{"3150 m":"#EBEBEB","-180 m":"#232323"}}),Slope:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SLOPE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{body:"mun",style:"slope",legend:L.KSP.Legend.SLOPE})},overlays:{Anomalies:L.KSP.layerGroup(L.KSP.LayerGroup.TYPE_ANOMALY,[L.marker([-9.8314,25.9177],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-9.8314 : 25.9177"),L.marker([-82.2063,102.9305],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-82.2063 : 102.9305"),L.marker([57.6604,9.1422],{icon:L.KSP.Icon.ANOMALY}).bindPopup("57.6604 : 9.1422"),L.marker([2.4695,81.5133],{icon:L.KSP.Icon.ANOMALY}).bindPopup("2.4695 : 81.5133"),L.marker([12.4432,39.178],{icon:L.KSP.Icon.ANOMALY}).bindPopup("12.4432 : 39.1780"),L.marker([-12.4431,-140.822],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-12.4431 : -140.8220"),L.marker([.7027,22.747],{icon:L.KSP.Icon.ANOMALY}).bindPopup("0.7027 : 22.7470"),L.marker([-70.9556,-68.1378],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-70.9556,-68.1378")])}}),L.KSP.CelestialBody.MINMUS=L.KSP.celestialBody({id:"minmus",name:"Minmus",crs:L.KSP.CRS.EPSG4326,radius:6e4,addedOn:13682304e5,lastUpdated:13682304e5,thumbnail:"body-minmus.png",baseLayers:{Satellite:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SATELLITE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"sat",body:"minmus"}),"Color Relief":L.KSP.tileLayer(L.KSP.TileLayer.TYPE_COLORRELIEF,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"color",body:"minmus",legend:{"5750 m":"#414B41","2500 m":"#BEE6C3","1 m":"#96CDB4","0 m":"#87B9A5"}}),Slope:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SLOPE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"slope",body:"minmus",legend:L.KSP.Legend.SLOPE})},overlays:{Anomalies:L.KSP.layerGroup(L.KSP.LayerGroup.TYPE_ANOMALY,[L.marker([23.7768,60.0462],{icon:L.KSP.Icon.ANOMALY}).bindPopup("23.7768 : 60.0462")])}}),L.KSP.CelestialBody.DUNA=L.KSP.celestialBody({id:"duna",name:"Duna",crs:L.KSP.CRS.EPSG4326,radius:32e4,addedOn:13688352e5,lastUpdated:13688352e5,thumbnail:"body-duna.png",baseLayers:{Satellite:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SATELLITE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"sat",body:"duna"}),"Color Relief":L.KSP.tileLayer(L.KSP.TileLayer.TYPE_COLORRELIEF,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"color",body:"duna",legend:{"4800 m":"#C3A082","4000 m":"#966446","3000 m":"#733219","2000 m":"#501E14","1000 m":"#3C140F","0 m":"#280F0A"}}),Slope:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SLOPE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"slope",body:"duna",legend:L.KSP.Legend.SLOPE})},overlays:{Anomalies:L.KSP.layerGroup(L.KSP.LayerGroup.TYPE_ANOMALY,[L.marker([17.0483,-85.4717],{icon:L.KSP.Icon.ANOMALY}).bindPopup("17.0483 : -85.4717"),L.marker([-30.3525,-28.6828],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-30.3525 : -28.6828"),L.marker([-66.1344,-160.7432],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-66.1344 : -160.7432")])}}),L.KSP.CelestialBody.IKE=L.KSP.celestialBody({id:"ike",name:"Ike",crs:L.KSP.CRS.EPSG4326,radius:13e4,addedOn:13688352e5,lastUpdated:13688352e5,thumbnail:"body-ike.png",baseLayers:{Satellite:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SATELLITE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"sat",body:"ike"}),"Color Relief":L.KSP.tileLayer(L.KSP.TileLayer.TYPE_COLORRELIEF,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"color",body:"ike",legend:{"13000 m":"#828282","11000 m":"#6E6E6E","9000 m":"#5A5A5A","7000 m":"#464646","5000 m":"#323232","2500 m":"#191919","70 m":"#070707"}}),Slope:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SLOPE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"slope",body:"ike",legend:L.KSP.Legend.SLOPE})},overlays:{}}),L.KSP.CelestialBody.DRES=L.KSP.celestialBody({id:"dres",name:"Dres",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-dres.png"}),L.KSP.CelestialBody.JOOL=L.KSP.celestialBody({id:"jool",name:"Jool",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-jool.png"}),L.KSP.CelestialBody.LAYTHE=L.KSP.celestialBody({id:"laythe",name:"Laythe",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-laythe.png"}),L.KSP.CelestialBody.VALL=L.KSP.celestialBody({id:"vall",name:"Vall",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-vall.png"}),L.KSP.CelestialBody.TYLO=L.KSP.celestialBody({id:"tylo",name:"Tylo",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-tylo.png"}),L.KSP.CelestialBody.BOP=L.KSP.celestialBody({id:"bop",name:"Bop",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-bop.png"}),L.KSP.CelestialBody.POL=L.KSP.celestialBody({id:"pol",name:"Pol",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-pol.png"}),L.KSP.CelestialBody.EELOO=L.KSP.celestialBody({id:"eeloo",name:"Eeloo",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-eeloo.png"}),L.KSP.CelestialBody.KERBIN.defaultLayer=L.KSP.CelestialBody.KERBIN.baseLayers.Satellite,L.KSP.CelestialBody.MUN.defaultLayer=L.KSP.CelestialBody.MUN.baseLayers.Satellite,L.KSP.CelestialBody.MINMUS.defaultLayer=L.KSP.CelestialBody.MINMUS.baseLayers.Satellite,L.KSP.CelestialBody.EVE.children=[L.KSP.CelestialBody.GILLY],L.KSP.CelestialBody.KERBIN.children=[L.KSP.CelestialBody.MUN,L.KSP.CelestialBody.MINMUS],L.KSP.CelestialBody.DUNA.children=[L.KSP.CelestialBody.IKE],L.KSP.CelestialBody.JOOL.children=[L.KSP.CelestialBody.LAYTHE,L.KSP.CelestialBody.VALL,L.KSP.CelestialBody.TYLO,L.KSP.CelestialBody.BOP,L.KSP.CelestialBody.POL],L.KSP.CelestialBody.GILLY.parent=L.KSP.CelestialBody.EVE,L.KSP.CelestialBody.MUN.parent=L.KSP.CelestialBody.MINMUS.parent=L.KSP.CelestialBody.KERBIN,L.KSP.CelestialBody.IKE.parent=L.KSP.CelestialBody.DUNA,L.KSP.CelestialBody.LAYTHE.parent=L.KSP.CelestialBody.VALL.parent=L.KSP.CelestialBody.TYLO.parent=L.KSP.CelestialBody.BOP.parent=L.KSP.CelestialBody.POL.parent=L.KSP.CelestialBody.JOOL,L.KSP.CelestialBody.ALL_PLANETARY=[L.KSP.CelestialBody.MOHO,L.KSP.CelestialBody.EVE,L.KSP.CelestialBody.KERBIN,L.KSP.CelestialBody.DUNA,L.KSP.CelestialBody.DRES,L.KSP.CelestialBody.JOOL,L.KSP.CelestialBody.EELOO],L.KSP.Map.addInitHook(function(){this.options.layers=[L.KSP.CelestialBody.KERBIN]})}(this,document);var Settings=Class.create({initialize:function(defaultHost,defaultPort){if(!this.getHost()){this.setHost(defaultHost)}if(!this.getPort()){this.setPort(defaultPort)}},getHost:function(){return this.get("host")},getPort:function(){return this.get("port")},setHost:function(value){return this.set("host",value)},setPort:function(value){return this.set("port",value)},get:function(property){return localStorage.getItem(property)},set:function(property,value){return localStorage.setItem(property,value)}});var Telemachus=Class.create({initialize:function(host,port){this.updateConnection(host,port);this.receiverFunctions=[];this.subscribedFields={};this.orbitingBodies=this.getOrbitalBodies();this.rate=500;this.loopTimeout=setTimeout(this.poll.bind(this),this.rate)},url:function(){return"http://"+this.host+":"+this.port+"/telemachus/datalink"},updateConnection:function(host,port){this.host=host;this.port=port},addReceiverFunction:function(func){this.receiverFunctions.push(func)},subscribeToData:function(fields){for(var i=fields.length-1;i>=0;i--){var field=fields[i];this.subscribedFields[field]=field}},dispatchMessages:function(data){for(var i=this.receiverFunctions.length-1;i>=0;i--){try{this.receiverFunctions[i](data)}catch(e){console.error(e)}}},send:function(message){this.socket.send(JSON.stringify(message))},getOrbitalBodyInfo:function(name){var properties=this.orbitingBodies[name];if(properties){return Object.extend({name:name},properties)}else{return null}},notifyIfLOS:function(request){if(request.transport.status==0){document.fire("telemachus:loss-of-signal");return true}return false},prepareParams:function(params){var normalizedParams=[];Object.keys(params).forEach(function(field){var sanitizedFieldName=field.replace("[","{").replace("]","}");normalizedParams.push(sanitizedFieldName+"="+field)});return normalizedParams},convertData:function(rawData){var data={};var startBracesRegexp=/\{/g;var endBracesRegexp=/\}/g;Object.keys(rawData).forEach(function(key){var convertedFieldName=key.replace(startBracesRegexp,"[").replace(endBracesRegexp,"]");data[convertedFieldName]=rawData[key]});return data},poll:function(){var params=this.prepareParams(this.subscribedFields);var requestURL=this.url()+"?"+params.join("&");new Ajax.Request(requestURL,{method:"get",onSuccess:function(response){var rawData=JSON.parse(response.responseText);var data=this.convertData(rawData);this.dispatchMessages(data)}.bind(this),onException:this.notifyIfLOS.bind(this),onComplete:function(response){setTimeout(this.poll.bind(this),this.rate)}.bind(this)})},sendMessage:function(params,callback){new Ajax.Request(this.url(),{method:"post",postBody:JSON.stringify(params),onSuccess:function(response){var rawData=JSON.parse(response.responseText);var data=this.convertData(rawData);callback(data)}.bind(this),onException:this.notifyIfLOS.bind(this)})},getOrbitalBodies:function(){return{Sun:{id:0,referenceBodyName:null,mapBody:null,atmosphericRadius:0,color:"#FFFF00",surfaceGravity:17.1},Kerbin:{id:1,referenceBodyName:"Sun",mapBody:L.KSP.CelestialBody.KERBIN,atmosphericRadius:7e4,color:"#4a5472",surfaceGravity:9.81},Mun:{id:2,referenceBodyName:"Kerbin",mapBody:L.KSP.CelestialBody.MUN,atmosphericRadius:0,color:"#e2e0d7",surfaceGravity:1.63},Minmus:{id:3,referenceBodyName:"Kerbin",mapBody:L.KSP.CelestialBody.MINMUS,color:"#98f2c5",atmosphericRadius:0,surfaceGravity:.491},Moho:{id:4,referenceBodyName:"Sun",mapBody:L.KSP.CelestialBody.MOHO,atmosphericRadius:0,color:"#fdc39e",surfaceGravity:2.7},Eve:{id:5,referenceBodyName:"Sun",mapBody:L.KSP.CelestialBody.EVE,atmosphericRadius:9e4,color:"#c394fe",surfaceGravity:16.7},Duna:{id:6,referenceBodyName:"Sun",mapBody:L.KSP.CelestialBody.DUNA,atmosphericRadius:5e4,color:"#fc5e49",surfaceGravity:2.94},Ike:{id:7,referenceBodyName:"Duna",mapBody:L.KSP.CelestialBody.IKE,atmosphericRadius:0,color:"#e2e0d7",surfaceGravity:1.1},Jool:{id:8,referenceBodyName:"Sun",mapBody:L.KSP.CelestialBody.JOOL,atmosphericRadius:2e5,color:"#C5DCAB",surfaceGravity:7.85},Laythe:{id:9,referenceBodyName:"Jool",mapBody:L.KSP.CelestialBody.LAYTHE,atmosphericRadius:5e4,color:"#a8b4fe",surfaceGravity:7.85},Vall:{id:10,referenceBodyName:"Jool",mapBody:L.KSP.CelestialBody.VALL,atmosphericRadius:0,color:"#b0f4fe",surfaceGravity:2.31},Bop:{id:11,referenceBodyName:"Jool",mapBody:L.KSP.CelestialBody.BOP,atmosphericRadius:0,color:"#c64605",surfaceGravity:.589},Tylo:{id:12,referenceBodyName:"Jool",mapBody:L.KSP.CelestialBody.TYLO,atmosphericRadius:0,color:"#fdf7ed",surfaceGravity:7.85},Gilly:{id:13,referenceBodyName:"Eve",mapBody:L.KSP.CelestialBody.GILLY,atmosphericRadius:0,color:"#fdcbb1",surfaceGravity:.049},Pol:{id:14,referenceBodyName:"Pol",mapBody:L.KSP.CelestialBody.POL,atmosphericRadius:0,color:"#fec681",surfaceGravity:.373},Dres:{id:15,referenceBodyName:"Sun",mapBody:L.KSP.CelestialBody.DRES,atmosphericRadius:0,color:"#fef8f9",surfaceGravity:1.13},Eeloo:{id:16,referenceBodyName:"Sun",mapBody:L.KSP.CelestialBody.EELOO,atmosphericRadius:0,color:"#e5fafe",surfaceGravity:1.69}}}});var TitleBar=Class.create({initialize:function(datalink,title_bar_id){this.datalink=datalink;this.title_bar_id=title_bar_id;this.title_bar=$(this.title_bar_id);this.initializeLOSNotifier();this.initializeDatalink()},update:function(data){window.requestAnimationFrame(function(){this.title_bar.down("#world-clock").update(TimeFormatters.formatUT(data["t.universalTime"]));this.title_bar.down("#mission-time").update(TimeFormatters.formatMET(data["v.missionTime"]));this.title_bar.down("#mission-time").removeClassName("loss-of-signal")}.bind(this))},initializeLOSNotifier:function(){document.observe("telemachus:loss-of-signal",function(){window.requestAnimationFrame(function(){this.title_bar.down("#mission-time").update("⚠ LOS ⚠");this.title_bar.down("#mission-time").addClassName("loss-of-signal")}.bind(this))}.bind(this))},initializeDatalink:function(){this.datalink.subscribeToData(["t.timeWarp","t.universalTime","v.missionTime"]);this.datalink.addReceiverFunction(this.update.bind(this))}});var ButtonIndicator=Class.create({initialize:function(datalink,indicatorId,apiButtonString){this.datalink=datalink;this.indicatorId=indicatorId;this.indicator=$(this.indicatorId);this.apiButtonString=apiButtonString;this.initializeDatalink()},update:function(data){if(data[this.apiButtonString]==true){this.indicator.addClassName("on")}else{this.indicator.removeClassName("on")}},initializeDatalink:function(){this.datalink.subscribeToData([this.apiButtonString]);this.datalink.addReceiverFunction(this.update.bind(this))}});var ReadoutTable=Class.create({initialize:function(datalink,tableId,dataRows){this.datalink=datalink;this.tableId=tableId;this.table=$(this.tableId);this.dataRows=dataRows;this.initializeDatalink()},update:function(data){window.requestAnimationFrame(function(){this.dataRows.forEach(function(row){var rowId=row.label;var tableRow=this.table.down("tr[data-label='"+rowId+"']");if(!tableRow){var tableRow=new Element("tr",{"data-label":rowId});tableRow.insert(""+row.label+"");this.table.insert(tableRow)}tableRow.down("td").update(row.formatter(data[row.value]))}.bind(this))}.bind(this))},initializeDatalink:function(){var dataValues=this.dataRows.map(function(dataRow){return dataRow.value});this.datalink.subscribeToData(dataValues);this.datalink.addReceiverFunction(this.update.bind(this))}});var ResourceMonitor=Class.create({initialize:function(datalink,resourceName,options){this.datalink=datalink;this.resourceName=resourceName;this.options=Object.extend({currentStageProgressBar:null,totalProgressBar:null,valuePrefix:null},options);this.resourceStrings=this.buildResourceStrings();this.initializeDatalink()},update:function(data){window.requestAnimationFrame(function(){if(this.options.totalProgressBar){this.options.totalProgressBar.value=data[this.resourceStrings.totalAvailable];this.options.totalProgressBar.max=data[this.resourceStrings.totalMax]}if(this.options.currentStageProgressBar){this.options.currentStageProgressBar.value=data[this.resourceStrings.currentStageAvailable];this.options.currentStageProgressBar.max=data[this.resourceStrings.currentStageMax]}this.updateValue("-total-value",data[this.resourceStrings.totalAvailable]);this.updateValue("-total-max",data[this.resourceStrings.totalMax]);this.updateValue("-current-stage-value",data[this.resourceStrings.currentStageAvailable]);this.updateValue("-current-stage-max",data[this.resourceStrings.currentStageMax])}.bind(this))},updateValue:function(id,value){if($(this.options.valuePrefix+id)){if(value<0){$(this.options.valuePrefix+id).update("NA")}else{$(this.options.valuePrefix+id).update(value.toFixed(2))}}},buildResourceStrings:function(){return{totalAvailable:"r.resource["+this.resourceName+"]",totalMax:"r.resourceMax["+this.resourceName+"]",currentStageAvailable:"r.resourceCurrent["+this.resourceName+"]",currentStageMax:"r.resourceCurrentMax["+this.resourceName+"]"}},initializeDatalink:function(){this.datalink.subscribeToData([this.resourceStrings.totalAvailable,this.resourceStrings.totalMax,this.resourceStrings.currentStageAvailable,this.resourceStrings.currentStageMax]);this.datalink.addReceiverFunction(this.update.bind(this))}});var DataTable=Class.create({initialize:function(tableID,dataRows){this.tableID=tableID;this.table=$(this.tableID);this.dataRows=dataRows},update:function(){window.requestAnimationFrame(function(){this.dataRows.forEach(function(row){var rowId=row.label;var tableRow=this.table.down("tr[data-label='"+rowId+"']");if(!tableRow){var tableRow=new Element("tr",{"data-label":rowId});tableRow.insert(""+row.label+"");this.table.insert(tableRow)}tableRow.down("td").update(row.value)}.bind(this))}.bind(this))},clear:function(){window.requestAnimationFrame(function(){this.dataRows=[];this.table.innerHTML=""}.bind(this))}});var AtmosphericDensityGauge=Class.create({initialize:function(datalink,gaugeID){this.datalink=datalink;this.gaugeID=gaugeID;this.gauge=$(this.gaugeID);this.initializeDatalink();this.func=function(x){return Math.log(2*x)}},update:function(data){var max=this.func(100);var value=this.func(data["v.atmosphericPressure"]*100);if(!isFinite(value)){value=0}this.gauge.value=value;this.gauge.max=max},initializeDatalink:function(){this.datalink.subscribeToData(["v.atmosphericPressure"]);this.datalink.addReceiverFunction(this.update.bind(this))}});var ThrottleGauge=Class.create({initialize:function(datalink,gaugeID){this.datalink=datalink;this.gaugeID=gaugeID;this.gauge=$(this.gaugeID);this.initializeDatalink()},update:function(data){this.gauge.value=data["f.throttle"]*100;this.gauge.max=100},initializeDatalink:function(){this.datalink.subscribeToData(["f.throttle"]);this.datalink.addReceiverFunction(this.update.bind(this))}});"use strict";var THREE={REVISION:"75"};"function"===typeof define&&define.amd?define("three",THREE):"undefined"!==typeof exports&&"undefined"!==typeof module&&(module.exports=THREE);void 0===Number.EPSILON&&(Number.EPSILON=Math.pow(2,-52));void 0===Math.sign&&(Math.sign=function(a){return 0>a?-1:0>16&255)/255;this.g=(a>>8&255)/255;this.b=(a&255)/255;return this},setRGB:function(a,b,c){this.r=a;this.g=b;this.b=c;return this},setHSL:function(){function a(a,c,d){0>d&&(d+=1);1d?c:d<2/3?a+6*(c-a)*(2/3-d):a}return function(b,c,d){b=THREE.Math.euclideanModulo(b,1);c=THREE.Math.clamp(c,0,1);d=THREE.Math.clamp(d,0,1);0===c?this.r=this.g=this.b=d:(c=.5>=d?d*(1+c):d+c-d*c,d=2*d-c,this.r=a(d,c,b+1/3),this.g=a(d,c,b),this.b=a(d,c,b-1/3));return this}}(),setStyle:function(a){function b(b){void 0!==b&&1>parseFloat(b)&&console.warn("THREE.Color: Alpha component of "+a+" will be ignored.")}var c;if(c=/^((?:rgb|hsl)a?)\(\s*([^\)]*)\)/.exec(a)){var d=c[2];switch(c[1]){case"rgb":case"rgba":if(c=/^(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(d))return this.r=Math.min(255,parseInt(c[1],10))/255,this.g=Math.min(255,parseInt(c[2],10))/255,this.b=Math.min(255,parseInt(c[3],10))/255,b(c[5]),this;if(c=/^(\d+)\%\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(d))return this.r=Math.min(100,parseInt(c[1],10))/100,this.g=Math.min(100,parseInt(c[2],10))/100,this.b=Math.min(100,parseInt(c[3],10))/100,b(c[5]),this;break;case"hsl":case"hsla":if(c=/^([0-9]*\.?[0-9]+)\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(d)){var d=parseFloat(c[1])/360,e=parseInt(c[2],10)/100,f=parseInt(c[3],10)/100;b(c[5]);return this.setHSL(d,e,f)}}}else if(c=/^\#([A-Fa-f0-9]+)$/.exec(a)){c=c[1];d=c.length;if(3===d)return this.r=parseInt(c.charAt(0)+c.charAt(0),16)/255,this.g=parseInt(c.charAt(1)+c.charAt(1),16)/255,this.b=parseInt(c.charAt(2)+c.charAt(2),16)/255,this;if(6===d)return this.r=parseInt(c.charAt(0)+c.charAt(1),16)/255,this.g=parseInt(c.charAt(2)+c.charAt(3),16)/255,this.b=parseInt(c.charAt(4)+c.charAt(5),16)/255,this}a&&0=h?k/(e+f):k/(2-e-f);switch(e){case b:g=(c-d)/k+(cf&&c>b?(c=2*Math.sqrt(1+c-f-b),this._w=(k-g)/c,this._x=.25*c,this._y=(a+e)/c,this._z=(d+h)/c):f>b?(c=2*Math.sqrt(1+f-c-b),this._w=(d-h)/c,this._x=(a+e)/c,this._y=.25*c,this._z=(g+k)/c):(c=2*Math.sqrt(1+b-c-f),this._w=(e-a)/c,this._x=(d+h)/c,this._y=(g+k)/c,this._z=.25*c);this.onChangeCallback();return this},setFromUnitVectors:function(){var a,b;return function(c,d){void 0===a&&(a=new THREE.Vector3); +Math.cosh = Math.cosh || function(x) { + return (Math.exp(x) + Math.exp(-x)) / 2; +} -b=c.dot(d)+1;1e-6>b?(b=0,Math.abs(c.x)>Math.abs(c.z)?a.set(-c.y,c.x,0):a.set(0,-c.z,c.y)):a.crossVectors(c,d);this._x=a.x;this._y=a.y;this._z=a.z;this._w=b;this.normalize();return this}}(),inverse:function(){this.conjugate().normalize();return this},conjugate:function(){this._x*=-1;this._y*=-1;this._z*=-1;this.onChangeCallback();return this},dot:function(a){return this._x*a._x+this._y*a._y+this._z*a._z+this._w*a._w},lengthSq:function(){return this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w},length:function(){return Math.sqrt(this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w)},normalize:function(){var a=this.length();0===a?(this._z=this._y=this._x=0,this._w=1):(a=1/a,this._x*=a,this._y*=a,this._z*=a,this._w*=a);this.onChangeCallback();return this},multiply:function(a,b){return void 0!==b?(console.warn("THREE.Quaternion: .multiply() now only accepts one argument. Use .multiplyQuaternions( a, b ) instead."),this.multiplyQuaternions(a,b)):this.multiplyQuaternions(this,a)},multiplyQuaternions:function(a,b){var c=a._x,d=a._y,e=a._z,f=a._w,g=b._x,h=b._y,k=b._z,l=b._w;this._x=c*l+f*g+d*k-e*h;this._y=d*l+f*h+e*g-c*k;this._z=e*l+f*k+c*h-d*g;this._w=f*l-c*g-d*h-e*k;this.onChangeCallback();return this},slerp:function(a,b){if(0===b)return this;if(1===b)return this.copy(a);var c=this._x,d=this._y,e=this._z,f=this._w,g=f*a._w+c*a._x+d*a._y+e*a._z;0>g?(this._w=-a._w,this._x=-a._x,this._y=-a._y,this._z=-a._z,g=-g):this.copy(a);if(1<=g)return this._w=f,this._x=c,this._y=d,this._z=e,this;var h=Math.sqrt(1-g*g);if(.001>Math.abs(h))return this._w=.5*(f+this._w),this._x=.5*(c+this._x),this._y=.5*(d+this._y),this._z=.5*(e+this._z),this;var k=Math.atan2(h,g),g=Math.sin((1-b)*k)/h,h=Math.sin(b*k)/h;this._w=f*g+this._w*h;this._x=c*g+this._x*h;this._y=d*g+this._y*h;this._z=e*g+this._z*h;this.onChangeCallback();return this},equals:function(a){return a._x===this._x&&a._y===this._y&&a._z===this._z&&a._w===this._w},fromArray:function(a,b){void 0===b&&(b=0);this._x=a[b];this._y=a[b+1];this._z=a[b+2];this._w=a[b+3];this.onChangeCallback();return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);a[b]=this._x;a[b+1]=this._y;a[b+2]=this._z;a[b+3]=this._w;return a},onChange:function(a){this.onChangeCallback=a;return this},onChangeCallback:function(){}};Object.assign(THREE.Quaternion,{slerp:function(a,b,c,d){return c.copy(a).slerp(b,d)},slerpFlat:function(a,b,c,d,e,f,g){var h=c[d+0],k=c[d+1],l=c[d+2];c=c[d+3];d=e[f+0];var p=e[f+1],n=e[f+2];e=e[f+3];if(c!==e||h!==d||k!==p||l!==n){f=1-g;var m=h*d+k*p+l*n+c*e,q=0<=m?1:-1,u=1-m*m;u>Number.EPSILON&&(u=Math.sqrt(u),m=Math.atan2(u,m*q),f=Math.sin(f*m)/u,g=Math.sin(g*m)/u);q*=g;h=h*f+d*q;k=k*f+p*q;l=l*f+n*q;c=c*f+e*q;f===1-g&&(g=1/Math.sqrt(h*h+k*k+l*l+c*c),h*=g,k*=g,l*=g,c*=g)}a[b]=h;a[b+1]=k;a[b+2]=l;a[b+3]=c}});THREE.Vector2=function(a,b){this.x=a||0;this.y=b||0};THREE.Vector2.prototype={constructor:THREE.Vector2,get width(){return this.x},set width(a){this.x=a},get height(){return this.y},set height(a){this.y=a},set:function(a,b){this.x=a;this.y=b;return this},setScalar:function(a){this.y=this.x=a;return this},setX:function(a){this.x=a;return this},setY:function(a){this.y=a;return this},setComponent:function(a,b){switch(a){case 0:this.x=b;break;case 1:this.y=b;break;default:throw Error("index is out of range: "+a)}},getComponent:function(a){switch(a){case 0:return this.x;case 1:return this.y;default:throw Error("index is out of range: "+a)}},clone:function(){return new this.constructor(this.x,this.y)},copy:function(a){this.x=a.x;this.y=a.y;return this},add:function(a,b){if(void 0!==b)return console.warn("THREE.Vector2: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(a,b);this.x+=a.x;this.y+=a.y;return this},addScalar:function(a){this.x+=a;this.y+=a;return this},addVectors:function(a,b){this.x=a.x+b.x;this.y=a.y+b.y;return this},addScaledVector:function(a,b){this.x+=a.x*b;this.y+=a.y*b;return this},sub:function(a,b){if(void 0!==b)return console.warn("THREE.Vector2: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(a,b);this.x-=a.x;this.y-=a.y;return this},subScalar:function(a){this.x-=a;this.y-=a;return this},subVectors:function(a,b){this.x=a.x-b.x;this.y=a.y-b.y;return this},multiply:function(a){this.x*=a.x;this.y*=a.y;return this},multiplyScalar:function(a){isFinite(a)?(this.x*=a,this.y*=a):this.y=this.x=0;return this},divide:function(a){this.x/=a.x;this.y/=a.y;return this},divideScalar:function(a){return this.multiplyScalar(1/a)},min:function(a){this.x=Math.min(this.x,a.x);this.y=Math.min(this.y,a.y);return this},max:function(a){this.x=Math.max(this.x,a.x);this.y=Math.max(this.y,a.y);return this},clamp:function(a,b){this.x=Math.max(a.x,Math.min(b.x,this.x));this.y=Math.max(a.y,Math.min(b.y,this.y));return this},clampScalar:function(){var a,b;return function(c,d){void 0===a&&(a=new THREE.Vector2,b=new THREE.Vector2);a.set(c,c);b.set(d,d);return this.clamp(a,b)}}(),clampLength:function(a,b){var c=this.length();this.multiplyScalar(Math.max(a,Math.min(b,c))/c);return this},floor:function(){this.x=Math.floor(this.x);this.y=Math.floor(this.y);return this},ceil:function(){this.x=Math.ceil(this.x);this.y=Math.ceil(this.y);return this},round:function(){this.x=Math.round(this.x);this.y=Math.round(this.y);return this},roundToZero:function(){this.x=0>this.x?Math.ceil(this.x):Math.floor(this.x);this.y=0>this.y?Math.ceil(this.y):Math.floor(this.y);return this},negate:function(){this.x=-this.x;this.y=-this.y;return this},dot:function(a){return this.x*a.x+this.y*a.y},lengthSq:function(){return this.x*this.x+this.y*this.y},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y)},lengthManhattan:function(){return Math.abs(this.x)+Math.abs(this.y)},normalize:function(){return this.divideScalar(this.length())},angle:function(){var a=Math.atan2(this.y,this.x);0>a&&(a+=2*Math.PI);return a},distanceTo:function(a){return Math.sqrt(this.distanceToSquared(a))},distanceToSquared:function(a){var b=this.x-a.x;a=this.y-a.y;return b*b+a*a},setLength:function(a){return this.multiplyScalar(a/this.length())},lerp:function(a,b){this.x+=(a.x-this.x)*b;this.y+=(a.y-this.y)*b;return this},lerpVectors:function(a,b,c){this.subVectors(b,a).multiplyScalar(c).add(a);return this},equals:function(a){return a.x===this.x&&a.y===this.y},fromArray:function(a,b){void 0===b&&(b=0);this.x=a[b];this.y=a[b+1];return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);a[b]=this.x;a[b+1]=this.y;return a},fromAttribute:function(a,b,c){void 0===c&&(c=0);b=b*a.itemSize+c;this.x=a.array[b];this.y=a.array[b+1];return this},rotateAround:function(a,b){var c=Math.cos(b),d=Math.sin(b),e=this.x-a.x,f=this.y-a.y;this.x=e*c-f*d+a.x;this.y=e*d+f*c+a.y;return this}};THREE.Vector3=function(a,b,c){this.x=a||0;this.y=b||0;this.z=c||0};THREE.Vector3.prototype={constructor:THREE.Vector3,set:function(a,b,c){this.x=a;this.y=b;this.z=c;return this},setScalar:function(a){this.z=this.y=this.x=a;return this},setX:function(a){this.x=a;return this},setY:function(a){this.y=a;return this},setZ:function(a){this.z=a;return this},setComponent:function(a,b){switch(a){case 0:this.x=b;break;case 1:this.y=b;break;case 2:this.z=b;break;default:throw Error("index is out of range: "+a)}},getComponent:function(a){switch(a){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw Error("index is out of range: "+a)}},clone:function(){return new this.constructor(this.x,this.y,this.z)},copy:function(a){this.x=a.x;this.y=a.y;this.z=a.z;return this},add:function(a,b){if(void 0!==b)return console.warn("THREE.Vector3: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(a,b);this.x+=a.x;this.y+=a.y;this.z+=a.z;return this},addScalar:function(a){this.x+=a;this.y+=a;this.z+=a;return this},addVectors:function(a,b){this.x=a.x+b.x;this.y=a.y+b.y;this.z=a.z+b.z;return this},addScaledVector:function(a,b){this.x+=a.x*b;this.y+=a.y*b;this.z+=a.z*b;return this},sub:function(a,b){if(void 0!==b)return console.warn("THREE.Vector3: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(a,b);this.x-=a.x;this.y-=a.y;this.z-=a.z;return this},subScalar:function(a){this.x-=a;this.y-=a;this.z-=a;return this},subVectors:function(a,b){this.x=a.x-b.x;this.y=a.y-b.y;this.z=a.z-b.z;return this},multiply:function(a,b){if(void 0!==b)return console.warn("THREE.Vector3: .multiply() now only accepts one argument. Use .multiplyVectors( a, b ) instead."),this.multiplyVectors(a,b);this.x*=a.x;this.y*=a.y;this.z*=a.z;return this},multiplyScalar:function(a){isFinite(a)?(this.x*=a,this.y*=a,this.z*=a):this.z=this.y=this.x=0;return this},multiplyVectors:function(a,b){this.x=a.x*b.x;this.y=a.y*b.y;this.z=a.z*b.z;return this},applyEuler:function(){var a;return function(b){!1===b instanceof THREE.Euler&&console.error("THREE.Vector3: .applyEuler() now expects an Euler rotation rather than a Vector3 and order.");void 0===a&&(a=new THREE.Quaternion);this.applyQuaternion(a.setFromEuler(b));return this}}(),applyAxisAngle:function(){var a;return function(b,c){void 0===a&&(a=new THREE.Quaternion);this.applyQuaternion(a.setFromAxisAngle(b,c));return this}}(),applyMatrix3:function(a){var b=this.x,c=this.y,d=this.z;a=a.elements;this.x=a[0]*b+a[3]*c+a[6]*d;this.y=a[1]*b+a[4]*c+a[7]*d;this.z=a[2]*b+a[5]*c+a[8]*d;return this},applyMatrix4:function(a){var b=this.x,c=this.y,d=this.z;a=a.elements;this.x=a[0]*b+a[4]*c+a[8]*d+a[12];this.y=a[1]*b+a[5]*c+a[9]*d+a[13];this.z=a[2]*b+a[6]*c+a[10]*d+a[14];return this},applyProjection:function(a){var b=this.x,c=this.y,d=this.z;a=a.elements;var e=1/(a[3]*b+a[7]*c+a[11]*d+a[15]);this.x=(a[0]*b+a[4]*c+a[8]*d+a[12])*e;this.y=(a[1]*b+a[5]*c+a[9]*d+a[13])*e;this.z=(a[2]*b+a[6]*c+a[10]*d+a[14])*e;return this},applyQuaternion:function(a){var b=this.x,c=this.y,d=this.z,e=a.x,f=a.y,g=a.z;a=a.w;var h=a*b+f*d-g*c,k=a*c+g*b-e*d,l=a*d+e*c-f*b,b=-e*b-f*c-g*d;this.x=h*a+b*-e+k*-g-l*-f;this.y=k*a+b*-f+l*-e-h*-g;this.z=l*a+b*-g+h*-f-k*-e;return this},project:function(){var a;return function(b){void 0===a&&(a=new THREE.Matrix4);a.multiplyMatrices(b.projectionMatrix,a.getInverse(b.matrixWorld));return this.applyProjection(a)}}(),unproject:function(){var a;return function(b){void 0===a&&(a=new THREE.Matrix4);a.multiplyMatrices(b.matrixWorld,a.getInverse(b.projectionMatrix));return this.applyProjection(a)}}(),transformDirection:function(a){var b=this.x,c=this.y,d=this.z;a=a.elements;this.x=a[0]*b+a[4]*c+a[8]*d;this.y=a[1]*b+a[5]*c+a[9]*d;this.z=a[2]*b+a[6]*c+a[10]*d;this.normalize();return this},divide:function(a){this.x/=a.x;this.y/=a.y;this.z/=a.z;return this},divideScalar:function(a){return this.multiplyScalar(1/a)},min:function(a){this.x=Math.min(this.x,a.x);this.y=Math.min(this.y,a.y);this.z=Math.min(this.z,a.z);return this},max:function(a){this.x=Math.max(this.x,a.x);this.y=Math.max(this.y,a.y);this.z=Math.max(this.z,a.z);return this},clamp:function(a,b){this.x=Math.max(a.x,Math.min(b.x,this.x));this.y=Math.max(a.y,Math.min(b.y,this.y));this.z=Math.max(a.z,Math.min(b.z,this.z));return this},clampScalar:function(){var a,b;return function(c,d){void 0===a&&(a=new THREE.Vector3,b=new THREE.Vector3);a.set(c,c,c);b.set(d,d,d);return this.clamp(a,b)}}(),clampLength:function(a,b){var c=this.length();this.multiplyScalar(Math.max(a,Math.min(b,c))/c);return this},floor:function(){this.x=Math.floor(this.x);this.y=Math.floor(this.y);this.z=Math.floor(this.z);return this},ceil:function(){this.x=Math.ceil(this.x);this.y=Math.ceil(this.y);this.z=Math.ceil(this.z);return this},round:function(){this.x=Math.round(this.x);this.y=Math.round(this.y);this.z=Math.round(this.z);return this},roundToZero:function(){this.x=0>this.x?Math.ceil(this.x):Math.floor(this.x);this.y=0>this.y?Math.ceil(this.y):Math.floor(this.y);this.z=0>this.z?Math.ceil(this.z):Math.floor(this.z);return this},negate:function(){this.x=-this.x;this.y=-this.y;this.z=-this.z;return this},dot:function(a){return this.x*a.x+this.y*a.y+this.z*a.z},lengthSq:function(){return this.x*this.x+this.y*this.y+this.z*this.z},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)},lengthManhattan:function(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)},normalize:function(){return this.divideScalar(this.length())},setLength:function(a){return this.multiplyScalar(a/this.length())},lerp:function(a,b){this.x+=(a.x-this.x)*b;this.y+=(a.y-this.y)*b;this.z+=(a.z-this.z)*b;return this},lerpVectors:function(a,b,c){this.subVectors(b,a).multiplyScalar(c).add(a);return this},cross:function(a,b){if(void 0!==b)return console.warn("THREE.Vector3: .cross() now only accepts one argument. Use .crossVectors( a, b ) instead."),this.crossVectors(a,b);var c=this.x,d=this.y,e=this.z;this.x=d*a.z-e*a.y;this.y=e*a.x-c*a.z;this.z=c*a.y-d*a.x;return this},crossVectors:function(a,b){var c=a.x,d=a.y,e=a.z,f=b.x,g=b.y,h=b.z;this.x=d*h-e*g;this.y=e*f-c*h;this.z=c*g-d*f;return this},projectOnVector:function(){var a,b;return function(c){void 0===a&&(a=new THREE.Vector3);a.copy(c).normalize();b=this.dot(a);return this.copy(a).multiplyScalar(b)}}(),projectOnPlane:function(){var a;return function(b){void 0===a&&(a=new THREE.Vector3);a.copy(this).projectOnVector(b);return this.sub(a)}}(),reflect:function(){var a;return function(b){void 0===a&&(a=new THREE.Vector3);return this.sub(a.copy(b).multiplyScalar(2*this.dot(b)))}}(),angleTo:function(a){a=this.dot(a)/Math.sqrt(this.lengthSq()*a.lengthSq());return Math.acos(THREE.Math.clamp(a,-1,1))},distanceTo:function(a){return Math.sqrt(this.distanceToSquared(a))},distanceToSquared:function(a){var b=this.x-a.x,c=this.y-a.y;a=this.z-a.z;return b*b+c*c+a*a},setFromSpherical:function(a){var b=Math.sin(a.phi)*a.radius;this.x=b*Math.sin(a.theta);this.y=Math.cos(a.phi)*a.radius;this.z=b*Math.cos(a.theta);return this},setFromMatrixPosition:function(a){return this.setFromMatrixColumn(a,3)},setFromMatrixScale:function(a){var b=this.setFromMatrixColumn(a,0).length(),c=this.setFromMatrixColumn(a,1).length();a=this.setFromMatrixColumn(a,2).length();this.x=b;this.y=c;this.z=a;return this},setFromMatrixColumn:function(a,b){"number"===typeof a&&(console.warn("THREE.Vector3: setFromMatrixColumn now expects ( matrix, index )."),b=a=b);return this.fromArray(a.elements,4*b)},equals:function(a){return a.x===this.x&&a.y===this.y&&a.z===this.z},fromArray:function(a,b){void 0===b&&(b=0);this.x=a[b];this.y=a[b+1];this.z=a[b+2];return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);a[b]=this.x;a[b+1]=this.y;a[b+2]=this.z;return a},fromAttribute:function(a,b,c){void 0===c&&(c=0);b=b*a.itemSize+c;this.x=a.array[b];this.y=a.array[b+1];this.z=a.array[b+2];return this}};THREE.Vector4=function(a,b,c,d){this.x=a||0;this.y=b||0;this.z=c||0;this.w=void 0!==d?d:1};THREE.Vector4.prototype={constructor:THREE.Vector4,set:function(a,b,c,d){this.x=a;this.y=b;this.z=c;this.w=d;return this},setScalar:function(a){this.w=this.z=this.y=this.x=a;return this},setX:function(a){this.x=a;return this},setY:function(a){this.y=a;return this},setZ:function(a){this.z=a;return this},setW:function(a){this.w=a;return this},setComponent:function(a,b){switch(a){case 0:this.x=b;break;case 1:this.y=b;break;case 2:this.z=b;break;case 3:this.w=b;break;default:throw Error("index is out of range: "+a)}},getComponent:function(a){switch(a){case 0:return this.x;case 1:return this.y;case 2:return this.z;case 3:return this.w;default:throw Error("index is out of range: "+a)}},clone:function(){return new this.constructor(this.x,this.y,this.z,this.w)},copy:function(a){this.x=a.x;this.y=a.y;this.z=a.z;this.w=void 0!==a.w?a.w:1;return this},add:function(a,b){if(void 0!==b)return console.warn("THREE.Vector4: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(a,b);this.x+=a.x;this.y+=a.y;this.z+=a.z;this.w+=a.w;return this},addScalar:function(a){this.x+=a;this.y+=a;this.z+=a;this.w+=a;return this},addVectors:function(a,b){this.x=a.x+b.x;this.y=a.y+b.y;this.z=a.z+b.z;this.w=a.w+b.w;return this},addScaledVector:function(a,b){this.x+=a.x*b;this.y+=a.y*b;this.z+=a.z*b;this.w+=a.w*b;return this},sub:function(a,b){if(void 0!==b)return console.warn("THREE.Vector4: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(a,b);this.x-=a.x;this.y-=a.y;this.z-=a.z;this.w-=a.w;return this},subScalar:function(a){this.x-=a;this.y-=a;this.z-=a;this.w-=a;return this},subVectors:function(a,b){this.x=a.x-b.x;this.y=a.y-b.y;this.z=a.z-b.z;this.w=a.w-b.w;return this},multiplyScalar:function(a){isFinite(a)?(this.x*=a,this.y*=a,this.z*=a,this.w*=a):this.w=this.z=this.y=this.x=0;return this},applyMatrix4:function(a){var b=this.x,c=this.y,d=this.z,e=this.w;a=a.elements;this.x=a[0]*b+a[4]*c+a[8]*d+a[12]*e;this.y=a[1]*b+a[5]*c+a[9]*d+a[13]*e;this.z=a[2]*b+a[6]*c+a[10]*d+a[14]*e;this.w=a[3]*b+a[7]*c+a[11]*d+a[15]*e;return this},divideScalar:function(a){return this.multiplyScalar(1/a)},setAxisAngleFromQuaternion:function(a){this.w=2*Math.acos(a.w);var b=Math.sqrt(1-a.w*a.w);1e-4>b?(this.x=1,this.z=this.y=0):(this.x=a.x/b,this.y=a.y/b,this.z=a.z/b);return this},setAxisAngleFromRotationMatrix:function(a){var b,c,d;a=a.elements;var e=a[0];d=a[4];var f=a[8],g=a[1],h=a[5],k=a[9];c=a[2];b=a[6];var l=a[10];if(.01>Math.abs(d-g)&&.01>Math.abs(f-c)&&.01>Math.abs(k-b)){if(.1>Math.abs(d+g)&&.1>Math.abs(f+c)&&.1>Math.abs(k+b)&&.1>Math.abs(e+h+l-3))return this.set(1,0,0,0),this;a=Math.PI;e=(e+1)/2;h=(h+1)/2;l=(l+1)/2;d=(d+g)/4;f=(f+c)/4;k=(k+b)/4;e>h&&e>l?.01>e?(b=0,d=c=.707106781):(b=Math.sqrt(e),c=d/b,d=f/b):h>l?.01>h?(b=.707106781,c=0,d=.707106781):(c=Math.sqrt(h),b=d/c,d=k/c):.01>l?(c=b=.707106781,d=0):(d=Math.sqrt(l),b=f/d,c=k/d);this.set(b,c,d,a);return this}a=Math.sqrt((b-k)*(b-k)+(f-c)*(f-c)+(g-d)*(g-d));.001>Math.abs(a)&&(a=1);this.x=(b-k)/a;this.y=(f-c)/a;this.z=(g-d)/a;this.w=Math.acos((e+h+l-1)/2);return this},min:function(a){this.x=Math.min(this.x,a.x);this.y=Math.min(this.y,a.y);this.z=Math.min(this.z,a.z);this.w=Math.min(this.w,a.w);return this},max:function(a){this.x=Math.max(this.x,a.x);this.y=Math.max(this.y,a.y);this.z=Math.max(this.z,a.z);this.w=Math.max(this.w,a.w);return this},clamp:function(a,b){this.x=Math.max(a.x,Math.min(b.x,this.x));this.y=Math.max(a.y,Math.min(b.y,this.y));this.z=Math.max(a.z,Math.min(b.z,this.z));this.w=Math.max(a.w,Math.min(b.w,this.w));return this},clampScalar:function(){var a,b;return function(c,d){void 0===a&&(a=new THREE.Vector4,b=new THREE.Vector4);a.set(c,c,c,c);b.set(d,d,d,d);return this.clamp(a,b)}}(),floor:function(){this.x=Math.floor(this.x);this.y=Math.floor(this.y);this.z=Math.floor(this.z);this.w=Math.floor(this.w);return this},ceil:function(){this.x=Math.ceil(this.x);this.y=Math.ceil(this.y);this.z=Math.ceil(this.z);this.w=Math.ceil(this.w);return this},round:function(){this.x=Math.round(this.x);this.y=Math.round(this.y);this.z=Math.round(this.z);this.w=Math.round(this.w);return this},roundToZero:function(){this.x=0>this.x?Math.ceil(this.x):Math.floor(this.x);this.y=0>this.y?Math.ceil(this.y):Math.floor(this.y);this.z=0>this.z?Math.ceil(this.z):Math.floor(this.z);this.w=0>this.w?Math.ceil(this.w):Math.floor(this.w);return this},negate:function(){this.x=-this.x;this.y=-this.y;this.z=-this.z;this.w=-this.w;return this},dot:function(a){return this.x*a.x+this.y*a.y+this.z*a.z+this.w*a.w},lengthSq:function(){return this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w)},lengthManhattan:function(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)+Math.abs(this.w)},normalize:function(){return this.divideScalar(this.length())},setLength:function(a){return this.multiplyScalar(a/this.length())},lerp:function(a,b){this.x+=(a.x-this.x)*b;this.y+=(a.y-this.y)*b;this.z+=(a.z-this.z)*b;this.w+=(a.w-this.w)*b;return this},lerpVectors:function(a,b,c){this.subVectors(b,a).multiplyScalar(c).add(a);return this},equals:function(a){return a.x===this.x&&a.y===this.y&&a.z===this.z&&a.w===this.w},fromArray:function(a,b){void 0===b&&(b=0);this.x=a[b];this.y=a[b+1];this.z=a[b+2];this.w=a[b+3];return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);a[b]=this.x;a[b+1]=this.y;a[b+2]=this.z;a[b+3]=this.w;return a},fromAttribute:function(a,b,c){void 0===c&&(c=0);b=b*a.itemSize+c;this.x=a.array[b];this.y=a.array[b+1];this.z=a.array[b+2];this.w=a.array[b+3];return this}};THREE.Euler=function(a,b,c,d){this._x=a||0;this._y=b||0;this._z=c||0;this._order=d||THREE.Euler.DefaultOrder};THREE.Euler.RotationOrders="XYZ YZX ZXY XZY YXZ ZYX".split(" ");THREE.Euler.DefaultOrder="XYZ";THREE.Euler.prototype={constructor:THREE.Euler,get x(){return this._x},set x(a){this._x=a;this.onChangeCallback()},get y(){return this._y},set y(a){this._y=a;this.onChangeCallback()},get z(){return this._z},set z(a){this._z=a;this.onChangeCallback()},get order(){return this._order},set order(a){this._order=a;this.onChangeCallback()},set:function(a,b,c,d){this._x=a;this._y=b;this._z=c;this._order=d||this._order;this.onChangeCallback();return this},clone:function(){return new this.constructor(this._x,this._y,this._z,this._order)},copy:function(a){this._x=a._x;this._y=a._y;this._z=a._z;this._order=a._order;this.onChangeCallback();return this},setFromRotationMatrix:function(a,b,c){var d=THREE.Math.clamp,e=a.elements;a=e[0];var f=e[4],g=e[8],h=e[1],k=e[5],l=e[9],p=e[2],n=e[6],e=e[10];b=b||this._order;"XYZ"===b?(this._y=Math.asin(d(g,-1,1)),.99999>Math.abs(g)?(this._x=Math.atan2(-l,e),this._z=Math.atan2(-f,a)):(this._x=Math.atan2(n,k),this._z=0)):"YXZ"===b?(this._x=Math.asin(-d(l,-1,1)),.99999>Math.abs(l)?(this._y=Math.atan2(g,e),this._z=Math.atan2(h,k)):(this._y=Math.atan2(-p,a),this._z=0)):"ZXY"===b?(this._x=Math.asin(d(n,-1,1)),.99999>Math.abs(n)?(this._y=Math.atan2(-p,e),this._z=Math.atan2(-f,k)):(this._y=0,this._z=Math.atan2(h,a))):"ZYX"===b?(this._y=Math.asin(-d(p,-1,1)),.99999>Math.abs(p)?(this._x=Math.atan2(n,e),this._z=Math.atan2(h,a)):(this._x=0,this._z=Math.atan2(-f,k))):"YZX"===b?(this._z=Math.asin(d(h,-1,1)),.99999>Math.abs(h)?(this._x=Math.atan2(-l,k),this._y=Math.atan2(-p,a)):(this._x=0,this._y=Math.atan2(g,e))):"XZY"===b?(this._z=Math.asin(-d(f,-1,1)),.99999>Math.abs(f)?(this._x=Math.atan2(n,k),this._y=Math.atan2(g,a)):(this._x=Math.atan2(-l,e),this._y=0)):console.warn("THREE.Euler: .setFromRotationMatrix() given unsupported order: "+b);this._order=b;if(!1!==c)this.onChangeCallback();return this},setFromQuaternion:function(){var a;return function(b,c,d){void 0===a&&(a=new THREE.Matrix4);a.makeRotationFromQuaternion(b);this.setFromRotationMatrix(a,c,d);return this}}(),setFromVector3:function(a,b){return this.set(a.x,a.y,a.z,b||this._order)},reorder:function(){var a=new THREE.Quaternion;return function(b){a.setFromEuler(this);this.setFromQuaternion(a,b)}}(),equals:function(a){return a._x===this._x&&a._y===this._y&&a._z===this._z&&a._order===this._order},fromArray:function(a){this._x=a[0];this._y=a[1];this._z=a[2];void 0!==a[3]&&(this._order=a[3]);this.onChangeCallback();return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);a[b]=this._x;a[b+1]=this._y;a[b+2]=this._z;a[b+3]=this._order;return a},toVector3:function(a){return a?a.set(this._x,this._y,this._z):new THREE.Vector3(this._x,this._y,this._z)},onChange:function(a){this.onChangeCallback=a;return this},onChangeCallback:function(){}};THREE.Line3=function(a,b){this.start=void 0!==a?a:new THREE.Vector3;this.end=void 0!==b?b:new THREE.Vector3};THREE.Line3.prototype={constructor:THREE.Line3,set:function(a,b){this.start.copy(a);this.end.copy(b);return this},clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.start.copy(a.start);this.end.copy(a.end);return this},center:function(a){return(a||new THREE.Vector3).addVectors(this.start,this.end).multiplyScalar(.5)},delta:function(a){return(a||new THREE.Vector3).subVectors(this.end,this.start)},distanceSq:function(){return this.start.distanceToSquared(this.end)},distance:function(){return this.start.distanceTo(this.end)},at:function(a,b){var c=b||new THREE.Vector3;return this.delta(c).multiplyScalar(a).add(this.start)},closestPointToPointParameter:function(){var a=new THREE.Vector3,b=new THREE.Vector3;return function(c,d){a.subVectors(c,this.start);b.subVectors(this.end,this.start);var e=b.dot(b),e=b.dot(a)/e;d&&(e=THREE.Math.clamp(e,0,1));return e}}(),closestPointToPoint:function(a,b,c){a=this.closestPointToPointParameter(a,b);c=c||new THREE.Vector3;return this.delta(c).multiplyScalar(a).add(this.start)},applyMatrix4:function(a){this.start.applyMatrix4(a);this.end.applyMatrix4(a);return this},equals:function(a){return a.start.equals(this.start)&&a.end.equals(this.end)}};THREE.Box2=function(a,b){this.min=void 0!==a?a:new THREE.Vector2(Infinity,Infinity);this.max=void 0!==b?b:new THREE.Vector2(-Infinity,-Infinity)};THREE.Box2.prototype={constructor:THREE.Box2,set:function(a,b){this.min.copy(a);this.max.copy(b);return this},setFromPoints:function(a){this.makeEmpty();for(var b=0,c=a.length;bthis.max.x||a.ythis.max.y?!1:!0},containsBox:function(a){return this.min.x<=a.min.x&&a.max.x<=this.max.x&&this.min.y<=a.min.y&&a.max.y<=this.max.y?!0:!1},getParameter:function(a,b){return(b||new THREE.Vector2).set((a.x-this.min.x)/(this.max.x-this.min.x),(a.y-this.min.y)/(this.max.y-this.min.y))},intersectsBox:function(a){return a.max.xthis.max.x||a.max.ythis.max.y?!1:!0},clampPoint:function(a,b){return(b||new THREE.Vector2).copy(a).clamp(this.min,this.max)},distanceToPoint:function(){var a=new THREE.Vector2;return function(b){return a.copy(b).clamp(this.min,this.max).sub(b).length()}}(),intersect:function(a){this.min.max(a.min);this.max.min(a.max);return this},union:function(a){this.min.min(a.min);this.max.max(a.max);return this},translate:function(a){this.min.add(a);this.max.add(a);return this},equals:function(a){return a.min.equals(this.min)&&a.max.equals(this.max)}};THREE.Box3=function(a,b){this.min=void 0!==a?a:new THREE.Vector3(Infinity,Infinity,Infinity);this.max=void 0!==b?b:new THREE.Vector3(-Infinity,-Infinity,-Infinity)};THREE.Box3.prototype={constructor:THREE.Box3,set:function(a,b){this.min.copy(a);this.max.copy(b);return this},setFromArray:function(a){this.makeEmpty();for(var b=Infinity,c=Infinity,d=Infinity,e=-Infinity,f=-Infinity,g=-Infinity,h=0,k=a.length;he&&(e=l);p>f&&(f=p);n>g&&(g=n)}this.min.set(b,c,d);this.max.set(e,f,g)},setFromPoints:function(a){this.makeEmpty();for(var b=0,c=a.length;bthis.max.x||a.ythis.max.y||a.zthis.max.z?!1:!0},containsBox:function(a){return this.min.x<=a.min.x&&a.max.x<=this.max.x&&this.min.y<=a.min.y&&a.max.y<=this.max.y&&this.min.z<=a.min.z&&a.max.z<=this.max.z?!0:!1},getParameter:function(a,b){return(b||new THREE.Vector3).set((a.x-this.min.x)/(this.max.x-this.min.x),(a.y-this.min.y)/(this.max.y-this.min.y),(a.z-this.min.z)/(this.max.z-this.min.z))},intersectsBox:function(a){return a.max.xthis.max.x||a.max.ythis.max.y||a.max.zthis.max.z?!1:!0},intersectsSphere:function(){var a;return function(b){void 0===a&&(a=new THREE.Vector3);this.clampPoint(b.center,a);return a.distanceToSquared(b.center)<=b.radius*b.radius}}(),intersectsPlane:function(a){var b,c;0=a.constant},clampPoint:function(a,b){return(b||new THREE.Vector3).copy(a).clamp(this.min,this.max)},distanceToPoint:function(){var a=new THREE.Vector3;return function(b){return a.copy(b).clamp(this.min,this.max).sub(b).length()}}(),getBoundingSphere:function(){var a=new THREE.Vector3;return function(b){b=b||new THREE.Sphere;b.center=this.center();b.radius=.5*this.size(a).length();return b}}(),intersect:function(a){this.min.max(a.min);this.max.min(a.max);return this},union:function(a){this.min.min(a.min);this.max.max(a.max);return this},applyMatrix4:function(){var a=[new THREE.Vector3,new THREE.Vector3,new THREE.Vector3,new THREE.Vector3,new THREE.Vector3,new THREE.Vector3,new THREE.Vector3,new THREE.Vector3];return function(b){a[0].set(this.min.x,this.min.y,this.min.z).applyMatrix4(b);a[1].set(this.min.x,this.min.y,this.max.z).applyMatrix4(b);a[2].set(this.min.x,this.max.y,this.min.z).applyMatrix4(b);a[3].set(this.min.x,this.max.y,this.max.z).applyMatrix4(b);a[4].set(this.max.x,this.min.y,this.min.z).applyMatrix4(b);a[5].set(this.max.x,this.min.y,this.max.z).applyMatrix4(b);a[6].set(this.max.x,this.max.y,this.min.z).applyMatrix4(b);a[7].set(this.max.x,this.max.y,this.max.z).applyMatrix4(b);this.makeEmpty();this.setFromPoints(a);return this}}(),translate:function(a){this.min.add(a);this.max.add(a);return this},equals:function(a){return a.min.equals(this.min)&&a.max.equals(this.max)}};THREE.Matrix3=function(){this.elements=new Float32Array([1,0,0,0,1,0,0,0,1]);0this.determinant()&&(g=-g);c.x=f[12];c.y=f[13];c.z=f[14];b.elements.set(this.elements);c=1/g;var f=1/h,l=1/k;b.elements[0]*=c;b.elements[1]*=c;b.elements[2]*=c;b.elements[4]*=f;b.elements[5]*=f;b.elements[6]*=f;b.elements[8]*=l;b.elements[9]*=l;b.elements[10]*=l;d.setFromRotationMatrix(b);e.x=g;e.y=h;e.z=k;return this}}(),makeFrustum:function(a,b,c,d,e,f){var g=this.elements;g[0]=2*e/(b-a);g[4]=0;g[8]=(b+a)/(b-a);g[12]=0;g[1]=0;g[5]=2*e/(d-c);g[9]=(d+c)/(d-c);g[13]=0;g[2]=0;g[6]=0;g[10]=-(f+e)/(f-e);g[14]=-2*f*e/(f-e);g[3]=0;g[7]=0;g[11]=-1;g[15]=0;return this},makePerspective:function(a,b,c,d){a=c*Math.tan(THREE.Math.degToRad(.5*a));var e=-a;return this.makeFrustum(e*b,a*b,e,a,c,d)},makeOrthographic:function(a,b,c,d,e,f){var g=this.elements,h=1/(b-a),k=1/(c-d),l=1/(f-e);g[0]=2*h;g[4]=0;g[8]=0;g[12]=-((b+a)*h);g[1]=0;g[5]=2*k;g[9]=0;g[13]=-((c+d)*k);g[2]=0;g[6]=0;g[10]=-2*l;g[14]=-((f+e)*l);g[3]=0;g[7]=0;g[11]=0;g[15]=1;return this},equals:function(a){var b=this.elements;a=a.elements;for(var c=0;16>c;c++)if(b[c]!==a[c])return!1;return!0},fromArray:function(a){this.elements.set(a);return this},toArray:function(){var a=this.elements;return[a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8],a[9],a[10],a[11],a[12],a[13],a[14],a[15]]}};THREE.Ray=function(a,b){this.origin=void 0!==a?a:new THREE.Vector3;this.direction=void 0!==b?b:new THREE.Vector3};THREE.Ray.prototype={constructor:THREE.Ray,set:function(a,b){this.origin.copy(a);this.direction.copy(b);return this},clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.origin.copy(a.origin);this.direction.copy(a.direction);return this},at:function(a,b){return(b||new THREE.Vector3).copy(this.direction).multiplyScalar(a).add(this.origin)},lookAt:function(a){this.direction.copy(a).sub(this.origin).normalize()},recast:function(){var a=new THREE.Vector3;return function(b){this.origin.copy(this.at(b,a));return this}}(),closestPointToPoint:function(a,b){var c=b||new THREE.Vector3;c.subVectors(a,this.origin);var d=c.dot(this.direction);return 0>d?c.copy(this.origin):c.copy(this.direction).multiplyScalar(d).add(this.origin)},distanceToPoint:function(a){return Math.sqrt(this.distanceSqToPoint(a))},distanceSqToPoint:function(){var a=new THREE.Vector3;return function(b){var c=a.subVectors(b,this.origin).dot(this.direction);if(0>c)return this.origin.distanceToSquared(b);a.copy(this.direction).multiplyScalar(c).add(this.origin);return a.distanceToSquared(b)}}(),distanceSqToSegment:function(){var a=new THREE.Vector3,b=new THREE.Vector3,c=new THREE.Vector3;return function(d,e,f,g){a.copy(d).add(e).multiplyScalar(.5);b.copy(e).sub(d).normalize();c.copy(this.origin).sub(a);var h=.5*d.distanceTo(e),k=-this.direction.dot(b),l=c.dot(this.direction),p=-c.dot(b),n=c.lengthSq(),m=Math.abs(1-k*k),q;0=-q?e<=q?(h=1/m,d*=h,e*=h,k=d*(d+k*e+2*l)+e*(k*d+e+2*p)+n):(e=h,d=Math.max(0,-(k*e+l)),k=-d*d+e*(e+2*p)+n):(e=-h,d=Math.max(0,-(k*e+l)),k=-d*d+e*(e+2*p)+n):e<=-q?(d=Math.max(0,-(-k*h+l)),e=0f)return null;f=Math.sqrt(f-e);e=d-f;d+=f;return 0>e&&0>d?null:0>e?this.at(d,c):this.at(e,c)}}(),intersectsSphere:function(a){return this.distanceToPoint(a.center)<=a.radius},distanceToPlane:function(a){var b=a.normal.dot(this.direction);if(0===b)return 0===a.distanceToPoint(this.origin)?0:null;a=-(this.origin.dot(a.normal)+a.constant)/b;return 0<=a?a:null},intersectPlane:function(a,b){var c=this.distanceToPlane(a);return null===c?null:this.at(c,b)},intersectsPlane:function(a){var b=a.distanceToPoint(this.origin);return 0===b||0>a.normal.dot(this.direction)*b?!0:!1},intersectBox:function(a,b){var c,d,e,f,g;d=1/this.direction.x;f=1/this.direction.y;g=1/this.direction.z;var h=this.origin;0<=d?(c=(a.min.x-h.x)*d,d*=a.max.x-h.x):(c=(a.max.x-h.x)*d,d*=a.min.x-h.x);0<=f?(e=(a.min.y-h.y)*f,f*=a.max.y-h.y):(e=(a.max.y-h.y)*f,f*=a.min.y-h.y);if(c>f||e>d)return null;if(e>c||c!==c)c=e;if(fg||e>d)return null;if(e>c||c!==c)c=e;if(gd?null:this.at(0<=c?c:d,b)},intersectsBox:function(){var a=new THREE.Vector3;return function(b){return null!==this.intersectBox(b,a)}}(),intersectTriangle:function(){var a=new THREE.Vector3,b=new THREE.Vector3,c=new THREE.Vector3,d=new THREE.Vector3;return function(e,f,g,h,k){b.subVectors(f,e);c.subVectors(g,e);d.crossVectors(b,c);f=this.direction.dot(d);if(0f)h=-1,f=-f;else return null;a.subVectors(this.origin,e);e=h*this.direction.dot(c.crossVectors(a,c));if(0>e)return null;g=h*this.direction.dot(b.cross(a));if(0>g||e+g>f)return null;e=-h*a.dot(d);return 0>e?null:this.at(e/f,k)}}(),applyMatrix4:function(a){this.direction.add(this.origin).applyMatrix4(a);this.origin.applyMatrix4(a);this.direction.sub(this.origin);this.direction.normalize();return this},equals:function(a){return a.origin.equals(this.origin)&&a.direction.equals(this.direction)}};THREE.Sphere=function(a,b){this.center=void 0!==a?a:new THREE.Vector3;this.radius=void 0!==b?b:0};THREE.Sphere.prototype={constructor:THREE.Sphere,set:function(a,b){this.center.copy(a);this.radius=b;return this},setFromPoints:function(){var a=new THREE.Box3;return function(b,c){var d=this.center;void 0!==c?d.copy(c):a.setFromPoints(b).center(d);for(var e=0,f=0,g=b.length;f=this.radius},containsPoint:function(a){return a.distanceToSquared(this.center)<=this.radius*this.radius},distanceToPoint:function(a){return a.distanceTo(this.center)-this.radius},intersectsSphere:function(a){var b=this.radius+a.radius;return a.center.distanceToSquared(this.center)<=b*b},intersectsBox:function(a){return a.intersectsSphere(this)},intersectsPlane:function(a){return Math.abs(this.center.dot(a.normal)-a.constant)<=this.radius},clampPoint:function(a,b){var c=this.center.distanceToSquared(a),d=b||new THREE.Vector3;d.copy(a);c>this.radius*this.radius&&(d.sub(this.center).normalize(),d.multiplyScalar(this.radius).add(this.center));return d},getBoundingBox:function(a){a=a||new THREE.Box3;a.set(this.center,this.center);a.expandByScalar(this.radius);return a},applyMatrix4:function(a){this.center.applyMatrix4(a);this.radius*=a.getMaxScaleOnAxis();return this},translate:function(a){this.center.add(a);return this},equals:function(a){return a.center.equals(this.center)&&a.radius===this.radius}};THREE.Frustum=function(a,b,c,d,e,f){this.planes=[void 0!==a?a:new THREE.Plane,void 0!==b?b:new THREE.Plane,void 0!==c?c:new THREE.Plane,void 0!==d?d:new THREE.Plane,void 0!==e?e:new THREE.Plane,void 0!==f?f:new THREE.Plane]};THREE.Frustum.prototype={constructor:THREE.Frustum,set:function(a,b,c,d,e,f){var g=this.planes;g[0].copy(a);g[1].copy(b);g[2].copy(c);g[3].copy(d);g[4].copy(e);g[5].copy(f);return this},clone:function(){return(new this.constructor).copy(this)},copy:function(a){for(var b=this.planes,c=0;6>c;c++)b[c].copy(a.planes[c]);return this},setFromMatrix:function(a){var b=this.planes,c=a.elements;a=c[0];var d=c[1],e=c[2],f=c[3],g=c[4],h=c[5],k=c[6],l=c[7],p=c[8],n=c[9],m=c[10],q=c[11],u=c[12],v=c[13],t=c[14],c=c[15];b[0].setComponents(f-a,l-g,q-p,c-u).normalize();b[1].setComponents(f+a,l+g,q+p,c+u).normalize();b[2].setComponents(f+d,l+h,q+n,c+v).normalize();b[3].setComponents(f-d,l-h,q-n,c-v).normalize();b[4].setComponents(f-e,l-k,q-m,c-t).normalize();b[5].setComponents(f+e,l+k,q+m,c+t).normalize();return this},intersectsObject:function(){var a=new THREE.Sphere;return function(b){var c=b.geometry;null===c.boundingSphere&&c.computeBoundingSphere();a.copy(c.boundingSphere);a.applyMatrix4(b.matrixWorld);return this.intersectsSphere(a)}}(),intersectsSphere:function(a){var b=this.planes,c=a.center;a=-a.radius;for(var d=0;6>d;d++)if(b[d].distanceToPoint(c)e;e++){var f=d[e];a.x=0g&&0>f)return!1}return!0}}(),containsPoint:function(a){for(var b=this.planes,c=0;6>c;c++)if(0>b[c].distanceToPoint(a))return!1;return!0}};THREE.Plane=function(a,b){this.normal=void 0!==a?a:new THREE.Vector3(1,0,0);this.constant=void 0!==b?b:0};THREE.Plane.prototype={constructor:THREE.Plane,set:function(a,b){this.normal.copy(a);this.constant=b;return this},setComponents:function(a,b,c,d){this.normal.set(a,b,c);this.constant=d;return this},setFromNormalAndCoplanarPoint:function(a,b){this.normal.copy(a);this.constant=-b.dot(this.normal);return this},setFromCoplanarPoints:function(){var a=new THREE.Vector3,b=new THREE.Vector3;return function(c,d,e){d=a.subVectors(e,d).cross(b.subVectors(c,d)).normalize();this.setFromNormalAndCoplanarPoint(d,c);return this}}(),clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.normal.copy(a.normal);this.constant=a.constant;return this},normalize:function(){var a=1/this.normal.length();this.normal.multiplyScalar(a);this.constant*=a;return this},negate:function(){this.constant*=-1;this.normal.negate();return this},distanceToPoint:function(a){return this.normal.dot(a)+this.constant},distanceToSphere:function(a){return this.distanceToPoint(a.center)-a.radius},projectPoint:function(a,b){return this.orthoPoint(a,b).sub(a).negate()},orthoPoint:function(a,b){var c=this.distanceToPoint(a);return(b||new THREE.Vector3).copy(this.normal).multiplyScalar(c)},intersectLine:function(){var a=new THREE.Vector3;return function(b,c){var d=c||new THREE.Vector3,e=b.delta(a),f=this.normal.dot(e);if(0===f){if(0===this.distanceToPoint(b.start))return d.copy(b.start)}else return f=-(b.start.dot(this.normal)+this.constant)/f,0>f||1b&&0a&&0e;e++)8===e||13===e||18===e||23===e?b[e]="-":14===e?b[e]="4":(2>=c&&(c=33554432+16777216*Math.random()|0),d=c&15,c>>=4,b[e]=a[19===e?d&3|8:d]);return b.join("")}}(),clamp:function(a,b,c){return Math.max(b,Math.min(c,a))},euclideanModulo:function(a,b){return(a%b+b)%b},mapLinear:function(a,b,c,d,e){return d+(a-b)*(e-d)/(c-b)},smoothstep:function(a,b,c){if(a<=b)return 0;if(a>=c)return 1;a=(a-b)/(c-b);return a*a*(3-2*a)},smootherstep:function(a,b,c){if(a<=b)return 0;if(a>=c)return 1;a=(a-b)/(c-b);return a*a*a*(a*(6*a-15)+10)},random16:function(){console.warn("THREE.Math.random16() has been deprecated. Use Math.random() instead.");return Math.random()},randInt:function(a,b){return a+Math.floor(Math.random()*(b-a+1))},randFloat:function(a,b){return a+Math.random()*(b-a)},randFloatSpread:function(a){return a*(.5-Math.random())},degToRad:function(){var a=Math.PI/180;return function(b){return b*a}}(),radToDeg:function(){var a=180/Math.PI;return function(b){return b*a}}(),isPowerOfTwo:function(a){return 0===(a&a-1)&&0!==a},nearestPowerOfTwo:function(a){return Math.pow(2,Math.round(Math.log(a)/Math.LN2))},nextPowerOfTwo:function(a){a--;a|=a>>1;a|=a>>2;a|=a>>4;a|=a>>8;a|=a>>16;a++;return a}};THREE.Spline=function(a){function b(a,b,c,d,e,f,g){a=.5*(c-a);d=.5*(d-b);return(2*(b-c)+a+d)*g+(-3*(b-c)-2*a-d)*f+a*e+b}this.points=a;var c=[],d={x:0,y:0,z:0},e,f,g,h,k,l,p,n,m;this.initFromArray=function(a){this.points=[];for(var b=0;bthis.points.length-2?this.points.length-1:f+1;c[3]=f>this.points.length-3?this.points.length-1:f+2;l=this.points[c[0]];p=this.points[c[1]];n=this.points[c[2]];m=this.points[c[3]];h=g*g;k=g*h;d.x=b(l.x,p.x,n.x,m.x,g,h,k);d.y=b(l.y,p.y,n.y,m.y,g,h,k);d.z=b(l.z,p.z,n.z,m.z,g,h,k);return d};this.getControlPointsArray=function(){var a,b,c=this.points.length,d=[];for(a=0;a=b.x+b.y}}();THREE.Triangle.prototype={constructor:THREE.Triangle,set:function(a,b,c){this.a.copy(a);this.b.copy(b);this.c.copy(c);return this},setFromPointsAndIndices:function(a,b,c,d){this.a.copy(a[b]);this.b.copy(a[c]);this.c.copy(a[d]);return this},clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.a.copy(a.a);this.b.copy(a.b);this.c.copy(a.c);return this},area:function(){var a=new THREE.Vector3,b=new THREE.Vector3;return function(){a.subVectors(this.c,this.b);b.subVectors(this.a,this.b);return.5*a.cross(b).length()}}(),midpoint:function(a){return(a||new THREE.Vector3).addVectors(this.a,this.b).add(this.c).multiplyScalar(1/3)},normal:function(a){return THREE.Triangle.normal(this.a,this.b,this.c,a)},plane:function(a){return(a||new THREE.Plane).setFromCoplanarPoints(this.a,this.b,this.c)},barycoordFromPoint:function(a,b){return THREE.Triangle.barycoordFromPoint(a,this.a,this.b,this.c,b)},containsPoint:function(a){return THREE.Triangle.containsPoint(a,this.a,this.b,this.c)},equals:function(a){return a.a.equals(this.a)&&a.b.equals(this.b)&&a.c.equals(this.c)}};THREE.Interpolant=function(a,b,c,d){this.parameterPositions=a;this._cachedIndex=0;this.resultBuffer=void 0!==d?d:new b.constructor(c);this.sampleValues=b;this.valueSize=c};THREE.Interpolant.prototype={constructor:THREE.Interpolant,evaluate:function(a){var b=this.parameterPositions,c=this._cachedIndex,d=b[c],e=b[c-1];a:{b:{c:{d:if(!(a=e)break a;else{f=b[1];a=e)break b}d=c;c=0}}for(;c>>1,ad;d++)if(e[d]===e[(d+1)%3]){a.push(f);break}for(f=a.length-1;0<=f;f--)for(e=a[f],this.faces.splice(e,1),c=0,g=this.faceVertexUvs.length;cthis.duration&&this.resetDuration();this.trim();this.optimize()};THREE.AnimationClip.prototype={constructor:THREE.AnimationClip,resetDuration:function(){for(var a=0,b=0,c=this.tracks.length;b!==c;++b)var d=this.tracks[b],a=Math.max(a,d.times[d.times.length-1]);this.duration=a},trim:function(){for(var a=0;ab||0===c)return;this._startTime=null;b*=c}b*=this._updateTimeScale(a);c=this._updateTime(b);a=this._updateWeight(a);if(0c.parameterPositions[1]&&(this.stopFading(),0===d&&(this.enabled=!1))}}return this._effectiveWeight=b},_updateTimeScale:function(a){var b=0;if(!this.paused){var b=this.timeScale,c=this._timeScaleInterpolant;if(null!==c){var d=c.evaluate(a)[0],b=b*d;a>c.parameterPositions[1]&&(this.stopWarping(),0===b?this.pause=!0:this.timeScale=b)}}return this._effectiveTimeScale=b},_updateTime:function(a){var b=this.time+a;if(0===a)return b;var c=this._clip.duration,d=this.loop,e=this._loopCount,f=!1;switch(d){case THREE.LoopOnce:-1===e&&(this.loopCount=0,this._setEndings(!0,!0,!1));if(b>=c)b=c;else if(0>b)b=0;else break;this.clampWhenFinished?this.pause=!0:this.enabled=!1;this._mixer.dispatchEvent({type:"finished",action:this,direction:0>a?-1:1});break;case THREE.LoopPingPong:f=!0;case THREE.LoopRepeat:-1===e&&(0=c||0>b){var g=Math.floor(b/c),b=b-c*g,e=e+Math.abs(g),h=this.repetitions-e;if(0>h){this.clampWhenFinished?this.paused=!0:this.enabled=!1;b=0a,this._setEndings(a,!a,f)):this._setEndings(!1,!1,f);this._loopCount=e;this._mixer.dispatchEvent({type:"loop",action:this,loopDelta:g})}if(d===THREE.LoopPingPong&&1===(e&1))return this.time=b,c-b}return this.time=b},_setEndings:function(a,b,c){var d=this._interpolantSettings;c?(d.endingStart=THREE.ZeroSlopeEnding,d.endingEnd=THREE.ZeroSlopeEnding):(d.endingStart=a?this.zeroSlopeAtStart?THREE.ZeroSlopeEnding:THREE.ZeroCurvatureEnding:THREE.WrapAroundEnding,d.endingEnd=b?this.zeroSlopeAtEnd?THREE.ZeroSlopeEnding:THREE.ZeroCurvatureEnding:THREE.WrapAroundEnding)},_scheduleFading:function(a,b,c){var d=this._mixer,e=d.time,f=this._weightInterpolant;null===f&&(this._weightInterpolant=f=d._lendControlInterpolant());d=f.parameterPositions;f=f.sampleValues;d[0]=e;f[0]=b;d[1]=e+a;f[1]=c;return this}};Object.assign(THREE.AnimationMixer.prototype,{_bindAction:function(a,b){var c=a._localRoot||this._root,d=a._clip.tracks,e=d.length,f=a._propertyBindings,g=a._interpolants,h=c.uuid,k=this._bindingsByRootAndName,l=k[h];void 0===l&&(l={},k[h]=l);for(k=0;k!==e;++k){var p=d[k],n=p.name,m=l[n];if(void 0===m){m=f[k];if(void 0!==m){null===m._cacheIndex&&(++m.referenceCount,this._addInactiveBinding(m,h,n));continue}m=new THREE.PropertyMixer(THREE.PropertyBinding.create(c,n,b&&b._propertyBindings[k].binding.parsedPath),p.ValueTypeName,p.getValueSize());++m.referenceCount;this._addInactiveBinding(m,h,n)}f[k]=m;g[k].resultBuffer=m.buffer}},_activateAction:function(a){if(!this._isActiveAction(a)){if(null===a._cacheIndex){var b=(a._localRoot||this._root).uuid,c=a._clip.name,d=this._actionsByClip[c];this._bindAction(a,d&&d.knownActions[0]);this._addInactiveAction(a,c,b)}b=a._propertyBindings;c=0;for(d=b.length;c!==d;++c){var e=b[c];0===e.useCount++&&(this._lendBinding(e),e.saveOriginalState())}this._lendAction(a)}},_deactivateAction:function(a){if(this._isActiveAction(a)){for(var b=a._propertyBindings,c=0,d=b.length;c!==d;++c){var e=b[c];0===--e.useCount&&(e.restoreOriginalState(),this._takeBackBinding(e))}this._takeBackAction(a)}},_initMemoryManager:function(){this._actions=[];this._nActiveActions=0;this._actionsByClip={};this._bindings=[];this._nActiveBindings=0;this._bindingsByRootAndName={};this._controlInterpolants=[];this._nActiveControlInterpolants=0;var a=this;this.stats={actions:{get total(){return a._actions.length},get inUse(){return a._nActiveActions}},bindings:{get total(){return a._bindings.length},get inUse(){return a._nActiveBindings}},controlInterpolants:{get total(){return a._controlInterpolants.length},get inUse(){return a._nActiveControlInterpolants}}}},_isActiveAction:function(a){a=a._cacheIndex;return null!==a&&a=c){var n=c++,m=b[n];d[m.uuid]=p;b[p]=m;d[l]=n;b[n]=k;k=0;for(l=f;k!==l;++k){var m=e[k],q=m[p];m[p]=m[n];m[n]=q}}}this.nCachedObjects_=c},uncache:function(a){for(var b=this._objects,c=b.length,d=this.nCachedObjects_,e=this._indicesByUUID,f=this._bindings,g=f.length,h=0,k=arguments.length;h!==k;++h){var l=arguments[h].uuid,p=e[l];if(void 0!==p)if(delete e[l],pb;)--f;++f;if(0!==e||f!==d)e>=f&&(f=Math.max(f,1),e=f-1),d=this.getValueSize(),this.times=THREE.AnimationUtils.arraySlice(c,e,f),this.values=THREE.AnimationUtils.arraySlice(this.values,e*d,f*d);return this},validate:function(){var a=!0,b=this.getValueSize();0!==b-Math.floor(b)&&(console.error("invalid value size in track",this),a=!1);var c=this.times,b=this.values,d=c.length;0===d&&(console.error("track is empty",this),a=!1);for(var e=null,f=0;f!==d;f++){var g=c[f];if("number"===typeof g&&isNaN(g)){console.error("time is not a valid number",this,f,g);a=!1;break}if(null!==e&&e>g){console.error("out of order keys",this,f,g,e);a=!1;break}e=g}if(void 0!==b&&THREE.AnimationUtils.isTypedArray(b))for(f=0,c=b.length;f!==c;++f)if(d=b[f],isNaN(d)){console.error("value is not a valid number",this,f,d);a=!1;break}return a},optimize:function(){for(var a=this.times,b=this.values,c=this.getValueSize(),d=1,e=1,f=a.length-1;e<=f;++e){var g=!1,h=a[e];if(h!==a[e+1]&&(1!==e||h!==h[0]))for(var k=e*c,l=k-c,p=k+c,h=0;h!==c;++h){var n=b[k+h];if(n!==b[l+h]||n!==b[p+h]){g=!0;break}}if(g){if(e!==d)for(a[d]=a[e],g=e*c,k=d*c,h=0;h!==c;++h)b[k+h]=b[g+h];++d}}d!==a.length&&(this.times=THREE.AnimationUtils.arraySlice(a,0,d),this.values=THREE.AnimationUtils.arraySlice(b,0,d*c));return this}};Object.assign(THREE.KeyframeTrack,{parse:function(a){if(void 0===a.type)throw Error("track type undefined, can not parse");var b=THREE.KeyframeTrack._getTrackTypeForValueTypeName(a.type);if(void 0===a.times){console.warn("legacy JSON format detected, converting");var c=[],d=[];THREE.AnimationUtils.flattenJSON(a.keys,c,d,"value");a.times=c;a.values=d}return void 0!==b.parse?b.parse(a):new b(a.name,a.times,a.values,a.interpolation)},toJSON:function(a){var b=a.constructor;if(void 0!==b.toJSON)b=b.toJSON(a);else{var b={name:a.name,times:THREE.AnimationUtils.convertArray(a.times,Array),values:THREE.AnimationUtils.convertArray(a.values,Array)},c=a.getInterpolation();c!==a.DefaultInterpolation&&(b.interpolation=c)}b.type=a.ValueTypeName;return b},_getTrackTypeForValueTypeName:function(a){switch(a.toLowerCase()){case"scalar":case"double":case"float":case"number":case"integer":return THREE.NumberKeyframeTrack;case"vector":case"vector2":case"vector3":case"vector4":return THREE.VectorKeyframeTrack;case"color":return THREE.ColorKeyframeTrack;case"quaternion":return THREE.QuaternionKeyframeTrack;case"bool":case"boolean":return THREE.BooleanKeyframeTrack;case"string":return THREE.StringKeyframeTrack}throw Error("Unsupported typeName: "+a)}});THREE.PropertyBinding=function(a,b,c){this.path=b;this.parsedPath=c||THREE.PropertyBinding.parseTrackName(b);this.node=THREE.PropertyBinding.findNode(a,this.parsedPath.nodeName)||a;this.rootNode=a};THREE.PropertyBinding.prototype={constructor:THREE.PropertyBinding,getValue:function(a,b){this.bind();this.getValue(a,b)},setValue:function(a,b){this.bind();this.setValue(a,b)},bind:function(){var a=this.node,b=this.parsedPath,c=b.objectName,d=b.propertyName,e=b.propertyIndex;a||(this.node=a=THREE.PropertyBinding.findNode(this.rootNode,b.nodeName)||this.rootNode);this.getValue=this._getValue_unavailable;this.setValue=this._setValue_unavailable;if(a){if(c){var f=b.objectIndex;switch(c){case"materials":if(!a.material){console.error(" can not bind to material as node does not have a material",this);return}if(!a.material.materials){console.error(" can not bind to material.materials as node.material does not have a materials array",this);return}a=a.material.materials;break;case"bones":if(!a.skeleton){console.error(" can not bind to bones as node does not have a skeleton",this);return}a=a.skeleton.bones;for(c=0;cd&&this._mixBufferRegion(c,a,3*b,1-d,b);for(var d=b,f=b+b;d!==f;++d)if(c[d]!==c[d+b]){e.setValue(c,a);break}},saveOriginalState:function(){var a=this.buffer,b=this.valueSize,c=3*b;this.binding.getValue(a,c);for(var d=b;d!==c;++d)a[d]=a[c+d%b];this.cumulativeWeight=0},restoreOriginalState:function(){this.binding.setValue(this.buffer,3*this.valueSize)},_select:function(a,b,c,d,e){if(.5<=d)for(d=0;d!==e;++d)a[b+d]=a[c+d]},_slerp:function(a,b,c,d,e){THREE.Quaternion.slerpFlat(a,b,a,b,a,c,d)},_lerp:function(a,b,c,d,e){for(var f=1-d,g=0;g!==e;++g){var h=b+g;a[h]=a[h]*f+a[c+g]*d}}};THREE.BooleanKeyframeTrack=function(a,b,c){THREE.KeyframeTrack.call(this,a,b,c)};THREE.BooleanKeyframeTrack.prototype=Object.assign(Object.create(THREE.KeyframeTrack.prototype),{constructor:THREE.BooleanKeyframeTrack,ValueTypeName:"bool",ValueBufferType:Array,DefaultInterpolation:THREE.IntepolateDiscrete,InterpolantFactoryMethodLinear:void 0,InterpolantFactoryMethodSmooth:void 0});THREE.NumberKeyframeTrack=function(a,b,c,d){THREE.KeyframeTrack.call(this,a,b,c,d)};THREE.NumberKeyframeTrack.prototype=Object.assign(Object.create(THREE.KeyframeTrack.prototype),{constructor:THREE.NumberKeyframeTrack,ValueTypeName:"number"});THREE.QuaternionKeyframeTrack=function(a,b,c,d){THREE.KeyframeTrack.call(this,a,b,c,d)};THREE.QuaternionKeyframeTrack.prototype=Object.assign(Object.create(THREE.KeyframeTrack.prototype),{constructor:THREE.QuaternionKeyframeTrack,ValueTypeName:"quaternion",DefaultInterpolation:THREE.InterpolateLinear,InterpolantFactoryMethodLinear:function(a){return new THREE.QuaternionLinearInterpolant(this.times,this.values,this.getValueSize(),a)},InterpolantFactoryMethodSmooth:void 0});THREE.StringKeyframeTrack=function(a,b,c,d){THREE.KeyframeTrack.call(this,a,b,c,d)};THREE.StringKeyframeTrack.prototype=Object.assign(Object.create(THREE.KeyframeTrack.prototype),{constructor:THREE.StringKeyframeTrack,ValueTypeName:"string",ValueBufferType:Array,DefaultInterpolation:THREE.IntepolateDiscrete,InterpolantFactoryMethodLinear:void 0,InterpolantFactoryMethodSmooth:void 0});THREE.VectorKeyframeTrack=function(a,b,c,d){THREE.KeyframeTrack.call(this,a,b,c,d)};THREE.VectorKeyframeTrack.prototype=Object.assign(Object.create(THREE.KeyframeTrack.prototype),{constructor:THREE.VectorKeyframeTrack,ValueTypeName:"vector"});THREE.Audio=function(a){THREE.Object3D.call(this);this.type="Audio";this.context=a.context;this.source=this.context.createBufferSource();this.source.onended=this.onEnded.bind(this);this.gain=this.context.createGain();this.gain.connect(a.getInput());this.autoplay=!1;this.startTime=0;this.playbackRate=1;this.isPlaying=!1;this.hasPlaybackControl=!0;this.sourceType="empty";this.filter=null};THREE.Audio.prototype=Object.create(THREE.Object3D.prototype);THREE.Audio.prototype.constructor=THREE.Audio;THREE.Audio.prototype.getOutput=function(){return this.gain};THREE.Audio.prototype.load=function(a){var b=new THREE.AudioBuffer(this.context);b.load(a);this.setBuffer(b);return this};THREE.Audio.prototype.setNodeSource=function(a){this.hasPlaybackControl=!1;this.sourceType="audioNode";this.source=a;this.connect();return this};THREE.Audio.prototype.setBuffer=function(a){var b=this;a.onReady(function(a){b.source.buffer=a;b.sourceType="buffer";b.autoplay&&b.play()});return this};THREE.Audio.prototype.play=function(){if(!0===this.isPlaying)console.warn("THREE.Audio: Audio is already playing.");else if(!1===this.hasPlaybackControl)console.warn("THREE.Audio: this Audio has no playback control.");else{var a=this.context.createBufferSource();a.buffer=this.source.buffer;a.loop=this.source.loop;a.onended=this.source.onended;a.start(0,this.startTime);a.playbackRate.value=this.playbackRate;this.isPlaying=!0;this.source=a;this.connect()}};THREE.Audio.prototype.pause=function(){!1===this.hasPlaybackControl?console.warn("THREE.Audio: this Audio has no playback control."):(this.source.stop(),this.startTime=this.context.currentTime)};THREE.Audio.prototype.stop=function(){!1===this.hasPlaybackControl?console.warn("THREE.Audio: this Audio has no playback control."):(this.source.stop(),this.startTime=0)};THREE.Audio.prototype.connect=function(){null!==this.filter?(this.source.connect(this.filter),this.filter.connect(this.getOutput())):this.source.connect(this.getOutput())};THREE.Audio.prototype.disconnect=function(){null!==this.filter?(this.source.disconnect(this.filter),this.filter.disconnect(this.getOutput())):this.source.disconnect(this.getOutput())};THREE.Audio.prototype.getFilter=function(){return this.filter};THREE.Audio.prototype.setFilter=function(a){void 0===a&&(a=null);!0===this.isPlaying?(this.disconnect(),this.filter=a,this.connect()):this.filter=a};THREE.Audio.prototype.setPlaybackRate=function(a){!1===this.hasPlaybackControl?console.warn("THREE.Audio: this Audio has no playback control."):(this.playbackRate=a,!0===this.isPlaying&&(this.source.playbackRate.value=this.playbackRate))};THREE.Audio.prototype.getPlaybackRate=function(){return this.playbackRate};THREE.Audio.prototype.onEnded=function(){this.isPlaying=!1};THREE.Audio.prototype.setLoop=function(a){!1===this.hasPlaybackControl?console.warn("THREE.Audio: this Audio has no playback control."):this.source.loop=a};THREE.Audio.prototype.getLoop=function(){return!1===this.hasPlaybackControl?(console.warn("THREE.Audio: this Audio has no playback control."),!1):this.source.loop};THREE.Audio.prototype.setVolume=function(a){this.gain.gain.value=a};THREE.Audio.prototype.getVolume=function(){return this.gain.gain.value};THREE.AudioAnalyser=function(a,b){this.analyser=a.context.createAnalyser();this.analyser.fftSize=void 0!==b?b:2048;this.data=new Uint8Array(this.analyser.frequencyBinCount);a.getOutput().connect(this.analyser)};THREE.AudioAnalyser.prototype={constructor:THREE.AudioAnalyser,getData:function(){this.analyser.getByteFrequencyData(this.data);return this.data}};THREE.AudioBuffer=function(a){this.context=a;this.ready=!1;this.readyCallbacks=[]};THREE.AudioBuffer.prototype.load=function(a){var b=this,c=new XMLHttpRequest;c.open("GET",a,!0);c.responseType="arraybuffer";c.onload=function(a){b.context.decodeAudioData(this.response,function(a){b.buffer=a;b.ready=!0;for(a=0;a-1?e(a,b,c):b.indexOf("%")>-1?f(a,b,c):b.indexOf(":")>-1?g(a,b):i(a._value,b,c)}function d(a,b){var c,d,e,f,g,i=b,j=["KB","MB","GB","TB","PB","EB","ZB","YB"],k=!1;if(b.indexOf(":")>-1)a._value=h(b);else if(b===q)a._value=0;else{for("."!==o[p].delimiters.decimal&&(b=b.replace(/\./g,"").replace(o[p].delimiters.decimal,".")),c=new RegExp("[^a-zA-Z]"+o[p].abbreviations.thousand+"(?:\\)|(\\"+o[p].currency.symbol+")?(?:\\))?)?$"),d=new RegExp("[^a-zA-Z]"+o[p].abbreviations.million+"(?:\\)|(\\"+o[p].currency.symbol+")?(?:\\))?)?$"),e=new RegExp("[^a-zA-Z]"+o[p].abbreviations.billion+"(?:\\)|(\\"+o[p].currency.symbol+")?(?:\\))?)?$"),f=new RegExp("[^a-zA-Z]"+o[p].abbreviations.trillion+"(?:\\)|(\\"+o[p].currency.symbol+")?(?:\\))?)?$"),g=0;g<=j.length&&!(k=b.indexOf(j[g])>-1?Math.pow(1024,g+1):!1);g++);a._value=(k?k:1)*(i.match(c)?Math.pow(10,3):1)*(i.match(d)?Math.pow(10,6):1)*(i.match(e)?Math.pow(10,9):1)*(i.match(f)?Math.pow(10,12):1)*(b.indexOf("%")>-1?.01:1)*((b.split("-").length+Math.min(b.split("(").length-1,b.split(")").length-1))%2?1:-1)*Number(b.replace(/[^0-9\.]+/g,"")),a._value=k?Math.ceil(a._value):a._value}return a._value}function e(a,b,c){var d,e,f=b.indexOf("$"),g=b.indexOf("("),h=b.indexOf("-"),j="";return b.indexOf(" $")>-1?(j=" ",b=b.replace(" $","")):b.indexOf("$ ")>-1?(j=" ",b=b.replace("$ ","")):b=b.replace("$",""),e=i(a._value,b,c),1>=f?e.indexOf("(")>-1||e.indexOf("-")>-1?(e=e.split(""),d=1,(g>f||h>f)&&(d=0),e.splice(d,0,o[p].currency.symbol+j),e=e.join("")):e=o[p].currency.symbol+j+e:e.indexOf(")")>-1?(e=e.split(""),e.splice(-1,0,j+o[p].currency.symbol),e=e.join("")):e=e+j+o[p].currency.symbol,e}function f(a,b,c){var d,e="",f=100*a._value;return b.indexOf(" %")>-1?(e=" ",b=b.replace(" %","")):b=b.replace("%",""),d=i(f,b,c),d.indexOf(")")>-1?(d=d.split(""),d.splice(-1,0,e+"%"),d=d.join("")):d=d+e+"%",d}function g(a){var b=Math.floor(a._value/60/60),c=Math.floor((a._value-60*b*60)/60),d=Math.round(a._value-60*b*60-60*c);return b+":"+(10>c?"0"+c:c)+":"+(10>d?"0"+d:d)}function h(a){var b=a.split(":"),c=0;return 3===b.length?(c+=60*Number(b[0])*60,c+=60*Number(b[1]),c+=Number(b[2])):2===b.length&&(c+=60*Number(b[0]),c+=Number(b[1])),Number(c)}function i(a,c,d){var e,f,g,h,i,j,k=!1,l=!1,m=!1,n="",r=!1,s=!1,t=!1,u=!1,v=!1,w="",x="",y=Math.abs(a),z=["B","KB","MB","GB","TB","PB","EB","ZB","YB"],A="",B=!1;if(0===a&&null!==q)return q;if(c.indexOf("(")>-1?(k=!0,c=c.slice(1,-1)):c.indexOf("+")>-1&&(l=!0,c=c.replace(/\+/g,"")),c.indexOf("a")>-1&&(r=c.indexOf("aK")>=0,s=c.indexOf("aM")>=0,t=c.indexOf("aB")>=0,u=c.indexOf("aT")>=0,v=r||s||t||u,c.indexOf(" a")>-1?(n=" ",c=c.replace(" a","")):c=c.replace("a",""),y>=Math.pow(10,12)&&!v||u?(n+=o[p].abbreviations.trillion,a/=Math.pow(10,12)):y=Math.pow(10,9)&&!v||t?(n+=o[p].abbreviations.billion,a/=Math.pow(10,9)):y=Math.pow(10,6)&&!v||s?(n+=o[p].abbreviations.million,a/=Math.pow(10,6)):(y=Math.pow(10,3)&&!v||r)&&(n+=o[p].abbreviations.thousand,a/=Math.pow(10,3))),c.indexOf("b")>-1)for(c.indexOf(" b")>-1?(w=" ",c=c.replace(" b","")):c=c.replace("b",""),g=0;g<=z.length;g++)if(e=Math.pow(1024,g),f=Math.pow(1024,g+1),a>=e&&f>a){w+=z[g],e>0&&(a/=e);break}return c.indexOf("o")>-1&&(c.indexOf(" o")>-1?(x=" ",c=c.replace(" o","")):c=c.replace("o",""),x+=o[p].ordinal(a)),c.indexOf("[.]")>-1&&(m=!0,c=c.replace("[.]",".")),h=a.toString().split(".")[0],i=c.split(".")[1],j=c.indexOf(","),i?(i.indexOf("[")>-1?(i=i.replace("]",""),i=i.split("["),A=b(a,i[0].length+i[1].length,d,i[1].length)):A=b(a,i.length,d),h=A.split(".")[0],A=A.split(".")[1].length?o[p].delimiters.decimal+A.split(".")[1]:"",m&&0===Number(A.slice(1))&&(A="")):h=b(a,null,d),h.indexOf("-")>-1&&(h=h.slice(1),B=!0),j>-1&&(h=h.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g,"$1"+o[p].delimiters.thousands)),0===c.indexOf(".")&&(h=""),(k&&B?"(":"")+(!k&&B?"-":"")+(!B&&l?"+":"")+h+A+(x?x:"")+(n?n:"")+(w?w:"")+(k&&B?")":"")}function j(a,b){o[a]=b}function k(a){var b=a.toString().split(".");return b.length<2?1:Math.pow(10,b[1].length)}function l(){var a=Array.prototype.slice.call(arguments);return a.reduce(function(a,b){var c=k(a),d=k(b);return c>d?c:d},-1/0)}var m,n="1.5.3",o={},p="en",q=null,r="0,0",s="undefined"!=typeof module&&module.exports;m=function(b){return m.isNumeral(b)?b=b.value():0===b||"undefined"==typeof b?b=0:Number(b)||(b=m.fn.unformat(b)),new a(Number(b))},m.version=n,m.isNumeral=function(b){return b instanceof a},m.language=function(a,b){if(!a)return p;if(a&&!b){if(!o[a])throw new Error("Unknown language : "+a);p=a}return(b||!o[a])&&j(a,b),m},m.languageData=function(a){if(!a)return o[p];if(!o[a])throw new Error("Unknown language : "+a);return o[a]},m.language("en",{delimiters:{thousands:",",decimal:"."},abbreviations:{thousand:"k",million:"m",billion:"b",trillion:"t"},ordinal:function(a){var b=a%10;return 1===~~(a%100/10)?"th":1===b?"st":2===b?"nd":3===b?"rd":"th"},currency:{symbol:"$"}}),m.zeroFormat=function(a){q="string"==typeof a?a:null},m.defaultFormat=function(a){r="string"==typeof a?a:"0.0"},"function"!=typeof Array.prototype.reduce&&(Array.prototype.reduce=function(a,b){"use strict";if(null===this||"undefined"==typeof this)throw new TypeError("Array.prototype.reduce called on null or undefined");if("function"!=typeof a)throw new TypeError(a+" is not a function");var c,d,e=this.length>>>0,f=!1;for(1c;++c)this.hasOwnProperty(c)&&(f?d=a(d,this[c],c,this):(d=this[c],f=!0));if(!f)throw new TypeError("Reduce of empty array with no initial value");return d}),m.fn=a.prototype={clone:function(){return m(this)},format:function(a,b){return c(this,a?a:r,void 0!==b?b:Math.round)},unformat:function(a){return"[object Number]"===Object.prototype.toString.call(a)?a:d(this,a?a:r)},value:function(){return this._value},valueOf:function(){return this._value},set:function(a){return this._value=Number(a),this},add:function(a){function b(a,b){return a+c*b}var c=l.call(null,this._value,a);return this._value=[this._value,a].reduce(b,0)/c,this},subtract:function(a){function b(a,b){return a-c*b}var c=l.call(null,this._value,a);return this._value=[a].reduce(b,this._value*c)/c,this},multiply:function(a){function b(a,b){var c=l(a,b);return a*c*b*c/(c*c)}return this._value=[this._value,a].reduce(b,1),this},divide:function(a){function b(a,b){var c=l(a,b);return a*c/(b*c)}return this._value=[this._value,a].reduce(b),this},difference:function(a){return Math.abs(m(this._value).subtract(a).value())}},s&&(module.exports=m),"undefined"==typeof ender&&(this.numeral=m),"function"==typeof define&&define.amd&&define([],function(){return m})}).call(this); +// Extracted Richard Bunt's work in Telemachus: https://github.com/richardbunt/Telemachus/blob/master/WebPages/WebPages/src/console.js -break;case"mapAORepeat":case"mapAOOffset":case"mapAOWrap":case"mapAOAnisotropy":break;case"mapBump":k.bumpMap=g(p,d.mapBumpRepeat,d.mapBumpOffset,d.mapBumpWrap,d.mapBumpAnisotropy);break;case"mapBumpScale":k.bumpScale=p;break;case"mapBumpRepeat":case"mapBumpOffset":case"mapBumpWrap":case"mapBumpAnisotropy":break;case"mapNormal":k.normalMap=g(p,d.mapNormalRepeat,d.mapNormalOffset,d.mapNormalWrap,d.mapNormalAnisotropy);break;case"mapNormalFactor":k.normalScale=[p,p];break;case"mapNormalRepeat":case"mapNormalOffset":case"mapNormalWrap":case"mapNormalAnisotropy":break;case"mapSpecular":k.specularMap=g(p,d.mapSpecularRepeat,d.mapSpecularOffset,d.mapSpecularWrap,d.mapSpecularAnisotropy);break;case"mapSpecularRepeat":case"mapSpecularOffset":case"mapSpecularWrap":case"mapSpecularAnisotropy":break;case"mapAlpha":k.alphaMap=g(p,d.mapAlphaRepeat,d.mapAlphaOffset,d.mapAlphaWrap,d.mapAlphaAnisotropy);break;case"mapAlphaRepeat":case"mapAlphaOffset":case"mapAlphaWrap":case"mapAlphaAnisotropy":break;case"flipSided":k.side=THREE.BackSide;break;case"doubleSided":k.side=THREE.DoubleSide;break;case"transparency":console.warn("THREE.Loader.createMaterial: transparency has been renamed to opacity");k.opacity=p;break;case"depthTest":case"depthWrite":case"colorWrite":case"opacity":case"reflectivity":case"transparent":case"visible":case"wireframe":k[l]=p;break;case"vertexColors":!0===p&&(k.vertexColors=THREE.VertexColors);"face"===p&&(k.vertexColors=THREE.FaceColors);break;default:console.error("THREE.Loader.createMaterial: Unsupported",l,p)}}"MeshBasicMaterial"===k.type&&delete k.emissive;"MeshPhongMaterial"!==k.type&&delete k.specular;1>k.opacity&&(k.transparent=!0);c.setTextures(h);return c.parse(k)}}()};THREE.Loader.Handlers={handlers:[],add:function(a,b){this.handlers.push(a,b)},get:function(a){for(var b=this.handlers,c=0,d=b.length;cg;g++)m=w[k++],s=t[2*m],m=t[2*m+1],s=new THREE.Vector2(s,m),2!==g&&c.faceVertexUvs[d][h].push(s),0!==g&&c.faceVertexUvs[d][h+1].push(s);n&&(n=3*w[k++],q.normal.set(E[n++],E[n++],E[n]),v.normal.copy(q.normal));if(u)for(d=0;4>d;d++)n=3*w[k++],u=new THREE.Vector3(E[n++],E[n++],E[n]),2!==d&&q.vertexNormals.push(u),0!==d&&v.vertexNormals.push(u);p&&(p=w[k++],p=x[p],q.color.setHex(p),v.color.setHex(p));if(b)for(d=0;4>d;d++)p=w[k++],p=x[p],2!==d&&q.vertexColors.push(new THREE.Color(p)),0!==d&&v.vertexColors.push(new THREE.Color(p));c.faces.push(q);c.faces.push(v)}else{q=new THREE.Face3;q.a=w[k++];q.b=w[k++];q.c=w[k++];h&&(h=w[k++],q.materialIndex=h);h=c.faces.length;if(d)for(d=0;dg;g++)m=w[k++],s=t[2*m],m=t[2*m+1],s=new THREE.Vector2(s,m),c.faceVertexUvs[d][h].push(s);n&&(n=3*w[k++],q.normal.set(E[n++],E[n++],E[n]));if(u)for(d=0;3>d;d++)n=3*w[k++],u=new THREE.Vector3(E[n++],E[n++],E[n]),q.vertexNormals.push(u);p&&(p=w[k++],q.color.setHex(x[p]));if(b)for(d=0;3>d;d++)p=w[k++],q.vertexColors.push(new THREE.Color(x[p]));c.faces.push(q)}})(d);(function(){var b=void 0!==a.influencesPerVertex?a.influencesPerVertex:2;if(a.skinWeights)for(var d=0,g=a.skinWeights.length;dthis.opacity&&(d.opacity=this.opacity);!0===this.transparent&&(d.transparent=this.transparent);0a.x||1a.x?0:1;break;case THREE.MirroredRepeatWrapping:1===Math.abs(Math.floor(a.x)%2)?a.x=Math.ceil(a.x)-a.x:a.x-=Math.floor(a.x)}if(0>a.y||1a.y?0:1;break;case THREE.MirroredRepeatWrapping:1===Math.abs(Math.floor(a.y)%2)?a.y=Math.ceil(a.y)-a.y:a.y-=Math.floor(a.y)}this.flipY&&(a.y=1-a.y)}}};THREE.EventDispatcher.prototype.apply(THREE.Texture.prototype);THREE.TextureIdCount=0;THREE.CanvasTexture=function(a,b,c,d,e,f,g,h,k){THREE.Texture.call(this,a,b,c,d,e,f,g,h,k);this.needsUpdate=!0};THREE.CanvasTexture.prototype=Object.create(THREE.Texture.prototype);THREE.CanvasTexture.prototype.constructor=THREE.CanvasTexture;THREE.CubeTexture=function(a,b,c,d,e,f,g,h,k){a=void 0!==a?a:[];b=void 0!==b?b:THREE.CubeReflectionMapping;THREE.Texture.call(this,a,b,c,d,e,f,g,h,k);this.flipY=!1};THREE.CubeTexture.prototype=Object.create(THREE.Texture.prototype);THREE.CubeTexture.prototype.constructor=THREE.CubeTexture;Object.defineProperty(THREE.CubeTexture.prototype,"images",{get:function(){return this.image},set:function(a){this.image=a}});THREE.CompressedTexture=function(a,b,c,d,e,f,g,h,k,l,p){THREE.Texture.call(this,null,f,g,h,k,l,d,e,p);this.image={width:b,height:c};this.mipmaps=a;this.generateMipmaps=this.flipY=!1};THREE.CompressedTexture.prototype=Object.create(THREE.Texture.prototype);THREE.CompressedTexture.prototype.constructor=THREE.CompressedTexture;THREE.DataTexture=function(a,b,c,d,e,f,g,h,k,l,p){THREE.Texture.call(this,null,f,g,h,k,l,d,e,p);this.image={data:a,width:b,height:c};this.magFilter=void 0!==k?k:THREE.NearestFilter;this.minFilter=void 0!==l?l:THREE.NearestFilter;this.generateMipmaps=this.flipY=!1};THREE.DataTexture.prototype=Object.create(THREE.Texture.prototype);THREE.DataTexture.prototype.constructor=THREE.DataTexture;THREE.VideoTexture=function(a,b,c,d,e,f,g,h,k){function l(){requestAnimationFrame(l);a.readyState===a.HAVE_ENOUGH_DATA&&(p.needsUpdate=!0)}THREE.Texture.call(this,a,b,c,d,e,f,g,h,k);this.generateMipmaps=!1;var p=this;l()};THREE.VideoTexture.prototype=Object.create(THREE.Texture.prototype);THREE.VideoTexture.prototype.constructor=THREE.VideoTexture;THREE.Group=function(){THREE.Object3D.call(this);this.type="Group"};THREE.Group.prototype=Object.create(THREE.Object3D.prototype);THREE.Group.prototype.constructor=THREE.Group;THREE.Points=function(a,b){THREE.Object3D.call(this);this.type="Points";this.geometry=void 0!==a?a:new THREE.Geometry;this.material=void 0!==b?b:new THREE.PointsMaterial({color:16777215*Math.random()})};THREE.Points.prototype=Object.create(THREE.Object3D.prototype);THREE.Points.prototype.constructor=THREE.Points;THREE.Points.prototype.raycast=function(){var a=new THREE.Matrix4,b=new THREE.Ray,c=new THREE.Sphere;return function(d,e){function f(a,c){var f=b.distanceSqToPoint(a);if(fd.far||e.push({distance:l,distanceToRay:Math.sqrt(f),point:h.clone(),index:c,face:null,object:g})}}var g=this,h=this.geometry,k=this.matrixWorld,l=d.params.Points.threshold;null===h.boundingSphere&&h.computeBoundingSphere();c.copy(h.boundingSphere);c.applyMatrix4(k);if(!1!==d.ray.intersectsSphere(c)){a.getInverse(k);b.copy(d.ray).applyMatrix4(a);var l=l/((this.scale.x+this.scale.y+this.scale.z)/3),p=l*l,l=new THREE.Vector3;if(h instanceof THREE.BufferGeometry){var n=h.index,h=h.attributes.position.array;if(null!==n)for(var m=n.array,n=0,q=m.length;nf||(p.applyMatrix4(this.matrixWorld),v=d.ray.origin.distanceTo(p),vd.far||e.push({distance:v,point:h.clone().applyMatrix4(this.matrixWorld),index:g,face:null,faceIndex:null,object:this}))}else for(g=0,u=q.length/3-1;gf||(p.applyMatrix4(this.matrixWorld),v=d.ray.origin.distanceTo(p),vd.far||e.push({distance:v,point:h.clone().applyMatrix4(this.matrixWorld),index:g,face:null,faceIndex:null,object:this}))}else if(g instanceof THREE.Geometry)for(k=g.vertices,l=k.length,g=0;gf||(p.applyMatrix4(this.matrixWorld),v=d.ray.origin.distanceTo(p),vd.far||e.push({distance:v,point:h.clone().applyMatrix4(this.matrixWorld),index:g,face:null,faceIndex:null,object:this}))}}}();THREE.Line.prototype.clone=function(){return new this.constructor(this.geometry,this.material).copy(this)};THREE.LineStrip=0;THREE.LinePieces=1;THREE.LineSegments=function(a,b){THREE.Line.call(this,a,b);this.type="LineSegments"};THREE.LineSegments.prototype=Object.create(THREE.Line.prototype);THREE.LineSegments.prototype.constructor=THREE.LineSegments;THREE.Mesh=function(a,b){THREE.Object3D.call(this);this.type="Mesh";this.geometry=void 0!==a?a:new THREE.Geometry;this.material=void 0!==b?b:new THREE.MeshBasicMaterial({color:16777215*Math.random()});this.drawMode=THREE.TrianglesDrawMode;this.updateMorphTargets()};THREE.Mesh.prototype=Object.create(THREE.Object3D.prototype);THREE.Mesh.prototype.constructor=THREE.Mesh;THREE.Mesh.prototype.setDrawMode=function(a){this.drawMode=a};THREE.Mesh.prototype.updateMorphTargets=function(){if(void 0!==this.geometry.morphTargets&&0b.far?null:{distance:c,point:s.clone(),object:a}}function c(c,d,e,f,l,p,n,s){g.fromArray(f,3*p);h.fromArray(f,3*n);k.fromArray(f,3*s);if(c=b(c,d,e,g,h,k,t))l&&(m.fromArray(l,2*p),q.fromArray(l,2*n),u.fromArray(l,2*s),c.uv=a(t,g,h,k,m,q,u)),c.face=new THREE.Face3(p,n,s,THREE.Triangle.normal(g,h,k)),c.faceIndex=p;return c}var d=new THREE.Matrix4,e=new THREE.Ray,f=new THREE.Sphere,g=new THREE.Vector3,h=new THREE.Vector3,k=new THREE.Vector3,l=new THREE.Vector3,p=new THREE.Vector3,n=new THREE.Vector3,m=new THREE.Vector2,q=new THREE.Vector2,u=new THREE.Vector2,v=new THREE.Vector3,t=new THREE.Vector3,s=new THREE.Vector3;return function(s,v){var x=this.geometry,D=this.material,z=this.matrixWorld;if(void 0!==D&&(null===x.boundingSphere&&x.computeBoundingSphere(),f.copy(x.boundingSphere),f.applyMatrix4(z),!1!==s.ray.intersectsSphere(f)&&(d.getInverse(z),e.copy(s.ray).applyMatrix4(d),null===x.boundingBox||!1!==e.intersectsBox(x.boundingBox)))){var y,B;if(x instanceof THREE.BufferGeometry){var G,F,D=x.index,z=x.attributes,x=z.position.array;void 0!==z.uv&&(y=z.uv.array);if(null!==D)for(var z=D.array,H=0,L=z.length;H=d[e].distance)d[e-1].object.visible=!1,d[e].object.visible=!0;else break;for(;ethis.scale.x*this.scale.y||c.push({distance:Math.sqrt(d),point:this.position,face:null,object:this})}}();THREE.Sprite.prototype.clone=function(){return new this.constructor(this.material).copy(this)};THREE.Particle=THREE.Sprite;THREE.LensFlare=function(a,b,c,d,e){THREE.Object3D.call(this);this.lensFlares=[];this.positionScreen=new THREE.Vector3;this.customUpdateCallback=void 0;void 0!==a&&this.add(a,b,c,d,e)};THREE.LensFlare.prototype=Object.create(THREE.Object3D.prototype);THREE.LensFlare.prototype.constructor=THREE.LensFlare;THREE.LensFlare.prototype.add=function(a,b,c,d,e,f){void 0===b&&(b=-1);void 0===c&&(c=0);void 0===f&&(f=1);void 0===e&&(e=new THREE.Color(16777215));void 0===d&&(d=THREE.NormalBlending);c=Math.min(c,Math.max(0,c));this.lensFlares.push({texture:a,size:b,distance:c,x:0,y:0,z:0,scale:1,rotation:0,opacity:f,color:e,blending:d})};THREE.LensFlare.prototype.updateLensFlares=function(){var a,b=this.lensFlares.length,c,d=2*-this.positionScreen.x,e=2*-this.positionScreen.y;for(a=0;a= 365 * 24 * 3600) { + result += (t / (365 * 24 * 3600) | 0) + ":"; + t %= 365 * 24 * 3600; + if (t < 24 * 3600) { + result += "0:"; + } + } + if (t >= 24 * 3600) { + result += (t / (24 * 3600) | 0) + ":"; + } + t %= 24 * 3600; + return result + this.hourMinSec(t) + " MET"; + }, -THREE.ShaderChunk.alphamap_pars_fragment="#ifdef USE_ALPHAMAP\n uniform sampler2D alphaMap;\n#endif\n";THREE.ShaderChunk.alphatest_fragment="#ifdef ALPHATEST\n if ( diffuseColor.a < ALPHATEST ) discard;\n#endif\n";THREE.ShaderChunk.aomap_fragment="#ifdef USE_AOMAP\n float ambientOcclusion = ( texture2D( aoMap, vUv2 ).r - 1.0 ) * aoMapIntensity + 1.0;\n reflectedLight.indirectDiffuse *= ambientOcclusion;\n #if defined( USE_ENVMAP ) && defined( STANDARD )\n float dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n reflectedLight.indirectSpecular *= computeSpecularOcclusion( dotNV, ambientOcclusion, material.specularRoughness );\n #endif\n#endif\n";THREE.ShaderChunk.aomap_pars_fragment="#ifdef USE_AOMAP\n uniform sampler2D aoMap;\n uniform float aoMapIntensity;\n#endif";THREE.ShaderChunk.begin_vertex="\nvec3 transformed = vec3( position );\n";THREE.ShaderChunk.beginnormal_vertex="\nvec3 objectNormal = vec3( normal );\n";THREE.ShaderChunk.bsdfs="bool testLightInRange( const in float lightDistance, const in float cutoffDistance ) {\n return any( bvec2( cutoffDistance == 0.0, lightDistance < cutoffDistance ) );\n}\nfloat punctualLightIntensityToIrradianceFactor( const in float lightDistance, const in float cutoffDistance, const in float decayExponent ) {\n if( decayExponent > 0.0 ) {\n#if defined ( PHYSICALLY_CORRECT_LIGHTS )\n float distanceFalloff = 1.0 / max( pow( lightDistance, decayExponent ), 0.01 );\n float maxDistanceCutoffFactor = pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) );\n return distanceFalloff * maxDistanceCutoffFactor;\n#else\n return pow( saturate( -lightDistance / cutoffDistance + 1.0 ), decayExponent );\n#endif\n }\n return 1.0;\n}\nvec3 BRDF_Diffuse_Lambert( const in vec3 diffuseColor ) {\n return RECIPROCAL_PI * diffuseColor;\n}\nvec3 F_Schlick( const in vec3 specularColor, const in float dotLH ) {\n float fresnel = exp2( ( -5.55473 * dotLH - 6.98316 ) * dotLH );\n return ( 1.0 - specularColor ) * fresnel + specularColor;\n}\nfloat G_GGX_Smith( const in float alpha, const in float dotNL, const in float dotNV ) {\n float a2 = pow2( alpha );\n float gl = dotNL + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\n float gv = dotNV + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\n return 1.0 / ( gl * gv );\n}\nfloat D_GGX( const in float alpha, const in float dotNH ) {\n float a2 = pow2( alpha );\n float denom = pow2( dotNH ) * ( a2 - 1.0 ) + 1.0;\n return RECIPROCAL_PI * a2 / pow2( denom );\n}\nvec3 BRDF_Specular_GGX( const in IncidentLight incidentLight, const in GeometricContext geometry, const in vec3 specularColor, const in float roughness ) {\n float alpha = pow2( roughness );\n vec3 halfDir = normalize( incidentLight.direction + geometry.viewDir );\n float dotNL = saturate( dot( geometry.normal, incidentLight.direction ) );\n float dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n float dotNH = saturate( dot( geometry.normal, halfDir ) );\n float dotLH = saturate( dot( incidentLight.direction, halfDir ) );\n vec3 F = F_Schlick( specularColor, dotLH );\n float G = G_GGX_Smith( alpha, dotNL, dotNV );\n float D = D_GGX( alpha, dotNH );\n return F * ( G * D );\n}\nvec3 BRDF_Specular_GGX_Environment( const in GeometricContext geometry, const in vec3 specularColor, const in float roughness ) {\n float dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n const vec4 c0 = vec4( - 1, - 0.0275, - 0.572, 0.022 );\n const vec4 c1 = vec4( 1, 0.0425, 1.04, - 0.04 );\n vec4 r = roughness * c0 + c1;\n float a004 = min( r.x * r.x, exp2( - 9.28 * dotNV ) ) * r.x + r.y;\n vec2 AB = vec2( -1.04, 1.04 ) * a004 + r.zw;\n return specularColor * AB.x + AB.y;\n}\nfloat G_BlinnPhong_Implicit( ) {\n return 0.25;\n}\nfloat D_BlinnPhong( const in float shininess, const in float dotNH ) {\n return RECIPROCAL_PI * ( shininess * 0.5 + 1.0 ) * pow( dotNH, shininess );\n}\nvec3 BRDF_Specular_BlinnPhong( const in IncidentLight incidentLight, const in GeometricContext geometry, const in vec3 specularColor, const in float shininess ) {\n vec3 halfDir = normalize( incidentLight.direction + geometry.viewDir );\n float dotNH = saturate( dot( geometry.normal, halfDir ) );\n float dotLH = saturate( dot( incidentLight.direction, halfDir ) );\n vec3 F = F_Schlick( specularColor, dotLH );\n float G = G_BlinnPhong_Implicit( );\n float D = D_BlinnPhong( shininess, dotNH );\n return F * ( G * D );\n}\nfloat GGXRoughnessToBlinnExponent( const in float ggxRoughness ) {\n return ( 2.0 / pow2( ggxRoughness + 0.0001 ) - 2.0 );\n}\nfloat BlinnExponentToGGXRoughness( const in float blinnExponent ) {\n return sqrt( 2.0 / ( blinnExponent + 2.0 ) );\n}\n";THREE.ShaderChunk.bumpmap_pars_fragment="#ifdef USE_BUMPMAP\n uniform sampler2D bumpMap;\n uniform float bumpScale;\n vec2 dHdxy_fwd() {\n vec2 dSTdx = dFdx( vUv );\n vec2 dSTdy = dFdy( vUv );\n float Hll = bumpScale * texture2D( bumpMap, vUv ).x;\n float dBx = bumpScale * texture2D( bumpMap, vUv + dSTdx ).x - Hll;\n float dBy = bumpScale * texture2D( bumpMap, vUv + dSTdy ).x - Hll;\n return vec2( dBx, dBy );\n }\n vec3 perturbNormalArb( vec3 surf_pos, vec3 surf_norm, vec2 dHdxy ) {\n vec3 vSigmaX = dFdx( surf_pos );\n vec3 vSigmaY = dFdy( surf_pos );\n vec3 vN = surf_norm;\n vec3 R1 = cross( vSigmaY, vN );\n vec3 R2 = cross( vN, vSigmaX );\n float fDet = dot( vSigmaX, R1 );\n vec3 vGrad = sign( fDet ) * ( dHdxy.x * R1 + dHdxy.y * R2 );\n return normalize( abs( fDet ) * surf_norm - vGrad );\n }\n#endif\n";THREE.ShaderChunk.color_fragment="#ifdef USE_COLOR\n diffuseColor.rgb *= vColor;\n#endif";THREE.ShaderChunk.color_pars_fragment="#ifdef USE_COLOR\n varying vec3 vColor;\n#endif\n";THREE.ShaderChunk.color_pars_vertex="#ifdef USE_COLOR\n varying vec3 vColor;\n#endif";THREE.ShaderChunk.color_vertex="#ifdef USE_COLOR\n vColor.xyz = color.xyz;\n#endif";THREE.ShaderChunk.common="#define PI 3.14159\n#define PI2 6.28318\n#define RECIPROCAL_PI 0.31830988618\n#define RECIPROCAL_PI2 0.15915494\n#define LOG2 1.442695\n#define EPSILON 1e-6\n#define saturate(a) clamp( a, 0.0, 1.0 )\n#define whiteCompliment(a) ( 1.0 - saturate( a ) )\nfloat pow2( const in float x ) { return x*x; }\nfloat pow3( const in float x ) { return x*x*x; }\nfloat pow4( const in float x ) { float x2 = x*x; return x2*x2; }\nfloat average( const in vec3 color ) { return dot( color, vec3( 0.3333 ) ); }\nstruct IncidentLight {\n vec3 color;\n vec3 direction;\n bool visible;\n};\nstruct ReflectedLight {\n vec3 directDiffuse;\n vec3 directSpecular;\n vec3 indirectDiffuse;\n vec3 indirectSpecular;\n};\nstruct GeometricContext {\n vec3 position;\n vec3 normal;\n vec3 viewDir;\n};\nvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n return normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n}\nvec3 inverseTransformDirection( in vec3 dir, in mat4 matrix ) {\n return normalize( ( vec4( dir, 0.0 ) * matrix ).xyz );\n}\nvec3 projectOnPlane(in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\n float distance = dot( planeNormal, point - pointOnPlane );\n return - distance * planeNormal + point;\n}\nfloat sideOfPlane( in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\n return sign( dot( point - pointOnPlane, planeNormal ) );\n}\nvec3 linePlaneIntersect( in vec3 pointOnLine, in vec3 lineDirection, in vec3 pointOnPlane, in vec3 planeNormal ) {\n return lineDirection * ( dot( planeNormal, pointOnPlane - pointOnLine ) / dot( planeNormal, lineDirection ) ) + pointOnLine;\n}\n";THREE.ShaderChunk.cube_uv_reflection_fragment="#ifdef ENVMAP_TYPE_CUBE_UV\nconst float cubeUV_textureSize = 1024.0;\nint getFaceFromDirection(vec3 direction) {\n vec3 absDirection = abs(direction);\n int face = -1;\n if( absDirection.x > absDirection.z ) {\n if(absDirection.x > absDirection.y )\n face = direction.x > 0.0 ? 0 : 3;\n else\n face = direction.y > 0.0 ? 1 : 4;\n }\n else {\n if(absDirection.z > absDirection.y )\n face = direction.z > 0.0 ? 2 : 5;\n else\n face = direction.y > 0.0 ? 1 : 4;\n }\n return face;\n}\nconst float cubeUV_maxLods1 = log2(cubeUV_textureSize*0.25) - 1.0;\nconst float cubeUV_rangeClamp = exp2((6.0 - 1.0) * 2.0);\nvec2 MipLevelInfo( vec3 vec, float roughnessLevel, float roughness ) {\n float scale = exp2(cubeUV_maxLods1 - roughnessLevel);\n float dxRoughness = dFdx(roughness);\n float dyRoughness = dFdy(roughness);\n vec3 dx = dFdx( vec * scale * dxRoughness );\n vec3 dy = dFdy( vec * scale * dyRoughness );\n float d = max( dot( dx, dx ), dot( dy, dy ) );\n d = clamp(d, 1.0, cubeUV_rangeClamp);\n float mipLevel = 0.5 * log2(d);\n return vec2(floor(mipLevel), fract(mipLevel));\n}\nconst float cubeUV_maxLods2 = log2(cubeUV_textureSize*0.25) - 2.0;\nconst float cubeUV_rcpTextureSize = 1.0 / cubeUV_textureSize;\nvec2 getCubeUV(vec3 direction, float roughnessLevel, float mipLevel) {\n mipLevel = roughnessLevel > cubeUV_maxLods2 - 3.0 ? 0.0 : mipLevel;\n float a = 16.0 * cubeUV_rcpTextureSize;\n vec2 exp2_packed = exp2( vec2( roughnessLevel, mipLevel ) );\n vec2 rcp_exp2_packed = vec2( 1.0 ) / exp2_packed;\n float powScale = exp2_packed.x * exp2_packed.y;\n float scale = rcp_exp2_packed.x * rcp_exp2_packed.y * 0.25;\n float mipOffset = 0.75*(1.0 - rcp_exp2_packed.y) * rcp_exp2_packed.x;\n bool bRes = mipLevel == 0.0;\n scale = bRes && (scale < a) ? a : scale;\n vec3 r;\n vec2 offset;\n int face = getFaceFromDirection(direction);\n float rcpPowScale = 1.0 / powScale;\n if( face == 0) {\n r = vec3(direction.x, -direction.z, direction.y);\n offset = vec2(0.0+mipOffset,0.75 * rcpPowScale);\n offset.y = bRes && (offset.y < 2.0*a) ? a : offset.y;\n }\n else if( face == 1) {\n r = vec3(direction.y, direction.x, direction.z);\n offset = vec2(scale+mipOffset, 0.75 * rcpPowScale);\n offset.y = bRes && (offset.y < 2.0*a) ? a : offset.y;\n }\n else if( face == 2) {\n r = vec3(direction.z, direction.x, direction.y);\n offset = vec2(2.0*scale+mipOffset, 0.75 * rcpPowScale);\n offset.y = bRes && (offset.y < 2.0*a) ? a : offset.y;\n }\n else if( face == 3) {\n r = vec3(direction.x, direction.z, direction.y);\n offset = vec2(0.0+mipOffset,0.5 * rcpPowScale);\n offset.y = bRes && (offset.y < 2.0*a) ? 0.0 : offset.y;\n }\n else if( face == 4) {\n r = vec3(direction.y, direction.x, -direction.z);\n offset = vec2(scale+mipOffset, 0.5 * rcpPowScale);\n offset.y = bRes && (offset.y < 2.0*a) ? 0.0 : offset.y;\n }\n else {\n r = vec3(direction.z, -direction.x, direction.y);\n offset = vec2(2.0*scale+mipOffset, 0.5 * rcpPowScale);\n offset.y = bRes && (offset.y < 2.0*a) ? 0.0 : offset.y;\n }\n r = normalize(r);\n float texelOffset = 0.5 * cubeUV_rcpTextureSize;\n vec2 s = ( r.yz / abs( r.x ) + vec2( 1.0 ) ) * 0.5;\n vec2 base = offset + vec2( texelOffset );\n return base + s * ( scale - 2.0 * texelOffset );\n}\nconst float cubeUV_maxLods3 = log2(cubeUV_textureSize*0.25) - 3.0;\nvec4 textureCubeUV(vec3 reflectedDirection, float roughness ) {\n float roughnessVal = roughness* cubeUV_maxLods3;\n float r1 = floor(roughnessVal);\n float r2 = r1 + 1.0;\n float t = fract(roughnessVal);\n vec2 mipInfo = MipLevelInfo(reflectedDirection, r1, roughness);\n float s = mipInfo.y;\n float level0 = mipInfo.x;\n float level1 = level0 + 1.0;\n level1 = level1 > 5.0 ? 5.0 : level1;\n level0 += min( floor( s + 0.5 ), 5.0 );\n vec2 uv_10 = getCubeUV(reflectedDirection, r1, level0);\n vec4 color10 = envMapTexelToLinear(texture2D(envMap, uv_10));\n vec2 uv_20 = getCubeUV(reflectedDirection, r2, level0);\n vec4 color20 = envMapTexelToLinear(texture2D(envMap, uv_20));\n vec4 result = mix(color10, color20, t);\n return vec4(result.rgb, 1.0);\n}\n#endif\n";THREE.ShaderChunk.defaultnormal_vertex="#ifdef FLIP_SIDED\n objectNormal = -objectNormal;\n#endif\nvec3 transformedNormal = normalMatrix * objectNormal;\n";THREE.ShaderChunk.displacementmap_vertex="#ifdef USE_DISPLACEMENTMAP\n transformed += normal * ( texture2D( displacementMap, uv ).x * displacementScale + displacementBias );\n#endif\n";THREE.ShaderChunk.displacementmap_pars_vertex="#ifdef USE_DISPLACEMENTMAP\n uniform sampler2D displacementMap;\n uniform float displacementScale;\n uniform float displacementBias;\n#endif\n";THREE.ShaderChunk.emissivemap_fragment="#ifdef USE_EMISSIVEMAP\n vec4 emissiveColor = texture2D( emissiveMap, vUv );\n emissiveColor.rgb = emissiveMapTexelToLinear( emissiveColor ).rgb;\n totalEmissiveRadiance *= emissiveColor.rgb;\n#endif\n";THREE.ShaderChunk.emissivemap_pars_fragment="#ifdef USE_EMISSIVEMAP\n uniform sampler2D emissiveMap;\n#endif\n";THREE.ShaderChunk.encodings_pars_fragment="\nvec4 LinearToLinear( in vec4 value ) {\n return value;\n}\nvec4 GammaToLinear( in vec4 value, in float gammaFactor ) {\n return vec4( pow( value.xyz, vec3( gammaFactor ) ), value.w );\n}\nvec4 LinearToGamma( in vec4 value, in float gammaFactor ) {\n return vec4( pow( value.xyz, vec3( 1.0 / gammaFactor ) ), value.w );\n}\nvec4 sRGBToLinear( in vec4 value ) {\n return vec4( mix( pow( value.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), value.rgb * 0.0773993808, vec3( lessThanEqual( value.rgb, vec3( 0.04045 ) ) ) ), value.w );\n}\nvec4 LinearTosRGB( in vec4 value ) {\n return vec4( mix( pow( value.rgb, vec3( 0.41666 ) ) * 1.055 - vec3( 0.055 ), value.rgb * 12.92, vec3( lessThanEqual( value.rgb, vec3( 0.0031308 ) ) ) ), value.w );\n}\nvec4 RGBEToLinear( in vec4 value ) {\n return vec4( value.rgb * exp2( value.a * 255.0 - 128.0 ), 1.0 );\n}\nvec4 LinearToRGBE( in vec4 value ) {\n float maxComponent = max( max( value.r, value.g ), value.b );\n float fExp = clamp( ceil( log2( maxComponent ) ), -128.0, 127.0 );\n return vec4( value.rgb / exp2( fExp ), ( fExp + 128.0 ) / 255.0 );\n}\nvec4 RGBMToLinear( in vec4 value, in float maxRange ) {\n return vec4( value.xyz * value.w * maxRange, 1.0 );\n}\nvec4 LinearToRGBM( in vec4 value, in float maxRange ) {\n float maxRGB = max( value.x, max( value.g, value.b ) );\n float M = clamp( maxRGB / maxRange, 0.0, 1.0 );\n M = ceil( M * 255.0 ) / 255.0;\n return vec4( value.rgb / ( M * maxRange ), M );\n}\nvec4 RGBDToLinear( in vec4 value, in float maxRange ) {\n return vec4( value.rgb * ( ( maxRange / 255.0 ) / value.a ), 1.0 );\n}\nvec4 LinearToRGBD( in vec4 value, in float maxRange ) {\n float maxRGB = max( value.x, max( value.g, value.b ) );\n float D = max( maxRange / maxRGB, 1.0 );\n D = min( floor( D ) / 255.0, 1.0 );\n return vec4( value.rgb * ( D * ( 255.0 / maxRange ) ), D );\n}\nconst mat3 cLogLuvM = mat3( 0.2209, 0.3390, 0.4184, 0.1138, 0.6780, 0.7319, 0.0102, 0.1130, 0.2969 );\nvec4 LinearToLogLuv( in vec4 value ) {\n vec3 Xp_Y_XYZp = value.rgb * cLogLuvM;\n Xp_Y_XYZp = max(Xp_Y_XYZp, vec3(1e-6, 1e-6, 1e-6));\n vec4 vResult;\n vResult.xy = Xp_Y_XYZp.xy / Xp_Y_XYZp.z;\n float Le = 2.0 * log2(Xp_Y_XYZp.y) + 127.0;\n vResult.w = fract(Le);\n vResult.z = (Le - (floor(vResult.w*255.0))/255.0)/255.0;\n return vResult;\n}\nconst mat3 cLogLuvInverseM = mat3( 6.0014, -2.7008, -1.7996, -1.3320, 3.1029, -5.7721, 0.3008, -1.0882, 5.6268 );\nvec4 LogLuvToLinear( in vec4 value ) {\n float Le = value.z * 255.0 + value.w;\n vec3 Xp_Y_XYZp;\n Xp_Y_XYZp.y = exp2((Le - 127.0) / 2.0);\n Xp_Y_XYZp.z = Xp_Y_XYZp.y / value.y;\n Xp_Y_XYZp.x = value.x * Xp_Y_XYZp.z;\n vec3 vRGB = Xp_Y_XYZp.rgb * cLogLuvInverseM;\n return vec4( max(vRGB, 0.0), 1.0 );\n}\n";THREE.ShaderChunk.encodings_fragment=" gl_FragColor = linearToOutputTexel( gl_FragColor );\n";THREE.ShaderChunk.envmap_fragment="#ifdef USE_ENVMAP\n #if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\n vec3 cameraToVertex = normalize( vWorldPosition - cameraPosition );\n vec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n #ifdef ENVMAP_MODE_REFLECTION\n vec3 reflectVec = reflect( cameraToVertex, worldNormal );\n #else\n vec3 reflectVec = refract( cameraToVertex, worldNormal, refractionRatio );\n #endif\n #else\n vec3 reflectVec = vReflect;\n #endif\n #ifdef DOUBLE_SIDED\n float flipNormal = ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n #else\n float flipNormal = 1.0;\n #endif\n #ifdef ENVMAP_TYPE_CUBE\n vec4 envColor = textureCube( envMap, flipNormal * vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\n #elif defined( ENVMAP_TYPE_EQUIREC )\n vec2 sampleUV;\n sampleUV.y = saturate( flipNormal * reflectVec.y * 0.5 + 0.5 );\n sampleUV.x = atan( flipNormal * reflectVec.z, flipNormal * reflectVec.x ) * RECIPROCAL_PI2 + 0.5;\n vec4 envColor = texture2D( envMap, sampleUV );\n #elif defined( ENVMAP_TYPE_SPHERE )\n vec3 reflectView = flipNormal * normalize((viewMatrix * vec4( reflectVec, 0.0 )).xyz + vec3(0.0,0.0,1.0));\n vec4 envColor = texture2D( envMap, reflectView.xy * 0.5 + 0.5 );\n #endif\n envColor = envMapTexelToLinear( envColor );\n #ifdef ENVMAP_BLENDING_MULTIPLY\n outgoingLight = mix( outgoingLight, outgoingLight * envColor.xyz, specularStrength * reflectivity );\n #elif defined( ENVMAP_BLENDING_MIX )\n outgoingLight = mix( outgoingLight, envColor.xyz, specularStrength * reflectivity );\n #elif defined( ENVMAP_BLENDING_ADD )\n outgoingLight += envColor.xyz * specularStrength * reflectivity;\n #endif\n#endif\n";THREE.ShaderChunk.envmap_pars_fragment="#if defined( USE_ENVMAP ) || defined( STANDARD )\n uniform float reflectivity;\n uniform float envMapIntenstiy;\n#endif\n#ifdef USE_ENVMAP\n #ifdef ENVMAP_TYPE_CUBE\n uniform samplerCube envMap;\n #else\n uniform sampler2D envMap;\n #endif\n uniform float flipEnvMap;\n #if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) || defined( STANDARD )\n uniform float refractionRatio;\n #else\n varying vec3 vReflect;\n #endif\n#endif\n";THREE.ShaderChunk.envmap_pars_vertex="#if defined( USE_ENVMAP ) && ! defined( USE_BUMPMAP ) && ! defined( USE_NORMALMAP ) && ! defined( PHONG ) && ! defined( STANDARD )\n varying vec3 vReflect;\n uniform float refractionRatio;\n#endif\n";THREE.ShaderChunk.envmap_vertex="#if defined( USE_ENVMAP ) && ! defined( USE_BUMPMAP ) && ! defined( USE_NORMALMAP ) && ! defined( PHONG ) && ! defined( STANDARD )\n vec3 cameraToVertex = normalize( worldPosition.xyz - cameraPosition );\n vec3 worldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n #ifdef ENVMAP_MODE_REFLECTION\n vReflect = reflect( cameraToVertex, worldNormal );\n #else\n vReflect = refract( cameraToVertex, worldNormal, refractionRatio );\n #endif\n#endif\n";THREE.ShaderChunk.fog_fragment="#ifdef USE_FOG\n #ifdef USE_LOGDEPTHBUF_EXT\n float depth = gl_FragDepthEXT / gl_FragCoord.w;\n #else\n float depth = gl_FragCoord.z / gl_FragCoord.w;\n #endif\n #ifdef FOG_EXP2\n float fogFactor = whiteCompliment( exp2( - fogDensity * fogDensity * depth * depth * LOG2 ) );\n #else\n float fogFactor = smoothstep( fogNear, fogFar, depth );\n #endif\n gl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );\n#endif\n";THREE.ShaderChunk.fog_pars_fragment="#ifdef USE_FOG\n uniform vec3 fogColor;\n #ifdef FOG_EXP2\n uniform float fogDensity;\n #else\n uniform float fogNear;\n uniform float fogFar;\n #endif\n#endif";THREE.ShaderChunk.lightmap_fragment="#ifdef USE_LIGHTMAP\n reflectedLight.indirectDiffuse += PI * texture2D( lightMap, vUv2 ).xyz * lightMapIntensity;\n#endif\n";THREE.ShaderChunk.lightmap_pars_fragment="#ifdef USE_LIGHTMAP\n uniform sampler2D lightMap;\n uniform float lightMapIntensity;\n#endif";THREE.ShaderChunk.lights_lambert_vertex="vec3 diffuse = vec3( 1.0 );\nGeometricContext geometry;\ngeometry.position = mvPosition.xyz;\ngeometry.normal = normalize( transformedNormal );\ngeometry.viewDir = normalize( -mvPosition.xyz );\nGeometricContext backGeometry;\nbackGeometry.position = geometry.position;\nbackGeometry.normal = -geometry.normal;\nbackGeometry.viewDir = geometry.viewDir;\nvLightFront = vec3( 0.0 );\n#ifdef DOUBLE_SIDED\n vLightBack = vec3( 0.0 );\n#endif\nIncidentLight directLight;\nfloat dotNL;\nvec3 directLightColor_Diffuse;\n#if NUM_POINT_LIGHTS > 0\n for ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n directLight = getPointDirectLightIrradiance( pointLights[ i ], geometry );\n dotNL = dot( geometry.normal, directLight.direction );\n directLightColor_Diffuse = PI * directLight.color;\n vLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n #ifdef DOUBLE_SIDED\n vLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n #endif\n }\n#endif\n#if NUM_SPOT_LIGHTS > 0\n for ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n directLight = getSpotDirectLightIrradiance( spotLights[ i ], geometry );\n dotNL = dot( geometry.normal, directLight.direction );\n directLightColor_Diffuse = PI * directLight.color;\n vLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n #ifdef DOUBLE_SIDED\n vLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n #endif\n }\n#endif\n#if NUM_DIR_LIGHTS > 0\n for ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n directLight = getDirectionalDirectLightIrradiance( directionalLights[ i ], geometry );\n dotNL = dot( geometry.normal, directLight.direction );\n directLightColor_Diffuse = PI * directLight.color;\n vLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n #ifdef DOUBLE_SIDED\n vLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n #endif\n }\n#endif\n#if NUM_HEMI_LIGHTS > 0\n for ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n vLightFront += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\n #ifdef DOUBLE_SIDED\n vLightBack += getHemisphereLightIrradiance( hemisphereLights[ i ], backGeometry );\n #endif\n }\n#endif\n";THREE.ShaderChunk.lights_pars="uniform vec3 ambientLightColor;\nvec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) {\n vec3 irradiance = ambientLightColor;\n #ifndef PHYSICALLY_CORRECT_LIGHTS\n irradiance *= PI;\n #endif\n return irradiance;\n}\n#if NUM_DIR_LIGHTS > 0\n struct DirectionalLight {\n vec3 direction;\n vec3 color;\n int shadow;\n float shadowBias;\n float shadowRadius;\n vec2 shadowMapSize;\n };\n uniform DirectionalLight directionalLights[ NUM_DIR_LIGHTS ];\n IncidentLight getDirectionalDirectLightIrradiance( const in DirectionalLight directionalLight, const in GeometricContext geometry ) {\n IncidentLight directLight;\n directLight.color = directionalLight.color;\n directLight.direction = directionalLight.direction;\n directLight.visible = true;\n return directLight;\n }\n#endif\n#if NUM_POINT_LIGHTS > 0\n struct PointLight {\n vec3 position;\n vec3 color;\n float distance;\n float decay;\n int shadow;\n float shadowBias;\n float shadowRadius;\n vec2 shadowMapSize;\n };\n uniform PointLight pointLights[ NUM_POINT_LIGHTS ];\n IncidentLight getPointDirectLightIrradiance( const in PointLight pointLight, const in GeometricContext geometry ) {\n IncidentLight directLight;\n vec3 lVector = pointLight.position - geometry.position;\n directLight.direction = normalize( lVector );\n float lightDistance = length( lVector );\n if ( testLightInRange( lightDistance, pointLight.distance ) ) {\n directLight.color = pointLight.color;\n directLight.color *= punctualLightIntensityToIrradianceFactor( lightDistance, pointLight.distance, pointLight.decay );\n directLight.visible = true;\n } else {\n directLight.color = vec3( 0.0 );\n directLight.visible = false;\n }\n return directLight;\n }\n#endif\n#if NUM_SPOT_LIGHTS > 0\n struct SpotLight {\n vec3 position;\n vec3 direction;\n vec3 color;\n float distance;\n float decay;\n float coneCos;\n float penumbraCos;\n int shadow;\n float shadowBias;\n float shadowRadius;\n vec2 shadowMapSize;\n };\n uniform SpotLight spotLights[ NUM_SPOT_LIGHTS ];\n IncidentLight getSpotDirectLightIrradiance( const in SpotLight spotLight, const in GeometricContext geometry ) {\n IncidentLight directLight;\n vec3 lVector = spotLight.position - geometry.position;\n directLight.direction = normalize( lVector );\n float lightDistance = length( lVector );\n float angleCos = dot( directLight.direction, spotLight.direction );\n if ( all( bvec2( angleCos > spotLight.coneCos, testLightInRange( lightDistance, spotLight.distance ) ) ) ) {\n float spotEffect = smoothstep( spotLight.coneCos, spotLight.penumbraCos, angleCos );\n directLight.color = spotLight.color;\n directLight.color *= spotEffect * punctualLightIntensityToIrradianceFactor( lightDistance, spotLight.distance, spotLight.decay );\n directLight.visible = true;\n } else {\n directLight.color = vec3( 0.0 );\n directLight.visible = false;\n }\n return directLight;\n }\n#endif\n#if NUM_HEMI_LIGHTS > 0\n struct HemisphereLight {\n vec3 direction;\n vec3 skyColor;\n vec3 groundColor;\n };\n uniform HemisphereLight hemisphereLights[ NUM_HEMI_LIGHTS ];\n vec3 getHemisphereLightIrradiance( const in HemisphereLight hemiLight, const in GeometricContext geometry ) {\n float dotNL = dot( geometry.normal, hemiLight.direction );\n float hemiDiffuseWeight = 0.5 * dotNL + 0.5;\n vec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight );\n #ifndef PHYSICALLY_CORRECT_LIGHTS\n irradiance *= PI;\n #endif\n return irradiance;\n }\n#endif\n#if defined( USE_ENVMAP ) && defined( STANDARD )\n vec3 getLightProbeIndirectIrradiance( const in GeometricContext geometry, const in int maxMIPLevel ) {\n #ifdef DOUBLE_SIDED\n float flipNormal = ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n #else\n float flipNormal = 1.0;\n #endif\n vec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );\n #ifdef ENVMAP_TYPE_CUBE\n vec3 queryVec = flipNormal * vec3( flipEnvMap * worldNormal.x, worldNormal.yz );\n #ifdef TEXTURE_LOD_EXT\n vec4 envMapColor = textureCubeLodEXT( envMap, queryVec, float( maxMIPLevel ) );\n #else\n vec4 envMapColor = textureCube( envMap, queryVec, float( maxMIPLevel ) );\n #endif\n #elif defined( ENVMAP_TYPE_CUBE_UV )\n vec3 queryVec = flipNormal * vec3( flipEnvMap * worldNormal.x, worldNormal.yz );\n vec4 envMapColor = textureCubeUV( queryVec, 1.0 );\n #else\n vec4 envMapColor = vec4( 0.0 );\n #endif\n envMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n return PI * envMapColor.rgb * envMapIntensity;\n }\n float getSpecularMIPLevel( const in float blinnShininessExponent, const in int maxMIPLevel ) {\n float maxMIPLevelScalar = float( maxMIPLevel );\n float desiredMIPLevel = maxMIPLevelScalar - 0.79248 - 0.5 * log2( pow2( blinnShininessExponent ) + 1.0 );\n return clamp( desiredMIPLevel, 0.0, maxMIPLevelScalar );\n }\n vec3 getLightProbeIndirectRadiance( const in GeometricContext geometry, const in float blinnShininessExponent, const in int maxMIPLevel ) {\n #ifdef ENVMAP_MODE_REFLECTION\n vec3 reflectVec = reflect( -geometry.viewDir, geometry.normal );\n #else\n vec3 reflectVec = refract( -geometry.viewDir, geometry.normal, refractionRatio );\n #endif\n #ifdef DOUBLE_SIDED\n float flipNormal = ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n #else\n float flipNormal = 1.0;\n #endif\n reflectVec = inverseTransformDirection( reflectVec, viewMatrix );\n float specularMIPLevel = getSpecularMIPLevel( blinnShininessExponent, maxMIPLevel );\n #ifdef ENVMAP_TYPE_CUBE\n vec3 queryReflectVec = flipNormal * vec3( flipEnvMap * reflectVec.x, reflectVec.yz );\n #ifdef TEXTURE_LOD_EXT\n vec4 envMapColor = textureCubeLodEXT( envMap, queryReflectVec, specularMIPLevel );\n #else\n vec4 envMapColor = textureCube( envMap, queryReflectVec, specularMIPLevel );\n #endif\n #elif defined( ENVMAP_TYPE_CUBE_UV )\n vec3 queryReflectVec = flipNormal * vec3( flipEnvMap * reflectVec.x, reflectVec.yz );\n vec4 envMapColor = textureCubeUV(queryReflectVec, BlinnExponentToGGXRoughness(blinnShininessExponent));\n #elif defined( ENVMAP_TYPE_EQUIREC )\n vec2 sampleUV;\n sampleUV.y = saturate( flipNormal * reflectVec.y * 0.5 + 0.5 );\n sampleUV.x = atan( flipNormal * reflectVec.z, flipNormal * reflectVec.x ) * RECIPROCAL_PI2 + 0.5;\n #ifdef TEXTURE_LOD_EXT\n vec4 envMapColor = texture2DLodEXT( envMap, sampleUV, specularMIPLevel );\n #else\n vec4 envMapColor = texture2D( envMap, sampleUV, specularMIPLevel );\n #endif\n #elif defined( ENVMAP_TYPE_SPHERE )\n vec3 reflectView = flipNormal * normalize((viewMatrix * vec4( reflectVec, 0.0 )).xyz + vec3(0.0,0.0,1.0));\n #ifdef TEXTURE_LOD_EXT\n vec4 envMapColor = texture2DLodEXT( envMap, reflectView.xy * 0.5 + 0.5, specularMIPLevel );\n #else\n vec4 envMapColor = texture2D( envMap, reflectView.xy * 0.5 + 0.5, specularMIPLevel );\n #endif\n #endif\n envMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n return envMapColor.rgb * envMapIntensity;\n }\n#endif\n";THREE.ShaderChunk.lights_phong_fragment="BlinnPhongMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;\nmaterial.specularColor = specular;\nmaterial.specularShininess = shininess;\nmaterial.specularStrength = specularStrength;\n";THREE.ShaderChunk.lights_phong_pars_fragment="#ifdef USE_ENVMAP\n varying vec3 vWorldPosition;\n#endif\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n varying vec3 vNormal;\n#endif\nstruct BlinnPhongMaterial {\n vec3 diffuseColor;\n vec3 specularColor;\n float specularShininess;\n float specularStrength;\n};\nvoid RE_Direct_BlinnPhong( const in IncidentLight directLight, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n float dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n vec3 irradiance = dotNL * directLight.color;\n #ifndef PHYSICALLY_CORRECT_LIGHTS\n irradiance *= PI;\n #endif\n reflectedLight.directDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n reflectedLight.directSpecular += irradiance * BRDF_Specular_BlinnPhong( directLight, geometry, material.specularColor, material.specularShininess ) * material.specularStrength;\n}\nvoid RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n reflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\n#define RE_Direct RE_Direct_BlinnPhong\n#define RE_IndirectDiffuse RE_IndirectDiffuse_BlinnPhong\n#define Material_LightProbeLOD( material ) (0)\n";THREE.ShaderChunk.lights_phong_pars_vertex="#ifdef USE_ENVMAP\n varying vec3 vWorldPosition;\n#endif\n";THREE.ShaderChunk.lights_phong_vertex="#ifdef USE_ENVMAP\n vWorldPosition = worldPosition.xyz;\n#endif\n";THREE.ShaderChunk.lights_standard_fragment="StandardMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor );\nmaterial.specularRoughness = clamp( roughnessFactor, 0.04, 1.0 );\nmaterial.specularColor = mix( vec3( 0.04 ), diffuseColor.rgb, metalnessFactor );\n";THREE.ShaderChunk.lights_standard_pars_fragment="struct StandardMaterial {\n vec3 diffuseColor;\n float specularRoughness;\n vec3 specularColor;\n};\nvoid RE_Direct_Standard( const in IncidentLight directLight, const in GeometricContext geometry, const in StandardMaterial material, inout ReflectedLight reflectedLight ) {\n float dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n vec3 irradiance = dotNL * directLight.color;\n #ifndef PHYSICALLY_CORRECT_LIGHTS\n irradiance *= PI;\n #endif\n reflectedLight.directDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n reflectedLight.directSpecular += irradiance * BRDF_Specular_GGX( directLight, geometry, material.specularColor, material.specularRoughness );\n}\nvoid RE_IndirectDiffuse_Standard( const in vec3 irradiance, const in GeometricContext geometry, const in StandardMaterial material, inout ReflectedLight reflectedLight ) {\n reflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectSpecular_Standard( const in vec3 radiance, const in GeometricContext geometry, const in StandardMaterial material, inout ReflectedLight reflectedLight ) {\n reflectedLight.indirectSpecular += radiance * BRDF_Specular_GGX_Environment( geometry, material.specularColor, material.specularRoughness );\n}\n#define RE_Direct RE_Direct_Standard\n#define RE_IndirectDiffuse RE_IndirectDiffuse_Standard\n#define RE_IndirectSpecular RE_IndirectSpecular_Standard\n#define Material_BlinnShininessExponent( material ) GGXRoughnessToBlinnExponent( material.specularRoughness )\nfloat computeSpecularOcclusion( const in float dotNV, const in float ambientOcclusion, const in float roughness ) {\n return saturate( pow( dotNV + ambientOcclusion, exp2( - 16.0 * roughness - 1.0 ) ) - 1.0 + ambientOcclusion );\n}\n"; + hourMinSec: function(t) { + var hour, min, sec; + if (t == null) { + t = 0; + } + hour = (t / 3600) | 0; + if (hour < 10) { + hour = "0" + hour; + } + t %= 3600; + min = (t / 60) | 0; + if (min < 10) { + min = "0" + min; + } + sec = (t % 60 | 0).toFixed(); + if (sec < 10) { + sec = "0" + sec; + } + return "" + hour + ":" + min + ":" + sec; + }, -THREE.ShaderChunk.lights_template="\nGeometricContext geometry;\ngeometry.position = - vViewPosition;\ngeometry.normal = normal;\ngeometry.viewDir = normalize( vViewPosition );\nIncidentLight directLight;\n#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct )\n PointLight pointLight;\n for ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n pointLight = pointLights[ i ];\n directLight = getPointDirectLightIrradiance( pointLight, geometry );\n #ifdef USE_SHADOWMAP\n directLight.color *= all( bvec2( pointLight.shadow, directLight.visible ) ) ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ] ) : 1.0;\n #endif\n RE_Direct( directLight, geometry, material, reflectedLight );\n }\n#endif\n#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct )\n SpotLight spotLight;\n for ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n spotLight = spotLights[ i ];\n directLight = getSpotDirectLightIrradiance( spotLight, geometry );\n #ifdef USE_SHADOWMAP\n directLight.color *= all( bvec2( spotLight.shadow, directLight.visible ) ) ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n #endif\n RE_Direct( directLight, geometry, material, reflectedLight );\n }\n#endif\n#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct )\n DirectionalLight directionalLight;\n for ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n directionalLight = directionalLights[ i ];\n directLight = getDirectionalDirectLightIrradiance( directionalLight, geometry );\n #ifdef USE_SHADOWMAP\n directLight.color *= all( bvec2( directionalLight.shadow, directLight.visible ) ) ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n #endif\n RE_Direct( directLight, geometry, material, reflectedLight );\n }\n#endif\n#if defined( RE_IndirectDiffuse )\n vec3 irradiance = getAmbientLightIrradiance( ambientLightColor );\n #ifdef USE_LIGHTMAP\n vec3 lightMapIrradiance = texture2D( lightMap, vUv2 ).xyz * lightMapIntensity;\n #ifndef PHYSICALLY_CORRECT_LIGHTS\n lightMapIrradiance *= PI;\n #endif\n irradiance += lightMapIrradiance;\n #endif\n #if ( NUM_HEMI_LIGHTS > 0 )\n for ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n irradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\n }\n #endif\n #if defined( USE_ENVMAP ) && defined( STANDARD ) && defined( ENVMAP_TYPE_CUBE_UV )\n irradiance += getLightProbeIndirectIrradiance( geometry, 8 );\n #endif\n RE_IndirectDiffuse( irradiance, geometry, material, reflectedLight );\n#endif\n#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )\n vec3 radiance = getLightProbeIndirectRadiance( geometry, Material_BlinnShininessExponent( material ), 8 );\n RE_IndirectSpecular( radiance, geometry, material, reflectedLight );\n#endif\n";THREE.ShaderChunk.logdepthbuf_fragment="#if defined(USE_LOGDEPTHBUF) && defined(USE_LOGDEPTHBUF_EXT)\n gl_FragDepthEXT = log2(vFragDepth) * logDepthBufFC * 0.5;\n#endif";THREE.ShaderChunk.logdepthbuf_pars_fragment="#ifdef USE_LOGDEPTHBUF\n uniform float logDepthBufFC;\n #ifdef USE_LOGDEPTHBUF_EXT\n varying float vFragDepth;\n #endif\n#endif\n";THREE.ShaderChunk.logdepthbuf_pars_vertex="#ifdef USE_LOGDEPTHBUF\n #ifdef USE_LOGDEPTHBUF_EXT\n varying float vFragDepth;\n #endif\n uniform float logDepthBufFC;\n#endif";THREE.ShaderChunk.logdepthbuf_vertex="#ifdef USE_LOGDEPTHBUF\n gl_Position.z = log2(max( EPSILON, gl_Position.w + 1.0 )) * logDepthBufFC;\n #ifdef USE_LOGDEPTHBUF_EXT\n vFragDepth = 1.0 + gl_Position.w;\n #else\n gl_Position.z = (gl_Position.z - 1.0) * gl_Position.w;\n #endif\n#endif\n";THREE.ShaderChunk.map_fragment="#ifdef USE_MAP\n vec4 texelColor = texture2D( map, vUv );\n texelColor = mapTexelToLinear( texelColor );\n diffuseColor *= texelColor;\n#endif\n";THREE.ShaderChunk.map_pars_fragment="#ifdef USE_MAP\n uniform sampler2D map;\n#endif\n";THREE.ShaderChunk.map_particle_fragment="#ifdef USE_MAP\n vec4 mapTexel = texture2D( map, vec2( gl_PointCoord.x, 1.0 - gl_PointCoord.y ) * offsetRepeat.zw + offsetRepeat.xy );\n diffuseColor *= mapTexelToLinear( mapTexel );\n#endif\n";THREE.ShaderChunk.map_particle_pars_fragment="#ifdef USE_MAP\n uniform vec4 offsetRepeat;\n uniform sampler2D map;\n#endif\n";THREE.ShaderChunk.metalnessmap_fragment="float metalnessFactor = metalness;\n#ifdef USE_METALNESSMAP\n vec4 texelMetalness = texture2D( metalnessMap, vUv );\n metalnessFactor *= texelMetalness.r;\n#endif\n";THREE.ShaderChunk.metalnessmap_pars_fragment="#ifdef USE_METALNESSMAP\n uniform sampler2D metalnessMap;\n#endif";THREE.ShaderChunk.morphnormal_vertex="#ifdef USE_MORPHNORMALS\n objectNormal += ( morphNormal0 - normal ) * morphTargetInfluences[ 0 ];\n objectNormal += ( morphNormal1 - normal ) * morphTargetInfluences[ 1 ];\n objectNormal += ( morphNormal2 - normal ) * morphTargetInfluences[ 2 ];\n objectNormal += ( morphNormal3 - normal ) * morphTargetInfluences[ 3 ];\n#endif\n";THREE.ShaderChunk.morphtarget_pars_vertex="#ifdef USE_MORPHTARGETS\n #ifndef USE_MORPHNORMALS\n uniform float morphTargetInfluences[ 8 ];\n #else\n uniform float morphTargetInfluences[ 4 ];\n #endif\n#endif";THREE.ShaderChunk.morphtarget_vertex="#ifdef USE_MORPHTARGETS\n transformed += ( morphTarget0 - position ) * morphTargetInfluences[ 0 ];\n transformed += ( morphTarget1 - position ) * morphTargetInfluences[ 1 ];\n transformed += ( morphTarget2 - position ) * morphTargetInfluences[ 2 ];\n transformed += ( morphTarget3 - position ) * morphTargetInfluences[ 3 ];\n #ifndef USE_MORPHNORMALS\n transformed += ( morphTarget4 - position ) * morphTargetInfluences[ 4 ];\n transformed += ( morphTarget5 - position ) * morphTargetInfluences[ 5 ];\n transformed += ( morphTarget6 - position ) * morphTargetInfluences[ 6 ];\n transformed += ( morphTarget7 - position ) * morphTargetInfluences[ 7 ];\n #endif\n#endif\n";THREE.ShaderChunk.normal_fragment="#ifdef FLAT_SHADED\n vec3 fdx = vec3( dFdx( vViewPosition.x ), dFdx( vViewPosition.y ), dFdx( vViewPosition.z ) );\n vec3 fdy = vec3( dFdy( vViewPosition.x ), dFdy( vViewPosition.y ), dFdy( vViewPosition.z ) );\n vec3 normal = normalize( cross( fdx, fdy ) );\n#else\n vec3 normal = normalize( vNormal );\n #ifdef DOUBLE_SIDED\n normal = normal * ( -1.0 + 2.0 * float( gl_FrontFacing ) );\n #endif\n#endif\n#ifdef USE_NORMALMAP\n normal = perturbNormal2Arb( -vViewPosition, normal );\n#elif defined( USE_BUMPMAP )\n normal = perturbNormalArb( -vViewPosition, normal, dHdxy_fwd() );\n#endif\n";THREE.ShaderChunk.normalmap_pars_fragment="#ifdef USE_NORMALMAP\n uniform sampler2D normalMap;\n uniform vec2 normalScale;\n vec3 perturbNormal2Arb( vec3 eye_pos, vec3 surf_norm ) {\n vec3 q0 = dFdx( eye_pos.xyz );\n vec3 q1 = dFdy( eye_pos.xyz );\n vec2 st0 = dFdx( vUv.st );\n vec2 st1 = dFdy( vUv.st );\n vec3 S = normalize( q0 * st1.t - q1 * st0.t );\n vec3 T = normalize( -q0 * st1.s + q1 * st0.s );\n vec3 N = normalize( surf_norm );\n vec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n mapN.xy = normalScale * mapN.xy;\n mat3 tsn = mat3( S, T, N );\n return normalize( tsn * mapN );\n }\n#endif\n";THREE.ShaderChunk.premultiplied_alpha_fragment="#ifdef PREMULTIPLIED_ALPHA\n gl_FragColor.rgb *= gl_FragColor.a;\n#endif\n";THREE.ShaderChunk.project_vertex="#ifdef USE_SKINNING\n vec4 mvPosition = modelViewMatrix * skinned;\n#else\n vec4 mvPosition = modelViewMatrix * vec4( transformed, 1.0 );\n#endif\ngl_Position = projectionMatrix * mvPosition;\n";THREE.ShaderChunk.roughnessmap_fragment="float roughnessFactor = roughness;\n#ifdef USE_ROUGHNESSMAP\n vec4 texelRoughness = texture2D( roughnessMap, vUv );\n roughnessFactor *= texelRoughness.r;\n#endif\n";THREE.ShaderChunk.roughnessmap_pars_fragment="#ifdef USE_ROUGHNESSMAP\n uniform sampler2D roughnessMap;\n#endif";THREE.ShaderChunk.shadowmap_pars_fragment="#ifdef USE_SHADOWMAP\n #if NUM_DIR_LIGHTS > 0\n uniform sampler2D directionalShadowMap[ NUM_DIR_LIGHTS ];\n varying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHTS ];\n #endif\n #if NUM_SPOT_LIGHTS > 0\n uniform sampler2D spotShadowMap[ NUM_SPOT_LIGHTS ];\n varying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHTS ];\n #endif\n #if NUM_POINT_LIGHTS > 0\n uniform sampler2D pointShadowMap[ NUM_POINT_LIGHTS ];\n varying vec4 vPointShadowCoord[ NUM_POINT_LIGHTS ];\n #endif\n float unpackDepth( const in vec4 rgba_depth ) {\n const vec4 bit_shift = vec4( 1.0 / ( 256.0 * 256.0 * 256.0 ), 1.0 / ( 256.0 * 256.0 ), 1.0 / 256.0, 1.0 );\n return dot( rgba_depth, bit_shift );\n }\n float texture2DCompare( sampler2D depths, vec2 uv, float compare ) {\n return step( compare, unpackDepth( texture2D( depths, uv ) ) );\n }\n float texture2DShadowLerp( sampler2D depths, vec2 size, vec2 uv, float compare ) {\n const vec2 offset = vec2( 0.0, 1.0 );\n vec2 texelSize = vec2( 1.0 ) / size;\n vec2 centroidUV = floor( uv * size + 0.5 ) / size;\n float lb = texture2DCompare( depths, centroidUV + texelSize * offset.xx, compare );\n float lt = texture2DCompare( depths, centroidUV + texelSize * offset.xy, compare );\n float rb = texture2DCompare( depths, centroidUV + texelSize * offset.yx, compare );\n float rt = texture2DCompare( depths, centroidUV + texelSize * offset.yy, compare );\n vec2 f = fract( uv * size + 0.5 );\n float a = mix( lb, lt, f.y );\n float b = mix( rb, rt, f.y );\n float c = mix( a, b, f.x );\n return c;\n }\n float getShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord ) {\n shadowCoord.xyz /= shadowCoord.w;\n shadowCoord.z += shadowBias;\n bvec4 inFrustumVec = bvec4 ( shadowCoord.x >= 0.0, shadowCoord.x <= 1.0, shadowCoord.y >= 0.0, shadowCoord.y <= 1.0 );\n bool inFrustum = all( inFrustumVec );\n bvec2 frustumTestVec = bvec2( inFrustum, shadowCoord.z <= 1.0 );\n bool frustumTest = all( frustumTestVec );\n if ( frustumTest ) {\n #if defined( SHADOWMAP_TYPE_PCF )\n vec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n float dx0 = - texelSize.x * shadowRadius;\n float dy0 = - texelSize.y * shadowRadius;\n float dx1 = + texelSize.x * shadowRadius;\n float dy1 = + texelSize.y * shadowRadius;\n return (\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\n ) * ( 1.0 / 9.0 );\n #elif defined( SHADOWMAP_TYPE_PCF_SOFT )\n vec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n float dx0 = - texelSize.x * shadowRadius;\n float dy0 = - texelSize.y * shadowRadius;\n float dx1 = + texelSize.x * shadowRadius;\n float dy1 = + texelSize.y * shadowRadius;\n return (\n texture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\n texture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\n texture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\n texture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\n texture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy, shadowCoord.z ) +\n texture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\n texture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\n texture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\n texture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\n ) * ( 1.0 / 9.0 );\n #else\n return texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z );\n #endif\n }\n return 1.0;\n }\n vec2 cubeToUV( vec3 v, float texelSizeY ) {\n vec3 absV = abs( v );\n float scaleToCube = 1.0 / max( absV.x, max( absV.y, absV.z ) );\n absV *= scaleToCube;\n v *= scaleToCube * ( 1.0 - 2.0 * texelSizeY );\n vec2 planar = v.xy;\n float almostATexel = 1.5 * texelSizeY;\n float almostOne = 1.0 - almostATexel;\n if ( absV.z >= almostOne ) {\n if ( v.z > 0.0 )\n planar.x = 4.0 - v.x;\n } else if ( absV.x >= almostOne ) {\n float signX = sign( v.x );\n planar.x = v.z * signX + 2.0 * signX;\n } else if ( absV.y >= almostOne ) {\n float signY = sign( v.y );\n planar.x = v.x + 2.0 * signY + 2.0;\n planar.y = v.z * signY - 2.0;\n }\n return vec2( 0.125, 0.25 ) * planar + vec2( 0.375, 0.75 );\n }\n float getPointShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord ) {\n vec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) );\n vec3 lightToPosition = shadowCoord.xyz;\n vec3 bd3D = normalize( lightToPosition );\n float dp = ( length( lightToPosition ) - shadowBias ) / 1000.0;\n #if defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_PCF_SOFT )\n vec2 offset = vec2( - 1, 1 ) * shadowRadius * texelSize.y;\n return (\n texture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyy, texelSize.y ), dp ) +\n texture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyy, texelSize.y ), dp ) +\n texture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyx, texelSize.y ), dp ) +\n texture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyx, texelSize.y ), dp ) +\n texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ) +\n texture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxy, texelSize.y ), dp ) +\n texture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxy, texelSize.y ), dp ) +\n texture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxx, texelSize.y ), dp ) +\n texture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxx, texelSize.y ), dp )\n ) * ( 1.0 / 9.0 );\n #else\n return texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp );\n #endif\n }\n#endif\n";THREE.ShaderChunk.shadowmap_pars_vertex="#ifdef USE_SHADOWMAP\n #if NUM_DIR_LIGHTS > 0\n uniform mat4 directionalShadowMatrix[ NUM_DIR_LIGHTS ];\n varying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHTS ];\n #endif\n #if NUM_SPOT_LIGHTS > 0\n uniform mat4 spotShadowMatrix[ NUM_SPOT_LIGHTS ];\n varying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHTS ];\n #endif\n #if NUM_POINT_LIGHTS > 0\n uniform mat4 pointShadowMatrix[ NUM_POINT_LIGHTS ];\n varying vec4 vPointShadowCoord[ NUM_POINT_LIGHTS ];\n #endif\n#endif\n";THREE.ShaderChunk.shadowmap_vertex="#ifdef USE_SHADOWMAP\n #if NUM_DIR_LIGHTS > 0\n for ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n vDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * worldPosition;\n }\n #endif\n #if NUM_SPOT_LIGHTS > 0\n for ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n vSpotShadowCoord[ i ] = spotShadowMatrix[ i ] * worldPosition;\n }\n #endif\n #if NUM_POINT_LIGHTS > 0\n for ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n vPointShadowCoord[ i ] = pointShadowMatrix[ i ] * worldPosition;\n }\n #endif\n#endif\n";THREE.ShaderChunk.shadowmask_pars_fragment="float getShadowMask() {\n float shadow = 1.0;\n #ifdef USE_SHADOWMAP\n #if NUM_DIR_LIGHTS > 0\n DirectionalLight directionalLight;\n for ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n directionalLight = directionalLights[ i ];\n shadow *= bool( directionalLight.shadow ) ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n }\n #endif\n #if NUM_SPOT_LIGHTS > 0\n SpotLight spotLight;\n for ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n spotLight = spotLights[ i ];\n shadow *= bool( spotLight.shadow ) ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n }\n #endif\n #if NUM_POINT_LIGHTS > 0\n PointLight pointLight;\n for ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n pointLight = pointLights[ i ];\n shadow *= bool( pointLight.shadow ) ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ] ) : 1.0;\n }\n #endif\n #endif\n return shadow;\n}\n";THREE.ShaderChunk.skinbase_vertex="#ifdef USE_SKINNING\n mat4 boneMatX = getBoneMatrix( skinIndex.x );\n mat4 boneMatY = getBoneMatrix( skinIndex.y );\n mat4 boneMatZ = getBoneMatrix( skinIndex.z );\n mat4 boneMatW = getBoneMatrix( skinIndex.w );\n#endif";THREE.ShaderChunk.skinning_pars_vertex="#ifdef USE_SKINNING\n uniform mat4 bindMatrix;\n uniform mat4 bindMatrixInverse;\n #ifdef BONE_TEXTURE\n uniform sampler2D boneTexture;\n uniform int boneTextureWidth;\n uniform int boneTextureHeight;\n mat4 getBoneMatrix( const in float i ) {\n float j = i * 4.0;\n float x = mod( j, float( boneTextureWidth ) );\n float y = floor( j / float( boneTextureWidth ) );\n float dx = 1.0 / float( boneTextureWidth );\n float dy = 1.0 / float( boneTextureHeight );\n y = dy * ( y + 0.5 );\n vec4 v1 = texture2D( boneTexture, vec2( dx * ( x + 0.5 ), y ) );\n vec4 v2 = texture2D( boneTexture, vec2( dx * ( x + 1.5 ), y ) );\n vec4 v3 = texture2D( boneTexture, vec2( dx * ( x + 2.5 ), y ) );\n vec4 v4 = texture2D( boneTexture, vec2( dx * ( x + 3.5 ), y ) );\n mat4 bone = mat4( v1, v2, v3, v4 );\n return bone;\n }\n #else\n uniform mat4 boneGlobalMatrices[ MAX_BONES ];\n mat4 getBoneMatrix( const in float i ) {\n mat4 bone = boneGlobalMatrices[ int(i) ];\n return bone;\n }\n #endif\n#endif\n";THREE.ShaderChunk.skinning_vertex="#ifdef USE_SKINNING\n vec4 skinVertex = bindMatrix * vec4( transformed, 1.0 );\n vec4 skinned = vec4( 0.0 );\n skinned += boneMatX * skinVertex * skinWeight.x;\n skinned += boneMatY * skinVertex * skinWeight.y;\n skinned += boneMatZ * skinVertex * skinWeight.z;\n skinned += boneMatW * skinVertex * skinWeight.w;\n skinned = bindMatrixInverse * skinned;\n#endif\n";THREE.ShaderChunk.skinnormal_vertex="#ifdef USE_SKINNING\n mat4 skinMatrix = mat4( 0.0 );\n skinMatrix += skinWeight.x * boneMatX;\n skinMatrix += skinWeight.y * boneMatY;\n skinMatrix += skinWeight.z * boneMatZ;\n skinMatrix += skinWeight.w * boneMatW;\n skinMatrix = bindMatrixInverse * skinMatrix * bindMatrix;\n objectNormal = vec4( skinMatrix * vec4( objectNormal, 0.0 ) ).xyz;\n#endif\n";THREE.ShaderChunk.specularmap_fragment="float specularStrength;\n#ifdef USE_SPECULARMAP\n vec4 texelSpecular = texture2D( specularMap, vUv );\n specularStrength = texelSpecular.r;\n#else\n specularStrength = 1.0;\n#endif";THREE.ShaderChunk.specularmap_pars_fragment="#ifdef USE_SPECULARMAP\n uniform sampler2D specularMap;\n#endif";THREE.ShaderChunk.tonemapping_fragment="#if defined( TONE_MAPPING )\n gl_FragColor.rgb = toneMapping( gl_FragColor.rgb );\n#endif\n";THREE.ShaderChunk.tonemapping_pars_fragment="#define saturate(a) clamp( a, 0.0, 1.0 )\nuniform float toneMappingExposure;\nuniform float toneMappingWhitePoint;\nvec3 LinearToneMapping( vec3 color ) {\n return toneMappingExposure * color;\n}\nvec3 ReinhardToneMapping( vec3 color ) {\n color *= toneMappingExposure;\n return saturate( color / ( vec3( 1.0 ) + color ) );\n}\n#define Uncharted2Helper( x ) max( ( ( x * ( 0.15 * x + 0.10 * 0.50 ) + 0.20 * 0.02 ) / ( x * ( 0.15 * x + 0.50 ) + 0.20 * 0.30 ) ) - 0.02 / 0.30, vec3( 0.0 ) )\nvec3 Uncharted2ToneMapping( vec3 color ) {\n color *= toneMappingExposure;\n return saturate( Uncharted2Helper( color ) / Uncharted2Helper( vec3( toneMappingWhitePoint ) ) );\n}\nvec3 OptimizedCineonToneMapping( vec3 color ) {\n color *= toneMappingExposure;\n color = max( vec3( 0.0 ), color - 0.004 );\n return pow( ( color * ( 6.2 * color + 0.5 ) ) / ( color * ( 6.2 * color + 1.7 ) + 0.06 ), vec3( 2.2 ) );\n}\n";THREE.ShaderChunk.uv2_pars_fragment="#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n varying vec2 vUv2;\n#endif";THREE.ShaderChunk.uv2_pars_vertex="#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n attribute vec2 uv2;\n varying vec2 vUv2;\n#endif";THREE.ShaderChunk.uv2_vertex="#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n vUv2 = uv2;\n#endif";THREE.ShaderChunk.uv_pars_fragment="#if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP ) || defined( USE_ALPHAMAP ) || defined( USE_EMISSIVEMAP ) || defined( USE_ROUGHNESSMAP ) || defined( USE_METALNESSMAP )\n varying vec2 vUv;\n#endif";THREE.ShaderChunk.uv_pars_vertex="#if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP ) || defined( USE_ALPHAMAP ) || defined( USE_EMISSIVEMAP ) || defined( USE_ROUGHNESSMAP ) || defined( USE_METALNESSMAP )\n varying vec2 vUv;\n uniform vec4 offsetRepeat;\n#endif\n";THREE.ShaderChunk.uv_vertex="#if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP ) || defined( USE_ALPHAMAP ) || defined( USE_EMISSIVEMAP ) || defined( USE_ROUGHNESSMAP ) || defined( USE_METALNESSMAP )\n vUv = uv * offsetRepeat.zw + offsetRepeat.xy;\n#endif";THREE.ShaderChunk.worldpos_vertex="#if defined( USE_ENVMAP ) || defined( PHONG ) || defined( STANDARD ) || defined( LAMBERT ) || defined ( USE_SHADOWMAP )\n #ifdef USE_SKINNING\n vec4 worldPosition = modelMatrix * skinned;\n #else\n vec4 worldPosition = modelMatrix * vec4( transformed, 1.0 );\n #endif\n#endif\n";THREE.UniformsUtils={merge:function(a){for(var b={},c=0;c= 365 * 24 * 3600) { + result += (t / (365 * 24 * 3600) | 0) + " years "; + t %= 365 * 24 * 3600; + if (t < 24 * 3600) { + result += "0 days "; + } + } + if (t >= 24 * 3600) { + result += (t / (24 * 3600) | 0) + " days "; + } + t %= 24 * 3600; + return result + this.hourMinSec(t); + } +} +var DataFormatters = { + distanceString: function(value){ + return numeral(value).format('0,0.000 a') + "m" + }, -THREE.ShaderChunk.meshlambert_frag="uniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\nvarying vec3 vLightFront;\n#ifdef DOUBLE_SIDED\n varying vec3 vLightBack;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n vec4 diffuseColor = vec4( diffuse, opacity );\n ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n vec3 totalEmissiveRadiance = emissive;\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n reflectedLight.indirectDiffuse = getAmbientLightIrradiance( ambientLightColor );\n #include \n reflectedLight.indirectDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb );\n #ifdef DOUBLE_SIDED\n reflectedLight.directDiffuse = ( gl_FrontFacing ) ? vLightFront : vLightBack;\n #else\n reflectedLight.directDiffuse = vLightFront;\n #endif\n reflectedLight.directDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb ) * getShadowMask();\n #include \n vec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n #include \n gl_FragColor = vec4( outgoingLight, diffuseColor.a );\n #include \n #include \n #include \n #include \n}\n";THREE.ShaderChunk.meshlambert_vert="#define LAMBERT\nvarying vec3 vLightFront;\n#ifdef DOUBLE_SIDED\n varying vec3 vLightBack;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n}\n";THREE.ShaderChunk.meshphong_frag="#define PHONG\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform vec3 specular;\nuniform float shininess;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n vec4 diffuseColor = vec4( diffuse, opacity );\n ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n vec3 totalEmissiveRadiance = emissive;\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n vec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n #include \n gl_FragColor = vec4( outgoingLight, diffuseColor.a );\n #include \n #include \n #include \n #include \n}\n";THREE.ShaderChunk.meshphong_vert="#define PHONG\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n varying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n#ifndef FLAT_SHADED\n vNormal = normalize( transformedNormal );\n#endif\n #include \n #include \n #include \n #include \n #include \n #include \n vViewPosition = - mvPosition.xyz;\n #include \n #include \n #include \n #include \n}\n";THREE.ShaderChunk.meshstandard_frag="#define STANDARD\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float roughness;\nuniform float metalness;\nuniform float opacity;\nuniform float envMapIntensity;\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n varying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n vec4 diffuseColor = vec4( diffuse, opacity );\n ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n vec3 totalEmissiveRadiance = emissive;\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n vec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n gl_FragColor = vec4( outgoingLight, diffuseColor.a );\n #include \n #include \n #include \n #include \n}\n";THREE.ShaderChunk.meshstandard_vert="#define STANDARD\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n varying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n#ifndef FLAT_SHADED\n vNormal = normalize( transformedNormal );\n#endif\n #include \n #include \n #include \n #include \n #include \n #include \n vViewPosition = - mvPosition.xyz;\n #include \n #include \n #include \n}\n";THREE.ShaderChunk.normal_frag="uniform float opacity;\nvarying vec3 vNormal;\n#include \n#include \nvoid main() {\n gl_FragColor = vec4( 0.5 * normalize( vNormal ) + 0.5, opacity );\n #include \n}\n";THREE.ShaderChunk.normal_vert="varying vec3 vNormal;\n#include \n#include \n#include \nvoid main() {\n vNormal = normalize( normalMatrix * normal );\n #include \n #include \n #include \n #include \n}\n";THREE.ShaderChunk.points_frag="uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n vec3 outgoingLight = vec3( 0.0 );\n vec4 diffuseColor = vec4( diffuse, opacity );\n #include \n #include \n #include \n #include \n outgoingLight = diffuseColor.rgb;\n gl_FragColor = vec4( outgoingLight, diffuseColor.a );\n #include \n #include \n #include \n #include \n}\n";THREE.ShaderChunk.points_vert="uniform float size;\nuniform float scale;\n#include \n#include \n#include \n#include \nvoid main() {\n #include \n #include \n #include \n #ifdef USE_SIZEATTENUATION\n gl_PointSize = size * ( scale / - mvPosition.z );\n #else\n gl_PointSize = size;\n #endif\n #include \n #include \n #include \n}\n";THREE.ShaderLib={basic:{uniforms:THREE.UniformsUtils.merge([THREE.UniformsLib.common,THREE.UniformsLib.aomap,THREE.UniformsLib.fog]),vertexShader:THREE.ShaderChunk.meshbasic_vert,fragmentShader:THREE.ShaderChunk.meshbasic_frag},lambert:{uniforms:THREE.UniformsUtils.merge([THREE.UniformsLib.common,THREE.UniformsLib.aomap,THREE.UniformsLib.lightmap,THREE.UniformsLib.emissivemap,THREE.UniformsLib.fog,THREE.UniformsLib.lights,{emissive:{type:"c",value:new THREE.Color(0)}}]),vertexShader:THREE.ShaderChunk.meshlambert_vert,fragmentShader:THREE.ShaderChunk.meshlambert_frag},phong:{uniforms:THREE.UniformsUtils.merge([THREE.UniformsLib.common,THREE.UniformsLib.aomap,THREE.UniformsLib.lightmap,THREE.UniformsLib.emissivemap,THREE.UniformsLib.bumpmap,THREE.UniformsLib.normalmap,THREE.UniformsLib.displacementmap,THREE.UniformsLib.fog,THREE.UniformsLib.lights,{emissive:{type:"c",value:new THREE.Color(0)},specular:{type:"c",value:new THREE.Color(1118481)},shininess:{type:"f",value:30}}]),vertexShader:THREE.ShaderChunk.meshphong_vert,fragmentShader:THREE.ShaderChunk.meshphong_frag},standard:{uniforms:THREE.UniformsUtils.merge([THREE.UniformsLib.common,THREE.UniformsLib.aomap,THREE.UniformsLib.lightmap,THREE.UniformsLib.emissivemap,THREE.UniformsLib.bumpmap,THREE.UniformsLib.normalmap,THREE.UniformsLib.displacementmap,THREE.UniformsLib.roughnessmap,THREE.UniformsLib.metalnessmap,THREE.UniformsLib.fog,THREE.UniformsLib.lights,{emissive:{type:"c",value:new THREE.Color(0)},roughness:{type:"f",value:.5},metalness:{type:"f",value:0},envMapIntensity:{type:"f",value:1}}]),vertexShader:THREE.ShaderChunk.meshstandard_vert,fragmentShader:THREE.ShaderChunk.meshstandard_frag},points:{uniforms:THREE.UniformsUtils.merge([THREE.UniformsLib.points,THREE.UniformsLib.fog]),vertexShader:THREE.ShaderChunk.points_vert,fragmentShader:THREE.ShaderChunk.points_frag},dashed:{uniforms:THREE.UniformsUtils.merge([THREE.UniformsLib.common,THREE.UniformsLib.fog,{scale:{type:"f",value:1},dashSize:{type:"f",value:1},totalSize:{type:"f",value:2}}]),vertexShader:THREE.ShaderChunk.linedashed_vert,fragmentShader:THREE.ShaderChunk.linedashed_frag},depth:{uniforms:{mNear:{type:"f",value:1},mFar:{type:"f",value:2e3},opacity:{type:"f",value:1}},vertexShader:THREE.ShaderChunk.depth_vert,fragmentShader:THREE.ShaderChunk.depth_frag},normal:{uniforms:{opacity:{type:"f",value:1}},vertexShader:THREE.ShaderChunk.normal_vert,fragmentShader:THREE.ShaderChunk.normal_frag},cube:{uniforms:{tCube:{type:"t",value:null},tFlip:{type:"f",value:-1}},vertexShader:THREE.ShaderChunk.cube_vert,fragmentShader:THREE.ShaderChunk.cube_frag},equirect:{uniforms:{tEquirect:{type:"t",value:null},tFlip:{type:"f",value:-1}},vertexShader:THREE.ShaderChunk.equirect_vert,fragmentShader:THREE.ShaderChunk.equirect_frag},depthRGBA:{uniforms:{},vertexShader:THREE.ShaderChunk.depthRGBA_vert,fragmentShader:THREE.ShaderChunk.depthRGBA_frag},distanceRGBA:{uniforms:{lightPos:{type:"v3",value:new THREE.Vector3(0,0,0)}},vertexShader:THREE.ShaderChunk.distanceRGBA_vert,fragmentShader:THREE.ShaderChunk.distanceRGBA_frag}};THREE.WebGLRenderer=function(a){function b(a,b,c,d){!0===P&&(a*=d,b*=d,c*=d);K.clearColor(a,b,c,d)}function c(){K.init();K.scissor(qa.copy(ya).multiplyScalar(aa));K.viewport(ka.copy(la).multiplyScalar(aa));b(ba.r,ba.g,ba.b,ga)}function d(){ma=ha=null;na="";ra=-1;K.reset()}function e(a){a.preventDefault();d();c();U.clear()}function f(a){a=a.target;a.removeEventListener("dispose",f);a:{var b=U.get(a);if(a.image&&b.__image__webglTextureCube)r.deleteTexture(b.__image__webglTextureCube);else{if(void 0===b.__webglInit)break a;r.deleteTexture(b.__webglTexture)}U.delete(a)}ia.textures--}function g(a){a=a.target;a.removeEventListener("dispose",g);var b=U.get(a),c=U.get(a.texture);if(a&&void 0!==c.__webglTexture){r.deleteTexture(c.__webglTexture);if(a instanceof THREE.WebGLRenderTargetCube)for(c=0;6>c;c++)r.deleteFramebuffer(b.__webglFramebuffer[c]),r.deleteRenderbuffer(b.__webglDepthbuffer[c]);else r.deleteFramebuffer(b.__webglFramebuffer),r.deleteRenderbuffer(b.__webglDepthbuffer);U.delete(a.texture);U.delete(a)}ia.textures--}function h(a){a=a.target;a.removeEventListener("dispose",h);k(a);U.delete(a)}function k(a){var b=U.get(a).program;a.program=void 0;void 0!==b&&oa.releaseProgram(b)}function l(a,b){return Math.abs(b[0])-Math.abs(a[0])}function p(a,b){return a.object.renderOrder!==b.object.renderOrder?a.object.renderOrder-b.object.renderOrder:a.material.id!==b.material.id?a.material.id-b.material.id:a.z!==b.z?a.z-b.z:a.id-b.id}function n(a,b){return a.object.renderOrder!==b.object.renderOrder?a.object.renderOrder-b.object.renderOrder:a.z!==b.z?b.z-a.z:a.id-b.id}function m(a,b,c,d,e){var f;c.transparent?(d=S,f=++Y):(d=C,f=++Z);f=d[f];void 0!==f?(f.id=a.id,f.object=a,f.geometry=b,f.material=c,f.z=W.z,f.group=e):(f={id:a.id,object:a,geometry:b,material:c,z:W.z,group:e},d.push(f))}function q(a,b){if(!1!==a.visible){if(a.layers.test(b.layers))if(a instanceof THREE.Light)J.push(a);else if(a instanceof THREE.Sprite)!1!==a.frustumCulled&&!0!==za.intersectsObject(a)||ja.push(a);else if(a instanceof THREE.LensFlare)ea.push(a);else if(a instanceof THREE.ImmediateRenderObject)!0===X.sortObjects&&(W.setFromMatrixPosition(a.matrixWorld),W.applyProjection(sa)),m(a,null,a.material,W.z,null);else if(a instanceof THREE.Mesh||a instanceof THREE.Line||a instanceof THREE.Points)if(a instanceof THREE.SkinnedMesh&&a.skeleton.update(),!1===a.frustumCulled||!0===za.intersectsObject(a)){var c=a.material;if(!0===c.visible){!0===X.sortObjects&&(W.setFromMatrixPosition(a.matrixWorld),W.applyProjection(sa));var d=pa.update(a);if(c instanceof THREE.MultiMaterial)for(var e=d.groups,f=c.materials,c=0,g=e.length;c=da.maxTextures&&console.warn("WebGLRenderer: trying to use "+a+" texture units while this GPU supports only "+da.maxTextures);ta+=1;return a}function w(a,b,c,d){var e;if("1i"===b)r.uniform1i(c,d);else if("1f"===b)r.uniform1f(c,d);else if("2f"===b)r.uniform2f(c,d[0],d[1]);else if("3f"===b)r.uniform3f(c,d[0],d[1],d[2]);else if("4f"===b)r.uniform4f(c,d[0],d[1],d[2],d[3]);else if("1iv"===b)r.uniform1iv(c,d);else if("3iv"===b)r.uniform3iv(c,d);else if("1fv"===b)r.uniform1fv(c,d);else if("2fv"===b)r.uniform2fv(c,d);else if("3fv"===b)r.uniform3fv(c,d);else if("4fv"===b)r.uniform4fv(c,d);else if("Matrix2fv"===b)r.uniformMatrix2fv(c,!1,d);else if("Matrix3fv"===b)r.uniformMatrix3fv(c,!1,d);else if("Matrix4fv"===b)r.uniformMatrix4fv(c,!1,d);else if("i"===b)r.uniform1i(c,d);else if("f"===b)r.uniform1f(c,d);else if("v2"===b)r.uniform2f(c,d.x,d.y);else if("v3"===b)r.uniform3f(c,d.x,d.y,d.z);else if("v4"===b)r.uniform4f(c,d.x,d.y,d.z,d.w);else if("c"===b)r.uniform3f(c,d.r,d.g,d.b);else if("s"===b){a=a.properties;for(var g in a){e=a[g];var f=c[g],h=d[g];w(e,e.type,f,h)}}else if("sa"===b){a=a.properties;b=0;for(var k=d.length;bb||a.height>b){var c=b/Math.max(a.width,a.height),d=document.createElement("canvas");d.width=Math.floor(a.width*c);d.height=Math.floor(a.height*c);d.getContext("2d").drawImage(a,0,0,a.width,a.height,0,0,d.width,d.height);console.warn("THREE.WebGLRenderer: image is too big ("+a.width+"x"+a.height+"). Resized to "+d.width+"x"+d.height,a);return d}return a}function z(a){return THREE.Math.isPowerOfTwo(a.width)&&THREE.Math.isPowerOfTwo(a.height)}function y(a,b){var c=U.get(a);if(6===a.image.length)if(0h;h++)g[h]=!X.autoScaleCubemaps||d||e?e?a.image[h].image:a.image[h]:D(a.image[h],da.maxCubemapSize);var k=z(g[0]),l=L(a.format),m=L(a.type);x(r.TEXTURE_CUBE_MAP,a,k);for(h=0;6>h;h++)if(d)for(var n,p=g[h].mipmaps,q=0,s=p.length;qf;f++)b.__webglFramebuffer[f]=r.createFramebuffer()}else b.__webglFramebuffer=r.createFramebuffer();if(d){K.bindTexture(r.TEXTURE_CUBE_MAP,c.__webglTexture);x(r.TEXTURE_CUBE_MAP,a.texture,e);for(f=0;6>f;f++)G(b.__webglFramebuffer[f],a,r.COLOR_ATTACHMENT0,r.TEXTURE_CUBE_MAP_POSITIVE_X+f);a.texture.generateMipmaps&&e&&r.generateMipmap(r.TEXTURE_CUBE_MAP);K.bindTexture(r.TEXTURE_CUBE_MAP,null)}else K.bindTexture(r.TEXTURE_2D,c.__webglTexture),x(r.TEXTURE_2D,a.texture,e),G(b.__webglFramebuffer,a,r.COLOR_ATTACHMENT0,r.TEXTURE_2D),a.texture.generateMipmaps&&e&&r.generateMipmap(r.TEXTURE_2D),K.bindTexture(r.TEXTURE_2D,null);if(a.depthBuffer){b=U.get(a);if(a instanceof THREE.WebGLRenderTargetCube)for(b.__webglDepthbuffer=[],c=0;6>c;c++)r.bindFramebuffer(r.FRAMEBUFFER,b.__webglFramebuffer[c]),b.__webglDepthbuffer[c]=r.createRenderbuffer(),F(b.__webglDepthbuffer[c],a);else r.bindFramebuffer(r.FRAMEBUFFER,b.__webglFramebuffer),b.__webglDepthbuffer=r.createRenderbuffer(),F(b.__webglDepthbuffer,a);r.bindFramebuffer(r.FRAMEBUFFER,null)}}b=a instanceof THREE.WebGLRenderTargetCube;a?(c=U.get(a),c=b?c.__webglFramebuffer[a.activeCubeFace]:c.__webglFramebuffer,qa.copy(a.scissor),Aa=a.scissorTest,ka.copy(a.viewport)):(c=null,qa.copy(ya).multiplyScalar(aa),Aa=Ba,ka.copy(la).multiplyScalar(aa));ua!==c&&(r.bindFramebuffer(r.FRAMEBUFFER,c),ua=c);K.scissor(qa);K.setScissorTest(Aa);K.viewport(ka);b&&(b=U.get(a.texture),r.framebufferTexture2D(r.FRAMEBUFFER,r.COLOR_ATTACHMENT0,r.TEXTURE_CUBE_MAP_POSITIVE_X+a.activeCubeFace,b.__webglTexture,a.activeMipMapLevel))};this.readRenderTargetPixels=function(a,b,c,d,e,g){if(!1===a instanceof THREE.WebGLRenderTarget)console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.");else{var f=U.get(a).__webglFramebuffer;if(f){var h=!1;f!==ua&&(r.bindFramebuffer(r.FRAMEBUFFER,f),h=!0);try{var k=a.texture;k.format!==THREE.RGBAFormat&&L(k.format)!==r.getParameter(r.IMPLEMENTATION_COLOR_READ_FORMAT)?console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format."):k.type===THREE.UnsignedByteType||L(k.type)===r.getParameter(r.IMPLEMENTATION_COLOR_READ_TYPE)||k.type===THREE.FloatType&&V.get("WEBGL_color_buffer_float")||k.type===THREE.HalfFloatType&&V.get("EXT_color_buffer_half_float")?r.checkFramebufferStatus(r.FRAMEBUFFER)===r.FRAMEBUFFER_COMPLETE?r.readPixels(b,c,d,e,L(k.format),L(k.type),g):console.error("THREE.WebGLRenderer.readRenderTargetPixels: readPixels from renderTarget failed. Framebuffer not complete."):console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.")}finally{h&&r.bindFramebuffer(r.FRAMEBUFFER,ua)}}}}};THREE.WebGLRenderTarget=function(a,b,c){this.uuid=THREE.Math.generateUUID();this.width=a;this.height=b;this.scissor=new THREE.Vector4(0,0,a,b);this.scissorTest=!1;this.viewport=new THREE.Vector4(0,0,a,b);c=c||{};void 0===c.minFilter&&(c.minFilter=THREE.LinearFilter);this.texture=new THREE.Texture(void 0,void 0,c.wrapS,c.wrapT,c.magFilter,c.minFilter,c.format,c.type,c.anisotropy);this.depthBuffer=void 0!==c.depthBuffer?c.depthBuffer:!0;this.stencilBuffer=void 0!==c.stencilBuffer?c.stencilBuffer:!0};THREE.WebGLRenderTarget.prototype={constructor:THREE.WebGLRenderTarget,setSize:function(a,b){if(this.width!==a||this.height!==b)this.width=a,this.height=b,this.dispose();this.viewport.set(0,0,a,b);this.scissor.set(0,0,a,b)},clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.width=a.width;this.height=a.height;this.viewport.copy(a.viewport);this.texture=a.texture.clone();this.depthBuffer=a.depthBuffer;this.stencilBuffer=a.stencilBuffer;return this},dispose:function(){this.dispatchEvent({type:"dispose"})}};THREE.EventDispatcher.prototype.apply(THREE.WebGLRenderTarget.prototype);THREE.WebGLRenderTargetCube=function(a,b,c){THREE.WebGLRenderTarget.call(this,a,b,c);this.activeMipMapLevel=this.activeCubeFace=0};THREE.WebGLRenderTargetCube.prototype=Object.create(THREE.WebGLRenderTarget.prototype);THREE.WebGLRenderTargetCube.prototype.constructor=THREE.WebGLRenderTargetCube;THREE.WebGLBufferRenderer=function(a,b,c){var d;this.setMode=function(a){d=a};this.render=function(b,f){a.drawArrays(d,b,f);c.calls++;c.vertices+=f;d===a.TRIANGLES&&(c.faces+=f/3)};this.renderInstances=function(e){var f=b.get("ANGLE_instanced_arrays");if(null===f)console.error("THREE.WebGLBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.");else{var g=e.attributes.position,h=0,h=g instanceof THREE.InterleavedBufferAttribute?g.data.count:g.count;f.drawArraysInstancedANGLE(d,0,h,e.maxInstancedCount);c.calls++;c.vertices+=h*e.maxInstancedCount;d===a.TRIANGLES&&(c.faces+=e.maxInstancedCount*h/3)}}};THREE.WebGLIndexedBufferRenderer=function(a,b,c){var d,e,f;this.setMode=function(a){d=a};this.setIndex=function(c){c.array instanceof Uint32Array&&b.get("OES_element_index_uint")?(e=a.UNSIGNED_INT,f=4):(e=a.UNSIGNED_SHORT,f=2)};this.render=function(b,h){a.drawElements(d,h,e,b*f);c.calls++;c.vertices+=h;d===a.TRIANGLES&&(c.faces+=h/3)};this.renderInstances=function(g,h,k){var l=b.get("ANGLE_instanced_arrays");null===l?console.error("THREE.WebGLBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays."):(l.drawElementsInstancedANGLE(d,k,e,h*f,g.maxInstancedCount),c.calls++,c.vertices+=k*g.maxInstancedCount,d===a.TRIANGLES&&(c.faces+=g.maxInstancedCount*k/3))}};THREE.WebGLExtensions=function(a){var b={};this.get=function(c){if(void 0!==b[c])return b[c];var d;switch(c){case"EXT_texture_filter_anisotropic":d=a.getExtension("EXT_texture_filter_anisotropic")||a.getExtension("MOZ_EXT_texture_filter_anisotropic")||a.getExtension("WEBKIT_EXT_texture_filter_anisotropic");break;case"WEBGL_compressed_texture_s3tc":d=a.getExtension("WEBGL_compressed_texture_s3tc")||a.getExtension("MOZ_WEBGL_compressed_texture_s3tc")||a.getExtension("WEBKIT_WEBGL_compressed_texture_s3tc");break;case"WEBGL_compressed_texture_pvrtc":d=a.getExtension("WEBGL_compressed_texture_pvrtc")||a.getExtension("WEBKIT_WEBGL_compressed_texture_pvrtc");break;case"WEBGL_compressed_texture_etc1":d=a.getExtension("WEBGL_compressed_texture_etc1");break;default:d=a.getExtension(c)}null===d&&console.warn("THREE.WebGLRenderer: "+c+" extension not supported.");return b[c]=d}};THREE.WebGLCapabilities=function(a,b,c){function d(b){if("highp"===b){if(0c){var d=b;b=c;c=d}d=a[b];return void 0===d?(a[b]=[c],!0):-1===d.indexOf(c)?(d.push(c),!0):!1}var f=new THREE.WebGLGeometries(a,b,c);this.getAttributeBuffer=function(a){return a instanceof THREE.InterleavedBufferAttribute?b.get(a.data).__webglBuffer:b.get(a).__webglBuffer};this.getWireframeAttribute=function(c){var f=b.get(c);if(void 0!==f.wireframe)return f.wireframe;var k=[],l=c.index,p=c.attributes;c=p.position;if(null!==l)for(var p={},l=l.array,n=0,m=l.length;n/g,function(a,b){var c=THREE.ShaderChunk[b];if(void 0===c)throw Error("Can not resolve #include <"+b+">");return k(c)})}function l(a){return a.replace(/for \( int i \= (\d+)\; i < (\d+)\; i \+\+ \) \{([\s\S]+?)(?=\})\}/g,function(a,b,c,d){a="";for(b=parseInt(b);b 0 ) {\nfloat depth = gl_FragCoord.z / gl_FragCoord.w;\nfloat fogFactor = 0.0;\nif ( fogType == 1 ) {\nfogFactor = smoothstep( fogNear, fogFar, depth );\n} else {\nconst float LOG2 = 1.442695;\nfogFactor = exp2( - fogDensity * fogDensity * depth * depth * LOG2 );\nfogFactor = 1.0 - clamp( fogFactor, 0.0, 1.0 );\n}\ngl_FragColor = mix( gl_FragColor, vec4( fogColor, gl_FragColor.w ), fogFactor );\n}\n}"].join("\n")); + degreeString: function(value){ + return numeral(value).format('0.000') + "°" + }, -x.compileShader(I);x.compileShader(O);x.attachShader(M,I);x.attachShader(M,O);x.linkProgram(M);B=M;s=x.getAttribLocation(B,"position");w=x.getAttribLocation(B,"uv");c=x.getUniformLocation(B,"uvOffset");d=x.getUniformLocation(B,"uvScale");e=x.getUniformLocation(B,"rotation");f=x.getUniformLocation(B,"scale");g=x.getUniformLocation(B,"color");h=x.getUniformLocation(B,"map");k=x.getUniformLocation(B,"opacity");l=x.getUniformLocation(B,"modelViewMatrix");p=x.getUniformLocation(B,"projectionMatrix");n=x.getUniformLocation(B,"fogType");m=x.getUniformLocation(B,"fogDensity");q=x.getUniformLocation(B,"fogNear");u=x.getUniformLocation(B,"fogFar");v=x.getUniformLocation(B,"fogColor");t=x.getUniformLocation(B,"alphaTest");M=document.createElement("canvas");M.width=8;M.height=8;I=M.getContext("2d");I.fillStyle="white";I.fillRect(0,0,8,8);G=new THREE.Texture(M);G.needsUpdate=!0}x.useProgram(B);D.initAttributes();D.enableAttribute(s);D.enableAttribute(w);D.disableUnusedAttributes();D.disable(x.CULL_FACE);D.enable(x.BLEND);x.bindBuffer(x.ARRAY_BUFFER,z);x.vertexAttribPointer(s,2,x.FLOAT,!1,16,0);x.vertexAttribPointer(w,2,x.FLOAT,!1,16,8);x.bindBuffer(x.ELEMENT_ARRAY_BUFFER,y);x.uniformMatrix4fv(p,!1,N.projectionMatrix.elements);D.activeTexture(x.TEXTURE0);x.uniform1i(h,0);I=M=0;(O=A.fog)?(x.uniform3f(v,O.color.r,O.color.g,O.color.b),O instanceof THREE.Fog?(x.uniform1f(q,O.near),x.uniform1f(u,O.far),x.uniform1i(n,1),I=M=1):O instanceof THREE.FogExp2&&(x.uniform1f(m,O.density),x.uniform1i(n,2),I=M=2)):(x.uniform1i(n,0),I=M=0);for(var O=0,Q=b.length;Oc)return null;var d=[],e=[],f=[],g,h,k;if(0=l--){console.warn("THREE.ShapeUtils: Unable to triangulate polygon! in triangulate()");break}g=h;c<=g&&(g=0);h=g+1;c<=h&&(h=0);k=h+1;c<=k&&(k=0);var p;a:{var n=p=void 0,m=void 0,q=void 0,u=void 0,v=void 0,t=void 0,s=void 0,w=void 0,n=a[e[g]].x,m=a[e[g]].y,q=a[e[h]].x,u=a[e[h]].y,v=a[e[k]].x,t=a[e[k]].y;if(Number.EPSILON>(q-n)*(t-m)-(u-m)*(v-n))p=!1;else{var E=void 0,x=void 0,D=void 0,z=void 0,y=void 0,B=void 0,G=void 0,F=void 0,H=void 0,L=void 0,H=F=G=w=s=void 0,E=v-q,x=t-u,D=n-v,z=m-t,y=q-n,B=u-m;for(p=0;p=-Number.EPSILON&&F>=-Number.EPSILON&&G>=-Number.EPSILON)){p=!1;break a}p=!0}}if(p){d.push([a[e[g]],a[e[h]],a[e[k]]]);f.push([e[g],e[h],e[k]]);g=h;for(k=h+1;kNumber.EPSILON){if(0B||B>y)return[];k=l*n-k*p;if(0>k||k>y)return[]}else{if(0d?[]:k===d?f?[]:[g]:a<=d?[g,h]:[g,l]}function e(a,b,c,d){var e=b.x-a.x,f=b.y-a.y;b=c.x-a.x;c=c.y-a.y;var g=d.x-a.x;d=d.y-a.y;a=e*c-f*b;e=e*d-f*g;return Math.abs(a)>Number.EPSILON?(b=g*c-d*b,0f&&(f=d);var g=a+1;g>d&&(g=0);d=e(h[a],h[f],h[g],k[b]);if(!d)return!1;d=k.length-1;f=b-1;0>f&&(f=d);g=b+1;g>d&&(g=0);return(d=e(k[b],k[f],k[g],h[a]))?!0:!1}function f(a,b){var c,e;for(c=0;cN){console.log("Infinite Loop! Holes left:"+l.length+", Probably Hole outside Shape!");break}for(p=F;ph;h++)l=k[h].x+":"+k[h].y,l=p[l],void 0!==l&&(k[h]=l);return n.concat()},isClockWise:function(a){return 0>THREE.ShapeUtils.area(a)},b2:function(){return function(a,b,c,d){var e=1-a;return e*e*b+2*(1-a)*a*c+a*a*d}}(),b3:function(){return function(a,b,c,d,e){var f=1-a,g=1-a;return f*f*f*b+3*g*g*a*c+3*(1-a)*a*a*d+a*a*a*e}}()};THREE.Curve=function(){};THREE.Curve.prototype={constructor:THREE.Curve,getPoint:function(a){console.warn("THREE.Curve: Warning, getPoint() not implemented!");return null},getPointAt:function(a){a=this.getUtoTmapping(a);return this.getPoint(a)},getPoints:function(a){a||(a=5);var b,c=[];for(b=0;b<=a;b++)c.push(this.getPoint(b/a));return c},getSpacedPoints:function(a){a||(a=5);var b,c=[];for(b=0;b<=a;b++)c.push(this.getPointAt(b/a));return c},getLength:function(){var a=this.getLengths();return a[a.length-1]},getLengths:function(a){a||(a=this.__arcLengthDivisions?this.__arcLengthDivisions:200);if(this.cacheArcLengths&&this.cacheArcLengths.length===a+1&&!this.needsUpdate)return this.cacheArcLengths;this.needsUpdate=!1;var b=[],c,d=this.getPoint(0),e,f=0;b.push(0);for(e=1;e<=a;e++)c=this.getPoint(e/a),f+=c.distanceTo(d),b.push(f),d=c;return this.cacheArcLengths=b},updateArcLengths:function(){this.needsUpdate=!0;this.getLengths()},getUtoTmapping:function(a,b){var c=this.getLengths(),d=0,e=c.length,f;f=b?b:a*c[e-1];for(var g=0,h=e-1,k;g<=h;)if(d=Math.floor(g+(h-g)/2),k=c[d]-f,0>k)g=d+1;else if(0b&&(b=0);1=b)return a=this.curves[d],b=1-(c[d]-b)/a.getLength(),a.getPointAt(b);d++}return null};THREE.CurvePath.prototype.getLength=function(){var a=this.getCurveLengths();return a[a.length-1]};THREE.CurvePath.prototype.getCurveLengths=function(){if(this.cacheLengths&&this.cacheLengths.length===this.curves.length)return this.cacheLengths;for(var a=[],b=0,c=0,d=this.curves.length;cNumber.EPSILON){if(0>l&&(g=b[f],k=-k,h=b[e],l=-l),!(a.yh.y))if(a.y===g.y){if(a.x===g.x)return!0}else{e=l*(a.x-g.x)-k*(a.y-g.y);if(0===e)return!0;0>e||(d=!d)}}else if(a.y===g.y&&(h.x<=a.x&&a.x<=g.x||g.x<=a.x&&a.x<=h.x))return!0}return d}var e=THREE.ShapeUtils.isClockWise,f=function(a){for(var b=[],c=new THREE.Path,d=0,e=a.length;db.length-2?b.length-1:c+1],b=b[c>b.length-3?b.length-1:c+2],c=THREE.CurveUtils.interpolate;return new THREE.Vector2(c(d.x,e.x,f.x,b.x,a),c(d.y,e.y,f.y,b.y,a))};THREE.EllipseCurve=function(a,b,c,d,e,f,g,h){this.aX=a;this.aY=b;this.xRadius=c;this.yRadius=d;this.aStartAngle=e;this.aEndAngle=f;this.aClockwise=g;this.aRotation=h||0};THREE.EllipseCurve.prototype=Object.create(THREE.Curve.prototype);THREE.EllipseCurve.prototype.constructor=THREE.EllipseCurve;THREE.EllipseCurve.prototype.getPoint=function(a){var b=this.aEndAngle-this.aStartAngle;0>b&&(b+=2*Math.PI);b>2*Math.PI&&(b-=2*Math.PI);b=!0===this.aClockwise?this.aEndAngle+(1-a)*(2*Math.PI-b):this.aStartAngle+a*b;a=this.aX+this.xRadius*Math.cos(b);var c=this.aY+this.yRadius*Math.sin(b);if(0!==this.aRotation){var b=Math.cos(this.aRotation),d=Math.sin(this.aRotation),e=a;a=(e-this.aX)*b-(c-this.aY)*d+this.aX;c=(e-this.aX)*d+(c-this.aY)*b+this.aY}return new THREE.Vector2(a,c)};THREE.ArcCurve=function(a,b,c,d,e,f){THREE.EllipseCurve.call(this,a,b,c,c,d,e,f)};THREE.ArcCurve.prototype=Object.create(THREE.EllipseCurve.prototype);THREE.ArcCurve.prototype.constructor=THREE.ArcCurve;THREE.LineCurve3=THREE.Curve.create(function(a,b){this.v1=a;this.v2=b},function(a){var b=new THREE.Vector3;b.subVectors(this.v2,this.v1);b.multiplyScalar(a);b.add(this.v1);return b});THREE.QuadraticBezierCurve3=THREE.Curve.create(function(a,b,c){this.v0=a;this.v1=b;this.v2=c},function(a){var b=THREE.ShapeUtils.b2;return new THREE.Vector3(b(a,this.v0.x,this.v1.x,this.v2.x),b(a,this.v0.y,this.v1.y,this.v2.y),b(a,this.v0.z,this.v1.z,this.v2.z))});THREE.CubicBezierCurve3=THREE.Curve.create(function(a,b,c,d){this.v0=a;this.v1=b;this.v2=c;this.v3=d},function(a){var b=THREE.ShapeUtils.b3;return new THREE.Vector3(b(a,this.v0.x,this.v1.x,this.v2.x,this.v3.x),b(a,this.v0.y,this.v1.y,this.v2.y,this.v3.y),b(a,this.v0.z,this.v1.z,this.v2.z,this.v3.z))});THREE.SplineCurve3=THREE.Curve.create(function(a){console.warn("THREE.SplineCurve3 will be deprecated. Please use THREE.CatmullRomCurve3");this.points=void 0==a?[]:a},function(a){var b=this.points;a*=b.length-1;var c=Math.floor(a);a-=c;var d=b[0==c?c:c-1],e=b[c],f=b[c>b.length-2?b.length-1:c+1],b=b[c>b.length-3?b.length-1:c+2],c=THREE.CurveUtils.interpolate;return new THREE.Vector3(c(d.x,e.x,f.x,b.x,a),c(d.y,e.y,f.y,b.y,a),c(d.z,e.z,f.z,b.z,a))});THREE.CatmullRomCurve3=function(){function a(){}var b=new THREE.Vector3,c=new a,d=new a,e=new a;a.prototype.init=function(a,b,c,d){this.c0=a;this.c1=c;this.c2=-3*a+3*b-2*c-d;this.c3=2*a-2*b+c+d};a.prototype.initNonuniformCatmullRom=function(a,b,c,d,e,p,n){a=((b-a)/e-(c-a)/(e+p)+(c-b)/p)*p;d=((c-b)/p-(d-b)/(p+n)+(d-c)/n)*p;this.init(b,c,a,d)};a.prototype.initCatmullRom=function(a,b,c,d,e){this.init(b,c,e*(c-a),e*(d-b))};a.prototype.calc=function(a){var b=a*a;return this.c0+this.c1*a+this.c2*b+this.c3*b*a};return THREE.Curve.create(function(a){this.points=a||[];this.closed=!1},function(a){var g=this.points,h,k;k=g.length;2>k&&console.log("duh, you need at least 2 points");a*=k-(this.closed?0:1);h=Math.floor(a);a-=h;this.closed?h+=0h&&(h=1);1e-4>k&&(k=h);1e-4>m&&(m=h);c.initNonuniformCatmullRom(l.x,p.x,n.x,g.x,k,h,m);d.initNonuniformCatmullRom(l.y,p.y,n.y,g.y,k,h,m);e.initNonuniformCatmullRom(l.z,p.z,n.z,g.z,k,h,m)}else"catmullrom"===this.type&&(k=void 0!==this.tension?this.tension:.5,c.initCatmullRom(l.x,p.x,n.x,g.x,k),d.initCatmullRom(l.y,p.y,n.y,g.y,k),e.initCatmullRom(l.z,p.z,n.z,g.z,k));return new THREE.Vector3(c.calc(a),d.calc(a),e.calc(a))})}();THREE.ClosedSplineCurve3=function(a){console.warn("THREE.ClosedSplineCurve3 has been deprecated. Please use THREE.CatmullRomCurve3.");THREE.CatmullRomCurve3.call(this,a);this.type="catmullrom";this.closed=!0};THREE.ClosedSplineCurve3.prototype=Object.create(THREE.CatmullRomCurve3.prototype);THREE.BoxGeometry=function(a,b,c,d,e,f){THREE.Geometry.call(this);this.type="BoxGeometry";this.parameters={width:a,height:b,depth:c,widthSegments:d,heightSegments:e,depthSegments:f};this.fromBufferGeometry(new THREE.BoxBufferGeometry(a,b,c,d,e,f));this.mergeVertices()};THREE.BoxGeometry.prototype=Object.create(THREE.Geometry.prototype);THREE.BoxGeometry.prototype.constructor=THREE.BoxGeometry;THREE.CubeGeometry=THREE.BoxGeometry;THREE.BoxBufferGeometry=function(a,b,c,d,e,f){function g(a,b,c,d,e,f,g,k,l,L,A){var N=f/l,M=g/L,I=f/2,O=g/2,Q=k/2;g=l+1;for(var P=L+1,T=f=0,J=new THREE.Vector3,C=0;Cm;m++){e[0]=n[g[m]];e[1]=n[g[(m+1)%3]];e.sort(c);var q=e.toString();void 0===f[q]?f[q]={vert1:e[0],vert2:e[1],face1:l,face2:void 0}:f[q].face2=l}e=[];for(q in f)if(g=f[q],void 0===g.face2||h[g.face1].normal.dot(h[g.face2].normal)<=d)l=k[g.vert1],e.push(l.x),e.push(l.y),e.push(l.z),l=k[g.vert2],e.push(l.x),e.push(l.y),e.push(l.z);this.addAttribute("position",new THREE.BufferAttribute(new Float32Array(e),3))};THREE.EdgesGeometry.prototype=Object.create(THREE.BufferGeometry.prototype);THREE.EdgesGeometry.prototype.constructor=THREE.EdgesGeometry;THREE.ExtrudeGeometry=function(a,b){"undefined"!==typeof a&&(THREE.Geometry.call(this),this.type="ExtrudeGeometry",a=Array.isArray(a)?a:[a],this.addShapeList(a,b),this.computeFaceNormals())};THREE.ExtrudeGeometry.prototype=Object.create(THREE.Geometry.prototype);THREE.ExtrudeGeometry.prototype.constructor=THREE.ExtrudeGeometry;THREE.ExtrudeGeometry.prototype.addShapeList=function(a,b){for(var c=a.length,d=0;dNumber.EPSILON){var k=Math.sqrt(h),l=Math.sqrt(f*f+g*g),h=b.x-e/k;b=b.y+d/k;f=((c.x-g/l-h)*g-(c.y+f/l-b)*f)/(d*g-e*f);c=h+d*f-a.x;a=b+e*f-a.y;d=c*c+a*a;if(2>=d)return new THREE.Vector2(c,a);d=Math.sqrt(d/2)}else a=!1,d>Number.EPSILON?f>Number.EPSILON&&(a=!0):d<-Number.EPSILON?f<-Number.EPSILON&&(a=!0):Math.sign(e)===Math.sign(g)&&(a=!0),a?(c=-e,a=d,d=Math.sqrt(h)):(c=d,a=e,d=Math.sqrt(h/2));return new THREE.Vector2(c/d,a/d)}function e(a,b){var c,d;for(C=a.length;0<=--C;){c=C;d=C-1;0>d&&(d=a.length-1);for(var e=0,f=q+2*p,e=0;eMath.abs(b.y-c.y)?[new THREE.Vector2(b.x,1-b.z),new THREE.Vector2(c.x,1-c.z),new THREE.Vector2(d.x,1-d.z),new THREE.Vector2(e.x,1-e.z)]:[new THREE.Vector2(b.y,1-b.z),new THREE.Vector2(c.y,1-c.z),new THREE.Vector2(d.y,1-d.z),new THREE.Vector2(e.y,1-e.z)]}};THREE.ShapeGeometry=function(a,b){THREE.Geometry.call(this);this.type="ShapeGeometry";!1===Array.isArray(a)&&(a=[a]);this.addShapeList(a,b);this.computeFaceNormals()};THREE.ShapeGeometry.prototype=Object.create(THREE.Geometry.prototype);THREE.ShapeGeometry.prototype.constructor=THREE.ShapeGeometry;THREE.ShapeGeometry.prototype.addShapeList=function(a,b){for(var c=0,d=a.length;cNumber.EPSILON&&(h.normalize(),d=Math.acos(THREE.Math.clamp(e[l-1].dot(e[l]),-1,1)),f[l].applyMatrix4(k.makeRotationAxis(h,d))),g[l].crossVectors(e[l],f[l]);if(c)for(d=Math.acos(THREE.Math.clamp(f[0].dot(f[b-1]),-1,1)),d/=b-1,0c&&1===a.x&&(a=new THREE.Vector2(a.x-1,a.y));0===b.x&&0===b.z&&(a=new THREE.Vector2(c/2/Math.PI+.5,a.y));return a.clone()}THREE.Geometry.call(this);this.type="PolyhedronGeometry";this.parameters={vertices:a,indices:b,radius:c,detail:d};c=c||1;d=d||0;for(var k=this,l=0,p=a.length;lq&&(.2>d&&(b[0].x+=1),.2>a&&(b[1].x+=1),.2>n&&(b[2].x+=1));l=0;for(p=this.vertices.length;ln;n++){c[0]=p[e[n]];c[1]=p[e[(n+1)%3]];c.sort(b);var m=c.toString();void 0===d[m]&&(k[2*h]=c[0],k[2*h+1]=c[1],d[m]=!0,h++)}c=new Float32Array(6*h);a=0;for(l=h;an;n++)d=f[k[2*a+n]],h=6*a+3*n,c[h+0]=d.x,c[h+1]=d.y,c[h+2]=d.z;this.addAttribute("position",new THREE.BufferAttribute(c,3))}else if(a instanceof THREE.BufferGeometry){if(null!==a.index){l=a.index.array;f=a.attributes.position;e=a.groups;h=0;0===e.length&&a.addGroup(0,l.length);k=new Uint32Array(2*l.length);g=0;for(p=e.length;gn;n++)c[0]=l[a+n],c[1]=l[a+(n+1)%3],c.sort(b),m=c.toString(),void 0===d[m]&&(k[2*h]=c[0],k[2*h+1]=c[1],d[m]=!0,h++)}c=new Float32Array(6*h);a=0;for(l=h;an;n++)h=6*a+3*n,d=k[2*a+n],c[h+0]=f.getX(d),c[h+1]=f.getY(d),c[h+2]=f.getZ(d)}else for(f=a.attributes.position.array,h=f.length/3,k=h/3,c=new Float32Array(6*h),a=0,l=k;an;n++)h=18*a+6*n,k=9*a+3*n,c[h+0]=f[k],c[h+1]=f[k+1],c[h+2]=f[k+2],d=9*a+(n+1)%3*3,c[h+3]=f[d],c[h+4]=f[d+1],c[h+5]=f[d+2];this.addAttribute("position",new THREE.BufferAttribute(c,3))}};THREE.WireframeGeometry.prototype=Object.create(THREE.BufferGeometry.prototype);THREE.WireframeGeometry.prototype.constructor=THREE.WireframeGeometry;THREE.AxisHelper=function(a){a=a||1;var b=new Float32Array([0,0,0,a,0,0,0,0,0,0,a,0,0,0,0,0,0,a]),c=new Float32Array([1,0,0,1,.6,0,0,1,0,.6,1,0,0,0,1,0,.6,1]);a=new THREE.BufferGeometry;a.addAttribute("position",new THREE.BufferAttribute(b,3));a.addAttribute("color",new THREE.BufferAttribute(c,3));b=new THREE.LineBasicMaterial({vertexColors:THREE.VertexColors});THREE.LineSegments.call(this,a,b)};THREE.AxisHelper.prototype=Object.create(THREE.LineSegments.prototype);THREE.AxisHelper.prototype.constructor=THREE.AxisHelper;THREE.ArrowHelper=function(){var a=new THREE.Geometry;a.vertices.push(new THREE.Vector3(0,0,0),new THREE.Vector3(0,1,0));var b=new THREE.CylinderGeometry(0,.5,1,5,1);b.translate(0,-.5,0);return function(c,d,e,f,g,h){THREE.Object3D.call(this);void 0===f&&(f=16776960);void 0===e&&(e=1);void 0===g&&(g=.2*e);void 0===h&&(h=.2*g);this.position.copy(d);this.line=new THREE.Line(a,new THREE.LineBasicMaterial({color:f}));this.line.matrixAutoUpdate=!1;this.add(this.line);this.cone=new THREE.Mesh(b,new THREE.MeshBasicMaterial({color:f}));this.cone.matrixAutoUpdate=!1;this.add(this.cone);this.setDirection(c);this.setLength(e,g,h)}}();THREE.ArrowHelper.prototype=Object.create(THREE.Object3D.prototype);THREE.ArrowHelper.prototype.constructor=THREE.ArrowHelper;THREE.ArrowHelper.prototype.setDirection=function(){var a=new THREE.Vector3,b;return function(c){.99999c.y?this.quaternion.set(1,0,0,0):(a.set(c.z,0,-c.x).normalize(),b=Math.acos(c.y),this.quaternion.setFromAxisAngle(a,b))}}();THREE.ArrowHelper.prototype.setLength=function(a,b,c){void 0===b&&(b=.2*a);void 0===c&&(c=.2*b);this.line.scale.set(1,Math.max(0,a-b),1);this.line.updateMatrix();this.cone.scale.set(c,b,c);this.cone.position.y=a;this.cone.updateMatrix()};THREE.ArrowHelper.prototype.setColor=function(a){this.line.material.color.set(a);this.cone.material.color.set(a)};THREE.BoxHelper=function(a){var b=new Uint16Array([0,1,1,2,2,3,3,0,4,5,5,6,6,7,7,4,0,4,1,5,2,6,3,7]),c=new Float32Array(24),d=new THREE.BufferGeometry;d.setIndex(new THREE.BufferAttribute(b,1));d.addAttribute("position",new THREE.BufferAttribute(c,3));THREE.LineSegments.call(this,d,new THREE.LineBasicMaterial({color:16776960}));void 0!==a&&this.update(a)};THREE.BoxHelper.prototype=Object.create(THREE.LineSegments.prototype);THREE.BoxHelper.prototype.constructor=THREE.BoxHelper;THREE.BoxHelper.prototype.update=function(){var a=new THREE.Box3;return function(b){a.setFromObject(b);if(!a.isEmpty()){b=a.min;var c=a.max,d=this.geometry.attributes.position,e=d.array;e[0]=c.x;e[1]=c.y;e[2]=c.z;e[3]=b.x;e[4]=c.y;e[5]=c.z;e[6]=b.x;e[7]=b.y;e[8]=c.z;e[9]=c.x;e[10]=b.y;e[11]=c.z;e[12]=c.x;e[13]=c.y;e[14]=b.z;e[15]=b.x;e[16]=c.y;e[17]=b.z;e[18]=b.x;e[19]=b.y;e[20]=b.z;e[21]=c.x;e[22]=b.y;e[23]=b.z;d.needsUpdate=!0;this.geometry.computeBoundingSphere()}}}();THREE.BoundingBoxHelper=function(a,b){var c=void 0!==b?b:8947848;this.object=a;this.box=new THREE.Box3;THREE.Mesh.call(this,new THREE.BoxGeometry(1,1,1),new THREE.MeshBasicMaterial({color:c,wireframe:!0}))};THREE.BoundingBoxHelper.prototype=Object.create(THREE.Mesh.prototype);THREE.BoundingBoxHelper.prototype.constructor=THREE.BoundingBoxHelper;THREE.BoundingBoxHelper.prototype.update=function(){this.box.setFromObject(this.object);this.box.size(this.scale);this.box.center(this.position)};THREE.CameraHelper=function(a){function b(a,b,d){c(a,d);c(b,d)}function c(a,b){d.vertices.push(new THREE.Vector3);d.colors.push(new THREE.Color(b));void 0===f[a]&&(f[a]=[]);f[a].push(d.vertices.length-1)}var d=new THREE.Geometry,e=new THREE.LineBasicMaterial({color:16777215,vertexColors:THREE.FaceColors}),f={};b("n1","n2",16755200);b("n2","n4",16755200);b("n4","n3",16755200);b("n3","n1",16755200);b("f1","f2",16755200);b("f2","f4",16755200);b("f4","f3",16755200);b("f3","f1",16755200);b("n1","f1",16755200);b("n2","f2",16755200);b("n3","f3",16755200);b("n4","f4",16755200);b("p","n1",16711680);b("p","n2",16711680);b("p","n3",16711680);b("p","n4",16711680);b("u1","u2",43775);b("u2","u3",43775);b("u3","u1",43775);b("c","t",16777215);b("p","c",3355443);b("cn1","cn2",3355443);b("cn3","cn4",3355443);b("cf1","cf2",3355443);b("cf3","cf4",3355443);THREE.LineSegments.call(this,d,e);this.camera=a;this.camera.updateProjectionMatrix();this.matrix=a.matrixWorld;this.matrixAutoUpdate=!1;this.pointMap=f;this.update()};THREE.CameraHelper.prototype=Object.create(THREE.LineSegments.prototype);THREE.CameraHelper.prototype.constructor=THREE.CameraHelper;THREE.CameraHelper.prototype.update=function(){function a(a,g,h,k){d.set(g,h,k).unproject(e);a=c[a];if(void 0!==a)for(g=0,h=a.length;gd;d++)c.faces[d].color=this.colors[4>d?0:1];d=new THREE.MeshBasicMaterial({vertexColors:THREE.FaceColors,wireframe:!0});this.lightSphere=new THREE.Mesh(c,d);this.add(this.lightSphere);this.update()};THREE.HemisphereLightHelper.prototype=Object.create(THREE.Object3D.prototype);THREE.HemisphereLightHelper.prototype.constructor=THREE.HemisphereLightHelper;THREE.HemisphereLightHelper.prototype.dispose=function(){this.lightSphere.geometry.dispose();this.lightSphere.material.dispose()};THREE.HemisphereLightHelper.prototype.update=function(){var a=new THREE.Vector3;return function(){this.colors[0].copy(this.light.color).multiplyScalar(this.light.intensity);this.colors[1].copy(this.light.groundColor).multiplyScalar(this.light.intensity);this.lightSphere.lookAt(a.setFromMatrixPosition(this.light.matrixWorld).negate());this.lightSphere.geometry.colorsNeedUpdate=!0}}();THREE.PointLightHelper=function(a,b){this.light=a;this.light.updateMatrixWorld();var c=new THREE.SphereGeometry(b,4,2),d=new THREE.MeshBasicMaterial({wireframe:!0,fog:!1});d.color.copy(this.light.color).multiplyScalar(this.light.intensity);THREE.Mesh.call(this,c,d);this.matrix=this.light.matrixWorld;this.matrixAutoUpdate=!1};THREE.PointLightHelper.prototype=Object.create(THREE.Mesh.prototype);THREE.PointLightHelper.prototype.constructor=THREE.PointLightHelper;THREE.PointLightHelper.prototype.dispose=function(){this.geometry.dispose();this.material.dispose()};THREE.PointLightHelper.prototype.update=function(){this.material.color.copy(this.light.color).multiplyScalar(this.light.intensity)};THREE.SkeletonHelper=function(a){this.bones=this.getBoneList(a);for(var b=new THREE.Geometry,c=0;ch.end&&(h.end=f);c||(c=k)}}for(k in d)h=d[k],this.createAnimation(k,h.start,h.end,a);this.firstAnimation=c};THREE.MorphBlendMesh.prototype.setAnimationDirectionForward=function(a){if(a=this.animationsMap[a])a.direction=1,a.directionBackwards=!1};THREE.MorphBlendMesh.prototype.setAnimationDirectionBackward=function(a){if(a=this.animationsMap[a])a.direction=-1,a.directionBackwards=!0};THREE.MorphBlendMesh.prototype.setAnimationFPS=function(a,b){var c=this.animationsMap[a];c&&(c.fps=b,c.duration=(c.end-c.start)/c.fps)};THREE.MorphBlendMesh.prototype.setAnimationDuration=function(a,b){var c=this.animationsMap[a];c&&(c.duration=b,c.fps=(c.end-c.start)/c.duration)};THREE.MorphBlendMesh.prototype.setAnimationWeight=function(a,b){var c=this.animationsMap[a];c&&(c.weight=b)};THREE.MorphBlendMesh.prototype.setAnimationTime=function(a,b){var c=this.animationsMap[a];c&&(c.time=b)};THREE.MorphBlendMesh.prototype.getAnimationTime=function(a){var b=0;if(a=this.animationsMap[a])b=a.time;return b};THREE.MorphBlendMesh.prototype.getAnimationDuration=function(a){var b=-1;if(a=this.animationsMap[a])b=a.duration;return b};THREE.MorphBlendMesh.prototype.playAnimation=function(a){var b=this.animationsMap[a];b?(b.time=0,b.active=!0):console.warn("THREE.MorphBlendMesh: animation["+a+"] undefined in .playAnimation()")};THREE.MorphBlendMesh.prototype.stopAnimation=function(a){if(a=this.animationsMap[a])a.active=!1};THREE.MorphBlendMesh.prototype.update=function(a){for(var b=0,c=this.animationsList.length;bd.duration||0>d.time)d.direction*=-1,d.time>d.duration&&(d.time=d.duration,d.directionBackwards=!0),0>d.time&&(d.time=0,d.directionBackwards=!1)}else d.time%=d.duration,0>d.time&&(d.time+=d.duration);var f=d.start+THREE.Math.clamp(Math.floor(d.time/e),0,d.length-1),g=d.weight;f!==d.currentFrame&&(this.morphTargetInfluences[d.lastFrame]=0,this.morphTargetInfluences[d.currentFrame]=1*g,this.morphTargetInfluences[f]=0,d.lastFrame=d.currentFrame,d.currentFrame=f);e=d.time%e/e;d.directionBackwards&&(e=1-e);d.currentFrame!==d.lastFrame?(this.morphTargetInfluences[d.currentFrame]=e*g,this.morphTargetInfluences[d.lastFrame]=(1-e)*g):this.morphTargetInfluences[d.currentFrame]=g}}};"use strict";void 0===Date.now&&(Date.now=function(){return(new Date).valueOf()});var TWEEN=TWEEN||function(){var a=[];return{REVISION:"14",getAll:function(){return a},removeAll:function(){a=[]},add:function(c){a.push(c)},remove:function(c){c=a.indexOf(c);-1!==c&&a.splice(c,1)},update:function(c){if(0===a.length)return!1;for(var b=0,c=void 0!==c?c:"undefined"!==typeof window&&void 0!==window.performance&&void 0!==window.performance.now?window.performance.now():Date.now();b(a*=2)?.5*a*a:-.5*(--a*(a-2)-1)}},Cubic:{In:function(a){return a*a*a},Out:function(a){return--a*a*a+1},InOut:function(a){return 1>(a*=2)?.5*a*a*a:.5*((a-=2)*a*a+2)}},Quartic:{In:function(a){return a*a*a*a},Out:function(a){return 1- --a*a*a*a},InOut:function(a){return 1>(a*=2)?.5*a*a*a*a:-.5*((a-=2)*a*a*a-2)}},Quintic:{In:function(a){return a*a*a*a*a},Out:function(a){return--a*a*a*a*a+1},InOut:function(a){return 1>(a*=2)?.5*a*a*a*a*a:.5*((a-=2)*a*a*a*a+2)}},Sinusoidal:{In:function(a){return 1-Math.cos(a*Math.PI/2)},Out:function(a){return Math.sin(a*Math.PI/2)},InOut:function(a){return.5*(1-Math.cos(Math.PI*a))}},Exponential:{In:function(a){return 0===a?0:Math.pow(1024,a-1)},Out:function(a){return 1===a?1:1-Math.pow(2,-10*a)},InOut:function(a){return 0===a?0:1===a?1:1>(a*=2)?.5*Math.pow(1024,a-1):.5*(-Math.pow(2,-10*(a-1))+2)}},Circular:{In:function(a){return 1-Math.sqrt(1-a*a)},Out:function(a){return Math.sqrt(1- --a*a)},InOut:function(a){return 1>(a*=2)?-.5*(Math.sqrt(1-a*a)-1):.5*(Math.sqrt(1-(a-=2)*a)+1)}},Elastic:{In:function(a){var c,b=.1;if(0===a)return 0;if(1===a)return 1;!b||1>b?(b=1,c=.1):c=.4*Math.asin(1/b)/(2*Math.PI);return-(b*Math.pow(2,10*(a-=1))*Math.sin((a-c)*2*Math.PI/.4))},Out:function(a){var c,b=.1;if(0===a)return 0;if(1===a)return 1;!b||1>b?(b=1,c=.1):c=.4*Math.asin(1/b)/(2*Math.PI);return b*Math.pow(2,-10*a)*Math.sin((a-c)*2*Math.PI/.4)+1},InOut:function(a){var c,b=.1;if(0===a)return 0;if(1===a)return 1;!b||1>b?(b=1,c=.1):c=.4*Math.asin(1/b)/(2*Math.PI);return 1>(a*=2)?-.5*b*Math.pow(2,10*(a-=1))*Math.sin((a-c)*2*Math.PI/.4):.5*b*Math.pow(2,-10*(a-=1))*Math.sin((a-c)*2*Math.PI/.4)+1}},Back:{In:function(a){return a*a*(2.70158*a-1.70158)},Out:function(a){return--a*a*(2.70158*a+1.70158)+1},InOut:function(a){return 1>(a*=2)?.5*a*a*(3.5949095*a-2.5949095):.5*((a-=2)*a*(3.5949095*a+2.5949095)+2)}},Bounce:{In:function(a){return 1-TWEEN.Easing.Bounce.Out(1-a)},Out:function(a){return a<1/2.75?7.5625*a*a:a<2/2.75?7.5625*(a-=1.5/2.75)*a+.75:a<2.5/2.75?7.5625*(a-=2.25/2.75)*a+.9375:7.5625*(a-=2.625/2.75)*a+.984375},InOut:function(a){return.5>a?.5*TWEEN.Easing.Bounce.In(2*a):.5*TWEEN.Easing.Bounce.Out(2*a-1)+.5}}};TWEEN.Interpolation={Linear:function(a,c){var b=a.length-1,d=b*c,e=Math.floor(d),g=TWEEN.Interpolation.Utils.Linear;return 0>c?g(a[0],a[1],d):1b?b:e+1],d-e)},Bezier:function(a,c){var b=0,d=a.length-1,e=Math.pow,g=TWEEN.Interpolation.Utils.Bernstein,h;for(h=0;h<=d;h++)b+=e(1-c,d-h)*e(c,h)*a[h]*g(d,h);return b},CatmullRom:function(a,c){var b=a.length-1,d=b*c,e=Math.floor(d),g=TWEEN.Interpolation.Utils.CatmullRom;return a[0]===a[b]?(0>c&&(e=Math.floor(d=b*(1+c))),g(a[(e-1+b)%b],a[e],a[(e+1)%b],a[(e+2)%b],d-e)):0>c?a[0]-(g(a[0],a[0],a[1],a[1],-d)-a[0]):1180){delta=delta-360}else if(delta<-180){delta=360+delta}return delta},initializeNavBall:function(){this.renderer=new THREE.WebGLRenderer({alpha:true,antialias:true});this.renderer.setSize(1,1);this.container.update(this.renderer.domElement);this.resize();Event.observe(window,"resize",this.resize.bind(this));var scene=new THREE.Scene;var camera=new THREE.PerspectiveCamera(32,1,.01,1e3);camera.position.z=190;scene.add(new THREE.AmbientLight(11184810));var light1=new THREE.DirectionalLight(16777215,1);light1.position.set(1500,1500,500);var light2=new THREE.DirectionalLight(16777215,.5);light2.position.set(-1500,-1500,500);scene.add(light1);scene.add(light2);var navballGeometry=new THREE.SphereGeometry(this.displayRadius,48,48);var navballTexture=THREE.ImageUtils.loadTexture("../assets/images/navball.png");navballTexture.anisotropy=this.renderer.getMaxAnisotropy();var navballMaterial=new THREE.MeshPhongMaterial({map:navballTexture,bumpMap:THREE.ImageUtils.loadTexture("../assets/images/navball-normal.png"),bumpScale:.25,shininess:80});this.navballMesh=new THREE.Mesh(navballGeometry,navballMaterial);scene.add(this.navballMesh);var animate=function(){window.setTimeout(function(){requestAnimationFrame(animate)},this.datalink.rate/60);TWEEN.update();this.renderer.render(scene,camera)}.bind(this);requestAnimationFrame(animate)},resize:function(){var width=this.container.getWidth();var height=this.container.getHeight();this.renderer.setSize(width,height)},initializeDatalink:function(){this.datalink.subscribeToData(["n.pitch","n.roll","n.heading"]);this.datalink.addReceiverFunction(this.update.bind(this))}});var OrbitalMath={partsOfUniversalDateTime:function(time){var parts={};if(time==null){time=0}parts.year=(time/(365*24*3600)|0)+1;time%=365*24*3600;parts.day=(time/(24*3600)|0)+1;time%=24*3600;parts.universalTime=time;parts.hour=time/3600|0;time%=3600;parts.minutes=time/60|0;parts.seconds=(time%60|0).toFixed();return parts},calculateGMSTInDegrees:function(universalDateTime){var timeParts=partsOfUniversalDateTime(universalDateTime);var G=6.697374558;var dayFactor=.06570982441908;var timeFactor=1.00273790935;return G+dayFactor*timeParts.day+timeFactor*timeParts.hour},eccentricAnomalyFromTrueAnomalyAndEcentricity:function(trueAnomaly,eccentricity){return 2*Math.atan(Math.sqrt((1-eccentricity)/(1+eccentricity))*Math.tan(trueAnomaly/2))},meanMotionFromGravitationalParametersAndSemimajorAxis:function(gravitationalParameter,semiMajorAxis,orbitalPeriod){return Math.sqrt(gravitationalParameter/Math.pow(semiMajorAxis,3))},meanAnomalyFromEccentricAnomalyAndEccentricity:function(eccentricAnomaly,eccentricity){return eccentricAnomaly-eccentricity*Math.sin(eccentricAnomaly)},meanAnomalyAtTimeAndMeanMotion:function(meanMotion,startTime,endTime,originalMeanAnomaly){var deltaT=endTime-startTime;return originalMeanAnomaly+meanMotion*deltaT},estimateEccentricAnomalyFromMeanAnomalyAndEccentricity:function(meanAnomaly,eccentricity){var error=100;var eccentricAnomaly1=meanAnomaly;while(error>1e-11){var newEccentricAnomaly=meanAnomaly+eccentricity*Math.sin(eccentricAnomaly1);error=Math.abs(newEccentricAnomaly-eccentricAnomaly1);eccentricAnomaly1=newEccentricAnomaly}return eccentricAnomaly1},trueAnomalyFromEccentricAnomalyAndEccentricity:function(eccentricAnomaly,eccentricity,meanAnomaly){var x=Math.sqrt(1-eccentricity)*Math.cos(eccentricAnomaly/2);var y=Math.sqrt(1+eccentricity)*Math.sin(eccentricAnomaly/2);return 2*Math.atan2(y,x)},findSemiLatusRectum:function(semiMajorAxis,eccentricity){var apoapsis=320565.458678732;var periapsis=102454.341836878;return 2*apoapsis*periapsis/(apoapsis+periapsis)},findPolarEquationOfConic:function(semiMajorAxis,eccentricity,trueAnomaly){var p=this.findSemiLatusRectum(semiMajorAxis,eccentricity);return p/(1+eccentricity*Math.cos(trueAnomaly))},positionVectorInPQWFrame:function(semiMajorAxis,eccentricity,trueAnomaly){var r=this.findPolarEquationOfConic(semiMajorAxis,eccentricity,trueAnomaly);var vector={};vector.p=r*Math.cos(trueAnomaly);vector.q=r*Math.sin(trueAnomaly);vector.w=0;return vector},velocityVectorInPQWFrame:function(semiMajorAxis,eccentricity,trueAnomaly,gravitationalParameter){var p=findSemiLatusRectum(semiMajorAxis,eccentricity);var factor=Math.sqrt(gravitationalParameter/p);var vector={};vector.p=-Math.sin(trueAnomaly);vector.q=eccentricity+Math.cos(trueAnomaly);vector.w=0;return vector},transformVector:function(matrix,vector){var vectorKeys=Object.keys(vector);var newVector={};for(var i=0;i0?1:-1;var theta=Math.atan(vector.j/vector.i);return theta-GMSTInRadians-angularVelocityOfPlanet*deltaT},TWR:function(thrust,totalMass,surfaceGravity){return thrust/(totalMass*surfaceGravity)},MaxTWR:function(maxAcceleration,surfaceGravity){return maxAcceleration/surfaceGravity},secondsToUseFuelAtCurrentThrust:function(massOfFuel,thrust,isp){if(thrust<=0||isp<=0){return-1}return massOfFuel/(thrust/isp*(1/9.81))},weightOfFuelUsedDuringBurn:function(thrust,isp,deltaT){return thrust/isp*(1/9.81)*deltaT},deltaVForBurn:function(thrust,startMass,endMass,deltaT){if(deltaT>0&&startMass>endMass&&startMass>0&&endMass>0){return thrust*deltaT/(startMass-endMass)*Math.log(startMass/endMass)}else{return 0}}};var CurrentStageBurnInfo=Class.create({initialize:function(datalink,atmoTableID,vacuumTableID){this.datalink=datalink;this.atmoTableID=atmoTableID;this.vacuumTableID=vacuumTableID;this.atmoDataTable=new DataTable(this.atmoTableID,[]);this.vacuumDataTable=new DataTable(this.vacuumTableID,[]);this.currentStageAtmo=null;this.currentStageVacuum=null;this.currentBody=null;this.initializeDatalink()},update:function(data){if(!data["mj.stagingInfo"]){return}if(this.currentBody==null||this.currentBody.name!=data["v.body"]){this.currentBody=this.datalink.getOrbitalBodyInfo(data["v.body"])}if(data["mj.stagingInfo"]["atmo"]){this.currentStageAtmo=this.calculateStageInfo(data["mj.stagingInfo"]["atmo"].last(),data)}if(data["mj.stagingInfo"]["vacuum"]){this.currentStageVacuum=this.calculateStageInfo(data["mj.stagingInfo"]["vacuum"].last(),data)}this.atmoDataTable.dataRows=this.dataRowsForStage(this.currentStageAtmo,data);this.vacuumDataTable.dataRows=this.dataRowsForStage(this.currentStageVacuum,data);this.atmoDataTable.update();this.vacuumDataTable.update()},subscribeToBodyData:function(data){this.currentBody=this.datalink.getOrbitalBodyInfo(data["v.body"]);this.datalink.subscribeToData(["b.o.gravParameter["+this.currentBody.id+"]"])},calculateStageInfo:function(stage,data){stage["currentThrust"]=stage["startThrust"]*data["f.throttle"];stage["currentTWR"]=OrbitalMath.TWR(stage["currentThrust"],stage["startMass"],this.currentBody.surfaceGravity);stage["timeUntilEmpty"]=OrbitalMath.secondsToUseFuelAtCurrentThrust(stage["resourceMass"],stage["currentThrust"],stage["isp"]);return stage},dataRowsForStage:function(stage,data){var timeUntilEmpty=stage["timeUntilEmpty"]<=0?"NA":DataFormatters.timeString(stage["timeUntilEmpty"]);return[{label:"Current Thrust",value:DataFormatters.newtonsString(stage["currentThrust"])+" ("+DataFormatters.percentageString(data["f.throttle"])+")"},{label:"TWR",value:DataFormatters.plainNumberString(stage["currentTWR"])},{label:"Remaining Fuel",value:DataFormatters.tonnageString(stage["resourceMass"])},{label:"Time until empty",value:timeUntilEmpty}]},initializeDatalink:function(){this.datalink.subscribeToData(["mj.stagingInfo","f.throttle","v.body"]);this.datalink.addReceiverFunction(this.update.bind(this))}});var BurnPlanner=Class.create({initialize:function(datalink,options){this.datalink=datalink;this.options=options||{};this.stage=null;this.currentBody=null;this.initializeDatalink()},update:function(data){if(!data["mj.stagingInfo"]){return}if(this.currentBody==null||this.currentBody.name!=data["v.body"]){this.currentBody=this.datalink.getOrbitalBodyInfo(data["v.body"])}this.getStage(data);if(this.stage){var burnedFuel=OrbitalMath.weightOfFuelUsedDuringBurn(this.thrust(),this.stage["isp"],this.burnTime());if(isNaN(burnedFuel)){burnedFuel=0}var endMass=this.stage["startMass"]-burnedFuel;var deltaV=OrbitalMath.deltaVForBurn(this.thrust(),this.stage["startMass"],endMass,this.burnTime());var TWR=OrbitalMath.TWR(this.thrust(),this.stage["startMass"],this.currentBody.surfaceGravity);if(isNaN(TWR)){TWR=0}var remainingFuel=this.stage["resourceMass"]-burnedFuel;window.requestAnimationFrame(function(){this.options.totalThrust.update(DataFormatters.newtonsString(this.stage["startThrust"]));this.options.startingFuel.update(DataFormatters.tonnageString(this.stage["resourceMass"]));this.options.formattedTime.update(DataFormatters.timeString(this.burnTime()||0));this.options.deltaV.update(DataFormatters.velocityString(deltaV));this.options.TWR.update(DataFormatters.plainNumberString(TWR));this.options.remainingFuel.update(DataFormatters.tonnageString(remainingFuel));if(remainingFuel<0){this.options.warning.update("Not enough fuel for burn!")}else{this.options.warning.update("")}}.bind(this))}else{window.requestAnimationFrame(function(){this.options.totalThrust.update("NA");this.options.startingFuel.update("NA");this.options.formattedTime.update("NA");this.options.deltaV.update("NA");this.options.TWR.update("NA");this.options.remainingFuel.update("NA");this.options.warning.update("Stage not found!")}.bind(this))}},getStage:function(data){this.stage=data["mj.stagingInfo"][this.mode()][this.stageIndex()]},stageIndex:function(){return parseInt(this.options.stage.value)},mode:function(){return this.options.mode.value},throttlePercentage:function(){var throttlePercentage=parseFloat(this.options.throttle.value);throttlePercentage=Math.max(0,throttlePercentage);throttlePercentage=Math.min(100,throttlePercentage);return throttlePercentage},throttle:function(){return this.throttlePercentage()/100},thrust:function(){if(!this.stage){return 0}return this.stage["startThrust"]*this.throttle()},burnTime:function(){return parseInt(this.options.burnTime.value)},initializeDatalink:function(){this.datalink.subscribeToData(["mj.stagingInfo","v.body"]);this.datalink.addReceiverFunction(this.update.bind(this))}});var StagingInfoTable=Class.create({initialize:function(datalink,stagingInfoTableID){this.datalink=datalink;this.stagingInfoTableID=stagingInfoTableID;this.stagingInfoTable=$(this.stagingInfoTableID);this.stagingInfoTableHeader=null;this.stagingInfoTableBody=null;this.currentBody=null;this.initializeTable();this.initializeDatalink()},update:function(data){if(!data["mj.stagingInfo"]){this.stagingInfoTableBody.update("");return}if(this.currentBody==null||this.currentBody.name!=data["v.body"]){this.currentBody=this.datalink.getOrbitalBodyInfo(data["v.body"])}var stagingInfo=data["mj.stagingInfo"];var stages=stagingInfo["atmo"].length;if(stages<=0){return}var documentFragment=document.createDocumentFragment();for(var i=0;i -1, + Gecko: ua.indexOf('Gecko') > -1 && ua.indexOf('KHTML') === -1, + MobileSafari: /Apple.*Mobile/.test(ua) + } + })(), + + BrowserFeatures: { + XPath: !!document.evaluate, + + SelectorsAPI: !!document.querySelector, + + ElementExtensions: (function() { + var constructor = window.Element || window.HTMLElement; + return !!(constructor && constructor.prototype); + })(), + SpecificElementExtensions: (function() { + if (typeof window.HTMLDivElement !== 'undefined') + return true; + + var div = document.createElement('div'), + form = document.createElement('form'), + isSupported = false; + + if (div['__proto__'] && (div['__proto__'] !== form['__proto__'])) { + isSupported = true; + } + + div = form = null; + + return isSupported; + })() + }, + + ScriptFragment: ']*>([\\S\\s]*?)<\/script\\s*>', + JSONFilter: /^\/\*-secure-([\s\S]*)\*\/\s*$/, + + emptyFunction: function() { }, + + K: function(x) { return x } +}; + +if (Prototype.Browser.MobileSafari) + Prototype.BrowserFeatures.SpecificElementExtensions = false; +/* Based on Alex Arnell's inheritance implementation. */ + +var Class = (function() { + + var IS_DONTENUM_BUGGY = (function(){ + for (var p in { toString: 1 }) { + if (p === 'toString') return false; + } + return true; + })(); + + function subclass() {}; + function create() { + var parent = null, properties = $A(arguments); + if (Object.isFunction(properties[0])) + parent = properties.shift(); + + function klass() { + this.initialize.apply(this, arguments); + } + + Object.extend(klass, Class.Methods); + klass.superclass = parent; + klass.subclasses = []; + + if (parent) { + subclass.prototype = parent.prototype; + klass.prototype = new subclass; + parent.subclasses.push(klass); + } + + for (var i = 0, length = properties.length; i < length; i++) + klass.addMethods(properties[i]); + + if (!klass.prototype.initialize) + klass.prototype.initialize = Prototype.emptyFunction; + + klass.prototype.constructor = klass; + return klass; + } + + function addMethods(source) { + var ancestor = this.superclass && this.superclass.prototype, + properties = Object.keys(source); + + if (IS_DONTENUM_BUGGY) { + if (source.toString != Object.prototype.toString) + properties.push("toString"); + if (source.valueOf != Object.prototype.valueOf) + properties.push("valueOf"); + } + + for (var i = 0, length = properties.length; i < length; i++) { + var property = properties[i], value = source[property]; + if (ancestor && Object.isFunction(value) && + value.argumentNames()[0] == "$super") { + var method = value; + value = (function(m) { + return function() { return ancestor[m].apply(this, arguments); }; + })(property).wrap(method); + + value.valueOf = (function(method) { + return function() { return method.valueOf.call(method); }; + })(method); + + value.toString = (function(method) { + return function() { return method.toString.call(method); }; + })(method); + } + this.prototype[property] = value; + } + + return this; + } + + return { + create: create, + Methods: { + addMethods: addMethods + } + }; +})(); +(function() { + + var _toString = Object.prototype.toString, + _hasOwnProperty = Object.prototype.hasOwnProperty, + NULL_TYPE = 'Null', + UNDEFINED_TYPE = 'Undefined', + BOOLEAN_TYPE = 'Boolean', + NUMBER_TYPE = 'Number', + STRING_TYPE = 'String', + OBJECT_TYPE = 'Object', + FUNCTION_CLASS = '[object Function]', + BOOLEAN_CLASS = '[object Boolean]', + NUMBER_CLASS = '[object Number]', + STRING_CLASS = '[object String]', + ARRAY_CLASS = '[object Array]', + DATE_CLASS = '[object Date]', + NATIVE_JSON_STRINGIFY_SUPPORT = window.JSON && + typeof JSON.stringify === 'function' && + JSON.stringify(0) === '0' && + typeof JSON.stringify(Prototype.K) === 'undefined'; + + + + var DONT_ENUMS = ['toString', 'toLocaleString', 'valueOf', + 'hasOwnProperty', 'isPrototypeOf', 'propertyIsEnumerable', 'constructor']; + + var IS_DONTENUM_BUGGY = (function(){ + for (var p in { toString: 1 }) { + if (p === 'toString') return false; + } + return true; + })(); + + function Type(o) { + switch(o) { + case null: return NULL_TYPE; + case (void 0): return UNDEFINED_TYPE; + } + var type = typeof o; + switch(type) { + case 'boolean': return BOOLEAN_TYPE; + case 'number': return NUMBER_TYPE; + case 'string': return STRING_TYPE; + } + return OBJECT_TYPE; + } + + function extend(destination, source) { + for (var property in source) + destination[property] = source[property]; + return destination; + } + + function inspect(object) { + try { + if (isUndefined(object)) return 'undefined'; + if (object === null) return 'null'; + return object.inspect ? object.inspect() : String(object); + } catch (e) { + if (e instanceof RangeError) return '...'; + throw e; + } + } + + function toJSON(value) { + return Str('', { '': value }, []); + } + + function Str(key, holder, stack) { + var value = holder[key]; + if (Type(value) === OBJECT_TYPE && typeof value.toJSON === 'function') { + value = value.toJSON(key); + } + + var _class = _toString.call(value); + + switch (_class) { + case NUMBER_CLASS: + case BOOLEAN_CLASS: + case STRING_CLASS: + value = value.valueOf(); + } + + switch (value) { + case null: return 'null'; + case true: return 'true'; + case false: return 'false'; + } + + var type = typeof value; + switch (type) { + case 'string': + return value.inspect(true); + case 'number': + return isFinite(value) ? String(value) : 'null'; + case 'object': + + for (var i = 0, length = stack.length; i < length; i++) { + if (stack[i] === value) { + throw new TypeError("Cyclic reference to '" + value + "' in object"); + } + } + stack.push(value); + + var partial = []; + if (_class === ARRAY_CLASS) { + for (var i = 0, length = value.length; i < length; i++) { + var str = Str(i, value, stack); + partial.push(typeof str === 'undefined' ? 'null' : str); + } + partial = '[' + partial.join(',') + ']'; + } else { + var keys = Object.keys(value); + for (var i = 0, length = keys.length; i < length; i++) { + var key = keys[i], str = Str(key, value, stack); + if (typeof str !== "undefined") { + partial.push(key.inspect(true)+ ':' + str); + } + } + partial = '{' + partial.join(',') + '}'; + } + stack.pop(); + return partial; + } + } + + function stringify(object) { + return JSON.stringify(object); + } + + function toQueryString(object) { + return $H(object).toQueryString(); + } + + function toHTML(object) { + return object && object.toHTML ? object.toHTML() : String.interpret(object); + } + + function keys(object) { + if (Type(object) !== OBJECT_TYPE) { throw new TypeError(); } + var results = []; + for (var property in object) { + if (_hasOwnProperty.call(object, property)) + results.push(property); + } + + if (IS_DONTENUM_BUGGY) { + for (var i = 0; property = DONT_ENUMS[i]; i++) { + if (_hasOwnProperty.call(object, property)) + results.push(property); + } + } + + return results; + } + + function values(object) { + var results = []; + for (var property in object) + results.push(object[property]); + return results; + } + + function clone(object) { + return extend({ }, object); + } + + function isElement(object) { + return !!(object && object.nodeType == 1); + } + + function isArray(object) { + return _toString.call(object) === ARRAY_CLASS; + } + + var hasNativeIsArray = (typeof Array.isArray == 'function') + && Array.isArray([]) && !Array.isArray({}); + + if (hasNativeIsArray) { + isArray = Array.isArray; + } + + function isHash(object) { + return object instanceof Hash; + } + + function isFunction(object) { + return _toString.call(object) === FUNCTION_CLASS; + } + + function isString(object) { + return _toString.call(object) === STRING_CLASS; + } + + function isNumber(object) { + return _toString.call(object) === NUMBER_CLASS; + } + + function isDate(object) { + return _toString.call(object) === DATE_CLASS; + } + + function isUndefined(object) { + return typeof object === "undefined"; + } + + extend(Object, { + extend: extend, + inspect: inspect, + toJSON: NATIVE_JSON_STRINGIFY_SUPPORT ? stringify : toJSON, + toQueryString: toQueryString, + toHTML: toHTML, + keys: Object.keys || keys, + values: values, + clone: clone, + isElement: isElement, + isArray: isArray, + isHash: isHash, + isFunction: isFunction, + isString: isString, + isNumber: isNumber, + isDate: isDate, + isUndefined: isUndefined + }); +})(); +Object.extend(Function.prototype, (function() { + var slice = Array.prototype.slice; + + function update(array, args) { + var arrayLength = array.length, length = args.length; + while (length--) array[arrayLength + length] = args[length]; + return array; + } + + function merge(array, args) { + array = slice.call(array, 0); + return update(array, args); + } + + function argumentNames() { + var names = this.toString().match(/^[\s\(]*function[^(]*\(([^)]*)\)/)[1] + .replace(/\/\/.*?[\r\n]|\/\*(?:.|[\r\n])*?\*\//g, '') + .replace(/\s+/g, '').split(','); + return names.length == 1 && !names[0] ? [] : names; + } + + + function bind(context) { + if (arguments.length < 2 && Object.isUndefined(arguments[0])) + return this; + + if (!Object.isFunction(this)) + throw new TypeError("The object is not callable."); + + var nop = function() {}; + var __method = this, args = slice.call(arguments, 1); + + var bound = function() { + var a = merge(args, arguments); + var c = this instanceof bound ? this : context; + return __method.apply(c, a); + }; + + nop.prototype = this.prototype; + bound.prototype = new nop(); + + return bound; + } + + function bindAsEventListener(context) { + var __method = this, args = slice.call(arguments, 1); + return function(event) { + var a = update([event || window.event], args); + return __method.apply(context, a); + } + } + + function curry() { + if (!arguments.length) return this; + var __method = this, args = slice.call(arguments, 0); + return function() { + var a = merge(args, arguments); + return __method.apply(this, a); + } + } + + function delay(timeout) { + var __method = this, args = slice.call(arguments, 1); + timeout = timeout * 1000; + return window.setTimeout(function() { + return __method.apply(__method, args); + }, timeout); + } + + function defer() { + var args = update([0.01], arguments); + return this.delay.apply(this, args); + } + + function wrap(wrapper) { + var __method = this; + return function() { + var a = update([__method.bind(this)], arguments); + return wrapper.apply(this, a); + } + } + + function methodize() { + if (this._methodized) return this._methodized; + var __method = this; + return this._methodized = function() { + var a = update([this], arguments); + return __method.apply(null, a); + }; + } + + var extensions = { + argumentNames: argumentNames, + bindAsEventListener: bindAsEventListener, + curry: curry, + delay: delay, + defer: defer, + wrap: wrap, + methodize: methodize + }; + + if (!Function.prototype.bind) + extensions.bind = bind; + + return extensions; +})()); + + + +(function(proto) { + + + function toISOString() { + return this.getUTCFullYear() + '-' + + (this.getUTCMonth() + 1).toPaddedString(2) + '-' + + this.getUTCDate().toPaddedString(2) + 'T' + + this.getUTCHours().toPaddedString(2) + ':' + + this.getUTCMinutes().toPaddedString(2) + ':' + + this.getUTCSeconds().toPaddedString(2) + 'Z'; + } + + + function toJSON() { + return this.toISOString(); + } + + if (!proto.toISOString) proto.toISOString = toISOString; + if (!proto.toJSON) proto.toJSON = toJSON; + +})(Date.prototype); + + +RegExp.prototype.match = RegExp.prototype.test; + +RegExp.escape = function(str) { + return String(str).replace(/([.*+?^=!:${}()|[\]\/\\])/g, '\\$1'); +}; +var PeriodicalExecuter = Class.create({ + initialize: function(callback, frequency) { + this.callback = callback; + this.frequency = frequency; + this.currentlyExecuting = false; + + this.registerCallback(); + }, + + registerCallback: function() { + this.timer = setInterval(this.onTimerEvent.bind(this), this.frequency * 1000); + }, + + execute: function() { + this.callback(this); + }, + + stop: function() { + if (!this.timer) return; + clearInterval(this.timer); + this.timer = null; + }, + + onTimerEvent: function() { + if (!this.currentlyExecuting) { + try { + this.currentlyExecuting = true; + this.execute(); + this.currentlyExecuting = false; + } catch(e) { + this.currentlyExecuting = false; + throw e; + } + } + } +}); +Object.extend(String, { + interpret: function(value) { + return value == null ? '' : String(value); + }, + specialChar: { + '\b': '\\b', + '\t': '\\t', + '\n': '\\n', + '\f': '\\f', + '\r': '\\r', + '\\': '\\\\' + } +}); + +Object.extend(String.prototype, (function() { + var NATIVE_JSON_PARSE_SUPPORT = window.JSON && + typeof JSON.parse === 'function' && + JSON.parse('{"test": true}').test; + + function prepareReplacement(replacement) { + if (Object.isFunction(replacement)) return replacement; + var template = new Template(replacement); + return function(match) { return template.evaluate(match) }; + } + + function isNonEmptyRegExp(regexp) { + return regexp.source && regexp.source !== '(?:)'; + } + + + function gsub(pattern, replacement) { + var result = '', source = this, match; + replacement = prepareReplacement(replacement); + + if (Object.isString(pattern)) + pattern = RegExp.escape(pattern); + + if (!(pattern.length || isNonEmptyRegExp(pattern))) { + replacement = replacement(''); + return replacement + source.split('').join(replacement) + replacement; + } + + while (source.length > 0) { + match = source.match(pattern) + if (match && match[0].length > 0) { + result += source.slice(0, match.index); + result += String.interpret(replacement(match)); + source = source.slice(match.index + match[0].length); + } else { + result += source, source = ''; + } + } + return result; + } + + function sub(pattern, replacement, count) { + replacement = prepareReplacement(replacement); + count = Object.isUndefined(count) ? 1 : count; + + return this.gsub(pattern, function(match) { + if (--count < 0) return match[0]; + return replacement(match); + }); + } + + function scan(pattern, iterator) { + this.gsub(pattern, iterator); + return String(this); + } + + function truncate(length, truncation) { + length = length || 30; + truncation = Object.isUndefined(truncation) ? '...' : truncation; + return this.length > length ? + this.slice(0, length - truncation.length) + truncation : String(this); + } + + function strip() { + return this.replace(/^\s+/, '').replace(/\s+$/, ''); + } + + function stripTags() { + return this.replace(/<\w+(\s+("[^"]*"|'[^']*'|[^>])+)?>|<\/\w+>/gi, ''); + } + + function stripScripts() { + return this.replace(new RegExp(Prototype.ScriptFragment, 'img'), ''); + } + + function extractScripts() { + var matchAll = new RegExp(Prototype.ScriptFragment, 'img'), + matchOne = new RegExp(Prototype.ScriptFragment, 'im'); + return (this.match(matchAll) || []).map(function(scriptTag) { + return (scriptTag.match(matchOne) || ['', ''])[1]; + }); + } + + function evalScripts() { + return this.extractScripts().map(function(script) { return eval(script); }); + } + + function escapeHTML() { + return this.replace(/&/g,'&').replace(//g,'>'); + } + + function unescapeHTML() { + return this.stripTags().replace(/</g,'<').replace(/>/g,'>').replace(/&/g,'&'); + } + + + function toQueryParams(separator) { + var match = this.strip().match(/([^?#]*)(#.*)?$/); + if (!match) return { }; + + return match[1].split(separator || '&').inject({ }, function(hash, pair) { + if ((pair = pair.split('='))[0]) { + var key = decodeURIComponent(pair.shift()), + value = pair.length > 1 ? pair.join('=') : pair[0]; + + if (value != undefined) { + value = value.gsub('+', ' '); + value = decodeURIComponent(value); + } + + if (key in hash) { + if (!Object.isArray(hash[key])) hash[key] = [hash[key]]; + hash[key].push(value); + } + else hash[key] = value; + } + return hash; + }); + } + + function toArray() { + return this.split(''); + } + + function succ() { + return this.slice(0, this.length - 1) + + String.fromCharCode(this.charCodeAt(this.length - 1) + 1); + } + + function times(count) { + return count < 1 ? '' : new Array(count + 1).join(this); + } + + function camelize() { + return this.replace(/-+(.)?/g, function(match, chr) { + return chr ? chr.toUpperCase() : ''; + }); + } + + function capitalize() { + return this.charAt(0).toUpperCase() + this.substring(1).toLowerCase(); + } + + function underscore() { + return this.replace(/::/g, '/') + .replace(/([A-Z]+)([A-Z][a-z])/g, '$1_$2') + .replace(/([a-z\d])([A-Z])/g, '$1_$2') + .replace(/-/g, '_') + .toLowerCase(); + } + + function dasherize() { + return this.replace(/_/g, '-'); + } + + function inspect(useDoubleQuotes) { + var escapedString = this.replace(/[\x00-\x1f\\]/g, function(character) { + if (character in String.specialChar) { + return String.specialChar[character]; + } + return '\\u00' + character.charCodeAt().toPaddedString(2, 16); + }); + if (useDoubleQuotes) return '"' + escapedString.replace(/"/g, '\\"') + '"'; + return "'" + escapedString.replace(/'/g, '\\\'') + "'"; + } + + function unfilterJSON(filter) { + return this.replace(filter || Prototype.JSONFilter, '$1'); + } + + function isJSON() { + var str = this; + if (str.blank()) return false; + str = str.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@'); + str = str.replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']'); + str = str.replace(/(?:^|:|,)(?:\s*\[)+/g, ''); + return (/^[\],:{}\s]*$/).test(str); + } + + function evalJSON(sanitize) { + var json = this.unfilterJSON(), + cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g; + if (cx.test(json)) { + json = json.replace(cx, function (a) { + return '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4); + }); + } + try { + if (!sanitize || json.isJSON()) return eval('(' + json + ')'); + } catch (e) { } + throw new SyntaxError('Badly formed JSON string: ' + this.inspect()); + } + + function parseJSON() { + var json = this.unfilterJSON(); + return JSON.parse(json); + } + + function include(pattern) { + return this.indexOf(pattern) > -1; + } + + function startsWith(pattern, position) { + position = Object.isNumber(position) ? position : 0; + return this.lastIndexOf(pattern, position) === position; + } + + function endsWith(pattern, position) { + pattern = String(pattern); + position = Object.isNumber(position) ? position : this.length; + if (position < 0) position = 0; + if (position > this.length) position = this.length; + var d = position - pattern.length; + return d >= 0 && this.indexOf(pattern, d) === d; + } + + function empty() { + return this == ''; + } + + function blank() { + return /^\s*$/.test(this); + } + + function interpolate(object, pattern) { + return new Template(this, pattern).evaluate(object); + } + + return { + gsub: gsub, + sub: sub, + scan: scan, + truncate: truncate, + strip: String.prototype.trim || strip, + stripTags: stripTags, + stripScripts: stripScripts, + extractScripts: extractScripts, + evalScripts: evalScripts, + escapeHTML: escapeHTML, + unescapeHTML: unescapeHTML, + toQueryParams: toQueryParams, + parseQuery: toQueryParams, + toArray: toArray, + succ: succ, + times: times, + camelize: camelize, + capitalize: capitalize, + underscore: underscore, + dasherize: dasherize, + inspect: inspect, + unfilterJSON: unfilterJSON, + isJSON: isJSON, + evalJSON: NATIVE_JSON_PARSE_SUPPORT ? parseJSON : evalJSON, + include: include, + startsWith: String.prototype.startsWith || startsWith, + endsWith: String.prototype.endsWith || endsWith, + empty: empty, + blank: blank, + interpolate: interpolate + }; +})()); + +var Template = Class.create({ + initialize: function(template, pattern) { + this.template = template.toString(); + this.pattern = pattern || Template.Pattern; + }, + + evaluate: function(object) { + if (object && Object.isFunction(object.toTemplateReplacements)) + object = object.toTemplateReplacements(); + + return this.template.gsub(this.pattern, function(match) { + if (object == null) return (match[1] + ''); + + var before = match[1] || ''; + if (before == '\\') return match[2]; + + var ctx = object, expr = match[3], + pattern = /^([^.[]+|\[((?:.*?[^\\])?)\])(\.|\[|$)/; + + match = pattern.exec(expr); + if (match == null) return before; + + while (match != null) { + var comp = match[1].startsWith('[') ? match[2].replace(/\\\\]/g, ']') : match[1]; + ctx = ctx[comp]; + if (null == ctx || '' == match[3]) break; + expr = expr.substring('[' == match[3] ? match[1].length : match[0].length); + match = pattern.exec(expr); + } + + return before + String.interpret(ctx); + }); + } +}); +Template.Pattern = /(^|.|\r|\n)(#\{(.*?)\})/; + +var $break = { }; + +var Enumerable = (function() { + function each(iterator, context) { + try { + this._each(iterator, context); + } catch (e) { + if (e != $break) throw e; + } + return this; + } + + function eachSlice(number, iterator, context) { + var index = -number, slices = [], array = this.toArray(); + if (number < 1) return array; + while ((index += number) < array.length) + slices.push(array.slice(index, index+number)); + return slices.collect(iterator, context); + } + + function all(iterator, context) { + iterator = iterator || Prototype.K; + var result = true; + this.each(function(value, index) { + result = result && !!iterator.call(context, value, index, this); + if (!result) throw $break; + }, this); + return result; + } + + function any(iterator, context) { + iterator = iterator || Prototype.K; + var result = false; + this.each(function(value, index) { + if (result = !!iterator.call(context, value, index, this)) + throw $break; + }, this); + return result; + } + + function collect(iterator, context) { + iterator = iterator || Prototype.K; + var results = []; + this.each(function(value, index) { + results.push(iterator.call(context, value, index, this)); + }, this); + return results; + } + + function detect(iterator, context) { + var result; + this.each(function(value, index) { + if (iterator.call(context, value, index, this)) { + result = value; + throw $break; + } + }, this); + return result; + } + + function findAll(iterator, context) { + var results = []; + this.each(function(value, index) { + if (iterator.call(context, value, index, this)) + results.push(value); + }, this); + return results; + } + + function grep(filter, iterator, context) { + iterator = iterator || Prototype.K; + var results = []; + + if (Object.isString(filter)) + filter = new RegExp(RegExp.escape(filter)); + + this.each(function(value, index) { + if (filter.match(value)) + results.push(iterator.call(context, value, index, this)); + }, this); + return results; + } + + function include(object) { + if (Object.isFunction(this.indexOf) && this.indexOf(object) != -1) + return true; + + var found = false; + this.each(function(value) { + if (value == object) { + found = true; + throw $break; + } + }); + return found; + } + + function inGroupsOf(number, fillWith) { + fillWith = Object.isUndefined(fillWith) ? null : fillWith; + return this.eachSlice(number, function(slice) { + while(slice.length < number) slice.push(fillWith); + return slice; + }); + } + + function inject(memo, iterator, context) { + this.each(function(value, index) { + memo = iterator.call(context, memo, value, index, this); + }, this); + return memo; + } + + function invoke(method) { + var args = $A(arguments).slice(1); + return this.map(function(value) { + return value[method].apply(value, args); + }); + } + + function max(iterator, context) { + iterator = iterator || Prototype.K; + var result; + this.each(function(value, index) { + value = iterator.call(context, value, index, this); + if (result == null || value >= result) + result = value; + }, this); + return result; + } + + function min(iterator, context) { + iterator = iterator || Prototype.K; + var result; + this.each(function(value, index) { + value = iterator.call(context, value, index, this); + if (result == null || value < result) + result = value; + }, this); + return result; + } + + function partition(iterator, context) { + iterator = iterator || Prototype.K; + var trues = [], falses = []; + this.each(function(value, index) { + (iterator.call(context, value, index, this) ? + trues : falses).push(value); + }, this); + return [trues, falses]; + } + + function pluck(property) { + var results = []; + this.each(function(value) { + results.push(value[property]); + }); + return results; + } + + function reject(iterator, context) { + var results = []; + this.each(function(value, index) { + if (!iterator.call(context, value, index, this)) + results.push(value); + }, this); + return results; + } + + function sortBy(iterator, context) { + return this.map(function(value, index) { + return { + value: value, + criteria: iterator.call(context, value, index, this) + }; + }, this).sort(function(left, right) { + var a = left.criteria, b = right.criteria; + return a < b ? -1 : a > b ? 1 : 0; + }).pluck('value'); + } + + function toArray() { + return this.map(); + } + + function zip() { + var iterator = Prototype.K, args = $A(arguments); + if (Object.isFunction(args.last())) + iterator = args.pop(); + + var collections = [this].concat(args).map($A); + return this.map(function(value, index) { + return iterator(collections.pluck(index)); + }); + } + + function size() { + return this.toArray().length; + } + + function inspect() { + return '#'; + } + + + + + + + + + + return { + each: each, + eachSlice: eachSlice, + all: all, + every: all, + any: any, + some: any, + collect: collect, + map: collect, + detect: detect, + findAll: findAll, + select: findAll, + filter: findAll, + grep: grep, + include: include, + member: include, + inGroupsOf: inGroupsOf, + inject: inject, + invoke: invoke, + max: max, + min: min, + partition: partition, + pluck: pluck, + reject: reject, + sortBy: sortBy, + toArray: toArray, + entries: toArray, + zip: zip, + size: size, + inspect: inspect, + find: detect + }; +})(); + +function $A(iterable) { + if (!iterable) return []; + if ('toArray' in Object(iterable)) return iterable.toArray(); + var length = iterable.length || 0, results = new Array(length); + while (length--) results[length] = iterable[length]; + return results; +} + + +function $w(string) { + if (!Object.isString(string)) return []; + string = string.strip(); + return string ? string.split(/\s+/) : []; +} + +Array.from = $A; + + +(function() { + var arrayProto = Array.prototype, + slice = arrayProto.slice, + _each = arrayProto.forEach; // use native browser JS 1.6 implementation if available + + function each(iterator, context) { + for (var i = 0, length = this.length >>> 0; i < length; i++) { + if (i in this) iterator.call(context, this[i], i, this); + } + } + if (!_each) _each = each; + + function clear() { + this.length = 0; + return this; + } + + function first() { + return this[0]; + } + + function last() { + return this[this.length - 1]; + } + + function compact() { + return this.select(function(value) { + return value != null; + }); + } + + function flatten() { + return this.inject([], function(array, value) { + if (Object.isArray(value)) + return array.concat(value.flatten()); + array.push(value); + return array; + }); + } + + function without() { + var values = slice.call(arguments, 0); + return this.select(function(value) { + return !values.include(value); + }); + } + + function reverse(inline) { + return (inline === false ? this.toArray() : this)._reverse(); + } + + function uniq(sorted) { + return this.inject([], function(array, value, index) { + if (0 == index || (sorted ? array.last() != value : !array.include(value))) + array.push(value); + return array; + }); + } + + function intersect(array) { + return this.uniq().findAll(function(item) { + return array.indexOf(item) !== -1; + }); + } + + + function clone() { + return slice.call(this, 0); + } + + function size() { + return this.length; + } + + function inspect() { + return '[' + this.map(Object.inspect).join(', ') + ']'; + } + + function indexOf(item, i) { + if (this == null) throw new TypeError(); + + var array = Object(this), length = array.length >>> 0; + if (length === 0) return -1; + + i = Number(i); + if (isNaN(i)) { + i = 0; + } else if (i !== 0 && isFinite(i)) { + i = (i > 0 ? 1 : -1) * Math.floor(Math.abs(i)); + } + + if (i > length) return -1; + + var k = i >= 0 ? i : Math.max(length - Math.abs(i), 0); + for (; k < length; k++) + if (k in array && array[k] === item) return k; + return -1; + } + + + function lastIndexOf(item, i) { + if (this == null) throw new TypeError(); + + var array = Object(this), length = array.length >>> 0; + if (length === 0) return -1; + + if (!Object.isUndefined(i)) { + i = Number(i); + if (isNaN(i)) { + i = 0; + } else if (i !== 0 && isFinite(i)) { + i = (i > 0 ? 1 : -1) * Math.floor(Math.abs(i)); + } + } else { + i = length; + } + + var k = i >= 0 ? Math.min(i, length - 1) : + length - Math.abs(i); + + for (; k >= 0; k--) + if (k in array && array[k] === item) return k; + return -1; + } + + function concat(_) { + var array = [], items = slice.call(arguments, 0), item, n = 0; + items.unshift(this); + for (var i = 0, length = items.length; i < length; i++) { + item = items[i]; + if (Object.isArray(item) && !('callee' in item)) { + for (var j = 0, arrayLength = item.length; j < arrayLength; j++) { + if (j in item) array[n] = item[j]; + n++; + } + } else { + array[n++] = item; + } + } + array.length = n; + return array; + } + + + function wrapNative(method) { + return function() { + if (arguments.length === 0) { + return method.call(this, Prototype.K); + } else if (arguments[0] === undefined) { + var args = slice.call(arguments, 1); + args.unshift(Prototype.K); + return method.apply(this, args); + } else { + return method.apply(this, arguments); + } + }; + } + + + function map(iterator) { + if (this == null) throw new TypeError(); + iterator = iterator || Prototype.K; + + var object = Object(this); + var results = [], context = arguments[1], n = 0; + + for (var i = 0, length = object.length >>> 0; i < length; i++) { + if (i in object) { + results[n] = iterator.call(context, object[i], i, object); + } + n++; + } + results.length = n; + return results; + } + + if (arrayProto.map) { + map = wrapNative(Array.prototype.map); + } + + function filter(iterator) { + if (this == null || !Object.isFunction(iterator)) + throw new TypeError(); + + var object = Object(this); + var results = [], context = arguments[1], value; + + for (var i = 0, length = object.length >>> 0; i < length; i++) { + if (i in object) { + value = object[i]; + if (iterator.call(context, value, i, object)) { + results.push(value); + } + } + } + return results; + } + + if (arrayProto.filter) { + filter = Array.prototype.filter; + } + + function some(iterator) { + if (this == null) throw new TypeError(); + iterator = iterator || Prototype.K; + var context = arguments[1]; + + var object = Object(this); + for (var i = 0, length = object.length >>> 0; i < length; i++) { + if (i in object && iterator.call(context, object[i], i, object)) { + return true; + } + } + + return false; + } + + if (arrayProto.some) { + var some = wrapNative(Array.prototype.some); + } + + + function every(iterator) { + if (this == null) throw new TypeError(); + iterator = iterator || Prototype.K; + var context = arguments[1]; + + var object = Object(this); + for (var i = 0, length = object.length >>> 0; i < length; i++) { + if (i in object && !iterator.call(context, object[i], i, object)) { + return false; + } + } + + return true; + } + + if (arrayProto.every) { + var every = wrapNative(Array.prototype.every); + } + + var _reduce = arrayProto.reduce; + function inject(memo, iterator) { + iterator = iterator || Prototype.K; + var context = arguments[2]; + return _reduce.call(this, iterator.bind(context), memo); + } + + if (!arrayProto.reduce) { + var inject = Enumerable.inject; + } + + Object.extend(arrayProto, Enumerable); + + if (!arrayProto._reverse) + arrayProto._reverse = arrayProto.reverse; + + Object.extend(arrayProto, { + _each: _each, + + map: map, + collect: map, + select: filter, + filter: filter, + findAll: filter, + some: some, + any: some, + every: every, + all: every, + inject: inject, + + clear: clear, + first: first, + last: last, + compact: compact, + flatten: flatten, + without: without, + reverse: reverse, + uniq: uniq, + intersect: intersect, + clone: clone, + toArray: clone, + size: size, + inspect: inspect + }); + + var CONCAT_ARGUMENTS_BUGGY = (function() { + return [].concat(arguments)[0][0] !== 1; + })(1,2); + + if (CONCAT_ARGUMENTS_BUGGY) arrayProto.concat = concat; + + if (!arrayProto.indexOf) arrayProto.indexOf = indexOf; + if (!arrayProto.lastIndexOf) arrayProto.lastIndexOf = lastIndexOf; +})(); +function $H(object) { + return new Hash(object); +}; + +var Hash = Class.create(Enumerable, (function() { + function initialize(object) { + this._object = Object.isHash(object) ? object.toObject() : Object.clone(object); + } + + + function _each(iterator, context) { + var i = 0; + for (var key in this._object) { + var value = this._object[key], pair = [key, value]; + pair.key = key; + pair.value = value; + iterator.call(context, pair, i); + i++; + } + } + + function set(key, value) { + return this._object[key] = value; + } + + function get(key) { + if (this._object[key] !== Object.prototype[key]) + return this._object[key]; + } + + function unset(key) { + var value = this._object[key]; + delete this._object[key]; + return value; + } + + function toObject() { + return Object.clone(this._object); + } + + + + function keys() { + return this.pluck('key'); + } + + function values() { + return this.pluck('value'); + } + + function index(value) { + var match = this.detect(function(pair) { + return pair.value === value; + }); + return match && match.key; + } + + function merge(object) { + return this.clone().update(object); + } + + function update(object) { + return new Hash(object).inject(this, function(result, pair) { + result.set(pair.key, pair.value); + return result; + }); + } + + function toQueryPair(key, value) { + if (Object.isUndefined(value)) return key; + + value = String.interpret(value); + + value = value.gsub(/(\r)?\n/, '\r\n'); + value = encodeURIComponent(value); + value = value.gsub(/%20/, '+'); + return key + '=' + value; + } + + function toQueryString() { + return this.inject([], function(results, pair) { + var key = encodeURIComponent(pair.key), values = pair.value; + + if (values && typeof values == 'object') { + if (Object.isArray(values)) { + var queryValues = []; + for (var i = 0, len = values.length, value; i < len; i++) { + value = values[i]; + queryValues.push(toQueryPair(key, value)); + } + return results.concat(queryValues); + } + } else results.push(toQueryPair(key, values)); + return results; + }).join('&'); + } + + function inspect() { + return '#'; + } + + function clone() { + return new Hash(this); + } + + return { + initialize: initialize, + _each: _each, + set: set, + get: get, + unset: unset, + toObject: toObject, + toTemplateReplacements: toObject, + keys: keys, + values: values, + index: index, + merge: merge, + update: update, + toQueryString: toQueryString, + inspect: inspect, + toJSON: toObject, + clone: clone + }; +})()); + +Hash.from = $H; +Object.extend(Number.prototype, (function() { + function toColorPart() { + return this.toPaddedString(2, 16); + } + + function succ() { + return this + 1; + } + + function times(iterator, context) { + $R(0, this, true).each(iterator, context); + return this; + } + + function toPaddedString(length, radix) { + var string = this.toString(radix || 10); + return '0'.times(length - string.length) + string; + } + + function abs() { + return Math.abs(this); + } + + function round() { + return Math.round(this); + } + + function ceil() { + return Math.ceil(this); + } + + function floor() { + return Math.floor(this); + } + + return { + toColorPart: toColorPart, + succ: succ, + times: times, + toPaddedString: toPaddedString, + abs: abs, + round: round, + ceil: ceil, + floor: floor + }; +})()); + +function $R(start, end, exclusive) { + return new ObjectRange(start, end, exclusive); +} + +var ObjectRange = Class.create(Enumerable, (function() { + function initialize(start, end, exclusive) { + this.start = start; + this.end = end; + this.exclusive = exclusive; + } + + function _each(iterator, context) { + var value = this.start, i; + for (i = 0; this.include(value); i++) { + iterator.call(context, value, i); + value = value.succ(); + } + } + + function include(value) { + if (value < this.start) + return false; + if (this.exclusive) + return value < this.end; + return value <= this.end; + } + + return { + initialize: initialize, + _each: _each, + include: include + }; +})()); + + + +var Abstract = { }; + + +var Try = { + these: function() { + var returnValue; + + for (var i = 0, length = arguments.length; i < length; i++) { + var lambda = arguments[i]; + try { + returnValue = lambda(); + break; + } catch (e) { } + } + + return returnValue; + } +}; + +var Ajax = { + getTransport: function() { + return Try.these( + function() {return new XMLHttpRequest()}, + function() {return new ActiveXObject('Msxml2.XMLHTTP')}, + function() {return new ActiveXObject('Microsoft.XMLHTTP')} + ) || false; + }, + + activeRequestCount: 0 +}; + +Ajax.Responders = { + responders: [], + + _each: function(iterator, context) { + this.responders._each(iterator, context); + }, + + register: function(responder) { + if (!this.include(responder)) + this.responders.push(responder); + }, + + unregister: function(responder) { + this.responders = this.responders.without(responder); + }, + + dispatch: function(callback, request, transport, json) { + this.each(function(responder) { + if (Object.isFunction(responder[callback])) { + try { + responder[callback].apply(responder, [request, transport, json]); + } catch (e) { } + } + }); + } +}; + +Object.extend(Ajax.Responders, Enumerable); + +Ajax.Responders.register({ + onCreate: function() { Ajax.activeRequestCount++ }, + onComplete: function() { Ajax.activeRequestCount-- } +}); +Ajax.Base = Class.create({ + initialize: function(options) { + this.options = { + method: 'post', + asynchronous: true, + contentType: 'application/x-www-form-urlencoded', + encoding: 'UTF-8', + parameters: '', + evalJSON: true, + evalJS: true + }; + Object.extend(this.options, options || { }); + + this.options.method = this.options.method.toLowerCase(); + + if (Object.isHash(this.options.parameters)) + this.options.parameters = this.options.parameters.toObject(); + } +}); +Ajax.Request = Class.create(Ajax.Base, { + _complete: false, + + initialize: function($super, url, options) { + $super(options); + this.transport = Ajax.getTransport(); + this.request(url); + }, + + request: function(url) { + this.url = url; + this.method = this.options.method; + var params = Object.isString(this.options.parameters) ? + this.options.parameters : + Object.toQueryString(this.options.parameters); + + if (!['get', 'post'].include(this.method)) { + params += (params ? '&' : '') + "_method=" + this.method; + this.method = 'post'; + } + + if (params && this.method === 'get') { + this.url += (this.url.include('?') ? '&' : '?') + params; + } + + this.parameters = params.toQueryParams(); + + try { + var response = new Ajax.Response(this); + if (this.options.onCreate) this.options.onCreate(response); + Ajax.Responders.dispatch('onCreate', this, response); + + this.transport.open(this.method.toUpperCase(), this.url, + this.options.asynchronous); + + if (this.options.asynchronous) this.respondToReadyState.bind(this).defer(1); + + this.transport.onreadystatechange = this.onStateChange.bind(this); + this.setRequestHeaders(); + + this.body = this.method == 'post' ? (this.options.postBody || params) : null; + this.transport.send(this.body); + + /* Force Firefox to handle ready state 4 for synchronous requests */ + if (!this.options.asynchronous && this.transport.overrideMimeType) + this.onStateChange(); + + } + catch (e) { + this.dispatchException(e); + } + }, + + onStateChange: function() { + var readyState = this.transport.readyState; + if (readyState > 1 && !((readyState == 4) && this._complete)) + this.respondToReadyState(this.transport.readyState); + }, + + setRequestHeaders: function() { + var headers = { + 'X-Requested-With': 'XMLHttpRequest', + 'X-Prototype-Version': Prototype.Version, + 'Accept': 'text/javascript, text/html, application/xml, text/xml, */*' + }; + + if (this.method == 'post') { + headers['Content-type'] = this.options.contentType + + (this.options.encoding ? '; charset=' + this.options.encoding : ''); + + /* Force "Connection: close" for older Mozilla browsers to work + * around a bug where XMLHttpRequest sends an incorrect + * Content-length header. See Mozilla Bugzilla #246651. + */ + if (this.transport.overrideMimeType && + (navigator.userAgent.match(/Gecko\/(\d{4})/) || [0,2005])[1] < 2005) + headers['Connection'] = 'close'; + } + + if (typeof this.options.requestHeaders == 'object') { + var extras = this.options.requestHeaders; + + if (Object.isFunction(extras.push)) + for (var i = 0, length = extras.length; i < length; i += 2) + headers[extras[i]] = extras[i+1]; + else + $H(extras).each(function(pair) { headers[pair.key] = pair.value }); + } + + for (var name in headers) + if (headers[name] != null) + this.transport.setRequestHeader(name, headers[name]); + }, + + success: function() { + var status = this.getStatus(); + return !status || (status >= 200 && status < 300) || status == 304; + }, + + getStatus: function() { + try { + if (this.transport.status === 1223) return 204; + return this.transport.status || 0; + } catch (e) { return 0 } + }, + + respondToReadyState: function(readyState) { + var state = Ajax.Request.Events[readyState], response = new Ajax.Response(this); + + if (state == 'Complete') { + try { + this._complete = true; + (this.options['on' + response.status] + || this.options['on' + (this.success() ? 'Success' : 'Failure')] + || Prototype.emptyFunction)(response, response.headerJSON); + } catch (e) { + this.dispatchException(e); + } + + var contentType = response.getHeader('Content-type'); + if (this.options.evalJS == 'force' + || (this.options.evalJS && this.isSameOrigin() && contentType + && contentType.match(/^\s*(text|application)\/(x-)?(java|ecma)script(;.*)?\s*$/i))) + this.evalResponse(); + } + + try { + (this.options['on' + state] || Prototype.emptyFunction)(response, response.headerJSON); + Ajax.Responders.dispatch('on' + state, this, response, response.headerJSON); + } catch (e) { + this.dispatchException(e); + } + + if (state == 'Complete') { + this.transport.onreadystatechange = Prototype.emptyFunction; + } + }, + + isSameOrigin: function() { + var m = this.url.match(/^\s*https?:\/\/[^\/]*/); + return !m || (m[0] == '#{protocol}//#{domain}#{port}'.interpolate({ + protocol: location.protocol, + domain: document.domain, + port: location.port ? ':' + location.port : '' + })); + }, + + getHeader: function(name) { + try { + return this.transport.getResponseHeader(name) || null; + } catch (e) { return null; } + }, + + evalResponse: function() { + try { + return eval((this.transport.responseText || '').unfilterJSON()); + } catch (e) { + this.dispatchException(e); + } + }, + + dispatchException: function(exception) { + (this.options.onException || Prototype.emptyFunction)(this, exception); + Ajax.Responders.dispatch('onException', this, exception); + } +}); + +Ajax.Request.Events = + ['Uninitialized', 'Loading', 'Loaded', 'Interactive', 'Complete']; + + + + + + + + +Ajax.Response = Class.create({ + initialize: function(request){ + this.request = request; + var transport = this.transport = request.transport, + readyState = this.readyState = transport.readyState; + + if ((readyState > 2 && !Prototype.Browser.IE) || readyState == 4) { + this.status = this.getStatus(); + this.statusText = this.getStatusText(); + this.responseText = String.interpret(transport.responseText); + this.headerJSON = this._getHeaderJSON(); + } + + if (readyState == 4) { + var xml = transport.responseXML; + this.responseXML = Object.isUndefined(xml) ? null : xml; + this.responseJSON = this._getResponseJSON(); + } + }, + + status: 0, + + statusText: '', + + getStatus: Ajax.Request.prototype.getStatus, + + getStatusText: function() { + try { + return this.transport.statusText || ''; + } catch (e) { return '' } + }, + + getHeader: Ajax.Request.prototype.getHeader, + + getAllHeaders: function() { + try { + return this.getAllResponseHeaders(); + } catch (e) { return null } + }, + + getResponseHeader: function(name) { + return this.transport.getResponseHeader(name); + }, + + getAllResponseHeaders: function() { + return this.transport.getAllResponseHeaders(); + }, + + _getHeaderJSON: function() { + var json = this.getHeader('X-JSON'); + if (!json) return null; + + try { + json = decodeURIComponent(escape(json)); + } catch(e) { + } + + try { + return json.evalJSON(this.request.options.sanitizeJSON || + !this.request.isSameOrigin()); + } catch (e) { + this.request.dispatchException(e); + } + }, + + _getResponseJSON: function() { + var options = this.request.options; + if (!options.evalJSON || (options.evalJSON != 'force' && + !(this.getHeader('Content-type') || '').include('application/json')) || + this.responseText.blank()) + return null; + try { + return this.responseText.evalJSON(options.sanitizeJSON || + !this.request.isSameOrigin()); + } catch (e) { + this.request.dispatchException(e); + } + } +}); + +Ajax.Updater = Class.create(Ajax.Request, { + initialize: function($super, container, url, options) { + this.container = { + success: (container.success || container), + failure: (container.failure || (container.success ? null : container)) + }; + + options = Object.clone(options); + var onComplete = options.onComplete; + options.onComplete = (function(response, json) { + this.updateContent(response.responseText); + if (Object.isFunction(onComplete)) onComplete(response, json); + }).bind(this); + + $super(url, options); + }, + + updateContent: function(responseText) { + var receiver = this.container[this.success() ? 'success' : 'failure'], + options = this.options; + + if (!options.evalScripts) responseText = responseText.stripScripts(); + + if (receiver = $(receiver)) { + if (options.insertion) { + if (Object.isString(options.insertion)) { + var insertion = { }; insertion[options.insertion] = responseText; + receiver.insert(insertion); + } + else options.insertion(receiver, responseText); + } + else receiver.update(responseText); + } + } +}); + +Ajax.PeriodicalUpdater = Class.create(Ajax.Base, { + initialize: function($super, container, url, options) { + $super(options); + this.onComplete = this.options.onComplete; + + this.frequency = (this.options.frequency || 2); + this.decay = (this.options.decay || 1); + + this.updater = { }; + this.container = container; + this.url = url; + + this.start(); + }, + + start: function() { + this.options.onComplete = this.updateComplete.bind(this); + this.onTimerEvent(); + }, + + stop: function() { + this.updater.options.onComplete = undefined; + clearTimeout(this.timer); + (this.onComplete || Prototype.emptyFunction).apply(this, arguments); + }, + + updateComplete: function(response) { + if (this.options.decay) { + this.decay = (response.responseText == this.lastText ? + this.decay * this.options.decay : 1); + + this.lastText = response.responseText; + } + this.timer = this.onTimerEvent.bind(this).delay(this.decay * this.frequency); + }, + + onTimerEvent: function() { + this.updater = new Ajax.Updater(this.container, this.url, this.options); + } +}); + +(function(GLOBAL) { + + var UNDEFINED; + var SLICE = Array.prototype.slice; + + var DIV = document.createElement('div'); + + + function $(element) { + if (arguments.length > 1) { + for (var i = 0, elements = [], length = arguments.length; i < length; i++) + elements.push($(arguments[i])); + return elements; + } + + if (Object.isString(element)) + element = document.getElementById(element); + return Element.extend(element); + } + + GLOBAL.$ = $; + + + if (!GLOBAL.Node) GLOBAL.Node = {}; + + if (!GLOBAL.Node.ELEMENT_NODE) { + Object.extend(GLOBAL.Node, { + ELEMENT_NODE: 1, + ATTRIBUTE_NODE: 2, + TEXT_NODE: 3, + CDATA_SECTION_NODE: 4, + ENTITY_REFERENCE_NODE: 5, + ENTITY_NODE: 6, + PROCESSING_INSTRUCTION_NODE: 7, + COMMENT_NODE: 8, + DOCUMENT_NODE: 9, + DOCUMENT_TYPE_NODE: 10, + DOCUMENT_FRAGMENT_NODE: 11, + NOTATION_NODE: 12 + }); + } + + var ELEMENT_CACHE = {}; + + function shouldUseCreationCache(tagName, attributes) { + if (tagName === 'select') return false; + if ('type' in attributes) return false; + return true; + } + + var HAS_EXTENDED_CREATE_ELEMENT_SYNTAX = (function(){ + try { + var el = document.createElement(''); + return el.tagName.toLowerCase() === 'input' && el.name === 'x'; + } + catch(err) { + return false; + } + })(); + + + var oldElement = GLOBAL.Element; + function Element(tagName, attributes) { + attributes = attributes || {}; + tagName = tagName.toLowerCase(); + + if (HAS_EXTENDED_CREATE_ELEMENT_SYNTAX && attributes.name) { + tagName = '<' + tagName + ' name="' + attributes.name + '">'; + delete attributes.name; + return Element.writeAttribute(document.createElement(tagName), attributes); + } + + if (!ELEMENT_CACHE[tagName]) + ELEMENT_CACHE[tagName] = Element.extend(document.createElement(tagName)); + + var node = shouldUseCreationCache(tagName, attributes) ? + ELEMENT_CACHE[tagName].cloneNode(false) : document.createElement(tagName); + + return Element.writeAttribute(node, attributes); + } + + GLOBAL.Element = Element; + + Object.extend(GLOBAL.Element, oldElement || {}); + if (oldElement) GLOBAL.Element.prototype = oldElement.prototype; + + Element.Methods = { ByTag: {}, Simulated: {} }; + + var methods = {}; + + var INSPECT_ATTRIBUTES = { id: 'id', className: 'class' }; + function inspect(element) { + element = $(element); + var result = '<' + element.tagName.toLowerCase(); + + var attribute, value; + for (var property in INSPECT_ATTRIBUTES) { + attribute = INSPECT_ATTRIBUTES[property]; + value = (element[property] || '').toString(); + if (value) result += ' ' + attribute + '=' + value.inspect(true); + } + + return result + '>'; + } + + methods.inspect = inspect; + + + function visible(element) { + return $(element).style.display !== 'none'; + } + + function toggle(element, bool) { + element = $(element); + if (Object.isUndefined(bool)) + bool = !Element.visible(element); + Element[bool ? 'show' : 'hide'](element); + + return element; + } + + function hide(element) { + element = $(element); + element.style.display = 'none'; + return element; + } + + function show(element) { + element = $(element); + element.style.display = ''; + return element; + } + + + Object.extend(methods, { + visible: visible, + toggle: toggle, + hide: hide, + show: show + }); + + + function remove(element) { + element = $(element); + element.parentNode.removeChild(element); + return element; + } + + var SELECT_ELEMENT_INNERHTML_BUGGY = (function(){ + var el = document.createElement("select"), + isBuggy = true; + el.innerHTML = ""; + if (el.options && el.options[0]) { + isBuggy = el.options[0].nodeName.toUpperCase() !== "OPTION"; + } + el = null; + return isBuggy; + })(); + + var TABLE_ELEMENT_INNERHTML_BUGGY = (function(){ + try { + var el = document.createElement("table"); + if (el && el.tBodies) { + el.innerHTML = "test"; + var isBuggy = typeof el.tBodies[0] == "undefined"; + el = null; + return isBuggy; + } + } catch (e) { + return true; + } + })(); + + var LINK_ELEMENT_INNERHTML_BUGGY = (function() { + try { + var el = document.createElement('div'); + el.innerHTML = ""; + var isBuggy = (el.childNodes.length === 0); + el = null; + return isBuggy; + } catch(e) { + return true; + } + })(); + + var ANY_INNERHTML_BUGGY = SELECT_ELEMENT_INNERHTML_BUGGY || + TABLE_ELEMENT_INNERHTML_BUGGY || LINK_ELEMENT_INNERHTML_BUGGY; + + var SCRIPT_ELEMENT_REJECTS_TEXTNODE_APPENDING = (function () { + var s = document.createElement("script"), + isBuggy = false; + try { + s.appendChild(document.createTextNode("")); + isBuggy = !s.firstChild || + s.firstChild && s.firstChild.nodeType !== 3; + } catch (e) { + isBuggy = true; + } + s = null; + return isBuggy; + })(); + + function update(element, content) { + element = $(element); + + var descendants = element.getElementsByTagName('*'), + i = descendants.length; + while (i--) purgeElement(descendants[i]); + + if (content && content.toElement) + content = content.toElement(); + + if (Object.isElement(content)) + return element.update().insert(content); + + + content = Object.toHTML(content); + var tagName = element.tagName.toUpperCase(); + + if (tagName === 'SCRIPT' && SCRIPT_ELEMENT_REJECTS_TEXTNODE_APPENDING) { + element.text = content; + return element; + } + + if (ANY_INNERHTML_BUGGY) { + if (tagName in INSERTION_TRANSLATIONS.tags) { + while (element.firstChild) + element.removeChild(element.firstChild); + + var nodes = getContentFromAnonymousElement(tagName, content.stripScripts()); + for (var i = 0, node; node = nodes[i]; i++) + element.appendChild(node); + + } else if (LINK_ELEMENT_INNERHTML_BUGGY && Object.isString(content) && content.indexOf(' -1) { + while (element.firstChild) + element.removeChild(element.firstChild); + + var nodes = getContentFromAnonymousElement(tagName, + content.stripScripts(), true); + + for (var i = 0, node; node = nodes[i]; i++) + element.appendChild(node); + } else { + element.innerHTML = content.stripScripts(); + } + } else { + element.innerHTML = content.stripScripts(); + } + + content.evalScripts.bind(content).defer(); + return element; + } + + function replace(element, content) { + element = $(element); + + if (content && content.toElement) { + content = content.toElement(); + } else if (!Object.isElement(content)) { + content = Object.toHTML(content); + var range = element.ownerDocument.createRange(); + range.selectNode(element); + content.evalScripts.bind(content).defer(); + content = range.createContextualFragment(content.stripScripts()); + } + + element.parentNode.replaceChild(content, element); + return element; + } + + var INSERTION_TRANSLATIONS = { + before: function(element, node) { + element.parentNode.insertBefore(node, element); + }, + top: function(element, node) { + element.insertBefore(node, element.firstChild); + }, + bottom: function(element, node) { + element.appendChild(node); + }, + after: function(element, node) { + element.parentNode.insertBefore(node, element.nextSibling); + }, + + tags: { + TABLE: ['', '
    ', 1], + TBODY: ['', '
    ', 2], + TR: ['', '
    ', 3], + TD: ['
    ', '
    ', 4], + SELECT: ['', 1] + } + }; + + var tags = INSERTION_TRANSLATIONS.tags; + + Object.extend(tags, { + THEAD: tags.TBODY, + TFOOT: tags.TBODY, + TH: tags.TD + }); + + function replace_IE(element, content) { + element = $(element); + if (content && content.toElement) + content = content.toElement(); + if (Object.isElement(content)) { + element.parentNode.replaceChild(content, element); + return element; + } + + content = Object.toHTML(content); + var parent = element.parentNode, tagName = parent.tagName.toUpperCase(); + + if (tagName in INSERTION_TRANSLATIONS.tags) { + var nextSibling = Element.next(element); + var fragments = getContentFromAnonymousElement( + tagName, content.stripScripts()); + + parent.removeChild(element); + + var iterator; + if (nextSibling) + iterator = function(node) { parent.insertBefore(node, nextSibling) }; + else + iterator = function(node) { parent.appendChild(node); } + + fragments.each(iterator); + } else { + element.outerHTML = content.stripScripts(); + } + + content.evalScripts.bind(content).defer(); + return element; + } + + if ('outerHTML' in document.documentElement) + replace = replace_IE; + + function isContent(content) { + if (Object.isUndefined(content) || content === null) return false; + + if (Object.isString(content) || Object.isNumber(content)) return true; + if (Object.isElement(content)) return true; + if (content.toElement || content.toHTML) return true; + + return false; + } + + function insertContentAt(element, content, position) { + position = position.toLowerCase(); + var method = INSERTION_TRANSLATIONS[position]; + + if (content && content.toElement) content = content.toElement(); + if (Object.isElement(content)) { + method(element, content); + return element; + } + + content = Object.toHTML(content); + var tagName = ((position === 'before' || position === 'after') ? + element.parentNode : element).tagName.toUpperCase(); + + var childNodes = getContentFromAnonymousElement(tagName, content.stripScripts()); + + if (position === 'top' || position === 'after') childNodes.reverse(); + + for (var i = 0, node; node = childNodes[i]; i++) + method(element, node); + + content.evalScripts.bind(content).defer(); + } + + function insert(element, insertions) { + element = $(element); + + if (isContent(insertions)) + insertions = { bottom: insertions }; + + for (var position in insertions) + insertContentAt(element, insertions[position], position); + + return element; + } + + function wrap(element, wrapper, attributes) { + element = $(element); + + if (Object.isElement(wrapper)) { + $(wrapper).writeAttribute(attributes || {}); + } else if (Object.isString(wrapper)) { + wrapper = new Element(wrapper, attributes); + } else { + wrapper = new Element('div', wrapper); + } + + if (element.parentNode) + element.parentNode.replaceChild(wrapper, element); + + wrapper.appendChild(element); + + return wrapper; + } + + function cleanWhitespace(element) { + element = $(element); + var node = element.firstChild; + + while (node) { + var nextNode = node.nextSibling; + if (node.nodeType === Node.TEXT_NODE && !/\S/.test(node.nodeValue)) + element.removeChild(node); + node = nextNode; + } + return element; + } + + function empty(element) { + return $(element).innerHTML.blank(); + } + + function getContentFromAnonymousElement(tagName, html, force) { + var t = INSERTION_TRANSLATIONS.tags[tagName], div = DIV; + + var workaround = !!t; + if (!workaround && force) { + workaround = true; + t = ['', '', 0]; + } + + if (workaround) { + div.innerHTML = ' ' + t[0] + html + t[1]; + div.removeChild(div.firstChild); + for (var i = t[2]; i--; ) + div = div.firstChild; + } else { + div.innerHTML = html; + } + + return $A(div.childNodes); + } + + function clone(element, deep) { + if (!(element = $(element))) return; + var clone = element.cloneNode(deep); + if (!HAS_UNIQUE_ID_PROPERTY) { + clone._prototypeUID = UNDEFINED; + if (deep) { + var descendants = Element.select(clone, '*'), + i = descendants.length; + while (i--) + descendants[i]._prototypeUID = UNDEFINED; + } + } + return Element.extend(clone); + } + + function purgeElement(element) { + var uid = getUniqueElementID(element); + if (uid) { + Element.stopObserving(element); + if (!HAS_UNIQUE_ID_PROPERTY) + element._prototypeUID = UNDEFINED; + delete Element.Storage[uid]; + } + } + + function purgeCollection(elements) { + var i = elements.length; + while (i--) + purgeElement(elements[i]); + } + + function purgeCollection_IE(elements) { + var i = elements.length, element, uid; + while (i--) { + element = elements[i]; + uid = getUniqueElementID(element); + delete Element.Storage[uid]; + delete Event.cache[uid]; + } + } + + if (HAS_UNIQUE_ID_PROPERTY) { + purgeCollection = purgeCollection_IE; + } + + + function purge(element) { + if (!(element = $(element))) return; + purgeElement(element); + + var descendants = element.getElementsByTagName('*'), + i = descendants.length; + + while (i--) purgeElement(descendants[i]); + + return null; + } + + Object.extend(methods, { + remove: remove, + update: update, + replace: replace, + insert: insert, + wrap: wrap, + cleanWhitespace: cleanWhitespace, + empty: empty, + clone: clone, + purge: purge + }); + + + + function recursivelyCollect(element, property, maximumLength) { + element = $(element); + maximumLength = maximumLength || -1; + var elements = []; + + while (element = element[property]) { + if (element.nodeType === Node.ELEMENT_NODE) + elements.push(Element.extend(element)); + + if (elements.length === maximumLength) break; + } + + return elements; + } + + + function ancestors(element) { + return recursivelyCollect(element, 'parentNode'); + } + + function descendants(element) { + return Element.select(element, '*'); + } + + function firstDescendant(element) { + element = $(element).firstChild; + while (element && element.nodeType !== Node.ELEMENT_NODE) + element = element.nextSibling; + + return $(element); + } + + function immediateDescendants(element) { + var results = [], child = $(element).firstChild; + + while (child) { + if (child.nodeType === Node.ELEMENT_NODE) + results.push(Element.extend(child)); + + child = child.nextSibling; + } + + return results; + } + + function previousSiblings(element) { + return recursivelyCollect(element, 'previousSibling'); + } + + function nextSiblings(element) { + return recursivelyCollect(element, 'nextSibling'); + } + + function siblings(element) { + element = $(element); + var previous = previousSiblings(element), + next = nextSiblings(element); + return previous.reverse().concat(next); + } + + function match(element, selector) { + element = $(element); + + if (Object.isString(selector)) + return Prototype.Selector.match(element, selector); + + return selector.match(element); + } + + + function _recursivelyFind(element, property, expression, index) { + element = $(element), expression = expression || 0, index = index || 0; + if (Object.isNumber(expression)) { + index = expression, expression = null; + } + + while (element = element[property]) { + if (element.nodeType !== 1) continue; + if (expression && !Prototype.Selector.match(element, expression)) + continue; + if (--index >= 0) continue; + + return Element.extend(element); + } + } + + + function up(element, expression, index) { + element = $(element); + + if (arguments.length === 1) return $(element.parentNode); + return _recursivelyFind(element, 'parentNode', expression, index); + } + + function down(element, expression, index) { + if (arguments.length === 1) return firstDescendant(element); + element = $(element), expression = expression || 0, index = index || 0; + + if (Object.isNumber(expression)) + index = expression, expression = '*'; + + var node = Prototype.Selector.select(expression, element)[index]; + return Element.extend(node); + } + + function previous(element, expression, index) { + return _recursivelyFind(element, 'previousSibling', expression, index); + } + + function next(element, expression, index) { + return _recursivelyFind(element, 'nextSibling', expression, index); + } + + function select(element) { + element = $(element); + var expressions = SLICE.call(arguments, 1).join(', '); + return Prototype.Selector.select(expressions, element); + } + + function adjacent(element) { + element = $(element); + var expressions = SLICE.call(arguments, 1).join(', '); + var siblings = Element.siblings(element), results = []; + for (var i = 0, sibling; sibling = siblings[i]; i++) { + if (Prototype.Selector.match(sibling, expressions)) + results.push(sibling); + } + + return results; + } + + function descendantOf_DOM(element, ancestor) { + element = $(element), ancestor = $(ancestor); + while (element = element.parentNode) + if (element === ancestor) return true; + return false; + } + + function descendantOf_contains(element, ancestor) { + element = $(element), ancestor = $(ancestor); + if (!ancestor.contains) return descendantOf_DOM(element, ancestor); + return ancestor.contains(element) && ancestor !== element; + } + + function descendantOf_compareDocumentPosition(element, ancestor) { + element = $(element), ancestor = $(ancestor); + return (element.compareDocumentPosition(ancestor) & 8) === 8; + } + + var descendantOf; + if (DIV.compareDocumentPosition) { + descendantOf = descendantOf_compareDocumentPosition; + } else if (DIV.contains) { + descendantOf = descendantOf_contains; + } else { + descendantOf = descendantOf_DOM; + } + + + Object.extend(methods, { + recursivelyCollect: recursivelyCollect, + ancestors: ancestors, + descendants: descendants, + firstDescendant: firstDescendant, + immediateDescendants: immediateDescendants, + previousSiblings: previousSiblings, + nextSiblings: nextSiblings, + siblings: siblings, + match: match, + up: up, + down: down, + previous: previous, + next: next, + select: select, + adjacent: adjacent, + descendantOf: descendantOf, + + getElementsBySelector: select, + + childElements: immediateDescendants + }); + + + var idCounter = 1; + function identify(element) { + element = $(element); + var id = Element.readAttribute(element, 'id'); + if (id) return id; + + do { id = 'anonymous_element_' + idCounter++ } while ($(id)); + + Element.writeAttribute(element, 'id', id); + return id; + } + + + function readAttribute(element, name) { + return $(element).getAttribute(name); + } + + function readAttribute_IE(element, name) { + element = $(element); + + var table = ATTRIBUTE_TRANSLATIONS.read; + if (table.values[name]) + return table.values[name](element, name); + + if (table.names[name]) name = table.names[name]; + + if (name.include(':')) { + if (!element.attributes || !element.attributes[name]) return null; + return element.attributes[name].value; + } + + return element.getAttribute(name); + } + + function readAttribute_Opera(element, name) { + if (name === 'title') return element.title; + return element.getAttribute(name); + } + + var PROBLEMATIC_ATTRIBUTE_READING = (function() { + DIV.setAttribute('onclick', []); + var value = DIV.getAttribute('onclick'); + var isFunction = Object.isArray(value); + DIV.removeAttribute('onclick'); + return isFunction; + })(); + + if (PROBLEMATIC_ATTRIBUTE_READING) { + readAttribute = readAttribute_IE; + } else if (Prototype.Browser.Opera) { + readAttribute = readAttribute_Opera; + } + + + function writeAttribute(element, name, value) { + element = $(element); + var attributes = {}, table = ATTRIBUTE_TRANSLATIONS.write; + + if (typeof name === 'object') { + attributes = name; + } else { + attributes[name] = Object.isUndefined(value) ? true : value; + } + + for (var attr in attributes) { + name = table.names[attr] || attr; + value = attributes[attr]; + if (table.values[attr]) + name = table.values[attr](element, value) || name; + if (value === false || value === null) + element.removeAttribute(name); + else if (value === true) + element.setAttribute(name, name); + else element.setAttribute(name, value); + } + + return element; + } + + var PROBLEMATIC_HAS_ATTRIBUTE_WITH_CHECKBOXES = (function () { + if (!HAS_EXTENDED_CREATE_ELEMENT_SYNTAX) { + return false; + } + var checkbox = document.createElement(''); + checkbox.checked = true; + var node = checkbox.getAttributeNode('checked'); + return !node || !node.specified; + })(); + + function hasAttribute(element, attribute) { + attribute = ATTRIBUTE_TRANSLATIONS.has[attribute] || attribute; + var node = $(element).getAttributeNode(attribute); + return !!(node && node.specified); + } + + function hasAttribute_IE(element, attribute) { + if (attribute === 'checked') { + return element.checked; + } + return hasAttribute(element, attribute); + } + + GLOBAL.Element.Methods.Simulated.hasAttribute = + PROBLEMATIC_HAS_ATTRIBUTE_WITH_CHECKBOXES ? + hasAttribute_IE : hasAttribute; + + function classNames(element) { + return new Element.ClassNames(element); + } + + var regExpCache = {}; + function getRegExpForClassName(className) { + if (regExpCache[className]) return regExpCache[className]; + + var re = new RegExp("(^|\\s+)" + className + "(\\s+|$)"); + regExpCache[className] = re; + return re; + } + + function hasClassName(element, className) { + if (!(element = $(element))) return; + + var elementClassName = element.className; + + if (elementClassName.length === 0) return false; + if (elementClassName === className) return true; + + return getRegExpForClassName(className).test(elementClassName); + } + + function addClassName(element, className) { + if (!(element = $(element))) return; + + if (!hasClassName(element, className)) + element.className += (element.className ? ' ' : '') + className; + + return element; + } + + function removeClassName(element, className) { + if (!(element = $(element))) return; + + element.className = element.className.replace( + getRegExpForClassName(className), ' ').strip(); + + return element; + } + + function toggleClassName(element, className, bool) { + if (!(element = $(element))) return; + + if (Object.isUndefined(bool)) + bool = !hasClassName(element, className); + + var method = Element[bool ? 'addClassName' : 'removeClassName']; + return method(element, className); + } + + var ATTRIBUTE_TRANSLATIONS = {}; + + var classProp = 'className', forProp = 'for'; + + DIV.setAttribute(classProp, 'x'); + if (DIV.className !== 'x') { + DIV.setAttribute('class', 'x'); + if (DIV.className === 'x') + classProp = 'class'; + } + + var LABEL = document.createElement('label'); + LABEL.setAttribute(forProp, 'x'); + if (LABEL.htmlFor !== 'x') { + LABEL.setAttribute('htmlFor', 'x'); + if (LABEL.htmlFor === 'x') + forProp = 'htmlFor'; + } + LABEL = null; + + function _getAttr(element, attribute) { + return element.getAttribute(attribute); + } + + function _getAttr2(element, attribute) { + return element.getAttribute(attribute, 2); + } + + function _getAttrNode(element, attribute) { + var node = element.getAttributeNode(attribute); + return node ? node.value : ''; + } + + function _getFlag(element, attribute) { + return $(element).hasAttribute(attribute) ? attribute : null; + } + + DIV.onclick = Prototype.emptyFunction; + var onclickValue = DIV.getAttribute('onclick'); + + var _getEv; + + if (String(onclickValue).indexOf('{') > -1) { + _getEv = function(element, attribute) { + var value = element.getAttribute(attribute); + if (!value) return null; + value = value.toString(); + value = value.split('{')[1]; + value = value.split('}')[0]; + return value.strip(); + }; + } + else if (onclickValue === '') { + _getEv = function(element, attribute) { + var value = element.getAttribute(attribute); + if (!value) return null; + return value.strip(); + }; + } + + ATTRIBUTE_TRANSLATIONS.read = { + names: { + 'class': classProp, + 'className': classProp, + 'for': forProp, + 'htmlFor': forProp + }, + + values: { + style: function(element) { + return element.style.cssText.toLowerCase(); + }, + title: function(element) { + return element.title; + } + } + }; + + ATTRIBUTE_TRANSLATIONS.write = { + names: { + className: 'class', + htmlFor: 'for', + cellpadding: 'cellPadding', + cellspacing: 'cellSpacing' + }, + + values: { + checked: function(element, value) { + element.checked = !!value; + }, + + style: function(element, value) { + element.style.cssText = value ? value : ''; + } + } + }; + + ATTRIBUTE_TRANSLATIONS.has = { names: {} }; + + Object.extend(ATTRIBUTE_TRANSLATIONS.write.names, + ATTRIBUTE_TRANSLATIONS.read.names); + + var CAMEL_CASED_ATTRIBUTE_NAMES = $w('colSpan rowSpan vAlign dateTime ' + + 'accessKey tabIndex encType maxLength readOnly longDesc frameBorder'); + + for (var i = 0, attr; attr = CAMEL_CASED_ATTRIBUTE_NAMES[i]; i++) { + ATTRIBUTE_TRANSLATIONS.write.names[attr.toLowerCase()] = attr; + ATTRIBUTE_TRANSLATIONS.has.names[attr.toLowerCase()] = attr; + } + + Object.extend(ATTRIBUTE_TRANSLATIONS.read.values, { + href: _getAttr2, + src: _getAttr2, + type: _getAttr, + action: _getAttrNode, + disabled: _getFlag, + checked: _getFlag, + readonly: _getFlag, + multiple: _getFlag, + onload: _getEv, + onunload: _getEv, + onclick: _getEv, + ondblclick: _getEv, + onmousedown: _getEv, + onmouseup: _getEv, + onmouseover: _getEv, + onmousemove: _getEv, + onmouseout: _getEv, + onfocus: _getEv, + onblur: _getEv, + onkeypress: _getEv, + onkeydown: _getEv, + onkeyup: _getEv, + onsubmit: _getEv, + onreset: _getEv, + onselect: _getEv, + onchange: _getEv + }); + + + Object.extend(methods, { + identify: identify, + readAttribute: readAttribute, + writeAttribute: writeAttribute, + classNames: classNames, + hasClassName: hasClassName, + addClassName: addClassName, + removeClassName: removeClassName, + toggleClassName: toggleClassName + }); + + + function normalizeStyleName(style) { + if (style === 'float' || style === 'styleFloat') + return 'cssFloat'; + return style.camelize(); + } + + function normalizeStyleName_IE(style) { + if (style === 'float' || style === 'cssFloat') + return 'styleFloat'; + return style.camelize(); + } + + function setStyle(element, styles) { + element = $(element); + var elementStyle = element.style, match; + + if (Object.isString(styles)) { + elementStyle.cssText += ';' + styles; + if (styles.include('opacity')) { + var opacity = styles.match(/opacity:\s*(\d?\.?\d*)/)[1]; + Element.setOpacity(element, opacity); + } + return element; + } + + for (var property in styles) { + if (property === 'opacity') { + Element.setOpacity(element, styles[property]); + } else { + var value = styles[property]; + if (property === 'float' || property === 'cssFloat') { + property = Object.isUndefined(elementStyle.styleFloat) ? + 'cssFloat' : 'styleFloat'; + } + elementStyle[property] = value; + } + } + + return element; + } + + + function getStyle(element, style) { + element = $(element); + style = normalizeStyleName(style); + + var value = element.style[style]; + if (!value || value === 'auto') { + var css = document.defaultView.getComputedStyle(element, null); + value = css ? css[style] : null; + } + + if (style === 'opacity') return value ? parseFloat(value) : 1.0; + return value === 'auto' ? null : value; + } + + function getStyle_Opera(element, style) { + switch (style) { + case 'height': case 'width': + if (!Element.visible(element)) return null; + + var dim = parseInt(getStyle(element, style), 10); + + if (dim !== element['offset' + style.capitalize()]) + return dim + 'px'; + + return Element.measure(element, style); + + default: return getStyle(element, style); + } + } + + function getStyle_IE(element, style) { + element = $(element); + style = normalizeStyleName_IE(style); + + var value = element.style[style]; + if (!value && element.currentStyle) { + value = element.currentStyle[style]; + } + + if (style === 'opacity' && !STANDARD_CSS_OPACITY_SUPPORTED) + return getOpacity_IE(element); + + if (value === 'auto') { + if ((style === 'width' || style === 'height') && Element.visible(element)) + return Element.measure(element, style) + 'px'; + return null; + } + + return value; + } + + function stripAlphaFromFilter_IE(filter) { + return (filter || '').replace(/alpha\([^\)]*\)/gi, ''); + } + + function hasLayout_IE(element) { + if (!element.currentStyle || !element.currentStyle.hasLayout) + element.style.zoom = 1; + return element; + } + + var STANDARD_CSS_OPACITY_SUPPORTED = (function() { + DIV.style.cssText = "opacity:.55"; + return /^0.55/.test(DIV.style.opacity); + })(); + + function setOpacity(element, value) { + element = $(element); + if (value == 1 || value === '') value = ''; + else if (value < 0.00001) value = 0; + element.style.opacity = value; + return element; + } + + function setOpacity_IE(element, value) { + if (STANDARD_CSS_OPACITY_SUPPORTED) + return setOpacity(element, value); + + element = hasLayout_IE($(element)); + var filter = Element.getStyle(element, 'filter'), + style = element.style; + + if (value == 1 || value === '') { + filter = stripAlphaFromFilter_IE(filter); + if (filter) style.filter = filter; + else style.removeAttribute('filter'); + return element; + } + + if (value < 0.00001) value = 0; + + style.filter = stripAlphaFromFilter_IE(filter) + + 'alpha(opacity=' + (value * 100) + ')'; + + return element; + } + + + function getOpacity(element) { + return Element.getStyle(element, 'opacity'); + } + + function getOpacity_IE(element) { + if (STANDARD_CSS_OPACITY_SUPPORTED) + return getOpacity(element); + + var filter = Element.getStyle(element, 'filter'); + if (filter.length === 0) return 1.0; + var match = (filter || '').match(/alpha\(opacity=(.*)\)/); + if (match && match[1]) return parseFloat(match[1]) / 100; + return 1.0; + } + + + Object.extend(methods, { + setStyle: setStyle, + getStyle: getStyle, + setOpacity: setOpacity, + getOpacity: getOpacity + }); + + if ('styleFloat' in DIV.style) { + methods.getStyle = getStyle_IE; + methods.setOpacity = setOpacity_IE; + methods.getOpacity = getOpacity_IE; + } + + var UID = 0; + + GLOBAL.Element.Storage = { UID: 1 }; + + function getUniqueElementID(element) { + if (element === window) return 0; + + if (typeof element._prototypeUID === 'undefined') + element._prototypeUID = Element.Storage.UID++; + return element._prototypeUID; + } + + function getUniqueElementID_IE(element) { + if (element === window) return 0; + if (element == document) return 1; + return element.uniqueID; + } + + var HAS_UNIQUE_ID_PROPERTY = ('uniqueID' in DIV); + if (HAS_UNIQUE_ID_PROPERTY) + getUniqueElementID = getUniqueElementID_IE; + + function getStorage(element) { + if (!(element = $(element))) return; + + var uid = getUniqueElementID(element); + + if (!Element.Storage[uid]) + Element.Storage[uid] = $H(); + + return Element.Storage[uid]; + } + + function store(element, key, value) { + if (!(element = $(element))) return; + var storage = getStorage(element); + if (arguments.length === 2) { + storage.update(key); + } else { + storage.set(key, value); + } + return element; + } + + function retrieve(element, key, defaultValue) { + if (!(element = $(element))) return; + var storage = getStorage(element), value = storage.get(key); + + if (Object.isUndefined(value)) { + storage.set(key, defaultValue); + value = defaultValue; + } + + return value; + } + + + Object.extend(methods, { + getStorage: getStorage, + store: store, + retrieve: retrieve + }); + + + var Methods = {}, ByTag = Element.Methods.ByTag, + F = Prototype.BrowserFeatures; + + if (!F.ElementExtensions && ('__proto__' in DIV)) { + GLOBAL.HTMLElement = {}; + GLOBAL.HTMLElement.prototype = DIV['__proto__']; + F.ElementExtensions = true; + } + + function checkElementPrototypeDeficiency(tagName) { + if (typeof window.Element === 'undefined') return false; + if (!HAS_EXTENDED_CREATE_ELEMENT_SYNTAX) return false; + var proto = window.Element.prototype; + if (proto) { + var id = '_' + (Math.random() + '').slice(2), + el = document.createElement(tagName); + proto[id] = 'x'; + var isBuggy = (el[id] !== 'x'); + delete proto[id]; + el = null; + return isBuggy; + } + + return false; + } + + var HTMLOBJECTELEMENT_PROTOTYPE_BUGGY = + checkElementPrototypeDeficiency('object'); + + function extendElementWith(element, methods) { + for (var property in methods) { + var value = methods[property]; + if (Object.isFunction(value) && !(property in element)) + element[property] = value.methodize(); + } + } + + var EXTENDED = {}; + function elementIsExtended(element) { + var uid = getUniqueElementID(element); + return (uid in EXTENDED); + } + + function extend(element) { + if (!element || elementIsExtended(element)) return element; + if (element.nodeType !== Node.ELEMENT_NODE || element == window) + return element; + + var methods = Object.clone(Methods), + tagName = element.tagName.toUpperCase(); + + if (ByTag[tagName]) Object.extend(methods, ByTag[tagName]); + + extendElementWith(element, methods); + EXTENDED[getUniqueElementID(element)] = true; + return element; + } + + function extend_IE8(element) { + if (!element || elementIsExtended(element)) return element; + + var t = element.tagName; + if (t && (/^(?:object|applet|embed)$/i.test(t))) { + extendElementWith(element, Element.Methods); + extendElementWith(element, Element.Methods.Simulated); + extendElementWith(element, Element.Methods.ByTag[t.toUpperCase()]); + } + + return element; + } + + if (F.SpecificElementExtensions) { + extend = HTMLOBJECTELEMENT_PROTOTYPE_BUGGY ? extend_IE8 : Prototype.K; + } + + function addMethodsToTagName(tagName, methods) { + tagName = tagName.toUpperCase(); + if (!ByTag[tagName]) ByTag[tagName] = {}; + Object.extend(ByTag[tagName], methods); + } + + function mergeMethods(destination, methods, onlyIfAbsent) { + if (Object.isUndefined(onlyIfAbsent)) onlyIfAbsent = false; + for (var property in methods) { + var value = methods[property]; + if (!Object.isFunction(value)) continue; + if (!onlyIfAbsent || !(property in destination)) + destination[property] = value.methodize(); + } + } + + function findDOMClass(tagName) { + var klass; + var trans = { + "OPTGROUP": "OptGroup", "TEXTAREA": "TextArea", "P": "Paragraph", + "FIELDSET": "FieldSet", "UL": "UList", "OL": "OList", "DL": "DList", + "DIR": "Directory", "H1": "Heading", "H2": "Heading", "H3": "Heading", + "H4": "Heading", "H5": "Heading", "H6": "Heading", "Q": "Quote", + "INS": "Mod", "DEL": "Mod", "A": "Anchor", "IMG": "Image", "CAPTION": + "TableCaption", "COL": "TableCol", "COLGROUP": "TableCol", "THEAD": + "TableSection", "TFOOT": "TableSection", "TBODY": "TableSection", "TR": + "TableRow", "TH": "TableCell", "TD": "TableCell", "FRAMESET": + "FrameSet", "IFRAME": "IFrame" + }; + if (trans[tagName]) klass = 'HTML' + trans[tagName] + 'Element'; + if (window[klass]) return window[klass]; + klass = 'HTML' + tagName + 'Element'; + if (window[klass]) return window[klass]; + klass = 'HTML' + tagName.capitalize() + 'Element'; + if (window[klass]) return window[klass]; + + var element = document.createElement(tagName), + proto = element['__proto__'] || element.constructor.prototype; + + element = null; + return proto; + } + + function addMethods(methods) { + if (arguments.length === 0) addFormMethods(); + + if (arguments.length === 2) { + var tagName = methods; + methods = arguments[1]; + } + + if (!tagName) { + Object.extend(Element.Methods, methods || {}); + } else { + if (Object.isArray(tagName)) { + for (var i = 0, tag; tag = tagName[i]; i++) + addMethodsToTagName(tag, methods); + } else { + addMethodsToTagName(tagName, methods); + } + } + + var ELEMENT_PROTOTYPE = window.HTMLElement ? HTMLElement.prototype : + Element.prototype; + + if (F.ElementExtensions) { + mergeMethods(ELEMENT_PROTOTYPE, Element.Methods); + mergeMethods(ELEMENT_PROTOTYPE, Element.Methods.Simulated, true); + } + + if (F.SpecificElementExtensions) { + for (var tag in Element.Methods.ByTag) { + var klass = findDOMClass(tag); + if (Object.isUndefined(klass)) continue; + mergeMethods(klass.prototype, ByTag[tag]); + } + } + + Object.extend(Element, Element.Methods); + Object.extend(Element, Element.Methods.Simulated); + delete Element.ByTag; + delete Element.Simulated; + + Element.extend.refresh(); + + ELEMENT_CACHE = {}; + } + + Object.extend(GLOBAL.Element, { + extend: extend, + addMethods: addMethods + }); + + if (extend === Prototype.K) { + GLOBAL.Element.extend.refresh = Prototype.emptyFunction; + } else { + GLOBAL.Element.extend.refresh = function() { + if (Prototype.BrowserFeatures.ElementExtensions) return; + Object.extend(Methods, Element.Methods); + Object.extend(Methods, Element.Methods.Simulated); + + EXTENDED = {}; + }; + } + + function addFormMethods() { + Object.extend(Form, Form.Methods); + Object.extend(Form.Element, Form.Element.Methods); + Object.extend(Element.Methods.ByTag, { + "FORM": Object.clone(Form.Methods), + "INPUT": Object.clone(Form.Element.Methods), + "SELECT": Object.clone(Form.Element.Methods), + "TEXTAREA": Object.clone(Form.Element.Methods), + "BUTTON": Object.clone(Form.Element.Methods) + }); + } + + Element.addMethods(methods); + + function destroyCache_IE() { + DIV = null; + ELEMENT_CACHE = null; + } + + if (window.attachEvent) + window.attachEvent('onunload', destroyCache_IE); + +})(this); +(function() { + + function toDecimal(pctString) { + var match = pctString.match(/^(\d+)%?$/i); + if (!match) return null; + return (Number(match[1]) / 100); + } + + function getRawStyle(element, style) { + element = $(element); + + var value = element.style[style]; + if (!value || value === 'auto') { + var css = document.defaultView.getComputedStyle(element, null); + value = css ? css[style] : null; + } + + if (style === 'opacity') return value ? parseFloat(value) : 1.0; + return value === 'auto' ? null : value; + } + + function getRawStyle_IE(element, style) { + var value = element.style[style]; + if (!value && element.currentStyle) { + value = element.currentStyle[style]; + } + return value; + } + + function getContentWidth(element, context) { + var boxWidth = element.offsetWidth; + + var bl = getPixelValue(element, 'borderLeftWidth', context) || 0; + var br = getPixelValue(element, 'borderRightWidth', context) || 0; + var pl = getPixelValue(element, 'paddingLeft', context) || 0; + var pr = getPixelValue(element, 'paddingRight', context) || 0; + + return boxWidth - bl - br - pl - pr; + } + + if ('currentStyle' in document.documentElement) { + getRawStyle = getRawStyle_IE; + } + + + function getPixelValue(value, property, context) { + var element = null; + if (Object.isElement(value)) { + element = value; + value = getRawStyle(element, property); + } + + if (value === null || Object.isUndefined(value)) { + return null; + } + + if ((/^(?:-)?\d+(\.\d+)?(px)?$/i).test(value)) { + return window.parseFloat(value); + } + + var isPercentage = value.include('%'), isViewport = (context === document.viewport); + + if (/\d/.test(value) && element && element.runtimeStyle && !(isPercentage && isViewport)) { + var style = element.style.left, rStyle = element.runtimeStyle.left; + element.runtimeStyle.left = element.currentStyle.left; + element.style.left = value || 0; + value = element.style.pixelLeft; + element.style.left = style; + element.runtimeStyle.left = rStyle; + + return value; + } + + if (element && isPercentage) { + context = context || element.parentNode; + var decimal = toDecimal(value), whole = null; + + var isHorizontal = property.include('left') || property.include('right') || + property.include('width'); + + var isVertical = property.include('top') || property.include('bottom') || + property.include('height'); + + if (context === document.viewport) { + if (isHorizontal) { + whole = document.viewport.getWidth(); + } else if (isVertical) { + whole = document.viewport.getHeight(); + } + } else { + if (isHorizontal) { + whole = $(context).measure('width'); + } else if (isVertical) { + whole = $(context).measure('height'); + } + } + + return (whole === null) ? 0 : whole * decimal; + } + + return 0; + } + + function toCSSPixels(number) { + if (Object.isString(number) && number.endsWith('px')) + return number; + return number + 'px'; + } + + function isDisplayed(element) { + while (element && element.parentNode) { + var display = element.getStyle('display'); + if (display === 'none') { + return false; + } + element = $(element.parentNode); + } + return true; + } + + var hasLayout = Prototype.K; + if ('currentStyle' in document.documentElement) { + hasLayout = function(element) { + if (!element.currentStyle.hasLayout) { + element.style.zoom = 1; + } + return element; + }; + } + + function cssNameFor(key) { + if (key.include('border')) key = key + '-width'; + return key.camelize(); + } + + Element.Layout = Class.create(Hash, { + initialize: function($super, element, preCompute) { + $super(); + this.element = $(element); + + Element.Layout.PROPERTIES.each( function(property) { + this._set(property, null); + }, this); + + if (preCompute) { + this._preComputing = true; + this._begin(); + Element.Layout.PROPERTIES.each( this._compute, this ); + this._end(); + this._preComputing = false; + } + }, + + _set: function(property, value) { + return Hash.prototype.set.call(this, property, value); + }, + + set: function(property, value) { + throw "Properties of Element.Layout are read-only."; + }, + + get: function($super, property) { + var value = $super(property); + return value === null ? this._compute(property) : value; + }, + + _begin: function() { + if (this._isPrepared()) return; + + var element = this.element; + if (isDisplayed(element)) { + this._setPrepared(true); + return; + } + + + var originalStyles = { + position: element.style.position || '', + width: element.style.width || '', + visibility: element.style.visibility || '', + display: element.style.display || '' + }; + + element.store('prototype_original_styles', originalStyles); + + var position = getRawStyle(element, 'position'), width = element.offsetWidth; + + if (width === 0 || width === null) { + element.style.display = 'block'; + width = element.offsetWidth; + } + + var context = (position === 'fixed') ? document.viewport : + element.parentNode; + + var tempStyles = { + visibility: 'hidden', + display: 'block' + }; + + if (position !== 'fixed') tempStyles.position = 'absolute'; + + element.setStyle(tempStyles); + + var positionedWidth = element.offsetWidth, newWidth; + if (width && (positionedWidth === width)) { + newWidth = getContentWidth(element, context); + } else if (position === 'absolute' || position === 'fixed') { + newWidth = getContentWidth(element, context); + } else { + var parent = element.parentNode, pLayout = $(parent).getLayout(); + + newWidth = pLayout.get('width') - + this.get('margin-left') - + this.get('border-left') - + this.get('padding-left') - + this.get('padding-right') - + this.get('border-right') - + this.get('margin-right'); + } + + element.setStyle({ width: newWidth + 'px' }); + + this._setPrepared(true); + }, + + _end: function() { + var element = this.element; + var originalStyles = element.retrieve('prototype_original_styles'); + element.store('prototype_original_styles', null); + element.setStyle(originalStyles); + this._setPrepared(false); + }, + + _compute: function(property) { + var COMPUTATIONS = Element.Layout.COMPUTATIONS; + if (!(property in COMPUTATIONS)) { + throw "Property not found."; + } + + return this._set(property, COMPUTATIONS[property].call(this, this.element)); + }, + + _isPrepared: function() { + return this.element.retrieve('prototype_element_layout_prepared', false); + }, + + _setPrepared: function(bool) { + return this.element.store('prototype_element_layout_prepared', bool); + }, + + toObject: function() { + var args = $A(arguments); + var keys = (args.length === 0) ? Element.Layout.PROPERTIES : + args.join(' ').split(' '); + var obj = {}; + keys.each( function(key) { + if (!Element.Layout.PROPERTIES.include(key)) return; + var value = this.get(key); + if (value != null) obj[key] = value; + }, this); + return obj; + }, + + toHash: function() { + var obj = this.toObject.apply(this, arguments); + return new Hash(obj); + }, + + toCSS: function() { + var args = $A(arguments); + var keys = (args.length === 0) ? Element.Layout.PROPERTIES : + args.join(' ').split(' '); + var css = {}; + + keys.each( function(key) { + if (!Element.Layout.PROPERTIES.include(key)) return; + if (Element.Layout.COMPOSITE_PROPERTIES.include(key)) return; + + var value = this.get(key); + if (value != null) css[cssNameFor(key)] = value + 'px'; + }, this); + return css; + }, + + inspect: function() { + return "#"; + } + }); + + Object.extend(Element.Layout, { + PROPERTIES: $w('height width top left right bottom border-left border-right border-top border-bottom padding-left padding-right padding-top padding-bottom margin-top margin-bottom margin-left margin-right padding-box-width padding-box-height border-box-width border-box-height margin-box-width margin-box-height'), + + COMPOSITE_PROPERTIES: $w('padding-box-width padding-box-height margin-box-width margin-box-height border-box-width border-box-height'), + + COMPUTATIONS: { + 'height': function(element) { + if (!this._preComputing) this._begin(); + + var bHeight = this.get('border-box-height'); + if (bHeight <= 0) { + if (!this._preComputing) this._end(); + return 0; + } + + var bTop = this.get('border-top'), + bBottom = this.get('border-bottom'); + + var pTop = this.get('padding-top'), + pBottom = this.get('padding-bottom'); + + if (!this._preComputing) this._end(); + + return bHeight - bTop - bBottom - pTop - pBottom; + }, + + 'width': function(element) { + if (!this._preComputing) this._begin(); + + var bWidth = this.get('border-box-width'); + if (bWidth <= 0) { + if (!this._preComputing) this._end(); + return 0; + } + + var bLeft = this.get('border-left'), + bRight = this.get('border-right'); + + var pLeft = this.get('padding-left'), + pRight = this.get('padding-right'); + + if (!this._preComputing) this._end(); + return bWidth - bLeft - bRight - pLeft - pRight; + }, + + 'padding-box-height': function(element) { + var height = this.get('height'), + pTop = this.get('padding-top'), + pBottom = this.get('padding-bottom'); + + return height + pTop + pBottom; + }, + + 'padding-box-width': function(element) { + var width = this.get('width'), + pLeft = this.get('padding-left'), + pRight = this.get('padding-right'); + + return width + pLeft + pRight; + }, + + 'border-box-height': function(element) { + if (!this._preComputing) this._begin(); + var height = element.offsetHeight; + if (!this._preComputing) this._end(); + return height; + }, + + 'border-box-width': function(element) { + if (!this._preComputing) this._begin(); + var width = element.offsetWidth; + if (!this._preComputing) this._end(); + return width; + }, + + 'margin-box-height': function(element) { + var bHeight = this.get('border-box-height'), + mTop = this.get('margin-top'), + mBottom = this.get('margin-bottom'); + + if (bHeight <= 0) return 0; + + return bHeight + mTop + mBottom; + }, + + 'margin-box-width': function(element) { + var bWidth = this.get('border-box-width'), + mLeft = this.get('margin-left'), + mRight = this.get('margin-right'); + + if (bWidth <= 0) return 0; + + return bWidth + mLeft + mRight; + }, + + 'top': function(element) { + var offset = element.positionedOffset(); + return offset.top; + }, + + 'bottom': function(element) { + var offset = element.positionedOffset(), + parent = element.getOffsetParent(), + pHeight = parent.measure('height'); + + var mHeight = this.get('border-box-height'); + + return pHeight - mHeight - offset.top; + }, + + 'left': function(element) { + var offset = element.positionedOffset(); + return offset.left; + }, + + 'right': function(element) { + var offset = element.positionedOffset(), + parent = element.getOffsetParent(), + pWidth = parent.measure('width'); + + var mWidth = this.get('border-box-width'); + + return pWidth - mWidth - offset.left; + }, + + 'padding-top': function(element) { + return getPixelValue(element, 'paddingTop'); + }, + + 'padding-bottom': function(element) { + return getPixelValue(element, 'paddingBottom'); + }, + + 'padding-left': function(element) { + return getPixelValue(element, 'paddingLeft'); + }, + + 'padding-right': function(element) { + return getPixelValue(element, 'paddingRight'); + }, + + 'border-top': function(element) { + return getPixelValue(element, 'borderTopWidth'); + }, + + 'border-bottom': function(element) { + return getPixelValue(element, 'borderBottomWidth'); + }, + + 'border-left': function(element) { + return getPixelValue(element, 'borderLeftWidth'); + }, + + 'border-right': function(element) { + return getPixelValue(element, 'borderRightWidth'); + }, + + 'margin-top': function(element) { + return getPixelValue(element, 'marginTop'); + }, + + 'margin-bottom': function(element) { + return getPixelValue(element, 'marginBottom'); + }, + + 'margin-left': function(element) { + return getPixelValue(element, 'marginLeft'); + }, + + 'margin-right': function(element) { + return getPixelValue(element, 'marginRight'); + } + } + }); + + if ('getBoundingClientRect' in document.documentElement) { + Object.extend(Element.Layout.COMPUTATIONS, { + 'right': function(element) { + var parent = hasLayout(element.getOffsetParent()); + var rect = element.getBoundingClientRect(), + pRect = parent.getBoundingClientRect(); + + return (pRect.right - rect.right).round(); + }, + + 'bottom': function(element) { + var parent = hasLayout(element.getOffsetParent()); + var rect = element.getBoundingClientRect(), + pRect = parent.getBoundingClientRect(); + + return (pRect.bottom - rect.bottom).round(); + } + }); + } + + Element.Offset = Class.create({ + initialize: function(left, top) { + this.left = left.round(); + this.top = top.round(); + + this[0] = this.left; + this[1] = this.top; + }, + + relativeTo: function(offset) { + return new Element.Offset( + this.left - offset.left, + this.top - offset.top + ); + }, + + inspect: function() { + return "#".interpolate(this); + }, + + toString: function() { + return "[#{left}, #{top}]".interpolate(this); + }, + + toArray: function() { + return [this.left, this.top]; + } + }); + + function getLayout(element, preCompute) { + return new Element.Layout(element, preCompute); + } + + function measure(element, property) { + return $(element).getLayout().get(property); + } + + function getHeight(element) { + return Element.getDimensions(element).height; + } + + function getWidth(element) { + return Element.getDimensions(element).width; + } + + function getDimensions(element) { + element = $(element); + var display = Element.getStyle(element, 'display'); + + if (display && display !== 'none') { + return { width: element.offsetWidth, height: element.offsetHeight }; + } + + var style = element.style; + var originalStyles = { + visibility: style.visibility, + position: style.position, + display: style.display + }; + + var newStyles = { + visibility: 'hidden', + display: 'block' + }; + + if (originalStyles.position !== 'fixed') + newStyles.position = 'absolute'; + + Element.setStyle(element, newStyles); + + var dimensions = { + width: element.offsetWidth, + height: element.offsetHeight + }; + + Element.setStyle(element, originalStyles); + + return dimensions; + } + + function getOffsetParent(element) { + element = $(element); + + if (isDocument(element) || isDetached(element) || isBody(element) || isHtml(element)) + return $(document.body); + + var isInline = (Element.getStyle(element, 'display') === 'inline'); + if (!isInline && element.offsetParent) return $(element.offsetParent); + + while ((element = element.parentNode) && element !== document.body) { + if (Element.getStyle(element, 'position') !== 'static') { + return isHtml(element) ? $(document.body) : $(element); + } + } + + return $(document.body); + } + + + function cumulativeOffset(element) { + element = $(element); + var valueT = 0, valueL = 0; + if (element.parentNode) { + do { + valueT += element.offsetTop || 0; + valueL += element.offsetLeft || 0; + element = element.offsetParent; + } while (element); + } + return new Element.Offset(valueL, valueT); + } + + function positionedOffset(element) { + element = $(element); + + var layout = element.getLayout(); + + var valueT = 0, valueL = 0; + do { + valueT += element.offsetTop || 0; + valueL += element.offsetLeft || 0; + element = element.offsetParent; + if (element) { + if (isBody(element)) break; + var p = Element.getStyle(element, 'position'); + if (p !== 'static') break; + } + } while (element); + + valueL -= layout.get('margin-top'); + valueT -= layout.get('margin-left'); + + return new Element.Offset(valueL, valueT); + } + + function cumulativeScrollOffset(element) { + var valueT = 0, valueL = 0; + do { + if (element === document.body) { + var bodyScrollNode = document.documentElement || document.body.parentNode || document.body; + valueT += !Object.isUndefined(window.pageYOffset) ? window.pageYOffset : bodyScrollNode.scrollTop || 0; + valueL += !Object.isUndefined(window.pageXOffset) ? window.pageXOffset : bodyScrollNode.scrollLeft || 0; + break; + } else { + valueT += element.scrollTop || 0; + valueL += element.scrollLeft || 0; + element = element.parentNode; + } + } while (element); + return new Element.Offset(valueL, valueT); + } + + function viewportOffset(forElement) { + var valueT = 0, valueL = 0, docBody = document.body; + + forElement = $(forElement); + var element = forElement; + do { + valueT += element.offsetTop || 0; + valueL += element.offsetLeft || 0; + if (element.offsetParent == docBody && + Element.getStyle(element, 'position') == 'absolute') break; + } while (element = element.offsetParent); + + element = forElement; + do { + if (element != docBody) { + valueT -= element.scrollTop || 0; + valueL -= element.scrollLeft || 0; + } + } while (element = element.parentNode); + return new Element.Offset(valueL, valueT); + } + + function absolutize(element) { + element = $(element); + + if (Element.getStyle(element, 'position') === 'absolute') { + return element; + } + + var offsetParent = getOffsetParent(element); + var eOffset = element.viewportOffset(), + pOffset = offsetParent.viewportOffset(); + + var offset = eOffset.relativeTo(pOffset); + var layout = element.getLayout(); + + element.store('prototype_absolutize_original_styles', { + position: element.getStyle('position'), + left: element.getStyle('left'), + top: element.getStyle('top'), + width: element.getStyle('width'), + height: element.getStyle('height') + }); + + element.setStyle({ + position: 'absolute', + top: offset.top + 'px', + left: offset.left + 'px', + width: layout.get('width') + 'px', + height: layout.get('height') + 'px' + }); + + return element; + } + + function relativize(element) { + element = $(element); + if (Element.getStyle(element, 'position') === 'relative') { + return element; + } + + var originalStyles = + element.retrieve('prototype_absolutize_original_styles'); + + if (originalStyles) element.setStyle(originalStyles); + return element; + } + + + function scrollTo(element) { + element = $(element); + var pos = Element.cumulativeOffset(element); + window.scrollTo(pos.left, pos.top); + return element; + } + + + function makePositioned(element) { + element = $(element); + var position = Element.getStyle(element, 'position'), styles = {}; + if (position === 'static' || !position) { + styles.position = 'relative'; + if (Prototype.Browser.Opera) { + styles.top = 0; + styles.left = 0; + } + Element.setStyle(element, styles); + Element.store(element, 'prototype_made_positioned', true); + } + return element; + } + + function undoPositioned(element) { + element = $(element); + var storage = Element.getStorage(element), + madePositioned = storage.get('prototype_made_positioned'); + + if (madePositioned) { + storage.unset('prototype_made_positioned'); + Element.setStyle(element, { + position: '', + top: '', + bottom: '', + left: '', + right: '' + }); + } + return element; + } + + function makeClipping(element) { + element = $(element); + + var storage = Element.getStorage(element), + madeClipping = storage.get('prototype_made_clipping'); + + if (Object.isUndefined(madeClipping)) { + var overflow = Element.getStyle(element, 'overflow'); + storage.set('prototype_made_clipping', overflow); + if (overflow !== 'hidden') + element.style.overflow = 'hidden'; + } + + return element; + } + + function undoClipping(element) { + element = $(element); + var storage = Element.getStorage(element), + overflow = storage.get('prototype_made_clipping'); + + if (!Object.isUndefined(overflow)) { + storage.unset('prototype_made_clipping'); + element.style.overflow = overflow || ''; + } + + return element; + } + + function clonePosition(element, source, options) { + options = Object.extend({ + setLeft: true, + setTop: true, + setWidth: true, + setHeight: true, + offsetTop: 0, + offsetLeft: 0 + }, options || {}); + + source = $(source); + element = $(element); + var p, delta, layout, styles = {}; + + if (options.setLeft || options.setTop) { + p = Element.viewportOffset(source); + delta = [0, 0]; + if (Element.getStyle(element, 'position') === 'absolute') { + var parent = Element.getOffsetParent(element); + if (parent !== document.body) delta = Element.viewportOffset(parent); + } + } + + if (options.setWidth || options.setHeight) { + layout = Element.getLayout(source); + } + + if (options.setLeft) + styles.left = (p[0] - delta[0] + options.offsetLeft) + 'px'; + if (options.setTop) + styles.top = (p[1] - delta[1] + options.offsetTop) + 'px'; + + if (options.setWidth) + styles.width = layout.get('border-box-width') + 'px'; + if (options.setHeight) + styles.height = layout.get('border-box-height') + 'px'; + + return Element.setStyle(element, styles); + } + + + if (Prototype.Browser.IE) { + getOffsetParent = getOffsetParent.wrap( + function(proceed, element) { + element = $(element); + + if (isDocument(element) || isDetached(element) || isBody(element) || isHtml(element)) + return $(document.body); + + var position = element.getStyle('position'); + if (position !== 'static') return proceed(element); + + element.setStyle({ position: 'relative' }); + var value = proceed(element); + element.setStyle({ position: position }); + return value; + } + ); + + positionedOffset = positionedOffset.wrap(function(proceed, element) { + element = $(element); + if (!element.parentNode) return new Element.Offset(0, 0); + var position = element.getStyle('position'); + if (position !== 'static') return proceed(element); + + var offsetParent = element.getOffsetParent(); + if (offsetParent && offsetParent.getStyle('position') === 'fixed') + hasLayout(offsetParent); + + element.setStyle({ position: 'relative' }); + var value = proceed(element); + element.setStyle({ position: position }); + return value; + }); + } else if (Prototype.Browser.Webkit) { + cumulativeOffset = function(element) { + element = $(element); + var valueT = 0, valueL = 0; + do { + valueT += element.offsetTop || 0; + valueL += element.offsetLeft || 0; + if (element.offsetParent == document.body) { + if (Element.getStyle(element, 'position') == 'absolute') break; + } + + element = element.offsetParent; + } while (element); + + return new Element.Offset(valueL, valueT); + }; + } + + + Element.addMethods({ + getLayout: getLayout, + measure: measure, + getWidth: getWidth, + getHeight: getHeight, + getDimensions: getDimensions, + getOffsetParent: getOffsetParent, + cumulativeOffset: cumulativeOffset, + positionedOffset: positionedOffset, + cumulativeScrollOffset: cumulativeScrollOffset, + viewportOffset: viewportOffset, + absolutize: absolutize, + relativize: relativize, + scrollTo: scrollTo, + makePositioned: makePositioned, + undoPositioned: undoPositioned, + makeClipping: makeClipping, + undoClipping: undoClipping, + clonePosition: clonePosition + }); + + function isBody(element) { + return element.nodeName.toUpperCase() === 'BODY'; + } + + function isHtml(element) { + return element.nodeName.toUpperCase() === 'HTML'; + } + + function isDocument(element) { + return element.nodeType === Node.DOCUMENT_NODE; + } + + function isDetached(element) { + return element !== document.body && + !Element.descendantOf(element, document.body); + } + + if ('getBoundingClientRect' in document.documentElement) { + Element.addMethods({ + viewportOffset: function(element) { + element = $(element); + if (isDetached(element)) return new Element.Offset(0, 0); + + var rect = element.getBoundingClientRect(), + docEl = document.documentElement; + return new Element.Offset(rect.left - docEl.clientLeft, + rect.top - docEl.clientTop); + } + }); + } + + +})(); + +(function() { + + var IS_OLD_OPERA = Prototype.Browser.Opera && + (window.parseFloat(window.opera.version()) < 9.5); + var ROOT = null; + function getRootElement() { + if (ROOT) return ROOT; + ROOT = IS_OLD_OPERA ? document.body : document.documentElement; + return ROOT; + } + + function getDimensions() { + return { width: this.getWidth(), height: this.getHeight() }; + } + + function getWidth() { + return getRootElement().clientWidth; + } + + function getHeight() { + return getRootElement().clientHeight; + } + + function getScrollOffsets() { + var x = window.pageXOffset || document.documentElement.scrollLeft || + document.body.scrollLeft; + var y = window.pageYOffset || document.documentElement.scrollTop || + document.body.scrollTop; + + return new Element.Offset(x, y); + } + + document.viewport = { + getDimensions: getDimensions, + getWidth: getWidth, + getHeight: getHeight, + getScrollOffsets: getScrollOffsets + }; + +})(); +window.$$ = function() { + var expression = $A(arguments).join(', '); + return Prototype.Selector.select(expression, document); +}; + +Prototype.Selector = (function() { + + function select() { + throw new Error('Method "Prototype.Selector.select" must be defined.'); + } + + function match() { + throw new Error('Method "Prototype.Selector.match" must be defined.'); + } + + function find(elements, expression, index) { + index = index || 0; + var match = Prototype.Selector.match, length = elements.length, matchIndex = 0, i; + + for (i = 0; i < length; i++) { + if (match(elements[i], expression) && index == matchIndex++) { + return Element.extend(elements[i]); + } + } + } + + function extendElements(elements) { + for (var i = 0, length = elements.length; i < length; i++) { + Element.extend(elements[i]); + } + return elements; + } + + + var K = Prototype.K; + + return { + select: select, + match: match, + find: find, + extendElements: (Element.extend === K) ? K : extendElements, + extendElement: Element.extend + }; +})(); +Prototype._original_property = window.Sizzle; +/*! + * Sizzle CSS Selector Engine v@VERSION + * http://sizzlejs.com/ + * + * Copyright 2013 jQuery Foundation, Inc. and other contributors + * Released under the MIT license + * http://jquery.org/license + * + * Date: @DATE + */ +(function( window ) { + +var i, + support, + Expr, + getText, + isXML, + compile, + select, + outermostContext, + sortInput, + hasDuplicate, + + setDocument, + document, + docElem, + documentIsHTML, + rbuggyQSA, + rbuggyMatches, + matches, + contains, + + expando = "sizzle" + -(new Date()), + preferredDoc = window.document, + dirruns = 0, + done = 0, + classCache = createCache(), + tokenCache = createCache(), + compilerCache = createCache(), + sortOrder = function( a, b ) { + if ( a === b ) { + hasDuplicate = true; + } + return 0; + }, + + strundefined = typeof undefined, + MAX_NEGATIVE = 1 << 31, + + hasOwn = ({}).hasOwnProperty, + arr = [], + pop = arr.pop, + push_native = arr.push, + push = arr.push, + slice = arr.slice, + indexOf = arr.indexOf || function( elem ) { + var i = 0, + len = this.length; + for ( ; i < len; i++ ) { + if ( this[i] === elem ) { + return i; + } + } + return -1; + }, + + booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped", + + + whitespace = "[\\x20\\t\\r\\n\\f]", + characterEncoding = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+", + + identifier = characterEncoding.replace( "w", "w#" ), + + attributes = "\\[" + whitespace + "*(" + characterEncoding + ")" + whitespace + + "*(?:([*^$|!~]?=)" + whitespace + "*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|(" + identifier + ")|)|)" + whitespace + "*\\]", + + pseudos = ":(" + characterEncoding + ")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|" + attributes.replace( 3, 8 ) + ")*)|.*)\\)|)", + + rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ), + + rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), + rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ), + + rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]", "g" ), + + rpseudo = new RegExp( pseudos ), + ridentifier = new RegExp( "^" + identifier + "$" ), + + matchExpr = { + "ID": new RegExp( "^#(" + characterEncoding + ")" ), + "CLASS": new RegExp( "^\\.(" + characterEncoding + ")" ), + "TAG": new RegExp( "^(" + characterEncoding.replace( "w", "w*" ) + ")" ), + "ATTR": new RegExp( "^" + attributes ), + "PSEUDO": new RegExp( "^" + pseudos ), + "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace + + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace + + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), + "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), + "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + + whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) + }, + + rinputs = /^(?:input|select|textarea|button)$/i, + rheader = /^h\d$/i, + + rnative = /^[^{]+\{\s*\[native \w/, + + rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, + + rsibling = /[+~]/, + rescape = /'|\\/g, + + runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ), + funescape = function( _, escaped, escapedWhitespace ) { + var high = "0x" + escaped - 0x10000; + return high !== high || escapedWhitespace ? + escaped : + high < 0 ? + String.fromCharCode( high + 0x10000 ) : + String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); + }; + +try { + push.apply( + (arr = slice.call( preferredDoc.childNodes )), + preferredDoc.childNodes + ); + arr[ preferredDoc.childNodes.length ].nodeType; +} catch ( e ) { + push = { apply: arr.length ? + + function( target, els ) { + push_native.apply( target, slice.call(els) ); + } : + + function( target, els ) { + var j = target.length, + i = 0; + while ( (target[j++] = els[i++]) ) {} + target.length = j - 1; + } + }; +} + +function Sizzle( selector, context, results, seed ) { + var match, elem, m, nodeType, + i, groups, old, nid, newContext, newSelector; + + if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) { + setDocument( context ); + } + + context = context || document; + results = results || []; + + if ( !selector || typeof selector !== "string" ) { + return results; + } + + if ( (nodeType = context.nodeType) !== 1 && nodeType !== 9 ) { + return []; + } + + if ( documentIsHTML && !seed ) { + + if ( (match = rquickExpr.exec( selector )) ) { + if ( (m = match[1]) ) { + if ( nodeType === 9 ) { + elem = context.getElementById( m ); + if ( elem && elem.parentNode ) { + if ( elem.id === m ) { + results.push( elem ); + return results; + } + } else { + return results; + } + } else { + if ( context.ownerDocument && (elem = context.ownerDocument.getElementById( m )) && + contains( context, elem ) && elem.id === m ) { + results.push( elem ); + return results; + } + } + + } else if ( match[2] ) { + push.apply( results, context.getElementsByTagName( selector ) ); + return results; + + } else if ( (m = match[3]) && support.getElementsByClassName && context.getElementsByClassName ) { + push.apply( results, context.getElementsByClassName( m ) ); + return results; + } + } + + if ( support.qsa && (!rbuggyQSA || !rbuggyQSA.test( selector )) ) { + nid = old = expando; + newContext = context; + newSelector = nodeType === 9 && selector; + + if ( nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) { + groups = tokenize( selector ); + + if ( (old = context.getAttribute("id")) ) { + nid = old.replace( rescape, "\\$&" ); + } else { + context.setAttribute( "id", nid ); + } + nid = "[id='" + nid + "'] "; + + i = groups.length; + while ( i-- ) { + groups[i] = nid + toSelector( groups[i] ); + } + newContext = rsibling.test( selector ) && testContext( context.parentNode ) || context; + newSelector = groups.join(","); + } + + if ( newSelector ) { + try { + push.apply( results, + newContext.querySelectorAll( newSelector ) + ); + return results; + } catch(qsaError) { + } finally { + if ( !old ) { + context.removeAttribute("id"); + } + } + } + } + } + + return select( selector.replace( rtrim, "$1" ), context, results, seed ); +} + +/** + * Create key-value caches of limited size + * @returns {Function(string, Object)} Returns the Object data after storing it on itself with + * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) + * deleting the oldest entry + */ +function createCache() { + var keys = []; + + function cache( key, value ) { + if ( keys.push( key + " " ) > Expr.cacheLength ) { + delete cache[ keys.shift() ]; + } + return (cache[ key + " " ] = value); + } + return cache; +} + +/** + * Mark a function for special use by Sizzle + * @param {Function} fn The function to mark + */ +function markFunction( fn ) { + fn[ expando ] = true; + return fn; +} + +/** + * Support testing using an element + * @param {Function} fn Passed the created div and expects a boolean result + */ +function assert( fn ) { + var div = document.createElement("div"); + + try { + return !!fn( div ); + } catch (e) { + return false; + } finally { + if ( div.parentNode ) { + div.parentNode.removeChild( div ); + } + div = null; + } +} + +/** + * Adds the same handler for all of the specified attrs + * @param {String} attrs Pipe-separated list of attributes + * @param {Function} handler The method that will be applied + */ +function addHandle( attrs, handler ) { + var arr = attrs.split("|"), + i = attrs.length; + + while ( i-- ) { + Expr.attrHandle[ arr[i] ] = handler; + } +} + +/** + * Checks document order of two siblings + * @param {Element} a + * @param {Element} b + * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b + */ +function siblingCheck( a, b ) { + var cur = b && a, + diff = cur && a.nodeType === 1 && b.nodeType === 1 && + ( ~b.sourceIndex || MAX_NEGATIVE ) - + ( ~a.sourceIndex || MAX_NEGATIVE ); + + if ( diff ) { + return diff; + } + + if ( cur ) { + while ( (cur = cur.nextSibling) ) { + if ( cur === b ) { + return -1; + } + } + } + + return a ? 1 : -1; +} + +/** + * Returns a function to use in pseudos for input types + * @param {String} type + */ +function createInputPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for buttons + * @param {String} type + */ +function createButtonPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return (name === "input" || name === "button") && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for positionals + * @param {Function} fn + */ +function createPositionalPseudo( fn ) { + return markFunction(function( argument ) { + argument = +argument; + return markFunction(function( seed, matches ) { + var j, + matchIndexes = fn( [], seed.length, argument ), + i = matchIndexes.length; + + while ( i-- ) { + if ( seed[ (j = matchIndexes[i]) ] ) { + seed[j] = !(matches[j] = seed[j]); + } + } + }); + }); +} + +/** + * Checks a node for validity as a Sizzle context + * @param {Element|Object=} context + * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value + */ +function testContext( context ) { + return context && typeof context.getElementsByTagName !== strundefined && context; +} + +support = Sizzle.support = {}; + +/** + * Detects XML nodes + * @param {Element|Object} elem An element or a document + * @returns {Boolean} True iff elem is a non-HTML XML node + */ +isXML = Sizzle.isXML = function( elem ) { + var documentElement = elem && (elem.ownerDocument || elem).documentElement; + return documentElement ? documentElement.nodeName !== "HTML" : false; +}; + +/** + * Sets document-related variables once based on the current document + * @param {Element|Object} [doc] An element or document object to use to set the document + * @returns {Object} Returns the current document + */ +setDocument = Sizzle.setDocument = function( node ) { + var hasCompare, + doc = node ? node.ownerDocument || node : preferredDoc, + parent = doc.defaultView; + + if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) { + return document; + } + + document = doc; + docElem = doc.documentElement; + + documentIsHTML = !isXML( doc ); + + if ( parent && parent !== parent.top ) { + if ( parent.addEventListener ) { + parent.addEventListener( "unload", function() { + setDocument(); + }, false ); + } else if ( parent.attachEvent ) { + parent.attachEvent( "onunload", function() { + setDocument(); + }); + } + } + + /* Attributes + ---------------------------------------------------------------------- */ + + support.attributes = assert(function( div ) { + div.className = "i"; + return !div.getAttribute("className"); + }); + + /* getElement(s)By* + ---------------------------------------------------------------------- */ + + support.getElementsByTagName = assert(function( div ) { + div.appendChild( doc.createComment("") ); + return !div.getElementsByTagName("*").length; + }); + + support.getElementsByClassName = rnative.test( doc.getElementsByClassName ) && assert(function( div ) { + div.innerHTML = "
    "; + + div.firstChild.className = "i"; + return div.getElementsByClassName("i").length === 2; + }); + + support.getById = assert(function( div ) { + docElem.appendChild( div ).id = expando; + return !doc.getElementsByName || !doc.getElementsByName( expando ).length; + }); + + if ( support.getById ) { + Expr.find["ID"] = function( id, context ) { + if ( typeof context.getElementById !== strundefined && documentIsHTML ) { + var m = context.getElementById( id ); + return m && m.parentNode ? [m] : []; + } + }; + Expr.filter["ID"] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + return elem.getAttribute("id") === attrId; + }; + }; + } else { + delete Expr.find["ID"]; + + Expr.filter["ID"] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + var node = typeof elem.getAttributeNode !== strundefined && elem.getAttributeNode("id"); + return node && node.value === attrId; + }; + }; + } + + Expr.find["TAG"] = support.getElementsByTagName ? + function( tag, context ) { + if ( typeof context.getElementsByTagName !== strundefined ) { + return context.getElementsByTagName( tag ); + } + } : + function( tag, context ) { + var elem, + tmp = [], + i = 0, + results = context.getElementsByTagName( tag ); + + if ( tag === "*" ) { + while ( (elem = results[i++]) ) { + if ( elem.nodeType === 1 ) { + tmp.push( elem ); + } + } + + return tmp; + } + return results; + }; + + Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) { + if ( typeof context.getElementsByClassName !== strundefined && documentIsHTML ) { + return context.getElementsByClassName( className ); + } + }; + + /* QSA/matchesSelector + ---------------------------------------------------------------------- */ + + + rbuggyMatches = []; + + rbuggyQSA = []; + + if ( (support.qsa = rnative.test( doc.querySelectorAll )) ) { + assert(function( div ) { + div.innerHTML = ""; + + if ( div.querySelectorAll("[t^='']").length ) { + rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); + } + + if ( !div.querySelectorAll("[selected]").length ) { + rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); + } + + if ( !div.querySelectorAll(":checked").length ) { + rbuggyQSA.push(":checked"); + } + }); + + assert(function( div ) { + var input = doc.createElement("input"); + input.setAttribute( "type", "hidden" ); + div.appendChild( input ).setAttribute( "name", "D" ); + + if ( div.querySelectorAll("[name=d]").length ) { + rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" ); + } + + if ( !div.querySelectorAll(":enabled").length ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + div.querySelectorAll("*,:x"); + rbuggyQSA.push(",.*:"); + }); + } + + if ( (support.matchesSelector = rnative.test( (matches = docElem.webkitMatchesSelector || + docElem.mozMatchesSelector || + docElem.oMatchesSelector || + docElem.msMatchesSelector) )) ) { + + assert(function( div ) { + support.disconnectedMatch = matches.call( div, "div" ); + + matches.call( div, "[s!='']:x" ); + rbuggyMatches.push( "!=", pseudos ); + }); + } + + rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") ); + rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") ); + + /* Contains + ---------------------------------------------------------------------- */ + hasCompare = rnative.test( docElem.compareDocumentPosition ); + + contains = hasCompare || rnative.test( docElem.contains ) ? + function( a, b ) { + var adown = a.nodeType === 9 ? a.documentElement : a, + bup = b && b.parentNode; + return a === bup || !!( bup && bup.nodeType === 1 && ( + adown.contains ? + adown.contains( bup ) : + a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 + )); + } : + function( a, b ) { + if ( b ) { + while ( (b = b.parentNode) ) { + if ( b === a ) { + return true; + } + } + } + return false; + }; + + /* Sorting + ---------------------------------------------------------------------- */ + + sortOrder = hasCompare ? + function( a, b ) { + + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; + if ( compare ) { + return compare; + } + + compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ? + a.compareDocumentPosition( b ) : + + 1; + + if ( compare & 1 || + (!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) { + + if ( a === doc || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) { + return -1; + } + if ( b === doc || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) { + return 1; + } + + return sortInput ? + ( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) : + 0; + } + + return compare & 4 ? -1 : 1; + } : + function( a, b ) { + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + var cur, + i = 0, + aup = a.parentNode, + bup = b.parentNode, + ap = [ a ], + bp = [ b ]; + + if ( !aup || !bup ) { + return a === doc ? -1 : + b === doc ? 1 : + aup ? -1 : + bup ? 1 : + sortInput ? + ( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) : + 0; + + } else if ( aup === bup ) { + return siblingCheck( a, b ); + } + + cur = a; + while ( (cur = cur.parentNode) ) { + ap.unshift( cur ); + } + cur = b; + while ( (cur = cur.parentNode) ) { + bp.unshift( cur ); + } + + while ( ap[i] === bp[i] ) { + i++; + } + + return i ? + siblingCheck( ap[i], bp[i] ) : + + ap[i] === preferredDoc ? -1 : + bp[i] === preferredDoc ? 1 : + 0; + }; + + return doc; +}; + +Sizzle.matches = function( expr, elements ) { + return Sizzle( expr, null, null, elements ); +}; + +Sizzle.matchesSelector = function( elem, expr ) { + if ( ( elem.ownerDocument || elem ) !== document ) { + setDocument( elem ); + } + + expr = expr.replace( rattributeQuotes, "='$1']" ); + + if ( support.matchesSelector && documentIsHTML && + ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) && + ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { + + try { + var ret = matches.call( elem, expr ); + + if ( ret || support.disconnectedMatch || + elem.document && elem.document.nodeType !== 11 ) { + return ret; + } + } catch(e) {} + } + + return Sizzle( expr, document, null, [elem] ).length > 0; +}; + +Sizzle.contains = function( context, elem ) { + if ( ( context.ownerDocument || context ) !== document ) { + setDocument( context ); + } + return contains( context, elem ); +}; + +Sizzle.attr = function( elem, name ) { + if ( ( elem.ownerDocument || elem ) !== document ) { + setDocument( elem ); + } + + var fn = Expr.attrHandle[ name.toLowerCase() ], + val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? + fn( elem, name, !documentIsHTML ) : + undefined; + + return val !== undefined ? + val : + support.attributes || !documentIsHTML ? + elem.getAttribute( name ) : + (val = elem.getAttributeNode(name)) && val.specified ? + val.value : + null; +}; + +Sizzle.error = function( msg ) { + throw new Error( "Syntax error, unrecognized expression: " + msg ); +}; + +/** + * Document sorting and removing duplicates + * @param {ArrayLike} results + */ +Sizzle.uniqueSort = function( results ) { + var elem, + duplicates = [], + j = 0, + i = 0; + + hasDuplicate = !support.detectDuplicates; + sortInput = !support.sortStable && results.slice( 0 ); + results.sort( sortOrder ); + + if ( hasDuplicate ) { + while ( (elem = results[i++]) ) { + if ( elem === results[ i ] ) { + j = duplicates.push( i ); + } + } + while ( j-- ) { + results.splice( duplicates[ j ], 1 ); + } + } + + sortInput = null; + + return results; +}; + +/** + * Utility function for retrieving the text value of an array of DOM nodes + * @param {Array|Element} elem + */ +getText = Sizzle.getText = function( elem ) { + var node, + ret = "", + i = 0, + nodeType = elem.nodeType; + + if ( !nodeType ) { + while ( (node = elem[i++]) ) { + ret += getText( node ); + } + } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { + if ( typeof elem.textContent === "string" ) { + return elem.textContent; + } else { + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + ret += getText( elem ); + } + } + } else if ( nodeType === 3 || nodeType === 4 ) { + return elem.nodeValue; + } + + return ret; +}; + +Expr = Sizzle.selectors = { + + cacheLength: 50, + + createPseudo: markFunction, + + match: matchExpr, + + attrHandle: {}, + + find: {}, + + relative: { + ">": { dir: "parentNode", first: true }, + " ": { dir: "parentNode" }, + "+": { dir: "previousSibling", first: true }, + "~": { dir: "previousSibling" } + }, + + preFilter: { + "ATTR": function( match ) { + match[1] = match[1].replace( runescape, funescape ); + + match[3] = ( match[4] || match[5] || "" ).replace( runescape, funescape ); + + if ( match[2] === "~=" ) { + match[3] = " " + match[3] + " "; + } + + return match.slice( 0, 4 ); + }, + + "CHILD": function( match ) { + /* matches from matchExpr["CHILD"] + 1 type (only|nth|...) + 2 what (child|of-type) + 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) + 4 xn-component of xn+y argument ([+-]?\d*n|) + 5 sign of xn-component + 6 x of xn-component + 7 sign of y-component + 8 y of y-component + */ + match[1] = match[1].toLowerCase(); + + if ( match[1].slice( 0, 3 ) === "nth" ) { + if ( !match[3] ) { + Sizzle.error( match[0] ); + } + + match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) ); + match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" ); + + } else if ( match[3] ) { + Sizzle.error( match[0] ); + } + + return match; + }, + + "PSEUDO": function( match ) { + var excess, + unquoted = !match[5] && match[2]; + + if ( matchExpr["CHILD"].test( match[0] ) ) { + return null; + } + + if ( match[3] && match[4] !== undefined ) { + match[2] = match[4]; + + } else if ( unquoted && rpseudo.test( unquoted ) && + (excess = tokenize( unquoted, true )) && + (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) { + + match[0] = match[0].slice( 0, excess ); + match[2] = unquoted.slice( 0, excess ); + } + + return match.slice( 0, 3 ); + } + }, + + filter: { + + "TAG": function( nodeNameSelector ) { + var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); + return nodeNameSelector === "*" ? + function() { return true; } : + function( elem ) { + return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; + }; + }, + + "CLASS": function( className ) { + var pattern = classCache[ className + " " ]; + + return pattern || + (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) && + classCache( className, function( elem ) { + return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== strundefined && elem.getAttribute("class") || "" ); + }); + }, + + "ATTR": function( name, operator, check ) { + return function( elem ) { + var result = Sizzle.attr( elem, name ); + + if ( result == null ) { + return operator === "!="; + } + if ( !operator ) { + return true; + } + + result += ""; + + return operator === "=" ? result === check : + operator === "!=" ? result !== check : + operator === "^=" ? check && result.indexOf( check ) === 0 : + operator === "*=" ? check && result.indexOf( check ) > -1 : + operator === "$=" ? check && result.slice( -check.length ) === check : + operator === "~=" ? ( " " + result + " " ).indexOf( check ) > -1 : + operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : + false; + }; + }, + + "CHILD": function( type, what, argument, first, last ) { + var simple = type.slice( 0, 3 ) !== "nth", + forward = type.slice( -4 ) !== "last", + ofType = what === "of-type"; + + return first === 1 && last === 0 ? + + function( elem ) { + return !!elem.parentNode; + } : + + function( elem, context, xml ) { + var cache, outerCache, node, diff, nodeIndex, start, + dir = simple !== forward ? "nextSibling" : "previousSibling", + parent = elem.parentNode, + name = ofType && elem.nodeName.toLowerCase(), + useCache = !xml && !ofType; + + if ( parent ) { + + if ( simple ) { + while ( dir ) { + node = elem; + while ( (node = node[ dir ]) ) { + if ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) { + return false; + } + } + start = dir = type === "only" && !start && "nextSibling"; + } + return true; + } + + start = [ forward ? parent.firstChild : parent.lastChild ]; + + if ( forward && useCache ) { + outerCache = parent[ expando ] || (parent[ expando ] = {}); + cache = outerCache[ type ] || []; + nodeIndex = cache[0] === dirruns && cache[1]; + diff = cache[0] === dirruns && cache[2]; + node = nodeIndex && parent.childNodes[ nodeIndex ]; + + while ( (node = ++nodeIndex && node && node[ dir ] || + + (diff = nodeIndex = 0) || start.pop()) ) { + + if ( node.nodeType === 1 && ++diff && node === elem ) { + outerCache[ type ] = [ dirruns, nodeIndex, diff ]; + break; + } + } + + } else if ( useCache && (cache = (elem[ expando ] || (elem[ expando ] = {}))[ type ]) && cache[0] === dirruns ) { + diff = cache[1]; + + } else { + while ( (node = ++nodeIndex && node && node[ dir ] || + (diff = nodeIndex = 0) || start.pop()) ) { + + if ( ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) && ++diff ) { + if ( useCache ) { + (node[ expando ] || (node[ expando ] = {}))[ type ] = [ dirruns, diff ]; + } + + if ( node === elem ) { + break; + } + } + } + } + + diff -= last; + return diff === first || ( diff % first === 0 && diff / first >= 0 ); + } + }; + }, + + "PSEUDO": function( pseudo, argument ) { + var args, + fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || + Sizzle.error( "unsupported pseudo: " + pseudo ); + + if ( fn[ expando ] ) { + return fn( argument ); + } + + if ( fn.length > 1 ) { + args = [ pseudo, pseudo, "", argument ]; + return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? + markFunction(function( seed, matches ) { + var idx, + matched = fn( seed, argument ), + i = matched.length; + while ( i-- ) { + idx = indexOf.call( seed, matched[i] ); + seed[ idx ] = !( matches[ idx ] = matched[i] ); + } + }) : + function( elem ) { + return fn( elem, 0, args ); + }; + } + + return fn; + } + }, + + pseudos: { + "not": markFunction(function( selector ) { + var input = [], + results = [], + matcher = compile( selector.replace( rtrim, "$1" ) ); + + return matcher[ expando ] ? + markFunction(function( seed, matches, context, xml ) { + var elem, + unmatched = matcher( seed, null, xml, [] ), + i = seed.length; + + while ( i-- ) { + if ( (elem = unmatched[i]) ) { + seed[i] = !(matches[i] = elem); + } + } + }) : + function( elem, context, xml ) { + input[0] = elem; + matcher( input, null, xml, results ); + return !results.pop(); + }; + }), + + "has": markFunction(function( selector ) { + return function( elem ) { + return Sizzle( selector, elem ).length > 0; + }; + }), + + "contains": markFunction(function( text ) { + return function( elem ) { + return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1; + }; + }), + + "lang": markFunction( function( lang ) { + if ( !ridentifier.test(lang || "") ) { + Sizzle.error( "unsupported lang: " + lang ); + } + lang = lang.replace( runescape, funescape ).toLowerCase(); + return function( elem ) { + var elemLang; + do { + if ( (elemLang = documentIsHTML ? + elem.lang : + elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) { + + elemLang = elemLang.toLowerCase(); + return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; + } + } while ( (elem = elem.parentNode) && elem.nodeType === 1 ); + return false; + }; + }), + + "target": function( elem ) { + var hash = window.location && window.location.hash; + return hash && hash.slice( 1 ) === elem.id; + }, + + "root": function( elem ) { + return elem === docElem; + }, + + "focus": function( elem ) { + return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex); + }, + + "enabled": function( elem ) { + return elem.disabled === false; + }, + + "disabled": function( elem ) { + return elem.disabled === true; + }, + + "checked": function( elem ) { + var nodeName = elem.nodeName.toLowerCase(); + return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected); + }, + + "selected": function( elem ) { + if ( elem.parentNode ) { + elem.parentNode.selectedIndex; + } + + return elem.selected === true; + }, + + "empty": function( elem ) { + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + if ( elem.nodeType < 6 ) { + return false; + } + } + return true; + }, + + "parent": function( elem ) { + return !Expr.pseudos["empty"]( elem ); + }, + + "header": function( elem ) { + return rheader.test( elem.nodeName ); + }, + + "input": function( elem ) { + return rinputs.test( elem.nodeName ); + }, + + "button": function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === "button" || name === "button"; + }, + + "text": function( elem ) { + var attr; + return elem.nodeName.toLowerCase() === "input" && + elem.type === "text" && + + ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" ); + }, + + "first": createPositionalPseudo(function() { + return [ 0 ]; + }), + + "last": createPositionalPseudo(function( matchIndexes, length ) { + return [ length - 1 ]; + }), + + "eq": createPositionalPseudo(function( matchIndexes, length, argument ) { + return [ argument < 0 ? argument + length : argument ]; + }), + + "even": createPositionalPseudo(function( matchIndexes, length ) { + var i = 0; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "odd": createPositionalPseudo(function( matchIndexes, length ) { + var i = 1; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "lt": createPositionalPseudo(function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; --i >= 0; ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "gt": createPositionalPseudo(function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; ++i < length; ) { + matchIndexes.push( i ); + } + return matchIndexes; + }) + } +}; + +Expr.pseudos["nth"] = Expr.pseudos["eq"]; + +for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { + Expr.pseudos[ i ] = createInputPseudo( i ); +} +for ( i in { submit: true, reset: true } ) { + Expr.pseudos[ i ] = createButtonPseudo( i ); +} + +function setFilters() {} +setFilters.prototype = Expr.filters = Expr.pseudos; +Expr.setFilters = new setFilters(); + +function tokenize( selector, parseOnly ) { + var matched, match, tokens, type, + soFar, groups, preFilters, + cached = tokenCache[ selector + " " ]; + + if ( cached ) { + return parseOnly ? 0 : cached.slice( 0 ); + } + + soFar = selector; + groups = []; + preFilters = Expr.preFilter; + + while ( soFar ) { + + if ( !matched || (match = rcomma.exec( soFar )) ) { + if ( match ) { + soFar = soFar.slice( match[0].length ) || soFar; + } + groups.push( (tokens = []) ); + } + + matched = false; + + if ( (match = rcombinators.exec( soFar )) ) { + matched = match.shift(); + tokens.push({ + value: matched, + type: match[0].replace( rtrim, " " ) + }); + soFar = soFar.slice( matched.length ); + } + + for ( type in Expr.filter ) { + if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] || + (match = preFilters[ type ]( match ))) ) { + matched = match.shift(); + tokens.push({ + value: matched, + type: type, + matches: match + }); + soFar = soFar.slice( matched.length ); + } + } + + if ( !matched ) { + break; + } + } + + return parseOnly ? + soFar.length : + soFar ? + Sizzle.error( selector ) : + tokenCache( selector, groups ).slice( 0 ); +} + +function toSelector( tokens ) { + var i = 0, + len = tokens.length, + selector = ""; + for ( ; i < len; i++ ) { + selector += tokens[i].value; + } + return selector; +} + +function addCombinator( matcher, combinator, base ) { + var dir = combinator.dir, + checkNonElements = base && dir === "parentNode", + doneName = done++; + + return combinator.first ? + function( elem, context, xml ) { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + return matcher( elem, context, xml ); + } + } + } : + + function( elem, context, xml ) { + var oldCache, outerCache, + newCache = [ dirruns, doneName ]; + + if ( xml ) { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + if ( matcher( elem, context, xml ) ) { + return true; + } + } + } + } else { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + outerCache = elem[ expando ] || (elem[ expando ] = {}); + if ( (oldCache = outerCache[ dir ]) && + oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { + + return (newCache[ 2 ] = oldCache[ 2 ]); + } else { + outerCache[ dir ] = newCache; + + if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) { + return true; + } + } + } + } + } + }; +} + +function elementMatcher( matchers ) { + return matchers.length > 1 ? + function( elem, context, xml ) { + var i = matchers.length; + while ( i-- ) { + if ( !matchers[i]( elem, context, xml ) ) { + return false; + } + } + return true; + } : + matchers[0]; +} + +function multipleContexts( selector, contexts, results ) { + var i = 0, + len = contexts.length; + for ( ; i < len; i++ ) { + Sizzle( selector, contexts[i], results ); + } + return results; +} + +function condense( unmatched, map, filter, context, xml ) { + var elem, + newUnmatched = [], + i = 0, + len = unmatched.length, + mapped = map != null; + + for ( ; i < len; i++ ) { + if ( (elem = unmatched[i]) ) { + if ( !filter || filter( elem, context, xml ) ) { + newUnmatched.push( elem ); + if ( mapped ) { + map.push( i ); + } + } + } + } + + return newUnmatched; +} + +function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { + if ( postFilter && !postFilter[ expando ] ) { + postFilter = setMatcher( postFilter ); + } + if ( postFinder && !postFinder[ expando ] ) { + postFinder = setMatcher( postFinder, postSelector ); + } + return markFunction(function( seed, results, context, xml ) { + var temp, i, elem, + preMap = [], + postMap = [], + preexisting = results.length, + + elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ), + + matcherIn = preFilter && ( seed || !selector ) ? + condense( elems, preMap, preFilter, context, xml ) : + elems, + + matcherOut = matcher ? + postFinder || ( seed ? preFilter : preexisting || postFilter ) ? + + [] : + + results : + matcherIn; + + if ( matcher ) { + matcher( matcherIn, matcherOut, context, xml ); + } + + if ( postFilter ) { + temp = condense( matcherOut, postMap ); + postFilter( temp, [], context, xml ); + + i = temp.length; + while ( i-- ) { + if ( (elem = temp[i]) ) { + matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem); + } + } + } + + if ( seed ) { + if ( postFinder || preFilter ) { + if ( postFinder ) { + temp = []; + i = matcherOut.length; + while ( i-- ) { + if ( (elem = matcherOut[i]) ) { + temp.push( (matcherIn[i] = elem) ); + } + } + postFinder( null, (matcherOut = []), temp, xml ); + } + + i = matcherOut.length; + while ( i-- ) { + if ( (elem = matcherOut[i]) && + (temp = postFinder ? indexOf.call( seed, elem ) : preMap[i]) > -1 ) { + + seed[temp] = !(results[temp] = elem); + } + } + } + + } else { + matcherOut = condense( + matcherOut === results ? + matcherOut.splice( preexisting, matcherOut.length ) : + matcherOut + ); + if ( postFinder ) { + postFinder( null, results, matcherOut, xml ); + } else { + push.apply( results, matcherOut ); + } + } + }); +} + +function matcherFromTokens( tokens ) { + var checkContext, matcher, j, + len = tokens.length, + leadingRelative = Expr.relative[ tokens[0].type ], + implicitRelative = leadingRelative || Expr.relative[" "], + i = leadingRelative ? 1 : 0, + + matchContext = addCombinator( function( elem ) { + return elem === checkContext; + }, implicitRelative, true ), + matchAnyContext = addCombinator( function( elem ) { + return indexOf.call( checkContext, elem ) > -1; + }, implicitRelative, true ), + matchers = [ function( elem, context, xml ) { + return ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( + (checkContext = context).nodeType ? + matchContext( elem, context, xml ) : + matchAnyContext( elem, context, xml ) ); + } ]; + + for ( ; i < len; i++ ) { + if ( (matcher = Expr.relative[ tokens[i].type ]) ) { + matchers = [ addCombinator(elementMatcher( matchers ), matcher) ]; + } else { + matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches ); + + if ( matcher[ expando ] ) { + j = ++i; + for ( ; j < len; j++ ) { + if ( Expr.relative[ tokens[j].type ] ) { + break; + } + } + return setMatcher( + i > 1 && elementMatcher( matchers ), + i > 1 && toSelector( + tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" }) + ).replace( rtrim, "$1" ), + matcher, + i < j && matcherFromTokens( tokens.slice( i, j ) ), + j < len && matcherFromTokens( (tokens = tokens.slice( j )) ), + j < len && toSelector( tokens ) + ); + } + matchers.push( matcher ); + } + } + + return elementMatcher( matchers ); +} + +function matcherFromGroupMatchers( elementMatchers, setMatchers ) { + var bySet = setMatchers.length > 0, + byElement = elementMatchers.length > 0, + superMatcher = function( seed, context, xml, results, outermost ) { + var elem, j, matcher, + matchedCount = 0, + i = "0", + unmatched = seed && [], + setMatched = [], + contextBackup = outermostContext, + elems = seed || byElement && Expr.find["TAG"]( "*", outermost ), + dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1), + len = elems.length; + + if ( outermost ) { + outermostContext = context !== document && context; + } + + for ( ; i !== len && (elem = elems[i]) != null; i++ ) { + if ( byElement && elem ) { + j = 0; + while ( (matcher = elementMatchers[j++]) ) { + if ( matcher( elem, context, xml ) ) { + results.push( elem ); + break; + } + } + if ( outermost ) { + dirruns = dirrunsUnique; + } + } + + if ( bySet ) { + if ( (elem = !matcher && elem) ) { + matchedCount--; + } + + if ( seed ) { + unmatched.push( elem ); + } + } + } + + matchedCount += i; + if ( bySet && i !== matchedCount ) { + j = 0; + while ( (matcher = setMatchers[j++]) ) { + matcher( unmatched, setMatched, context, xml ); + } + + if ( seed ) { + if ( matchedCount > 0 ) { + while ( i-- ) { + if ( !(unmatched[i] || setMatched[i]) ) { + setMatched[i] = pop.call( results ); + } + } + } + + setMatched = condense( setMatched ); + } + + push.apply( results, setMatched ); + + if ( outermost && !seed && setMatched.length > 0 && + ( matchedCount + setMatchers.length ) > 1 ) { + + Sizzle.uniqueSort( results ); + } + } + + if ( outermost ) { + dirruns = dirrunsUnique; + outermostContext = contextBackup; + } + + return unmatched; + }; + + return bySet ? + markFunction( superMatcher ) : + superMatcher; +} + +compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) { + var i, + setMatchers = [], + elementMatchers = [], + cached = compilerCache[ selector + " " ]; + + if ( !cached ) { + if ( !match ) { + match = tokenize( selector ); + } + i = match.length; + while ( i-- ) { + cached = matcherFromTokens( match[i] ); + if ( cached[ expando ] ) { + setMatchers.push( cached ); + } else { + elementMatchers.push( cached ); + } + } + + cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) ); + + cached.selector = selector; + } + return cached; +}; + +/** + * A low-level selection function that works with Sizzle's compiled + * selector functions + * @param {String|Function} selector A selector or a pre-compiled + * selector function built with Sizzle.compile + * @param {Element} context + * @param {Array} [results] + * @param {Array} [seed] A set of elements to match against + */ +select = Sizzle.select = function( selector, context, results, seed ) { + var i, tokens, token, type, find, + compiled = typeof selector === "function" && selector, + match = !seed && tokenize( (selector = compiled.selector || selector) ); + + results = results || []; + + if ( match.length === 1 ) { + + tokens = match[0] = match[0].slice( 0 ); + if ( tokens.length > 2 && (token = tokens[0]).type === "ID" && + support.getById && context.nodeType === 9 && documentIsHTML && + Expr.relative[ tokens[1].type ] ) { + + context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0]; + if ( !context ) { + return results; + + } else if ( compiled ) { + context = context.parentNode; + } + + selector = selector.slice( tokens.shift().value.length ); + } + + i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length; + while ( i-- ) { + token = tokens[i]; + + if ( Expr.relative[ (type = token.type) ] ) { + break; + } + if ( (find = Expr.find[ type ]) ) { + if ( (seed = find( + token.matches[0].replace( runescape, funescape ), + rsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context + )) ) { + + tokens.splice( i, 1 ); + selector = seed.length && toSelector( tokens ); + if ( !selector ) { + push.apply( results, seed ); + return results; + } + + break; + } + } + } + } + + ( compiled || compile( selector, match ) )( + seed, + context, + !documentIsHTML, + results, + rsibling.test( selector ) && testContext( context.parentNode ) || context + ); + return results; +}; + + +support.sortStable = expando.split("").sort( sortOrder ).join("") === expando; + +support.detectDuplicates = !!hasDuplicate; + +setDocument(); + +support.sortDetached = assert(function( div1 ) { + return div1.compareDocumentPosition( document.createElement("div") ) & 1; +}); + +if ( !assert(function( div ) { + div.innerHTML = ""; + return div.firstChild.getAttribute("href") === "#" ; +}) ) { + addHandle( "type|href|height|width", function( elem, name, isXML ) { + if ( !isXML ) { + return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 ); + } + }); +} + +if ( !support.attributes || !assert(function( div ) { + div.innerHTML = ""; + div.firstChild.setAttribute( "value", "" ); + return div.firstChild.getAttribute( "value" ) === ""; +}) ) { + addHandle( "value", function( elem, name, isXML ) { + if ( !isXML && elem.nodeName.toLowerCase() === "input" ) { + return elem.defaultValue; + } + }); +} + +if ( !assert(function( div ) { + return div.getAttribute("disabled") == null; +}) ) { + addHandle( booleans, function( elem, name, isXML ) { + var val; + if ( !isXML ) { + return elem[ name ] === true ? name.toLowerCase() : + (val = elem.getAttributeNode( name )) && val.specified ? + val.value : + null; + } + }); +} + +if ( typeof define === "function" && define.amd ) { + define(function() { return Sizzle; }); +} else if ( typeof module !== "undefined" && module.exports ) { + module.exports = Sizzle; +} else { + window.Sizzle = Sizzle; +} + +})( window ); + +;(function(engine) { + var extendElements = Prototype.Selector.extendElements; + + function select(selector, scope) { + return extendElements(engine(selector, scope || document)); + } + + function match(element, selector) { + return engine.matches(selector, [element]).length == 1; + } + + Prototype.Selector.engine = engine; + Prototype.Selector.select = select; + Prototype.Selector.match = match; +})(Sizzle); + +window.Sizzle = Prototype._original_property; +delete Prototype._original_property; + +var Form = { + reset: function(form) { + form = $(form); + form.reset(); + return form; + }, + + serializeElements: function(elements, options) { + if (typeof options != 'object') options = { hash: !!options }; + else if (Object.isUndefined(options.hash)) options.hash = true; + var key, value, submitted = false, submit = options.submit, accumulator, initial; + + if (options.hash) { + initial = {}; + accumulator = function(result, key, value) { + if (key in result) { + if (!Object.isArray(result[key])) result[key] = [result[key]]; + result[key] = result[key].concat(value); + } else result[key] = value; + return result; + }; + } else { + initial = ''; + accumulator = function(result, key, values) { + if (!Object.isArray(values)) {values = [values];} + if (!values.length) {return result;} + var encodedKey = encodeURIComponent(key).gsub(/%20/, '+'); + return result + (result ? "&" : "") + values.map(function (value) { + value = value.gsub(/(\r)?\n/, '\r\n'); + value = encodeURIComponent(value); + value = value.gsub(/%20/, '+'); + return encodedKey + "=" + value; + }).join("&"); + }; + } + + return elements.inject(initial, function(result, element) { + if (!element.disabled && element.name) { + key = element.name; value = $(element).getValue(); + if (value != null && element.type != 'file' && (element.type != 'submit' || (!submitted && + submit !== false && (!submit || key == submit) && (submitted = true)))) { + result = accumulator(result, key, value); + } + } + return result; + }); + } +}; + +Form.Methods = { + serialize: function(form, options) { + return Form.serializeElements(Form.getElements(form), options); + }, + + + getElements: function(form) { + var elements = $(form).getElementsByTagName('*'); + var element, results = [], serializers = Form.Element.Serializers; + + for (var i = 0; element = elements[i]; i++) { + if (serializers[element.tagName.toLowerCase()]) + results.push(Element.extend(element)); + } + return results; + }, + + getInputs: function(form, typeName, name) { + form = $(form); + var inputs = form.getElementsByTagName('input'); + + if (!typeName && !name) return $A(inputs).map(Element.extend); + + for (var i = 0, matchingInputs = [], length = inputs.length; i < length; i++) { + var input = inputs[i]; + if ((typeName && input.type != typeName) || (name && input.name != name)) + continue; + matchingInputs.push(Element.extend(input)); + } + + return matchingInputs; + }, + + disable: function(form) { + form = $(form); + Form.getElements(form).invoke('disable'); + return form; + }, + + enable: function(form) { + form = $(form); + Form.getElements(form).invoke('enable'); + return form; + }, + + findFirstElement: function(form) { + var elements = $(form).getElements().findAll(function(element) { + return 'hidden' != element.type && !element.disabled; + }); + var firstByIndex = elements.findAll(function(element) { + return element.hasAttribute('tabIndex') && element.tabIndex >= 0; + }).sortBy(function(element) { return element.tabIndex }).first(); + + return firstByIndex ? firstByIndex : elements.find(function(element) { + return /^(?:input|select|textarea)$/i.test(element.tagName); + }); + }, + + focusFirstElement: function(form) { + form = $(form); + var element = form.findFirstElement(); + if (element) element.activate(); + return form; + }, + + request: function(form, options) { + form = $(form), options = Object.clone(options || { }); + + var params = options.parameters, action = form.readAttribute('action') || ''; + if (action.blank()) action = window.location.href; + options.parameters = form.serialize(true); + + if (params) { + if (Object.isString(params)) params = params.toQueryParams(); + Object.extend(options.parameters, params); + } + + if (form.hasAttribute('method') && !options.method) + options.method = form.method; + + return new Ajax.Request(action, options); + } +}; + +/*--------------------------------------------------------------------------*/ + + +Form.Element = { + focus: function(element) { + $(element).focus(); + return element; + }, + + select: function(element) { + $(element).select(); + return element; + } +}; + +Form.Element.Methods = { + + serialize: function(element) { + element = $(element); + if (!element.disabled && element.name) { + var value = element.getValue(); + if (value != undefined) { + var pair = { }; + pair[element.name] = value; + return Object.toQueryString(pair); + } + } + return ''; + }, + + getValue: function(element) { + element = $(element); + var method = element.tagName.toLowerCase(); + return Form.Element.Serializers[method](element); + }, + + setValue: function(element, value) { + element = $(element); + var method = element.tagName.toLowerCase(); + Form.Element.Serializers[method](element, value); + return element; + }, + + clear: function(element) { + $(element).value = ''; + return element; + }, + + present: function(element) { + return $(element).value != ''; + }, + + activate: function(element) { + element = $(element); + try { + element.focus(); + if (element.select && (element.tagName.toLowerCase() != 'input' || + !(/^(?:button|reset|submit)$/i.test(element.type)))) + element.select(); + } catch (e) { } + return element; + }, + + disable: function(element) { + element = $(element); + element.disabled = true; + return element; + }, + + enable: function(element) { + element = $(element); + element.disabled = false; + return element; + } +}; + +/*--------------------------------------------------------------------------*/ + +var Field = Form.Element; + +var $F = Form.Element.Methods.getValue; + +/*--------------------------------------------------------------------------*/ + +Form.Element.Serializers = (function() { + function input(element, value) { + switch (element.type.toLowerCase()) { + case 'checkbox': + case 'radio': + return inputSelector(element, value); + default: + return valueSelector(element, value); + } + } + + function inputSelector(element, value) { + if (Object.isUndefined(value)) + return element.checked ? element.value : null; + else element.checked = !!value; + } + + function valueSelector(element, value) { + if (Object.isUndefined(value)) return element.value; + else element.value = value; + } + + function select(element, value) { + if (Object.isUndefined(value)) + return (element.type === 'select-one' ? selectOne : selectMany)(element); + + var opt, currentValue, single = !Object.isArray(value); + for (var i = 0, length = element.length; i < length; i++) { + opt = element.options[i]; + currentValue = this.optionValue(opt); + if (single) { + if (currentValue == value) { + opt.selected = true; + return; + } + } + else opt.selected = value.include(currentValue); + } + } + + function selectOne(element) { + var index = element.selectedIndex; + return index >= 0 ? optionValue(element.options[index]) : null; + } + + function selectMany(element) { + var values, length = element.length; + if (!length) return null; + + for (var i = 0, values = []; i < length; i++) { + var opt = element.options[i]; + if (opt.selected) values.push(optionValue(opt)); + } + return values; + } + + function optionValue(opt) { + return Element.hasAttribute(opt, 'value') ? opt.value : opt.text; + } + + return { + input: input, + inputSelector: inputSelector, + textarea: valueSelector, + select: select, + selectOne: selectOne, + selectMany: selectMany, + optionValue: optionValue, + button: valueSelector + }; +})(); + +/*--------------------------------------------------------------------------*/ + + +Abstract.TimedObserver = Class.create(PeriodicalExecuter, { + initialize: function($super, element, frequency, callback) { + $super(callback, frequency); + this.element = $(element); + this.lastValue = this.getValue(); + }, + + execute: function() { + var value = this.getValue(); + if (Object.isString(this.lastValue) && Object.isString(value) ? + this.lastValue != value : String(this.lastValue) != String(value)) { + this.callback(this.element, value); + this.lastValue = value; + } + } +}); + +Form.Element.Observer = Class.create(Abstract.TimedObserver, { + getValue: function() { + return Form.Element.getValue(this.element); + } +}); + +Form.Observer = Class.create(Abstract.TimedObserver, { + getValue: function() { + return Form.serialize(this.element); + } +}); + +/*--------------------------------------------------------------------------*/ + +Abstract.EventObserver = Class.create({ + initialize: function(element, callback) { + this.element = $(element); + this.callback = callback; + + this.lastValue = this.getValue(); + if (this.element.tagName.toLowerCase() == 'form') + this.registerFormCallbacks(); + else + this.registerCallback(this.element); + }, + + onElementEvent: function() { + var value = this.getValue(); + if (this.lastValue != value) { + this.callback(this.element, value); + this.lastValue = value; + } + }, + + registerFormCallbacks: function() { + Form.getElements(this.element).each(this.registerCallback, this); + }, + + registerCallback: function(element) { + if (element.type) { + switch (element.type.toLowerCase()) { + case 'checkbox': + case 'radio': + Event.observe(element, 'click', this.onElementEvent.bind(this)); + break; + default: + Event.observe(element, 'change', this.onElementEvent.bind(this)); + break; + } + } + } +}); + +Form.Element.EventObserver = Class.create(Abstract.EventObserver, { + getValue: function() { + return Form.Element.getValue(this.element); + } +}); + +Form.EventObserver = Class.create(Abstract.EventObserver, { + getValue: function() { + return Form.serialize(this.element); + } +}); +(function(GLOBAL) { + var DIV = document.createElement('div'); + var docEl = document.documentElement; + var MOUSEENTER_MOUSELEAVE_EVENTS_SUPPORTED = 'onmouseenter' in docEl + && 'onmouseleave' in docEl; + + var Event = { + KEY_BACKSPACE: 8, + KEY_TAB: 9, + KEY_RETURN: 13, + KEY_ESC: 27, + KEY_LEFT: 37, + KEY_UP: 38, + KEY_RIGHT: 39, + KEY_DOWN: 40, + KEY_DELETE: 46, + KEY_HOME: 36, + KEY_END: 35, + KEY_PAGEUP: 33, + KEY_PAGEDOWN: 34, + KEY_INSERT: 45 + }; + + + var isIELegacyEvent = function(event) { return false; }; + + if (window.attachEvent) { + if (window.addEventListener) { + isIELegacyEvent = function(event) { + return !(event instanceof window.Event); + }; + } else { + isIELegacyEvent = function(event) { return true; }; + } + } + + var _isButton; + + function _isButtonForDOMEvents(event, code) { + return event.which ? (event.which === code + 1) : (event.button === code); + } + + var legacyButtonMap = { 0: 1, 1: 4, 2: 2 }; + function _isButtonForLegacyEvents(event, code) { + return event.button === legacyButtonMap[code]; + } + + function _isButtonForWebKit(event, code) { + switch (code) { + case 0: return event.which == 1 && !event.metaKey; + case 1: return event.which == 2 || (event.which == 1 && event.metaKey); + case 2: return event.which == 3; + default: return false; + } + } + + if (window.attachEvent) { + if (!window.addEventListener) { + _isButton = _isButtonForLegacyEvents; + } else { + _isButton = function(event, code) { + return isIELegacyEvent(event) ? _isButtonForLegacyEvents(event, code) : + _isButtonForDOMEvents(event, code); + } + } + } else if (Prototype.Browser.WebKit) { + _isButton = _isButtonForWebKit; + } else { + _isButton = _isButtonForDOMEvents; + } + + function isLeftClick(event) { return _isButton(event, 0) } + + function isMiddleClick(event) { return _isButton(event, 1) } + + function isRightClick(event) { return _isButton(event, 2) } + + function element(event) { + return Element.extend(_element(event)); + } + + function _element(event) { + event = Event.extend(event); + + var node = event.target, type = event.type, + currentTarget = event.currentTarget; + + if (currentTarget && currentTarget.tagName) { + if (type === 'load' || type === 'error' || + (type === 'click' && currentTarget.tagName.toLowerCase() === 'input' + && currentTarget.type === 'radio')) + node = currentTarget; + } + + return node.nodeType == Node.TEXT_NODE ? node.parentNode : node; + } + + function findElement(event, expression) { + var element = _element(event), selector = Prototype.Selector; + if (!expression) return Element.extend(element); + while (element) { + if (Object.isElement(element) && selector.match(element, expression)) + return Element.extend(element); + element = element.parentNode; + } + } + + function pointer(event) { + return { x: pointerX(event), y: pointerY(event) }; + } + + function pointerX(event) { + var docElement = document.documentElement, + body = document.body || { scrollLeft: 0 }; + + return event.pageX || (event.clientX + + (docElement.scrollLeft || body.scrollLeft) - + (docElement.clientLeft || 0)); + } + + function pointerY(event) { + var docElement = document.documentElement, + body = document.body || { scrollTop: 0 }; + + return event.pageY || (event.clientY + + (docElement.scrollTop || body.scrollTop) - + (docElement.clientTop || 0)); + } + + + function stop(event) { + Event.extend(event); + event.preventDefault(); + event.stopPropagation(); + + event.stopped = true; + } + + + Event.Methods = { + isLeftClick: isLeftClick, + isMiddleClick: isMiddleClick, + isRightClick: isRightClick, + + element: element, + findElement: findElement, + + pointer: pointer, + pointerX: pointerX, + pointerY: pointerY, + + stop: stop + }; + + var methods = Object.keys(Event.Methods).inject({ }, function(m, name) { + m[name] = Event.Methods[name].methodize(); + return m; + }); + + if (window.attachEvent) { + function _relatedTarget(event) { + var element; + switch (event.type) { + case 'mouseover': + case 'mouseenter': + element = event.fromElement; + break; + case 'mouseout': + case 'mouseleave': + element = event.toElement; + break; + default: + return null; + } + return Element.extend(element); + } + + var additionalMethods = { + stopPropagation: function() { this.cancelBubble = true }, + preventDefault: function() { this.returnValue = false }, + inspect: function() { return '[object Event]' } + }; + + Event.extend = function(event, element) { + if (!event) return false; + + if (!isIELegacyEvent(event)) return event; + + if (event._extendedByPrototype) return event; + event._extendedByPrototype = Prototype.emptyFunction; + + var pointer = Event.pointer(event); + + Object.extend(event, { + target: event.srcElement || element, + relatedTarget: _relatedTarget(event), + pageX: pointer.x, + pageY: pointer.y + }); + + Object.extend(event, methods); + Object.extend(event, additionalMethods); + + return event; + }; + } else { + Event.extend = Prototype.K; + } + + if (window.addEventListener) { + Event.prototype = window.Event.prototype || document.createEvent('HTMLEvents').__proto__; + Object.extend(Event.prototype, methods); + } + + var EVENT_TRANSLATIONS = { + mouseenter: 'mouseover', + mouseleave: 'mouseout' + }; + + function getDOMEventName(eventName) { + return EVENT_TRANSLATIONS[eventName] || eventName; + } + + if (MOUSEENTER_MOUSELEAVE_EVENTS_SUPPORTED) + getDOMEventName = Prototype.K; + + function getUniqueElementID(element) { + if (element === window) return 0; + + if (typeof element._prototypeUID === 'undefined') + element._prototypeUID = Element.Storage.UID++; + return element._prototypeUID; + } + + function getUniqueElementID_IE(element) { + if (element === window) return 0; + if (element == document) return 1; + return element.uniqueID; + } + + if ('uniqueID' in DIV) + getUniqueElementID = getUniqueElementID_IE; + + function isCustomEvent(eventName) { + return eventName.include(':'); + } + + Event._isCustomEvent = isCustomEvent; + + function getRegistryForElement(element, uid) { + var CACHE = GLOBAL.Event.cache; + if (Object.isUndefined(uid)) + uid = getUniqueElementID(element); + if (!CACHE[uid]) CACHE[uid] = { element: element }; + return CACHE[uid]; + } + + function destroyRegistryForElement(element, uid) { + if (Object.isUndefined(uid)) + uid = getUniqueElementID(element); + delete GLOBAL.Event.cache[uid]; + } + + + function register(element, eventName, handler) { + var registry = getRegistryForElement(element); + if (!registry[eventName]) registry[eventName] = []; + var entries = registry[eventName]; + + var i = entries.length; + while (i--) + if (entries[i].handler === handler) return null; + + var uid = getUniqueElementID(element); + var responder = GLOBAL.Event._createResponder(uid, eventName, handler); + var entry = { + responder: responder, + handler: handler + }; + + entries.push(entry); + return entry; + } + + function unregister(element, eventName, handler) { + var registry = getRegistryForElement(element); + var entries = registry[eventName]; + if (!entries) return; + + var i = entries.length, entry; + while (i--) { + if (entries[i].handler === handler) { + entry = entries[i]; + break; + } + } + + if (!entry) return; + + var index = entries.indexOf(entry); + entries.splice(index, 1); + + return entry; + } + + + function observe(element, eventName, handler) { + element = $(element); + var entry = register(element, eventName, handler); + + if (entry === null) return element; + + var responder = entry.responder; + if (isCustomEvent(eventName)) + observeCustomEvent(element, eventName, responder); + else + observeStandardEvent(element, eventName, responder); + + return element; + } + + function observeStandardEvent(element, eventName, responder) { + var actualEventName = getDOMEventName(eventName); + if (element.addEventListener) { + element.addEventListener(actualEventName, responder, false); + } else { + element.attachEvent('on' + actualEventName, responder); + } + } + + function observeCustomEvent(element, eventName, responder) { + if (element.addEventListener) { + element.addEventListener('dataavailable', responder, false); + } else { + element.attachEvent('ondataavailable', responder); + element.attachEvent('onlosecapture', responder); + } + } + + function stopObserving(element, eventName, handler) { + element = $(element); + var handlerGiven = !Object.isUndefined(handler), + eventNameGiven = !Object.isUndefined(eventName); + + if (!eventNameGiven && !handlerGiven) { + stopObservingElement(element); + return element; + } + + if (!handlerGiven) { + stopObservingEventName(element, eventName); + return element; + } + + var entry = unregister(element, eventName, handler); + + if (!entry) return element; + removeEvent(element, eventName, entry.responder); + return element; + } + + function stopObservingStandardEvent(element, eventName, responder) { + var actualEventName = getDOMEventName(eventName); + if (element.removeEventListener) { + element.removeEventListener(actualEventName, responder, false); + } else { + element.detachEvent('on' + actualEventName, responder); + } + } + + function stopObservingCustomEvent(element, eventName, responder) { + if (element.removeEventListener) { + element.removeEventListener('dataavailable', responder, false); + } else { + element.detachEvent('ondataavailable', responder); + element.detachEvent('onlosecapture', responder); + } + } + + + + function stopObservingElement(element) { + var uid = getUniqueElementID(element), registry = GLOBAL.Event.cache[uid]; + if (!registry) return; + + destroyRegistryForElement(element, uid); + + var entries, i; + for (var eventName in registry) { + if (eventName === 'element') continue; + + entries = registry[eventName]; + i = entries.length; + while (i--) + removeEvent(element, eventName, entries[i].responder); + } + } + + function stopObservingEventName(element, eventName) { + var registry = getRegistryForElement(element); + var entries = registry[eventName]; + if (!entries) return; + delete registry[eventName]; + + var i = entries.length; + while (i--) + removeEvent(element, eventName, entries[i].responder); + } + + + function removeEvent(element, eventName, handler) { + if (isCustomEvent(eventName)) + stopObservingCustomEvent(element, eventName, handler); + else + stopObservingStandardEvent(element, eventName, handler); + } + + + + function getFireTarget(element) { + if (element !== document) return element; + if (document.createEvent && !element.dispatchEvent) + return document.documentElement; + return element; + } + + function fire(element, eventName, memo, bubble) { + element = getFireTarget($(element)); + if (Object.isUndefined(bubble)) bubble = true; + memo = memo || {}; + + var event = fireEvent(element, eventName, memo, bubble); + return Event.extend(event); + } + + function fireEvent_DOM(element, eventName, memo, bubble) { + var event = document.createEvent('HTMLEvents'); + event.initEvent('dataavailable', bubble, true); + + event.eventName = eventName; + event.memo = memo; + + element.dispatchEvent(event); + return event; + } + + function fireEvent_IE(element, eventName, memo, bubble) { + var event = document.createEventObject(); + event.eventType = bubble ? 'ondataavailable' : 'onlosecapture'; + + event.eventName = eventName; + event.memo = memo; + + element.fireEvent(event.eventType, event); + return event; + } + + var fireEvent = document.createEvent ? fireEvent_DOM : fireEvent_IE; + + + + Event.Handler = Class.create({ + initialize: function(element, eventName, selector, callback) { + this.element = $(element); + this.eventName = eventName; + this.selector = selector; + this.callback = callback; + this.handler = this.handleEvent.bind(this); + }, + + + start: function() { + Event.observe(this.element, this.eventName, this.handler); + return this; + }, + + stop: function() { + Event.stopObserving(this.element, this.eventName, this.handler); + return this; + }, + + handleEvent: function(event) { + var element = Event.findElement(event, this.selector); + if (element) this.callback.call(this.element, event, element); + } + }); + + function on(element, eventName, selector, callback) { + element = $(element); + if (Object.isFunction(selector) && Object.isUndefined(callback)) { + callback = selector, selector = null; + } + + return new Event.Handler(element, eventName, selector, callback).start(); + } + + Object.extend(Event, Event.Methods); + + Object.extend(Event, { + fire: fire, + observe: observe, + stopObserving: stopObserving, + on: on + }); + + Element.addMethods({ + fire: fire, + + observe: observe, + + stopObserving: stopObserving, + + on: on + }); + + Object.extend(document, { + fire: fire.methodize(), + + observe: observe.methodize(), + + stopObserving: stopObserving.methodize(), + + on: on.methodize(), + + loaded: false + }); + + if (GLOBAL.Event) Object.extend(window.Event, Event); + else GLOBAL.Event = Event; + + GLOBAL.Event.cache = {}; + + function destroyCache_IE() { + GLOBAL.Event.cache = null; + } + + if (window.attachEvent) + window.attachEvent('onunload', destroyCache_IE); + + DIV = null; + docEl = null; +})(this); + +(function(GLOBAL) { + /* Code for creating leak-free event responders is based on work by + John-David Dalton. */ + + var docEl = document.documentElement; + var MOUSEENTER_MOUSELEAVE_EVENTS_SUPPORTED = 'onmouseenter' in docEl + && 'onmouseleave' in docEl; + + function isSimulatedMouseEnterLeaveEvent(eventName) { + return !MOUSEENTER_MOUSELEAVE_EVENTS_SUPPORTED && + (eventName === 'mouseenter' || eventName === 'mouseleave'); + } + + function createResponder(uid, eventName, handler) { + if (Event._isCustomEvent(eventName)) + return createResponderForCustomEvent(uid, eventName, handler); + if (isSimulatedMouseEnterLeaveEvent(eventName)) + return createMouseEnterLeaveResponder(uid, eventName, handler); + + return function(event) { + if (!Event.cache) return; + + var element = Event.cache[uid].element; + Event.extend(event, element); + handler.call(element, event); + }; + } + + function createResponderForCustomEvent(uid, eventName, handler) { + return function(event) { + var element = Event.cache[uid].element; + + if (Object.isUndefined(event.eventName)) + return false; + + if (event.eventName !== eventName) + return false; + + Event.extend(event, element); + handler.call(element, event); + }; + } + + function createMouseEnterLeaveResponder(uid, eventName, handler) { + return function(event) { + var element = Event.cache[uid].element; + + Event.extend(event, element); + var parent = event.relatedTarget; + + while (parent && parent !== element) { + try { parent = parent.parentNode; } + catch(e) { parent = element; } + } + + if (parent === element) return; + handler.call(element, event); + } + } + + GLOBAL.Event._createResponder = createResponder; + docEl = null; +})(this); + +(function(GLOBAL) { + /* Support for the DOMContentLoaded event is based on work by Dan Webb, + Matthias Miller, Dean Edwards, John Resig, and Diego Perini. */ + + var TIMER; + + function fireContentLoadedEvent() { + if (document.loaded) return; + if (TIMER) window.clearTimeout(TIMER); + document.loaded = true; + document.fire('dom:loaded'); + } + + function checkReadyState() { + if (document.readyState === 'complete') { + document.detachEvent('onreadystatechange', checkReadyState); + fireContentLoadedEvent(); + } + } + + function pollDoScroll() { + try { + document.documentElement.doScroll('left'); + } catch (e) { + TIMER = pollDoScroll.defer(); + return; + } + + fireContentLoadedEvent(); + } + + + if (document.readyState === 'complete') { + fireContentLoadedEvent(); + return; + } + + if (document.addEventListener) { + document.addEventListener('DOMContentLoaded', fireContentLoadedEvent, false); + } else { + document.attachEvent('onreadystatechange', checkReadyState); + if (window == top) TIMER = pollDoScroll.defer(); + } + + Event.observe(window, 'load', fireContentLoadedEvent); +})(this); + + +Element.addMethods(); +/*------------------------------- DEPRECATED -------------------------------*/ + +Hash.toQueryString = Object.toQueryString; + +var Toggle = { display: Element.toggle }; + +Element.Methods.childOf = Element.Methods.descendantOf; + +var Insertion = { + Before: function(element, content) { + return Element.insert(element, {before:content}); + }, + + Top: function(element, content) { + return Element.insert(element, {top:content}); + }, + + Bottom: function(element, content) { + return Element.insert(element, {bottom:content}); + }, + + After: function(element, content) { + return Element.insert(element, {after:content}); + } +}; + +var $continue = new Error('"throw $continue" is deprecated, use "return" instead'); + +var Position = { + includeScrollOffsets: false, + + prepare: function() { + this.deltaX = window.pageXOffset + || document.documentElement.scrollLeft + || document.body.scrollLeft + || 0; + this.deltaY = window.pageYOffset + || document.documentElement.scrollTop + || document.body.scrollTop + || 0; + }, + + within: function(element, x, y) { + if (this.includeScrollOffsets) + return this.withinIncludingScrolloffsets(element, x, y); + this.xcomp = x; + this.ycomp = y; + this.offset = Element.cumulativeOffset(element); + + return (y >= this.offset[1] && + y < this.offset[1] + element.offsetHeight && + x >= this.offset[0] && + x < this.offset[0] + element.offsetWidth); + }, + + withinIncludingScrolloffsets: function(element, x, y) { + var offsetcache = Element.cumulativeScrollOffset(element); + + this.xcomp = x + offsetcache[0] - this.deltaX; + this.ycomp = y + offsetcache[1] - this.deltaY; + this.offset = Element.cumulativeOffset(element); + + return (this.ycomp >= this.offset[1] && + this.ycomp < this.offset[1] + element.offsetHeight && + this.xcomp >= this.offset[0] && + this.xcomp < this.offset[0] + element.offsetWidth); + }, + + overlap: function(mode, element) { + if (!mode) return 0; + if (mode == 'vertical') + return ((this.offset[1] + element.offsetHeight) - this.ycomp) / + element.offsetHeight; + if (mode == 'horizontal') + return ((this.offset[0] + element.offsetWidth) - this.xcomp) / + element.offsetWidth; + }, + + + cumulativeOffset: Element.Methods.cumulativeOffset, + + positionedOffset: Element.Methods.positionedOffset, + + absolutize: function(element) { + Position.prepare(); + return Element.absolutize(element); + }, + + relativize: function(element) { + Position.prepare(); + return Element.relativize(element); + }, + + realOffset: Element.Methods.cumulativeScrollOffset, + + offsetParent: Element.Methods.getOffsetParent, + + page: Element.Methods.viewportOffset, + + clone: function(source, target, options) { + options = options || { }; + return Element.clonePosition(target, source, options); + } +}; + +/*--------------------------------------------------------------------------*/ + +if (!document.getElementsByClassName) document.getElementsByClassName = function(instanceMethods){ + function iter(name) { + return name.blank() ? null : "[contains(concat(' ', @class, ' '), ' " + name + " ')]"; + } + + instanceMethods.getElementsByClassName = Prototype.BrowserFeatures.XPath ? + function(element, className) { + className = className.toString().strip(); + var cond = /\s/.test(className) ? $w(className).map(iter).join('') : iter(className); + return cond ? document._getElementsByXPath('.//*' + cond, element) : []; + } : function(element, className) { + className = className.toString().strip(); + var elements = [], classNames = (/\s/.test(className) ? $w(className) : null); + if (!classNames && !className) return elements; + + var nodes = $(element).getElementsByTagName('*'); + className = ' ' + className + ' '; + + for (var i = 0, child, cn; child = nodes[i]; i++) { + if (child.className && (cn = ' ' + child.className + ' ') && (cn.include(className) || + (classNames && classNames.all(function(name) { + return !name.toString().blank() && cn.include(' ' + name + ' '); + })))) + elements.push(Element.extend(child)); + } + return elements; + }; + + return function(className, parentElement) { + return $(parentElement || document.body).getElementsByClassName(className); + }; +}(Element.Methods); + +/*--------------------------------------------------------------------------*/ + +Element.ClassNames = Class.create(); +Element.ClassNames.prototype = { + initialize: function(element) { + this.element = $(element); + }, + + _each: function(iterator, context) { + this.element.className.split(/\s+/).select(function(name) { + return name.length > 0; + })._each(iterator, context); + }, + + set: function(className) { + this.element.className = className; + }, + + add: function(classNameToAdd) { + if (this.include(classNameToAdd)) return; + this.set($A(this).concat(classNameToAdd).join(' ')); + }, + + remove: function(classNameToRemove) { + if (!this.include(classNameToRemove)) return; + this.set($A(this).without(classNameToRemove).join(' ')); + }, + + toString: function() { + return $A(this).join(' '); + } +}; + +Object.extend(Element.ClassNames.prototype, Enumerable); + +/*--------------------------------------------------------------------------*/ + +(function() { + window.Selector = Class.create({ + initialize: function(expression) { + this.expression = expression.strip(); + }, + + findElements: function(rootElement) { + return Prototype.Selector.select(this.expression, rootElement); + }, + + match: function(element) { + return Prototype.Selector.match(element, this.expression); + }, + + toString: function() { + return this.expression; + }, + + inspect: function() { + return "#"; + } + }); + + Object.extend(Selector, { + matchElements: function(elements, expression) { + var match = Prototype.Selector.match, + results = []; + + for (var i = 0, length = elements.length; i < length; i++) { + var element = elements[i]; + if (match(element, expression)) { + results.push(Element.extend(element)); + } + } + return results; + }, + + findElement: function(elements, expression, index) { + index = index || 0; + var matchIndex = 0, element; + for (var i = 0, length = elements.length; i < length; i++) { + element = elements[i]; + if (Prototype.Selector.match(element, expression) && index === matchIndex++) { + return Element.extend(element); + } + } + }, + + findChildElements: function(element, expressions) { + var selector = expressions.toArray().join(', '); + return Prototype.Selector.select(selector, element || document); + } + }); +})(); + +/** + * Event.simulate(@element, eventName[, options]) -> Element + * + * - @element: element to fire event on + * - eventName: name of event to fire (only MouseEvents and HTMLEvents interfaces are supported) + * - options: optional object to fine-tune event properties - pointerX, pointerY, ctrlKey, etc. + * + * $('foo').simulate('click'); // => fires "click" event on an element with id=foo + * + **/ +(function(){ + + var eventMatchers = { + 'HTMLEvents': /^(?:load|unload|abort|error|select|change|submit|reset|focus|blur|resize|scroll|input)$/, + 'MouseEvents': /^(?:click|mouse(?:down|up|over|move|out))$/ + } + var defaultOptions = { + pointerX: 0, + pointerY: 0, + button: 0, + ctrlKey: false, + altKey: false, + shiftKey: false, + metaKey: false, + bubbles: true, + cancelable: true + } + + Event.simulate = function(element, eventName) { + var options = Object.extend(defaultOptions, arguments[2] || { }); + var oEvent, eventType = null; + + element = $(element); + + for (var name in eventMatchers) { + if (eventMatchers[name].test(eventName)) { eventType = name; break; } + } + + if (!eventType) + throw new SyntaxError('Only HTMLEvents and MouseEvents interfaces are supported'); + + if (document.createEvent) { + oEvent = document.createEvent(eventType); + if (eventType == 'HTMLEvents') { + oEvent.initEvent(eventName, options.bubbles, options.cancelable); + } + else { + oEvent.initMouseEvent(eventName, options.bubbles, options.cancelable, document.defaultView, + options.button, options.pointerX, options.pointerY, options.pointerX, options.pointerY, + options.ctrlKey, options.altKey, options.shiftKey, options.metaKey, options.button, element); + } + element.dispatchEvent(oEvent); + } + else { + options.clientX = options.pointerX; + options.clientY = options.pointerY; + oEvent = Object.extend(document.createEventObject(), options); + element.fireEvent('on' + eventName, oEvent); + } + return element; + } + + Element.addMethods({ simulate: Event.simulate }); +})() +function phi4z(t,i,s,e,o,n,a,r,h){var l,c,m,u,d,p,_,f,P,y;for(h=n,y=1;15>=y;y++)if(l=Math.sin(h),m=Math.tan(h),r=m*Math.sqrt(1-t*l*l),c=Math.sin(2*h),u=i*h-s*c+e*Math.sin(4*h)-o*Math.sin(6*h),d=i-2*s*Math.cos(2*h)+4*e*Math.cos(4*h)-6*o*Math.cos(6*h),p=2*u+r*(u*u+a)-2*n*(r*u+1),_=t*c*(u*u+a-2*n*u)/(2*r),f=2*(n-u)*(r*d-2/c)-2*d,P=p/(_+f),h+=P,1e-10>=Math.abs(P))return h;return Proj4js.reportError("phi4z: No convergence"),null}function e4fn(t){var i,s;return i=1+t,s=1-t,Math.sqrt(Math.pow(i,i)*Math.pow(s,s))}var Proj4js={defaultDatum:"WGS84",transform:function(t,i,s){if(!t.readyToUse)return this.reportError("Proj4js initialization for:"+t.srsCode+" not yet complete"),s;if(!i.readyToUse)return this.reportError("Proj4js initialization for:"+i.srsCode+" not yet complete"),s;if(t.datum&&i.datum&&((t.datum.datum_type==Proj4js.common.PJD_3PARAM||t.datum.datum_type==Proj4js.common.PJD_7PARAM)&&"WGS84"!=i.datumCode||(i.datum.datum_type==Proj4js.common.PJD_3PARAM||i.datum.datum_type==Proj4js.common.PJD_7PARAM)&&"WGS84"!=t.datumCode)){var e=Proj4js.WGS84;this.transform(t,e,s),t=e}return"enu"!=t.axis&&this.adjust_axis(t,!1,s),"longlat"==t.projName?(s.x*=Proj4js.common.D2R,s.y*=Proj4js.common.D2R):(t.to_meter&&(s.x*=t.to_meter,s.y*=t.to_meter),t.inverse(s)),t.from_greenwich&&(s.x+=t.from_greenwich),s=this.datum_transform(t.datum,i.datum,s),i.from_greenwich&&(s.x-=i.from_greenwich),"longlat"==i.projName?(s.x*=Proj4js.common.R2D,s.y*=Proj4js.common.R2D):(i.forward(s),i.to_meter&&(s.x/=i.to_meter,s.y/=i.to_meter)),"enu"!=i.axis&&this.adjust_axis(i,!0,s),s},datum_transform:function(t,i,s){return t.compare_datums(i)?s:t.datum_type==Proj4js.common.PJD_NODATUM||i.datum_type==Proj4js.common.PJD_NODATUM?s:((t.es!=i.es||t.a!=i.a||t.datum_type==Proj4js.common.PJD_3PARAM||t.datum_type==Proj4js.common.PJD_7PARAM||i.datum_type==Proj4js.common.PJD_3PARAM||i.datum_type==Proj4js.common.PJD_7PARAM)&&(t.geodetic_to_geocentric(s),(t.datum_type==Proj4js.common.PJD_3PARAM||t.datum_type==Proj4js.common.PJD_7PARAM)&&t.geocentric_to_wgs84(s),(i.datum_type==Proj4js.common.PJD_3PARAM||i.datum_type==Proj4js.common.PJD_7PARAM)&&i.geocentric_from_wgs84(s),i.geocentric_to_geodetic(s)),s)},adjust_axis:function(t,i,s){for(var e,o,n=s.x,a=s.y,r=s.z||0,h=0;3>h;h++)if(!i||2!=h||void 0!==s.z)switch(0==h?(e=n,o="x"):1==h?(e=a,o="y"):(e=r,o="z"),t.axis[h]){case"e":s[o]=e;break;case"w":s[o]=-e;break;case"n":s[o]=e;break;case"s":s[o]=-e;break;case"u":void 0!==s[o]&&(s.z=e);break;case"d":void 0!==s[o]&&(s.z=-e);break;default:return alert("ERROR: unknow axis ("+t.axis[h]+") - check definition of "+t.projName),null}return s},reportError:function(){},extend:function(t,i){if(t=t||{},i)for(var s in i){var e=i[s];void 0!==e&&(t[s]=e)}return t},Class:function(){for(var t,i=function(){this.initialize.apply(this,arguments)},s={},e=0;arguments.length>e;++e)t="function"==typeof arguments[e]?arguments[e].prototype:arguments[e],Proj4js.extend(s,t);return i.prototype=s,i},bind:function(t,i){var s=Array.prototype.slice.apply(arguments,[2]);return function(){var e=s.concat(Array.prototype.slice.apply(arguments,[0]));return t.apply(i,e)}},scriptName:"proj4js-combined.js",defsLookupService:"http://spatialreference.org/ref",libPath:null,getScriptLocation:function(){if(this.libPath)return this.libPath;for(var t=this.scriptName,i=t.length,s=document.getElementsByTagName("script"),e=0;s.length>e;e++){var o=s[e].getAttribute("src");if(o){var n=o.lastIndexOf(t);if(n>-1&&n+i==o.length){this.libPath=o.slice(0,-i);break}}}return this.libPath||""},loadScript:function(t,i,s,e){var o=document.createElement("script");o.defer=!1,o.type="text/javascript",o.id=t,o.src=t,o.onload=i,o.onerror=s,o.loadCheck=e,/MSIE/.test(navigator.userAgent)&&(o.onreadystatechange=this.checkReadyState),document.getElementsByTagName("head")[0].appendChild(o)},checkReadyState:function(){"loaded"==this.readyState&&(this.loadCheck()?this.onload():this.onerror())}};Proj4js.Proj=Proj4js.Class({readyToUse:!1,title:null,projName:null,units:null,datum:null,x0:0,y0:0,localCS:!1,queue:null,initialize:function(t,i){if(this.srsCodeInput=t,this.queue=[],i&&this.queue.push(i),t.indexOf("GEOGCS")>=0||t.indexOf("GEOCCS")>=0||t.indexOf("PROJCS")>=0||t.indexOf("LOCAL_CS")>=0)return this.parseWKT(t),this.deriveConstants(),this.loadProjCode(this.projName),void 0;if(0==t.indexOf("urn:")){var s=t.split(":");"ogc"!=s[1]&&"x-ogc"!=s[1]||"def"!=s[2]||"crs"!=s[3]||(t=s[4]+":"+s[s.length-1])}else if(0==t.indexOf("http://")){var e=t.split("#");e[0].match(/epsg.org/)?t="EPSG:"+e[1]:e[0].match(/RIG.xml/)&&(t="IGNF:"+e[1])}this.srsCode=t.toUpperCase(),0==this.srsCode.indexOf("EPSG")?(this.srsCode=this.srsCode,this.srsAuth="epsg",this.srsProjNumber=this.srsCode.substring(5)):0==this.srsCode.indexOf("IGNF")?(this.srsCode=this.srsCode,this.srsAuth="IGNF",this.srsProjNumber=this.srsCode.substring(5)):0==this.srsCode.indexOf("CRS")?(this.srsCode=this.srsCode,this.srsAuth="CRS",this.srsProjNumber=this.srsCode.substring(4)):(this.srsAuth="",this.srsProjNumber=this.srsCode),this.loadProjDefinition()},loadProjDefinition:function(){if(Proj4js.defs[this.srsCode])return this.defsLoaded(),void 0;var t=Proj4js.getScriptLocation()+"defs/"+this.srsAuth.toUpperCase()+this.srsProjNumber+".js";Proj4js.loadScript(t,Proj4js.bind(this.defsLoaded,this),Proj4js.bind(this.loadFromService,this),Proj4js.bind(this.checkDefsLoaded,this))},loadFromService:function(){var t=Proj4js.defsLookupService+"/"+this.srsAuth+"/"+this.srsProjNumber+"/proj4js/";Proj4js.loadScript(t,Proj4js.bind(this.defsLoaded,this),Proj4js.bind(this.defsFailed,this),Proj4js.bind(this.checkDefsLoaded,this))},defsLoaded:function(){this.parseDefs(),this.loadProjCode(this.projName)},checkDefsLoaded:function(){return Proj4js.defs[this.srsCode]?!0:!1},defsFailed:function(){Proj4js.reportError("failed to load projection definition for: "+this.srsCode),Proj4js.defs[this.srsCode]=Proj4js.defs.WGS84,this.defsLoaded()},loadProjCode:function(t){if(Proj4js.Proj[t])return this.initTransforms(),void 0;var i=Proj4js.getScriptLocation()+"projCode/"+t+".js";Proj4js.loadScript(i,Proj4js.bind(this.loadProjCodeSuccess,this,t),Proj4js.bind(this.loadProjCodeFailure,this,t),Proj4js.bind(this.checkCodeLoaded,this,t))},loadProjCodeSuccess:function(t){Proj4js.Proj[t].dependsOn?this.loadProjCode(Proj4js.Proj[t].dependsOn):this.initTransforms()},loadProjCodeFailure:function(t){Proj4js.reportError("failed to find projection file for: "+t)},checkCodeLoaded:function(t){return Proj4js.Proj[t]?!0:!1},initTransforms:function(){if(Proj4js.extend(this,Proj4js.Proj[this.projName]),this.init(),this.readyToUse=!0,this.queue)for(var t;t=this.queue.shift();)t.call(this,this)},wktRE:/^(\w+)\[(.*)\]$/,parseWKT:function(t){var i=t.match(this.wktRE);if(i){var s,e=i[1],o=i[2],n=o.split(",");s="TOWGS84"==e.toUpperCase()?e:n.shift(),s=s.replace(/^\"/,""),s=s.replace(/\"$/,"");for(var a=[],r=0,h="",l=0;n.length>l;++l){for(var c=n[l],m=0;c.length>m;++m)"["==c.charAt(m)&&++r,"]"==c.charAt(m)&&--r;h+=c,0===r?(a.push(h),h=""):h+=","}switch(e){case"LOCAL_CS":this.projName="identity",this.localCS=!0,this.srsCode=s;break;case"GEOGCS":this.projName="longlat",this.geocsCode=s,this.srsCode||(this.srsCode=s);break;case"PROJCS":this.srsCode=s;break;case"GEOCCS":break;case"PROJECTION":this.projName=Proj4js.wktProjections[s];break;case"DATUM":this.datumName=s;break;case"LOCAL_DATUM":this.datumCode="none";break;case"SPHEROID":this.ellps=s,this.a=parseFloat(a.shift()),this.rf=parseFloat(a.shift());break;case"PRIMEM":this.from_greenwich=parseFloat(a.shift());break;case"UNIT":this.units=s,this.unitsPerMeter=parseFloat(a.shift());break;case"PARAMETER":var u=s.toLowerCase(),d=parseFloat(a.shift());switch(u){case"false_easting":this.x0=d;break;case"false_northing":this.y0=d;break;case"scale_factor":this.k0=d;break;case"central_meridian":this.long0=d*Proj4js.common.D2R;break;case"latitude_of_origin":this.lat0=d*Proj4js.common.D2R;break;case"more_here":break;default:}break;case"TOWGS84":this.datum_params=a;break;case"AXIS":var u=s.toLowerCase(),d=a.shift();switch(d){case"EAST":d="e";break;case"WEST":d="w";break;case"NORTH":d="n";break;case"SOUTH":d="s";break;case"UP":d="u";break;case"DOWN":d="d";break;case"OTHER":default:d=" "}switch(this.axis||(this.axis="enu"),u){case"x":this.axis=d+this.axis.substr(1,2);break;case"y":this.axis=this.axis.substr(0,1)+d+this.axis.substr(2,1);break;case"z":this.axis=this.axis.substr(0,2)+d;break;default:}case"MORE_HERE":break;default:}for(var l=0;a.length>l;++l)this.parseWKT(a[l])}},parseDefs:function(){this.defData=Proj4js.defs[this.srsCode];var t,i;if(this.defData){for(var s=this.defData.split("+"),e=0;s.length>e;e++){var o=s[e].split("=");switch(t=o[0].toLowerCase(),i=o[1],t.replace(/\s/gi,"")){case"":break;case"title":this.title=i;break;case"proj":this.projName=i.replace(/\s/gi,"");break;case"units":this.units=i.replace(/\s/gi,"");break;case"datum":this.datumCode=i.replace(/\s/gi,"");break;case"nadgrids":this.nagrids=i.replace(/\s/gi,"");break;case"ellps":this.ellps=i.replace(/\s/gi,"");break;case"a":this.a=parseFloat(i);break;case"b":this.b=parseFloat(i);break;case"rf":this.rf=parseFloat(i);break;case"lat_0":this.lat0=i*Proj4js.common.D2R;break;case"lat_1":this.lat1=i*Proj4js.common.D2R;break;case"lat_2":this.lat2=i*Proj4js.common.D2R;break;case"lat_ts":this.lat_ts=i*Proj4js.common.D2R;break;case"lon_0":this.long0=i*Proj4js.common.D2R;break;case"alpha":this.alpha=parseFloat(i)*Proj4js.common.D2R;break;case"lonc":this.longc=i*Proj4js.common.D2R;break;case"x_0":this.x0=parseFloat(i);break;case"y_0":this.y0=parseFloat(i);break;case"k_0":this.k0=parseFloat(i);break;case"k":this.k0=parseFloat(i);break;case"r_a":this.R_A=!0;break;case"zone":this.zone=parseInt(i,10);break;case"south":this.utmSouth=!0;break;case"towgs84":this.datum_params=i.split(",");break;case"to_meter":this.to_meter=parseFloat(i);break;case"from_greenwich":this.from_greenwich=i*Proj4js.common.D2R;break;case"pm":i=i.replace(/\s/gi,""),this.from_greenwich=Proj4js.PrimeMeridian[i]?Proj4js.PrimeMeridian[i]:parseFloat(i),this.from_greenwich*=Proj4js.common.D2R;break;case"axis":i=i.replace(/\s/gi,"");var n="ewnsud";3==i.length&&-1!=n.indexOf(i.substr(0,1))&&-1!=n.indexOf(i.substr(1,1))&&-1!=n.indexOf(i.substr(2,1))&&(this.axis=i);break;case"no_defs":break;default:}}this.deriveConstants()}},deriveConstants:function(){if("@null"==this.nagrids&&(this.datumCode="none"),this.datumCode&&"none"!=this.datumCode){var t=Proj4js.Datum[this.datumCode];t&&(this.datum_params=t.towgs84?t.towgs84.split(","):null,this.ellps=t.ellipse,this.datumName=t.datumName?t.datumName:this.datumCode)}if(!this.a){var i=Proj4js.Ellipsoid[this.ellps]?Proj4js.Ellipsoid[this.ellps]:Proj4js.Ellipsoid.WGS84;Proj4js.extend(this,i)}this.rf&&!this.b&&(this.b=(1-1/this.rf)*this.a),(0===this.rf||Math.abs(this.a-this.b)=a;a++)if(s=t*Math.sin(n),e=this.HALF_PI-2*Math.atan(i*Math.pow((1-s)/(1+s),o))-n,n+=e,1e-10>=Math.abs(e))return n;return alert("phi2z has NoConvergence"),-9999},qsfnz:function(t,i){var s;return t>1e-7?(s=t*i,(1-t*t)*(i/(1-s*s)-.5/t*Math.log((1-s)/(1+s)))):2*i},asinz:function(t){return Math.abs(t)>1&&(t=t>1?1:-1),Math.asin(t)},e0fn:function(t){return 1-.25*t*(1+t/16*(3+1.25*t))},e1fn:function(t){return.375*t*(1+.25*t*(1+.46875*t))},e2fn:function(t){return.05859375*t*t*(1+.75*t)},e3fn:function(t){return t*t*t*(35/3072)},mlfn:function(t,i,s,e,o){return t*o-i*Math.sin(2*o)+s*Math.sin(4*o)-e*Math.sin(6*o)},srat:function(t,i){return Math.pow((1-t)/(1+t),i)},sign:function(t){return 0>t?-1:1},adjust_lon:function(t){return t=Math.abs(t)this.HALF_PI)return+Number.NaN;if(i==this.HALF_PI)return Number.POSITIVE_INFINITY;if(i==-1*this.HALF_PI)return-1*Number.POSITIVE_INFINITY;var e=t*s;return Math.log(Math.tan((this.HALF_PI+i)/2))+t*Math.log((1-e)/(1+e))/2},fL:function(t,i){return 2*Math.atan(t*Math.exp(i))-this.HALF_PI},invlatiso:function(t,i){var s=this.fL(1,i),e=0,o=0;do e=s,o=t*Math.sin(e),s=this.fL(Math.exp(t*Math.log((1+o)/(1-o))/2),i);while(Math.abs(s-e)>1e-12);return s},sinh:function(t){var i=Math.exp(t);return i=(i-1/i)/2},cosh:function(t){var i=Math.exp(t);return i=(i+1/i)/2},tanh:function(t){var i=Math.exp(t);return i=(i-1/i)/(i+1/i)},asinh:function(t){var i=t>=0?1:-1;return i*Math.log(Math.abs(t)+Math.sqrt(t*t+1))},acosh:function(t){return 2*Math.log(Math.sqrt((t+1)/2)+Math.sqrt((t-1)/2))},atanh:function(t){return Math.log((t-1)/(t+1))/2},gN:function(t,i,s){var e=i*s;return t/Math.sqrt(1-e*e)},pj_enfn:function(t){var i=[];i[0]=this.C00-t*(this.C02+t*(this.C04+t*(this.C06+t*this.C08))),i[1]=t*(this.C22-t*(this.C04+t*(this.C06+t*this.C08)));var s=t*t;return i[2]=s*(this.C44-t*(this.C46+t*this.C48)),s*=t,i[3]=s*(this.C66-t*this.C68),i[4]=s*t*this.C88,i},pj_mlfn:function(t,i,s,e){return s*=i,i*=i,e[0]*t-s*(e[1]+i*(e[2]+i*(e[3]+i*e[4])))},pj_inv_mlfn:function(t,i,s){for(var e=1/(1-i),o=t,n=Proj4js.common.MAX_ITER;n;--n){var a=Math.sin(o),r=1-i*a*a;if(r=(this.pj_mlfn(o,a,Math.cos(o),s)-t)*r*Math.sqrt(r)*e,o-=r,Math.abs(r)i;i++)t.datum_params[i]=parseFloat(t.datum_params[i]);(0!=t.datum_params[0]||0!=t.datum_params[1]||0!=t.datum_params[2])&&(this.datum_type=Proj4js.common.PJD_3PARAM),t.datum_params.length>3&&(0!=t.datum_params[3]||0!=t.datum_params[4]||0!=t.datum_params[5]||0!=t.datum_params[6])&&(this.datum_type=Proj4js.common.PJD_7PARAM,t.datum_params[3]*=Proj4js.common.SEC_TO_RAD,t.datum_params[4]*=Proj4js.common.SEC_TO_RAD,t.datum_params[5]*=Proj4js.common.SEC_TO_RAD,t.datum_params[6]=t.datum_params[6]/1e6+1)}t&&(this.a=t.a,this.b=t.b,this.es=t.es,this.ep2=t.ep2,this.datum_params=t.datum_params)},compare_datums:function(t){return this.datum_type!=t.datum_type?!1:this.a!=t.a||Math.abs(this.es-t.es)>5e-11?!1:this.datum_type==Proj4js.common.PJD_3PARAM?this.datum_params[0]==t.datum_params[0]&&this.datum_params[1]==t.datum_params[1]&&this.datum_params[2]==t.datum_params[2]:this.datum_type==Proj4js.common.PJD_7PARAM?this.datum_params[0]==t.datum_params[0]&&this.datum_params[1]==t.datum_params[1]&&this.datum_params[2]==t.datum_params[2]&&this.datum_params[3]==t.datum_params[3]&&this.datum_params[4]==t.datum_params[4]&&this.datum_params[5]==t.datum_params[5]&&this.datum_params[6]==t.datum_params[6]:this.datum_type==Proj4js.common.PJD_GRIDSHIFT||t.datum_type==Proj4js.common.PJD_GRIDSHIFT?(alert("ERROR: Grid shift transformations are not implemented."),!1):!0},geodetic_to_geocentric:function(t){var i,s,e,o,n,a,r,h=t.x,l=t.y,c=t.z?t.z:0,m=0;if(-Proj4js.common.HALF_PI>l&&l>-1.001*Proj4js.common.HALF_PI)l=-Proj4js.common.HALF_PI;else if(l>Proj4js.common.HALF_PI&&1.001*Proj4js.common.HALF_PI>l)l=Proj4js.common.HALF_PI;else if(-Proj4js.common.HALF_PI>l||l>Proj4js.common.HALF_PI)return Proj4js.reportError("geocent:lat out of range:"+l),null;return h>Proj4js.common.PI&&(h-=2*Proj4js.common.PI),n=Math.sin(l),r=Math.cos(l),a=n*n,o=this.a/Math.sqrt(1-this.es*a),i=(o+c)*r*Math.cos(h),s=(o+c)*r*Math.sin(h),e=(o*(1-this.es)+c)*n,t.x=i,t.y=s,t.z=e,m},geocentric_to_geodetic:function(t){var i,s,e,o,n,a,r,h,l,c,m,u,d,p,_,f,P,y=1e-12,g=y*y,L=30,v=t.x,j=t.y,M=t.z?t.z:0;if(d=!1,i=Math.sqrt(v*v+j*j),s=Math.sqrt(v*v+j*j+M*M),y>i/this.a){if(d=!0,_=0,y>s/this.a)return f=Proj4js.common.HALF_PI,P=-this.b,void 0}else _=Math.atan2(j,v);e=M/s,o=i/s,n=1/Math.sqrt(1-this.es*(2-this.es)*o*o),h=o*(1-this.es)*n,l=e*n,p=0;do p++,r=this.a/Math.sqrt(1-this.es*l*l),P=i*h+M*l-r*(1-this.es*l*l),a=this.es*r/(r+P),n=1/Math.sqrt(1-a*(2-a)*o*o),c=o*(1-a)*n,m=e*n,u=m*h-c*l,h=c,l=m;while(u*u>g&&L>p);return f=Math.atan(m/Math.abs(c)),t.x=_,t.y=f,t.z=P,t},geocentric_to_geodetic_noniter:function(t){var i,s,e,o,n,a,r,h,l,c,m,u,d,p,_,f,P,y=t.x,g=t.y,L=t.z?t.z:0;if(y=parseFloat(y),g=parseFloat(g),L=parseFloat(L),P=!1,0!=y)i=Math.atan2(g,y);else if(g>0)i=Proj4js.common.HALF_PI;else if(0>g)i=-Proj4js.common.HALF_PI;else if(P=!0,i=0,L>0)s=Proj4js.common.HALF_PI;else{if(!(0>L))return s=Proj4js.common.HALF_PI,e=-this.b,void 0;s=-Proj4js.common.HALF_PI}return n=y*y+g*g,o=Math.sqrt(n),a=L*Proj4js.common.AD_C,h=Math.sqrt(a*a+n),c=a/h,u=o/h,m=c*c*c,r=L+this.b*this.ep2*m,f=o-this.a*this.es*u*u*u,l=Math.sqrt(r*r+f*f),d=r/l,p=f/l,_=this.a/Math.sqrt(1-this.es*d*d),e=p>=Proj4js.common.COS_67P5?o/p-_:-Proj4js.common.COS_67P5>=p?o/-p-_:L/d+_*(this.es-1),0==P&&(s=Math.atan(d/p)),t.x=i,t.y=s,t.z=e,t},geocentric_to_wgs84:function(t){if(this.datum_type==Proj4js.common.PJD_3PARAM)t.x+=this.datum_params[0],t.y+=this.datum_params[1],t.z+=this.datum_params[2];else if(this.datum_type==Proj4js.common.PJD_7PARAM){var i=this.datum_params[0],s=this.datum_params[1],e=this.datum_params[2],o=this.datum_params[3],n=this.datum_params[4],a=this.datum_params[5],r=this.datum_params[6],h=r*(t.x-a*t.y+n*t.z)+i,l=r*(a*t.x+t.y-o*t.z)+s,c=r*(-n*t.x+o*t.y+t.z)+e;t.x=h,t.y=l,t.z=c}},geocentric_from_wgs84:function(t){if(this.datum_type==Proj4js.common.PJD_3PARAM)t.x-=this.datum_params[0],t.y-=this.datum_params[1],t.z-=this.datum_params[2];else if(this.datum_type==Proj4js.common.PJD_7PARAM){var i=this.datum_params[0],s=this.datum_params[1],e=this.datum_params[2],o=this.datum_params[3],n=this.datum_params[4],a=this.datum_params[5],r=this.datum_params[6],h=(t.x-i)/r,l=(t.y-s)/r,c=(t.z-e)/r;t.x=h+a*l-n*c,t.y=-a*h+l+o*c,t.z=n*h-o*l+c}}}),Proj4js.Point=Proj4js.Class({initialize:function(t,i,s){if("object"==typeof t)this.x=t[0],this.y=t[1],this.z=t[2]||0;else if("string"==typeof t&&i===void 0){var e=t.split(",");this.x=parseFloat(e[0]),this.y=parseFloat(e[1]),this.z=parseFloat(e[2])||0}else this.x=t,this.y=i,this.z=s||0},clone:function(){return new Proj4js.Point(this.x,this.y,this.z)},toString:function(){return"x="+this.x+",y="+this.y},toShortString:function(){return this.x+", "+this.y}}),Proj4js.PrimeMeridian={greenwich:0,lisbon:-9.131906111111,paris:2.337229166667,bogota:-74.080916666667,madrid:-3.687938888889,rome:12.452333333333,bern:7.439583333333,jakarta:106.807719444444,ferro:-17.666666666667,brussels:4.367975,stockholm:18.058277777778,athens:23.7163375,oslo:10.722916666667},Proj4js.Ellipsoid={MERIT:{a:6378137,rf:298.257,ellipseName:"MERIT 1983"},SGS85:{a:6378136,rf:298.257,ellipseName:"Soviet Geodetic System 85"},GRS80:{a:6378137,rf:298.257222101,ellipseName:"GRS 1980(IUGG, 1980)"},IAU76:{a:6378140,rf:298.257,ellipseName:"IAU 1976"},airy:{a:6377563.396,b:6356256.91,ellipseName:"Airy 1830"},"APL4.":{a:6378137,rf:298.25,ellipseName:"Appl. Physics. 1965"},NWL9D:{a:6378145,rf:298.25,ellipseName:"Naval Weapons Lab., 1965"},mod_airy:{a:6377340.189,b:6356034.446,ellipseName:"Modified Airy"},andrae:{a:6377104.43,rf:300,ellipseName:"Andrae 1876 (Den., Iclnd.)"},aust_SA:{a:6378160,rf:298.25,ellipseName:"Australian Natl & S. Amer. 1969"},GRS67:{a:6378160,rf:298.247167427,ellipseName:"GRS 67(IUGG 1967)"},bessel:{a:6377397.155,rf:299.1528128,ellipseName:"Bessel 1841"},bess_nam:{a:6377483.865,rf:299.1528128,ellipseName:"Bessel 1841 (Namibia)"},clrk66:{a:6378206.4,b:6356583.8,ellipseName:"Clarke 1866"},clrk80:{a:6378249.145,rf:293.4663,ellipseName:"Clarke 1880 mod."},CPM:{a:6375738.7,rf:334.29,ellipseName:"Comm. des Poids et Mesures 1799"},delmbr:{a:6376428,rf:311.5,ellipseName:"Delambre 1810 (Belgium)"},engelis:{a:6378136.05,rf:298.2566,ellipseName:"Engelis 1985"},evrst30:{a:6377276.345,rf:300.8017,ellipseName:"Everest 1830"},evrst48:{a:6377304.063,rf:300.8017,ellipseName:"Everest 1948"},evrst56:{a:6377301.243,rf:300.8017,ellipseName:"Everest 1956"},evrst69:{a:6377295.664,rf:300.8017,ellipseName:"Everest 1969"},evrstSS:{a:6377298.556,rf:300.8017,ellipseName:"Everest (Sabah & Sarawak)"},fschr60:{a:6378166,rf:298.3,ellipseName:"Fischer (Mercury Datum) 1960"},fschr60m:{a:6378155,rf:298.3,ellipseName:"Fischer 1960"},fschr68:{a:6378150,rf:298.3,ellipseName:"Fischer 1968"},helmert:{a:6378200,rf:298.3,ellipseName:"Helmert 1906"},hough:{a:6378270,rf:297,ellipseName:"Hough"},intl:{a:6378388,rf:297,ellipseName:"International 1909 (Hayford)"},kaula:{a:6378163,rf:298.24,ellipseName:"Kaula 1961"},lerch:{a:6378139,rf:298.257,ellipseName:"Lerch 1979"},mprts:{a:6397300,rf:191,ellipseName:"Maupertius 1738"},new_intl:{a:6378157.5,b:6356772.2,ellipseName:"New International 1967"},plessis:{a:6376523,rf:6355863,ellipseName:"Plessis 1817 (France)"},krass:{a:6378245,rf:298.3,ellipseName:"Krassovsky, 1942"},SEasia:{a:6378155,b:6356773.3205,ellipseName:"Southeast Asia"},walbeck:{a:6376896,b:6355834.8467,ellipseName:"Walbeck"},WGS60:{a:6378165,rf:298.3,ellipseName:"WGS 60"},WGS66:{a:6378145,rf:298.25,ellipseName:"WGS 66"},WGS72:{a:6378135,rf:298.26,ellipseName:"WGS 72"},WGS84:{a:6378137,rf:298.257223563,ellipseName:"WGS 84"},sphere:{a:6370997,b:6370997,ellipseName:"Normal Sphere (r=6370997)"}},Proj4js.Datum={WGS84:{towgs84:"0,0,0",ellipse:"WGS84",datumName:"WGS84"},GGRS87:{towgs84:"-199.87,74.79,246.62",ellipse:"GRS80",datumName:"Greek_Geodetic_Reference_System_1987"},NAD83:{towgs84:"0,0,0",ellipse:"GRS80",datumName:"North_American_Datum_1983"},NAD27:{nadgrids:"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat",ellipse:"clrk66",datumName:"North_American_Datum_1927"},potsdam:{towgs84:"606.0,23.0,413.0",ellipse:"bessel",datumName:"Potsdam Rauenberg 1950 DHDN"},carthage:{towgs84:"-263.0,6.0,431.0",ellipse:"clark80",datumName:"Carthage 1934 Tunisia"},hermannskogel:{towgs84:"653.0,-212.0,449.0",ellipse:"bessel",datumName:"Hermannskogel"},ire65:{towgs84:"482.530,-130.596,564.557,-1.042,-0.214,-0.631,8.15",ellipse:"mod_airy",datumName:"Ireland 1965"},nzgd49:{towgs84:"59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993",ellipse:"intl",datumName:"New Zealand Geodetic Datum 1949"},OSGB36:{towgs84:"446.448,-125.157,542.060,0.1502,0.2470,0.8421,-20.4894",ellipse:"airy",datumName:"Airy 1830"}},Proj4js.WGS84=new Proj4js.Proj("WGS84"),Proj4js.Datum.OSB36=Proj4js.Datum.OSGB36,Proj4js.wktProjections={"Lambert Tangential Conformal Conic Projection":"lcc",Mercator:"merc","Popular Visualisation Pseudo Mercator":"merc",Mercator_1SP:"merc",Transverse_Mercator:"tmerc","Transverse Mercator":"tmerc","Lambert Azimuthal Equal Area":"laea","Universal Transverse Mercator System":"utm"},Proj4js.Proj.aea={init:function(){return Math.abs(this.lat1+this.lat2)Proj4js.common.EPSLN?(this.ms1*this.ms1-this.ms2*this.ms2)/(this.qs2-this.qs1):this.con,this.c=this.ms1*this.ms1+this.ns0*this.qs1,this.rh=this.a*Math.sqrt(this.c-this.ns0*this.qs0)/this.ns0,void 0)},forward:function(t){var i=t.x,s=t.y;this.sin_phi=Math.sin(s),this.cos_phi=Math.cos(s);var e=Proj4js.common.qsfnz(this.e3,this.sin_phi,this.cos_phi),o=this.a*Math.sqrt(this.c-this.ns0*e)/this.ns0,n=this.ns0*Proj4js.common.adjust_lon(i-this.long0),a=o*Math.sin(n)+this.x0,r=this.rh-o*Math.cos(n)+this.y0;return t.x=a,t.y=r,t},inverse:function(t){var i,s,e,o,n,a;return t.x-=this.x0,t.y=this.rh-t.y+this.y0,this.ns0>=0?(i=Math.sqrt(t.x*t.x+t.y*t.y),e=1):(i=-Math.sqrt(t.x*t.x+t.y*t.y),e=-1),o=0,0!=i&&(o=Math.atan2(e*t.x,e*t.y)),e=i*this.ns0/this.a,s=(this.c-e*e)/this.ns0,this.e3>=1e-10?(e=1-.5*(1-this.es)*Math.log((1-this.e3)/(1+this.e3))/this.e3,a=Math.abs(Math.abs(e)-Math.abs(s))>1e-10?this.phi1z(this.e3,s):s>=0?.5*Proj4js.common.PI:-.5*Proj4js.common.PI):a=this.phi1z(this.e3,s),n=Proj4js.common.adjust_lon(o/this.ns0+this.long0),t.x=n,t.y=a,t},phi1z:function(t,i){var s,e,o,n,a,r=Proj4js.common.asinz(.5*i);if(Proj4js.common.EPSLN>t)return r;for(var h=t*t,l=1;25>=l;l++)if(s=Math.sin(r),e=Math.cos(r),o=t*s,n=1-o*o,a=.5*n*n/e*(i/(1-h)-s/n+.5/t*Math.log((1-o)/(1+o))),r+=a,1e-7>=Math.abs(a))return r;return Proj4js.reportError("aea:phi1z:Convergence error"),null}},Proj4js.Proj.sterea={dependsOn:"gauss",init:function(){return Proj4js.Proj.gauss.init.apply(this),this.rc?(this.sinc0=Math.sin(this.phic0),this.cosc0=Math.cos(this.phic0),this.R2=2*this.rc,this.title||(this.title="Oblique Stereographic Alternative"),void 0):(Proj4js.reportError("sterea:init:E_ERROR_0"),void 0)},forward:function(t){var i,s,e,o;return t.x=Proj4js.common.adjust_lon(t.x-this.long0),Proj4js.Proj.gauss.forward.apply(this,[t]),i=Math.sin(t.y),s=Math.cos(t.y),e=Math.cos(t.x),o=this.k0*this.R2/(1+this.sinc0*i+this.cosc0*s*e),t.x=o*s*Math.sin(t.x),t.y=o*(this.cosc0*i-this.sinc0*s*e),t.x=this.a*t.x+this.x0,t.y=this.a*t.y+this.y0,t},inverse:function(t){var i,s,e,o,n;if(t.x=(t.x-this.x0)/this.a,t.y=(t.y-this.y0)/this.a,t.x/=this.k0,t.y/=this.k0,n=Math.sqrt(t.x*t.x+t.y*t.y)){var a=2*Math.atan2(n,this.R2);i=Math.sin(a),s=Math.cos(a),o=Math.asin(s*this.sinc0+t.y*i*this.cosc0/n),e=Math.atan2(t.x*i,n*this.cosc0*s-t.y*this.sinc0*i)}else o=this.phic0,e=0;return t.x=e,t.y=o,Proj4js.Proj.gauss.inverse.apply(this,[t]),t.x=Proj4js.common.adjust_lon(t.x+this.long0),t}},Proj4js.Proj.poly={init:function(){0==this.lat0&&(this.lat0=90),this.temp=this.b/this.a,this.es=1-Math.pow(this.temp,2),this.e=Math.sqrt(this.es),this.e0=Proj4js.common.e0fn(this.es),this.e1=Proj4js.common.e1fn(this.es),this.e2=Proj4js.common.e2fn(this.es),this.e3=Proj4js.common.e3fn(this.es),this.ml0=Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,this.lat0)},forward:function(t){var i,s,e,o,n,a,r,h=t.x,l=t.y;return e=Proj4js.common.adjust_lon(h-this.long0),1e-7>=Math.abs(l)?(a=this.x0+this.a*e,r=this.y0-this.a*this.ml0):(i=Math.sin(l),s=Math.cos(l),o=Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,l),n=Proj4js.common.msfnz(this.e,i,s),e=i,a=this.x0+this.a*n*Math.sin(e)/i,r=this.y0+this.a*(o-this.ml0+n*(1-Math.cos(e))/i)),t.x=a,t.y=r,t},inverse:function(t){var i,s,e,o,n,a;if(t.x-=this.x0,t.y-=this.y0,i=this.ml0+t.y/this.a,o=0,1e-7>=Math.abs(i))n=t.x/this.a+this.long0,a=0;else{if(s=i*i+t.x/this.a*(t.x/this.a),o=phi4z(this.es,this.e0,this.e1,this.e2,this.e3,this.al,s,e,a),1!=o)return o;n=Proj4js.common.adjust_lon(Proj4js.common.asinz(t.x*e/this.a)/Math.sin(a)+this.long0)}return t.x=n,t.y=a,t}},Proj4js.Proj.equi={init:function(){this.x0||(this.x0=0),this.y0||(this.y0=0),this.lat0||(this.lat0=0),this.long0||(this.long0=0)},forward:function(t){var i=t.x,s=t.y,e=Proj4js.common.adjust_lon(i-this.long0),o=this.x0+this.a*e*Math.cos(this.lat0),n=this.y0+this.a*s;return this.t1=o,this.t2=Math.cos(this.lat0),t.x=o,t.y=n,t},inverse:function(t){t.x-=this.x0,t.y-=this.y0;var i=t.y/this.a;Math.abs(i)>Proj4js.common.HALF_PI&&Proj4js.reportError("equi:Inv:DataError");var s=Proj4js.common.adjust_lon(this.long0+t.x/(this.a*Math.cos(this.lat0)));t.x=s,t.y=i}},Proj4js.Proj.merc={init:function(){this.lat_ts&&(this.k0=this.sphere?Math.cos(this.lat_ts):Proj4js.common.msfnz(this.es,Math.sin(this.lat_ts),Math.cos(this.lat_ts)))},forward:function(t){var i=t.x,s=t.y;if(s*Proj4js.common.R2D>90&&-90>s*Proj4js.common.R2D&&i*Proj4js.common.R2D>180&&-180>i*Proj4js.common.R2D)return Proj4js.reportError("merc:forward: llInputOutOfRange: "+i+" : "+s),null;var e,o;if(Math.abs(Math.abs(s)-Proj4js.common.HALF_PI)<=Proj4js.common.EPSLN)return Proj4js.reportError("merc:forward: ll2mAtPoles"),null;if(this.sphere)e=this.x0+this.a*this.k0*Proj4js.common.adjust_lon(i-this.long0),o=this.y0+this.a*this.k0*Math.log(Math.tan(Proj4js.common.FORTPI+.5*s));else{var n=Math.sin(s),a=Proj4js.common.tsfnz(this.e,s,n);e=this.x0+this.a*this.k0*Proj4js.common.adjust_lon(i-this.long0),o=this.y0-this.a*this.k0*Math.log(a)}return t.x=e,t.y=o,t},inverse:function(t){var i,s,e=t.x-this.x0,o=t.y-this.y0;if(this.sphere)s=Proj4js.common.HALF_PI-2*Math.atan(Math.exp(-o/this.a*this.k0));else{var n=Math.exp(-o/(this.a*this.k0));if(s=Proj4js.common.phi2z(this.e,n),-9999==s)return Proj4js.reportError("merc:inverse: lat = -9999"),null}return i=Proj4js.common.adjust_lon(this.long0+e/(this.a*this.k0)),t.x=i,t.y=s,t}},Proj4js.Proj.utm={dependsOn:"tmerc",init:function(){return this.zone?(this.lat0=0,this.long0=(6*Math.abs(this.zone)-183)*Proj4js.common.D2R,this.x0=5e5,this.y0=this.utmSouth?1e7:0,this.k0=.9996,Proj4js.Proj.tmerc.init.apply(this),this.forward=Proj4js.Proj.tmerc.forward,this.inverse=Proj4js.Proj.tmerc.inverse,void 0):(Proj4js.reportError("utm:init: zone must be specified for UTM"),void 0)}},Proj4js.Proj.eqdc={init:function(){this.mode||(this.mode=0),this.temp=this.b/this.a,this.es=1-Math.pow(this.temp,2),this.e=Math.sqrt(this.es),this.e0=Proj4js.common.e0fn(this.es),this.e1=Proj4js.common.e1fn(this.es),this.e2=Proj4js.common.e2fn(this.es),this.e3=Proj4js.common.e3fn(this.es),this.sinphi=Math.sin(this.lat1),this.cosphi=Math.cos(this.lat1),this.ms1=Proj4js.common.msfnz(this.e,this.sinphi,this.cosphi),this.ml1=Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,this.lat1),0!=this.mode?(Math.abs(this.lat1+this.lat2)=Proj4js.common.EPSLN?(this.ms1-this.ms2)/(this.ml2-this.ml1):this.sinphi):this.ns=this.sinphi,this.g=this.ml1+this.ms1/this.ns,this.ml0=Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,this.lat0),this.rh=this.a*(this.g-this.ml0) +},forward:function(t){var i=t.x,s=t.y,e=Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,s),o=this.a*(this.g-e),n=this.ns*Proj4js.common.adjust_lon(i-this.long0),a=this.x0+o*Math.sin(n),r=this.y0+this.rh-o*Math.cos(n);return t.x=a,t.y=r,t},inverse:function(t){t.x-=this.x0,t.y=this.rh-t.y+this.y0;var i,s;this.ns>=0?(s=Math.sqrt(t.x*t.x+t.y*t.y),i=1):(s=-Math.sqrt(t.x*t.x+t.y*t.y),i=-1);var e=0;0!=s&&(e=Math.atan2(i*t.x,i*t.y));var o=this.g-s/this.a,n=this.phi3z(o,this.e0,this.e1,this.e2,this.e3),a=Proj4js.common.adjust_lon(this.long0+e/this.ns);return t.x=a,t.y=n,t},phi3z:function(t,i,s,e,o){var n,a;n=t;for(var r=0;15>r;r++)if(a=(t+s*Math.sin(2*n)-e*Math.sin(4*n)+o*Math.sin(6*n))/i-n,n+=a,1e-10>=Math.abs(a))return n;return Proj4js.reportError("PHI3Z-CONV:Latitude failed to converge after 15 iterations"),null}},Proj4js.Proj.tmerc={init:function(){this.e0=Proj4js.common.e0fn(this.es),this.e1=Proj4js.common.e1fn(this.es),this.e2=Proj4js.common.e2fn(this.es),this.e3=Proj4js.common.e3fn(this.es),this.ml0=this.a*Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,this.lat0)},forward:function(t){var i,s,e,o=t.x,n=t.y,a=Proj4js.common.adjust_lon(o-this.long0),r=Math.sin(n),h=Math.cos(n);if(this.sphere){var l=h*Math.sin(a);if(1e-10>Math.abs(Math.abs(l)-1))return Proj4js.reportError("tmerc:forward: Point projects into infinity"),93;s=.5*this.a*this.k0*Math.log((1+l)/(1-l)),i=Math.acos(h*Math.cos(a)/Math.sqrt(1-l*l)),0>n&&(i=-i),e=this.a*this.k0*(i-this.lat0)}else{var c=h*a,m=Math.pow(c,2),u=this.ep2*Math.pow(h,2),d=Math.tan(n),p=Math.pow(d,2);i=1-this.es*Math.pow(r,2);var _=this.a/Math.sqrt(i),f=this.a*Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,n);s=this.k0*_*c*(1+m/6*(1-p+u+m/20*(5-18*p+Math.pow(p,2)+72*u-58*this.ep2)))+this.x0,e=this.k0*(f-this.ml0+_*d*m*(.5+m/24*(5-p+9*u+4*Math.pow(u,2)+m/30*(61-58*p+Math.pow(p,2)+600*u-330*this.ep2))))+this.y0}return t.x=s,t.y=e,t},inverse:function(t){var i,s,e,o,n,a,r=6;if(this.sphere){var h=Math.exp(t.x/(this.a*this.k0)),l=.5*(h-1/h),c=this.lat0+t.y/(this.a*this.k0),m=Math.cos(c);i=Math.sqrt((1-m*m)/(1+l*l)),n=Proj4js.common.asinz(i),0>c&&(n=-n),a=0==l&&0==m?this.long0:Proj4js.common.adjust_lon(Math.atan2(l,m)+this.long0)}else{var u=t.x-this.x0,d=t.y-this.y0;for(i=(this.ml0+d/this.k0)/this.a,s=i,o=0;!0&&(e=(i+this.e1*Math.sin(2*s)-this.e2*Math.sin(4*s)+this.e3*Math.sin(6*s))/this.e0-s,s+=e,!(Math.abs(e)<=Proj4js.common.EPSLN));o++)if(o>=r)return Proj4js.reportError("tmerc:inverse: Latitude failed to converge"),95;if(Math.abs(s)0||Math.abs(a)<=Proj4js.common.EPSLN)var l=this.a*n*s*Math.sin(e),c=this.y0+this.a*n*(this.cos_p14*i-this.sin_p14*s*o);else Proj4js.reportError("orthoFwdPointError");return t.x=l,t.y=c,t},inverse:function(t){var i,s,e,o,n,a,r;return t.x-=this.x0,t.y-=this.y0,i=Math.sqrt(t.x*t.x+t.y*t.y),i>this.a+1e-7&&Proj4js.reportError("orthoInvDataError"),s=Proj4js.common.asinz(i/this.a),e=Math.sin(s),o=Math.cos(s),a=this.long0,Math.abs(i)<=Proj4js.common.EPSLN&&(r=this.lat0),r=Proj4js.common.asinz(o*this.sin_p14+t.y*e*this.cos_p14/i),n=Math.abs(this.lat0)-Proj4js.common.HALF_PI,Math.abs(n)<=Proj4js.common.EPSLN&&(a=this.lat0>=0?Proj4js.common.adjust_lon(this.long0+Math.atan2(t.x,-t.y)):Proj4js.common.adjust_lon(this.long0-Math.atan2(-t.x,t.y))),n=o-this.sin_p14*Math.sin(r),t.x=a,t.y=r,t}},Proj4js.Proj.krovak={init:function(){this.a=6377397.155,this.es=.006674372230614,this.e=Math.sqrt(this.es),this.lat0||(this.lat0=.863937979737193),this.long0||(this.long0=.4334234309119251),this.k0||(this.k0=.9999),this.s45=.785398163397448,this.s90=2*this.s45,this.fi0=this.lat0,this.e2=this.es,this.e=Math.sqrt(this.e2),this.alfa=Math.sqrt(1+this.e2*Math.pow(Math.cos(this.fi0),4)/(1-this.e2)),this.uq=1.04216856380474,this.u0=Math.asin(Math.sin(this.fi0)/this.alfa),this.g=Math.pow((1+this.e*Math.sin(this.fi0))/(1-this.e*Math.sin(this.fi0)),this.alfa*this.e/2),this.k=Math.tan(this.u0/2+this.s45)/Math.pow(Math.tan(this.fi0/2+this.s45),this.alfa)*this.g,this.k1=this.k0,this.n0=this.a*Math.sqrt(1-this.e2)/(1-this.e2*Math.pow(Math.sin(this.fi0),2)),this.s0=1.37008346281555,this.n=Math.sin(this.s0),this.ro0=this.k1*this.n0/Math.tan(this.s0),this.ad=this.s90-this.uq},forward:function(t){var i,s,e,o,n,a,r,h=t.x,l=t.y,c=Proj4js.common.adjust_lon(h-this.long0);return i=Math.pow((1+this.e*Math.sin(l))/(1-this.e*Math.sin(l)),this.alfa*this.e/2),s=2*(Math.atan(this.k*Math.pow(Math.tan(l/2+this.s45),this.alfa)/i)-this.s45),e=-c*this.alfa,o=Math.asin(Math.cos(this.ad)*Math.sin(s)+Math.sin(this.ad)*Math.cos(s)*Math.cos(e)),n=Math.asin(Math.cos(s)*Math.sin(e)/Math.cos(o)),a=this.n*n,r=this.ro0*Math.pow(Math.tan(this.s0/2+this.s45),this.n)/Math.pow(Math.tan(o/2+this.s45),this.n),t.y=r*Math.cos(a)/1,t.x=r*Math.sin(a)/1,this.czech&&(t.y*=-1,t.x*=-1),t},inverse:function(t){var i,s,e,o,n,a,r,h,l=t.x;t.x=t.y,t.y=l,this.czech&&(t.y*=-1,t.x*=-1),a=Math.sqrt(t.x*t.x+t.y*t.y),n=Math.atan2(t.y,t.x),o=n/Math.sin(this.s0),e=2*(Math.atan(Math.pow(this.ro0/a,1/this.n)*Math.tan(this.s0/2+this.s45))-this.s45),i=Math.asin(Math.cos(this.ad)*Math.sin(e)-Math.sin(this.ad)*Math.cos(e)*Math.cos(o)),s=Math.asin(Math.cos(e)*Math.sin(o)/Math.cos(i)),t.x=this.long0-s/this.alfa,r=i,h=0;var c=0;do t.y=2*(Math.atan(Math.pow(this.k,-1/this.alfa)*Math.pow(Math.tan(i/2+this.s45),1/this.alfa)*Math.pow((1+this.e*Math.sin(r))/(1-this.e*Math.sin(r)),this.e/2))-this.s45),1e-10>Math.abs(r-t.y)&&(h=1),r=t.y,c+=1;while(0==h&&15>c);return c>=15?(Proj4js.reportError("PHI3Z-CONV:Latitude failed to converge after 15 iterations"),null):t}},Proj4js.Proj.somerc={init:function(){var t=this.lat0;this.lambda0=this.long0;var i=Math.sin(t),s=this.a,e=this.rf,o=1/e,n=2*o-Math.pow(o,2),a=this.e=Math.sqrt(n);this.R=this.k0*s*Math.sqrt(1-n)/(1-n*Math.pow(i,2)),this.alpha=Math.sqrt(1+n/(1-n)*Math.pow(Math.cos(t),4)),this.b0=Math.asin(i/this.alpha),this.K=Math.log(Math.tan(Math.PI/4+this.b0/2))-this.alpha*Math.log(Math.tan(Math.PI/4+t/2))+this.alpha*a/2*Math.log((1+a*i)/(1-a*i))},forward:function(t){var i=Math.log(Math.tan(Math.PI/4-t.y/2)),s=this.e/2*Math.log((1+this.e*Math.sin(t.y))/(1-this.e*Math.sin(t.y))),e=-this.alpha*(i+s)+this.K,o=2*(Math.atan(Math.exp(e))-Math.PI/4),n=this.alpha*(t.x-this.lambda0),a=Math.atan(Math.sin(n)/(Math.sin(this.b0)*Math.tan(o)+Math.cos(this.b0)*Math.cos(n))),r=Math.asin(Math.cos(this.b0)*Math.sin(o)-Math.sin(this.b0)*Math.cos(o)*Math.cos(n));return t.y=this.R/2*Math.log((1+Math.sin(r))/(1-Math.sin(r)))+this.y0,t.x=this.R*a+this.x0,t},inverse:function(t){for(var i=t.x-this.x0,s=t.y-this.y0,e=i/this.R,o=2*(Math.atan(Math.exp(s/this.R))-Math.PI/4),n=Math.asin(Math.cos(this.b0)*Math.sin(o)+Math.sin(this.b0)*Math.cos(o)*Math.cos(e)),a=Math.atan(Math.sin(e)/(Math.cos(this.b0)*Math.cos(e)-Math.sin(this.b0)*Math.tan(o))),r=this.lambda0+a/this.alpha,h=0,l=n,c=-1e3,m=0;Math.abs(l-c)>1e-7;){if(++m>20)return Proj4js.reportError("omercFwdInfinity"),void 0;h=1/this.alpha*(Math.log(Math.tan(Math.PI/4+n/2))-this.K)+this.e*Math.log(Math.tan(Math.PI/4+Math.asin(this.e*Math.sin(l))/2)),c=l,l=2*Math.atan(Math.exp(h))-Math.PI/2}return t.x=r,t.y=l,t}},Proj4js.Proj.stere={ssfn_:function(t,i,s){return i*=s,Math.tan(.5*(Proj4js.common.HALF_PI+t))*Math.pow((1-i)/(1+i),.5*s)},TOL:1e-8,NITER:8,CONV:1e-10,S_POLE:0,N_POLE:1,OBLIQ:2,EQUIT:3,init:function(){this.phits=this.lat_ts?this.lat_ts:Proj4js.common.HALF_PI;var t=Math.abs(this.lat0);if(this.mode=Math.abs(t)-Proj4js.common.HALF_PIthis.lat0?this.S_POLE:this.N_POLE:t>Proj4js.common.EPSLN?this.OBLIQ:this.EQUIT,this.phits=Math.abs(this.phits),this.es){var i;switch(this.mode){case this.N_POLE:case this.S_POLE:Math.abs(this.phits-Proj4js.common.HALF_PI)=Proj4js.common.EPSLN?Math.cos(this.phits)/Math.tan(Proj4js.common.FORTPI-.5*this.phits):2*this.k0}},forward:function(t){var i=t.x;i=Proj4js.common.adjust_lon(i-this.long0);var s,e,o=t.y;if(this.sphere){var n,a,r,h;switch(n=Math.sin(o),a=Math.cos(o),r=Math.cos(i),h=Math.sin(i),this.mode){case this.EQUIT:e=1+a*r,Proj4js.common.EPSLN>=e&&Proj4js.reportError("stere:forward:Equit"),e=this.akm1/e,s=e*a*h,e*=n;break;case this.OBLIQ:e=1+this.sinph0*n+this.cosph0*a*r,Proj4js.common.EPSLN>=e&&Proj4js.reportError("stere:forward:Obliq"),e=this.akm1/e,s=e*a*h,e*=this.cosph0*n-this.sinph0*a*r;break;case this.N_POLE:r=-r,o=-o;case this.S_POLE:Math.abs(o-Proj4js.common.HALF_PI)=l;l++)r*=n,h+=this.A[l]*r;for(var c,m,u=h,d=a,p=1,_=0,f=0,P=0,l=1;6>=l;l++)c=p*u-_*d,m=_*u+p*d,p=c,_=m,f=f+this.B_re[l]*p-this.B_im[l]*_,P=P+this.B_im[l]*p+this.B_re[l]*_;return t.x=P*this.a+this.x0,t.y=f*this.a+this.y0,t},inverse:function(t){for(var i,s,e=t.x,o=t.y,n=e-this.x0,a=o-this.y0,r=a/this.a,h=n/this.a,l=1,c=0,m=0,u=0,d=1;6>=d;d++)i=l*r-c*h,s=c*r+l*h,l=i,c=s,m=m+this.C_re[d]*l-this.C_im[d]*c,u=u+this.C_im[d]*l+this.C_re[d]*c;for(var p=0;this.iterations>p;p++){for(var _,f,P=m,y=u,g=r,L=h,d=2;6>=d;d++)_=P*m-y*u,f=y*m+P*u,P=_,y=f,g+=(d-1)*(this.B_re[d]*P-this.B_im[d]*y),L+=(d-1)*(this.B_im[d]*P+this.B_re[d]*y);P=1,y=0;for(var v=this.B_re[1],j=this.B_im[1],d=2;6>=d;d++)_=P*m-y*u,f=y*m+P*u,P=_,y=f,v+=d*(this.B_re[d]*P-this.B_im[d]*y),j+=d*(this.B_im[d]*P+this.B_re[d]*y);var M=v*v+j*j;m=(g*v+L*j)/M,u=(L*v-g*j)/M}for(var S=m,b=u,x=1,E=0,d=1;9>=d;d++)x*=S,E+=this.D[d]*x;var C=this.lat0+1e5*E*Proj4js.common.SEC_TO_RAD,w=this.long0+b;return t.x=w,t.y=C,t}},Proj4js.Proj.mill={init:function(){},forward:function(t){var i=t.x,s=t.y,e=Proj4js.common.adjust_lon(i-this.long0),o=this.x0+this.a*e,n=this.y0+1.25*this.a*Math.log(Math.tan(Proj4js.common.PI/4+s/2.5));return t.x=o,t.y=n,t},inverse:function(t){t.x-=this.x0,t.y-=this.y0;var i=Proj4js.common.adjust_lon(this.long0+t.x/this.a),s=2.5*(Math.atan(Math.exp(.8*t.y/this.a))-Proj4js.common.PI/4);return t.x=i,t.y=s,t}},Proj4js.Proj.gnom={init:function(){this.sin_p14=Math.sin(this.lat0),this.cos_p14=Math.cos(this.lat0),this.infinity_dist=1e3*this.a,this.rc=1},forward:function(t){var i,s,e,o,n,a,r,h,l=t.x,c=t.y;return e=Proj4js.common.adjust_lon(l-this.long0),i=Math.sin(c),s=Math.cos(c),o=Math.cos(e),a=this.sin_p14*i+this.cos_p14*s*o,n=1,a>0||Math.abs(a)<=Proj4js.common.EPSLN?(r=this.x0+this.a*n*s*Math.sin(e)/a,h=this.y0+this.a*n*(this.cos_p14*i-this.sin_p14*s*o)/a):(Proj4js.reportError("orthoFwdPointError"),r=this.x0+this.infinity_dist*s*Math.sin(e),h=this.y0+this.infinity_dist*(this.cos_p14*i-this.sin_p14*s*o)),t.x=r,t.y=h,t},inverse:function(t){var i,s,e,o,n,a;return t.x=(t.x-this.x0)/this.a,t.y=(t.y-this.y0)/this.a,t.x/=this.k0,t.y/=this.k0,(i=Math.sqrt(t.x*t.x+t.y*t.y))?(o=Math.atan2(i,this.rc),s=Math.sin(o),e=Math.cos(o),a=Proj4js.common.asinz(e*this.sin_p14+t.y*s*this.cos_p14/i),n=Math.atan2(t.x*s,i*this.cos_p14*e-t.y*this.sin_p14*s),n=Proj4js.common.adjust_lon(this.long0+n)):(a=this.phic0,n=0),t.x=n,t.y=a,t}},Proj4js.Proj.sinu={init:function(){this.sphere?(this.n=1,this.m=0,this.es=0,this.C_y=Math.sqrt((this.m+1)/this.n),this.C_x=this.C_y/(this.m+1)):this.en=Proj4js.common.pj_enfn(this.es)},forward:function(t){var i,s,e=t.x,o=t.y;if(e=Proj4js.common.adjust_lon(e-this.long0),this.sphere){if(this.m)for(var n=this.n*Math.sin(o),a=Proj4js.common.MAX_ITER;a;--a){var r=(this.m*o+Math.sin(o)-n)/(this.m+Math.cos(o));if(o-=r,Math.abs(r)o?(o=Math.sin(i),s=this.long0+t.x*Math.sqrt(1-this.es*o*o)/(this.a*Math.cos(i)),e=Proj4js.common.adjust_lon(s)):o-Proj4js.common.EPSLN=0?this.y0+Proj4js.common.PI*this.R*Math.tan(.5*a):this.y0+Proj4js.common.PI*this.R*-Math.tan(.5*a));var r=.5*Math.abs(Proj4js.common.PI/n-n/Proj4js.common.PI),h=r*r,l=Math.sin(a),c=Math.cos(a),m=c/(l+c-1),u=m*m,d=m*(2/l-1),p=d*d,_=Proj4js.common.PI*this.R*(r*(m-p)+Math.sqrt(h*(m-p)*(m-p)-(p+h)*(u-p)))/(p+h);return 0>n&&(_=-_),i=this.x0+_,_=Math.abs(_/(Proj4js.common.PI*this.R)),s=o>=0?this.y0+Proj4js.common.PI*this.R*Math.sqrt(1-_*_-2*r*_):this.y0-Proj4js.common.PI*this.R*Math.sqrt(1-_*_-2*r*_),t.x=i,t.y=s,t},inverse:function(t){var i,s,e,o,n,a,r,h,l,c,m,u,d;return t.x-=this.x0,t.y-=this.y0,m=Proj4js.common.PI*this.R,e=t.x/m,o=t.y/m,n=e*e+o*o,a=-Math.abs(o)*(1+n),r=a-2*o*o+e*e,h=-2*a+1+2*o*o+n*n,d=o*o/h+(2*r*r*r/h/h/h-9*a*r/h/h)/27,l=(a-r*r/3/h)/h,c=2*Math.sqrt(-l/3),m=3*d/l/c,Math.abs(m)>1&&(m=m>=0?1:-1),u=Math.acos(m)/3,s=t.y>=0?(-c*Math.cos(u+Proj4js.common.PI/3)-r/3/h)*Proj4js.common.PI:-(-c*Math.cos(u+Proj4js.common.PI/3)-r/3/h)*Proj4js.common.PI,Math.abs(e)0&&(e=2*Math.atan(o*Proj4js.common.srat(this.e*Math.sin(t.y),-.5*this.e))-Proj4js.common.HALF_PI,!(i>Math.abs(e-t.y)));--n)t.y=e;return n?(t.x=s,t.y=e,t):(Proj4js.reportError("gauss:inverse:convergence failed"),null)}},Proj4js.Proj.omerc={init:function(){this.mode||(this.mode=0),this.lon1||(this.lon1=0,this.mode=1),this.lon2||(this.lon2=0),this.lat2||(this.lat2=0);var t=this.b/this.a,i=1-Math.pow(t,2);Math.sqrt(i),this.sin_p20=Math.sin(this.lat0),this.cos_p20=Math.cos(this.lat0),this.con=1-this.es*this.sin_p20*this.sin_p20,this.com=Math.sqrt(1-i),this.bl=Math.sqrt(1+this.es*Math.pow(this.cos_p20,4)/(1-i)),this.al=this.a*this.bl*this.k0*this.com/this.con,Math.abs(this.lat0)0?this.lat0>=0?this.d+Math.sqrt(this.d*this.d-1):this.d-Math.sqrt(this.d*this.d-1):this.d,this.el=this.f*Math.pow(this.ts,this.bl)),0!=this.mode?(this.g=.5*(this.f-1/this.f),this.gama=Proj4js.common.asinz(Math.sin(this.alpha)/this.d),this.longc=this.longc-Proj4js.common.asinz(this.g*Math.tan(this.gama))/this.bl,this.con=Math.abs(this.lat0),this.con>Proj4js.common.EPSLN&&Math.abs(this.con-Proj4js.common.HALF_PI)>Proj4js.common.EPSLN?(this.singam=Math.sin(this.gama),this.cosgam=Math.cos(this.gama),this.sinaz=Math.sin(this.alpha),this.cosaz=Math.cos(this.alpha),this.u=this.lat0>=0?this.al/this.bl*Math.atan(Math.sqrt(this.d*this.d-1)/this.cosaz):-(this.al/this.bl)*Math.atan(Math.sqrt(this.d*this.d-1)/this.cosaz)):Proj4js.reportError("omerc:Init:DataError")):(this.sinphi=Math.sin(this.at1),this.ts1=Proj4js.common.tsfnz(this.e,this.lat1,this.sinphi),this.sinphi=Math.sin(this.lat2),this.ts2=Proj4js.common.tsfnz(this.e,this.lat2,this.sinphi),this.h=Math.pow(this.ts1,this.bl),this.l=Math.pow(this.ts2,this.bl),this.f=this.el/this.h,this.g=.5*(this.f-1/this.f),this.j=(this.el*this.el-this.l*this.h)/(this.el*this.el+this.l*this.h),this.p=(this.l-this.h)/(this.l+this.h),this.dlon=this.lon1-this.lon2,this.dlon<-Proj4js.common.PI&&(this.lon2=this.lon2-2*Proj4js.common.PI),this.dlon>Proj4js.common.PI&&(this.lon2=this.lon2+2*Proj4js.common.PI),this.dlon=this.lon1-this.lon2,this.longc=.5*(this.lon1+this.lon2)-Math.atan(this.j*Math.tan(.5*this.bl*this.dlon)/this.p)/this.bl,this.dlon=Proj4js.common.adjust_lon(this.lon1-this.longc),this.gama=Math.atan(Math.sin(this.bl*this.dlon)/this.g),this.alpha=Proj4js.common.asinz(this.d*Math.sin(this.gama)),Math.abs(this.lat1-this.lat2)<=Proj4js.common.EPSLN?Proj4js.reportError("omercInitDataError"):this.con=Math.abs(this.lat1),this.con<=Proj4js.common.EPSLN||Math.abs(this.con-Proj4js.common.HALF_PI)<=Proj4js.common.EPSLN?Proj4js.reportError("omercInitDataError"):Math.abs(Math.abs(this.lat0)-Proj4js.common.HALF_PI)<=Proj4js.common.EPSLN&&Proj4js.reportError("omercInitDataError"),this.singam=Math.sin(this.gam),this.cosgam=Math.cos(this.gam),this.sinaz=Math.sin(this.alpha),this.cosaz=Math.cos(this.alpha),this.u=this.lat0>=0?this.al/this.bl*Math.atan(Math.sqrt(this.d*this.d-1)/this.cosaz):-(this.al/this.bl)*Math.atan(Math.sqrt(this.d*this.d-1)/this.cosaz))},forward:function(t){var i,s,e,o,n,a,r,h,l,c,m,u=t.x,d=t.y;i=Math.sin(d),c=Proj4js.common.adjust_lon(u-this.longc),a=Math.sin(this.bl*c),Math.abs(Math.abs(d)-Proj4js.common.HALF_PI)>Proj4js.common.EPSLN?(m=Proj4js.common.tsfnz(this.e,d,i),o=this.el/Math.pow(m,this.bl),l=.5*(o-1/o),s=.5*(o+1/o),r=(l*this.singam-a*this.cosgam)/s,e=Math.cos(this.bl*c),1e-7>Math.abs(e)?n=this.al*this.bl*c:(n=this.al*Math.atan((l*this.cosgam+a*this.singam)/e)/this.bl,0>e&&(n+=Proj4js.common.PI*this.al/this.bl))):(r=d>=0?this.singam:-this.singam,n=this.al*d/this.bl),Math.abs(Math.abs(r)-1)<=Proj4js.common.EPSLN&&Proj4js.reportError("omercFwdInfinity"),h=.5*this.al*Math.log((1-r)/(1+r))/this.bl,n-=this.u;var p=this.x0+h*this.cosaz+n*this.sinaz,_=this.y0+n*this.cosaz-h*this.sinaz;return t.x=p,t.y=_,t},inverse:function(t){var i,s,e,o,n,a,r,h,l,c,m,u,d;return t.x-=this.x0,t.y-=this.y0,d=0,o=t.x*this.cosaz-t.y*this.sinaz,n=t.y*this.cosaz+t.x*this.sinaz,n+=this.u,a=Math.exp(-this.bl*o/this.al),r=.5*(a-1/a),s=.5*(a+1/a),l=Math.sin(this.bl*n/this.al),c=(l*this.cosgam+r*this.singam)/s,Math.abs(Math.abs(c)-1)<=Proj4js.common.EPSLN?(m=this.longc,u=c>=0?Proj4js.common.HALF_PI:-Proj4js.common.HALF_PI):(e=1/this.bl,h=Math.pow(this.el/Math.sqrt((1+c)/(1-c)),e),u=Proj4js.common.phi2z(this.e,h),i=this.longc-Math.atan2(r*this.cosgam-l*this.singam,e)/this.bl,m=Proj4js.common.adjust_lon(i)),t.x=m,t.y=u,t}},Proj4js.Proj.lcc={init:function(){if(this.lat2||(this.lat2=this.lat0),this.k0||(this.k0=1),Math.abs(this.lat1+this.lat2)Proj4js.common.EPSLN?Math.log(e/r)/Math.log(o/h):i,this.f0=e/(this.ns*Math.pow(o,this.ns)),this.rh=this.a*this.f0*Math.pow(l,this.ns),this.title||(this.title="Lambert Conformal Conic")},forward:function(t){var i=t.x,s=t.y;if(!(90>=s&&s>=-90&&180>=i&&i>=-180))return Proj4js.reportError("lcc:forward: llInputOutOfRange: "+i+" : "+s),null;var e,o,n=Math.abs(Math.abs(s)-Proj4js.common.HALF_PI);if(n>Proj4js.common.EPSLN)e=Proj4js.common.tsfnz(this.e,s,Math.sin(s)),o=this.a*this.f0*Math.pow(e,this.ns);else{if(n=s*this.ns,0>=n)return Proj4js.reportError("lcc:forward: No Projection"),null;o=0}var a=this.ns*Proj4js.common.adjust_lon(i-this.long0);return t.x=this.k0*o*Math.sin(a)+this.x0,t.y=this.k0*(this.rh-o*Math.cos(a))+this.y0,t},inverse:function(t){var i,s,e,o,n,a=(t.x-this.x0)/this.k0,r=this.rh-(t.y-this.y0)/this.k0;this.ns>0?(i=Math.sqrt(a*a+r*r),s=1):(i=-Math.sqrt(a*a+r*r),s=-1);var h=0;if(0!=i&&(h=Math.atan2(s*a,s*r)),0!=i||this.ns>0){if(s=1/this.ns,e=Math.pow(i/(this.a*this.f0),s),o=Proj4js.common.phi2z(this.e,e),-9999==o)return null}else o=-Proj4js.common.HALF_PI;return n=Proj4js.common.adjust_lon(h/this.ns+this.long0),t.x=n,t.y=o,t}},Proj4js.Proj.laea={S_POLE:1,N_POLE:2,EQUIT:3,OBLIQ:4,init:function(){var t=Math.abs(this.lat0);if(this.mode=Math.abs(t-Proj4js.common.HALF_PI)this.lat0?this.S_POLE:this.N_POLE:Math.abs(t)0){var i;switch(this.qp=Proj4js.common.qsfnz(this.e,1),this.mmf=.5/(1-this.es),this.apa=this.authset(this.es),this.mode){case this.N_POLE:case this.S_POLE:this.dd=1;break;case this.EQUIT:this.rq=Math.sqrt(.5*this.qp),this.dd=1/this.rq,this.xmf=1,this.ymf=.5*this.qp;break;case this.OBLIQ:this.rq=Math.sqrt(.5*this.qp),i=Math.sin(this.lat0),this.sinb1=Proj4js.common.qsfnz(this.e,i)/this.qp,this.cosb1=Math.sqrt(1-this.sinb1*this.sinb1),this.dd=Math.cos(this.lat0)/(Math.sqrt(1-this.es*i*i)*this.rq*this.cosb1),this.ymf=(this.xmf=this.rq)/this.dd,this.xmf*=this.dd}}else this.mode==this.OBLIQ&&(this.sinph0=Math.sin(this.lat0),this.cosph0=Math.cos(this.lat0))},forward:function(t){var i,s,e=t.x,o=t.y;if(e=Proj4js.common.adjust_lon(e-this.long0),this.sphere){var n,a,r;switch(r=Math.sin(o),a=Math.cos(o),n=Math.cos(e),this.mode){case this.OBLIQ:case this.EQUIT:if(s=this.mode==this.EQUIT?1+a*n:1+this.sinph0*r+this.cosph0*a*n,Proj4js.common.EPSLN>=s)return Proj4js.reportError("laea:fwd:y less than eps"),null;s=Math.sqrt(2/s),i=s*a*Math.sin(e),s*=this.mode==this.EQUIT?r:this.cosph0*r-this.sinph0*a*n;break;case this.N_POLE:n=-n;case this.S_POLE:if(Math.abs(o+this.phi0)=0?(i=(u=Math.sqrt(l))*h,s=n*(this.mode==this.S_POLE?u:-u)):i=s=0}}return t.x=this.a*i+this.x0,t.y=this.a*s+this.y0,t},inverse:function(t){t.x-=this.x0,t.y-=this.y0;var i,s,e=t.x/this.a,o=t.y/this.a;if(this.sphere){var n,a=0,r=0;if(n=Math.sqrt(e*e+o*o),s=.5*n,s>1)return Proj4js.reportError("laea:Inv:DataError"),null; +switch(s=2*Math.asin(s),(this.mode==this.OBLIQ||this.mode==this.EQUIT)&&(r=Math.sin(s),a=Math.cos(s)),this.mode){case this.EQUIT:s=Math.abs(n)<=Proj4js.common.EPSLN?0:Math.asin(o*r/n),e*=r,o=a*n;break;case this.OBLIQ:s=Math.abs(n)<=Proj4js.common.EPSLN?this.phi0:Math.asin(a*this.sinph0+o*r*this.cosph0/n),e*=r*this.cosph0,o=(a-Math.sin(s)*this.sinph0)*n;break;case this.N_POLE:o=-o,s=Proj4js.common.HALF_PI-s;break;case this.S_POLE:s-=Proj4js.common.HALF_PI}i=0!=o||this.mode!=this.EQUIT&&this.mode!=this.OBLIQ?Math.atan2(e,o):0}else{var h,l,c,m,u=0;switch(this.mode){case this.EQUIT:case this.OBLIQ:if(e/=this.dd,o*=this.dd,m=Math.sqrt(e*e+o*o),Proj4js.common.EPSLN>m)return t.x=0,t.y=this.phi0,t;l=2*Math.asin(.5*m/this.rq),h=Math.cos(l),e*=l=Math.sin(l),this.mode==this.OBLIQ?(u=h*this.sinb1+o*l*this.cosb1/m,c=this.qp*u,o=m*this.cosb1*h-o*this.sinb1*l):(u=o*l/m,c=this.qp*u,o=m*h);break;case this.N_POLE:o=-o;case this.S_POLE:if(c=e*e+o*o,!c)return t.x=0,t.y=this.phi0,t;u=1-c/this.qp,this.mode==this.S_POLE&&(u=-u)}i=Math.atan2(e,o),s=this.authlat(Math.asin(u),this.apa)}return t.x=Proj4js.common.adjust_lon(this.long0+i),t.y=s,t},P00:.3333333333333333,P01:.17222222222222222,P02:.10257936507936508,P10:.06388888888888888,P11:.0664021164021164,P20:.016415012942191543,authset:function(t){var i,s=[];return s[0]=t*this.P00,i=t*t,s[0]+=i*this.P01,s[1]=i*this.P10,i*=t,s[0]+=i*this.P02,s[1]+=i*this.P11,s[2]=i*this.P20,s},authlat:function(t,i){var s=t+t;return t+i[0]*Math.sin(s)+i[1]*Math.sin(s+s)+i[2]*Math.sin(s+s+s)}},Proj4js.Proj.aeqd={init:function(){this.sin_p12=Math.sin(this.lat0),this.cos_p12=Math.cos(this.lat0)},forward:function(t){var i=t.x;t.y;var s,e=Math.sin(t.y),o=Math.cos(t.y),n=Proj4js.common.adjust_lon(i-this.long0),a=Math.cos(n),r=this.sin_p12*e+this.cos_p12*o*a;if(Math.abs(Math.abs(r)-1)r)return Proj4js.reportError("aeqd:Fwd:PointError"),void 0}else{var h=Math.acos(r);s=h/Math.sin(h)}return t.x=this.x0+this.a*s*o*Math.sin(n),t.y=this.y0+this.a*s*(this.cos_p12*e-this.sin_p12*o*a),t},inverse:function(t){t.x-=this.x0,t.y-=this.y0;var i=Math.sqrt(t.x*t.x+t.y*t.y);if(i>2*Proj4js.common.HALF_PI*this.a)return Proj4js.reportError("aeqdInvDataError"),void 0;var s,e=i/this.a,o=Math.sin(e),n=Math.cos(e),a=this.long0;if(Math.abs(i)<=Proj4js.common.EPSLN)s=this.lat0;else{s=Proj4js.common.asinz(n*this.sin_p12+t.y*o*this.cos_p12/i);var r=Math.abs(this.lat0)-Proj4js.common.HALF_PI;Math.abs(r)<=Proj4js.common.EPSLN?a=this.lat0>=0?Proj4js.common.adjust_lon(this.long0+Math.atan2(t.x,-t.y)):Proj4js.common.adjust_lon(this.long0-Math.atan2(-t.x,t.y)):(r=n-this.sin_p12*Math.sin(s),Math.abs(r)=50&&Proj4js.reportError("moll:Fwd:IterationError")}o/=2,Proj4js.common.PI/2-Math.abs(s).999999999999&&(s=.999999999999);var i=Math.asin(s),e=Proj4js.common.adjust_lon(this.long0+t.x/(.900316316158*this.a*Math.cos(i)));-Proj4js.common.PI>e&&(e=-Proj4js.common.PI),e>Proj4js.common.PI&&(e=Proj4js.common.PI),s=(2*i+Math.sin(2*i))/Proj4js.common.PI,Math.abs(s)>1&&(s=1);var o=Math.asin(s);return t.x=e,t.y=o,t}},function(t,i,s){var e,o;typeof exports!=s+""?e=exports:(o=t.L,e={},e.noConflict=function(){return t.L=o,this},t.L=e),e.version="0.5.1",e.Util={extend:function(t){var i,s,e,o,n=Array.prototype.slice.call(arguments,1);for(s=0,e=n.length;e>s;s++){o=n[s]||{};for(i in o)o.hasOwnProperty(i)&&(t[i]=o[i])}return t},bind:function(t,i){var s=arguments.length>2?Array.prototype.slice.call(arguments,2):null;return function(){return t.apply(i,s||arguments)}},stamp:function(){var t=0,i="_leaflet_id";return function(s){return s[i]=s[i]||++t,s[i]}}(),limitExecByInterval:function(t,i,e){var o,n;return function a(){var r=arguments;return o?(n=!0,s):(o=!0,setTimeout(function(){o=!1,n&&(a.apply(e,r),n=!1)},i),t.apply(e,r),s)}},falseFn:function(){return!1},formatNum:function(t,i){var s=Math.pow(10,i||5);return Math.round(t*s)/s},splitWords:function(t){return t.replace(/^\s+|\s+$/g,"").split(/\s+/)},setOptions:function(t,i){return t.options=e.extend({},t.options,i),t.options},getParamString:function(t,i){var s=[];for(var e in t)t.hasOwnProperty(e)&&s.push(e+"="+t[e]);return(i&&-1!==i.indexOf("?")?"&":"?")+s.join("&")},template:function(t,i){return t.replace(/\{ *([\w_]+) *\}/g,function(t,s){var e=i[s];if(!i.hasOwnProperty(s))throw Error("No value provided for variable "+t);return e})},isArray:function(t){return"[object Array]"===Object.prototype.toString.call(t)},emptyImageUrl:"data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs="},function(){function i(i){var s,e,o=["webkit","moz","o","ms"];for(s=0;o.length>s&&!e;s++)e=t[o[s]+i];return e}function o(i){var s=+new Date,e=Math.max(0,16-(s-n));return n=s+e,t.setTimeout(i,e)}var n=0,a=t.requestAnimationFrame||i("RequestAnimationFrame")||o,r=t.cancelAnimationFrame||i("CancelAnimationFrame")||i("CancelRequestAnimationFrame")||function(i){t.clearTimeout(i)};e.Util.requestAnimFrame=function(i,n,r,h){return i=e.bind(i,n),r&&a===o?(i(),s):a.call(t,i,h)},e.Util.cancelAnimFrame=function(i){i&&r.call(t,i)}}(),e.extend=e.Util.extend,e.bind=e.Util.bind,e.stamp=e.Util.stamp,e.setOptions=e.Util.setOptions,e.Class=function(){},e.Class.extend=function(t){var i=function(){this.initialize&&this.initialize.apply(this,arguments),this._initHooks&&this.callInitHooks()},s=function(){};s.prototype=this.prototype;var o=new s;o.constructor=i,i.prototype=o;for(var n in this)this.hasOwnProperty(n)&&"prototype"!==n&&(i[n]=this[n]);t.statics&&(e.extend(i,t.statics),delete t.statics),t.includes&&(e.Util.extend.apply(null,[o].concat(t.includes)),delete t.includes),t.options&&o.options&&(t.options=e.extend({},o.options,t.options)),e.extend(o,t),o._initHooks=[];var a=this;return o.callInitHooks=function(){if(!this._initHooksCalled){a.prototype.callInitHooks&&a.prototype.callInitHooks.call(this),this._initHooksCalled=!0;for(var t=0,i=o._initHooks.length;i>t;t++)o._initHooks[t].call(this)}},i},e.Class.include=function(t){e.extend(this.prototype,t)},e.Class.mergeOptions=function(t){e.extend(this.prototype.options,t)},e.Class.addInitHook=function(t){var i=Array.prototype.slice.call(arguments,1),s="function"==typeof t?t:function(){this[t].apply(this,i)};this.prototype._initHooks=this.prototype._initHooks||[],this.prototype._initHooks.push(s)};var n="_leaflet_events";e.Mixin={},e.Mixin.Events={addEventListener:function(t,i,s){var o,a,r,h=this[n]=this[n]||{};if("object"==typeof t){for(o in t)t.hasOwnProperty(o)&&this.addEventListener(o,t[o],i);return this}for(t=e.Util.splitWords(t),a=0,r=t.length;r>a;a++)h[t[a]]=h[t[a]]||[],h[t[a]].push({action:i,context:s||this});return this},hasEventListeners:function(t){return n in this&&t in this[n]&&this[n][t].length>0},removeEventListener:function(t,i,s){var o,a,r,h,l,c=this[n];if("object"==typeof t){for(o in t)t.hasOwnProperty(o)&&this.removeEventListener(o,t[o],i);return this}for(t=e.Util.splitWords(t),a=0,r=t.length;r>a;a++)if(this.hasEventListeners(t[a]))for(h=c[t[a]],l=h.length-1;l>=0;l--)i&&h[l].action!==i||s&&h[l].context!==s||h.splice(l,1);return this},fireEvent:function(t,i){if(!this.hasEventListeners(t))return this;for(var s=e.extend({type:t,target:this},i),o=this[n][t].slice(),a=0,r=o.length;r>a;a++)o[a].action.call(o[a].context||this,s);return this}},e.Mixin.Events.on=e.Mixin.Events.addEventListener,e.Mixin.Events.off=e.Mixin.Events.removeEventListener,e.Mixin.Events.fire=e.Mixin.Events.fireEvent,function(){var o=!!t.ActiveXObject,n=o&&!t.XMLHttpRequest,a=o&&!i.querySelector,r=navigator.userAgent.toLowerCase(),h=-1!==r.indexOf("webkit"),l=-1!==r.indexOf("chrome"),c=-1!==r.indexOf("android"),m=-1!==r.search("android [23]"),u=typeof orientation!=s+"",d=t.navigator&&t.navigator.msPointerEnabled&&t.navigator.msMaxTouchPoints,p="devicePixelRatio"in t&&t.devicePixelRatio>1||"matchMedia"in t&&t.matchMedia("(min-resolution:144dpi)")&&t.matchMedia("(min-resolution:144dpi)").matches,_=i.documentElement,f=o&&"transition"in _.style,P="WebKitCSSMatrix"in t&&"m11"in new t.WebKitCSSMatrix,y="MozPerspective"in _.style,g="OTransition"in _.style,L=!t.L_DISABLE_3D&&(f||P||y||g),v=!t.L_NO_TOUCH&&function(){var t="ontouchstart";if(d||t in _)return!0;var s=i.createElement("div"),e=!1;return s.setAttribute?(s.setAttribute(t,"return;"),"function"==typeof s[t]&&(e=!0),s.removeAttribute(t),s=null,e):!1}();e.Browser={ie:o,ie6:n,ie7:a,webkit:h,android:c,android23:m,chrome:l,ie3d:f,webkit3d:P,gecko3d:y,opera3d:g,any3d:L,mobile:u,mobileWebkit:u&&h,mobileWebkit3d:u&&P,mobileOpera:u&&t.opera,touch:v,msTouch:d,retina:p}}(),e.Point=function(t,i,s){this.x=s?Math.round(t):t,this.y=s?Math.round(i):i},e.Point.prototype={clone:function(){return new e.Point(this.x,this.y)},add:function(t){return this.clone()._add(e.point(t))},_add:function(t){return this.x+=t.x,this.y+=t.y,this},subtract:function(t){return this.clone()._subtract(e.point(t))},_subtract:function(t){return this.x-=t.x,this.y-=t.y,this},divideBy:function(t){return this.clone()._divideBy(t)},_divideBy:function(t){return this.x/=t,this.y/=t,this},multiplyBy:function(t){return this.clone()._multiplyBy(t)},_multiplyBy:function(t){return this.x*=t,this.y*=t,this},round:function(){return this.clone()._round()},_round:function(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this},floor:function(){return this.clone()._floor()},_floor:function(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this},distanceTo:function(t){t=e.point(t);var i=t.x-this.x,s=t.y-this.y;return Math.sqrt(i*i+s*s)},equals:function(t){return t.x===this.x&&t.y===this.y},toString:function(){return"Point("+e.Util.formatNum(this.x)+", "+e.Util.formatNum(this.y)+")"}},e.point=function(t,i,s){return t instanceof e.Point?t:e.Util.isArray(t)?new e.Point(t[0],t[1]):isNaN(t)?t:new e.Point(t,i,s)},e.Bounds=function(t,i){if(t)for(var s=i?[t,i]:t,e=0,o=s.length;o>e;e++)this.extend(s[e])},e.Bounds.prototype={extend:function(t){return t=e.point(t),this.min||this.max?(this.min.x=Math.min(t.x,this.min.x),this.max.x=Math.max(t.x,this.max.x),this.min.y=Math.min(t.y,this.min.y),this.max.y=Math.max(t.y,this.max.y)):(this.min=t.clone(),this.max=t.clone()),this},getCenter:function(t){return new e.Point((this.min.x+this.max.x)/2,(this.min.y+this.max.y)/2,t)},getBottomLeft:function(){return new e.Point(this.min.x,this.max.y)},getTopRight:function(){return new e.Point(this.max.x,this.min.y)},getSize:function(){return this.max.subtract(this.min)},contains:function(t){var i,s;return t="number"==typeof t[0]||t instanceof e.Point?e.point(t):e.bounds(t),t instanceof e.Bounds?(i=t.min,s=t.max):i=s=t,i.x>=this.min.x&&s.x<=this.max.x&&i.y>=this.min.y&&s.y<=this.max.y},intersects:function(t){t=e.bounds(t);var i=this.min,s=this.max,o=t.min,n=t.max,a=n.x>=i.x&&o.x<=s.x,r=n.y>=i.y&&o.y<=s.y;return a&&r},isValid:function(){return!(!this.min||!this.max)}},e.bounds=function(t,i){return!t||t instanceof e.Bounds?t:new e.Bounds(t,i)},e.Transformation=function(t,i,s,e){this._a=t,this._b=i,this._c=s,this._d=e},e.Transformation.prototype={transform:function(t,i){return this._transform(t.clone(),i)},_transform:function(t,i){return i=i||1,t.x=i*(this._a*t.x+this._b),t.y=i*(this._c*t.y+this._d),t},untransform:function(t,i){return i=i||1,new e.Point((t.x/i-this._b)/this._a,(t.y/i-this._d)/this._c)}},e.DomUtil={get:function(t){return"string"==typeof t?i.getElementById(t):t},getStyle:function(t,s){var e=t.style[s];if(!e&&t.currentStyle&&(e=t.currentStyle[s]),(!e||"auto"===e)&&i.defaultView){var o=i.defaultView.getComputedStyle(t,null);e=o?o[s]:null}return"auto"===e?null:e},getViewportOffset:function(t){var s,o=0,n=0,a=t,r=i.body,h=e.Browser.ie7;do{if(o+=a.offsetTop||0,n+=a.offsetLeft||0,o+=parseInt(e.DomUtil.getStyle(a,"borderTopWidth"),10)||0,n+=parseInt(e.DomUtil.getStyle(a,"borderLeftWidth"),10)||0,s=e.DomUtil.getStyle(a,"position"),a.offsetParent===r&&"absolute"===s)break;if("fixed"===s){o+=r.scrollTop||0,n+=r.scrollLeft||0;break}a=a.offsetParent}while(a);a=t;do{if(a===r)break;o-=a.scrollTop||0,n-=a.scrollLeft||0,e.DomUtil.documentIsLtr()||!e.Browser.webkit&&!h||(n+=a.scrollWidth-a.clientWidth,h&&"hidden"!==e.DomUtil.getStyle(a,"overflow-y")&&"hidden"!==e.DomUtil.getStyle(a,"overflow")&&(n+=17)),a=a.parentNode}while(a);return new e.Point(n,o)},documentIsLtr:function(){return e.DomUtil._docIsLtrCached||(e.DomUtil._docIsLtrCached=!0,e.DomUtil._docIsLtr="ltr"===e.DomUtil.getStyle(i.body,"direction")),e.DomUtil._docIsLtr},create:function(t,s,e){var o=i.createElement(t);return o.className=s,e&&e.appendChild(o),o},disableTextSelection:function(){i.selection&&i.selection.empty&&i.selection.empty(),this._onselectstart||(this._onselectstart=i.onselectstart||null,i.onselectstart=e.Util.falseFn)},enableTextSelection:function(){i.onselectstart===e.Util.falseFn&&(i.onselectstart=this._onselectstart,this._onselectstart=null)},hasClass:function(t,i){return t.className.length>0&&RegExp("(^|\\s)"+i+"(\\s|$)").test(t.className)},addClass:function(t,i){e.DomUtil.hasClass(t,i)||(t.className+=(t.className?" ":"")+i)},removeClass:function(t,i){function s(t,s){return s===i?"":t}t.className=t.className.replace(/(\S+)\s*/g,s).replace(/(^\s+|\s+$)/,"")},setOpacity:function(t,i){if("opacity"in t.style)t.style.opacity=i;else if("filter"in t.style){var s=!1,e="DXImageTransform.Microsoft.Alpha";try{s=t.filters.item(e)}catch(o){}i=Math.round(100*i),s?(s.Enabled=100!==i,s.Opacity=i):t.style.filter+=" progid:"+e+"(opacity="+i+")"}},testProp:function(t){for(var s=i.documentElement.style,e=0;t.length>e;e++)if(t[e]in s)return t[e];return!1},getTranslateString:function(t){var i=e.Browser.webkit3d,s="translate"+(i?"3d":"")+"(",o=(i?",0":"")+")";return s+t.x+"px,"+t.y+"px"+o},getScaleString:function(t,i){var s=e.DomUtil.getTranslateString(i.add(i.multiplyBy(-1*t))),o=" scale("+t+") ";return s+o},setPosition:function(t,i,s){t._leaflet_pos=i,!s&&e.Browser.any3d?(t.style[e.DomUtil.TRANSFORM]=e.DomUtil.getTranslateString(i),e.Browser.mobileWebkit3d&&(t.style.WebkitBackfaceVisibility="hidden")):(t.style.left=i.x+"px",t.style.top=i.y+"px")},getPosition:function(t){return t._leaflet_pos}},e.DomUtil.TRANSFORM=e.DomUtil.testProp(["transform","WebkitTransform","OTransform","MozTransform","msTransform"]),e.DomUtil.TRANSITION=e.DomUtil.testProp(["webkitTransition","transition","OTransition","MozTransition","msTransition"]),e.DomUtil.TRANSITION_END="webkitTransition"===e.DomUtil.TRANSITION||"OTransition"===e.DomUtil.TRANSITION?e.DomUtil.TRANSITION+"End":"transitionend",e.LatLng=function(t,i){var s=parseFloat(t),e=parseFloat(i);if(isNaN(s)||isNaN(e))throw Error("Invalid LatLng object: ("+t+", "+i+")");this.lat=s,this.lng=e},e.extend(e.LatLng,{DEG_TO_RAD:Math.PI/180,RAD_TO_DEG:180/Math.PI,MAX_MARGIN:1e-9}),e.LatLng.prototype={equals:function(t){if(!t)return!1;t=e.latLng(t);var i=Math.max(Math.abs(this.lat-t.lat),Math.abs(this.lng-t.lng));return e.LatLng.MAX_MARGIN>=i},toString:function(t){return"LatLng("+e.Util.formatNum(this.lat,t)+", "+e.Util.formatNum(this.lng,t)+")"},distanceTo:function(t){t=e.latLng(t);var i=6378137,s=e.LatLng.DEG_TO_RAD,o=(t.lat-this.lat)*s,n=(t.lng-this.lng)*s,a=this.lat*s,r=t.lat*s,h=Math.sin(o/2),l=Math.sin(n/2),c=h*h+l*l*Math.cos(a)*Math.cos(r);return 2*i*Math.atan2(Math.sqrt(c),Math.sqrt(1-c))},wrap:function(t,i){var s=this.lng;return t=t||-180,i=i||180,s=(s+i)%(i-t)+(t>s||s===i?i:t),new e.LatLng(this.lat,s)}},e.latLng=function(t,i){return t instanceof e.LatLng?t:e.Util.isArray(t)?new e.LatLng(t[0],t[1]):isNaN(t)?t:new e.LatLng(t,i)},e.LatLngBounds=function(t,i){if(t)for(var s=i?[t,i]:t,e=0,o=s.length;o>e;e++)this.extend(s[e])},e.LatLngBounds.prototype={extend:function(t){return t="number"==typeof t[0]||"string"==typeof t[0]||t instanceof e.LatLng?e.latLng(t):e.latLngBounds(t),t instanceof e.LatLng?this._southWest||this._northEast?(this._southWest.lat=Math.min(t.lat,this._southWest.lat),this._southWest.lng=Math.min(t.lng,this._southWest.lng),this._northEast.lat=Math.max(t.lat,this._northEast.lat),this._northEast.lng=Math.max(t.lng,this._northEast.lng)):(this._southWest=new e.LatLng(t.lat,t.lng),this._northEast=new e.LatLng(t.lat,t.lng)):t instanceof e.LatLngBounds&&(this.extend(t._southWest),this.extend(t._northEast)),this},pad:function(t){var i=this._southWest,s=this._northEast,o=Math.abs(i.lat-s.lat)*t,n=Math.abs(i.lng-s.lng)*t;return new e.LatLngBounds(new e.LatLng(i.lat-o,i.lng-n),new e.LatLng(s.lat+o,s.lng+n))},getCenter:function(){return new e.LatLng((this._southWest.lat+this._northEast.lat)/2,(this._southWest.lng+this._northEast.lng)/2)},getSouthWest:function(){return this._southWest},getNorthEast:function(){return this._northEast},getNorthWest:function(){return new e.LatLng(this._northEast.lat,this._southWest.lng)},getSouthEast:function(){return new e.LatLng(this._southWest.lat,this._northEast.lng)},contains:function(t){t="number"==typeof t[0]||t instanceof e.LatLng?e.latLng(t):e.latLngBounds(t);var i,s,o=this._southWest,n=this._northEast;return t instanceof e.LatLngBounds?(i=t.getSouthWest(),s=t.getNorthEast()):i=s=t,i.lat>=o.lat&&s.lat<=n.lat&&i.lng>=o.lng&&s.lng<=n.lng},intersects:function(t){t=e.latLngBounds(t);var i=this._southWest,s=this._northEast,o=t.getSouthWest(),n=t.getNorthEast(),a=n.lat>=i.lat&&o.lat<=s.lat,r=n.lng>=i.lng&&o.lng<=s.lng;return a&&r},toBBoxString:function(){var t=this._southWest,i=this._northEast;return[t.lng,t.lat,i.lng,i.lat].join(",")},equals:function(t){return t?(t=e.latLngBounds(t),this._southWest.equals(t.getSouthWest())&&this._northEast.equals(t.getNorthEast())):!1},isValid:function(){return!(!this._southWest||!this._northEast)}},e.latLngBounds=function(t,i){return!t||t instanceof e.LatLngBounds?t:new e.LatLngBounds(t,i)},e.Projection={},e.Projection.SphericalMercator={MAX_LATITUDE:85.0511287798,project:function(t){var i=e.LatLng.DEG_TO_RAD,s=this.MAX_LATITUDE,o=Math.max(Math.min(s,t.lat),-s),n=t.lng*i,a=o*i;return a=Math.log(Math.tan(Math.PI/4+a/2)),new e.Point(n,a)},unproject:function(t){var i=e.LatLng.RAD_TO_DEG,s=t.x*i,o=(2*Math.atan(Math.exp(t.y))-Math.PI/2)*i;return new e.LatLng(o,s)}},e.Projection.LonLat={project:function(t){return new e.Point(t.lng,t.lat)},unproject:function(t){return new e.LatLng(t.y,t.x)}},e.CRS={latLngToPoint:function(t,i){var s=this.projection.project(t),e=this.scale(i);return this.transformation._transform(s,e)},pointToLatLng:function(t,i){var s=this.scale(i),e=this.transformation.untransform(t,s);return this.projection.unproject(e)},project:function(t){return this.projection.project(t)},scale:function(t){return 256*Math.pow(2,t)}},e.CRS.Simple=e.extend({},e.CRS,{projection:e.Projection.LonLat,transformation:new e.Transformation(1,0,-1,0),scale:function(t){return Math.pow(2,t)}}),e.CRS.EPSG3857=e.extend({},e.CRS,{code:"EPSG:3857",projection:e.Projection.SphericalMercator,transformation:new e.Transformation(.5/Math.PI,.5,-.5/Math.PI,.5),project:function(t){var i=this.projection.project(t),s=6378137;return i.multiplyBy(s)}}),e.CRS.EPSG900913=e.extend({},e.CRS.EPSG3857,{code:"EPSG:900913"}),e.CRS.EPSG4326=e.extend({},e.CRS,{code:"EPSG:4326",projection:e.Projection.LonLat,transformation:new e.Transformation(1/360,.5,-1/360,.5)}),e.Map=e.Class.extend({includes:e.Mixin.Events,options:{crs:e.CRS.EPSG3857,fadeAnimation:e.DomUtil.TRANSITION&&!e.Browser.android23,trackResize:!0,markerZoomAnimation:e.DomUtil.TRANSITION&&e.Browser.any3d},initialize:function(t,i){i=e.setOptions(this,i),this._initContainer(t),this._initLayout(),this.callInitHooks(),this._initEvents(),i.maxBounds&&this.setMaxBounds(i.maxBounds),i.center&&i.zoom!==s&&this.setView(e.latLng(i.center),i.zoom,!0),this._initLayers(i.layers)},setView:function(t,i){return this._resetView(e.latLng(t),this._limitZoom(i)),this},setZoom:function(t){return this.setView(this.getCenter(),t)},zoomIn:function(t){return this.setZoom(this._zoom+(t||1))},zoomOut:function(t){return this.setZoom(this._zoom-(t||1))},fitBounds:function(t){var i=this.getBoundsZoom(t);return this.setView(e.latLngBounds(t).getCenter(),i)},fitWorld:function(){var t=new e.LatLng(-60,-170),i=new e.LatLng(85,179);return this.fitBounds(new e.LatLngBounds(t,i))},panTo:function(t){return this.setView(t,this._zoom)},panBy:function(t){return this.fire("movestart"),this._rawPanBy(e.point(t)),this.fire("move"),this.fire("moveend")},setMaxBounds:function(t){if(t=e.latLngBounds(t),this.options.maxBounds=t,!t)return this._boundsMinZoom=null,this;var i=this.getBoundsZoom(t,!0);return this._boundsMinZoom=i,this._loaded&&(i>this._zoom?this.setView(t.getCenter(),i):this.panInsideBounds(t)),this},panInsideBounds:function(t){t=e.latLngBounds(t);var i=this.getBounds(),s=this.project(i.getSouthWest()),o=this.project(i.getNorthEast()),n=this.project(t.getSouthWest()),a=this.project(t.getNorthEast()),r=0,h=0;return o.ya.x&&(r=a.x-o.x),s.y>n.y&&(h=n.y-s.y),s.x=r);return m&&i?null:i?r:r-1},getSize:function(){return(!this._size||this._sizeChanged)&&(this._size=new e.Point(this._container.clientWidth,this._container.clientHeight),this._sizeChanged=!1),this._size.clone()},getPixelBounds:function(){var t=this._getTopLeftPoint();return new e.Bounds(t,t.add(this.getSize()))},getPixelOrigin:function(){return this._initialTopLeftPoint},getPanes:function(){return this._panes},getContainer:function(){return this._container},getZoomScale:function(t){var i=this.options.crs;return i.scale(t)/i.scale(this._zoom)},getScaleZoom:function(t){return this._zoom+Math.log(t)/Math.LN2},project:function(t,i){return i=i===s?this._zoom:i,this.options.crs.latLngToPoint(e.latLng(t),i)},unproject:function(t,i){return i=i===s?this._zoom:i,this.options.crs.pointToLatLng(e.point(t),i)},layerPointToLatLng:function(t){var i=e.point(t).add(this._initialTopLeftPoint);return this.unproject(i)},latLngToLayerPoint:function(t){var i=this.project(e.latLng(t))._round();return i._subtract(this._initialTopLeftPoint)},containerPointToLayerPoint:function(t){return e.point(t).subtract(this._getMapPanePos())},layerPointToContainerPoint:function(t){return e.point(t).add(this._getMapPanePos())},containerPointToLatLng:function(t){var i=this.containerPointToLayerPoint(e.point(t));return this.layerPointToLatLng(i)},latLngToContainerPoint:function(t){return this.layerPointToContainerPoint(this.latLngToLayerPoint(e.latLng(t)))},mouseEventToContainerPoint:function(t){return e.DomEvent.getMousePosition(t,this._container)},mouseEventToLayerPoint:function(t){return this.containerPointToLayerPoint(this.mouseEventToContainerPoint(t))},mouseEventToLatLng:function(t){return this.layerPointToLatLng(this.mouseEventToLayerPoint(t))},_initContainer:function(t){var i=this._container=e.DomUtil.get(t);if(i._leaflet)throw Error("Map container is already initialized.");i._leaflet=!0},_initLayout:function(){var t=this._container;e.DomUtil.addClass(t,"leaflet-container"),e.Browser.touch&&e.DomUtil.addClass(t,"leaflet-touch"),this.options.fadeAnimation&&e.DomUtil.addClass(t,"leaflet-fade-anim");var i=e.DomUtil.getStyle(t,"position");"absolute"!==i&&"relative"!==i&&"fixed"!==i&&(t.style.position="relative"),this._initPanes(),this._initControlPos&&this._initControlPos()},_initPanes:function(){var t=this._panes={};this._mapPane=t.mapPane=this._createPane("leaflet-map-pane",this._container),this._tilePane=t.tilePane=this._createPane("leaflet-tile-pane",this._mapPane),t.objectsPane=this._createPane("leaflet-objects-pane",this._mapPane),t.shadowPane=this._createPane("leaflet-shadow-pane"),t.overlayPane=this._createPane("leaflet-overlay-pane"),t.markerPane=this._createPane("leaflet-marker-pane"),t.popupPane=this._createPane("leaflet-popup-pane");var i=" leaflet-zoom-hide";this.options.markerZoomAnimation||(e.DomUtil.addClass(t.markerPane,i),e.DomUtil.addClass(t.shadowPane,i),e.DomUtil.addClass(t.popupPane,i))},_createPane:function(t,i){return e.DomUtil.create("div",t,i||this._panes.objectsPane)},_initLayers:function(t){t=t?e.Util.isArray(t)?t:[t]:[],this._layers={},this._zoomBoundLayers={},this._tileLayersNum=0;var i,s;for(i=0,s=t.length;s>i;i++)this.addLayer(t[i])},_resetView:function(t,i,s,o){var n=this._zoom!==i;o||(this.fire("movestart"),n&&this.fire("zoomstart")),this._zoom=i,this._initialTopLeftPoint=this._getNewTopLeftPoint(t),s?this._initialTopLeftPoint._add(this._getMapPanePos()):e.DomUtil.setPosition(this._mapPane,new e.Point(0,0)),this._tileLayersToLoad=this._tileLayersNum;var a=!this._loaded;this._loaded=!0,this.fire("viewreset",{hard:!s}),this.fire("move"),(n||o)&&this.fire("zoomend"),this.fire("moveend",{hard:!s}),a&&this.fire("load")},_rawPanBy:function(t){e.DomUtil.setPosition(this._mapPane,this._getMapPanePos().subtract(t))},_updateZoomLevels:function(){var t,i=1/0,e=-1/0;for(t in this._zoomBoundLayers)if(this._zoomBoundLayers.hasOwnProperty(t)){var o=this._zoomBoundLayers[t];isNaN(o.options.minZoom)||(i=Math.min(i,o.options.minZoom)),isNaN(o.options.maxZoom)||(e=Math.max(e,o.options.maxZoom))}t===s?this._layersMaxZoom=this._layersMinZoom=s:(this._layersMaxZoom=e,this._layersMinZoom=i)},_initEvents:function(){if(e.DomEvent){e.DomEvent.on(this._container,"click",this._onMouseClick,this);var i,s,o=["dblclick","mousedown","mouseup","mouseenter","mouseleave","mousemove","contextmenu"];for(i=0,s=o.length;s>i;i++)e.DomEvent.on(this._container,o[i],this._fireMouseEvent,this);this.options.trackResize&&e.DomEvent.on(t,"resize",this._onResize,this)}},_onResize:function(){e.Util.cancelAnimFrame(this._resizeRequest),this._resizeRequest=e.Util.requestAnimFrame(this.invalidateSize,this,!1,this._container)},_onMouseClick:function(t){!this._loaded||this.dragging&&this.dragging.moved()||(this.fire("preclick"),this._fireMouseEvent(t))},_fireMouseEvent:function(t){if(this._loaded){var i=t.type;if(i="mouseenter"===i?"mouseover":"mouseleave"===i?"mouseout":i,this.hasEventListeners(i)){"contextmenu"===i&&e.DomEvent.preventDefault(t);var s=this.mouseEventToContainerPoint(t),o=this.containerPointToLayerPoint(s),n=this.layerPointToLatLng(o);this.fire(i,{latlng:n,layerPoint:o,containerPoint:s,originalEvent:t})}}},_onTileLayerLoad:function(){this._tileLayersToLoad--,this._tileLayersNum&&!this._tileLayersToLoad&&this._tileBg&&(clearTimeout(this._clearTileBgTimer),this._clearTileBgTimer=setTimeout(e.bind(this._clearTileBg,this),500))},whenReady:function(t,i){return this._loaded?t.call(i||this,this):this.on("load",t,i),this},_getMapPanePos:function(){return e.DomUtil.getPosition(this._mapPane)},_getTopLeftPoint:function(){if(!this._loaded)throw Error("Set map center and zoom first.");return this._initialTopLeftPoint.subtract(this._getMapPanePos())},_getNewTopLeftPoint:function(t,i){var s=this.getSize()._divideBy(2);return this.project(t,i)._subtract(s)._round()},_latLngToNewLayerPoint:function(t,i,s){var e=this._getNewTopLeftPoint(s,i).add(this._getMapPanePos());return this.project(t,i)._subtract(e)},_getCenterLayerPoint:function(){return this.containerPointToLayerPoint(this.getSize()._divideBy(2))},_getCenterOffset:function(t){return this.latLngToLayerPoint(t).subtract(this._getCenterLayerPoint())},_limitZoom:function(t){var i=this.getMinZoom(),s=this.getMaxZoom();return Math.max(i,Math.min(s,t))}}),e.map=function(t,i){return new e.Map(t,i)},e.Projection.Mercator={MAX_LATITUDE:85.0840591556,R_MINOR:6356752.3142,R_MAJOR:6378137,project:function(t){var i=e.LatLng.DEG_TO_RAD,s=this.MAX_LATITUDE,o=Math.max(Math.min(s,t.lat),-s),n=this.R_MAJOR,a=this.R_MINOR,r=t.lng*i*n,h=o*i,l=a/n,c=Math.sqrt(1-l*l),m=c*Math.sin(h);m=Math.pow((1-m)/(1+m),.5*c);var u=Math.tan(.5*(.5*Math.PI-h))/m;return h=-a*Math.log(u),new e.Point(r,h)},unproject:function(t){for(var i,s=e.LatLng.RAD_TO_DEG,o=this.R_MAJOR,n=this.R_MINOR,a=t.x*s/o,r=n/o,h=Math.sqrt(1-r*r),l=Math.exp(-t.y/n),c=Math.PI/2-2*Math.atan(l),m=15,u=1e-7,d=m,p=.1;Math.abs(p)>u&&--d>0;)i=h*Math.sin(c),p=Math.PI/2-2*Math.atan(l*Math.pow((1-i)/(1+i),.5*h))-c,c+=p;return new e.LatLng(c*s,a)}},e.CRS.EPSG3395=e.extend({},e.CRS,{code:"EPSG:3395",projection:e.Projection.Mercator,transformation:function(){var t=e.Projection.Mercator,i=t.R_MAJOR,s=t.R_MINOR;return new e.Transformation(.5/(Math.PI*i),.5,-.5/(Math.PI*s),.5)}()}),e.TileLayer=e.Class.extend({includes:e.Mixin.Events,options:{minZoom:0,maxZoom:18,tileSize:256,subdomains:"abc",errorTileUrl:"",attribution:"",zoomOffset:0,opacity:1,unloadInvisibleTiles:e.Browser.mobile,updateWhenIdle:e.Browser.mobile},initialize:function(t,i){i=e.setOptions(this,i),i.detectRetina&&e.Browser.retina&&i.maxZoom>0&&(i.tileSize=Math.floor(i.tileSize/2),i.zoomOffset++,i.minZoom>0&&i.minZoom--,this.options.maxZoom--),this._url=t;var s=this.options.subdomains;"string"==typeof s&&(this.options.subdomains=s.split(""))},onAdd:function(t){this._map=t,this._initContainer(),this._createTileProto(),t.on({viewreset:this._resetCallback,moveend:this._update},this),this.options.updateWhenIdle||(this._limitedUpdate=e.Util.limitExecByInterval(this._update,150,this),t.on("move",this._limitedUpdate,this)),this._reset(),this._update()},addTo:function(t){return t.addLayer(this),this},onRemove:function(t){this._container.parentNode.removeChild(this._container),t.off({viewreset:this._resetCallback,moveend:this._update},this),this.options.updateWhenIdle||t.off("move",this._limitedUpdate,this),this._container=null,this._map=null +},bringToFront:function(){var t=this._map._panes.tilePane;return this._container&&(t.appendChild(this._container),this._setAutoZIndex(t,Math.max)),this},bringToBack:function(){var t=this._map._panes.tilePane;return this._container&&(t.insertBefore(this._container,t.firstChild),this._setAutoZIndex(t,Math.min)),this},getAttribution:function(){return this.options.attribution},setOpacity:function(t){return this.options.opacity=t,this._map&&this._updateOpacity(),this},setZIndex:function(t){return this.options.zIndex=t,this._updateZIndex(),this},setUrl:function(t,i){return this._url=t,i||this.redraw(),this},redraw:function(){return this._map&&(this._map._panes.tilePane.empty=!1,this._reset(!0),this._update()),this},_updateZIndex:function(){this._container&&this.options.zIndex!==s&&(this._container.style.zIndex=this.options.zIndex)},_setAutoZIndex:function(t,i){var s,e,o,n=t.children,a=-i(1/0,-1/0);for(e=0,o=n.length;o>e;e++)n[e]!==this._container&&(s=parseInt(n[e].style.zIndex,10),isNaN(s)||(a=i(a,s)));this.options.zIndex=this._container.style.zIndex=(isFinite(a)?a:0)+i(1,-1)},_updateOpacity:function(){e.DomUtil.setOpacity(this._container,this.options.opacity);var t,i=this._tiles;if(e.Browser.webkit)for(t in i)i.hasOwnProperty(t)&&(i[t].style.webkitTransform+=" translate(0,0)")},_initContainer:function(){var t=this._map._panes.tilePane;(!this._container||t.empty)&&(this._container=e.DomUtil.create("div","leaflet-layer"),this._updateZIndex(),t.appendChild(this._container),1>this.options.opacity&&this._updateOpacity())},_resetCallback:function(t){this._reset(t.hard)},_reset:function(t){var i=this._tiles;for(var s in i)i.hasOwnProperty(s)&&this.fire("tileunload",{tile:i[s]});this._tiles={},this._tilesToLoad=0,this.options.reuseTiles&&(this._unusedTiles=[]),t&&this._container&&(this._container.innerHTML=""),this._initContainer()},_update:function(){if(this._map){var t=this._map.getPixelBounds(),i=this._map.getZoom(),s=this.options.tileSize;if(!(i>this.options.maxZoom||this.options.minZoom>i)){var o=new e.Point(Math.floor(t.min.x/s),Math.floor(t.min.y/s)),n=new e.Point(Math.floor(t.max.x/s),Math.floor(t.max.y/s)),a=new e.Bounds(o,n);this._addTilesFromCenterOut(a),(this.options.unloadInvisibleTiles||this.options.reuseTiles)&&this._removeOtherTiles(a)}}},_addTilesFromCenterOut:function(t){var s,o,n,a=[],r=t.getCenter();for(s=t.min.y;t.max.y>=s;s++)for(o=t.min.x;t.max.x>=o;o++)n=new e.Point(o,s),this._tileShouldBeLoaded(n)&&a.push(n);var h=a.length;if(0!==h){a.sort(function(t,i){return t.distanceTo(r)-i.distanceTo(r)});var l=i.createDocumentFragment();for(this._tilesToLoad||this.fire("loading"),this._tilesToLoad+=h,o=0;h>o;o++)this._addTile(a[o],l);this._container.appendChild(l)}},_tileShouldBeLoaded:function(t){if(t.x+":"+t.y in this._tiles)return!1;if(!this.options.continuousWorld){var i=this._getWrapTileNum();if(this.options.noWrap&&(0>t.x||t.x>=i)||0>t.y||t.y>=i)return!1}return!0},_removeOtherTiles:function(t){var i,s,e,o;for(o in this._tiles)this._tiles.hasOwnProperty(o)&&(i=o.split(":"),s=parseInt(i[0],10),e=parseInt(i[1],10),(t.min.x>s||s>t.max.x||t.min.y>e||e>t.max.y)&&this._removeTile(o))},_removeTile:function(t){var i=this._tiles[t];this.fire("tileunload",{tile:i,url:i.src}),this.options.reuseTiles?(e.DomUtil.removeClass(i,"leaflet-tile-loaded"),this._unusedTiles.push(i)):i.parentNode===this._container&&this._container.removeChild(i),e.Browser.android||(i.src=e.Util.emptyImageUrl),delete this._tiles[t]},_addTile:function(t,i){var s=this._getTilePos(t),o=this._getTile();e.DomUtil.setPosition(o,s,e.Browser.chrome||e.Browser.android23),this._tiles[t.x+":"+t.y]=o,this._loadTile(o,t),o.parentNode!==this._container&&i.appendChild(o)},_getZoomForUrl:function(){var t=this.options,i=this._map.getZoom();return t.zoomReverse&&(i=t.maxZoom-i),i+t.zoomOffset},_getTilePos:function(t){var i=this._map.getPixelOrigin(),s=this.options.tileSize;return t.multiplyBy(s).subtract(i)},getTileUrl:function(t){return this._adjustTilePoint(t),e.Util.template(this._url,e.extend({s:this._getSubdomain(t),z:this._getZoomForUrl(),x:t.x,y:t.y},this.options))},_getWrapTileNum:function(){return Math.pow(2,this._getZoomForUrl())},_adjustTilePoint:function(t){var i=this._getWrapTileNum();this.options.continuousWorld||this.options.noWrap||(t.x=(t.x%i+i)%i),this.options.tms&&(t.y=i-t.y-1)},_getSubdomain:function(t){var i=(t.x+t.y)%this.options.subdomains.length;return this.options.subdomains[i]},_createTileProto:function(){var t=this._tileImg=e.DomUtil.create("img","leaflet-tile");t.style.width=t.style.height=this.options.tileSize+"px",t.galleryimg="no"},_getTile:function(){if(this.options.reuseTiles&&this._unusedTiles.length>0){var t=this._unusedTiles.pop();return this._resetTile(t),t}return this._createTile()},_resetTile:function(){},_createTile:function(){var t=this._tileImg.cloneNode(!1);return t.onselectstart=t.onmousemove=e.Util.falseFn,t},_loadTile:function(t,i){t._layer=this,t.onload=this._tileOnLoad,t.onerror=this._tileOnError,t.src=this.getTileUrl(i)},_tileLoaded:function(){this._tilesToLoad--,this._tilesToLoad||this.fire("load")},_tileOnLoad:function(){var t=this._layer;this.src!==e.Util.emptyImageUrl&&(e.DomUtil.addClass(this,"leaflet-tile-loaded"),t.fire("tileload",{tile:this,url:this.src})),t._tileLoaded()},_tileOnError:function(){var t=this._layer;t.fire("tileerror",{tile:this,url:this.src});var i=t.options.errorTileUrl;i&&(this.src=i),t._tileLoaded()}}),e.tileLayer=function(t,i){return new e.TileLayer(t,i)},e.TileLayer.WMS=e.TileLayer.extend({defaultWmsParams:{service:"WMS",request:"GetMap",version:"1.1.1",layers:"",styles:"",format:"image/jpeg",transparent:!1},initialize:function(t,i){this._url=t;var s=e.extend({},this.defaultWmsParams);s.width=s.height=i.detectRetina&&e.Browser.retina?2*this.options.tileSize:this.options.tileSize;for(var o in i)this.options.hasOwnProperty(o)||(s[o]=i[o]);this.wmsParams=s,e.setOptions(this,i)},onAdd:function(t){var i=parseFloat(this.wmsParams.version)>=1.3?"crs":"srs";this.wmsParams[i]=t.options.crs.code,e.TileLayer.prototype.onAdd.call(this,t)},getTileUrl:function(t,i){this._adjustTilePoint(t);var s=this._map,o=s.options.crs,n=this.options.tileSize,a=t.multiplyBy(n),r=a.add(new e.Point(n,n)),h=o.project(s.unproject(a,i)),l=o.project(s.unproject(r,i)),c=[h.x,l.y,l.x,h.y].join(","),m=e.Util.template(this._url,{s:this._getSubdomain(t)});return m+e.Util.getParamString(this.wmsParams,m)+"&bbox="+c},setParams:function(t,i){return e.extend(this.wmsParams,t),i||this.redraw(),this}}),e.tileLayer.wms=function(t,i){return new e.TileLayer.WMS(t,i)},e.TileLayer.Canvas=e.TileLayer.extend({options:{async:!1},initialize:function(t){e.setOptions(this,t)},redraw:function(){var t=this._tiles;for(var i in t)t.hasOwnProperty(i)&&this._redrawTile(t[i])},_redrawTile:function(t){this.drawTile(t,t._tilePoint,this._map._zoom)},_createTileProto:function(){var t=this._canvasProto=e.DomUtil.create("canvas","leaflet-tile");t.width=t.height=this.options.tileSize},_createTile:function(){var t=this._canvasProto.cloneNode(!1);return t.onselectstart=t.onmousemove=e.Util.falseFn,t},_loadTile:function(t,i){t._layer=this,t._tilePoint=i,this._redrawTile(t),this.options.async||this.tileDrawn(t)},drawTile:function(){},tileDrawn:function(t){this._tileOnLoad.call(t)}}),e.tileLayer.canvas=function(t){return new e.TileLayer.Canvas(t)},e.ImageOverlay=e.Class.extend({includes:e.Mixin.Events,options:{opacity:1},initialize:function(t,i,s){this._url=t,this._bounds=e.latLngBounds(i),e.setOptions(this,s)},onAdd:function(t){this._map=t,this._image||this._initImage(),t._panes.overlayPane.appendChild(this._image),t.on("viewreset",this._reset,this),t.options.zoomAnimation&&e.Browser.any3d&&t.on("zoomanim",this._animateZoom,this),this._reset()},onRemove:function(t){t.getPanes().overlayPane.removeChild(this._image),t.off("viewreset",this._reset,this),t.options.zoomAnimation&&t.off("zoomanim",this._animateZoom,this)},addTo:function(t){return t.addLayer(this),this},setOpacity:function(t){return this.options.opacity=t,this._updateOpacity(),this},bringToFront:function(){return this._image&&this._map._panes.overlayPane.appendChild(this._image),this},bringToBack:function(){var t=this._map._panes.overlayPane;return this._image&&t.insertBefore(this._image,t.firstChild),this},_initImage:function(){this._image=e.DomUtil.create("img","leaflet-image-layer"),this._map.options.zoomAnimation&&e.Browser.any3d?e.DomUtil.addClass(this._image,"leaflet-zoom-animated"):e.DomUtil.addClass(this._image,"leaflet-zoom-hide"),this._updateOpacity(),e.extend(this._image,{galleryimg:"no",onselectstart:e.Util.falseFn,onmousemove:e.Util.falseFn,onload:e.bind(this._onImageLoad,this),src:this._url})},_animateZoom:function(t){var i=this._map,s=this._image,o=i.getZoomScale(t.zoom),n=this._bounds.getNorthWest(),a=this._bounds.getSouthEast(),r=i._latLngToNewLayerPoint(n,t.zoom,t.center),h=i._latLngToNewLayerPoint(a,t.zoom,t.center)._subtract(r),l=r._add(h._multiplyBy(.5*(1-1/o)));s.style[e.DomUtil.TRANSFORM]=e.DomUtil.getTranslateString(l)+" scale("+o+") "},_reset:function(){var t=this._image,i=this._map.latLngToLayerPoint(this._bounds.getNorthWest()),s=this._map.latLngToLayerPoint(this._bounds.getSouthEast())._subtract(i);e.DomUtil.setPosition(t,i),t.style.width=s.x+"px",t.style.height=s.y+"px"},_onImageLoad:function(){this.fire("load")},_updateOpacity:function(){e.DomUtil.setOpacity(this._image,this.options.opacity)}}),e.imageOverlay=function(t,i,s){return new e.ImageOverlay(t,i,s)},e.Icon=e.Class.extend({options:{className:""},initialize:function(t){e.setOptions(this,t)},createIcon:function(){return this._createIcon("icon")},createShadow:function(){return this._createIcon("shadow")},_createIcon:function(t){var i=this._getIconUrl(t);if(!i){if("icon"===t)throw Error("iconUrl not set in Icon options (see the docs).");return null}var s=this._createImg(i);return this._setIconStyles(s,t),s},_setIconStyles:function(t,i){var s,o=this.options,n=e.point(o[i+"Size"]);s="shadow"===i?e.point(o.shadowAnchor||o.iconAnchor):e.point(o.iconAnchor),!s&&n&&(s=n.divideBy(2,!0)),t.className="leaflet-marker-"+i+" "+o.className,s&&(t.style.marginLeft=-s.x+"px",t.style.marginTop=-s.y+"px"),n&&(t.style.width=n.x+"px",t.style.height=n.y+"px")},_createImg:function(t){var s;return e.Browser.ie6?(s=i.createElement("div"),s.style.filter='progid:DXImageTransform.Microsoft.AlphaImageLoader(src="'+t+'")'):(s=i.createElement("img"),s.src=t),s},_getIconUrl:function(t){return e.Browser.retina&&this.options[t+"RetinaUrl"]?this.options[t+"RetinaUrl"]:this.options[t+"Url"]}}),e.icon=function(t){return new e.Icon(t)},e.Icon.Default=e.Icon.extend({options:{iconSize:new e.Point(25,41),iconAnchor:new e.Point(12,41),popupAnchor:new e.Point(1,-34),shadowSize:new e.Point(41,41)},_getIconUrl:function(t){var i=t+"Url";if(this.options[i])return this.options[i];e.Browser.retina&&"icon"===t&&(t+="@2x");var s=e.Icon.Default.imagePath;if(!s)throw Error("Couldn't autodetect L.Icon.Default.imagePath, set it manually.");return "marker-"+t+".png"}}),e.Icon.Default.imagePath=function(){var t,s,e,o,n=i.getElementsByTagName("script"),a=/\/?leaflet[\-\._]?([\w\-\._]*)\.js\??/;for(t=0,s=n.length;s>t;t++)if(e=n[t].src,o=e.match(a))return e.split(a)[0]+""}(),e.Marker=e.Class.extend({includes:e.Mixin.Events,options:{icon:new e.Icon.Default,title:"",clickable:!0,draggable:!1,zIndexOffset:0,opacity:1,riseOnHover:!1,riseOffset:250},initialize:function(t,i){e.setOptions(this,i),this._latlng=e.latLng(t)},onAdd:function(t){this._map=t,t.on("viewreset",this.update,this),this._initIcon(),this.update(),t.options.zoomAnimation&&t.options.markerZoomAnimation&&t.on("zoomanim",this._animateZoom,this)},addTo:function(t){return t.addLayer(this),this},onRemove:function(t){this._removeIcon(),this.fire("remove"),t.off({viewreset:this.update,zoomanim:this._animateZoom},this),this._map=null},getLatLng:function(){return this._latlng},setLatLng:function(t){return this._latlng=e.latLng(t),this.update(),this.fire("move",{latlng:this._latlng})},setZIndexOffset:function(t){return this.options.zIndexOffset=t,this.update(),this},setIcon:function(t){return this._map&&this._removeIcon(),this.options.icon=t,this._map&&(this._initIcon(),this.update()),this},update:function(){if(this._icon){var t=this._map.latLngToLayerPoint(this._latlng).round();this._setPos(t)}return this},_initIcon:function(){var t=this.options,i=this._map,s=i.options.zoomAnimation&&i.options.markerZoomAnimation,o=s?"leaflet-zoom-animated":"leaflet-zoom-hide",n=!1;this._icon||(this._icon=t.icon.createIcon(),t.title&&(this._icon.title=t.title),this._initInteraction(),n=1>this.options.opacity,e.DomUtil.addClass(this._icon,o),t.riseOnHover&&e.DomEvent.on(this._icon,"mouseover",this._bringToFront,this).on(this._icon,"mouseout",this._resetZIndex,this)),this._shadow||(this._shadow=t.icon.createShadow(),this._shadow&&(e.DomUtil.addClass(this._shadow,o),n=1>this.options.opacity)),n&&this._updateOpacity();var a=this._map._panes;a.markerPane.appendChild(this._icon),this._shadow&&a.shadowPane.appendChild(this._shadow)},_removeIcon:function(){var t=this._map._panes;this.options.riseOnHover&&e.DomEvent.off(this._icon,"mouseover",this._bringToFront).off(this._icon,"mouseout",this._resetZIndex),t.markerPane.removeChild(this._icon),this._shadow&&t.shadowPane.removeChild(this._shadow),this._icon=this._shadow=null},_setPos:function(t){e.DomUtil.setPosition(this._icon,t),this._shadow&&e.DomUtil.setPosition(this._shadow,t),this._zIndex=t.y+this.options.zIndexOffset,this._resetZIndex()},_updateZIndex:function(t){this._icon.style.zIndex=this._zIndex+t},_animateZoom:function(t){var i=this._map._latLngToNewLayerPoint(this._latlng,t.zoom,t.center);this._setPos(i)},_initInteraction:function(){if(this.options.clickable){var t=this._icon,i=["dblclick","mousedown","mouseover","mouseout","contextmenu"];e.DomUtil.addClass(t,"leaflet-clickable"),e.DomEvent.on(t,"click",this._onMouseClick,this);for(var s=0;i.length>s;s++)e.DomEvent.on(t,i[s],this._fireMouseEvent,this);e.Handler.MarkerDrag&&(this.dragging=new e.Handler.MarkerDrag(this),this.options.draggable&&this.dragging.enable())}},_onMouseClick:function(t){var i=this.dragging&&this.dragging.moved();(this.hasEventListeners(t.type)||i)&&e.DomEvent.stopPropagation(t),i||(this.dragging&&this.dragging._enabled||!this._map.dragging||!this._map.dragging.moved())&&this.fire(t.type,{originalEvent:t})},_fireMouseEvent:function(t){this.fire(t.type,{originalEvent:t}),"contextmenu"===t.type&&this.hasEventListeners(t.type)&&e.DomEvent.preventDefault(t),"mousedown"!==t.type&&e.DomEvent.stopPropagation(t)},setOpacity:function(t){this.options.opacity=t,this._map&&this._updateOpacity()},_updateOpacity:function(){e.DomUtil.setOpacity(this._icon,this.options.opacity),this._shadow&&e.DomUtil.setOpacity(this._shadow,this.options.opacity)},_bringToFront:function(){this._updateZIndex(this.options.riseOffset)},_resetZIndex:function(){this._updateZIndex(0)}}),e.marker=function(t,i){return new e.Marker(t,i)},e.DivIcon=e.Icon.extend({options:{iconSize:new e.Point(12,12),className:"leaflet-div-icon"},createIcon:function(){var t=i.createElement("div"),s=this.options;return s.html&&(t.innerHTML=s.html),s.bgPos&&(t.style.backgroundPosition=-s.bgPos.x+"px "+-s.bgPos.y+"px"),this._setIconStyles(t,"icon"),t},createShadow:function(){return null}}),e.divIcon=function(t){return new e.DivIcon(t)},e.Map.mergeOptions({closePopupOnClick:!0}),e.Popup=e.Class.extend({includes:e.Mixin.Events,options:{minWidth:50,maxWidth:300,maxHeight:null,autoPan:!0,closeButton:!0,offset:new e.Point(0,6),autoPanPadding:new e.Point(5,5),className:"",zoomAnimation:!0},initialize:function(t,i){e.setOptions(this,t),this._source=i,this._animated=e.Browser.any3d&&this.options.zoomAnimation},onAdd:function(t){this._map=t,this._container||this._initLayout(),this._updateContent();var i=t.options.fadeAnimation;i&&e.DomUtil.setOpacity(this._container,0),t._panes.popupPane.appendChild(this._container),t.on("viewreset",this._updatePosition,this),this._animated&&t.on("zoomanim",this._zoomAnimation,this),t.options.closePopupOnClick&&t.on("preclick",this._close,this),this._update(),i&&e.DomUtil.setOpacity(this._container,1)},addTo:function(t){return t.addLayer(this),this},openOn:function(t){return t.openPopup(this),this},onRemove:function(t){t._panes.popupPane.removeChild(this._container),e.Util.falseFn(this._container.offsetWidth),t.off({viewreset:this._updatePosition,preclick:this._close,zoomanim:this._zoomAnimation},this),t.options.fadeAnimation&&e.DomUtil.setOpacity(this._container,0),this._map=null},setLatLng:function(t){return this._latlng=e.latLng(t),this._update(),this},setContent:function(t){return this._content=t,this._update(),this},_close:function(){var t=this._map;t&&(t._popup=null,t.removeLayer(this).fire("popupclose",{popup:this}))},_initLayout:function(){var t,i="leaflet-popup",s=i+" "+this.options.className+" leaflet-zoom-"+(this._animated?"animated":"hide"),o=this._container=e.DomUtil.create("div",s);this.options.closeButton&&(t=this._closeButton=e.DomUtil.create("a",i+"-close-button",o),t.href="#close",t.innerHTML="×",e.DomEvent.on(t,"click",this._onCloseButtonClick,this));var n=this._wrapper=e.DomUtil.create("div",i+"-content-wrapper",o);e.DomEvent.disableClickPropagation(n),this._contentNode=e.DomUtil.create("div",i+"-content",n),e.DomEvent.on(this._contentNode,"mousewheel",e.DomEvent.stopPropagation),this._tipContainer=e.DomUtil.create("div",i+"-tip-container",o),this._tip=e.DomUtil.create("div",i+"-tip",this._tipContainer)},_update:function(){this._map&&(this._container.style.visibility="hidden",this._updateContent(),this._updateLayout(),this._updatePosition(),this._container.style.visibility="",this._adjustPan())},_updateContent:function(){if(this._content){if("string"==typeof this._content)this._contentNode.innerHTML=this._content;else{for(;this._contentNode.hasChildNodes();)this._contentNode.removeChild(this._contentNode.firstChild);this._contentNode.appendChild(this._content)}this.fire("contentupdate")}},_updateLayout:function(){var t=this._contentNode,i=t.style;i.width="",i.whiteSpace="nowrap";var s=t.offsetWidth;s=Math.min(s,this.options.maxWidth),s=Math.max(s,this.options.minWidth),i.width=s+1+"px",i.whiteSpace="",i.height="";var o=t.offsetHeight,n=this.options.maxHeight,a="leaflet-popup-scrolled";n&&o>n?(i.height=n+"px",e.DomUtil.addClass(t,a)):e.DomUtil.removeClass(t,a),this._containerWidth=this._container.offsetWidth},_updatePosition:function(){if(this._map){var t=this._map.latLngToLayerPoint(this._latlng),i=this._animated,s=this.options.offset;i&&e.DomUtil.setPosition(this._container,t),this._containerBottom=-s.y-(i?0:t.y),this._containerLeft=-Math.round(this._containerWidth/2)+s.x+(i?0:t.x),this._container.style.bottom=this._containerBottom+"px",this._container.style.left=this._containerLeft+"px"}},_zoomAnimation:function(t){var i=this._map._latLngToNewLayerPoint(this._latlng,t.zoom,t.center);e.DomUtil.setPosition(this._container,i)},_adjustPan:function(){if(this.options.autoPan){var t=this._map,i=this._container.offsetHeight,s=this._containerWidth,o=new e.Point(this._containerLeft,-i-this._containerBottom);this._animated&&o._add(e.DomUtil.getPosition(this._container));var n=t.layerPointToContainerPoint(o),a=this.options.autoPanPadding,r=t.getSize(),h=0,l=0;0>n.x&&(h=n.x-a.x),n.x+s>r.x&&(h=n.x+s-r.x+a.x),0>n.y&&(l=n.y-a.y),n.y+i>r.y&&(l=n.y+i-r.y+a.y),(h||l)&&t.panBy(new e.Point(h,l))}},_onCloseButtonClick:function(t){this._close(),e.DomEvent.stop(t)}}),e.popup=function(t,i){return new e.Popup(t,i)},e.Marker.include({openPopup:function(){return this._popup&&this._map&&(this._popup.setLatLng(this._latlng),this._map.openPopup(this._popup)),this},closePopup:function(){return this._popup&&this._popup._close(),this},bindPopup:function(t,i){var s=e.point(this.options.icon.options.popupAnchor)||new e.Point(0,0);return s=s.add(e.Popup.prototype.options.offset),i&&i.offset&&(s=s.add(i.offset)),i=e.extend({offset:s},i),this._popup||this.on("click",this.openPopup,this).on("remove",this.closePopup,this).on("move",this._movePopup,this),this._popup=new e.Popup(i,this).setContent(t),this},unbindPopup:function(){return this._popup&&(this._popup=null,this.off("click",this.openPopup).off("remove",this.closePopup).off("move",this._movePopup)),this},_movePopup:function(t){this._popup.setLatLng(t.latlng)}}),e.Map.include({openPopup:function(t){return this.closePopup(),this._popup=t,this.addLayer(t).fire("popupopen",{popup:this._popup})},closePopup:function(){return this._popup&&this._popup._close(),this}}),e.LayerGroup=e.Class.extend({initialize:function(t){this._layers={};var i,s;if(t)for(i=0,s=t.length;s>i;i++)this.addLayer(t[i])},addLayer:function(t){var i=e.stamp(t);return this._layers[i]=t,this._map&&this._map.addLayer(t),this},removeLayer:function(t){var i=e.stamp(t);return delete this._layers[i],this._map&&this._map.removeLayer(t),this},clearLayers:function(){return this.eachLayer(this.removeLayer,this),this},invoke:function(t){var i,s,e=Array.prototype.slice.call(arguments,1);for(i in this._layers)this._layers.hasOwnProperty(i)&&(s=this._layers[i],s[t]&&s[t].apply(s,e));return this},onAdd:function(t){this._map=t,this.eachLayer(t.addLayer,t)},onRemove:function(t){this.eachLayer(t.removeLayer,t),this._map=null},addTo:function(t){return t.addLayer(this),this},eachLayer:function(t,i){for(var s in this._layers)this._layers.hasOwnProperty(s)&&t.call(i,this._layers[s])},setZIndex:function(t){return this.invoke("setZIndex",t)}}),e.layerGroup=function(t){return new e.LayerGroup(t)},e.FeatureGroup=e.LayerGroup.extend({includes:e.Mixin.Events,statics:{EVENTS:"click dblclick mouseover mouseout mousemove contextmenu"},addLayer:function(t){return this._layers[e.stamp(t)]?this:(t.on(e.FeatureGroup.EVENTS,this._propagateEvent,this),e.LayerGroup.prototype.addLayer.call(this,t),this._popupContent&&t.bindPopup&&t.bindPopup(this._popupContent,this._popupOptions),this.fire("layeradd",{layer:t}))},removeLayer:function(t){return t.off(e.FeatureGroup.EVENTS,this._propagateEvent,this),e.LayerGroup.prototype.removeLayer.call(this,t),this._popupContent&&this.invoke("unbindPopup"),this.fire("layerremove",{layer:t})},bindPopup:function(t,i){return this._popupContent=t,this._popupOptions=i,this.invoke("bindPopup",t,i)},setStyle:function(t){return this.invoke("setStyle",t)},bringToFront:function(){return this.invoke("bringToFront")},bringToBack:function(){return this.invoke("bringToBack")},getBounds:function(){var t=new e.LatLngBounds;return this.eachLayer(function(i){t.extend(i instanceof e.Marker?i.getLatLng():i.getBounds())}),t},_propagateEvent:function(t){t.layer=t.target,t.target=this,this.fire(t.type,t)}}),e.featureGroup=function(t){return new e.FeatureGroup(t)},e.Path=e.Class.extend({includes:[e.Mixin.Events],statics:{CLIP_PADDING:e.Browser.mobile?Math.max(0,Math.min(.5,(1280/Math.max(t.innerWidth,t.innerHeight)-1)/2)):.5},options:{stroke:!0,color:"#0033ff",dashArray:null,weight:5,opacity:.5,fill:!1,fillColor:null,fillOpacity:.2,clickable:!0},initialize:function(t){e.setOptions(this,t)},onAdd:function(t){this._map=t,this._container||(this._initElements(),this._initEvents()),this.projectLatlngs(),this._updatePath(),this._container&&this._map._pathRoot.appendChild(this._container),this.fire("add"),t.on({viewreset:this.projectLatlngs,moveend:this._updatePath},this)},addTo:function(t){return t.addLayer(this),this},onRemove:function(t){t._pathRoot.removeChild(this._container),this.fire("remove"),this._map=null,e.Browser.vml&&(this._container=null,this._stroke=null,this._fill=null),t.off({viewreset:this.projectLatlngs,moveend:this._updatePath},this)},projectLatlngs:function(){},setStyle:function(t){return e.setOptions(this,t),this._container&&this._updateStyle(),this},redraw:function(){return this._map&&(this.projectLatlngs(),this._updatePath()),this}}),e.Map.include({_updatePathViewport:function(){var t=e.Path.CLIP_PADDING,i=this.getSize(),s=e.DomUtil.getPosition(this._mapPane),o=s.multiplyBy(-1)._subtract(i.multiplyBy(t)._round()),n=o.add(i.multiplyBy(1+2*t)._round());this._pathViewport=new e.Bounds(o,n)}}),e.Path.SVG_NS="http://www.w3.org/2000/svg",e.Browser.svg=!(!i.createElementNS||!i.createElementNS(e.Path.SVG_NS,"svg").createSVGRect),e.Path=e.Path.extend({statics:{SVG:e.Browser.svg},bringToFront:function(){var t=this._map._pathRoot,i=this._container;return i&&t.lastChild!==i&&t.appendChild(i),this},bringToBack:function(){var t=this._map._pathRoot,i=this._container,s=t.firstChild;return i&&s!==i&&t.insertBefore(i,s),this},getPathString:function(){},_createElement:function(t){return i.createElementNS(e.Path.SVG_NS,t)},_initElements:function(){this._map._initPathRoot(),this._initPath(),this._initStyle()},_initPath:function(){this._container=this._createElement("g"),this._path=this._createElement("path"),this._container.appendChild(this._path)},_initStyle:function(){this.options.stroke&&(this._path.setAttribute("stroke-linejoin","round"),this._path.setAttribute("stroke-linecap","round")),this.options.fill&&this._path.setAttribute("fill-rule","evenodd"),this._updateStyle()},_updateStyle:function(){this.options.stroke?(this._path.setAttribute("stroke",this.options.color),this._path.setAttribute("stroke-opacity",this.options.opacity),this._path.setAttribute("stroke-width",this.options.weight),this.options.dashArray?this._path.setAttribute("stroke-dasharray",this.options.dashArray):this._path.removeAttribute("stroke-dasharray")):this._path.setAttribute("stroke","none"),this.options.fill?(this._path.setAttribute("fill",this.options.fillColor||this.options.color),this._path.setAttribute("fill-opacity",this.options.fillOpacity)):this._path.setAttribute("fill","none")},_updatePath:function(){var t=this.getPathString();t||(t="M0 0"),this._path.setAttribute("d",t)},_initEvents:function(){if(this.options.clickable){(e.Browser.svg||!e.Browser.vml)&&this._path.setAttribute("class","leaflet-clickable"),e.DomEvent.on(this._container,"click",this._onMouseClick,this);for(var t=["dblclick","mousedown","mouseover","mouseout","mousemove","contextmenu"],i=0;t.length>i;i++)e.DomEvent.on(this._container,t[i],this._fireMouseEvent,this)}},_onMouseClick:function(t){this._map.dragging&&this._map.dragging.moved()||this._fireMouseEvent(t)},_fireMouseEvent:function(t){if(this.hasEventListeners(t.type)){var i=this._map,s=i.mouseEventToContainerPoint(t),o=i.containerPointToLayerPoint(s),n=i.layerPointToLatLng(o);this.fire(t.type,{latlng:n,layerPoint:o,containerPoint:s,originalEvent:t}),"contextmenu"===t.type&&e.DomEvent.preventDefault(t),"mousemove"!==t.type&&e.DomEvent.stopPropagation(t)}}}),e.Map.include({_initPathRoot:function(){this._pathRoot||(this._pathRoot=e.Path.prototype._createElement("svg"),this._panes.overlayPane.appendChild(this._pathRoot),this.options.zoomAnimation&&e.Browser.any3d?(this._pathRoot.setAttribute("class"," leaflet-zoom-animated"),this.on({zoomanim:this._animatePathZoom,zoomend:this._endPathZoom})):this._pathRoot.setAttribute("class"," leaflet-zoom-hide"),this.on("moveend",this._updateSvgViewport),this._updateSvgViewport())},_animatePathZoom:function(t){var i=this.getZoomScale(t.zoom),s=this._getCenterOffset(t.center)._multiplyBy(-i)._add(this._pathViewport.min);this._pathRoot.style[e.DomUtil.TRANSFORM]=e.DomUtil.getTranslateString(s)+" scale("+i+") ",this._pathZooming=!0},_endPathZoom:function(){this._pathZooming=!1},_updateSvgViewport:function(){if(!this._pathZooming){this._updatePathViewport();var t=this._pathViewport,i=t.min,s=t.max,o=s.x-i.x,n=s.y-i.y,a=this._pathRoot,r=this._panes.overlayPane;e.Browser.mobileWebkit&&r.removeChild(a),e.DomUtil.setPosition(a,i),a.setAttribute("width",o),a.setAttribute("height",n),a.setAttribute("viewBox",[i.x,i.y,o,n].join(" ")),e.Browser.mobileWebkit&&r.appendChild(a)}}}),e.Path.include({bindPopup:function(t,i){return(!this._popup||i)&&(this._popup=new e.Popup(i,this)),this._popup.setContent(t),this._popupHandlersAdded||(this.on("click",this._openPopup,this).on("remove",this.closePopup,this),this._popupHandlersAdded=!0),this},unbindPopup:function(){return this._popup&&(this._popup=null,this.off("click",this._openPopup).off("remove",this.closePopup),this._popupHandlersAdded=!1),this},openPopup:function(t){return this._popup&&(t=t||this._latlng||this._latlngs[Math.floor(this._latlngs.length/2)],this._openPopup({latlng:t})),this},closePopup:function(){return this._popup&&this._popup._close(),this},_openPopup:function(t){this._popup.setLatLng(t.latlng),this._map.openPopup(this._popup)}}),e.Browser.vml=!e.Browser.svg&&function(){try{var t=i.createElement("div");t.innerHTML='';var s=t.firstChild;return s.style.behavior="url(#default#VML)",s&&"object"==typeof s.adj}catch(e){return!1}}(),e.Path=e.Browser.svg||!e.Browser.vml?e.Path:e.Path.extend({statics:{VML:!0,CLIP_PADDING:.02},_createElement:function(){try{return i.namespaces.add("lvml","urn:schemas-microsoft-com:vml"),function(t){return i.createElement("')}}catch(t){return function(t){return i.createElement("<"+t+' xmlns="urn:schemas-microsoft.com:vml" class="lvml">')}}}(),_initPath:function(){var t=this._container=this._createElement("shape");e.DomUtil.addClass(t,"leaflet-vml-shape"),this.options.clickable&&e.DomUtil.addClass(t,"leaflet-clickable"),t.coordsize="1 1",this._path=this._createElement("path"),t.appendChild(this._path),this._map._pathRoot.appendChild(t)},_initStyle:function(){this._updateStyle()},_updateStyle:function(){var t=this._stroke,i=this._fill,s=this.options,e=this._container;e.stroked=s.stroke,e.filled=s.fill,s.stroke?(t||(t=this._stroke=this._createElement("stroke"),t.endcap="round",e.appendChild(t)),t.weight=s.weight+"px",t.color=s.color,t.opacity=s.opacity,t.dashStyle=s.dashArray?s.dashArray instanceof Array?s.dashArray.join(" "):s.dashArray.replace(/ *, */g," "):""):t&&(e.removeChild(t),this._stroke=null),s.fill?(i||(i=this._fill=this._createElement("fill"),e.appendChild(i)),i.color=s.fillColor||s.color,i.opacity=s.fillOpacity):i&&(e.removeChild(i),this._fill=null)},_updatePath:function(){var t=this._container.style;t.display="none",this._path.v=this.getPathString()+" ",t.display=""}}),e.Map.include(e.Browser.svg||!e.Browser.vml?{}:{_initPathRoot:function(){if(!this._pathRoot){var t=this._pathRoot=i.createElement("div");t.className="leaflet-vml-container",this._panes.overlayPane.appendChild(t),this.on("moveend",this._updatePathViewport),this._updatePathViewport()}}}),e.Browser.canvas=function(){return!!i.createElement("canvas").getContext}(),e.Path=e.Path.SVG&&!t.L_PREFER_CANVAS||!e.Browser.canvas?e.Path:e.Path.extend({statics:{CANVAS:!0,SVG:!1},redraw:function(){return this._map&&(this.projectLatlngs(),this._requestUpdate()),this},setStyle:function(t){return e.setOptions(this,t),this._map&&(this._updateStyle(),this._requestUpdate()),this},onRemove:function(t){t.off("viewreset",this.projectLatlngs,this).off("moveend",this._updatePath,this),this.options.clickable&&this._map.off("click",this._onClick,this),this._requestUpdate(),this._map=null},_requestUpdate:function(){this._map&&!e.Path._updateRequest&&(e.Path._updateRequest=e.Util.requestAnimFrame(this._fireMapMoveEnd,this._map))},_fireMapMoveEnd:function(){e.Path._updateRequest=null,this.fire("moveend")},_initElements:function(){this._map._initPathRoot(),this._ctx=this._map._canvasCtx},_updateStyle:function(){var t=this.options;t.stroke&&(this._ctx.lineWidth=t.weight,this._ctx.strokeStyle=t.color),t.fill&&(this._ctx.fillStyle=t.fillColor||t.color)},_drawPath:function(){var t,i,s,o,n,a;for(this._ctx.beginPath(),t=0,s=this._parts.length;s>t;t++){for(i=0,o=this._parts[t].length;o>i;i++)n=this._parts[t][i],a=(0===i?"move":"line")+"To",this._ctx[a](n.x,n.y);this instanceof e.Polygon&&this._ctx.closePath()}},_checkIfEmpty:function(){return!this._parts.length},_updatePath:function(){if(!this._checkIfEmpty()){var t=this._ctx,i=this.options;this._drawPath(),t.save(),this._updateStyle(),i.fill&&(t.globalAlpha=i.fillOpacity,t.fill()),i.stroke&&(t.globalAlpha=i.opacity,t.stroke()),t.restore() +}},_initEvents:function(){this.options.clickable&&this._map.on("click",this._onClick,this)},_onClick:function(t){this._containsPoint(t.layerPoint)&&this.fire("click",{latlng:t.latlng,layerPoint:t.layerPoint,containerPoint:t.containerPoint,originalEvent:t})}}),e.Map.include(e.Path.SVG&&!t.L_PREFER_CANVAS||!e.Browser.canvas?{}:{_initPathRoot:function(){var t,s=this._pathRoot;s||(s=this._pathRoot=i.createElement("canvas"),s.style.position="absolute",t=this._canvasCtx=s.getContext("2d"),t.lineCap="round",t.lineJoin="round",this._panes.overlayPane.appendChild(s),this.options.zoomAnimation&&(this._pathRoot.className="leaflet-zoom-animated",this.on("zoomanim",this._animatePathZoom),this.on("zoomend",this._endPathZoom)),this.on("moveend",this._updateCanvasViewport),this._updateCanvasViewport())},_updateCanvasViewport:function(){if(!this._pathZooming){this._updatePathViewport();var t=this._pathViewport,i=t.min,s=t.max.subtract(i),o=this._pathRoot;e.DomUtil.setPosition(o,i),o.width=s.x,o.height=s.y,o.getContext("2d").translate(-i.x,-i.y)}}}),e.LineUtil={simplify:function(t,i){if(!i||!t.length)return t.slice();var s=i*i;return t=this._reducePoints(t,s),t=this._simplifyDP(t,s)},pointToSegmentDistance:function(t,i,s){return Math.sqrt(this._sqClosestPointOnSegment(t,i,s,!0))},closestPointOnSegment:function(t,i,s){return this._sqClosestPointOnSegment(t,i,s)},_simplifyDP:function(t,i){var e=t.length,o=typeof Uint8Array!=s+""?Uint8Array:Array,n=new o(e);n[0]=n[e-1]=1,this._simplifyDPStep(t,n,i,0,e-1);var a,r=[];for(a=0;e>a;a++)n[a]&&r.push(t[a]);return r},_simplifyDPStep:function(t,i,s,e,o){var n,a,r,h=0;for(a=e+1;o-1>=a;a++)r=this._sqClosestPointOnSegment(t[a],t[e],t[o],!0),r>h&&(n=a,h=r);h>s&&(i[n]=1,this._simplifyDPStep(t,i,s,e,n),this._simplifyDPStep(t,i,s,n,o))},_reducePoints:function(t,i){for(var s=[t[0]],e=1,o=0,n=t.length;n>e;e++)this._sqDist(t[e],t[o])>i&&(s.push(t[e]),o=e);return n-1>o&&s.push(t[n-1]),s},clipSegment:function(t,i,s,e){var o,n,a,r=e?this._lastCode:this._getBitCode(t,s),h=this._getBitCode(i,s);for(this._lastCode=h;;){if(!(r|h))return[t,i];if(r&h)return!1;o=r||h,n=this._getEdgeIntersection(t,i,o,s),a=this._getBitCode(n,s),o===r?(t=n,r=a):(i=n,h=a)}},_getEdgeIntersection:function(t,i,o,n){var a=i.x-t.x,r=i.y-t.y,h=n.min,l=n.max;return 8&o?new e.Point(t.x+a*(l.y-t.y)/r,l.y):4&o?new e.Point(t.x+a*(h.y-t.y)/r,h.y):2&o?new e.Point(l.x,t.y+r*(l.x-t.x)/a):1&o?new e.Point(h.x,t.y+r*(h.x-t.x)/a):s},_getBitCode:function(t,i){var s=0;return t.xi.max.x&&(s|=2),t.yi.max.y&&(s|=8),s},_sqDist:function(t,i){var s=i.x-t.x,e=i.y-t.y;return s*s+e*e},_sqClosestPointOnSegment:function(t,i,s,o){var n,a=i.x,r=i.y,h=s.x-a,l=s.y-r,c=h*h+l*l;return c>0&&(n=((t.x-a)*h+(t.y-r)*l)/c,n>1?(a=s.x,r=s.y):n>0&&(a+=h*n,r+=l*n)),h=t.x-a,l=t.y-r,o?h*h+l*l:new e.Point(a,r)}},e.Polyline=e.Path.extend({initialize:function(t,i){e.Path.prototype.initialize.call(this,i),this._latlngs=this._convertLatLngs(t)},options:{smoothFactor:1,noClip:!1},projectLatlngs:function(){this._originalPoints=[];for(var t=0,i=this._latlngs.length;i>t;t++)this._originalPoints[t]=this._map.latLngToLayerPoint(this._latlngs[t])},getPathString:function(){for(var t=0,i=this._parts.length,s="";i>t;t++)s+=this._getPathPartStr(this._parts[t]);return s},getLatLngs:function(){return this._latlngs},setLatLngs:function(t){return this._latlngs=this._convertLatLngs(t),this.redraw()},addLatLng:function(t){return this._latlngs.push(e.latLng(t)),this.redraw()},spliceLatLngs:function(){var t=[].splice.apply(this._latlngs,arguments);return this._convertLatLngs(this._latlngs),this.redraw(),t},closestLayerPoint:function(t){for(var i,s,o=1/0,n=this._parts,a=null,r=0,h=n.length;h>r;r++)for(var l=n[r],c=1,m=l.length;m>c;c++){i=l[c-1],s=l[c];var u=e.LineUtil._sqClosestPointOnSegment(t,i,s,!0);o>u&&(o=u,a=e.LineUtil._sqClosestPointOnSegment(t,i,s))}return a&&(a.distance=Math.sqrt(o)),a},getBounds:function(){var t,i,s=new e.LatLngBounds,o=this.getLatLngs();for(t=0,i=o.length;i>t;t++)s.extend(o[t]);return s},_convertLatLngs:function(t){var i,s;for(i=0,s=t.length;s>i;i++){if(e.Util.isArray(t[i])&&"number"!=typeof t[i][0])return;t[i]=e.latLng(t[i])}return t},_initEvents:function(){e.Path.prototype._initEvents.call(this)},_getPathPartStr:function(t){for(var i,s=e.Path.VML,o=0,n=t.length,a="";n>o;o++)i=t[o],s&&i._round(),a+=(o?"L":"M")+i.x+" "+i.y;return a},_clipPoints:function(){var t,i,o,n=this._originalPoints,a=n.length;if(this.options.noClip)return this._parts=[n],s;this._parts=[];var r=this._parts,h=this._map._pathViewport,l=e.LineUtil;for(t=0,i=0;a-1>t;t++)o=l.clipSegment(n[t],n[t+1],h,t),o&&(r[i]=r[i]||[],r[i].push(o[0]),(o[1]!==n[t+1]||t===a-2)&&(r[i].push(o[1]),i++))},_simplifyPoints:function(){for(var t=this._parts,i=e.LineUtil,s=0,o=t.length;o>s;s++)t[s]=i.simplify(t[s],this.options.smoothFactor)},_updatePath:function(){this._map&&(this._clipPoints(),this._simplifyPoints(),e.Path.prototype._updatePath.call(this))}}),e.polyline=function(t,i){return new e.Polyline(t,i)},e.PolyUtil={},e.PolyUtil.clipPolygon=function(t,i){var s,o,n,a,r,h,l,c,m,u=[1,4,2,8],d=e.LineUtil;for(o=0,l=t.length;l>o;o++)t[o]._code=d._getBitCode(t[o],i);for(a=0;4>a;a++){for(c=u[a],s=[],o=0,l=t.length,n=l-1;l>o;n=o++)r=t[o],h=t[n],r._code&c?h._code&c||(m=d._getEdgeIntersection(h,r,c,i),m._code=d._getBitCode(m,i),s.push(m)):(h._code&c&&(m=d._getEdgeIntersection(h,r,c,i),m._code=d._getBitCode(m,i),s.push(m)),s.push(r));t=s}return t},e.Polygon=e.Polyline.extend({options:{fill:!0},initialize:function(t,i){e.Polyline.prototype.initialize.call(this,t,i),t&&e.Util.isArray(t[0])&&"number"!=typeof t[0][0]&&(this._latlngs=this._convertLatLngs(t[0]),this._holes=t.slice(1))},projectLatlngs:function(){if(e.Polyline.prototype.projectLatlngs.call(this),this._holePoints=[],this._holes){var t,i,s,o;for(t=0,s=this._holes.length;s>t;t++)for(this._holePoints[t]=[],i=0,o=this._holes[t].length;o>i;i++)this._holePoints[t][i]=this._map.latLngToLayerPoint(this._holes[t][i])}},_clipPoints:function(){var t=this._originalPoints,i=[];if(this._parts=[t].concat(this._holePoints),!this.options.noClip){for(var s=0,o=this._parts.length;o>s;s++){var n=e.PolyUtil.clipPolygon(this._parts[s],this._map._pathViewport);n.length&&i.push(n)}this._parts=i}},_getPathPartStr:function(t){var i=e.Polyline.prototype._getPathPartStr.call(this,t);return i+(e.Browser.svg?"z":"x")}}),e.polygon=function(t,i){return new e.Polygon(t,i)},function(){function t(t){return e.FeatureGroup.extend({initialize:function(t,i){this._layers={},this._options=i,this.setLatLngs(t)},setLatLngs:function(i){var s=0,e=i.length;for(this.eachLayer(function(t){e>s?t.setLatLngs(i[s++]):this.removeLayer(t)},this);e>s;)this.addLayer(new t(i[s++],this._options));return this}})}e.MultiPolyline=t(e.Polyline),e.MultiPolygon=t(e.Polygon),e.multiPolyline=function(t,i){return new e.MultiPolyline(t,i)},e.multiPolygon=function(t,i){return new e.MultiPolygon(t,i)}}(),e.Rectangle=e.Polygon.extend({initialize:function(t,i){e.Polygon.prototype.initialize.call(this,this._boundsToLatLngs(t),i)},setBounds:function(t){this.setLatLngs(this._boundsToLatLngs(t))},_boundsToLatLngs:function(t){return t=e.latLngBounds(t),[t.getSouthWest(),t.getNorthWest(),t.getNorthEast(),t.getSouthEast()]}}),e.rectangle=function(t,i){return new e.Rectangle(t,i)},e.Circle=e.Path.extend({initialize:function(t,i,s){e.Path.prototype.initialize.call(this,s),this._latlng=e.latLng(t),this._mRadius=i},options:{fill:!0},setLatLng:function(t){return this._latlng=e.latLng(t),this.redraw()},setRadius:function(t){return this._mRadius=t,this.redraw()},projectLatlngs:function(){var t=this._getLngRadius(),i=new e.LatLng(this._latlng.lat,this._latlng.lng-t),s=this._map.latLngToLayerPoint(i);this._point=this._map.latLngToLayerPoint(this._latlng),this._radius=Math.max(Math.round(this._point.x-s.x),1)},getBounds:function(){var t=this._getLngRadius(),i=360*(this._mRadius/40075017),s=this._latlng,o=new e.LatLng(s.lat-i,s.lng-t),n=new e.LatLng(s.lat+i,s.lng+t);return new e.LatLngBounds(o,n)},getLatLng:function(){return this._latlng},getPathString:function(){var t=this._point,i=this._radius;return this._checkIfEmpty()?"":e.Browser.svg?"M"+t.x+","+(t.y-i)+"A"+i+","+i+",0,1,1,"+(t.x-.1)+","+(t.y-i)+" z":(t._round(),i=Math.round(i),"AL "+t.x+","+t.y+" "+i+","+i+" 0,"+23592600)},getRadius:function(){return this._mRadius},_getLatRadius:function(){return 360*(this._mRadius/40075017)},_getLngRadius:function(){return this._getLatRadius()/Math.cos(e.LatLng.DEG_TO_RAD*this._latlng.lat)},_checkIfEmpty:function(){if(!this._map)return!1;var t=this._map._pathViewport,i=this._radius,s=this._point;return s.x-i>t.max.x||s.y-i>t.max.y||s.x+is;s++)for(l=this._parts[s],o=0,r=l.length,n=r-1;r>o;n=o++)if((i||0!==o)&&(h=e.LineUtil.pointToSegmentDistance(t,l[n],l[o]),c>=h))return!0;return!1}}:{}),e.Polygon.include(e.Path.CANVAS?{_containsPoint:function(t){var i,s,o,n,a,r,h,l,c=!1;if(e.Polyline.prototype._containsPoint.call(this,t,!0))return!0;for(n=0,h=this._parts.length;h>n;n++)for(i=this._parts[n],a=0,l=i.length,r=l-1;l>a;r=a++)s=i[a],o=i[r],s.y>t.y!=o.y>t.y&&t.x<(o.x-s.x)*(t.y-s.y)/(o.y-s.y)+s.x&&(c=!c);return c}}:{}),e.Circle.include(e.Path.CANVAS?{_drawPath:function(){var t=this._point;this._ctx.beginPath(),this._ctx.arc(t.x,t.y,this._radius,0,2*Math.PI,!1)},_containsPoint:function(t){var i=this._point,s=this.options.stroke?this.options.weight/2:0;return t.distanceTo(i)<=this._radius+s}}:{}),e.GeoJSON=e.FeatureGroup.extend({initialize:function(t,i){e.setOptions(this,i),this._layers={},t&&this.addData(t)},addData:function(t){var i,s,o=e.Util.isArray(t)?t:t.features;if(o){for(i=0,s=o.length;s>i;i++)(o[i].geometries||o[i].geometry||o[i].features)&&this.addData(o[i]);return this}var n=this.options;if(!n.filter||n.filter(t)){var a=e.GeoJSON.geometryToLayer(t,n.pointToLayer);return a.feature=t,a.defaultOptions=a.options,this.resetStyle(a),n.onEachFeature&&n.onEachFeature(t,a),this.addLayer(a)}},resetStyle:function(t){var i=this.options.style;i&&(e.Util.extend(t.options,t.defaultOptions),this._setLayerStyle(t,i))},setStyle:function(t){this.eachLayer(function(i){this._setLayerStyle(i,t)},this)},_setLayerStyle:function(t,i){"function"==typeof i&&(i=i(t.feature)),t.setStyle&&t.setStyle(i)}}),e.extend(e.GeoJSON,{geometryToLayer:function(t,i){var s,o,n,a,r,h="Feature"===t.type?t.geometry:t,l=h.coordinates,c=[];switch(h.type){case"Point":return s=this.coordsToLatLng(l),i?i(t,s):new e.Marker(s);case"MultiPoint":for(n=0,a=l.length;a>n;n++)s=this.coordsToLatLng(l[n]),r=i?i(t,s):new e.Marker(s),c.push(r);return new e.FeatureGroup(c);case"LineString":return o=this.coordsToLatLngs(l),new e.Polyline(o);case"Polygon":return o=this.coordsToLatLngs(l,1),new e.Polygon(o);case"MultiLineString":return o=this.coordsToLatLngs(l,1),new e.MultiPolyline(o);case"MultiPolygon":return o=this.coordsToLatLngs(l,2),new e.MultiPolygon(o);case"GeometryCollection":for(n=0,a=h.geometries.length;a>n;n++)r=this.geometryToLayer({geometry:h.geometries[n],type:"Feature",properties:t.properties},i),c.push(r);return new e.FeatureGroup(c);default:throw Error("Invalid GeoJSON object.")}},coordsToLatLng:function(t,i){var s=parseFloat(t[i?0:1]),o=parseFloat(t[i?1:0]);return new e.LatLng(s,o)},coordsToLatLngs:function(t,i,s){var e,o,n,a=[];for(o=0,n=t.length;n>o;o++)e=i?this.coordsToLatLngs(t[o],i-1,s):this.coordsToLatLng(t[o],s),a.push(e);return a}}),e.geoJson=function(t,i){return new e.GeoJSON(t,i)},e.DomEvent={addListener:function(t,i,o,n){var a,r,h,l=e.stamp(o),c="_leaflet_"+i+l;return t[c]?this:(a=function(i){return o.call(n||t,i||e.DomEvent._getEvent())},e.Browser.msTouch&&0===i.indexOf("touch")?this.addMsTouchListener(t,i,a,l):(e.Browser.touch&&"dblclick"===i&&this.addDoubleTapListener&&this.addDoubleTapListener(t,a,l),"addEventListener"in t?"mousewheel"===i?(t.addEventListener("DOMMouseScroll",a,!1),t.addEventListener(i,a,!1)):"mouseenter"===i||"mouseleave"===i?(r=a,h="mouseenter"===i?"mouseover":"mouseout",a=function(i){return e.DomEvent._checkMouse(t,i)?r(i):s},t.addEventListener(h,a,!1)):t.addEventListener(i,a,!1):"attachEvent"in t&&t.attachEvent("on"+i,a),t[c]=a,this))},removeListener:function(t,i,s){var o=e.stamp(s),n="_leaflet_"+i+o,a=t[n];if(a)return e.Browser.msTouch&&0===i.indexOf("touch")?this.removeMsTouchListener(t,i,o):e.Browser.touch&&"dblclick"===i&&this.removeDoubleTapListener?this.removeDoubleTapListener(t,o):"removeEventListener"in t?"mousewheel"===i?(t.removeEventListener("DOMMouseScroll",a,!1),t.removeEventListener(i,a,!1)):"mouseenter"===i||"mouseleave"===i?t.removeEventListener("mouseenter"===i?"mouseover":"mouseout",a,!1):t.removeEventListener(i,a,!1):"detachEvent"in t&&t.detachEvent("on"+i,a),t[n]=null,this},stopPropagation:function(t){return t.stopPropagation?t.stopPropagation():t.cancelBubble=!0,this},disableClickPropagation:function(t){for(var i=e.DomEvent.stopPropagation,s=e.Draggable.START.length-1;s>=0;s--)e.DomEvent.addListener(t,e.Draggable.START[s],i);return e.DomEvent.addListener(t,"click",i).addListener(t,"dblclick",i)},preventDefault:function(t){return t.preventDefault?t.preventDefault():t.returnValue=!1,this},stop:function(t){return e.DomEvent.preventDefault(t).stopPropagation(t)},getMousePosition:function(t,s){var o=i.body,n=i.documentElement,a=t.pageX?t.pageX:t.clientX+o.scrollLeft+n.scrollLeft,r=t.pageY?t.pageY:t.clientY+o.scrollTop+n.scrollTop,h=new e.Point(a,r);return s?h._subtract(e.DomUtil.getViewportOffset(s)):h},getWheelDelta:function(t){var i=0;return t.wheelDelta&&(i=t.wheelDelta/120),t.detail&&(i=-t.detail/3),i},_checkMouse:function(t,i){var s=i.relatedTarget;if(!s)return!0;try{for(;s&&s!==t;)s=s.parentNode}catch(e){return!1}return s!==t},_getEvent:function(){var i=t.event;if(!i)for(var s=arguments.callee.caller;s&&(i=s.arguments[0],!i||t.Event!==i.constructor);)s=s.caller;return i}},e.DomEvent.on=e.DomEvent.addListener,e.DomEvent.off=e.DomEvent.removeListener,e.Draggable=e.Class.extend({includes:e.Mixin.Events,statics:{START:e.Browser.touch?["touchstart","mousedown"]:["mousedown"],END:{mousedown:"mouseup",touchstart:"touchend",MSPointerDown:"touchend"},MOVE:{mousedown:"mousemove",touchstart:"touchmove",MSPointerDown:"touchmove"},TAP_TOLERANCE:15},initialize:function(t,i,s){this._element=t,this._dragStartTarget=i||t,this._longPress=s&&!e.Browser.msTouch},enable:function(){if(!this._enabled){for(var t=e.Draggable.START.length-1;t>=0;t--)e.DomEvent.on(this._dragStartTarget,e.Draggable.START[t],this._onDown,this);this._enabled=!0}},disable:function(){if(this._enabled){for(var t=e.Draggable.START.length-1;t>=0;t--)e.DomEvent.off(this._dragStartTarget,e.Draggable.START[t],this._onDown,this);this._enabled=!1,this._moved=!1}},_onDown:function(t){if(!(!e.Browser.touch&&t.shiftKey||1!==t.which&&1!==t.button&&!t.touches||(e.DomEvent.preventDefault(t),e.DomEvent.stopPropagation(t),e.Draggable._disabled))){if(this._simulateClick=!0,t.touches&&t.touches.length>1)return this._simulateClick=!1,clearTimeout(this._longPressTimeout),s;var o=t.touches&&1===t.touches.length?t.touches[0]:t,n=o.target;e.Browser.touch&&"a"===n.tagName.toLowerCase()&&e.DomUtil.addClass(n,"leaflet-active"),this._moved=!1,this._moving||(this._startPoint=new e.Point(o.clientX,o.clientY),this._startPos=this._newPos=e.DomUtil.getPosition(this._element),t.touches&&1===t.touches.length&&e.Browser.touch&&this._longPress&&(this._longPressTimeout=setTimeout(e.bind(function(){var t=this._newPos&&this._newPos.distanceTo(this._startPos)||0;e.Draggable.TAP_TOLERANCE>t&&(this._simulateClick=!1,this._onUp(),this._simulateEvent("contextmenu",o))},this),1e3)),e.DomEvent.on(i,e.Draggable.MOVE[t.type],this._onMove,this),e.DomEvent.on(i,e.Draggable.END[t.type],this._onUp,this))}},_onMove:function(t){if(!(t.touches&&t.touches.length>1)){var i=t.touches&&1===t.touches.length?t.touches[0]:t,s=new e.Point(i.clientX,i.clientY),o=s.subtract(this._startPoint);(o.x||o.y)&&(e.DomEvent.preventDefault(t),this._moved||(this.fire("dragstart"),this._moved=!0,this._startPos=e.DomUtil.getPosition(this._element).subtract(o),e.Browser.touch||(e.DomUtil.disableTextSelection(),this._setMovingCursor())),this._newPos=this._startPos.add(o),this._moving=!0,e.Util.cancelAnimFrame(this._animRequest),this._animRequest=e.Util.requestAnimFrame(this._updatePosition,this,!0,this._dragStartTarget))}},_updatePosition:function(){this.fire("predrag"),e.DomUtil.setPosition(this._element,this._newPos),this.fire("drag")},_onUp:function(t){var s;if(clearTimeout(this._longPressTimeout),this._simulateClick&&t.changedTouches){var o=t.changedTouches[0],n=o.target,a=this._newPos&&this._newPos.distanceTo(this._startPos)||0;"a"===n.tagName.toLowerCase()&&e.DomUtil.removeClass(n,"leaflet-active"),e.Draggable.TAP_TOLERANCE>a&&(s=o)}e.Browser.touch||(e.DomUtil.enableTextSelection(),this._restoreCursor());for(var r in e.Draggable.MOVE)e.Draggable.MOVE.hasOwnProperty(r)&&(e.DomEvent.off(i,e.Draggable.MOVE[r],this._onMove),e.DomEvent.off(i,e.Draggable.END[r],this._onUp));this._moved&&(e.Util.cancelAnimFrame(this._animRequest),this.fire("dragend")),this._moving=!1,s&&(this._moved=!1,this._simulateEvent("click",s))},_setMovingCursor:function(){e.DomUtil.addClass(i.body,"leaflet-dragging")},_restoreCursor:function(){e.DomUtil.removeClass(i.body,"leaflet-dragging")},_simulateEvent:function(s,e){var o=i.createEvent("MouseEvents");o.initMouseEvent(s,!0,!0,t,1,e.screenX,e.screenY,e.clientX,e.clientY,!1,!1,!1,!1,0,null),e.target.dispatchEvent(o)}}),e.Handler=e.Class.extend({initialize:function(t){this._map=t},enable:function(){this._enabled||(this._enabled=!0,this.addHooks())},disable:function(){this._enabled&&(this._enabled=!1,this.removeHooks())},enabled:function(){return!!this._enabled}}),e.Map.mergeOptions({dragging:!0,inertia:!e.Browser.android23,inertiaDeceleration:3400,inertiaMaxSpeed:1/0,inertiaThreshold:e.Browser.touch?32:18,easeLinearity:.25,longPress:!0,worldCopyJump:!1}),e.Map.Drag=e.Handler.extend({addHooks:function(){if(!this._draggable){var t=this._map;this._draggable=new e.Draggable(t._mapPane,t._container,t.options.longPress),this._draggable.on({dragstart:this._onDragStart,drag:this._onDrag,dragend:this._onDragEnd},this),t.options.worldCopyJump&&(this._draggable.on("predrag",this._onPreDrag,this),t.on("viewreset",this._onViewReset,this))}this._draggable.enable()},removeHooks:function(){this._draggable.disable()},moved:function(){return this._draggable&&this._draggable._moved},_onDragStart:function(){var t=this._map;t._panAnim&&t._panAnim.stop(),t.fire("movestart").fire("dragstart"),t.options.inertia&&(this._positions=[],this._times=[])},_onDrag:function(){if(this._map.options.inertia){var t=this._lastTime=+new Date,i=this._lastPos=this._draggable._newPos;this._positions.push(i),this._times.push(t),t-this._times[0]>200&&(this._positions.shift(),this._times.shift())}this._map.fire("move").fire("drag")},_onViewReset:function(){var t=this._map.getSize()._divideBy(2),i=this._map.latLngToLayerPoint(new e.LatLng(0,0));this._initialWorldOffset=i.subtract(t).x,this._worldWidth=this._map.project(new e.LatLng(0,180)).x},_onPreDrag:function(){var t=this._worldWidth,i=Math.round(t/2),s=this._initialWorldOffset,e=this._draggable._newPos.x,o=(e-i+s)%t+i-s,n=(e+i+s)%t-i-s,a=Math.abs(o+s)i.inertiaThreshold||!this._positions[0];if(o)t.fire("moveend");else{var n=this._lastPos.subtract(this._positions[0]),a=(this._lastTime+s-this._times[0])/1e3,r=i.easeLinearity,h=n.multiplyBy(r/a),l=h.distanceTo(new e.Point(0,0)),c=Math.min(i.inertiaMaxSpeed,l),m=h.multiplyBy(c/l),u=c/(i.inertiaDeceleration*r),d=m.multiplyBy(-u/2).round();e.Util.requestAnimFrame(function(){t.panBy(d,u,r)})}t.fire("dragend"),i.maxBounds&&e.Util.requestAnimFrame(this._panInsideMaxBounds,t,!0,t._container)},_panInsideMaxBounds:function(){this.panInsideBounds(this.options.maxBounds)}}),e.Map.addInitHook("addHandler","dragging",e.Map.Drag),e.Map.mergeOptions({doubleClickZoom:!0}),e.Map.DoubleClickZoom=e.Handler.extend({addHooks:function(){this._map.on("dblclick",this._onDoubleClick)},removeHooks:function(){this._map.off("dblclick",this._onDoubleClick)},_onDoubleClick:function(t){this.setView(t.latlng,this._zoom+1)}}),e.Map.addInitHook("addHandler","doubleClickZoom",e.Map.DoubleClickZoom),e.Map.mergeOptions({scrollWheelZoom:!0}),e.Map.ScrollWheelZoom=e.Handler.extend({addHooks:function(){e.DomEvent.on(this._map._container,"mousewheel",this._onWheelScroll,this),this._delta=0},removeHooks:function(){e.DomEvent.off(this._map._container,"mousewheel",this._onWheelScroll)},_onWheelScroll:function(t){var i=e.DomEvent.getWheelDelta(t);this._delta+=i,this._lastMousePos=this._map.mouseEventToContainerPoint(t),this._startTime||(this._startTime=+new Date);var s=Math.max(40-(+new Date-this._startTime),0);clearTimeout(this._timer),this._timer=setTimeout(e.bind(this._performZoom,this),s),e.DomEvent.preventDefault(t),e.DomEvent.stopPropagation(t)},_performZoom:function(){var t=this._map,i=this._delta,s=t.getZoom();if(i=i>0?Math.ceil(i):Math.round(i),i=Math.max(Math.min(i,4),-4),i=t._limitZoom(s+i)-s,this._delta=0,this._startTime=null,i){var e=s+i,o=this._getCenterForScrollWheelZoom(e);t.setView(o,e)}},_getCenterForScrollWheelZoom:function(t){var i=this._map,s=i.getZoomScale(t),e=i.getSize()._divideBy(2),o=this._lastMousePos._subtract(e)._multiplyBy(1-1/s),n=i._getTopLeftPoint()._add(e)._add(o);return i.unproject(n)}}),e.Map.addInitHook("addHandler","scrollWheelZoom",e.Map.ScrollWheelZoom),e.extend(e.DomEvent,{_touchstart:e.Browser.msTouch?"MSPointerDown":"touchstart",_touchend:e.Browser.msTouch?"MSPointerUp":"touchend",addDoubleTapListener:function(t,s,o){function n(t){var i;if(e.Browser.msTouch?(p.push(t.pointerId),i=p.length):i=t.touches.length,!(i>1)){var s=Date.now(),o=s-(r||s);h=t.touches?t.touches[0]:t,l=o>0&&c>=o,r=s}}function a(t){if(e.Browser.msTouch){var i=p.indexOf(t.pointerId);if(-1===i)return;p.splice(i,1)}if(l){if(e.Browser.msTouch){var o,n={};for(var a in h)o=h[a],n[a]="function"==typeof o?o.bind(h):o;h=n}h.type="dblclick",s(h),r=null}}var r,h,l=!1,c=250,m="_leaflet_",u=this._touchstart,d=this._touchend,p=[];t[m+u+o]=n,t[m+d+o]=a;var _=e.Browser.msTouch?i.documentElement:t;return t.addEventListener(u,n,!1),_.addEventListener(d,a,!1),e.Browser.msTouch&&_.addEventListener("MSPointerCancel",a,!1),this},removeDoubleTapListener:function(t,s){var o="_leaflet_";return t.removeEventListener(this._touchstart,t[o+this._touchstart+s],!1),(e.Browser.msTouch?i.documentElement:t).removeEventListener(this._touchend,t[o+this._touchend+s],!1),e.Browser.msTouch&&i.documentElement.removeEventListener("MSPointerCancel",t[o+this._touchend+s],!1),this}}),e.extend(e.DomEvent,{_msTouches:[],_msDocumentListener:!1,addMsTouchListener:function(t,i,s,e){switch(i){case"touchstart":return this.addMsTouchListenerStart(t,i,s,e);case"touchend":return this.addMsTouchListenerEnd(t,i,s,e);case"touchmove":return this.addMsTouchListenerMove(t,i,s,e);default:throw"Unknown touch event type"}},addMsTouchListenerStart:function(t,s,e,o){var n="_leaflet_",a=this._msTouches,r=function(t){for(var i=!1,s=0;a.length>s;s++)if(a[s].pointerId===t.pointerId){i=!0;break}i||a.push(t),t.touches=a.slice(),t.changedTouches=[t],e(t)};if(t[n+"touchstart"+o]=r,t.addEventListener("MSPointerDown",r,!1),!this._msDocumentListener){var h=function(t){for(var i=0;a.length>i;i++)if(a[i].pointerId===t.pointerId){a.splice(i,1);break}};i.documentElement.addEventListener("MSPointerUp",h,!1),i.documentElement.addEventListener("MSPointerCancel",h,!1),this._msDocumentListener=!0}return this},addMsTouchListenerMove:function(t,i,s,e){function o(t){if(t.pointerType!==t.MSPOINTER_TYPE_MOUSE||0!==t.buttons){for(var i=0;a.length>i;i++)if(a[i].pointerId===t.pointerId){a[i]=t;break}t.touches=a.slice(),t.changedTouches=[t],s(t)}}var n="_leaflet_",a=this._msTouches;return t[n+"touchmove"+e]=o,t.addEventListener("MSPointerMove",o,!1),this},addMsTouchListenerEnd:function(t,i,s,e){var o="_leaflet_",n=this._msTouches,a=function(t){for(var i=0;n.length>i;i++)if(n[i].pointerId===t.pointerId){n.splice(i,1);break}t.touches=n.slice(),t.changedTouches=[t],s(t)};return t[o+"touchend"+e]=a,t.addEventListener("MSPointerUp",a,!1),t.addEventListener("MSPointerCancel",a,!1),this},removeMsTouchListener:function(t,i,s){var e="_leaflet_",o=t[e+i+s];switch(i){case"touchstart":t.removeEventListener("MSPointerDown",o,!1);break;case"touchmove":t.removeEventListener("MSPointerMove",o,!1);break;case"touchend":t.removeEventListener("MSPointerUp",o,!1),t.removeEventListener("MSPointerCancel",o,!1)}return this}}),e.Map.mergeOptions({touchZoom:e.Browser.touch&&!e.Browser.android23}),e.Map.TouchZoom=e.Handler.extend({addHooks:function(){e.DomEvent.on(this._map._container,"touchstart",this._onTouchStart,this)},removeHooks:function(){e.DomEvent.off(this._map._container,"touchstart",this._onTouchStart,this)},_onTouchStart:function(t){var s=this._map;if(t.touches&&2===t.touches.length&&!s._animatingZoom&&!this._zooming){var o=s.mouseEventToLayerPoint(t.touches[0]),n=s.mouseEventToLayerPoint(t.touches[1]),a=s._getCenterLayerPoint();this._startCenter=o.add(n)._divideBy(2),this._startDist=o.distanceTo(n),this._moved=!1,this._zooming=!0,this._centerOffset=a.subtract(this._startCenter),s._panAnim&&s._panAnim.stop(),e.DomEvent.on(i,"touchmove",this._onTouchMove,this).on(i,"touchend",this._onTouchEnd,this),e.DomEvent.preventDefault(t)}},_onTouchMove:function(t){if(t.touches&&2===t.touches.length){var i=this._map,s=i.mouseEventToLayerPoint(t.touches[0]),o=i.mouseEventToLayerPoint(t.touches[1]);this._scale=s.distanceTo(o)/this._startDist,this._delta=s._add(o)._divideBy(2)._subtract(this._startCenter),1!==this._scale&&(this._moved||(e.DomUtil.addClass(i._mapPane,"leaflet-zoom-anim leaflet-touching"),i.fire("movestart").fire("zoomstart")._prepareTileBg(),this._moved=!0),e.Util.cancelAnimFrame(this._animRequest),this._animRequest=e.Util.requestAnimFrame(this._updateOnMove,this,!0,this._map._container),e.DomEvent.preventDefault(t))}},_updateOnMove:function(){var t=this._map,i=this._getScaleOrigin(),s=t.layerPointToLatLng(i);t.fire("zoomanim",{center:s,zoom:t.getScaleZoom(this._scale)}),t._tileBg.style[e.DomUtil.TRANSFORM]=e.DomUtil.getTranslateString(this._delta)+" "+e.DomUtil.getScaleString(this._scale,this._startCenter)},_onTouchEnd:function(){if(this._moved&&this._zooming){var t=this._map;this._zooming=!1,e.DomUtil.removeClass(t._mapPane,"leaflet-touching"),e.DomEvent.off(i,"touchmove",this._onTouchMove).off(i,"touchend",this._onTouchEnd);var s=this._getScaleOrigin(),o=t.layerPointToLatLng(s),n=t.getZoom(),a=t.getScaleZoom(this._scale)-n,r=a>0?Math.ceil(a):Math.floor(a),h=t._limitZoom(n+r);t.fire("zoomanim",{center:o,zoom:h}),t._runAnimation(o,h,t.getZoomScale(h)/this._scale,s,!0)}},_getScaleOrigin:function(){var t=this._centerOffset.subtract(this._delta).divideBy(this._scale);return this._startCenter.add(t)}}),e.Map.addInitHook("addHandler","touchZoom",e.Map.TouchZoom),e.Map.mergeOptions({boxZoom:!0}),e.Map.BoxZoom=e.Handler.extend({initialize:function(t){this._map=t,this._container=t._container,this._pane=t._panes.overlayPane},addHooks:function(){e.DomEvent.on(this._container,"mousedown",this._onMouseDown,this)},removeHooks:function(){e.DomEvent.off(this._container,"mousedown",this._onMouseDown)},_onMouseDown:function(t){return!t.shiftKey||1!==t.which&&1!==t.button?!1:(e.DomUtil.disableTextSelection(),this._startLayerPoint=this._map.mouseEventToLayerPoint(t),this._box=e.DomUtil.create("div","leaflet-zoom-box",this._pane),e.DomUtil.setPosition(this._box,this._startLayerPoint),this._container.style.cursor="crosshair",e.DomEvent.on(i,"mousemove",this._onMouseMove,this).on(i,"mouseup",this._onMouseUp,this).preventDefault(t),this._map.fire("boxzoomstart"),s)},_onMouseMove:function(t){var i=this._startLayerPoint,s=this._box,o=this._map.mouseEventToLayerPoint(t),n=o.subtract(i),a=new e.Point(Math.min(o.x,i.x),Math.min(o.y,i.y));e.DomUtil.setPosition(s,a),s.style.width=Math.max(0,Math.abs(n.x)-4)+"px",s.style.height=Math.max(0,Math.abs(n.y)-4)+"px"},_onMouseUp:function(t){this._pane.removeChild(this._box),this._container.style.cursor="",e.DomUtil.enableTextSelection(),e.DomEvent.off(i,"mousemove",this._onMouseMove).off(i,"mouseup",this._onMouseUp);var s=this._map,o=s.mouseEventToLayerPoint(t);if(!this._startLayerPoint.equals(o)){var n=new e.LatLngBounds(s.layerPointToLatLng(this._startLayerPoint),s.layerPointToLatLng(o));s.fitBounds(n),s.fire("boxzoomend",{boxZoomBounds:n})}}}),e.Map.addInitHook("addHandler","boxZoom",e.Map.BoxZoom),e.Map.mergeOptions({keyboard:!0,keyboardPanOffset:80,keyboardZoomOffset:1}),e.Map.Keyboard=e.Handler.extend({keyCodes:{left:[37],right:[39],down:[40],up:[38],zoomIn:[187,107,61],zoomOut:[189,109,173]},initialize:function(t){this._map=t,this._setPanOffset(t.options.keyboardPanOffset),this._setZoomOffset(t.options.keyboardZoomOffset)},addHooks:function(){var t=this._map._container;-1===t.tabIndex&&(t.tabIndex="0"),e.DomEvent.on(t,"focus",this._onFocus,this).on(t,"blur",this._onBlur,this).on(t,"mousedown",this._onMouseDown,this),this._map.on("focus",this._addHooks,this).on("blur",this._removeHooks,this)},removeHooks:function(){this._removeHooks();var t=this._map._container;e.DomEvent.off(t,"focus",this._onFocus,this).off(t,"blur",this._onBlur,this).off(t,"mousedown",this._onMouseDown,this),this._map.off("focus",this._addHooks,this).off("blur",this._removeHooks,this)},_onMouseDown:function(){this._focused||this._map._container.focus()},_onFocus:function(){this._focused=!0,this._map.fire("focus")},_onBlur:function(){this._focused=!1,this._map.fire("blur")},_setPanOffset:function(t){var i,s,e=this._panKeys={},o=this.keyCodes;for(i=0,s=o.left.length;s>i;i++)e[o.left[i]]=[-1*t,0];for(i=0,s=o.right.length;s>i;i++)e[o.right[i]]=[t,0];for(i=0,s=o.down.length;s>i;i++)e[o.down[i]]=[0,t];for(i=0,s=o.up.length;s>i;i++)e[o.up[i]]=[0,-1*t]},_setZoomOffset:function(t){var i,s,e=this._zoomKeys={},o=this.keyCodes;for(i=0,s=o.zoomIn.length;s>i;i++)e[o.zoomIn[i]]=t;for(i=0,s=o.zoomOut.length;s>i;i++)e[o.zoomOut[i]]=-t},_addHooks:function(){e.DomEvent.on(i,"keydown",this._onKeyDown,this)},_removeHooks:function(){e.DomEvent.off(i,"keydown",this._onKeyDown,this)},_onKeyDown:function(t){var i=t.keyCode,s=this._map;if(this._panKeys.hasOwnProperty(i))s.panBy(this._panKeys[i]),s.options.maxBounds&&s.panInsideBounds(s.options.maxBounds);else{if(!this._zoomKeys.hasOwnProperty(i))return;s.setZoom(s.getZoom()+this._zoomKeys[i])}e.DomEvent.stop(t)}}),e.Map.addInitHook("addHandler","keyboard",e.Map.Keyboard),e.Handler.MarkerDrag=e.Handler.extend({initialize:function(t){this._marker=t},addHooks:function(){var t=this._marker._icon;this._draggable||(this._draggable=new e.Draggable(t,t).on("dragstart",this._onDragStart,this).on("drag",this._onDrag,this).on("dragend",this._onDragEnd,this)),this._draggable.enable()},removeHooks:function(){this._draggable.disable()},moved:function(){return this._draggable&&this._draggable._moved},_onDragStart:function(){this._marker.closePopup().fire("movestart").fire("dragstart")},_onDrag:function(){var t=this._marker,i=t._shadow,s=e.DomUtil.getPosition(t._icon),o=t._map.layerPointToLatLng(s);i&&e.DomUtil.setPosition(i,s),t._latlng=o,t.fire("move",{latlng:o}).fire("drag") +},_onDragEnd:function(){this._marker.fire("moveend").fire("dragend")}}),e.Handler.PolyEdit=e.Handler.extend({options:{icon:new e.DivIcon({iconSize:new e.Point(8,8),className:"leaflet-div-icon leaflet-editing-icon"})},initialize:function(t,i){this._poly=t,e.setOptions(this,i)},addHooks:function(){this._poly._map&&(this._markerGroup||this._initMarkers(),this._poly._map.addLayer(this._markerGroup))},removeHooks:function(){this._poly._map&&(this._poly._map.removeLayer(this._markerGroup),delete this._markerGroup,delete this._markers)},updateMarkers:function(){this._markerGroup.clearLayers(),this._initMarkers()},_initMarkers:function(){this._markerGroup||(this._markerGroup=new e.LayerGroup),this._markers=[];var t,i,s,o,n=this._poly._latlngs;for(t=0,s=n.length;s>t;t++)o=this._createMarker(n[t],t),o.on("click",this._onMarkerClick,this),this._markers.push(o);var a,r;for(t=0,i=s-1;s>t;i=t++)(0!==t||e.Polygon&&this._poly instanceof e.Polygon)&&(a=this._markers[i],r=this._markers[t],this._createMiddleMarker(a,r),this._updatePrevNext(a,r))},_createMarker:function(t,i){var s=new e.Marker(t,{draggable:!0,icon:this.options.icon});return s._origLatLng=t,s._index=i,s.on("drag",this._onMarkerDrag,this),s.on("dragend",this._fireEdit,this),this._markerGroup.addLayer(s),s},_fireEdit:function(){this._poly.fire("edit")},_onMarkerDrag:function(t){var i=t.target;e.extend(i._origLatLng,i._latlng),i._middleLeft&&i._middleLeft.setLatLng(this._getMiddleLatLng(i._prev,i)),i._middleRight&&i._middleRight.setLatLng(this._getMiddleLatLng(i,i._next)),this._poly.redraw()},_onMarkerClick:function(t){if(!(3>this._poly._latlngs.length)){var i=t.target,s=i._index;this._markerGroup.removeLayer(i),this._markers.splice(s,1),this._poly.spliceLatLngs(s,1),this._updateIndexes(s,-1),this._updatePrevNext(i._prev,i._next),i._middleLeft&&this._markerGroup.removeLayer(i._middleLeft),i._middleRight&&this._markerGroup.removeLayer(i._middleRight),i._prev&&i._next?this._createMiddleMarker(i._prev,i._next):i._prev?i._next||(i._prev._middleRight=null):i._next._middleLeft=null,this._poly.fire("edit")}},_updateIndexes:function(t,i){this._markerGroup.eachLayer(function(s){s._index>t&&(s._index+=i)})},_createMiddleMarker:function(t,i){var s,e,o,n=this._getMiddleLatLng(t,i),a=this._createMarker(n);a.setOpacity(.6),t._middleRight=i._middleLeft=a,e=function(){var e=i._index;a._index=e,a.off("click",s).on("click",this._onMarkerClick,this),n.lat=a.getLatLng().lat,n.lng=a.getLatLng().lng,this._poly.spliceLatLngs(e,0,n),this._markers.splice(e,0,a),a.setOpacity(1),this._updateIndexes(e,1),i._index++,this._updatePrevNext(t,a),this._updatePrevNext(a,i)},o=function(){a.off("dragstart",e,this),a.off("dragend",o,this),this._createMiddleMarker(t,a),this._createMiddleMarker(a,i)},s=function(){e.call(this),o.call(this),this._poly.fire("edit")},a.on("click",s,this).on("dragstart",e,this).on("dragend",o,this),this._markerGroup.addLayer(a)},_updatePrevNext:function(t,i){t&&(t._next=i),i&&(i._prev=t)},_getMiddleLatLng:function(t,i){var s=this._poly._map,e=s.latLngToLayerPoint(t.getLatLng()),o=s.latLngToLayerPoint(i.getLatLng());return s.layerPointToLatLng(e._add(o)._divideBy(2))}}),e.Polyline.addInitHook(function(){e.Handler.PolyEdit&&(this.editing=new e.Handler.PolyEdit(this),this.options.editable&&this.editing.enable()),this.on("add",function(){this.editing&&this.editing.enabled()&&this.editing.addHooks()}),this.on("remove",function(){this.editing&&this.editing.enabled()&&this.editing.removeHooks()})}),e.Control=e.Class.extend({options:{position:"topright"},initialize:function(t){e.setOptions(this,t)},getPosition:function(){return this.options.position},setPosition:function(t){var i=this._map;return i&&i.removeControl(this),this.options.position=t,i&&i.addControl(this),this},addTo:function(t){this._map=t;var i=this._container=this.onAdd(t),s=this.getPosition(),o=t._controlCorners[s];return e.DomUtil.addClass(i,"leaflet-control"),-1!==s.indexOf("bottom")?o.insertBefore(i,o.firstChild):o.appendChild(i),this},removeFrom:function(t){var i=this.getPosition(),s=t._controlCorners[i];return s.removeChild(this._container),this._map=null,this.onRemove&&this.onRemove(t),this}}),e.control=function(t){return new e.Control(t)},e.Map.include({addControl:function(t){return t.addTo(this),this},removeControl:function(t){return t.removeFrom(this),this},_initControlPos:function(){function t(t,n){var a=s+t+" "+s+n;i[t+n]=e.DomUtil.create("div",a,o)}var i=this._controlCorners={},s="leaflet-",o=this._controlContainer=e.DomUtil.create("div",s+"control-container",this._container);t("top","left"),t("top","right"),t("bottom","left"),t("bottom","right")}}),e.Control.Zoom=e.Control.extend({options:{position:"topleft"},onAdd:function(t){var i="leaflet-control-zoom",s="leaflet-bar",o=s+"-part",n=e.DomUtil.create("div",i+" "+s);return this._map=t,this._zoomInButton=this._createButton("+","Zoom in",i+"-in "+o+" "+o+"-top",n,this._zoomIn,this),this._zoomOutButton=this._createButton("-","Zoom out",i+"-out "+o+" "+o+"-bottom",n,this._zoomOut,this),t.on("zoomend",this._updateDisabled,this),n},onRemove:function(t){t.off("zoomend",this._updateDisabled,this)},_zoomIn:function(t){this._map.zoomIn(t.shiftKey?3:1)},_zoomOut:function(t){this._map.zoomOut(t.shiftKey?3:1)},_createButton:function(t,i,s,o,n,a){var r=e.DomUtil.create("a",s,o);r.innerHTML=t,r.href="#",r.title=i;var h=e.DomEvent.stopPropagation;return e.DomEvent.on(r,"click",h).on(r,"mousedown",h).on(r,"dblclick",h).on(r,"click",e.DomEvent.preventDefault).on(r,"click",n,a),r},_updateDisabled:function(){var t=this._map,i="leaflet-control-zoom-disabled";e.DomUtil.removeClass(this._zoomInButton,i),e.DomUtil.removeClass(this._zoomOutButton,i),t._zoom===t.getMinZoom()&&e.DomUtil.addClass(this._zoomOutButton,i),t._zoom===t.getMaxZoom()&&e.DomUtil.addClass(this._zoomInButton,i)}}),e.Map.mergeOptions({zoomControl:!0}),e.Map.addInitHook(function(){this.options.zoomControl&&(this.zoomControl=new e.Control.Zoom,this.addControl(this.zoomControl))}),e.control.zoom=function(t){return new e.Control.Zoom(t)},e.Control.Attribution=e.Control.extend({options:{position:"bottomright",prefix:'Powered by Leaflet'},initialize:function(t){e.setOptions(this,t),this._attributions={}},onAdd:function(t){return this._container=e.DomUtil.create("div","leaflet-control-attribution"),e.DomEvent.disableClickPropagation(this._container),t.on("layeradd",this._onLayerAdd,this).on("layerremove",this._onLayerRemove,this),this._update(),this._container},onRemove:function(t){t.off("layeradd",this._onLayerAdd).off("layerremove",this._onLayerRemove)},setPrefix:function(t){return this.options.prefix=t,this._update(),this},addAttribution:function(t){return t?(this._attributions[t]||(this._attributions[t]=0),this._attributions[t]++,this._update(),this):s},removeAttribution:function(t){return t?(this._attributions[t]--,this._update(),this):s},_update:function(){if(this._map){var t=[];for(var i in this._attributions)this._attributions.hasOwnProperty(i)&&this._attributions[i]&&t.push(i);var s=[];this.options.prefix&&s.push(this.options.prefix),t.length&&s.push(t.join(", ")),this._container.innerHTML=s.join(" — ")}},_onLayerAdd:function(t){t.layer.getAttribution&&this.addAttribution(t.layer.getAttribution())},_onLayerRemove:function(t){t.layer.getAttribution&&this.removeAttribution(t.layer.getAttribution())}}),e.Map.mergeOptions({attributionControl:!0}),e.Map.addInitHook(function(){this.options.attributionControl&&(this.attributionControl=(new e.Control.Attribution).addTo(this))}),e.control.attribution=function(t){return new e.Control.Attribution(t)},e.Control.Scale=e.Control.extend({options:{position:"bottomleft",maxWidth:100,metric:!0,imperial:!0,updateWhenIdle:!1},onAdd:function(t){this._map=t;var i="leaflet-control-scale",s=e.DomUtil.create("div",i),o=this.options;return this._addScales(o,i,s),t.on(o.updateWhenIdle?"moveend":"move",this._update,this),t.whenReady(this._update,this),s},onRemove:function(t){t.off(this.options.updateWhenIdle?"moveend":"move",this._update,this)},_addScales:function(t,i,s){t.metric&&(this._mScale=e.DomUtil.create("div",i+"-line",s)),t.imperial&&(this._iScale=e.DomUtil.create("div",i+"-line",s))},_update:function(){var t=this._map.getBounds(),i=t.getCenter().lat,s=6378137*Math.PI*Math.cos(i*Math.PI/180),e=s*(t.getNorthEast().lng-t.getSouthWest().lng)/180,o=this._map.getSize(),n=this.options,a=0;o.x>0&&(a=e*(n.maxWidth/o.x)),this._updateScales(n,a)},_updateScales:function(t,i){t.metric&&i&&this._updateMetric(i),t.imperial&&i&&this._updateImperial(i)},_updateMetric:function(t){var i=this._getRoundNum(t);this._mScale.style.width=this._getScaleWidth(i/t)+"px",this._mScale.innerHTML=1e3>i?i+" m":i/1e3+" km"},_updateImperial:function(t){var i,s,e,o=3.2808399*t,n=this._iScale;o>5280?(i=o/5280,s=this._getRoundNum(i),n.style.width=this._getScaleWidth(s/i)+"px",n.innerHTML=s+" mi"):(e=this._getRoundNum(o),n.style.width=this._getScaleWidth(e/o)+"px",n.innerHTML=e+" ft")},_getScaleWidth:function(t){return Math.round(this.options.maxWidth*t)-10},_getRoundNum:function(t){var i=Math.pow(10,(Math.floor(t)+"").length-1),s=t/i;return s=s>=10?10:s>=5?5:s>=3?3:s>=2?2:1,i*s}}),e.control.scale=function(t){return new e.Control.Scale(t)},e.Control.Layers=e.Control.extend({options:{collapsed:!0,position:"topright",autoZIndex:!0},initialize:function(t,i,s){e.setOptions(this,s),this._layers={},this._lastZIndex=0,this._handlingClick=!1;for(var o in t)t.hasOwnProperty(o)&&this._addLayer(t[o],o);for(o in i)i.hasOwnProperty(o)&&this._addLayer(i[o],o,!0)},onAdd:function(t){return this._initLayout(),this._update(),t.on("layeradd",this._onLayerChange,this).on("layerremove",this._onLayerChange,this),this._container},onRemove:function(t){t.off("layeradd",this._onLayerChange).off("layerremove",this._onLayerChange)},addBaseLayer:function(t,i){return this._addLayer(t,i),this._update(),this},addOverlay:function(t,i){return this._addLayer(t,i,!0),this._update(),this},removeLayer:function(t){var i=e.stamp(t);return delete this._layers[i],this._update(),this},_initLayout:function(){var t="leaflet-control-layers",i=this._container=e.DomUtil.create("div",t);e.Browser.touch?e.DomEvent.on(i,"click",e.DomEvent.stopPropagation):(e.DomEvent.disableClickPropagation(i),e.DomEvent.on(i,"mousewheel",e.DomEvent.stopPropagation));var s=this._form=e.DomUtil.create("form",t+"-list");if(this.options.collapsed){e.DomEvent.on(i,"mouseover",this._expand,this).on(i,"mouseout",this._collapse,this);var o=this._layersLink=e.DomUtil.create("a",t+"-toggle",i);o.href="#",o.title="Layers",e.Browser.touch?e.DomEvent.on(o,"click",e.DomEvent.stopPropagation).on(o,"click",e.DomEvent.preventDefault).on(o,"click",this._expand,this):e.DomEvent.on(o,"focus",this._expand,this),this._map.on("movestart",this._collapse,this)}else this._expand();this._baseLayersList=e.DomUtil.create("div",t+"-base",s),this._separator=e.DomUtil.create("div",t+"-separator",s),this._overlaysList=e.DomUtil.create("div",t+"-overlays",s),i.appendChild(s)},_addLayer:function(t,i,s){var o=e.stamp(t);this._layers[o]={layer:t,name:i,overlay:s},this.options.autoZIndex&&t.setZIndex&&(this._lastZIndex++,t.setZIndex(this._lastZIndex))},_update:function(){if(this._container){this._baseLayersList.innerHTML="",this._overlaysList.innerHTML="";var t=!1,i=!1;for(var s in this._layers)if(this._layers.hasOwnProperty(s)){var e=this._layers[s];this._addItem(e),i=i||e.overlay,t=t||!e.overlay}this._separator.style.display=i&&t?"":"none"}},_onLayerChange:function(t){var i=e.stamp(t.layer);this._layers[i]&&!this._handlingClick&&this._update()},_createRadioElement:function(t,s){var e='t;t++)i=o[t],s=this._layers[i.layerId],i.checked&&!this._map.hasLayer(s.layer)?(this._map.addLayer(s.layer),s.overlay||(e=s.layer)):!i.checked&&this._map.hasLayer(s.layer)&&this._map.removeLayer(s.layer);e&&(this._map.setZoom(this._map.getZoom()),this._map.fire("baselayerchange",{layer:e})),this._handlingClick=!1},_expand:function(){e.DomUtil.addClass(this._container,"leaflet-control-layers-expanded")},_collapse:function(){this._container.className=this._container.className.replace(" leaflet-control-layers-expanded","")}}),e.control.layers=function(t,i,s){return new e.Control.Layers(t,i,s)},e.PosAnimation=e.Class.extend({includes:e.Mixin.Events,run:function(t,i,s,o){this.stop(),this._el=t,this._inProgress=!0,this.fire("start"),t.style[e.DomUtil.TRANSITION]="all "+(s||.25)+"s cubic-bezier(0,0,"+(o||.5)+",1)",e.DomEvent.on(t,e.DomUtil.TRANSITION_END,this._onTransitionEnd,this),e.DomUtil.setPosition(t,i),e.Util.falseFn(t.offsetWidth),this._stepTimer=setInterval(e.bind(this.fire,this,"step"),50)},stop:function(){this._inProgress&&(e.DomUtil.setPosition(this._el,this._getPos()),this._onTransitionEnd(),e.Util.falseFn(this._el.offsetWidth))},_transformRe:/(-?[\d\.]+), (-?[\d\.]+)\)/,_getPos:function(){var i,s,o,n=this._el,a=t.getComputedStyle(n);return e.Browser.any3d?(o=a[e.DomUtil.TRANSFORM].match(this._transformRe),i=parseFloat(o[1]),s=parseFloat(o[2])):(i=parseFloat(a.left),s=parseFloat(a.top)),new e.Point(i,s,!0)},_onTransitionEnd:function(){e.DomEvent.off(this._el,e.DomUtil.TRANSITION_END,this._onTransitionEnd,this),this._inProgress&&(this._inProgress=!1,this._el.style[e.DomUtil.TRANSITION]="",clearInterval(this._stepTimer),this.fire("step").fire("end"))}}),e.Map.include({setView:function(t,i,s){i=this._limitZoom(i);var e=this._zoom!==i;if(this._loaded&&!s&&this._layers){this._panAnim&&this._panAnim.stop();var o=e?this._zoomToIfClose&&this._zoomToIfClose(t,i):this._panByIfClose(t);if(o)return clearTimeout(this._sizeTimer),this}return this._resetView(t,i),this},panBy:function(t,i,s){if(t=e.point(t),!t.x&&!t.y)return this;this._panAnim||(this._panAnim=new e.PosAnimation,this._panAnim.on({step:this._onPanTransitionStep,end:this._onPanTransitionEnd},this)),this.fire("movestart"),e.DomUtil.addClass(this._mapPane,"leaflet-pan-anim");var o=e.DomUtil.getPosition(this._mapPane).subtract(t)._round();return this._panAnim.run(this._mapPane,o,i||.25,s),this},_onPanTransitionStep:function(){this.fire("move")},_onPanTransitionEnd:function(){e.DomUtil.removeClass(this._mapPane,"leaflet-pan-anim"),this.fire("moveend")},_panByIfClose:function(t){var i=this._getCenterOffset(t)._floor();return this._offsetIsWithinView(i)?(this.panBy(i),!0):!1},_offsetIsWithinView:function(t,i){var s=i||1,e=this.getSize();return Math.abs(t.x)<=e.x*s&&Math.abs(t.y)<=e.y*s}}),e.PosAnimation=e.DomUtil.TRANSITION?e.PosAnimation:e.PosAnimation.extend({run:function(t,i,s,o){this.stop(),this._el=t,this._inProgress=!0,this._duration=s||.25,this._easeOutPower=1/Math.max(o||.5,.2),this._startPos=e.DomUtil.getPosition(t),this._offset=i.subtract(this._startPos),this._startTime=+new Date,this.fire("start"),this._animate()},stop:function(){this._inProgress&&(this._step(),this._complete())},_animate:function(){this._animId=e.Util.requestAnimFrame(this._animate,this),this._step()},_step:function(){var t=+new Date-this._startTime,i=1e3*this._duration;i>t?this._runFrame(this._easeOut(t/i)):(this._runFrame(1),this._complete())},_runFrame:function(t){var i=this._startPos.add(this._offset.multiplyBy(t));e.DomUtil.setPosition(this._el,i),this.fire("step")},_complete:function(){e.Util.cancelAnimFrame(this._animId),this._inProgress=!1,this.fire("end")},_easeOut:function(t){return 1-Math.pow(1-t,this._easeOutPower)}}),e.Map.mergeOptions({zoomAnimation:e.DomUtil.TRANSITION&&!e.Browser.android23&&!e.Browser.mobileOpera}),e.DomUtil.TRANSITION&&e.Map.addInitHook(function(){e.DomEvent.on(this._mapPane,e.DomUtil.TRANSITION_END,this._catchTransitionEnd,this)}),e.Map.include(e.DomUtil.TRANSITION?{_zoomToIfClose:function(t,i){if(this._animatingZoom)return!0;if(!this.options.zoomAnimation)return!1;var s=this.getZoomScale(i),o=this._getCenterOffset(t)._divideBy(1-1/s);if(!this._offsetIsWithinView(o,1))return!1;e.DomUtil.addClass(this._mapPane,"leaflet-zoom-anim"),this.fire("movestart").fire("zoomstart"),this.fire("zoomanim",{center:t,zoom:i});var n=this._getCenterLayerPoint().add(o);return this._prepareTileBg(),this._runAnimation(t,i,s,n),!0},_catchTransitionEnd:function(){this._animatingZoom&&this._onZoomTransitionEnd()},_runAnimation:function(t,i,s,o,n){this._animateToCenter=t,this._animateToZoom=i,this._animatingZoom=!0,e.Draggable&&(e.Draggable._disabled=!0);var a=e.DomUtil.TRANSFORM,r=this._tileBg;clearTimeout(this._clearTileBgTimer),e.Util.falseFn(r.offsetWidth);var h=e.DomUtil.getScaleString(s,o),l=r.style[a];r.style[a]=n?l+" "+h:h+" "+l},_prepareTileBg:function(){var t=this._tilePane,i=this._tileBg;if(i&&this._getLoadedTilesPercentage(i)>.5&&.5>this._getLoadedTilesPercentage(t))return t.style.visibility="hidden",t.empty=!0,this._stopLoadingImages(t),s;i||(i=this._tileBg=this._createPane("leaflet-tile-pane",this._mapPane),i.style.zIndex=1),i.style[e.DomUtil.TRANSFORM]="",i.style.visibility="hidden",i.empty=!0,t.empty=!1,this._tilePane=this._panes.tilePane=i;var o=this._tileBg=t;e.DomUtil.addClass(o,"leaflet-zoom-animated"),this._stopLoadingImages(o)},_getLoadedTilesPercentage:function(t){var i,s,e=t.getElementsByTagName("img"),o=0;for(i=0,s=e.length;s>i;i++)e[i].complete&&o++;return o/s},_stopLoadingImages:function(t){var i,s,o,n=Array.prototype.slice.call(t.getElementsByTagName("img"));for(i=0,s=n.length;s>i;i++)o=n[i],o.complete||(o.onload=e.Util.falseFn,o.onerror=e.Util.falseFn,o.src=e.Util.emptyImageUrl,o.parentNode.removeChild(o))},_onZoomTransitionEnd:function(){this._restoreTileFront(),e.DomUtil.removeClass(this._mapPane,"leaflet-zoom-anim"),e.Util.falseFn(this._tileBg.offsetWidth),this._animatingZoom=!1,this._resetView(this._animateToCenter,this._animateToZoom,!0,!0),e.Draggable&&(e.Draggable._disabled=!1)},_restoreTileFront:function(){this._tilePane.innerHTML="",this._tilePane.style.visibility="",this._tilePane.style.zIndex=2,this._tileBg.style.zIndex=1},_clearTileBg:function(){this._animatingZoom||this.touchZoom._zooming||(this._tileBg.innerHTML="")}}:{}),e.Map.include({_defaultLocateOptions:{watch:!1,setView:!1,maxZoom:1/0,timeout:1e4,maximumAge:0,enableHighAccuracy:!1},locate:function(t){if(t=this._locationOptions=e.extend(this._defaultLocateOptions,t),!navigator.geolocation)return this._handleGeolocationError({code:0,message:"Geolocation not supported."}),this;var i=e.bind(this._handleGeolocationResponse,this),s=e.bind(this._handleGeolocationError,this);return t.watch?this._locationWatchId=navigator.geolocation.watchPosition(i,s,t):navigator.geolocation.getCurrentPosition(i,s,t),this},stopLocate:function(){return navigator.geolocation&&navigator.geolocation.clearWatch(this._locationWatchId),this},_handleGeolocationError:function(t){var i=t.code,s=t.message||(1===i?"permission denied":2===i?"position unavailable":"timeout");this._locationOptions.setView&&!this._loaded&&this.fitWorld(),this.fire("locationerror",{code:i,message:"Geolocation error: "+s+"."})},_handleGeolocationResponse:function(t){var i=180*t.coords.accuracy/4e7,s=2*i,o=t.coords.latitude,n=t.coords.longitude,a=new e.LatLng(o,n),r=new e.LatLng(o-i,n-s),h=new e.LatLng(o+i,n+s),l=new e.LatLngBounds(r,h),c=this._locationOptions;if(c.setView){var m=Math.min(this.getBoundsZoom(l),c.maxZoom);this.setView(a,m)}this.fire("locationfound",{latlng:a,bounds:l,accuracy:t.coords.accuracy})}})}(this,document),L.Proj={},L.Proj._isProj4Proj=function(t){return t.projName!==void 0},L.Proj.Projection=L.Class.extend({initialize:function(t,i){if(L.Proj._isProj4Proj(t))this._proj=t;else{var s=t;Proj4js.defs[s]=i,this._proj=new Proj4js.Proj(s)}},project:function(t){var i=new L.Point(t.lng,t.lat);return Proj4js.transform(Proj4js.WGS84,this._proj,i)},unproject:function(t,i){var s=Proj4js.transform(this._proj,Proj4js.WGS84,t.clone());return new L.LatLng(s.y,s.x,i)}}),L.Proj.CRS=L.Class.extend({includes:L.CRS,options:{transformation:new L.Transformation(1,0,-1,0)},initialize:function(t,i,s){var e,o,n,a;L.Proj._isProj4Proj(t)?(o=t,e=o.srsCode,a=i||{},this.projection=new L.Proj.Projection(o)):(e=t,n=i,a=s||{},this.projection=new L.Proj.Projection(e,n)),L.Util.setOptions(this,a),this.code=e,this.transformation=this.options.transformation,this.options.origin&&(this.transformation=new L.Transformation(1,-this.options.origin[0],-1,this.options.origin[1])),this.options.scales?this.scale=function(t){return this.options.scales[t]}:this.options.resolutions&&(this.scale=function(t){return 1/this.options.resolutions[t]})}}),L.Proj.CRS.TMS=L.Proj.CRS.extend({initialize:function(t,i,s,e){if(L.Proj._isProj4Proj(t)){var o=t,n=i,a=s||{};a.origin=[n[0],n[3]],L.Proj.CRS.prototype.initialize(o,a)}else{var r=t,h=i,n=s,a=e||{};a.origin=[n[0],n[3]],L.Proj.CRS.prototype.initialize(r,h,a)}this.projectedBounds=n}}),L.Proj.TileLayer={},L.Proj.TileLayer.TMS=L.TileLayer.extend({options:{tms:!0,continuousWorld:!0},initialize:function(t,i,s){if(!(i instanceof L.Proj.CRS.TMS))throw Error("CRS is not L.Proj.CRS.TMS.");L.TileLayer.prototype.initialize.call(this,t,s),this.crs=i;for(var e=this.options.minZoom;this.options.maxZoom>e;e++){var o=(this.crs.projectedBounds[3]-this.crs.projectedBounds[1])/this._projectedTileSize(e);if(Math.abs(o-Math.round(o))>.001)throw Error("Projected bounds does not match grid at zoom "+e)}},getTileUrl:function(t){var i=Math.round((this.crs.projectedBounds[3]-this.crs.projectedBounds[1])/this._projectedTileSize(this._map.getZoom()));return L.Util.template(this._url,L.Util.extend({s:this._getSubdomain(t),z:this._getZoomForUrl(),x:t.x,y:i-t.y-1},this.options))},_projectedTileSize:function(t){return this.options.tileSize/this.crs.scale(t)}}),"undefined"!=typeof module&&(module.exports=L.Proj),"undefined"!=typeof L&&L.CRS!==void 0&&(L.CRS.proj4js=function(){return function(t,i,s,e){return e=e||{},s&&(e.transformation=s),new L.Proj.CRS(t,i,e)}}()),L.Control.MousePosition=L.Control.extend({options:{position:"bottomleft",separator:" : ",emptyString:"Unavailable",lngFirst:!1,numDigits:5,lngFormatter:void 0,latFormatter:void 0},onAdd:function(t){return this._container=L.DomUtil.create("div","leaflet-control-mouseposition"),L.DomEvent.disableClickPropagation(this._container),t.on("mousemove",this._onMouseMove,this),this._container.innerHTML=this.options.emptyString,this._container},onRemove:function(t){t.off("mousemove",this._onMouseMove)},_onMouseMove:function(t){var i=L.Util.formatNum(t.latlng.lng,this.options.numDigits),s=L.Util.formatNum(t.latlng.lat,this.options.numDigits);this.options.lngFormatter&&(i=this.options.lngFormatter(i)),this.options.latFormatter&&(s=this.options.latFormatter(s));var e=this.options.lngFirst?i+this.options.separator+s:s+this.options.separator+i;this._container.innerHTML=e}}),L.Map.mergeOptions({positionControl:!1}),L.Map.addInitHook(function(){this.options.positionControl&&(this.positionControl=new L.Control.MousePosition,this.addControl(this.positionControl))}),L.control.mousePosition=function(t){return new L.Control.MousePosition(t)},function(t,i){L.KSP={},L.KSP.version="0.2.1",L.KSP.CRS={},L.KSP.CRS.EPSG4326=new L.Proj.CRS.TMS(new Proj4js.Proj("EPSG:4326"),[-180,-90,180,90],{resolutions:[.703125,.3515625,.17578125,.087890625,.0439453125,.02197265625]}),L.KSP.CelestialBody=L.Class.extend({initialize:function(t){if(!t.hasOwnProperty("id"))throw Error("must specify id");if(!t.hasOwnProperty("name"))throw Error("must specify name");if(t.hasOwnProperty("crs")){if(!(t.crs instanceof L.Proj.CRS.TMS))throw Error("crs is not an instance of L.Proj.CRS.TMS")}else this.crs=L.KSP.CRS.EPSG4326;t.hasOwnProperty("radius")||(this.radius=1),t.hasOwnProperty("thumbnail")||(this.thumbnail="body-unknown.png"),t.hasOwnProperty("baseLayers")||(this.baseLayers={}),L.Util.extend(this,t)},addTo:function(t){var i,s=t._body;if(t._body=this,t.fire("bodychangestart",{body:this,oldBody:s}),s){for(i in s.baseLayers)s.baseLayers.hasOwnProperty(i)&&t.removeLayer(s.baseLayers[i]);for(i in s.overlays)s.overlays.hasOwnProperty(i)&&t.removeLayer(s.overlays[i])}var e=this.defaultLayer||this.baseLayers.Satellite;if(e){for(i in this.baseLayers)if(this.baseLayers.hasOwnProperty(i)&&this.baseLayers[i]._type===t._baseLayerType){e=this.baseLayers[i];break}t.addLayer(e),t.fire("baselayerchange",{layer:e})}for(i in this.overlays)this.overlays.hasOwnProperty(i)&&t._overlayTypes.indexOf(this.overlays[i]._type)>=0&&(t.addLayer(this.overlays[i]),t.fire("layeradd",{layer:this.overlays[i]}));t.fire("bodychangeend",{body:this,oldBody:s})},onAdd:function(t){this.addTo(t)},removeFrom:function(t){L.KSP.CelestialBody.DUMMY.addTo(t)},onRemove:function(t){this.removeFrom(t)}}),L.KSP.celestialBody=function(t){return new L.KSP.CelestialBody(t)},L.KSP.CelestialBody.DUMMY=L.KSP.celestialBody({id:"",name:"",crs:L.KSP.CRS.EPSG4326}),L.KSP.CelestialBody.ALL_PLANETARY=[L.KSP.CelestialBody.DUMMY],L.KSP.Map=L.Map.extend({options:{crs:L.KSP.CRS.EPSG4326,continuousWorld:!0},initialize:function(t,i){this._baseLayerType=-1,this._overlayTypes=[],L.Util.setOptions(this,i),this.startTrackingLayerState(),this.on("bodychangestart",this._onBodyChangeStart).on("bodychangeend",this._onBodyChangeEnd),L.Map.prototype.initialize.call(this,t,this.options)},clampZoom:function(){var t=this.getZoom(),i=this.getMinZoom(),s=this.getMaxZoom();i>t?this.setZoom(i):t>s?this.setZoom(s):this.fire("zoomend",this)},_onBodyChangeStart:function(){this.stopTrackingLayerState()},_onBodyChangeEnd:function(){this.clampZoom(),this.startTrackingLayerState()},_onLayerStateChange:function(t){if("layeradd"===t.type)t.layer instanceof L.KSP.TileLayer?this._baseLayerType=t.layer._type:t.layer instanceof L.KSP.LayerGroup&&0>this._overlayTypes.indexOf(t.layer._type)&&this._overlayTypes.push(t.layer._type);else if(t.layer instanceof L.KSP.LayerGroup){var i,s,e=t.layer._type,o=this._overlayTypes;for(i=o.length-1;i>=0;i--)s=o[i],s===e&&o.splice(i,1)}},startTrackingLayerState:function(){this.on("layeradd",this._onLayerStateChange).on("layerremove",this._onLayerStateChange)},stopTrackingLayerState:function(){this.off("layeradd",this._onLayerStateChange).off("layerremove",this._onLayerStateChange)}}),L.KSP.map=function(t,i){return new L.KSP.Map(t,i)},L.KSP.TileLayer=L.Proj.TileLayer.TMS.extend({statics:{TYPE_SATELLITE:0,TYPE_COLORRELIEF:1,TYPE_SLOPE:2,DEFAULT_URL:"http://tiles.kerbalmaps.com/{body}/{style}/{z}/{x}/{y}.png"},options:{continuousWorld:!1,noWrap:!1,minZoom:0,maxZoom:5,attribution:"Map data © Joel Pedraza"},initialize:function(t,i,s,e){L.Util.setOptions(this,e),this._type=t,L.Proj.TileLayer.TMS.prototype.initialize.call(this,i,s,this.options)}}),L.KSP.tileLayer=function(t,i,s,e){return new L.KSP.TileLayer(t,i,s,e)},L.KSP.LayerGroup=L.LayerGroup.extend({statics:{TYPE_SPACECENTER:0,TYPE_ANOMALY:1},initialize:function(t,i){this._type=t,L.LayerGroup.prototype.initialize.call(this,i)}}),L.KSP.layerGroup=function(t,i){return new L.KSP.LayerGroup(t,i)},L.KSP.Icon={},L.KSP.Icon.SPACECENTER=new L.Icon({iconUrl:"../assets/images/markers-spacecenter.png",shadowUrl:"../assets/images/markers-shadow.png",iconSize:[30,40],shadowSize:[35,16],iconAnchor:[15,40],shadowAnchor:[10,12],popupAnchor:[0,-35]}),L.KSP.Icon.ANOMALY=new L.Icon({iconUrl:"../assets/images/markers-anomaly.png",shadowUrl:"../assets/images/markers-shadow.png",iconSize:[30,40],shadowSize:[35,16],iconAnchor:[15,40],shadowAnchor:[10,12],popupAnchor:[0,-35]}),L.KSP.Legend={},L.KSP.Legend.SLOPE={"≥ 60°":"#E19678","< 60°":"#C86464","< 30°":"#965A64","< 15°":"#645064","< 5°":"#325064","0°":"#32465A"},L.KSP.Control=L.KSP.control={},L.KSP.Control.Legend=L.Control.extend({options:{position:"bottomright"},onAdd:function(t){return this._container=L.DomUtil.create("div","leaflet-control-legend"),t.on("baselayerchange",this._onLayerChange,this),this._container},_update:function(t){if(this._container.innerHTML="",t){for(var i in t)t.hasOwnProperty(i)&&(this._container.innerHTML+=''+i+"
    ");L.DomUtil.addClass(this._container,"leaflet-control-legend-visible")}else this._container.className=this._container.className.replace(" leaflet-control-legend-visible","")},_onLayerChange:function(t){this._update(t.layer.options.legend)}}),L.Map.mergeOptions({legendControl:!0}),L.Map.addInitHook(function(){this.options.bodyControl&&(this.legendControl=new L.KSP.Control.Legend,this.addControl(this.legendControl))}),L.control.legend=function(t){return new L.KSP.Control.Legend(t)},L.KSP.Control.Scale=L.Control.Scale.extend({options:{imperial:!1},onAdd:function(t){this._radius=0,t._body&&(this._radius=t._body.radius);var i=L.Control.Scale.prototype.onAdd.call(this,t);return t.on("bodychangeend",this._onBodyChangeEnd,this),i},onRemove:function(t){L.Control.Scale.prototype.onRemove.call(this,t),t.off("bodychangeend",this._onBodyChangeEnd)},_onBodyChangeEnd:function(t){this._radius=t.body.radius,this._update()},_update:function(){var t=this._map.getBounds(),i=t.getCenter().lat,s=this._radius*Math.PI*Math.cos(i*Math.PI/180),e=s*(t.getNorthEast().lng-t.getSouthWest().lng)/180,o=this._map.getSize(),n=this.options,a=0;o.x>0&&(a=e*(n.maxWidth/o.x)),this._updateScales(n,a)}}),L.KSP.Map.mergeOptions({scaleControl:!1}),L.KSP.Map.addInitHook(function(){this.options.scaleControl&&(this.scaleControl=new L.KSP.Control.Scale,this.addControl(this.scaleControl))}),L.KSP.control.scale=function(t){return new L.KSP.Control.Scale(t)},L.KSP.Control.CelestialBody=L.Control.extend({options:{position:"topright",collapsed:!0},initialize:function(t,i){L.Util.setOptions(this,i),this._bodies=t,this._timeInMillis=(new Date).valueOf(),this._weekInMillis=6048e5},onAdd:function(){return this._initLayout(),this._update(),this._map.on("bodychangeend",this._update,this),this._container},_initLayout:function(){var t="leaflet-control-celestialbodies",s=this._container=L.DomUtil.create("div",t),e=this._bodies;if(this.options.collapsed){L.DomEvent.on(s,"mouseover",this._expand,this).on(s,"mouseout",this._collapse,this);var o=this._bodiesLink=L.DomUtil.create("a",t+"-toggle",s);o.href="#",o.title="Celestial Bodies",L.DomEvent.on(o,"focus",this._expand,this),this._map.on("movestart",this._collapse,this)}var n=this._list=L.DomUtil.create("ul",t+"-list",s);for(var a in e)if(e.hasOwnProperty(a)){var r=this._addBody(e[a],n);if(e[a].children){var h=i.createElement("ul");for(var l in e[a].children)e[a].children.hasOwnProperty(l)&&this._addBody(e[a].children[l],h);r.appendChild(h)}}},_update:function(){this._map._body&&(this._bodiesLink.style.backgroundImage='url("'+this._map._body.thumbnail+'")')},_addBody:function(t,s){var e,o=i.createElement("li"),n=i.createElement("img");if(n.src=t.thumbnail,n.alt=o.title=t.name,t.addedOn){this._timeInMillis-t.addedOnKerbal Space Center
    -0.0969 : -74.6004"),L.marker([20.5829,-146.5116],{icon:L.KSP.Icon.SPACECENTER}).bindPopup("Kerbal Space Center 2
    20.5829 : -146.5116"),L.marker([-1.5409,-71.9099],{icon:L.KSP.Icon.SPACECENTER}).bindPopup("Island Airfield
    -1.5409 : -71.9099")]),Anomalies:L.KSP.layerGroup(L.KSP.LayerGroup.TYPE_ANOMALY,[L.marker([.1023,-74.5684],{icon:L.KSP.Icon.ANOMALY}).bindPopup("0.1023 : -74.5684"),L.marker([20.6709,-146.4968],{icon:L.KSP.Icon.ANOMALY}).bindPopup("20.6709 : -146.4968"),L.marker([35.5705,-74.9773],{icon:L.KSP.Icon.ANOMALY}).bindPopup("35.5705 : -74.9773"),L.marker([-.6402,-80.7668],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-0.6402 : -80.7668"),L.marker([-28.8083,-13.4401],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-28.8083 : -13.4401"),L.marker([-6.5057,-141.6856],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-6.5057 : -141.6856"),L.marker([81.9551,-128.518],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-81.9551 : -128.518")])}}),L.KSP.CelestialBody.MUN=L.KSP.celestialBody({id:"mun",name:"Mun",crs:L.KSP.CRS.EPSG4326,radius:2e5,addedOn:13682304e5,lastUpdated:1368144e6,thumbnail:"body-mun.png",baseLayers:{Satellite:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SATELLITE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{body:"mun",style:"sat"}),"Color Relief":L.KSP.tileLayer(L.KSP.TileLayer.TYPE_COLORRELIEF,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{body:"mun",style:"color",legend:{"3150 m":"#EBEBEB","-180 m":"#232323"}}),Slope:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SLOPE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{body:"mun",style:"slope",legend:L.KSP.Legend.SLOPE})},overlays:{Anomalies:L.KSP.layerGroup(L.KSP.LayerGroup.TYPE_ANOMALY,[L.marker([-9.8314,25.9177],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-9.8314 : 25.9177"),L.marker([-82.2063,102.9305],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-82.2063 : 102.9305"),L.marker([57.6604,9.1422],{icon:L.KSP.Icon.ANOMALY}).bindPopup("57.6604 : 9.1422"),L.marker([2.4695,81.5133],{icon:L.KSP.Icon.ANOMALY}).bindPopup("2.4695 : 81.5133"),L.marker([12.4432,39.178],{icon:L.KSP.Icon.ANOMALY}).bindPopup("12.4432 : 39.1780"),L.marker([-12.4431,-140.822],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-12.4431 : -140.8220"),L.marker([.7027,22.747],{icon:L.KSP.Icon.ANOMALY}).bindPopup("0.7027 : 22.7470"),L.marker([-70.9556,-68.1378],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-70.9556,-68.1378")])}}),L.KSP.CelestialBody.MINMUS=L.KSP.celestialBody({id:"minmus",name:"Minmus",crs:L.KSP.CRS.EPSG4326,radius:6e4,addedOn:13682304e5,lastUpdated:13682304e5,thumbnail:"body-minmus.png",baseLayers:{Satellite:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SATELLITE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"sat",body:"minmus"}),"Color Relief":L.KSP.tileLayer(L.KSP.TileLayer.TYPE_COLORRELIEF,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"color",body:"minmus",legend:{"5750 m":"#414B41","2500 m":"#BEE6C3","1 m":"#96CDB4","0 m":"#87B9A5"}}),Slope:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SLOPE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"slope",body:"minmus",legend:L.KSP.Legend.SLOPE})},overlays:{Anomalies:L.KSP.layerGroup(L.KSP.LayerGroup.TYPE_ANOMALY,[L.marker([23.7768,60.0462],{icon:L.KSP.Icon.ANOMALY}).bindPopup("23.7768 : 60.0462")])}}),L.KSP.CelestialBody.DUNA=L.KSP.celestialBody({id:"duna",name:"Duna",crs:L.KSP.CRS.EPSG4326,radius:32e4,addedOn:13688352e5,lastUpdated:13688352e5,thumbnail:"body-duna.png",baseLayers:{Satellite:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SATELLITE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"sat",body:"duna"}),"Color Relief":L.KSP.tileLayer(L.KSP.TileLayer.TYPE_COLORRELIEF,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"color",body:"duna",legend:{"4800 m":"#C3A082","4000 m":"#966446","3000 m":"#733219","2000 m":"#501E14","1000 m":"#3C140F","0 m":"#280F0A"}}),Slope:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SLOPE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"slope",body:"duna",legend:L.KSP.Legend.SLOPE})},overlays:{Anomalies:L.KSP.layerGroup(L.KSP.LayerGroup.TYPE_ANOMALY,[L.marker([17.0483,-85.4717],{icon:L.KSP.Icon.ANOMALY}).bindPopup("17.0483 : -85.4717"),L.marker([-30.3525,-28.6828],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-30.3525 : -28.6828"),L.marker([-66.1344,-160.7432],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-66.1344 : -160.7432")])}}),L.KSP.CelestialBody.IKE=L.KSP.celestialBody({id:"ike",name:"Ike",crs:L.KSP.CRS.EPSG4326,radius:13e4,addedOn:13688352e5,lastUpdated:13688352e5,thumbnail:"body-ike.png",baseLayers:{Satellite:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SATELLITE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"sat",body:"ike"}),"Color Relief":L.KSP.tileLayer(L.KSP.TileLayer.TYPE_COLORRELIEF,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"color",body:"ike",legend:{"13000 m":"#828282","11000 m":"#6E6E6E","9000 m":"#5A5A5A","7000 m":"#464646","5000 m":"#323232","2500 m":"#191919","70 m":"#070707"}}),Slope:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SLOPE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"slope",body:"ike",legend:L.KSP.Legend.SLOPE})},overlays:{}}),L.KSP.CelestialBody.DRES=L.KSP.celestialBody({id:"dres",name:"Dres",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-dres.png"}),L.KSP.CelestialBody.JOOL=L.KSP.celestialBody({id:"jool",name:"Jool",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-jool.png"}),L.KSP.CelestialBody.LAYTHE=L.KSP.celestialBody({id:"laythe",name:"Laythe",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-laythe.png"}),L.KSP.CelestialBody.VALL=L.KSP.celestialBody({id:"vall",name:"Vall",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-vall.png"}),L.KSP.CelestialBody.TYLO=L.KSP.celestialBody({id:"tylo",name:"Tylo",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-tylo.png"}),L.KSP.CelestialBody.BOP=L.KSP.celestialBody({id:"bop",name:"Bop",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-bop.png"}),L.KSP.CelestialBody.POL=L.KSP.celestialBody({id:"pol",name:"Pol",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-pol.png"}),L.KSP.CelestialBody.EELOO=L.KSP.celestialBody({id:"eeloo",name:"Eeloo",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-eeloo.png"}),L.KSP.CelestialBody.KERBIN.defaultLayer=L.KSP.CelestialBody.KERBIN.baseLayers.Satellite,L.KSP.CelestialBody.MUN.defaultLayer=L.KSP.CelestialBody.MUN.baseLayers.Satellite,L.KSP.CelestialBody.MINMUS.defaultLayer=L.KSP.CelestialBody.MINMUS.baseLayers.Satellite,L.KSP.CelestialBody.EVE.children=[L.KSP.CelestialBody.GILLY],L.KSP.CelestialBody.KERBIN.children=[L.KSP.CelestialBody.MUN,L.KSP.CelestialBody.MINMUS],L.KSP.CelestialBody.DUNA.children=[L.KSP.CelestialBody.IKE],L.KSP.CelestialBody.JOOL.children=[L.KSP.CelestialBody.LAYTHE,L.KSP.CelestialBody.VALL,L.KSP.CelestialBody.TYLO,L.KSP.CelestialBody.BOP,L.KSP.CelestialBody.POL],L.KSP.CelestialBody.GILLY.parent=L.KSP.CelestialBody.EVE,L.KSP.CelestialBody.MUN.parent=L.KSP.CelestialBody.MINMUS.parent=L.KSP.CelestialBody.KERBIN,L.KSP.CelestialBody.IKE.parent=L.KSP.CelestialBody.DUNA,L.KSP.CelestialBody.LAYTHE.parent=L.KSP.CelestialBody.VALL.parent=L.KSP.CelestialBody.TYLO.parent=L.KSP.CelestialBody.BOP.parent=L.KSP.CelestialBody.POL.parent=L.KSP.CelestialBody.JOOL,L.KSP.CelestialBody.ALL_PLANETARY=[L.KSP.CelestialBody.MOHO,L.KSP.CelestialBody.EVE,L.KSP.CelestialBody.KERBIN,L.KSP.CelestialBody.DUNA,L.KSP.CelestialBody.DRES,L.KSP.CelestialBody.JOOL,L.KSP.CelestialBody.EELOO],L.KSP.Map.addInitHook(function(){this.options.layers=[L.KSP.CelestialBody.KERBIN]})}(this,document); +var Settings = Class.create({ + initialize: function(defaultHost, defaultPort){ + if(!this.getHost()){ this.setHost(defaultHost)} + if(!this.getPort()){ this.setPort(defaultPort)} + }, + + getHost: function(){ + return this.get('host') + }, + + getPort: function(){ + return this.get('port') + }, + + setHost: function(value){ + return this.set('host', value) + }, + + setPort: function(value){ + return this.set('port', value) + }, + + get: function(property){ + return localStorage.getItem(property) + }, + + set: function(property, value){ + return localStorage.setItem(property, value) + } +}) +var Telemachus = Class.create({ + initialize: function(host, port){ + this.updateConnection(host, port) + this.receiverFunctions = [] + this.subscribedFields = {} + this.orbitingBodies = this.getOrbitalBodies() + this.rate = 500 + + this.loopTimeout = setTimeout(this.poll.bind(this), this.rate) + }, + + url: function(){ + return "http://" + this.host + ":" + this.port + "/telemachus/datalink" + }, + + updateConnection: function(host, port){ + this.host = host + this.port = port + }, + + addReceiverFunction: function(func){ + this.receiverFunctions.push(func) + }, + + subscribeToData: function(fields){ + for (var i = fields.length - 1; i >= 0; i--) { + var field = fields[i] + this.subscribedFields[field] = field + }; + }, + + dispatchMessages: function(data){ + for (var i = this.receiverFunctions.length - 1; i >= 0; i--) { + try{ + this.receiverFunctions[i](data) + } catch(e){ + console.error(e) + } + }; + }, + + send: function(message){ + this.socket.send(JSON.stringify(message)) + }, + + getOrbitalBodyInfo: function(name){ + var properties = this.orbitingBodies[name] + + if(properties){ + return Object.extend({name: name}, properties) + } else{ + return null + } + }, + + notifyIfLOS: function(request){ + if(request.transport.status == 0){ + document.fire('telemachus:loss-of-signal') + return true + } + return false + }, + + prepareParams: function(params){ + var normalizedParams = [] + Object.keys(params).forEach(function(field){ + var sanitizedFieldName = field.replace("[", "{").replace("]","}") + normalizedParams.push(sanitizedFieldName + "=" + field) + }) + return normalizedParams + }, + + convertData: function(rawData){ + var data = {} + var startBracesRegexp = /\{/g + var endBracesRegexp = /\}/g + + Object.keys(rawData).forEach(function(key){ + var convertedFieldName = key.replace(startBracesRegexp, "[").replace(endBracesRegexp, "]") + data[convertedFieldName] = rawData[key] + }) + + return data + }, + + poll: function(){ + var params = this.prepareParams(this.subscribedFields) + var requestURL = this.url() + "?" + params.join("&") + + new Ajax.Request(requestURL, { + method: "get", + onSuccess: function(response){ + var rawData = JSON.parse(response.responseText) + var data = this.convertData(rawData) + + this.dispatchMessages(data) + }.bind(this), + onException: this.notifyIfLOS.bind(this), + onComplete: function(response){ + setTimeout(this.poll.bind(this),this.rate); + }.bind(this) + }) + }, + + sendMessage: function(params, callback){ + new Ajax.Request(this.url(), { + method: "post", + postBody: JSON.stringify(params), + // parameters: params, + onSuccess: function(response){ + var rawData = JSON.parse(response.responseText) + var data = this.convertData(rawData) + callback(data) + }.bind(this), + onException: this.notifyIfLOS.bind(this) + }) + }, + + cameraURL: function(){ + return "http://" + this.host + ":" + this.port + "/telemachus/cameras" + }, + + getCameraList: function(callback){ + new Ajax.Request(this.cameraURL(), { + method: "get", + // parameters: params, + onSuccess: function(response){ + var data = JSON.parse(response.responseText) + callback(data) + }.bind(this), + onException: this.notifyIfLOS.bind(this) + }) + }, + + getOrbitalBodies: function(){ + return { + "Sun" : { + id: 0, + referenceBodyName: null, + mapBody: null, + atmosphericRadius: 0, + color: '#FFFF00', + surfaceGravity: 17.1 //m/s^2, + }, + "Kerbin" : { + id: 1, + referenceBodyName: "Sun", + mapBody: L.KSP.CelestialBody.KERBIN, + atmosphericRadius: 70000, + color: '#4a5472', + surfaceGravity: 9.81 //m/s^2 + }, + "Mun" : { + id: 2, + referenceBodyName: "Kerbin", + mapBody: L.KSP.CelestialBody.MUN, + atmosphericRadius: 0, + color: '#e2e0d7', + surfaceGravity: 1.63 //m/s^2 + }, + "Minmus" : { + id: 3, + referenceBodyName: "Kerbin", + mapBody: L.KSP.CelestialBody.MINMUS, + color: '#98f2c5', + atmosphericRadius: 0, + surfaceGravity: 0.491 //m/s^2 + }, + "Moho" : { + id: 4, + referenceBodyName: "Sun", + mapBody: L.KSP.CelestialBody.MOHO, + atmosphericRadius: 0, + color: '#fdc39e', + surfaceGravity: 2.70 //m/s^2 + }, + "Eve" : { + id: 5, + referenceBodyName: "Sun", + mapBody: L.KSP.CelestialBody.EVE, + atmosphericRadius: 90000, + color: '#c394fe', + surfaceGravity: 16.7 //m/s^2 + }, + "Duna" : { + id: 6, + referenceBodyName: "Sun", + mapBody: L.KSP.CelestialBody.DUNA, + atmosphericRadius: 50000, + color: '#fc5e49', + surfaceGravity: 2.94 //m/s^2 + }, + "Ike" : { + id: 7, + referenceBodyName: "Duna", + mapBody: L.KSP.CelestialBody.IKE, + atmosphericRadius: 0, + color: '#e2e0d7', + surfaceGravity: 1.10 //m/s^2 + }, + "Jool" : { + id: 8, + referenceBodyName: "Sun", + mapBody: L.KSP.CelestialBody.JOOL, + atmosphericRadius: 200000, + color: '#C5DCAB', + surfaceGravity: 7.85 //m/s^2 + }, + "Laythe" : { + id: 9, + referenceBodyName: "Jool", + mapBody: L.KSP.CelestialBody.LAYTHE, + atmosphericRadius: 50000, + color: '#a8b4fe', + surfaceGravity: 7.85 //m/s^2 + }, + "Vall" : { + id: 10, + referenceBodyName: "Jool", + mapBody: L.KSP.CelestialBody.VALL, + atmosphericRadius: 0, + color: '#b0f4fe', + surfaceGravity: 2.31 //m/s^2 + }, + "Bop" : { + id: 11, + referenceBodyName: "Jool", + mapBody: L.KSP.CelestialBody.BOP, + atmosphericRadius: 0, + color: '#c64605', + surfaceGravity: 0.589 //m/s^2 + }, + "Tylo" : { + id: 12, + referenceBodyName: "Jool", + mapBody: L.KSP.CelestialBody.TYLO, + atmosphericRadius: 0, + color: '#fdf7ed', + surfaceGravity: 7.85 //m/s^2 + }, + "Gilly" : { + id: 13, + referenceBodyName: "Eve", + mapBody: L.KSP.CelestialBody.GILLY, + atmosphericRadius: 0, + color: '#fdcbb1', + surfaceGravity: 0.049 //m/s^2 + }, + "Pol" : { + id: 14, + referenceBodyName: "Pol", + mapBody: L.KSP.CelestialBody.POL, + atmosphericRadius: 0, + color: '#fec681', + surfaceGravity: 0.373 //m/s^2 + }, + "Dres" : { + id: 15, + referenceBodyName: "Sun", + mapBody: L.KSP.CelestialBody.DRES, + atmosphericRadius: 0, + color: '#fef8f9', + surfaceGravity: 1.13 //m/s^2 + }, + "Eeloo" : { + id: 16, + referenceBodyName: "Sun", + mapBody: L.KSP.CelestialBody.EELOO, + atmosphericRadius: 0, + color: '#e5fafe', + surfaceGravity: 1.69 //m/s^2 + } + } + } +}) +var TitleBar = Class.create({ + initialize: function(datalink, title_bar_id){ + this.datalink = datalink + this.title_bar_id = title_bar_id + this.title_bar = $(this.title_bar_id) + this.initializeLOSNotifier() + this.initializeDatalink() + }, + + update: function(data){ + window.requestAnimationFrame(function(){ + this.title_bar.down("#world-clock").update(TimeFormatters.formatUT(data["t.universalTime"])) + this.title_bar.down("#mission-time").update(TimeFormatters.formatMET(data["v.missionTime"])) + + this.title_bar.down("#mission-time").removeClassName("loss-of-signal") + }.bind(this)) + }, + + initializeLOSNotifier:function(){ + document.observe('telemachus:loss-of-signal', function(){ + window.requestAnimationFrame(function(){ + this.title_bar.down("#mission-time").update("⚠ LOS ⚠") + this.title_bar.down("#mission-time").addClassName("loss-of-signal") + }.bind(this)) + }.bind(this)) + }, + + initializeDatalink: function(){ + this.datalink.subscribeToData([ + 't.timeWarp', 't.universalTime', 'v.missionTime' + ]) + + this.datalink.addReceiverFunction(this.update.bind(this)) + }, +}) +var ButtonIndicator = Class.create({ + initialize: function(datalink, indicatorId, apiButtonString){ + this.datalink = datalink + this.indicatorId = indicatorId + this.indicator = $(this.indicatorId) + this.apiButtonString = apiButtonString + this.initializeDatalink() + }, + + update: function(data){ + if(data[this.apiButtonString] == true){ + this.indicator.addClassName("on") + } else{ + this.indicator.removeClassName("on") + } + }, + + initializeDatalink: function(){ + this.datalink.subscribeToData([this.apiButtonString]) + + this.datalink.addReceiverFunction(this.update.bind(this)) + }, +}) +var ReadoutTable = Class.create({ + initialize: function(datalink, tableId, dataRows){ + this.datalink = datalink + this.tableId = tableId + this.table = $(this.tableId) + this.dataRows = dataRows + this.initializeDatalink() + }, + + update: function(data){ + window.requestAnimationFrame(function(){ + this.dataRows.forEach(function(row){ + var rowId = row.label + var tableRow = this.table.down("tr[data-label='"+ rowId +"']") + + if(!tableRow){ + var tableRow = new Element("tr", { + "data-label" : rowId + }) + + tableRow.insert("" + row.label + "") + this.table.insert(tableRow) + } + + tableRow.down("td").update(row.formatter(data[row.value])) + }.bind(this)) + }.bind(this)) + }, + + initializeDatalink: function(){ + var dataValues = this.dataRows.map(function(dataRow){ + return dataRow.value + }) + + this.datalink.subscribeToData(dataValues) + + this.datalink.addReceiverFunction(this.update.bind(this)) + }, +}) +var ResourceMonitor = Class.create({ + initialize: function(datalink, resourceName, options){ + this.datalink = datalink + this.resourceName = resourceName + this.options = Object.extend({ + currentStageProgressBar: null, + totalProgressBar: null, + valuePrefix: null + }, options) + + this.resourceStrings = this.buildResourceStrings() + + this.initializeDatalink() + }, + + update: function(data){ + window.requestAnimationFrame(function(){ + if(this.options.totalProgressBar){ + this.options.totalProgressBar.value = data[this.resourceStrings.totalAvailable] + this.options.totalProgressBar.max = data[this.resourceStrings.totalMax] + } + + if(this.options.currentStageProgressBar){ + this.options.currentStageProgressBar.value = data[this.resourceStrings.currentStageAvailable] + this.options.currentStageProgressBar.max = data[this.resourceStrings.currentStageMax] + } + + this.updateValue("-total-value", data[this.resourceStrings.totalAvailable]) + this.updateValue("-total-max", data[this.resourceStrings.totalMax]) + + this.updateValue("-current-stage-value", data[this.resourceStrings.currentStageAvailable]) + this.updateValue("-current-stage-max", data[this.resourceStrings.currentStageMax]) + }.bind(this)) + }, + + updateValue: function(id, value){ + if($(this.options.valuePrefix + id)){ + if(value < 0){ + $(this.options.valuePrefix + id).update("NA") + } else{ + $(this.options.valuePrefix + id).update(value.toFixed(2)) + } + } + }, + + buildResourceStrings: function(){ + return { + totalAvailable: "r.resource["+ this.resourceName +"]", + totalMax: "r.resourceMax["+ this.resourceName +"]", + currentStageAvailable: "r.resourceCurrent["+ this.resourceName +"]", + currentStageMax: "r.resourceCurrentMax["+ this.resourceName +"]", + } + }, + + initializeDatalink: function(){ + this.datalink.subscribeToData([ + this.resourceStrings.totalAvailable, + this.resourceStrings.totalMax, + this.resourceStrings.currentStageAvailable, + this.resourceStrings.currentStageMax + ]) + + this.datalink.addReceiverFunction(this.update.bind(this)) + }, +}) +var DataTable = Class.create({ + initialize: function(tableID, dataRows){ + this.tableID = tableID + this.table = $(this.tableID) + this.dataRows = dataRows + }, + + update: function(){ + window.requestAnimationFrame(function(){ + this.dataRows.forEach(function(row){ + var rowId = row.label + var tableRow = this.table.down("tr[data-label='"+ rowId +"']") + + if(!tableRow){ + var tableRow = new Element("tr", { + "data-label" : rowId + }) + + tableRow.insert("" + row.label + "") + this.table.insert(tableRow) + } + + tableRow.down("td").update(row.value) + }.bind(this)) + }.bind(this)) + }, + + clear: function(){ + window.requestAnimationFrame(function(){ + this.dataRows = [] + this.table.innerHTML = "" + }.bind(this)) + } +}) +var AtmosphericDensityGauge = Class.create({ + initialize: function(datalink, gaugeID){ + this.datalink = datalink + this.gaugeID = gaugeID + this.gauge = $(this.gaugeID) + this.initializeDatalink() + this.func = function(x){return Math.log(2.0 * x)} + }, + + update: function(data){ + var max = this.func(100) + var value = this.func(data['v.atmosphericPressure'] * 100) + if(!isFinite(value)){ value = 0 } + + this.gauge.value = value + this.gauge.max = max + }, + + initializeDatalink: function(){ + this.datalink.subscribeToData(['v.atmosphericPressure']) + + this.datalink.addReceiverFunction(this.update.bind(this)) + }, +}) +var ThrottleGauge = Class.create({ + initialize: function(datalink, gaugeID){ + this.datalink = datalink + this.gaugeID = gaugeID + this.gauge = $(this.gaugeID) + this.initializeDatalink() + }, + + update: function(data){ + this.gauge.value = data['f.throttle'] * 100 + this.gauge.max = 100 + }, + + initializeDatalink: function(){ + this.datalink.subscribeToData(['f.throttle']) + + this.datalink.addReceiverFunction(this.update.bind(this)) + }, +}) +// threejs.org/license +'use strict';var THREE={REVISION:"75"};"function"===typeof define&&define.amd?define("three",THREE):"undefined"!==typeof exports&&"undefined"!==typeof module&&(module.exports=THREE);void 0===Number.EPSILON&&(Number.EPSILON=Math.pow(2,-52));void 0===Math.sign&&(Math.sign=function(a){return 0>a?-1:0>16&255)/255;this.g=(a>>8&255)/255;this.b=(a&255)/255;return this},setRGB:function(a,b,c){this.r=a;this.g=b;this.b=c;return this},setHSL:function(){function a(a,c,d){0>d&&(d+=1);1d?c:d<2/3?a+6*(c-a)*(2/3-d):a}return function(b,c,d){b=THREE.Math.euclideanModulo(b,1);c=THREE.Math.clamp(c,0,1);d=THREE.Math.clamp(d,0,1);0===c?this.r=this.g=this.b=d:(c=.5>=d?d*(1+c):d+c-d*c,d=2*d-c,this.r=a(d,c,b+1/3),this.g=a(d,c,b),this.b=a(d,c,b-1/3));return this}}(),setStyle:function(a){function b(b){void 0!==b&&1>parseFloat(b)&&console.warn("THREE.Color: Alpha component of "+a+" will be ignored.")}var c;if(c=/^((?:rgb|hsl)a?)\(\s*([^\)]*)\)/.exec(a)){var d=c[2];switch(c[1]){case "rgb":case "rgba":if(c= +/^(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(d))return this.r=Math.min(255,parseInt(c[1],10))/255,this.g=Math.min(255,parseInt(c[2],10))/255,this.b=Math.min(255,parseInt(c[3],10))/255,b(c[5]),this;if(c=/^(\d+)\%\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(d))return this.r=Math.min(100,parseInt(c[1],10))/100,this.g=Math.min(100,parseInt(c[2],10))/100,this.b=Math.min(100,parseInt(c[3],10))/100,b(c[5]),this;break;case "hsl":case "hsla":if(c=/^([0-9]*\.?[0-9]+)\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(d)){var d= +parseFloat(c[1])/360,e=parseInt(c[2],10)/100,f=parseInt(c[3],10)/100;b(c[5]);return this.setHSL(d,e,f)}}}else if(c=/^\#([A-Fa-f0-9]+)$/.exec(a)){c=c[1];d=c.length;if(3===d)return this.r=parseInt(c.charAt(0)+c.charAt(0),16)/255,this.g=parseInt(c.charAt(1)+c.charAt(1),16)/255,this.b=parseInt(c.charAt(2)+c.charAt(2),16)/255,this;if(6===d)return this.r=parseInt(c.charAt(0)+c.charAt(1),16)/255,this.g=parseInt(c.charAt(2)+c.charAt(3),16)/255,this.b=parseInt(c.charAt(4)+c.charAt(5),16)/255,this}a&&0=h?k/(e+f):k/(2-e-f);switch(e){case b:g=(c-d)/k+(cf&&c>b?(c=2*Math.sqrt(1+c-f-b),this._w=(k-g)/c,this._x=.25*c,this._y=(a+e)/c,this._z=(d+h)/c):f>b?(c=2*Math.sqrt(1+f-c-b),this._w=(d-h)/c,this._x=(a+e)/c,this._y= +.25*c,this._z=(g+k)/c):(c=2*Math.sqrt(1+b-c-f),this._w=(e-a)/c,this._x=(d+h)/c,this._y=(g+k)/c,this._z=.25*c);this.onChangeCallback();return this},setFromUnitVectors:function(){var a,b;return function(c,d){void 0===a&&(a=new THREE.Vector3);b=c.dot(d)+1;1E-6>b?(b=0,Math.abs(c.x)>Math.abs(c.z)?a.set(-c.y,c.x,0):a.set(0,-c.z,c.y)):a.crossVectors(c,d);this._x=a.x;this._y=a.y;this._z=a.z;this._w=b;this.normalize();return this}}(),inverse:function(){this.conjugate().normalize();return this},conjugate:function(){this._x*= +-1;this._y*=-1;this._z*=-1;this.onChangeCallback();return this},dot:function(a){return this._x*a._x+this._y*a._y+this._z*a._z+this._w*a._w},lengthSq:function(){return this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w},length:function(){return Math.sqrt(this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w)},normalize:function(){var a=this.length();0===a?(this._z=this._y=this._x=0,this._w=1):(a=1/a,this._x*=a,this._y*=a,this._z*=a,this._w*=a);this.onChangeCallback();return this}, +multiply:function(a,b){return void 0!==b?(console.warn("THREE.Quaternion: .multiply() now only accepts one argument. Use .multiplyQuaternions( a, b ) instead."),this.multiplyQuaternions(a,b)):this.multiplyQuaternions(this,a)},multiplyQuaternions:function(a,b){var c=a._x,d=a._y,e=a._z,f=a._w,g=b._x,h=b._y,k=b._z,l=b._w;this._x=c*l+f*g+d*k-e*h;this._y=d*l+f*h+e*g-c*k;this._z=e*l+f*k+c*h-d*g;this._w=f*l-c*g-d*h-e*k;this.onChangeCallback();return this},slerp:function(a,b){if(0===b)return this;if(1=== +b)return this.copy(a);var c=this._x,d=this._y,e=this._z,f=this._w,g=f*a._w+c*a._x+d*a._y+e*a._z;0>g?(this._w=-a._w,this._x=-a._x,this._y=-a._y,this._z=-a._z,g=-g):this.copy(a);if(1<=g)return this._w=f,this._x=c,this._y=d,this._z=e,this;var h=Math.sqrt(1-g*g);if(.001>Math.abs(h))return this._w=.5*(f+this._w),this._x=.5*(c+this._x),this._y=.5*(d+this._y),this._z=.5*(e+this._z),this;var k=Math.atan2(h,g),g=Math.sin((1-b)*k)/h,h=Math.sin(b*k)/h;this._w=f*g+this._w*h;this._x=c*g+this._x*h;this._y=d*g+ +this._y*h;this._z=e*g+this._z*h;this.onChangeCallback();return this},equals:function(a){return a._x===this._x&&a._y===this._y&&a._z===this._z&&a._w===this._w},fromArray:function(a,b){void 0===b&&(b=0);this._x=a[b];this._y=a[b+1];this._z=a[b+2];this._w=a[b+3];this.onChangeCallback();return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);a[b]=this._x;a[b+1]=this._y;a[b+2]=this._z;a[b+3]=this._w;return a},onChange:function(a){this.onChangeCallback=a;return this},onChangeCallback:function(){}}; +Object.assign(THREE.Quaternion,{slerp:function(a,b,c,d){return c.copy(a).slerp(b,d)},slerpFlat:function(a,b,c,d,e,f,g){var h=c[d+0],k=c[d+1],l=c[d+2];c=c[d+3];d=e[f+0];var p=e[f+1],n=e[f+2];e=e[f+3];if(c!==e||h!==d||k!==p||l!==n){f=1-g;var m=h*d+k*p+l*n+c*e,q=0<=m?1:-1,u=1-m*m;u>Number.EPSILON&&(u=Math.sqrt(u),m=Math.atan2(u,m*q),f=Math.sin(f*m)/u,g=Math.sin(g*m)/u);q*=g;h=h*f+d*q;k=k*f+p*q;l=l*f+n*q;c=c*f+e*q;f===1-g&&(g=1/Math.sqrt(h*h+k*k+l*l+c*c),h*=g,k*=g,l*=g,c*=g)}a[b]=h;a[b+1]=k;a[b+2]=l; +a[b+3]=c}});THREE.Vector2=function(a,b){this.x=a||0;this.y=b||0}; +THREE.Vector2.prototype={constructor:THREE.Vector2,get width(){return this.x},set width(a){this.x=a},get height(){return this.y},set height(a){this.y=a},set:function(a,b){this.x=a;this.y=b;return this},setScalar:function(a){this.y=this.x=a;return this},setX:function(a){this.x=a;return this},setY:function(a){this.y=a;return this},setComponent:function(a,b){switch(a){case 0:this.x=b;break;case 1:this.y=b;break;default:throw Error("index is out of range: "+a);}},getComponent:function(a){switch(a){case 0:return this.x; +case 1:return this.y;default:throw Error("index is out of range: "+a);}},clone:function(){return new this.constructor(this.x,this.y)},copy:function(a){this.x=a.x;this.y=a.y;return this},add:function(a,b){if(void 0!==b)return console.warn("THREE.Vector2: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(a,b);this.x+=a.x;this.y+=a.y;return this},addScalar:function(a){this.x+=a;this.y+=a;return this},addVectors:function(a,b){this.x=a.x+b.x;this.y=a.y+b.y;return this}, +addScaledVector:function(a,b){this.x+=a.x*b;this.y+=a.y*b;return this},sub:function(a,b){if(void 0!==b)return console.warn("THREE.Vector2: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(a,b);this.x-=a.x;this.y-=a.y;return this},subScalar:function(a){this.x-=a;this.y-=a;return this},subVectors:function(a,b){this.x=a.x-b.x;this.y=a.y-b.y;return this},multiply:function(a){this.x*=a.x;this.y*=a.y;return this},multiplyScalar:function(a){isFinite(a)?(this.x*=a, +this.y*=a):this.y=this.x=0;return this},divide:function(a){this.x/=a.x;this.y/=a.y;return this},divideScalar:function(a){return this.multiplyScalar(1/a)},min:function(a){this.x=Math.min(this.x,a.x);this.y=Math.min(this.y,a.y);return this},max:function(a){this.x=Math.max(this.x,a.x);this.y=Math.max(this.y,a.y);return this},clamp:function(a,b){this.x=Math.max(a.x,Math.min(b.x,this.x));this.y=Math.max(a.y,Math.min(b.y,this.y));return this},clampScalar:function(){var a,b;return function(c,d){void 0=== +a&&(a=new THREE.Vector2,b=new THREE.Vector2);a.set(c,c);b.set(d,d);return this.clamp(a,b)}}(),clampLength:function(a,b){var c=this.length();this.multiplyScalar(Math.max(a,Math.min(b,c))/c);return this},floor:function(){this.x=Math.floor(this.x);this.y=Math.floor(this.y);return this},ceil:function(){this.x=Math.ceil(this.x);this.y=Math.ceil(this.y);return this},round:function(){this.x=Math.round(this.x);this.y=Math.round(this.y);return this},roundToZero:function(){this.x=0>this.x?Math.ceil(this.x): +Math.floor(this.x);this.y=0>this.y?Math.ceil(this.y):Math.floor(this.y);return this},negate:function(){this.x=-this.x;this.y=-this.y;return this},dot:function(a){return this.x*a.x+this.y*a.y},lengthSq:function(){return this.x*this.x+this.y*this.y},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y)},lengthManhattan:function(){return Math.abs(this.x)+Math.abs(this.y)},normalize:function(){return this.divideScalar(this.length())},angle:function(){var a=Math.atan2(this.y,this.x);0>a&&(a+= +2*Math.PI);return a},distanceTo:function(a){return Math.sqrt(this.distanceToSquared(a))},distanceToSquared:function(a){var b=this.x-a.x;a=this.y-a.y;return b*b+a*a},setLength:function(a){return this.multiplyScalar(a/this.length())},lerp:function(a,b){this.x+=(a.x-this.x)*b;this.y+=(a.y-this.y)*b;return this},lerpVectors:function(a,b,c){this.subVectors(b,a).multiplyScalar(c).add(a);return this},equals:function(a){return a.x===this.x&&a.y===this.y},fromArray:function(a,b){void 0===b&&(b=0);this.x=a[b]; +this.y=a[b+1];return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);a[b]=this.x;a[b+1]=this.y;return a},fromAttribute:function(a,b,c){void 0===c&&(c=0);b=b*a.itemSize+c;this.x=a.array[b];this.y=a.array[b+1];return this},rotateAround:function(a,b){var c=Math.cos(b),d=Math.sin(b),e=this.x-a.x,f=this.y-a.y;this.x=e*c-f*d+a.x;this.y=e*d+f*c+a.y;return this}};THREE.Vector3=function(a,b,c){this.x=a||0;this.y=b||0;this.z=c||0}; +THREE.Vector3.prototype={constructor:THREE.Vector3,set:function(a,b,c){this.x=a;this.y=b;this.z=c;return this},setScalar:function(a){this.z=this.y=this.x=a;return this},setX:function(a){this.x=a;return this},setY:function(a){this.y=a;return this},setZ:function(a){this.z=a;return this},setComponent:function(a,b){switch(a){case 0:this.x=b;break;case 1:this.y=b;break;case 2:this.z=b;break;default:throw Error("index is out of range: "+a);}},getComponent:function(a){switch(a){case 0:return this.x;case 1:return this.y; +case 2:return this.z;default:throw Error("index is out of range: "+a);}},clone:function(){return new this.constructor(this.x,this.y,this.z)},copy:function(a){this.x=a.x;this.y=a.y;this.z=a.z;return this},add:function(a,b){if(void 0!==b)return console.warn("THREE.Vector3: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(a,b);this.x+=a.x;this.y+=a.y;this.z+=a.z;return this},addScalar:function(a){this.x+=a;this.y+=a;this.z+=a;return this},addVectors:function(a, +b){this.x=a.x+b.x;this.y=a.y+b.y;this.z=a.z+b.z;return this},addScaledVector:function(a,b){this.x+=a.x*b;this.y+=a.y*b;this.z+=a.z*b;return this},sub:function(a,b){if(void 0!==b)return console.warn("THREE.Vector3: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(a,b);this.x-=a.x;this.y-=a.y;this.z-=a.z;return this},subScalar:function(a){this.x-=a;this.y-=a;this.z-=a;return this},subVectors:function(a,b){this.x=a.x-b.x;this.y=a.y-b.y;this.z=a.z-b.z;return this}, +multiply:function(a,b){if(void 0!==b)return console.warn("THREE.Vector3: .multiply() now only accepts one argument. Use .multiplyVectors( a, b ) instead."),this.multiplyVectors(a,b);this.x*=a.x;this.y*=a.y;this.z*=a.z;return this},multiplyScalar:function(a){isFinite(a)?(this.x*=a,this.y*=a,this.z*=a):this.z=this.y=this.x=0;return this},multiplyVectors:function(a,b){this.x=a.x*b.x;this.y=a.y*b.y;this.z=a.z*b.z;return this},applyEuler:function(){var a;return function(b){!1===b instanceof THREE.Euler&& +console.error("THREE.Vector3: .applyEuler() now expects an Euler rotation rather than a Vector3 and order.");void 0===a&&(a=new THREE.Quaternion);this.applyQuaternion(a.setFromEuler(b));return this}}(),applyAxisAngle:function(){var a;return function(b,c){void 0===a&&(a=new THREE.Quaternion);this.applyQuaternion(a.setFromAxisAngle(b,c));return this}}(),applyMatrix3:function(a){var b=this.x,c=this.y,d=this.z;a=a.elements;this.x=a[0]*b+a[3]*c+a[6]*d;this.y=a[1]*b+a[4]*c+a[7]*d;this.z=a[2]*b+a[5]*c+a[8]* +d;return this},applyMatrix4:function(a){var b=this.x,c=this.y,d=this.z;a=a.elements;this.x=a[0]*b+a[4]*c+a[8]*d+a[12];this.y=a[1]*b+a[5]*c+a[9]*d+a[13];this.z=a[2]*b+a[6]*c+a[10]*d+a[14];return this},applyProjection:function(a){var b=this.x,c=this.y,d=this.z;a=a.elements;var e=1/(a[3]*b+a[7]*c+a[11]*d+a[15]);this.x=(a[0]*b+a[4]*c+a[8]*d+a[12])*e;this.y=(a[1]*b+a[5]*c+a[9]*d+a[13])*e;this.z=(a[2]*b+a[6]*c+a[10]*d+a[14])*e;return this},applyQuaternion:function(a){var b=this.x,c=this.y,d=this.z,e=a.x, +f=a.y,g=a.z;a=a.w;var h=a*b+f*d-g*c,k=a*c+g*b-e*d,l=a*d+e*c-f*b,b=-e*b-f*c-g*d;this.x=h*a+b*-e+k*-g-l*-f;this.y=k*a+b*-f+l*-e-h*-g;this.z=l*a+b*-g+h*-f-k*-e;return this},project:function(){var a;return function(b){void 0===a&&(a=new THREE.Matrix4);a.multiplyMatrices(b.projectionMatrix,a.getInverse(b.matrixWorld));return this.applyProjection(a)}}(),unproject:function(){var a;return function(b){void 0===a&&(a=new THREE.Matrix4);a.multiplyMatrices(b.matrixWorld,a.getInverse(b.projectionMatrix));return this.applyProjection(a)}}(), +transformDirection:function(a){var b=this.x,c=this.y,d=this.z;a=a.elements;this.x=a[0]*b+a[4]*c+a[8]*d;this.y=a[1]*b+a[5]*c+a[9]*d;this.z=a[2]*b+a[6]*c+a[10]*d;this.normalize();return this},divide:function(a){this.x/=a.x;this.y/=a.y;this.z/=a.z;return this},divideScalar:function(a){return this.multiplyScalar(1/a)},min:function(a){this.x=Math.min(this.x,a.x);this.y=Math.min(this.y,a.y);this.z=Math.min(this.z,a.z);return this},max:function(a){this.x=Math.max(this.x,a.x);this.y=Math.max(this.y,a.y); +this.z=Math.max(this.z,a.z);return this},clamp:function(a,b){this.x=Math.max(a.x,Math.min(b.x,this.x));this.y=Math.max(a.y,Math.min(b.y,this.y));this.z=Math.max(a.z,Math.min(b.z,this.z));return this},clampScalar:function(){var a,b;return function(c,d){void 0===a&&(a=new THREE.Vector3,b=new THREE.Vector3);a.set(c,c,c);b.set(d,d,d);return this.clamp(a,b)}}(),clampLength:function(a,b){var c=this.length();this.multiplyScalar(Math.max(a,Math.min(b,c))/c);return this},floor:function(){this.x=Math.floor(this.x); +this.y=Math.floor(this.y);this.z=Math.floor(this.z);return this},ceil:function(){this.x=Math.ceil(this.x);this.y=Math.ceil(this.y);this.z=Math.ceil(this.z);return this},round:function(){this.x=Math.round(this.x);this.y=Math.round(this.y);this.z=Math.round(this.z);return this},roundToZero:function(){this.x=0>this.x?Math.ceil(this.x):Math.floor(this.x);this.y=0>this.y?Math.ceil(this.y):Math.floor(this.y);this.z=0>this.z?Math.ceil(this.z):Math.floor(this.z);return this},negate:function(){this.x=-this.x; +this.y=-this.y;this.z=-this.z;return this},dot:function(a){return this.x*a.x+this.y*a.y+this.z*a.z},lengthSq:function(){return this.x*this.x+this.y*this.y+this.z*this.z},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)},lengthManhattan:function(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)},normalize:function(){return this.divideScalar(this.length())},setLength:function(a){return this.multiplyScalar(a/this.length())},lerp:function(a,b){this.x+=(a.x-this.x)* +b;this.y+=(a.y-this.y)*b;this.z+=(a.z-this.z)*b;return this},lerpVectors:function(a,b,c){this.subVectors(b,a).multiplyScalar(c).add(a);return this},cross:function(a,b){if(void 0!==b)return console.warn("THREE.Vector3: .cross() now only accepts one argument. Use .crossVectors( a, b ) instead."),this.crossVectors(a,b);var c=this.x,d=this.y,e=this.z;this.x=d*a.z-e*a.y;this.y=e*a.x-c*a.z;this.z=c*a.y-d*a.x;return this},crossVectors:function(a,b){var c=a.x,d=a.y,e=a.z,f=b.x,g=b.y,h=b.z;this.x=d*h-e*g; +this.y=e*f-c*h;this.z=c*g-d*f;return this},projectOnVector:function(){var a,b;return function(c){void 0===a&&(a=new THREE.Vector3);a.copy(c).normalize();b=this.dot(a);return this.copy(a).multiplyScalar(b)}}(),projectOnPlane:function(){var a;return function(b){void 0===a&&(a=new THREE.Vector3);a.copy(this).projectOnVector(b);return this.sub(a)}}(),reflect:function(){var a;return function(b){void 0===a&&(a=new THREE.Vector3);return this.sub(a.copy(b).multiplyScalar(2*this.dot(b)))}}(),angleTo:function(a){a= +this.dot(a)/Math.sqrt(this.lengthSq()*a.lengthSq());return Math.acos(THREE.Math.clamp(a,-1,1))},distanceTo:function(a){return Math.sqrt(this.distanceToSquared(a))},distanceToSquared:function(a){var b=this.x-a.x,c=this.y-a.y;a=this.z-a.z;return b*b+c*c+a*a},setFromSpherical:function(a){var b=Math.sin(a.phi)*a.radius;this.x=b*Math.sin(a.theta);this.y=Math.cos(a.phi)*a.radius;this.z=b*Math.cos(a.theta);return this},setFromMatrixPosition:function(a){return this.setFromMatrixColumn(a,3)},setFromMatrixScale:function(a){var b= +this.setFromMatrixColumn(a,0).length(),c=this.setFromMatrixColumn(a,1).length();a=this.setFromMatrixColumn(a,2).length();this.x=b;this.y=c;this.z=a;return this},setFromMatrixColumn:function(a,b){"number"===typeof a&&(console.warn("THREE.Vector3: setFromMatrixColumn now expects ( matrix, index )."),b=a=b);return this.fromArray(a.elements,4*b)},equals:function(a){return a.x===this.x&&a.y===this.y&&a.z===this.z},fromArray:function(a,b){void 0===b&&(b=0);this.x=a[b];this.y=a[b+1];this.z=a[b+2];return this}, +toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);a[b]=this.x;a[b+1]=this.y;a[b+2]=this.z;return a},fromAttribute:function(a,b,c){void 0===c&&(c=0);b=b*a.itemSize+c;this.x=a.array[b];this.y=a.array[b+1];this.z=a.array[b+2];return this}};THREE.Vector4=function(a,b,c,d){this.x=a||0;this.y=b||0;this.z=c||0;this.w=void 0!==d?d:1}; +THREE.Vector4.prototype={constructor:THREE.Vector4,set:function(a,b,c,d){this.x=a;this.y=b;this.z=c;this.w=d;return this},setScalar:function(a){this.w=this.z=this.y=this.x=a;return this},setX:function(a){this.x=a;return this},setY:function(a){this.y=a;return this},setZ:function(a){this.z=a;return this},setW:function(a){this.w=a;return this},setComponent:function(a,b){switch(a){case 0:this.x=b;break;case 1:this.y=b;break;case 2:this.z=b;break;case 3:this.w=b;break;default:throw Error("index is out of range: "+ +a);}},getComponent:function(a){switch(a){case 0:return this.x;case 1:return this.y;case 2:return this.z;case 3:return this.w;default:throw Error("index is out of range: "+a);}},clone:function(){return new this.constructor(this.x,this.y,this.z,this.w)},copy:function(a){this.x=a.x;this.y=a.y;this.z=a.z;this.w=void 0!==a.w?a.w:1;return this},add:function(a,b){if(void 0!==b)return console.warn("THREE.Vector4: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(a,b); +this.x+=a.x;this.y+=a.y;this.z+=a.z;this.w+=a.w;return this},addScalar:function(a){this.x+=a;this.y+=a;this.z+=a;this.w+=a;return this},addVectors:function(a,b){this.x=a.x+b.x;this.y=a.y+b.y;this.z=a.z+b.z;this.w=a.w+b.w;return this},addScaledVector:function(a,b){this.x+=a.x*b;this.y+=a.y*b;this.z+=a.z*b;this.w+=a.w*b;return this},sub:function(a,b){if(void 0!==b)return console.warn("THREE.Vector4: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(a,b);this.x-= +a.x;this.y-=a.y;this.z-=a.z;this.w-=a.w;return this},subScalar:function(a){this.x-=a;this.y-=a;this.z-=a;this.w-=a;return this},subVectors:function(a,b){this.x=a.x-b.x;this.y=a.y-b.y;this.z=a.z-b.z;this.w=a.w-b.w;return this},multiplyScalar:function(a){isFinite(a)?(this.x*=a,this.y*=a,this.z*=a,this.w*=a):this.w=this.z=this.y=this.x=0;return this},applyMatrix4:function(a){var b=this.x,c=this.y,d=this.z,e=this.w;a=a.elements;this.x=a[0]*b+a[4]*c+a[8]*d+a[12]*e;this.y=a[1]*b+a[5]*c+a[9]*d+a[13]*e;this.z= +a[2]*b+a[6]*c+a[10]*d+a[14]*e;this.w=a[3]*b+a[7]*c+a[11]*d+a[15]*e;return this},divideScalar:function(a){return this.multiplyScalar(1/a)},setAxisAngleFromQuaternion:function(a){this.w=2*Math.acos(a.w);var b=Math.sqrt(1-a.w*a.w);1E-4>b?(this.x=1,this.z=this.y=0):(this.x=a.x/b,this.y=a.y/b,this.z=a.z/b);return this},setAxisAngleFromRotationMatrix:function(a){var b,c,d;a=a.elements;var e=a[0];d=a[4];var f=a[8],g=a[1],h=a[5],k=a[9];c=a[2];b=a[6];var l=a[10];if(.01>Math.abs(d-g)&&.01>Math.abs(f-c)&&.01> +Math.abs(k-b)){if(.1>Math.abs(d+g)&&.1>Math.abs(f+c)&&.1>Math.abs(k+b)&&.1>Math.abs(e+h+l-3))return this.set(1,0,0,0),this;a=Math.PI;e=(e+1)/2;h=(h+1)/2;l=(l+1)/2;d=(d+g)/4;f=(f+c)/4;k=(k+b)/4;e>h&&e>l?.01>e?(b=0,d=c=.707106781):(b=Math.sqrt(e),c=d/b,d=f/b):h>l?.01>h?(b=.707106781,c=0,d=.707106781):(c=Math.sqrt(h),b=d/c,d=k/c):.01>l?(c=b=.707106781,d=0):(d=Math.sqrt(l),b=f/d,c=k/d);this.set(b,c,d,a);return this}a=Math.sqrt((b-k)*(b-k)+(f-c)*(f-c)+(g-d)*(g-d));.001>Math.abs(a)&&(a=1);this.x=(b-k)/ +a;this.y=(f-c)/a;this.z=(g-d)/a;this.w=Math.acos((e+h+l-1)/2);return this},min:function(a){this.x=Math.min(this.x,a.x);this.y=Math.min(this.y,a.y);this.z=Math.min(this.z,a.z);this.w=Math.min(this.w,a.w);return this},max:function(a){this.x=Math.max(this.x,a.x);this.y=Math.max(this.y,a.y);this.z=Math.max(this.z,a.z);this.w=Math.max(this.w,a.w);return this},clamp:function(a,b){this.x=Math.max(a.x,Math.min(b.x,this.x));this.y=Math.max(a.y,Math.min(b.y,this.y));this.z=Math.max(a.z,Math.min(b.z,this.z)); +this.w=Math.max(a.w,Math.min(b.w,this.w));return this},clampScalar:function(){var a,b;return function(c,d){void 0===a&&(a=new THREE.Vector4,b=new THREE.Vector4);a.set(c,c,c,c);b.set(d,d,d,d);return this.clamp(a,b)}}(),floor:function(){this.x=Math.floor(this.x);this.y=Math.floor(this.y);this.z=Math.floor(this.z);this.w=Math.floor(this.w);return this},ceil:function(){this.x=Math.ceil(this.x);this.y=Math.ceil(this.y);this.z=Math.ceil(this.z);this.w=Math.ceil(this.w);return this},round:function(){this.x= +Math.round(this.x);this.y=Math.round(this.y);this.z=Math.round(this.z);this.w=Math.round(this.w);return this},roundToZero:function(){this.x=0>this.x?Math.ceil(this.x):Math.floor(this.x);this.y=0>this.y?Math.ceil(this.y):Math.floor(this.y);this.z=0>this.z?Math.ceil(this.z):Math.floor(this.z);this.w=0>this.w?Math.ceil(this.w):Math.floor(this.w);return this},negate:function(){this.x=-this.x;this.y=-this.y;this.z=-this.z;this.w=-this.w;return this},dot:function(a){return this.x*a.x+this.y*a.y+this.z* +a.z+this.w*a.w},lengthSq:function(){return this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w)},lengthManhattan:function(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)+Math.abs(this.w)},normalize:function(){return this.divideScalar(this.length())},setLength:function(a){return this.multiplyScalar(a/this.length())},lerp:function(a,b){this.x+=(a.x-this.x)*b;this.y+=(a.y-this.y)*b;this.z+=(a.z- +this.z)*b;this.w+=(a.w-this.w)*b;return this},lerpVectors:function(a,b,c){this.subVectors(b,a).multiplyScalar(c).add(a);return this},equals:function(a){return a.x===this.x&&a.y===this.y&&a.z===this.z&&a.w===this.w},fromArray:function(a,b){void 0===b&&(b=0);this.x=a[b];this.y=a[b+1];this.z=a[b+2];this.w=a[b+3];return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);a[b]=this.x;a[b+1]=this.y;a[b+2]=this.z;a[b+3]=this.w;return a},fromAttribute:function(a,b,c){void 0===c&&(c=0);b=b*a.itemSize+ +c;this.x=a.array[b];this.y=a.array[b+1];this.z=a.array[b+2];this.w=a.array[b+3];return this}};THREE.Euler=function(a,b,c,d){this._x=a||0;this._y=b||0;this._z=c||0;this._order=d||THREE.Euler.DefaultOrder};THREE.Euler.RotationOrders="XYZ YZX ZXY XZY YXZ ZYX".split(" ");THREE.Euler.DefaultOrder="XYZ"; +THREE.Euler.prototype={constructor:THREE.Euler,get x(){return this._x},set x(a){this._x=a;this.onChangeCallback()},get y(){return this._y},set y(a){this._y=a;this.onChangeCallback()},get z(){return this._z},set z(a){this._z=a;this.onChangeCallback()},get order(){return this._order},set order(a){this._order=a;this.onChangeCallback()},set:function(a,b,c,d){this._x=a;this._y=b;this._z=c;this._order=d||this._order;this.onChangeCallback();return this},clone:function(){return new this.constructor(this._x, +this._y,this._z,this._order)},copy:function(a){this._x=a._x;this._y=a._y;this._z=a._z;this._order=a._order;this.onChangeCallback();return this},setFromRotationMatrix:function(a,b,c){var d=THREE.Math.clamp,e=a.elements;a=e[0];var f=e[4],g=e[8],h=e[1],k=e[5],l=e[9],p=e[2],n=e[6],e=e[10];b=b||this._order;"XYZ"===b?(this._y=Math.asin(d(g,-1,1)),.99999>Math.abs(g)?(this._x=Math.atan2(-l,e),this._z=Math.atan2(-f,a)):(this._x=Math.atan2(n,k),this._z=0)):"YXZ"===b?(this._x=Math.asin(-d(l,-1,1)),.99999>Math.abs(l)? +(this._y=Math.atan2(g,e),this._z=Math.atan2(h,k)):(this._y=Math.atan2(-p,a),this._z=0)):"ZXY"===b?(this._x=Math.asin(d(n,-1,1)),.99999>Math.abs(n)?(this._y=Math.atan2(-p,e),this._z=Math.atan2(-f,k)):(this._y=0,this._z=Math.atan2(h,a))):"ZYX"===b?(this._y=Math.asin(-d(p,-1,1)),.99999>Math.abs(p)?(this._x=Math.atan2(n,e),this._z=Math.atan2(h,a)):(this._x=0,this._z=Math.atan2(-f,k))):"YZX"===b?(this._z=Math.asin(d(h,-1,1)),.99999>Math.abs(h)?(this._x=Math.atan2(-l,k),this._y=Math.atan2(-p,a)):(this._x= +0,this._y=Math.atan2(g,e))):"XZY"===b?(this._z=Math.asin(-d(f,-1,1)),.99999>Math.abs(f)?(this._x=Math.atan2(n,k),this._y=Math.atan2(g,a)):(this._x=Math.atan2(-l,e),this._y=0)):console.warn("THREE.Euler: .setFromRotationMatrix() given unsupported order: "+b);this._order=b;if(!1!==c)this.onChangeCallback();return this},setFromQuaternion:function(){var a;return function(b,c,d){void 0===a&&(a=new THREE.Matrix4);a.makeRotationFromQuaternion(b);this.setFromRotationMatrix(a,c,d);return this}}(),setFromVector3:function(a, +b){return this.set(a.x,a.y,a.z,b||this._order)},reorder:function(){var a=new THREE.Quaternion;return function(b){a.setFromEuler(this);this.setFromQuaternion(a,b)}}(),equals:function(a){return a._x===this._x&&a._y===this._y&&a._z===this._z&&a._order===this._order},fromArray:function(a){this._x=a[0];this._y=a[1];this._z=a[2];void 0!==a[3]&&(this._order=a[3]);this.onChangeCallback();return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);a[b]=this._x;a[b+1]=this._y;a[b+2]=this._z;a[b+ +3]=this._order;return a},toVector3:function(a){return a?a.set(this._x,this._y,this._z):new THREE.Vector3(this._x,this._y,this._z)},onChange:function(a){this.onChangeCallback=a;return this},onChangeCallback:function(){}};THREE.Line3=function(a,b){this.start=void 0!==a?a:new THREE.Vector3;this.end=void 0!==b?b:new THREE.Vector3}; +THREE.Line3.prototype={constructor:THREE.Line3,set:function(a,b){this.start.copy(a);this.end.copy(b);return this},clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.start.copy(a.start);this.end.copy(a.end);return this},center:function(a){return(a||new THREE.Vector3).addVectors(this.start,this.end).multiplyScalar(.5)},delta:function(a){return(a||new THREE.Vector3).subVectors(this.end,this.start)},distanceSq:function(){return this.start.distanceToSquared(this.end)},distance:function(){return this.start.distanceTo(this.end)}, +at:function(a,b){var c=b||new THREE.Vector3;return this.delta(c).multiplyScalar(a).add(this.start)},closestPointToPointParameter:function(){var a=new THREE.Vector3,b=new THREE.Vector3;return function(c,d){a.subVectors(c,this.start);b.subVectors(this.end,this.start);var e=b.dot(b),e=b.dot(a)/e;d&&(e=THREE.Math.clamp(e,0,1));return e}}(),closestPointToPoint:function(a,b,c){a=this.closestPointToPointParameter(a,b);c=c||new THREE.Vector3;return this.delta(c).multiplyScalar(a).add(this.start)},applyMatrix4:function(a){this.start.applyMatrix4(a); +this.end.applyMatrix4(a);return this},equals:function(a){return a.start.equals(this.start)&&a.end.equals(this.end)}};THREE.Box2=function(a,b){this.min=void 0!==a?a:new THREE.Vector2(Infinity,Infinity);this.max=void 0!==b?b:new THREE.Vector2(-Infinity,-Infinity)}; +THREE.Box2.prototype={constructor:THREE.Box2,set:function(a,b){this.min.copy(a);this.max.copy(b);return this},setFromPoints:function(a){this.makeEmpty();for(var b=0,c=a.length;bthis.max.x||a.ythis.max.y?!1:!0},containsBox:function(a){return this.min.x<=a.min.x&&a.max.x<=this.max.x&&this.min.y<=a.min.y&&a.max.y<=this.max.y?!0:!1},getParameter:function(a,b){return(b||new THREE.Vector2).set((a.x-this.min.x)/(this.max.x-this.min.x),(a.y-this.min.y)/(this.max.y-this.min.y))},intersectsBox:function(a){return a.max.xthis.max.x||a.max.y +this.max.y?!1:!0},clampPoint:function(a,b){return(b||new THREE.Vector2).copy(a).clamp(this.min,this.max)},distanceToPoint:function(){var a=new THREE.Vector2;return function(b){return a.copy(b).clamp(this.min,this.max).sub(b).length()}}(),intersect:function(a){this.min.max(a.min);this.max.min(a.max);return this},union:function(a){this.min.min(a.min);this.max.max(a.max);return this},translate:function(a){this.min.add(a);this.max.add(a);return this},equals:function(a){return a.min.equals(this.min)&& +a.max.equals(this.max)}};THREE.Box3=function(a,b){this.min=void 0!==a?a:new THREE.Vector3(Infinity,Infinity,Infinity);this.max=void 0!==b?b:new THREE.Vector3(-Infinity,-Infinity,-Infinity)}; +THREE.Box3.prototype={constructor:THREE.Box3,set:function(a,b){this.min.copy(a);this.max.copy(b);return this},setFromArray:function(a){this.makeEmpty();for(var b=Infinity,c=Infinity,d=Infinity,e=-Infinity,f=-Infinity,g=-Infinity,h=0,k=a.length;he&&(e=l);p>f&&(f=p);n>g&&(g=n)}this.min.set(b,c,d);this.max.set(e,f,g)},setFromPoints:function(a){this.makeEmpty();for(var b=0,c=a.length;bthis.max.x||a.ythis.max.y||a.zthis.max.z?!1:!0},containsBox:function(a){return this.min.x<=a.min.x&&a.max.x<=this.max.x&&this.min.y<=a.min.y&&a.max.y<=this.max.y&&this.min.z<= +a.min.z&&a.max.z<=this.max.z?!0:!1},getParameter:function(a,b){return(b||new THREE.Vector3).set((a.x-this.min.x)/(this.max.x-this.min.x),(a.y-this.min.y)/(this.max.y-this.min.y),(a.z-this.min.z)/(this.max.z-this.min.z))},intersectsBox:function(a){return a.max.xthis.max.x||a.max.ythis.max.y||a.max.zthis.max.z?!1:!0},intersectsSphere:function(){var a;return function(b){void 0===a&&(a=new THREE.Vector3);this.clampPoint(b.center,a);return a.distanceToSquared(b.center)<= +b.radius*b.radius}}(),intersectsPlane:function(a){var b,c;0=a.constant},clampPoint:function(a,b){return(b||new THREE.Vector3).copy(a).clamp(this.min, +this.max)},distanceToPoint:function(){var a=new THREE.Vector3;return function(b){return a.copy(b).clamp(this.min,this.max).sub(b).length()}}(),getBoundingSphere:function(){var a=new THREE.Vector3;return function(b){b=b||new THREE.Sphere;b.center=this.center();b.radius=.5*this.size(a).length();return b}}(),intersect:function(a){this.min.max(a.min);this.max.min(a.max);return this},union:function(a){this.min.min(a.min);this.max.max(a.max);return this},applyMatrix4:function(){var a=[new THREE.Vector3, +new THREE.Vector3,new THREE.Vector3,new THREE.Vector3,new THREE.Vector3,new THREE.Vector3,new THREE.Vector3,new THREE.Vector3];return function(b){a[0].set(this.min.x,this.min.y,this.min.z).applyMatrix4(b);a[1].set(this.min.x,this.min.y,this.max.z).applyMatrix4(b);a[2].set(this.min.x,this.max.y,this.min.z).applyMatrix4(b);a[3].set(this.min.x,this.max.y,this.max.z).applyMatrix4(b);a[4].set(this.max.x,this.min.y,this.min.z).applyMatrix4(b);a[5].set(this.max.x,this.min.y,this.max.z).applyMatrix4(b);a[6].set(this.max.x, +this.max.y,this.min.z).applyMatrix4(b);a[7].set(this.max.x,this.max.y,this.max.z).applyMatrix4(b);this.makeEmpty();this.setFromPoints(a);return this}}(),translate:function(a){this.min.add(a);this.max.add(a);return this},equals:function(a){return a.min.equals(this.min)&&a.max.equals(this.max)}};THREE.Matrix3=function(){this.elements=new Float32Array([1,0,0,0,1,0,0,0,1]);0this.determinant()&&(g=-g);c.x= +f[12];c.y=f[13];c.z=f[14];b.elements.set(this.elements);c=1/g;var f=1/h,l=1/k;b.elements[0]*=c;b.elements[1]*=c;b.elements[2]*=c;b.elements[4]*=f;b.elements[5]*=f;b.elements[6]*=f;b.elements[8]*=l;b.elements[9]*=l;b.elements[10]*=l;d.setFromRotationMatrix(b);e.x=g;e.y=h;e.z=k;return this}}(),makeFrustum:function(a,b,c,d,e,f){var g=this.elements;g[0]=2*e/(b-a);g[4]=0;g[8]=(b+a)/(b-a);g[12]=0;g[1]=0;g[5]=2*e/(d-c);g[9]=(d+c)/(d-c);g[13]=0;g[2]=0;g[6]=0;g[10]=-(f+e)/(f-e);g[14]=-2*f*e/(f-e);g[3]=0;g[7]= +0;g[11]=-1;g[15]=0;return this},makePerspective:function(a,b,c,d){a=c*Math.tan(THREE.Math.degToRad(.5*a));var e=-a;return this.makeFrustum(e*b,a*b,e,a,c,d)},makeOrthographic:function(a,b,c,d,e,f){var g=this.elements,h=1/(b-a),k=1/(c-d),l=1/(f-e);g[0]=2*h;g[4]=0;g[8]=0;g[12]=-((b+a)*h);g[1]=0;g[5]=2*k;g[9]=0;g[13]=-((c+d)*k);g[2]=0;g[6]=0;g[10]=-2*l;g[14]=-((f+e)*l);g[3]=0;g[7]=0;g[11]=0;g[15]=1;return this},equals:function(a){var b=this.elements;a=a.elements;for(var c=0;16>c;c++)if(b[c]!==a[c])return!1; +return!0},fromArray:function(a){this.elements.set(a);return this},toArray:function(){var a=this.elements;return[a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8],a[9],a[10],a[11],a[12],a[13],a[14],a[15]]}};THREE.Ray=function(a,b){this.origin=void 0!==a?a:new THREE.Vector3;this.direction=void 0!==b?b:new THREE.Vector3}; +THREE.Ray.prototype={constructor:THREE.Ray,set:function(a,b){this.origin.copy(a);this.direction.copy(b);return this},clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.origin.copy(a.origin);this.direction.copy(a.direction);return this},at:function(a,b){return(b||new THREE.Vector3).copy(this.direction).multiplyScalar(a).add(this.origin)},lookAt:function(a){this.direction.copy(a).sub(this.origin).normalize()},recast:function(){var a=new THREE.Vector3;return function(b){this.origin.copy(this.at(b, +a));return this}}(),closestPointToPoint:function(a,b){var c=b||new THREE.Vector3;c.subVectors(a,this.origin);var d=c.dot(this.direction);return 0>d?c.copy(this.origin):c.copy(this.direction).multiplyScalar(d).add(this.origin)},distanceToPoint:function(a){return Math.sqrt(this.distanceSqToPoint(a))},distanceSqToPoint:function(){var a=new THREE.Vector3;return function(b){var c=a.subVectors(b,this.origin).dot(this.direction);if(0>c)return this.origin.distanceToSquared(b);a.copy(this.direction).multiplyScalar(c).add(this.origin); +return a.distanceToSquared(b)}}(),distanceSqToSegment:function(){var a=new THREE.Vector3,b=new THREE.Vector3,c=new THREE.Vector3;return function(d,e,f,g){a.copy(d).add(e).multiplyScalar(.5);b.copy(e).sub(d).normalize();c.copy(this.origin).sub(a);var h=.5*d.distanceTo(e),k=-this.direction.dot(b),l=c.dot(this.direction),p=-c.dot(b),n=c.lengthSq(),m=Math.abs(1-k*k),q;0=-q?e<=q?(h=1/m,d*=h,e*=h,k=d*(d+k*e+2*l)+e*(k*d+e+2*p)+n):(e=h,d=Math.max(0,-(k*e+l)),k=-d*d+e*(e+2* +p)+n):(e=-h,d=Math.max(0,-(k*e+l)),k=-d*d+e*(e+2*p)+n):e<=-q?(d=Math.max(0,-(-k*h+l)),e=0f)return null;f=Math.sqrt(f-e);e=d-f;d+=f;return 0>e&&0>d?null:0>e?this.at(d,c):this.at(e,c)}}(),intersectsSphere:function(a){return this.distanceToPoint(a.center)<=a.radius},distanceToPlane:function(a){var b=a.normal.dot(this.direction);if(0===b)return 0===a.distanceToPoint(this.origin)?0:null;a=-(this.origin.dot(a.normal)+a.constant)/b;return 0<=a?a:null},intersectPlane:function(a,b){var c= +this.distanceToPlane(a);return null===c?null:this.at(c,b)},intersectsPlane:function(a){var b=a.distanceToPoint(this.origin);return 0===b||0>a.normal.dot(this.direction)*b?!0:!1},intersectBox:function(a,b){var c,d,e,f,g;d=1/this.direction.x;f=1/this.direction.y;g=1/this.direction.z;var h=this.origin;0<=d?(c=(a.min.x-h.x)*d,d*=a.max.x-h.x):(c=(a.max.x-h.x)*d,d*=a.min.x-h.x);0<=f?(e=(a.min.y-h.y)*f,f*=a.max.y-h.y):(e=(a.max.y-h.y)*f,f*=a.min.y-h.y);if(c>f||e>d)return null;if(e>c||c!==c)c=e;if(fg||e>d)return null;if(e>c||c!==c)c=e;if(gd?null:this.at(0<=c?c:d,b)},intersectsBox:function(){var a=new THREE.Vector3;return function(b){return null!==this.intersectBox(b,a)}}(),intersectTriangle:function(){var a=new THREE.Vector3,b=new THREE.Vector3,c=new THREE.Vector3,d=new THREE.Vector3;return function(e,f,g,h,k){b.subVectors(f,e);c.subVectors(g,e);d.crossVectors(b,c);f=this.direction.dot(d); +if(0f)h=-1,f=-f;else return null;a.subVectors(this.origin,e);e=h*this.direction.dot(c.crossVectors(a,c));if(0>e)return null;g=h*this.direction.dot(b.cross(a));if(0>g||e+g>f)return null;e=-h*a.dot(d);return 0>e?null:this.at(e/f,k)}}(),applyMatrix4:function(a){this.direction.add(this.origin).applyMatrix4(a);this.origin.applyMatrix4(a);this.direction.sub(this.origin);this.direction.normalize();return this},equals:function(a){return a.origin.equals(this.origin)&&a.direction.equals(this.direction)}}; +THREE.Sphere=function(a,b){this.center=void 0!==a?a:new THREE.Vector3;this.radius=void 0!==b?b:0}; +THREE.Sphere.prototype={constructor:THREE.Sphere,set:function(a,b){this.center.copy(a);this.radius=b;return this},setFromPoints:function(){var a=new THREE.Box3;return function(b,c){var d=this.center;void 0!==c?d.copy(c):a.setFromPoints(b).center(d);for(var e=0,f=0,g=b.length;f=this.radius},containsPoint:function(a){return a.distanceToSquared(this.center)<=this.radius*this.radius},distanceToPoint:function(a){return a.distanceTo(this.center)-this.radius},intersectsSphere:function(a){var b=this.radius+a.radius;return a.center.distanceToSquared(this.center)<=b*b},intersectsBox:function(a){return a.intersectsSphere(this)},intersectsPlane:function(a){return Math.abs(this.center.dot(a.normal)-a.constant)<=this.radius},clampPoint:function(a,b){var c= +this.center.distanceToSquared(a),d=b||new THREE.Vector3;d.copy(a);c>this.radius*this.radius&&(d.sub(this.center).normalize(),d.multiplyScalar(this.radius).add(this.center));return d},getBoundingBox:function(a){a=a||new THREE.Box3;a.set(this.center,this.center);a.expandByScalar(this.radius);return a},applyMatrix4:function(a){this.center.applyMatrix4(a);this.radius*=a.getMaxScaleOnAxis();return this},translate:function(a){this.center.add(a);return this},equals:function(a){return a.center.equals(this.center)&& +a.radius===this.radius}};THREE.Frustum=function(a,b,c,d,e,f){this.planes=[void 0!==a?a:new THREE.Plane,void 0!==b?b:new THREE.Plane,void 0!==c?c:new THREE.Plane,void 0!==d?d:new THREE.Plane,void 0!==e?e:new THREE.Plane,void 0!==f?f:new THREE.Plane]}; +THREE.Frustum.prototype={constructor:THREE.Frustum,set:function(a,b,c,d,e,f){var g=this.planes;g[0].copy(a);g[1].copy(b);g[2].copy(c);g[3].copy(d);g[4].copy(e);g[5].copy(f);return this},clone:function(){return(new this.constructor).copy(this)},copy:function(a){for(var b=this.planes,c=0;6>c;c++)b[c].copy(a.planes[c]);return this},setFromMatrix:function(a){var b=this.planes,c=a.elements;a=c[0];var d=c[1],e=c[2],f=c[3],g=c[4],h=c[5],k=c[6],l=c[7],p=c[8],n=c[9],m=c[10],q=c[11],u=c[12],v=c[13],t=c[14], +c=c[15];b[0].setComponents(f-a,l-g,q-p,c-u).normalize();b[1].setComponents(f+a,l+g,q+p,c+u).normalize();b[2].setComponents(f+d,l+h,q+n,c+v).normalize();b[3].setComponents(f-d,l-h,q-n,c-v).normalize();b[4].setComponents(f-e,l-k,q-m,c-t).normalize();b[5].setComponents(f+e,l+k,q+m,c+t).normalize();return this},intersectsObject:function(){var a=new THREE.Sphere;return function(b){var c=b.geometry;null===c.boundingSphere&&c.computeBoundingSphere();a.copy(c.boundingSphere);a.applyMatrix4(b.matrixWorld); +return this.intersectsSphere(a)}}(),intersectsSphere:function(a){var b=this.planes,c=a.center;a=-a.radius;for(var d=0;6>d;d++)if(b[d].distanceToPoint(c)e;e++){var f=d[e];a.x=0g&&0>f)return!1}return!0}}(),containsPoint:function(a){for(var b=this.planes,c=0;6>c;c++)if(0>b[c].distanceToPoint(a))return!1;return!0}};THREE.Plane=function(a,b){this.normal=void 0!==a?a:new THREE.Vector3(1,0,0);this.constant=void 0!==b?b:0}; +THREE.Plane.prototype={constructor:THREE.Plane,set:function(a,b){this.normal.copy(a);this.constant=b;return this},setComponents:function(a,b,c,d){this.normal.set(a,b,c);this.constant=d;return this},setFromNormalAndCoplanarPoint:function(a,b){this.normal.copy(a);this.constant=-b.dot(this.normal);return this},setFromCoplanarPoints:function(){var a=new THREE.Vector3,b=new THREE.Vector3;return function(c,d,e){d=a.subVectors(e,d).cross(b.subVectors(c,d)).normalize();this.setFromNormalAndCoplanarPoint(d, +c);return this}}(),clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.normal.copy(a.normal);this.constant=a.constant;return this},normalize:function(){var a=1/this.normal.length();this.normal.multiplyScalar(a);this.constant*=a;return this},negate:function(){this.constant*=-1;this.normal.negate();return this},distanceToPoint:function(a){return this.normal.dot(a)+this.constant},distanceToSphere:function(a){return this.distanceToPoint(a.center)-a.radius},projectPoint:function(a, +b){return this.orthoPoint(a,b).sub(a).negate()},orthoPoint:function(a,b){var c=this.distanceToPoint(a);return(b||new THREE.Vector3).copy(this.normal).multiplyScalar(c)},intersectLine:function(){var a=new THREE.Vector3;return function(b,c){var d=c||new THREE.Vector3,e=b.delta(a),f=this.normal.dot(e);if(0===f){if(0===this.distanceToPoint(b.start))return d.copy(b.start)}else return f=-(b.start.dot(this.normal)+this.constant)/f,0>f||1b&&0a&&0e;e++)8===e||13===e||18===e||23===e?b[e]="-":14===e?b[e]="4":(2>=c&&(c=33554432+16777216*Math.random()|0),d=c&15,c>>=4,b[e]=a[19===e?d&3|8:d]);return b.join("")}}(),clamp:function(a,b,c){return Math.max(b,Math.min(c,a))},euclideanModulo:function(a,b){return(a%b+b)%b},mapLinear:function(a,b,c,d,e){return d+(a-b)*(e-d)/(c-b)},smoothstep:function(a, +b,c){if(a<=b)return 0;if(a>=c)return 1;a=(a-b)/(c-b);return a*a*(3-2*a)},smootherstep:function(a,b,c){if(a<=b)return 0;if(a>=c)return 1;a=(a-b)/(c-b);return a*a*a*(a*(6*a-15)+10)},random16:function(){console.warn("THREE.Math.random16() has been deprecated. Use Math.random() instead.");return Math.random()},randInt:function(a,b){return a+Math.floor(Math.random()*(b-a+1))},randFloat:function(a,b){return a+Math.random()*(b-a)},randFloatSpread:function(a){return a*(.5-Math.random())},degToRad:function(){var a= +Math.PI/180;return function(b){return b*a}}(),radToDeg:function(){var a=180/Math.PI;return function(b){return b*a}}(),isPowerOfTwo:function(a){return 0===(a&a-1)&&0!==a},nearestPowerOfTwo:function(a){return Math.pow(2,Math.round(Math.log(a)/Math.LN2))},nextPowerOfTwo:function(a){a--;a|=a>>1;a|=a>>2;a|=a>>4;a|=a>>8;a|=a>>16;a++;return a}}; +THREE.Spline=function(a){function b(a,b,c,d,e,f,g){a=.5*(c-a);d=.5*(d-b);return(2*(b-c)+a+d)*g+(-3*(b-c)-2*a-d)*f+a*e+b}this.points=a;var c=[],d={x:0,y:0,z:0},e,f,g,h,k,l,p,n,m;this.initFromArray=function(a){this.points=[];for(var b=0;bthis.points.length-2?this.points.length-1:f+1;c[3]=f>this.points.length-3?this.points.length-1:f+ +2;l=this.points[c[0]];p=this.points[c[1]];n=this.points[c[2]];m=this.points[c[3]];h=g*g;k=g*h;d.x=b(l.x,p.x,n.x,m.x,g,h,k);d.y=b(l.y,p.y,n.y,m.y,g,h,k);d.z=b(l.z,p.z,n.z,m.z,g,h,k);return d};this.getControlPointsArray=function(){var a,b,c=this.points.length,d=[];for(a=0;a=b.x+b.y}}(); +THREE.Triangle.prototype={constructor:THREE.Triangle,set:function(a,b,c){this.a.copy(a);this.b.copy(b);this.c.copy(c);return this},setFromPointsAndIndices:function(a,b,c,d){this.a.copy(a[b]);this.b.copy(a[c]);this.c.copy(a[d]);return this},clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.a.copy(a.a);this.b.copy(a.b);this.c.copy(a.c);return this},area:function(){var a=new THREE.Vector3,b=new THREE.Vector3;return function(){a.subVectors(this.c,this.b);b.subVectors(this.a, +this.b);return.5*a.cross(b).length()}}(),midpoint:function(a){return(a||new THREE.Vector3).addVectors(this.a,this.b).add(this.c).multiplyScalar(1/3)},normal:function(a){return THREE.Triangle.normal(this.a,this.b,this.c,a)},plane:function(a){return(a||new THREE.Plane).setFromCoplanarPoints(this.a,this.b,this.c)},barycoordFromPoint:function(a,b){return THREE.Triangle.barycoordFromPoint(a,this.a,this.b,this.c,b)},containsPoint:function(a){return THREE.Triangle.containsPoint(a,this.a,this.b,this.c)}, +equals:function(a){return a.a.equals(this.a)&&a.b.equals(this.b)&&a.c.equals(this.c)}};THREE.Interpolant=function(a,b,c,d){this.parameterPositions=a;this._cachedIndex=0;this.resultBuffer=void 0!==d?d:new b.constructor(c);this.sampleValues=b;this.valueSize=c}; +THREE.Interpolant.prototype={constructor:THREE.Interpolant,evaluate:function(a){var b=this.parameterPositions,c=this._cachedIndex,d=b[c],e=b[c-1];a:{b:{c:{d:if(!(a=e)break a;else{f=b[1];a=e)break b}d= +c;c=0}}for(;c>>1,ad;d++)if(e[d]===e[(d+1)%3]){a.push(f);break}for(f=a.length-1;0<=f;f--)for(e=a[f],this.faces.splice(e, +1),c=0,g=this.faceVertexUvs.length;cthis.duration&&this.resetDuration();this.trim();this.optimize()}; +THREE.AnimationClip.prototype={constructor:THREE.AnimationClip,resetDuration:function(){for(var a=0,b=0,c=this.tracks.length;b!==c;++b)var d=this.tracks[b],a=Math.max(a,d.times[d.times.length-1]);this.duration=a},trim:function(){for(var a=0;ab||0===c)return;this._startTime=null;b*=c}b*=this._updateTimeScale(a);c=this._updateTime(b);a=this._updateWeight(a);if(0c.parameterPositions[1]&&(this.stopFading(),0===d&&(this.enabled=!1))}}return this._effectiveWeight=b},_updateTimeScale:function(a){var b=0;if(!this.paused){var b=this.timeScale,c=this._timeScaleInterpolant;if(null!==c){var d=c.evaluate(a)[0],b=b*d;a>c.parameterPositions[1]&&(this.stopWarping(),0===b?this.pause=!0:this.timeScale=b)}}return this._effectiveTimeScale= +b},_updateTime:function(a){var b=this.time+a;if(0===a)return b;var c=this._clip.duration,d=this.loop,e=this._loopCount,f=!1;switch(d){case THREE.LoopOnce:-1===e&&(this.loopCount=0,this._setEndings(!0,!0,!1));if(b>=c)b=c;else if(0>b)b=0;else break;this.clampWhenFinished?this.pause=!0:this.enabled=!1;this._mixer.dispatchEvent({type:"finished",action:this,direction:0>a?-1:1});break;case THREE.LoopPingPong:f=!0;case THREE.LoopRepeat:-1===e&&(0=c||0>b){var g=Math.floor(b/c),b=b-c*g,e=e+Math.abs(g),h=this.repetitions-e;if(0>h){this.clampWhenFinished?this.paused=!0:this.enabled=!1;b=0a,this._setEndings(a,!a,f)):this._setEndings(!1,!1,f);this._loopCount=e;this._mixer.dispatchEvent({type:"loop",action:this,loopDelta:g})}if(d===THREE.LoopPingPong&&1===(e&1))return this.time=b,c-b}return this.time=b},_setEndings:function(a, +b,c){var d=this._interpolantSettings;c?(d.endingStart=THREE.ZeroSlopeEnding,d.endingEnd=THREE.ZeroSlopeEnding):(d.endingStart=a?this.zeroSlopeAtStart?THREE.ZeroSlopeEnding:THREE.ZeroCurvatureEnding:THREE.WrapAroundEnding,d.endingEnd=b?this.zeroSlopeAtEnd?THREE.ZeroSlopeEnding:THREE.ZeroCurvatureEnding:THREE.WrapAroundEnding)},_scheduleFading:function(a,b,c){var d=this._mixer,e=d.time,f=this._weightInterpolant;null===f&&(this._weightInterpolant=f=d._lendControlInterpolant());d=f.parameterPositions; +f=f.sampleValues;d[0]=e;f[0]=b;d[1]=e+a;f[1]=c;return this}}; +Object.assign(THREE.AnimationMixer.prototype,{_bindAction:function(a,b){var c=a._localRoot||this._root,d=a._clip.tracks,e=d.length,f=a._propertyBindings,g=a._interpolants,h=c.uuid,k=this._bindingsByRootAndName,l=k[h];void 0===l&&(l={},k[h]=l);for(k=0;k!==e;++k){var p=d[k],n=p.name,m=l[n];if(void 0===m){m=f[k];if(void 0!==m){null===m._cacheIndex&&(++m.referenceCount,this._addInactiveBinding(m,h,n));continue}m=new THREE.PropertyMixer(THREE.PropertyBinding.create(c,n,b&&b._propertyBindings[k].binding.parsedPath), +p.ValueTypeName,p.getValueSize());++m.referenceCount;this._addInactiveBinding(m,h,n)}f[k]=m;g[k].resultBuffer=m.buffer}},_activateAction:function(a){if(!this._isActiveAction(a)){if(null===a._cacheIndex){var b=(a._localRoot||this._root).uuid,c=a._clip.name,d=this._actionsByClip[c];this._bindAction(a,d&&d.knownActions[0]);this._addInactiveAction(a,c,b)}b=a._propertyBindings;c=0;for(d=b.length;c!==d;++c){var e=b[c];0===e.useCount++&&(this._lendBinding(e),e.saveOriginalState())}this._lendAction(a)}}, +_deactivateAction:function(a){if(this._isActiveAction(a)){for(var b=a._propertyBindings,c=0,d=b.length;c!==d;++c){var e=b[c];0===--e.useCount&&(e.restoreOriginalState(),this._takeBackBinding(e))}this._takeBackAction(a)}},_initMemoryManager:function(){this._actions=[];this._nActiveActions=0;this._actionsByClip={};this._bindings=[];this._nActiveBindings=0;this._bindingsByRootAndName={};this._controlInterpolants=[];this._nActiveControlInterpolants=0;var a=this;this.stats={actions:{get total(){return a._actions.length}, +get inUse(){return a._nActiveActions}},bindings:{get total(){return a._bindings.length},get inUse(){return a._nActiveBindings}},controlInterpolants:{get total(){return a._controlInterpolants.length},get inUse(){return a._nActiveControlInterpolants}}}},_isActiveAction:function(a){a=a._cacheIndex;return null!==a&&a=c){var n=c++,m=b[n];d[m.uuid]= +p;b[p]=m;d[l]=n;b[n]=k;k=0;for(l=f;k!==l;++k){var m=e[k],q=m[p];m[p]=m[n];m[n]=q}}}this.nCachedObjects_=c},uncache:function(a){for(var b=this._objects,c=b.length,d=this.nCachedObjects_,e=this._indicesByUUID,f=this._bindings,g=f.length,h=0,k=arguments.length;h!==k;++h){var l=arguments[h].uuid,p=e[l];if(void 0!==p)if(delete e[l],pb;)--f;++f;if(0!==e||f!==d)e>=f&&(f=Math.max(f,1),e=f-1),d=this.getValueSize(),this.times=THREE.AnimationUtils.arraySlice(c,e,f),this.values=THREE.AnimationUtils.arraySlice(this.values,e*d,f*d);return this},validate:function(){var a=!0,b=this.getValueSize();0!==b-Math.floor(b)&&(console.error("invalid value size in track", +this),a=!1);var c=this.times,b=this.values,d=c.length;0===d&&(console.error("track is empty",this),a=!1);for(var e=null,f=0;f!==d;f++){var g=c[f];if("number"===typeof g&&isNaN(g)){console.error("time is not a valid number",this,f,g);a=!1;break}if(null!==e&&e>g){console.error("out of order keys",this,f,g,e);a=!1;break}e=g}if(void 0!==b&&THREE.AnimationUtils.isTypedArray(b))for(f=0,c=b.length;f!==c;++f)if(d=b[f],isNaN(d)){console.error("value is not a valid number",this,f,d);a=!1;break}return a},optimize:function(){for(var a= +this.times,b=this.values,c=this.getValueSize(),d=1,e=1,f=a.length-1;e<=f;++e){var g=!1,h=a[e];if(h!==a[e+1]&&(1!==e||h!==h[0]))for(var k=e*c,l=k-c,p=k+c,h=0;h!==c;++h){var n=b[k+h];if(n!==b[l+h]||n!==b[p+h]){g=!0;break}}if(g){if(e!==d)for(a[d]=a[e],g=e*c,k=d*c,h=0;h!==c;++h)b[k+h]=b[g+h];++d}}d!==a.length&&(this.times=THREE.AnimationUtils.arraySlice(a,0,d),this.values=THREE.AnimationUtils.arraySlice(b,0,d*c));return this}}; +Object.assign(THREE.KeyframeTrack,{parse:function(a){if(void 0===a.type)throw Error("track type undefined, can not parse");var b=THREE.KeyframeTrack._getTrackTypeForValueTypeName(a.type);if(void 0===a.times){console.warn("legacy JSON format detected, converting");var c=[],d=[];THREE.AnimationUtils.flattenJSON(a.keys,c,d,"value");a.times=c;a.values=d}return void 0!==b.parse?b.parse(a):new b(a.name,a.times,a.values,a.interpolation)},toJSON:function(a){var b=a.constructor;if(void 0!==b.toJSON)b=b.toJSON(a); +else{var b={name:a.name,times:THREE.AnimationUtils.convertArray(a.times,Array),values:THREE.AnimationUtils.convertArray(a.values,Array)},c=a.getInterpolation();c!==a.DefaultInterpolation&&(b.interpolation=c)}b.type=a.ValueTypeName;return b},_getTrackTypeForValueTypeName:function(a){switch(a.toLowerCase()){case "scalar":case "double":case "float":case "number":case "integer":return THREE.NumberKeyframeTrack;case "vector":case "vector2":case "vector3":case "vector4":return THREE.VectorKeyframeTrack; +case "color":return THREE.ColorKeyframeTrack;case "quaternion":return THREE.QuaternionKeyframeTrack;case "bool":case "boolean":return THREE.BooleanKeyframeTrack;case "string":return THREE.StringKeyframeTrack}throw Error("Unsupported typeName: "+a);}});THREE.PropertyBinding=function(a,b,c){this.path=b;this.parsedPath=c||THREE.PropertyBinding.parseTrackName(b);this.node=THREE.PropertyBinding.findNode(a,this.parsedPath.nodeName)||a;this.rootNode=a}; +THREE.PropertyBinding.prototype={constructor:THREE.PropertyBinding,getValue:function(a,b){this.bind();this.getValue(a,b)},setValue:function(a,b){this.bind();this.setValue(a,b)},bind:function(){var a=this.node,b=this.parsedPath,c=b.objectName,d=b.propertyName,e=b.propertyIndex;a||(this.node=a=THREE.PropertyBinding.findNode(this.rootNode,b.nodeName)||this.rootNode);this.getValue=this._getValue_unavailable;this.setValue=this._setValue_unavailable;if(a){if(c){var f=b.objectIndex;switch(c){case "materials":if(!a.material){console.error(" can not bind to material as node does not have a material", +this);return}if(!a.material.materials){console.error(" can not bind to material.materials as node.material does not have a materials array",this);return}a=a.material.materials;break;case "bones":if(!a.skeleton){console.error(" can not bind to bones as node does not have a skeleton",this);return}a=a.skeleton.bones;for(c=0;cd&&this._mixBufferRegion(c,a,3*b,1-d,b);for(var d=b,f=b+b;d!==f;++d)if(c[d]!==c[d+b]){e.setValue(c,a); +break}},saveOriginalState:function(){var a=this.buffer,b=this.valueSize,c=3*b;this.binding.getValue(a,c);for(var d=b;d!==c;++d)a[d]=a[c+d%b];this.cumulativeWeight=0},restoreOriginalState:function(){this.binding.setValue(this.buffer,3*this.valueSize)},_select:function(a,b,c,d,e){if(.5<=d)for(d=0;d!==e;++d)a[b+d]=a[c+d]},_slerp:function(a,b,c,d,e){THREE.Quaternion.slerpFlat(a,b,a,b,a,c,d)},_lerp:function(a,b,c,d,e){for(var f=1-d,g=0;g!==e;++g){var h=b+g;a[h]=a[h]*f+a[c+g]*d}}}; +THREE.BooleanKeyframeTrack=function(a,b,c){THREE.KeyframeTrack.call(this,a,b,c)};THREE.BooleanKeyframeTrack.prototype=Object.assign(Object.create(THREE.KeyframeTrack.prototype),{constructor:THREE.BooleanKeyframeTrack,ValueTypeName:"bool",ValueBufferType:Array,DefaultInterpolation:THREE.IntepolateDiscrete,InterpolantFactoryMethodLinear:void 0,InterpolantFactoryMethodSmooth:void 0});THREE.NumberKeyframeTrack=function(a,b,c,d){THREE.KeyframeTrack.call(this,a,b,c,d)}; +THREE.NumberKeyframeTrack.prototype=Object.assign(Object.create(THREE.KeyframeTrack.prototype),{constructor:THREE.NumberKeyframeTrack,ValueTypeName:"number"});THREE.QuaternionKeyframeTrack=function(a,b,c,d){THREE.KeyframeTrack.call(this,a,b,c,d)}; +THREE.QuaternionKeyframeTrack.prototype=Object.assign(Object.create(THREE.KeyframeTrack.prototype),{constructor:THREE.QuaternionKeyframeTrack,ValueTypeName:"quaternion",DefaultInterpolation:THREE.InterpolateLinear,InterpolantFactoryMethodLinear:function(a){return new THREE.QuaternionLinearInterpolant(this.times,this.values,this.getValueSize(),a)},InterpolantFactoryMethodSmooth:void 0});THREE.StringKeyframeTrack=function(a,b,c,d){THREE.KeyframeTrack.call(this,a,b,c,d)}; +THREE.StringKeyframeTrack.prototype=Object.assign(Object.create(THREE.KeyframeTrack.prototype),{constructor:THREE.StringKeyframeTrack,ValueTypeName:"string",ValueBufferType:Array,DefaultInterpolation:THREE.IntepolateDiscrete,InterpolantFactoryMethodLinear:void 0,InterpolantFactoryMethodSmooth:void 0});THREE.VectorKeyframeTrack=function(a,b,c,d){THREE.KeyframeTrack.call(this,a,b,c,d)}; +THREE.VectorKeyframeTrack.prototype=Object.assign(Object.create(THREE.KeyframeTrack.prototype),{constructor:THREE.VectorKeyframeTrack,ValueTypeName:"vector"}); +THREE.Audio=function(a){THREE.Object3D.call(this);this.type="Audio";this.context=a.context;this.source=this.context.createBufferSource();this.source.onended=this.onEnded.bind(this);this.gain=this.context.createGain();this.gain.connect(a.getInput());this.autoplay=!1;this.startTime=0;this.playbackRate=1;this.isPlaying=!1;this.hasPlaybackControl=!0;this.sourceType="empty";this.filter=null};THREE.Audio.prototype=Object.create(THREE.Object3D.prototype);THREE.Audio.prototype.constructor=THREE.Audio; +THREE.Audio.prototype.getOutput=function(){return this.gain};THREE.Audio.prototype.load=function(a){var b=new THREE.AudioBuffer(this.context);b.load(a);this.setBuffer(b);return this};THREE.Audio.prototype.setNodeSource=function(a){this.hasPlaybackControl=!1;this.sourceType="audioNode";this.source=a;this.connect();return this};THREE.Audio.prototype.setBuffer=function(a){var b=this;a.onReady(function(a){b.source.buffer=a;b.sourceType="buffer";b.autoplay&&b.play()});return this}; +THREE.Audio.prototype.play=function(){if(!0===this.isPlaying)console.warn("THREE.Audio: Audio is already playing.");else if(!1===this.hasPlaybackControl)console.warn("THREE.Audio: this Audio has no playback control.");else{var a=this.context.createBufferSource();a.buffer=this.source.buffer;a.loop=this.source.loop;a.onended=this.source.onended;a.start(0,this.startTime);a.playbackRate.value=this.playbackRate;this.isPlaying=!0;this.source=a;this.connect()}}; +THREE.Audio.prototype.pause=function(){!1===this.hasPlaybackControl?console.warn("THREE.Audio: this Audio has no playback control."):(this.source.stop(),this.startTime=this.context.currentTime)};THREE.Audio.prototype.stop=function(){!1===this.hasPlaybackControl?console.warn("THREE.Audio: this Audio has no playback control."):(this.source.stop(),this.startTime=0)};THREE.Audio.prototype.connect=function(){null!==this.filter?(this.source.connect(this.filter),this.filter.connect(this.getOutput())):this.source.connect(this.getOutput())}; +THREE.Audio.prototype.disconnect=function(){null!==this.filter?(this.source.disconnect(this.filter),this.filter.disconnect(this.getOutput())):this.source.disconnect(this.getOutput())};THREE.Audio.prototype.getFilter=function(){return this.filter};THREE.Audio.prototype.setFilter=function(a){void 0===a&&(a=null);!0===this.isPlaying?(this.disconnect(),this.filter=a,this.connect()):this.filter=a}; +THREE.Audio.prototype.setPlaybackRate=function(a){!1===this.hasPlaybackControl?console.warn("THREE.Audio: this Audio has no playback control."):(this.playbackRate=a,!0===this.isPlaying&&(this.source.playbackRate.value=this.playbackRate))};THREE.Audio.prototype.getPlaybackRate=function(){return this.playbackRate};THREE.Audio.prototype.onEnded=function(){this.isPlaying=!1}; +THREE.Audio.prototype.setLoop=function(a){!1===this.hasPlaybackControl?console.warn("THREE.Audio: this Audio has no playback control."):this.source.loop=a};THREE.Audio.prototype.getLoop=function(){return!1===this.hasPlaybackControl?(console.warn("THREE.Audio: this Audio has no playback control."),!1):this.source.loop};THREE.Audio.prototype.setVolume=function(a){this.gain.gain.value=a};THREE.Audio.prototype.getVolume=function(){return this.gain.gain.value}; +THREE.AudioAnalyser=function(a,b){this.analyser=a.context.createAnalyser();this.analyser.fftSize=void 0!==b?b:2048;this.data=new Uint8Array(this.analyser.frequencyBinCount);a.getOutput().connect(this.analyser)};THREE.AudioAnalyser.prototype={constructor:THREE.AudioAnalyser,getData:function(){this.analyser.getByteFrequencyData(this.data);return this.data}};THREE.AudioBuffer=function(a){this.context=a;this.ready=!1;this.readyCallbacks=[]}; +THREE.AudioBuffer.prototype.load=function(a){var b=this,c=new XMLHttpRequest;c.open("GET",a,!0);c.responseType="arraybuffer";c.onload=function(a){b.context.decodeAudioData(this.response,function(a){b.buffer=a;b.ready=!0;for(a=0;ak.opacity&&(k.transparent=!0);c.setTextures(h);return c.parse(k)}}()}; +THREE.Loader.Handlers={handlers:[],add:function(a,b){this.handlers.push(a,b)},get:function(a){for(var b=this.handlers,c=0,d=b.length;cg;g++)m=w[k++],s=t[2*m],m=t[2*m+1],s=new THREE.Vector2(s,m),2!==g&&c.faceVertexUvs[d][h].push(s),0!==g&&c.faceVertexUvs[d][h+1].push(s);n&&(n=3*w[k++],q.normal.set(E[n++],E[n++],E[n]),v.normal.copy(q.normal));if(u)for(d=0;4>d;d++)n=3*w[k++],u=new THREE.Vector3(E[n++],E[n++],E[n]),2!==d&&q.vertexNormals.push(u),0!==d&&v.vertexNormals.push(u); +p&&(p=w[k++],p=x[p],q.color.setHex(p),v.color.setHex(p));if(b)for(d=0;4>d;d++)p=w[k++],p=x[p],2!==d&&q.vertexColors.push(new THREE.Color(p)),0!==d&&v.vertexColors.push(new THREE.Color(p));c.faces.push(q);c.faces.push(v)}else{q=new THREE.Face3;q.a=w[k++];q.b=w[k++];q.c=w[k++];h&&(h=w[k++],q.materialIndex=h);h=c.faces.length;if(d)for(d=0;dg;g++)m=w[k++],s=t[2*m],m=t[2*m+1],s=new THREE.Vector2(s,m),c.faceVertexUvs[d][h].push(s);n&&(n=3*w[k++],q.normal.set(E[n++], +E[n++],E[n]));if(u)for(d=0;3>d;d++)n=3*w[k++],u=new THREE.Vector3(E[n++],E[n++],E[n]),q.vertexNormals.push(u);p&&(p=w[k++],q.color.setHex(x[p]));if(b)for(d=0;3>d;d++)p=w[k++],q.vertexColors.push(new THREE.Color(x[p]));c.faces.push(q)}})(d);(function(){var b=void 0!==a.influencesPerVertex?a.influencesPerVertex:2;if(a.skinWeights)for(var d=0,g=a.skinWeights.length;dthis.opacity&&(d.opacity=this.opacity);!0===this.transparent&&(d.transparent=this.transparent);0a.x||1a.x?0:1;break;case THREE.MirroredRepeatWrapping:1===Math.abs(Math.floor(a.x)%2)?a.x=Math.ceil(a.x)-a.x:a.x-=Math.floor(a.x)}if(0>a.y||1a.y?0:1;break;case THREE.MirroredRepeatWrapping:1=== +Math.abs(Math.floor(a.y)%2)?a.y=Math.ceil(a.y)-a.y:a.y-=Math.floor(a.y)}this.flipY&&(a.y=1-a.y)}}};THREE.EventDispatcher.prototype.apply(THREE.Texture.prototype);THREE.TextureIdCount=0;THREE.CanvasTexture=function(a,b,c,d,e,f,g,h,k){THREE.Texture.call(this,a,b,c,d,e,f,g,h,k);this.needsUpdate=!0};THREE.CanvasTexture.prototype=Object.create(THREE.Texture.prototype);THREE.CanvasTexture.prototype.constructor=THREE.CanvasTexture; +THREE.CubeTexture=function(a,b,c,d,e,f,g,h,k){a=void 0!==a?a:[];b=void 0!==b?b:THREE.CubeReflectionMapping;THREE.Texture.call(this,a,b,c,d,e,f,g,h,k);this.flipY=!1};THREE.CubeTexture.prototype=Object.create(THREE.Texture.prototype);THREE.CubeTexture.prototype.constructor=THREE.CubeTexture;Object.defineProperty(THREE.CubeTexture.prototype,"images",{get:function(){return this.image},set:function(a){this.image=a}}); +THREE.CompressedTexture=function(a,b,c,d,e,f,g,h,k,l,p){THREE.Texture.call(this,null,f,g,h,k,l,d,e,p);this.image={width:b,height:c};this.mipmaps=a;this.generateMipmaps=this.flipY=!1};THREE.CompressedTexture.prototype=Object.create(THREE.Texture.prototype);THREE.CompressedTexture.prototype.constructor=THREE.CompressedTexture; +THREE.DataTexture=function(a,b,c,d,e,f,g,h,k,l,p){THREE.Texture.call(this,null,f,g,h,k,l,d,e,p);this.image={data:a,width:b,height:c};this.magFilter=void 0!==k?k:THREE.NearestFilter;this.minFilter=void 0!==l?l:THREE.NearestFilter;this.generateMipmaps=this.flipY=!1};THREE.DataTexture.prototype=Object.create(THREE.Texture.prototype);THREE.DataTexture.prototype.constructor=THREE.DataTexture; +THREE.VideoTexture=function(a,b,c,d,e,f,g,h,k){function l(){requestAnimationFrame(l);a.readyState===a.HAVE_ENOUGH_DATA&&(p.needsUpdate=!0)}THREE.Texture.call(this,a,b,c,d,e,f,g,h,k);this.generateMipmaps=!1;var p=this;l()};THREE.VideoTexture.prototype=Object.create(THREE.Texture.prototype);THREE.VideoTexture.prototype.constructor=THREE.VideoTexture;THREE.Group=function(){THREE.Object3D.call(this);this.type="Group"};THREE.Group.prototype=Object.create(THREE.Object3D.prototype); +THREE.Group.prototype.constructor=THREE.Group;THREE.Points=function(a,b){THREE.Object3D.call(this);this.type="Points";this.geometry=void 0!==a?a:new THREE.Geometry;this.material=void 0!==b?b:new THREE.PointsMaterial({color:16777215*Math.random()})};THREE.Points.prototype=Object.create(THREE.Object3D.prototype);THREE.Points.prototype.constructor=THREE.Points; +THREE.Points.prototype.raycast=function(){var a=new THREE.Matrix4,b=new THREE.Ray,c=new THREE.Sphere;return function(d,e){function f(a,c){var f=b.distanceSqToPoint(a);if(fd.far||e.push({distance:l,distanceToRay:Math.sqrt(f),point:h.clone(),index:c,face:null,object:g})}}var g=this,h=this.geometry,k=this.matrixWorld,l=d.params.Points.threshold;null===h.boundingSphere&&h.computeBoundingSphere();c.copy(h.boundingSphere); +c.applyMatrix4(k);if(!1!==d.ray.intersectsSphere(c)){a.getInverse(k);b.copy(d.ray).applyMatrix4(a);var l=l/((this.scale.x+this.scale.y+this.scale.z)/3),p=l*l,l=new THREE.Vector3;if(h instanceof THREE.BufferGeometry){var n=h.index,h=h.attributes.position.array;if(null!==n)for(var m=n.array,n=0,q=m.length;nf||(p.applyMatrix4(this.matrixWorld),v=d.ray.origin.distanceTo(p),vd.far||e.push({distance:v,point:h.clone().applyMatrix4(this.matrixWorld),index:g,face:null,faceIndex:null,object:this}))}else for(g=0,u=q.length/3-1;gf||(p.applyMatrix4(this.matrixWorld), +v=d.ray.origin.distanceTo(p),vd.far||e.push({distance:v,point:h.clone().applyMatrix4(this.matrixWorld),index:g,face:null,faceIndex:null,object:this}))}else if(g instanceof THREE.Geometry)for(k=g.vertices,l=k.length,g=0;gf||(p.applyMatrix4(this.matrixWorld),v=d.ray.origin.distanceTo(p),vd.far||e.push({distance:v,point:h.clone().applyMatrix4(this.matrixWorld),index:g,face:null,faceIndex:null,object:this}))}}}(); +THREE.Line.prototype.clone=function(){return(new this.constructor(this.geometry,this.material)).copy(this)};THREE.LineStrip=0;THREE.LinePieces=1;THREE.LineSegments=function(a,b){THREE.Line.call(this,a,b);this.type="LineSegments"};THREE.LineSegments.prototype=Object.create(THREE.Line.prototype);THREE.LineSegments.prototype.constructor=THREE.LineSegments; +THREE.Mesh=function(a,b){THREE.Object3D.call(this);this.type="Mesh";this.geometry=void 0!==a?a:new THREE.Geometry;this.material=void 0!==b?b:new THREE.MeshBasicMaterial({color:16777215*Math.random()});this.drawMode=THREE.TrianglesDrawMode;this.updateMorphTargets()};THREE.Mesh.prototype=Object.create(THREE.Object3D.prototype);THREE.Mesh.prototype.constructor=THREE.Mesh;THREE.Mesh.prototype.setDrawMode=function(a){this.drawMode=a}; +THREE.Mesh.prototype.updateMorphTargets=function(){if(void 0!==this.geometry.morphTargets&&0b.far?null:{distance:c,point:s.clone(), +object:a}}function c(c,d,e,f,l,p,n,s){g.fromArray(f,3*p);h.fromArray(f,3*n);k.fromArray(f,3*s);if(c=b(c,d,e,g,h,k,t))l&&(m.fromArray(l,2*p),q.fromArray(l,2*n),u.fromArray(l,2*s),c.uv=a(t,g,h,k,m,q,u)),c.face=new THREE.Face3(p,n,s,THREE.Triangle.normal(g,h,k)),c.faceIndex=p;return c}var d=new THREE.Matrix4,e=new THREE.Ray,f=new THREE.Sphere,g=new THREE.Vector3,h=new THREE.Vector3,k=new THREE.Vector3,l=new THREE.Vector3,p=new THREE.Vector3,n=new THREE.Vector3,m=new THREE.Vector2,q=new THREE.Vector2, +u=new THREE.Vector2,v=new THREE.Vector3,t=new THREE.Vector3,s=new THREE.Vector3;return function(s,v){var x=this.geometry,D=this.material,z=this.matrixWorld;if(void 0!==D&&(null===x.boundingSphere&&x.computeBoundingSphere(),f.copy(x.boundingSphere),f.applyMatrix4(z),!1!==s.ray.intersectsSphere(f)&&(d.getInverse(z),e.copy(s.ray).applyMatrix4(d),null===x.boundingBox||!1!==e.intersectsBox(x.boundingBox)))){var y,B;if(x instanceof THREE.BufferGeometry){var G,F,D=x.index,z=x.attributes,x=z.position.array; +void 0!==z.uv&&(y=z.uv.array);if(null!==D)for(var z=D.array,H=0,L=z.length;H=d[e].distance)d[e-1].object.visible=!1,d[e].object.visible=!0;else break;for(;ethis.scale.x*this.scale.y||c.push({distance:Math.sqrt(d),point:this.position,face:null,object:this})}}();THREE.Sprite.prototype.clone=function(){return(new this.constructor(this.material)).copy(this)};THREE.Particle=THREE.Sprite; +THREE.LensFlare=function(a,b,c,d,e){THREE.Object3D.call(this);this.lensFlares=[];this.positionScreen=new THREE.Vector3;this.customUpdateCallback=void 0;void 0!==a&&this.add(a,b,c,d,e)};THREE.LensFlare.prototype=Object.create(THREE.Object3D.prototype);THREE.LensFlare.prototype.constructor=THREE.LensFlare; +THREE.LensFlare.prototype.add=function(a,b,c,d,e,f){void 0===b&&(b=-1);void 0===c&&(c=0);void 0===f&&(f=1);void 0===e&&(e=new THREE.Color(16777215));void 0===d&&(d=THREE.NormalBlending);c=Math.min(c,Math.max(0,c));this.lensFlares.push({texture:a,size:b,distance:c,x:0,y:0,z:0,scale:1,rotation:0,opacity:f,color:e,blending:d})}; +THREE.LensFlare.prototype.updateLensFlares=function(){var a,b=this.lensFlares.length,c,d=2*-this.positionScreen.x,e=2*-this.positionScreen.y;for(a=0;ac;c++)r.deleteFramebuffer(b.__webglFramebuffer[c]),r.deleteRenderbuffer(b.__webglDepthbuffer[c]);else r.deleteFramebuffer(b.__webglFramebuffer),r.deleteRenderbuffer(b.__webglDepthbuffer);U.delete(a.texture); +U.delete(a)}ia.textures--}function h(a){a=a.target;a.removeEventListener("dispose",h);k(a);U.delete(a)}function k(a){var b=U.get(a).program;a.program=void 0;void 0!==b&&oa.releaseProgram(b)}function l(a,b){return Math.abs(b[0])-Math.abs(a[0])}function p(a,b){return a.object.renderOrder!==b.object.renderOrder?a.object.renderOrder-b.object.renderOrder:a.material.id!==b.material.id?a.material.id-b.material.id:a.z!==b.z?a.z-b.z:a.id-b.id}function n(a,b){return a.object.renderOrder!==b.object.renderOrder? +a.object.renderOrder-b.object.renderOrder:a.z!==b.z?b.z-a.z:a.id-b.id}function m(a,b,c,d,e){var f;c.transparent?(d=S,f=++Y):(d=C,f=++Z);f=d[f];void 0!==f?(f.id=a.id,f.object=a,f.geometry=b,f.material=c,f.z=W.z,f.group=e):(f={id:a.id,object:a,geometry:b,material:c,z:W.z,group:e},d.push(f))}function q(a,b){if(!1!==a.visible){if(a.layers.test(b.layers))if(a instanceof THREE.Light)J.push(a);else if(a instanceof THREE.Sprite)!1!==a.frustumCulled&&!0!==za.intersectsObject(a)||ja.push(a);else if(a instanceof +THREE.LensFlare)ea.push(a);else if(a instanceof THREE.ImmediateRenderObject)!0===X.sortObjects&&(W.setFromMatrixPosition(a.matrixWorld),W.applyProjection(sa)),m(a,null,a.material,W.z,null);else if(a instanceof THREE.Mesh||a instanceof THREE.Line||a instanceof THREE.Points)if(a instanceof THREE.SkinnedMesh&&a.skeleton.update(),!1===a.frustumCulled||!0===za.intersectsObject(a)){var c=a.material;if(!0===c.visible){!0===X.sortObjects&&(W.setFromMatrixPosition(a.matrixWorld),W.applyProjection(sa));var d= +pa.update(a);if(c instanceof THREE.MultiMaterial)for(var e=d.groups,f=c.materials,c=0,g=e.length;c=da.maxTextures&&console.warn("WebGLRenderer: trying to use "+a+" texture units while this GPU supports only "+da.maxTextures);ta+=1;return a}function w(a,b,c,d){var e;if("1i"===b)r.uniform1i(c,d);else if("1f"===b)r.uniform1f(c,d);else if("2f"===b)r.uniform2f(c,d[0],d[1]);else if("3f"=== +b)r.uniform3f(c,d[0],d[1],d[2]);else if("4f"===b)r.uniform4f(c,d[0],d[1],d[2],d[3]);else if("1iv"===b)r.uniform1iv(c,d);else if("3iv"===b)r.uniform3iv(c,d);else if("1fv"===b)r.uniform1fv(c,d);else if("2fv"===b)r.uniform2fv(c,d);else if("3fv"===b)r.uniform3fv(c,d);else if("4fv"===b)r.uniform4fv(c,d);else if("Matrix2fv"===b)r.uniformMatrix2fv(c,!1,d);else if("Matrix3fv"===b)r.uniformMatrix3fv(c,!1,d);else if("Matrix4fv"===b)r.uniformMatrix4fv(c,!1,d);else if("i"===b)r.uniform1i(c,d);else if("f"===b)r.uniform1f(c, +d);else if("v2"===b)r.uniform2f(c,d.x,d.y);else if("v3"===b)r.uniform3f(c,d.x,d.y,d.z);else if("v4"===b)r.uniform4f(c,d.x,d.y,d.z,d.w);else if("c"===b)r.uniform3f(c,d.r,d.g,d.b);else if("s"===b){a=a.properties;for(var g in a){e=a[g];var f=c[g],h=d[g];w(e,e.type,f,h)}}else if("sa"===b){a=a.properties;b=0;for(var k=d.length;bb||a.height>b){var c=b/Math.max(a.width,a.height),d=document.createElement("canvas");d.width=Math.floor(a.width*c);d.height=Math.floor(a.height*c);d.getContext("2d").drawImage(a,0,0,a.width,a.height,0,0,d.width,d.height);console.warn("THREE.WebGLRenderer: image is too big ("+a.width+"x"+a.height+ +"). Resized to "+d.width+"x"+d.height,a);return d}return a}function z(a){return THREE.Math.isPowerOfTwo(a.width)&&THREE.Math.isPowerOfTwo(a.height)}function y(a,b){var c=U.get(a);if(6===a.image.length)if(0h;h++)g[h]=!X.autoScaleCubemaps||d||e?e?a.image[h].image:a.image[h]:D(a.image[h],da.maxCubemapSize);var k=z(g[0]),l=L(a.format),m=L(a.type);x(r.TEXTURE_CUBE_MAP,a,k);for(h=0;6>h;h++)if(d)for(var n,p=g[h].mipmaps,q=0,s=p.length;qf;f++)b.__webglFramebuffer[f]=r.createFramebuffer()}else b.__webglFramebuffer=r.createFramebuffer();if(d){K.bindTexture(r.TEXTURE_CUBE_MAP,c.__webglTexture);x(r.TEXTURE_CUBE_MAP,a.texture,e);for(f= +0;6>f;f++)G(b.__webglFramebuffer[f],a,r.COLOR_ATTACHMENT0,r.TEXTURE_CUBE_MAP_POSITIVE_X+f);a.texture.generateMipmaps&&e&&r.generateMipmap(r.TEXTURE_CUBE_MAP);K.bindTexture(r.TEXTURE_CUBE_MAP,null)}else K.bindTexture(r.TEXTURE_2D,c.__webglTexture),x(r.TEXTURE_2D,a.texture,e),G(b.__webglFramebuffer,a,r.COLOR_ATTACHMENT0,r.TEXTURE_2D),a.texture.generateMipmaps&&e&&r.generateMipmap(r.TEXTURE_2D),K.bindTexture(r.TEXTURE_2D,null);if(a.depthBuffer){b=U.get(a);if(a instanceof THREE.WebGLRenderTargetCube)for(b.__webglDepthbuffer= +[],c=0;6>c;c++)r.bindFramebuffer(r.FRAMEBUFFER,b.__webglFramebuffer[c]),b.__webglDepthbuffer[c]=r.createRenderbuffer(),F(b.__webglDepthbuffer[c],a);else r.bindFramebuffer(r.FRAMEBUFFER,b.__webglFramebuffer),b.__webglDepthbuffer=r.createRenderbuffer(),F(b.__webglDepthbuffer,a);r.bindFramebuffer(r.FRAMEBUFFER,null)}}b=a instanceof THREE.WebGLRenderTargetCube;a?(c=U.get(a),c=b?c.__webglFramebuffer[a.activeCubeFace]:c.__webglFramebuffer,qa.copy(a.scissor),Aa=a.scissorTest,ka.copy(a.viewport)):(c=null, +qa.copy(ya).multiplyScalar(aa),Aa=Ba,ka.copy(la).multiplyScalar(aa));ua!==c&&(r.bindFramebuffer(r.FRAMEBUFFER,c),ua=c);K.scissor(qa);K.setScissorTest(Aa);K.viewport(ka);b&&(b=U.get(a.texture),r.framebufferTexture2D(r.FRAMEBUFFER,r.COLOR_ATTACHMENT0,r.TEXTURE_CUBE_MAP_POSITIVE_X+a.activeCubeFace,b.__webglTexture,a.activeMipMapLevel))};this.readRenderTargetPixels=function(a,b,c,d,e,g){if(!1===a instanceof THREE.WebGLRenderTarget)console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget."); +else{var f=U.get(a).__webglFramebuffer;if(f){var h=!1;f!==ua&&(r.bindFramebuffer(r.FRAMEBUFFER,f),h=!0);try{var k=a.texture;k.format!==THREE.RGBAFormat&&L(k.format)!==r.getParameter(r.IMPLEMENTATION_COLOR_READ_FORMAT)?console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format."):k.type===THREE.UnsignedByteType||L(k.type)===r.getParameter(r.IMPLEMENTATION_COLOR_READ_TYPE)||k.type===THREE.FloatType&&V.get("WEBGL_color_buffer_float")||k.type=== +THREE.HalfFloatType&&V.get("EXT_color_buffer_half_float")?r.checkFramebufferStatus(r.FRAMEBUFFER)===r.FRAMEBUFFER_COMPLETE?r.readPixels(b,c,d,e,L(k.format),L(k.type),g):console.error("THREE.WebGLRenderer.readRenderTargetPixels: readPixels from renderTarget failed. Framebuffer not complete."):console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.")}finally{h&&r.bindFramebuffer(r.FRAMEBUFFER,ua)}}}}}; +THREE.WebGLRenderTarget=function(a,b,c){this.uuid=THREE.Math.generateUUID();this.width=a;this.height=b;this.scissor=new THREE.Vector4(0,0,a,b);this.scissorTest=!1;this.viewport=new THREE.Vector4(0,0,a,b);c=c||{};void 0===c.minFilter&&(c.minFilter=THREE.LinearFilter);this.texture=new THREE.Texture(void 0,void 0,c.wrapS,c.wrapT,c.magFilter,c.minFilter,c.format,c.type,c.anisotropy);this.depthBuffer=void 0!==c.depthBuffer?c.depthBuffer:!0;this.stencilBuffer=void 0!==c.stencilBuffer?c.stencilBuffer:!0}; +THREE.WebGLRenderTarget.prototype={constructor:THREE.WebGLRenderTarget,setSize:function(a,b){if(this.width!==a||this.height!==b)this.width=a,this.height=b,this.dispose();this.viewport.set(0,0,a,b);this.scissor.set(0,0,a,b)},clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.width=a.width;this.height=a.height;this.viewport.copy(a.viewport);this.texture=a.texture.clone();this.depthBuffer=a.depthBuffer;this.stencilBuffer=a.stencilBuffer;return this},dispose:function(){this.dispatchEvent({type:"dispose"})}}; +THREE.EventDispatcher.prototype.apply(THREE.WebGLRenderTarget.prototype);THREE.WebGLRenderTargetCube=function(a,b,c){THREE.WebGLRenderTarget.call(this,a,b,c);this.activeMipMapLevel=this.activeCubeFace=0};THREE.WebGLRenderTargetCube.prototype=Object.create(THREE.WebGLRenderTarget.prototype);THREE.WebGLRenderTargetCube.prototype.constructor=THREE.WebGLRenderTargetCube; +THREE.WebGLBufferRenderer=function(a,b,c){var d;this.setMode=function(a){d=a};this.render=function(b,f){a.drawArrays(d,b,f);c.calls++;c.vertices+=f;d===a.TRIANGLES&&(c.faces+=f/3)};this.renderInstances=function(e){var f=b.get("ANGLE_instanced_arrays");if(null===f)console.error("THREE.WebGLBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.");else{var g=e.attributes.position,h=0,h=g instanceof THREE.InterleavedBufferAttribute?g.data.count: +g.count;f.drawArraysInstancedANGLE(d,0,h,e.maxInstancedCount);c.calls++;c.vertices+=h*e.maxInstancedCount;d===a.TRIANGLES&&(c.faces+=e.maxInstancedCount*h/3)}}}; +THREE.WebGLIndexedBufferRenderer=function(a,b,c){var d,e,f;this.setMode=function(a){d=a};this.setIndex=function(c){c.array instanceof Uint32Array&&b.get("OES_element_index_uint")?(e=a.UNSIGNED_INT,f=4):(e=a.UNSIGNED_SHORT,f=2)};this.render=function(b,h){a.drawElements(d,h,e,b*f);c.calls++;c.vertices+=h;d===a.TRIANGLES&&(c.faces+=h/3)};this.renderInstances=function(g,h,k){var l=b.get("ANGLE_instanced_arrays");null===l?console.error("THREE.WebGLBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays."): +(l.drawElementsInstancedANGLE(d,k,e,h*f,g.maxInstancedCount),c.calls++,c.vertices+=k*g.maxInstancedCount,d===a.TRIANGLES&&(c.faces+=g.maxInstancedCount*k/3))}}; +THREE.WebGLExtensions=function(a){var b={};this.get=function(c){if(void 0!==b[c])return b[c];var d;switch(c){case "EXT_texture_filter_anisotropic":d=a.getExtension("EXT_texture_filter_anisotropic")||a.getExtension("MOZ_EXT_texture_filter_anisotropic")||a.getExtension("WEBKIT_EXT_texture_filter_anisotropic");break;case "WEBGL_compressed_texture_s3tc":d=a.getExtension("WEBGL_compressed_texture_s3tc")||a.getExtension("MOZ_WEBGL_compressed_texture_s3tc")||a.getExtension("WEBKIT_WEBGL_compressed_texture_s3tc"); +break;case "WEBGL_compressed_texture_pvrtc":d=a.getExtension("WEBGL_compressed_texture_pvrtc")||a.getExtension("WEBKIT_WEBGL_compressed_texture_pvrtc");break;case "WEBGL_compressed_texture_etc1":d=a.getExtension("WEBGL_compressed_texture_etc1");break;default:d=a.getExtension(c)}null===d&&console.warn("THREE.WebGLRenderer: "+c+" extension not supported.");return b[c]=d}}; +THREE.WebGLCapabilities=function(a,b,c){function d(b){if("highp"===b){if(0c){var d=b;b=c;c=d}d=a[b];return void 0===d?(a[b]=[c],!0):-1===d.indexOf(c)?(d.push(c),!0):!1}var f=new THREE.WebGLGeometries(a,b,c);this.getAttributeBuffer=function(a){return a instanceof THREE.InterleavedBufferAttribute?b.get(a.data).__webglBuffer:b.get(a).__webglBuffer};this.getWireframeAttribute= +function(c){var f=b.get(c);if(void 0!==f.wireframe)return f.wireframe;var k=[],l=c.index,p=c.attributes;c=p.position;if(null!==l)for(var p={},l=l.array,n=0,m=l.length;n/g,function(a,b){var c=THREE.ShaderChunk[b];if(void 0===c)throw Error("Can not resolve #include <"+ +b+">");return k(c)})}function l(a){return a.replace(/for \( int i \= (\d+)\; i < (\d+)\; i \+\+ \) \{([\s\S]+?)(?=\})\}/g,function(a,b,c,d){a="";for(b=parseInt(b);b 0 ) {\nfloat depth = gl_FragCoord.z / gl_FragCoord.w;\nfloat fogFactor = 0.0;\nif ( fogType == 1 ) {\nfogFactor = smoothstep( fogNear, fogFar, depth );\n} else {\nconst float LOG2 = 1.442695;\nfogFactor = exp2( - fogDensity * fogDensity * depth * depth * LOG2 );\nfogFactor = 1.0 - clamp( fogFactor, 0.0, 1.0 );\n}\ngl_FragColor = mix( gl_FragColor, vec4( fogColor, gl_FragColor.w ), fogFactor );\n}\n}"].join("\n")); +x.compileShader(I);x.compileShader(O);x.attachShader(M,I);x.attachShader(M,O);x.linkProgram(M);B=M;s=x.getAttribLocation(B,"position");w=x.getAttribLocation(B,"uv");c=x.getUniformLocation(B,"uvOffset");d=x.getUniformLocation(B,"uvScale");e=x.getUniformLocation(B,"rotation");f=x.getUniformLocation(B,"scale");g=x.getUniformLocation(B,"color");h=x.getUniformLocation(B,"map");k=x.getUniformLocation(B,"opacity");l=x.getUniformLocation(B,"modelViewMatrix");p=x.getUniformLocation(B,"projectionMatrix");n= +x.getUniformLocation(B,"fogType");m=x.getUniformLocation(B,"fogDensity");q=x.getUniformLocation(B,"fogNear");u=x.getUniformLocation(B,"fogFar");v=x.getUniformLocation(B,"fogColor");t=x.getUniformLocation(B,"alphaTest");M=document.createElement("canvas");M.width=8;M.height=8;I=M.getContext("2d");I.fillStyle="white";I.fillRect(0,0,8,8);G=new THREE.Texture(M);G.needsUpdate=!0}x.useProgram(B);D.initAttributes();D.enableAttribute(s);D.enableAttribute(w);D.disableUnusedAttributes();D.disable(x.CULL_FACE); +D.enable(x.BLEND);x.bindBuffer(x.ARRAY_BUFFER,z);x.vertexAttribPointer(s,2,x.FLOAT,!1,16,0);x.vertexAttribPointer(w,2,x.FLOAT,!1,16,8);x.bindBuffer(x.ELEMENT_ARRAY_BUFFER,y);x.uniformMatrix4fv(p,!1,N.projectionMatrix.elements);D.activeTexture(x.TEXTURE0);x.uniform1i(h,0);I=M=0;(O=A.fog)?(x.uniform3f(v,O.color.r,O.color.g,O.color.b),O instanceof THREE.Fog?(x.uniform1f(q,O.near),x.uniform1f(u,O.far),x.uniform1i(n,1),I=M=1):O instanceof THREE.FogExp2&&(x.uniform1f(m,O.density),x.uniform1i(n,2),I=M=2)): +(x.uniform1i(n,0),I=M=0);for(var O=0,Q=b.length;Oc)return null;var d=[],e=[],f=[],g,h,k;if(0=l--){console.warn("THREE.ShapeUtils: Unable to triangulate polygon! in triangulate()");break}g=h;c<=g&&(g=0);h=g+1;c<=h&&(h=0);k=h+1;c<=k&&(k=0);var p;a:{var n= +p=void 0,m=void 0,q=void 0,u=void 0,v=void 0,t=void 0,s=void 0,w=void 0,n=a[e[g]].x,m=a[e[g]].y,q=a[e[h]].x,u=a[e[h]].y,v=a[e[k]].x,t=a[e[k]].y;if(Number.EPSILON>(q-n)*(t-m)-(u-m)*(v-n))p=!1;else{var E=void 0,x=void 0,D=void 0,z=void 0,y=void 0,B=void 0,G=void 0,F=void 0,H=void 0,L=void 0,H=F=G=w=s=void 0,E=v-q,x=t-u,D=n-v,z=m-t,y=q-n,B=u-m;for(p=0;p=-Number.EPSILON&& +F>=-Number.EPSILON&&G>=-Number.EPSILON)){p=!1;break a}p=!0}}if(p){d.push([a[e[g]],a[e[h]],a[e[k]]]);f.push([e[g],e[h],e[k]]);g=h;for(k=h+1;kNumber.EPSILON){if(0B||B> +y)return[];k=l*n-k*p;if(0>k||k>y)return[]}else{if(0d?[]:k===d?f?[]:[g]:a<=d?[g,h]:[g,l]}function e(a,b,c,d){var e=b.x-a.x,f=b.y-a.y;b=c.x-a.x;c=c.y-a.y;var g=d.x-a.x;d=d.y-a.y;a=e*c-f*b;e=e*d-f*g;return Math.abs(a)>Number.EPSILON?(b=g*c-d*b,0f&&(f=d);var g=a+1;g>d&&(g=0);d=e(h[a],h[f],h[g],k[b]);if(!d)return!1;d=k.length-1;f=b-1;0>f&&(f=d);g=b+1;g>d&&(g=0);return(d=e(k[b],k[f],k[g],h[a]))?!0:!1}function f(a,b){var c,e;for(c=0;cN){console.log("Infinite Loop! Holes left:"+l.length+", Probably Hole outside Shape!");break}for(p=F;ph;h++)l=k[h].x+":"+k[h].y,l=p[l],void 0!==l&&(k[h]=l);return n.concat()},isClockWise:function(a){return 0>THREE.ShapeUtils.area(a)},b2:function(){return function(a,b,c,d){var e=1-a;return e*e*b+2*(1-a)*a*c+a*a*d}}(),b3:function(){return function(a,b,c,d,e){var f= +1-a,g=1-a;return f*f*f*b+3*g*g*a*c+3*(1-a)*a*a*d+a*a*a*e}}()};THREE.Curve=function(){}; +THREE.Curve.prototype={constructor:THREE.Curve,getPoint:function(a){console.warn("THREE.Curve: Warning, getPoint() not implemented!");return null},getPointAt:function(a){a=this.getUtoTmapping(a);return this.getPoint(a)},getPoints:function(a){a||(a=5);var b,c=[];for(b=0;b<=a;b++)c.push(this.getPoint(b/a));return c},getSpacedPoints:function(a){a||(a=5);var b,c=[];for(b=0;b<=a;b++)c.push(this.getPointAt(b/a));return c},getLength:function(){var a=this.getLengths();return a[a.length-1]},getLengths:function(a){a|| +(a=this.__arcLengthDivisions?this.__arcLengthDivisions:200);if(this.cacheArcLengths&&this.cacheArcLengths.length===a+1&&!this.needsUpdate)return this.cacheArcLengths;this.needsUpdate=!1;var b=[],c,d=this.getPoint(0),e,f=0;b.push(0);for(e=1;e<=a;e++)c=this.getPoint(e/a),f+=c.distanceTo(d),b.push(f),d=c;return this.cacheArcLengths=b},updateArcLengths:function(){this.needsUpdate=!0;this.getLengths()},getUtoTmapping:function(a,b){var c=this.getLengths(),d=0,e=c.length,f;f=b?b:a*c[e-1];for(var g=0,h=e- +1,k;g<=h;)if(d=Math.floor(g+(h-g)/2),k=c[d]-f,0>k)g=d+1;else if(0b&&(b=0);1=b)return a=this.curves[d],b=1-(c[d]-b)/a.getLength(),a.getPointAt(b);d++}return null};THREE.CurvePath.prototype.getLength=function(){var a=this.getCurveLengths();return a[a.length-1]}; +THREE.CurvePath.prototype.getCurveLengths=function(){if(this.cacheLengths&&this.cacheLengths.length===this.curves.length)return this.cacheLengths;for(var a=[],b=0,c=0,d=this.curves.length;cNumber.EPSILON){if(0>l&&(g=b[f],k=-k,h=b[e],l=-l),!(a.yh.y))if(a.y===g.y){if(a.x===g.x)return!0}else{e=l*(a.x-g.x)-k*(a.y-g.y);if(0===e)return!0;0>e||(d=!d)}}else if(a.y===g.y&&(h.x<=a.x&&a.x<=g.x|| +g.x<=a.x&&a.x<=h.x))return!0}return d}var e=THREE.ShapeUtils.isClockWise,f=function(a){for(var b=[],c=new THREE.Path,d=0,e=a.length;db.length-2?b.length-1:c+1],b=b[c>b.length-3?b.length-1:c+2],c=THREE.CurveUtils.interpolate;return new THREE.Vector2(c(d.x,e.x,f.x,b.x,a),c(d.y,e.y,f.y,b.y,a))};THREE.EllipseCurve=function(a,b,c,d,e,f,g,h){this.aX=a;this.aY=b;this.xRadius=c;this.yRadius=d;this.aStartAngle=e;this.aEndAngle=f;this.aClockwise=g;this.aRotation=h||0};THREE.EllipseCurve.prototype=Object.create(THREE.Curve.prototype); +THREE.EllipseCurve.prototype.constructor=THREE.EllipseCurve; +THREE.EllipseCurve.prototype.getPoint=function(a){var b=this.aEndAngle-this.aStartAngle;0>b&&(b+=2*Math.PI);b>2*Math.PI&&(b-=2*Math.PI);b=!0===this.aClockwise?this.aEndAngle+(1-a)*(2*Math.PI-b):this.aStartAngle+a*b;a=this.aX+this.xRadius*Math.cos(b);var c=this.aY+this.yRadius*Math.sin(b);if(0!==this.aRotation){var b=Math.cos(this.aRotation),d=Math.sin(this.aRotation),e=a;a=(e-this.aX)*b-(c-this.aY)*d+this.aX;c=(e-this.aX)*d+(c-this.aY)*b+this.aY}return new THREE.Vector2(a,c)}; +THREE.ArcCurve=function(a,b,c,d,e,f){THREE.EllipseCurve.call(this,a,b,c,c,d,e,f)};THREE.ArcCurve.prototype=Object.create(THREE.EllipseCurve.prototype);THREE.ArcCurve.prototype.constructor=THREE.ArcCurve;THREE.LineCurve3=THREE.Curve.create(function(a,b){this.v1=a;this.v2=b},function(a){var b=new THREE.Vector3;b.subVectors(this.v2,this.v1);b.multiplyScalar(a);b.add(this.v1);return b}); +THREE.QuadraticBezierCurve3=THREE.Curve.create(function(a,b,c){this.v0=a;this.v1=b;this.v2=c},function(a){var b=THREE.ShapeUtils.b2;return new THREE.Vector3(b(a,this.v0.x,this.v1.x,this.v2.x),b(a,this.v0.y,this.v1.y,this.v2.y),b(a,this.v0.z,this.v1.z,this.v2.z))}); +THREE.CubicBezierCurve3=THREE.Curve.create(function(a,b,c,d){this.v0=a;this.v1=b;this.v2=c;this.v3=d},function(a){var b=THREE.ShapeUtils.b3;return new THREE.Vector3(b(a,this.v0.x,this.v1.x,this.v2.x,this.v3.x),b(a,this.v0.y,this.v1.y,this.v2.y,this.v3.y),b(a,this.v0.z,this.v1.z,this.v2.z,this.v3.z))}); +THREE.SplineCurve3=THREE.Curve.create(function(a){console.warn("THREE.SplineCurve3 will be deprecated. Please use THREE.CatmullRomCurve3");this.points=void 0==a?[]:a},function(a){var b=this.points;a*=b.length-1;var c=Math.floor(a);a-=c;var d=b[0==c?c:c-1],e=b[c],f=b[c>b.length-2?b.length-1:c+1],b=b[c>b.length-3?b.length-1:c+2],c=THREE.CurveUtils.interpolate;return new THREE.Vector3(c(d.x,e.x,f.x,b.x,a),c(d.y,e.y,f.y,b.y,a),c(d.z,e.z,f.z,b.z,a))}); +THREE.CatmullRomCurve3=function(){function a(){}var b=new THREE.Vector3,c=new a,d=new a,e=new a;a.prototype.init=function(a,b,c,d){this.c0=a;this.c1=c;this.c2=-3*a+3*b-2*c-d;this.c3=2*a-2*b+c+d};a.prototype.initNonuniformCatmullRom=function(a,b,c,d,e,p,n){a=((b-a)/e-(c-a)/(e+p)+(c-b)/p)*p;d=((c-b)/p-(d-b)/(p+n)+(d-c)/n)*p;this.init(b,c,a,d)};a.prototype.initCatmullRom=function(a,b,c,d,e){this.init(b,c,e*(c-a),e*(d-b))};a.prototype.calc=function(a){var b=a*a;return this.c0+this.c1*a+this.c2*b+this.c3* +b*a};return THREE.Curve.create(function(a){this.points=a||[];this.closed=!1},function(a){var g=this.points,h,k;k=g.length;2>k&&console.log("duh, you need at least 2 points");a*=k-(this.closed?0:1);h=Math.floor(a);a-=h;this.closed?h+=0h&&(h=1);1E-4>k&&(k=h);1E-4>m&&(m=h);c.initNonuniformCatmullRom(l.x,p.x,n.x,g.x,k,h,m);d.initNonuniformCatmullRom(l.y,p.y,n.y,g.y,k,h,m);e.initNonuniformCatmullRom(l.z,p.z,n.z,g.z,k,h,m)}else"catmullrom"===this.type&&(k=void 0!==this.tension?this.tension:.5,c.initCatmullRom(l.x,p.x,n.x,g.x, +k),d.initCatmullRom(l.y,p.y,n.y,g.y,k),e.initCatmullRom(l.z,p.z,n.z,g.z,k));return new THREE.Vector3(c.calc(a),d.calc(a),e.calc(a))})}();THREE.ClosedSplineCurve3=function(a){console.warn("THREE.ClosedSplineCurve3 has been deprecated. Please use THREE.CatmullRomCurve3.");THREE.CatmullRomCurve3.call(this,a);this.type="catmullrom";this.closed=!0};THREE.ClosedSplineCurve3.prototype=Object.create(THREE.CatmullRomCurve3.prototype); +THREE.BoxGeometry=function(a,b,c,d,e,f){THREE.Geometry.call(this);this.type="BoxGeometry";this.parameters={width:a,height:b,depth:c,widthSegments:d,heightSegments:e,depthSegments:f};this.fromBufferGeometry(new THREE.BoxBufferGeometry(a,b,c,d,e,f));this.mergeVertices()};THREE.BoxGeometry.prototype=Object.create(THREE.Geometry.prototype);THREE.BoxGeometry.prototype.constructor=THREE.BoxGeometry;THREE.CubeGeometry=THREE.BoxGeometry; +THREE.BoxBufferGeometry=function(a,b,c,d,e,f){function g(a,b,c,d,e,f,g,k,l,L,A){var N=f/l,M=g/L,I=f/2,O=g/2,Q=k/2;g=l+1;for(var P=L+1,T=f=0,J=new THREE.Vector3,C=0;Cm;m++){e[0]=n[g[m]];e[1]=n[g[(m+1)%3]];e.sort(c);var q=e.toString();void 0===f[q]?f[q]={vert1:e[0],vert2:e[1],face1:l, +face2:void 0}:f[q].face2=l}e=[];for(q in f)if(g=f[q],void 0===g.face2||h[g.face1].normal.dot(h[g.face2].normal)<=d)l=k[g.vert1],e.push(l.x),e.push(l.y),e.push(l.z),l=k[g.vert2],e.push(l.x),e.push(l.y),e.push(l.z);this.addAttribute("position",new THREE.BufferAttribute(new Float32Array(e),3))};THREE.EdgesGeometry.prototype=Object.create(THREE.BufferGeometry.prototype);THREE.EdgesGeometry.prototype.constructor=THREE.EdgesGeometry; +THREE.ExtrudeGeometry=function(a,b){"undefined"!==typeof a&&(THREE.Geometry.call(this),this.type="ExtrudeGeometry",a=Array.isArray(a)?a:[a],this.addShapeList(a,b),this.computeFaceNormals())};THREE.ExtrudeGeometry.prototype=Object.create(THREE.Geometry.prototype);THREE.ExtrudeGeometry.prototype.constructor=THREE.ExtrudeGeometry;THREE.ExtrudeGeometry.prototype.addShapeList=function(a,b){for(var c=a.length,d=0;dNumber.EPSILON){var k=Math.sqrt(h),l=Math.sqrt(f*f+g*g),h=b.x-e/k;b=b.y+d/k;f=((c.x-g/l-h)*g-(c.y+f/l-b)*f)/(d*g-e*f);c=h+d*f-a.x;a=b+e*f-a.y;d=c*c+a*a;if(2>=d)return new THREE.Vector2(c,a);d=Math.sqrt(d/2)}else a=!1,d>Number.EPSILON? +f>Number.EPSILON&&(a=!0):d<-Number.EPSILON?f<-Number.EPSILON&&(a=!0):Math.sign(e)===Math.sign(g)&&(a=!0),a?(c=-e,a=d,d=Math.sqrt(h)):(c=d,a=e,d=Math.sqrt(h/2));return new THREE.Vector2(c/d,a/d)}function e(a,b){var c,d;for(C=a.length;0<=--C;){c=C;d=C-1;0>d&&(d=a.length-1);for(var e=0,f=q+2*p,e=0;eMath.abs(b.y-c.y)?[new THREE.Vector2(b.x,1-b.z),new THREE.Vector2(c.x,1-c.z),new THREE.Vector2(d.x,1-d.z),new THREE.Vector2(e.x,1-e.z)]:[new THREE.Vector2(b.y,1-b.z),new THREE.Vector2(c.y,1-c.z),new THREE.Vector2(d.y, +1-d.z),new THREE.Vector2(e.y,1-e.z)]}};THREE.ShapeGeometry=function(a,b){THREE.Geometry.call(this);this.type="ShapeGeometry";!1===Array.isArray(a)&&(a=[a]);this.addShapeList(a,b);this.computeFaceNormals()};THREE.ShapeGeometry.prototype=Object.create(THREE.Geometry.prototype);THREE.ShapeGeometry.prototype.constructor=THREE.ShapeGeometry;THREE.ShapeGeometry.prototype.addShapeList=function(a,b){for(var c=0,d=a.length;cNumber.EPSILON&&(h.normalize(),d=Math.acos(THREE.Math.clamp(e[l-1].dot(e[l]),-1,1)),f[l].applyMatrix4(k.makeRotationAxis(h,d))),g[l].crossVectors(e[l],f[l]);if(c)for(d=Math.acos(THREE.Math.clamp(f[0].dot(f[b-1]),-1,1)),d/=b-1,0c&&1===a.x&&(a=new THREE.Vector2(a.x-1,a.y));0===b.x&&0===b.z&&(a=new THREE.Vector2(c/ +2/Math.PI+.5,a.y));return a.clone()}THREE.Geometry.call(this);this.type="PolyhedronGeometry";this.parameters={vertices:a,indices:b,radius:c,detail:d};c=c||1;d=d||0;for(var k=this,l=0,p=a.length;lq&&(.2>d&&(b[0].x+=1),.2>a&&(b[1].x+=1),.2>n&&(b[2].x+=1));l=0;for(p=this.vertices.length;ln;n++){c[0]=p[e[n]];c[1]=p[e[(n+1)%3]];c.sort(b);var m=c.toString();void 0===d[m]&&(k[2*h]=c[0],k[2*h+1]=c[1],d[m]=!0,h++)}c=new Float32Array(6*h);a=0;for(l=h;an;n++)d=f[k[2*a+n]],h=6*a+3*n,c[h+0]=d.x,c[h+1]=d.y, +c[h+2]=d.z;this.addAttribute("position",new THREE.BufferAttribute(c,3))}else if(a instanceof THREE.BufferGeometry){if(null!==a.index){l=a.index.array;f=a.attributes.position;e=a.groups;h=0;0===e.length&&a.addGroup(0,l.length);k=new Uint32Array(2*l.length);g=0;for(p=e.length;gn;n++)c[0]=l[a+n],c[1]=l[a+(n+1)%3],c.sort(b),m=c.toString(),void 0===d[m]&&(k[2*h]=c[0],k[2*h+1]=c[1],d[m]=!0,h++)}c=new Float32Array(6*h);a=0;for(l=h;a< +l;a++)for(n=0;2>n;n++)h=6*a+3*n,d=k[2*a+n],c[h+0]=f.getX(d),c[h+1]=f.getY(d),c[h+2]=f.getZ(d)}else for(f=a.attributes.position.array,h=f.length/3,k=h/3,c=new Float32Array(6*h),a=0,l=k;an;n++)h=18*a+6*n,k=9*a+3*n,c[h+0]=f[k],c[h+1]=f[k+1],c[h+2]=f[k+2],d=9*a+(n+1)%3*3,c[h+3]=f[d],c[h+4]=f[d+1],c[h+5]=f[d+2];this.addAttribute("position",new THREE.BufferAttribute(c,3))}};THREE.WireframeGeometry.prototype=Object.create(THREE.BufferGeometry.prototype); +THREE.WireframeGeometry.prototype.constructor=THREE.WireframeGeometry;THREE.AxisHelper=function(a){a=a||1;var b=new Float32Array([0,0,0,a,0,0,0,0,0,0,a,0,0,0,0,0,0,a]),c=new Float32Array([1,0,0,1,.6,0,0,1,0,.6,1,0,0,0,1,0,.6,1]);a=new THREE.BufferGeometry;a.addAttribute("position",new THREE.BufferAttribute(b,3));a.addAttribute("color",new THREE.BufferAttribute(c,3));b=new THREE.LineBasicMaterial({vertexColors:THREE.VertexColors});THREE.LineSegments.call(this,a,b)};THREE.AxisHelper.prototype=Object.create(THREE.LineSegments.prototype); +THREE.AxisHelper.prototype.constructor=THREE.AxisHelper; +THREE.ArrowHelper=function(){var a=new THREE.Geometry;a.vertices.push(new THREE.Vector3(0,0,0),new THREE.Vector3(0,1,0));var b=new THREE.CylinderGeometry(0,.5,1,5,1);b.translate(0,-.5,0);return function(c,d,e,f,g,h){THREE.Object3D.call(this);void 0===f&&(f=16776960);void 0===e&&(e=1);void 0===g&&(g=.2*e);void 0===h&&(h=.2*g);this.position.copy(d);this.line=new THREE.Line(a,new THREE.LineBasicMaterial({color:f}));this.line.matrixAutoUpdate=!1;this.add(this.line);this.cone=new THREE.Mesh(b,new THREE.MeshBasicMaterial({color:f})); +this.cone.matrixAutoUpdate=!1;this.add(this.cone);this.setDirection(c);this.setLength(e,g,h)}}();THREE.ArrowHelper.prototype=Object.create(THREE.Object3D.prototype);THREE.ArrowHelper.prototype.constructor=THREE.ArrowHelper;THREE.ArrowHelper.prototype.setDirection=function(){var a=new THREE.Vector3,b;return function(c){.99999c.y?this.quaternion.set(1,0,0,0):(a.set(c.z,0,-c.x).normalize(),b=Math.acos(c.y),this.quaternion.setFromAxisAngle(a,b))}}(); +THREE.ArrowHelper.prototype.setLength=function(a,b,c){void 0===b&&(b=.2*a);void 0===c&&(c=.2*b);this.line.scale.set(1,Math.max(0,a-b),1);this.line.updateMatrix();this.cone.scale.set(c,b,c);this.cone.position.y=a;this.cone.updateMatrix()};THREE.ArrowHelper.prototype.setColor=function(a){this.line.material.color.set(a);this.cone.material.color.set(a)}; +THREE.BoxHelper=function(a){var b=new Uint16Array([0,1,1,2,2,3,3,0,4,5,5,6,6,7,7,4,0,4,1,5,2,6,3,7]),c=new Float32Array(24),d=new THREE.BufferGeometry;d.setIndex(new THREE.BufferAttribute(b,1));d.addAttribute("position",new THREE.BufferAttribute(c,3));THREE.LineSegments.call(this,d,new THREE.LineBasicMaterial({color:16776960}));void 0!==a&&this.update(a)};THREE.BoxHelper.prototype=Object.create(THREE.LineSegments.prototype);THREE.BoxHelper.prototype.constructor=THREE.BoxHelper; +THREE.BoxHelper.prototype.update=function(){var a=new THREE.Box3;return function(b){a.setFromObject(b);if(!a.isEmpty()){b=a.min;var c=a.max,d=this.geometry.attributes.position,e=d.array;e[0]=c.x;e[1]=c.y;e[2]=c.z;e[3]=b.x;e[4]=c.y;e[5]=c.z;e[6]=b.x;e[7]=b.y;e[8]=c.z;e[9]=c.x;e[10]=b.y;e[11]=c.z;e[12]=c.x;e[13]=c.y;e[14]=b.z;e[15]=b.x;e[16]=c.y;e[17]=b.z;e[18]=b.x;e[19]=b.y;e[20]=b.z;e[21]=c.x;e[22]=b.y;e[23]=b.z;d.needsUpdate=!0;this.geometry.computeBoundingSphere()}}}(); +THREE.BoundingBoxHelper=function(a,b){var c=void 0!==b?b:8947848;this.object=a;this.box=new THREE.Box3;THREE.Mesh.call(this,new THREE.BoxGeometry(1,1,1),new THREE.MeshBasicMaterial({color:c,wireframe:!0}))};THREE.BoundingBoxHelper.prototype=Object.create(THREE.Mesh.prototype);THREE.BoundingBoxHelper.prototype.constructor=THREE.BoundingBoxHelper;THREE.BoundingBoxHelper.prototype.update=function(){this.box.setFromObject(this.object);this.box.size(this.scale);this.box.center(this.position)}; +THREE.CameraHelper=function(a){function b(a,b,d){c(a,d);c(b,d)}function c(a,b){d.vertices.push(new THREE.Vector3);d.colors.push(new THREE.Color(b));void 0===f[a]&&(f[a]=[]);f[a].push(d.vertices.length-1)}var d=new THREE.Geometry,e=new THREE.LineBasicMaterial({color:16777215,vertexColors:THREE.FaceColors}),f={};b("n1","n2",16755200);b("n2","n4",16755200);b("n4","n3",16755200);b("n3","n1",16755200);b("f1","f2",16755200);b("f2","f4",16755200);b("f4","f3",16755200);b("f3","f1",16755200);b("n1","f1",16755200); +b("n2","f2",16755200);b("n3","f3",16755200);b("n4","f4",16755200);b("p","n1",16711680);b("p","n2",16711680);b("p","n3",16711680);b("p","n4",16711680);b("u1","u2",43775);b("u2","u3",43775);b("u3","u1",43775);b("c","t",16777215);b("p","c",3355443);b("cn1","cn2",3355443);b("cn3","cn4",3355443);b("cf1","cf2",3355443);b("cf3","cf4",3355443);THREE.LineSegments.call(this,d,e);this.camera=a;this.camera.updateProjectionMatrix();this.matrix=a.matrixWorld;this.matrixAutoUpdate=!1;this.pointMap=f;this.update()}; +THREE.CameraHelper.prototype=Object.create(THREE.LineSegments.prototype);THREE.CameraHelper.prototype.constructor=THREE.CameraHelper; +THREE.CameraHelper.prototype.update=function(){function a(a,g,h,k){d.set(g,h,k).unproject(e);a=c[a];if(void 0!==a)for(g=0,h=a.length;gd;d++)c.faces[d].color=this.colors[4>d?0:1];d=new THREE.MeshBasicMaterial({vertexColors:THREE.FaceColors,wireframe:!0});this.lightSphere=new THREE.Mesh(c,d);this.add(this.lightSphere);this.update()}; +THREE.HemisphereLightHelper.prototype=Object.create(THREE.Object3D.prototype);THREE.HemisphereLightHelper.prototype.constructor=THREE.HemisphereLightHelper;THREE.HemisphereLightHelper.prototype.dispose=function(){this.lightSphere.geometry.dispose();this.lightSphere.material.dispose()}; +THREE.HemisphereLightHelper.prototype.update=function(){var a=new THREE.Vector3;return function(){this.colors[0].copy(this.light.color).multiplyScalar(this.light.intensity);this.colors[1].copy(this.light.groundColor).multiplyScalar(this.light.intensity);this.lightSphere.lookAt(a.setFromMatrixPosition(this.light.matrixWorld).negate());this.lightSphere.geometry.colorsNeedUpdate=!0}}(); +THREE.PointLightHelper=function(a,b){this.light=a;this.light.updateMatrixWorld();var c=new THREE.SphereGeometry(b,4,2),d=new THREE.MeshBasicMaterial({wireframe:!0,fog:!1});d.color.copy(this.light.color).multiplyScalar(this.light.intensity);THREE.Mesh.call(this,c,d);this.matrix=this.light.matrixWorld;this.matrixAutoUpdate=!1};THREE.PointLightHelper.prototype=Object.create(THREE.Mesh.prototype);THREE.PointLightHelper.prototype.constructor=THREE.PointLightHelper; +THREE.PointLightHelper.prototype.dispose=function(){this.geometry.dispose();this.material.dispose()};THREE.PointLightHelper.prototype.update=function(){this.material.color.copy(this.light.color).multiplyScalar(this.light.intensity)}; +THREE.SkeletonHelper=function(a){this.bones=this.getBoneList(a);for(var b=new THREE.Geometry,c=0;ch.end&&(h.end=f);c||(c=k)}}for(k in d)h=d[k],this.createAnimation(k,h.start,h.end,a);this.firstAnimation=c}; +THREE.MorphBlendMesh.prototype.setAnimationDirectionForward=function(a){if(a=this.animationsMap[a])a.direction=1,a.directionBackwards=!1};THREE.MorphBlendMesh.prototype.setAnimationDirectionBackward=function(a){if(a=this.animationsMap[a])a.direction=-1,a.directionBackwards=!0};THREE.MorphBlendMesh.prototype.setAnimationFPS=function(a,b){var c=this.animationsMap[a];c&&(c.fps=b,c.duration=(c.end-c.start)/c.fps)}; +THREE.MorphBlendMesh.prototype.setAnimationDuration=function(a,b){var c=this.animationsMap[a];c&&(c.duration=b,c.fps=(c.end-c.start)/c.duration)};THREE.MorphBlendMesh.prototype.setAnimationWeight=function(a,b){var c=this.animationsMap[a];c&&(c.weight=b)};THREE.MorphBlendMesh.prototype.setAnimationTime=function(a,b){var c=this.animationsMap[a];c&&(c.time=b)};THREE.MorphBlendMesh.prototype.getAnimationTime=function(a){var b=0;if(a=this.animationsMap[a])b=a.time;return b}; +THREE.MorphBlendMesh.prototype.getAnimationDuration=function(a){var b=-1;if(a=this.animationsMap[a])b=a.duration;return b};THREE.MorphBlendMesh.prototype.playAnimation=function(a){var b=this.animationsMap[a];b?(b.time=0,b.active=!0):console.warn("THREE.MorphBlendMesh: animation["+a+"] undefined in .playAnimation()")};THREE.MorphBlendMesh.prototype.stopAnimation=function(a){if(a=this.animationsMap[a])a.active=!1}; +THREE.MorphBlendMesh.prototype.update=function(a){for(var b=0,c=this.animationsList.length;bd.duration||0>d.time)d.direction*=-1,d.time>d.duration&&(d.time=d.duration,d.directionBackwards=!0),0>d.time&&(d.time=0,d.directionBackwards=!1)}else d.time%=d.duration,0>d.time&&(d.time+=d.duration);var f=d.start+THREE.Math.clamp(Math.floor(d.time/e),0,d.length-1),g=d.weight;f!==d.currentFrame&& +(this.morphTargetInfluences[d.lastFrame]=0,this.morphTargetInfluences[d.currentFrame]=1*g,this.morphTargetInfluences[f]=0,d.lastFrame=d.currentFrame,d.currentFrame=f);e=d.time%e/e;d.directionBackwards&&(e=1-e);d.currentFrame!==d.lastFrame?(this.morphTargetInfluences[d.currentFrame]=e*g,this.morphTargetInfluences[d.lastFrame]=(1-e)*g):this.morphTargetInfluences[d.currentFrame]=g}}}; +// tween.js - http://github.com/sole/tween.js - Licensed under the MIT License +'use strict';void 0===Date.now&&(Date.now=function(){return(new Date).valueOf()}); +var TWEEN=TWEEN||function(){var a=[];return{REVISION:"14",getAll:function(){return a},removeAll:function(){a=[]},add:function(c){a.push(c)},remove:function(c){c=a.indexOf(c);-1!==c&&a.splice(c,1)},update:function(c){if(0===a.length)return!1;for(var b=0,c=void 0!==c?c:"undefined"!==typeof window&&void 0!==window.performance&&void 0!==window.performance.now?window.performance.now():Date.now();b(a*=2)?0.5*a*a:-0.5*(--a*(a-2)-1)}},Cubic:{In:function(a){return a*a*a},Out:function(a){return--a*a*a+1},InOut:function(a){return 1>(a*=2)?0.5*a*a*a:0.5*((a-=2)*a*a+2)}},Quartic:{In:function(a){return a*a*a*a},Out:function(a){return 1- --a*a*a*a},InOut:function(a){return 1>(a*=2)?0.5*a*a*a*a:-0.5*((a-=2)*a*a*a-2)}},Quintic:{In:function(a){return a*a*a* +a*a},Out:function(a){return--a*a*a*a*a+1},InOut:function(a){return 1>(a*=2)?0.5*a*a*a*a*a:0.5*((a-=2)*a*a*a*a+2)}},Sinusoidal:{In:function(a){return 1-Math.cos(a*Math.PI/2)},Out:function(a){return Math.sin(a*Math.PI/2)},InOut:function(a){return 0.5*(1-Math.cos(Math.PI*a))}},Exponential:{In:function(a){return 0===a?0:Math.pow(1024,a-1)},Out:function(a){return 1===a?1:1-Math.pow(2,-10*a)},InOut:function(a){return 0===a?0:1===a?1:1>(a*=2)?0.5*Math.pow(1024,a-1):0.5*(-Math.pow(2,-10*(a-1))+2)}},Circular:{In:function(a){return 1- +Math.sqrt(1-a*a)},Out:function(a){return Math.sqrt(1- --a*a)},InOut:function(a){return 1>(a*=2)?-0.5*(Math.sqrt(1-a*a)-1):0.5*(Math.sqrt(1-(a-=2)*a)+1)}},Elastic:{In:function(a){var c,b=0.1;if(0===a)return 0;if(1===a)return 1;!b||1>b?(b=1,c=0.1):c=0.4*Math.asin(1/b)/(2*Math.PI);return-(b*Math.pow(2,10*(a-=1))*Math.sin((a-c)*2*Math.PI/0.4))},Out:function(a){var c,b=0.1;if(0===a)return 0;if(1===a)return 1;!b||1>b?(b=1,c=0.1):c=0.4*Math.asin(1/b)/(2*Math.PI);return b*Math.pow(2,-10*a)*Math.sin((a-c)* +2*Math.PI/0.4)+1},InOut:function(a){var c,b=0.1;if(0===a)return 0;if(1===a)return 1;!b||1>b?(b=1,c=0.1):c=0.4*Math.asin(1/b)/(2*Math.PI);return 1>(a*=2)?-0.5*b*Math.pow(2,10*(a-=1))*Math.sin((a-c)*2*Math.PI/0.4):0.5*b*Math.pow(2,-10*(a-=1))*Math.sin((a-c)*2*Math.PI/0.4)+1}},Back:{In:function(a){return a*a*(2.70158*a-1.70158)},Out:function(a){return--a*a*(2.70158*a+1.70158)+1},InOut:function(a){return 1>(a*=2)?0.5*a*a*(3.5949095*a-2.5949095):0.5*((a-=2)*a*(3.5949095*a+2.5949095)+2)}},Bounce:{In:function(a){return 1- +TWEEN.Easing.Bounce.Out(1-a)},Out:function(a){return a<1/2.75?7.5625*a*a:a<2/2.75?7.5625*(a-=1.5/2.75)*a+0.75:a<2.5/2.75?7.5625*(a-=2.25/2.75)*a+0.9375:7.5625*(a-=2.625/2.75)*a+0.984375},InOut:function(a){return 0.5>a?0.5*TWEEN.Easing.Bounce.In(2*a):0.5*TWEEN.Easing.Bounce.Out(2*a-1)+0.5}}}; +TWEEN.Interpolation={Linear:function(a,c){var b=a.length-1,d=b*c,e=Math.floor(d),g=TWEEN.Interpolation.Utils.Linear;return 0>c?g(a[0],a[1],d):1b?b:e+1],d-e)},Bezier:function(a,c){var b=0,d=a.length-1,e=Math.pow,g=TWEEN.Interpolation.Utils.Bernstein,h;for(h=0;h<=d;h++)b+=e(1-c,d-h)*e(c,h)*a[h]*g(d,h);return b},CatmullRom:function(a,c){var b=a.length-1,d=b*c,e=Math.floor(d),g=TWEEN.Interpolation.Utils.CatmullRom;return a[0]===a[b]?(0>c&&(e=Math.floor(d=b*(1+c))),g(a[(e- +1+b)%b],a[e],a[(e+1)%b],a[(e+2)%b],d-e)):0>c?a[0]-(g(a[0],a[0],a[1],a[1],-d)-a[0]):10deg it will return a delta of +1 instead of -359) + if (delta > 180) { + delta = delta - 360 + } + else if (delta < -180) { + delta = 360 + delta + } + return delta + }, + + initializeNavBall: function(){ + //initialize the three.js renderer + this.renderer = new THREE.WebGLRenderer({ + alpha: true, + antialias: true + }) + + this.renderer.setSize(1,1) + this.container.update(this.renderer.domElement) + + this.resize() + Event.observe(window, "resize", this.resize.bind(this)) + + //scene, camera, lights! + var scene = new THREE.Scene() + var camera = new THREE.PerspectiveCamera(32, 1, 0.01, 1000) + camera.position.z = 190 + + scene.add(new THREE.AmbientLight(0xaaaaaa)) + + var light1 = new THREE.DirectionalLight(0xffffff, 1) + light1.position.set(1500, 1500, 500) + + var light2 = new THREE.DirectionalLight(0xffffff, 0.5) + light2.position.set(-1500, -1500, 500) + + scene.add(light1) + scene.add(light2) + + //initialize the body geometry and materials + var navballGeometry = new THREE.SphereGeometry(this.displayRadius, 48, 48) + var navballTexture = THREE.ImageUtils.loadTexture('../assets/images/navball.png') + navballTexture.anisotropy = this.renderer.getMaxAnisotropy() + + var navballMaterial = new THREE.MeshPhongMaterial({ + map: navballTexture, + bumpMap: THREE.ImageUtils.loadTexture('../assets/images/navball-normal.png'), + bumpScale: 0.25, + shininess: 80, + }) + + this.navballMesh = new THREE.Mesh(navballGeometry, navballMaterial) + + scene.add(this.navballMesh) + + var animate = function(){ + window.setTimeout(function(){ + requestAnimationFrame(animate) + }, this.datalink.rate/60 ) //60 fps + + TWEEN.update() + + this.renderer.render(scene, camera) + }.bind(this) + + requestAnimationFrame(animate) + }, + + resize: function(){ + var width = this.container.getWidth() + var height = this.container.getHeight() + this.renderer.setSize(width, height) + }, + + initializeDatalink: function(){ + this.datalink.subscribeToData(['n.pitch', 'n.roll', 'n.heading']) + + this.datalink.addReceiverFunction(this.update.bind(this)) + }, +}) +var OrbitalMath = { + partsOfUniversalDateTime: function(time){ + var parts = {} + if (time == null) { + time = 0; + } + parts.year = ((time / (365 * 24 * 3600)) | 0) + 1; + time %= 365 * 24 * 3600; + parts.day = ((time / (24 * 3600)) | 0) + 1; + time %= 24 * 3600; + parts.universalTime = time + + parts.hour = (time / 3600) | 0; + time %= 3600; + parts.minutes = (time / 60) | 0; + parts.seconds = (time % 60 | 0).toFixed(); + + return parts + }, + + calculateGMSTInDegrees: function(universalDateTime){ + var timeParts = partsOfUniversalDateTime(universalDateTime) + var G = 6.697374558 + var dayFactor = 0.06570982441908 + var timeFactor = 1.00273790935 + return G + (dayFactor * timeParts.day) + (timeFactor * timeParts.hour) + }, + + eccentricAnomalyFromTrueAnomalyAndEcentricity: function(trueAnomaly, eccentricity){ + return 2 * Math.atan(Math.sqrt((1-eccentricity)/(1+eccentricity)) * Math.tan(trueAnomaly/2)) + }, + + meanMotionFromGravitationalParametersAndSemimajorAxis: function(gravitationalParameter, semiMajorAxis, orbitalPeriod){ + // console.log("mu : " + gravitationalParameter + " SMA : " + semiMajorAxis) + // return orbitalPeriod * Math.sqrt(gravitationalParameter/(4 * Math.pow(Math.PI, 2) * Math.pow(semiMajorAxis, 3))) + return Math.sqrt(gravitationalParameter/Math.pow(semiMajorAxis, 3)) + }, + + meanAnomalyFromEccentricAnomalyAndEccentricity: function(eccentricAnomaly, eccentricity){ + return eccentricAnomaly - eccentricity * Math.sin(eccentricAnomaly) + }, + + meanAnomalyAtTimeAndMeanMotion: function(meanMotion, startTime, endTime, originalMeanAnomaly){ + var deltaT = endTime - startTime + return originalMeanAnomaly + meanMotion * deltaT + }, + + estimateEccentricAnomalyFromMeanAnomalyAndEccentricity: function(meanAnomaly, eccentricity){ + var error = 100 + var eccentricAnomaly1 = meanAnomaly + + while(error > 0.00000000001){ + var newEccentricAnomaly = meanAnomaly + (eccentricity * Math.sin(eccentricAnomaly1)) + error = Math.abs(newEccentricAnomaly - eccentricAnomaly1) + eccentricAnomaly1 = newEccentricAnomaly + } + return eccentricAnomaly1 + }, + + trueAnomalyFromEccentricAnomalyAndEccentricity: function(eccentricAnomaly, eccentricity, meanAnomaly){ + // var factor1 = Math.sqrt(1.0 - Math.pow(eccentricity, 2)) * Math.sin(eccentricAnomaly) + // var factor2 = 1 - eccentricity * Math.cos(eccentricAnomaly) + + // if(longitudeOfAscendingNodeInDegrees > 90 && longitudeOfAscendingNodeInDegrees <= 360){ + // var inversion = Math.toRadians(360) + // } else{ + // var inversion = 0 + // } + + var x = Math.sqrt(1 - eccentricity) * Math.cos(eccentricAnomaly/2) + var y = Math.sqrt(1 + eccentricity) * Math.sin(eccentricAnomaly/2) + + return 2 * Math.atan2(y,x) + + // return Math.asin(factor1/factor2) + }, + + findSemiLatusRectum: function(semiMajorAxis, eccentricity){ + // var x = semiMajorAxis * (1 - Math.pow(eccentricity, 2)) + // console.log("semi latus rectum: " + x) + + var apoapsis = 320565.458678732 + var periapsis = 102454.341836878 + + return (2 * apoapsis * periapsis ) / (apoapsis + periapsis) + // return x + }, + + findPolarEquationOfConic: function(semiMajorAxis, eccentricity, trueAnomaly){ + var p = this.findSemiLatusRectum(semiMajorAxis, eccentricity) + // console.log("p: " + p) + // console.log("factor: " + (1 + eccentricity * Math.cos(trueAnomaly))) + return p/(1 + eccentricity * Math.cos(trueAnomaly)) + }, + + positionVectorInPQWFrame: function(semiMajorAxis, eccentricity, trueAnomaly){ + var r = this.findPolarEquationOfConic(semiMajorAxis, eccentricity, trueAnomaly) + var vector = {} + vector.p = r * Math.cos(trueAnomaly) + vector.q = r * Math.sin(trueAnomaly) + vector.w = 0 + // console.log("trueAnomaly: " + trueAnomaly) + // console.log("r: " + r) + // console.log(JSON.stringify(vector)) + return vector + }, + + velocityVectorInPQWFrame: function(semiMajorAxis, eccentricity, trueAnomaly, gravitationalParameter){ + var p = findSemiLatusRectum(semiMajorAxis, eccentricity) + var factor = Math.sqrt(gravitationalParameter/p) + var vector = {} + vector.p = -Math.sin(trueAnomaly) + vector.q = eccentricity + Math.cos(trueAnomaly) + vector.w = 0 + return vector + }, + + transformVector: function(matrix, vector){ + var vectorKeys = Object.keys(vector) + var newVector = {} + //iterate through the rows of the matrix + for (var i = 0; i < matrix.length; i++) { + var row = matrix[i] + var derivativeVector = vectorKeys[i] + //iterate through the columns + for (var j = 0; j < vectorKeys.length; j++) { + var currentKey = vectorKeys[j] + if(!newVector[derivativeVector]){ newVector[derivativeVector] = 0 } + newVector[derivativeVector] += vector[currentKey] * row[j] + } + } + return newVector + }, + + // Thank god for: https://en.wikipedia.org/wiki/Perifocal_coordinate_system + transformPositionPQWVectorToIJKFrame: function(vector, inclination, longitudeOfAscendingNode, argumentOfPeriapsis){ + var vectorIJK = {} + var omega = longitudeOfAscendingNode + var w = argumentOfPeriapsis + var i = inclination + + //Column, row order. First level is columns, each column has N rows + var transformationMatrix = [ + [ + // 1 1 + Math.cos(omega) * Math.cos(w) - Math.sin(omega) * Math.sin(w) * Math.cos(i), + // 1 2 + -Math.cos(omega) * Math.sin(w) - Math.sin(omega)* Math.cos(w) * Math.cos(i), + // 1 2 + Math.sin(omega) * Math.sin(i) + ], + [ + // 2 1 + Math.sin(omega) * Math.cos(w) + Math.cos(omega) * Math.sin(w) * Math.cos(i), + // 2 2 + -Math.sin(omega) * Math.sin(w) + Math.cos(omega) * Math.cos(w) * Math.cos(i), + // 2 3 + -Math.cos(omega) * Math.sin(i), + ], + [ + // 3 1 + Math.sin(w) * Math.sin(i), + // 3 2 + Math.cos(w) * Math.sin(i), + // 3 3 + Math.cos(i) + ] + ] + + var transformedPQW = this.transformVector(transformationMatrix, vector) + vectorIJK.i = transformedPQW.p + vectorIJK.j = transformedPQW.q + vectorIJK.k = transformedPQW.w + + return vectorIJK + }, + + findLatitudeOfPositionUnitVector: function(vector){ + var x = Math.sqrt(Math.pow(vector.i, 2) + Math.pow(vector.j, 2)) + var z = vector.k + + return Math.atan(z/x) + }, + + angularFrequencyOfBody: function(period){ + return (2 * Math.PI)/period + }, + + calculateGMSTInRadiansForOrigin: function(vector, longitude){ + var theta = Math.atan(vector.j/vector.i) + return theta - longitude + }, + + findLongitudeOfPositonUnitVector: function(vector, angularVelocityOfPlanet, startTime, endTime, GMSTInRadians){ + var deltaT = endTime - startTime + var quadrant = vector.j > 0 ? 1 : -1 + var theta = Math.atan(vector.j/vector.i) + return theta - GMSTInRadians - (angularVelocityOfPlanet * deltaT) + }, + + TWR: function(thrust, totalMass, surfaceGravity){ + return (thrust)/(totalMass * surfaceGravity) + }, + + MaxTWR: function(maxAcceleration, surfaceGravity){ + return maxAcceleration/surfaceGravity + }, + + secondsToUseFuelAtCurrentThrust: function(massOfFuel, thrust, isp){ + if(thrust <= 0 || isp <= 0){ return -1} + return (massOfFuel)/((thrust/isp) * (1/9.81)) + }, + + // returns in tons + weightOfFuelUsedDuringBurn: function(thrust, isp, deltaT){ + return (thrust/isp) * (1/9.81) * deltaT; + }, + + deltaVForBurn: function(thrust, startMass, endMass, deltaT){ + if(deltaT > 0 && startMass > endMass && startMass > 0 && endMass > 0){ + return thrust * deltaT / (startMass - endMass) * Math.log(startMass/endMass) + } else { + return 0.0 + } + } +} +var CurrentStageBurnInfo = Class.create({ + initialize: function(datalink, atmoTableID, vacuumTableID){ + this.datalink = datalink + this.atmoTableID = atmoTableID + this.vacuumTableID = vacuumTableID + + this.atmoDataTable = new DataTable(this.atmoTableID, []) + this.vacuumDataTable = new DataTable(this.vacuumTableID, []) + + this.currentStageAtmo = null + this.currentStageVacuum = null + this.currentBody = null + this.initializeDatalink() + }, + + update: function(data){ + // don't do anything if we don't have any staging info + if(!data['mj.stagingInfo']){return } + + //update the body as necessary + if(this.currentBody == null || this.currentBody.name != data['v.body']){ + this.currentBody = this.datalink.getOrbitalBodyInfo(data['v.body']) + } + + // Calculate the info for the current stage in Atmo + if(data['mj.stagingInfo']["atmo"]){ + //The current stage is always the last stage + this.currentStageAtmo = this.calculateStageInfo( + data['mj.stagingInfo']['atmo'].last(), data + ) + } + + // Calculate the info for the current stage in a Vaccuum + if(data['mj.stagingInfo']["vacuum"]){ + //The current stage is always the last stage + this.currentStageVacuum = this.calculateStageInfo( + data['mj.stagingInfo']['vacuum'].last(), data + ) + } + + // Now update the tables + this.atmoDataTable.dataRows = this.dataRowsForStage( + this.currentStageAtmo, data + ) + + this.vacuumDataTable.dataRows = this.dataRowsForStage( + this.currentStageVacuum, data + ) + + this.atmoDataTable.update() + this.vacuumDataTable.update() + }, + + subscribeToBodyData: function(data){ + this.currentBody = this.datalink.getOrbitalBodyInfo(data['v.body']) + this.datalink.subscribeToData([ + 'b.o.gravParameter[' + this.currentBody.id + ']' + ]) + }, + + calculateStageInfo: function(stage, data){ + stage["currentThrust"] = stage["startThrust"] * data['f.throttle'] + stage["currentTWR"] = OrbitalMath.TWR(stage["currentThrust"], + stage["startMass"], this.currentBody.surfaceGravity + ) + + stage["timeUntilEmpty"] = OrbitalMath.secondsToUseFuelAtCurrentThrust( + stage["resourceMass"], stage["currentThrust"], stage["isp"] + ) + + return stage + }, + + dataRowsForStage: function(stage, data){ + var timeUntilEmpty = stage["timeUntilEmpty"] <= 0 ? "NA" : DataFormatters.timeString(stage["timeUntilEmpty"]) + return [ + { + label: "Current Thrust", + value: DataFormatters.newtonsString(stage["currentThrust"]) + " (" + DataFormatters.percentageString(data['f.throttle']) + ")" + }, + { + label: "TWR", + value: DataFormatters.plainNumberString(stage["currentTWR"]) + }, + { + label: "Remaining Fuel", + value: DataFormatters.tonnageString(stage["resourceMass"]) + }, + { + label: "Time until empty", + value: timeUntilEmpty + } + ] + }, + + initializeDatalink: function(){ + this.datalink.subscribeToData(['mj.stagingInfo', 'f.throttle', 'v.body']) + + this.datalink.addReceiverFunction(this.update.bind(this)) + }, +}) +var BurnPlanner = Class.create({ + initialize: function(datalink, options){ + this.datalink = datalink + /* the options: + control elements: + - stage + - mode + - throttle + - burnTime + + display elements: + - totalThrust + - startingFuel + - deltaV + - TWR + - remainingFuel + - warning + */ + + this.options = options || {} + this.stage = null + this.currentBody = null + this.initializeDatalink() + }, + + update: function(data){ + // don't do anything if we don't have any staging info + if(!data['mj.stagingInfo']){return } + + //update the body as necessary + if(this.currentBody == null || this.currentBody.name != data['v.body']){ + this.currentBody = this.datalink.getOrbitalBodyInfo(data['v.body']) + } + + this.getStage(data) + + // If the stage was found, do the burn calculations + if(this.stage){ + var burnedFuel = OrbitalMath.weightOfFuelUsedDuringBurn( + this.thrust(), this.stage["isp"], this.burnTime() + ) + + if(isNaN(burnedFuel)){ + burnedFuel = 0 + } + + var endMass = this.stage["startMass"] - burnedFuel + + var deltaV = OrbitalMath.deltaVForBurn(this.thrust(), + this.stage["startMass"], endMass, this.burnTime() + ) + + var TWR = OrbitalMath.TWR(this.thrust(), + this.stage["startMass"], this.currentBody.surfaceGravity + ) + + if(isNaN(TWR)){ + TWR = 0 + } + + var remainingFuel = this.stage["resourceMass"] - burnedFuel + + window.requestAnimationFrame(function(){ + this.options.totalThrust.update(DataFormatters.newtonsString(this.stage["startThrust"])) + this.options.startingFuel.update(DataFormatters.tonnageString(this.stage["resourceMass"])) + this.options.formattedTime.update(DataFormatters.timeString(this.burnTime() || 0)) + this.options.deltaV.update(DataFormatters.velocityString(deltaV)) + this.options.TWR.update(DataFormatters.plainNumberString(TWR)) + this.options.remainingFuel.update(DataFormatters.tonnageString(remainingFuel)) + + if(remainingFuel < 0){ + this.options.warning.update("Not enough fuel for burn!") + } else{ + this.options.warning.update("") + } + }.bind(this)) + } else{ + window.requestAnimationFrame(function(){ + //the stage was not found, so return NAs across the board + this.options.totalThrust.update("NA") + this.options.startingFuel.update("NA") + this.options.formattedTime.update("NA") + this.options.deltaV.update("NA") + this.options.TWR.update("NA") + this.options.remainingFuel.update("NA") + this.options.warning.update("Stage not found!") + }.bind(this)) + } + }, + + getStage: function(data){ + this.stage = data['mj.stagingInfo'][this.mode()][this.stageIndex()] + }, + + stageIndex: function(){ + return parseInt(this.options.stage.value) + }, + + mode: function(){ + return this.options.mode.value + }, + + throttlePercentage: function(){ + var throttlePercentage = parseFloat(this.options.throttle.value) + throttlePercentage = Math.max(0.00, throttlePercentage) + throttlePercentage = Math.min(100.00, throttlePercentage) + return throttlePercentage + }, + + throttle: function(){ + return this.throttlePercentage()/100.0; + }, + + thrust: function(){ + if(!this.stage){ return 0 } + return this.stage["startThrust"] * this.throttle(); + }, + + burnTime: function(){ + return parseInt(this.options.burnTime.value) + }, + + initializeDatalink: function(){ + this.datalink.subscribeToData(['mj.stagingInfo', 'v.body']) + + this.datalink.addReceiverFunction(this.update.bind(this)) + }, +}) +var StagingInfoTable = Class.create({ + initialize: function(datalink, stagingInfoTableID){ + this.datalink = datalink + this.stagingInfoTableID = stagingInfoTableID + + this.stagingInfoTable = $(this.stagingInfoTableID) + this.stagingInfoTableHeader = null + this.stagingInfoTableBody = null + + this.currentBody = null + + this.initializeTable() + this.initializeDatalink() + }, + + update: function(data){ + if(!data['mj.stagingInfo']){ + this.stagingInfoTableBody.update("") + return + } + + //update the body as necessary + if(this.currentBody == null || this.currentBody.name != data['v.body']){ + this.currentBody = this.datalink.getOrbitalBodyInfo(data['v.body']) + } + + var stagingInfo = data['mj.stagingInfo'] + var stages = stagingInfo['atmo'].length + if(stages <= 0){ return } + + var documentFragment = document.createDocumentFragment() + for (var i = 0; i < stages; i++) { + var stageAtmo = stagingInfo["atmo"][i] + var stageVacuum = stagingInfo["vacuum"][i] + + var row = document.createElement("tr") + + var thrust = Math.min(stageAtmo["startThrust"], + stageVacuum["startThrust"] + ) + + var TWR = OrbitalMath.TWR(thrust, stageAtmo["startMass"], + this.currentBody.surfaceGravity + ) + + if(isNaN(TWR)){ TWR = 0.00 } + + var maxAccel = Math.min(stageAtmo["maxAccel"],stageVacuum["maxAccel"]) + + var MaxTWR = OrbitalMath.MaxTWR(maxAccel, + this.currentBody.surfaceGravity + ) + + if(isNaN(MaxTWR)){ MaxTWR = 0.00 } + + var ISP = Math.min(stageAtmo["isp"],stageVacuum["isp"]) + + var atmoDeltaV = stageAtmo["deltaV"] + var vacuumDeltaV = stageVacuum["deltaV"] + + var time = Math.min(stageAtmo["deltaTime"],stageVacuum["deltaTime"]) + + this.addColumnToRow(row, i) //stage + //start mass + this.addColumnToRow(row, DataFormatters.tonnageString(stageAtmo["startMass"])) + //end mass + this.addColumnToRow(row, DataFormatters.tonnageString(stageAtmo["endMass"])) + + //staged mass + this.addColumnToRow(row, DataFormatters.tonnageString(stageAtmo["stagedMass"])) + + //burned mass + this.addColumnToRow(row, DataFormatters.tonnageString(stageAtmo["resourceMass"])) + + //TWR + this.addColumnToRow(row, DataFormatters.plainNumberString(TWR)) + + //Max TWR + this.addColumnToRow(row, DataFormatters.plainNumberString(MaxTWR)) + + //ISP + this.addColumnToRow(row, DataFormatters.plainNumberString(ISP)) + + //atmo delta v + this.addColumnToRow(row, DataFormatters.velocityString(atmoDeltaV)) + + //vacuum delta v + this.addColumnToRow(row, DataFormatters.velocityString(vacuumDeltaV)) + + // time + this.addColumnToRow(row, DataFormatters.timeString(time)) + + documentFragment.appendChild(row) + } + + window.requestAnimationFrame(function(){ + this.stagingInfoTableBody.innerHTML = "" + this.stagingInfoTableBody.appendChild(documentFragment) + }.bind(this)) + }, + + addColumnToRow: function(row, columnValue){ + row.appendChild(document.createElement("td").update(columnValue)) + }, + + initializeTable: function(){ + var documentFragment = document.createDocumentFragment() + this.stagingInfoTableHeader = document.createElement("thead") + var headerRow = this.stagingInfoTableHeader.appendChild(document.createElement("tr")) + + var columns = ["Stage", "Start Mass", "End Mass", "Staged Mass", + "Burned Mass", "TWR", "Max TWR", "ISP", "Atmo ΔV", "Vac ΔV", + "Time" + ] + + for (var i = 0; i < columns.length; i++) { + var name = columns[i] + var element = document.createElement("th") + element.update(name) + headerRow.appendChild(element) + }; + + this.stagingInfoTableBody = document.createElement("tbody") + + documentFragment.appendChild(this.stagingInfoTableHeader) + documentFragment.appendChild(this.stagingInfoTableBody) + + this.stagingInfoTable.appendChild(documentFragment) + }, + + initializeDatalink: function(){ + this.datalink.subscribeToData(['mj.stagingInfo', 'v.body']) + + this.datalink.addReceiverFunction(this.update.bind(this)) + }, +}) \ No newline at end of file diff --git a/public/assets/camera.js b/public/assets/camera.js new file mode 100644 index 0000000..31ab39f --- /dev/null +++ b/public/assets/camera.js @@ -0,0 +1,8435 @@ +Math.toDegrees = function(angleInRadians){ + return angleInRadians * (180/Math.PI) +} + +Math.toRadians = function(angleInDegrees){ + return angleInDegrees * (Math.PI/180) +} + +Math.crossProduct = function(x, y){ + [ + x[1]*y[2]-x[2]*y[1], + x[2]*y[0]-x[0]*y[2], + x[0]*y[1]-x[1]*y[0] + ] +} + +Math.sign = Math.sign || function(x) { + x = +x; // convert to a number + if (x === 0 || isNaN(x)) { + return x; + } + return x > 0 ? 1 : -1; +} + +Math.cosh = Math.cosh || function(x) { + return (Math.exp(x) + Math.exp(-x)) / 2; +} + +Math.sinh = Math.sinh || function(x) { + return (Math.exp(x) - Math.exp(-x)) / 2; +}; + +Math.matrixAdd = Math.matrixAdd || function(){ + var arrays= arguments, results= [], + count= arrays[0].length, L= arrays.length, + sum, next= 0, i; + while(next-1?e(a,b,c):b.indexOf("%")>-1?f(a,b,c):b.indexOf(":")>-1?g(a,b):i(a._value,b,c)}function d(a,b){var c,d,e,f,g,i=b,j=["KB","MB","GB","TB","PB","EB","ZB","YB"],k=!1;if(b.indexOf(":")>-1)a._value=h(b);else if(b===q)a._value=0;else{for("."!==o[p].delimiters.decimal&&(b=b.replace(/\./g,"").replace(o[p].delimiters.decimal,".")),c=new RegExp("[^a-zA-Z]"+o[p].abbreviations.thousand+"(?:\\)|(\\"+o[p].currency.symbol+")?(?:\\))?)?$"),d=new RegExp("[^a-zA-Z]"+o[p].abbreviations.million+"(?:\\)|(\\"+o[p].currency.symbol+")?(?:\\))?)?$"),e=new RegExp("[^a-zA-Z]"+o[p].abbreviations.billion+"(?:\\)|(\\"+o[p].currency.symbol+")?(?:\\))?)?$"),f=new RegExp("[^a-zA-Z]"+o[p].abbreviations.trillion+"(?:\\)|(\\"+o[p].currency.symbol+")?(?:\\))?)?$"),g=0;g<=j.length&&!(k=b.indexOf(j[g])>-1?Math.pow(1024,g+1):!1);g++);a._value=(k?k:1)*(i.match(c)?Math.pow(10,3):1)*(i.match(d)?Math.pow(10,6):1)*(i.match(e)?Math.pow(10,9):1)*(i.match(f)?Math.pow(10,12):1)*(b.indexOf("%")>-1?.01:1)*((b.split("-").length+Math.min(b.split("(").length-1,b.split(")").length-1))%2?1:-1)*Number(b.replace(/[^0-9\.]+/g,"")),a._value=k?Math.ceil(a._value):a._value}return a._value}function e(a,b,c){var d,e,f=b.indexOf("$"),g=b.indexOf("("),h=b.indexOf("-"),j="";return b.indexOf(" $")>-1?(j=" ",b=b.replace(" $","")):b.indexOf("$ ")>-1?(j=" ",b=b.replace("$ ","")):b=b.replace("$",""),e=i(a._value,b,c),1>=f?e.indexOf("(")>-1||e.indexOf("-")>-1?(e=e.split(""),d=1,(g>f||h>f)&&(d=0),e.splice(d,0,o[p].currency.symbol+j),e=e.join("")):e=o[p].currency.symbol+j+e:e.indexOf(")")>-1?(e=e.split(""),e.splice(-1,0,j+o[p].currency.symbol),e=e.join("")):e=e+j+o[p].currency.symbol,e}function f(a,b,c){var d,e="",f=100*a._value;return b.indexOf(" %")>-1?(e=" ",b=b.replace(" %","")):b=b.replace("%",""),d=i(f,b,c),d.indexOf(")")>-1?(d=d.split(""),d.splice(-1,0,e+"%"),d=d.join("")):d=d+e+"%",d}function g(a){var b=Math.floor(a._value/60/60),c=Math.floor((a._value-60*b*60)/60),d=Math.round(a._value-60*b*60-60*c);return b+":"+(10>c?"0"+c:c)+":"+(10>d?"0"+d:d)}function h(a){var b=a.split(":"),c=0;return 3===b.length?(c+=60*Number(b[0])*60,c+=60*Number(b[1]),c+=Number(b[2])):2===b.length&&(c+=60*Number(b[0]),c+=Number(b[1])),Number(c)}function i(a,c,d){var e,f,g,h,i,j,k=!1,l=!1,m=!1,n="",r=!1,s=!1,t=!1,u=!1,v=!1,w="",x="",y=Math.abs(a),z=["B","KB","MB","GB","TB","PB","EB","ZB","YB"],A="",B=!1;if(0===a&&null!==q)return q;if(c.indexOf("(")>-1?(k=!0,c=c.slice(1,-1)):c.indexOf("+")>-1&&(l=!0,c=c.replace(/\+/g,"")),c.indexOf("a")>-1&&(r=c.indexOf("aK")>=0,s=c.indexOf("aM")>=0,t=c.indexOf("aB")>=0,u=c.indexOf("aT")>=0,v=r||s||t||u,c.indexOf(" a")>-1?(n=" ",c=c.replace(" a","")):c=c.replace("a",""),y>=Math.pow(10,12)&&!v||u?(n+=o[p].abbreviations.trillion,a/=Math.pow(10,12)):y=Math.pow(10,9)&&!v||t?(n+=o[p].abbreviations.billion,a/=Math.pow(10,9)):y=Math.pow(10,6)&&!v||s?(n+=o[p].abbreviations.million,a/=Math.pow(10,6)):(y=Math.pow(10,3)&&!v||r)&&(n+=o[p].abbreviations.thousand,a/=Math.pow(10,3))),c.indexOf("b")>-1)for(c.indexOf(" b")>-1?(w=" ",c=c.replace(" b","")):c=c.replace("b",""),g=0;g<=z.length;g++)if(e=Math.pow(1024,g),f=Math.pow(1024,g+1),a>=e&&f>a){w+=z[g],e>0&&(a/=e);break}return c.indexOf("o")>-1&&(c.indexOf(" o")>-1?(x=" ",c=c.replace(" o","")):c=c.replace("o",""),x+=o[p].ordinal(a)),c.indexOf("[.]")>-1&&(m=!0,c=c.replace("[.]",".")),h=a.toString().split(".")[0],i=c.split(".")[1],j=c.indexOf(","),i?(i.indexOf("[")>-1?(i=i.replace("]",""),i=i.split("["),A=b(a,i[0].length+i[1].length,d,i[1].length)):A=b(a,i.length,d),h=A.split(".")[0],A=A.split(".")[1].length?o[p].delimiters.decimal+A.split(".")[1]:"",m&&0===Number(A.slice(1))&&(A="")):h=b(a,null,d),h.indexOf("-")>-1&&(h=h.slice(1),B=!0),j>-1&&(h=h.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g,"$1"+o[p].delimiters.thousands)),0===c.indexOf(".")&&(h=""),(k&&B?"(":"")+(!k&&B?"-":"")+(!B&&l?"+":"")+h+A+(x?x:"")+(n?n:"")+(w?w:"")+(k&&B?")":"")}function j(a,b){o[a]=b}function k(a){var b=a.toString().split(".");return b.length<2?1:Math.pow(10,b[1].length)}function l(){var a=Array.prototype.slice.call(arguments);return a.reduce(function(a,b){var c=k(a),d=k(b);return c>d?c:d},-1/0)}var m,n="1.5.3",o={},p="en",q=null,r="0,0",s="undefined"!=typeof module&&module.exports;m=function(b){return m.isNumeral(b)?b=b.value():0===b||"undefined"==typeof b?b=0:Number(b)||(b=m.fn.unformat(b)),new a(Number(b))},m.version=n,m.isNumeral=function(b){return b instanceof a},m.language=function(a,b){if(!a)return p;if(a&&!b){if(!o[a])throw new Error("Unknown language : "+a);p=a}return(b||!o[a])&&j(a,b),m},m.languageData=function(a){if(!a)return o[p];if(!o[a])throw new Error("Unknown language : "+a);return o[a]},m.language("en",{delimiters:{thousands:",",decimal:"."},abbreviations:{thousand:"k",million:"m",billion:"b",trillion:"t"},ordinal:function(a){var b=a%10;return 1===~~(a%100/10)?"th":1===b?"st":2===b?"nd":3===b?"rd":"th"},currency:{symbol:"$"}}),m.zeroFormat=function(a){q="string"==typeof a?a:null},m.defaultFormat=function(a){r="string"==typeof a?a:"0.0"},"function"!=typeof Array.prototype.reduce&&(Array.prototype.reduce=function(a,b){"use strict";if(null===this||"undefined"==typeof this)throw new TypeError("Array.prototype.reduce called on null or undefined");if("function"!=typeof a)throw new TypeError(a+" is not a function");var c,d,e=this.length>>>0,f=!1;for(1c;++c)this.hasOwnProperty(c)&&(f?d=a(d,this[c],c,this):(d=this[c],f=!0));if(!f)throw new TypeError("Reduce of empty array with no initial value");return d}),m.fn=a.prototype={clone:function(){return m(this)},format:function(a,b){return c(this,a?a:r,void 0!==b?b:Math.round)},unformat:function(a){return"[object Number]"===Object.prototype.toString.call(a)?a:d(this,a?a:r)},value:function(){return this._value},valueOf:function(){return this._value},set:function(a){return this._value=Number(a),this},add:function(a){function b(a,b){return a+c*b}var c=l.call(null,this._value,a);return this._value=[this._value,a].reduce(b,0)/c,this},subtract:function(a){function b(a,b){return a-c*b}var c=l.call(null,this._value,a);return this._value=[a].reduce(b,this._value*c)/c,this},multiply:function(a){function b(a,b){var c=l(a,b);return a*c*b*c/(c*c)}return this._value=[this._value,a].reduce(b,1),this},divide:function(a){function b(a,b){var c=l(a,b);return a*c/(b*c)}return this._value=[this._value,a].reduce(b),this},difference:function(a){return Math.abs(m(this._value).subtract(a).value())}},s&&(module.exports=m),"undefined"==typeof ender&&(this.numeral=m),"function"==typeof define&&define.amd&&define([],function(){return m})}).call(this); +// Extracted Richard Bunt's work in Telemachus: https://github.com/richardbunt/Telemachus/blob/master/WebPages/WebPages/src/console.js + +var TimeFormatters = { + formatUT: function(t){ + var day, year; + if (t == null) { + t = 0; + } + year = ((t / (365 * 24 * 3600)) | 0) + 1; + t %= 365 * 24 * 3600; + day = ((t / (24 * 3600)) | 0) + 1; + t %= 24 * 3600; + return "Year " + year + ", Day " + day + ", " + (this.hourMinSec(t)) + " UT"; + }, + + formatMET: function(t){ + var result; + if (t == null) { + t = 0; + } + result = "T+"; + if (t >= 365 * 24 * 3600) { + result += (t / (365 * 24 * 3600) | 0) + ":"; + t %= 365 * 24 * 3600; + if (t < 24 * 3600) { + result += "0:"; + } + } + if (t >= 24 * 3600) { + result += (t / (24 * 3600) | 0) + ":"; + } + t %= 24 * 3600; + return result + this.hourMinSec(t) + " MET"; + }, + + hourMinSec: function(t) { + var hour, min, sec; + if (t == null) { + t = 0; + } + hour = (t / 3600) | 0; + if (hour < 10) { + hour = "0" + hour; + } + t %= 3600; + min = (t / 60) | 0; + if (min < 10) { + min = "0" + min; + } + sec = (t % 60 | 0).toFixed(); + if (sec < 10) { + sec = "0" + sec; + } + return "" + hour + ":" + min + ":" + sec; + }, + + durationString: function(t) { + var result; + if (t == null) { + t = 0; + } + result = t < 0 ? "-" : ""; + t = Math.abs(t); + if (t >= 365 * 24 * 3600) { + result += (t / (365 * 24 * 3600) | 0) + " years "; + t %= 365 * 24 * 3600; + if (t < 24 * 3600) { + result += "0 days "; + } + } + if (t >= 24 * 3600) { + result += (t / (24 * 3600) | 0) + " days "; + } + t %= 24 * 3600; + return result + this.hourMinSec(t); + } +} +var DataFormatters = { + distanceString: function(value){ + return numeral(value).format('0,0.000 a') + "m" + }, + + heightFromTerrainString: function(value){ + if(value <= -1 ){ return "NA" } + return numeral(value).format('0,0.000 a') + "m" + }, + + degreeString: function(value){ + return numeral(value).format('0.000') + "°" + }, + + velocityString: function(value){ + return numeral(value).format('0,0.000 a') + "m/s" + }, + + temperatureString: function(value){ + if(!value){return "NA"} + return numeral(value).format('0,000') + "°C" + }, + + accelerationSensorString: function(value){ + if(value[0] == "No Sensors of the Appropriate Type"){return "NA"} + return numeral(value[1][0]).format('0,000') + "G" + }, + + pressureSensorString: function(value){ + if(value[0] == "No Sensors of the Appropriate Type"){return "NA"} + return numeral(value[1][0]).format('0,000') + "Pa" + }, + + gravitySensorString: function(value){ + if(value[0] == "No Sensors of the Appropriate Type"){return "NA"} + return numeral(value[1][0]).format('0,000 a') + "m/s²" + }, + + newtonsString: function(value){ + return numeral(value).format('0,0.00') + " N" + }, + + percentageString: function(value){ + return numeral(value).format("0%") + }, + + tonnageString: function(value){ + return numeral(value).format("0,0.00") + " t" + }, + + timeString: function(value){ + return numeral(value).format('00:00:00') + }, + + plainNumberString: function(value){ + return numeral(value).format("0,0.00") + } +} +/* Prototype JavaScript framework, version 1.7.2 + * (c) 2005-2010 Sam Stephenson + * + * Prototype is freely distributable under the terms of an MIT-style license. + * For details, see the Prototype web site: http://www.prototypejs.org/ + * + *--------------------------------------------------------------------------*/ + +var Prototype = { + + Version: '1.7.2', + + Browser: (function(){ + var ua = navigator.userAgent; + var isOpera = Object.prototype.toString.call(window.opera) == '[object Opera]'; + return { + IE: !!window.attachEvent && !isOpera, + Opera: isOpera, + WebKit: ua.indexOf('AppleWebKit/') > -1, + Gecko: ua.indexOf('Gecko') > -1 && ua.indexOf('KHTML') === -1, + MobileSafari: /Apple.*Mobile/.test(ua) + } + })(), + + BrowserFeatures: { + XPath: !!document.evaluate, + + SelectorsAPI: !!document.querySelector, + + ElementExtensions: (function() { + var constructor = window.Element || window.HTMLElement; + return !!(constructor && constructor.prototype); + })(), + SpecificElementExtensions: (function() { + if (typeof window.HTMLDivElement !== 'undefined') + return true; + + var div = document.createElement('div'), + form = document.createElement('form'), + isSupported = false; + + if (div['__proto__'] && (div['__proto__'] !== form['__proto__'])) { + isSupported = true; + } + + div = form = null; + + return isSupported; + })() + }, + + ScriptFragment: ']*>([\\S\\s]*?)<\/script\\s*>', + JSONFilter: /^\/\*-secure-([\s\S]*)\*\/\s*$/, + + emptyFunction: function() { }, + + K: function(x) { return x } +}; + +if (Prototype.Browser.MobileSafari) + Prototype.BrowserFeatures.SpecificElementExtensions = false; +/* Based on Alex Arnell's inheritance implementation. */ + +var Class = (function() { + + var IS_DONTENUM_BUGGY = (function(){ + for (var p in { toString: 1 }) { + if (p === 'toString') return false; + } + return true; + })(); + + function subclass() {}; + function create() { + var parent = null, properties = $A(arguments); + if (Object.isFunction(properties[0])) + parent = properties.shift(); + + function klass() { + this.initialize.apply(this, arguments); + } + + Object.extend(klass, Class.Methods); + klass.superclass = parent; + klass.subclasses = []; + + if (parent) { + subclass.prototype = parent.prototype; + klass.prototype = new subclass; + parent.subclasses.push(klass); + } + + for (var i = 0, length = properties.length; i < length; i++) + klass.addMethods(properties[i]); + + if (!klass.prototype.initialize) + klass.prototype.initialize = Prototype.emptyFunction; + + klass.prototype.constructor = klass; + return klass; + } + + function addMethods(source) { + var ancestor = this.superclass && this.superclass.prototype, + properties = Object.keys(source); + + if (IS_DONTENUM_BUGGY) { + if (source.toString != Object.prototype.toString) + properties.push("toString"); + if (source.valueOf != Object.prototype.valueOf) + properties.push("valueOf"); + } + + for (var i = 0, length = properties.length; i < length; i++) { + var property = properties[i], value = source[property]; + if (ancestor && Object.isFunction(value) && + value.argumentNames()[0] == "$super") { + var method = value; + value = (function(m) { + return function() { return ancestor[m].apply(this, arguments); }; + })(property).wrap(method); + + value.valueOf = (function(method) { + return function() { return method.valueOf.call(method); }; + })(method); + + value.toString = (function(method) { + return function() { return method.toString.call(method); }; + })(method); + } + this.prototype[property] = value; + } + + return this; + } + + return { + create: create, + Methods: { + addMethods: addMethods + } + }; +})(); +(function() { + + var _toString = Object.prototype.toString, + _hasOwnProperty = Object.prototype.hasOwnProperty, + NULL_TYPE = 'Null', + UNDEFINED_TYPE = 'Undefined', + BOOLEAN_TYPE = 'Boolean', + NUMBER_TYPE = 'Number', + STRING_TYPE = 'String', + OBJECT_TYPE = 'Object', + FUNCTION_CLASS = '[object Function]', + BOOLEAN_CLASS = '[object Boolean]', + NUMBER_CLASS = '[object Number]', + STRING_CLASS = '[object String]', + ARRAY_CLASS = '[object Array]', + DATE_CLASS = '[object Date]', + NATIVE_JSON_STRINGIFY_SUPPORT = window.JSON && + typeof JSON.stringify === 'function' && + JSON.stringify(0) === '0' && + typeof JSON.stringify(Prototype.K) === 'undefined'; + + + + var DONT_ENUMS = ['toString', 'toLocaleString', 'valueOf', + 'hasOwnProperty', 'isPrototypeOf', 'propertyIsEnumerable', 'constructor']; + + var IS_DONTENUM_BUGGY = (function(){ + for (var p in { toString: 1 }) { + if (p === 'toString') return false; + } + return true; + })(); + + function Type(o) { + switch(o) { + case null: return NULL_TYPE; + case (void 0): return UNDEFINED_TYPE; + } + var type = typeof o; + switch(type) { + case 'boolean': return BOOLEAN_TYPE; + case 'number': return NUMBER_TYPE; + case 'string': return STRING_TYPE; + } + return OBJECT_TYPE; + } + + function extend(destination, source) { + for (var property in source) + destination[property] = source[property]; + return destination; + } + + function inspect(object) { + try { + if (isUndefined(object)) return 'undefined'; + if (object === null) return 'null'; + return object.inspect ? object.inspect() : String(object); + } catch (e) { + if (e instanceof RangeError) return '...'; + throw e; + } + } + + function toJSON(value) { + return Str('', { '': value }, []); + } + + function Str(key, holder, stack) { + var value = holder[key]; + if (Type(value) === OBJECT_TYPE && typeof value.toJSON === 'function') { + value = value.toJSON(key); + } + + var _class = _toString.call(value); + + switch (_class) { + case NUMBER_CLASS: + case BOOLEAN_CLASS: + case STRING_CLASS: + value = value.valueOf(); + } + + switch (value) { + case null: return 'null'; + case true: return 'true'; + case false: return 'false'; + } + + var type = typeof value; + switch (type) { + case 'string': + return value.inspect(true); + case 'number': + return isFinite(value) ? String(value) : 'null'; + case 'object': + + for (var i = 0, length = stack.length; i < length; i++) { + if (stack[i] === value) { + throw new TypeError("Cyclic reference to '" + value + "' in object"); + } + } + stack.push(value); + + var partial = []; + if (_class === ARRAY_CLASS) { + for (var i = 0, length = value.length; i < length; i++) { + var str = Str(i, value, stack); + partial.push(typeof str === 'undefined' ? 'null' : str); + } + partial = '[' + partial.join(',') + ']'; + } else { + var keys = Object.keys(value); + for (var i = 0, length = keys.length; i < length; i++) { + var key = keys[i], str = Str(key, value, stack); + if (typeof str !== "undefined") { + partial.push(key.inspect(true)+ ':' + str); + } + } + partial = '{' + partial.join(',') + '}'; + } + stack.pop(); + return partial; + } + } + + function stringify(object) { + return JSON.stringify(object); + } + + function toQueryString(object) { + return $H(object).toQueryString(); + } + + function toHTML(object) { + return object && object.toHTML ? object.toHTML() : String.interpret(object); + } + + function keys(object) { + if (Type(object) !== OBJECT_TYPE) { throw new TypeError(); } + var results = []; + for (var property in object) { + if (_hasOwnProperty.call(object, property)) + results.push(property); + } + + if (IS_DONTENUM_BUGGY) { + for (var i = 0; property = DONT_ENUMS[i]; i++) { + if (_hasOwnProperty.call(object, property)) + results.push(property); + } + } + + return results; + } + + function values(object) { + var results = []; + for (var property in object) + results.push(object[property]); + return results; + } + + function clone(object) { + return extend({ }, object); + } + + function isElement(object) { + return !!(object && object.nodeType == 1); + } + + function isArray(object) { + return _toString.call(object) === ARRAY_CLASS; + } + + var hasNativeIsArray = (typeof Array.isArray == 'function') + && Array.isArray([]) && !Array.isArray({}); + + if (hasNativeIsArray) { + isArray = Array.isArray; + } + + function isHash(object) { + return object instanceof Hash; + } + + function isFunction(object) { + return _toString.call(object) === FUNCTION_CLASS; + } + + function isString(object) { + return _toString.call(object) === STRING_CLASS; + } + + function isNumber(object) { + return _toString.call(object) === NUMBER_CLASS; + } + + function isDate(object) { + return _toString.call(object) === DATE_CLASS; + } + + function isUndefined(object) { + return typeof object === "undefined"; + } + + extend(Object, { + extend: extend, + inspect: inspect, + toJSON: NATIVE_JSON_STRINGIFY_SUPPORT ? stringify : toJSON, + toQueryString: toQueryString, + toHTML: toHTML, + keys: Object.keys || keys, + values: values, + clone: clone, + isElement: isElement, + isArray: isArray, + isHash: isHash, + isFunction: isFunction, + isString: isString, + isNumber: isNumber, + isDate: isDate, + isUndefined: isUndefined + }); +})(); +Object.extend(Function.prototype, (function() { + var slice = Array.prototype.slice; + + function update(array, args) { + var arrayLength = array.length, length = args.length; + while (length--) array[arrayLength + length] = args[length]; + return array; + } + + function merge(array, args) { + array = slice.call(array, 0); + return update(array, args); + } + + function argumentNames() { + var names = this.toString().match(/^[\s\(]*function[^(]*\(([^)]*)\)/)[1] + .replace(/\/\/.*?[\r\n]|\/\*(?:.|[\r\n])*?\*\//g, '') + .replace(/\s+/g, '').split(','); + return names.length == 1 && !names[0] ? [] : names; + } + + + function bind(context) { + if (arguments.length < 2 && Object.isUndefined(arguments[0])) + return this; + + if (!Object.isFunction(this)) + throw new TypeError("The object is not callable."); + + var nop = function() {}; + var __method = this, args = slice.call(arguments, 1); + + var bound = function() { + var a = merge(args, arguments); + var c = this instanceof bound ? this : context; + return __method.apply(c, a); + }; + + nop.prototype = this.prototype; + bound.prototype = new nop(); + + return bound; + } + + function bindAsEventListener(context) { + var __method = this, args = slice.call(arguments, 1); + return function(event) { + var a = update([event || window.event], args); + return __method.apply(context, a); + } + } + + function curry() { + if (!arguments.length) return this; + var __method = this, args = slice.call(arguments, 0); + return function() { + var a = merge(args, arguments); + return __method.apply(this, a); + } + } + + function delay(timeout) { + var __method = this, args = slice.call(arguments, 1); + timeout = timeout * 1000; + return window.setTimeout(function() { + return __method.apply(__method, args); + }, timeout); + } + + function defer() { + var args = update([0.01], arguments); + return this.delay.apply(this, args); + } + + function wrap(wrapper) { + var __method = this; + return function() { + var a = update([__method.bind(this)], arguments); + return wrapper.apply(this, a); + } + } + + function methodize() { + if (this._methodized) return this._methodized; + var __method = this; + return this._methodized = function() { + var a = update([this], arguments); + return __method.apply(null, a); + }; + } + + var extensions = { + argumentNames: argumentNames, + bindAsEventListener: bindAsEventListener, + curry: curry, + delay: delay, + defer: defer, + wrap: wrap, + methodize: methodize + }; + + if (!Function.prototype.bind) + extensions.bind = bind; + + return extensions; +})()); + + + +(function(proto) { + + + function toISOString() { + return this.getUTCFullYear() + '-' + + (this.getUTCMonth() + 1).toPaddedString(2) + '-' + + this.getUTCDate().toPaddedString(2) + 'T' + + this.getUTCHours().toPaddedString(2) + ':' + + this.getUTCMinutes().toPaddedString(2) + ':' + + this.getUTCSeconds().toPaddedString(2) + 'Z'; + } + + + function toJSON() { + return this.toISOString(); + } + + if (!proto.toISOString) proto.toISOString = toISOString; + if (!proto.toJSON) proto.toJSON = toJSON; + +})(Date.prototype); + + +RegExp.prototype.match = RegExp.prototype.test; + +RegExp.escape = function(str) { + return String(str).replace(/([.*+?^=!:${}()|[\]\/\\])/g, '\\$1'); +}; +var PeriodicalExecuter = Class.create({ + initialize: function(callback, frequency) { + this.callback = callback; + this.frequency = frequency; + this.currentlyExecuting = false; + + this.registerCallback(); + }, + + registerCallback: function() { + this.timer = setInterval(this.onTimerEvent.bind(this), this.frequency * 1000); + }, + + execute: function() { + this.callback(this); + }, + + stop: function() { + if (!this.timer) return; + clearInterval(this.timer); + this.timer = null; + }, + + onTimerEvent: function() { + if (!this.currentlyExecuting) { + try { + this.currentlyExecuting = true; + this.execute(); + this.currentlyExecuting = false; + } catch(e) { + this.currentlyExecuting = false; + throw e; + } + } + } +}); +Object.extend(String, { + interpret: function(value) { + return value == null ? '' : String(value); + }, + specialChar: { + '\b': '\\b', + '\t': '\\t', + '\n': '\\n', + '\f': '\\f', + '\r': '\\r', + '\\': '\\\\' + } +}); + +Object.extend(String.prototype, (function() { + var NATIVE_JSON_PARSE_SUPPORT = window.JSON && + typeof JSON.parse === 'function' && + JSON.parse('{"test": true}').test; + + function prepareReplacement(replacement) { + if (Object.isFunction(replacement)) return replacement; + var template = new Template(replacement); + return function(match) { return template.evaluate(match) }; + } + + function isNonEmptyRegExp(regexp) { + return regexp.source && regexp.source !== '(?:)'; + } + + + function gsub(pattern, replacement) { + var result = '', source = this, match; + replacement = prepareReplacement(replacement); + + if (Object.isString(pattern)) + pattern = RegExp.escape(pattern); + + if (!(pattern.length || isNonEmptyRegExp(pattern))) { + replacement = replacement(''); + return replacement + source.split('').join(replacement) + replacement; + } + + while (source.length > 0) { + match = source.match(pattern) + if (match && match[0].length > 0) { + result += source.slice(0, match.index); + result += String.interpret(replacement(match)); + source = source.slice(match.index + match[0].length); + } else { + result += source, source = ''; + } + } + return result; + } + + function sub(pattern, replacement, count) { + replacement = prepareReplacement(replacement); + count = Object.isUndefined(count) ? 1 : count; + + return this.gsub(pattern, function(match) { + if (--count < 0) return match[0]; + return replacement(match); + }); + } + + function scan(pattern, iterator) { + this.gsub(pattern, iterator); + return String(this); + } + + function truncate(length, truncation) { + length = length || 30; + truncation = Object.isUndefined(truncation) ? '...' : truncation; + return this.length > length ? + this.slice(0, length - truncation.length) + truncation : String(this); + } + + function strip() { + return this.replace(/^\s+/, '').replace(/\s+$/, ''); + } + + function stripTags() { + return this.replace(/<\w+(\s+("[^"]*"|'[^']*'|[^>])+)?>|<\/\w+>/gi, ''); + } + + function stripScripts() { + return this.replace(new RegExp(Prototype.ScriptFragment, 'img'), ''); + } + + function extractScripts() { + var matchAll = new RegExp(Prototype.ScriptFragment, 'img'), + matchOne = new RegExp(Prototype.ScriptFragment, 'im'); + return (this.match(matchAll) || []).map(function(scriptTag) { + return (scriptTag.match(matchOne) || ['', ''])[1]; + }); + } + + function evalScripts() { + return this.extractScripts().map(function(script) { return eval(script); }); + } + + function escapeHTML() { + return this.replace(/&/g,'&').replace(//g,'>'); + } + + function unescapeHTML() { + return this.stripTags().replace(/</g,'<').replace(/>/g,'>').replace(/&/g,'&'); + } + + + function toQueryParams(separator) { + var match = this.strip().match(/([^?#]*)(#.*)?$/); + if (!match) return { }; + + return match[1].split(separator || '&').inject({ }, function(hash, pair) { + if ((pair = pair.split('='))[0]) { + var key = decodeURIComponent(pair.shift()), + value = pair.length > 1 ? pair.join('=') : pair[0]; + + if (value != undefined) { + value = value.gsub('+', ' '); + value = decodeURIComponent(value); + } + + if (key in hash) { + if (!Object.isArray(hash[key])) hash[key] = [hash[key]]; + hash[key].push(value); + } + else hash[key] = value; + } + return hash; + }); + } + + function toArray() { + return this.split(''); + } + + function succ() { + return this.slice(0, this.length - 1) + + String.fromCharCode(this.charCodeAt(this.length - 1) + 1); + } + + function times(count) { + return count < 1 ? '' : new Array(count + 1).join(this); + } + + function camelize() { + return this.replace(/-+(.)?/g, function(match, chr) { + return chr ? chr.toUpperCase() : ''; + }); + } + + function capitalize() { + return this.charAt(0).toUpperCase() + this.substring(1).toLowerCase(); + } + + function underscore() { + return this.replace(/::/g, '/') + .replace(/([A-Z]+)([A-Z][a-z])/g, '$1_$2') + .replace(/([a-z\d])([A-Z])/g, '$1_$2') + .replace(/-/g, '_') + .toLowerCase(); + } + + function dasherize() { + return this.replace(/_/g, '-'); + } + + function inspect(useDoubleQuotes) { + var escapedString = this.replace(/[\x00-\x1f\\]/g, function(character) { + if (character in String.specialChar) { + return String.specialChar[character]; + } + return '\\u00' + character.charCodeAt().toPaddedString(2, 16); + }); + if (useDoubleQuotes) return '"' + escapedString.replace(/"/g, '\\"') + '"'; + return "'" + escapedString.replace(/'/g, '\\\'') + "'"; + } + + function unfilterJSON(filter) { + return this.replace(filter || Prototype.JSONFilter, '$1'); + } + + function isJSON() { + var str = this; + if (str.blank()) return false; + str = str.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@'); + str = str.replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']'); + str = str.replace(/(?:^|:|,)(?:\s*\[)+/g, ''); + return (/^[\],:{}\s]*$/).test(str); + } + + function evalJSON(sanitize) { + var json = this.unfilterJSON(), + cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g; + if (cx.test(json)) { + json = json.replace(cx, function (a) { + return '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4); + }); + } + try { + if (!sanitize || json.isJSON()) return eval('(' + json + ')'); + } catch (e) { } + throw new SyntaxError('Badly formed JSON string: ' + this.inspect()); + } + + function parseJSON() { + var json = this.unfilterJSON(); + return JSON.parse(json); + } + + function include(pattern) { + return this.indexOf(pattern) > -1; + } + + function startsWith(pattern, position) { + position = Object.isNumber(position) ? position : 0; + return this.lastIndexOf(pattern, position) === position; + } + + function endsWith(pattern, position) { + pattern = String(pattern); + position = Object.isNumber(position) ? position : this.length; + if (position < 0) position = 0; + if (position > this.length) position = this.length; + var d = position - pattern.length; + return d >= 0 && this.indexOf(pattern, d) === d; + } + + function empty() { + return this == ''; + } + + function blank() { + return /^\s*$/.test(this); + } + + function interpolate(object, pattern) { + return new Template(this, pattern).evaluate(object); + } + + return { + gsub: gsub, + sub: sub, + scan: scan, + truncate: truncate, + strip: String.prototype.trim || strip, + stripTags: stripTags, + stripScripts: stripScripts, + extractScripts: extractScripts, + evalScripts: evalScripts, + escapeHTML: escapeHTML, + unescapeHTML: unescapeHTML, + toQueryParams: toQueryParams, + parseQuery: toQueryParams, + toArray: toArray, + succ: succ, + times: times, + camelize: camelize, + capitalize: capitalize, + underscore: underscore, + dasherize: dasherize, + inspect: inspect, + unfilterJSON: unfilterJSON, + isJSON: isJSON, + evalJSON: NATIVE_JSON_PARSE_SUPPORT ? parseJSON : evalJSON, + include: include, + startsWith: String.prototype.startsWith || startsWith, + endsWith: String.prototype.endsWith || endsWith, + empty: empty, + blank: blank, + interpolate: interpolate + }; +})()); + +var Template = Class.create({ + initialize: function(template, pattern) { + this.template = template.toString(); + this.pattern = pattern || Template.Pattern; + }, + + evaluate: function(object) { + if (object && Object.isFunction(object.toTemplateReplacements)) + object = object.toTemplateReplacements(); + + return this.template.gsub(this.pattern, function(match) { + if (object == null) return (match[1] + ''); + + var before = match[1] || ''; + if (before == '\\') return match[2]; + + var ctx = object, expr = match[3], + pattern = /^([^.[]+|\[((?:.*?[^\\])?)\])(\.|\[|$)/; + + match = pattern.exec(expr); + if (match == null) return before; + + while (match != null) { + var comp = match[1].startsWith('[') ? match[2].replace(/\\\\]/g, ']') : match[1]; + ctx = ctx[comp]; + if (null == ctx || '' == match[3]) break; + expr = expr.substring('[' == match[3] ? match[1].length : match[0].length); + match = pattern.exec(expr); + } + + return before + String.interpret(ctx); + }); + } +}); +Template.Pattern = /(^|.|\r|\n)(#\{(.*?)\})/; + +var $break = { }; + +var Enumerable = (function() { + function each(iterator, context) { + try { + this._each(iterator, context); + } catch (e) { + if (e != $break) throw e; + } + return this; + } + + function eachSlice(number, iterator, context) { + var index = -number, slices = [], array = this.toArray(); + if (number < 1) return array; + while ((index += number) < array.length) + slices.push(array.slice(index, index+number)); + return slices.collect(iterator, context); + } + + function all(iterator, context) { + iterator = iterator || Prototype.K; + var result = true; + this.each(function(value, index) { + result = result && !!iterator.call(context, value, index, this); + if (!result) throw $break; + }, this); + return result; + } + + function any(iterator, context) { + iterator = iterator || Prototype.K; + var result = false; + this.each(function(value, index) { + if (result = !!iterator.call(context, value, index, this)) + throw $break; + }, this); + return result; + } + + function collect(iterator, context) { + iterator = iterator || Prototype.K; + var results = []; + this.each(function(value, index) { + results.push(iterator.call(context, value, index, this)); + }, this); + return results; + } + + function detect(iterator, context) { + var result; + this.each(function(value, index) { + if (iterator.call(context, value, index, this)) { + result = value; + throw $break; + } + }, this); + return result; + } + + function findAll(iterator, context) { + var results = []; + this.each(function(value, index) { + if (iterator.call(context, value, index, this)) + results.push(value); + }, this); + return results; + } + + function grep(filter, iterator, context) { + iterator = iterator || Prototype.K; + var results = []; + + if (Object.isString(filter)) + filter = new RegExp(RegExp.escape(filter)); + + this.each(function(value, index) { + if (filter.match(value)) + results.push(iterator.call(context, value, index, this)); + }, this); + return results; + } + + function include(object) { + if (Object.isFunction(this.indexOf) && this.indexOf(object) != -1) + return true; + + var found = false; + this.each(function(value) { + if (value == object) { + found = true; + throw $break; + } + }); + return found; + } + + function inGroupsOf(number, fillWith) { + fillWith = Object.isUndefined(fillWith) ? null : fillWith; + return this.eachSlice(number, function(slice) { + while(slice.length < number) slice.push(fillWith); + return slice; + }); + } + + function inject(memo, iterator, context) { + this.each(function(value, index) { + memo = iterator.call(context, memo, value, index, this); + }, this); + return memo; + } + + function invoke(method) { + var args = $A(arguments).slice(1); + return this.map(function(value) { + return value[method].apply(value, args); + }); + } + + function max(iterator, context) { + iterator = iterator || Prototype.K; + var result; + this.each(function(value, index) { + value = iterator.call(context, value, index, this); + if (result == null || value >= result) + result = value; + }, this); + return result; + } + + function min(iterator, context) { + iterator = iterator || Prototype.K; + var result; + this.each(function(value, index) { + value = iterator.call(context, value, index, this); + if (result == null || value < result) + result = value; + }, this); + return result; + } + + function partition(iterator, context) { + iterator = iterator || Prototype.K; + var trues = [], falses = []; + this.each(function(value, index) { + (iterator.call(context, value, index, this) ? + trues : falses).push(value); + }, this); + return [trues, falses]; + } + + function pluck(property) { + var results = []; + this.each(function(value) { + results.push(value[property]); + }); + return results; + } + + function reject(iterator, context) { + var results = []; + this.each(function(value, index) { + if (!iterator.call(context, value, index, this)) + results.push(value); + }, this); + return results; + } + + function sortBy(iterator, context) { + return this.map(function(value, index) { + return { + value: value, + criteria: iterator.call(context, value, index, this) + }; + }, this).sort(function(left, right) { + var a = left.criteria, b = right.criteria; + return a < b ? -1 : a > b ? 1 : 0; + }).pluck('value'); + } + + function toArray() { + return this.map(); + } + + function zip() { + var iterator = Prototype.K, args = $A(arguments); + if (Object.isFunction(args.last())) + iterator = args.pop(); + + var collections = [this].concat(args).map($A); + return this.map(function(value, index) { + return iterator(collections.pluck(index)); + }); + } + + function size() { + return this.toArray().length; + } + + function inspect() { + return '#'; + } + + + + + + + + + + return { + each: each, + eachSlice: eachSlice, + all: all, + every: all, + any: any, + some: any, + collect: collect, + map: collect, + detect: detect, + findAll: findAll, + select: findAll, + filter: findAll, + grep: grep, + include: include, + member: include, + inGroupsOf: inGroupsOf, + inject: inject, + invoke: invoke, + max: max, + min: min, + partition: partition, + pluck: pluck, + reject: reject, + sortBy: sortBy, + toArray: toArray, + entries: toArray, + zip: zip, + size: size, + inspect: inspect, + find: detect + }; +})(); + +function $A(iterable) { + if (!iterable) return []; + if ('toArray' in Object(iterable)) return iterable.toArray(); + var length = iterable.length || 0, results = new Array(length); + while (length--) results[length] = iterable[length]; + return results; +} + + +function $w(string) { + if (!Object.isString(string)) return []; + string = string.strip(); + return string ? string.split(/\s+/) : []; +} + +Array.from = $A; + + +(function() { + var arrayProto = Array.prototype, + slice = arrayProto.slice, + _each = arrayProto.forEach; // use native browser JS 1.6 implementation if available + + function each(iterator, context) { + for (var i = 0, length = this.length >>> 0; i < length; i++) { + if (i in this) iterator.call(context, this[i], i, this); + } + } + if (!_each) _each = each; + + function clear() { + this.length = 0; + return this; + } + + function first() { + return this[0]; + } + + function last() { + return this[this.length - 1]; + } + + function compact() { + return this.select(function(value) { + return value != null; + }); + } + + function flatten() { + return this.inject([], function(array, value) { + if (Object.isArray(value)) + return array.concat(value.flatten()); + array.push(value); + return array; + }); + } + + function without() { + var values = slice.call(arguments, 0); + return this.select(function(value) { + return !values.include(value); + }); + } + + function reverse(inline) { + return (inline === false ? this.toArray() : this)._reverse(); + } + + function uniq(sorted) { + return this.inject([], function(array, value, index) { + if (0 == index || (sorted ? array.last() != value : !array.include(value))) + array.push(value); + return array; + }); + } + + function intersect(array) { + return this.uniq().findAll(function(item) { + return array.indexOf(item) !== -1; + }); + } + + + function clone() { + return slice.call(this, 0); + } + + function size() { + return this.length; + } + + function inspect() { + return '[' + this.map(Object.inspect).join(', ') + ']'; + } + + function indexOf(item, i) { + if (this == null) throw new TypeError(); + + var array = Object(this), length = array.length >>> 0; + if (length === 0) return -1; + + i = Number(i); + if (isNaN(i)) { + i = 0; + } else if (i !== 0 && isFinite(i)) { + i = (i > 0 ? 1 : -1) * Math.floor(Math.abs(i)); + } + + if (i > length) return -1; + + var k = i >= 0 ? i : Math.max(length - Math.abs(i), 0); + for (; k < length; k++) + if (k in array && array[k] === item) return k; + return -1; + } + + + function lastIndexOf(item, i) { + if (this == null) throw new TypeError(); + + var array = Object(this), length = array.length >>> 0; + if (length === 0) return -1; + + if (!Object.isUndefined(i)) { + i = Number(i); + if (isNaN(i)) { + i = 0; + } else if (i !== 0 && isFinite(i)) { + i = (i > 0 ? 1 : -1) * Math.floor(Math.abs(i)); + } + } else { + i = length; + } + + var k = i >= 0 ? Math.min(i, length - 1) : + length - Math.abs(i); + + for (; k >= 0; k--) + if (k in array && array[k] === item) return k; + return -1; + } + + function concat(_) { + var array = [], items = slice.call(arguments, 0), item, n = 0; + items.unshift(this); + for (var i = 0, length = items.length; i < length; i++) { + item = items[i]; + if (Object.isArray(item) && !('callee' in item)) { + for (var j = 0, arrayLength = item.length; j < arrayLength; j++) { + if (j in item) array[n] = item[j]; + n++; + } + } else { + array[n++] = item; + } + } + array.length = n; + return array; + } + + + function wrapNative(method) { + return function() { + if (arguments.length === 0) { + return method.call(this, Prototype.K); + } else if (arguments[0] === undefined) { + var args = slice.call(arguments, 1); + args.unshift(Prototype.K); + return method.apply(this, args); + } else { + return method.apply(this, arguments); + } + }; + } + + + function map(iterator) { + if (this == null) throw new TypeError(); + iterator = iterator || Prototype.K; + + var object = Object(this); + var results = [], context = arguments[1], n = 0; + + for (var i = 0, length = object.length >>> 0; i < length; i++) { + if (i in object) { + results[n] = iterator.call(context, object[i], i, object); + } + n++; + } + results.length = n; + return results; + } + + if (arrayProto.map) { + map = wrapNative(Array.prototype.map); + } + + function filter(iterator) { + if (this == null || !Object.isFunction(iterator)) + throw new TypeError(); + + var object = Object(this); + var results = [], context = arguments[1], value; + + for (var i = 0, length = object.length >>> 0; i < length; i++) { + if (i in object) { + value = object[i]; + if (iterator.call(context, value, i, object)) { + results.push(value); + } + } + } + return results; + } + + if (arrayProto.filter) { + filter = Array.prototype.filter; + } + + function some(iterator) { + if (this == null) throw new TypeError(); + iterator = iterator || Prototype.K; + var context = arguments[1]; + + var object = Object(this); + for (var i = 0, length = object.length >>> 0; i < length; i++) { + if (i in object && iterator.call(context, object[i], i, object)) { + return true; + } + } + + return false; + } + + if (arrayProto.some) { + var some = wrapNative(Array.prototype.some); + } + + + function every(iterator) { + if (this == null) throw new TypeError(); + iterator = iterator || Prototype.K; + var context = arguments[1]; + + var object = Object(this); + for (var i = 0, length = object.length >>> 0; i < length; i++) { + if (i in object && !iterator.call(context, object[i], i, object)) { + return false; + } + } + + return true; + } + + if (arrayProto.every) { + var every = wrapNative(Array.prototype.every); + } + + var _reduce = arrayProto.reduce; + function inject(memo, iterator) { + iterator = iterator || Prototype.K; + var context = arguments[2]; + return _reduce.call(this, iterator.bind(context), memo); + } + + if (!arrayProto.reduce) { + var inject = Enumerable.inject; + } + + Object.extend(arrayProto, Enumerable); + + if (!arrayProto._reverse) + arrayProto._reverse = arrayProto.reverse; + + Object.extend(arrayProto, { + _each: _each, + + map: map, + collect: map, + select: filter, + filter: filter, + findAll: filter, + some: some, + any: some, + every: every, + all: every, + inject: inject, + + clear: clear, + first: first, + last: last, + compact: compact, + flatten: flatten, + without: without, + reverse: reverse, + uniq: uniq, + intersect: intersect, + clone: clone, + toArray: clone, + size: size, + inspect: inspect + }); + + var CONCAT_ARGUMENTS_BUGGY = (function() { + return [].concat(arguments)[0][0] !== 1; + })(1,2); + + if (CONCAT_ARGUMENTS_BUGGY) arrayProto.concat = concat; + + if (!arrayProto.indexOf) arrayProto.indexOf = indexOf; + if (!arrayProto.lastIndexOf) arrayProto.lastIndexOf = lastIndexOf; +})(); +function $H(object) { + return new Hash(object); +}; + +var Hash = Class.create(Enumerable, (function() { + function initialize(object) { + this._object = Object.isHash(object) ? object.toObject() : Object.clone(object); + } + + + function _each(iterator, context) { + var i = 0; + for (var key in this._object) { + var value = this._object[key], pair = [key, value]; + pair.key = key; + pair.value = value; + iterator.call(context, pair, i); + i++; + } + } + + function set(key, value) { + return this._object[key] = value; + } + + function get(key) { + if (this._object[key] !== Object.prototype[key]) + return this._object[key]; + } + + function unset(key) { + var value = this._object[key]; + delete this._object[key]; + return value; + } + + function toObject() { + return Object.clone(this._object); + } + + + + function keys() { + return this.pluck('key'); + } + + function values() { + return this.pluck('value'); + } + + function index(value) { + var match = this.detect(function(pair) { + return pair.value === value; + }); + return match && match.key; + } + + function merge(object) { + return this.clone().update(object); + } + + function update(object) { + return new Hash(object).inject(this, function(result, pair) { + result.set(pair.key, pair.value); + return result; + }); + } + + function toQueryPair(key, value) { + if (Object.isUndefined(value)) return key; + + value = String.interpret(value); + + value = value.gsub(/(\r)?\n/, '\r\n'); + value = encodeURIComponent(value); + value = value.gsub(/%20/, '+'); + return key + '=' + value; + } + + function toQueryString() { + return this.inject([], function(results, pair) { + var key = encodeURIComponent(pair.key), values = pair.value; + + if (values && typeof values == 'object') { + if (Object.isArray(values)) { + var queryValues = []; + for (var i = 0, len = values.length, value; i < len; i++) { + value = values[i]; + queryValues.push(toQueryPair(key, value)); + } + return results.concat(queryValues); + } + } else results.push(toQueryPair(key, values)); + return results; + }).join('&'); + } + + function inspect() { + return '#'; + } + + function clone() { + return new Hash(this); + } + + return { + initialize: initialize, + _each: _each, + set: set, + get: get, + unset: unset, + toObject: toObject, + toTemplateReplacements: toObject, + keys: keys, + values: values, + index: index, + merge: merge, + update: update, + toQueryString: toQueryString, + inspect: inspect, + toJSON: toObject, + clone: clone + }; +})()); + +Hash.from = $H; +Object.extend(Number.prototype, (function() { + function toColorPart() { + return this.toPaddedString(2, 16); + } + + function succ() { + return this + 1; + } + + function times(iterator, context) { + $R(0, this, true).each(iterator, context); + return this; + } + + function toPaddedString(length, radix) { + var string = this.toString(radix || 10); + return '0'.times(length - string.length) + string; + } + + function abs() { + return Math.abs(this); + } + + function round() { + return Math.round(this); + } + + function ceil() { + return Math.ceil(this); + } + + function floor() { + return Math.floor(this); + } + + return { + toColorPart: toColorPart, + succ: succ, + times: times, + toPaddedString: toPaddedString, + abs: abs, + round: round, + ceil: ceil, + floor: floor + }; +})()); + +function $R(start, end, exclusive) { + return new ObjectRange(start, end, exclusive); +} + +var ObjectRange = Class.create(Enumerable, (function() { + function initialize(start, end, exclusive) { + this.start = start; + this.end = end; + this.exclusive = exclusive; + } + + function _each(iterator, context) { + var value = this.start, i; + for (i = 0; this.include(value); i++) { + iterator.call(context, value, i); + value = value.succ(); + } + } + + function include(value) { + if (value < this.start) + return false; + if (this.exclusive) + return value < this.end; + return value <= this.end; + } + + return { + initialize: initialize, + _each: _each, + include: include + }; +})()); + + + +var Abstract = { }; + + +var Try = { + these: function() { + var returnValue; + + for (var i = 0, length = arguments.length; i < length; i++) { + var lambda = arguments[i]; + try { + returnValue = lambda(); + break; + } catch (e) { } + } + + return returnValue; + } +}; + +var Ajax = { + getTransport: function() { + return Try.these( + function() {return new XMLHttpRequest()}, + function() {return new ActiveXObject('Msxml2.XMLHTTP')}, + function() {return new ActiveXObject('Microsoft.XMLHTTP')} + ) || false; + }, + + activeRequestCount: 0 +}; + +Ajax.Responders = { + responders: [], + + _each: function(iterator, context) { + this.responders._each(iterator, context); + }, + + register: function(responder) { + if (!this.include(responder)) + this.responders.push(responder); + }, + + unregister: function(responder) { + this.responders = this.responders.without(responder); + }, + + dispatch: function(callback, request, transport, json) { + this.each(function(responder) { + if (Object.isFunction(responder[callback])) { + try { + responder[callback].apply(responder, [request, transport, json]); + } catch (e) { } + } + }); + } +}; + +Object.extend(Ajax.Responders, Enumerable); + +Ajax.Responders.register({ + onCreate: function() { Ajax.activeRequestCount++ }, + onComplete: function() { Ajax.activeRequestCount-- } +}); +Ajax.Base = Class.create({ + initialize: function(options) { + this.options = { + method: 'post', + asynchronous: true, + contentType: 'application/x-www-form-urlencoded', + encoding: 'UTF-8', + parameters: '', + evalJSON: true, + evalJS: true + }; + Object.extend(this.options, options || { }); + + this.options.method = this.options.method.toLowerCase(); + + if (Object.isHash(this.options.parameters)) + this.options.parameters = this.options.parameters.toObject(); + } +}); +Ajax.Request = Class.create(Ajax.Base, { + _complete: false, + + initialize: function($super, url, options) { + $super(options); + this.transport = Ajax.getTransport(); + this.request(url); + }, + + request: function(url) { + this.url = url; + this.method = this.options.method; + var params = Object.isString(this.options.parameters) ? + this.options.parameters : + Object.toQueryString(this.options.parameters); + + if (!['get', 'post'].include(this.method)) { + params += (params ? '&' : '') + "_method=" + this.method; + this.method = 'post'; + } + + if (params && this.method === 'get') { + this.url += (this.url.include('?') ? '&' : '?') + params; + } + + this.parameters = params.toQueryParams(); + + try { + var response = new Ajax.Response(this); + if (this.options.onCreate) this.options.onCreate(response); + Ajax.Responders.dispatch('onCreate', this, response); + + this.transport.open(this.method.toUpperCase(), this.url, + this.options.asynchronous); + + if (this.options.asynchronous) this.respondToReadyState.bind(this).defer(1); + + this.transport.onreadystatechange = this.onStateChange.bind(this); + this.setRequestHeaders(); + + this.body = this.method == 'post' ? (this.options.postBody || params) : null; + this.transport.send(this.body); + + /* Force Firefox to handle ready state 4 for synchronous requests */ + if (!this.options.asynchronous && this.transport.overrideMimeType) + this.onStateChange(); + + } + catch (e) { + this.dispatchException(e); + } + }, + + onStateChange: function() { + var readyState = this.transport.readyState; + if (readyState > 1 && !((readyState == 4) && this._complete)) + this.respondToReadyState(this.transport.readyState); + }, + + setRequestHeaders: function() { + var headers = { + 'X-Requested-With': 'XMLHttpRequest', + 'X-Prototype-Version': Prototype.Version, + 'Accept': 'text/javascript, text/html, application/xml, text/xml, */*' + }; + + if (this.method == 'post') { + headers['Content-type'] = this.options.contentType + + (this.options.encoding ? '; charset=' + this.options.encoding : ''); + + /* Force "Connection: close" for older Mozilla browsers to work + * around a bug where XMLHttpRequest sends an incorrect + * Content-length header. See Mozilla Bugzilla #246651. + */ + if (this.transport.overrideMimeType && + (navigator.userAgent.match(/Gecko\/(\d{4})/) || [0,2005])[1] < 2005) + headers['Connection'] = 'close'; + } + + if (typeof this.options.requestHeaders == 'object') { + var extras = this.options.requestHeaders; + + if (Object.isFunction(extras.push)) + for (var i = 0, length = extras.length; i < length; i += 2) + headers[extras[i]] = extras[i+1]; + else + $H(extras).each(function(pair) { headers[pair.key] = pair.value }); + } + + for (var name in headers) + if (headers[name] != null) + this.transport.setRequestHeader(name, headers[name]); + }, + + success: function() { + var status = this.getStatus(); + return !status || (status >= 200 && status < 300) || status == 304; + }, + + getStatus: function() { + try { + if (this.transport.status === 1223) return 204; + return this.transport.status || 0; + } catch (e) { return 0 } + }, + + respondToReadyState: function(readyState) { + var state = Ajax.Request.Events[readyState], response = new Ajax.Response(this); + + if (state == 'Complete') { + try { + this._complete = true; + (this.options['on' + response.status] + || this.options['on' + (this.success() ? 'Success' : 'Failure')] + || Prototype.emptyFunction)(response, response.headerJSON); + } catch (e) { + this.dispatchException(e); + } + + var contentType = response.getHeader('Content-type'); + if (this.options.evalJS == 'force' + || (this.options.evalJS && this.isSameOrigin() && contentType + && contentType.match(/^\s*(text|application)\/(x-)?(java|ecma)script(;.*)?\s*$/i))) + this.evalResponse(); + } + + try { + (this.options['on' + state] || Prototype.emptyFunction)(response, response.headerJSON); + Ajax.Responders.dispatch('on' + state, this, response, response.headerJSON); + } catch (e) { + this.dispatchException(e); + } + + if (state == 'Complete') { + this.transport.onreadystatechange = Prototype.emptyFunction; + } + }, + + isSameOrigin: function() { + var m = this.url.match(/^\s*https?:\/\/[^\/]*/); + return !m || (m[0] == '#{protocol}//#{domain}#{port}'.interpolate({ + protocol: location.protocol, + domain: document.domain, + port: location.port ? ':' + location.port : '' + })); + }, + + getHeader: function(name) { + try { + return this.transport.getResponseHeader(name) || null; + } catch (e) { return null; } + }, + + evalResponse: function() { + try { + return eval((this.transport.responseText || '').unfilterJSON()); + } catch (e) { + this.dispatchException(e); + } + }, + + dispatchException: function(exception) { + (this.options.onException || Prototype.emptyFunction)(this, exception); + Ajax.Responders.dispatch('onException', this, exception); + } +}); + +Ajax.Request.Events = + ['Uninitialized', 'Loading', 'Loaded', 'Interactive', 'Complete']; + + + + + + + + +Ajax.Response = Class.create({ + initialize: function(request){ + this.request = request; + var transport = this.transport = request.transport, + readyState = this.readyState = transport.readyState; + + if ((readyState > 2 && !Prototype.Browser.IE) || readyState == 4) { + this.status = this.getStatus(); + this.statusText = this.getStatusText(); + this.responseText = String.interpret(transport.responseText); + this.headerJSON = this._getHeaderJSON(); + } + + if (readyState == 4) { + var xml = transport.responseXML; + this.responseXML = Object.isUndefined(xml) ? null : xml; + this.responseJSON = this._getResponseJSON(); + } + }, + + status: 0, + + statusText: '', + + getStatus: Ajax.Request.prototype.getStatus, + + getStatusText: function() { + try { + return this.transport.statusText || ''; + } catch (e) { return '' } + }, + + getHeader: Ajax.Request.prototype.getHeader, + + getAllHeaders: function() { + try { + return this.getAllResponseHeaders(); + } catch (e) { return null } + }, + + getResponseHeader: function(name) { + return this.transport.getResponseHeader(name); + }, + + getAllResponseHeaders: function() { + return this.transport.getAllResponseHeaders(); + }, + + _getHeaderJSON: function() { + var json = this.getHeader('X-JSON'); + if (!json) return null; + + try { + json = decodeURIComponent(escape(json)); + } catch(e) { + } + + try { + return json.evalJSON(this.request.options.sanitizeJSON || + !this.request.isSameOrigin()); + } catch (e) { + this.request.dispatchException(e); + } + }, + + _getResponseJSON: function() { + var options = this.request.options; + if (!options.evalJSON || (options.evalJSON != 'force' && + !(this.getHeader('Content-type') || '').include('application/json')) || + this.responseText.blank()) + return null; + try { + return this.responseText.evalJSON(options.sanitizeJSON || + !this.request.isSameOrigin()); + } catch (e) { + this.request.dispatchException(e); + } + } +}); + +Ajax.Updater = Class.create(Ajax.Request, { + initialize: function($super, container, url, options) { + this.container = { + success: (container.success || container), + failure: (container.failure || (container.success ? null : container)) + }; + + options = Object.clone(options); + var onComplete = options.onComplete; + options.onComplete = (function(response, json) { + this.updateContent(response.responseText); + if (Object.isFunction(onComplete)) onComplete(response, json); + }).bind(this); + + $super(url, options); + }, + + updateContent: function(responseText) { + var receiver = this.container[this.success() ? 'success' : 'failure'], + options = this.options; + + if (!options.evalScripts) responseText = responseText.stripScripts(); + + if (receiver = $(receiver)) { + if (options.insertion) { + if (Object.isString(options.insertion)) { + var insertion = { }; insertion[options.insertion] = responseText; + receiver.insert(insertion); + } + else options.insertion(receiver, responseText); + } + else receiver.update(responseText); + } + } +}); + +Ajax.PeriodicalUpdater = Class.create(Ajax.Base, { + initialize: function($super, container, url, options) { + $super(options); + this.onComplete = this.options.onComplete; + + this.frequency = (this.options.frequency || 2); + this.decay = (this.options.decay || 1); + + this.updater = { }; + this.container = container; + this.url = url; + + this.start(); + }, + + start: function() { + this.options.onComplete = this.updateComplete.bind(this); + this.onTimerEvent(); + }, + + stop: function() { + this.updater.options.onComplete = undefined; + clearTimeout(this.timer); + (this.onComplete || Prototype.emptyFunction).apply(this, arguments); + }, + + updateComplete: function(response) { + if (this.options.decay) { + this.decay = (response.responseText == this.lastText ? + this.decay * this.options.decay : 1); + + this.lastText = response.responseText; + } + this.timer = this.onTimerEvent.bind(this).delay(this.decay * this.frequency); + }, + + onTimerEvent: function() { + this.updater = new Ajax.Updater(this.container, this.url, this.options); + } +}); + +(function(GLOBAL) { + + var UNDEFINED; + var SLICE = Array.prototype.slice; + + var DIV = document.createElement('div'); + + + function $(element) { + if (arguments.length > 1) { + for (var i = 0, elements = [], length = arguments.length; i < length; i++) + elements.push($(arguments[i])); + return elements; + } + + if (Object.isString(element)) + element = document.getElementById(element); + return Element.extend(element); + } + + GLOBAL.$ = $; + + + if (!GLOBAL.Node) GLOBAL.Node = {}; + + if (!GLOBAL.Node.ELEMENT_NODE) { + Object.extend(GLOBAL.Node, { + ELEMENT_NODE: 1, + ATTRIBUTE_NODE: 2, + TEXT_NODE: 3, + CDATA_SECTION_NODE: 4, + ENTITY_REFERENCE_NODE: 5, + ENTITY_NODE: 6, + PROCESSING_INSTRUCTION_NODE: 7, + COMMENT_NODE: 8, + DOCUMENT_NODE: 9, + DOCUMENT_TYPE_NODE: 10, + DOCUMENT_FRAGMENT_NODE: 11, + NOTATION_NODE: 12 + }); + } + + var ELEMENT_CACHE = {}; + + function shouldUseCreationCache(tagName, attributes) { + if (tagName === 'select') return false; + if ('type' in attributes) return false; + return true; + } + + var HAS_EXTENDED_CREATE_ELEMENT_SYNTAX = (function(){ + try { + var el = document.createElement(''); + return el.tagName.toLowerCase() === 'input' && el.name === 'x'; + } + catch(err) { + return false; + } + })(); + + + var oldElement = GLOBAL.Element; + function Element(tagName, attributes) { + attributes = attributes || {}; + tagName = tagName.toLowerCase(); + + if (HAS_EXTENDED_CREATE_ELEMENT_SYNTAX && attributes.name) { + tagName = '<' + tagName + ' name="' + attributes.name + '">'; + delete attributes.name; + return Element.writeAttribute(document.createElement(tagName), attributes); + } + + if (!ELEMENT_CACHE[tagName]) + ELEMENT_CACHE[tagName] = Element.extend(document.createElement(tagName)); + + var node = shouldUseCreationCache(tagName, attributes) ? + ELEMENT_CACHE[tagName].cloneNode(false) : document.createElement(tagName); + + return Element.writeAttribute(node, attributes); + } + + GLOBAL.Element = Element; + + Object.extend(GLOBAL.Element, oldElement || {}); + if (oldElement) GLOBAL.Element.prototype = oldElement.prototype; + + Element.Methods = { ByTag: {}, Simulated: {} }; + + var methods = {}; + + var INSPECT_ATTRIBUTES = { id: 'id', className: 'class' }; + function inspect(element) { + element = $(element); + var result = '<' + element.tagName.toLowerCase(); + + var attribute, value; + for (var property in INSPECT_ATTRIBUTES) { + attribute = INSPECT_ATTRIBUTES[property]; + value = (element[property] || '').toString(); + if (value) result += ' ' + attribute + '=' + value.inspect(true); + } + + return result + '>'; + } + + methods.inspect = inspect; + + + function visible(element) { + return $(element).style.display !== 'none'; + } + + function toggle(element, bool) { + element = $(element); + if (Object.isUndefined(bool)) + bool = !Element.visible(element); + Element[bool ? 'show' : 'hide'](element); + + return element; + } + + function hide(element) { + element = $(element); + element.style.display = 'none'; + return element; + } + + function show(element) { + element = $(element); + element.style.display = ''; + return element; + } + + + Object.extend(methods, { + visible: visible, + toggle: toggle, + hide: hide, + show: show + }); + + + function remove(element) { + element = $(element); + element.parentNode.removeChild(element); + return element; + } + + var SELECT_ELEMENT_INNERHTML_BUGGY = (function(){ + var el = document.createElement("select"), + isBuggy = true; + el.innerHTML = ""; + if (el.options && el.options[0]) { + isBuggy = el.options[0].nodeName.toUpperCase() !== "OPTION"; + } + el = null; + return isBuggy; + })(); + + var TABLE_ELEMENT_INNERHTML_BUGGY = (function(){ + try { + var el = document.createElement("table"); + if (el && el.tBodies) { + el.innerHTML = "test"; + var isBuggy = typeof el.tBodies[0] == "undefined"; + el = null; + return isBuggy; + } + } catch (e) { + return true; + } + })(); + + var LINK_ELEMENT_INNERHTML_BUGGY = (function() { + try { + var el = document.createElement('div'); + el.innerHTML = ""; + var isBuggy = (el.childNodes.length === 0); + el = null; + return isBuggy; + } catch(e) { + return true; + } + })(); + + var ANY_INNERHTML_BUGGY = SELECT_ELEMENT_INNERHTML_BUGGY || + TABLE_ELEMENT_INNERHTML_BUGGY || LINK_ELEMENT_INNERHTML_BUGGY; + + var SCRIPT_ELEMENT_REJECTS_TEXTNODE_APPENDING = (function () { + var s = document.createElement("script"), + isBuggy = false; + try { + s.appendChild(document.createTextNode("")); + isBuggy = !s.firstChild || + s.firstChild && s.firstChild.nodeType !== 3; + } catch (e) { + isBuggy = true; + } + s = null; + return isBuggy; + })(); + + function update(element, content) { + element = $(element); + + var descendants = element.getElementsByTagName('*'), + i = descendants.length; + while (i--) purgeElement(descendants[i]); + + if (content && content.toElement) + content = content.toElement(); + + if (Object.isElement(content)) + return element.update().insert(content); + + + content = Object.toHTML(content); + var tagName = element.tagName.toUpperCase(); + + if (tagName === 'SCRIPT' && SCRIPT_ELEMENT_REJECTS_TEXTNODE_APPENDING) { + element.text = content; + return element; + } + + if (ANY_INNERHTML_BUGGY) { + if (tagName in INSERTION_TRANSLATIONS.tags) { + while (element.firstChild) + element.removeChild(element.firstChild); + + var nodes = getContentFromAnonymousElement(tagName, content.stripScripts()); + for (var i = 0, node; node = nodes[i]; i++) + element.appendChild(node); + + } else if (LINK_ELEMENT_INNERHTML_BUGGY && Object.isString(content) && content.indexOf(' -1) { + while (element.firstChild) + element.removeChild(element.firstChild); + + var nodes = getContentFromAnonymousElement(tagName, + content.stripScripts(), true); + + for (var i = 0, node; node = nodes[i]; i++) + element.appendChild(node); + } else { + element.innerHTML = content.stripScripts(); + } + } else { + element.innerHTML = content.stripScripts(); + } + + content.evalScripts.bind(content).defer(); + return element; + } + + function replace(element, content) { + element = $(element); + + if (content && content.toElement) { + content = content.toElement(); + } else if (!Object.isElement(content)) { + content = Object.toHTML(content); + var range = element.ownerDocument.createRange(); + range.selectNode(element); + content.evalScripts.bind(content).defer(); + content = range.createContextualFragment(content.stripScripts()); + } + + element.parentNode.replaceChild(content, element); + return element; + } + + var INSERTION_TRANSLATIONS = { + before: function(element, node) { + element.parentNode.insertBefore(node, element); + }, + top: function(element, node) { + element.insertBefore(node, element.firstChild); + }, + bottom: function(element, node) { + element.appendChild(node); + }, + after: function(element, node) { + element.parentNode.insertBefore(node, element.nextSibling); + }, + + tags: { + TABLE: ['', '
    ', 1], + TBODY: ['', '
    ', 2], + TR: ['', '
    ', 3], + TD: ['
    ', '
    ', 4], + SELECT: ['', 1] + } + }; + + var tags = INSERTION_TRANSLATIONS.tags; + + Object.extend(tags, { + THEAD: tags.TBODY, + TFOOT: tags.TBODY, + TH: tags.TD + }); + + function replace_IE(element, content) { + element = $(element); + if (content && content.toElement) + content = content.toElement(); + if (Object.isElement(content)) { + element.parentNode.replaceChild(content, element); + return element; + } + + content = Object.toHTML(content); + var parent = element.parentNode, tagName = parent.tagName.toUpperCase(); + + if (tagName in INSERTION_TRANSLATIONS.tags) { + var nextSibling = Element.next(element); + var fragments = getContentFromAnonymousElement( + tagName, content.stripScripts()); + + parent.removeChild(element); + + var iterator; + if (nextSibling) + iterator = function(node) { parent.insertBefore(node, nextSibling) }; + else + iterator = function(node) { parent.appendChild(node); } + + fragments.each(iterator); + } else { + element.outerHTML = content.stripScripts(); + } + + content.evalScripts.bind(content).defer(); + return element; + } + + if ('outerHTML' in document.documentElement) + replace = replace_IE; + + function isContent(content) { + if (Object.isUndefined(content) || content === null) return false; + + if (Object.isString(content) || Object.isNumber(content)) return true; + if (Object.isElement(content)) return true; + if (content.toElement || content.toHTML) return true; + + return false; + } + + function insertContentAt(element, content, position) { + position = position.toLowerCase(); + var method = INSERTION_TRANSLATIONS[position]; + + if (content && content.toElement) content = content.toElement(); + if (Object.isElement(content)) { + method(element, content); + return element; + } + + content = Object.toHTML(content); + var tagName = ((position === 'before' || position === 'after') ? + element.parentNode : element).tagName.toUpperCase(); + + var childNodes = getContentFromAnonymousElement(tagName, content.stripScripts()); + + if (position === 'top' || position === 'after') childNodes.reverse(); + + for (var i = 0, node; node = childNodes[i]; i++) + method(element, node); + + content.evalScripts.bind(content).defer(); + } + + function insert(element, insertions) { + element = $(element); + + if (isContent(insertions)) + insertions = { bottom: insertions }; + + for (var position in insertions) + insertContentAt(element, insertions[position], position); + + return element; + } + + function wrap(element, wrapper, attributes) { + element = $(element); + + if (Object.isElement(wrapper)) { + $(wrapper).writeAttribute(attributes || {}); + } else if (Object.isString(wrapper)) { + wrapper = new Element(wrapper, attributes); + } else { + wrapper = new Element('div', wrapper); + } + + if (element.parentNode) + element.parentNode.replaceChild(wrapper, element); + + wrapper.appendChild(element); + + return wrapper; + } + + function cleanWhitespace(element) { + element = $(element); + var node = element.firstChild; + + while (node) { + var nextNode = node.nextSibling; + if (node.nodeType === Node.TEXT_NODE && !/\S/.test(node.nodeValue)) + element.removeChild(node); + node = nextNode; + } + return element; + } + + function empty(element) { + return $(element).innerHTML.blank(); + } + + function getContentFromAnonymousElement(tagName, html, force) { + var t = INSERTION_TRANSLATIONS.tags[tagName], div = DIV; + + var workaround = !!t; + if (!workaround && force) { + workaround = true; + t = ['', '', 0]; + } + + if (workaround) { + div.innerHTML = ' ' + t[0] + html + t[1]; + div.removeChild(div.firstChild); + for (var i = t[2]; i--; ) + div = div.firstChild; + } else { + div.innerHTML = html; + } + + return $A(div.childNodes); + } + + function clone(element, deep) { + if (!(element = $(element))) return; + var clone = element.cloneNode(deep); + if (!HAS_UNIQUE_ID_PROPERTY) { + clone._prototypeUID = UNDEFINED; + if (deep) { + var descendants = Element.select(clone, '*'), + i = descendants.length; + while (i--) + descendants[i]._prototypeUID = UNDEFINED; + } + } + return Element.extend(clone); + } + + function purgeElement(element) { + var uid = getUniqueElementID(element); + if (uid) { + Element.stopObserving(element); + if (!HAS_UNIQUE_ID_PROPERTY) + element._prototypeUID = UNDEFINED; + delete Element.Storage[uid]; + } + } + + function purgeCollection(elements) { + var i = elements.length; + while (i--) + purgeElement(elements[i]); + } + + function purgeCollection_IE(elements) { + var i = elements.length, element, uid; + while (i--) { + element = elements[i]; + uid = getUniqueElementID(element); + delete Element.Storage[uid]; + delete Event.cache[uid]; + } + } + + if (HAS_UNIQUE_ID_PROPERTY) { + purgeCollection = purgeCollection_IE; + } + + + function purge(element) { + if (!(element = $(element))) return; + purgeElement(element); + + var descendants = element.getElementsByTagName('*'), + i = descendants.length; + + while (i--) purgeElement(descendants[i]); + + return null; + } + + Object.extend(methods, { + remove: remove, + update: update, + replace: replace, + insert: insert, + wrap: wrap, + cleanWhitespace: cleanWhitespace, + empty: empty, + clone: clone, + purge: purge + }); + + + + function recursivelyCollect(element, property, maximumLength) { + element = $(element); + maximumLength = maximumLength || -1; + var elements = []; + + while (element = element[property]) { + if (element.nodeType === Node.ELEMENT_NODE) + elements.push(Element.extend(element)); + + if (elements.length === maximumLength) break; + } + + return elements; + } + + + function ancestors(element) { + return recursivelyCollect(element, 'parentNode'); + } + + function descendants(element) { + return Element.select(element, '*'); + } + + function firstDescendant(element) { + element = $(element).firstChild; + while (element && element.nodeType !== Node.ELEMENT_NODE) + element = element.nextSibling; + + return $(element); + } + + function immediateDescendants(element) { + var results = [], child = $(element).firstChild; + + while (child) { + if (child.nodeType === Node.ELEMENT_NODE) + results.push(Element.extend(child)); + + child = child.nextSibling; + } + + return results; + } + + function previousSiblings(element) { + return recursivelyCollect(element, 'previousSibling'); + } + + function nextSiblings(element) { + return recursivelyCollect(element, 'nextSibling'); + } + + function siblings(element) { + element = $(element); + var previous = previousSiblings(element), + next = nextSiblings(element); + return previous.reverse().concat(next); + } + + function match(element, selector) { + element = $(element); + + if (Object.isString(selector)) + return Prototype.Selector.match(element, selector); + + return selector.match(element); + } + + + function _recursivelyFind(element, property, expression, index) { + element = $(element), expression = expression || 0, index = index || 0; + if (Object.isNumber(expression)) { + index = expression, expression = null; + } + + while (element = element[property]) { + if (element.nodeType !== 1) continue; + if (expression && !Prototype.Selector.match(element, expression)) + continue; + if (--index >= 0) continue; + + return Element.extend(element); + } + } + + + function up(element, expression, index) { + element = $(element); + + if (arguments.length === 1) return $(element.parentNode); + return _recursivelyFind(element, 'parentNode', expression, index); + } + + function down(element, expression, index) { + if (arguments.length === 1) return firstDescendant(element); + element = $(element), expression = expression || 0, index = index || 0; + + if (Object.isNumber(expression)) + index = expression, expression = '*'; + + var node = Prototype.Selector.select(expression, element)[index]; + return Element.extend(node); + } + + function previous(element, expression, index) { + return _recursivelyFind(element, 'previousSibling', expression, index); + } + + function next(element, expression, index) { + return _recursivelyFind(element, 'nextSibling', expression, index); + } + + function select(element) { + element = $(element); + var expressions = SLICE.call(arguments, 1).join(', '); + return Prototype.Selector.select(expressions, element); + } + + function adjacent(element) { + element = $(element); + var expressions = SLICE.call(arguments, 1).join(', '); + var siblings = Element.siblings(element), results = []; + for (var i = 0, sibling; sibling = siblings[i]; i++) { + if (Prototype.Selector.match(sibling, expressions)) + results.push(sibling); + } + + return results; + } + + function descendantOf_DOM(element, ancestor) { + element = $(element), ancestor = $(ancestor); + while (element = element.parentNode) + if (element === ancestor) return true; + return false; + } + + function descendantOf_contains(element, ancestor) { + element = $(element), ancestor = $(ancestor); + if (!ancestor.contains) return descendantOf_DOM(element, ancestor); + return ancestor.contains(element) && ancestor !== element; + } + + function descendantOf_compareDocumentPosition(element, ancestor) { + element = $(element), ancestor = $(ancestor); + return (element.compareDocumentPosition(ancestor) & 8) === 8; + } + + var descendantOf; + if (DIV.compareDocumentPosition) { + descendantOf = descendantOf_compareDocumentPosition; + } else if (DIV.contains) { + descendantOf = descendantOf_contains; + } else { + descendantOf = descendantOf_DOM; + } + + + Object.extend(methods, { + recursivelyCollect: recursivelyCollect, + ancestors: ancestors, + descendants: descendants, + firstDescendant: firstDescendant, + immediateDescendants: immediateDescendants, + previousSiblings: previousSiblings, + nextSiblings: nextSiblings, + siblings: siblings, + match: match, + up: up, + down: down, + previous: previous, + next: next, + select: select, + adjacent: adjacent, + descendantOf: descendantOf, + + getElementsBySelector: select, + + childElements: immediateDescendants + }); + + + var idCounter = 1; + function identify(element) { + element = $(element); + var id = Element.readAttribute(element, 'id'); + if (id) return id; + + do { id = 'anonymous_element_' + idCounter++ } while ($(id)); + + Element.writeAttribute(element, 'id', id); + return id; + } + + + function readAttribute(element, name) { + return $(element).getAttribute(name); + } + + function readAttribute_IE(element, name) { + element = $(element); + + var table = ATTRIBUTE_TRANSLATIONS.read; + if (table.values[name]) + return table.values[name](element, name); + + if (table.names[name]) name = table.names[name]; + + if (name.include(':')) { + if (!element.attributes || !element.attributes[name]) return null; + return element.attributes[name].value; + } + + return element.getAttribute(name); + } + + function readAttribute_Opera(element, name) { + if (name === 'title') return element.title; + return element.getAttribute(name); + } + + var PROBLEMATIC_ATTRIBUTE_READING = (function() { + DIV.setAttribute('onclick', []); + var value = DIV.getAttribute('onclick'); + var isFunction = Object.isArray(value); + DIV.removeAttribute('onclick'); + return isFunction; + })(); + + if (PROBLEMATIC_ATTRIBUTE_READING) { + readAttribute = readAttribute_IE; + } else if (Prototype.Browser.Opera) { + readAttribute = readAttribute_Opera; + } + + + function writeAttribute(element, name, value) { + element = $(element); + var attributes = {}, table = ATTRIBUTE_TRANSLATIONS.write; + + if (typeof name === 'object') { + attributes = name; + } else { + attributes[name] = Object.isUndefined(value) ? true : value; + } + + for (var attr in attributes) { + name = table.names[attr] || attr; + value = attributes[attr]; + if (table.values[attr]) + name = table.values[attr](element, value) || name; + if (value === false || value === null) + element.removeAttribute(name); + else if (value === true) + element.setAttribute(name, name); + else element.setAttribute(name, value); + } + + return element; + } + + var PROBLEMATIC_HAS_ATTRIBUTE_WITH_CHECKBOXES = (function () { + if (!HAS_EXTENDED_CREATE_ELEMENT_SYNTAX) { + return false; + } + var checkbox = document.createElement(''); + checkbox.checked = true; + var node = checkbox.getAttributeNode('checked'); + return !node || !node.specified; + })(); + + function hasAttribute(element, attribute) { + attribute = ATTRIBUTE_TRANSLATIONS.has[attribute] || attribute; + var node = $(element).getAttributeNode(attribute); + return !!(node && node.specified); + } + + function hasAttribute_IE(element, attribute) { + if (attribute === 'checked') { + return element.checked; + } + return hasAttribute(element, attribute); + } + + GLOBAL.Element.Methods.Simulated.hasAttribute = + PROBLEMATIC_HAS_ATTRIBUTE_WITH_CHECKBOXES ? + hasAttribute_IE : hasAttribute; + + function classNames(element) { + return new Element.ClassNames(element); + } + + var regExpCache = {}; + function getRegExpForClassName(className) { + if (regExpCache[className]) return regExpCache[className]; + + var re = new RegExp("(^|\\s+)" + className + "(\\s+|$)"); + regExpCache[className] = re; + return re; + } + + function hasClassName(element, className) { + if (!(element = $(element))) return; + + var elementClassName = element.className; + + if (elementClassName.length === 0) return false; + if (elementClassName === className) return true; + + return getRegExpForClassName(className).test(elementClassName); + } + + function addClassName(element, className) { + if (!(element = $(element))) return; + + if (!hasClassName(element, className)) + element.className += (element.className ? ' ' : '') + className; + + return element; + } + + function removeClassName(element, className) { + if (!(element = $(element))) return; + + element.className = element.className.replace( + getRegExpForClassName(className), ' ').strip(); + + return element; + } + + function toggleClassName(element, className, bool) { + if (!(element = $(element))) return; + + if (Object.isUndefined(bool)) + bool = !hasClassName(element, className); + + var method = Element[bool ? 'addClassName' : 'removeClassName']; + return method(element, className); + } + + var ATTRIBUTE_TRANSLATIONS = {}; + + var classProp = 'className', forProp = 'for'; + + DIV.setAttribute(classProp, 'x'); + if (DIV.className !== 'x') { + DIV.setAttribute('class', 'x'); + if (DIV.className === 'x') + classProp = 'class'; + } + + var LABEL = document.createElement('label'); + LABEL.setAttribute(forProp, 'x'); + if (LABEL.htmlFor !== 'x') { + LABEL.setAttribute('htmlFor', 'x'); + if (LABEL.htmlFor === 'x') + forProp = 'htmlFor'; + } + LABEL = null; + + function _getAttr(element, attribute) { + return element.getAttribute(attribute); + } + + function _getAttr2(element, attribute) { + return element.getAttribute(attribute, 2); + } + + function _getAttrNode(element, attribute) { + var node = element.getAttributeNode(attribute); + return node ? node.value : ''; + } + + function _getFlag(element, attribute) { + return $(element).hasAttribute(attribute) ? attribute : null; + } + + DIV.onclick = Prototype.emptyFunction; + var onclickValue = DIV.getAttribute('onclick'); + + var _getEv; + + if (String(onclickValue).indexOf('{') > -1) { + _getEv = function(element, attribute) { + var value = element.getAttribute(attribute); + if (!value) return null; + value = value.toString(); + value = value.split('{')[1]; + value = value.split('}')[0]; + return value.strip(); + }; + } + else if (onclickValue === '') { + _getEv = function(element, attribute) { + var value = element.getAttribute(attribute); + if (!value) return null; + return value.strip(); + }; + } + + ATTRIBUTE_TRANSLATIONS.read = { + names: { + 'class': classProp, + 'className': classProp, + 'for': forProp, + 'htmlFor': forProp + }, + + values: { + style: function(element) { + return element.style.cssText.toLowerCase(); + }, + title: function(element) { + return element.title; + } + } + }; + + ATTRIBUTE_TRANSLATIONS.write = { + names: { + className: 'class', + htmlFor: 'for', + cellpadding: 'cellPadding', + cellspacing: 'cellSpacing' + }, + + values: { + checked: function(element, value) { + element.checked = !!value; + }, + + style: function(element, value) { + element.style.cssText = value ? value : ''; + } + } + }; + + ATTRIBUTE_TRANSLATIONS.has = { names: {} }; + + Object.extend(ATTRIBUTE_TRANSLATIONS.write.names, + ATTRIBUTE_TRANSLATIONS.read.names); + + var CAMEL_CASED_ATTRIBUTE_NAMES = $w('colSpan rowSpan vAlign dateTime ' + + 'accessKey tabIndex encType maxLength readOnly longDesc frameBorder'); + + for (var i = 0, attr; attr = CAMEL_CASED_ATTRIBUTE_NAMES[i]; i++) { + ATTRIBUTE_TRANSLATIONS.write.names[attr.toLowerCase()] = attr; + ATTRIBUTE_TRANSLATIONS.has.names[attr.toLowerCase()] = attr; + } + + Object.extend(ATTRIBUTE_TRANSLATIONS.read.values, { + href: _getAttr2, + src: _getAttr2, + type: _getAttr, + action: _getAttrNode, + disabled: _getFlag, + checked: _getFlag, + readonly: _getFlag, + multiple: _getFlag, + onload: _getEv, + onunload: _getEv, + onclick: _getEv, + ondblclick: _getEv, + onmousedown: _getEv, + onmouseup: _getEv, + onmouseover: _getEv, + onmousemove: _getEv, + onmouseout: _getEv, + onfocus: _getEv, + onblur: _getEv, + onkeypress: _getEv, + onkeydown: _getEv, + onkeyup: _getEv, + onsubmit: _getEv, + onreset: _getEv, + onselect: _getEv, + onchange: _getEv + }); + + + Object.extend(methods, { + identify: identify, + readAttribute: readAttribute, + writeAttribute: writeAttribute, + classNames: classNames, + hasClassName: hasClassName, + addClassName: addClassName, + removeClassName: removeClassName, + toggleClassName: toggleClassName + }); + + + function normalizeStyleName(style) { + if (style === 'float' || style === 'styleFloat') + return 'cssFloat'; + return style.camelize(); + } + + function normalizeStyleName_IE(style) { + if (style === 'float' || style === 'cssFloat') + return 'styleFloat'; + return style.camelize(); + } + + function setStyle(element, styles) { + element = $(element); + var elementStyle = element.style, match; + + if (Object.isString(styles)) { + elementStyle.cssText += ';' + styles; + if (styles.include('opacity')) { + var opacity = styles.match(/opacity:\s*(\d?\.?\d*)/)[1]; + Element.setOpacity(element, opacity); + } + return element; + } + + for (var property in styles) { + if (property === 'opacity') { + Element.setOpacity(element, styles[property]); + } else { + var value = styles[property]; + if (property === 'float' || property === 'cssFloat') { + property = Object.isUndefined(elementStyle.styleFloat) ? + 'cssFloat' : 'styleFloat'; + } + elementStyle[property] = value; + } + } + + return element; + } + + + function getStyle(element, style) { + element = $(element); + style = normalizeStyleName(style); + + var value = element.style[style]; + if (!value || value === 'auto') { + var css = document.defaultView.getComputedStyle(element, null); + value = css ? css[style] : null; + } + + if (style === 'opacity') return value ? parseFloat(value) : 1.0; + return value === 'auto' ? null : value; + } + + function getStyle_Opera(element, style) { + switch (style) { + case 'height': case 'width': + if (!Element.visible(element)) return null; + + var dim = parseInt(getStyle(element, style), 10); + + if (dim !== element['offset' + style.capitalize()]) + return dim + 'px'; + + return Element.measure(element, style); + + default: return getStyle(element, style); + } + } + + function getStyle_IE(element, style) { + element = $(element); + style = normalizeStyleName_IE(style); + + var value = element.style[style]; + if (!value && element.currentStyle) { + value = element.currentStyle[style]; + } + + if (style === 'opacity' && !STANDARD_CSS_OPACITY_SUPPORTED) + return getOpacity_IE(element); + + if (value === 'auto') { + if ((style === 'width' || style === 'height') && Element.visible(element)) + return Element.measure(element, style) + 'px'; + return null; + } + + return value; + } + + function stripAlphaFromFilter_IE(filter) { + return (filter || '').replace(/alpha\([^\)]*\)/gi, ''); + } + + function hasLayout_IE(element) { + if (!element.currentStyle || !element.currentStyle.hasLayout) + element.style.zoom = 1; + return element; + } + + var STANDARD_CSS_OPACITY_SUPPORTED = (function() { + DIV.style.cssText = "opacity:.55"; + return /^0.55/.test(DIV.style.opacity); + })(); + + function setOpacity(element, value) { + element = $(element); + if (value == 1 || value === '') value = ''; + else if (value < 0.00001) value = 0; + element.style.opacity = value; + return element; + } + + function setOpacity_IE(element, value) { + if (STANDARD_CSS_OPACITY_SUPPORTED) + return setOpacity(element, value); + + element = hasLayout_IE($(element)); + var filter = Element.getStyle(element, 'filter'), + style = element.style; + + if (value == 1 || value === '') { + filter = stripAlphaFromFilter_IE(filter); + if (filter) style.filter = filter; + else style.removeAttribute('filter'); + return element; + } + + if (value < 0.00001) value = 0; + + style.filter = stripAlphaFromFilter_IE(filter) + + 'alpha(opacity=' + (value * 100) + ')'; + + return element; + } + + + function getOpacity(element) { + return Element.getStyle(element, 'opacity'); + } + + function getOpacity_IE(element) { + if (STANDARD_CSS_OPACITY_SUPPORTED) + return getOpacity(element); + + var filter = Element.getStyle(element, 'filter'); + if (filter.length === 0) return 1.0; + var match = (filter || '').match(/alpha\(opacity=(.*)\)/); + if (match && match[1]) return parseFloat(match[1]) / 100; + return 1.0; + } + + + Object.extend(methods, { + setStyle: setStyle, + getStyle: getStyle, + setOpacity: setOpacity, + getOpacity: getOpacity + }); + + if ('styleFloat' in DIV.style) { + methods.getStyle = getStyle_IE; + methods.setOpacity = setOpacity_IE; + methods.getOpacity = getOpacity_IE; + } + + var UID = 0; + + GLOBAL.Element.Storage = { UID: 1 }; + + function getUniqueElementID(element) { + if (element === window) return 0; + + if (typeof element._prototypeUID === 'undefined') + element._prototypeUID = Element.Storage.UID++; + return element._prototypeUID; + } + + function getUniqueElementID_IE(element) { + if (element === window) return 0; + if (element == document) return 1; + return element.uniqueID; + } + + var HAS_UNIQUE_ID_PROPERTY = ('uniqueID' in DIV); + if (HAS_UNIQUE_ID_PROPERTY) + getUniqueElementID = getUniqueElementID_IE; + + function getStorage(element) { + if (!(element = $(element))) return; + + var uid = getUniqueElementID(element); + + if (!Element.Storage[uid]) + Element.Storage[uid] = $H(); + + return Element.Storage[uid]; + } + + function store(element, key, value) { + if (!(element = $(element))) return; + var storage = getStorage(element); + if (arguments.length === 2) { + storage.update(key); + } else { + storage.set(key, value); + } + return element; + } + + function retrieve(element, key, defaultValue) { + if (!(element = $(element))) return; + var storage = getStorage(element), value = storage.get(key); + + if (Object.isUndefined(value)) { + storage.set(key, defaultValue); + value = defaultValue; + } + + return value; + } + + + Object.extend(methods, { + getStorage: getStorage, + store: store, + retrieve: retrieve + }); + + + var Methods = {}, ByTag = Element.Methods.ByTag, + F = Prototype.BrowserFeatures; + + if (!F.ElementExtensions && ('__proto__' in DIV)) { + GLOBAL.HTMLElement = {}; + GLOBAL.HTMLElement.prototype = DIV['__proto__']; + F.ElementExtensions = true; + } + + function checkElementPrototypeDeficiency(tagName) { + if (typeof window.Element === 'undefined') return false; + if (!HAS_EXTENDED_CREATE_ELEMENT_SYNTAX) return false; + var proto = window.Element.prototype; + if (proto) { + var id = '_' + (Math.random() + '').slice(2), + el = document.createElement(tagName); + proto[id] = 'x'; + var isBuggy = (el[id] !== 'x'); + delete proto[id]; + el = null; + return isBuggy; + } + + return false; + } + + var HTMLOBJECTELEMENT_PROTOTYPE_BUGGY = + checkElementPrototypeDeficiency('object'); + + function extendElementWith(element, methods) { + for (var property in methods) { + var value = methods[property]; + if (Object.isFunction(value) && !(property in element)) + element[property] = value.methodize(); + } + } + + var EXTENDED = {}; + function elementIsExtended(element) { + var uid = getUniqueElementID(element); + return (uid in EXTENDED); + } + + function extend(element) { + if (!element || elementIsExtended(element)) return element; + if (element.nodeType !== Node.ELEMENT_NODE || element == window) + return element; + + var methods = Object.clone(Methods), + tagName = element.tagName.toUpperCase(); + + if (ByTag[tagName]) Object.extend(methods, ByTag[tagName]); + + extendElementWith(element, methods); + EXTENDED[getUniqueElementID(element)] = true; + return element; + } + + function extend_IE8(element) { + if (!element || elementIsExtended(element)) return element; + + var t = element.tagName; + if (t && (/^(?:object|applet|embed)$/i.test(t))) { + extendElementWith(element, Element.Methods); + extendElementWith(element, Element.Methods.Simulated); + extendElementWith(element, Element.Methods.ByTag[t.toUpperCase()]); + } + + return element; + } + + if (F.SpecificElementExtensions) { + extend = HTMLOBJECTELEMENT_PROTOTYPE_BUGGY ? extend_IE8 : Prototype.K; + } + + function addMethodsToTagName(tagName, methods) { + tagName = tagName.toUpperCase(); + if (!ByTag[tagName]) ByTag[tagName] = {}; + Object.extend(ByTag[tagName], methods); + } + + function mergeMethods(destination, methods, onlyIfAbsent) { + if (Object.isUndefined(onlyIfAbsent)) onlyIfAbsent = false; + for (var property in methods) { + var value = methods[property]; + if (!Object.isFunction(value)) continue; + if (!onlyIfAbsent || !(property in destination)) + destination[property] = value.methodize(); + } + } + + function findDOMClass(tagName) { + var klass; + var trans = { + "OPTGROUP": "OptGroup", "TEXTAREA": "TextArea", "P": "Paragraph", + "FIELDSET": "FieldSet", "UL": "UList", "OL": "OList", "DL": "DList", + "DIR": "Directory", "H1": "Heading", "H2": "Heading", "H3": "Heading", + "H4": "Heading", "H5": "Heading", "H6": "Heading", "Q": "Quote", + "INS": "Mod", "DEL": "Mod", "A": "Anchor", "IMG": "Image", "CAPTION": + "TableCaption", "COL": "TableCol", "COLGROUP": "TableCol", "THEAD": + "TableSection", "TFOOT": "TableSection", "TBODY": "TableSection", "TR": + "TableRow", "TH": "TableCell", "TD": "TableCell", "FRAMESET": + "FrameSet", "IFRAME": "IFrame" + }; + if (trans[tagName]) klass = 'HTML' + trans[tagName] + 'Element'; + if (window[klass]) return window[klass]; + klass = 'HTML' + tagName + 'Element'; + if (window[klass]) return window[klass]; + klass = 'HTML' + tagName.capitalize() + 'Element'; + if (window[klass]) return window[klass]; + + var element = document.createElement(tagName), + proto = element['__proto__'] || element.constructor.prototype; + + element = null; + return proto; + } + + function addMethods(methods) { + if (arguments.length === 0) addFormMethods(); + + if (arguments.length === 2) { + var tagName = methods; + methods = arguments[1]; + } + + if (!tagName) { + Object.extend(Element.Methods, methods || {}); + } else { + if (Object.isArray(tagName)) { + for (var i = 0, tag; tag = tagName[i]; i++) + addMethodsToTagName(tag, methods); + } else { + addMethodsToTagName(tagName, methods); + } + } + + var ELEMENT_PROTOTYPE = window.HTMLElement ? HTMLElement.prototype : + Element.prototype; + + if (F.ElementExtensions) { + mergeMethods(ELEMENT_PROTOTYPE, Element.Methods); + mergeMethods(ELEMENT_PROTOTYPE, Element.Methods.Simulated, true); + } + + if (F.SpecificElementExtensions) { + for (var tag in Element.Methods.ByTag) { + var klass = findDOMClass(tag); + if (Object.isUndefined(klass)) continue; + mergeMethods(klass.prototype, ByTag[tag]); + } + } + + Object.extend(Element, Element.Methods); + Object.extend(Element, Element.Methods.Simulated); + delete Element.ByTag; + delete Element.Simulated; + + Element.extend.refresh(); + + ELEMENT_CACHE = {}; + } + + Object.extend(GLOBAL.Element, { + extend: extend, + addMethods: addMethods + }); + + if (extend === Prototype.K) { + GLOBAL.Element.extend.refresh = Prototype.emptyFunction; + } else { + GLOBAL.Element.extend.refresh = function() { + if (Prototype.BrowserFeatures.ElementExtensions) return; + Object.extend(Methods, Element.Methods); + Object.extend(Methods, Element.Methods.Simulated); + + EXTENDED = {}; + }; + } + + function addFormMethods() { + Object.extend(Form, Form.Methods); + Object.extend(Form.Element, Form.Element.Methods); + Object.extend(Element.Methods.ByTag, { + "FORM": Object.clone(Form.Methods), + "INPUT": Object.clone(Form.Element.Methods), + "SELECT": Object.clone(Form.Element.Methods), + "TEXTAREA": Object.clone(Form.Element.Methods), + "BUTTON": Object.clone(Form.Element.Methods) + }); + } + + Element.addMethods(methods); + + function destroyCache_IE() { + DIV = null; + ELEMENT_CACHE = null; + } + + if (window.attachEvent) + window.attachEvent('onunload', destroyCache_IE); + +})(this); +(function() { + + function toDecimal(pctString) { + var match = pctString.match(/^(\d+)%?$/i); + if (!match) return null; + return (Number(match[1]) / 100); + } + + function getRawStyle(element, style) { + element = $(element); + + var value = element.style[style]; + if (!value || value === 'auto') { + var css = document.defaultView.getComputedStyle(element, null); + value = css ? css[style] : null; + } + + if (style === 'opacity') return value ? parseFloat(value) : 1.0; + return value === 'auto' ? null : value; + } + + function getRawStyle_IE(element, style) { + var value = element.style[style]; + if (!value && element.currentStyle) { + value = element.currentStyle[style]; + } + return value; + } + + function getContentWidth(element, context) { + var boxWidth = element.offsetWidth; + + var bl = getPixelValue(element, 'borderLeftWidth', context) || 0; + var br = getPixelValue(element, 'borderRightWidth', context) || 0; + var pl = getPixelValue(element, 'paddingLeft', context) || 0; + var pr = getPixelValue(element, 'paddingRight', context) || 0; + + return boxWidth - bl - br - pl - pr; + } + + if ('currentStyle' in document.documentElement) { + getRawStyle = getRawStyle_IE; + } + + + function getPixelValue(value, property, context) { + var element = null; + if (Object.isElement(value)) { + element = value; + value = getRawStyle(element, property); + } + + if (value === null || Object.isUndefined(value)) { + return null; + } + + if ((/^(?:-)?\d+(\.\d+)?(px)?$/i).test(value)) { + return window.parseFloat(value); + } + + var isPercentage = value.include('%'), isViewport = (context === document.viewport); + + if (/\d/.test(value) && element && element.runtimeStyle && !(isPercentage && isViewport)) { + var style = element.style.left, rStyle = element.runtimeStyle.left; + element.runtimeStyle.left = element.currentStyle.left; + element.style.left = value || 0; + value = element.style.pixelLeft; + element.style.left = style; + element.runtimeStyle.left = rStyle; + + return value; + } + + if (element && isPercentage) { + context = context || element.parentNode; + var decimal = toDecimal(value), whole = null; + + var isHorizontal = property.include('left') || property.include('right') || + property.include('width'); + + var isVertical = property.include('top') || property.include('bottom') || + property.include('height'); + + if (context === document.viewport) { + if (isHorizontal) { + whole = document.viewport.getWidth(); + } else if (isVertical) { + whole = document.viewport.getHeight(); + } + } else { + if (isHorizontal) { + whole = $(context).measure('width'); + } else if (isVertical) { + whole = $(context).measure('height'); + } + } + + return (whole === null) ? 0 : whole * decimal; + } + + return 0; + } + + function toCSSPixels(number) { + if (Object.isString(number) && number.endsWith('px')) + return number; + return number + 'px'; + } + + function isDisplayed(element) { + while (element && element.parentNode) { + var display = element.getStyle('display'); + if (display === 'none') { + return false; + } + element = $(element.parentNode); + } + return true; + } + + var hasLayout = Prototype.K; + if ('currentStyle' in document.documentElement) { + hasLayout = function(element) { + if (!element.currentStyle.hasLayout) { + element.style.zoom = 1; + } + return element; + }; + } + + function cssNameFor(key) { + if (key.include('border')) key = key + '-width'; + return key.camelize(); + } + + Element.Layout = Class.create(Hash, { + initialize: function($super, element, preCompute) { + $super(); + this.element = $(element); + + Element.Layout.PROPERTIES.each( function(property) { + this._set(property, null); + }, this); + + if (preCompute) { + this._preComputing = true; + this._begin(); + Element.Layout.PROPERTIES.each( this._compute, this ); + this._end(); + this._preComputing = false; + } + }, + + _set: function(property, value) { + return Hash.prototype.set.call(this, property, value); + }, + + set: function(property, value) { + throw "Properties of Element.Layout are read-only."; + }, + + get: function($super, property) { + var value = $super(property); + return value === null ? this._compute(property) : value; + }, + + _begin: function() { + if (this._isPrepared()) return; + + var element = this.element; + if (isDisplayed(element)) { + this._setPrepared(true); + return; + } + + + var originalStyles = { + position: element.style.position || '', + width: element.style.width || '', + visibility: element.style.visibility || '', + display: element.style.display || '' + }; + + element.store('prototype_original_styles', originalStyles); + + var position = getRawStyle(element, 'position'), width = element.offsetWidth; + + if (width === 0 || width === null) { + element.style.display = 'block'; + width = element.offsetWidth; + } + + var context = (position === 'fixed') ? document.viewport : + element.parentNode; + + var tempStyles = { + visibility: 'hidden', + display: 'block' + }; + + if (position !== 'fixed') tempStyles.position = 'absolute'; + + element.setStyle(tempStyles); + + var positionedWidth = element.offsetWidth, newWidth; + if (width && (positionedWidth === width)) { + newWidth = getContentWidth(element, context); + } else if (position === 'absolute' || position === 'fixed') { + newWidth = getContentWidth(element, context); + } else { + var parent = element.parentNode, pLayout = $(parent).getLayout(); + + newWidth = pLayout.get('width') - + this.get('margin-left') - + this.get('border-left') - + this.get('padding-left') - + this.get('padding-right') - + this.get('border-right') - + this.get('margin-right'); + } + + element.setStyle({ width: newWidth + 'px' }); + + this._setPrepared(true); + }, + + _end: function() { + var element = this.element; + var originalStyles = element.retrieve('prototype_original_styles'); + element.store('prototype_original_styles', null); + element.setStyle(originalStyles); + this._setPrepared(false); + }, + + _compute: function(property) { + var COMPUTATIONS = Element.Layout.COMPUTATIONS; + if (!(property in COMPUTATIONS)) { + throw "Property not found."; + } + + return this._set(property, COMPUTATIONS[property].call(this, this.element)); + }, + + _isPrepared: function() { + return this.element.retrieve('prototype_element_layout_prepared', false); + }, + + _setPrepared: function(bool) { + return this.element.store('prototype_element_layout_prepared', bool); + }, + + toObject: function() { + var args = $A(arguments); + var keys = (args.length === 0) ? Element.Layout.PROPERTIES : + args.join(' ').split(' '); + var obj = {}; + keys.each( function(key) { + if (!Element.Layout.PROPERTIES.include(key)) return; + var value = this.get(key); + if (value != null) obj[key] = value; + }, this); + return obj; + }, + + toHash: function() { + var obj = this.toObject.apply(this, arguments); + return new Hash(obj); + }, + + toCSS: function() { + var args = $A(arguments); + var keys = (args.length === 0) ? Element.Layout.PROPERTIES : + args.join(' ').split(' '); + var css = {}; + + keys.each( function(key) { + if (!Element.Layout.PROPERTIES.include(key)) return; + if (Element.Layout.COMPOSITE_PROPERTIES.include(key)) return; + + var value = this.get(key); + if (value != null) css[cssNameFor(key)] = value + 'px'; + }, this); + return css; + }, + + inspect: function() { + return "#"; + } + }); + + Object.extend(Element.Layout, { + PROPERTIES: $w('height width top left right bottom border-left border-right border-top border-bottom padding-left padding-right padding-top padding-bottom margin-top margin-bottom margin-left margin-right padding-box-width padding-box-height border-box-width border-box-height margin-box-width margin-box-height'), + + COMPOSITE_PROPERTIES: $w('padding-box-width padding-box-height margin-box-width margin-box-height border-box-width border-box-height'), + + COMPUTATIONS: { + 'height': function(element) { + if (!this._preComputing) this._begin(); + + var bHeight = this.get('border-box-height'); + if (bHeight <= 0) { + if (!this._preComputing) this._end(); + return 0; + } + + var bTop = this.get('border-top'), + bBottom = this.get('border-bottom'); + + var pTop = this.get('padding-top'), + pBottom = this.get('padding-bottom'); + + if (!this._preComputing) this._end(); + + return bHeight - bTop - bBottom - pTop - pBottom; + }, + + 'width': function(element) { + if (!this._preComputing) this._begin(); + + var bWidth = this.get('border-box-width'); + if (bWidth <= 0) { + if (!this._preComputing) this._end(); + return 0; + } + + var bLeft = this.get('border-left'), + bRight = this.get('border-right'); + + var pLeft = this.get('padding-left'), + pRight = this.get('padding-right'); + + if (!this._preComputing) this._end(); + return bWidth - bLeft - bRight - pLeft - pRight; + }, + + 'padding-box-height': function(element) { + var height = this.get('height'), + pTop = this.get('padding-top'), + pBottom = this.get('padding-bottom'); + + return height + pTop + pBottom; + }, + + 'padding-box-width': function(element) { + var width = this.get('width'), + pLeft = this.get('padding-left'), + pRight = this.get('padding-right'); + + return width + pLeft + pRight; + }, + + 'border-box-height': function(element) { + if (!this._preComputing) this._begin(); + var height = element.offsetHeight; + if (!this._preComputing) this._end(); + return height; + }, + + 'border-box-width': function(element) { + if (!this._preComputing) this._begin(); + var width = element.offsetWidth; + if (!this._preComputing) this._end(); + return width; + }, + + 'margin-box-height': function(element) { + var bHeight = this.get('border-box-height'), + mTop = this.get('margin-top'), + mBottom = this.get('margin-bottom'); + + if (bHeight <= 0) return 0; + + return bHeight + mTop + mBottom; + }, + + 'margin-box-width': function(element) { + var bWidth = this.get('border-box-width'), + mLeft = this.get('margin-left'), + mRight = this.get('margin-right'); + + if (bWidth <= 0) return 0; + + return bWidth + mLeft + mRight; + }, + + 'top': function(element) { + var offset = element.positionedOffset(); + return offset.top; + }, + + 'bottom': function(element) { + var offset = element.positionedOffset(), + parent = element.getOffsetParent(), + pHeight = parent.measure('height'); + + var mHeight = this.get('border-box-height'); + + return pHeight - mHeight - offset.top; + }, + + 'left': function(element) { + var offset = element.positionedOffset(); + return offset.left; + }, + + 'right': function(element) { + var offset = element.positionedOffset(), + parent = element.getOffsetParent(), + pWidth = parent.measure('width'); + + var mWidth = this.get('border-box-width'); + + return pWidth - mWidth - offset.left; + }, + + 'padding-top': function(element) { + return getPixelValue(element, 'paddingTop'); + }, + + 'padding-bottom': function(element) { + return getPixelValue(element, 'paddingBottom'); + }, + + 'padding-left': function(element) { + return getPixelValue(element, 'paddingLeft'); + }, + + 'padding-right': function(element) { + return getPixelValue(element, 'paddingRight'); + }, + + 'border-top': function(element) { + return getPixelValue(element, 'borderTopWidth'); + }, + + 'border-bottom': function(element) { + return getPixelValue(element, 'borderBottomWidth'); + }, + + 'border-left': function(element) { + return getPixelValue(element, 'borderLeftWidth'); + }, + + 'border-right': function(element) { + return getPixelValue(element, 'borderRightWidth'); + }, + + 'margin-top': function(element) { + return getPixelValue(element, 'marginTop'); + }, + + 'margin-bottom': function(element) { + return getPixelValue(element, 'marginBottom'); + }, + + 'margin-left': function(element) { + return getPixelValue(element, 'marginLeft'); + }, + + 'margin-right': function(element) { + return getPixelValue(element, 'marginRight'); + } + } + }); + + if ('getBoundingClientRect' in document.documentElement) { + Object.extend(Element.Layout.COMPUTATIONS, { + 'right': function(element) { + var parent = hasLayout(element.getOffsetParent()); + var rect = element.getBoundingClientRect(), + pRect = parent.getBoundingClientRect(); + + return (pRect.right - rect.right).round(); + }, + + 'bottom': function(element) { + var parent = hasLayout(element.getOffsetParent()); + var rect = element.getBoundingClientRect(), + pRect = parent.getBoundingClientRect(); + + return (pRect.bottom - rect.bottom).round(); + } + }); + } + + Element.Offset = Class.create({ + initialize: function(left, top) { + this.left = left.round(); + this.top = top.round(); + + this[0] = this.left; + this[1] = this.top; + }, + + relativeTo: function(offset) { + return new Element.Offset( + this.left - offset.left, + this.top - offset.top + ); + }, + + inspect: function() { + return "#".interpolate(this); + }, + + toString: function() { + return "[#{left}, #{top}]".interpolate(this); + }, + + toArray: function() { + return [this.left, this.top]; + } + }); + + function getLayout(element, preCompute) { + return new Element.Layout(element, preCompute); + } + + function measure(element, property) { + return $(element).getLayout().get(property); + } + + function getHeight(element) { + return Element.getDimensions(element).height; + } + + function getWidth(element) { + return Element.getDimensions(element).width; + } + + function getDimensions(element) { + element = $(element); + var display = Element.getStyle(element, 'display'); + + if (display && display !== 'none') { + return { width: element.offsetWidth, height: element.offsetHeight }; + } + + var style = element.style; + var originalStyles = { + visibility: style.visibility, + position: style.position, + display: style.display + }; + + var newStyles = { + visibility: 'hidden', + display: 'block' + }; + + if (originalStyles.position !== 'fixed') + newStyles.position = 'absolute'; + + Element.setStyle(element, newStyles); + + var dimensions = { + width: element.offsetWidth, + height: element.offsetHeight + }; + + Element.setStyle(element, originalStyles); + + return dimensions; + } + + function getOffsetParent(element) { + element = $(element); + + if (isDocument(element) || isDetached(element) || isBody(element) || isHtml(element)) + return $(document.body); + + var isInline = (Element.getStyle(element, 'display') === 'inline'); + if (!isInline && element.offsetParent) return $(element.offsetParent); + + while ((element = element.parentNode) && element !== document.body) { + if (Element.getStyle(element, 'position') !== 'static') { + return isHtml(element) ? $(document.body) : $(element); + } + } + + return $(document.body); + } + + + function cumulativeOffset(element) { + element = $(element); + var valueT = 0, valueL = 0; + if (element.parentNode) { + do { + valueT += element.offsetTop || 0; + valueL += element.offsetLeft || 0; + element = element.offsetParent; + } while (element); + } + return new Element.Offset(valueL, valueT); + } + + function positionedOffset(element) { + element = $(element); + + var layout = element.getLayout(); + + var valueT = 0, valueL = 0; + do { + valueT += element.offsetTop || 0; + valueL += element.offsetLeft || 0; + element = element.offsetParent; + if (element) { + if (isBody(element)) break; + var p = Element.getStyle(element, 'position'); + if (p !== 'static') break; + } + } while (element); + + valueL -= layout.get('margin-top'); + valueT -= layout.get('margin-left'); + + return new Element.Offset(valueL, valueT); + } + + function cumulativeScrollOffset(element) { + var valueT = 0, valueL = 0; + do { + if (element === document.body) { + var bodyScrollNode = document.documentElement || document.body.parentNode || document.body; + valueT += !Object.isUndefined(window.pageYOffset) ? window.pageYOffset : bodyScrollNode.scrollTop || 0; + valueL += !Object.isUndefined(window.pageXOffset) ? window.pageXOffset : bodyScrollNode.scrollLeft || 0; + break; + } else { + valueT += element.scrollTop || 0; + valueL += element.scrollLeft || 0; + element = element.parentNode; + } + } while (element); + return new Element.Offset(valueL, valueT); + } + + function viewportOffset(forElement) { + var valueT = 0, valueL = 0, docBody = document.body; + + forElement = $(forElement); + var element = forElement; + do { + valueT += element.offsetTop || 0; + valueL += element.offsetLeft || 0; + if (element.offsetParent == docBody && + Element.getStyle(element, 'position') == 'absolute') break; + } while (element = element.offsetParent); + + element = forElement; + do { + if (element != docBody) { + valueT -= element.scrollTop || 0; + valueL -= element.scrollLeft || 0; + } + } while (element = element.parentNode); + return new Element.Offset(valueL, valueT); + } + + function absolutize(element) { + element = $(element); + + if (Element.getStyle(element, 'position') === 'absolute') { + return element; + } + + var offsetParent = getOffsetParent(element); + var eOffset = element.viewportOffset(), + pOffset = offsetParent.viewportOffset(); + + var offset = eOffset.relativeTo(pOffset); + var layout = element.getLayout(); + + element.store('prototype_absolutize_original_styles', { + position: element.getStyle('position'), + left: element.getStyle('left'), + top: element.getStyle('top'), + width: element.getStyle('width'), + height: element.getStyle('height') + }); + + element.setStyle({ + position: 'absolute', + top: offset.top + 'px', + left: offset.left + 'px', + width: layout.get('width') + 'px', + height: layout.get('height') + 'px' + }); + + return element; + } + + function relativize(element) { + element = $(element); + if (Element.getStyle(element, 'position') === 'relative') { + return element; + } + + var originalStyles = + element.retrieve('prototype_absolutize_original_styles'); + + if (originalStyles) element.setStyle(originalStyles); + return element; + } + + + function scrollTo(element) { + element = $(element); + var pos = Element.cumulativeOffset(element); + window.scrollTo(pos.left, pos.top); + return element; + } + + + function makePositioned(element) { + element = $(element); + var position = Element.getStyle(element, 'position'), styles = {}; + if (position === 'static' || !position) { + styles.position = 'relative'; + if (Prototype.Browser.Opera) { + styles.top = 0; + styles.left = 0; + } + Element.setStyle(element, styles); + Element.store(element, 'prototype_made_positioned', true); + } + return element; + } + + function undoPositioned(element) { + element = $(element); + var storage = Element.getStorage(element), + madePositioned = storage.get('prototype_made_positioned'); + + if (madePositioned) { + storage.unset('prototype_made_positioned'); + Element.setStyle(element, { + position: '', + top: '', + bottom: '', + left: '', + right: '' + }); + } + return element; + } + + function makeClipping(element) { + element = $(element); + + var storage = Element.getStorage(element), + madeClipping = storage.get('prototype_made_clipping'); + + if (Object.isUndefined(madeClipping)) { + var overflow = Element.getStyle(element, 'overflow'); + storage.set('prototype_made_clipping', overflow); + if (overflow !== 'hidden') + element.style.overflow = 'hidden'; + } + + return element; + } + + function undoClipping(element) { + element = $(element); + var storage = Element.getStorage(element), + overflow = storage.get('prototype_made_clipping'); + + if (!Object.isUndefined(overflow)) { + storage.unset('prototype_made_clipping'); + element.style.overflow = overflow || ''; + } + + return element; + } + + function clonePosition(element, source, options) { + options = Object.extend({ + setLeft: true, + setTop: true, + setWidth: true, + setHeight: true, + offsetTop: 0, + offsetLeft: 0 + }, options || {}); + + source = $(source); + element = $(element); + var p, delta, layout, styles = {}; + + if (options.setLeft || options.setTop) { + p = Element.viewportOffset(source); + delta = [0, 0]; + if (Element.getStyle(element, 'position') === 'absolute') { + var parent = Element.getOffsetParent(element); + if (parent !== document.body) delta = Element.viewportOffset(parent); + } + } + + if (options.setWidth || options.setHeight) { + layout = Element.getLayout(source); + } + + if (options.setLeft) + styles.left = (p[0] - delta[0] + options.offsetLeft) + 'px'; + if (options.setTop) + styles.top = (p[1] - delta[1] + options.offsetTop) + 'px'; + + if (options.setWidth) + styles.width = layout.get('border-box-width') + 'px'; + if (options.setHeight) + styles.height = layout.get('border-box-height') + 'px'; + + return Element.setStyle(element, styles); + } + + + if (Prototype.Browser.IE) { + getOffsetParent = getOffsetParent.wrap( + function(proceed, element) { + element = $(element); + + if (isDocument(element) || isDetached(element) || isBody(element) || isHtml(element)) + return $(document.body); + + var position = element.getStyle('position'); + if (position !== 'static') return proceed(element); + + element.setStyle({ position: 'relative' }); + var value = proceed(element); + element.setStyle({ position: position }); + return value; + } + ); + + positionedOffset = positionedOffset.wrap(function(proceed, element) { + element = $(element); + if (!element.parentNode) return new Element.Offset(0, 0); + var position = element.getStyle('position'); + if (position !== 'static') return proceed(element); + + var offsetParent = element.getOffsetParent(); + if (offsetParent && offsetParent.getStyle('position') === 'fixed') + hasLayout(offsetParent); + + element.setStyle({ position: 'relative' }); + var value = proceed(element); + element.setStyle({ position: position }); + return value; + }); + } else if (Prototype.Browser.Webkit) { + cumulativeOffset = function(element) { + element = $(element); + var valueT = 0, valueL = 0; + do { + valueT += element.offsetTop || 0; + valueL += element.offsetLeft || 0; + if (element.offsetParent == document.body) { + if (Element.getStyle(element, 'position') == 'absolute') break; + } + + element = element.offsetParent; + } while (element); + + return new Element.Offset(valueL, valueT); + }; + } + + + Element.addMethods({ + getLayout: getLayout, + measure: measure, + getWidth: getWidth, + getHeight: getHeight, + getDimensions: getDimensions, + getOffsetParent: getOffsetParent, + cumulativeOffset: cumulativeOffset, + positionedOffset: positionedOffset, + cumulativeScrollOffset: cumulativeScrollOffset, + viewportOffset: viewportOffset, + absolutize: absolutize, + relativize: relativize, + scrollTo: scrollTo, + makePositioned: makePositioned, + undoPositioned: undoPositioned, + makeClipping: makeClipping, + undoClipping: undoClipping, + clonePosition: clonePosition + }); + + function isBody(element) { + return element.nodeName.toUpperCase() === 'BODY'; + } + + function isHtml(element) { + return element.nodeName.toUpperCase() === 'HTML'; + } + + function isDocument(element) { + return element.nodeType === Node.DOCUMENT_NODE; + } + + function isDetached(element) { + return element !== document.body && + !Element.descendantOf(element, document.body); + } + + if ('getBoundingClientRect' in document.documentElement) { + Element.addMethods({ + viewportOffset: function(element) { + element = $(element); + if (isDetached(element)) return new Element.Offset(0, 0); + + var rect = element.getBoundingClientRect(), + docEl = document.documentElement; + return new Element.Offset(rect.left - docEl.clientLeft, + rect.top - docEl.clientTop); + } + }); + } + + +})(); + +(function() { + + var IS_OLD_OPERA = Prototype.Browser.Opera && + (window.parseFloat(window.opera.version()) < 9.5); + var ROOT = null; + function getRootElement() { + if (ROOT) return ROOT; + ROOT = IS_OLD_OPERA ? document.body : document.documentElement; + return ROOT; + } + + function getDimensions() { + return { width: this.getWidth(), height: this.getHeight() }; + } + + function getWidth() { + return getRootElement().clientWidth; + } + + function getHeight() { + return getRootElement().clientHeight; + } + + function getScrollOffsets() { + var x = window.pageXOffset || document.documentElement.scrollLeft || + document.body.scrollLeft; + var y = window.pageYOffset || document.documentElement.scrollTop || + document.body.scrollTop; + + return new Element.Offset(x, y); + } + + document.viewport = { + getDimensions: getDimensions, + getWidth: getWidth, + getHeight: getHeight, + getScrollOffsets: getScrollOffsets + }; + +})(); +window.$$ = function() { + var expression = $A(arguments).join(', '); + return Prototype.Selector.select(expression, document); +}; + +Prototype.Selector = (function() { + + function select() { + throw new Error('Method "Prototype.Selector.select" must be defined.'); + } + + function match() { + throw new Error('Method "Prototype.Selector.match" must be defined.'); + } + + function find(elements, expression, index) { + index = index || 0; + var match = Prototype.Selector.match, length = elements.length, matchIndex = 0, i; + + for (i = 0; i < length; i++) { + if (match(elements[i], expression) && index == matchIndex++) { + return Element.extend(elements[i]); + } + } + } + + function extendElements(elements) { + for (var i = 0, length = elements.length; i < length; i++) { + Element.extend(elements[i]); + } + return elements; + } + + + var K = Prototype.K; + + return { + select: select, + match: match, + find: find, + extendElements: (Element.extend === K) ? K : extendElements, + extendElement: Element.extend + }; +})(); +Prototype._original_property = window.Sizzle; +/*! + * Sizzle CSS Selector Engine v@VERSION + * http://sizzlejs.com/ + * + * Copyright 2013 jQuery Foundation, Inc. and other contributors + * Released under the MIT license + * http://jquery.org/license + * + * Date: @DATE + */ +(function( window ) { + +var i, + support, + Expr, + getText, + isXML, + compile, + select, + outermostContext, + sortInput, + hasDuplicate, + + setDocument, + document, + docElem, + documentIsHTML, + rbuggyQSA, + rbuggyMatches, + matches, + contains, + + expando = "sizzle" + -(new Date()), + preferredDoc = window.document, + dirruns = 0, + done = 0, + classCache = createCache(), + tokenCache = createCache(), + compilerCache = createCache(), + sortOrder = function( a, b ) { + if ( a === b ) { + hasDuplicate = true; + } + return 0; + }, + + strundefined = typeof undefined, + MAX_NEGATIVE = 1 << 31, + + hasOwn = ({}).hasOwnProperty, + arr = [], + pop = arr.pop, + push_native = arr.push, + push = arr.push, + slice = arr.slice, + indexOf = arr.indexOf || function( elem ) { + var i = 0, + len = this.length; + for ( ; i < len; i++ ) { + if ( this[i] === elem ) { + return i; + } + } + return -1; + }, + + booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped", + + + whitespace = "[\\x20\\t\\r\\n\\f]", + characterEncoding = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+", + + identifier = characterEncoding.replace( "w", "w#" ), + + attributes = "\\[" + whitespace + "*(" + characterEncoding + ")" + whitespace + + "*(?:([*^$|!~]?=)" + whitespace + "*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|(" + identifier + ")|)|)" + whitespace + "*\\]", + + pseudos = ":(" + characterEncoding + ")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|" + attributes.replace( 3, 8 ) + ")*)|.*)\\)|)", + + rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ), + + rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), + rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ), + + rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]", "g" ), + + rpseudo = new RegExp( pseudos ), + ridentifier = new RegExp( "^" + identifier + "$" ), + + matchExpr = { + "ID": new RegExp( "^#(" + characterEncoding + ")" ), + "CLASS": new RegExp( "^\\.(" + characterEncoding + ")" ), + "TAG": new RegExp( "^(" + characterEncoding.replace( "w", "w*" ) + ")" ), + "ATTR": new RegExp( "^" + attributes ), + "PSEUDO": new RegExp( "^" + pseudos ), + "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace + + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace + + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), + "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), + "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + + whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) + }, + + rinputs = /^(?:input|select|textarea|button)$/i, + rheader = /^h\d$/i, + + rnative = /^[^{]+\{\s*\[native \w/, + + rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, + + rsibling = /[+~]/, + rescape = /'|\\/g, + + runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ), + funescape = function( _, escaped, escapedWhitespace ) { + var high = "0x" + escaped - 0x10000; + return high !== high || escapedWhitespace ? + escaped : + high < 0 ? + String.fromCharCode( high + 0x10000 ) : + String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); + }; + +try { + push.apply( + (arr = slice.call( preferredDoc.childNodes )), + preferredDoc.childNodes + ); + arr[ preferredDoc.childNodes.length ].nodeType; +} catch ( e ) { + push = { apply: arr.length ? + + function( target, els ) { + push_native.apply( target, slice.call(els) ); + } : + + function( target, els ) { + var j = target.length, + i = 0; + while ( (target[j++] = els[i++]) ) {} + target.length = j - 1; + } + }; +} + +function Sizzle( selector, context, results, seed ) { + var match, elem, m, nodeType, + i, groups, old, nid, newContext, newSelector; + + if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) { + setDocument( context ); + } + + context = context || document; + results = results || []; + + if ( !selector || typeof selector !== "string" ) { + return results; + } + + if ( (nodeType = context.nodeType) !== 1 && nodeType !== 9 ) { + return []; + } + + if ( documentIsHTML && !seed ) { + + if ( (match = rquickExpr.exec( selector )) ) { + if ( (m = match[1]) ) { + if ( nodeType === 9 ) { + elem = context.getElementById( m ); + if ( elem && elem.parentNode ) { + if ( elem.id === m ) { + results.push( elem ); + return results; + } + } else { + return results; + } + } else { + if ( context.ownerDocument && (elem = context.ownerDocument.getElementById( m )) && + contains( context, elem ) && elem.id === m ) { + results.push( elem ); + return results; + } + } + + } else if ( match[2] ) { + push.apply( results, context.getElementsByTagName( selector ) ); + return results; + + } else if ( (m = match[3]) && support.getElementsByClassName && context.getElementsByClassName ) { + push.apply( results, context.getElementsByClassName( m ) ); + return results; + } + } + + if ( support.qsa && (!rbuggyQSA || !rbuggyQSA.test( selector )) ) { + nid = old = expando; + newContext = context; + newSelector = nodeType === 9 && selector; + + if ( nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) { + groups = tokenize( selector ); + + if ( (old = context.getAttribute("id")) ) { + nid = old.replace( rescape, "\\$&" ); + } else { + context.setAttribute( "id", nid ); + } + nid = "[id='" + nid + "'] "; + + i = groups.length; + while ( i-- ) { + groups[i] = nid + toSelector( groups[i] ); + } + newContext = rsibling.test( selector ) && testContext( context.parentNode ) || context; + newSelector = groups.join(","); + } + + if ( newSelector ) { + try { + push.apply( results, + newContext.querySelectorAll( newSelector ) + ); + return results; + } catch(qsaError) { + } finally { + if ( !old ) { + context.removeAttribute("id"); + } + } + } + } + } + + return select( selector.replace( rtrim, "$1" ), context, results, seed ); +} + +/** + * Create key-value caches of limited size + * @returns {Function(string, Object)} Returns the Object data after storing it on itself with + * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) + * deleting the oldest entry + */ +function createCache() { + var keys = []; + + function cache( key, value ) { + if ( keys.push( key + " " ) > Expr.cacheLength ) { + delete cache[ keys.shift() ]; + } + return (cache[ key + " " ] = value); + } + return cache; +} + +/** + * Mark a function for special use by Sizzle + * @param {Function} fn The function to mark + */ +function markFunction( fn ) { + fn[ expando ] = true; + return fn; +} + +/** + * Support testing using an element + * @param {Function} fn Passed the created div and expects a boolean result + */ +function assert( fn ) { + var div = document.createElement("div"); + + try { + return !!fn( div ); + } catch (e) { + return false; + } finally { + if ( div.parentNode ) { + div.parentNode.removeChild( div ); + } + div = null; + } +} + +/** + * Adds the same handler for all of the specified attrs + * @param {String} attrs Pipe-separated list of attributes + * @param {Function} handler The method that will be applied + */ +function addHandle( attrs, handler ) { + var arr = attrs.split("|"), + i = attrs.length; + + while ( i-- ) { + Expr.attrHandle[ arr[i] ] = handler; + } +} + +/** + * Checks document order of two siblings + * @param {Element} a + * @param {Element} b + * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b + */ +function siblingCheck( a, b ) { + var cur = b && a, + diff = cur && a.nodeType === 1 && b.nodeType === 1 && + ( ~b.sourceIndex || MAX_NEGATIVE ) - + ( ~a.sourceIndex || MAX_NEGATIVE ); + + if ( diff ) { + return diff; + } + + if ( cur ) { + while ( (cur = cur.nextSibling) ) { + if ( cur === b ) { + return -1; + } + } + } + + return a ? 1 : -1; +} + +/** + * Returns a function to use in pseudos for input types + * @param {String} type + */ +function createInputPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for buttons + * @param {String} type + */ +function createButtonPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return (name === "input" || name === "button") && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for positionals + * @param {Function} fn + */ +function createPositionalPseudo( fn ) { + return markFunction(function( argument ) { + argument = +argument; + return markFunction(function( seed, matches ) { + var j, + matchIndexes = fn( [], seed.length, argument ), + i = matchIndexes.length; + + while ( i-- ) { + if ( seed[ (j = matchIndexes[i]) ] ) { + seed[j] = !(matches[j] = seed[j]); + } + } + }); + }); +} + +/** + * Checks a node for validity as a Sizzle context + * @param {Element|Object=} context + * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value + */ +function testContext( context ) { + return context && typeof context.getElementsByTagName !== strundefined && context; +} + +support = Sizzle.support = {}; + +/** + * Detects XML nodes + * @param {Element|Object} elem An element or a document + * @returns {Boolean} True iff elem is a non-HTML XML node + */ +isXML = Sizzle.isXML = function( elem ) { + var documentElement = elem && (elem.ownerDocument || elem).documentElement; + return documentElement ? documentElement.nodeName !== "HTML" : false; +}; + +/** + * Sets document-related variables once based on the current document + * @param {Element|Object} [doc] An element or document object to use to set the document + * @returns {Object} Returns the current document + */ +setDocument = Sizzle.setDocument = function( node ) { + var hasCompare, + doc = node ? node.ownerDocument || node : preferredDoc, + parent = doc.defaultView; + + if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) { + return document; + } + + document = doc; + docElem = doc.documentElement; + + documentIsHTML = !isXML( doc ); + + if ( parent && parent !== parent.top ) { + if ( parent.addEventListener ) { + parent.addEventListener( "unload", function() { + setDocument(); + }, false ); + } else if ( parent.attachEvent ) { + parent.attachEvent( "onunload", function() { + setDocument(); + }); + } + } + + /* Attributes + ---------------------------------------------------------------------- */ + + support.attributes = assert(function( div ) { + div.className = "i"; + return !div.getAttribute("className"); + }); + + /* getElement(s)By* + ---------------------------------------------------------------------- */ + + support.getElementsByTagName = assert(function( div ) { + div.appendChild( doc.createComment("") ); + return !div.getElementsByTagName("*").length; + }); + + support.getElementsByClassName = rnative.test( doc.getElementsByClassName ) && assert(function( div ) { + div.innerHTML = "
    "; + + div.firstChild.className = "i"; + return div.getElementsByClassName("i").length === 2; + }); + + support.getById = assert(function( div ) { + docElem.appendChild( div ).id = expando; + return !doc.getElementsByName || !doc.getElementsByName( expando ).length; + }); + + if ( support.getById ) { + Expr.find["ID"] = function( id, context ) { + if ( typeof context.getElementById !== strundefined && documentIsHTML ) { + var m = context.getElementById( id ); + return m && m.parentNode ? [m] : []; + } + }; + Expr.filter["ID"] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + return elem.getAttribute("id") === attrId; + }; + }; + } else { + delete Expr.find["ID"]; + + Expr.filter["ID"] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + var node = typeof elem.getAttributeNode !== strundefined && elem.getAttributeNode("id"); + return node && node.value === attrId; + }; + }; + } + + Expr.find["TAG"] = support.getElementsByTagName ? + function( tag, context ) { + if ( typeof context.getElementsByTagName !== strundefined ) { + return context.getElementsByTagName( tag ); + } + } : + function( tag, context ) { + var elem, + tmp = [], + i = 0, + results = context.getElementsByTagName( tag ); + + if ( tag === "*" ) { + while ( (elem = results[i++]) ) { + if ( elem.nodeType === 1 ) { + tmp.push( elem ); + } + } + + return tmp; + } + return results; + }; + + Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) { + if ( typeof context.getElementsByClassName !== strundefined && documentIsHTML ) { + return context.getElementsByClassName( className ); + } + }; + + /* QSA/matchesSelector + ---------------------------------------------------------------------- */ + + + rbuggyMatches = []; + + rbuggyQSA = []; + + if ( (support.qsa = rnative.test( doc.querySelectorAll )) ) { + assert(function( div ) { + div.innerHTML = ""; + + if ( div.querySelectorAll("[t^='']").length ) { + rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); + } + + if ( !div.querySelectorAll("[selected]").length ) { + rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); + } + + if ( !div.querySelectorAll(":checked").length ) { + rbuggyQSA.push(":checked"); + } + }); + + assert(function( div ) { + var input = doc.createElement("input"); + input.setAttribute( "type", "hidden" ); + div.appendChild( input ).setAttribute( "name", "D" ); + + if ( div.querySelectorAll("[name=d]").length ) { + rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" ); + } + + if ( !div.querySelectorAll(":enabled").length ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + div.querySelectorAll("*,:x"); + rbuggyQSA.push(",.*:"); + }); + } + + if ( (support.matchesSelector = rnative.test( (matches = docElem.webkitMatchesSelector || + docElem.mozMatchesSelector || + docElem.oMatchesSelector || + docElem.msMatchesSelector) )) ) { + + assert(function( div ) { + support.disconnectedMatch = matches.call( div, "div" ); + + matches.call( div, "[s!='']:x" ); + rbuggyMatches.push( "!=", pseudos ); + }); + } + + rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") ); + rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") ); + + /* Contains + ---------------------------------------------------------------------- */ + hasCompare = rnative.test( docElem.compareDocumentPosition ); + + contains = hasCompare || rnative.test( docElem.contains ) ? + function( a, b ) { + var adown = a.nodeType === 9 ? a.documentElement : a, + bup = b && b.parentNode; + return a === bup || !!( bup && bup.nodeType === 1 && ( + adown.contains ? + adown.contains( bup ) : + a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 + )); + } : + function( a, b ) { + if ( b ) { + while ( (b = b.parentNode) ) { + if ( b === a ) { + return true; + } + } + } + return false; + }; + + /* Sorting + ---------------------------------------------------------------------- */ + + sortOrder = hasCompare ? + function( a, b ) { + + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; + if ( compare ) { + return compare; + } + + compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ? + a.compareDocumentPosition( b ) : + + 1; + + if ( compare & 1 || + (!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) { + + if ( a === doc || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) { + return -1; + } + if ( b === doc || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) { + return 1; + } + + return sortInput ? + ( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) : + 0; + } + + return compare & 4 ? -1 : 1; + } : + function( a, b ) { + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + var cur, + i = 0, + aup = a.parentNode, + bup = b.parentNode, + ap = [ a ], + bp = [ b ]; + + if ( !aup || !bup ) { + return a === doc ? -1 : + b === doc ? 1 : + aup ? -1 : + bup ? 1 : + sortInput ? + ( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) : + 0; + + } else if ( aup === bup ) { + return siblingCheck( a, b ); + } + + cur = a; + while ( (cur = cur.parentNode) ) { + ap.unshift( cur ); + } + cur = b; + while ( (cur = cur.parentNode) ) { + bp.unshift( cur ); + } + + while ( ap[i] === bp[i] ) { + i++; + } + + return i ? + siblingCheck( ap[i], bp[i] ) : + + ap[i] === preferredDoc ? -1 : + bp[i] === preferredDoc ? 1 : + 0; + }; + + return doc; +}; + +Sizzle.matches = function( expr, elements ) { + return Sizzle( expr, null, null, elements ); +}; + +Sizzle.matchesSelector = function( elem, expr ) { + if ( ( elem.ownerDocument || elem ) !== document ) { + setDocument( elem ); + } + + expr = expr.replace( rattributeQuotes, "='$1']" ); + + if ( support.matchesSelector && documentIsHTML && + ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) && + ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { + + try { + var ret = matches.call( elem, expr ); + + if ( ret || support.disconnectedMatch || + elem.document && elem.document.nodeType !== 11 ) { + return ret; + } + } catch(e) {} + } + + return Sizzle( expr, document, null, [elem] ).length > 0; +}; + +Sizzle.contains = function( context, elem ) { + if ( ( context.ownerDocument || context ) !== document ) { + setDocument( context ); + } + return contains( context, elem ); +}; + +Sizzle.attr = function( elem, name ) { + if ( ( elem.ownerDocument || elem ) !== document ) { + setDocument( elem ); + } + + var fn = Expr.attrHandle[ name.toLowerCase() ], + val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? + fn( elem, name, !documentIsHTML ) : + undefined; + + return val !== undefined ? + val : + support.attributes || !documentIsHTML ? + elem.getAttribute( name ) : + (val = elem.getAttributeNode(name)) && val.specified ? + val.value : + null; +}; + +Sizzle.error = function( msg ) { + throw new Error( "Syntax error, unrecognized expression: " + msg ); +}; + +/** + * Document sorting and removing duplicates + * @param {ArrayLike} results + */ +Sizzle.uniqueSort = function( results ) { + var elem, + duplicates = [], + j = 0, + i = 0; + + hasDuplicate = !support.detectDuplicates; + sortInput = !support.sortStable && results.slice( 0 ); + results.sort( sortOrder ); + + if ( hasDuplicate ) { + while ( (elem = results[i++]) ) { + if ( elem === results[ i ] ) { + j = duplicates.push( i ); + } + } + while ( j-- ) { + results.splice( duplicates[ j ], 1 ); + } + } + + sortInput = null; + + return results; +}; + +/** + * Utility function for retrieving the text value of an array of DOM nodes + * @param {Array|Element} elem + */ +getText = Sizzle.getText = function( elem ) { + var node, + ret = "", + i = 0, + nodeType = elem.nodeType; + + if ( !nodeType ) { + while ( (node = elem[i++]) ) { + ret += getText( node ); + } + } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { + if ( typeof elem.textContent === "string" ) { + return elem.textContent; + } else { + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + ret += getText( elem ); + } + } + } else if ( nodeType === 3 || nodeType === 4 ) { + return elem.nodeValue; + } + + return ret; +}; + +Expr = Sizzle.selectors = { + + cacheLength: 50, + + createPseudo: markFunction, + + match: matchExpr, + + attrHandle: {}, + + find: {}, + + relative: { + ">": { dir: "parentNode", first: true }, + " ": { dir: "parentNode" }, + "+": { dir: "previousSibling", first: true }, + "~": { dir: "previousSibling" } + }, + + preFilter: { + "ATTR": function( match ) { + match[1] = match[1].replace( runescape, funescape ); + + match[3] = ( match[4] || match[5] || "" ).replace( runescape, funescape ); + + if ( match[2] === "~=" ) { + match[3] = " " + match[3] + " "; + } + + return match.slice( 0, 4 ); + }, + + "CHILD": function( match ) { + /* matches from matchExpr["CHILD"] + 1 type (only|nth|...) + 2 what (child|of-type) + 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) + 4 xn-component of xn+y argument ([+-]?\d*n|) + 5 sign of xn-component + 6 x of xn-component + 7 sign of y-component + 8 y of y-component + */ + match[1] = match[1].toLowerCase(); + + if ( match[1].slice( 0, 3 ) === "nth" ) { + if ( !match[3] ) { + Sizzle.error( match[0] ); + } + + match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) ); + match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" ); + + } else if ( match[3] ) { + Sizzle.error( match[0] ); + } + + return match; + }, + + "PSEUDO": function( match ) { + var excess, + unquoted = !match[5] && match[2]; + + if ( matchExpr["CHILD"].test( match[0] ) ) { + return null; + } + + if ( match[3] && match[4] !== undefined ) { + match[2] = match[4]; + + } else if ( unquoted && rpseudo.test( unquoted ) && + (excess = tokenize( unquoted, true )) && + (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) { + + match[0] = match[0].slice( 0, excess ); + match[2] = unquoted.slice( 0, excess ); + } + + return match.slice( 0, 3 ); + } + }, + + filter: { + + "TAG": function( nodeNameSelector ) { + var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); + return nodeNameSelector === "*" ? + function() { return true; } : + function( elem ) { + return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; + }; + }, + + "CLASS": function( className ) { + var pattern = classCache[ className + " " ]; + + return pattern || + (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) && + classCache( className, function( elem ) { + return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== strundefined && elem.getAttribute("class") || "" ); + }); + }, + + "ATTR": function( name, operator, check ) { + return function( elem ) { + var result = Sizzle.attr( elem, name ); + + if ( result == null ) { + return operator === "!="; + } + if ( !operator ) { + return true; + } + + result += ""; + + return operator === "=" ? result === check : + operator === "!=" ? result !== check : + operator === "^=" ? check && result.indexOf( check ) === 0 : + operator === "*=" ? check && result.indexOf( check ) > -1 : + operator === "$=" ? check && result.slice( -check.length ) === check : + operator === "~=" ? ( " " + result + " " ).indexOf( check ) > -1 : + operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : + false; + }; + }, + + "CHILD": function( type, what, argument, first, last ) { + var simple = type.slice( 0, 3 ) !== "nth", + forward = type.slice( -4 ) !== "last", + ofType = what === "of-type"; + + return first === 1 && last === 0 ? + + function( elem ) { + return !!elem.parentNode; + } : + + function( elem, context, xml ) { + var cache, outerCache, node, diff, nodeIndex, start, + dir = simple !== forward ? "nextSibling" : "previousSibling", + parent = elem.parentNode, + name = ofType && elem.nodeName.toLowerCase(), + useCache = !xml && !ofType; + + if ( parent ) { + + if ( simple ) { + while ( dir ) { + node = elem; + while ( (node = node[ dir ]) ) { + if ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) { + return false; + } + } + start = dir = type === "only" && !start && "nextSibling"; + } + return true; + } + + start = [ forward ? parent.firstChild : parent.lastChild ]; + + if ( forward && useCache ) { + outerCache = parent[ expando ] || (parent[ expando ] = {}); + cache = outerCache[ type ] || []; + nodeIndex = cache[0] === dirruns && cache[1]; + diff = cache[0] === dirruns && cache[2]; + node = nodeIndex && parent.childNodes[ nodeIndex ]; + + while ( (node = ++nodeIndex && node && node[ dir ] || + + (diff = nodeIndex = 0) || start.pop()) ) { + + if ( node.nodeType === 1 && ++diff && node === elem ) { + outerCache[ type ] = [ dirruns, nodeIndex, diff ]; + break; + } + } + + } else if ( useCache && (cache = (elem[ expando ] || (elem[ expando ] = {}))[ type ]) && cache[0] === dirruns ) { + diff = cache[1]; + + } else { + while ( (node = ++nodeIndex && node && node[ dir ] || + (diff = nodeIndex = 0) || start.pop()) ) { + + if ( ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) && ++diff ) { + if ( useCache ) { + (node[ expando ] || (node[ expando ] = {}))[ type ] = [ dirruns, diff ]; + } + + if ( node === elem ) { + break; + } + } + } + } + + diff -= last; + return diff === first || ( diff % first === 0 && diff / first >= 0 ); + } + }; + }, + + "PSEUDO": function( pseudo, argument ) { + var args, + fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || + Sizzle.error( "unsupported pseudo: " + pseudo ); + + if ( fn[ expando ] ) { + return fn( argument ); + } + + if ( fn.length > 1 ) { + args = [ pseudo, pseudo, "", argument ]; + return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? + markFunction(function( seed, matches ) { + var idx, + matched = fn( seed, argument ), + i = matched.length; + while ( i-- ) { + idx = indexOf.call( seed, matched[i] ); + seed[ idx ] = !( matches[ idx ] = matched[i] ); + } + }) : + function( elem ) { + return fn( elem, 0, args ); + }; + } + + return fn; + } + }, + + pseudos: { + "not": markFunction(function( selector ) { + var input = [], + results = [], + matcher = compile( selector.replace( rtrim, "$1" ) ); + + return matcher[ expando ] ? + markFunction(function( seed, matches, context, xml ) { + var elem, + unmatched = matcher( seed, null, xml, [] ), + i = seed.length; + + while ( i-- ) { + if ( (elem = unmatched[i]) ) { + seed[i] = !(matches[i] = elem); + } + } + }) : + function( elem, context, xml ) { + input[0] = elem; + matcher( input, null, xml, results ); + return !results.pop(); + }; + }), + + "has": markFunction(function( selector ) { + return function( elem ) { + return Sizzle( selector, elem ).length > 0; + }; + }), + + "contains": markFunction(function( text ) { + return function( elem ) { + return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1; + }; + }), + + "lang": markFunction( function( lang ) { + if ( !ridentifier.test(lang || "") ) { + Sizzle.error( "unsupported lang: " + lang ); + } + lang = lang.replace( runescape, funescape ).toLowerCase(); + return function( elem ) { + var elemLang; + do { + if ( (elemLang = documentIsHTML ? + elem.lang : + elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) { + + elemLang = elemLang.toLowerCase(); + return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; + } + } while ( (elem = elem.parentNode) && elem.nodeType === 1 ); + return false; + }; + }), + + "target": function( elem ) { + var hash = window.location && window.location.hash; + return hash && hash.slice( 1 ) === elem.id; + }, + + "root": function( elem ) { + return elem === docElem; + }, + + "focus": function( elem ) { + return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex); + }, + + "enabled": function( elem ) { + return elem.disabled === false; + }, + + "disabled": function( elem ) { + return elem.disabled === true; + }, + + "checked": function( elem ) { + var nodeName = elem.nodeName.toLowerCase(); + return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected); + }, + + "selected": function( elem ) { + if ( elem.parentNode ) { + elem.parentNode.selectedIndex; + } + + return elem.selected === true; + }, + + "empty": function( elem ) { + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + if ( elem.nodeType < 6 ) { + return false; + } + } + return true; + }, + + "parent": function( elem ) { + return !Expr.pseudos["empty"]( elem ); + }, + + "header": function( elem ) { + return rheader.test( elem.nodeName ); + }, + + "input": function( elem ) { + return rinputs.test( elem.nodeName ); + }, + + "button": function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === "button" || name === "button"; + }, + + "text": function( elem ) { + var attr; + return elem.nodeName.toLowerCase() === "input" && + elem.type === "text" && + + ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" ); + }, + + "first": createPositionalPseudo(function() { + return [ 0 ]; + }), + + "last": createPositionalPseudo(function( matchIndexes, length ) { + return [ length - 1 ]; + }), + + "eq": createPositionalPseudo(function( matchIndexes, length, argument ) { + return [ argument < 0 ? argument + length : argument ]; + }), + + "even": createPositionalPseudo(function( matchIndexes, length ) { + var i = 0; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "odd": createPositionalPseudo(function( matchIndexes, length ) { + var i = 1; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "lt": createPositionalPseudo(function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; --i >= 0; ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "gt": createPositionalPseudo(function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; ++i < length; ) { + matchIndexes.push( i ); + } + return matchIndexes; + }) + } +}; + +Expr.pseudos["nth"] = Expr.pseudos["eq"]; + +for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { + Expr.pseudos[ i ] = createInputPseudo( i ); +} +for ( i in { submit: true, reset: true } ) { + Expr.pseudos[ i ] = createButtonPseudo( i ); +} + +function setFilters() {} +setFilters.prototype = Expr.filters = Expr.pseudos; +Expr.setFilters = new setFilters(); + +function tokenize( selector, parseOnly ) { + var matched, match, tokens, type, + soFar, groups, preFilters, + cached = tokenCache[ selector + " " ]; + + if ( cached ) { + return parseOnly ? 0 : cached.slice( 0 ); + } + + soFar = selector; + groups = []; + preFilters = Expr.preFilter; + + while ( soFar ) { + + if ( !matched || (match = rcomma.exec( soFar )) ) { + if ( match ) { + soFar = soFar.slice( match[0].length ) || soFar; + } + groups.push( (tokens = []) ); + } + + matched = false; + + if ( (match = rcombinators.exec( soFar )) ) { + matched = match.shift(); + tokens.push({ + value: matched, + type: match[0].replace( rtrim, " " ) + }); + soFar = soFar.slice( matched.length ); + } + + for ( type in Expr.filter ) { + if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] || + (match = preFilters[ type ]( match ))) ) { + matched = match.shift(); + tokens.push({ + value: matched, + type: type, + matches: match + }); + soFar = soFar.slice( matched.length ); + } + } + + if ( !matched ) { + break; + } + } + + return parseOnly ? + soFar.length : + soFar ? + Sizzle.error( selector ) : + tokenCache( selector, groups ).slice( 0 ); +} + +function toSelector( tokens ) { + var i = 0, + len = tokens.length, + selector = ""; + for ( ; i < len; i++ ) { + selector += tokens[i].value; + } + return selector; +} + +function addCombinator( matcher, combinator, base ) { + var dir = combinator.dir, + checkNonElements = base && dir === "parentNode", + doneName = done++; + + return combinator.first ? + function( elem, context, xml ) { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + return matcher( elem, context, xml ); + } + } + } : + + function( elem, context, xml ) { + var oldCache, outerCache, + newCache = [ dirruns, doneName ]; + + if ( xml ) { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + if ( matcher( elem, context, xml ) ) { + return true; + } + } + } + } else { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + outerCache = elem[ expando ] || (elem[ expando ] = {}); + if ( (oldCache = outerCache[ dir ]) && + oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { + + return (newCache[ 2 ] = oldCache[ 2 ]); + } else { + outerCache[ dir ] = newCache; + + if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) { + return true; + } + } + } + } + } + }; +} + +function elementMatcher( matchers ) { + return matchers.length > 1 ? + function( elem, context, xml ) { + var i = matchers.length; + while ( i-- ) { + if ( !matchers[i]( elem, context, xml ) ) { + return false; + } + } + return true; + } : + matchers[0]; +} + +function multipleContexts( selector, contexts, results ) { + var i = 0, + len = contexts.length; + for ( ; i < len; i++ ) { + Sizzle( selector, contexts[i], results ); + } + return results; +} + +function condense( unmatched, map, filter, context, xml ) { + var elem, + newUnmatched = [], + i = 0, + len = unmatched.length, + mapped = map != null; + + for ( ; i < len; i++ ) { + if ( (elem = unmatched[i]) ) { + if ( !filter || filter( elem, context, xml ) ) { + newUnmatched.push( elem ); + if ( mapped ) { + map.push( i ); + } + } + } + } + + return newUnmatched; +} + +function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { + if ( postFilter && !postFilter[ expando ] ) { + postFilter = setMatcher( postFilter ); + } + if ( postFinder && !postFinder[ expando ] ) { + postFinder = setMatcher( postFinder, postSelector ); + } + return markFunction(function( seed, results, context, xml ) { + var temp, i, elem, + preMap = [], + postMap = [], + preexisting = results.length, + + elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ), + + matcherIn = preFilter && ( seed || !selector ) ? + condense( elems, preMap, preFilter, context, xml ) : + elems, + + matcherOut = matcher ? + postFinder || ( seed ? preFilter : preexisting || postFilter ) ? + + [] : + + results : + matcherIn; + + if ( matcher ) { + matcher( matcherIn, matcherOut, context, xml ); + } + + if ( postFilter ) { + temp = condense( matcherOut, postMap ); + postFilter( temp, [], context, xml ); + + i = temp.length; + while ( i-- ) { + if ( (elem = temp[i]) ) { + matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem); + } + } + } + + if ( seed ) { + if ( postFinder || preFilter ) { + if ( postFinder ) { + temp = []; + i = matcherOut.length; + while ( i-- ) { + if ( (elem = matcherOut[i]) ) { + temp.push( (matcherIn[i] = elem) ); + } + } + postFinder( null, (matcherOut = []), temp, xml ); + } + + i = matcherOut.length; + while ( i-- ) { + if ( (elem = matcherOut[i]) && + (temp = postFinder ? indexOf.call( seed, elem ) : preMap[i]) > -1 ) { + + seed[temp] = !(results[temp] = elem); + } + } + } + + } else { + matcherOut = condense( + matcherOut === results ? + matcherOut.splice( preexisting, matcherOut.length ) : + matcherOut + ); + if ( postFinder ) { + postFinder( null, results, matcherOut, xml ); + } else { + push.apply( results, matcherOut ); + } + } + }); +} + +function matcherFromTokens( tokens ) { + var checkContext, matcher, j, + len = tokens.length, + leadingRelative = Expr.relative[ tokens[0].type ], + implicitRelative = leadingRelative || Expr.relative[" "], + i = leadingRelative ? 1 : 0, + + matchContext = addCombinator( function( elem ) { + return elem === checkContext; + }, implicitRelative, true ), + matchAnyContext = addCombinator( function( elem ) { + return indexOf.call( checkContext, elem ) > -1; + }, implicitRelative, true ), + matchers = [ function( elem, context, xml ) { + return ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( + (checkContext = context).nodeType ? + matchContext( elem, context, xml ) : + matchAnyContext( elem, context, xml ) ); + } ]; + + for ( ; i < len; i++ ) { + if ( (matcher = Expr.relative[ tokens[i].type ]) ) { + matchers = [ addCombinator(elementMatcher( matchers ), matcher) ]; + } else { + matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches ); + + if ( matcher[ expando ] ) { + j = ++i; + for ( ; j < len; j++ ) { + if ( Expr.relative[ tokens[j].type ] ) { + break; + } + } + return setMatcher( + i > 1 && elementMatcher( matchers ), + i > 1 && toSelector( + tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" }) + ).replace( rtrim, "$1" ), + matcher, + i < j && matcherFromTokens( tokens.slice( i, j ) ), + j < len && matcherFromTokens( (tokens = tokens.slice( j )) ), + j < len && toSelector( tokens ) + ); + } + matchers.push( matcher ); + } + } + + return elementMatcher( matchers ); +} + +function matcherFromGroupMatchers( elementMatchers, setMatchers ) { + var bySet = setMatchers.length > 0, + byElement = elementMatchers.length > 0, + superMatcher = function( seed, context, xml, results, outermost ) { + var elem, j, matcher, + matchedCount = 0, + i = "0", + unmatched = seed && [], + setMatched = [], + contextBackup = outermostContext, + elems = seed || byElement && Expr.find["TAG"]( "*", outermost ), + dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1), + len = elems.length; + + if ( outermost ) { + outermostContext = context !== document && context; + } + + for ( ; i !== len && (elem = elems[i]) != null; i++ ) { + if ( byElement && elem ) { + j = 0; + while ( (matcher = elementMatchers[j++]) ) { + if ( matcher( elem, context, xml ) ) { + results.push( elem ); + break; + } + } + if ( outermost ) { + dirruns = dirrunsUnique; + } + } + + if ( bySet ) { + if ( (elem = !matcher && elem) ) { + matchedCount--; + } + + if ( seed ) { + unmatched.push( elem ); + } + } + } + + matchedCount += i; + if ( bySet && i !== matchedCount ) { + j = 0; + while ( (matcher = setMatchers[j++]) ) { + matcher( unmatched, setMatched, context, xml ); + } + + if ( seed ) { + if ( matchedCount > 0 ) { + while ( i-- ) { + if ( !(unmatched[i] || setMatched[i]) ) { + setMatched[i] = pop.call( results ); + } + } + } + + setMatched = condense( setMatched ); + } + + push.apply( results, setMatched ); + + if ( outermost && !seed && setMatched.length > 0 && + ( matchedCount + setMatchers.length ) > 1 ) { + + Sizzle.uniqueSort( results ); + } + } + + if ( outermost ) { + dirruns = dirrunsUnique; + outermostContext = contextBackup; + } + + return unmatched; + }; + + return bySet ? + markFunction( superMatcher ) : + superMatcher; +} + +compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) { + var i, + setMatchers = [], + elementMatchers = [], + cached = compilerCache[ selector + " " ]; + + if ( !cached ) { + if ( !match ) { + match = tokenize( selector ); + } + i = match.length; + while ( i-- ) { + cached = matcherFromTokens( match[i] ); + if ( cached[ expando ] ) { + setMatchers.push( cached ); + } else { + elementMatchers.push( cached ); + } + } + + cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) ); + + cached.selector = selector; + } + return cached; +}; + +/** + * A low-level selection function that works with Sizzle's compiled + * selector functions + * @param {String|Function} selector A selector or a pre-compiled + * selector function built with Sizzle.compile + * @param {Element} context + * @param {Array} [results] + * @param {Array} [seed] A set of elements to match against + */ +select = Sizzle.select = function( selector, context, results, seed ) { + var i, tokens, token, type, find, + compiled = typeof selector === "function" && selector, + match = !seed && tokenize( (selector = compiled.selector || selector) ); + + results = results || []; + + if ( match.length === 1 ) { + + tokens = match[0] = match[0].slice( 0 ); + if ( tokens.length > 2 && (token = tokens[0]).type === "ID" && + support.getById && context.nodeType === 9 && documentIsHTML && + Expr.relative[ tokens[1].type ] ) { + + context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0]; + if ( !context ) { + return results; + + } else if ( compiled ) { + context = context.parentNode; + } + + selector = selector.slice( tokens.shift().value.length ); + } + + i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length; + while ( i-- ) { + token = tokens[i]; + + if ( Expr.relative[ (type = token.type) ] ) { + break; + } + if ( (find = Expr.find[ type ]) ) { + if ( (seed = find( + token.matches[0].replace( runescape, funescape ), + rsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context + )) ) { + + tokens.splice( i, 1 ); + selector = seed.length && toSelector( tokens ); + if ( !selector ) { + push.apply( results, seed ); + return results; + } + + break; + } + } + } + } + + ( compiled || compile( selector, match ) )( + seed, + context, + !documentIsHTML, + results, + rsibling.test( selector ) && testContext( context.parentNode ) || context + ); + return results; +}; + + +support.sortStable = expando.split("").sort( sortOrder ).join("") === expando; + +support.detectDuplicates = !!hasDuplicate; + +setDocument(); + +support.sortDetached = assert(function( div1 ) { + return div1.compareDocumentPosition( document.createElement("div") ) & 1; +}); + +if ( !assert(function( div ) { + div.innerHTML = ""; + return div.firstChild.getAttribute("href") === "#" ; +}) ) { + addHandle( "type|href|height|width", function( elem, name, isXML ) { + if ( !isXML ) { + return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 ); + } + }); +} + +if ( !support.attributes || !assert(function( div ) { + div.innerHTML = ""; + div.firstChild.setAttribute( "value", "" ); + return div.firstChild.getAttribute( "value" ) === ""; +}) ) { + addHandle( "value", function( elem, name, isXML ) { + if ( !isXML && elem.nodeName.toLowerCase() === "input" ) { + return elem.defaultValue; + } + }); +} + +if ( !assert(function( div ) { + return div.getAttribute("disabled") == null; +}) ) { + addHandle( booleans, function( elem, name, isXML ) { + var val; + if ( !isXML ) { + return elem[ name ] === true ? name.toLowerCase() : + (val = elem.getAttributeNode( name )) && val.specified ? + val.value : + null; + } + }); +} + +if ( typeof define === "function" && define.amd ) { + define(function() { return Sizzle; }); +} else if ( typeof module !== "undefined" && module.exports ) { + module.exports = Sizzle; +} else { + window.Sizzle = Sizzle; +} + +})( window ); + +;(function(engine) { + var extendElements = Prototype.Selector.extendElements; + + function select(selector, scope) { + return extendElements(engine(selector, scope || document)); + } + + function match(element, selector) { + return engine.matches(selector, [element]).length == 1; + } + + Prototype.Selector.engine = engine; + Prototype.Selector.select = select; + Prototype.Selector.match = match; +})(Sizzle); + +window.Sizzle = Prototype._original_property; +delete Prototype._original_property; + +var Form = { + reset: function(form) { + form = $(form); + form.reset(); + return form; + }, + + serializeElements: function(elements, options) { + if (typeof options != 'object') options = { hash: !!options }; + else if (Object.isUndefined(options.hash)) options.hash = true; + var key, value, submitted = false, submit = options.submit, accumulator, initial; + + if (options.hash) { + initial = {}; + accumulator = function(result, key, value) { + if (key in result) { + if (!Object.isArray(result[key])) result[key] = [result[key]]; + result[key] = result[key].concat(value); + } else result[key] = value; + return result; + }; + } else { + initial = ''; + accumulator = function(result, key, values) { + if (!Object.isArray(values)) {values = [values];} + if (!values.length) {return result;} + var encodedKey = encodeURIComponent(key).gsub(/%20/, '+'); + return result + (result ? "&" : "") + values.map(function (value) { + value = value.gsub(/(\r)?\n/, '\r\n'); + value = encodeURIComponent(value); + value = value.gsub(/%20/, '+'); + return encodedKey + "=" + value; + }).join("&"); + }; + } + + return elements.inject(initial, function(result, element) { + if (!element.disabled && element.name) { + key = element.name; value = $(element).getValue(); + if (value != null && element.type != 'file' && (element.type != 'submit' || (!submitted && + submit !== false && (!submit || key == submit) && (submitted = true)))) { + result = accumulator(result, key, value); + } + } + return result; + }); + } +}; + +Form.Methods = { + serialize: function(form, options) { + return Form.serializeElements(Form.getElements(form), options); + }, + + + getElements: function(form) { + var elements = $(form).getElementsByTagName('*'); + var element, results = [], serializers = Form.Element.Serializers; + + for (var i = 0; element = elements[i]; i++) { + if (serializers[element.tagName.toLowerCase()]) + results.push(Element.extend(element)); + } + return results; + }, + + getInputs: function(form, typeName, name) { + form = $(form); + var inputs = form.getElementsByTagName('input'); + + if (!typeName && !name) return $A(inputs).map(Element.extend); + + for (var i = 0, matchingInputs = [], length = inputs.length; i < length; i++) { + var input = inputs[i]; + if ((typeName && input.type != typeName) || (name && input.name != name)) + continue; + matchingInputs.push(Element.extend(input)); + } + + return matchingInputs; + }, + + disable: function(form) { + form = $(form); + Form.getElements(form).invoke('disable'); + return form; + }, + + enable: function(form) { + form = $(form); + Form.getElements(form).invoke('enable'); + return form; + }, + + findFirstElement: function(form) { + var elements = $(form).getElements().findAll(function(element) { + return 'hidden' != element.type && !element.disabled; + }); + var firstByIndex = elements.findAll(function(element) { + return element.hasAttribute('tabIndex') && element.tabIndex >= 0; + }).sortBy(function(element) { return element.tabIndex }).first(); + + return firstByIndex ? firstByIndex : elements.find(function(element) { + return /^(?:input|select|textarea)$/i.test(element.tagName); + }); + }, + + focusFirstElement: function(form) { + form = $(form); + var element = form.findFirstElement(); + if (element) element.activate(); + return form; + }, + + request: function(form, options) { + form = $(form), options = Object.clone(options || { }); + + var params = options.parameters, action = form.readAttribute('action') || ''; + if (action.blank()) action = window.location.href; + options.parameters = form.serialize(true); + + if (params) { + if (Object.isString(params)) params = params.toQueryParams(); + Object.extend(options.parameters, params); + } + + if (form.hasAttribute('method') && !options.method) + options.method = form.method; + + return new Ajax.Request(action, options); + } +}; + +/*--------------------------------------------------------------------------*/ + + +Form.Element = { + focus: function(element) { + $(element).focus(); + return element; + }, + + select: function(element) { + $(element).select(); + return element; + } +}; + +Form.Element.Methods = { + + serialize: function(element) { + element = $(element); + if (!element.disabled && element.name) { + var value = element.getValue(); + if (value != undefined) { + var pair = { }; + pair[element.name] = value; + return Object.toQueryString(pair); + } + } + return ''; + }, + + getValue: function(element) { + element = $(element); + var method = element.tagName.toLowerCase(); + return Form.Element.Serializers[method](element); + }, + + setValue: function(element, value) { + element = $(element); + var method = element.tagName.toLowerCase(); + Form.Element.Serializers[method](element, value); + return element; + }, + + clear: function(element) { + $(element).value = ''; + return element; + }, + + present: function(element) { + return $(element).value != ''; + }, + + activate: function(element) { + element = $(element); + try { + element.focus(); + if (element.select && (element.tagName.toLowerCase() != 'input' || + !(/^(?:button|reset|submit)$/i.test(element.type)))) + element.select(); + } catch (e) { } + return element; + }, + + disable: function(element) { + element = $(element); + element.disabled = true; + return element; + }, + + enable: function(element) { + element = $(element); + element.disabled = false; + return element; + } +}; + +/*--------------------------------------------------------------------------*/ + +var Field = Form.Element; + +var $F = Form.Element.Methods.getValue; + +/*--------------------------------------------------------------------------*/ + +Form.Element.Serializers = (function() { + function input(element, value) { + switch (element.type.toLowerCase()) { + case 'checkbox': + case 'radio': + return inputSelector(element, value); + default: + return valueSelector(element, value); + } + } + + function inputSelector(element, value) { + if (Object.isUndefined(value)) + return element.checked ? element.value : null; + else element.checked = !!value; + } + + function valueSelector(element, value) { + if (Object.isUndefined(value)) return element.value; + else element.value = value; + } + + function select(element, value) { + if (Object.isUndefined(value)) + return (element.type === 'select-one' ? selectOne : selectMany)(element); + + var opt, currentValue, single = !Object.isArray(value); + for (var i = 0, length = element.length; i < length; i++) { + opt = element.options[i]; + currentValue = this.optionValue(opt); + if (single) { + if (currentValue == value) { + opt.selected = true; + return; + } + } + else opt.selected = value.include(currentValue); + } + } + + function selectOne(element) { + var index = element.selectedIndex; + return index >= 0 ? optionValue(element.options[index]) : null; + } + + function selectMany(element) { + var values, length = element.length; + if (!length) return null; + + for (var i = 0, values = []; i < length; i++) { + var opt = element.options[i]; + if (opt.selected) values.push(optionValue(opt)); + } + return values; + } + + function optionValue(opt) { + return Element.hasAttribute(opt, 'value') ? opt.value : opt.text; + } + + return { + input: input, + inputSelector: inputSelector, + textarea: valueSelector, + select: select, + selectOne: selectOne, + selectMany: selectMany, + optionValue: optionValue, + button: valueSelector + }; +})(); + +/*--------------------------------------------------------------------------*/ + + +Abstract.TimedObserver = Class.create(PeriodicalExecuter, { + initialize: function($super, element, frequency, callback) { + $super(callback, frequency); + this.element = $(element); + this.lastValue = this.getValue(); + }, + + execute: function() { + var value = this.getValue(); + if (Object.isString(this.lastValue) && Object.isString(value) ? + this.lastValue != value : String(this.lastValue) != String(value)) { + this.callback(this.element, value); + this.lastValue = value; + } + } +}); + +Form.Element.Observer = Class.create(Abstract.TimedObserver, { + getValue: function() { + return Form.Element.getValue(this.element); + } +}); + +Form.Observer = Class.create(Abstract.TimedObserver, { + getValue: function() { + return Form.serialize(this.element); + } +}); + +/*--------------------------------------------------------------------------*/ + +Abstract.EventObserver = Class.create({ + initialize: function(element, callback) { + this.element = $(element); + this.callback = callback; + + this.lastValue = this.getValue(); + if (this.element.tagName.toLowerCase() == 'form') + this.registerFormCallbacks(); + else + this.registerCallback(this.element); + }, + + onElementEvent: function() { + var value = this.getValue(); + if (this.lastValue != value) { + this.callback(this.element, value); + this.lastValue = value; + } + }, + + registerFormCallbacks: function() { + Form.getElements(this.element).each(this.registerCallback, this); + }, + + registerCallback: function(element) { + if (element.type) { + switch (element.type.toLowerCase()) { + case 'checkbox': + case 'radio': + Event.observe(element, 'click', this.onElementEvent.bind(this)); + break; + default: + Event.observe(element, 'change', this.onElementEvent.bind(this)); + break; + } + } + } +}); + +Form.Element.EventObserver = Class.create(Abstract.EventObserver, { + getValue: function() { + return Form.Element.getValue(this.element); + } +}); + +Form.EventObserver = Class.create(Abstract.EventObserver, { + getValue: function() { + return Form.serialize(this.element); + } +}); +(function(GLOBAL) { + var DIV = document.createElement('div'); + var docEl = document.documentElement; + var MOUSEENTER_MOUSELEAVE_EVENTS_SUPPORTED = 'onmouseenter' in docEl + && 'onmouseleave' in docEl; + + var Event = { + KEY_BACKSPACE: 8, + KEY_TAB: 9, + KEY_RETURN: 13, + KEY_ESC: 27, + KEY_LEFT: 37, + KEY_UP: 38, + KEY_RIGHT: 39, + KEY_DOWN: 40, + KEY_DELETE: 46, + KEY_HOME: 36, + KEY_END: 35, + KEY_PAGEUP: 33, + KEY_PAGEDOWN: 34, + KEY_INSERT: 45 + }; + + + var isIELegacyEvent = function(event) { return false; }; + + if (window.attachEvent) { + if (window.addEventListener) { + isIELegacyEvent = function(event) { + return !(event instanceof window.Event); + }; + } else { + isIELegacyEvent = function(event) { return true; }; + } + } + + var _isButton; + + function _isButtonForDOMEvents(event, code) { + return event.which ? (event.which === code + 1) : (event.button === code); + } + + var legacyButtonMap = { 0: 1, 1: 4, 2: 2 }; + function _isButtonForLegacyEvents(event, code) { + return event.button === legacyButtonMap[code]; + } + + function _isButtonForWebKit(event, code) { + switch (code) { + case 0: return event.which == 1 && !event.metaKey; + case 1: return event.which == 2 || (event.which == 1 && event.metaKey); + case 2: return event.which == 3; + default: return false; + } + } + + if (window.attachEvent) { + if (!window.addEventListener) { + _isButton = _isButtonForLegacyEvents; + } else { + _isButton = function(event, code) { + return isIELegacyEvent(event) ? _isButtonForLegacyEvents(event, code) : + _isButtonForDOMEvents(event, code); + } + } + } else if (Prototype.Browser.WebKit) { + _isButton = _isButtonForWebKit; + } else { + _isButton = _isButtonForDOMEvents; + } + + function isLeftClick(event) { return _isButton(event, 0) } + + function isMiddleClick(event) { return _isButton(event, 1) } + + function isRightClick(event) { return _isButton(event, 2) } + + function element(event) { + return Element.extend(_element(event)); + } + + function _element(event) { + event = Event.extend(event); + + var node = event.target, type = event.type, + currentTarget = event.currentTarget; + + if (currentTarget && currentTarget.tagName) { + if (type === 'load' || type === 'error' || + (type === 'click' && currentTarget.tagName.toLowerCase() === 'input' + && currentTarget.type === 'radio')) + node = currentTarget; + } + + return node.nodeType == Node.TEXT_NODE ? node.parentNode : node; + } + + function findElement(event, expression) { + var element = _element(event), selector = Prototype.Selector; + if (!expression) return Element.extend(element); + while (element) { + if (Object.isElement(element) && selector.match(element, expression)) + return Element.extend(element); + element = element.parentNode; + } + } + + function pointer(event) { + return { x: pointerX(event), y: pointerY(event) }; + } + + function pointerX(event) { + var docElement = document.documentElement, + body = document.body || { scrollLeft: 0 }; + + return event.pageX || (event.clientX + + (docElement.scrollLeft || body.scrollLeft) - + (docElement.clientLeft || 0)); + } + + function pointerY(event) { + var docElement = document.documentElement, + body = document.body || { scrollTop: 0 }; + + return event.pageY || (event.clientY + + (docElement.scrollTop || body.scrollTop) - + (docElement.clientTop || 0)); + } + + + function stop(event) { + Event.extend(event); + event.preventDefault(); + event.stopPropagation(); + + event.stopped = true; + } + + + Event.Methods = { + isLeftClick: isLeftClick, + isMiddleClick: isMiddleClick, + isRightClick: isRightClick, + + element: element, + findElement: findElement, + + pointer: pointer, + pointerX: pointerX, + pointerY: pointerY, + + stop: stop + }; + + var methods = Object.keys(Event.Methods).inject({ }, function(m, name) { + m[name] = Event.Methods[name].methodize(); + return m; + }); + + if (window.attachEvent) { + function _relatedTarget(event) { + var element; + switch (event.type) { + case 'mouseover': + case 'mouseenter': + element = event.fromElement; + break; + case 'mouseout': + case 'mouseleave': + element = event.toElement; + break; + default: + return null; + } + return Element.extend(element); + } + + var additionalMethods = { + stopPropagation: function() { this.cancelBubble = true }, + preventDefault: function() { this.returnValue = false }, + inspect: function() { return '[object Event]' } + }; + + Event.extend = function(event, element) { + if (!event) return false; + + if (!isIELegacyEvent(event)) return event; + + if (event._extendedByPrototype) return event; + event._extendedByPrototype = Prototype.emptyFunction; + + var pointer = Event.pointer(event); + + Object.extend(event, { + target: event.srcElement || element, + relatedTarget: _relatedTarget(event), + pageX: pointer.x, + pageY: pointer.y + }); + + Object.extend(event, methods); + Object.extend(event, additionalMethods); + + return event; + }; + } else { + Event.extend = Prototype.K; + } + + if (window.addEventListener) { + Event.prototype = window.Event.prototype || document.createEvent('HTMLEvents').__proto__; + Object.extend(Event.prototype, methods); + } + + var EVENT_TRANSLATIONS = { + mouseenter: 'mouseover', + mouseleave: 'mouseout' + }; + + function getDOMEventName(eventName) { + return EVENT_TRANSLATIONS[eventName] || eventName; + } + + if (MOUSEENTER_MOUSELEAVE_EVENTS_SUPPORTED) + getDOMEventName = Prototype.K; + + function getUniqueElementID(element) { + if (element === window) return 0; + + if (typeof element._prototypeUID === 'undefined') + element._prototypeUID = Element.Storage.UID++; + return element._prototypeUID; + } + + function getUniqueElementID_IE(element) { + if (element === window) return 0; + if (element == document) return 1; + return element.uniqueID; + } + + if ('uniqueID' in DIV) + getUniqueElementID = getUniqueElementID_IE; + + function isCustomEvent(eventName) { + return eventName.include(':'); + } + + Event._isCustomEvent = isCustomEvent; + + function getRegistryForElement(element, uid) { + var CACHE = GLOBAL.Event.cache; + if (Object.isUndefined(uid)) + uid = getUniqueElementID(element); + if (!CACHE[uid]) CACHE[uid] = { element: element }; + return CACHE[uid]; + } + + function destroyRegistryForElement(element, uid) { + if (Object.isUndefined(uid)) + uid = getUniqueElementID(element); + delete GLOBAL.Event.cache[uid]; + } + + + function register(element, eventName, handler) { + var registry = getRegistryForElement(element); + if (!registry[eventName]) registry[eventName] = []; + var entries = registry[eventName]; + + var i = entries.length; + while (i--) + if (entries[i].handler === handler) return null; + + var uid = getUniqueElementID(element); + var responder = GLOBAL.Event._createResponder(uid, eventName, handler); + var entry = { + responder: responder, + handler: handler + }; + + entries.push(entry); + return entry; + } + + function unregister(element, eventName, handler) { + var registry = getRegistryForElement(element); + var entries = registry[eventName]; + if (!entries) return; + + var i = entries.length, entry; + while (i--) { + if (entries[i].handler === handler) { + entry = entries[i]; + break; + } + } + + if (!entry) return; + + var index = entries.indexOf(entry); + entries.splice(index, 1); + + return entry; + } + + + function observe(element, eventName, handler) { + element = $(element); + var entry = register(element, eventName, handler); + + if (entry === null) return element; + + var responder = entry.responder; + if (isCustomEvent(eventName)) + observeCustomEvent(element, eventName, responder); + else + observeStandardEvent(element, eventName, responder); + + return element; + } + + function observeStandardEvent(element, eventName, responder) { + var actualEventName = getDOMEventName(eventName); + if (element.addEventListener) { + element.addEventListener(actualEventName, responder, false); + } else { + element.attachEvent('on' + actualEventName, responder); + } + } + + function observeCustomEvent(element, eventName, responder) { + if (element.addEventListener) { + element.addEventListener('dataavailable', responder, false); + } else { + element.attachEvent('ondataavailable', responder); + element.attachEvent('onlosecapture', responder); + } + } + + function stopObserving(element, eventName, handler) { + element = $(element); + var handlerGiven = !Object.isUndefined(handler), + eventNameGiven = !Object.isUndefined(eventName); + + if (!eventNameGiven && !handlerGiven) { + stopObservingElement(element); + return element; + } + + if (!handlerGiven) { + stopObservingEventName(element, eventName); + return element; + } + + var entry = unregister(element, eventName, handler); + + if (!entry) return element; + removeEvent(element, eventName, entry.responder); + return element; + } + + function stopObservingStandardEvent(element, eventName, responder) { + var actualEventName = getDOMEventName(eventName); + if (element.removeEventListener) { + element.removeEventListener(actualEventName, responder, false); + } else { + element.detachEvent('on' + actualEventName, responder); + } + } + + function stopObservingCustomEvent(element, eventName, responder) { + if (element.removeEventListener) { + element.removeEventListener('dataavailable', responder, false); + } else { + element.detachEvent('ondataavailable', responder); + element.detachEvent('onlosecapture', responder); + } + } + + + + function stopObservingElement(element) { + var uid = getUniqueElementID(element), registry = GLOBAL.Event.cache[uid]; + if (!registry) return; + + destroyRegistryForElement(element, uid); + + var entries, i; + for (var eventName in registry) { + if (eventName === 'element') continue; + + entries = registry[eventName]; + i = entries.length; + while (i--) + removeEvent(element, eventName, entries[i].responder); + } + } + + function stopObservingEventName(element, eventName) { + var registry = getRegistryForElement(element); + var entries = registry[eventName]; + if (!entries) return; + delete registry[eventName]; + + var i = entries.length; + while (i--) + removeEvent(element, eventName, entries[i].responder); + } + + + function removeEvent(element, eventName, handler) { + if (isCustomEvent(eventName)) + stopObservingCustomEvent(element, eventName, handler); + else + stopObservingStandardEvent(element, eventName, handler); + } + + + + function getFireTarget(element) { + if (element !== document) return element; + if (document.createEvent && !element.dispatchEvent) + return document.documentElement; + return element; + } + + function fire(element, eventName, memo, bubble) { + element = getFireTarget($(element)); + if (Object.isUndefined(bubble)) bubble = true; + memo = memo || {}; + + var event = fireEvent(element, eventName, memo, bubble); + return Event.extend(event); + } + + function fireEvent_DOM(element, eventName, memo, bubble) { + var event = document.createEvent('HTMLEvents'); + event.initEvent('dataavailable', bubble, true); + + event.eventName = eventName; + event.memo = memo; + + element.dispatchEvent(event); + return event; + } + + function fireEvent_IE(element, eventName, memo, bubble) { + var event = document.createEventObject(); + event.eventType = bubble ? 'ondataavailable' : 'onlosecapture'; + + event.eventName = eventName; + event.memo = memo; + + element.fireEvent(event.eventType, event); + return event; + } + + var fireEvent = document.createEvent ? fireEvent_DOM : fireEvent_IE; + + + + Event.Handler = Class.create({ + initialize: function(element, eventName, selector, callback) { + this.element = $(element); + this.eventName = eventName; + this.selector = selector; + this.callback = callback; + this.handler = this.handleEvent.bind(this); + }, + + + start: function() { + Event.observe(this.element, this.eventName, this.handler); + return this; + }, + + stop: function() { + Event.stopObserving(this.element, this.eventName, this.handler); + return this; + }, + + handleEvent: function(event) { + var element = Event.findElement(event, this.selector); + if (element) this.callback.call(this.element, event, element); + } + }); + + function on(element, eventName, selector, callback) { + element = $(element); + if (Object.isFunction(selector) && Object.isUndefined(callback)) { + callback = selector, selector = null; + } + + return new Event.Handler(element, eventName, selector, callback).start(); + } + + Object.extend(Event, Event.Methods); + + Object.extend(Event, { + fire: fire, + observe: observe, + stopObserving: stopObserving, + on: on + }); + + Element.addMethods({ + fire: fire, + + observe: observe, + + stopObserving: stopObserving, + + on: on + }); + + Object.extend(document, { + fire: fire.methodize(), + + observe: observe.methodize(), + + stopObserving: stopObserving.methodize(), + + on: on.methodize(), + + loaded: false + }); + + if (GLOBAL.Event) Object.extend(window.Event, Event); + else GLOBAL.Event = Event; + + GLOBAL.Event.cache = {}; + + function destroyCache_IE() { + GLOBAL.Event.cache = null; + } + + if (window.attachEvent) + window.attachEvent('onunload', destroyCache_IE); + + DIV = null; + docEl = null; +})(this); + +(function(GLOBAL) { + /* Code for creating leak-free event responders is based on work by + John-David Dalton. */ + + var docEl = document.documentElement; + var MOUSEENTER_MOUSELEAVE_EVENTS_SUPPORTED = 'onmouseenter' in docEl + && 'onmouseleave' in docEl; + + function isSimulatedMouseEnterLeaveEvent(eventName) { + return !MOUSEENTER_MOUSELEAVE_EVENTS_SUPPORTED && + (eventName === 'mouseenter' || eventName === 'mouseleave'); + } + + function createResponder(uid, eventName, handler) { + if (Event._isCustomEvent(eventName)) + return createResponderForCustomEvent(uid, eventName, handler); + if (isSimulatedMouseEnterLeaveEvent(eventName)) + return createMouseEnterLeaveResponder(uid, eventName, handler); + + return function(event) { + if (!Event.cache) return; + + var element = Event.cache[uid].element; + Event.extend(event, element); + handler.call(element, event); + }; + } + + function createResponderForCustomEvent(uid, eventName, handler) { + return function(event) { + var element = Event.cache[uid].element; + + if (Object.isUndefined(event.eventName)) + return false; + + if (event.eventName !== eventName) + return false; + + Event.extend(event, element); + handler.call(element, event); + }; + } + + function createMouseEnterLeaveResponder(uid, eventName, handler) { + return function(event) { + var element = Event.cache[uid].element; + + Event.extend(event, element); + var parent = event.relatedTarget; + + while (parent && parent !== element) { + try { parent = parent.parentNode; } + catch(e) { parent = element; } + } + + if (parent === element) return; + handler.call(element, event); + } + } + + GLOBAL.Event._createResponder = createResponder; + docEl = null; +})(this); + +(function(GLOBAL) { + /* Support for the DOMContentLoaded event is based on work by Dan Webb, + Matthias Miller, Dean Edwards, John Resig, and Diego Perini. */ + + var TIMER; + + function fireContentLoadedEvent() { + if (document.loaded) return; + if (TIMER) window.clearTimeout(TIMER); + document.loaded = true; + document.fire('dom:loaded'); + } + + function checkReadyState() { + if (document.readyState === 'complete') { + document.detachEvent('onreadystatechange', checkReadyState); + fireContentLoadedEvent(); + } + } + + function pollDoScroll() { + try { + document.documentElement.doScroll('left'); + } catch (e) { + TIMER = pollDoScroll.defer(); + return; + } + + fireContentLoadedEvent(); + } + + + if (document.readyState === 'complete') { + fireContentLoadedEvent(); + return; + } + + if (document.addEventListener) { + document.addEventListener('DOMContentLoaded', fireContentLoadedEvent, false); + } else { + document.attachEvent('onreadystatechange', checkReadyState); + if (window == top) TIMER = pollDoScroll.defer(); + } + + Event.observe(window, 'load', fireContentLoadedEvent); +})(this); + + +Element.addMethods(); +/*------------------------------- DEPRECATED -------------------------------*/ + +Hash.toQueryString = Object.toQueryString; + +var Toggle = { display: Element.toggle }; + +Element.Methods.childOf = Element.Methods.descendantOf; + +var Insertion = { + Before: function(element, content) { + return Element.insert(element, {before:content}); + }, + + Top: function(element, content) { + return Element.insert(element, {top:content}); + }, + + Bottom: function(element, content) { + return Element.insert(element, {bottom:content}); + }, + + After: function(element, content) { + return Element.insert(element, {after:content}); + } +}; + +var $continue = new Error('"throw $continue" is deprecated, use "return" instead'); + +var Position = { + includeScrollOffsets: false, + + prepare: function() { + this.deltaX = window.pageXOffset + || document.documentElement.scrollLeft + || document.body.scrollLeft + || 0; + this.deltaY = window.pageYOffset + || document.documentElement.scrollTop + || document.body.scrollTop + || 0; + }, + + within: function(element, x, y) { + if (this.includeScrollOffsets) + return this.withinIncludingScrolloffsets(element, x, y); + this.xcomp = x; + this.ycomp = y; + this.offset = Element.cumulativeOffset(element); + + return (y >= this.offset[1] && + y < this.offset[1] + element.offsetHeight && + x >= this.offset[0] && + x < this.offset[0] + element.offsetWidth); + }, + + withinIncludingScrolloffsets: function(element, x, y) { + var offsetcache = Element.cumulativeScrollOffset(element); + + this.xcomp = x + offsetcache[0] - this.deltaX; + this.ycomp = y + offsetcache[1] - this.deltaY; + this.offset = Element.cumulativeOffset(element); + + return (this.ycomp >= this.offset[1] && + this.ycomp < this.offset[1] + element.offsetHeight && + this.xcomp >= this.offset[0] && + this.xcomp < this.offset[0] + element.offsetWidth); + }, + + overlap: function(mode, element) { + if (!mode) return 0; + if (mode == 'vertical') + return ((this.offset[1] + element.offsetHeight) - this.ycomp) / + element.offsetHeight; + if (mode == 'horizontal') + return ((this.offset[0] + element.offsetWidth) - this.xcomp) / + element.offsetWidth; + }, + + + cumulativeOffset: Element.Methods.cumulativeOffset, + + positionedOffset: Element.Methods.positionedOffset, + + absolutize: function(element) { + Position.prepare(); + return Element.absolutize(element); + }, + + relativize: function(element) { + Position.prepare(); + return Element.relativize(element); + }, + + realOffset: Element.Methods.cumulativeScrollOffset, + + offsetParent: Element.Methods.getOffsetParent, + + page: Element.Methods.viewportOffset, + + clone: function(source, target, options) { + options = options || { }; + return Element.clonePosition(target, source, options); + } +}; + +/*--------------------------------------------------------------------------*/ + +if (!document.getElementsByClassName) document.getElementsByClassName = function(instanceMethods){ + function iter(name) { + return name.blank() ? null : "[contains(concat(' ', @class, ' '), ' " + name + " ')]"; + } + + instanceMethods.getElementsByClassName = Prototype.BrowserFeatures.XPath ? + function(element, className) { + className = className.toString().strip(); + var cond = /\s/.test(className) ? $w(className).map(iter).join('') : iter(className); + return cond ? document._getElementsByXPath('.//*' + cond, element) : []; + } : function(element, className) { + className = className.toString().strip(); + var elements = [], classNames = (/\s/.test(className) ? $w(className) : null); + if (!classNames && !className) return elements; + + var nodes = $(element).getElementsByTagName('*'); + className = ' ' + className + ' '; + + for (var i = 0, child, cn; child = nodes[i]; i++) { + if (child.className && (cn = ' ' + child.className + ' ') && (cn.include(className) || + (classNames && classNames.all(function(name) { + return !name.toString().blank() && cn.include(' ' + name + ' '); + })))) + elements.push(Element.extend(child)); + } + return elements; + }; + + return function(className, parentElement) { + return $(parentElement || document.body).getElementsByClassName(className); + }; +}(Element.Methods); + +/*--------------------------------------------------------------------------*/ + +Element.ClassNames = Class.create(); +Element.ClassNames.prototype = { + initialize: function(element) { + this.element = $(element); + }, + + _each: function(iterator, context) { + this.element.className.split(/\s+/).select(function(name) { + return name.length > 0; + })._each(iterator, context); + }, + + set: function(className) { + this.element.className = className; + }, + + add: function(classNameToAdd) { + if (this.include(classNameToAdd)) return; + this.set($A(this).concat(classNameToAdd).join(' ')); + }, + + remove: function(classNameToRemove) { + if (!this.include(classNameToRemove)) return; + this.set($A(this).without(classNameToRemove).join(' ')); + }, + + toString: function() { + return $A(this).join(' '); + } +}; + +Object.extend(Element.ClassNames.prototype, Enumerable); + +/*--------------------------------------------------------------------------*/ + +(function() { + window.Selector = Class.create({ + initialize: function(expression) { + this.expression = expression.strip(); + }, + + findElements: function(rootElement) { + return Prototype.Selector.select(this.expression, rootElement); + }, + + match: function(element) { + return Prototype.Selector.match(element, this.expression); + }, + + toString: function() { + return this.expression; + }, + + inspect: function() { + return "#"; + } + }); + + Object.extend(Selector, { + matchElements: function(elements, expression) { + var match = Prototype.Selector.match, + results = []; + + for (var i = 0, length = elements.length; i < length; i++) { + var element = elements[i]; + if (match(element, expression)) { + results.push(Element.extend(element)); + } + } + return results; + }, + + findElement: function(elements, expression, index) { + index = index || 0; + var matchIndex = 0, element; + for (var i = 0, length = elements.length; i < length; i++) { + element = elements[i]; + if (Prototype.Selector.match(element, expression) && index === matchIndex++) { + return Element.extend(element); + } + } + }, + + findChildElements: function(element, expressions) { + var selector = expressions.toArray().join(', '); + return Prototype.Selector.select(selector, element || document); + } + }); +})(); + +/** + * Event.simulate(@element, eventName[, options]) -> Element + * + * - @element: element to fire event on + * - eventName: name of event to fire (only MouseEvents and HTMLEvents interfaces are supported) + * - options: optional object to fine-tune event properties - pointerX, pointerY, ctrlKey, etc. + * + * $('foo').simulate('click'); // => fires "click" event on an element with id=foo + * + **/ +(function(){ + + var eventMatchers = { + 'HTMLEvents': /^(?:load|unload|abort|error|select|change|submit|reset|focus|blur|resize|scroll|input)$/, + 'MouseEvents': /^(?:click|mouse(?:down|up|over|move|out))$/ + } + var defaultOptions = { + pointerX: 0, + pointerY: 0, + button: 0, + ctrlKey: false, + altKey: false, + shiftKey: false, + metaKey: false, + bubbles: true, + cancelable: true + } + + Event.simulate = function(element, eventName) { + var options = Object.extend(defaultOptions, arguments[2] || { }); + var oEvent, eventType = null; + + element = $(element); + + for (var name in eventMatchers) { + if (eventMatchers[name].test(eventName)) { eventType = name; break; } + } + + if (!eventType) + throw new SyntaxError('Only HTMLEvents and MouseEvents interfaces are supported'); + + if (document.createEvent) { + oEvent = document.createEvent(eventType); + if (eventType == 'HTMLEvents') { + oEvent.initEvent(eventName, options.bubbles, options.cancelable); + } + else { + oEvent.initMouseEvent(eventName, options.bubbles, options.cancelable, document.defaultView, + options.button, options.pointerX, options.pointerY, options.pointerX, options.pointerY, + options.ctrlKey, options.altKey, options.shiftKey, options.metaKey, options.button, element); + } + element.dispatchEvent(oEvent); + } + else { + options.clientX = options.pointerX; + options.clientY = options.pointerY; + oEvent = Object.extend(document.createEventObject(), options); + element.fireEvent('on' + eventName, oEvent); + } + return element; + } + + Element.addMethods({ simulate: Event.simulate }); +})() +function phi4z(t,i,s,e,o,n,a,r,h){var l,c,m,u,d,p,_,f,P,y;for(h=n,y=1;15>=y;y++)if(l=Math.sin(h),m=Math.tan(h),r=m*Math.sqrt(1-t*l*l),c=Math.sin(2*h),u=i*h-s*c+e*Math.sin(4*h)-o*Math.sin(6*h),d=i-2*s*Math.cos(2*h)+4*e*Math.cos(4*h)-6*o*Math.cos(6*h),p=2*u+r*(u*u+a)-2*n*(r*u+1),_=t*c*(u*u+a-2*n*u)/(2*r),f=2*(n-u)*(r*d-2/c)-2*d,P=p/(_+f),h+=P,1e-10>=Math.abs(P))return h;return Proj4js.reportError("phi4z: No convergence"),null}function e4fn(t){var i,s;return i=1+t,s=1-t,Math.sqrt(Math.pow(i,i)*Math.pow(s,s))}var Proj4js={defaultDatum:"WGS84",transform:function(t,i,s){if(!t.readyToUse)return this.reportError("Proj4js initialization for:"+t.srsCode+" not yet complete"),s;if(!i.readyToUse)return this.reportError("Proj4js initialization for:"+i.srsCode+" not yet complete"),s;if(t.datum&&i.datum&&((t.datum.datum_type==Proj4js.common.PJD_3PARAM||t.datum.datum_type==Proj4js.common.PJD_7PARAM)&&"WGS84"!=i.datumCode||(i.datum.datum_type==Proj4js.common.PJD_3PARAM||i.datum.datum_type==Proj4js.common.PJD_7PARAM)&&"WGS84"!=t.datumCode)){var e=Proj4js.WGS84;this.transform(t,e,s),t=e}return"enu"!=t.axis&&this.adjust_axis(t,!1,s),"longlat"==t.projName?(s.x*=Proj4js.common.D2R,s.y*=Proj4js.common.D2R):(t.to_meter&&(s.x*=t.to_meter,s.y*=t.to_meter),t.inverse(s)),t.from_greenwich&&(s.x+=t.from_greenwich),s=this.datum_transform(t.datum,i.datum,s),i.from_greenwich&&(s.x-=i.from_greenwich),"longlat"==i.projName?(s.x*=Proj4js.common.R2D,s.y*=Proj4js.common.R2D):(i.forward(s),i.to_meter&&(s.x/=i.to_meter,s.y/=i.to_meter)),"enu"!=i.axis&&this.adjust_axis(i,!0,s),s},datum_transform:function(t,i,s){return t.compare_datums(i)?s:t.datum_type==Proj4js.common.PJD_NODATUM||i.datum_type==Proj4js.common.PJD_NODATUM?s:((t.es!=i.es||t.a!=i.a||t.datum_type==Proj4js.common.PJD_3PARAM||t.datum_type==Proj4js.common.PJD_7PARAM||i.datum_type==Proj4js.common.PJD_3PARAM||i.datum_type==Proj4js.common.PJD_7PARAM)&&(t.geodetic_to_geocentric(s),(t.datum_type==Proj4js.common.PJD_3PARAM||t.datum_type==Proj4js.common.PJD_7PARAM)&&t.geocentric_to_wgs84(s),(i.datum_type==Proj4js.common.PJD_3PARAM||i.datum_type==Proj4js.common.PJD_7PARAM)&&i.geocentric_from_wgs84(s),i.geocentric_to_geodetic(s)),s)},adjust_axis:function(t,i,s){for(var e,o,n=s.x,a=s.y,r=s.z||0,h=0;3>h;h++)if(!i||2!=h||void 0!==s.z)switch(0==h?(e=n,o="x"):1==h?(e=a,o="y"):(e=r,o="z"),t.axis[h]){case"e":s[o]=e;break;case"w":s[o]=-e;break;case"n":s[o]=e;break;case"s":s[o]=-e;break;case"u":void 0!==s[o]&&(s.z=e);break;case"d":void 0!==s[o]&&(s.z=-e);break;default:return alert("ERROR: unknow axis ("+t.axis[h]+") - check definition of "+t.projName),null}return s},reportError:function(){},extend:function(t,i){if(t=t||{},i)for(var s in i){var e=i[s];void 0!==e&&(t[s]=e)}return t},Class:function(){for(var t,i=function(){this.initialize.apply(this,arguments)},s={},e=0;arguments.length>e;++e)t="function"==typeof arguments[e]?arguments[e].prototype:arguments[e],Proj4js.extend(s,t);return i.prototype=s,i},bind:function(t,i){var s=Array.prototype.slice.apply(arguments,[2]);return function(){var e=s.concat(Array.prototype.slice.apply(arguments,[0]));return t.apply(i,e)}},scriptName:"proj4js-combined.js",defsLookupService:"http://spatialreference.org/ref",libPath:null,getScriptLocation:function(){if(this.libPath)return this.libPath;for(var t=this.scriptName,i=t.length,s=document.getElementsByTagName("script"),e=0;s.length>e;e++){var o=s[e].getAttribute("src");if(o){var n=o.lastIndexOf(t);if(n>-1&&n+i==o.length){this.libPath=o.slice(0,-i);break}}}return this.libPath||""},loadScript:function(t,i,s,e){var o=document.createElement("script");o.defer=!1,o.type="text/javascript",o.id=t,o.src=t,o.onload=i,o.onerror=s,o.loadCheck=e,/MSIE/.test(navigator.userAgent)&&(o.onreadystatechange=this.checkReadyState),document.getElementsByTagName("head")[0].appendChild(o)},checkReadyState:function(){"loaded"==this.readyState&&(this.loadCheck()?this.onload():this.onerror())}};Proj4js.Proj=Proj4js.Class({readyToUse:!1,title:null,projName:null,units:null,datum:null,x0:0,y0:0,localCS:!1,queue:null,initialize:function(t,i){if(this.srsCodeInput=t,this.queue=[],i&&this.queue.push(i),t.indexOf("GEOGCS")>=0||t.indexOf("GEOCCS")>=0||t.indexOf("PROJCS")>=0||t.indexOf("LOCAL_CS")>=0)return this.parseWKT(t),this.deriveConstants(),this.loadProjCode(this.projName),void 0;if(0==t.indexOf("urn:")){var s=t.split(":");"ogc"!=s[1]&&"x-ogc"!=s[1]||"def"!=s[2]||"crs"!=s[3]||(t=s[4]+":"+s[s.length-1])}else if(0==t.indexOf("http://")){var e=t.split("#");e[0].match(/epsg.org/)?t="EPSG:"+e[1]:e[0].match(/RIG.xml/)&&(t="IGNF:"+e[1])}this.srsCode=t.toUpperCase(),0==this.srsCode.indexOf("EPSG")?(this.srsCode=this.srsCode,this.srsAuth="epsg",this.srsProjNumber=this.srsCode.substring(5)):0==this.srsCode.indexOf("IGNF")?(this.srsCode=this.srsCode,this.srsAuth="IGNF",this.srsProjNumber=this.srsCode.substring(5)):0==this.srsCode.indexOf("CRS")?(this.srsCode=this.srsCode,this.srsAuth="CRS",this.srsProjNumber=this.srsCode.substring(4)):(this.srsAuth="",this.srsProjNumber=this.srsCode),this.loadProjDefinition()},loadProjDefinition:function(){if(Proj4js.defs[this.srsCode])return this.defsLoaded(),void 0;var t=Proj4js.getScriptLocation()+"defs/"+this.srsAuth.toUpperCase()+this.srsProjNumber+".js";Proj4js.loadScript(t,Proj4js.bind(this.defsLoaded,this),Proj4js.bind(this.loadFromService,this),Proj4js.bind(this.checkDefsLoaded,this))},loadFromService:function(){var t=Proj4js.defsLookupService+"/"+this.srsAuth+"/"+this.srsProjNumber+"/proj4js/";Proj4js.loadScript(t,Proj4js.bind(this.defsLoaded,this),Proj4js.bind(this.defsFailed,this),Proj4js.bind(this.checkDefsLoaded,this))},defsLoaded:function(){this.parseDefs(),this.loadProjCode(this.projName)},checkDefsLoaded:function(){return Proj4js.defs[this.srsCode]?!0:!1},defsFailed:function(){Proj4js.reportError("failed to load projection definition for: "+this.srsCode),Proj4js.defs[this.srsCode]=Proj4js.defs.WGS84,this.defsLoaded()},loadProjCode:function(t){if(Proj4js.Proj[t])return this.initTransforms(),void 0;var i=Proj4js.getScriptLocation()+"projCode/"+t+".js";Proj4js.loadScript(i,Proj4js.bind(this.loadProjCodeSuccess,this,t),Proj4js.bind(this.loadProjCodeFailure,this,t),Proj4js.bind(this.checkCodeLoaded,this,t))},loadProjCodeSuccess:function(t){Proj4js.Proj[t].dependsOn?this.loadProjCode(Proj4js.Proj[t].dependsOn):this.initTransforms()},loadProjCodeFailure:function(t){Proj4js.reportError("failed to find projection file for: "+t)},checkCodeLoaded:function(t){return Proj4js.Proj[t]?!0:!1},initTransforms:function(){if(Proj4js.extend(this,Proj4js.Proj[this.projName]),this.init(),this.readyToUse=!0,this.queue)for(var t;t=this.queue.shift();)t.call(this,this)},wktRE:/^(\w+)\[(.*)\]$/,parseWKT:function(t){var i=t.match(this.wktRE);if(i){var s,e=i[1],o=i[2],n=o.split(",");s="TOWGS84"==e.toUpperCase()?e:n.shift(),s=s.replace(/^\"/,""),s=s.replace(/\"$/,"");for(var a=[],r=0,h="",l=0;n.length>l;++l){for(var c=n[l],m=0;c.length>m;++m)"["==c.charAt(m)&&++r,"]"==c.charAt(m)&&--r;h+=c,0===r?(a.push(h),h=""):h+=","}switch(e){case"LOCAL_CS":this.projName="identity",this.localCS=!0,this.srsCode=s;break;case"GEOGCS":this.projName="longlat",this.geocsCode=s,this.srsCode||(this.srsCode=s);break;case"PROJCS":this.srsCode=s;break;case"GEOCCS":break;case"PROJECTION":this.projName=Proj4js.wktProjections[s];break;case"DATUM":this.datumName=s;break;case"LOCAL_DATUM":this.datumCode="none";break;case"SPHEROID":this.ellps=s,this.a=parseFloat(a.shift()),this.rf=parseFloat(a.shift());break;case"PRIMEM":this.from_greenwich=parseFloat(a.shift());break;case"UNIT":this.units=s,this.unitsPerMeter=parseFloat(a.shift());break;case"PARAMETER":var u=s.toLowerCase(),d=parseFloat(a.shift());switch(u){case"false_easting":this.x0=d;break;case"false_northing":this.y0=d;break;case"scale_factor":this.k0=d;break;case"central_meridian":this.long0=d*Proj4js.common.D2R;break;case"latitude_of_origin":this.lat0=d*Proj4js.common.D2R;break;case"more_here":break;default:}break;case"TOWGS84":this.datum_params=a;break;case"AXIS":var u=s.toLowerCase(),d=a.shift();switch(d){case"EAST":d="e";break;case"WEST":d="w";break;case"NORTH":d="n";break;case"SOUTH":d="s";break;case"UP":d="u";break;case"DOWN":d="d";break;case"OTHER":default:d=" "}switch(this.axis||(this.axis="enu"),u){case"x":this.axis=d+this.axis.substr(1,2);break;case"y":this.axis=this.axis.substr(0,1)+d+this.axis.substr(2,1);break;case"z":this.axis=this.axis.substr(0,2)+d;break;default:}case"MORE_HERE":break;default:}for(var l=0;a.length>l;++l)this.parseWKT(a[l])}},parseDefs:function(){this.defData=Proj4js.defs[this.srsCode];var t,i;if(this.defData){for(var s=this.defData.split("+"),e=0;s.length>e;e++){var o=s[e].split("=");switch(t=o[0].toLowerCase(),i=o[1],t.replace(/\s/gi,"")){case"":break;case"title":this.title=i;break;case"proj":this.projName=i.replace(/\s/gi,"");break;case"units":this.units=i.replace(/\s/gi,"");break;case"datum":this.datumCode=i.replace(/\s/gi,"");break;case"nadgrids":this.nagrids=i.replace(/\s/gi,"");break;case"ellps":this.ellps=i.replace(/\s/gi,"");break;case"a":this.a=parseFloat(i);break;case"b":this.b=parseFloat(i);break;case"rf":this.rf=parseFloat(i);break;case"lat_0":this.lat0=i*Proj4js.common.D2R;break;case"lat_1":this.lat1=i*Proj4js.common.D2R;break;case"lat_2":this.lat2=i*Proj4js.common.D2R;break;case"lat_ts":this.lat_ts=i*Proj4js.common.D2R;break;case"lon_0":this.long0=i*Proj4js.common.D2R;break;case"alpha":this.alpha=parseFloat(i)*Proj4js.common.D2R;break;case"lonc":this.longc=i*Proj4js.common.D2R;break;case"x_0":this.x0=parseFloat(i);break;case"y_0":this.y0=parseFloat(i);break;case"k_0":this.k0=parseFloat(i);break;case"k":this.k0=parseFloat(i);break;case"r_a":this.R_A=!0;break;case"zone":this.zone=parseInt(i,10);break;case"south":this.utmSouth=!0;break;case"towgs84":this.datum_params=i.split(",");break;case"to_meter":this.to_meter=parseFloat(i);break;case"from_greenwich":this.from_greenwich=i*Proj4js.common.D2R;break;case"pm":i=i.replace(/\s/gi,""),this.from_greenwich=Proj4js.PrimeMeridian[i]?Proj4js.PrimeMeridian[i]:parseFloat(i),this.from_greenwich*=Proj4js.common.D2R;break;case"axis":i=i.replace(/\s/gi,"");var n="ewnsud";3==i.length&&-1!=n.indexOf(i.substr(0,1))&&-1!=n.indexOf(i.substr(1,1))&&-1!=n.indexOf(i.substr(2,1))&&(this.axis=i);break;case"no_defs":break;default:}}this.deriveConstants()}},deriveConstants:function(){if("@null"==this.nagrids&&(this.datumCode="none"),this.datumCode&&"none"!=this.datumCode){var t=Proj4js.Datum[this.datumCode];t&&(this.datum_params=t.towgs84?t.towgs84.split(","):null,this.ellps=t.ellipse,this.datumName=t.datumName?t.datumName:this.datumCode)}if(!this.a){var i=Proj4js.Ellipsoid[this.ellps]?Proj4js.Ellipsoid[this.ellps]:Proj4js.Ellipsoid.WGS84;Proj4js.extend(this,i)}this.rf&&!this.b&&(this.b=(1-1/this.rf)*this.a),(0===this.rf||Math.abs(this.a-this.b)=a;a++)if(s=t*Math.sin(n),e=this.HALF_PI-2*Math.atan(i*Math.pow((1-s)/(1+s),o))-n,n+=e,1e-10>=Math.abs(e))return n;return alert("phi2z has NoConvergence"),-9999},qsfnz:function(t,i){var s;return t>1e-7?(s=t*i,(1-t*t)*(i/(1-s*s)-.5/t*Math.log((1-s)/(1+s)))):2*i},asinz:function(t){return Math.abs(t)>1&&(t=t>1?1:-1),Math.asin(t)},e0fn:function(t){return 1-.25*t*(1+t/16*(3+1.25*t))},e1fn:function(t){return.375*t*(1+.25*t*(1+.46875*t))},e2fn:function(t){return.05859375*t*t*(1+.75*t)},e3fn:function(t){return t*t*t*(35/3072)},mlfn:function(t,i,s,e,o){return t*o-i*Math.sin(2*o)+s*Math.sin(4*o)-e*Math.sin(6*o)},srat:function(t,i){return Math.pow((1-t)/(1+t),i)},sign:function(t){return 0>t?-1:1},adjust_lon:function(t){return t=Math.abs(t)this.HALF_PI)return+Number.NaN;if(i==this.HALF_PI)return Number.POSITIVE_INFINITY;if(i==-1*this.HALF_PI)return-1*Number.POSITIVE_INFINITY;var e=t*s;return Math.log(Math.tan((this.HALF_PI+i)/2))+t*Math.log((1-e)/(1+e))/2},fL:function(t,i){return 2*Math.atan(t*Math.exp(i))-this.HALF_PI},invlatiso:function(t,i){var s=this.fL(1,i),e=0,o=0;do e=s,o=t*Math.sin(e),s=this.fL(Math.exp(t*Math.log((1+o)/(1-o))/2),i);while(Math.abs(s-e)>1e-12);return s},sinh:function(t){var i=Math.exp(t);return i=(i-1/i)/2},cosh:function(t){var i=Math.exp(t);return i=(i+1/i)/2},tanh:function(t){var i=Math.exp(t);return i=(i-1/i)/(i+1/i)},asinh:function(t){var i=t>=0?1:-1;return i*Math.log(Math.abs(t)+Math.sqrt(t*t+1))},acosh:function(t){return 2*Math.log(Math.sqrt((t+1)/2)+Math.sqrt((t-1)/2))},atanh:function(t){return Math.log((t-1)/(t+1))/2},gN:function(t,i,s){var e=i*s;return t/Math.sqrt(1-e*e)},pj_enfn:function(t){var i=[];i[0]=this.C00-t*(this.C02+t*(this.C04+t*(this.C06+t*this.C08))),i[1]=t*(this.C22-t*(this.C04+t*(this.C06+t*this.C08)));var s=t*t;return i[2]=s*(this.C44-t*(this.C46+t*this.C48)),s*=t,i[3]=s*(this.C66-t*this.C68),i[4]=s*t*this.C88,i},pj_mlfn:function(t,i,s,e){return s*=i,i*=i,e[0]*t-s*(e[1]+i*(e[2]+i*(e[3]+i*e[4])))},pj_inv_mlfn:function(t,i,s){for(var e=1/(1-i),o=t,n=Proj4js.common.MAX_ITER;n;--n){var a=Math.sin(o),r=1-i*a*a;if(r=(this.pj_mlfn(o,a,Math.cos(o),s)-t)*r*Math.sqrt(r)*e,o-=r,Math.abs(r)i;i++)t.datum_params[i]=parseFloat(t.datum_params[i]);(0!=t.datum_params[0]||0!=t.datum_params[1]||0!=t.datum_params[2])&&(this.datum_type=Proj4js.common.PJD_3PARAM),t.datum_params.length>3&&(0!=t.datum_params[3]||0!=t.datum_params[4]||0!=t.datum_params[5]||0!=t.datum_params[6])&&(this.datum_type=Proj4js.common.PJD_7PARAM,t.datum_params[3]*=Proj4js.common.SEC_TO_RAD,t.datum_params[4]*=Proj4js.common.SEC_TO_RAD,t.datum_params[5]*=Proj4js.common.SEC_TO_RAD,t.datum_params[6]=t.datum_params[6]/1e6+1)}t&&(this.a=t.a,this.b=t.b,this.es=t.es,this.ep2=t.ep2,this.datum_params=t.datum_params)},compare_datums:function(t){return this.datum_type!=t.datum_type?!1:this.a!=t.a||Math.abs(this.es-t.es)>5e-11?!1:this.datum_type==Proj4js.common.PJD_3PARAM?this.datum_params[0]==t.datum_params[0]&&this.datum_params[1]==t.datum_params[1]&&this.datum_params[2]==t.datum_params[2]:this.datum_type==Proj4js.common.PJD_7PARAM?this.datum_params[0]==t.datum_params[0]&&this.datum_params[1]==t.datum_params[1]&&this.datum_params[2]==t.datum_params[2]&&this.datum_params[3]==t.datum_params[3]&&this.datum_params[4]==t.datum_params[4]&&this.datum_params[5]==t.datum_params[5]&&this.datum_params[6]==t.datum_params[6]:this.datum_type==Proj4js.common.PJD_GRIDSHIFT||t.datum_type==Proj4js.common.PJD_GRIDSHIFT?(alert("ERROR: Grid shift transformations are not implemented."),!1):!0},geodetic_to_geocentric:function(t){var i,s,e,o,n,a,r,h=t.x,l=t.y,c=t.z?t.z:0,m=0;if(-Proj4js.common.HALF_PI>l&&l>-1.001*Proj4js.common.HALF_PI)l=-Proj4js.common.HALF_PI;else if(l>Proj4js.common.HALF_PI&&1.001*Proj4js.common.HALF_PI>l)l=Proj4js.common.HALF_PI;else if(-Proj4js.common.HALF_PI>l||l>Proj4js.common.HALF_PI)return Proj4js.reportError("geocent:lat out of range:"+l),null;return h>Proj4js.common.PI&&(h-=2*Proj4js.common.PI),n=Math.sin(l),r=Math.cos(l),a=n*n,o=this.a/Math.sqrt(1-this.es*a),i=(o+c)*r*Math.cos(h),s=(o+c)*r*Math.sin(h),e=(o*(1-this.es)+c)*n,t.x=i,t.y=s,t.z=e,m},geocentric_to_geodetic:function(t){var i,s,e,o,n,a,r,h,l,c,m,u,d,p,_,f,P,y=1e-12,g=y*y,L=30,v=t.x,j=t.y,M=t.z?t.z:0;if(d=!1,i=Math.sqrt(v*v+j*j),s=Math.sqrt(v*v+j*j+M*M),y>i/this.a){if(d=!0,_=0,y>s/this.a)return f=Proj4js.common.HALF_PI,P=-this.b,void 0}else _=Math.atan2(j,v);e=M/s,o=i/s,n=1/Math.sqrt(1-this.es*(2-this.es)*o*o),h=o*(1-this.es)*n,l=e*n,p=0;do p++,r=this.a/Math.sqrt(1-this.es*l*l),P=i*h+M*l-r*(1-this.es*l*l),a=this.es*r/(r+P),n=1/Math.sqrt(1-a*(2-a)*o*o),c=o*(1-a)*n,m=e*n,u=m*h-c*l,h=c,l=m;while(u*u>g&&L>p);return f=Math.atan(m/Math.abs(c)),t.x=_,t.y=f,t.z=P,t},geocentric_to_geodetic_noniter:function(t){var i,s,e,o,n,a,r,h,l,c,m,u,d,p,_,f,P,y=t.x,g=t.y,L=t.z?t.z:0;if(y=parseFloat(y),g=parseFloat(g),L=parseFloat(L),P=!1,0!=y)i=Math.atan2(g,y);else if(g>0)i=Proj4js.common.HALF_PI;else if(0>g)i=-Proj4js.common.HALF_PI;else if(P=!0,i=0,L>0)s=Proj4js.common.HALF_PI;else{if(!(0>L))return s=Proj4js.common.HALF_PI,e=-this.b,void 0;s=-Proj4js.common.HALF_PI}return n=y*y+g*g,o=Math.sqrt(n),a=L*Proj4js.common.AD_C,h=Math.sqrt(a*a+n),c=a/h,u=o/h,m=c*c*c,r=L+this.b*this.ep2*m,f=o-this.a*this.es*u*u*u,l=Math.sqrt(r*r+f*f),d=r/l,p=f/l,_=this.a/Math.sqrt(1-this.es*d*d),e=p>=Proj4js.common.COS_67P5?o/p-_:-Proj4js.common.COS_67P5>=p?o/-p-_:L/d+_*(this.es-1),0==P&&(s=Math.atan(d/p)),t.x=i,t.y=s,t.z=e,t},geocentric_to_wgs84:function(t){if(this.datum_type==Proj4js.common.PJD_3PARAM)t.x+=this.datum_params[0],t.y+=this.datum_params[1],t.z+=this.datum_params[2];else if(this.datum_type==Proj4js.common.PJD_7PARAM){var i=this.datum_params[0],s=this.datum_params[1],e=this.datum_params[2],o=this.datum_params[3],n=this.datum_params[4],a=this.datum_params[5],r=this.datum_params[6],h=r*(t.x-a*t.y+n*t.z)+i,l=r*(a*t.x+t.y-o*t.z)+s,c=r*(-n*t.x+o*t.y+t.z)+e;t.x=h,t.y=l,t.z=c}},geocentric_from_wgs84:function(t){if(this.datum_type==Proj4js.common.PJD_3PARAM)t.x-=this.datum_params[0],t.y-=this.datum_params[1],t.z-=this.datum_params[2];else if(this.datum_type==Proj4js.common.PJD_7PARAM){var i=this.datum_params[0],s=this.datum_params[1],e=this.datum_params[2],o=this.datum_params[3],n=this.datum_params[4],a=this.datum_params[5],r=this.datum_params[6],h=(t.x-i)/r,l=(t.y-s)/r,c=(t.z-e)/r;t.x=h+a*l-n*c,t.y=-a*h+l+o*c,t.z=n*h-o*l+c}}}),Proj4js.Point=Proj4js.Class({initialize:function(t,i,s){if("object"==typeof t)this.x=t[0],this.y=t[1],this.z=t[2]||0;else if("string"==typeof t&&i===void 0){var e=t.split(",");this.x=parseFloat(e[0]),this.y=parseFloat(e[1]),this.z=parseFloat(e[2])||0}else this.x=t,this.y=i,this.z=s||0},clone:function(){return new Proj4js.Point(this.x,this.y,this.z)},toString:function(){return"x="+this.x+",y="+this.y},toShortString:function(){return this.x+", "+this.y}}),Proj4js.PrimeMeridian={greenwich:0,lisbon:-9.131906111111,paris:2.337229166667,bogota:-74.080916666667,madrid:-3.687938888889,rome:12.452333333333,bern:7.439583333333,jakarta:106.807719444444,ferro:-17.666666666667,brussels:4.367975,stockholm:18.058277777778,athens:23.7163375,oslo:10.722916666667},Proj4js.Ellipsoid={MERIT:{a:6378137,rf:298.257,ellipseName:"MERIT 1983"},SGS85:{a:6378136,rf:298.257,ellipseName:"Soviet Geodetic System 85"},GRS80:{a:6378137,rf:298.257222101,ellipseName:"GRS 1980(IUGG, 1980)"},IAU76:{a:6378140,rf:298.257,ellipseName:"IAU 1976"},airy:{a:6377563.396,b:6356256.91,ellipseName:"Airy 1830"},"APL4.":{a:6378137,rf:298.25,ellipseName:"Appl. Physics. 1965"},NWL9D:{a:6378145,rf:298.25,ellipseName:"Naval Weapons Lab., 1965"},mod_airy:{a:6377340.189,b:6356034.446,ellipseName:"Modified Airy"},andrae:{a:6377104.43,rf:300,ellipseName:"Andrae 1876 (Den., Iclnd.)"},aust_SA:{a:6378160,rf:298.25,ellipseName:"Australian Natl & S. Amer. 1969"},GRS67:{a:6378160,rf:298.247167427,ellipseName:"GRS 67(IUGG 1967)"},bessel:{a:6377397.155,rf:299.1528128,ellipseName:"Bessel 1841"},bess_nam:{a:6377483.865,rf:299.1528128,ellipseName:"Bessel 1841 (Namibia)"},clrk66:{a:6378206.4,b:6356583.8,ellipseName:"Clarke 1866"},clrk80:{a:6378249.145,rf:293.4663,ellipseName:"Clarke 1880 mod."},CPM:{a:6375738.7,rf:334.29,ellipseName:"Comm. des Poids et Mesures 1799"},delmbr:{a:6376428,rf:311.5,ellipseName:"Delambre 1810 (Belgium)"},engelis:{a:6378136.05,rf:298.2566,ellipseName:"Engelis 1985"},evrst30:{a:6377276.345,rf:300.8017,ellipseName:"Everest 1830"},evrst48:{a:6377304.063,rf:300.8017,ellipseName:"Everest 1948"},evrst56:{a:6377301.243,rf:300.8017,ellipseName:"Everest 1956"},evrst69:{a:6377295.664,rf:300.8017,ellipseName:"Everest 1969"},evrstSS:{a:6377298.556,rf:300.8017,ellipseName:"Everest (Sabah & Sarawak)"},fschr60:{a:6378166,rf:298.3,ellipseName:"Fischer (Mercury Datum) 1960"},fschr60m:{a:6378155,rf:298.3,ellipseName:"Fischer 1960"},fschr68:{a:6378150,rf:298.3,ellipseName:"Fischer 1968"},helmert:{a:6378200,rf:298.3,ellipseName:"Helmert 1906"},hough:{a:6378270,rf:297,ellipseName:"Hough"},intl:{a:6378388,rf:297,ellipseName:"International 1909 (Hayford)"},kaula:{a:6378163,rf:298.24,ellipseName:"Kaula 1961"},lerch:{a:6378139,rf:298.257,ellipseName:"Lerch 1979"},mprts:{a:6397300,rf:191,ellipseName:"Maupertius 1738"},new_intl:{a:6378157.5,b:6356772.2,ellipseName:"New International 1967"},plessis:{a:6376523,rf:6355863,ellipseName:"Plessis 1817 (France)"},krass:{a:6378245,rf:298.3,ellipseName:"Krassovsky, 1942"},SEasia:{a:6378155,b:6356773.3205,ellipseName:"Southeast Asia"},walbeck:{a:6376896,b:6355834.8467,ellipseName:"Walbeck"},WGS60:{a:6378165,rf:298.3,ellipseName:"WGS 60"},WGS66:{a:6378145,rf:298.25,ellipseName:"WGS 66"},WGS72:{a:6378135,rf:298.26,ellipseName:"WGS 72"},WGS84:{a:6378137,rf:298.257223563,ellipseName:"WGS 84"},sphere:{a:6370997,b:6370997,ellipseName:"Normal Sphere (r=6370997)"}},Proj4js.Datum={WGS84:{towgs84:"0,0,0",ellipse:"WGS84",datumName:"WGS84"},GGRS87:{towgs84:"-199.87,74.79,246.62",ellipse:"GRS80",datumName:"Greek_Geodetic_Reference_System_1987"},NAD83:{towgs84:"0,0,0",ellipse:"GRS80",datumName:"North_American_Datum_1983"},NAD27:{nadgrids:"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat",ellipse:"clrk66",datumName:"North_American_Datum_1927"},potsdam:{towgs84:"606.0,23.0,413.0",ellipse:"bessel",datumName:"Potsdam Rauenberg 1950 DHDN"},carthage:{towgs84:"-263.0,6.0,431.0",ellipse:"clark80",datumName:"Carthage 1934 Tunisia"},hermannskogel:{towgs84:"653.0,-212.0,449.0",ellipse:"bessel",datumName:"Hermannskogel"},ire65:{towgs84:"482.530,-130.596,564.557,-1.042,-0.214,-0.631,8.15",ellipse:"mod_airy",datumName:"Ireland 1965"},nzgd49:{towgs84:"59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993",ellipse:"intl",datumName:"New Zealand Geodetic Datum 1949"},OSGB36:{towgs84:"446.448,-125.157,542.060,0.1502,0.2470,0.8421,-20.4894",ellipse:"airy",datumName:"Airy 1830"}},Proj4js.WGS84=new Proj4js.Proj("WGS84"),Proj4js.Datum.OSB36=Proj4js.Datum.OSGB36,Proj4js.wktProjections={"Lambert Tangential Conformal Conic Projection":"lcc",Mercator:"merc","Popular Visualisation Pseudo Mercator":"merc",Mercator_1SP:"merc",Transverse_Mercator:"tmerc","Transverse Mercator":"tmerc","Lambert Azimuthal Equal Area":"laea","Universal Transverse Mercator System":"utm"},Proj4js.Proj.aea={init:function(){return Math.abs(this.lat1+this.lat2)Proj4js.common.EPSLN?(this.ms1*this.ms1-this.ms2*this.ms2)/(this.qs2-this.qs1):this.con,this.c=this.ms1*this.ms1+this.ns0*this.qs1,this.rh=this.a*Math.sqrt(this.c-this.ns0*this.qs0)/this.ns0,void 0)},forward:function(t){var i=t.x,s=t.y;this.sin_phi=Math.sin(s),this.cos_phi=Math.cos(s);var e=Proj4js.common.qsfnz(this.e3,this.sin_phi,this.cos_phi),o=this.a*Math.sqrt(this.c-this.ns0*e)/this.ns0,n=this.ns0*Proj4js.common.adjust_lon(i-this.long0),a=o*Math.sin(n)+this.x0,r=this.rh-o*Math.cos(n)+this.y0;return t.x=a,t.y=r,t},inverse:function(t){var i,s,e,o,n,a;return t.x-=this.x0,t.y=this.rh-t.y+this.y0,this.ns0>=0?(i=Math.sqrt(t.x*t.x+t.y*t.y),e=1):(i=-Math.sqrt(t.x*t.x+t.y*t.y),e=-1),o=0,0!=i&&(o=Math.atan2(e*t.x,e*t.y)),e=i*this.ns0/this.a,s=(this.c-e*e)/this.ns0,this.e3>=1e-10?(e=1-.5*(1-this.es)*Math.log((1-this.e3)/(1+this.e3))/this.e3,a=Math.abs(Math.abs(e)-Math.abs(s))>1e-10?this.phi1z(this.e3,s):s>=0?.5*Proj4js.common.PI:-.5*Proj4js.common.PI):a=this.phi1z(this.e3,s),n=Proj4js.common.adjust_lon(o/this.ns0+this.long0),t.x=n,t.y=a,t},phi1z:function(t,i){var s,e,o,n,a,r=Proj4js.common.asinz(.5*i);if(Proj4js.common.EPSLN>t)return r;for(var h=t*t,l=1;25>=l;l++)if(s=Math.sin(r),e=Math.cos(r),o=t*s,n=1-o*o,a=.5*n*n/e*(i/(1-h)-s/n+.5/t*Math.log((1-o)/(1+o))),r+=a,1e-7>=Math.abs(a))return r;return Proj4js.reportError("aea:phi1z:Convergence error"),null}},Proj4js.Proj.sterea={dependsOn:"gauss",init:function(){return Proj4js.Proj.gauss.init.apply(this),this.rc?(this.sinc0=Math.sin(this.phic0),this.cosc0=Math.cos(this.phic0),this.R2=2*this.rc,this.title||(this.title="Oblique Stereographic Alternative"),void 0):(Proj4js.reportError("sterea:init:E_ERROR_0"),void 0)},forward:function(t){var i,s,e,o;return t.x=Proj4js.common.adjust_lon(t.x-this.long0),Proj4js.Proj.gauss.forward.apply(this,[t]),i=Math.sin(t.y),s=Math.cos(t.y),e=Math.cos(t.x),o=this.k0*this.R2/(1+this.sinc0*i+this.cosc0*s*e),t.x=o*s*Math.sin(t.x),t.y=o*(this.cosc0*i-this.sinc0*s*e),t.x=this.a*t.x+this.x0,t.y=this.a*t.y+this.y0,t},inverse:function(t){var i,s,e,o,n;if(t.x=(t.x-this.x0)/this.a,t.y=(t.y-this.y0)/this.a,t.x/=this.k0,t.y/=this.k0,n=Math.sqrt(t.x*t.x+t.y*t.y)){var a=2*Math.atan2(n,this.R2);i=Math.sin(a),s=Math.cos(a),o=Math.asin(s*this.sinc0+t.y*i*this.cosc0/n),e=Math.atan2(t.x*i,n*this.cosc0*s-t.y*this.sinc0*i)}else o=this.phic0,e=0;return t.x=e,t.y=o,Proj4js.Proj.gauss.inverse.apply(this,[t]),t.x=Proj4js.common.adjust_lon(t.x+this.long0),t}},Proj4js.Proj.poly={init:function(){0==this.lat0&&(this.lat0=90),this.temp=this.b/this.a,this.es=1-Math.pow(this.temp,2),this.e=Math.sqrt(this.es),this.e0=Proj4js.common.e0fn(this.es),this.e1=Proj4js.common.e1fn(this.es),this.e2=Proj4js.common.e2fn(this.es),this.e3=Proj4js.common.e3fn(this.es),this.ml0=Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,this.lat0)},forward:function(t){var i,s,e,o,n,a,r,h=t.x,l=t.y;return e=Proj4js.common.adjust_lon(h-this.long0),1e-7>=Math.abs(l)?(a=this.x0+this.a*e,r=this.y0-this.a*this.ml0):(i=Math.sin(l),s=Math.cos(l),o=Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,l),n=Proj4js.common.msfnz(this.e,i,s),e=i,a=this.x0+this.a*n*Math.sin(e)/i,r=this.y0+this.a*(o-this.ml0+n*(1-Math.cos(e))/i)),t.x=a,t.y=r,t},inverse:function(t){var i,s,e,o,n,a;if(t.x-=this.x0,t.y-=this.y0,i=this.ml0+t.y/this.a,o=0,1e-7>=Math.abs(i))n=t.x/this.a+this.long0,a=0;else{if(s=i*i+t.x/this.a*(t.x/this.a),o=phi4z(this.es,this.e0,this.e1,this.e2,this.e3,this.al,s,e,a),1!=o)return o;n=Proj4js.common.adjust_lon(Proj4js.common.asinz(t.x*e/this.a)/Math.sin(a)+this.long0)}return t.x=n,t.y=a,t}},Proj4js.Proj.equi={init:function(){this.x0||(this.x0=0),this.y0||(this.y0=0),this.lat0||(this.lat0=0),this.long0||(this.long0=0)},forward:function(t){var i=t.x,s=t.y,e=Proj4js.common.adjust_lon(i-this.long0),o=this.x0+this.a*e*Math.cos(this.lat0),n=this.y0+this.a*s;return this.t1=o,this.t2=Math.cos(this.lat0),t.x=o,t.y=n,t},inverse:function(t){t.x-=this.x0,t.y-=this.y0;var i=t.y/this.a;Math.abs(i)>Proj4js.common.HALF_PI&&Proj4js.reportError("equi:Inv:DataError");var s=Proj4js.common.adjust_lon(this.long0+t.x/(this.a*Math.cos(this.lat0)));t.x=s,t.y=i}},Proj4js.Proj.merc={init:function(){this.lat_ts&&(this.k0=this.sphere?Math.cos(this.lat_ts):Proj4js.common.msfnz(this.es,Math.sin(this.lat_ts),Math.cos(this.lat_ts)))},forward:function(t){var i=t.x,s=t.y;if(s*Proj4js.common.R2D>90&&-90>s*Proj4js.common.R2D&&i*Proj4js.common.R2D>180&&-180>i*Proj4js.common.R2D)return Proj4js.reportError("merc:forward: llInputOutOfRange: "+i+" : "+s),null;var e,o;if(Math.abs(Math.abs(s)-Proj4js.common.HALF_PI)<=Proj4js.common.EPSLN)return Proj4js.reportError("merc:forward: ll2mAtPoles"),null;if(this.sphere)e=this.x0+this.a*this.k0*Proj4js.common.adjust_lon(i-this.long0),o=this.y0+this.a*this.k0*Math.log(Math.tan(Proj4js.common.FORTPI+.5*s));else{var n=Math.sin(s),a=Proj4js.common.tsfnz(this.e,s,n);e=this.x0+this.a*this.k0*Proj4js.common.adjust_lon(i-this.long0),o=this.y0-this.a*this.k0*Math.log(a)}return t.x=e,t.y=o,t},inverse:function(t){var i,s,e=t.x-this.x0,o=t.y-this.y0;if(this.sphere)s=Proj4js.common.HALF_PI-2*Math.atan(Math.exp(-o/this.a*this.k0));else{var n=Math.exp(-o/(this.a*this.k0));if(s=Proj4js.common.phi2z(this.e,n),-9999==s)return Proj4js.reportError("merc:inverse: lat = -9999"),null}return i=Proj4js.common.adjust_lon(this.long0+e/(this.a*this.k0)),t.x=i,t.y=s,t}},Proj4js.Proj.utm={dependsOn:"tmerc",init:function(){return this.zone?(this.lat0=0,this.long0=(6*Math.abs(this.zone)-183)*Proj4js.common.D2R,this.x0=5e5,this.y0=this.utmSouth?1e7:0,this.k0=.9996,Proj4js.Proj.tmerc.init.apply(this),this.forward=Proj4js.Proj.tmerc.forward,this.inverse=Proj4js.Proj.tmerc.inverse,void 0):(Proj4js.reportError("utm:init: zone must be specified for UTM"),void 0)}},Proj4js.Proj.eqdc={init:function(){this.mode||(this.mode=0),this.temp=this.b/this.a,this.es=1-Math.pow(this.temp,2),this.e=Math.sqrt(this.es),this.e0=Proj4js.common.e0fn(this.es),this.e1=Proj4js.common.e1fn(this.es),this.e2=Proj4js.common.e2fn(this.es),this.e3=Proj4js.common.e3fn(this.es),this.sinphi=Math.sin(this.lat1),this.cosphi=Math.cos(this.lat1),this.ms1=Proj4js.common.msfnz(this.e,this.sinphi,this.cosphi),this.ml1=Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,this.lat1),0!=this.mode?(Math.abs(this.lat1+this.lat2)=Proj4js.common.EPSLN?(this.ms1-this.ms2)/(this.ml2-this.ml1):this.sinphi):this.ns=this.sinphi,this.g=this.ml1+this.ms1/this.ns,this.ml0=Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,this.lat0),this.rh=this.a*(this.g-this.ml0) +},forward:function(t){var i=t.x,s=t.y,e=Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,s),o=this.a*(this.g-e),n=this.ns*Proj4js.common.adjust_lon(i-this.long0),a=this.x0+o*Math.sin(n),r=this.y0+this.rh-o*Math.cos(n);return t.x=a,t.y=r,t},inverse:function(t){t.x-=this.x0,t.y=this.rh-t.y+this.y0;var i,s;this.ns>=0?(s=Math.sqrt(t.x*t.x+t.y*t.y),i=1):(s=-Math.sqrt(t.x*t.x+t.y*t.y),i=-1);var e=0;0!=s&&(e=Math.atan2(i*t.x,i*t.y));var o=this.g-s/this.a,n=this.phi3z(o,this.e0,this.e1,this.e2,this.e3),a=Proj4js.common.adjust_lon(this.long0+e/this.ns);return t.x=a,t.y=n,t},phi3z:function(t,i,s,e,o){var n,a;n=t;for(var r=0;15>r;r++)if(a=(t+s*Math.sin(2*n)-e*Math.sin(4*n)+o*Math.sin(6*n))/i-n,n+=a,1e-10>=Math.abs(a))return n;return Proj4js.reportError("PHI3Z-CONV:Latitude failed to converge after 15 iterations"),null}},Proj4js.Proj.tmerc={init:function(){this.e0=Proj4js.common.e0fn(this.es),this.e1=Proj4js.common.e1fn(this.es),this.e2=Proj4js.common.e2fn(this.es),this.e3=Proj4js.common.e3fn(this.es),this.ml0=this.a*Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,this.lat0)},forward:function(t){var i,s,e,o=t.x,n=t.y,a=Proj4js.common.adjust_lon(o-this.long0),r=Math.sin(n),h=Math.cos(n);if(this.sphere){var l=h*Math.sin(a);if(1e-10>Math.abs(Math.abs(l)-1))return Proj4js.reportError("tmerc:forward: Point projects into infinity"),93;s=.5*this.a*this.k0*Math.log((1+l)/(1-l)),i=Math.acos(h*Math.cos(a)/Math.sqrt(1-l*l)),0>n&&(i=-i),e=this.a*this.k0*(i-this.lat0)}else{var c=h*a,m=Math.pow(c,2),u=this.ep2*Math.pow(h,2),d=Math.tan(n),p=Math.pow(d,2);i=1-this.es*Math.pow(r,2);var _=this.a/Math.sqrt(i),f=this.a*Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,n);s=this.k0*_*c*(1+m/6*(1-p+u+m/20*(5-18*p+Math.pow(p,2)+72*u-58*this.ep2)))+this.x0,e=this.k0*(f-this.ml0+_*d*m*(.5+m/24*(5-p+9*u+4*Math.pow(u,2)+m/30*(61-58*p+Math.pow(p,2)+600*u-330*this.ep2))))+this.y0}return t.x=s,t.y=e,t},inverse:function(t){var i,s,e,o,n,a,r=6;if(this.sphere){var h=Math.exp(t.x/(this.a*this.k0)),l=.5*(h-1/h),c=this.lat0+t.y/(this.a*this.k0),m=Math.cos(c);i=Math.sqrt((1-m*m)/(1+l*l)),n=Proj4js.common.asinz(i),0>c&&(n=-n),a=0==l&&0==m?this.long0:Proj4js.common.adjust_lon(Math.atan2(l,m)+this.long0)}else{var u=t.x-this.x0,d=t.y-this.y0;for(i=(this.ml0+d/this.k0)/this.a,s=i,o=0;!0&&(e=(i+this.e1*Math.sin(2*s)-this.e2*Math.sin(4*s)+this.e3*Math.sin(6*s))/this.e0-s,s+=e,!(Math.abs(e)<=Proj4js.common.EPSLN));o++)if(o>=r)return Proj4js.reportError("tmerc:inverse: Latitude failed to converge"),95;if(Math.abs(s)0||Math.abs(a)<=Proj4js.common.EPSLN)var l=this.a*n*s*Math.sin(e),c=this.y0+this.a*n*(this.cos_p14*i-this.sin_p14*s*o);else Proj4js.reportError("orthoFwdPointError");return t.x=l,t.y=c,t},inverse:function(t){var i,s,e,o,n,a,r;return t.x-=this.x0,t.y-=this.y0,i=Math.sqrt(t.x*t.x+t.y*t.y),i>this.a+1e-7&&Proj4js.reportError("orthoInvDataError"),s=Proj4js.common.asinz(i/this.a),e=Math.sin(s),o=Math.cos(s),a=this.long0,Math.abs(i)<=Proj4js.common.EPSLN&&(r=this.lat0),r=Proj4js.common.asinz(o*this.sin_p14+t.y*e*this.cos_p14/i),n=Math.abs(this.lat0)-Proj4js.common.HALF_PI,Math.abs(n)<=Proj4js.common.EPSLN&&(a=this.lat0>=0?Proj4js.common.adjust_lon(this.long0+Math.atan2(t.x,-t.y)):Proj4js.common.adjust_lon(this.long0-Math.atan2(-t.x,t.y))),n=o-this.sin_p14*Math.sin(r),t.x=a,t.y=r,t}},Proj4js.Proj.krovak={init:function(){this.a=6377397.155,this.es=.006674372230614,this.e=Math.sqrt(this.es),this.lat0||(this.lat0=.863937979737193),this.long0||(this.long0=.4334234309119251),this.k0||(this.k0=.9999),this.s45=.785398163397448,this.s90=2*this.s45,this.fi0=this.lat0,this.e2=this.es,this.e=Math.sqrt(this.e2),this.alfa=Math.sqrt(1+this.e2*Math.pow(Math.cos(this.fi0),4)/(1-this.e2)),this.uq=1.04216856380474,this.u0=Math.asin(Math.sin(this.fi0)/this.alfa),this.g=Math.pow((1+this.e*Math.sin(this.fi0))/(1-this.e*Math.sin(this.fi0)),this.alfa*this.e/2),this.k=Math.tan(this.u0/2+this.s45)/Math.pow(Math.tan(this.fi0/2+this.s45),this.alfa)*this.g,this.k1=this.k0,this.n0=this.a*Math.sqrt(1-this.e2)/(1-this.e2*Math.pow(Math.sin(this.fi0),2)),this.s0=1.37008346281555,this.n=Math.sin(this.s0),this.ro0=this.k1*this.n0/Math.tan(this.s0),this.ad=this.s90-this.uq},forward:function(t){var i,s,e,o,n,a,r,h=t.x,l=t.y,c=Proj4js.common.adjust_lon(h-this.long0);return i=Math.pow((1+this.e*Math.sin(l))/(1-this.e*Math.sin(l)),this.alfa*this.e/2),s=2*(Math.atan(this.k*Math.pow(Math.tan(l/2+this.s45),this.alfa)/i)-this.s45),e=-c*this.alfa,o=Math.asin(Math.cos(this.ad)*Math.sin(s)+Math.sin(this.ad)*Math.cos(s)*Math.cos(e)),n=Math.asin(Math.cos(s)*Math.sin(e)/Math.cos(o)),a=this.n*n,r=this.ro0*Math.pow(Math.tan(this.s0/2+this.s45),this.n)/Math.pow(Math.tan(o/2+this.s45),this.n),t.y=r*Math.cos(a)/1,t.x=r*Math.sin(a)/1,this.czech&&(t.y*=-1,t.x*=-1),t},inverse:function(t){var i,s,e,o,n,a,r,h,l=t.x;t.x=t.y,t.y=l,this.czech&&(t.y*=-1,t.x*=-1),a=Math.sqrt(t.x*t.x+t.y*t.y),n=Math.atan2(t.y,t.x),o=n/Math.sin(this.s0),e=2*(Math.atan(Math.pow(this.ro0/a,1/this.n)*Math.tan(this.s0/2+this.s45))-this.s45),i=Math.asin(Math.cos(this.ad)*Math.sin(e)-Math.sin(this.ad)*Math.cos(e)*Math.cos(o)),s=Math.asin(Math.cos(e)*Math.sin(o)/Math.cos(i)),t.x=this.long0-s/this.alfa,r=i,h=0;var c=0;do t.y=2*(Math.atan(Math.pow(this.k,-1/this.alfa)*Math.pow(Math.tan(i/2+this.s45),1/this.alfa)*Math.pow((1+this.e*Math.sin(r))/(1-this.e*Math.sin(r)),this.e/2))-this.s45),1e-10>Math.abs(r-t.y)&&(h=1),r=t.y,c+=1;while(0==h&&15>c);return c>=15?(Proj4js.reportError("PHI3Z-CONV:Latitude failed to converge after 15 iterations"),null):t}},Proj4js.Proj.somerc={init:function(){var t=this.lat0;this.lambda0=this.long0;var i=Math.sin(t),s=this.a,e=this.rf,o=1/e,n=2*o-Math.pow(o,2),a=this.e=Math.sqrt(n);this.R=this.k0*s*Math.sqrt(1-n)/(1-n*Math.pow(i,2)),this.alpha=Math.sqrt(1+n/(1-n)*Math.pow(Math.cos(t),4)),this.b0=Math.asin(i/this.alpha),this.K=Math.log(Math.tan(Math.PI/4+this.b0/2))-this.alpha*Math.log(Math.tan(Math.PI/4+t/2))+this.alpha*a/2*Math.log((1+a*i)/(1-a*i))},forward:function(t){var i=Math.log(Math.tan(Math.PI/4-t.y/2)),s=this.e/2*Math.log((1+this.e*Math.sin(t.y))/(1-this.e*Math.sin(t.y))),e=-this.alpha*(i+s)+this.K,o=2*(Math.atan(Math.exp(e))-Math.PI/4),n=this.alpha*(t.x-this.lambda0),a=Math.atan(Math.sin(n)/(Math.sin(this.b0)*Math.tan(o)+Math.cos(this.b0)*Math.cos(n))),r=Math.asin(Math.cos(this.b0)*Math.sin(o)-Math.sin(this.b0)*Math.cos(o)*Math.cos(n));return t.y=this.R/2*Math.log((1+Math.sin(r))/(1-Math.sin(r)))+this.y0,t.x=this.R*a+this.x0,t},inverse:function(t){for(var i=t.x-this.x0,s=t.y-this.y0,e=i/this.R,o=2*(Math.atan(Math.exp(s/this.R))-Math.PI/4),n=Math.asin(Math.cos(this.b0)*Math.sin(o)+Math.sin(this.b0)*Math.cos(o)*Math.cos(e)),a=Math.atan(Math.sin(e)/(Math.cos(this.b0)*Math.cos(e)-Math.sin(this.b0)*Math.tan(o))),r=this.lambda0+a/this.alpha,h=0,l=n,c=-1e3,m=0;Math.abs(l-c)>1e-7;){if(++m>20)return Proj4js.reportError("omercFwdInfinity"),void 0;h=1/this.alpha*(Math.log(Math.tan(Math.PI/4+n/2))-this.K)+this.e*Math.log(Math.tan(Math.PI/4+Math.asin(this.e*Math.sin(l))/2)),c=l,l=2*Math.atan(Math.exp(h))-Math.PI/2}return t.x=r,t.y=l,t}},Proj4js.Proj.stere={ssfn_:function(t,i,s){return i*=s,Math.tan(.5*(Proj4js.common.HALF_PI+t))*Math.pow((1-i)/(1+i),.5*s)},TOL:1e-8,NITER:8,CONV:1e-10,S_POLE:0,N_POLE:1,OBLIQ:2,EQUIT:3,init:function(){this.phits=this.lat_ts?this.lat_ts:Proj4js.common.HALF_PI;var t=Math.abs(this.lat0);if(this.mode=Math.abs(t)-Proj4js.common.HALF_PIthis.lat0?this.S_POLE:this.N_POLE:t>Proj4js.common.EPSLN?this.OBLIQ:this.EQUIT,this.phits=Math.abs(this.phits),this.es){var i;switch(this.mode){case this.N_POLE:case this.S_POLE:Math.abs(this.phits-Proj4js.common.HALF_PI)=Proj4js.common.EPSLN?Math.cos(this.phits)/Math.tan(Proj4js.common.FORTPI-.5*this.phits):2*this.k0}},forward:function(t){var i=t.x;i=Proj4js.common.adjust_lon(i-this.long0);var s,e,o=t.y;if(this.sphere){var n,a,r,h;switch(n=Math.sin(o),a=Math.cos(o),r=Math.cos(i),h=Math.sin(i),this.mode){case this.EQUIT:e=1+a*r,Proj4js.common.EPSLN>=e&&Proj4js.reportError("stere:forward:Equit"),e=this.akm1/e,s=e*a*h,e*=n;break;case this.OBLIQ:e=1+this.sinph0*n+this.cosph0*a*r,Proj4js.common.EPSLN>=e&&Proj4js.reportError("stere:forward:Obliq"),e=this.akm1/e,s=e*a*h,e*=this.cosph0*n-this.sinph0*a*r;break;case this.N_POLE:r=-r,o=-o;case this.S_POLE:Math.abs(o-Proj4js.common.HALF_PI)=l;l++)r*=n,h+=this.A[l]*r;for(var c,m,u=h,d=a,p=1,_=0,f=0,P=0,l=1;6>=l;l++)c=p*u-_*d,m=_*u+p*d,p=c,_=m,f=f+this.B_re[l]*p-this.B_im[l]*_,P=P+this.B_im[l]*p+this.B_re[l]*_;return t.x=P*this.a+this.x0,t.y=f*this.a+this.y0,t},inverse:function(t){for(var i,s,e=t.x,o=t.y,n=e-this.x0,a=o-this.y0,r=a/this.a,h=n/this.a,l=1,c=0,m=0,u=0,d=1;6>=d;d++)i=l*r-c*h,s=c*r+l*h,l=i,c=s,m=m+this.C_re[d]*l-this.C_im[d]*c,u=u+this.C_im[d]*l+this.C_re[d]*c;for(var p=0;this.iterations>p;p++){for(var _,f,P=m,y=u,g=r,L=h,d=2;6>=d;d++)_=P*m-y*u,f=y*m+P*u,P=_,y=f,g+=(d-1)*(this.B_re[d]*P-this.B_im[d]*y),L+=(d-1)*(this.B_im[d]*P+this.B_re[d]*y);P=1,y=0;for(var v=this.B_re[1],j=this.B_im[1],d=2;6>=d;d++)_=P*m-y*u,f=y*m+P*u,P=_,y=f,v+=d*(this.B_re[d]*P-this.B_im[d]*y),j+=d*(this.B_im[d]*P+this.B_re[d]*y);var M=v*v+j*j;m=(g*v+L*j)/M,u=(L*v-g*j)/M}for(var S=m,b=u,x=1,E=0,d=1;9>=d;d++)x*=S,E+=this.D[d]*x;var C=this.lat0+1e5*E*Proj4js.common.SEC_TO_RAD,w=this.long0+b;return t.x=w,t.y=C,t}},Proj4js.Proj.mill={init:function(){},forward:function(t){var i=t.x,s=t.y,e=Proj4js.common.adjust_lon(i-this.long0),o=this.x0+this.a*e,n=this.y0+1.25*this.a*Math.log(Math.tan(Proj4js.common.PI/4+s/2.5));return t.x=o,t.y=n,t},inverse:function(t){t.x-=this.x0,t.y-=this.y0;var i=Proj4js.common.adjust_lon(this.long0+t.x/this.a),s=2.5*(Math.atan(Math.exp(.8*t.y/this.a))-Proj4js.common.PI/4);return t.x=i,t.y=s,t}},Proj4js.Proj.gnom={init:function(){this.sin_p14=Math.sin(this.lat0),this.cos_p14=Math.cos(this.lat0),this.infinity_dist=1e3*this.a,this.rc=1},forward:function(t){var i,s,e,o,n,a,r,h,l=t.x,c=t.y;return e=Proj4js.common.adjust_lon(l-this.long0),i=Math.sin(c),s=Math.cos(c),o=Math.cos(e),a=this.sin_p14*i+this.cos_p14*s*o,n=1,a>0||Math.abs(a)<=Proj4js.common.EPSLN?(r=this.x0+this.a*n*s*Math.sin(e)/a,h=this.y0+this.a*n*(this.cos_p14*i-this.sin_p14*s*o)/a):(Proj4js.reportError("orthoFwdPointError"),r=this.x0+this.infinity_dist*s*Math.sin(e),h=this.y0+this.infinity_dist*(this.cos_p14*i-this.sin_p14*s*o)),t.x=r,t.y=h,t},inverse:function(t){var i,s,e,o,n,a;return t.x=(t.x-this.x0)/this.a,t.y=(t.y-this.y0)/this.a,t.x/=this.k0,t.y/=this.k0,(i=Math.sqrt(t.x*t.x+t.y*t.y))?(o=Math.atan2(i,this.rc),s=Math.sin(o),e=Math.cos(o),a=Proj4js.common.asinz(e*this.sin_p14+t.y*s*this.cos_p14/i),n=Math.atan2(t.x*s,i*this.cos_p14*e-t.y*this.sin_p14*s),n=Proj4js.common.adjust_lon(this.long0+n)):(a=this.phic0,n=0),t.x=n,t.y=a,t}},Proj4js.Proj.sinu={init:function(){this.sphere?(this.n=1,this.m=0,this.es=0,this.C_y=Math.sqrt((this.m+1)/this.n),this.C_x=this.C_y/(this.m+1)):this.en=Proj4js.common.pj_enfn(this.es)},forward:function(t){var i,s,e=t.x,o=t.y;if(e=Proj4js.common.adjust_lon(e-this.long0),this.sphere){if(this.m)for(var n=this.n*Math.sin(o),a=Proj4js.common.MAX_ITER;a;--a){var r=(this.m*o+Math.sin(o)-n)/(this.m+Math.cos(o));if(o-=r,Math.abs(r)o?(o=Math.sin(i),s=this.long0+t.x*Math.sqrt(1-this.es*o*o)/(this.a*Math.cos(i)),e=Proj4js.common.adjust_lon(s)):o-Proj4js.common.EPSLN=0?this.y0+Proj4js.common.PI*this.R*Math.tan(.5*a):this.y0+Proj4js.common.PI*this.R*-Math.tan(.5*a));var r=.5*Math.abs(Proj4js.common.PI/n-n/Proj4js.common.PI),h=r*r,l=Math.sin(a),c=Math.cos(a),m=c/(l+c-1),u=m*m,d=m*(2/l-1),p=d*d,_=Proj4js.common.PI*this.R*(r*(m-p)+Math.sqrt(h*(m-p)*(m-p)-(p+h)*(u-p)))/(p+h);return 0>n&&(_=-_),i=this.x0+_,_=Math.abs(_/(Proj4js.common.PI*this.R)),s=o>=0?this.y0+Proj4js.common.PI*this.R*Math.sqrt(1-_*_-2*r*_):this.y0-Proj4js.common.PI*this.R*Math.sqrt(1-_*_-2*r*_),t.x=i,t.y=s,t},inverse:function(t){var i,s,e,o,n,a,r,h,l,c,m,u,d;return t.x-=this.x0,t.y-=this.y0,m=Proj4js.common.PI*this.R,e=t.x/m,o=t.y/m,n=e*e+o*o,a=-Math.abs(o)*(1+n),r=a-2*o*o+e*e,h=-2*a+1+2*o*o+n*n,d=o*o/h+(2*r*r*r/h/h/h-9*a*r/h/h)/27,l=(a-r*r/3/h)/h,c=2*Math.sqrt(-l/3),m=3*d/l/c,Math.abs(m)>1&&(m=m>=0?1:-1),u=Math.acos(m)/3,s=t.y>=0?(-c*Math.cos(u+Proj4js.common.PI/3)-r/3/h)*Proj4js.common.PI:-(-c*Math.cos(u+Proj4js.common.PI/3)-r/3/h)*Proj4js.common.PI,Math.abs(e)0&&(e=2*Math.atan(o*Proj4js.common.srat(this.e*Math.sin(t.y),-.5*this.e))-Proj4js.common.HALF_PI,!(i>Math.abs(e-t.y)));--n)t.y=e;return n?(t.x=s,t.y=e,t):(Proj4js.reportError("gauss:inverse:convergence failed"),null)}},Proj4js.Proj.omerc={init:function(){this.mode||(this.mode=0),this.lon1||(this.lon1=0,this.mode=1),this.lon2||(this.lon2=0),this.lat2||(this.lat2=0);var t=this.b/this.a,i=1-Math.pow(t,2);Math.sqrt(i),this.sin_p20=Math.sin(this.lat0),this.cos_p20=Math.cos(this.lat0),this.con=1-this.es*this.sin_p20*this.sin_p20,this.com=Math.sqrt(1-i),this.bl=Math.sqrt(1+this.es*Math.pow(this.cos_p20,4)/(1-i)),this.al=this.a*this.bl*this.k0*this.com/this.con,Math.abs(this.lat0)0?this.lat0>=0?this.d+Math.sqrt(this.d*this.d-1):this.d-Math.sqrt(this.d*this.d-1):this.d,this.el=this.f*Math.pow(this.ts,this.bl)),0!=this.mode?(this.g=.5*(this.f-1/this.f),this.gama=Proj4js.common.asinz(Math.sin(this.alpha)/this.d),this.longc=this.longc-Proj4js.common.asinz(this.g*Math.tan(this.gama))/this.bl,this.con=Math.abs(this.lat0),this.con>Proj4js.common.EPSLN&&Math.abs(this.con-Proj4js.common.HALF_PI)>Proj4js.common.EPSLN?(this.singam=Math.sin(this.gama),this.cosgam=Math.cos(this.gama),this.sinaz=Math.sin(this.alpha),this.cosaz=Math.cos(this.alpha),this.u=this.lat0>=0?this.al/this.bl*Math.atan(Math.sqrt(this.d*this.d-1)/this.cosaz):-(this.al/this.bl)*Math.atan(Math.sqrt(this.d*this.d-1)/this.cosaz)):Proj4js.reportError("omerc:Init:DataError")):(this.sinphi=Math.sin(this.at1),this.ts1=Proj4js.common.tsfnz(this.e,this.lat1,this.sinphi),this.sinphi=Math.sin(this.lat2),this.ts2=Proj4js.common.tsfnz(this.e,this.lat2,this.sinphi),this.h=Math.pow(this.ts1,this.bl),this.l=Math.pow(this.ts2,this.bl),this.f=this.el/this.h,this.g=.5*(this.f-1/this.f),this.j=(this.el*this.el-this.l*this.h)/(this.el*this.el+this.l*this.h),this.p=(this.l-this.h)/(this.l+this.h),this.dlon=this.lon1-this.lon2,this.dlon<-Proj4js.common.PI&&(this.lon2=this.lon2-2*Proj4js.common.PI),this.dlon>Proj4js.common.PI&&(this.lon2=this.lon2+2*Proj4js.common.PI),this.dlon=this.lon1-this.lon2,this.longc=.5*(this.lon1+this.lon2)-Math.atan(this.j*Math.tan(.5*this.bl*this.dlon)/this.p)/this.bl,this.dlon=Proj4js.common.adjust_lon(this.lon1-this.longc),this.gama=Math.atan(Math.sin(this.bl*this.dlon)/this.g),this.alpha=Proj4js.common.asinz(this.d*Math.sin(this.gama)),Math.abs(this.lat1-this.lat2)<=Proj4js.common.EPSLN?Proj4js.reportError("omercInitDataError"):this.con=Math.abs(this.lat1),this.con<=Proj4js.common.EPSLN||Math.abs(this.con-Proj4js.common.HALF_PI)<=Proj4js.common.EPSLN?Proj4js.reportError("omercInitDataError"):Math.abs(Math.abs(this.lat0)-Proj4js.common.HALF_PI)<=Proj4js.common.EPSLN&&Proj4js.reportError("omercInitDataError"),this.singam=Math.sin(this.gam),this.cosgam=Math.cos(this.gam),this.sinaz=Math.sin(this.alpha),this.cosaz=Math.cos(this.alpha),this.u=this.lat0>=0?this.al/this.bl*Math.atan(Math.sqrt(this.d*this.d-1)/this.cosaz):-(this.al/this.bl)*Math.atan(Math.sqrt(this.d*this.d-1)/this.cosaz))},forward:function(t){var i,s,e,o,n,a,r,h,l,c,m,u=t.x,d=t.y;i=Math.sin(d),c=Proj4js.common.adjust_lon(u-this.longc),a=Math.sin(this.bl*c),Math.abs(Math.abs(d)-Proj4js.common.HALF_PI)>Proj4js.common.EPSLN?(m=Proj4js.common.tsfnz(this.e,d,i),o=this.el/Math.pow(m,this.bl),l=.5*(o-1/o),s=.5*(o+1/o),r=(l*this.singam-a*this.cosgam)/s,e=Math.cos(this.bl*c),1e-7>Math.abs(e)?n=this.al*this.bl*c:(n=this.al*Math.atan((l*this.cosgam+a*this.singam)/e)/this.bl,0>e&&(n+=Proj4js.common.PI*this.al/this.bl))):(r=d>=0?this.singam:-this.singam,n=this.al*d/this.bl),Math.abs(Math.abs(r)-1)<=Proj4js.common.EPSLN&&Proj4js.reportError("omercFwdInfinity"),h=.5*this.al*Math.log((1-r)/(1+r))/this.bl,n-=this.u;var p=this.x0+h*this.cosaz+n*this.sinaz,_=this.y0+n*this.cosaz-h*this.sinaz;return t.x=p,t.y=_,t},inverse:function(t){var i,s,e,o,n,a,r,h,l,c,m,u,d;return t.x-=this.x0,t.y-=this.y0,d=0,o=t.x*this.cosaz-t.y*this.sinaz,n=t.y*this.cosaz+t.x*this.sinaz,n+=this.u,a=Math.exp(-this.bl*o/this.al),r=.5*(a-1/a),s=.5*(a+1/a),l=Math.sin(this.bl*n/this.al),c=(l*this.cosgam+r*this.singam)/s,Math.abs(Math.abs(c)-1)<=Proj4js.common.EPSLN?(m=this.longc,u=c>=0?Proj4js.common.HALF_PI:-Proj4js.common.HALF_PI):(e=1/this.bl,h=Math.pow(this.el/Math.sqrt((1+c)/(1-c)),e),u=Proj4js.common.phi2z(this.e,h),i=this.longc-Math.atan2(r*this.cosgam-l*this.singam,e)/this.bl,m=Proj4js.common.adjust_lon(i)),t.x=m,t.y=u,t}},Proj4js.Proj.lcc={init:function(){if(this.lat2||(this.lat2=this.lat0),this.k0||(this.k0=1),Math.abs(this.lat1+this.lat2)Proj4js.common.EPSLN?Math.log(e/r)/Math.log(o/h):i,this.f0=e/(this.ns*Math.pow(o,this.ns)),this.rh=this.a*this.f0*Math.pow(l,this.ns),this.title||(this.title="Lambert Conformal Conic")},forward:function(t){var i=t.x,s=t.y;if(!(90>=s&&s>=-90&&180>=i&&i>=-180))return Proj4js.reportError("lcc:forward: llInputOutOfRange: "+i+" : "+s),null;var e,o,n=Math.abs(Math.abs(s)-Proj4js.common.HALF_PI);if(n>Proj4js.common.EPSLN)e=Proj4js.common.tsfnz(this.e,s,Math.sin(s)),o=this.a*this.f0*Math.pow(e,this.ns);else{if(n=s*this.ns,0>=n)return Proj4js.reportError("lcc:forward: No Projection"),null;o=0}var a=this.ns*Proj4js.common.adjust_lon(i-this.long0);return t.x=this.k0*o*Math.sin(a)+this.x0,t.y=this.k0*(this.rh-o*Math.cos(a))+this.y0,t},inverse:function(t){var i,s,e,o,n,a=(t.x-this.x0)/this.k0,r=this.rh-(t.y-this.y0)/this.k0;this.ns>0?(i=Math.sqrt(a*a+r*r),s=1):(i=-Math.sqrt(a*a+r*r),s=-1);var h=0;if(0!=i&&(h=Math.atan2(s*a,s*r)),0!=i||this.ns>0){if(s=1/this.ns,e=Math.pow(i/(this.a*this.f0),s),o=Proj4js.common.phi2z(this.e,e),-9999==o)return null}else o=-Proj4js.common.HALF_PI;return n=Proj4js.common.adjust_lon(h/this.ns+this.long0),t.x=n,t.y=o,t}},Proj4js.Proj.laea={S_POLE:1,N_POLE:2,EQUIT:3,OBLIQ:4,init:function(){var t=Math.abs(this.lat0);if(this.mode=Math.abs(t-Proj4js.common.HALF_PI)this.lat0?this.S_POLE:this.N_POLE:Math.abs(t)0){var i;switch(this.qp=Proj4js.common.qsfnz(this.e,1),this.mmf=.5/(1-this.es),this.apa=this.authset(this.es),this.mode){case this.N_POLE:case this.S_POLE:this.dd=1;break;case this.EQUIT:this.rq=Math.sqrt(.5*this.qp),this.dd=1/this.rq,this.xmf=1,this.ymf=.5*this.qp;break;case this.OBLIQ:this.rq=Math.sqrt(.5*this.qp),i=Math.sin(this.lat0),this.sinb1=Proj4js.common.qsfnz(this.e,i)/this.qp,this.cosb1=Math.sqrt(1-this.sinb1*this.sinb1),this.dd=Math.cos(this.lat0)/(Math.sqrt(1-this.es*i*i)*this.rq*this.cosb1),this.ymf=(this.xmf=this.rq)/this.dd,this.xmf*=this.dd}}else this.mode==this.OBLIQ&&(this.sinph0=Math.sin(this.lat0),this.cosph0=Math.cos(this.lat0))},forward:function(t){var i,s,e=t.x,o=t.y;if(e=Proj4js.common.adjust_lon(e-this.long0),this.sphere){var n,a,r;switch(r=Math.sin(o),a=Math.cos(o),n=Math.cos(e),this.mode){case this.OBLIQ:case this.EQUIT:if(s=this.mode==this.EQUIT?1+a*n:1+this.sinph0*r+this.cosph0*a*n,Proj4js.common.EPSLN>=s)return Proj4js.reportError("laea:fwd:y less than eps"),null;s=Math.sqrt(2/s),i=s*a*Math.sin(e),s*=this.mode==this.EQUIT?r:this.cosph0*r-this.sinph0*a*n;break;case this.N_POLE:n=-n;case this.S_POLE:if(Math.abs(o+this.phi0)=0?(i=(u=Math.sqrt(l))*h,s=n*(this.mode==this.S_POLE?u:-u)):i=s=0}}return t.x=this.a*i+this.x0,t.y=this.a*s+this.y0,t},inverse:function(t){t.x-=this.x0,t.y-=this.y0;var i,s,e=t.x/this.a,o=t.y/this.a;if(this.sphere){var n,a=0,r=0;if(n=Math.sqrt(e*e+o*o),s=.5*n,s>1)return Proj4js.reportError("laea:Inv:DataError"),null; +switch(s=2*Math.asin(s),(this.mode==this.OBLIQ||this.mode==this.EQUIT)&&(r=Math.sin(s),a=Math.cos(s)),this.mode){case this.EQUIT:s=Math.abs(n)<=Proj4js.common.EPSLN?0:Math.asin(o*r/n),e*=r,o=a*n;break;case this.OBLIQ:s=Math.abs(n)<=Proj4js.common.EPSLN?this.phi0:Math.asin(a*this.sinph0+o*r*this.cosph0/n),e*=r*this.cosph0,o=(a-Math.sin(s)*this.sinph0)*n;break;case this.N_POLE:o=-o,s=Proj4js.common.HALF_PI-s;break;case this.S_POLE:s-=Proj4js.common.HALF_PI}i=0!=o||this.mode!=this.EQUIT&&this.mode!=this.OBLIQ?Math.atan2(e,o):0}else{var h,l,c,m,u=0;switch(this.mode){case this.EQUIT:case this.OBLIQ:if(e/=this.dd,o*=this.dd,m=Math.sqrt(e*e+o*o),Proj4js.common.EPSLN>m)return t.x=0,t.y=this.phi0,t;l=2*Math.asin(.5*m/this.rq),h=Math.cos(l),e*=l=Math.sin(l),this.mode==this.OBLIQ?(u=h*this.sinb1+o*l*this.cosb1/m,c=this.qp*u,o=m*this.cosb1*h-o*this.sinb1*l):(u=o*l/m,c=this.qp*u,o=m*h);break;case this.N_POLE:o=-o;case this.S_POLE:if(c=e*e+o*o,!c)return t.x=0,t.y=this.phi0,t;u=1-c/this.qp,this.mode==this.S_POLE&&(u=-u)}i=Math.atan2(e,o),s=this.authlat(Math.asin(u),this.apa)}return t.x=Proj4js.common.adjust_lon(this.long0+i),t.y=s,t},P00:.3333333333333333,P01:.17222222222222222,P02:.10257936507936508,P10:.06388888888888888,P11:.0664021164021164,P20:.016415012942191543,authset:function(t){var i,s=[];return s[0]=t*this.P00,i=t*t,s[0]+=i*this.P01,s[1]=i*this.P10,i*=t,s[0]+=i*this.P02,s[1]+=i*this.P11,s[2]=i*this.P20,s},authlat:function(t,i){var s=t+t;return t+i[0]*Math.sin(s)+i[1]*Math.sin(s+s)+i[2]*Math.sin(s+s+s)}},Proj4js.Proj.aeqd={init:function(){this.sin_p12=Math.sin(this.lat0),this.cos_p12=Math.cos(this.lat0)},forward:function(t){var i=t.x;t.y;var s,e=Math.sin(t.y),o=Math.cos(t.y),n=Proj4js.common.adjust_lon(i-this.long0),a=Math.cos(n),r=this.sin_p12*e+this.cos_p12*o*a;if(Math.abs(Math.abs(r)-1)r)return Proj4js.reportError("aeqd:Fwd:PointError"),void 0}else{var h=Math.acos(r);s=h/Math.sin(h)}return t.x=this.x0+this.a*s*o*Math.sin(n),t.y=this.y0+this.a*s*(this.cos_p12*e-this.sin_p12*o*a),t},inverse:function(t){t.x-=this.x0,t.y-=this.y0;var i=Math.sqrt(t.x*t.x+t.y*t.y);if(i>2*Proj4js.common.HALF_PI*this.a)return Proj4js.reportError("aeqdInvDataError"),void 0;var s,e=i/this.a,o=Math.sin(e),n=Math.cos(e),a=this.long0;if(Math.abs(i)<=Proj4js.common.EPSLN)s=this.lat0;else{s=Proj4js.common.asinz(n*this.sin_p12+t.y*o*this.cos_p12/i);var r=Math.abs(this.lat0)-Proj4js.common.HALF_PI;Math.abs(r)<=Proj4js.common.EPSLN?a=this.lat0>=0?Proj4js.common.adjust_lon(this.long0+Math.atan2(t.x,-t.y)):Proj4js.common.adjust_lon(this.long0-Math.atan2(-t.x,t.y)):(r=n-this.sin_p12*Math.sin(s),Math.abs(r)=50&&Proj4js.reportError("moll:Fwd:IterationError")}o/=2,Proj4js.common.PI/2-Math.abs(s).999999999999&&(s=.999999999999);var i=Math.asin(s),e=Proj4js.common.adjust_lon(this.long0+t.x/(.900316316158*this.a*Math.cos(i)));-Proj4js.common.PI>e&&(e=-Proj4js.common.PI),e>Proj4js.common.PI&&(e=Proj4js.common.PI),s=(2*i+Math.sin(2*i))/Proj4js.common.PI,Math.abs(s)>1&&(s=1);var o=Math.asin(s);return t.x=e,t.y=o,t}},function(t,i,s){var e,o;typeof exports!=s+""?e=exports:(o=t.L,e={},e.noConflict=function(){return t.L=o,this},t.L=e),e.version="0.5.1",e.Util={extend:function(t){var i,s,e,o,n=Array.prototype.slice.call(arguments,1);for(s=0,e=n.length;e>s;s++){o=n[s]||{};for(i in o)o.hasOwnProperty(i)&&(t[i]=o[i])}return t},bind:function(t,i){var s=arguments.length>2?Array.prototype.slice.call(arguments,2):null;return function(){return t.apply(i,s||arguments)}},stamp:function(){var t=0,i="_leaflet_id";return function(s){return s[i]=s[i]||++t,s[i]}}(),limitExecByInterval:function(t,i,e){var o,n;return function a(){var r=arguments;return o?(n=!0,s):(o=!0,setTimeout(function(){o=!1,n&&(a.apply(e,r),n=!1)},i),t.apply(e,r),s)}},falseFn:function(){return!1},formatNum:function(t,i){var s=Math.pow(10,i||5);return Math.round(t*s)/s},splitWords:function(t){return t.replace(/^\s+|\s+$/g,"").split(/\s+/)},setOptions:function(t,i){return t.options=e.extend({},t.options,i),t.options},getParamString:function(t,i){var s=[];for(var e in t)t.hasOwnProperty(e)&&s.push(e+"="+t[e]);return(i&&-1!==i.indexOf("?")?"&":"?")+s.join("&")},template:function(t,i){return t.replace(/\{ *([\w_]+) *\}/g,function(t,s){var e=i[s];if(!i.hasOwnProperty(s))throw Error("No value provided for variable "+t);return e})},isArray:function(t){return"[object Array]"===Object.prototype.toString.call(t)},emptyImageUrl:"data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs="},function(){function i(i){var s,e,o=["webkit","moz","o","ms"];for(s=0;o.length>s&&!e;s++)e=t[o[s]+i];return e}function o(i){var s=+new Date,e=Math.max(0,16-(s-n));return n=s+e,t.setTimeout(i,e)}var n=0,a=t.requestAnimationFrame||i("RequestAnimationFrame")||o,r=t.cancelAnimationFrame||i("CancelAnimationFrame")||i("CancelRequestAnimationFrame")||function(i){t.clearTimeout(i)};e.Util.requestAnimFrame=function(i,n,r,h){return i=e.bind(i,n),r&&a===o?(i(),s):a.call(t,i,h)},e.Util.cancelAnimFrame=function(i){i&&r.call(t,i)}}(),e.extend=e.Util.extend,e.bind=e.Util.bind,e.stamp=e.Util.stamp,e.setOptions=e.Util.setOptions,e.Class=function(){},e.Class.extend=function(t){var i=function(){this.initialize&&this.initialize.apply(this,arguments),this._initHooks&&this.callInitHooks()},s=function(){};s.prototype=this.prototype;var o=new s;o.constructor=i,i.prototype=o;for(var n in this)this.hasOwnProperty(n)&&"prototype"!==n&&(i[n]=this[n]);t.statics&&(e.extend(i,t.statics),delete t.statics),t.includes&&(e.Util.extend.apply(null,[o].concat(t.includes)),delete t.includes),t.options&&o.options&&(t.options=e.extend({},o.options,t.options)),e.extend(o,t),o._initHooks=[];var a=this;return o.callInitHooks=function(){if(!this._initHooksCalled){a.prototype.callInitHooks&&a.prototype.callInitHooks.call(this),this._initHooksCalled=!0;for(var t=0,i=o._initHooks.length;i>t;t++)o._initHooks[t].call(this)}},i},e.Class.include=function(t){e.extend(this.prototype,t)},e.Class.mergeOptions=function(t){e.extend(this.prototype.options,t)},e.Class.addInitHook=function(t){var i=Array.prototype.slice.call(arguments,1),s="function"==typeof t?t:function(){this[t].apply(this,i)};this.prototype._initHooks=this.prototype._initHooks||[],this.prototype._initHooks.push(s)};var n="_leaflet_events";e.Mixin={},e.Mixin.Events={addEventListener:function(t,i,s){var o,a,r,h=this[n]=this[n]||{};if("object"==typeof t){for(o in t)t.hasOwnProperty(o)&&this.addEventListener(o,t[o],i);return this}for(t=e.Util.splitWords(t),a=0,r=t.length;r>a;a++)h[t[a]]=h[t[a]]||[],h[t[a]].push({action:i,context:s||this});return this},hasEventListeners:function(t){return n in this&&t in this[n]&&this[n][t].length>0},removeEventListener:function(t,i,s){var o,a,r,h,l,c=this[n];if("object"==typeof t){for(o in t)t.hasOwnProperty(o)&&this.removeEventListener(o,t[o],i);return this}for(t=e.Util.splitWords(t),a=0,r=t.length;r>a;a++)if(this.hasEventListeners(t[a]))for(h=c[t[a]],l=h.length-1;l>=0;l--)i&&h[l].action!==i||s&&h[l].context!==s||h.splice(l,1);return this},fireEvent:function(t,i){if(!this.hasEventListeners(t))return this;for(var s=e.extend({type:t,target:this},i),o=this[n][t].slice(),a=0,r=o.length;r>a;a++)o[a].action.call(o[a].context||this,s);return this}},e.Mixin.Events.on=e.Mixin.Events.addEventListener,e.Mixin.Events.off=e.Mixin.Events.removeEventListener,e.Mixin.Events.fire=e.Mixin.Events.fireEvent,function(){var o=!!t.ActiveXObject,n=o&&!t.XMLHttpRequest,a=o&&!i.querySelector,r=navigator.userAgent.toLowerCase(),h=-1!==r.indexOf("webkit"),l=-1!==r.indexOf("chrome"),c=-1!==r.indexOf("android"),m=-1!==r.search("android [23]"),u=typeof orientation!=s+"",d=t.navigator&&t.navigator.msPointerEnabled&&t.navigator.msMaxTouchPoints,p="devicePixelRatio"in t&&t.devicePixelRatio>1||"matchMedia"in t&&t.matchMedia("(min-resolution:144dpi)")&&t.matchMedia("(min-resolution:144dpi)").matches,_=i.documentElement,f=o&&"transition"in _.style,P="WebKitCSSMatrix"in t&&"m11"in new t.WebKitCSSMatrix,y="MozPerspective"in _.style,g="OTransition"in _.style,L=!t.L_DISABLE_3D&&(f||P||y||g),v=!t.L_NO_TOUCH&&function(){var t="ontouchstart";if(d||t in _)return!0;var s=i.createElement("div"),e=!1;return s.setAttribute?(s.setAttribute(t,"return;"),"function"==typeof s[t]&&(e=!0),s.removeAttribute(t),s=null,e):!1}();e.Browser={ie:o,ie6:n,ie7:a,webkit:h,android:c,android23:m,chrome:l,ie3d:f,webkit3d:P,gecko3d:y,opera3d:g,any3d:L,mobile:u,mobileWebkit:u&&h,mobileWebkit3d:u&&P,mobileOpera:u&&t.opera,touch:v,msTouch:d,retina:p}}(),e.Point=function(t,i,s){this.x=s?Math.round(t):t,this.y=s?Math.round(i):i},e.Point.prototype={clone:function(){return new e.Point(this.x,this.y)},add:function(t){return this.clone()._add(e.point(t))},_add:function(t){return this.x+=t.x,this.y+=t.y,this},subtract:function(t){return this.clone()._subtract(e.point(t))},_subtract:function(t){return this.x-=t.x,this.y-=t.y,this},divideBy:function(t){return this.clone()._divideBy(t)},_divideBy:function(t){return this.x/=t,this.y/=t,this},multiplyBy:function(t){return this.clone()._multiplyBy(t)},_multiplyBy:function(t){return this.x*=t,this.y*=t,this},round:function(){return this.clone()._round()},_round:function(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this},floor:function(){return this.clone()._floor()},_floor:function(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this},distanceTo:function(t){t=e.point(t);var i=t.x-this.x,s=t.y-this.y;return Math.sqrt(i*i+s*s)},equals:function(t){return t.x===this.x&&t.y===this.y},toString:function(){return"Point("+e.Util.formatNum(this.x)+", "+e.Util.formatNum(this.y)+")"}},e.point=function(t,i,s){return t instanceof e.Point?t:e.Util.isArray(t)?new e.Point(t[0],t[1]):isNaN(t)?t:new e.Point(t,i,s)},e.Bounds=function(t,i){if(t)for(var s=i?[t,i]:t,e=0,o=s.length;o>e;e++)this.extend(s[e])},e.Bounds.prototype={extend:function(t){return t=e.point(t),this.min||this.max?(this.min.x=Math.min(t.x,this.min.x),this.max.x=Math.max(t.x,this.max.x),this.min.y=Math.min(t.y,this.min.y),this.max.y=Math.max(t.y,this.max.y)):(this.min=t.clone(),this.max=t.clone()),this},getCenter:function(t){return new e.Point((this.min.x+this.max.x)/2,(this.min.y+this.max.y)/2,t)},getBottomLeft:function(){return new e.Point(this.min.x,this.max.y)},getTopRight:function(){return new e.Point(this.max.x,this.min.y)},getSize:function(){return this.max.subtract(this.min)},contains:function(t){var i,s;return t="number"==typeof t[0]||t instanceof e.Point?e.point(t):e.bounds(t),t instanceof e.Bounds?(i=t.min,s=t.max):i=s=t,i.x>=this.min.x&&s.x<=this.max.x&&i.y>=this.min.y&&s.y<=this.max.y},intersects:function(t){t=e.bounds(t);var i=this.min,s=this.max,o=t.min,n=t.max,a=n.x>=i.x&&o.x<=s.x,r=n.y>=i.y&&o.y<=s.y;return a&&r},isValid:function(){return!(!this.min||!this.max)}},e.bounds=function(t,i){return!t||t instanceof e.Bounds?t:new e.Bounds(t,i)},e.Transformation=function(t,i,s,e){this._a=t,this._b=i,this._c=s,this._d=e},e.Transformation.prototype={transform:function(t,i){return this._transform(t.clone(),i)},_transform:function(t,i){return i=i||1,t.x=i*(this._a*t.x+this._b),t.y=i*(this._c*t.y+this._d),t},untransform:function(t,i){return i=i||1,new e.Point((t.x/i-this._b)/this._a,(t.y/i-this._d)/this._c)}},e.DomUtil={get:function(t){return"string"==typeof t?i.getElementById(t):t},getStyle:function(t,s){var e=t.style[s];if(!e&&t.currentStyle&&(e=t.currentStyle[s]),(!e||"auto"===e)&&i.defaultView){var o=i.defaultView.getComputedStyle(t,null);e=o?o[s]:null}return"auto"===e?null:e},getViewportOffset:function(t){var s,o=0,n=0,a=t,r=i.body,h=e.Browser.ie7;do{if(o+=a.offsetTop||0,n+=a.offsetLeft||0,o+=parseInt(e.DomUtil.getStyle(a,"borderTopWidth"),10)||0,n+=parseInt(e.DomUtil.getStyle(a,"borderLeftWidth"),10)||0,s=e.DomUtil.getStyle(a,"position"),a.offsetParent===r&&"absolute"===s)break;if("fixed"===s){o+=r.scrollTop||0,n+=r.scrollLeft||0;break}a=a.offsetParent}while(a);a=t;do{if(a===r)break;o-=a.scrollTop||0,n-=a.scrollLeft||0,e.DomUtil.documentIsLtr()||!e.Browser.webkit&&!h||(n+=a.scrollWidth-a.clientWidth,h&&"hidden"!==e.DomUtil.getStyle(a,"overflow-y")&&"hidden"!==e.DomUtil.getStyle(a,"overflow")&&(n+=17)),a=a.parentNode}while(a);return new e.Point(n,o)},documentIsLtr:function(){return e.DomUtil._docIsLtrCached||(e.DomUtil._docIsLtrCached=!0,e.DomUtil._docIsLtr="ltr"===e.DomUtil.getStyle(i.body,"direction")),e.DomUtil._docIsLtr},create:function(t,s,e){var o=i.createElement(t);return o.className=s,e&&e.appendChild(o),o},disableTextSelection:function(){i.selection&&i.selection.empty&&i.selection.empty(),this._onselectstart||(this._onselectstart=i.onselectstart||null,i.onselectstart=e.Util.falseFn)},enableTextSelection:function(){i.onselectstart===e.Util.falseFn&&(i.onselectstart=this._onselectstart,this._onselectstart=null)},hasClass:function(t,i){return t.className.length>0&&RegExp("(^|\\s)"+i+"(\\s|$)").test(t.className)},addClass:function(t,i){e.DomUtil.hasClass(t,i)||(t.className+=(t.className?" ":"")+i)},removeClass:function(t,i){function s(t,s){return s===i?"":t}t.className=t.className.replace(/(\S+)\s*/g,s).replace(/(^\s+|\s+$)/,"")},setOpacity:function(t,i){if("opacity"in t.style)t.style.opacity=i;else if("filter"in t.style){var s=!1,e="DXImageTransform.Microsoft.Alpha";try{s=t.filters.item(e)}catch(o){}i=Math.round(100*i),s?(s.Enabled=100!==i,s.Opacity=i):t.style.filter+=" progid:"+e+"(opacity="+i+")"}},testProp:function(t){for(var s=i.documentElement.style,e=0;t.length>e;e++)if(t[e]in s)return t[e];return!1},getTranslateString:function(t){var i=e.Browser.webkit3d,s="translate"+(i?"3d":"")+"(",o=(i?",0":"")+")";return s+t.x+"px,"+t.y+"px"+o},getScaleString:function(t,i){var s=e.DomUtil.getTranslateString(i.add(i.multiplyBy(-1*t))),o=" scale("+t+") ";return s+o},setPosition:function(t,i,s){t._leaflet_pos=i,!s&&e.Browser.any3d?(t.style[e.DomUtil.TRANSFORM]=e.DomUtil.getTranslateString(i),e.Browser.mobileWebkit3d&&(t.style.WebkitBackfaceVisibility="hidden")):(t.style.left=i.x+"px",t.style.top=i.y+"px")},getPosition:function(t){return t._leaflet_pos}},e.DomUtil.TRANSFORM=e.DomUtil.testProp(["transform","WebkitTransform","OTransform","MozTransform","msTransform"]),e.DomUtil.TRANSITION=e.DomUtil.testProp(["webkitTransition","transition","OTransition","MozTransition","msTransition"]),e.DomUtil.TRANSITION_END="webkitTransition"===e.DomUtil.TRANSITION||"OTransition"===e.DomUtil.TRANSITION?e.DomUtil.TRANSITION+"End":"transitionend",e.LatLng=function(t,i){var s=parseFloat(t),e=parseFloat(i);if(isNaN(s)||isNaN(e))throw Error("Invalid LatLng object: ("+t+", "+i+")");this.lat=s,this.lng=e},e.extend(e.LatLng,{DEG_TO_RAD:Math.PI/180,RAD_TO_DEG:180/Math.PI,MAX_MARGIN:1e-9}),e.LatLng.prototype={equals:function(t){if(!t)return!1;t=e.latLng(t);var i=Math.max(Math.abs(this.lat-t.lat),Math.abs(this.lng-t.lng));return e.LatLng.MAX_MARGIN>=i},toString:function(t){return"LatLng("+e.Util.formatNum(this.lat,t)+", "+e.Util.formatNum(this.lng,t)+")"},distanceTo:function(t){t=e.latLng(t);var i=6378137,s=e.LatLng.DEG_TO_RAD,o=(t.lat-this.lat)*s,n=(t.lng-this.lng)*s,a=this.lat*s,r=t.lat*s,h=Math.sin(o/2),l=Math.sin(n/2),c=h*h+l*l*Math.cos(a)*Math.cos(r);return 2*i*Math.atan2(Math.sqrt(c),Math.sqrt(1-c))},wrap:function(t,i){var s=this.lng;return t=t||-180,i=i||180,s=(s+i)%(i-t)+(t>s||s===i?i:t),new e.LatLng(this.lat,s)}},e.latLng=function(t,i){return t instanceof e.LatLng?t:e.Util.isArray(t)?new e.LatLng(t[0],t[1]):isNaN(t)?t:new e.LatLng(t,i)},e.LatLngBounds=function(t,i){if(t)for(var s=i?[t,i]:t,e=0,o=s.length;o>e;e++)this.extend(s[e])},e.LatLngBounds.prototype={extend:function(t){return t="number"==typeof t[0]||"string"==typeof t[0]||t instanceof e.LatLng?e.latLng(t):e.latLngBounds(t),t instanceof e.LatLng?this._southWest||this._northEast?(this._southWest.lat=Math.min(t.lat,this._southWest.lat),this._southWest.lng=Math.min(t.lng,this._southWest.lng),this._northEast.lat=Math.max(t.lat,this._northEast.lat),this._northEast.lng=Math.max(t.lng,this._northEast.lng)):(this._southWest=new e.LatLng(t.lat,t.lng),this._northEast=new e.LatLng(t.lat,t.lng)):t instanceof e.LatLngBounds&&(this.extend(t._southWest),this.extend(t._northEast)),this},pad:function(t){var i=this._southWest,s=this._northEast,o=Math.abs(i.lat-s.lat)*t,n=Math.abs(i.lng-s.lng)*t;return new e.LatLngBounds(new e.LatLng(i.lat-o,i.lng-n),new e.LatLng(s.lat+o,s.lng+n))},getCenter:function(){return new e.LatLng((this._southWest.lat+this._northEast.lat)/2,(this._southWest.lng+this._northEast.lng)/2)},getSouthWest:function(){return this._southWest},getNorthEast:function(){return this._northEast},getNorthWest:function(){return new e.LatLng(this._northEast.lat,this._southWest.lng)},getSouthEast:function(){return new e.LatLng(this._southWest.lat,this._northEast.lng)},contains:function(t){t="number"==typeof t[0]||t instanceof e.LatLng?e.latLng(t):e.latLngBounds(t);var i,s,o=this._southWest,n=this._northEast;return t instanceof e.LatLngBounds?(i=t.getSouthWest(),s=t.getNorthEast()):i=s=t,i.lat>=o.lat&&s.lat<=n.lat&&i.lng>=o.lng&&s.lng<=n.lng},intersects:function(t){t=e.latLngBounds(t);var i=this._southWest,s=this._northEast,o=t.getSouthWest(),n=t.getNorthEast(),a=n.lat>=i.lat&&o.lat<=s.lat,r=n.lng>=i.lng&&o.lng<=s.lng;return a&&r},toBBoxString:function(){var t=this._southWest,i=this._northEast;return[t.lng,t.lat,i.lng,i.lat].join(",")},equals:function(t){return t?(t=e.latLngBounds(t),this._southWest.equals(t.getSouthWest())&&this._northEast.equals(t.getNorthEast())):!1},isValid:function(){return!(!this._southWest||!this._northEast)}},e.latLngBounds=function(t,i){return!t||t instanceof e.LatLngBounds?t:new e.LatLngBounds(t,i)},e.Projection={},e.Projection.SphericalMercator={MAX_LATITUDE:85.0511287798,project:function(t){var i=e.LatLng.DEG_TO_RAD,s=this.MAX_LATITUDE,o=Math.max(Math.min(s,t.lat),-s),n=t.lng*i,a=o*i;return a=Math.log(Math.tan(Math.PI/4+a/2)),new e.Point(n,a)},unproject:function(t){var i=e.LatLng.RAD_TO_DEG,s=t.x*i,o=(2*Math.atan(Math.exp(t.y))-Math.PI/2)*i;return new e.LatLng(o,s)}},e.Projection.LonLat={project:function(t){return new e.Point(t.lng,t.lat)},unproject:function(t){return new e.LatLng(t.y,t.x)}},e.CRS={latLngToPoint:function(t,i){var s=this.projection.project(t),e=this.scale(i);return this.transformation._transform(s,e)},pointToLatLng:function(t,i){var s=this.scale(i),e=this.transformation.untransform(t,s);return this.projection.unproject(e)},project:function(t){return this.projection.project(t)},scale:function(t){return 256*Math.pow(2,t)}},e.CRS.Simple=e.extend({},e.CRS,{projection:e.Projection.LonLat,transformation:new e.Transformation(1,0,-1,0),scale:function(t){return Math.pow(2,t)}}),e.CRS.EPSG3857=e.extend({},e.CRS,{code:"EPSG:3857",projection:e.Projection.SphericalMercator,transformation:new e.Transformation(.5/Math.PI,.5,-.5/Math.PI,.5),project:function(t){var i=this.projection.project(t),s=6378137;return i.multiplyBy(s)}}),e.CRS.EPSG900913=e.extend({},e.CRS.EPSG3857,{code:"EPSG:900913"}),e.CRS.EPSG4326=e.extend({},e.CRS,{code:"EPSG:4326",projection:e.Projection.LonLat,transformation:new e.Transformation(1/360,.5,-1/360,.5)}),e.Map=e.Class.extend({includes:e.Mixin.Events,options:{crs:e.CRS.EPSG3857,fadeAnimation:e.DomUtil.TRANSITION&&!e.Browser.android23,trackResize:!0,markerZoomAnimation:e.DomUtil.TRANSITION&&e.Browser.any3d},initialize:function(t,i){i=e.setOptions(this,i),this._initContainer(t),this._initLayout(),this.callInitHooks(),this._initEvents(),i.maxBounds&&this.setMaxBounds(i.maxBounds),i.center&&i.zoom!==s&&this.setView(e.latLng(i.center),i.zoom,!0),this._initLayers(i.layers)},setView:function(t,i){return this._resetView(e.latLng(t),this._limitZoom(i)),this},setZoom:function(t){return this.setView(this.getCenter(),t)},zoomIn:function(t){return this.setZoom(this._zoom+(t||1))},zoomOut:function(t){return this.setZoom(this._zoom-(t||1))},fitBounds:function(t){var i=this.getBoundsZoom(t);return this.setView(e.latLngBounds(t).getCenter(),i)},fitWorld:function(){var t=new e.LatLng(-60,-170),i=new e.LatLng(85,179);return this.fitBounds(new e.LatLngBounds(t,i))},panTo:function(t){return this.setView(t,this._zoom)},panBy:function(t){return this.fire("movestart"),this._rawPanBy(e.point(t)),this.fire("move"),this.fire("moveend")},setMaxBounds:function(t){if(t=e.latLngBounds(t),this.options.maxBounds=t,!t)return this._boundsMinZoom=null,this;var i=this.getBoundsZoom(t,!0);return this._boundsMinZoom=i,this._loaded&&(i>this._zoom?this.setView(t.getCenter(),i):this.panInsideBounds(t)),this},panInsideBounds:function(t){t=e.latLngBounds(t);var i=this.getBounds(),s=this.project(i.getSouthWest()),o=this.project(i.getNorthEast()),n=this.project(t.getSouthWest()),a=this.project(t.getNorthEast()),r=0,h=0;return o.ya.x&&(r=a.x-o.x),s.y>n.y&&(h=n.y-s.y),s.x=r);return m&&i?null:i?r:r-1},getSize:function(){return(!this._size||this._sizeChanged)&&(this._size=new e.Point(this._container.clientWidth,this._container.clientHeight),this._sizeChanged=!1),this._size.clone()},getPixelBounds:function(){var t=this._getTopLeftPoint();return new e.Bounds(t,t.add(this.getSize()))},getPixelOrigin:function(){return this._initialTopLeftPoint},getPanes:function(){return this._panes},getContainer:function(){return this._container},getZoomScale:function(t){var i=this.options.crs;return i.scale(t)/i.scale(this._zoom)},getScaleZoom:function(t){return this._zoom+Math.log(t)/Math.LN2},project:function(t,i){return i=i===s?this._zoom:i,this.options.crs.latLngToPoint(e.latLng(t),i)},unproject:function(t,i){return i=i===s?this._zoom:i,this.options.crs.pointToLatLng(e.point(t),i)},layerPointToLatLng:function(t){var i=e.point(t).add(this._initialTopLeftPoint);return this.unproject(i)},latLngToLayerPoint:function(t){var i=this.project(e.latLng(t))._round();return i._subtract(this._initialTopLeftPoint)},containerPointToLayerPoint:function(t){return e.point(t).subtract(this._getMapPanePos())},layerPointToContainerPoint:function(t){return e.point(t).add(this._getMapPanePos())},containerPointToLatLng:function(t){var i=this.containerPointToLayerPoint(e.point(t));return this.layerPointToLatLng(i)},latLngToContainerPoint:function(t){return this.layerPointToContainerPoint(this.latLngToLayerPoint(e.latLng(t)))},mouseEventToContainerPoint:function(t){return e.DomEvent.getMousePosition(t,this._container)},mouseEventToLayerPoint:function(t){return this.containerPointToLayerPoint(this.mouseEventToContainerPoint(t))},mouseEventToLatLng:function(t){return this.layerPointToLatLng(this.mouseEventToLayerPoint(t))},_initContainer:function(t){var i=this._container=e.DomUtil.get(t);if(i._leaflet)throw Error("Map container is already initialized.");i._leaflet=!0},_initLayout:function(){var t=this._container;e.DomUtil.addClass(t,"leaflet-container"),e.Browser.touch&&e.DomUtil.addClass(t,"leaflet-touch"),this.options.fadeAnimation&&e.DomUtil.addClass(t,"leaflet-fade-anim");var i=e.DomUtil.getStyle(t,"position");"absolute"!==i&&"relative"!==i&&"fixed"!==i&&(t.style.position="relative"),this._initPanes(),this._initControlPos&&this._initControlPos()},_initPanes:function(){var t=this._panes={};this._mapPane=t.mapPane=this._createPane("leaflet-map-pane",this._container),this._tilePane=t.tilePane=this._createPane("leaflet-tile-pane",this._mapPane),t.objectsPane=this._createPane("leaflet-objects-pane",this._mapPane),t.shadowPane=this._createPane("leaflet-shadow-pane"),t.overlayPane=this._createPane("leaflet-overlay-pane"),t.markerPane=this._createPane("leaflet-marker-pane"),t.popupPane=this._createPane("leaflet-popup-pane");var i=" leaflet-zoom-hide";this.options.markerZoomAnimation||(e.DomUtil.addClass(t.markerPane,i),e.DomUtil.addClass(t.shadowPane,i),e.DomUtil.addClass(t.popupPane,i))},_createPane:function(t,i){return e.DomUtil.create("div",t,i||this._panes.objectsPane)},_initLayers:function(t){t=t?e.Util.isArray(t)?t:[t]:[],this._layers={},this._zoomBoundLayers={},this._tileLayersNum=0;var i,s;for(i=0,s=t.length;s>i;i++)this.addLayer(t[i])},_resetView:function(t,i,s,o){var n=this._zoom!==i;o||(this.fire("movestart"),n&&this.fire("zoomstart")),this._zoom=i,this._initialTopLeftPoint=this._getNewTopLeftPoint(t),s?this._initialTopLeftPoint._add(this._getMapPanePos()):e.DomUtil.setPosition(this._mapPane,new e.Point(0,0)),this._tileLayersToLoad=this._tileLayersNum;var a=!this._loaded;this._loaded=!0,this.fire("viewreset",{hard:!s}),this.fire("move"),(n||o)&&this.fire("zoomend"),this.fire("moveend",{hard:!s}),a&&this.fire("load")},_rawPanBy:function(t){e.DomUtil.setPosition(this._mapPane,this._getMapPanePos().subtract(t))},_updateZoomLevels:function(){var t,i=1/0,e=-1/0;for(t in this._zoomBoundLayers)if(this._zoomBoundLayers.hasOwnProperty(t)){var o=this._zoomBoundLayers[t];isNaN(o.options.minZoom)||(i=Math.min(i,o.options.minZoom)),isNaN(o.options.maxZoom)||(e=Math.max(e,o.options.maxZoom))}t===s?this._layersMaxZoom=this._layersMinZoom=s:(this._layersMaxZoom=e,this._layersMinZoom=i)},_initEvents:function(){if(e.DomEvent){e.DomEvent.on(this._container,"click",this._onMouseClick,this);var i,s,o=["dblclick","mousedown","mouseup","mouseenter","mouseleave","mousemove","contextmenu"];for(i=0,s=o.length;s>i;i++)e.DomEvent.on(this._container,o[i],this._fireMouseEvent,this);this.options.trackResize&&e.DomEvent.on(t,"resize",this._onResize,this)}},_onResize:function(){e.Util.cancelAnimFrame(this._resizeRequest),this._resizeRequest=e.Util.requestAnimFrame(this.invalidateSize,this,!1,this._container)},_onMouseClick:function(t){!this._loaded||this.dragging&&this.dragging.moved()||(this.fire("preclick"),this._fireMouseEvent(t))},_fireMouseEvent:function(t){if(this._loaded){var i=t.type;if(i="mouseenter"===i?"mouseover":"mouseleave"===i?"mouseout":i,this.hasEventListeners(i)){"contextmenu"===i&&e.DomEvent.preventDefault(t);var s=this.mouseEventToContainerPoint(t),o=this.containerPointToLayerPoint(s),n=this.layerPointToLatLng(o);this.fire(i,{latlng:n,layerPoint:o,containerPoint:s,originalEvent:t})}}},_onTileLayerLoad:function(){this._tileLayersToLoad--,this._tileLayersNum&&!this._tileLayersToLoad&&this._tileBg&&(clearTimeout(this._clearTileBgTimer),this._clearTileBgTimer=setTimeout(e.bind(this._clearTileBg,this),500))},whenReady:function(t,i){return this._loaded?t.call(i||this,this):this.on("load",t,i),this},_getMapPanePos:function(){return e.DomUtil.getPosition(this._mapPane)},_getTopLeftPoint:function(){if(!this._loaded)throw Error("Set map center and zoom first.");return this._initialTopLeftPoint.subtract(this._getMapPanePos())},_getNewTopLeftPoint:function(t,i){var s=this.getSize()._divideBy(2);return this.project(t,i)._subtract(s)._round()},_latLngToNewLayerPoint:function(t,i,s){var e=this._getNewTopLeftPoint(s,i).add(this._getMapPanePos());return this.project(t,i)._subtract(e)},_getCenterLayerPoint:function(){return this.containerPointToLayerPoint(this.getSize()._divideBy(2))},_getCenterOffset:function(t){return this.latLngToLayerPoint(t).subtract(this._getCenterLayerPoint())},_limitZoom:function(t){var i=this.getMinZoom(),s=this.getMaxZoom();return Math.max(i,Math.min(s,t))}}),e.map=function(t,i){return new e.Map(t,i)},e.Projection.Mercator={MAX_LATITUDE:85.0840591556,R_MINOR:6356752.3142,R_MAJOR:6378137,project:function(t){var i=e.LatLng.DEG_TO_RAD,s=this.MAX_LATITUDE,o=Math.max(Math.min(s,t.lat),-s),n=this.R_MAJOR,a=this.R_MINOR,r=t.lng*i*n,h=o*i,l=a/n,c=Math.sqrt(1-l*l),m=c*Math.sin(h);m=Math.pow((1-m)/(1+m),.5*c);var u=Math.tan(.5*(.5*Math.PI-h))/m;return h=-a*Math.log(u),new e.Point(r,h)},unproject:function(t){for(var i,s=e.LatLng.RAD_TO_DEG,o=this.R_MAJOR,n=this.R_MINOR,a=t.x*s/o,r=n/o,h=Math.sqrt(1-r*r),l=Math.exp(-t.y/n),c=Math.PI/2-2*Math.atan(l),m=15,u=1e-7,d=m,p=.1;Math.abs(p)>u&&--d>0;)i=h*Math.sin(c),p=Math.PI/2-2*Math.atan(l*Math.pow((1-i)/(1+i),.5*h))-c,c+=p;return new e.LatLng(c*s,a)}},e.CRS.EPSG3395=e.extend({},e.CRS,{code:"EPSG:3395",projection:e.Projection.Mercator,transformation:function(){var t=e.Projection.Mercator,i=t.R_MAJOR,s=t.R_MINOR;return new e.Transformation(.5/(Math.PI*i),.5,-.5/(Math.PI*s),.5)}()}),e.TileLayer=e.Class.extend({includes:e.Mixin.Events,options:{minZoom:0,maxZoom:18,tileSize:256,subdomains:"abc",errorTileUrl:"",attribution:"",zoomOffset:0,opacity:1,unloadInvisibleTiles:e.Browser.mobile,updateWhenIdle:e.Browser.mobile},initialize:function(t,i){i=e.setOptions(this,i),i.detectRetina&&e.Browser.retina&&i.maxZoom>0&&(i.tileSize=Math.floor(i.tileSize/2),i.zoomOffset++,i.minZoom>0&&i.minZoom--,this.options.maxZoom--),this._url=t;var s=this.options.subdomains;"string"==typeof s&&(this.options.subdomains=s.split(""))},onAdd:function(t){this._map=t,this._initContainer(),this._createTileProto(),t.on({viewreset:this._resetCallback,moveend:this._update},this),this.options.updateWhenIdle||(this._limitedUpdate=e.Util.limitExecByInterval(this._update,150,this),t.on("move",this._limitedUpdate,this)),this._reset(),this._update()},addTo:function(t){return t.addLayer(this),this},onRemove:function(t){this._container.parentNode.removeChild(this._container),t.off({viewreset:this._resetCallback,moveend:this._update},this),this.options.updateWhenIdle||t.off("move",this._limitedUpdate,this),this._container=null,this._map=null +},bringToFront:function(){var t=this._map._panes.tilePane;return this._container&&(t.appendChild(this._container),this._setAutoZIndex(t,Math.max)),this},bringToBack:function(){var t=this._map._panes.tilePane;return this._container&&(t.insertBefore(this._container,t.firstChild),this._setAutoZIndex(t,Math.min)),this},getAttribution:function(){return this.options.attribution},setOpacity:function(t){return this.options.opacity=t,this._map&&this._updateOpacity(),this},setZIndex:function(t){return this.options.zIndex=t,this._updateZIndex(),this},setUrl:function(t,i){return this._url=t,i||this.redraw(),this},redraw:function(){return this._map&&(this._map._panes.tilePane.empty=!1,this._reset(!0),this._update()),this},_updateZIndex:function(){this._container&&this.options.zIndex!==s&&(this._container.style.zIndex=this.options.zIndex)},_setAutoZIndex:function(t,i){var s,e,o,n=t.children,a=-i(1/0,-1/0);for(e=0,o=n.length;o>e;e++)n[e]!==this._container&&(s=parseInt(n[e].style.zIndex,10),isNaN(s)||(a=i(a,s)));this.options.zIndex=this._container.style.zIndex=(isFinite(a)?a:0)+i(1,-1)},_updateOpacity:function(){e.DomUtil.setOpacity(this._container,this.options.opacity);var t,i=this._tiles;if(e.Browser.webkit)for(t in i)i.hasOwnProperty(t)&&(i[t].style.webkitTransform+=" translate(0,0)")},_initContainer:function(){var t=this._map._panes.tilePane;(!this._container||t.empty)&&(this._container=e.DomUtil.create("div","leaflet-layer"),this._updateZIndex(),t.appendChild(this._container),1>this.options.opacity&&this._updateOpacity())},_resetCallback:function(t){this._reset(t.hard)},_reset:function(t){var i=this._tiles;for(var s in i)i.hasOwnProperty(s)&&this.fire("tileunload",{tile:i[s]});this._tiles={},this._tilesToLoad=0,this.options.reuseTiles&&(this._unusedTiles=[]),t&&this._container&&(this._container.innerHTML=""),this._initContainer()},_update:function(){if(this._map){var t=this._map.getPixelBounds(),i=this._map.getZoom(),s=this.options.tileSize;if(!(i>this.options.maxZoom||this.options.minZoom>i)){var o=new e.Point(Math.floor(t.min.x/s),Math.floor(t.min.y/s)),n=new e.Point(Math.floor(t.max.x/s),Math.floor(t.max.y/s)),a=new e.Bounds(o,n);this._addTilesFromCenterOut(a),(this.options.unloadInvisibleTiles||this.options.reuseTiles)&&this._removeOtherTiles(a)}}},_addTilesFromCenterOut:function(t){var s,o,n,a=[],r=t.getCenter();for(s=t.min.y;t.max.y>=s;s++)for(o=t.min.x;t.max.x>=o;o++)n=new e.Point(o,s),this._tileShouldBeLoaded(n)&&a.push(n);var h=a.length;if(0!==h){a.sort(function(t,i){return t.distanceTo(r)-i.distanceTo(r)});var l=i.createDocumentFragment();for(this._tilesToLoad||this.fire("loading"),this._tilesToLoad+=h,o=0;h>o;o++)this._addTile(a[o],l);this._container.appendChild(l)}},_tileShouldBeLoaded:function(t){if(t.x+":"+t.y in this._tiles)return!1;if(!this.options.continuousWorld){var i=this._getWrapTileNum();if(this.options.noWrap&&(0>t.x||t.x>=i)||0>t.y||t.y>=i)return!1}return!0},_removeOtherTiles:function(t){var i,s,e,o;for(o in this._tiles)this._tiles.hasOwnProperty(o)&&(i=o.split(":"),s=parseInt(i[0],10),e=parseInt(i[1],10),(t.min.x>s||s>t.max.x||t.min.y>e||e>t.max.y)&&this._removeTile(o))},_removeTile:function(t){var i=this._tiles[t];this.fire("tileunload",{tile:i,url:i.src}),this.options.reuseTiles?(e.DomUtil.removeClass(i,"leaflet-tile-loaded"),this._unusedTiles.push(i)):i.parentNode===this._container&&this._container.removeChild(i),e.Browser.android||(i.src=e.Util.emptyImageUrl),delete this._tiles[t]},_addTile:function(t,i){var s=this._getTilePos(t),o=this._getTile();e.DomUtil.setPosition(o,s,e.Browser.chrome||e.Browser.android23),this._tiles[t.x+":"+t.y]=o,this._loadTile(o,t),o.parentNode!==this._container&&i.appendChild(o)},_getZoomForUrl:function(){var t=this.options,i=this._map.getZoom();return t.zoomReverse&&(i=t.maxZoom-i),i+t.zoomOffset},_getTilePos:function(t){var i=this._map.getPixelOrigin(),s=this.options.tileSize;return t.multiplyBy(s).subtract(i)},getTileUrl:function(t){return this._adjustTilePoint(t),e.Util.template(this._url,e.extend({s:this._getSubdomain(t),z:this._getZoomForUrl(),x:t.x,y:t.y},this.options))},_getWrapTileNum:function(){return Math.pow(2,this._getZoomForUrl())},_adjustTilePoint:function(t){var i=this._getWrapTileNum();this.options.continuousWorld||this.options.noWrap||(t.x=(t.x%i+i)%i),this.options.tms&&(t.y=i-t.y-1)},_getSubdomain:function(t){var i=(t.x+t.y)%this.options.subdomains.length;return this.options.subdomains[i]},_createTileProto:function(){var t=this._tileImg=e.DomUtil.create("img","leaflet-tile");t.style.width=t.style.height=this.options.tileSize+"px",t.galleryimg="no"},_getTile:function(){if(this.options.reuseTiles&&this._unusedTiles.length>0){var t=this._unusedTiles.pop();return this._resetTile(t),t}return this._createTile()},_resetTile:function(){},_createTile:function(){var t=this._tileImg.cloneNode(!1);return t.onselectstart=t.onmousemove=e.Util.falseFn,t},_loadTile:function(t,i){t._layer=this,t.onload=this._tileOnLoad,t.onerror=this._tileOnError,t.src=this.getTileUrl(i)},_tileLoaded:function(){this._tilesToLoad--,this._tilesToLoad||this.fire("load")},_tileOnLoad:function(){var t=this._layer;this.src!==e.Util.emptyImageUrl&&(e.DomUtil.addClass(this,"leaflet-tile-loaded"),t.fire("tileload",{tile:this,url:this.src})),t._tileLoaded()},_tileOnError:function(){var t=this._layer;t.fire("tileerror",{tile:this,url:this.src});var i=t.options.errorTileUrl;i&&(this.src=i),t._tileLoaded()}}),e.tileLayer=function(t,i){return new e.TileLayer(t,i)},e.TileLayer.WMS=e.TileLayer.extend({defaultWmsParams:{service:"WMS",request:"GetMap",version:"1.1.1",layers:"",styles:"",format:"image/jpeg",transparent:!1},initialize:function(t,i){this._url=t;var s=e.extend({},this.defaultWmsParams);s.width=s.height=i.detectRetina&&e.Browser.retina?2*this.options.tileSize:this.options.tileSize;for(var o in i)this.options.hasOwnProperty(o)||(s[o]=i[o]);this.wmsParams=s,e.setOptions(this,i)},onAdd:function(t){var i=parseFloat(this.wmsParams.version)>=1.3?"crs":"srs";this.wmsParams[i]=t.options.crs.code,e.TileLayer.prototype.onAdd.call(this,t)},getTileUrl:function(t,i){this._adjustTilePoint(t);var s=this._map,o=s.options.crs,n=this.options.tileSize,a=t.multiplyBy(n),r=a.add(new e.Point(n,n)),h=o.project(s.unproject(a,i)),l=o.project(s.unproject(r,i)),c=[h.x,l.y,l.x,h.y].join(","),m=e.Util.template(this._url,{s:this._getSubdomain(t)});return m+e.Util.getParamString(this.wmsParams,m)+"&bbox="+c},setParams:function(t,i){return e.extend(this.wmsParams,t),i||this.redraw(),this}}),e.tileLayer.wms=function(t,i){return new e.TileLayer.WMS(t,i)},e.TileLayer.Canvas=e.TileLayer.extend({options:{async:!1},initialize:function(t){e.setOptions(this,t)},redraw:function(){var t=this._tiles;for(var i in t)t.hasOwnProperty(i)&&this._redrawTile(t[i])},_redrawTile:function(t){this.drawTile(t,t._tilePoint,this._map._zoom)},_createTileProto:function(){var t=this._canvasProto=e.DomUtil.create("canvas","leaflet-tile");t.width=t.height=this.options.tileSize},_createTile:function(){var t=this._canvasProto.cloneNode(!1);return t.onselectstart=t.onmousemove=e.Util.falseFn,t},_loadTile:function(t,i){t._layer=this,t._tilePoint=i,this._redrawTile(t),this.options.async||this.tileDrawn(t)},drawTile:function(){},tileDrawn:function(t){this._tileOnLoad.call(t)}}),e.tileLayer.canvas=function(t){return new e.TileLayer.Canvas(t)},e.ImageOverlay=e.Class.extend({includes:e.Mixin.Events,options:{opacity:1},initialize:function(t,i,s){this._url=t,this._bounds=e.latLngBounds(i),e.setOptions(this,s)},onAdd:function(t){this._map=t,this._image||this._initImage(),t._panes.overlayPane.appendChild(this._image),t.on("viewreset",this._reset,this),t.options.zoomAnimation&&e.Browser.any3d&&t.on("zoomanim",this._animateZoom,this),this._reset()},onRemove:function(t){t.getPanes().overlayPane.removeChild(this._image),t.off("viewreset",this._reset,this),t.options.zoomAnimation&&t.off("zoomanim",this._animateZoom,this)},addTo:function(t){return t.addLayer(this),this},setOpacity:function(t){return this.options.opacity=t,this._updateOpacity(),this},bringToFront:function(){return this._image&&this._map._panes.overlayPane.appendChild(this._image),this},bringToBack:function(){var t=this._map._panes.overlayPane;return this._image&&t.insertBefore(this._image,t.firstChild),this},_initImage:function(){this._image=e.DomUtil.create("img","leaflet-image-layer"),this._map.options.zoomAnimation&&e.Browser.any3d?e.DomUtil.addClass(this._image,"leaflet-zoom-animated"):e.DomUtil.addClass(this._image,"leaflet-zoom-hide"),this._updateOpacity(),e.extend(this._image,{galleryimg:"no",onselectstart:e.Util.falseFn,onmousemove:e.Util.falseFn,onload:e.bind(this._onImageLoad,this),src:this._url})},_animateZoom:function(t){var i=this._map,s=this._image,o=i.getZoomScale(t.zoom),n=this._bounds.getNorthWest(),a=this._bounds.getSouthEast(),r=i._latLngToNewLayerPoint(n,t.zoom,t.center),h=i._latLngToNewLayerPoint(a,t.zoom,t.center)._subtract(r),l=r._add(h._multiplyBy(.5*(1-1/o)));s.style[e.DomUtil.TRANSFORM]=e.DomUtil.getTranslateString(l)+" scale("+o+") "},_reset:function(){var t=this._image,i=this._map.latLngToLayerPoint(this._bounds.getNorthWest()),s=this._map.latLngToLayerPoint(this._bounds.getSouthEast())._subtract(i);e.DomUtil.setPosition(t,i),t.style.width=s.x+"px",t.style.height=s.y+"px"},_onImageLoad:function(){this.fire("load")},_updateOpacity:function(){e.DomUtil.setOpacity(this._image,this.options.opacity)}}),e.imageOverlay=function(t,i,s){return new e.ImageOverlay(t,i,s)},e.Icon=e.Class.extend({options:{className:""},initialize:function(t){e.setOptions(this,t)},createIcon:function(){return this._createIcon("icon")},createShadow:function(){return this._createIcon("shadow")},_createIcon:function(t){var i=this._getIconUrl(t);if(!i){if("icon"===t)throw Error("iconUrl not set in Icon options (see the docs).");return null}var s=this._createImg(i);return this._setIconStyles(s,t),s},_setIconStyles:function(t,i){var s,o=this.options,n=e.point(o[i+"Size"]);s="shadow"===i?e.point(o.shadowAnchor||o.iconAnchor):e.point(o.iconAnchor),!s&&n&&(s=n.divideBy(2,!0)),t.className="leaflet-marker-"+i+" "+o.className,s&&(t.style.marginLeft=-s.x+"px",t.style.marginTop=-s.y+"px"),n&&(t.style.width=n.x+"px",t.style.height=n.y+"px")},_createImg:function(t){var s;return e.Browser.ie6?(s=i.createElement("div"),s.style.filter='progid:DXImageTransform.Microsoft.AlphaImageLoader(src="'+t+'")'):(s=i.createElement("img"),s.src=t),s},_getIconUrl:function(t){return e.Browser.retina&&this.options[t+"RetinaUrl"]?this.options[t+"RetinaUrl"]:this.options[t+"Url"]}}),e.icon=function(t){return new e.Icon(t)},e.Icon.Default=e.Icon.extend({options:{iconSize:new e.Point(25,41),iconAnchor:new e.Point(12,41),popupAnchor:new e.Point(1,-34),shadowSize:new e.Point(41,41)},_getIconUrl:function(t){var i=t+"Url";if(this.options[i])return this.options[i];e.Browser.retina&&"icon"===t&&(t+="@2x");var s=e.Icon.Default.imagePath;if(!s)throw Error("Couldn't autodetect L.Icon.Default.imagePath, set it manually.");return "marker-"+t+".png"}}),e.Icon.Default.imagePath=function(){var t,s,e,o,n=i.getElementsByTagName("script"),a=/\/?leaflet[\-\._]?([\w\-\._]*)\.js\??/;for(t=0,s=n.length;s>t;t++)if(e=n[t].src,o=e.match(a))return e.split(a)[0]+""}(),e.Marker=e.Class.extend({includes:e.Mixin.Events,options:{icon:new e.Icon.Default,title:"",clickable:!0,draggable:!1,zIndexOffset:0,opacity:1,riseOnHover:!1,riseOffset:250},initialize:function(t,i){e.setOptions(this,i),this._latlng=e.latLng(t)},onAdd:function(t){this._map=t,t.on("viewreset",this.update,this),this._initIcon(),this.update(),t.options.zoomAnimation&&t.options.markerZoomAnimation&&t.on("zoomanim",this._animateZoom,this)},addTo:function(t){return t.addLayer(this),this},onRemove:function(t){this._removeIcon(),this.fire("remove"),t.off({viewreset:this.update,zoomanim:this._animateZoom},this),this._map=null},getLatLng:function(){return this._latlng},setLatLng:function(t){return this._latlng=e.latLng(t),this.update(),this.fire("move",{latlng:this._latlng})},setZIndexOffset:function(t){return this.options.zIndexOffset=t,this.update(),this},setIcon:function(t){return this._map&&this._removeIcon(),this.options.icon=t,this._map&&(this._initIcon(),this.update()),this},update:function(){if(this._icon){var t=this._map.latLngToLayerPoint(this._latlng).round();this._setPos(t)}return this},_initIcon:function(){var t=this.options,i=this._map,s=i.options.zoomAnimation&&i.options.markerZoomAnimation,o=s?"leaflet-zoom-animated":"leaflet-zoom-hide",n=!1;this._icon||(this._icon=t.icon.createIcon(),t.title&&(this._icon.title=t.title),this._initInteraction(),n=1>this.options.opacity,e.DomUtil.addClass(this._icon,o),t.riseOnHover&&e.DomEvent.on(this._icon,"mouseover",this._bringToFront,this).on(this._icon,"mouseout",this._resetZIndex,this)),this._shadow||(this._shadow=t.icon.createShadow(),this._shadow&&(e.DomUtil.addClass(this._shadow,o),n=1>this.options.opacity)),n&&this._updateOpacity();var a=this._map._panes;a.markerPane.appendChild(this._icon),this._shadow&&a.shadowPane.appendChild(this._shadow)},_removeIcon:function(){var t=this._map._panes;this.options.riseOnHover&&e.DomEvent.off(this._icon,"mouseover",this._bringToFront).off(this._icon,"mouseout",this._resetZIndex),t.markerPane.removeChild(this._icon),this._shadow&&t.shadowPane.removeChild(this._shadow),this._icon=this._shadow=null},_setPos:function(t){e.DomUtil.setPosition(this._icon,t),this._shadow&&e.DomUtil.setPosition(this._shadow,t),this._zIndex=t.y+this.options.zIndexOffset,this._resetZIndex()},_updateZIndex:function(t){this._icon.style.zIndex=this._zIndex+t},_animateZoom:function(t){var i=this._map._latLngToNewLayerPoint(this._latlng,t.zoom,t.center);this._setPos(i)},_initInteraction:function(){if(this.options.clickable){var t=this._icon,i=["dblclick","mousedown","mouseover","mouseout","contextmenu"];e.DomUtil.addClass(t,"leaflet-clickable"),e.DomEvent.on(t,"click",this._onMouseClick,this);for(var s=0;i.length>s;s++)e.DomEvent.on(t,i[s],this._fireMouseEvent,this);e.Handler.MarkerDrag&&(this.dragging=new e.Handler.MarkerDrag(this),this.options.draggable&&this.dragging.enable())}},_onMouseClick:function(t){var i=this.dragging&&this.dragging.moved();(this.hasEventListeners(t.type)||i)&&e.DomEvent.stopPropagation(t),i||(this.dragging&&this.dragging._enabled||!this._map.dragging||!this._map.dragging.moved())&&this.fire(t.type,{originalEvent:t})},_fireMouseEvent:function(t){this.fire(t.type,{originalEvent:t}),"contextmenu"===t.type&&this.hasEventListeners(t.type)&&e.DomEvent.preventDefault(t),"mousedown"!==t.type&&e.DomEvent.stopPropagation(t)},setOpacity:function(t){this.options.opacity=t,this._map&&this._updateOpacity()},_updateOpacity:function(){e.DomUtil.setOpacity(this._icon,this.options.opacity),this._shadow&&e.DomUtil.setOpacity(this._shadow,this.options.opacity)},_bringToFront:function(){this._updateZIndex(this.options.riseOffset)},_resetZIndex:function(){this._updateZIndex(0)}}),e.marker=function(t,i){return new e.Marker(t,i)},e.DivIcon=e.Icon.extend({options:{iconSize:new e.Point(12,12),className:"leaflet-div-icon"},createIcon:function(){var t=i.createElement("div"),s=this.options;return s.html&&(t.innerHTML=s.html),s.bgPos&&(t.style.backgroundPosition=-s.bgPos.x+"px "+-s.bgPos.y+"px"),this._setIconStyles(t,"icon"),t},createShadow:function(){return null}}),e.divIcon=function(t){return new e.DivIcon(t)},e.Map.mergeOptions({closePopupOnClick:!0}),e.Popup=e.Class.extend({includes:e.Mixin.Events,options:{minWidth:50,maxWidth:300,maxHeight:null,autoPan:!0,closeButton:!0,offset:new e.Point(0,6),autoPanPadding:new e.Point(5,5),className:"",zoomAnimation:!0},initialize:function(t,i){e.setOptions(this,t),this._source=i,this._animated=e.Browser.any3d&&this.options.zoomAnimation},onAdd:function(t){this._map=t,this._container||this._initLayout(),this._updateContent();var i=t.options.fadeAnimation;i&&e.DomUtil.setOpacity(this._container,0),t._panes.popupPane.appendChild(this._container),t.on("viewreset",this._updatePosition,this),this._animated&&t.on("zoomanim",this._zoomAnimation,this),t.options.closePopupOnClick&&t.on("preclick",this._close,this),this._update(),i&&e.DomUtil.setOpacity(this._container,1)},addTo:function(t){return t.addLayer(this),this},openOn:function(t){return t.openPopup(this),this},onRemove:function(t){t._panes.popupPane.removeChild(this._container),e.Util.falseFn(this._container.offsetWidth),t.off({viewreset:this._updatePosition,preclick:this._close,zoomanim:this._zoomAnimation},this),t.options.fadeAnimation&&e.DomUtil.setOpacity(this._container,0),this._map=null},setLatLng:function(t){return this._latlng=e.latLng(t),this._update(),this},setContent:function(t){return this._content=t,this._update(),this},_close:function(){var t=this._map;t&&(t._popup=null,t.removeLayer(this).fire("popupclose",{popup:this}))},_initLayout:function(){var t,i="leaflet-popup",s=i+" "+this.options.className+" leaflet-zoom-"+(this._animated?"animated":"hide"),o=this._container=e.DomUtil.create("div",s);this.options.closeButton&&(t=this._closeButton=e.DomUtil.create("a",i+"-close-button",o),t.href="#close",t.innerHTML="×",e.DomEvent.on(t,"click",this._onCloseButtonClick,this));var n=this._wrapper=e.DomUtil.create("div",i+"-content-wrapper",o);e.DomEvent.disableClickPropagation(n),this._contentNode=e.DomUtil.create("div",i+"-content",n),e.DomEvent.on(this._contentNode,"mousewheel",e.DomEvent.stopPropagation),this._tipContainer=e.DomUtil.create("div",i+"-tip-container",o),this._tip=e.DomUtil.create("div",i+"-tip",this._tipContainer)},_update:function(){this._map&&(this._container.style.visibility="hidden",this._updateContent(),this._updateLayout(),this._updatePosition(),this._container.style.visibility="",this._adjustPan())},_updateContent:function(){if(this._content){if("string"==typeof this._content)this._contentNode.innerHTML=this._content;else{for(;this._contentNode.hasChildNodes();)this._contentNode.removeChild(this._contentNode.firstChild);this._contentNode.appendChild(this._content)}this.fire("contentupdate")}},_updateLayout:function(){var t=this._contentNode,i=t.style;i.width="",i.whiteSpace="nowrap";var s=t.offsetWidth;s=Math.min(s,this.options.maxWidth),s=Math.max(s,this.options.minWidth),i.width=s+1+"px",i.whiteSpace="",i.height="";var o=t.offsetHeight,n=this.options.maxHeight,a="leaflet-popup-scrolled";n&&o>n?(i.height=n+"px",e.DomUtil.addClass(t,a)):e.DomUtil.removeClass(t,a),this._containerWidth=this._container.offsetWidth},_updatePosition:function(){if(this._map){var t=this._map.latLngToLayerPoint(this._latlng),i=this._animated,s=this.options.offset;i&&e.DomUtil.setPosition(this._container,t),this._containerBottom=-s.y-(i?0:t.y),this._containerLeft=-Math.round(this._containerWidth/2)+s.x+(i?0:t.x),this._container.style.bottom=this._containerBottom+"px",this._container.style.left=this._containerLeft+"px"}},_zoomAnimation:function(t){var i=this._map._latLngToNewLayerPoint(this._latlng,t.zoom,t.center);e.DomUtil.setPosition(this._container,i)},_adjustPan:function(){if(this.options.autoPan){var t=this._map,i=this._container.offsetHeight,s=this._containerWidth,o=new e.Point(this._containerLeft,-i-this._containerBottom);this._animated&&o._add(e.DomUtil.getPosition(this._container));var n=t.layerPointToContainerPoint(o),a=this.options.autoPanPadding,r=t.getSize(),h=0,l=0;0>n.x&&(h=n.x-a.x),n.x+s>r.x&&(h=n.x+s-r.x+a.x),0>n.y&&(l=n.y-a.y),n.y+i>r.y&&(l=n.y+i-r.y+a.y),(h||l)&&t.panBy(new e.Point(h,l))}},_onCloseButtonClick:function(t){this._close(),e.DomEvent.stop(t)}}),e.popup=function(t,i){return new e.Popup(t,i)},e.Marker.include({openPopup:function(){return this._popup&&this._map&&(this._popup.setLatLng(this._latlng),this._map.openPopup(this._popup)),this},closePopup:function(){return this._popup&&this._popup._close(),this},bindPopup:function(t,i){var s=e.point(this.options.icon.options.popupAnchor)||new e.Point(0,0);return s=s.add(e.Popup.prototype.options.offset),i&&i.offset&&(s=s.add(i.offset)),i=e.extend({offset:s},i),this._popup||this.on("click",this.openPopup,this).on("remove",this.closePopup,this).on("move",this._movePopup,this),this._popup=new e.Popup(i,this).setContent(t),this},unbindPopup:function(){return this._popup&&(this._popup=null,this.off("click",this.openPopup).off("remove",this.closePopup).off("move",this._movePopup)),this},_movePopup:function(t){this._popup.setLatLng(t.latlng)}}),e.Map.include({openPopup:function(t){return this.closePopup(),this._popup=t,this.addLayer(t).fire("popupopen",{popup:this._popup})},closePopup:function(){return this._popup&&this._popup._close(),this}}),e.LayerGroup=e.Class.extend({initialize:function(t){this._layers={};var i,s;if(t)for(i=0,s=t.length;s>i;i++)this.addLayer(t[i])},addLayer:function(t){var i=e.stamp(t);return this._layers[i]=t,this._map&&this._map.addLayer(t),this},removeLayer:function(t){var i=e.stamp(t);return delete this._layers[i],this._map&&this._map.removeLayer(t),this},clearLayers:function(){return this.eachLayer(this.removeLayer,this),this},invoke:function(t){var i,s,e=Array.prototype.slice.call(arguments,1);for(i in this._layers)this._layers.hasOwnProperty(i)&&(s=this._layers[i],s[t]&&s[t].apply(s,e));return this},onAdd:function(t){this._map=t,this.eachLayer(t.addLayer,t)},onRemove:function(t){this.eachLayer(t.removeLayer,t),this._map=null},addTo:function(t){return t.addLayer(this),this},eachLayer:function(t,i){for(var s in this._layers)this._layers.hasOwnProperty(s)&&t.call(i,this._layers[s])},setZIndex:function(t){return this.invoke("setZIndex",t)}}),e.layerGroup=function(t){return new e.LayerGroup(t)},e.FeatureGroup=e.LayerGroup.extend({includes:e.Mixin.Events,statics:{EVENTS:"click dblclick mouseover mouseout mousemove contextmenu"},addLayer:function(t){return this._layers[e.stamp(t)]?this:(t.on(e.FeatureGroup.EVENTS,this._propagateEvent,this),e.LayerGroup.prototype.addLayer.call(this,t),this._popupContent&&t.bindPopup&&t.bindPopup(this._popupContent,this._popupOptions),this.fire("layeradd",{layer:t}))},removeLayer:function(t){return t.off(e.FeatureGroup.EVENTS,this._propagateEvent,this),e.LayerGroup.prototype.removeLayer.call(this,t),this._popupContent&&this.invoke("unbindPopup"),this.fire("layerremove",{layer:t})},bindPopup:function(t,i){return this._popupContent=t,this._popupOptions=i,this.invoke("bindPopup",t,i)},setStyle:function(t){return this.invoke("setStyle",t)},bringToFront:function(){return this.invoke("bringToFront")},bringToBack:function(){return this.invoke("bringToBack")},getBounds:function(){var t=new e.LatLngBounds;return this.eachLayer(function(i){t.extend(i instanceof e.Marker?i.getLatLng():i.getBounds())}),t},_propagateEvent:function(t){t.layer=t.target,t.target=this,this.fire(t.type,t)}}),e.featureGroup=function(t){return new e.FeatureGroup(t)},e.Path=e.Class.extend({includes:[e.Mixin.Events],statics:{CLIP_PADDING:e.Browser.mobile?Math.max(0,Math.min(.5,(1280/Math.max(t.innerWidth,t.innerHeight)-1)/2)):.5},options:{stroke:!0,color:"#0033ff",dashArray:null,weight:5,opacity:.5,fill:!1,fillColor:null,fillOpacity:.2,clickable:!0},initialize:function(t){e.setOptions(this,t)},onAdd:function(t){this._map=t,this._container||(this._initElements(),this._initEvents()),this.projectLatlngs(),this._updatePath(),this._container&&this._map._pathRoot.appendChild(this._container),this.fire("add"),t.on({viewreset:this.projectLatlngs,moveend:this._updatePath},this)},addTo:function(t){return t.addLayer(this),this},onRemove:function(t){t._pathRoot.removeChild(this._container),this.fire("remove"),this._map=null,e.Browser.vml&&(this._container=null,this._stroke=null,this._fill=null),t.off({viewreset:this.projectLatlngs,moveend:this._updatePath},this)},projectLatlngs:function(){},setStyle:function(t){return e.setOptions(this,t),this._container&&this._updateStyle(),this},redraw:function(){return this._map&&(this.projectLatlngs(),this._updatePath()),this}}),e.Map.include({_updatePathViewport:function(){var t=e.Path.CLIP_PADDING,i=this.getSize(),s=e.DomUtil.getPosition(this._mapPane),o=s.multiplyBy(-1)._subtract(i.multiplyBy(t)._round()),n=o.add(i.multiplyBy(1+2*t)._round());this._pathViewport=new e.Bounds(o,n)}}),e.Path.SVG_NS="http://www.w3.org/2000/svg",e.Browser.svg=!(!i.createElementNS||!i.createElementNS(e.Path.SVG_NS,"svg").createSVGRect),e.Path=e.Path.extend({statics:{SVG:e.Browser.svg},bringToFront:function(){var t=this._map._pathRoot,i=this._container;return i&&t.lastChild!==i&&t.appendChild(i),this},bringToBack:function(){var t=this._map._pathRoot,i=this._container,s=t.firstChild;return i&&s!==i&&t.insertBefore(i,s),this},getPathString:function(){},_createElement:function(t){return i.createElementNS(e.Path.SVG_NS,t)},_initElements:function(){this._map._initPathRoot(),this._initPath(),this._initStyle()},_initPath:function(){this._container=this._createElement("g"),this._path=this._createElement("path"),this._container.appendChild(this._path)},_initStyle:function(){this.options.stroke&&(this._path.setAttribute("stroke-linejoin","round"),this._path.setAttribute("stroke-linecap","round")),this.options.fill&&this._path.setAttribute("fill-rule","evenodd"),this._updateStyle()},_updateStyle:function(){this.options.stroke?(this._path.setAttribute("stroke",this.options.color),this._path.setAttribute("stroke-opacity",this.options.opacity),this._path.setAttribute("stroke-width",this.options.weight),this.options.dashArray?this._path.setAttribute("stroke-dasharray",this.options.dashArray):this._path.removeAttribute("stroke-dasharray")):this._path.setAttribute("stroke","none"),this.options.fill?(this._path.setAttribute("fill",this.options.fillColor||this.options.color),this._path.setAttribute("fill-opacity",this.options.fillOpacity)):this._path.setAttribute("fill","none")},_updatePath:function(){var t=this.getPathString();t||(t="M0 0"),this._path.setAttribute("d",t)},_initEvents:function(){if(this.options.clickable){(e.Browser.svg||!e.Browser.vml)&&this._path.setAttribute("class","leaflet-clickable"),e.DomEvent.on(this._container,"click",this._onMouseClick,this);for(var t=["dblclick","mousedown","mouseover","mouseout","mousemove","contextmenu"],i=0;t.length>i;i++)e.DomEvent.on(this._container,t[i],this._fireMouseEvent,this)}},_onMouseClick:function(t){this._map.dragging&&this._map.dragging.moved()||this._fireMouseEvent(t)},_fireMouseEvent:function(t){if(this.hasEventListeners(t.type)){var i=this._map,s=i.mouseEventToContainerPoint(t),o=i.containerPointToLayerPoint(s),n=i.layerPointToLatLng(o);this.fire(t.type,{latlng:n,layerPoint:o,containerPoint:s,originalEvent:t}),"contextmenu"===t.type&&e.DomEvent.preventDefault(t),"mousemove"!==t.type&&e.DomEvent.stopPropagation(t)}}}),e.Map.include({_initPathRoot:function(){this._pathRoot||(this._pathRoot=e.Path.prototype._createElement("svg"),this._panes.overlayPane.appendChild(this._pathRoot),this.options.zoomAnimation&&e.Browser.any3d?(this._pathRoot.setAttribute("class"," leaflet-zoom-animated"),this.on({zoomanim:this._animatePathZoom,zoomend:this._endPathZoom})):this._pathRoot.setAttribute("class"," leaflet-zoom-hide"),this.on("moveend",this._updateSvgViewport),this._updateSvgViewport())},_animatePathZoom:function(t){var i=this.getZoomScale(t.zoom),s=this._getCenterOffset(t.center)._multiplyBy(-i)._add(this._pathViewport.min);this._pathRoot.style[e.DomUtil.TRANSFORM]=e.DomUtil.getTranslateString(s)+" scale("+i+") ",this._pathZooming=!0},_endPathZoom:function(){this._pathZooming=!1},_updateSvgViewport:function(){if(!this._pathZooming){this._updatePathViewport();var t=this._pathViewport,i=t.min,s=t.max,o=s.x-i.x,n=s.y-i.y,a=this._pathRoot,r=this._panes.overlayPane;e.Browser.mobileWebkit&&r.removeChild(a),e.DomUtil.setPosition(a,i),a.setAttribute("width",o),a.setAttribute("height",n),a.setAttribute("viewBox",[i.x,i.y,o,n].join(" ")),e.Browser.mobileWebkit&&r.appendChild(a)}}}),e.Path.include({bindPopup:function(t,i){return(!this._popup||i)&&(this._popup=new e.Popup(i,this)),this._popup.setContent(t),this._popupHandlersAdded||(this.on("click",this._openPopup,this).on("remove",this.closePopup,this),this._popupHandlersAdded=!0),this},unbindPopup:function(){return this._popup&&(this._popup=null,this.off("click",this._openPopup).off("remove",this.closePopup),this._popupHandlersAdded=!1),this},openPopup:function(t){return this._popup&&(t=t||this._latlng||this._latlngs[Math.floor(this._latlngs.length/2)],this._openPopup({latlng:t})),this},closePopup:function(){return this._popup&&this._popup._close(),this},_openPopup:function(t){this._popup.setLatLng(t.latlng),this._map.openPopup(this._popup)}}),e.Browser.vml=!e.Browser.svg&&function(){try{var t=i.createElement("div");t.innerHTML='';var s=t.firstChild;return s.style.behavior="url(#default#VML)",s&&"object"==typeof s.adj}catch(e){return!1}}(),e.Path=e.Browser.svg||!e.Browser.vml?e.Path:e.Path.extend({statics:{VML:!0,CLIP_PADDING:.02},_createElement:function(){try{return i.namespaces.add("lvml","urn:schemas-microsoft-com:vml"),function(t){return i.createElement("')}}catch(t){return function(t){return i.createElement("<"+t+' xmlns="urn:schemas-microsoft.com:vml" class="lvml">')}}}(),_initPath:function(){var t=this._container=this._createElement("shape");e.DomUtil.addClass(t,"leaflet-vml-shape"),this.options.clickable&&e.DomUtil.addClass(t,"leaflet-clickable"),t.coordsize="1 1",this._path=this._createElement("path"),t.appendChild(this._path),this._map._pathRoot.appendChild(t)},_initStyle:function(){this._updateStyle()},_updateStyle:function(){var t=this._stroke,i=this._fill,s=this.options,e=this._container;e.stroked=s.stroke,e.filled=s.fill,s.stroke?(t||(t=this._stroke=this._createElement("stroke"),t.endcap="round",e.appendChild(t)),t.weight=s.weight+"px",t.color=s.color,t.opacity=s.opacity,t.dashStyle=s.dashArray?s.dashArray instanceof Array?s.dashArray.join(" "):s.dashArray.replace(/ *, */g," "):""):t&&(e.removeChild(t),this._stroke=null),s.fill?(i||(i=this._fill=this._createElement("fill"),e.appendChild(i)),i.color=s.fillColor||s.color,i.opacity=s.fillOpacity):i&&(e.removeChild(i),this._fill=null)},_updatePath:function(){var t=this._container.style;t.display="none",this._path.v=this.getPathString()+" ",t.display=""}}),e.Map.include(e.Browser.svg||!e.Browser.vml?{}:{_initPathRoot:function(){if(!this._pathRoot){var t=this._pathRoot=i.createElement("div");t.className="leaflet-vml-container",this._panes.overlayPane.appendChild(t),this.on("moveend",this._updatePathViewport),this._updatePathViewport()}}}),e.Browser.canvas=function(){return!!i.createElement("canvas").getContext}(),e.Path=e.Path.SVG&&!t.L_PREFER_CANVAS||!e.Browser.canvas?e.Path:e.Path.extend({statics:{CANVAS:!0,SVG:!1},redraw:function(){return this._map&&(this.projectLatlngs(),this._requestUpdate()),this},setStyle:function(t){return e.setOptions(this,t),this._map&&(this._updateStyle(),this._requestUpdate()),this},onRemove:function(t){t.off("viewreset",this.projectLatlngs,this).off("moveend",this._updatePath,this),this.options.clickable&&this._map.off("click",this._onClick,this),this._requestUpdate(),this._map=null},_requestUpdate:function(){this._map&&!e.Path._updateRequest&&(e.Path._updateRequest=e.Util.requestAnimFrame(this._fireMapMoveEnd,this._map))},_fireMapMoveEnd:function(){e.Path._updateRequest=null,this.fire("moveend")},_initElements:function(){this._map._initPathRoot(),this._ctx=this._map._canvasCtx},_updateStyle:function(){var t=this.options;t.stroke&&(this._ctx.lineWidth=t.weight,this._ctx.strokeStyle=t.color),t.fill&&(this._ctx.fillStyle=t.fillColor||t.color)},_drawPath:function(){var t,i,s,o,n,a;for(this._ctx.beginPath(),t=0,s=this._parts.length;s>t;t++){for(i=0,o=this._parts[t].length;o>i;i++)n=this._parts[t][i],a=(0===i?"move":"line")+"To",this._ctx[a](n.x,n.y);this instanceof e.Polygon&&this._ctx.closePath()}},_checkIfEmpty:function(){return!this._parts.length},_updatePath:function(){if(!this._checkIfEmpty()){var t=this._ctx,i=this.options;this._drawPath(),t.save(),this._updateStyle(),i.fill&&(t.globalAlpha=i.fillOpacity,t.fill()),i.stroke&&(t.globalAlpha=i.opacity,t.stroke()),t.restore() +}},_initEvents:function(){this.options.clickable&&this._map.on("click",this._onClick,this)},_onClick:function(t){this._containsPoint(t.layerPoint)&&this.fire("click",{latlng:t.latlng,layerPoint:t.layerPoint,containerPoint:t.containerPoint,originalEvent:t})}}),e.Map.include(e.Path.SVG&&!t.L_PREFER_CANVAS||!e.Browser.canvas?{}:{_initPathRoot:function(){var t,s=this._pathRoot;s||(s=this._pathRoot=i.createElement("canvas"),s.style.position="absolute",t=this._canvasCtx=s.getContext("2d"),t.lineCap="round",t.lineJoin="round",this._panes.overlayPane.appendChild(s),this.options.zoomAnimation&&(this._pathRoot.className="leaflet-zoom-animated",this.on("zoomanim",this._animatePathZoom),this.on("zoomend",this._endPathZoom)),this.on("moveend",this._updateCanvasViewport),this._updateCanvasViewport())},_updateCanvasViewport:function(){if(!this._pathZooming){this._updatePathViewport();var t=this._pathViewport,i=t.min,s=t.max.subtract(i),o=this._pathRoot;e.DomUtil.setPosition(o,i),o.width=s.x,o.height=s.y,o.getContext("2d").translate(-i.x,-i.y)}}}),e.LineUtil={simplify:function(t,i){if(!i||!t.length)return t.slice();var s=i*i;return t=this._reducePoints(t,s),t=this._simplifyDP(t,s)},pointToSegmentDistance:function(t,i,s){return Math.sqrt(this._sqClosestPointOnSegment(t,i,s,!0))},closestPointOnSegment:function(t,i,s){return this._sqClosestPointOnSegment(t,i,s)},_simplifyDP:function(t,i){var e=t.length,o=typeof Uint8Array!=s+""?Uint8Array:Array,n=new o(e);n[0]=n[e-1]=1,this._simplifyDPStep(t,n,i,0,e-1);var a,r=[];for(a=0;e>a;a++)n[a]&&r.push(t[a]);return r},_simplifyDPStep:function(t,i,s,e,o){var n,a,r,h=0;for(a=e+1;o-1>=a;a++)r=this._sqClosestPointOnSegment(t[a],t[e],t[o],!0),r>h&&(n=a,h=r);h>s&&(i[n]=1,this._simplifyDPStep(t,i,s,e,n),this._simplifyDPStep(t,i,s,n,o))},_reducePoints:function(t,i){for(var s=[t[0]],e=1,o=0,n=t.length;n>e;e++)this._sqDist(t[e],t[o])>i&&(s.push(t[e]),o=e);return n-1>o&&s.push(t[n-1]),s},clipSegment:function(t,i,s,e){var o,n,a,r=e?this._lastCode:this._getBitCode(t,s),h=this._getBitCode(i,s);for(this._lastCode=h;;){if(!(r|h))return[t,i];if(r&h)return!1;o=r||h,n=this._getEdgeIntersection(t,i,o,s),a=this._getBitCode(n,s),o===r?(t=n,r=a):(i=n,h=a)}},_getEdgeIntersection:function(t,i,o,n){var a=i.x-t.x,r=i.y-t.y,h=n.min,l=n.max;return 8&o?new e.Point(t.x+a*(l.y-t.y)/r,l.y):4&o?new e.Point(t.x+a*(h.y-t.y)/r,h.y):2&o?new e.Point(l.x,t.y+r*(l.x-t.x)/a):1&o?new e.Point(h.x,t.y+r*(h.x-t.x)/a):s},_getBitCode:function(t,i){var s=0;return t.xi.max.x&&(s|=2),t.yi.max.y&&(s|=8),s},_sqDist:function(t,i){var s=i.x-t.x,e=i.y-t.y;return s*s+e*e},_sqClosestPointOnSegment:function(t,i,s,o){var n,a=i.x,r=i.y,h=s.x-a,l=s.y-r,c=h*h+l*l;return c>0&&(n=((t.x-a)*h+(t.y-r)*l)/c,n>1?(a=s.x,r=s.y):n>0&&(a+=h*n,r+=l*n)),h=t.x-a,l=t.y-r,o?h*h+l*l:new e.Point(a,r)}},e.Polyline=e.Path.extend({initialize:function(t,i){e.Path.prototype.initialize.call(this,i),this._latlngs=this._convertLatLngs(t)},options:{smoothFactor:1,noClip:!1},projectLatlngs:function(){this._originalPoints=[];for(var t=0,i=this._latlngs.length;i>t;t++)this._originalPoints[t]=this._map.latLngToLayerPoint(this._latlngs[t])},getPathString:function(){for(var t=0,i=this._parts.length,s="";i>t;t++)s+=this._getPathPartStr(this._parts[t]);return s},getLatLngs:function(){return this._latlngs},setLatLngs:function(t){return this._latlngs=this._convertLatLngs(t),this.redraw()},addLatLng:function(t){return this._latlngs.push(e.latLng(t)),this.redraw()},spliceLatLngs:function(){var t=[].splice.apply(this._latlngs,arguments);return this._convertLatLngs(this._latlngs),this.redraw(),t},closestLayerPoint:function(t){for(var i,s,o=1/0,n=this._parts,a=null,r=0,h=n.length;h>r;r++)for(var l=n[r],c=1,m=l.length;m>c;c++){i=l[c-1],s=l[c];var u=e.LineUtil._sqClosestPointOnSegment(t,i,s,!0);o>u&&(o=u,a=e.LineUtil._sqClosestPointOnSegment(t,i,s))}return a&&(a.distance=Math.sqrt(o)),a},getBounds:function(){var t,i,s=new e.LatLngBounds,o=this.getLatLngs();for(t=0,i=o.length;i>t;t++)s.extend(o[t]);return s},_convertLatLngs:function(t){var i,s;for(i=0,s=t.length;s>i;i++){if(e.Util.isArray(t[i])&&"number"!=typeof t[i][0])return;t[i]=e.latLng(t[i])}return t},_initEvents:function(){e.Path.prototype._initEvents.call(this)},_getPathPartStr:function(t){for(var i,s=e.Path.VML,o=0,n=t.length,a="";n>o;o++)i=t[o],s&&i._round(),a+=(o?"L":"M")+i.x+" "+i.y;return a},_clipPoints:function(){var t,i,o,n=this._originalPoints,a=n.length;if(this.options.noClip)return this._parts=[n],s;this._parts=[];var r=this._parts,h=this._map._pathViewport,l=e.LineUtil;for(t=0,i=0;a-1>t;t++)o=l.clipSegment(n[t],n[t+1],h,t),o&&(r[i]=r[i]||[],r[i].push(o[0]),(o[1]!==n[t+1]||t===a-2)&&(r[i].push(o[1]),i++))},_simplifyPoints:function(){for(var t=this._parts,i=e.LineUtil,s=0,o=t.length;o>s;s++)t[s]=i.simplify(t[s],this.options.smoothFactor)},_updatePath:function(){this._map&&(this._clipPoints(),this._simplifyPoints(),e.Path.prototype._updatePath.call(this))}}),e.polyline=function(t,i){return new e.Polyline(t,i)},e.PolyUtil={},e.PolyUtil.clipPolygon=function(t,i){var s,o,n,a,r,h,l,c,m,u=[1,4,2,8],d=e.LineUtil;for(o=0,l=t.length;l>o;o++)t[o]._code=d._getBitCode(t[o],i);for(a=0;4>a;a++){for(c=u[a],s=[],o=0,l=t.length,n=l-1;l>o;n=o++)r=t[o],h=t[n],r._code&c?h._code&c||(m=d._getEdgeIntersection(h,r,c,i),m._code=d._getBitCode(m,i),s.push(m)):(h._code&c&&(m=d._getEdgeIntersection(h,r,c,i),m._code=d._getBitCode(m,i),s.push(m)),s.push(r));t=s}return t},e.Polygon=e.Polyline.extend({options:{fill:!0},initialize:function(t,i){e.Polyline.prototype.initialize.call(this,t,i),t&&e.Util.isArray(t[0])&&"number"!=typeof t[0][0]&&(this._latlngs=this._convertLatLngs(t[0]),this._holes=t.slice(1))},projectLatlngs:function(){if(e.Polyline.prototype.projectLatlngs.call(this),this._holePoints=[],this._holes){var t,i,s,o;for(t=0,s=this._holes.length;s>t;t++)for(this._holePoints[t]=[],i=0,o=this._holes[t].length;o>i;i++)this._holePoints[t][i]=this._map.latLngToLayerPoint(this._holes[t][i])}},_clipPoints:function(){var t=this._originalPoints,i=[];if(this._parts=[t].concat(this._holePoints),!this.options.noClip){for(var s=0,o=this._parts.length;o>s;s++){var n=e.PolyUtil.clipPolygon(this._parts[s],this._map._pathViewport);n.length&&i.push(n)}this._parts=i}},_getPathPartStr:function(t){var i=e.Polyline.prototype._getPathPartStr.call(this,t);return i+(e.Browser.svg?"z":"x")}}),e.polygon=function(t,i){return new e.Polygon(t,i)},function(){function t(t){return e.FeatureGroup.extend({initialize:function(t,i){this._layers={},this._options=i,this.setLatLngs(t)},setLatLngs:function(i){var s=0,e=i.length;for(this.eachLayer(function(t){e>s?t.setLatLngs(i[s++]):this.removeLayer(t)},this);e>s;)this.addLayer(new t(i[s++],this._options));return this}})}e.MultiPolyline=t(e.Polyline),e.MultiPolygon=t(e.Polygon),e.multiPolyline=function(t,i){return new e.MultiPolyline(t,i)},e.multiPolygon=function(t,i){return new e.MultiPolygon(t,i)}}(),e.Rectangle=e.Polygon.extend({initialize:function(t,i){e.Polygon.prototype.initialize.call(this,this._boundsToLatLngs(t),i)},setBounds:function(t){this.setLatLngs(this._boundsToLatLngs(t))},_boundsToLatLngs:function(t){return t=e.latLngBounds(t),[t.getSouthWest(),t.getNorthWest(),t.getNorthEast(),t.getSouthEast()]}}),e.rectangle=function(t,i){return new e.Rectangle(t,i)},e.Circle=e.Path.extend({initialize:function(t,i,s){e.Path.prototype.initialize.call(this,s),this._latlng=e.latLng(t),this._mRadius=i},options:{fill:!0},setLatLng:function(t){return this._latlng=e.latLng(t),this.redraw()},setRadius:function(t){return this._mRadius=t,this.redraw()},projectLatlngs:function(){var t=this._getLngRadius(),i=new e.LatLng(this._latlng.lat,this._latlng.lng-t),s=this._map.latLngToLayerPoint(i);this._point=this._map.latLngToLayerPoint(this._latlng),this._radius=Math.max(Math.round(this._point.x-s.x),1)},getBounds:function(){var t=this._getLngRadius(),i=360*(this._mRadius/40075017),s=this._latlng,o=new e.LatLng(s.lat-i,s.lng-t),n=new e.LatLng(s.lat+i,s.lng+t);return new e.LatLngBounds(o,n)},getLatLng:function(){return this._latlng},getPathString:function(){var t=this._point,i=this._radius;return this._checkIfEmpty()?"":e.Browser.svg?"M"+t.x+","+(t.y-i)+"A"+i+","+i+",0,1,1,"+(t.x-.1)+","+(t.y-i)+" z":(t._round(),i=Math.round(i),"AL "+t.x+","+t.y+" "+i+","+i+" 0,"+23592600)},getRadius:function(){return this._mRadius},_getLatRadius:function(){return 360*(this._mRadius/40075017)},_getLngRadius:function(){return this._getLatRadius()/Math.cos(e.LatLng.DEG_TO_RAD*this._latlng.lat)},_checkIfEmpty:function(){if(!this._map)return!1;var t=this._map._pathViewport,i=this._radius,s=this._point;return s.x-i>t.max.x||s.y-i>t.max.y||s.x+is;s++)for(l=this._parts[s],o=0,r=l.length,n=r-1;r>o;n=o++)if((i||0!==o)&&(h=e.LineUtil.pointToSegmentDistance(t,l[n],l[o]),c>=h))return!0;return!1}}:{}),e.Polygon.include(e.Path.CANVAS?{_containsPoint:function(t){var i,s,o,n,a,r,h,l,c=!1;if(e.Polyline.prototype._containsPoint.call(this,t,!0))return!0;for(n=0,h=this._parts.length;h>n;n++)for(i=this._parts[n],a=0,l=i.length,r=l-1;l>a;r=a++)s=i[a],o=i[r],s.y>t.y!=o.y>t.y&&t.x<(o.x-s.x)*(t.y-s.y)/(o.y-s.y)+s.x&&(c=!c);return c}}:{}),e.Circle.include(e.Path.CANVAS?{_drawPath:function(){var t=this._point;this._ctx.beginPath(),this._ctx.arc(t.x,t.y,this._radius,0,2*Math.PI,!1)},_containsPoint:function(t){var i=this._point,s=this.options.stroke?this.options.weight/2:0;return t.distanceTo(i)<=this._radius+s}}:{}),e.GeoJSON=e.FeatureGroup.extend({initialize:function(t,i){e.setOptions(this,i),this._layers={},t&&this.addData(t)},addData:function(t){var i,s,o=e.Util.isArray(t)?t:t.features;if(o){for(i=0,s=o.length;s>i;i++)(o[i].geometries||o[i].geometry||o[i].features)&&this.addData(o[i]);return this}var n=this.options;if(!n.filter||n.filter(t)){var a=e.GeoJSON.geometryToLayer(t,n.pointToLayer);return a.feature=t,a.defaultOptions=a.options,this.resetStyle(a),n.onEachFeature&&n.onEachFeature(t,a),this.addLayer(a)}},resetStyle:function(t){var i=this.options.style;i&&(e.Util.extend(t.options,t.defaultOptions),this._setLayerStyle(t,i))},setStyle:function(t){this.eachLayer(function(i){this._setLayerStyle(i,t)},this)},_setLayerStyle:function(t,i){"function"==typeof i&&(i=i(t.feature)),t.setStyle&&t.setStyle(i)}}),e.extend(e.GeoJSON,{geometryToLayer:function(t,i){var s,o,n,a,r,h="Feature"===t.type?t.geometry:t,l=h.coordinates,c=[];switch(h.type){case"Point":return s=this.coordsToLatLng(l),i?i(t,s):new e.Marker(s);case"MultiPoint":for(n=0,a=l.length;a>n;n++)s=this.coordsToLatLng(l[n]),r=i?i(t,s):new e.Marker(s),c.push(r);return new e.FeatureGroup(c);case"LineString":return o=this.coordsToLatLngs(l),new e.Polyline(o);case"Polygon":return o=this.coordsToLatLngs(l,1),new e.Polygon(o);case"MultiLineString":return o=this.coordsToLatLngs(l,1),new e.MultiPolyline(o);case"MultiPolygon":return o=this.coordsToLatLngs(l,2),new e.MultiPolygon(o);case"GeometryCollection":for(n=0,a=h.geometries.length;a>n;n++)r=this.geometryToLayer({geometry:h.geometries[n],type:"Feature",properties:t.properties},i),c.push(r);return new e.FeatureGroup(c);default:throw Error("Invalid GeoJSON object.")}},coordsToLatLng:function(t,i){var s=parseFloat(t[i?0:1]),o=parseFloat(t[i?1:0]);return new e.LatLng(s,o)},coordsToLatLngs:function(t,i,s){var e,o,n,a=[];for(o=0,n=t.length;n>o;o++)e=i?this.coordsToLatLngs(t[o],i-1,s):this.coordsToLatLng(t[o],s),a.push(e);return a}}),e.geoJson=function(t,i){return new e.GeoJSON(t,i)},e.DomEvent={addListener:function(t,i,o,n){var a,r,h,l=e.stamp(o),c="_leaflet_"+i+l;return t[c]?this:(a=function(i){return o.call(n||t,i||e.DomEvent._getEvent())},e.Browser.msTouch&&0===i.indexOf("touch")?this.addMsTouchListener(t,i,a,l):(e.Browser.touch&&"dblclick"===i&&this.addDoubleTapListener&&this.addDoubleTapListener(t,a,l),"addEventListener"in t?"mousewheel"===i?(t.addEventListener("DOMMouseScroll",a,!1),t.addEventListener(i,a,!1)):"mouseenter"===i||"mouseleave"===i?(r=a,h="mouseenter"===i?"mouseover":"mouseout",a=function(i){return e.DomEvent._checkMouse(t,i)?r(i):s},t.addEventListener(h,a,!1)):t.addEventListener(i,a,!1):"attachEvent"in t&&t.attachEvent("on"+i,a),t[c]=a,this))},removeListener:function(t,i,s){var o=e.stamp(s),n="_leaflet_"+i+o,a=t[n];if(a)return e.Browser.msTouch&&0===i.indexOf("touch")?this.removeMsTouchListener(t,i,o):e.Browser.touch&&"dblclick"===i&&this.removeDoubleTapListener?this.removeDoubleTapListener(t,o):"removeEventListener"in t?"mousewheel"===i?(t.removeEventListener("DOMMouseScroll",a,!1),t.removeEventListener(i,a,!1)):"mouseenter"===i||"mouseleave"===i?t.removeEventListener("mouseenter"===i?"mouseover":"mouseout",a,!1):t.removeEventListener(i,a,!1):"detachEvent"in t&&t.detachEvent("on"+i,a),t[n]=null,this},stopPropagation:function(t){return t.stopPropagation?t.stopPropagation():t.cancelBubble=!0,this},disableClickPropagation:function(t){for(var i=e.DomEvent.stopPropagation,s=e.Draggable.START.length-1;s>=0;s--)e.DomEvent.addListener(t,e.Draggable.START[s],i);return e.DomEvent.addListener(t,"click",i).addListener(t,"dblclick",i)},preventDefault:function(t){return t.preventDefault?t.preventDefault():t.returnValue=!1,this},stop:function(t){return e.DomEvent.preventDefault(t).stopPropagation(t)},getMousePosition:function(t,s){var o=i.body,n=i.documentElement,a=t.pageX?t.pageX:t.clientX+o.scrollLeft+n.scrollLeft,r=t.pageY?t.pageY:t.clientY+o.scrollTop+n.scrollTop,h=new e.Point(a,r);return s?h._subtract(e.DomUtil.getViewportOffset(s)):h},getWheelDelta:function(t){var i=0;return t.wheelDelta&&(i=t.wheelDelta/120),t.detail&&(i=-t.detail/3),i},_checkMouse:function(t,i){var s=i.relatedTarget;if(!s)return!0;try{for(;s&&s!==t;)s=s.parentNode}catch(e){return!1}return s!==t},_getEvent:function(){var i=t.event;if(!i)for(var s=arguments.callee.caller;s&&(i=s.arguments[0],!i||t.Event!==i.constructor);)s=s.caller;return i}},e.DomEvent.on=e.DomEvent.addListener,e.DomEvent.off=e.DomEvent.removeListener,e.Draggable=e.Class.extend({includes:e.Mixin.Events,statics:{START:e.Browser.touch?["touchstart","mousedown"]:["mousedown"],END:{mousedown:"mouseup",touchstart:"touchend",MSPointerDown:"touchend"},MOVE:{mousedown:"mousemove",touchstart:"touchmove",MSPointerDown:"touchmove"},TAP_TOLERANCE:15},initialize:function(t,i,s){this._element=t,this._dragStartTarget=i||t,this._longPress=s&&!e.Browser.msTouch},enable:function(){if(!this._enabled){for(var t=e.Draggable.START.length-1;t>=0;t--)e.DomEvent.on(this._dragStartTarget,e.Draggable.START[t],this._onDown,this);this._enabled=!0}},disable:function(){if(this._enabled){for(var t=e.Draggable.START.length-1;t>=0;t--)e.DomEvent.off(this._dragStartTarget,e.Draggable.START[t],this._onDown,this);this._enabled=!1,this._moved=!1}},_onDown:function(t){if(!(!e.Browser.touch&&t.shiftKey||1!==t.which&&1!==t.button&&!t.touches||(e.DomEvent.preventDefault(t),e.DomEvent.stopPropagation(t),e.Draggable._disabled))){if(this._simulateClick=!0,t.touches&&t.touches.length>1)return this._simulateClick=!1,clearTimeout(this._longPressTimeout),s;var o=t.touches&&1===t.touches.length?t.touches[0]:t,n=o.target;e.Browser.touch&&"a"===n.tagName.toLowerCase()&&e.DomUtil.addClass(n,"leaflet-active"),this._moved=!1,this._moving||(this._startPoint=new e.Point(o.clientX,o.clientY),this._startPos=this._newPos=e.DomUtil.getPosition(this._element),t.touches&&1===t.touches.length&&e.Browser.touch&&this._longPress&&(this._longPressTimeout=setTimeout(e.bind(function(){var t=this._newPos&&this._newPos.distanceTo(this._startPos)||0;e.Draggable.TAP_TOLERANCE>t&&(this._simulateClick=!1,this._onUp(),this._simulateEvent("contextmenu",o))},this),1e3)),e.DomEvent.on(i,e.Draggable.MOVE[t.type],this._onMove,this),e.DomEvent.on(i,e.Draggable.END[t.type],this._onUp,this))}},_onMove:function(t){if(!(t.touches&&t.touches.length>1)){var i=t.touches&&1===t.touches.length?t.touches[0]:t,s=new e.Point(i.clientX,i.clientY),o=s.subtract(this._startPoint);(o.x||o.y)&&(e.DomEvent.preventDefault(t),this._moved||(this.fire("dragstart"),this._moved=!0,this._startPos=e.DomUtil.getPosition(this._element).subtract(o),e.Browser.touch||(e.DomUtil.disableTextSelection(),this._setMovingCursor())),this._newPos=this._startPos.add(o),this._moving=!0,e.Util.cancelAnimFrame(this._animRequest),this._animRequest=e.Util.requestAnimFrame(this._updatePosition,this,!0,this._dragStartTarget))}},_updatePosition:function(){this.fire("predrag"),e.DomUtil.setPosition(this._element,this._newPos),this.fire("drag")},_onUp:function(t){var s;if(clearTimeout(this._longPressTimeout),this._simulateClick&&t.changedTouches){var o=t.changedTouches[0],n=o.target,a=this._newPos&&this._newPos.distanceTo(this._startPos)||0;"a"===n.tagName.toLowerCase()&&e.DomUtil.removeClass(n,"leaflet-active"),e.Draggable.TAP_TOLERANCE>a&&(s=o)}e.Browser.touch||(e.DomUtil.enableTextSelection(),this._restoreCursor());for(var r in e.Draggable.MOVE)e.Draggable.MOVE.hasOwnProperty(r)&&(e.DomEvent.off(i,e.Draggable.MOVE[r],this._onMove),e.DomEvent.off(i,e.Draggable.END[r],this._onUp));this._moved&&(e.Util.cancelAnimFrame(this._animRequest),this.fire("dragend")),this._moving=!1,s&&(this._moved=!1,this._simulateEvent("click",s))},_setMovingCursor:function(){e.DomUtil.addClass(i.body,"leaflet-dragging")},_restoreCursor:function(){e.DomUtil.removeClass(i.body,"leaflet-dragging")},_simulateEvent:function(s,e){var o=i.createEvent("MouseEvents");o.initMouseEvent(s,!0,!0,t,1,e.screenX,e.screenY,e.clientX,e.clientY,!1,!1,!1,!1,0,null),e.target.dispatchEvent(o)}}),e.Handler=e.Class.extend({initialize:function(t){this._map=t},enable:function(){this._enabled||(this._enabled=!0,this.addHooks())},disable:function(){this._enabled&&(this._enabled=!1,this.removeHooks())},enabled:function(){return!!this._enabled}}),e.Map.mergeOptions({dragging:!0,inertia:!e.Browser.android23,inertiaDeceleration:3400,inertiaMaxSpeed:1/0,inertiaThreshold:e.Browser.touch?32:18,easeLinearity:.25,longPress:!0,worldCopyJump:!1}),e.Map.Drag=e.Handler.extend({addHooks:function(){if(!this._draggable){var t=this._map;this._draggable=new e.Draggable(t._mapPane,t._container,t.options.longPress),this._draggable.on({dragstart:this._onDragStart,drag:this._onDrag,dragend:this._onDragEnd},this),t.options.worldCopyJump&&(this._draggable.on("predrag",this._onPreDrag,this),t.on("viewreset",this._onViewReset,this))}this._draggable.enable()},removeHooks:function(){this._draggable.disable()},moved:function(){return this._draggable&&this._draggable._moved},_onDragStart:function(){var t=this._map;t._panAnim&&t._panAnim.stop(),t.fire("movestart").fire("dragstart"),t.options.inertia&&(this._positions=[],this._times=[])},_onDrag:function(){if(this._map.options.inertia){var t=this._lastTime=+new Date,i=this._lastPos=this._draggable._newPos;this._positions.push(i),this._times.push(t),t-this._times[0]>200&&(this._positions.shift(),this._times.shift())}this._map.fire("move").fire("drag")},_onViewReset:function(){var t=this._map.getSize()._divideBy(2),i=this._map.latLngToLayerPoint(new e.LatLng(0,0));this._initialWorldOffset=i.subtract(t).x,this._worldWidth=this._map.project(new e.LatLng(0,180)).x},_onPreDrag:function(){var t=this._worldWidth,i=Math.round(t/2),s=this._initialWorldOffset,e=this._draggable._newPos.x,o=(e-i+s)%t+i-s,n=(e+i+s)%t-i-s,a=Math.abs(o+s)i.inertiaThreshold||!this._positions[0];if(o)t.fire("moveend");else{var n=this._lastPos.subtract(this._positions[0]),a=(this._lastTime+s-this._times[0])/1e3,r=i.easeLinearity,h=n.multiplyBy(r/a),l=h.distanceTo(new e.Point(0,0)),c=Math.min(i.inertiaMaxSpeed,l),m=h.multiplyBy(c/l),u=c/(i.inertiaDeceleration*r),d=m.multiplyBy(-u/2).round();e.Util.requestAnimFrame(function(){t.panBy(d,u,r)})}t.fire("dragend"),i.maxBounds&&e.Util.requestAnimFrame(this._panInsideMaxBounds,t,!0,t._container)},_panInsideMaxBounds:function(){this.panInsideBounds(this.options.maxBounds)}}),e.Map.addInitHook("addHandler","dragging",e.Map.Drag),e.Map.mergeOptions({doubleClickZoom:!0}),e.Map.DoubleClickZoom=e.Handler.extend({addHooks:function(){this._map.on("dblclick",this._onDoubleClick)},removeHooks:function(){this._map.off("dblclick",this._onDoubleClick)},_onDoubleClick:function(t){this.setView(t.latlng,this._zoom+1)}}),e.Map.addInitHook("addHandler","doubleClickZoom",e.Map.DoubleClickZoom),e.Map.mergeOptions({scrollWheelZoom:!0}),e.Map.ScrollWheelZoom=e.Handler.extend({addHooks:function(){e.DomEvent.on(this._map._container,"mousewheel",this._onWheelScroll,this),this._delta=0},removeHooks:function(){e.DomEvent.off(this._map._container,"mousewheel",this._onWheelScroll)},_onWheelScroll:function(t){var i=e.DomEvent.getWheelDelta(t);this._delta+=i,this._lastMousePos=this._map.mouseEventToContainerPoint(t),this._startTime||(this._startTime=+new Date);var s=Math.max(40-(+new Date-this._startTime),0);clearTimeout(this._timer),this._timer=setTimeout(e.bind(this._performZoom,this),s),e.DomEvent.preventDefault(t),e.DomEvent.stopPropagation(t)},_performZoom:function(){var t=this._map,i=this._delta,s=t.getZoom();if(i=i>0?Math.ceil(i):Math.round(i),i=Math.max(Math.min(i,4),-4),i=t._limitZoom(s+i)-s,this._delta=0,this._startTime=null,i){var e=s+i,o=this._getCenterForScrollWheelZoom(e);t.setView(o,e)}},_getCenterForScrollWheelZoom:function(t){var i=this._map,s=i.getZoomScale(t),e=i.getSize()._divideBy(2),o=this._lastMousePos._subtract(e)._multiplyBy(1-1/s),n=i._getTopLeftPoint()._add(e)._add(o);return i.unproject(n)}}),e.Map.addInitHook("addHandler","scrollWheelZoom",e.Map.ScrollWheelZoom),e.extend(e.DomEvent,{_touchstart:e.Browser.msTouch?"MSPointerDown":"touchstart",_touchend:e.Browser.msTouch?"MSPointerUp":"touchend",addDoubleTapListener:function(t,s,o){function n(t){var i;if(e.Browser.msTouch?(p.push(t.pointerId),i=p.length):i=t.touches.length,!(i>1)){var s=Date.now(),o=s-(r||s);h=t.touches?t.touches[0]:t,l=o>0&&c>=o,r=s}}function a(t){if(e.Browser.msTouch){var i=p.indexOf(t.pointerId);if(-1===i)return;p.splice(i,1)}if(l){if(e.Browser.msTouch){var o,n={};for(var a in h)o=h[a],n[a]="function"==typeof o?o.bind(h):o;h=n}h.type="dblclick",s(h),r=null}}var r,h,l=!1,c=250,m="_leaflet_",u=this._touchstart,d=this._touchend,p=[];t[m+u+o]=n,t[m+d+o]=a;var _=e.Browser.msTouch?i.documentElement:t;return t.addEventListener(u,n,!1),_.addEventListener(d,a,!1),e.Browser.msTouch&&_.addEventListener("MSPointerCancel",a,!1),this},removeDoubleTapListener:function(t,s){var o="_leaflet_";return t.removeEventListener(this._touchstart,t[o+this._touchstart+s],!1),(e.Browser.msTouch?i.documentElement:t).removeEventListener(this._touchend,t[o+this._touchend+s],!1),e.Browser.msTouch&&i.documentElement.removeEventListener("MSPointerCancel",t[o+this._touchend+s],!1),this}}),e.extend(e.DomEvent,{_msTouches:[],_msDocumentListener:!1,addMsTouchListener:function(t,i,s,e){switch(i){case"touchstart":return this.addMsTouchListenerStart(t,i,s,e);case"touchend":return this.addMsTouchListenerEnd(t,i,s,e);case"touchmove":return this.addMsTouchListenerMove(t,i,s,e);default:throw"Unknown touch event type"}},addMsTouchListenerStart:function(t,s,e,o){var n="_leaflet_",a=this._msTouches,r=function(t){for(var i=!1,s=0;a.length>s;s++)if(a[s].pointerId===t.pointerId){i=!0;break}i||a.push(t),t.touches=a.slice(),t.changedTouches=[t],e(t)};if(t[n+"touchstart"+o]=r,t.addEventListener("MSPointerDown",r,!1),!this._msDocumentListener){var h=function(t){for(var i=0;a.length>i;i++)if(a[i].pointerId===t.pointerId){a.splice(i,1);break}};i.documentElement.addEventListener("MSPointerUp",h,!1),i.documentElement.addEventListener("MSPointerCancel",h,!1),this._msDocumentListener=!0}return this},addMsTouchListenerMove:function(t,i,s,e){function o(t){if(t.pointerType!==t.MSPOINTER_TYPE_MOUSE||0!==t.buttons){for(var i=0;a.length>i;i++)if(a[i].pointerId===t.pointerId){a[i]=t;break}t.touches=a.slice(),t.changedTouches=[t],s(t)}}var n="_leaflet_",a=this._msTouches;return t[n+"touchmove"+e]=o,t.addEventListener("MSPointerMove",o,!1),this},addMsTouchListenerEnd:function(t,i,s,e){var o="_leaflet_",n=this._msTouches,a=function(t){for(var i=0;n.length>i;i++)if(n[i].pointerId===t.pointerId){n.splice(i,1);break}t.touches=n.slice(),t.changedTouches=[t],s(t)};return t[o+"touchend"+e]=a,t.addEventListener("MSPointerUp",a,!1),t.addEventListener("MSPointerCancel",a,!1),this},removeMsTouchListener:function(t,i,s){var e="_leaflet_",o=t[e+i+s];switch(i){case"touchstart":t.removeEventListener("MSPointerDown",o,!1);break;case"touchmove":t.removeEventListener("MSPointerMove",o,!1);break;case"touchend":t.removeEventListener("MSPointerUp",o,!1),t.removeEventListener("MSPointerCancel",o,!1)}return this}}),e.Map.mergeOptions({touchZoom:e.Browser.touch&&!e.Browser.android23}),e.Map.TouchZoom=e.Handler.extend({addHooks:function(){e.DomEvent.on(this._map._container,"touchstart",this._onTouchStart,this)},removeHooks:function(){e.DomEvent.off(this._map._container,"touchstart",this._onTouchStart,this)},_onTouchStart:function(t){var s=this._map;if(t.touches&&2===t.touches.length&&!s._animatingZoom&&!this._zooming){var o=s.mouseEventToLayerPoint(t.touches[0]),n=s.mouseEventToLayerPoint(t.touches[1]),a=s._getCenterLayerPoint();this._startCenter=o.add(n)._divideBy(2),this._startDist=o.distanceTo(n),this._moved=!1,this._zooming=!0,this._centerOffset=a.subtract(this._startCenter),s._panAnim&&s._panAnim.stop(),e.DomEvent.on(i,"touchmove",this._onTouchMove,this).on(i,"touchend",this._onTouchEnd,this),e.DomEvent.preventDefault(t)}},_onTouchMove:function(t){if(t.touches&&2===t.touches.length){var i=this._map,s=i.mouseEventToLayerPoint(t.touches[0]),o=i.mouseEventToLayerPoint(t.touches[1]);this._scale=s.distanceTo(o)/this._startDist,this._delta=s._add(o)._divideBy(2)._subtract(this._startCenter),1!==this._scale&&(this._moved||(e.DomUtil.addClass(i._mapPane,"leaflet-zoom-anim leaflet-touching"),i.fire("movestart").fire("zoomstart")._prepareTileBg(),this._moved=!0),e.Util.cancelAnimFrame(this._animRequest),this._animRequest=e.Util.requestAnimFrame(this._updateOnMove,this,!0,this._map._container),e.DomEvent.preventDefault(t))}},_updateOnMove:function(){var t=this._map,i=this._getScaleOrigin(),s=t.layerPointToLatLng(i);t.fire("zoomanim",{center:s,zoom:t.getScaleZoom(this._scale)}),t._tileBg.style[e.DomUtil.TRANSFORM]=e.DomUtil.getTranslateString(this._delta)+" "+e.DomUtil.getScaleString(this._scale,this._startCenter)},_onTouchEnd:function(){if(this._moved&&this._zooming){var t=this._map;this._zooming=!1,e.DomUtil.removeClass(t._mapPane,"leaflet-touching"),e.DomEvent.off(i,"touchmove",this._onTouchMove).off(i,"touchend",this._onTouchEnd);var s=this._getScaleOrigin(),o=t.layerPointToLatLng(s),n=t.getZoom(),a=t.getScaleZoom(this._scale)-n,r=a>0?Math.ceil(a):Math.floor(a),h=t._limitZoom(n+r);t.fire("zoomanim",{center:o,zoom:h}),t._runAnimation(o,h,t.getZoomScale(h)/this._scale,s,!0)}},_getScaleOrigin:function(){var t=this._centerOffset.subtract(this._delta).divideBy(this._scale);return this._startCenter.add(t)}}),e.Map.addInitHook("addHandler","touchZoom",e.Map.TouchZoom),e.Map.mergeOptions({boxZoom:!0}),e.Map.BoxZoom=e.Handler.extend({initialize:function(t){this._map=t,this._container=t._container,this._pane=t._panes.overlayPane},addHooks:function(){e.DomEvent.on(this._container,"mousedown",this._onMouseDown,this)},removeHooks:function(){e.DomEvent.off(this._container,"mousedown",this._onMouseDown)},_onMouseDown:function(t){return!t.shiftKey||1!==t.which&&1!==t.button?!1:(e.DomUtil.disableTextSelection(),this._startLayerPoint=this._map.mouseEventToLayerPoint(t),this._box=e.DomUtil.create("div","leaflet-zoom-box",this._pane),e.DomUtil.setPosition(this._box,this._startLayerPoint),this._container.style.cursor="crosshair",e.DomEvent.on(i,"mousemove",this._onMouseMove,this).on(i,"mouseup",this._onMouseUp,this).preventDefault(t),this._map.fire("boxzoomstart"),s)},_onMouseMove:function(t){var i=this._startLayerPoint,s=this._box,o=this._map.mouseEventToLayerPoint(t),n=o.subtract(i),a=new e.Point(Math.min(o.x,i.x),Math.min(o.y,i.y));e.DomUtil.setPosition(s,a),s.style.width=Math.max(0,Math.abs(n.x)-4)+"px",s.style.height=Math.max(0,Math.abs(n.y)-4)+"px"},_onMouseUp:function(t){this._pane.removeChild(this._box),this._container.style.cursor="",e.DomUtil.enableTextSelection(),e.DomEvent.off(i,"mousemove",this._onMouseMove).off(i,"mouseup",this._onMouseUp);var s=this._map,o=s.mouseEventToLayerPoint(t);if(!this._startLayerPoint.equals(o)){var n=new e.LatLngBounds(s.layerPointToLatLng(this._startLayerPoint),s.layerPointToLatLng(o));s.fitBounds(n),s.fire("boxzoomend",{boxZoomBounds:n})}}}),e.Map.addInitHook("addHandler","boxZoom",e.Map.BoxZoom),e.Map.mergeOptions({keyboard:!0,keyboardPanOffset:80,keyboardZoomOffset:1}),e.Map.Keyboard=e.Handler.extend({keyCodes:{left:[37],right:[39],down:[40],up:[38],zoomIn:[187,107,61],zoomOut:[189,109,173]},initialize:function(t){this._map=t,this._setPanOffset(t.options.keyboardPanOffset),this._setZoomOffset(t.options.keyboardZoomOffset)},addHooks:function(){var t=this._map._container;-1===t.tabIndex&&(t.tabIndex="0"),e.DomEvent.on(t,"focus",this._onFocus,this).on(t,"blur",this._onBlur,this).on(t,"mousedown",this._onMouseDown,this),this._map.on("focus",this._addHooks,this).on("blur",this._removeHooks,this)},removeHooks:function(){this._removeHooks();var t=this._map._container;e.DomEvent.off(t,"focus",this._onFocus,this).off(t,"blur",this._onBlur,this).off(t,"mousedown",this._onMouseDown,this),this._map.off("focus",this._addHooks,this).off("blur",this._removeHooks,this)},_onMouseDown:function(){this._focused||this._map._container.focus()},_onFocus:function(){this._focused=!0,this._map.fire("focus")},_onBlur:function(){this._focused=!1,this._map.fire("blur")},_setPanOffset:function(t){var i,s,e=this._panKeys={},o=this.keyCodes;for(i=0,s=o.left.length;s>i;i++)e[o.left[i]]=[-1*t,0];for(i=0,s=o.right.length;s>i;i++)e[o.right[i]]=[t,0];for(i=0,s=o.down.length;s>i;i++)e[o.down[i]]=[0,t];for(i=0,s=o.up.length;s>i;i++)e[o.up[i]]=[0,-1*t]},_setZoomOffset:function(t){var i,s,e=this._zoomKeys={},o=this.keyCodes;for(i=0,s=o.zoomIn.length;s>i;i++)e[o.zoomIn[i]]=t;for(i=0,s=o.zoomOut.length;s>i;i++)e[o.zoomOut[i]]=-t},_addHooks:function(){e.DomEvent.on(i,"keydown",this._onKeyDown,this)},_removeHooks:function(){e.DomEvent.off(i,"keydown",this._onKeyDown,this)},_onKeyDown:function(t){var i=t.keyCode,s=this._map;if(this._panKeys.hasOwnProperty(i))s.panBy(this._panKeys[i]),s.options.maxBounds&&s.panInsideBounds(s.options.maxBounds);else{if(!this._zoomKeys.hasOwnProperty(i))return;s.setZoom(s.getZoom()+this._zoomKeys[i])}e.DomEvent.stop(t)}}),e.Map.addInitHook("addHandler","keyboard",e.Map.Keyboard),e.Handler.MarkerDrag=e.Handler.extend({initialize:function(t){this._marker=t},addHooks:function(){var t=this._marker._icon;this._draggable||(this._draggable=new e.Draggable(t,t).on("dragstart",this._onDragStart,this).on("drag",this._onDrag,this).on("dragend",this._onDragEnd,this)),this._draggable.enable()},removeHooks:function(){this._draggable.disable()},moved:function(){return this._draggable&&this._draggable._moved},_onDragStart:function(){this._marker.closePopup().fire("movestart").fire("dragstart")},_onDrag:function(){var t=this._marker,i=t._shadow,s=e.DomUtil.getPosition(t._icon),o=t._map.layerPointToLatLng(s);i&&e.DomUtil.setPosition(i,s),t._latlng=o,t.fire("move",{latlng:o}).fire("drag") +},_onDragEnd:function(){this._marker.fire("moveend").fire("dragend")}}),e.Handler.PolyEdit=e.Handler.extend({options:{icon:new e.DivIcon({iconSize:new e.Point(8,8),className:"leaflet-div-icon leaflet-editing-icon"})},initialize:function(t,i){this._poly=t,e.setOptions(this,i)},addHooks:function(){this._poly._map&&(this._markerGroup||this._initMarkers(),this._poly._map.addLayer(this._markerGroup))},removeHooks:function(){this._poly._map&&(this._poly._map.removeLayer(this._markerGroup),delete this._markerGroup,delete this._markers)},updateMarkers:function(){this._markerGroup.clearLayers(),this._initMarkers()},_initMarkers:function(){this._markerGroup||(this._markerGroup=new e.LayerGroup),this._markers=[];var t,i,s,o,n=this._poly._latlngs;for(t=0,s=n.length;s>t;t++)o=this._createMarker(n[t],t),o.on("click",this._onMarkerClick,this),this._markers.push(o);var a,r;for(t=0,i=s-1;s>t;i=t++)(0!==t||e.Polygon&&this._poly instanceof e.Polygon)&&(a=this._markers[i],r=this._markers[t],this._createMiddleMarker(a,r),this._updatePrevNext(a,r))},_createMarker:function(t,i){var s=new e.Marker(t,{draggable:!0,icon:this.options.icon});return s._origLatLng=t,s._index=i,s.on("drag",this._onMarkerDrag,this),s.on("dragend",this._fireEdit,this),this._markerGroup.addLayer(s),s},_fireEdit:function(){this._poly.fire("edit")},_onMarkerDrag:function(t){var i=t.target;e.extend(i._origLatLng,i._latlng),i._middleLeft&&i._middleLeft.setLatLng(this._getMiddleLatLng(i._prev,i)),i._middleRight&&i._middleRight.setLatLng(this._getMiddleLatLng(i,i._next)),this._poly.redraw()},_onMarkerClick:function(t){if(!(3>this._poly._latlngs.length)){var i=t.target,s=i._index;this._markerGroup.removeLayer(i),this._markers.splice(s,1),this._poly.spliceLatLngs(s,1),this._updateIndexes(s,-1),this._updatePrevNext(i._prev,i._next),i._middleLeft&&this._markerGroup.removeLayer(i._middleLeft),i._middleRight&&this._markerGroup.removeLayer(i._middleRight),i._prev&&i._next?this._createMiddleMarker(i._prev,i._next):i._prev?i._next||(i._prev._middleRight=null):i._next._middleLeft=null,this._poly.fire("edit")}},_updateIndexes:function(t,i){this._markerGroup.eachLayer(function(s){s._index>t&&(s._index+=i)})},_createMiddleMarker:function(t,i){var s,e,o,n=this._getMiddleLatLng(t,i),a=this._createMarker(n);a.setOpacity(.6),t._middleRight=i._middleLeft=a,e=function(){var e=i._index;a._index=e,a.off("click",s).on("click",this._onMarkerClick,this),n.lat=a.getLatLng().lat,n.lng=a.getLatLng().lng,this._poly.spliceLatLngs(e,0,n),this._markers.splice(e,0,a),a.setOpacity(1),this._updateIndexes(e,1),i._index++,this._updatePrevNext(t,a),this._updatePrevNext(a,i)},o=function(){a.off("dragstart",e,this),a.off("dragend",o,this),this._createMiddleMarker(t,a),this._createMiddleMarker(a,i)},s=function(){e.call(this),o.call(this),this._poly.fire("edit")},a.on("click",s,this).on("dragstart",e,this).on("dragend",o,this),this._markerGroup.addLayer(a)},_updatePrevNext:function(t,i){t&&(t._next=i),i&&(i._prev=t)},_getMiddleLatLng:function(t,i){var s=this._poly._map,e=s.latLngToLayerPoint(t.getLatLng()),o=s.latLngToLayerPoint(i.getLatLng());return s.layerPointToLatLng(e._add(o)._divideBy(2))}}),e.Polyline.addInitHook(function(){e.Handler.PolyEdit&&(this.editing=new e.Handler.PolyEdit(this),this.options.editable&&this.editing.enable()),this.on("add",function(){this.editing&&this.editing.enabled()&&this.editing.addHooks()}),this.on("remove",function(){this.editing&&this.editing.enabled()&&this.editing.removeHooks()})}),e.Control=e.Class.extend({options:{position:"topright"},initialize:function(t){e.setOptions(this,t)},getPosition:function(){return this.options.position},setPosition:function(t){var i=this._map;return i&&i.removeControl(this),this.options.position=t,i&&i.addControl(this),this},addTo:function(t){this._map=t;var i=this._container=this.onAdd(t),s=this.getPosition(),o=t._controlCorners[s];return e.DomUtil.addClass(i,"leaflet-control"),-1!==s.indexOf("bottom")?o.insertBefore(i,o.firstChild):o.appendChild(i),this},removeFrom:function(t){var i=this.getPosition(),s=t._controlCorners[i];return s.removeChild(this._container),this._map=null,this.onRemove&&this.onRemove(t),this}}),e.control=function(t){return new e.Control(t)},e.Map.include({addControl:function(t){return t.addTo(this),this},removeControl:function(t){return t.removeFrom(this),this},_initControlPos:function(){function t(t,n){var a=s+t+" "+s+n;i[t+n]=e.DomUtil.create("div",a,o)}var i=this._controlCorners={},s="leaflet-",o=this._controlContainer=e.DomUtil.create("div",s+"control-container",this._container);t("top","left"),t("top","right"),t("bottom","left"),t("bottom","right")}}),e.Control.Zoom=e.Control.extend({options:{position:"topleft"},onAdd:function(t){var i="leaflet-control-zoom",s="leaflet-bar",o=s+"-part",n=e.DomUtil.create("div",i+" "+s);return this._map=t,this._zoomInButton=this._createButton("+","Zoom in",i+"-in "+o+" "+o+"-top",n,this._zoomIn,this),this._zoomOutButton=this._createButton("-","Zoom out",i+"-out "+o+" "+o+"-bottom",n,this._zoomOut,this),t.on("zoomend",this._updateDisabled,this),n},onRemove:function(t){t.off("zoomend",this._updateDisabled,this)},_zoomIn:function(t){this._map.zoomIn(t.shiftKey?3:1)},_zoomOut:function(t){this._map.zoomOut(t.shiftKey?3:1)},_createButton:function(t,i,s,o,n,a){var r=e.DomUtil.create("a",s,o);r.innerHTML=t,r.href="#",r.title=i;var h=e.DomEvent.stopPropagation;return e.DomEvent.on(r,"click",h).on(r,"mousedown",h).on(r,"dblclick",h).on(r,"click",e.DomEvent.preventDefault).on(r,"click",n,a),r},_updateDisabled:function(){var t=this._map,i="leaflet-control-zoom-disabled";e.DomUtil.removeClass(this._zoomInButton,i),e.DomUtil.removeClass(this._zoomOutButton,i),t._zoom===t.getMinZoom()&&e.DomUtil.addClass(this._zoomOutButton,i),t._zoom===t.getMaxZoom()&&e.DomUtil.addClass(this._zoomInButton,i)}}),e.Map.mergeOptions({zoomControl:!0}),e.Map.addInitHook(function(){this.options.zoomControl&&(this.zoomControl=new e.Control.Zoom,this.addControl(this.zoomControl))}),e.control.zoom=function(t){return new e.Control.Zoom(t)},e.Control.Attribution=e.Control.extend({options:{position:"bottomright",prefix:'Powered by Leaflet'},initialize:function(t){e.setOptions(this,t),this._attributions={}},onAdd:function(t){return this._container=e.DomUtil.create("div","leaflet-control-attribution"),e.DomEvent.disableClickPropagation(this._container),t.on("layeradd",this._onLayerAdd,this).on("layerremove",this._onLayerRemove,this),this._update(),this._container},onRemove:function(t){t.off("layeradd",this._onLayerAdd).off("layerremove",this._onLayerRemove)},setPrefix:function(t){return this.options.prefix=t,this._update(),this},addAttribution:function(t){return t?(this._attributions[t]||(this._attributions[t]=0),this._attributions[t]++,this._update(),this):s},removeAttribution:function(t){return t?(this._attributions[t]--,this._update(),this):s},_update:function(){if(this._map){var t=[];for(var i in this._attributions)this._attributions.hasOwnProperty(i)&&this._attributions[i]&&t.push(i);var s=[];this.options.prefix&&s.push(this.options.prefix),t.length&&s.push(t.join(", ")),this._container.innerHTML=s.join(" — ")}},_onLayerAdd:function(t){t.layer.getAttribution&&this.addAttribution(t.layer.getAttribution())},_onLayerRemove:function(t){t.layer.getAttribution&&this.removeAttribution(t.layer.getAttribution())}}),e.Map.mergeOptions({attributionControl:!0}),e.Map.addInitHook(function(){this.options.attributionControl&&(this.attributionControl=(new e.Control.Attribution).addTo(this))}),e.control.attribution=function(t){return new e.Control.Attribution(t)},e.Control.Scale=e.Control.extend({options:{position:"bottomleft",maxWidth:100,metric:!0,imperial:!0,updateWhenIdle:!1},onAdd:function(t){this._map=t;var i="leaflet-control-scale",s=e.DomUtil.create("div",i),o=this.options;return this._addScales(o,i,s),t.on(o.updateWhenIdle?"moveend":"move",this._update,this),t.whenReady(this._update,this),s},onRemove:function(t){t.off(this.options.updateWhenIdle?"moveend":"move",this._update,this)},_addScales:function(t,i,s){t.metric&&(this._mScale=e.DomUtil.create("div",i+"-line",s)),t.imperial&&(this._iScale=e.DomUtil.create("div",i+"-line",s))},_update:function(){var t=this._map.getBounds(),i=t.getCenter().lat,s=6378137*Math.PI*Math.cos(i*Math.PI/180),e=s*(t.getNorthEast().lng-t.getSouthWest().lng)/180,o=this._map.getSize(),n=this.options,a=0;o.x>0&&(a=e*(n.maxWidth/o.x)),this._updateScales(n,a)},_updateScales:function(t,i){t.metric&&i&&this._updateMetric(i),t.imperial&&i&&this._updateImperial(i)},_updateMetric:function(t){var i=this._getRoundNum(t);this._mScale.style.width=this._getScaleWidth(i/t)+"px",this._mScale.innerHTML=1e3>i?i+" m":i/1e3+" km"},_updateImperial:function(t){var i,s,e,o=3.2808399*t,n=this._iScale;o>5280?(i=o/5280,s=this._getRoundNum(i),n.style.width=this._getScaleWidth(s/i)+"px",n.innerHTML=s+" mi"):(e=this._getRoundNum(o),n.style.width=this._getScaleWidth(e/o)+"px",n.innerHTML=e+" ft")},_getScaleWidth:function(t){return Math.round(this.options.maxWidth*t)-10},_getRoundNum:function(t){var i=Math.pow(10,(Math.floor(t)+"").length-1),s=t/i;return s=s>=10?10:s>=5?5:s>=3?3:s>=2?2:1,i*s}}),e.control.scale=function(t){return new e.Control.Scale(t)},e.Control.Layers=e.Control.extend({options:{collapsed:!0,position:"topright",autoZIndex:!0},initialize:function(t,i,s){e.setOptions(this,s),this._layers={},this._lastZIndex=0,this._handlingClick=!1;for(var o in t)t.hasOwnProperty(o)&&this._addLayer(t[o],o);for(o in i)i.hasOwnProperty(o)&&this._addLayer(i[o],o,!0)},onAdd:function(t){return this._initLayout(),this._update(),t.on("layeradd",this._onLayerChange,this).on("layerremove",this._onLayerChange,this),this._container},onRemove:function(t){t.off("layeradd",this._onLayerChange).off("layerremove",this._onLayerChange)},addBaseLayer:function(t,i){return this._addLayer(t,i),this._update(),this},addOverlay:function(t,i){return this._addLayer(t,i,!0),this._update(),this},removeLayer:function(t){var i=e.stamp(t);return delete this._layers[i],this._update(),this},_initLayout:function(){var t="leaflet-control-layers",i=this._container=e.DomUtil.create("div",t);e.Browser.touch?e.DomEvent.on(i,"click",e.DomEvent.stopPropagation):(e.DomEvent.disableClickPropagation(i),e.DomEvent.on(i,"mousewheel",e.DomEvent.stopPropagation));var s=this._form=e.DomUtil.create("form",t+"-list");if(this.options.collapsed){e.DomEvent.on(i,"mouseover",this._expand,this).on(i,"mouseout",this._collapse,this);var o=this._layersLink=e.DomUtil.create("a",t+"-toggle",i);o.href="#",o.title="Layers",e.Browser.touch?e.DomEvent.on(o,"click",e.DomEvent.stopPropagation).on(o,"click",e.DomEvent.preventDefault).on(o,"click",this._expand,this):e.DomEvent.on(o,"focus",this._expand,this),this._map.on("movestart",this._collapse,this)}else this._expand();this._baseLayersList=e.DomUtil.create("div",t+"-base",s),this._separator=e.DomUtil.create("div",t+"-separator",s),this._overlaysList=e.DomUtil.create("div",t+"-overlays",s),i.appendChild(s)},_addLayer:function(t,i,s){var o=e.stamp(t);this._layers[o]={layer:t,name:i,overlay:s},this.options.autoZIndex&&t.setZIndex&&(this._lastZIndex++,t.setZIndex(this._lastZIndex))},_update:function(){if(this._container){this._baseLayersList.innerHTML="",this._overlaysList.innerHTML="";var t=!1,i=!1;for(var s in this._layers)if(this._layers.hasOwnProperty(s)){var e=this._layers[s];this._addItem(e),i=i||e.overlay,t=t||!e.overlay}this._separator.style.display=i&&t?"":"none"}},_onLayerChange:function(t){var i=e.stamp(t.layer);this._layers[i]&&!this._handlingClick&&this._update()},_createRadioElement:function(t,s){var e='t;t++)i=o[t],s=this._layers[i.layerId],i.checked&&!this._map.hasLayer(s.layer)?(this._map.addLayer(s.layer),s.overlay||(e=s.layer)):!i.checked&&this._map.hasLayer(s.layer)&&this._map.removeLayer(s.layer);e&&(this._map.setZoom(this._map.getZoom()),this._map.fire("baselayerchange",{layer:e})),this._handlingClick=!1},_expand:function(){e.DomUtil.addClass(this._container,"leaflet-control-layers-expanded")},_collapse:function(){this._container.className=this._container.className.replace(" leaflet-control-layers-expanded","")}}),e.control.layers=function(t,i,s){return new e.Control.Layers(t,i,s)},e.PosAnimation=e.Class.extend({includes:e.Mixin.Events,run:function(t,i,s,o){this.stop(),this._el=t,this._inProgress=!0,this.fire("start"),t.style[e.DomUtil.TRANSITION]="all "+(s||.25)+"s cubic-bezier(0,0,"+(o||.5)+",1)",e.DomEvent.on(t,e.DomUtil.TRANSITION_END,this._onTransitionEnd,this),e.DomUtil.setPosition(t,i),e.Util.falseFn(t.offsetWidth),this._stepTimer=setInterval(e.bind(this.fire,this,"step"),50)},stop:function(){this._inProgress&&(e.DomUtil.setPosition(this._el,this._getPos()),this._onTransitionEnd(),e.Util.falseFn(this._el.offsetWidth))},_transformRe:/(-?[\d\.]+), (-?[\d\.]+)\)/,_getPos:function(){var i,s,o,n=this._el,a=t.getComputedStyle(n);return e.Browser.any3d?(o=a[e.DomUtil.TRANSFORM].match(this._transformRe),i=parseFloat(o[1]),s=parseFloat(o[2])):(i=parseFloat(a.left),s=parseFloat(a.top)),new e.Point(i,s,!0)},_onTransitionEnd:function(){e.DomEvent.off(this._el,e.DomUtil.TRANSITION_END,this._onTransitionEnd,this),this._inProgress&&(this._inProgress=!1,this._el.style[e.DomUtil.TRANSITION]="",clearInterval(this._stepTimer),this.fire("step").fire("end"))}}),e.Map.include({setView:function(t,i,s){i=this._limitZoom(i);var e=this._zoom!==i;if(this._loaded&&!s&&this._layers){this._panAnim&&this._panAnim.stop();var o=e?this._zoomToIfClose&&this._zoomToIfClose(t,i):this._panByIfClose(t);if(o)return clearTimeout(this._sizeTimer),this}return this._resetView(t,i),this},panBy:function(t,i,s){if(t=e.point(t),!t.x&&!t.y)return this;this._panAnim||(this._panAnim=new e.PosAnimation,this._panAnim.on({step:this._onPanTransitionStep,end:this._onPanTransitionEnd},this)),this.fire("movestart"),e.DomUtil.addClass(this._mapPane,"leaflet-pan-anim");var o=e.DomUtil.getPosition(this._mapPane).subtract(t)._round();return this._panAnim.run(this._mapPane,o,i||.25,s),this},_onPanTransitionStep:function(){this.fire("move")},_onPanTransitionEnd:function(){e.DomUtil.removeClass(this._mapPane,"leaflet-pan-anim"),this.fire("moveend")},_panByIfClose:function(t){var i=this._getCenterOffset(t)._floor();return this._offsetIsWithinView(i)?(this.panBy(i),!0):!1},_offsetIsWithinView:function(t,i){var s=i||1,e=this.getSize();return Math.abs(t.x)<=e.x*s&&Math.abs(t.y)<=e.y*s}}),e.PosAnimation=e.DomUtil.TRANSITION?e.PosAnimation:e.PosAnimation.extend({run:function(t,i,s,o){this.stop(),this._el=t,this._inProgress=!0,this._duration=s||.25,this._easeOutPower=1/Math.max(o||.5,.2),this._startPos=e.DomUtil.getPosition(t),this._offset=i.subtract(this._startPos),this._startTime=+new Date,this.fire("start"),this._animate()},stop:function(){this._inProgress&&(this._step(),this._complete())},_animate:function(){this._animId=e.Util.requestAnimFrame(this._animate,this),this._step()},_step:function(){var t=+new Date-this._startTime,i=1e3*this._duration;i>t?this._runFrame(this._easeOut(t/i)):(this._runFrame(1),this._complete())},_runFrame:function(t){var i=this._startPos.add(this._offset.multiplyBy(t));e.DomUtil.setPosition(this._el,i),this.fire("step")},_complete:function(){e.Util.cancelAnimFrame(this._animId),this._inProgress=!1,this.fire("end")},_easeOut:function(t){return 1-Math.pow(1-t,this._easeOutPower)}}),e.Map.mergeOptions({zoomAnimation:e.DomUtil.TRANSITION&&!e.Browser.android23&&!e.Browser.mobileOpera}),e.DomUtil.TRANSITION&&e.Map.addInitHook(function(){e.DomEvent.on(this._mapPane,e.DomUtil.TRANSITION_END,this._catchTransitionEnd,this)}),e.Map.include(e.DomUtil.TRANSITION?{_zoomToIfClose:function(t,i){if(this._animatingZoom)return!0;if(!this.options.zoomAnimation)return!1;var s=this.getZoomScale(i),o=this._getCenterOffset(t)._divideBy(1-1/s);if(!this._offsetIsWithinView(o,1))return!1;e.DomUtil.addClass(this._mapPane,"leaflet-zoom-anim"),this.fire("movestart").fire("zoomstart"),this.fire("zoomanim",{center:t,zoom:i});var n=this._getCenterLayerPoint().add(o);return this._prepareTileBg(),this._runAnimation(t,i,s,n),!0},_catchTransitionEnd:function(){this._animatingZoom&&this._onZoomTransitionEnd()},_runAnimation:function(t,i,s,o,n){this._animateToCenter=t,this._animateToZoom=i,this._animatingZoom=!0,e.Draggable&&(e.Draggable._disabled=!0);var a=e.DomUtil.TRANSFORM,r=this._tileBg;clearTimeout(this._clearTileBgTimer),e.Util.falseFn(r.offsetWidth);var h=e.DomUtil.getScaleString(s,o),l=r.style[a];r.style[a]=n?l+" "+h:h+" "+l},_prepareTileBg:function(){var t=this._tilePane,i=this._tileBg;if(i&&this._getLoadedTilesPercentage(i)>.5&&.5>this._getLoadedTilesPercentage(t))return t.style.visibility="hidden",t.empty=!0,this._stopLoadingImages(t),s;i||(i=this._tileBg=this._createPane("leaflet-tile-pane",this._mapPane),i.style.zIndex=1),i.style[e.DomUtil.TRANSFORM]="",i.style.visibility="hidden",i.empty=!0,t.empty=!1,this._tilePane=this._panes.tilePane=i;var o=this._tileBg=t;e.DomUtil.addClass(o,"leaflet-zoom-animated"),this._stopLoadingImages(o)},_getLoadedTilesPercentage:function(t){var i,s,e=t.getElementsByTagName("img"),o=0;for(i=0,s=e.length;s>i;i++)e[i].complete&&o++;return o/s},_stopLoadingImages:function(t){var i,s,o,n=Array.prototype.slice.call(t.getElementsByTagName("img"));for(i=0,s=n.length;s>i;i++)o=n[i],o.complete||(o.onload=e.Util.falseFn,o.onerror=e.Util.falseFn,o.src=e.Util.emptyImageUrl,o.parentNode.removeChild(o))},_onZoomTransitionEnd:function(){this._restoreTileFront(),e.DomUtil.removeClass(this._mapPane,"leaflet-zoom-anim"),e.Util.falseFn(this._tileBg.offsetWidth),this._animatingZoom=!1,this._resetView(this._animateToCenter,this._animateToZoom,!0,!0),e.Draggable&&(e.Draggable._disabled=!1)},_restoreTileFront:function(){this._tilePane.innerHTML="",this._tilePane.style.visibility="",this._tilePane.style.zIndex=2,this._tileBg.style.zIndex=1},_clearTileBg:function(){this._animatingZoom||this.touchZoom._zooming||(this._tileBg.innerHTML="")}}:{}),e.Map.include({_defaultLocateOptions:{watch:!1,setView:!1,maxZoom:1/0,timeout:1e4,maximumAge:0,enableHighAccuracy:!1},locate:function(t){if(t=this._locationOptions=e.extend(this._defaultLocateOptions,t),!navigator.geolocation)return this._handleGeolocationError({code:0,message:"Geolocation not supported."}),this;var i=e.bind(this._handleGeolocationResponse,this),s=e.bind(this._handleGeolocationError,this);return t.watch?this._locationWatchId=navigator.geolocation.watchPosition(i,s,t):navigator.geolocation.getCurrentPosition(i,s,t),this},stopLocate:function(){return navigator.geolocation&&navigator.geolocation.clearWatch(this._locationWatchId),this},_handleGeolocationError:function(t){var i=t.code,s=t.message||(1===i?"permission denied":2===i?"position unavailable":"timeout");this._locationOptions.setView&&!this._loaded&&this.fitWorld(),this.fire("locationerror",{code:i,message:"Geolocation error: "+s+"."})},_handleGeolocationResponse:function(t){var i=180*t.coords.accuracy/4e7,s=2*i,o=t.coords.latitude,n=t.coords.longitude,a=new e.LatLng(o,n),r=new e.LatLng(o-i,n-s),h=new e.LatLng(o+i,n+s),l=new e.LatLngBounds(r,h),c=this._locationOptions;if(c.setView){var m=Math.min(this.getBoundsZoom(l),c.maxZoom);this.setView(a,m)}this.fire("locationfound",{latlng:a,bounds:l,accuracy:t.coords.accuracy})}})}(this,document),L.Proj={},L.Proj._isProj4Proj=function(t){return t.projName!==void 0},L.Proj.Projection=L.Class.extend({initialize:function(t,i){if(L.Proj._isProj4Proj(t))this._proj=t;else{var s=t;Proj4js.defs[s]=i,this._proj=new Proj4js.Proj(s)}},project:function(t){var i=new L.Point(t.lng,t.lat);return Proj4js.transform(Proj4js.WGS84,this._proj,i)},unproject:function(t,i){var s=Proj4js.transform(this._proj,Proj4js.WGS84,t.clone());return new L.LatLng(s.y,s.x,i)}}),L.Proj.CRS=L.Class.extend({includes:L.CRS,options:{transformation:new L.Transformation(1,0,-1,0)},initialize:function(t,i,s){var e,o,n,a;L.Proj._isProj4Proj(t)?(o=t,e=o.srsCode,a=i||{},this.projection=new L.Proj.Projection(o)):(e=t,n=i,a=s||{},this.projection=new L.Proj.Projection(e,n)),L.Util.setOptions(this,a),this.code=e,this.transformation=this.options.transformation,this.options.origin&&(this.transformation=new L.Transformation(1,-this.options.origin[0],-1,this.options.origin[1])),this.options.scales?this.scale=function(t){return this.options.scales[t]}:this.options.resolutions&&(this.scale=function(t){return 1/this.options.resolutions[t]})}}),L.Proj.CRS.TMS=L.Proj.CRS.extend({initialize:function(t,i,s,e){if(L.Proj._isProj4Proj(t)){var o=t,n=i,a=s||{};a.origin=[n[0],n[3]],L.Proj.CRS.prototype.initialize(o,a)}else{var r=t,h=i,n=s,a=e||{};a.origin=[n[0],n[3]],L.Proj.CRS.prototype.initialize(r,h,a)}this.projectedBounds=n}}),L.Proj.TileLayer={},L.Proj.TileLayer.TMS=L.TileLayer.extend({options:{tms:!0,continuousWorld:!0},initialize:function(t,i,s){if(!(i instanceof L.Proj.CRS.TMS))throw Error("CRS is not L.Proj.CRS.TMS.");L.TileLayer.prototype.initialize.call(this,t,s),this.crs=i;for(var e=this.options.minZoom;this.options.maxZoom>e;e++){var o=(this.crs.projectedBounds[3]-this.crs.projectedBounds[1])/this._projectedTileSize(e);if(Math.abs(o-Math.round(o))>.001)throw Error("Projected bounds does not match grid at zoom "+e)}},getTileUrl:function(t){var i=Math.round((this.crs.projectedBounds[3]-this.crs.projectedBounds[1])/this._projectedTileSize(this._map.getZoom()));return L.Util.template(this._url,L.Util.extend({s:this._getSubdomain(t),z:this._getZoomForUrl(),x:t.x,y:i-t.y-1},this.options))},_projectedTileSize:function(t){return this.options.tileSize/this.crs.scale(t)}}),"undefined"!=typeof module&&(module.exports=L.Proj),"undefined"!=typeof L&&L.CRS!==void 0&&(L.CRS.proj4js=function(){return function(t,i,s,e){return e=e||{},s&&(e.transformation=s),new L.Proj.CRS(t,i,e)}}()),L.Control.MousePosition=L.Control.extend({options:{position:"bottomleft",separator:" : ",emptyString:"Unavailable",lngFirst:!1,numDigits:5,lngFormatter:void 0,latFormatter:void 0},onAdd:function(t){return this._container=L.DomUtil.create("div","leaflet-control-mouseposition"),L.DomEvent.disableClickPropagation(this._container),t.on("mousemove",this._onMouseMove,this),this._container.innerHTML=this.options.emptyString,this._container},onRemove:function(t){t.off("mousemove",this._onMouseMove)},_onMouseMove:function(t){var i=L.Util.formatNum(t.latlng.lng,this.options.numDigits),s=L.Util.formatNum(t.latlng.lat,this.options.numDigits);this.options.lngFormatter&&(i=this.options.lngFormatter(i)),this.options.latFormatter&&(s=this.options.latFormatter(s));var e=this.options.lngFirst?i+this.options.separator+s:s+this.options.separator+i;this._container.innerHTML=e}}),L.Map.mergeOptions({positionControl:!1}),L.Map.addInitHook(function(){this.options.positionControl&&(this.positionControl=new L.Control.MousePosition,this.addControl(this.positionControl))}),L.control.mousePosition=function(t){return new L.Control.MousePosition(t)},function(t,i){L.KSP={},L.KSP.version="0.2.1",L.KSP.CRS={},L.KSP.CRS.EPSG4326=new L.Proj.CRS.TMS(new Proj4js.Proj("EPSG:4326"),[-180,-90,180,90],{resolutions:[.703125,.3515625,.17578125,.087890625,.0439453125,.02197265625]}),L.KSP.CelestialBody=L.Class.extend({initialize:function(t){if(!t.hasOwnProperty("id"))throw Error("must specify id");if(!t.hasOwnProperty("name"))throw Error("must specify name");if(t.hasOwnProperty("crs")){if(!(t.crs instanceof L.Proj.CRS.TMS))throw Error("crs is not an instance of L.Proj.CRS.TMS")}else this.crs=L.KSP.CRS.EPSG4326;t.hasOwnProperty("radius")||(this.radius=1),t.hasOwnProperty("thumbnail")||(this.thumbnail="body-unknown.png"),t.hasOwnProperty("baseLayers")||(this.baseLayers={}),L.Util.extend(this,t)},addTo:function(t){var i,s=t._body;if(t._body=this,t.fire("bodychangestart",{body:this,oldBody:s}),s){for(i in s.baseLayers)s.baseLayers.hasOwnProperty(i)&&t.removeLayer(s.baseLayers[i]);for(i in s.overlays)s.overlays.hasOwnProperty(i)&&t.removeLayer(s.overlays[i])}var e=this.defaultLayer||this.baseLayers.Satellite;if(e){for(i in this.baseLayers)if(this.baseLayers.hasOwnProperty(i)&&this.baseLayers[i]._type===t._baseLayerType){e=this.baseLayers[i];break}t.addLayer(e),t.fire("baselayerchange",{layer:e})}for(i in this.overlays)this.overlays.hasOwnProperty(i)&&t._overlayTypes.indexOf(this.overlays[i]._type)>=0&&(t.addLayer(this.overlays[i]),t.fire("layeradd",{layer:this.overlays[i]}));t.fire("bodychangeend",{body:this,oldBody:s})},onAdd:function(t){this.addTo(t)},removeFrom:function(t){L.KSP.CelestialBody.DUMMY.addTo(t)},onRemove:function(t){this.removeFrom(t)}}),L.KSP.celestialBody=function(t){return new L.KSP.CelestialBody(t)},L.KSP.CelestialBody.DUMMY=L.KSP.celestialBody({id:"",name:"",crs:L.KSP.CRS.EPSG4326}),L.KSP.CelestialBody.ALL_PLANETARY=[L.KSP.CelestialBody.DUMMY],L.KSP.Map=L.Map.extend({options:{crs:L.KSP.CRS.EPSG4326,continuousWorld:!0},initialize:function(t,i){this._baseLayerType=-1,this._overlayTypes=[],L.Util.setOptions(this,i),this.startTrackingLayerState(),this.on("bodychangestart",this._onBodyChangeStart).on("bodychangeend",this._onBodyChangeEnd),L.Map.prototype.initialize.call(this,t,this.options)},clampZoom:function(){var t=this.getZoom(),i=this.getMinZoom(),s=this.getMaxZoom();i>t?this.setZoom(i):t>s?this.setZoom(s):this.fire("zoomend",this)},_onBodyChangeStart:function(){this.stopTrackingLayerState()},_onBodyChangeEnd:function(){this.clampZoom(),this.startTrackingLayerState()},_onLayerStateChange:function(t){if("layeradd"===t.type)t.layer instanceof L.KSP.TileLayer?this._baseLayerType=t.layer._type:t.layer instanceof L.KSP.LayerGroup&&0>this._overlayTypes.indexOf(t.layer._type)&&this._overlayTypes.push(t.layer._type);else if(t.layer instanceof L.KSP.LayerGroup){var i,s,e=t.layer._type,o=this._overlayTypes;for(i=o.length-1;i>=0;i--)s=o[i],s===e&&o.splice(i,1)}},startTrackingLayerState:function(){this.on("layeradd",this._onLayerStateChange).on("layerremove",this._onLayerStateChange)},stopTrackingLayerState:function(){this.off("layeradd",this._onLayerStateChange).off("layerremove",this._onLayerStateChange)}}),L.KSP.map=function(t,i){return new L.KSP.Map(t,i)},L.KSP.TileLayer=L.Proj.TileLayer.TMS.extend({statics:{TYPE_SATELLITE:0,TYPE_COLORRELIEF:1,TYPE_SLOPE:2,DEFAULT_URL:"http://tiles.kerbalmaps.com/{body}/{style}/{z}/{x}/{y}.png"},options:{continuousWorld:!1,noWrap:!1,minZoom:0,maxZoom:5,attribution:"Map data © Joel Pedraza"},initialize:function(t,i,s,e){L.Util.setOptions(this,e),this._type=t,L.Proj.TileLayer.TMS.prototype.initialize.call(this,i,s,this.options)}}),L.KSP.tileLayer=function(t,i,s,e){return new L.KSP.TileLayer(t,i,s,e)},L.KSP.LayerGroup=L.LayerGroup.extend({statics:{TYPE_SPACECENTER:0,TYPE_ANOMALY:1},initialize:function(t,i){this._type=t,L.LayerGroup.prototype.initialize.call(this,i)}}),L.KSP.layerGroup=function(t,i){return new L.KSP.LayerGroup(t,i)},L.KSP.Icon={},L.KSP.Icon.SPACECENTER=new L.Icon({iconUrl:"../assets/images/markers-spacecenter.png",shadowUrl:"../assets/images/markers-shadow.png",iconSize:[30,40],shadowSize:[35,16],iconAnchor:[15,40],shadowAnchor:[10,12],popupAnchor:[0,-35]}),L.KSP.Icon.ANOMALY=new L.Icon({iconUrl:"../assets/images/markers-anomaly.png",shadowUrl:"../assets/images/markers-shadow.png",iconSize:[30,40],shadowSize:[35,16],iconAnchor:[15,40],shadowAnchor:[10,12],popupAnchor:[0,-35]}),L.KSP.Legend={},L.KSP.Legend.SLOPE={"≥ 60°":"#E19678","< 60°":"#C86464","< 30°":"#965A64","< 15°":"#645064","< 5°":"#325064","0°":"#32465A"},L.KSP.Control=L.KSP.control={},L.KSP.Control.Legend=L.Control.extend({options:{position:"bottomright"},onAdd:function(t){return this._container=L.DomUtil.create("div","leaflet-control-legend"),t.on("baselayerchange",this._onLayerChange,this),this._container},_update:function(t){if(this._container.innerHTML="",t){for(var i in t)t.hasOwnProperty(i)&&(this._container.innerHTML+=''+i+"
    ");L.DomUtil.addClass(this._container,"leaflet-control-legend-visible")}else this._container.className=this._container.className.replace(" leaflet-control-legend-visible","")},_onLayerChange:function(t){this._update(t.layer.options.legend)}}),L.Map.mergeOptions({legendControl:!0}),L.Map.addInitHook(function(){this.options.bodyControl&&(this.legendControl=new L.KSP.Control.Legend,this.addControl(this.legendControl))}),L.control.legend=function(t){return new L.KSP.Control.Legend(t)},L.KSP.Control.Scale=L.Control.Scale.extend({options:{imperial:!1},onAdd:function(t){this._radius=0,t._body&&(this._radius=t._body.radius);var i=L.Control.Scale.prototype.onAdd.call(this,t);return t.on("bodychangeend",this._onBodyChangeEnd,this),i},onRemove:function(t){L.Control.Scale.prototype.onRemove.call(this,t),t.off("bodychangeend",this._onBodyChangeEnd)},_onBodyChangeEnd:function(t){this._radius=t.body.radius,this._update()},_update:function(){var t=this._map.getBounds(),i=t.getCenter().lat,s=this._radius*Math.PI*Math.cos(i*Math.PI/180),e=s*(t.getNorthEast().lng-t.getSouthWest().lng)/180,o=this._map.getSize(),n=this.options,a=0;o.x>0&&(a=e*(n.maxWidth/o.x)),this._updateScales(n,a)}}),L.KSP.Map.mergeOptions({scaleControl:!1}),L.KSP.Map.addInitHook(function(){this.options.scaleControl&&(this.scaleControl=new L.KSP.Control.Scale,this.addControl(this.scaleControl))}),L.KSP.control.scale=function(t){return new L.KSP.Control.Scale(t)},L.KSP.Control.CelestialBody=L.Control.extend({options:{position:"topright",collapsed:!0},initialize:function(t,i){L.Util.setOptions(this,i),this._bodies=t,this._timeInMillis=(new Date).valueOf(),this._weekInMillis=6048e5},onAdd:function(){return this._initLayout(),this._update(),this._map.on("bodychangeend",this._update,this),this._container},_initLayout:function(){var t="leaflet-control-celestialbodies",s=this._container=L.DomUtil.create("div",t),e=this._bodies;if(this.options.collapsed){L.DomEvent.on(s,"mouseover",this._expand,this).on(s,"mouseout",this._collapse,this);var o=this._bodiesLink=L.DomUtil.create("a",t+"-toggle",s);o.href="#",o.title="Celestial Bodies",L.DomEvent.on(o,"focus",this._expand,this),this._map.on("movestart",this._collapse,this)}var n=this._list=L.DomUtil.create("ul",t+"-list",s);for(var a in e)if(e.hasOwnProperty(a)){var r=this._addBody(e[a],n);if(e[a].children){var h=i.createElement("ul");for(var l in e[a].children)e[a].children.hasOwnProperty(l)&&this._addBody(e[a].children[l],h);r.appendChild(h)}}},_update:function(){this._map._body&&(this._bodiesLink.style.backgroundImage='url("'+this._map._body.thumbnail+'")')},_addBody:function(t,s){var e,o=i.createElement("li"),n=i.createElement("img");if(n.src=t.thumbnail,n.alt=o.title=t.name,t.addedOn){this._timeInMillis-t.addedOnKerbal Space Center
    -0.0969 : -74.6004"),L.marker([20.5829,-146.5116],{icon:L.KSP.Icon.SPACECENTER}).bindPopup("Kerbal Space Center 2
    20.5829 : -146.5116"),L.marker([-1.5409,-71.9099],{icon:L.KSP.Icon.SPACECENTER}).bindPopup("Island Airfield
    -1.5409 : -71.9099")]),Anomalies:L.KSP.layerGroup(L.KSP.LayerGroup.TYPE_ANOMALY,[L.marker([.1023,-74.5684],{icon:L.KSP.Icon.ANOMALY}).bindPopup("0.1023 : -74.5684"),L.marker([20.6709,-146.4968],{icon:L.KSP.Icon.ANOMALY}).bindPopup("20.6709 : -146.4968"),L.marker([35.5705,-74.9773],{icon:L.KSP.Icon.ANOMALY}).bindPopup("35.5705 : -74.9773"),L.marker([-.6402,-80.7668],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-0.6402 : -80.7668"),L.marker([-28.8083,-13.4401],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-28.8083 : -13.4401"),L.marker([-6.5057,-141.6856],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-6.5057 : -141.6856"),L.marker([81.9551,-128.518],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-81.9551 : -128.518")])}}),L.KSP.CelestialBody.MUN=L.KSP.celestialBody({id:"mun",name:"Mun",crs:L.KSP.CRS.EPSG4326,radius:2e5,addedOn:13682304e5,lastUpdated:1368144e6,thumbnail:"body-mun.png",baseLayers:{Satellite:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SATELLITE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{body:"mun",style:"sat"}),"Color Relief":L.KSP.tileLayer(L.KSP.TileLayer.TYPE_COLORRELIEF,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{body:"mun",style:"color",legend:{"3150 m":"#EBEBEB","-180 m":"#232323"}}),Slope:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SLOPE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{body:"mun",style:"slope",legend:L.KSP.Legend.SLOPE})},overlays:{Anomalies:L.KSP.layerGroup(L.KSP.LayerGroup.TYPE_ANOMALY,[L.marker([-9.8314,25.9177],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-9.8314 : 25.9177"),L.marker([-82.2063,102.9305],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-82.2063 : 102.9305"),L.marker([57.6604,9.1422],{icon:L.KSP.Icon.ANOMALY}).bindPopup("57.6604 : 9.1422"),L.marker([2.4695,81.5133],{icon:L.KSP.Icon.ANOMALY}).bindPopup("2.4695 : 81.5133"),L.marker([12.4432,39.178],{icon:L.KSP.Icon.ANOMALY}).bindPopup("12.4432 : 39.1780"),L.marker([-12.4431,-140.822],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-12.4431 : -140.8220"),L.marker([.7027,22.747],{icon:L.KSP.Icon.ANOMALY}).bindPopup("0.7027 : 22.7470"),L.marker([-70.9556,-68.1378],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-70.9556,-68.1378")])}}),L.KSP.CelestialBody.MINMUS=L.KSP.celestialBody({id:"minmus",name:"Minmus",crs:L.KSP.CRS.EPSG4326,radius:6e4,addedOn:13682304e5,lastUpdated:13682304e5,thumbnail:"body-minmus.png",baseLayers:{Satellite:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SATELLITE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"sat",body:"minmus"}),"Color Relief":L.KSP.tileLayer(L.KSP.TileLayer.TYPE_COLORRELIEF,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"color",body:"minmus",legend:{"5750 m":"#414B41","2500 m":"#BEE6C3","1 m":"#96CDB4","0 m":"#87B9A5"}}),Slope:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SLOPE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"slope",body:"minmus",legend:L.KSP.Legend.SLOPE})},overlays:{Anomalies:L.KSP.layerGroup(L.KSP.LayerGroup.TYPE_ANOMALY,[L.marker([23.7768,60.0462],{icon:L.KSP.Icon.ANOMALY}).bindPopup("23.7768 : 60.0462")])}}),L.KSP.CelestialBody.DUNA=L.KSP.celestialBody({id:"duna",name:"Duna",crs:L.KSP.CRS.EPSG4326,radius:32e4,addedOn:13688352e5,lastUpdated:13688352e5,thumbnail:"body-duna.png",baseLayers:{Satellite:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SATELLITE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"sat",body:"duna"}),"Color Relief":L.KSP.tileLayer(L.KSP.TileLayer.TYPE_COLORRELIEF,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"color",body:"duna",legend:{"4800 m":"#C3A082","4000 m":"#966446","3000 m":"#733219","2000 m":"#501E14","1000 m":"#3C140F","0 m":"#280F0A"}}),Slope:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SLOPE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"slope",body:"duna",legend:L.KSP.Legend.SLOPE})},overlays:{Anomalies:L.KSP.layerGroup(L.KSP.LayerGroup.TYPE_ANOMALY,[L.marker([17.0483,-85.4717],{icon:L.KSP.Icon.ANOMALY}).bindPopup("17.0483 : -85.4717"),L.marker([-30.3525,-28.6828],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-30.3525 : -28.6828"),L.marker([-66.1344,-160.7432],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-66.1344 : -160.7432")])}}),L.KSP.CelestialBody.IKE=L.KSP.celestialBody({id:"ike",name:"Ike",crs:L.KSP.CRS.EPSG4326,radius:13e4,addedOn:13688352e5,lastUpdated:13688352e5,thumbnail:"body-ike.png",baseLayers:{Satellite:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SATELLITE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"sat",body:"ike"}),"Color Relief":L.KSP.tileLayer(L.KSP.TileLayer.TYPE_COLORRELIEF,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"color",body:"ike",legend:{"13000 m":"#828282","11000 m":"#6E6E6E","9000 m":"#5A5A5A","7000 m":"#464646","5000 m":"#323232","2500 m":"#191919","70 m":"#070707"}}),Slope:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SLOPE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"slope",body:"ike",legend:L.KSP.Legend.SLOPE})},overlays:{}}),L.KSP.CelestialBody.DRES=L.KSP.celestialBody({id:"dres",name:"Dres",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-dres.png"}),L.KSP.CelestialBody.JOOL=L.KSP.celestialBody({id:"jool",name:"Jool",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-jool.png"}),L.KSP.CelestialBody.LAYTHE=L.KSP.celestialBody({id:"laythe",name:"Laythe",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-laythe.png"}),L.KSP.CelestialBody.VALL=L.KSP.celestialBody({id:"vall",name:"Vall",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-vall.png"}),L.KSP.CelestialBody.TYLO=L.KSP.celestialBody({id:"tylo",name:"Tylo",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-tylo.png"}),L.KSP.CelestialBody.BOP=L.KSP.celestialBody({id:"bop",name:"Bop",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-bop.png"}),L.KSP.CelestialBody.POL=L.KSP.celestialBody({id:"pol",name:"Pol",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-pol.png"}),L.KSP.CelestialBody.EELOO=L.KSP.celestialBody({id:"eeloo",name:"Eeloo",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-eeloo.png"}),L.KSP.CelestialBody.KERBIN.defaultLayer=L.KSP.CelestialBody.KERBIN.baseLayers.Satellite,L.KSP.CelestialBody.MUN.defaultLayer=L.KSP.CelestialBody.MUN.baseLayers.Satellite,L.KSP.CelestialBody.MINMUS.defaultLayer=L.KSP.CelestialBody.MINMUS.baseLayers.Satellite,L.KSP.CelestialBody.EVE.children=[L.KSP.CelestialBody.GILLY],L.KSP.CelestialBody.KERBIN.children=[L.KSP.CelestialBody.MUN,L.KSP.CelestialBody.MINMUS],L.KSP.CelestialBody.DUNA.children=[L.KSP.CelestialBody.IKE],L.KSP.CelestialBody.JOOL.children=[L.KSP.CelestialBody.LAYTHE,L.KSP.CelestialBody.VALL,L.KSP.CelestialBody.TYLO,L.KSP.CelestialBody.BOP,L.KSP.CelestialBody.POL],L.KSP.CelestialBody.GILLY.parent=L.KSP.CelestialBody.EVE,L.KSP.CelestialBody.MUN.parent=L.KSP.CelestialBody.MINMUS.parent=L.KSP.CelestialBody.KERBIN,L.KSP.CelestialBody.IKE.parent=L.KSP.CelestialBody.DUNA,L.KSP.CelestialBody.LAYTHE.parent=L.KSP.CelestialBody.VALL.parent=L.KSP.CelestialBody.TYLO.parent=L.KSP.CelestialBody.BOP.parent=L.KSP.CelestialBody.POL.parent=L.KSP.CelestialBody.JOOL,L.KSP.CelestialBody.ALL_PLANETARY=[L.KSP.CelestialBody.MOHO,L.KSP.CelestialBody.EVE,L.KSP.CelestialBody.KERBIN,L.KSP.CelestialBody.DUNA,L.KSP.CelestialBody.DRES,L.KSP.CelestialBody.JOOL,L.KSP.CelestialBody.EELOO],L.KSP.Map.addInitHook(function(){this.options.layers=[L.KSP.CelestialBody.KERBIN]})}(this,document); +var Settings = Class.create({ + initialize: function(defaultHost, defaultPort){ + if(!this.getHost()){ this.setHost(defaultHost)} + if(!this.getPort()){ this.setPort(defaultPort)} + }, + + getHost: function(){ + return this.get('host') + }, + + getPort: function(){ + return this.get('port') + }, + + setHost: function(value){ + return this.set('host', value) + }, + + setPort: function(value){ + return this.set('port', value) + }, + + get: function(property){ + return localStorage.getItem(property) + }, + + set: function(property, value){ + return localStorage.setItem(property, value) + } +}) +var Telemachus = Class.create({ + initialize: function(host, port){ + this.updateConnection(host, port) + this.receiverFunctions = [] + this.subscribedFields = {} + this.orbitingBodies = this.getOrbitalBodies() + this.rate = 500 + + this.loopTimeout = setTimeout(this.poll.bind(this), this.rate) + }, + + url: function(){ + return "http://" + this.host + ":" + this.port + "/telemachus/datalink" + }, + + updateConnection: function(host, port){ + this.host = host + this.port = port + }, + + addReceiverFunction: function(func){ + this.receiverFunctions.push(func) + }, + + subscribeToData: function(fields){ + for (var i = fields.length - 1; i >= 0; i--) { + var field = fields[i] + this.subscribedFields[field] = field + }; + }, + + dispatchMessages: function(data){ + for (var i = this.receiverFunctions.length - 1; i >= 0; i--) { + try{ + this.receiverFunctions[i](data) + } catch(e){ + console.error(e) + } + }; + }, + + send: function(message){ + this.socket.send(JSON.stringify(message)) + }, + + getOrbitalBodyInfo: function(name){ + var properties = this.orbitingBodies[name] + + if(properties){ + return Object.extend({name: name}, properties) + } else{ + return null + } + }, + + notifyIfLOS: function(request){ + if(request.transport.status == 0){ + document.fire('telemachus:loss-of-signal') + return true + } + return false + }, + + prepareParams: function(params){ + var normalizedParams = [] + Object.keys(params).forEach(function(field){ + var sanitizedFieldName = field.replace("[", "{").replace("]","}") + normalizedParams.push(sanitizedFieldName + "=" + field) + }) + return normalizedParams + }, + + convertData: function(rawData){ + var data = {} + var startBracesRegexp = /\{/g + var endBracesRegexp = /\}/g + + Object.keys(rawData).forEach(function(key){ + var convertedFieldName = key.replace(startBracesRegexp, "[").replace(endBracesRegexp, "]") + data[convertedFieldName] = rawData[key] + }) + + return data + }, + + poll: function(){ + var params = this.prepareParams(this.subscribedFields) + var requestURL = this.url() + "?" + params.join("&") + + new Ajax.Request(requestURL, { + method: "get", + onSuccess: function(response){ + var rawData = JSON.parse(response.responseText) + var data = this.convertData(rawData) + + this.dispatchMessages(data) + }.bind(this), + onException: this.notifyIfLOS.bind(this), + onComplete: function(response){ + setTimeout(this.poll.bind(this),this.rate); + }.bind(this) + }) + }, + + sendMessage: function(params, callback){ + new Ajax.Request(this.url(), { + method: "post", + postBody: JSON.stringify(params), + // parameters: params, + onSuccess: function(response){ + var rawData = JSON.parse(response.responseText) + var data = this.convertData(rawData) + callback(data) + }.bind(this), + onException: this.notifyIfLOS.bind(this) + }) + }, + + cameraURL: function(){ + return "http://" + this.host + ":" + this.port + "/telemachus/cameras" + }, + + getCameraList: function(callback){ + new Ajax.Request(this.cameraURL(), { + method: "get", + // parameters: params, + onSuccess: function(response){ + var data = JSON.parse(response.responseText) + callback(data) + }.bind(this), + onException: this.notifyIfLOS.bind(this) + }) + }, + + getOrbitalBodies: function(){ + return { + "Sun" : { + id: 0, + referenceBodyName: null, + mapBody: null, + atmosphericRadius: 0, + color: '#FFFF00', + surfaceGravity: 17.1 //m/s^2, + }, + "Kerbin" : { + id: 1, + referenceBodyName: "Sun", + mapBody: L.KSP.CelestialBody.KERBIN, + atmosphericRadius: 70000, + color: '#4a5472', + surfaceGravity: 9.81 //m/s^2 + }, + "Mun" : { + id: 2, + referenceBodyName: "Kerbin", + mapBody: L.KSP.CelestialBody.MUN, + atmosphericRadius: 0, + color: '#e2e0d7', + surfaceGravity: 1.63 //m/s^2 + }, + "Minmus" : { + id: 3, + referenceBodyName: "Kerbin", + mapBody: L.KSP.CelestialBody.MINMUS, + color: '#98f2c5', + atmosphericRadius: 0, + surfaceGravity: 0.491 //m/s^2 + }, + "Moho" : { + id: 4, + referenceBodyName: "Sun", + mapBody: L.KSP.CelestialBody.MOHO, + atmosphericRadius: 0, + color: '#fdc39e', + surfaceGravity: 2.70 //m/s^2 + }, + "Eve" : { + id: 5, + referenceBodyName: "Sun", + mapBody: L.KSP.CelestialBody.EVE, + atmosphericRadius: 90000, + color: '#c394fe', + surfaceGravity: 16.7 //m/s^2 + }, + "Duna" : { + id: 6, + referenceBodyName: "Sun", + mapBody: L.KSP.CelestialBody.DUNA, + atmosphericRadius: 50000, + color: '#fc5e49', + surfaceGravity: 2.94 //m/s^2 + }, + "Ike" : { + id: 7, + referenceBodyName: "Duna", + mapBody: L.KSP.CelestialBody.IKE, + atmosphericRadius: 0, + color: '#e2e0d7', + surfaceGravity: 1.10 //m/s^2 + }, + "Jool" : { + id: 8, + referenceBodyName: "Sun", + mapBody: L.KSP.CelestialBody.JOOL, + atmosphericRadius: 200000, + color: '#C5DCAB', + surfaceGravity: 7.85 //m/s^2 + }, + "Laythe" : { + id: 9, + referenceBodyName: "Jool", + mapBody: L.KSP.CelestialBody.LAYTHE, + atmosphericRadius: 50000, + color: '#a8b4fe', + surfaceGravity: 7.85 //m/s^2 + }, + "Vall" : { + id: 10, + referenceBodyName: "Jool", + mapBody: L.KSP.CelestialBody.VALL, + atmosphericRadius: 0, + color: '#b0f4fe', + surfaceGravity: 2.31 //m/s^2 + }, + "Bop" : { + id: 11, + referenceBodyName: "Jool", + mapBody: L.KSP.CelestialBody.BOP, + atmosphericRadius: 0, + color: '#c64605', + surfaceGravity: 0.589 //m/s^2 + }, + "Tylo" : { + id: 12, + referenceBodyName: "Jool", + mapBody: L.KSP.CelestialBody.TYLO, + atmosphericRadius: 0, + color: '#fdf7ed', + surfaceGravity: 7.85 //m/s^2 + }, + "Gilly" : { + id: 13, + referenceBodyName: "Eve", + mapBody: L.KSP.CelestialBody.GILLY, + atmosphericRadius: 0, + color: '#fdcbb1', + surfaceGravity: 0.049 //m/s^2 + }, + "Pol" : { + id: 14, + referenceBodyName: "Pol", + mapBody: L.KSP.CelestialBody.POL, + atmosphericRadius: 0, + color: '#fec681', + surfaceGravity: 0.373 //m/s^2 + }, + "Dres" : { + id: 15, + referenceBodyName: "Sun", + mapBody: L.KSP.CelestialBody.DRES, + atmosphericRadius: 0, + color: '#fef8f9', + surfaceGravity: 1.13 //m/s^2 + }, + "Eeloo" : { + id: 16, + referenceBodyName: "Sun", + mapBody: L.KSP.CelestialBody.EELOO, + atmosphericRadius: 0, + color: '#e5fafe', + surfaceGravity: 1.69 //m/s^2 + } + } + } +}) +var TitleBar = Class.create({ + initialize: function(datalink, title_bar_id){ + this.datalink = datalink + this.title_bar_id = title_bar_id + this.title_bar = $(this.title_bar_id) + this.initializeLOSNotifier() + this.initializeDatalink() + }, + + update: function(data){ + window.requestAnimationFrame(function(){ + this.title_bar.down("#world-clock").update(TimeFormatters.formatUT(data["t.universalTime"])) + this.title_bar.down("#mission-time").update(TimeFormatters.formatMET(data["v.missionTime"])) + + this.title_bar.down("#mission-time").removeClassName("loss-of-signal") + }.bind(this)) + }, + + initializeLOSNotifier:function(){ + document.observe('telemachus:loss-of-signal', function(){ + window.requestAnimationFrame(function(){ + this.title_bar.down("#mission-time").update("⚠ LOS ⚠") + this.title_bar.down("#mission-time").addClassName("loss-of-signal") + }.bind(this)) + }.bind(this)) + }, + + initializeDatalink: function(){ + this.datalink.subscribeToData([ + 't.timeWarp', 't.universalTime', 'v.missionTime' + ]) + + this.datalink.addReceiverFunction(this.update.bind(this)) + }, +}) +var ButtonIndicator = Class.create({ + initialize: function(datalink, indicatorId, apiButtonString){ + this.datalink = datalink + this.indicatorId = indicatorId + this.indicator = $(this.indicatorId) + this.apiButtonString = apiButtonString + this.initializeDatalink() + }, + + update: function(data){ + if(data[this.apiButtonString] == true){ + this.indicator.addClassName("on") + } else{ + this.indicator.removeClassName("on") + } + }, + + initializeDatalink: function(){ + this.datalink.subscribeToData([this.apiButtonString]) + + this.datalink.addReceiverFunction(this.update.bind(this)) + }, +}) +var ReadoutTable = Class.create({ + initialize: function(datalink, tableId, dataRows){ + this.datalink = datalink + this.tableId = tableId + this.table = $(this.tableId) + this.dataRows = dataRows + this.initializeDatalink() + }, + + update: function(data){ + window.requestAnimationFrame(function(){ + this.dataRows.forEach(function(row){ + var rowId = row.label + var tableRow = this.table.down("tr[data-label='"+ rowId +"']") + + if(!tableRow){ + var tableRow = new Element("tr", { + "data-label" : rowId + }) + + tableRow.insert("" + row.label + "") + this.table.insert(tableRow) + } + + tableRow.down("td").update(row.formatter(data[row.value])) + }.bind(this)) + }.bind(this)) + }, + + initializeDatalink: function(){ + var dataValues = this.dataRows.map(function(dataRow){ + return dataRow.value + }) + + this.datalink.subscribeToData(dataValues) + + this.datalink.addReceiverFunction(this.update.bind(this)) + }, +}) +var ResourceMonitor = Class.create({ + initialize: function(datalink, resourceName, options){ + this.datalink = datalink + this.resourceName = resourceName + this.options = Object.extend({ + currentStageProgressBar: null, + totalProgressBar: null, + valuePrefix: null + }, options) + + this.resourceStrings = this.buildResourceStrings() + + this.initializeDatalink() + }, + + update: function(data){ + window.requestAnimationFrame(function(){ + if(this.options.totalProgressBar){ + this.options.totalProgressBar.value = data[this.resourceStrings.totalAvailable] + this.options.totalProgressBar.max = data[this.resourceStrings.totalMax] + } + + if(this.options.currentStageProgressBar){ + this.options.currentStageProgressBar.value = data[this.resourceStrings.currentStageAvailable] + this.options.currentStageProgressBar.max = data[this.resourceStrings.currentStageMax] + } + + this.updateValue("-total-value", data[this.resourceStrings.totalAvailable]) + this.updateValue("-total-max", data[this.resourceStrings.totalMax]) + + this.updateValue("-current-stage-value", data[this.resourceStrings.currentStageAvailable]) + this.updateValue("-current-stage-max", data[this.resourceStrings.currentStageMax]) + }.bind(this)) + }, + + updateValue: function(id, value){ + if($(this.options.valuePrefix + id)){ + if(value < 0){ + $(this.options.valuePrefix + id).update("NA") + } else{ + $(this.options.valuePrefix + id).update(value.toFixed(2)) + } + } + }, + + buildResourceStrings: function(){ + return { + totalAvailable: "r.resource["+ this.resourceName +"]", + totalMax: "r.resourceMax["+ this.resourceName +"]", + currentStageAvailable: "r.resourceCurrent["+ this.resourceName +"]", + currentStageMax: "r.resourceCurrentMax["+ this.resourceName +"]", + } + }, + + initializeDatalink: function(){ + this.datalink.subscribeToData([ + this.resourceStrings.totalAvailable, + this.resourceStrings.totalMax, + this.resourceStrings.currentStageAvailable, + this.resourceStrings.currentStageMax + ]) + + this.datalink.addReceiverFunction(this.update.bind(this)) + }, +}) +var DataTable = Class.create({ + initialize: function(tableID, dataRows){ + this.tableID = tableID + this.table = $(this.tableID) + this.dataRows = dataRows + }, + + update: function(){ + window.requestAnimationFrame(function(){ + this.dataRows.forEach(function(row){ + var rowId = row.label + var tableRow = this.table.down("tr[data-label='"+ rowId +"']") + + if(!tableRow){ + var tableRow = new Element("tr", { + "data-label" : rowId + }) + + tableRow.insert("" + row.label + "") + this.table.insert(tableRow) + } + + tableRow.down("td").update(row.value) + }.bind(this)) + }.bind(this)) + }, + + clear: function(){ + window.requestAnimationFrame(function(){ + this.dataRows = [] + this.table.innerHTML = "" + }.bind(this)) + } +}) +var AtmosphericDensityGauge = Class.create({ + initialize: function(datalink, gaugeID){ + this.datalink = datalink + this.gaugeID = gaugeID + this.gauge = $(this.gaugeID) + this.initializeDatalink() + this.func = function(x){return Math.log(2.0 * x)} + }, + + update: function(data){ + var max = this.func(100) + var value = this.func(data['v.atmosphericPressure'] * 100) + if(!isFinite(value)){ value = 0 } + + this.gauge.value = value + this.gauge.max = max + }, + + initializeDatalink: function(){ + this.datalink.subscribeToData(['v.atmosphericPressure']) + + this.datalink.addReceiverFunction(this.update.bind(this)) + }, +}) +var ThrottleGauge = Class.create({ + initialize: function(datalink, gaugeID){ + this.datalink = datalink + this.gaugeID = gaugeID + this.gauge = $(this.gaugeID) + this.initializeDatalink() + }, + + update: function(data){ + this.gauge.value = data['f.throttle'] * 100 + this.gauge.max = 100 + }, + + initializeDatalink: function(){ + this.datalink.subscribeToData(['f.throttle']) + + this.datalink.addReceiverFunction(this.update.bind(this)) + }, +}) +var CameraFeed = Class.create({ + initialize: function(datalink, options){ + this.datalink = datalink + + this.options = options || {} + this.cameraData = [] + this.selectedCameraURL = "" + this.selectedCameraName = "" + this.initializeDatalink() + this.initializeObservers() + this.initializeImageRefresh() + }, + + initializeDatalink: function(){ + setInterval(function(){ + this.datalink.getCameraList(this.updateCameraList.bind(this)) + }.bind(this), 1000); + }, + + initializeImageRefresh: function(){ + setInterval(function(){ + if(!this.hasSelectedCamera()){ return } + this.options.cameraImage.src = this.options.cameraImage.getAttribute('data-base-url') + "?" + Math.floor((Math.random() * 100) + 1) + }.bind(this), 1000); + }, + + initializeObservers: function(){ + this.options.cameraList.observe('click', function(event){ + var clickedButton = event.findElement('button'); + if (clickedButton) { + this.selectCameraAndHideList( + clickedButton.getAttribute("data-image-name"), + clickedButton.getAttribute("data-image-url") + ) + } + }.bind(this)) + + this.options.showCameraList.observe('click', this.toggleCameraList.bind(this)) + }, + + hasSelectedCamera: function(){ + return this.selectedCameraURL != "" + }, + + setSelectedCamera: function(name, image_url){ + this.selectedCameraName = name + this.selectedCameraURL = image_url + this.options.cameraName.update(this.selectedCameraName) + this.options.cameraImage.setAttribute('src', this.selectedCameraURL) + this.options.cameraImage.setAttribute('data-base-url',this.selectedCameraURL) + }, + + selectCameraAndHideList: function(name, image_url){ + this.setSelectedCamera(name, image_url) + this.hideCameraList() + }, + + hideCameraList: function(){ + this.options.cameraListContainer.addClassName('hidden') + }, + + showCameraList: function(){ + this.options.cameraListContainer.removeClassName('hidden') + }, + + toggleCameraList: function(){ + this.options.cameraListContainer.toggleClassName('hidden') + }, + + updateCameraList: function(data){ + // console.log(data) + var sortedData = data.sort(function(a,b){ + //the flight camera should always be on top + if(a.name == "TelemachusFlightCamera"){ + return -1 + } + + //otherwise, compare normally + return a.name.localeCompare(b.name); + }); + + //clear existing child nodes in camera list + while (this.options.cameraList.hasChildNodes()){ + this.options.cameraList.removeChild(this.options.cameraList.lastChild); + } + + for (var i = 0; i < sortedData.length; i++) { + var cameraObject = sortedData[i] + + if(!this.hasSelectedCamera()){ + this.setSelectedCamera(cameraObject.name, cameraObject.url) + } + + var docFragment = document.createDocumentFragment() + var li = document.createElement('li') + var selectCamera = document.createElement("button") + selectCamera.setAttribute('data-image-name', cameraObject.name) + selectCamera.setAttribute('data-image-url', cameraObject.url) + if(this.selectedCameraURL == cameraObject.url){ + selectCamera.addClassName("selected") + } + selectCamera.update(cameraObject.name) + + li.appendChild(selectCamera) + docFragment.appendChild(li) + this.options.cameraList.appendChild(docFragment) + } + + this.cameraData = sortedData + } +}) \ No newline at end of file diff --git a/public/assets/docking.js b/public/assets/docking.js index 72ee2af..2853216 100644 --- a/public/assets/docking.js +++ b/public/assets/docking.js @@ -1,47 +1,11284 @@ -Math.toDegrees=function(angleInRadians){return angleInRadians*(180/Math.PI)};Math.toRadians=function(angleInDegrees){return angleInDegrees*(Math.PI/180)};Math.crossProduct=function(x,y){[x[1]*y[2]-x[2]*y[1],x[2]*y[0]-x[0]*y[2],x[0]*y[1]-x[1]*y[0]]};Math.sign=Math.sign||function(x){x=+x;if(x===0||isNaN(x)){return x}return x>0?1:-1};Math.cosh=Math.cosh||function(x){return(Math.exp(x)+Math.exp(-x))/2};Math.sinh=Math.sinh||function(x){return(Math.exp(x)-Math.exp(-x))/2};Math.matrixAdd=Math.matrixAdd||function(){var arrays=arguments,results=[],count=arrays[0].length,L=arrays.length,sum,next=0,i;while(next-1?e(a,b,c):b.indexOf("%")>-1?f(a,b,c):b.indexOf(":")>-1?g(a,b):i(a._value,b,c)}function d(a,b){var c,d,e,f,g,i=b,j=["KB","MB","GB","TB","PB","EB","ZB","YB"],k=!1;if(b.indexOf(":")>-1)a._value=h(b);else if(b===q)a._value=0;else{for("."!==o[p].delimiters.decimal&&(b=b.replace(/\./g,"").replace(o[p].delimiters.decimal,".")),c=new RegExp("[^a-zA-Z]"+o[p].abbreviations.thousand+"(?:\\)|(\\"+o[p].currency.symbol+")?(?:\\))?)?$"),d=new RegExp("[^a-zA-Z]"+o[p].abbreviations.million+"(?:\\)|(\\"+o[p].currency.symbol+")?(?:\\))?)?$"),e=new RegExp("[^a-zA-Z]"+o[p].abbreviations.billion+"(?:\\)|(\\"+o[p].currency.symbol+")?(?:\\))?)?$"),f=new RegExp("[^a-zA-Z]"+o[p].abbreviations.trillion+"(?:\\)|(\\"+o[p].currency.symbol+")?(?:\\))?)?$"),g=0;g<=j.length&&!(k=b.indexOf(j[g])>-1?Math.pow(1024,g+1):!1);g++);a._value=(k?k:1)*(i.match(c)?Math.pow(10,3):1)*(i.match(d)?Math.pow(10,6):1)*(i.match(e)?Math.pow(10,9):1)*(i.match(f)?Math.pow(10,12):1)*(b.indexOf("%")>-1?.01:1)*((b.split("-").length+Math.min(b.split("(").length-1,b.split(")").length-1))%2?1:-1)*Number(b.replace(/[^0-9\.]+/g,"")),a._value=k?Math.ceil(a._value):a._value}return a._value}function e(a,b,c){var d,e,f=b.indexOf("$"),g=b.indexOf("("),h=b.indexOf("-"),j="";return b.indexOf(" $")>-1?(j=" ",b=b.replace(" $","")):b.indexOf("$ ")>-1?(j=" ",b=b.replace("$ ","")):b=b.replace("$",""),e=i(a._value,b,c),1>=f?e.indexOf("(")>-1||e.indexOf("-")>-1?(e=e.split(""),d=1,(g>f||h>f)&&(d=0),e.splice(d,0,o[p].currency.symbol+j),e=e.join("")):e=o[p].currency.symbol+j+e:e.indexOf(")")>-1?(e=e.split(""),e.splice(-1,0,j+o[p].currency.symbol),e=e.join("")):e=e+j+o[p].currency.symbol,e}function f(a,b,c){var d,e="",f=100*a._value;return b.indexOf(" %")>-1?(e=" ",b=b.replace(" %","")):b=b.replace("%",""),d=i(f,b,c),d.indexOf(")")>-1?(d=d.split(""),d.splice(-1,0,e+"%"),d=d.join("")):d=d+e+"%",d}function g(a){var b=Math.floor(a._value/60/60),c=Math.floor((a._value-60*b*60)/60),d=Math.round(a._value-60*b*60-60*c);return b+":"+(10>c?"0"+c:c)+":"+(10>d?"0"+d:d)}function h(a){var b=a.split(":"),c=0;return 3===b.length?(c+=60*Number(b[0])*60,c+=60*Number(b[1]),c+=Number(b[2])):2===b.length&&(c+=60*Number(b[0]),c+=Number(b[1])),Number(c)}function i(a,c,d){var e,f,g,h,i,j,k=!1,l=!1,m=!1,n="",r=!1,s=!1,t=!1,u=!1,v=!1,w="",x="",y=Math.abs(a),z=["B","KB","MB","GB","TB","PB","EB","ZB","YB"],A="",B=!1;if(0===a&&null!==q)return q;if(c.indexOf("(")>-1?(k=!0,c=c.slice(1,-1)):c.indexOf("+")>-1&&(l=!0,c=c.replace(/\+/g,"")),c.indexOf("a")>-1&&(r=c.indexOf("aK")>=0,s=c.indexOf("aM")>=0,t=c.indexOf("aB")>=0,u=c.indexOf("aT")>=0,v=r||s||t||u,c.indexOf(" a")>-1?(n=" ",c=c.replace(" a","")):c=c.replace("a",""),y>=Math.pow(10,12)&&!v||u?(n+=o[p].abbreviations.trillion,a/=Math.pow(10,12)):y=Math.pow(10,9)&&!v||t?(n+=o[p].abbreviations.billion,a/=Math.pow(10,9)):y=Math.pow(10,6)&&!v||s?(n+=o[p].abbreviations.million,a/=Math.pow(10,6)):(y=Math.pow(10,3)&&!v||r)&&(n+=o[p].abbreviations.thousand,a/=Math.pow(10,3))),c.indexOf("b")>-1)for(c.indexOf(" b")>-1?(w=" ",c=c.replace(" b","")):c=c.replace("b",""),g=0;g<=z.length;g++)if(e=Math.pow(1024,g),f=Math.pow(1024,g+1),a>=e&&f>a){w+=z[g],e>0&&(a/=e);break}return c.indexOf("o")>-1&&(c.indexOf(" o")>-1?(x=" ",c=c.replace(" o","")):c=c.replace("o",""),x+=o[p].ordinal(a)),c.indexOf("[.]")>-1&&(m=!0,c=c.replace("[.]",".")),h=a.toString().split(".")[0],i=c.split(".")[1],j=c.indexOf(","),i?(i.indexOf("[")>-1?(i=i.replace("]",""),i=i.split("["),A=b(a,i[0].length+i[1].length,d,i[1].length)):A=b(a,i.length,d),h=A.split(".")[0],A=A.split(".")[1].length?o[p].delimiters.decimal+A.split(".")[1]:"",m&&0===Number(A.slice(1))&&(A="")):h=b(a,null,d),h.indexOf("-")>-1&&(h=h.slice(1),B=!0),j>-1&&(h=h.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g,"$1"+o[p].delimiters.thousands)),0===c.indexOf(".")&&(h=""),(k&&B?"(":"")+(!k&&B?"-":"")+(!B&&l?"+":"")+h+A+(x?x:"")+(n?n:"")+(w?w:"")+(k&&B?")":"")}function j(a,b){o[a]=b}function k(a){var b=a.toString().split(".");return b.length<2?1:Math.pow(10,b[1].length)}function l(){var a=Array.prototype.slice.call(arguments);return a.reduce(function(a,b){var c=k(a),d=k(b);return c>d?c:d},-1/0)}var m,n="1.5.3",o={},p="en",q=null,r="0,0",s="undefined"!=typeof module&&module.exports;m=function(b){return m.isNumeral(b)?b=b.value():0===b||"undefined"==typeof b?b=0:Number(b)||(b=m.fn.unformat(b)),new a(Number(b))},m.version=n,m.isNumeral=function(b){return b instanceof a},m.language=function(a,b){if(!a)return p;if(a&&!b){if(!o[a])throw new Error("Unknown language : "+a);p=a}return(b||!o[a])&&j(a,b),m},m.languageData=function(a){if(!a)return o[p];if(!o[a])throw new Error("Unknown language : "+a);return o[a]},m.language("en",{delimiters:{thousands:",",decimal:"."},abbreviations:{thousand:"k",million:"m",billion:"b",trillion:"t"},ordinal:function(a){var b=a%10;return 1===~~(a%100/10)?"th":1===b?"st":2===b?"nd":3===b?"rd":"th"},currency:{symbol:"$"}}),m.zeroFormat=function(a){q="string"==typeof a?a:null},m.defaultFormat=function(a){r="string"==typeof a?a:"0.0"},"function"!=typeof Array.prototype.reduce&&(Array.prototype.reduce=function(a,b){"use strict";if(null===this||"undefined"==typeof this)throw new TypeError("Array.prototype.reduce called on null or undefined");if("function"!=typeof a)throw new TypeError(a+" is not a function");var c,d,e=this.length>>>0,f=!1;for(1c;++c)this.hasOwnProperty(c)&&(f?d=a(d,this[c],c,this):(d=this[c],f=!0));if(!f)throw new TypeError("Reduce of empty array with no initial value");return d}),m.fn=a.prototype={clone:function(){return m(this)},format:function(a,b){return c(this,a?a:r,void 0!==b?b:Math.round)},unformat:function(a){return"[object Number]"===Object.prototype.toString.call(a)?a:d(this,a?a:r)},value:function(){return this._value},valueOf:function(){return this._value},set:function(a){return this._value=Number(a),this},add:function(a){function b(a,b){return a+c*b}var c=l.call(null,this._value,a);return this._value=[this._value,a].reduce(b,0)/c,this},subtract:function(a){function b(a,b){return a-c*b}var c=l.call(null,this._value,a);return this._value=[a].reduce(b,this._value*c)/c,this},multiply:function(a){function b(a,b){var c=l(a,b);return a*c*b*c/(c*c)}return this._value=[this._value,a].reduce(b,1),this},divide:function(a){function b(a,b){var c=l(a,b);return a*c/(b*c)}return this._value=[this._value,a].reduce(b),this},difference:function(a){return Math.abs(m(this._value).subtract(a).value())}},s&&(module.exports=m),"undefined"==typeof ender&&(this.numeral=m),"function"==typeof define&&define.amd&&define([],function(){return m})}).call(this);var TimeFormatters={formatUT:function(t){var day,year;if(t==null){t=0}year=(t/(365*24*3600)|0)+1;t%=365*24*3600;day=(t/(24*3600)|0)+1;t%=24*3600;return"Year "+year+", Day "+day+", "+this.hourMinSec(t)+" UT"},formatMET:function(t){var result;if(t==null){t=0}result="T+";if(t>=365*24*3600){result+=(t/(365*24*3600)|0)+":";t%=365*24*3600;if(t<24*3600){result+="0:"}}if(t>=24*3600){result+=(t/(24*3600)|0)+":"}t%=24*3600;return result+this.hourMinSec(t)+" MET"},hourMinSec:function(t){var hour,min,sec;if(t==null){t=0}hour=t/3600|0;if(hour<10){hour="0"+hour}t%=3600;min=t/60|0;if(min<10){min="0"+min}sec=(t%60|0).toFixed();if(sec<10){sec="0"+sec}return""+hour+":"+min+":"+sec},durationString:function(t){var result;if(t==null){t=0}result=t<0?"-":"";t=Math.abs(t);if(t>=365*24*3600){result+=(t/(365*24*3600)|0)+" years ";t%=365*24*3600;if(t<24*3600){result+="0 days "}}if(t>=24*3600){result+=(t/(24*3600)|0)+" days "}t%=24*3600;return result+this.hourMinSec(t)}};var DataFormatters={distanceString:function(value){return numeral(value).format("0,0.000 a")+"m"},heightFromTerrainString:function(value){if(value<=-1){return"NA"}return numeral(value).format("0,0.000 a")+"m"},degreeString:function(value){return numeral(value).format("0.000")+"°"},velocityString:function(value){return numeral(value).format("0,0.000 a")+"m/s"},temperatureString:function(value){if(!value){return"NA"}return numeral(value).format("0,000")+"°C"},accelerationSensorString:function(value){if(value[0]=="No Sensors of the Appropriate Type"){return"NA"}return numeral(value[1][0]).format("0,000")+"G"},pressureSensorString:function(value){if(value[0]=="No Sensors of the Appropriate Type"){return"NA"}return numeral(value[1][0]).format("0,000")+"Pa"},gravitySensorString:function(value){if(value[0]=="No Sensors of the Appropriate Type"){return"NA"}return numeral(value[1][0]).format("0,000 a")+"m/s²"},newtonsString:function(value){return numeral(value).format("0,0.00")+" N"},percentageString:function(value){return numeral(value).format("0%")},tonnageString:function(value){return numeral(value).format("0,0.00")+" t"},timeString:function(value){return numeral(value).format("00:00:00")},plainNumberString:function(value){return numeral(value).format("0,0.00")}};var Prototype={Version:"1.7.2",Browser:function(){var ua=navigator.userAgent;var isOpera=Object.prototype.toString.call(window.opera)=="[object Opera]";return{IE:!!window.attachEvent&&!isOpera,Opera:isOpera,WebKit:ua.indexOf("AppleWebKit/")>-1,Gecko:ua.indexOf("Gecko")>-1&&ua.indexOf("KHTML")===-1,MobileSafari:/Apple.*Mobile/.test(ua)}}(),BrowserFeatures:{XPath:!!document.evaluate,SelectorsAPI:!!document.querySelector,ElementExtensions:function(){var constructor=window.Element||window.HTMLElement;return!!(constructor&&constructor.prototype)}(),SpecificElementExtensions:function(){if(typeof window.HTMLDivElement!=="undefined")return true;var div=document.createElement("div"),form=document.createElement("form"),isSupported=false;if(div["__proto__"]&&div["__proto__"]!==form["__proto__"]){isSupported=true}div=form=null;return isSupported}()},ScriptFragment:"]*>([\\S\\s]*?)",JSONFilter:/^\/\*-secure-([\s\S]*)\*\/\s*$/,emptyFunction:function(){},K:function(x){return x}};if(Prototype.Browser.MobileSafari)Prototype.BrowserFeatures.SpecificElementExtensions=false;var Class=function(){var IS_DONTENUM_BUGGY=function(){for(var p in{toString:1}){if(p==="toString")return false}return true}();function subclass(){}function create(){var parent=null,properties=$A(arguments);if(Object.isFunction(properties[0]))parent=properties.shift();function klass(){this.initialize.apply(this,arguments)}Object.extend(klass,Class.Methods);klass.superclass=parent;klass.subclasses=[];if(parent){subclass.prototype=parent.prototype;klass.prototype=new subclass;parent.subclasses.push(klass)}for(var i=0,length=properties.length;i0){match=source.match(pattern);if(match&&match[0].length>0){result+=source.slice(0,match.index);result+=String.interpret(replacement(match));source=source.slice(match.index+match[0].length)}else{result+=source,source=""}}return result}function sub(pattern,replacement,count){replacement=prepareReplacement(replacement);count=Object.isUndefined(count)?1:count;return this.gsub(pattern,function(match){if(--count<0)return match[0];return replacement(match)})}function scan(pattern,iterator){this.gsub(pattern,iterator);return String(this)}function truncate(length,truncation){length=length||30;truncation=Object.isUndefined(truncation)?"...":truncation;return this.length>length?this.slice(0,length-truncation.length)+truncation:String(this)}function strip(){return this.replace(/^\s+/,"").replace(/\s+$/,"")}function stripTags(){return this.replace(/<\w+(\s+("[^"]*"|'[^']*'|[^>])+)?>|<\/\w+>/gi,"")}function stripScripts(){return this.replace(new RegExp(Prototype.ScriptFragment,"img"),"")}function extractScripts(){var matchAll=new RegExp(Prototype.ScriptFragment,"img"),matchOne=new RegExp(Prototype.ScriptFragment,"im");return(this.match(matchAll)||[]).map(function(scriptTag){return(scriptTag.match(matchOne)||["",""])[1]})}function evalScripts(){return this.extractScripts().map(function(script){return eval(script)})}function escapeHTML(){return this.replace(/&/g,"&").replace(//g,">")}function unescapeHTML(){return this.stripTags().replace(/</g,"<").replace(/>/g,">").replace(/&/g,"&")}function toQueryParams(separator){var match=this.strip().match(/([^?#]*)(#.*)?$/);if(!match)return{};return match[1].split(separator||"&").inject({},function(hash,pair){if((pair=pair.split("="))[0]){var key=decodeURIComponent(pair.shift()),value=pair.length>1?pair.join("="):pair[0];if(value!=undefined){value=value.gsub("+"," ");value=decodeURIComponent(value)}if(key in hash){if(!Object.isArray(hash[key]))hash[key]=[hash[key]];hash[key].push(value)}else hash[key]=value}return hash})}function toArray(){return this.split("")}function succ(){return this.slice(0,this.length-1)+String.fromCharCode(this.charCodeAt(this.length-1)+1)}function times(count){return count<1?"":new Array(count+1).join(this)}function camelize(){return this.replace(/-+(.)?/g,function(match,chr){return chr?chr.toUpperCase():""})}function capitalize(){return this.charAt(0).toUpperCase()+this.substring(1).toLowerCase()}function underscore(){return this.replace(/::/g,"/").replace(/([A-Z]+)([A-Z][a-z])/g,"$1_$2").replace(/([a-z\d])([A-Z])/g,"$1_$2").replace(/-/g,"_").toLowerCase()}function dasherize(){return this.replace(/_/g,"-")}function inspect(useDoubleQuotes){var escapedString=this.replace(/[\x00-\x1f\\]/g,function(character){if(character in String.specialChar){return String.specialChar[character]}return"\\u00"+character.charCodeAt().toPaddedString(2,16)});if(useDoubleQuotes)return'"'+escapedString.replace(/"/g,'\\"')+'"';return"'"+escapedString.replace(/'/g,"\\'")+"'"}function unfilterJSON(filter){return this.replace(filter||Prototype.JSONFilter,"$1")}function isJSON(){var str=this;if(str.blank())return false;str=str.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,"@");str=str.replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,"]");str=str.replace(/(?:^|:|,)(?:\s*\[)+/g,"");return/^[\],:{}\s]*$/.test(str)}function evalJSON(sanitize){var json=this.unfilterJSON(),cx=/[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g;if(cx.test(json)){json=json.replace(cx,function(a){return"\\u"+("0000"+a.charCodeAt(0).toString(16)).slice(-4)})}try{if(!sanitize||json.isJSON())return eval("("+json+")")}catch(e){}throw new SyntaxError("Badly formed JSON string: "+this.inspect())}function parseJSON(){var json=this.unfilterJSON();return JSON.parse(json)}function include(pattern){return this.indexOf(pattern)>-1}function startsWith(pattern,position){position=Object.isNumber(position)?position:0;return this.lastIndexOf(pattern,position)===position}function endsWith(pattern,position){pattern=String(pattern);position=Object.isNumber(position)?position:this.length;if(position<0)position=0;if(position>this.length)position=this.length;var d=position-pattern.length;return d>=0&&this.indexOf(pattern,d)===d}function empty(){return this==""}function blank(){return/^\s*$/.test(this)}function interpolate(object,pattern){return new Template(this,pattern).evaluate(object)}return{gsub:gsub,sub:sub,scan:scan,truncate:truncate,strip:String.prototype.trim||strip,stripTags:stripTags,stripScripts:stripScripts,extractScripts:extractScripts,evalScripts:evalScripts,escapeHTML:escapeHTML,unescapeHTML:unescapeHTML,toQueryParams:toQueryParams,parseQuery:toQueryParams,toArray:toArray,succ:succ,times:times,camelize:camelize,capitalize:capitalize,underscore:underscore,dasherize:dasherize,inspect:inspect,unfilterJSON:unfilterJSON,isJSON:isJSON,evalJSON:NATIVE_JSON_PARSE_SUPPORT?parseJSON:evalJSON,include:include,startsWith:String.prototype.startsWith||startsWith,endsWith:String.prototype.endsWith||endsWith,empty:empty,blank:blank,interpolate:interpolate}}());var Template=Class.create({initialize:function(template,pattern){this.template=template.toString();this.pattern=pattern||Template.Pattern},evaluate:function(object){if(object&&Object.isFunction(object.toTemplateReplacements))object=object.toTemplateReplacements();return this.template.gsub(this.pattern,function(match){if(object==null)return match[1]+"";var before=match[1]||"";if(before=="\\")return match[2];var ctx=object,expr=match[3],pattern=/^([^.[]+|\[((?:.*?[^\\])?)\])(\.|\[|$)/;match=pattern.exec(expr);if(match==null)return before;while(match!=null){var comp=match[1].startsWith("[")?match[2].replace(/\\\\]/g,"]"):match[1];ctx=ctx[comp];if(null==ctx||""==match[3])break;expr=expr.substring("["==match[3]?match[1].length:match[0].length);match=pattern.exec(expr)}return before+String.interpret(ctx)})}});Template.Pattern=/(^|.|\r|\n)(#\{(.*?)\})/;var $break={};var Enumerable=function(){function each(iterator,context){try{this._each(iterator,context)}catch(e){if(e!=$break)throw e}return this}function eachSlice(number,iterator,context){var index=-number,slices=[],array=this.toArray();if(number<1)return array;while((index+=number)=result)result=value},this);return result}function min(iterator,context){iterator=iterator||Prototype.K;var result;this.each(function(value,index){value=iterator.call(context,value,index,this);if(result==null||valueb?1:0}).pluck("value")}function toArray(){return this.map()}function zip(){var iterator=Prototype.K,args=$A(arguments);if(Object.isFunction(args.last()))iterator=args.pop();var collections=[this].concat(args).map($A);return this.map(function(value,index){return iterator(collections.pluck(index))})}function size(){return this.toArray().length}function inspect(){return"#"}return{each:each,eachSlice:eachSlice,all:all,every:all,any:any,some:any,collect:collect,map:collect,detect:detect,findAll:findAll,select:findAll,filter:findAll,grep:grep,include:include,member:include,inGroupsOf:inGroupsOf,inject:inject,invoke:invoke,max:max,min:min,partition:partition,pluck:pluck,reject:reject,sortBy:sortBy,toArray:toArray,entries:toArray,zip:zip,size:size,inspect:inspect,find:detect}}();function $A(iterable){if(!iterable)return[];if("toArray"in Object(iterable))return iterable.toArray();var length=iterable.length||0,results=new Array(length);while(length--)results[length]=iterable[length];return results}function $w(string){if(!Object.isString(string))return[];string=string.strip();return string?string.split(/\s+/):[]}Array.from=$A;(function(){var arrayProto=Array.prototype,slice=arrayProto.slice,_each=arrayProto.forEach;function each(iterator,context){for(var i=0,length=this.length>>>0;i>>0;if(length===0)return-1;i=Number(i);if(isNaN(i)){i=0}else if(i!==0&&isFinite(i)){i=(i>0?1:-1)*Math.floor(Math.abs(i))}if(i>length)return-1;var k=i>=0?i:Math.max(length-Math.abs(i),0);for(;k>>0;if(length===0)return-1;if(!Object.isUndefined(i)){i=Number(i);if(isNaN(i)){i=0}else if(i!==0&&isFinite(i)){i=(i>0?1:-1)*Math.floor(Math.abs(i))}}else{i=length}var k=i>=0?Math.min(i,length-1):length-Math.abs(i);for(;k>=0;k--)if(k in array&&array[k]===item)return k;return-1}function concat(_){var array=[],items=slice.call(arguments,0),item,n=0;items.unshift(this);for(var i=0,length=items.length;i>>0;i>>0;i>>0;i>>0;i"}function clone(){return new Hash(this)}return{initialize:initialize,_each:_each,set:set,get:get,unset:unset,toObject:toObject,toTemplateReplacements:toObject,keys:keys,values:values,index:index,merge:merge,update:update,toQueryString:toQueryString,inspect:inspect,toJSON:toObject,clone:clone}}());Hash.from=$H;Object.extend(Number.prototype,function(){function toColorPart(){return this.toPaddedString(2,16)}function succ(){return this+1}function times(iterator,context){$R(0,this,true).each(iterator,context);return this}function toPaddedString(length,radix){var string=this.toString(radix||10);return"0".times(length-string.length)+string}function abs(){return Math.abs(this)}function round(){return Math.round(this)}function ceil(){return Math.ceil(this)}function floor(){return Math.floor(this)}return{toColorPart:toColorPart,succ:succ,times:times,toPaddedString:toPaddedString,abs:abs,round:round,ceil:ceil,floor:floor}}());function $R(start,end,exclusive){return new ObjectRange(start,end,exclusive)}var ObjectRange=Class.create(Enumerable,function(){function initialize(start,end,exclusive){this.start=start;this.end=end;this.exclusive=exclusive}function _each(iterator,context){var value=this.start,i;for(i=0;this.include(value);i++){iterator.call(context,value,i);value=value.succ()}}function include(value){if(value1&&!(readyState==4&&this._complete))this.respondToReadyState(this.transport.readyState)},setRequestHeaders:function(){var headers={"X-Requested-With":"XMLHttpRequest","X-Prototype-Version":Prototype.Version,Accept:"text/javascript, text/html, application/xml, text/xml, */*"};if(this.method=="post"){headers["Content-type"]=this.options.contentType+(this.options.encoding?"; charset="+this.options.encoding:"");if(this.transport.overrideMimeType&&(navigator.userAgent.match(/Gecko\/(\d{4})/)||[0,2005])[1]<2005)headers["Connection"]="close"}if(typeof this.options.requestHeaders=="object"){var extras=this.options.requestHeaders;if(Object.isFunction(extras.push))for(var i=0,length=extras.length;i=200&&status<300||status==304},getStatus:function(){try{if(this.transport.status===1223)return 204;return this.transport.status||0}catch(e){return 0}},respondToReadyState:function(readyState){var state=Ajax.Request.Events[readyState],response=new Ajax.Response(this);if(state=="Complete"){try{this._complete=true;(this.options["on"+response.status]||this.options["on"+(this.success()?"Success":"Failure")]||Prototype.emptyFunction)(response,response.headerJSON)}catch(e){this.dispatchException(e)}var contentType=response.getHeader("Content-type");if(this.options.evalJS=="force"||this.options.evalJS&&this.isSameOrigin()&&contentType&&contentType.match(/^\s*(text|application)\/(x-)?(java|ecma)script(;.*)?\s*$/i))this.evalResponse()}try{(this.options["on"+state]||Prototype.emptyFunction)(response,response.headerJSON);Ajax.Responders.dispatch("on"+state,this,response,response.headerJSON)}catch(e){this.dispatchException(e)}if(state=="Complete"){this.transport.onreadystatechange=Prototype.emptyFunction}},isSameOrigin:function(){var m=this.url.match(/^\s*https?:\/\/[^\/]*/);return!m||m[0]=="#{protocol}//#{domain}#{port}".interpolate({protocol:location.protocol,domain:document.domain,port:location.port?":"+location.port:""})},getHeader:function(name){try{return this.transport.getResponseHeader(name)||null}catch(e){return null}},evalResponse:function(){try{return eval((this.transport.responseText||"").unfilterJSON())}catch(e){this.dispatchException(e)}},dispatchException:function(exception){(this.options.onException||Prototype.emptyFunction)(this,exception);Ajax.Responders.dispatch("onException",this,exception)}});Ajax.Request.Events=["Uninitialized","Loading","Loaded","Interactive","Complete"];Ajax.Response=Class.create({initialize:function(request){this.request=request;var transport=this.transport=request.transport,readyState=this.readyState=transport.readyState;if(readyState>2&&!Prototype.Browser.IE||readyState==4){this.status=this.getStatus();this.statusText=this.getStatusText();this.responseText=String.interpret(transport.responseText);this.headerJSON=this._getHeaderJSON()}if(readyState==4){var xml=transport.responseXML;this.responseXML=Object.isUndefined(xml)?null:xml;this.responseJSON=this._getResponseJSON()}},status:0,statusText:"",getStatus:Ajax.Request.prototype.getStatus,getStatusText:function(){try{return this.transport.statusText||""}catch(e){return""}},getHeader:Ajax.Request.prototype.getHeader,getAllHeaders:function(){try{return this.getAllResponseHeaders()}catch(e){return null}},getResponseHeader:function(name){return this.transport.getResponseHeader(name)},getAllResponseHeaders:function(){return this.transport.getAllResponseHeaders()},_getHeaderJSON:function(){var json=this.getHeader("X-JSON");if(!json)return null;try{json=decodeURIComponent(escape(json))}catch(e){}try{return json.evalJSON(this.request.options.sanitizeJSON||!this.request.isSameOrigin())}catch(e){this.request.dispatchException(e)}},_getResponseJSON:function(){var options=this.request.options;if(!options.evalJSON||options.evalJSON!="force"&&!(this.getHeader("Content-type")||"").include("application/json")||this.responseText.blank())return null;try{return this.responseText.evalJSON(options.sanitizeJSON||!this.request.isSameOrigin())}catch(e){this.request.dispatchException(e)}}});Ajax.Updater=Class.create(Ajax.Request,{initialize:function($super,container,url,options){this.container={success:container.success||container,failure:container.failure||(container.success?null:container)};options=Object.clone(options);var onComplete=options.onComplete;options.onComplete=function(response,json){this.updateContent(response.responseText);if(Object.isFunction(onComplete))onComplete(response,json)}.bind(this);$super(url,options)},updateContent:function(responseText){var receiver=this.container[this.success()?"success":"failure"],options=this.options;if(!options.evalScripts)responseText=responseText.stripScripts();if(receiver=$(receiver)){if(options.insertion){if(Object.isString(options.insertion)){var insertion={};insertion[options.insertion]=responseText;receiver.insert(insertion)}else options.insertion(receiver,responseText)}else receiver.update(responseText)}}});Ajax.PeriodicalUpdater=Class.create(Ajax.Base,{initialize:function($super,container,url,options){$super(options);this.onComplete=this.options.onComplete;this.frequency=this.options.frequency||2;this.decay=this.options.decay||1;this.updater={};this.container=container;this.url=url;this.start()},start:function(){this.options.onComplete=this.updateComplete.bind(this);this.onTimerEvent()},stop:function(){this.updater.options.onComplete=undefined;clearTimeout(this.timer);(this.onComplete||Prototype.emptyFunction).apply(this,arguments)},updateComplete:function(response){if(this.options.decay){this.decay=response.responseText==this.lastText?this.decay*this.options.decay:1;this.lastText=response.responseText}this.timer=this.onTimerEvent.bind(this).delay(this.decay*this.frequency)},onTimerEvent:function(){this.updater=new Ajax.Updater(this.container,this.url,this.options)}});(function(GLOBAL){var UNDEFINED;var SLICE=Array.prototype.slice;var DIV=document.createElement("div");function $(element){if(arguments.length>1){for(var i=0,elements=[],length=arguments.length;i');return el.tagName.toLowerCase()==="input"&&el.name==="x"}catch(err){return false}}();var oldElement=GLOBAL.Element;function Element(tagName,attributes){attributes=attributes||{};tagName=tagName.toLowerCase();if(HAS_EXTENDED_CREATE_ELEMENT_SYNTAX&&attributes.name){tagName="<"+tagName+' name="'+attributes.name+'">';delete attributes.name;return Element.writeAttribute(document.createElement(tagName),attributes)}if(!ELEMENT_CACHE[tagName])ELEMENT_CACHE[tagName]=Element.extend(document.createElement(tagName));var node=shouldUseCreationCache(tagName,attributes)?ELEMENT_CACHE[tagName].cloneNode(false):document.createElement(tagName);return Element.writeAttribute(node,attributes)}GLOBAL.Element=Element;Object.extend(GLOBAL.Element,oldElement||{});if(oldElement)GLOBAL.Element.prototype=oldElement.prototype;Element.Methods={ByTag:{},Simulated:{}};var methods={};var INSPECT_ATTRIBUTES={id:"id",className:"class"};function inspect(element){element=$(element);var result="<"+element.tagName.toLowerCase();var attribute,value;for(var property in INSPECT_ATTRIBUTES){attribute=INSPECT_ATTRIBUTES[property];value=(element[property]||"").toString();if(value)result+=" "+attribute+"="+value.inspect(true)}return result+">"}methods.inspect=inspect;function visible(element){return $(element).style.display!=="none"}function toggle(element,bool){element=$(element);if(Object.isUndefined(bool))bool=!Element.visible(element);Element[bool?"show":"hide"](element);return element}function hide(element){element=$(element);element.style.display="none";return element}function show(element){element=$(element);element.style.display="";return element}Object.extend(methods,{visible:visible,toggle:toggle,hide:hide,show:show});function remove(element){element=$(element);element.parentNode.removeChild(element);return element}var SELECT_ELEMENT_INNERHTML_BUGGY=function(){var el=document.createElement("select"),isBuggy=true;el.innerHTML='';if(el.options&&el.options[0]){isBuggy=el.options[0].nodeName.toUpperCase()!=="OPTION"}el=null;return isBuggy}();var TABLE_ELEMENT_INNERHTML_BUGGY=function(){try{var el=document.createElement("table");if(el&&el.tBodies){el.innerHTML="test";var isBuggy=typeof el.tBodies[0]=="undefined";el=null;return isBuggy}}catch(e){return true}}();var LINK_ELEMENT_INNERHTML_BUGGY=function(){try{var el=document.createElement("div");el.innerHTML="";var isBuggy=el.childNodes.length===0;el=null;return isBuggy}catch(e){return true}}();var ANY_INNERHTML_BUGGY=SELECT_ELEMENT_INNERHTML_BUGGY||TABLE_ELEMENT_INNERHTML_BUGGY||LINK_ELEMENT_INNERHTML_BUGGY;var SCRIPT_ELEMENT_REJECTS_TEXTNODE_APPENDING=function(){var s=document.createElement("script"),isBuggy=false;try{s.appendChild(document.createTextNode(""));isBuggy=!s.firstChild||s.firstChild&&s.firstChild.nodeType!==3}catch(e){isBuggy=true}s=null;return isBuggy}();function update(element,content){element=$(element);var descendants=element.getElementsByTagName("*"),i=descendants.length;while(i--)purgeElement(descendants[i]);if(content&&content.toElement)content=content.toElement();if(Object.isElement(content))return element.update().insert(content);content=Object.toHTML(content);var tagName=element.tagName.toUpperCase();if(tagName==="SCRIPT"&&SCRIPT_ELEMENT_REJECTS_TEXTNODE_APPENDING){element.text=content;return element}if(ANY_INNERHTML_BUGGY){if(tagName in INSERTION_TRANSLATIONS.tags){while(element.firstChild)element.removeChild(element.firstChild);var nodes=getContentFromAnonymousElement(tagName,content.stripScripts());for(var i=0,node;node=nodes[i];i++)element.appendChild(node)}else if(LINK_ELEMENT_INNERHTML_BUGGY&&Object.isString(content)&&content.indexOf("-1){while(element.firstChild)element.removeChild(element.firstChild);var nodes=getContentFromAnonymousElement(tagName,content.stripScripts(),true);for(var i=0,node;node=nodes[i];i++)element.appendChild(node)}else{element.innerHTML=content.stripScripts()}}else{element.innerHTML=content.stripScripts()}content.evalScripts.bind(content).defer();return element}function replace(element,content){element=$(element);if(content&&content.toElement){content=content.toElement()}else if(!Object.isElement(content)){content=Object.toHTML(content);var range=element.ownerDocument.createRange();range.selectNode(element);content.evalScripts.bind(content).defer();content=range.createContextualFragment(content.stripScripts())}element.parentNode.replaceChild(content,element);return element}var INSERTION_TRANSLATIONS={before:function(element,node){element.parentNode.insertBefore(node,element)},top:function(element,node){element.insertBefore(node,element.firstChild)},bottom:function(element,node){element.appendChild(node)},after:function(element,node){element.parentNode.insertBefore(node,element.nextSibling)},tags:{TABLE:["","
    ",1],TBODY:["","
    ",2],TR:["","
    ",3],TD:["
    ","
    ",4],SELECT:["",1]}};var tags=INSERTION_TRANSLATIONS.tags;Object.extend(tags,{THEAD:tags.TBODY,TFOOT:tags.TBODY,TH:tags.TD});function replace_IE(element,content){element=$(element);if(content&&content.toElement)content=content.toElement();if(Object.isElement(content)){element.parentNode.replaceChild(content,element);return element}content=Object.toHTML(content);var parent=element.parentNode,tagName=parent.tagName.toUpperCase();if(tagName in INSERTION_TRANSLATIONS.tags){var nextSibling=Element.next(element);var fragments=getContentFromAnonymousElement(tagName,content.stripScripts());parent.removeChild(element);var iterator;if(nextSibling)iterator=function(node){parent.insertBefore(node,nextSibling)};else iterator=function(node){parent.appendChild(node)};fragments.each(iterator)}else{element.outerHTML=content.stripScripts()}content.evalScripts.bind(content).defer();return element}if("outerHTML"in document.documentElement)replace=replace_IE;function isContent(content){if(Object.isUndefined(content)||content===null)return false;if(Object.isString(content)||Object.isNumber(content))return true;if(Object.isElement(content))return true;if(content.toElement||content.toHTML)return true;return false}function insertContentAt(element,content,position){position=position.toLowerCase();var method=INSERTION_TRANSLATIONS[position];if(content&&content.toElement)content=content.toElement();if(Object.isElement(content)){method(element,content);return element}content=Object.toHTML(content);var tagName=(position==="before"||position==="after"?element.parentNode:element).tagName.toUpperCase();var childNodes=getContentFromAnonymousElement(tagName,content.stripScripts());if(position==="top"||position==="after")childNodes.reverse();for(var i=0,node;node=childNodes[i];i++)method(element,node);content.evalScripts.bind(content).defer()}function insert(element,insertions){element=$(element);if(isContent(insertions))insertions={bottom:insertions};for(var position in insertions)insertContentAt(element,insertions[position],position);return element}function wrap(element,wrapper,attributes){element=$(element);if(Object.isElement(wrapper)){$(wrapper).writeAttribute(attributes||{})}else if(Object.isString(wrapper)){wrapper=new Element(wrapper,attributes)}else{wrapper=new Element("div",wrapper)}if(element.parentNode)element.parentNode.replaceChild(wrapper,element);wrapper.appendChild(element);return wrapper}function cleanWhitespace(element){element=$(element);var node=element.firstChild;while(node){var nextNode=node.nextSibling;if(node.nodeType===Node.TEXT_NODE&&!/\S/.test(node.nodeValue))element.removeChild(node);node=nextNode}return element}function empty(element){return $(element).innerHTML.blank()}function getContentFromAnonymousElement(tagName,html,force){var t=INSERTION_TRANSLATIONS.tags[tagName],div=DIV;var workaround=!!t;if(!workaround&&force){workaround=true;t=["","",0]}if(workaround){div.innerHTML=" "+t[0]+html+t[1];div.removeChild(div.firstChild);for(var i=t[2];i--;)div=div.firstChild}else{div.innerHTML=html}return $A(div.childNodes)}function clone(element,deep){if(!(element=$(element)))return;var clone=element.cloneNode(deep);if(!HAS_UNIQUE_ID_PROPERTY){clone._prototypeUID=UNDEFINED;if(deep){var descendants=Element.select(clone,"*"),i=descendants.length;while(i--)descendants[i]._prototypeUID=UNDEFINED}}return Element.extend(clone)}function purgeElement(element){var uid=getUniqueElementID(element);if(uid){Element.stopObserving(element);if(!HAS_UNIQUE_ID_PROPERTY)element._prototypeUID=UNDEFINED;delete Element.Storage[uid]}}function purgeCollection(elements){var i=elements.length;while(i--)purgeElement(elements[i])}function purgeCollection_IE(elements){var i=elements.length,element,uid;while(i--){element=elements[i];uid=getUniqueElementID(element);delete Element.Storage[uid];delete Event.cache[uid]}}if(HAS_UNIQUE_ID_PROPERTY){purgeCollection=purgeCollection_IE}function purge(element){if(!(element=$(element)))return;purgeElement(element);var descendants=element.getElementsByTagName("*"),i=descendants.length;while(i--)purgeElement(descendants[i]);return null}Object.extend(methods,{remove:remove,update:update,replace:replace,insert:insert,wrap:wrap,cleanWhitespace:cleanWhitespace,empty:empty,clone:clone,purge:purge});function recursivelyCollect(element,property,maximumLength){element=$(element);maximumLength=maximumLength||-1;var elements=[];while(element=element[property]){if(element.nodeType===Node.ELEMENT_NODE)elements.push(Element.extend(element));if(elements.length===maximumLength)break}return elements}function ancestors(element){return recursivelyCollect(element,"parentNode")}function descendants(element){return Element.select(element,"*")}function firstDescendant(element){element=$(element).firstChild;while(element&&element.nodeType!==Node.ELEMENT_NODE)element=element.nextSibling;return $(element)}function immediateDescendants(element){var results=[],child=$(element).firstChild;while(child){if(child.nodeType===Node.ELEMENT_NODE)results.push(Element.extend(child));child=child.nextSibling}return results}function previousSiblings(element){return recursivelyCollect(element,"previousSibling")}function nextSiblings(element){return recursivelyCollect(element,"nextSibling")}function siblings(element){element=$(element);var previous=previousSiblings(element),next=nextSiblings(element);return previous.reverse().concat(next)}function match(element,selector){element=$(element);if(Object.isString(selector))return Prototype.Selector.match(element,selector);return selector.match(element)}function _recursivelyFind(element,property,expression,index){element=$(element),expression=expression||0,index=index||0;if(Object.isNumber(expression)){index=expression,expression=null}while(element=element[property]){if(element.nodeType!==1)continue;if(expression&&!Prototype.Selector.match(element,expression))continue;if(--index>=0)continue;return Element.extend(element)}}function up(element,expression,index){element=$(element);if(arguments.length===1)return $(element.parentNode);return _recursivelyFind(element,"parentNode",expression,index)}function down(element,expression,index){if(arguments.length===1)return firstDescendant(element);element=$(element),expression=expression||0,index=index||0;if(Object.isNumber(expression))index=expression,expression="*";var node=Prototype.Selector.select(expression,element)[index];return Element.extend(node)}function previous(element,expression,index){return _recursivelyFind(element,"previousSibling",expression,index)}function next(element,expression,index){return _recursivelyFind(element,"nextSibling",expression,index)}function select(element){element=$(element);var expressions=SLICE.call(arguments,1).join(", ");return Prototype.Selector.select(expressions,element)}function adjacent(element){element=$(element);var expressions=SLICE.call(arguments,1).join(", ");var siblings=Element.siblings(element),results=[];for(var i=0,sibling;sibling=siblings[i];i++){if(Prototype.Selector.match(sibling,expressions))results.push(sibling)}return results}function descendantOf_DOM(element,ancestor){element=$(element),ancestor=$(ancestor);while(element=element.parentNode)if(element===ancestor)return true;return false}function descendantOf_contains(element,ancestor){element=$(element),ancestor=$(ancestor);if(!ancestor.contains)return descendantOf_DOM(element,ancestor);return ancestor.contains(element)&&ancestor!==element}function descendantOf_compareDocumentPosition(element,ancestor){element=$(element),ancestor=$(ancestor);return(element.compareDocumentPosition(ancestor)&8)===8}var descendantOf;if(DIV.compareDocumentPosition){descendantOf=descendantOf_compareDocumentPosition}else if(DIV.contains){descendantOf=descendantOf_contains}else{descendantOf=descendantOf_DOM}Object.extend(methods,{recursivelyCollect:recursivelyCollect,ancestors:ancestors,descendants:descendants,firstDescendant:firstDescendant,immediateDescendants:immediateDescendants,previousSiblings:previousSiblings,nextSiblings:nextSiblings,siblings:siblings,match:match,up:up,down:down,previous:previous,next:next,select:select,adjacent:adjacent,descendantOf:descendantOf,getElementsBySelector:select,childElements:immediateDescendants});var idCounter=1;function identify(element){element=$(element);var id=Element.readAttribute(element,"id");if(id)return id;do{id="anonymous_element_"+idCounter++}while($(id));Element.writeAttribute(element,"id",id);return id}function readAttribute(element,name){return $(element).getAttribute(name)}function readAttribute_IE(element,name){element=$(element);var table=ATTRIBUTE_TRANSLATIONS.read;if(table.values[name])return table.values[name](element,name);if(table.names[name])name=table.names[name];if(name.include(":")){if(!element.attributes||!element.attributes[name])return null;return element.attributes[name].value}return element.getAttribute(name)}function readAttribute_Opera(element,name){if(name==="title")return element.title;return element.getAttribute(name)}var PROBLEMATIC_ATTRIBUTE_READING=function(){DIV.setAttribute("onclick",[]);var value=DIV.getAttribute("onclick");var isFunction=Object.isArray(value);DIV.removeAttribute("onclick");return isFunction}();if(PROBLEMATIC_ATTRIBUTE_READING){readAttribute=readAttribute_IE}else if(Prototype.Browser.Opera){readAttribute=readAttribute_Opera}function writeAttribute(element,name,value){element=$(element);var attributes={},table=ATTRIBUTE_TRANSLATIONS.write; +Math.toRadians = function(angleInDegrees){ + return angleInDegrees * (Math.PI/180) +} -if(typeof name==="object"){attributes=name}else{attributes[name]=Object.isUndefined(value)?true:value}for(var attr in attributes){name=table.names[attr]||attr;value=attributes[attr];if(table.values[attr])name=table.values[attr](element,value)||name;if(value===false||value===null)element.removeAttribute(name);else if(value===true)element.setAttribute(name,name);else element.setAttribute(name,value)}return element}var PROBLEMATIC_HAS_ATTRIBUTE_WITH_CHECKBOXES=function(){if(!HAS_EXTENDED_CREATE_ELEMENT_SYNTAX){return false}var checkbox=document.createElement('');checkbox.checked=true;var node=checkbox.getAttributeNode("checked");return!node||!node.specified}();function hasAttribute(element,attribute){attribute=ATTRIBUTE_TRANSLATIONS.has[attribute]||attribute;var node=$(element).getAttributeNode(attribute);return!!(node&&node.specified)}function hasAttribute_IE(element,attribute){if(attribute==="checked"){return element.checked}return hasAttribute(element,attribute)}GLOBAL.Element.Methods.Simulated.hasAttribute=PROBLEMATIC_HAS_ATTRIBUTE_WITH_CHECKBOXES?hasAttribute_IE:hasAttribute;function classNames(element){return new Element.ClassNames(element)}var regExpCache={};function getRegExpForClassName(className){if(regExpCache[className])return regExpCache[className];var re=new RegExp("(^|\\s+)"+className+"(\\s+|$)");regExpCache[className]=re;return re}function hasClassName(element,className){if(!(element=$(element)))return;var elementClassName=element.className;if(elementClassName.length===0)return false;if(elementClassName===className)return true;return getRegExpForClassName(className).test(elementClassName)}function addClassName(element,className){if(!(element=$(element)))return;if(!hasClassName(element,className))element.className+=(element.className?" ":"")+className;return element}function removeClassName(element,className){if(!(element=$(element)))return;element.className=element.className.replace(getRegExpForClassName(className)," ").strip();return element}function toggleClassName(element,className,bool){if(!(element=$(element)))return;if(Object.isUndefined(bool))bool=!hasClassName(element,className);var method=Element[bool?"addClassName":"removeClassName"];return method(element,className)}var ATTRIBUTE_TRANSLATIONS={};var classProp="className",forProp="for";DIV.setAttribute(classProp,"x");if(DIV.className!=="x"){DIV.setAttribute("class","x");if(DIV.className==="x")classProp="class"}var LABEL=document.createElement("label");LABEL.setAttribute(forProp,"x");if(LABEL.htmlFor!=="x"){LABEL.setAttribute("htmlFor","x");if(LABEL.htmlFor==="x")forProp="htmlFor"}LABEL=null;function _getAttr(element,attribute){return element.getAttribute(attribute)}function _getAttr2(element,attribute){return element.getAttribute(attribute,2)}function _getAttrNode(element,attribute){var node=element.getAttributeNode(attribute);return node?node.value:""}function _getFlag(element,attribute){return $(element).hasAttribute(attribute)?attribute:null}DIV.onclick=Prototype.emptyFunction;var onclickValue=DIV.getAttribute("onclick");var _getEv;if(String(onclickValue).indexOf("{")>-1){_getEv=function(element,attribute){var value=element.getAttribute(attribute);if(!value)return null;value=value.toString();value=value.split("{")[1];value=value.split("}")[0];return value.strip()}}else if(onclickValue===""){_getEv=function(element,attribute){var value=element.getAttribute(attribute);if(!value)return null;return value.strip()}}ATTRIBUTE_TRANSLATIONS.read={names:{class:classProp,className:classProp,for:forProp,htmlFor:forProp},values:{style:function(element){return element.style.cssText.toLowerCase()},title:function(element){return element.title}}};ATTRIBUTE_TRANSLATIONS.write={names:{className:"class",htmlFor:"for",cellpadding:"cellPadding",cellspacing:"cellSpacing"},values:{checked:function(element,value){element.checked=!!value},style:function(element,value){element.style.cssText=value?value:""}}};ATTRIBUTE_TRANSLATIONS.has={names:{}};Object.extend(ATTRIBUTE_TRANSLATIONS.write.names,ATTRIBUTE_TRANSLATIONS.read.names);var CAMEL_CASED_ATTRIBUTE_NAMES=$w("colSpan rowSpan vAlign dateTime "+"accessKey tabIndex encType maxLength readOnly longDesc frameBorder");for(var i=0,attr;attr=CAMEL_CASED_ATTRIBUTE_NAMES[i];i++){ATTRIBUTE_TRANSLATIONS.write.names[attr.toLowerCase()]=attr;ATTRIBUTE_TRANSLATIONS.has.names[attr.toLowerCase()]=attr}Object.extend(ATTRIBUTE_TRANSLATIONS.read.values,{href:_getAttr2,src:_getAttr2,type:_getAttr,action:_getAttrNode,disabled:_getFlag,checked:_getFlag,readonly:_getFlag,multiple:_getFlag,onload:_getEv,onunload:_getEv,onclick:_getEv,ondblclick:_getEv,onmousedown:_getEv,onmouseup:_getEv,onmouseover:_getEv,onmousemove:_getEv,onmouseout:_getEv,onfocus:_getEv,onblur:_getEv,onkeypress:_getEv,onkeydown:_getEv,onkeyup:_getEv,onsubmit:_getEv,onreset:_getEv,onselect:_getEv,onchange:_getEv});Object.extend(methods,{identify:identify,readAttribute:readAttribute,writeAttribute:writeAttribute,classNames:classNames,hasClassName:hasClassName,addClassName:addClassName,removeClassName:removeClassName,toggleClassName:toggleClassName});function normalizeStyleName(style){if(style==="float"||style==="styleFloat")return"cssFloat";return style.camelize()}function normalizeStyleName_IE(style){if(style==="float"||style==="cssFloat")return"styleFloat";return style.camelize()}function setStyle(element,styles){element=$(element);var elementStyle=element.style,match;if(Object.isString(styles)){elementStyle.cssText+=";"+styles;if(styles.include("opacity")){var opacity=styles.match(/opacity:\s*(\d?\.?\d*)/)[1];Element.setOpacity(element,opacity)}return element}for(var property in styles){if(property==="opacity"){Element.setOpacity(element,styles[property])}else{var value=styles[property];if(property==="float"||property==="cssFloat"){property=Object.isUndefined(elementStyle.styleFloat)?"cssFloat":"styleFloat"}elementStyle[property]=value}}return element}function getStyle(element,style){element=$(element);style=normalizeStyleName(style);var value=element.style[style];if(!value||value==="auto"){var css=document.defaultView.getComputedStyle(element,null);value=css?css[style]:null}if(style==="opacity")return value?parseFloat(value):1;return value==="auto"?null:value}function getStyle_Opera(element,style){switch(style){case"height":case"width":if(!Element.visible(element))return null;var dim=parseInt(getStyle(element,style),10);if(dim!==element["offset"+style.capitalize()])return dim+"px";return Element.measure(element,style);default:return getStyle(element,style)}}function getStyle_IE(element,style){element=$(element);style=normalizeStyleName_IE(style);var value=element.style[style];if(!value&&element.currentStyle){value=element.currentStyle[style]}if(style==="opacity"&&!STANDARD_CSS_OPACITY_SUPPORTED)return getOpacity_IE(element);if(value==="auto"){if((style==="width"||style==="height")&&Element.visible(element))return Element.measure(element,style)+"px";return null}return value}function stripAlphaFromFilter_IE(filter){return(filter||"").replace(/alpha\([^\)]*\)/gi,"")}function hasLayout_IE(element){if(!element.currentStyle||!element.currentStyle.hasLayout)element.style.zoom=1;return element}var STANDARD_CSS_OPACITY_SUPPORTED=function(){DIV.style.cssText="opacity:.55";return/^0.55/.test(DIV.style.opacity)}();function setOpacity(element,value){element=$(element);if(value==1||value==="")value="";else if(value<1e-5)value=0;element.style.opacity=value;return element}function setOpacity_IE(element,value){if(STANDARD_CSS_OPACITY_SUPPORTED)return setOpacity(element,value);element=hasLayout_IE($(element));var filter=Element.getStyle(element,"filter"),style=element.style;if(value==1||value===""){filter=stripAlphaFromFilter_IE(filter);if(filter)style.filter=filter;else style.removeAttribute("filter");return element}if(value<1e-5)value=0;style.filter=stripAlphaFromFilter_IE(filter)+"alpha(opacity="+value*100+")";return element}function getOpacity(element){return Element.getStyle(element,"opacity")}function getOpacity_IE(element){if(STANDARD_CSS_OPACITY_SUPPORTED)return getOpacity(element);var filter=Element.getStyle(element,"filter");if(filter.length===0)return 1;var match=(filter||"").match(/alpha\(opacity=(.*)\)/);if(match&&match[1])return parseFloat(match[1])/100;return 1}Object.extend(methods,{setStyle:setStyle,getStyle:getStyle,setOpacity:setOpacity,getOpacity:getOpacity});if("styleFloat"in DIV.style){methods.getStyle=getStyle_IE;methods.setOpacity=setOpacity_IE;methods.getOpacity=getOpacity_IE}var UID=0;GLOBAL.Element.Storage={UID:1};function getUniqueElementID(element){if(element===window)return 0;if(typeof element._prototypeUID==="undefined")element._prototypeUID=Element.Storage.UID++;return element._prototypeUID}function getUniqueElementID_IE(element){if(element===window)return 0;if(element==document)return 1;return element.uniqueID}var HAS_UNIQUE_ID_PROPERTY="uniqueID"in DIV;if(HAS_UNIQUE_ID_PROPERTY)getUniqueElementID=getUniqueElementID_IE;function getStorage(element){if(!(element=$(element)))return;var uid=getUniqueElementID(element);if(!Element.Storage[uid])Element.Storage[uid]=$H();return Element.Storage[uid]}function store(element,key,value){if(!(element=$(element)))return;var storage=getStorage(element);if(arguments.length===2){storage.update(key)}else{storage.set(key,value)}return element}function retrieve(element,key,defaultValue){if(!(element=$(element)))return;var storage=getStorage(element),value=storage.get(key);if(Object.isUndefined(value)){storage.set(key,defaultValue);value=defaultValue}return value}Object.extend(methods,{getStorage:getStorage,store:store,retrieve:retrieve});var Methods={},ByTag=Element.Methods.ByTag,F=Prototype.BrowserFeatures;if(!F.ElementExtensions&&"__proto__"in DIV){GLOBAL.HTMLElement={};GLOBAL.HTMLElement.prototype=DIV["__proto__"];F.ElementExtensions=true}function checkElementPrototypeDeficiency(tagName){if(typeof window.Element==="undefined")return false;if(!HAS_EXTENDED_CREATE_ELEMENT_SYNTAX)return false;var proto=window.Element.prototype;if(proto){var id="_"+(Math.random()+"").slice(2),el=document.createElement(tagName);proto[id]="x";var isBuggy=el[id]!=="x";delete proto[id];el=null;return isBuggy}return false}var HTMLOBJECTELEMENT_PROTOTYPE_BUGGY=checkElementPrototypeDeficiency("object");function extendElementWith(element,methods){for(var property in methods){var value=methods[property];if(Object.isFunction(value)&&!(property in element))element[property]=value.methodize()}}var EXTENDED={};function elementIsExtended(element){var uid=getUniqueElementID(element);return uid in EXTENDED}function extend(element){if(!element||elementIsExtended(element))return element;if(element.nodeType!==Node.ELEMENT_NODE||element==window)return element;var methods=Object.clone(Methods),tagName=element.tagName.toUpperCase();if(ByTag[tagName])Object.extend(methods,ByTag[tagName]);extendElementWith(element,methods);EXTENDED[getUniqueElementID(element)]=true;return element}function extend_IE8(element){if(!element||elementIsExtended(element))return element;var t=element.tagName;if(t&&/^(?:object|applet|embed)$/i.test(t)){extendElementWith(element,Element.Methods);extendElementWith(element,Element.Methods.Simulated);extendElementWith(element,Element.Methods.ByTag[t.toUpperCase()])}return element}if(F.SpecificElementExtensions){extend=HTMLOBJECTELEMENT_PROTOTYPE_BUGGY?extend_IE8:Prototype.K}function addMethodsToTagName(tagName,methods){tagName=tagName.toUpperCase();if(!ByTag[tagName])ByTag[tagName]={};Object.extend(ByTag[tagName],methods)}function mergeMethods(destination,methods,onlyIfAbsent){if(Object.isUndefined(onlyIfAbsent))onlyIfAbsent=false;for(var property in methods){var value=methods[property];if(!Object.isFunction(value))continue;if(!onlyIfAbsent||!(property in destination))destination[property]=value.methodize()}}function findDOMClass(tagName){var klass;var trans={OPTGROUP:"OptGroup",TEXTAREA:"TextArea",P:"Paragraph",FIELDSET:"FieldSet",UL:"UList",OL:"OList",DL:"DList",DIR:"Directory",H1:"Heading",H2:"Heading",H3:"Heading",H4:"Heading",H5:"Heading",H6:"Heading",Q:"Quote",INS:"Mod",DEL:"Mod",A:"Anchor",IMG:"Image",CAPTION:"TableCaption",COL:"TableCol",COLGROUP:"TableCol",THEAD:"TableSection",TFOOT:"TableSection",TBODY:"TableSection",TR:"TableRow",TH:"TableCell",TD:"TableCell",FRAMESET:"FrameSet",IFRAME:"IFrame"};if(trans[tagName])klass="HTML"+trans[tagName]+"Element";if(window[klass])return window[klass];klass="HTML"+tagName+"Element";if(window[klass])return window[klass];klass="HTML"+tagName.capitalize()+"Element";if(window[klass])return window[klass];var element=document.createElement(tagName),proto=element["__proto__"]||element.constructor.prototype;element=null;return proto}function addMethods(methods){if(arguments.length===0)addFormMethods();if(arguments.length===2){var tagName=methods;methods=arguments[1]}if(!tagName){Object.extend(Element.Methods,methods||{})}else{if(Object.isArray(tagName)){for(var i=0,tag;tag=tagName[i];i++)addMethodsToTagName(tag,methods)}else{addMethodsToTagName(tagName,methods)}}var ELEMENT_PROTOTYPE=window.HTMLElement?HTMLElement.prototype:Element.prototype;if(F.ElementExtensions){mergeMethods(ELEMENT_PROTOTYPE,Element.Methods);mergeMethods(ELEMENT_PROTOTYPE,Element.Methods.Simulated,true)}if(F.SpecificElementExtensions){for(var tag in Element.Methods.ByTag){var klass=findDOMClass(tag);if(Object.isUndefined(klass))continue;mergeMethods(klass.prototype,ByTag[tag])}}Object.extend(Element,Element.Methods);Object.extend(Element,Element.Methods.Simulated);delete Element.ByTag;delete Element.Simulated;Element.extend.refresh();ELEMENT_CACHE={}}Object.extend(GLOBAL.Element,{extend:extend,addMethods:addMethods});if(extend===Prototype.K){GLOBAL.Element.extend.refresh=Prototype.emptyFunction}else{GLOBAL.Element.extend.refresh=function(){if(Prototype.BrowserFeatures.ElementExtensions)return;Object.extend(Methods,Element.Methods);Object.extend(Methods,Element.Methods.Simulated);EXTENDED={}}}function addFormMethods(){Object.extend(Form,Form.Methods);Object.extend(Form.Element,Form.Element.Methods);Object.extend(Element.Methods.ByTag,{FORM:Object.clone(Form.Methods),INPUT:Object.clone(Form.Element.Methods),SELECT:Object.clone(Form.Element.Methods),TEXTAREA:Object.clone(Form.Element.Methods),BUTTON:Object.clone(Form.Element.Methods)})}Element.addMethods(methods);function destroyCache_IE(){DIV=null;ELEMENT_CACHE=null}if(window.attachEvent)window.attachEvent("onunload",destroyCache_IE)})(this);(function(){function toDecimal(pctString){var match=pctString.match(/^(\d+)%?$/i);if(!match)return null;return Number(match[1])/100}function getRawStyle(element,style){element=$(element);var value=element.style[style];if(!value||value==="auto"){var css=document.defaultView.getComputedStyle(element,null);value=css?css[style]:null}if(style==="opacity")return value?parseFloat(value):1;return value==="auto"?null:value}function getRawStyle_IE(element,style){var value=element.style[style];if(!value&&element.currentStyle){value=element.currentStyle[style]}return value}function getContentWidth(element,context){var boxWidth=element.offsetWidth;var bl=getPixelValue(element,"borderLeftWidth",context)||0;var br=getPixelValue(element,"borderRightWidth",context)||0;var pl=getPixelValue(element,"paddingLeft",context)||0;var pr=getPixelValue(element,"paddingRight",context)||0;return boxWidth-bl-br-pl-pr}if("currentStyle"in document.documentElement){getRawStyle=getRawStyle_IE}function getPixelValue(value,property,context){var element=null;if(Object.isElement(value)){element=value;value=getRawStyle(element,property)}if(value===null||Object.isUndefined(value)){return null}if(/^(?:-)?\d+(\.\d+)?(px)?$/i.test(value)){return window.parseFloat(value)}var isPercentage=value.include("%"),isViewport=context===document.viewport;if(/\d/.test(value)&&element&&element.runtimeStyle&&!(isPercentage&&isViewport)){var style=element.style.left,rStyle=element.runtimeStyle.left;element.runtimeStyle.left=element.currentStyle.left;element.style.left=value||0;value=element.style.pixelLeft;element.style.left=style;element.runtimeStyle.left=rStyle;return value}if(element&&isPercentage){context=context||element.parentNode;var decimal=toDecimal(value),whole=null;var isHorizontal=property.include("left")||property.include("right")||property.include("width");var isVertical=property.include("top")||property.include("bottom")||property.include("height");if(context===document.viewport){if(isHorizontal){whole=document.viewport.getWidth()}else if(isVertical){whole=document.viewport.getHeight()}}else{if(isHorizontal){whole=$(context).measure("width")}else if(isVertical){whole=$(context).measure("height")}}return whole===null?0:whole*decimal}return 0}function toCSSPixels(number){if(Object.isString(number)&&number.endsWith("px"))return number;return number+"px"}function isDisplayed(element){while(element&&element.parentNode){var display=element.getStyle("display");if(display==="none"){return false}element=$(element.parentNode)}return true}var hasLayout=Prototype.K;if("currentStyle"in document.documentElement){hasLayout=function(element){if(!element.currentStyle.hasLayout){element.style.zoom=1}return element}}function cssNameFor(key){if(key.include("border"))key=key+"-width";return key.camelize()}Element.Layout=Class.create(Hash,{initialize:function($super,element,preCompute){$super();this.element=$(element);Element.Layout.PROPERTIES.each(function(property){this._set(property,null)},this);if(preCompute){this._preComputing=true;this._begin();Element.Layout.PROPERTIES.each(this._compute,this);this._end();this._preComputing=false}},_set:function(property,value){return Hash.prototype.set.call(this,property,value)},set:function(property,value){throw"Properties of Element.Layout are read-only."},get:function($super,property){var value=$super(property);return value===null?this._compute(property):value},_begin:function(){if(this._isPrepared())return;var element=this.element;if(isDisplayed(element)){this._setPrepared(true);return}var originalStyles={position:element.style.position||"",width:element.style.width||"",visibility:element.style.visibility||"",display:element.style.display||""};element.store("prototype_original_styles",originalStyles);var position=getRawStyle(element,"position"),width=element.offsetWidth;if(width===0||width===null){element.style.display="block";width=element.offsetWidth}var context=position==="fixed"?document.viewport:element.parentNode;var tempStyles={visibility:"hidden",display:"block"};if(position!=="fixed")tempStyles.position="absolute";element.setStyle(tempStyles);var positionedWidth=element.offsetWidth,newWidth;if(width&&positionedWidth===width){newWidth=getContentWidth(element,context)}else if(position==="absolute"||position==="fixed"){newWidth=getContentWidth(element,context)}else{var parent=element.parentNode,pLayout=$(parent).getLayout();newWidth=pLayout.get("width")-this.get("margin-left")-this.get("border-left")-this.get("padding-left")-this.get("padding-right")-this.get("border-right")-this.get("margin-right")}element.setStyle({width:newWidth+"px"});this._setPrepared(true)},_end:function(){var element=this.element;var originalStyles=element.retrieve("prototype_original_styles");element.store("prototype_original_styles",null);element.setStyle(originalStyles);this._setPrepared(false)},_compute:function(property){var COMPUTATIONS=Element.Layout.COMPUTATIONS;if(!(property in COMPUTATIONS)){throw"Property not found."}return this._set(property,COMPUTATIONS[property].call(this,this.element))},_isPrepared:function(){return this.element.retrieve("prototype_element_layout_prepared",false)},_setPrepared:function(bool){return this.element.store("prototype_element_layout_prepared",bool)},toObject:function(){var args=$A(arguments);var keys=args.length===0?Element.Layout.PROPERTIES:args.join(" ").split(" ");var obj={};keys.each(function(key){if(!Element.Layout.PROPERTIES.include(key))return;var value=this.get(key);if(value!=null)obj[key]=value},this);return obj},toHash:function(){var obj=this.toObject.apply(this,arguments);return new Hash(obj)},toCSS:function(){var args=$A(arguments);var keys=args.length===0?Element.Layout.PROPERTIES:args.join(" ").split(" ");var css={};keys.each(function(key){if(!Element.Layout.PROPERTIES.include(key))return;if(Element.Layout.COMPOSITE_PROPERTIES.include(key))return;var value=this.get(key);if(value!=null)css[cssNameFor(key)]=value+"px"},this);return css},inspect:function(){return"#"}});Object.extend(Element.Layout,{PROPERTIES:$w("height width top left right bottom border-left border-right border-top border-bottom padding-left padding-right padding-top padding-bottom margin-top margin-bottom margin-left margin-right padding-box-width padding-box-height border-box-width border-box-height margin-box-width margin-box-height"),COMPOSITE_PROPERTIES:$w("padding-box-width padding-box-height margin-box-width margin-box-height border-box-width border-box-height"),COMPUTATIONS:{height:function(element){if(!this._preComputing)this._begin();var bHeight=this.get("border-box-height");if(bHeight<=0){if(!this._preComputing)this._end();return 0}var bTop=this.get("border-top"),bBottom=this.get("border-bottom");var pTop=this.get("padding-top"),pBottom=this.get("padding-bottom");if(!this._preComputing)this._end();return bHeight-bTop-bBottom-pTop-pBottom},width:function(element){if(!this._preComputing)this._begin();var bWidth=this.get("border-box-width");if(bWidth<=0){if(!this._preComputing)this._end();return 0}var bLeft=this.get("border-left"),bRight=this.get("border-right");var pLeft=this.get("padding-left"),pRight=this.get("padding-right");if(!this._preComputing)this._end();return bWidth-bLeft-bRight-pLeft-pRight},"padding-box-height":function(element){var height=this.get("height"),pTop=this.get("padding-top"),pBottom=this.get("padding-bottom");return height+pTop+pBottom},"padding-box-width":function(element){var width=this.get("width"),pLeft=this.get("padding-left"),pRight=this.get("padding-right");return width+pLeft+pRight},"border-box-height":function(element){if(!this._preComputing)this._begin();var height=element.offsetHeight;if(!this._preComputing)this._end();return height},"border-box-width":function(element){if(!this._preComputing)this._begin();var width=element.offsetWidth;if(!this._preComputing)this._end();return width},"margin-box-height":function(element){var bHeight=this.get("border-box-height"),mTop=this.get("margin-top"),mBottom=this.get("margin-bottom");if(bHeight<=0)return 0;return bHeight+mTop+mBottom},"margin-box-width":function(element){var bWidth=this.get("border-box-width"),mLeft=this.get("margin-left"),mRight=this.get("margin-right");if(bWidth<=0)return 0;return bWidth+mLeft+mRight},top:function(element){var offset=element.positionedOffset();return offset.top},bottom:function(element){var offset=element.positionedOffset(),parent=element.getOffsetParent(),pHeight=parent.measure("height");var mHeight=this.get("border-box-height");return pHeight-mHeight-offset.top},left:function(element){var offset=element.positionedOffset();return offset.left},right:function(element){var offset=element.positionedOffset(),parent=element.getOffsetParent(),pWidth=parent.measure("width");var mWidth=this.get("border-box-width");return pWidth-mWidth-offset.left},"padding-top":function(element){return getPixelValue(element,"paddingTop")},"padding-bottom":function(element){return getPixelValue(element,"paddingBottom")},"padding-left":function(element){return getPixelValue(element,"paddingLeft")},"padding-right":function(element){return getPixelValue(element,"paddingRight")},"border-top":function(element){return getPixelValue(element,"borderTopWidth")},"border-bottom":function(element){return getPixelValue(element,"borderBottomWidth")},"border-left":function(element){return getPixelValue(element,"borderLeftWidth")},"border-right":function(element){return getPixelValue(element,"borderRightWidth")},"margin-top":function(element){return getPixelValue(element,"marginTop")},"margin-bottom":function(element){return getPixelValue(element,"marginBottom")},"margin-left":function(element){return getPixelValue(element,"marginLeft")},"margin-right":function(element){return getPixelValue(element,"marginRight")}}});if("getBoundingClientRect"in document.documentElement){Object.extend(Element.Layout.COMPUTATIONS,{right:function(element){var parent=hasLayout(element.getOffsetParent());var rect=element.getBoundingClientRect(),pRect=parent.getBoundingClientRect();return(pRect.right-rect.right).round()},bottom:function(element){var parent=hasLayout(element.getOffsetParent());var rect=element.getBoundingClientRect(),pRect=parent.getBoundingClientRect();return(pRect.bottom-rect.bottom).round()}})}Element.Offset=Class.create({initialize:function(left,top){this.left=left.round();this.top=top.round();this[0]=this.left;this[1]=this.top},relativeTo:function(offset){return new Element.Offset(this.left-offset.left,this.top-offset.top)},inspect:function(){return"#".interpolate(this)},toString:function(){return"[#{left}, #{top}]".interpolate(this)},toArray:function(){return[this.left,this.top]}});function getLayout(element,preCompute){return new Element.Layout(element,preCompute)}function measure(element,property){return $(element).getLayout().get(property)}function getHeight(element){return Element.getDimensions(element).height}function getWidth(element){return Element.getDimensions(element).width}function getDimensions(element){element=$(element);var display=Element.getStyle(element,"display");if(display&&display!=="none"){return{width:element.offsetWidth,height:element.offsetHeight}}var style=element.style;var originalStyles={visibility:style.visibility,position:style.position,display:style.display};var newStyles={visibility:"hidden",display:"block"};if(originalStyles.position!=="fixed")newStyles.position="absolute";Element.setStyle(element,newStyles);var dimensions={width:element.offsetWidth,height:element.offsetHeight};Element.setStyle(element,originalStyles);return dimensions}function getOffsetParent(element){element=$(element);if(isDocument(element)||isDetached(element)||isBody(element)||isHtml(element))return $(document.body);var isInline=Element.getStyle(element,"display")==="inline";if(!isInline&&element.offsetParent)return $(element.offsetParent);while((element=element.parentNode)&&element!==document.body){if(Element.getStyle(element,"position")!=="static"){return isHtml(element)?$(document.body):$(element)}}return $(document.body)}function cumulativeOffset(element){element=$(element);var valueT=0,valueL=0;if(element.parentNode){do{valueT+=element.offsetTop||0;valueL+=element.offsetLeft||0;element=element.offsetParent}while(element)}return new Element.Offset(valueL,valueT)}function positionedOffset(element){element=$(element);var layout=element.getLayout();var valueT=0,valueL=0;do{valueT+=element.offsetTop||0;valueL+=element.offsetLeft||0;element=element.offsetParent;if(element){if(isBody(element))break;var p=Element.getStyle(element,"position");if(p!=="static")break}}while(element);valueL-=layout.get("margin-top");valueT-=layout.get("margin-left");return new Element.Offset(valueL,valueT)}function cumulativeScrollOffset(element){var valueT=0,valueL=0;do{if(element===document.body){var bodyScrollNode=document.documentElement||document.body.parentNode||document.body;valueT+=!Object.isUndefined(window.pageYOffset)?window.pageYOffset:bodyScrollNode.scrollTop||0;valueL+=!Object.isUndefined(window.pageXOffset)?window.pageXOffset:bodyScrollNode.scrollLeft||0;break}else{valueT+=element.scrollTop||0;valueL+=element.scrollLeft||0;element=element.parentNode}}while(element);return new Element.Offset(valueL,valueT)}function viewportOffset(forElement){var valueT=0,valueL=0,docBody=document.body;forElement=$(forElement);var element=forElement;do{valueT+=element.offsetTop||0;valueL+=element.offsetLeft||0;if(element.offsetParent==docBody&&Element.getStyle(element,"position")=="absolute")break}while(element=element.offsetParent);element=forElement;do{if(element!=docBody){valueT-=element.scrollTop||0;valueL-=element.scrollLeft||0}}while(element=element.parentNode);return new Element.Offset(valueL,valueT)}function absolutize(element){element=$(element);if(Element.getStyle(element,"position")==="absolute"){return element}var offsetParent=getOffsetParent(element);var eOffset=element.viewportOffset(),pOffset=offsetParent.viewportOffset();var offset=eOffset.relativeTo(pOffset);var layout=element.getLayout();element.store("prototype_absolutize_original_styles",{position:element.getStyle("position"),left:element.getStyle("left"),top:element.getStyle("top"),width:element.getStyle("width"),height:element.getStyle("height")});element.setStyle({position:"absolute",top:offset.top+"px",left:offset.left+"px",width:layout.get("width")+"px",height:layout.get("height")+"px"});return element}function relativize(element){element=$(element);if(Element.getStyle(element,"position")==="relative"){return element}var originalStyles=element.retrieve("prototype_absolutize_original_styles");if(originalStyles)element.setStyle(originalStyles);return element}function scrollTo(element){element=$(element);var pos=Element.cumulativeOffset(element);window.scrollTo(pos.left,pos.top);return element}function makePositioned(element){element=$(element);var position=Element.getStyle(element,"position"),styles={};if(position==="static"||!position){styles.position="relative";if(Prototype.Browser.Opera){styles.top=0;styles.left=0}Element.setStyle(element,styles);Element.store(element,"prototype_made_positioned",true)}return element}function undoPositioned(element){element=$(element);var storage=Element.getStorage(element),madePositioned=storage.get("prototype_made_positioned");if(madePositioned){storage.unset("prototype_made_positioned");Element.setStyle(element,{position:"",top:"",bottom:"",left:"",right:""})}return element}function makeClipping(element){element=$(element);var storage=Element.getStorage(element),madeClipping=storage.get("prototype_made_clipping");if(Object.isUndefined(madeClipping)){var overflow=Element.getStyle(element,"overflow");storage.set("prototype_made_clipping",overflow);if(overflow!=="hidden")element.style.overflow="hidden"}return element}function undoClipping(element){element=$(element);var storage=Element.getStorage(element),overflow=storage.get("prototype_made_clipping");if(!Object.isUndefined(overflow)){storage.unset("prototype_made_clipping");element.style.overflow=overflow||""}return element}function clonePosition(element,source,options){options=Object.extend({setLeft:true,setTop:true,setWidth:true,setHeight:true,offsetTop:0,offsetLeft:0},options||{});source=$(source);element=$(element);var p,delta,layout,styles={};if(options.setLeft||options.setTop){p=Element.viewportOffset(source);delta=[0,0];if(Element.getStyle(element,"position")==="absolute"){var parent=Element.getOffsetParent(element);if(parent!==document.body)delta=Element.viewportOffset(parent)}}if(options.setWidth||options.setHeight){layout=Element.getLayout(source)}if(options.setLeft)styles.left=p[0]-delta[0]+options.offsetLeft+"px";if(options.setTop)styles.top=p[1]-delta[1]+options.offsetTop+"px";if(options.setWidth)styles.width=layout.get("border-box-width")+"px";if(options.setHeight)styles.height=layout.get("border-box-height")+"px";return Element.setStyle(element,styles)}if(Prototype.Browser.IE){getOffsetParent=getOffsetParent.wrap(function(proceed,element){element=$(element);if(isDocument(element)||isDetached(element)||isBody(element)||isHtml(element))return $(document.body);var position=element.getStyle("position");if(position!=="static")return proceed(element);element.setStyle({position:"relative"});var value=proceed(element);element.setStyle({position:position});return value});positionedOffset=positionedOffset.wrap(function(proceed,element){element=$(element);if(!element.parentNode)return new Element.Offset(0,0);var position=element.getStyle("position"); +Math.crossProduct = function(x, y){ + [ + x[1]*y[2]-x[2]*y[1], + x[2]*y[0]-x[0]*y[2], + x[0]*y[1]-x[1]*y[0] + ] +} -if(position!=="static")return proceed(element);var offsetParent=element.getOffsetParent();if(offsetParent&&offsetParent.getStyle("position")==="fixed")hasLayout(offsetParent);element.setStyle({position:"relative"});var value=proceed(element);element.setStyle({position:position});return value})}else if(Prototype.Browser.Webkit){cumulativeOffset=function(element){element=$(element);var valueT=0,valueL=0;do{valueT+=element.offsetTop||0;valueL+=element.offsetLeft||0;if(element.offsetParent==document.body){if(Element.getStyle(element,"position")=="absolute")break}element=element.offsetParent}while(element);return new Element.Offset(valueL,valueT)}}Element.addMethods({getLayout:getLayout,measure:measure,getWidth:getWidth,getHeight:getHeight,getDimensions:getDimensions,getOffsetParent:getOffsetParent,cumulativeOffset:cumulativeOffset,positionedOffset:positionedOffset,cumulativeScrollOffset:cumulativeScrollOffset,viewportOffset:viewportOffset,absolutize:absolutize,relativize:relativize,scrollTo:scrollTo,makePositioned:makePositioned,undoPositioned:undoPositioned,makeClipping:makeClipping,undoClipping:undoClipping,clonePosition:clonePosition});function isBody(element){return element.nodeName.toUpperCase()==="BODY"}function isHtml(element){return element.nodeName.toUpperCase()==="HTML"}function isDocument(element){return element.nodeType===Node.DOCUMENT_NODE}function isDetached(element){return element!==document.body&&!Element.descendantOf(element,document.body)}if("getBoundingClientRect"in document.documentElement){Element.addMethods({viewportOffset:function(element){element=$(element);if(isDetached(element))return new Element.Offset(0,0);var rect=element.getBoundingClientRect(),docEl=document.documentElement;return new Element.Offset(rect.left-docEl.clientLeft,rect.top-docEl.clientTop)}})}})();(function(){var IS_OLD_OPERA=Prototype.Browser.Opera&&window.parseFloat(window.opera.version())<9.5;var ROOT=null;function getRootElement(){if(ROOT)return ROOT;ROOT=IS_OLD_OPERA?document.body:document.documentElement;return ROOT}function getDimensions(){return{width:this.getWidth(),height:this.getHeight()}}function getWidth(){return getRootElement().clientWidth}function getHeight(){return getRootElement().clientHeight}function getScrollOffsets(){var x=window.pageXOffset||document.documentElement.scrollLeft||document.body.scrollLeft;var y=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop;return new Element.Offset(x,y)}document.viewport={getDimensions:getDimensions,getWidth:getWidth,getHeight:getHeight,getScrollOffsets:getScrollOffsets}})();window.$$=function(){var expression=$A(arguments).join(", ");return Prototype.Selector.select(expression,document)};Prototype.Selector=function(){function select(){throw new Error('Method "Prototype.Selector.select" must be defined.')}function match(){throw new Error('Method "Prototype.Selector.match" must be defined.')}function find(elements,expression,index){index=index||0;var match=Prototype.Selector.match,length=elements.length,matchIndex=0,i;for(i=0;i+~]|"+whitespace+")"+whitespace+"*"),rattributeQuotes=new RegExp("="+whitespace+"*([^\\]'\"]*?)"+whitespace+"*\\]","g"),rpseudo=new RegExp(pseudos),ridentifier=new RegExp("^"+identifier+"$"),matchExpr={ID:new RegExp("^#("+characterEncoding+")"),CLASS:new RegExp("^\\.("+characterEncoding+")"),TAG:new RegExp("^("+characterEncoding.replace("w","w*")+")"),ATTR:new RegExp("^"+attributes),PSEUDO:new RegExp("^"+pseudos),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+whitespace+"*(even|odd|(([+-]|)(\\d*)n|)"+whitespace+"*(?:([+-]|)"+whitespace+"*(\\d+)|))"+whitespace+"*\\)|)","i"),bool:new RegExp("^(?:"+booleans+")$","i"),needsContext:new RegExp("^"+whitespace+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+whitespace+"*((?:-\\d)?\\d*)"+whitespace+"*\\)|)(?=[^-]|$)","i")},rinputs=/^(?:input|select|textarea|button)$/i,rheader=/^h\d$/i,rnative=/^[^{]+\{\s*\[native \w/,rquickExpr=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,rsibling=/[+~]/,rescape=/'|\\/g,runescape=new RegExp("\\\\([\\da-f]{1,6}"+whitespace+"?|("+whitespace+")|.)","ig"),funescape=function(_,escaped,escapedWhitespace){var high="0x"+escaped-65536;return high!==high||escapedWhitespace?escaped:high<0?String.fromCharCode(high+65536):String.fromCharCode(high>>10|55296,high&1023|56320)};try{push.apply(arr=slice.call(preferredDoc.childNodes),preferredDoc.childNodes);arr[preferredDoc.childNodes.length].nodeType}catch(e){push={apply:arr.length?function(target,els){push_native.apply(target,slice.call(els))}:function(target,els){var j=target.length,i=0;while(target[j++]=els[i++]){}target.length=j-1}}}function Sizzle(selector,context,results,seed){var match,elem,m,nodeType,i,groups,old,nid,newContext,newSelector;if((context?context.ownerDocument||context:preferredDoc)!==document){setDocument(context)}context=context||document;results=results||[];if(!selector||typeof selector!=="string"){return results}if((nodeType=context.nodeType)!==1&&nodeType!==9){return[]}if(documentIsHTML&&!seed){if(match=rquickExpr.exec(selector)){if(m=match[1]){if(nodeType===9){elem=context.getElementById(m);if(elem&&elem.parentNode){if(elem.id===m){results.push(elem);return results}}else{return results}}else{if(context.ownerDocument&&(elem=context.ownerDocument.getElementById(m))&&contains(context,elem)&&elem.id===m){results.push(elem);return results}}}else if(match[2]){push.apply(results,context.getElementsByTagName(selector));return results}else if((m=match[3])&&support.getElementsByClassName&&context.getElementsByClassName){push.apply(results,context.getElementsByClassName(m));return results}}if(support.qsa&&(!rbuggyQSA||!rbuggyQSA.test(selector))){nid=old=expando;newContext=context;newSelector=nodeType===9&&selector;if(nodeType===1&&context.nodeName.toLowerCase()!=="object"){groups=tokenize(selector);if(old=context.getAttribute("id")){nid=old.replace(rescape,"\\$&")}else{context.setAttribute("id",nid)}nid="[id='"+nid+"'] ";i=groups.length;while(i--){groups[i]=nid+toSelector(groups[i])}newContext=rsibling.test(selector)&&testContext(context.parentNode)||context;newSelector=groups.join(",")}if(newSelector){try{push.apply(results,newContext.querySelectorAll(newSelector));return results}catch(qsaError){}finally{if(!old){context.removeAttribute("id")}}}}}return select(selector.replace(rtrim,"$1"),context,results,seed)}function createCache(){var keys=[];function cache(key,value){if(keys.push(key+" ")>Expr.cacheLength){delete cache[keys.shift()]}return cache[key+" "]=value}return cache}function markFunction(fn){fn[expando]=true;return fn}function assert(fn){var div=document.createElement("div");try{return!!fn(div)}catch(e){return false}finally{if(div.parentNode){div.parentNode.removeChild(div)}div=null}}function addHandle(attrs,handler){var arr=attrs.split("|"),i=attrs.length;while(i--){Expr.attrHandle[arr[i]]=handler}}function siblingCheck(a,b){var cur=b&&a,diff=cur&&a.nodeType===1&&b.nodeType===1&&(~b.sourceIndex||MAX_NEGATIVE)-(~a.sourceIndex||MAX_NEGATIVE);if(diff){return diff}if(cur){while(cur=cur.nextSibling){if(cur===b){return-1}}}return a?1:-1}function createInputPseudo(type){return function(elem){var name=elem.nodeName.toLowerCase();return name==="input"&&elem.type===type}}function createButtonPseudo(type){return function(elem){var name=elem.nodeName.toLowerCase();return(name==="input"||name==="button")&&elem.type===type}}function createPositionalPseudo(fn){return markFunction(function(argument){argument=+argument;return markFunction(function(seed,matches){var j,matchIndexes=fn([],seed.length,argument),i=matchIndexes.length;while(i--){if(seed[j=matchIndexes[i]]){seed[j]=!(matches[j]=seed[j])}}})})}function testContext(context){return context&&typeof context.getElementsByTagName!==strundefined&&context}support=Sizzle.support={};isXML=Sizzle.isXML=function(elem){var documentElement=elem&&(elem.ownerDocument||elem).documentElement;return documentElement?documentElement.nodeName!=="HTML":false};setDocument=Sizzle.setDocument=function(node){var hasCompare,doc=node?node.ownerDocument||node:preferredDoc,parent=doc.defaultView;if(doc===document||doc.nodeType!==9||!doc.documentElement){return document}document=doc;docElem=doc.documentElement;documentIsHTML=!isXML(doc);if(parent&&parent!==parent.top){if(parent.addEventListener){parent.addEventListener("unload",function(){setDocument()},false)}else if(parent.attachEvent){parent.attachEvent("onunload",function(){setDocument()})}}support.attributes=assert(function(div){div.className="i";return!div.getAttribute("className")});support.getElementsByTagName=assert(function(div){div.appendChild(doc.createComment(""));return!div.getElementsByTagName("*").length});support.getElementsByClassName=rnative.test(doc.getElementsByClassName)&&assert(function(div){div.innerHTML="
    ";div.firstChild.className="i";return div.getElementsByClassName("i").length===2});support.getById=assert(function(div){docElem.appendChild(div).id=expando;return!doc.getElementsByName||!doc.getElementsByName(expando).length});if(support.getById){Expr.find["ID"]=function(id,context){if(typeof context.getElementById!==strundefined&&documentIsHTML){var m=context.getElementById(id);return m&&m.parentNode?[m]:[]}};Expr.filter["ID"]=function(id){var attrId=id.replace(runescape,funescape);return function(elem){return elem.getAttribute("id")===attrId}}}else{delete Expr.find["ID"];Expr.filter["ID"]=function(id){var attrId=id.replace(runescape,funescape);return function(elem){var node=typeof elem.getAttributeNode!==strundefined&&elem.getAttributeNode("id");return node&&node.value===attrId}}}Expr.find["TAG"]=support.getElementsByTagName?function(tag,context){if(typeof context.getElementsByTagName!==strundefined){return context.getElementsByTagName(tag)}}:function(tag,context){var elem,tmp=[],i=0,results=context.getElementsByTagName(tag);if(tag==="*"){while(elem=results[i++]){if(elem.nodeType===1){tmp.push(elem)}}return tmp}return results};Expr.find["CLASS"]=support.getElementsByClassName&&function(className,context){if(typeof context.getElementsByClassName!==strundefined&&documentIsHTML){return context.getElementsByClassName(className)}};rbuggyMatches=[];rbuggyQSA=[];if(support.qsa=rnative.test(doc.querySelectorAll)){assert(function(div){div.innerHTML="";if(div.querySelectorAll("[t^='']").length){rbuggyQSA.push("[*^$]="+whitespace+"*(?:''|\"\")")}if(!div.querySelectorAll("[selected]").length){rbuggyQSA.push("\\["+whitespace+"*(?:value|"+booleans+")")}if(!div.querySelectorAll(":checked").length){rbuggyQSA.push(":checked")}});assert(function(div){var input=doc.createElement("input");input.setAttribute("type","hidden");div.appendChild(input).setAttribute("name","D");if(div.querySelectorAll("[name=d]").length){rbuggyQSA.push("name"+whitespace+"*[*^$|!~]?=")}if(!div.querySelectorAll(":enabled").length){rbuggyQSA.push(":enabled",":disabled")}div.querySelectorAll("*,:x");rbuggyQSA.push(",.*:")})}if(support.matchesSelector=rnative.test(matches=docElem.webkitMatchesSelector||docElem.mozMatchesSelector||docElem.oMatchesSelector||docElem.msMatchesSelector)){assert(function(div){support.disconnectedMatch=matches.call(div,"div");matches.call(div,"[s!='']:x");rbuggyMatches.push("!=",pseudos)})}rbuggyQSA=rbuggyQSA.length&&new RegExp(rbuggyQSA.join("|"));rbuggyMatches=rbuggyMatches.length&&new RegExp(rbuggyMatches.join("|"));hasCompare=rnative.test(docElem.compareDocumentPosition);contains=hasCompare||rnative.test(docElem.contains)?function(a,b){var adown=a.nodeType===9?a.documentElement:a,bup=b&&b.parentNode;return a===bup||!!(bup&&bup.nodeType===1&&(adown.contains?adown.contains(bup):a.compareDocumentPosition&&a.compareDocumentPosition(bup)&16))}:function(a,b){if(b){while(b=b.parentNode){if(b===a){return true}}}return false};sortOrder=hasCompare?function(a,b){if(a===b){hasDuplicate=true;return 0}var compare=!a.compareDocumentPosition-!b.compareDocumentPosition;if(compare){return compare}compare=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1;if(compare&1||!support.sortDetached&&b.compareDocumentPosition(a)===compare){if(a===doc||a.ownerDocument===preferredDoc&&contains(preferredDoc,a)){return-1}if(b===doc||b.ownerDocument===preferredDoc&&contains(preferredDoc,b)){return 1}return sortInput?indexOf.call(sortInput,a)-indexOf.call(sortInput,b):0}return compare&4?-1:1}:function(a,b){if(a===b){hasDuplicate=true;return 0}var cur,i=0,aup=a.parentNode,bup=b.parentNode,ap=[a],bp=[b];if(!aup||!bup){return a===doc?-1:b===doc?1:aup?-1:bup?1:sortInput?indexOf.call(sortInput,a)-indexOf.call(sortInput,b):0}else if(aup===bup){return siblingCheck(a,b)}cur=a;while(cur=cur.parentNode){ap.unshift(cur)}cur=b;while(cur=cur.parentNode){bp.unshift(cur)}while(ap[i]===bp[i]){i++}return i?siblingCheck(ap[i],bp[i]):ap[i]===preferredDoc?-1:bp[i]===preferredDoc?1:0};return doc};Sizzle.matches=function(expr,elements){return Sizzle(expr,null,null,elements)};Sizzle.matchesSelector=function(elem,expr){if((elem.ownerDocument||elem)!==document){setDocument(elem)}expr=expr.replace(rattributeQuotes,"='$1']");if(support.matchesSelector&&documentIsHTML&&(!rbuggyMatches||!rbuggyMatches.test(expr))&&(!rbuggyQSA||!rbuggyQSA.test(expr))){try{var ret=matches.call(elem,expr);if(ret||support.disconnectedMatch||elem.document&&elem.document.nodeType!==11){return ret}}catch(e){}}return Sizzle(expr,document,null,[elem]).length>0};Sizzle.contains=function(context,elem){if((context.ownerDocument||context)!==document){setDocument(context)}return contains(context,elem)};Sizzle.attr=function(elem,name){if((elem.ownerDocument||elem)!==document){setDocument(elem)}var fn=Expr.attrHandle[name.toLowerCase()],val=fn&&hasOwn.call(Expr.attrHandle,name.toLowerCase())?fn(elem,name,!documentIsHTML):undefined;return val!==undefined?val:support.attributes||!documentIsHTML?elem.getAttribute(name):(val=elem.getAttributeNode(name))&&val.specified?val.value:null};Sizzle.error=function(msg){throw new Error("Syntax error, unrecognized expression: "+msg)};Sizzle.uniqueSort=function(results){var elem,duplicates=[],j=0,i=0;hasDuplicate=!support.detectDuplicates;sortInput=!support.sortStable&&results.slice(0);results.sort(sortOrder);if(hasDuplicate){while(elem=results[i++]){if(elem===results[i]){j=duplicates.push(i)}}while(j--){results.splice(duplicates[j],1)}}sortInput=null;return results};getText=Sizzle.getText=function(elem){var node,ret="",i=0,nodeType=elem.nodeType;if(!nodeType){while(node=elem[i++]){ret+=getText(node)}}else if(nodeType===1||nodeType===9||nodeType===11){if(typeof elem.textContent==="string"){return elem.textContent}else{for(elem=elem.firstChild;elem;elem=elem.nextSibling){ret+=getText(elem)}}}else if(nodeType===3||nodeType===4){return elem.nodeValue}return ret};Expr=Sizzle.selectors={cacheLength:50,createPseudo:markFunction,match:matchExpr,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:true}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:true},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(match){match[1]=match[1].replace(runescape,funescape);match[3]=(match[4]||match[5]||"").replace(runescape,funescape);if(match[2]==="~="){match[3]=" "+match[3]+" "}return match.slice(0,4)},CHILD:function(match){match[1]=match[1].toLowerCase();if(match[1].slice(0,3)==="nth"){if(!match[3]){Sizzle.error(match[0])}match[4]=+(match[4]?match[5]+(match[6]||1):2*(match[3]==="even"||match[3]==="odd"));match[5]=+(match[7]+match[8]||match[3]==="odd")}else if(match[3]){Sizzle.error(match[0])}return match},PSEUDO:function(match){var excess,unquoted=!match[5]&&match[2];if(matchExpr["CHILD"].test(match[0])){return null}if(match[3]&&match[4]!==undefined){match[2]=match[4]}else if(unquoted&&rpseudo.test(unquoted)&&(excess=tokenize(unquoted,true))&&(excess=unquoted.indexOf(")",unquoted.length-excess)-unquoted.length)){match[0]=match[0].slice(0,excess);match[2]=unquoted.slice(0,excess)}return match.slice(0,3)}},filter:{TAG:function(nodeNameSelector){var nodeName=nodeNameSelector.replace(runescape,funescape).toLowerCase();return nodeNameSelector==="*"?function(){return true}:function(elem){return elem.nodeName&&elem.nodeName.toLowerCase()===nodeName}},CLASS:function(className){var pattern=classCache[className+" "];return pattern||(pattern=new RegExp("(^|"+whitespace+")"+className+"("+whitespace+"|$)"))&&classCache(className,function(elem){return pattern.test(typeof elem.className==="string"&&elem.className||typeof elem.getAttribute!==strundefined&&elem.getAttribute("class")||"")})},ATTR:function(name,operator,check){return function(elem){var result=Sizzle.attr(elem,name);if(result==null){return operator==="!="}if(!operator){return true}result+="";return operator==="="?result===check:operator==="!="?result!==check:operator==="^="?check&&result.indexOf(check)===0:operator==="*="?check&&result.indexOf(check)>-1:operator==="$="?check&&result.slice(-check.length)===check:operator==="~="?(" "+result+" ").indexOf(check)>-1:operator==="|="?result===check||result.slice(0,check.length+1)===check+"-":false}},CHILD:function(type,what,argument,first,last){var simple=type.slice(0,3)!=="nth",forward=type.slice(-4)!=="last",ofType=what==="of-type";return first===1&&last===0?function(elem){return!!elem.parentNode}:function(elem,context,xml){var cache,outerCache,node,diff,nodeIndex,start,dir=simple!==forward?"nextSibling":"previousSibling",parent=elem.parentNode,name=ofType&&elem.nodeName.toLowerCase(),useCache=!xml&&!ofType;if(parent){if(simple){while(dir){node=elem;while(node=node[dir]){if(ofType?node.nodeName.toLowerCase()===name:node.nodeType===1){return false}}start=dir=type==="only"&&!start&&"nextSibling"}return true}start=[forward?parent.firstChild:parent.lastChild];if(forward&&useCache){outerCache=parent[expando]||(parent[expando]={});cache=outerCache[type]||[];nodeIndex=cache[0]===dirruns&&cache[1];diff=cache[0]===dirruns&&cache[2];node=nodeIndex&&parent.childNodes[nodeIndex];while(node=++nodeIndex&&node&&node[dir]||(diff=nodeIndex=0)||start.pop()){if(node.nodeType===1&&++diff&&node===elem){outerCache[type]=[dirruns,nodeIndex,diff];break}}}else if(useCache&&(cache=(elem[expando]||(elem[expando]={}))[type])&&cache[0]===dirruns){diff=cache[1]}else{while(node=++nodeIndex&&node&&node[dir]||(diff=nodeIndex=0)||start.pop()){if((ofType?node.nodeName.toLowerCase()===name:node.nodeType===1)&&++diff){if(useCache){(node[expando]||(node[expando]={}))[type]=[dirruns,diff]}if(node===elem){break}}}}diff-=last;return diff===first||diff%first===0&&diff/first>=0}}},PSEUDO:function(pseudo,argument){var args,fn=Expr.pseudos[pseudo]||Expr.setFilters[pseudo.toLowerCase()]||Sizzle.error("unsupported pseudo: "+pseudo);if(fn[expando]){return fn(argument)}if(fn.length>1){args=[pseudo,pseudo,"",argument];return Expr.setFilters.hasOwnProperty(pseudo.toLowerCase())?markFunction(function(seed,matches){var idx,matched=fn(seed,argument),i=matched.length;while(i--){idx=indexOf.call(seed,matched[i]);seed[idx]=!(matches[idx]=matched[i])}}):function(elem){return fn(elem,0,args)}}return fn}},pseudos:{not:markFunction(function(selector){var input=[],results=[],matcher=compile(selector.replace(rtrim,"$1"));return matcher[expando]?markFunction(function(seed,matches,context,xml){var elem,unmatched=matcher(seed,null,xml,[]),i=seed.length;while(i--){if(elem=unmatched[i]){seed[i]=!(matches[i]=elem)}}}):function(elem,context,xml){input[0]=elem;matcher(input,null,xml,results);return!results.pop()}}),has:markFunction(function(selector){return function(elem){return Sizzle(selector,elem).length>0}}),contains:markFunction(function(text){return function(elem){return(elem.textContent||elem.innerText||getText(elem)).indexOf(text)>-1}}),lang:markFunction(function(lang){if(!ridentifier.test(lang||"")){Sizzle.error("unsupported lang: "+lang)}lang=lang.replace(runescape,funescape).toLowerCase();return function(elem){var elemLang;do{if(elemLang=documentIsHTML?elem.lang:elem.getAttribute("xml:lang")||elem.getAttribute("lang")){elemLang=elemLang.toLowerCase();return elemLang===lang||elemLang.indexOf(lang+"-")===0}}while((elem=elem.parentNode)&&elem.nodeType===1);return false}}),target:function(elem){var hash=window.location&&window.location.hash;return hash&&hash.slice(1)===elem.id},root:function(elem){return elem===docElem},focus:function(elem){return elem===document.activeElement&&(!document.hasFocus||document.hasFocus())&&!!(elem.type||elem.href||~elem.tabIndex)},enabled:function(elem){return elem.disabled===false},disabled:function(elem){return elem.disabled===true},checked:function(elem){var nodeName=elem.nodeName.toLowerCase();return nodeName==="input"&&!!elem.checked||nodeName==="option"&&!!elem.selected},selected:function(elem){if(elem.parentNode){elem.parentNode.selectedIndex}return elem.selected===true},empty:function(elem){for(elem=elem.firstChild;elem;elem=elem.nextSibling){if(elem.nodeType<6){return false}}return true},parent:function(elem){return!Expr.pseudos["empty"](elem)},header:function(elem){return rheader.test(elem.nodeName)},input:function(elem){return rinputs.test(elem.nodeName)},button:function(elem){var name=elem.nodeName.toLowerCase();return name==="input"&&elem.type==="button"||name==="button"},text:function(elem){var attr;return elem.nodeName.toLowerCase()==="input"&&elem.type==="text"&&((attr=elem.getAttribute("type"))==null||attr.toLowerCase()==="text")},first:createPositionalPseudo(function(){return[0]}),last:createPositionalPseudo(function(matchIndexes,length){return[length-1]}),eq:createPositionalPseudo(function(matchIndexes,length,argument){return[argument<0?argument+length:argument]}),even:createPositionalPseudo(function(matchIndexes,length){var i=0;for(;i=0;){matchIndexes.push(i)}return matchIndexes}),gt:createPositionalPseudo(function(matchIndexes,length,argument){var i=argument<0?argument+length:argument;for(;++i1?function(elem,context,xml){var i=matchers.length;while(i--){if(!matchers[i](elem,context,xml)){return false}}return true}:matchers[0]}function multipleContexts(selector,contexts,results){var i=0,len=contexts.length;for(;i-1){seed[temp]=!(results[temp]=elem)}}}}else{matcherOut=condense(matcherOut===results?matcherOut.splice(preexisting,matcherOut.length):matcherOut);if(postFinder){postFinder(null,results,matcherOut,xml)}else{push.apply(results,matcherOut)}}})}function matcherFromTokens(tokens){var checkContext,matcher,j,len=tokens.length,leadingRelative=Expr.relative[tokens[0].type],implicitRelative=leadingRelative||Expr.relative[" "],i=leadingRelative?1:0,matchContext=addCombinator(function(elem){return elem===checkContext},implicitRelative,true),matchAnyContext=addCombinator(function(elem){return indexOf.call(checkContext,elem)>-1},implicitRelative,true),matchers=[function(elem,context,xml){return!leadingRelative&&(xml||context!==outermostContext)||((checkContext=context).nodeType?matchContext(elem,context,xml):matchAnyContext(elem,context,xml))}];for(;i1&&elementMatcher(matchers),i>1&&toSelector(tokens.slice(0,i-1).concat({value:tokens[i-2].type===" "?"*":""})).replace(rtrim,"$1"),matcher,i0,byElement=elementMatchers.length>0,superMatcher=function(seed,context,xml,results,outermost){var elem,j,matcher,matchedCount=0,i="0",unmatched=seed&&[],setMatched=[],contextBackup=outermostContext,elems=seed||byElement&&Expr.find["TAG"]("*",outermost),dirrunsUnique=dirruns+=contextBackup==null?1:Math.random()||.1,len=elems.length;if(outermost){outermostContext=context!==document&&context}for(;i!==len&&(elem=elems[i])!=null;i++){if(byElement&&elem){j=0;while(matcher=elementMatchers[j++]){if(matcher(elem,context,xml)){results.push(elem);break}}if(outermost){dirruns=dirrunsUnique}}if(bySet){if(elem=!matcher&&elem){matchedCount--}if(seed){unmatched.push(elem)}}}matchedCount+=i;if(bySet&&i!==matchedCount){j=0;while(matcher=setMatchers[j++]){matcher(unmatched,setMatched,context,xml)}if(seed){if(matchedCount>0){while(i--){if(!(unmatched[i]||setMatched[i])){setMatched[i]=pop.call(results)}}}setMatched=condense(setMatched)}push.apply(results,setMatched);if(outermost&&!seed&&setMatched.length>0&&matchedCount+setMatchers.length>1){Sizzle.uniqueSort(results)}}if(outermost){dirruns=dirrunsUnique;outermostContext=contextBackup}return unmatched};return bySet?markFunction(superMatcher):superMatcher}compile=Sizzle.compile=function(selector,match){var i,setMatchers=[],elementMatchers=[],cached=compilerCache[selector+" "];if(!cached){if(!match){match=tokenize(selector)}i=match.length;while(i--){cached=matcherFromTokens(match[i]);if(cached[expando]){setMatchers.push(cached)}else{elementMatchers.push(cached)}}cached=compilerCache(selector,matcherFromGroupMatchers(elementMatchers,setMatchers));cached.selector=selector}return cached};select=Sizzle.select=function(selector,context,results,seed){var i,tokens,token,type,find,compiled=typeof selector==="function"&&selector,match=!seed&&tokenize(selector=compiled.selector||selector);results=results||[];if(match.length===1){tokens=match[0]=match[0].slice(0);if(tokens.length>2&&(token=tokens[0]).type==="ID"&&support.getById&&context.nodeType===9&&documentIsHTML&&Expr.relative[tokens[1].type]){context=(Expr.find["ID"](token.matches[0].replace(runescape,funescape),context)||[])[0];if(!context){return results}else if(compiled){context=context.parentNode}selector=selector.slice(tokens.shift().value.length)}i=matchExpr["needsContext"].test(selector)?0:tokens.length;while(i--){token=tokens[i];if(Expr.relative[type=token.type]){break}if(find=Expr.find[type]){if(seed=find(token.matches[0].replace(runescape,funescape),rsibling.test(tokens[0].type)&&testContext(context.parentNode)||context)){ -tokens.splice(i,1);selector=seed.length&&toSelector(tokens);if(!selector){push.apply(results,seed);return results}break}}}}(compiled||compile(selector,match))(seed,context,!documentIsHTML,results,rsibling.test(selector)&&testContext(context.parentNode)||context);return results};support.sortStable=expando.split("").sort(sortOrder).join("")===expando;support.detectDuplicates=!!hasDuplicate;setDocument();support.sortDetached=assert(function(div1){return div1.compareDocumentPosition(document.createElement("div"))&1});if(!assert(function(div){div.innerHTML="";return div.firstChild.getAttribute("href")==="#"})){addHandle("type|href|height|width",function(elem,name,isXML){if(!isXML){return elem.getAttribute(name,name.toLowerCase()==="type"?1:2)}})}if(!support.attributes||!assert(function(div){div.innerHTML="";div.firstChild.setAttribute("value","");return div.firstChild.getAttribute("value")===""})){addHandle("value",function(elem,name,isXML){if(!isXML&&elem.nodeName.toLowerCase()==="input"){return elem.defaultValue}})}if(!assert(function(div){return div.getAttribute("disabled")==null})){addHandle(booleans,function(elem,name,isXML){var val;if(!isXML){return elem[name]===true?name.toLowerCase():(val=elem.getAttributeNode(name))&&val.specified?val.value:null}})}if(typeof define==="function"&&define.amd){define(function(){return Sizzle})}else if(typeof module!=="undefined"&&module.exports){module.exports=Sizzle}else{window.Sizzle=Sizzle}})(window);(function(engine){var extendElements=Prototype.Selector.extendElements;function select(selector,scope){return extendElements(engine(selector,scope||document))}function match(element,selector){return engine.matches(selector,[element]).length==1}Prototype.Selector.engine=engine;Prototype.Selector.select=select;Prototype.Selector.match=match})(Sizzle);window.Sizzle=Prototype._original_property;delete Prototype._original_property;var Form={reset:function(form){form=$(form);form.reset();return form},serializeElements:function(elements,options){if(typeof options!="object")options={hash:!!options};else if(Object.isUndefined(options.hash))options.hash=true;var key,value,submitted=false,submit=options.submit,accumulator,initial;if(options.hash){initial={};accumulator=function(result,key,value){if(key in result){if(!Object.isArray(result[key]))result[key]=[result[key]];result[key]=result[key].concat(value)}else result[key]=value;return result}}else{initial="";accumulator=function(result,key,values){if(!Object.isArray(values)){values=[values]}if(!values.length){return result}var encodedKey=encodeURIComponent(key).gsub(/%20/,"+");return result+(result?"&":"")+values.map(function(value){value=value.gsub(/(\r)?\n/,"\r\n");value=encodeURIComponent(value);value=value.gsub(/%20/,"+");return encodedKey+"="+value}).join("&")}}return elements.inject(initial,function(result,element){if(!element.disabled&&element.name){key=element.name;value=$(element).getValue();if(value!=null&&element.type!="file"&&(element.type!="submit"||!submitted&&submit!==false&&(!submit||key==submit)&&(submitted=true))){result=accumulator(result,key,value)}}return result})}};Form.Methods={serialize:function(form,options){return Form.serializeElements(Form.getElements(form),options)},getElements:function(form){var elements=$(form).getElementsByTagName("*");var element,results=[],serializers=Form.Element.Serializers;for(var i=0;element=elements[i];i++){if(serializers[element.tagName.toLowerCase()])results.push(Element.extend(element))}return results},getInputs:function(form,typeName,name){form=$(form);var inputs=form.getElementsByTagName("input");if(!typeName&&!name)return $A(inputs).map(Element.extend);for(var i=0,matchingInputs=[],length=inputs.length;i=0}).sortBy(function(element){return element.tabIndex}).first();return firstByIndex?firstByIndex:elements.find(function(element){return/^(?:input|select|textarea)$/i.test(element.tagName)})},focusFirstElement:function(form){form=$(form);var element=form.findFirstElement();if(element)element.activate();return form},request:function(form,options){form=$(form),options=Object.clone(options||{});var params=options.parameters,action=form.readAttribute("action")||"";if(action.blank())action=window.location.href;options.parameters=form.serialize(true);if(params){if(Object.isString(params))params=params.toQueryParams();Object.extend(options.parameters,params)}if(form.hasAttribute("method")&&!options.method)options.method=form.method;return new Ajax.Request(action,options)}};Form.Element={focus:function(element){$(element).focus();return element},select:function(element){$(element).select();return element}};Form.Element.Methods={serialize:function(element){element=$(element);if(!element.disabled&&element.name){var value=element.getValue();if(value!=undefined){var pair={};pair[element.name]=value;return Object.toQueryString(pair)}}return""},getValue:function(element){element=$(element);var method=element.tagName.toLowerCase();return Form.Element.Serializers[method](element)},setValue:function(element,value){element=$(element);var method=element.tagName.toLowerCase();Form.Element.Serializers[method](element,value);return element},clear:function(element){$(element).value="";return element},present:function(element){return $(element).value!=""},activate:function(element){element=$(element);try{element.focus();if(element.select&&(element.tagName.toLowerCase()!="input"||!/^(?:button|reset|submit)$/i.test(element.type)))element.select()}catch(e){}return element},disable:function(element){element=$(element);element.disabled=true;return element},enable:function(element){element=$(element);element.disabled=false;return element}};var Field=Form.Element;var $F=Form.Element.Methods.getValue;Form.Element.Serializers=function(){function input(element,value){switch(element.type.toLowerCase()){case"checkbox":case"radio":return inputSelector(element,value);default:return valueSelector(element,value)}}function inputSelector(element,value){if(Object.isUndefined(value))return element.checked?element.value:null;else element.checked=!!value}function valueSelector(element,value){if(Object.isUndefined(value))return element.value;else element.value=value}function select(element,value){if(Object.isUndefined(value))return(element.type==="select-one"?selectOne:selectMany)(element);var opt,currentValue,single=!Object.isArray(value);for(var i=0,length=element.length;i=0?optionValue(element.options[index]):null}function selectMany(element){var values,length=element.length;if(!length)return null;for(var i=0,values=[];i=this.offset[1]&&y=this.offset[0]&&x=this.offset[1]&&this.ycomp=this.offset[0]&&this.xcomp0})._each(iterator,context)},set:function(className){this.element.className=className},add:function(classNameToAdd){if(this.include(classNameToAdd))return;this.set($A(this).concat(classNameToAdd).join(" "))},remove:function(classNameToRemove){if(!this.include(classNameToRemove))return;this.set($A(this).without(classNameToRemove).join(" "))},toString:function(){return $A(this).join(" ")}};Object.extend(Element.ClassNames.prototype,Enumerable);(function(){window.Selector=Class.create({initialize:function(expression){this.expression=expression.strip()},findElements:function(rootElement){return Prototype.Selector.select(this.expression,rootElement)},match:function(element){return Prototype.Selector.match(element,this.expression)},toString:function(){return this.expression},inspect:function(){return"#"}});Object.extend(Selector,{matchElements:function(elements,expression){var match=Prototype.Selector.match,results=[];for(var i=0,length=elements.length;i=y;y++)if(l=Math.sin(h),m=Math.tan(h),r=m*Math.sqrt(1-t*l*l),c=Math.sin(2*h),u=i*h-s*c+e*Math.sin(4*h)-o*Math.sin(6*h),d=i-2*s*Math.cos(2*h)+4*e*Math.cos(4*h)-6*o*Math.cos(6*h),p=2*u+r*(u*u+a)-2*n*(r*u+1),_=t*c*(u*u+a-2*n*u)/(2*r),f=2*(n-u)*(r*d-2/c)-2*d,P=p/(_+f),h+=P,1e-10>=Math.abs(P))return h;return Proj4js.reportError("phi4z: No convergence"),null}function e4fn(t){var i,s;return i=1+t,s=1-t,Math.sqrt(Math.pow(i,i)*Math.pow(s,s))}var Proj4js={defaultDatum:"WGS84",transform:function(t,i,s){if(!t.readyToUse)return this.reportError("Proj4js initialization for:"+t.srsCode+" not yet complete"),s;if(!i.readyToUse)return this.reportError("Proj4js initialization for:"+i.srsCode+" not yet complete"),s;if(t.datum&&i.datum&&((t.datum.datum_type==Proj4js.common.PJD_3PARAM||t.datum.datum_type==Proj4js.common.PJD_7PARAM)&&"WGS84"!=i.datumCode||(i.datum.datum_type==Proj4js.common.PJD_3PARAM||i.datum.datum_type==Proj4js.common.PJD_7PARAM)&&"WGS84"!=t.datumCode)){var e=Proj4js.WGS84;this.transform(t,e,s),t=e}return"enu"!=t.axis&&this.adjust_axis(t,!1,s),"longlat"==t.projName?(s.x*=Proj4js.common.D2R,s.y*=Proj4js.common.D2R):(t.to_meter&&(s.x*=t.to_meter,s.y*=t.to_meter),t.inverse(s)),t.from_greenwich&&(s.x+=t.from_greenwich),s=this.datum_transform(t.datum,i.datum,s),i.from_greenwich&&(s.x-=i.from_greenwich),"longlat"==i.projName?(s.x*=Proj4js.common.R2D,s.y*=Proj4js.common.R2D):(i.forward(s),i.to_meter&&(s.x/=i.to_meter,s.y/=i.to_meter)),"enu"!=i.axis&&this.adjust_axis(i,!0,s),s},datum_transform:function(t,i,s){return t.compare_datums(i)?s:t.datum_type==Proj4js.common.PJD_NODATUM||i.datum_type==Proj4js.common.PJD_NODATUM?s:((t.es!=i.es||t.a!=i.a||t.datum_type==Proj4js.common.PJD_3PARAM||t.datum_type==Proj4js.common.PJD_7PARAM||i.datum_type==Proj4js.common.PJD_3PARAM||i.datum_type==Proj4js.common.PJD_7PARAM)&&(t.geodetic_to_geocentric(s),(t.datum_type==Proj4js.common.PJD_3PARAM||t.datum_type==Proj4js.common.PJD_7PARAM)&&t.geocentric_to_wgs84(s),(i.datum_type==Proj4js.common.PJD_3PARAM||i.datum_type==Proj4js.common.PJD_7PARAM)&&i.geocentric_from_wgs84(s),i.geocentric_to_geodetic(s)),s)},adjust_axis:function(t,i,s){for(var e,o,n=s.x,a=s.y,r=s.z||0,h=0;3>h;h++)if(!i||2!=h||void 0!==s.z)switch(0==h?(e=n,o="x"):1==h?(e=a,o="y"):(e=r,o="z"),t.axis[h]){case"e":s[o]=e;break;case"w":s[o]=-e;break;case"n":s[o]=e;break;case"s":s[o]=-e;break;case"u":void 0!==s[o]&&(s.z=e);break;case"d":void 0!==s[o]&&(s.z=-e);break;default:return alert("ERROR: unknow axis ("+t.axis[h]+") - check definition of "+t.projName),null}return s},reportError:function(){},extend:function(t,i){if(t=t||{},i)for(var s in i){var e=i[s];void 0!==e&&(t[s]=e)}return t},Class:function(){for(var t,i=function(){this.initialize.apply(this,arguments)},s={},e=0;arguments.length>e;++e)t="function"==typeof arguments[e]?arguments[e].prototype:arguments[e],Proj4js.extend(s,t);return i.prototype=s,i},bind:function(t,i){var s=Array.prototype.slice.apply(arguments,[2]);return function(){var e=s.concat(Array.prototype.slice.apply(arguments,[0])); +Math.sign = Math.sign || function(x) { + x = +x; // convert to a number + if (x === 0 || isNaN(x)) { + return x; + } + return x > 0 ? 1 : -1; +} -return t.apply(i,e)}},scriptName:"proj4js-combined.js",defsLookupService:"http://spatialreference.org/ref",libPath:null,getScriptLocation:function(){if(this.libPath)return this.libPath;for(var t=this.scriptName,i=t.length,s=document.getElementsByTagName("script"),e=0;s.length>e;e++){var o=s[e].getAttribute("src");if(o){var n=o.lastIndexOf(t);if(n>-1&&n+i==o.length){this.libPath=o.slice(0,-i);break}}}return this.libPath||""},loadScript:function(t,i,s,e){var o=document.createElement("script");o.defer=!1,o.type="text/javascript",o.id=t,o.src=t,o.onload=i,o.onerror=s,o.loadCheck=e,/MSIE/.test(navigator.userAgent)&&(o.onreadystatechange=this.checkReadyState),document.getElementsByTagName("head")[0].appendChild(o)},checkReadyState:function(){"loaded"==this.readyState&&(this.loadCheck()?this.onload():this.onerror())}};Proj4js.Proj=Proj4js.Class({readyToUse:!1,title:null,projName:null,units:null,datum:null,x0:0,y0:0,localCS:!1,queue:null,initialize:function(t,i){if(this.srsCodeInput=t,this.queue=[],i&&this.queue.push(i),t.indexOf("GEOGCS")>=0||t.indexOf("GEOCCS")>=0||t.indexOf("PROJCS")>=0||t.indexOf("LOCAL_CS")>=0)return this.parseWKT(t),this.deriveConstants(),this.loadProjCode(this.projName),void 0;if(0==t.indexOf("urn:")){var s=t.split(":");"ogc"!=s[1]&&"x-ogc"!=s[1]||"def"!=s[2]||"crs"!=s[3]||(t=s[4]+":"+s[s.length-1])}else if(0==t.indexOf("http://")){var e=t.split("#");e[0].match(/epsg.org/)?t="EPSG:"+e[1]:e[0].match(/RIG.xml/)&&(t="IGNF:"+e[1])}this.srsCode=t.toUpperCase(),0==this.srsCode.indexOf("EPSG")?(this.srsCode=this.srsCode,this.srsAuth="epsg",this.srsProjNumber=this.srsCode.substring(5)):0==this.srsCode.indexOf("IGNF")?(this.srsCode=this.srsCode,this.srsAuth="IGNF",this.srsProjNumber=this.srsCode.substring(5)):0==this.srsCode.indexOf("CRS")?(this.srsCode=this.srsCode,this.srsAuth="CRS",this.srsProjNumber=this.srsCode.substring(4)):(this.srsAuth="",this.srsProjNumber=this.srsCode),this.loadProjDefinition()},loadProjDefinition:function(){if(Proj4js.defs[this.srsCode])return this.defsLoaded(),void 0;var t=Proj4js.getScriptLocation()+"defs/"+this.srsAuth.toUpperCase()+this.srsProjNumber+".js";Proj4js.loadScript(t,Proj4js.bind(this.defsLoaded,this),Proj4js.bind(this.loadFromService,this),Proj4js.bind(this.checkDefsLoaded,this))},loadFromService:function(){var t=Proj4js.defsLookupService+"/"+this.srsAuth+"/"+this.srsProjNumber+"/proj4js/";Proj4js.loadScript(t,Proj4js.bind(this.defsLoaded,this),Proj4js.bind(this.defsFailed,this),Proj4js.bind(this.checkDefsLoaded,this))},defsLoaded:function(){this.parseDefs(),this.loadProjCode(this.projName)},checkDefsLoaded:function(){return Proj4js.defs[this.srsCode]?!0:!1},defsFailed:function(){Proj4js.reportError("failed to load projection definition for: "+this.srsCode),Proj4js.defs[this.srsCode]=Proj4js.defs.WGS84,this.defsLoaded()},loadProjCode:function(t){if(Proj4js.Proj[t])return this.initTransforms(),void 0;var i=Proj4js.getScriptLocation()+"projCode/"+t+".js";Proj4js.loadScript(i,Proj4js.bind(this.loadProjCodeSuccess,this,t),Proj4js.bind(this.loadProjCodeFailure,this,t),Proj4js.bind(this.checkCodeLoaded,this,t))},loadProjCodeSuccess:function(t){Proj4js.Proj[t].dependsOn?this.loadProjCode(Proj4js.Proj[t].dependsOn):this.initTransforms()},loadProjCodeFailure:function(t){Proj4js.reportError("failed to find projection file for: "+t)},checkCodeLoaded:function(t){return Proj4js.Proj[t]?!0:!1},initTransforms:function(){if(Proj4js.extend(this,Proj4js.Proj[this.projName]),this.init(),this.readyToUse=!0,this.queue)for(var t;t=this.queue.shift();)t.call(this,this)},wktRE:/^(\w+)\[(.*)\]$/,parseWKT:function(t){var i=t.match(this.wktRE);if(i){var s,e=i[1],o=i[2],n=o.split(",");s="TOWGS84"==e.toUpperCase()?e:n.shift(),s=s.replace(/^\"/,""),s=s.replace(/\"$/,"");for(var a=[],r=0,h="",l=0;n.length>l;++l){for(var c=n[l],m=0;c.length>m;++m)"["==c.charAt(m)&&++r,"]"==c.charAt(m)&&--r;h+=c,0===r?(a.push(h),h=""):h+=","}switch(e){case"LOCAL_CS":this.projName="identity",this.localCS=!0,this.srsCode=s;break;case"GEOGCS":this.projName="longlat",this.geocsCode=s,this.srsCode||(this.srsCode=s);break;case"PROJCS":this.srsCode=s;break;case"GEOCCS":break;case"PROJECTION":this.projName=Proj4js.wktProjections[s];break;case"DATUM":this.datumName=s;break;case"LOCAL_DATUM":this.datumCode="none";break;case"SPHEROID":this.ellps=s,this.a=parseFloat(a.shift()),this.rf=parseFloat(a.shift());break;case"PRIMEM":this.from_greenwich=parseFloat(a.shift());break;case"UNIT":this.units=s,this.unitsPerMeter=parseFloat(a.shift());break;case"PARAMETER":var u=s.toLowerCase(),d=parseFloat(a.shift());switch(u){case"false_easting":this.x0=d;break;case"false_northing":this.y0=d;break;case"scale_factor":this.k0=d;break;case"central_meridian":this.long0=d*Proj4js.common.D2R;break;case"latitude_of_origin":this.lat0=d*Proj4js.common.D2R;break;case"more_here":break;default:}break;case"TOWGS84":this.datum_params=a;break;case"AXIS":var u=s.toLowerCase(),d=a.shift();switch(d){case"EAST":d="e";break;case"WEST":d="w";break;case"NORTH":d="n";break;case"SOUTH":d="s";break;case"UP":d="u";break;case"DOWN":d="d";break;case"OTHER":default:d=" "}switch(this.axis||(this.axis="enu"),u){case"x":this.axis=d+this.axis.substr(1,2);break;case"y":this.axis=this.axis.substr(0,1)+d+this.axis.substr(2,1);break;case"z":this.axis=this.axis.substr(0,2)+d;break;default:}case"MORE_HERE":break;default:}for(var l=0;a.length>l;++l)this.parseWKT(a[l])}},parseDefs:function(){this.defData=Proj4js.defs[this.srsCode];var t,i;if(this.defData){for(var s=this.defData.split("+"),e=0;s.length>e;e++){var o=s[e].split("=");switch(t=o[0].toLowerCase(),i=o[1],t.replace(/\s/gi,"")){case"":break;case"title":this.title=i;break;case"proj":this.projName=i.replace(/\s/gi,"");break;case"units":this.units=i.replace(/\s/gi,"");break;case"datum":this.datumCode=i.replace(/\s/gi,"");break;case"nadgrids":this.nagrids=i.replace(/\s/gi,"");break;case"ellps":this.ellps=i.replace(/\s/gi,"");break;case"a":this.a=parseFloat(i);break;case"b":this.b=parseFloat(i);break;case"rf":this.rf=parseFloat(i);break;case"lat_0":this.lat0=i*Proj4js.common.D2R;break;case"lat_1":this.lat1=i*Proj4js.common.D2R;break;case"lat_2":this.lat2=i*Proj4js.common.D2R;break;case"lat_ts":this.lat_ts=i*Proj4js.common.D2R;break;case"lon_0":this.long0=i*Proj4js.common.D2R;break;case"alpha":this.alpha=parseFloat(i)*Proj4js.common.D2R;break;case"lonc":this.longc=i*Proj4js.common.D2R;break;case"x_0":this.x0=parseFloat(i);break;case"y_0":this.y0=parseFloat(i);break;case"k_0":this.k0=parseFloat(i);break;case"k":this.k0=parseFloat(i);break;case"r_a":this.R_A=!0;break;case"zone":this.zone=parseInt(i,10);break;case"south":this.utmSouth=!0;break;case"towgs84":this.datum_params=i.split(",");break;case"to_meter":this.to_meter=parseFloat(i);break;case"from_greenwich":this.from_greenwich=i*Proj4js.common.D2R;break;case"pm":i=i.replace(/\s/gi,""),this.from_greenwich=Proj4js.PrimeMeridian[i]?Proj4js.PrimeMeridian[i]:parseFloat(i),this.from_greenwich*=Proj4js.common.D2R;break;case"axis":i=i.replace(/\s/gi,"");var n="ewnsud";3==i.length&&-1!=n.indexOf(i.substr(0,1))&&-1!=n.indexOf(i.substr(1,1))&&-1!=n.indexOf(i.substr(2,1))&&(this.axis=i);break;case"no_defs":break;default:}}this.deriveConstants()}},deriveConstants:function(){if("@null"==this.nagrids&&(this.datumCode="none"),this.datumCode&&"none"!=this.datumCode){var t=Proj4js.Datum[this.datumCode];t&&(this.datum_params=t.towgs84?t.towgs84.split(","):null,this.ellps=t.ellipse,this.datumName=t.datumName?t.datumName:this.datumCode)}if(!this.a){var i=Proj4js.Ellipsoid[this.ellps]?Proj4js.Ellipsoid[this.ellps]:Proj4js.Ellipsoid.WGS84;Proj4js.extend(this,i)}this.rf&&!this.b&&(this.b=(1-1/this.rf)*this.a),(0===this.rf||Math.abs(this.a-this.b)=a;a++)if(s=t*Math.sin(n),e=this.HALF_PI-2*Math.atan(i*Math.pow((1-s)/(1+s),o))-n,n+=e,1e-10>=Math.abs(e))return n;return alert("phi2z has NoConvergence"),-9999},qsfnz:function(t,i){var s;return t>1e-7?(s=t*i,(1-t*t)*(i/(1-s*s)-.5/t*Math.log((1-s)/(1+s)))):2*i},asinz:function(t){return Math.abs(t)>1&&(t=t>1?1:-1),Math.asin(t)},e0fn:function(t){return 1-.25*t*(1+t/16*(3+1.25*t))},e1fn:function(t){return.375*t*(1+.25*t*(1+.46875*t))},e2fn:function(t){return.05859375*t*t*(1+.75*t)},e3fn:function(t){return t*t*t*(35/3072)},mlfn:function(t,i,s,e,o){return t*o-i*Math.sin(2*o)+s*Math.sin(4*o)-e*Math.sin(6*o)},srat:function(t,i){return Math.pow((1-t)/(1+t),i)},sign:function(t){return 0>t?-1:1},adjust_lon:function(t){return t=Math.abs(t)this.HALF_PI)return+Number.NaN;if(i==this.HALF_PI)return Number.POSITIVE_INFINITY;if(i==-1*this.HALF_PI)return-1*Number.POSITIVE_INFINITY;var e=t*s;return Math.log(Math.tan((this.HALF_PI+i)/2))+t*Math.log((1-e)/(1+e))/2},fL:function(t,i){return 2*Math.atan(t*Math.exp(i))-this.HALF_PI},invlatiso:function(t,i){var s=this.fL(1,i),e=0,o=0;do e=s,o=t*Math.sin(e),s=this.fL(Math.exp(t*Math.log((1+o)/(1-o))/2),i);while(Math.abs(s-e)>1e-12);return s},sinh:function(t){var i=Math.exp(t);return i=(i-1/i)/2},cosh:function(t){var i=Math.exp(t);return i=(i+1/i)/2},tanh:function(t){var i=Math.exp(t);return i=(i-1/i)/(i+1/i)},asinh:function(t){var i=t>=0?1:-1;return i*Math.log(Math.abs(t)+Math.sqrt(t*t+1))},acosh:function(t){return 2*Math.log(Math.sqrt((t+1)/2)+Math.sqrt((t-1)/2))},atanh:function(t){return Math.log((t-1)/(t+1))/2},gN:function(t,i,s){var e=i*s;return t/Math.sqrt(1-e*e)},pj_enfn:function(t){var i=[];i[0]=this.C00-t*(this.C02+t*(this.C04+t*(this.C06+t*this.C08))),i[1]=t*(this.C22-t*(this.C04+t*(this.C06+t*this.C08)));var s=t*t;return i[2]=s*(this.C44-t*(this.C46+t*this.C48)),s*=t,i[3]=s*(this.C66-t*this.C68),i[4]=s*t*this.C88,i},pj_mlfn:function(t,i,s,e){return s*=i,i*=i,e[0]*t-s*(e[1]+i*(e[2]+i*(e[3]+i*e[4])))},pj_inv_mlfn:function(t,i,s){for(var e=1/(1-i),o=t,n=Proj4js.common.MAX_ITER;n;--n){var a=Math.sin(o),r=1-i*a*a;if(r=(this.pj_mlfn(o,a,Math.cos(o),s)-t)*r*Math.sqrt(r)*e,o-=r,Math.abs(r)i;i++)t.datum_params[i]=parseFloat(t.datum_params[i]);(0!=t.datum_params[0]||0!=t.datum_params[1]||0!=t.datum_params[2])&&(this.datum_type=Proj4js.common.PJD_3PARAM),t.datum_params.length>3&&(0!=t.datum_params[3]||0!=t.datum_params[4]||0!=t.datum_params[5]||0!=t.datum_params[6])&&(this.datum_type=Proj4js.common.PJD_7PARAM,t.datum_params[3]*=Proj4js.common.SEC_TO_RAD,t.datum_params[4]*=Proj4js.common.SEC_TO_RAD,t.datum_params[5]*=Proj4js.common.SEC_TO_RAD,t.datum_params[6]=t.datum_params[6]/1e6+1)}t&&(this.a=t.a,this.b=t.b,this.es=t.es,this.ep2=t.ep2,this.datum_params=t.datum_params)},compare_datums:function(t){return this.datum_type!=t.datum_type?!1:this.a!=t.a||Math.abs(this.es-t.es)>5e-11?!1:this.datum_type==Proj4js.common.PJD_3PARAM?this.datum_params[0]==t.datum_params[0]&&this.datum_params[1]==t.datum_params[1]&&this.datum_params[2]==t.datum_params[2]:this.datum_type==Proj4js.common.PJD_7PARAM?this.datum_params[0]==t.datum_params[0]&&this.datum_params[1]==t.datum_params[1]&&this.datum_params[2]==t.datum_params[2]&&this.datum_params[3]==t.datum_params[3]&&this.datum_params[4]==t.datum_params[4]&&this.datum_params[5]==t.datum_params[5]&&this.datum_params[6]==t.datum_params[6]:this.datum_type==Proj4js.common.PJD_GRIDSHIFT||t.datum_type==Proj4js.common.PJD_GRIDSHIFT?(alert("ERROR: Grid shift transformations are not implemented."),!1):!0},geodetic_to_geocentric:function(t){var i,s,e,o,n,a,r,h=t.x,l=t.y,c=t.z?t.z:0,m=0;if(-Proj4js.common.HALF_PI>l&&l>-1.001*Proj4js.common.HALF_PI)l=-Proj4js.common.HALF_PI;else if(l>Proj4js.common.HALF_PI&&1.001*Proj4js.common.HALF_PI>l)l=Proj4js.common.HALF_PI;else if(-Proj4js.common.HALF_PI>l||l>Proj4js.common.HALF_PI)return Proj4js.reportError("geocent:lat out of range:"+l),null;return h>Proj4js.common.PI&&(h-=2*Proj4js.common.PI),n=Math.sin(l),r=Math.cos(l),a=n*n,o=this.a/Math.sqrt(1-this.es*a),i=(o+c)*r*Math.cos(h),s=(o+c)*r*Math.sin(h),e=(o*(1-this.es)+c)*n,t.x=i,t.y=s,t.z=e,m},geocentric_to_geodetic:function(t){var i,s,e,o,n,a,r,h,l,c,m,u,d,p,_,f,P,y=1e-12,g=y*y,L=30,v=t.x,j=t.y,M=t.z?t.z:0;if(d=!1,i=Math.sqrt(v*v+j*j),s=Math.sqrt(v*v+j*j+M*M),y>i/this.a){if(d=!0,_=0,y>s/this.a)return f=Proj4js.common.HALF_PI,P=-this.b,void 0}else _=Math.atan2(j,v);e=M/s,o=i/s,n=1/Math.sqrt(1-this.es*(2-this.es)*o*o),h=o*(1-this.es)*n,l=e*n,p=0;do p++,r=this.a/Math.sqrt(1-this.es*l*l),P=i*h+M*l-r*(1-this.es*l*l),a=this.es*r/(r+P),n=1/Math.sqrt(1-a*(2-a)*o*o),c=o*(1-a)*n,m=e*n,u=m*h-c*l,h=c,l=m;while(u*u>g&&L>p);return f=Math.atan(m/Math.abs(c)),t.x=_,t.y=f,t.z=P,t},geocentric_to_geodetic_noniter:function(t){var i,s,e,o,n,a,r,h,l,c,m,u,d,p,_,f,P,y=t.x,g=t.y,L=t.z?t.z:0;if(y=parseFloat(y),g=parseFloat(g),L=parseFloat(L),P=!1,0!=y)i=Math.atan2(g,y);else if(g>0)i=Proj4js.common.HALF_PI;else if(0>g)i=-Proj4js.common.HALF_PI;else if(P=!0,i=0,L>0)s=Proj4js.common.HALF_PI;else{if(!(0>L))return s=Proj4js.common.HALF_PI,e=-this.b,void 0;s=-Proj4js.common.HALF_PI}return n=y*y+g*g,o=Math.sqrt(n),a=L*Proj4js.common.AD_C,h=Math.sqrt(a*a+n),c=a/h,u=o/h,m=c*c*c,r=L+this.b*this.ep2*m,f=o-this.a*this.es*u*u*u,l=Math.sqrt(r*r+f*f),d=r/l,p=f/l,_=this.a/Math.sqrt(1-this.es*d*d),e=p>=Proj4js.common.COS_67P5?o/p-_:-Proj4js.common.COS_67P5>=p?o/-p-_:L/d+_*(this.es-1),0==P&&(s=Math.atan(d/p)),t.x=i,t.y=s,t.z=e,t},geocentric_to_wgs84:function(t){if(this.datum_type==Proj4js.common.PJD_3PARAM)t.x+=this.datum_params[0],t.y+=this.datum_params[1],t.z+=this.datum_params[2];else if(this.datum_type==Proj4js.common.PJD_7PARAM){var i=this.datum_params[0],s=this.datum_params[1],e=this.datum_params[2],o=this.datum_params[3],n=this.datum_params[4],a=this.datum_params[5],r=this.datum_params[6],h=r*(t.x-a*t.y+n*t.z)+i,l=r*(a*t.x+t.y-o*t.z)+s,c=r*(-n*t.x+o*t.y+t.z)+e;t.x=h,t.y=l,t.z=c}},geocentric_from_wgs84:function(t){if(this.datum_type==Proj4js.common.PJD_3PARAM)t.x-=this.datum_params[0],t.y-=this.datum_params[1],t.z-=this.datum_params[2];else if(this.datum_type==Proj4js.common.PJD_7PARAM){var i=this.datum_params[0],s=this.datum_params[1],e=this.datum_params[2],o=this.datum_params[3],n=this.datum_params[4],a=this.datum_params[5],r=this.datum_params[6],h=(t.x-i)/r,l=(t.y-s)/r,c=(t.z-e)/r;t.x=h+a*l-n*c,t.y=-a*h+l+o*c,t.z=n*h-o*l+c}}}),Proj4js.Point=Proj4js.Class({initialize:function(t,i,s){if("object"==typeof t)this.x=t[0],this.y=t[1],this.z=t[2]||0;else if("string"==typeof t&&i===void 0){var e=t.split(",");this.x=parseFloat(e[0]),this.y=parseFloat(e[1]),this.z=parseFloat(e[2])||0}else this.x=t,this.y=i,this.z=s||0},clone:function(){return new Proj4js.Point(this.x,this.y,this.z)},toString:function(){return"x="+this.x+",y="+this.y},toShortString:function(){return this.x+", "+this.y}}),Proj4js.PrimeMeridian={greenwich:0,lisbon:-9.131906111111,paris:2.337229166667,bogota:-74.080916666667,madrid:-3.687938888889,rome:12.452333333333,bern:7.439583333333,jakarta:106.807719444444,ferro:-17.666666666667,brussels:4.367975,stockholm:18.058277777778,athens:23.7163375,oslo:10.722916666667},Proj4js.Ellipsoid={MERIT:{a:6378137,rf:298.257,ellipseName:"MERIT 1983"},SGS85:{a:6378136,rf:298.257,ellipseName:"Soviet Geodetic System 85"},GRS80:{a:6378137,rf:298.257222101,ellipseName:"GRS 1980(IUGG, 1980)"},IAU76:{a:6378140,rf:298.257,ellipseName:"IAU 1976"},airy:{a:6377563.396,b:6356256.91,ellipseName:"Airy 1830"},"APL4.":{a:6378137,rf:298.25,ellipseName:"Appl. Physics. 1965"},NWL9D:{a:6378145,rf:298.25,ellipseName:"Naval Weapons Lab., 1965"},mod_airy:{a:6377340.189,b:6356034.446,ellipseName:"Modified Airy"},andrae:{a:6377104.43,rf:300,ellipseName:"Andrae 1876 (Den., Iclnd.)"},aust_SA:{a:6378160,rf:298.25,ellipseName:"Australian Natl & S. Amer. 1969"},GRS67:{a:6378160,rf:298.247167427,ellipseName:"GRS 67(IUGG 1967)"},bessel:{a:6377397.155,rf:299.1528128,ellipseName:"Bessel 1841"},bess_nam:{a:6377483.865,rf:299.1528128,ellipseName:"Bessel 1841 (Namibia)"},clrk66:{a:6378206.4,b:6356583.8,ellipseName:"Clarke 1866"},clrk80:{a:6378249.145,rf:293.4663,ellipseName:"Clarke 1880 mod."},CPM:{a:6375738.7,rf:334.29,ellipseName:"Comm. des Poids et Mesures 1799"},delmbr:{a:6376428,rf:311.5,ellipseName:"Delambre 1810 (Belgium)"},engelis:{a:6378136.05,rf:298.2566,ellipseName:"Engelis 1985"},evrst30:{a:6377276.345,rf:300.8017,ellipseName:"Everest 1830"},evrst48:{a:6377304.063,rf:300.8017,ellipseName:"Everest 1948"},evrst56:{a:6377301.243,rf:300.8017,ellipseName:"Everest 1956"},evrst69:{a:6377295.664,rf:300.8017,ellipseName:"Everest 1969"},evrstSS:{a:6377298.556,rf:300.8017,ellipseName:"Everest (Sabah & Sarawak)"},fschr60:{a:6378166,rf:298.3,ellipseName:"Fischer (Mercury Datum) 1960"},fschr60m:{a:6378155,rf:298.3,ellipseName:"Fischer 1960"},fschr68:{a:6378150,rf:298.3,ellipseName:"Fischer 1968"},helmert:{a:6378200,rf:298.3,ellipseName:"Helmert 1906"},hough:{a:6378270,rf:297,ellipseName:"Hough"},intl:{a:6378388,rf:297,ellipseName:"International 1909 (Hayford)"},kaula:{a:6378163,rf:298.24,ellipseName:"Kaula 1961"},lerch:{a:6378139,rf:298.257,ellipseName:"Lerch 1979"},mprts:{a:6397300,rf:191,ellipseName:"Maupertius 1738"},new_intl:{a:6378157.5,b:6356772.2,ellipseName:"New International 1967"},plessis:{a:6376523,rf:6355863,ellipseName:"Plessis 1817 (France)"},krass:{a:6378245,rf:298.3,ellipseName:"Krassovsky, 1942"},SEasia:{a:6378155,b:6356773.3205,ellipseName:"Southeast Asia"},walbeck:{a:6376896,b:6355834.8467,ellipseName:"Walbeck"},WGS60:{a:6378165,rf:298.3,ellipseName:"WGS 60"},WGS66:{a:6378145,rf:298.25,ellipseName:"WGS 66"},WGS72:{a:6378135,rf:298.26,ellipseName:"WGS 72"},WGS84:{a:6378137,rf:298.257223563,ellipseName:"WGS 84"},sphere:{a:6370997,b:6370997,ellipseName:"Normal Sphere (r=6370997)"}},Proj4js.Datum={WGS84:{towgs84:"0,0,0",ellipse:"WGS84",datumName:"WGS84"},GGRS87:{towgs84:"-199.87,74.79,246.62",ellipse:"GRS80",datumName:"Greek_Geodetic_Reference_System_1987"},NAD83:{towgs84:"0,0,0",ellipse:"GRS80",datumName:"North_American_Datum_1983"},NAD27:{nadgrids:"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat",ellipse:"clrk66",datumName:"North_American_Datum_1927"},potsdam:{towgs84:"606.0,23.0,413.0",ellipse:"bessel",datumName:"Potsdam Rauenberg 1950 DHDN"},carthage:{towgs84:"-263.0,6.0,431.0",ellipse:"clark80",datumName:"Carthage 1934 Tunisia"},hermannskogel:{towgs84:"653.0,-212.0,449.0",ellipse:"bessel",datumName:"Hermannskogel"},ire65:{towgs84:"482.530,-130.596,564.557,-1.042,-0.214,-0.631,8.15",ellipse:"mod_airy",datumName:"Ireland 1965"},nzgd49:{towgs84:"59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993",ellipse:"intl",datumName:"New Zealand Geodetic Datum 1949"},OSGB36:{towgs84:"446.448,-125.157,542.060,0.1502,0.2470,0.8421,-20.4894",ellipse:"airy",datumName:"Airy 1830"}},Proj4js.WGS84=new Proj4js.Proj("WGS84"),Proj4js.Datum.OSB36=Proj4js.Datum.OSGB36,Proj4js.wktProjections={"Lambert Tangential Conformal Conic Projection":"lcc",Mercator:"merc","Popular Visualisation Pseudo Mercator":"merc",Mercator_1SP:"merc",Transverse_Mercator:"tmerc","Transverse Mercator":"tmerc","Lambert Azimuthal Equal Area":"laea","Universal Transverse Mercator System":"utm"},Proj4js.Proj.aea={init:function(){return Math.abs(this.lat1+this.lat2)Proj4js.common.EPSLN?(this.ms1*this.ms1-this.ms2*this.ms2)/(this.qs2-this.qs1):this.con,this.c=this.ms1*this.ms1+this.ns0*this.qs1,this.rh=this.a*Math.sqrt(this.c-this.ns0*this.qs0)/this.ns0,void 0)},forward:function(t){var i=t.x,s=t.y;this.sin_phi=Math.sin(s),this.cos_phi=Math.cos(s);var e=Proj4js.common.qsfnz(this.e3,this.sin_phi,this.cos_phi),o=this.a*Math.sqrt(this.c-this.ns0*e)/this.ns0,n=this.ns0*Proj4js.common.adjust_lon(i-this.long0),a=o*Math.sin(n)+this.x0,r=this.rh-o*Math.cos(n)+this.y0;return t.x=a,t.y=r,t},inverse:function(t){var i,s,e,o,n,a;return t.x-=this.x0,t.y=this.rh-t.y+this.y0,this.ns0>=0?(i=Math.sqrt(t.x*t.x+t.y*t.y),e=1):(i=-Math.sqrt(t.x*t.x+t.y*t.y),e=-1),o=0,0!=i&&(o=Math.atan2(e*t.x,e*t.y)),e=i*this.ns0/this.a,s=(this.c-e*e)/this.ns0,this.e3>=1e-10?(e=1-.5*(1-this.es)*Math.log((1-this.e3)/(1+this.e3))/this.e3,a=Math.abs(Math.abs(e)-Math.abs(s))>1e-10?this.phi1z(this.e3,s):s>=0?.5*Proj4js.common.PI:-.5*Proj4js.common.PI):a=this.phi1z(this.e3,s),n=Proj4js.common.adjust_lon(o/this.ns0+this.long0),t.x=n,t.y=a,t},phi1z:function(t,i){var s,e,o,n,a,r=Proj4js.common.asinz(.5*i);if(Proj4js.common.EPSLN>t)return r;for(var h=t*t,l=1;25>=l;l++)if(s=Math.sin(r),e=Math.cos(r),o=t*s,n=1-o*o,a=.5*n*n/e*(i/(1-h)-s/n+.5/t*Math.log((1-o)/(1+o))),r+=a,1e-7>=Math.abs(a))return r;return Proj4js.reportError("aea:phi1z:Convergence error"),null}},Proj4js.Proj.sterea={dependsOn:"gauss",init:function(){return Proj4js.Proj.gauss.init.apply(this),this.rc?(this.sinc0=Math.sin(this.phic0),this.cosc0=Math.cos(this.phic0),this.R2=2*this.rc,this.title||(this.title="Oblique Stereographic Alternative"),void 0):(Proj4js.reportError("sterea:init:E_ERROR_0"),void 0)},forward:function(t){var i,s,e,o;return t.x=Proj4js.common.adjust_lon(t.x-this.long0),Proj4js.Proj.gauss.forward.apply(this,[t]),i=Math.sin(t.y),s=Math.cos(t.y),e=Math.cos(t.x),o=this.k0*this.R2/(1+this.sinc0*i+this.cosc0*s*e),t.x=o*s*Math.sin(t.x),t.y=o*(this.cosc0*i-this.sinc0*s*e),t.x=this.a*t.x+this.x0,t.y=this.a*t.y+this.y0,t},inverse:function(t){var i,s,e,o,n;if(t.x=(t.x-this.x0)/this.a,t.y=(t.y-this.y0)/this.a,t.x/=this.k0,t.y/=this.k0,n=Math.sqrt(t.x*t.x+t.y*t.y)){var a=2*Math.atan2(n,this.R2);i=Math.sin(a),s=Math.cos(a),o=Math.asin(s*this.sinc0+t.y*i*this.cosc0/n),e=Math.atan2(t.x*i,n*this.cosc0*s-t.y*this.sinc0*i)}else o=this.phic0,e=0;return t.x=e,t.y=o,Proj4js.Proj.gauss.inverse.apply(this,[t]),t.x=Proj4js.common.adjust_lon(t.x+this.long0),t}},Proj4js.Proj.poly={init:function(){0==this.lat0&&(this.lat0=90),this.temp=this.b/this.a,this.es=1-Math.pow(this.temp,2),this.e=Math.sqrt(this.es),this.e0=Proj4js.common.e0fn(this.es),this.e1=Proj4js.common.e1fn(this.es),this.e2=Proj4js.common.e2fn(this.es),this.e3=Proj4js.common.e3fn(this.es),this.ml0=Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,this.lat0)},forward:function(t){var i,s,e,o,n,a,r,h=t.x,l=t.y;return e=Proj4js.common.adjust_lon(h-this.long0),1e-7>=Math.abs(l)?(a=this.x0+this.a*e,r=this.y0-this.a*this.ml0):(i=Math.sin(l),s=Math.cos(l),o=Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,l),n=Proj4js.common.msfnz(this.e,i,s),e=i,a=this.x0+this.a*n*Math.sin(e)/i,r=this.y0+this.a*(o-this.ml0+n*(1-Math.cos(e))/i)),t.x=a,t.y=r,t},inverse:function(t){var i,s,e,o,n,a;if(t.x-=this.x0,t.y-=this.y0,i=this.ml0+t.y/this.a,o=0,1e-7>=Math.abs(i))n=t.x/this.a+this.long0,a=0;else{if(s=i*i+t.x/this.a*(t.x/this.a),o=phi4z(this.es,this.e0,this.e1,this.e2,this.e3,this.al,s,e,a),1!=o)return o;n=Proj4js.common.adjust_lon(Proj4js.common.asinz(t.x*e/this.a)/Math.sin(a)+this.long0)}return t.x=n,t.y=a,t}},Proj4js.Proj.equi={init:function(){this.x0||(this.x0=0),this.y0||(this.y0=0),this.lat0||(this.lat0=0),this.long0||(this.long0=0)},forward:function(t){var i=t.x,s=t.y,e=Proj4js.common.adjust_lon(i-this.long0),o=this.x0+this.a*e*Math.cos(this.lat0),n=this.y0+this.a*s;return this.t1=o,this.t2=Math.cos(this.lat0),t.x=o,t.y=n,t},inverse:function(t){t.x-=this.x0,t.y-=this.y0;var i=t.y/this.a;Math.abs(i)>Proj4js.common.HALF_PI&&Proj4js.reportError("equi:Inv:DataError");var s=Proj4js.common.adjust_lon(this.long0+t.x/(this.a*Math.cos(this.lat0)));t.x=s,t.y=i}},Proj4js.Proj.merc={init:function(){this.lat_ts&&(this.k0=this.sphere?Math.cos(this.lat_ts):Proj4js.common.msfnz(this.es,Math.sin(this.lat_ts),Math.cos(this.lat_ts)))},forward:function(t){var i=t.x,s=t.y;if(s*Proj4js.common.R2D>90&&-90>s*Proj4js.common.R2D&&i*Proj4js.common.R2D>180&&-180>i*Proj4js.common.R2D)return Proj4js.reportError("merc:forward: llInputOutOfRange: "+i+" : "+s),null;var e,o;if(Math.abs(Math.abs(s)-Proj4js.common.HALF_PI)<=Proj4js.common.EPSLN)return Proj4js.reportError("merc:forward: ll2mAtPoles"),null;if(this.sphere)e=this.x0+this.a*this.k0*Proj4js.common.adjust_lon(i-this.long0),o=this.y0+this.a*this.k0*Math.log(Math.tan(Proj4js.common.FORTPI+.5*s));else{var n=Math.sin(s),a=Proj4js.common.tsfnz(this.e,s,n);e=this.x0+this.a*this.k0*Proj4js.common.adjust_lon(i-this.long0),o=this.y0-this.a*this.k0*Math.log(a)}return t.x=e,t.y=o,t},inverse:function(t){var i,s,e=t.x-this.x0,o=t.y-this.y0;if(this.sphere)s=Proj4js.common.HALF_PI-2*Math.atan(Math.exp(-o/this.a*this.k0));else{var n=Math.exp(-o/(this.a*this.k0));if(s=Proj4js.common.phi2z(this.e,n),-9999==s)return Proj4js.reportError("merc:inverse: lat = -9999"),null}return i=Proj4js.common.adjust_lon(this.long0+e/(this.a*this.k0)),t.x=i,t.y=s,t}},Proj4js.Proj.utm={dependsOn:"tmerc",init:function(){return this.zone?(this.lat0=0,this.long0=(6*Math.abs(this.zone)-183)*Proj4js.common.D2R,this.x0=5e5,this.y0=this.utmSouth?1e7:0,this.k0=.9996,Proj4js.Proj.tmerc.init.apply(this),this.forward=Proj4js.Proj.tmerc.forward,this.inverse=Proj4js.Proj.tmerc.inverse,void 0):(Proj4js.reportError("utm:init: zone must be specified for UTM"),void 0)}},Proj4js.Proj.eqdc={init:function(){this.mode||(this.mode=0),this.temp=this.b/this.a,this.es=1-Math.pow(this.temp,2),this.e=Math.sqrt(this.es),this.e0=Proj4js.common.e0fn(this.es),this.e1=Proj4js.common.e1fn(this.es),this.e2=Proj4js.common.e2fn(this.es),this.e3=Proj4js.common.e3fn(this.es),this.sinphi=Math.sin(this.lat1),this.cosphi=Math.cos(this.lat1),this.ms1=Proj4js.common.msfnz(this.e,this.sinphi,this.cosphi),this.ml1=Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,this.lat1),0!=this.mode?(Math.abs(this.lat1+this.lat2)=Proj4js.common.EPSLN?(this.ms1-this.ms2)/(this.ml2-this.ml1):this.sinphi):this.ns=this.sinphi,this.g=this.ml1+this.ms1/this.ns,this.ml0=Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,this.lat0),this.rh=this.a*(this.g-this.ml0)},forward:function(t){var i=t.x,s=t.y,e=Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,s),o=this.a*(this.g-e),n=this.ns*Proj4js.common.adjust_lon(i-this.long0),a=this.x0+o*Math.sin(n),r=this.y0+this.rh-o*Math.cos(n);return t.x=a,t.y=r,t},inverse:function(t){t.x-=this.x0,t.y=this.rh-t.y+this.y0;var i,s;this.ns>=0?(s=Math.sqrt(t.x*t.x+t.y*t.y),i=1):(s=-Math.sqrt(t.x*t.x+t.y*t.y),i=-1);var e=0;0!=s&&(e=Math.atan2(i*t.x,i*t.y));var o=this.g-s/this.a,n=this.phi3z(o,this.e0,this.e1,this.e2,this.e3),a=Proj4js.common.adjust_lon(this.long0+e/this.ns);return t.x=a,t.y=n,t},phi3z:function(t,i,s,e,o){var n,a;n=t;for(var r=0;15>r;r++)if(a=(t+s*Math.sin(2*n)-e*Math.sin(4*n)+o*Math.sin(6*n))/i-n,n+=a,1e-10>=Math.abs(a))return n;return Proj4js.reportError("PHI3Z-CONV:Latitude failed to converge after 15 iterations"),null}},Proj4js.Proj.tmerc={init:function(){this.e0=Proj4js.common.e0fn(this.es),this.e1=Proj4js.common.e1fn(this.es),this.e2=Proj4js.common.e2fn(this.es),this.e3=Proj4js.common.e3fn(this.es),this.ml0=this.a*Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,this.lat0)},forward:function(t){var i,s,e,o=t.x,n=t.y,a=Proj4js.common.adjust_lon(o-this.long0),r=Math.sin(n),h=Math.cos(n);if(this.sphere){var l=h*Math.sin(a);if(1e-10>Math.abs(Math.abs(l)-1))return Proj4js.reportError("tmerc:forward: Point projects into infinity"),93;s=.5*this.a*this.k0*Math.log((1+l)/(1-l)),i=Math.acos(h*Math.cos(a)/Math.sqrt(1-l*l)),0>n&&(i=-i),e=this.a*this.k0*(i-this.lat0)}else{var c=h*a,m=Math.pow(c,2),u=this.ep2*Math.pow(h,2),d=Math.tan(n),p=Math.pow(d,2);i=1-this.es*Math.pow(r,2);var _=this.a/Math.sqrt(i),f=this.a*Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,n);s=this.k0*_*c*(1+m/6*(1-p+u+m/20*(5-18*p+Math.pow(p,2)+72*u-58*this.ep2)))+this.x0,e=this.k0*(f-this.ml0+_*d*m*(.5+m/24*(5-p+9*u+4*Math.pow(u,2)+m/30*(61-58*p+Math.pow(p,2)+600*u-330*this.ep2))))+this.y0}return t.x=s,t.y=e,t},inverse:function(t){var i,s,e,o,n,a,r=6;if(this.sphere){var h=Math.exp(t.x/(this.a*this.k0)),l=.5*(h-1/h),c=this.lat0+t.y/(this.a*this.k0),m=Math.cos(c);i=Math.sqrt((1-m*m)/(1+l*l)),n=Proj4js.common.asinz(i),0>c&&(n=-n),a=0==l&&0==m?this.long0:Proj4js.common.adjust_lon(Math.atan2(l,m)+this.long0)}else{var u=t.x-this.x0,d=t.y-this.y0;for(i=(this.ml0+d/this.k0)/this.a,s=i,o=0;!0&&(e=(i+this.e1*Math.sin(2*s)-this.e2*Math.sin(4*s)+this.e3*Math.sin(6*s))/this.e0-s,s+=e,!(Math.abs(e)<=Proj4js.common.EPSLN));o++)if(o>=r)return Proj4js.reportError("tmerc:inverse: Latitude failed to converge"),95;if(Math.abs(s)0||Math.abs(a)<=Proj4js.common.EPSLN)var l=this.a*n*s*Math.sin(e),c=this.y0+this.a*n*(this.cos_p14*i-this.sin_p14*s*o);else Proj4js.reportError("orthoFwdPointError");return t.x=l,t.y=c,t},inverse:function(t){var i,s,e,o,n,a,r;return t.x-=this.x0,t.y-=this.y0,i=Math.sqrt(t.x*t.x+t.y*t.y),i>this.a+1e-7&&Proj4js.reportError("orthoInvDataError"),s=Proj4js.common.asinz(i/this.a),e=Math.sin(s),o=Math.cos(s),a=this.long0,Math.abs(i)<=Proj4js.common.EPSLN&&(r=this.lat0),r=Proj4js.common.asinz(o*this.sin_p14+t.y*e*this.cos_p14/i),n=Math.abs(this.lat0)-Proj4js.common.HALF_PI,Math.abs(n)<=Proj4js.common.EPSLN&&(a=this.lat0>=0?Proj4js.common.adjust_lon(this.long0+Math.atan2(t.x,-t.y)):Proj4js.common.adjust_lon(this.long0-Math.atan2(-t.x,t.y))),n=o-this.sin_p14*Math.sin(r),t.x=a,t.y=r,t}},Proj4js.Proj.krovak={init:function(){this.a=6377397.155,this.es=.006674372230614,this.e=Math.sqrt(this.es),this.lat0||(this.lat0=.863937979737193),this.long0||(this.long0=.4334234309119251),this.k0||(this.k0=.9999),this.s45=.785398163397448,this.s90=2*this.s45,this.fi0=this.lat0,this.e2=this.es,this.e=Math.sqrt(this.e2),this.alfa=Math.sqrt(1+this.e2*Math.pow(Math.cos(this.fi0),4)/(1-this.e2)),this.uq=1.04216856380474,this.u0=Math.asin(Math.sin(this.fi0)/this.alfa),this.g=Math.pow((1+this.e*Math.sin(this.fi0))/(1-this.e*Math.sin(this.fi0)),this.alfa*this.e/2),this.k=Math.tan(this.u0/2+this.s45)/Math.pow(Math.tan(this.fi0/2+this.s45),this.alfa)*this.g,this.k1=this.k0,this.n0=this.a*Math.sqrt(1-this.e2)/(1-this.e2*Math.pow(Math.sin(this.fi0),2)),this.s0=1.37008346281555,this.n=Math.sin(this.s0),this.ro0=this.k1*this.n0/Math.tan(this.s0),this.ad=this.s90-this.uq},forward:function(t){var i,s,e,o,n,a,r,h=t.x,l=t.y,c=Proj4js.common.adjust_lon(h-this.long0);return i=Math.pow((1+this.e*Math.sin(l))/(1-this.e*Math.sin(l)),this.alfa*this.e/2),s=2*(Math.atan(this.k*Math.pow(Math.tan(l/2+this.s45),this.alfa)/i)-this.s45),e=-c*this.alfa,o=Math.asin(Math.cos(this.ad)*Math.sin(s)+Math.sin(this.ad)*Math.cos(s)*Math.cos(e)),n=Math.asin(Math.cos(s)*Math.sin(e)/Math.cos(o)),a=this.n*n,r=this.ro0*Math.pow(Math.tan(this.s0/2+this.s45),this.n)/Math.pow(Math.tan(o/2+this.s45),this.n),t.y=r*Math.cos(a)/1,t.x=r*Math.sin(a)/1,this.czech&&(t.y*=-1,t.x*=-1),t},inverse:function(t){var i,s,e,o,n,a,r,h,l=t.x;t.x=t.y,t.y=l,this.czech&&(t.y*=-1,t.x*=-1),a=Math.sqrt(t.x*t.x+t.y*t.y),n=Math.atan2(t.y,t.x),o=n/Math.sin(this.s0),e=2*(Math.atan(Math.pow(this.ro0/a,1/this.n)*Math.tan(this.s0/2+this.s45))-this.s45),i=Math.asin(Math.cos(this.ad)*Math.sin(e)-Math.sin(this.ad)*Math.cos(e)*Math.cos(o)),s=Math.asin(Math.cos(e)*Math.sin(o)/Math.cos(i)),t.x=this.long0-s/this.alfa,r=i,h=0;var c=0;do t.y=2*(Math.atan(Math.pow(this.k,-1/this.alfa)*Math.pow(Math.tan(i/2+this.s45),1/this.alfa)*Math.pow((1+this.e*Math.sin(r))/(1-this.e*Math.sin(r)),this.e/2))-this.s45),1e-10>Math.abs(r-t.y)&&(h=1),r=t.y,c+=1;while(0==h&&15>c);return c>=15?(Proj4js.reportError("PHI3Z-CONV:Latitude failed to converge after 15 iterations"),null):t}},Proj4js.Proj.somerc={init:function(){var t=this.lat0;this.lambda0=this.long0;var i=Math.sin(t),s=this.a,e=this.rf,o=1/e,n=2*o-Math.pow(o,2),a=this.e=Math.sqrt(n);this.R=this.k0*s*Math.sqrt(1-n)/(1-n*Math.pow(i,2)),this.alpha=Math.sqrt(1+n/(1-n)*Math.pow(Math.cos(t),4)),this.b0=Math.asin(i/this.alpha),this.K=Math.log(Math.tan(Math.PI/4+this.b0/2))-this.alpha*Math.log(Math.tan(Math.PI/4+t/2))+this.alpha*a/2*Math.log((1+a*i)/(1-a*i))},forward:function(t){var i=Math.log(Math.tan(Math.PI/4-t.y/2)),s=this.e/2*Math.log((1+this.e*Math.sin(t.y))/(1-this.e*Math.sin(t.y))),e=-this.alpha*(i+s)+this.K,o=2*(Math.atan(Math.exp(e))-Math.PI/4),n=this.alpha*(t.x-this.lambda0),a=Math.atan(Math.sin(n)/(Math.sin(this.b0)*Math.tan(o)+Math.cos(this.b0)*Math.cos(n))),r=Math.asin(Math.cos(this.b0)*Math.sin(o)-Math.sin(this.b0)*Math.cos(o)*Math.cos(n));return t.y=this.R/2*Math.log((1+Math.sin(r))/(1-Math.sin(r)))+this.y0,t.x=this.R*a+this.x0,t},inverse:function(t){for(var i=t.x-this.x0,s=t.y-this.y0,e=i/this.R,o=2*(Math.atan(Math.exp(s/this.R))-Math.PI/4),n=Math.asin(Math.cos(this.b0)*Math.sin(o)+Math.sin(this.b0)*Math.cos(o)*Math.cos(e)),a=Math.atan(Math.sin(e)/(Math.cos(this.b0)*Math.cos(e)-Math.sin(this.b0)*Math.tan(o))),r=this.lambda0+a/this.alpha,h=0,l=n,c=-1e3,m=0;Math.abs(l-c)>1e-7;){if(++m>20)return Proj4js.reportError("omercFwdInfinity"),void 0;h=1/this.alpha*(Math.log(Math.tan(Math.PI/4+n/2))-this.K)+this.e*Math.log(Math.tan(Math.PI/4+Math.asin(this.e*Math.sin(l))/2)),c=l,l=2*Math.atan(Math.exp(h))-Math.PI/2}return t.x=r,t.y=l,t}},Proj4js.Proj.stere={ssfn_:function(t,i,s){return i*=s,Math.tan(.5*(Proj4js.common.HALF_PI+t))*Math.pow((1-i)/(1+i),.5*s)},TOL:1e-8,NITER:8,CONV:1e-10,S_POLE:0,N_POLE:1,OBLIQ:2,EQUIT:3,init:function(){this.phits=this.lat_ts?this.lat_ts:Proj4js.common.HALF_PI;var t=Math.abs(this.lat0);if(this.mode=Math.abs(t)-Proj4js.common.HALF_PIthis.lat0?this.S_POLE:this.N_POLE:t>Proj4js.common.EPSLN?this.OBLIQ:this.EQUIT,this.phits=Math.abs(this.phits),this.es){var i;switch(this.mode){case this.N_POLE:case this.S_POLE:Math.abs(this.phits-Proj4js.common.HALF_PI)=Proj4js.common.EPSLN?Math.cos(this.phits)/Math.tan(Proj4js.common.FORTPI-.5*this.phits):2*this.k0}},forward:function(t){var i=t.x;i=Proj4js.common.adjust_lon(i-this.long0);var s,e,o=t.y;if(this.sphere){var n,a,r,h;switch(n=Math.sin(o),a=Math.cos(o),r=Math.cos(i),h=Math.sin(i),this.mode){case this.EQUIT:e=1+a*r,Proj4js.common.EPSLN>=e&&Proj4js.reportError("stere:forward:Equit"),e=this.akm1/e,s=e*a*h,e*=n;break;case this.OBLIQ:e=1+this.sinph0*n+this.cosph0*a*r,Proj4js.common.EPSLN>=e&&Proj4js.reportError("stere:forward:Obliq"),e=this.akm1/e,s=e*a*h,e*=this.cosph0*n-this.sinph0*a*r;break;case this.N_POLE:r=-r,o=-o;case this.S_POLE:Math.abs(o-Proj4js.common.HALF_PI)=l;l++)r*=n,h+=this.A[l]*r;for(var c,m,u=h,d=a,p=1,_=0,f=0,P=0,l=1;6>=l;l++)c=p*u-_*d,m=_*u+p*d,p=c,_=m,f=f+this.B_re[l]*p-this.B_im[l]*_,P=P+this.B_im[l]*p+this.B_re[l]*_;return t.x=P*this.a+this.x0,t.y=f*this.a+this.y0,t},inverse:function(t){for(var i,s,e=t.x,o=t.y,n=e-this.x0,a=o-this.y0,r=a/this.a,h=n/this.a,l=1,c=0,m=0,u=0,d=1;6>=d;d++)i=l*r-c*h,s=c*r+l*h,l=i,c=s,m=m+this.C_re[d]*l-this.C_im[d]*c,u=u+this.C_im[d]*l+this.C_re[d]*c;for(var p=0;this.iterations>p;p++){for(var _,f,P=m,y=u,g=r,L=h,d=2;6>=d;d++)_=P*m-y*u,f=y*m+P*u,P=_,y=f,g+=(d-1)*(this.B_re[d]*P-this.B_im[d]*y),L+=(d-1)*(this.B_im[d]*P+this.B_re[d]*y);P=1,y=0;for(var v=this.B_re[1],j=this.B_im[1],d=2;6>=d;d++)_=P*m-y*u,f=y*m+P*u,P=_,y=f,v+=d*(this.B_re[d]*P-this.B_im[d]*y),j+=d*(this.B_im[d]*P+this.B_re[d]*y);var M=v*v+j*j;m=(g*v+L*j)/M,u=(L*v-g*j)/M}for(var S=m,b=u,x=1,E=0,d=1;9>=d;d++)x*=S,E+=this.D[d]*x;var C=this.lat0+1e5*E*Proj4js.common.SEC_TO_RAD,w=this.long0+b;return t.x=w,t.y=C,t}},Proj4js.Proj.mill={init:function(){},forward:function(t){var i=t.x,s=t.y,e=Proj4js.common.adjust_lon(i-this.long0),o=this.x0+this.a*e,n=this.y0+1.25*this.a*Math.log(Math.tan(Proj4js.common.PI/4+s/2.5));return t.x=o,t.y=n,t},inverse:function(t){t.x-=this.x0,t.y-=this.y0;var i=Proj4js.common.adjust_lon(this.long0+t.x/this.a),s=2.5*(Math.atan(Math.exp(.8*t.y/this.a))-Proj4js.common.PI/4);return t.x=i,t.y=s,t}},Proj4js.Proj.gnom={init:function(){this.sin_p14=Math.sin(this.lat0),this.cos_p14=Math.cos(this.lat0),this.infinity_dist=1e3*this.a,this.rc=1},forward:function(t){var i,s,e,o,n,a,r,h,l=t.x,c=t.y;return e=Proj4js.common.adjust_lon(l-this.long0),i=Math.sin(c),s=Math.cos(c),o=Math.cos(e),a=this.sin_p14*i+this.cos_p14*s*o,n=1,a>0||Math.abs(a)<=Proj4js.common.EPSLN?(r=this.x0+this.a*n*s*Math.sin(e)/a,h=this.y0+this.a*n*(this.cos_p14*i-this.sin_p14*s*o)/a):(Proj4js.reportError("orthoFwdPointError"),r=this.x0+this.infinity_dist*s*Math.sin(e),h=this.y0+this.infinity_dist*(this.cos_p14*i-this.sin_p14*s*o)),t.x=r,t.y=h,t},inverse:function(t){var i,s,e,o,n,a;return t.x=(t.x-this.x0)/this.a,t.y=(t.y-this.y0)/this.a,t.x/=this.k0,t.y/=this.k0,(i=Math.sqrt(t.x*t.x+t.y*t.y))?(o=Math.atan2(i,this.rc),s=Math.sin(o),e=Math.cos(o),a=Proj4js.common.asinz(e*this.sin_p14+t.y*s*this.cos_p14/i),n=Math.atan2(t.x*s,i*this.cos_p14*e-t.y*this.sin_p14*s),n=Proj4js.common.adjust_lon(this.long0+n)):(a=this.phic0,n=0),t.x=n,t.y=a,t}},Proj4js.Proj.sinu={init:function(){this.sphere?(this.n=1,this.m=0,this.es=0,this.C_y=Math.sqrt((this.m+1)/this.n),this.C_x=this.C_y/(this.m+1)):this.en=Proj4js.common.pj_enfn(this.es)},forward:function(t){var i,s,e=t.x,o=t.y;if(e=Proj4js.common.adjust_lon(e-this.long0),this.sphere){if(this.m)for(var n=this.n*Math.sin(o),a=Proj4js.common.MAX_ITER;a;--a){var r=(this.m*o+Math.sin(o)-n)/(this.m+Math.cos(o));if(o-=r,Math.abs(r)o?(o=Math.sin(i),s=this.long0+t.x*Math.sqrt(1-this.es*o*o)/(this.a*Math.cos(i)),e=Proj4js.common.adjust_lon(s)):o-Proj4js.common.EPSLN=0?this.y0+Proj4js.common.PI*this.R*Math.tan(.5*a):this.y0+Proj4js.common.PI*this.R*-Math.tan(.5*a));var r=.5*Math.abs(Proj4js.common.PI/n-n/Proj4js.common.PI),h=r*r,l=Math.sin(a),c=Math.cos(a),m=c/(l+c-1),u=m*m,d=m*(2/l-1),p=d*d,_=Proj4js.common.PI*this.R*(r*(m-p)+Math.sqrt(h*(m-p)*(m-p)-(p+h)*(u-p)))/(p+h);return 0>n&&(_=-_),i=this.x0+_,_=Math.abs(_/(Proj4js.common.PI*this.R)),s=o>=0?this.y0+Proj4js.common.PI*this.R*Math.sqrt(1-_*_-2*r*_):this.y0-Proj4js.common.PI*this.R*Math.sqrt(1-_*_-2*r*_),t.x=i,t.y=s,t},inverse:function(t){var i,s,e,o,n,a,r,h,l,c,m,u,d;return t.x-=this.x0,t.y-=this.y0,m=Proj4js.common.PI*this.R,e=t.x/m,o=t.y/m,n=e*e+o*o,a=-Math.abs(o)*(1+n),r=a-2*o*o+e*e,h=-2*a+1+2*o*o+n*n,d=o*o/h+(2*r*r*r/h/h/h-9*a*r/h/h)/27,l=(a-r*r/3/h)/h,c=2*Math.sqrt(-l/3),m=3*d/l/c,Math.abs(m)>1&&(m=m>=0?1:-1),u=Math.acos(m)/3,s=t.y>=0?(-c*Math.cos(u+Proj4js.common.PI/3)-r/3/h)*Proj4js.common.PI:-(-c*Math.cos(u+Proj4js.common.PI/3)-r/3/h)*Proj4js.common.PI,Math.abs(e)0&&(e=2*Math.atan(o*Proj4js.common.srat(this.e*Math.sin(t.y),-.5*this.e))-Proj4js.common.HALF_PI,!(i>Math.abs(e-t.y)));--n)t.y=e;return n?(t.x=s,t.y=e,t):(Proj4js.reportError("gauss:inverse:convergence failed"),null)}},Proj4js.Proj.omerc={init:function(){this.mode||(this.mode=0),this.lon1||(this.lon1=0,this.mode=1),this.lon2||(this.lon2=0),this.lat2||(this.lat2=0);var t=this.b/this.a,i=1-Math.pow(t,2);Math.sqrt(i),this.sin_p20=Math.sin(this.lat0),this.cos_p20=Math.cos(this.lat0),this.con=1-this.es*this.sin_p20*this.sin_p20,this.com=Math.sqrt(1-i),this.bl=Math.sqrt(1+this.es*Math.pow(this.cos_p20,4)/(1-i)),this.al=this.a*this.bl*this.k0*this.com/this.con,Math.abs(this.lat0)0?this.lat0>=0?this.d+Math.sqrt(this.d*this.d-1):this.d-Math.sqrt(this.d*this.d-1):this.d,this.el=this.f*Math.pow(this.ts,this.bl)),0!=this.mode?(this.g=.5*(this.f-1/this.f),this.gama=Proj4js.common.asinz(Math.sin(this.alpha)/this.d),this.longc=this.longc-Proj4js.common.asinz(this.g*Math.tan(this.gama))/this.bl,this.con=Math.abs(this.lat0),this.con>Proj4js.common.EPSLN&&Math.abs(this.con-Proj4js.common.HALF_PI)>Proj4js.common.EPSLN?(this.singam=Math.sin(this.gama),this.cosgam=Math.cos(this.gama),this.sinaz=Math.sin(this.alpha),this.cosaz=Math.cos(this.alpha),this.u=this.lat0>=0?this.al/this.bl*Math.atan(Math.sqrt(this.d*this.d-1)/this.cosaz):-(this.al/this.bl)*Math.atan(Math.sqrt(this.d*this.d-1)/this.cosaz)):Proj4js.reportError("omerc:Init:DataError")):(this.sinphi=Math.sin(this.at1),this.ts1=Proj4js.common.tsfnz(this.e,this.lat1,this.sinphi),this.sinphi=Math.sin(this.lat2),this.ts2=Proj4js.common.tsfnz(this.e,this.lat2,this.sinphi),this.h=Math.pow(this.ts1,this.bl),this.l=Math.pow(this.ts2,this.bl),this.f=this.el/this.h,this.g=.5*(this.f-1/this.f),this.j=(this.el*this.el-this.l*this.h)/(this.el*this.el+this.l*this.h),this.p=(this.l-this.h)/(this.l+this.h),this.dlon=this.lon1-this.lon2,this.dlon<-Proj4js.common.PI&&(this.lon2=this.lon2-2*Proj4js.common.PI),this.dlon>Proj4js.common.PI&&(this.lon2=this.lon2+2*Proj4js.common.PI),this.dlon=this.lon1-this.lon2,this.longc=.5*(this.lon1+this.lon2)-Math.atan(this.j*Math.tan(.5*this.bl*this.dlon)/this.p)/this.bl,this.dlon=Proj4js.common.adjust_lon(this.lon1-this.longc),this.gama=Math.atan(Math.sin(this.bl*this.dlon)/this.g),this.alpha=Proj4js.common.asinz(this.d*Math.sin(this.gama)),Math.abs(this.lat1-this.lat2)<=Proj4js.common.EPSLN?Proj4js.reportError("omercInitDataError"):this.con=Math.abs(this.lat1),this.con<=Proj4js.common.EPSLN||Math.abs(this.con-Proj4js.common.HALF_PI)<=Proj4js.common.EPSLN?Proj4js.reportError("omercInitDataError"):Math.abs(Math.abs(this.lat0)-Proj4js.common.HALF_PI)<=Proj4js.common.EPSLN&&Proj4js.reportError("omercInitDataError"),this.singam=Math.sin(this.gam),this.cosgam=Math.cos(this.gam),this.sinaz=Math.sin(this.alpha),this.cosaz=Math.cos(this.alpha),this.u=this.lat0>=0?this.al/this.bl*Math.atan(Math.sqrt(this.d*this.d-1)/this.cosaz):-(this.al/this.bl)*Math.atan(Math.sqrt(this.d*this.d-1)/this.cosaz))},forward:function(t){var i,s,e,o,n,a,r,h,l,c,m,u=t.x,d=t.y;i=Math.sin(d),c=Proj4js.common.adjust_lon(u-this.longc),a=Math.sin(this.bl*c),Math.abs(Math.abs(d)-Proj4js.common.HALF_PI)>Proj4js.common.EPSLN?(m=Proj4js.common.tsfnz(this.e,d,i),o=this.el/Math.pow(m,this.bl),l=.5*(o-1/o),s=.5*(o+1/o),r=(l*this.singam-a*this.cosgam)/s,e=Math.cos(this.bl*c),1e-7>Math.abs(e)?n=this.al*this.bl*c:(n=this.al*Math.atan((l*this.cosgam+a*this.singam)/e)/this.bl,0>e&&(n+=Proj4js.common.PI*this.al/this.bl))):(r=d>=0?this.singam:-this.singam,n=this.al*d/this.bl),Math.abs(Math.abs(r)-1)<=Proj4js.common.EPSLN&&Proj4js.reportError("omercFwdInfinity"),h=.5*this.al*Math.log((1-r)/(1+r))/this.bl,n-=this.u;var p=this.x0+h*this.cosaz+n*this.sinaz,_=this.y0+n*this.cosaz-h*this.sinaz;return t.x=p,t.y=_,t},inverse:function(t){var i,s,e,o,n,a,r,h,l,c,m,u,d;return t.x-=this.x0,t.y-=this.y0,d=0,o=t.x*this.cosaz-t.y*this.sinaz,n=t.y*this.cosaz+t.x*this.sinaz,n+=this.u,a=Math.exp(-this.bl*o/this.al),r=.5*(a-1/a),s=.5*(a+1/a),l=Math.sin(this.bl*n/this.al),c=(l*this.cosgam+r*this.singam)/s,Math.abs(Math.abs(c)-1)<=Proj4js.common.EPSLN?(m=this.longc,u=c>=0?Proj4js.common.HALF_PI:-Proj4js.common.HALF_PI):(e=1/this.bl,h=Math.pow(this.el/Math.sqrt((1+c)/(1-c)),e),u=Proj4js.common.phi2z(this.e,h),i=this.longc-Math.atan2(r*this.cosgam-l*this.singam,e)/this.bl,m=Proj4js.common.adjust_lon(i)),t.x=m,t.y=u,t}},Proj4js.Proj.lcc={init:function(){if(this.lat2||(this.lat2=this.lat0),this.k0||(this.k0=1),Math.abs(this.lat1+this.lat2)Proj4js.common.EPSLN?Math.log(e/r)/Math.log(o/h):i,this.f0=e/(this.ns*Math.pow(o,this.ns)),this.rh=this.a*this.f0*Math.pow(l,this.ns),this.title||(this.title="Lambert Conformal Conic")},forward:function(t){var i=t.x,s=t.y;if(!(90>=s&&s>=-90&&180>=i&&i>=-180))return Proj4js.reportError("lcc:forward: llInputOutOfRange: "+i+" : "+s),null;var e,o,n=Math.abs(Math.abs(s)-Proj4js.common.HALF_PI);if(n>Proj4js.common.EPSLN)e=Proj4js.common.tsfnz(this.e,s,Math.sin(s)),o=this.a*this.f0*Math.pow(e,this.ns);else{if(n=s*this.ns,0>=n)return Proj4js.reportError("lcc:forward: No Projection"),null;o=0}var a=this.ns*Proj4js.common.adjust_lon(i-this.long0);return t.x=this.k0*o*Math.sin(a)+this.x0,t.y=this.k0*(this.rh-o*Math.cos(a))+this.y0,t},inverse:function(t){var i,s,e,o,n,a=(t.x-this.x0)/this.k0,r=this.rh-(t.y-this.y0)/this.k0;this.ns>0?(i=Math.sqrt(a*a+r*r),s=1):(i=-Math.sqrt(a*a+r*r),s=-1);var h=0;if(0!=i&&(h=Math.atan2(s*a,s*r)),0!=i||this.ns>0){if(s=1/this.ns,e=Math.pow(i/(this.a*this.f0),s),o=Proj4js.common.phi2z(this.e,e),-9999==o)return null}else o=-Proj4js.common.HALF_PI;return n=Proj4js.common.adjust_lon(h/this.ns+this.long0),t.x=n,t.y=o,t}},Proj4js.Proj.laea={S_POLE:1,N_POLE:2,EQUIT:3,OBLIQ:4,init:function(){var t=Math.abs(this.lat0);if(this.mode=Math.abs(t-Proj4js.common.HALF_PI)this.lat0?this.S_POLE:this.N_POLE:Math.abs(t)0){var i;switch(this.qp=Proj4js.common.qsfnz(this.e,1),this.mmf=.5/(1-this.es),this.apa=this.authset(this.es),this.mode){case this.N_POLE:case this.S_POLE:this.dd=1;break;case this.EQUIT:this.rq=Math.sqrt(.5*this.qp),this.dd=1/this.rq,this.xmf=1,this.ymf=.5*this.qp;break;case this.OBLIQ:this.rq=Math.sqrt(.5*this.qp),i=Math.sin(this.lat0),this.sinb1=Proj4js.common.qsfnz(this.e,i)/this.qp,this.cosb1=Math.sqrt(1-this.sinb1*this.sinb1),this.dd=Math.cos(this.lat0)/(Math.sqrt(1-this.es*i*i)*this.rq*this.cosb1),this.ymf=(this.xmf=this.rq)/this.dd,this.xmf*=this.dd}}else this.mode==this.OBLIQ&&(this.sinph0=Math.sin(this.lat0),this.cosph0=Math.cos(this.lat0))},forward:function(t){var i,s,e=t.x,o=t.y;if(e=Proj4js.common.adjust_lon(e-this.long0),this.sphere){var n,a,r;switch(r=Math.sin(o),a=Math.cos(o),n=Math.cos(e),this.mode){case this.OBLIQ:case this.EQUIT:if(s=this.mode==this.EQUIT?1+a*n:1+this.sinph0*r+this.cosph0*a*n,Proj4js.common.EPSLN>=s)return Proj4js.reportError("laea:fwd:y less than eps"),null;s=Math.sqrt(2/s),i=s*a*Math.sin(e),s*=this.mode==this.EQUIT?r:this.cosph0*r-this.sinph0*a*n;break;case this.N_POLE:n=-n;case this.S_POLE:if(Math.abs(o+this.phi0)=0?(i=(u=Math.sqrt(l))*h,s=n*(this.mode==this.S_POLE?u:-u)):i=s=0}}return t.x=this.a*i+this.x0,t.y=this.a*s+this.y0,t},inverse:function(t){t.x-=this.x0,t.y-=this.y0;var i,s,e=t.x/this.a,o=t.y/this.a;if(this.sphere){var n,a=0,r=0;if(n=Math.sqrt(e*e+o*o),s=.5*n,s>1)return Proj4js.reportError("laea:Inv:DataError"),null;switch(s=2*Math.asin(s),(this.mode==this.OBLIQ||this.mode==this.EQUIT)&&(r=Math.sin(s),a=Math.cos(s)),this.mode){case this.EQUIT:s=Math.abs(n)<=Proj4js.common.EPSLN?0:Math.asin(o*r/n),e*=r,o=a*n;break;case this.OBLIQ:s=Math.abs(n)<=Proj4js.common.EPSLN?this.phi0:Math.asin(a*this.sinph0+o*r*this.cosph0/n),e*=r*this.cosph0,o=(a-Math.sin(s)*this.sinph0)*n;break;case this.N_POLE:o=-o,s=Proj4js.common.HALF_PI-s;break;case this.S_POLE:s-=Proj4js.common.HALF_PI}i=0!=o||this.mode!=this.EQUIT&&this.mode!=this.OBLIQ?Math.atan2(e,o):0}else{var h,l,c,m,u=0;switch(this.mode){case this.EQUIT:case this.OBLIQ:if(e/=this.dd,o*=this.dd,m=Math.sqrt(e*e+o*o),Proj4js.common.EPSLN>m)return t.x=0,t.y=this.phi0,t;l=2*Math.asin(.5*m/this.rq),h=Math.cos(l),e*=l=Math.sin(l),this.mode==this.OBLIQ?(u=h*this.sinb1+o*l*this.cosb1/m,c=this.qp*u,o=m*this.cosb1*h-o*this.sinb1*l):(u=o*l/m,c=this.qp*u,o=m*h);break;case this.N_POLE:o=-o;case this.S_POLE:if(c=e*e+o*o,!c)return t.x=0,t.y=this.phi0,t;u=1-c/this.qp,this.mode==this.S_POLE&&(u=-u)}i=Math.atan2(e,o),s=this.authlat(Math.asin(u),this.apa)}return t.x=Proj4js.common.adjust_lon(this.long0+i),t.y=s,t},P00:.3333333333333333,P01:.17222222222222222,P02:.10257936507936508,P10:.06388888888888888,P11:.0664021164021164,P20:.016415012942191543,authset:function(t){var i,s=[];return s[0]=t*this.P00,i=t*t,s[0]+=i*this.P01,s[1]=i*this.P10,i*=t,s[0]+=i*this.P02,s[1]+=i*this.P11,s[2]=i*this.P20,s},authlat:function(t,i){var s=t+t;return t+i[0]*Math.sin(s)+i[1]*Math.sin(s+s)+i[2]*Math.sin(s+s+s)}},Proj4js.Proj.aeqd={init:function(){this.sin_p12=Math.sin(this.lat0),this.cos_p12=Math.cos(this.lat0)},forward:function(t){var i=t.x;t.y;var s,e=Math.sin(t.y),o=Math.cos(t.y),n=Proj4js.common.adjust_lon(i-this.long0),a=Math.cos(n),r=this.sin_p12*e+this.cos_p12*o*a;if(Math.abs(Math.abs(r)-1)r)return Proj4js.reportError("aeqd:Fwd:PointError"),void 0}else{var h=Math.acos(r);s=h/Math.sin(h)}return t.x=this.x0+this.a*s*o*Math.sin(n),t.y=this.y0+this.a*s*(this.cos_p12*e-this.sin_p12*o*a),t},inverse:function(t){t.x-=this.x0,t.y-=this.y0;var i=Math.sqrt(t.x*t.x+t.y*t.y);if(i>2*Proj4js.common.HALF_PI*this.a)return Proj4js.reportError("aeqdInvDataError"),void 0;var s,e=i/this.a,o=Math.sin(e),n=Math.cos(e),a=this.long0;if(Math.abs(i)<=Proj4js.common.EPSLN)s=this.lat0;else{s=Proj4js.common.asinz(n*this.sin_p12+t.y*o*this.cos_p12/i);var r=Math.abs(this.lat0)-Proj4js.common.HALF_PI;Math.abs(r)<=Proj4js.common.EPSLN?a=this.lat0>=0?Proj4js.common.adjust_lon(this.long0+Math.atan2(t.x,-t.y)):Proj4js.common.adjust_lon(this.long0-Math.atan2(-t.x,t.y)):(r=n-this.sin_p12*Math.sin(s),Math.abs(r)=50&&Proj4js.reportError("moll:Fwd:IterationError")}o/=2,Proj4js.common.PI/2-Math.abs(s).999999999999&&(s=.999999999999);var i=Math.asin(s),e=Proj4js.common.adjust_lon(this.long0+t.x/(.900316316158*this.a*Math.cos(i)));-Proj4js.common.PI>e&&(e=-Proj4js.common.PI),e>Proj4js.common.PI&&(e=Proj4js.common.PI),s=(2*i+Math.sin(2*i))/Proj4js.common.PI,Math.abs(s)>1&&(s=1);var o=Math.asin(s);return t.x=e,t.y=o,t}},function(t,i,s){var e,o;typeof exports!=s+""?e=exports:(o=t.L,e={},e.noConflict=function(){return t.L=o,this},t.L=e),e.version="0.5.1",e.Util={extend:function(t){var i,s,e,o,n=Array.prototype.slice.call(arguments,1);for(s=0,e=n.length;e>s;s++){o=n[s]||{};for(i in o)o.hasOwnProperty(i)&&(t[i]=o[i])}return t},bind:function(t,i){var s=arguments.length>2?Array.prototype.slice.call(arguments,2):null;return function(){return t.apply(i,s||arguments)}},stamp:function(){var t=0,i="_leaflet_id";return function(s){return s[i]=s[i]||++t,s[i]}}(),limitExecByInterval:function(t,i,e){var o,n;return function a(){var r=arguments;return o?(n=!0,s):(o=!0,setTimeout(function(){o=!1,n&&(a.apply(e,r),n=!1)},i),t.apply(e,r),s)}},falseFn:function(){return!1},formatNum:function(t,i){var s=Math.pow(10,i||5);return Math.round(t*s)/s},splitWords:function(t){return t.replace(/^\s+|\s+$/g,"").split(/\s+/)},setOptions:function(t,i){return t.options=e.extend({},t.options,i),t.options},getParamString:function(t,i){var s=[];for(var e in t)t.hasOwnProperty(e)&&s.push(e+"="+t[e]);return(i&&-1!==i.indexOf("?")?"&":"?")+s.join("&")},template:function(t,i){return t.replace(/\{ *([\w_]+) *\}/g,function(t,s){var e=i[s];if(!i.hasOwnProperty(s))throw Error("No value provided for variable "+t);return e})},isArray:function(t){return"[object Array]"===Object.prototype.toString.call(t)},emptyImageUrl:"data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs="},function(){function i(i){var s,e,o=["webkit","moz","o","ms"];for(s=0;o.length>s&&!e;s++)e=t[o[s]+i];return e}function o(i){var s=+new Date,e=Math.max(0,16-(s-n));return n=s+e,t.setTimeout(i,e)}var n=0,a=t.requestAnimationFrame||i("RequestAnimationFrame")||o,r=t.cancelAnimationFrame||i("CancelAnimationFrame")||i("CancelRequestAnimationFrame")||function(i){t.clearTimeout(i)};e.Util.requestAnimFrame=function(i,n,r,h){return i=e.bind(i,n),r&&a===o?(i(),s):a.call(t,i,h)},e.Util.cancelAnimFrame=function(i){i&&r.call(t,i)}}(),e.extend=e.Util.extend,e.bind=e.Util.bind,e.stamp=e.Util.stamp,e.setOptions=e.Util.setOptions,e.Class=function(){},e.Class.extend=function(t){var i=function(){this.initialize&&this.initialize.apply(this,arguments),this._initHooks&&this.callInitHooks()},s=function(){};s.prototype=this.prototype;var o=new s;o.constructor=i,i.prototype=o;for(var n in this)this.hasOwnProperty(n)&&"prototype"!==n&&(i[n]=this[n]);t.statics&&(e.extend(i,t.statics),delete t.statics),t.includes&&(e.Util.extend.apply(null,[o].concat(t.includes)),delete t.includes),t.options&&o.options&&(t.options=e.extend({},o.options,t.options)),e.extend(o,t),o._initHooks=[];var a=this;return o.callInitHooks=function(){if(!this._initHooksCalled){a.prototype.callInitHooks&&a.prototype.callInitHooks.call(this),this._initHooksCalled=!0;for(var t=0,i=o._initHooks.length;i>t;t++)o._initHooks[t].call(this)}},i},e.Class.include=function(t){e.extend(this.prototype,t)},e.Class.mergeOptions=function(t){e.extend(this.prototype.options,t)},e.Class.addInitHook=function(t){var i=Array.prototype.slice.call(arguments,1),s="function"==typeof t?t:function(){this[t].apply(this,i)};this.prototype._initHooks=this.prototype._initHooks||[],this.prototype._initHooks.push(s)};var n="_leaflet_events";e.Mixin={},e.Mixin.Events={addEventListener:function(t,i,s){var o,a,r,h=this[n]=this[n]||{};if("object"==typeof t){for(o in t)t.hasOwnProperty(o)&&this.addEventListener(o,t[o],i);return this}for(t=e.Util.splitWords(t),a=0,r=t.length;r>a;a++)h[t[a]]=h[t[a]]||[],h[t[a]].push({action:i,context:s||this});return this},hasEventListeners:function(t){return n in this&&t in this[n]&&this[n][t].length>0},removeEventListener:function(t,i,s){var o,a,r,h,l,c=this[n];if("object"==typeof t){for(o in t)t.hasOwnProperty(o)&&this.removeEventListener(o,t[o],i);return this}for(t=e.Util.splitWords(t),a=0,r=t.length;r>a;a++)if(this.hasEventListeners(t[a]))for(h=c[t[a]],l=h.length-1;l>=0;l--)i&&h[l].action!==i||s&&h[l].context!==s||h.splice(l,1);return this},fireEvent:function(t,i){if(!this.hasEventListeners(t))return this;for(var s=e.extend({type:t,target:this},i),o=this[n][t].slice(),a=0,r=o.length;r>a;a++)o[a].action.call(o[a].context||this,s);return this}},e.Mixin.Events.on=e.Mixin.Events.addEventListener,e.Mixin.Events.off=e.Mixin.Events.removeEventListener,e.Mixin.Events.fire=e.Mixin.Events.fireEvent,function(){var o=!!t.ActiveXObject,n=o&&!t.XMLHttpRequest,a=o&&!i.querySelector,r=navigator.userAgent.toLowerCase(),h=-1!==r.indexOf("webkit"),l=-1!==r.indexOf("chrome"),c=-1!==r.indexOf("android"),m=-1!==r.search("android [23]"),u=typeof orientation!=s+"",d=t.navigator&&t.navigator.msPointerEnabled&&t.navigator.msMaxTouchPoints,p="devicePixelRatio"in t&&t.devicePixelRatio>1||"matchMedia"in t&&t.matchMedia("(min-resolution:144dpi)")&&t.matchMedia("(min-resolution:144dpi)").matches,_=i.documentElement,f=o&&"transition"in _.style,P="WebKitCSSMatrix"in t&&"m11"in new t.WebKitCSSMatrix,y="MozPerspective"in _.style,g="OTransition"in _.style,L=!t.L_DISABLE_3D&&(f||P||y||g),v=!t.L_NO_TOUCH&&function(){var t="ontouchstart";if(d||t in _)return!0;var s=i.createElement("div"),e=!1;return s.setAttribute?(s.setAttribute(t,"return;"),"function"==typeof s[t]&&(e=!0),s.removeAttribute(t),s=null,e):!1}();e.Browser={ie:o,ie6:n,ie7:a,webkit:h,android:c,android23:m,chrome:l,ie3d:f,webkit3d:P,gecko3d:y,opera3d:g,any3d:L,mobile:u,mobileWebkit:u&&h,mobileWebkit3d:u&&P,mobileOpera:u&&t.opera,touch:v,msTouch:d,retina:p}}(),e.Point=function(t,i,s){this.x=s?Math.round(t):t,this.y=s?Math.round(i):i},e.Point.prototype={clone:function(){return new e.Point(this.x,this.y)},add:function(t){return this.clone()._add(e.point(t))},_add:function(t){return this.x+=t.x,this.y+=t.y,this},subtract:function(t){return this.clone()._subtract(e.point(t))},_subtract:function(t){return this.x-=t.x,this.y-=t.y,this},divideBy:function(t){return this.clone()._divideBy(t)},_divideBy:function(t){return this.x/=t,this.y/=t,this},multiplyBy:function(t){return this.clone()._multiplyBy(t)},_multiplyBy:function(t){return this.x*=t,this.y*=t,this},round:function(){return this.clone()._round()},_round:function(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this},floor:function(){return this.clone()._floor()},_floor:function(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this},distanceTo:function(t){t=e.point(t);var i=t.x-this.x,s=t.y-this.y;return Math.sqrt(i*i+s*s)},equals:function(t){return t.x===this.x&&t.y===this.y},toString:function(){return"Point("+e.Util.formatNum(this.x)+", "+e.Util.formatNum(this.y)+")"}},e.point=function(t,i,s){return t instanceof e.Point?t:e.Util.isArray(t)?new e.Point(t[0],t[1]):isNaN(t)?t:new e.Point(t,i,s)},e.Bounds=function(t,i){if(t)for(var s=i?[t,i]:t,e=0,o=s.length;o>e;e++)this.extend(s[e])},e.Bounds.prototype={extend:function(t){return t=e.point(t),this.min||this.max?(this.min.x=Math.min(t.x,this.min.x),this.max.x=Math.max(t.x,this.max.x),this.min.y=Math.min(t.y,this.min.y),this.max.y=Math.max(t.y,this.max.y)):(this.min=t.clone(),this.max=t.clone()),this},getCenter:function(t){return new e.Point((this.min.x+this.max.x)/2,(this.min.y+this.max.y)/2,t)},getBottomLeft:function(){return new e.Point(this.min.x,this.max.y)},getTopRight:function(){return new e.Point(this.max.x,this.min.y)},getSize:function(){return this.max.subtract(this.min)},contains:function(t){var i,s;return t="number"==typeof t[0]||t instanceof e.Point?e.point(t):e.bounds(t),t instanceof e.Bounds?(i=t.min,s=t.max):i=s=t,i.x>=this.min.x&&s.x<=this.max.x&&i.y>=this.min.y&&s.y<=this.max.y},intersects:function(t){t=e.bounds(t);var i=this.min,s=this.max,o=t.min,n=t.max,a=n.x>=i.x&&o.x<=s.x,r=n.y>=i.y&&o.y<=s.y;return a&&r},isValid:function(){return!(!this.min||!this.max)}},e.bounds=function(t,i){return!t||t instanceof e.Bounds?t:new e.Bounds(t,i)},e.Transformation=function(t,i,s,e){this._a=t,this._b=i,this._c=s,this._d=e},e.Transformation.prototype={transform:function(t,i){return this._transform(t.clone(),i)},_transform:function(t,i){return i=i||1,t.x=i*(this._a*t.x+this._b),t.y=i*(this._c*t.y+this._d),t},untransform:function(t,i){return i=i||1,new e.Point((t.x/i-this._b)/this._a,(t.y/i-this._d)/this._c)}},e.DomUtil={get:function(t){return"string"==typeof t?i.getElementById(t):t},getStyle:function(t,s){var e=t.style[s];if(!e&&t.currentStyle&&(e=t.currentStyle[s]),(!e||"auto"===e)&&i.defaultView){var o=i.defaultView.getComputedStyle(t,null);e=o?o[s]:null}return"auto"===e?null:e},getViewportOffset:function(t){var s,o=0,n=0,a=t,r=i.body,h=e.Browser.ie7;do{if(o+=a.offsetTop||0,n+=a.offsetLeft||0,o+=parseInt(e.DomUtil.getStyle(a,"borderTopWidth"),10)||0,n+=parseInt(e.DomUtil.getStyle(a,"borderLeftWidth"),10)||0,s=e.DomUtil.getStyle(a,"position"),a.offsetParent===r&&"absolute"===s)break;if("fixed"===s){o+=r.scrollTop||0,n+=r.scrollLeft||0;break}a=a.offsetParent}while(a);a=t;do{if(a===r)break;o-=a.scrollTop||0,n-=a.scrollLeft||0,e.DomUtil.documentIsLtr()||!e.Browser.webkit&&!h||(n+=a.scrollWidth-a.clientWidth,h&&"hidden"!==e.DomUtil.getStyle(a,"overflow-y")&&"hidden"!==e.DomUtil.getStyle(a,"overflow")&&(n+=17)),a=a.parentNode}while(a);return new e.Point(n,o)},documentIsLtr:function(){return e.DomUtil._docIsLtrCached||(e.DomUtil._docIsLtrCached=!0,e.DomUtil._docIsLtr="ltr"===e.DomUtil.getStyle(i.body,"direction")),e.DomUtil._docIsLtr},create:function(t,s,e){var o=i.createElement(t);return o.className=s,e&&e.appendChild(o),o},disableTextSelection:function(){i.selection&&i.selection.empty&&i.selection.empty(),this._onselectstart||(this._onselectstart=i.onselectstart||null,i.onselectstart=e.Util.falseFn)},enableTextSelection:function(){i.onselectstart===e.Util.falseFn&&(i.onselectstart=this._onselectstart,this._onselectstart=null)},hasClass:function(t,i){return t.className.length>0&&RegExp("(^|\\s)"+i+"(\\s|$)").test(t.className)},addClass:function(t,i){e.DomUtil.hasClass(t,i)||(t.className+=(t.className?" ":"")+i)},removeClass:function(t,i){function s(t,s){return s===i?"":t}t.className=t.className.replace(/(\S+)\s*/g,s).replace(/(^\s+|\s+$)/,"")},setOpacity:function(t,i){if("opacity"in t.style)t.style.opacity=i;else if("filter"in t.style){var s=!1,e="DXImageTransform.Microsoft.Alpha";try{s=t.filters.item(e)}catch(o){}i=Math.round(100*i),s?(s.Enabled=100!==i,s.Opacity=i):t.style.filter+=" progid:"+e+"(opacity="+i+")"}},testProp:function(t){for(var s=i.documentElement.style,e=0;t.length>e;e++)if(t[e]in s)return t[e];return!1},getTranslateString:function(t){var i=e.Browser.webkit3d,s="translate"+(i?"3d":"")+"(",o=(i?",0":"")+")";return s+t.x+"px,"+t.y+"px"+o},getScaleString:function(t,i){var s=e.DomUtil.getTranslateString(i.add(i.multiplyBy(-1*t))),o=" scale("+t+") ";return s+o},setPosition:function(t,i,s){t._leaflet_pos=i,!s&&e.Browser.any3d?(t.style[e.DomUtil.TRANSFORM]=e.DomUtil.getTranslateString(i),e.Browser.mobileWebkit3d&&(t.style.WebkitBackfaceVisibility="hidden")):(t.style.left=i.x+"px",t.style.top=i.y+"px")},getPosition:function(t){return t._leaflet_pos}},e.DomUtil.TRANSFORM=e.DomUtil.testProp(["transform","WebkitTransform","OTransform","MozTransform","msTransform"]),e.DomUtil.TRANSITION=e.DomUtil.testProp(["webkitTransition","transition","OTransition","MozTransition","msTransition"]),e.DomUtil.TRANSITION_END="webkitTransition"===e.DomUtil.TRANSITION||"OTransition"===e.DomUtil.TRANSITION?e.DomUtil.TRANSITION+"End":"transitionend",e.LatLng=function(t,i){var s=parseFloat(t),e=parseFloat(i);if(isNaN(s)||isNaN(e))throw Error("Invalid LatLng object: ("+t+", "+i+")");this.lat=s,this.lng=e},e.extend(e.LatLng,{DEG_TO_RAD:Math.PI/180,RAD_TO_DEG:180/Math.PI,MAX_MARGIN:1e-9}),e.LatLng.prototype={equals:function(t){if(!t)return!1;t=e.latLng(t);var i=Math.max(Math.abs(this.lat-t.lat),Math.abs(this.lng-t.lng));return e.LatLng.MAX_MARGIN>=i},toString:function(t){return"LatLng("+e.Util.formatNum(this.lat,t)+", "+e.Util.formatNum(this.lng,t)+")"},distanceTo:function(t){t=e.latLng(t);var i=6378137,s=e.LatLng.DEG_TO_RAD,o=(t.lat-this.lat)*s,n=(t.lng-this.lng)*s,a=this.lat*s,r=t.lat*s,h=Math.sin(o/2),l=Math.sin(n/2),c=h*h+l*l*Math.cos(a)*Math.cos(r);return 2*i*Math.atan2(Math.sqrt(c),Math.sqrt(1-c))},wrap:function(t,i){var s=this.lng;return t=t||-180,i=i||180,s=(s+i)%(i-t)+(t>s||s===i?i:t),new e.LatLng(this.lat,s)}},e.latLng=function(t,i){return t instanceof e.LatLng?t:e.Util.isArray(t)?new e.LatLng(t[0],t[1]):isNaN(t)?t:new e.LatLng(t,i)},e.LatLngBounds=function(t,i){if(t)for(var s=i?[t,i]:t,e=0,o=s.length;o>e;e++)this.extend(s[e])},e.LatLngBounds.prototype={extend:function(t){return t="number"==typeof t[0]||"string"==typeof t[0]||t instanceof e.LatLng?e.latLng(t):e.latLngBounds(t),t instanceof e.LatLng?this._southWest||this._northEast?(this._southWest.lat=Math.min(t.lat,this._southWest.lat),this._southWest.lng=Math.min(t.lng,this._southWest.lng),this._northEast.lat=Math.max(t.lat,this._northEast.lat),this._northEast.lng=Math.max(t.lng,this._northEast.lng)):(this._southWest=new e.LatLng(t.lat,t.lng),this._northEast=new e.LatLng(t.lat,t.lng)):t instanceof e.LatLngBounds&&(this.extend(t._southWest),this.extend(t._northEast)),this},pad:function(t){var i=this._southWest,s=this._northEast,o=Math.abs(i.lat-s.lat)*t,n=Math.abs(i.lng-s.lng)*t;return new e.LatLngBounds(new e.LatLng(i.lat-o,i.lng-n),new e.LatLng(s.lat+o,s.lng+n))},getCenter:function(){return new e.LatLng((this._southWest.lat+this._northEast.lat)/2,(this._southWest.lng+this._northEast.lng)/2)},getSouthWest:function(){return this._southWest},getNorthEast:function(){return this._northEast},getNorthWest:function(){return new e.LatLng(this._northEast.lat,this._southWest.lng)},getSouthEast:function(){return new e.LatLng(this._southWest.lat,this._northEast.lng)},contains:function(t){t="number"==typeof t[0]||t instanceof e.LatLng?e.latLng(t):e.latLngBounds(t);var i,s,o=this._southWest,n=this._northEast;return t instanceof e.LatLngBounds?(i=t.getSouthWest(),s=t.getNorthEast()):i=s=t,i.lat>=o.lat&&s.lat<=n.lat&&i.lng>=o.lng&&s.lng<=n.lng},intersects:function(t){t=e.latLngBounds(t);var i=this._southWest,s=this._northEast,o=t.getSouthWest(),n=t.getNorthEast(),a=n.lat>=i.lat&&o.lat<=s.lat,r=n.lng>=i.lng&&o.lng<=s.lng;return a&&r},toBBoxString:function(){var t=this._southWest,i=this._northEast;return[t.lng,t.lat,i.lng,i.lat].join(",")},equals:function(t){return t?(t=e.latLngBounds(t),this._southWest.equals(t.getSouthWest())&&this._northEast.equals(t.getNorthEast())):!1},isValid:function(){return!(!this._southWest||!this._northEast)}},e.latLngBounds=function(t,i){return!t||t instanceof e.LatLngBounds?t:new e.LatLngBounds(t,i)},e.Projection={},e.Projection.SphericalMercator={MAX_LATITUDE:85.0511287798,project:function(t){var i=e.LatLng.DEG_TO_RAD,s=this.MAX_LATITUDE,o=Math.max(Math.min(s,t.lat),-s),n=t.lng*i,a=o*i;return a=Math.log(Math.tan(Math.PI/4+a/2)),new e.Point(n,a)},unproject:function(t){var i=e.LatLng.RAD_TO_DEG,s=t.x*i,o=(2*Math.atan(Math.exp(t.y))-Math.PI/2)*i;return new e.LatLng(o,s)}},e.Projection.LonLat={project:function(t){return new e.Point(t.lng,t.lat)},unproject:function(t){return new e.LatLng(t.y,t.x)}},e.CRS={latLngToPoint:function(t,i){var s=this.projection.project(t),e=this.scale(i);return this.transformation._transform(s,e)},pointToLatLng:function(t,i){var s=this.scale(i),e=this.transformation.untransform(t,s);return this.projection.unproject(e)},project:function(t){return this.projection.project(t)},scale:function(t){return 256*Math.pow(2,t)}},e.CRS.Simple=e.extend({},e.CRS,{projection:e.Projection.LonLat,transformation:new e.Transformation(1,0,-1,0),scale:function(t){return Math.pow(2,t)}}),e.CRS.EPSG3857=e.extend({},e.CRS,{code:"EPSG:3857",projection:e.Projection.SphericalMercator,transformation:new e.Transformation(.5/Math.PI,.5,-.5/Math.PI,.5),project:function(t){var i=this.projection.project(t),s=6378137;return i.multiplyBy(s)}}),e.CRS.EPSG900913=e.extend({},e.CRS.EPSG3857,{code:"EPSG:900913"}),e.CRS.EPSG4326=e.extend({},e.CRS,{code:"EPSG:4326",projection:e.Projection.LonLat,transformation:new e.Transformation(1/360,.5,-1/360,.5)}),e.Map=e.Class.extend({includes:e.Mixin.Events,options:{crs:e.CRS.EPSG3857,fadeAnimation:e.DomUtil.TRANSITION&&!e.Browser.android23,trackResize:!0,markerZoomAnimation:e.DomUtil.TRANSITION&&e.Browser.any3d},initialize:function(t,i){i=e.setOptions(this,i),this._initContainer(t),this._initLayout(),this.callInitHooks(),this._initEvents(),i.maxBounds&&this.setMaxBounds(i.maxBounds),i.center&&i.zoom!==s&&this.setView(e.latLng(i.center),i.zoom,!0),this._initLayers(i.layers)},setView:function(t,i){return this._resetView(e.latLng(t),this._limitZoom(i)),this},setZoom:function(t){return this.setView(this.getCenter(),t)},zoomIn:function(t){return this.setZoom(this._zoom+(t||1))},zoomOut:function(t){return this.setZoom(this._zoom-(t||1))},fitBounds:function(t){var i=this.getBoundsZoom(t);return this.setView(e.latLngBounds(t).getCenter(),i)},fitWorld:function(){var t=new e.LatLng(-60,-170),i=new e.LatLng(85,179);return this.fitBounds(new e.LatLngBounds(t,i))},panTo:function(t){return this.setView(t,this._zoom)},panBy:function(t){return this.fire("movestart"),this._rawPanBy(e.point(t)),this.fire("move"),this.fire("moveend")},setMaxBounds:function(t){if(t=e.latLngBounds(t),this.options.maxBounds=t,!t)return this._boundsMinZoom=null,this;var i=this.getBoundsZoom(t,!0);return this._boundsMinZoom=i,this._loaded&&(i>this._zoom?this.setView(t.getCenter(),i):this.panInsideBounds(t)),this},panInsideBounds:function(t){t=e.latLngBounds(t);var i=this.getBounds(),s=this.project(i.getSouthWest()),o=this.project(i.getNorthEast()),n=this.project(t.getSouthWest()),a=this.project(t.getNorthEast()),r=0,h=0;return o.ya.x&&(r=a.x-o.x),s.y>n.y&&(h=n.y-s.y),s.x=r);return m&&i?null:i?r:r-1},getSize:function(){return(!this._size||this._sizeChanged)&&(this._size=new e.Point(this._container.clientWidth,this._container.clientHeight),this._sizeChanged=!1),this._size.clone()},getPixelBounds:function(){var t=this._getTopLeftPoint();return new e.Bounds(t,t.add(this.getSize()))},getPixelOrigin:function(){return this._initialTopLeftPoint},getPanes:function(){return this._panes},getContainer:function(){return this._container},getZoomScale:function(t){var i=this.options.crs;return i.scale(t)/i.scale(this._zoom)},getScaleZoom:function(t){return this._zoom+Math.log(t)/Math.LN2},project:function(t,i){return i=i===s?this._zoom:i,this.options.crs.latLngToPoint(e.latLng(t),i)},unproject:function(t,i){return i=i===s?this._zoom:i,this.options.crs.pointToLatLng(e.point(t),i)},layerPointToLatLng:function(t){var i=e.point(t).add(this._initialTopLeftPoint);return this.unproject(i)},latLngToLayerPoint:function(t){var i=this.project(e.latLng(t))._round();return i._subtract(this._initialTopLeftPoint)},containerPointToLayerPoint:function(t){return e.point(t).subtract(this._getMapPanePos())},layerPointToContainerPoint:function(t){return e.point(t).add(this._getMapPanePos())},containerPointToLatLng:function(t){var i=this.containerPointToLayerPoint(e.point(t));return this.layerPointToLatLng(i)},latLngToContainerPoint:function(t){return this.layerPointToContainerPoint(this.latLngToLayerPoint(e.latLng(t)))},mouseEventToContainerPoint:function(t){return e.DomEvent.getMousePosition(t,this._container)},mouseEventToLayerPoint:function(t){return this.containerPointToLayerPoint(this.mouseEventToContainerPoint(t))},mouseEventToLatLng:function(t){return this.layerPointToLatLng(this.mouseEventToLayerPoint(t))},_initContainer:function(t){var i=this._container=e.DomUtil.get(t);if(i._leaflet)throw Error("Map container is already initialized.");i._leaflet=!0},_initLayout:function(){var t=this._container;e.DomUtil.addClass(t,"leaflet-container"),e.Browser.touch&&e.DomUtil.addClass(t,"leaflet-touch"),this.options.fadeAnimation&&e.DomUtil.addClass(t,"leaflet-fade-anim");var i=e.DomUtil.getStyle(t,"position");"absolute"!==i&&"relative"!==i&&"fixed"!==i&&(t.style.position="relative"),this._initPanes(),this._initControlPos&&this._initControlPos()},_initPanes:function(){var t=this._panes={};this._mapPane=t.mapPane=this._createPane("leaflet-map-pane",this._container),this._tilePane=t.tilePane=this._createPane("leaflet-tile-pane",this._mapPane),t.objectsPane=this._createPane("leaflet-objects-pane",this._mapPane),t.shadowPane=this._createPane("leaflet-shadow-pane"),t.overlayPane=this._createPane("leaflet-overlay-pane"),t.markerPane=this._createPane("leaflet-marker-pane"),t.popupPane=this._createPane("leaflet-popup-pane");var i=" leaflet-zoom-hide";this.options.markerZoomAnimation||(e.DomUtil.addClass(t.markerPane,i),e.DomUtil.addClass(t.shadowPane,i),e.DomUtil.addClass(t.popupPane,i))},_createPane:function(t,i){return e.DomUtil.create("div",t,i||this._panes.objectsPane)},_initLayers:function(t){t=t?e.Util.isArray(t)?t:[t]:[],this._layers={},this._zoomBoundLayers={},this._tileLayersNum=0;var i,s;for(i=0,s=t.length;s>i;i++)this.addLayer(t[i])},_resetView:function(t,i,s,o){var n=this._zoom!==i;o||(this.fire("movestart"),n&&this.fire("zoomstart")),this._zoom=i,this._initialTopLeftPoint=this._getNewTopLeftPoint(t),s?this._initialTopLeftPoint._add(this._getMapPanePos()):e.DomUtil.setPosition(this._mapPane,new e.Point(0,0)),this._tileLayersToLoad=this._tileLayersNum;var a=!this._loaded;this._loaded=!0,this.fire("viewreset",{hard:!s}),this.fire("move"),(n||o)&&this.fire("zoomend"),this.fire("moveend",{hard:!s}),a&&this.fire("load")},_rawPanBy:function(t){e.DomUtil.setPosition(this._mapPane,this._getMapPanePos().subtract(t))},_updateZoomLevels:function(){var t,i=1/0,e=-1/0;for(t in this._zoomBoundLayers)if(this._zoomBoundLayers.hasOwnProperty(t)){var o=this._zoomBoundLayers[t];isNaN(o.options.minZoom)||(i=Math.min(i,o.options.minZoom)),isNaN(o.options.maxZoom)||(e=Math.max(e,o.options.maxZoom))}t===s?this._layersMaxZoom=this._layersMinZoom=s:(this._layersMaxZoom=e,this._layersMinZoom=i)},_initEvents:function(){if(e.DomEvent){e.DomEvent.on(this._container,"click",this._onMouseClick,this);var i,s,o=["dblclick","mousedown","mouseup","mouseenter","mouseleave","mousemove","contextmenu"];for(i=0,s=o.length;s>i;i++)e.DomEvent.on(this._container,o[i],this._fireMouseEvent,this);this.options.trackResize&&e.DomEvent.on(t,"resize",this._onResize,this)}},_onResize:function(){e.Util.cancelAnimFrame(this._resizeRequest),this._resizeRequest=e.Util.requestAnimFrame(this.invalidateSize,this,!1,this._container)},_onMouseClick:function(t){!this._loaded||this.dragging&&this.dragging.moved()||(this.fire("preclick"),this._fireMouseEvent(t))},_fireMouseEvent:function(t){if(this._loaded){var i=t.type;if(i="mouseenter"===i?"mouseover":"mouseleave"===i?"mouseout":i,this.hasEventListeners(i)){"contextmenu"===i&&e.DomEvent.preventDefault(t);var s=this.mouseEventToContainerPoint(t),o=this.containerPointToLayerPoint(s),n=this.layerPointToLatLng(o);this.fire(i,{latlng:n,layerPoint:o,containerPoint:s,originalEvent:t})}}},_onTileLayerLoad:function(){this._tileLayersToLoad--,this._tileLayersNum&&!this._tileLayersToLoad&&this._tileBg&&(clearTimeout(this._clearTileBgTimer),this._clearTileBgTimer=setTimeout(e.bind(this._clearTileBg,this),500))},whenReady:function(t,i){return this._loaded?t.call(i||this,this):this.on("load",t,i),this},_getMapPanePos:function(){return e.DomUtil.getPosition(this._mapPane)},_getTopLeftPoint:function(){if(!this._loaded)throw Error("Set map center and zoom first.");return this._initialTopLeftPoint.subtract(this._getMapPanePos())},_getNewTopLeftPoint:function(t,i){var s=this.getSize()._divideBy(2);return this.project(t,i)._subtract(s)._round()},_latLngToNewLayerPoint:function(t,i,s){var e=this._getNewTopLeftPoint(s,i).add(this._getMapPanePos());return this.project(t,i)._subtract(e)},_getCenterLayerPoint:function(){return this.containerPointToLayerPoint(this.getSize()._divideBy(2))},_getCenterOffset:function(t){return this.latLngToLayerPoint(t).subtract(this._getCenterLayerPoint())},_limitZoom:function(t){var i=this.getMinZoom(),s=this.getMaxZoom();return Math.max(i,Math.min(s,t))}}),e.map=function(t,i){return new e.Map(t,i)},e.Projection.Mercator={MAX_LATITUDE:85.0840591556,R_MINOR:6356752.3142,R_MAJOR:6378137,project:function(t){var i=e.LatLng.DEG_TO_RAD,s=this.MAX_LATITUDE,o=Math.max(Math.min(s,t.lat),-s),n=this.R_MAJOR,a=this.R_MINOR,r=t.lng*i*n,h=o*i,l=a/n,c=Math.sqrt(1-l*l),m=c*Math.sin(h);m=Math.pow((1-m)/(1+m),.5*c);var u=Math.tan(.5*(.5*Math.PI-h))/m;return h=-a*Math.log(u),new e.Point(r,h)},unproject:function(t){for(var i,s=e.LatLng.RAD_TO_DEG,o=this.R_MAJOR,n=this.R_MINOR,a=t.x*s/o,r=n/o,h=Math.sqrt(1-r*r),l=Math.exp(-t.y/n),c=Math.PI/2-2*Math.atan(l),m=15,u=1e-7,d=m,p=.1;Math.abs(p)>u&&--d>0;)i=h*Math.sin(c),p=Math.PI/2-2*Math.atan(l*Math.pow((1-i)/(1+i),.5*h))-c,c+=p;return new e.LatLng(c*s,a)}},e.CRS.EPSG3395=e.extend({},e.CRS,{code:"EPSG:3395",projection:e.Projection.Mercator,transformation:function(){var t=e.Projection.Mercator,i=t.R_MAJOR,s=t.R_MINOR;return new e.Transformation(.5/(Math.PI*i),.5,-.5/(Math.PI*s),.5)}()}),e.TileLayer=e.Class.extend({includes:e.Mixin.Events,options:{minZoom:0,maxZoom:18,tileSize:256,subdomains:"abc",errorTileUrl:"",attribution:"",zoomOffset:0,opacity:1,unloadInvisibleTiles:e.Browser.mobile,updateWhenIdle:e.Browser.mobile},initialize:function(t,i){i=e.setOptions(this,i),i.detectRetina&&e.Browser.retina&&i.maxZoom>0&&(i.tileSize=Math.floor(i.tileSize/2),i.zoomOffset++,i.minZoom>0&&i.minZoom--,this.options.maxZoom--),this._url=t;var s=this.options.subdomains;"string"==typeof s&&(this.options.subdomains=s.split(""))},onAdd:function(t){this._map=t,this._initContainer(),this._createTileProto(),t.on({viewreset:this._resetCallback,moveend:this._update},this),this.options.updateWhenIdle||(this._limitedUpdate=e.Util.limitExecByInterval(this._update,150,this),t.on("move",this._limitedUpdate,this)),this._reset(),this._update()},addTo:function(t){return t.addLayer(this),this},onRemove:function(t){this._container.parentNode.removeChild(this._container),t.off({viewreset:this._resetCallback,moveend:this._update},this),this.options.updateWhenIdle||t.off("move",this._limitedUpdate,this),this._container=null,this._map=null},bringToFront:function(){var t=this._map._panes.tilePane;return this._container&&(t.appendChild(this._container),this._setAutoZIndex(t,Math.max)),this},bringToBack:function(){var t=this._map._panes.tilePane;return this._container&&(t.insertBefore(this._container,t.firstChild),this._setAutoZIndex(t,Math.min)),this},getAttribution:function(){return this.options.attribution},setOpacity:function(t){return this.options.opacity=t,this._map&&this._updateOpacity(),this},setZIndex:function(t){return this.options.zIndex=t,this._updateZIndex(),this},setUrl:function(t,i){return this._url=t,i||this.redraw(),this},redraw:function(){return this._map&&(this._map._panes.tilePane.empty=!1,this._reset(!0),this._update()),this},_updateZIndex:function(){this._container&&this.options.zIndex!==s&&(this._container.style.zIndex=this.options.zIndex)},_setAutoZIndex:function(t,i){var s,e,o,n=t.children,a=-i(1/0,-1/0);for(e=0,o=n.length;o>e;e++)n[e]!==this._container&&(s=parseInt(n[e].style.zIndex,10),isNaN(s)||(a=i(a,s)));this.options.zIndex=this._container.style.zIndex=(isFinite(a)?a:0)+i(1,-1)},_updateOpacity:function(){e.DomUtil.setOpacity(this._container,this.options.opacity);var t,i=this._tiles;if(e.Browser.webkit)for(t in i)i.hasOwnProperty(t)&&(i[t].style.webkitTransform+=" translate(0,0)")},_initContainer:function(){var t=this._map._panes.tilePane;(!this._container||t.empty)&&(this._container=e.DomUtil.create("div","leaflet-layer"),this._updateZIndex(),t.appendChild(this._container),1>this.options.opacity&&this._updateOpacity())},_resetCallback:function(t){this._reset(t.hard)},_reset:function(t){var i=this._tiles;for(var s in i)i.hasOwnProperty(s)&&this.fire("tileunload",{tile:i[s]});this._tiles={},this._tilesToLoad=0,this.options.reuseTiles&&(this._unusedTiles=[]),t&&this._container&&(this._container.innerHTML=""),this._initContainer()},_update:function(){if(this._map){var t=this._map.getPixelBounds(),i=this._map.getZoom(),s=this.options.tileSize;if(!(i>this.options.maxZoom||this.options.minZoom>i)){var o=new e.Point(Math.floor(t.min.x/s),Math.floor(t.min.y/s)),n=new e.Point(Math.floor(t.max.x/s),Math.floor(t.max.y/s)),a=new e.Bounds(o,n);this._addTilesFromCenterOut(a),(this.options.unloadInvisibleTiles||this.options.reuseTiles)&&this._removeOtherTiles(a)}}},_addTilesFromCenterOut:function(t){var s,o,n,a=[],r=t.getCenter();for(s=t.min.y;t.max.y>=s;s++)for(o=t.min.x;t.max.x>=o;o++)n=new e.Point(o,s),this._tileShouldBeLoaded(n)&&a.push(n);var h=a.length;if(0!==h){a.sort(function(t,i){return t.distanceTo(r)-i.distanceTo(r)});var l=i.createDocumentFragment();for(this._tilesToLoad||this.fire("loading"),this._tilesToLoad+=h,o=0;h>o;o++)this._addTile(a[o],l);this._container.appendChild(l)}},_tileShouldBeLoaded:function(t){ -if(t.x+":"+t.y in this._tiles)return!1;if(!this.options.continuousWorld){var i=this._getWrapTileNum();if(this.options.noWrap&&(0>t.x||t.x>=i)||0>t.y||t.y>=i)return!1}return!0},_removeOtherTiles:function(t){var i,s,e,o;for(o in this._tiles)this._tiles.hasOwnProperty(o)&&(i=o.split(":"),s=parseInt(i[0],10),e=parseInt(i[1],10),(t.min.x>s||s>t.max.x||t.min.y>e||e>t.max.y)&&this._removeTile(o))},_removeTile:function(t){var i=this._tiles[t];this.fire("tileunload",{tile:i,url:i.src}),this.options.reuseTiles?(e.DomUtil.removeClass(i,"leaflet-tile-loaded"),this._unusedTiles.push(i)):i.parentNode===this._container&&this._container.removeChild(i),e.Browser.android||(i.src=e.Util.emptyImageUrl),delete this._tiles[t]},_addTile:function(t,i){var s=this._getTilePos(t),o=this._getTile();e.DomUtil.setPosition(o,s,e.Browser.chrome||e.Browser.android23),this._tiles[t.x+":"+t.y]=o,this._loadTile(o,t),o.parentNode!==this._container&&i.appendChild(o)},_getZoomForUrl:function(){var t=this.options,i=this._map.getZoom();return t.zoomReverse&&(i=t.maxZoom-i),i+t.zoomOffset},_getTilePos:function(t){var i=this._map.getPixelOrigin(),s=this.options.tileSize;return t.multiplyBy(s).subtract(i)},getTileUrl:function(t){return this._adjustTilePoint(t),e.Util.template(this._url,e.extend({s:this._getSubdomain(t),z:this._getZoomForUrl(),x:t.x,y:t.y},this.options))},_getWrapTileNum:function(){return Math.pow(2,this._getZoomForUrl())},_adjustTilePoint:function(t){var i=this._getWrapTileNum();this.options.continuousWorld||this.options.noWrap||(t.x=(t.x%i+i)%i),this.options.tms&&(t.y=i-t.y-1)},_getSubdomain:function(t){var i=(t.x+t.y)%this.options.subdomains.length;return this.options.subdomains[i]},_createTileProto:function(){var t=this._tileImg=e.DomUtil.create("img","leaflet-tile");t.style.width=t.style.height=this.options.tileSize+"px",t.galleryimg="no"},_getTile:function(){if(this.options.reuseTiles&&this._unusedTiles.length>0){var t=this._unusedTiles.pop();return this._resetTile(t),t}return this._createTile()},_resetTile:function(){},_createTile:function(){var t=this._tileImg.cloneNode(!1);return t.onselectstart=t.onmousemove=e.Util.falseFn,t},_loadTile:function(t,i){t._layer=this,t.onload=this._tileOnLoad,t.onerror=this._tileOnError,t.src=this.getTileUrl(i)},_tileLoaded:function(){this._tilesToLoad--,this._tilesToLoad||this.fire("load")},_tileOnLoad:function(){var t=this._layer;this.src!==e.Util.emptyImageUrl&&(e.DomUtil.addClass(this,"leaflet-tile-loaded"),t.fire("tileload",{tile:this,url:this.src})),t._tileLoaded()},_tileOnError:function(){var t=this._layer;t.fire("tileerror",{tile:this,url:this.src});var i=t.options.errorTileUrl;i&&(this.src=i),t._tileLoaded()}}),e.tileLayer=function(t,i){return new e.TileLayer(t,i)},e.TileLayer.WMS=e.TileLayer.extend({defaultWmsParams:{service:"WMS",request:"GetMap",version:"1.1.1",layers:"",styles:"",format:"image/jpeg",transparent:!1},initialize:function(t,i){this._url=t;var s=e.extend({},this.defaultWmsParams);s.width=s.height=i.detectRetina&&e.Browser.retina?2*this.options.tileSize:this.options.tileSize;for(var o in i)this.options.hasOwnProperty(o)||(s[o]=i[o]);this.wmsParams=s,e.setOptions(this,i)},onAdd:function(t){var i=parseFloat(this.wmsParams.version)>=1.3?"crs":"srs";this.wmsParams[i]=t.options.crs.code,e.TileLayer.prototype.onAdd.call(this,t)},getTileUrl:function(t,i){this._adjustTilePoint(t);var s=this._map,o=s.options.crs,n=this.options.tileSize,a=t.multiplyBy(n),r=a.add(new e.Point(n,n)),h=o.project(s.unproject(a,i)),l=o.project(s.unproject(r,i)),c=[h.x,l.y,l.x,h.y].join(","),m=e.Util.template(this._url,{s:this._getSubdomain(t)});return m+e.Util.getParamString(this.wmsParams,m)+"&bbox="+c},setParams:function(t,i){return e.extend(this.wmsParams,t),i||this.redraw(),this}}),e.tileLayer.wms=function(t,i){return new e.TileLayer.WMS(t,i)},e.TileLayer.Canvas=e.TileLayer.extend({options:{async:!1},initialize:function(t){e.setOptions(this,t)},redraw:function(){var t=this._tiles;for(var i in t)t.hasOwnProperty(i)&&this._redrawTile(t[i])},_redrawTile:function(t){this.drawTile(t,t._tilePoint,this._map._zoom)},_createTileProto:function(){var t=this._canvasProto=e.DomUtil.create("canvas","leaflet-tile");t.width=t.height=this.options.tileSize},_createTile:function(){var t=this._canvasProto.cloneNode(!1);return t.onselectstart=t.onmousemove=e.Util.falseFn,t},_loadTile:function(t,i){t._layer=this,t._tilePoint=i,this._redrawTile(t),this.options.async||this.tileDrawn(t)},drawTile:function(){},tileDrawn:function(t){this._tileOnLoad.call(t)}}),e.tileLayer.canvas=function(t){return new e.TileLayer.Canvas(t)},e.ImageOverlay=e.Class.extend({includes:e.Mixin.Events,options:{opacity:1},initialize:function(t,i,s){this._url=t,this._bounds=e.latLngBounds(i),e.setOptions(this,s)},onAdd:function(t){this._map=t,this._image||this._initImage(),t._panes.overlayPane.appendChild(this._image),t.on("viewreset",this._reset,this),t.options.zoomAnimation&&e.Browser.any3d&&t.on("zoomanim",this._animateZoom,this),this._reset()},onRemove:function(t){t.getPanes().overlayPane.removeChild(this._image),t.off("viewreset",this._reset,this),t.options.zoomAnimation&&t.off("zoomanim",this._animateZoom,this)},addTo:function(t){return t.addLayer(this),this},setOpacity:function(t){return this.options.opacity=t,this._updateOpacity(),this},bringToFront:function(){return this._image&&this._map._panes.overlayPane.appendChild(this._image),this},bringToBack:function(){var t=this._map._panes.overlayPane;return this._image&&t.insertBefore(this._image,t.firstChild),this},_initImage:function(){this._image=e.DomUtil.create("img","leaflet-image-layer"),this._map.options.zoomAnimation&&e.Browser.any3d?e.DomUtil.addClass(this._image,"leaflet-zoom-animated"):e.DomUtil.addClass(this._image,"leaflet-zoom-hide"),this._updateOpacity(),e.extend(this._image,{galleryimg:"no",onselectstart:e.Util.falseFn,onmousemove:e.Util.falseFn,onload:e.bind(this._onImageLoad,this),src:this._url})},_animateZoom:function(t){var i=this._map,s=this._image,o=i.getZoomScale(t.zoom),n=this._bounds.getNorthWest(),a=this._bounds.getSouthEast(),r=i._latLngToNewLayerPoint(n,t.zoom,t.center),h=i._latLngToNewLayerPoint(a,t.zoom,t.center)._subtract(r),l=r._add(h._multiplyBy(.5*(1-1/o)));s.style[e.DomUtil.TRANSFORM]=e.DomUtil.getTranslateString(l)+" scale("+o+") "},_reset:function(){var t=this._image,i=this._map.latLngToLayerPoint(this._bounds.getNorthWest()),s=this._map.latLngToLayerPoint(this._bounds.getSouthEast())._subtract(i);e.DomUtil.setPosition(t,i),t.style.width=s.x+"px",t.style.height=s.y+"px"},_onImageLoad:function(){this.fire("load")},_updateOpacity:function(){e.DomUtil.setOpacity(this._image,this.options.opacity)}}),e.imageOverlay=function(t,i,s){return new e.ImageOverlay(t,i,s)},e.Icon=e.Class.extend({options:{className:""},initialize:function(t){e.setOptions(this,t)},createIcon:function(){return this._createIcon("icon")},createShadow:function(){return this._createIcon("shadow")},_createIcon:function(t){var i=this._getIconUrl(t);if(!i){if("icon"===t)throw Error("iconUrl not set in Icon options (see the docs).");return null}var s=this._createImg(i);return this._setIconStyles(s,t),s},_setIconStyles:function(t,i){var s,o=this.options,n=e.point(o[i+"Size"]);s="shadow"===i?e.point(o.shadowAnchor||o.iconAnchor):e.point(o.iconAnchor),!s&&n&&(s=n.divideBy(2,!0)),t.className="leaflet-marker-"+i+" "+o.className,s&&(t.style.marginLeft=-s.x+"px",t.style.marginTop=-s.y+"px"),n&&(t.style.width=n.x+"px",t.style.height=n.y+"px")},_createImg:function(t){var s;return e.Browser.ie6?(s=i.createElement("div"),s.style.filter='progid:DXImageTransform.Microsoft.AlphaImageLoader(src="'+t+'")'):(s=i.createElement("img"),s.src=t),s},_getIconUrl:function(t){return e.Browser.retina&&this.options[t+"RetinaUrl"]?this.options[t+"RetinaUrl"]:this.options[t+"Url"]}}),e.icon=function(t){return new e.Icon(t)},e.Icon.Default=e.Icon.extend({options:{iconSize:new e.Point(25,41),iconAnchor:new e.Point(12,41),popupAnchor:new e.Point(1,-34),shadowSize:new e.Point(41,41)},_getIconUrl:function(t){var i=t+"Url";if(this.options[i])return this.options[i];e.Browser.retina&&"icon"===t&&(t+="@2x");var s=e.Icon.Default.imagePath;if(!s)throw Error("Couldn't autodetect L.Icon.Default.imagePath, set it manually.");return"marker-"+t+".png"}}),e.Icon.Default.imagePath=function(){var t,s,e,o,n=i.getElementsByTagName("script"),a=/\/?leaflet[\-\._]?([\w\-\._]*)\.js\??/;for(t=0,s=n.length;s>t;t++)if(e=n[t].src,o=e.match(a))return e.split(a)[0]+""}(),e.Marker=e.Class.extend({includes:e.Mixin.Events,options:{icon:new e.Icon.Default,title:"",clickable:!0,draggable:!1,zIndexOffset:0,opacity:1,riseOnHover:!1,riseOffset:250},initialize:function(t,i){e.setOptions(this,i),this._latlng=e.latLng(t)},onAdd:function(t){this._map=t,t.on("viewreset",this.update,this),this._initIcon(),this.update(),t.options.zoomAnimation&&t.options.markerZoomAnimation&&t.on("zoomanim",this._animateZoom,this)},addTo:function(t){return t.addLayer(this),this},onRemove:function(t){this._removeIcon(),this.fire("remove"),t.off({viewreset:this.update,zoomanim:this._animateZoom},this),this._map=null},getLatLng:function(){return this._latlng},setLatLng:function(t){return this._latlng=e.latLng(t),this.update(),this.fire("move",{latlng:this._latlng})},setZIndexOffset:function(t){return this.options.zIndexOffset=t,this.update(),this},setIcon:function(t){return this._map&&this._removeIcon(),this.options.icon=t,this._map&&(this._initIcon(),this.update()),this},update:function(){if(this._icon){var t=this._map.latLngToLayerPoint(this._latlng).round();this._setPos(t)}return this},_initIcon:function(){var t=this.options,i=this._map,s=i.options.zoomAnimation&&i.options.markerZoomAnimation,o=s?"leaflet-zoom-animated":"leaflet-zoom-hide",n=!1;this._icon||(this._icon=t.icon.createIcon(),t.title&&(this._icon.title=t.title),this._initInteraction(),n=1>this.options.opacity,e.DomUtil.addClass(this._icon,o),t.riseOnHover&&e.DomEvent.on(this._icon,"mouseover",this._bringToFront,this).on(this._icon,"mouseout",this._resetZIndex,this)),this._shadow||(this._shadow=t.icon.createShadow(),this._shadow&&(e.DomUtil.addClass(this._shadow,o),n=1>this.options.opacity)),n&&this._updateOpacity();var a=this._map._panes;a.markerPane.appendChild(this._icon),this._shadow&&a.shadowPane.appendChild(this._shadow)},_removeIcon:function(){var t=this._map._panes;this.options.riseOnHover&&e.DomEvent.off(this._icon,"mouseover",this._bringToFront).off(this._icon,"mouseout",this._resetZIndex),t.markerPane.removeChild(this._icon),this._shadow&&t.shadowPane.removeChild(this._shadow),this._icon=this._shadow=null},_setPos:function(t){e.DomUtil.setPosition(this._icon,t),this._shadow&&e.DomUtil.setPosition(this._shadow,t),this._zIndex=t.y+this.options.zIndexOffset,this._resetZIndex()},_updateZIndex:function(t){this._icon.style.zIndex=this._zIndex+t},_animateZoom:function(t){var i=this._map._latLngToNewLayerPoint(this._latlng,t.zoom,t.center);this._setPos(i)},_initInteraction:function(){if(this.options.clickable){var t=this._icon,i=["dblclick","mousedown","mouseover","mouseout","contextmenu"];e.DomUtil.addClass(t,"leaflet-clickable"),e.DomEvent.on(t,"click",this._onMouseClick,this);for(var s=0;i.length>s;s++)e.DomEvent.on(t,i[s],this._fireMouseEvent,this);e.Handler.MarkerDrag&&(this.dragging=new e.Handler.MarkerDrag(this),this.options.draggable&&this.dragging.enable())}},_onMouseClick:function(t){var i=this.dragging&&this.dragging.moved();(this.hasEventListeners(t.type)||i)&&e.DomEvent.stopPropagation(t),i||(this.dragging&&this.dragging._enabled||!this._map.dragging||!this._map.dragging.moved())&&this.fire(t.type,{originalEvent:t})},_fireMouseEvent:function(t){this.fire(t.type,{originalEvent:t}),"contextmenu"===t.type&&this.hasEventListeners(t.type)&&e.DomEvent.preventDefault(t),"mousedown"!==t.type&&e.DomEvent.stopPropagation(t)},setOpacity:function(t){this.options.opacity=t,this._map&&this._updateOpacity()},_updateOpacity:function(){e.DomUtil.setOpacity(this._icon,this.options.opacity),this._shadow&&e.DomUtil.setOpacity(this._shadow,this.options.opacity)},_bringToFront:function(){this._updateZIndex(this.options.riseOffset)},_resetZIndex:function(){this._updateZIndex(0)}}),e.marker=function(t,i){return new e.Marker(t,i)},e.DivIcon=e.Icon.extend({options:{iconSize:new e.Point(12,12),className:"leaflet-div-icon"},createIcon:function(){var t=i.createElement("div"),s=this.options;return s.html&&(t.innerHTML=s.html),s.bgPos&&(t.style.backgroundPosition=-s.bgPos.x+"px "+-s.bgPos.y+"px"),this._setIconStyles(t,"icon"),t},createShadow:function(){return null}}),e.divIcon=function(t){return new e.DivIcon(t)},e.Map.mergeOptions({closePopupOnClick:!0}),e.Popup=e.Class.extend({includes:e.Mixin.Events,options:{minWidth:50,maxWidth:300,maxHeight:null,autoPan:!0,closeButton:!0,offset:new e.Point(0,6),autoPanPadding:new e.Point(5,5),className:"",zoomAnimation:!0},initialize:function(t,i){e.setOptions(this,t),this._source=i,this._animated=e.Browser.any3d&&this.options.zoomAnimation},onAdd:function(t){this._map=t,this._container||this._initLayout(),this._updateContent();var i=t.options.fadeAnimation;i&&e.DomUtil.setOpacity(this._container,0),t._panes.popupPane.appendChild(this._container),t.on("viewreset",this._updatePosition,this),this._animated&&t.on("zoomanim",this._zoomAnimation,this),t.options.closePopupOnClick&&t.on("preclick",this._close,this),this._update(),i&&e.DomUtil.setOpacity(this._container,1)},addTo:function(t){return t.addLayer(this),this},openOn:function(t){return t.openPopup(this),this},onRemove:function(t){t._panes.popupPane.removeChild(this._container),e.Util.falseFn(this._container.offsetWidth),t.off({viewreset:this._updatePosition,preclick:this._close,zoomanim:this._zoomAnimation},this),t.options.fadeAnimation&&e.DomUtil.setOpacity(this._container,0),this._map=null},setLatLng:function(t){return this._latlng=e.latLng(t),this._update(),this},setContent:function(t){return this._content=t,this._update(),this},_close:function(){var t=this._map;t&&(t._popup=null,t.removeLayer(this).fire("popupclose",{popup:this}))},_initLayout:function(){var t,i="leaflet-popup",s=i+" "+this.options.className+" leaflet-zoom-"+(this._animated?"animated":"hide"),o=this._container=e.DomUtil.create("div",s);this.options.closeButton&&(t=this._closeButton=e.DomUtil.create("a",i+"-close-button",o),t.href="#close",t.innerHTML="×",e.DomEvent.on(t,"click",this._onCloseButtonClick,this));var n=this._wrapper=e.DomUtil.create("div",i+"-content-wrapper",o);e.DomEvent.disableClickPropagation(n),this._contentNode=e.DomUtil.create("div",i+"-content",n),e.DomEvent.on(this._contentNode,"mousewheel",e.DomEvent.stopPropagation),this._tipContainer=e.DomUtil.create("div",i+"-tip-container",o),this._tip=e.DomUtil.create("div",i+"-tip",this._tipContainer)},_update:function(){this._map&&(this._container.style.visibility="hidden",this._updateContent(),this._updateLayout(),this._updatePosition(),this._container.style.visibility="",this._adjustPan())},_updateContent:function(){if(this._content){if("string"==typeof this._content)this._contentNode.innerHTML=this._content;else{for(;this._contentNode.hasChildNodes();)this._contentNode.removeChild(this._contentNode.firstChild);this._contentNode.appendChild(this._content)}this.fire("contentupdate")}},_updateLayout:function(){var t=this._contentNode,i=t.style;i.width="",i.whiteSpace="nowrap";var s=t.offsetWidth;s=Math.min(s,this.options.maxWidth),s=Math.max(s,this.options.minWidth),i.width=s+1+"px",i.whiteSpace="",i.height="";var o=t.offsetHeight,n=this.options.maxHeight,a="leaflet-popup-scrolled";n&&o>n?(i.height=n+"px",e.DomUtil.addClass(t,a)):e.DomUtil.removeClass(t,a),this._containerWidth=this._container.offsetWidth},_updatePosition:function(){if(this._map){var t=this._map.latLngToLayerPoint(this._latlng),i=this._animated,s=this.options.offset;i&&e.DomUtil.setPosition(this._container,t),this._containerBottom=-s.y-(i?0:t.y),this._containerLeft=-Math.round(this._containerWidth/2)+s.x+(i?0:t.x),this._container.style.bottom=this._containerBottom+"px",this._container.style.left=this._containerLeft+"px"}},_zoomAnimation:function(t){var i=this._map._latLngToNewLayerPoint(this._latlng,t.zoom,t.center);e.DomUtil.setPosition(this._container,i)},_adjustPan:function(){if(this.options.autoPan){var t=this._map,i=this._container.offsetHeight,s=this._containerWidth,o=new e.Point(this._containerLeft,-i-this._containerBottom);this._animated&&o._add(e.DomUtil.getPosition(this._container));var n=t.layerPointToContainerPoint(o),a=this.options.autoPanPadding,r=t.getSize(),h=0,l=0;0>n.x&&(h=n.x-a.x),n.x+s>r.x&&(h=n.x+s-r.x+a.x),0>n.y&&(l=n.y-a.y),n.y+i>r.y&&(l=n.y+i-r.y+a.y),(h||l)&&t.panBy(new e.Point(h,l))}},_onCloseButtonClick:function(t){this._close(),e.DomEvent.stop(t)}}),e.popup=function(t,i){return new e.Popup(t,i)},e.Marker.include({openPopup:function(){return this._popup&&this._map&&(this._popup.setLatLng(this._latlng),this._map.openPopup(this._popup)),this},closePopup:function(){return this._popup&&this._popup._close(),this},bindPopup:function(t,i){var s=e.point(this.options.icon.options.popupAnchor)||new e.Point(0,0);return s=s.add(e.Popup.prototype.options.offset),i&&i.offset&&(s=s.add(i.offset)),i=e.extend({offset:s},i),this._popup||this.on("click",this.openPopup,this).on("remove",this.closePopup,this).on("move",this._movePopup,this),this._popup=new e.Popup(i,this).setContent(t),this},unbindPopup:function(){return this._popup&&(this._popup=null,this.off("click",this.openPopup).off("remove",this.closePopup).off("move",this._movePopup)),this},_movePopup:function(t){this._popup.setLatLng(t.latlng)}}),e.Map.include({openPopup:function(t){return this.closePopup(),this._popup=t,this.addLayer(t).fire("popupopen",{popup:this._popup})},closePopup:function(){return this._popup&&this._popup._close(),this}}),e.LayerGroup=e.Class.extend({initialize:function(t){this._layers={};var i,s;if(t)for(i=0,s=t.length;s>i;i++)this.addLayer(t[i])},addLayer:function(t){var i=e.stamp(t);return this._layers[i]=t,this._map&&this._map.addLayer(t),this},removeLayer:function(t){var i=e.stamp(t);return delete this._layers[i],this._map&&this._map.removeLayer(t),this},clearLayers:function(){return this.eachLayer(this.removeLayer,this),this},invoke:function(t){var i,s,e=Array.prototype.slice.call(arguments,1);for(i in this._layers)this._layers.hasOwnProperty(i)&&(s=this._layers[i],s[t]&&s[t].apply(s,e));return this},onAdd:function(t){this._map=t,this.eachLayer(t.addLayer,t)},onRemove:function(t){this.eachLayer(t.removeLayer,t),this._map=null},addTo:function(t){return t.addLayer(this),this},eachLayer:function(t,i){for(var s in this._layers)this._layers.hasOwnProperty(s)&&t.call(i,this._layers[s])},setZIndex:function(t){return this.invoke("setZIndex",t)}}),e.layerGroup=function(t){return new e.LayerGroup(t)},e.FeatureGroup=e.LayerGroup.extend({includes:e.Mixin.Events,statics:{EVENTS:"click dblclick mouseover mouseout mousemove contextmenu"},addLayer:function(t){return this._layers[e.stamp(t)]?this:(t.on(e.FeatureGroup.EVENTS,this._propagateEvent,this),e.LayerGroup.prototype.addLayer.call(this,t),this._popupContent&&t.bindPopup&&t.bindPopup(this._popupContent,this._popupOptions),this.fire("layeradd",{layer:t}))},removeLayer:function(t){return t.off(e.FeatureGroup.EVENTS,this._propagateEvent,this),e.LayerGroup.prototype.removeLayer.call(this,t),this._popupContent&&this.invoke("unbindPopup"),this.fire("layerremove",{layer:t})},bindPopup:function(t,i){return this._popupContent=t,this._popupOptions=i,this.invoke("bindPopup",t,i)},setStyle:function(t){return this.invoke("setStyle",t)},bringToFront:function(){return this.invoke("bringToFront")},bringToBack:function(){return this.invoke("bringToBack")},getBounds:function(){var t=new e.LatLngBounds;return this.eachLayer(function(i){t.extend(i instanceof e.Marker?i.getLatLng():i.getBounds())}),t},_propagateEvent:function(t){t.layer=t.target,t.target=this,this.fire(t.type,t)}}),e.featureGroup=function(t){return new e.FeatureGroup(t)},e.Path=e.Class.extend({includes:[e.Mixin.Events],statics:{CLIP_PADDING:e.Browser.mobile?Math.max(0,Math.min(.5,(1280/Math.max(t.innerWidth,t.innerHeight)-1)/2)):.5},options:{stroke:!0,color:"#0033ff",dashArray:null,weight:5,opacity:.5,fill:!1,fillColor:null,fillOpacity:.2,clickable:!0},initialize:function(t){e.setOptions(this,t)},onAdd:function(t){this._map=t,this._container||(this._initElements(),this._initEvents()),this.projectLatlngs(),this._updatePath(),this._container&&this._map._pathRoot.appendChild(this._container),this.fire("add"),t.on({viewreset:this.projectLatlngs,moveend:this._updatePath},this)},addTo:function(t){return t.addLayer(this),this},onRemove:function(t){t._pathRoot.removeChild(this._container),this.fire("remove"),this._map=null,e.Browser.vml&&(this._container=null,this._stroke=null,this._fill=null),t.off({viewreset:this.projectLatlngs,moveend:this._updatePath},this)},projectLatlngs:function(){},setStyle:function(t){return e.setOptions(this,t),this._container&&this._updateStyle(),this},redraw:function(){return this._map&&(this.projectLatlngs(),this._updatePath()),this}}),e.Map.include({_updatePathViewport:function(){var t=e.Path.CLIP_PADDING,i=this.getSize(),s=e.DomUtil.getPosition(this._mapPane),o=s.multiplyBy(-1)._subtract(i.multiplyBy(t)._round()),n=o.add(i.multiplyBy(1+2*t)._round());this._pathViewport=new e.Bounds(o,n)}}),e.Path.SVG_NS="http://www.w3.org/2000/svg",e.Browser.svg=!(!i.createElementNS||!i.createElementNS(e.Path.SVG_NS,"svg").createSVGRect),e.Path=e.Path.extend({statics:{SVG:e.Browser.svg},bringToFront:function(){var t=this._map._pathRoot,i=this._container;return i&&t.lastChild!==i&&t.appendChild(i),this},bringToBack:function(){var t=this._map._pathRoot,i=this._container,s=t.firstChild;return i&&s!==i&&t.insertBefore(i,s),this},getPathString:function(){},_createElement:function(t){return i.createElementNS(e.Path.SVG_NS,t)},_initElements:function(){this._map._initPathRoot(),this._initPath(),this._initStyle()},_initPath:function(){this._container=this._createElement("g"),this._path=this._createElement("path"),this._container.appendChild(this._path)},_initStyle:function(){this.options.stroke&&(this._path.setAttribute("stroke-linejoin","round"),this._path.setAttribute("stroke-linecap","round")),this.options.fill&&this._path.setAttribute("fill-rule","evenodd"),this._updateStyle()},_updateStyle:function(){this.options.stroke?(this._path.setAttribute("stroke",this.options.color),this._path.setAttribute("stroke-opacity",this.options.opacity),this._path.setAttribute("stroke-width",this.options.weight),this.options.dashArray?this._path.setAttribute("stroke-dasharray",this.options.dashArray):this._path.removeAttribute("stroke-dasharray")):this._path.setAttribute("stroke","none"),this.options.fill?(this._path.setAttribute("fill",this.options.fillColor||this.options.color),this._path.setAttribute("fill-opacity",this.options.fillOpacity)):this._path.setAttribute("fill","none")},_updatePath:function(){var t=this.getPathString();t||(t="M0 0"),this._path.setAttribute("d",t)},_initEvents:function(){if(this.options.clickable){(e.Browser.svg||!e.Browser.vml)&&this._path.setAttribute("class","leaflet-clickable"),e.DomEvent.on(this._container,"click",this._onMouseClick,this);for(var t=["dblclick","mousedown","mouseover","mouseout","mousemove","contextmenu"],i=0;t.length>i;i++)e.DomEvent.on(this._container,t[i],this._fireMouseEvent,this)}},_onMouseClick:function(t){this._map.dragging&&this._map.dragging.moved()||this._fireMouseEvent(t)},_fireMouseEvent:function(t){if(this.hasEventListeners(t.type)){var i=this._map,s=i.mouseEventToContainerPoint(t),o=i.containerPointToLayerPoint(s),n=i.layerPointToLatLng(o);this.fire(t.type,{latlng:n,layerPoint:o,containerPoint:s,originalEvent:t}),"contextmenu"===t.type&&e.DomEvent.preventDefault(t),"mousemove"!==t.type&&e.DomEvent.stopPropagation(t)}}}),e.Map.include({_initPathRoot:function(){this._pathRoot||(this._pathRoot=e.Path.prototype._createElement("svg"),this._panes.overlayPane.appendChild(this._pathRoot),this.options.zoomAnimation&&e.Browser.any3d?(this._pathRoot.setAttribute("class"," leaflet-zoom-animated"),this.on({zoomanim:this._animatePathZoom,zoomend:this._endPathZoom})):this._pathRoot.setAttribute("class"," leaflet-zoom-hide"),this.on("moveend",this._updateSvgViewport),this._updateSvgViewport())},_animatePathZoom:function(t){var i=this.getZoomScale(t.zoom),s=this._getCenterOffset(t.center)._multiplyBy(-i)._add(this._pathViewport.min);this._pathRoot.style[e.DomUtil.TRANSFORM]=e.DomUtil.getTranslateString(s)+" scale("+i+") ",this._pathZooming=!0},_endPathZoom:function(){this._pathZooming=!1},_updateSvgViewport:function(){if(!this._pathZooming){this._updatePathViewport();var t=this._pathViewport,i=t.min,s=t.max,o=s.x-i.x,n=s.y-i.y,a=this._pathRoot,r=this._panes.overlayPane;e.Browser.mobileWebkit&&r.removeChild(a),e.DomUtil.setPosition(a,i),a.setAttribute("width",o),a.setAttribute("height",n),a.setAttribute("viewBox",[i.x,i.y,o,n].join(" ")),e.Browser.mobileWebkit&&r.appendChild(a)}}}),e.Path.include({bindPopup:function(t,i){return(!this._popup||i)&&(this._popup=new e.Popup(i,this)),this._popup.setContent(t),this._popupHandlersAdded||(this.on("click",this._openPopup,this).on("remove",this.closePopup,this),this._popupHandlersAdded=!0),this},unbindPopup:function(){return this._popup&&(this._popup=null,this.off("click",this._openPopup).off("remove",this.closePopup),this._popupHandlersAdded=!1),this},openPopup:function(t){return this._popup&&(t=t||this._latlng||this._latlngs[Math.floor(this._latlngs.length/2)],this._openPopup({latlng:t})),this},closePopup:function(){return this._popup&&this._popup._close(),this},_openPopup:function(t){this._popup.setLatLng(t.latlng),this._map.openPopup(this._popup)}}),e.Browser.vml=!e.Browser.svg&&function(){try{var t=i.createElement("div");t.innerHTML='';var s=t.firstChild;return s.style.behavior="url(#default#VML)",s&&"object"==typeof s.adj}catch(e){return!1}}(),e.Path=e.Browser.svg||!e.Browser.vml?e.Path:e.Path.extend({statics:{VML:!0,CLIP_PADDING:.02},_createElement:function(){try{return i.namespaces.add("lvml","urn:schemas-microsoft-com:vml"),function(t){return i.createElement("')}}catch(t){return function(t){return i.createElement("<"+t+' xmlns="urn:schemas-microsoft.com:vml" class="lvml">')}}}(),_initPath:function(){var t=this._container=this._createElement("shape");e.DomUtil.addClass(t,"leaflet-vml-shape"),this.options.clickable&&e.DomUtil.addClass(t,"leaflet-clickable"),t.coordsize="1 1",this._path=this._createElement("path"),t.appendChild(this._path),this._map._pathRoot.appendChild(t)},_initStyle:function(){this._updateStyle()},_updateStyle:function(){var t=this._stroke,i=this._fill,s=this.options,e=this._container;e.stroked=s.stroke,e.filled=s.fill,s.stroke?(t||(t=this._stroke=this._createElement("stroke"),t.endcap="round",e.appendChild(t)),t.weight=s.weight+"px",t.color=s.color,t.opacity=s.opacity,t.dashStyle=s.dashArray?s.dashArray instanceof Array?s.dashArray.join(" "):s.dashArray.replace(/ *, */g," "):""):t&&(e.removeChild(t),this._stroke=null),s.fill?(i||(i=this._fill=this._createElement("fill"),e.appendChild(i)),i.color=s.fillColor||s.color,i.opacity=s.fillOpacity):i&&(e.removeChild(i),this._fill=null)},_updatePath:function(){var t=this._container.style;t.display="none",this._path.v=this.getPathString()+" ",t.display=""}}),e.Map.include(e.Browser.svg||!e.Browser.vml?{}:{_initPathRoot:function(){if(!this._pathRoot){var t=this._pathRoot=i.createElement("div");t.className="leaflet-vml-container",this._panes.overlayPane.appendChild(t),this.on("moveend",this._updatePathViewport),this._updatePathViewport()}}}),e.Browser.canvas=function(){return!!i.createElement("canvas").getContext}(),e.Path=e.Path.SVG&&!t.L_PREFER_CANVAS||!e.Browser.canvas?e.Path:e.Path.extend({statics:{CANVAS:!0,SVG:!1},redraw:function(){return this._map&&(this.projectLatlngs(),this._requestUpdate()),this},setStyle:function(t){return e.setOptions(this,t),this._map&&(this._updateStyle(),this._requestUpdate()),this},onRemove:function(t){t.off("viewreset",this.projectLatlngs,this).off("moveend",this._updatePath,this),this.options.clickable&&this._map.off("click",this._onClick,this),this._requestUpdate(),this._map=null},_requestUpdate:function(){this._map&&!e.Path._updateRequest&&(e.Path._updateRequest=e.Util.requestAnimFrame(this._fireMapMoveEnd,this._map))},_fireMapMoveEnd:function(){e.Path._updateRequest=null,this.fire("moveend")},_initElements:function(){this._map._initPathRoot(),this._ctx=this._map._canvasCtx},_updateStyle:function(){var t=this.options;t.stroke&&(this._ctx.lineWidth=t.weight,this._ctx.strokeStyle=t.color),t.fill&&(this._ctx.fillStyle=t.fillColor||t.color)},_drawPath:function(){var t,i,s,o,n,a;for(this._ctx.beginPath(),t=0,s=this._parts.length;s>t;t++){for(i=0,o=this._parts[t].length;o>i;i++)n=this._parts[t][i],a=(0===i?"move":"line")+"To",this._ctx[a](n.x,n.y);this instanceof e.Polygon&&this._ctx.closePath()}},_checkIfEmpty:function(){return!this._parts.length},_updatePath:function(){if(!this._checkIfEmpty()){var t=this._ctx,i=this.options;this._drawPath(),t.save(),this._updateStyle(),i.fill&&(t.globalAlpha=i.fillOpacity,t.fill()),i.stroke&&(t.globalAlpha=i.opacity,t.stroke()),t.restore()}},_initEvents:function(){this.options.clickable&&this._map.on("click",this._onClick,this)},_onClick:function(t){this._containsPoint(t.layerPoint)&&this.fire("click",{latlng:t.latlng,layerPoint:t.layerPoint,containerPoint:t.containerPoint,originalEvent:t})}}),e.Map.include(e.Path.SVG&&!t.L_PREFER_CANVAS||!e.Browser.canvas?{}:{_initPathRoot:function(){var t,s=this._pathRoot;s||(s=this._pathRoot=i.createElement("canvas"),s.style.position="absolute",t=this._canvasCtx=s.getContext("2d"),t.lineCap="round",t.lineJoin="round",this._panes.overlayPane.appendChild(s),this.options.zoomAnimation&&(this._pathRoot.className="leaflet-zoom-animated",this.on("zoomanim",this._animatePathZoom),this.on("zoomend",this._endPathZoom)),this.on("moveend",this._updateCanvasViewport),this._updateCanvasViewport())},_updateCanvasViewport:function(){if(!this._pathZooming){this._updatePathViewport();var t=this._pathViewport,i=t.min,s=t.max.subtract(i),o=this._pathRoot;e.DomUtil.setPosition(o,i),o.width=s.x,o.height=s.y,o.getContext("2d").translate(-i.x,-i.y)}}}),e.LineUtil={simplify:function(t,i){if(!i||!t.length)return t.slice();var s=i*i;return t=this._reducePoints(t,s),t=this._simplifyDP(t,s)},pointToSegmentDistance:function(t,i,s){return Math.sqrt(this._sqClosestPointOnSegment(t,i,s,!0))},closestPointOnSegment:function(t,i,s){return this._sqClosestPointOnSegment(t,i,s)},_simplifyDP:function(t,i){var e=t.length,o=typeof Uint8Array!=s+""?Uint8Array:Array,n=new o(e);n[0]=n[e-1]=1,this._simplifyDPStep(t,n,i,0,e-1);var a,r=[];for(a=0;e>a;a++)n[a]&&r.push(t[a]);return r},_simplifyDPStep:function(t,i,s,e,o){var n,a,r,h=0;for(a=e+1;o-1>=a;a++)r=this._sqClosestPointOnSegment(t[a],t[e],t[o],!0),r>h&&(n=a,h=r);h>s&&(i[n]=1,this._simplifyDPStep(t,i,s,e,n),this._simplifyDPStep(t,i,s,n,o))},_reducePoints:function(t,i){for(var s=[t[0]],e=1,o=0,n=t.length;n>e;e++)this._sqDist(t[e],t[o])>i&&(s.push(t[e]),o=e);return n-1>o&&s.push(t[n-1]),s},clipSegment:function(t,i,s,e){var o,n,a,r=e?this._lastCode:this._getBitCode(t,s),h=this._getBitCode(i,s);for(this._lastCode=h;;){if(!(r|h))return[t,i];if(r&h)return!1;o=r||h,n=this._getEdgeIntersection(t,i,o,s),a=this._getBitCode(n,s),o===r?(t=n,r=a):(i=n,h=a)}},_getEdgeIntersection:function(t,i,o,n){var a=i.x-t.x,r=i.y-t.y,h=n.min,l=n.max;return 8&o?new e.Point(t.x+a*(l.y-t.y)/r,l.y):4&o?new e.Point(t.x+a*(h.y-t.y)/r,h.y):2&o?new e.Point(l.x,t.y+r*(l.x-t.x)/a):1&o?new e.Point(h.x,t.y+r*(h.x-t.x)/a):s},_getBitCode:function(t,i){var s=0;return t.xi.max.x&&(s|=2),t.yi.max.y&&(s|=8),s},_sqDist:function(t,i){var s=i.x-t.x,e=i.y-t.y;return s*s+e*e},_sqClosestPointOnSegment:function(t,i,s,o){var n,a=i.x,r=i.y,h=s.x-a,l=s.y-r,c=h*h+l*l;return c>0&&(n=((t.x-a)*h+(t.y-r)*l)/c, -n>1?(a=s.x,r=s.y):n>0&&(a+=h*n,r+=l*n)),h=t.x-a,l=t.y-r,o?h*h+l*l:new e.Point(a,r)}},e.Polyline=e.Path.extend({initialize:function(t,i){e.Path.prototype.initialize.call(this,i),this._latlngs=this._convertLatLngs(t)},options:{smoothFactor:1,noClip:!1},projectLatlngs:function(){this._originalPoints=[];for(var t=0,i=this._latlngs.length;i>t;t++)this._originalPoints[t]=this._map.latLngToLayerPoint(this._latlngs[t])},getPathString:function(){for(var t=0,i=this._parts.length,s="";i>t;t++)s+=this._getPathPartStr(this._parts[t]);return s},getLatLngs:function(){return this._latlngs},setLatLngs:function(t){return this._latlngs=this._convertLatLngs(t),this.redraw()},addLatLng:function(t){return this._latlngs.push(e.latLng(t)),this.redraw()},spliceLatLngs:function(){var t=[].splice.apply(this._latlngs,arguments);return this._convertLatLngs(this._latlngs),this.redraw(),t},closestLayerPoint:function(t){for(var i,s,o=1/0,n=this._parts,a=null,r=0,h=n.length;h>r;r++)for(var l=n[r],c=1,m=l.length;m>c;c++){i=l[c-1],s=l[c];var u=e.LineUtil._sqClosestPointOnSegment(t,i,s,!0);o>u&&(o=u,a=e.LineUtil._sqClosestPointOnSegment(t,i,s))}return a&&(a.distance=Math.sqrt(o)),a},getBounds:function(){var t,i,s=new e.LatLngBounds,o=this.getLatLngs();for(t=0,i=o.length;i>t;t++)s.extend(o[t]);return s},_convertLatLngs:function(t){var i,s;for(i=0,s=t.length;s>i;i++){if(e.Util.isArray(t[i])&&"number"!=typeof t[i][0])return;t[i]=e.latLng(t[i])}return t},_initEvents:function(){e.Path.prototype._initEvents.call(this)},_getPathPartStr:function(t){for(var i,s=e.Path.VML,o=0,n=t.length,a="";n>o;o++)i=t[o],s&&i._round(),a+=(o?"L":"M")+i.x+" "+i.y;return a},_clipPoints:function(){var t,i,o,n=this._originalPoints,a=n.length;if(this.options.noClip)return this._parts=[n],s;this._parts=[];var r=this._parts,h=this._map._pathViewport,l=e.LineUtil;for(t=0,i=0;a-1>t;t++)o=l.clipSegment(n[t],n[t+1],h,t),o&&(r[i]=r[i]||[],r[i].push(o[0]),(o[1]!==n[t+1]||t===a-2)&&(r[i].push(o[1]),i++))},_simplifyPoints:function(){for(var t=this._parts,i=e.LineUtil,s=0,o=t.length;o>s;s++)t[s]=i.simplify(t[s],this.options.smoothFactor)},_updatePath:function(){this._map&&(this._clipPoints(),this._simplifyPoints(),e.Path.prototype._updatePath.call(this))}}),e.polyline=function(t,i){return new e.Polyline(t,i)},e.PolyUtil={},e.PolyUtil.clipPolygon=function(t,i){var s,o,n,a,r,h,l,c,m,u=[1,4,2,8],d=e.LineUtil;for(o=0,l=t.length;l>o;o++)t[o]._code=d._getBitCode(t[o],i);for(a=0;4>a;a++){for(c=u[a],s=[],o=0,l=t.length,n=l-1;l>o;n=o++)r=t[o],h=t[n],r._code&c?h._code&c||(m=d._getEdgeIntersection(h,r,c,i),m._code=d._getBitCode(m,i),s.push(m)):(h._code&c&&(m=d._getEdgeIntersection(h,r,c,i),m._code=d._getBitCode(m,i),s.push(m)),s.push(r));t=s}return t},e.Polygon=e.Polyline.extend({options:{fill:!0},initialize:function(t,i){e.Polyline.prototype.initialize.call(this,t,i),t&&e.Util.isArray(t[0])&&"number"!=typeof t[0][0]&&(this._latlngs=this._convertLatLngs(t[0]),this._holes=t.slice(1))},projectLatlngs:function(){if(e.Polyline.prototype.projectLatlngs.call(this),this._holePoints=[],this._holes){var t,i,s,o;for(t=0,s=this._holes.length;s>t;t++)for(this._holePoints[t]=[],i=0,o=this._holes[t].length;o>i;i++)this._holePoints[t][i]=this._map.latLngToLayerPoint(this._holes[t][i])}},_clipPoints:function(){var t=this._originalPoints,i=[];if(this._parts=[t].concat(this._holePoints),!this.options.noClip){for(var s=0,o=this._parts.length;o>s;s++){var n=e.PolyUtil.clipPolygon(this._parts[s],this._map._pathViewport);n.length&&i.push(n)}this._parts=i}},_getPathPartStr:function(t){var i=e.Polyline.prototype._getPathPartStr.call(this,t);return i+(e.Browser.svg?"z":"x")}}),e.polygon=function(t,i){return new e.Polygon(t,i)},function(){function t(t){return e.FeatureGroup.extend({initialize:function(t,i){this._layers={},this._options=i,this.setLatLngs(t)},setLatLngs:function(i){var s=0,e=i.length;for(this.eachLayer(function(t){e>s?t.setLatLngs(i[s++]):this.removeLayer(t)},this);e>s;)this.addLayer(new t(i[s++],this._options));return this}})}e.MultiPolyline=t(e.Polyline),e.MultiPolygon=t(e.Polygon),e.multiPolyline=function(t,i){return new e.MultiPolyline(t,i)},e.multiPolygon=function(t,i){return new e.MultiPolygon(t,i)}}(),e.Rectangle=e.Polygon.extend({initialize:function(t,i){e.Polygon.prototype.initialize.call(this,this._boundsToLatLngs(t),i)},setBounds:function(t){this.setLatLngs(this._boundsToLatLngs(t))},_boundsToLatLngs:function(t){return t=e.latLngBounds(t),[t.getSouthWest(),t.getNorthWest(),t.getNorthEast(),t.getSouthEast()]}}),e.rectangle=function(t,i){return new e.Rectangle(t,i)},e.Circle=e.Path.extend({initialize:function(t,i,s){e.Path.prototype.initialize.call(this,s),this._latlng=e.latLng(t),this._mRadius=i},options:{fill:!0},setLatLng:function(t){return this._latlng=e.latLng(t),this.redraw()},setRadius:function(t){return this._mRadius=t,this.redraw()},projectLatlngs:function(){var t=this._getLngRadius(),i=new e.LatLng(this._latlng.lat,this._latlng.lng-t),s=this._map.latLngToLayerPoint(i);this._point=this._map.latLngToLayerPoint(this._latlng),this._radius=Math.max(Math.round(this._point.x-s.x),1)},getBounds:function(){var t=this._getLngRadius(),i=360*(this._mRadius/40075017),s=this._latlng,o=new e.LatLng(s.lat-i,s.lng-t),n=new e.LatLng(s.lat+i,s.lng+t);return new e.LatLngBounds(o,n)},getLatLng:function(){return this._latlng},getPathString:function(){var t=this._point,i=this._radius;return this._checkIfEmpty()?"":e.Browser.svg?"M"+t.x+","+(t.y-i)+"A"+i+","+i+",0,1,1,"+(t.x-.1)+","+(t.y-i)+" z":(t._round(),i=Math.round(i),"AL "+t.x+","+t.y+" "+i+","+i+" 0,"+23592600)},getRadius:function(){return this._mRadius},_getLatRadius:function(){return 360*(this._mRadius/40075017)},_getLngRadius:function(){return this._getLatRadius()/Math.cos(e.LatLng.DEG_TO_RAD*this._latlng.lat)},_checkIfEmpty:function(){if(!this._map)return!1;var t=this._map._pathViewport,i=this._radius,s=this._point;return s.x-i>t.max.x||s.y-i>t.max.y||s.x+is;s++)for(l=this._parts[s],o=0,r=l.length,n=r-1;r>o;n=o++)if((i||0!==o)&&(h=e.LineUtil.pointToSegmentDistance(t,l[n],l[o]),c>=h))return!0;return!1}}:{}),e.Polygon.include(e.Path.CANVAS?{_containsPoint:function(t){var i,s,o,n,a,r,h,l,c=!1;if(e.Polyline.prototype._containsPoint.call(this,t,!0))return!0;for(n=0,h=this._parts.length;h>n;n++)for(i=this._parts[n],a=0,l=i.length,r=l-1;l>a;r=a++)s=i[a],o=i[r],s.y>t.y!=o.y>t.y&&t.x<(o.x-s.x)*(t.y-s.y)/(o.y-s.y)+s.x&&(c=!c);return c}}:{}),e.Circle.include(e.Path.CANVAS?{_drawPath:function(){var t=this._point;this._ctx.beginPath(),this._ctx.arc(t.x,t.y,this._radius,0,2*Math.PI,!1)},_containsPoint:function(t){var i=this._point,s=this.options.stroke?this.options.weight/2:0;return t.distanceTo(i)<=this._radius+s}}:{}),e.GeoJSON=e.FeatureGroup.extend({initialize:function(t,i){e.setOptions(this,i),this._layers={},t&&this.addData(t)},addData:function(t){var i,s,o=e.Util.isArray(t)?t:t.features;if(o){for(i=0,s=o.length;s>i;i++)(o[i].geometries||o[i].geometry||o[i].features)&&this.addData(o[i]);return this}var n=this.options;if(!n.filter||n.filter(t)){var a=e.GeoJSON.geometryToLayer(t,n.pointToLayer);return a.feature=t,a.defaultOptions=a.options,this.resetStyle(a),n.onEachFeature&&n.onEachFeature(t,a),this.addLayer(a)}},resetStyle:function(t){var i=this.options.style;i&&(e.Util.extend(t.options,t.defaultOptions),this._setLayerStyle(t,i))},setStyle:function(t){this.eachLayer(function(i){this._setLayerStyle(i,t)},this)},_setLayerStyle:function(t,i){"function"==typeof i&&(i=i(t.feature)),t.setStyle&&t.setStyle(i)}}),e.extend(e.GeoJSON,{geometryToLayer:function(t,i){var s,o,n,a,r,h="Feature"===t.type?t.geometry:t,l=h.coordinates,c=[];switch(h.type){case"Point":return s=this.coordsToLatLng(l),i?i(t,s):new e.Marker(s);case"MultiPoint":for(n=0,a=l.length;a>n;n++)s=this.coordsToLatLng(l[n]),r=i?i(t,s):new e.Marker(s),c.push(r);return new e.FeatureGroup(c);case"LineString":return o=this.coordsToLatLngs(l),new e.Polyline(o);case"Polygon":return o=this.coordsToLatLngs(l,1),new e.Polygon(o);case"MultiLineString":return o=this.coordsToLatLngs(l,1),new e.MultiPolyline(o);case"MultiPolygon":return o=this.coordsToLatLngs(l,2),new e.MultiPolygon(o);case"GeometryCollection":for(n=0,a=h.geometries.length;a>n;n++)r=this.geometryToLayer({geometry:h.geometries[n],type:"Feature",properties:t.properties},i),c.push(r);return new e.FeatureGroup(c);default:throw Error("Invalid GeoJSON object.")}},coordsToLatLng:function(t,i){var s=parseFloat(t[i?0:1]),o=parseFloat(t[i?1:0]);return new e.LatLng(s,o)},coordsToLatLngs:function(t,i,s){var e,o,n,a=[];for(o=0,n=t.length;n>o;o++)e=i?this.coordsToLatLngs(t[o],i-1,s):this.coordsToLatLng(t[o],s),a.push(e);return a}}),e.geoJson=function(t,i){return new e.GeoJSON(t,i)},e.DomEvent={addListener:function(t,i,o,n){var a,r,h,l=e.stamp(o),c="_leaflet_"+i+l;return t[c]?this:(a=function(i){return o.call(n||t,i||e.DomEvent._getEvent())},e.Browser.msTouch&&0===i.indexOf("touch")?this.addMsTouchListener(t,i,a,l):(e.Browser.touch&&"dblclick"===i&&this.addDoubleTapListener&&this.addDoubleTapListener(t,a,l),"addEventListener"in t?"mousewheel"===i?(t.addEventListener("DOMMouseScroll",a,!1),t.addEventListener(i,a,!1)):"mouseenter"===i||"mouseleave"===i?(r=a,h="mouseenter"===i?"mouseover":"mouseout",a=function(i){return e.DomEvent._checkMouse(t,i)?r(i):s},t.addEventListener(h,a,!1)):t.addEventListener(i,a,!1):"attachEvent"in t&&t.attachEvent("on"+i,a),t[c]=a,this))},removeListener:function(t,i,s){var o=e.stamp(s),n="_leaflet_"+i+o,a=t[n];if(a)return e.Browser.msTouch&&0===i.indexOf("touch")?this.removeMsTouchListener(t,i,o):e.Browser.touch&&"dblclick"===i&&this.removeDoubleTapListener?this.removeDoubleTapListener(t,o):"removeEventListener"in t?"mousewheel"===i?(t.removeEventListener("DOMMouseScroll",a,!1),t.removeEventListener(i,a,!1)):"mouseenter"===i||"mouseleave"===i?t.removeEventListener("mouseenter"===i?"mouseover":"mouseout",a,!1):t.removeEventListener(i,a,!1):"detachEvent"in t&&t.detachEvent("on"+i,a),t[n]=null,this},stopPropagation:function(t){return t.stopPropagation?t.stopPropagation():t.cancelBubble=!0,this},disableClickPropagation:function(t){for(var i=e.DomEvent.stopPropagation,s=e.Draggable.START.length-1;s>=0;s--)e.DomEvent.addListener(t,e.Draggable.START[s],i);return e.DomEvent.addListener(t,"click",i).addListener(t,"dblclick",i)},preventDefault:function(t){return t.preventDefault?t.preventDefault():t.returnValue=!1,this},stop:function(t){return e.DomEvent.preventDefault(t).stopPropagation(t)},getMousePosition:function(t,s){var o=i.body,n=i.documentElement,a=t.pageX?t.pageX:t.clientX+o.scrollLeft+n.scrollLeft,r=t.pageY?t.pageY:t.clientY+o.scrollTop+n.scrollTop,h=new e.Point(a,r);return s?h._subtract(e.DomUtil.getViewportOffset(s)):h},getWheelDelta:function(t){var i=0;return t.wheelDelta&&(i=t.wheelDelta/120),t.detail&&(i=-t.detail/3),i},_checkMouse:function(t,i){var s=i.relatedTarget;if(!s)return!0;try{for(;s&&s!==t;)s=s.parentNode}catch(e){return!1}return s!==t},_getEvent:function(){var i=t.event;if(!i)for(var s=arguments.callee.caller;s&&(i=s.arguments[0],!i||t.Event!==i.constructor);)s=s.caller;return i}},e.DomEvent.on=e.DomEvent.addListener,e.DomEvent.off=e.DomEvent.removeListener,e.Draggable=e.Class.extend({includes:e.Mixin.Events,statics:{START:e.Browser.touch?["touchstart","mousedown"]:["mousedown"],END:{mousedown:"mouseup",touchstart:"touchend",MSPointerDown:"touchend"},MOVE:{mousedown:"mousemove",touchstart:"touchmove",MSPointerDown:"touchmove"},TAP_TOLERANCE:15},initialize:function(t,i,s){this._element=t,this._dragStartTarget=i||t,this._longPress=s&&!e.Browser.msTouch},enable:function(){if(!this._enabled){for(var t=e.Draggable.START.length-1;t>=0;t--)e.DomEvent.on(this._dragStartTarget,e.Draggable.START[t],this._onDown,this);this._enabled=!0}},disable:function(){if(this._enabled){for(var t=e.Draggable.START.length-1;t>=0;t--)e.DomEvent.off(this._dragStartTarget,e.Draggable.START[t],this._onDown,this);this._enabled=!1,this._moved=!1}},_onDown:function(t){if(!(!e.Browser.touch&&t.shiftKey||1!==t.which&&1!==t.button&&!t.touches||(e.DomEvent.preventDefault(t),e.DomEvent.stopPropagation(t),e.Draggable._disabled))){if(this._simulateClick=!0,t.touches&&t.touches.length>1)return this._simulateClick=!1,clearTimeout(this._longPressTimeout),s;var o=t.touches&&1===t.touches.length?t.touches[0]:t,n=o.target;e.Browser.touch&&"a"===n.tagName.toLowerCase()&&e.DomUtil.addClass(n,"leaflet-active"),this._moved=!1,this._moving||(this._startPoint=new e.Point(o.clientX,o.clientY),this._startPos=this._newPos=e.DomUtil.getPosition(this._element),t.touches&&1===t.touches.length&&e.Browser.touch&&this._longPress&&(this._longPressTimeout=setTimeout(e.bind(function(){var t=this._newPos&&this._newPos.distanceTo(this._startPos)||0;e.Draggable.TAP_TOLERANCE>t&&(this._simulateClick=!1,this._onUp(),this._simulateEvent("contextmenu",o))},this),1e3)),e.DomEvent.on(i,e.Draggable.MOVE[t.type],this._onMove,this),e.DomEvent.on(i,e.Draggable.END[t.type],this._onUp,this))}},_onMove:function(t){if(!(t.touches&&t.touches.length>1)){var i=t.touches&&1===t.touches.length?t.touches[0]:t,s=new e.Point(i.clientX,i.clientY),o=s.subtract(this._startPoint);(o.x||o.y)&&(e.DomEvent.preventDefault(t),this._moved||(this.fire("dragstart"),this._moved=!0,this._startPos=e.DomUtil.getPosition(this._element).subtract(o),e.Browser.touch||(e.DomUtil.disableTextSelection(),this._setMovingCursor())),this._newPos=this._startPos.add(o),this._moving=!0,e.Util.cancelAnimFrame(this._animRequest),this._animRequest=e.Util.requestAnimFrame(this._updatePosition,this,!0,this._dragStartTarget))}},_updatePosition:function(){this.fire("predrag"),e.DomUtil.setPosition(this._element,this._newPos),this.fire("drag")},_onUp:function(t){var s;if(clearTimeout(this._longPressTimeout),this._simulateClick&&t.changedTouches){var o=t.changedTouches[0],n=o.target,a=this._newPos&&this._newPos.distanceTo(this._startPos)||0;"a"===n.tagName.toLowerCase()&&e.DomUtil.removeClass(n,"leaflet-active"),e.Draggable.TAP_TOLERANCE>a&&(s=o)}e.Browser.touch||(e.DomUtil.enableTextSelection(),this._restoreCursor());for(var r in e.Draggable.MOVE)e.Draggable.MOVE.hasOwnProperty(r)&&(e.DomEvent.off(i,e.Draggable.MOVE[r],this._onMove),e.DomEvent.off(i,e.Draggable.END[r],this._onUp));this._moved&&(e.Util.cancelAnimFrame(this._animRequest),this.fire("dragend")),this._moving=!1,s&&(this._moved=!1,this._simulateEvent("click",s))},_setMovingCursor:function(){e.DomUtil.addClass(i.body,"leaflet-dragging")},_restoreCursor:function(){e.DomUtil.removeClass(i.body,"leaflet-dragging")},_simulateEvent:function(s,e){var o=i.createEvent("MouseEvents");o.initMouseEvent(s,!0,!0,t,1,e.screenX,e.screenY,e.clientX,e.clientY,!1,!1,!1,!1,0,null),e.target.dispatchEvent(o)}}),e.Handler=e.Class.extend({initialize:function(t){this._map=t},enable:function(){this._enabled||(this._enabled=!0,this.addHooks())},disable:function(){this._enabled&&(this._enabled=!1,this.removeHooks())},enabled:function(){return!!this._enabled}}),e.Map.mergeOptions({dragging:!0,inertia:!e.Browser.android23,inertiaDeceleration:3400,inertiaMaxSpeed:1/0,inertiaThreshold:e.Browser.touch?32:18,easeLinearity:.25,longPress:!0,worldCopyJump:!1}),e.Map.Drag=e.Handler.extend({addHooks:function(){if(!this._draggable){var t=this._map;this._draggable=new e.Draggable(t._mapPane,t._container,t.options.longPress),this._draggable.on({dragstart:this._onDragStart,drag:this._onDrag,dragend:this._onDragEnd},this),t.options.worldCopyJump&&(this._draggable.on("predrag",this._onPreDrag,this),t.on("viewreset",this._onViewReset,this))}this._draggable.enable()},removeHooks:function(){this._draggable.disable()},moved:function(){return this._draggable&&this._draggable._moved},_onDragStart:function(){var t=this._map;t._panAnim&&t._panAnim.stop(),t.fire("movestart").fire("dragstart"),t.options.inertia&&(this._positions=[],this._times=[])},_onDrag:function(){if(this._map.options.inertia){var t=this._lastTime=+new Date,i=this._lastPos=this._draggable._newPos;this._positions.push(i),this._times.push(t),t-this._times[0]>200&&(this._positions.shift(),this._times.shift())}this._map.fire("move").fire("drag")},_onViewReset:function(){var t=this._map.getSize()._divideBy(2),i=this._map.latLngToLayerPoint(new e.LatLng(0,0));this._initialWorldOffset=i.subtract(t).x,this._worldWidth=this._map.project(new e.LatLng(0,180)).x},_onPreDrag:function(){var t=this._worldWidth,i=Math.round(t/2),s=this._initialWorldOffset,e=this._draggable._newPos.x,o=(e-i+s)%t+i-s,n=(e+i+s)%t-i-s,a=Math.abs(o+s)i.inertiaThreshold||!this._positions[0];if(o)t.fire("moveend");else{var n=this._lastPos.subtract(this._positions[0]),a=(this._lastTime+s-this._times[0])/1e3,r=i.easeLinearity,h=n.multiplyBy(r/a),l=h.distanceTo(new e.Point(0,0)),c=Math.min(i.inertiaMaxSpeed,l),m=h.multiplyBy(c/l),u=c/(i.inertiaDeceleration*r),d=m.multiplyBy(-u/2).round();e.Util.requestAnimFrame(function(){t.panBy(d,u,r)})}t.fire("dragend"),i.maxBounds&&e.Util.requestAnimFrame(this._panInsideMaxBounds,t,!0,t._container)},_panInsideMaxBounds:function(){this.panInsideBounds(this.options.maxBounds)}}),e.Map.addInitHook("addHandler","dragging",e.Map.Drag),e.Map.mergeOptions({doubleClickZoom:!0}),e.Map.DoubleClickZoom=e.Handler.extend({addHooks:function(){this._map.on("dblclick",this._onDoubleClick)},removeHooks:function(){this._map.off("dblclick",this._onDoubleClick)},_onDoubleClick:function(t){this.setView(t.latlng,this._zoom+1)}}),e.Map.addInitHook("addHandler","doubleClickZoom",e.Map.DoubleClickZoom),e.Map.mergeOptions({scrollWheelZoom:!0}),e.Map.ScrollWheelZoom=e.Handler.extend({addHooks:function(){e.DomEvent.on(this._map._container,"mousewheel",this._onWheelScroll,this),this._delta=0},removeHooks:function(){e.DomEvent.off(this._map._container,"mousewheel",this._onWheelScroll)},_onWheelScroll:function(t){var i=e.DomEvent.getWheelDelta(t);this._delta+=i,this._lastMousePos=this._map.mouseEventToContainerPoint(t),this._startTime||(this._startTime=+new Date);var s=Math.max(40-(+new Date-this._startTime),0);clearTimeout(this._timer),this._timer=setTimeout(e.bind(this._performZoom,this),s),e.DomEvent.preventDefault(t),e.DomEvent.stopPropagation(t)},_performZoom:function(){var t=this._map,i=this._delta,s=t.getZoom();if(i=i>0?Math.ceil(i):Math.round(i),i=Math.max(Math.min(i,4),-4),i=t._limitZoom(s+i)-s,this._delta=0,this._startTime=null,i){var e=s+i,o=this._getCenterForScrollWheelZoom(e);t.setView(o,e)}},_getCenterForScrollWheelZoom:function(t){var i=this._map,s=i.getZoomScale(t),e=i.getSize()._divideBy(2),o=this._lastMousePos._subtract(e)._multiplyBy(1-1/s),n=i._getTopLeftPoint()._add(e)._add(o);return i.unproject(n)}}),e.Map.addInitHook("addHandler","scrollWheelZoom",e.Map.ScrollWheelZoom),e.extend(e.DomEvent,{_touchstart:e.Browser.msTouch?"MSPointerDown":"touchstart",_touchend:e.Browser.msTouch?"MSPointerUp":"touchend",addDoubleTapListener:function(t,s,o){function n(t){var i;if(e.Browser.msTouch?(p.push(t.pointerId),i=p.length):i=t.touches.length,!(i>1)){var s=Date.now(),o=s-(r||s);h=t.touches?t.touches[0]:t,l=o>0&&c>=o,r=s}}function a(t){if(e.Browser.msTouch){var i=p.indexOf(t.pointerId);if(-1===i)return;p.splice(i,1)}if(l){if(e.Browser.msTouch){var o,n={};for(var a in h)o=h[a],n[a]="function"==typeof o?o.bind(h):o;h=n}h.type="dblclick",s(h),r=null}}var r,h,l=!1,c=250,m="_leaflet_",u=this._touchstart,d=this._touchend,p=[];t[m+u+o]=n,t[m+d+o]=a;var _=e.Browser.msTouch?i.documentElement:t;return t.addEventListener(u,n,!1),_.addEventListener(d,a,!1),e.Browser.msTouch&&_.addEventListener("MSPointerCancel",a,!1),this},removeDoubleTapListener:function(t,s){var o="_leaflet_";return t.removeEventListener(this._touchstart,t[o+this._touchstart+s],!1),(e.Browser.msTouch?i.documentElement:t).removeEventListener(this._touchend,t[o+this._touchend+s],!1),e.Browser.msTouch&&i.documentElement.removeEventListener("MSPointerCancel",t[o+this._touchend+s],!1),this}}),e.extend(e.DomEvent,{_msTouches:[],_msDocumentListener:!1,addMsTouchListener:function(t,i,s,e){switch(i){case"touchstart":return this.addMsTouchListenerStart(t,i,s,e);case"touchend":return this.addMsTouchListenerEnd(t,i,s,e);case"touchmove":return this.addMsTouchListenerMove(t,i,s,e);default:throw"Unknown touch event type"}},addMsTouchListenerStart:function(t,s,e,o){var n="_leaflet_",a=this._msTouches,r=function(t){for(var i=!1,s=0;a.length>s;s++)if(a[s].pointerId===t.pointerId){i=!0;break}i||a.push(t),t.touches=a.slice(),t.changedTouches=[t],e(t)};if(t[n+"touchstart"+o]=r,t.addEventListener("MSPointerDown",r,!1),!this._msDocumentListener){var h=function(t){for(var i=0;a.length>i;i++)if(a[i].pointerId===t.pointerId){a.splice(i,1);break}};i.documentElement.addEventListener("MSPointerUp",h,!1),i.documentElement.addEventListener("MSPointerCancel",h,!1),this._msDocumentListener=!0}return this},addMsTouchListenerMove:function(t,i,s,e){function o(t){if(t.pointerType!==t.MSPOINTER_TYPE_MOUSE||0!==t.buttons){for(var i=0;a.length>i;i++)if(a[i].pointerId===t.pointerId){a[i]=t;break}t.touches=a.slice(),t.changedTouches=[t],s(t)}}var n="_leaflet_",a=this._msTouches;return t[n+"touchmove"+e]=o,t.addEventListener("MSPointerMove",o,!1),this},addMsTouchListenerEnd:function(t,i,s,e){var o="_leaflet_",n=this._msTouches,a=function(t){for(var i=0;n.length>i;i++)if(n[i].pointerId===t.pointerId){n.splice(i,1);break}t.touches=n.slice(),t.changedTouches=[t],s(t)};return t[o+"touchend"+e]=a,t.addEventListener("MSPointerUp",a,!1),t.addEventListener("MSPointerCancel",a,!1),this},removeMsTouchListener:function(t,i,s){var e="_leaflet_",o=t[e+i+s];switch(i){case"touchstart":t.removeEventListener("MSPointerDown",o,!1);break;case"touchmove":t.removeEventListener("MSPointerMove",o,!1);break;case"touchend":t.removeEventListener("MSPointerUp",o,!1),t.removeEventListener("MSPointerCancel",o,!1)}return this}}),e.Map.mergeOptions({touchZoom:e.Browser.touch&&!e.Browser.android23}),e.Map.TouchZoom=e.Handler.extend({addHooks:function(){e.DomEvent.on(this._map._container,"touchstart",this._onTouchStart,this)},removeHooks:function(){e.DomEvent.off(this._map._container,"touchstart",this._onTouchStart,this)},_onTouchStart:function(t){var s=this._map;if(t.touches&&2===t.touches.length&&!s._animatingZoom&&!this._zooming){var o=s.mouseEventToLayerPoint(t.touches[0]),n=s.mouseEventToLayerPoint(t.touches[1]),a=s._getCenterLayerPoint();this._startCenter=o.add(n)._divideBy(2),this._startDist=o.distanceTo(n),this._moved=!1,this._zooming=!0,this._centerOffset=a.subtract(this._startCenter),s._panAnim&&s._panAnim.stop(),e.DomEvent.on(i,"touchmove",this._onTouchMove,this).on(i,"touchend",this._onTouchEnd,this),e.DomEvent.preventDefault(t)}},_onTouchMove:function(t){if(t.touches&&2===t.touches.length){var i=this._map,s=i.mouseEventToLayerPoint(t.touches[0]),o=i.mouseEventToLayerPoint(t.touches[1]);this._scale=s.distanceTo(o)/this._startDist,this._delta=s._add(o)._divideBy(2)._subtract(this._startCenter),1!==this._scale&&(this._moved||(e.DomUtil.addClass(i._mapPane,"leaflet-zoom-anim leaflet-touching"),i.fire("movestart").fire("zoomstart")._prepareTileBg(),this._moved=!0),e.Util.cancelAnimFrame(this._animRequest),this._animRequest=e.Util.requestAnimFrame(this._updateOnMove,this,!0,this._map._container),e.DomEvent.preventDefault(t))}},_updateOnMove:function(){var t=this._map,i=this._getScaleOrigin(),s=t.layerPointToLatLng(i);t.fire("zoomanim",{center:s,zoom:t.getScaleZoom(this._scale)}),t._tileBg.style[e.DomUtil.TRANSFORM]=e.DomUtil.getTranslateString(this._delta)+" "+e.DomUtil.getScaleString(this._scale,this._startCenter)},_onTouchEnd:function(){if(this._moved&&this._zooming){var t=this._map;this._zooming=!1,e.DomUtil.removeClass(t._mapPane,"leaflet-touching"),e.DomEvent.off(i,"touchmove",this._onTouchMove).off(i,"touchend",this._onTouchEnd);var s=this._getScaleOrigin(),o=t.layerPointToLatLng(s),n=t.getZoom(),a=t.getScaleZoom(this._scale)-n,r=a>0?Math.ceil(a):Math.floor(a),h=t._limitZoom(n+r);t.fire("zoomanim",{center:o,zoom:h}),t._runAnimation(o,h,t.getZoomScale(h)/this._scale,s,!0)}},_getScaleOrigin:function(){var t=this._centerOffset.subtract(this._delta).divideBy(this._scale);return this._startCenter.add(t)}}),e.Map.addInitHook("addHandler","touchZoom",e.Map.TouchZoom),e.Map.mergeOptions({boxZoom:!0}),e.Map.BoxZoom=e.Handler.extend({initialize:function(t){this._map=t,this._container=t._container,this._pane=t._panes.overlayPane},addHooks:function(){e.DomEvent.on(this._container,"mousedown",this._onMouseDown,this)},removeHooks:function(){e.DomEvent.off(this._container,"mousedown",this._onMouseDown)},_onMouseDown:function(t){return!t.shiftKey||1!==t.which&&1!==t.button?!1:(e.DomUtil.disableTextSelection(),this._startLayerPoint=this._map.mouseEventToLayerPoint(t),this._box=e.DomUtil.create("div","leaflet-zoom-box",this._pane),e.DomUtil.setPosition(this._box,this._startLayerPoint),this._container.style.cursor="crosshair",e.DomEvent.on(i,"mousemove",this._onMouseMove,this).on(i,"mouseup",this._onMouseUp,this).preventDefault(t),this._map.fire("boxzoomstart"),s)},_onMouseMove:function(t){var i=this._startLayerPoint,s=this._box,o=this._map.mouseEventToLayerPoint(t),n=o.subtract(i),a=new e.Point(Math.min(o.x,i.x),Math.min(o.y,i.y));e.DomUtil.setPosition(s,a),s.style.width=Math.max(0,Math.abs(n.x)-4)+"px",s.style.height=Math.max(0,Math.abs(n.y)-4)+"px"},_onMouseUp:function(t){this._pane.removeChild(this._box),this._container.style.cursor="",e.DomUtil.enableTextSelection(),e.DomEvent.off(i,"mousemove",this._onMouseMove).off(i,"mouseup",this._onMouseUp);var s=this._map,o=s.mouseEventToLayerPoint(t);if(!this._startLayerPoint.equals(o)){var n=new e.LatLngBounds(s.layerPointToLatLng(this._startLayerPoint),s.layerPointToLatLng(o));s.fitBounds(n),s.fire("boxzoomend",{boxZoomBounds:n})}}}),e.Map.addInitHook("addHandler","boxZoom",e.Map.BoxZoom),e.Map.mergeOptions({keyboard:!0,keyboardPanOffset:80,keyboardZoomOffset:1}),e.Map.Keyboard=e.Handler.extend({keyCodes:{left:[37],right:[39],down:[40],up:[38],zoomIn:[187,107,61],zoomOut:[189,109,173]},initialize:function(t){this._map=t,this._setPanOffset(t.options.keyboardPanOffset),this._setZoomOffset(t.options.keyboardZoomOffset)},addHooks:function(){var t=this._map._container;-1===t.tabIndex&&(t.tabIndex="0"),e.DomEvent.on(t,"focus",this._onFocus,this).on(t,"blur",this._onBlur,this).on(t,"mousedown",this._onMouseDown,this),this._map.on("focus",this._addHooks,this).on("blur",this._removeHooks,this)},removeHooks:function(){this._removeHooks();var t=this._map._container;e.DomEvent.off(t,"focus",this._onFocus,this).off(t,"blur",this._onBlur,this).off(t,"mousedown",this._onMouseDown,this),this._map.off("focus",this._addHooks,this).off("blur",this._removeHooks,this)},_onMouseDown:function(){this._focused||this._map._container.focus()},_onFocus:function(){this._focused=!0,this._map.fire("focus")},_onBlur:function(){this._focused=!1,this._map.fire("blur")},_setPanOffset:function(t){var i,s,e=this._panKeys={},o=this.keyCodes;for(i=0,s=o.left.length;s>i;i++)e[o.left[i]]=[-1*t,0];for(i=0,s=o.right.length;s>i;i++)e[o.right[i]]=[t,0];for(i=0,s=o.down.length;s>i;i++)e[o.down[i]]=[0,t];for(i=0,s=o.up.length;s>i;i++)e[o.up[i]]=[0,-1*t]},_setZoomOffset:function(t){var i,s,e=this._zoomKeys={},o=this.keyCodes;for(i=0,s=o.zoomIn.length;s>i;i++)e[o.zoomIn[i]]=t;for(i=0,s=o.zoomOut.length;s>i;i++)e[o.zoomOut[i]]=-t},_addHooks:function(){e.DomEvent.on(i,"keydown",this._onKeyDown,this)},_removeHooks:function(){e.DomEvent.off(i,"keydown",this._onKeyDown,this)},_onKeyDown:function(t){var i=t.keyCode,s=this._map;if(this._panKeys.hasOwnProperty(i))s.panBy(this._panKeys[i]),s.options.maxBounds&&s.panInsideBounds(s.options.maxBounds);else{if(!this._zoomKeys.hasOwnProperty(i))return;s.setZoom(s.getZoom()+this._zoomKeys[i])}e.DomEvent.stop(t)}}),e.Map.addInitHook("addHandler","keyboard",e.Map.Keyboard),e.Handler.MarkerDrag=e.Handler.extend({initialize:function(t){this._marker=t},addHooks:function(){var t=this._marker._icon;this._draggable||(this._draggable=new e.Draggable(t,t).on("dragstart",this._onDragStart,this).on("drag",this._onDrag,this).on("dragend",this._onDragEnd,this)),this._draggable.enable()},removeHooks:function(){this._draggable.disable()},moved:function(){return this._draggable&&this._draggable._moved},_onDragStart:function(){this._marker.closePopup().fire("movestart").fire("dragstart")},_onDrag:function(){var t=this._marker,i=t._shadow,s=e.DomUtil.getPosition(t._icon),o=t._map.layerPointToLatLng(s);i&&e.DomUtil.setPosition(i,s),t._latlng=o,t.fire("move",{latlng:o}).fire("drag")},_onDragEnd:function(){this._marker.fire("moveend").fire("dragend")}}),e.Handler.PolyEdit=e.Handler.extend({options:{icon:new e.DivIcon({iconSize:new e.Point(8,8),className:"leaflet-div-icon leaflet-editing-icon"})},initialize:function(t,i){this._poly=t,e.setOptions(this,i)},addHooks:function(){this._poly._map&&(this._markerGroup||this._initMarkers(),this._poly._map.addLayer(this._markerGroup))},removeHooks:function(){this._poly._map&&(this._poly._map.removeLayer(this._markerGroup),delete this._markerGroup,delete this._markers)},updateMarkers:function(){this._markerGroup.clearLayers(),this._initMarkers()},_initMarkers:function(){this._markerGroup||(this._markerGroup=new e.LayerGroup),this._markers=[];var t,i,s,o,n=this._poly._latlngs;for(t=0,s=n.length;s>t;t++)o=this._createMarker(n[t],t),o.on("click",this._onMarkerClick,this),this._markers.push(o);var a,r;for(t=0,i=s-1;s>t;i=t++)(0!==t||e.Polygon&&this._poly instanceof e.Polygon)&&(a=this._markers[i],r=this._markers[t],this._createMiddleMarker(a,r),this._updatePrevNext(a,r))},_createMarker:function(t,i){var s=new e.Marker(t,{draggable:!0,icon:this.options.icon});return s._origLatLng=t,s._index=i,s.on("drag",this._onMarkerDrag,this),s.on("dragend",this._fireEdit,this),this._markerGroup.addLayer(s),s},_fireEdit:function(){this._poly.fire("edit")},_onMarkerDrag:function(t){var i=t.target;e.extend(i._origLatLng,i._latlng),i._middleLeft&&i._middleLeft.setLatLng(this._getMiddleLatLng(i._prev,i)),i._middleRight&&i._middleRight.setLatLng(this._getMiddleLatLng(i,i._next)),this._poly.redraw()},_onMarkerClick:function(t){if(!(3>this._poly._latlngs.length)){var i=t.target,s=i._index;this._markerGroup.removeLayer(i),this._markers.splice(s,1),this._poly.spliceLatLngs(s,1),this._updateIndexes(s,-1),this._updatePrevNext(i._prev,i._next),i._middleLeft&&this._markerGroup.removeLayer(i._middleLeft),i._middleRight&&this._markerGroup.removeLayer(i._middleRight),i._prev&&i._next?this._createMiddleMarker(i._prev,i._next):i._prev?i._next||(i._prev._middleRight=null):i._next._middleLeft=null,this._poly.fire("edit")}},_updateIndexes:function(t,i){this._markerGroup.eachLayer(function(s){s._index>t&&(s._index+=i)})},_createMiddleMarker:function(t,i){var s,e,o,n=this._getMiddleLatLng(t,i),a=this._createMarker(n);a.setOpacity(.6),t._middleRight=i._middleLeft=a,e=function(){var e=i._index;a._index=e,a.off("click",s).on("click",this._onMarkerClick,this),n.lat=a.getLatLng().lat,n.lng=a.getLatLng().lng,this._poly.spliceLatLngs(e,0,n),this._markers.splice(e,0,a),a.setOpacity(1),this._updateIndexes(e,1),i._index++,this._updatePrevNext(t,a),this._updatePrevNext(a,i)},o=function(){a.off("dragstart",e,this),a.off("dragend",o,this), -this._createMiddleMarker(t,a),this._createMiddleMarker(a,i)},s=function(){e.call(this),o.call(this),this._poly.fire("edit")},a.on("click",s,this).on("dragstart",e,this).on("dragend",o,this),this._markerGroup.addLayer(a)},_updatePrevNext:function(t,i){t&&(t._next=i),i&&(i._prev=t)},_getMiddleLatLng:function(t,i){var s=this._poly._map,e=s.latLngToLayerPoint(t.getLatLng()),o=s.latLngToLayerPoint(i.getLatLng());return s.layerPointToLatLng(e._add(o)._divideBy(2))}}),e.Polyline.addInitHook(function(){e.Handler.PolyEdit&&(this.editing=new e.Handler.PolyEdit(this),this.options.editable&&this.editing.enable()),this.on("add",function(){this.editing&&this.editing.enabled()&&this.editing.addHooks()}),this.on("remove",function(){this.editing&&this.editing.enabled()&&this.editing.removeHooks()})}),e.Control=e.Class.extend({options:{position:"topright"},initialize:function(t){e.setOptions(this,t)},getPosition:function(){return this.options.position},setPosition:function(t){var i=this._map;return i&&i.removeControl(this),this.options.position=t,i&&i.addControl(this),this},addTo:function(t){this._map=t;var i=this._container=this.onAdd(t),s=this.getPosition(),o=t._controlCorners[s];return e.DomUtil.addClass(i,"leaflet-control"),-1!==s.indexOf("bottom")?o.insertBefore(i,o.firstChild):o.appendChild(i),this},removeFrom:function(t){var i=this.getPosition(),s=t._controlCorners[i];return s.removeChild(this._container),this._map=null,this.onRemove&&this.onRemove(t),this}}),e.control=function(t){return new e.Control(t)},e.Map.include({addControl:function(t){return t.addTo(this),this},removeControl:function(t){return t.removeFrom(this),this},_initControlPos:function(){function t(t,n){var a=s+t+" "+s+n;i[t+n]=e.DomUtil.create("div",a,o)}var i=this._controlCorners={},s="leaflet-",o=this._controlContainer=e.DomUtil.create("div",s+"control-container",this._container);t("top","left"),t("top","right"),t("bottom","left"),t("bottom","right")}}),e.Control.Zoom=e.Control.extend({options:{position:"topleft"},onAdd:function(t){var i="leaflet-control-zoom",s="leaflet-bar",o=s+"-part",n=e.DomUtil.create("div",i+" "+s);return this._map=t,this._zoomInButton=this._createButton("+","Zoom in",i+"-in "+o+" "+o+"-top",n,this._zoomIn,this),this._zoomOutButton=this._createButton("-","Zoom out",i+"-out "+o+" "+o+"-bottom",n,this._zoomOut,this),t.on("zoomend",this._updateDisabled,this),n},onRemove:function(t){t.off("zoomend",this._updateDisabled,this)},_zoomIn:function(t){this._map.zoomIn(t.shiftKey?3:1)},_zoomOut:function(t){this._map.zoomOut(t.shiftKey?3:1)},_createButton:function(t,i,s,o,n,a){var r=e.DomUtil.create("a",s,o);r.innerHTML=t,r.href="#",r.title=i;var h=e.DomEvent.stopPropagation;return e.DomEvent.on(r,"click",h).on(r,"mousedown",h).on(r,"dblclick",h).on(r,"click",e.DomEvent.preventDefault).on(r,"click",n,a),r},_updateDisabled:function(){var t=this._map,i="leaflet-control-zoom-disabled";e.DomUtil.removeClass(this._zoomInButton,i),e.DomUtil.removeClass(this._zoomOutButton,i),t._zoom===t.getMinZoom()&&e.DomUtil.addClass(this._zoomOutButton,i),t._zoom===t.getMaxZoom()&&e.DomUtil.addClass(this._zoomInButton,i)}}),e.Map.mergeOptions({zoomControl:!0}),e.Map.addInitHook(function(){this.options.zoomControl&&(this.zoomControl=new e.Control.Zoom,this.addControl(this.zoomControl))}),e.control.zoom=function(t){return new e.Control.Zoom(t)},e.Control.Attribution=e.Control.extend({options:{position:"bottomright",prefix:'Powered by Leaflet'},initialize:function(t){e.setOptions(this,t),this._attributions={}},onAdd:function(t){return this._container=e.DomUtil.create("div","leaflet-control-attribution"),e.DomEvent.disableClickPropagation(this._container),t.on("layeradd",this._onLayerAdd,this).on("layerremove",this._onLayerRemove,this),this._update(),this._container},onRemove:function(t){t.off("layeradd",this._onLayerAdd).off("layerremove",this._onLayerRemove)},setPrefix:function(t){return this.options.prefix=t,this._update(),this},addAttribution:function(t){return t?(this._attributions[t]||(this._attributions[t]=0),this._attributions[t]++,this._update(),this):s},removeAttribution:function(t){return t?(this._attributions[t]--,this._update(),this):s},_update:function(){if(this._map){var t=[];for(var i in this._attributions)this._attributions.hasOwnProperty(i)&&this._attributions[i]&&t.push(i);var s=[];this.options.prefix&&s.push(this.options.prefix),t.length&&s.push(t.join(", ")),this._container.innerHTML=s.join(" — ")}},_onLayerAdd:function(t){t.layer.getAttribution&&this.addAttribution(t.layer.getAttribution())},_onLayerRemove:function(t){t.layer.getAttribution&&this.removeAttribution(t.layer.getAttribution())}}),e.Map.mergeOptions({attributionControl:!0}),e.Map.addInitHook(function(){this.options.attributionControl&&(this.attributionControl=(new e.Control.Attribution).addTo(this))}),e.control.attribution=function(t){return new e.Control.Attribution(t)},e.Control.Scale=e.Control.extend({options:{position:"bottomleft",maxWidth:100,metric:!0,imperial:!0,updateWhenIdle:!1},onAdd:function(t){this._map=t;var i="leaflet-control-scale",s=e.DomUtil.create("div",i),o=this.options;return this._addScales(o,i,s),t.on(o.updateWhenIdle?"moveend":"move",this._update,this),t.whenReady(this._update,this),s},onRemove:function(t){t.off(this.options.updateWhenIdle?"moveend":"move",this._update,this)},_addScales:function(t,i,s){t.metric&&(this._mScale=e.DomUtil.create("div",i+"-line",s)),t.imperial&&(this._iScale=e.DomUtil.create("div",i+"-line",s))},_update:function(){var t=this._map.getBounds(),i=t.getCenter().lat,s=6378137*Math.PI*Math.cos(i*Math.PI/180),e=s*(t.getNorthEast().lng-t.getSouthWest().lng)/180,o=this._map.getSize(),n=this.options,a=0;o.x>0&&(a=e*(n.maxWidth/o.x)),this._updateScales(n,a)},_updateScales:function(t,i){t.metric&&i&&this._updateMetric(i),t.imperial&&i&&this._updateImperial(i)},_updateMetric:function(t){var i=this._getRoundNum(t);this._mScale.style.width=this._getScaleWidth(i/t)+"px",this._mScale.innerHTML=1e3>i?i+" m":i/1e3+" km"},_updateImperial:function(t){var i,s,e,o=3.2808399*t,n=this._iScale;o>5280?(i=o/5280,s=this._getRoundNum(i),n.style.width=this._getScaleWidth(s/i)+"px",n.innerHTML=s+" mi"):(e=this._getRoundNum(o),n.style.width=this._getScaleWidth(e/o)+"px",n.innerHTML=e+" ft")},_getScaleWidth:function(t){return Math.round(this.options.maxWidth*t)-10},_getRoundNum:function(t){var i=Math.pow(10,(Math.floor(t)+"").length-1),s=t/i;return s=s>=10?10:s>=5?5:s>=3?3:s>=2?2:1,i*s}}),e.control.scale=function(t){return new e.Control.Scale(t)},e.Control.Layers=e.Control.extend({options:{collapsed:!0,position:"topright",autoZIndex:!0},initialize:function(t,i,s){e.setOptions(this,s),this._layers={},this._lastZIndex=0,this._handlingClick=!1;for(var o in t)t.hasOwnProperty(o)&&this._addLayer(t[o],o);for(o in i)i.hasOwnProperty(o)&&this._addLayer(i[o],o,!0)},onAdd:function(t){return this._initLayout(),this._update(),t.on("layeradd",this._onLayerChange,this).on("layerremove",this._onLayerChange,this),this._container},onRemove:function(t){t.off("layeradd",this._onLayerChange).off("layerremove",this._onLayerChange)},addBaseLayer:function(t,i){return this._addLayer(t,i),this._update(),this},addOverlay:function(t,i){return this._addLayer(t,i,!0),this._update(),this},removeLayer:function(t){var i=e.stamp(t);return delete this._layers[i],this._update(),this},_initLayout:function(){var t="leaflet-control-layers",i=this._container=e.DomUtil.create("div",t);e.Browser.touch?e.DomEvent.on(i,"click",e.DomEvent.stopPropagation):(e.DomEvent.disableClickPropagation(i),e.DomEvent.on(i,"mousewheel",e.DomEvent.stopPropagation));var s=this._form=e.DomUtil.create("form",t+"-list");if(this.options.collapsed){e.DomEvent.on(i,"mouseover",this._expand,this).on(i,"mouseout",this._collapse,this);var o=this._layersLink=e.DomUtil.create("a",t+"-toggle",i);o.href="#",o.title="Layers",e.Browser.touch?e.DomEvent.on(o,"click",e.DomEvent.stopPropagation).on(o,"click",e.DomEvent.preventDefault).on(o,"click",this._expand,this):e.DomEvent.on(o,"focus",this._expand,this),this._map.on("movestart",this._collapse,this)}else this._expand();this._baseLayersList=e.DomUtil.create("div",t+"-base",s),this._separator=e.DomUtil.create("div",t+"-separator",s),this._overlaysList=e.DomUtil.create("div",t+"-overlays",s),i.appendChild(s)},_addLayer:function(t,i,s){var o=e.stamp(t);this._layers[o]={layer:t,name:i,overlay:s},this.options.autoZIndex&&t.setZIndex&&(this._lastZIndex++,t.setZIndex(this._lastZIndex))},_update:function(){if(this._container){this._baseLayersList.innerHTML="",this._overlaysList.innerHTML="";var t=!1,i=!1;for(var s in this._layers)if(this._layers.hasOwnProperty(s)){var e=this._layers[s];this._addItem(e),i=i||e.overlay,t=t||!e.overlay}this._separator.style.display=i&&t?"":"none"}},_onLayerChange:function(t){var i=e.stamp(t.layer);this._layers[i]&&!this._handlingClick&&this._update()},_createRadioElement:function(t,s){var e='t;t++)i=o[t],s=this._layers[i.layerId],i.checked&&!this._map.hasLayer(s.layer)?(this._map.addLayer(s.layer),s.overlay||(e=s.layer)):!i.checked&&this._map.hasLayer(s.layer)&&this._map.removeLayer(s.layer);e&&(this._map.setZoom(this._map.getZoom()),this._map.fire("baselayerchange",{layer:e})),this._handlingClick=!1},_expand:function(){e.DomUtil.addClass(this._container,"leaflet-control-layers-expanded")},_collapse:function(){this._container.className=this._container.className.replace(" leaflet-control-layers-expanded","")}}),e.control.layers=function(t,i,s){return new e.Control.Layers(t,i,s)},e.PosAnimation=e.Class.extend({includes:e.Mixin.Events,run:function(t,i,s,o){this.stop(),this._el=t,this._inProgress=!0,this.fire("start"),t.style[e.DomUtil.TRANSITION]="all "+(s||.25)+"s cubic-bezier(0,0,"+(o||.5)+",1)",e.DomEvent.on(t,e.DomUtil.TRANSITION_END,this._onTransitionEnd,this),e.DomUtil.setPosition(t,i),e.Util.falseFn(t.offsetWidth),this._stepTimer=setInterval(e.bind(this.fire,this,"step"),50)},stop:function(){this._inProgress&&(e.DomUtil.setPosition(this._el,this._getPos()),this._onTransitionEnd(),e.Util.falseFn(this._el.offsetWidth))},_transformRe:/(-?[\d\.]+), (-?[\d\.]+)\)/,_getPos:function(){var i,s,o,n=this._el,a=t.getComputedStyle(n);return e.Browser.any3d?(o=a[e.DomUtil.TRANSFORM].match(this._transformRe),i=parseFloat(o[1]),s=parseFloat(o[2])):(i=parseFloat(a.left),s=parseFloat(a.top)),new e.Point(i,s,!0)},_onTransitionEnd:function(){e.DomEvent.off(this._el,e.DomUtil.TRANSITION_END,this._onTransitionEnd,this),this._inProgress&&(this._inProgress=!1,this._el.style[e.DomUtil.TRANSITION]="",clearInterval(this._stepTimer),this.fire("step").fire("end"))}}),e.Map.include({setView:function(t,i,s){i=this._limitZoom(i);var e=this._zoom!==i;if(this._loaded&&!s&&this._layers){this._panAnim&&this._panAnim.stop();var o=e?this._zoomToIfClose&&this._zoomToIfClose(t,i):this._panByIfClose(t);if(o)return clearTimeout(this._sizeTimer),this}return this._resetView(t,i),this},panBy:function(t,i,s){if(t=e.point(t),!t.x&&!t.y)return this;this._panAnim||(this._panAnim=new e.PosAnimation,this._panAnim.on({step:this._onPanTransitionStep,end:this._onPanTransitionEnd},this)),this.fire("movestart"),e.DomUtil.addClass(this._mapPane,"leaflet-pan-anim");var o=e.DomUtil.getPosition(this._mapPane).subtract(t)._round();return this._panAnim.run(this._mapPane,o,i||.25,s),this},_onPanTransitionStep:function(){this.fire("move")},_onPanTransitionEnd:function(){e.DomUtil.removeClass(this._mapPane,"leaflet-pan-anim"),this.fire("moveend")},_panByIfClose:function(t){var i=this._getCenterOffset(t)._floor();return this._offsetIsWithinView(i)?(this.panBy(i),!0):!1},_offsetIsWithinView:function(t,i){var s=i||1,e=this.getSize();return Math.abs(t.x)<=e.x*s&&Math.abs(t.y)<=e.y*s}}),e.PosAnimation=e.DomUtil.TRANSITION?e.PosAnimation:e.PosAnimation.extend({run:function(t,i,s,o){this.stop(),this._el=t,this._inProgress=!0,this._duration=s||.25,this._easeOutPower=1/Math.max(o||.5,.2),this._startPos=e.DomUtil.getPosition(t),this._offset=i.subtract(this._startPos),this._startTime=+new Date,this.fire("start"),this._animate()},stop:function(){this._inProgress&&(this._step(),this._complete())},_animate:function(){this._animId=e.Util.requestAnimFrame(this._animate,this),this._step()},_step:function(){var t=+new Date-this._startTime,i=1e3*this._duration;i>t?this._runFrame(this._easeOut(t/i)):(this._runFrame(1),this._complete())},_runFrame:function(t){var i=this._startPos.add(this._offset.multiplyBy(t));e.DomUtil.setPosition(this._el,i),this.fire("step")},_complete:function(){e.Util.cancelAnimFrame(this._animId),this._inProgress=!1,this.fire("end")},_easeOut:function(t){return 1-Math.pow(1-t,this._easeOutPower)}}),e.Map.mergeOptions({zoomAnimation:e.DomUtil.TRANSITION&&!e.Browser.android23&&!e.Browser.mobileOpera}),e.DomUtil.TRANSITION&&e.Map.addInitHook(function(){e.DomEvent.on(this._mapPane,e.DomUtil.TRANSITION_END,this._catchTransitionEnd,this)}),e.Map.include(e.DomUtil.TRANSITION?{_zoomToIfClose:function(t,i){if(this._animatingZoom)return!0;if(!this.options.zoomAnimation)return!1;var s=this.getZoomScale(i),o=this._getCenterOffset(t)._divideBy(1-1/s);if(!this._offsetIsWithinView(o,1))return!1;e.DomUtil.addClass(this._mapPane,"leaflet-zoom-anim"),this.fire("movestart").fire("zoomstart"),this.fire("zoomanim",{center:t,zoom:i});var n=this._getCenterLayerPoint().add(o);return this._prepareTileBg(),this._runAnimation(t,i,s,n),!0},_catchTransitionEnd:function(){this._animatingZoom&&this._onZoomTransitionEnd()},_runAnimation:function(t,i,s,o,n){this._animateToCenter=t,this._animateToZoom=i,this._animatingZoom=!0,e.Draggable&&(e.Draggable._disabled=!0);var a=e.DomUtil.TRANSFORM,r=this._tileBg;clearTimeout(this._clearTileBgTimer),e.Util.falseFn(r.offsetWidth);var h=e.DomUtil.getScaleString(s,o),l=r.style[a];r.style[a]=n?l+" "+h:h+" "+l},_prepareTileBg:function(){var t=this._tilePane,i=this._tileBg;if(i&&this._getLoadedTilesPercentage(i)>.5&&.5>this._getLoadedTilesPercentage(t))return t.style.visibility="hidden",t.empty=!0,this._stopLoadingImages(t),s;i||(i=this._tileBg=this._createPane("leaflet-tile-pane",this._mapPane),i.style.zIndex=1),i.style[e.DomUtil.TRANSFORM]="",i.style.visibility="hidden",i.empty=!0,t.empty=!1,this._tilePane=this._panes.tilePane=i;var o=this._tileBg=t;e.DomUtil.addClass(o,"leaflet-zoom-animated"),this._stopLoadingImages(o)},_getLoadedTilesPercentage:function(t){var i,s,e=t.getElementsByTagName("img"),o=0;for(i=0,s=e.length;s>i;i++)e[i].complete&&o++;return o/s},_stopLoadingImages:function(t){var i,s,o,n=Array.prototype.slice.call(t.getElementsByTagName("img"));for(i=0,s=n.length;s>i;i++)o=n[i],o.complete||(o.onload=e.Util.falseFn,o.onerror=e.Util.falseFn,o.src=e.Util.emptyImageUrl,o.parentNode.removeChild(o))},_onZoomTransitionEnd:function(){this._restoreTileFront(),e.DomUtil.removeClass(this._mapPane,"leaflet-zoom-anim"),e.Util.falseFn(this._tileBg.offsetWidth),this._animatingZoom=!1,this._resetView(this._animateToCenter,this._animateToZoom,!0,!0),e.Draggable&&(e.Draggable._disabled=!1)},_restoreTileFront:function(){this._tilePane.innerHTML="",this._tilePane.style.visibility="",this._tilePane.style.zIndex=2,this._tileBg.style.zIndex=1},_clearTileBg:function(){this._animatingZoom||this.touchZoom._zooming||(this._tileBg.innerHTML="")}}:{}),e.Map.include({_defaultLocateOptions:{watch:!1,setView:!1,maxZoom:1/0,timeout:1e4,maximumAge:0,enableHighAccuracy:!1},locate:function(t){if(t=this._locationOptions=e.extend(this._defaultLocateOptions,t),!navigator.geolocation)return this._handleGeolocationError({code:0,message:"Geolocation not supported."}),this;var i=e.bind(this._handleGeolocationResponse,this),s=e.bind(this._handleGeolocationError,this);return t.watch?this._locationWatchId=navigator.geolocation.watchPosition(i,s,t):navigator.geolocation.getCurrentPosition(i,s,t),this},stopLocate:function(){return navigator.geolocation&&navigator.geolocation.clearWatch(this._locationWatchId),this},_handleGeolocationError:function(t){var i=t.code,s=t.message||(1===i?"permission denied":2===i?"position unavailable":"timeout");this._locationOptions.setView&&!this._loaded&&this.fitWorld(),this.fire("locationerror",{code:i,message:"Geolocation error: "+s+"."})},_handleGeolocationResponse:function(t){var i=180*t.coords.accuracy/4e7,s=2*i,o=t.coords.latitude,n=t.coords.longitude,a=new e.LatLng(o,n),r=new e.LatLng(o-i,n-s),h=new e.LatLng(o+i,n+s),l=new e.LatLngBounds(r,h),c=this._locationOptions;if(c.setView){var m=Math.min(this.getBoundsZoom(l),c.maxZoom);this.setView(a,m)}this.fire("locationfound",{latlng:a,bounds:l,accuracy:t.coords.accuracy})}})}(this,document),L.Proj={},L.Proj._isProj4Proj=function(t){return t.projName!==void 0},L.Proj.Projection=L.Class.extend({initialize:function(t,i){if(L.Proj._isProj4Proj(t))this._proj=t;else{var s=t;Proj4js.defs[s]=i,this._proj=new Proj4js.Proj(s)}},project:function(t){var i=new L.Point(t.lng,t.lat);return Proj4js.transform(Proj4js.WGS84,this._proj,i)},unproject:function(t,i){var s=Proj4js.transform(this._proj,Proj4js.WGS84,t.clone());return new L.LatLng(s.y,s.x,i)}}),L.Proj.CRS=L.Class.extend({includes:L.CRS,options:{transformation:new L.Transformation(1,0,-1,0)},initialize:function(t,i,s){var e,o,n,a;L.Proj._isProj4Proj(t)?(o=t,e=o.srsCode,a=i||{},this.projection=new L.Proj.Projection(o)):(e=t,n=i,a=s||{},this.projection=new L.Proj.Projection(e,n)),L.Util.setOptions(this,a),this.code=e,this.transformation=this.options.transformation,this.options.origin&&(this.transformation=new L.Transformation(1,-this.options.origin[0],-1,this.options.origin[1])),this.options.scales?this.scale=function(t){return this.options.scales[t]}:this.options.resolutions&&(this.scale=function(t){return 1/this.options.resolutions[t]})}}),L.Proj.CRS.TMS=L.Proj.CRS.extend({initialize:function(t,i,s,e){if(L.Proj._isProj4Proj(t)){var o=t,n=i,a=s||{};a.origin=[n[0],n[3]],L.Proj.CRS.prototype.initialize(o,a)}else{var r=t,h=i,n=s,a=e||{};a.origin=[n[0],n[3]],L.Proj.CRS.prototype.initialize(r,h,a)}this.projectedBounds=n}}),L.Proj.TileLayer={},L.Proj.TileLayer.TMS=L.TileLayer.extend({options:{tms:!0,continuousWorld:!0},initialize:function(t,i,s){if(!(i instanceof L.Proj.CRS.TMS))throw Error("CRS is not L.Proj.CRS.TMS.");L.TileLayer.prototype.initialize.call(this,t,s),this.crs=i;for(var e=this.options.minZoom;this.options.maxZoom>e;e++){var o=(this.crs.projectedBounds[3]-this.crs.projectedBounds[1])/this._projectedTileSize(e);if(Math.abs(o-Math.round(o))>.001)throw Error("Projected bounds does not match grid at zoom "+e)}},getTileUrl:function(t){var i=Math.round((this.crs.projectedBounds[3]-this.crs.projectedBounds[1])/this._projectedTileSize(this._map.getZoom()));return L.Util.template(this._url,L.Util.extend({s:this._getSubdomain(t),z:this._getZoomForUrl(),x:t.x,y:i-t.y-1},this.options))},_projectedTileSize:function(t){return this.options.tileSize/this.crs.scale(t)}}),"undefined"!=typeof module&&(module.exports=L.Proj),"undefined"!=typeof L&&L.CRS!==void 0&&(L.CRS.proj4js=function(){return function(t,i,s,e){return e=e||{},s&&(e.transformation=s),new L.Proj.CRS(t,i,e)}}()),L.Control.MousePosition=L.Control.extend({options:{position:"bottomleft",separator:" : ",emptyString:"Unavailable",lngFirst:!1,numDigits:5,lngFormatter:void 0,latFormatter:void 0},onAdd:function(t){return this._container=L.DomUtil.create("div","leaflet-control-mouseposition"),L.DomEvent.disableClickPropagation(this._container),t.on("mousemove",this._onMouseMove,this),this._container.innerHTML=this.options.emptyString,this._container},onRemove:function(t){t.off("mousemove",this._onMouseMove)},_onMouseMove:function(t){var i=L.Util.formatNum(t.latlng.lng,this.options.numDigits),s=L.Util.formatNum(t.latlng.lat,this.options.numDigits);this.options.lngFormatter&&(i=this.options.lngFormatter(i)),this.options.latFormatter&&(s=this.options.latFormatter(s));var e=this.options.lngFirst?i+this.options.separator+s:s+this.options.separator+i;this._container.innerHTML=e}}),L.Map.mergeOptions({positionControl:!1}),L.Map.addInitHook(function(){this.options.positionControl&&(this.positionControl=new L.Control.MousePosition,this.addControl(this.positionControl))}),L.control.mousePosition=function(t){return new L.Control.MousePosition(t)},function(t,i){L.KSP={},L.KSP.version="0.2.1",L.KSP.CRS={},L.KSP.CRS.EPSG4326=new L.Proj.CRS.TMS(new Proj4js.Proj("EPSG:4326"),[-180,-90,180,90],{resolutions:[.703125,.3515625,.17578125,.087890625,.0439453125,.02197265625]}),L.KSP.CelestialBody=L.Class.extend({initialize:function(t){if(!t.hasOwnProperty("id"))throw Error("must specify id");if(!t.hasOwnProperty("name"))throw Error("must specify name");if(t.hasOwnProperty("crs")){if(!(t.crs instanceof L.Proj.CRS.TMS))throw Error("crs is not an instance of L.Proj.CRS.TMS")}else this.crs=L.KSP.CRS.EPSG4326;t.hasOwnProperty("radius")||(this.radius=1),t.hasOwnProperty("thumbnail")||(this.thumbnail="body-unknown.png"),t.hasOwnProperty("baseLayers")||(this.baseLayers={}),L.Util.extend(this,t)},addTo:function(t){var i,s=t._body;if(t._body=this,t.fire("bodychangestart",{body:this,oldBody:s}),s){for(i in s.baseLayers)s.baseLayers.hasOwnProperty(i)&&t.removeLayer(s.baseLayers[i]);for(i in s.overlays)s.overlays.hasOwnProperty(i)&&t.removeLayer(s.overlays[i])}var e=this.defaultLayer||this.baseLayers.Satellite;if(e){for(i in this.baseLayers)if(this.baseLayers.hasOwnProperty(i)&&this.baseLayers[i]._type===t._baseLayerType){e=this.baseLayers[i];break}t.addLayer(e),t.fire("baselayerchange",{layer:e})}for(i in this.overlays)this.overlays.hasOwnProperty(i)&&t._overlayTypes.indexOf(this.overlays[i]._type)>=0&&(t.addLayer(this.overlays[i]),t.fire("layeradd",{layer:this.overlays[i]}));t.fire("bodychangeend",{body:this,oldBody:s})},onAdd:function(t){this.addTo(t)},removeFrom:function(t){L.KSP.CelestialBody.DUMMY.addTo(t)},onRemove:function(t){this.removeFrom(t)}}),L.KSP.celestialBody=function(t){return new L.KSP.CelestialBody(t)},L.KSP.CelestialBody.DUMMY=L.KSP.celestialBody({id:"",name:"",crs:L.KSP.CRS.EPSG4326}),L.KSP.CelestialBody.ALL_PLANETARY=[L.KSP.CelestialBody.DUMMY],L.KSP.Map=L.Map.extend({options:{crs:L.KSP.CRS.EPSG4326,continuousWorld:!0},initialize:function(t,i){this._baseLayerType=-1,this._overlayTypes=[],L.Util.setOptions(this,i),this.startTrackingLayerState(),this.on("bodychangestart",this._onBodyChangeStart).on("bodychangeend",this._onBodyChangeEnd),L.Map.prototype.initialize.call(this,t,this.options)},clampZoom:function(){var t=this.getZoom(),i=this.getMinZoom(),s=this.getMaxZoom();i>t?this.setZoom(i):t>s?this.setZoom(s):this.fire("zoomend",this)},_onBodyChangeStart:function(){this.stopTrackingLayerState()},_onBodyChangeEnd:function(){this.clampZoom(),this.startTrackingLayerState()},_onLayerStateChange:function(t){if("layeradd"===t.type)t.layer instanceof L.KSP.TileLayer?this._baseLayerType=t.layer._type:t.layer instanceof L.KSP.LayerGroup&&0>this._overlayTypes.indexOf(t.layer._type)&&this._overlayTypes.push(t.layer._type);else if(t.layer instanceof L.KSP.LayerGroup){var i,s,e=t.layer._type,o=this._overlayTypes;for(i=o.length-1;i>=0;i--)s=o[i],s===e&&o.splice(i,1)}},startTrackingLayerState:function(){this.on("layeradd",this._onLayerStateChange).on("layerremove",this._onLayerStateChange)},stopTrackingLayerState:function(){this.off("layeradd",this._onLayerStateChange).off("layerremove",this._onLayerStateChange)}}),L.KSP.map=function(t,i){return new L.KSP.Map(t,i)},L.KSP.TileLayer=L.Proj.TileLayer.TMS.extend({statics:{TYPE_SATELLITE:0,TYPE_COLORRELIEF:1,TYPE_SLOPE:2,DEFAULT_URL:"http://tiles.kerbalmaps.com/{body}/{style}/{z}/{x}/{y}.png"},options:{continuousWorld:!1,noWrap:!1,minZoom:0,maxZoom:5,attribution:"Map data © Joel Pedraza"},initialize:function(t,i,s,e){L.Util.setOptions(this,e),this._type=t,L.Proj.TileLayer.TMS.prototype.initialize.call(this,i,s,this.options)}}),L.KSP.tileLayer=function(t,i,s,e){return new L.KSP.TileLayer(t,i,s,e)},L.KSP.LayerGroup=L.LayerGroup.extend({statics:{TYPE_SPACECENTER:0,TYPE_ANOMALY:1},initialize:function(t,i){this._type=t,L.LayerGroup.prototype.initialize.call(this,i)}}),L.KSP.layerGroup=function(t,i){return new L.KSP.LayerGroup(t,i)},L.KSP.Icon={},L.KSP.Icon.SPACECENTER=new L.Icon({iconUrl:"../assets/images/markers-spacecenter.png",shadowUrl:"../assets/images/markers-shadow.png",iconSize:[30,40],shadowSize:[35,16],iconAnchor:[15,40],shadowAnchor:[10,12],popupAnchor:[0,-35]}),L.KSP.Icon.ANOMALY=new L.Icon({iconUrl:"../assets/images/markers-anomaly.png",shadowUrl:"../assets/images/markers-shadow.png",iconSize:[30,40],shadowSize:[35,16],iconAnchor:[15,40],shadowAnchor:[10,12],popupAnchor:[0,-35]}),L.KSP.Legend={},L.KSP.Legend.SLOPE={"≥ 60°":"#E19678","< 60°":"#C86464","< 30°":"#965A64","< 15°":"#645064","< 5°":"#325064","0°":"#32465A"},L.KSP.Control=L.KSP.control={},L.KSP.Control.Legend=L.Control.extend({options:{position:"bottomright"},onAdd:function(t){return this._container=L.DomUtil.create("div","leaflet-control-legend"),t.on("baselayerchange",this._onLayerChange,this),this._container},_update:function(t){if(this._container.innerHTML="",t){for(var i in t)t.hasOwnProperty(i)&&(this._container.innerHTML+=''+i+"
    ");L.DomUtil.addClass(this._container,"leaflet-control-legend-visible")}else this._container.className=this._container.className.replace(" leaflet-control-legend-visible","")},_onLayerChange:function(t){this._update(t.layer.options.legend)}}),L.Map.mergeOptions({legendControl:!0}),L.Map.addInitHook(function(){this.options.bodyControl&&(this.legendControl=new L.KSP.Control.Legend,this.addControl(this.legendControl))}),L.control.legend=function(t){return new L.KSP.Control.Legend(t)},L.KSP.Control.Scale=L.Control.Scale.extend({options:{imperial:!1},onAdd:function(t){this._radius=0,t._body&&(this._radius=t._body.radius);var i=L.Control.Scale.prototype.onAdd.call(this,t);return t.on("bodychangeend",this._onBodyChangeEnd,this),i},onRemove:function(t){L.Control.Scale.prototype.onRemove.call(this,t),t.off("bodychangeend",this._onBodyChangeEnd)},_onBodyChangeEnd:function(t){this._radius=t.body.radius,this._update()},_update:function(){var t=this._map.getBounds(),i=t.getCenter().lat,s=this._radius*Math.PI*Math.cos(i*Math.PI/180),e=s*(t.getNorthEast().lng-t.getSouthWest().lng)/180,o=this._map.getSize(),n=this.options,a=0;o.x>0&&(a=e*(n.maxWidth/o.x)),this._updateScales(n,a)}}),L.KSP.Map.mergeOptions({scaleControl:!1}),L.KSP.Map.addInitHook(function(){this.options.scaleControl&&(this.scaleControl=new L.KSP.Control.Scale,this.addControl(this.scaleControl))}),L.KSP.control.scale=function(t){return new L.KSP.Control.Scale(t)},L.KSP.Control.CelestialBody=L.Control.extend({options:{position:"topright",collapsed:!0},initialize:function(t,i){L.Util.setOptions(this,i),this._bodies=t,this._timeInMillis=(new Date).valueOf(),this._weekInMillis=6048e5},onAdd:function(){return this._initLayout(),this._update(),this._map.on("bodychangeend",this._update,this),this._container},_initLayout:function(){var t="leaflet-control-celestialbodies",s=this._container=L.DomUtil.create("div",t),e=this._bodies;if(this.options.collapsed){L.DomEvent.on(s,"mouseover",this._expand,this).on(s,"mouseout",this._collapse,this);var o=this._bodiesLink=L.DomUtil.create("a",t+"-toggle",s);o.href="#",o.title="Celestial Bodies",L.DomEvent.on(o,"focus",this._expand,this),this._map.on("movestart",this._collapse,this)}var n=this._list=L.DomUtil.create("ul",t+"-list",s);for(var a in e)if(e.hasOwnProperty(a)){var r=this._addBody(e[a],n);if(e[a].children){var h=i.createElement("ul");for(var l in e[a].children)e[a].children.hasOwnProperty(l)&&this._addBody(e[a].children[l],h);r.appendChild(h)}}},_update:function(){this._map._body&&(this._bodiesLink.style.backgroundImage='url("'+this._map._body.thumbnail+'")')},_addBody:function(t,s){var e,o=i.createElement("li"),n=i.createElement("img");if(n.src=t.thumbnail,n.alt=o.title=t.name,t.addedOn){this._timeInMillis-t.addedOnKerbal Space Center
    -0.0969 : -74.6004"),L.marker([20.5829,-146.5116],{icon:L.KSP.Icon.SPACECENTER}).bindPopup("Kerbal Space Center 2
    20.5829 : -146.5116"),L.marker([-1.5409,-71.9099],{icon:L.KSP.Icon.SPACECENTER}).bindPopup("Island Airfield
    -1.5409 : -71.9099")]),Anomalies:L.KSP.layerGroup(L.KSP.LayerGroup.TYPE_ANOMALY,[L.marker([.1023,-74.5684],{icon:L.KSP.Icon.ANOMALY}).bindPopup("0.1023 : -74.5684"),L.marker([20.6709,-146.4968],{icon:L.KSP.Icon.ANOMALY}).bindPopup("20.6709 : -146.4968"),L.marker([35.5705,-74.9773],{icon:L.KSP.Icon.ANOMALY}).bindPopup("35.5705 : -74.9773"),L.marker([-.6402,-80.7668],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-0.6402 : -80.7668"),L.marker([-28.8083,-13.4401],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-28.8083 : -13.4401"),L.marker([-6.5057,-141.6856],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-6.5057 : -141.6856"),L.marker([81.9551,-128.518],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-81.9551 : -128.518")])}}),L.KSP.CelestialBody.MUN=L.KSP.celestialBody({id:"mun",name:"Mun",crs:L.KSP.CRS.EPSG4326,radius:2e5,addedOn:13682304e5,lastUpdated:1368144e6,thumbnail:"body-mun.png",baseLayers:{Satellite:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SATELLITE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{body:"mun",style:"sat"}),"Color Relief":L.KSP.tileLayer(L.KSP.TileLayer.TYPE_COLORRELIEF,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{body:"mun",style:"color",legend:{"3150 m":"#EBEBEB","-180 m":"#232323"}}),Slope:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SLOPE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{body:"mun",style:"slope",legend:L.KSP.Legend.SLOPE})},overlays:{Anomalies:L.KSP.layerGroup(L.KSP.LayerGroup.TYPE_ANOMALY,[L.marker([-9.8314,25.9177],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-9.8314 : 25.9177"),L.marker([-82.2063,102.9305],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-82.2063 : 102.9305"),L.marker([57.6604,9.1422],{icon:L.KSP.Icon.ANOMALY}).bindPopup("57.6604 : 9.1422"),L.marker([2.4695,81.5133],{icon:L.KSP.Icon.ANOMALY}).bindPopup("2.4695 : 81.5133"),L.marker([12.4432,39.178],{icon:L.KSP.Icon.ANOMALY}).bindPopup("12.4432 : 39.1780"),L.marker([-12.4431,-140.822],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-12.4431 : -140.8220"),L.marker([.7027,22.747],{icon:L.KSP.Icon.ANOMALY}).bindPopup("0.7027 : 22.7470"),L.marker([-70.9556,-68.1378],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-70.9556,-68.1378")])}}),L.KSP.CelestialBody.MINMUS=L.KSP.celestialBody({id:"minmus",name:"Minmus",crs:L.KSP.CRS.EPSG4326,radius:6e4,addedOn:13682304e5,lastUpdated:13682304e5,thumbnail:"body-minmus.png",baseLayers:{Satellite:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SATELLITE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"sat",body:"minmus"}),"Color Relief":L.KSP.tileLayer(L.KSP.TileLayer.TYPE_COLORRELIEF,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"color",body:"minmus",legend:{"5750 m":"#414B41","2500 m":"#BEE6C3","1 m":"#96CDB4","0 m":"#87B9A5"}}),Slope:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SLOPE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"slope",body:"minmus",legend:L.KSP.Legend.SLOPE})},overlays:{Anomalies:L.KSP.layerGroup(L.KSP.LayerGroup.TYPE_ANOMALY,[L.marker([23.7768,60.0462],{icon:L.KSP.Icon.ANOMALY}).bindPopup("23.7768 : 60.0462")])}}),L.KSP.CelestialBody.DUNA=L.KSP.celestialBody({id:"duna",name:"Duna",crs:L.KSP.CRS.EPSG4326,radius:32e4,addedOn:13688352e5,lastUpdated:13688352e5,thumbnail:"body-duna.png",baseLayers:{Satellite:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SATELLITE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"sat",body:"duna"}),"Color Relief":L.KSP.tileLayer(L.KSP.TileLayer.TYPE_COLORRELIEF,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"color",body:"duna",legend:{"4800 m":"#C3A082","4000 m":"#966446","3000 m":"#733219","2000 m":"#501E14","1000 m":"#3C140F","0 m":"#280F0A"}}),Slope:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SLOPE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"slope",body:"duna",legend:L.KSP.Legend.SLOPE})},overlays:{Anomalies:L.KSP.layerGroup(L.KSP.LayerGroup.TYPE_ANOMALY,[L.marker([17.0483,-85.4717],{icon:L.KSP.Icon.ANOMALY}).bindPopup("17.0483 : -85.4717"),L.marker([-30.3525,-28.6828],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-30.3525 : -28.6828"),L.marker([-66.1344,-160.7432],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-66.1344 : -160.7432")])}}),L.KSP.CelestialBody.IKE=L.KSP.celestialBody({id:"ike",name:"Ike",crs:L.KSP.CRS.EPSG4326,radius:13e4,addedOn:13688352e5,lastUpdated:13688352e5,thumbnail:"body-ike.png",baseLayers:{Satellite:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SATELLITE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"sat",body:"ike"}),"Color Relief":L.KSP.tileLayer(L.KSP.TileLayer.TYPE_COLORRELIEF,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"color",body:"ike",legend:{"13000 m":"#828282","11000 m":"#6E6E6E","9000 m":"#5A5A5A","7000 m":"#464646","5000 m":"#323232","2500 m":"#191919","70 m":"#070707"}}),Slope:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SLOPE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"slope",body:"ike",legend:L.KSP.Legend.SLOPE})},overlays:{}}),L.KSP.CelestialBody.DRES=L.KSP.celestialBody({id:"dres",name:"Dres",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-dres.png"}),L.KSP.CelestialBody.JOOL=L.KSP.celestialBody({id:"jool",name:"Jool",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-jool.png"}),L.KSP.CelestialBody.LAYTHE=L.KSP.celestialBody({id:"laythe",name:"Laythe",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-laythe.png"}),L.KSP.CelestialBody.VALL=L.KSP.celestialBody({id:"vall",name:"Vall",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-vall.png"}),L.KSP.CelestialBody.TYLO=L.KSP.celestialBody({id:"tylo",name:"Tylo",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-tylo.png"}),L.KSP.CelestialBody.BOP=L.KSP.celestialBody({id:"bop",name:"Bop",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-bop.png"}),L.KSP.CelestialBody.POL=L.KSP.celestialBody({id:"pol",name:"Pol",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-pol.png"}),L.KSP.CelestialBody.EELOO=L.KSP.celestialBody({id:"eeloo",name:"Eeloo",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-eeloo.png"}),L.KSP.CelestialBody.KERBIN.defaultLayer=L.KSP.CelestialBody.KERBIN.baseLayers.Satellite,L.KSP.CelestialBody.MUN.defaultLayer=L.KSP.CelestialBody.MUN.baseLayers.Satellite,L.KSP.CelestialBody.MINMUS.defaultLayer=L.KSP.CelestialBody.MINMUS.baseLayers.Satellite,L.KSP.CelestialBody.EVE.children=[L.KSP.CelestialBody.GILLY],L.KSP.CelestialBody.KERBIN.children=[L.KSP.CelestialBody.MUN,L.KSP.CelestialBody.MINMUS],L.KSP.CelestialBody.DUNA.children=[L.KSP.CelestialBody.IKE],L.KSP.CelestialBody.JOOL.children=[L.KSP.CelestialBody.LAYTHE,L.KSP.CelestialBody.VALL,L.KSP.CelestialBody.TYLO,L.KSP.CelestialBody.BOP,L.KSP.CelestialBody.POL],L.KSP.CelestialBody.GILLY.parent=L.KSP.CelestialBody.EVE,L.KSP.CelestialBody.MUN.parent=L.KSP.CelestialBody.MINMUS.parent=L.KSP.CelestialBody.KERBIN,L.KSP.CelestialBody.IKE.parent=L.KSP.CelestialBody.DUNA,L.KSP.CelestialBody.LAYTHE.parent=L.KSP.CelestialBody.VALL.parent=L.KSP.CelestialBody.TYLO.parent=L.KSP.CelestialBody.BOP.parent=L.KSP.CelestialBody.POL.parent=L.KSP.CelestialBody.JOOL,L.KSP.CelestialBody.ALL_PLANETARY=[L.KSP.CelestialBody.MOHO,L.KSP.CelestialBody.EVE,L.KSP.CelestialBody.KERBIN,L.KSP.CelestialBody.DUNA,L.KSP.CelestialBody.DRES,L.KSP.CelestialBody.JOOL,L.KSP.CelestialBody.EELOO],L.KSP.Map.addInitHook(function(){this.options.layers=[L.KSP.CelestialBody.KERBIN]})}(this,document);var Settings=Class.create({initialize:function(defaultHost,defaultPort){if(!this.getHost()){this.setHost(defaultHost)}if(!this.getPort()){this.setPort(defaultPort)}},getHost:function(){return this.get("host")},getPort:function(){return this.get("port")},setHost:function(value){return this.set("host",value)},setPort:function(value){return this.set("port",value)},get:function(property){return localStorage.getItem(property)},set:function(property,value){return localStorage.setItem(property,value)}});var Telemachus=Class.create({initialize:function(host,port){this.updateConnection(host,port);this.receiverFunctions=[];this.subscribedFields={};this.orbitingBodies=this.getOrbitalBodies();this.rate=500;this.loopTimeout=setTimeout(this.poll.bind(this),this.rate)},url:function(){return"http://"+this.host+":"+this.port+"/telemachus/datalink"},updateConnection:function(host,port){this.host=host;this.port=port},addReceiverFunction:function(func){this.receiverFunctions.push(func)},subscribeToData:function(fields){for(var i=fields.length-1;i>=0;i--){var field=fields[i];this.subscribedFields[field]=field}},dispatchMessages:function(data){for(var i=this.receiverFunctions.length-1;i>=0;i--){try{this.receiverFunctions[i](data)}catch(e){console.error(e)}}},send:function(message){this.socket.send(JSON.stringify(message))},getOrbitalBodyInfo:function(name){var properties=this.orbitingBodies[name];if(properties){return Object.extend({name:name},properties)}else{return null}},notifyIfLOS:function(request){if(request.transport.status==0){document.fire("telemachus:loss-of-signal");return true}return false},prepareParams:function(params){var normalizedParams=[];Object.keys(params).forEach(function(field){var sanitizedFieldName=field.replace("[","{").replace("]","}");normalizedParams.push(sanitizedFieldName+"="+field)});return normalizedParams},convertData:function(rawData){var data={};var startBracesRegexp=/\{/g;var endBracesRegexp=/\}/g;Object.keys(rawData).forEach(function(key){var convertedFieldName=key.replace(startBracesRegexp,"[").replace(endBracesRegexp,"]");data[convertedFieldName]=rawData[key]});return data},poll:function(){var params=this.prepareParams(this.subscribedFields);var requestURL=this.url()+"?"+params.join("&");new Ajax.Request(requestURL,{method:"get",onSuccess:function(response){var rawData=JSON.parse(response.responseText);var data=this.convertData(rawData);this.dispatchMessages(data)}.bind(this),onException:this.notifyIfLOS.bind(this),onComplete:function(response){setTimeout(this.poll.bind(this),this.rate)}.bind(this)})},sendMessage:function(params,callback){new Ajax.Request(this.url(),{method:"post",postBody:JSON.stringify(params),onSuccess:function(response){var rawData=JSON.parse(response.responseText);var data=this.convertData(rawData);callback(data)}.bind(this),onException:this.notifyIfLOS.bind(this)})},getOrbitalBodies:function(){return{Sun:{id:0,referenceBodyName:null,mapBody:null,atmosphericRadius:0,color:"#FFFF00",surfaceGravity:17.1},Kerbin:{id:1,referenceBodyName:"Sun",mapBody:L.KSP.CelestialBody.KERBIN,atmosphericRadius:7e4,color:"#4a5472",surfaceGravity:9.81},Mun:{id:2,referenceBodyName:"Kerbin",mapBody:L.KSP.CelestialBody.MUN,atmosphericRadius:0,color:"#e2e0d7",surfaceGravity:1.63},Minmus:{id:3,referenceBodyName:"Kerbin",mapBody:L.KSP.CelestialBody.MINMUS,color:"#98f2c5",atmosphericRadius:0,surfaceGravity:.491},Moho:{id:4,referenceBodyName:"Sun",mapBody:L.KSP.CelestialBody.MOHO,atmosphericRadius:0,color:"#fdc39e",surfaceGravity:2.7},Eve:{id:5,referenceBodyName:"Sun",mapBody:L.KSP.CelestialBody.EVE,atmosphericRadius:9e4,color:"#c394fe",surfaceGravity:16.7},Duna:{id:6,referenceBodyName:"Sun",mapBody:L.KSP.CelestialBody.DUNA,atmosphericRadius:5e4,color:"#fc5e49",surfaceGravity:2.94},Ike:{id:7,referenceBodyName:"Duna",mapBody:L.KSP.CelestialBody.IKE,atmosphericRadius:0,color:"#e2e0d7",surfaceGravity:1.1},Jool:{id:8,referenceBodyName:"Sun",mapBody:L.KSP.CelestialBody.JOOL,atmosphericRadius:2e5,color:"#C5DCAB",surfaceGravity:7.85},Laythe:{id:9,referenceBodyName:"Jool",mapBody:L.KSP.CelestialBody.LAYTHE,atmosphericRadius:5e4,color:"#a8b4fe",surfaceGravity:7.85},Vall:{id:10,referenceBodyName:"Jool",mapBody:L.KSP.CelestialBody.VALL,atmosphericRadius:0,color:"#b0f4fe",surfaceGravity:2.31},Bop:{id:11,referenceBodyName:"Jool",mapBody:L.KSP.CelestialBody.BOP,atmosphericRadius:0,color:"#c64605",surfaceGravity:.589},Tylo:{id:12,referenceBodyName:"Jool",mapBody:L.KSP.CelestialBody.TYLO,atmosphericRadius:0,color:"#fdf7ed",surfaceGravity:7.85},Gilly:{id:13,referenceBodyName:"Eve",mapBody:L.KSP.CelestialBody.GILLY,atmosphericRadius:0,color:"#fdcbb1",surfaceGravity:.049},Pol:{id:14,referenceBodyName:"Pol",mapBody:L.KSP.CelestialBody.POL,atmosphericRadius:0,color:"#fec681",surfaceGravity:.373},Dres:{id:15,referenceBodyName:"Sun",mapBody:L.KSP.CelestialBody.DRES,atmosphericRadius:0,color:"#fef8f9",surfaceGravity:1.13},Eeloo:{id:16,referenceBodyName:"Sun",mapBody:L.KSP.CelestialBody.EELOO,atmosphericRadius:0,color:"#e5fafe",surfaceGravity:1.69}}}});var TitleBar=Class.create({initialize:function(datalink,title_bar_id){this.datalink=datalink;this.title_bar_id=title_bar_id;this.title_bar=$(this.title_bar_id);this.initializeLOSNotifier();this.initializeDatalink()},update:function(data){window.requestAnimationFrame(function(){this.title_bar.down("#world-clock").update(TimeFormatters.formatUT(data["t.universalTime"]));this.title_bar.down("#mission-time").update(TimeFormatters.formatMET(data["v.missionTime"]));this.title_bar.down("#mission-time").removeClassName("loss-of-signal")}.bind(this))},initializeLOSNotifier:function(){document.observe("telemachus:loss-of-signal",function(){window.requestAnimationFrame(function(){this.title_bar.down("#mission-time").update("⚠ LOS ⚠");this.title_bar.down("#mission-time").addClassName("loss-of-signal")}.bind(this))}.bind(this))},initializeDatalink:function(){this.datalink.subscribeToData(["t.timeWarp","t.universalTime","v.missionTime"]);this.datalink.addReceiverFunction(this.update.bind(this))}});var ButtonIndicator=Class.create({initialize:function(datalink,indicatorId,apiButtonString){this.datalink=datalink;this.indicatorId=indicatorId;this.indicator=$(this.indicatorId);this.apiButtonString=apiButtonString;this.initializeDatalink()},update:function(data){if(data[this.apiButtonString]==true){this.indicator.addClassName("on")}else{this.indicator.removeClassName("on")}},initializeDatalink:function(){this.datalink.subscribeToData([this.apiButtonString]);this.datalink.addReceiverFunction(this.update.bind(this))}});var ReadoutTable=Class.create({initialize:function(datalink,tableId,dataRows){this.datalink=datalink;this.tableId=tableId;this.table=$(this.tableId);this.dataRows=dataRows;this.initializeDatalink()},update:function(data){window.requestAnimationFrame(function(){this.dataRows.forEach(function(row){var rowId=row.label;var tableRow=this.table.down("tr[data-label='"+rowId+"']");if(!tableRow){var tableRow=new Element("tr",{"data-label":rowId});tableRow.insert(""+row.label+"");this.table.insert(tableRow)}tableRow.down("td").update(row.formatter(data[row.value]))}.bind(this))}.bind(this))},initializeDatalink:function(){var dataValues=this.dataRows.map(function(dataRow){return dataRow.value});this.datalink.subscribeToData(dataValues);this.datalink.addReceiverFunction(this.update.bind(this))}});var ResourceMonitor=Class.create({initialize:function(datalink,resourceName,options){this.datalink=datalink;this.resourceName=resourceName;this.options=Object.extend({currentStageProgressBar:null,totalProgressBar:null,valuePrefix:null},options);this.resourceStrings=this.buildResourceStrings();this.initializeDatalink()},update:function(data){window.requestAnimationFrame(function(){if(this.options.totalProgressBar){this.options.totalProgressBar.value=data[this.resourceStrings.totalAvailable];this.options.totalProgressBar.max=data[this.resourceStrings.totalMax]}if(this.options.currentStageProgressBar){this.options.currentStageProgressBar.value=data[this.resourceStrings.currentStageAvailable];this.options.currentStageProgressBar.max=data[this.resourceStrings.currentStageMax]}this.updateValue("-total-value",data[this.resourceStrings.totalAvailable]);this.updateValue("-total-max",data[this.resourceStrings.totalMax]);this.updateValue("-current-stage-value",data[this.resourceStrings.currentStageAvailable]);this.updateValue("-current-stage-max",data[this.resourceStrings.currentStageMax])}.bind(this))},updateValue:function(id,value){if($(this.options.valuePrefix+id)){if(value<0){$(this.options.valuePrefix+id).update("NA")}else{$(this.options.valuePrefix+id).update(value.toFixed(2))}}},buildResourceStrings:function(){return{totalAvailable:"r.resource["+this.resourceName+"]",totalMax:"r.resourceMax["+this.resourceName+"]",currentStageAvailable:"r.resourceCurrent["+this.resourceName+"]",currentStageMax:"r.resourceCurrentMax["+this.resourceName+"]"}},initializeDatalink:function(){this.datalink.subscribeToData([this.resourceStrings.totalAvailable,this.resourceStrings.totalMax,this.resourceStrings.currentStageAvailable,this.resourceStrings.currentStageMax]);this.datalink.addReceiverFunction(this.update.bind(this))}});var DataTable=Class.create({initialize:function(tableID,dataRows){this.tableID=tableID;this.table=$(this.tableID);this.dataRows=dataRows},update:function(){window.requestAnimationFrame(function(){this.dataRows.forEach(function(row){var rowId=row.label;var tableRow=this.table.down("tr[data-label='"+rowId+"']");if(!tableRow){var tableRow=new Element("tr",{"data-label":rowId});tableRow.insert(""+row.label+"");this.table.insert(tableRow)}tableRow.down("td").update(row.value)}.bind(this))}.bind(this))},clear:function(){window.requestAnimationFrame(function(){this.dataRows=[];this.table.innerHTML=""}.bind(this))}});var AtmosphericDensityGauge=Class.create({initialize:function(datalink,gaugeID){this.datalink=datalink;this.gaugeID=gaugeID;this.gauge=$(this.gaugeID);this.initializeDatalink();this.func=function(x){return Math.log(2*x)}},update:function(data){var max=this.func(100);var value=this.func(data["v.atmosphericPressure"]*100);if(!isFinite(value)){value=0}this.gauge.value=value;this.gauge.max=max},initializeDatalink:function(){this.datalink.subscribeToData(["v.atmosphericPressure"]);this.datalink.addReceiverFunction(this.update.bind(this))}});var ThrottleGauge=Class.create({initialize:function(datalink,gaugeID){this.datalink=datalink;this.gaugeID=gaugeID;this.gauge=$(this.gaugeID);this.initializeDatalink()},update:function(data){this.gauge.value=data["f.throttle"]*100;this.gauge.max=100},initializeDatalink:function(){this.datalink.subscribeToData(["f.throttle"]);this.datalink.addReceiverFunction(this.update.bind(this))}});"use strict";var THREE={REVISION:"75"};"function"===typeof define&&define.amd?define("three",THREE):"undefined"!==typeof exports&&"undefined"!==typeof module&&(module.exports=THREE);void 0===Number.EPSILON&&(Number.EPSILON=Math.pow(2,-52));void 0===Math.sign&&(Math.sign=function(a){return 0>a?-1:0>16&255)/255;this.g=(a>>8&255)/255;this.b=(a&255)/255;return this},setRGB:function(a,b,c){this.r=a;this.g=b;this.b=c;return this},setHSL:function(){function a(a,c,d){0>d&&(d+=1);1d?c:d<2/3?a+6*(c-a)*(2/3-d):a}return function(b,c,d){b=THREE.Math.euclideanModulo(b,1);c=THREE.Math.clamp(c,0,1);d=THREE.Math.clamp(d,0,1);0===c?this.r=this.g=this.b=d:(c=.5>=d?d*(1+c):d+c-d*c,d=2*d-c,this.r=a(d,c,b+1/3),this.g=a(d,c,b),this.b=a(d,c,b-1/3));return this}}(),setStyle:function(a){function b(b){void 0!==b&&1>parseFloat(b)&&console.warn("THREE.Color: Alpha component of "+a+" will be ignored.")}var c;if(c=/^((?:rgb|hsl)a?)\(\s*([^\)]*)\)/.exec(a)){var d=c[2];switch(c[1]){case"rgb":case"rgba":if(c=/^(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(d))return this.r=Math.min(255,parseInt(c[1],10))/255,this.g=Math.min(255,parseInt(c[2],10))/255,this.b=Math.min(255,parseInt(c[3],10))/255,b(c[5]),this;if(c=/^(\d+)\%\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(d))return this.r=Math.min(100,parseInt(c[1],10))/100,this.g=Math.min(100,parseInt(c[2],10))/100,this.b=Math.min(100,parseInt(c[3],10))/100,b(c[5]),this;break;case"hsl":case"hsla":if(c=/^([0-9]*\.?[0-9]+)\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(d)){var d=parseFloat(c[1])/360,e=parseInt(c[2],10)/100,f=parseInt(c[3],10)/100;b(c[5]);return this.setHSL(d,e,f)}}}else if(c=/^\#([A-Fa-f0-9]+)$/.exec(a)){c=c[1];d=c.length;if(3===d)return this.r=parseInt(c.charAt(0)+c.charAt(0),16)/255,this.g=parseInt(c.charAt(1)+c.charAt(1),16)/255,this.b=parseInt(c.charAt(2)+c.charAt(2),16)/255,this;if(6===d)return this.r=parseInt(c.charAt(0)+c.charAt(1),16)/255,this.g=parseInt(c.charAt(2)+c.charAt(3),16)/255,this.b=parseInt(c.charAt(4)+c.charAt(5),16)/255,this}a&&0=h?k/(e+f):k/(2-e-f);switch(e){case b:g=(c-d)/k+(cf&&c>b?(c=2*Math.sqrt(1+c-f-b),this._w=(k-g)/c,this._x=.25*c,this._y=(a+e)/c,this._z=(d+h)/c):f>b?(c=2*Math.sqrt(1+f-c-b),this._w=(d-h)/c,this._x=(a+e)/c,this._y=.25*c,this._z=(g+k)/c):(c=2*Math.sqrt(1+b-c-f),this._w=(e-a)/c,this._x=(d+h)/c,this._y=(g+k)/c,this._z=.25*c);this.onChangeCallback();return this},setFromUnitVectors:function(){var a,b;return function(c,d){void 0===a&&(a=new THREE.Vector3); +Math.cosh = Math.cosh || function(x) { + return (Math.exp(x) + Math.exp(-x)) / 2; +} -b=c.dot(d)+1;1e-6>b?(b=0,Math.abs(c.x)>Math.abs(c.z)?a.set(-c.y,c.x,0):a.set(0,-c.z,c.y)):a.crossVectors(c,d);this._x=a.x;this._y=a.y;this._z=a.z;this._w=b;this.normalize();return this}}(),inverse:function(){this.conjugate().normalize();return this},conjugate:function(){this._x*=-1;this._y*=-1;this._z*=-1;this.onChangeCallback();return this},dot:function(a){return this._x*a._x+this._y*a._y+this._z*a._z+this._w*a._w},lengthSq:function(){return this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w},length:function(){return Math.sqrt(this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w)},normalize:function(){var a=this.length();0===a?(this._z=this._y=this._x=0,this._w=1):(a=1/a,this._x*=a,this._y*=a,this._z*=a,this._w*=a);this.onChangeCallback();return this},multiply:function(a,b){return void 0!==b?(console.warn("THREE.Quaternion: .multiply() now only accepts one argument. Use .multiplyQuaternions( a, b ) instead."),this.multiplyQuaternions(a,b)):this.multiplyQuaternions(this,a)},multiplyQuaternions:function(a,b){var c=a._x,d=a._y,e=a._z,f=a._w,g=b._x,h=b._y,k=b._z,l=b._w;this._x=c*l+f*g+d*k-e*h;this._y=d*l+f*h+e*g-c*k;this._z=e*l+f*k+c*h-d*g;this._w=f*l-c*g-d*h-e*k;this.onChangeCallback();return this},slerp:function(a,b){if(0===b)return this;if(1===b)return this.copy(a);var c=this._x,d=this._y,e=this._z,f=this._w,g=f*a._w+c*a._x+d*a._y+e*a._z;0>g?(this._w=-a._w,this._x=-a._x,this._y=-a._y,this._z=-a._z,g=-g):this.copy(a);if(1<=g)return this._w=f,this._x=c,this._y=d,this._z=e,this;var h=Math.sqrt(1-g*g);if(.001>Math.abs(h))return this._w=.5*(f+this._w),this._x=.5*(c+this._x),this._y=.5*(d+this._y),this._z=.5*(e+this._z),this;var k=Math.atan2(h,g),g=Math.sin((1-b)*k)/h,h=Math.sin(b*k)/h;this._w=f*g+this._w*h;this._x=c*g+this._x*h;this._y=d*g+this._y*h;this._z=e*g+this._z*h;this.onChangeCallback();return this},equals:function(a){return a._x===this._x&&a._y===this._y&&a._z===this._z&&a._w===this._w},fromArray:function(a,b){void 0===b&&(b=0);this._x=a[b];this._y=a[b+1];this._z=a[b+2];this._w=a[b+3];this.onChangeCallback();return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);a[b]=this._x;a[b+1]=this._y;a[b+2]=this._z;a[b+3]=this._w;return a},onChange:function(a){this.onChangeCallback=a;return this},onChangeCallback:function(){}};Object.assign(THREE.Quaternion,{slerp:function(a,b,c,d){return c.copy(a).slerp(b,d)},slerpFlat:function(a,b,c,d,e,f,g){var h=c[d+0],k=c[d+1],l=c[d+2];c=c[d+3];d=e[f+0];var p=e[f+1],n=e[f+2];e=e[f+3];if(c!==e||h!==d||k!==p||l!==n){f=1-g;var m=h*d+k*p+l*n+c*e,q=0<=m?1:-1,u=1-m*m;u>Number.EPSILON&&(u=Math.sqrt(u),m=Math.atan2(u,m*q),f=Math.sin(f*m)/u,g=Math.sin(g*m)/u);q*=g;h=h*f+d*q;k=k*f+p*q;l=l*f+n*q;c=c*f+e*q;f===1-g&&(g=1/Math.sqrt(h*h+k*k+l*l+c*c),h*=g,k*=g,l*=g,c*=g)}a[b]=h;a[b+1]=k;a[b+2]=l;a[b+3]=c}});THREE.Vector2=function(a,b){this.x=a||0;this.y=b||0};THREE.Vector2.prototype={constructor:THREE.Vector2,get width(){return this.x},set width(a){this.x=a},get height(){return this.y},set height(a){this.y=a},set:function(a,b){this.x=a;this.y=b;return this},setScalar:function(a){this.y=this.x=a;return this},setX:function(a){this.x=a;return this},setY:function(a){this.y=a;return this},setComponent:function(a,b){switch(a){case 0:this.x=b;break;case 1:this.y=b;break;default:throw Error("index is out of range: "+a)}},getComponent:function(a){switch(a){case 0:return this.x;case 1:return this.y;default:throw Error("index is out of range: "+a)}},clone:function(){return new this.constructor(this.x,this.y)},copy:function(a){this.x=a.x;this.y=a.y;return this},add:function(a,b){if(void 0!==b)return console.warn("THREE.Vector2: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(a,b);this.x+=a.x;this.y+=a.y;return this},addScalar:function(a){this.x+=a;this.y+=a;return this},addVectors:function(a,b){this.x=a.x+b.x;this.y=a.y+b.y;return this},addScaledVector:function(a,b){this.x+=a.x*b;this.y+=a.y*b;return this},sub:function(a,b){if(void 0!==b)return console.warn("THREE.Vector2: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(a,b);this.x-=a.x;this.y-=a.y;return this},subScalar:function(a){this.x-=a;this.y-=a;return this},subVectors:function(a,b){this.x=a.x-b.x;this.y=a.y-b.y;return this},multiply:function(a){this.x*=a.x;this.y*=a.y;return this},multiplyScalar:function(a){isFinite(a)?(this.x*=a,this.y*=a):this.y=this.x=0;return this},divide:function(a){this.x/=a.x;this.y/=a.y;return this},divideScalar:function(a){return this.multiplyScalar(1/a)},min:function(a){this.x=Math.min(this.x,a.x);this.y=Math.min(this.y,a.y);return this},max:function(a){this.x=Math.max(this.x,a.x);this.y=Math.max(this.y,a.y);return this},clamp:function(a,b){this.x=Math.max(a.x,Math.min(b.x,this.x));this.y=Math.max(a.y,Math.min(b.y,this.y));return this},clampScalar:function(){var a,b;return function(c,d){void 0===a&&(a=new THREE.Vector2,b=new THREE.Vector2);a.set(c,c);b.set(d,d);return this.clamp(a,b)}}(),clampLength:function(a,b){var c=this.length();this.multiplyScalar(Math.max(a,Math.min(b,c))/c);return this},floor:function(){this.x=Math.floor(this.x);this.y=Math.floor(this.y);return this},ceil:function(){this.x=Math.ceil(this.x);this.y=Math.ceil(this.y);return this},round:function(){this.x=Math.round(this.x);this.y=Math.round(this.y);return this},roundToZero:function(){this.x=0>this.x?Math.ceil(this.x):Math.floor(this.x);this.y=0>this.y?Math.ceil(this.y):Math.floor(this.y);return this},negate:function(){this.x=-this.x;this.y=-this.y;return this},dot:function(a){return this.x*a.x+this.y*a.y},lengthSq:function(){return this.x*this.x+this.y*this.y},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y)},lengthManhattan:function(){return Math.abs(this.x)+Math.abs(this.y)},normalize:function(){return this.divideScalar(this.length())},angle:function(){var a=Math.atan2(this.y,this.x);0>a&&(a+=2*Math.PI);return a},distanceTo:function(a){return Math.sqrt(this.distanceToSquared(a))},distanceToSquared:function(a){var b=this.x-a.x;a=this.y-a.y;return b*b+a*a},setLength:function(a){return this.multiplyScalar(a/this.length())},lerp:function(a,b){this.x+=(a.x-this.x)*b;this.y+=(a.y-this.y)*b;return this},lerpVectors:function(a,b,c){this.subVectors(b,a).multiplyScalar(c).add(a);return this},equals:function(a){return a.x===this.x&&a.y===this.y},fromArray:function(a,b){void 0===b&&(b=0);this.x=a[b];this.y=a[b+1];return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);a[b]=this.x;a[b+1]=this.y;return a},fromAttribute:function(a,b,c){void 0===c&&(c=0);b=b*a.itemSize+c;this.x=a.array[b];this.y=a.array[b+1];return this},rotateAround:function(a,b){var c=Math.cos(b),d=Math.sin(b),e=this.x-a.x,f=this.y-a.y;this.x=e*c-f*d+a.x;this.y=e*d+f*c+a.y;return this}};THREE.Vector3=function(a,b,c){this.x=a||0;this.y=b||0;this.z=c||0};THREE.Vector3.prototype={constructor:THREE.Vector3,set:function(a,b,c){this.x=a;this.y=b;this.z=c;return this},setScalar:function(a){this.z=this.y=this.x=a;return this},setX:function(a){this.x=a;return this},setY:function(a){this.y=a;return this},setZ:function(a){this.z=a;return this},setComponent:function(a,b){switch(a){case 0:this.x=b;break;case 1:this.y=b;break;case 2:this.z=b;break;default:throw Error("index is out of range: "+a)}},getComponent:function(a){switch(a){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw Error("index is out of range: "+a)}},clone:function(){return new this.constructor(this.x,this.y,this.z)},copy:function(a){this.x=a.x;this.y=a.y;this.z=a.z;return this},add:function(a,b){if(void 0!==b)return console.warn("THREE.Vector3: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(a,b);this.x+=a.x;this.y+=a.y;this.z+=a.z;return this},addScalar:function(a){this.x+=a;this.y+=a;this.z+=a;return this},addVectors:function(a,b){this.x=a.x+b.x;this.y=a.y+b.y;this.z=a.z+b.z;return this},addScaledVector:function(a,b){this.x+=a.x*b;this.y+=a.y*b;this.z+=a.z*b;return this},sub:function(a,b){if(void 0!==b)return console.warn("THREE.Vector3: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(a,b);this.x-=a.x;this.y-=a.y;this.z-=a.z;return this},subScalar:function(a){this.x-=a;this.y-=a;this.z-=a;return this},subVectors:function(a,b){this.x=a.x-b.x;this.y=a.y-b.y;this.z=a.z-b.z;return this},multiply:function(a,b){if(void 0!==b)return console.warn("THREE.Vector3: .multiply() now only accepts one argument. Use .multiplyVectors( a, b ) instead."),this.multiplyVectors(a,b);this.x*=a.x;this.y*=a.y;this.z*=a.z;return this},multiplyScalar:function(a){isFinite(a)?(this.x*=a,this.y*=a,this.z*=a):this.z=this.y=this.x=0;return this},multiplyVectors:function(a,b){this.x=a.x*b.x;this.y=a.y*b.y;this.z=a.z*b.z;return this},applyEuler:function(){var a;return function(b){!1===b instanceof THREE.Euler&&console.error("THREE.Vector3: .applyEuler() now expects an Euler rotation rather than a Vector3 and order.");void 0===a&&(a=new THREE.Quaternion);this.applyQuaternion(a.setFromEuler(b));return this}}(),applyAxisAngle:function(){var a;return function(b,c){void 0===a&&(a=new THREE.Quaternion);this.applyQuaternion(a.setFromAxisAngle(b,c));return this}}(),applyMatrix3:function(a){var b=this.x,c=this.y,d=this.z;a=a.elements;this.x=a[0]*b+a[3]*c+a[6]*d;this.y=a[1]*b+a[4]*c+a[7]*d;this.z=a[2]*b+a[5]*c+a[8]*d;return this},applyMatrix4:function(a){var b=this.x,c=this.y,d=this.z;a=a.elements;this.x=a[0]*b+a[4]*c+a[8]*d+a[12];this.y=a[1]*b+a[5]*c+a[9]*d+a[13];this.z=a[2]*b+a[6]*c+a[10]*d+a[14];return this},applyProjection:function(a){var b=this.x,c=this.y,d=this.z;a=a.elements;var e=1/(a[3]*b+a[7]*c+a[11]*d+a[15]);this.x=(a[0]*b+a[4]*c+a[8]*d+a[12])*e;this.y=(a[1]*b+a[5]*c+a[9]*d+a[13])*e;this.z=(a[2]*b+a[6]*c+a[10]*d+a[14])*e;return this},applyQuaternion:function(a){var b=this.x,c=this.y,d=this.z,e=a.x,f=a.y,g=a.z;a=a.w;var h=a*b+f*d-g*c,k=a*c+g*b-e*d,l=a*d+e*c-f*b,b=-e*b-f*c-g*d;this.x=h*a+b*-e+k*-g-l*-f;this.y=k*a+b*-f+l*-e-h*-g;this.z=l*a+b*-g+h*-f-k*-e;return this},project:function(){var a;return function(b){void 0===a&&(a=new THREE.Matrix4);a.multiplyMatrices(b.projectionMatrix,a.getInverse(b.matrixWorld));return this.applyProjection(a)}}(),unproject:function(){var a;return function(b){void 0===a&&(a=new THREE.Matrix4);a.multiplyMatrices(b.matrixWorld,a.getInverse(b.projectionMatrix));return this.applyProjection(a)}}(),transformDirection:function(a){var b=this.x,c=this.y,d=this.z;a=a.elements;this.x=a[0]*b+a[4]*c+a[8]*d;this.y=a[1]*b+a[5]*c+a[9]*d;this.z=a[2]*b+a[6]*c+a[10]*d;this.normalize();return this},divide:function(a){this.x/=a.x;this.y/=a.y;this.z/=a.z;return this},divideScalar:function(a){return this.multiplyScalar(1/a)},min:function(a){this.x=Math.min(this.x,a.x);this.y=Math.min(this.y,a.y);this.z=Math.min(this.z,a.z);return this},max:function(a){this.x=Math.max(this.x,a.x);this.y=Math.max(this.y,a.y);this.z=Math.max(this.z,a.z);return this},clamp:function(a,b){this.x=Math.max(a.x,Math.min(b.x,this.x));this.y=Math.max(a.y,Math.min(b.y,this.y));this.z=Math.max(a.z,Math.min(b.z,this.z));return this},clampScalar:function(){var a,b;return function(c,d){void 0===a&&(a=new THREE.Vector3,b=new THREE.Vector3);a.set(c,c,c);b.set(d,d,d);return this.clamp(a,b)}}(),clampLength:function(a,b){var c=this.length();this.multiplyScalar(Math.max(a,Math.min(b,c))/c);return this},floor:function(){this.x=Math.floor(this.x);this.y=Math.floor(this.y);this.z=Math.floor(this.z);return this},ceil:function(){this.x=Math.ceil(this.x);this.y=Math.ceil(this.y);this.z=Math.ceil(this.z);return this},round:function(){this.x=Math.round(this.x);this.y=Math.round(this.y);this.z=Math.round(this.z);return this},roundToZero:function(){this.x=0>this.x?Math.ceil(this.x):Math.floor(this.x);this.y=0>this.y?Math.ceil(this.y):Math.floor(this.y);this.z=0>this.z?Math.ceil(this.z):Math.floor(this.z);return this},negate:function(){this.x=-this.x;this.y=-this.y;this.z=-this.z;return this},dot:function(a){return this.x*a.x+this.y*a.y+this.z*a.z},lengthSq:function(){return this.x*this.x+this.y*this.y+this.z*this.z},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)},lengthManhattan:function(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)},normalize:function(){return this.divideScalar(this.length())},setLength:function(a){return this.multiplyScalar(a/this.length())},lerp:function(a,b){this.x+=(a.x-this.x)*b;this.y+=(a.y-this.y)*b;this.z+=(a.z-this.z)*b;return this},lerpVectors:function(a,b,c){this.subVectors(b,a).multiplyScalar(c).add(a);return this},cross:function(a,b){if(void 0!==b)return console.warn("THREE.Vector3: .cross() now only accepts one argument. Use .crossVectors( a, b ) instead."),this.crossVectors(a,b);var c=this.x,d=this.y,e=this.z;this.x=d*a.z-e*a.y;this.y=e*a.x-c*a.z;this.z=c*a.y-d*a.x;return this},crossVectors:function(a,b){var c=a.x,d=a.y,e=a.z,f=b.x,g=b.y,h=b.z;this.x=d*h-e*g;this.y=e*f-c*h;this.z=c*g-d*f;return this},projectOnVector:function(){var a,b;return function(c){void 0===a&&(a=new THREE.Vector3);a.copy(c).normalize();b=this.dot(a);return this.copy(a).multiplyScalar(b)}}(),projectOnPlane:function(){var a;return function(b){void 0===a&&(a=new THREE.Vector3);a.copy(this).projectOnVector(b);return this.sub(a)}}(),reflect:function(){var a;return function(b){void 0===a&&(a=new THREE.Vector3);return this.sub(a.copy(b).multiplyScalar(2*this.dot(b)))}}(),angleTo:function(a){a=this.dot(a)/Math.sqrt(this.lengthSq()*a.lengthSq());return Math.acos(THREE.Math.clamp(a,-1,1))},distanceTo:function(a){return Math.sqrt(this.distanceToSquared(a))},distanceToSquared:function(a){var b=this.x-a.x,c=this.y-a.y;a=this.z-a.z;return b*b+c*c+a*a},setFromSpherical:function(a){var b=Math.sin(a.phi)*a.radius;this.x=b*Math.sin(a.theta);this.y=Math.cos(a.phi)*a.radius;this.z=b*Math.cos(a.theta);return this},setFromMatrixPosition:function(a){return this.setFromMatrixColumn(a,3)},setFromMatrixScale:function(a){var b=this.setFromMatrixColumn(a,0).length(),c=this.setFromMatrixColumn(a,1).length();a=this.setFromMatrixColumn(a,2).length();this.x=b;this.y=c;this.z=a;return this},setFromMatrixColumn:function(a,b){"number"===typeof a&&(console.warn("THREE.Vector3: setFromMatrixColumn now expects ( matrix, index )."),b=a=b);return this.fromArray(a.elements,4*b)},equals:function(a){return a.x===this.x&&a.y===this.y&&a.z===this.z},fromArray:function(a,b){void 0===b&&(b=0);this.x=a[b];this.y=a[b+1];this.z=a[b+2];return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);a[b]=this.x;a[b+1]=this.y;a[b+2]=this.z;return a},fromAttribute:function(a,b,c){void 0===c&&(c=0);b=b*a.itemSize+c;this.x=a.array[b];this.y=a.array[b+1];this.z=a.array[b+2];return this}};THREE.Vector4=function(a,b,c,d){this.x=a||0;this.y=b||0;this.z=c||0;this.w=void 0!==d?d:1};THREE.Vector4.prototype={constructor:THREE.Vector4,set:function(a,b,c,d){this.x=a;this.y=b;this.z=c;this.w=d;return this},setScalar:function(a){this.w=this.z=this.y=this.x=a;return this},setX:function(a){this.x=a;return this},setY:function(a){this.y=a;return this},setZ:function(a){this.z=a;return this},setW:function(a){this.w=a;return this},setComponent:function(a,b){switch(a){case 0:this.x=b;break;case 1:this.y=b;break;case 2:this.z=b;break;case 3:this.w=b;break;default:throw Error("index is out of range: "+a)}},getComponent:function(a){switch(a){case 0:return this.x;case 1:return this.y;case 2:return this.z;case 3:return this.w;default:throw Error("index is out of range: "+a)}},clone:function(){return new this.constructor(this.x,this.y,this.z,this.w)},copy:function(a){this.x=a.x;this.y=a.y;this.z=a.z;this.w=void 0!==a.w?a.w:1;return this},add:function(a,b){if(void 0!==b)return console.warn("THREE.Vector4: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(a,b);this.x+=a.x;this.y+=a.y;this.z+=a.z;this.w+=a.w;return this},addScalar:function(a){this.x+=a;this.y+=a;this.z+=a;this.w+=a;return this},addVectors:function(a,b){this.x=a.x+b.x;this.y=a.y+b.y;this.z=a.z+b.z;this.w=a.w+b.w;return this},addScaledVector:function(a,b){this.x+=a.x*b;this.y+=a.y*b;this.z+=a.z*b;this.w+=a.w*b;return this},sub:function(a,b){if(void 0!==b)return console.warn("THREE.Vector4: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(a,b);this.x-=a.x;this.y-=a.y;this.z-=a.z;this.w-=a.w;return this},subScalar:function(a){this.x-=a;this.y-=a;this.z-=a;this.w-=a;return this},subVectors:function(a,b){this.x=a.x-b.x;this.y=a.y-b.y;this.z=a.z-b.z;this.w=a.w-b.w;return this},multiplyScalar:function(a){isFinite(a)?(this.x*=a,this.y*=a,this.z*=a,this.w*=a):this.w=this.z=this.y=this.x=0;return this},applyMatrix4:function(a){var b=this.x,c=this.y,d=this.z,e=this.w;a=a.elements;this.x=a[0]*b+a[4]*c+a[8]*d+a[12]*e;this.y=a[1]*b+a[5]*c+a[9]*d+a[13]*e;this.z=a[2]*b+a[6]*c+a[10]*d+a[14]*e;this.w=a[3]*b+a[7]*c+a[11]*d+a[15]*e;return this},divideScalar:function(a){return this.multiplyScalar(1/a)},setAxisAngleFromQuaternion:function(a){this.w=2*Math.acos(a.w);var b=Math.sqrt(1-a.w*a.w);1e-4>b?(this.x=1,this.z=this.y=0):(this.x=a.x/b,this.y=a.y/b,this.z=a.z/b);return this},setAxisAngleFromRotationMatrix:function(a){var b,c,d;a=a.elements;var e=a[0];d=a[4];var f=a[8],g=a[1],h=a[5],k=a[9];c=a[2];b=a[6];var l=a[10];if(.01>Math.abs(d-g)&&.01>Math.abs(f-c)&&.01>Math.abs(k-b)){if(.1>Math.abs(d+g)&&.1>Math.abs(f+c)&&.1>Math.abs(k+b)&&.1>Math.abs(e+h+l-3))return this.set(1,0,0,0),this;a=Math.PI;e=(e+1)/2;h=(h+1)/2;l=(l+1)/2;d=(d+g)/4;f=(f+c)/4;k=(k+b)/4;e>h&&e>l?.01>e?(b=0,d=c=.707106781):(b=Math.sqrt(e),c=d/b,d=f/b):h>l?.01>h?(b=.707106781,c=0,d=.707106781):(c=Math.sqrt(h),b=d/c,d=k/c):.01>l?(c=b=.707106781,d=0):(d=Math.sqrt(l),b=f/d,c=k/d);this.set(b,c,d,a);return this}a=Math.sqrt((b-k)*(b-k)+(f-c)*(f-c)+(g-d)*(g-d));.001>Math.abs(a)&&(a=1);this.x=(b-k)/a;this.y=(f-c)/a;this.z=(g-d)/a;this.w=Math.acos((e+h+l-1)/2);return this},min:function(a){this.x=Math.min(this.x,a.x);this.y=Math.min(this.y,a.y);this.z=Math.min(this.z,a.z);this.w=Math.min(this.w,a.w);return this},max:function(a){this.x=Math.max(this.x,a.x);this.y=Math.max(this.y,a.y);this.z=Math.max(this.z,a.z);this.w=Math.max(this.w,a.w);return this},clamp:function(a,b){this.x=Math.max(a.x,Math.min(b.x,this.x));this.y=Math.max(a.y,Math.min(b.y,this.y));this.z=Math.max(a.z,Math.min(b.z,this.z));this.w=Math.max(a.w,Math.min(b.w,this.w));return this},clampScalar:function(){var a,b;return function(c,d){void 0===a&&(a=new THREE.Vector4,b=new THREE.Vector4);a.set(c,c,c,c);b.set(d,d,d,d);return this.clamp(a,b)}}(),floor:function(){this.x=Math.floor(this.x);this.y=Math.floor(this.y);this.z=Math.floor(this.z);this.w=Math.floor(this.w);return this},ceil:function(){this.x=Math.ceil(this.x);this.y=Math.ceil(this.y);this.z=Math.ceil(this.z);this.w=Math.ceil(this.w);return this},round:function(){this.x=Math.round(this.x);this.y=Math.round(this.y);this.z=Math.round(this.z);this.w=Math.round(this.w);return this},roundToZero:function(){this.x=0>this.x?Math.ceil(this.x):Math.floor(this.x);this.y=0>this.y?Math.ceil(this.y):Math.floor(this.y);this.z=0>this.z?Math.ceil(this.z):Math.floor(this.z);this.w=0>this.w?Math.ceil(this.w):Math.floor(this.w);return this},negate:function(){this.x=-this.x;this.y=-this.y;this.z=-this.z;this.w=-this.w;return this},dot:function(a){return this.x*a.x+this.y*a.y+this.z*a.z+this.w*a.w},lengthSq:function(){return this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w)},lengthManhattan:function(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)+Math.abs(this.w)},normalize:function(){return this.divideScalar(this.length())},setLength:function(a){return this.multiplyScalar(a/this.length())},lerp:function(a,b){this.x+=(a.x-this.x)*b;this.y+=(a.y-this.y)*b;this.z+=(a.z-this.z)*b;this.w+=(a.w-this.w)*b;return this},lerpVectors:function(a,b,c){this.subVectors(b,a).multiplyScalar(c).add(a);return this},equals:function(a){return a.x===this.x&&a.y===this.y&&a.z===this.z&&a.w===this.w},fromArray:function(a,b){void 0===b&&(b=0);this.x=a[b];this.y=a[b+1];this.z=a[b+2];this.w=a[b+3];return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);a[b]=this.x;a[b+1]=this.y;a[b+2]=this.z;a[b+3]=this.w;return a},fromAttribute:function(a,b,c){void 0===c&&(c=0);b=b*a.itemSize+c;this.x=a.array[b];this.y=a.array[b+1];this.z=a.array[b+2];this.w=a.array[b+3];return this}};THREE.Euler=function(a,b,c,d){this._x=a||0;this._y=b||0;this._z=c||0;this._order=d||THREE.Euler.DefaultOrder};THREE.Euler.RotationOrders="XYZ YZX ZXY XZY YXZ ZYX".split(" ");THREE.Euler.DefaultOrder="XYZ";THREE.Euler.prototype={constructor:THREE.Euler,get x(){return this._x},set x(a){this._x=a;this.onChangeCallback()},get y(){return this._y},set y(a){this._y=a;this.onChangeCallback()},get z(){return this._z},set z(a){this._z=a;this.onChangeCallback()},get order(){return this._order},set order(a){this._order=a;this.onChangeCallback()},set:function(a,b,c,d){this._x=a;this._y=b;this._z=c;this._order=d||this._order;this.onChangeCallback();return this},clone:function(){return new this.constructor(this._x,this._y,this._z,this._order)},copy:function(a){this._x=a._x;this._y=a._y;this._z=a._z;this._order=a._order;this.onChangeCallback();return this},setFromRotationMatrix:function(a,b,c){var d=THREE.Math.clamp,e=a.elements;a=e[0];var f=e[4],g=e[8],h=e[1],k=e[5],l=e[9],p=e[2],n=e[6],e=e[10];b=b||this._order;"XYZ"===b?(this._y=Math.asin(d(g,-1,1)),.99999>Math.abs(g)?(this._x=Math.atan2(-l,e),this._z=Math.atan2(-f,a)):(this._x=Math.atan2(n,k),this._z=0)):"YXZ"===b?(this._x=Math.asin(-d(l,-1,1)),.99999>Math.abs(l)?(this._y=Math.atan2(g,e),this._z=Math.atan2(h,k)):(this._y=Math.atan2(-p,a),this._z=0)):"ZXY"===b?(this._x=Math.asin(d(n,-1,1)),.99999>Math.abs(n)?(this._y=Math.atan2(-p,e),this._z=Math.atan2(-f,k)):(this._y=0,this._z=Math.atan2(h,a))):"ZYX"===b?(this._y=Math.asin(-d(p,-1,1)),.99999>Math.abs(p)?(this._x=Math.atan2(n,e),this._z=Math.atan2(h,a)):(this._x=0,this._z=Math.atan2(-f,k))):"YZX"===b?(this._z=Math.asin(d(h,-1,1)),.99999>Math.abs(h)?(this._x=Math.atan2(-l,k),this._y=Math.atan2(-p,a)):(this._x=0,this._y=Math.atan2(g,e))):"XZY"===b?(this._z=Math.asin(-d(f,-1,1)),.99999>Math.abs(f)?(this._x=Math.atan2(n,k),this._y=Math.atan2(g,a)):(this._x=Math.atan2(-l,e),this._y=0)):console.warn("THREE.Euler: .setFromRotationMatrix() given unsupported order: "+b);this._order=b;if(!1!==c)this.onChangeCallback();return this},setFromQuaternion:function(){var a;return function(b,c,d){void 0===a&&(a=new THREE.Matrix4);a.makeRotationFromQuaternion(b);this.setFromRotationMatrix(a,c,d);return this}}(),setFromVector3:function(a,b){return this.set(a.x,a.y,a.z,b||this._order)},reorder:function(){var a=new THREE.Quaternion;return function(b){a.setFromEuler(this);this.setFromQuaternion(a,b)}}(),equals:function(a){return a._x===this._x&&a._y===this._y&&a._z===this._z&&a._order===this._order},fromArray:function(a){this._x=a[0];this._y=a[1];this._z=a[2];void 0!==a[3]&&(this._order=a[3]);this.onChangeCallback();return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);a[b]=this._x;a[b+1]=this._y;a[b+2]=this._z;a[b+3]=this._order;return a},toVector3:function(a){return a?a.set(this._x,this._y,this._z):new THREE.Vector3(this._x,this._y,this._z)},onChange:function(a){this.onChangeCallback=a;return this},onChangeCallback:function(){}};THREE.Line3=function(a,b){this.start=void 0!==a?a:new THREE.Vector3;this.end=void 0!==b?b:new THREE.Vector3};THREE.Line3.prototype={constructor:THREE.Line3,set:function(a,b){this.start.copy(a);this.end.copy(b);return this},clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.start.copy(a.start);this.end.copy(a.end);return this},center:function(a){return(a||new THREE.Vector3).addVectors(this.start,this.end).multiplyScalar(.5)},delta:function(a){return(a||new THREE.Vector3).subVectors(this.end,this.start)},distanceSq:function(){return this.start.distanceToSquared(this.end)},distance:function(){return this.start.distanceTo(this.end)},at:function(a,b){var c=b||new THREE.Vector3;return this.delta(c).multiplyScalar(a).add(this.start)},closestPointToPointParameter:function(){var a=new THREE.Vector3,b=new THREE.Vector3;return function(c,d){a.subVectors(c,this.start);b.subVectors(this.end,this.start);var e=b.dot(b),e=b.dot(a)/e;d&&(e=THREE.Math.clamp(e,0,1));return e}}(),closestPointToPoint:function(a,b,c){a=this.closestPointToPointParameter(a,b);c=c||new THREE.Vector3;return this.delta(c).multiplyScalar(a).add(this.start)},applyMatrix4:function(a){this.start.applyMatrix4(a);this.end.applyMatrix4(a);return this},equals:function(a){return a.start.equals(this.start)&&a.end.equals(this.end)}};THREE.Box2=function(a,b){this.min=void 0!==a?a:new THREE.Vector2(Infinity,Infinity);this.max=void 0!==b?b:new THREE.Vector2(-Infinity,-Infinity)};THREE.Box2.prototype={constructor:THREE.Box2,set:function(a,b){this.min.copy(a);this.max.copy(b);return this},setFromPoints:function(a){this.makeEmpty();for(var b=0,c=a.length;bthis.max.x||a.ythis.max.y?!1:!0},containsBox:function(a){return this.min.x<=a.min.x&&a.max.x<=this.max.x&&this.min.y<=a.min.y&&a.max.y<=this.max.y?!0:!1},getParameter:function(a,b){return(b||new THREE.Vector2).set((a.x-this.min.x)/(this.max.x-this.min.x),(a.y-this.min.y)/(this.max.y-this.min.y))},intersectsBox:function(a){return a.max.xthis.max.x||a.max.ythis.max.y?!1:!0},clampPoint:function(a,b){return(b||new THREE.Vector2).copy(a).clamp(this.min,this.max)},distanceToPoint:function(){var a=new THREE.Vector2;return function(b){return a.copy(b).clamp(this.min,this.max).sub(b).length()}}(),intersect:function(a){this.min.max(a.min);this.max.min(a.max);return this},union:function(a){this.min.min(a.min);this.max.max(a.max);return this},translate:function(a){this.min.add(a);this.max.add(a);return this},equals:function(a){return a.min.equals(this.min)&&a.max.equals(this.max)}};THREE.Box3=function(a,b){this.min=void 0!==a?a:new THREE.Vector3(Infinity,Infinity,Infinity);this.max=void 0!==b?b:new THREE.Vector3(-Infinity,-Infinity,-Infinity)};THREE.Box3.prototype={constructor:THREE.Box3,set:function(a,b){this.min.copy(a);this.max.copy(b);return this},setFromArray:function(a){this.makeEmpty();for(var b=Infinity,c=Infinity,d=Infinity,e=-Infinity,f=-Infinity,g=-Infinity,h=0,k=a.length;he&&(e=l);p>f&&(f=p);n>g&&(g=n)}this.min.set(b,c,d);this.max.set(e,f,g)},setFromPoints:function(a){this.makeEmpty();for(var b=0,c=a.length;bthis.max.x||a.ythis.max.y||a.zthis.max.z?!1:!0},containsBox:function(a){return this.min.x<=a.min.x&&a.max.x<=this.max.x&&this.min.y<=a.min.y&&a.max.y<=this.max.y&&this.min.z<=a.min.z&&a.max.z<=this.max.z?!0:!1},getParameter:function(a,b){return(b||new THREE.Vector3).set((a.x-this.min.x)/(this.max.x-this.min.x),(a.y-this.min.y)/(this.max.y-this.min.y),(a.z-this.min.z)/(this.max.z-this.min.z))},intersectsBox:function(a){return a.max.xthis.max.x||a.max.ythis.max.y||a.max.zthis.max.z?!1:!0},intersectsSphere:function(){var a;return function(b){void 0===a&&(a=new THREE.Vector3);this.clampPoint(b.center,a);return a.distanceToSquared(b.center)<=b.radius*b.radius}}(),intersectsPlane:function(a){var b,c;0=a.constant},clampPoint:function(a,b){return(b||new THREE.Vector3).copy(a).clamp(this.min,this.max)},distanceToPoint:function(){var a=new THREE.Vector3;return function(b){return a.copy(b).clamp(this.min,this.max).sub(b).length()}}(),getBoundingSphere:function(){var a=new THREE.Vector3;return function(b){b=b||new THREE.Sphere;b.center=this.center();b.radius=.5*this.size(a).length();return b}}(),intersect:function(a){this.min.max(a.min);this.max.min(a.max);return this},union:function(a){this.min.min(a.min);this.max.max(a.max);return this},applyMatrix4:function(){var a=[new THREE.Vector3,new THREE.Vector3,new THREE.Vector3,new THREE.Vector3,new THREE.Vector3,new THREE.Vector3,new THREE.Vector3,new THREE.Vector3];return function(b){a[0].set(this.min.x,this.min.y,this.min.z).applyMatrix4(b);a[1].set(this.min.x,this.min.y,this.max.z).applyMatrix4(b);a[2].set(this.min.x,this.max.y,this.min.z).applyMatrix4(b);a[3].set(this.min.x,this.max.y,this.max.z).applyMatrix4(b);a[4].set(this.max.x,this.min.y,this.min.z).applyMatrix4(b);a[5].set(this.max.x,this.min.y,this.max.z).applyMatrix4(b);a[6].set(this.max.x,this.max.y,this.min.z).applyMatrix4(b);a[7].set(this.max.x,this.max.y,this.max.z).applyMatrix4(b);this.makeEmpty();this.setFromPoints(a);return this}}(),translate:function(a){this.min.add(a);this.max.add(a);return this},equals:function(a){return a.min.equals(this.min)&&a.max.equals(this.max)}};THREE.Matrix3=function(){this.elements=new Float32Array([1,0,0,0,1,0,0,0,1]);0this.determinant()&&(g=-g);c.x=f[12];c.y=f[13];c.z=f[14];b.elements.set(this.elements);c=1/g;var f=1/h,l=1/k;b.elements[0]*=c;b.elements[1]*=c;b.elements[2]*=c;b.elements[4]*=f;b.elements[5]*=f;b.elements[6]*=f;b.elements[8]*=l;b.elements[9]*=l;b.elements[10]*=l;d.setFromRotationMatrix(b);e.x=g;e.y=h;e.z=k;return this}}(),makeFrustum:function(a,b,c,d,e,f){var g=this.elements;g[0]=2*e/(b-a);g[4]=0;g[8]=(b+a)/(b-a);g[12]=0;g[1]=0;g[5]=2*e/(d-c);g[9]=(d+c)/(d-c);g[13]=0;g[2]=0;g[6]=0;g[10]=-(f+e)/(f-e);g[14]=-2*f*e/(f-e);g[3]=0;g[7]=0;g[11]=-1;g[15]=0;return this},makePerspective:function(a,b,c,d){a=c*Math.tan(THREE.Math.degToRad(.5*a));var e=-a;return this.makeFrustum(e*b,a*b,e,a,c,d)},makeOrthographic:function(a,b,c,d,e,f){var g=this.elements,h=1/(b-a),k=1/(c-d),l=1/(f-e);g[0]=2*h;g[4]=0;g[8]=0;g[12]=-((b+a)*h);g[1]=0;g[5]=2*k;g[9]=0;g[13]=-((c+d)*k);g[2]=0;g[6]=0;g[10]=-2*l;g[14]=-((f+e)*l);g[3]=0;g[7]=0;g[11]=0;g[15]=1;return this},equals:function(a){var b=this.elements;a=a.elements;for(var c=0;16>c;c++)if(b[c]!==a[c])return!1;return!0},fromArray:function(a){this.elements.set(a);return this},toArray:function(){var a=this.elements;return[a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8],a[9],a[10],a[11],a[12],a[13],a[14],a[15]]}};THREE.Ray=function(a,b){this.origin=void 0!==a?a:new THREE.Vector3;this.direction=void 0!==b?b:new THREE.Vector3};THREE.Ray.prototype={constructor:THREE.Ray,set:function(a,b){this.origin.copy(a);this.direction.copy(b);return this},clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.origin.copy(a.origin);this.direction.copy(a.direction);return this},at:function(a,b){return(b||new THREE.Vector3).copy(this.direction).multiplyScalar(a).add(this.origin)},lookAt:function(a){this.direction.copy(a).sub(this.origin).normalize()},recast:function(){var a=new THREE.Vector3;return function(b){this.origin.copy(this.at(b,a));return this}}(),closestPointToPoint:function(a,b){var c=b||new THREE.Vector3;c.subVectors(a,this.origin);var d=c.dot(this.direction);return 0>d?c.copy(this.origin):c.copy(this.direction).multiplyScalar(d).add(this.origin)},distanceToPoint:function(a){return Math.sqrt(this.distanceSqToPoint(a))},distanceSqToPoint:function(){var a=new THREE.Vector3;return function(b){var c=a.subVectors(b,this.origin).dot(this.direction);if(0>c)return this.origin.distanceToSquared(b);a.copy(this.direction).multiplyScalar(c).add(this.origin);return a.distanceToSquared(b)}}(),distanceSqToSegment:function(){var a=new THREE.Vector3,b=new THREE.Vector3,c=new THREE.Vector3;return function(d,e,f,g){a.copy(d).add(e).multiplyScalar(.5);b.copy(e).sub(d).normalize();c.copy(this.origin).sub(a);var h=.5*d.distanceTo(e),k=-this.direction.dot(b),l=c.dot(this.direction),p=-c.dot(b),n=c.lengthSq(),m=Math.abs(1-k*k),q;0=-q?e<=q?(h=1/m,d*=h,e*=h,k=d*(d+k*e+2*l)+e*(k*d+e+2*p)+n):(e=h,d=Math.max(0,-(k*e+l)),k=-d*d+e*(e+2*p)+n):(e=-h,d=Math.max(0,-(k*e+l)),k=-d*d+e*(e+2*p)+n):e<=-q?(d=Math.max(0,-(-k*h+l)),e=0f)return null;f=Math.sqrt(f-e);e=d-f;d+=f;return 0>e&&0>d?null:0>e?this.at(d,c):this.at(e,c)}}(),intersectsSphere:function(a){return this.distanceToPoint(a.center)<=a.radius},distanceToPlane:function(a){var b=a.normal.dot(this.direction);if(0===b)return 0===a.distanceToPoint(this.origin)?0:null;a=-(this.origin.dot(a.normal)+a.constant)/b;return 0<=a?a:null},intersectPlane:function(a,b){var c=this.distanceToPlane(a);return null===c?null:this.at(c,b)},intersectsPlane:function(a){var b=a.distanceToPoint(this.origin);return 0===b||0>a.normal.dot(this.direction)*b?!0:!1},intersectBox:function(a,b){var c,d,e,f,g;d=1/this.direction.x;f=1/this.direction.y;g=1/this.direction.z;var h=this.origin;0<=d?(c=(a.min.x-h.x)*d,d*=a.max.x-h.x):(c=(a.max.x-h.x)*d,d*=a.min.x-h.x);0<=f?(e=(a.min.y-h.y)*f,f*=a.max.y-h.y):(e=(a.max.y-h.y)*f,f*=a.min.y-h.y);if(c>f||e>d)return null;if(e>c||c!==c)c=e;if(fg||e>d)return null;if(e>c||c!==c)c=e;if(gd?null:this.at(0<=c?c:d,b)},intersectsBox:function(){var a=new THREE.Vector3;return function(b){return null!==this.intersectBox(b,a)}}(),intersectTriangle:function(){var a=new THREE.Vector3,b=new THREE.Vector3,c=new THREE.Vector3,d=new THREE.Vector3;return function(e,f,g,h,k){b.subVectors(f,e);c.subVectors(g,e);d.crossVectors(b,c);f=this.direction.dot(d);if(0f)h=-1,f=-f;else return null;a.subVectors(this.origin,e);e=h*this.direction.dot(c.crossVectors(a,c));if(0>e)return null;g=h*this.direction.dot(b.cross(a));if(0>g||e+g>f)return null;e=-h*a.dot(d);return 0>e?null:this.at(e/f,k)}}(),applyMatrix4:function(a){this.direction.add(this.origin).applyMatrix4(a);this.origin.applyMatrix4(a);this.direction.sub(this.origin);this.direction.normalize();return this},equals:function(a){return a.origin.equals(this.origin)&&a.direction.equals(this.direction)}};THREE.Sphere=function(a,b){this.center=void 0!==a?a:new THREE.Vector3;this.radius=void 0!==b?b:0};THREE.Sphere.prototype={constructor:THREE.Sphere,set:function(a,b){this.center.copy(a);this.radius=b;return this},setFromPoints:function(){var a=new THREE.Box3;return function(b,c){var d=this.center;void 0!==c?d.copy(c):a.setFromPoints(b).center(d);for(var e=0,f=0,g=b.length;f=this.radius},containsPoint:function(a){return a.distanceToSquared(this.center)<=this.radius*this.radius},distanceToPoint:function(a){return a.distanceTo(this.center)-this.radius},intersectsSphere:function(a){var b=this.radius+a.radius;return a.center.distanceToSquared(this.center)<=b*b},intersectsBox:function(a){return a.intersectsSphere(this)},intersectsPlane:function(a){return Math.abs(this.center.dot(a.normal)-a.constant)<=this.radius},clampPoint:function(a,b){var c=this.center.distanceToSquared(a),d=b||new THREE.Vector3;d.copy(a);c>this.radius*this.radius&&(d.sub(this.center).normalize(),d.multiplyScalar(this.radius).add(this.center));return d},getBoundingBox:function(a){a=a||new THREE.Box3;a.set(this.center,this.center);a.expandByScalar(this.radius);return a},applyMatrix4:function(a){this.center.applyMatrix4(a);this.radius*=a.getMaxScaleOnAxis();return this},translate:function(a){this.center.add(a);return this},equals:function(a){return a.center.equals(this.center)&&a.radius===this.radius}};THREE.Frustum=function(a,b,c,d,e,f){this.planes=[void 0!==a?a:new THREE.Plane,void 0!==b?b:new THREE.Plane,void 0!==c?c:new THREE.Plane,void 0!==d?d:new THREE.Plane,void 0!==e?e:new THREE.Plane,void 0!==f?f:new THREE.Plane]};THREE.Frustum.prototype={constructor:THREE.Frustum,set:function(a,b,c,d,e,f){var g=this.planes;g[0].copy(a);g[1].copy(b);g[2].copy(c);g[3].copy(d);g[4].copy(e);g[5].copy(f);return this},clone:function(){return(new this.constructor).copy(this)},copy:function(a){for(var b=this.planes,c=0;6>c;c++)b[c].copy(a.planes[c]);return this},setFromMatrix:function(a){var b=this.planes,c=a.elements;a=c[0];var d=c[1],e=c[2],f=c[3],g=c[4],h=c[5],k=c[6],l=c[7],p=c[8],n=c[9],m=c[10],q=c[11],u=c[12],v=c[13],t=c[14],c=c[15];b[0].setComponents(f-a,l-g,q-p,c-u).normalize();b[1].setComponents(f+a,l+g,q+p,c+u).normalize();b[2].setComponents(f+d,l+h,q+n,c+v).normalize();b[3].setComponents(f-d,l-h,q-n,c-v).normalize();b[4].setComponents(f-e,l-k,q-m,c-t).normalize();b[5].setComponents(f+e,l+k,q+m,c+t).normalize();return this},intersectsObject:function(){var a=new THREE.Sphere;return function(b){var c=b.geometry;null===c.boundingSphere&&c.computeBoundingSphere();a.copy(c.boundingSphere);a.applyMatrix4(b.matrixWorld);return this.intersectsSphere(a)}}(),intersectsSphere:function(a){var b=this.planes,c=a.center;a=-a.radius;for(var d=0;6>d;d++)if(b[d].distanceToPoint(c)e;e++){var f=d[e];a.x=0g&&0>f)return!1}return!0}}(),containsPoint:function(a){for(var b=this.planes,c=0;6>c;c++)if(0>b[c].distanceToPoint(a))return!1;return!0}};THREE.Plane=function(a,b){this.normal=void 0!==a?a:new THREE.Vector3(1,0,0);this.constant=void 0!==b?b:0};THREE.Plane.prototype={constructor:THREE.Plane,set:function(a,b){this.normal.copy(a);this.constant=b;return this},setComponents:function(a,b,c,d){this.normal.set(a,b,c);this.constant=d;return this},setFromNormalAndCoplanarPoint:function(a,b){this.normal.copy(a);this.constant=-b.dot(this.normal);return this},setFromCoplanarPoints:function(){var a=new THREE.Vector3,b=new THREE.Vector3;return function(c,d,e){d=a.subVectors(e,d).cross(b.subVectors(c,d)).normalize();this.setFromNormalAndCoplanarPoint(d,c);return this}}(),clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.normal.copy(a.normal);this.constant=a.constant;return this},normalize:function(){var a=1/this.normal.length();this.normal.multiplyScalar(a);this.constant*=a;return this},negate:function(){this.constant*=-1;this.normal.negate();return this},distanceToPoint:function(a){return this.normal.dot(a)+this.constant},distanceToSphere:function(a){return this.distanceToPoint(a.center)-a.radius},projectPoint:function(a,b){return this.orthoPoint(a,b).sub(a).negate()},orthoPoint:function(a,b){var c=this.distanceToPoint(a);return(b||new THREE.Vector3).copy(this.normal).multiplyScalar(c)},intersectLine:function(){var a=new THREE.Vector3;return function(b,c){var d=c||new THREE.Vector3,e=b.delta(a),f=this.normal.dot(e);if(0===f){if(0===this.distanceToPoint(b.start))return d.copy(b.start)}else return f=-(b.start.dot(this.normal)+this.constant)/f,0>f||1b&&0a&&0e;e++)8===e||13===e||18===e||23===e?b[e]="-":14===e?b[e]="4":(2>=c&&(c=33554432+16777216*Math.random()|0),d=c&15,c>>=4,b[e]=a[19===e?d&3|8:d]);return b.join("")}}(),clamp:function(a,b,c){return Math.max(b,Math.min(c,a))},euclideanModulo:function(a,b){return(a%b+b)%b},mapLinear:function(a,b,c,d,e){return d+(a-b)*(e-d)/(c-b)},smoothstep:function(a,b,c){if(a<=b)return 0;if(a>=c)return 1;a=(a-b)/(c-b);return a*a*(3-2*a)},smootherstep:function(a,b,c){if(a<=b)return 0;if(a>=c)return 1;a=(a-b)/(c-b);return a*a*a*(a*(6*a-15)+10)},random16:function(){console.warn("THREE.Math.random16() has been deprecated. Use Math.random() instead.");return Math.random()},randInt:function(a,b){return a+Math.floor(Math.random()*(b-a+1))},randFloat:function(a,b){return a+Math.random()*(b-a)},randFloatSpread:function(a){return a*(.5-Math.random())},degToRad:function(){var a=Math.PI/180;return function(b){return b*a}}(),radToDeg:function(){var a=180/Math.PI;return function(b){return b*a}}(),isPowerOfTwo:function(a){return 0===(a&a-1)&&0!==a},nearestPowerOfTwo:function(a){return Math.pow(2,Math.round(Math.log(a)/Math.LN2))},nextPowerOfTwo:function(a){a--;a|=a>>1;a|=a>>2;a|=a>>4;a|=a>>8;a|=a>>16;a++;return a}};THREE.Spline=function(a){function b(a,b,c,d,e,f,g){a=.5*(c-a);d=.5*(d-b);return(2*(b-c)+a+d)*g+(-3*(b-c)-2*a-d)*f+a*e+b}this.points=a;var c=[],d={x:0,y:0,z:0},e,f,g,h,k,l,p,n,m;this.initFromArray=function(a){this.points=[];for(var b=0;bthis.points.length-2?this.points.length-1:f+1;c[3]=f>this.points.length-3?this.points.length-1:f+2;l=this.points[c[0]];p=this.points[c[1]];n=this.points[c[2]];m=this.points[c[3]];h=g*g;k=g*h;d.x=b(l.x,p.x,n.x,m.x,g,h,k);d.y=b(l.y,p.y,n.y,m.y,g,h,k);d.z=b(l.z,p.z,n.z,m.z,g,h,k);return d};this.getControlPointsArray=function(){var a,b,c=this.points.length,d=[];for(a=0;a=b.x+b.y}}();THREE.Triangle.prototype={constructor:THREE.Triangle,set:function(a,b,c){this.a.copy(a);this.b.copy(b);this.c.copy(c);return this},setFromPointsAndIndices:function(a,b,c,d){this.a.copy(a[b]);this.b.copy(a[c]);this.c.copy(a[d]);return this},clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.a.copy(a.a);this.b.copy(a.b);this.c.copy(a.c);return this},area:function(){var a=new THREE.Vector3,b=new THREE.Vector3;return function(){a.subVectors(this.c,this.b);b.subVectors(this.a,this.b);return.5*a.cross(b).length()}}(),midpoint:function(a){return(a||new THREE.Vector3).addVectors(this.a,this.b).add(this.c).multiplyScalar(1/3)},normal:function(a){return THREE.Triangle.normal(this.a,this.b,this.c,a)},plane:function(a){return(a||new THREE.Plane).setFromCoplanarPoints(this.a,this.b,this.c)},barycoordFromPoint:function(a,b){return THREE.Triangle.barycoordFromPoint(a,this.a,this.b,this.c,b)},containsPoint:function(a){return THREE.Triangle.containsPoint(a,this.a,this.b,this.c)},equals:function(a){return a.a.equals(this.a)&&a.b.equals(this.b)&&a.c.equals(this.c)}};THREE.Interpolant=function(a,b,c,d){this.parameterPositions=a;this._cachedIndex=0;this.resultBuffer=void 0!==d?d:new b.constructor(c);this.sampleValues=b;this.valueSize=c};THREE.Interpolant.prototype={constructor:THREE.Interpolant,evaluate:function(a){var b=this.parameterPositions,c=this._cachedIndex,d=b[c],e=b[c-1];a:{b:{c:{d:if(!(a=e)break a;else{f=b[1];a=e)break b}d=c;c=0}}for(;c>>1,ad;d++)if(e[d]===e[(d+1)%3]){a.push(f);break}for(f=a.length-1;0<=f;f--)for(e=a[f],this.faces.splice(e,1),c=0,g=this.faceVertexUvs.length;cthis.duration&&this.resetDuration();this.trim();this.optimize()};THREE.AnimationClip.prototype={constructor:THREE.AnimationClip,resetDuration:function(){for(var a=0,b=0,c=this.tracks.length;b!==c;++b)var d=this.tracks[b],a=Math.max(a,d.times[d.times.length-1]);this.duration=a},trim:function(){for(var a=0;ab||0===c)return;this._startTime=null;b*=c}b*=this._updateTimeScale(a);c=this._updateTime(b);a=this._updateWeight(a);if(0c.parameterPositions[1]&&(this.stopFading(),0===d&&(this.enabled=!1))}}return this._effectiveWeight=b},_updateTimeScale:function(a){var b=0;if(!this.paused){var b=this.timeScale,c=this._timeScaleInterpolant;if(null!==c){var d=c.evaluate(a)[0],b=b*d;a>c.parameterPositions[1]&&(this.stopWarping(),0===b?this.pause=!0:this.timeScale=b)}}return this._effectiveTimeScale=b},_updateTime:function(a){var b=this.time+a;if(0===a)return b;var c=this._clip.duration,d=this.loop,e=this._loopCount,f=!1;switch(d){case THREE.LoopOnce:-1===e&&(this.loopCount=0,this._setEndings(!0,!0,!1));if(b>=c)b=c;else if(0>b)b=0;else break;this.clampWhenFinished?this.pause=!0:this.enabled=!1;this._mixer.dispatchEvent({type:"finished",action:this,direction:0>a?-1:1});break;case THREE.LoopPingPong:f=!0;case THREE.LoopRepeat:-1===e&&(0=c||0>b){var g=Math.floor(b/c),b=b-c*g,e=e+Math.abs(g),h=this.repetitions-e;if(0>h){this.clampWhenFinished?this.paused=!0:this.enabled=!1;b=0a,this._setEndings(a,!a,f)):this._setEndings(!1,!1,f);this._loopCount=e;this._mixer.dispatchEvent({type:"loop",action:this,loopDelta:g})}if(d===THREE.LoopPingPong&&1===(e&1))return this.time=b,c-b}return this.time=b},_setEndings:function(a,b,c){var d=this._interpolantSettings;c?(d.endingStart=THREE.ZeroSlopeEnding,d.endingEnd=THREE.ZeroSlopeEnding):(d.endingStart=a?this.zeroSlopeAtStart?THREE.ZeroSlopeEnding:THREE.ZeroCurvatureEnding:THREE.WrapAroundEnding,d.endingEnd=b?this.zeroSlopeAtEnd?THREE.ZeroSlopeEnding:THREE.ZeroCurvatureEnding:THREE.WrapAroundEnding)},_scheduleFading:function(a,b,c){var d=this._mixer,e=d.time,f=this._weightInterpolant;null===f&&(this._weightInterpolant=f=d._lendControlInterpolant());d=f.parameterPositions;f=f.sampleValues;d[0]=e;f[0]=b;d[1]=e+a;f[1]=c;return this}};Object.assign(THREE.AnimationMixer.prototype,{_bindAction:function(a,b){var c=a._localRoot||this._root,d=a._clip.tracks,e=d.length,f=a._propertyBindings,g=a._interpolants,h=c.uuid,k=this._bindingsByRootAndName,l=k[h];void 0===l&&(l={},k[h]=l);for(k=0;k!==e;++k){var p=d[k],n=p.name,m=l[n];if(void 0===m){m=f[k];if(void 0!==m){null===m._cacheIndex&&(++m.referenceCount,this._addInactiveBinding(m,h,n));continue}m=new THREE.PropertyMixer(THREE.PropertyBinding.create(c,n,b&&b._propertyBindings[k].binding.parsedPath),p.ValueTypeName,p.getValueSize());++m.referenceCount;this._addInactiveBinding(m,h,n)}f[k]=m;g[k].resultBuffer=m.buffer}},_activateAction:function(a){if(!this._isActiveAction(a)){if(null===a._cacheIndex){var b=(a._localRoot||this._root).uuid,c=a._clip.name,d=this._actionsByClip[c];this._bindAction(a,d&&d.knownActions[0]);this._addInactiveAction(a,c,b)}b=a._propertyBindings;c=0;for(d=b.length;c!==d;++c){var e=b[c];0===e.useCount++&&(this._lendBinding(e),e.saveOriginalState())}this._lendAction(a)}},_deactivateAction:function(a){if(this._isActiveAction(a)){for(var b=a._propertyBindings,c=0,d=b.length;c!==d;++c){var e=b[c];0===--e.useCount&&(e.restoreOriginalState(),this._takeBackBinding(e))}this._takeBackAction(a)}},_initMemoryManager:function(){this._actions=[];this._nActiveActions=0;this._actionsByClip={};this._bindings=[];this._nActiveBindings=0;this._bindingsByRootAndName={};this._controlInterpolants=[];this._nActiveControlInterpolants=0;var a=this;this.stats={actions:{get total(){return a._actions.length},get inUse(){return a._nActiveActions}},bindings:{get total(){return a._bindings.length},get inUse(){return a._nActiveBindings}},controlInterpolants:{get total(){return a._controlInterpolants.length},get inUse(){return a._nActiveControlInterpolants}}}},_isActiveAction:function(a){a=a._cacheIndex;return null!==a&&a=c){var n=c++,m=b[n];d[m.uuid]=p;b[p]=m;d[l]=n;b[n]=k;k=0;for(l=f;k!==l;++k){var m=e[k],q=m[p];m[p]=m[n];m[n]=q}}}this.nCachedObjects_=c},uncache:function(a){for(var b=this._objects,c=b.length,d=this.nCachedObjects_,e=this._indicesByUUID,f=this._bindings,g=f.length,h=0,k=arguments.length;h!==k;++h){var l=arguments[h].uuid,p=e[l];if(void 0!==p)if(delete e[l],pb;)--f;++f;if(0!==e||f!==d)e>=f&&(f=Math.max(f,1),e=f-1),d=this.getValueSize(),this.times=THREE.AnimationUtils.arraySlice(c,e,f),this.values=THREE.AnimationUtils.arraySlice(this.values,e*d,f*d);return this},validate:function(){var a=!0,b=this.getValueSize();0!==b-Math.floor(b)&&(console.error("invalid value size in track",this),a=!1);var c=this.times,b=this.values,d=c.length;0===d&&(console.error("track is empty",this),a=!1);for(var e=null,f=0;f!==d;f++){var g=c[f];if("number"===typeof g&&isNaN(g)){console.error("time is not a valid number",this,f,g);a=!1;break}if(null!==e&&e>g){console.error("out of order keys",this,f,g,e);a=!1;break}e=g}if(void 0!==b&&THREE.AnimationUtils.isTypedArray(b))for(f=0,c=b.length;f!==c;++f)if(d=b[f],isNaN(d)){console.error("value is not a valid number",this,f,d);a=!1;break}return a},optimize:function(){for(var a=this.times,b=this.values,c=this.getValueSize(),d=1,e=1,f=a.length-1;e<=f;++e){var g=!1,h=a[e];if(h!==a[e+1]&&(1!==e||h!==h[0]))for(var k=e*c,l=k-c,p=k+c,h=0;h!==c;++h){var n=b[k+h];if(n!==b[l+h]||n!==b[p+h]){g=!0;break}}if(g){if(e!==d)for(a[d]=a[e],g=e*c,k=d*c,h=0;h!==c;++h)b[k+h]=b[g+h];++d}}d!==a.length&&(this.times=THREE.AnimationUtils.arraySlice(a,0,d),this.values=THREE.AnimationUtils.arraySlice(b,0,d*c));return this}};Object.assign(THREE.KeyframeTrack,{parse:function(a){if(void 0===a.type)throw Error("track type undefined, can not parse");var b=THREE.KeyframeTrack._getTrackTypeForValueTypeName(a.type);if(void 0===a.times){console.warn("legacy JSON format detected, converting");var c=[],d=[];THREE.AnimationUtils.flattenJSON(a.keys,c,d,"value");a.times=c;a.values=d}return void 0!==b.parse?b.parse(a):new b(a.name,a.times,a.values,a.interpolation)},toJSON:function(a){var b=a.constructor;if(void 0!==b.toJSON)b=b.toJSON(a);else{var b={name:a.name,times:THREE.AnimationUtils.convertArray(a.times,Array),values:THREE.AnimationUtils.convertArray(a.values,Array)},c=a.getInterpolation();c!==a.DefaultInterpolation&&(b.interpolation=c)}b.type=a.ValueTypeName;return b},_getTrackTypeForValueTypeName:function(a){switch(a.toLowerCase()){case"scalar":case"double":case"float":case"number":case"integer":return THREE.NumberKeyframeTrack;case"vector":case"vector2":case"vector3":case"vector4":return THREE.VectorKeyframeTrack;case"color":return THREE.ColorKeyframeTrack;case"quaternion":return THREE.QuaternionKeyframeTrack;case"bool":case"boolean":return THREE.BooleanKeyframeTrack;case"string":return THREE.StringKeyframeTrack}throw Error("Unsupported typeName: "+a)}});THREE.PropertyBinding=function(a,b,c){this.path=b;this.parsedPath=c||THREE.PropertyBinding.parseTrackName(b);this.node=THREE.PropertyBinding.findNode(a,this.parsedPath.nodeName)||a;this.rootNode=a};THREE.PropertyBinding.prototype={constructor:THREE.PropertyBinding,getValue:function(a,b){this.bind();this.getValue(a,b)},setValue:function(a,b){this.bind();this.setValue(a,b)},bind:function(){var a=this.node,b=this.parsedPath,c=b.objectName,d=b.propertyName,e=b.propertyIndex;a||(this.node=a=THREE.PropertyBinding.findNode(this.rootNode,b.nodeName)||this.rootNode);this.getValue=this._getValue_unavailable;this.setValue=this._setValue_unavailable;if(a){if(c){var f=b.objectIndex;switch(c){case"materials":if(!a.material){console.error(" can not bind to material as node does not have a material",this);return}if(!a.material.materials){console.error(" can not bind to material.materials as node.material does not have a materials array",this);return}a=a.material.materials;break;case"bones":if(!a.skeleton){console.error(" can not bind to bones as node does not have a skeleton",this);return}a=a.skeleton.bones;for(c=0;cd&&this._mixBufferRegion(c,a,3*b,1-d,b);for(var d=b,f=b+b;d!==f;++d)if(c[d]!==c[d+b]){e.setValue(c,a);break}},saveOriginalState:function(){var a=this.buffer,b=this.valueSize,c=3*b;this.binding.getValue(a,c);for(var d=b;d!==c;++d)a[d]=a[c+d%b];this.cumulativeWeight=0},restoreOriginalState:function(){this.binding.setValue(this.buffer,3*this.valueSize)},_select:function(a,b,c,d,e){if(.5<=d)for(d=0;d!==e;++d)a[b+d]=a[c+d]},_slerp:function(a,b,c,d,e){THREE.Quaternion.slerpFlat(a,b,a,b,a,c,d)},_lerp:function(a,b,c,d,e){for(var f=1-d,g=0;g!==e;++g){var h=b+g;a[h]=a[h]*f+a[c+g]*d}}};THREE.BooleanKeyframeTrack=function(a,b,c){THREE.KeyframeTrack.call(this,a,b,c)};THREE.BooleanKeyframeTrack.prototype=Object.assign(Object.create(THREE.KeyframeTrack.prototype),{constructor:THREE.BooleanKeyframeTrack,ValueTypeName:"bool",ValueBufferType:Array,DefaultInterpolation:THREE.IntepolateDiscrete,InterpolantFactoryMethodLinear:void 0,InterpolantFactoryMethodSmooth:void 0});THREE.NumberKeyframeTrack=function(a,b,c,d){THREE.KeyframeTrack.call(this,a,b,c,d)};THREE.NumberKeyframeTrack.prototype=Object.assign(Object.create(THREE.KeyframeTrack.prototype),{constructor:THREE.NumberKeyframeTrack,ValueTypeName:"number"});THREE.QuaternionKeyframeTrack=function(a,b,c,d){THREE.KeyframeTrack.call(this,a,b,c,d)};THREE.QuaternionKeyframeTrack.prototype=Object.assign(Object.create(THREE.KeyframeTrack.prototype),{constructor:THREE.QuaternionKeyframeTrack,ValueTypeName:"quaternion",DefaultInterpolation:THREE.InterpolateLinear,InterpolantFactoryMethodLinear:function(a){return new THREE.QuaternionLinearInterpolant(this.times,this.values,this.getValueSize(),a)},InterpolantFactoryMethodSmooth:void 0});THREE.StringKeyframeTrack=function(a,b,c,d){THREE.KeyframeTrack.call(this,a,b,c,d)};THREE.StringKeyframeTrack.prototype=Object.assign(Object.create(THREE.KeyframeTrack.prototype),{constructor:THREE.StringKeyframeTrack,ValueTypeName:"string",ValueBufferType:Array,DefaultInterpolation:THREE.IntepolateDiscrete,InterpolantFactoryMethodLinear:void 0,InterpolantFactoryMethodSmooth:void 0});THREE.VectorKeyframeTrack=function(a,b,c,d){THREE.KeyframeTrack.call(this,a,b,c,d)};THREE.VectorKeyframeTrack.prototype=Object.assign(Object.create(THREE.KeyframeTrack.prototype),{constructor:THREE.VectorKeyframeTrack,ValueTypeName:"vector"});THREE.Audio=function(a){THREE.Object3D.call(this);this.type="Audio";this.context=a.context;this.source=this.context.createBufferSource();this.source.onended=this.onEnded.bind(this);this.gain=this.context.createGain();this.gain.connect(a.getInput());this.autoplay=!1;this.startTime=0;this.playbackRate=1;this.isPlaying=!1;this.hasPlaybackControl=!0;this.sourceType="empty";this.filter=null};THREE.Audio.prototype=Object.create(THREE.Object3D.prototype);THREE.Audio.prototype.constructor=THREE.Audio;THREE.Audio.prototype.getOutput=function(){return this.gain};THREE.Audio.prototype.load=function(a){var b=new THREE.AudioBuffer(this.context);b.load(a);this.setBuffer(b);return this};THREE.Audio.prototype.setNodeSource=function(a){this.hasPlaybackControl=!1;this.sourceType="audioNode";this.source=a;this.connect();return this};THREE.Audio.prototype.setBuffer=function(a){var b=this;a.onReady(function(a){b.source.buffer=a;b.sourceType="buffer";b.autoplay&&b.play()});return this};THREE.Audio.prototype.play=function(){if(!0===this.isPlaying)console.warn("THREE.Audio: Audio is already playing.");else if(!1===this.hasPlaybackControl)console.warn("THREE.Audio: this Audio has no playback control.");else{var a=this.context.createBufferSource();a.buffer=this.source.buffer;a.loop=this.source.loop;a.onended=this.source.onended;a.start(0,this.startTime);a.playbackRate.value=this.playbackRate;this.isPlaying=!0;this.source=a;this.connect()}};THREE.Audio.prototype.pause=function(){!1===this.hasPlaybackControl?console.warn("THREE.Audio: this Audio has no playback control."):(this.source.stop(),this.startTime=this.context.currentTime)};THREE.Audio.prototype.stop=function(){!1===this.hasPlaybackControl?console.warn("THREE.Audio: this Audio has no playback control."):(this.source.stop(),this.startTime=0)};THREE.Audio.prototype.connect=function(){null!==this.filter?(this.source.connect(this.filter),this.filter.connect(this.getOutput())):this.source.connect(this.getOutput())};THREE.Audio.prototype.disconnect=function(){null!==this.filter?(this.source.disconnect(this.filter),this.filter.disconnect(this.getOutput())):this.source.disconnect(this.getOutput())};THREE.Audio.prototype.getFilter=function(){return this.filter};THREE.Audio.prototype.setFilter=function(a){void 0===a&&(a=null);!0===this.isPlaying?(this.disconnect(),this.filter=a,this.connect()):this.filter=a};THREE.Audio.prototype.setPlaybackRate=function(a){!1===this.hasPlaybackControl?console.warn("THREE.Audio: this Audio has no playback control."):(this.playbackRate=a,!0===this.isPlaying&&(this.source.playbackRate.value=this.playbackRate))};THREE.Audio.prototype.getPlaybackRate=function(){return this.playbackRate};THREE.Audio.prototype.onEnded=function(){this.isPlaying=!1};THREE.Audio.prototype.setLoop=function(a){!1===this.hasPlaybackControl?console.warn("THREE.Audio: this Audio has no playback control."):this.source.loop=a};THREE.Audio.prototype.getLoop=function(){return!1===this.hasPlaybackControl?(console.warn("THREE.Audio: this Audio has no playback control."),!1):this.source.loop};THREE.Audio.prototype.setVolume=function(a){this.gain.gain.value=a};THREE.Audio.prototype.getVolume=function(){return this.gain.gain.value};THREE.AudioAnalyser=function(a,b){this.analyser=a.context.createAnalyser();this.analyser.fftSize=void 0!==b?b:2048;this.data=new Uint8Array(this.analyser.frequencyBinCount);a.getOutput().connect(this.analyser)};THREE.AudioAnalyser.prototype={constructor:THREE.AudioAnalyser,getData:function(){this.analyser.getByteFrequencyData(this.data);return this.data}};THREE.AudioBuffer=function(a){this.context=a;this.ready=!1;this.readyCallbacks=[]};THREE.AudioBuffer.prototype.load=function(a){var b=this,c=new XMLHttpRequest;c.open("GET",a,!0);c.responseType="arraybuffer";c.onload=function(a){b.context.decodeAudioData(this.response,function(a){b.buffer=a;b.ready=!0;for(a=0;a-1?e(a,b,c):b.indexOf("%")>-1?f(a,b,c):b.indexOf(":")>-1?g(a,b):i(a._value,b,c)}function d(a,b){var c,d,e,f,g,i=b,j=["KB","MB","GB","TB","PB","EB","ZB","YB"],k=!1;if(b.indexOf(":")>-1)a._value=h(b);else if(b===q)a._value=0;else{for("."!==o[p].delimiters.decimal&&(b=b.replace(/\./g,"").replace(o[p].delimiters.decimal,".")),c=new RegExp("[^a-zA-Z]"+o[p].abbreviations.thousand+"(?:\\)|(\\"+o[p].currency.symbol+")?(?:\\))?)?$"),d=new RegExp("[^a-zA-Z]"+o[p].abbreviations.million+"(?:\\)|(\\"+o[p].currency.symbol+")?(?:\\))?)?$"),e=new RegExp("[^a-zA-Z]"+o[p].abbreviations.billion+"(?:\\)|(\\"+o[p].currency.symbol+")?(?:\\))?)?$"),f=new RegExp("[^a-zA-Z]"+o[p].abbreviations.trillion+"(?:\\)|(\\"+o[p].currency.symbol+")?(?:\\))?)?$"),g=0;g<=j.length&&!(k=b.indexOf(j[g])>-1?Math.pow(1024,g+1):!1);g++);a._value=(k?k:1)*(i.match(c)?Math.pow(10,3):1)*(i.match(d)?Math.pow(10,6):1)*(i.match(e)?Math.pow(10,9):1)*(i.match(f)?Math.pow(10,12):1)*(b.indexOf("%")>-1?.01:1)*((b.split("-").length+Math.min(b.split("(").length-1,b.split(")").length-1))%2?1:-1)*Number(b.replace(/[^0-9\.]+/g,"")),a._value=k?Math.ceil(a._value):a._value}return a._value}function e(a,b,c){var d,e,f=b.indexOf("$"),g=b.indexOf("("),h=b.indexOf("-"),j="";return b.indexOf(" $")>-1?(j=" ",b=b.replace(" $","")):b.indexOf("$ ")>-1?(j=" ",b=b.replace("$ ","")):b=b.replace("$",""),e=i(a._value,b,c),1>=f?e.indexOf("(")>-1||e.indexOf("-")>-1?(e=e.split(""),d=1,(g>f||h>f)&&(d=0),e.splice(d,0,o[p].currency.symbol+j),e=e.join("")):e=o[p].currency.symbol+j+e:e.indexOf(")")>-1?(e=e.split(""),e.splice(-1,0,j+o[p].currency.symbol),e=e.join("")):e=e+j+o[p].currency.symbol,e}function f(a,b,c){var d,e="",f=100*a._value;return b.indexOf(" %")>-1?(e=" ",b=b.replace(" %","")):b=b.replace("%",""),d=i(f,b,c),d.indexOf(")")>-1?(d=d.split(""),d.splice(-1,0,e+"%"),d=d.join("")):d=d+e+"%",d}function g(a){var b=Math.floor(a._value/60/60),c=Math.floor((a._value-60*b*60)/60),d=Math.round(a._value-60*b*60-60*c);return b+":"+(10>c?"0"+c:c)+":"+(10>d?"0"+d:d)}function h(a){var b=a.split(":"),c=0;return 3===b.length?(c+=60*Number(b[0])*60,c+=60*Number(b[1]),c+=Number(b[2])):2===b.length&&(c+=60*Number(b[0]),c+=Number(b[1])),Number(c)}function i(a,c,d){var e,f,g,h,i,j,k=!1,l=!1,m=!1,n="",r=!1,s=!1,t=!1,u=!1,v=!1,w="",x="",y=Math.abs(a),z=["B","KB","MB","GB","TB","PB","EB","ZB","YB"],A="",B=!1;if(0===a&&null!==q)return q;if(c.indexOf("(")>-1?(k=!0,c=c.slice(1,-1)):c.indexOf("+")>-1&&(l=!0,c=c.replace(/\+/g,"")),c.indexOf("a")>-1&&(r=c.indexOf("aK")>=0,s=c.indexOf("aM")>=0,t=c.indexOf("aB")>=0,u=c.indexOf("aT")>=0,v=r||s||t||u,c.indexOf(" a")>-1?(n=" ",c=c.replace(" a","")):c=c.replace("a",""),y>=Math.pow(10,12)&&!v||u?(n+=o[p].abbreviations.trillion,a/=Math.pow(10,12)):y=Math.pow(10,9)&&!v||t?(n+=o[p].abbreviations.billion,a/=Math.pow(10,9)):y=Math.pow(10,6)&&!v||s?(n+=o[p].abbreviations.million,a/=Math.pow(10,6)):(y=Math.pow(10,3)&&!v||r)&&(n+=o[p].abbreviations.thousand,a/=Math.pow(10,3))),c.indexOf("b")>-1)for(c.indexOf(" b")>-1?(w=" ",c=c.replace(" b","")):c=c.replace("b",""),g=0;g<=z.length;g++)if(e=Math.pow(1024,g),f=Math.pow(1024,g+1),a>=e&&f>a){w+=z[g],e>0&&(a/=e);break}return c.indexOf("o")>-1&&(c.indexOf(" o")>-1?(x=" ",c=c.replace(" o","")):c=c.replace("o",""),x+=o[p].ordinal(a)),c.indexOf("[.]")>-1&&(m=!0,c=c.replace("[.]",".")),h=a.toString().split(".")[0],i=c.split(".")[1],j=c.indexOf(","),i?(i.indexOf("[")>-1?(i=i.replace("]",""),i=i.split("["),A=b(a,i[0].length+i[1].length,d,i[1].length)):A=b(a,i.length,d),h=A.split(".")[0],A=A.split(".")[1].length?o[p].delimiters.decimal+A.split(".")[1]:"",m&&0===Number(A.slice(1))&&(A="")):h=b(a,null,d),h.indexOf("-")>-1&&(h=h.slice(1),B=!0),j>-1&&(h=h.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g,"$1"+o[p].delimiters.thousands)),0===c.indexOf(".")&&(h=""),(k&&B?"(":"")+(!k&&B?"-":"")+(!B&&l?"+":"")+h+A+(x?x:"")+(n?n:"")+(w?w:"")+(k&&B?")":"")}function j(a,b){o[a]=b}function k(a){var b=a.toString().split(".");return b.length<2?1:Math.pow(10,b[1].length)}function l(){var a=Array.prototype.slice.call(arguments);return a.reduce(function(a,b){var c=k(a),d=k(b);return c>d?c:d},-1/0)}var m,n="1.5.3",o={},p="en",q=null,r="0,0",s="undefined"!=typeof module&&module.exports;m=function(b){return m.isNumeral(b)?b=b.value():0===b||"undefined"==typeof b?b=0:Number(b)||(b=m.fn.unformat(b)),new a(Number(b))},m.version=n,m.isNumeral=function(b){return b instanceof a},m.language=function(a,b){if(!a)return p;if(a&&!b){if(!o[a])throw new Error("Unknown language : "+a);p=a}return(b||!o[a])&&j(a,b),m},m.languageData=function(a){if(!a)return o[p];if(!o[a])throw new Error("Unknown language : "+a);return o[a]},m.language("en",{delimiters:{thousands:",",decimal:"."},abbreviations:{thousand:"k",million:"m",billion:"b",trillion:"t"},ordinal:function(a){var b=a%10;return 1===~~(a%100/10)?"th":1===b?"st":2===b?"nd":3===b?"rd":"th"},currency:{symbol:"$"}}),m.zeroFormat=function(a){q="string"==typeof a?a:null},m.defaultFormat=function(a){r="string"==typeof a?a:"0.0"},"function"!=typeof Array.prototype.reduce&&(Array.prototype.reduce=function(a,b){"use strict";if(null===this||"undefined"==typeof this)throw new TypeError("Array.prototype.reduce called on null or undefined");if("function"!=typeof a)throw new TypeError(a+" is not a function");var c,d,e=this.length>>>0,f=!1;for(1c;++c)this.hasOwnProperty(c)&&(f?d=a(d,this[c],c,this):(d=this[c],f=!0));if(!f)throw new TypeError("Reduce of empty array with no initial value");return d}),m.fn=a.prototype={clone:function(){return m(this)},format:function(a,b){return c(this,a?a:r,void 0!==b?b:Math.round)},unformat:function(a){return"[object Number]"===Object.prototype.toString.call(a)?a:d(this,a?a:r)},value:function(){return this._value},valueOf:function(){return this._value},set:function(a){return this._value=Number(a),this},add:function(a){function b(a,b){return a+c*b}var c=l.call(null,this._value,a);return this._value=[this._value,a].reduce(b,0)/c,this},subtract:function(a){function b(a,b){return a-c*b}var c=l.call(null,this._value,a);return this._value=[a].reduce(b,this._value*c)/c,this},multiply:function(a){function b(a,b){var c=l(a,b);return a*c*b*c/(c*c)}return this._value=[this._value,a].reduce(b,1),this},divide:function(a){function b(a,b){var c=l(a,b);return a*c/(b*c)}return this._value=[this._value,a].reduce(b),this},difference:function(a){return Math.abs(m(this._value).subtract(a).value())}},s&&(module.exports=m),"undefined"==typeof ender&&(this.numeral=m),"function"==typeof define&&define.amd&&define([],function(){return m})}).call(this); +// Extracted Richard Bunt's work in Telemachus: https://github.com/richardbunt/Telemachus/blob/master/WebPages/WebPages/src/console.js -break;case"mapAORepeat":case"mapAOOffset":case"mapAOWrap":case"mapAOAnisotropy":break;case"mapBump":k.bumpMap=g(p,d.mapBumpRepeat,d.mapBumpOffset,d.mapBumpWrap,d.mapBumpAnisotropy);break;case"mapBumpScale":k.bumpScale=p;break;case"mapBumpRepeat":case"mapBumpOffset":case"mapBumpWrap":case"mapBumpAnisotropy":break;case"mapNormal":k.normalMap=g(p,d.mapNormalRepeat,d.mapNormalOffset,d.mapNormalWrap,d.mapNormalAnisotropy);break;case"mapNormalFactor":k.normalScale=[p,p];break;case"mapNormalRepeat":case"mapNormalOffset":case"mapNormalWrap":case"mapNormalAnisotropy":break;case"mapSpecular":k.specularMap=g(p,d.mapSpecularRepeat,d.mapSpecularOffset,d.mapSpecularWrap,d.mapSpecularAnisotropy);break;case"mapSpecularRepeat":case"mapSpecularOffset":case"mapSpecularWrap":case"mapSpecularAnisotropy":break;case"mapAlpha":k.alphaMap=g(p,d.mapAlphaRepeat,d.mapAlphaOffset,d.mapAlphaWrap,d.mapAlphaAnisotropy);break;case"mapAlphaRepeat":case"mapAlphaOffset":case"mapAlphaWrap":case"mapAlphaAnisotropy":break;case"flipSided":k.side=THREE.BackSide;break;case"doubleSided":k.side=THREE.DoubleSide;break;case"transparency":console.warn("THREE.Loader.createMaterial: transparency has been renamed to opacity");k.opacity=p;break;case"depthTest":case"depthWrite":case"colorWrite":case"opacity":case"reflectivity":case"transparent":case"visible":case"wireframe":k[l]=p;break;case"vertexColors":!0===p&&(k.vertexColors=THREE.VertexColors);"face"===p&&(k.vertexColors=THREE.FaceColors);break;default:console.error("THREE.Loader.createMaterial: Unsupported",l,p)}}"MeshBasicMaterial"===k.type&&delete k.emissive;"MeshPhongMaterial"!==k.type&&delete k.specular;1>k.opacity&&(k.transparent=!0);c.setTextures(h);return c.parse(k)}}()};THREE.Loader.Handlers={handlers:[],add:function(a,b){this.handlers.push(a,b)},get:function(a){for(var b=this.handlers,c=0,d=b.length;cg;g++)m=w[k++],s=t[2*m],m=t[2*m+1],s=new THREE.Vector2(s,m),2!==g&&c.faceVertexUvs[d][h].push(s),0!==g&&c.faceVertexUvs[d][h+1].push(s);n&&(n=3*w[k++],q.normal.set(E[n++],E[n++],E[n]),v.normal.copy(q.normal));if(u)for(d=0;4>d;d++)n=3*w[k++],u=new THREE.Vector3(E[n++],E[n++],E[n]),2!==d&&q.vertexNormals.push(u),0!==d&&v.vertexNormals.push(u);p&&(p=w[k++],p=x[p],q.color.setHex(p),v.color.setHex(p));if(b)for(d=0;4>d;d++)p=w[k++],p=x[p],2!==d&&q.vertexColors.push(new THREE.Color(p)),0!==d&&v.vertexColors.push(new THREE.Color(p));c.faces.push(q);c.faces.push(v)}else{q=new THREE.Face3;q.a=w[k++];q.b=w[k++];q.c=w[k++];h&&(h=w[k++],q.materialIndex=h);h=c.faces.length;if(d)for(d=0;dg;g++)m=w[k++],s=t[2*m],m=t[2*m+1],s=new THREE.Vector2(s,m),c.faceVertexUvs[d][h].push(s);n&&(n=3*w[k++],q.normal.set(E[n++],E[n++],E[n]));if(u)for(d=0;3>d;d++)n=3*w[k++],u=new THREE.Vector3(E[n++],E[n++],E[n]),q.vertexNormals.push(u);p&&(p=w[k++],q.color.setHex(x[p]));if(b)for(d=0;3>d;d++)p=w[k++],q.vertexColors.push(new THREE.Color(x[p]));c.faces.push(q)}})(d);(function(){var b=void 0!==a.influencesPerVertex?a.influencesPerVertex:2;if(a.skinWeights)for(var d=0,g=a.skinWeights.length;dthis.opacity&&(d.opacity=this.opacity);!0===this.transparent&&(d.transparent=this.transparent);0a.x||1a.x?0:1;break;case THREE.MirroredRepeatWrapping:1===Math.abs(Math.floor(a.x)%2)?a.x=Math.ceil(a.x)-a.x:a.x-=Math.floor(a.x)}if(0>a.y||1a.y?0:1;break;case THREE.MirroredRepeatWrapping:1===Math.abs(Math.floor(a.y)%2)?a.y=Math.ceil(a.y)-a.y:a.y-=Math.floor(a.y)}this.flipY&&(a.y=1-a.y)}}};THREE.EventDispatcher.prototype.apply(THREE.Texture.prototype);THREE.TextureIdCount=0;THREE.CanvasTexture=function(a,b,c,d,e,f,g,h,k){THREE.Texture.call(this,a,b,c,d,e,f,g,h,k);this.needsUpdate=!0};THREE.CanvasTexture.prototype=Object.create(THREE.Texture.prototype);THREE.CanvasTexture.prototype.constructor=THREE.CanvasTexture;THREE.CubeTexture=function(a,b,c,d,e,f,g,h,k){a=void 0!==a?a:[];b=void 0!==b?b:THREE.CubeReflectionMapping;THREE.Texture.call(this,a,b,c,d,e,f,g,h,k);this.flipY=!1};THREE.CubeTexture.prototype=Object.create(THREE.Texture.prototype);THREE.CubeTexture.prototype.constructor=THREE.CubeTexture;Object.defineProperty(THREE.CubeTexture.prototype,"images",{get:function(){return this.image},set:function(a){this.image=a}});THREE.CompressedTexture=function(a,b,c,d,e,f,g,h,k,l,p){THREE.Texture.call(this,null,f,g,h,k,l,d,e,p);this.image={width:b,height:c};this.mipmaps=a;this.generateMipmaps=this.flipY=!1};THREE.CompressedTexture.prototype=Object.create(THREE.Texture.prototype);THREE.CompressedTexture.prototype.constructor=THREE.CompressedTexture;THREE.DataTexture=function(a,b,c,d,e,f,g,h,k,l,p){THREE.Texture.call(this,null,f,g,h,k,l,d,e,p);this.image={data:a,width:b,height:c};this.magFilter=void 0!==k?k:THREE.NearestFilter;this.minFilter=void 0!==l?l:THREE.NearestFilter;this.generateMipmaps=this.flipY=!1};THREE.DataTexture.prototype=Object.create(THREE.Texture.prototype);THREE.DataTexture.prototype.constructor=THREE.DataTexture;THREE.VideoTexture=function(a,b,c,d,e,f,g,h,k){function l(){requestAnimationFrame(l);a.readyState===a.HAVE_ENOUGH_DATA&&(p.needsUpdate=!0)}THREE.Texture.call(this,a,b,c,d,e,f,g,h,k);this.generateMipmaps=!1;var p=this;l()};THREE.VideoTexture.prototype=Object.create(THREE.Texture.prototype);THREE.VideoTexture.prototype.constructor=THREE.VideoTexture;THREE.Group=function(){THREE.Object3D.call(this);this.type="Group"};THREE.Group.prototype=Object.create(THREE.Object3D.prototype);THREE.Group.prototype.constructor=THREE.Group;THREE.Points=function(a,b){THREE.Object3D.call(this);this.type="Points";this.geometry=void 0!==a?a:new THREE.Geometry;this.material=void 0!==b?b:new THREE.PointsMaterial({color:16777215*Math.random()})};THREE.Points.prototype=Object.create(THREE.Object3D.prototype);THREE.Points.prototype.constructor=THREE.Points;THREE.Points.prototype.raycast=function(){var a=new THREE.Matrix4,b=new THREE.Ray,c=new THREE.Sphere;return function(d,e){function f(a,c){var f=b.distanceSqToPoint(a);if(fd.far||e.push({distance:l,distanceToRay:Math.sqrt(f),point:h.clone(),index:c,face:null,object:g})}}var g=this,h=this.geometry,k=this.matrixWorld,l=d.params.Points.threshold;null===h.boundingSphere&&h.computeBoundingSphere();c.copy(h.boundingSphere);c.applyMatrix4(k);if(!1!==d.ray.intersectsSphere(c)){a.getInverse(k);b.copy(d.ray).applyMatrix4(a);var l=l/((this.scale.x+this.scale.y+this.scale.z)/3),p=l*l,l=new THREE.Vector3;if(h instanceof THREE.BufferGeometry){var n=h.index,h=h.attributes.position.array;if(null!==n)for(var m=n.array,n=0,q=m.length;nf||(p.applyMatrix4(this.matrixWorld),v=d.ray.origin.distanceTo(p),vd.far||e.push({distance:v,point:h.clone().applyMatrix4(this.matrixWorld),index:g,face:null,faceIndex:null,object:this}))}else for(g=0,u=q.length/3-1;gf||(p.applyMatrix4(this.matrixWorld),v=d.ray.origin.distanceTo(p),vd.far||e.push({distance:v,point:h.clone().applyMatrix4(this.matrixWorld),index:g,face:null,faceIndex:null,object:this}))}else if(g instanceof THREE.Geometry)for(k=g.vertices,l=k.length,g=0;gf||(p.applyMatrix4(this.matrixWorld),v=d.ray.origin.distanceTo(p),vd.far||e.push({distance:v,point:h.clone().applyMatrix4(this.matrixWorld),index:g,face:null,faceIndex:null,object:this}))}}}();THREE.Line.prototype.clone=function(){return new this.constructor(this.geometry,this.material).copy(this)};THREE.LineStrip=0;THREE.LinePieces=1;THREE.LineSegments=function(a,b){THREE.Line.call(this,a,b);this.type="LineSegments"};THREE.LineSegments.prototype=Object.create(THREE.Line.prototype);THREE.LineSegments.prototype.constructor=THREE.LineSegments;THREE.Mesh=function(a,b){THREE.Object3D.call(this);this.type="Mesh";this.geometry=void 0!==a?a:new THREE.Geometry;this.material=void 0!==b?b:new THREE.MeshBasicMaterial({color:16777215*Math.random()});this.drawMode=THREE.TrianglesDrawMode;this.updateMorphTargets()};THREE.Mesh.prototype=Object.create(THREE.Object3D.prototype);THREE.Mesh.prototype.constructor=THREE.Mesh;THREE.Mesh.prototype.setDrawMode=function(a){this.drawMode=a};THREE.Mesh.prototype.updateMorphTargets=function(){if(void 0!==this.geometry.morphTargets&&0b.far?null:{distance:c,point:s.clone(),object:a}}function c(c,d,e,f,l,p,n,s){g.fromArray(f,3*p);h.fromArray(f,3*n);k.fromArray(f,3*s);if(c=b(c,d,e,g,h,k,t))l&&(m.fromArray(l,2*p),q.fromArray(l,2*n),u.fromArray(l,2*s),c.uv=a(t,g,h,k,m,q,u)),c.face=new THREE.Face3(p,n,s,THREE.Triangle.normal(g,h,k)),c.faceIndex=p;return c}var d=new THREE.Matrix4,e=new THREE.Ray,f=new THREE.Sphere,g=new THREE.Vector3,h=new THREE.Vector3,k=new THREE.Vector3,l=new THREE.Vector3,p=new THREE.Vector3,n=new THREE.Vector3,m=new THREE.Vector2,q=new THREE.Vector2,u=new THREE.Vector2,v=new THREE.Vector3,t=new THREE.Vector3,s=new THREE.Vector3;return function(s,v){var x=this.geometry,D=this.material,z=this.matrixWorld;if(void 0!==D&&(null===x.boundingSphere&&x.computeBoundingSphere(),f.copy(x.boundingSphere),f.applyMatrix4(z),!1!==s.ray.intersectsSphere(f)&&(d.getInverse(z),e.copy(s.ray).applyMatrix4(d),null===x.boundingBox||!1!==e.intersectsBox(x.boundingBox)))){var y,B;if(x instanceof THREE.BufferGeometry){var G,F,D=x.index,z=x.attributes,x=z.position.array;void 0!==z.uv&&(y=z.uv.array);if(null!==D)for(var z=D.array,H=0,L=z.length;H=d[e].distance)d[e-1].object.visible=!1,d[e].object.visible=!0;else break;for(;ethis.scale.x*this.scale.y||c.push({distance:Math.sqrt(d),point:this.position,face:null,object:this})}}();THREE.Sprite.prototype.clone=function(){return new this.constructor(this.material).copy(this)};THREE.Particle=THREE.Sprite;THREE.LensFlare=function(a,b,c,d,e){THREE.Object3D.call(this);this.lensFlares=[];this.positionScreen=new THREE.Vector3;this.customUpdateCallback=void 0;void 0!==a&&this.add(a,b,c,d,e)};THREE.LensFlare.prototype=Object.create(THREE.Object3D.prototype);THREE.LensFlare.prototype.constructor=THREE.LensFlare;THREE.LensFlare.prototype.add=function(a,b,c,d,e,f){void 0===b&&(b=-1);void 0===c&&(c=0);void 0===f&&(f=1);void 0===e&&(e=new THREE.Color(16777215));void 0===d&&(d=THREE.NormalBlending);c=Math.min(c,Math.max(0,c));this.lensFlares.push({texture:a,size:b,distance:c,x:0,y:0,z:0,scale:1,rotation:0,opacity:f,color:e,blending:d})};THREE.LensFlare.prototype.updateLensFlares=function(){var a,b=this.lensFlares.length,c,d=2*-this.positionScreen.x,e=2*-this.positionScreen.y;for(a=0;a= 365 * 24 * 3600) { + result += (t / (365 * 24 * 3600) | 0) + ":"; + t %= 365 * 24 * 3600; + if (t < 24 * 3600) { + result += "0:"; + } + } + if (t >= 24 * 3600) { + result += (t / (24 * 3600) | 0) + ":"; + } + t %= 24 * 3600; + return result + this.hourMinSec(t) + " MET"; + }, -THREE.ShaderChunk.alphamap_pars_fragment="#ifdef USE_ALPHAMAP\n uniform sampler2D alphaMap;\n#endif\n";THREE.ShaderChunk.alphatest_fragment="#ifdef ALPHATEST\n if ( diffuseColor.a < ALPHATEST ) discard;\n#endif\n";THREE.ShaderChunk.aomap_fragment="#ifdef USE_AOMAP\n float ambientOcclusion = ( texture2D( aoMap, vUv2 ).r - 1.0 ) * aoMapIntensity + 1.0;\n reflectedLight.indirectDiffuse *= ambientOcclusion;\n #if defined( USE_ENVMAP ) && defined( STANDARD )\n float dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n reflectedLight.indirectSpecular *= computeSpecularOcclusion( dotNV, ambientOcclusion, material.specularRoughness );\n #endif\n#endif\n";THREE.ShaderChunk.aomap_pars_fragment="#ifdef USE_AOMAP\n uniform sampler2D aoMap;\n uniform float aoMapIntensity;\n#endif";THREE.ShaderChunk.begin_vertex="\nvec3 transformed = vec3( position );\n";THREE.ShaderChunk.beginnormal_vertex="\nvec3 objectNormal = vec3( normal );\n";THREE.ShaderChunk.bsdfs="bool testLightInRange( const in float lightDistance, const in float cutoffDistance ) {\n return any( bvec2( cutoffDistance == 0.0, lightDistance < cutoffDistance ) );\n}\nfloat punctualLightIntensityToIrradianceFactor( const in float lightDistance, const in float cutoffDistance, const in float decayExponent ) {\n if( decayExponent > 0.0 ) {\n#if defined ( PHYSICALLY_CORRECT_LIGHTS )\n float distanceFalloff = 1.0 / max( pow( lightDistance, decayExponent ), 0.01 );\n float maxDistanceCutoffFactor = pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) );\n return distanceFalloff * maxDistanceCutoffFactor;\n#else\n return pow( saturate( -lightDistance / cutoffDistance + 1.0 ), decayExponent );\n#endif\n }\n return 1.0;\n}\nvec3 BRDF_Diffuse_Lambert( const in vec3 diffuseColor ) {\n return RECIPROCAL_PI * diffuseColor;\n}\nvec3 F_Schlick( const in vec3 specularColor, const in float dotLH ) {\n float fresnel = exp2( ( -5.55473 * dotLH - 6.98316 ) * dotLH );\n return ( 1.0 - specularColor ) * fresnel + specularColor;\n}\nfloat G_GGX_Smith( const in float alpha, const in float dotNL, const in float dotNV ) {\n float a2 = pow2( alpha );\n float gl = dotNL + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\n float gv = dotNV + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\n return 1.0 / ( gl * gv );\n}\nfloat D_GGX( const in float alpha, const in float dotNH ) {\n float a2 = pow2( alpha );\n float denom = pow2( dotNH ) * ( a2 - 1.0 ) + 1.0;\n return RECIPROCAL_PI * a2 / pow2( denom );\n}\nvec3 BRDF_Specular_GGX( const in IncidentLight incidentLight, const in GeometricContext geometry, const in vec3 specularColor, const in float roughness ) {\n float alpha = pow2( roughness );\n vec3 halfDir = normalize( incidentLight.direction + geometry.viewDir );\n float dotNL = saturate( dot( geometry.normal, incidentLight.direction ) );\n float dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n float dotNH = saturate( dot( geometry.normal, halfDir ) );\n float dotLH = saturate( dot( incidentLight.direction, halfDir ) );\n vec3 F = F_Schlick( specularColor, dotLH );\n float G = G_GGX_Smith( alpha, dotNL, dotNV );\n float D = D_GGX( alpha, dotNH );\n return F * ( G * D );\n}\nvec3 BRDF_Specular_GGX_Environment( const in GeometricContext geometry, const in vec3 specularColor, const in float roughness ) {\n float dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n const vec4 c0 = vec4( - 1, - 0.0275, - 0.572, 0.022 );\n const vec4 c1 = vec4( 1, 0.0425, 1.04, - 0.04 );\n vec4 r = roughness * c0 + c1;\n float a004 = min( r.x * r.x, exp2( - 9.28 * dotNV ) ) * r.x + r.y;\n vec2 AB = vec2( -1.04, 1.04 ) * a004 + r.zw;\n return specularColor * AB.x + AB.y;\n}\nfloat G_BlinnPhong_Implicit( ) {\n return 0.25;\n}\nfloat D_BlinnPhong( const in float shininess, const in float dotNH ) {\n return RECIPROCAL_PI * ( shininess * 0.5 + 1.0 ) * pow( dotNH, shininess );\n}\nvec3 BRDF_Specular_BlinnPhong( const in IncidentLight incidentLight, const in GeometricContext geometry, const in vec3 specularColor, const in float shininess ) {\n vec3 halfDir = normalize( incidentLight.direction + geometry.viewDir );\n float dotNH = saturate( dot( geometry.normal, halfDir ) );\n float dotLH = saturate( dot( incidentLight.direction, halfDir ) );\n vec3 F = F_Schlick( specularColor, dotLH );\n float G = G_BlinnPhong_Implicit( );\n float D = D_BlinnPhong( shininess, dotNH );\n return F * ( G * D );\n}\nfloat GGXRoughnessToBlinnExponent( const in float ggxRoughness ) {\n return ( 2.0 / pow2( ggxRoughness + 0.0001 ) - 2.0 );\n}\nfloat BlinnExponentToGGXRoughness( const in float blinnExponent ) {\n return sqrt( 2.0 / ( blinnExponent + 2.0 ) );\n}\n";THREE.ShaderChunk.bumpmap_pars_fragment="#ifdef USE_BUMPMAP\n uniform sampler2D bumpMap;\n uniform float bumpScale;\n vec2 dHdxy_fwd() {\n vec2 dSTdx = dFdx( vUv );\n vec2 dSTdy = dFdy( vUv );\n float Hll = bumpScale * texture2D( bumpMap, vUv ).x;\n float dBx = bumpScale * texture2D( bumpMap, vUv + dSTdx ).x - Hll;\n float dBy = bumpScale * texture2D( bumpMap, vUv + dSTdy ).x - Hll;\n return vec2( dBx, dBy );\n }\n vec3 perturbNormalArb( vec3 surf_pos, vec3 surf_norm, vec2 dHdxy ) {\n vec3 vSigmaX = dFdx( surf_pos );\n vec3 vSigmaY = dFdy( surf_pos );\n vec3 vN = surf_norm;\n vec3 R1 = cross( vSigmaY, vN );\n vec3 R2 = cross( vN, vSigmaX );\n float fDet = dot( vSigmaX, R1 );\n vec3 vGrad = sign( fDet ) * ( dHdxy.x * R1 + dHdxy.y * R2 );\n return normalize( abs( fDet ) * surf_norm - vGrad );\n }\n#endif\n";THREE.ShaderChunk.color_fragment="#ifdef USE_COLOR\n diffuseColor.rgb *= vColor;\n#endif";THREE.ShaderChunk.color_pars_fragment="#ifdef USE_COLOR\n varying vec3 vColor;\n#endif\n";THREE.ShaderChunk.color_pars_vertex="#ifdef USE_COLOR\n varying vec3 vColor;\n#endif";THREE.ShaderChunk.color_vertex="#ifdef USE_COLOR\n vColor.xyz = color.xyz;\n#endif";THREE.ShaderChunk.common="#define PI 3.14159\n#define PI2 6.28318\n#define RECIPROCAL_PI 0.31830988618\n#define RECIPROCAL_PI2 0.15915494\n#define LOG2 1.442695\n#define EPSILON 1e-6\n#define saturate(a) clamp( a, 0.0, 1.0 )\n#define whiteCompliment(a) ( 1.0 - saturate( a ) )\nfloat pow2( const in float x ) { return x*x; }\nfloat pow3( const in float x ) { return x*x*x; }\nfloat pow4( const in float x ) { float x2 = x*x; return x2*x2; }\nfloat average( const in vec3 color ) { return dot( color, vec3( 0.3333 ) ); }\nstruct IncidentLight {\n vec3 color;\n vec3 direction;\n bool visible;\n};\nstruct ReflectedLight {\n vec3 directDiffuse;\n vec3 directSpecular;\n vec3 indirectDiffuse;\n vec3 indirectSpecular;\n};\nstruct GeometricContext {\n vec3 position;\n vec3 normal;\n vec3 viewDir;\n};\nvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n return normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n}\nvec3 inverseTransformDirection( in vec3 dir, in mat4 matrix ) {\n return normalize( ( vec4( dir, 0.0 ) * matrix ).xyz );\n}\nvec3 projectOnPlane(in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\n float distance = dot( planeNormal, point - pointOnPlane );\n return - distance * planeNormal + point;\n}\nfloat sideOfPlane( in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\n return sign( dot( point - pointOnPlane, planeNormal ) );\n}\nvec3 linePlaneIntersect( in vec3 pointOnLine, in vec3 lineDirection, in vec3 pointOnPlane, in vec3 planeNormal ) {\n return lineDirection * ( dot( planeNormal, pointOnPlane - pointOnLine ) / dot( planeNormal, lineDirection ) ) + pointOnLine;\n}\n";THREE.ShaderChunk.cube_uv_reflection_fragment="#ifdef ENVMAP_TYPE_CUBE_UV\nconst float cubeUV_textureSize = 1024.0;\nint getFaceFromDirection(vec3 direction) {\n vec3 absDirection = abs(direction);\n int face = -1;\n if( absDirection.x > absDirection.z ) {\n if(absDirection.x > absDirection.y )\n face = direction.x > 0.0 ? 0 : 3;\n else\n face = direction.y > 0.0 ? 1 : 4;\n }\n else {\n if(absDirection.z > absDirection.y )\n face = direction.z > 0.0 ? 2 : 5;\n else\n face = direction.y > 0.0 ? 1 : 4;\n }\n return face;\n}\nconst float cubeUV_maxLods1 = log2(cubeUV_textureSize*0.25) - 1.0;\nconst float cubeUV_rangeClamp = exp2((6.0 - 1.0) * 2.0);\nvec2 MipLevelInfo( vec3 vec, float roughnessLevel, float roughness ) {\n float scale = exp2(cubeUV_maxLods1 - roughnessLevel);\n float dxRoughness = dFdx(roughness);\n float dyRoughness = dFdy(roughness);\n vec3 dx = dFdx( vec * scale * dxRoughness );\n vec3 dy = dFdy( vec * scale * dyRoughness );\n float d = max( dot( dx, dx ), dot( dy, dy ) );\n d = clamp(d, 1.0, cubeUV_rangeClamp);\n float mipLevel = 0.5 * log2(d);\n return vec2(floor(mipLevel), fract(mipLevel));\n}\nconst float cubeUV_maxLods2 = log2(cubeUV_textureSize*0.25) - 2.0;\nconst float cubeUV_rcpTextureSize = 1.0 / cubeUV_textureSize;\nvec2 getCubeUV(vec3 direction, float roughnessLevel, float mipLevel) {\n mipLevel = roughnessLevel > cubeUV_maxLods2 - 3.0 ? 0.0 : mipLevel;\n float a = 16.0 * cubeUV_rcpTextureSize;\n vec2 exp2_packed = exp2( vec2( roughnessLevel, mipLevel ) );\n vec2 rcp_exp2_packed = vec2( 1.0 ) / exp2_packed;\n float powScale = exp2_packed.x * exp2_packed.y;\n float scale = rcp_exp2_packed.x * rcp_exp2_packed.y * 0.25;\n float mipOffset = 0.75*(1.0 - rcp_exp2_packed.y) * rcp_exp2_packed.x;\n bool bRes = mipLevel == 0.0;\n scale = bRes && (scale < a) ? a : scale;\n vec3 r;\n vec2 offset;\n int face = getFaceFromDirection(direction);\n float rcpPowScale = 1.0 / powScale;\n if( face == 0) {\n r = vec3(direction.x, -direction.z, direction.y);\n offset = vec2(0.0+mipOffset,0.75 * rcpPowScale);\n offset.y = bRes && (offset.y < 2.0*a) ? a : offset.y;\n }\n else if( face == 1) {\n r = vec3(direction.y, direction.x, direction.z);\n offset = vec2(scale+mipOffset, 0.75 * rcpPowScale);\n offset.y = bRes && (offset.y < 2.0*a) ? a : offset.y;\n }\n else if( face == 2) {\n r = vec3(direction.z, direction.x, direction.y);\n offset = vec2(2.0*scale+mipOffset, 0.75 * rcpPowScale);\n offset.y = bRes && (offset.y < 2.0*a) ? a : offset.y;\n }\n else if( face == 3) {\n r = vec3(direction.x, direction.z, direction.y);\n offset = vec2(0.0+mipOffset,0.5 * rcpPowScale);\n offset.y = bRes && (offset.y < 2.0*a) ? 0.0 : offset.y;\n }\n else if( face == 4) {\n r = vec3(direction.y, direction.x, -direction.z);\n offset = vec2(scale+mipOffset, 0.5 * rcpPowScale);\n offset.y = bRes && (offset.y < 2.0*a) ? 0.0 : offset.y;\n }\n else {\n r = vec3(direction.z, -direction.x, direction.y);\n offset = vec2(2.0*scale+mipOffset, 0.5 * rcpPowScale);\n offset.y = bRes && (offset.y < 2.0*a) ? 0.0 : offset.y;\n }\n r = normalize(r);\n float texelOffset = 0.5 * cubeUV_rcpTextureSize;\n vec2 s = ( r.yz / abs( r.x ) + vec2( 1.0 ) ) * 0.5;\n vec2 base = offset + vec2( texelOffset );\n return base + s * ( scale - 2.0 * texelOffset );\n}\nconst float cubeUV_maxLods3 = log2(cubeUV_textureSize*0.25) - 3.0;\nvec4 textureCubeUV(vec3 reflectedDirection, float roughness ) {\n float roughnessVal = roughness* cubeUV_maxLods3;\n float r1 = floor(roughnessVal);\n float r2 = r1 + 1.0;\n float t = fract(roughnessVal);\n vec2 mipInfo = MipLevelInfo(reflectedDirection, r1, roughness);\n float s = mipInfo.y;\n float level0 = mipInfo.x;\n float level1 = level0 + 1.0;\n level1 = level1 > 5.0 ? 5.0 : level1;\n level0 += min( floor( s + 0.5 ), 5.0 );\n vec2 uv_10 = getCubeUV(reflectedDirection, r1, level0);\n vec4 color10 = envMapTexelToLinear(texture2D(envMap, uv_10));\n vec2 uv_20 = getCubeUV(reflectedDirection, r2, level0);\n vec4 color20 = envMapTexelToLinear(texture2D(envMap, uv_20));\n vec4 result = mix(color10, color20, t);\n return vec4(result.rgb, 1.0);\n}\n#endif\n";THREE.ShaderChunk.defaultnormal_vertex="#ifdef FLIP_SIDED\n objectNormal = -objectNormal;\n#endif\nvec3 transformedNormal = normalMatrix * objectNormal;\n";THREE.ShaderChunk.displacementmap_vertex="#ifdef USE_DISPLACEMENTMAP\n transformed += normal * ( texture2D( displacementMap, uv ).x * displacementScale + displacementBias );\n#endif\n";THREE.ShaderChunk.displacementmap_pars_vertex="#ifdef USE_DISPLACEMENTMAP\n uniform sampler2D displacementMap;\n uniform float displacementScale;\n uniform float displacementBias;\n#endif\n";THREE.ShaderChunk.emissivemap_fragment="#ifdef USE_EMISSIVEMAP\n vec4 emissiveColor = texture2D( emissiveMap, vUv );\n emissiveColor.rgb = emissiveMapTexelToLinear( emissiveColor ).rgb;\n totalEmissiveRadiance *= emissiveColor.rgb;\n#endif\n";THREE.ShaderChunk.emissivemap_pars_fragment="#ifdef USE_EMISSIVEMAP\n uniform sampler2D emissiveMap;\n#endif\n";THREE.ShaderChunk.encodings_pars_fragment="\nvec4 LinearToLinear( in vec4 value ) {\n return value;\n}\nvec4 GammaToLinear( in vec4 value, in float gammaFactor ) {\n return vec4( pow( value.xyz, vec3( gammaFactor ) ), value.w );\n}\nvec4 LinearToGamma( in vec4 value, in float gammaFactor ) {\n return vec4( pow( value.xyz, vec3( 1.0 / gammaFactor ) ), value.w );\n}\nvec4 sRGBToLinear( in vec4 value ) {\n return vec4( mix( pow( value.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), value.rgb * 0.0773993808, vec3( lessThanEqual( value.rgb, vec3( 0.04045 ) ) ) ), value.w );\n}\nvec4 LinearTosRGB( in vec4 value ) {\n return vec4( mix( pow( value.rgb, vec3( 0.41666 ) ) * 1.055 - vec3( 0.055 ), value.rgb * 12.92, vec3( lessThanEqual( value.rgb, vec3( 0.0031308 ) ) ) ), value.w );\n}\nvec4 RGBEToLinear( in vec4 value ) {\n return vec4( value.rgb * exp2( value.a * 255.0 - 128.0 ), 1.0 );\n}\nvec4 LinearToRGBE( in vec4 value ) {\n float maxComponent = max( max( value.r, value.g ), value.b );\n float fExp = clamp( ceil( log2( maxComponent ) ), -128.0, 127.0 );\n return vec4( value.rgb / exp2( fExp ), ( fExp + 128.0 ) / 255.0 );\n}\nvec4 RGBMToLinear( in vec4 value, in float maxRange ) {\n return vec4( value.xyz * value.w * maxRange, 1.0 );\n}\nvec4 LinearToRGBM( in vec4 value, in float maxRange ) {\n float maxRGB = max( value.x, max( value.g, value.b ) );\n float M = clamp( maxRGB / maxRange, 0.0, 1.0 );\n M = ceil( M * 255.0 ) / 255.0;\n return vec4( value.rgb / ( M * maxRange ), M );\n}\nvec4 RGBDToLinear( in vec4 value, in float maxRange ) {\n return vec4( value.rgb * ( ( maxRange / 255.0 ) / value.a ), 1.0 );\n}\nvec4 LinearToRGBD( in vec4 value, in float maxRange ) {\n float maxRGB = max( value.x, max( value.g, value.b ) );\n float D = max( maxRange / maxRGB, 1.0 );\n D = min( floor( D ) / 255.0, 1.0 );\n return vec4( value.rgb * ( D * ( 255.0 / maxRange ) ), D );\n}\nconst mat3 cLogLuvM = mat3( 0.2209, 0.3390, 0.4184, 0.1138, 0.6780, 0.7319, 0.0102, 0.1130, 0.2969 );\nvec4 LinearToLogLuv( in vec4 value ) {\n vec3 Xp_Y_XYZp = value.rgb * cLogLuvM;\n Xp_Y_XYZp = max(Xp_Y_XYZp, vec3(1e-6, 1e-6, 1e-6));\n vec4 vResult;\n vResult.xy = Xp_Y_XYZp.xy / Xp_Y_XYZp.z;\n float Le = 2.0 * log2(Xp_Y_XYZp.y) + 127.0;\n vResult.w = fract(Le);\n vResult.z = (Le - (floor(vResult.w*255.0))/255.0)/255.0;\n return vResult;\n}\nconst mat3 cLogLuvInverseM = mat3( 6.0014, -2.7008, -1.7996, -1.3320, 3.1029, -5.7721, 0.3008, -1.0882, 5.6268 );\nvec4 LogLuvToLinear( in vec4 value ) {\n float Le = value.z * 255.0 + value.w;\n vec3 Xp_Y_XYZp;\n Xp_Y_XYZp.y = exp2((Le - 127.0) / 2.0);\n Xp_Y_XYZp.z = Xp_Y_XYZp.y / value.y;\n Xp_Y_XYZp.x = value.x * Xp_Y_XYZp.z;\n vec3 vRGB = Xp_Y_XYZp.rgb * cLogLuvInverseM;\n return vec4( max(vRGB, 0.0), 1.0 );\n}\n";THREE.ShaderChunk.encodings_fragment=" gl_FragColor = linearToOutputTexel( gl_FragColor );\n";THREE.ShaderChunk.envmap_fragment="#ifdef USE_ENVMAP\n #if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\n vec3 cameraToVertex = normalize( vWorldPosition - cameraPosition );\n vec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n #ifdef ENVMAP_MODE_REFLECTION\n vec3 reflectVec = reflect( cameraToVertex, worldNormal );\n #else\n vec3 reflectVec = refract( cameraToVertex, worldNormal, refractionRatio );\n #endif\n #else\n vec3 reflectVec = vReflect;\n #endif\n #ifdef DOUBLE_SIDED\n float flipNormal = ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n #else\n float flipNormal = 1.0;\n #endif\n #ifdef ENVMAP_TYPE_CUBE\n vec4 envColor = textureCube( envMap, flipNormal * vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\n #elif defined( ENVMAP_TYPE_EQUIREC )\n vec2 sampleUV;\n sampleUV.y = saturate( flipNormal * reflectVec.y * 0.5 + 0.5 );\n sampleUV.x = atan( flipNormal * reflectVec.z, flipNormal * reflectVec.x ) * RECIPROCAL_PI2 + 0.5;\n vec4 envColor = texture2D( envMap, sampleUV );\n #elif defined( ENVMAP_TYPE_SPHERE )\n vec3 reflectView = flipNormal * normalize((viewMatrix * vec4( reflectVec, 0.0 )).xyz + vec3(0.0,0.0,1.0));\n vec4 envColor = texture2D( envMap, reflectView.xy * 0.5 + 0.5 );\n #endif\n envColor = envMapTexelToLinear( envColor );\n #ifdef ENVMAP_BLENDING_MULTIPLY\n outgoingLight = mix( outgoingLight, outgoingLight * envColor.xyz, specularStrength * reflectivity );\n #elif defined( ENVMAP_BLENDING_MIX )\n outgoingLight = mix( outgoingLight, envColor.xyz, specularStrength * reflectivity );\n #elif defined( ENVMAP_BLENDING_ADD )\n outgoingLight += envColor.xyz * specularStrength * reflectivity;\n #endif\n#endif\n";THREE.ShaderChunk.envmap_pars_fragment="#if defined( USE_ENVMAP ) || defined( STANDARD )\n uniform float reflectivity;\n uniform float envMapIntenstiy;\n#endif\n#ifdef USE_ENVMAP\n #ifdef ENVMAP_TYPE_CUBE\n uniform samplerCube envMap;\n #else\n uniform sampler2D envMap;\n #endif\n uniform float flipEnvMap;\n #if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) || defined( STANDARD )\n uniform float refractionRatio;\n #else\n varying vec3 vReflect;\n #endif\n#endif\n";THREE.ShaderChunk.envmap_pars_vertex="#if defined( USE_ENVMAP ) && ! defined( USE_BUMPMAP ) && ! defined( USE_NORMALMAP ) && ! defined( PHONG ) && ! defined( STANDARD )\n varying vec3 vReflect;\n uniform float refractionRatio;\n#endif\n";THREE.ShaderChunk.envmap_vertex="#if defined( USE_ENVMAP ) && ! defined( USE_BUMPMAP ) && ! defined( USE_NORMALMAP ) && ! defined( PHONG ) && ! defined( STANDARD )\n vec3 cameraToVertex = normalize( worldPosition.xyz - cameraPosition );\n vec3 worldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n #ifdef ENVMAP_MODE_REFLECTION\n vReflect = reflect( cameraToVertex, worldNormal );\n #else\n vReflect = refract( cameraToVertex, worldNormal, refractionRatio );\n #endif\n#endif\n";THREE.ShaderChunk.fog_fragment="#ifdef USE_FOG\n #ifdef USE_LOGDEPTHBUF_EXT\n float depth = gl_FragDepthEXT / gl_FragCoord.w;\n #else\n float depth = gl_FragCoord.z / gl_FragCoord.w;\n #endif\n #ifdef FOG_EXP2\n float fogFactor = whiteCompliment( exp2( - fogDensity * fogDensity * depth * depth * LOG2 ) );\n #else\n float fogFactor = smoothstep( fogNear, fogFar, depth );\n #endif\n gl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );\n#endif\n";THREE.ShaderChunk.fog_pars_fragment="#ifdef USE_FOG\n uniform vec3 fogColor;\n #ifdef FOG_EXP2\n uniform float fogDensity;\n #else\n uniform float fogNear;\n uniform float fogFar;\n #endif\n#endif";THREE.ShaderChunk.lightmap_fragment="#ifdef USE_LIGHTMAP\n reflectedLight.indirectDiffuse += PI * texture2D( lightMap, vUv2 ).xyz * lightMapIntensity;\n#endif\n";THREE.ShaderChunk.lightmap_pars_fragment="#ifdef USE_LIGHTMAP\n uniform sampler2D lightMap;\n uniform float lightMapIntensity;\n#endif";THREE.ShaderChunk.lights_lambert_vertex="vec3 diffuse = vec3( 1.0 );\nGeometricContext geometry;\ngeometry.position = mvPosition.xyz;\ngeometry.normal = normalize( transformedNormal );\ngeometry.viewDir = normalize( -mvPosition.xyz );\nGeometricContext backGeometry;\nbackGeometry.position = geometry.position;\nbackGeometry.normal = -geometry.normal;\nbackGeometry.viewDir = geometry.viewDir;\nvLightFront = vec3( 0.0 );\n#ifdef DOUBLE_SIDED\n vLightBack = vec3( 0.0 );\n#endif\nIncidentLight directLight;\nfloat dotNL;\nvec3 directLightColor_Diffuse;\n#if NUM_POINT_LIGHTS > 0\n for ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n directLight = getPointDirectLightIrradiance( pointLights[ i ], geometry );\n dotNL = dot( geometry.normal, directLight.direction );\n directLightColor_Diffuse = PI * directLight.color;\n vLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n #ifdef DOUBLE_SIDED\n vLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n #endif\n }\n#endif\n#if NUM_SPOT_LIGHTS > 0\n for ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n directLight = getSpotDirectLightIrradiance( spotLights[ i ], geometry );\n dotNL = dot( geometry.normal, directLight.direction );\n directLightColor_Diffuse = PI * directLight.color;\n vLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n #ifdef DOUBLE_SIDED\n vLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n #endif\n }\n#endif\n#if NUM_DIR_LIGHTS > 0\n for ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n directLight = getDirectionalDirectLightIrradiance( directionalLights[ i ], geometry );\n dotNL = dot( geometry.normal, directLight.direction );\n directLightColor_Diffuse = PI * directLight.color;\n vLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n #ifdef DOUBLE_SIDED\n vLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n #endif\n }\n#endif\n#if NUM_HEMI_LIGHTS > 0\n for ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n vLightFront += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\n #ifdef DOUBLE_SIDED\n vLightBack += getHemisphereLightIrradiance( hemisphereLights[ i ], backGeometry );\n #endif\n }\n#endif\n";THREE.ShaderChunk.lights_pars="uniform vec3 ambientLightColor;\nvec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) {\n vec3 irradiance = ambientLightColor;\n #ifndef PHYSICALLY_CORRECT_LIGHTS\n irradiance *= PI;\n #endif\n return irradiance;\n}\n#if NUM_DIR_LIGHTS > 0\n struct DirectionalLight {\n vec3 direction;\n vec3 color;\n int shadow;\n float shadowBias;\n float shadowRadius;\n vec2 shadowMapSize;\n };\n uniform DirectionalLight directionalLights[ NUM_DIR_LIGHTS ];\n IncidentLight getDirectionalDirectLightIrradiance( const in DirectionalLight directionalLight, const in GeometricContext geometry ) {\n IncidentLight directLight;\n directLight.color = directionalLight.color;\n directLight.direction = directionalLight.direction;\n directLight.visible = true;\n return directLight;\n }\n#endif\n#if NUM_POINT_LIGHTS > 0\n struct PointLight {\n vec3 position;\n vec3 color;\n float distance;\n float decay;\n int shadow;\n float shadowBias;\n float shadowRadius;\n vec2 shadowMapSize;\n };\n uniform PointLight pointLights[ NUM_POINT_LIGHTS ];\n IncidentLight getPointDirectLightIrradiance( const in PointLight pointLight, const in GeometricContext geometry ) {\n IncidentLight directLight;\n vec3 lVector = pointLight.position - geometry.position;\n directLight.direction = normalize( lVector );\n float lightDistance = length( lVector );\n if ( testLightInRange( lightDistance, pointLight.distance ) ) {\n directLight.color = pointLight.color;\n directLight.color *= punctualLightIntensityToIrradianceFactor( lightDistance, pointLight.distance, pointLight.decay );\n directLight.visible = true;\n } else {\n directLight.color = vec3( 0.0 );\n directLight.visible = false;\n }\n return directLight;\n }\n#endif\n#if NUM_SPOT_LIGHTS > 0\n struct SpotLight {\n vec3 position;\n vec3 direction;\n vec3 color;\n float distance;\n float decay;\n float coneCos;\n float penumbraCos;\n int shadow;\n float shadowBias;\n float shadowRadius;\n vec2 shadowMapSize;\n };\n uniform SpotLight spotLights[ NUM_SPOT_LIGHTS ];\n IncidentLight getSpotDirectLightIrradiance( const in SpotLight spotLight, const in GeometricContext geometry ) {\n IncidentLight directLight;\n vec3 lVector = spotLight.position - geometry.position;\n directLight.direction = normalize( lVector );\n float lightDistance = length( lVector );\n float angleCos = dot( directLight.direction, spotLight.direction );\n if ( all( bvec2( angleCos > spotLight.coneCos, testLightInRange( lightDistance, spotLight.distance ) ) ) ) {\n float spotEffect = smoothstep( spotLight.coneCos, spotLight.penumbraCos, angleCos );\n directLight.color = spotLight.color;\n directLight.color *= spotEffect * punctualLightIntensityToIrradianceFactor( lightDistance, spotLight.distance, spotLight.decay );\n directLight.visible = true;\n } else {\n directLight.color = vec3( 0.0 );\n directLight.visible = false;\n }\n return directLight;\n }\n#endif\n#if NUM_HEMI_LIGHTS > 0\n struct HemisphereLight {\n vec3 direction;\n vec3 skyColor;\n vec3 groundColor;\n };\n uniform HemisphereLight hemisphereLights[ NUM_HEMI_LIGHTS ];\n vec3 getHemisphereLightIrradiance( const in HemisphereLight hemiLight, const in GeometricContext geometry ) {\n float dotNL = dot( geometry.normal, hemiLight.direction );\n float hemiDiffuseWeight = 0.5 * dotNL + 0.5;\n vec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight );\n #ifndef PHYSICALLY_CORRECT_LIGHTS\n irradiance *= PI;\n #endif\n return irradiance;\n }\n#endif\n#if defined( USE_ENVMAP ) && defined( STANDARD )\n vec3 getLightProbeIndirectIrradiance( const in GeometricContext geometry, const in int maxMIPLevel ) {\n #ifdef DOUBLE_SIDED\n float flipNormal = ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n #else\n float flipNormal = 1.0;\n #endif\n vec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );\n #ifdef ENVMAP_TYPE_CUBE\n vec3 queryVec = flipNormal * vec3( flipEnvMap * worldNormal.x, worldNormal.yz );\n #ifdef TEXTURE_LOD_EXT\n vec4 envMapColor = textureCubeLodEXT( envMap, queryVec, float( maxMIPLevel ) );\n #else\n vec4 envMapColor = textureCube( envMap, queryVec, float( maxMIPLevel ) );\n #endif\n #elif defined( ENVMAP_TYPE_CUBE_UV )\n vec3 queryVec = flipNormal * vec3( flipEnvMap * worldNormal.x, worldNormal.yz );\n vec4 envMapColor = textureCubeUV( queryVec, 1.0 );\n #else\n vec4 envMapColor = vec4( 0.0 );\n #endif\n envMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n return PI * envMapColor.rgb * envMapIntensity;\n }\n float getSpecularMIPLevel( const in float blinnShininessExponent, const in int maxMIPLevel ) {\n float maxMIPLevelScalar = float( maxMIPLevel );\n float desiredMIPLevel = maxMIPLevelScalar - 0.79248 - 0.5 * log2( pow2( blinnShininessExponent ) + 1.0 );\n return clamp( desiredMIPLevel, 0.0, maxMIPLevelScalar );\n }\n vec3 getLightProbeIndirectRadiance( const in GeometricContext geometry, const in float blinnShininessExponent, const in int maxMIPLevel ) {\n #ifdef ENVMAP_MODE_REFLECTION\n vec3 reflectVec = reflect( -geometry.viewDir, geometry.normal );\n #else\n vec3 reflectVec = refract( -geometry.viewDir, geometry.normal, refractionRatio );\n #endif\n #ifdef DOUBLE_SIDED\n float flipNormal = ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n #else\n float flipNormal = 1.0;\n #endif\n reflectVec = inverseTransformDirection( reflectVec, viewMatrix );\n float specularMIPLevel = getSpecularMIPLevel( blinnShininessExponent, maxMIPLevel );\n #ifdef ENVMAP_TYPE_CUBE\n vec3 queryReflectVec = flipNormal * vec3( flipEnvMap * reflectVec.x, reflectVec.yz );\n #ifdef TEXTURE_LOD_EXT\n vec4 envMapColor = textureCubeLodEXT( envMap, queryReflectVec, specularMIPLevel );\n #else\n vec4 envMapColor = textureCube( envMap, queryReflectVec, specularMIPLevel );\n #endif\n #elif defined( ENVMAP_TYPE_CUBE_UV )\n vec3 queryReflectVec = flipNormal * vec3( flipEnvMap * reflectVec.x, reflectVec.yz );\n vec4 envMapColor = textureCubeUV(queryReflectVec, BlinnExponentToGGXRoughness(blinnShininessExponent));\n #elif defined( ENVMAP_TYPE_EQUIREC )\n vec2 sampleUV;\n sampleUV.y = saturate( flipNormal * reflectVec.y * 0.5 + 0.5 );\n sampleUV.x = atan( flipNormal * reflectVec.z, flipNormal * reflectVec.x ) * RECIPROCAL_PI2 + 0.5;\n #ifdef TEXTURE_LOD_EXT\n vec4 envMapColor = texture2DLodEXT( envMap, sampleUV, specularMIPLevel );\n #else\n vec4 envMapColor = texture2D( envMap, sampleUV, specularMIPLevel );\n #endif\n #elif defined( ENVMAP_TYPE_SPHERE )\n vec3 reflectView = flipNormal * normalize((viewMatrix * vec4( reflectVec, 0.0 )).xyz + vec3(0.0,0.0,1.0));\n #ifdef TEXTURE_LOD_EXT\n vec4 envMapColor = texture2DLodEXT( envMap, reflectView.xy * 0.5 + 0.5, specularMIPLevel );\n #else\n vec4 envMapColor = texture2D( envMap, reflectView.xy * 0.5 + 0.5, specularMIPLevel );\n #endif\n #endif\n envMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n return envMapColor.rgb * envMapIntensity;\n }\n#endif\n";THREE.ShaderChunk.lights_phong_fragment="BlinnPhongMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;\nmaterial.specularColor = specular;\nmaterial.specularShininess = shininess;\nmaterial.specularStrength = specularStrength;\n";THREE.ShaderChunk.lights_phong_pars_fragment="#ifdef USE_ENVMAP\n varying vec3 vWorldPosition;\n#endif\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n varying vec3 vNormal;\n#endif\nstruct BlinnPhongMaterial {\n vec3 diffuseColor;\n vec3 specularColor;\n float specularShininess;\n float specularStrength;\n};\nvoid RE_Direct_BlinnPhong( const in IncidentLight directLight, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n float dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n vec3 irradiance = dotNL * directLight.color;\n #ifndef PHYSICALLY_CORRECT_LIGHTS\n irradiance *= PI;\n #endif\n reflectedLight.directDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n reflectedLight.directSpecular += irradiance * BRDF_Specular_BlinnPhong( directLight, geometry, material.specularColor, material.specularShininess ) * material.specularStrength;\n}\nvoid RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n reflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\n#define RE_Direct RE_Direct_BlinnPhong\n#define RE_IndirectDiffuse RE_IndirectDiffuse_BlinnPhong\n#define Material_LightProbeLOD( material ) (0)\n";THREE.ShaderChunk.lights_phong_pars_vertex="#ifdef USE_ENVMAP\n varying vec3 vWorldPosition;\n#endif\n";THREE.ShaderChunk.lights_phong_vertex="#ifdef USE_ENVMAP\n vWorldPosition = worldPosition.xyz;\n#endif\n";THREE.ShaderChunk.lights_standard_fragment="StandardMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor );\nmaterial.specularRoughness = clamp( roughnessFactor, 0.04, 1.0 );\nmaterial.specularColor = mix( vec3( 0.04 ), diffuseColor.rgb, metalnessFactor );\n";THREE.ShaderChunk.lights_standard_pars_fragment="struct StandardMaterial {\n vec3 diffuseColor;\n float specularRoughness;\n vec3 specularColor;\n};\nvoid RE_Direct_Standard( const in IncidentLight directLight, const in GeometricContext geometry, const in StandardMaterial material, inout ReflectedLight reflectedLight ) {\n float dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n vec3 irradiance = dotNL * directLight.color;\n #ifndef PHYSICALLY_CORRECT_LIGHTS\n irradiance *= PI;\n #endif\n reflectedLight.directDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n reflectedLight.directSpecular += irradiance * BRDF_Specular_GGX( directLight, geometry, material.specularColor, material.specularRoughness );\n}\nvoid RE_IndirectDiffuse_Standard( const in vec3 irradiance, const in GeometricContext geometry, const in StandardMaterial material, inout ReflectedLight reflectedLight ) {\n reflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectSpecular_Standard( const in vec3 radiance, const in GeometricContext geometry, const in StandardMaterial material, inout ReflectedLight reflectedLight ) {\n reflectedLight.indirectSpecular += radiance * BRDF_Specular_GGX_Environment( geometry, material.specularColor, material.specularRoughness );\n}\n#define RE_Direct RE_Direct_Standard\n#define RE_IndirectDiffuse RE_IndirectDiffuse_Standard\n#define RE_IndirectSpecular RE_IndirectSpecular_Standard\n#define Material_BlinnShininessExponent( material ) GGXRoughnessToBlinnExponent( material.specularRoughness )\nfloat computeSpecularOcclusion( const in float dotNV, const in float ambientOcclusion, const in float roughness ) {\n return saturate( pow( dotNV + ambientOcclusion, exp2( - 16.0 * roughness - 1.0 ) ) - 1.0 + ambientOcclusion );\n}\n"; + hourMinSec: function(t) { + var hour, min, sec; + if (t == null) { + t = 0; + } + hour = (t / 3600) | 0; + if (hour < 10) { + hour = "0" + hour; + } + t %= 3600; + min = (t / 60) | 0; + if (min < 10) { + min = "0" + min; + } + sec = (t % 60 | 0).toFixed(); + if (sec < 10) { + sec = "0" + sec; + } + return "" + hour + ":" + min + ":" + sec; + }, -THREE.ShaderChunk.lights_template="\nGeometricContext geometry;\ngeometry.position = - vViewPosition;\ngeometry.normal = normal;\ngeometry.viewDir = normalize( vViewPosition );\nIncidentLight directLight;\n#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct )\n PointLight pointLight;\n for ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n pointLight = pointLights[ i ];\n directLight = getPointDirectLightIrradiance( pointLight, geometry );\n #ifdef USE_SHADOWMAP\n directLight.color *= all( bvec2( pointLight.shadow, directLight.visible ) ) ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ] ) : 1.0;\n #endif\n RE_Direct( directLight, geometry, material, reflectedLight );\n }\n#endif\n#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct )\n SpotLight spotLight;\n for ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n spotLight = spotLights[ i ];\n directLight = getSpotDirectLightIrradiance( spotLight, geometry );\n #ifdef USE_SHADOWMAP\n directLight.color *= all( bvec2( spotLight.shadow, directLight.visible ) ) ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n #endif\n RE_Direct( directLight, geometry, material, reflectedLight );\n }\n#endif\n#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct )\n DirectionalLight directionalLight;\n for ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n directionalLight = directionalLights[ i ];\n directLight = getDirectionalDirectLightIrradiance( directionalLight, geometry );\n #ifdef USE_SHADOWMAP\n directLight.color *= all( bvec2( directionalLight.shadow, directLight.visible ) ) ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n #endif\n RE_Direct( directLight, geometry, material, reflectedLight );\n }\n#endif\n#if defined( RE_IndirectDiffuse )\n vec3 irradiance = getAmbientLightIrradiance( ambientLightColor );\n #ifdef USE_LIGHTMAP\n vec3 lightMapIrradiance = texture2D( lightMap, vUv2 ).xyz * lightMapIntensity;\n #ifndef PHYSICALLY_CORRECT_LIGHTS\n lightMapIrradiance *= PI;\n #endif\n irradiance += lightMapIrradiance;\n #endif\n #if ( NUM_HEMI_LIGHTS > 0 )\n for ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n irradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\n }\n #endif\n #if defined( USE_ENVMAP ) && defined( STANDARD ) && defined( ENVMAP_TYPE_CUBE_UV )\n irradiance += getLightProbeIndirectIrradiance( geometry, 8 );\n #endif\n RE_IndirectDiffuse( irradiance, geometry, material, reflectedLight );\n#endif\n#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )\n vec3 radiance = getLightProbeIndirectRadiance( geometry, Material_BlinnShininessExponent( material ), 8 );\n RE_IndirectSpecular( radiance, geometry, material, reflectedLight );\n#endif\n";THREE.ShaderChunk.logdepthbuf_fragment="#if defined(USE_LOGDEPTHBUF) && defined(USE_LOGDEPTHBUF_EXT)\n gl_FragDepthEXT = log2(vFragDepth) * logDepthBufFC * 0.5;\n#endif";THREE.ShaderChunk.logdepthbuf_pars_fragment="#ifdef USE_LOGDEPTHBUF\n uniform float logDepthBufFC;\n #ifdef USE_LOGDEPTHBUF_EXT\n varying float vFragDepth;\n #endif\n#endif\n";THREE.ShaderChunk.logdepthbuf_pars_vertex="#ifdef USE_LOGDEPTHBUF\n #ifdef USE_LOGDEPTHBUF_EXT\n varying float vFragDepth;\n #endif\n uniform float logDepthBufFC;\n#endif";THREE.ShaderChunk.logdepthbuf_vertex="#ifdef USE_LOGDEPTHBUF\n gl_Position.z = log2(max( EPSILON, gl_Position.w + 1.0 )) * logDepthBufFC;\n #ifdef USE_LOGDEPTHBUF_EXT\n vFragDepth = 1.0 + gl_Position.w;\n #else\n gl_Position.z = (gl_Position.z - 1.0) * gl_Position.w;\n #endif\n#endif\n";THREE.ShaderChunk.map_fragment="#ifdef USE_MAP\n vec4 texelColor = texture2D( map, vUv );\n texelColor = mapTexelToLinear( texelColor );\n diffuseColor *= texelColor;\n#endif\n";THREE.ShaderChunk.map_pars_fragment="#ifdef USE_MAP\n uniform sampler2D map;\n#endif\n";THREE.ShaderChunk.map_particle_fragment="#ifdef USE_MAP\n vec4 mapTexel = texture2D( map, vec2( gl_PointCoord.x, 1.0 - gl_PointCoord.y ) * offsetRepeat.zw + offsetRepeat.xy );\n diffuseColor *= mapTexelToLinear( mapTexel );\n#endif\n";THREE.ShaderChunk.map_particle_pars_fragment="#ifdef USE_MAP\n uniform vec4 offsetRepeat;\n uniform sampler2D map;\n#endif\n";THREE.ShaderChunk.metalnessmap_fragment="float metalnessFactor = metalness;\n#ifdef USE_METALNESSMAP\n vec4 texelMetalness = texture2D( metalnessMap, vUv );\n metalnessFactor *= texelMetalness.r;\n#endif\n";THREE.ShaderChunk.metalnessmap_pars_fragment="#ifdef USE_METALNESSMAP\n uniform sampler2D metalnessMap;\n#endif";THREE.ShaderChunk.morphnormal_vertex="#ifdef USE_MORPHNORMALS\n objectNormal += ( morphNormal0 - normal ) * morphTargetInfluences[ 0 ];\n objectNormal += ( morphNormal1 - normal ) * morphTargetInfluences[ 1 ];\n objectNormal += ( morphNormal2 - normal ) * morphTargetInfluences[ 2 ];\n objectNormal += ( morphNormal3 - normal ) * morphTargetInfluences[ 3 ];\n#endif\n";THREE.ShaderChunk.morphtarget_pars_vertex="#ifdef USE_MORPHTARGETS\n #ifndef USE_MORPHNORMALS\n uniform float morphTargetInfluences[ 8 ];\n #else\n uniform float morphTargetInfluences[ 4 ];\n #endif\n#endif";THREE.ShaderChunk.morphtarget_vertex="#ifdef USE_MORPHTARGETS\n transformed += ( morphTarget0 - position ) * morphTargetInfluences[ 0 ];\n transformed += ( morphTarget1 - position ) * morphTargetInfluences[ 1 ];\n transformed += ( morphTarget2 - position ) * morphTargetInfluences[ 2 ];\n transformed += ( morphTarget3 - position ) * morphTargetInfluences[ 3 ];\n #ifndef USE_MORPHNORMALS\n transformed += ( morphTarget4 - position ) * morphTargetInfluences[ 4 ];\n transformed += ( morphTarget5 - position ) * morphTargetInfluences[ 5 ];\n transformed += ( morphTarget6 - position ) * morphTargetInfluences[ 6 ];\n transformed += ( morphTarget7 - position ) * morphTargetInfluences[ 7 ];\n #endif\n#endif\n";THREE.ShaderChunk.normal_fragment="#ifdef FLAT_SHADED\n vec3 fdx = vec3( dFdx( vViewPosition.x ), dFdx( vViewPosition.y ), dFdx( vViewPosition.z ) );\n vec3 fdy = vec3( dFdy( vViewPosition.x ), dFdy( vViewPosition.y ), dFdy( vViewPosition.z ) );\n vec3 normal = normalize( cross( fdx, fdy ) );\n#else\n vec3 normal = normalize( vNormal );\n #ifdef DOUBLE_SIDED\n normal = normal * ( -1.0 + 2.0 * float( gl_FrontFacing ) );\n #endif\n#endif\n#ifdef USE_NORMALMAP\n normal = perturbNormal2Arb( -vViewPosition, normal );\n#elif defined( USE_BUMPMAP )\n normal = perturbNormalArb( -vViewPosition, normal, dHdxy_fwd() );\n#endif\n";THREE.ShaderChunk.normalmap_pars_fragment="#ifdef USE_NORMALMAP\n uniform sampler2D normalMap;\n uniform vec2 normalScale;\n vec3 perturbNormal2Arb( vec3 eye_pos, vec3 surf_norm ) {\n vec3 q0 = dFdx( eye_pos.xyz );\n vec3 q1 = dFdy( eye_pos.xyz );\n vec2 st0 = dFdx( vUv.st );\n vec2 st1 = dFdy( vUv.st );\n vec3 S = normalize( q0 * st1.t - q1 * st0.t );\n vec3 T = normalize( -q0 * st1.s + q1 * st0.s );\n vec3 N = normalize( surf_norm );\n vec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n mapN.xy = normalScale * mapN.xy;\n mat3 tsn = mat3( S, T, N );\n return normalize( tsn * mapN );\n }\n#endif\n";THREE.ShaderChunk.premultiplied_alpha_fragment="#ifdef PREMULTIPLIED_ALPHA\n gl_FragColor.rgb *= gl_FragColor.a;\n#endif\n";THREE.ShaderChunk.project_vertex="#ifdef USE_SKINNING\n vec4 mvPosition = modelViewMatrix * skinned;\n#else\n vec4 mvPosition = modelViewMatrix * vec4( transformed, 1.0 );\n#endif\ngl_Position = projectionMatrix * mvPosition;\n";THREE.ShaderChunk.roughnessmap_fragment="float roughnessFactor = roughness;\n#ifdef USE_ROUGHNESSMAP\n vec4 texelRoughness = texture2D( roughnessMap, vUv );\n roughnessFactor *= texelRoughness.r;\n#endif\n";THREE.ShaderChunk.roughnessmap_pars_fragment="#ifdef USE_ROUGHNESSMAP\n uniform sampler2D roughnessMap;\n#endif";THREE.ShaderChunk.shadowmap_pars_fragment="#ifdef USE_SHADOWMAP\n #if NUM_DIR_LIGHTS > 0\n uniform sampler2D directionalShadowMap[ NUM_DIR_LIGHTS ];\n varying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHTS ];\n #endif\n #if NUM_SPOT_LIGHTS > 0\n uniform sampler2D spotShadowMap[ NUM_SPOT_LIGHTS ];\n varying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHTS ];\n #endif\n #if NUM_POINT_LIGHTS > 0\n uniform sampler2D pointShadowMap[ NUM_POINT_LIGHTS ];\n varying vec4 vPointShadowCoord[ NUM_POINT_LIGHTS ];\n #endif\n float unpackDepth( const in vec4 rgba_depth ) {\n const vec4 bit_shift = vec4( 1.0 / ( 256.0 * 256.0 * 256.0 ), 1.0 / ( 256.0 * 256.0 ), 1.0 / 256.0, 1.0 );\n return dot( rgba_depth, bit_shift );\n }\n float texture2DCompare( sampler2D depths, vec2 uv, float compare ) {\n return step( compare, unpackDepth( texture2D( depths, uv ) ) );\n }\n float texture2DShadowLerp( sampler2D depths, vec2 size, vec2 uv, float compare ) {\n const vec2 offset = vec2( 0.0, 1.0 );\n vec2 texelSize = vec2( 1.0 ) / size;\n vec2 centroidUV = floor( uv * size + 0.5 ) / size;\n float lb = texture2DCompare( depths, centroidUV + texelSize * offset.xx, compare );\n float lt = texture2DCompare( depths, centroidUV + texelSize * offset.xy, compare );\n float rb = texture2DCompare( depths, centroidUV + texelSize * offset.yx, compare );\n float rt = texture2DCompare( depths, centroidUV + texelSize * offset.yy, compare );\n vec2 f = fract( uv * size + 0.5 );\n float a = mix( lb, lt, f.y );\n float b = mix( rb, rt, f.y );\n float c = mix( a, b, f.x );\n return c;\n }\n float getShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord ) {\n shadowCoord.xyz /= shadowCoord.w;\n shadowCoord.z += shadowBias;\n bvec4 inFrustumVec = bvec4 ( shadowCoord.x >= 0.0, shadowCoord.x <= 1.0, shadowCoord.y >= 0.0, shadowCoord.y <= 1.0 );\n bool inFrustum = all( inFrustumVec );\n bvec2 frustumTestVec = bvec2( inFrustum, shadowCoord.z <= 1.0 );\n bool frustumTest = all( frustumTestVec );\n if ( frustumTest ) {\n #if defined( SHADOWMAP_TYPE_PCF )\n vec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n float dx0 = - texelSize.x * shadowRadius;\n float dy0 = - texelSize.y * shadowRadius;\n float dx1 = + texelSize.x * shadowRadius;\n float dy1 = + texelSize.y * shadowRadius;\n return (\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\n ) * ( 1.0 / 9.0 );\n #elif defined( SHADOWMAP_TYPE_PCF_SOFT )\n vec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n float dx0 = - texelSize.x * shadowRadius;\n float dy0 = - texelSize.y * shadowRadius;\n float dx1 = + texelSize.x * shadowRadius;\n float dy1 = + texelSize.y * shadowRadius;\n return (\n texture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\n texture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\n texture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\n texture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\n texture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy, shadowCoord.z ) +\n texture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\n texture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\n texture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\n texture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\n ) * ( 1.0 / 9.0 );\n #else\n return texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z );\n #endif\n }\n return 1.0;\n }\n vec2 cubeToUV( vec3 v, float texelSizeY ) {\n vec3 absV = abs( v );\n float scaleToCube = 1.0 / max( absV.x, max( absV.y, absV.z ) );\n absV *= scaleToCube;\n v *= scaleToCube * ( 1.0 - 2.0 * texelSizeY );\n vec2 planar = v.xy;\n float almostATexel = 1.5 * texelSizeY;\n float almostOne = 1.0 - almostATexel;\n if ( absV.z >= almostOne ) {\n if ( v.z > 0.0 )\n planar.x = 4.0 - v.x;\n } else if ( absV.x >= almostOne ) {\n float signX = sign( v.x );\n planar.x = v.z * signX + 2.0 * signX;\n } else if ( absV.y >= almostOne ) {\n float signY = sign( v.y );\n planar.x = v.x + 2.0 * signY + 2.0;\n planar.y = v.z * signY - 2.0;\n }\n return vec2( 0.125, 0.25 ) * planar + vec2( 0.375, 0.75 );\n }\n float getPointShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord ) {\n vec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) );\n vec3 lightToPosition = shadowCoord.xyz;\n vec3 bd3D = normalize( lightToPosition );\n float dp = ( length( lightToPosition ) - shadowBias ) / 1000.0;\n #if defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_PCF_SOFT )\n vec2 offset = vec2( - 1, 1 ) * shadowRadius * texelSize.y;\n return (\n texture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyy, texelSize.y ), dp ) +\n texture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyy, texelSize.y ), dp ) +\n texture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyx, texelSize.y ), dp ) +\n texture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyx, texelSize.y ), dp ) +\n texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ) +\n texture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxy, texelSize.y ), dp ) +\n texture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxy, texelSize.y ), dp ) +\n texture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxx, texelSize.y ), dp ) +\n texture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxx, texelSize.y ), dp )\n ) * ( 1.0 / 9.0 );\n #else\n return texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp );\n #endif\n }\n#endif\n";THREE.ShaderChunk.shadowmap_pars_vertex="#ifdef USE_SHADOWMAP\n #if NUM_DIR_LIGHTS > 0\n uniform mat4 directionalShadowMatrix[ NUM_DIR_LIGHTS ];\n varying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHTS ];\n #endif\n #if NUM_SPOT_LIGHTS > 0\n uniform mat4 spotShadowMatrix[ NUM_SPOT_LIGHTS ];\n varying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHTS ];\n #endif\n #if NUM_POINT_LIGHTS > 0\n uniform mat4 pointShadowMatrix[ NUM_POINT_LIGHTS ];\n varying vec4 vPointShadowCoord[ NUM_POINT_LIGHTS ];\n #endif\n#endif\n";THREE.ShaderChunk.shadowmap_vertex="#ifdef USE_SHADOWMAP\n #if NUM_DIR_LIGHTS > 0\n for ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n vDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * worldPosition;\n }\n #endif\n #if NUM_SPOT_LIGHTS > 0\n for ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n vSpotShadowCoord[ i ] = spotShadowMatrix[ i ] * worldPosition;\n }\n #endif\n #if NUM_POINT_LIGHTS > 0\n for ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n vPointShadowCoord[ i ] = pointShadowMatrix[ i ] * worldPosition;\n }\n #endif\n#endif\n";THREE.ShaderChunk.shadowmask_pars_fragment="float getShadowMask() {\n float shadow = 1.0;\n #ifdef USE_SHADOWMAP\n #if NUM_DIR_LIGHTS > 0\n DirectionalLight directionalLight;\n for ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n directionalLight = directionalLights[ i ];\n shadow *= bool( directionalLight.shadow ) ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n }\n #endif\n #if NUM_SPOT_LIGHTS > 0\n SpotLight spotLight;\n for ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n spotLight = spotLights[ i ];\n shadow *= bool( spotLight.shadow ) ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n }\n #endif\n #if NUM_POINT_LIGHTS > 0\n PointLight pointLight;\n for ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n pointLight = pointLights[ i ];\n shadow *= bool( pointLight.shadow ) ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ] ) : 1.0;\n }\n #endif\n #endif\n return shadow;\n}\n";THREE.ShaderChunk.skinbase_vertex="#ifdef USE_SKINNING\n mat4 boneMatX = getBoneMatrix( skinIndex.x );\n mat4 boneMatY = getBoneMatrix( skinIndex.y );\n mat4 boneMatZ = getBoneMatrix( skinIndex.z );\n mat4 boneMatW = getBoneMatrix( skinIndex.w );\n#endif";THREE.ShaderChunk.skinning_pars_vertex="#ifdef USE_SKINNING\n uniform mat4 bindMatrix;\n uniform mat4 bindMatrixInverse;\n #ifdef BONE_TEXTURE\n uniform sampler2D boneTexture;\n uniform int boneTextureWidth;\n uniform int boneTextureHeight;\n mat4 getBoneMatrix( const in float i ) {\n float j = i * 4.0;\n float x = mod( j, float( boneTextureWidth ) );\n float y = floor( j / float( boneTextureWidth ) );\n float dx = 1.0 / float( boneTextureWidth );\n float dy = 1.0 / float( boneTextureHeight );\n y = dy * ( y + 0.5 );\n vec4 v1 = texture2D( boneTexture, vec2( dx * ( x + 0.5 ), y ) );\n vec4 v2 = texture2D( boneTexture, vec2( dx * ( x + 1.5 ), y ) );\n vec4 v3 = texture2D( boneTexture, vec2( dx * ( x + 2.5 ), y ) );\n vec4 v4 = texture2D( boneTexture, vec2( dx * ( x + 3.5 ), y ) );\n mat4 bone = mat4( v1, v2, v3, v4 );\n return bone;\n }\n #else\n uniform mat4 boneGlobalMatrices[ MAX_BONES ];\n mat4 getBoneMatrix( const in float i ) {\n mat4 bone = boneGlobalMatrices[ int(i) ];\n return bone;\n }\n #endif\n#endif\n";THREE.ShaderChunk.skinning_vertex="#ifdef USE_SKINNING\n vec4 skinVertex = bindMatrix * vec4( transformed, 1.0 );\n vec4 skinned = vec4( 0.0 );\n skinned += boneMatX * skinVertex * skinWeight.x;\n skinned += boneMatY * skinVertex * skinWeight.y;\n skinned += boneMatZ * skinVertex * skinWeight.z;\n skinned += boneMatW * skinVertex * skinWeight.w;\n skinned = bindMatrixInverse * skinned;\n#endif\n";THREE.ShaderChunk.skinnormal_vertex="#ifdef USE_SKINNING\n mat4 skinMatrix = mat4( 0.0 );\n skinMatrix += skinWeight.x * boneMatX;\n skinMatrix += skinWeight.y * boneMatY;\n skinMatrix += skinWeight.z * boneMatZ;\n skinMatrix += skinWeight.w * boneMatW;\n skinMatrix = bindMatrixInverse * skinMatrix * bindMatrix;\n objectNormal = vec4( skinMatrix * vec4( objectNormal, 0.0 ) ).xyz;\n#endif\n";THREE.ShaderChunk.specularmap_fragment="float specularStrength;\n#ifdef USE_SPECULARMAP\n vec4 texelSpecular = texture2D( specularMap, vUv );\n specularStrength = texelSpecular.r;\n#else\n specularStrength = 1.0;\n#endif";THREE.ShaderChunk.specularmap_pars_fragment="#ifdef USE_SPECULARMAP\n uniform sampler2D specularMap;\n#endif";THREE.ShaderChunk.tonemapping_fragment="#if defined( TONE_MAPPING )\n gl_FragColor.rgb = toneMapping( gl_FragColor.rgb );\n#endif\n";THREE.ShaderChunk.tonemapping_pars_fragment="#define saturate(a) clamp( a, 0.0, 1.0 )\nuniform float toneMappingExposure;\nuniform float toneMappingWhitePoint;\nvec3 LinearToneMapping( vec3 color ) {\n return toneMappingExposure * color;\n}\nvec3 ReinhardToneMapping( vec3 color ) {\n color *= toneMappingExposure;\n return saturate( color / ( vec3( 1.0 ) + color ) );\n}\n#define Uncharted2Helper( x ) max( ( ( x * ( 0.15 * x + 0.10 * 0.50 ) + 0.20 * 0.02 ) / ( x * ( 0.15 * x + 0.50 ) + 0.20 * 0.30 ) ) - 0.02 / 0.30, vec3( 0.0 ) )\nvec3 Uncharted2ToneMapping( vec3 color ) {\n color *= toneMappingExposure;\n return saturate( Uncharted2Helper( color ) / Uncharted2Helper( vec3( toneMappingWhitePoint ) ) );\n}\nvec3 OptimizedCineonToneMapping( vec3 color ) {\n color *= toneMappingExposure;\n color = max( vec3( 0.0 ), color - 0.004 );\n return pow( ( color * ( 6.2 * color + 0.5 ) ) / ( color * ( 6.2 * color + 1.7 ) + 0.06 ), vec3( 2.2 ) );\n}\n";THREE.ShaderChunk.uv2_pars_fragment="#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n varying vec2 vUv2;\n#endif";THREE.ShaderChunk.uv2_pars_vertex="#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n attribute vec2 uv2;\n varying vec2 vUv2;\n#endif";THREE.ShaderChunk.uv2_vertex="#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n vUv2 = uv2;\n#endif";THREE.ShaderChunk.uv_pars_fragment="#if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP ) || defined( USE_ALPHAMAP ) || defined( USE_EMISSIVEMAP ) || defined( USE_ROUGHNESSMAP ) || defined( USE_METALNESSMAP )\n varying vec2 vUv;\n#endif";THREE.ShaderChunk.uv_pars_vertex="#if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP ) || defined( USE_ALPHAMAP ) || defined( USE_EMISSIVEMAP ) || defined( USE_ROUGHNESSMAP ) || defined( USE_METALNESSMAP )\n varying vec2 vUv;\n uniform vec4 offsetRepeat;\n#endif\n";THREE.ShaderChunk.uv_vertex="#if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP ) || defined( USE_ALPHAMAP ) || defined( USE_EMISSIVEMAP ) || defined( USE_ROUGHNESSMAP ) || defined( USE_METALNESSMAP )\n vUv = uv * offsetRepeat.zw + offsetRepeat.xy;\n#endif";THREE.ShaderChunk.worldpos_vertex="#if defined( USE_ENVMAP ) || defined( PHONG ) || defined( STANDARD ) || defined( LAMBERT ) || defined ( USE_SHADOWMAP )\n #ifdef USE_SKINNING\n vec4 worldPosition = modelMatrix * skinned;\n #else\n vec4 worldPosition = modelMatrix * vec4( transformed, 1.0 );\n #endif\n#endif\n";THREE.UniformsUtils={merge:function(a){for(var b={},c=0;c= 365 * 24 * 3600) { + result += (t / (365 * 24 * 3600) | 0) + " years "; + t %= 365 * 24 * 3600; + if (t < 24 * 3600) { + result += "0 days "; + } + } + if (t >= 24 * 3600) { + result += (t / (24 * 3600) | 0) + " days "; + } + t %= 24 * 3600; + return result + this.hourMinSec(t); + } +} +var DataFormatters = { + distanceString: function(value){ + return numeral(value).format('0,0.000 a') + "m" + }, -THREE.ShaderChunk.meshlambert_frag="uniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\nvarying vec3 vLightFront;\n#ifdef DOUBLE_SIDED\n varying vec3 vLightBack;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n vec4 diffuseColor = vec4( diffuse, opacity );\n ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n vec3 totalEmissiveRadiance = emissive;\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n reflectedLight.indirectDiffuse = getAmbientLightIrradiance( ambientLightColor );\n #include \n reflectedLight.indirectDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb );\n #ifdef DOUBLE_SIDED\n reflectedLight.directDiffuse = ( gl_FrontFacing ) ? vLightFront : vLightBack;\n #else\n reflectedLight.directDiffuse = vLightFront;\n #endif\n reflectedLight.directDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb ) * getShadowMask();\n #include \n vec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n #include \n gl_FragColor = vec4( outgoingLight, diffuseColor.a );\n #include \n #include \n #include \n #include \n}\n";THREE.ShaderChunk.meshlambert_vert="#define LAMBERT\nvarying vec3 vLightFront;\n#ifdef DOUBLE_SIDED\n varying vec3 vLightBack;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n}\n";THREE.ShaderChunk.meshphong_frag="#define PHONG\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform vec3 specular;\nuniform float shininess;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n vec4 diffuseColor = vec4( diffuse, opacity );\n ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n vec3 totalEmissiveRadiance = emissive;\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n vec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n #include \n gl_FragColor = vec4( outgoingLight, diffuseColor.a );\n #include \n #include \n #include \n #include \n}\n";THREE.ShaderChunk.meshphong_vert="#define PHONG\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n varying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n#ifndef FLAT_SHADED\n vNormal = normalize( transformedNormal );\n#endif\n #include \n #include \n #include \n #include \n #include \n #include \n vViewPosition = - mvPosition.xyz;\n #include \n #include \n #include \n #include \n}\n";THREE.ShaderChunk.meshstandard_frag="#define STANDARD\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float roughness;\nuniform float metalness;\nuniform float opacity;\nuniform float envMapIntensity;\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n varying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n vec4 diffuseColor = vec4( diffuse, opacity );\n ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n vec3 totalEmissiveRadiance = emissive;\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n vec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n gl_FragColor = vec4( outgoingLight, diffuseColor.a );\n #include \n #include \n #include \n #include \n}\n";THREE.ShaderChunk.meshstandard_vert="#define STANDARD\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n varying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n#ifndef FLAT_SHADED\n vNormal = normalize( transformedNormal );\n#endif\n #include \n #include \n #include \n #include \n #include \n #include \n vViewPosition = - mvPosition.xyz;\n #include \n #include \n #include \n}\n";THREE.ShaderChunk.normal_frag="uniform float opacity;\nvarying vec3 vNormal;\n#include \n#include \nvoid main() {\n gl_FragColor = vec4( 0.5 * normalize( vNormal ) + 0.5, opacity );\n #include \n}\n";THREE.ShaderChunk.normal_vert="varying vec3 vNormal;\n#include \n#include \n#include \nvoid main() {\n vNormal = normalize( normalMatrix * normal );\n #include \n #include \n #include \n #include \n}\n";THREE.ShaderChunk.points_frag="uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n vec3 outgoingLight = vec3( 0.0 );\n vec4 diffuseColor = vec4( diffuse, opacity );\n #include \n #include \n #include \n #include \n outgoingLight = diffuseColor.rgb;\n gl_FragColor = vec4( outgoingLight, diffuseColor.a );\n #include \n #include \n #include \n #include \n}\n";THREE.ShaderChunk.points_vert="uniform float size;\nuniform float scale;\n#include \n#include \n#include \n#include \nvoid main() {\n #include \n #include \n #include \n #ifdef USE_SIZEATTENUATION\n gl_PointSize = size * ( scale / - mvPosition.z );\n #else\n gl_PointSize = size;\n #endif\n #include \n #include \n #include \n}\n";THREE.ShaderLib={basic:{uniforms:THREE.UniformsUtils.merge([THREE.UniformsLib.common,THREE.UniformsLib.aomap,THREE.UniformsLib.fog]),vertexShader:THREE.ShaderChunk.meshbasic_vert,fragmentShader:THREE.ShaderChunk.meshbasic_frag},lambert:{uniforms:THREE.UniformsUtils.merge([THREE.UniformsLib.common,THREE.UniformsLib.aomap,THREE.UniformsLib.lightmap,THREE.UniformsLib.emissivemap,THREE.UniformsLib.fog,THREE.UniformsLib.lights,{emissive:{type:"c",value:new THREE.Color(0)}}]),vertexShader:THREE.ShaderChunk.meshlambert_vert,fragmentShader:THREE.ShaderChunk.meshlambert_frag},phong:{uniforms:THREE.UniformsUtils.merge([THREE.UniformsLib.common,THREE.UniformsLib.aomap,THREE.UniformsLib.lightmap,THREE.UniformsLib.emissivemap,THREE.UniformsLib.bumpmap,THREE.UniformsLib.normalmap,THREE.UniformsLib.displacementmap,THREE.UniformsLib.fog,THREE.UniformsLib.lights,{emissive:{type:"c",value:new THREE.Color(0)},specular:{type:"c",value:new THREE.Color(1118481)},shininess:{type:"f",value:30}}]),vertexShader:THREE.ShaderChunk.meshphong_vert,fragmentShader:THREE.ShaderChunk.meshphong_frag},standard:{uniforms:THREE.UniformsUtils.merge([THREE.UniformsLib.common,THREE.UniformsLib.aomap,THREE.UniformsLib.lightmap,THREE.UniformsLib.emissivemap,THREE.UniformsLib.bumpmap,THREE.UniformsLib.normalmap,THREE.UniformsLib.displacementmap,THREE.UniformsLib.roughnessmap,THREE.UniformsLib.metalnessmap,THREE.UniformsLib.fog,THREE.UniformsLib.lights,{emissive:{type:"c",value:new THREE.Color(0)},roughness:{type:"f",value:.5},metalness:{type:"f",value:0},envMapIntensity:{type:"f",value:1}}]),vertexShader:THREE.ShaderChunk.meshstandard_vert,fragmentShader:THREE.ShaderChunk.meshstandard_frag},points:{uniforms:THREE.UniformsUtils.merge([THREE.UniformsLib.points,THREE.UniformsLib.fog]),vertexShader:THREE.ShaderChunk.points_vert,fragmentShader:THREE.ShaderChunk.points_frag},dashed:{uniforms:THREE.UniformsUtils.merge([THREE.UniformsLib.common,THREE.UniformsLib.fog,{scale:{type:"f",value:1},dashSize:{type:"f",value:1},totalSize:{type:"f",value:2}}]),vertexShader:THREE.ShaderChunk.linedashed_vert,fragmentShader:THREE.ShaderChunk.linedashed_frag},depth:{uniforms:{mNear:{type:"f",value:1},mFar:{type:"f",value:2e3},opacity:{type:"f",value:1}},vertexShader:THREE.ShaderChunk.depth_vert,fragmentShader:THREE.ShaderChunk.depth_frag},normal:{uniforms:{opacity:{type:"f",value:1}},vertexShader:THREE.ShaderChunk.normal_vert,fragmentShader:THREE.ShaderChunk.normal_frag},cube:{uniforms:{tCube:{type:"t",value:null},tFlip:{type:"f",value:-1}},vertexShader:THREE.ShaderChunk.cube_vert,fragmentShader:THREE.ShaderChunk.cube_frag},equirect:{uniforms:{tEquirect:{type:"t",value:null},tFlip:{type:"f",value:-1}},vertexShader:THREE.ShaderChunk.equirect_vert,fragmentShader:THREE.ShaderChunk.equirect_frag},depthRGBA:{uniforms:{},vertexShader:THREE.ShaderChunk.depthRGBA_vert,fragmentShader:THREE.ShaderChunk.depthRGBA_frag},distanceRGBA:{uniforms:{lightPos:{type:"v3",value:new THREE.Vector3(0,0,0)}},vertexShader:THREE.ShaderChunk.distanceRGBA_vert,fragmentShader:THREE.ShaderChunk.distanceRGBA_frag}};THREE.WebGLRenderer=function(a){function b(a,b,c,d){!0===P&&(a*=d,b*=d,c*=d);K.clearColor(a,b,c,d)}function c(){K.init();K.scissor(qa.copy(ya).multiplyScalar(aa));K.viewport(ka.copy(la).multiplyScalar(aa));b(ba.r,ba.g,ba.b,ga)}function d(){ma=ha=null;na="";ra=-1;K.reset()}function e(a){a.preventDefault();d();c();U.clear()}function f(a){a=a.target;a.removeEventListener("dispose",f);a:{var b=U.get(a);if(a.image&&b.__image__webglTextureCube)r.deleteTexture(b.__image__webglTextureCube);else{if(void 0===b.__webglInit)break a;r.deleteTexture(b.__webglTexture)}U.delete(a)}ia.textures--}function g(a){a=a.target;a.removeEventListener("dispose",g);var b=U.get(a),c=U.get(a.texture);if(a&&void 0!==c.__webglTexture){r.deleteTexture(c.__webglTexture);if(a instanceof THREE.WebGLRenderTargetCube)for(c=0;6>c;c++)r.deleteFramebuffer(b.__webglFramebuffer[c]),r.deleteRenderbuffer(b.__webglDepthbuffer[c]);else r.deleteFramebuffer(b.__webglFramebuffer),r.deleteRenderbuffer(b.__webglDepthbuffer);U.delete(a.texture);U.delete(a)}ia.textures--}function h(a){a=a.target;a.removeEventListener("dispose",h);k(a);U.delete(a)}function k(a){var b=U.get(a).program;a.program=void 0;void 0!==b&&oa.releaseProgram(b)}function l(a,b){return Math.abs(b[0])-Math.abs(a[0])}function p(a,b){return a.object.renderOrder!==b.object.renderOrder?a.object.renderOrder-b.object.renderOrder:a.material.id!==b.material.id?a.material.id-b.material.id:a.z!==b.z?a.z-b.z:a.id-b.id}function n(a,b){return a.object.renderOrder!==b.object.renderOrder?a.object.renderOrder-b.object.renderOrder:a.z!==b.z?b.z-a.z:a.id-b.id}function m(a,b,c,d,e){var f;c.transparent?(d=S,f=++Y):(d=C,f=++Z);f=d[f];void 0!==f?(f.id=a.id,f.object=a,f.geometry=b,f.material=c,f.z=W.z,f.group=e):(f={id:a.id,object:a,geometry:b,material:c,z:W.z,group:e},d.push(f))}function q(a,b){if(!1!==a.visible){if(a.layers.test(b.layers))if(a instanceof THREE.Light)J.push(a);else if(a instanceof THREE.Sprite)!1!==a.frustumCulled&&!0!==za.intersectsObject(a)||ja.push(a);else if(a instanceof THREE.LensFlare)ea.push(a);else if(a instanceof THREE.ImmediateRenderObject)!0===X.sortObjects&&(W.setFromMatrixPosition(a.matrixWorld),W.applyProjection(sa)),m(a,null,a.material,W.z,null);else if(a instanceof THREE.Mesh||a instanceof THREE.Line||a instanceof THREE.Points)if(a instanceof THREE.SkinnedMesh&&a.skeleton.update(),!1===a.frustumCulled||!0===za.intersectsObject(a)){var c=a.material;if(!0===c.visible){!0===X.sortObjects&&(W.setFromMatrixPosition(a.matrixWorld),W.applyProjection(sa));var d=pa.update(a);if(c instanceof THREE.MultiMaterial)for(var e=d.groups,f=c.materials,c=0,g=e.length;c=da.maxTextures&&console.warn("WebGLRenderer: trying to use "+a+" texture units while this GPU supports only "+da.maxTextures);ta+=1;return a}function w(a,b,c,d){var e;if("1i"===b)r.uniform1i(c,d);else if("1f"===b)r.uniform1f(c,d);else if("2f"===b)r.uniform2f(c,d[0],d[1]);else if("3f"===b)r.uniform3f(c,d[0],d[1],d[2]);else if("4f"===b)r.uniform4f(c,d[0],d[1],d[2],d[3]);else if("1iv"===b)r.uniform1iv(c,d);else if("3iv"===b)r.uniform3iv(c,d);else if("1fv"===b)r.uniform1fv(c,d);else if("2fv"===b)r.uniform2fv(c,d);else if("3fv"===b)r.uniform3fv(c,d);else if("4fv"===b)r.uniform4fv(c,d);else if("Matrix2fv"===b)r.uniformMatrix2fv(c,!1,d);else if("Matrix3fv"===b)r.uniformMatrix3fv(c,!1,d);else if("Matrix4fv"===b)r.uniformMatrix4fv(c,!1,d);else if("i"===b)r.uniform1i(c,d);else if("f"===b)r.uniform1f(c,d);else if("v2"===b)r.uniform2f(c,d.x,d.y);else if("v3"===b)r.uniform3f(c,d.x,d.y,d.z);else if("v4"===b)r.uniform4f(c,d.x,d.y,d.z,d.w);else if("c"===b)r.uniform3f(c,d.r,d.g,d.b);else if("s"===b){a=a.properties;for(var g in a){e=a[g];var f=c[g],h=d[g];w(e,e.type,f,h)}}else if("sa"===b){a=a.properties;b=0;for(var k=d.length;bb||a.height>b){var c=b/Math.max(a.width,a.height),d=document.createElement("canvas");d.width=Math.floor(a.width*c);d.height=Math.floor(a.height*c);d.getContext("2d").drawImage(a,0,0,a.width,a.height,0,0,d.width,d.height);console.warn("THREE.WebGLRenderer: image is too big ("+a.width+"x"+a.height+"). Resized to "+d.width+"x"+d.height,a);return d}return a}function z(a){return THREE.Math.isPowerOfTwo(a.width)&&THREE.Math.isPowerOfTwo(a.height)}function y(a,b){var c=U.get(a);if(6===a.image.length)if(0h;h++)g[h]=!X.autoScaleCubemaps||d||e?e?a.image[h].image:a.image[h]:D(a.image[h],da.maxCubemapSize);var k=z(g[0]),l=L(a.format),m=L(a.type);x(r.TEXTURE_CUBE_MAP,a,k);for(h=0;6>h;h++)if(d)for(var n,p=g[h].mipmaps,q=0,s=p.length;qf;f++)b.__webglFramebuffer[f]=r.createFramebuffer()}else b.__webglFramebuffer=r.createFramebuffer();if(d){K.bindTexture(r.TEXTURE_CUBE_MAP,c.__webglTexture);x(r.TEXTURE_CUBE_MAP,a.texture,e);for(f=0;6>f;f++)G(b.__webglFramebuffer[f],a,r.COLOR_ATTACHMENT0,r.TEXTURE_CUBE_MAP_POSITIVE_X+f);a.texture.generateMipmaps&&e&&r.generateMipmap(r.TEXTURE_CUBE_MAP);K.bindTexture(r.TEXTURE_CUBE_MAP,null)}else K.bindTexture(r.TEXTURE_2D,c.__webglTexture),x(r.TEXTURE_2D,a.texture,e),G(b.__webglFramebuffer,a,r.COLOR_ATTACHMENT0,r.TEXTURE_2D),a.texture.generateMipmaps&&e&&r.generateMipmap(r.TEXTURE_2D),K.bindTexture(r.TEXTURE_2D,null);if(a.depthBuffer){b=U.get(a);if(a instanceof THREE.WebGLRenderTargetCube)for(b.__webglDepthbuffer=[],c=0;6>c;c++)r.bindFramebuffer(r.FRAMEBUFFER,b.__webglFramebuffer[c]),b.__webglDepthbuffer[c]=r.createRenderbuffer(),F(b.__webglDepthbuffer[c],a);else r.bindFramebuffer(r.FRAMEBUFFER,b.__webglFramebuffer),b.__webglDepthbuffer=r.createRenderbuffer(),F(b.__webglDepthbuffer,a);r.bindFramebuffer(r.FRAMEBUFFER,null)}}b=a instanceof THREE.WebGLRenderTargetCube;a?(c=U.get(a),c=b?c.__webglFramebuffer[a.activeCubeFace]:c.__webglFramebuffer,qa.copy(a.scissor),Aa=a.scissorTest,ka.copy(a.viewport)):(c=null,qa.copy(ya).multiplyScalar(aa),Aa=Ba,ka.copy(la).multiplyScalar(aa));ua!==c&&(r.bindFramebuffer(r.FRAMEBUFFER,c),ua=c);K.scissor(qa);K.setScissorTest(Aa);K.viewport(ka);b&&(b=U.get(a.texture),r.framebufferTexture2D(r.FRAMEBUFFER,r.COLOR_ATTACHMENT0,r.TEXTURE_CUBE_MAP_POSITIVE_X+a.activeCubeFace,b.__webglTexture,a.activeMipMapLevel))};this.readRenderTargetPixels=function(a,b,c,d,e,g){if(!1===a instanceof THREE.WebGLRenderTarget)console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.");else{var f=U.get(a).__webglFramebuffer;if(f){var h=!1;f!==ua&&(r.bindFramebuffer(r.FRAMEBUFFER,f),h=!0);try{var k=a.texture;k.format!==THREE.RGBAFormat&&L(k.format)!==r.getParameter(r.IMPLEMENTATION_COLOR_READ_FORMAT)?console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format."):k.type===THREE.UnsignedByteType||L(k.type)===r.getParameter(r.IMPLEMENTATION_COLOR_READ_TYPE)||k.type===THREE.FloatType&&V.get("WEBGL_color_buffer_float")||k.type===THREE.HalfFloatType&&V.get("EXT_color_buffer_half_float")?r.checkFramebufferStatus(r.FRAMEBUFFER)===r.FRAMEBUFFER_COMPLETE?r.readPixels(b,c,d,e,L(k.format),L(k.type),g):console.error("THREE.WebGLRenderer.readRenderTargetPixels: readPixels from renderTarget failed. Framebuffer not complete."):console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.")}finally{h&&r.bindFramebuffer(r.FRAMEBUFFER,ua)}}}}};THREE.WebGLRenderTarget=function(a,b,c){this.uuid=THREE.Math.generateUUID();this.width=a;this.height=b;this.scissor=new THREE.Vector4(0,0,a,b);this.scissorTest=!1;this.viewport=new THREE.Vector4(0,0,a,b);c=c||{};void 0===c.minFilter&&(c.minFilter=THREE.LinearFilter);this.texture=new THREE.Texture(void 0,void 0,c.wrapS,c.wrapT,c.magFilter,c.minFilter,c.format,c.type,c.anisotropy);this.depthBuffer=void 0!==c.depthBuffer?c.depthBuffer:!0;this.stencilBuffer=void 0!==c.stencilBuffer?c.stencilBuffer:!0};THREE.WebGLRenderTarget.prototype={constructor:THREE.WebGLRenderTarget,setSize:function(a,b){if(this.width!==a||this.height!==b)this.width=a,this.height=b,this.dispose();this.viewport.set(0,0,a,b);this.scissor.set(0,0,a,b)},clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.width=a.width;this.height=a.height;this.viewport.copy(a.viewport);this.texture=a.texture.clone();this.depthBuffer=a.depthBuffer;this.stencilBuffer=a.stencilBuffer;return this},dispose:function(){this.dispatchEvent({type:"dispose"})}};THREE.EventDispatcher.prototype.apply(THREE.WebGLRenderTarget.prototype);THREE.WebGLRenderTargetCube=function(a,b,c){THREE.WebGLRenderTarget.call(this,a,b,c);this.activeMipMapLevel=this.activeCubeFace=0};THREE.WebGLRenderTargetCube.prototype=Object.create(THREE.WebGLRenderTarget.prototype);THREE.WebGLRenderTargetCube.prototype.constructor=THREE.WebGLRenderTargetCube;THREE.WebGLBufferRenderer=function(a,b,c){var d;this.setMode=function(a){d=a};this.render=function(b,f){a.drawArrays(d,b,f);c.calls++;c.vertices+=f;d===a.TRIANGLES&&(c.faces+=f/3)};this.renderInstances=function(e){var f=b.get("ANGLE_instanced_arrays");if(null===f)console.error("THREE.WebGLBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.");else{var g=e.attributes.position,h=0,h=g instanceof THREE.InterleavedBufferAttribute?g.data.count:g.count;f.drawArraysInstancedANGLE(d,0,h,e.maxInstancedCount);c.calls++;c.vertices+=h*e.maxInstancedCount;d===a.TRIANGLES&&(c.faces+=e.maxInstancedCount*h/3)}}};THREE.WebGLIndexedBufferRenderer=function(a,b,c){var d,e,f;this.setMode=function(a){d=a};this.setIndex=function(c){c.array instanceof Uint32Array&&b.get("OES_element_index_uint")?(e=a.UNSIGNED_INT,f=4):(e=a.UNSIGNED_SHORT,f=2)};this.render=function(b,h){a.drawElements(d,h,e,b*f);c.calls++;c.vertices+=h;d===a.TRIANGLES&&(c.faces+=h/3)};this.renderInstances=function(g,h,k){var l=b.get("ANGLE_instanced_arrays");null===l?console.error("THREE.WebGLBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays."):(l.drawElementsInstancedANGLE(d,k,e,h*f,g.maxInstancedCount),c.calls++,c.vertices+=k*g.maxInstancedCount,d===a.TRIANGLES&&(c.faces+=g.maxInstancedCount*k/3))}};THREE.WebGLExtensions=function(a){var b={};this.get=function(c){if(void 0!==b[c])return b[c];var d;switch(c){case"EXT_texture_filter_anisotropic":d=a.getExtension("EXT_texture_filter_anisotropic")||a.getExtension("MOZ_EXT_texture_filter_anisotropic")||a.getExtension("WEBKIT_EXT_texture_filter_anisotropic");break;case"WEBGL_compressed_texture_s3tc":d=a.getExtension("WEBGL_compressed_texture_s3tc")||a.getExtension("MOZ_WEBGL_compressed_texture_s3tc")||a.getExtension("WEBKIT_WEBGL_compressed_texture_s3tc");break;case"WEBGL_compressed_texture_pvrtc":d=a.getExtension("WEBGL_compressed_texture_pvrtc")||a.getExtension("WEBKIT_WEBGL_compressed_texture_pvrtc");break;case"WEBGL_compressed_texture_etc1":d=a.getExtension("WEBGL_compressed_texture_etc1");break;default:d=a.getExtension(c)}null===d&&console.warn("THREE.WebGLRenderer: "+c+" extension not supported.");return b[c]=d}};THREE.WebGLCapabilities=function(a,b,c){function d(b){if("highp"===b){if(0c){var d=b;b=c;c=d}d=a[b];return void 0===d?(a[b]=[c],!0):-1===d.indexOf(c)?(d.push(c),!0):!1}var f=new THREE.WebGLGeometries(a,b,c);this.getAttributeBuffer=function(a){return a instanceof THREE.InterleavedBufferAttribute?b.get(a.data).__webglBuffer:b.get(a).__webglBuffer};this.getWireframeAttribute=function(c){var f=b.get(c);if(void 0!==f.wireframe)return f.wireframe;var k=[],l=c.index,p=c.attributes;c=p.position;if(null!==l)for(var p={},l=l.array,n=0,m=l.length;n/g,function(a,b){var c=THREE.ShaderChunk[b];if(void 0===c)throw Error("Can not resolve #include <"+b+">");return k(c)})}function l(a){return a.replace(/for \( int i \= (\d+)\; i < (\d+)\; i \+\+ \) \{([\s\S]+?)(?=\})\}/g,function(a,b,c,d){a="";for(b=parseInt(b);b 0 ) {\nfloat depth = gl_FragCoord.z / gl_FragCoord.w;\nfloat fogFactor = 0.0;\nif ( fogType == 1 ) {\nfogFactor = smoothstep( fogNear, fogFar, depth );\n} else {\nconst float LOG2 = 1.442695;\nfogFactor = exp2( - fogDensity * fogDensity * depth * depth * LOG2 );\nfogFactor = 1.0 - clamp( fogFactor, 0.0, 1.0 );\n}\ngl_FragColor = mix( gl_FragColor, vec4( fogColor, gl_FragColor.w ), fogFactor );\n}\n}"].join("\n")); + degreeString: function(value){ + return numeral(value).format('0.000') + "°" + }, -x.compileShader(I);x.compileShader(O);x.attachShader(M,I);x.attachShader(M,O);x.linkProgram(M);B=M;s=x.getAttribLocation(B,"position");w=x.getAttribLocation(B,"uv");c=x.getUniformLocation(B,"uvOffset");d=x.getUniformLocation(B,"uvScale");e=x.getUniformLocation(B,"rotation");f=x.getUniformLocation(B,"scale");g=x.getUniformLocation(B,"color");h=x.getUniformLocation(B,"map");k=x.getUniformLocation(B,"opacity");l=x.getUniformLocation(B,"modelViewMatrix");p=x.getUniformLocation(B,"projectionMatrix");n=x.getUniformLocation(B,"fogType");m=x.getUniformLocation(B,"fogDensity");q=x.getUniformLocation(B,"fogNear");u=x.getUniformLocation(B,"fogFar");v=x.getUniformLocation(B,"fogColor");t=x.getUniformLocation(B,"alphaTest");M=document.createElement("canvas");M.width=8;M.height=8;I=M.getContext("2d");I.fillStyle="white";I.fillRect(0,0,8,8);G=new THREE.Texture(M);G.needsUpdate=!0}x.useProgram(B);D.initAttributes();D.enableAttribute(s);D.enableAttribute(w);D.disableUnusedAttributes();D.disable(x.CULL_FACE);D.enable(x.BLEND);x.bindBuffer(x.ARRAY_BUFFER,z);x.vertexAttribPointer(s,2,x.FLOAT,!1,16,0);x.vertexAttribPointer(w,2,x.FLOAT,!1,16,8);x.bindBuffer(x.ELEMENT_ARRAY_BUFFER,y);x.uniformMatrix4fv(p,!1,N.projectionMatrix.elements);D.activeTexture(x.TEXTURE0);x.uniform1i(h,0);I=M=0;(O=A.fog)?(x.uniform3f(v,O.color.r,O.color.g,O.color.b),O instanceof THREE.Fog?(x.uniform1f(q,O.near),x.uniform1f(u,O.far),x.uniform1i(n,1),I=M=1):O instanceof THREE.FogExp2&&(x.uniform1f(m,O.density),x.uniform1i(n,2),I=M=2)):(x.uniform1i(n,0),I=M=0);for(var O=0,Q=b.length;Oc)return null;var d=[],e=[],f=[],g,h,k;if(0=l--){console.warn("THREE.ShapeUtils: Unable to triangulate polygon! in triangulate()");break}g=h;c<=g&&(g=0);h=g+1;c<=h&&(h=0);k=h+1;c<=k&&(k=0);var p;a:{var n=p=void 0,m=void 0,q=void 0,u=void 0,v=void 0,t=void 0,s=void 0,w=void 0,n=a[e[g]].x,m=a[e[g]].y,q=a[e[h]].x,u=a[e[h]].y,v=a[e[k]].x,t=a[e[k]].y;if(Number.EPSILON>(q-n)*(t-m)-(u-m)*(v-n))p=!1;else{var E=void 0,x=void 0,D=void 0,z=void 0,y=void 0,B=void 0,G=void 0,F=void 0,H=void 0,L=void 0,H=F=G=w=s=void 0,E=v-q,x=t-u,D=n-v,z=m-t,y=q-n,B=u-m;for(p=0;p=-Number.EPSILON&&F>=-Number.EPSILON&&G>=-Number.EPSILON)){p=!1;break a}p=!0}}if(p){d.push([a[e[g]],a[e[h]],a[e[k]]]);f.push([e[g],e[h],e[k]]);g=h;for(k=h+1;kNumber.EPSILON){if(0B||B>y)return[];k=l*n-k*p;if(0>k||k>y)return[]}else{if(0d?[]:k===d?f?[]:[g]:a<=d?[g,h]:[g,l]}function e(a,b,c,d){var e=b.x-a.x,f=b.y-a.y;b=c.x-a.x;c=c.y-a.y;var g=d.x-a.x;d=d.y-a.y;a=e*c-f*b;e=e*d-f*g;return Math.abs(a)>Number.EPSILON?(b=g*c-d*b,0f&&(f=d);var g=a+1;g>d&&(g=0);d=e(h[a],h[f],h[g],k[b]);if(!d)return!1;d=k.length-1;f=b-1;0>f&&(f=d);g=b+1;g>d&&(g=0);return(d=e(k[b],k[f],k[g],h[a]))?!0:!1}function f(a,b){var c,e;for(c=0;cN){console.log("Infinite Loop! Holes left:"+l.length+", Probably Hole outside Shape!");break}for(p=F;ph;h++)l=k[h].x+":"+k[h].y,l=p[l],void 0!==l&&(k[h]=l);return n.concat()},isClockWise:function(a){return 0>THREE.ShapeUtils.area(a)},b2:function(){return function(a,b,c,d){var e=1-a;return e*e*b+2*(1-a)*a*c+a*a*d}}(),b3:function(){return function(a,b,c,d,e){var f=1-a,g=1-a;return f*f*f*b+3*g*g*a*c+3*(1-a)*a*a*d+a*a*a*e}}()};THREE.Curve=function(){};THREE.Curve.prototype={constructor:THREE.Curve,getPoint:function(a){console.warn("THREE.Curve: Warning, getPoint() not implemented!");return null},getPointAt:function(a){a=this.getUtoTmapping(a);return this.getPoint(a)},getPoints:function(a){a||(a=5);var b,c=[];for(b=0;b<=a;b++)c.push(this.getPoint(b/a));return c},getSpacedPoints:function(a){a||(a=5);var b,c=[];for(b=0;b<=a;b++)c.push(this.getPointAt(b/a));return c},getLength:function(){var a=this.getLengths();return a[a.length-1]},getLengths:function(a){a||(a=this.__arcLengthDivisions?this.__arcLengthDivisions:200);if(this.cacheArcLengths&&this.cacheArcLengths.length===a+1&&!this.needsUpdate)return this.cacheArcLengths;this.needsUpdate=!1;var b=[],c,d=this.getPoint(0),e,f=0;b.push(0);for(e=1;e<=a;e++)c=this.getPoint(e/a),f+=c.distanceTo(d),b.push(f),d=c;return this.cacheArcLengths=b},updateArcLengths:function(){this.needsUpdate=!0;this.getLengths()},getUtoTmapping:function(a,b){var c=this.getLengths(),d=0,e=c.length,f;f=b?b:a*c[e-1];for(var g=0,h=e-1,k;g<=h;)if(d=Math.floor(g+(h-g)/2),k=c[d]-f,0>k)g=d+1;else if(0b&&(b=0);1=b)return a=this.curves[d],b=1-(c[d]-b)/a.getLength(),a.getPointAt(b);d++}return null};THREE.CurvePath.prototype.getLength=function(){var a=this.getCurveLengths();return a[a.length-1]};THREE.CurvePath.prototype.getCurveLengths=function(){if(this.cacheLengths&&this.cacheLengths.length===this.curves.length)return this.cacheLengths;for(var a=[],b=0,c=0,d=this.curves.length;cNumber.EPSILON){if(0>l&&(g=b[f],k=-k,h=b[e],l=-l),!(a.yh.y))if(a.y===g.y){if(a.x===g.x)return!0}else{e=l*(a.x-g.x)-k*(a.y-g.y);if(0===e)return!0;0>e||(d=!d)}}else if(a.y===g.y&&(h.x<=a.x&&a.x<=g.x||g.x<=a.x&&a.x<=h.x))return!0}return d}var e=THREE.ShapeUtils.isClockWise,f=function(a){for(var b=[],c=new THREE.Path,d=0,e=a.length;db.length-2?b.length-1:c+1],b=b[c>b.length-3?b.length-1:c+2],c=THREE.CurveUtils.interpolate;return new THREE.Vector2(c(d.x,e.x,f.x,b.x,a),c(d.y,e.y,f.y,b.y,a))};THREE.EllipseCurve=function(a,b,c,d,e,f,g,h){this.aX=a;this.aY=b;this.xRadius=c;this.yRadius=d;this.aStartAngle=e;this.aEndAngle=f;this.aClockwise=g;this.aRotation=h||0};THREE.EllipseCurve.prototype=Object.create(THREE.Curve.prototype);THREE.EllipseCurve.prototype.constructor=THREE.EllipseCurve;THREE.EllipseCurve.prototype.getPoint=function(a){var b=this.aEndAngle-this.aStartAngle;0>b&&(b+=2*Math.PI);b>2*Math.PI&&(b-=2*Math.PI);b=!0===this.aClockwise?this.aEndAngle+(1-a)*(2*Math.PI-b):this.aStartAngle+a*b;a=this.aX+this.xRadius*Math.cos(b);var c=this.aY+this.yRadius*Math.sin(b);if(0!==this.aRotation){var b=Math.cos(this.aRotation),d=Math.sin(this.aRotation),e=a;a=(e-this.aX)*b-(c-this.aY)*d+this.aX;c=(e-this.aX)*d+(c-this.aY)*b+this.aY}return new THREE.Vector2(a,c)};THREE.ArcCurve=function(a,b,c,d,e,f){THREE.EllipseCurve.call(this,a,b,c,c,d,e,f)};THREE.ArcCurve.prototype=Object.create(THREE.EllipseCurve.prototype);THREE.ArcCurve.prototype.constructor=THREE.ArcCurve;THREE.LineCurve3=THREE.Curve.create(function(a,b){this.v1=a;this.v2=b},function(a){var b=new THREE.Vector3;b.subVectors(this.v2,this.v1);b.multiplyScalar(a);b.add(this.v1);return b});THREE.QuadraticBezierCurve3=THREE.Curve.create(function(a,b,c){this.v0=a;this.v1=b;this.v2=c},function(a){var b=THREE.ShapeUtils.b2;return new THREE.Vector3(b(a,this.v0.x,this.v1.x,this.v2.x),b(a,this.v0.y,this.v1.y,this.v2.y),b(a,this.v0.z,this.v1.z,this.v2.z))});THREE.CubicBezierCurve3=THREE.Curve.create(function(a,b,c,d){this.v0=a;this.v1=b;this.v2=c;this.v3=d},function(a){var b=THREE.ShapeUtils.b3;return new THREE.Vector3(b(a,this.v0.x,this.v1.x,this.v2.x,this.v3.x),b(a,this.v0.y,this.v1.y,this.v2.y,this.v3.y),b(a,this.v0.z,this.v1.z,this.v2.z,this.v3.z))});THREE.SplineCurve3=THREE.Curve.create(function(a){console.warn("THREE.SplineCurve3 will be deprecated. Please use THREE.CatmullRomCurve3");this.points=void 0==a?[]:a},function(a){var b=this.points;a*=b.length-1;var c=Math.floor(a);a-=c;var d=b[0==c?c:c-1],e=b[c],f=b[c>b.length-2?b.length-1:c+1],b=b[c>b.length-3?b.length-1:c+2],c=THREE.CurveUtils.interpolate;return new THREE.Vector3(c(d.x,e.x,f.x,b.x,a),c(d.y,e.y,f.y,b.y,a),c(d.z,e.z,f.z,b.z,a))});THREE.CatmullRomCurve3=function(){function a(){}var b=new THREE.Vector3,c=new a,d=new a,e=new a;a.prototype.init=function(a,b,c,d){this.c0=a;this.c1=c;this.c2=-3*a+3*b-2*c-d;this.c3=2*a-2*b+c+d};a.prototype.initNonuniformCatmullRom=function(a,b,c,d,e,p,n){a=((b-a)/e-(c-a)/(e+p)+(c-b)/p)*p;d=((c-b)/p-(d-b)/(p+n)+(d-c)/n)*p;this.init(b,c,a,d)};a.prototype.initCatmullRom=function(a,b,c,d,e){this.init(b,c,e*(c-a),e*(d-b))};a.prototype.calc=function(a){var b=a*a;return this.c0+this.c1*a+this.c2*b+this.c3*b*a};return THREE.Curve.create(function(a){this.points=a||[];this.closed=!1},function(a){var g=this.points,h,k;k=g.length;2>k&&console.log("duh, you need at least 2 points");a*=k-(this.closed?0:1);h=Math.floor(a);a-=h;this.closed?h+=0h&&(h=1);1e-4>k&&(k=h);1e-4>m&&(m=h);c.initNonuniformCatmullRom(l.x,p.x,n.x,g.x,k,h,m);d.initNonuniformCatmullRom(l.y,p.y,n.y,g.y,k,h,m);e.initNonuniformCatmullRom(l.z,p.z,n.z,g.z,k,h,m)}else"catmullrom"===this.type&&(k=void 0!==this.tension?this.tension:.5,c.initCatmullRom(l.x,p.x,n.x,g.x,k),d.initCatmullRom(l.y,p.y,n.y,g.y,k),e.initCatmullRom(l.z,p.z,n.z,g.z,k));return new THREE.Vector3(c.calc(a),d.calc(a),e.calc(a))})}();THREE.ClosedSplineCurve3=function(a){console.warn("THREE.ClosedSplineCurve3 has been deprecated. Please use THREE.CatmullRomCurve3.");THREE.CatmullRomCurve3.call(this,a);this.type="catmullrom";this.closed=!0};THREE.ClosedSplineCurve3.prototype=Object.create(THREE.CatmullRomCurve3.prototype);THREE.BoxGeometry=function(a,b,c,d,e,f){THREE.Geometry.call(this);this.type="BoxGeometry";this.parameters={width:a,height:b,depth:c,widthSegments:d,heightSegments:e,depthSegments:f};this.fromBufferGeometry(new THREE.BoxBufferGeometry(a,b,c,d,e,f));this.mergeVertices()};THREE.BoxGeometry.prototype=Object.create(THREE.Geometry.prototype);THREE.BoxGeometry.prototype.constructor=THREE.BoxGeometry;THREE.CubeGeometry=THREE.BoxGeometry;THREE.BoxBufferGeometry=function(a,b,c,d,e,f){function g(a,b,c,d,e,f,g,k,l,L,A){var N=f/l,M=g/L,I=f/2,O=g/2,Q=k/2;g=l+1;for(var P=L+1,T=f=0,J=new THREE.Vector3,C=0;Cm;m++){e[0]=n[g[m]];e[1]=n[g[(m+1)%3]];e.sort(c);var q=e.toString();void 0===f[q]?f[q]={vert1:e[0],vert2:e[1],face1:l,face2:void 0}:f[q].face2=l}e=[];for(q in f)if(g=f[q],void 0===g.face2||h[g.face1].normal.dot(h[g.face2].normal)<=d)l=k[g.vert1],e.push(l.x),e.push(l.y),e.push(l.z),l=k[g.vert2],e.push(l.x),e.push(l.y),e.push(l.z);this.addAttribute("position",new THREE.BufferAttribute(new Float32Array(e),3))};THREE.EdgesGeometry.prototype=Object.create(THREE.BufferGeometry.prototype);THREE.EdgesGeometry.prototype.constructor=THREE.EdgesGeometry;THREE.ExtrudeGeometry=function(a,b){"undefined"!==typeof a&&(THREE.Geometry.call(this),this.type="ExtrudeGeometry",a=Array.isArray(a)?a:[a],this.addShapeList(a,b),this.computeFaceNormals())};THREE.ExtrudeGeometry.prototype=Object.create(THREE.Geometry.prototype);THREE.ExtrudeGeometry.prototype.constructor=THREE.ExtrudeGeometry;THREE.ExtrudeGeometry.prototype.addShapeList=function(a,b){for(var c=a.length,d=0;dNumber.EPSILON){var k=Math.sqrt(h),l=Math.sqrt(f*f+g*g),h=b.x-e/k;b=b.y+d/k;f=((c.x-g/l-h)*g-(c.y+f/l-b)*f)/(d*g-e*f);c=h+d*f-a.x;a=b+e*f-a.y;d=c*c+a*a;if(2>=d)return new THREE.Vector2(c,a);d=Math.sqrt(d/2)}else a=!1,d>Number.EPSILON?f>Number.EPSILON&&(a=!0):d<-Number.EPSILON?f<-Number.EPSILON&&(a=!0):Math.sign(e)===Math.sign(g)&&(a=!0),a?(c=-e,a=d,d=Math.sqrt(h)):(c=d,a=e,d=Math.sqrt(h/2));return new THREE.Vector2(c/d,a/d)}function e(a,b){var c,d;for(C=a.length;0<=--C;){c=C;d=C-1;0>d&&(d=a.length-1);for(var e=0,f=q+2*p,e=0;eMath.abs(b.y-c.y)?[new THREE.Vector2(b.x,1-b.z),new THREE.Vector2(c.x,1-c.z),new THREE.Vector2(d.x,1-d.z),new THREE.Vector2(e.x,1-e.z)]:[new THREE.Vector2(b.y,1-b.z),new THREE.Vector2(c.y,1-c.z),new THREE.Vector2(d.y,1-d.z),new THREE.Vector2(e.y,1-e.z)]}};THREE.ShapeGeometry=function(a,b){THREE.Geometry.call(this);this.type="ShapeGeometry";!1===Array.isArray(a)&&(a=[a]);this.addShapeList(a,b);this.computeFaceNormals()};THREE.ShapeGeometry.prototype=Object.create(THREE.Geometry.prototype);THREE.ShapeGeometry.prototype.constructor=THREE.ShapeGeometry;THREE.ShapeGeometry.prototype.addShapeList=function(a,b){for(var c=0,d=a.length;cNumber.EPSILON&&(h.normalize(),d=Math.acos(THREE.Math.clamp(e[l-1].dot(e[l]),-1,1)),f[l].applyMatrix4(k.makeRotationAxis(h,d))),g[l].crossVectors(e[l],f[l]);if(c)for(d=Math.acos(THREE.Math.clamp(f[0].dot(f[b-1]),-1,1)),d/=b-1,0c&&1===a.x&&(a=new THREE.Vector2(a.x-1,a.y));0===b.x&&0===b.z&&(a=new THREE.Vector2(c/2/Math.PI+.5,a.y));return a.clone()}THREE.Geometry.call(this);this.type="PolyhedronGeometry";this.parameters={vertices:a,indices:b,radius:c,detail:d};c=c||1;d=d||0;for(var k=this,l=0,p=a.length;lq&&(.2>d&&(b[0].x+=1),.2>a&&(b[1].x+=1),.2>n&&(b[2].x+=1));l=0;for(p=this.vertices.length;ln;n++){c[0]=p[e[n]];c[1]=p[e[(n+1)%3]];c.sort(b);var m=c.toString();void 0===d[m]&&(k[2*h]=c[0],k[2*h+1]=c[1],d[m]=!0,h++)}c=new Float32Array(6*h);a=0;for(l=h;an;n++)d=f[k[2*a+n]],h=6*a+3*n,c[h+0]=d.x,c[h+1]=d.y,c[h+2]=d.z;this.addAttribute("position",new THREE.BufferAttribute(c,3))}else if(a instanceof THREE.BufferGeometry){if(null!==a.index){l=a.index.array;f=a.attributes.position;e=a.groups;h=0;0===e.length&&a.addGroup(0,l.length);k=new Uint32Array(2*l.length);g=0;for(p=e.length;gn;n++)c[0]=l[a+n],c[1]=l[a+(n+1)%3],c.sort(b),m=c.toString(),void 0===d[m]&&(k[2*h]=c[0],k[2*h+1]=c[1],d[m]=!0,h++)}c=new Float32Array(6*h);a=0;for(l=h;an;n++)h=6*a+3*n,d=k[2*a+n],c[h+0]=f.getX(d),c[h+1]=f.getY(d),c[h+2]=f.getZ(d)}else for(f=a.attributes.position.array,h=f.length/3,k=h/3,c=new Float32Array(6*h),a=0,l=k;an;n++)h=18*a+6*n,k=9*a+3*n,c[h+0]=f[k],c[h+1]=f[k+1],c[h+2]=f[k+2],d=9*a+(n+1)%3*3,c[h+3]=f[d],c[h+4]=f[d+1],c[h+5]=f[d+2];this.addAttribute("position",new THREE.BufferAttribute(c,3))}};THREE.WireframeGeometry.prototype=Object.create(THREE.BufferGeometry.prototype);THREE.WireframeGeometry.prototype.constructor=THREE.WireframeGeometry;THREE.AxisHelper=function(a){a=a||1;var b=new Float32Array([0,0,0,a,0,0,0,0,0,0,a,0,0,0,0,0,0,a]),c=new Float32Array([1,0,0,1,.6,0,0,1,0,.6,1,0,0,0,1,0,.6,1]);a=new THREE.BufferGeometry;a.addAttribute("position",new THREE.BufferAttribute(b,3));a.addAttribute("color",new THREE.BufferAttribute(c,3));b=new THREE.LineBasicMaterial({vertexColors:THREE.VertexColors});THREE.LineSegments.call(this,a,b)};THREE.AxisHelper.prototype=Object.create(THREE.LineSegments.prototype);THREE.AxisHelper.prototype.constructor=THREE.AxisHelper;THREE.ArrowHelper=function(){var a=new THREE.Geometry;a.vertices.push(new THREE.Vector3(0,0,0),new THREE.Vector3(0,1,0));var b=new THREE.CylinderGeometry(0,.5,1,5,1);b.translate(0,-.5,0);return function(c,d,e,f,g,h){THREE.Object3D.call(this);void 0===f&&(f=16776960);void 0===e&&(e=1);void 0===g&&(g=.2*e);void 0===h&&(h=.2*g);this.position.copy(d);this.line=new THREE.Line(a,new THREE.LineBasicMaterial({color:f}));this.line.matrixAutoUpdate=!1;this.add(this.line);this.cone=new THREE.Mesh(b,new THREE.MeshBasicMaterial({color:f}));this.cone.matrixAutoUpdate=!1;this.add(this.cone);this.setDirection(c);this.setLength(e,g,h)}}();THREE.ArrowHelper.prototype=Object.create(THREE.Object3D.prototype);THREE.ArrowHelper.prototype.constructor=THREE.ArrowHelper;THREE.ArrowHelper.prototype.setDirection=function(){var a=new THREE.Vector3,b;return function(c){.99999c.y?this.quaternion.set(1,0,0,0):(a.set(c.z,0,-c.x).normalize(),b=Math.acos(c.y),this.quaternion.setFromAxisAngle(a,b))}}();THREE.ArrowHelper.prototype.setLength=function(a,b,c){void 0===b&&(b=.2*a);void 0===c&&(c=.2*b);this.line.scale.set(1,Math.max(0,a-b),1);this.line.updateMatrix();this.cone.scale.set(c,b,c);this.cone.position.y=a;this.cone.updateMatrix()};THREE.ArrowHelper.prototype.setColor=function(a){this.line.material.color.set(a);this.cone.material.color.set(a)};THREE.BoxHelper=function(a){var b=new Uint16Array([0,1,1,2,2,3,3,0,4,5,5,6,6,7,7,4,0,4,1,5,2,6,3,7]),c=new Float32Array(24),d=new THREE.BufferGeometry;d.setIndex(new THREE.BufferAttribute(b,1));d.addAttribute("position",new THREE.BufferAttribute(c,3));THREE.LineSegments.call(this,d,new THREE.LineBasicMaterial({color:16776960}));void 0!==a&&this.update(a)};THREE.BoxHelper.prototype=Object.create(THREE.LineSegments.prototype);THREE.BoxHelper.prototype.constructor=THREE.BoxHelper;THREE.BoxHelper.prototype.update=function(){var a=new THREE.Box3;return function(b){a.setFromObject(b);if(!a.isEmpty()){b=a.min;var c=a.max,d=this.geometry.attributes.position,e=d.array;e[0]=c.x;e[1]=c.y;e[2]=c.z;e[3]=b.x;e[4]=c.y;e[5]=c.z;e[6]=b.x;e[7]=b.y;e[8]=c.z;e[9]=c.x;e[10]=b.y;e[11]=c.z;e[12]=c.x;e[13]=c.y;e[14]=b.z;e[15]=b.x;e[16]=c.y;e[17]=b.z;e[18]=b.x;e[19]=b.y;e[20]=b.z;e[21]=c.x;e[22]=b.y;e[23]=b.z;d.needsUpdate=!0;this.geometry.computeBoundingSphere()}}}();THREE.BoundingBoxHelper=function(a,b){var c=void 0!==b?b:8947848;this.object=a;this.box=new THREE.Box3;THREE.Mesh.call(this,new THREE.BoxGeometry(1,1,1),new THREE.MeshBasicMaterial({color:c,wireframe:!0}))};THREE.BoundingBoxHelper.prototype=Object.create(THREE.Mesh.prototype);THREE.BoundingBoxHelper.prototype.constructor=THREE.BoundingBoxHelper;THREE.BoundingBoxHelper.prototype.update=function(){this.box.setFromObject(this.object);this.box.size(this.scale);this.box.center(this.position)};THREE.CameraHelper=function(a){function b(a,b,d){c(a,d);c(b,d)}function c(a,b){d.vertices.push(new THREE.Vector3);d.colors.push(new THREE.Color(b));void 0===f[a]&&(f[a]=[]);f[a].push(d.vertices.length-1)}var d=new THREE.Geometry,e=new THREE.LineBasicMaterial({color:16777215,vertexColors:THREE.FaceColors}),f={};b("n1","n2",16755200);b("n2","n4",16755200);b("n4","n3",16755200);b("n3","n1",16755200);b("f1","f2",16755200);b("f2","f4",16755200);b("f4","f3",16755200);b("f3","f1",16755200);b("n1","f1",16755200);b("n2","f2",16755200);b("n3","f3",16755200);b("n4","f4",16755200);b("p","n1",16711680);b("p","n2",16711680);b("p","n3",16711680);b("p","n4",16711680);b("u1","u2",43775);b("u2","u3",43775);b("u3","u1",43775);b("c","t",16777215);b("p","c",3355443);b("cn1","cn2",3355443);b("cn3","cn4",3355443);b("cf1","cf2",3355443);b("cf3","cf4",3355443);THREE.LineSegments.call(this,d,e);this.camera=a;this.camera.updateProjectionMatrix();this.matrix=a.matrixWorld;this.matrixAutoUpdate=!1;this.pointMap=f;this.update()};THREE.CameraHelper.prototype=Object.create(THREE.LineSegments.prototype);THREE.CameraHelper.prototype.constructor=THREE.CameraHelper;THREE.CameraHelper.prototype.update=function(){function a(a,g,h,k){d.set(g,h,k).unproject(e);a=c[a];if(void 0!==a)for(g=0,h=a.length;gd;d++)c.faces[d].color=this.colors[4>d?0:1];d=new THREE.MeshBasicMaterial({vertexColors:THREE.FaceColors,wireframe:!0});this.lightSphere=new THREE.Mesh(c,d);this.add(this.lightSphere);this.update()};THREE.HemisphereLightHelper.prototype=Object.create(THREE.Object3D.prototype);THREE.HemisphereLightHelper.prototype.constructor=THREE.HemisphereLightHelper;THREE.HemisphereLightHelper.prototype.dispose=function(){this.lightSphere.geometry.dispose();this.lightSphere.material.dispose()};THREE.HemisphereLightHelper.prototype.update=function(){var a=new THREE.Vector3;return function(){this.colors[0].copy(this.light.color).multiplyScalar(this.light.intensity);this.colors[1].copy(this.light.groundColor).multiplyScalar(this.light.intensity);this.lightSphere.lookAt(a.setFromMatrixPosition(this.light.matrixWorld).negate());this.lightSphere.geometry.colorsNeedUpdate=!0}}();THREE.PointLightHelper=function(a,b){this.light=a;this.light.updateMatrixWorld();var c=new THREE.SphereGeometry(b,4,2),d=new THREE.MeshBasicMaterial({wireframe:!0,fog:!1});d.color.copy(this.light.color).multiplyScalar(this.light.intensity);THREE.Mesh.call(this,c,d);this.matrix=this.light.matrixWorld;this.matrixAutoUpdate=!1};THREE.PointLightHelper.prototype=Object.create(THREE.Mesh.prototype);THREE.PointLightHelper.prototype.constructor=THREE.PointLightHelper;THREE.PointLightHelper.prototype.dispose=function(){this.geometry.dispose();this.material.dispose()};THREE.PointLightHelper.prototype.update=function(){this.material.color.copy(this.light.color).multiplyScalar(this.light.intensity)};THREE.SkeletonHelper=function(a){this.bones=this.getBoneList(a);for(var b=new THREE.Geometry,c=0;ch.end&&(h.end=f);c||(c=k)}}for(k in d)h=d[k],this.createAnimation(k,h.start,h.end,a);this.firstAnimation=c};THREE.MorphBlendMesh.prototype.setAnimationDirectionForward=function(a){if(a=this.animationsMap[a])a.direction=1,a.directionBackwards=!1};THREE.MorphBlendMesh.prototype.setAnimationDirectionBackward=function(a){if(a=this.animationsMap[a])a.direction=-1,a.directionBackwards=!0};THREE.MorphBlendMesh.prototype.setAnimationFPS=function(a,b){var c=this.animationsMap[a];c&&(c.fps=b,c.duration=(c.end-c.start)/c.fps)};THREE.MorphBlendMesh.prototype.setAnimationDuration=function(a,b){var c=this.animationsMap[a];c&&(c.duration=b,c.fps=(c.end-c.start)/c.duration)};THREE.MorphBlendMesh.prototype.setAnimationWeight=function(a,b){var c=this.animationsMap[a];c&&(c.weight=b)};THREE.MorphBlendMesh.prototype.setAnimationTime=function(a,b){var c=this.animationsMap[a];c&&(c.time=b)};THREE.MorphBlendMesh.prototype.getAnimationTime=function(a){var b=0;if(a=this.animationsMap[a])b=a.time;return b};THREE.MorphBlendMesh.prototype.getAnimationDuration=function(a){var b=-1;if(a=this.animationsMap[a])b=a.duration;return b};THREE.MorphBlendMesh.prototype.playAnimation=function(a){var b=this.animationsMap[a];b?(b.time=0,b.active=!0):console.warn("THREE.MorphBlendMesh: animation["+a+"] undefined in .playAnimation()")};THREE.MorphBlendMesh.prototype.stopAnimation=function(a){if(a=this.animationsMap[a])a.active=!1};THREE.MorphBlendMesh.prototype.update=function(a){for(var b=0,c=this.animationsList.length;bd.duration||0>d.time)d.direction*=-1,d.time>d.duration&&(d.time=d.duration,d.directionBackwards=!0),0>d.time&&(d.time=0,d.directionBackwards=!1)}else d.time%=d.duration,0>d.time&&(d.time+=d.duration);var f=d.start+THREE.Math.clamp(Math.floor(d.time/e),0,d.length-1),g=d.weight;f!==d.currentFrame&&(this.morphTargetInfluences[d.lastFrame]=0,this.morphTargetInfluences[d.currentFrame]=1*g,this.morphTargetInfluences[f]=0,d.lastFrame=d.currentFrame,d.currentFrame=f);e=d.time%e/e;d.directionBackwards&&(e=1-e);d.currentFrame!==d.lastFrame?(this.morphTargetInfluences[d.currentFrame]=e*g,this.morphTargetInfluences[d.lastFrame]=(1-e)*g):this.morphTargetInfluences[d.currentFrame]=g}}};"use strict";void 0===Date.now&&(Date.now=function(){return(new Date).valueOf()});var TWEEN=TWEEN||function(){var a=[];return{REVISION:"14",getAll:function(){return a},removeAll:function(){a=[]},add:function(c){a.push(c)},remove:function(c){c=a.indexOf(c);-1!==c&&a.splice(c,1)},update:function(c){if(0===a.length)return!1;for(var b=0,c=void 0!==c?c:"undefined"!==typeof window&&void 0!==window.performance&&void 0!==window.performance.now?window.performance.now():Date.now();b(a*=2)?.5*a*a:-.5*(--a*(a-2)-1)}},Cubic:{In:function(a){return a*a*a},Out:function(a){return--a*a*a+1},InOut:function(a){return 1>(a*=2)?.5*a*a*a:.5*((a-=2)*a*a+2)}},Quartic:{In:function(a){return a*a*a*a},Out:function(a){return 1- --a*a*a*a},InOut:function(a){return 1>(a*=2)?.5*a*a*a*a:-.5*((a-=2)*a*a*a-2)}},Quintic:{In:function(a){return a*a*a*a*a},Out:function(a){return--a*a*a*a*a+1},InOut:function(a){return 1>(a*=2)?.5*a*a*a*a*a:.5*((a-=2)*a*a*a*a+2)}},Sinusoidal:{In:function(a){return 1-Math.cos(a*Math.PI/2)},Out:function(a){return Math.sin(a*Math.PI/2)},InOut:function(a){return.5*(1-Math.cos(Math.PI*a))}},Exponential:{In:function(a){return 0===a?0:Math.pow(1024,a-1)},Out:function(a){return 1===a?1:1-Math.pow(2,-10*a)},InOut:function(a){return 0===a?0:1===a?1:1>(a*=2)?.5*Math.pow(1024,a-1):.5*(-Math.pow(2,-10*(a-1))+2)}},Circular:{In:function(a){return 1-Math.sqrt(1-a*a)},Out:function(a){return Math.sqrt(1- --a*a)},InOut:function(a){return 1>(a*=2)?-.5*(Math.sqrt(1-a*a)-1):.5*(Math.sqrt(1-(a-=2)*a)+1)}},Elastic:{In:function(a){var c,b=.1;if(0===a)return 0;if(1===a)return 1;!b||1>b?(b=1,c=.1):c=.4*Math.asin(1/b)/(2*Math.PI);return-(b*Math.pow(2,10*(a-=1))*Math.sin((a-c)*2*Math.PI/.4))},Out:function(a){var c,b=.1;if(0===a)return 0;if(1===a)return 1;!b||1>b?(b=1,c=.1):c=.4*Math.asin(1/b)/(2*Math.PI);return b*Math.pow(2,-10*a)*Math.sin((a-c)*2*Math.PI/.4)+1},InOut:function(a){var c,b=.1;if(0===a)return 0;if(1===a)return 1;!b||1>b?(b=1,c=.1):c=.4*Math.asin(1/b)/(2*Math.PI);return 1>(a*=2)?-.5*b*Math.pow(2,10*(a-=1))*Math.sin((a-c)*2*Math.PI/.4):.5*b*Math.pow(2,-10*(a-=1))*Math.sin((a-c)*2*Math.PI/.4)+1}},Back:{In:function(a){return a*a*(2.70158*a-1.70158)},Out:function(a){return--a*a*(2.70158*a+1.70158)+1},InOut:function(a){return 1>(a*=2)?.5*a*a*(3.5949095*a-2.5949095):.5*((a-=2)*a*(3.5949095*a+2.5949095)+2)}},Bounce:{In:function(a){return 1-TWEEN.Easing.Bounce.Out(1-a)},Out:function(a){return a<1/2.75?7.5625*a*a:a<2/2.75?7.5625*(a-=1.5/2.75)*a+.75:a<2.5/2.75?7.5625*(a-=2.25/2.75)*a+.9375:7.5625*(a-=2.625/2.75)*a+.984375},InOut:function(a){return.5>a?.5*TWEEN.Easing.Bounce.In(2*a):.5*TWEEN.Easing.Bounce.Out(2*a-1)+.5}}};TWEEN.Interpolation={Linear:function(a,c){var b=a.length-1,d=b*c,e=Math.floor(d),g=TWEEN.Interpolation.Utils.Linear;return 0>c?g(a[0],a[1],d):1b?b:e+1],d-e)},Bezier:function(a,c){var b=0,d=a.length-1,e=Math.pow,g=TWEEN.Interpolation.Utils.Bernstein,h;for(h=0;h<=d;h++)b+=e(1-c,d-h)*e(c,h)*a[h]*g(d,h);return b},CatmullRom:function(a,c){var b=a.length-1,d=b*c,e=Math.floor(d),g=TWEEN.Interpolation.Utils.CatmullRom;return a[0]===a[b]?(0>c&&(e=Math.floor(d=b*(1+c))),g(a[(e-1+b)%b],a[e],a[(e+1)%b],a[(e+2)%b],d-e)):0>c?a[0]-(g(a[0],a[0],a[1],a[1],-d)-a[0]):1180){delta=delta-360}else if(delta<-180){delta=360+delta}return delta},initializeNavBall:function(){this.renderer=new THREE.WebGLRenderer({alpha:true,antialias:true});this.renderer.setSize(1,1);this.container.update(this.renderer.domElement);this.resize();Event.observe(window,"resize",this.resize.bind(this));var scene=new THREE.Scene;var camera=new THREE.PerspectiveCamera(32,1,.01,1e3);camera.position.z=190;scene.add(new THREE.AmbientLight(11184810));var light1=new THREE.DirectionalLight(16777215,1);light1.position.set(1500,1500,500);var light2=new THREE.DirectionalLight(16777215,.5);light2.position.set(-1500,-1500,500);scene.add(light1);scene.add(light2);var navballGeometry=new THREE.SphereGeometry(this.displayRadius,48,48);var navballTexture=THREE.ImageUtils.loadTexture("../assets/images/navball.png");navballTexture.anisotropy=this.renderer.getMaxAnisotropy();var navballMaterial=new THREE.MeshPhongMaterial({map:navballTexture,bumpMap:THREE.ImageUtils.loadTexture("../assets/images/navball-normal.png"),bumpScale:.25,shininess:80});this.navballMesh=new THREE.Mesh(navballGeometry,navballMaterial);scene.add(this.navballMesh);var animate=function(){window.setTimeout(function(){requestAnimationFrame(animate)},this.datalink.rate/60);TWEEN.update();this.renderer.render(scene,camera)}.bind(this);requestAnimationFrame(animate)},resize:function(){var width=this.container.getWidth();var height=this.container.getHeight();this.renderer.setSize(width,height)},initializeDatalink:function(){this.datalink.subscribeToData(["n.pitch","n.roll","n.heading"]);this.datalink.addReceiverFunction(this.update.bind(this))}});var THREEx=THREEx||{};THREEx.FullScreen=THREEx.FullScreen||{};THREEx.FullScreen.available=function(){return this._hasWebkitFullScreen||this._hasMozFullScreen};THREEx.FullScreen.activated=function(){if(this._hasWebkitFullScreen){return document.webkitIsFullScreen}else if(this._hasMozFullScreen){return document.mozFullScreen}else{console.assert(false)}};THREEx.FullScreen.request=function(element){element=element||document.body;if(this._hasWebkitFullScreen){element.webkitRequestFullScreen()}else if(this._hasMozFullScreen){element.mozRequestFullScreen()}else{console.assert(false)}};THREEx.FullScreen.cancel=function(){if(this._hasWebkitFullScreen){document.webkitCancelFullScreen()}else if(this._hasMozFullScreen){document.mozCancelFullScreen()}else{console.assert(false)}};THREEx.FullScreen._hasWebkitFullScreen="webkitCancelFullScreen"in document?true:false;THREEx.FullScreen._hasMozFullScreen="mozCancelFullScreen"in document?true:false;THREE.OrbitControls=function(object,domElement){this.object=object;this.domElement=domElement!==undefined?domElement:document;this.enabled=true;this.target=new THREE.Vector3;this.minDistance=0;this.maxDistance=Infinity;this.minZoom=0;this.maxZoom=Infinity;this.minPolarAngle=0;this.maxPolarAngle=Math.PI;this.minAzimuthAngle=-Infinity;this.maxAzimuthAngle=Infinity;this.enableDamping=false;this.dampingFactor=.25;this.enableZoom=true;this.zoomSpeed=1;this.enableRotate=true;this.rotateSpeed=1;this.enablePan=true;this.keyPanSpeed=7;this.autoRotate=false;this.autoRotateSpeed=2;this.enableKeys=true;this.keys={LEFT:37,UP:38,RIGHT:39,BOTTOM:40};this.mouseButtons={ORBIT:THREE.MOUSE.LEFT,ZOOM:THREE.MOUSE.MIDDLE,PAN:THREE.MOUSE.RIGHT};this.target0=this.target.clone();this.position0=this.object.position.clone();this.zoom0=this.object.zoom;this.getPolarAngle=function(){return phi};this.getAzimuthalAngle=function(){return theta};this.reset=function(){scope.target.copy(scope.target0);scope.object.position.copy(scope.position0);scope.object.zoom=scope.zoom0;scope.object.updateProjectionMatrix();scope.dispatchEvent(changeEvent);scope.update();state=STATE.NONE};this.update=function(){var offset=new THREE.Vector3;var quat=(new THREE.Quaternion).setFromUnitVectors(object.up,new THREE.Vector3(0,1,0));var quatInverse=quat.clone().inverse();var lastPosition=new THREE.Vector3;var lastQuaternion=new THREE.Quaternion;return function(){var position=scope.object.position;offset.copy(position).sub(scope.target);offset.applyQuaternion(quat);spherical.setFromVector3(offset);if(scope.autoRotate&&state===STATE.NONE){rotateLeft(getAutoRotationAngle())}spherical.theta+=sphericalDelta.theta;spherical.phi+=sphericalDelta.phi;spherical.theta=Math.max(scope.minAzimuthAngle,Math.min(scope.maxAzimuthAngle,spherical.theta));spherical.phi=Math.max(scope.minPolarAngle,Math.min(scope.maxPolarAngle,spherical.phi));spherical.makeSafe();spherical.radius*=scale;spherical.radius=Math.max(scope.minDistance,Math.min(scope.maxDistance,spherical.radius));scope.target.add(panOffset);offset.setFromSpherical(spherical);offset.applyQuaternion(quatInverse);position.copy(scope.target).add(offset);scope.object.lookAt(scope.target);if(scope.enableDamping===true){sphericalDelta.theta*=1-scope.dampingFactor;sphericalDelta.phi*=1-scope.dampingFactor}else{sphericalDelta.set(0,0,0)}scale=1;panOffset.set(0,0,0);if(zoomChanged||lastPosition.distanceToSquared(scope.object.position)>EPS||8*(1-lastQuaternion.dot(scope.object.quaternion))>EPS){scope.dispatchEvent(changeEvent);lastPosition.copy(scope.object.position);lastQuaternion.copy(scope.object.quaternion);zoomChanged=false;return true}return false}}();this.dispose=function(){scope.domElement.removeEventListener("contextmenu",onContextMenu,false);scope.domElement.removeEventListener("mousedown",onMouseDown,false);scope.domElement.removeEventListener("mousewheel",onMouseWheel,false);scope.domElement.removeEventListener("MozMousePixelScroll",onMouseWheel,false);scope.domElement.removeEventListener("touchstart",onTouchStart,false);scope.domElement.removeEventListener("touchend",onTouchEnd,false);scope.domElement.removeEventListener("touchmove",onTouchMove,false);document.removeEventListener("mousemove",onMouseMove,false);document.removeEventListener("mouseup",onMouseUp,false);document.removeEventListener("mouseout",onMouseUp,false);window.removeEventListener("keydown",onKeyDown,false)};var scope=this;var changeEvent={type:"change"};var startEvent={type:"start"};var endEvent={type:"end"};var STATE={NONE:-1,ROTATE:0,DOLLY:1,PAN:2,TOUCH_ROTATE:3,TOUCH_DOLLY:4,TOUCH_PAN:5};var state=STATE.NONE;var EPS=1e-6;var spherical=new THREE.Spherical;var sphericalDelta=new THREE.Spherical;var scale=1;var panOffset=new THREE.Vector3;var zoomChanged=false;var rotateStart=new THREE.Vector2;var rotateEnd=new THREE.Vector2;var rotateDelta=new THREE.Vector2;var panStart=new THREE.Vector2;var panEnd=new THREE.Vector2;var panDelta=new THREE.Vector2;var dollyStart=new THREE.Vector2;var dollyEnd=new THREE.Vector2;var dollyDelta=new THREE.Vector2;function getAutoRotationAngle(){return 2*Math.PI/60/60*scope.autoRotateSpeed}function getZoomScale(){return Math.pow(.95,scope.zoomSpeed)}function rotateLeft(angle){sphericalDelta.theta-=angle}function rotateUp(angle){sphericalDelta.phi-=angle}var panLeft=function(){var v=new THREE.Vector3;return function panLeft(distance,objectMatrix){v.setFromMatrixColumn(objectMatrix,0);v.multiplyScalar(-distance);panOffset.add(v)}}();var panUp=function(){var v=new THREE.Vector3;return function panUp(distance,objectMatrix){v.setFromMatrixColumn(objectMatrix,1);v.multiplyScalar(distance);panOffset.add(v)}}();var pan=function(){var offset=new THREE.Vector3;return function(deltaX,deltaY){var element=scope.domElement===document?scope.domElement.body:scope.domElement;if(scope.object instanceof THREE.PerspectiveCamera){var position=scope.object.position;offset.copy(position).sub(scope.target);var targetDistance=offset.length();targetDistance*=Math.tan(scope.object.fov/2*Math.PI/180);panLeft(2*deltaX*targetDistance/element.clientHeight,scope.object.matrix);panUp(2*deltaY*targetDistance/element.clientHeight,scope.object.matrix)}else if(scope.object instanceof THREE.OrthographicCamera){panLeft(deltaX*(scope.object.right-scope.object.left)/scope.object.zoom/element.clientWidth,scope.object.matrix);panUp(deltaY*(scope.object.top-scope.object.bottom)/scope.object.zoom/element.clientHeight,scope.object.matrix)}else{console.warn("WARNING: OrbitControls.js encountered an unknown camera type - pan disabled.");scope.enablePan=false}}}();function dollyIn(dollyScale){if(scope.object instanceof THREE.PerspectiveCamera){scale/=dollyScale}else if(scope.object instanceof THREE.OrthographicCamera){scope.object.zoom=Math.max(scope.minZoom,Math.min(scope.maxZoom,scope.object.zoom*dollyScale));scope.object.updateProjectionMatrix();zoomChanged=true}else{console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.");scope.enableZoom=false}}function dollyOut(dollyScale){if(scope.object instanceof THREE.PerspectiveCamera){scale*=dollyScale}else if(scope.object instanceof THREE.OrthographicCamera){scope.object.zoom=Math.max(scope.minZoom,Math.min(scope.maxZoom,scope.object.zoom/dollyScale));scope.object.updateProjectionMatrix();zoomChanged=true}else{console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.");scope.enableZoom=false}}function handleMouseDownRotate(event){rotateStart.set(event.clientX,event.clientY)}function handleMouseDownDolly(event){dollyStart.set(event.clientX,event.clientY)}function handleMouseDownPan(event){panStart.set(event.clientX,event.clientY)}function handleMouseMoveRotate(event){rotateEnd.set(event.clientX,event.clientY);rotateDelta.subVectors(rotateEnd,rotateStart);var element=scope.domElement===document?scope.domElement.body:scope.domElement;rotateLeft(2*Math.PI*rotateDelta.x/element.clientWidth*scope.rotateSpeed);rotateUp(2*Math.PI*rotateDelta.y/element.clientHeight*scope.rotateSpeed);rotateStart.copy(rotateEnd);scope.update()}function handleMouseMoveDolly(event){dollyEnd.set(event.clientX,event.clientY);dollyDelta.subVectors(dollyEnd,dollyStart);if(dollyDelta.y>0){dollyIn(getZoomScale())}else if(dollyDelta.y<0){dollyOut(getZoomScale())}dollyStart.copy(dollyEnd);scope.update()}function handleMouseMovePan(event){panEnd.set(event.clientX,event.clientY);panDelta.subVectors(panEnd,panStart);pan(panDelta.x,panDelta.y);panStart.copy(panEnd);scope.update()}function handleMouseUp(event){}function handleMouseWheel(event){var delta=0;if(event.wheelDelta!==undefined){delta=event.wheelDelta}else if(event.detail!==undefined){delta=-event.detail}if(delta>0){dollyOut(getZoomScale())}else if(delta<0){dollyIn(getZoomScale())}scope.update()}function handleKeyDown(event){switch(event.keyCode){case scope.keys.UP:pan(0,scope.keyPanSpeed);scope.update();break;case scope.keys.BOTTOM:pan(0,-scope.keyPanSpeed);scope.update();break;case scope.keys.LEFT:pan(scope.keyPanSpeed,0);scope.update();break;case scope.keys.RIGHT:pan(-scope.keyPanSpeed,0);scope.update();break}}function handleTouchStartRotate(event){rotateStart.set(event.touches[0].pageX,event.touches[0].pageY)}function handleTouchStartDolly(event){var dx=event.touches[0].pageX-event.touches[1].pageX;var dy=event.touches[0].pageY-event.touches[1].pageY;var distance=Math.sqrt(dx*dx+dy*dy);dollyStart.set(0,distance)}function handleTouchStartPan(event){panStart.set(event.touches[0].pageX,event.touches[0].pageY)}function handleTouchMoveRotate(event){rotateEnd.set(event.touches[0].pageX,event.touches[0].pageY);rotateDelta.subVectors(rotateEnd,rotateStart);var element=scope.domElement===document?scope.domElement.body:scope.domElement;rotateLeft(2*Math.PI*rotateDelta.x/element.clientWidth*scope.rotateSpeed);rotateUp(2*Math.PI*rotateDelta.y/element.clientHeight*scope.rotateSpeed);rotateStart.copy(rotateEnd);scope.update()}function handleTouchMoveDolly(event){var dx=event.touches[0].pageX-event.touches[1].pageX;var dy=event.touches[0].pageY-event.touches[1].pageY;var distance=Math.sqrt(dx*dx+dy*dy);dollyEnd.set(0,distance);dollyDelta.subVectors(dollyEnd,dollyStart);if(dollyDelta.y>0){dollyOut(getZoomScale())}else if(dollyDelta.y<0){dollyIn(getZoomScale())}dollyStart.copy(dollyEnd);scope.update()}function handleTouchMovePan(event){panEnd.set(event.touches[0].pageX,event.touches[0].pageY);panDelta.subVectors(panEnd,panStart);pan(panDelta.x,panDelta.y);panStart.copy(panEnd);scope.update()}function handleTouchEnd(event){}function onMouseDown(event){if(scope.enabled===false)return;event.preventDefault();if(event.button===scope.mouseButtons.ORBIT){if(scope.enableRotate===false)return;handleMouseDownRotate(event);state=STATE.ROTATE}else if(event.button===scope.mouseButtons.ZOOM){if(scope.enableZoom===false)return;handleMouseDownDolly(event);state=STATE.DOLLY}else if(event.button===scope.mouseButtons.PAN){if(scope.enablePan===false)return;handleMouseDownPan(event);state=STATE.PAN}if(state!==STATE.NONE){document.addEventListener("mousemove",onMouseMove,false);document.addEventListener("mouseup",onMouseUp,false);document.addEventListener("mouseout",onMouseUp,false);scope.dispatchEvent(startEvent)}}function onMouseMove(event){if(scope.enabled===false)return;event.preventDefault();if(state===STATE.ROTATE){if(scope.enableRotate===false)return;handleMouseMoveRotate(event)}else if(state===STATE.DOLLY){if(scope.enableZoom===false)return;handleMouseMoveDolly(event)}else if(state===STATE.PAN){if(scope.enablePan===false)return;handleMouseMovePan(event)}}function onMouseUp(event){if(scope.enabled===false)return;handleMouseUp(event);document.removeEventListener("mousemove",onMouseMove,false);document.removeEventListener("mouseup",onMouseUp,false);document.removeEventListener("mouseout",onMouseUp,false);scope.dispatchEvent(endEvent);state=STATE.NONE}function onMouseWheel(event){if(scope.enabled===false||scope.enableZoom===false||state!==STATE.NONE)return;event.preventDefault();event.stopPropagation();handleMouseWheel(event);scope.dispatchEvent(startEvent);scope.dispatchEvent(endEvent)}function onKeyDown(event){if(scope.enabled===false||scope.enableKeys===false||scope.enablePan===false)return;handleKeyDown(event)}function onTouchStart(event){if(scope.enabled===false)return;switch(event.touches.length){case 1:if(scope.enableRotate===false)return;handleTouchStartRotate(event);state=STATE.TOUCH_ROTATE;break;case 2:if(scope.enableZoom===false)return;handleTouchStartDolly(event);state=STATE.TOUCH_DOLLY;break;case 3:if(scope.enablePan===false)return;handleTouchStartPan(event);state=STATE.TOUCH_PAN;break;default:state=STATE.NONE}if(state!==STATE.NONE){scope.dispatchEvent(startEvent)}}function onTouchMove(event){if(scope.enabled===false)return;event.preventDefault();event.stopPropagation();switch(event.touches.length){case 1:if(scope.enableRotate===false)return;if(state!==STATE.TOUCH_ROTATE)return;handleTouchMoveRotate(event);break;case 2:if(scope.enableZoom===false)return;if(state!==STATE.TOUCH_DOLLY)return;handleTouchMoveDolly(event);break;case 3:if(scope.enablePan===false)return;if(state!==STATE.TOUCH_PAN)return;handleTouchMovePan(event);break;default:state=STATE.NONE}}function onTouchEnd(event){if(scope.enabled===false)return;handleTouchEnd(event);scope.dispatchEvent(endEvent);state=STATE.NONE}function onContextMenu(event){event.preventDefault()}scope.domElement.addEventListener("contextmenu",onContextMenu,false);scope.domElement.addEventListener("mousedown",onMouseDown,false);scope.domElement.addEventListener("mousewheel",onMouseWheel,false);scope.domElement.addEventListener("MozMousePixelScroll",onMouseWheel,false);scope.domElement.addEventListener("touchstart",onTouchStart,false);scope.domElement.addEventListener("touchend",onTouchEnd,false);scope.domElement.addEventListener("touchmove",onTouchMove,false);window.addEventListener("keydown",onKeyDown,false);this.update()};THREE.OrbitControls.prototype=Object.create(THREE.EventDispatcher.prototype);THREE.OrbitControls.prototype.constructor=THREE.OrbitControls;Object.defineProperties(THREE.OrbitControls.prototype,{center:{get:function(){console.warn("THREE.OrbitControls: .center has been renamed to .target");return this.target}},noZoom:{get:function(){console.warn("THREE.OrbitControls: .noZoom has been deprecated. Use .enableZoom instead.");return!this.enableZoom},set:function(value){console.warn("THREE.OrbitControls: .noZoom has been deprecated. Use .enableZoom instead.");this.enableZoom=!value}},noRotate:{get:function(){console.warn("THREE.OrbitControls: .noRotate has been deprecated. Use .enableRotate instead.");return!this.enableRotate},set:function(value){console.warn("THREE.OrbitControls: .noRotate has been deprecated. Use .enableRotate instead.");this.enableRotate=!value}},noPan:{get:function(){console.warn("THREE.OrbitControls: .noPan has been deprecated. Use .enablePan instead.");return!this.enablePan},set:function(value){console.warn("THREE.OrbitControls: .noPan has been deprecated. Use .enablePan instead.");this.enablePan=!value}},noKeys:{get:function(){console.warn("THREE.OrbitControls: .noKeys has been deprecated. Use .enableKeys instead.");return!this.enableKeys},set:function(value){console.warn("THREE.OrbitControls: .noKeys has been deprecated. Use .enableKeys instead.");this.enableKeys=!value}},staticMoving:{get:function(){console.warn("THREE.OrbitControls: .staticMoving has been deprecated. Use .enableDamping instead.");return!this.constraint.enableDamping},set:function(value){console.warn("THREE.OrbitControls: .staticMoving has been deprecated. Use .enableDamping instead.");this.constraint.enableDamping=!value}},dynamicDampingFactor:{get:function(){console.warn("THREE.OrbitControls: .dynamicDampingFactor has been renamed. Use .dampingFactor instead.");return this.constraint.dampingFactor},set:function(value){console.warn("THREE.OrbitControls: .dynamicDampingFactor has been renamed. Use .dampingFactor instead.");this.constraint.dampingFactor=value}}});var dat=dat||{};dat.gui=dat.gui||{};dat.utils=dat.utils||{};dat.controllers=dat.controllers||{};dat.dom=dat.dom||{};dat.color=dat.color||{};dat.utils.css=function(){return{load:function(f,a){a=a||document;var d=a.createElement("link");d.type="text/css";d.rel="stylesheet";d.href=f;a.getElementsByTagName("head")[0].appendChild(d)},inject:function(f,a){a=a||document;var d=document.createElement("style");d.type="text/css";d.innerHTML=f;a.getElementsByTagName("head")[0].appendChild(d)}}}();dat.utils.common=function(){var f=Array.prototype.forEach,a=Array.prototype.slice;return{BREAK:{},extend:function(d){this.each(a.call(arguments,1),function(a){for(var c in a)this.isUndefined(a[c])||(d[c]=a[c])},this);return d},defaults:function(d){this.each(a.call(arguments,1),function(a){for(var c in a)this.isUndefined(d[c])&&(d[c]=a[c])},this);return d},compose:function(){var d=a.call(arguments);return function(){for(var e=a.call(arguments),c=d.length-1;0<=c;c--)e=[d[c].apply(this,e)];return e[0]}},each:function(a,e,c){if(a)if(f&&a.forEach&&a.forEach===f)a.forEach(e,c);else if(a.length===a.length+0)for(var b=0,p=a.length;bthis.__max&&(a=this.__max);void 0!==this.__step&&0!=a%this.__step&&(a=Math.round(a/this.__step)*this.__step);return e.superclass.prototype.setValue.call(this,a)},min:function(a){this.__min=a;return this},max:function(a){this.__max=a;return this},step:function(a){this.__impliedStep=this.__step=a;this.__precision=d(a);return this}});return e}(dat.controllers.Controller,dat.utils.common);dat.controllers.NumberControllerBox=function(f,a,d){var e=function(c,b,f){function q(){var a=parseFloat(n.__input.value);d.isNaN(a)||n.setValue(a)}function l(a){var b=u-a.clientY;n.setValue(n.getValue()+b*n.__impliedStep);u=a.clientY}function r(){a.unbind(window,"mousemove",l);a.unbind(window,"mouseup",r)}this.__truncationSuspended=!1;e.superclass.call(this,c,b,f);var n=this,u;this.__input=document.createElement("input");this.__input.setAttribute("type","text");a.bind(this.__input,"change",q);a.bind(this.__input,"blur",function(){q();n.__onFinishChange&&n.__onFinishChange.call(n,n.getValue())});a.bind(this.__input,"mousedown",function(b){a.bind(window,"mousemove",l);a.bind(window,"mouseup",r);u=b.clientY});a.bind(this.__input,"keydown",function(a){13===a.keyCode&&(n.__truncationSuspended=!0,this.blur(),n.__truncationSuspended=!1)});this.updateDisplay();this.domElement.appendChild(this.__input)};e.superclass=f;d.extend(e.prototype,f.prototype,{updateDisplay:function(){var a=this.__input,b;if(this.__truncationSuspended)b=this.getValue();else{b=this.getValue();var d=Math.pow(10,this.__precision);b=Math.round(b*d)/d}a.value=b;return e.superclass.prototype.updateDisplay.call(this)}});return e}(dat.controllers.NumberController,dat.dom.dom,dat.utils.common);dat.controllers.NumberControllerSlider=function(f,a,d,e,c){function b(a,b,c,e,d){return e+(a-b)/(c-b)*(d-e)}var p=function(c,e,d,f,u){function A(c){c.preventDefault();var e=a.getOffset(k.__background),d=a.getWidth(k.__background);k.setValue(b(c.clientX,e.left,e.left+d,k.__min,k.__max));return!1}function g(){a.unbind(window,"mousemove",A);a.unbind(window,"mouseup",g);k.__onFinishChange&&k.__onFinishChange.call(k,k.getValue())}p.superclass.call(this,c,e,{min:d,max:f,step:u});var k=this;this.__background=document.createElement("div");this.__foreground=document.createElement("div");a.bind(this.__background,"mousedown",function(b){a.bind(window,"mousemove",A);a.bind(window,"mouseup",g);A(b)});a.addClass(this.__background,"slider");a.addClass(this.__foreground,"slider-fg"); + temperatureString: function(value){ + if(!value){return "NA"} + return numeral(value).format('0,000') + "°C" + }, -this.updateDisplay();this.__background.appendChild(this.__foreground);this.domElement.appendChild(this.__background)};p.superclass=f;p.useDefaultStyles=function(){d.inject(c)};e.extend(p.prototype,f.prototype,{updateDisplay:function(){var a=(this.getValue()-this.__min)/(this.__max-this.__min);this.__foreground.style.width=100*a+"%";return p.superclass.prototype.updateDisplay.call(this)}});return p}(dat.controllers.NumberController,dat.dom.dom,dat.utils.css,dat.utils.common,"/**\n * dat-gui JavaScript Controller Library\n * http://code.google.com/p/dat-gui\n *\n * Copyright 2011 Data Arts Team, Google Creative Lab\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n */\n\n.slider {\n box-shadow: inset 0 2px 4px rgba(0,0,0,0.15);\n height: 1em;\n border-radius: 1em;\n background-color: #eee;\n padding: 0 0.5em;\n overflow: hidden;\n}\n\n.slider-fg {\n padding: 1px 0 2px 0;\n background-color: #aaa;\n height: 1em;\n margin-left: -0.5em;\n padding-right: 0.5em;\n border-radius: 1em 0 0 1em;\n}\n\n.slider-fg:after {\n display: inline-block;\n border-radius: 1em;\n background-color: #fff;\n border: 1px solid #aaa;\n content: '';\n float: right;\n margin-right: -1em;\n margin-top: -1px;\n height: 0.9em;\n width: 0.9em;\n}");dat.controllers.FunctionController=function(f,a,d){var e=function(c,b,d){e.superclass.call(this,c,b);var f=this;this.__button=document.createElement("div");this.__button.innerHTML=void 0===d?"Fire":d;a.bind(this.__button,"click",function(a){a.preventDefault();f.fire();return!1});a.addClass(this.__button,"button");this.domElement.appendChild(this.__button)};e.superclass=f;d.extend(e.prototype,f.prototype,{fire:function(){this.__onChange&&this.__onChange.call(this);this.getValue().call(this.object);this.__onFinishChange&&this.__onFinishChange.call(this,this.getValue())}});return e}(dat.controllers.Controller,dat.dom.dom,dat.utils.common);dat.controllers.BooleanController=function(f,a,d){var e=function(c,b){e.superclass.call(this,c,b);var d=this;this.__prev=this.getValue();this.__checkbox=document.createElement("input");this.__checkbox.setAttribute("type","checkbox");a.bind(this.__checkbox,"change",function(){d.setValue(!d.__prev)},!1);this.domElement.appendChild(this.__checkbox);this.updateDisplay()};e.superclass=f;d.extend(e.prototype,f.prototype,{setValue:function(a){a=e.superclass.prototype.setValue.call(this,a);this.__onFinishChange&&this.__onFinishChange.call(this,this.getValue());this.__prev=this.getValue();return a},updateDisplay:function(){!0===this.getValue()?(this.__checkbox.setAttribute("checked","checked"),this.__checkbox.checked=!0):this.__checkbox.checked=!1;return e.superclass.prototype.updateDisplay.call(this)}});return e}(dat.controllers.Controller,dat.dom.dom,dat.utils.common);dat.color.toString=function(f){return function(a){if(1==a.a||f.isUndefined(a.a)){for(a=a.hex.toString(16);6>a.length;)a="0"+a;return"#"+a}return"rgba("+Math.round(a.r)+","+Math.round(a.g)+","+Math.round(a.b)+","+a.a+")"}}(dat.utils.common);dat.color.interpret=function(f,a){var d,e,c=[{litmus:a.isString,conversions:{THREE_CHAR_HEX:{read:function(a){a=a.match(/^#([A-F0-9])([A-F0-9])([A-F0-9])$/i);return null===a?!1:{space:"HEX",hex:parseInt("0x"+a[1].toString()+a[1].toString()+a[2].toString()+a[2].toString()+a[3].toString()+a[3].toString())}},write:f},SIX_CHAR_HEX:{read:function(a){a=a.match(/^#([A-F0-9]{6})$/i);return null===a?!1:{space:"HEX",hex:parseInt("0x"+a[1].toString())}},write:f},CSS_RGB:{read:function(a){a=a.match(/^rgb\(\s*(.+)\s*,\s*(.+)\s*,\s*(.+)\s*\)/);return null===a?!1:{space:"RGB",r:parseFloat(a[1]),g:parseFloat(a[2]),b:parseFloat(a[3])}},write:f},CSS_RGBA:{read:function(a){a=a.match(/^rgba\(\s*(.+)\s*,\s*(.+)\s*,\s*(.+)\s*\,\s*(.+)\s*\)/);return null===a?!1:{space:"RGB",r:parseFloat(a[1]),g:parseFloat(a[2]),b:parseFloat(a[3]),a:parseFloat(a[4])}},write:f}}},{litmus:a.isNumber,conversions:{HEX:{read:function(a){return{space:"HEX",hex:a,conversionName:"HEX"}},write:function(a){return a.hex}}}},{litmus:a.isArray,conversions:{RGB_ARRAY:{read:function(a){return 3!=a.length?!1:{space:"RGB",r:a[0],g:a[1],b:a[2]}},write:function(a){return[a.r,a.g,a.b]}},RGBA_ARRAY:{read:function(a){return 4!=a.length?!1:{space:"RGB",r:a[0],g:a[1],b:a[2],a:a[3]}},write:function(a){return[a.r,a.g,a.b,a.a]}}}},{litmus:a.isObject,conversions:{RGBA_OBJ:{read:function(b){return a.isNumber(b.r)&&a.isNumber(b.g)&&a.isNumber(b.b)&&a.isNumber(b.a)?{space:"RGB",r:b.r,g:b.g,b:b.b,a:b.a}:!1},write:function(a){return{r:a.r,g:a.g,b:a.b,a:a.a}}},RGB_OBJ:{read:function(b){return a.isNumber(b.r)&&a.isNumber(b.g)&&a.isNumber(b.b)?{space:"RGB",r:b.r,g:b.g,b:b.b}:!1},write:function(a){return{r:a.r,g:a.g,b:a.b}}},HSVA_OBJ:{read:function(b){return a.isNumber(b.h)&&a.isNumber(b.s)&&a.isNumber(b.v)&&a.isNumber(b.a)?{space:"HSV",h:b.h,s:b.s,v:b.v,a:b.a}:!1},write:function(a){return{h:a.h,s:a.s,v:a.v,a:a.a}}},HSV_OBJ:{read:function(b){return a.isNumber(b.h)&&a.isNumber(b.s)&&a.isNumber(b.v)?{space:"HSV",h:b.h,s:b.s,v:b.v}:!1},write:function(a){return{h:a.h,s:a.s,v:a.v}}}}}];return function(){e=!1;var b=1\n\n Here\'s the new load parameter for your GUI\'s constructor:\n\n \n\n
    \n\n Automatically save\n values to localStorage on exit.\n\n
    The values saved to localStorage will\n override those passed to dat.GUI\'s constructor. This makes it\n easier to work incrementally, but localStorage is fragile,\n and your friends may not see the same values you do.\n \n
    \n \n
    \n\n',".dg {\n /** Clear list styles */\n /* Auto-place container */\n /* Auto-placed GUI's */\n /* Line items that don't contain folders. */\n /** Folder names */\n /** Hides closed items */\n /** Controller row */\n /** Name-half (left) */\n /** Controller-half (right) */\n /** Controller placement */\n /** Shorter number boxes when slider is present. */\n /** Ensure the entire boolean and function row shows a hand */ }\n .dg ul {\n list-style: none;\n margin: 0;\n padding: 0;\n width: 100%;\n clear: both; }\n .dg.ac {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n height: 0;\n z-index: 0; }\n .dg:not(.ac) .main {\n /** Exclude mains in ac so that we don't hide close button */\n overflow: hidden; }\n .dg.main {\n -webkit-transition: opacity 0.1s linear;\n -o-transition: opacity 0.1s linear;\n -moz-transition: opacity 0.1s linear;\n transition: opacity 0.1s linear; }\n .dg.main.taller-than-window {\n overflow-y: auto; }\n .dg.main.taller-than-window .close-button {\n opacity: 1;\n /* TODO, these are style notes */\n margin-top: -1px;\n border-top: 1px solid #2c2c2c; }\n .dg.main ul.closed .close-button {\n opacity: 1 !important; }\n .dg.main:hover .close-button,\n .dg.main .close-button.drag {\n opacity: 1; }\n .dg.main .close-button {\n /*opacity: 0;*/\n -webkit-transition: opacity 0.1s linear;\n -o-transition: opacity 0.1s linear;\n -moz-transition: opacity 0.1s linear;\n transition: opacity 0.1s linear;\n border: 0;\n position: absolute;\n line-height: 19px;\n height: 20px;\n /* TODO, these are style notes */\n cursor: pointer;\n text-align: center;\n background-color: #000; }\n .dg.main .close-button:hover {\n background-color: #111; }\n .dg.a {\n float: right;\n margin-right: 15px;\n overflow-x: hidden; }\n .dg.a.has-save > ul {\n margin-top: 27px; }\n .dg.a.has-save > ul.closed {\n margin-top: 0; }\n .dg.a .save-row {\n position: fixed;\n top: 0;\n z-index: 1002; }\n .dg li {\n -webkit-transition: height 0.1s ease-out;\n -o-transition: height 0.1s ease-out;\n -moz-transition: height 0.1s ease-out;\n transition: height 0.1s ease-out; }\n .dg li:not(.folder) {\n cursor: auto;\n height: 27px;\n line-height: 27px;\n overflow: hidden;\n padding: 0 4px 0 5px; }\n .dg li.folder {\n padding: 0;\n border-left: 4px solid rgba(0, 0, 0, 0); }\n .dg li.title {\n cursor: pointer;\n margin-left: -4px; }\n .dg .closed li:not(.title),\n .dg .closed ul li,\n .dg .closed ul li > * {\n height: 0;\n overflow: hidden;\n border: 0; }\n .dg .cr {\n clear: both;\n padding-left: 3px;\n height: 27px; }\n .dg .property-name {\n cursor: default;\n float: left;\n clear: left;\n width: 40%;\n overflow: hidden;\n text-overflow: ellipsis; }\n .dg .c {\n float: left;\n width: 60%; }\n .dg .c input[type=text] {\n border: 0;\n margin-top: 4px;\n padding: 3px;\n width: 100%;\n float: right; }\n .dg .has-slider input[type=text] {\n width: 30%;\n /*display: none;*/\n margin-left: 0; }\n .dg .slider {\n float: left;\n width: 66%;\n margin-left: -5px;\n margin-right: 0;\n height: 19px;\n margin-top: 4px; }\n .dg .slider-fg {\n height: 100%; }\n .dg .c input[type=checkbox] {\n margin-top: 9px; }\n .dg .c select {\n margin-top: 5px; }\n .dg .cr.function,\n .dg .cr.function .property-name,\n .dg .cr.function *,\n .dg .cr.boolean,\n .dg .cr.boolean * {\n cursor: pointer; }\n .dg .selector {\n display: none;\n position: absolute;\n margin-left: -9px;\n margin-top: 23px;\n z-index: 10; }\n .dg .c:hover .selector,\n .dg .selector.drag {\n display: block; }\n .dg li.save-row {\n padding: 0; }\n .dg li.save-row .button {\n display: inline-block;\n padding: 0px 6px; }\n .dg.dialogue {\n background-color: #222;\n width: 460px;\n padding: 15px;\n font-size: 13px;\n line-height: 15px; }\n\n/* TODO Separate style and structure */\n#dg-new-constructor {\n padding: 10px;\n color: #222;\n font-family: Monaco, monospace;\n font-size: 10px;\n border: 0;\n resize: none;\n box-shadow: inset 1px 1px 1px #888;\n word-wrap: break-word;\n margin: 12px 0;\n display: block;\n width: 440px;\n overflow-y: scroll;\n height: 100px;\n position: relative; }\n\n#dg-local-explain {\n display: none;\n font-size: 11px;\n line-height: 17px;\n border-radius: 3px;\n background-color: #333;\n padding: 8px;\n margin-top: 10px; }\n #dg-local-explain code {\n font-size: 10px; }\n\n#dat-gui-save-locally {\n display: none; }\n\n/** Main type */\n.dg {\n color: #eee;\n font: 11px 'Lucida Grande', sans-serif;\n text-shadow: 0 -1px 0 #111;\n /** Auto place */\n /* Controller row,
  • */\n /** Controllers */ }\n .dg.main {\n /** Scrollbar */ }\n .dg.main::-webkit-scrollbar {\n width: 5px;\n background: #1a1a1a; }\n .dg.main::-webkit-scrollbar-corner {\n height: 0;\n display: none; }\n .dg.main::-webkit-scrollbar-thumb {\n border-radius: 5px;\n background: #676767; }\n .dg li:not(.folder) {\n background: #1a1a1a;\n border-bottom: 1px solid #2c2c2c; }\n .dg li.save-row {\n line-height: 25px;\n background: #dad5cb;\n border: 0; }\n .dg li.save-row select {\n margin-left: 5px;\n width: 108px; }\n .dg li.save-row .button {\n margin-left: 5px;\n margin-top: 1px;\n border-radius: 2px;\n font-size: 9px;\n line-height: 7px;\n padding: 4px 4px 5px 4px;\n background: #c5bdad;\n color: #fff;\n text-shadow: 0 1px 0 #b0a58f;\n box-shadow: 0 -1px 0 #b0a58f;\n cursor: pointer; }\n .dg li.save-row .button.gears {\n background: #c5bdad url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAANCAYAAAB/9ZQ7AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAQJJREFUeNpiYKAU/P//PwGIC/ApCABiBSAW+I8AClAcgKxQ4T9hoMAEUrxx2QSGN6+egDX+/vWT4e7N82AMYoPAx/evwWoYoSYbACX2s7KxCxzcsezDh3evFoDEBYTEEqycggWAzA9AuUSQQgeYPa9fPv6/YWm/Acx5IPb7ty/fw+QZblw67vDs8R0YHyQhgObx+yAJkBqmG5dPPDh1aPOGR/eugW0G4vlIoTIfyFcA+QekhhHJhPdQxbiAIguMBTQZrPD7108M6roWYDFQiIAAv6Aow/1bFwXgis+f2LUAynwoIaNcz8XNx3Dl7MEJUDGQpx9gtQ8YCueB+D26OECAAQDadt7e46D42QAAAABJRU5ErkJggg==) 2px 1px no-repeat;\n height: 7px;\n width: 8px; }\n .dg li.save-row .button:hover {\n background-color: #bab19e;\n box-shadow: 0 -1px 0 #b0a58f; }\n .dg li.folder {\n border-bottom: 0; }\n .dg li.title {\n padding-left: 16px;\n background: black url(data:image/gif;base64,R0lGODlhBQAFAJEAAP////Pz8////////yH5BAEAAAIALAAAAAAFAAUAAAIIlI+hKgFxoCgAOw==) 6px 10px no-repeat;\n cursor: pointer;\n border-bottom: 1px solid rgba(255, 255, 255, 0.2); }\n .dg .closed li.title {\n background-image: url(data:image/gif;base64,R0lGODlhBQAFAJEAAP////Pz8////////yH5BAEAAAIALAAAAAAFAAUAAAIIlGIWqMCbWAEAOw==); }\n .dg .cr.boolean {\n border-left: 3px solid #806787; }\n .dg .cr.function {\n border-left: 3px solid #e61d5f; }\n .dg .cr.number {\n border-left: 3px solid #2fa1d6; }\n .dg .cr.number input[type=text] {\n color: #2fa1d6; }\n .dg .cr.string {\n border-left: 3px solid #1ed36f; }\n .dg .cr.string input[type=text] {\n color: #1ed36f; }\n .dg .cr.function:hover, .dg .cr.boolean:hover {\n background: #111; }\n .dg .c input[type=text] {\n background: #303030;\n outline: none; }\n .dg .c input[type=text]:hover {\n background: #3c3c3c; }\n .dg .c input[type=text]:focus {\n background: #494949;\n color: #fff; }\n .dg .c .slider {\n background: #303030;\n cursor: ew-resize; }\n .dg .c .slider-fg {\n background: #2fa1d6; }\n .dg .c .slider:hover {\n background: #3c3c3c; }\n .dg .c .slider:hover .slider-fg {\n background: #44abda; }\n",dat.controllers.factory=function(f,a,d,e,c,b,p){return function(q,l,r,n){var u=q[l];if(p.isArray(r)||p.isObject(r))return new f(q,l,r);if(p.isNumber(u))return p.isNumber(r)&&p.isNumber(n)?new d(q,l,r,n):new a(q,l,{min:r,max:n});if(p.isString(u))return new e(q,l);if(p.isFunction(u))return new c(q,l,"");if(p.isBoolean(u))return new b(q,l)}}(dat.controllers.OptionController,dat.controllers.NumberControllerBox,dat.controllers.NumberControllerSlider,dat.controllers.StringController=function(f,a,d){var e=function(c,b){function d(){f.setValue(f.__input.value)}e.superclass.call(this,c,b);var f=this;this.__input=document.createElement("input");this.__input.setAttribute("type","text");a.bind(this.__input,"keyup",d);a.bind(this.__input,"change",d);a.bind(this.__input,"blur",function(){f.__onFinishChange&&f.__onFinishChange.call(f,f.getValue())});a.bind(this.__input,"keydown",function(a){13===a.keyCode&&this.blur()});this.updateDisplay();this.domElement.appendChild(this.__input)};e.superclass=f;d.extend(e.prototype,f.prototype,{updateDisplay:function(){a.isActive(this.__input)||(this.__input.value=this.getValue());return e.superclass.prototype.updateDisplay.call(this)}});return e}(dat.controllers.Controller,dat.dom.dom,dat.utils.common),dat.controllers.FunctionController,dat.controllers.BooleanController,dat.utils.common),dat.controllers.Controller,dat.controllers.BooleanController,dat.controllers.FunctionController,dat.controllers.NumberControllerBox,dat.controllers.NumberControllerSlider,dat.controllers.OptionController,dat.controllers.ColorController=function(f,a,d,e,c){function b(a,b,d,e){a.style.background="";c.each(l,function(c){a.style.cssText+="background: "+c+"linear-gradient("+b+", "+d+" 0%, "+e+" 100%); "})}function p(a){a.style.background="";a.style.cssText+="background: -moz-linear-gradient(top, #ff0000 0%, #ff00ff 17%, #0000ff 34%, #00ffff 50%, #00ff00 67%, #ffff00 84%, #ff0000 100%);";a.style.cssText+="background: -webkit-linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);";a.style.cssText+="background: -o-linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);";a.style.cssText+="background: -ms-linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);";a.style.cssText+="background: linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);"}var q=function(f,n){function u(b){v(b);a.bind(window,"mousemove",v);a.bind(window,"mouseup",l)}function l(){a.unbind(window,"mousemove",v);a.unbind(window,"mouseup",l)}function g(){var a=e(this.value);!1!==a?(t.__color.__state=a,t.setValue(t.__color.toOriginal())):this.value=t.__color.toString()}function k(){a.unbind(window,"mousemove",w);a.unbind(window,"mouseup",k)}function v(b){b.preventDefault();var c=a.getWidth(t.__saturation_field),d=a.getOffset(t.__saturation_field),e=(b.clientX-d.left+document.body.scrollLeft)/c;b=1-(b.clientY-d.top+document.body.scrollTop)/c;1b&&(b=0);1e&&(e=0);t.__color.v=b;t.__color.s=e;t.setValue(t.__color.toOriginal());return!1}function w(b){b.preventDefault();var c=a.getHeight(t.__hue_field),d=a.getOffset(t.__hue_field);b=1-(b.clientY-d.top+document.body.scrollTop)/c;1b&&(b=0);t.__color.h=360*b;t.setValue(t.__color.toOriginal());return!1}q.superclass.call(this,f,n);this.__color=new d(this.getValue());this.__temp=new d(0);var t=this;this.domElement=document.createElement("div");a.makeSelectable(this.domElement,!1);this.__selector=document.createElement("div");this.__selector.className="selector";this.__saturation_field=document.createElement("div");this.__saturation_field.className="saturation-field";this.__field_knob=document.createElement("div");this.__field_knob.className="field-knob";this.__field_knob_border="2px solid ";this.__hue_knob=document.createElement("div");this.__hue_knob.className="hue-knob";this.__hue_field=document.createElement("div");this.__hue_field.className="hue-field";this.__input=document.createElement("input");this.__input.type="text";this.__input_textShadow="0 1px 1px ";a.bind(this.__input,"keydown",function(a){13===a.keyCode&&g.call(this)});a.bind(this.__input,"blur",g);a.bind(this.__selector,"mousedown",function(b){a.addClass(this,"drag").bind(window,"mouseup",function(b){a.removeClass(t.__selector,"drag")})});var y=document.createElement("div");c.extend(this.__selector.style,{width:"122px",height:"102px",padding:"3px",backgroundColor:"#222",boxShadow:"0px 1px 3px rgba(0,0,0,0.3)"});c.extend(this.__field_knob.style,{position:"absolute",width:"12px",height:"12px", -border:this.__field_knob_border+(.5>this.__color.v?"#fff":"#000"),boxShadow:"0px 1px 3px rgba(0,0,0,0.5)",borderRadius:"12px",zIndex:1});c.extend(this.__hue_knob.style,{position:"absolute",width:"15px",height:"2px",borderRight:"4px solid #fff",zIndex:1});c.extend(this.__saturation_field.style,{width:"100px",height:"100px",border:"1px solid #555",marginRight:"3px",display:"inline-block",cursor:"pointer"});c.extend(y.style,{width:"100%",height:"100%",background:"none"});b(y,"top","rgba(0,0,0,0)","#000");c.extend(this.__hue_field.style,{width:"15px",height:"100px",display:"inline-block",border:"1px solid #555",cursor:"ns-resize"});p(this.__hue_field);c.extend(this.__input.style,{outline:"none",textAlign:"center",color:"#fff",border:0,fontWeight:"bold",textShadow:this.__input_textShadow+"rgba(0,0,0,0.7)"});a.bind(this.__saturation_field,"mousedown",u);a.bind(this.__field_knob,"mousedown",u);a.bind(this.__hue_field,"mousedown",function(b){w(b);a.bind(window,"mousemove",w);a.bind(window,"mouseup",k)});this.__saturation_field.appendChild(y);this.__selector.appendChild(this.__field_knob);this.__selector.appendChild(this.__saturation_field);this.__selector.appendChild(this.__hue_field);this.__hue_field.appendChild(this.__hue_knob);this.domElement.appendChild(this.__input);this.domElement.appendChild(this.__selector);this.updateDisplay()};q.superclass=f;c.extend(q.prototype,f.prototype,{updateDisplay:function(){var a=e(this.getValue());if(!1!==a){var f=!1;c.each(d.COMPONENTS,function(b){if(!c.isUndefined(a[b])&&!c.isUndefined(this.__color.__state[b])&&a[b]!==this.__color.__state[b])return f=!0,{}},this);f&&c.extend(this.__color.__state,a)}c.extend(this.__temp.__state,this.__color.__state);this.__temp.a=1;var l=.5>this.__color.v||.5a&&(a+=1);return{h:360*a,s:c/b,v:b/255}},rgb_to_hex:function(a,d,e){a=this.hex_with_component(0,2,a);a=this.hex_with_component(a,1,d);return a=this.hex_with_component(a,0,e)},component_from_hex:function(a,d){return a>>8*d&255},hex_with_component:function(a,d,e){return e<<(f=8*d)|a&~(255<0){var targetBody=this.datalink.getOrbitalBodyInfo(positionData["targetBody"]);requestParams["targetBodyTruePosition"]="b.o.truePositionAtUT["+targetBody.id+","+positionData["currentUniversalTime"]+"]";requestParams["targetRelativePosition"]="tar.o.relativePositionAtUTForOrbitPatch["+0+","+positionData["currentUniversalTime"]+"]"}else{var body=this.datalink.getOrbitalBodyInfo(positionData["tar.name"]);requestParams["targetTruePosition"]="b.o.truePositionAtUT["+body.id+","+positionData["currentUniversalTime"]+"]"}}this.datalink.sendMessage(requestParams,function(data){positionData["vesselCurrentPosition"]["truePosition"]=this.truePositionForRelativePosition(data["vesselRelativePosition"],data["vesselBodyTruePosition"]);if(positionData["tar.type"]){if(positionData["tar.o.orbitPatches"]){positionData["targetCurrentPosition"]["truePosition"]=this.truePositionForRelativePosition(data["targetRelativePosition"],data["targetBodyTruePosition"])}else{positionData["targetCurrentPosition"]["truePosition"]=data["targetTruePosition"]}}this.mutexUnlock();this.options.onRecalculate&&this.options.onRecalculate(positionData)}.bind(this))},truePositionForRelativePosition:function(relativePositionVector,frameOfReferenceVector){var transformedRelativePositionVector=[relativePositionVector[0],relativePositionVector[2],relativePositionVector[1]];return Math.matrixAdd(frameOfReferenceVector,transformedRelativePositionVector)},adjustUniversalTime:function(ut){return ut},initializeDatalink:function(){this.datalink.subscribeToData(["o.orbitPatches","t.universalTime","v.body","tar.name","tar.type","tar.o.orbitingBody","tar.o.orbitPatches","o.maneuverNodes"]);this.datalink.addReceiverFunction(this.recalculate.bind(this))}});var DockingMap=Class.create({initialize:function(dockingPositionData,datalink,containerID){this.container=$(containerID);this.GUIParameters={reset:this.resetPosition.bind(this),fullscreen:this.toggleFullscreen.bind(this),lastUpdate:"00:00:00"};this.buildSceneCameraAndRenderer();this.buildGUI();this.distanceScaleFactor=1;this.referenceBodyScaleFactor=1;this.sunBodyScaleFactor=1;this.maxLengthInThreeJS=2e3;this.vehicleLength=1;this.defaultZoomFactor=10;this.referenceBodyGeometry={};this.targetColor="#51ff07";this.datalink=datalink;this.dockingPositionData=dockingPositionData;this.dockingPositionData.options.onRecalculate=this.render.bind(this)},buildGUI:function(){var gui=new dat.GUI({autoPlace:false});gui.add(this.GUIParameters,"reset").name("Reset");gui.add(this.GUIParameters,"fullscreen").name("ToggleFullscreen");gui.add(this.GUIParameters,"lastUpdate").name("Updated").listen();this.container.appendChild(gui.domElement)},toggleFullscreen:function(){if(!THREEx.FullScreen.available()){return}if(THREEx.FullScreen.activated()){THREEx.FullScreen.cancel()}else{THREEx.FullScreen.request(this.container);this.renderer.domElement.focus()}},resizeRenderer:function(){this.renderer.setSize(1,1);this.camera.aspect=this.container.clientWidth/this.container.clientHeight;this.camera.updateProjectionMatrix();this.renderer.setSize(this.container.clientWidth,this.container.clientHeight)},buildSceneCameraAndRenderer:function(){this.renderer=new THREE.WebGLRenderer({antialias:true});this.renderer.setSize(this.container.clientWidth,this.container.clientHeight);this.renderer.setClearColor("#3A1604");this.container.appendChild(this.renderer.domElement);new ResizeSensor(this.container,function(){if(this.camera){this.resizeRenderer()}}.bind(this))},buildScene:function(){this.scene=new THREE.Scene},buildGeometry:function(positionData){this.group=new THREE.Group;this.scene.add(this.group);this.buildVesselGeometry(positionData);this.buildTargetGeometry(positionData)},buildVesselGeometry:function(positionData){var materials=[new THREE.MeshBasicMaterial({color:"white",wireframe:false}),new THREE.MeshBasicMaterial({color:"grey",wireframe:true})];var length=this.vehicleLength;var geometry=new THREE.BoxGeometry(length,length,length);var cube=THREE.SceneUtils.createMultiMaterialObject(geometry,materials);this.currentVesselGeometry=cube;this.setPosition(cube,[0,0,0]);this.group.add(cube)},buildTargetGeometry:function(positionData){if(!positionData.targetCurrentPosition||!positionData.targetCurrentPosition.truePosition){return}var materials=[new THREE.MeshBasicMaterial({color:this.targetColor,wireframe:false}),new THREE.MeshBasicMaterial({color:"grey",wireframe:true})];var length=this.vehicleLength;var geometry=new THREE.BoxGeometry(length,length,length);var cube=THREE.SceneUtils.createMultiMaterialObject(geometry,materials);this.targetGeometry=cube;var position=[positionData.targetCurrentPosition.truePosition[0]-positionData.vesselCurrentPosition.truePosition[0],positionData.targetCurrentPosition.truePosition[2]-positionData.vesselCurrentPosition.truePosition[2],positionData.targetCurrentPosition.truePosition[1]-positionData.vesselCurrentPosition.truePosition[1]];this.setPosition(cube,position);this.group.add(cube)},positionCamera:function(){var boundingBox=(new THREE.Box3).setFromObject(this.group);var scaleFactor=Math.max(this.maxLengthInThreeJS/boundingBox.max.x,this.maxLengthInThreeJS/boundingBox.max.y,this.maxLengthInThreeJS/boundingBox.max.z);this.group.scale.set(scaleFactor,scaleFactor,scaleFactor);var boundingBox=(new THREE.Box3).setFromObject(this.group);var vector=this.currentVesselGeometry.position.clone();vector.multiplyScalar(scaleFactor);var axisHelper=new THREE.AxisHelper(this.vehicleLength*3*scaleFactor);axisHelper.position.set(vector.x,vector.y,vector.z);axisHelper.rotation=this.currentVesselGeometry.rotation;this.scene.add(axisHelper);var targetVector=vector;var cameraX=vector.x+this.vehicleLength*this.defaultZoomFactor*scaleFactor;var cameraY=vector.y+this.vehicleLength*this.defaultZoomFactor*scaleFactor;var cameraZ=vector.z+this.vehicleLength*this.defaultZoomFactor*scaleFactor;if(!this.camera){this.camera=new THREE.PerspectiveCamera(75,window.innerWidth/window.innerHeight,.1,Number.MAX_SAFE_INTEGER)}if(!this.controls){this.controls=new THREE.OrbitControls(this.camera,this.renderer.domElement);this.controls.addEventListener("change",function(){this.renderer.render(this.scene,this.camera)}.bind(this))}if(!this.cameraSet){this.controls.target=vector;this.camera.position.set(cameraX,cameraY,cameraZ);this.camera.lookAt(vector);this.cameraSet=true}else{this.controls.target0=vector.clone();this.controls.position0=new THREE.Vector3(cameraX,cameraY,cameraZ)}this.controls.maxDistance=Math.max(Math.abs(boundingBox.min.x)+Math.abs(boundingBox.max.x),Math.abs(boundingBox.min.y)+Math.abs(boundingBox.max.y),Math.abs(boundingBox.min.z)+Math.abs(boundingBox.max.z))*2;this.controls.minDistance=this.vehicleLength*scaleFactor},resetPosition:function(){this.controls.reset()},getMiddle:function(min,max){return min+(Math.abs(min)+Math.abs(max))/2},setPosition:function(mesh,vector){var vector=this.buildVector(vector);mesh.position.x=vector.x;mesh.position.y=vector.y;mesh.position.z=vector.z},buildVector:function(vector){return new THREE.Vector3(vector[0]*this.distanceScaleFactor,vector[1]*this.distanceScaleFactor,vector[2]*this.distanceScaleFactor)},render:function(formattedData){requestAnimationFrame(function(){this.buildScene();this.buildGeometry(formattedData);this.positionCamera();this.renderer.render(this.scene,this.camera);this.GUIParameters.lastUpdate=TimeFormatters.formatUT(formattedData.currentUniversalTime)}.bind(this))}});(function(root,factory){if(typeof define==="function"&&define.amd){define(factory)}else if(typeof exports==="object"){module.exports=factory()}else{root.ResizeSensor=factory()}})(this,function(){var requestAnimationFrame=window.requestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||function(fn){return window.setTimeout(fn,20)};function forEachElement(elements,callback){var elementsType=Object.prototype.toString.call(elements);var isCollectionTyped="[object Array]"===elementsType||"[object NodeList]"===elementsType||"[object HTMLCollection]"===elementsType||"undefined"!==typeof jQuery&&elements instanceof jQuery||"undefined"!==typeof Elements&&elements instanceof Elements;var i=0,j=elements.length;if(isCollectionTyped){for(;i
  • */\n /** Controllers */ }\n .dg.main {\n /** Scrollbar */ }\n .dg.main::-webkit-scrollbar {\n width: 5px;\n background: #1a1a1a; }\n .dg.main::-webkit-scrollbar-corner {\n height: 0;\n display: none; }\n .dg.main::-webkit-scrollbar-thumb {\n border-radius: 5px;\n background: #676767; }\n .dg li:not(.folder) {\n background: #1a1a1a;\n border-bottom: 1px solid #2c2c2c; }\n .dg li.save-row {\n line-height: 25px;\n background: #dad5cb;\n border: 0; }\n .dg li.save-row select {\n margin-left: 5px;\n width: 108px; }\n .dg li.save-row .button {\n margin-left: 5px;\n margin-top: 1px;\n border-radius: 2px;\n font-size: 9px;\n line-height: 7px;\n padding: 4px 4px 5px 4px;\n background: #c5bdad;\n color: #fff;\n text-shadow: 0 1px 0 #b0a58f;\n box-shadow: 0 -1px 0 #b0a58f;\n cursor: pointer; }\n .dg li.save-row .button.gears {\n background: #c5bdad url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAANCAYAAAB/9ZQ7AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAQJJREFUeNpiYKAU/P//PwGIC/ApCABiBSAW+I8AClAcgKxQ4T9hoMAEUrxx2QSGN6+egDX+/vWT4e7N82AMYoPAx/evwWoYoSYbACX2s7KxCxzcsezDh3evFoDEBYTEEqycggWAzA9AuUSQQgeYPa9fPv6/YWm/Acx5IPb7ty/fw+QZblw67vDs8R0YHyQhgObx+yAJkBqmG5dPPDh1aPOGR/eugW0G4vlIoTIfyFcA+QekhhHJhPdQxbiAIguMBTQZrPD7108M6roWYDFQiIAAv6Aow/1bFwXgis+f2LUAynwoIaNcz8XNx3Dl7MEJUDGQpx9gtQ8YCueB+D26OECAAQDadt7e46D42QAAAABJRU5ErkJggg==) 2px 1px no-repeat;\n height: 7px;\n width: 8px; }\n .dg li.save-row .button:hover {\n background-color: #bab19e;\n box-shadow: 0 -1px 0 #b0a58f; }\n .dg li.folder {\n border-bottom: 0; }\n .dg li.title {\n padding-left: 16px;\n background: black url(data:image/gif;base64,R0lGODlhBQAFAJEAAP////Pz8////////yH5BAEAAAIALAAAAAAFAAUAAAIIlI+hKgFxoCgAOw==) 6px 10px no-repeat;\n cursor: pointer;\n border-bottom: 1px solid rgba(255, 255, 255, 0.2); }\n .dg .closed li.title {\n background-image: url(data:image/gif;base64,R0lGODlhBQAFAJEAAP////Pz8////////yH5BAEAAAIALAAAAAAFAAUAAAIIlGIWqMCbWAEAOw==); }\n .dg .cr.boolean {\n border-left: 3px solid #806787; }\n .dg .cr.function {\n border-left: 3px solid #e61d5f; }\n .dg .cr.number {\n border-left: 3px solid #2fa1d6; }\n .dg .cr.number input[type=text] {\n color: #2fa1d6; }\n .dg .cr.string {\n border-left: 3px solid #1ed36f; }\n .dg .cr.string input[type=text] {\n color: #1ed36f; }\n .dg .cr.function:hover, .dg .cr.boolean:hover {\n background: #111; }\n .dg .c input[type=text] {\n background: #303030;\n outline: none; }\n .dg .c input[type=text]:hover {\n background: #3c3c3c; }\n .dg .c input[type=text]:focus {\n background: #494949;\n color: #fff; }\n .dg .c .slider {\n background: #303030;\n cursor: ew-resize; }\n .dg .c .slider-fg {\n background: #2fa1d6; }\n .dg .c .slider:hover {\n background: #3c3c3c; }\n .dg .c .slider:hover .slider-fg {\n background: #44abda; }\n", +dat.controllers.factory=function(f,a,d,e,c,b,p){return function(q,l,r,n){var u=q[l];if(p.isArray(r)||p.isObject(r))return new f(q,l,r);if(p.isNumber(u))return p.isNumber(r)&&p.isNumber(n)?new d(q,l,r,n):new a(q,l,{min:r,max:n});if(p.isString(u))return new e(q,l);if(p.isFunction(u))return new c(q,l,"");if(p.isBoolean(u))return new b(q,l)}}(dat.controllers.OptionController,dat.controllers.NumberControllerBox,dat.controllers.NumberControllerSlider,dat.controllers.StringController=function(f,a,d){var e= +function(c,b){function d(){f.setValue(f.__input.value)}e.superclass.call(this,c,b);var f=this;this.__input=document.createElement("input");this.__input.setAttribute("type","text");a.bind(this.__input,"keyup",d);a.bind(this.__input,"change",d);a.bind(this.__input,"blur",function(){f.__onFinishChange&&f.__onFinishChange.call(f,f.getValue())});a.bind(this.__input,"keydown",function(a){13===a.keyCode&&this.blur()});this.updateDisplay();this.domElement.appendChild(this.__input)};e.superclass=f;d.extend(e.prototype, +f.prototype,{updateDisplay:function(){a.isActive(this.__input)||(this.__input.value=this.getValue());return e.superclass.prototype.updateDisplay.call(this)}});return e}(dat.controllers.Controller,dat.dom.dom,dat.utils.common),dat.controllers.FunctionController,dat.controllers.BooleanController,dat.utils.common),dat.controllers.Controller,dat.controllers.BooleanController,dat.controllers.FunctionController,dat.controllers.NumberControllerBox,dat.controllers.NumberControllerSlider,dat.controllers.OptionController, +dat.controllers.ColorController=function(f,a,d,e,c){function b(a,b,d,e){a.style.background="";c.each(l,function(c){a.style.cssText+="background: "+c+"linear-gradient("+b+", "+d+" 0%, "+e+" 100%); "})}function p(a){a.style.background="";a.style.cssText+="background: -moz-linear-gradient(top, #ff0000 0%, #ff00ff 17%, #0000ff 34%, #00ffff 50%, #00ff00 67%, #ffff00 84%, #ff0000 100%);";a.style.cssText+="background: -webkit-linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);"; +a.style.cssText+="background: -o-linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);";a.style.cssText+="background: -ms-linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);";a.style.cssText+="background: linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);"}var q=function(f,n){function u(b){v(b);a.bind(window,"mousemove",v);a.bind(window, +"mouseup",l)}function l(){a.unbind(window,"mousemove",v);a.unbind(window,"mouseup",l)}function g(){var a=e(this.value);!1!==a?(t.__color.__state=a,t.setValue(t.__color.toOriginal())):this.value=t.__color.toString()}function k(){a.unbind(window,"mousemove",w);a.unbind(window,"mouseup",k)}function v(b){b.preventDefault();var c=a.getWidth(t.__saturation_field),d=a.getOffset(t.__saturation_field),e=(b.clientX-d.left+document.body.scrollLeft)/c;b=1-(b.clientY-d.top+document.body.scrollTop)/c;1 +b&&(b=0);1e&&(e=0);t.__color.v=b;t.__color.s=e;t.setValue(t.__color.toOriginal());return!1}function w(b){b.preventDefault();var c=a.getHeight(t.__hue_field),d=a.getOffset(t.__hue_field);b=1-(b.clientY-d.top+document.body.scrollTop)/c;1b&&(b=0);t.__color.h=360*b;t.setValue(t.__color.toOriginal());return!1}q.superclass.call(this,f,n);this.__color=new d(this.getValue());this.__temp=new d(0);var t=this;this.domElement=document.createElement("div");a.makeSelectable(this.domElement,!1); +this.__selector=document.createElement("div");this.__selector.className="selector";this.__saturation_field=document.createElement("div");this.__saturation_field.className="saturation-field";this.__field_knob=document.createElement("div");this.__field_knob.className="field-knob";this.__field_knob_border="2px solid ";this.__hue_knob=document.createElement("div");this.__hue_knob.className="hue-knob";this.__hue_field=document.createElement("div");this.__hue_field.className="hue-field";this.__input=document.createElement("input"); +this.__input.type="text";this.__input_textShadow="0 1px 1px ";a.bind(this.__input,"keydown",function(a){13===a.keyCode&&g.call(this)});a.bind(this.__input,"blur",g);a.bind(this.__selector,"mousedown",function(b){a.addClass(this,"drag").bind(window,"mouseup",function(b){a.removeClass(t.__selector,"drag")})});var y=document.createElement("div");c.extend(this.__selector.style,{width:"122px",height:"102px",padding:"3px",backgroundColor:"#222",boxShadow:"0px 1px 3px rgba(0,0,0,0.3)"});c.extend(this.__field_knob.style, +{position:"absolute",width:"12px",height:"12px",border:this.__field_knob_border+(.5>this.__color.v?"#fff":"#000"),boxShadow:"0px 1px 3px rgba(0,0,0,0.5)",borderRadius:"12px",zIndex:1});c.extend(this.__hue_knob.style,{position:"absolute",width:"15px",height:"2px",borderRight:"4px solid #fff",zIndex:1});c.extend(this.__saturation_field.style,{width:"100px",height:"100px",border:"1px solid #555",marginRight:"3px",display:"inline-block",cursor:"pointer"});c.extend(y.style,{width:"100%",height:"100%", +background:"none"});b(y,"top","rgba(0,0,0,0)","#000");c.extend(this.__hue_field.style,{width:"15px",height:"100px",display:"inline-block",border:"1px solid #555",cursor:"ns-resize"});p(this.__hue_field);c.extend(this.__input.style,{outline:"none",textAlign:"center",color:"#fff",border:0,fontWeight:"bold",textShadow:this.__input_textShadow+"rgba(0,0,0,0.7)"});a.bind(this.__saturation_field,"mousedown",u);a.bind(this.__field_knob,"mousedown",u);a.bind(this.__hue_field,"mousedown",function(b){w(b);a.bind(window, +"mousemove",w);a.bind(window,"mouseup",k)});this.__saturation_field.appendChild(y);this.__selector.appendChild(this.__field_knob);this.__selector.appendChild(this.__saturation_field);this.__selector.appendChild(this.__hue_field);this.__hue_field.appendChild(this.__hue_knob);this.domElement.appendChild(this.__input);this.domElement.appendChild(this.__selector);this.updateDisplay()};q.superclass=f;c.extend(q.prototype,f.prototype,{updateDisplay:function(){var a=e(this.getValue());if(!1!==a){var f=!1; +c.each(d.COMPONENTS,function(b){if(!c.isUndefined(a[b])&&!c.isUndefined(this.__color.__state[b])&&a[b]!==this.__color.__state[b])return f=!0,{}},this);f&&c.extend(this.__color.__state,a)}c.extend(this.__temp.__state,this.__color.__state);this.__temp.a=1;var l=.5>this.__color.v||.5a&&(a+=1);return{h:360*a,s:c/b,v:b/255}},rgb_to_hex:function(a,d,e){a=this.hex_with_component(0,2,a);a=this.hex_with_component(a,1,d);return a=this.hex_with_component(a,0,e)},component_from_hex:function(a,d){return a>>8*d&255},hex_with_component:function(a,d,e){return e<<(f=8*d)|a&~(255< 0){ + var targetBody = this.datalink.getOrbitalBodyInfo(positionData["targetBody"]) + requestParams["targetBodyTruePosition"] = 'b.o.truePositionAtUT[' + targetBody.id + ',' + positionData["currentUniversalTime"] + ']' + + requestParams["targetRelativePosition"] = "tar.o.relativePositionAtUTForOrbitPatch[" + 0 +","+ positionData["currentUniversalTime"] + "]" + } else{ + var body = this.datalink.getOrbitalBodyInfo(positionData['tar.name']) + requestParams["targetTruePosition"] = 'b.o.truePositionAtUT[' + body.id + ',' + positionData["currentUniversalTime"] + ']' + } + } + + this.datalink.sendMessage(requestParams, function(data){ + positionData["vesselCurrentPosition"]["truePosition"] = this.truePositionForRelativePosition( + data["vesselRelativePosition"], data["vesselBodyTruePosition"] + ) + + if(positionData['tar.type']){ + if(positionData['tar.o.orbitPatches']){ + positionData["targetCurrentPosition"]["truePosition"] = this.truePositionForRelativePosition( + data["targetRelativePosition"], data["targetBodyTruePosition"] + ) + } else{ + positionData["targetCurrentPosition"]["truePosition"] = data["targetTruePosition"] + } + } + + this.mutexUnlock() + this.options.onRecalculate && this.options.onRecalculate(positionData) + }.bind(this)) + }, + + truePositionForRelativePosition: function(relativePositionVector, frameOfReferenceVector){ + var transformedRelativePositionVector = [ + relativePositionVector[0], + relativePositionVector[2], + relativePositionVector[1], + ] + + return Math.matrixAdd(frameOfReferenceVector, transformedRelativePositionVector) + }, + + adjustUniversalTime: function(ut){ + return ut//.toFixed(3) + }, + + initializeDatalink: function(){ + this.datalink.subscribeToData([ + 'o.orbitPatches', 't.universalTime', 'v.body', + 'tar.name', 'tar.type', 'tar.o.orbitingBody', + 'tar.o.orbitPatches', 'o.maneuverNodes' + ]) + + this.datalink.addReceiverFunction(this.recalculate.bind(this)) + }, +}) +var DockingMap = Class.create({ + initialize: function(dockingPositionData, datalink, containerID){ + this.container = $(containerID) + + this.GUIParameters = { + "reset": this.resetPosition.bind(this), + "fullscreen": this.toggleFullscreen.bind(this), + "lastUpdate": '00:00:00' + } + + this.buildSceneCameraAndRenderer() + this.buildGUI() + + this.distanceScaleFactor = 1 + this.referenceBodyScaleFactor = 1 + this.sunBodyScaleFactor = 1 + this.maxLengthInThreeJS = 2000 + this.vehicleLength = 1 + this.defaultZoomFactor = 10 + + this.referenceBodyGeometry = {} + + this.targetColor = '#51ff07' + + this.datalink = datalink + this.dockingPositionData = dockingPositionData + this.dockingPositionData.options.onRecalculate = this.render.bind(this) + }, + + buildGUI: function(){ + var gui = new dat.GUI({ autoPlace: false }); + gui.add( this.GUIParameters, 'reset' ).name('Reset'); + gui.add( this.GUIParameters, 'fullscreen' ).name('ToggleFullscreen'); + gui.add( this.GUIParameters, 'lastUpdate' ).name('Updated').listen(); + + this.container.appendChild(gui.domElement); + }, + + toggleFullscreen: function(){ + if(!THREEx.FullScreen.available()){return} + + if(THREEx.FullScreen.activated()){ + THREEx.FullScreen.cancel() + } else{ + THREEx.FullScreen.request(this.container) + this.renderer.domElement.focus() + } + }, + + resizeRenderer: function(){ + this.renderer.setSize(1, 1) + this.camera.aspect = this.container.clientWidth/this.container.clientHeight + this.camera.updateProjectionMatrix() + this.renderer.setSize(this.container.clientWidth, this.container.clientHeight) + }, + + buildSceneCameraAndRenderer: function(){ + this.renderer = new THREE.WebGLRenderer({antialias: true}) + + this.renderer.setSize( this.container.clientWidth, this.container.clientHeight ) + this.renderer.setClearColor('#3A1604') + this.container.appendChild( this.renderer.domElement ) + + new ResizeSensor(this.container, function() { + if(this.camera){ + this.resizeRenderer() + } + }.bind(this)); + }, + + buildScene: function(){ + this.scene = new THREE.Scene() + }, + + buildGeometry: function(positionData){ + this.group = new THREE.Group() + this.scene.add(this.group) + + this.buildVesselGeometry(positionData) + this.buildTargetGeometry(positionData) + }, + + buildVesselGeometry: function(positionData){ + var materials = [ + new THREE.MeshBasicMaterial( { color: 'white', 'wireframe': false } ), + new THREE.MeshBasicMaterial( { color: 'grey', 'wireframe': true } ) + ]; + + var length = this.vehicleLength + + var geometry = new THREE.BoxGeometry( length, length, length) + var cube = THREE.SceneUtils.createMultiMaterialObject( geometry, materials ); + + this.currentVesselGeometry = cube + + // Use the vessel as the zero point in the map + this.setPosition(cube, [0,0,0]) + this.group.add(cube) + }, + + buildTargetGeometry: function(positionData){ + if(!positionData.targetCurrentPosition || !positionData.targetCurrentPosition.truePosition){ + return + } + + var materials = [ + new THREE.MeshBasicMaterial( { color: this.targetColor, 'wireframe': false } ), + new THREE.MeshBasicMaterial( { color: 'grey', 'wireframe': true } ) + ]; + + var length = this.vehicleLength + + var geometry = new THREE.BoxGeometry( length, length, length) + var cube = THREE.SceneUtils.createMultiMaterialObject( geometry, materials ); + + this.targetGeometry = cube + + var position = [ + positionData.targetCurrentPosition.truePosition[0] - positionData.vesselCurrentPosition.truePosition[0], + positionData.targetCurrentPosition.truePosition[2] - positionData.vesselCurrentPosition.truePosition[2], + positionData.targetCurrentPosition.truePosition[1] - positionData.vesselCurrentPosition.truePosition[1] + ] + + this.setPosition(cube, position) + this.group.add(cube) + }, + + positionCamera: function(){ + var boundingBox = new THREE.Box3().setFromObject(this.group) + var scaleFactor = Math.max( + (this.maxLengthInThreeJS/boundingBox.max.x), + (this.maxLengthInThreeJS/boundingBox.max.y), + (this.maxLengthInThreeJS/boundingBox.max.z) + ) + + this.group.scale.set(scaleFactor, scaleFactor, scaleFactor) + var boundingBox = new THREE.Box3().setFromObject(this.group) + + // var hex = 0xff0000; + // var bbox = new THREE.BoundingBoxHelper( this.group, hex ); + // bbox.update(); + // this.scene.add( bbox ); + + var vector = this.currentVesselGeometry.position.clone() + vector.multiplyScalar(scaleFactor) + var axisHelper = new THREE.AxisHelper(this.vehicleLength * 3 * scaleFactor); + axisHelper.position.set(vector.x, vector.y, vector.z) + axisHelper.rotation = this.currentVesselGeometry.rotation + + this.scene.add( axisHelper ); + + var targetVector = vector; + // targetVector.multiplyScalar(scaleFactor) + + var cameraX = vector.x + ((this.vehicleLength * this.defaultZoomFactor) * scaleFactor) + var cameraY = vector.y + ((this.vehicleLength * this.defaultZoomFactor) * scaleFactor) + var cameraZ = vector.z + ((this.vehicleLength * this.defaultZoomFactor) * scaleFactor) + + if(!this.camera){ + this.camera = new THREE.PerspectiveCamera( 75, window.innerWidth/window.innerHeight, 0.1, Number.MAX_SAFE_INTEGER) + } + + if(!this.controls){ + this.controls = new THREE.OrbitControls( this.camera, this.renderer.domElement); + this.controls.addEventListener( 'change', function(){this.renderer.render(this.scene, this.camera)}.bind(this) ); // add this only if there is no animation loop (requestAnimationFrame) + } + + if(!this.cameraSet){ + this.controls.target = vector + this.camera.position.set(cameraX, cameraY, cameraZ) + this.camera.lookAt(vector) + // this.controls.rotate.x = -Math.PI/2 + this.cameraSet = true + } else{ + this.controls.target0 = vector.clone() + this.controls.position0 = new THREE.Vector3(cameraX, cameraY, cameraZ) + } + + this.controls.maxDistance = Math.max( + (Math.abs(boundingBox.min.x) + Math.abs(boundingBox.max.x)), + (Math.abs(boundingBox.min.y) + Math.abs(boundingBox.max.y)), + (Math.abs(boundingBox.min.z) + Math.abs(boundingBox.max.z)) + ) * 2 + this.controls.minDistance = this.vehicleLength * scaleFactor + }, + + resetPosition: function(){ + this.controls.reset() + }, + + getMiddle: function(min, max){ + return min + ((Math.abs(min) + Math.abs(max))/2.0) + }, + + setPosition: function(mesh, vector){ + var vector = this.buildVector(vector) + mesh.position.x = vector.x + mesh.position.y = vector.y + mesh.position.z = vector.z + }, + + buildVector: function(vector){ + return new THREE.Vector3( vector[0] * this.distanceScaleFactor, vector[1] * this.distanceScaleFactor, vector[2] * this.distanceScaleFactor ); + }, + + render: function (formattedData) { + requestAnimationFrame( function(){ + this.buildScene() + this.buildGeometry(formattedData) + this.positionCamera() + this.renderer.render(this.scene, this.camera) + this.GUIParameters.lastUpdate = TimeFormatters.formatUT(formattedData.currentUniversalTime) + }.bind(this)) + } +}) +/** + * Copyright Marc J. Schmidt. See the LICENSE file at the top-level + * directory of this distribution and at + * https://github.com/marcj/css-element-queries/blob/master/LICENSE. + */ +; +(function (root, factory) { + if (typeof define === "function" && define.amd) { + define(factory); + } else if (typeof exports === "object") { + module.exports = factory(); + } else { + root.ResizeSensor = factory(); + } +}(this, function () { + + // Only used for the dirty checking, so the event callback count is limted to max 1 call per fps per sensor. + // In combination with the event based resize sensor this saves cpu time, because the sensor is too fast and + // would generate too many unnecessary events. + var requestAnimationFrame = window.requestAnimationFrame || + window.mozRequestAnimationFrame || + window.webkitRequestAnimationFrame || + function (fn) { + return window.setTimeout(fn, 20); + }; + + /** + * Iterate over each of the provided element(s). + * + * @param {HTMLElement|HTMLElement[]} elements + * @param {Function} callback + */ + function forEachElement(elements, callback){ + var elementsType = Object.prototype.toString.call(elements); + var isCollectionTyped = ('[object Array]' === elementsType + || ('[object NodeList]' === elementsType) + || ('[object HTMLCollection]' === elementsType) + || ('undefined' !== typeof jQuery && elements instanceof jQuery) //jquery + || ('undefined' !== typeof Elements && elements instanceof Elements) //mootools + ); + var i = 0, j = elements.length; + if (isCollectionTyped) { + for (; i < j; i++) { + callback(elements[i]); + } + } else { + callback(elements); + } + } + + /** + * Class for dimension change detection. + * + * @param {Element|Element[]|Elements|jQuery} element + * @param {Function} callback + * + * @constructor + */ + var ResizeSensor = function(element, callback) { + /** + * + * @constructor + */ + function EventQueue() { + var q = []; + this.add = function(ev) { + q.push(ev); + }; + + var i, j; + this.call = function() { + for (i = 0, j = q.length; i < j; i++) { + q[i].call(); + } + }; + + this.remove = function(ev) { + var newQueue = []; + for(i = 0, j = q.length; i < j; i++) { + if(q[i] !== ev) newQueue.push(q[i]); + } + q = newQueue; + } + + this.length = function() { + return q.length; + } + } + + /** + * @param {HTMLElement} element + * @param {String} prop + * @returns {String|Number} + */ + function getComputedStyle(element, prop) { + if (element.currentStyle) { + return element.currentStyle[prop]; + } else if (window.getComputedStyle) { + return window.getComputedStyle(element, null).getPropertyValue(prop); + } else { + return element.style[prop]; + } + } + + /** + * + * @param {HTMLElement} element + * @param {Function} resized + */ + function attachResizeEvent(element, resized) { + if (!element.resizedAttached) { + element.resizedAttached = new EventQueue(); + element.resizedAttached.add(resized); + } else if (element.resizedAttached) { + element.resizedAttached.add(resized); + return; + } + + element.resizeSensor = document.createElement('div'); + element.resizeSensor.className = 'resize-sensor'; + var style = 'position: absolute; left: 0; top: 0; right: 0; bottom: 0; overflow: hidden; z-index: -1; visibility: hidden;'; + var styleChild = 'position: absolute; left: 0; top: 0; transition: 0s;'; + + element.resizeSensor.style.cssText = style; + element.resizeSensor.innerHTML = + '
    ' + + '
    ' + + '
    ' + + '
    ' + + '
    ' + + '
    '; + element.appendChild(element.resizeSensor); + + if (getComputedStyle(element, 'position') == 'static') { + element.style.position = 'relative'; + } + + var expand = element.resizeSensor.childNodes[0]; + var expandChild = expand.childNodes[0]; + var shrink = element.resizeSensor.childNodes[1]; + + var reset = function() { + expandChild.style.width = 100000 + 'px'; + expandChild.style.height = 100000 + 'px'; + + expand.scrollLeft = 100000; + expand.scrollTop = 100000; + + shrink.scrollLeft = 100000; + shrink.scrollTop = 100000; + }; + + reset(); + var dirty = false; + + var dirtyChecking = function() { + if (!element.resizedAttached) return; + + if (dirty) { + element.resizedAttached.call(); + dirty = false; + } + + requestAnimationFrame(dirtyChecking); + }; + + requestAnimationFrame(dirtyChecking); + var lastWidth, lastHeight; + var cachedWidth, cachedHeight; //useful to not query offsetWidth twice + + var onScroll = function() { + if ((cachedWidth = element.offsetWidth) != lastWidth || (cachedHeight = element.offsetHeight) != lastHeight) { + dirty = true; + + lastWidth = cachedWidth; + lastHeight = cachedHeight; + } + reset(); + }; + + var addEvent = function(el, name, cb) { + if (el.attachEvent) { + el.attachEvent('on' + name, cb); + } else { + el.addEventListener(name, cb); + } + }; + + addEvent(expand, 'scroll', onScroll); + addEvent(shrink, 'scroll', onScroll); + } + + forEachElement(element, function(elem){ + attachResizeEvent(elem, callback); + }); + + this.detach = function(ev) { + ResizeSensor.detach(element, ev); + }; + }; + + ResizeSensor.detach = function(element, ev) { + forEachElement(element, function(elem){ + if(elem.resizedAttached && typeof ev == "function"){ + elem.resizedAttached.remove(ev); + if(elem.resizedAttached.length()) return; + } + if (elem.resizeSensor) { + elem.removeChild(elem.resizeSensor); + delete elem.resizeSensor; + delete elem.resizedAttached; + } + }); + }; + + return ResizeSensor; + +})); + +var CameraFeed = Class.create({ + initialize: function(datalink, options){ + this.datalink = datalink + + this.options = options || {} + this.cameraData = [] + this.selectedCameraURL = "" + this.selectedCameraName = "" + this.initializeDatalink() + this.initializeObservers() + this.initializeImageRefresh() + }, + + initializeDatalink: function(){ + setInterval(function(){ + this.datalink.getCameraList(this.updateCameraList.bind(this)) + }.bind(this), 1000); + }, + + initializeImageRefresh: function(){ + setInterval(function(){ + if(!this.hasSelectedCamera()){ return } + this.options.cameraImage.src = this.options.cameraImage.getAttribute('data-base-url') + "?" + Math.floor((Math.random() * 100) + 1) + }.bind(this), 1000); + }, + + initializeObservers: function(){ + this.options.cameraList.observe('click', function(event){ + var clickedButton = event.findElement('button'); + if (clickedButton) { + this.selectCameraAndHideList( + clickedButton.getAttribute("data-image-name"), + clickedButton.getAttribute("data-image-url") + ) + } + }.bind(this)) + + this.options.showCameraList.observe('click', this.toggleCameraList.bind(this)) + }, + + hasSelectedCamera: function(){ + return this.selectedCameraURL != "" + }, + + setSelectedCamera: function(name, image_url){ + this.selectedCameraName = name + this.selectedCameraURL = image_url + this.options.cameraName.update(this.selectedCameraName) + this.options.cameraImage.setAttribute('src', this.selectedCameraURL) + this.options.cameraImage.setAttribute('data-base-url',this.selectedCameraURL) + }, + + selectCameraAndHideList: function(name, image_url){ + this.setSelectedCamera(name, image_url) + this.hideCameraList() + }, + + hideCameraList: function(){ + this.options.cameraListContainer.addClassName('hidden') + }, + + showCameraList: function(){ + this.options.cameraListContainer.removeClassName('hidden') + }, + + toggleCameraList: function(){ + this.options.cameraListContainer.toggleClassName('hidden') + }, + + updateCameraList: function(data){ + // console.log(data) + var sortedData = data.sort(function(a,b){ + //the flight camera should always be on top + if(a.name == "TelemachusFlightCamera"){ + return -1 + } + + //otherwise, compare normally + return a.name.localeCompare(b.name); + }); + + //clear existing child nodes in camera list + while (this.options.cameraList.hasChildNodes()){ + this.options.cameraList.removeChild(this.options.cameraList.lastChild); + } + + for (var i = 0; i < sortedData.length; i++) { + var cameraObject = sortedData[i] + + if(!this.hasSelectedCamera()){ + this.setSelectedCamera(cameraObject.name, cameraObject.url) + } + + var docFragment = document.createDocumentFragment() + var li = document.createElement('li') + var selectCamera = document.createElement("button") + selectCamera.setAttribute('data-image-name', cameraObject.name) + selectCamera.setAttribute('data-image-url', cameraObject.url) + if(this.selectedCameraURL == cameraObject.url){ + selectCamera.addClassName("selected") + } + selectCamera.update(cameraObject.name) + + li.appendChild(selectCamera) + docFragment.appendChild(li) + this.options.cameraList.appendChild(docFragment) + } + + this.cameraData = sortedData + } +}) \ No newline at end of file diff --git a/public/assets/ground-track.js b/public/assets/ground-track.js index 6792ef6..2a8d31b 100644 --- a/public/assets/ground-track.js +++ b/public/assets/ground-track.js @@ -1,19 +1,9276 @@ -Math.toDegrees=function(angleInRadians){return angleInRadians*(180/Math.PI)};Math.toRadians=function(angleInDegrees){return angleInDegrees*(Math.PI/180)};Math.crossProduct=function(x,y){[x[1]*y[2]-x[2]*y[1],x[2]*y[0]-x[0]*y[2],x[0]*y[1]-x[1]*y[0]]};Math.sign=Math.sign||function(x){x=+x;if(x===0||isNaN(x)){return x}return x>0?1:-1};Math.cosh=Math.cosh||function(x){return(Math.exp(x)+Math.exp(-x))/2};Math.sinh=Math.sinh||function(x){return(Math.exp(x)-Math.exp(-x))/2};Math.matrixAdd=Math.matrixAdd||function(){var arrays=arguments,results=[],count=arrays[0].length,L=arrays.length,sum,next=0,i;while(next-1?e(a,b,c):b.indexOf("%")>-1?f(a,b,c):b.indexOf(":")>-1?g(a,b):i(a._value,b,c)}function d(a,b){var c,d,e,f,g,i=b,j=["KB","MB","GB","TB","PB","EB","ZB","YB"],k=!1;if(b.indexOf(":")>-1)a._value=h(b);else if(b===q)a._value=0;else{for("."!==o[p].delimiters.decimal&&(b=b.replace(/\./g,"").replace(o[p].delimiters.decimal,".")),c=new RegExp("[^a-zA-Z]"+o[p].abbreviations.thousand+"(?:\\)|(\\"+o[p].currency.symbol+")?(?:\\))?)?$"),d=new RegExp("[^a-zA-Z]"+o[p].abbreviations.million+"(?:\\)|(\\"+o[p].currency.symbol+")?(?:\\))?)?$"),e=new RegExp("[^a-zA-Z]"+o[p].abbreviations.billion+"(?:\\)|(\\"+o[p].currency.symbol+")?(?:\\))?)?$"),f=new RegExp("[^a-zA-Z]"+o[p].abbreviations.trillion+"(?:\\)|(\\"+o[p].currency.symbol+")?(?:\\))?)?$"),g=0;g<=j.length&&!(k=b.indexOf(j[g])>-1?Math.pow(1024,g+1):!1);g++);a._value=(k?k:1)*(i.match(c)?Math.pow(10,3):1)*(i.match(d)?Math.pow(10,6):1)*(i.match(e)?Math.pow(10,9):1)*(i.match(f)?Math.pow(10,12):1)*(b.indexOf("%")>-1?.01:1)*((b.split("-").length+Math.min(b.split("(").length-1,b.split(")").length-1))%2?1:-1)*Number(b.replace(/[^0-9\.]+/g,"")),a._value=k?Math.ceil(a._value):a._value}return a._value}function e(a,b,c){var d,e,f=b.indexOf("$"),g=b.indexOf("("),h=b.indexOf("-"),j="";return b.indexOf(" $")>-1?(j=" ",b=b.replace(" $","")):b.indexOf("$ ")>-1?(j=" ",b=b.replace("$ ","")):b=b.replace("$",""),e=i(a._value,b,c),1>=f?e.indexOf("(")>-1||e.indexOf("-")>-1?(e=e.split(""),d=1,(g>f||h>f)&&(d=0),e.splice(d,0,o[p].currency.symbol+j),e=e.join("")):e=o[p].currency.symbol+j+e:e.indexOf(")")>-1?(e=e.split(""),e.splice(-1,0,j+o[p].currency.symbol),e=e.join("")):e=e+j+o[p].currency.symbol,e}function f(a,b,c){var d,e="",f=100*a._value;return b.indexOf(" %")>-1?(e=" ",b=b.replace(" %","")):b=b.replace("%",""),d=i(f,b,c),d.indexOf(")")>-1?(d=d.split(""),d.splice(-1,0,e+"%"),d=d.join("")):d=d+e+"%",d}function g(a){var b=Math.floor(a._value/60/60),c=Math.floor((a._value-60*b*60)/60),d=Math.round(a._value-60*b*60-60*c);return b+":"+(10>c?"0"+c:c)+":"+(10>d?"0"+d:d)}function h(a){var b=a.split(":"),c=0;return 3===b.length?(c+=60*Number(b[0])*60,c+=60*Number(b[1]),c+=Number(b[2])):2===b.length&&(c+=60*Number(b[0]),c+=Number(b[1])),Number(c)}function i(a,c,d){var e,f,g,h,i,j,k=!1,l=!1,m=!1,n="",r=!1,s=!1,t=!1,u=!1,v=!1,w="",x="",y=Math.abs(a),z=["B","KB","MB","GB","TB","PB","EB","ZB","YB"],A="",B=!1;if(0===a&&null!==q)return q;if(c.indexOf("(")>-1?(k=!0,c=c.slice(1,-1)):c.indexOf("+")>-1&&(l=!0,c=c.replace(/\+/g,"")),c.indexOf("a")>-1&&(r=c.indexOf("aK")>=0,s=c.indexOf("aM")>=0,t=c.indexOf("aB")>=0,u=c.indexOf("aT")>=0,v=r||s||t||u,c.indexOf(" a")>-1?(n=" ",c=c.replace(" a","")):c=c.replace("a",""),y>=Math.pow(10,12)&&!v||u?(n+=o[p].abbreviations.trillion,a/=Math.pow(10,12)):y=Math.pow(10,9)&&!v||t?(n+=o[p].abbreviations.billion,a/=Math.pow(10,9)):y=Math.pow(10,6)&&!v||s?(n+=o[p].abbreviations.million,a/=Math.pow(10,6)):(y=Math.pow(10,3)&&!v||r)&&(n+=o[p].abbreviations.thousand,a/=Math.pow(10,3))),c.indexOf("b")>-1)for(c.indexOf(" b")>-1?(w=" ",c=c.replace(" b","")):c=c.replace("b",""),g=0;g<=z.length;g++)if(e=Math.pow(1024,g),f=Math.pow(1024,g+1),a>=e&&f>a){w+=z[g],e>0&&(a/=e);break}return c.indexOf("o")>-1&&(c.indexOf(" o")>-1?(x=" ",c=c.replace(" o","")):c=c.replace("o",""),x+=o[p].ordinal(a)),c.indexOf("[.]")>-1&&(m=!0,c=c.replace("[.]",".")),h=a.toString().split(".")[0],i=c.split(".")[1],j=c.indexOf(","),i?(i.indexOf("[")>-1?(i=i.replace("]",""),i=i.split("["),A=b(a,i[0].length+i[1].length,d,i[1].length)):A=b(a,i.length,d),h=A.split(".")[0],A=A.split(".")[1].length?o[p].delimiters.decimal+A.split(".")[1]:"",m&&0===Number(A.slice(1))&&(A="")):h=b(a,null,d),h.indexOf("-")>-1&&(h=h.slice(1),B=!0),j>-1&&(h=h.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g,"$1"+o[p].delimiters.thousands)),0===c.indexOf(".")&&(h=""),(k&&B?"(":"")+(!k&&B?"-":"")+(!B&&l?"+":"")+h+A+(x?x:"")+(n?n:"")+(w?w:"")+(k&&B?")":"")}function j(a,b){o[a]=b}function k(a){var b=a.toString().split(".");return b.length<2?1:Math.pow(10,b[1].length)}function l(){var a=Array.prototype.slice.call(arguments);return a.reduce(function(a,b){var c=k(a),d=k(b);return c>d?c:d},-1/0)}var m,n="1.5.3",o={},p="en",q=null,r="0,0",s="undefined"!=typeof module&&module.exports;m=function(b){return m.isNumeral(b)?b=b.value():0===b||"undefined"==typeof b?b=0:Number(b)||(b=m.fn.unformat(b)),new a(Number(b))},m.version=n,m.isNumeral=function(b){return b instanceof a},m.language=function(a,b){if(!a)return p;if(a&&!b){if(!o[a])throw new Error("Unknown language : "+a);p=a}return(b||!o[a])&&j(a,b),m},m.languageData=function(a){if(!a)return o[p];if(!o[a])throw new Error("Unknown language : "+a);return o[a]},m.language("en",{delimiters:{thousands:",",decimal:"."},abbreviations:{thousand:"k",million:"m",billion:"b",trillion:"t"},ordinal:function(a){var b=a%10;return 1===~~(a%100/10)?"th":1===b?"st":2===b?"nd":3===b?"rd":"th"},currency:{symbol:"$"}}),m.zeroFormat=function(a){q="string"==typeof a?a:null},m.defaultFormat=function(a){r="string"==typeof a?a:"0.0"},"function"!=typeof Array.prototype.reduce&&(Array.prototype.reduce=function(a,b){"use strict";if(null===this||"undefined"==typeof this)throw new TypeError("Array.prototype.reduce called on null or undefined");if("function"!=typeof a)throw new TypeError(a+" is not a function");var c,d,e=this.length>>>0,f=!1;for(1c;++c)this.hasOwnProperty(c)&&(f?d=a(d,this[c],c,this):(d=this[c],f=!0));if(!f)throw new TypeError("Reduce of empty array with no initial value");return d}),m.fn=a.prototype={clone:function(){return m(this)},format:function(a,b){return c(this,a?a:r,void 0!==b?b:Math.round)},unformat:function(a){return"[object Number]"===Object.prototype.toString.call(a)?a:d(this,a?a:r)},value:function(){return this._value},valueOf:function(){return this._value},set:function(a){return this._value=Number(a),this},add:function(a){function b(a,b){return a+c*b}var c=l.call(null,this._value,a);return this._value=[this._value,a].reduce(b,0)/c,this},subtract:function(a){function b(a,b){return a-c*b}var c=l.call(null,this._value,a);return this._value=[a].reduce(b,this._value*c)/c,this},multiply:function(a){function b(a,b){var c=l(a,b);return a*c*b*c/(c*c)}return this._value=[this._value,a].reduce(b,1),this},divide:function(a){function b(a,b){var c=l(a,b);return a*c/(b*c)}return this._value=[this._value,a].reduce(b),this},difference:function(a){return Math.abs(m(this._value).subtract(a).value())}},s&&(module.exports=m),"undefined"==typeof ender&&(this.numeral=m),"function"==typeof define&&define.amd&&define([],function(){return m})}).call(this);var TimeFormatters={formatUT:function(t){var day,year;if(t==null){t=0}year=(t/(365*24*3600)|0)+1;t%=365*24*3600;day=(t/(24*3600)|0)+1;t%=24*3600;return"Year "+year+", Day "+day+", "+this.hourMinSec(t)+" UT"},formatMET:function(t){var result;if(t==null){t=0}result="T+";if(t>=365*24*3600){result+=(t/(365*24*3600)|0)+":";t%=365*24*3600;if(t<24*3600){result+="0:"}}if(t>=24*3600){result+=(t/(24*3600)|0)+":"}t%=24*3600;return result+this.hourMinSec(t)+" MET"},hourMinSec:function(t){var hour,min,sec;if(t==null){t=0}hour=t/3600|0;if(hour<10){hour="0"+hour}t%=3600;min=t/60|0;if(min<10){min="0"+min}sec=(t%60|0).toFixed();if(sec<10){sec="0"+sec}return""+hour+":"+min+":"+sec},durationString:function(t){var result;if(t==null){t=0}result=t<0?"-":"";t=Math.abs(t);if(t>=365*24*3600){result+=(t/(365*24*3600)|0)+" years ";t%=365*24*3600;if(t<24*3600){result+="0 days "}}if(t>=24*3600){result+=(t/(24*3600)|0)+" days "}t%=24*3600;return result+this.hourMinSec(t)}};var DataFormatters={distanceString:function(value){return numeral(value).format("0,0.000 a")+"m"},heightFromTerrainString:function(value){if(value<=-1){return"NA"}return numeral(value).format("0,0.000 a")+"m"},degreeString:function(value){return numeral(value).format("0.000")+"°"},velocityString:function(value){return numeral(value).format("0,0.000 a")+"m/s"},temperatureString:function(value){if(!value){return"NA"}return numeral(value).format("0,000")+"°C"},accelerationSensorString:function(value){if(value[0]=="No Sensors of the Appropriate Type"){return"NA"}return numeral(value[1][0]).format("0,000")+"G"},pressureSensorString:function(value){if(value[0]=="No Sensors of the Appropriate Type"){return"NA"}return numeral(value[1][0]).format("0,000")+"Pa"},gravitySensorString:function(value){if(value[0]=="No Sensors of the Appropriate Type"){return"NA"}return numeral(value[1][0]).format("0,000 a")+"m/s²"},newtonsString:function(value){return numeral(value).format("0,0.00")+" N"},percentageString:function(value){return numeral(value).format("0%")},tonnageString:function(value){return numeral(value).format("0,0.00")+" t"},timeString:function(value){return numeral(value).format("00:00:00")},plainNumberString:function(value){return numeral(value).format("0,0.00")}};var Prototype={Version:"1.7.2",Browser:function(){var ua=navigator.userAgent;var isOpera=Object.prototype.toString.call(window.opera)=="[object Opera]";return{IE:!!window.attachEvent&&!isOpera,Opera:isOpera,WebKit:ua.indexOf("AppleWebKit/")>-1,Gecko:ua.indexOf("Gecko")>-1&&ua.indexOf("KHTML")===-1,MobileSafari:/Apple.*Mobile/.test(ua)}}(),BrowserFeatures:{XPath:!!document.evaluate,SelectorsAPI:!!document.querySelector,ElementExtensions:function(){var constructor=window.Element||window.HTMLElement;return!!(constructor&&constructor.prototype)}(),SpecificElementExtensions:function(){if(typeof window.HTMLDivElement!=="undefined")return true;var div=document.createElement("div"),form=document.createElement("form"),isSupported=false;if(div["__proto__"]&&div["__proto__"]!==form["__proto__"]){isSupported=true}div=form=null;return isSupported}()},ScriptFragment:"]*>([\\S\\s]*?)",JSONFilter:/^\/\*-secure-([\s\S]*)\*\/\s*$/,emptyFunction:function(){},K:function(x){return x}};if(Prototype.Browser.MobileSafari)Prototype.BrowserFeatures.SpecificElementExtensions=false;var Class=function(){var IS_DONTENUM_BUGGY=function(){for(var p in{toString:1}){if(p==="toString")return false}return true}();function subclass(){}function create(){var parent=null,properties=$A(arguments);if(Object.isFunction(properties[0]))parent=properties.shift();function klass(){this.initialize.apply(this,arguments)}Object.extend(klass,Class.Methods);klass.superclass=parent;klass.subclasses=[];if(parent){subclass.prototype=parent.prototype;klass.prototype=new subclass;parent.subclasses.push(klass)}for(var i=0,length=properties.length;i0){match=source.match(pattern);if(match&&match[0].length>0){result+=source.slice(0,match.index);result+=String.interpret(replacement(match));source=source.slice(match.index+match[0].length)}else{result+=source,source=""}}return result}function sub(pattern,replacement,count){replacement=prepareReplacement(replacement);count=Object.isUndefined(count)?1:count;return this.gsub(pattern,function(match){if(--count<0)return match[0];return replacement(match)})}function scan(pattern,iterator){this.gsub(pattern,iterator);return String(this)}function truncate(length,truncation){length=length||30;truncation=Object.isUndefined(truncation)?"...":truncation;return this.length>length?this.slice(0,length-truncation.length)+truncation:String(this)}function strip(){return this.replace(/^\s+/,"").replace(/\s+$/,"")}function stripTags(){return this.replace(/<\w+(\s+("[^"]*"|'[^']*'|[^>])+)?>|<\/\w+>/gi,"")}function stripScripts(){return this.replace(new RegExp(Prototype.ScriptFragment,"img"),"")}function extractScripts(){var matchAll=new RegExp(Prototype.ScriptFragment,"img"),matchOne=new RegExp(Prototype.ScriptFragment,"im");return(this.match(matchAll)||[]).map(function(scriptTag){return(scriptTag.match(matchOne)||["",""])[1]})}function evalScripts(){return this.extractScripts().map(function(script){return eval(script)})}function escapeHTML(){return this.replace(/&/g,"&").replace(//g,">")}function unescapeHTML(){return this.stripTags().replace(/</g,"<").replace(/>/g,">").replace(/&/g,"&")}function toQueryParams(separator){var match=this.strip().match(/([^?#]*)(#.*)?$/);if(!match)return{};return match[1].split(separator||"&").inject({},function(hash,pair){if((pair=pair.split("="))[0]){var key=decodeURIComponent(pair.shift()),value=pair.length>1?pair.join("="):pair[0];if(value!=undefined){value=value.gsub("+"," ");value=decodeURIComponent(value)}if(key in hash){if(!Object.isArray(hash[key]))hash[key]=[hash[key]];hash[key].push(value)}else hash[key]=value}return hash})}function toArray(){return this.split("")}function succ(){return this.slice(0,this.length-1)+String.fromCharCode(this.charCodeAt(this.length-1)+1)}function times(count){return count<1?"":new Array(count+1).join(this)}function camelize(){return this.replace(/-+(.)?/g,function(match,chr){return chr?chr.toUpperCase():""})}function capitalize(){return this.charAt(0).toUpperCase()+this.substring(1).toLowerCase()}function underscore(){return this.replace(/::/g,"/").replace(/([A-Z]+)([A-Z][a-z])/g,"$1_$2").replace(/([a-z\d])([A-Z])/g,"$1_$2").replace(/-/g,"_").toLowerCase()}function dasherize(){return this.replace(/_/g,"-")}function inspect(useDoubleQuotes){var escapedString=this.replace(/[\x00-\x1f\\]/g,function(character){if(character in String.specialChar){return String.specialChar[character]}return"\\u00"+character.charCodeAt().toPaddedString(2,16)});if(useDoubleQuotes)return'"'+escapedString.replace(/"/g,'\\"')+'"';return"'"+escapedString.replace(/'/g,"\\'")+"'"}function unfilterJSON(filter){return this.replace(filter||Prototype.JSONFilter,"$1")}function isJSON(){var str=this;if(str.blank())return false;str=str.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,"@");str=str.replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,"]");str=str.replace(/(?:^|:|,)(?:\s*\[)+/g,"");return/^[\],:{}\s]*$/.test(str)}function evalJSON(sanitize){var json=this.unfilterJSON(),cx=/[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g;if(cx.test(json)){json=json.replace(cx,function(a){return"\\u"+("0000"+a.charCodeAt(0).toString(16)).slice(-4)})}try{if(!sanitize||json.isJSON())return eval("("+json+")")}catch(e){}throw new SyntaxError("Badly formed JSON string: "+this.inspect())}function parseJSON(){var json=this.unfilterJSON();return JSON.parse(json)}function include(pattern){return this.indexOf(pattern)>-1}function startsWith(pattern,position){position=Object.isNumber(position)?position:0;return this.lastIndexOf(pattern,position)===position}function endsWith(pattern,position){pattern=String(pattern);position=Object.isNumber(position)?position:this.length;if(position<0)position=0;if(position>this.length)position=this.length;var d=position-pattern.length;return d>=0&&this.indexOf(pattern,d)===d}function empty(){return this==""}function blank(){return/^\s*$/.test(this)}function interpolate(object,pattern){return new Template(this,pattern).evaluate(object)}return{gsub:gsub,sub:sub,scan:scan,truncate:truncate,strip:String.prototype.trim||strip,stripTags:stripTags,stripScripts:stripScripts,extractScripts:extractScripts,evalScripts:evalScripts,escapeHTML:escapeHTML,unescapeHTML:unescapeHTML,toQueryParams:toQueryParams,parseQuery:toQueryParams,toArray:toArray,succ:succ,times:times,camelize:camelize,capitalize:capitalize,underscore:underscore,dasherize:dasherize,inspect:inspect,unfilterJSON:unfilterJSON,isJSON:isJSON,evalJSON:NATIVE_JSON_PARSE_SUPPORT?parseJSON:evalJSON,include:include,startsWith:String.prototype.startsWith||startsWith,endsWith:String.prototype.endsWith||endsWith,empty:empty,blank:blank,interpolate:interpolate}}());var Template=Class.create({initialize:function(template,pattern){this.template=template.toString();this.pattern=pattern||Template.Pattern},evaluate:function(object){if(object&&Object.isFunction(object.toTemplateReplacements))object=object.toTemplateReplacements();return this.template.gsub(this.pattern,function(match){if(object==null)return match[1]+"";var before=match[1]||"";if(before=="\\")return match[2];var ctx=object,expr=match[3],pattern=/^([^.[]+|\[((?:.*?[^\\])?)\])(\.|\[|$)/;match=pattern.exec(expr);if(match==null)return before;while(match!=null){var comp=match[1].startsWith("[")?match[2].replace(/\\\\]/g,"]"):match[1];ctx=ctx[comp];if(null==ctx||""==match[3])break;expr=expr.substring("["==match[3]?match[1].length:match[0].length);match=pattern.exec(expr)}return before+String.interpret(ctx)})}});Template.Pattern=/(^|.|\r|\n)(#\{(.*?)\})/;var $break={};var Enumerable=function(){function each(iterator,context){try{this._each(iterator,context)}catch(e){if(e!=$break)throw e}return this}function eachSlice(number,iterator,context){var index=-number,slices=[],array=this.toArray();if(number<1)return array;while((index+=number)=result)result=value},this);return result}function min(iterator,context){iterator=iterator||Prototype.K;var result;this.each(function(value,index){value=iterator.call(context,value,index,this);if(result==null||valueb?1:0}).pluck("value")}function toArray(){return this.map()}function zip(){var iterator=Prototype.K,args=$A(arguments);if(Object.isFunction(args.last()))iterator=args.pop();var collections=[this].concat(args).map($A);return this.map(function(value,index){return iterator(collections.pluck(index))})}function size(){return this.toArray().length}function inspect(){return"#"}return{each:each,eachSlice:eachSlice,all:all,every:all,any:any,some:any,collect:collect,map:collect,detect:detect,findAll:findAll,select:findAll,filter:findAll,grep:grep,include:include,member:include,inGroupsOf:inGroupsOf,inject:inject,invoke:invoke,max:max,min:min,partition:partition,pluck:pluck,reject:reject,sortBy:sortBy,toArray:toArray,entries:toArray,zip:zip,size:size,inspect:inspect,find:detect}}();function $A(iterable){if(!iterable)return[];if("toArray"in Object(iterable))return iterable.toArray();var length=iterable.length||0,results=new Array(length);while(length--)results[length]=iterable[length];return results}function $w(string){if(!Object.isString(string))return[];string=string.strip();return string?string.split(/\s+/):[]}Array.from=$A;(function(){var arrayProto=Array.prototype,slice=arrayProto.slice,_each=arrayProto.forEach;function each(iterator,context){for(var i=0,length=this.length>>>0;i>>0;if(length===0)return-1;i=Number(i);if(isNaN(i)){i=0}else if(i!==0&&isFinite(i)){i=(i>0?1:-1)*Math.floor(Math.abs(i))}if(i>length)return-1;var k=i>=0?i:Math.max(length-Math.abs(i),0);for(;k>>0;if(length===0)return-1;if(!Object.isUndefined(i)){i=Number(i);if(isNaN(i)){i=0}else if(i!==0&&isFinite(i)){i=(i>0?1:-1)*Math.floor(Math.abs(i))}}else{i=length}var k=i>=0?Math.min(i,length-1):length-Math.abs(i);for(;k>=0;k--)if(k in array&&array[k]===item)return k;return-1}function concat(_){var array=[],items=slice.call(arguments,0),item,n=0;items.unshift(this);for(var i=0,length=items.length;i>>0;i>>0;i>>0;i>>0;i"}function clone(){return new Hash(this)}return{initialize:initialize,_each:_each,set:set,get:get,unset:unset,toObject:toObject,toTemplateReplacements:toObject,keys:keys,values:values,index:index,merge:merge,update:update,toQueryString:toQueryString,inspect:inspect,toJSON:toObject,clone:clone}}());Hash.from=$H;Object.extend(Number.prototype,function(){function toColorPart(){return this.toPaddedString(2,16)}function succ(){return this+1}function times(iterator,context){$R(0,this,true).each(iterator,context);return this}function toPaddedString(length,radix){var string=this.toString(radix||10);return"0".times(length-string.length)+string}function abs(){return Math.abs(this)}function round(){return Math.round(this)}function ceil(){return Math.ceil(this)}function floor(){return Math.floor(this)}return{toColorPart:toColorPart,succ:succ,times:times,toPaddedString:toPaddedString,abs:abs,round:round,ceil:ceil,floor:floor}}());function $R(start,end,exclusive){return new ObjectRange(start,end,exclusive)}var ObjectRange=Class.create(Enumerable,function(){function initialize(start,end,exclusive){this.start=start;this.end=end;this.exclusive=exclusive}function _each(iterator,context){var value=this.start,i;for(i=0;this.include(value);i++){iterator.call(context,value,i);value=value.succ()}}function include(value){if(value1&&!(readyState==4&&this._complete))this.respondToReadyState(this.transport.readyState)},setRequestHeaders:function(){var headers={"X-Requested-With":"XMLHttpRequest","X-Prototype-Version":Prototype.Version,Accept:"text/javascript, text/html, application/xml, text/xml, */*"};if(this.method=="post"){headers["Content-type"]=this.options.contentType+(this.options.encoding?"; charset="+this.options.encoding:"");if(this.transport.overrideMimeType&&(navigator.userAgent.match(/Gecko\/(\d{4})/)||[0,2005])[1]<2005)headers["Connection"]="close"}if(typeof this.options.requestHeaders=="object"){var extras=this.options.requestHeaders;if(Object.isFunction(extras.push))for(var i=0,length=extras.length;i=200&&status<300||status==304},getStatus:function(){try{if(this.transport.status===1223)return 204;return this.transport.status||0}catch(e){return 0}},respondToReadyState:function(readyState){var state=Ajax.Request.Events[readyState],response=new Ajax.Response(this);if(state=="Complete"){try{this._complete=true;(this.options["on"+response.status]||this.options["on"+(this.success()?"Success":"Failure")]||Prototype.emptyFunction)(response,response.headerJSON)}catch(e){this.dispatchException(e)}var contentType=response.getHeader("Content-type");if(this.options.evalJS=="force"||this.options.evalJS&&this.isSameOrigin()&&contentType&&contentType.match(/^\s*(text|application)\/(x-)?(java|ecma)script(;.*)?\s*$/i))this.evalResponse()}try{(this.options["on"+state]||Prototype.emptyFunction)(response,response.headerJSON);Ajax.Responders.dispatch("on"+state,this,response,response.headerJSON)}catch(e){this.dispatchException(e)}if(state=="Complete"){this.transport.onreadystatechange=Prototype.emptyFunction}},isSameOrigin:function(){var m=this.url.match(/^\s*https?:\/\/[^\/]*/);return!m||m[0]=="#{protocol}//#{domain}#{port}".interpolate({protocol:location.protocol,domain:document.domain,port:location.port?":"+location.port:""})},getHeader:function(name){try{return this.transport.getResponseHeader(name)||null}catch(e){return null}},evalResponse:function(){try{return eval((this.transport.responseText||"").unfilterJSON())}catch(e){this.dispatchException(e)}},dispatchException:function(exception){(this.options.onException||Prototype.emptyFunction)(this,exception);Ajax.Responders.dispatch("onException",this,exception)}});Ajax.Request.Events=["Uninitialized","Loading","Loaded","Interactive","Complete"];Ajax.Response=Class.create({initialize:function(request){this.request=request;var transport=this.transport=request.transport,readyState=this.readyState=transport.readyState;if(readyState>2&&!Prototype.Browser.IE||readyState==4){this.status=this.getStatus();this.statusText=this.getStatusText();this.responseText=String.interpret(transport.responseText);this.headerJSON=this._getHeaderJSON()}if(readyState==4){var xml=transport.responseXML;this.responseXML=Object.isUndefined(xml)?null:xml;this.responseJSON=this._getResponseJSON()}},status:0,statusText:"",getStatus:Ajax.Request.prototype.getStatus,getStatusText:function(){try{return this.transport.statusText||""}catch(e){return""}},getHeader:Ajax.Request.prototype.getHeader,getAllHeaders:function(){try{return this.getAllResponseHeaders()}catch(e){return null}},getResponseHeader:function(name){return this.transport.getResponseHeader(name)},getAllResponseHeaders:function(){return this.transport.getAllResponseHeaders()},_getHeaderJSON:function(){var json=this.getHeader("X-JSON");if(!json)return null;try{json=decodeURIComponent(escape(json))}catch(e){}try{return json.evalJSON(this.request.options.sanitizeJSON||!this.request.isSameOrigin())}catch(e){this.request.dispatchException(e)}},_getResponseJSON:function(){var options=this.request.options;if(!options.evalJSON||options.evalJSON!="force"&&!(this.getHeader("Content-type")||"").include("application/json")||this.responseText.blank())return null;try{return this.responseText.evalJSON(options.sanitizeJSON||!this.request.isSameOrigin())}catch(e){this.request.dispatchException(e)}}});Ajax.Updater=Class.create(Ajax.Request,{initialize:function($super,container,url,options){this.container={success:container.success||container,failure:container.failure||(container.success?null:container)};options=Object.clone(options);var onComplete=options.onComplete;options.onComplete=function(response,json){this.updateContent(response.responseText);if(Object.isFunction(onComplete))onComplete(response,json)}.bind(this);$super(url,options)},updateContent:function(responseText){var receiver=this.container[this.success()?"success":"failure"],options=this.options;if(!options.evalScripts)responseText=responseText.stripScripts();if(receiver=$(receiver)){if(options.insertion){if(Object.isString(options.insertion)){var insertion={};insertion[options.insertion]=responseText;receiver.insert(insertion)}else options.insertion(receiver,responseText)}else receiver.update(responseText)}}});Ajax.PeriodicalUpdater=Class.create(Ajax.Base,{initialize:function($super,container,url,options){$super(options);this.onComplete=this.options.onComplete;this.frequency=this.options.frequency||2;this.decay=this.options.decay||1;this.updater={};this.container=container;this.url=url;this.start()},start:function(){this.options.onComplete=this.updateComplete.bind(this);this.onTimerEvent()},stop:function(){this.updater.options.onComplete=undefined;clearTimeout(this.timer);(this.onComplete||Prototype.emptyFunction).apply(this,arguments)},updateComplete:function(response){if(this.options.decay){this.decay=response.responseText==this.lastText?this.decay*this.options.decay:1;this.lastText=response.responseText}this.timer=this.onTimerEvent.bind(this).delay(this.decay*this.frequency)},onTimerEvent:function(){this.updater=new Ajax.Updater(this.container,this.url,this.options)}});(function(GLOBAL){var UNDEFINED;var SLICE=Array.prototype.slice;var DIV=document.createElement("div");function $(element){if(arguments.length>1){for(var i=0,elements=[],length=arguments.length;i');return el.tagName.toLowerCase()==="input"&&el.name==="x"}catch(err){return false}}();var oldElement=GLOBAL.Element;function Element(tagName,attributes){attributes=attributes||{};tagName=tagName.toLowerCase();if(HAS_EXTENDED_CREATE_ELEMENT_SYNTAX&&attributes.name){tagName="<"+tagName+' name="'+attributes.name+'">';delete attributes.name;return Element.writeAttribute(document.createElement(tagName),attributes)}if(!ELEMENT_CACHE[tagName])ELEMENT_CACHE[tagName]=Element.extend(document.createElement(tagName));var node=shouldUseCreationCache(tagName,attributes)?ELEMENT_CACHE[tagName].cloneNode(false):document.createElement(tagName);return Element.writeAttribute(node,attributes)}GLOBAL.Element=Element;Object.extend(GLOBAL.Element,oldElement||{});if(oldElement)GLOBAL.Element.prototype=oldElement.prototype;Element.Methods={ByTag:{},Simulated:{}};var methods={};var INSPECT_ATTRIBUTES={id:"id",className:"class"};function inspect(element){element=$(element);var result="<"+element.tagName.toLowerCase();var attribute,value;for(var property in INSPECT_ATTRIBUTES){attribute=INSPECT_ATTRIBUTES[property];value=(element[property]||"").toString();if(value)result+=" "+attribute+"="+value.inspect(true)}return result+">"}methods.inspect=inspect;function visible(element){return $(element).style.display!=="none"}function toggle(element,bool){element=$(element);if(Object.isUndefined(bool))bool=!Element.visible(element);Element[bool?"show":"hide"](element);return element}function hide(element){element=$(element);element.style.display="none";return element}function show(element){element=$(element);element.style.display="";return element}Object.extend(methods,{visible:visible,toggle:toggle,hide:hide,show:show});function remove(element){element=$(element);element.parentNode.removeChild(element);return element}var SELECT_ELEMENT_INNERHTML_BUGGY=function(){var el=document.createElement("select"),isBuggy=true;el.innerHTML='';if(el.options&&el.options[0]){isBuggy=el.options[0].nodeName.toUpperCase()!=="OPTION"}el=null;return isBuggy}();var TABLE_ELEMENT_INNERHTML_BUGGY=function(){try{var el=document.createElement("table");if(el&&el.tBodies){el.innerHTML="test";var isBuggy=typeof el.tBodies[0]=="undefined";el=null;return isBuggy}}catch(e){return true}}();var LINK_ELEMENT_INNERHTML_BUGGY=function(){try{var el=document.createElement("div");el.innerHTML="";var isBuggy=el.childNodes.length===0;el=null;return isBuggy}catch(e){return true}}();var ANY_INNERHTML_BUGGY=SELECT_ELEMENT_INNERHTML_BUGGY||TABLE_ELEMENT_INNERHTML_BUGGY||LINK_ELEMENT_INNERHTML_BUGGY;var SCRIPT_ELEMENT_REJECTS_TEXTNODE_APPENDING=function(){var s=document.createElement("script"),isBuggy=false;try{s.appendChild(document.createTextNode(""));isBuggy=!s.firstChild||s.firstChild&&s.firstChild.nodeType!==3}catch(e){isBuggy=true}s=null;return isBuggy}();function update(element,content){element=$(element);var descendants=element.getElementsByTagName("*"),i=descendants.length;while(i--)purgeElement(descendants[i]);if(content&&content.toElement)content=content.toElement();if(Object.isElement(content))return element.update().insert(content);content=Object.toHTML(content);var tagName=element.tagName.toUpperCase();if(tagName==="SCRIPT"&&SCRIPT_ELEMENT_REJECTS_TEXTNODE_APPENDING){element.text=content;return element}if(ANY_INNERHTML_BUGGY){if(tagName in INSERTION_TRANSLATIONS.tags){while(element.firstChild)element.removeChild(element.firstChild);var nodes=getContentFromAnonymousElement(tagName,content.stripScripts());for(var i=0,node;node=nodes[i];i++)element.appendChild(node)}else if(LINK_ELEMENT_INNERHTML_BUGGY&&Object.isString(content)&&content.indexOf("-1){while(element.firstChild)element.removeChild(element.firstChild);var nodes=getContentFromAnonymousElement(tagName,content.stripScripts(),true);for(var i=0,node;node=nodes[i];i++)element.appendChild(node)}else{element.innerHTML=content.stripScripts()}}else{element.innerHTML=content.stripScripts()}content.evalScripts.bind(content).defer();return element}function replace(element,content){element=$(element);if(content&&content.toElement){content=content.toElement()}else if(!Object.isElement(content)){content=Object.toHTML(content);var range=element.ownerDocument.createRange();range.selectNode(element);content.evalScripts.bind(content).defer();content=range.createContextualFragment(content.stripScripts())}element.parentNode.replaceChild(content,element);return element}var INSERTION_TRANSLATIONS={before:function(element,node){element.parentNode.insertBefore(node,element)},top:function(element,node){element.insertBefore(node,element.firstChild)},bottom:function(element,node){element.appendChild(node)},after:function(element,node){element.parentNode.insertBefore(node,element.nextSibling)},tags:{TABLE:["","
    ",1],TBODY:["","
    ",2],TR:["","
    ",3],TD:["
    ","
    ",4],SELECT:["",1]}};var tags=INSERTION_TRANSLATIONS.tags;Object.extend(tags,{THEAD:tags.TBODY,TFOOT:tags.TBODY,TH:tags.TD});function replace_IE(element,content){element=$(element);if(content&&content.toElement)content=content.toElement();if(Object.isElement(content)){element.parentNode.replaceChild(content,element);return element}content=Object.toHTML(content);var parent=element.parentNode,tagName=parent.tagName.toUpperCase();if(tagName in INSERTION_TRANSLATIONS.tags){var nextSibling=Element.next(element);var fragments=getContentFromAnonymousElement(tagName,content.stripScripts());parent.removeChild(element);var iterator;if(nextSibling)iterator=function(node){parent.insertBefore(node,nextSibling)};else iterator=function(node){parent.appendChild(node)};fragments.each(iterator)}else{element.outerHTML=content.stripScripts()}content.evalScripts.bind(content).defer();return element}if("outerHTML"in document.documentElement)replace=replace_IE;function isContent(content){if(Object.isUndefined(content)||content===null)return false;if(Object.isString(content)||Object.isNumber(content))return true;if(Object.isElement(content))return true;if(content.toElement||content.toHTML)return true;return false}function insertContentAt(element,content,position){position=position.toLowerCase();var method=INSERTION_TRANSLATIONS[position];if(content&&content.toElement)content=content.toElement();if(Object.isElement(content)){method(element,content);return element}content=Object.toHTML(content);var tagName=(position==="before"||position==="after"?element.parentNode:element).tagName.toUpperCase();var childNodes=getContentFromAnonymousElement(tagName,content.stripScripts());if(position==="top"||position==="after")childNodes.reverse();for(var i=0,node;node=childNodes[i];i++)method(element,node);content.evalScripts.bind(content).defer()}function insert(element,insertions){element=$(element);if(isContent(insertions))insertions={bottom:insertions};for(var position in insertions)insertContentAt(element,insertions[position],position);return element}function wrap(element,wrapper,attributes){element=$(element);if(Object.isElement(wrapper)){$(wrapper).writeAttribute(attributes||{})}else if(Object.isString(wrapper)){wrapper=new Element(wrapper,attributes)}else{wrapper=new Element("div",wrapper)}if(element.parentNode)element.parentNode.replaceChild(wrapper,element);wrapper.appendChild(element);return wrapper}function cleanWhitespace(element){element=$(element);var node=element.firstChild;while(node){var nextNode=node.nextSibling;if(node.nodeType===Node.TEXT_NODE&&!/\S/.test(node.nodeValue))element.removeChild(node);node=nextNode}return element}function empty(element){return $(element).innerHTML.blank()}function getContentFromAnonymousElement(tagName,html,force){var t=INSERTION_TRANSLATIONS.tags[tagName],div=DIV;var workaround=!!t;if(!workaround&&force){workaround=true;t=["","",0]}if(workaround){div.innerHTML=" "+t[0]+html+t[1];div.removeChild(div.firstChild);for(var i=t[2];i--;)div=div.firstChild}else{div.innerHTML=html}return $A(div.childNodes)}function clone(element,deep){if(!(element=$(element)))return;var clone=element.cloneNode(deep);if(!HAS_UNIQUE_ID_PROPERTY){clone._prototypeUID=UNDEFINED;if(deep){var descendants=Element.select(clone,"*"),i=descendants.length;while(i--)descendants[i]._prototypeUID=UNDEFINED}}return Element.extend(clone)}function purgeElement(element){var uid=getUniqueElementID(element);if(uid){Element.stopObserving(element);if(!HAS_UNIQUE_ID_PROPERTY)element._prototypeUID=UNDEFINED;delete Element.Storage[uid]}}function purgeCollection(elements){var i=elements.length;while(i--)purgeElement(elements[i])}function purgeCollection_IE(elements){var i=elements.length,element,uid;while(i--){element=elements[i];uid=getUniqueElementID(element);delete Element.Storage[uid];delete Event.cache[uid]}}if(HAS_UNIQUE_ID_PROPERTY){purgeCollection=purgeCollection_IE}function purge(element){if(!(element=$(element)))return;purgeElement(element);var descendants=element.getElementsByTagName("*"),i=descendants.length;while(i--)purgeElement(descendants[i]);return null}Object.extend(methods,{remove:remove,update:update,replace:replace,insert:insert,wrap:wrap,cleanWhitespace:cleanWhitespace,empty:empty,clone:clone,purge:purge});function recursivelyCollect(element,property,maximumLength){element=$(element);maximumLength=maximumLength||-1;var elements=[];while(element=element[property]){if(element.nodeType===Node.ELEMENT_NODE)elements.push(Element.extend(element));if(elements.length===maximumLength)break}return elements}function ancestors(element){return recursivelyCollect(element,"parentNode")}function descendants(element){return Element.select(element,"*")}function firstDescendant(element){element=$(element).firstChild;while(element&&element.nodeType!==Node.ELEMENT_NODE)element=element.nextSibling;return $(element)}function immediateDescendants(element){var results=[],child=$(element).firstChild;while(child){if(child.nodeType===Node.ELEMENT_NODE)results.push(Element.extend(child));child=child.nextSibling}return results}function previousSiblings(element){return recursivelyCollect(element,"previousSibling")}function nextSiblings(element){return recursivelyCollect(element,"nextSibling")}function siblings(element){element=$(element);var previous=previousSiblings(element),next=nextSiblings(element);return previous.reverse().concat(next)}function match(element,selector){element=$(element);if(Object.isString(selector))return Prototype.Selector.match(element,selector);return selector.match(element)}function _recursivelyFind(element,property,expression,index){element=$(element),expression=expression||0,index=index||0;if(Object.isNumber(expression)){index=expression,expression=null}while(element=element[property]){if(element.nodeType!==1)continue;if(expression&&!Prototype.Selector.match(element,expression))continue;if(--index>=0)continue;return Element.extend(element)}}function up(element,expression,index){element=$(element);if(arguments.length===1)return $(element.parentNode);return _recursivelyFind(element,"parentNode",expression,index)}function down(element,expression,index){if(arguments.length===1)return firstDescendant(element);element=$(element),expression=expression||0,index=index||0;if(Object.isNumber(expression))index=expression,expression="*";var node=Prototype.Selector.select(expression,element)[index];return Element.extend(node)}function previous(element,expression,index){return _recursivelyFind(element,"previousSibling",expression,index)}function next(element,expression,index){return _recursivelyFind(element,"nextSibling",expression,index)}function select(element){element=$(element);var expressions=SLICE.call(arguments,1).join(", ");return Prototype.Selector.select(expressions,element)}function adjacent(element){element=$(element);var expressions=SLICE.call(arguments,1).join(", ");var siblings=Element.siblings(element),results=[];for(var i=0,sibling;sibling=siblings[i];i++){if(Prototype.Selector.match(sibling,expressions))results.push(sibling)}return results}function descendantOf_DOM(element,ancestor){element=$(element),ancestor=$(ancestor);while(element=element.parentNode)if(element===ancestor)return true;return false}function descendantOf_contains(element,ancestor){element=$(element),ancestor=$(ancestor);if(!ancestor.contains)return descendantOf_DOM(element,ancestor);return ancestor.contains(element)&&ancestor!==element}function descendantOf_compareDocumentPosition(element,ancestor){element=$(element),ancestor=$(ancestor);return(element.compareDocumentPosition(ancestor)&8)===8}var descendantOf;if(DIV.compareDocumentPosition){descendantOf=descendantOf_compareDocumentPosition}else if(DIV.contains){descendantOf=descendantOf_contains}else{descendantOf=descendantOf_DOM}Object.extend(methods,{recursivelyCollect:recursivelyCollect,ancestors:ancestors,descendants:descendants,firstDescendant:firstDescendant,immediateDescendants:immediateDescendants,previousSiblings:previousSiblings,nextSiblings:nextSiblings,siblings:siblings,match:match,up:up,down:down,previous:previous,next:next,select:select,adjacent:adjacent,descendantOf:descendantOf,getElementsBySelector:select,childElements:immediateDescendants});var idCounter=1;function identify(element){element=$(element);var id=Element.readAttribute(element,"id");if(id)return id;do{id="anonymous_element_"+idCounter++}while($(id));Element.writeAttribute(element,"id",id);return id}function readAttribute(element,name){return $(element).getAttribute(name)}function readAttribute_IE(element,name){element=$(element);var table=ATTRIBUTE_TRANSLATIONS.read;if(table.values[name])return table.values[name](element,name);if(table.names[name])name=table.names[name];if(name.include(":")){if(!element.attributes||!element.attributes[name])return null;return element.attributes[name].value}return element.getAttribute(name)}function readAttribute_Opera(element,name){if(name==="title")return element.title;return element.getAttribute(name)}var PROBLEMATIC_ATTRIBUTE_READING=function(){DIV.setAttribute("onclick",[]);var value=DIV.getAttribute("onclick");var isFunction=Object.isArray(value);DIV.removeAttribute("onclick");return isFunction}();if(PROBLEMATIC_ATTRIBUTE_READING){readAttribute=readAttribute_IE}else if(Prototype.Browser.Opera){readAttribute=readAttribute_Opera}function writeAttribute(element,name,value){element=$(element);var attributes={},table=ATTRIBUTE_TRANSLATIONS.write; +Math.toRadians = function(angleInDegrees){ + return angleInDegrees * (Math.PI/180) +} -if(typeof name==="object"){attributes=name}else{attributes[name]=Object.isUndefined(value)?true:value}for(var attr in attributes){name=table.names[attr]||attr;value=attributes[attr];if(table.values[attr])name=table.values[attr](element,value)||name;if(value===false||value===null)element.removeAttribute(name);else if(value===true)element.setAttribute(name,name);else element.setAttribute(name,value)}return element}var PROBLEMATIC_HAS_ATTRIBUTE_WITH_CHECKBOXES=function(){if(!HAS_EXTENDED_CREATE_ELEMENT_SYNTAX){return false}var checkbox=document.createElement('');checkbox.checked=true;var node=checkbox.getAttributeNode("checked");return!node||!node.specified}();function hasAttribute(element,attribute){attribute=ATTRIBUTE_TRANSLATIONS.has[attribute]||attribute;var node=$(element).getAttributeNode(attribute);return!!(node&&node.specified)}function hasAttribute_IE(element,attribute){if(attribute==="checked"){return element.checked}return hasAttribute(element,attribute)}GLOBAL.Element.Methods.Simulated.hasAttribute=PROBLEMATIC_HAS_ATTRIBUTE_WITH_CHECKBOXES?hasAttribute_IE:hasAttribute;function classNames(element){return new Element.ClassNames(element)}var regExpCache={};function getRegExpForClassName(className){if(regExpCache[className])return regExpCache[className];var re=new RegExp("(^|\\s+)"+className+"(\\s+|$)");regExpCache[className]=re;return re}function hasClassName(element,className){if(!(element=$(element)))return;var elementClassName=element.className;if(elementClassName.length===0)return false;if(elementClassName===className)return true;return getRegExpForClassName(className).test(elementClassName)}function addClassName(element,className){if(!(element=$(element)))return;if(!hasClassName(element,className))element.className+=(element.className?" ":"")+className;return element}function removeClassName(element,className){if(!(element=$(element)))return;element.className=element.className.replace(getRegExpForClassName(className)," ").strip();return element}function toggleClassName(element,className,bool){if(!(element=$(element)))return;if(Object.isUndefined(bool))bool=!hasClassName(element,className);var method=Element[bool?"addClassName":"removeClassName"];return method(element,className)}var ATTRIBUTE_TRANSLATIONS={};var classProp="className",forProp="for";DIV.setAttribute(classProp,"x");if(DIV.className!=="x"){DIV.setAttribute("class","x");if(DIV.className==="x")classProp="class"}var LABEL=document.createElement("label");LABEL.setAttribute(forProp,"x");if(LABEL.htmlFor!=="x"){LABEL.setAttribute("htmlFor","x");if(LABEL.htmlFor==="x")forProp="htmlFor"}LABEL=null;function _getAttr(element,attribute){return element.getAttribute(attribute)}function _getAttr2(element,attribute){return element.getAttribute(attribute,2)}function _getAttrNode(element,attribute){var node=element.getAttributeNode(attribute);return node?node.value:""}function _getFlag(element,attribute){return $(element).hasAttribute(attribute)?attribute:null}DIV.onclick=Prototype.emptyFunction;var onclickValue=DIV.getAttribute("onclick");var _getEv;if(String(onclickValue).indexOf("{")>-1){_getEv=function(element,attribute){var value=element.getAttribute(attribute);if(!value)return null;value=value.toString();value=value.split("{")[1];value=value.split("}")[0];return value.strip()}}else if(onclickValue===""){_getEv=function(element,attribute){var value=element.getAttribute(attribute);if(!value)return null;return value.strip()}}ATTRIBUTE_TRANSLATIONS.read={names:{class:classProp,className:classProp,for:forProp,htmlFor:forProp},values:{style:function(element){return element.style.cssText.toLowerCase()},title:function(element){return element.title}}};ATTRIBUTE_TRANSLATIONS.write={names:{className:"class",htmlFor:"for",cellpadding:"cellPadding",cellspacing:"cellSpacing"},values:{checked:function(element,value){element.checked=!!value},style:function(element,value){element.style.cssText=value?value:""}}};ATTRIBUTE_TRANSLATIONS.has={names:{}};Object.extend(ATTRIBUTE_TRANSLATIONS.write.names,ATTRIBUTE_TRANSLATIONS.read.names);var CAMEL_CASED_ATTRIBUTE_NAMES=$w("colSpan rowSpan vAlign dateTime "+"accessKey tabIndex encType maxLength readOnly longDesc frameBorder");for(var i=0,attr;attr=CAMEL_CASED_ATTRIBUTE_NAMES[i];i++){ATTRIBUTE_TRANSLATIONS.write.names[attr.toLowerCase()]=attr;ATTRIBUTE_TRANSLATIONS.has.names[attr.toLowerCase()]=attr}Object.extend(ATTRIBUTE_TRANSLATIONS.read.values,{href:_getAttr2,src:_getAttr2,type:_getAttr,action:_getAttrNode,disabled:_getFlag,checked:_getFlag,readonly:_getFlag,multiple:_getFlag,onload:_getEv,onunload:_getEv,onclick:_getEv,ondblclick:_getEv,onmousedown:_getEv,onmouseup:_getEv,onmouseover:_getEv,onmousemove:_getEv,onmouseout:_getEv,onfocus:_getEv,onblur:_getEv,onkeypress:_getEv,onkeydown:_getEv,onkeyup:_getEv,onsubmit:_getEv,onreset:_getEv,onselect:_getEv,onchange:_getEv});Object.extend(methods,{identify:identify,readAttribute:readAttribute,writeAttribute:writeAttribute,classNames:classNames,hasClassName:hasClassName,addClassName:addClassName,removeClassName:removeClassName,toggleClassName:toggleClassName});function normalizeStyleName(style){if(style==="float"||style==="styleFloat")return"cssFloat";return style.camelize()}function normalizeStyleName_IE(style){if(style==="float"||style==="cssFloat")return"styleFloat";return style.camelize()}function setStyle(element,styles){element=$(element);var elementStyle=element.style,match;if(Object.isString(styles)){elementStyle.cssText+=";"+styles;if(styles.include("opacity")){var opacity=styles.match(/opacity:\s*(\d?\.?\d*)/)[1];Element.setOpacity(element,opacity)}return element}for(var property in styles){if(property==="opacity"){Element.setOpacity(element,styles[property])}else{var value=styles[property];if(property==="float"||property==="cssFloat"){property=Object.isUndefined(elementStyle.styleFloat)?"cssFloat":"styleFloat"}elementStyle[property]=value}}return element}function getStyle(element,style){element=$(element);style=normalizeStyleName(style);var value=element.style[style];if(!value||value==="auto"){var css=document.defaultView.getComputedStyle(element,null);value=css?css[style]:null}if(style==="opacity")return value?parseFloat(value):1;return value==="auto"?null:value}function getStyle_Opera(element,style){switch(style){case"height":case"width":if(!Element.visible(element))return null;var dim=parseInt(getStyle(element,style),10);if(dim!==element["offset"+style.capitalize()])return dim+"px";return Element.measure(element,style);default:return getStyle(element,style)}}function getStyle_IE(element,style){element=$(element);style=normalizeStyleName_IE(style);var value=element.style[style];if(!value&&element.currentStyle){value=element.currentStyle[style]}if(style==="opacity"&&!STANDARD_CSS_OPACITY_SUPPORTED)return getOpacity_IE(element);if(value==="auto"){if((style==="width"||style==="height")&&Element.visible(element))return Element.measure(element,style)+"px";return null}return value}function stripAlphaFromFilter_IE(filter){return(filter||"").replace(/alpha\([^\)]*\)/gi,"")}function hasLayout_IE(element){if(!element.currentStyle||!element.currentStyle.hasLayout)element.style.zoom=1;return element}var STANDARD_CSS_OPACITY_SUPPORTED=function(){DIV.style.cssText="opacity:.55";return/^0.55/.test(DIV.style.opacity)}();function setOpacity(element,value){element=$(element);if(value==1||value==="")value="";else if(value<1e-5)value=0;element.style.opacity=value;return element}function setOpacity_IE(element,value){if(STANDARD_CSS_OPACITY_SUPPORTED)return setOpacity(element,value);element=hasLayout_IE($(element));var filter=Element.getStyle(element,"filter"),style=element.style;if(value==1||value===""){filter=stripAlphaFromFilter_IE(filter);if(filter)style.filter=filter;else style.removeAttribute("filter");return element}if(value<1e-5)value=0;style.filter=stripAlphaFromFilter_IE(filter)+"alpha(opacity="+value*100+")";return element}function getOpacity(element){return Element.getStyle(element,"opacity")}function getOpacity_IE(element){if(STANDARD_CSS_OPACITY_SUPPORTED)return getOpacity(element);var filter=Element.getStyle(element,"filter");if(filter.length===0)return 1;var match=(filter||"").match(/alpha\(opacity=(.*)\)/);if(match&&match[1])return parseFloat(match[1])/100;return 1}Object.extend(methods,{setStyle:setStyle,getStyle:getStyle,setOpacity:setOpacity,getOpacity:getOpacity});if("styleFloat"in DIV.style){methods.getStyle=getStyle_IE;methods.setOpacity=setOpacity_IE;methods.getOpacity=getOpacity_IE}var UID=0;GLOBAL.Element.Storage={UID:1};function getUniqueElementID(element){if(element===window)return 0;if(typeof element._prototypeUID==="undefined")element._prototypeUID=Element.Storage.UID++;return element._prototypeUID}function getUniqueElementID_IE(element){if(element===window)return 0;if(element==document)return 1;return element.uniqueID}var HAS_UNIQUE_ID_PROPERTY="uniqueID"in DIV;if(HAS_UNIQUE_ID_PROPERTY)getUniqueElementID=getUniqueElementID_IE;function getStorage(element){if(!(element=$(element)))return;var uid=getUniqueElementID(element);if(!Element.Storage[uid])Element.Storage[uid]=$H();return Element.Storage[uid]}function store(element,key,value){if(!(element=$(element)))return;var storage=getStorage(element);if(arguments.length===2){storage.update(key)}else{storage.set(key,value)}return element}function retrieve(element,key,defaultValue){if(!(element=$(element)))return;var storage=getStorage(element),value=storage.get(key);if(Object.isUndefined(value)){storage.set(key,defaultValue);value=defaultValue}return value}Object.extend(methods,{getStorage:getStorage,store:store,retrieve:retrieve});var Methods={},ByTag=Element.Methods.ByTag,F=Prototype.BrowserFeatures;if(!F.ElementExtensions&&"__proto__"in DIV){GLOBAL.HTMLElement={};GLOBAL.HTMLElement.prototype=DIV["__proto__"];F.ElementExtensions=true}function checkElementPrototypeDeficiency(tagName){if(typeof window.Element==="undefined")return false;if(!HAS_EXTENDED_CREATE_ELEMENT_SYNTAX)return false;var proto=window.Element.prototype;if(proto){var id="_"+(Math.random()+"").slice(2),el=document.createElement(tagName);proto[id]="x";var isBuggy=el[id]!=="x";delete proto[id];el=null;return isBuggy}return false}var HTMLOBJECTELEMENT_PROTOTYPE_BUGGY=checkElementPrototypeDeficiency("object");function extendElementWith(element,methods){for(var property in methods){var value=methods[property];if(Object.isFunction(value)&&!(property in element))element[property]=value.methodize()}}var EXTENDED={};function elementIsExtended(element){var uid=getUniqueElementID(element);return uid in EXTENDED}function extend(element){if(!element||elementIsExtended(element))return element;if(element.nodeType!==Node.ELEMENT_NODE||element==window)return element;var methods=Object.clone(Methods),tagName=element.tagName.toUpperCase();if(ByTag[tagName])Object.extend(methods,ByTag[tagName]);extendElementWith(element,methods);EXTENDED[getUniqueElementID(element)]=true;return element}function extend_IE8(element){if(!element||elementIsExtended(element))return element;var t=element.tagName;if(t&&/^(?:object|applet|embed)$/i.test(t)){extendElementWith(element,Element.Methods);extendElementWith(element,Element.Methods.Simulated);extendElementWith(element,Element.Methods.ByTag[t.toUpperCase()])}return element}if(F.SpecificElementExtensions){extend=HTMLOBJECTELEMENT_PROTOTYPE_BUGGY?extend_IE8:Prototype.K}function addMethodsToTagName(tagName,methods){tagName=tagName.toUpperCase();if(!ByTag[tagName])ByTag[tagName]={};Object.extend(ByTag[tagName],methods)}function mergeMethods(destination,methods,onlyIfAbsent){if(Object.isUndefined(onlyIfAbsent))onlyIfAbsent=false;for(var property in methods){var value=methods[property];if(!Object.isFunction(value))continue;if(!onlyIfAbsent||!(property in destination))destination[property]=value.methodize()}}function findDOMClass(tagName){var klass;var trans={OPTGROUP:"OptGroup",TEXTAREA:"TextArea",P:"Paragraph",FIELDSET:"FieldSet",UL:"UList",OL:"OList",DL:"DList",DIR:"Directory",H1:"Heading",H2:"Heading",H3:"Heading",H4:"Heading",H5:"Heading",H6:"Heading",Q:"Quote",INS:"Mod",DEL:"Mod",A:"Anchor",IMG:"Image",CAPTION:"TableCaption",COL:"TableCol",COLGROUP:"TableCol",THEAD:"TableSection",TFOOT:"TableSection",TBODY:"TableSection",TR:"TableRow",TH:"TableCell",TD:"TableCell",FRAMESET:"FrameSet",IFRAME:"IFrame"};if(trans[tagName])klass="HTML"+trans[tagName]+"Element";if(window[klass])return window[klass];klass="HTML"+tagName+"Element";if(window[klass])return window[klass];klass="HTML"+tagName.capitalize()+"Element";if(window[klass])return window[klass];var element=document.createElement(tagName),proto=element["__proto__"]||element.constructor.prototype;element=null;return proto}function addMethods(methods){if(arguments.length===0)addFormMethods();if(arguments.length===2){var tagName=methods;methods=arguments[1]}if(!tagName){Object.extend(Element.Methods,methods||{})}else{if(Object.isArray(tagName)){for(var i=0,tag;tag=tagName[i];i++)addMethodsToTagName(tag,methods)}else{addMethodsToTagName(tagName,methods)}}var ELEMENT_PROTOTYPE=window.HTMLElement?HTMLElement.prototype:Element.prototype;if(F.ElementExtensions){mergeMethods(ELEMENT_PROTOTYPE,Element.Methods);mergeMethods(ELEMENT_PROTOTYPE,Element.Methods.Simulated,true)}if(F.SpecificElementExtensions){for(var tag in Element.Methods.ByTag){var klass=findDOMClass(tag);if(Object.isUndefined(klass))continue;mergeMethods(klass.prototype,ByTag[tag])}}Object.extend(Element,Element.Methods);Object.extend(Element,Element.Methods.Simulated);delete Element.ByTag;delete Element.Simulated;Element.extend.refresh();ELEMENT_CACHE={}}Object.extend(GLOBAL.Element,{extend:extend,addMethods:addMethods});if(extend===Prototype.K){GLOBAL.Element.extend.refresh=Prototype.emptyFunction}else{GLOBAL.Element.extend.refresh=function(){if(Prototype.BrowserFeatures.ElementExtensions)return;Object.extend(Methods,Element.Methods);Object.extend(Methods,Element.Methods.Simulated);EXTENDED={}}}function addFormMethods(){Object.extend(Form,Form.Methods);Object.extend(Form.Element,Form.Element.Methods);Object.extend(Element.Methods.ByTag,{FORM:Object.clone(Form.Methods),INPUT:Object.clone(Form.Element.Methods),SELECT:Object.clone(Form.Element.Methods),TEXTAREA:Object.clone(Form.Element.Methods),BUTTON:Object.clone(Form.Element.Methods)})}Element.addMethods(methods);function destroyCache_IE(){DIV=null;ELEMENT_CACHE=null}if(window.attachEvent)window.attachEvent("onunload",destroyCache_IE)})(this);(function(){function toDecimal(pctString){var match=pctString.match(/^(\d+)%?$/i);if(!match)return null;return Number(match[1])/100}function getRawStyle(element,style){element=$(element);var value=element.style[style];if(!value||value==="auto"){var css=document.defaultView.getComputedStyle(element,null);value=css?css[style]:null}if(style==="opacity")return value?parseFloat(value):1;return value==="auto"?null:value}function getRawStyle_IE(element,style){var value=element.style[style];if(!value&&element.currentStyle){value=element.currentStyle[style]}return value}function getContentWidth(element,context){var boxWidth=element.offsetWidth;var bl=getPixelValue(element,"borderLeftWidth",context)||0;var br=getPixelValue(element,"borderRightWidth",context)||0;var pl=getPixelValue(element,"paddingLeft",context)||0;var pr=getPixelValue(element,"paddingRight",context)||0;return boxWidth-bl-br-pl-pr}if("currentStyle"in document.documentElement){getRawStyle=getRawStyle_IE}function getPixelValue(value,property,context){var element=null;if(Object.isElement(value)){element=value;value=getRawStyle(element,property)}if(value===null||Object.isUndefined(value)){return null}if(/^(?:-)?\d+(\.\d+)?(px)?$/i.test(value)){return window.parseFloat(value)}var isPercentage=value.include("%"),isViewport=context===document.viewport;if(/\d/.test(value)&&element&&element.runtimeStyle&&!(isPercentage&&isViewport)){var style=element.style.left,rStyle=element.runtimeStyle.left;element.runtimeStyle.left=element.currentStyle.left;element.style.left=value||0;value=element.style.pixelLeft;element.style.left=style;element.runtimeStyle.left=rStyle;return value}if(element&&isPercentage){context=context||element.parentNode;var decimal=toDecimal(value),whole=null;var isHorizontal=property.include("left")||property.include("right")||property.include("width");var isVertical=property.include("top")||property.include("bottom")||property.include("height");if(context===document.viewport){if(isHorizontal){whole=document.viewport.getWidth()}else if(isVertical){whole=document.viewport.getHeight()}}else{if(isHorizontal){whole=$(context).measure("width")}else if(isVertical){whole=$(context).measure("height")}}return whole===null?0:whole*decimal}return 0}function toCSSPixels(number){if(Object.isString(number)&&number.endsWith("px"))return number;return number+"px"}function isDisplayed(element){while(element&&element.parentNode){var display=element.getStyle("display");if(display==="none"){return false}element=$(element.parentNode)}return true}var hasLayout=Prototype.K;if("currentStyle"in document.documentElement){hasLayout=function(element){if(!element.currentStyle.hasLayout){element.style.zoom=1}return element}}function cssNameFor(key){if(key.include("border"))key=key+"-width";return key.camelize()}Element.Layout=Class.create(Hash,{initialize:function($super,element,preCompute){$super();this.element=$(element);Element.Layout.PROPERTIES.each(function(property){this._set(property,null)},this);if(preCompute){this._preComputing=true;this._begin();Element.Layout.PROPERTIES.each(this._compute,this);this._end();this._preComputing=false}},_set:function(property,value){return Hash.prototype.set.call(this,property,value)},set:function(property,value){throw"Properties of Element.Layout are read-only."},get:function($super,property){var value=$super(property);return value===null?this._compute(property):value},_begin:function(){if(this._isPrepared())return;var element=this.element;if(isDisplayed(element)){this._setPrepared(true);return}var originalStyles={position:element.style.position||"",width:element.style.width||"",visibility:element.style.visibility||"",display:element.style.display||""};element.store("prototype_original_styles",originalStyles);var position=getRawStyle(element,"position"),width=element.offsetWidth;if(width===0||width===null){element.style.display="block";width=element.offsetWidth}var context=position==="fixed"?document.viewport:element.parentNode;var tempStyles={visibility:"hidden",display:"block"};if(position!=="fixed")tempStyles.position="absolute";element.setStyle(tempStyles);var positionedWidth=element.offsetWidth,newWidth;if(width&&positionedWidth===width){newWidth=getContentWidth(element,context)}else if(position==="absolute"||position==="fixed"){newWidth=getContentWidth(element,context)}else{var parent=element.parentNode,pLayout=$(parent).getLayout();newWidth=pLayout.get("width")-this.get("margin-left")-this.get("border-left")-this.get("padding-left")-this.get("padding-right")-this.get("border-right")-this.get("margin-right")}element.setStyle({width:newWidth+"px"});this._setPrepared(true)},_end:function(){var element=this.element;var originalStyles=element.retrieve("prototype_original_styles");element.store("prototype_original_styles",null);element.setStyle(originalStyles);this._setPrepared(false)},_compute:function(property){var COMPUTATIONS=Element.Layout.COMPUTATIONS;if(!(property in COMPUTATIONS)){throw"Property not found."}return this._set(property,COMPUTATIONS[property].call(this,this.element))},_isPrepared:function(){return this.element.retrieve("prototype_element_layout_prepared",false)},_setPrepared:function(bool){return this.element.store("prototype_element_layout_prepared",bool)},toObject:function(){var args=$A(arguments);var keys=args.length===0?Element.Layout.PROPERTIES:args.join(" ").split(" ");var obj={};keys.each(function(key){if(!Element.Layout.PROPERTIES.include(key))return;var value=this.get(key);if(value!=null)obj[key]=value},this);return obj},toHash:function(){var obj=this.toObject.apply(this,arguments);return new Hash(obj)},toCSS:function(){var args=$A(arguments);var keys=args.length===0?Element.Layout.PROPERTIES:args.join(" ").split(" ");var css={};keys.each(function(key){if(!Element.Layout.PROPERTIES.include(key))return;if(Element.Layout.COMPOSITE_PROPERTIES.include(key))return;var value=this.get(key);if(value!=null)css[cssNameFor(key)]=value+"px"},this);return css},inspect:function(){return"#"}});Object.extend(Element.Layout,{PROPERTIES:$w("height width top left right bottom border-left border-right border-top border-bottom padding-left padding-right padding-top padding-bottom margin-top margin-bottom margin-left margin-right padding-box-width padding-box-height border-box-width border-box-height margin-box-width margin-box-height"),COMPOSITE_PROPERTIES:$w("padding-box-width padding-box-height margin-box-width margin-box-height border-box-width border-box-height"),COMPUTATIONS:{height:function(element){if(!this._preComputing)this._begin();var bHeight=this.get("border-box-height");if(bHeight<=0){if(!this._preComputing)this._end();return 0}var bTop=this.get("border-top"),bBottom=this.get("border-bottom");var pTop=this.get("padding-top"),pBottom=this.get("padding-bottom");if(!this._preComputing)this._end();return bHeight-bTop-bBottom-pTop-pBottom},width:function(element){if(!this._preComputing)this._begin();var bWidth=this.get("border-box-width");if(bWidth<=0){if(!this._preComputing)this._end();return 0}var bLeft=this.get("border-left"),bRight=this.get("border-right");var pLeft=this.get("padding-left"),pRight=this.get("padding-right");if(!this._preComputing)this._end();return bWidth-bLeft-bRight-pLeft-pRight},"padding-box-height":function(element){var height=this.get("height"),pTop=this.get("padding-top"),pBottom=this.get("padding-bottom");return height+pTop+pBottom},"padding-box-width":function(element){var width=this.get("width"),pLeft=this.get("padding-left"),pRight=this.get("padding-right");return width+pLeft+pRight},"border-box-height":function(element){if(!this._preComputing)this._begin();var height=element.offsetHeight;if(!this._preComputing)this._end();return height},"border-box-width":function(element){if(!this._preComputing)this._begin();var width=element.offsetWidth;if(!this._preComputing)this._end();return width},"margin-box-height":function(element){var bHeight=this.get("border-box-height"),mTop=this.get("margin-top"),mBottom=this.get("margin-bottom");if(bHeight<=0)return 0;return bHeight+mTop+mBottom},"margin-box-width":function(element){var bWidth=this.get("border-box-width"),mLeft=this.get("margin-left"),mRight=this.get("margin-right");if(bWidth<=0)return 0;return bWidth+mLeft+mRight},top:function(element){var offset=element.positionedOffset();return offset.top},bottom:function(element){var offset=element.positionedOffset(),parent=element.getOffsetParent(),pHeight=parent.measure("height");var mHeight=this.get("border-box-height");return pHeight-mHeight-offset.top},left:function(element){var offset=element.positionedOffset();return offset.left},right:function(element){var offset=element.positionedOffset(),parent=element.getOffsetParent(),pWidth=parent.measure("width");var mWidth=this.get("border-box-width");return pWidth-mWidth-offset.left},"padding-top":function(element){return getPixelValue(element,"paddingTop")},"padding-bottom":function(element){return getPixelValue(element,"paddingBottom")},"padding-left":function(element){return getPixelValue(element,"paddingLeft")},"padding-right":function(element){return getPixelValue(element,"paddingRight")},"border-top":function(element){return getPixelValue(element,"borderTopWidth")},"border-bottom":function(element){return getPixelValue(element,"borderBottomWidth")},"border-left":function(element){return getPixelValue(element,"borderLeftWidth")},"border-right":function(element){return getPixelValue(element,"borderRightWidth")},"margin-top":function(element){return getPixelValue(element,"marginTop")},"margin-bottom":function(element){return getPixelValue(element,"marginBottom")},"margin-left":function(element){return getPixelValue(element,"marginLeft")},"margin-right":function(element){return getPixelValue(element,"marginRight")}}});if("getBoundingClientRect"in document.documentElement){Object.extend(Element.Layout.COMPUTATIONS,{right:function(element){var parent=hasLayout(element.getOffsetParent());var rect=element.getBoundingClientRect(),pRect=parent.getBoundingClientRect();return(pRect.right-rect.right).round()},bottom:function(element){var parent=hasLayout(element.getOffsetParent());var rect=element.getBoundingClientRect(),pRect=parent.getBoundingClientRect();return(pRect.bottom-rect.bottom).round()}})}Element.Offset=Class.create({initialize:function(left,top){this.left=left.round();this.top=top.round();this[0]=this.left;this[1]=this.top},relativeTo:function(offset){return new Element.Offset(this.left-offset.left,this.top-offset.top)},inspect:function(){return"#".interpolate(this)},toString:function(){return"[#{left}, #{top}]".interpolate(this)},toArray:function(){return[this.left,this.top]}});function getLayout(element,preCompute){return new Element.Layout(element,preCompute)}function measure(element,property){return $(element).getLayout().get(property)}function getHeight(element){return Element.getDimensions(element).height}function getWidth(element){return Element.getDimensions(element).width}function getDimensions(element){element=$(element);var display=Element.getStyle(element,"display");if(display&&display!=="none"){return{width:element.offsetWidth,height:element.offsetHeight}}var style=element.style;var originalStyles={visibility:style.visibility,position:style.position,display:style.display};var newStyles={visibility:"hidden",display:"block"};if(originalStyles.position!=="fixed")newStyles.position="absolute";Element.setStyle(element,newStyles);var dimensions={width:element.offsetWidth,height:element.offsetHeight};Element.setStyle(element,originalStyles);return dimensions}function getOffsetParent(element){element=$(element);if(isDocument(element)||isDetached(element)||isBody(element)||isHtml(element))return $(document.body);var isInline=Element.getStyle(element,"display")==="inline";if(!isInline&&element.offsetParent)return $(element.offsetParent);while((element=element.parentNode)&&element!==document.body){if(Element.getStyle(element,"position")!=="static"){return isHtml(element)?$(document.body):$(element)}}return $(document.body)}function cumulativeOffset(element){element=$(element);var valueT=0,valueL=0;if(element.parentNode){do{valueT+=element.offsetTop||0;valueL+=element.offsetLeft||0;element=element.offsetParent}while(element)}return new Element.Offset(valueL,valueT)}function positionedOffset(element){element=$(element);var layout=element.getLayout();var valueT=0,valueL=0;do{valueT+=element.offsetTop||0;valueL+=element.offsetLeft||0;element=element.offsetParent;if(element){if(isBody(element))break;var p=Element.getStyle(element,"position");if(p!=="static")break}}while(element);valueL-=layout.get("margin-top");valueT-=layout.get("margin-left");return new Element.Offset(valueL,valueT)}function cumulativeScrollOffset(element){var valueT=0,valueL=0;do{if(element===document.body){var bodyScrollNode=document.documentElement||document.body.parentNode||document.body;valueT+=!Object.isUndefined(window.pageYOffset)?window.pageYOffset:bodyScrollNode.scrollTop||0;valueL+=!Object.isUndefined(window.pageXOffset)?window.pageXOffset:bodyScrollNode.scrollLeft||0;break}else{valueT+=element.scrollTop||0;valueL+=element.scrollLeft||0;element=element.parentNode}}while(element);return new Element.Offset(valueL,valueT)}function viewportOffset(forElement){var valueT=0,valueL=0,docBody=document.body;forElement=$(forElement);var element=forElement;do{valueT+=element.offsetTop||0;valueL+=element.offsetLeft||0;if(element.offsetParent==docBody&&Element.getStyle(element,"position")=="absolute")break}while(element=element.offsetParent);element=forElement;do{if(element!=docBody){valueT-=element.scrollTop||0;valueL-=element.scrollLeft||0}}while(element=element.parentNode);return new Element.Offset(valueL,valueT)}function absolutize(element){element=$(element);if(Element.getStyle(element,"position")==="absolute"){return element}var offsetParent=getOffsetParent(element);var eOffset=element.viewportOffset(),pOffset=offsetParent.viewportOffset();var offset=eOffset.relativeTo(pOffset);var layout=element.getLayout();element.store("prototype_absolutize_original_styles",{position:element.getStyle("position"),left:element.getStyle("left"),top:element.getStyle("top"),width:element.getStyle("width"),height:element.getStyle("height")});element.setStyle({position:"absolute",top:offset.top+"px",left:offset.left+"px",width:layout.get("width")+"px",height:layout.get("height")+"px"});return element}function relativize(element){element=$(element);if(Element.getStyle(element,"position")==="relative"){return element}var originalStyles=element.retrieve("prototype_absolutize_original_styles");if(originalStyles)element.setStyle(originalStyles);return element}function scrollTo(element){element=$(element);var pos=Element.cumulativeOffset(element);window.scrollTo(pos.left,pos.top);return element}function makePositioned(element){element=$(element);var position=Element.getStyle(element,"position"),styles={};if(position==="static"||!position){styles.position="relative";if(Prototype.Browser.Opera){styles.top=0;styles.left=0}Element.setStyle(element,styles);Element.store(element,"prototype_made_positioned",true)}return element}function undoPositioned(element){element=$(element);var storage=Element.getStorage(element),madePositioned=storage.get("prototype_made_positioned");if(madePositioned){storage.unset("prototype_made_positioned");Element.setStyle(element,{position:"",top:"",bottom:"",left:"",right:""})}return element}function makeClipping(element){element=$(element);var storage=Element.getStorage(element),madeClipping=storage.get("prototype_made_clipping");if(Object.isUndefined(madeClipping)){var overflow=Element.getStyle(element,"overflow");storage.set("prototype_made_clipping",overflow);if(overflow!=="hidden")element.style.overflow="hidden"}return element}function undoClipping(element){element=$(element);var storage=Element.getStorage(element),overflow=storage.get("prototype_made_clipping");if(!Object.isUndefined(overflow)){storage.unset("prototype_made_clipping");element.style.overflow=overflow||""}return element}function clonePosition(element,source,options){options=Object.extend({setLeft:true,setTop:true,setWidth:true,setHeight:true,offsetTop:0,offsetLeft:0},options||{});source=$(source);element=$(element);var p,delta,layout,styles={};if(options.setLeft||options.setTop){p=Element.viewportOffset(source);delta=[0,0];if(Element.getStyle(element,"position")==="absolute"){var parent=Element.getOffsetParent(element);if(parent!==document.body)delta=Element.viewportOffset(parent)}}if(options.setWidth||options.setHeight){layout=Element.getLayout(source)}if(options.setLeft)styles.left=p[0]-delta[0]+options.offsetLeft+"px";if(options.setTop)styles.top=p[1]-delta[1]+options.offsetTop+"px";if(options.setWidth)styles.width=layout.get("border-box-width")+"px";if(options.setHeight)styles.height=layout.get("border-box-height")+"px";return Element.setStyle(element,styles)}if(Prototype.Browser.IE){getOffsetParent=getOffsetParent.wrap(function(proceed,element){element=$(element);if(isDocument(element)||isDetached(element)||isBody(element)||isHtml(element))return $(document.body);var position=element.getStyle("position");if(position!=="static")return proceed(element);element.setStyle({position:"relative"});var value=proceed(element);element.setStyle({position:position});return value});positionedOffset=positionedOffset.wrap(function(proceed,element){element=$(element);if(!element.parentNode)return new Element.Offset(0,0);var position=element.getStyle("position"); +Math.crossProduct = function(x, y){ + [ + x[1]*y[2]-x[2]*y[1], + x[2]*y[0]-x[0]*y[2], + x[0]*y[1]-x[1]*y[0] + ] +} -if(position!=="static")return proceed(element);var offsetParent=element.getOffsetParent();if(offsetParent&&offsetParent.getStyle("position")==="fixed")hasLayout(offsetParent);element.setStyle({position:"relative"});var value=proceed(element);element.setStyle({position:position});return value})}else if(Prototype.Browser.Webkit){cumulativeOffset=function(element){element=$(element);var valueT=0,valueL=0;do{valueT+=element.offsetTop||0;valueL+=element.offsetLeft||0;if(element.offsetParent==document.body){if(Element.getStyle(element,"position")=="absolute")break}element=element.offsetParent}while(element);return new Element.Offset(valueL,valueT)}}Element.addMethods({getLayout:getLayout,measure:measure,getWidth:getWidth,getHeight:getHeight,getDimensions:getDimensions,getOffsetParent:getOffsetParent,cumulativeOffset:cumulativeOffset,positionedOffset:positionedOffset,cumulativeScrollOffset:cumulativeScrollOffset,viewportOffset:viewportOffset,absolutize:absolutize,relativize:relativize,scrollTo:scrollTo,makePositioned:makePositioned,undoPositioned:undoPositioned,makeClipping:makeClipping,undoClipping:undoClipping,clonePosition:clonePosition});function isBody(element){return element.nodeName.toUpperCase()==="BODY"}function isHtml(element){return element.nodeName.toUpperCase()==="HTML"}function isDocument(element){return element.nodeType===Node.DOCUMENT_NODE}function isDetached(element){return element!==document.body&&!Element.descendantOf(element,document.body)}if("getBoundingClientRect"in document.documentElement){Element.addMethods({viewportOffset:function(element){element=$(element);if(isDetached(element))return new Element.Offset(0,0);var rect=element.getBoundingClientRect(),docEl=document.documentElement;return new Element.Offset(rect.left-docEl.clientLeft,rect.top-docEl.clientTop)}})}})();(function(){var IS_OLD_OPERA=Prototype.Browser.Opera&&window.parseFloat(window.opera.version())<9.5;var ROOT=null;function getRootElement(){if(ROOT)return ROOT;ROOT=IS_OLD_OPERA?document.body:document.documentElement;return ROOT}function getDimensions(){return{width:this.getWidth(),height:this.getHeight()}}function getWidth(){return getRootElement().clientWidth}function getHeight(){return getRootElement().clientHeight}function getScrollOffsets(){var x=window.pageXOffset||document.documentElement.scrollLeft||document.body.scrollLeft;var y=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop;return new Element.Offset(x,y)}document.viewport={getDimensions:getDimensions,getWidth:getWidth,getHeight:getHeight,getScrollOffsets:getScrollOffsets}})();window.$$=function(){var expression=$A(arguments).join(", ");return Prototype.Selector.select(expression,document)};Prototype.Selector=function(){function select(){throw new Error('Method "Prototype.Selector.select" must be defined.')}function match(){throw new Error('Method "Prototype.Selector.match" must be defined.')}function find(elements,expression,index){index=index||0;var match=Prototype.Selector.match,length=elements.length,matchIndex=0,i;for(i=0;i+~]|"+whitespace+")"+whitespace+"*"),rattributeQuotes=new RegExp("="+whitespace+"*([^\\]'\"]*?)"+whitespace+"*\\]","g"),rpseudo=new RegExp(pseudos),ridentifier=new RegExp("^"+identifier+"$"),matchExpr={ID:new RegExp("^#("+characterEncoding+")"),CLASS:new RegExp("^\\.("+characterEncoding+")"),TAG:new RegExp("^("+characterEncoding.replace("w","w*")+")"),ATTR:new RegExp("^"+attributes),PSEUDO:new RegExp("^"+pseudos),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+whitespace+"*(even|odd|(([+-]|)(\\d*)n|)"+whitespace+"*(?:([+-]|)"+whitespace+"*(\\d+)|))"+whitespace+"*\\)|)","i"),bool:new RegExp("^(?:"+booleans+")$","i"),needsContext:new RegExp("^"+whitespace+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+whitespace+"*((?:-\\d)?\\d*)"+whitespace+"*\\)|)(?=[^-]|$)","i")},rinputs=/^(?:input|select|textarea|button)$/i,rheader=/^h\d$/i,rnative=/^[^{]+\{\s*\[native \w/,rquickExpr=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,rsibling=/[+~]/,rescape=/'|\\/g,runescape=new RegExp("\\\\([\\da-f]{1,6}"+whitespace+"?|("+whitespace+")|.)","ig"),funescape=function(_,escaped,escapedWhitespace){var high="0x"+escaped-65536;return high!==high||escapedWhitespace?escaped:high<0?String.fromCharCode(high+65536):String.fromCharCode(high>>10|55296,high&1023|56320)};try{push.apply(arr=slice.call(preferredDoc.childNodes),preferredDoc.childNodes);arr[preferredDoc.childNodes.length].nodeType}catch(e){push={apply:arr.length?function(target,els){push_native.apply(target,slice.call(els))}:function(target,els){var j=target.length,i=0;while(target[j++]=els[i++]){}target.length=j-1}}}function Sizzle(selector,context,results,seed){var match,elem,m,nodeType,i,groups,old,nid,newContext,newSelector;if((context?context.ownerDocument||context:preferredDoc)!==document){setDocument(context)}context=context||document;results=results||[];if(!selector||typeof selector!=="string"){return results}if((nodeType=context.nodeType)!==1&&nodeType!==9){return[]}if(documentIsHTML&&!seed){if(match=rquickExpr.exec(selector)){if(m=match[1]){if(nodeType===9){elem=context.getElementById(m);if(elem&&elem.parentNode){if(elem.id===m){results.push(elem);return results}}else{return results}}else{if(context.ownerDocument&&(elem=context.ownerDocument.getElementById(m))&&contains(context,elem)&&elem.id===m){results.push(elem);return results}}}else if(match[2]){push.apply(results,context.getElementsByTagName(selector));return results}else if((m=match[3])&&support.getElementsByClassName&&context.getElementsByClassName){push.apply(results,context.getElementsByClassName(m));return results}}if(support.qsa&&(!rbuggyQSA||!rbuggyQSA.test(selector))){nid=old=expando;newContext=context;newSelector=nodeType===9&&selector;if(nodeType===1&&context.nodeName.toLowerCase()!=="object"){groups=tokenize(selector);if(old=context.getAttribute("id")){nid=old.replace(rescape,"\\$&")}else{context.setAttribute("id",nid)}nid="[id='"+nid+"'] ";i=groups.length;while(i--){groups[i]=nid+toSelector(groups[i])}newContext=rsibling.test(selector)&&testContext(context.parentNode)||context;newSelector=groups.join(",")}if(newSelector){try{push.apply(results,newContext.querySelectorAll(newSelector));return results}catch(qsaError){}finally{if(!old){context.removeAttribute("id")}}}}}return select(selector.replace(rtrim,"$1"),context,results,seed)}function createCache(){var keys=[];function cache(key,value){if(keys.push(key+" ")>Expr.cacheLength){delete cache[keys.shift()]}return cache[key+" "]=value}return cache}function markFunction(fn){fn[expando]=true;return fn}function assert(fn){var div=document.createElement("div");try{return!!fn(div)}catch(e){return false}finally{if(div.parentNode){div.parentNode.removeChild(div)}div=null}}function addHandle(attrs,handler){var arr=attrs.split("|"),i=attrs.length;while(i--){Expr.attrHandle[arr[i]]=handler}}function siblingCheck(a,b){var cur=b&&a,diff=cur&&a.nodeType===1&&b.nodeType===1&&(~b.sourceIndex||MAX_NEGATIVE)-(~a.sourceIndex||MAX_NEGATIVE);if(diff){return diff}if(cur){while(cur=cur.nextSibling){if(cur===b){return-1}}}return a?1:-1}function createInputPseudo(type){return function(elem){var name=elem.nodeName.toLowerCase();return name==="input"&&elem.type===type}}function createButtonPseudo(type){return function(elem){var name=elem.nodeName.toLowerCase();return(name==="input"||name==="button")&&elem.type===type}}function createPositionalPseudo(fn){return markFunction(function(argument){argument=+argument;return markFunction(function(seed,matches){var j,matchIndexes=fn([],seed.length,argument),i=matchIndexes.length;while(i--){if(seed[j=matchIndexes[i]]){seed[j]=!(matches[j]=seed[j])}}})})}function testContext(context){return context&&typeof context.getElementsByTagName!==strundefined&&context}support=Sizzle.support={};isXML=Sizzle.isXML=function(elem){var documentElement=elem&&(elem.ownerDocument||elem).documentElement;return documentElement?documentElement.nodeName!=="HTML":false};setDocument=Sizzle.setDocument=function(node){var hasCompare,doc=node?node.ownerDocument||node:preferredDoc,parent=doc.defaultView;if(doc===document||doc.nodeType!==9||!doc.documentElement){return document}document=doc;docElem=doc.documentElement;documentIsHTML=!isXML(doc);if(parent&&parent!==parent.top){if(parent.addEventListener){parent.addEventListener("unload",function(){setDocument()},false)}else if(parent.attachEvent){parent.attachEvent("onunload",function(){setDocument()})}}support.attributes=assert(function(div){div.className="i";return!div.getAttribute("className")});support.getElementsByTagName=assert(function(div){div.appendChild(doc.createComment(""));return!div.getElementsByTagName("*").length});support.getElementsByClassName=rnative.test(doc.getElementsByClassName)&&assert(function(div){div.innerHTML="
    ";div.firstChild.className="i";return div.getElementsByClassName("i").length===2});support.getById=assert(function(div){docElem.appendChild(div).id=expando;return!doc.getElementsByName||!doc.getElementsByName(expando).length});if(support.getById){Expr.find["ID"]=function(id,context){if(typeof context.getElementById!==strundefined&&documentIsHTML){var m=context.getElementById(id);return m&&m.parentNode?[m]:[]}};Expr.filter["ID"]=function(id){var attrId=id.replace(runescape,funescape);return function(elem){return elem.getAttribute("id")===attrId}}}else{delete Expr.find["ID"];Expr.filter["ID"]=function(id){var attrId=id.replace(runescape,funescape);return function(elem){var node=typeof elem.getAttributeNode!==strundefined&&elem.getAttributeNode("id");return node&&node.value===attrId}}}Expr.find["TAG"]=support.getElementsByTagName?function(tag,context){if(typeof context.getElementsByTagName!==strundefined){return context.getElementsByTagName(tag)}}:function(tag,context){var elem,tmp=[],i=0,results=context.getElementsByTagName(tag);if(tag==="*"){while(elem=results[i++]){if(elem.nodeType===1){tmp.push(elem)}}return tmp}return results};Expr.find["CLASS"]=support.getElementsByClassName&&function(className,context){if(typeof context.getElementsByClassName!==strundefined&&documentIsHTML){return context.getElementsByClassName(className)}};rbuggyMatches=[];rbuggyQSA=[];if(support.qsa=rnative.test(doc.querySelectorAll)){assert(function(div){div.innerHTML="";if(div.querySelectorAll("[t^='']").length){rbuggyQSA.push("[*^$]="+whitespace+"*(?:''|\"\")")}if(!div.querySelectorAll("[selected]").length){rbuggyQSA.push("\\["+whitespace+"*(?:value|"+booleans+")")}if(!div.querySelectorAll(":checked").length){rbuggyQSA.push(":checked")}});assert(function(div){var input=doc.createElement("input");input.setAttribute("type","hidden");div.appendChild(input).setAttribute("name","D");if(div.querySelectorAll("[name=d]").length){rbuggyQSA.push("name"+whitespace+"*[*^$|!~]?=")}if(!div.querySelectorAll(":enabled").length){rbuggyQSA.push(":enabled",":disabled")}div.querySelectorAll("*,:x");rbuggyQSA.push(",.*:")})}if(support.matchesSelector=rnative.test(matches=docElem.webkitMatchesSelector||docElem.mozMatchesSelector||docElem.oMatchesSelector||docElem.msMatchesSelector)){assert(function(div){support.disconnectedMatch=matches.call(div,"div");matches.call(div,"[s!='']:x");rbuggyMatches.push("!=",pseudos)})}rbuggyQSA=rbuggyQSA.length&&new RegExp(rbuggyQSA.join("|"));rbuggyMatches=rbuggyMatches.length&&new RegExp(rbuggyMatches.join("|"));hasCompare=rnative.test(docElem.compareDocumentPosition);contains=hasCompare||rnative.test(docElem.contains)?function(a,b){var adown=a.nodeType===9?a.documentElement:a,bup=b&&b.parentNode;return a===bup||!!(bup&&bup.nodeType===1&&(adown.contains?adown.contains(bup):a.compareDocumentPosition&&a.compareDocumentPosition(bup)&16))}:function(a,b){if(b){while(b=b.parentNode){if(b===a){return true}}}return false};sortOrder=hasCompare?function(a,b){if(a===b){hasDuplicate=true;return 0}var compare=!a.compareDocumentPosition-!b.compareDocumentPosition;if(compare){return compare}compare=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1;if(compare&1||!support.sortDetached&&b.compareDocumentPosition(a)===compare){if(a===doc||a.ownerDocument===preferredDoc&&contains(preferredDoc,a)){return-1}if(b===doc||b.ownerDocument===preferredDoc&&contains(preferredDoc,b)){return 1}return sortInput?indexOf.call(sortInput,a)-indexOf.call(sortInput,b):0}return compare&4?-1:1}:function(a,b){if(a===b){hasDuplicate=true;return 0}var cur,i=0,aup=a.parentNode,bup=b.parentNode,ap=[a],bp=[b];if(!aup||!bup){return a===doc?-1:b===doc?1:aup?-1:bup?1:sortInput?indexOf.call(sortInput,a)-indexOf.call(sortInput,b):0}else if(aup===bup){return siblingCheck(a,b)}cur=a;while(cur=cur.parentNode){ap.unshift(cur)}cur=b;while(cur=cur.parentNode){bp.unshift(cur)}while(ap[i]===bp[i]){i++}return i?siblingCheck(ap[i],bp[i]):ap[i]===preferredDoc?-1:bp[i]===preferredDoc?1:0};return doc};Sizzle.matches=function(expr,elements){return Sizzle(expr,null,null,elements)};Sizzle.matchesSelector=function(elem,expr){if((elem.ownerDocument||elem)!==document){setDocument(elem)}expr=expr.replace(rattributeQuotes,"='$1']");if(support.matchesSelector&&documentIsHTML&&(!rbuggyMatches||!rbuggyMatches.test(expr))&&(!rbuggyQSA||!rbuggyQSA.test(expr))){try{var ret=matches.call(elem,expr);if(ret||support.disconnectedMatch||elem.document&&elem.document.nodeType!==11){return ret}}catch(e){}}return Sizzle(expr,document,null,[elem]).length>0};Sizzle.contains=function(context,elem){if((context.ownerDocument||context)!==document){setDocument(context)}return contains(context,elem)};Sizzle.attr=function(elem,name){if((elem.ownerDocument||elem)!==document){setDocument(elem)}var fn=Expr.attrHandle[name.toLowerCase()],val=fn&&hasOwn.call(Expr.attrHandle,name.toLowerCase())?fn(elem,name,!documentIsHTML):undefined;return val!==undefined?val:support.attributes||!documentIsHTML?elem.getAttribute(name):(val=elem.getAttributeNode(name))&&val.specified?val.value:null};Sizzle.error=function(msg){throw new Error("Syntax error, unrecognized expression: "+msg)};Sizzle.uniqueSort=function(results){var elem,duplicates=[],j=0,i=0;hasDuplicate=!support.detectDuplicates;sortInput=!support.sortStable&&results.slice(0);results.sort(sortOrder);if(hasDuplicate){while(elem=results[i++]){if(elem===results[i]){j=duplicates.push(i)}}while(j--){results.splice(duplicates[j],1)}}sortInput=null;return results};getText=Sizzle.getText=function(elem){var node,ret="",i=0,nodeType=elem.nodeType;if(!nodeType){while(node=elem[i++]){ret+=getText(node)}}else if(nodeType===1||nodeType===9||nodeType===11){if(typeof elem.textContent==="string"){return elem.textContent}else{for(elem=elem.firstChild;elem;elem=elem.nextSibling){ret+=getText(elem)}}}else if(nodeType===3||nodeType===4){return elem.nodeValue}return ret};Expr=Sizzle.selectors={cacheLength:50,createPseudo:markFunction,match:matchExpr,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:true}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:true},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(match){match[1]=match[1].replace(runescape,funescape);match[3]=(match[4]||match[5]||"").replace(runescape,funescape);if(match[2]==="~="){match[3]=" "+match[3]+" "}return match.slice(0,4)},CHILD:function(match){match[1]=match[1].toLowerCase();if(match[1].slice(0,3)==="nth"){if(!match[3]){Sizzle.error(match[0])}match[4]=+(match[4]?match[5]+(match[6]||1):2*(match[3]==="even"||match[3]==="odd"));match[5]=+(match[7]+match[8]||match[3]==="odd")}else if(match[3]){Sizzle.error(match[0])}return match},PSEUDO:function(match){var excess,unquoted=!match[5]&&match[2];if(matchExpr["CHILD"].test(match[0])){return null}if(match[3]&&match[4]!==undefined){match[2]=match[4]}else if(unquoted&&rpseudo.test(unquoted)&&(excess=tokenize(unquoted,true))&&(excess=unquoted.indexOf(")",unquoted.length-excess)-unquoted.length)){match[0]=match[0].slice(0,excess);match[2]=unquoted.slice(0,excess)}return match.slice(0,3)}},filter:{TAG:function(nodeNameSelector){var nodeName=nodeNameSelector.replace(runescape,funescape).toLowerCase();return nodeNameSelector==="*"?function(){return true}:function(elem){return elem.nodeName&&elem.nodeName.toLowerCase()===nodeName}},CLASS:function(className){var pattern=classCache[className+" "];return pattern||(pattern=new RegExp("(^|"+whitespace+")"+className+"("+whitespace+"|$)"))&&classCache(className,function(elem){return pattern.test(typeof elem.className==="string"&&elem.className||typeof elem.getAttribute!==strundefined&&elem.getAttribute("class")||"")})},ATTR:function(name,operator,check){return function(elem){var result=Sizzle.attr(elem,name);if(result==null){return operator==="!="}if(!operator){return true}result+="";return operator==="="?result===check:operator==="!="?result!==check:operator==="^="?check&&result.indexOf(check)===0:operator==="*="?check&&result.indexOf(check)>-1:operator==="$="?check&&result.slice(-check.length)===check:operator==="~="?(" "+result+" ").indexOf(check)>-1:operator==="|="?result===check||result.slice(0,check.length+1)===check+"-":false}},CHILD:function(type,what,argument,first,last){var simple=type.slice(0,3)!=="nth",forward=type.slice(-4)!=="last",ofType=what==="of-type";return first===1&&last===0?function(elem){return!!elem.parentNode}:function(elem,context,xml){var cache,outerCache,node,diff,nodeIndex,start,dir=simple!==forward?"nextSibling":"previousSibling",parent=elem.parentNode,name=ofType&&elem.nodeName.toLowerCase(),useCache=!xml&&!ofType;if(parent){if(simple){while(dir){node=elem;while(node=node[dir]){if(ofType?node.nodeName.toLowerCase()===name:node.nodeType===1){return false}}start=dir=type==="only"&&!start&&"nextSibling"}return true}start=[forward?parent.firstChild:parent.lastChild];if(forward&&useCache){outerCache=parent[expando]||(parent[expando]={});cache=outerCache[type]||[];nodeIndex=cache[0]===dirruns&&cache[1];diff=cache[0]===dirruns&&cache[2];node=nodeIndex&&parent.childNodes[nodeIndex];while(node=++nodeIndex&&node&&node[dir]||(diff=nodeIndex=0)||start.pop()){if(node.nodeType===1&&++diff&&node===elem){outerCache[type]=[dirruns,nodeIndex,diff];break}}}else if(useCache&&(cache=(elem[expando]||(elem[expando]={}))[type])&&cache[0]===dirruns){diff=cache[1]}else{while(node=++nodeIndex&&node&&node[dir]||(diff=nodeIndex=0)||start.pop()){if((ofType?node.nodeName.toLowerCase()===name:node.nodeType===1)&&++diff){if(useCache){(node[expando]||(node[expando]={}))[type]=[dirruns,diff]}if(node===elem){break}}}}diff-=last;return diff===first||diff%first===0&&diff/first>=0}}},PSEUDO:function(pseudo,argument){var args,fn=Expr.pseudos[pseudo]||Expr.setFilters[pseudo.toLowerCase()]||Sizzle.error("unsupported pseudo: "+pseudo);if(fn[expando]){return fn(argument)}if(fn.length>1){args=[pseudo,pseudo,"",argument];return Expr.setFilters.hasOwnProperty(pseudo.toLowerCase())?markFunction(function(seed,matches){var idx,matched=fn(seed,argument),i=matched.length;while(i--){idx=indexOf.call(seed,matched[i]);seed[idx]=!(matches[idx]=matched[i])}}):function(elem){return fn(elem,0,args)}}return fn}},pseudos:{not:markFunction(function(selector){var input=[],results=[],matcher=compile(selector.replace(rtrim,"$1"));return matcher[expando]?markFunction(function(seed,matches,context,xml){var elem,unmatched=matcher(seed,null,xml,[]),i=seed.length;while(i--){if(elem=unmatched[i]){seed[i]=!(matches[i]=elem)}}}):function(elem,context,xml){input[0]=elem;matcher(input,null,xml,results);return!results.pop()}}),has:markFunction(function(selector){return function(elem){return Sizzle(selector,elem).length>0}}),contains:markFunction(function(text){return function(elem){return(elem.textContent||elem.innerText||getText(elem)).indexOf(text)>-1}}),lang:markFunction(function(lang){if(!ridentifier.test(lang||"")){Sizzle.error("unsupported lang: "+lang)}lang=lang.replace(runescape,funescape).toLowerCase();return function(elem){var elemLang;do{if(elemLang=documentIsHTML?elem.lang:elem.getAttribute("xml:lang")||elem.getAttribute("lang")){elemLang=elemLang.toLowerCase();return elemLang===lang||elemLang.indexOf(lang+"-")===0}}while((elem=elem.parentNode)&&elem.nodeType===1);return false}}),target:function(elem){var hash=window.location&&window.location.hash;return hash&&hash.slice(1)===elem.id},root:function(elem){return elem===docElem},focus:function(elem){return elem===document.activeElement&&(!document.hasFocus||document.hasFocus())&&!!(elem.type||elem.href||~elem.tabIndex)},enabled:function(elem){return elem.disabled===false},disabled:function(elem){return elem.disabled===true},checked:function(elem){var nodeName=elem.nodeName.toLowerCase();return nodeName==="input"&&!!elem.checked||nodeName==="option"&&!!elem.selected},selected:function(elem){if(elem.parentNode){elem.parentNode.selectedIndex}return elem.selected===true},empty:function(elem){for(elem=elem.firstChild;elem;elem=elem.nextSibling){if(elem.nodeType<6){return false}}return true},parent:function(elem){return!Expr.pseudos["empty"](elem)},header:function(elem){return rheader.test(elem.nodeName)},input:function(elem){return rinputs.test(elem.nodeName)},button:function(elem){var name=elem.nodeName.toLowerCase();return name==="input"&&elem.type==="button"||name==="button"},text:function(elem){var attr;return elem.nodeName.toLowerCase()==="input"&&elem.type==="text"&&((attr=elem.getAttribute("type"))==null||attr.toLowerCase()==="text")},first:createPositionalPseudo(function(){return[0]}),last:createPositionalPseudo(function(matchIndexes,length){return[length-1]}),eq:createPositionalPseudo(function(matchIndexes,length,argument){return[argument<0?argument+length:argument]}),even:createPositionalPseudo(function(matchIndexes,length){var i=0;for(;i=0;){matchIndexes.push(i)}return matchIndexes}),gt:createPositionalPseudo(function(matchIndexes,length,argument){var i=argument<0?argument+length:argument;for(;++i1?function(elem,context,xml){var i=matchers.length;while(i--){if(!matchers[i](elem,context,xml)){return false}}return true}:matchers[0]}function multipleContexts(selector,contexts,results){var i=0,len=contexts.length;for(;i-1){seed[temp]=!(results[temp]=elem)}}}}else{matcherOut=condense(matcherOut===results?matcherOut.splice(preexisting,matcherOut.length):matcherOut);if(postFinder){postFinder(null,results,matcherOut,xml)}else{push.apply(results,matcherOut)}}})}function matcherFromTokens(tokens){var checkContext,matcher,j,len=tokens.length,leadingRelative=Expr.relative[tokens[0].type],implicitRelative=leadingRelative||Expr.relative[" "],i=leadingRelative?1:0,matchContext=addCombinator(function(elem){return elem===checkContext},implicitRelative,true),matchAnyContext=addCombinator(function(elem){return indexOf.call(checkContext,elem)>-1},implicitRelative,true),matchers=[function(elem,context,xml){return!leadingRelative&&(xml||context!==outermostContext)||((checkContext=context).nodeType?matchContext(elem,context,xml):matchAnyContext(elem,context,xml))}];for(;i1&&elementMatcher(matchers),i>1&&toSelector(tokens.slice(0,i-1).concat({value:tokens[i-2].type===" "?"*":""})).replace(rtrim,"$1"),matcher,i0,byElement=elementMatchers.length>0,superMatcher=function(seed,context,xml,results,outermost){var elem,j,matcher,matchedCount=0,i="0",unmatched=seed&&[],setMatched=[],contextBackup=outermostContext,elems=seed||byElement&&Expr.find["TAG"]("*",outermost),dirrunsUnique=dirruns+=contextBackup==null?1:Math.random()||.1,len=elems.length;if(outermost){outermostContext=context!==document&&context}for(;i!==len&&(elem=elems[i])!=null;i++){if(byElement&&elem){j=0;while(matcher=elementMatchers[j++]){if(matcher(elem,context,xml)){results.push(elem);break}}if(outermost){dirruns=dirrunsUnique}}if(bySet){if(elem=!matcher&&elem){matchedCount--}if(seed){unmatched.push(elem)}}}matchedCount+=i;if(bySet&&i!==matchedCount){j=0;while(matcher=setMatchers[j++]){matcher(unmatched,setMatched,context,xml)}if(seed){if(matchedCount>0){while(i--){if(!(unmatched[i]||setMatched[i])){setMatched[i]=pop.call(results)}}}setMatched=condense(setMatched)}push.apply(results,setMatched);if(outermost&&!seed&&setMatched.length>0&&matchedCount+setMatchers.length>1){Sizzle.uniqueSort(results)}}if(outermost){dirruns=dirrunsUnique;outermostContext=contextBackup}return unmatched};return bySet?markFunction(superMatcher):superMatcher}compile=Sizzle.compile=function(selector,match){var i,setMatchers=[],elementMatchers=[],cached=compilerCache[selector+" "];if(!cached){if(!match){match=tokenize(selector)}i=match.length;while(i--){cached=matcherFromTokens(match[i]);if(cached[expando]){setMatchers.push(cached)}else{elementMatchers.push(cached)}}cached=compilerCache(selector,matcherFromGroupMatchers(elementMatchers,setMatchers));cached.selector=selector}return cached};select=Sizzle.select=function(selector,context,results,seed){var i,tokens,token,type,find,compiled=typeof selector==="function"&&selector,match=!seed&&tokenize(selector=compiled.selector||selector);results=results||[];if(match.length===1){tokens=match[0]=match[0].slice(0);if(tokens.length>2&&(token=tokens[0]).type==="ID"&&support.getById&&context.nodeType===9&&documentIsHTML&&Expr.relative[tokens[1].type]){context=(Expr.find["ID"](token.matches[0].replace(runescape,funescape),context)||[])[0];if(!context){return results}else if(compiled){context=context.parentNode}selector=selector.slice(tokens.shift().value.length)}i=matchExpr["needsContext"].test(selector)?0:tokens.length;while(i--){token=tokens[i];if(Expr.relative[type=token.type]){break}if(find=Expr.find[type]){if(seed=find(token.matches[0].replace(runescape,funescape),rsibling.test(tokens[0].type)&&testContext(context.parentNode)||context)){ -tokens.splice(i,1);selector=seed.length&&toSelector(tokens);if(!selector){push.apply(results,seed);return results}break}}}}(compiled||compile(selector,match))(seed,context,!documentIsHTML,results,rsibling.test(selector)&&testContext(context.parentNode)||context);return results};support.sortStable=expando.split("").sort(sortOrder).join("")===expando;support.detectDuplicates=!!hasDuplicate;setDocument();support.sortDetached=assert(function(div1){return div1.compareDocumentPosition(document.createElement("div"))&1});if(!assert(function(div){div.innerHTML="";return div.firstChild.getAttribute("href")==="#"})){addHandle("type|href|height|width",function(elem,name,isXML){if(!isXML){return elem.getAttribute(name,name.toLowerCase()==="type"?1:2)}})}if(!support.attributes||!assert(function(div){div.innerHTML="";div.firstChild.setAttribute("value","");return div.firstChild.getAttribute("value")===""})){addHandle("value",function(elem,name,isXML){if(!isXML&&elem.nodeName.toLowerCase()==="input"){return elem.defaultValue}})}if(!assert(function(div){return div.getAttribute("disabled")==null})){addHandle(booleans,function(elem,name,isXML){var val;if(!isXML){return elem[name]===true?name.toLowerCase():(val=elem.getAttributeNode(name))&&val.specified?val.value:null}})}if(typeof define==="function"&&define.amd){define(function(){return Sizzle})}else if(typeof module!=="undefined"&&module.exports){module.exports=Sizzle}else{window.Sizzle=Sizzle}})(window);(function(engine){var extendElements=Prototype.Selector.extendElements;function select(selector,scope){return extendElements(engine(selector,scope||document))}function match(element,selector){return engine.matches(selector,[element]).length==1}Prototype.Selector.engine=engine;Prototype.Selector.select=select;Prototype.Selector.match=match})(Sizzle);window.Sizzle=Prototype._original_property;delete Prototype._original_property;var Form={reset:function(form){form=$(form);form.reset();return form},serializeElements:function(elements,options){if(typeof options!="object")options={hash:!!options};else if(Object.isUndefined(options.hash))options.hash=true;var key,value,submitted=false,submit=options.submit,accumulator,initial;if(options.hash){initial={};accumulator=function(result,key,value){if(key in result){if(!Object.isArray(result[key]))result[key]=[result[key]];result[key]=result[key].concat(value)}else result[key]=value;return result}}else{initial="";accumulator=function(result,key,values){if(!Object.isArray(values)){values=[values]}if(!values.length){return result}var encodedKey=encodeURIComponent(key).gsub(/%20/,"+");return result+(result?"&":"")+values.map(function(value){value=value.gsub(/(\r)?\n/,"\r\n");value=encodeURIComponent(value);value=value.gsub(/%20/,"+");return encodedKey+"="+value}).join("&")}}return elements.inject(initial,function(result,element){if(!element.disabled&&element.name){key=element.name;value=$(element).getValue();if(value!=null&&element.type!="file"&&(element.type!="submit"||!submitted&&submit!==false&&(!submit||key==submit)&&(submitted=true))){result=accumulator(result,key,value)}}return result})}};Form.Methods={serialize:function(form,options){return Form.serializeElements(Form.getElements(form),options)},getElements:function(form){var elements=$(form).getElementsByTagName("*");var element,results=[],serializers=Form.Element.Serializers;for(var i=0;element=elements[i];i++){if(serializers[element.tagName.toLowerCase()])results.push(Element.extend(element))}return results},getInputs:function(form,typeName,name){form=$(form);var inputs=form.getElementsByTagName("input");if(!typeName&&!name)return $A(inputs).map(Element.extend);for(var i=0,matchingInputs=[],length=inputs.length;i=0}).sortBy(function(element){return element.tabIndex}).first();return firstByIndex?firstByIndex:elements.find(function(element){return/^(?:input|select|textarea)$/i.test(element.tagName)})},focusFirstElement:function(form){form=$(form);var element=form.findFirstElement();if(element)element.activate();return form},request:function(form,options){form=$(form),options=Object.clone(options||{});var params=options.parameters,action=form.readAttribute("action")||"";if(action.blank())action=window.location.href;options.parameters=form.serialize(true);if(params){if(Object.isString(params))params=params.toQueryParams();Object.extend(options.parameters,params)}if(form.hasAttribute("method")&&!options.method)options.method=form.method;return new Ajax.Request(action,options)}};Form.Element={focus:function(element){$(element).focus();return element},select:function(element){$(element).select();return element}};Form.Element.Methods={serialize:function(element){element=$(element);if(!element.disabled&&element.name){var value=element.getValue();if(value!=undefined){var pair={};pair[element.name]=value;return Object.toQueryString(pair)}}return""},getValue:function(element){element=$(element);var method=element.tagName.toLowerCase();return Form.Element.Serializers[method](element)},setValue:function(element,value){element=$(element);var method=element.tagName.toLowerCase();Form.Element.Serializers[method](element,value);return element},clear:function(element){$(element).value="";return element},present:function(element){return $(element).value!=""},activate:function(element){element=$(element);try{element.focus();if(element.select&&(element.tagName.toLowerCase()!="input"||!/^(?:button|reset|submit)$/i.test(element.type)))element.select()}catch(e){}return element},disable:function(element){element=$(element);element.disabled=true;return element},enable:function(element){element=$(element);element.disabled=false;return element}};var Field=Form.Element;var $F=Form.Element.Methods.getValue;Form.Element.Serializers=function(){function input(element,value){switch(element.type.toLowerCase()){case"checkbox":case"radio":return inputSelector(element,value);default:return valueSelector(element,value)}}function inputSelector(element,value){if(Object.isUndefined(value))return element.checked?element.value:null;else element.checked=!!value}function valueSelector(element,value){if(Object.isUndefined(value))return element.value;else element.value=value}function select(element,value){if(Object.isUndefined(value))return(element.type==="select-one"?selectOne:selectMany)(element);var opt,currentValue,single=!Object.isArray(value);for(var i=0,length=element.length;i=0?optionValue(element.options[index]):null}function selectMany(element){var values,length=element.length;if(!length)return null;for(var i=0,values=[];i=this.offset[1]&&y=this.offset[0]&&x=this.offset[1]&&this.ycomp=this.offset[0]&&this.xcomp0})._each(iterator,context)},set:function(className){this.element.className=className},add:function(classNameToAdd){if(this.include(classNameToAdd))return;this.set($A(this).concat(classNameToAdd).join(" "))},remove:function(classNameToRemove){if(!this.include(classNameToRemove))return;this.set($A(this).without(classNameToRemove).join(" "))},toString:function(){return $A(this).join(" ")}};Object.extend(Element.ClassNames.prototype,Enumerable);(function(){window.Selector=Class.create({initialize:function(expression){this.expression=expression.strip()},findElements:function(rootElement){return Prototype.Selector.select(this.expression,rootElement)},match:function(element){return Prototype.Selector.match(element,this.expression)},toString:function(){return this.expression},inspect:function(){return"#"}});Object.extend(Selector,{matchElements:function(elements,expression){var match=Prototype.Selector.match,results=[];for(var i=0,length=elements.length;i=y;y++)if(l=Math.sin(h),m=Math.tan(h),r=m*Math.sqrt(1-t*l*l),c=Math.sin(2*h),u=i*h-s*c+e*Math.sin(4*h)-o*Math.sin(6*h),d=i-2*s*Math.cos(2*h)+4*e*Math.cos(4*h)-6*o*Math.cos(6*h),p=2*u+r*(u*u+a)-2*n*(r*u+1),_=t*c*(u*u+a-2*n*u)/(2*r),f=2*(n-u)*(r*d-2/c)-2*d,P=p/(_+f),h+=P,1e-10>=Math.abs(P))return h;return Proj4js.reportError("phi4z: No convergence"),null}function e4fn(t){var i,s;return i=1+t,s=1-t,Math.sqrt(Math.pow(i,i)*Math.pow(s,s))}var Proj4js={defaultDatum:"WGS84",transform:function(t,i,s){if(!t.readyToUse)return this.reportError("Proj4js initialization for:"+t.srsCode+" not yet complete"),s;if(!i.readyToUse)return this.reportError("Proj4js initialization for:"+i.srsCode+" not yet complete"),s;if(t.datum&&i.datum&&((t.datum.datum_type==Proj4js.common.PJD_3PARAM||t.datum.datum_type==Proj4js.common.PJD_7PARAM)&&"WGS84"!=i.datumCode||(i.datum.datum_type==Proj4js.common.PJD_3PARAM||i.datum.datum_type==Proj4js.common.PJD_7PARAM)&&"WGS84"!=t.datumCode)){var e=Proj4js.WGS84;this.transform(t,e,s),t=e}return"enu"!=t.axis&&this.adjust_axis(t,!1,s),"longlat"==t.projName?(s.x*=Proj4js.common.D2R,s.y*=Proj4js.common.D2R):(t.to_meter&&(s.x*=t.to_meter,s.y*=t.to_meter),t.inverse(s)),t.from_greenwich&&(s.x+=t.from_greenwich),s=this.datum_transform(t.datum,i.datum,s),i.from_greenwich&&(s.x-=i.from_greenwich),"longlat"==i.projName?(s.x*=Proj4js.common.R2D,s.y*=Proj4js.common.R2D):(i.forward(s),i.to_meter&&(s.x/=i.to_meter,s.y/=i.to_meter)),"enu"!=i.axis&&this.adjust_axis(i,!0,s),s},datum_transform:function(t,i,s){return t.compare_datums(i)?s:t.datum_type==Proj4js.common.PJD_NODATUM||i.datum_type==Proj4js.common.PJD_NODATUM?s:((t.es!=i.es||t.a!=i.a||t.datum_type==Proj4js.common.PJD_3PARAM||t.datum_type==Proj4js.common.PJD_7PARAM||i.datum_type==Proj4js.common.PJD_3PARAM||i.datum_type==Proj4js.common.PJD_7PARAM)&&(t.geodetic_to_geocentric(s),(t.datum_type==Proj4js.common.PJD_3PARAM||t.datum_type==Proj4js.common.PJD_7PARAM)&&t.geocentric_to_wgs84(s),(i.datum_type==Proj4js.common.PJD_3PARAM||i.datum_type==Proj4js.common.PJD_7PARAM)&&i.geocentric_from_wgs84(s),i.geocentric_to_geodetic(s)),s)},adjust_axis:function(t,i,s){for(var e,o,n=s.x,a=s.y,r=s.z||0,h=0;3>h;h++)if(!i||2!=h||void 0!==s.z)switch(0==h?(e=n,o="x"):1==h?(e=a,o="y"):(e=r,o="z"),t.axis[h]){case"e":s[o]=e;break;case"w":s[o]=-e;break;case"n":s[o]=e;break;case"s":s[o]=-e;break;case"u":void 0!==s[o]&&(s.z=e);break;case"d":void 0!==s[o]&&(s.z=-e);break;default:return alert("ERROR: unknow axis ("+t.axis[h]+") - check definition of "+t.projName),null}return s},reportError:function(){},extend:function(t,i){if(t=t||{},i)for(var s in i){var e=i[s];void 0!==e&&(t[s]=e)}return t},Class:function(){for(var t,i=function(){this.initialize.apply(this,arguments)},s={},e=0;arguments.length>e;++e)t="function"==typeof arguments[e]?arguments[e].prototype:arguments[e],Proj4js.extend(s,t);return i.prototype=s,i},bind:function(t,i){var s=Array.prototype.slice.apply(arguments,[2]);return function(){var e=s.concat(Array.prototype.slice.apply(arguments,[0])); +Math.sign = Math.sign || function(x) { + x = +x; // convert to a number + if (x === 0 || isNaN(x)) { + return x; + } + return x > 0 ? 1 : -1; +} -return t.apply(i,e)}},scriptName:"proj4js-combined.js",defsLookupService:"http://spatialreference.org/ref",libPath:null,getScriptLocation:function(){if(this.libPath)return this.libPath;for(var t=this.scriptName,i=t.length,s=document.getElementsByTagName("script"),e=0;s.length>e;e++){var o=s[e].getAttribute("src");if(o){var n=o.lastIndexOf(t);if(n>-1&&n+i==o.length){this.libPath=o.slice(0,-i);break}}}return this.libPath||""},loadScript:function(t,i,s,e){var o=document.createElement("script");o.defer=!1,o.type="text/javascript",o.id=t,o.src=t,o.onload=i,o.onerror=s,o.loadCheck=e,/MSIE/.test(navigator.userAgent)&&(o.onreadystatechange=this.checkReadyState),document.getElementsByTagName("head")[0].appendChild(o)},checkReadyState:function(){"loaded"==this.readyState&&(this.loadCheck()?this.onload():this.onerror())}};Proj4js.Proj=Proj4js.Class({readyToUse:!1,title:null,projName:null,units:null,datum:null,x0:0,y0:0,localCS:!1,queue:null,initialize:function(t,i){if(this.srsCodeInput=t,this.queue=[],i&&this.queue.push(i),t.indexOf("GEOGCS")>=0||t.indexOf("GEOCCS")>=0||t.indexOf("PROJCS")>=0||t.indexOf("LOCAL_CS")>=0)return this.parseWKT(t),this.deriveConstants(),this.loadProjCode(this.projName),void 0;if(0==t.indexOf("urn:")){var s=t.split(":");"ogc"!=s[1]&&"x-ogc"!=s[1]||"def"!=s[2]||"crs"!=s[3]||(t=s[4]+":"+s[s.length-1])}else if(0==t.indexOf("http://")){var e=t.split("#");e[0].match(/epsg.org/)?t="EPSG:"+e[1]:e[0].match(/RIG.xml/)&&(t="IGNF:"+e[1])}this.srsCode=t.toUpperCase(),0==this.srsCode.indexOf("EPSG")?(this.srsCode=this.srsCode,this.srsAuth="epsg",this.srsProjNumber=this.srsCode.substring(5)):0==this.srsCode.indexOf("IGNF")?(this.srsCode=this.srsCode,this.srsAuth="IGNF",this.srsProjNumber=this.srsCode.substring(5)):0==this.srsCode.indexOf("CRS")?(this.srsCode=this.srsCode,this.srsAuth="CRS",this.srsProjNumber=this.srsCode.substring(4)):(this.srsAuth="",this.srsProjNumber=this.srsCode),this.loadProjDefinition()},loadProjDefinition:function(){if(Proj4js.defs[this.srsCode])return this.defsLoaded(),void 0;var t=Proj4js.getScriptLocation()+"defs/"+this.srsAuth.toUpperCase()+this.srsProjNumber+".js";Proj4js.loadScript(t,Proj4js.bind(this.defsLoaded,this),Proj4js.bind(this.loadFromService,this),Proj4js.bind(this.checkDefsLoaded,this))},loadFromService:function(){var t=Proj4js.defsLookupService+"/"+this.srsAuth+"/"+this.srsProjNumber+"/proj4js/";Proj4js.loadScript(t,Proj4js.bind(this.defsLoaded,this),Proj4js.bind(this.defsFailed,this),Proj4js.bind(this.checkDefsLoaded,this))},defsLoaded:function(){this.parseDefs(),this.loadProjCode(this.projName)},checkDefsLoaded:function(){return Proj4js.defs[this.srsCode]?!0:!1},defsFailed:function(){Proj4js.reportError("failed to load projection definition for: "+this.srsCode),Proj4js.defs[this.srsCode]=Proj4js.defs.WGS84,this.defsLoaded()},loadProjCode:function(t){if(Proj4js.Proj[t])return this.initTransforms(),void 0;var i=Proj4js.getScriptLocation()+"projCode/"+t+".js";Proj4js.loadScript(i,Proj4js.bind(this.loadProjCodeSuccess,this,t),Proj4js.bind(this.loadProjCodeFailure,this,t),Proj4js.bind(this.checkCodeLoaded,this,t))},loadProjCodeSuccess:function(t){Proj4js.Proj[t].dependsOn?this.loadProjCode(Proj4js.Proj[t].dependsOn):this.initTransforms()},loadProjCodeFailure:function(t){Proj4js.reportError("failed to find projection file for: "+t)},checkCodeLoaded:function(t){return Proj4js.Proj[t]?!0:!1},initTransforms:function(){if(Proj4js.extend(this,Proj4js.Proj[this.projName]),this.init(),this.readyToUse=!0,this.queue)for(var t;t=this.queue.shift();)t.call(this,this)},wktRE:/^(\w+)\[(.*)\]$/,parseWKT:function(t){var i=t.match(this.wktRE);if(i){var s,e=i[1],o=i[2],n=o.split(",");s="TOWGS84"==e.toUpperCase()?e:n.shift(),s=s.replace(/^\"/,""),s=s.replace(/\"$/,"");for(var a=[],r=0,h="",l=0;n.length>l;++l){for(var c=n[l],m=0;c.length>m;++m)"["==c.charAt(m)&&++r,"]"==c.charAt(m)&&--r;h+=c,0===r?(a.push(h),h=""):h+=","}switch(e){case"LOCAL_CS":this.projName="identity",this.localCS=!0,this.srsCode=s;break;case"GEOGCS":this.projName="longlat",this.geocsCode=s,this.srsCode||(this.srsCode=s);break;case"PROJCS":this.srsCode=s;break;case"GEOCCS":break;case"PROJECTION":this.projName=Proj4js.wktProjections[s];break;case"DATUM":this.datumName=s;break;case"LOCAL_DATUM":this.datumCode="none";break;case"SPHEROID":this.ellps=s,this.a=parseFloat(a.shift()),this.rf=parseFloat(a.shift());break;case"PRIMEM":this.from_greenwich=parseFloat(a.shift());break;case"UNIT":this.units=s,this.unitsPerMeter=parseFloat(a.shift());break;case"PARAMETER":var u=s.toLowerCase(),d=parseFloat(a.shift());switch(u){case"false_easting":this.x0=d;break;case"false_northing":this.y0=d;break;case"scale_factor":this.k0=d;break;case"central_meridian":this.long0=d*Proj4js.common.D2R;break;case"latitude_of_origin":this.lat0=d*Proj4js.common.D2R;break;case"more_here":break;default:}break;case"TOWGS84":this.datum_params=a;break;case"AXIS":var u=s.toLowerCase(),d=a.shift();switch(d){case"EAST":d="e";break;case"WEST":d="w";break;case"NORTH":d="n";break;case"SOUTH":d="s";break;case"UP":d="u";break;case"DOWN":d="d";break;case"OTHER":default:d=" "}switch(this.axis||(this.axis="enu"),u){case"x":this.axis=d+this.axis.substr(1,2);break;case"y":this.axis=this.axis.substr(0,1)+d+this.axis.substr(2,1);break;case"z":this.axis=this.axis.substr(0,2)+d;break;default:}case"MORE_HERE":break;default:}for(var l=0;a.length>l;++l)this.parseWKT(a[l])}},parseDefs:function(){this.defData=Proj4js.defs[this.srsCode];var t,i;if(this.defData){for(var s=this.defData.split("+"),e=0;s.length>e;e++){var o=s[e].split("=");switch(t=o[0].toLowerCase(),i=o[1],t.replace(/\s/gi,"")){case"":break;case"title":this.title=i;break;case"proj":this.projName=i.replace(/\s/gi,"");break;case"units":this.units=i.replace(/\s/gi,"");break;case"datum":this.datumCode=i.replace(/\s/gi,"");break;case"nadgrids":this.nagrids=i.replace(/\s/gi,"");break;case"ellps":this.ellps=i.replace(/\s/gi,"");break;case"a":this.a=parseFloat(i);break;case"b":this.b=parseFloat(i);break;case"rf":this.rf=parseFloat(i);break;case"lat_0":this.lat0=i*Proj4js.common.D2R;break;case"lat_1":this.lat1=i*Proj4js.common.D2R;break;case"lat_2":this.lat2=i*Proj4js.common.D2R;break;case"lat_ts":this.lat_ts=i*Proj4js.common.D2R;break;case"lon_0":this.long0=i*Proj4js.common.D2R;break;case"alpha":this.alpha=parseFloat(i)*Proj4js.common.D2R;break;case"lonc":this.longc=i*Proj4js.common.D2R;break;case"x_0":this.x0=parseFloat(i);break;case"y_0":this.y0=parseFloat(i);break;case"k_0":this.k0=parseFloat(i);break;case"k":this.k0=parseFloat(i);break;case"r_a":this.R_A=!0;break;case"zone":this.zone=parseInt(i,10);break;case"south":this.utmSouth=!0;break;case"towgs84":this.datum_params=i.split(",");break;case"to_meter":this.to_meter=parseFloat(i);break;case"from_greenwich":this.from_greenwich=i*Proj4js.common.D2R;break;case"pm":i=i.replace(/\s/gi,""),this.from_greenwich=Proj4js.PrimeMeridian[i]?Proj4js.PrimeMeridian[i]:parseFloat(i),this.from_greenwich*=Proj4js.common.D2R;break;case"axis":i=i.replace(/\s/gi,"");var n="ewnsud";3==i.length&&-1!=n.indexOf(i.substr(0,1))&&-1!=n.indexOf(i.substr(1,1))&&-1!=n.indexOf(i.substr(2,1))&&(this.axis=i);break;case"no_defs":break;default:}}this.deriveConstants()}},deriveConstants:function(){if("@null"==this.nagrids&&(this.datumCode="none"),this.datumCode&&"none"!=this.datumCode){var t=Proj4js.Datum[this.datumCode];t&&(this.datum_params=t.towgs84?t.towgs84.split(","):null,this.ellps=t.ellipse,this.datumName=t.datumName?t.datumName:this.datumCode)}if(!this.a){var i=Proj4js.Ellipsoid[this.ellps]?Proj4js.Ellipsoid[this.ellps]:Proj4js.Ellipsoid.WGS84;Proj4js.extend(this,i)}this.rf&&!this.b&&(this.b=(1-1/this.rf)*this.a),(0===this.rf||Math.abs(this.a-this.b)=a;a++)if(s=t*Math.sin(n),e=this.HALF_PI-2*Math.atan(i*Math.pow((1-s)/(1+s),o))-n,n+=e,1e-10>=Math.abs(e))return n;return alert("phi2z has NoConvergence"),-9999},qsfnz:function(t,i){var s;return t>1e-7?(s=t*i,(1-t*t)*(i/(1-s*s)-.5/t*Math.log((1-s)/(1+s)))):2*i},asinz:function(t){return Math.abs(t)>1&&(t=t>1?1:-1),Math.asin(t)},e0fn:function(t){return 1-.25*t*(1+t/16*(3+1.25*t))},e1fn:function(t){return.375*t*(1+.25*t*(1+.46875*t))},e2fn:function(t){return.05859375*t*t*(1+.75*t)},e3fn:function(t){return t*t*t*(35/3072)},mlfn:function(t,i,s,e,o){return t*o-i*Math.sin(2*o)+s*Math.sin(4*o)-e*Math.sin(6*o)},srat:function(t,i){return Math.pow((1-t)/(1+t),i)},sign:function(t){return 0>t?-1:1},adjust_lon:function(t){return t=Math.abs(t)this.HALF_PI)return+Number.NaN;if(i==this.HALF_PI)return Number.POSITIVE_INFINITY;if(i==-1*this.HALF_PI)return-1*Number.POSITIVE_INFINITY;var e=t*s;return Math.log(Math.tan((this.HALF_PI+i)/2))+t*Math.log((1-e)/(1+e))/2},fL:function(t,i){return 2*Math.atan(t*Math.exp(i))-this.HALF_PI},invlatiso:function(t,i){var s=this.fL(1,i),e=0,o=0;do e=s,o=t*Math.sin(e),s=this.fL(Math.exp(t*Math.log((1+o)/(1-o))/2),i);while(Math.abs(s-e)>1e-12);return s},sinh:function(t){var i=Math.exp(t);return i=(i-1/i)/2},cosh:function(t){var i=Math.exp(t);return i=(i+1/i)/2},tanh:function(t){var i=Math.exp(t);return i=(i-1/i)/(i+1/i)},asinh:function(t){var i=t>=0?1:-1;return i*Math.log(Math.abs(t)+Math.sqrt(t*t+1))},acosh:function(t){return 2*Math.log(Math.sqrt((t+1)/2)+Math.sqrt((t-1)/2))},atanh:function(t){return Math.log((t-1)/(t+1))/2},gN:function(t,i,s){var e=i*s;return t/Math.sqrt(1-e*e)},pj_enfn:function(t){var i=[];i[0]=this.C00-t*(this.C02+t*(this.C04+t*(this.C06+t*this.C08))),i[1]=t*(this.C22-t*(this.C04+t*(this.C06+t*this.C08)));var s=t*t;return i[2]=s*(this.C44-t*(this.C46+t*this.C48)),s*=t,i[3]=s*(this.C66-t*this.C68),i[4]=s*t*this.C88,i},pj_mlfn:function(t,i,s,e){return s*=i,i*=i,e[0]*t-s*(e[1]+i*(e[2]+i*(e[3]+i*e[4])))},pj_inv_mlfn:function(t,i,s){for(var e=1/(1-i),o=t,n=Proj4js.common.MAX_ITER;n;--n){var a=Math.sin(o),r=1-i*a*a;if(r=(this.pj_mlfn(o,a,Math.cos(o),s)-t)*r*Math.sqrt(r)*e,o-=r,Math.abs(r)i;i++)t.datum_params[i]=parseFloat(t.datum_params[i]);(0!=t.datum_params[0]||0!=t.datum_params[1]||0!=t.datum_params[2])&&(this.datum_type=Proj4js.common.PJD_3PARAM),t.datum_params.length>3&&(0!=t.datum_params[3]||0!=t.datum_params[4]||0!=t.datum_params[5]||0!=t.datum_params[6])&&(this.datum_type=Proj4js.common.PJD_7PARAM,t.datum_params[3]*=Proj4js.common.SEC_TO_RAD,t.datum_params[4]*=Proj4js.common.SEC_TO_RAD,t.datum_params[5]*=Proj4js.common.SEC_TO_RAD,t.datum_params[6]=t.datum_params[6]/1e6+1)}t&&(this.a=t.a,this.b=t.b,this.es=t.es,this.ep2=t.ep2,this.datum_params=t.datum_params)},compare_datums:function(t){return this.datum_type!=t.datum_type?!1:this.a!=t.a||Math.abs(this.es-t.es)>5e-11?!1:this.datum_type==Proj4js.common.PJD_3PARAM?this.datum_params[0]==t.datum_params[0]&&this.datum_params[1]==t.datum_params[1]&&this.datum_params[2]==t.datum_params[2]:this.datum_type==Proj4js.common.PJD_7PARAM?this.datum_params[0]==t.datum_params[0]&&this.datum_params[1]==t.datum_params[1]&&this.datum_params[2]==t.datum_params[2]&&this.datum_params[3]==t.datum_params[3]&&this.datum_params[4]==t.datum_params[4]&&this.datum_params[5]==t.datum_params[5]&&this.datum_params[6]==t.datum_params[6]:this.datum_type==Proj4js.common.PJD_GRIDSHIFT||t.datum_type==Proj4js.common.PJD_GRIDSHIFT?(alert("ERROR: Grid shift transformations are not implemented."),!1):!0},geodetic_to_geocentric:function(t){var i,s,e,o,n,a,r,h=t.x,l=t.y,c=t.z?t.z:0,m=0;if(-Proj4js.common.HALF_PI>l&&l>-1.001*Proj4js.common.HALF_PI)l=-Proj4js.common.HALF_PI;else if(l>Proj4js.common.HALF_PI&&1.001*Proj4js.common.HALF_PI>l)l=Proj4js.common.HALF_PI;else if(-Proj4js.common.HALF_PI>l||l>Proj4js.common.HALF_PI)return Proj4js.reportError("geocent:lat out of range:"+l),null;return h>Proj4js.common.PI&&(h-=2*Proj4js.common.PI),n=Math.sin(l),r=Math.cos(l),a=n*n,o=this.a/Math.sqrt(1-this.es*a),i=(o+c)*r*Math.cos(h),s=(o+c)*r*Math.sin(h),e=(o*(1-this.es)+c)*n,t.x=i,t.y=s,t.z=e,m},geocentric_to_geodetic:function(t){var i,s,e,o,n,a,r,h,l,c,m,u,d,p,_,f,P,y=1e-12,g=y*y,L=30,v=t.x,j=t.y,M=t.z?t.z:0;if(d=!1,i=Math.sqrt(v*v+j*j),s=Math.sqrt(v*v+j*j+M*M),y>i/this.a){if(d=!0,_=0,y>s/this.a)return f=Proj4js.common.HALF_PI,P=-this.b,void 0}else _=Math.atan2(j,v);e=M/s,o=i/s,n=1/Math.sqrt(1-this.es*(2-this.es)*o*o),h=o*(1-this.es)*n,l=e*n,p=0;do p++,r=this.a/Math.sqrt(1-this.es*l*l),P=i*h+M*l-r*(1-this.es*l*l),a=this.es*r/(r+P),n=1/Math.sqrt(1-a*(2-a)*o*o),c=o*(1-a)*n,m=e*n,u=m*h-c*l,h=c,l=m;while(u*u>g&&L>p);return f=Math.atan(m/Math.abs(c)),t.x=_,t.y=f,t.z=P,t},geocentric_to_geodetic_noniter:function(t){var i,s,e,o,n,a,r,h,l,c,m,u,d,p,_,f,P,y=t.x,g=t.y,L=t.z?t.z:0;if(y=parseFloat(y),g=parseFloat(g),L=parseFloat(L),P=!1,0!=y)i=Math.atan2(g,y);else if(g>0)i=Proj4js.common.HALF_PI;else if(0>g)i=-Proj4js.common.HALF_PI;else if(P=!0,i=0,L>0)s=Proj4js.common.HALF_PI;else{if(!(0>L))return s=Proj4js.common.HALF_PI,e=-this.b,void 0;s=-Proj4js.common.HALF_PI}return n=y*y+g*g,o=Math.sqrt(n),a=L*Proj4js.common.AD_C,h=Math.sqrt(a*a+n),c=a/h,u=o/h,m=c*c*c,r=L+this.b*this.ep2*m,f=o-this.a*this.es*u*u*u,l=Math.sqrt(r*r+f*f),d=r/l,p=f/l,_=this.a/Math.sqrt(1-this.es*d*d),e=p>=Proj4js.common.COS_67P5?o/p-_:-Proj4js.common.COS_67P5>=p?o/-p-_:L/d+_*(this.es-1),0==P&&(s=Math.atan(d/p)),t.x=i,t.y=s,t.z=e,t},geocentric_to_wgs84:function(t){if(this.datum_type==Proj4js.common.PJD_3PARAM)t.x+=this.datum_params[0],t.y+=this.datum_params[1],t.z+=this.datum_params[2];else if(this.datum_type==Proj4js.common.PJD_7PARAM){var i=this.datum_params[0],s=this.datum_params[1],e=this.datum_params[2],o=this.datum_params[3],n=this.datum_params[4],a=this.datum_params[5],r=this.datum_params[6],h=r*(t.x-a*t.y+n*t.z)+i,l=r*(a*t.x+t.y-o*t.z)+s,c=r*(-n*t.x+o*t.y+t.z)+e;t.x=h,t.y=l,t.z=c}},geocentric_from_wgs84:function(t){if(this.datum_type==Proj4js.common.PJD_3PARAM)t.x-=this.datum_params[0],t.y-=this.datum_params[1],t.z-=this.datum_params[2];else if(this.datum_type==Proj4js.common.PJD_7PARAM){var i=this.datum_params[0],s=this.datum_params[1],e=this.datum_params[2],o=this.datum_params[3],n=this.datum_params[4],a=this.datum_params[5],r=this.datum_params[6],h=(t.x-i)/r,l=(t.y-s)/r,c=(t.z-e)/r;t.x=h+a*l-n*c,t.y=-a*h+l+o*c,t.z=n*h-o*l+c}}}),Proj4js.Point=Proj4js.Class({initialize:function(t,i,s){if("object"==typeof t)this.x=t[0],this.y=t[1],this.z=t[2]||0;else if("string"==typeof t&&i===void 0){var e=t.split(",");this.x=parseFloat(e[0]),this.y=parseFloat(e[1]),this.z=parseFloat(e[2])||0}else this.x=t,this.y=i,this.z=s||0},clone:function(){return new Proj4js.Point(this.x,this.y,this.z)},toString:function(){return"x="+this.x+",y="+this.y},toShortString:function(){return this.x+", "+this.y}}),Proj4js.PrimeMeridian={greenwich:0,lisbon:-9.131906111111,paris:2.337229166667,bogota:-74.080916666667,madrid:-3.687938888889,rome:12.452333333333,bern:7.439583333333,jakarta:106.807719444444,ferro:-17.666666666667,brussels:4.367975,stockholm:18.058277777778,athens:23.7163375,oslo:10.722916666667},Proj4js.Ellipsoid={MERIT:{a:6378137,rf:298.257,ellipseName:"MERIT 1983"},SGS85:{a:6378136,rf:298.257,ellipseName:"Soviet Geodetic System 85"},GRS80:{a:6378137,rf:298.257222101,ellipseName:"GRS 1980(IUGG, 1980)"},IAU76:{a:6378140,rf:298.257,ellipseName:"IAU 1976"},airy:{a:6377563.396,b:6356256.91,ellipseName:"Airy 1830"},"APL4.":{a:6378137,rf:298.25,ellipseName:"Appl. Physics. 1965"},NWL9D:{a:6378145,rf:298.25,ellipseName:"Naval Weapons Lab., 1965"},mod_airy:{a:6377340.189,b:6356034.446,ellipseName:"Modified Airy"},andrae:{a:6377104.43,rf:300,ellipseName:"Andrae 1876 (Den., Iclnd.)"},aust_SA:{a:6378160,rf:298.25,ellipseName:"Australian Natl & S. Amer. 1969"},GRS67:{a:6378160,rf:298.247167427,ellipseName:"GRS 67(IUGG 1967)"},bessel:{a:6377397.155,rf:299.1528128,ellipseName:"Bessel 1841"},bess_nam:{a:6377483.865,rf:299.1528128,ellipseName:"Bessel 1841 (Namibia)"},clrk66:{a:6378206.4,b:6356583.8,ellipseName:"Clarke 1866"},clrk80:{a:6378249.145,rf:293.4663,ellipseName:"Clarke 1880 mod."},CPM:{a:6375738.7,rf:334.29,ellipseName:"Comm. des Poids et Mesures 1799"},delmbr:{a:6376428,rf:311.5,ellipseName:"Delambre 1810 (Belgium)"},engelis:{a:6378136.05,rf:298.2566,ellipseName:"Engelis 1985"},evrst30:{a:6377276.345,rf:300.8017,ellipseName:"Everest 1830"},evrst48:{a:6377304.063,rf:300.8017,ellipseName:"Everest 1948"},evrst56:{a:6377301.243,rf:300.8017,ellipseName:"Everest 1956"},evrst69:{a:6377295.664,rf:300.8017,ellipseName:"Everest 1969"},evrstSS:{a:6377298.556,rf:300.8017,ellipseName:"Everest (Sabah & Sarawak)"},fschr60:{a:6378166,rf:298.3,ellipseName:"Fischer (Mercury Datum) 1960"},fschr60m:{a:6378155,rf:298.3,ellipseName:"Fischer 1960"},fschr68:{a:6378150,rf:298.3,ellipseName:"Fischer 1968"},helmert:{a:6378200,rf:298.3,ellipseName:"Helmert 1906"},hough:{a:6378270,rf:297,ellipseName:"Hough"},intl:{a:6378388,rf:297,ellipseName:"International 1909 (Hayford)"},kaula:{a:6378163,rf:298.24,ellipseName:"Kaula 1961"},lerch:{a:6378139,rf:298.257,ellipseName:"Lerch 1979"},mprts:{a:6397300,rf:191,ellipseName:"Maupertius 1738"},new_intl:{a:6378157.5,b:6356772.2,ellipseName:"New International 1967"},plessis:{a:6376523,rf:6355863,ellipseName:"Plessis 1817 (France)"},krass:{a:6378245,rf:298.3,ellipseName:"Krassovsky, 1942"},SEasia:{a:6378155,b:6356773.3205,ellipseName:"Southeast Asia"},walbeck:{a:6376896,b:6355834.8467,ellipseName:"Walbeck"},WGS60:{a:6378165,rf:298.3,ellipseName:"WGS 60"},WGS66:{a:6378145,rf:298.25,ellipseName:"WGS 66"},WGS72:{a:6378135,rf:298.26,ellipseName:"WGS 72"},WGS84:{a:6378137,rf:298.257223563,ellipseName:"WGS 84"},sphere:{a:6370997,b:6370997,ellipseName:"Normal Sphere (r=6370997)"}},Proj4js.Datum={WGS84:{towgs84:"0,0,0",ellipse:"WGS84",datumName:"WGS84"},GGRS87:{towgs84:"-199.87,74.79,246.62",ellipse:"GRS80",datumName:"Greek_Geodetic_Reference_System_1987"},NAD83:{towgs84:"0,0,0",ellipse:"GRS80",datumName:"North_American_Datum_1983"},NAD27:{nadgrids:"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat",ellipse:"clrk66",datumName:"North_American_Datum_1927"},potsdam:{towgs84:"606.0,23.0,413.0",ellipse:"bessel",datumName:"Potsdam Rauenberg 1950 DHDN"},carthage:{towgs84:"-263.0,6.0,431.0",ellipse:"clark80",datumName:"Carthage 1934 Tunisia"},hermannskogel:{towgs84:"653.0,-212.0,449.0",ellipse:"bessel",datumName:"Hermannskogel"},ire65:{towgs84:"482.530,-130.596,564.557,-1.042,-0.214,-0.631,8.15",ellipse:"mod_airy",datumName:"Ireland 1965"},nzgd49:{towgs84:"59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993",ellipse:"intl",datumName:"New Zealand Geodetic Datum 1949"},OSGB36:{towgs84:"446.448,-125.157,542.060,0.1502,0.2470,0.8421,-20.4894",ellipse:"airy",datumName:"Airy 1830"}},Proj4js.WGS84=new Proj4js.Proj("WGS84"),Proj4js.Datum.OSB36=Proj4js.Datum.OSGB36,Proj4js.wktProjections={"Lambert Tangential Conformal Conic Projection":"lcc",Mercator:"merc","Popular Visualisation Pseudo Mercator":"merc",Mercator_1SP:"merc",Transverse_Mercator:"tmerc","Transverse Mercator":"tmerc","Lambert Azimuthal Equal Area":"laea","Universal Transverse Mercator System":"utm"},Proj4js.Proj.aea={init:function(){return Math.abs(this.lat1+this.lat2)Proj4js.common.EPSLN?(this.ms1*this.ms1-this.ms2*this.ms2)/(this.qs2-this.qs1):this.con,this.c=this.ms1*this.ms1+this.ns0*this.qs1,this.rh=this.a*Math.sqrt(this.c-this.ns0*this.qs0)/this.ns0,void 0)},forward:function(t){var i=t.x,s=t.y;this.sin_phi=Math.sin(s),this.cos_phi=Math.cos(s);var e=Proj4js.common.qsfnz(this.e3,this.sin_phi,this.cos_phi),o=this.a*Math.sqrt(this.c-this.ns0*e)/this.ns0,n=this.ns0*Proj4js.common.adjust_lon(i-this.long0),a=o*Math.sin(n)+this.x0,r=this.rh-o*Math.cos(n)+this.y0;return t.x=a,t.y=r,t},inverse:function(t){var i,s,e,o,n,a;return t.x-=this.x0,t.y=this.rh-t.y+this.y0,this.ns0>=0?(i=Math.sqrt(t.x*t.x+t.y*t.y),e=1):(i=-Math.sqrt(t.x*t.x+t.y*t.y),e=-1),o=0,0!=i&&(o=Math.atan2(e*t.x,e*t.y)),e=i*this.ns0/this.a,s=(this.c-e*e)/this.ns0,this.e3>=1e-10?(e=1-.5*(1-this.es)*Math.log((1-this.e3)/(1+this.e3))/this.e3,a=Math.abs(Math.abs(e)-Math.abs(s))>1e-10?this.phi1z(this.e3,s):s>=0?.5*Proj4js.common.PI:-.5*Proj4js.common.PI):a=this.phi1z(this.e3,s),n=Proj4js.common.adjust_lon(o/this.ns0+this.long0),t.x=n,t.y=a,t},phi1z:function(t,i){var s,e,o,n,a,r=Proj4js.common.asinz(.5*i);if(Proj4js.common.EPSLN>t)return r;for(var h=t*t,l=1;25>=l;l++)if(s=Math.sin(r),e=Math.cos(r),o=t*s,n=1-o*o,a=.5*n*n/e*(i/(1-h)-s/n+.5/t*Math.log((1-o)/(1+o))),r+=a,1e-7>=Math.abs(a))return r;return Proj4js.reportError("aea:phi1z:Convergence error"),null}},Proj4js.Proj.sterea={dependsOn:"gauss",init:function(){return Proj4js.Proj.gauss.init.apply(this),this.rc?(this.sinc0=Math.sin(this.phic0),this.cosc0=Math.cos(this.phic0),this.R2=2*this.rc,this.title||(this.title="Oblique Stereographic Alternative"),void 0):(Proj4js.reportError("sterea:init:E_ERROR_0"),void 0)},forward:function(t){var i,s,e,o;return t.x=Proj4js.common.adjust_lon(t.x-this.long0),Proj4js.Proj.gauss.forward.apply(this,[t]),i=Math.sin(t.y),s=Math.cos(t.y),e=Math.cos(t.x),o=this.k0*this.R2/(1+this.sinc0*i+this.cosc0*s*e),t.x=o*s*Math.sin(t.x),t.y=o*(this.cosc0*i-this.sinc0*s*e),t.x=this.a*t.x+this.x0,t.y=this.a*t.y+this.y0,t},inverse:function(t){var i,s,e,o,n;if(t.x=(t.x-this.x0)/this.a,t.y=(t.y-this.y0)/this.a,t.x/=this.k0,t.y/=this.k0,n=Math.sqrt(t.x*t.x+t.y*t.y)){var a=2*Math.atan2(n,this.R2);i=Math.sin(a),s=Math.cos(a),o=Math.asin(s*this.sinc0+t.y*i*this.cosc0/n),e=Math.atan2(t.x*i,n*this.cosc0*s-t.y*this.sinc0*i)}else o=this.phic0,e=0;return t.x=e,t.y=o,Proj4js.Proj.gauss.inverse.apply(this,[t]),t.x=Proj4js.common.adjust_lon(t.x+this.long0),t}},Proj4js.Proj.poly={init:function(){0==this.lat0&&(this.lat0=90),this.temp=this.b/this.a,this.es=1-Math.pow(this.temp,2),this.e=Math.sqrt(this.es),this.e0=Proj4js.common.e0fn(this.es),this.e1=Proj4js.common.e1fn(this.es),this.e2=Proj4js.common.e2fn(this.es),this.e3=Proj4js.common.e3fn(this.es),this.ml0=Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,this.lat0)},forward:function(t){var i,s,e,o,n,a,r,h=t.x,l=t.y;return e=Proj4js.common.adjust_lon(h-this.long0),1e-7>=Math.abs(l)?(a=this.x0+this.a*e,r=this.y0-this.a*this.ml0):(i=Math.sin(l),s=Math.cos(l),o=Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,l),n=Proj4js.common.msfnz(this.e,i,s),e=i,a=this.x0+this.a*n*Math.sin(e)/i,r=this.y0+this.a*(o-this.ml0+n*(1-Math.cos(e))/i)),t.x=a,t.y=r,t},inverse:function(t){var i,s,e,o,n,a;if(t.x-=this.x0,t.y-=this.y0,i=this.ml0+t.y/this.a,o=0,1e-7>=Math.abs(i))n=t.x/this.a+this.long0,a=0;else{if(s=i*i+t.x/this.a*(t.x/this.a),o=phi4z(this.es,this.e0,this.e1,this.e2,this.e3,this.al,s,e,a),1!=o)return o;n=Proj4js.common.adjust_lon(Proj4js.common.asinz(t.x*e/this.a)/Math.sin(a)+this.long0)}return t.x=n,t.y=a,t}},Proj4js.Proj.equi={init:function(){this.x0||(this.x0=0),this.y0||(this.y0=0),this.lat0||(this.lat0=0),this.long0||(this.long0=0)},forward:function(t){var i=t.x,s=t.y,e=Proj4js.common.adjust_lon(i-this.long0),o=this.x0+this.a*e*Math.cos(this.lat0),n=this.y0+this.a*s;return this.t1=o,this.t2=Math.cos(this.lat0),t.x=o,t.y=n,t},inverse:function(t){t.x-=this.x0,t.y-=this.y0;var i=t.y/this.a;Math.abs(i)>Proj4js.common.HALF_PI&&Proj4js.reportError("equi:Inv:DataError");var s=Proj4js.common.adjust_lon(this.long0+t.x/(this.a*Math.cos(this.lat0)));t.x=s,t.y=i}},Proj4js.Proj.merc={init:function(){this.lat_ts&&(this.k0=this.sphere?Math.cos(this.lat_ts):Proj4js.common.msfnz(this.es,Math.sin(this.lat_ts),Math.cos(this.lat_ts)))},forward:function(t){var i=t.x,s=t.y;if(s*Proj4js.common.R2D>90&&-90>s*Proj4js.common.R2D&&i*Proj4js.common.R2D>180&&-180>i*Proj4js.common.R2D)return Proj4js.reportError("merc:forward: llInputOutOfRange: "+i+" : "+s),null;var e,o;if(Math.abs(Math.abs(s)-Proj4js.common.HALF_PI)<=Proj4js.common.EPSLN)return Proj4js.reportError("merc:forward: ll2mAtPoles"),null;if(this.sphere)e=this.x0+this.a*this.k0*Proj4js.common.adjust_lon(i-this.long0),o=this.y0+this.a*this.k0*Math.log(Math.tan(Proj4js.common.FORTPI+.5*s));else{var n=Math.sin(s),a=Proj4js.common.tsfnz(this.e,s,n);e=this.x0+this.a*this.k0*Proj4js.common.adjust_lon(i-this.long0),o=this.y0-this.a*this.k0*Math.log(a)}return t.x=e,t.y=o,t},inverse:function(t){var i,s,e=t.x-this.x0,o=t.y-this.y0;if(this.sphere)s=Proj4js.common.HALF_PI-2*Math.atan(Math.exp(-o/this.a*this.k0));else{var n=Math.exp(-o/(this.a*this.k0));if(s=Proj4js.common.phi2z(this.e,n),-9999==s)return Proj4js.reportError("merc:inverse: lat = -9999"),null}return i=Proj4js.common.adjust_lon(this.long0+e/(this.a*this.k0)),t.x=i,t.y=s,t}},Proj4js.Proj.utm={dependsOn:"tmerc",init:function(){return this.zone?(this.lat0=0,this.long0=(6*Math.abs(this.zone)-183)*Proj4js.common.D2R,this.x0=5e5,this.y0=this.utmSouth?1e7:0,this.k0=.9996,Proj4js.Proj.tmerc.init.apply(this),this.forward=Proj4js.Proj.tmerc.forward,this.inverse=Proj4js.Proj.tmerc.inverse,void 0):(Proj4js.reportError("utm:init: zone must be specified for UTM"),void 0)}},Proj4js.Proj.eqdc={init:function(){this.mode||(this.mode=0),this.temp=this.b/this.a,this.es=1-Math.pow(this.temp,2),this.e=Math.sqrt(this.es),this.e0=Proj4js.common.e0fn(this.es),this.e1=Proj4js.common.e1fn(this.es),this.e2=Proj4js.common.e2fn(this.es),this.e3=Proj4js.common.e3fn(this.es),this.sinphi=Math.sin(this.lat1),this.cosphi=Math.cos(this.lat1),this.ms1=Proj4js.common.msfnz(this.e,this.sinphi,this.cosphi),this.ml1=Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,this.lat1),0!=this.mode?(Math.abs(this.lat1+this.lat2)=Proj4js.common.EPSLN?(this.ms1-this.ms2)/(this.ml2-this.ml1):this.sinphi):this.ns=this.sinphi,this.g=this.ml1+this.ms1/this.ns,this.ml0=Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,this.lat0),this.rh=this.a*(this.g-this.ml0)},forward:function(t){var i=t.x,s=t.y,e=Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,s),o=this.a*(this.g-e),n=this.ns*Proj4js.common.adjust_lon(i-this.long0),a=this.x0+o*Math.sin(n),r=this.y0+this.rh-o*Math.cos(n);return t.x=a,t.y=r,t},inverse:function(t){t.x-=this.x0,t.y=this.rh-t.y+this.y0;var i,s;this.ns>=0?(s=Math.sqrt(t.x*t.x+t.y*t.y),i=1):(s=-Math.sqrt(t.x*t.x+t.y*t.y),i=-1);var e=0;0!=s&&(e=Math.atan2(i*t.x,i*t.y));var o=this.g-s/this.a,n=this.phi3z(o,this.e0,this.e1,this.e2,this.e3),a=Proj4js.common.adjust_lon(this.long0+e/this.ns);return t.x=a,t.y=n,t},phi3z:function(t,i,s,e,o){var n,a;n=t;for(var r=0;15>r;r++)if(a=(t+s*Math.sin(2*n)-e*Math.sin(4*n)+o*Math.sin(6*n))/i-n,n+=a,1e-10>=Math.abs(a))return n;return Proj4js.reportError("PHI3Z-CONV:Latitude failed to converge after 15 iterations"),null}},Proj4js.Proj.tmerc={init:function(){this.e0=Proj4js.common.e0fn(this.es),this.e1=Proj4js.common.e1fn(this.es),this.e2=Proj4js.common.e2fn(this.es),this.e3=Proj4js.common.e3fn(this.es),this.ml0=this.a*Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,this.lat0)},forward:function(t){var i,s,e,o=t.x,n=t.y,a=Proj4js.common.adjust_lon(o-this.long0),r=Math.sin(n),h=Math.cos(n);if(this.sphere){var l=h*Math.sin(a);if(1e-10>Math.abs(Math.abs(l)-1))return Proj4js.reportError("tmerc:forward: Point projects into infinity"),93;s=.5*this.a*this.k0*Math.log((1+l)/(1-l)),i=Math.acos(h*Math.cos(a)/Math.sqrt(1-l*l)),0>n&&(i=-i),e=this.a*this.k0*(i-this.lat0)}else{var c=h*a,m=Math.pow(c,2),u=this.ep2*Math.pow(h,2),d=Math.tan(n),p=Math.pow(d,2);i=1-this.es*Math.pow(r,2);var _=this.a/Math.sqrt(i),f=this.a*Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,n);s=this.k0*_*c*(1+m/6*(1-p+u+m/20*(5-18*p+Math.pow(p,2)+72*u-58*this.ep2)))+this.x0,e=this.k0*(f-this.ml0+_*d*m*(.5+m/24*(5-p+9*u+4*Math.pow(u,2)+m/30*(61-58*p+Math.pow(p,2)+600*u-330*this.ep2))))+this.y0}return t.x=s,t.y=e,t},inverse:function(t){var i,s,e,o,n,a,r=6;if(this.sphere){var h=Math.exp(t.x/(this.a*this.k0)),l=.5*(h-1/h),c=this.lat0+t.y/(this.a*this.k0),m=Math.cos(c);i=Math.sqrt((1-m*m)/(1+l*l)),n=Proj4js.common.asinz(i),0>c&&(n=-n),a=0==l&&0==m?this.long0:Proj4js.common.adjust_lon(Math.atan2(l,m)+this.long0)}else{var u=t.x-this.x0,d=t.y-this.y0;for(i=(this.ml0+d/this.k0)/this.a,s=i,o=0;!0&&(e=(i+this.e1*Math.sin(2*s)-this.e2*Math.sin(4*s)+this.e3*Math.sin(6*s))/this.e0-s,s+=e,!(Math.abs(e)<=Proj4js.common.EPSLN));o++)if(o>=r)return Proj4js.reportError("tmerc:inverse: Latitude failed to converge"),95;if(Math.abs(s)0||Math.abs(a)<=Proj4js.common.EPSLN)var l=this.a*n*s*Math.sin(e),c=this.y0+this.a*n*(this.cos_p14*i-this.sin_p14*s*o);else Proj4js.reportError("orthoFwdPointError");return t.x=l,t.y=c,t},inverse:function(t){var i,s,e,o,n,a,r;return t.x-=this.x0,t.y-=this.y0,i=Math.sqrt(t.x*t.x+t.y*t.y),i>this.a+1e-7&&Proj4js.reportError("orthoInvDataError"),s=Proj4js.common.asinz(i/this.a),e=Math.sin(s),o=Math.cos(s),a=this.long0,Math.abs(i)<=Proj4js.common.EPSLN&&(r=this.lat0),r=Proj4js.common.asinz(o*this.sin_p14+t.y*e*this.cos_p14/i),n=Math.abs(this.lat0)-Proj4js.common.HALF_PI,Math.abs(n)<=Proj4js.common.EPSLN&&(a=this.lat0>=0?Proj4js.common.adjust_lon(this.long0+Math.atan2(t.x,-t.y)):Proj4js.common.adjust_lon(this.long0-Math.atan2(-t.x,t.y))),n=o-this.sin_p14*Math.sin(r),t.x=a,t.y=r,t}},Proj4js.Proj.krovak={init:function(){this.a=6377397.155,this.es=.006674372230614,this.e=Math.sqrt(this.es),this.lat0||(this.lat0=.863937979737193),this.long0||(this.long0=.4334234309119251),this.k0||(this.k0=.9999),this.s45=.785398163397448,this.s90=2*this.s45,this.fi0=this.lat0,this.e2=this.es,this.e=Math.sqrt(this.e2),this.alfa=Math.sqrt(1+this.e2*Math.pow(Math.cos(this.fi0),4)/(1-this.e2)),this.uq=1.04216856380474,this.u0=Math.asin(Math.sin(this.fi0)/this.alfa),this.g=Math.pow((1+this.e*Math.sin(this.fi0))/(1-this.e*Math.sin(this.fi0)),this.alfa*this.e/2),this.k=Math.tan(this.u0/2+this.s45)/Math.pow(Math.tan(this.fi0/2+this.s45),this.alfa)*this.g,this.k1=this.k0,this.n0=this.a*Math.sqrt(1-this.e2)/(1-this.e2*Math.pow(Math.sin(this.fi0),2)),this.s0=1.37008346281555,this.n=Math.sin(this.s0),this.ro0=this.k1*this.n0/Math.tan(this.s0),this.ad=this.s90-this.uq},forward:function(t){var i,s,e,o,n,a,r,h=t.x,l=t.y,c=Proj4js.common.adjust_lon(h-this.long0);return i=Math.pow((1+this.e*Math.sin(l))/(1-this.e*Math.sin(l)),this.alfa*this.e/2),s=2*(Math.atan(this.k*Math.pow(Math.tan(l/2+this.s45),this.alfa)/i)-this.s45),e=-c*this.alfa,o=Math.asin(Math.cos(this.ad)*Math.sin(s)+Math.sin(this.ad)*Math.cos(s)*Math.cos(e)),n=Math.asin(Math.cos(s)*Math.sin(e)/Math.cos(o)),a=this.n*n,r=this.ro0*Math.pow(Math.tan(this.s0/2+this.s45),this.n)/Math.pow(Math.tan(o/2+this.s45),this.n),t.y=r*Math.cos(a)/1,t.x=r*Math.sin(a)/1,this.czech&&(t.y*=-1,t.x*=-1),t},inverse:function(t){var i,s,e,o,n,a,r,h,l=t.x;t.x=t.y,t.y=l,this.czech&&(t.y*=-1,t.x*=-1),a=Math.sqrt(t.x*t.x+t.y*t.y),n=Math.atan2(t.y,t.x),o=n/Math.sin(this.s0),e=2*(Math.atan(Math.pow(this.ro0/a,1/this.n)*Math.tan(this.s0/2+this.s45))-this.s45),i=Math.asin(Math.cos(this.ad)*Math.sin(e)-Math.sin(this.ad)*Math.cos(e)*Math.cos(o)),s=Math.asin(Math.cos(e)*Math.sin(o)/Math.cos(i)),t.x=this.long0-s/this.alfa,r=i,h=0;var c=0;do t.y=2*(Math.atan(Math.pow(this.k,-1/this.alfa)*Math.pow(Math.tan(i/2+this.s45),1/this.alfa)*Math.pow((1+this.e*Math.sin(r))/(1-this.e*Math.sin(r)),this.e/2))-this.s45),1e-10>Math.abs(r-t.y)&&(h=1),r=t.y,c+=1;while(0==h&&15>c);return c>=15?(Proj4js.reportError("PHI3Z-CONV:Latitude failed to converge after 15 iterations"),null):t}},Proj4js.Proj.somerc={init:function(){var t=this.lat0;this.lambda0=this.long0;var i=Math.sin(t),s=this.a,e=this.rf,o=1/e,n=2*o-Math.pow(o,2),a=this.e=Math.sqrt(n);this.R=this.k0*s*Math.sqrt(1-n)/(1-n*Math.pow(i,2)),this.alpha=Math.sqrt(1+n/(1-n)*Math.pow(Math.cos(t),4)),this.b0=Math.asin(i/this.alpha),this.K=Math.log(Math.tan(Math.PI/4+this.b0/2))-this.alpha*Math.log(Math.tan(Math.PI/4+t/2))+this.alpha*a/2*Math.log((1+a*i)/(1-a*i))},forward:function(t){var i=Math.log(Math.tan(Math.PI/4-t.y/2)),s=this.e/2*Math.log((1+this.e*Math.sin(t.y))/(1-this.e*Math.sin(t.y))),e=-this.alpha*(i+s)+this.K,o=2*(Math.atan(Math.exp(e))-Math.PI/4),n=this.alpha*(t.x-this.lambda0),a=Math.atan(Math.sin(n)/(Math.sin(this.b0)*Math.tan(o)+Math.cos(this.b0)*Math.cos(n))),r=Math.asin(Math.cos(this.b0)*Math.sin(o)-Math.sin(this.b0)*Math.cos(o)*Math.cos(n));return t.y=this.R/2*Math.log((1+Math.sin(r))/(1-Math.sin(r)))+this.y0,t.x=this.R*a+this.x0,t},inverse:function(t){for(var i=t.x-this.x0,s=t.y-this.y0,e=i/this.R,o=2*(Math.atan(Math.exp(s/this.R))-Math.PI/4),n=Math.asin(Math.cos(this.b0)*Math.sin(o)+Math.sin(this.b0)*Math.cos(o)*Math.cos(e)),a=Math.atan(Math.sin(e)/(Math.cos(this.b0)*Math.cos(e)-Math.sin(this.b0)*Math.tan(o))),r=this.lambda0+a/this.alpha,h=0,l=n,c=-1e3,m=0;Math.abs(l-c)>1e-7;){if(++m>20)return Proj4js.reportError("omercFwdInfinity"),void 0;h=1/this.alpha*(Math.log(Math.tan(Math.PI/4+n/2))-this.K)+this.e*Math.log(Math.tan(Math.PI/4+Math.asin(this.e*Math.sin(l))/2)),c=l,l=2*Math.atan(Math.exp(h))-Math.PI/2}return t.x=r,t.y=l,t}},Proj4js.Proj.stere={ssfn_:function(t,i,s){return i*=s,Math.tan(.5*(Proj4js.common.HALF_PI+t))*Math.pow((1-i)/(1+i),.5*s)},TOL:1e-8,NITER:8,CONV:1e-10,S_POLE:0,N_POLE:1,OBLIQ:2,EQUIT:3,init:function(){this.phits=this.lat_ts?this.lat_ts:Proj4js.common.HALF_PI;var t=Math.abs(this.lat0);if(this.mode=Math.abs(t)-Proj4js.common.HALF_PIthis.lat0?this.S_POLE:this.N_POLE:t>Proj4js.common.EPSLN?this.OBLIQ:this.EQUIT,this.phits=Math.abs(this.phits),this.es){var i;switch(this.mode){case this.N_POLE:case this.S_POLE:Math.abs(this.phits-Proj4js.common.HALF_PI)=Proj4js.common.EPSLN?Math.cos(this.phits)/Math.tan(Proj4js.common.FORTPI-.5*this.phits):2*this.k0}},forward:function(t){var i=t.x;i=Proj4js.common.adjust_lon(i-this.long0);var s,e,o=t.y;if(this.sphere){var n,a,r,h;switch(n=Math.sin(o),a=Math.cos(o),r=Math.cos(i),h=Math.sin(i),this.mode){case this.EQUIT:e=1+a*r,Proj4js.common.EPSLN>=e&&Proj4js.reportError("stere:forward:Equit"),e=this.akm1/e,s=e*a*h,e*=n;break;case this.OBLIQ:e=1+this.sinph0*n+this.cosph0*a*r,Proj4js.common.EPSLN>=e&&Proj4js.reportError("stere:forward:Obliq"),e=this.akm1/e,s=e*a*h,e*=this.cosph0*n-this.sinph0*a*r;break;case this.N_POLE:r=-r,o=-o;case this.S_POLE:Math.abs(o-Proj4js.common.HALF_PI)=l;l++)r*=n,h+=this.A[l]*r;for(var c,m,u=h,d=a,p=1,_=0,f=0,P=0,l=1;6>=l;l++)c=p*u-_*d,m=_*u+p*d,p=c,_=m,f=f+this.B_re[l]*p-this.B_im[l]*_,P=P+this.B_im[l]*p+this.B_re[l]*_;return t.x=P*this.a+this.x0,t.y=f*this.a+this.y0,t},inverse:function(t){for(var i,s,e=t.x,o=t.y,n=e-this.x0,a=o-this.y0,r=a/this.a,h=n/this.a,l=1,c=0,m=0,u=0,d=1;6>=d;d++)i=l*r-c*h,s=c*r+l*h,l=i,c=s,m=m+this.C_re[d]*l-this.C_im[d]*c,u=u+this.C_im[d]*l+this.C_re[d]*c;for(var p=0;this.iterations>p;p++){for(var _,f,P=m,y=u,g=r,L=h,d=2;6>=d;d++)_=P*m-y*u,f=y*m+P*u,P=_,y=f,g+=(d-1)*(this.B_re[d]*P-this.B_im[d]*y),L+=(d-1)*(this.B_im[d]*P+this.B_re[d]*y);P=1,y=0;for(var v=this.B_re[1],j=this.B_im[1],d=2;6>=d;d++)_=P*m-y*u,f=y*m+P*u,P=_,y=f,v+=d*(this.B_re[d]*P-this.B_im[d]*y),j+=d*(this.B_im[d]*P+this.B_re[d]*y);var M=v*v+j*j;m=(g*v+L*j)/M,u=(L*v-g*j)/M}for(var S=m,b=u,x=1,E=0,d=1;9>=d;d++)x*=S,E+=this.D[d]*x;var C=this.lat0+1e5*E*Proj4js.common.SEC_TO_RAD,w=this.long0+b;return t.x=w,t.y=C,t}},Proj4js.Proj.mill={init:function(){},forward:function(t){var i=t.x,s=t.y,e=Proj4js.common.adjust_lon(i-this.long0),o=this.x0+this.a*e,n=this.y0+1.25*this.a*Math.log(Math.tan(Proj4js.common.PI/4+s/2.5));return t.x=o,t.y=n,t},inverse:function(t){t.x-=this.x0,t.y-=this.y0;var i=Proj4js.common.adjust_lon(this.long0+t.x/this.a),s=2.5*(Math.atan(Math.exp(.8*t.y/this.a))-Proj4js.common.PI/4);return t.x=i,t.y=s,t}},Proj4js.Proj.gnom={init:function(){this.sin_p14=Math.sin(this.lat0),this.cos_p14=Math.cos(this.lat0),this.infinity_dist=1e3*this.a,this.rc=1},forward:function(t){var i,s,e,o,n,a,r,h,l=t.x,c=t.y;return e=Proj4js.common.adjust_lon(l-this.long0),i=Math.sin(c),s=Math.cos(c),o=Math.cos(e),a=this.sin_p14*i+this.cos_p14*s*o,n=1,a>0||Math.abs(a)<=Proj4js.common.EPSLN?(r=this.x0+this.a*n*s*Math.sin(e)/a,h=this.y0+this.a*n*(this.cos_p14*i-this.sin_p14*s*o)/a):(Proj4js.reportError("orthoFwdPointError"),r=this.x0+this.infinity_dist*s*Math.sin(e),h=this.y0+this.infinity_dist*(this.cos_p14*i-this.sin_p14*s*o)),t.x=r,t.y=h,t},inverse:function(t){var i,s,e,o,n,a;return t.x=(t.x-this.x0)/this.a,t.y=(t.y-this.y0)/this.a,t.x/=this.k0,t.y/=this.k0,(i=Math.sqrt(t.x*t.x+t.y*t.y))?(o=Math.atan2(i,this.rc),s=Math.sin(o),e=Math.cos(o),a=Proj4js.common.asinz(e*this.sin_p14+t.y*s*this.cos_p14/i),n=Math.atan2(t.x*s,i*this.cos_p14*e-t.y*this.sin_p14*s),n=Proj4js.common.adjust_lon(this.long0+n)):(a=this.phic0,n=0),t.x=n,t.y=a,t}},Proj4js.Proj.sinu={init:function(){this.sphere?(this.n=1,this.m=0,this.es=0,this.C_y=Math.sqrt((this.m+1)/this.n),this.C_x=this.C_y/(this.m+1)):this.en=Proj4js.common.pj_enfn(this.es)},forward:function(t){var i,s,e=t.x,o=t.y;if(e=Proj4js.common.adjust_lon(e-this.long0),this.sphere){if(this.m)for(var n=this.n*Math.sin(o),a=Proj4js.common.MAX_ITER;a;--a){var r=(this.m*o+Math.sin(o)-n)/(this.m+Math.cos(o));if(o-=r,Math.abs(r)o?(o=Math.sin(i),s=this.long0+t.x*Math.sqrt(1-this.es*o*o)/(this.a*Math.cos(i)),e=Proj4js.common.adjust_lon(s)):o-Proj4js.common.EPSLN=0?this.y0+Proj4js.common.PI*this.R*Math.tan(.5*a):this.y0+Proj4js.common.PI*this.R*-Math.tan(.5*a));var r=.5*Math.abs(Proj4js.common.PI/n-n/Proj4js.common.PI),h=r*r,l=Math.sin(a),c=Math.cos(a),m=c/(l+c-1),u=m*m,d=m*(2/l-1),p=d*d,_=Proj4js.common.PI*this.R*(r*(m-p)+Math.sqrt(h*(m-p)*(m-p)-(p+h)*(u-p)))/(p+h);return 0>n&&(_=-_),i=this.x0+_,_=Math.abs(_/(Proj4js.common.PI*this.R)),s=o>=0?this.y0+Proj4js.common.PI*this.R*Math.sqrt(1-_*_-2*r*_):this.y0-Proj4js.common.PI*this.R*Math.sqrt(1-_*_-2*r*_),t.x=i,t.y=s,t},inverse:function(t){var i,s,e,o,n,a,r,h,l,c,m,u,d;return t.x-=this.x0,t.y-=this.y0,m=Proj4js.common.PI*this.R,e=t.x/m,o=t.y/m,n=e*e+o*o,a=-Math.abs(o)*(1+n),r=a-2*o*o+e*e,h=-2*a+1+2*o*o+n*n,d=o*o/h+(2*r*r*r/h/h/h-9*a*r/h/h)/27,l=(a-r*r/3/h)/h,c=2*Math.sqrt(-l/3),m=3*d/l/c,Math.abs(m)>1&&(m=m>=0?1:-1),u=Math.acos(m)/3,s=t.y>=0?(-c*Math.cos(u+Proj4js.common.PI/3)-r/3/h)*Proj4js.common.PI:-(-c*Math.cos(u+Proj4js.common.PI/3)-r/3/h)*Proj4js.common.PI,Math.abs(e)0&&(e=2*Math.atan(o*Proj4js.common.srat(this.e*Math.sin(t.y),-.5*this.e))-Proj4js.common.HALF_PI,!(i>Math.abs(e-t.y)));--n)t.y=e;return n?(t.x=s,t.y=e,t):(Proj4js.reportError("gauss:inverse:convergence failed"),null)}},Proj4js.Proj.omerc={init:function(){this.mode||(this.mode=0),this.lon1||(this.lon1=0,this.mode=1),this.lon2||(this.lon2=0),this.lat2||(this.lat2=0);var t=this.b/this.a,i=1-Math.pow(t,2);Math.sqrt(i),this.sin_p20=Math.sin(this.lat0),this.cos_p20=Math.cos(this.lat0),this.con=1-this.es*this.sin_p20*this.sin_p20,this.com=Math.sqrt(1-i),this.bl=Math.sqrt(1+this.es*Math.pow(this.cos_p20,4)/(1-i)),this.al=this.a*this.bl*this.k0*this.com/this.con,Math.abs(this.lat0)0?this.lat0>=0?this.d+Math.sqrt(this.d*this.d-1):this.d-Math.sqrt(this.d*this.d-1):this.d,this.el=this.f*Math.pow(this.ts,this.bl)),0!=this.mode?(this.g=.5*(this.f-1/this.f),this.gama=Proj4js.common.asinz(Math.sin(this.alpha)/this.d),this.longc=this.longc-Proj4js.common.asinz(this.g*Math.tan(this.gama))/this.bl,this.con=Math.abs(this.lat0),this.con>Proj4js.common.EPSLN&&Math.abs(this.con-Proj4js.common.HALF_PI)>Proj4js.common.EPSLN?(this.singam=Math.sin(this.gama),this.cosgam=Math.cos(this.gama),this.sinaz=Math.sin(this.alpha),this.cosaz=Math.cos(this.alpha),this.u=this.lat0>=0?this.al/this.bl*Math.atan(Math.sqrt(this.d*this.d-1)/this.cosaz):-(this.al/this.bl)*Math.atan(Math.sqrt(this.d*this.d-1)/this.cosaz)):Proj4js.reportError("omerc:Init:DataError")):(this.sinphi=Math.sin(this.at1),this.ts1=Proj4js.common.tsfnz(this.e,this.lat1,this.sinphi),this.sinphi=Math.sin(this.lat2),this.ts2=Proj4js.common.tsfnz(this.e,this.lat2,this.sinphi),this.h=Math.pow(this.ts1,this.bl),this.l=Math.pow(this.ts2,this.bl),this.f=this.el/this.h,this.g=.5*(this.f-1/this.f),this.j=(this.el*this.el-this.l*this.h)/(this.el*this.el+this.l*this.h),this.p=(this.l-this.h)/(this.l+this.h),this.dlon=this.lon1-this.lon2,this.dlon<-Proj4js.common.PI&&(this.lon2=this.lon2-2*Proj4js.common.PI),this.dlon>Proj4js.common.PI&&(this.lon2=this.lon2+2*Proj4js.common.PI),this.dlon=this.lon1-this.lon2,this.longc=.5*(this.lon1+this.lon2)-Math.atan(this.j*Math.tan(.5*this.bl*this.dlon)/this.p)/this.bl,this.dlon=Proj4js.common.adjust_lon(this.lon1-this.longc),this.gama=Math.atan(Math.sin(this.bl*this.dlon)/this.g),this.alpha=Proj4js.common.asinz(this.d*Math.sin(this.gama)),Math.abs(this.lat1-this.lat2)<=Proj4js.common.EPSLN?Proj4js.reportError("omercInitDataError"):this.con=Math.abs(this.lat1),this.con<=Proj4js.common.EPSLN||Math.abs(this.con-Proj4js.common.HALF_PI)<=Proj4js.common.EPSLN?Proj4js.reportError("omercInitDataError"):Math.abs(Math.abs(this.lat0)-Proj4js.common.HALF_PI)<=Proj4js.common.EPSLN&&Proj4js.reportError("omercInitDataError"),this.singam=Math.sin(this.gam),this.cosgam=Math.cos(this.gam),this.sinaz=Math.sin(this.alpha),this.cosaz=Math.cos(this.alpha),this.u=this.lat0>=0?this.al/this.bl*Math.atan(Math.sqrt(this.d*this.d-1)/this.cosaz):-(this.al/this.bl)*Math.atan(Math.sqrt(this.d*this.d-1)/this.cosaz))},forward:function(t){var i,s,e,o,n,a,r,h,l,c,m,u=t.x,d=t.y;i=Math.sin(d),c=Proj4js.common.adjust_lon(u-this.longc),a=Math.sin(this.bl*c),Math.abs(Math.abs(d)-Proj4js.common.HALF_PI)>Proj4js.common.EPSLN?(m=Proj4js.common.tsfnz(this.e,d,i),o=this.el/Math.pow(m,this.bl),l=.5*(o-1/o),s=.5*(o+1/o),r=(l*this.singam-a*this.cosgam)/s,e=Math.cos(this.bl*c),1e-7>Math.abs(e)?n=this.al*this.bl*c:(n=this.al*Math.atan((l*this.cosgam+a*this.singam)/e)/this.bl,0>e&&(n+=Proj4js.common.PI*this.al/this.bl))):(r=d>=0?this.singam:-this.singam,n=this.al*d/this.bl),Math.abs(Math.abs(r)-1)<=Proj4js.common.EPSLN&&Proj4js.reportError("omercFwdInfinity"),h=.5*this.al*Math.log((1-r)/(1+r))/this.bl,n-=this.u;var p=this.x0+h*this.cosaz+n*this.sinaz,_=this.y0+n*this.cosaz-h*this.sinaz;return t.x=p,t.y=_,t},inverse:function(t){var i,s,e,o,n,a,r,h,l,c,m,u,d;return t.x-=this.x0,t.y-=this.y0,d=0,o=t.x*this.cosaz-t.y*this.sinaz,n=t.y*this.cosaz+t.x*this.sinaz,n+=this.u,a=Math.exp(-this.bl*o/this.al),r=.5*(a-1/a),s=.5*(a+1/a),l=Math.sin(this.bl*n/this.al),c=(l*this.cosgam+r*this.singam)/s,Math.abs(Math.abs(c)-1)<=Proj4js.common.EPSLN?(m=this.longc,u=c>=0?Proj4js.common.HALF_PI:-Proj4js.common.HALF_PI):(e=1/this.bl,h=Math.pow(this.el/Math.sqrt((1+c)/(1-c)),e),u=Proj4js.common.phi2z(this.e,h),i=this.longc-Math.atan2(r*this.cosgam-l*this.singam,e)/this.bl,m=Proj4js.common.adjust_lon(i)),t.x=m,t.y=u,t}},Proj4js.Proj.lcc={init:function(){if(this.lat2||(this.lat2=this.lat0),this.k0||(this.k0=1),Math.abs(this.lat1+this.lat2)Proj4js.common.EPSLN?Math.log(e/r)/Math.log(o/h):i,this.f0=e/(this.ns*Math.pow(o,this.ns)),this.rh=this.a*this.f0*Math.pow(l,this.ns),this.title||(this.title="Lambert Conformal Conic")},forward:function(t){var i=t.x,s=t.y;if(!(90>=s&&s>=-90&&180>=i&&i>=-180))return Proj4js.reportError("lcc:forward: llInputOutOfRange: "+i+" : "+s),null;var e,o,n=Math.abs(Math.abs(s)-Proj4js.common.HALF_PI);if(n>Proj4js.common.EPSLN)e=Proj4js.common.tsfnz(this.e,s,Math.sin(s)),o=this.a*this.f0*Math.pow(e,this.ns);else{if(n=s*this.ns,0>=n)return Proj4js.reportError("lcc:forward: No Projection"),null;o=0}var a=this.ns*Proj4js.common.adjust_lon(i-this.long0);return t.x=this.k0*o*Math.sin(a)+this.x0,t.y=this.k0*(this.rh-o*Math.cos(a))+this.y0,t},inverse:function(t){var i,s,e,o,n,a=(t.x-this.x0)/this.k0,r=this.rh-(t.y-this.y0)/this.k0;this.ns>0?(i=Math.sqrt(a*a+r*r),s=1):(i=-Math.sqrt(a*a+r*r),s=-1);var h=0;if(0!=i&&(h=Math.atan2(s*a,s*r)),0!=i||this.ns>0){if(s=1/this.ns,e=Math.pow(i/(this.a*this.f0),s),o=Proj4js.common.phi2z(this.e,e),-9999==o)return null}else o=-Proj4js.common.HALF_PI;return n=Proj4js.common.adjust_lon(h/this.ns+this.long0),t.x=n,t.y=o,t}},Proj4js.Proj.laea={S_POLE:1,N_POLE:2,EQUIT:3,OBLIQ:4,init:function(){var t=Math.abs(this.lat0);if(this.mode=Math.abs(t-Proj4js.common.HALF_PI)this.lat0?this.S_POLE:this.N_POLE:Math.abs(t)0){var i;switch(this.qp=Proj4js.common.qsfnz(this.e,1),this.mmf=.5/(1-this.es),this.apa=this.authset(this.es),this.mode){case this.N_POLE:case this.S_POLE:this.dd=1;break;case this.EQUIT:this.rq=Math.sqrt(.5*this.qp),this.dd=1/this.rq,this.xmf=1,this.ymf=.5*this.qp;break;case this.OBLIQ:this.rq=Math.sqrt(.5*this.qp),i=Math.sin(this.lat0),this.sinb1=Proj4js.common.qsfnz(this.e,i)/this.qp,this.cosb1=Math.sqrt(1-this.sinb1*this.sinb1),this.dd=Math.cos(this.lat0)/(Math.sqrt(1-this.es*i*i)*this.rq*this.cosb1),this.ymf=(this.xmf=this.rq)/this.dd,this.xmf*=this.dd}}else this.mode==this.OBLIQ&&(this.sinph0=Math.sin(this.lat0),this.cosph0=Math.cos(this.lat0))},forward:function(t){var i,s,e=t.x,o=t.y;if(e=Proj4js.common.adjust_lon(e-this.long0),this.sphere){var n,a,r;switch(r=Math.sin(o),a=Math.cos(o),n=Math.cos(e),this.mode){case this.OBLIQ:case this.EQUIT:if(s=this.mode==this.EQUIT?1+a*n:1+this.sinph0*r+this.cosph0*a*n,Proj4js.common.EPSLN>=s)return Proj4js.reportError("laea:fwd:y less than eps"),null;s=Math.sqrt(2/s),i=s*a*Math.sin(e),s*=this.mode==this.EQUIT?r:this.cosph0*r-this.sinph0*a*n;break;case this.N_POLE:n=-n;case this.S_POLE:if(Math.abs(o+this.phi0)=0?(i=(u=Math.sqrt(l))*h,s=n*(this.mode==this.S_POLE?u:-u)):i=s=0}}return t.x=this.a*i+this.x0,t.y=this.a*s+this.y0,t},inverse:function(t){t.x-=this.x0,t.y-=this.y0;var i,s,e=t.x/this.a,o=t.y/this.a;if(this.sphere){var n,a=0,r=0;if(n=Math.sqrt(e*e+o*o),s=.5*n,s>1)return Proj4js.reportError("laea:Inv:DataError"),null;switch(s=2*Math.asin(s),(this.mode==this.OBLIQ||this.mode==this.EQUIT)&&(r=Math.sin(s),a=Math.cos(s)),this.mode){case this.EQUIT:s=Math.abs(n)<=Proj4js.common.EPSLN?0:Math.asin(o*r/n),e*=r,o=a*n;break;case this.OBLIQ:s=Math.abs(n)<=Proj4js.common.EPSLN?this.phi0:Math.asin(a*this.sinph0+o*r*this.cosph0/n),e*=r*this.cosph0,o=(a-Math.sin(s)*this.sinph0)*n;break;case this.N_POLE:o=-o,s=Proj4js.common.HALF_PI-s;break;case this.S_POLE:s-=Proj4js.common.HALF_PI}i=0!=o||this.mode!=this.EQUIT&&this.mode!=this.OBLIQ?Math.atan2(e,o):0}else{var h,l,c,m,u=0;switch(this.mode){case this.EQUIT:case this.OBLIQ:if(e/=this.dd,o*=this.dd,m=Math.sqrt(e*e+o*o),Proj4js.common.EPSLN>m)return t.x=0,t.y=this.phi0,t;l=2*Math.asin(.5*m/this.rq),h=Math.cos(l),e*=l=Math.sin(l),this.mode==this.OBLIQ?(u=h*this.sinb1+o*l*this.cosb1/m,c=this.qp*u,o=m*this.cosb1*h-o*this.sinb1*l):(u=o*l/m,c=this.qp*u,o=m*h);break;case this.N_POLE:o=-o;case this.S_POLE:if(c=e*e+o*o,!c)return t.x=0,t.y=this.phi0,t;u=1-c/this.qp,this.mode==this.S_POLE&&(u=-u)}i=Math.atan2(e,o),s=this.authlat(Math.asin(u),this.apa)}return t.x=Proj4js.common.adjust_lon(this.long0+i),t.y=s,t},P00:.3333333333333333,P01:.17222222222222222,P02:.10257936507936508,P10:.06388888888888888,P11:.0664021164021164,P20:.016415012942191543,authset:function(t){var i,s=[];return s[0]=t*this.P00,i=t*t,s[0]+=i*this.P01,s[1]=i*this.P10,i*=t,s[0]+=i*this.P02,s[1]+=i*this.P11,s[2]=i*this.P20,s},authlat:function(t,i){var s=t+t;return t+i[0]*Math.sin(s)+i[1]*Math.sin(s+s)+i[2]*Math.sin(s+s+s)}},Proj4js.Proj.aeqd={init:function(){this.sin_p12=Math.sin(this.lat0),this.cos_p12=Math.cos(this.lat0)},forward:function(t){var i=t.x;t.y;var s,e=Math.sin(t.y),o=Math.cos(t.y),n=Proj4js.common.adjust_lon(i-this.long0),a=Math.cos(n),r=this.sin_p12*e+this.cos_p12*o*a;if(Math.abs(Math.abs(r)-1)r)return Proj4js.reportError("aeqd:Fwd:PointError"),void 0}else{var h=Math.acos(r);s=h/Math.sin(h)}return t.x=this.x0+this.a*s*o*Math.sin(n),t.y=this.y0+this.a*s*(this.cos_p12*e-this.sin_p12*o*a),t},inverse:function(t){t.x-=this.x0,t.y-=this.y0;var i=Math.sqrt(t.x*t.x+t.y*t.y);if(i>2*Proj4js.common.HALF_PI*this.a)return Proj4js.reportError("aeqdInvDataError"),void 0;var s,e=i/this.a,o=Math.sin(e),n=Math.cos(e),a=this.long0;if(Math.abs(i)<=Proj4js.common.EPSLN)s=this.lat0;else{s=Proj4js.common.asinz(n*this.sin_p12+t.y*o*this.cos_p12/i);var r=Math.abs(this.lat0)-Proj4js.common.HALF_PI;Math.abs(r)<=Proj4js.common.EPSLN?a=this.lat0>=0?Proj4js.common.adjust_lon(this.long0+Math.atan2(t.x,-t.y)):Proj4js.common.adjust_lon(this.long0-Math.atan2(-t.x,t.y)):(r=n-this.sin_p12*Math.sin(s),Math.abs(r)=50&&Proj4js.reportError("moll:Fwd:IterationError")}o/=2,Proj4js.common.PI/2-Math.abs(s).999999999999&&(s=.999999999999);var i=Math.asin(s),e=Proj4js.common.adjust_lon(this.long0+t.x/(.900316316158*this.a*Math.cos(i)));-Proj4js.common.PI>e&&(e=-Proj4js.common.PI),e>Proj4js.common.PI&&(e=Proj4js.common.PI),s=(2*i+Math.sin(2*i))/Proj4js.common.PI,Math.abs(s)>1&&(s=1);var o=Math.asin(s);return t.x=e,t.y=o,t}},function(t,i,s){var e,o;typeof exports!=s+""?e=exports:(o=t.L,e={},e.noConflict=function(){return t.L=o,this},t.L=e),e.version="0.5.1",e.Util={extend:function(t){var i,s,e,o,n=Array.prototype.slice.call(arguments,1);for(s=0,e=n.length;e>s;s++){o=n[s]||{};for(i in o)o.hasOwnProperty(i)&&(t[i]=o[i])}return t},bind:function(t,i){var s=arguments.length>2?Array.prototype.slice.call(arguments,2):null;return function(){return t.apply(i,s||arguments)}},stamp:function(){var t=0,i="_leaflet_id";return function(s){return s[i]=s[i]||++t,s[i]}}(),limitExecByInterval:function(t,i,e){var o,n;return function a(){var r=arguments;return o?(n=!0,s):(o=!0,setTimeout(function(){o=!1,n&&(a.apply(e,r),n=!1)},i),t.apply(e,r),s)}},falseFn:function(){return!1},formatNum:function(t,i){var s=Math.pow(10,i||5);return Math.round(t*s)/s},splitWords:function(t){return t.replace(/^\s+|\s+$/g,"").split(/\s+/)},setOptions:function(t,i){return t.options=e.extend({},t.options,i),t.options},getParamString:function(t,i){var s=[];for(var e in t)t.hasOwnProperty(e)&&s.push(e+"="+t[e]);return(i&&-1!==i.indexOf("?")?"&":"?")+s.join("&")},template:function(t,i){return t.replace(/\{ *([\w_]+) *\}/g,function(t,s){var e=i[s];if(!i.hasOwnProperty(s))throw Error("No value provided for variable "+t);return e})},isArray:function(t){return"[object Array]"===Object.prototype.toString.call(t)},emptyImageUrl:"data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs="},function(){function i(i){var s,e,o=["webkit","moz","o","ms"];for(s=0;o.length>s&&!e;s++)e=t[o[s]+i];return e}function o(i){var s=+new Date,e=Math.max(0,16-(s-n));return n=s+e,t.setTimeout(i,e)}var n=0,a=t.requestAnimationFrame||i("RequestAnimationFrame")||o,r=t.cancelAnimationFrame||i("CancelAnimationFrame")||i("CancelRequestAnimationFrame")||function(i){t.clearTimeout(i)};e.Util.requestAnimFrame=function(i,n,r,h){return i=e.bind(i,n),r&&a===o?(i(),s):a.call(t,i,h)},e.Util.cancelAnimFrame=function(i){i&&r.call(t,i)}}(),e.extend=e.Util.extend,e.bind=e.Util.bind,e.stamp=e.Util.stamp,e.setOptions=e.Util.setOptions,e.Class=function(){},e.Class.extend=function(t){var i=function(){this.initialize&&this.initialize.apply(this,arguments),this._initHooks&&this.callInitHooks()},s=function(){};s.prototype=this.prototype;var o=new s;o.constructor=i,i.prototype=o;for(var n in this)this.hasOwnProperty(n)&&"prototype"!==n&&(i[n]=this[n]);t.statics&&(e.extend(i,t.statics),delete t.statics),t.includes&&(e.Util.extend.apply(null,[o].concat(t.includes)),delete t.includes),t.options&&o.options&&(t.options=e.extend({},o.options,t.options)),e.extend(o,t),o._initHooks=[];var a=this;return o.callInitHooks=function(){if(!this._initHooksCalled){a.prototype.callInitHooks&&a.prototype.callInitHooks.call(this),this._initHooksCalled=!0;for(var t=0,i=o._initHooks.length;i>t;t++)o._initHooks[t].call(this)}},i},e.Class.include=function(t){e.extend(this.prototype,t)},e.Class.mergeOptions=function(t){e.extend(this.prototype.options,t)},e.Class.addInitHook=function(t){var i=Array.prototype.slice.call(arguments,1),s="function"==typeof t?t:function(){this[t].apply(this,i)};this.prototype._initHooks=this.prototype._initHooks||[],this.prototype._initHooks.push(s)};var n="_leaflet_events";e.Mixin={},e.Mixin.Events={addEventListener:function(t,i,s){var o,a,r,h=this[n]=this[n]||{};if("object"==typeof t){for(o in t)t.hasOwnProperty(o)&&this.addEventListener(o,t[o],i);return this}for(t=e.Util.splitWords(t),a=0,r=t.length;r>a;a++)h[t[a]]=h[t[a]]||[],h[t[a]].push({action:i,context:s||this});return this},hasEventListeners:function(t){return n in this&&t in this[n]&&this[n][t].length>0},removeEventListener:function(t,i,s){var o,a,r,h,l,c=this[n];if("object"==typeof t){for(o in t)t.hasOwnProperty(o)&&this.removeEventListener(o,t[o],i);return this}for(t=e.Util.splitWords(t),a=0,r=t.length;r>a;a++)if(this.hasEventListeners(t[a]))for(h=c[t[a]],l=h.length-1;l>=0;l--)i&&h[l].action!==i||s&&h[l].context!==s||h.splice(l,1);return this},fireEvent:function(t,i){if(!this.hasEventListeners(t))return this;for(var s=e.extend({type:t,target:this},i),o=this[n][t].slice(),a=0,r=o.length;r>a;a++)o[a].action.call(o[a].context||this,s);return this}},e.Mixin.Events.on=e.Mixin.Events.addEventListener,e.Mixin.Events.off=e.Mixin.Events.removeEventListener,e.Mixin.Events.fire=e.Mixin.Events.fireEvent,function(){var o=!!t.ActiveXObject,n=o&&!t.XMLHttpRequest,a=o&&!i.querySelector,r=navigator.userAgent.toLowerCase(),h=-1!==r.indexOf("webkit"),l=-1!==r.indexOf("chrome"),c=-1!==r.indexOf("android"),m=-1!==r.search("android [23]"),u=typeof orientation!=s+"",d=t.navigator&&t.navigator.msPointerEnabled&&t.navigator.msMaxTouchPoints,p="devicePixelRatio"in t&&t.devicePixelRatio>1||"matchMedia"in t&&t.matchMedia("(min-resolution:144dpi)")&&t.matchMedia("(min-resolution:144dpi)").matches,_=i.documentElement,f=o&&"transition"in _.style,P="WebKitCSSMatrix"in t&&"m11"in new t.WebKitCSSMatrix,y="MozPerspective"in _.style,g="OTransition"in _.style,L=!t.L_DISABLE_3D&&(f||P||y||g),v=!t.L_NO_TOUCH&&function(){var t="ontouchstart";if(d||t in _)return!0;var s=i.createElement("div"),e=!1;return s.setAttribute?(s.setAttribute(t,"return;"),"function"==typeof s[t]&&(e=!0),s.removeAttribute(t),s=null,e):!1}();e.Browser={ie:o,ie6:n,ie7:a,webkit:h,android:c,android23:m,chrome:l,ie3d:f,webkit3d:P,gecko3d:y,opera3d:g,any3d:L,mobile:u,mobileWebkit:u&&h,mobileWebkit3d:u&&P,mobileOpera:u&&t.opera,touch:v,msTouch:d,retina:p}}(),e.Point=function(t,i,s){this.x=s?Math.round(t):t,this.y=s?Math.round(i):i},e.Point.prototype={clone:function(){return new e.Point(this.x,this.y)},add:function(t){return this.clone()._add(e.point(t))},_add:function(t){return this.x+=t.x,this.y+=t.y,this},subtract:function(t){return this.clone()._subtract(e.point(t))},_subtract:function(t){return this.x-=t.x,this.y-=t.y,this},divideBy:function(t){return this.clone()._divideBy(t)},_divideBy:function(t){return this.x/=t,this.y/=t,this},multiplyBy:function(t){return this.clone()._multiplyBy(t)},_multiplyBy:function(t){return this.x*=t,this.y*=t,this},round:function(){return this.clone()._round()},_round:function(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this},floor:function(){return this.clone()._floor()},_floor:function(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this},distanceTo:function(t){t=e.point(t);var i=t.x-this.x,s=t.y-this.y;return Math.sqrt(i*i+s*s)},equals:function(t){return t.x===this.x&&t.y===this.y},toString:function(){return"Point("+e.Util.formatNum(this.x)+", "+e.Util.formatNum(this.y)+")"}},e.point=function(t,i,s){return t instanceof e.Point?t:e.Util.isArray(t)?new e.Point(t[0],t[1]):isNaN(t)?t:new e.Point(t,i,s)},e.Bounds=function(t,i){if(t)for(var s=i?[t,i]:t,e=0,o=s.length;o>e;e++)this.extend(s[e])},e.Bounds.prototype={extend:function(t){return t=e.point(t),this.min||this.max?(this.min.x=Math.min(t.x,this.min.x),this.max.x=Math.max(t.x,this.max.x),this.min.y=Math.min(t.y,this.min.y),this.max.y=Math.max(t.y,this.max.y)):(this.min=t.clone(),this.max=t.clone()),this},getCenter:function(t){return new e.Point((this.min.x+this.max.x)/2,(this.min.y+this.max.y)/2,t)},getBottomLeft:function(){return new e.Point(this.min.x,this.max.y)},getTopRight:function(){return new e.Point(this.max.x,this.min.y)},getSize:function(){return this.max.subtract(this.min)},contains:function(t){var i,s;return t="number"==typeof t[0]||t instanceof e.Point?e.point(t):e.bounds(t),t instanceof e.Bounds?(i=t.min,s=t.max):i=s=t,i.x>=this.min.x&&s.x<=this.max.x&&i.y>=this.min.y&&s.y<=this.max.y},intersects:function(t){t=e.bounds(t);var i=this.min,s=this.max,o=t.min,n=t.max,a=n.x>=i.x&&o.x<=s.x,r=n.y>=i.y&&o.y<=s.y;return a&&r},isValid:function(){return!(!this.min||!this.max)}},e.bounds=function(t,i){return!t||t instanceof e.Bounds?t:new e.Bounds(t,i)},e.Transformation=function(t,i,s,e){this._a=t,this._b=i,this._c=s,this._d=e},e.Transformation.prototype={transform:function(t,i){return this._transform(t.clone(),i)},_transform:function(t,i){return i=i||1,t.x=i*(this._a*t.x+this._b),t.y=i*(this._c*t.y+this._d),t},untransform:function(t,i){return i=i||1,new e.Point((t.x/i-this._b)/this._a,(t.y/i-this._d)/this._c)}},e.DomUtil={get:function(t){return"string"==typeof t?i.getElementById(t):t},getStyle:function(t,s){var e=t.style[s];if(!e&&t.currentStyle&&(e=t.currentStyle[s]),(!e||"auto"===e)&&i.defaultView){var o=i.defaultView.getComputedStyle(t,null);e=o?o[s]:null}return"auto"===e?null:e},getViewportOffset:function(t){var s,o=0,n=0,a=t,r=i.body,h=e.Browser.ie7;do{if(o+=a.offsetTop||0,n+=a.offsetLeft||0,o+=parseInt(e.DomUtil.getStyle(a,"borderTopWidth"),10)||0,n+=parseInt(e.DomUtil.getStyle(a,"borderLeftWidth"),10)||0,s=e.DomUtil.getStyle(a,"position"),a.offsetParent===r&&"absolute"===s)break;if("fixed"===s){o+=r.scrollTop||0,n+=r.scrollLeft||0;break}a=a.offsetParent}while(a);a=t;do{if(a===r)break;o-=a.scrollTop||0,n-=a.scrollLeft||0,e.DomUtil.documentIsLtr()||!e.Browser.webkit&&!h||(n+=a.scrollWidth-a.clientWidth,h&&"hidden"!==e.DomUtil.getStyle(a,"overflow-y")&&"hidden"!==e.DomUtil.getStyle(a,"overflow")&&(n+=17)),a=a.parentNode}while(a);return new e.Point(n,o)},documentIsLtr:function(){return e.DomUtil._docIsLtrCached||(e.DomUtil._docIsLtrCached=!0,e.DomUtil._docIsLtr="ltr"===e.DomUtil.getStyle(i.body,"direction")),e.DomUtil._docIsLtr},create:function(t,s,e){var o=i.createElement(t);return o.className=s,e&&e.appendChild(o),o},disableTextSelection:function(){i.selection&&i.selection.empty&&i.selection.empty(),this._onselectstart||(this._onselectstart=i.onselectstart||null,i.onselectstart=e.Util.falseFn)},enableTextSelection:function(){i.onselectstart===e.Util.falseFn&&(i.onselectstart=this._onselectstart,this._onselectstart=null)},hasClass:function(t,i){return t.className.length>0&&RegExp("(^|\\s)"+i+"(\\s|$)").test(t.className)},addClass:function(t,i){e.DomUtil.hasClass(t,i)||(t.className+=(t.className?" ":"")+i)},removeClass:function(t,i){function s(t,s){return s===i?"":t}t.className=t.className.replace(/(\S+)\s*/g,s).replace(/(^\s+|\s+$)/,"")},setOpacity:function(t,i){if("opacity"in t.style)t.style.opacity=i;else if("filter"in t.style){var s=!1,e="DXImageTransform.Microsoft.Alpha";try{s=t.filters.item(e)}catch(o){}i=Math.round(100*i),s?(s.Enabled=100!==i,s.Opacity=i):t.style.filter+=" progid:"+e+"(opacity="+i+")"}},testProp:function(t){for(var s=i.documentElement.style,e=0;t.length>e;e++)if(t[e]in s)return t[e];return!1},getTranslateString:function(t){var i=e.Browser.webkit3d,s="translate"+(i?"3d":"")+"(",o=(i?",0":"")+")";return s+t.x+"px,"+t.y+"px"+o},getScaleString:function(t,i){var s=e.DomUtil.getTranslateString(i.add(i.multiplyBy(-1*t))),o=" scale("+t+") ";return s+o},setPosition:function(t,i,s){t._leaflet_pos=i,!s&&e.Browser.any3d?(t.style[e.DomUtil.TRANSFORM]=e.DomUtil.getTranslateString(i),e.Browser.mobileWebkit3d&&(t.style.WebkitBackfaceVisibility="hidden")):(t.style.left=i.x+"px",t.style.top=i.y+"px")},getPosition:function(t){return t._leaflet_pos}},e.DomUtil.TRANSFORM=e.DomUtil.testProp(["transform","WebkitTransform","OTransform","MozTransform","msTransform"]),e.DomUtil.TRANSITION=e.DomUtil.testProp(["webkitTransition","transition","OTransition","MozTransition","msTransition"]),e.DomUtil.TRANSITION_END="webkitTransition"===e.DomUtil.TRANSITION||"OTransition"===e.DomUtil.TRANSITION?e.DomUtil.TRANSITION+"End":"transitionend",e.LatLng=function(t,i){var s=parseFloat(t),e=parseFloat(i);if(isNaN(s)||isNaN(e))throw Error("Invalid LatLng object: ("+t+", "+i+")");this.lat=s,this.lng=e},e.extend(e.LatLng,{DEG_TO_RAD:Math.PI/180,RAD_TO_DEG:180/Math.PI,MAX_MARGIN:1e-9}),e.LatLng.prototype={equals:function(t){if(!t)return!1;t=e.latLng(t);var i=Math.max(Math.abs(this.lat-t.lat),Math.abs(this.lng-t.lng));return e.LatLng.MAX_MARGIN>=i},toString:function(t){return"LatLng("+e.Util.formatNum(this.lat,t)+", "+e.Util.formatNum(this.lng,t)+")"},distanceTo:function(t){t=e.latLng(t);var i=6378137,s=e.LatLng.DEG_TO_RAD,o=(t.lat-this.lat)*s,n=(t.lng-this.lng)*s,a=this.lat*s,r=t.lat*s,h=Math.sin(o/2),l=Math.sin(n/2),c=h*h+l*l*Math.cos(a)*Math.cos(r);return 2*i*Math.atan2(Math.sqrt(c),Math.sqrt(1-c))},wrap:function(t,i){var s=this.lng;return t=t||-180,i=i||180,s=(s+i)%(i-t)+(t>s||s===i?i:t),new e.LatLng(this.lat,s)}},e.latLng=function(t,i){return t instanceof e.LatLng?t:e.Util.isArray(t)?new e.LatLng(t[0],t[1]):isNaN(t)?t:new e.LatLng(t,i)},e.LatLngBounds=function(t,i){if(t)for(var s=i?[t,i]:t,e=0,o=s.length;o>e;e++)this.extend(s[e])},e.LatLngBounds.prototype={extend:function(t){return t="number"==typeof t[0]||"string"==typeof t[0]||t instanceof e.LatLng?e.latLng(t):e.latLngBounds(t),t instanceof e.LatLng?this._southWest||this._northEast?(this._southWest.lat=Math.min(t.lat,this._southWest.lat),this._southWest.lng=Math.min(t.lng,this._southWest.lng),this._northEast.lat=Math.max(t.lat,this._northEast.lat),this._northEast.lng=Math.max(t.lng,this._northEast.lng)):(this._southWest=new e.LatLng(t.lat,t.lng),this._northEast=new e.LatLng(t.lat,t.lng)):t instanceof e.LatLngBounds&&(this.extend(t._southWest),this.extend(t._northEast)),this},pad:function(t){var i=this._southWest,s=this._northEast,o=Math.abs(i.lat-s.lat)*t,n=Math.abs(i.lng-s.lng)*t;return new e.LatLngBounds(new e.LatLng(i.lat-o,i.lng-n),new e.LatLng(s.lat+o,s.lng+n))},getCenter:function(){return new e.LatLng((this._southWest.lat+this._northEast.lat)/2,(this._southWest.lng+this._northEast.lng)/2)},getSouthWest:function(){return this._southWest},getNorthEast:function(){return this._northEast},getNorthWest:function(){return new e.LatLng(this._northEast.lat,this._southWest.lng)},getSouthEast:function(){return new e.LatLng(this._southWest.lat,this._northEast.lng)},contains:function(t){t="number"==typeof t[0]||t instanceof e.LatLng?e.latLng(t):e.latLngBounds(t);var i,s,o=this._southWest,n=this._northEast;return t instanceof e.LatLngBounds?(i=t.getSouthWest(),s=t.getNorthEast()):i=s=t,i.lat>=o.lat&&s.lat<=n.lat&&i.lng>=o.lng&&s.lng<=n.lng},intersects:function(t){t=e.latLngBounds(t);var i=this._southWest,s=this._northEast,o=t.getSouthWest(),n=t.getNorthEast(),a=n.lat>=i.lat&&o.lat<=s.lat,r=n.lng>=i.lng&&o.lng<=s.lng;return a&&r},toBBoxString:function(){var t=this._southWest,i=this._northEast;return[t.lng,t.lat,i.lng,i.lat].join(",")},equals:function(t){return t?(t=e.latLngBounds(t),this._southWest.equals(t.getSouthWest())&&this._northEast.equals(t.getNorthEast())):!1},isValid:function(){return!(!this._southWest||!this._northEast)}},e.latLngBounds=function(t,i){return!t||t instanceof e.LatLngBounds?t:new e.LatLngBounds(t,i)},e.Projection={},e.Projection.SphericalMercator={MAX_LATITUDE:85.0511287798,project:function(t){var i=e.LatLng.DEG_TO_RAD,s=this.MAX_LATITUDE,o=Math.max(Math.min(s,t.lat),-s),n=t.lng*i,a=o*i;return a=Math.log(Math.tan(Math.PI/4+a/2)),new e.Point(n,a)},unproject:function(t){var i=e.LatLng.RAD_TO_DEG,s=t.x*i,o=(2*Math.atan(Math.exp(t.y))-Math.PI/2)*i;return new e.LatLng(o,s)}},e.Projection.LonLat={project:function(t){return new e.Point(t.lng,t.lat)},unproject:function(t){return new e.LatLng(t.y,t.x)}},e.CRS={latLngToPoint:function(t,i){var s=this.projection.project(t),e=this.scale(i);return this.transformation._transform(s,e)},pointToLatLng:function(t,i){var s=this.scale(i),e=this.transformation.untransform(t,s);return this.projection.unproject(e)},project:function(t){return this.projection.project(t)},scale:function(t){return 256*Math.pow(2,t)}},e.CRS.Simple=e.extend({},e.CRS,{projection:e.Projection.LonLat,transformation:new e.Transformation(1,0,-1,0),scale:function(t){return Math.pow(2,t)}}),e.CRS.EPSG3857=e.extend({},e.CRS,{code:"EPSG:3857",projection:e.Projection.SphericalMercator,transformation:new e.Transformation(.5/Math.PI,.5,-.5/Math.PI,.5),project:function(t){var i=this.projection.project(t),s=6378137;return i.multiplyBy(s)}}),e.CRS.EPSG900913=e.extend({},e.CRS.EPSG3857,{code:"EPSG:900913"}),e.CRS.EPSG4326=e.extend({},e.CRS,{code:"EPSG:4326",projection:e.Projection.LonLat,transformation:new e.Transformation(1/360,.5,-1/360,.5)}),e.Map=e.Class.extend({includes:e.Mixin.Events,options:{crs:e.CRS.EPSG3857,fadeAnimation:e.DomUtil.TRANSITION&&!e.Browser.android23,trackResize:!0,markerZoomAnimation:e.DomUtil.TRANSITION&&e.Browser.any3d},initialize:function(t,i){i=e.setOptions(this,i),this._initContainer(t),this._initLayout(),this.callInitHooks(),this._initEvents(),i.maxBounds&&this.setMaxBounds(i.maxBounds),i.center&&i.zoom!==s&&this.setView(e.latLng(i.center),i.zoom,!0),this._initLayers(i.layers)},setView:function(t,i){return this._resetView(e.latLng(t),this._limitZoom(i)),this},setZoom:function(t){return this.setView(this.getCenter(),t)},zoomIn:function(t){return this.setZoom(this._zoom+(t||1))},zoomOut:function(t){return this.setZoom(this._zoom-(t||1))},fitBounds:function(t){var i=this.getBoundsZoom(t);return this.setView(e.latLngBounds(t).getCenter(),i)},fitWorld:function(){var t=new e.LatLng(-60,-170),i=new e.LatLng(85,179);return this.fitBounds(new e.LatLngBounds(t,i))},panTo:function(t){return this.setView(t,this._zoom)},panBy:function(t){return this.fire("movestart"),this._rawPanBy(e.point(t)),this.fire("move"),this.fire("moveend")},setMaxBounds:function(t){if(t=e.latLngBounds(t),this.options.maxBounds=t,!t)return this._boundsMinZoom=null,this;var i=this.getBoundsZoom(t,!0);return this._boundsMinZoom=i,this._loaded&&(i>this._zoom?this.setView(t.getCenter(),i):this.panInsideBounds(t)),this},panInsideBounds:function(t){t=e.latLngBounds(t);var i=this.getBounds(),s=this.project(i.getSouthWest()),o=this.project(i.getNorthEast()),n=this.project(t.getSouthWest()),a=this.project(t.getNorthEast()),r=0,h=0;return o.ya.x&&(r=a.x-o.x),s.y>n.y&&(h=n.y-s.y),s.x=r);return m&&i?null:i?r:r-1},getSize:function(){return(!this._size||this._sizeChanged)&&(this._size=new e.Point(this._container.clientWidth,this._container.clientHeight),this._sizeChanged=!1),this._size.clone()},getPixelBounds:function(){var t=this._getTopLeftPoint();return new e.Bounds(t,t.add(this.getSize()))},getPixelOrigin:function(){return this._initialTopLeftPoint},getPanes:function(){return this._panes},getContainer:function(){return this._container},getZoomScale:function(t){var i=this.options.crs;return i.scale(t)/i.scale(this._zoom)},getScaleZoom:function(t){return this._zoom+Math.log(t)/Math.LN2},project:function(t,i){return i=i===s?this._zoom:i,this.options.crs.latLngToPoint(e.latLng(t),i)},unproject:function(t,i){return i=i===s?this._zoom:i,this.options.crs.pointToLatLng(e.point(t),i)},layerPointToLatLng:function(t){var i=e.point(t).add(this._initialTopLeftPoint);return this.unproject(i)},latLngToLayerPoint:function(t){var i=this.project(e.latLng(t))._round();return i._subtract(this._initialTopLeftPoint)},containerPointToLayerPoint:function(t){return e.point(t).subtract(this._getMapPanePos())},layerPointToContainerPoint:function(t){return e.point(t).add(this._getMapPanePos())},containerPointToLatLng:function(t){var i=this.containerPointToLayerPoint(e.point(t));return this.layerPointToLatLng(i)},latLngToContainerPoint:function(t){return this.layerPointToContainerPoint(this.latLngToLayerPoint(e.latLng(t)))},mouseEventToContainerPoint:function(t){return e.DomEvent.getMousePosition(t,this._container)},mouseEventToLayerPoint:function(t){return this.containerPointToLayerPoint(this.mouseEventToContainerPoint(t))},mouseEventToLatLng:function(t){return this.layerPointToLatLng(this.mouseEventToLayerPoint(t))},_initContainer:function(t){var i=this._container=e.DomUtil.get(t);if(i._leaflet)throw Error("Map container is already initialized.");i._leaflet=!0},_initLayout:function(){var t=this._container;e.DomUtil.addClass(t,"leaflet-container"),e.Browser.touch&&e.DomUtil.addClass(t,"leaflet-touch"),this.options.fadeAnimation&&e.DomUtil.addClass(t,"leaflet-fade-anim");var i=e.DomUtil.getStyle(t,"position");"absolute"!==i&&"relative"!==i&&"fixed"!==i&&(t.style.position="relative"),this._initPanes(),this._initControlPos&&this._initControlPos()},_initPanes:function(){var t=this._panes={};this._mapPane=t.mapPane=this._createPane("leaflet-map-pane",this._container),this._tilePane=t.tilePane=this._createPane("leaflet-tile-pane",this._mapPane),t.objectsPane=this._createPane("leaflet-objects-pane",this._mapPane),t.shadowPane=this._createPane("leaflet-shadow-pane"),t.overlayPane=this._createPane("leaflet-overlay-pane"),t.markerPane=this._createPane("leaflet-marker-pane"),t.popupPane=this._createPane("leaflet-popup-pane");var i=" leaflet-zoom-hide";this.options.markerZoomAnimation||(e.DomUtil.addClass(t.markerPane,i),e.DomUtil.addClass(t.shadowPane,i),e.DomUtil.addClass(t.popupPane,i))},_createPane:function(t,i){return e.DomUtil.create("div",t,i||this._panes.objectsPane)},_initLayers:function(t){t=t?e.Util.isArray(t)?t:[t]:[],this._layers={},this._zoomBoundLayers={},this._tileLayersNum=0;var i,s;for(i=0,s=t.length;s>i;i++)this.addLayer(t[i])},_resetView:function(t,i,s,o){var n=this._zoom!==i;o||(this.fire("movestart"),n&&this.fire("zoomstart")),this._zoom=i,this._initialTopLeftPoint=this._getNewTopLeftPoint(t),s?this._initialTopLeftPoint._add(this._getMapPanePos()):e.DomUtil.setPosition(this._mapPane,new e.Point(0,0)),this._tileLayersToLoad=this._tileLayersNum;var a=!this._loaded;this._loaded=!0,this.fire("viewreset",{hard:!s}),this.fire("move"),(n||o)&&this.fire("zoomend"),this.fire("moveend",{hard:!s}),a&&this.fire("load")},_rawPanBy:function(t){e.DomUtil.setPosition(this._mapPane,this._getMapPanePos().subtract(t))},_updateZoomLevels:function(){var t,i=1/0,e=-1/0;for(t in this._zoomBoundLayers)if(this._zoomBoundLayers.hasOwnProperty(t)){var o=this._zoomBoundLayers[t];isNaN(o.options.minZoom)||(i=Math.min(i,o.options.minZoom)),isNaN(o.options.maxZoom)||(e=Math.max(e,o.options.maxZoom))}t===s?this._layersMaxZoom=this._layersMinZoom=s:(this._layersMaxZoom=e,this._layersMinZoom=i)},_initEvents:function(){if(e.DomEvent){e.DomEvent.on(this._container,"click",this._onMouseClick,this);var i,s,o=["dblclick","mousedown","mouseup","mouseenter","mouseleave","mousemove","contextmenu"];for(i=0,s=o.length;s>i;i++)e.DomEvent.on(this._container,o[i],this._fireMouseEvent,this);this.options.trackResize&&e.DomEvent.on(t,"resize",this._onResize,this)}},_onResize:function(){e.Util.cancelAnimFrame(this._resizeRequest),this._resizeRequest=e.Util.requestAnimFrame(this.invalidateSize,this,!1,this._container)},_onMouseClick:function(t){!this._loaded||this.dragging&&this.dragging.moved()||(this.fire("preclick"),this._fireMouseEvent(t))},_fireMouseEvent:function(t){if(this._loaded){var i=t.type;if(i="mouseenter"===i?"mouseover":"mouseleave"===i?"mouseout":i,this.hasEventListeners(i)){"contextmenu"===i&&e.DomEvent.preventDefault(t);var s=this.mouseEventToContainerPoint(t),o=this.containerPointToLayerPoint(s),n=this.layerPointToLatLng(o);this.fire(i,{latlng:n,layerPoint:o,containerPoint:s,originalEvent:t})}}},_onTileLayerLoad:function(){this._tileLayersToLoad--,this._tileLayersNum&&!this._tileLayersToLoad&&this._tileBg&&(clearTimeout(this._clearTileBgTimer),this._clearTileBgTimer=setTimeout(e.bind(this._clearTileBg,this),500))},whenReady:function(t,i){return this._loaded?t.call(i||this,this):this.on("load",t,i),this},_getMapPanePos:function(){return e.DomUtil.getPosition(this._mapPane)},_getTopLeftPoint:function(){if(!this._loaded)throw Error("Set map center and zoom first.");return this._initialTopLeftPoint.subtract(this._getMapPanePos())},_getNewTopLeftPoint:function(t,i){var s=this.getSize()._divideBy(2);return this.project(t,i)._subtract(s)._round()},_latLngToNewLayerPoint:function(t,i,s){var e=this._getNewTopLeftPoint(s,i).add(this._getMapPanePos());return this.project(t,i)._subtract(e)},_getCenterLayerPoint:function(){return this.containerPointToLayerPoint(this.getSize()._divideBy(2))},_getCenterOffset:function(t){return this.latLngToLayerPoint(t).subtract(this._getCenterLayerPoint())},_limitZoom:function(t){var i=this.getMinZoom(),s=this.getMaxZoom();return Math.max(i,Math.min(s,t))}}),e.map=function(t,i){return new e.Map(t,i)},e.Projection.Mercator={MAX_LATITUDE:85.0840591556,R_MINOR:6356752.3142,R_MAJOR:6378137,project:function(t){var i=e.LatLng.DEG_TO_RAD,s=this.MAX_LATITUDE,o=Math.max(Math.min(s,t.lat),-s),n=this.R_MAJOR,a=this.R_MINOR,r=t.lng*i*n,h=o*i,l=a/n,c=Math.sqrt(1-l*l),m=c*Math.sin(h);m=Math.pow((1-m)/(1+m),.5*c);var u=Math.tan(.5*(.5*Math.PI-h))/m;return h=-a*Math.log(u),new e.Point(r,h)},unproject:function(t){for(var i,s=e.LatLng.RAD_TO_DEG,o=this.R_MAJOR,n=this.R_MINOR,a=t.x*s/o,r=n/o,h=Math.sqrt(1-r*r),l=Math.exp(-t.y/n),c=Math.PI/2-2*Math.atan(l),m=15,u=1e-7,d=m,p=.1;Math.abs(p)>u&&--d>0;)i=h*Math.sin(c),p=Math.PI/2-2*Math.atan(l*Math.pow((1-i)/(1+i),.5*h))-c,c+=p;return new e.LatLng(c*s,a)}},e.CRS.EPSG3395=e.extend({},e.CRS,{code:"EPSG:3395",projection:e.Projection.Mercator,transformation:function(){var t=e.Projection.Mercator,i=t.R_MAJOR,s=t.R_MINOR;return new e.Transformation(.5/(Math.PI*i),.5,-.5/(Math.PI*s),.5)}()}),e.TileLayer=e.Class.extend({includes:e.Mixin.Events,options:{minZoom:0,maxZoom:18,tileSize:256,subdomains:"abc",errorTileUrl:"",attribution:"",zoomOffset:0,opacity:1,unloadInvisibleTiles:e.Browser.mobile,updateWhenIdle:e.Browser.mobile},initialize:function(t,i){i=e.setOptions(this,i),i.detectRetina&&e.Browser.retina&&i.maxZoom>0&&(i.tileSize=Math.floor(i.tileSize/2),i.zoomOffset++,i.minZoom>0&&i.minZoom--,this.options.maxZoom--),this._url=t;var s=this.options.subdomains;"string"==typeof s&&(this.options.subdomains=s.split(""))},onAdd:function(t){this._map=t,this._initContainer(),this._createTileProto(),t.on({viewreset:this._resetCallback,moveend:this._update},this),this.options.updateWhenIdle||(this._limitedUpdate=e.Util.limitExecByInterval(this._update,150,this),t.on("move",this._limitedUpdate,this)),this._reset(),this._update()},addTo:function(t){return t.addLayer(this),this},onRemove:function(t){this._container.parentNode.removeChild(this._container),t.off({viewreset:this._resetCallback,moveend:this._update},this),this.options.updateWhenIdle||t.off("move",this._limitedUpdate,this),this._container=null,this._map=null},bringToFront:function(){var t=this._map._panes.tilePane;return this._container&&(t.appendChild(this._container),this._setAutoZIndex(t,Math.max)),this},bringToBack:function(){var t=this._map._panes.tilePane;return this._container&&(t.insertBefore(this._container,t.firstChild),this._setAutoZIndex(t,Math.min)),this},getAttribution:function(){return this.options.attribution},setOpacity:function(t){return this.options.opacity=t,this._map&&this._updateOpacity(),this},setZIndex:function(t){return this.options.zIndex=t,this._updateZIndex(),this},setUrl:function(t,i){return this._url=t,i||this.redraw(),this},redraw:function(){return this._map&&(this._map._panes.tilePane.empty=!1,this._reset(!0),this._update()),this},_updateZIndex:function(){this._container&&this.options.zIndex!==s&&(this._container.style.zIndex=this.options.zIndex)},_setAutoZIndex:function(t,i){var s,e,o,n=t.children,a=-i(1/0,-1/0);for(e=0,o=n.length;o>e;e++)n[e]!==this._container&&(s=parseInt(n[e].style.zIndex,10),isNaN(s)||(a=i(a,s)));this.options.zIndex=this._container.style.zIndex=(isFinite(a)?a:0)+i(1,-1)},_updateOpacity:function(){e.DomUtil.setOpacity(this._container,this.options.opacity);var t,i=this._tiles;if(e.Browser.webkit)for(t in i)i.hasOwnProperty(t)&&(i[t].style.webkitTransform+=" translate(0,0)")},_initContainer:function(){var t=this._map._panes.tilePane;(!this._container||t.empty)&&(this._container=e.DomUtil.create("div","leaflet-layer"),this._updateZIndex(),t.appendChild(this._container),1>this.options.opacity&&this._updateOpacity())},_resetCallback:function(t){this._reset(t.hard)},_reset:function(t){var i=this._tiles;for(var s in i)i.hasOwnProperty(s)&&this.fire("tileunload",{tile:i[s]});this._tiles={},this._tilesToLoad=0,this.options.reuseTiles&&(this._unusedTiles=[]),t&&this._container&&(this._container.innerHTML=""),this._initContainer()},_update:function(){if(this._map){var t=this._map.getPixelBounds(),i=this._map.getZoom(),s=this.options.tileSize;if(!(i>this.options.maxZoom||this.options.minZoom>i)){var o=new e.Point(Math.floor(t.min.x/s),Math.floor(t.min.y/s)),n=new e.Point(Math.floor(t.max.x/s),Math.floor(t.max.y/s)),a=new e.Bounds(o,n);this._addTilesFromCenterOut(a),(this.options.unloadInvisibleTiles||this.options.reuseTiles)&&this._removeOtherTiles(a)}}},_addTilesFromCenterOut:function(t){var s,o,n,a=[],r=t.getCenter();for(s=t.min.y;t.max.y>=s;s++)for(o=t.min.x;t.max.x>=o;o++)n=new e.Point(o,s),this._tileShouldBeLoaded(n)&&a.push(n);var h=a.length;if(0!==h){a.sort(function(t,i){return t.distanceTo(r)-i.distanceTo(r)});var l=i.createDocumentFragment();for(this._tilesToLoad||this.fire("loading"),this._tilesToLoad+=h,o=0;h>o;o++)this._addTile(a[o],l);this._container.appendChild(l)}},_tileShouldBeLoaded:function(t){ -if(t.x+":"+t.y in this._tiles)return!1;if(!this.options.continuousWorld){var i=this._getWrapTileNum();if(this.options.noWrap&&(0>t.x||t.x>=i)||0>t.y||t.y>=i)return!1}return!0},_removeOtherTiles:function(t){var i,s,e,o;for(o in this._tiles)this._tiles.hasOwnProperty(o)&&(i=o.split(":"),s=parseInt(i[0],10),e=parseInt(i[1],10),(t.min.x>s||s>t.max.x||t.min.y>e||e>t.max.y)&&this._removeTile(o))},_removeTile:function(t){var i=this._tiles[t];this.fire("tileunload",{tile:i,url:i.src}),this.options.reuseTiles?(e.DomUtil.removeClass(i,"leaflet-tile-loaded"),this._unusedTiles.push(i)):i.parentNode===this._container&&this._container.removeChild(i),e.Browser.android||(i.src=e.Util.emptyImageUrl),delete this._tiles[t]},_addTile:function(t,i){var s=this._getTilePos(t),o=this._getTile();e.DomUtil.setPosition(o,s,e.Browser.chrome||e.Browser.android23),this._tiles[t.x+":"+t.y]=o,this._loadTile(o,t),o.parentNode!==this._container&&i.appendChild(o)},_getZoomForUrl:function(){var t=this.options,i=this._map.getZoom();return t.zoomReverse&&(i=t.maxZoom-i),i+t.zoomOffset},_getTilePos:function(t){var i=this._map.getPixelOrigin(),s=this.options.tileSize;return t.multiplyBy(s).subtract(i)},getTileUrl:function(t){return this._adjustTilePoint(t),e.Util.template(this._url,e.extend({s:this._getSubdomain(t),z:this._getZoomForUrl(),x:t.x,y:t.y},this.options))},_getWrapTileNum:function(){return Math.pow(2,this._getZoomForUrl())},_adjustTilePoint:function(t){var i=this._getWrapTileNum();this.options.continuousWorld||this.options.noWrap||(t.x=(t.x%i+i)%i),this.options.tms&&(t.y=i-t.y-1)},_getSubdomain:function(t){var i=(t.x+t.y)%this.options.subdomains.length;return this.options.subdomains[i]},_createTileProto:function(){var t=this._tileImg=e.DomUtil.create("img","leaflet-tile");t.style.width=t.style.height=this.options.tileSize+"px",t.galleryimg="no"},_getTile:function(){if(this.options.reuseTiles&&this._unusedTiles.length>0){var t=this._unusedTiles.pop();return this._resetTile(t),t}return this._createTile()},_resetTile:function(){},_createTile:function(){var t=this._tileImg.cloneNode(!1);return t.onselectstart=t.onmousemove=e.Util.falseFn,t},_loadTile:function(t,i){t._layer=this,t.onload=this._tileOnLoad,t.onerror=this._tileOnError,t.src=this.getTileUrl(i)},_tileLoaded:function(){this._tilesToLoad--,this._tilesToLoad||this.fire("load")},_tileOnLoad:function(){var t=this._layer;this.src!==e.Util.emptyImageUrl&&(e.DomUtil.addClass(this,"leaflet-tile-loaded"),t.fire("tileload",{tile:this,url:this.src})),t._tileLoaded()},_tileOnError:function(){var t=this._layer;t.fire("tileerror",{tile:this,url:this.src});var i=t.options.errorTileUrl;i&&(this.src=i),t._tileLoaded()}}),e.tileLayer=function(t,i){return new e.TileLayer(t,i)},e.TileLayer.WMS=e.TileLayer.extend({defaultWmsParams:{service:"WMS",request:"GetMap",version:"1.1.1",layers:"",styles:"",format:"image/jpeg",transparent:!1},initialize:function(t,i){this._url=t;var s=e.extend({},this.defaultWmsParams);s.width=s.height=i.detectRetina&&e.Browser.retina?2*this.options.tileSize:this.options.tileSize;for(var o in i)this.options.hasOwnProperty(o)||(s[o]=i[o]);this.wmsParams=s,e.setOptions(this,i)},onAdd:function(t){var i=parseFloat(this.wmsParams.version)>=1.3?"crs":"srs";this.wmsParams[i]=t.options.crs.code,e.TileLayer.prototype.onAdd.call(this,t)},getTileUrl:function(t,i){this._adjustTilePoint(t);var s=this._map,o=s.options.crs,n=this.options.tileSize,a=t.multiplyBy(n),r=a.add(new e.Point(n,n)),h=o.project(s.unproject(a,i)),l=o.project(s.unproject(r,i)),c=[h.x,l.y,l.x,h.y].join(","),m=e.Util.template(this._url,{s:this._getSubdomain(t)});return m+e.Util.getParamString(this.wmsParams,m)+"&bbox="+c},setParams:function(t,i){return e.extend(this.wmsParams,t),i||this.redraw(),this}}),e.tileLayer.wms=function(t,i){return new e.TileLayer.WMS(t,i)},e.TileLayer.Canvas=e.TileLayer.extend({options:{async:!1},initialize:function(t){e.setOptions(this,t)},redraw:function(){var t=this._tiles;for(var i in t)t.hasOwnProperty(i)&&this._redrawTile(t[i])},_redrawTile:function(t){this.drawTile(t,t._tilePoint,this._map._zoom)},_createTileProto:function(){var t=this._canvasProto=e.DomUtil.create("canvas","leaflet-tile");t.width=t.height=this.options.tileSize},_createTile:function(){var t=this._canvasProto.cloneNode(!1);return t.onselectstart=t.onmousemove=e.Util.falseFn,t},_loadTile:function(t,i){t._layer=this,t._tilePoint=i,this._redrawTile(t),this.options.async||this.tileDrawn(t)},drawTile:function(){},tileDrawn:function(t){this._tileOnLoad.call(t)}}),e.tileLayer.canvas=function(t){return new e.TileLayer.Canvas(t)},e.ImageOverlay=e.Class.extend({includes:e.Mixin.Events,options:{opacity:1},initialize:function(t,i,s){this._url=t,this._bounds=e.latLngBounds(i),e.setOptions(this,s)},onAdd:function(t){this._map=t,this._image||this._initImage(),t._panes.overlayPane.appendChild(this._image),t.on("viewreset",this._reset,this),t.options.zoomAnimation&&e.Browser.any3d&&t.on("zoomanim",this._animateZoom,this),this._reset()},onRemove:function(t){t.getPanes().overlayPane.removeChild(this._image),t.off("viewreset",this._reset,this),t.options.zoomAnimation&&t.off("zoomanim",this._animateZoom,this)},addTo:function(t){return t.addLayer(this),this},setOpacity:function(t){return this.options.opacity=t,this._updateOpacity(),this},bringToFront:function(){return this._image&&this._map._panes.overlayPane.appendChild(this._image),this},bringToBack:function(){var t=this._map._panes.overlayPane;return this._image&&t.insertBefore(this._image,t.firstChild),this},_initImage:function(){this._image=e.DomUtil.create("img","leaflet-image-layer"),this._map.options.zoomAnimation&&e.Browser.any3d?e.DomUtil.addClass(this._image,"leaflet-zoom-animated"):e.DomUtil.addClass(this._image,"leaflet-zoom-hide"),this._updateOpacity(),e.extend(this._image,{galleryimg:"no",onselectstart:e.Util.falseFn,onmousemove:e.Util.falseFn,onload:e.bind(this._onImageLoad,this),src:this._url})},_animateZoom:function(t){var i=this._map,s=this._image,o=i.getZoomScale(t.zoom),n=this._bounds.getNorthWest(),a=this._bounds.getSouthEast(),r=i._latLngToNewLayerPoint(n,t.zoom,t.center),h=i._latLngToNewLayerPoint(a,t.zoom,t.center)._subtract(r),l=r._add(h._multiplyBy(.5*(1-1/o)));s.style[e.DomUtil.TRANSFORM]=e.DomUtil.getTranslateString(l)+" scale("+o+") "},_reset:function(){var t=this._image,i=this._map.latLngToLayerPoint(this._bounds.getNorthWest()),s=this._map.latLngToLayerPoint(this._bounds.getSouthEast())._subtract(i);e.DomUtil.setPosition(t,i),t.style.width=s.x+"px",t.style.height=s.y+"px"},_onImageLoad:function(){this.fire("load")},_updateOpacity:function(){e.DomUtil.setOpacity(this._image,this.options.opacity)}}),e.imageOverlay=function(t,i,s){return new e.ImageOverlay(t,i,s)},e.Icon=e.Class.extend({options:{className:""},initialize:function(t){e.setOptions(this,t)},createIcon:function(){return this._createIcon("icon")},createShadow:function(){return this._createIcon("shadow")},_createIcon:function(t){var i=this._getIconUrl(t);if(!i){if("icon"===t)throw Error("iconUrl not set in Icon options (see the docs).");return null}var s=this._createImg(i);return this._setIconStyles(s,t),s},_setIconStyles:function(t,i){var s,o=this.options,n=e.point(o[i+"Size"]);s="shadow"===i?e.point(o.shadowAnchor||o.iconAnchor):e.point(o.iconAnchor),!s&&n&&(s=n.divideBy(2,!0)),t.className="leaflet-marker-"+i+" "+o.className,s&&(t.style.marginLeft=-s.x+"px",t.style.marginTop=-s.y+"px"),n&&(t.style.width=n.x+"px",t.style.height=n.y+"px")},_createImg:function(t){var s;return e.Browser.ie6?(s=i.createElement("div"),s.style.filter='progid:DXImageTransform.Microsoft.AlphaImageLoader(src="'+t+'")'):(s=i.createElement("img"),s.src=t),s},_getIconUrl:function(t){return e.Browser.retina&&this.options[t+"RetinaUrl"]?this.options[t+"RetinaUrl"]:this.options[t+"Url"]}}),e.icon=function(t){return new e.Icon(t)},e.Icon.Default=e.Icon.extend({options:{iconSize:new e.Point(25,41),iconAnchor:new e.Point(12,41),popupAnchor:new e.Point(1,-34),shadowSize:new e.Point(41,41)},_getIconUrl:function(t){var i=t+"Url";if(this.options[i])return this.options[i];e.Browser.retina&&"icon"===t&&(t+="@2x");var s=e.Icon.Default.imagePath;if(!s)throw Error("Couldn't autodetect L.Icon.Default.imagePath, set it manually.");return"marker-"+t+".png"}}),e.Icon.Default.imagePath=function(){var t,s,e,o,n=i.getElementsByTagName("script"),a=/\/?leaflet[\-\._]?([\w\-\._]*)\.js\??/;for(t=0,s=n.length;s>t;t++)if(e=n[t].src,o=e.match(a))return e.split(a)[0]+""}(),e.Marker=e.Class.extend({includes:e.Mixin.Events,options:{icon:new e.Icon.Default,title:"",clickable:!0,draggable:!1,zIndexOffset:0,opacity:1,riseOnHover:!1,riseOffset:250},initialize:function(t,i){e.setOptions(this,i),this._latlng=e.latLng(t)},onAdd:function(t){this._map=t,t.on("viewreset",this.update,this),this._initIcon(),this.update(),t.options.zoomAnimation&&t.options.markerZoomAnimation&&t.on("zoomanim",this._animateZoom,this)},addTo:function(t){return t.addLayer(this),this},onRemove:function(t){this._removeIcon(),this.fire("remove"),t.off({viewreset:this.update,zoomanim:this._animateZoom},this),this._map=null},getLatLng:function(){return this._latlng},setLatLng:function(t){return this._latlng=e.latLng(t),this.update(),this.fire("move",{latlng:this._latlng})},setZIndexOffset:function(t){return this.options.zIndexOffset=t,this.update(),this},setIcon:function(t){return this._map&&this._removeIcon(),this.options.icon=t,this._map&&(this._initIcon(),this.update()),this},update:function(){if(this._icon){var t=this._map.latLngToLayerPoint(this._latlng).round();this._setPos(t)}return this},_initIcon:function(){var t=this.options,i=this._map,s=i.options.zoomAnimation&&i.options.markerZoomAnimation,o=s?"leaflet-zoom-animated":"leaflet-zoom-hide",n=!1;this._icon||(this._icon=t.icon.createIcon(),t.title&&(this._icon.title=t.title),this._initInteraction(),n=1>this.options.opacity,e.DomUtil.addClass(this._icon,o),t.riseOnHover&&e.DomEvent.on(this._icon,"mouseover",this._bringToFront,this).on(this._icon,"mouseout",this._resetZIndex,this)),this._shadow||(this._shadow=t.icon.createShadow(),this._shadow&&(e.DomUtil.addClass(this._shadow,o),n=1>this.options.opacity)),n&&this._updateOpacity();var a=this._map._panes;a.markerPane.appendChild(this._icon),this._shadow&&a.shadowPane.appendChild(this._shadow)},_removeIcon:function(){var t=this._map._panes;this.options.riseOnHover&&e.DomEvent.off(this._icon,"mouseover",this._bringToFront).off(this._icon,"mouseout",this._resetZIndex),t.markerPane.removeChild(this._icon),this._shadow&&t.shadowPane.removeChild(this._shadow),this._icon=this._shadow=null},_setPos:function(t){e.DomUtil.setPosition(this._icon,t),this._shadow&&e.DomUtil.setPosition(this._shadow,t),this._zIndex=t.y+this.options.zIndexOffset,this._resetZIndex()},_updateZIndex:function(t){this._icon.style.zIndex=this._zIndex+t},_animateZoom:function(t){var i=this._map._latLngToNewLayerPoint(this._latlng,t.zoom,t.center);this._setPos(i)},_initInteraction:function(){if(this.options.clickable){var t=this._icon,i=["dblclick","mousedown","mouseover","mouseout","contextmenu"];e.DomUtil.addClass(t,"leaflet-clickable"),e.DomEvent.on(t,"click",this._onMouseClick,this);for(var s=0;i.length>s;s++)e.DomEvent.on(t,i[s],this._fireMouseEvent,this);e.Handler.MarkerDrag&&(this.dragging=new e.Handler.MarkerDrag(this),this.options.draggable&&this.dragging.enable())}},_onMouseClick:function(t){var i=this.dragging&&this.dragging.moved();(this.hasEventListeners(t.type)||i)&&e.DomEvent.stopPropagation(t),i||(this.dragging&&this.dragging._enabled||!this._map.dragging||!this._map.dragging.moved())&&this.fire(t.type,{originalEvent:t})},_fireMouseEvent:function(t){this.fire(t.type,{originalEvent:t}),"contextmenu"===t.type&&this.hasEventListeners(t.type)&&e.DomEvent.preventDefault(t),"mousedown"!==t.type&&e.DomEvent.stopPropagation(t)},setOpacity:function(t){this.options.opacity=t,this._map&&this._updateOpacity()},_updateOpacity:function(){e.DomUtil.setOpacity(this._icon,this.options.opacity),this._shadow&&e.DomUtil.setOpacity(this._shadow,this.options.opacity)},_bringToFront:function(){this._updateZIndex(this.options.riseOffset)},_resetZIndex:function(){this._updateZIndex(0)}}),e.marker=function(t,i){return new e.Marker(t,i)},e.DivIcon=e.Icon.extend({options:{iconSize:new e.Point(12,12),className:"leaflet-div-icon"},createIcon:function(){var t=i.createElement("div"),s=this.options;return s.html&&(t.innerHTML=s.html),s.bgPos&&(t.style.backgroundPosition=-s.bgPos.x+"px "+-s.bgPos.y+"px"),this._setIconStyles(t,"icon"),t},createShadow:function(){return null}}),e.divIcon=function(t){return new e.DivIcon(t)},e.Map.mergeOptions({closePopupOnClick:!0}),e.Popup=e.Class.extend({includes:e.Mixin.Events,options:{minWidth:50,maxWidth:300,maxHeight:null,autoPan:!0,closeButton:!0,offset:new e.Point(0,6),autoPanPadding:new e.Point(5,5),className:"",zoomAnimation:!0},initialize:function(t,i){e.setOptions(this,t),this._source=i,this._animated=e.Browser.any3d&&this.options.zoomAnimation},onAdd:function(t){this._map=t,this._container||this._initLayout(),this._updateContent();var i=t.options.fadeAnimation;i&&e.DomUtil.setOpacity(this._container,0),t._panes.popupPane.appendChild(this._container),t.on("viewreset",this._updatePosition,this),this._animated&&t.on("zoomanim",this._zoomAnimation,this),t.options.closePopupOnClick&&t.on("preclick",this._close,this),this._update(),i&&e.DomUtil.setOpacity(this._container,1)},addTo:function(t){return t.addLayer(this),this},openOn:function(t){return t.openPopup(this),this},onRemove:function(t){t._panes.popupPane.removeChild(this._container),e.Util.falseFn(this._container.offsetWidth),t.off({viewreset:this._updatePosition,preclick:this._close,zoomanim:this._zoomAnimation},this),t.options.fadeAnimation&&e.DomUtil.setOpacity(this._container,0),this._map=null},setLatLng:function(t){return this._latlng=e.latLng(t),this._update(),this},setContent:function(t){return this._content=t,this._update(),this},_close:function(){var t=this._map;t&&(t._popup=null,t.removeLayer(this).fire("popupclose",{popup:this}))},_initLayout:function(){var t,i="leaflet-popup",s=i+" "+this.options.className+" leaflet-zoom-"+(this._animated?"animated":"hide"),o=this._container=e.DomUtil.create("div",s);this.options.closeButton&&(t=this._closeButton=e.DomUtil.create("a",i+"-close-button",o),t.href="#close",t.innerHTML="×",e.DomEvent.on(t,"click",this._onCloseButtonClick,this));var n=this._wrapper=e.DomUtil.create("div",i+"-content-wrapper",o);e.DomEvent.disableClickPropagation(n),this._contentNode=e.DomUtil.create("div",i+"-content",n),e.DomEvent.on(this._contentNode,"mousewheel",e.DomEvent.stopPropagation),this._tipContainer=e.DomUtil.create("div",i+"-tip-container",o),this._tip=e.DomUtil.create("div",i+"-tip",this._tipContainer)},_update:function(){this._map&&(this._container.style.visibility="hidden",this._updateContent(),this._updateLayout(),this._updatePosition(),this._container.style.visibility="",this._adjustPan())},_updateContent:function(){if(this._content){if("string"==typeof this._content)this._contentNode.innerHTML=this._content;else{for(;this._contentNode.hasChildNodes();)this._contentNode.removeChild(this._contentNode.firstChild);this._contentNode.appendChild(this._content)}this.fire("contentupdate")}},_updateLayout:function(){var t=this._contentNode,i=t.style;i.width="",i.whiteSpace="nowrap";var s=t.offsetWidth;s=Math.min(s,this.options.maxWidth),s=Math.max(s,this.options.minWidth),i.width=s+1+"px",i.whiteSpace="",i.height="";var o=t.offsetHeight,n=this.options.maxHeight,a="leaflet-popup-scrolled";n&&o>n?(i.height=n+"px",e.DomUtil.addClass(t,a)):e.DomUtil.removeClass(t,a),this._containerWidth=this._container.offsetWidth},_updatePosition:function(){if(this._map){var t=this._map.latLngToLayerPoint(this._latlng),i=this._animated,s=this.options.offset;i&&e.DomUtil.setPosition(this._container,t),this._containerBottom=-s.y-(i?0:t.y),this._containerLeft=-Math.round(this._containerWidth/2)+s.x+(i?0:t.x),this._container.style.bottom=this._containerBottom+"px",this._container.style.left=this._containerLeft+"px"}},_zoomAnimation:function(t){var i=this._map._latLngToNewLayerPoint(this._latlng,t.zoom,t.center);e.DomUtil.setPosition(this._container,i)},_adjustPan:function(){if(this.options.autoPan){var t=this._map,i=this._container.offsetHeight,s=this._containerWidth,o=new e.Point(this._containerLeft,-i-this._containerBottom);this._animated&&o._add(e.DomUtil.getPosition(this._container));var n=t.layerPointToContainerPoint(o),a=this.options.autoPanPadding,r=t.getSize(),h=0,l=0;0>n.x&&(h=n.x-a.x),n.x+s>r.x&&(h=n.x+s-r.x+a.x),0>n.y&&(l=n.y-a.y),n.y+i>r.y&&(l=n.y+i-r.y+a.y),(h||l)&&t.panBy(new e.Point(h,l))}},_onCloseButtonClick:function(t){this._close(),e.DomEvent.stop(t)}}),e.popup=function(t,i){return new e.Popup(t,i)},e.Marker.include({openPopup:function(){return this._popup&&this._map&&(this._popup.setLatLng(this._latlng),this._map.openPopup(this._popup)),this},closePopup:function(){return this._popup&&this._popup._close(),this},bindPopup:function(t,i){var s=e.point(this.options.icon.options.popupAnchor)||new e.Point(0,0);return s=s.add(e.Popup.prototype.options.offset),i&&i.offset&&(s=s.add(i.offset)),i=e.extend({offset:s},i),this._popup||this.on("click",this.openPopup,this).on("remove",this.closePopup,this).on("move",this._movePopup,this),this._popup=new e.Popup(i,this).setContent(t),this},unbindPopup:function(){return this._popup&&(this._popup=null,this.off("click",this.openPopup).off("remove",this.closePopup).off("move",this._movePopup)),this},_movePopup:function(t){this._popup.setLatLng(t.latlng)}}),e.Map.include({openPopup:function(t){return this.closePopup(),this._popup=t,this.addLayer(t).fire("popupopen",{popup:this._popup})},closePopup:function(){return this._popup&&this._popup._close(),this}}),e.LayerGroup=e.Class.extend({initialize:function(t){this._layers={};var i,s;if(t)for(i=0,s=t.length;s>i;i++)this.addLayer(t[i])},addLayer:function(t){var i=e.stamp(t);return this._layers[i]=t,this._map&&this._map.addLayer(t),this},removeLayer:function(t){var i=e.stamp(t);return delete this._layers[i],this._map&&this._map.removeLayer(t),this},clearLayers:function(){return this.eachLayer(this.removeLayer,this),this},invoke:function(t){var i,s,e=Array.prototype.slice.call(arguments,1);for(i in this._layers)this._layers.hasOwnProperty(i)&&(s=this._layers[i],s[t]&&s[t].apply(s,e));return this},onAdd:function(t){this._map=t,this.eachLayer(t.addLayer,t)},onRemove:function(t){this.eachLayer(t.removeLayer,t),this._map=null},addTo:function(t){return t.addLayer(this),this},eachLayer:function(t,i){for(var s in this._layers)this._layers.hasOwnProperty(s)&&t.call(i,this._layers[s])},setZIndex:function(t){return this.invoke("setZIndex",t)}}),e.layerGroup=function(t){return new e.LayerGroup(t)},e.FeatureGroup=e.LayerGroup.extend({includes:e.Mixin.Events,statics:{EVENTS:"click dblclick mouseover mouseout mousemove contextmenu"},addLayer:function(t){return this._layers[e.stamp(t)]?this:(t.on(e.FeatureGroup.EVENTS,this._propagateEvent,this),e.LayerGroup.prototype.addLayer.call(this,t),this._popupContent&&t.bindPopup&&t.bindPopup(this._popupContent,this._popupOptions),this.fire("layeradd",{layer:t}))},removeLayer:function(t){return t.off(e.FeatureGroup.EVENTS,this._propagateEvent,this),e.LayerGroup.prototype.removeLayer.call(this,t),this._popupContent&&this.invoke("unbindPopup"),this.fire("layerremove",{layer:t})},bindPopup:function(t,i){return this._popupContent=t,this._popupOptions=i,this.invoke("bindPopup",t,i)},setStyle:function(t){return this.invoke("setStyle",t)},bringToFront:function(){return this.invoke("bringToFront")},bringToBack:function(){return this.invoke("bringToBack")},getBounds:function(){var t=new e.LatLngBounds;return this.eachLayer(function(i){t.extend(i instanceof e.Marker?i.getLatLng():i.getBounds())}),t},_propagateEvent:function(t){t.layer=t.target,t.target=this,this.fire(t.type,t)}}),e.featureGroup=function(t){return new e.FeatureGroup(t)},e.Path=e.Class.extend({includes:[e.Mixin.Events],statics:{CLIP_PADDING:e.Browser.mobile?Math.max(0,Math.min(.5,(1280/Math.max(t.innerWidth,t.innerHeight)-1)/2)):.5},options:{stroke:!0,color:"#0033ff",dashArray:null,weight:5,opacity:.5,fill:!1,fillColor:null,fillOpacity:.2,clickable:!0},initialize:function(t){e.setOptions(this,t)},onAdd:function(t){this._map=t,this._container||(this._initElements(),this._initEvents()),this.projectLatlngs(),this._updatePath(),this._container&&this._map._pathRoot.appendChild(this._container),this.fire("add"),t.on({viewreset:this.projectLatlngs,moveend:this._updatePath},this)},addTo:function(t){return t.addLayer(this),this},onRemove:function(t){t._pathRoot.removeChild(this._container),this.fire("remove"),this._map=null,e.Browser.vml&&(this._container=null,this._stroke=null,this._fill=null),t.off({viewreset:this.projectLatlngs,moveend:this._updatePath},this)},projectLatlngs:function(){},setStyle:function(t){return e.setOptions(this,t),this._container&&this._updateStyle(),this},redraw:function(){return this._map&&(this.projectLatlngs(),this._updatePath()),this}}),e.Map.include({_updatePathViewport:function(){var t=e.Path.CLIP_PADDING,i=this.getSize(),s=e.DomUtil.getPosition(this._mapPane),o=s.multiplyBy(-1)._subtract(i.multiplyBy(t)._round()),n=o.add(i.multiplyBy(1+2*t)._round());this._pathViewport=new e.Bounds(o,n)}}),e.Path.SVG_NS="http://www.w3.org/2000/svg",e.Browser.svg=!(!i.createElementNS||!i.createElementNS(e.Path.SVG_NS,"svg").createSVGRect),e.Path=e.Path.extend({statics:{SVG:e.Browser.svg},bringToFront:function(){var t=this._map._pathRoot,i=this._container;return i&&t.lastChild!==i&&t.appendChild(i),this},bringToBack:function(){var t=this._map._pathRoot,i=this._container,s=t.firstChild;return i&&s!==i&&t.insertBefore(i,s),this},getPathString:function(){},_createElement:function(t){return i.createElementNS(e.Path.SVG_NS,t)},_initElements:function(){this._map._initPathRoot(),this._initPath(),this._initStyle()},_initPath:function(){this._container=this._createElement("g"),this._path=this._createElement("path"),this._container.appendChild(this._path)},_initStyle:function(){this.options.stroke&&(this._path.setAttribute("stroke-linejoin","round"),this._path.setAttribute("stroke-linecap","round")),this.options.fill&&this._path.setAttribute("fill-rule","evenodd"),this._updateStyle()},_updateStyle:function(){this.options.stroke?(this._path.setAttribute("stroke",this.options.color),this._path.setAttribute("stroke-opacity",this.options.opacity),this._path.setAttribute("stroke-width",this.options.weight),this.options.dashArray?this._path.setAttribute("stroke-dasharray",this.options.dashArray):this._path.removeAttribute("stroke-dasharray")):this._path.setAttribute("stroke","none"),this.options.fill?(this._path.setAttribute("fill",this.options.fillColor||this.options.color),this._path.setAttribute("fill-opacity",this.options.fillOpacity)):this._path.setAttribute("fill","none")},_updatePath:function(){var t=this.getPathString();t||(t="M0 0"),this._path.setAttribute("d",t)},_initEvents:function(){if(this.options.clickable){(e.Browser.svg||!e.Browser.vml)&&this._path.setAttribute("class","leaflet-clickable"),e.DomEvent.on(this._container,"click",this._onMouseClick,this);for(var t=["dblclick","mousedown","mouseover","mouseout","mousemove","contextmenu"],i=0;t.length>i;i++)e.DomEvent.on(this._container,t[i],this._fireMouseEvent,this)}},_onMouseClick:function(t){this._map.dragging&&this._map.dragging.moved()||this._fireMouseEvent(t)},_fireMouseEvent:function(t){if(this.hasEventListeners(t.type)){var i=this._map,s=i.mouseEventToContainerPoint(t),o=i.containerPointToLayerPoint(s),n=i.layerPointToLatLng(o);this.fire(t.type,{latlng:n,layerPoint:o,containerPoint:s,originalEvent:t}),"contextmenu"===t.type&&e.DomEvent.preventDefault(t),"mousemove"!==t.type&&e.DomEvent.stopPropagation(t)}}}),e.Map.include({_initPathRoot:function(){this._pathRoot||(this._pathRoot=e.Path.prototype._createElement("svg"),this._panes.overlayPane.appendChild(this._pathRoot),this.options.zoomAnimation&&e.Browser.any3d?(this._pathRoot.setAttribute("class"," leaflet-zoom-animated"),this.on({zoomanim:this._animatePathZoom,zoomend:this._endPathZoom})):this._pathRoot.setAttribute("class"," leaflet-zoom-hide"),this.on("moveend",this._updateSvgViewport),this._updateSvgViewport())},_animatePathZoom:function(t){var i=this.getZoomScale(t.zoom),s=this._getCenterOffset(t.center)._multiplyBy(-i)._add(this._pathViewport.min);this._pathRoot.style[e.DomUtil.TRANSFORM]=e.DomUtil.getTranslateString(s)+" scale("+i+") ",this._pathZooming=!0},_endPathZoom:function(){this._pathZooming=!1},_updateSvgViewport:function(){if(!this._pathZooming){this._updatePathViewport();var t=this._pathViewport,i=t.min,s=t.max,o=s.x-i.x,n=s.y-i.y,a=this._pathRoot,r=this._panes.overlayPane;e.Browser.mobileWebkit&&r.removeChild(a),e.DomUtil.setPosition(a,i),a.setAttribute("width",o),a.setAttribute("height",n),a.setAttribute("viewBox",[i.x,i.y,o,n].join(" ")),e.Browser.mobileWebkit&&r.appendChild(a)}}}),e.Path.include({bindPopup:function(t,i){return(!this._popup||i)&&(this._popup=new e.Popup(i,this)),this._popup.setContent(t),this._popupHandlersAdded||(this.on("click",this._openPopup,this).on("remove",this.closePopup,this),this._popupHandlersAdded=!0),this},unbindPopup:function(){return this._popup&&(this._popup=null,this.off("click",this._openPopup).off("remove",this.closePopup),this._popupHandlersAdded=!1),this},openPopup:function(t){return this._popup&&(t=t||this._latlng||this._latlngs[Math.floor(this._latlngs.length/2)],this._openPopup({latlng:t})),this},closePopup:function(){return this._popup&&this._popup._close(),this},_openPopup:function(t){this._popup.setLatLng(t.latlng),this._map.openPopup(this._popup)}}),e.Browser.vml=!e.Browser.svg&&function(){try{var t=i.createElement("div");t.innerHTML='';var s=t.firstChild;return s.style.behavior="url(#default#VML)",s&&"object"==typeof s.adj}catch(e){return!1}}(),e.Path=e.Browser.svg||!e.Browser.vml?e.Path:e.Path.extend({statics:{VML:!0,CLIP_PADDING:.02},_createElement:function(){try{return i.namespaces.add("lvml","urn:schemas-microsoft-com:vml"),function(t){return i.createElement("')}}catch(t){return function(t){return i.createElement("<"+t+' xmlns="urn:schemas-microsoft.com:vml" class="lvml">')}}}(),_initPath:function(){var t=this._container=this._createElement("shape");e.DomUtil.addClass(t,"leaflet-vml-shape"),this.options.clickable&&e.DomUtil.addClass(t,"leaflet-clickable"),t.coordsize="1 1",this._path=this._createElement("path"),t.appendChild(this._path),this._map._pathRoot.appendChild(t)},_initStyle:function(){this._updateStyle()},_updateStyle:function(){var t=this._stroke,i=this._fill,s=this.options,e=this._container;e.stroked=s.stroke,e.filled=s.fill,s.stroke?(t||(t=this._stroke=this._createElement("stroke"),t.endcap="round",e.appendChild(t)),t.weight=s.weight+"px",t.color=s.color,t.opacity=s.opacity,t.dashStyle=s.dashArray?s.dashArray instanceof Array?s.dashArray.join(" "):s.dashArray.replace(/ *, */g," "):""):t&&(e.removeChild(t),this._stroke=null),s.fill?(i||(i=this._fill=this._createElement("fill"),e.appendChild(i)),i.color=s.fillColor||s.color,i.opacity=s.fillOpacity):i&&(e.removeChild(i),this._fill=null)},_updatePath:function(){var t=this._container.style;t.display="none",this._path.v=this.getPathString()+" ",t.display=""}}),e.Map.include(e.Browser.svg||!e.Browser.vml?{}:{_initPathRoot:function(){if(!this._pathRoot){var t=this._pathRoot=i.createElement("div");t.className="leaflet-vml-container",this._panes.overlayPane.appendChild(t),this.on("moveend",this._updatePathViewport),this._updatePathViewport()}}}),e.Browser.canvas=function(){return!!i.createElement("canvas").getContext}(),e.Path=e.Path.SVG&&!t.L_PREFER_CANVAS||!e.Browser.canvas?e.Path:e.Path.extend({statics:{CANVAS:!0,SVG:!1},redraw:function(){return this._map&&(this.projectLatlngs(),this._requestUpdate()),this},setStyle:function(t){return e.setOptions(this,t),this._map&&(this._updateStyle(),this._requestUpdate()),this},onRemove:function(t){t.off("viewreset",this.projectLatlngs,this).off("moveend",this._updatePath,this),this.options.clickable&&this._map.off("click",this._onClick,this),this._requestUpdate(),this._map=null},_requestUpdate:function(){this._map&&!e.Path._updateRequest&&(e.Path._updateRequest=e.Util.requestAnimFrame(this._fireMapMoveEnd,this._map))},_fireMapMoveEnd:function(){e.Path._updateRequest=null,this.fire("moveend")},_initElements:function(){this._map._initPathRoot(),this._ctx=this._map._canvasCtx},_updateStyle:function(){var t=this.options;t.stroke&&(this._ctx.lineWidth=t.weight,this._ctx.strokeStyle=t.color),t.fill&&(this._ctx.fillStyle=t.fillColor||t.color)},_drawPath:function(){var t,i,s,o,n,a;for(this._ctx.beginPath(),t=0,s=this._parts.length;s>t;t++){for(i=0,o=this._parts[t].length;o>i;i++)n=this._parts[t][i],a=(0===i?"move":"line")+"To",this._ctx[a](n.x,n.y);this instanceof e.Polygon&&this._ctx.closePath()}},_checkIfEmpty:function(){return!this._parts.length},_updatePath:function(){if(!this._checkIfEmpty()){var t=this._ctx,i=this.options;this._drawPath(),t.save(),this._updateStyle(),i.fill&&(t.globalAlpha=i.fillOpacity,t.fill()),i.stroke&&(t.globalAlpha=i.opacity,t.stroke()),t.restore()}},_initEvents:function(){this.options.clickable&&this._map.on("click",this._onClick,this)},_onClick:function(t){this._containsPoint(t.layerPoint)&&this.fire("click",{latlng:t.latlng,layerPoint:t.layerPoint,containerPoint:t.containerPoint,originalEvent:t})}}),e.Map.include(e.Path.SVG&&!t.L_PREFER_CANVAS||!e.Browser.canvas?{}:{_initPathRoot:function(){var t,s=this._pathRoot;s||(s=this._pathRoot=i.createElement("canvas"),s.style.position="absolute",t=this._canvasCtx=s.getContext("2d"),t.lineCap="round",t.lineJoin="round",this._panes.overlayPane.appendChild(s),this.options.zoomAnimation&&(this._pathRoot.className="leaflet-zoom-animated",this.on("zoomanim",this._animatePathZoom),this.on("zoomend",this._endPathZoom)),this.on("moveend",this._updateCanvasViewport),this._updateCanvasViewport())},_updateCanvasViewport:function(){if(!this._pathZooming){this._updatePathViewport();var t=this._pathViewport,i=t.min,s=t.max.subtract(i),o=this._pathRoot;e.DomUtil.setPosition(o,i),o.width=s.x,o.height=s.y,o.getContext("2d").translate(-i.x,-i.y)}}}),e.LineUtil={simplify:function(t,i){if(!i||!t.length)return t.slice();var s=i*i;return t=this._reducePoints(t,s),t=this._simplifyDP(t,s)},pointToSegmentDistance:function(t,i,s){return Math.sqrt(this._sqClosestPointOnSegment(t,i,s,!0))},closestPointOnSegment:function(t,i,s){return this._sqClosestPointOnSegment(t,i,s)},_simplifyDP:function(t,i){var e=t.length,o=typeof Uint8Array!=s+""?Uint8Array:Array,n=new o(e);n[0]=n[e-1]=1,this._simplifyDPStep(t,n,i,0,e-1);var a,r=[];for(a=0;e>a;a++)n[a]&&r.push(t[a]);return r},_simplifyDPStep:function(t,i,s,e,o){var n,a,r,h=0;for(a=e+1;o-1>=a;a++)r=this._sqClosestPointOnSegment(t[a],t[e],t[o],!0),r>h&&(n=a,h=r);h>s&&(i[n]=1,this._simplifyDPStep(t,i,s,e,n),this._simplifyDPStep(t,i,s,n,o))},_reducePoints:function(t,i){for(var s=[t[0]],e=1,o=0,n=t.length;n>e;e++)this._sqDist(t[e],t[o])>i&&(s.push(t[e]),o=e);return n-1>o&&s.push(t[n-1]),s},clipSegment:function(t,i,s,e){var o,n,a,r=e?this._lastCode:this._getBitCode(t,s),h=this._getBitCode(i,s);for(this._lastCode=h;;){if(!(r|h))return[t,i];if(r&h)return!1;o=r||h,n=this._getEdgeIntersection(t,i,o,s),a=this._getBitCode(n,s),o===r?(t=n,r=a):(i=n,h=a)}},_getEdgeIntersection:function(t,i,o,n){var a=i.x-t.x,r=i.y-t.y,h=n.min,l=n.max;return 8&o?new e.Point(t.x+a*(l.y-t.y)/r,l.y):4&o?new e.Point(t.x+a*(h.y-t.y)/r,h.y):2&o?new e.Point(l.x,t.y+r*(l.x-t.x)/a):1&o?new e.Point(h.x,t.y+r*(h.x-t.x)/a):s},_getBitCode:function(t,i){var s=0;return t.xi.max.x&&(s|=2),t.yi.max.y&&(s|=8),s},_sqDist:function(t,i){var s=i.x-t.x,e=i.y-t.y;return s*s+e*e},_sqClosestPointOnSegment:function(t,i,s,o){var n,a=i.x,r=i.y,h=s.x-a,l=s.y-r,c=h*h+l*l;return c>0&&(n=((t.x-a)*h+(t.y-r)*l)/c, -n>1?(a=s.x,r=s.y):n>0&&(a+=h*n,r+=l*n)),h=t.x-a,l=t.y-r,o?h*h+l*l:new e.Point(a,r)}},e.Polyline=e.Path.extend({initialize:function(t,i){e.Path.prototype.initialize.call(this,i),this._latlngs=this._convertLatLngs(t)},options:{smoothFactor:1,noClip:!1},projectLatlngs:function(){this._originalPoints=[];for(var t=0,i=this._latlngs.length;i>t;t++)this._originalPoints[t]=this._map.latLngToLayerPoint(this._latlngs[t])},getPathString:function(){for(var t=0,i=this._parts.length,s="";i>t;t++)s+=this._getPathPartStr(this._parts[t]);return s},getLatLngs:function(){return this._latlngs},setLatLngs:function(t){return this._latlngs=this._convertLatLngs(t),this.redraw()},addLatLng:function(t){return this._latlngs.push(e.latLng(t)),this.redraw()},spliceLatLngs:function(){var t=[].splice.apply(this._latlngs,arguments);return this._convertLatLngs(this._latlngs),this.redraw(),t},closestLayerPoint:function(t){for(var i,s,o=1/0,n=this._parts,a=null,r=0,h=n.length;h>r;r++)for(var l=n[r],c=1,m=l.length;m>c;c++){i=l[c-1],s=l[c];var u=e.LineUtil._sqClosestPointOnSegment(t,i,s,!0);o>u&&(o=u,a=e.LineUtil._sqClosestPointOnSegment(t,i,s))}return a&&(a.distance=Math.sqrt(o)),a},getBounds:function(){var t,i,s=new e.LatLngBounds,o=this.getLatLngs();for(t=0,i=o.length;i>t;t++)s.extend(o[t]);return s},_convertLatLngs:function(t){var i,s;for(i=0,s=t.length;s>i;i++){if(e.Util.isArray(t[i])&&"number"!=typeof t[i][0])return;t[i]=e.latLng(t[i])}return t},_initEvents:function(){e.Path.prototype._initEvents.call(this)},_getPathPartStr:function(t){for(var i,s=e.Path.VML,o=0,n=t.length,a="";n>o;o++)i=t[o],s&&i._round(),a+=(o?"L":"M")+i.x+" "+i.y;return a},_clipPoints:function(){var t,i,o,n=this._originalPoints,a=n.length;if(this.options.noClip)return this._parts=[n],s;this._parts=[];var r=this._parts,h=this._map._pathViewport,l=e.LineUtil;for(t=0,i=0;a-1>t;t++)o=l.clipSegment(n[t],n[t+1],h,t),o&&(r[i]=r[i]||[],r[i].push(o[0]),(o[1]!==n[t+1]||t===a-2)&&(r[i].push(o[1]),i++))},_simplifyPoints:function(){for(var t=this._parts,i=e.LineUtil,s=0,o=t.length;o>s;s++)t[s]=i.simplify(t[s],this.options.smoothFactor)},_updatePath:function(){this._map&&(this._clipPoints(),this._simplifyPoints(),e.Path.prototype._updatePath.call(this))}}),e.polyline=function(t,i){return new e.Polyline(t,i)},e.PolyUtil={},e.PolyUtil.clipPolygon=function(t,i){var s,o,n,a,r,h,l,c,m,u=[1,4,2,8],d=e.LineUtil;for(o=0,l=t.length;l>o;o++)t[o]._code=d._getBitCode(t[o],i);for(a=0;4>a;a++){for(c=u[a],s=[],o=0,l=t.length,n=l-1;l>o;n=o++)r=t[o],h=t[n],r._code&c?h._code&c||(m=d._getEdgeIntersection(h,r,c,i),m._code=d._getBitCode(m,i),s.push(m)):(h._code&c&&(m=d._getEdgeIntersection(h,r,c,i),m._code=d._getBitCode(m,i),s.push(m)),s.push(r));t=s}return t},e.Polygon=e.Polyline.extend({options:{fill:!0},initialize:function(t,i){e.Polyline.prototype.initialize.call(this,t,i),t&&e.Util.isArray(t[0])&&"number"!=typeof t[0][0]&&(this._latlngs=this._convertLatLngs(t[0]),this._holes=t.slice(1))},projectLatlngs:function(){if(e.Polyline.prototype.projectLatlngs.call(this),this._holePoints=[],this._holes){var t,i,s,o;for(t=0,s=this._holes.length;s>t;t++)for(this._holePoints[t]=[],i=0,o=this._holes[t].length;o>i;i++)this._holePoints[t][i]=this._map.latLngToLayerPoint(this._holes[t][i])}},_clipPoints:function(){var t=this._originalPoints,i=[];if(this._parts=[t].concat(this._holePoints),!this.options.noClip){for(var s=0,o=this._parts.length;o>s;s++){var n=e.PolyUtil.clipPolygon(this._parts[s],this._map._pathViewport);n.length&&i.push(n)}this._parts=i}},_getPathPartStr:function(t){var i=e.Polyline.prototype._getPathPartStr.call(this,t);return i+(e.Browser.svg?"z":"x")}}),e.polygon=function(t,i){return new e.Polygon(t,i)},function(){function t(t){return e.FeatureGroup.extend({initialize:function(t,i){this._layers={},this._options=i,this.setLatLngs(t)},setLatLngs:function(i){var s=0,e=i.length;for(this.eachLayer(function(t){e>s?t.setLatLngs(i[s++]):this.removeLayer(t)},this);e>s;)this.addLayer(new t(i[s++],this._options));return this}})}e.MultiPolyline=t(e.Polyline),e.MultiPolygon=t(e.Polygon),e.multiPolyline=function(t,i){return new e.MultiPolyline(t,i)},e.multiPolygon=function(t,i){return new e.MultiPolygon(t,i)}}(),e.Rectangle=e.Polygon.extend({initialize:function(t,i){e.Polygon.prototype.initialize.call(this,this._boundsToLatLngs(t),i)},setBounds:function(t){this.setLatLngs(this._boundsToLatLngs(t))},_boundsToLatLngs:function(t){return t=e.latLngBounds(t),[t.getSouthWest(),t.getNorthWest(),t.getNorthEast(),t.getSouthEast()]}}),e.rectangle=function(t,i){return new e.Rectangle(t,i)},e.Circle=e.Path.extend({initialize:function(t,i,s){e.Path.prototype.initialize.call(this,s),this._latlng=e.latLng(t),this._mRadius=i},options:{fill:!0},setLatLng:function(t){return this._latlng=e.latLng(t),this.redraw()},setRadius:function(t){return this._mRadius=t,this.redraw()},projectLatlngs:function(){var t=this._getLngRadius(),i=new e.LatLng(this._latlng.lat,this._latlng.lng-t),s=this._map.latLngToLayerPoint(i);this._point=this._map.latLngToLayerPoint(this._latlng),this._radius=Math.max(Math.round(this._point.x-s.x),1)},getBounds:function(){var t=this._getLngRadius(),i=360*(this._mRadius/40075017),s=this._latlng,o=new e.LatLng(s.lat-i,s.lng-t),n=new e.LatLng(s.lat+i,s.lng+t);return new e.LatLngBounds(o,n)},getLatLng:function(){return this._latlng},getPathString:function(){var t=this._point,i=this._radius;return this._checkIfEmpty()?"":e.Browser.svg?"M"+t.x+","+(t.y-i)+"A"+i+","+i+",0,1,1,"+(t.x-.1)+","+(t.y-i)+" z":(t._round(),i=Math.round(i),"AL "+t.x+","+t.y+" "+i+","+i+" 0,"+23592600)},getRadius:function(){return this._mRadius},_getLatRadius:function(){return 360*(this._mRadius/40075017)},_getLngRadius:function(){return this._getLatRadius()/Math.cos(e.LatLng.DEG_TO_RAD*this._latlng.lat)},_checkIfEmpty:function(){if(!this._map)return!1;var t=this._map._pathViewport,i=this._radius,s=this._point;return s.x-i>t.max.x||s.y-i>t.max.y||s.x+is;s++)for(l=this._parts[s],o=0,r=l.length,n=r-1;r>o;n=o++)if((i||0!==o)&&(h=e.LineUtil.pointToSegmentDistance(t,l[n],l[o]),c>=h))return!0;return!1}}:{}),e.Polygon.include(e.Path.CANVAS?{_containsPoint:function(t){var i,s,o,n,a,r,h,l,c=!1;if(e.Polyline.prototype._containsPoint.call(this,t,!0))return!0;for(n=0,h=this._parts.length;h>n;n++)for(i=this._parts[n],a=0,l=i.length,r=l-1;l>a;r=a++)s=i[a],o=i[r],s.y>t.y!=o.y>t.y&&t.x<(o.x-s.x)*(t.y-s.y)/(o.y-s.y)+s.x&&(c=!c);return c}}:{}),e.Circle.include(e.Path.CANVAS?{_drawPath:function(){var t=this._point;this._ctx.beginPath(),this._ctx.arc(t.x,t.y,this._radius,0,2*Math.PI,!1)},_containsPoint:function(t){var i=this._point,s=this.options.stroke?this.options.weight/2:0;return t.distanceTo(i)<=this._radius+s}}:{}),e.GeoJSON=e.FeatureGroup.extend({initialize:function(t,i){e.setOptions(this,i),this._layers={},t&&this.addData(t)},addData:function(t){var i,s,o=e.Util.isArray(t)?t:t.features;if(o){for(i=0,s=o.length;s>i;i++)(o[i].geometries||o[i].geometry||o[i].features)&&this.addData(o[i]);return this}var n=this.options;if(!n.filter||n.filter(t)){var a=e.GeoJSON.geometryToLayer(t,n.pointToLayer);return a.feature=t,a.defaultOptions=a.options,this.resetStyle(a),n.onEachFeature&&n.onEachFeature(t,a),this.addLayer(a)}},resetStyle:function(t){var i=this.options.style;i&&(e.Util.extend(t.options,t.defaultOptions),this._setLayerStyle(t,i))},setStyle:function(t){this.eachLayer(function(i){this._setLayerStyle(i,t)},this)},_setLayerStyle:function(t,i){"function"==typeof i&&(i=i(t.feature)),t.setStyle&&t.setStyle(i)}}),e.extend(e.GeoJSON,{geometryToLayer:function(t,i){var s,o,n,a,r,h="Feature"===t.type?t.geometry:t,l=h.coordinates,c=[];switch(h.type){case"Point":return s=this.coordsToLatLng(l),i?i(t,s):new e.Marker(s);case"MultiPoint":for(n=0,a=l.length;a>n;n++)s=this.coordsToLatLng(l[n]),r=i?i(t,s):new e.Marker(s),c.push(r);return new e.FeatureGroup(c);case"LineString":return o=this.coordsToLatLngs(l),new e.Polyline(o);case"Polygon":return o=this.coordsToLatLngs(l,1),new e.Polygon(o);case"MultiLineString":return o=this.coordsToLatLngs(l,1),new e.MultiPolyline(o);case"MultiPolygon":return o=this.coordsToLatLngs(l,2),new e.MultiPolygon(o);case"GeometryCollection":for(n=0,a=h.geometries.length;a>n;n++)r=this.geometryToLayer({geometry:h.geometries[n],type:"Feature",properties:t.properties},i),c.push(r);return new e.FeatureGroup(c);default:throw Error("Invalid GeoJSON object.")}},coordsToLatLng:function(t,i){var s=parseFloat(t[i?0:1]),o=parseFloat(t[i?1:0]);return new e.LatLng(s,o)},coordsToLatLngs:function(t,i,s){var e,o,n,a=[];for(o=0,n=t.length;n>o;o++)e=i?this.coordsToLatLngs(t[o],i-1,s):this.coordsToLatLng(t[o],s),a.push(e);return a}}),e.geoJson=function(t,i){return new e.GeoJSON(t,i)},e.DomEvent={addListener:function(t,i,o,n){var a,r,h,l=e.stamp(o),c="_leaflet_"+i+l;return t[c]?this:(a=function(i){return o.call(n||t,i||e.DomEvent._getEvent())},e.Browser.msTouch&&0===i.indexOf("touch")?this.addMsTouchListener(t,i,a,l):(e.Browser.touch&&"dblclick"===i&&this.addDoubleTapListener&&this.addDoubleTapListener(t,a,l),"addEventListener"in t?"mousewheel"===i?(t.addEventListener("DOMMouseScroll",a,!1),t.addEventListener(i,a,!1)):"mouseenter"===i||"mouseleave"===i?(r=a,h="mouseenter"===i?"mouseover":"mouseout",a=function(i){return e.DomEvent._checkMouse(t,i)?r(i):s},t.addEventListener(h,a,!1)):t.addEventListener(i,a,!1):"attachEvent"in t&&t.attachEvent("on"+i,a),t[c]=a,this))},removeListener:function(t,i,s){var o=e.stamp(s),n="_leaflet_"+i+o,a=t[n];if(a)return e.Browser.msTouch&&0===i.indexOf("touch")?this.removeMsTouchListener(t,i,o):e.Browser.touch&&"dblclick"===i&&this.removeDoubleTapListener?this.removeDoubleTapListener(t,o):"removeEventListener"in t?"mousewheel"===i?(t.removeEventListener("DOMMouseScroll",a,!1),t.removeEventListener(i,a,!1)):"mouseenter"===i||"mouseleave"===i?t.removeEventListener("mouseenter"===i?"mouseover":"mouseout",a,!1):t.removeEventListener(i,a,!1):"detachEvent"in t&&t.detachEvent("on"+i,a),t[n]=null,this},stopPropagation:function(t){return t.stopPropagation?t.stopPropagation():t.cancelBubble=!0,this},disableClickPropagation:function(t){for(var i=e.DomEvent.stopPropagation,s=e.Draggable.START.length-1;s>=0;s--)e.DomEvent.addListener(t,e.Draggable.START[s],i);return e.DomEvent.addListener(t,"click",i).addListener(t,"dblclick",i)},preventDefault:function(t){return t.preventDefault?t.preventDefault():t.returnValue=!1,this},stop:function(t){return e.DomEvent.preventDefault(t).stopPropagation(t)},getMousePosition:function(t,s){var o=i.body,n=i.documentElement,a=t.pageX?t.pageX:t.clientX+o.scrollLeft+n.scrollLeft,r=t.pageY?t.pageY:t.clientY+o.scrollTop+n.scrollTop,h=new e.Point(a,r);return s?h._subtract(e.DomUtil.getViewportOffset(s)):h},getWheelDelta:function(t){var i=0;return t.wheelDelta&&(i=t.wheelDelta/120),t.detail&&(i=-t.detail/3),i},_checkMouse:function(t,i){var s=i.relatedTarget;if(!s)return!0;try{for(;s&&s!==t;)s=s.parentNode}catch(e){return!1}return s!==t},_getEvent:function(){var i=t.event;if(!i)for(var s=arguments.callee.caller;s&&(i=s.arguments[0],!i||t.Event!==i.constructor);)s=s.caller;return i}},e.DomEvent.on=e.DomEvent.addListener,e.DomEvent.off=e.DomEvent.removeListener,e.Draggable=e.Class.extend({includes:e.Mixin.Events,statics:{START:e.Browser.touch?["touchstart","mousedown"]:["mousedown"],END:{mousedown:"mouseup",touchstart:"touchend",MSPointerDown:"touchend"},MOVE:{mousedown:"mousemove",touchstart:"touchmove",MSPointerDown:"touchmove"},TAP_TOLERANCE:15},initialize:function(t,i,s){this._element=t,this._dragStartTarget=i||t,this._longPress=s&&!e.Browser.msTouch},enable:function(){if(!this._enabled){for(var t=e.Draggable.START.length-1;t>=0;t--)e.DomEvent.on(this._dragStartTarget,e.Draggable.START[t],this._onDown,this);this._enabled=!0}},disable:function(){if(this._enabled){for(var t=e.Draggable.START.length-1;t>=0;t--)e.DomEvent.off(this._dragStartTarget,e.Draggable.START[t],this._onDown,this);this._enabled=!1,this._moved=!1}},_onDown:function(t){if(!(!e.Browser.touch&&t.shiftKey||1!==t.which&&1!==t.button&&!t.touches||(e.DomEvent.preventDefault(t),e.DomEvent.stopPropagation(t),e.Draggable._disabled))){if(this._simulateClick=!0,t.touches&&t.touches.length>1)return this._simulateClick=!1,clearTimeout(this._longPressTimeout),s;var o=t.touches&&1===t.touches.length?t.touches[0]:t,n=o.target;e.Browser.touch&&"a"===n.tagName.toLowerCase()&&e.DomUtil.addClass(n,"leaflet-active"),this._moved=!1,this._moving||(this._startPoint=new e.Point(o.clientX,o.clientY),this._startPos=this._newPos=e.DomUtil.getPosition(this._element),t.touches&&1===t.touches.length&&e.Browser.touch&&this._longPress&&(this._longPressTimeout=setTimeout(e.bind(function(){var t=this._newPos&&this._newPos.distanceTo(this._startPos)||0;e.Draggable.TAP_TOLERANCE>t&&(this._simulateClick=!1,this._onUp(),this._simulateEvent("contextmenu",o))},this),1e3)),e.DomEvent.on(i,e.Draggable.MOVE[t.type],this._onMove,this),e.DomEvent.on(i,e.Draggable.END[t.type],this._onUp,this))}},_onMove:function(t){if(!(t.touches&&t.touches.length>1)){var i=t.touches&&1===t.touches.length?t.touches[0]:t,s=new e.Point(i.clientX,i.clientY),o=s.subtract(this._startPoint);(o.x||o.y)&&(e.DomEvent.preventDefault(t),this._moved||(this.fire("dragstart"),this._moved=!0,this._startPos=e.DomUtil.getPosition(this._element).subtract(o),e.Browser.touch||(e.DomUtil.disableTextSelection(),this._setMovingCursor())),this._newPos=this._startPos.add(o),this._moving=!0,e.Util.cancelAnimFrame(this._animRequest),this._animRequest=e.Util.requestAnimFrame(this._updatePosition,this,!0,this._dragStartTarget))}},_updatePosition:function(){this.fire("predrag"),e.DomUtil.setPosition(this._element,this._newPos),this.fire("drag")},_onUp:function(t){var s;if(clearTimeout(this._longPressTimeout),this._simulateClick&&t.changedTouches){var o=t.changedTouches[0],n=o.target,a=this._newPos&&this._newPos.distanceTo(this._startPos)||0;"a"===n.tagName.toLowerCase()&&e.DomUtil.removeClass(n,"leaflet-active"),e.Draggable.TAP_TOLERANCE>a&&(s=o)}e.Browser.touch||(e.DomUtil.enableTextSelection(),this._restoreCursor());for(var r in e.Draggable.MOVE)e.Draggable.MOVE.hasOwnProperty(r)&&(e.DomEvent.off(i,e.Draggable.MOVE[r],this._onMove),e.DomEvent.off(i,e.Draggable.END[r],this._onUp));this._moved&&(e.Util.cancelAnimFrame(this._animRequest),this.fire("dragend")),this._moving=!1,s&&(this._moved=!1,this._simulateEvent("click",s))},_setMovingCursor:function(){e.DomUtil.addClass(i.body,"leaflet-dragging")},_restoreCursor:function(){e.DomUtil.removeClass(i.body,"leaflet-dragging")},_simulateEvent:function(s,e){var o=i.createEvent("MouseEvents");o.initMouseEvent(s,!0,!0,t,1,e.screenX,e.screenY,e.clientX,e.clientY,!1,!1,!1,!1,0,null),e.target.dispatchEvent(o)}}),e.Handler=e.Class.extend({initialize:function(t){this._map=t},enable:function(){this._enabled||(this._enabled=!0,this.addHooks())},disable:function(){this._enabled&&(this._enabled=!1,this.removeHooks())},enabled:function(){return!!this._enabled}}),e.Map.mergeOptions({dragging:!0,inertia:!e.Browser.android23,inertiaDeceleration:3400,inertiaMaxSpeed:1/0,inertiaThreshold:e.Browser.touch?32:18,easeLinearity:.25,longPress:!0,worldCopyJump:!1}),e.Map.Drag=e.Handler.extend({addHooks:function(){if(!this._draggable){var t=this._map;this._draggable=new e.Draggable(t._mapPane,t._container,t.options.longPress),this._draggable.on({dragstart:this._onDragStart,drag:this._onDrag,dragend:this._onDragEnd},this),t.options.worldCopyJump&&(this._draggable.on("predrag",this._onPreDrag,this),t.on("viewreset",this._onViewReset,this))}this._draggable.enable()},removeHooks:function(){this._draggable.disable()},moved:function(){return this._draggable&&this._draggable._moved},_onDragStart:function(){var t=this._map;t._panAnim&&t._panAnim.stop(),t.fire("movestart").fire("dragstart"),t.options.inertia&&(this._positions=[],this._times=[])},_onDrag:function(){if(this._map.options.inertia){var t=this._lastTime=+new Date,i=this._lastPos=this._draggable._newPos;this._positions.push(i),this._times.push(t),t-this._times[0]>200&&(this._positions.shift(),this._times.shift())}this._map.fire("move").fire("drag")},_onViewReset:function(){var t=this._map.getSize()._divideBy(2),i=this._map.latLngToLayerPoint(new e.LatLng(0,0));this._initialWorldOffset=i.subtract(t).x,this._worldWidth=this._map.project(new e.LatLng(0,180)).x},_onPreDrag:function(){var t=this._worldWidth,i=Math.round(t/2),s=this._initialWorldOffset,e=this._draggable._newPos.x,o=(e-i+s)%t+i-s,n=(e+i+s)%t-i-s,a=Math.abs(o+s)i.inertiaThreshold||!this._positions[0];if(o)t.fire("moveend");else{var n=this._lastPos.subtract(this._positions[0]),a=(this._lastTime+s-this._times[0])/1e3,r=i.easeLinearity,h=n.multiplyBy(r/a),l=h.distanceTo(new e.Point(0,0)),c=Math.min(i.inertiaMaxSpeed,l),m=h.multiplyBy(c/l),u=c/(i.inertiaDeceleration*r),d=m.multiplyBy(-u/2).round();e.Util.requestAnimFrame(function(){t.panBy(d,u,r)})}t.fire("dragend"),i.maxBounds&&e.Util.requestAnimFrame(this._panInsideMaxBounds,t,!0,t._container)},_panInsideMaxBounds:function(){this.panInsideBounds(this.options.maxBounds)}}),e.Map.addInitHook("addHandler","dragging",e.Map.Drag),e.Map.mergeOptions({doubleClickZoom:!0}),e.Map.DoubleClickZoom=e.Handler.extend({addHooks:function(){this._map.on("dblclick",this._onDoubleClick)},removeHooks:function(){this._map.off("dblclick",this._onDoubleClick)},_onDoubleClick:function(t){this.setView(t.latlng,this._zoom+1)}}),e.Map.addInitHook("addHandler","doubleClickZoom",e.Map.DoubleClickZoom),e.Map.mergeOptions({scrollWheelZoom:!0}),e.Map.ScrollWheelZoom=e.Handler.extend({addHooks:function(){e.DomEvent.on(this._map._container,"mousewheel",this._onWheelScroll,this),this._delta=0},removeHooks:function(){e.DomEvent.off(this._map._container,"mousewheel",this._onWheelScroll)},_onWheelScroll:function(t){var i=e.DomEvent.getWheelDelta(t);this._delta+=i,this._lastMousePos=this._map.mouseEventToContainerPoint(t),this._startTime||(this._startTime=+new Date);var s=Math.max(40-(+new Date-this._startTime),0);clearTimeout(this._timer),this._timer=setTimeout(e.bind(this._performZoom,this),s),e.DomEvent.preventDefault(t),e.DomEvent.stopPropagation(t)},_performZoom:function(){var t=this._map,i=this._delta,s=t.getZoom();if(i=i>0?Math.ceil(i):Math.round(i),i=Math.max(Math.min(i,4),-4),i=t._limitZoom(s+i)-s,this._delta=0,this._startTime=null,i){var e=s+i,o=this._getCenterForScrollWheelZoom(e);t.setView(o,e)}},_getCenterForScrollWheelZoom:function(t){var i=this._map,s=i.getZoomScale(t),e=i.getSize()._divideBy(2),o=this._lastMousePos._subtract(e)._multiplyBy(1-1/s),n=i._getTopLeftPoint()._add(e)._add(o);return i.unproject(n)}}),e.Map.addInitHook("addHandler","scrollWheelZoom",e.Map.ScrollWheelZoom),e.extend(e.DomEvent,{_touchstart:e.Browser.msTouch?"MSPointerDown":"touchstart",_touchend:e.Browser.msTouch?"MSPointerUp":"touchend",addDoubleTapListener:function(t,s,o){function n(t){var i;if(e.Browser.msTouch?(p.push(t.pointerId),i=p.length):i=t.touches.length,!(i>1)){var s=Date.now(),o=s-(r||s);h=t.touches?t.touches[0]:t,l=o>0&&c>=o,r=s}}function a(t){if(e.Browser.msTouch){var i=p.indexOf(t.pointerId);if(-1===i)return;p.splice(i,1)}if(l){if(e.Browser.msTouch){var o,n={};for(var a in h)o=h[a],n[a]="function"==typeof o?o.bind(h):o;h=n}h.type="dblclick",s(h),r=null}}var r,h,l=!1,c=250,m="_leaflet_",u=this._touchstart,d=this._touchend,p=[];t[m+u+o]=n,t[m+d+o]=a;var _=e.Browser.msTouch?i.documentElement:t;return t.addEventListener(u,n,!1),_.addEventListener(d,a,!1),e.Browser.msTouch&&_.addEventListener("MSPointerCancel",a,!1),this},removeDoubleTapListener:function(t,s){var o="_leaflet_";return t.removeEventListener(this._touchstart,t[o+this._touchstart+s],!1),(e.Browser.msTouch?i.documentElement:t).removeEventListener(this._touchend,t[o+this._touchend+s],!1),e.Browser.msTouch&&i.documentElement.removeEventListener("MSPointerCancel",t[o+this._touchend+s],!1),this}}),e.extend(e.DomEvent,{_msTouches:[],_msDocumentListener:!1,addMsTouchListener:function(t,i,s,e){switch(i){case"touchstart":return this.addMsTouchListenerStart(t,i,s,e);case"touchend":return this.addMsTouchListenerEnd(t,i,s,e);case"touchmove":return this.addMsTouchListenerMove(t,i,s,e);default:throw"Unknown touch event type"}},addMsTouchListenerStart:function(t,s,e,o){var n="_leaflet_",a=this._msTouches,r=function(t){for(var i=!1,s=0;a.length>s;s++)if(a[s].pointerId===t.pointerId){i=!0;break}i||a.push(t),t.touches=a.slice(),t.changedTouches=[t],e(t)};if(t[n+"touchstart"+o]=r,t.addEventListener("MSPointerDown",r,!1),!this._msDocumentListener){var h=function(t){for(var i=0;a.length>i;i++)if(a[i].pointerId===t.pointerId){a.splice(i,1);break}};i.documentElement.addEventListener("MSPointerUp",h,!1),i.documentElement.addEventListener("MSPointerCancel",h,!1),this._msDocumentListener=!0}return this},addMsTouchListenerMove:function(t,i,s,e){function o(t){if(t.pointerType!==t.MSPOINTER_TYPE_MOUSE||0!==t.buttons){for(var i=0;a.length>i;i++)if(a[i].pointerId===t.pointerId){a[i]=t;break}t.touches=a.slice(),t.changedTouches=[t],s(t)}}var n="_leaflet_",a=this._msTouches;return t[n+"touchmove"+e]=o,t.addEventListener("MSPointerMove",o,!1),this},addMsTouchListenerEnd:function(t,i,s,e){var o="_leaflet_",n=this._msTouches,a=function(t){for(var i=0;n.length>i;i++)if(n[i].pointerId===t.pointerId){n.splice(i,1);break}t.touches=n.slice(),t.changedTouches=[t],s(t)};return t[o+"touchend"+e]=a,t.addEventListener("MSPointerUp",a,!1),t.addEventListener("MSPointerCancel",a,!1),this},removeMsTouchListener:function(t,i,s){var e="_leaflet_",o=t[e+i+s];switch(i){case"touchstart":t.removeEventListener("MSPointerDown",o,!1);break;case"touchmove":t.removeEventListener("MSPointerMove",o,!1);break;case"touchend":t.removeEventListener("MSPointerUp",o,!1),t.removeEventListener("MSPointerCancel",o,!1)}return this}}),e.Map.mergeOptions({touchZoom:e.Browser.touch&&!e.Browser.android23}),e.Map.TouchZoom=e.Handler.extend({addHooks:function(){e.DomEvent.on(this._map._container,"touchstart",this._onTouchStart,this)},removeHooks:function(){e.DomEvent.off(this._map._container,"touchstart",this._onTouchStart,this)},_onTouchStart:function(t){var s=this._map;if(t.touches&&2===t.touches.length&&!s._animatingZoom&&!this._zooming){var o=s.mouseEventToLayerPoint(t.touches[0]),n=s.mouseEventToLayerPoint(t.touches[1]),a=s._getCenterLayerPoint();this._startCenter=o.add(n)._divideBy(2),this._startDist=o.distanceTo(n),this._moved=!1,this._zooming=!0,this._centerOffset=a.subtract(this._startCenter),s._panAnim&&s._panAnim.stop(),e.DomEvent.on(i,"touchmove",this._onTouchMove,this).on(i,"touchend",this._onTouchEnd,this),e.DomEvent.preventDefault(t)}},_onTouchMove:function(t){if(t.touches&&2===t.touches.length){var i=this._map,s=i.mouseEventToLayerPoint(t.touches[0]),o=i.mouseEventToLayerPoint(t.touches[1]);this._scale=s.distanceTo(o)/this._startDist,this._delta=s._add(o)._divideBy(2)._subtract(this._startCenter),1!==this._scale&&(this._moved||(e.DomUtil.addClass(i._mapPane,"leaflet-zoom-anim leaflet-touching"),i.fire("movestart").fire("zoomstart")._prepareTileBg(),this._moved=!0),e.Util.cancelAnimFrame(this._animRequest),this._animRequest=e.Util.requestAnimFrame(this._updateOnMove,this,!0,this._map._container),e.DomEvent.preventDefault(t))}},_updateOnMove:function(){var t=this._map,i=this._getScaleOrigin(),s=t.layerPointToLatLng(i);t.fire("zoomanim",{center:s,zoom:t.getScaleZoom(this._scale)}),t._tileBg.style[e.DomUtil.TRANSFORM]=e.DomUtil.getTranslateString(this._delta)+" "+e.DomUtil.getScaleString(this._scale,this._startCenter)},_onTouchEnd:function(){if(this._moved&&this._zooming){var t=this._map;this._zooming=!1,e.DomUtil.removeClass(t._mapPane,"leaflet-touching"),e.DomEvent.off(i,"touchmove",this._onTouchMove).off(i,"touchend",this._onTouchEnd);var s=this._getScaleOrigin(),o=t.layerPointToLatLng(s),n=t.getZoom(),a=t.getScaleZoom(this._scale)-n,r=a>0?Math.ceil(a):Math.floor(a),h=t._limitZoom(n+r);t.fire("zoomanim",{center:o,zoom:h}),t._runAnimation(o,h,t.getZoomScale(h)/this._scale,s,!0)}},_getScaleOrigin:function(){var t=this._centerOffset.subtract(this._delta).divideBy(this._scale);return this._startCenter.add(t)}}),e.Map.addInitHook("addHandler","touchZoom",e.Map.TouchZoom),e.Map.mergeOptions({boxZoom:!0}),e.Map.BoxZoom=e.Handler.extend({initialize:function(t){this._map=t,this._container=t._container,this._pane=t._panes.overlayPane},addHooks:function(){e.DomEvent.on(this._container,"mousedown",this._onMouseDown,this)},removeHooks:function(){e.DomEvent.off(this._container,"mousedown",this._onMouseDown)},_onMouseDown:function(t){return!t.shiftKey||1!==t.which&&1!==t.button?!1:(e.DomUtil.disableTextSelection(),this._startLayerPoint=this._map.mouseEventToLayerPoint(t),this._box=e.DomUtil.create("div","leaflet-zoom-box",this._pane),e.DomUtil.setPosition(this._box,this._startLayerPoint),this._container.style.cursor="crosshair",e.DomEvent.on(i,"mousemove",this._onMouseMove,this).on(i,"mouseup",this._onMouseUp,this).preventDefault(t),this._map.fire("boxzoomstart"),s)},_onMouseMove:function(t){var i=this._startLayerPoint,s=this._box,o=this._map.mouseEventToLayerPoint(t),n=o.subtract(i),a=new e.Point(Math.min(o.x,i.x),Math.min(o.y,i.y));e.DomUtil.setPosition(s,a),s.style.width=Math.max(0,Math.abs(n.x)-4)+"px",s.style.height=Math.max(0,Math.abs(n.y)-4)+"px"},_onMouseUp:function(t){this._pane.removeChild(this._box),this._container.style.cursor="",e.DomUtil.enableTextSelection(),e.DomEvent.off(i,"mousemove",this._onMouseMove).off(i,"mouseup",this._onMouseUp);var s=this._map,o=s.mouseEventToLayerPoint(t);if(!this._startLayerPoint.equals(o)){var n=new e.LatLngBounds(s.layerPointToLatLng(this._startLayerPoint),s.layerPointToLatLng(o));s.fitBounds(n),s.fire("boxzoomend",{boxZoomBounds:n})}}}),e.Map.addInitHook("addHandler","boxZoom",e.Map.BoxZoom),e.Map.mergeOptions({keyboard:!0,keyboardPanOffset:80,keyboardZoomOffset:1}),e.Map.Keyboard=e.Handler.extend({keyCodes:{left:[37],right:[39],down:[40],up:[38],zoomIn:[187,107,61],zoomOut:[189,109,173]},initialize:function(t){this._map=t,this._setPanOffset(t.options.keyboardPanOffset),this._setZoomOffset(t.options.keyboardZoomOffset)},addHooks:function(){var t=this._map._container;-1===t.tabIndex&&(t.tabIndex="0"),e.DomEvent.on(t,"focus",this._onFocus,this).on(t,"blur",this._onBlur,this).on(t,"mousedown",this._onMouseDown,this),this._map.on("focus",this._addHooks,this).on("blur",this._removeHooks,this)},removeHooks:function(){this._removeHooks();var t=this._map._container;e.DomEvent.off(t,"focus",this._onFocus,this).off(t,"blur",this._onBlur,this).off(t,"mousedown",this._onMouseDown,this),this._map.off("focus",this._addHooks,this).off("blur",this._removeHooks,this)},_onMouseDown:function(){this._focused||this._map._container.focus()},_onFocus:function(){this._focused=!0,this._map.fire("focus")},_onBlur:function(){this._focused=!1,this._map.fire("blur")},_setPanOffset:function(t){var i,s,e=this._panKeys={},o=this.keyCodes;for(i=0,s=o.left.length;s>i;i++)e[o.left[i]]=[-1*t,0];for(i=0,s=o.right.length;s>i;i++)e[o.right[i]]=[t,0];for(i=0,s=o.down.length;s>i;i++)e[o.down[i]]=[0,t];for(i=0,s=o.up.length;s>i;i++)e[o.up[i]]=[0,-1*t]},_setZoomOffset:function(t){var i,s,e=this._zoomKeys={},o=this.keyCodes;for(i=0,s=o.zoomIn.length;s>i;i++)e[o.zoomIn[i]]=t;for(i=0,s=o.zoomOut.length;s>i;i++)e[o.zoomOut[i]]=-t},_addHooks:function(){e.DomEvent.on(i,"keydown",this._onKeyDown,this)},_removeHooks:function(){e.DomEvent.off(i,"keydown",this._onKeyDown,this)},_onKeyDown:function(t){var i=t.keyCode,s=this._map;if(this._panKeys.hasOwnProperty(i))s.panBy(this._panKeys[i]),s.options.maxBounds&&s.panInsideBounds(s.options.maxBounds);else{if(!this._zoomKeys.hasOwnProperty(i))return;s.setZoom(s.getZoom()+this._zoomKeys[i])}e.DomEvent.stop(t)}}),e.Map.addInitHook("addHandler","keyboard",e.Map.Keyboard),e.Handler.MarkerDrag=e.Handler.extend({initialize:function(t){this._marker=t},addHooks:function(){var t=this._marker._icon;this._draggable||(this._draggable=new e.Draggable(t,t).on("dragstart",this._onDragStart,this).on("drag",this._onDrag,this).on("dragend",this._onDragEnd,this)),this._draggable.enable()},removeHooks:function(){this._draggable.disable()},moved:function(){return this._draggable&&this._draggable._moved},_onDragStart:function(){this._marker.closePopup().fire("movestart").fire("dragstart")},_onDrag:function(){var t=this._marker,i=t._shadow,s=e.DomUtil.getPosition(t._icon),o=t._map.layerPointToLatLng(s);i&&e.DomUtil.setPosition(i,s),t._latlng=o,t.fire("move",{latlng:o}).fire("drag")},_onDragEnd:function(){this._marker.fire("moveend").fire("dragend")}}),e.Handler.PolyEdit=e.Handler.extend({options:{icon:new e.DivIcon({iconSize:new e.Point(8,8),className:"leaflet-div-icon leaflet-editing-icon"})},initialize:function(t,i){this._poly=t,e.setOptions(this,i)},addHooks:function(){this._poly._map&&(this._markerGroup||this._initMarkers(),this._poly._map.addLayer(this._markerGroup))},removeHooks:function(){this._poly._map&&(this._poly._map.removeLayer(this._markerGroup),delete this._markerGroup,delete this._markers)},updateMarkers:function(){this._markerGroup.clearLayers(),this._initMarkers()},_initMarkers:function(){this._markerGroup||(this._markerGroup=new e.LayerGroup),this._markers=[];var t,i,s,o,n=this._poly._latlngs;for(t=0,s=n.length;s>t;t++)o=this._createMarker(n[t],t),o.on("click",this._onMarkerClick,this),this._markers.push(o);var a,r;for(t=0,i=s-1;s>t;i=t++)(0!==t||e.Polygon&&this._poly instanceof e.Polygon)&&(a=this._markers[i],r=this._markers[t],this._createMiddleMarker(a,r),this._updatePrevNext(a,r))},_createMarker:function(t,i){var s=new e.Marker(t,{draggable:!0,icon:this.options.icon});return s._origLatLng=t,s._index=i,s.on("drag",this._onMarkerDrag,this),s.on("dragend",this._fireEdit,this),this._markerGroup.addLayer(s),s},_fireEdit:function(){this._poly.fire("edit")},_onMarkerDrag:function(t){var i=t.target;e.extend(i._origLatLng,i._latlng),i._middleLeft&&i._middleLeft.setLatLng(this._getMiddleLatLng(i._prev,i)),i._middleRight&&i._middleRight.setLatLng(this._getMiddleLatLng(i,i._next)),this._poly.redraw()},_onMarkerClick:function(t){if(!(3>this._poly._latlngs.length)){var i=t.target,s=i._index;this._markerGroup.removeLayer(i),this._markers.splice(s,1),this._poly.spliceLatLngs(s,1),this._updateIndexes(s,-1),this._updatePrevNext(i._prev,i._next),i._middleLeft&&this._markerGroup.removeLayer(i._middleLeft),i._middleRight&&this._markerGroup.removeLayer(i._middleRight),i._prev&&i._next?this._createMiddleMarker(i._prev,i._next):i._prev?i._next||(i._prev._middleRight=null):i._next._middleLeft=null,this._poly.fire("edit")}},_updateIndexes:function(t,i){this._markerGroup.eachLayer(function(s){s._index>t&&(s._index+=i)})},_createMiddleMarker:function(t,i){var s,e,o,n=this._getMiddleLatLng(t,i),a=this._createMarker(n);a.setOpacity(.6),t._middleRight=i._middleLeft=a,e=function(){var e=i._index;a._index=e,a.off("click",s).on("click",this._onMarkerClick,this),n.lat=a.getLatLng().lat,n.lng=a.getLatLng().lng,this._poly.spliceLatLngs(e,0,n),this._markers.splice(e,0,a),a.setOpacity(1),this._updateIndexes(e,1),i._index++,this._updatePrevNext(t,a),this._updatePrevNext(a,i)},o=function(){a.off("dragstart",e,this),a.off("dragend",o,this), -this._createMiddleMarker(t,a),this._createMiddleMarker(a,i)},s=function(){e.call(this),o.call(this),this._poly.fire("edit")},a.on("click",s,this).on("dragstart",e,this).on("dragend",o,this),this._markerGroup.addLayer(a)},_updatePrevNext:function(t,i){t&&(t._next=i),i&&(i._prev=t)},_getMiddleLatLng:function(t,i){var s=this._poly._map,e=s.latLngToLayerPoint(t.getLatLng()),o=s.latLngToLayerPoint(i.getLatLng());return s.layerPointToLatLng(e._add(o)._divideBy(2))}}),e.Polyline.addInitHook(function(){e.Handler.PolyEdit&&(this.editing=new e.Handler.PolyEdit(this),this.options.editable&&this.editing.enable()),this.on("add",function(){this.editing&&this.editing.enabled()&&this.editing.addHooks()}),this.on("remove",function(){this.editing&&this.editing.enabled()&&this.editing.removeHooks()})}),e.Control=e.Class.extend({options:{position:"topright"},initialize:function(t){e.setOptions(this,t)},getPosition:function(){return this.options.position},setPosition:function(t){var i=this._map;return i&&i.removeControl(this),this.options.position=t,i&&i.addControl(this),this},addTo:function(t){this._map=t;var i=this._container=this.onAdd(t),s=this.getPosition(),o=t._controlCorners[s];return e.DomUtil.addClass(i,"leaflet-control"),-1!==s.indexOf("bottom")?o.insertBefore(i,o.firstChild):o.appendChild(i),this},removeFrom:function(t){var i=this.getPosition(),s=t._controlCorners[i];return s.removeChild(this._container),this._map=null,this.onRemove&&this.onRemove(t),this}}),e.control=function(t){return new e.Control(t)},e.Map.include({addControl:function(t){return t.addTo(this),this},removeControl:function(t){return t.removeFrom(this),this},_initControlPos:function(){function t(t,n){var a=s+t+" "+s+n;i[t+n]=e.DomUtil.create("div",a,o)}var i=this._controlCorners={},s="leaflet-",o=this._controlContainer=e.DomUtil.create("div",s+"control-container",this._container);t("top","left"),t("top","right"),t("bottom","left"),t("bottom","right")}}),e.Control.Zoom=e.Control.extend({options:{position:"topleft"},onAdd:function(t){var i="leaflet-control-zoom",s="leaflet-bar",o=s+"-part",n=e.DomUtil.create("div",i+" "+s);return this._map=t,this._zoomInButton=this._createButton("+","Zoom in",i+"-in "+o+" "+o+"-top",n,this._zoomIn,this),this._zoomOutButton=this._createButton("-","Zoom out",i+"-out "+o+" "+o+"-bottom",n,this._zoomOut,this),t.on("zoomend",this._updateDisabled,this),n},onRemove:function(t){t.off("zoomend",this._updateDisabled,this)},_zoomIn:function(t){this._map.zoomIn(t.shiftKey?3:1)},_zoomOut:function(t){this._map.zoomOut(t.shiftKey?3:1)},_createButton:function(t,i,s,o,n,a){var r=e.DomUtil.create("a",s,o);r.innerHTML=t,r.href="#",r.title=i;var h=e.DomEvent.stopPropagation;return e.DomEvent.on(r,"click",h).on(r,"mousedown",h).on(r,"dblclick",h).on(r,"click",e.DomEvent.preventDefault).on(r,"click",n,a),r},_updateDisabled:function(){var t=this._map,i="leaflet-control-zoom-disabled";e.DomUtil.removeClass(this._zoomInButton,i),e.DomUtil.removeClass(this._zoomOutButton,i),t._zoom===t.getMinZoom()&&e.DomUtil.addClass(this._zoomOutButton,i),t._zoom===t.getMaxZoom()&&e.DomUtil.addClass(this._zoomInButton,i)}}),e.Map.mergeOptions({zoomControl:!0}),e.Map.addInitHook(function(){this.options.zoomControl&&(this.zoomControl=new e.Control.Zoom,this.addControl(this.zoomControl))}),e.control.zoom=function(t){return new e.Control.Zoom(t)},e.Control.Attribution=e.Control.extend({options:{position:"bottomright",prefix:'Powered by Leaflet'},initialize:function(t){e.setOptions(this,t),this._attributions={}},onAdd:function(t){return this._container=e.DomUtil.create("div","leaflet-control-attribution"),e.DomEvent.disableClickPropagation(this._container),t.on("layeradd",this._onLayerAdd,this).on("layerremove",this._onLayerRemove,this),this._update(),this._container},onRemove:function(t){t.off("layeradd",this._onLayerAdd).off("layerremove",this._onLayerRemove)},setPrefix:function(t){return this.options.prefix=t,this._update(),this},addAttribution:function(t){return t?(this._attributions[t]||(this._attributions[t]=0),this._attributions[t]++,this._update(),this):s},removeAttribution:function(t){return t?(this._attributions[t]--,this._update(),this):s},_update:function(){if(this._map){var t=[];for(var i in this._attributions)this._attributions.hasOwnProperty(i)&&this._attributions[i]&&t.push(i);var s=[];this.options.prefix&&s.push(this.options.prefix),t.length&&s.push(t.join(", ")),this._container.innerHTML=s.join(" — ")}},_onLayerAdd:function(t){t.layer.getAttribution&&this.addAttribution(t.layer.getAttribution())},_onLayerRemove:function(t){t.layer.getAttribution&&this.removeAttribution(t.layer.getAttribution())}}),e.Map.mergeOptions({attributionControl:!0}),e.Map.addInitHook(function(){this.options.attributionControl&&(this.attributionControl=(new e.Control.Attribution).addTo(this))}),e.control.attribution=function(t){return new e.Control.Attribution(t)},e.Control.Scale=e.Control.extend({options:{position:"bottomleft",maxWidth:100,metric:!0,imperial:!0,updateWhenIdle:!1},onAdd:function(t){this._map=t;var i="leaflet-control-scale",s=e.DomUtil.create("div",i),o=this.options;return this._addScales(o,i,s),t.on(o.updateWhenIdle?"moveend":"move",this._update,this),t.whenReady(this._update,this),s},onRemove:function(t){t.off(this.options.updateWhenIdle?"moveend":"move",this._update,this)},_addScales:function(t,i,s){t.metric&&(this._mScale=e.DomUtil.create("div",i+"-line",s)),t.imperial&&(this._iScale=e.DomUtil.create("div",i+"-line",s))},_update:function(){var t=this._map.getBounds(),i=t.getCenter().lat,s=6378137*Math.PI*Math.cos(i*Math.PI/180),e=s*(t.getNorthEast().lng-t.getSouthWest().lng)/180,o=this._map.getSize(),n=this.options,a=0;o.x>0&&(a=e*(n.maxWidth/o.x)),this._updateScales(n,a)},_updateScales:function(t,i){t.metric&&i&&this._updateMetric(i),t.imperial&&i&&this._updateImperial(i)},_updateMetric:function(t){var i=this._getRoundNum(t);this._mScale.style.width=this._getScaleWidth(i/t)+"px",this._mScale.innerHTML=1e3>i?i+" m":i/1e3+" km"},_updateImperial:function(t){var i,s,e,o=3.2808399*t,n=this._iScale;o>5280?(i=o/5280,s=this._getRoundNum(i),n.style.width=this._getScaleWidth(s/i)+"px",n.innerHTML=s+" mi"):(e=this._getRoundNum(o),n.style.width=this._getScaleWidth(e/o)+"px",n.innerHTML=e+" ft")},_getScaleWidth:function(t){return Math.round(this.options.maxWidth*t)-10},_getRoundNum:function(t){var i=Math.pow(10,(Math.floor(t)+"").length-1),s=t/i;return s=s>=10?10:s>=5?5:s>=3?3:s>=2?2:1,i*s}}),e.control.scale=function(t){return new e.Control.Scale(t)},e.Control.Layers=e.Control.extend({options:{collapsed:!0,position:"topright",autoZIndex:!0},initialize:function(t,i,s){e.setOptions(this,s),this._layers={},this._lastZIndex=0,this._handlingClick=!1;for(var o in t)t.hasOwnProperty(o)&&this._addLayer(t[o],o);for(o in i)i.hasOwnProperty(o)&&this._addLayer(i[o],o,!0)},onAdd:function(t){return this._initLayout(),this._update(),t.on("layeradd",this._onLayerChange,this).on("layerremove",this._onLayerChange,this),this._container},onRemove:function(t){t.off("layeradd",this._onLayerChange).off("layerremove",this._onLayerChange)},addBaseLayer:function(t,i){return this._addLayer(t,i),this._update(),this},addOverlay:function(t,i){return this._addLayer(t,i,!0),this._update(),this},removeLayer:function(t){var i=e.stamp(t);return delete this._layers[i],this._update(),this},_initLayout:function(){var t="leaflet-control-layers",i=this._container=e.DomUtil.create("div",t);e.Browser.touch?e.DomEvent.on(i,"click",e.DomEvent.stopPropagation):(e.DomEvent.disableClickPropagation(i),e.DomEvent.on(i,"mousewheel",e.DomEvent.stopPropagation));var s=this._form=e.DomUtil.create("form",t+"-list");if(this.options.collapsed){e.DomEvent.on(i,"mouseover",this._expand,this).on(i,"mouseout",this._collapse,this);var o=this._layersLink=e.DomUtil.create("a",t+"-toggle",i);o.href="#",o.title="Layers",e.Browser.touch?e.DomEvent.on(o,"click",e.DomEvent.stopPropagation).on(o,"click",e.DomEvent.preventDefault).on(o,"click",this._expand,this):e.DomEvent.on(o,"focus",this._expand,this),this._map.on("movestart",this._collapse,this)}else this._expand();this._baseLayersList=e.DomUtil.create("div",t+"-base",s),this._separator=e.DomUtil.create("div",t+"-separator",s),this._overlaysList=e.DomUtil.create("div",t+"-overlays",s),i.appendChild(s)},_addLayer:function(t,i,s){var o=e.stamp(t);this._layers[o]={layer:t,name:i,overlay:s},this.options.autoZIndex&&t.setZIndex&&(this._lastZIndex++,t.setZIndex(this._lastZIndex))},_update:function(){if(this._container){this._baseLayersList.innerHTML="",this._overlaysList.innerHTML="";var t=!1,i=!1;for(var s in this._layers)if(this._layers.hasOwnProperty(s)){var e=this._layers[s];this._addItem(e),i=i||e.overlay,t=t||!e.overlay}this._separator.style.display=i&&t?"":"none"}},_onLayerChange:function(t){var i=e.stamp(t.layer);this._layers[i]&&!this._handlingClick&&this._update()},_createRadioElement:function(t,s){var e='t;t++)i=o[t],s=this._layers[i.layerId],i.checked&&!this._map.hasLayer(s.layer)?(this._map.addLayer(s.layer),s.overlay||(e=s.layer)):!i.checked&&this._map.hasLayer(s.layer)&&this._map.removeLayer(s.layer);e&&(this._map.setZoom(this._map.getZoom()),this._map.fire("baselayerchange",{layer:e})),this._handlingClick=!1},_expand:function(){e.DomUtil.addClass(this._container,"leaflet-control-layers-expanded")},_collapse:function(){this._container.className=this._container.className.replace(" leaflet-control-layers-expanded","")}}),e.control.layers=function(t,i,s){return new e.Control.Layers(t,i,s)},e.PosAnimation=e.Class.extend({includes:e.Mixin.Events,run:function(t,i,s,o){this.stop(),this._el=t,this._inProgress=!0,this.fire("start"),t.style[e.DomUtil.TRANSITION]="all "+(s||.25)+"s cubic-bezier(0,0,"+(o||.5)+",1)",e.DomEvent.on(t,e.DomUtil.TRANSITION_END,this._onTransitionEnd,this),e.DomUtil.setPosition(t,i),e.Util.falseFn(t.offsetWidth),this._stepTimer=setInterval(e.bind(this.fire,this,"step"),50)},stop:function(){this._inProgress&&(e.DomUtil.setPosition(this._el,this._getPos()),this._onTransitionEnd(),e.Util.falseFn(this._el.offsetWidth))},_transformRe:/(-?[\d\.]+), (-?[\d\.]+)\)/,_getPos:function(){var i,s,o,n=this._el,a=t.getComputedStyle(n);return e.Browser.any3d?(o=a[e.DomUtil.TRANSFORM].match(this._transformRe),i=parseFloat(o[1]),s=parseFloat(o[2])):(i=parseFloat(a.left),s=parseFloat(a.top)),new e.Point(i,s,!0)},_onTransitionEnd:function(){e.DomEvent.off(this._el,e.DomUtil.TRANSITION_END,this._onTransitionEnd,this),this._inProgress&&(this._inProgress=!1,this._el.style[e.DomUtil.TRANSITION]="",clearInterval(this._stepTimer),this.fire("step").fire("end"))}}),e.Map.include({setView:function(t,i,s){i=this._limitZoom(i);var e=this._zoom!==i;if(this._loaded&&!s&&this._layers){this._panAnim&&this._panAnim.stop();var o=e?this._zoomToIfClose&&this._zoomToIfClose(t,i):this._panByIfClose(t);if(o)return clearTimeout(this._sizeTimer),this}return this._resetView(t,i),this},panBy:function(t,i,s){if(t=e.point(t),!t.x&&!t.y)return this;this._panAnim||(this._panAnim=new e.PosAnimation,this._panAnim.on({step:this._onPanTransitionStep,end:this._onPanTransitionEnd},this)),this.fire("movestart"),e.DomUtil.addClass(this._mapPane,"leaflet-pan-anim");var o=e.DomUtil.getPosition(this._mapPane).subtract(t)._round();return this._panAnim.run(this._mapPane,o,i||.25,s),this},_onPanTransitionStep:function(){this.fire("move")},_onPanTransitionEnd:function(){e.DomUtil.removeClass(this._mapPane,"leaflet-pan-anim"),this.fire("moveend")},_panByIfClose:function(t){var i=this._getCenterOffset(t)._floor();return this._offsetIsWithinView(i)?(this.panBy(i),!0):!1},_offsetIsWithinView:function(t,i){var s=i||1,e=this.getSize();return Math.abs(t.x)<=e.x*s&&Math.abs(t.y)<=e.y*s}}),e.PosAnimation=e.DomUtil.TRANSITION?e.PosAnimation:e.PosAnimation.extend({run:function(t,i,s,o){this.stop(),this._el=t,this._inProgress=!0,this._duration=s||.25,this._easeOutPower=1/Math.max(o||.5,.2),this._startPos=e.DomUtil.getPosition(t),this._offset=i.subtract(this._startPos),this._startTime=+new Date,this.fire("start"),this._animate()},stop:function(){this._inProgress&&(this._step(),this._complete())},_animate:function(){this._animId=e.Util.requestAnimFrame(this._animate,this),this._step()},_step:function(){var t=+new Date-this._startTime,i=1e3*this._duration;i>t?this._runFrame(this._easeOut(t/i)):(this._runFrame(1),this._complete())},_runFrame:function(t){var i=this._startPos.add(this._offset.multiplyBy(t));e.DomUtil.setPosition(this._el,i),this.fire("step")},_complete:function(){e.Util.cancelAnimFrame(this._animId),this._inProgress=!1,this.fire("end")},_easeOut:function(t){return 1-Math.pow(1-t,this._easeOutPower)}}),e.Map.mergeOptions({zoomAnimation:e.DomUtil.TRANSITION&&!e.Browser.android23&&!e.Browser.mobileOpera}),e.DomUtil.TRANSITION&&e.Map.addInitHook(function(){e.DomEvent.on(this._mapPane,e.DomUtil.TRANSITION_END,this._catchTransitionEnd,this)}),e.Map.include(e.DomUtil.TRANSITION?{_zoomToIfClose:function(t,i){if(this._animatingZoom)return!0;if(!this.options.zoomAnimation)return!1;var s=this.getZoomScale(i),o=this._getCenterOffset(t)._divideBy(1-1/s);if(!this._offsetIsWithinView(o,1))return!1;e.DomUtil.addClass(this._mapPane,"leaflet-zoom-anim"),this.fire("movestart").fire("zoomstart"),this.fire("zoomanim",{center:t,zoom:i});var n=this._getCenterLayerPoint().add(o);return this._prepareTileBg(),this._runAnimation(t,i,s,n),!0},_catchTransitionEnd:function(){this._animatingZoom&&this._onZoomTransitionEnd()},_runAnimation:function(t,i,s,o,n){this._animateToCenter=t,this._animateToZoom=i,this._animatingZoom=!0,e.Draggable&&(e.Draggable._disabled=!0);var a=e.DomUtil.TRANSFORM,r=this._tileBg;clearTimeout(this._clearTileBgTimer),e.Util.falseFn(r.offsetWidth);var h=e.DomUtil.getScaleString(s,o),l=r.style[a];r.style[a]=n?l+" "+h:h+" "+l},_prepareTileBg:function(){var t=this._tilePane,i=this._tileBg;if(i&&this._getLoadedTilesPercentage(i)>.5&&.5>this._getLoadedTilesPercentage(t))return t.style.visibility="hidden",t.empty=!0,this._stopLoadingImages(t),s;i||(i=this._tileBg=this._createPane("leaflet-tile-pane",this._mapPane),i.style.zIndex=1),i.style[e.DomUtil.TRANSFORM]="",i.style.visibility="hidden",i.empty=!0,t.empty=!1,this._tilePane=this._panes.tilePane=i;var o=this._tileBg=t;e.DomUtil.addClass(o,"leaflet-zoom-animated"),this._stopLoadingImages(o)},_getLoadedTilesPercentage:function(t){var i,s,e=t.getElementsByTagName("img"),o=0;for(i=0,s=e.length;s>i;i++)e[i].complete&&o++;return o/s},_stopLoadingImages:function(t){var i,s,o,n=Array.prototype.slice.call(t.getElementsByTagName("img"));for(i=0,s=n.length;s>i;i++)o=n[i],o.complete||(o.onload=e.Util.falseFn,o.onerror=e.Util.falseFn,o.src=e.Util.emptyImageUrl,o.parentNode.removeChild(o))},_onZoomTransitionEnd:function(){this._restoreTileFront(),e.DomUtil.removeClass(this._mapPane,"leaflet-zoom-anim"),e.Util.falseFn(this._tileBg.offsetWidth),this._animatingZoom=!1,this._resetView(this._animateToCenter,this._animateToZoom,!0,!0),e.Draggable&&(e.Draggable._disabled=!1)},_restoreTileFront:function(){this._tilePane.innerHTML="",this._tilePane.style.visibility="",this._tilePane.style.zIndex=2,this._tileBg.style.zIndex=1},_clearTileBg:function(){this._animatingZoom||this.touchZoom._zooming||(this._tileBg.innerHTML="")}}:{}),e.Map.include({_defaultLocateOptions:{watch:!1,setView:!1,maxZoom:1/0,timeout:1e4,maximumAge:0,enableHighAccuracy:!1},locate:function(t){if(t=this._locationOptions=e.extend(this._defaultLocateOptions,t),!navigator.geolocation)return this._handleGeolocationError({code:0,message:"Geolocation not supported."}),this;var i=e.bind(this._handleGeolocationResponse,this),s=e.bind(this._handleGeolocationError,this);return t.watch?this._locationWatchId=navigator.geolocation.watchPosition(i,s,t):navigator.geolocation.getCurrentPosition(i,s,t),this},stopLocate:function(){return navigator.geolocation&&navigator.geolocation.clearWatch(this._locationWatchId),this},_handleGeolocationError:function(t){var i=t.code,s=t.message||(1===i?"permission denied":2===i?"position unavailable":"timeout");this._locationOptions.setView&&!this._loaded&&this.fitWorld(),this.fire("locationerror",{code:i,message:"Geolocation error: "+s+"."})},_handleGeolocationResponse:function(t){var i=180*t.coords.accuracy/4e7,s=2*i,o=t.coords.latitude,n=t.coords.longitude,a=new e.LatLng(o,n),r=new e.LatLng(o-i,n-s),h=new e.LatLng(o+i,n+s),l=new e.LatLngBounds(r,h),c=this._locationOptions;if(c.setView){var m=Math.min(this.getBoundsZoom(l),c.maxZoom);this.setView(a,m)}this.fire("locationfound",{latlng:a,bounds:l,accuracy:t.coords.accuracy})}})}(this,document),L.Proj={},L.Proj._isProj4Proj=function(t){return t.projName!==void 0},L.Proj.Projection=L.Class.extend({initialize:function(t,i){if(L.Proj._isProj4Proj(t))this._proj=t;else{var s=t;Proj4js.defs[s]=i,this._proj=new Proj4js.Proj(s)}},project:function(t){var i=new L.Point(t.lng,t.lat);return Proj4js.transform(Proj4js.WGS84,this._proj,i)},unproject:function(t,i){var s=Proj4js.transform(this._proj,Proj4js.WGS84,t.clone());return new L.LatLng(s.y,s.x,i)}}),L.Proj.CRS=L.Class.extend({includes:L.CRS,options:{transformation:new L.Transformation(1,0,-1,0)},initialize:function(t,i,s){var e,o,n,a;L.Proj._isProj4Proj(t)?(o=t,e=o.srsCode,a=i||{},this.projection=new L.Proj.Projection(o)):(e=t,n=i,a=s||{},this.projection=new L.Proj.Projection(e,n)),L.Util.setOptions(this,a),this.code=e,this.transformation=this.options.transformation,this.options.origin&&(this.transformation=new L.Transformation(1,-this.options.origin[0],-1,this.options.origin[1])),this.options.scales?this.scale=function(t){return this.options.scales[t]}:this.options.resolutions&&(this.scale=function(t){return 1/this.options.resolutions[t]})}}),L.Proj.CRS.TMS=L.Proj.CRS.extend({initialize:function(t,i,s,e){if(L.Proj._isProj4Proj(t)){var o=t,n=i,a=s||{};a.origin=[n[0],n[3]],L.Proj.CRS.prototype.initialize(o,a)}else{var r=t,h=i,n=s,a=e||{};a.origin=[n[0],n[3]],L.Proj.CRS.prototype.initialize(r,h,a)}this.projectedBounds=n}}),L.Proj.TileLayer={},L.Proj.TileLayer.TMS=L.TileLayer.extend({options:{tms:!0,continuousWorld:!0},initialize:function(t,i,s){if(!(i instanceof L.Proj.CRS.TMS))throw Error("CRS is not L.Proj.CRS.TMS.");L.TileLayer.prototype.initialize.call(this,t,s),this.crs=i;for(var e=this.options.minZoom;this.options.maxZoom>e;e++){var o=(this.crs.projectedBounds[3]-this.crs.projectedBounds[1])/this._projectedTileSize(e);if(Math.abs(o-Math.round(o))>.001)throw Error("Projected bounds does not match grid at zoom "+e)}},getTileUrl:function(t){var i=Math.round((this.crs.projectedBounds[3]-this.crs.projectedBounds[1])/this._projectedTileSize(this._map.getZoom()));return L.Util.template(this._url,L.Util.extend({s:this._getSubdomain(t),z:this._getZoomForUrl(),x:t.x,y:i-t.y-1},this.options))},_projectedTileSize:function(t){return this.options.tileSize/this.crs.scale(t)}}),"undefined"!=typeof module&&(module.exports=L.Proj),"undefined"!=typeof L&&L.CRS!==void 0&&(L.CRS.proj4js=function(){return function(t,i,s,e){return e=e||{},s&&(e.transformation=s),new L.Proj.CRS(t,i,e)}}()),L.Control.MousePosition=L.Control.extend({options:{position:"bottomleft",separator:" : ",emptyString:"Unavailable",lngFirst:!1,numDigits:5,lngFormatter:void 0,latFormatter:void 0},onAdd:function(t){return this._container=L.DomUtil.create("div","leaflet-control-mouseposition"),L.DomEvent.disableClickPropagation(this._container),t.on("mousemove",this._onMouseMove,this),this._container.innerHTML=this.options.emptyString,this._container},onRemove:function(t){t.off("mousemove",this._onMouseMove)},_onMouseMove:function(t){var i=L.Util.formatNum(t.latlng.lng,this.options.numDigits),s=L.Util.formatNum(t.latlng.lat,this.options.numDigits);this.options.lngFormatter&&(i=this.options.lngFormatter(i)),this.options.latFormatter&&(s=this.options.latFormatter(s));var e=this.options.lngFirst?i+this.options.separator+s:s+this.options.separator+i;this._container.innerHTML=e}}),L.Map.mergeOptions({positionControl:!1}),L.Map.addInitHook(function(){this.options.positionControl&&(this.positionControl=new L.Control.MousePosition,this.addControl(this.positionControl))}),L.control.mousePosition=function(t){return new L.Control.MousePosition(t)},function(t,i){L.KSP={},L.KSP.version="0.2.1",L.KSP.CRS={},L.KSP.CRS.EPSG4326=new L.Proj.CRS.TMS(new Proj4js.Proj("EPSG:4326"),[-180,-90,180,90],{resolutions:[.703125,.3515625,.17578125,.087890625,.0439453125,.02197265625]}),L.KSP.CelestialBody=L.Class.extend({initialize:function(t){if(!t.hasOwnProperty("id"))throw Error("must specify id");if(!t.hasOwnProperty("name"))throw Error("must specify name");if(t.hasOwnProperty("crs")){if(!(t.crs instanceof L.Proj.CRS.TMS))throw Error("crs is not an instance of L.Proj.CRS.TMS")}else this.crs=L.KSP.CRS.EPSG4326;t.hasOwnProperty("radius")||(this.radius=1),t.hasOwnProperty("thumbnail")||(this.thumbnail="body-unknown.png"),t.hasOwnProperty("baseLayers")||(this.baseLayers={}),L.Util.extend(this,t)},addTo:function(t){var i,s=t._body;if(t._body=this,t.fire("bodychangestart",{body:this,oldBody:s}),s){for(i in s.baseLayers)s.baseLayers.hasOwnProperty(i)&&t.removeLayer(s.baseLayers[i]);for(i in s.overlays)s.overlays.hasOwnProperty(i)&&t.removeLayer(s.overlays[i])}var e=this.defaultLayer||this.baseLayers.Satellite;if(e){for(i in this.baseLayers)if(this.baseLayers.hasOwnProperty(i)&&this.baseLayers[i]._type===t._baseLayerType){e=this.baseLayers[i];break}t.addLayer(e),t.fire("baselayerchange",{layer:e})}for(i in this.overlays)this.overlays.hasOwnProperty(i)&&t._overlayTypes.indexOf(this.overlays[i]._type)>=0&&(t.addLayer(this.overlays[i]),t.fire("layeradd",{layer:this.overlays[i]}));t.fire("bodychangeend",{body:this,oldBody:s})},onAdd:function(t){this.addTo(t)},removeFrom:function(t){L.KSP.CelestialBody.DUMMY.addTo(t)},onRemove:function(t){this.removeFrom(t)}}),L.KSP.celestialBody=function(t){return new L.KSP.CelestialBody(t)},L.KSP.CelestialBody.DUMMY=L.KSP.celestialBody({id:"",name:"",crs:L.KSP.CRS.EPSG4326}),L.KSP.CelestialBody.ALL_PLANETARY=[L.KSP.CelestialBody.DUMMY],L.KSP.Map=L.Map.extend({options:{crs:L.KSP.CRS.EPSG4326,continuousWorld:!0},initialize:function(t,i){this._baseLayerType=-1,this._overlayTypes=[],L.Util.setOptions(this,i),this.startTrackingLayerState(),this.on("bodychangestart",this._onBodyChangeStart).on("bodychangeend",this._onBodyChangeEnd),L.Map.prototype.initialize.call(this,t,this.options)},clampZoom:function(){var t=this.getZoom(),i=this.getMinZoom(),s=this.getMaxZoom();i>t?this.setZoom(i):t>s?this.setZoom(s):this.fire("zoomend",this)},_onBodyChangeStart:function(){this.stopTrackingLayerState()},_onBodyChangeEnd:function(){this.clampZoom(),this.startTrackingLayerState()},_onLayerStateChange:function(t){if("layeradd"===t.type)t.layer instanceof L.KSP.TileLayer?this._baseLayerType=t.layer._type:t.layer instanceof L.KSP.LayerGroup&&0>this._overlayTypes.indexOf(t.layer._type)&&this._overlayTypes.push(t.layer._type);else if(t.layer instanceof L.KSP.LayerGroup){var i,s,e=t.layer._type,o=this._overlayTypes;for(i=o.length-1;i>=0;i--)s=o[i],s===e&&o.splice(i,1)}},startTrackingLayerState:function(){this.on("layeradd",this._onLayerStateChange).on("layerremove",this._onLayerStateChange)},stopTrackingLayerState:function(){this.off("layeradd",this._onLayerStateChange).off("layerremove",this._onLayerStateChange)}}),L.KSP.map=function(t,i){return new L.KSP.Map(t,i)},L.KSP.TileLayer=L.Proj.TileLayer.TMS.extend({statics:{TYPE_SATELLITE:0,TYPE_COLORRELIEF:1,TYPE_SLOPE:2,DEFAULT_URL:"http://tiles.kerbalmaps.com/{body}/{style}/{z}/{x}/{y}.png"},options:{continuousWorld:!1,noWrap:!1,minZoom:0,maxZoom:5,attribution:"Map data © Joel Pedraza"},initialize:function(t,i,s,e){L.Util.setOptions(this,e),this._type=t,L.Proj.TileLayer.TMS.prototype.initialize.call(this,i,s,this.options)}}),L.KSP.tileLayer=function(t,i,s,e){return new L.KSP.TileLayer(t,i,s,e)},L.KSP.LayerGroup=L.LayerGroup.extend({statics:{TYPE_SPACECENTER:0,TYPE_ANOMALY:1},initialize:function(t,i){this._type=t,L.LayerGroup.prototype.initialize.call(this,i)}}),L.KSP.layerGroup=function(t,i){return new L.KSP.LayerGroup(t,i)},L.KSP.Icon={},L.KSP.Icon.SPACECENTER=new L.Icon({iconUrl:"../assets/images/markers-spacecenter.png",shadowUrl:"../assets/images/markers-shadow.png",iconSize:[30,40],shadowSize:[35,16],iconAnchor:[15,40],shadowAnchor:[10,12],popupAnchor:[0,-35]}),L.KSP.Icon.ANOMALY=new L.Icon({iconUrl:"../assets/images/markers-anomaly.png",shadowUrl:"../assets/images/markers-shadow.png",iconSize:[30,40],shadowSize:[35,16],iconAnchor:[15,40],shadowAnchor:[10,12],popupAnchor:[0,-35]}),L.KSP.Legend={},L.KSP.Legend.SLOPE={"≥ 60°":"#E19678","< 60°":"#C86464","< 30°":"#965A64","< 15°":"#645064","< 5°":"#325064","0°":"#32465A"},L.KSP.Control=L.KSP.control={},L.KSP.Control.Legend=L.Control.extend({options:{position:"bottomright"},onAdd:function(t){return this._container=L.DomUtil.create("div","leaflet-control-legend"),t.on("baselayerchange",this._onLayerChange,this),this._container},_update:function(t){if(this._container.innerHTML="",t){for(var i in t)t.hasOwnProperty(i)&&(this._container.innerHTML+=''+i+"
    ");L.DomUtil.addClass(this._container,"leaflet-control-legend-visible")}else this._container.className=this._container.className.replace(" leaflet-control-legend-visible","")},_onLayerChange:function(t){this._update(t.layer.options.legend)}}),L.Map.mergeOptions({legendControl:!0}),L.Map.addInitHook(function(){this.options.bodyControl&&(this.legendControl=new L.KSP.Control.Legend,this.addControl(this.legendControl))}),L.control.legend=function(t){return new L.KSP.Control.Legend(t)},L.KSP.Control.Scale=L.Control.Scale.extend({options:{imperial:!1},onAdd:function(t){this._radius=0,t._body&&(this._radius=t._body.radius);var i=L.Control.Scale.prototype.onAdd.call(this,t);return t.on("bodychangeend",this._onBodyChangeEnd,this),i},onRemove:function(t){L.Control.Scale.prototype.onRemove.call(this,t),t.off("bodychangeend",this._onBodyChangeEnd)},_onBodyChangeEnd:function(t){this._radius=t.body.radius,this._update()},_update:function(){var t=this._map.getBounds(),i=t.getCenter().lat,s=this._radius*Math.PI*Math.cos(i*Math.PI/180),e=s*(t.getNorthEast().lng-t.getSouthWest().lng)/180,o=this._map.getSize(),n=this.options,a=0;o.x>0&&(a=e*(n.maxWidth/o.x)),this._updateScales(n,a)}}),L.KSP.Map.mergeOptions({scaleControl:!1}),L.KSP.Map.addInitHook(function(){this.options.scaleControl&&(this.scaleControl=new L.KSP.Control.Scale,this.addControl(this.scaleControl))}),L.KSP.control.scale=function(t){return new L.KSP.Control.Scale(t)},L.KSP.Control.CelestialBody=L.Control.extend({options:{position:"topright",collapsed:!0},initialize:function(t,i){L.Util.setOptions(this,i),this._bodies=t,this._timeInMillis=(new Date).valueOf(),this._weekInMillis=6048e5},onAdd:function(){return this._initLayout(),this._update(),this._map.on("bodychangeend",this._update,this),this._container},_initLayout:function(){var t="leaflet-control-celestialbodies",s=this._container=L.DomUtil.create("div",t),e=this._bodies;if(this.options.collapsed){L.DomEvent.on(s,"mouseover",this._expand,this).on(s,"mouseout",this._collapse,this);var o=this._bodiesLink=L.DomUtil.create("a",t+"-toggle",s);o.href="#",o.title="Celestial Bodies",L.DomEvent.on(o,"focus",this._expand,this),this._map.on("movestart",this._collapse,this)}var n=this._list=L.DomUtil.create("ul",t+"-list",s);for(var a in e)if(e.hasOwnProperty(a)){var r=this._addBody(e[a],n);if(e[a].children){var h=i.createElement("ul");for(var l in e[a].children)e[a].children.hasOwnProperty(l)&&this._addBody(e[a].children[l],h);r.appendChild(h)}}},_update:function(){this._map._body&&(this._bodiesLink.style.backgroundImage='url("'+this._map._body.thumbnail+'")')},_addBody:function(t,s){var e,o=i.createElement("li"),n=i.createElement("img");if(n.src=t.thumbnail,n.alt=o.title=t.name,t.addedOn){this._timeInMillis-t.addedOnKerbal Space Center
    -0.0969 : -74.6004"),L.marker([20.5829,-146.5116],{icon:L.KSP.Icon.SPACECENTER}).bindPopup("Kerbal Space Center 2
    20.5829 : -146.5116"),L.marker([-1.5409,-71.9099],{icon:L.KSP.Icon.SPACECENTER}).bindPopup("Island Airfield
    -1.5409 : -71.9099")]),Anomalies:L.KSP.layerGroup(L.KSP.LayerGroup.TYPE_ANOMALY,[L.marker([.1023,-74.5684],{icon:L.KSP.Icon.ANOMALY}).bindPopup("0.1023 : -74.5684"),L.marker([20.6709,-146.4968],{icon:L.KSP.Icon.ANOMALY}).bindPopup("20.6709 : -146.4968"),L.marker([35.5705,-74.9773],{icon:L.KSP.Icon.ANOMALY}).bindPopup("35.5705 : -74.9773"),L.marker([-.6402,-80.7668],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-0.6402 : -80.7668"),L.marker([-28.8083,-13.4401],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-28.8083 : -13.4401"),L.marker([-6.5057,-141.6856],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-6.5057 : -141.6856"),L.marker([81.9551,-128.518],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-81.9551 : -128.518")])}}),L.KSP.CelestialBody.MUN=L.KSP.celestialBody({id:"mun",name:"Mun",crs:L.KSP.CRS.EPSG4326,radius:2e5,addedOn:13682304e5,lastUpdated:1368144e6,thumbnail:"body-mun.png",baseLayers:{Satellite:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SATELLITE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{body:"mun",style:"sat"}),"Color Relief":L.KSP.tileLayer(L.KSP.TileLayer.TYPE_COLORRELIEF,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{body:"mun",style:"color",legend:{"3150 m":"#EBEBEB","-180 m":"#232323"}}),Slope:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SLOPE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{body:"mun",style:"slope",legend:L.KSP.Legend.SLOPE})},overlays:{Anomalies:L.KSP.layerGroup(L.KSP.LayerGroup.TYPE_ANOMALY,[L.marker([-9.8314,25.9177],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-9.8314 : 25.9177"),L.marker([-82.2063,102.9305],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-82.2063 : 102.9305"),L.marker([57.6604,9.1422],{icon:L.KSP.Icon.ANOMALY}).bindPopup("57.6604 : 9.1422"),L.marker([2.4695,81.5133],{icon:L.KSP.Icon.ANOMALY}).bindPopup("2.4695 : 81.5133"),L.marker([12.4432,39.178],{icon:L.KSP.Icon.ANOMALY}).bindPopup("12.4432 : 39.1780"),L.marker([-12.4431,-140.822],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-12.4431 : -140.8220"),L.marker([.7027,22.747],{icon:L.KSP.Icon.ANOMALY}).bindPopup("0.7027 : 22.7470"),L.marker([-70.9556,-68.1378],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-70.9556,-68.1378")])}}),L.KSP.CelestialBody.MINMUS=L.KSP.celestialBody({id:"minmus",name:"Minmus",crs:L.KSP.CRS.EPSG4326,radius:6e4,addedOn:13682304e5,lastUpdated:13682304e5,thumbnail:"body-minmus.png",baseLayers:{Satellite:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SATELLITE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"sat",body:"minmus"}),"Color Relief":L.KSP.tileLayer(L.KSP.TileLayer.TYPE_COLORRELIEF,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"color",body:"minmus",legend:{"5750 m":"#414B41","2500 m":"#BEE6C3","1 m":"#96CDB4","0 m":"#87B9A5"}}),Slope:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SLOPE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"slope",body:"minmus",legend:L.KSP.Legend.SLOPE})},overlays:{Anomalies:L.KSP.layerGroup(L.KSP.LayerGroup.TYPE_ANOMALY,[L.marker([23.7768,60.0462],{icon:L.KSP.Icon.ANOMALY}).bindPopup("23.7768 : 60.0462")])}}),L.KSP.CelestialBody.DUNA=L.KSP.celestialBody({id:"duna",name:"Duna",crs:L.KSP.CRS.EPSG4326,radius:32e4,addedOn:13688352e5,lastUpdated:13688352e5,thumbnail:"body-duna.png",baseLayers:{Satellite:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SATELLITE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"sat",body:"duna"}),"Color Relief":L.KSP.tileLayer(L.KSP.TileLayer.TYPE_COLORRELIEF,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"color",body:"duna",legend:{"4800 m":"#C3A082","4000 m":"#966446","3000 m":"#733219","2000 m":"#501E14","1000 m":"#3C140F","0 m":"#280F0A"}}),Slope:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SLOPE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"slope",body:"duna",legend:L.KSP.Legend.SLOPE})},overlays:{Anomalies:L.KSP.layerGroup(L.KSP.LayerGroup.TYPE_ANOMALY,[L.marker([17.0483,-85.4717],{icon:L.KSP.Icon.ANOMALY}).bindPopup("17.0483 : -85.4717"),L.marker([-30.3525,-28.6828],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-30.3525 : -28.6828"),L.marker([-66.1344,-160.7432],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-66.1344 : -160.7432")])}}),L.KSP.CelestialBody.IKE=L.KSP.celestialBody({id:"ike",name:"Ike",crs:L.KSP.CRS.EPSG4326,radius:13e4,addedOn:13688352e5,lastUpdated:13688352e5,thumbnail:"body-ike.png",baseLayers:{Satellite:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SATELLITE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"sat",body:"ike"}),"Color Relief":L.KSP.tileLayer(L.KSP.TileLayer.TYPE_COLORRELIEF,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"color",body:"ike",legend:{"13000 m":"#828282","11000 m":"#6E6E6E","9000 m":"#5A5A5A","7000 m":"#464646","5000 m":"#323232","2500 m":"#191919","70 m":"#070707"}}),Slope:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SLOPE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"slope",body:"ike",legend:L.KSP.Legend.SLOPE})},overlays:{}}),L.KSP.CelestialBody.DRES=L.KSP.celestialBody({id:"dres",name:"Dres",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-dres.png"}),L.KSP.CelestialBody.JOOL=L.KSP.celestialBody({id:"jool",name:"Jool",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-jool.png"}),L.KSP.CelestialBody.LAYTHE=L.KSP.celestialBody({id:"laythe",name:"Laythe",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-laythe.png"}),L.KSP.CelestialBody.VALL=L.KSP.celestialBody({id:"vall",name:"Vall",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-vall.png"}),L.KSP.CelestialBody.TYLO=L.KSP.celestialBody({id:"tylo",name:"Tylo",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-tylo.png"}),L.KSP.CelestialBody.BOP=L.KSP.celestialBody({id:"bop",name:"Bop",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-bop.png"}),L.KSP.CelestialBody.POL=L.KSP.celestialBody({id:"pol",name:"Pol",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-pol.png"}),L.KSP.CelestialBody.EELOO=L.KSP.celestialBody({id:"eeloo",name:"Eeloo",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-eeloo.png"}),L.KSP.CelestialBody.KERBIN.defaultLayer=L.KSP.CelestialBody.KERBIN.baseLayers.Satellite,L.KSP.CelestialBody.MUN.defaultLayer=L.KSP.CelestialBody.MUN.baseLayers.Satellite,L.KSP.CelestialBody.MINMUS.defaultLayer=L.KSP.CelestialBody.MINMUS.baseLayers.Satellite,L.KSP.CelestialBody.EVE.children=[L.KSP.CelestialBody.GILLY],L.KSP.CelestialBody.KERBIN.children=[L.KSP.CelestialBody.MUN,L.KSP.CelestialBody.MINMUS],L.KSP.CelestialBody.DUNA.children=[L.KSP.CelestialBody.IKE],L.KSP.CelestialBody.JOOL.children=[L.KSP.CelestialBody.LAYTHE,L.KSP.CelestialBody.VALL,L.KSP.CelestialBody.TYLO,L.KSP.CelestialBody.BOP,L.KSP.CelestialBody.POL],L.KSP.CelestialBody.GILLY.parent=L.KSP.CelestialBody.EVE,L.KSP.CelestialBody.MUN.parent=L.KSP.CelestialBody.MINMUS.parent=L.KSP.CelestialBody.KERBIN,L.KSP.CelestialBody.IKE.parent=L.KSP.CelestialBody.DUNA,L.KSP.CelestialBody.LAYTHE.parent=L.KSP.CelestialBody.VALL.parent=L.KSP.CelestialBody.TYLO.parent=L.KSP.CelestialBody.BOP.parent=L.KSP.CelestialBody.POL.parent=L.KSP.CelestialBody.JOOL,L.KSP.CelestialBody.ALL_PLANETARY=[L.KSP.CelestialBody.MOHO,L.KSP.CelestialBody.EVE,L.KSP.CelestialBody.KERBIN,L.KSP.CelestialBody.DUNA,L.KSP.CelestialBody.DRES,L.KSP.CelestialBody.JOOL,L.KSP.CelestialBody.EELOO],L.KSP.Map.addInitHook(function(){this.options.layers=[L.KSP.CelestialBody.KERBIN]})}(this,document);var Settings=Class.create({initialize:function(defaultHost,defaultPort){if(!this.getHost()){this.setHost(defaultHost)}if(!this.getPort()){this.setPort(defaultPort)}},getHost:function(){return this.get("host")},getPort:function(){return this.get("port")},setHost:function(value){return this.set("host",value)},setPort:function(value){return this.set("port",value)},get:function(property){return localStorage.getItem(property)},set:function(property,value){return localStorage.setItem(property,value)}});var Telemachus=Class.create({initialize:function(host,port){this.updateConnection(host,port);this.receiverFunctions=[];this.subscribedFields={};this.orbitingBodies=this.getOrbitalBodies();this.rate=500;this.loopTimeout=setTimeout(this.poll.bind(this),this.rate)},url:function(){return"http://"+this.host+":"+this.port+"/telemachus/datalink"},updateConnection:function(host,port){this.host=host;this.port=port},addReceiverFunction:function(func){this.receiverFunctions.push(func)},subscribeToData:function(fields){for(var i=fields.length-1;i>=0;i--){var field=fields[i];this.subscribedFields[field]=field}},dispatchMessages:function(data){for(var i=this.receiverFunctions.length-1;i>=0;i--){try{this.receiverFunctions[i](data)}catch(e){console.error(e)}}},send:function(message){this.socket.send(JSON.stringify(message))},getOrbitalBodyInfo:function(name){var properties=this.orbitingBodies[name];if(properties){return Object.extend({name:name},properties)}else{return null}},notifyIfLOS:function(request){if(request.transport.status==0){document.fire("telemachus:loss-of-signal");return true}return false},prepareParams:function(params){var normalizedParams=[];Object.keys(params).forEach(function(field){var sanitizedFieldName=field.replace("[","{").replace("]","}");normalizedParams.push(sanitizedFieldName+"="+field)});return normalizedParams},convertData:function(rawData){var data={};var startBracesRegexp=/\{/g;var endBracesRegexp=/\}/g;Object.keys(rawData).forEach(function(key){var convertedFieldName=key.replace(startBracesRegexp,"[").replace(endBracesRegexp,"]");data[convertedFieldName]=rawData[key]});return data},poll:function(){var params=this.prepareParams(this.subscribedFields);var requestURL=this.url()+"?"+params.join("&");new Ajax.Request(requestURL,{method:"get",onSuccess:function(response){var rawData=JSON.parse(response.responseText);var data=this.convertData(rawData);this.dispatchMessages(data)}.bind(this),onException:this.notifyIfLOS.bind(this),onComplete:function(response){setTimeout(this.poll.bind(this),this.rate)}.bind(this)})},sendMessage:function(params,callback){new Ajax.Request(this.url(),{method:"post",postBody:JSON.stringify(params),onSuccess:function(response){var rawData=JSON.parse(response.responseText);var data=this.convertData(rawData);callback(data)}.bind(this),onException:this.notifyIfLOS.bind(this)})},getOrbitalBodies:function(){return{Sun:{id:0,referenceBodyName:null,mapBody:null,atmosphericRadius:0,color:"#FFFF00",surfaceGravity:17.1},Kerbin:{id:1,referenceBodyName:"Sun",mapBody:L.KSP.CelestialBody.KERBIN,atmosphericRadius:7e4,color:"#4a5472",surfaceGravity:9.81},Mun:{id:2,referenceBodyName:"Kerbin",mapBody:L.KSP.CelestialBody.MUN,atmosphericRadius:0,color:"#e2e0d7",surfaceGravity:1.63},Minmus:{id:3,referenceBodyName:"Kerbin",mapBody:L.KSP.CelestialBody.MINMUS,color:"#98f2c5",atmosphericRadius:0,surfaceGravity:.491},Moho:{id:4,referenceBodyName:"Sun",mapBody:L.KSP.CelestialBody.MOHO,atmosphericRadius:0,color:"#fdc39e",surfaceGravity:2.7},Eve:{id:5,referenceBodyName:"Sun",mapBody:L.KSP.CelestialBody.EVE,atmosphericRadius:9e4,color:"#c394fe",surfaceGravity:16.7},Duna:{id:6,referenceBodyName:"Sun",mapBody:L.KSP.CelestialBody.DUNA,atmosphericRadius:5e4,color:"#fc5e49",surfaceGravity:2.94},Ike:{id:7,referenceBodyName:"Duna",mapBody:L.KSP.CelestialBody.IKE,atmosphericRadius:0,color:"#e2e0d7",surfaceGravity:1.1},Jool:{id:8,referenceBodyName:"Sun",mapBody:L.KSP.CelestialBody.JOOL,atmosphericRadius:2e5,color:"#C5DCAB",surfaceGravity:7.85},Laythe:{id:9,referenceBodyName:"Jool",mapBody:L.KSP.CelestialBody.LAYTHE,atmosphericRadius:5e4,color:"#a8b4fe",surfaceGravity:7.85},Vall:{id:10,referenceBodyName:"Jool",mapBody:L.KSP.CelestialBody.VALL,atmosphericRadius:0,color:"#b0f4fe",surfaceGravity:2.31},Bop:{id:11,referenceBodyName:"Jool",mapBody:L.KSP.CelestialBody.BOP,atmosphericRadius:0,color:"#c64605",surfaceGravity:.589},Tylo:{id:12,referenceBodyName:"Jool",mapBody:L.KSP.CelestialBody.TYLO,atmosphericRadius:0,color:"#fdf7ed",surfaceGravity:7.85},Gilly:{id:13,referenceBodyName:"Eve",mapBody:L.KSP.CelestialBody.GILLY,atmosphericRadius:0,color:"#fdcbb1",surfaceGravity:.049},Pol:{id:14,referenceBodyName:"Pol",mapBody:L.KSP.CelestialBody.POL,atmosphericRadius:0,color:"#fec681",surfaceGravity:.373},Dres:{id:15,referenceBodyName:"Sun",mapBody:L.KSP.CelestialBody.DRES,atmosphericRadius:0,color:"#fef8f9",surfaceGravity:1.13},Eeloo:{id:16,referenceBodyName:"Sun",mapBody:L.KSP.CelestialBody.EELOO,atmosphericRadius:0,color:"#e5fafe",surfaceGravity:1.69}}}});var TitleBar=Class.create({initialize:function(datalink,title_bar_id){this.datalink=datalink;this.title_bar_id=title_bar_id;this.title_bar=$(this.title_bar_id);this.initializeLOSNotifier();this.initializeDatalink()},update:function(data){window.requestAnimationFrame(function(){this.title_bar.down("#world-clock").update(TimeFormatters.formatUT(data["t.universalTime"]));this.title_bar.down("#mission-time").update(TimeFormatters.formatMET(data["v.missionTime"]));this.title_bar.down("#mission-time").removeClassName("loss-of-signal")}.bind(this))},initializeLOSNotifier:function(){document.observe("telemachus:loss-of-signal",function(){window.requestAnimationFrame(function(){this.title_bar.down("#mission-time").update("⚠ LOS ⚠");this.title_bar.down("#mission-time").addClassName("loss-of-signal")}.bind(this))}.bind(this))},initializeDatalink:function(){this.datalink.subscribeToData(["t.timeWarp","t.universalTime","v.missionTime"]);this.datalink.addReceiverFunction(this.update.bind(this))}});var ButtonIndicator=Class.create({initialize:function(datalink,indicatorId,apiButtonString){this.datalink=datalink;this.indicatorId=indicatorId;this.indicator=$(this.indicatorId);this.apiButtonString=apiButtonString;this.initializeDatalink()},update:function(data){if(data[this.apiButtonString]==true){this.indicator.addClassName("on")}else{this.indicator.removeClassName("on")}},initializeDatalink:function(){this.datalink.subscribeToData([this.apiButtonString]);this.datalink.addReceiverFunction(this.update.bind(this))}});var ReadoutTable=Class.create({initialize:function(datalink,tableId,dataRows){this.datalink=datalink;this.tableId=tableId;this.table=$(this.tableId);this.dataRows=dataRows;this.initializeDatalink()},update:function(data){window.requestAnimationFrame(function(){this.dataRows.forEach(function(row){var rowId=row.label;var tableRow=this.table.down("tr[data-label='"+rowId+"']");if(!tableRow){var tableRow=new Element("tr",{"data-label":rowId});tableRow.insert(""+row.label+"");this.table.insert(tableRow)}tableRow.down("td").update(row.formatter(data[row.value]))}.bind(this))}.bind(this))},initializeDatalink:function(){var dataValues=this.dataRows.map(function(dataRow){return dataRow.value});this.datalink.subscribeToData(dataValues);this.datalink.addReceiverFunction(this.update.bind(this))}});var ResourceMonitor=Class.create({initialize:function(datalink,resourceName,options){this.datalink=datalink;this.resourceName=resourceName;this.options=Object.extend({currentStageProgressBar:null,totalProgressBar:null,valuePrefix:null},options);this.resourceStrings=this.buildResourceStrings();this.initializeDatalink()},update:function(data){window.requestAnimationFrame(function(){if(this.options.totalProgressBar){this.options.totalProgressBar.value=data[this.resourceStrings.totalAvailable];this.options.totalProgressBar.max=data[this.resourceStrings.totalMax]}if(this.options.currentStageProgressBar){this.options.currentStageProgressBar.value=data[this.resourceStrings.currentStageAvailable];this.options.currentStageProgressBar.max=data[this.resourceStrings.currentStageMax]}this.updateValue("-total-value",data[this.resourceStrings.totalAvailable]);this.updateValue("-total-max",data[this.resourceStrings.totalMax]);this.updateValue("-current-stage-value",data[this.resourceStrings.currentStageAvailable]);this.updateValue("-current-stage-max",data[this.resourceStrings.currentStageMax])}.bind(this))},updateValue:function(id,value){if($(this.options.valuePrefix+id)){if(value<0){$(this.options.valuePrefix+id).update("NA")}else{$(this.options.valuePrefix+id).update(value.toFixed(2))}}},buildResourceStrings:function(){return{totalAvailable:"r.resource["+this.resourceName+"]",totalMax:"r.resourceMax["+this.resourceName+"]",currentStageAvailable:"r.resourceCurrent["+this.resourceName+"]",currentStageMax:"r.resourceCurrentMax["+this.resourceName+"]"}},initializeDatalink:function(){this.datalink.subscribeToData([this.resourceStrings.totalAvailable,this.resourceStrings.totalMax,this.resourceStrings.currentStageAvailable,this.resourceStrings.currentStageMax]);this.datalink.addReceiverFunction(this.update.bind(this))}});var DataTable=Class.create({initialize:function(tableID,dataRows){this.tableID=tableID;this.table=$(this.tableID);this.dataRows=dataRows},update:function(){window.requestAnimationFrame(function(){this.dataRows.forEach(function(row){var rowId=row.label;var tableRow=this.table.down("tr[data-label='"+rowId+"']");if(!tableRow){var tableRow=new Element("tr",{"data-label":rowId});tableRow.insert(""+row.label+"");this.table.insert(tableRow)}tableRow.down("td").update(row.value)}.bind(this))}.bind(this))},clear:function(){window.requestAnimationFrame(function(){this.dataRows=[];this.table.innerHTML=""}.bind(this))}});var AtmosphericDensityGauge=Class.create({initialize:function(datalink,gaugeID){this.datalink=datalink;this.gaugeID=gaugeID;this.gauge=$(this.gaugeID);this.initializeDatalink();this.func=function(x){return Math.log(2*x)}},update:function(data){var max=this.func(100);var value=this.func(data["v.atmosphericPressure"]*100);if(!isFinite(value)){value=0}this.gauge.value=value;this.gauge.max=max},initializeDatalink:function(){this.datalink.subscribeToData(["v.atmosphericPressure"]);this.datalink.addReceiverFunction(this.update.bind(this))}});var ThrottleGauge=Class.create({initialize:function(datalink,gaugeID){this.datalink=datalink;this.gaugeID=gaugeID;this.gauge=$(this.gaugeID);this.initializeDatalink()},update:function(data){this.gauge.value=data["f.throttle"]*100;this.gauge.max=100},initializeDatalink:function(){this.datalink.subscribeToData(["f.throttle"]);this.datalink.addReceiverFunction(this.update.bind(this))}});!function(a,b){"function"==typeof define&&define.amd?define([],function(){return a.Chartist=b()}):"object"==typeof exports?module.exports=b():a.Chartist=b()}(this,function(){var a={version:"0.9.4"};return function(a,b,c){"use strict";c.noop=function(a){return a},c.alphaNumerate=function(a){return String.fromCharCode(97+a%26)},c.extend=function(a){a=a||{};var b=Array.prototype.slice.call(arguments,1);return b.forEach(function(b){for(var d in b)"object"!=typeof b[d]||null===b[d]||b[d]instanceof Array?a[d]=b[d]:a[d]=c.extend({},a[d],b[d])}),a},c.replaceAll=function(a,b,c){return a.replace(new RegExp(b,"g"),c)},c.stripUnit=function(a){return"string"==typeof a&&(a=a.replace(/[^0-9\+-\.]/g,"")),+a},c.ensureUnit=function(a,b){return"number"==typeof a&&(a+=b),a},c.querySelector=function(a){return a instanceof Node?a:b.querySelector(a)},c.times=function(a){return Array.apply(null,new Array(a))},c.sum=function(a,b){return a+(b?b:0)},c.mapMultiply=function(a){return function(b){return b*a}},c.mapAdd=function(a){return function(b){return b+a}},c.serialMap=function(a,b){var d=[],e=Math.max.apply(null,a.map(function(a){return a.length}));return c.times(e).forEach(function(c,e){var f=a.map(function(a){return a[e]});d[e]=b.apply(null,f)}),d},c.roundWithPrecision=function(a,b){var d=Math.pow(10,b||c.precision);return Math.round(a*d)/d},c.precision=8,c.escapingMap={"&":"&","<":"<",">":">",'"':""","'":"'"},c.serialize=function(a){return null===a||void 0===a?a:("number"==typeof a?a=""+a:"object"==typeof a&&(a=JSON.stringify({data:a})),Object.keys(c.escapingMap).reduce(function(a,b){return c.replaceAll(a,b,c.escapingMap[b])},a))},c.deserialize=function(a){if("string"!=typeof a)return a;a=Object.keys(c.escapingMap).reduce(function(a,b){return c.replaceAll(a,c.escapingMap[b],b)},a);try{a=JSON.parse(a),a=void 0!==a.data?a.data:a}catch(b){}return a},c.createSvg=function(a,b,d,e){var f;return b=b||"100%",d=d||"100%",Array.prototype.slice.call(a.querySelectorAll("svg")).filter(function(a){return a.getAttributeNS("http://www.w3.org/2000/xmlns/",c.xmlNs.prefix)}).forEach(function(b){a.removeChild(b)}),f=new c.Svg("svg").attr({width:b,height:d}).addClass(e).attr({style:"width: "+b+"; height: "+d+";"}),a.appendChild(f._node),f},c.reverseData=function(a){a.labels.reverse(),a.series.reverse();for(var b=0;bf.high&&(f.high=c),h&&ck,m=e?c.rho(j.range):0;if(e&&c.projectLength(a,1,j)>=d)j.step=1;else if(e&&m=d)j.step=m;else for(;;){if(l&&c.projectLength(a,j.step,j)<=d)j.step*=2;else{if(l||!(c.projectLength(a,j.step/2,j)>=d))break;if(j.step/=2,e&&j.step%1!==0){j.step*=2;break}}if(i++>1e3)throw new Error("Exceeded maximum number of iterations while optimizing scale step!")}for(g=j.min,h=j.max;g+j.step<=j.low;)g+=j.step;for(;h-j.step>=j.high;)h-=j.step;for(j.min=g,j.max=h,j.range=j.max-j.min,j.values=[],f=j.min;f<=j.max;f+=j.step)j.values.push(c.roundWithPrecision(f));return j},c.polarToCartesian=function(a,b,c,d){var e=(d-90)*Math.PI/180;return{x:a+c*Math.cos(e),y:b+c*Math.sin(e)}},c.createChartRect=function(a,b,d){var e=!(!b.axisX&&!b.axisY),f=e?b.axisY.offset:0,g=e?b.axisX.offset:0,h=a.width()||c.stripUnit(b.width)||0,i=a.height()||c.stripUnit(b.height)||0,j=c.normalizePadding(b.chartPadding,d);h=Math.max(h,f+j.left+j.right),i=Math.max(i,g+j.top+j.bottom);var k={padding:j,width:function(){return this.x2-this.x1},height:function(){return this.y1-this.y2}};return e?("start"===b.axisX.position?(k.y2=j.top+g,k.y1=Math.max(i-j.bottom,k.y2+1)):(k.y2=j.top,k.y1=Math.max(i-j.bottom-g,k.y2+1)),"start"===b.axisY.position?(k.x1=j.left+f,k.x2=Math.max(h-j.right,k.x1+1)):(k.x1=j.left,k.x2=Math.max(h-j.right-f,k.x1+1))):(k.x1=j.left,k.x2=Math.max(h-j.right,k.x1+1),k.y2=j.top,k.y1=Math.max(i-j.bottom,k.y2+1)),k},c.createGrid=function(a,b,d,e,f,g,h,i){var j={};j[d.units.pos+"1"]=a,j[d.units.pos+"2"]=a,j[d.counterUnits.pos+"1"]=e,j[d.counterUnits.pos+"2"]=e+f;var k=g.elem("line",j,h.join(" "));i.emit("draw",c.extend({type:"grid",axis:d,index:b,group:g,element:k},j))},c.createLabel=function(a,b,d,e,f,g,h,i,j,k,l){var m,n={};if(n[f.units.pos]=a+h[f.units.pos],n[f.counterUnits.pos]=h[f.counterUnits.pos],n[f.units.len]=b,n[f.counterUnits.len]=g-10,k){var o=''+e[d]+"";m=i.foreignObject(o,c.extend({style:"overflow: visible;"},n))}else m=i.elem("text",n,j.join(" ")).text(e[d]);l.emit("draw",c.extend({type:"label",axis:f,index:d,group:i,element:m,text:e[d]},n))},c.getSeriesOption=function(a,b,c){if(a.name&&b.series&&b.series[a.name]){var d=b.series[a.name];return d.hasOwnProperty(c)?d[c]:b[c]}return b[c]},c.optionsProvider=function(b,d,e){function f(b){var f=h;if(h=c.extend({},j),d)for(i=0;i1){var i=[];return h.forEach(function(a){i.push(g(a.pathCoordinates,a.valueData))}),c.Svg.Path.join(i)}if(a=h[0].pathCoordinates,d=h[0].valueData,a.length<=4)return c.Interpolation.none()(a,d);for(var j,k=(new c.Svg.Path).move(a[0],a[1],!1,d[0]),l=0,m=a.length;m-2*!j>l;l+=2){var n=[{x:+a[l-2],y:+a[l-1]},{x:+a[l],y:+a[l+1]},{x:+a[l+2],y:+a[l+3]},{x:+a[l+4],y:+a[l+5]}];j?l?m-4===l?n[3]={x:+a[0],y:+a[1]}:m-2===l&&(n[2]={x:+a[0],y:+a[1]},n[3]={x:+a[2],y:+a[3]}):n[0]={x:+a[m-2],y:+a[m-1]}:m-4===l?n[3]=n[2]:l||(n[0]={x:+a[l],y:+a[l+1]}),k.curve(e*(-n[0].x+6*n[1].x+n[2].x)/6+f*n[2].x,e*(-n[0].y+6*n[1].y+n[2].y)/6+f*n[2].y,e*(n[1].x+6*n[2].x-n[3].x)/6+f*n[2].x,e*(n[1].y+6*n[2].y-n[3].y)/6+f*n[2].y,n[2].x,n[2].y,!1,d[(l+2)/2])}return k}},c.Interpolation.step=function(a){var b={postpone:!0};return a=c.extend({},b,a),function(b,d){for(var e=new c.Svg.Path,f=!0,g=2;g1}).map(function(a){var b=a.pathElements[0],c=a.pathElements[a.pathElements.length-1];return a.clone(!0).position(0).remove(1).move(b.x,r).line(b.x,b.y).position(a.pathElements.length+1).line(c.x,r)}).forEach(function(h){var k=i.elem("path",{d:h.stringify()},a.classNames.area,!0).attr({values:b.normalized[g]},c.xmlNs.uri);this.eventEmitter.emit("draw",{type:"area",values:b.normalized[g],path:h.clone(),series:f,seriesIndex:g,axisX:d,axisY:e,chartRect:j,index:g,group:i,element:k})}.bind(this))}}.bind(this)),this.eventEmitter.emit("created",{bounds:e.bounds,chartRect:j,axisX:d,axisY:e,svg:this.svg,options:a})}function e(a,b,d,e){c.Line["super"].constructor.call(this,a,b,f,c.extend({},f,d),e)}var f={axisX:{offset:30,position:"end",labelOffset:{x:0,y:0},showLabel:!0,showGrid:!0,labelInterpolationFnc:c.noop,type:void 0},axisY:{offset:40,position:"start",labelOffset:{x:0,y:0},showLabel:!0,showGrid:!0,labelInterpolationFnc:c.noop,type:void 0,scaleMinSpace:20,onlyInteger:!1},width:void 0,height:void 0,showLine:!0,showPoint:!0,showArea:!1,areaBase:0,lineSmooth:!0,low:void 0,high:void 0,chartPadding:{top:15,right:15,bottom:5,left:10},fullWidth:!1,reverseData:!1,classNames:{chart:"ct-chart-line",label:"ct-label",labelGroup:"ct-labels",series:"ct-series",line:"ct-line",point:"ct-point",area:"ct-area",grid:"ct-grid",gridGroup:"ct-grids",vertical:"ct-vertical",horizontal:"ct-horizontal",start:"ct-start",end:"ct-end"}};c.Line=c.Base.extend({constructor:e,createChart:d})}(window,document,a),function(a,b,c){"use strict";function d(a){var b,d={raw:this.data,normalized:a.distributeSeries?c.getDataArray(this.data,a.reverseData,a.horizontalBars?"x":"y").map(function(a){return[a]}):c.getDataArray(this.data,a.reverseData,a.horizontalBars?"x":"y")};this.svg=c.createSvg(this.container,a.width,a.height,a.classNames.chart+(a.horizontalBars?" "+a.classNames.horizontalBars:""));var e=this.svg.elem("g").addClass(a.classNames.gridGroup),g=this.svg.elem("g"),h=this.svg.elem("g").addClass(a.classNames.labelGroup);if(a.stackBars){var i=c.serialMap(d.normalized,function(){return Array.prototype.slice.call(arguments).map(function(a){return a}).reduce(function(a,b){return{x:a.x+b.x||0,y:a.y+b.y||0}},{x:0,y:0})});b=c.getHighLow([i],c.extend({},a,{referenceValue:0}),a.horizontalBars?"x":"y")}else b=c.getHighLow(d.normalized,c.extend({},a,{referenceValue:0}),a.horizontalBars?"x":"y");b.high=+a.high||(0===a.high?0:b.high),b.low=+a.low||(0===a.low?0:b.low);var j,k,l,m,n,o=c.createChartRect(this.svg,a,f.padding);k=a.distributeSeries&&a.stackBars?d.raw.labels.slice(0,1):d.raw.labels,a.horizontalBars?(j=m=void 0===a.axisX.type?new c.AutoScaleAxis(c.Axis.units.x,d,o,c.extend({},a.axisX,{highLow:b,referenceValue:0})):a.axisX.type.call(c,c.Axis.units.x,d,o,c.extend({},a.axisX,{highLow:b,referenceValue:0})),l=n=void 0===a.axisY.type?new c.StepAxis(c.Axis.units.y,d,o,{ticks:k}):a.axisY.type.call(c,c.Axis.units.y,d,o,a.axisY)):(l=m=void 0===a.axisX.type?new c.StepAxis(c.Axis.units.x,d,o,{ticks:k}):a.axisX.type.call(c,c.Axis.units.x,d,o,a.axisX),j=n=void 0===a.axisY.type?new c.AutoScaleAxis(c.Axis.units.y,d,o,c.extend({},a.axisY,{highLow:b,referenceValue:0})):a.axisY.type.call(c,c.Axis.units.y,d,o,c.extend({},a.axisY,{highLow:b,referenceValue:0})));var p=a.horizontalBars?o.x1+j.projectValue(0):o.y1-j.projectValue(0),q=[];l.createGridAndLabels(e,h,this.supportsForeignObject,a,this.eventEmitter),j.createGridAndLabels(e,h,this.supportsForeignObject,a,this.eventEmitter),d.raw.series.forEach(function(b,e){var f,h,i=e-(d.raw.series.length-1)/2;f=a.distributeSeries&&!a.stackBars?l.axisLength/d.normalized.length/2:a.distributeSeries&&a.stackBars?l.axisLength/2:l.axisLength/d.normalized[e].length/2,h=g.elem("g"),h.attr({"series-name":b.name,meta:c.serialize(b.meta)},c.xmlNs.uri),h.addClass([a.classNames.series,b.className||a.classNames.series+"-"+c.alphaNumerate(e)].join(" ")),d.normalized[e].forEach(function(g,k){var r,s,t,u;if(u=a.distributeSeries&&!a.stackBars?e:a.distributeSeries&&a.stackBars?0:k,r=a.horizontalBars?{x:o.x1+j.projectValue(g&&g.x?g.x:0,k,d.normalized[e]),y:o.y1-l.projectValue(g&&g.y?g.y:0,u,d.normalized[e])}:{x:o.x1+l.projectValue(g&&g.x?g.x:0,u,d.normalized[e]),y:o.y1-j.projectValue(g&&g.y?g.y:0,k,d.normalized[e])},l instanceof c.StepAxis&&(l.options.stretch||(r[l.units.pos]+=f*(a.horizontalBars?-1:1)),r[l.units.pos]+=a.stackBars||a.distributeSeries?0:i*a.seriesBarDistance*(a.horizontalBars?-1:1)),t=q[k]||p,q[k]=t-(p-r[l.counterUnits.pos]),void 0!==g){var v={};v[l.units.pos+"1"]=r[l.units.pos],v[l.units.pos+"2"]=r[l.units.pos],v[l.counterUnits.pos+"1"]=a.stackBars?t:p,v[l.counterUnits.pos+"2"]=a.stackBars?q[k]:r[l.counterUnits.pos],v.x1=Math.min(Math.max(v.x1,o.x1),o.x2),v.x2=Math.min(Math.max(v.x2,o.x1),o.x2),v.y1=Math.min(Math.max(v.y1,o.y2),o.y1),v.y2=Math.min(Math.max(v.y2,o.y2),o.y1),s=h.elem("line",v,a.classNames.bar).attr({value:[g.x,g.y].filter(function(a){return a}).join(","),meta:c.getMetaData(b,k)},c.xmlNs.uri),this.eventEmitter.emit("draw",c.extend({type:"bar",value:g,index:k,meta:c.getMetaData(b,k),series:b,seriesIndex:e,axisX:m,axisY:n,chartRect:o,group:h,element:s},v))}}.bind(this))}.bind(this)),this.eventEmitter.emit("created",{bounds:j.bounds,chartRect:o,axisX:m,axisY:n,svg:this.svg,options:a})}function e(a,b,d,e){c.Bar["super"].constructor.call(this,a,b,f,c.extend({},f,d),e)}var f={axisX:{offset:30,position:"end",labelOffset:{x:0,y:0},showLabel:!0,showGrid:!0,labelInterpolationFnc:c.noop,scaleMinSpace:30,onlyInteger:!1},axisY:{offset:40,position:"start",labelOffset:{x:0,y:0},showLabel:!0,showGrid:!0,labelInterpolationFnc:c.noop,scaleMinSpace:20,onlyInteger:!1},width:void 0,height:void 0,high:void 0,low:void 0,onlyInteger:!1,chartPadding:{top:15,right:15,bottom:5,left:10},seriesBarDistance:15,stackBars:!1,horizontalBars:!1,distributeSeries:!1,reverseData:!1,classNames:{chart:"ct-chart-bar",horizontalBars:"ct-horizontal-bars",label:"ct-label",labelGroup:"ct-labels",series:"ct-series",bar:"ct-bar",grid:"ct-grid",gridGroup:"ct-grids",vertical:"ct-vertical",horizontal:"ct-horizontal",start:"ct-start",end:"ct-end"}};c.Bar=c.Base.extend({constructor:e,createChart:d})}(window,document,a),function(a,b,c){"use strict";function d(a,b,c){var d=b.x>a.x;return d&&"explode"===c||!d&&"implode"===c?"start":d&&"implode"===c||!d&&"explode"===c?"end":"middle"}function e(a){var b,e,f,h,i,j=[],k=a.startAngle,l=c.getDataArray(this.data,a.reverseData);this.svg=c.createSvg(this.container,a.width,a.height,a.donut?a.classNames.chartDonut:a.classNames.chartPie),e=c.createChartRect(this.svg,a,g.padding),f=Math.min(e.width()/2,e.height()/2),i=a.total||l.reduce(function(a,b){return a+b},0),f-=a.donut?a.donutWidth/2:0,h="outside"===a.labelPosition||a.donut?f:"center"===a.labelPosition?0:f/2,h+=a.labelOffset;var m={x:e.x1+e.width()/2,y:e.y2+e.height()/2},n=1===this.data.series.filter(function(a){return a.hasOwnProperty("value")?0!==a.value:0!==a}).length;a.showLabel&&(b=this.svg.elem("g",null,null,!0));for(var o=0;o180,0,r.x,r.y);a.donut||t.line(m.x,m.y);var u=j[o].elem("path",{d:t.stringify()},a.donut?a.classNames.sliceDonut:a.classNames.slicePie);if(u.attr({value:l[o],meta:c.serialize(p.meta)},c.xmlNs.uri),a.donut&&u.attr({style:"stroke-width: "+ +a.donutWidth+"px"}),this.eventEmitter.emit("draw",{type:"slice",value:l[o],totalDataSum:i,index:o,meta:p.meta,series:p,group:j[o],element:u,path:t.clone(),center:m,radius:f,startAngle:k,endAngle:q}),a.showLabel){var v=c.polarToCartesian(m.x,m.y,h,k+(q-k)/2),w=a.labelInterpolationFnc(this.data.labels?this.data.labels[o]:l[o],o);if(w||0===w){var x=b.elem("text",{dx:v.x,dy:v.y,"text-anchor":d(m,v,a.labelDirection)},a.classNames.label).text(""+w);this.eventEmitter.emit("draw",{type:"label",index:o,group:b,element:x,text:""+w,x:v.x,y:v.y})}}k=q}this.eventEmitter.emit("created",{chartRect:e,svg:this.svg,options:a})}function f(a,b,d,e){c.Pie["super"].constructor.call(this,a,b,g,c.extend({},g,d),e)}var g={width:void 0,height:void 0,chartPadding:5,classNames:{chartPie:"ct-chart-pie",chartDonut:"ct-chart-donut",series:"ct-series",slicePie:"ct-slice-pie",sliceDonut:"ct-slice-donut",label:"ct-label"},startAngle:0,total:void 0,donut:!1,donutWidth:60,showLabel:!0,labelOffset:0,labelPosition:"inside",labelInterpolationFnc:c.noop,labelDirection:"neutral",reverseData:!1};c.Pie=c.Base.extend({constructor:f,createChart:e,determineAnchorPosition:d})}(window,document,a),a});L.Graticule=L.GeoJSON.extend({options:{style:{color:"#333",weight:1},interval:20},initialize:function(options){L.Util.setOptions(this,options);this._layers={};if(this.options.sphere){this.addData(this._getFrame())}else{this.addData(this._getGraticule())}},_getFrame:function(){return{type:"Polygon",coordinates:[this._getMeridian(-180).concat(this._getMeridian(180).reverse())]}},_getGraticule:function(){var features=[],interval=this.options.interval;for(var lng=0;lng<=180;lng=lng+interval){features.push(this._getFeature(this._getMeridian(lng),{name:lng?lng.toString()+"° E":"Prime meridian"}));if(lng!==0){features.push(this._getFeature(this._getMeridian(-lng),{name:lng.toString()+"° W"}))}}for(var lat=0;lat<=90;lat=lat+interval){features.push(this._getFeature(this._getParallel(lat),{name:lat?lat.toString()+"° N":"Equator"}));if(lat!==0){features.push(this._getFeature(this._getParallel(-lat),{name:lat.toString()+"° S"}))}}return{type:"FeatureCollection",features:features}},_getMeridian:function(lng){lng=this._lngFix(lng);var coords=[];for(var lat=-90;lat<=90;lat++){coords.push([lng,lat])}return coords},_getParallel:function(lat){var coords=[];for(var lng=-180;lng<=180;lng++){coords.push([this._lngFix(lng),lat])}return coords},_getFeature:function(coords,prop){return{type:"Feature",geometry:{type:"LineString",coordinates:coords},properties:prop}},_lngFix:function(lng){if(lng>=180)return 179.999999;if(lng<=-180)return-179.999999;return lng}});L.graticule=function(options){return new L.Graticule(options)};var PositionMap=Class.create({initialize:function(datalink,mapId,options){this.datalink=datalink;this.mapId=mapId;this.noMapIndicatorId=mapId+"-no-map";this.previousBody="KERBIN";this.options=Object.extend({lockOnVessel:true},options);this.initializeMap();this.initializeNoMapIndicator();this.initializeDatalink()},update:function(data){window.requestAnimationFrame(function(){if(this.isMapAvailable(data)){this.showMap();this.updateBodyIfNecessary(data);this.setCoordinatesForMapObject(this.coordinates,data["v.lat"],data["v.long"]);if(this.options.lockOnVessel){this.map.panTo([data["v.lat"],data["v.long"]])}}else{this.hideMap()}}.bind(this))},updateBodyIfNecessary:function(data){var bodyName=data["v.body"].toUpperCase();if(this.previousBody!=bodyName){newBody=L.KSP.CelestialBody[bodyName];newBody.addTo(this.map);this.previousBody=bodyName}},initializeMap:function(){this.map=new L.KSP.Map(this.mapId,{layers:[L.KSP.CelestialBody[this.previousBody.toUpperCase()]],zoom:"fit",bodyControl:false,layerControl:true,scaleControl:true});this.map.fitWorld();L.graticule().addTo(this.map);var circleMarkerOptions={color:"#FD7E23",opacity:1,fillOpacity:1,radius:5};this.coordinates=L.circleMarker([0,0],circleMarkerOptions);this.coordinates.addTo(this.map)},convertCoordinatesToMap:function(latitude,longitude){return[latitude,longitude>180?longitude-360:longitude]},setCoordinatesForMapObject:function(object,latitude,longitude){var convertedCoordinates=this.convertCoordinatesToMap(latitude,longitude);object.setLatLng([convertedCoordinates[0],convertedCoordinates[1]])},isMapAvailable:function(data){return data["v.body"].toUpperCase()!="SUN"},hideMap:function(){$(this.mapId).hide();this.noMapIndicator.removeClassName("hidden")},showMap:function(){$(this.mapId).show();this.noMapIndicator.addClassName("hidden")},initializeNoMapIndicator:function(){this.noMapIndicator=$(this.noMapIndicatorId)},initializeDatalink:function(){this.datalink.subscribeToData(["v.lat","v.long","v.body"]);this.datalink.addReceiverFunction(this.update.bind(this))}});var OrbitalPositionData=Class.create({initialize:function(datalink,options){this.datalink=datalink;this.initializeDatalink();this.timeoutRate=1e3;this.mutexTimestamp=null;this.rootReferenceBody=null;this.options=Object.extend({onRecalculate:null,numberOfSegments:120},options)},isLocked:function(){this.mutexTimestamp&&this.mutexTimestamp<(Date.now()/1e3|0)+this.timeoutRate},mutexLock:function(){this.mutexTimestamp=Date.now()},mutexUnlock:function(){this.mutexTimestamp=null},recalculate:function(data){if(this.isLocked()){return}this.mutexLock();Object.extend(data,{currentUniversalTime:this.adjustUniversalTime(data["t.universalTime"]),vesselBody:data["v.body"],vesselCurrentPosition:{relativePosition:null},targetCurrentPosition:{relativePosition:null}});this.getPositionsAndRecalculate(data)},getPositionsAndRecalculate:function(positionData){var requestParams={};var referenceBody=this.datalink.getOrbitalBodyInfo(positionData["vesselBody"]);this.rootReferenceBody=referenceBody;requestParams["currentReferenceBodyRadius"]="b.radius["+referenceBody.id+"]";requestParams["currentReferenceBodyTruePosition"]="b.o.truePositionAtUT["+referenceBody.id+","+positionData["currentUniversalTime"]+"]";requestParams["vesselCurrentPositionRelativePosition"]="o.relativePositionAtUTForOrbitPatch["+0+","+positionData["currentUniversalTime"]+"]";this.buildRelativePositionRequestsForOrbitPatches(requestParams,"vesselCurrentOrbit",positionData["o.orbitPatches"],positionData["currentUniversalTime"]);this.buildRelativePositionRequestsForManeuverNodeOrbitPatches(requestParams,"vesselManeuverNodes",positionData["o.maneuverNodes"],positionData["currentUniversalTime"]);if(positionData["tar.type"]){if(positionData["tar.o.orbitPatches"]&&positionData["tar.o.orbitPatches"].length>0){this.buildRelativePositionRequestsForOrbitPatches(requestParams,"targetCurrentOrbit",positionData["tar.o.orbitPatches"],positionData["currentUniversalTime"],"tar.o");requestParams["targetCurrentPositionRelativePosition"]="tar.o.relativePositionAtUTForOrbitPatch["+0+","+positionData["currentUniversalTime"]+"]"}else{var body=this.datalink.getOrbitalBodyInfo(positionData["tar.name"]);requestParams[body.name+"[metadata]radius"]="b.radius["+body.id+"]";requestParams[body.name+"["+positionData["currentUniversalTime"]+"]TruePosition"]="b.o.truePositionAtUT["+body.id+","+positionData["currentUniversalTime"]+"]";requestParams[body.name+"[metadata]currentTruePosition"]="b.o.truePositionAtUT["+body.id+","+positionData["currentUniversalTime"]+"]"}}this.datalink.sendMessage(requestParams,function(data){positionData["currentReferenceBodyRadius"]=data["currentReferenceBodyRadius"];positionData["currentReferenceBodyTruePosition"]=data["currentReferenceBodyTruePosition"];this.buildReferenceBodyPositionData(data,positionData);this.buildReferenceBodyMetadata(data,positionData);positionData["vesselCurrentPosition"]["relativePosition"]=data["vesselCurrentPositionRelativePosition"];this.buildRelativePositionPositionDataForOrbitPatches(data,positionData,"vesselCurrentOrbit","o.orbitPatches");if(positionData["o.maneuverNodes"]){this.buildRelativePositionPositionDataForManeuverNodeOrbitPatches(data,positionData,"vesselManeuverNodes","o.maneuverNodes")}if(positionData["tar.o.orbitPatches"]){this.buildRelativePositionPositionDataForOrbitPatches(data,positionData,"targetCurrentOrbit","tar.o.orbitPatches","tar.o");positionData["targetCurrentPosition"]["relativePosition"]=data["targetCurrentPositionRelativePosition"]}this.mutexUnlock();this.options.onRecalculate&&this.options.onRecalculate(positionData)}.bind(this))},buildRelativePositionRequestsForOrbitPatches:function(requestParams,orbitPatchType,orbitPatches,currentUniversalTime,requestPrefix){requestPrefix=requestPrefix||"o";for(var i=0;iendUT){UTForInterval=endUT}requestParams[this.rootReferenceBody.name+"["+UTForInterval+"]TruePosition"]="b.o.truePositionAtUT["+this.rootReferenceBody.id+","+UTForInterval+"]";requestParams[orbitPatchType+"["+i+"]["+UTForInterval+"]RelativePosition"]=requestPrefix+".relativePositionAtUTForOrbitPatch["+i+","+UTForInterval+"]";requestParams[orbitPatch["referenceBody"]+"["+UTForInterval+"]TruePosition"]="b.o.truePositionAtUT["+referenceBody.id+","+UTForInterval+"]"}requestParams[orbitPatch["referenceBody"]+"[metadata]radius"]="b.radius["+referenceBody.id+"]";requestParams[orbitPatch["referenceBody"]+"[metadata]currentTruePosition"]="b.o.truePositionAtUT["+referenceBody.id+","+currentUniversalTime+"]"}},buildRelativePositionRequestsForManeuverNodeOrbitPatches:function(requestParams,maneuverNodeType,maneuverNodes,currentUniversalTime){var requestPrefix="o.maneuverNodes.relativePositionAtUTForManeuverNodesOrbitPatch";for(var i=0;iendUT){UTForInterval=endUT; +Math.cosh = Math.cosh || function(x) { + return (Math.exp(x) + Math.exp(-x)) / 2; +} -}var args=[i,j,UTForInterval];requestParams[this.rootReferenceBody.name+"["+UTForInterval+"]TruePosition"]="b.o.truePositionAtUT["+this.rootReferenceBody.id+","+UTForInterval+"]";requestParams[labelPrefix+"["+j+"]["+UTForInterval+"]RelativePosition"]=requestPrefix+"["+args.join(",")+"]";requestParams[orbitPatch["referenceBody"]+"["+UTForInterval+"]TruePosition"]="b.o.truePositionAtUT["+referenceBody.id+","+UTForInterval+"]"}requestParams[orbitPatch["referenceBody"]+"[metadata]radius"]="b.radius["+referenceBody.id+"]";requestParams[orbitPatch["referenceBody"]+"[metadata]currentTruePosition"]="b.o.truePositionAtUT["+referenceBody.id+","+currentUniversalTime+"]"}}},buildRelativePositionPositionDataForOrbitPatches:function(rawData,positionData,orbitPatchType,orbitPatchesKey){var relativePositionFieldRegex=new RegExp(orbitPatchType+"\\[(\\d+)\\]\\[([\\d\\.]+)\\]RelativePosition");var orbitPatches=positionData[orbitPatchesKey]=positionData[orbitPatchesKey]||{};var rawDataKeys=Object.keys(rawData);for(var i=rawDataKeys.length-1;i>=0;i--){var key=rawDataKeys[i];if(relativePositionFieldRegex.test(key)){var matchParts=relativePositionFieldRegex.exec(key);var orbitPatchIndex=parseInt(matchParts[1]);var universalTime=matchParts[2];var relativePosition=rawData[key];var orbitPatch=orbitPatches[orbitPatchIndex]=orbitPatches[orbitPatchIndex]||{};var orbitPatchPositionData=orbitPatch["positionData"]=orbitPatch["positionData"]||{};orbitPatchPositionData[universalTime]=orbitPatchPositionData[universalTime]||{};orbitPatchPositionData[universalTime]["relativePosition"]=relativePosition}}},buildRelativePositionPositionDataForManeuverNodeOrbitPatches:function(rawData,positionData,maneuverNodeType,maneuverNodesKey){var relativePositionFieldRegex=new RegExp(maneuverNodeType+"\\[(\\d+)\\]\\[(\\d+)\\]\\[([\\d\\.]+)\\]RelativePosition");var maneuverNodes=positionData[maneuverNodesKey]=positionData[maneuverNodesKey]||{};var rawDataKeys=Object.keys(rawData);for(var i=rawDataKeys.length-1;i>=0;i--){var key=rawDataKeys[i];if(relativePositionFieldRegex.test(key)){var matchParts=relativePositionFieldRegex.exec(key);var maneuverNodeIndex=parseInt(matchParts[1]);var orbitPatchIndex=parseInt(matchParts[2]);var universalTime=matchParts[3];var relativePosition=rawData[key];var orbitPatch=maneuverNodes[maneuverNodeIndex]["orbitPatches"][orbitPatchIndex]=maneuverNodes[maneuverNodeIndex]["orbitPatches"][orbitPatchIndex]||{};var orbitPatchPositionData=orbitPatch["positionData"]=orbitPatch["positionData"]||{};orbitPatchPositionData[universalTime]=orbitPatchPositionData[universalTime]||{};orbitPatchPositionData[universalTime]["relativePosition"]=relativePosition}}},buildReferenceBodyPositionData:function(rawData,positionData){var referenceBodyTruePositionRegex=new RegExp(/(\w+)\[([\d\.]+)\]TruePosition$/);var rawDataKeys=Object.keys(rawData);for(var i=rawDataKeys.length-1;i>=0;i--){var key=rawDataKeys[i];if(referenceBodyTruePositionRegex.test(key)){var matchParts=referenceBodyTruePositionRegex.exec(key);var referenceBodyName=matchParts[1];var universalTime=matchParts[2];var truePosition=rawData[key];var referenceBodies=positionData["referenceBodies"]=positionData["referenceBodies"]||{};var referenceBodyObject=referenceBodies[referenceBodyName]=referenceBodies[referenceBodyName]||{};referenceBodyObject["positionData"]=referenceBodyObject["positionData"]||{};referenceBodyObject["positionData"][universalTime]=referenceBodyObject["positionData"][universalTime]||{};referenceBodyObject["positionData"][universalTime]["truePosition"]=truePosition}}},buildReferenceBodyMetadata:function(rawData,positionData){var referenceBodyTruePositionRegex=new RegExp(/(\w+)\[metadata\](\w+)$/);var rawDataKeys=Object.keys(rawData);for(var i=rawDataKeys.length-1;i>=0;i--){var key=rawDataKeys[i];if(referenceBodyTruePositionRegex.test(key)){var matchParts=referenceBodyTruePositionRegex.exec(key);var referenceBodyName=matchParts[1];var field=matchParts[2];var data=rawData[key];var referenceBodies=positionData["referenceBodies"]=positionData["referenceBodies"]||{};var referenceBodyObject=referenceBodies[referenceBodyName]=referenceBodies[referenceBodyName]||{};referenceBodyObject[field]=data}}},adjustUniversalTime:function(ut){return ut},initializeDatalink:function(){this.datalink.subscribeToData(["o.orbitPatches","t.universalTime","v.body","tar.name","tar.type","tar.o.orbitingBody","tar.o.orbitPatches","o.maneuverNodes"]);this.datalink.addReceiverFunction(this.recalculate.bind(this))}});var GroundTrackPositionDataFormatter=Class.create({initialize:function(orbitalPositionData,datalink,options){this.datalink=datalink;this.orbitalPositionData=orbitalPositionData;this.orbitalPositionData.options.onRecalculate=this.format.bind(this);this.rootReferenceBodyName=null;this.currentUniversalTime=null;this.options=Object.extend({onFormat:null,numberOfSegments:120},options)},format:function(positionData){var formattedData={vesselCurrentCoordinates:null,targetCurrentCoordinates:null,vesselSuborbitalPaths:[],vesselOrbitalPaths:[],targetSuborbitalPaths:[],targetOrbitalPaths:[],currentUniversalTime:positionData.currentUniversalTime,referenceBodyName:positionData.vesselBody,atmosphericRadius:this.datalink.getOrbitalBodyInfo(positionData.vesselBody).atmosphericRadius};this.currentUniversalTime=positionData.currentUniversalTime;this.formatVesselCurrentCoordinates(positionData,formattedData);this.formatTargetCurrentCoordinates(positionData,formattedData);this.formatVesselOrbitalPaths(positionData,formattedData);this.formatTargetOrbitalPaths(positionData,formattedData);this.options.onFormat&&this.options.onFormat(formattedData)},formatVesselCurrentCoordinates:function(positionData,formattedData){this.rootReferenceBodyName=positionData["vesselBody"];var currentPosition=positionData["vesselCurrentPosition"]["relativePosition"];var info=this.rootReferenceBody(positionData);formattedData.vesselCurrentCoordinates=this.coordinatesFromVector(currentPosition,info.radius)},formatTargetCurrentCoordinates:function(positionData,formattedData){if(this.rootReferenceBodyName!=positionData["tar.o.orbitingBody"]){return}if(positionData["tar.type"]!="Vessel"){return}var currentPosition=positionData["targetCurrentPosition"]["relativePosition"];var info=this.rootReferenceBody(positionData);formattedData.targetCurrentCoordinates=this.coordinatesFromVector(currentPosition,info.radius)},formatVesselOrbitalPaths:function(positionData,formattedData){var parentType="currentVessel";var orbitPatches=positionData["o.orbitPatches"];var pathSet=this.formatPathSet(positionData,orbitPatches,parentType,"orbitPath");formattedData.vesselOrbitalPaths=formattedData.vesselOrbitalPaths.concat(pathSet.filter(function(x){return x.type=="orbital"}));formattedData.vesselSuborbitalPaths=formattedData.vesselSuborbitalPaths.concat(pathSet.filter(function(x){return x.type=="suborbital"}));this.formatManeuverNodes(positionData,formattedData,positionData["o.maneuverNodes"],parentType)},formatTargetOrbitalPaths:function(positionData,formattedData){if(positionData["tar.type"]!="Vessel"){return}var parentType="targetVessel";var orbitPatches=positionData["tar.o.orbitPatches"];var pathSet=this.formatPathSet(positionData,orbitPatches,parentType,"orbitPath");formattedData.targetOrbitalPaths=pathSet.filter(function(x){return x.type=="orbital"});formattedData.targetSuborbitalPaths=pathSet.filter(function(x){return x.type=="suborbital"})},formatManeuverNodes:function(positionData,formattedData,maneuverNodes,parentType){for(var i=0;iorbitalClearanceDistance){var type="orbital"}else{var type="suborbital"}if(type!=currentPathType){currentPathSet=this.buildOrbitPath({type:type,parentType:parentType,pathType:pathType,points:[],altitudes:[]});pathSets.push(currentPathSet)}currentPathSet.points.push(coordinates);currentPathSet.altitudes.push({time:sortedUniversalTimes[j],altitude:length-info.radius});currentPathType=type}}return pathSets},buildOrbitPath:function(options){return{type:options.type,pathType:options.pathType,parentType:options.parentType,points:options.points,altitudes:options.altitudes}},vectorLength:function(vector){return Math.sqrt(Math.pow(vector[0],2)+Math.pow(vector[1],2)+Math.pow(vector[2],2))},coordinatesFromVector:function(vector,radius){var x=vector[0];var y=vector[1];var z=vector[2];var lat=90-Math.acos(z/radius)*180/Math.PI;var lon=(270+Math.atan2(x,y)*180/Math.PI)%360-180;if(!isNaN(lat)&&!isNaN(lon)){return[lat,lon]}else{return[]}},sortedUniversalTimes:function(positionData){var positionDataKeys=Object.keys(positionData);return positionDataKeys.map(function(x){return parseFloat(x)}).sortBy(function(x){x}).reverse()},orbitalClearanceDistance:function(positionData){return this.rootReferenceBody(positionData).radius+this.datalink.getOrbitalBodyInfo(this.rootReferenceBodyName).atmosphericRadius},rootReferenceBody:function(positionData){return positionData.referenceBodies[this.rootReferenceBodyName]}});var GroundTrack=Class.create({initialize:function(datalink,positionDataFormatter,map_id,altitudeEstimationId){this.datalink=datalink;this.positionDataFormatter=positionDataFormatter;this.map_id=map_id;this.altitudeEstimationId=altitudeEstimationId;this.vesselColor="#F5A623";this.vesselSuborbitalColor="red";this.maneuverNodeColor="#b4f489";this.targetColor="#987cf9";this.targetSuborbitalColor="#f97292";this.initializeAltitudeEstimate();this.initializeMap();this.positionDataFormatter.options.onFormat=this.render.bind(this)},render:function(formattedData){this.renderVesselCurrentCoordinates(formattedData);this.renderTargetCurrentCoordinates(formattedData);this.renderVesselOrbitPaths(formattedData);this.renderTargetOrbitPaths(formattedData);this.updateAltitudeEstimateChart(formattedData)},renderVesselCurrentCoordinates:function(formattedData){var coordinates=formattedData.vesselCurrentCoordinates;if(!coordinates){return}this.positionMap.setCoordinatesForMapObject(this.markers.vesselCoordinates,coordinates[0],coordinates[1])},renderTargetCurrentCoordinates:function(formattedData){var coordinates=formattedData.targetCurrentCoordinates;if(!coordinates){return}this.positionMap.setCoordinatesForMapObject(this.markers.targetCoordinates,coordinates[0],coordinates[1])},renderVesselOrbitPaths:function(formattedData){this.renderOrbitPaths(this.markers.vesselOrbitalPaths,formattedData.vesselOrbitalPaths,{color:this.vesselColor});this.renderOrbitPaths(this.markers.vesselSuborbitalPaths,formattedData.vesselSuborbitalPaths,{color:this.vesselSuborbitalColor})},renderTargetOrbitPaths:function(formattedData){this.renderOrbitPaths(this.markers.targetOrbitalPaths,formattedData.targetOrbitalPaths,{color:this.targetColor});this.renderOrbitPaths(this.markers.targetSuborbitalPaths,formattedData.targetSuborbitalPaths,{color:this.targetSuborbitalColor})},renderOrbitPaths:function(markers,orbitPaths,lineOptions){for(var i=markers.length-1;i>=0;i--){markers[i].setLatLngs([])}for(var i=0;i0){var startTime=parseFloat(sortedUniversalTimes.first());var endTime=parseFloat(sortedUniversalTimes.last());var totalDelta=sortedUniversalTimes.length;var intervalPeriod=Math.floor(totalDelta/maxLabelSections)}for(var i=0;i0){var startTime=parseFloat(sortedUniversalTimes[0])}for(var i=0;i-1?e(a,b,c):b.indexOf("%")>-1?f(a,b,c):b.indexOf(":")>-1?g(a,b):i(a._value,b,c)}function d(a,b){var c,d,e,f,g,i=b,j=["KB","MB","GB","TB","PB","EB","ZB","YB"],k=!1;if(b.indexOf(":")>-1)a._value=h(b);else if(b===q)a._value=0;else{for("."!==o[p].delimiters.decimal&&(b=b.replace(/\./g,"").replace(o[p].delimiters.decimal,".")),c=new RegExp("[^a-zA-Z]"+o[p].abbreviations.thousand+"(?:\\)|(\\"+o[p].currency.symbol+")?(?:\\))?)?$"),d=new RegExp("[^a-zA-Z]"+o[p].abbreviations.million+"(?:\\)|(\\"+o[p].currency.symbol+")?(?:\\))?)?$"),e=new RegExp("[^a-zA-Z]"+o[p].abbreviations.billion+"(?:\\)|(\\"+o[p].currency.symbol+")?(?:\\))?)?$"),f=new RegExp("[^a-zA-Z]"+o[p].abbreviations.trillion+"(?:\\)|(\\"+o[p].currency.symbol+")?(?:\\))?)?$"),g=0;g<=j.length&&!(k=b.indexOf(j[g])>-1?Math.pow(1024,g+1):!1);g++);a._value=(k?k:1)*(i.match(c)?Math.pow(10,3):1)*(i.match(d)?Math.pow(10,6):1)*(i.match(e)?Math.pow(10,9):1)*(i.match(f)?Math.pow(10,12):1)*(b.indexOf("%")>-1?.01:1)*((b.split("-").length+Math.min(b.split("(").length-1,b.split(")").length-1))%2?1:-1)*Number(b.replace(/[^0-9\.]+/g,"")),a._value=k?Math.ceil(a._value):a._value}return a._value}function e(a,b,c){var d,e,f=b.indexOf("$"),g=b.indexOf("("),h=b.indexOf("-"),j="";return b.indexOf(" $")>-1?(j=" ",b=b.replace(" $","")):b.indexOf("$ ")>-1?(j=" ",b=b.replace("$ ","")):b=b.replace("$",""),e=i(a._value,b,c),1>=f?e.indexOf("(")>-1||e.indexOf("-")>-1?(e=e.split(""),d=1,(g>f||h>f)&&(d=0),e.splice(d,0,o[p].currency.symbol+j),e=e.join("")):e=o[p].currency.symbol+j+e:e.indexOf(")")>-1?(e=e.split(""),e.splice(-1,0,j+o[p].currency.symbol),e=e.join("")):e=e+j+o[p].currency.symbol,e}function f(a,b,c){var d,e="",f=100*a._value;return b.indexOf(" %")>-1?(e=" ",b=b.replace(" %","")):b=b.replace("%",""),d=i(f,b,c),d.indexOf(")")>-1?(d=d.split(""),d.splice(-1,0,e+"%"),d=d.join("")):d=d+e+"%",d}function g(a){var b=Math.floor(a._value/60/60),c=Math.floor((a._value-60*b*60)/60),d=Math.round(a._value-60*b*60-60*c);return b+":"+(10>c?"0"+c:c)+":"+(10>d?"0"+d:d)}function h(a){var b=a.split(":"),c=0;return 3===b.length?(c+=60*Number(b[0])*60,c+=60*Number(b[1]),c+=Number(b[2])):2===b.length&&(c+=60*Number(b[0]),c+=Number(b[1])),Number(c)}function i(a,c,d){var e,f,g,h,i,j,k=!1,l=!1,m=!1,n="",r=!1,s=!1,t=!1,u=!1,v=!1,w="",x="",y=Math.abs(a),z=["B","KB","MB","GB","TB","PB","EB","ZB","YB"],A="",B=!1;if(0===a&&null!==q)return q;if(c.indexOf("(")>-1?(k=!0,c=c.slice(1,-1)):c.indexOf("+")>-1&&(l=!0,c=c.replace(/\+/g,"")),c.indexOf("a")>-1&&(r=c.indexOf("aK")>=0,s=c.indexOf("aM")>=0,t=c.indexOf("aB")>=0,u=c.indexOf("aT")>=0,v=r||s||t||u,c.indexOf(" a")>-1?(n=" ",c=c.replace(" a","")):c=c.replace("a",""),y>=Math.pow(10,12)&&!v||u?(n+=o[p].abbreviations.trillion,a/=Math.pow(10,12)):y=Math.pow(10,9)&&!v||t?(n+=o[p].abbreviations.billion,a/=Math.pow(10,9)):y=Math.pow(10,6)&&!v||s?(n+=o[p].abbreviations.million,a/=Math.pow(10,6)):(y=Math.pow(10,3)&&!v||r)&&(n+=o[p].abbreviations.thousand,a/=Math.pow(10,3))),c.indexOf("b")>-1)for(c.indexOf(" b")>-1?(w=" ",c=c.replace(" b","")):c=c.replace("b",""),g=0;g<=z.length;g++)if(e=Math.pow(1024,g),f=Math.pow(1024,g+1),a>=e&&f>a){w+=z[g],e>0&&(a/=e);break}return c.indexOf("o")>-1&&(c.indexOf(" o")>-1?(x=" ",c=c.replace(" o","")):c=c.replace("o",""),x+=o[p].ordinal(a)),c.indexOf("[.]")>-1&&(m=!0,c=c.replace("[.]",".")),h=a.toString().split(".")[0],i=c.split(".")[1],j=c.indexOf(","),i?(i.indexOf("[")>-1?(i=i.replace("]",""),i=i.split("["),A=b(a,i[0].length+i[1].length,d,i[1].length)):A=b(a,i.length,d),h=A.split(".")[0],A=A.split(".")[1].length?o[p].delimiters.decimal+A.split(".")[1]:"",m&&0===Number(A.slice(1))&&(A="")):h=b(a,null,d),h.indexOf("-")>-1&&(h=h.slice(1),B=!0),j>-1&&(h=h.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g,"$1"+o[p].delimiters.thousands)),0===c.indexOf(".")&&(h=""),(k&&B?"(":"")+(!k&&B?"-":"")+(!B&&l?"+":"")+h+A+(x?x:"")+(n?n:"")+(w?w:"")+(k&&B?")":"")}function j(a,b){o[a]=b}function k(a){var b=a.toString().split(".");return b.length<2?1:Math.pow(10,b[1].length)}function l(){var a=Array.prototype.slice.call(arguments);return a.reduce(function(a,b){var c=k(a),d=k(b);return c>d?c:d},-1/0)}var m,n="1.5.3",o={},p="en",q=null,r="0,0",s="undefined"!=typeof module&&module.exports;m=function(b){return m.isNumeral(b)?b=b.value():0===b||"undefined"==typeof b?b=0:Number(b)||(b=m.fn.unformat(b)),new a(Number(b))},m.version=n,m.isNumeral=function(b){return b instanceof a},m.language=function(a,b){if(!a)return p;if(a&&!b){if(!o[a])throw new Error("Unknown language : "+a);p=a}return(b||!o[a])&&j(a,b),m},m.languageData=function(a){if(!a)return o[p];if(!o[a])throw new Error("Unknown language : "+a);return o[a]},m.language("en",{delimiters:{thousands:",",decimal:"."},abbreviations:{thousand:"k",million:"m",billion:"b",trillion:"t"},ordinal:function(a){var b=a%10;return 1===~~(a%100/10)?"th":1===b?"st":2===b?"nd":3===b?"rd":"th"},currency:{symbol:"$"}}),m.zeroFormat=function(a){q="string"==typeof a?a:null},m.defaultFormat=function(a){r="string"==typeof a?a:"0.0"},"function"!=typeof Array.prototype.reduce&&(Array.prototype.reduce=function(a,b){"use strict";if(null===this||"undefined"==typeof this)throw new TypeError("Array.prototype.reduce called on null or undefined");if("function"!=typeof a)throw new TypeError(a+" is not a function");var c,d,e=this.length>>>0,f=!1;for(1c;++c)this.hasOwnProperty(c)&&(f?d=a(d,this[c],c,this):(d=this[c],f=!0));if(!f)throw new TypeError("Reduce of empty array with no initial value");return d}),m.fn=a.prototype={clone:function(){return m(this)},format:function(a,b){return c(this,a?a:r,void 0!==b?b:Math.round)},unformat:function(a){return"[object Number]"===Object.prototype.toString.call(a)?a:d(this,a?a:r)},value:function(){return this._value},valueOf:function(){return this._value},set:function(a){return this._value=Number(a),this},add:function(a){function b(a,b){return a+c*b}var c=l.call(null,this._value,a);return this._value=[this._value,a].reduce(b,0)/c,this},subtract:function(a){function b(a,b){return a-c*b}var c=l.call(null,this._value,a);return this._value=[a].reduce(b,this._value*c)/c,this},multiply:function(a){function b(a,b){var c=l(a,b);return a*c*b*c/(c*c)}return this._value=[this._value,a].reduce(b,1),this},divide:function(a){function b(a,b){var c=l(a,b);return a*c/(b*c)}return this._value=[this._value,a].reduce(b),this},difference:function(a){return Math.abs(m(this._value).subtract(a).value())}},s&&(module.exports=m),"undefined"==typeof ender&&(this.numeral=m),"function"==typeof define&&define.amd&&define([],function(){return m})}).call(this); +// Extracted Richard Bunt's work in Telemachus: https://github.com/richardbunt/Telemachus/blob/master/WebPages/WebPages/src/console.js + +var TimeFormatters = { + formatUT: function(t){ + var day, year; + if (t == null) { + t = 0; + } + year = ((t / (365 * 24 * 3600)) | 0) + 1; + t %= 365 * 24 * 3600; + day = ((t / (24 * 3600)) | 0) + 1; + t %= 24 * 3600; + return "Year " + year + ", Day " + day + ", " + (this.hourMinSec(t)) + " UT"; + }, + + formatMET: function(t){ + var result; + if (t == null) { + t = 0; + } + result = "T+"; + if (t >= 365 * 24 * 3600) { + result += (t / (365 * 24 * 3600) | 0) + ":"; + t %= 365 * 24 * 3600; + if (t < 24 * 3600) { + result += "0:"; + } + } + if (t >= 24 * 3600) { + result += (t / (24 * 3600) | 0) + ":"; + } + t %= 24 * 3600; + return result + this.hourMinSec(t) + " MET"; + }, + + hourMinSec: function(t) { + var hour, min, sec; + if (t == null) { + t = 0; + } + hour = (t / 3600) | 0; + if (hour < 10) { + hour = "0" + hour; + } + t %= 3600; + min = (t / 60) | 0; + if (min < 10) { + min = "0" + min; + } + sec = (t % 60 | 0).toFixed(); + if (sec < 10) { + sec = "0" + sec; + } + return "" + hour + ":" + min + ":" + sec; + }, + + durationString: function(t) { + var result; + if (t == null) { + t = 0; + } + result = t < 0 ? "-" : ""; + t = Math.abs(t); + if (t >= 365 * 24 * 3600) { + result += (t / (365 * 24 * 3600) | 0) + " years "; + t %= 365 * 24 * 3600; + if (t < 24 * 3600) { + result += "0 days "; + } + } + if (t >= 24 * 3600) { + result += (t / (24 * 3600) | 0) + " days "; + } + t %= 24 * 3600; + return result + this.hourMinSec(t); + } +} +var DataFormatters = { + distanceString: function(value){ + return numeral(value).format('0,0.000 a') + "m" + }, + + heightFromTerrainString: function(value){ + if(value <= -1 ){ return "NA" } + return numeral(value).format('0,0.000 a') + "m" + }, + + degreeString: function(value){ + return numeral(value).format('0.000') + "°" + }, + + velocityString: function(value){ + return numeral(value).format('0,0.000 a') + "m/s" + }, + + temperatureString: function(value){ + if(!value){return "NA"} + return numeral(value).format('0,000') + "°C" + }, + + accelerationSensorString: function(value){ + if(value[0] == "No Sensors of the Appropriate Type"){return "NA"} + return numeral(value[1][0]).format('0,000') + "G" + }, + + pressureSensorString: function(value){ + if(value[0] == "No Sensors of the Appropriate Type"){return "NA"} + return numeral(value[1][0]).format('0,000') + "Pa" + }, + + gravitySensorString: function(value){ + if(value[0] == "No Sensors of the Appropriate Type"){return "NA"} + return numeral(value[1][0]).format('0,000 a') + "m/s²" + }, + + newtonsString: function(value){ + return numeral(value).format('0,0.00') + " N" + }, + + percentageString: function(value){ + return numeral(value).format("0%") + }, + + tonnageString: function(value){ + return numeral(value).format("0,0.00") + " t" + }, + + timeString: function(value){ + return numeral(value).format('00:00:00') + }, + + plainNumberString: function(value){ + return numeral(value).format("0,0.00") + } +} +/* Prototype JavaScript framework, version 1.7.2 + * (c) 2005-2010 Sam Stephenson + * + * Prototype is freely distributable under the terms of an MIT-style license. + * For details, see the Prototype web site: http://www.prototypejs.org/ + * + *--------------------------------------------------------------------------*/ + +var Prototype = { + + Version: '1.7.2', + + Browser: (function(){ + var ua = navigator.userAgent; + var isOpera = Object.prototype.toString.call(window.opera) == '[object Opera]'; + return { + IE: !!window.attachEvent && !isOpera, + Opera: isOpera, + WebKit: ua.indexOf('AppleWebKit/') > -1, + Gecko: ua.indexOf('Gecko') > -1 && ua.indexOf('KHTML') === -1, + MobileSafari: /Apple.*Mobile/.test(ua) + } + })(), + + BrowserFeatures: { + XPath: !!document.evaluate, + + SelectorsAPI: !!document.querySelector, + + ElementExtensions: (function() { + var constructor = window.Element || window.HTMLElement; + return !!(constructor && constructor.prototype); + })(), + SpecificElementExtensions: (function() { + if (typeof window.HTMLDivElement !== 'undefined') + return true; + + var div = document.createElement('div'), + form = document.createElement('form'), + isSupported = false; + + if (div['__proto__'] && (div['__proto__'] !== form['__proto__'])) { + isSupported = true; + } + + div = form = null; + + return isSupported; + })() + }, + + ScriptFragment: ']*>([\\S\\s]*?)<\/script\\s*>', + JSONFilter: /^\/\*-secure-([\s\S]*)\*\/\s*$/, + + emptyFunction: function() { }, + + K: function(x) { return x } +}; + +if (Prototype.Browser.MobileSafari) + Prototype.BrowserFeatures.SpecificElementExtensions = false; +/* Based on Alex Arnell's inheritance implementation. */ + +var Class = (function() { + + var IS_DONTENUM_BUGGY = (function(){ + for (var p in { toString: 1 }) { + if (p === 'toString') return false; + } + return true; + })(); + + function subclass() {}; + function create() { + var parent = null, properties = $A(arguments); + if (Object.isFunction(properties[0])) + parent = properties.shift(); + + function klass() { + this.initialize.apply(this, arguments); + } + + Object.extend(klass, Class.Methods); + klass.superclass = parent; + klass.subclasses = []; + + if (parent) { + subclass.prototype = parent.prototype; + klass.prototype = new subclass; + parent.subclasses.push(klass); + } + + for (var i = 0, length = properties.length; i < length; i++) + klass.addMethods(properties[i]); + + if (!klass.prototype.initialize) + klass.prototype.initialize = Prototype.emptyFunction; + + klass.prototype.constructor = klass; + return klass; + } + + function addMethods(source) { + var ancestor = this.superclass && this.superclass.prototype, + properties = Object.keys(source); + + if (IS_DONTENUM_BUGGY) { + if (source.toString != Object.prototype.toString) + properties.push("toString"); + if (source.valueOf != Object.prototype.valueOf) + properties.push("valueOf"); + } + + for (var i = 0, length = properties.length; i < length; i++) { + var property = properties[i], value = source[property]; + if (ancestor && Object.isFunction(value) && + value.argumentNames()[0] == "$super") { + var method = value; + value = (function(m) { + return function() { return ancestor[m].apply(this, arguments); }; + })(property).wrap(method); + + value.valueOf = (function(method) { + return function() { return method.valueOf.call(method); }; + })(method); + + value.toString = (function(method) { + return function() { return method.toString.call(method); }; + })(method); + } + this.prototype[property] = value; + } + + return this; + } + + return { + create: create, + Methods: { + addMethods: addMethods + } + }; +})(); +(function() { + + var _toString = Object.prototype.toString, + _hasOwnProperty = Object.prototype.hasOwnProperty, + NULL_TYPE = 'Null', + UNDEFINED_TYPE = 'Undefined', + BOOLEAN_TYPE = 'Boolean', + NUMBER_TYPE = 'Number', + STRING_TYPE = 'String', + OBJECT_TYPE = 'Object', + FUNCTION_CLASS = '[object Function]', + BOOLEAN_CLASS = '[object Boolean]', + NUMBER_CLASS = '[object Number]', + STRING_CLASS = '[object String]', + ARRAY_CLASS = '[object Array]', + DATE_CLASS = '[object Date]', + NATIVE_JSON_STRINGIFY_SUPPORT = window.JSON && + typeof JSON.stringify === 'function' && + JSON.stringify(0) === '0' && + typeof JSON.stringify(Prototype.K) === 'undefined'; + + + + var DONT_ENUMS = ['toString', 'toLocaleString', 'valueOf', + 'hasOwnProperty', 'isPrototypeOf', 'propertyIsEnumerable', 'constructor']; + + var IS_DONTENUM_BUGGY = (function(){ + for (var p in { toString: 1 }) { + if (p === 'toString') return false; + } + return true; + })(); + + function Type(o) { + switch(o) { + case null: return NULL_TYPE; + case (void 0): return UNDEFINED_TYPE; + } + var type = typeof o; + switch(type) { + case 'boolean': return BOOLEAN_TYPE; + case 'number': return NUMBER_TYPE; + case 'string': return STRING_TYPE; + } + return OBJECT_TYPE; + } + + function extend(destination, source) { + for (var property in source) + destination[property] = source[property]; + return destination; + } + + function inspect(object) { + try { + if (isUndefined(object)) return 'undefined'; + if (object === null) return 'null'; + return object.inspect ? object.inspect() : String(object); + } catch (e) { + if (e instanceof RangeError) return '...'; + throw e; + } + } + + function toJSON(value) { + return Str('', { '': value }, []); + } + + function Str(key, holder, stack) { + var value = holder[key]; + if (Type(value) === OBJECT_TYPE && typeof value.toJSON === 'function') { + value = value.toJSON(key); + } + + var _class = _toString.call(value); + + switch (_class) { + case NUMBER_CLASS: + case BOOLEAN_CLASS: + case STRING_CLASS: + value = value.valueOf(); + } + + switch (value) { + case null: return 'null'; + case true: return 'true'; + case false: return 'false'; + } + + var type = typeof value; + switch (type) { + case 'string': + return value.inspect(true); + case 'number': + return isFinite(value) ? String(value) : 'null'; + case 'object': + + for (var i = 0, length = stack.length; i < length; i++) { + if (stack[i] === value) { + throw new TypeError("Cyclic reference to '" + value + "' in object"); + } + } + stack.push(value); + + var partial = []; + if (_class === ARRAY_CLASS) { + for (var i = 0, length = value.length; i < length; i++) { + var str = Str(i, value, stack); + partial.push(typeof str === 'undefined' ? 'null' : str); + } + partial = '[' + partial.join(',') + ']'; + } else { + var keys = Object.keys(value); + for (var i = 0, length = keys.length; i < length; i++) { + var key = keys[i], str = Str(key, value, stack); + if (typeof str !== "undefined") { + partial.push(key.inspect(true)+ ':' + str); + } + } + partial = '{' + partial.join(',') + '}'; + } + stack.pop(); + return partial; + } + } + + function stringify(object) { + return JSON.stringify(object); + } + + function toQueryString(object) { + return $H(object).toQueryString(); + } + + function toHTML(object) { + return object && object.toHTML ? object.toHTML() : String.interpret(object); + } + + function keys(object) { + if (Type(object) !== OBJECT_TYPE) { throw new TypeError(); } + var results = []; + for (var property in object) { + if (_hasOwnProperty.call(object, property)) + results.push(property); + } + + if (IS_DONTENUM_BUGGY) { + for (var i = 0; property = DONT_ENUMS[i]; i++) { + if (_hasOwnProperty.call(object, property)) + results.push(property); + } + } + + return results; + } + + function values(object) { + var results = []; + for (var property in object) + results.push(object[property]); + return results; + } + + function clone(object) { + return extend({ }, object); + } + + function isElement(object) { + return !!(object && object.nodeType == 1); + } + + function isArray(object) { + return _toString.call(object) === ARRAY_CLASS; + } + + var hasNativeIsArray = (typeof Array.isArray == 'function') + && Array.isArray([]) && !Array.isArray({}); + + if (hasNativeIsArray) { + isArray = Array.isArray; + } + + function isHash(object) { + return object instanceof Hash; + } + + function isFunction(object) { + return _toString.call(object) === FUNCTION_CLASS; + } + + function isString(object) { + return _toString.call(object) === STRING_CLASS; + } + + function isNumber(object) { + return _toString.call(object) === NUMBER_CLASS; + } + + function isDate(object) { + return _toString.call(object) === DATE_CLASS; + } + + function isUndefined(object) { + return typeof object === "undefined"; + } + + extend(Object, { + extend: extend, + inspect: inspect, + toJSON: NATIVE_JSON_STRINGIFY_SUPPORT ? stringify : toJSON, + toQueryString: toQueryString, + toHTML: toHTML, + keys: Object.keys || keys, + values: values, + clone: clone, + isElement: isElement, + isArray: isArray, + isHash: isHash, + isFunction: isFunction, + isString: isString, + isNumber: isNumber, + isDate: isDate, + isUndefined: isUndefined + }); +})(); +Object.extend(Function.prototype, (function() { + var slice = Array.prototype.slice; + + function update(array, args) { + var arrayLength = array.length, length = args.length; + while (length--) array[arrayLength + length] = args[length]; + return array; + } + + function merge(array, args) { + array = slice.call(array, 0); + return update(array, args); + } + + function argumentNames() { + var names = this.toString().match(/^[\s\(]*function[^(]*\(([^)]*)\)/)[1] + .replace(/\/\/.*?[\r\n]|\/\*(?:.|[\r\n])*?\*\//g, '') + .replace(/\s+/g, '').split(','); + return names.length == 1 && !names[0] ? [] : names; + } + + + function bind(context) { + if (arguments.length < 2 && Object.isUndefined(arguments[0])) + return this; + + if (!Object.isFunction(this)) + throw new TypeError("The object is not callable."); + + var nop = function() {}; + var __method = this, args = slice.call(arguments, 1); + + var bound = function() { + var a = merge(args, arguments); + var c = this instanceof bound ? this : context; + return __method.apply(c, a); + }; + + nop.prototype = this.prototype; + bound.prototype = new nop(); + + return bound; + } + + function bindAsEventListener(context) { + var __method = this, args = slice.call(arguments, 1); + return function(event) { + var a = update([event || window.event], args); + return __method.apply(context, a); + } + } + + function curry() { + if (!arguments.length) return this; + var __method = this, args = slice.call(arguments, 0); + return function() { + var a = merge(args, arguments); + return __method.apply(this, a); + } + } + + function delay(timeout) { + var __method = this, args = slice.call(arguments, 1); + timeout = timeout * 1000; + return window.setTimeout(function() { + return __method.apply(__method, args); + }, timeout); + } + + function defer() { + var args = update([0.01], arguments); + return this.delay.apply(this, args); + } + + function wrap(wrapper) { + var __method = this; + return function() { + var a = update([__method.bind(this)], arguments); + return wrapper.apply(this, a); + } + } + + function methodize() { + if (this._methodized) return this._methodized; + var __method = this; + return this._methodized = function() { + var a = update([this], arguments); + return __method.apply(null, a); + }; + } + + var extensions = { + argumentNames: argumentNames, + bindAsEventListener: bindAsEventListener, + curry: curry, + delay: delay, + defer: defer, + wrap: wrap, + methodize: methodize + }; + + if (!Function.prototype.bind) + extensions.bind = bind; + + return extensions; +})()); + + + +(function(proto) { + + + function toISOString() { + return this.getUTCFullYear() + '-' + + (this.getUTCMonth() + 1).toPaddedString(2) + '-' + + this.getUTCDate().toPaddedString(2) + 'T' + + this.getUTCHours().toPaddedString(2) + ':' + + this.getUTCMinutes().toPaddedString(2) + ':' + + this.getUTCSeconds().toPaddedString(2) + 'Z'; + } + + + function toJSON() { + return this.toISOString(); + } + + if (!proto.toISOString) proto.toISOString = toISOString; + if (!proto.toJSON) proto.toJSON = toJSON; + +})(Date.prototype); + + +RegExp.prototype.match = RegExp.prototype.test; + +RegExp.escape = function(str) { + return String(str).replace(/([.*+?^=!:${}()|[\]\/\\])/g, '\\$1'); +}; +var PeriodicalExecuter = Class.create({ + initialize: function(callback, frequency) { + this.callback = callback; + this.frequency = frequency; + this.currentlyExecuting = false; + + this.registerCallback(); + }, + + registerCallback: function() { + this.timer = setInterval(this.onTimerEvent.bind(this), this.frequency * 1000); + }, + + execute: function() { + this.callback(this); + }, + + stop: function() { + if (!this.timer) return; + clearInterval(this.timer); + this.timer = null; + }, + + onTimerEvent: function() { + if (!this.currentlyExecuting) { + try { + this.currentlyExecuting = true; + this.execute(); + this.currentlyExecuting = false; + } catch(e) { + this.currentlyExecuting = false; + throw e; + } + } + } +}); +Object.extend(String, { + interpret: function(value) { + return value == null ? '' : String(value); + }, + specialChar: { + '\b': '\\b', + '\t': '\\t', + '\n': '\\n', + '\f': '\\f', + '\r': '\\r', + '\\': '\\\\' + } +}); + +Object.extend(String.prototype, (function() { + var NATIVE_JSON_PARSE_SUPPORT = window.JSON && + typeof JSON.parse === 'function' && + JSON.parse('{"test": true}').test; + + function prepareReplacement(replacement) { + if (Object.isFunction(replacement)) return replacement; + var template = new Template(replacement); + return function(match) { return template.evaluate(match) }; + } + + function isNonEmptyRegExp(regexp) { + return regexp.source && regexp.source !== '(?:)'; + } + + + function gsub(pattern, replacement) { + var result = '', source = this, match; + replacement = prepareReplacement(replacement); + + if (Object.isString(pattern)) + pattern = RegExp.escape(pattern); + + if (!(pattern.length || isNonEmptyRegExp(pattern))) { + replacement = replacement(''); + return replacement + source.split('').join(replacement) + replacement; + } + + while (source.length > 0) { + match = source.match(pattern) + if (match && match[0].length > 0) { + result += source.slice(0, match.index); + result += String.interpret(replacement(match)); + source = source.slice(match.index + match[0].length); + } else { + result += source, source = ''; + } + } + return result; + } + + function sub(pattern, replacement, count) { + replacement = prepareReplacement(replacement); + count = Object.isUndefined(count) ? 1 : count; + + return this.gsub(pattern, function(match) { + if (--count < 0) return match[0]; + return replacement(match); + }); + } + + function scan(pattern, iterator) { + this.gsub(pattern, iterator); + return String(this); + } + + function truncate(length, truncation) { + length = length || 30; + truncation = Object.isUndefined(truncation) ? '...' : truncation; + return this.length > length ? + this.slice(0, length - truncation.length) + truncation : String(this); + } + + function strip() { + return this.replace(/^\s+/, '').replace(/\s+$/, ''); + } + + function stripTags() { + return this.replace(/<\w+(\s+("[^"]*"|'[^']*'|[^>])+)?>|<\/\w+>/gi, ''); + } + + function stripScripts() { + return this.replace(new RegExp(Prototype.ScriptFragment, 'img'), ''); + } + + function extractScripts() { + var matchAll = new RegExp(Prototype.ScriptFragment, 'img'), + matchOne = new RegExp(Prototype.ScriptFragment, 'im'); + return (this.match(matchAll) || []).map(function(scriptTag) { + return (scriptTag.match(matchOne) || ['', ''])[1]; + }); + } + + function evalScripts() { + return this.extractScripts().map(function(script) { return eval(script); }); + } + + function escapeHTML() { + return this.replace(/&/g,'&').replace(//g,'>'); + } + + function unescapeHTML() { + return this.stripTags().replace(/</g,'<').replace(/>/g,'>').replace(/&/g,'&'); + } + + + function toQueryParams(separator) { + var match = this.strip().match(/([^?#]*)(#.*)?$/); + if (!match) return { }; + + return match[1].split(separator || '&').inject({ }, function(hash, pair) { + if ((pair = pair.split('='))[0]) { + var key = decodeURIComponent(pair.shift()), + value = pair.length > 1 ? pair.join('=') : pair[0]; + + if (value != undefined) { + value = value.gsub('+', ' '); + value = decodeURIComponent(value); + } + + if (key in hash) { + if (!Object.isArray(hash[key])) hash[key] = [hash[key]]; + hash[key].push(value); + } + else hash[key] = value; + } + return hash; + }); + } + + function toArray() { + return this.split(''); + } + + function succ() { + return this.slice(0, this.length - 1) + + String.fromCharCode(this.charCodeAt(this.length - 1) + 1); + } + + function times(count) { + return count < 1 ? '' : new Array(count + 1).join(this); + } + + function camelize() { + return this.replace(/-+(.)?/g, function(match, chr) { + return chr ? chr.toUpperCase() : ''; + }); + } + + function capitalize() { + return this.charAt(0).toUpperCase() + this.substring(1).toLowerCase(); + } + + function underscore() { + return this.replace(/::/g, '/') + .replace(/([A-Z]+)([A-Z][a-z])/g, '$1_$2') + .replace(/([a-z\d])([A-Z])/g, '$1_$2') + .replace(/-/g, '_') + .toLowerCase(); + } + + function dasherize() { + return this.replace(/_/g, '-'); + } + + function inspect(useDoubleQuotes) { + var escapedString = this.replace(/[\x00-\x1f\\]/g, function(character) { + if (character in String.specialChar) { + return String.specialChar[character]; + } + return '\\u00' + character.charCodeAt().toPaddedString(2, 16); + }); + if (useDoubleQuotes) return '"' + escapedString.replace(/"/g, '\\"') + '"'; + return "'" + escapedString.replace(/'/g, '\\\'') + "'"; + } + + function unfilterJSON(filter) { + return this.replace(filter || Prototype.JSONFilter, '$1'); + } + + function isJSON() { + var str = this; + if (str.blank()) return false; + str = str.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@'); + str = str.replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']'); + str = str.replace(/(?:^|:|,)(?:\s*\[)+/g, ''); + return (/^[\],:{}\s]*$/).test(str); + } + + function evalJSON(sanitize) { + var json = this.unfilterJSON(), + cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g; + if (cx.test(json)) { + json = json.replace(cx, function (a) { + return '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4); + }); + } + try { + if (!sanitize || json.isJSON()) return eval('(' + json + ')'); + } catch (e) { } + throw new SyntaxError('Badly formed JSON string: ' + this.inspect()); + } + + function parseJSON() { + var json = this.unfilterJSON(); + return JSON.parse(json); + } + + function include(pattern) { + return this.indexOf(pattern) > -1; + } + + function startsWith(pattern, position) { + position = Object.isNumber(position) ? position : 0; + return this.lastIndexOf(pattern, position) === position; + } + + function endsWith(pattern, position) { + pattern = String(pattern); + position = Object.isNumber(position) ? position : this.length; + if (position < 0) position = 0; + if (position > this.length) position = this.length; + var d = position - pattern.length; + return d >= 0 && this.indexOf(pattern, d) === d; + } + + function empty() { + return this == ''; + } + + function blank() { + return /^\s*$/.test(this); + } + + function interpolate(object, pattern) { + return new Template(this, pattern).evaluate(object); + } + + return { + gsub: gsub, + sub: sub, + scan: scan, + truncate: truncate, + strip: String.prototype.trim || strip, + stripTags: stripTags, + stripScripts: stripScripts, + extractScripts: extractScripts, + evalScripts: evalScripts, + escapeHTML: escapeHTML, + unescapeHTML: unescapeHTML, + toQueryParams: toQueryParams, + parseQuery: toQueryParams, + toArray: toArray, + succ: succ, + times: times, + camelize: camelize, + capitalize: capitalize, + underscore: underscore, + dasherize: dasherize, + inspect: inspect, + unfilterJSON: unfilterJSON, + isJSON: isJSON, + evalJSON: NATIVE_JSON_PARSE_SUPPORT ? parseJSON : evalJSON, + include: include, + startsWith: String.prototype.startsWith || startsWith, + endsWith: String.prototype.endsWith || endsWith, + empty: empty, + blank: blank, + interpolate: interpolate + }; +})()); + +var Template = Class.create({ + initialize: function(template, pattern) { + this.template = template.toString(); + this.pattern = pattern || Template.Pattern; + }, + + evaluate: function(object) { + if (object && Object.isFunction(object.toTemplateReplacements)) + object = object.toTemplateReplacements(); + + return this.template.gsub(this.pattern, function(match) { + if (object == null) return (match[1] + ''); + + var before = match[1] || ''; + if (before == '\\') return match[2]; + + var ctx = object, expr = match[3], + pattern = /^([^.[]+|\[((?:.*?[^\\])?)\])(\.|\[|$)/; + + match = pattern.exec(expr); + if (match == null) return before; + + while (match != null) { + var comp = match[1].startsWith('[') ? match[2].replace(/\\\\]/g, ']') : match[1]; + ctx = ctx[comp]; + if (null == ctx || '' == match[3]) break; + expr = expr.substring('[' == match[3] ? match[1].length : match[0].length); + match = pattern.exec(expr); + } + + return before + String.interpret(ctx); + }); + } +}); +Template.Pattern = /(^|.|\r|\n)(#\{(.*?)\})/; + +var $break = { }; + +var Enumerable = (function() { + function each(iterator, context) { + try { + this._each(iterator, context); + } catch (e) { + if (e != $break) throw e; + } + return this; + } + + function eachSlice(number, iterator, context) { + var index = -number, slices = [], array = this.toArray(); + if (number < 1) return array; + while ((index += number) < array.length) + slices.push(array.slice(index, index+number)); + return slices.collect(iterator, context); + } + + function all(iterator, context) { + iterator = iterator || Prototype.K; + var result = true; + this.each(function(value, index) { + result = result && !!iterator.call(context, value, index, this); + if (!result) throw $break; + }, this); + return result; + } + + function any(iterator, context) { + iterator = iterator || Prototype.K; + var result = false; + this.each(function(value, index) { + if (result = !!iterator.call(context, value, index, this)) + throw $break; + }, this); + return result; + } + + function collect(iterator, context) { + iterator = iterator || Prototype.K; + var results = []; + this.each(function(value, index) { + results.push(iterator.call(context, value, index, this)); + }, this); + return results; + } + + function detect(iterator, context) { + var result; + this.each(function(value, index) { + if (iterator.call(context, value, index, this)) { + result = value; + throw $break; + } + }, this); + return result; + } + + function findAll(iterator, context) { + var results = []; + this.each(function(value, index) { + if (iterator.call(context, value, index, this)) + results.push(value); + }, this); + return results; + } + + function grep(filter, iterator, context) { + iterator = iterator || Prototype.K; + var results = []; + + if (Object.isString(filter)) + filter = new RegExp(RegExp.escape(filter)); + + this.each(function(value, index) { + if (filter.match(value)) + results.push(iterator.call(context, value, index, this)); + }, this); + return results; + } + + function include(object) { + if (Object.isFunction(this.indexOf) && this.indexOf(object) != -1) + return true; + + var found = false; + this.each(function(value) { + if (value == object) { + found = true; + throw $break; + } + }); + return found; + } + + function inGroupsOf(number, fillWith) { + fillWith = Object.isUndefined(fillWith) ? null : fillWith; + return this.eachSlice(number, function(slice) { + while(slice.length < number) slice.push(fillWith); + return slice; + }); + } + + function inject(memo, iterator, context) { + this.each(function(value, index) { + memo = iterator.call(context, memo, value, index, this); + }, this); + return memo; + } + + function invoke(method) { + var args = $A(arguments).slice(1); + return this.map(function(value) { + return value[method].apply(value, args); + }); + } + + function max(iterator, context) { + iterator = iterator || Prototype.K; + var result; + this.each(function(value, index) { + value = iterator.call(context, value, index, this); + if (result == null || value >= result) + result = value; + }, this); + return result; + } + + function min(iterator, context) { + iterator = iterator || Prototype.K; + var result; + this.each(function(value, index) { + value = iterator.call(context, value, index, this); + if (result == null || value < result) + result = value; + }, this); + return result; + } + + function partition(iterator, context) { + iterator = iterator || Prototype.K; + var trues = [], falses = []; + this.each(function(value, index) { + (iterator.call(context, value, index, this) ? + trues : falses).push(value); + }, this); + return [trues, falses]; + } + + function pluck(property) { + var results = []; + this.each(function(value) { + results.push(value[property]); + }); + return results; + } + + function reject(iterator, context) { + var results = []; + this.each(function(value, index) { + if (!iterator.call(context, value, index, this)) + results.push(value); + }, this); + return results; + } + + function sortBy(iterator, context) { + return this.map(function(value, index) { + return { + value: value, + criteria: iterator.call(context, value, index, this) + }; + }, this).sort(function(left, right) { + var a = left.criteria, b = right.criteria; + return a < b ? -1 : a > b ? 1 : 0; + }).pluck('value'); + } + + function toArray() { + return this.map(); + } + + function zip() { + var iterator = Prototype.K, args = $A(arguments); + if (Object.isFunction(args.last())) + iterator = args.pop(); + + var collections = [this].concat(args).map($A); + return this.map(function(value, index) { + return iterator(collections.pluck(index)); + }); + } + + function size() { + return this.toArray().length; + } + + function inspect() { + return '#'; + } + + + + + + + + + + return { + each: each, + eachSlice: eachSlice, + all: all, + every: all, + any: any, + some: any, + collect: collect, + map: collect, + detect: detect, + findAll: findAll, + select: findAll, + filter: findAll, + grep: grep, + include: include, + member: include, + inGroupsOf: inGroupsOf, + inject: inject, + invoke: invoke, + max: max, + min: min, + partition: partition, + pluck: pluck, + reject: reject, + sortBy: sortBy, + toArray: toArray, + entries: toArray, + zip: zip, + size: size, + inspect: inspect, + find: detect + }; +})(); + +function $A(iterable) { + if (!iterable) return []; + if ('toArray' in Object(iterable)) return iterable.toArray(); + var length = iterable.length || 0, results = new Array(length); + while (length--) results[length] = iterable[length]; + return results; +} + + +function $w(string) { + if (!Object.isString(string)) return []; + string = string.strip(); + return string ? string.split(/\s+/) : []; +} + +Array.from = $A; + + +(function() { + var arrayProto = Array.prototype, + slice = arrayProto.slice, + _each = arrayProto.forEach; // use native browser JS 1.6 implementation if available + + function each(iterator, context) { + for (var i = 0, length = this.length >>> 0; i < length; i++) { + if (i in this) iterator.call(context, this[i], i, this); + } + } + if (!_each) _each = each; + + function clear() { + this.length = 0; + return this; + } + + function first() { + return this[0]; + } + + function last() { + return this[this.length - 1]; + } + + function compact() { + return this.select(function(value) { + return value != null; + }); + } + + function flatten() { + return this.inject([], function(array, value) { + if (Object.isArray(value)) + return array.concat(value.flatten()); + array.push(value); + return array; + }); + } + + function without() { + var values = slice.call(arguments, 0); + return this.select(function(value) { + return !values.include(value); + }); + } + + function reverse(inline) { + return (inline === false ? this.toArray() : this)._reverse(); + } + + function uniq(sorted) { + return this.inject([], function(array, value, index) { + if (0 == index || (sorted ? array.last() != value : !array.include(value))) + array.push(value); + return array; + }); + } + + function intersect(array) { + return this.uniq().findAll(function(item) { + return array.indexOf(item) !== -1; + }); + } + + + function clone() { + return slice.call(this, 0); + } + + function size() { + return this.length; + } + + function inspect() { + return '[' + this.map(Object.inspect).join(', ') + ']'; + } + + function indexOf(item, i) { + if (this == null) throw new TypeError(); + + var array = Object(this), length = array.length >>> 0; + if (length === 0) return -1; + + i = Number(i); + if (isNaN(i)) { + i = 0; + } else if (i !== 0 && isFinite(i)) { + i = (i > 0 ? 1 : -1) * Math.floor(Math.abs(i)); + } + + if (i > length) return -1; + + var k = i >= 0 ? i : Math.max(length - Math.abs(i), 0); + for (; k < length; k++) + if (k in array && array[k] === item) return k; + return -1; + } + + + function lastIndexOf(item, i) { + if (this == null) throw new TypeError(); + + var array = Object(this), length = array.length >>> 0; + if (length === 0) return -1; + + if (!Object.isUndefined(i)) { + i = Number(i); + if (isNaN(i)) { + i = 0; + } else if (i !== 0 && isFinite(i)) { + i = (i > 0 ? 1 : -1) * Math.floor(Math.abs(i)); + } + } else { + i = length; + } + + var k = i >= 0 ? Math.min(i, length - 1) : + length - Math.abs(i); + + for (; k >= 0; k--) + if (k in array && array[k] === item) return k; + return -1; + } + + function concat(_) { + var array = [], items = slice.call(arguments, 0), item, n = 0; + items.unshift(this); + for (var i = 0, length = items.length; i < length; i++) { + item = items[i]; + if (Object.isArray(item) && !('callee' in item)) { + for (var j = 0, arrayLength = item.length; j < arrayLength; j++) { + if (j in item) array[n] = item[j]; + n++; + } + } else { + array[n++] = item; + } + } + array.length = n; + return array; + } + + + function wrapNative(method) { + return function() { + if (arguments.length === 0) { + return method.call(this, Prototype.K); + } else if (arguments[0] === undefined) { + var args = slice.call(arguments, 1); + args.unshift(Prototype.K); + return method.apply(this, args); + } else { + return method.apply(this, arguments); + } + }; + } + + + function map(iterator) { + if (this == null) throw new TypeError(); + iterator = iterator || Prototype.K; + + var object = Object(this); + var results = [], context = arguments[1], n = 0; + + for (var i = 0, length = object.length >>> 0; i < length; i++) { + if (i in object) { + results[n] = iterator.call(context, object[i], i, object); + } + n++; + } + results.length = n; + return results; + } + + if (arrayProto.map) { + map = wrapNative(Array.prototype.map); + } + + function filter(iterator) { + if (this == null || !Object.isFunction(iterator)) + throw new TypeError(); + + var object = Object(this); + var results = [], context = arguments[1], value; + + for (var i = 0, length = object.length >>> 0; i < length; i++) { + if (i in object) { + value = object[i]; + if (iterator.call(context, value, i, object)) { + results.push(value); + } + } + } + return results; + } + + if (arrayProto.filter) { + filter = Array.prototype.filter; + } + + function some(iterator) { + if (this == null) throw new TypeError(); + iterator = iterator || Prototype.K; + var context = arguments[1]; + + var object = Object(this); + for (var i = 0, length = object.length >>> 0; i < length; i++) { + if (i in object && iterator.call(context, object[i], i, object)) { + return true; + } + } + + return false; + } + + if (arrayProto.some) { + var some = wrapNative(Array.prototype.some); + } + + + function every(iterator) { + if (this == null) throw new TypeError(); + iterator = iterator || Prototype.K; + var context = arguments[1]; + + var object = Object(this); + for (var i = 0, length = object.length >>> 0; i < length; i++) { + if (i in object && !iterator.call(context, object[i], i, object)) { + return false; + } + } + + return true; + } + + if (arrayProto.every) { + var every = wrapNative(Array.prototype.every); + } + + var _reduce = arrayProto.reduce; + function inject(memo, iterator) { + iterator = iterator || Prototype.K; + var context = arguments[2]; + return _reduce.call(this, iterator.bind(context), memo); + } + + if (!arrayProto.reduce) { + var inject = Enumerable.inject; + } + + Object.extend(arrayProto, Enumerable); + + if (!arrayProto._reverse) + arrayProto._reverse = arrayProto.reverse; + + Object.extend(arrayProto, { + _each: _each, + + map: map, + collect: map, + select: filter, + filter: filter, + findAll: filter, + some: some, + any: some, + every: every, + all: every, + inject: inject, + + clear: clear, + first: first, + last: last, + compact: compact, + flatten: flatten, + without: without, + reverse: reverse, + uniq: uniq, + intersect: intersect, + clone: clone, + toArray: clone, + size: size, + inspect: inspect + }); + + var CONCAT_ARGUMENTS_BUGGY = (function() { + return [].concat(arguments)[0][0] !== 1; + })(1,2); + + if (CONCAT_ARGUMENTS_BUGGY) arrayProto.concat = concat; + + if (!arrayProto.indexOf) arrayProto.indexOf = indexOf; + if (!arrayProto.lastIndexOf) arrayProto.lastIndexOf = lastIndexOf; +})(); +function $H(object) { + return new Hash(object); +}; + +var Hash = Class.create(Enumerable, (function() { + function initialize(object) { + this._object = Object.isHash(object) ? object.toObject() : Object.clone(object); + } + + + function _each(iterator, context) { + var i = 0; + for (var key in this._object) { + var value = this._object[key], pair = [key, value]; + pair.key = key; + pair.value = value; + iterator.call(context, pair, i); + i++; + } + } + + function set(key, value) { + return this._object[key] = value; + } + + function get(key) { + if (this._object[key] !== Object.prototype[key]) + return this._object[key]; + } + + function unset(key) { + var value = this._object[key]; + delete this._object[key]; + return value; + } + + function toObject() { + return Object.clone(this._object); + } + + + + function keys() { + return this.pluck('key'); + } + + function values() { + return this.pluck('value'); + } + + function index(value) { + var match = this.detect(function(pair) { + return pair.value === value; + }); + return match && match.key; + } + + function merge(object) { + return this.clone().update(object); + } + + function update(object) { + return new Hash(object).inject(this, function(result, pair) { + result.set(pair.key, pair.value); + return result; + }); + } + + function toQueryPair(key, value) { + if (Object.isUndefined(value)) return key; + + value = String.interpret(value); + + value = value.gsub(/(\r)?\n/, '\r\n'); + value = encodeURIComponent(value); + value = value.gsub(/%20/, '+'); + return key + '=' + value; + } + + function toQueryString() { + return this.inject([], function(results, pair) { + var key = encodeURIComponent(pair.key), values = pair.value; + + if (values && typeof values == 'object') { + if (Object.isArray(values)) { + var queryValues = []; + for (var i = 0, len = values.length, value; i < len; i++) { + value = values[i]; + queryValues.push(toQueryPair(key, value)); + } + return results.concat(queryValues); + } + } else results.push(toQueryPair(key, values)); + return results; + }).join('&'); + } + + function inspect() { + return '#'; + } + + function clone() { + return new Hash(this); + } + + return { + initialize: initialize, + _each: _each, + set: set, + get: get, + unset: unset, + toObject: toObject, + toTemplateReplacements: toObject, + keys: keys, + values: values, + index: index, + merge: merge, + update: update, + toQueryString: toQueryString, + inspect: inspect, + toJSON: toObject, + clone: clone + }; +})()); + +Hash.from = $H; +Object.extend(Number.prototype, (function() { + function toColorPart() { + return this.toPaddedString(2, 16); + } + + function succ() { + return this + 1; + } + + function times(iterator, context) { + $R(0, this, true).each(iterator, context); + return this; + } + + function toPaddedString(length, radix) { + var string = this.toString(radix || 10); + return '0'.times(length - string.length) + string; + } + + function abs() { + return Math.abs(this); + } + + function round() { + return Math.round(this); + } + + function ceil() { + return Math.ceil(this); + } + + function floor() { + return Math.floor(this); + } + + return { + toColorPart: toColorPart, + succ: succ, + times: times, + toPaddedString: toPaddedString, + abs: abs, + round: round, + ceil: ceil, + floor: floor + }; +})()); + +function $R(start, end, exclusive) { + return new ObjectRange(start, end, exclusive); +} + +var ObjectRange = Class.create(Enumerable, (function() { + function initialize(start, end, exclusive) { + this.start = start; + this.end = end; + this.exclusive = exclusive; + } + + function _each(iterator, context) { + var value = this.start, i; + for (i = 0; this.include(value); i++) { + iterator.call(context, value, i); + value = value.succ(); + } + } + + function include(value) { + if (value < this.start) + return false; + if (this.exclusive) + return value < this.end; + return value <= this.end; + } + + return { + initialize: initialize, + _each: _each, + include: include + }; +})()); + + + +var Abstract = { }; + + +var Try = { + these: function() { + var returnValue; + + for (var i = 0, length = arguments.length; i < length; i++) { + var lambda = arguments[i]; + try { + returnValue = lambda(); + break; + } catch (e) { } + } + + return returnValue; + } +}; + +var Ajax = { + getTransport: function() { + return Try.these( + function() {return new XMLHttpRequest()}, + function() {return new ActiveXObject('Msxml2.XMLHTTP')}, + function() {return new ActiveXObject('Microsoft.XMLHTTP')} + ) || false; + }, + + activeRequestCount: 0 +}; + +Ajax.Responders = { + responders: [], + + _each: function(iterator, context) { + this.responders._each(iterator, context); + }, + + register: function(responder) { + if (!this.include(responder)) + this.responders.push(responder); + }, + + unregister: function(responder) { + this.responders = this.responders.without(responder); + }, + + dispatch: function(callback, request, transport, json) { + this.each(function(responder) { + if (Object.isFunction(responder[callback])) { + try { + responder[callback].apply(responder, [request, transport, json]); + } catch (e) { } + } + }); + } +}; + +Object.extend(Ajax.Responders, Enumerable); + +Ajax.Responders.register({ + onCreate: function() { Ajax.activeRequestCount++ }, + onComplete: function() { Ajax.activeRequestCount-- } +}); +Ajax.Base = Class.create({ + initialize: function(options) { + this.options = { + method: 'post', + asynchronous: true, + contentType: 'application/x-www-form-urlencoded', + encoding: 'UTF-8', + parameters: '', + evalJSON: true, + evalJS: true + }; + Object.extend(this.options, options || { }); + + this.options.method = this.options.method.toLowerCase(); + + if (Object.isHash(this.options.parameters)) + this.options.parameters = this.options.parameters.toObject(); + } +}); +Ajax.Request = Class.create(Ajax.Base, { + _complete: false, + + initialize: function($super, url, options) { + $super(options); + this.transport = Ajax.getTransport(); + this.request(url); + }, + + request: function(url) { + this.url = url; + this.method = this.options.method; + var params = Object.isString(this.options.parameters) ? + this.options.parameters : + Object.toQueryString(this.options.parameters); + + if (!['get', 'post'].include(this.method)) { + params += (params ? '&' : '') + "_method=" + this.method; + this.method = 'post'; + } + + if (params && this.method === 'get') { + this.url += (this.url.include('?') ? '&' : '?') + params; + } + + this.parameters = params.toQueryParams(); + + try { + var response = new Ajax.Response(this); + if (this.options.onCreate) this.options.onCreate(response); + Ajax.Responders.dispatch('onCreate', this, response); + + this.transport.open(this.method.toUpperCase(), this.url, + this.options.asynchronous); + + if (this.options.asynchronous) this.respondToReadyState.bind(this).defer(1); + + this.transport.onreadystatechange = this.onStateChange.bind(this); + this.setRequestHeaders(); + + this.body = this.method == 'post' ? (this.options.postBody || params) : null; + this.transport.send(this.body); + + /* Force Firefox to handle ready state 4 for synchronous requests */ + if (!this.options.asynchronous && this.transport.overrideMimeType) + this.onStateChange(); + + } + catch (e) { + this.dispatchException(e); + } + }, + + onStateChange: function() { + var readyState = this.transport.readyState; + if (readyState > 1 && !((readyState == 4) && this._complete)) + this.respondToReadyState(this.transport.readyState); + }, + + setRequestHeaders: function() { + var headers = { + 'X-Requested-With': 'XMLHttpRequest', + 'X-Prototype-Version': Prototype.Version, + 'Accept': 'text/javascript, text/html, application/xml, text/xml, */*' + }; + + if (this.method == 'post') { + headers['Content-type'] = this.options.contentType + + (this.options.encoding ? '; charset=' + this.options.encoding : ''); + + /* Force "Connection: close" for older Mozilla browsers to work + * around a bug where XMLHttpRequest sends an incorrect + * Content-length header. See Mozilla Bugzilla #246651. + */ + if (this.transport.overrideMimeType && + (navigator.userAgent.match(/Gecko\/(\d{4})/) || [0,2005])[1] < 2005) + headers['Connection'] = 'close'; + } + + if (typeof this.options.requestHeaders == 'object') { + var extras = this.options.requestHeaders; + + if (Object.isFunction(extras.push)) + for (var i = 0, length = extras.length; i < length; i += 2) + headers[extras[i]] = extras[i+1]; + else + $H(extras).each(function(pair) { headers[pair.key] = pair.value }); + } + + for (var name in headers) + if (headers[name] != null) + this.transport.setRequestHeader(name, headers[name]); + }, + + success: function() { + var status = this.getStatus(); + return !status || (status >= 200 && status < 300) || status == 304; + }, + + getStatus: function() { + try { + if (this.transport.status === 1223) return 204; + return this.transport.status || 0; + } catch (e) { return 0 } + }, + + respondToReadyState: function(readyState) { + var state = Ajax.Request.Events[readyState], response = new Ajax.Response(this); + + if (state == 'Complete') { + try { + this._complete = true; + (this.options['on' + response.status] + || this.options['on' + (this.success() ? 'Success' : 'Failure')] + || Prototype.emptyFunction)(response, response.headerJSON); + } catch (e) { + this.dispatchException(e); + } + + var contentType = response.getHeader('Content-type'); + if (this.options.evalJS == 'force' + || (this.options.evalJS && this.isSameOrigin() && contentType + && contentType.match(/^\s*(text|application)\/(x-)?(java|ecma)script(;.*)?\s*$/i))) + this.evalResponse(); + } + + try { + (this.options['on' + state] || Prototype.emptyFunction)(response, response.headerJSON); + Ajax.Responders.dispatch('on' + state, this, response, response.headerJSON); + } catch (e) { + this.dispatchException(e); + } + + if (state == 'Complete') { + this.transport.onreadystatechange = Prototype.emptyFunction; + } + }, + + isSameOrigin: function() { + var m = this.url.match(/^\s*https?:\/\/[^\/]*/); + return !m || (m[0] == '#{protocol}//#{domain}#{port}'.interpolate({ + protocol: location.protocol, + domain: document.domain, + port: location.port ? ':' + location.port : '' + })); + }, + + getHeader: function(name) { + try { + return this.transport.getResponseHeader(name) || null; + } catch (e) { return null; } + }, + + evalResponse: function() { + try { + return eval((this.transport.responseText || '').unfilterJSON()); + } catch (e) { + this.dispatchException(e); + } + }, + + dispatchException: function(exception) { + (this.options.onException || Prototype.emptyFunction)(this, exception); + Ajax.Responders.dispatch('onException', this, exception); + } +}); + +Ajax.Request.Events = + ['Uninitialized', 'Loading', 'Loaded', 'Interactive', 'Complete']; + + + + + + + + +Ajax.Response = Class.create({ + initialize: function(request){ + this.request = request; + var transport = this.transport = request.transport, + readyState = this.readyState = transport.readyState; + + if ((readyState > 2 && !Prototype.Browser.IE) || readyState == 4) { + this.status = this.getStatus(); + this.statusText = this.getStatusText(); + this.responseText = String.interpret(transport.responseText); + this.headerJSON = this._getHeaderJSON(); + } + + if (readyState == 4) { + var xml = transport.responseXML; + this.responseXML = Object.isUndefined(xml) ? null : xml; + this.responseJSON = this._getResponseJSON(); + } + }, + + status: 0, + + statusText: '', + + getStatus: Ajax.Request.prototype.getStatus, + + getStatusText: function() { + try { + return this.transport.statusText || ''; + } catch (e) { return '' } + }, + + getHeader: Ajax.Request.prototype.getHeader, + + getAllHeaders: function() { + try { + return this.getAllResponseHeaders(); + } catch (e) { return null } + }, + + getResponseHeader: function(name) { + return this.transport.getResponseHeader(name); + }, + + getAllResponseHeaders: function() { + return this.transport.getAllResponseHeaders(); + }, + + _getHeaderJSON: function() { + var json = this.getHeader('X-JSON'); + if (!json) return null; + + try { + json = decodeURIComponent(escape(json)); + } catch(e) { + } + + try { + return json.evalJSON(this.request.options.sanitizeJSON || + !this.request.isSameOrigin()); + } catch (e) { + this.request.dispatchException(e); + } + }, + + _getResponseJSON: function() { + var options = this.request.options; + if (!options.evalJSON || (options.evalJSON != 'force' && + !(this.getHeader('Content-type') || '').include('application/json')) || + this.responseText.blank()) + return null; + try { + return this.responseText.evalJSON(options.sanitizeJSON || + !this.request.isSameOrigin()); + } catch (e) { + this.request.dispatchException(e); + } + } +}); + +Ajax.Updater = Class.create(Ajax.Request, { + initialize: function($super, container, url, options) { + this.container = { + success: (container.success || container), + failure: (container.failure || (container.success ? null : container)) + }; + + options = Object.clone(options); + var onComplete = options.onComplete; + options.onComplete = (function(response, json) { + this.updateContent(response.responseText); + if (Object.isFunction(onComplete)) onComplete(response, json); + }).bind(this); + + $super(url, options); + }, + + updateContent: function(responseText) { + var receiver = this.container[this.success() ? 'success' : 'failure'], + options = this.options; + + if (!options.evalScripts) responseText = responseText.stripScripts(); + + if (receiver = $(receiver)) { + if (options.insertion) { + if (Object.isString(options.insertion)) { + var insertion = { }; insertion[options.insertion] = responseText; + receiver.insert(insertion); + } + else options.insertion(receiver, responseText); + } + else receiver.update(responseText); + } + } +}); + +Ajax.PeriodicalUpdater = Class.create(Ajax.Base, { + initialize: function($super, container, url, options) { + $super(options); + this.onComplete = this.options.onComplete; + + this.frequency = (this.options.frequency || 2); + this.decay = (this.options.decay || 1); + + this.updater = { }; + this.container = container; + this.url = url; + + this.start(); + }, + + start: function() { + this.options.onComplete = this.updateComplete.bind(this); + this.onTimerEvent(); + }, + + stop: function() { + this.updater.options.onComplete = undefined; + clearTimeout(this.timer); + (this.onComplete || Prototype.emptyFunction).apply(this, arguments); + }, + + updateComplete: function(response) { + if (this.options.decay) { + this.decay = (response.responseText == this.lastText ? + this.decay * this.options.decay : 1); + + this.lastText = response.responseText; + } + this.timer = this.onTimerEvent.bind(this).delay(this.decay * this.frequency); + }, + + onTimerEvent: function() { + this.updater = new Ajax.Updater(this.container, this.url, this.options); + } +}); + +(function(GLOBAL) { + + var UNDEFINED; + var SLICE = Array.prototype.slice; + + var DIV = document.createElement('div'); + + + function $(element) { + if (arguments.length > 1) { + for (var i = 0, elements = [], length = arguments.length; i < length; i++) + elements.push($(arguments[i])); + return elements; + } + + if (Object.isString(element)) + element = document.getElementById(element); + return Element.extend(element); + } + + GLOBAL.$ = $; + + + if (!GLOBAL.Node) GLOBAL.Node = {}; + + if (!GLOBAL.Node.ELEMENT_NODE) { + Object.extend(GLOBAL.Node, { + ELEMENT_NODE: 1, + ATTRIBUTE_NODE: 2, + TEXT_NODE: 3, + CDATA_SECTION_NODE: 4, + ENTITY_REFERENCE_NODE: 5, + ENTITY_NODE: 6, + PROCESSING_INSTRUCTION_NODE: 7, + COMMENT_NODE: 8, + DOCUMENT_NODE: 9, + DOCUMENT_TYPE_NODE: 10, + DOCUMENT_FRAGMENT_NODE: 11, + NOTATION_NODE: 12 + }); + } + + var ELEMENT_CACHE = {}; + + function shouldUseCreationCache(tagName, attributes) { + if (tagName === 'select') return false; + if ('type' in attributes) return false; + return true; + } + + var HAS_EXTENDED_CREATE_ELEMENT_SYNTAX = (function(){ + try { + var el = document.createElement(''); + return el.tagName.toLowerCase() === 'input' && el.name === 'x'; + } + catch(err) { + return false; + } + })(); + + + var oldElement = GLOBAL.Element; + function Element(tagName, attributes) { + attributes = attributes || {}; + tagName = tagName.toLowerCase(); + + if (HAS_EXTENDED_CREATE_ELEMENT_SYNTAX && attributes.name) { + tagName = '<' + tagName + ' name="' + attributes.name + '">'; + delete attributes.name; + return Element.writeAttribute(document.createElement(tagName), attributes); + } + + if (!ELEMENT_CACHE[tagName]) + ELEMENT_CACHE[tagName] = Element.extend(document.createElement(tagName)); + + var node = shouldUseCreationCache(tagName, attributes) ? + ELEMENT_CACHE[tagName].cloneNode(false) : document.createElement(tagName); + + return Element.writeAttribute(node, attributes); + } + + GLOBAL.Element = Element; + + Object.extend(GLOBAL.Element, oldElement || {}); + if (oldElement) GLOBAL.Element.prototype = oldElement.prototype; + + Element.Methods = { ByTag: {}, Simulated: {} }; + + var methods = {}; + + var INSPECT_ATTRIBUTES = { id: 'id', className: 'class' }; + function inspect(element) { + element = $(element); + var result = '<' + element.tagName.toLowerCase(); + + var attribute, value; + for (var property in INSPECT_ATTRIBUTES) { + attribute = INSPECT_ATTRIBUTES[property]; + value = (element[property] || '').toString(); + if (value) result += ' ' + attribute + '=' + value.inspect(true); + } + + return result + '>'; + } + + methods.inspect = inspect; + + + function visible(element) { + return $(element).style.display !== 'none'; + } + + function toggle(element, bool) { + element = $(element); + if (Object.isUndefined(bool)) + bool = !Element.visible(element); + Element[bool ? 'show' : 'hide'](element); + + return element; + } + + function hide(element) { + element = $(element); + element.style.display = 'none'; + return element; + } + + function show(element) { + element = $(element); + element.style.display = ''; + return element; + } + + + Object.extend(methods, { + visible: visible, + toggle: toggle, + hide: hide, + show: show + }); + + + function remove(element) { + element = $(element); + element.parentNode.removeChild(element); + return element; + } + + var SELECT_ELEMENT_INNERHTML_BUGGY = (function(){ + var el = document.createElement("select"), + isBuggy = true; + el.innerHTML = ""; + if (el.options && el.options[0]) { + isBuggy = el.options[0].nodeName.toUpperCase() !== "OPTION"; + } + el = null; + return isBuggy; + })(); + + var TABLE_ELEMENT_INNERHTML_BUGGY = (function(){ + try { + var el = document.createElement("table"); + if (el && el.tBodies) { + el.innerHTML = "test"; + var isBuggy = typeof el.tBodies[0] == "undefined"; + el = null; + return isBuggy; + } + } catch (e) { + return true; + } + })(); + + var LINK_ELEMENT_INNERHTML_BUGGY = (function() { + try { + var el = document.createElement('div'); + el.innerHTML = ""; + var isBuggy = (el.childNodes.length === 0); + el = null; + return isBuggy; + } catch(e) { + return true; + } + })(); + + var ANY_INNERHTML_BUGGY = SELECT_ELEMENT_INNERHTML_BUGGY || + TABLE_ELEMENT_INNERHTML_BUGGY || LINK_ELEMENT_INNERHTML_BUGGY; + + var SCRIPT_ELEMENT_REJECTS_TEXTNODE_APPENDING = (function () { + var s = document.createElement("script"), + isBuggy = false; + try { + s.appendChild(document.createTextNode("")); + isBuggy = !s.firstChild || + s.firstChild && s.firstChild.nodeType !== 3; + } catch (e) { + isBuggy = true; + } + s = null; + return isBuggy; + })(); + + function update(element, content) { + element = $(element); + + var descendants = element.getElementsByTagName('*'), + i = descendants.length; + while (i--) purgeElement(descendants[i]); + + if (content && content.toElement) + content = content.toElement(); + + if (Object.isElement(content)) + return element.update().insert(content); + + + content = Object.toHTML(content); + var tagName = element.tagName.toUpperCase(); + + if (tagName === 'SCRIPT' && SCRIPT_ELEMENT_REJECTS_TEXTNODE_APPENDING) { + element.text = content; + return element; + } + + if (ANY_INNERHTML_BUGGY) { + if (tagName in INSERTION_TRANSLATIONS.tags) { + while (element.firstChild) + element.removeChild(element.firstChild); + + var nodes = getContentFromAnonymousElement(tagName, content.stripScripts()); + for (var i = 0, node; node = nodes[i]; i++) + element.appendChild(node); + + } else if (LINK_ELEMENT_INNERHTML_BUGGY && Object.isString(content) && content.indexOf(' -1) { + while (element.firstChild) + element.removeChild(element.firstChild); + + var nodes = getContentFromAnonymousElement(tagName, + content.stripScripts(), true); + + for (var i = 0, node; node = nodes[i]; i++) + element.appendChild(node); + } else { + element.innerHTML = content.stripScripts(); + } + } else { + element.innerHTML = content.stripScripts(); + } + + content.evalScripts.bind(content).defer(); + return element; + } + + function replace(element, content) { + element = $(element); + + if (content && content.toElement) { + content = content.toElement(); + } else if (!Object.isElement(content)) { + content = Object.toHTML(content); + var range = element.ownerDocument.createRange(); + range.selectNode(element); + content.evalScripts.bind(content).defer(); + content = range.createContextualFragment(content.stripScripts()); + } + + element.parentNode.replaceChild(content, element); + return element; + } + + var INSERTION_TRANSLATIONS = { + before: function(element, node) { + element.parentNode.insertBefore(node, element); + }, + top: function(element, node) { + element.insertBefore(node, element.firstChild); + }, + bottom: function(element, node) { + element.appendChild(node); + }, + after: function(element, node) { + element.parentNode.insertBefore(node, element.nextSibling); + }, + + tags: { + TABLE: ['', '
    ', 1], + TBODY: ['', '
    ', 2], + TR: ['', '
    ', 3], + TD: ['
    ', '
    ', 4], + SELECT: ['', 1] + } + }; + + var tags = INSERTION_TRANSLATIONS.tags; + + Object.extend(tags, { + THEAD: tags.TBODY, + TFOOT: tags.TBODY, + TH: tags.TD + }); + + function replace_IE(element, content) { + element = $(element); + if (content && content.toElement) + content = content.toElement(); + if (Object.isElement(content)) { + element.parentNode.replaceChild(content, element); + return element; + } + + content = Object.toHTML(content); + var parent = element.parentNode, tagName = parent.tagName.toUpperCase(); + + if (tagName in INSERTION_TRANSLATIONS.tags) { + var nextSibling = Element.next(element); + var fragments = getContentFromAnonymousElement( + tagName, content.stripScripts()); + + parent.removeChild(element); + + var iterator; + if (nextSibling) + iterator = function(node) { parent.insertBefore(node, nextSibling) }; + else + iterator = function(node) { parent.appendChild(node); } + + fragments.each(iterator); + } else { + element.outerHTML = content.stripScripts(); + } + + content.evalScripts.bind(content).defer(); + return element; + } + + if ('outerHTML' in document.documentElement) + replace = replace_IE; + + function isContent(content) { + if (Object.isUndefined(content) || content === null) return false; + + if (Object.isString(content) || Object.isNumber(content)) return true; + if (Object.isElement(content)) return true; + if (content.toElement || content.toHTML) return true; + + return false; + } + + function insertContentAt(element, content, position) { + position = position.toLowerCase(); + var method = INSERTION_TRANSLATIONS[position]; + + if (content && content.toElement) content = content.toElement(); + if (Object.isElement(content)) { + method(element, content); + return element; + } + + content = Object.toHTML(content); + var tagName = ((position === 'before' || position === 'after') ? + element.parentNode : element).tagName.toUpperCase(); + + var childNodes = getContentFromAnonymousElement(tagName, content.stripScripts()); + + if (position === 'top' || position === 'after') childNodes.reverse(); + + for (var i = 0, node; node = childNodes[i]; i++) + method(element, node); + + content.evalScripts.bind(content).defer(); + } + + function insert(element, insertions) { + element = $(element); + + if (isContent(insertions)) + insertions = { bottom: insertions }; + + for (var position in insertions) + insertContentAt(element, insertions[position], position); + + return element; + } + + function wrap(element, wrapper, attributes) { + element = $(element); + + if (Object.isElement(wrapper)) { + $(wrapper).writeAttribute(attributes || {}); + } else if (Object.isString(wrapper)) { + wrapper = new Element(wrapper, attributes); + } else { + wrapper = new Element('div', wrapper); + } + + if (element.parentNode) + element.parentNode.replaceChild(wrapper, element); + + wrapper.appendChild(element); + + return wrapper; + } + + function cleanWhitespace(element) { + element = $(element); + var node = element.firstChild; + + while (node) { + var nextNode = node.nextSibling; + if (node.nodeType === Node.TEXT_NODE && !/\S/.test(node.nodeValue)) + element.removeChild(node); + node = nextNode; + } + return element; + } + + function empty(element) { + return $(element).innerHTML.blank(); + } + + function getContentFromAnonymousElement(tagName, html, force) { + var t = INSERTION_TRANSLATIONS.tags[tagName], div = DIV; + + var workaround = !!t; + if (!workaround && force) { + workaround = true; + t = ['', '', 0]; + } + + if (workaround) { + div.innerHTML = ' ' + t[0] + html + t[1]; + div.removeChild(div.firstChild); + for (var i = t[2]; i--; ) + div = div.firstChild; + } else { + div.innerHTML = html; + } + + return $A(div.childNodes); + } + + function clone(element, deep) { + if (!(element = $(element))) return; + var clone = element.cloneNode(deep); + if (!HAS_UNIQUE_ID_PROPERTY) { + clone._prototypeUID = UNDEFINED; + if (deep) { + var descendants = Element.select(clone, '*'), + i = descendants.length; + while (i--) + descendants[i]._prototypeUID = UNDEFINED; + } + } + return Element.extend(clone); + } + + function purgeElement(element) { + var uid = getUniqueElementID(element); + if (uid) { + Element.stopObserving(element); + if (!HAS_UNIQUE_ID_PROPERTY) + element._prototypeUID = UNDEFINED; + delete Element.Storage[uid]; + } + } + + function purgeCollection(elements) { + var i = elements.length; + while (i--) + purgeElement(elements[i]); + } + + function purgeCollection_IE(elements) { + var i = elements.length, element, uid; + while (i--) { + element = elements[i]; + uid = getUniqueElementID(element); + delete Element.Storage[uid]; + delete Event.cache[uid]; + } + } + + if (HAS_UNIQUE_ID_PROPERTY) { + purgeCollection = purgeCollection_IE; + } + + + function purge(element) { + if (!(element = $(element))) return; + purgeElement(element); + + var descendants = element.getElementsByTagName('*'), + i = descendants.length; + + while (i--) purgeElement(descendants[i]); + + return null; + } + + Object.extend(methods, { + remove: remove, + update: update, + replace: replace, + insert: insert, + wrap: wrap, + cleanWhitespace: cleanWhitespace, + empty: empty, + clone: clone, + purge: purge + }); + + + + function recursivelyCollect(element, property, maximumLength) { + element = $(element); + maximumLength = maximumLength || -1; + var elements = []; + + while (element = element[property]) { + if (element.nodeType === Node.ELEMENT_NODE) + elements.push(Element.extend(element)); + + if (elements.length === maximumLength) break; + } + + return elements; + } + + + function ancestors(element) { + return recursivelyCollect(element, 'parentNode'); + } + + function descendants(element) { + return Element.select(element, '*'); + } + + function firstDescendant(element) { + element = $(element).firstChild; + while (element && element.nodeType !== Node.ELEMENT_NODE) + element = element.nextSibling; + + return $(element); + } + + function immediateDescendants(element) { + var results = [], child = $(element).firstChild; + + while (child) { + if (child.nodeType === Node.ELEMENT_NODE) + results.push(Element.extend(child)); + + child = child.nextSibling; + } + + return results; + } + + function previousSiblings(element) { + return recursivelyCollect(element, 'previousSibling'); + } + + function nextSiblings(element) { + return recursivelyCollect(element, 'nextSibling'); + } + + function siblings(element) { + element = $(element); + var previous = previousSiblings(element), + next = nextSiblings(element); + return previous.reverse().concat(next); + } + + function match(element, selector) { + element = $(element); + + if (Object.isString(selector)) + return Prototype.Selector.match(element, selector); + + return selector.match(element); + } + + + function _recursivelyFind(element, property, expression, index) { + element = $(element), expression = expression || 0, index = index || 0; + if (Object.isNumber(expression)) { + index = expression, expression = null; + } + + while (element = element[property]) { + if (element.nodeType !== 1) continue; + if (expression && !Prototype.Selector.match(element, expression)) + continue; + if (--index >= 0) continue; + + return Element.extend(element); + } + } + + + function up(element, expression, index) { + element = $(element); + + if (arguments.length === 1) return $(element.parentNode); + return _recursivelyFind(element, 'parentNode', expression, index); + } + + function down(element, expression, index) { + if (arguments.length === 1) return firstDescendant(element); + element = $(element), expression = expression || 0, index = index || 0; + + if (Object.isNumber(expression)) + index = expression, expression = '*'; + + var node = Prototype.Selector.select(expression, element)[index]; + return Element.extend(node); + } + + function previous(element, expression, index) { + return _recursivelyFind(element, 'previousSibling', expression, index); + } + + function next(element, expression, index) { + return _recursivelyFind(element, 'nextSibling', expression, index); + } + + function select(element) { + element = $(element); + var expressions = SLICE.call(arguments, 1).join(', '); + return Prototype.Selector.select(expressions, element); + } + + function adjacent(element) { + element = $(element); + var expressions = SLICE.call(arguments, 1).join(', '); + var siblings = Element.siblings(element), results = []; + for (var i = 0, sibling; sibling = siblings[i]; i++) { + if (Prototype.Selector.match(sibling, expressions)) + results.push(sibling); + } + + return results; + } + + function descendantOf_DOM(element, ancestor) { + element = $(element), ancestor = $(ancestor); + while (element = element.parentNode) + if (element === ancestor) return true; + return false; + } + + function descendantOf_contains(element, ancestor) { + element = $(element), ancestor = $(ancestor); + if (!ancestor.contains) return descendantOf_DOM(element, ancestor); + return ancestor.contains(element) && ancestor !== element; + } + + function descendantOf_compareDocumentPosition(element, ancestor) { + element = $(element), ancestor = $(ancestor); + return (element.compareDocumentPosition(ancestor) & 8) === 8; + } + + var descendantOf; + if (DIV.compareDocumentPosition) { + descendantOf = descendantOf_compareDocumentPosition; + } else if (DIV.contains) { + descendantOf = descendantOf_contains; + } else { + descendantOf = descendantOf_DOM; + } + + + Object.extend(methods, { + recursivelyCollect: recursivelyCollect, + ancestors: ancestors, + descendants: descendants, + firstDescendant: firstDescendant, + immediateDescendants: immediateDescendants, + previousSiblings: previousSiblings, + nextSiblings: nextSiblings, + siblings: siblings, + match: match, + up: up, + down: down, + previous: previous, + next: next, + select: select, + adjacent: adjacent, + descendantOf: descendantOf, + + getElementsBySelector: select, + + childElements: immediateDescendants + }); + + + var idCounter = 1; + function identify(element) { + element = $(element); + var id = Element.readAttribute(element, 'id'); + if (id) return id; + + do { id = 'anonymous_element_' + idCounter++ } while ($(id)); + + Element.writeAttribute(element, 'id', id); + return id; + } + + + function readAttribute(element, name) { + return $(element).getAttribute(name); + } + + function readAttribute_IE(element, name) { + element = $(element); + + var table = ATTRIBUTE_TRANSLATIONS.read; + if (table.values[name]) + return table.values[name](element, name); + + if (table.names[name]) name = table.names[name]; + + if (name.include(':')) { + if (!element.attributes || !element.attributes[name]) return null; + return element.attributes[name].value; + } + + return element.getAttribute(name); + } + + function readAttribute_Opera(element, name) { + if (name === 'title') return element.title; + return element.getAttribute(name); + } + + var PROBLEMATIC_ATTRIBUTE_READING = (function() { + DIV.setAttribute('onclick', []); + var value = DIV.getAttribute('onclick'); + var isFunction = Object.isArray(value); + DIV.removeAttribute('onclick'); + return isFunction; + })(); + + if (PROBLEMATIC_ATTRIBUTE_READING) { + readAttribute = readAttribute_IE; + } else if (Prototype.Browser.Opera) { + readAttribute = readAttribute_Opera; + } + + + function writeAttribute(element, name, value) { + element = $(element); + var attributes = {}, table = ATTRIBUTE_TRANSLATIONS.write; + + if (typeof name === 'object') { + attributes = name; + } else { + attributes[name] = Object.isUndefined(value) ? true : value; + } + + for (var attr in attributes) { + name = table.names[attr] || attr; + value = attributes[attr]; + if (table.values[attr]) + name = table.values[attr](element, value) || name; + if (value === false || value === null) + element.removeAttribute(name); + else if (value === true) + element.setAttribute(name, name); + else element.setAttribute(name, value); + } + + return element; + } + + var PROBLEMATIC_HAS_ATTRIBUTE_WITH_CHECKBOXES = (function () { + if (!HAS_EXTENDED_CREATE_ELEMENT_SYNTAX) { + return false; + } + var checkbox = document.createElement(''); + checkbox.checked = true; + var node = checkbox.getAttributeNode('checked'); + return !node || !node.specified; + })(); + + function hasAttribute(element, attribute) { + attribute = ATTRIBUTE_TRANSLATIONS.has[attribute] || attribute; + var node = $(element).getAttributeNode(attribute); + return !!(node && node.specified); + } + + function hasAttribute_IE(element, attribute) { + if (attribute === 'checked') { + return element.checked; + } + return hasAttribute(element, attribute); + } + + GLOBAL.Element.Methods.Simulated.hasAttribute = + PROBLEMATIC_HAS_ATTRIBUTE_WITH_CHECKBOXES ? + hasAttribute_IE : hasAttribute; + + function classNames(element) { + return new Element.ClassNames(element); + } + + var regExpCache = {}; + function getRegExpForClassName(className) { + if (regExpCache[className]) return regExpCache[className]; + + var re = new RegExp("(^|\\s+)" + className + "(\\s+|$)"); + regExpCache[className] = re; + return re; + } + + function hasClassName(element, className) { + if (!(element = $(element))) return; + + var elementClassName = element.className; + + if (elementClassName.length === 0) return false; + if (elementClassName === className) return true; + + return getRegExpForClassName(className).test(elementClassName); + } + + function addClassName(element, className) { + if (!(element = $(element))) return; + + if (!hasClassName(element, className)) + element.className += (element.className ? ' ' : '') + className; + + return element; + } + + function removeClassName(element, className) { + if (!(element = $(element))) return; + + element.className = element.className.replace( + getRegExpForClassName(className), ' ').strip(); + + return element; + } + + function toggleClassName(element, className, bool) { + if (!(element = $(element))) return; + + if (Object.isUndefined(bool)) + bool = !hasClassName(element, className); + + var method = Element[bool ? 'addClassName' : 'removeClassName']; + return method(element, className); + } + + var ATTRIBUTE_TRANSLATIONS = {}; + + var classProp = 'className', forProp = 'for'; + + DIV.setAttribute(classProp, 'x'); + if (DIV.className !== 'x') { + DIV.setAttribute('class', 'x'); + if (DIV.className === 'x') + classProp = 'class'; + } + + var LABEL = document.createElement('label'); + LABEL.setAttribute(forProp, 'x'); + if (LABEL.htmlFor !== 'x') { + LABEL.setAttribute('htmlFor', 'x'); + if (LABEL.htmlFor === 'x') + forProp = 'htmlFor'; + } + LABEL = null; + + function _getAttr(element, attribute) { + return element.getAttribute(attribute); + } + + function _getAttr2(element, attribute) { + return element.getAttribute(attribute, 2); + } + + function _getAttrNode(element, attribute) { + var node = element.getAttributeNode(attribute); + return node ? node.value : ''; + } + + function _getFlag(element, attribute) { + return $(element).hasAttribute(attribute) ? attribute : null; + } + + DIV.onclick = Prototype.emptyFunction; + var onclickValue = DIV.getAttribute('onclick'); + + var _getEv; + + if (String(onclickValue).indexOf('{') > -1) { + _getEv = function(element, attribute) { + var value = element.getAttribute(attribute); + if (!value) return null; + value = value.toString(); + value = value.split('{')[1]; + value = value.split('}')[0]; + return value.strip(); + }; + } + else if (onclickValue === '') { + _getEv = function(element, attribute) { + var value = element.getAttribute(attribute); + if (!value) return null; + return value.strip(); + }; + } + + ATTRIBUTE_TRANSLATIONS.read = { + names: { + 'class': classProp, + 'className': classProp, + 'for': forProp, + 'htmlFor': forProp + }, + + values: { + style: function(element) { + return element.style.cssText.toLowerCase(); + }, + title: function(element) { + return element.title; + } + } + }; + + ATTRIBUTE_TRANSLATIONS.write = { + names: { + className: 'class', + htmlFor: 'for', + cellpadding: 'cellPadding', + cellspacing: 'cellSpacing' + }, + + values: { + checked: function(element, value) { + element.checked = !!value; + }, + + style: function(element, value) { + element.style.cssText = value ? value : ''; + } + } + }; + + ATTRIBUTE_TRANSLATIONS.has = { names: {} }; + + Object.extend(ATTRIBUTE_TRANSLATIONS.write.names, + ATTRIBUTE_TRANSLATIONS.read.names); + + var CAMEL_CASED_ATTRIBUTE_NAMES = $w('colSpan rowSpan vAlign dateTime ' + + 'accessKey tabIndex encType maxLength readOnly longDesc frameBorder'); + + for (var i = 0, attr; attr = CAMEL_CASED_ATTRIBUTE_NAMES[i]; i++) { + ATTRIBUTE_TRANSLATIONS.write.names[attr.toLowerCase()] = attr; + ATTRIBUTE_TRANSLATIONS.has.names[attr.toLowerCase()] = attr; + } + + Object.extend(ATTRIBUTE_TRANSLATIONS.read.values, { + href: _getAttr2, + src: _getAttr2, + type: _getAttr, + action: _getAttrNode, + disabled: _getFlag, + checked: _getFlag, + readonly: _getFlag, + multiple: _getFlag, + onload: _getEv, + onunload: _getEv, + onclick: _getEv, + ondblclick: _getEv, + onmousedown: _getEv, + onmouseup: _getEv, + onmouseover: _getEv, + onmousemove: _getEv, + onmouseout: _getEv, + onfocus: _getEv, + onblur: _getEv, + onkeypress: _getEv, + onkeydown: _getEv, + onkeyup: _getEv, + onsubmit: _getEv, + onreset: _getEv, + onselect: _getEv, + onchange: _getEv + }); + + + Object.extend(methods, { + identify: identify, + readAttribute: readAttribute, + writeAttribute: writeAttribute, + classNames: classNames, + hasClassName: hasClassName, + addClassName: addClassName, + removeClassName: removeClassName, + toggleClassName: toggleClassName + }); + + + function normalizeStyleName(style) { + if (style === 'float' || style === 'styleFloat') + return 'cssFloat'; + return style.camelize(); + } + + function normalizeStyleName_IE(style) { + if (style === 'float' || style === 'cssFloat') + return 'styleFloat'; + return style.camelize(); + } + + function setStyle(element, styles) { + element = $(element); + var elementStyle = element.style, match; + + if (Object.isString(styles)) { + elementStyle.cssText += ';' + styles; + if (styles.include('opacity')) { + var opacity = styles.match(/opacity:\s*(\d?\.?\d*)/)[1]; + Element.setOpacity(element, opacity); + } + return element; + } + + for (var property in styles) { + if (property === 'opacity') { + Element.setOpacity(element, styles[property]); + } else { + var value = styles[property]; + if (property === 'float' || property === 'cssFloat') { + property = Object.isUndefined(elementStyle.styleFloat) ? + 'cssFloat' : 'styleFloat'; + } + elementStyle[property] = value; + } + } + + return element; + } + + + function getStyle(element, style) { + element = $(element); + style = normalizeStyleName(style); + + var value = element.style[style]; + if (!value || value === 'auto') { + var css = document.defaultView.getComputedStyle(element, null); + value = css ? css[style] : null; + } + + if (style === 'opacity') return value ? parseFloat(value) : 1.0; + return value === 'auto' ? null : value; + } + + function getStyle_Opera(element, style) { + switch (style) { + case 'height': case 'width': + if (!Element.visible(element)) return null; + + var dim = parseInt(getStyle(element, style), 10); + + if (dim !== element['offset' + style.capitalize()]) + return dim + 'px'; + + return Element.measure(element, style); + + default: return getStyle(element, style); + } + } + + function getStyle_IE(element, style) { + element = $(element); + style = normalizeStyleName_IE(style); + + var value = element.style[style]; + if (!value && element.currentStyle) { + value = element.currentStyle[style]; + } + + if (style === 'opacity' && !STANDARD_CSS_OPACITY_SUPPORTED) + return getOpacity_IE(element); + + if (value === 'auto') { + if ((style === 'width' || style === 'height') && Element.visible(element)) + return Element.measure(element, style) + 'px'; + return null; + } + + return value; + } + + function stripAlphaFromFilter_IE(filter) { + return (filter || '').replace(/alpha\([^\)]*\)/gi, ''); + } + + function hasLayout_IE(element) { + if (!element.currentStyle || !element.currentStyle.hasLayout) + element.style.zoom = 1; + return element; + } + + var STANDARD_CSS_OPACITY_SUPPORTED = (function() { + DIV.style.cssText = "opacity:.55"; + return /^0.55/.test(DIV.style.opacity); + })(); + + function setOpacity(element, value) { + element = $(element); + if (value == 1 || value === '') value = ''; + else if (value < 0.00001) value = 0; + element.style.opacity = value; + return element; + } + + function setOpacity_IE(element, value) { + if (STANDARD_CSS_OPACITY_SUPPORTED) + return setOpacity(element, value); + + element = hasLayout_IE($(element)); + var filter = Element.getStyle(element, 'filter'), + style = element.style; + + if (value == 1 || value === '') { + filter = stripAlphaFromFilter_IE(filter); + if (filter) style.filter = filter; + else style.removeAttribute('filter'); + return element; + } + + if (value < 0.00001) value = 0; + + style.filter = stripAlphaFromFilter_IE(filter) + + 'alpha(opacity=' + (value * 100) + ')'; + + return element; + } + + + function getOpacity(element) { + return Element.getStyle(element, 'opacity'); + } + + function getOpacity_IE(element) { + if (STANDARD_CSS_OPACITY_SUPPORTED) + return getOpacity(element); + + var filter = Element.getStyle(element, 'filter'); + if (filter.length === 0) return 1.0; + var match = (filter || '').match(/alpha\(opacity=(.*)\)/); + if (match && match[1]) return parseFloat(match[1]) / 100; + return 1.0; + } + + + Object.extend(methods, { + setStyle: setStyle, + getStyle: getStyle, + setOpacity: setOpacity, + getOpacity: getOpacity + }); + + if ('styleFloat' in DIV.style) { + methods.getStyle = getStyle_IE; + methods.setOpacity = setOpacity_IE; + methods.getOpacity = getOpacity_IE; + } + + var UID = 0; + + GLOBAL.Element.Storage = { UID: 1 }; + + function getUniqueElementID(element) { + if (element === window) return 0; + + if (typeof element._prototypeUID === 'undefined') + element._prototypeUID = Element.Storage.UID++; + return element._prototypeUID; + } + + function getUniqueElementID_IE(element) { + if (element === window) return 0; + if (element == document) return 1; + return element.uniqueID; + } + + var HAS_UNIQUE_ID_PROPERTY = ('uniqueID' in DIV); + if (HAS_UNIQUE_ID_PROPERTY) + getUniqueElementID = getUniqueElementID_IE; + + function getStorage(element) { + if (!(element = $(element))) return; + + var uid = getUniqueElementID(element); + + if (!Element.Storage[uid]) + Element.Storage[uid] = $H(); + + return Element.Storage[uid]; + } + + function store(element, key, value) { + if (!(element = $(element))) return; + var storage = getStorage(element); + if (arguments.length === 2) { + storage.update(key); + } else { + storage.set(key, value); + } + return element; + } + + function retrieve(element, key, defaultValue) { + if (!(element = $(element))) return; + var storage = getStorage(element), value = storage.get(key); + + if (Object.isUndefined(value)) { + storage.set(key, defaultValue); + value = defaultValue; + } + + return value; + } + + + Object.extend(methods, { + getStorage: getStorage, + store: store, + retrieve: retrieve + }); + + + var Methods = {}, ByTag = Element.Methods.ByTag, + F = Prototype.BrowserFeatures; + + if (!F.ElementExtensions && ('__proto__' in DIV)) { + GLOBAL.HTMLElement = {}; + GLOBAL.HTMLElement.prototype = DIV['__proto__']; + F.ElementExtensions = true; + } + + function checkElementPrototypeDeficiency(tagName) { + if (typeof window.Element === 'undefined') return false; + if (!HAS_EXTENDED_CREATE_ELEMENT_SYNTAX) return false; + var proto = window.Element.prototype; + if (proto) { + var id = '_' + (Math.random() + '').slice(2), + el = document.createElement(tagName); + proto[id] = 'x'; + var isBuggy = (el[id] !== 'x'); + delete proto[id]; + el = null; + return isBuggy; + } + + return false; + } + + var HTMLOBJECTELEMENT_PROTOTYPE_BUGGY = + checkElementPrototypeDeficiency('object'); + + function extendElementWith(element, methods) { + for (var property in methods) { + var value = methods[property]; + if (Object.isFunction(value) && !(property in element)) + element[property] = value.methodize(); + } + } + + var EXTENDED = {}; + function elementIsExtended(element) { + var uid = getUniqueElementID(element); + return (uid in EXTENDED); + } + + function extend(element) { + if (!element || elementIsExtended(element)) return element; + if (element.nodeType !== Node.ELEMENT_NODE || element == window) + return element; + + var methods = Object.clone(Methods), + tagName = element.tagName.toUpperCase(); + + if (ByTag[tagName]) Object.extend(methods, ByTag[tagName]); + + extendElementWith(element, methods); + EXTENDED[getUniqueElementID(element)] = true; + return element; + } + + function extend_IE8(element) { + if (!element || elementIsExtended(element)) return element; + + var t = element.tagName; + if (t && (/^(?:object|applet|embed)$/i.test(t))) { + extendElementWith(element, Element.Methods); + extendElementWith(element, Element.Methods.Simulated); + extendElementWith(element, Element.Methods.ByTag[t.toUpperCase()]); + } + + return element; + } + + if (F.SpecificElementExtensions) { + extend = HTMLOBJECTELEMENT_PROTOTYPE_BUGGY ? extend_IE8 : Prototype.K; + } + + function addMethodsToTagName(tagName, methods) { + tagName = tagName.toUpperCase(); + if (!ByTag[tagName]) ByTag[tagName] = {}; + Object.extend(ByTag[tagName], methods); + } + + function mergeMethods(destination, methods, onlyIfAbsent) { + if (Object.isUndefined(onlyIfAbsent)) onlyIfAbsent = false; + for (var property in methods) { + var value = methods[property]; + if (!Object.isFunction(value)) continue; + if (!onlyIfAbsent || !(property in destination)) + destination[property] = value.methodize(); + } + } + + function findDOMClass(tagName) { + var klass; + var trans = { + "OPTGROUP": "OptGroup", "TEXTAREA": "TextArea", "P": "Paragraph", + "FIELDSET": "FieldSet", "UL": "UList", "OL": "OList", "DL": "DList", + "DIR": "Directory", "H1": "Heading", "H2": "Heading", "H3": "Heading", + "H4": "Heading", "H5": "Heading", "H6": "Heading", "Q": "Quote", + "INS": "Mod", "DEL": "Mod", "A": "Anchor", "IMG": "Image", "CAPTION": + "TableCaption", "COL": "TableCol", "COLGROUP": "TableCol", "THEAD": + "TableSection", "TFOOT": "TableSection", "TBODY": "TableSection", "TR": + "TableRow", "TH": "TableCell", "TD": "TableCell", "FRAMESET": + "FrameSet", "IFRAME": "IFrame" + }; + if (trans[tagName]) klass = 'HTML' + trans[tagName] + 'Element'; + if (window[klass]) return window[klass]; + klass = 'HTML' + tagName + 'Element'; + if (window[klass]) return window[klass]; + klass = 'HTML' + tagName.capitalize() + 'Element'; + if (window[klass]) return window[klass]; + + var element = document.createElement(tagName), + proto = element['__proto__'] || element.constructor.prototype; + + element = null; + return proto; + } + + function addMethods(methods) { + if (arguments.length === 0) addFormMethods(); + + if (arguments.length === 2) { + var tagName = methods; + methods = arguments[1]; + } + + if (!tagName) { + Object.extend(Element.Methods, methods || {}); + } else { + if (Object.isArray(tagName)) { + for (var i = 0, tag; tag = tagName[i]; i++) + addMethodsToTagName(tag, methods); + } else { + addMethodsToTagName(tagName, methods); + } + } + + var ELEMENT_PROTOTYPE = window.HTMLElement ? HTMLElement.prototype : + Element.prototype; + + if (F.ElementExtensions) { + mergeMethods(ELEMENT_PROTOTYPE, Element.Methods); + mergeMethods(ELEMENT_PROTOTYPE, Element.Methods.Simulated, true); + } + + if (F.SpecificElementExtensions) { + for (var tag in Element.Methods.ByTag) { + var klass = findDOMClass(tag); + if (Object.isUndefined(klass)) continue; + mergeMethods(klass.prototype, ByTag[tag]); + } + } + + Object.extend(Element, Element.Methods); + Object.extend(Element, Element.Methods.Simulated); + delete Element.ByTag; + delete Element.Simulated; + + Element.extend.refresh(); + + ELEMENT_CACHE = {}; + } + + Object.extend(GLOBAL.Element, { + extend: extend, + addMethods: addMethods + }); + + if (extend === Prototype.K) { + GLOBAL.Element.extend.refresh = Prototype.emptyFunction; + } else { + GLOBAL.Element.extend.refresh = function() { + if (Prototype.BrowserFeatures.ElementExtensions) return; + Object.extend(Methods, Element.Methods); + Object.extend(Methods, Element.Methods.Simulated); + + EXTENDED = {}; + }; + } + + function addFormMethods() { + Object.extend(Form, Form.Methods); + Object.extend(Form.Element, Form.Element.Methods); + Object.extend(Element.Methods.ByTag, { + "FORM": Object.clone(Form.Methods), + "INPUT": Object.clone(Form.Element.Methods), + "SELECT": Object.clone(Form.Element.Methods), + "TEXTAREA": Object.clone(Form.Element.Methods), + "BUTTON": Object.clone(Form.Element.Methods) + }); + } + + Element.addMethods(methods); + + function destroyCache_IE() { + DIV = null; + ELEMENT_CACHE = null; + } + + if (window.attachEvent) + window.attachEvent('onunload', destroyCache_IE); + +})(this); +(function() { + + function toDecimal(pctString) { + var match = pctString.match(/^(\d+)%?$/i); + if (!match) return null; + return (Number(match[1]) / 100); + } + + function getRawStyle(element, style) { + element = $(element); + + var value = element.style[style]; + if (!value || value === 'auto') { + var css = document.defaultView.getComputedStyle(element, null); + value = css ? css[style] : null; + } + + if (style === 'opacity') return value ? parseFloat(value) : 1.0; + return value === 'auto' ? null : value; + } + + function getRawStyle_IE(element, style) { + var value = element.style[style]; + if (!value && element.currentStyle) { + value = element.currentStyle[style]; + } + return value; + } + + function getContentWidth(element, context) { + var boxWidth = element.offsetWidth; + + var bl = getPixelValue(element, 'borderLeftWidth', context) || 0; + var br = getPixelValue(element, 'borderRightWidth', context) || 0; + var pl = getPixelValue(element, 'paddingLeft', context) || 0; + var pr = getPixelValue(element, 'paddingRight', context) || 0; + + return boxWidth - bl - br - pl - pr; + } + + if ('currentStyle' in document.documentElement) { + getRawStyle = getRawStyle_IE; + } + + + function getPixelValue(value, property, context) { + var element = null; + if (Object.isElement(value)) { + element = value; + value = getRawStyle(element, property); + } + + if (value === null || Object.isUndefined(value)) { + return null; + } + + if ((/^(?:-)?\d+(\.\d+)?(px)?$/i).test(value)) { + return window.parseFloat(value); + } + + var isPercentage = value.include('%'), isViewport = (context === document.viewport); + + if (/\d/.test(value) && element && element.runtimeStyle && !(isPercentage && isViewport)) { + var style = element.style.left, rStyle = element.runtimeStyle.left; + element.runtimeStyle.left = element.currentStyle.left; + element.style.left = value || 0; + value = element.style.pixelLeft; + element.style.left = style; + element.runtimeStyle.left = rStyle; + + return value; + } + + if (element && isPercentage) { + context = context || element.parentNode; + var decimal = toDecimal(value), whole = null; + + var isHorizontal = property.include('left') || property.include('right') || + property.include('width'); + + var isVertical = property.include('top') || property.include('bottom') || + property.include('height'); + + if (context === document.viewport) { + if (isHorizontal) { + whole = document.viewport.getWidth(); + } else if (isVertical) { + whole = document.viewport.getHeight(); + } + } else { + if (isHorizontal) { + whole = $(context).measure('width'); + } else if (isVertical) { + whole = $(context).measure('height'); + } + } + + return (whole === null) ? 0 : whole * decimal; + } + + return 0; + } + + function toCSSPixels(number) { + if (Object.isString(number) && number.endsWith('px')) + return number; + return number + 'px'; + } + + function isDisplayed(element) { + while (element && element.parentNode) { + var display = element.getStyle('display'); + if (display === 'none') { + return false; + } + element = $(element.parentNode); + } + return true; + } + + var hasLayout = Prototype.K; + if ('currentStyle' in document.documentElement) { + hasLayout = function(element) { + if (!element.currentStyle.hasLayout) { + element.style.zoom = 1; + } + return element; + }; + } + + function cssNameFor(key) { + if (key.include('border')) key = key + '-width'; + return key.camelize(); + } + + Element.Layout = Class.create(Hash, { + initialize: function($super, element, preCompute) { + $super(); + this.element = $(element); + + Element.Layout.PROPERTIES.each( function(property) { + this._set(property, null); + }, this); + + if (preCompute) { + this._preComputing = true; + this._begin(); + Element.Layout.PROPERTIES.each( this._compute, this ); + this._end(); + this._preComputing = false; + } + }, + + _set: function(property, value) { + return Hash.prototype.set.call(this, property, value); + }, + + set: function(property, value) { + throw "Properties of Element.Layout are read-only."; + }, + + get: function($super, property) { + var value = $super(property); + return value === null ? this._compute(property) : value; + }, + + _begin: function() { + if (this._isPrepared()) return; + + var element = this.element; + if (isDisplayed(element)) { + this._setPrepared(true); + return; + } + + + var originalStyles = { + position: element.style.position || '', + width: element.style.width || '', + visibility: element.style.visibility || '', + display: element.style.display || '' + }; + + element.store('prototype_original_styles', originalStyles); + + var position = getRawStyle(element, 'position'), width = element.offsetWidth; + + if (width === 0 || width === null) { + element.style.display = 'block'; + width = element.offsetWidth; + } + + var context = (position === 'fixed') ? document.viewport : + element.parentNode; + + var tempStyles = { + visibility: 'hidden', + display: 'block' + }; + + if (position !== 'fixed') tempStyles.position = 'absolute'; + + element.setStyle(tempStyles); + + var positionedWidth = element.offsetWidth, newWidth; + if (width && (positionedWidth === width)) { + newWidth = getContentWidth(element, context); + } else if (position === 'absolute' || position === 'fixed') { + newWidth = getContentWidth(element, context); + } else { + var parent = element.parentNode, pLayout = $(parent).getLayout(); + + newWidth = pLayout.get('width') - + this.get('margin-left') - + this.get('border-left') - + this.get('padding-left') - + this.get('padding-right') - + this.get('border-right') - + this.get('margin-right'); + } + + element.setStyle({ width: newWidth + 'px' }); + + this._setPrepared(true); + }, + + _end: function() { + var element = this.element; + var originalStyles = element.retrieve('prototype_original_styles'); + element.store('prototype_original_styles', null); + element.setStyle(originalStyles); + this._setPrepared(false); + }, + + _compute: function(property) { + var COMPUTATIONS = Element.Layout.COMPUTATIONS; + if (!(property in COMPUTATIONS)) { + throw "Property not found."; + } + + return this._set(property, COMPUTATIONS[property].call(this, this.element)); + }, + + _isPrepared: function() { + return this.element.retrieve('prototype_element_layout_prepared', false); + }, + + _setPrepared: function(bool) { + return this.element.store('prototype_element_layout_prepared', bool); + }, + + toObject: function() { + var args = $A(arguments); + var keys = (args.length === 0) ? Element.Layout.PROPERTIES : + args.join(' ').split(' '); + var obj = {}; + keys.each( function(key) { + if (!Element.Layout.PROPERTIES.include(key)) return; + var value = this.get(key); + if (value != null) obj[key] = value; + }, this); + return obj; + }, + + toHash: function() { + var obj = this.toObject.apply(this, arguments); + return new Hash(obj); + }, + + toCSS: function() { + var args = $A(arguments); + var keys = (args.length === 0) ? Element.Layout.PROPERTIES : + args.join(' ').split(' '); + var css = {}; + + keys.each( function(key) { + if (!Element.Layout.PROPERTIES.include(key)) return; + if (Element.Layout.COMPOSITE_PROPERTIES.include(key)) return; + + var value = this.get(key); + if (value != null) css[cssNameFor(key)] = value + 'px'; + }, this); + return css; + }, + + inspect: function() { + return "#"; + } + }); + + Object.extend(Element.Layout, { + PROPERTIES: $w('height width top left right bottom border-left border-right border-top border-bottom padding-left padding-right padding-top padding-bottom margin-top margin-bottom margin-left margin-right padding-box-width padding-box-height border-box-width border-box-height margin-box-width margin-box-height'), + + COMPOSITE_PROPERTIES: $w('padding-box-width padding-box-height margin-box-width margin-box-height border-box-width border-box-height'), + + COMPUTATIONS: { + 'height': function(element) { + if (!this._preComputing) this._begin(); + + var bHeight = this.get('border-box-height'); + if (bHeight <= 0) { + if (!this._preComputing) this._end(); + return 0; + } + + var bTop = this.get('border-top'), + bBottom = this.get('border-bottom'); + + var pTop = this.get('padding-top'), + pBottom = this.get('padding-bottom'); + + if (!this._preComputing) this._end(); + + return bHeight - bTop - bBottom - pTop - pBottom; + }, + + 'width': function(element) { + if (!this._preComputing) this._begin(); + + var bWidth = this.get('border-box-width'); + if (bWidth <= 0) { + if (!this._preComputing) this._end(); + return 0; + } + + var bLeft = this.get('border-left'), + bRight = this.get('border-right'); + + var pLeft = this.get('padding-left'), + pRight = this.get('padding-right'); + + if (!this._preComputing) this._end(); + return bWidth - bLeft - bRight - pLeft - pRight; + }, + + 'padding-box-height': function(element) { + var height = this.get('height'), + pTop = this.get('padding-top'), + pBottom = this.get('padding-bottom'); + + return height + pTop + pBottom; + }, + + 'padding-box-width': function(element) { + var width = this.get('width'), + pLeft = this.get('padding-left'), + pRight = this.get('padding-right'); + + return width + pLeft + pRight; + }, + + 'border-box-height': function(element) { + if (!this._preComputing) this._begin(); + var height = element.offsetHeight; + if (!this._preComputing) this._end(); + return height; + }, + + 'border-box-width': function(element) { + if (!this._preComputing) this._begin(); + var width = element.offsetWidth; + if (!this._preComputing) this._end(); + return width; + }, + + 'margin-box-height': function(element) { + var bHeight = this.get('border-box-height'), + mTop = this.get('margin-top'), + mBottom = this.get('margin-bottom'); + + if (bHeight <= 0) return 0; + + return bHeight + mTop + mBottom; + }, + + 'margin-box-width': function(element) { + var bWidth = this.get('border-box-width'), + mLeft = this.get('margin-left'), + mRight = this.get('margin-right'); + + if (bWidth <= 0) return 0; + + return bWidth + mLeft + mRight; + }, + + 'top': function(element) { + var offset = element.positionedOffset(); + return offset.top; + }, + + 'bottom': function(element) { + var offset = element.positionedOffset(), + parent = element.getOffsetParent(), + pHeight = parent.measure('height'); + + var mHeight = this.get('border-box-height'); + + return pHeight - mHeight - offset.top; + }, + + 'left': function(element) { + var offset = element.positionedOffset(); + return offset.left; + }, + + 'right': function(element) { + var offset = element.positionedOffset(), + parent = element.getOffsetParent(), + pWidth = parent.measure('width'); + + var mWidth = this.get('border-box-width'); + + return pWidth - mWidth - offset.left; + }, + + 'padding-top': function(element) { + return getPixelValue(element, 'paddingTop'); + }, + + 'padding-bottom': function(element) { + return getPixelValue(element, 'paddingBottom'); + }, + + 'padding-left': function(element) { + return getPixelValue(element, 'paddingLeft'); + }, + + 'padding-right': function(element) { + return getPixelValue(element, 'paddingRight'); + }, + + 'border-top': function(element) { + return getPixelValue(element, 'borderTopWidth'); + }, + + 'border-bottom': function(element) { + return getPixelValue(element, 'borderBottomWidth'); + }, + + 'border-left': function(element) { + return getPixelValue(element, 'borderLeftWidth'); + }, + + 'border-right': function(element) { + return getPixelValue(element, 'borderRightWidth'); + }, + + 'margin-top': function(element) { + return getPixelValue(element, 'marginTop'); + }, + + 'margin-bottom': function(element) { + return getPixelValue(element, 'marginBottom'); + }, + + 'margin-left': function(element) { + return getPixelValue(element, 'marginLeft'); + }, + + 'margin-right': function(element) { + return getPixelValue(element, 'marginRight'); + } + } + }); + + if ('getBoundingClientRect' in document.documentElement) { + Object.extend(Element.Layout.COMPUTATIONS, { + 'right': function(element) { + var parent = hasLayout(element.getOffsetParent()); + var rect = element.getBoundingClientRect(), + pRect = parent.getBoundingClientRect(); + + return (pRect.right - rect.right).round(); + }, + + 'bottom': function(element) { + var parent = hasLayout(element.getOffsetParent()); + var rect = element.getBoundingClientRect(), + pRect = parent.getBoundingClientRect(); + + return (pRect.bottom - rect.bottom).round(); + } + }); + } + + Element.Offset = Class.create({ + initialize: function(left, top) { + this.left = left.round(); + this.top = top.round(); + + this[0] = this.left; + this[1] = this.top; + }, + + relativeTo: function(offset) { + return new Element.Offset( + this.left - offset.left, + this.top - offset.top + ); + }, + + inspect: function() { + return "#".interpolate(this); + }, + + toString: function() { + return "[#{left}, #{top}]".interpolate(this); + }, + + toArray: function() { + return [this.left, this.top]; + } + }); + + function getLayout(element, preCompute) { + return new Element.Layout(element, preCompute); + } + + function measure(element, property) { + return $(element).getLayout().get(property); + } + + function getHeight(element) { + return Element.getDimensions(element).height; + } + + function getWidth(element) { + return Element.getDimensions(element).width; + } + + function getDimensions(element) { + element = $(element); + var display = Element.getStyle(element, 'display'); + + if (display && display !== 'none') { + return { width: element.offsetWidth, height: element.offsetHeight }; + } + + var style = element.style; + var originalStyles = { + visibility: style.visibility, + position: style.position, + display: style.display + }; + + var newStyles = { + visibility: 'hidden', + display: 'block' + }; + + if (originalStyles.position !== 'fixed') + newStyles.position = 'absolute'; + + Element.setStyle(element, newStyles); + + var dimensions = { + width: element.offsetWidth, + height: element.offsetHeight + }; + + Element.setStyle(element, originalStyles); + + return dimensions; + } + + function getOffsetParent(element) { + element = $(element); + + if (isDocument(element) || isDetached(element) || isBody(element) || isHtml(element)) + return $(document.body); + + var isInline = (Element.getStyle(element, 'display') === 'inline'); + if (!isInline && element.offsetParent) return $(element.offsetParent); + + while ((element = element.parentNode) && element !== document.body) { + if (Element.getStyle(element, 'position') !== 'static') { + return isHtml(element) ? $(document.body) : $(element); + } + } + + return $(document.body); + } + + + function cumulativeOffset(element) { + element = $(element); + var valueT = 0, valueL = 0; + if (element.parentNode) { + do { + valueT += element.offsetTop || 0; + valueL += element.offsetLeft || 0; + element = element.offsetParent; + } while (element); + } + return new Element.Offset(valueL, valueT); + } + + function positionedOffset(element) { + element = $(element); + + var layout = element.getLayout(); + + var valueT = 0, valueL = 0; + do { + valueT += element.offsetTop || 0; + valueL += element.offsetLeft || 0; + element = element.offsetParent; + if (element) { + if (isBody(element)) break; + var p = Element.getStyle(element, 'position'); + if (p !== 'static') break; + } + } while (element); + + valueL -= layout.get('margin-top'); + valueT -= layout.get('margin-left'); + + return new Element.Offset(valueL, valueT); + } + + function cumulativeScrollOffset(element) { + var valueT = 0, valueL = 0; + do { + if (element === document.body) { + var bodyScrollNode = document.documentElement || document.body.parentNode || document.body; + valueT += !Object.isUndefined(window.pageYOffset) ? window.pageYOffset : bodyScrollNode.scrollTop || 0; + valueL += !Object.isUndefined(window.pageXOffset) ? window.pageXOffset : bodyScrollNode.scrollLeft || 0; + break; + } else { + valueT += element.scrollTop || 0; + valueL += element.scrollLeft || 0; + element = element.parentNode; + } + } while (element); + return new Element.Offset(valueL, valueT); + } + + function viewportOffset(forElement) { + var valueT = 0, valueL = 0, docBody = document.body; + + forElement = $(forElement); + var element = forElement; + do { + valueT += element.offsetTop || 0; + valueL += element.offsetLeft || 0; + if (element.offsetParent == docBody && + Element.getStyle(element, 'position') == 'absolute') break; + } while (element = element.offsetParent); + + element = forElement; + do { + if (element != docBody) { + valueT -= element.scrollTop || 0; + valueL -= element.scrollLeft || 0; + } + } while (element = element.parentNode); + return new Element.Offset(valueL, valueT); + } + + function absolutize(element) { + element = $(element); + + if (Element.getStyle(element, 'position') === 'absolute') { + return element; + } + + var offsetParent = getOffsetParent(element); + var eOffset = element.viewportOffset(), + pOffset = offsetParent.viewportOffset(); + + var offset = eOffset.relativeTo(pOffset); + var layout = element.getLayout(); + + element.store('prototype_absolutize_original_styles', { + position: element.getStyle('position'), + left: element.getStyle('left'), + top: element.getStyle('top'), + width: element.getStyle('width'), + height: element.getStyle('height') + }); + + element.setStyle({ + position: 'absolute', + top: offset.top + 'px', + left: offset.left + 'px', + width: layout.get('width') + 'px', + height: layout.get('height') + 'px' + }); + + return element; + } + + function relativize(element) { + element = $(element); + if (Element.getStyle(element, 'position') === 'relative') { + return element; + } + + var originalStyles = + element.retrieve('prototype_absolutize_original_styles'); + + if (originalStyles) element.setStyle(originalStyles); + return element; + } + + + function scrollTo(element) { + element = $(element); + var pos = Element.cumulativeOffset(element); + window.scrollTo(pos.left, pos.top); + return element; + } + + + function makePositioned(element) { + element = $(element); + var position = Element.getStyle(element, 'position'), styles = {}; + if (position === 'static' || !position) { + styles.position = 'relative'; + if (Prototype.Browser.Opera) { + styles.top = 0; + styles.left = 0; + } + Element.setStyle(element, styles); + Element.store(element, 'prototype_made_positioned', true); + } + return element; + } + + function undoPositioned(element) { + element = $(element); + var storage = Element.getStorage(element), + madePositioned = storage.get('prototype_made_positioned'); + + if (madePositioned) { + storage.unset('prototype_made_positioned'); + Element.setStyle(element, { + position: '', + top: '', + bottom: '', + left: '', + right: '' + }); + } + return element; + } + + function makeClipping(element) { + element = $(element); + + var storage = Element.getStorage(element), + madeClipping = storage.get('prototype_made_clipping'); + + if (Object.isUndefined(madeClipping)) { + var overflow = Element.getStyle(element, 'overflow'); + storage.set('prototype_made_clipping', overflow); + if (overflow !== 'hidden') + element.style.overflow = 'hidden'; + } + + return element; + } + + function undoClipping(element) { + element = $(element); + var storage = Element.getStorage(element), + overflow = storage.get('prototype_made_clipping'); + + if (!Object.isUndefined(overflow)) { + storage.unset('prototype_made_clipping'); + element.style.overflow = overflow || ''; + } + + return element; + } + + function clonePosition(element, source, options) { + options = Object.extend({ + setLeft: true, + setTop: true, + setWidth: true, + setHeight: true, + offsetTop: 0, + offsetLeft: 0 + }, options || {}); + + source = $(source); + element = $(element); + var p, delta, layout, styles = {}; + + if (options.setLeft || options.setTop) { + p = Element.viewportOffset(source); + delta = [0, 0]; + if (Element.getStyle(element, 'position') === 'absolute') { + var parent = Element.getOffsetParent(element); + if (parent !== document.body) delta = Element.viewportOffset(parent); + } + } + + if (options.setWidth || options.setHeight) { + layout = Element.getLayout(source); + } + + if (options.setLeft) + styles.left = (p[0] - delta[0] + options.offsetLeft) + 'px'; + if (options.setTop) + styles.top = (p[1] - delta[1] + options.offsetTop) + 'px'; + + if (options.setWidth) + styles.width = layout.get('border-box-width') + 'px'; + if (options.setHeight) + styles.height = layout.get('border-box-height') + 'px'; + + return Element.setStyle(element, styles); + } + + + if (Prototype.Browser.IE) { + getOffsetParent = getOffsetParent.wrap( + function(proceed, element) { + element = $(element); + + if (isDocument(element) || isDetached(element) || isBody(element) || isHtml(element)) + return $(document.body); + + var position = element.getStyle('position'); + if (position !== 'static') return proceed(element); + + element.setStyle({ position: 'relative' }); + var value = proceed(element); + element.setStyle({ position: position }); + return value; + } + ); + + positionedOffset = positionedOffset.wrap(function(proceed, element) { + element = $(element); + if (!element.parentNode) return new Element.Offset(0, 0); + var position = element.getStyle('position'); + if (position !== 'static') return proceed(element); + + var offsetParent = element.getOffsetParent(); + if (offsetParent && offsetParent.getStyle('position') === 'fixed') + hasLayout(offsetParent); + + element.setStyle({ position: 'relative' }); + var value = proceed(element); + element.setStyle({ position: position }); + return value; + }); + } else if (Prototype.Browser.Webkit) { + cumulativeOffset = function(element) { + element = $(element); + var valueT = 0, valueL = 0; + do { + valueT += element.offsetTop || 0; + valueL += element.offsetLeft || 0; + if (element.offsetParent == document.body) { + if (Element.getStyle(element, 'position') == 'absolute') break; + } + + element = element.offsetParent; + } while (element); + + return new Element.Offset(valueL, valueT); + }; + } + + + Element.addMethods({ + getLayout: getLayout, + measure: measure, + getWidth: getWidth, + getHeight: getHeight, + getDimensions: getDimensions, + getOffsetParent: getOffsetParent, + cumulativeOffset: cumulativeOffset, + positionedOffset: positionedOffset, + cumulativeScrollOffset: cumulativeScrollOffset, + viewportOffset: viewportOffset, + absolutize: absolutize, + relativize: relativize, + scrollTo: scrollTo, + makePositioned: makePositioned, + undoPositioned: undoPositioned, + makeClipping: makeClipping, + undoClipping: undoClipping, + clonePosition: clonePosition + }); + + function isBody(element) { + return element.nodeName.toUpperCase() === 'BODY'; + } + + function isHtml(element) { + return element.nodeName.toUpperCase() === 'HTML'; + } + + function isDocument(element) { + return element.nodeType === Node.DOCUMENT_NODE; + } + + function isDetached(element) { + return element !== document.body && + !Element.descendantOf(element, document.body); + } + + if ('getBoundingClientRect' in document.documentElement) { + Element.addMethods({ + viewportOffset: function(element) { + element = $(element); + if (isDetached(element)) return new Element.Offset(0, 0); + + var rect = element.getBoundingClientRect(), + docEl = document.documentElement; + return new Element.Offset(rect.left - docEl.clientLeft, + rect.top - docEl.clientTop); + } + }); + } + + +})(); + +(function() { + + var IS_OLD_OPERA = Prototype.Browser.Opera && + (window.parseFloat(window.opera.version()) < 9.5); + var ROOT = null; + function getRootElement() { + if (ROOT) return ROOT; + ROOT = IS_OLD_OPERA ? document.body : document.documentElement; + return ROOT; + } + + function getDimensions() { + return { width: this.getWidth(), height: this.getHeight() }; + } + + function getWidth() { + return getRootElement().clientWidth; + } + + function getHeight() { + return getRootElement().clientHeight; + } + + function getScrollOffsets() { + var x = window.pageXOffset || document.documentElement.scrollLeft || + document.body.scrollLeft; + var y = window.pageYOffset || document.documentElement.scrollTop || + document.body.scrollTop; + + return new Element.Offset(x, y); + } + + document.viewport = { + getDimensions: getDimensions, + getWidth: getWidth, + getHeight: getHeight, + getScrollOffsets: getScrollOffsets + }; + +})(); +window.$$ = function() { + var expression = $A(arguments).join(', '); + return Prototype.Selector.select(expression, document); +}; + +Prototype.Selector = (function() { + + function select() { + throw new Error('Method "Prototype.Selector.select" must be defined.'); + } + + function match() { + throw new Error('Method "Prototype.Selector.match" must be defined.'); + } + + function find(elements, expression, index) { + index = index || 0; + var match = Prototype.Selector.match, length = elements.length, matchIndex = 0, i; + + for (i = 0; i < length; i++) { + if (match(elements[i], expression) && index == matchIndex++) { + return Element.extend(elements[i]); + } + } + } + + function extendElements(elements) { + for (var i = 0, length = elements.length; i < length; i++) { + Element.extend(elements[i]); + } + return elements; + } + + + var K = Prototype.K; + + return { + select: select, + match: match, + find: find, + extendElements: (Element.extend === K) ? K : extendElements, + extendElement: Element.extend + }; +})(); +Prototype._original_property = window.Sizzle; +/*! + * Sizzle CSS Selector Engine v@VERSION + * http://sizzlejs.com/ + * + * Copyright 2013 jQuery Foundation, Inc. and other contributors + * Released under the MIT license + * http://jquery.org/license + * + * Date: @DATE + */ +(function( window ) { + +var i, + support, + Expr, + getText, + isXML, + compile, + select, + outermostContext, + sortInput, + hasDuplicate, + + setDocument, + document, + docElem, + documentIsHTML, + rbuggyQSA, + rbuggyMatches, + matches, + contains, + + expando = "sizzle" + -(new Date()), + preferredDoc = window.document, + dirruns = 0, + done = 0, + classCache = createCache(), + tokenCache = createCache(), + compilerCache = createCache(), + sortOrder = function( a, b ) { + if ( a === b ) { + hasDuplicate = true; + } + return 0; + }, + + strundefined = typeof undefined, + MAX_NEGATIVE = 1 << 31, + + hasOwn = ({}).hasOwnProperty, + arr = [], + pop = arr.pop, + push_native = arr.push, + push = arr.push, + slice = arr.slice, + indexOf = arr.indexOf || function( elem ) { + var i = 0, + len = this.length; + for ( ; i < len; i++ ) { + if ( this[i] === elem ) { + return i; + } + } + return -1; + }, + + booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped", + + + whitespace = "[\\x20\\t\\r\\n\\f]", + characterEncoding = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+", + + identifier = characterEncoding.replace( "w", "w#" ), + + attributes = "\\[" + whitespace + "*(" + characterEncoding + ")" + whitespace + + "*(?:([*^$|!~]?=)" + whitespace + "*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|(" + identifier + ")|)|)" + whitespace + "*\\]", + + pseudos = ":(" + characterEncoding + ")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|" + attributes.replace( 3, 8 ) + ")*)|.*)\\)|)", + + rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ), + + rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), + rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ), + + rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]", "g" ), + + rpseudo = new RegExp( pseudos ), + ridentifier = new RegExp( "^" + identifier + "$" ), + + matchExpr = { + "ID": new RegExp( "^#(" + characterEncoding + ")" ), + "CLASS": new RegExp( "^\\.(" + characterEncoding + ")" ), + "TAG": new RegExp( "^(" + characterEncoding.replace( "w", "w*" ) + ")" ), + "ATTR": new RegExp( "^" + attributes ), + "PSEUDO": new RegExp( "^" + pseudos ), + "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace + + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace + + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), + "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), + "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + + whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) + }, + + rinputs = /^(?:input|select|textarea|button)$/i, + rheader = /^h\d$/i, + + rnative = /^[^{]+\{\s*\[native \w/, + + rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, + + rsibling = /[+~]/, + rescape = /'|\\/g, + + runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ), + funescape = function( _, escaped, escapedWhitespace ) { + var high = "0x" + escaped - 0x10000; + return high !== high || escapedWhitespace ? + escaped : + high < 0 ? + String.fromCharCode( high + 0x10000 ) : + String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); + }; + +try { + push.apply( + (arr = slice.call( preferredDoc.childNodes )), + preferredDoc.childNodes + ); + arr[ preferredDoc.childNodes.length ].nodeType; +} catch ( e ) { + push = { apply: arr.length ? + + function( target, els ) { + push_native.apply( target, slice.call(els) ); + } : + + function( target, els ) { + var j = target.length, + i = 0; + while ( (target[j++] = els[i++]) ) {} + target.length = j - 1; + } + }; +} + +function Sizzle( selector, context, results, seed ) { + var match, elem, m, nodeType, + i, groups, old, nid, newContext, newSelector; + + if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) { + setDocument( context ); + } + + context = context || document; + results = results || []; + + if ( !selector || typeof selector !== "string" ) { + return results; + } + + if ( (nodeType = context.nodeType) !== 1 && nodeType !== 9 ) { + return []; + } + + if ( documentIsHTML && !seed ) { + + if ( (match = rquickExpr.exec( selector )) ) { + if ( (m = match[1]) ) { + if ( nodeType === 9 ) { + elem = context.getElementById( m ); + if ( elem && elem.parentNode ) { + if ( elem.id === m ) { + results.push( elem ); + return results; + } + } else { + return results; + } + } else { + if ( context.ownerDocument && (elem = context.ownerDocument.getElementById( m )) && + contains( context, elem ) && elem.id === m ) { + results.push( elem ); + return results; + } + } + + } else if ( match[2] ) { + push.apply( results, context.getElementsByTagName( selector ) ); + return results; + + } else if ( (m = match[3]) && support.getElementsByClassName && context.getElementsByClassName ) { + push.apply( results, context.getElementsByClassName( m ) ); + return results; + } + } + + if ( support.qsa && (!rbuggyQSA || !rbuggyQSA.test( selector )) ) { + nid = old = expando; + newContext = context; + newSelector = nodeType === 9 && selector; + + if ( nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) { + groups = tokenize( selector ); + + if ( (old = context.getAttribute("id")) ) { + nid = old.replace( rescape, "\\$&" ); + } else { + context.setAttribute( "id", nid ); + } + nid = "[id='" + nid + "'] "; + + i = groups.length; + while ( i-- ) { + groups[i] = nid + toSelector( groups[i] ); + } + newContext = rsibling.test( selector ) && testContext( context.parentNode ) || context; + newSelector = groups.join(","); + } + + if ( newSelector ) { + try { + push.apply( results, + newContext.querySelectorAll( newSelector ) + ); + return results; + } catch(qsaError) { + } finally { + if ( !old ) { + context.removeAttribute("id"); + } + } + } + } + } + + return select( selector.replace( rtrim, "$1" ), context, results, seed ); +} + +/** + * Create key-value caches of limited size + * @returns {Function(string, Object)} Returns the Object data after storing it on itself with + * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) + * deleting the oldest entry + */ +function createCache() { + var keys = []; + + function cache( key, value ) { + if ( keys.push( key + " " ) > Expr.cacheLength ) { + delete cache[ keys.shift() ]; + } + return (cache[ key + " " ] = value); + } + return cache; +} + +/** + * Mark a function for special use by Sizzle + * @param {Function} fn The function to mark + */ +function markFunction( fn ) { + fn[ expando ] = true; + return fn; +} + +/** + * Support testing using an element + * @param {Function} fn Passed the created div and expects a boolean result + */ +function assert( fn ) { + var div = document.createElement("div"); + + try { + return !!fn( div ); + } catch (e) { + return false; + } finally { + if ( div.parentNode ) { + div.parentNode.removeChild( div ); + } + div = null; + } +} + +/** + * Adds the same handler for all of the specified attrs + * @param {String} attrs Pipe-separated list of attributes + * @param {Function} handler The method that will be applied + */ +function addHandle( attrs, handler ) { + var arr = attrs.split("|"), + i = attrs.length; + + while ( i-- ) { + Expr.attrHandle[ arr[i] ] = handler; + } +} + +/** + * Checks document order of two siblings + * @param {Element} a + * @param {Element} b + * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b + */ +function siblingCheck( a, b ) { + var cur = b && a, + diff = cur && a.nodeType === 1 && b.nodeType === 1 && + ( ~b.sourceIndex || MAX_NEGATIVE ) - + ( ~a.sourceIndex || MAX_NEGATIVE ); + + if ( diff ) { + return diff; + } + + if ( cur ) { + while ( (cur = cur.nextSibling) ) { + if ( cur === b ) { + return -1; + } + } + } + + return a ? 1 : -1; +} + +/** + * Returns a function to use in pseudos for input types + * @param {String} type + */ +function createInputPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for buttons + * @param {String} type + */ +function createButtonPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return (name === "input" || name === "button") && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for positionals + * @param {Function} fn + */ +function createPositionalPseudo( fn ) { + return markFunction(function( argument ) { + argument = +argument; + return markFunction(function( seed, matches ) { + var j, + matchIndexes = fn( [], seed.length, argument ), + i = matchIndexes.length; + + while ( i-- ) { + if ( seed[ (j = matchIndexes[i]) ] ) { + seed[j] = !(matches[j] = seed[j]); + } + } + }); + }); +} + +/** + * Checks a node for validity as a Sizzle context + * @param {Element|Object=} context + * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value + */ +function testContext( context ) { + return context && typeof context.getElementsByTagName !== strundefined && context; +} + +support = Sizzle.support = {}; + +/** + * Detects XML nodes + * @param {Element|Object} elem An element or a document + * @returns {Boolean} True iff elem is a non-HTML XML node + */ +isXML = Sizzle.isXML = function( elem ) { + var documentElement = elem && (elem.ownerDocument || elem).documentElement; + return documentElement ? documentElement.nodeName !== "HTML" : false; +}; + +/** + * Sets document-related variables once based on the current document + * @param {Element|Object} [doc] An element or document object to use to set the document + * @returns {Object} Returns the current document + */ +setDocument = Sizzle.setDocument = function( node ) { + var hasCompare, + doc = node ? node.ownerDocument || node : preferredDoc, + parent = doc.defaultView; + + if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) { + return document; + } + + document = doc; + docElem = doc.documentElement; + + documentIsHTML = !isXML( doc ); + + if ( parent && parent !== parent.top ) { + if ( parent.addEventListener ) { + parent.addEventListener( "unload", function() { + setDocument(); + }, false ); + } else if ( parent.attachEvent ) { + parent.attachEvent( "onunload", function() { + setDocument(); + }); + } + } + + /* Attributes + ---------------------------------------------------------------------- */ + + support.attributes = assert(function( div ) { + div.className = "i"; + return !div.getAttribute("className"); + }); + + /* getElement(s)By* + ---------------------------------------------------------------------- */ + + support.getElementsByTagName = assert(function( div ) { + div.appendChild( doc.createComment("") ); + return !div.getElementsByTagName("*").length; + }); + + support.getElementsByClassName = rnative.test( doc.getElementsByClassName ) && assert(function( div ) { + div.innerHTML = "
    "; + + div.firstChild.className = "i"; + return div.getElementsByClassName("i").length === 2; + }); + + support.getById = assert(function( div ) { + docElem.appendChild( div ).id = expando; + return !doc.getElementsByName || !doc.getElementsByName( expando ).length; + }); + + if ( support.getById ) { + Expr.find["ID"] = function( id, context ) { + if ( typeof context.getElementById !== strundefined && documentIsHTML ) { + var m = context.getElementById( id ); + return m && m.parentNode ? [m] : []; + } + }; + Expr.filter["ID"] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + return elem.getAttribute("id") === attrId; + }; + }; + } else { + delete Expr.find["ID"]; + + Expr.filter["ID"] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + var node = typeof elem.getAttributeNode !== strundefined && elem.getAttributeNode("id"); + return node && node.value === attrId; + }; + }; + } + + Expr.find["TAG"] = support.getElementsByTagName ? + function( tag, context ) { + if ( typeof context.getElementsByTagName !== strundefined ) { + return context.getElementsByTagName( tag ); + } + } : + function( tag, context ) { + var elem, + tmp = [], + i = 0, + results = context.getElementsByTagName( tag ); + + if ( tag === "*" ) { + while ( (elem = results[i++]) ) { + if ( elem.nodeType === 1 ) { + tmp.push( elem ); + } + } + + return tmp; + } + return results; + }; + + Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) { + if ( typeof context.getElementsByClassName !== strundefined && documentIsHTML ) { + return context.getElementsByClassName( className ); + } + }; + + /* QSA/matchesSelector + ---------------------------------------------------------------------- */ + + + rbuggyMatches = []; + + rbuggyQSA = []; + + if ( (support.qsa = rnative.test( doc.querySelectorAll )) ) { + assert(function( div ) { + div.innerHTML = ""; + + if ( div.querySelectorAll("[t^='']").length ) { + rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); + } + + if ( !div.querySelectorAll("[selected]").length ) { + rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); + } + + if ( !div.querySelectorAll(":checked").length ) { + rbuggyQSA.push(":checked"); + } + }); + + assert(function( div ) { + var input = doc.createElement("input"); + input.setAttribute( "type", "hidden" ); + div.appendChild( input ).setAttribute( "name", "D" ); + + if ( div.querySelectorAll("[name=d]").length ) { + rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" ); + } + + if ( !div.querySelectorAll(":enabled").length ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + div.querySelectorAll("*,:x"); + rbuggyQSA.push(",.*:"); + }); + } + + if ( (support.matchesSelector = rnative.test( (matches = docElem.webkitMatchesSelector || + docElem.mozMatchesSelector || + docElem.oMatchesSelector || + docElem.msMatchesSelector) )) ) { + + assert(function( div ) { + support.disconnectedMatch = matches.call( div, "div" ); + + matches.call( div, "[s!='']:x" ); + rbuggyMatches.push( "!=", pseudos ); + }); + } + + rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") ); + rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") ); + + /* Contains + ---------------------------------------------------------------------- */ + hasCompare = rnative.test( docElem.compareDocumentPosition ); + + contains = hasCompare || rnative.test( docElem.contains ) ? + function( a, b ) { + var adown = a.nodeType === 9 ? a.documentElement : a, + bup = b && b.parentNode; + return a === bup || !!( bup && bup.nodeType === 1 && ( + adown.contains ? + adown.contains( bup ) : + a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 + )); + } : + function( a, b ) { + if ( b ) { + while ( (b = b.parentNode) ) { + if ( b === a ) { + return true; + } + } + } + return false; + }; + + /* Sorting + ---------------------------------------------------------------------- */ + + sortOrder = hasCompare ? + function( a, b ) { + + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; + if ( compare ) { + return compare; + } + + compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ? + a.compareDocumentPosition( b ) : + + 1; + + if ( compare & 1 || + (!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) { + + if ( a === doc || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) { + return -1; + } + if ( b === doc || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) { + return 1; + } + + return sortInput ? + ( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) : + 0; + } + + return compare & 4 ? -1 : 1; + } : + function( a, b ) { + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + var cur, + i = 0, + aup = a.parentNode, + bup = b.parentNode, + ap = [ a ], + bp = [ b ]; + + if ( !aup || !bup ) { + return a === doc ? -1 : + b === doc ? 1 : + aup ? -1 : + bup ? 1 : + sortInput ? + ( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) : + 0; + + } else if ( aup === bup ) { + return siblingCheck( a, b ); + } + + cur = a; + while ( (cur = cur.parentNode) ) { + ap.unshift( cur ); + } + cur = b; + while ( (cur = cur.parentNode) ) { + bp.unshift( cur ); + } + + while ( ap[i] === bp[i] ) { + i++; + } + + return i ? + siblingCheck( ap[i], bp[i] ) : + + ap[i] === preferredDoc ? -1 : + bp[i] === preferredDoc ? 1 : + 0; + }; + + return doc; +}; + +Sizzle.matches = function( expr, elements ) { + return Sizzle( expr, null, null, elements ); +}; + +Sizzle.matchesSelector = function( elem, expr ) { + if ( ( elem.ownerDocument || elem ) !== document ) { + setDocument( elem ); + } + + expr = expr.replace( rattributeQuotes, "='$1']" ); + + if ( support.matchesSelector && documentIsHTML && + ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) && + ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { + + try { + var ret = matches.call( elem, expr ); + + if ( ret || support.disconnectedMatch || + elem.document && elem.document.nodeType !== 11 ) { + return ret; + } + } catch(e) {} + } + + return Sizzle( expr, document, null, [elem] ).length > 0; +}; + +Sizzle.contains = function( context, elem ) { + if ( ( context.ownerDocument || context ) !== document ) { + setDocument( context ); + } + return contains( context, elem ); +}; + +Sizzle.attr = function( elem, name ) { + if ( ( elem.ownerDocument || elem ) !== document ) { + setDocument( elem ); + } + + var fn = Expr.attrHandle[ name.toLowerCase() ], + val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? + fn( elem, name, !documentIsHTML ) : + undefined; + + return val !== undefined ? + val : + support.attributes || !documentIsHTML ? + elem.getAttribute( name ) : + (val = elem.getAttributeNode(name)) && val.specified ? + val.value : + null; +}; + +Sizzle.error = function( msg ) { + throw new Error( "Syntax error, unrecognized expression: " + msg ); +}; + +/** + * Document sorting and removing duplicates + * @param {ArrayLike} results + */ +Sizzle.uniqueSort = function( results ) { + var elem, + duplicates = [], + j = 0, + i = 0; + + hasDuplicate = !support.detectDuplicates; + sortInput = !support.sortStable && results.slice( 0 ); + results.sort( sortOrder ); + + if ( hasDuplicate ) { + while ( (elem = results[i++]) ) { + if ( elem === results[ i ] ) { + j = duplicates.push( i ); + } + } + while ( j-- ) { + results.splice( duplicates[ j ], 1 ); + } + } + + sortInput = null; + + return results; +}; + +/** + * Utility function for retrieving the text value of an array of DOM nodes + * @param {Array|Element} elem + */ +getText = Sizzle.getText = function( elem ) { + var node, + ret = "", + i = 0, + nodeType = elem.nodeType; + + if ( !nodeType ) { + while ( (node = elem[i++]) ) { + ret += getText( node ); + } + } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { + if ( typeof elem.textContent === "string" ) { + return elem.textContent; + } else { + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + ret += getText( elem ); + } + } + } else if ( nodeType === 3 || nodeType === 4 ) { + return elem.nodeValue; + } + + return ret; +}; + +Expr = Sizzle.selectors = { + + cacheLength: 50, + + createPseudo: markFunction, + + match: matchExpr, + + attrHandle: {}, + + find: {}, + + relative: { + ">": { dir: "parentNode", first: true }, + " ": { dir: "parentNode" }, + "+": { dir: "previousSibling", first: true }, + "~": { dir: "previousSibling" } + }, + + preFilter: { + "ATTR": function( match ) { + match[1] = match[1].replace( runescape, funescape ); + + match[3] = ( match[4] || match[5] || "" ).replace( runescape, funescape ); + + if ( match[2] === "~=" ) { + match[3] = " " + match[3] + " "; + } + + return match.slice( 0, 4 ); + }, + + "CHILD": function( match ) { + /* matches from matchExpr["CHILD"] + 1 type (only|nth|...) + 2 what (child|of-type) + 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) + 4 xn-component of xn+y argument ([+-]?\d*n|) + 5 sign of xn-component + 6 x of xn-component + 7 sign of y-component + 8 y of y-component + */ + match[1] = match[1].toLowerCase(); + + if ( match[1].slice( 0, 3 ) === "nth" ) { + if ( !match[3] ) { + Sizzle.error( match[0] ); + } + + match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) ); + match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" ); + + } else if ( match[3] ) { + Sizzle.error( match[0] ); + } + + return match; + }, + + "PSEUDO": function( match ) { + var excess, + unquoted = !match[5] && match[2]; + + if ( matchExpr["CHILD"].test( match[0] ) ) { + return null; + } + + if ( match[3] && match[4] !== undefined ) { + match[2] = match[4]; + + } else if ( unquoted && rpseudo.test( unquoted ) && + (excess = tokenize( unquoted, true )) && + (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) { + + match[0] = match[0].slice( 0, excess ); + match[2] = unquoted.slice( 0, excess ); + } + + return match.slice( 0, 3 ); + } + }, + + filter: { + + "TAG": function( nodeNameSelector ) { + var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); + return nodeNameSelector === "*" ? + function() { return true; } : + function( elem ) { + return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; + }; + }, + + "CLASS": function( className ) { + var pattern = classCache[ className + " " ]; + + return pattern || + (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) && + classCache( className, function( elem ) { + return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== strundefined && elem.getAttribute("class") || "" ); + }); + }, + + "ATTR": function( name, operator, check ) { + return function( elem ) { + var result = Sizzle.attr( elem, name ); + + if ( result == null ) { + return operator === "!="; + } + if ( !operator ) { + return true; + } + + result += ""; + + return operator === "=" ? result === check : + operator === "!=" ? result !== check : + operator === "^=" ? check && result.indexOf( check ) === 0 : + operator === "*=" ? check && result.indexOf( check ) > -1 : + operator === "$=" ? check && result.slice( -check.length ) === check : + operator === "~=" ? ( " " + result + " " ).indexOf( check ) > -1 : + operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : + false; + }; + }, + + "CHILD": function( type, what, argument, first, last ) { + var simple = type.slice( 0, 3 ) !== "nth", + forward = type.slice( -4 ) !== "last", + ofType = what === "of-type"; + + return first === 1 && last === 0 ? + + function( elem ) { + return !!elem.parentNode; + } : + + function( elem, context, xml ) { + var cache, outerCache, node, diff, nodeIndex, start, + dir = simple !== forward ? "nextSibling" : "previousSibling", + parent = elem.parentNode, + name = ofType && elem.nodeName.toLowerCase(), + useCache = !xml && !ofType; + + if ( parent ) { + + if ( simple ) { + while ( dir ) { + node = elem; + while ( (node = node[ dir ]) ) { + if ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) { + return false; + } + } + start = dir = type === "only" && !start && "nextSibling"; + } + return true; + } + + start = [ forward ? parent.firstChild : parent.lastChild ]; + + if ( forward && useCache ) { + outerCache = parent[ expando ] || (parent[ expando ] = {}); + cache = outerCache[ type ] || []; + nodeIndex = cache[0] === dirruns && cache[1]; + diff = cache[0] === dirruns && cache[2]; + node = nodeIndex && parent.childNodes[ nodeIndex ]; + + while ( (node = ++nodeIndex && node && node[ dir ] || + + (diff = nodeIndex = 0) || start.pop()) ) { + + if ( node.nodeType === 1 && ++diff && node === elem ) { + outerCache[ type ] = [ dirruns, nodeIndex, diff ]; + break; + } + } + + } else if ( useCache && (cache = (elem[ expando ] || (elem[ expando ] = {}))[ type ]) && cache[0] === dirruns ) { + diff = cache[1]; + + } else { + while ( (node = ++nodeIndex && node && node[ dir ] || + (diff = nodeIndex = 0) || start.pop()) ) { + + if ( ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) && ++diff ) { + if ( useCache ) { + (node[ expando ] || (node[ expando ] = {}))[ type ] = [ dirruns, diff ]; + } + + if ( node === elem ) { + break; + } + } + } + } + + diff -= last; + return diff === first || ( diff % first === 0 && diff / first >= 0 ); + } + }; + }, + + "PSEUDO": function( pseudo, argument ) { + var args, + fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || + Sizzle.error( "unsupported pseudo: " + pseudo ); + + if ( fn[ expando ] ) { + return fn( argument ); + } + + if ( fn.length > 1 ) { + args = [ pseudo, pseudo, "", argument ]; + return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? + markFunction(function( seed, matches ) { + var idx, + matched = fn( seed, argument ), + i = matched.length; + while ( i-- ) { + idx = indexOf.call( seed, matched[i] ); + seed[ idx ] = !( matches[ idx ] = matched[i] ); + } + }) : + function( elem ) { + return fn( elem, 0, args ); + }; + } + + return fn; + } + }, + + pseudos: { + "not": markFunction(function( selector ) { + var input = [], + results = [], + matcher = compile( selector.replace( rtrim, "$1" ) ); + + return matcher[ expando ] ? + markFunction(function( seed, matches, context, xml ) { + var elem, + unmatched = matcher( seed, null, xml, [] ), + i = seed.length; + + while ( i-- ) { + if ( (elem = unmatched[i]) ) { + seed[i] = !(matches[i] = elem); + } + } + }) : + function( elem, context, xml ) { + input[0] = elem; + matcher( input, null, xml, results ); + return !results.pop(); + }; + }), + + "has": markFunction(function( selector ) { + return function( elem ) { + return Sizzle( selector, elem ).length > 0; + }; + }), + + "contains": markFunction(function( text ) { + return function( elem ) { + return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1; + }; + }), + + "lang": markFunction( function( lang ) { + if ( !ridentifier.test(lang || "") ) { + Sizzle.error( "unsupported lang: " + lang ); + } + lang = lang.replace( runescape, funescape ).toLowerCase(); + return function( elem ) { + var elemLang; + do { + if ( (elemLang = documentIsHTML ? + elem.lang : + elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) { + + elemLang = elemLang.toLowerCase(); + return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; + } + } while ( (elem = elem.parentNode) && elem.nodeType === 1 ); + return false; + }; + }), + + "target": function( elem ) { + var hash = window.location && window.location.hash; + return hash && hash.slice( 1 ) === elem.id; + }, + + "root": function( elem ) { + return elem === docElem; + }, + + "focus": function( elem ) { + return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex); + }, + + "enabled": function( elem ) { + return elem.disabled === false; + }, + + "disabled": function( elem ) { + return elem.disabled === true; + }, + + "checked": function( elem ) { + var nodeName = elem.nodeName.toLowerCase(); + return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected); + }, + + "selected": function( elem ) { + if ( elem.parentNode ) { + elem.parentNode.selectedIndex; + } + + return elem.selected === true; + }, + + "empty": function( elem ) { + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + if ( elem.nodeType < 6 ) { + return false; + } + } + return true; + }, + + "parent": function( elem ) { + return !Expr.pseudos["empty"]( elem ); + }, + + "header": function( elem ) { + return rheader.test( elem.nodeName ); + }, + + "input": function( elem ) { + return rinputs.test( elem.nodeName ); + }, + + "button": function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === "button" || name === "button"; + }, + + "text": function( elem ) { + var attr; + return elem.nodeName.toLowerCase() === "input" && + elem.type === "text" && + + ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" ); + }, + + "first": createPositionalPseudo(function() { + return [ 0 ]; + }), + + "last": createPositionalPseudo(function( matchIndexes, length ) { + return [ length - 1 ]; + }), + + "eq": createPositionalPseudo(function( matchIndexes, length, argument ) { + return [ argument < 0 ? argument + length : argument ]; + }), + + "even": createPositionalPseudo(function( matchIndexes, length ) { + var i = 0; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "odd": createPositionalPseudo(function( matchIndexes, length ) { + var i = 1; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "lt": createPositionalPseudo(function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; --i >= 0; ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "gt": createPositionalPseudo(function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; ++i < length; ) { + matchIndexes.push( i ); + } + return matchIndexes; + }) + } +}; + +Expr.pseudos["nth"] = Expr.pseudos["eq"]; + +for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { + Expr.pseudos[ i ] = createInputPseudo( i ); +} +for ( i in { submit: true, reset: true } ) { + Expr.pseudos[ i ] = createButtonPseudo( i ); +} + +function setFilters() {} +setFilters.prototype = Expr.filters = Expr.pseudos; +Expr.setFilters = new setFilters(); + +function tokenize( selector, parseOnly ) { + var matched, match, tokens, type, + soFar, groups, preFilters, + cached = tokenCache[ selector + " " ]; + + if ( cached ) { + return parseOnly ? 0 : cached.slice( 0 ); + } + + soFar = selector; + groups = []; + preFilters = Expr.preFilter; + + while ( soFar ) { + + if ( !matched || (match = rcomma.exec( soFar )) ) { + if ( match ) { + soFar = soFar.slice( match[0].length ) || soFar; + } + groups.push( (tokens = []) ); + } + + matched = false; + + if ( (match = rcombinators.exec( soFar )) ) { + matched = match.shift(); + tokens.push({ + value: matched, + type: match[0].replace( rtrim, " " ) + }); + soFar = soFar.slice( matched.length ); + } + + for ( type in Expr.filter ) { + if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] || + (match = preFilters[ type ]( match ))) ) { + matched = match.shift(); + tokens.push({ + value: matched, + type: type, + matches: match + }); + soFar = soFar.slice( matched.length ); + } + } + + if ( !matched ) { + break; + } + } + + return parseOnly ? + soFar.length : + soFar ? + Sizzle.error( selector ) : + tokenCache( selector, groups ).slice( 0 ); +} + +function toSelector( tokens ) { + var i = 0, + len = tokens.length, + selector = ""; + for ( ; i < len; i++ ) { + selector += tokens[i].value; + } + return selector; +} + +function addCombinator( matcher, combinator, base ) { + var dir = combinator.dir, + checkNonElements = base && dir === "parentNode", + doneName = done++; + + return combinator.first ? + function( elem, context, xml ) { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + return matcher( elem, context, xml ); + } + } + } : + + function( elem, context, xml ) { + var oldCache, outerCache, + newCache = [ dirruns, doneName ]; + + if ( xml ) { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + if ( matcher( elem, context, xml ) ) { + return true; + } + } + } + } else { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + outerCache = elem[ expando ] || (elem[ expando ] = {}); + if ( (oldCache = outerCache[ dir ]) && + oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { + + return (newCache[ 2 ] = oldCache[ 2 ]); + } else { + outerCache[ dir ] = newCache; + + if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) { + return true; + } + } + } + } + } + }; +} + +function elementMatcher( matchers ) { + return matchers.length > 1 ? + function( elem, context, xml ) { + var i = matchers.length; + while ( i-- ) { + if ( !matchers[i]( elem, context, xml ) ) { + return false; + } + } + return true; + } : + matchers[0]; +} + +function multipleContexts( selector, contexts, results ) { + var i = 0, + len = contexts.length; + for ( ; i < len; i++ ) { + Sizzle( selector, contexts[i], results ); + } + return results; +} + +function condense( unmatched, map, filter, context, xml ) { + var elem, + newUnmatched = [], + i = 0, + len = unmatched.length, + mapped = map != null; + + for ( ; i < len; i++ ) { + if ( (elem = unmatched[i]) ) { + if ( !filter || filter( elem, context, xml ) ) { + newUnmatched.push( elem ); + if ( mapped ) { + map.push( i ); + } + } + } + } + + return newUnmatched; +} + +function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { + if ( postFilter && !postFilter[ expando ] ) { + postFilter = setMatcher( postFilter ); + } + if ( postFinder && !postFinder[ expando ] ) { + postFinder = setMatcher( postFinder, postSelector ); + } + return markFunction(function( seed, results, context, xml ) { + var temp, i, elem, + preMap = [], + postMap = [], + preexisting = results.length, + + elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ), + + matcherIn = preFilter && ( seed || !selector ) ? + condense( elems, preMap, preFilter, context, xml ) : + elems, + + matcherOut = matcher ? + postFinder || ( seed ? preFilter : preexisting || postFilter ) ? + + [] : + + results : + matcherIn; + + if ( matcher ) { + matcher( matcherIn, matcherOut, context, xml ); + } + + if ( postFilter ) { + temp = condense( matcherOut, postMap ); + postFilter( temp, [], context, xml ); + + i = temp.length; + while ( i-- ) { + if ( (elem = temp[i]) ) { + matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem); + } + } + } + + if ( seed ) { + if ( postFinder || preFilter ) { + if ( postFinder ) { + temp = []; + i = matcherOut.length; + while ( i-- ) { + if ( (elem = matcherOut[i]) ) { + temp.push( (matcherIn[i] = elem) ); + } + } + postFinder( null, (matcherOut = []), temp, xml ); + } + + i = matcherOut.length; + while ( i-- ) { + if ( (elem = matcherOut[i]) && + (temp = postFinder ? indexOf.call( seed, elem ) : preMap[i]) > -1 ) { + + seed[temp] = !(results[temp] = elem); + } + } + } + + } else { + matcherOut = condense( + matcherOut === results ? + matcherOut.splice( preexisting, matcherOut.length ) : + matcherOut + ); + if ( postFinder ) { + postFinder( null, results, matcherOut, xml ); + } else { + push.apply( results, matcherOut ); + } + } + }); +} + +function matcherFromTokens( tokens ) { + var checkContext, matcher, j, + len = tokens.length, + leadingRelative = Expr.relative[ tokens[0].type ], + implicitRelative = leadingRelative || Expr.relative[" "], + i = leadingRelative ? 1 : 0, + + matchContext = addCombinator( function( elem ) { + return elem === checkContext; + }, implicitRelative, true ), + matchAnyContext = addCombinator( function( elem ) { + return indexOf.call( checkContext, elem ) > -1; + }, implicitRelative, true ), + matchers = [ function( elem, context, xml ) { + return ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( + (checkContext = context).nodeType ? + matchContext( elem, context, xml ) : + matchAnyContext( elem, context, xml ) ); + } ]; + + for ( ; i < len; i++ ) { + if ( (matcher = Expr.relative[ tokens[i].type ]) ) { + matchers = [ addCombinator(elementMatcher( matchers ), matcher) ]; + } else { + matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches ); + + if ( matcher[ expando ] ) { + j = ++i; + for ( ; j < len; j++ ) { + if ( Expr.relative[ tokens[j].type ] ) { + break; + } + } + return setMatcher( + i > 1 && elementMatcher( matchers ), + i > 1 && toSelector( + tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" }) + ).replace( rtrim, "$1" ), + matcher, + i < j && matcherFromTokens( tokens.slice( i, j ) ), + j < len && matcherFromTokens( (tokens = tokens.slice( j )) ), + j < len && toSelector( tokens ) + ); + } + matchers.push( matcher ); + } + } + + return elementMatcher( matchers ); +} + +function matcherFromGroupMatchers( elementMatchers, setMatchers ) { + var bySet = setMatchers.length > 0, + byElement = elementMatchers.length > 0, + superMatcher = function( seed, context, xml, results, outermost ) { + var elem, j, matcher, + matchedCount = 0, + i = "0", + unmatched = seed && [], + setMatched = [], + contextBackup = outermostContext, + elems = seed || byElement && Expr.find["TAG"]( "*", outermost ), + dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1), + len = elems.length; + + if ( outermost ) { + outermostContext = context !== document && context; + } + + for ( ; i !== len && (elem = elems[i]) != null; i++ ) { + if ( byElement && elem ) { + j = 0; + while ( (matcher = elementMatchers[j++]) ) { + if ( matcher( elem, context, xml ) ) { + results.push( elem ); + break; + } + } + if ( outermost ) { + dirruns = dirrunsUnique; + } + } + + if ( bySet ) { + if ( (elem = !matcher && elem) ) { + matchedCount--; + } + + if ( seed ) { + unmatched.push( elem ); + } + } + } + + matchedCount += i; + if ( bySet && i !== matchedCount ) { + j = 0; + while ( (matcher = setMatchers[j++]) ) { + matcher( unmatched, setMatched, context, xml ); + } + + if ( seed ) { + if ( matchedCount > 0 ) { + while ( i-- ) { + if ( !(unmatched[i] || setMatched[i]) ) { + setMatched[i] = pop.call( results ); + } + } + } + + setMatched = condense( setMatched ); + } + + push.apply( results, setMatched ); + + if ( outermost && !seed && setMatched.length > 0 && + ( matchedCount + setMatchers.length ) > 1 ) { + + Sizzle.uniqueSort( results ); + } + } + + if ( outermost ) { + dirruns = dirrunsUnique; + outermostContext = contextBackup; + } + + return unmatched; + }; + + return bySet ? + markFunction( superMatcher ) : + superMatcher; +} + +compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) { + var i, + setMatchers = [], + elementMatchers = [], + cached = compilerCache[ selector + " " ]; + + if ( !cached ) { + if ( !match ) { + match = tokenize( selector ); + } + i = match.length; + while ( i-- ) { + cached = matcherFromTokens( match[i] ); + if ( cached[ expando ] ) { + setMatchers.push( cached ); + } else { + elementMatchers.push( cached ); + } + } + + cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) ); + + cached.selector = selector; + } + return cached; +}; + +/** + * A low-level selection function that works with Sizzle's compiled + * selector functions + * @param {String|Function} selector A selector or a pre-compiled + * selector function built with Sizzle.compile + * @param {Element} context + * @param {Array} [results] + * @param {Array} [seed] A set of elements to match against + */ +select = Sizzle.select = function( selector, context, results, seed ) { + var i, tokens, token, type, find, + compiled = typeof selector === "function" && selector, + match = !seed && tokenize( (selector = compiled.selector || selector) ); + + results = results || []; + + if ( match.length === 1 ) { + + tokens = match[0] = match[0].slice( 0 ); + if ( tokens.length > 2 && (token = tokens[0]).type === "ID" && + support.getById && context.nodeType === 9 && documentIsHTML && + Expr.relative[ tokens[1].type ] ) { + + context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0]; + if ( !context ) { + return results; + + } else if ( compiled ) { + context = context.parentNode; + } + + selector = selector.slice( tokens.shift().value.length ); + } + + i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length; + while ( i-- ) { + token = tokens[i]; + + if ( Expr.relative[ (type = token.type) ] ) { + break; + } + if ( (find = Expr.find[ type ]) ) { + if ( (seed = find( + token.matches[0].replace( runescape, funescape ), + rsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context + )) ) { + + tokens.splice( i, 1 ); + selector = seed.length && toSelector( tokens ); + if ( !selector ) { + push.apply( results, seed ); + return results; + } + + break; + } + } + } + } + + ( compiled || compile( selector, match ) )( + seed, + context, + !documentIsHTML, + results, + rsibling.test( selector ) && testContext( context.parentNode ) || context + ); + return results; +}; + + +support.sortStable = expando.split("").sort( sortOrder ).join("") === expando; + +support.detectDuplicates = !!hasDuplicate; + +setDocument(); + +support.sortDetached = assert(function( div1 ) { + return div1.compareDocumentPosition( document.createElement("div") ) & 1; +}); + +if ( !assert(function( div ) { + div.innerHTML = ""; + return div.firstChild.getAttribute("href") === "#" ; +}) ) { + addHandle( "type|href|height|width", function( elem, name, isXML ) { + if ( !isXML ) { + return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 ); + } + }); +} + +if ( !support.attributes || !assert(function( div ) { + div.innerHTML = ""; + div.firstChild.setAttribute( "value", "" ); + return div.firstChild.getAttribute( "value" ) === ""; +}) ) { + addHandle( "value", function( elem, name, isXML ) { + if ( !isXML && elem.nodeName.toLowerCase() === "input" ) { + return elem.defaultValue; + } + }); +} + +if ( !assert(function( div ) { + return div.getAttribute("disabled") == null; +}) ) { + addHandle( booleans, function( elem, name, isXML ) { + var val; + if ( !isXML ) { + return elem[ name ] === true ? name.toLowerCase() : + (val = elem.getAttributeNode( name )) && val.specified ? + val.value : + null; + } + }); +} + +if ( typeof define === "function" && define.amd ) { + define(function() { return Sizzle; }); +} else if ( typeof module !== "undefined" && module.exports ) { + module.exports = Sizzle; +} else { + window.Sizzle = Sizzle; +} + +})( window ); + +;(function(engine) { + var extendElements = Prototype.Selector.extendElements; + + function select(selector, scope) { + return extendElements(engine(selector, scope || document)); + } + + function match(element, selector) { + return engine.matches(selector, [element]).length == 1; + } + + Prototype.Selector.engine = engine; + Prototype.Selector.select = select; + Prototype.Selector.match = match; +})(Sizzle); + +window.Sizzle = Prototype._original_property; +delete Prototype._original_property; + +var Form = { + reset: function(form) { + form = $(form); + form.reset(); + return form; + }, + + serializeElements: function(elements, options) { + if (typeof options != 'object') options = { hash: !!options }; + else if (Object.isUndefined(options.hash)) options.hash = true; + var key, value, submitted = false, submit = options.submit, accumulator, initial; + + if (options.hash) { + initial = {}; + accumulator = function(result, key, value) { + if (key in result) { + if (!Object.isArray(result[key])) result[key] = [result[key]]; + result[key] = result[key].concat(value); + } else result[key] = value; + return result; + }; + } else { + initial = ''; + accumulator = function(result, key, values) { + if (!Object.isArray(values)) {values = [values];} + if (!values.length) {return result;} + var encodedKey = encodeURIComponent(key).gsub(/%20/, '+'); + return result + (result ? "&" : "") + values.map(function (value) { + value = value.gsub(/(\r)?\n/, '\r\n'); + value = encodeURIComponent(value); + value = value.gsub(/%20/, '+'); + return encodedKey + "=" + value; + }).join("&"); + }; + } + + return elements.inject(initial, function(result, element) { + if (!element.disabled && element.name) { + key = element.name; value = $(element).getValue(); + if (value != null && element.type != 'file' && (element.type != 'submit' || (!submitted && + submit !== false && (!submit || key == submit) && (submitted = true)))) { + result = accumulator(result, key, value); + } + } + return result; + }); + } +}; + +Form.Methods = { + serialize: function(form, options) { + return Form.serializeElements(Form.getElements(form), options); + }, + + + getElements: function(form) { + var elements = $(form).getElementsByTagName('*'); + var element, results = [], serializers = Form.Element.Serializers; + + for (var i = 0; element = elements[i]; i++) { + if (serializers[element.tagName.toLowerCase()]) + results.push(Element.extend(element)); + } + return results; + }, + + getInputs: function(form, typeName, name) { + form = $(form); + var inputs = form.getElementsByTagName('input'); + + if (!typeName && !name) return $A(inputs).map(Element.extend); + + for (var i = 0, matchingInputs = [], length = inputs.length; i < length; i++) { + var input = inputs[i]; + if ((typeName && input.type != typeName) || (name && input.name != name)) + continue; + matchingInputs.push(Element.extend(input)); + } + + return matchingInputs; + }, + + disable: function(form) { + form = $(form); + Form.getElements(form).invoke('disable'); + return form; + }, + + enable: function(form) { + form = $(form); + Form.getElements(form).invoke('enable'); + return form; + }, + + findFirstElement: function(form) { + var elements = $(form).getElements().findAll(function(element) { + return 'hidden' != element.type && !element.disabled; + }); + var firstByIndex = elements.findAll(function(element) { + return element.hasAttribute('tabIndex') && element.tabIndex >= 0; + }).sortBy(function(element) { return element.tabIndex }).first(); + + return firstByIndex ? firstByIndex : elements.find(function(element) { + return /^(?:input|select|textarea)$/i.test(element.tagName); + }); + }, + + focusFirstElement: function(form) { + form = $(form); + var element = form.findFirstElement(); + if (element) element.activate(); + return form; + }, + + request: function(form, options) { + form = $(form), options = Object.clone(options || { }); + + var params = options.parameters, action = form.readAttribute('action') || ''; + if (action.blank()) action = window.location.href; + options.parameters = form.serialize(true); + + if (params) { + if (Object.isString(params)) params = params.toQueryParams(); + Object.extend(options.parameters, params); + } + + if (form.hasAttribute('method') && !options.method) + options.method = form.method; + + return new Ajax.Request(action, options); + } +}; + +/*--------------------------------------------------------------------------*/ + + +Form.Element = { + focus: function(element) { + $(element).focus(); + return element; + }, + + select: function(element) { + $(element).select(); + return element; + } +}; + +Form.Element.Methods = { + + serialize: function(element) { + element = $(element); + if (!element.disabled && element.name) { + var value = element.getValue(); + if (value != undefined) { + var pair = { }; + pair[element.name] = value; + return Object.toQueryString(pair); + } + } + return ''; + }, + + getValue: function(element) { + element = $(element); + var method = element.tagName.toLowerCase(); + return Form.Element.Serializers[method](element); + }, + + setValue: function(element, value) { + element = $(element); + var method = element.tagName.toLowerCase(); + Form.Element.Serializers[method](element, value); + return element; + }, + + clear: function(element) { + $(element).value = ''; + return element; + }, + + present: function(element) { + return $(element).value != ''; + }, + + activate: function(element) { + element = $(element); + try { + element.focus(); + if (element.select && (element.tagName.toLowerCase() != 'input' || + !(/^(?:button|reset|submit)$/i.test(element.type)))) + element.select(); + } catch (e) { } + return element; + }, + + disable: function(element) { + element = $(element); + element.disabled = true; + return element; + }, + + enable: function(element) { + element = $(element); + element.disabled = false; + return element; + } +}; + +/*--------------------------------------------------------------------------*/ + +var Field = Form.Element; + +var $F = Form.Element.Methods.getValue; + +/*--------------------------------------------------------------------------*/ + +Form.Element.Serializers = (function() { + function input(element, value) { + switch (element.type.toLowerCase()) { + case 'checkbox': + case 'radio': + return inputSelector(element, value); + default: + return valueSelector(element, value); + } + } + + function inputSelector(element, value) { + if (Object.isUndefined(value)) + return element.checked ? element.value : null; + else element.checked = !!value; + } + + function valueSelector(element, value) { + if (Object.isUndefined(value)) return element.value; + else element.value = value; + } + + function select(element, value) { + if (Object.isUndefined(value)) + return (element.type === 'select-one' ? selectOne : selectMany)(element); + + var opt, currentValue, single = !Object.isArray(value); + for (var i = 0, length = element.length; i < length; i++) { + opt = element.options[i]; + currentValue = this.optionValue(opt); + if (single) { + if (currentValue == value) { + opt.selected = true; + return; + } + } + else opt.selected = value.include(currentValue); + } + } + + function selectOne(element) { + var index = element.selectedIndex; + return index >= 0 ? optionValue(element.options[index]) : null; + } + + function selectMany(element) { + var values, length = element.length; + if (!length) return null; + + for (var i = 0, values = []; i < length; i++) { + var opt = element.options[i]; + if (opt.selected) values.push(optionValue(opt)); + } + return values; + } + + function optionValue(opt) { + return Element.hasAttribute(opt, 'value') ? opt.value : opt.text; + } + + return { + input: input, + inputSelector: inputSelector, + textarea: valueSelector, + select: select, + selectOne: selectOne, + selectMany: selectMany, + optionValue: optionValue, + button: valueSelector + }; +})(); + +/*--------------------------------------------------------------------------*/ + + +Abstract.TimedObserver = Class.create(PeriodicalExecuter, { + initialize: function($super, element, frequency, callback) { + $super(callback, frequency); + this.element = $(element); + this.lastValue = this.getValue(); + }, + + execute: function() { + var value = this.getValue(); + if (Object.isString(this.lastValue) && Object.isString(value) ? + this.lastValue != value : String(this.lastValue) != String(value)) { + this.callback(this.element, value); + this.lastValue = value; + } + } +}); + +Form.Element.Observer = Class.create(Abstract.TimedObserver, { + getValue: function() { + return Form.Element.getValue(this.element); + } +}); + +Form.Observer = Class.create(Abstract.TimedObserver, { + getValue: function() { + return Form.serialize(this.element); + } +}); + +/*--------------------------------------------------------------------------*/ + +Abstract.EventObserver = Class.create({ + initialize: function(element, callback) { + this.element = $(element); + this.callback = callback; + + this.lastValue = this.getValue(); + if (this.element.tagName.toLowerCase() == 'form') + this.registerFormCallbacks(); + else + this.registerCallback(this.element); + }, + + onElementEvent: function() { + var value = this.getValue(); + if (this.lastValue != value) { + this.callback(this.element, value); + this.lastValue = value; + } + }, + + registerFormCallbacks: function() { + Form.getElements(this.element).each(this.registerCallback, this); + }, + + registerCallback: function(element) { + if (element.type) { + switch (element.type.toLowerCase()) { + case 'checkbox': + case 'radio': + Event.observe(element, 'click', this.onElementEvent.bind(this)); + break; + default: + Event.observe(element, 'change', this.onElementEvent.bind(this)); + break; + } + } + } +}); + +Form.Element.EventObserver = Class.create(Abstract.EventObserver, { + getValue: function() { + return Form.Element.getValue(this.element); + } +}); + +Form.EventObserver = Class.create(Abstract.EventObserver, { + getValue: function() { + return Form.serialize(this.element); + } +}); +(function(GLOBAL) { + var DIV = document.createElement('div'); + var docEl = document.documentElement; + var MOUSEENTER_MOUSELEAVE_EVENTS_SUPPORTED = 'onmouseenter' in docEl + && 'onmouseleave' in docEl; + + var Event = { + KEY_BACKSPACE: 8, + KEY_TAB: 9, + KEY_RETURN: 13, + KEY_ESC: 27, + KEY_LEFT: 37, + KEY_UP: 38, + KEY_RIGHT: 39, + KEY_DOWN: 40, + KEY_DELETE: 46, + KEY_HOME: 36, + KEY_END: 35, + KEY_PAGEUP: 33, + KEY_PAGEDOWN: 34, + KEY_INSERT: 45 + }; + + + var isIELegacyEvent = function(event) { return false; }; + + if (window.attachEvent) { + if (window.addEventListener) { + isIELegacyEvent = function(event) { + return !(event instanceof window.Event); + }; + } else { + isIELegacyEvent = function(event) { return true; }; + } + } + + var _isButton; + + function _isButtonForDOMEvents(event, code) { + return event.which ? (event.which === code + 1) : (event.button === code); + } + + var legacyButtonMap = { 0: 1, 1: 4, 2: 2 }; + function _isButtonForLegacyEvents(event, code) { + return event.button === legacyButtonMap[code]; + } + + function _isButtonForWebKit(event, code) { + switch (code) { + case 0: return event.which == 1 && !event.metaKey; + case 1: return event.which == 2 || (event.which == 1 && event.metaKey); + case 2: return event.which == 3; + default: return false; + } + } + + if (window.attachEvent) { + if (!window.addEventListener) { + _isButton = _isButtonForLegacyEvents; + } else { + _isButton = function(event, code) { + return isIELegacyEvent(event) ? _isButtonForLegacyEvents(event, code) : + _isButtonForDOMEvents(event, code); + } + } + } else if (Prototype.Browser.WebKit) { + _isButton = _isButtonForWebKit; + } else { + _isButton = _isButtonForDOMEvents; + } + + function isLeftClick(event) { return _isButton(event, 0) } + + function isMiddleClick(event) { return _isButton(event, 1) } + + function isRightClick(event) { return _isButton(event, 2) } + + function element(event) { + return Element.extend(_element(event)); + } + + function _element(event) { + event = Event.extend(event); + + var node = event.target, type = event.type, + currentTarget = event.currentTarget; + + if (currentTarget && currentTarget.tagName) { + if (type === 'load' || type === 'error' || + (type === 'click' && currentTarget.tagName.toLowerCase() === 'input' + && currentTarget.type === 'radio')) + node = currentTarget; + } + + return node.nodeType == Node.TEXT_NODE ? node.parentNode : node; + } + + function findElement(event, expression) { + var element = _element(event), selector = Prototype.Selector; + if (!expression) return Element.extend(element); + while (element) { + if (Object.isElement(element) && selector.match(element, expression)) + return Element.extend(element); + element = element.parentNode; + } + } + + function pointer(event) { + return { x: pointerX(event), y: pointerY(event) }; + } + + function pointerX(event) { + var docElement = document.documentElement, + body = document.body || { scrollLeft: 0 }; + + return event.pageX || (event.clientX + + (docElement.scrollLeft || body.scrollLeft) - + (docElement.clientLeft || 0)); + } + + function pointerY(event) { + var docElement = document.documentElement, + body = document.body || { scrollTop: 0 }; + + return event.pageY || (event.clientY + + (docElement.scrollTop || body.scrollTop) - + (docElement.clientTop || 0)); + } + + + function stop(event) { + Event.extend(event); + event.preventDefault(); + event.stopPropagation(); + + event.stopped = true; + } + + + Event.Methods = { + isLeftClick: isLeftClick, + isMiddleClick: isMiddleClick, + isRightClick: isRightClick, + + element: element, + findElement: findElement, + + pointer: pointer, + pointerX: pointerX, + pointerY: pointerY, + + stop: stop + }; + + var methods = Object.keys(Event.Methods).inject({ }, function(m, name) { + m[name] = Event.Methods[name].methodize(); + return m; + }); + + if (window.attachEvent) { + function _relatedTarget(event) { + var element; + switch (event.type) { + case 'mouseover': + case 'mouseenter': + element = event.fromElement; + break; + case 'mouseout': + case 'mouseleave': + element = event.toElement; + break; + default: + return null; + } + return Element.extend(element); + } + + var additionalMethods = { + stopPropagation: function() { this.cancelBubble = true }, + preventDefault: function() { this.returnValue = false }, + inspect: function() { return '[object Event]' } + }; + + Event.extend = function(event, element) { + if (!event) return false; + + if (!isIELegacyEvent(event)) return event; + + if (event._extendedByPrototype) return event; + event._extendedByPrototype = Prototype.emptyFunction; + + var pointer = Event.pointer(event); + + Object.extend(event, { + target: event.srcElement || element, + relatedTarget: _relatedTarget(event), + pageX: pointer.x, + pageY: pointer.y + }); + + Object.extend(event, methods); + Object.extend(event, additionalMethods); + + return event; + }; + } else { + Event.extend = Prototype.K; + } + + if (window.addEventListener) { + Event.prototype = window.Event.prototype || document.createEvent('HTMLEvents').__proto__; + Object.extend(Event.prototype, methods); + } + + var EVENT_TRANSLATIONS = { + mouseenter: 'mouseover', + mouseleave: 'mouseout' + }; + + function getDOMEventName(eventName) { + return EVENT_TRANSLATIONS[eventName] || eventName; + } + + if (MOUSEENTER_MOUSELEAVE_EVENTS_SUPPORTED) + getDOMEventName = Prototype.K; + + function getUniqueElementID(element) { + if (element === window) return 0; + + if (typeof element._prototypeUID === 'undefined') + element._prototypeUID = Element.Storage.UID++; + return element._prototypeUID; + } + + function getUniqueElementID_IE(element) { + if (element === window) return 0; + if (element == document) return 1; + return element.uniqueID; + } + + if ('uniqueID' in DIV) + getUniqueElementID = getUniqueElementID_IE; + + function isCustomEvent(eventName) { + return eventName.include(':'); + } + + Event._isCustomEvent = isCustomEvent; + + function getRegistryForElement(element, uid) { + var CACHE = GLOBAL.Event.cache; + if (Object.isUndefined(uid)) + uid = getUniqueElementID(element); + if (!CACHE[uid]) CACHE[uid] = { element: element }; + return CACHE[uid]; + } + + function destroyRegistryForElement(element, uid) { + if (Object.isUndefined(uid)) + uid = getUniqueElementID(element); + delete GLOBAL.Event.cache[uid]; + } + + + function register(element, eventName, handler) { + var registry = getRegistryForElement(element); + if (!registry[eventName]) registry[eventName] = []; + var entries = registry[eventName]; + + var i = entries.length; + while (i--) + if (entries[i].handler === handler) return null; + + var uid = getUniqueElementID(element); + var responder = GLOBAL.Event._createResponder(uid, eventName, handler); + var entry = { + responder: responder, + handler: handler + }; + + entries.push(entry); + return entry; + } + + function unregister(element, eventName, handler) { + var registry = getRegistryForElement(element); + var entries = registry[eventName]; + if (!entries) return; + + var i = entries.length, entry; + while (i--) { + if (entries[i].handler === handler) { + entry = entries[i]; + break; + } + } + + if (!entry) return; + + var index = entries.indexOf(entry); + entries.splice(index, 1); + + return entry; + } + + + function observe(element, eventName, handler) { + element = $(element); + var entry = register(element, eventName, handler); + + if (entry === null) return element; + + var responder = entry.responder; + if (isCustomEvent(eventName)) + observeCustomEvent(element, eventName, responder); + else + observeStandardEvent(element, eventName, responder); + + return element; + } + + function observeStandardEvent(element, eventName, responder) { + var actualEventName = getDOMEventName(eventName); + if (element.addEventListener) { + element.addEventListener(actualEventName, responder, false); + } else { + element.attachEvent('on' + actualEventName, responder); + } + } + + function observeCustomEvent(element, eventName, responder) { + if (element.addEventListener) { + element.addEventListener('dataavailable', responder, false); + } else { + element.attachEvent('ondataavailable', responder); + element.attachEvent('onlosecapture', responder); + } + } + + function stopObserving(element, eventName, handler) { + element = $(element); + var handlerGiven = !Object.isUndefined(handler), + eventNameGiven = !Object.isUndefined(eventName); + + if (!eventNameGiven && !handlerGiven) { + stopObservingElement(element); + return element; + } + + if (!handlerGiven) { + stopObservingEventName(element, eventName); + return element; + } + + var entry = unregister(element, eventName, handler); + + if (!entry) return element; + removeEvent(element, eventName, entry.responder); + return element; + } + + function stopObservingStandardEvent(element, eventName, responder) { + var actualEventName = getDOMEventName(eventName); + if (element.removeEventListener) { + element.removeEventListener(actualEventName, responder, false); + } else { + element.detachEvent('on' + actualEventName, responder); + } + } + + function stopObservingCustomEvent(element, eventName, responder) { + if (element.removeEventListener) { + element.removeEventListener('dataavailable', responder, false); + } else { + element.detachEvent('ondataavailable', responder); + element.detachEvent('onlosecapture', responder); + } + } + + + + function stopObservingElement(element) { + var uid = getUniqueElementID(element), registry = GLOBAL.Event.cache[uid]; + if (!registry) return; + + destroyRegistryForElement(element, uid); + + var entries, i; + for (var eventName in registry) { + if (eventName === 'element') continue; + + entries = registry[eventName]; + i = entries.length; + while (i--) + removeEvent(element, eventName, entries[i].responder); + } + } + + function stopObservingEventName(element, eventName) { + var registry = getRegistryForElement(element); + var entries = registry[eventName]; + if (!entries) return; + delete registry[eventName]; + + var i = entries.length; + while (i--) + removeEvent(element, eventName, entries[i].responder); + } + + + function removeEvent(element, eventName, handler) { + if (isCustomEvent(eventName)) + stopObservingCustomEvent(element, eventName, handler); + else + stopObservingStandardEvent(element, eventName, handler); + } + + + + function getFireTarget(element) { + if (element !== document) return element; + if (document.createEvent && !element.dispatchEvent) + return document.documentElement; + return element; + } + + function fire(element, eventName, memo, bubble) { + element = getFireTarget($(element)); + if (Object.isUndefined(bubble)) bubble = true; + memo = memo || {}; + + var event = fireEvent(element, eventName, memo, bubble); + return Event.extend(event); + } + + function fireEvent_DOM(element, eventName, memo, bubble) { + var event = document.createEvent('HTMLEvents'); + event.initEvent('dataavailable', bubble, true); + + event.eventName = eventName; + event.memo = memo; + + element.dispatchEvent(event); + return event; + } + + function fireEvent_IE(element, eventName, memo, bubble) { + var event = document.createEventObject(); + event.eventType = bubble ? 'ondataavailable' : 'onlosecapture'; + + event.eventName = eventName; + event.memo = memo; + + element.fireEvent(event.eventType, event); + return event; + } + + var fireEvent = document.createEvent ? fireEvent_DOM : fireEvent_IE; + + + + Event.Handler = Class.create({ + initialize: function(element, eventName, selector, callback) { + this.element = $(element); + this.eventName = eventName; + this.selector = selector; + this.callback = callback; + this.handler = this.handleEvent.bind(this); + }, + + + start: function() { + Event.observe(this.element, this.eventName, this.handler); + return this; + }, + + stop: function() { + Event.stopObserving(this.element, this.eventName, this.handler); + return this; + }, + + handleEvent: function(event) { + var element = Event.findElement(event, this.selector); + if (element) this.callback.call(this.element, event, element); + } + }); + + function on(element, eventName, selector, callback) { + element = $(element); + if (Object.isFunction(selector) && Object.isUndefined(callback)) { + callback = selector, selector = null; + } + + return new Event.Handler(element, eventName, selector, callback).start(); + } + + Object.extend(Event, Event.Methods); + + Object.extend(Event, { + fire: fire, + observe: observe, + stopObserving: stopObserving, + on: on + }); + + Element.addMethods({ + fire: fire, + + observe: observe, + + stopObserving: stopObserving, + + on: on + }); + + Object.extend(document, { + fire: fire.methodize(), + + observe: observe.methodize(), + + stopObserving: stopObserving.methodize(), + + on: on.methodize(), + + loaded: false + }); + + if (GLOBAL.Event) Object.extend(window.Event, Event); + else GLOBAL.Event = Event; + + GLOBAL.Event.cache = {}; + + function destroyCache_IE() { + GLOBAL.Event.cache = null; + } + + if (window.attachEvent) + window.attachEvent('onunload', destroyCache_IE); + + DIV = null; + docEl = null; +})(this); + +(function(GLOBAL) { + /* Code for creating leak-free event responders is based on work by + John-David Dalton. */ + + var docEl = document.documentElement; + var MOUSEENTER_MOUSELEAVE_EVENTS_SUPPORTED = 'onmouseenter' in docEl + && 'onmouseleave' in docEl; + + function isSimulatedMouseEnterLeaveEvent(eventName) { + return !MOUSEENTER_MOUSELEAVE_EVENTS_SUPPORTED && + (eventName === 'mouseenter' || eventName === 'mouseleave'); + } + + function createResponder(uid, eventName, handler) { + if (Event._isCustomEvent(eventName)) + return createResponderForCustomEvent(uid, eventName, handler); + if (isSimulatedMouseEnterLeaveEvent(eventName)) + return createMouseEnterLeaveResponder(uid, eventName, handler); + + return function(event) { + if (!Event.cache) return; + + var element = Event.cache[uid].element; + Event.extend(event, element); + handler.call(element, event); + }; + } + + function createResponderForCustomEvent(uid, eventName, handler) { + return function(event) { + var element = Event.cache[uid].element; + + if (Object.isUndefined(event.eventName)) + return false; + + if (event.eventName !== eventName) + return false; + + Event.extend(event, element); + handler.call(element, event); + }; + } + + function createMouseEnterLeaveResponder(uid, eventName, handler) { + return function(event) { + var element = Event.cache[uid].element; + + Event.extend(event, element); + var parent = event.relatedTarget; + + while (parent && parent !== element) { + try { parent = parent.parentNode; } + catch(e) { parent = element; } + } + + if (parent === element) return; + handler.call(element, event); + } + } + + GLOBAL.Event._createResponder = createResponder; + docEl = null; +})(this); + +(function(GLOBAL) { + /* Support for the DOMContentLoaded event is based on work by Dan Webb, + Matthias Miller, Dean Edwards, John Resig, and Diego Perini. */ + + var TIMER; + + function fireContentLoadedEvent() { + if (document.loaded) return; + if (TIMER) window.clearTimeout(TIMER); + document.loaded = true; + document.fire('dom:loaded'); + } + + function checkReadyState() { + if (document.readyState === 'complete') { + document.detachEvent('onreadystatechange', checkReadyState); + fireContentLoadedEvent(); + } + } + + function pollDoScroll() { + try { + document.documentElement.doScroll('left'); + } catch (e) { + TIMER = pollDoScroll.defer(); + return; + } + + fireContentLoadedEvent(); + } + + + if (document.readyState === 'complete') { + fireContentLoadedEvent(); + return; + } + + if (document.addEventListener) { + document.addEventListener('DOMContentLoaded', fireContentLoadedEvent, false); + } else { + document.attachEvent('onreadystatechange', checkReadyState); + if (window == top) TIMER = pollDoScroll.defer(); + } + + Event.observe(window, 'load', fireContentLoadedEvent); +})(this); + + +Element.addMethods(); +/*------------------------------- DEPRECATED -------------------------------*/ + +Hash.toQueryString = Object.toQueryString; + +var Toggle = { display: Element.toggle }; + +Element.Methods.childOf = Element.Methods.descendantOf; + +var Insertion = { + Before: function(element, content) { + return Element.insert(element, {before:content}); + }, + + Top: function(element, content) { + return Element.insert(element, {top:content}); + }, + + Bottom: function(element, content) { + return Element.insert(element, {bottom:content}); + }, + + After: function(element, content) { + return Element.insert(element, {after:content}); + } +}; + +var $continue = new Error('"throw $continue" is deprecated, use "return" instead'); + +var Position = { + includeScrollOffsets: false, + + prepare: function() { + this.deltaX = window.pageXOffset + || document.documentElement.scrollLeft + || document.body.scrollLeft + || 0; + this.deltaY = window.pageYOffset + || document.documentElement.scrollTop + || document.body.scrollTop + || 0; + }, + + within: function(element, x, y) { + if (this.includeScrollOffsets) + return this.withinIncludingScrolloffsets(element, x, y); + this.xcomp = x; + this.ycomp = y; + this.offset = Element.cumulativeOffset(element); + + return (y >= this.offset[1] && + y < this.offset[1] + element.offsetHeight && + x >= this.offset[0] && + x < this.offset[0] + element.offsetWidth); + }, + + withinIncludingScrolloffsets: function(element, x, y) { + var offsetcache = Element.cumulativeScrollOffset(element); + + this.xcomp = x + offsetcache[0] - this.deltaX; + this.ycomp = y + offsetcache[1] - this.deltaY; + this.offset = Element.cumulativeOffset(element); + + return (this.ycomp >= this.offset[1] && + this.ycomp < this.offset[1] + element.offsetHeight && + this.xcomp >= this.offset[0] && + this.xcomp < this.offset[0] + element.offsetWidth); + }, + + overlap: function(mode, element) { + if (!mode) return 0; + if (mode == 'vertical') + return ((this.offset[1] + element.offsetHeight) - this.ycomp) / + element.offsetHeight; + if (mode == 'horizontal') + return ((this.offset[0] + element.offsetWidth) - this.xcomp) / + element.offsetWidth; + }, + + + cumulativeOffset: Element.Methods.cumulativeOffset, + + positionedOffset: Element.Methods.positionedOffset, + + absolutize: function(element) { + Position.prepare(); + return Element.absolutize(element); + }, + + relativize: function(element) { + Position.prepare(); + return Element.relativize(element); + }, + + realOffset: Element.Methods.cumulativeScrollOffset, + + offsetParent: Element.Methods.getOffsetParent, + + page: Element.Methods.viewportOffset, + + clone: function(source, target, options) { + options = options || { }; + return Element.clonePosition(target, source, options); + } +}; + +/*--------------------------------------------------------------------------*/ + +if (!document.getElementsByClassName) document.getElementsByClassName = function(instanceMethods){ + function iter(name) { + return name.blank() ? null : "[contains(concat(' ', @class, ' '), ' " + name + " ')]"; + } + + instanceMethods.getElementsByClassName = Prototype.BrowserFeatures.XPath ? + function(element, className) { + className = className.toString().strip(); + var cond = /\s/.test(className) ? $w(className).map(iter).join('') : iter(className); + return cond ? document._getElementsByXPath('.//*' + cond, element) : []; + } : function(element, className) { + className = className.toString().strip(); + var elements = [], classNames = (/\s/.test(className) ? $w(className) : null); + if (!classNames && !className) return elements; + + var nodes = $(element).getElementsByTagName('*'); + className = ' ' + className + ' '; + + for (var i = 0, child, cn; child = nodes[i]; i++) { + if (child.className && (cn = ' ' + child.className + ' ') && (cn.include(className) || + (classNames && classNames.all(function(name) { + return !name.toString().blank() && cn.include(' ' + name + ' '); + })))) + elements.push(Element.extend(child)); + } + return elements; + }; + + return function(className, parentElement) { + return $(parentElement || document.body).getElementsByClassName(className); + }; +}(Element.Methods); + +/*--------------------------------------------------------------------------*/ + +Element.ClassNames = Class.create(); +Element.ClassNames.prototype = { + initialize: function(element) { + this.element = $(element); + }, + + _each: function(iterator, context) { + this.element.className.split(/\s+/).select(function(name) { + return name.length > 0; + })._each(iterator, context); + }, + + set: function(className) { + this.element.className = className; + }, + + add: function(classNameToAdd) { + if (this.include(classNameToAdd)) return; + this.set($A(this).concat(classNameToAdd).join(' ')); + }, + + remove: function(classNameToRemove) { + if (!this.include(classNameToRemove)) return; + this.set($A(this).without(classNameToRemove).join(' ')); + }, + + toString: function() { + return $A(this).join(' '); + } +}; + +Object.extend(Element.ClassNames.prototype, Enumerable); + +/*--------------------------------------------------------------------------*/ + +(function() { + window.Selector = Class.create({ + initialize: function(expression) { + this.expression = expression.strip(); + }, + + findElements: function(rootElement) { + return Prototype.Selector.select(this.expression, rootElement); + }, + + match: function(element) { + return Prototype.Selector.match(element, this.expression); + }, + + toString: function() { + return this.expression; + }, + + inspect: function() { + return "#"; + } + }); + + Object.extend(Selector, { + matchElements: function(elements, expression) { + var match = Prototype.Selector.match, + results = []; + + for (var i = 0, length = elements.length; i < length; i++) { + var element = elements[i]; + if (match(element, expression)) { + results.push(Element.extend(element)); + } + } + return results; + }, + + findElement: function(elements, expression, index) { + index = index || 0; + var matchIndex = 0, element; + for (var i = 0, length = elements.length; i < length; i++) { + element = elements[i]; + if (Prototype.Selector.match(element, expression) && index === matchIndex++) { + return Element.extend(element); + } + } + }, + + findChildElements: function(element, expressions) { + var selector = expressions.toArray().join(', '); + return Prototype.Selector.select(selector, element || document); + } + }); +})(); + +/** + * Event.simulate(@element, eventName[, options]) -> Element + * + * - @element: element to fire event on + * - eventName: name of event to fire (only MouseEvents and HTMLEvents interfaces are supported) + * - options: optional object to fine-tune event properties - pointerX, pointerY, ctrlKey, etc. + * + * $('foo').simulate('click'); // => fires "click" event on an element with id=foo + * + **/ +(function(){ + + var eventMatchers = { + 'HTMLEvents': /^(?:load|unload|abort|error|select|change|submit|reset|focus|blur|resize|scroll|input)$/, + 'MouseEvents': /^(?:click|mouse(?:down|up|over|move|out))$/ + } + var defaultOptions = { + pointerX: 0, + pointerY: 0, + button: 0, + ctrlKey: false, + altKey: false, + shiftKey: false, + metaKey: false, + bubbles: true, + cancelable: true + } + + Event.simulate = function(element, eventName) { + var options = Object.extend(defaultOptions, arguments[2] || { }); + var oEvent, eventType = null; + + element = $(element); + + for (var name in eventMatchers) { + if (eventMatchers[name].test(eventName)) { eventType = name; break; } + } + + if (!eventType) + throw new SyntaxError('Only HTMLEvents and MouseEvents interfaces are supported'); + + if (document.createEvent) { + oEvent = document.createEvent(eventType); + if (eventType == 'HTMLEvents') { + oEvent.initEvent(eventName, options.bubbles, options.cancelable); + } + else { + oEvent.initMouseEvent(eventName, options.bubbles, options.cancelable, document.defaultView, + options.button, options.pointerX, options.pointerY, options.pointerX, options.pointerY, + options.ctrlKey, options.altKey, options.shiftKey, options.metaKey, options.button, element); + } + element.dispatchEvent(oEvent); + } + else { + options.clientX = options.pointerX; + options.clientY = options.pointerY; + oEvent = Object.extend(document.createEventObject(), options); + element.fireEvent('on' + eventName, oEvent); + } + return element; + } + + Element.addMethods({ simulate: Event.simulate }); +})() +function phi4z(t,i,s,e,o,n,a,r,h){var l,c,m,u,d,p,_,f,P,y;for(h=n,y=1;15>=y;y++)if(l=Math.sin(h),m=Math.tan(h),r=m*Math.sqrt(1-t*l*l),c=Math.sin(2*h),u=i*h-s*c+e*Math.sin(4*h)-o*Math.sin(6*h),d=i-2*s*Math.cos(2*h)+4*e*Math.cos(4*h)-6*o*Math.cos(6*h),p=2*u+r*(u*u+a)-2*n*(r*u+1),_=t*c*(u*u+a-2*n*u)/(2*r),f=2*(n-u)*(r*d-2/c)-2*d,P=p/(_+f),h+=P,1e-10>=Math.abs(P))return h;return Proj4js.reportError("phi4z: No convergence"),null}function e4fn(t){var i,s;return i=1+t,s=1-t,Math.sqrt(Math.pow(i,i)*Math.pow(s,s))}var Proj4js={defaultDatum:"WGS84",transform:function(t,i,s){if(!t.readyToUse)return this.reportError("Proj4js initialization for:"+t.srsCode+" not yet complete"),s;if(!i.readyToUse)return this.reportError("Proj4js initialization for:"+i.srsCode+" not yet complete"),s;if(t.datum&&i.datum&&((t.datum.datum_type==Proj4js.common.PJD_3PARAM||t.datum.datum_type==Proj4js.common.PJD_7PARAM)&&"WGS84"!=i.datumCode||(i.datum.datum_type==Proj4js.common.PJD_3PARAM||i.datum.datum_type==Proj4js.common.PJD_7PARAM)&&"WGS84"!=t.datumCode)){var e=Proj4js.WGS84;this.transform(t,e,s),t=e}return"enu"!=t.axis&&this.adjust_axis(t,!1,s),"longlat"==t.projName?(s.x*=Proj4js.common.D2R,s.y*=Proj4js.common.D2R):(t.to_meter&&(s.x*=t.to_meter,s.y*=t.to_meter),t.inverse(s)),t.from_greenwich&&(s.x+=t.from_greenwich),s=this.datum_transform(t.datum,i.datum,s),i.from_greenwich&&(s.x-=i.from_greenwich),"longlat"==i.projName?(s.x*=Proj4js.common.R2D,s.y*=Proj4js.common.R2D):(i.forward(s),i.to_meter&&(s.x/=i.to_meter,s.y/=i.to_meter)),"enu"!=i.axis&&this.adjust_axis(i,!0,s),s},datum_transform:function(t,i,s){return t.compare_datums(i)?s:t.datum_type==Proj4js.common.PJD_NODATUM||i.datum_type==Proj4js.common.PJD_NODATUM?s:((t.es!=i.es||t.a!=i.a||t.datum_type==Proj4js.common.PJD_3PARAM||t.datum_type==Proj4js.common.PJD_7PARAM||i.datum_type==Proj4js.common.PJD_3PARAM||i.datum_type==Proj4js.common.PJD_7PARAM)&&(t.geodetic_to_geocentric(s),(t.datum_type==Proj4js.common.PJD_3PARAM||t.datum_type==Proj4js.common.PJD_7PARAM)&&t.geocentric_to_wgs84(s),(i.datum_type==Proj4js.common.PJD_3PARAM||i.datum_type==Proj4js.common.PJD_7PARAM)&&i.geocentric_from_wgs84(s),i.geocentric_to_geodetic(s)),s)},adjust_axis:function(t,i,s){for(var e,o,n=s.x,a=s.y,r=s.z||0,h=0;3>h;h++)if(!i||2!=h||void 0!==s.z)switch(0==h?(e=n,o="x"):1==h?(e=a,o="y"):(e=r,o="z"),t.axis[h]){case"e":s[o]=e;break;case"w":s[o]=-e;break;case"n":s[o]=e;break;case"s":s[o]=-e;break;case"u":void 0!==s[o]&&(s.z=e);break;case"d":void 0!==s[o]&&(s.z=-e);break;default:return alert("ERROR: unknow axis ("+t.axis[h]+") - check definition of "+t.projName),null}return s},reportError:function(){},extend:function(t,i){if(t=t||{},i)for(var s in i){var e=i[s];void 0!==e&&(t[s]=e)}return t},Class:function(){for(var t,i=function(){this.initialize.apply(this,arguments)},s={},e=0;arguments.length>e;++e)t="function"==typeof arguments[e]?arguments[e].prototype:arguments[e],Proj4js.extend(s,t);return i.prototype=s,i},bind:function(t,i){var s=Array.prototype.slice.apply(arguments,[2]);return function(){var e=s.concat(Array.prototype.slice.apply(arguments,[0]));return t.apply(i,e)}},scriptName:"proj4js-combined.js",defsLookupService:"http://spatialreference.org/ref",libPath:null,getScriptLocation:function(){if(this.libPath)return this.libPath;for(var t=this.scriptName,i=t.length,s=document.getElementsByTagName("script"),e=0;s.length>e;e++){var o=s[e].getAttribute("src");if(o){var n=o.lastIndexOf(t);if(n>-1&&n+i==o.length){this.libPath=o.slice(0,-i);break}}}return this.libPath||""},loadScript:function(t,i,s,e){var o=document.createElement("script");o.defer=!1,o.type="text/javascript",o.id=t,o.src=t,o.onload=i,o.onerror=s,o.loadCheck=e,/MSIE/.test(navigator.userAgent)&&(o.onreadystatechange=this.checkReadyState),document.getElementsByTagName("head")[0].appendChild(o)},checkReadyState:function(){"loaded"==this.readyState&&(this.loadCheck()?this.onload():this.onerror())}};Proj4js.Proj=Proj4js.Class({readyToUse:!1,title:null,projName:null,units:null,datum:null,x0:0,y0:0,localCS:!1,queue:null,initialize:function(t,i){if(this.srsCodeInput=t,this.queue=[],i&&this.queue.push(i),t.indexOf("GEOGCS")>=0||t.indexOf("GEOCCS")>=0||t.indexOf("PROJCS")>=0||t.indexOf("LOCAL_CS")>=0)return this.parseWKT(t),this.deriveConstants(),this.loadProjCode(this.projName),void 0;if(0==t.indexOf("urn:")){var s=t.split(":");"ogc"!=s[1]&&"x-ogc"!=s[1]||"def"!=s[2]||"crs"!=s[3]||(t=s[4]+":"+s[s.length-1])}else if(0==t.indexOf("http://")){var e=t.split("#");e[0].match(/epsg.org/)?t="EPSG:"+e[1]:e[0].match(/RIG.xml/)&&(t="IGNF:"+e[1])}this.srsCode=t.toUpperCase(),0==this.srsCode.indexOf("EPSG")?(this.srsCode=this.srsCode,this.srsAuth="epsg",this.srsProjNumber=this.srsCode.substring(5)):0==this.srsCode.indexOf("IGNF")?(this.srsCode=this.srsCode,this.srsAuth="IGNF",this.srsProjNumber=this.srsCode.substring(5)):0==this.srsCode.indexOf("CRS")?(this.srsCode=this.srsCode,this.srsAuth="CRS",this.srsProjNumber=this.srsCode.substring(4)):(this.srsAuth="",this.srsProjNumber=this.srsCode),this.loadProjDefinition()},loadProjDefinition:function(){if(Proj4js.defs[this.srsCode])return this.defsLoaded(),void 0;var t=Proj4js.getScriptLocation()+"defs/"+this.srsAuth.toUpperCase()+this.srsProjNumber+".js";Proj4js.loadScript(t,Proj4js.bind(this.defsLoaded,this),Proj4js.bind(this.loadFromService,this),Proj4js.bind(this.checkDefsLoaded,this))},loadFromService:function(){var t=Proj4js.defsLookupService+"/"+this.srsAuth+"/"+this.srsProjNumber+"/proj4js/";Proj4js.loadScript(t,Proj4js.bind(this.defsLoaded,this),Proj4js.bind(this.defsFailed,this),Proj4js.bind(this.checkDefsLoaded,this))},defsLoaded:function(){this.parseDefs(),this.loadProjCode(this.projName)},checkDefsLoaded:function(){return Proj4js.defs[this.srsCode]?!0:!1},defsFailed:function(){Proj4js.reportError("failed to load projection definition for: "+this.srsCode),Proj4js.defs[this.srsCode]=Proj4js.defs.WGS84,this.defsLoaded()},loadProjCode:function(t){if(Proj4js.Proj[t])return this.initTransforms(),void 0;var i=Proj4js.getScriptLocation()+"projCode/"+t+".js";Proj4js.loadScript(i,Proj4js.bind(this.loadProjCodeSuccess,this,t),Proj4js.bind(this.loadProjCodeFailure,this,t),Proj4js.bind(this.checkCodeLoaded,this,t))},loadProjCodeSuccess:function(t){Proj4js.Proj[t].dependsOn?this.loadProjCode(Proj4js.Proj[t].dependsOn):this.initTransforms()},loadProjCodeFailure:function(t){Proj4js.reportError("failed to find projection file for: "+t)},checkCodeLoaded:function(t){return Proj4js.Proj[t]?!0:!1},initTransforms:function(){if(Proj4js.extend(this,Proj4js.Proj[this.projName]),this.init(),this.readyToUse=!0,this.queue)for(var t;t=this.queue.shift();)t.call(this,this)},wktRE:/^(\w+)\[(.*)\]$/,parseWKT:function(t){var i=t.match(this.wktRE);if(i){var s,e=i[1],o=i[2],n=o.split(",");s="TOWGS84"==e.toUpperCase()?e:n.shift(),s=s.replace(/^\"/,""),s=s.replace(/\"$/,"");for(var a=[],r=0,h="",l=0;n.length>l;++l){for(var c=n[l],m=0;c.length>m;++m)"["==c.charAt(m)&&++r,"]"==c.charAt(m)&&--r;h+=c,0===r?(a.push(h),h=""):h+=","}switch(e){case"LOCAL_CS":this.projName="identity",this.localCS=!0,this.srsCode=s;break;case"GEOGCS":this.projName="longlat",this.geocsCode=s,this.srsCode||(this.srsCode=s);break;case"PROJCS":this.srsCode=s;break;case"GEOCCS":break;case"PROJECTION":this.projName=Proj4js.wktProjections[s];break;case"DATUM":this.datumName=s;break;case"LOCAL_DATUM":this.datumCode="none";break;case"SPHEROID":this.ellps=s,this.a=parseFloat(a.shift()),this.rf=parseFloat(a.shift());break;case"PRIMEM":this.from_greenwich=parseFloat(a.shift());break;case"UNIT":this.units=s,this.unitsPerMeter=parseFloat(a.shift());break;case"PARAMETER":var u=s.toLowerCase(),d=parseFloat(a.shift());switch(u){case"false_easting":this.x0=d;break;case"false_northing":this.y0=d;break;case"scale_factor":this.k0=d;break;case"central_meridian":this.long0=d*Proj4js.common.D2R;break;case"latitude_of_origin":this.lat0=d*Proj4js.common.D2R;break;case"more_here":break;default:}break;case"TOWGS84":this.datum_params=a;break;case"AXIS":var u=s.toLowerCase(),d=a.shift();switch(d){case"EAST":d="e";break;case"WEST":d="w";break;case"NORTH":d="n";break;case"SOUTH":d="s";break;case"UP":d="u";break;case"DOWN":d="d";break;case"OTHER":default:d=" "}switch(this.axis||(this.axis="enu"),u){case"x":this.axis=d+this.axis.substr(1,2);break;case"y":this.axis=this.axis.substr(0,1)+d+this.axis.substr(2,1);break;case"z":this.axis=this.axis.substr(0,2)+d;break;default:}case"MORE_HERE":break;default:}for(var l=0;a.length>l;++l)this.parseWKT(a[l])}},parseDefs:function(){this.defData=Proj4js.defs[this.srsCode];var t,i;if(this.defData){for(var s=this.defData.split("+"),e=0;s.length>e;e++){var o=s[e].split("=");switch(t=o[0].toLowerCase(),i=o[1],t.replace(/\s/gi,"")){case"":break;case"title":this.title=i;break;case"proj":this.projName=i.replace(/\s/gi,"");break;case"units":this.units=i.replace(/\s/gi,"");break;case"datum":this.datumCode=i.replace(/\s/gi,"");break;case"nadgrids":this.nagrids=i.replace(/\s/gi,"");break;case"ellps":this.ellps=i.replace(/\s/gi,"");break;case"a":this.a=parseFloat(i);break;case"b":this.b=parseFloat(i);break;case"rf":this.rf=parseFloat(i);break;case"lat_0":this.lat0=i*Proj4js.common.D2R;break;case"lat_1":this.lat1=i*Proj4js.common.D2R;break;case"lat_2":this.lat2=i*Proj4js.common.D2R;break;case"lat_ts":this.lat_ts=i*Proj4js.common.D2R;break;case"lon_0":this.long0=i*Proj4js.common.D2R;break;case"alpha":this.alpha=parseFloat(i)*Proj4js.common.D2R;break;case"lonc":this.longc=i*Proj4js.common.D2R;break;case"x_0":this.x0=parseFloat(i);break;case"y_0":this.y0=parseFloat(i);break;case"k_0":this.k0=parseFloat(i);break;case"k":this.k0=parseFloat(i);break;case"r_a":this.R_A=!0;break;case"zone":this.zone=parseInt(i,10);break;case"south":this.utmSouth=!0;break;case"towgs84":this.datum_params=i.split(",");break;case"to_meter":this.to_meter=parseFloat(i);break;case"from_greenwich":this.from_greenwich=i*Proj4js.common.D2R;break;case"pm":i=i.replace(/\s/gi,""),this.from_greenwich=Proj4js.PrimeMeridian[i]?Proj4js.PrimeMeridian[i]:parseFloat(i),this.from_greenwich*=Proj4js.common.D2R;break;case"axis":i=i.replace(/\s/gi,"");var n="ewnsud";3==i.length&&-1!=n.indexOf(i.substr(0,1))&&-1!=n.indexOf(i.substr(1,1))&&-1!=n.indexOf(i.substr(2,1))&&(this.axis=i);break;case"no_defs":break;default:}}this.deriveConstants()}},deriveConstants:function(){if("@null"==this.nagrids&&(this.datumCode="none"),this.datumCode&&"none"!=this.datumCode){var t=Proj4js.Datum[this.datumCode];t&&(this.datum_params=t.towgs84?t.towgs84.split(","):null,this.ellps=t.ellipse,this.datumName=t.datumName?t.datumName:this.datumCode)}if(!this.a){var i=Proj4js.Ellipsoid[this.ellps]?Proj4js.Ellipsoid[this.ellps]:Proj4js.Ellipsoid.WGS84;Proj4js.extend(this,i)}this.rf&&!this.b&&(this.b=(1-1/this.rf)*this.a),(0===this.rf||Math.abs(this.a-this.b)=a;a++)if(s=t*Math.sin(n),e=this.HALF_PI-2*Math.atan(i*Math.pow((1-s)/(1+s),o))-n,n+=e,1e-10>=Math.abs(e))return n;return alert("phi2z has NoConvergence"),-9999},qsfnz:function(t,i){var s;return t>1e-7?(s=t*i,(1-t*t)*(i/(1-s*s)-.5/t*Math.log((1-s)/(1+s)))):2*i},asinz:function(t){return Math.abs(t)>1&&(t=t>1?1:-1),Math.asin(t)},e0fn:function(t){return 1-.25*t*(1+t/16*(3+1.25*t))},e1fn:function(t){return.375*t*(1+.25*t*(1+.46875*t))},e2fn:function(t){return.05859375*t*t*(1+.75*t)},e3fn:function(t){return t*t*t*(35/3072)},mlfn:function(t,i,s,e,o){return t*o-i*Math.sin(2*o)+s*Math.sin(4*o)-e*Math.sin(6*o)},srat:function(t,i){return Math.pow((1-t)/(1+t),i)},sign:function(t){return 0>t?-1:1},adjust_lon:function(t){return t=Math.abs(t)this.HALF_PI)return+Number.NaN;if(i==this.HALF_PI)return Number.POSITIVE_INFINITY;if(i==-1*this.HALF_PI)return-1*Number.POSITIVE_INFINITY;var e=t*s;return Math.log(Math.tan((this.HALF_PI+i)/2))+t*Math.log((1-e)/(1+e))/2},fL:function(t,i){return 2*Math.atan(t*Math.exp(i))-this.HALF_PI},invlatiso:function(t,i){var s=this.fL(1,i),e=0,o=0;do e=s,o=t*Math.sin(e),s=this.fL(Math.exp(t*Math.log((1+o)/(1-o))/2),i);while(Math.abs(s-e)>1e-12);return s},sinh:function(t){var i=Math.exp(t);return i=(i-1/i)/2},cosh:function(t){var i=Math.exp(t);return i=(i+1/i)/2},tanh:function(t){var i=Math.exp(t);return i=(i-1/i)/(i+1/i)},asinh:function(t){var i=t>=0?1:-1;return i*Math.log(Math.abs(t)+Math.sqrt(t*t+1))},acosh:function(t){return 2*Math.log(Math.sqrt((t+1)/2)+Math.sqrt((t-1)/2))},atanh:function(t){return Math.log((t-1)/(t+1))/2},gN:function(t,i,s){var e=i*s;return t/Math.sqrt(1-e*e)},pj_enfn:function(t){var i=[];i[0]=this.C00-t*(this.C02+t*(this.C04+t*(this.C06+t*this.C08))),i[1]=t*(this.C22-t*(this.C04+t*(this.C06+t*this.C08)));var s=t*t;return i[2]=s*(this.C44-t*(this.C46+t*this.C48)),s*=t,i[3]=s*(this.C66-t*this.C68),i[4]=s*t*this.C88,i},pj_mlfn:function(t,i,s,e){return s*=i,i*=i,e[0]*t-s*(e[1]+i*(e[2]+i*(e[3]+i*e[4])))},pj_inv_mlfn:function(t,i,s){for(var e=1/(1-i),o=t,n=Proj4js.common.MAX_ITER;n;--n){var a=Math.sin(o),r=1-i*a*a;if(r=(this.pj_mlfn(o,a,Math.cos(o),s)-t)*r*Math.sqrt(r)*e,o-=r,Math.abs(r)i;i++)t.datum_params[i]=parseFloat(t.datum_params[i]);(0!=t.datum_params[0]||0!=t.datum_params[1]||0!=t.datum_params[2])&&(this.datum_type=Proj4js.common.PJD_3PARAM),t.datum_params.length>3&&(0!=t.datum_params[3]||0!=t.datum_params[4]||0!=t.datum_params[5]||0!=t.datum_params[6])&&(this.datum_type=Proj4js.common.PJD_7PARAM,t.datum_params[3]*=Proj4js.common.SEC_TO_RAD,t.datum_params[4]*=Proj4js.common.SEC_TO_RAD,t.datum_params[5]*=Proj4js.common.SEC_TO_RAD,t.datum_params[6]=t.datum_params[6]/1e6+1)}t&&(this.a=t.a,this.b=t.b,this.es=t.es,this.ep2=t.ep2,this.datum_params=t.datum_params)},compare_datums:function(t){return this.datum_type!=t.datum_type?!1:this.a!=t.a||Math.abs(this.es-t.es)>5e-11?!1:this.datum_type==Proj4js.common.PJD_3PARAM?this.datum_params[0]==t.datum_params[0]&&this.datum_params[1]==t.datum_params[1]&&this.datum_params[2]==t.datum_params[2]:this.datum_type==Proj4js.common.PJD_7PARAM?this.datum_params[0]==t.datum_params[0]&&this.datum_params[1]==t.datum_params[1]&&this.datum_params[2]==t.datum_params[2]&&this.datum_params[3]==t.datum_params[3]&&this.datum_params[4]==t.datum_params[4]&&this.datum_params[5]==t.datum_params[5]&&this.datum_params[6]==t.datum_params[6]:this.datum_type==Proj4js.common.PJD_GRIDSHIFT||t.datum_type==Proj4js.common.PJD_GRIDSHIFT?(alert("ERROR: Grid shift transformations are not implemented."),!1):!0},geodetic_to_geocentric:function(t){var i,s,e,o,n,a,r,h=t.x,l=t.y,c=t.z?t.z:0,m=0;if(-Proj4js.common.HALF_PI>l&&l>-1.001*Proj4js.common.HALF_PI)l=-Proj4js.common.HALF_PI;else if(l>Proj4js.common.HALF_PI&&1.001*Proj4js.common.HALF_PI>l)l=Proj4js.common.HALF_PI;else if(-Proj4js.common.HALF_PI>l||l>Proj4js.common.HALF_PI)return Proj4js.reportError("geocent:lat out of range:"+l),null;return h>Proj4js.common.PI&&(h-=2*Proj4js.common.PI),n=Math.sin(l),r=Math.cos(l),a=n*n,o=this.a/Math.sqrt(1-this.es*a),i=(o+c)*r*Math.cos(h),s=(o+c)*r*Math.sin(h),e=(o*(1-this.es)+c)*n,t.x=i,t.y=s,t.z=e,m},geocentric_to_geodetic:function(t){var i,s,e,o,n,a,r,h,l,c,m,u,d,p,_,f,P,y=1e-12,g=y*y,L=30,v=t.x,j=t.y,M=t.z?t.z:0;if(d=!1,i=Math.sqrt(v*v+j*j),s=Math.sqrt(v*v+j*j+M*M),y>i/this.a){if(d=!0,_=0,y>s/this.a)return f=Proj4js.common.HALF_PI,P=-this.b,void 0}else _=Math.atan2(j,v);e=M/s,o=i/s,n=1/Math.sqrt(1-this.es*(2-this.es)*o*o),h=o*(1-this.es)*n,l=e*n,p=0;do p++,r=this.a/Math.sqrt(1-this.es*l*l),P=i*h+M*l-r*(1-this.es*l*l),a=this.es*r/(r+P),n=1/Math.sqrt(1-a*(2-a)*o*o),c=o*(1-a)*n,m=e*n,u=m*h-c*l,h=c,l=m;while(u*u>g&&L>p);return f=Math.atan(m/Math.abs(c)),t.x=_,t.y=f,t.z=P,t},geocentric_to_geodetic_noniter:function(t){var i,s,e,o,n,a,r,h,l,c,m,u,d,p,_,f,P,y=t.x,g=t.y,L=t.z?t.z:0;if(y=parseFloat(y),g=parseFloat(g),L=parseFloat(L),P=!1,0!=y)i=Math.atan2(g,y);else if(g>0)i=Proj4js.common.HALF_PI;else if(0>g)i=-Proj4js.common.HALF_PI;else if(P=!0,i=0,L>0)s=Proj4js.common.HALF_PI;else{if(!(0>L))return s=Proj4js.common.HALF_PI,e=-this.b,void 0;s=-Proj4js.common.HALF_PI}return n=y*y+g*g,o=Math.sqrt(n),a=L*Proj4js.common.AD_C,h=Math.sqrt(a*a+n),c=a/h,u=o/h,m=c*c*c,r=L+this.b*this.ep2*m,f=o-this.a*this.es*u*u*u,l=Math.sqrt(r*r+f*f),d=r/l,p=f/l,_=this.a/Math.sqrt(1-this.es*d*d),e=p>=Proj4js.common.COS_67P5?o/p-_:-Proj4js.common.COS_67P5>=p?o/-p-_:L/d+_*(this.es-1),0==P&&(s=Math.atan(d/p)),t.x=i,t.y=s,t.z=e,t},geocentric_to_wgs84:function(t){if(this.datum_type==Proj4js.common.PJD_3PARAM)t.x+=this.datum_params[0],t.y+=this.datum_params[1],t.z+=this.datum_params[2];else if(this.datum_type==Proj4js.common.PJD_7PARAM){var i=this.datum_params[0],s=this.datum_params[1],e=this.datum_params[2],o=this.datum_params[3],n=this.datum_params[4],a=this.datum_params[5],r=this.datum_params[6],h=r*(t.x-a*t.y+n*t.z)+i,l=r*(a*t.x+t.y-o*t.z)+s,c=r*(-n*t.x+o*t.y+t.z)+e;t.x=h,t.y=l,t.z=c}},geocentric_from_wgs84:function(t){if(this.datum_type==Proj4js.common.PJD_3PARAM)t.x-=this.datum_params[0],t.y-=this.datum_params[1],t.z-=this.datum_params[2];else if(this.datum_type==Proj4js.common.PJD_7PARAM){var i=this.datum_params[0],s=this.datum_params[1],e=this.datum_params[2],o=this.datum_params[3],n=this.datum_params[4],a=this.datum_params[5],r=this.datum_params[6],h=(t.x-i)/r,l=(t.y-s)/r,c=(t.z-e)/r;t.x=h+a*l-n*c,t.y=-a*h+l+o*c,t.z=n*h-o*l+c}}}),Proj4js.Point=Proj4js.Class({initialize:function(t,i,s){if("object"==typeof t)this.x=t[0],this.y=t[1],this.z=t[2]||0;else if("string"==typeof t&&i===void 0){var e=t.split(",");this.x=parseFloat(e[0]),this.y=parseFloat(e[1]),this.z=parseFloat(e[2])||0}else this.x=t,this.y=i,this.z=s||0},clone:function(){return new Proj4js.Point(this.x,this.y,this.z)},toString:function(){return"x="+this.x+",y="+this.y},toShortString:function(){return this.x+", "+this.y}}),Proj4js.PrimeMeridian={greenwich:0,lisbon:-9.131906111111,paris:2.337229166667,bogota:-74.080916666667,madrid:-3.687938888889,rome:12.452333333333,bern:7.439583333333,jakarta:106.807719444444,ferro:-17.666666666667,brussels:4.367975,stockholm:18.058277777778,athens:23.7163375,oslo:10.722916666667},Proj4js.Ellipsoid={MERIT:{a:6378137,rf:298.257,ellipseName:"MERIT 1983"},SGS85:{a:6378136,rf:298.257,ellipseName:"Soviet Geodetic System 85"},GRS80:{a:6378137,rf:298.257222101,ellipseName:"GRS 1980(IUGG, 1980)"},IAU76:{a:6378140,rf:298.257,ellipseName:"IAU 1976"},airy:{a:6377563.396,b:6356256.91,ellipseName:"Airy 1830"},"APL4.":{a:6378137,rf:298.25,ellipseName:"Appl. Physics. 1965"},NWL9D:{a:6378145,rf:298.25,ellipseName:"Naval Weapons Lab., 1965"},mod_airy:{a:6377340.189,b:6356034.446,ellipseName:"Modified Airy"},andrae:{a:6377104.43,rf:300,ellipseName:"Andrae 1876 (Den., Iclnd.)"},aust_SA:{a:6378160,rf:298.25,ellipseName:"Australian Natl & S. Amer. 1969"},GRS67:{a:6378160,rf:298.247167427,ellipseName:"GRS 67(IUGG 1967)"},bessel:{a:6377397.155,rf:299.1528128,ellipseName:"Bessel 1841"},bess_nam:{a:6377483.865,rf:299.1528128,ellipseName:"Bessel 1841 (Namibia)"},clrk66:{a:6378206.4,b:6356583.8,ellipseName:"Clarke 1866"},clrk80:{a:6378249.145,rf:293.4663,ellipseName:"Clarke 1880 mod."},CPM:{a:6375738.7,rf:334.29,ellipseName:"Comm. des Poids et Mesures 1799"},delmbr:{a:6376428,rf:311.5,ellipseName:"Delambre 1810 (Belgium)"},engelis:{a:6378136.05,rf:298.2566,ellipseName:"Engelis 1985"},evrst30:{a:6377276.345,rf:300.8017,ellipseName:"Everest 1830"},evrst48:{a:6377304.063,rf:300.8017,ellipseName:"Everest 1948"},evrst56:{a:6377301.243,rf:300.8017,ellipseName:"Everest 1956"},evrst69:{a:6377295.664,rf:300.8017,ellipseName:"Everest 1969"},evrstSS:{a:6377298.556,rf:300.8017,ellipseName:"Everest (Sabah & Sarawak)"},fschr60:{a:6378166,rf:298.3,ellipseName:"Fischer (Mercury Datum) 1960"},fschr60m:{a:6378155,rf:298.3,ellipseName:"Fischer 1960"},fschr68:{a:6378150,rf:298.3,ellipseName:"Fischer 1968"},helmert:{a:6378200,rf:298.3,ellipseName:"Helmert 1906"},hough:{a:6378270,rf:297,ellipseName:"Hough"},intl:{a:6378388,rf:297,ellipseName:"International 1909 (Hayford)"},kaula:{a:6378163,rf:298.24,ellipseName:"Kaula 1961"},lerch:{a:6378139,rf:298.257,ellipseName:"Lerch 1979"},mprts:{a:6397300,rf:191,ellipseName:"Maupertius 1738"},new_intl:{a:6378157.5,b:6356772.2,ellipseName:"New International 1967"},plessis:{a:6376523,rf:6355863,ellipseName:"Plessis 1817 (France)"},krass:{a:6378245,rf:298.3,ellipseName:"Krassovsky, 1942"},SEasia:{a:6378155,b:6356773.3205,ellipseName:"Southeast Asia"},walbeck:{a:6376896,b:6355834.8467,ellipseName:"Walbeck"},WGS60:{a:6378165,rf:298.3,ellipseName:"WGS 60"},WGS66:{a:6378145,rf:298.25,ellipseName:"WGS 66"},WGS72:{a:6378135,rf:298.26,ellipseName:"WGS 72"},WGS84:{a:6378137,rf:298.257223563,ellipseName:"WGS 84"},sphere:{a:6370997,b:6370997,ellipseName:"Normal Sphere (r=6370997)"}},Proj4js.Datum={WGS84:{towgs84:"0,0,0",ellipse:"WGS84",datumName:"WGS84"},GGRS87:{towgs84:"-199.87,74.79,246.62",ellipse:"GRS80",datumName:"Greek_Geodetic_Reference_System_1987"},NAD83:{towgs84:"0,0,0",ellipse:"GRS80",datumName:"North_American_Datum_1983"},NAD27:{nadgrids:"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat",ellipse:"clrk66",datumName:"North_American_Datum_1927"},potsdam:{towgs84:"606.0,23.0,413.0",ellipse:"bessel",datumName:"Potsdam Rauenberg 1950 DHDN"},carthage:{towgs84:"-263.0,6.0,431.0",ellipse:"clark80",datumName:"Carthage 1934 Tunisia"},hermannskogel:{towgs84:"653.0,-212.0,449.0",ellipse:"bessel",datumName:"Hermannskogel"},ire65:{towgs84:"482.530,-130.596,564.557,-1.042,-0.214,-0.631,8.15",ellipse:"mod_airy",datumName:"Ireland 1965"},nzgd49:{towgs84:"59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993",ellipse:"intl",datumName:"New Zealand Geodetic Datum 1949"},OSGB36:{towgs84:"446.448,-125.157,542.060,0.1502,0.2470,0.8421,-20.4894",ellipse:"airy",datumName:"Airy 1830"}},Proj4js.WGS84=new Proj4js.Proj("WGS84"),Proj4js.Datum.OSB36=Proj4js.Datum.OSGB36,Proj4js.wktProjections={"Lambert Tangential Conformal Conic Projection":"lcc",Mercator:"merc","Popular Visualisation Pseudo Mercator":"merc",Mercator_1SP:"merc",Transverse_Mercator:"tmerc","Transverse Mercator":"tmerc","Lambert Azimuthal Equal Area":"laea","Universal Transverse Mercator System":"utm"},Proj4js.Proj.aea={init:function(){return Math.abs(this.lat1+this.lat2)Proj4js.common.EPSLN?(this.ms1*this.ms1-this.ms2*this.ms2)/(this.qs2-this.qs1):this.con,this.c=this.ms1*this.ms1+this.ns0*this.qs1,this.rh=this.a*Math.sqrt(this.c-this.ns0*this.qs0)/this.ns0,void 0)},forward:function(t){var i=t.x,s=t.y;this.sin_phi=Math.sin(s),this.cos_phi=Math.cos(s);var e=Proj4js.common.qsfnz(this.e3,this.sin_phi,this.cos_phi),o=this.a*Math.sqrt(this.c-this.ns0*e)/this.ns0,n=this.ns0*Proj4js.common.adjust_lon(i-this.long0),a=o*Math.sin(n)+this.x0,r=this.rh-o*Math.cos(n)+this.y0;return t.x=a,t.y=r,t},inverse:function(t){var i,s,e,o,n,a;return t.x-=this.x0,t.y=this.rh-t.y+this.y0,this.ns0>=0?(i=Math.sqrt(t.x*t.x+t.y*t.y),e=1):(i=-Math.sqrt(t.x*t.x+t.y*t.y),e=-1),o=0,0!=i&&(o=Math.atan2(e*t.x,e*t.y)),e=i*this.ns0/this.a,s=(this.c-e*e)/this.ns0,this.e3>=1e-10?(e=1-.5*(1-this.es)*Math.log((1-this.e3)/(1+this.e3))/this.e3,a=Math.abs(Math.abs(e)-Math.abs(s))>1e-10?this.phi1z(this.e3,s):s>=0?.5*Proj4js.common.PI:-.5*Proj4js.common.PI):a=this.phi1z(this.e3,s),n=Proj4js.common.adjust_lon(o/this.ns0+this.long0),t.x=n,t.y=a,t},phi1z:function(t,i){var s,e,o,n,a,r=Proj4js.common.asinz(.5*i);if(Proj4js.common.EPSLN>t)return r;for(var h=t*t,l=1;25>=l;l++)if(s=Math.sin(r),e=Math.cos(r),o=t*s,n=1-o*o,a=.5*n*n/e*(i/(1-h)-s/n+.5/t*Math.log((1-o)/(1+o))),r+=a,1e-7>=Math.abs(a))return r;return Proj4js.reportError("aea:phi1z:Convergence error"),null}},Proj4js.Proj.sterea={dependsOn:"gauss",init:function(){return Proj4js.Proj.gauss.init.apply(this),this.rc?(this.sinc0=Math.sin(this.phic0),this.cosc0=Math.cos(this.phic0),this.R2=2*this.rc,this.title||(this.title="Oblique Stereographic Alternative"),void 0):(Proj4js.reportError("sterea:init:E_ERROR_0"),void 0)},forward:function(t){var i,s,e,o;return t.x=Proj4js.common.adjust_lon(t.x-this.long0),Proj4js.Proj.gauss.forward.apply(this,[t]),i=Math.sin(t.y),s=Math.cos(t.y),e=Math.cos(t.x),o=this.k0*this.R2/(1+this.sinc0*i+this.cosc0*s*e),t.x=o*s*Math.sin(t.x),t.y=o*(this.cosc0*i-this.sinc0*s*e),t.x=this.a*t.x+this.x0,t.y=this.a*t.y+this.y0,t},inverse:function(t){var i,s,e,o,n;if(t.x=(t.x-this.x0)/this.a,t.y=(t.y-this.y0)/this.a,t.x/=this.k0,t.y/=this.k0,n=Math.sqrt(t.x*t.x+t.y*t.y)){var a=2*Math.atan2(n,this.R2);i=Math.sin(a),s=Math.cos(a),o=Math.asin(s*this.sinc0+t.y*i*this.cosc0/n),e=Math.atan2(t.x*i,n*this.cosc0*s-t.y*this.sinc0*i)}else o=this.phic0,e=0;return t.x=e,t.y=o,Proj4js.Proj.gauss.inverse.apply(this,[t]),t.x=Proj4js.common.adjust_lon(t.x+this.long0),t}},Proj4js.Proj.poly={init:function(){0==this.lat0&&(this.lat0=90),this.temp=this.b/this.a,this.es=1-Math.pow(this.temp,2),this.e=Math.sqrt(this.es),this.e0=Proj4js.common.e0fn(this.es),this.e1=Proj4js.common.e1fn(this.es),this.e2=Proj4js.common.e2fn(this.es),this.e3=Proj4js.common.e3fn(this.es),this.ml0=Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,this.lat0)},forward:function(t){var i,s,e,o,n,a,r,h=t.x,l=t.y;return e=Proj4js.common.adjust_lon(h-this.long0),1e-7>=Math.abs(l)?(a=this.x0+this.a*e,r=this.y0-this.a*this.ml0):(i=Math.sin(l),s=Math.cos(l),o=Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,l),n=Proj4js.common.msfnz(this.e,i,s),e=i,a=this.x0+this.a*n*Math.sin(e)/i,r=this.y0+this.a*(o-this.ml0+n*(1-Math.cos(e))/i)),t.x=a,t.y=r,t},inverse:function(t){var i,s,e,o,n,a;if(t.x-=this.x0,t.y-=this.y0,i=this.ml0+t.y/this.a,o=0,1e-7>=Math.abs(i))n=t.x/this.a+this.long0,a=0;else{if(s=i*i+t.x/this.a*(t.x/this.a),o=phi4z(this.es,this.e0,this.e1,this.e2,this.e3,this.al,s,e,a),1!=o)return o;n=Proj4js.common.adjust_lon(Proj4js.common.asinz(t.x*e/this.a)/Math.sin(a)+this.long0)}return t.x=n,t.y=a,t}},Proj4js.Proj.equi={init:function(){this.x0||(this.x0=0),this.y0||(this.y0=0),this.lat0||(this.lat0=0),this.long0||(this.long0=0)},forward:function(t){var i=t.x,s=t.y,e=Proj4js.common.adjust_lon(i-this.long0),o=this.x0+this.a*e*Math.cos(this.lat0),n=this.y0+this.a*s;return this.t1=o,this.t2=Math.cos(this.lat0),t.x=o,t.y=n,t},inverse:function(t){t.x-=this.x0,t.y-=this.y0;var i=t.y/this.a;Math.abs(i)>Proj4js.common.HALF_PI&&Proj4js.reportError("equi:Inv:DataError");var s=Proj4js.common.adjust_lon(this.long0+t.x/(this.a*Math.cos(this.lat0)));t.x=s,t.y=i}},Proj4js.Proj.merc={init:function(){this.lat_ts&&(this.k0=this.sphere?Math.cos(this.lat_ts):Proj4js.common.msfnz(this.es,Math.sin(this.lat_ts),Math.cos(this.lat_ts)))},forward:function(t){var i=t.x,s=t.y;if(s*Proj4js.common.R2D>90&&-90>s*Proj4js.common.R2D&&i*Proj4js.common.R2D>180&&-180>i*Proj4js.common.R2D)return Proj4js.reportError("merc:forward: llInputOutOfRange: "+i+" : "+s),null;var e,o;if(Math.abs(Math.abs(s)-Proj4js.common.HALF_PI)<=Proj4js.common.EPSLN)return Proj4js.reportError("merc:forward: ll2mAtPoles"),null;if(this.sphere)e=this.x0+this.a*this.k0*Proj4js.common.adjust_lon(i-this.long0),o=this.y0+this.a*this.k0*Math.log(Math.tan(Proj4js.common.FORTPI+.5*s));else{var n=Math.sin(s),a=Proj4js.common.tsfnz(this.e,s,n);e=this.x0+this.a*this.k0*Proj4js.common.adjust_lon(i-this.long0),o=this.y0-this.a*this.k0*Math.log(a)}return t.x=e,t.y=o,t},inverse:function(t){var i,s,e=t.x-this.x0,o=t.y-this.y0;if(this.sphere)s=Proj4js.common.HALF_PI-2*Math.atan(Math.exp(-o/this.a*this.k0));else{var n=Math.exp(-o/(this.a*this.k0));if(s=Proj4js.common.phi2z(this.e,n),-9999==s)return Proj4js.reportError("merc:inverse: lat = -9999"),null}return i=Proj4js.common.adjust_lon(this.long0+e/(this.a*this.k0)),t.x=i,t.y=s,t}},Proj4js.Proj.utm={dependsOn:"tmerc",init:function(){return this.zone?(this.lat0=0,this.long0=(6*Math.abs(this.zone)-183)*Proj4js.common.D2R,this.x0=5e5,this.y0=this.utmSouth?1e7:0,this.k0=.9996,Proj4js.Proj.tmerc.init.apply(this),this.forward=Proj4js.Proj.tmerc.forward,this.inverse=Proj4js.Proj.tmerc.inverse,void 0):(Proj4js.reportError("utm:init: zone must be specified for UTM"),void 0)}},Proj4js.Proj.eqdc={init:function(){this.mode||(this.mode=0),this.temp=this.b/this.a,this.es=1-Math.pow(this.temp,2),this.e=Math.sqrt(this.es),this.e0=Proj4js.common.e0fn(this.es),this.e1=Proj4js.common.e1fn(this.es),this.e2=Proj4js.common.e2fn(this.es),this.e3=Proj4js.common.e3fn(this.es),this.sinphi=Math.sin(this.lat1),this.cosphi=Math.cos(this.lat1),this.ms1=Proj4js.common.msfnz(this.e,this.sinphi,this.cosphi),this.ml1=Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,this.lat1),0!=this.mode?(Math.abs(this.lat1+this.lat2)=Proj4js.common.EPSLN?(this.ms1-this.ms2)/(this.ml2-this.ml1):this.sinphi):this.ns=this.sinphi,this.g=this.ml1+this.ms1/this.ns,this.ml0=Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,this.lat0),this.rh=this.a*(this.g-this.ml0) +},forward:function(t){var i=t.x,s=t.y,e=Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,s),o=this.a*(this.g-e),n=this.ns*Proj4js.common.adjust_lon(i-this.long0),a=this.x0+o*Math.sin(n),r=this.y0+this.rh-o*Math.cos(n);return t.x=a,t.y=r,t},inverse:function(t){t.x-=this.x0,t.y=this.rh-t.y+this.y0;var i,s;this.ns>=0?(s=Math.sqrt(t.x*t.x+t.y*t.y),i=1):(s=-Math.sqrt(t.x*t.x+t.y*t.y),i=-1);var e=0;0!=s&&(e=Math.atan2(i*t.x,i*t.y));var o=this.g-s/this.a,n=this.phi3z(o,this.e0,this.e1,this.e2,this.e3),a=Proj4js.common.adjust_lon(this.long0+e/this.ns);return t.x=a,t.y=n,t},phi3z:function(t,i,s,e,o){var n,a;n=t;for(var r=0;15>r;r++)if(a=(t+s*Math.sin(2*n)-e*Math.sin(4*n)+o*Math.sin(6*n))/i-n,n+=a,1e-10>=Math.abs(a))return n;return Proj4js.reportError("PHI3Z-CONV:Latitude failed to converge after 15 iterations"),null}},Proj4js.Proj.tmerc={init:function(){this.e0=Proj4js.common.e0fn(this.es),this.e1=Proj4js.common.e1fn(this.es),this.e2=Proj4js.common.e2fn(this.es),this.e3=Proj4js.common.e3fn(this.es),this.ml0=this.a*Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,this.lat0)},forward:function(t){var i,s,e,o=t.x,n=t.y,a=Proj4js.common.adjust_lon(o-this.long0),r=Math.sin(n),h=Math.cos(n);if(this.sphere){var l=h*Math.sin(a);if(1e-10>Math.abs(Math.abs(l)-1))return Proj4js.reportError("tmerc:forward: Point projects into infinity"),93;s=.5*this.a*this.k0*Math.log((1+l)/(1-l)),i=Math.acos(h*Math.cos(a)/Math.sqrt(1-l*l)),0>n&&(i=-i),e=this.a*this.k0*(i-this.lat0)}else{var c=h*a,m=Math.pow(c,2),u=this.ep2*Math.pow(h,2),d=Math.tan(n),p=Math.pow(d,2);i=1-this.es*Math.pow(r,2);var _=this.a/Math.sqrt(i),f=this.a*Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,n);s=this.k0*_*c*(1+m/6*(1-p+u+m/20*(5-18*p+Math.pow(p,2)+72*u-58*this.ep2)))+this.x0,e=this.k0*(f-this.ml0+_*d*m*(.5+m/24*(5-p+9*u+4*Math.pow(u,2)+m/30*(61-58*p+Math.pow(p,2)+600*u-330*this.ep2))))+this.y0}return t.x=s,t.y=e,t},inverse:function(t){var i,s,e,o,n,a,r=6;if(this.sphere){var h=Math.exp(t.x/(this.a*this.k0)),l=.5*(h-1/h),c=this.lat0+t.y/(this.a*this.k0),m=Math.cos(c);i=Math.sqrt((1-m*m)/(1+l*l)),n=Proj4js.common.asinz(i),0>c&&(n=-n),a=0==l&&0==m?this.long0:Proj4js.common.adjust_lon(Math.atan2(l,m)+this.long0)}else{var u=t.x-this.x0,d=t.y-this.y0;for(i=(this.ml0+d/this.k0)/this.a,s=i,o=0;!0&&(e=(i+this.e1*Math.sin(2*s)-this.e2*Math.sin(4*s)+this.e3*Math.sin(6*s))/this.e0-s,s+=e,!(Math.abs(e)<=Proj4js.common.EPSLN));o++)if(o>=r)return Proj4js.reportError("tmerc:inverse: Latitude failed to converge"),95;if(Math.abs(s)0||Math.abs(a)<=Proj4js.common.EPSLN)var l=this.a*n*s*Math.sin(e),c=this.y0+this.a*n*(this.cos_p14*i-this.sin_p14*s*o);else Proj4js.reportError("orthoFwdPointError");return t.x=l,t.y=c,t},inverse:function(t){var i,s,e,o,n,a,r;return t.x-=this.x0,t.y-=this.y0,i=Math.sqrt(t.x*t.x+t.y*t.y),i>this.a+1e-7&&Proj4js.reportError("orthoInvDataError"),s=Proj4js.common.asinz(i/this.a),e=Math.sin(s),o=Math.cos(s),a=this.long0,Math.abs(i)<=Proj4js.common.EPSLN&&(r=this.lat0),r=Proj4js.common.asinz(o*this.sin_p14+t.y*e*this.cos_p14/i),n=Math.abs(this.lat0)-Proj4js.common.HALF_PI,Math.abs(n)<=Proj4js.common.EPSLN&&(a=this.lat0>=0?Proj4js.common.adjust_lon(this.long0+Math.atan2(t.x,-t.y)):Proj4js.common.adjust_lon(this.long0-Math.atan2(-t.x,t.y))),n=o-this.sin_p14*Math.sin(r),t.x=a,t.y=r,t}},Proj4js.Proj.krovak={init:function(){this.a=6377397.155,this.es=.006674372230614,this.e=Math.sqrt(this.es),this.lat0||(this.lat0=.863937979737193),this.long0||(this.long0=.4334234309119251),this.k0||(this.k0=.9999),this.s45=.785398163397448,this.s90=2*this.s45,this.fi0=this.lat0,this.e2=this.es,this.e=Math.sqrt(this.e2),this.alfa=Math.sqrt(1+this.e2*Math.pow(Math.cos(this.fi0),4)/(1-this.e2)),this.uq=1.04216856380474,this.u0=Math.asin(Math.sin(this.fi0)/this.alfa),this.g=Math.pow((1+this.e*Math.sin(this.fi0))/(1-this.e*Math.sin(this.fi0)),this.alfa*this.e/2),this.k=Math.tan(this.u0/2+this.s45)/Math.pow(Math.tan(this.fi0/2+this.s45),this.alfa)*this.g,this.k1=this.k0,this.n0=this.a*Math.sqrt(1-this.e2)/(1-this.e2*Math.pow(Math.sin(this.fi0),2)),this.s0=1.37008346281555,this.n=Math.sin(this.s0),this.ro0=this.k1*this.n0/Math.tan(this.s0),this.ad=this.s90-this.uq},forward:function(t){var i,s,e,o,n,a,r,h=t.x,l=t.y,c=Proj4js.common.adjust_lon(h-this.long0);return i=Math.pow((1+this.e*Math.sin(l))/(1-this.e*Math.sin(l)),this.alfa*this.e/2),s=2*(Math.atan(this.k*Math.pow(Math.tan(l/2+this.s45),this.alfa)/i)-this.s45),e=-c*this.alfa,o=Math.asin(Math.cos(this.ad)*Math.sin(s)+Math.sin(this.ad)*Math.cos(s)*Math.cos(e)),n=Math.asin(Math.cos(s)*Math.sin(e)/Math.cos(o)),a=this.n*n,r=this.ro0*Math.pow(Math.tan(this.s0/2+this.s45),this.n)/Math.pow(Math.tan(o/2+this.s45),this.n),t.y=r*Math.cos(a)/1,t.x=r*Math.sin(a)/1,this.czech&&(t.y*=-1,t.x*=-1),t},inverse:function(t){var i,s,e,o,n,a,r,h,l=t.x;t.x=t.y,t.y=l,this.czech&&(t.y*=-1,t.x*=-1),a=Math.sqrt(t.x*t.x+t.y*t.y),n=Math.atan2(t.y,t.x),o=n/Math.sin(this.s0),e=2*(Math.atan(Math.pow(this.ro0/a,1/this.n)*Math.tan(this.s0/2+this.s45))-this.s45),i=Math.asin(Math.cos(this.ad)*Math.sin(e)-Math.sin(this.ad)*Math.cos(e)*Math.cos(o)),s=Math.asin(Math.cos(e)*Math.sin(o)/Math.cos(i)),t.x=this.long0-s/this.alfa,r=i,h=0;var c=0;do t.y=2*(Math.atan(Math.pow(this.k,-1/this.alfa)*Math.pow(Math.tan(i/2+this.s45),1/this.alfa)*Math.pow((1+this.e*Math.sin(r))/(1-this.e*Math.sin(r)),this.e/2))-this.s45),1e-10>Math.abs(r-t.y)&&(h=1),r=t.y,c+=1;while(0==h&&15>c);return c>=15?(Proj4js.reportError("PHI3Z-CONV:Latitude failed to converge after 15 iterations"),null):t}},Proj4js.Proj.somerc={init:function(){var t=this.lat0;this.lambda0=this.long0;var i=Math.sin(t),s=this.a,e=this.rf,o=1/e,n=2*o-Math.pow(o,2),a=this.e=Math.sqrt(n);this.R=this.k0*s*Math.sqrt(1-n)/(1-n*Math.pow(i,2)),this.alpha=Math.sqrt(1+n/(1-n)*Math.pow(Math.cos(t),4)),this.b0=Math.asin(i/this.alpha),this.K=Math.log(Math.tan(Math.PI/4+this.b0/2))-this.alpha*Math.log(Math.tan(Math.PI/4+t/2))+this.alpha*a/2*Math.log((1+a*i)/(1-a*i))},forward:function(t){var i=Math.log(Math.tan(Math.PI/4-t.y/2)),s=this.e/2*Math.log((1+this.e*Math.sin(t.y))/(1-this.e*Math.sin(t.y))),e=-this.alpha*(i+s)+this.K,o=2*(Math.atan(Math.exp(e))-Math.PI/4),n=this.alpha*(t.x-this.lambda0),a=Math.atan(Math.sin(n)/(Math.sin(this.b0)*Math.tan(o)+Math.cos(this.b0)*Math.cos(n))),r=Math.asin(Math.cos(this.b0)*Math.sin(o)-Math.sin(this.b0)*Math.cos(o)*Math.cos(n));return t.y=this.R/2*Math.log((1+Math.sin(r))/(1-Math.sin(r)))+this.y0,t.x=this.R*a+this.x0,t},inverse:function(t){for(var i=t.x-this.x0,s=t.y-this.y0,e=i/this.R,o=2*(Math.atan(Math.exp(s/this.R))-Math.PI/4),n=Math.asin(Math.cos(this.b0)*Math.sin(o)+Math.sin(this.b0)*Math.cos(o)*Math.cos(e)),a=Math.atan(Math.sin(e)/(Math.cos(this.b0)*Math.cos(e)-Math.sin(this.b0)*Math.tan(o))),r=this.lambda0+a/this.alpha,h=0,l=n,c=-1e3,m=0;Math.abs(l-c)>1e-7;){if(++m>20)return Proj4js.reportError("omercFwdInfinity"),void 0;h=1/this.alpha*(Math.log(Math.tan(Math.PI/4+n/2))-this.K)+this.e*Math.log(Math.tan(Math.PI/4+Math.asin(this.e*Math.sin(l))/2)),c=l,l=2*Math.atan(Math.exp(h))-Math.PI/2}return t.x=r,t.y=l,t}},Proj4js.Proj.stere={ssfn_:function(t,i,s){return i*=s,Math.tan(.5*(Proj4js.common.HALF_PI+t))*Math.pow((1-i)/(1+i),.5*s)},TOL:1e-8,NITER:8,CONV:1e-10,S_POLE:0,N_POLE:1,OBLIQ:2,EQUIT:3,init:function(){this.phits=this.lat_ts?this.lat_ts:Proj4js.common.HALF_PI;var t=Math.abs(this.lat0);if(this.mode=Math.abs(t)-Proj4js.common.HALF_PIthis.lat0?this.S_POLE:this.N_POLE:t>Proj4js.common.EPSLN?this.OBLIQ:this.EQUIT,this.phits=Math.abs(this.phits),this.es){var i;switch(this.mode){case this.N_POLE:case this.S_POLE:Math.abs(this.phits-Proj4js.common.HALF_PI)=Proj4js.common.EPSLN?Math.cos(this.phits)/Math.tan(Proj4js.common.FORTPI-.5*this.phits):2*this.k0}},forward:function(t){var i=t.x;i=Proj4js.common.adjust_lon(i-this.long0);var s,e,o=t.y;if(this.sphere){var n,a,r,h;switch(n=Math.sin(o),a=Math.cos(o),r=Math.cos(i),h=Math.sin(i),this.mode){case this.EQUIT:e=1+a*r,Proj4js.common.EPSLN>=e&&Proj4js.reportError("stere:forward:Equit"),e=this.akm1/e,s=e*a*h,e*=n;break;case this.OBLIQ:e=1+this.sinph0*n+this.cosph0*a*r,Proj4js.common.EPSLN>=e&&Proj4js.reportError("stere:forward:Obliq"),e=this.akm1/e,s=e*a*h,e*=this.cosph0*n-this.sinph0*a*r;break;case this.N_POLE:r=-r,o=-o;case this.S_POLE:Math.abs(o-Proj4js.common.HALF_PI)=l;l++)r*=n,h+=this.A[l]*r;for(var c,m,u=h,d=a,p=1,_=0,f=0,P=0,l=1;6>=l;l++)c=p*u-_*d,m=_*u+p*d,p=c,_=m,f=f+this.B_re[l]*p-this.B_im[l]*_,P=P+this.B_im[l]*p+this.B_re[l]*_;return t.x=P*this.a+this.x0,t.y=f*this.a+this.y0,t},inverse:function(t){for(var i,s,e=t.x,o=t.y,n=e-this.x0,a=o-this.y0,r=a/this.a,h=n/this.a,l=1,c=0,m=0,u=0,d=1;6>=d;d++)i=l*r-c*h,s=c*r+l*h,l=i,c=s,m=m+this.C_re[d]*l-this.C_im[d]*c,u=u+this.C_im[d]*l+this.C_re[d]*c;for(var p=0;this.iterations>p;p++){for(var _,f,P=m,y=u,g=r,L=h,d=2;6>=d;d++)_=P*m-y*u,f=y*m+P*u,P=_,y=f,g+=(d-1)*(this.B_re[d]*P-this.B_im[d]*y),L+=(d-1)*(this.B_im[d]*P+this.B_re[d]*y);P=1,y=0;for(var v=this.B_re[1],j=this.B_im[1],d=2;6>=d;d++)_=P*m-y*u,f=y*m+P*u,P=_,y=f,v+=d*(this.B_re[d]*P-this.B_im[d]*y),j+=d*(this.B_im[d]*P+this.B_re[d]*y);var M=v*v+j*j;m=(g*v+L*j)/M,u=(L*v-g*j)/M}for(var S=m,b=u,x=1,E=0,d=1;9>=d;d++)x*=S,E+=this.D[d]*x;var C=this.lat0+1e5*E*Proj4js.common.SEC_TO_RAD,w=this.long0+b;return t.x=w,t.y=C,t}},Proj4js.Proj.mill={init:function(){},forward:function(t){var i=t.x,s=t.y,e=Proj4js.common.adjust_lon(i-this.long0),o=this.x0+this.a*e,n=this.y0+1.25*this.a*Math.log(Math.tan(Proj4js.common.PI/4+s/2.5));return t.x=o,t.y=n,t},inverse:function(t){t.x-=this.x0,t.y-=this.y0;var i=Proj4js.common.adjust_lon(this.long0+t.x/this.a),s=2.5*(Math.atan(Math.exp(.8*t.y/this.a))-Proj4js.common.PI/4);return t.x=i,t.y=s,t}},Proj4js.Proj.gnom={init:function(){this.sin_p14=Math.sin(this.lat0),this.cos_p14=Math.cos(this.lat0),this.infinity_dist=1e3*this.a,this.rc=1},forward:function(t){var i,s,e,o,n,a,r,h,l=t.x,c=t.y;return e=Proj4js.common.adjust_lon(l-this.long0),i=Math.sin(c),s=Math.cos(c),o=Math.cos(e),a=this.sin_p14*i+this.cos_p14*s*o,n=1,a>0||Math.abs(a)<=Proj4js.common.EPSLN?(r=this.x0+this.a*n*s*Math.sin(e)/a,h=this.y0+this.a*n*(this.cos_p14*i-this.sin_p14*s*o)/a):(Proj4js.reportError("orthoFwdPointError"),r=this.x0+this.infinity_dist*s*Math.sin(e),h=this.y0+this.infinity_dist*(this.cos_p14*i-this.sin_p14*s*o)),t.x=r,t.y=h,t},inverse:function(t){var i,s,e,o,n,a;return t.x=(t.x-this.x0)/this.a,t.y=(t.y-this.y0)/this.a,t.x/=this.k0,t.y/=this.k0,(i=Math.sqrt(t.x*t.x+t.y*t.y))?(o=Math.atan2(i,this.rc),s=Math.sin(o),e=Math.cos(o),a=Proj4js.common.asinz(e*this.sin_p14+t.y*s*this.cos_p14/i),n=Math.atan2(t.x*s,i*this.cos_p14*e-t.y*this.sin_p14*s),n=Proj4js.common.adjust_lon(this.long0+n)):(a=this.phic0,n=0),t.x=n,t.y=a,t}},Proj4js.Proj.sinu={init:function(){this.sphere?(this.n=1,this.m=0,this.es=0,this.C_y=Math.sqrt((this.m+1)/this.n),this.C_x=this.C_y/(this.m+1)):this.en=Proj4js.common.pj_enfn(this.es)},forward:function(t){var i,s,e=t.x,o=t.y;if(e=Proj4js.common.adjust_lon(e-this.long0),this.sphere){if(this.m)for(var n=this.n*Math.sin(o),a=Proj4js.common.MAX_ITER;a;--a){var r=(this.m*o+Math.sin(o)-n)/(this.m+Math.cos(o));if(o-=r,Math.abs(r)o?(o=Math.sin(i),s=this.long0+t.x*Math.sqrt(1-this.es*o*o)/(this.a*Math.cos(i)),e=Proj4js.common.adjust_lon(s)):o-Proj4js.common.EPSLN=0?this.y0+Proj4js.common.PI*this.R*Math.tan(.5*a):this.y0+Proj4js.common.PI*this.R*-Math.tan(.5*a));var r=.5*Math.abs(Proj4js.common.PI/n-n/Proj4js.common.PI),h=r*r,l=Math.sin(a),c=Math.cos(a),m=c/(l+c-1),u=m*m,d=m*(2/l-1),p=d*d,_=Proj4js.common.PI*this.R*(r*(m-p)+Math.sqrt(h*(m-p)*(m-p)-(p+h)*(u-p)))/(p+h);return 0>n&&(_=-_),i=this.x0+_,_=Math.abs(_/(Proj4js.common.PI*this.R)),s=o>=0?this.y0+Proj4js.common.PI*this.R*Math.sqrt(1-_*_-2*r*_):this.y0-Proj4js.common.PI*this.R*Math.sqrt(1-_*_-2*r*_),t.x=i,t.y=s,t},inverse:function(t){var i,s,e,o,n,a,r,h,l,c,m,u,d;return t.x-=this.x0,t.y-=this.y0,m=Proj4js.common.PI*this.R,e=t.x/m,o=t.y/m,n=e*e+o*o,a=-Math.abs(o)*(1+n),r=a-2*o*o+e*e,h=-2*a+1+2*o*o+n*n,d=o*o/h+(2*r*r*r/h/h/h-9*a*r/h/h)/27,l=(a-r*r/3/h)/h,c=2*Math.sqrt(-l/3),m=3*d/l/c,Math.abs(m)>1&&(m=m>=0?1:-1),u=Math.acos(m)/3,s=t.y>=0?(-c*Math.cos(u+Proj4js.common.PI/3)-r/3/h)*Proj4js.common.PI:-(-c*Math.cos(u+Proj4js.common.PI/3)-r/3/h)*Proj4js.common.PI,Math.abs(e)0&&(e=2*Math.atan(o*Proj4js.common.srat(this.e*Math.sin(t.y),-.5*this.e))-Proj4js.common.HALF_PI,!(i>Math.abs(e-t.y)));--n)t.y=e;return n?(t.x=s,t.y=e,t):(Proj4js.reportError("gauss:inverse:convergence failed"),null)}},Proj4js.Proj.omerc={init:function(){this.mode||(this.mode=0),this.lon1||(this.lon1=0,this.mode=1),this.lon2||(this.lon2=0),this.lat2||(this.lat2=0);var t=this.b/this.a,i=1-Math.pow(t,2);Math.sqrt(i),this.sin_p20=Math.sin(this.lat0),this.cos_p20=Math.cos(this.lat0),this.con=1-this.es*this.sin_p20*this.sin_p20,this.com=Math.sqrt(1-i),this.bl=Math.sqrt(1+this.es*Math.pow(this.cos_p20,4)/(1-i)),this.al=this.a*this.bl*this.k0*this.com/this.con,Math.abs(this.lat0)0?this.lat0>=0?this.d+Math.sqrt(this.d*this.d-1):this.d-Math.sqrt(this.d*this.d-1):this.d,this.el=this.f*Math.pow(this.ts,this.bl)),0!=this.mode?(this.g=.5*(this.f-1/this.f),this.gama=Proj4js.common.asinz(Math.sin(this.alpha)/this.d),this.longc=this.longc-Proj4js.common.asinz(this.g*Math.tan(this.gama))/this.bl,this.con=Math.abs(this.lat0),this.con>Proj4js.common.EPSLN&&Math.abs(this.con-Proj4js.common.HALF_PI)>Proj4js.common.EPSLN?(this.singam=Math.sin(this.gama),this.cosgam=Math.cos(this.gama),this.sinaz=Math.sin(this.alpha),this.cosaz=Math.cos(this.alpha),this.u=this.lat0>=0?this.al/this.bl*Math.atan(Math.sqrt(this.d*this.d-1)/this.cosaz):-(this.al/this.bl)*Math.atan(Math.sqrt(this.d*this.d-1)/this.cosaz)):Proj4js.reportError("omerc:Init:DataError")):(this.sinphi=Math.sin(this.at1),this.ts1=Proj4js.common.tsfnz(this.e,this.lat1,this.sinphi),this.sinphi=Math.sin(this.lat2),this.ts2=Proj4js.common.tsfnz(this.e,this.lat2,this.sinphi),this.h=Math.pow(this.ts1,this.bl),this.l=Math.pow(this.ts2,this.bl),this.f=this.el/this.h,this.g=.5*(this.f-1/this.f),this.j=(this.el*this.el-this.l*this.h)/(this.el*this.el+this.l*this.h),this.p=(this.l-this.h)/(this.l+this.h),this.dlon=this.lon1-this.lon2,this.dlon<-Proj4js.common.PI&&(this.lon2=this.lon2-2*Proj4js.common.PI),this.dlon>Proj4js.common.PI&&(this.lon2=this.lon2+2*Proj4js.common.PI),this.dlon=this.lon1-this.lon2,this.longc=.5*(this.lon1+this.lon2)-Math.atan(this.j*Math.tan(.5*this.bl*this.dlon)/this.p)/this.bl,this.dlon=Proj4js.common.adjust_lon(this.lon1-this.longc),this.gama=Math.atan(Math.sin(this.bl*this.dlon)/this.g),this.alpha=Proj4js.common.asinz(this.d*Math.sin(this.gama)),Math.abs(this.lat1-this.lat2)<=Proj4js.common.EPSLN?Proj4js.reportError("omercInitDataError"):this.con=Math.abs(this.lat1),this.con<=Proj4js.common.EPSLN||Math.abs(this.con-Proj4js.common.HALF_PI)<=Proj4js.common.EPSLN?Proj4js.reportError("omercInitDataError"):Math.abs(Math.abs(this.lat0)-Proj4js.common.HALF_PI)<=Proj4js.common.EPSLN&&Proj4js.reportError("omercInitDataError"),this.singam=Math.sin(this.gam),this.cosgam=Math.cos(this.gam),this.sinaz=Math.sin(this.alpha),this.cosaz=Math.cos(this.alpha),this.u=this.lat0>=0?this.al/this.bl*Math.atan(Math.sqrt(this.d*this.d-1)/this.cosaz):-(this.al/this.bl)*Math.atan(Math.sqrt(this.d*this.d-1)/this.cosaz))},forward:function(t){var i,s,e,o,n,a,r,h,l,c,m,u=t.x,d=t.y;i=Math.sin(d),c=Proj4js.common.adjust_lon(u-this.longc),a=Math.sin(this.bl*c),Math.abs(Math.abs(d)-Proj4js.common.HALF_PI)>Proj4js.common.EPSLN?(m=Proj4js.common.tsfnz(this.e,d,i),o=this.el/Math.pow(m,this.bl),l=.5*(o-1/o),s=.5*(o+1/o),r=(l*this.singam-a*this.cosgam)/s,e=Math.cos(this.bl*c),1e-7>Math.abs(e)?n=this.al*this.bl*c:(n=this.al*Math.atan((l*this.cosgam+a*this.singam)/e)/this.bl,0>e&&(n+=Proj4js.common.PI*this.al/this.bl))):(r=d>=0?this.singam:-this.singam,n=this.al*d/this.bl),Math.abs(Math.abs(r)-1)<=Proj4js.common.EPSLN&&Proj4js.reportError("omercFwdInfinity"),h=.5*this.al*Math.log((1-r)/(1+r))/this.bl,n-=this.u;var p=this.x0+h*this.cosaz+n*this.sinaz,_=this.y0+n*this.cosaz-h*this.sinaz;return t.x=p,t.y=_,t},inverse:function(t){var i,s,e,o,n,a,r,h,l,c,m,u,d;return t.x-=this.x0,t.y-=this.y0,d=0,o=t.x*this.cosaz-t.y*this.sinaz,n=t.y*this.cosaz+t.x*this.sinaz,n+=this.u,a=Math.exp(-this.bl*o/this.al),r=.5*(a-1/a),s=.5*(a+1/a),l=Math.sin(this.bl*n/this.al),c=(l*this.cosgam+r*this.singam)/s,Math.abs(Math.abs(c)-1)<=Proj4js.common.EPSLN?(m=this.longc,u=c>=0?Proj4js.common.HALF_PI:-Proj4js.common.HALF_PI):(e=1/this.bl,h=Math.pow(this.el/Math.sqrt((1+c)/(1-c)),e),u=Proj4js.common.phi2z(this.e,h),i=this.longc-Math.atan2(r*this.cosgam-l*this.singam,e)/this.bl,m=Proj4js.common.adjust_lon(i)),t.x=m,t.y=u,t}},Proj4js.Proj.lcc={init:function(){if(this.lat2||(this.lat2=this.lat0),this.k0||(this.k0=1),Math.abs(this.lat1+this.lat2)Proj4js.common.EPSLN?Math.log(e/r)/Math.log(o/h):i,this.f0=e/(this.ns*Math.pow(o,this.ns)),this.rh=this.a*this.f0*Math.pow(l,this.ns),this.title||(this.title="Lambert Conformal Conic")},forward:function(t){var i=t.x,s=t.y;if(!(90>=s&&s>=-90&&180>=i&&i>=-180))return Proj4js.reportError("lcc:forward: llInputOutOfRange: "+i+" : "+s),null;var e,o,n=Math.abs(Math.abs(s)-Proj4js.common.HALF_PI);if(n>Proj4js.common.EPSLN)e=Proj4js.common.tsfnz(this.e,s,Math.sin(s)),o=this.a*this.f0*Math.pow(e,this.ns);else{if(n=s*this.ns,0>=n)return Proj4js.reportError("lcc:forward: No Projection"),null;o=0}var a=this.ns*Proj4js.common.adjust_lon(i-this.long0);return t.x=this.k0*o*Math.sin(a)+this.x0,t.y=this.k0*(this.rh-o*Math.cos(a))+this.y0,t},inverse:function(t){var i,s,e,o,n,a=(t.x-this.x0)/this.k0,r=this.rh-(t.y-this.y0)/this.k0;this.ns>0?(i=Math.sqrt(a*a+r*r),s=1):(i=-Math.sqrt(a*a+r*r),s=-1);var h=0;if(0!=i&&(h=Math.atan2(s*a,s*r)),0!=i||this.ns>0){if(s=1/this.ns,e=Math.pow(i/(this.a*this.f0),s),o=Proj4js.common.phi2z(this.e,e),-9999==o)return null}else o=-Proj4js.common.HALF_PI;return n=Proj4js.common.adjust_lon(h/this.ns+this.long0),t.x=n,t.y=o,t}},Proj4js.Proj.laea={S_POLE:1,N_POLE:2,EQUIT:3,OBLIQ:4,init:function(){var t=Math.abs(this.lat0);if(this.mode=Math.abs(t-Proj4js.common.HALF_PI)this.lat0?this.S_POLE:this.N_POLE:Math.abs(t)0){var i;switch(this.qp=Proj4js.common.qsfnz(this.e,1),this.mmf=.5/(1-this.es),this.apa=this.authset(this.es),this.mode){case this.N_POLE:case this.S_POLE:this.dd=1;break;case this.EQUIT:this.rq=Math.sqrt(.5*this.qp),this.dd=1/this.rq,this.xmf=1,this.ymf=.5*this.qp;break;case this.OBLIQ:this.rq=Math.sqrt(.5*this.qp),i=Math.sin(this.lat0),this.sinb1=Proj4js.common.qsfnz(this.e,i)/this.qp,this.cosb1=Math.sqrt(1-this.sinb1*this.sinb1),this.dd=Math.cos(this.lat0)/(Math.sqrt(1-this.es*i*i)*this.rq*this.cosb1),this.ymf=(this.xmf=this.rq)/this.dd,this.xmf*=this.dd}}else this.mode==this.OBLIQ&&(this.sinph0=Math.sin(this.lat0),this.cosph0=Math.cos(this.lat0))},forward:function(t){var i,s,e=t.x,o=t.y;if(e=Proj4js.common.adjust_lon(e-this.long0),this.sphere){var n,a,r;switch(r=Math.sin(o),a=Math.cos(o),n=Math.cos(e),this.mode){case this.OBLIQ:case this.EQUIT:if(s=this.mode==this.EQUIT?1+a*n:1+this.sinph0*r+this.cosph0*a*n,Proj4js.common.EPSLN>=s)return Proj4js.reportError("laea:fwd:y less than eps"),null;s=Math.sqrt(2/s),i=s*a*Math.sin(e),s*=this.mode==this.EQUIT?r:this.cosph0*r-this.sinph0*a*n;break;case this.N_POLE:n=-n;case this.S_POLE:if(Math.abs(o+this.phi0)=0?(i=(u=Math.sqrt(l))*h,s=n*(this.mode==this.S_POLE?u:-u)):i=s=0}}return t.x=this.a*i+this.x0,t.y=this.a*s+this.y0,t},inverse:function(t){t.x-=this.x0,t.y-=this.y0;var i,s,e=t.x/this.a,o=t.y/this.a;if(this.sphere){var n,a=0,r=0;if(n=Math.sqrt(e*e+o*o),s=.5*n,s>1)return Proj4js.reportError("laea:Inv:DataError"),null; +switch(s=2*Math.asin(s),(this.mode==this.OBLIQ||this.mode==this.EQUIT)&&(r=Math.sin(s),a=Math.cos(s)),this.mode){case this.EQUIT:s=Math.abs(n)<=Proj4js.common.EPSLN?0:Math.asin(o*r/n),e*=r,o=a*n;break;case this.OBLIQ:s=Math.abs(n)<=Proj4js.common.EPSLN?this.phi0:Math.asin(a*this.sinph0+o*r*this.cosph0/n),e*=r*this.cosph0,o=(a-Math.sin(s)*this.sinph0)*n;break;case this.N_POLE:o=-o,s=Proj4js.common.HALF_PI-s;break;case this.S_POLE:s-=Proj4js.common.HALF_PI}i=0!=o||this.mode!=this.EQUIT&&this.mode!=this.OBLIQ?Math.atan2(e,o):0}else{var h,l,c,m,u=0;switch(this.mode){case this.EQUIT:case this.OBLIQ:if(e/=this.dd,o*=this.dd,m=Math.sqrt(e*e+o*o),Proj4js.common.EPSLN>m)return t.x=0,t.y=this.phi0,t;l=2*Math.asin(.5*m/this.rq),h=Math.cos(l),e*=l=Math.sin(l),this.mode==this.OBLIQ?(u=h*this.sinb1+o*l*this.cosb1/m,c=this.qp*u,o=m*this.cosb1*h-o*this.sinb1*l):(u=o*l/m,c=this.qp*u,o=m*h);break;case this.N_POLE:o=-o;case this.S_POLE:if(c=e*e+o*o,!c)return t.x=0,t.y=this.phi0,t;u=1-c/this.qp,this.mode==this.S_POLE&&(u=-u)}i=Math.atan2(e,o),s=this.authlat(Math.asin(u),this.apa)}return t.x=Proj4js.common.adjust_lon(this.long0+i),t.y=s,t},P00:.3333333333333333,P01:.17222222222222222,P02:.10257936507936508,P10:.06388888888888888,P11:.0664021164021164,P20:.016415012942191543,authset:function(t){var i,s=[];return s[0]=t*this.P00,i=t*t,s[0]+=i*this.P01,s[1]=i*this.P10,i*=t,s[0]+=i*this.P02,s[1]+=i*this.P11,s[2]=i*this.P20,s},authlat:function(t,i){var s=t+t;return t+i[0]*Math.sin(s)+i[1]*Math.sin(s+s)+i[2]*Math.sin(s+s+s)}},Proj4js.Proj.aeqd={init:function(){this.sin_p12=Math.sin(this.lat0),this.cos_p12=Math.cos(this.lat0)},forward:function(t){var i=t.x;t.y;var s,e=Math.sin(t.y),o=Math.cos(t.y),n=Proj4js.common.adjust_lon(i-this.long0),a=Math.cos(n),r=this.sin_p12*e+this.cos_p12*o*a;if(Math.abs(Math.abs(r)-1)r)return Proj4js.reportError("aeqd:Fwd:PointError"),void 0}else{var h=Math.acos(r);s=h/Math.sin(h)}return t.x=this.x0+this.a*s*o*Math.sin(n),t.y=this.y0+this.a*s*(this.cos_p12*e-this.sin_p12*o*a),t},inverse:function(t){t.x-=this.x0,t.y-=this.y0;var i=Math.sqrt(t.x*t.x+t.y*t.y);if(i>2*Proj4js.common.HALF_PI*this.a)return Proj4js.reportError("aeqdInvDataError"),void 0;var s,e=i/this.a,o=Math.sin(e),n=Math.cos(e),a=this.long0;if(Math.abs(i)<=Proj4js.common.EPSLN)s=this.lat0;else{s=Proj4js.common.asinz(n*this.sin_p12+t.y*o*this.cos_p12/i);var r=Math.abs(this.lat0)-Proj4js.common.HALF_PI;Math.abs(r)<=Proj4js.common.EPSLN?a=this.lat0>=0?Proj4js.common.adjust_lon(this.long0+Math.atan2(t.x,-t.y)):Proj4js.common.adjust_lon(this.long0-Math.atan2(-t.x,t.y)):(r=n-this.sin_p12*Math.sin(s),Math.abs(r)=50&&Proj4js.reportError("moll:Fwd:IterationError")}o/=2,Proj4js.common.PI/2-Math.abs(s).999999999999&&(s=.999999999999);var i=Math.asin(s),e=Proj4js.common.adjust_lon(this.long0+t.x/(.900316316158*this.a*Math.cos(i)));-Proj4js.common.PI>e&&(e=-Proj4js.common.PI),e>Proj4js.common.PI&&(e=Proj4js.common.PI),s=(2*i+Math.sin(2*i))/Proj4js.common.PI,Math.abs(s)>1&&(s=1);var o=Math.asin(s);return t.x=e,t.y=o,t}},function(t,i,s){var e,o;typeof exports!=s+""?e=exports:(o=t.L,e={},e.noConflict=function(){return t.L=o,this},t.L=e),e.version="0.5.1",e.Util={extend:function(t){var i,s,e,o,n=Array.prototype.slice.call(arguments,1);for(s=0,e=n.length;e>s;s++){o=n[s]||{};for(i in o)o.hasOwnProperty(i)&&(t[i]=o[i])}return t},bind:function(t,i){var s=arguments.length>2?Array.prototype.slice.call(arguments,2):null;return function(){return t.apply(i,s||arguments)}},stamp:function(){var t=0,i="_leaflet_id";return function(s){return s[i]=s[i]||++t,s[i]}}(),limitExecByInterval:function(t,i,e){var o,n;return function a(){var r=arguments;return o?(n=!0,s):(o=!0,setTimeout(function(){o=!1,n&&(a.apply(e,r),n=!1)},i),t.apply(e,r),s)}},falseFn:function(){return!1},formatNum:function(t,i){var s=Math.pow(10,i||5);return Math.round(t*s)/s},splitWords:function(t){return t.replace(/^\s+|\s+$/g,"").split(/\s+/)},setOptions:function(t,i){return t.options=e.extend({},t.options,i),t.options},getParamString:function(t,i){var s=[];for(var e in t)t.hasOwnProperty(e)&&s.push(e+"="+t[e]);return(i&&-1!==i.indexOf("?")?"&":"?")+s.join("&")},template:function(t,i){return t.replace(/\{ *([\w_]+) *\}/g,function(t,s){var e=i[s];if(!i.hasOwnProperty(s))throw Error("No value provided for variable "+t);return e})},isArray:function(t){return"[object Array]"===Object.prototype.toString.call(t)},emptyImageUrl:"data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs="},function(){function i(i){var s,e,o=["webkit","moz","o","ms"];for(s=0;o.length>s&&!e;s++)e=t[o[s]+i];return e}function o(i){var s=+new Date,e=Math.max(0,16-(s-n));return n=s+e,t.setTimeout(i,e)}var n=0,a=t.requestAnimationFrame||i("RequestAnimationFrame")||o,r=t.cancelAnimationFrame||i("CancelAnimationFrame")||i("CancelRequestAnimationFrame")||function(i){t.clearTimeout(i)};e.Util.requestAnimFrame=function(i,n,r,h){return i=e.bind(i,n),r&&a===o?(i(),s):a.call(t,i,h)},e.Util.cancelAnimFrame=function(i){i&&r.call(t,i)}}(),e.extend=e.Util.extend,e.bind=e.Util.bind,e.stamp=e.Util.stamp,e.setOptions=e.Util.setOptions,e.Class=function(){},e.Class.extend=function(t){var i=function(){this.initialize&&this.initialize.apply(this,arguments),this._initHooks&&this.callInitHooks()},s=function(){};s.prototype=this.prototype;var o=new s;o.constructor=i,i.prototype=o;for(var n in this)this.hasOwnProperty(n)&&"prototype"!==n&&(i[n]=this[n]);t.statics&&(e.extend(i,t.statics),delete t.statics),t.includes&&(e.Util.extend.apply(null,[o].concat(t.includes)),delete t.includes),t.options&&o.options&&(t.options=e.extend({},o.options,t.options)),e.extend(o,t),o._initHooks=[];var a=this;return o.callInitHooks=function(){if(!this._initHooksCalled){a.prototype.callInitHooks&&a.prototype.callInitHooks.call(this),this._initHooksCalled=!0;for(var t=0,i=o._initHooks.length;i>t;t++)o._initHooks[t].call(this)}},i},e.Class.include=function(t){e.extend(this.prototype,t)},e.Class.mergeOptions=function(t){e.extend(this.prototype.options,t)},e.Class.addInitHook=function(t){var i=Array.prototype.slice.call(arguments,1),s="function"==typeof t?t:function(){this[t].apply(this,i)};this.prototype._initHooks=this.prototype._initHooks||[],this.prototype._initHooks.push(s)};var n="_leaflet_events";e.Mixin={},e.Mixin.Events={addEventListener:function(t,i,s){var o,a,r,h=this[n]=this[n]||{};if("object"==typeof t){for(o in t)t.hasOwnProperty(o)&&this.addEventListener(o,t[o],i);return this}for(t=e.Util.splitWords(t),a=0,r=t.length;r>a;a++)h[t[a]]=h[t[a]]||[],h[t[a]].push({action:i,context:s||this});return this},hasEventListeners:function(t){return n in this&&t in this[n]&&this[n][t].length>0},removeEventListener:function(t,i,s){var o,a,r,h,l,c=this[n];if("object"==typeof t){for(o in t)t.hasOwnProperty(o)&&this.removeEventListener(o,t[o],i);return this}for(t=e.Util.splitWords(t),a=0,r=t.length;r>a;a++)if(this.hasEventListeners(t[a]))for(h=c[t[a]],l=h.length-1;l>=0;l--)i&&h[l].action!==i||s&&h[l].context!==s||h.splice(l,1);return this},fireEvent:function(t,i){if(!this.hasEventListeners(t))return this;for(var s=e.extend({type:t,target:this},i),o=this[n][t].slice(),a=0,r=o.length;r>a;a++)o[a].action.call(o[a].context||this,s);return this}},e.Mixin.Events.on=e.Mixin.Events.addEventListener,e.Mixin.Events.off=e.Mixin.Events.removeEventListener,e.Mixin.Events.fire=e.Mixin.Events.fireEvent,function(){var o=!!t.ActiveXObject,n=o&&!t.XMLHttpRequest,a=o&&!i.querySelector,r=navigator.userAgent.toLowerCase(),h=-1!==r.indexOf("webkit"),l=-1!==r.indexOf("chrome"),c=-1!==r.indexOf("android"),m=-1!==r.search("android [23]"),u=typeof orientation!=s+"",d=t.navigator&&t.navigator.msPointerEnabled&&t.navigator.msMaxTouchPoints,p="devicePixelRatio"in t&&t.devicePixelRatio>1||"matchMedia"in t&&t.matchMedia("(min-resolution:144dpi)")&&t.matchMedia("(min-resolution:144dpi)").matches,_=i.documentElement,f=o&&"transition"in _.style,P="WebKitCSSMatrix"in t&&"m11"in new t.WebKitCSSMatrix,y="MozPerspective"in _.style,g="OTransition"in _.style,L=!t.L_DISABLE_3D&&(f||P||y||g),v=!t.L_NO_TOUCH&&function(){var t="ontouchstart";if(d||t in _)return!0;var s=i.createElement("div"),e=!1;return s.setAttribute?(s.setAttribute(t,"return;"),"function"==typeof s[t]&&(e=!0),s.removeAttribute(t),s=null,e):!1}();e.Browser={ie:o,ie6:n,ie7:a,webkit:h,android:c,android23:m,chrome:l,ie3d:f,webkit3d:P,gecko3d:y,opera3d:g,any3d:L,mobile:u,mobileWebkit:u&&h,mobileWebkit3d:u&&P,mobileOpera:u&&t.opera,touch:v,msTouch:d,retina:p}}(),e.Point=function(t,i,s){this.x=s?Math.round(t):t,this.y=s?Math.round(i):i},e.Point.prototype={clone:function(){return new e.Point(this.x,this.y)},add:function(t){return this.clone()._add(e.point(t))},_add:function(t){return this.x+=t.x,this.y+=t.y,this},subtract:function(t){return this.clone()._subtract(e.point(t))},_subtract:function(t){return this.x-=t.x,this.y-=t.y,this},divideBy:function(t){return this.clone()._divideBy(t)},_divideBy:function(t){return this.x/=t,this.y/=t,this},multiplyBy:function(t){return this.clone()._multiplyBy(t)},_multiplyBy:function(t){return this.x*=t,this.y*=t,this},round:function(){return this.clone()._round()},_round:function(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this},floor:function(){return this.clone()._floor()},_floor:function(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this},distanceTo:function(t){t=e.point(t);var i=t.x-this.x,s=t.y-this.y;return Math.sqrt(i*i+s*s)},equals:function(t){return t.x===this.x&&t.y===this.y},toString:function(){return"Point("+e.Util.formatNum(this.x)+", "+e.Util.formatNum(this.y)+")"}},e.point=function(t,i,s){return t instanceof e.Point?t:e.Util.isArray(t)?new e.Point(t[0],t[1]):isNaN(t)?t:new e.Point(t,i,s)},e.Bounds=function(t,i){if(t)for(var s=i?[t,i]:t,e=0,o=s.length;o>e;e++)this.extend(s[e])},e.Bounds.prototype={extend:function(t){return t=e.point(t),this.min||this.max?(this.min.x=Math.min(t.x,this.min.x),this.max.x=Math.max(t.x,this.max.x),this.min.y=Math.min(t.y,this.min.y),this.max.y=Math.max(t.y,this.max.y)):(this.min=t.clone(),this.max=t.clone()),this},getCenter:function(t){return new e.Point((this.min.x+this.max.x)/2,(this.min.y+this.max.y)/2,t)},getBottomLeft:function(){return new e.Point(this.min.x,this.max.y)},getTopRight:function(){return new e.Point(this.max.x,this.min.y)},getSize:function(){return this.max.subtract(this.min)},contains:function(t){var i,s;return t="number"==typeof t[0]||t instanceof e.Point?e.point(t):e.bounds(t),t instanceof e.Bounds?(i=t.min,s=t.max):i=s=t,i.x>=this.min.x&&s.x<=this.max.x&&i.y>=this.min.y&&s.y<=this.max.y},intersects:function(t){t=e.bounds(t);var i=this.min,s=this.max,o=t.min,n=t.max,a=n.x>=i.x&&o.x<=s.x,r=n.y>=i.y&&o.y<=s.y;return a&&r},isValid:function(){return!(!this.min||!this.max)}},e.bounds=function(t,i){return!t||t instanceof e.Bounds?t:new e.Bounds(t,i)},e.Transformation=function(t,i,s,e){this._a=t,this._b=i,this._c=s,this._d=e},e.Transformation.prototype={transform:function(t,i){return this._transform(t.clone(),i)},_transform:function(t,i){return i=i||1,t.x=i*(this._a*t.x+this._b),t.y=i*(this._c*t.y+this._d),t},untransform:function(t,i){return i=i||1,new e.Point((t.x/i-this._b)/this._a,(t.y/i-this._d)/this._c)}},e.DomUtil={get:function(t){return"string"==typeof t?i.getElementById(t):t},getStyle:function(t,s){var e=t.style[s];if(!e&&t.currentStyle&&(e=t.currentStyle[s]),(!e||"auto"===e)&&i.defaultView){var o=i.defaultView.getComputedStyle(t,null);e=o?o[s]:null}return"auto"===e?null:e},getViewportOffset:function(t){var s,o=0,n=0,a=t,r=i.body,h=e.Browser.ie7;do{if(o+=a.offsetTop||0,n+=a.offsetLeft||0,o+=parseInt(e.DomUtil.getStyle(a,"borderTopWidth"),10)||0,n+=parseInt(e.DomUtil.getStyle(a,"borderLeftWidth"),10)||0,s=e.DomUtil.getStyle(a,"position"),a.offsetParent===r&&"absolute"===s)break;if("fixed"===s){o+=r.scrollTop||0,n+=r.scrollLeft||0;break}a=a.offsetParent}while(a);a=t;do{if(a===r)break;o-=a.scrollTop||0,n-=a.scrollLeft||0,e.DomUtil.documentIsLtr()||!e.Browser.webkit&&!h||(n+=a.scrollWidth-a.clientWidth,h&&"hidden"!==e.DomUtil.getStyle(a,"overflow-y")&&"hidden"!==e.DomUtil.getStyle(a,"overflow")&&(n+=17)),a=a.parentNode}while(a);return new e.Point(n,o)},documentIsLtr:function(){return e.DomUtil._docIsLtrCached||(e.DomUtil._docIsLtrCached=!0,e.DomUtil._docIsLtr="ltr"===e.DomUtil.getStyle(i.body,"direction")),e.DomUtil._docIsLtr},create:function(t,s,e){var o=i.createElement(t);return o.className=s,e&&e.appendChild(o),o},disableTextSelection:function(){i.selection&&i.selection.empty&&i.selection.empty(),this._onselectstart||(this._onselectstart=i.onselectstart||null,i.onselectstart=e.Util.falseFn)},enableTextSelection:function(){i.onselectstart===e.Util.falseFn&&(i.onselectstart=this._onselectstart,this._onselectstart=null)},hasClass:function(t,i){return t.className.length>0&&RegExp("(^|\\s)"+i+"(\\s|$)").test(t.className)},addClass:function(t,i){e.DomUtil.hasClass(t,i)||(t.className+=(t.className?" ":"")+i)},removeClass:function(t,i){function s(t,s){return s===i?"":t}t.className=t.className.replace(/(\S+)\s*/g,s).replace(/(^\s+|\s+$)/,"")},setOpacity:function(t,i){if("opacity"in t.style)t.style.opacity=i;else if("filter"in t.style){var s=!1,e="DXImageTransform.Microsoft.Alpha";try{s=t.filters.item(e)}catch(o){}i=Math.round(100*i),s?(s.Enabled=100!==i,s.Opacity=i):t.style.filter+=" progid:"+e+"(opacity="+i+")"}},testProp:function(t){for(var s=i.documentElement.style,e=0;t.length>e;e++)if(t[e]in s)return t[e];return!1},getTranslateString:function(t){var i=e.Browser.webkit3d,s="translate"+(i?"3d":"")+"(",o=(i?",0":"")+")";return s+t.x+"px,"+t.y+"px"+o},getScaleString:function(t,i){var s=e.DomUtil.getTranslateString(i.add(i.multiplyBy(-1*t))),o=" scale("+t+") ";return s+o},setPosition:function(t,i,s){t._leaflet_pos=i,!s&&e.Browser.any3d?(t.style[e.DomUtil.TRANSFORM]=e.DomUtil.getTranslateString(i),e.Browser.mobileWebkit3d&&(t.style.WebkitBackfaceVisibility="hidden")):(t.style.left=i.x+"px",t.style.top=i.y+"px")},getPosition:function(t){return t._leaflet_pos}},e.DomUtil.TRANSFORM=e.DomUtil.testProp(["transform","WebkitTransform","OTransform","MozTransform","msTransform"]),e.DomUtil.TRANSITION=e.DomUtil.testProp(["webkitTransition","transition","OTransition","MozTransition","msTransition"]),e.DomUtil.TRANSITION_END="webkitTransition"===e.DomUtil.TRANSITION||"OTransition"===e.DomUtil.TRANSITION?e.DomUtil.TRANSITION+"End":"transitionend",e.LatLng=function(t,i){var s=parseFloat(t),e=parseFloat(i);if(isNaN(s)||isNaN(e))throw Error("Invalid LatLng object: ("+t+", "+i+")");this.lat=s,this.lng=e},e.extend(e.LatLng,{DEG_TO_RAD:Math.PI/180,RAD_TO_DEG:180/Math.PI,MAX_MARGIN:1e-9}),e.LatLng.prototype={equals:function(t){if(!t)return!1;t=e.latLng(t);var i=Math.max(Math.abs(this.lat-t.lat),Math.abs(this.lng-t.lng));return e.LatLng.MAX_MARGIN>=i},toString:function(t){return"LatLng("+e.Util.formatNum(this.lat,t)+", "+e.Util.formatNum(this.lng,t)+")"},distanceTo:function(t){t=e.latLng(t);var i=6378137,s=e.LatLng.DEG_TO_RAD,o=(t.lat-this.lat)*s,n=(t.lng-this.lng)*s,a=this.lat*s,r=t.lat*s,h=Math.sin(o/2),l=Math.sin(n/2),c=h*h+l*l*Math.cos(a)*Math.cos(r);return 2*i*Math.atan2(Math.sqrt(c),Math.sqrt(1-c))},wrap:function(t,i){var s=this.lng;return t=t||-180,i=i||180,s=(s+i)%(i-t)+(t>s||s===i?i:t),new e.LatLng(this.lat,s)}},e.latLng=function(t,i){return t instanceof e.LatLng?t:e.Util.isArray(t)?new e.LatLng(t[0],t[1]):isNaN(t)?t:new e.LatLng(t,i)},e.LatLngBounds=function(t,i){if(t)for(var s=i?[t,i]:t,e=0,o=s.length;o>e;e++)this.extend(s[e])},e.LatLngBounds.prototype={extend:function(t){return t="number"==typeof t[0]||"string"==typeof t[0]||t instanceof e.LatLng?e.latLng(t):e.latLngBounds(t),t instanceof e.LatLng?this._southWest||this._northEast?(this._southWest.lat=Math.min(t.lat,this._southWest.lat),this._southWest.lng=Math.min(t.lng,this._southWest.lng),this._northEast.lat=Math.max(t.lat,this._northEast.lat),this._northEast.lng=Math.max(t.lng,this._northEast.lng)):(this._southWest=new e.LatLng(t.lat,t.lng),this._northEast=new e.LatLng(t.lat,t.lng)):t instanceof e.LatLngBounds&&(this.extend(t._southWest),this.extend(t._northEast)),this},pad:function(t){var i=this._southWest,s=this._northEast,o=Math.abs(i.lat-s.lat)*t,n=Math.abs(i.lng-s.lng)*t;return new e.LatLngBounds(new e.LatLng(i.lat-o,i.lng-n),new e.LatLng(s.lat+o,s.lng+n))},getCenter:function(){return new e.LatLng((this._southWest.lat+this._northEast.lat)/2,(this._southWest.lng+this._northEast.lng)/2)},getSouthWest:function(){return this._southWest},getNorthEast:function(){return this._northEast},getNorthWest:function(){return new e.LatLng(this._northEast.lat,this._southWest.lng)},getSouthEast:function(){return new e.LatLng(this._southWest.lat,this._northEast.lng)},contains:function(t){t="number"==typeof t[0]||t instanceof e.LatLng?e.latLng(t):e.latLngBounds(t);var i,s,o=this._southWest,n=this._northEast;return t instanceof e.LatLngBounds?(i=t.getSouthWest(),s=t.getNorthEast()):i=s=t,i.lat>=o.lat&&s.lat<=n.lat&&i.lng>=o.lng&&s.lng<=n.lng},intersects:function(t){t=e.latLngBounds(t);var i=this._southWest,s=this._northEast,o=t.getSouthWest(),n=t.getNorthEast(),a=n.lat>=i.lat&&o.lat<=s.lat,r=n.lng>=i.lng&&o.lng<=s.lng;return a&&r},toBBoxString:function(){var t=this._southWest,i=this._northEast;return[t.lng,t.lat,i.lng,i.lat].join(",")},equals:function(t){return t?(t=e.latLngBounds(t),this._southWest.equals(t.getSouthWest())&&this._northEast.equals(t.getNorthEast())):!1},isValid:function(){return!(!this._southWest||!this._northEast)}},e.latLngBounds=function(t,i){return!t||t instanceof e.LatLngBounds?t:new e.LatLngBounds(t,i)},e.Projection={},e.Projection.SphericalMercator={MAX_LATITUDE:85.0511287798,project:function(t){var i=e.LatLng.DEG_TO_RAD,s=this.MAX_LATITUDE,o=Math.max(Math.min(s,t.lat),-s),n=t.lng*i,a=o*i;return a=Math.log(Math.tan(Math.PI/4+a/2)),new e.Point(n,a)},unproject:function(t){var i=e.LatLng.RAD_TO_DEG,s=t.x*i,o=(2*Math.atan(Math.exp(t.y))-Math.PI/2)*i;return new e.LatLng(o,s)}},e.Projection.LonLat={project:function(t){return new e.Point(t.lng,t.lat)},unproject:function(t){return new e.LatLng(t.y,t.x)}},e.CRS={latLngToPoint:function(t,i){var s=this.projection.project(t),e=this.scale(i);return this.transformation._transform(s,e)},pointToLatLng:function(t,i){var s=this.scale(i),e=this.transformation.untransform(t,s);return this.projection.unproject(e)},project:function(t){return this.projection.project(t)},scale:function(t){return 256*Math.pow(2,t)}},e.CRS.Simple=e.extend({},e.CRS,{projection:e.Projection.LonLat,transformation:new e.Transformation(1,0,-1,0),scale:function(t){return Math.pow(2,t)}}),e.CRS.EPSG3857=e.extend({},e.CRS,{code:"EPSG:3857",projection:e.Projection.SphericalMercator,transformation:new e.Transformation(.5/Math.PI,.5,-.5/Math.PI,.5),project:function(t){var i=this.projection.project(t),s=6378137;return i.multiplyBy(s)}}),e.CRS.EPSG900913=e.extend({},e.CRS.EPSG3857,{code:"EPSG:900913"}),e.CRS.EPSG4326=e.extend({},e.CRS,{code:"EPSG:4326",projection:e.Projection.LonLat,transformation:new e.Transformation(1/360,.5,-1/360,.5)}),e.Map=e.Class.extend({includes:e.Mixin.Events,options:{crs:e.CRS.EPSG3857,fadeAnimation:e.DomUtil.TRANSITION&&!e.Browser.android23,trackResize:!0,markerZoomAnimation:e.DomUtil.TRANSITION&&e.Browser.any3d},initialize:function(t,i){i=e.setOptions(this,i),this._initContainer(t),this._initLayout(),this.callInitHooks(),this._initEvents(),i.maxBounds&&this.setMaxBounds(i.maxBounds),i.center&&i.zoom!==s&&this.setView(e.latLng(i.center),i.zoom,!0),this._initLayers(i.layers)},setView:function(t,i){return this._resetView(e.latLng(t),this._limitZoom(i)),this},setZoom:function(t){return this.setView(this.getCenter(),t)},zoomIn:function(t){return this.setZoom(this._zoom+(t||1))},zoomOut:function(t){return this.setZoom(this._zoom-(t||1))},fitBounds:function(t){var i=this.getBoundsZoom(t);return this.setView(e.latLngBounds(t).getCenter(),i)},fitWorld:function(){var t=new e.LatLng(-60,-170),i=new e.LatLng(85,179);return this.fitBounds(new e.LatLngBounds(t,i))},panTo:function(t){return this.setView(t,this._zoom)},panBy:function(t){return this.fire("movestart"),this._rawPanBy(e.point(t)),this.fire("move"),this.fire("moveend")},setMaxBounds:function(t){if(t=e.latLngBounds(t),this.options.maxBounds=t,!t)return this._boundsMinZoom=null,this;var i=this.getBoundsZoom(t,!0);return this._boundsMinZoom=i,this._loaded&&(i>this._zoom?this.setView(t.getCenter(),i):this.panInsideBounds(t)),this},panInsideBounds:function(t){t=e.latLngBounds(t);var i=this.getBounds(),s=this.project(i.getSouthWest()),o=this.project(i.getNorthEast()),n=this.project(t.getSouthWest()),a=this.project(t.getNorthEast()),r=0,h=0;return o.ya.x&&(r=a.x-o.x),s.y>n.y&&(h=n.y-s.y),s.x=r);return m&&i?null:i?r:r-1},getSize:function(){return(!this._size||this._sizeChanged)&&(this._size=new e.Point(this._container.clientWidth,this._container.clientHeight),this._sizeChanged=!1),this._size.clone()},getPixelBounds:function(){var t=this._getTopLeftPoint();return new e.Bounds(t,t.add(this.getSize()))},getPixelOrigin:function(){return this._initialTopLeftPoint},getPanes:function(){return this._panes},getContainer:function(){return this._container},getZoomScale:function(t){var i=this.options.crs;return i.scale(t)/i.scale(this._zoom)},getScaleZoom:function(t){return this._zoom+Math.log(t)/Math.LN2},project:function(t,i){return i=i===s?this._zoom:i,this.options.crs.latLngToPoint(e.latLng(t),i)},unproject:function(t,i){return i=i===s?this._zoom:i,this.options.crs.pointToLatLng(e.point(t),i)},layerPointToLatLng:function(t){var i=e.point(t).add(this._initialTopLeftPoint);return this.unproject(i)},latLngToLayerPoint:function(t){var i=this.project(e.latLng(t))._round();return i._subtract(this._initialTopLeftPoint)},containerPointToLayerPoint:function(t){return e.point(t).subtract(this._getMapPanePos())},layerPointToContainerPoint:function(t){return e.point(t).add(this._getMapPanePos())},containerPointToLatLng:function(t){var i=this.containerPointToLayerPoint(e.point(t));return this.layerPointToLatLng(i)},latLngToContainerPoint:function(t){return this.layerPointToContainerPoint(this.latLngToLayerPoint(e.latLng(t)))},mouseEventToContainerPoint:function(t){return e.DomEvent.getMousePosition(t,this._container)},mouseEventToLayerPoint:function(t){return this.containerPointToLayerPoint(this.mouseEventToContainerPoint(t))},mouseEventToLatLng:function(t){return this.layerPointToLatLng(this.mouseEventToLayerPoint(t))},_initContainer:function(t){var i=this._container=e.DomUtil.get(t);if(i._leaflet)throw Error("Map container is already initialized.");i._leaflet=!0},_initLayout:function(){var t=this._container;e.DomUtil.addClass(t,"leaflet-container"),e.Browser.touch&&e.DomUtil.addClass(t,"leaflet-touch"),this.options.fadeAnimation&&e.DomUtil.addClass(t,"leaflet-fade-anim");var i=e.DomUtil.getStyle(t,"position");"absolute"!==i&&"relative"!==i&&"fixed"!==i&&(t.style.position="relative"),this._initPanes(),this._initControlPos&&this._initControlPos()},_initPanes:function(){var t=this._panes={};this._mapPane=t.mapPane=this._createPane("leaflet-map-pane",this._container),this._tilePane=t.tilePane=this._createPane("leaflet-tile-pane",this._mapPane),t.objectsPane=this._createPane("leaflet-objects-pane",this._mapPane),t.shadowPane=this._createPane("leaflet-shadow-pane"),t.overlayPane=this._createPane("leaflet-overlay-pane"),t.markerPane=this._createPane("leaflet-marker-pane"),t.popupPane=this._createPane("leaflet-popup-pane");var i=" leaflet-zoom-hide";this.options.markerZoomAnimation||(e.DomUtil.addClass(t.markerPane,i),e.DomUtil.addClass(t.shadowPane,i),e.DomUtil.addClass(t.popupPane,i))},_createPane:function(t,i){return e.DomUtil.create("div",t,i||this._panes.objectsPane)},_initLayers:function(t){t=t?e.Util.isArray(t)?t:[t]:[],this._layers={},this._zoomBoundLayers={},this._tileLayersNum=0;var i,s;for(i=0,s=t.length;s>i;i++)this.addLayer(t[i])},_resetView:function(t,i,s,o){var n=this._zoom!==i;o||(this.fire("movestart"),n&&this.fire("zoomstart")),this._zoom=i,this._initialTopLeftPoint=this._getNewTopLeftPoint(t),s?this._initialTopLeftPoint._add(this._getMapPanePos()):e.DomUtil.setPosition(this._mapPane,new e.Point(0,0)),this._tileLayersToLoad=this._tileLayersNum;var a=!this._loaded;this._loaded=!0,this.fire("viewreset",{hard:!s}),this.fire("move"),(n||o)&&this.fire("zoomend"),this.fire("moveend",{hard:!s}),a&&this.fire("load")},_rawPanBy:function(t){e.DomUtil.setPosition(this._mapPane,this._getMapPanePos().subtract(t))},_updateZoomLevels:function(){var t,i=1/0,e=-1/0;for(t in this._zoomBoundLayers)if(this._zoomBoundLayers.hasOwnProperty(t)){var o=this._zoomBoundLayers[t];isNaN(o.options.minZoom)||(i=Math.min(i,o.options.minZoom)),isNaN(o.options.maxZoom)||(e=Math.max(e,o.options.maxZoom))}t===s?this._layersMaxZoom=this._layersMinZoom=s:(this._layersMaxZoom=e,this._layersMinZoom=i)},_initEvents:function(){if(e.DomEvent){e.DomEvent.on(this._container,"click",this._onMouseClick,this);var i,s,o=["dblclick","mousedown","mouseup","mouseenter","mouseleave","mousemove","contextmenu"];for(i=0,s=o.length;s>i;i++)e.DomEvent.on(this._container,o[i],this._fireMouseEvent,this);this.options.trackResize&&e.DomEvent.on(t,"resize",this._onResize,this)}},_onResize:function(){e.Util.cancelAnimFrame(this._resizeRequest),this._resizeRequest=e.Util.requestAnimFrame(this.invalidateSize,this,!1,this._container)},_onMouseClick:function(t){!this._loaded||this.dragging&&this.dragging.moved()||(this.fire("preclick"),this._fireMouseEvent(t))},_fireMouseEvent:function(t){if(this._loaded){var i=t.type;if(i="mouseenter"===i?"mouseover":"mouseleave"===i?"mouseout":i,this.hasEventListeners(i)){"contextmenu"===i&&e.DomEvent.preventDefault(t);var s=this.mouseEventToContainerPoint(t),o=this.containerPointToLayerPoint(s),n=this.layerPointToLatLng(o);this.fire(i,{latlng:n,layerPoint:o,containerPoint:s,originalEvent:t})}}},_onTileLayerLoad:function(){this._tileLayersToLoad--,this._tileLayersNum&&!this._tileLayersToLoad&&this._tileBg&&(clearTimeout(this._clearTileBgTimer),this._clearTileBgTimer=setTimeout(e.bind(this._clearTileBg,this),500))},whenReady:function(t,i){return this._loaded?t.call(i||this,this):this.on("load",t,i),this},_getMapPanePos:function(){return e.DomUtil.getPosition(this._mapPane)},_getTopLeftPoint:function(){if(!this._loaded)throw Error("Set map center and zoom first.");return this._initialTopLeftPoint.subtract(this._getMapPanePos())},_getNewTopLeftPoint:function(t,i){var s=this.getSize()._divideBy(2);return this.project(t,i)._subtract(s)._round()},_latLngToNewLayerPoint:function(t,i,s){var e=this._getNewTopLeftPoint(s,i).add(this._getMapPanePos());return this.project(t,i)._subtract(e)},_getCenterLayerPoint:function(){return this.containerPointToLayerPoint(this.getSize()._divideBy(2))},_getCenterOffset:function(t){return this.latLngToLayerPoint(t).subtract(this._getCenterLayerPoint())},_limitZoom:function(t){var i=this.getMinZoom(),s=this.getMaxZoom();return Math.max(i,Math.min(s,t))}}),e.map=function(t,i){return new e.Map(t,i)},e.Projection.Mercator={MAX_LATITUDE:85.0840591556,R_MINOR:6356752.3142,R_MAJOR:6378137,project:function(t){var i=e.LatLng.DEG_TO_RAD,s=this.MAX_LATITUDE,o=Math.max(Math.min(s,t.lat),-s),n=this.R_MAJOR,a=this.R_MINOR,r=t.lng*i*n,h=o*i,l=a/n,c=Math.sqrt(1-l*l),m=c*Math.sin(h);m=Math.pow((1-m)/(1+m),.5*c);var u=Math.tan(.5*(.5*Math.PI-h))/m;return h=-a*Math.log(u),new e.Point(r,h)},unproject:function(t){for(var i,s=e.LatLng.RAD_TO_DEG,o=this.R_MAJOR,n=this.R_MINOR,a=t.x*s/o,r=n/o,h=Math.sqrt(1-r*r),l=Math.exp(-t.y/n),c=Math.PI/2-2*Math.atan(l),m=15,u=1e-7,d=m,p=.1;Math.abs(p)>u&&--d>0;)i=h*Math.sin(c),p=Math.PI/2-2*Math.atan(l*Math.pow((1-i)/(1+i),.5*h))-c,c+=p;return new e.LatLng(c*s,a)}},e.CRS.EPSG3395=e.extend({},e.CRS,{code:"EPSG:3395",projection:e.Projection.Mercator,transformation:function(){var t=e.Projection.Mercator,i=t.R_MAJOR,s=t.R_MINOR;return new e.Transformation(.5/(Math.PI*i),.5,-.5/(Math.PI*s),.5)}()}),e.TileLayer=e.Class.extend({includes:e.Mixin.Events,options:{minZoom:0,maxZoom:18,tileSize:256,subdomains:"abc",errorTileUrl:"",attribution:"",zoomOffset:0,opacity:1,unloadInvisibleTiles:e.Browser.mobile,updateWhenIdle:e.Browser.mobile},initialize:function(t,i){i=e.setOptions(this,i),i.detectRetina&&e.Browser.retina&&i.maxZoom>0&&(i.tileSize=Math.floor(i.tileSize/2),i.zoomOffset++,i.minZoom>0&&i.minZoom--,this.options.maxZoom--),this._url=t;var s=this.options.subdomains;"string"==typeof s&&(this.options.subdomains=s.split(""))},onAdd:function(t){this._map=t,this._initContainer(),this._createTileProto(),t.on({viewreset:this._resetCallback,moveend:this._update},this),this.options.updateWhenIdle||(this._limitedUpdate=e.Util.limitExecByInterval(this._update,150,this),t.on("move",this._limitedUpdate,this)),this._reset(),this._update()},addTo:function(t){return t.addLayer(this),this},onRemove:function(t){this._container.parentNode.removeChild(this._container),t.off({viewreset:this._resetCallback,moveend:this._update},this),this.options.updateWhenIdle||t.off("move",this._limitedUpdate,this),this._container=null,this._map=null +},bringToFront:function(){var t=this._map._panes.tilePane;return this._container&&(t.appendChild(this._container),this._setAutoZIndex(t,Math.max)),this},bringToBack:function(){var t=this._map._panes.tilePane;return this._container&&(t.insertBefore(this._container,t.firstChild),this._setAutoZIndex(t,Math.min)),this},getAttribution:function(){return this.options.attribution},setOpacity:function(t){return this.options.opacity=t,this._map&&this._updateOpacity(),this},setZIndex:function(t){return this.options.zIndex=t,this._updateZIndex(),this},setUrl:function(t,i){return this._url=t,i||this.redraw(),this},redraw:function(){return this._map&&(this._map._panes.tilePane.empty=!1,this._reset(!0),this._update()),this},_updateZIndex:function(){this._container&&this.options.zIndex!==s&&(this._container.style.zIndex=this.options.zIndex)},_setAutoZIndex:function(t,i){var s,e,o,n=t.children,a=-i(1/0,-1/0);for(e=0,o=n.length;o>e;e++)n[e]!==this._container&&(s=parseInt(n[e].style.zIndex,10),isNaN(s)||(a=i(a,s)));this.options.zIndex=this._container.style.zIndex=(isFinite(a)?a:0)+i(1,-1)},_updateOpacity:function(){e.DomUtil.setOpacity(this._container,this.options.opacity);var t,i=this._tiles;if(e.Browser.webkit)for(t in i)i.hasOwnProperty(t)&&(i[t].style.webkitTransform+=" translate(0,0)")},_initContainer:function(){var t=this._map._panes.tilePane;(!this._container||t.empty)&&(this._container=e.DomUtil.create("div","leaflet-layer"),this._updateZIndex(),t.appendChild(this._container),1>this.options.opacity&&this._updateOpacity())},_resetCallback:function(t){this._reset(t.hard)},_reset:function(t){var i=this._tiles;for(var s in i)i.hasOwnProperty(s)&&this.fire("tileunload",{tile:i[s]});this._tiles={},this._tilesToLoad=0,this.options.reuseTiles&&(this._unusedTiles=[]),t&&this._container&&(this._container.innerHTML=""),this._initContainer()},_update:function(){if(this._map){var t=this._map.getPixelBounds(),i=this._map.getZoom(),s=this.options.tileSize;if(!(i>this.options.maxZoom||this.options.minZoom>i)){var o=new e.Point(Math.floor(t.min.x/s),Math.floor(t.min.y/s)),n=new e.Point(Math.floor(t.max.x/s),Math.floor(t.max.y/s)),a=new e.Bounds(o,n);this._addTilesFromCenterOut(a),(this.options.unloadInvisibleTiles||this.options.reuseTiles)&&this._removeOtherTiles(a)}}},_addTilesFromCenterOut:function(t){var s,o,n,a=[],r=t.getCenter();for(s=t.min.y;t.max.y>=s;s++)for(o=t.min.x;t.max.x>=o;o++)n=new e.Point(o,s),this._tileShouldBeLoaded(n)&&a.push(n);var h=a.length;if(0!==h){a.sort(function(t,i){return t.distanceTo(r)-i.distanceTo(r)});var l=i.createDocumentFragment();for(this._tilesToLoad||this.fire("loading"),this._tilesToLoad+=h,o=0;h>o;o++)this._addTile(a[o],l);this._container.appendChild(l)}},_tileShouldBeLoaded:function(t){if(t.x+":"+t.y in this._tiles)return!1;if(!this.options.continuousWorld){var i=this._getWrapTileNum();if(this.options.noWrap&&(0>t.x||t.x>=i)||0>t.y||t.y>=i)return!1}return!0},_removeOtherTiles:function(t){var i,s,e,o;for(o in this._tiles)this._tiles.hasOwnProperty(o)&&(i=o.split(":"),s=parseInt(i[0],10),e=parseInt(i[1],10),(t.min.x>s||s>t.max.x||t.min.y>e||e>t.max.y)&&this._removeTile(o))},_removeTile:function(t){var i=this._tiles[t];this.fire("tileunload",{tile:i,url:i.src}),this.options.reuseTiles?(e.DomUtil.removeClass(i,"leaflet-tile-loaded"),this._unusedTiles.push(i)):i.parentNode===this._container&&this._container.removeChild(i),e.Browser.android||(i.src=e.Util.emptyImageUrl),delete this._tiles[t]},_addTile:function(t,i){var s=this._getTilePos(t),o=this._getTile();e.DomUtil.setPosition(o,s,e.Browser.chrome||e.Browser.android23),this._tiles[t.x+":"+t.y]=o,this._loadTile(o,t),o.parentNode!==this._container&&i.appendChild(o)},_getZoomForUrl:function(){var t=this.options,i=this._map.getZoom();return t.zoomReverse&&(i=t.maxZoom-i),i+t.zoomOffset},_getTilePos:function(t){var i=this._map.getPixelOrigin(),s=this.options.tileSize;return t.multiplyBy(s).subtract(i)},getTileUrl:function(t){return this._adjustTilePoint(t),e.Util.template(this._url,e.extend({s:this._getSubdomain(t),z:this._getZoomForUrl(),x:t.x,y:t.y},this.options))},_getWrapTileNum:function(){return Math.pow(2,this._getZoomForUrl())},_adjustTilePoint:function(t){var i=this._getWrapTileNum();this.options.continuousWorld||this.options.noWrap||(t.x=(t.x%i+i)%i),this.options.tms&&(t.y=i-t.y-1)},_getSubdomain:function(t){var i=(t.x+t.y)%this.options.subdomains.length;return this.options.subdomains[i]},_createTileProto:function(){var t=this._tileImg=e.DomUtil.create("img","leaflet-tile");t.style.width=t.style.height=this.options.tileSize+"px",t.galleryimg="no"},_getTile:function(){if(this.options.reuseTiles&&this._unusedTiles.length>0){var t=this._unusedTiles.pop();return this._resetTile(t),t}return this._createTile()},_resetTile:function(){},_createTile:function(){var t=this._tileImg.cloneNode(!1);return t.onselectstart=t.onmousemove=e.Util.falseFn,t},_loadTile:function(t,i){t._layer=this,t.onload=this._tileOnLoad,t.onerror=this._tileOnError,t.src=this.getTileUrl(i)},_tileLoaded:function(){this._tilesToLoad--,this._tilesToLoad||this.fire("load")},_tileOnLoad:function(){var t=this._layer;this.src!==e.Util.emptyImageUrl&&(e.DomUtil.addClass(this,"leaflet-tile-loaded"),t.fire("tileload",{tile:this,url:this.src})),t._tileLoaded()},_tileOnError:function(){var t=this._layer;t.fire("tileerror",{tile:this,url:this.src});var i=t.options.errorTileUrl;i&&(this.src=i),t._tileLoaded()}}),e.tileLayer=function(t,i){return new e.TileLayer(t,i)},e.TileLayer.WMS=e.TileLayer.extend({defaultWmsParams:{service:"WMS",request:"GetMap",version:"1.1.1",layers:"",styles:"",format:"image/jpeg",transparent:!1},initialize:function(t,i){this._url=t;var s=e.extend({},this.defaultWmsParams);s.width=s.height=i.detectRetina&&e.Browser.retina?2*this.options.tileSize:this.options.tileSize;for(var o in i)this.options.hasOwnProperty(o)||(s[o]=i[o]);this.wmsParams=s,e.setOptions(this,i)},onAdd:function(t){var i=parseFloat(this.wmsParams.version)>=1.3?"crs":"srs";this.wmsParams[i]=t.options.crs.code,e.TileLayer.prototype.onAdd.call(this,t)},getTileUrl:function(t,i){this._adjustTilePoint(t);var s=this._map,o=s.options.crs,n=this.options.tileSize,a=t.multiplyBy(n),r=a.add(new e.Point(n,n)),h=o.project(s.unproject(a,i)),l=o.project(s.unproject(r,i)),c=[h.x,l.y,l.x,h.y].join(","),m=e.Util.template(this._url,{s:this._getSubdomain(t)});return m+e.Util.getParamString(this.wmsParams,m)+"&bbox="+c},setParams:function(t,i){return e.extend(this.wmsParams,t),i||this.redraw(),this}}),e.tileLayer.wms=function(t,i){return new e.TileLayer.WMS(t,i)},e.TileLayer.Canvas=e.TileLayer.extend({options:{async:!1},initialize:function(t){e.setOptions(this,t)},redraw:function(){var t=this._tiles;for(var i in t)t.hasOwnProperty(i)&&this._redrawTile(t[i])},_redrawTile:function(t){this.drawTile(t,t._tilePoint,this._map._zoom)},_createTileProto:function(){var t=this._canvasProto=e.DomUtil.create("canvas","leaflet-tile");t.width=t.height=this.options.tileSize},_createTile:function(){var t=this._canvasProto.cloneNode(!1);return t.onselectstart=t.onmousemove=e.Util.falseFn,t},_loadTile:function(t,i){t._layer=this,t._tilePoint=i,this._redrawTile(t),this.options.async||this.tileDrawn(t)},drawTile:function(){},tileDrawn:function(t){this._tileOnLoad.call(t)}}),e.tileLayer.canvas=function(t){return new e.TileLayer.Canvas(t)},e.ImageOverlay=e.Class.extend({includes:e.Mixin.Events,options:{opacity:1},initialize:function(t,i,s){this._url=t,this._bounds=e.latLngBounds(i),e.setOptions(this,s)},onAdd:function(t){this._map=t,this._image||this._initImage(),t._panes.overlayPane.appendChild(this._image),t.on("viewreset",this._reset,this),t.options.zoomAnimation&&e.Browser.any3d&&t.on("zoomanim",this._animateZoom,this),this._reset()},onRemove:function(t){t.getPanes().overlayPane.removeChild(this._image),t.off("viewreset",this._reset,this),t.options.zoomAnimation&&t.off("zoomanim",this._animateZoom,this)},addTo:function(t){return t.addLayer(this),this},setOpacity:function(t){return this.options.opacity=t,this._updateOpacity(),this},bringToFront:function(){return this._image&&this._map._panes.overlayPane.appendChild(this._image),this},bringToBack:function(){var t=this._map._panes.overlayPane;return this._image&&t.insertBefore(this._image,t.firstChild),this},_initImage:function(){this._image=e.DomUtil.create("img","leaflet-image-layer"),this._map.options.zoomAnimation&&e.Browser.any3d?e.DomUtil.addClass(this._image,"leaflet-zoom-animated"):e.DomUtil.addClass(this._image,"leaflet-zoom-hide"),this._updateOpacity(),e.extend(this._image,{galleryimg:"no",onselectstart:e.Util.falseFn,onmousemove:e.Util.falseFn,onload:e.bind(this._onImageLoad,this),src:this._url})},_animateZoom:function(t){var i=this._map,s=this._image,o=i.getZoomScale(t.zoom),n=this._bounds.getNorthWest(),a=this._bounds.getSouthEast(),r=i._latLngToNewLayerPoint(n,t.zoom,t.center),h=i._latLngToNewLayerPoint(a,t.zoom,t.center)._subtract(r),l=r._add(h._multiplyBy(.5*(1-1/o)));s.style[e.DomUtil.TRANSFORM]=e.DomUtil.getTranslateString(l)+" scale("+o+") "},_reset:function(){var t=this._image,i=this._map.latLngToLayerPoint(this._bounds.getNorthWest()),s=this._map.latLngToLayerPoint(this._bounds.getSouthEast())._subtract(i);e.DomUtil.setPosition(t,i),t.style.width=s.x+"px",t.style.height=s.y+"px"},_onImageLoad:function(){this.fire("load")},_updateOpacity:function(){e.DomUtil.setOpacity(this._image,this.options.opacity)}}),e.imageOverlay=function(t,i,s){return new e.ImageOverlay(t,i,s)},e.Icon=e.Class.extend({options:{className:""},initialize:function(t){e.setOptions(this,t)},createIcon:function(){return this._createIcon("icon")},createShadow:function(){return this._createIcon("shadow")},_createIcon:function(t){var i=this._getIconUrl(t);if(!i){if("icon"===t)throw Error("iconUrl not set in Icon options (see the docs).");return null}var s=this._createImg(i);return this._setIconStyles(s,t),s},_setIconStyles:function(t,i){var s,o=this.options,n=e.point(o[i+"Size"]);s="shadow"===i?e.point(o.shadowAnchor||o.iconAnchor):e.point(o.iconAnchor),!s&&n&&(s=n.divideBy(2,!0)),t.className="leaflet-marker-"+i+" "+o.className,s&&(t.style.marginLeft=-s.x+"px",t.style.marginTop=-s.y+"px"),n&&(t.style.width=n.x+"px",t.style.height=n.y+"px")},_createImg:function(t){var s;return e.Browser.ie6?(s=i.createElement("div"),s.style.filter='progid:DXImageTransform.Microsoft.AlphaImageLoader(src="'+t+'")'):(s=i.createElement("img"),s.src=t),s},_getIconUrl:function(t){return e.Browser.retina&&this.options[t+"RetinaUrl"]?this.options[t+"RetinaUrl"]:this.options[t+"Url"]}}),e.icon=function(t){return new e.Icon(t)},e.Icon.Default=e.Icon.extend({options:{iconSize:new e.Point(25,41),iconAnchor:new e.Point(12,41),popupAnchor:new e.Point(1,-34),shadowSize:new e.Point(41,41)},_getIconUrl:function(t){var i=t+"Url";if(this.options[i])return this.options[i];e.Browser.retina&&"icon"===t&&(t+="@2x");var s=e.Icon.Default.imagePath;if(!s)throw Error("Couldn't autodetect L.Icon.Default.imagePath, set it manually.");return "marker-"+t+".png"}}),e.Icon.Default.imagePath=function(){var t,s,e,o,n=i.getElementsByTagName("script"),a=/\/?leaflet[\-\._]?([\w\-\._]*)\.js\??/;for(t=0,s=n.length;s>t;t++)if(e=n[t].src,o=e.match(a))return e.split(a)[0]+""}(),e.Marker=e.Class.extend({includes:e.Mixin.Events,options:{icon:new e.Icon.Default,title:"",clickable:!0,draggable:!1,zIndexOffset:0,opacity:1,riseOnHover:!1,riseOffset:250},initialize:function(t,i){e.setOptions(this,i),this._latlng=e.latLng(t)},onAdd:function(t){this._map=t,t.on("viewreset",this.update,this),this._initIcon(),this.update(),t.options.zoomAnimation&&t.options.markerZoomAnimation&&t.on("zoomanim",this._animateZoom,this)},addTo:function(t){return t.addLayer(this),this},onRemove:function(t){this._removeIcon(),this.fire("remove"),t.off({viewreset:this.update,zoomanim:this._animateZoom},this),this._map=null},getLatLng:function(){return this._latlng},setLatLng:function(t){return this._latlng=e.latLng(t),this.update(),this.fire("move",{latlng:this._latlng})},setZIndexOffset:function(t){return this.options.zIndexOffset=t,this.update(),this},setIcon:function(t){return this._map&&this._removeIcon(),this.options.icon=t,this._map&&(this._initIcon(),this.update()),this},update:function(){if(this._icon){var t=this._map.latLngToLayerPoint(this._latlng).round();this._setPos(t)}return this},_initIcon:function(){var t=this.options,i=this._map,s=i.options.zoomAnimation&&i.options.markerZoomAnimation,o=s?"leaflet-zoom-animated":"leaflet-zoom-hide",n=!1;this._icon||(this._icon=t.icon.createIcon(),t.title&&(this._icon.title=t.title),this._initInteraction(),n=1>this.options.opacity,e.DomUtil.addClass(this._icon,o),t.riseOnHover&&e.DomEvent.on(this._icon,"mouseover",this._bringToFront,this).on(this._icon,"mouseout",this._resetZIndex,this)),this._shadow||(this._shadow=t.icon.createShadow(),this._shadow&&(e.DomUtil.addClass(this._shadow,o),n=1>this.options.opacity)),n&&this._updateOpacity();var a=this._map._panes;a.markerPane.appendChild(this._icon),this._shadow&&a.shadowPane.appendChild(this._shadow)},_removeIcon:function(){var t=this._map._panes;this.options.riseOnHover&&e.DomEvent.off(this._icon,"mouseover",this._bringToFront).off(this._icon,"mouseout",this._resetZIndex),t.markerPane.removeChild(this._icon),this._shadow&&t.shadowPane.removeChild(this._shadow),this._icon=this._shadow=null},_setPos:function(t){e.DomUtil.setPosition(this._icon,t),this._shadow&&e.DomUtil.setPosition(this._shadow,t),this._zIndex=t.y+this.options.zIndexOffset,this._resetZIndex()},_updateZIndex:function(t){this._icon.style.zIndex=this._zIndex+t},_animateZoom:function(t){var i=this._map._latLngToNewLayerPoint(this._latlng,t.zoom,t.center);this._setPos(i)},_initInteraction:function(){if(this.options.clickable){var t=this._icon,i=["dblclick","mousedown","mouseover","mouseout","contextmenu"];e.DomUtil.addClass(t,"leaflet-clickable"),e.DomEvent.on(t,"click",this._onMouseClick,this);for(var s=0;i.length>s;s++)e.DomEvent.on(t,i[s],this._fireMouseEvent,this);e.Handler.MarkerDrag&&(this.dragging=new e.Handler.MarkerDrag(this),this.options.draggable&&this.dragging.enable())}},_onMouseClick:function(t){var i=this.dragging&&this.dragging.moved();(this.hasEventListeners(t.type)||i)&&e.DomEvent.stopPropagation(t),i||(this.dragging&&this.dragging._enabled||!this._map.dragging||!this._map.dragging.moved())&&this.fire(t.type,{originalEvent:t})},_fireMouseEvent:function(t){this.fire(t.type,{originalEvent:t}),"contextmenu"===t.type&&this.hasEventListeners(t.type)&&e.DomEvent.preventDefault(t),"mousedown"!==t.type&&e.DomEvent.stopPropagation(t)},setOpacity:function(t){this.options.opacity=t,this._map&&this._updateOpacity()},_updateOpacity:function(){e.DomUtil.setOpacity(this._icon,this.options.opacity),this._shadow&&e.DomUtil.setOpacity(this._shadow,this.options.opacity)},_bringToFront:function(){this._updateZIndex(this.options.riseOffset)},_resetZIndex:function(){this._updateZIndex(0)}}),e.marker=function(t,i){return new e.Marker(t,i)},e.DivIcon=e.Icon.extend({options:{iconSize:new e.Point(12,12),className:"leaflet-div-icon"},createIcon:function(){var t=i.createElement("div"),s=this.options;return s.html&&(t.innerHTML=s.html),s.bgPos&&(t.style.backgroundPosition=-s.bgPos.x+"px "+-s.bgPos.y+"px"),this._setIconStyles(t,"icon"),t},createShadow:function(){return null}}),e.divIcon=function(t){return new e.DivIcon(t)},e.Map.mergeOptions({closePopupOnClick:!0}),e.Popup=e.Class.extend({includes:e.Mixin.Events,options:{minWidth:50,maxWidth:300,maxHeight:null,autoPan:!0,closeButton:!0,offset:new e.Point(0,6),autoPanPadding:new e.Point(5,5),className:"",zoomAnimation:!0},initialize:function(t,i){e.setOptions(this,t),this._source=i,this._animated=e.Browser.any3d&&this.options.zoomAnimation},onAdd:function(t){this._map=t,this._container||this._initLayout(),this._updateContent();var i=t.options.fadeAnimation;i&&e.DomUtil.setOpacity(this._container,0),t._panes.popupPane.appendChild(this._container),t.on("viewreset",this._updatePosition,this),this._animated&&t.on("zoomanim",this._zoomAnimation,this),t.options.closePopupOnClick&&t.on("preclick",this._close,this),this._update(),i&&e.DomUtil.setOpacity(this._container,1)},addTo:function(t){return t.addLayer(this),this},openOn:function(t){return t.openPopup(this),this},onRemove:function(t){t._panes.popupPane.removeChild(this._container),e.Util.falseFn(this._container.offsetWidth),t.off({viewreset:this._updatePosition,preclick:this._close,zoomanim:this._zoomAnimation},this),t.options.fadeAnimation&&e.DomUtil.setOpacity(this._container,0),this._map=null},setLatLng:function(t){return this._latlng=e.latLng(t),this._update(),this},setContent:function(t){return this._content=t,this._update(),this},_close:function(){var t=this._map;t&&(t._popup=null,t.removeLayer(this).fire("popupclose",{popup:this}))},_initLayout:function(){var t,i="leaflet-popup",s=i+" "+this.options.className+" leaflet-zoom-"+(this._animated?"animated":"hide"),o=this._container=e.DomUtil.create("div",s);this.options.closeButton&&(t=this._closeButton=e.DomUtil.create("a",i+"-close-button",o),t.href="#close",t.innerHTML="×",e.DomEvent.on(t,"click",this._onCloseButtonClick,this));var n=this._wrapper=e.DomUtil.create("div",i+"-content-wrapper",o);e.DomEvent.disableClickPropagation(n),this._contentNode=e.DomUtil.create("div",i+"-content",n),e.DomEvent.on(this._contentNode,"mousewheel",e.DomEvent.stopPropagation),this._tipContainer=e.DomUtil.create("div",i+"-tip-container",o),this._tip=e.DomUtil.create("div",i+"-tip",this._tipContainer)},_update:function(){this._map&&(this._container.style.visibility="hidden",this._updateContent(),this._updateLayout(),this._updatePosition(),this._container.style.visibility="",this._adjustPan())},_updateContent:function(){if(this._content){if("string"==typeof this._content)this._contentNode.innerHTML=this._content;else{for(;this._contentNode.hasChildNodes();)this._contentNode.removeChild(this._contentNode.firstChild);this._contentNode.appendChild(this._content)}this.fire("contentupdate")}},_updateLayout:function(){var t=this._contentNode,i=t.style;i.width="",i.whiteSpace="nowrap";var s=t.offsetWidth;s=Math.min(s,this.options.maxWidth),s=Math.max(s,this.options.minWidth),i.width=s+1+"px",i.whiteSpace="",i.height="";var o=t.offsetHeight,n=this.options.maxHeight,a="leaflet-popup-scrolled";n&&o>n?(i.height=n+"px",e.DomUtil.addClass(t,a)):e.DomUtil.removeClass(t,a),this._containerWidth=this._container.offsetWidth},_updatePosition:function(){if(this._map){var t=this._map.latLngToLayerPoint(this._latlng),i=this._animated,s=this.options.offset;i&&e.DomUtil.setPosition(this._container,t),this._containerBottom=-s.y-(i?0:t.y),this._containerLeft=-Math.round(this._containerWidth/2)+s.x+(i?0:t.x),this._container.style.bottom=this._containerBottom+"px",this._container.style.left=this._containerLeft+"px"}},_zoomAnimation:function(t){var i=this._map._latLngToNewLayerPoint(this._latlng,t.zoom,t.center);e.DomUtil.setPosition(this._container,i)},_adjustPan:function(){if(this.options.autoPan){var t=this._map,i=this._container.offsetHeight,s=this._containerWidth,o=new e.Point(this._containerLeft,-i-this._containerBottom);this._animated&&o._add(e.DomUtil.getPosition(this._container));var n=t.layerPointToContainerPoint(o),a=this.options.autoPanPadding,r=t.getSize(),h=0,l=0;0>n.x&&(h=n.x-a.x),n.x+s>r.x&&(h=n.x+s-r.x+a.x),0>n.y&&(l=n.y-a.y),n.y+i>r.y&&(l=n.y+i-r.y+a.y),(h||l)&&t.panBy(new e.Point(h,l))}},_onCloseButtonClick:function(t){this._close(),e.DomEvent.stop(t)}}),e.popup=function(t,i){return new e.Popup(t,i)},e.Marker.include({openPopup:function(){return this._popup&&this._map&&(this._popup.setLatLng(this._latlng),this._map.openPopup(this._popup)),this},closePopup:function(){return this._popup&&this._popup._close(),this},bindPopup:function(t,i){var s=e.point(this.options.icon.options.popupAnchor)||new e.Point(0,0);return s=s.add(e.Popup.prototype.options.offset),i&&i.offset&&(s=s.add(i.offset)),i=e.extend({offset:s},i),this._popup||this.on("click",this.openPopup,this).on("remove",this.closePopup,this).on("move",this._movePopup,this),this._popup=new e.Popup(i,this).setContent(t),this},unbindPopup:function(){return this._popup&&(this._popup=null,this.off("click",this.openPopup).off("remove",this.closePopup).off("move",this._movePopup)),this},_movePopup:function(t){this._popup.setLatLng(t.latlng)}}),e.Map.include({openPopup:function(t){return this.closePopup(),this._popup=t,this.addLayer(t).fire("popupopen",{popup:this._popup})},closePopup:function(){return this._popup&&this._popup._close(),this}}),e.LayerGroup=e.Class.extend({initialize:function(t){this._layers={};var i,s;if(t)for(i=0,s=t.length;s>i;i++)this.addLayer(t[i])},addLayer:function(t){var i=e.stamp(t);return this._layers[i]=t,this._map&&this._map.addLayer(t),this},removeLayer:function(t){var i=e.stamp(t);return delete this._layers[i],this._map&&this._map.removeLayer(t),this},clearLayers:function(){return this.eachLayer(this.removeLayer,this),this},invoke:function(t){var i,s,e=Array.prototype.slice.call(arguments,1);for(i in this._layers)this._layers.hasOwnProperty(i)&&(s=this._layers[i],s[t]&&s[t].apply(s,e));return this},onAdd:function(t){this._map=t,this.eachLayer(t.addLayer,t)},onRemove:function(t){this.eachLayer(t.removeLayer,t),this._map=null},addTo:function(t){return t.addLayer(this),this},eachLayer:function(t,i){for(var s in this._layers)this._layers.hasOwnProperty(s)&&t.call(i,this._layers[s])},setZIndex:function(t){return this.invoke("setZIndex",t)}}),e.layerGroup=function(t){return new e.LayerGroup(t)},e.FeatureGroup=e.LayerGroup.extend({includes:e.Mixin.Events,statics:{EVENTS:"click dblclick mouseover mouseout mousemove contextmenu"},addLayer:function(t){return this._layers[e.stamp(t)]?this:(t.on(e.FeatureGroup.EVENTS,this._propagateEvent,this),e.LayerGroup.prototype.addLayer.call(this,t),this._popupContent&&t.bindPopup&&t.bindPopup(this._popupContent,this._popupOptions),this.fire("layeradd",{layer:t}))},removeLayer:function(t){return t.off(e.FeatureGroup.EVENTS,this._propagateEvent,this),e.LayerGroup.prototype.removeLayer.call(this,t),this._popupContent&&this.invoke("unbindPopup"),this.fire("layerremove",{layer:t})},bindPopup:function(t,i){return this._popupContent=t,this._popupOptions=i,this.invoke("bindPopup",t,i)},setStyle:function(t){return this.invoke("setStyle",t)},bringToFront:function(){return this.invoke("bringToFront")},bringToBack:function(){return this.invoke("bringToBack")},getBounds:function(){var t=new e.LatLngBounds;return this.eachLayer(function(i){t.extend(i instanceof e.Marker?i.getLatLng():i.getBounds())}),t},_propagateEvent:function(t){t.layer=t.target,t.target=this,this.fire(t.type,t)}}),e.featureGroup=function(t){return new e.FeatureGroup(t)},e.Path=e.Class.extend({includes:[e.Mixin.Events],statics:{CLIP_PADDING:e.Browser.mobile?Math.max(0,Math.min(.5,(1280/Math.max(t.innerWidth,t.innerHeight)-1)/2)):.5},options:{stroke:!0,color:"#0033ff",dashArray:null,weight:5,opacity:.5,fill:!1,fillColor:null,fillOpacity:.2,clickable:!0},initialize:function(t){e.setOptions(this,t)},onAdd:function(t){this._map=t,this._container||(this._initElements(),this._initEvents()),this.projectLatlngs(),this._updatePath(),this._container&&this._map._pathRoot.appendChild(this._container),this.fire("add"),t.on({viewreset:this.projectLatlngs,moveend:this._updatePath},this)},addTo:function(t){return t.addLayer(this),this},onRemove:function(t){t._pathRoot.removeChild(this._container),this.fire("remove"),this._map=null,e.Browser.vml&&(this._container=null,this._stroke=null,this._fill=null),t.off({viewreset:this.projectLatlngs,moveend:this._updatePath},this)},projectLatlngs:function(){},setStyle:function(t){return e.setOptions(this,t),this._container&&this._updateStyle(),this},redraw:function(){return this._map&&(this.projectLatlngs(),this._updatePath()),this}}),e.Map.include({_updatePathViewport:function(){var t=e.Path.CLIP_PADDING,i=this.getSize(),s=e.DomUtil.getPosition(this._mapPane),o=s.multiplyBy(-1)._subtract(i.multiplyBy(t)._round()),n=o.add(i.multiplyBy(1+2*t)._round());this._pathViewport=new e.Bounds(o,n)}}),e.Path.SVG_NS="http://www.w3.org/2000/svg",e.Browser.svg=!(!i.createElementNS||!i.createElementNS(e.Path.SVG_NS,"svg").createSVGRect),e.Path=e.Path.extend({statics:{SVG:e.Browser.svg},bringToFront:function(){var t=this._map._pathRoot,i=this._container;return i&&t.lastChild!==i&&t.appendChild(i),this},bringToBack:function(){var t=this._map._pathRoot,i=this._container,s=t.firstChild;return i&&s!==i&&t.insertBefore(i,s),this},getPathString:function(){},_createElement:function(t){return i.createElementNS(e.Path.SVG_NS,t)},_initElements:function(){this._map._initPathRoot(),this._initPath(),this._initStyle()},_initPath:function(){this._container=this._createElement("g"),this._path=this._createElement("path"),this._container.appendChild(this._path)},_initStyle:function(){this.options.stroke&&(this._path.setAttribute("stroke-linejoin","round"),this._path.setAttribute("stroke-linecap","round")),this.options.fill&&this._path.setAttribute("fill-rule","evenodd"),this._updateStyle()},_updateStyle:function(){this.options.stroke?(this._path.setAttribute("stroke",this.options.color),this._path.setAttribute("stroke-opacity",this.options.opacity),this._path.setAttribute("stroke-width",this.options.weight),this.options.dashArray?this._path.setAttribute("stroke-dasharray",this.options.dashArray):this._path.removeAttribute("stroke-dasharray")):this._path.setAttribute("stroke","none"),this.options.fill?(this._path.setAttribute("fill",this.options.fillColor||this.options.color),this._path.setAttribute("fill-opacity",this.options.fillOpacity)):this._path.setAttribute("fill","none")},_updatePath:function(){var t=this.getPathString();t||(t="M0 0"),this._path.setAttribute("d",t)},_initEvents:function(){if(this.options.clickable){(e.Browser.svg||!e.Browser.vml)&&this._path.setAttribute("class","leaflet-clickable"),e.DomEvent.on(this._container,"click",this._onMouseClick,this);for(var t=["dblclick","mousedown","mouseover","mouseout","mousemove","contextmenu"],i=0;t.length>i;i++)e.DomEvent.on(this._container,t[i],this._fireMouseEvent,this)}},_onMouseClick:function(t){this._map.dragging&&this._map.dragging.moved()||this._fireMouseEvent(t)},_fireMouseEvent:function(t){if(this.hasEventListeners(t.type)){var i=this._map,s=i.mouseEventToContainerPoint(t),o=i.containerPointToLayerPoint(s),n=i.layerPointToLatLng(o);this.fire(t.type,{latlng:n,layerPoint:o,containerPoint:s,originalEvent:t}),"contextmenu"===t.type&&e.DomEvent.preventDefault(t),"mousemove"!==t.type&&e.DomEvent.stopPropagation(t)}}}),e.Map.include({_initPathRoot:function(){this._pathRoot||(this._pathRoot=e.Path.prototype._createElement("svg"),this._panes.overlayPane.appendChild(this._pathRoot),this.options.zoomAnimation&&e.Browser.any3d?(this._pathRoot.setAttribute("class"," leaflet-zoom-animated"),this.on({zoomanim:this._animatePathZoom,zoomend:this._endPathZoom})):this._pathRoot.setAttribute("class"," leaflet-zoom-hide"),this.on("moveend",this._updateSvgViewport),this._updateSvgViewport())},_animatePathZoom:function(t){var i=this.getZoomScale(t.zoom),s=this._getCenterOffset(t.center)._multiplyBy(-i)._add(this._pathViewport.min);this._pathRoot.style[e.DomUtil.TRANSFORM]=e.DomUtil.getTranslateString(s)+" scale("+i+") ",this._pathZooming=!0},_endPathZoom:function(){this._pathZooming=!1},_updateSvgViewport:function(){if(!this._pathZooming){this._updatePathViewport();var t=this._pathViewport,i=t.min,s=t.max,o=s.x-i.x,n=s.y-i.y,a=this._pathRoot,r=this._panes.overlayPane;e.Browser.mobileWebkit&&r.removeChild(a),e.DomUtil.setPosition(a,i),a.setAttribute("width",o),a.setAttribute("height",n),a.setAttribute("viewBox",[i.x,i.y,o,n].join(" ")),e.Browser.mobileWebkit&&r.appendChild(a)}}}),e.Path.include({bindPopup:function(t,i){return(!this._popup||i)&&(this._popup=new e.Popup(i,this)),this._popup.setContent(t),this._popupHandlersAdded||(this.on("click",this._openPopup,this).on("remove",this.closePopup,this),this._popupHandlersAdded=!0),this},unbindPopup:function(){return this._popup&&(this._popup=null,this.off("click",this._openPopup).off("remove",this.closePopup),this._popupHandlersAdded=!1),this},openPopup:function(t){return this._popup&&(t=t||this._latlng||this._latlngs[Math.floor(this._latlngs.length/2)],this._openPopup({latlng:t})),this},closePopup:function(){return this._popup&&this._popup._close(),this},_openPopup:function(t){this._popup.setLatLng(t.latlng),this._map.openPopup(this._popup)}}),e.Browser.vml=!e.Browser.svg&&function(){try{var t=i.createElement("div");t.innerHTML='';var s=t.firstChild;return s.style.behavior="url(#default#VML)",s&&"object"==typeof s.adj}catch(e){return!1}}(),e.Path=e.Browser.svg||!e.Browser.vml?e.Path:e.Path.extend({statics:{VML:!0,CLIP_PADDING:.02},_createElement:function(){try{return i.namespaces.add("lvml","urn:schemas-microsoft-com:vml"),function(t){return i.createElement("')}}catch(t){return function(t){return i.createElement("<"+t+' xmlns="urn:schemas-microsoft.com:vml" class="lvml">')}}}(),_initPath:function(){var t=this._container=this._createElement("shape");e.DomUtil.addClass(t,"leaflet-vml-shape"),this.options.clickable&&e.DomUtil.addClass(t,"leaflet-clickable"),t.coordsize="1 1",this._path=this._createElement("path"),t.appendChild(this._path),this._map._pathRoot.appendChild(t)},_initStyle:function(){this._updateStyle()},_updateStyle:function(){var t=this._stroke,i=this._fill,s=this.options,e=this._container;e.stroked=s.stroke,e.filled=s.fill,s.stroke?(t||(t=this._stroke=this._createElement("stroke"),t.endcap="round",e.appendChild(t)),t.weight=s.weight+"px",t.color=s.color,t.opacity=s.opacity,t.dashStyle=s.dashArray?s.dashArray instanceof Array?s.dashArray.join(" "):s.dashArray.replace(/ *, */g," "):""):t&&(e.removeChild(t),this._stroke=null),s.fill?(i||(i=this._fill=this._createElement("fill"),e.appendChild(i)),i.color=s.fillColor||s.color,i.opacity=s.fillOpacity):i&&(e.removeChild(i),this._fill=null)},_updatePath:function(){var t=this._container.style;t.display="none",this._path.v=this.getPathString()+" ",t.display=""}}),e.Map.include(e.Browser.svg||!e.Browser.vml?{}:{_initPathRoot:function(){if(!this._pathRoot){var t=this._pathRoot=i.createElement("div");t.className="leaflet-vml-container",this._panes.overlayPane.appendChild(t),this.on("moveend",this._updatePathViewport),this._updatePathViewport()}}}),e.Browser.canvas=function(){return!!i.createElement("canvas").getContext}(),e.Path=e.Path.SVG&&!t.L_PREFER_CANVAS||!e.Browser.canvas?e.Path:e.Path.extend({statics:{CANVAS:!0,SVG:!1},redraw:function(){return this._map&&(this.projectLatlngs(),this._requestUpdate()),this},setStyle:function(t){return e.setOptions(this,t),this._map&&(this._updateStyle(),this._requestUpdate()),this},onRemove:function(t){t.off("viewreset",this.projectLatlngs,this).off("moveend",this._updatePath,this),this.options.clickable&&this._map.off("click",this._onClick,this),this._requestUpdate(),this._map=null},_requestUpdate:function(){this._map&&!e.Path._updateRequest&&(e.Path._updateRequest=e.Util.requestAnimFrame(this._fireMapMoveEnd,this._map))},_fireMapMoveEnd:function(){e.Path._updateRequest=null,this.fire("moveend")},_initElements:function(){this._map._initPathRoot(),this._ctx=this._map._canvasCtx},_updateStyle:function(){var t=this.options;t.stroke&&(this._ctx.lineWidth=t.weight,this._ctx.strokeStyle=t.color),t.fill&&(this._ctx.fillStyle=t.fillColor||t.color)},_drawPath:function(){var t,i,s,o,n,a;for(this._ctx.beginPath(),t=0,s=this._parts.length;s>t;t++){for(i=0,o=this._parts[t].length;o>i;i++)n=this._parts[t][i],a=(0===i?"move":"line")+"To",this._ctx[a](n.x,n.y);this instanceof e.Polygon&&this._ctx.closePath()}},_checkIfEmpty:function(){return!this._parts.length},_updatePath:function(){if(!this._checkIfEmpty()){var t=this._ctx,i=this.options;this._drawPath(),t.save(),this._updateStyle(),i.fill&&(t.globalAlpha=i.fillOpacity,t.fill()),i.stroke&&(t.globalAlpha=i.opacity,t.stroke()),t.restore() +}},_initEvents:function(){this.options.clickable&&this._map.on("click",this._onClick,this)},_onClick:function(t){this._containsPoint(t.layerPoint)&&this.fire("click",{latlng:t.latlng,layerPoint:t.layerPoint,containerPoint:t.containerPoint,originalEvent:t})}}),e.Map.include(e.Path.SVG&&!t.L_PREFER_CANVAS||!e.Browser.canvas?{}:{_initPathRoot:function(){var t,s=this._pathRoot;s||(s=this._pathRoot=i.createElement("canvas"),s.style.position="absolute",t=this._canvasCtx=s.getContext("2d"),t.lineCap="round",t.lineJoin="round",this._panes.overlayPane.appendChild(s),this.options.zoomAnimation&&(this._pathRoot.className="leaflet-zoom-animated",this.on("zoomanim",this._animatePathZoom),this.on("zoomend",this._endPathZoom)),this.on("moveend",this._updateCanvasViewport),this._updateCanvasViewport())},_updateCanvasViewport:function(){if(!this._pathZooming){this._updatePathViewport();var t=this._pathViewport,i=t.min,s=t.max.subtract(i),o=this._pathRoot;e.DomUtil.setPosition(o,i),o.width=s.x,o.height=s.y,o.getContext("2d").translate(-i.x,-i.y)}}}),e.LineUtil={simplify:function(t,i){if(!i||!t.length)return t.slice();var s=i*i;return t=this._reducePoints(t,s),t=this._simplifyDP(t,s)},pointToSegmentDistance:function(t,i,s){return Math.sqrt(this._sqClosestPointOnSegment(t,i,s,!0))},closestPointOnSegment:function(t,i,s){return this._sqClosestPointOnSegment(t,i,s)},_simplifyDP:function(t,i){var e=t.length,o=typeof Uint8Array!=s+""?Uint8Array:Array,n=new o(e);n[0]=n[e-1]=1,this._simplifyDPStep(t,n,i,0,e-1);var a,r=[];for(a=0;e>a;a++)n[a]&&r.push(t[a]);return r},_simplifyDPStep:function(t,i,s,e,o){var n,a,r,h=0;for(a=e+1;o-1>=a;a++)r=this._sqClosestPointOnSegment(t[a],t[e],t[o],!0),r>h&&(n=a,h=r);h>s&&(i[n]=1,this._simplifyDPStep(t,i,s,e,n),this._simplifyDPStep(t,i,s,n,o))},_reducePoints:function(t,i){for(var s=[t[0]],e=1,o=0,n=t.length;n>e;e++)this._sqDist(t[e],t[o])>i&&(s.push(t[e]),o=e);return n-1>o&&s.push(t[n-1]),s},clipSegment:function(t,i,s,e){var o,n,a,r=e?this._lastCode:this._getBitCode(t,s),h=this._getBitCode(i,s);for(this._lastCode=h;;){if(!(r|h))return[t,i];if(r&h)return!1;o=r||h,n=this._getEdgeIntersection(t,i,o,s),a=this._getBitCode(n,s),o===r?(t=n,r=a):(i=n,h=a)}},_getEdgeIntersection:function(t,i,o,n){var a=i.x-t.x,r=i.y-t.y,h=n.min,l=n.max;return 8&o?new e.Point(t.x+a*(l.y-t.y)/r,l.y):4&o?new e.Point(t.x+a*(h.y-t.y)/r,h.y):2&o?new e.Point(l.x,t.y+r*(l.x-t.x)/a):1&o?new e.Point(h.x,t.y+r*(h.x-t.x)/a):s},_getBitCode:function(t,i){var s=0;return t.xi.max.x&&(s|=2),t.yi.max.y&&(s|=8),s},_sqDist:function(t,i){var s=i.x-t.x,e=i.y-t.y;return s*s+e*e},_sqClosestPointOnSegment:function(t,i,s,o){var n,a=i.x,r=i.y,h=s.x-a,l=s.y-r,c=h*h+l*l;return c>0&&(n=((t.x-a)*h+(t.y-r)*l)/c,n>1?(a=s.x,r=s.y):n>0&&(a+=h*n,r+=l*n)),h=t.x-a,l=t.y-r,o?h*h+l*l:new e.Point(a,r)}},e.Polyline=e.Path.extend({initialize:function(t,i){e.Path.prototype.initialize.call(this,i),this._latlngs=this._convertLatLngs(t)},options:{smoothFactor:1,noClip:!1},projectLatlngs:function(){this._originalPoints=[];for(var t=0,i=this._latlngs.length;i>t;t++)this._originalPoints[t]=this._map.latLngToLayerPoint(this._latlngs[t])},getPathString:function(){for(var t=0,i=this._parts.length,s="";i>t;t++)s+=this._getPathPartStr(this._parts[t]);return s},getLatLngs:function(){return this._latlngs},setLatLngs:function(t){return this._latlngs=this._convertLatLngs(t),this.redraw()},addLatLng:function(t){return this._latlngs.push(e.latLng(t)),this.redraw()},spliceLatLngs:function(){var t=[].splice.apply(this._latlngs,arguments);return this._convertLatLngs(this._latlngs),this.redraw(),t},closestLayerPoint:function(t){for(var i,s,o=1/0,n=this._parts,a=null,r=0,h=n.length;h>r;r++)for(var l=n[r],c=1,m=l.length;m>c;c++){i=l[c-1],s=l[c];var u=e.LineUtil._sqClosestPointOnSegment(t,i,s,!0);o>u&&(o=u,a=e.LineUtil._sqClosestPointOnSegment(t,i,s))}return a&&(a.distance=Math.sqrt(o)),a},getBounds:function(){var t,i,s=new e.LatLngBounds,o=this.getLatLngs();for(t=0,i=o.length;i>t;t++)s.extend(o[t]);return s},_convertLatLngs:function(t){var i,s;for(i=0,s=t.length;s>i;i++){if(e.Util.isArray(t[i])&&"number"!=typeof t[i][0])return;t[i]=e.latLng(t[i])}return t},_initEvents:function(){e.Path.prototype._initEvents.call(this)},_getPathPartStr:function(t){for(var i,s=e.Path.VML,o=0,n=t.length,a="";n>o;o++)i=t[o],s&&i._round(),a+=(o?"L":"M")+i.x+" "+i.y;return a},_clipPoints:function(){var t,i,o,n=this._originalPoints,a=n.length;if(this.options.noClip)return this._parts=[n],s;this._parts=[];var r=this._parts,h=this._map._pathViewport,l=e.LineUtil;for(t=0,i=0;a-1>t;t++)o=l.clipSegment(n[t],n[t+1],h,t),o&&(r[i]=r[i]||[],r[i].push(o[0]),(o[1]!==n[t+1]||t===a-2)&&(r[i].push(o[1]),i++))},_simplifyPoints:function(){for(var t=this._parts,i=e.LineUtil,s=0,o=t.length;o>s;s++)t[s]=i.simplify(t[s],this.options.smoothFactor)},_updatePath:function(){this._map&&(this._clipPoints(),this._simplifyPoints(),e.Path.prototype._updatePath.call(this))}}),e.polyline=function(t,i){return new e.Polyline(t,i)},e.PolyUtil={},e.PolyUtil.clipPolygon=function(t,i){var s,o,n,a,r,h,l,c,m,u=[1,4,2,8],d=e.LineUtil;for(o=0,l=t.length;l>o;o++)t[o]._code=d._getBitCode(t[o],i);for(a=0;4>a;a++){for(c=u[a],s=[],o=0,l=t.length,n=l-1;l>o;n=o++)r=t[o],h=t[n],r._code&c?h._code&c||(m=d._getEdgeIntersection(h,r,c,i),m._code=d._getBitCode(m,i),s.push(m)):(h._code&c&&(m=d._getEdgeIntersection(h,r,c,i),m._code=d._getBitCode(m,i),s.push(m)),s.push(r));t=s}return t},e.Polygon=e.Polyline.extend({options:{fill:!0},initialize:function(t,i){e.Polyline.prototype.initialize.call(this,t,i),t&&e.Util.isArray(t[0])&&"number"!=typeof t[0][0]&&(this._latlngs=this._convertLatLngs(t[0]),this._holes=t.slice(1))},projectLatlngs:function(){if(e.Polyline.prototype.projectLatlngs.call(this),this._holePoints=[],this._holes){var t,i,s,o;for(t=0,s=this._holes.length;s>t;t++)for(this._holePoints[t]=[],i=0,o=this._holes[t].length;o>i;i++)this._holePoints[t][i]=this._map.latLngToLayerPoint(this._holes[t][i])}},_clipPoints:function(){var t=this._originalPoints,i=[];if(this._parts=[t].concat(this._holePoints),!this.options.noClip){for(var s=0,o=this._parts.length;o>s;s++){var n=e.PolyUtil.clipPolygon(this._parts[s],this._map._pathViewport);n.length&&i.push(n)}this._parts=i}},_getPathPartStr:function(t){var i=e.Polyline.prototype._getPathPartStr.call(this,t);return i+(e.Browser.svg?"z":"x")}}),e.polygon=function(t,i){return new e.Polygon(t,i)},function(){function t(t){return e.FeatureGroup.extend({initialize:function(t,i){this._layers={},this._options=i,this.setLatLngs(t)},setLatLngs:function(i){var s=0,e=i.length;for(this.eachLayer(function(t){e>s?t.setLatLngs(i[s++]):this.removeLayer(t)},this);e>s;)this.addLayer(new t(i[s++],this._options));return this}})}e.MultiPolyline=t(e.Polyline),e.MultiPolygon=t(e.Polygon),e.multiPolyline=function(t,i){return new e.MultiPolyline(t,i)},e.multiPolygon=function(t,i){return new e.MultiPolygon(t,i)}}(),e.Rectangle=e.Polygon.extend({initialize:function(t,i){e.Polygon.prototype.initialize.call(this,this._boundsToLatLngs(t),i)},setBounds:function(t){this.setLatLngs(this._boundsToLatLngs(t))},_boundsToLatLngs:function(t){return t=e.latLngBounds(t),[t.getSouthWest(),t.getNorthWest(),t.getNorthEast(),t.getSouthEast()]}}),e.rectangle=function(t,i){return new e.Rectangle(t,i)},e.Circle=e.Path.extend({initialize:function(t,i,s){e.Path.prototype.initialize.call(this,s),this._latlng=e.latLng(t),this._mRadius=i},options:{fill:!0},setLatLng:function(t){return this._latlng=e.latLng(t),this.redraw()},setRadius:function(t){return this._mRadius=t,this.redraw()},projectLatlngs:function(){var t=this._getLngRadius(),i=new e.LatLng(this._latlng.lat,this._latlng.lng-t),s=this._map.latLngToLayerPoint(i);this._point=this._map.latLngToLayerPoint(this._latlng),this._radius=Math.max(Math.round(this._point.x-s.x),1)},getBounds:function(){var t=this._getLngRadius(),i=360*(this._mRadius/40075017),s=this._latlng,o=new e.LatLng(s.lat-i,s.lng-t),n=new e.LatLng(s.lat+i,s.lng+t);return new e.LatLngBounds(o,n)},getLatLng:function(){return this._latlng},getPathString:function(){var t=this._point,i=this._radius;return this._checkIfEmpty()?"":e.Browser.svg?"M"+t.x+","+(t.y-i)+"A"+i+","+i+",0,1,1,"+(t.x-.1)+","+(t.y-i)+" z":(t._round(),i=Math.round(i),"AL "+t.x+","+t.y+" "+i+","+i+" 0,"+23592600)},getRadius:function(){return this._mRadius},_getLatRadius:function(){return 360*(this._mRadius/40075017)},_getLngRadius:function(){return this._getLatRadius()/Math.cos(e.LatLng.DEG_TO_RAD*this._latlng.lat)},_checkIfEmpty:function(){if(!this._map)return!1;var t=this._map._pathViewport,i=this._radius,s=this._point;return s.x-i>t.max.x||s.y-i>t.max.y||s.x+is;s++)for(l=this._parts[s],o=0,r=l.length,n=r-1;r>o;n=o++)if((i||0!==o)&&(h=e.LineUtil.pointToSegmentDistance(t,l[n],l[o]),c>=h))return!0;return!1}}:{}),e.Polygon.include(e.Path.CANVAS?{_containsPoint:function(t){var i,s,o,n,a,r,h,l,c=!1;if(e.Polyline.prototype._containsPoint.call(this,t,!0))return!0;for(n=0,h=this._parts.length;h>n;n++)for(i=this._parts[n],a=0,l=i.length,r=l-1;l>a;r=a++)s=i[a],o=i[r],s.y>t.y!=o.y>t.y&&t.x<(o.x-s.x)*(t.y-s.y)/(o.y-s.y)+s.x&&(c=!c);return c}}:{}),e.Circle.include(e.Path.CANVAS?{_drawPath:function(){var t=this._point;this._ctx.beginPath(),this._ctx.arc(t.x,t.y,this._radius,0,2*Math.PI,!1)},_containsPoint:function(t){var i=this._point,s=this.options.stroke?this.options.weight/2:0;return t.distanceTo(i)<=this._radius+s}}:{}),e.GeoJSON=e.FeatureGroup.extend({initialize:function(t,i){e.setOptions(this,i),this._layers={},t&&this.addData(t)},addData:function(t){var i,s,o=e.Util.isArray(t)?t:t.features;if(o){for(i=0,s=o.length;s>i;i++)(o[i].geometries||o[i].geometry||o[i].features)&&this.addData(o[i]);return this}var n=this.options;if(!n.filter||n.filter(t)){var a=e.GeoJSON.geometryToLayer(t,n.pointToLayer);return a.feature=t,a.defaultOptions=a.options,this.resetStyle(a),n.onEachFeature&&n.onEachFeature(t,a),this.addLayer(a)}},resetStyle:function(t){var i=this.options.style;i&&(e.Util.extend(t.options,t.defaultOptions),this._setLayerStyle(t,i))},setStyle:function(t){this.eachLayer(function(i){this._setLayerStyle(i,t)},this)},_setLayerStyle:function(t,i){"function"==typeof i&&(i=i(t.feature)),t.setStyle&&t.setStyle(i)}}),e.extend(e.GeoJSON,{geometryToLayer:function(t,i){var s,o,n,a,r,h="Feature"===t.type?t.geometry:t,l=h.coordinates,c=[];switch(h.type){case"Point":return s=this.coordsToLatLng(l),i?i(t,s):new e.Marker(s);case"MultiPoint":for(n=0,a=l.length;a>n;n++)s=this.coordsToLatLng(l[n]),r=i?i(t,s):new e.Marker(s),c.push(r);return new e.FeatureGroup(c);case"LineString":return o=this.coordsToLatLngs(l),new e.Polyline(o);case"Polygon":return o=this.coordsToLatLngs(l,1),new e.Polygon(o);case"MultiLineString":return o=this.coordsToLatLngs(l,1),new e.MultiPolyline(o);case"MultiPolygon":return o=this.coordsToLatLngs(l,2),new e.MultiPolygon(o);case"GeometryCollection":for(n=0,a=h.geometries.length;a>n;n++)r=this.geometryToLayer({geometry:h.geometries[n],type:"Feature",properties:t.properties},i),c.push(r);return new e.FeatureGroup(c);default:throw Error("Invalid GeoJSON object.")}},coordsToLatLng:function(t,i){var s=parseFloat(t[i?0:1]),o=parseFloat(t[i?1:0]);return new e.LatLng(s,o)},coordsToLatLngs:function(t,i,s){var e,o,n,a=[];for(o=0,n=t.length;n>o;o++)e=i?this.coordsToLatLngs(t[o],i-1,s):this.coordsToLatLng(t[o],s),a.push(e);return a}}),e.geoJson=function(t,i){return new e.GeoJSON(t,i)},e.DomEvent={addListener:function(t,i,o,n){var a,r,h,l=e.stamp(o),c="_leaflet_"+i+l;return t[c]?this:(a=function(i){return o.call(n||t,i||e.DomEvent._getEvent())},e.Browser.msTouch&&0===i.indexOf("touch")?this.addMsTouchListener(t,i,a,l):(e.Browser.touch&&"dblclick"===i&&this.addDoubleTapListener&&this.addDoubleTapListener(t,a,l),"addEventListener"in t?"mousewheel"===i?(t.addEventListener("DOMMouseScroll",a,!1),t.addEventListener(i,a,!1)):"mouseenter"===i||"mouseleave"===i?(r=a,h="mouseenter"===i?"mouseover":"mouseout",a=function(i){return e.DomEvent._checkMouse(t,i)?r(i):s},t.addEventListener(h,a,!1)):t.addEventListener(i,a,!1):"attachEvent"in t&&t.attachEvent("on"+i,a),t[c]=a,this))},removeListener:function(t,i,s){var o=e.stamp(s),n="_leaflet_"+i+o,a=t[n];if(a)return e.Browser.msTouch&&0===i.indexOf("touch")?this.removeMsTouchListener(t,i,o):e.Browser.touch&&"dblclick"===i&&this.removeDoubleTapListener?this.removeDoubleTapListener(t,o):"removeEventListener"in t?"mousewheel"===i?(t.removeEventListener("DOMMouseScroll",a,!1),t.removeEventListener(i,a,!1)):"mouseenter"===i||"mouseleave"===i?t.removeEventListener("mouseenter"===i?"mouseover":"mouseout",a,!1):t.removeEventListener(i,a,!1):"detachEvent"in t&&t.detachEvent("on"+i,a),t[n]=null,this},stopPropagation:function(t){return t.stopPropagation?t.stopPropagation():t.cancelBubble=!0,this},disableClickPropagation:function(t){for(var i=e.DomEvent.stopPropagation,s=e.Draggable.START.length-1;s>=0;s--)e.DomEvent.addListener(t,e.Draggable.START[s],i);return e.DomEvent.addListener(t,"click",i).addListener(t,"dblclick",i)},preventDefault:function(t){return t.preventDefault?t.preventDefault():t.returnValue=!1,this},stop:function(t){return e.DomEvent.preventDefault(t).stopPropagation(t)},getMousePosition:function(t,s){var o=i.body,n=i.documentElement,a=t.pageX?t.pageX:t.clientX+o.scrollLeft+n.scrollLeft,r=t.pageY?t.pageY:t.clientY+o.scrollTop+n.scrollTop,h=new e.Point(a,r);return s?h._subtract(e.DomUtil.getViewportOffset(s)):h},getWheelDelta:function(t){var i=0;return t.wheelDelta&&(i=t.wheelDelta/120),t.detail&&(i=-t.detail/3),i},_checkMouse:function(t,i){var s=i.relatedTarget;if(!s)return!0;try{for(;s&&s!==t;)s=s.parentNode}catch(e){return!1}return s!==t},_getEvent:function(){var i=t.event;if(!i)for(var s=arguments.callee.caller;s&&(i=s.arguments[0],!i||t.Event!==i.constructor);)s=s.caller;return i}},e.DomEvent.on=e.DomEvent.addListener,e.DomEvent.off=e.DomEvent.removeListener,e.Draggable=e.Class.extend({includes:e.Mixin.Events,statics:{START:e.Browser.touch?["touchstart","mousedown"]:["mousedown"],END:{mousedown:"mouseup",touchstart:"touchend",MSPointerDown:"touchend"},MOVE:{mousedown:"mousemove",touchstart:"touchmove",MSPointerDown:"touchmove"},TAP_TOLERANCE:15},initialize:function(t,i,s){this._element=t,this._dragStartTarget=i||t,this._longPress=s&&!e.Browser.msTouch},enable:function(){if(!this._enabled){for(var t=e.Draggable.START.length-1;t>=0;t--)e.DomEvent.on(this._dragStartTarget,e.Draggable.START[t],this._onDown,this);this._enabled=!0}},disable:function(){if(this._enabled){for(var t=e.Draggable.START.length-1;t>=0;t--)e.DomEvent.off(this._dragStartTarget,e.Draggable.START[t],this._onDown,this);this._enabled=!1,this._moved=!1}},_onDown:function(t){if(!(!e.Browser.touch&&t.shiftKey||1!==t.which&&1!==t.button&&!t.touches||(e.DomEvent.preventDefault(t),e.DomEvent.stopPropagation(t),e.Draggable._disabled))){if(this._simulateClick=!0,t.touches&&t.touches.length>1)return this._simulateClick=!1,clearTimeout(this._longPressTimeout),s;var o=t.touches&&1===t.touches.length?t.touches[0]:t,n=o.target;e.Browser.touch&&"a"===n.tagName.toLowerCase()&&e.DomUtil.addClass(n,"leaflet-active"),this._moved=!1,this._moving||(this._startPoint=new e.Point(o.clientX,o.clientY),this._startPos=this._newPos=e.DomUtil.getPosition(this._element),t.touches&&1===t.touches.length&&e.Browser.touch&&this._longPress&&(this._longPressTimeout=setTimeout(e.bind(function(){var t=this._newPos&&this._newPos.distanceTo(this._startPos)||0;e.Draggable.TAP_TOLERANCE>t&&(this._simulateClick=!1,this._onUp(),this._simulateEvent("contextmenu",o))},this),1e3)),e.DomEvent.on(i,e.Draggable.MOVE[t.type],this._onMove,this),e.DomEvent.on(i,e.Draggable.END[t.type],this._onUp,this))}},_onMove:function(t){if(!(t.touches&&t.touches.length>1)){var i=t.touches&&1===t.touches.length?t.touches[0]:t,s=new e.Point(i.clientX,i.clientY),o=s.subtract(this._startPoint);(o.x||o.y)&&(e.DomEvent.preventDefault(t),this._moved||(this.fire("dragstart"),this._moved=!0,this._startPos=e.DomUtil.getPosition(this._element).subtract(o),e.Browser.touch||(e.DomUtil.disableTextSelection(),this._setMovingCursor())),this._newPos=this._startPos.add(o),this._moving=!0,e.Util.cancelAnimFrame(this._animRequest),this._animRequest=e.Util.requestAnimFrame(this._updatePosition,this,!0,this._dragStartTarget))}},_updatePosition:function(){this.fire("predrag"),e.DomUtil.setPosition(this._element,this._newPos),this.fire("drag")},_onUp:function(t){var s;if(clearTimeout(this._longPressTimeout),this._simulateClick&&t.changedTouches){var o=t.changedTouches[0],n=o.target,a=this._newPos&&this._newPos.distanceTo(this._startPos)||0;"a"===n.tagName.toLowerCase()&&e.DomUtil.removeClass(n,"leaflet-active"),e.Draggable.TAP_TOLERANCE>a&&(s=o)}e.Browser.touch||(e.DomUtil.enableTextSelection(),this._restoreCursor());for(var r in e.Draggable.MOVE)e.Draggable.MOVE.hasOwnProperty(r)&&(e.DomEvent.off(i,e.Draggable.MOVE[r],this._onMove),e.DomEvent.off(i,e.Draggable.END[r],this._onUp));this._moved&&(e.Util.cancelAnimFrame(this._animRequest),this.fire("dragend")),this._moving=!1,s&&(this._moved=!1,this._simulateEvent("click",s))},_setMovingCursor:function(){e.DomUtil.addClass(i.body,"leaflet-dragging")},_restoreCursor:function(){e.DomUtil.removeClass(i.body,"leaflet-dragging")},_simulateEvent:function(s,e){var o=i.createEvent("MouseEvents");o.initMouseEvent(s,!0,!0,t,1,e.screenX,e.screenY,e.clientX,e.clientY,!1,!1,!1,!1,0,null),e.target.dispatchEvent(o)}}),e.Handler=e.Class.extend({initialize:function(t){this._map=t},enable:function(){this._enabled||(this._enabled=!0,this.addHooks())},disable:function(){this._enabled&&(this._enabled=!1,this.removeHooks())},enabled:function(){return!!this._enabled}}),e.Map.mergeOptions({dragging:!0,inertia:!e.Browser.android23,inertiaDeceleration:3400,inertiaMaxSpeed:1/0,inertiaThreshold:e.Browser.touch?32:18,easeLinearity:.25,longPress:!0,worldCopyJump:!1}),e.Map.Drag=e.Handler.extend({addHooks:function(){if(!this._draggable){var t=this._map;this._draggable=new e.Draggable(t._mapPane,t._container,t.options.longPress),this._draggable.on({dragstart:this._onDragStart,drag:this._onDrag,dragend:this._onDragEnd},this),t.options.worldCopyJump&&(this._draggable.on("predrag",this._onPreDrag,this),t.on("viewreset",this._onViewReset,this))}this._draggable.enable()},removeHooks:function(){this._draggable.disable()},moved:function(){return this._draggable&&this._draggable._moved},_onDragStart:function(){var t=this._map;t._panAnim&&t._panAnim.stop(),t.fire("movestart").fire("dragstart"),t.options.inertia&&(this._positions=[],this._times=[])},_onDrag:function(){if(this._map.options.inertia){var t=this._lastTime=+new Date,i=this._lastPos=this._draggable._newPos;this._positions.push(i),this._times.push(t),t-this._times[0]>200&&(this._positions.shift(),this._times.shift())}this._map.fire("move").fire("drag")},_onViewReset:function(){var t=this._map.getSize()._divideBy(2),i=this._map.latLngToLayerPoint(new e.LatLng(0,0));this._initialWorldOffset=i.subtract(t).x,this._worldWidth=this._map.project(new e.LatLng(0,180)).x},_onPreDrag:function(){var t=this._worldWidth,i=Math.round(t/2),s=this._initialWorldOffset,e=this._draggable._newPos.x,o=(e-i+s)%t+i-s,n=(e+i+s)%t-i-s,a=Math.abs(o+s)i.inertiaThreshold||!this._positions[0];if(o)t.fire("moveend");else{var n=this._lastPos.subtract(this._positions[0]),a=(this._lastTime+s-this._times[0])/1e3,r=i.easeLinearity,h=n.multiplyBy(r/a),l=h.distanceTo(new e.Point(0,0)),c=Math.min(i.inertiaMaxSpeed,l),m=h.multiplyBy(c/l),u=c/(i.inertiaDeceleration*r),d=m.multiplyBy(-u/2).round();e.Util.requestAnimFrame(function(){t.panBy(d,u,r)})}t.fire("dragend"),i.maxBounds&&e.Util.requestAnimFrame(this._panInsideMaxBounds,t,!0,t._container)},_panInsideMaxBounds:function(){this.panInsideBounds(this.options.maxBounds)}}),e.Map.addInitHook("addHandler","dragging",e.Map.Drag),e.Map.mergeOptions({doubleClickZoom:!0}),e.Map.DoubleClickZoom=e.Handler.extend({addHooks:function(){this._map.on("dblclick",this._onDoubleClick)},removeHooks:function(){this._map.off("dblclick",this._onDoubleClick)},_onDoubleClick:function(t){this.setView(t.latlng,this._zoom+1)}}),e.Map.addInitHook("addHandler","doubleClickZoom",e.Map.DoubleClickZoom),e.Map.mergeOptions({scrollWheelZoom:!0}),e.Map.ScrollWheelZoom=e.Handler.extend({addHooks:function(){e.DomEvent.on(this._map._container,"mousewheel",this._onWheelScroll,this),this._delta=0},removeHooks:function(){e.DomEvent.off(this._map._container,"mousewheel",this._onWheelScroll)},_onWheelScroll:function(t){var i=e.DomEvent.getWheelDelta(t);this._delta+=i,this._lastMousePos=this._map.mouseEventToContainerPoint(t),this._startTime||(this._startTime=+new Date);var s=Math.max(40-(+new Date-this._startTime),0);clearTimeout(this._timer),this._timer=setTimeout(e.bind(this._performZoom,this),s),e.DomEvent.preventDefault(t),e.DomEvent.stopPropagation(t)},_performZoom:function(){var t=this._map,i=this._delta,s=t.getZoom();if(i=i>0?Math.ceil(i):Math.round(i),i=Math.max(Math.min(i,4),-4),i=t._limitZoom(s+i)-s,this._delta=0,this._startTime=null,i){var e=s+i,o=this._getCenterForScrollWheelZoom(e);t.setView(o,e)}},_getCenterForScrollWheelZoom:function(t){var i=this._map,s=i.getZoomScale(t),e=i.getSize()._divideBy(2),o=this._lastMousePos._subtract(e)._multiplyBy(1-1/s),n=i._getTopLeftPoint()._add(e)._add(o);return i.unproject(n)}}),e.Map.addInitHook("addHandler","scrollWheelZoom",e.Map.ScrollWheelZoom),e.extend(e.DomEvent,{_touchstart:e.Browser.msTouch?"MSPointerDown":"touchstart",_touchend:e.Browser.msTouch?"MSPointerUp":"touchend",addDoubleTapListener:function(t,s,o){function n(t){var i;if(e.Browser.msTouch?(p.push(t.pointerId),i=p.length):i=t.touches.length,!(i>1)){var s=Date.now(),o=s-(r||s);h=t.touches?t.touches[0]:t,l=o>0&&c>=o,r=s}}function a(t){if(e.Browser.msTouch){var i=p.indexOf(t.pointerId);if(-1===i)return;p.splice(i,1)}if(l){if(e.Browser.msTouch){var o,n={};for(var a in h)o=h[a],n[a]="function"==typeof o?o.bind(h):o;h=n}h.type="dblclick",s(h),r=null}}var r,h,l=!1,c=250,m="_leaflet_",u=this._touchstart,d=this._touchend,p=[];t[m+u+o]=n,t[m+d+o]=a;var _=e.Browser.msTouch?i.documentElement:t;return t.addEventListener(u,n,!1),_.addEventListener(d,a,!1),e.Browser.msTouch&&_.addEventListener("MSPointerCancel",a,!1),this},removeDoubleTapListener:function(t,s){var o="_leaflet_";return t.removeEventListener(this._touchstart,t[o+this._touchstart+s],!1),(e.Browser.msTouch?i.documentElement:t).removeEventListener(this._touchend,t[o+this._touchend+s],!1),e.Browser.msTouch&&i.documentElement.removeEventListener("MSPointerCancel",t[o+this._touchend+s],!1),this}}),e.extend(e.DomEvent,{_msTouches:[],_msDocumentListener:!1,addMsTouchListener:function(t,i,s,e){switch(i){case"touchstart":return this.addMsTouchListenerStart(t,i,s,e);case"touchend":return this.addMsTouchListenerEnd(t,i,s,e);case"touchmove":return this.addMsTouchListenerMove(t,i,s,e);default:throw"Unknown touch event type"}},addMsTouchListenerStart:function(t,s,e,o){var n="_leaflet_",a=this._msTouches,r=function(t){for(var i=!1,s=0;a.length>s;s++)if(a[s].pointerId===t.pointerId){i=!0;break}i||a.push(t),t.touches=a.slice(),t.changedTouches=[t],e(t)};if(t[n+"touchstart"+o]=r,t.addEventListener("MSPointerDown",r,!1),!this._msDocumentListener){var h=function(t){for(var i=0;a.length>i;i++)if(a[i].pointerId===t.pointerId){a.splice(i,1);break}};i.documentElement.addEventListener("MSPointerUp",h,!1),i.documentElement.addEventListener("MSPointerCancel",h,!1),this._msDocumentListener=!0}return this},addMsTouchListenerMove:function(t,i,s,e){function o(t){if(t.pointerType!==t.MSPOINTER_TYPE_MOUSE||0!==t.buttons){for(var i=0;a.length>i;i++)if(a[i].pointerId===t.pointerId){a[i]=t;break}t.touches=a.slice(),t.changedTouches=[t],s(t)}}var n="_leaflet_",a=this._msTouches;return t[n+"touchmove"+e]=o,t.addEventListener("MSPointerMove",o,!1),this},addMsTouchListenerEnd:function(t,i,s,e){var o="_leaflet_",n=this._msTouches,a=function(t){for(var i=0;n.length>i;i++)if(n[i].pointerId===t.pointerId){n.splice(i,1);break}t.touches=n.slice(),t.changedTouches=[t],s(t)};return t[o+"touchend"+e]=a,t.addEventListener("MSPointerUp",a,!1),t.addEventListener("MSPointerCancel",a,!1),this},removeMsTouchListener:function(t,i,s){var e="_leaflet_",o=t[e+i+s];switch(i){case"touchstart":t.removeEventListener("MSPointerDown",o,!1);break;case"touchmove":t.removeEventListener("MSPointerMove",o,!1);break;case"touchend":t.removeEventListener("MSPointerUp",o,!1),t.removeEventListener("MSPointerCancel",o,!1)}return this}}),e.Map.mergeOptions({touchZoom:e.Browser.touch&&!e.Browser.android23}),e.Map.TouchZoom=e.Handler.extend({addHooks:function(){e.DomEvent.on(this._map._container,"touchstart",this._onTouchStart,this)},removeHooks:function(){e.DomEvent.off(this._map._container,"touchstart",this._onTouchStart,this)},_onTouchStart:function(t){var s=this._map;if(t.touches&&2===t.touches.length&&!s._animatingZoom&&!this._zooming){var o=s.mouseEventToLayerPoint(t.touches[0]),n=s.mouseEventToLayerPoint(t.touches[1]),a=s._getCenterLayerPoint();this._startCenter=o.add(n)._divideBy(2),this._startDist=o.distanceTo(n),this._moved=!1,this._zooming=!0,this._centerOffset=a.subtract(this._startCenter),s._panAnim&&s._panAnim.stop(),e.DomEvent.on(i,"touchmove",this._onTouchMove,this).on(i,"touchend",this._onTouchEnd,this),e.DomEvent.preventDefault(t)}},_onTouchMove:function(t){if(t.touches&&2===t.touches.length){var i=this._map,s=i.mouseEventToLayerPoint(t.touches[0]),o=i.mouseEventToLayerPoint(t.touches[1]);this._scale=s.distanceTo(o)/this._startDist,this._delta=s._add(o)._divideBy(2)._subtract(this._startCenter),1!==this._scale&&(this._moved||(e.DomUtil.addClass(i._mapPane,"leaflet-zoom-anim leaflet-touching"),i.fire("movestart").fire("zoomstart")._prepareTileBg(),this._moved=!0),e.Util.cancelAnimFrame(this._animRequest),this._animRequest=e.Util.requestAnimFrame(this._updateOnMove,this,!0,this._map._container),e.DomEvent.preventDefault(t))}},_updateOnMove:function(){var t=this._map,i=this._getScaleOrigin(),s=t.layerPointToLatLng(i);t.fire("zoomanim",{center:s,zoom:t.getScaleZoom(this._scale)}),t._tileBg.style[e.DomUtil.TRANSFORM]=e.DomUtil.getTranslateString(this._delta)+" "+e.DomUtil.getScaleString(this._scale,this._startCenter)},_onTouchEnd:function(){if(this._moved&&this._zooming){var t=this._map;this._zooming=!1,e.DomUtil.removeClass(t._mapPane,"leaflet-touching"),e.DomEvent.off(i,"touchmove",this._onTouchMove).off(i,"touchend",this._onTouchEnd);var s=this._getScaleOrigin(),o=t.layerPointToLatLng(s),n=t.getZoom(),a=t.getScaleZoom(this._scale)-n,r=a>0?Math.ceil(a):Math.floor(a),h=t._limitZoom(n+r);t.fire("zoomanim",{center:o,zoom:h}),t._runAnimation(o,h,t.getZoomScale(h)/this._scale,s,!0)}},_getScaleOrigin:function(){var t=this._centerOffset.subtract(this._delta).divideBy(this._scale);return this._startCenter.add(t)}}),e.Map.addInitHook("addHandler","touchZoom",e.Map.TouchZoom),e.Map.mergeOptions({boxZoom:!0}),e.Map.BoxZoom=e.Handler.extend({initialize:function(t){this._map=t,this._container=t._container,this._pane=t._panes.overlayPane},addHooks:function(){e.DomEvent.on(this._container,"mousedown",this._onMouseDown,this)},removeHooks:function(){e.DomEvent.off(this._container,"mousedown",this._onMouseDown)},_onMouseDown:function(t){return!t.shiftKey||1!==t.which&&1!==t.button?!1:(e.DomUtil.disableTextSelection(),this._startLayerPoint=this._map.mouseEventToLayerPoint(t),this._box=e.DomUtil.create("div","leaflet-zoom-box",this._pane),e.DomUtil.setPosition(this._box,this._startLayerPoint),this._container.style.cursor="crosshair",e.DomEvent.on(i,"mousemove",this._onMouseMove,this).on(i,"mouseup",this._onMouseUp,this).preventDefault(t),this._map.fire("boxzoomstart"),s)},_onMouseMove:function(t){var i=this._startLayerPoint,s=this._box,o=this._map.mouseEventToLayerPoint(t),n=o.subtract(i),a=new e.Point(Math.min(o.x,i.x),Math.min(o.y,i.y));e.DomUtil.setPosition(s,a),s.style.width=Math.max(0,Math.abs(n.x)-4)+"px",s.style.height=Math.max(0,Math.abs(n.y)-4)+"px"},_onMouseUp:function(t){this._pane.removeChild(this._box),this._container.style.cursor="",e.DomUtil.enableTextSelection(),e.DomEvent.off(i,"mousemove",this._onMouseMove).off(i,"mouseup",this._onMouseUp);var s=this._map,o=s.mouseEventToLayerPoint(t);if(!this._startLayerPoint.equals(o)){var n=new e.LatLngBounds(s.layerPointToLatLng(this._startLayerPoint),s.layerPointToLatLng(o));s.fitBounds(n),s.fire("boxzoomend",{boxZoomBounds:n})}}}),e.Map.addInitHook("addHandler","boxZoom",e.Map.BoxZoom),e.Map.mergeOptions({keyboard:!0,keyboardPanOffset:80,keyboardZoomOffset:1}),e.Map.Keyboard=e.Handler.extend({keyCodes:{left:[37],right:[39],down:[40],up:[38],zoomIn:[187,107,61],zoomOut:[189,109,173]},initialize:function(t){this._map=t,this._setPanOffset(t.options.keyboardPanOffset),this._setZoomOffset(t.options.keyboardZoomOffset)},addHooks:function(){var t=this._map._container;-1===t.tabIndex&&(t.tabIndex="0"),e.DomEvent.on(t,"focus",this._onFocus,this).on(t,"blur",this._onBlur,this).on(t,"mousedown",this._onMouseDown,this),this._map.on("focus",this._addHooks,this).on("blur",this._removeHooks,this)},removeHooks:function(){this._removeHooks();var t=this._map._container;e.DomEvent.off(t,"focus",this._onFocus,this).off(t,"blur",this._onBlur,this).off(t,"mousedown",this._onMouseDown,this),this._map.off("focus",this._addHooks,this).off("blur",this._removeHooks,this)},_onMouseDown:function(){this._focused||this._map._container.focus()},_onFocus:function(){this._focused=!0,this._map.fire("focus")},_onBlur:function(){this._focused=!1,this._map.fire("blur")},_setPanOffset:function(t){var i,s,e=this._panKeys={},o=this.keyCodes;for(i=0,s=o.left.length;s>i;i++)e[o.left[i]]=[-1*t,0];for(i=0,s=o.right.length;s>i;i++)e[o.right[i]]=[t,0];for(i=0,s=o.down.length;s>i;i++)e[o.down[i]]=[0,t];for(i=0,s=o.up.length;s>i;i++)e[o.up[i]]=[0,-1*t]},_setZoomOffset:function(t){var i,s,e=this._zoomKeys={},o=this.keyCodes;for(i=0,s=o.zoomIn.length;s>i;i++)e[o.zoomIn[i]]=t;for(i=0,s=o.zoomOut.length;s>i;i++)e[o.zoomOut[i]]=-t},_addHooks:function(){e.DomEvent.on(i,"keydown",this._onKeyDown,this)},_removeHooks:function(){e.DomEvent.off(i,"keydown",this._onKeyDown,this)},_onKeyDown:function(t){var i=t.keyCode,s=this._map;if(this._panKeys.hasOwnProperty(i))s.panBy(this._panKeys[i]),s.options.maxBounds&&s.panInsideBounds(s.options.maxBounds);else{if(!this._zoomKeys.hasOwnProperty(i))return;s.setZoom(s.getZoom()+this._zoomKeys[i])}e.DomEvent.stop(t)}}),e.Map.addInitHook("addHandler","keyboard",e.Map.Keyboard),e.Handler.MarkerDrag=e.Handler.extend({initialize:function(t){this._marker=t},addHooks:function(){var t=this._marker._icon;this._draggable||(this._draggable=new e.Draggable(t,t).on("dragstart",this._onDragStart,this).on("drag",this._onDrag,this).on("dragend",this._onDragEnd,this)),this._draggable.enable()},removeHooks:function(){this._draggable.disable()},moved:function(){return this._draggable&&this._draggable._moved},_onDragStart:function(){this._marker.closePopup().fire("movestart").fire("dragstart")},_onDrag:function(){var t=this._marker,i=t._shadow,s=e.DomUtil.getPosition(t._icon),o=t._map.layerPointToLatLng(s);i&&e.DomUtil.setPosition(i,s),t._latlng=o,t.fire("move",{latlng:o}).fire("drag") +},_onDragEnd:function(){this._marker.fire("moveend").fire("dragend")}}),e.Handler.PolyEdit=e.Handler.extend({options:{icon:new e.DivIcon({iconSize:new e.Point(8,8),className:"leaflet-div-icon leaflet-editing-icon"})},initialize:function(t,i){this._poly=t,e.setOptions(this,i)},addHooks:function(){this._poly._map&&(this._markerGroup||this._initMarkers(),this._poly._map.addLayer(this._markerGroup))},removeHooks:function(){this._poly._map&&(this._poly._map.removeLayer(this._markerGroup),delete this._markerGroup,delete this._markers)},updateMarkers:function(){this._markerGroup.clearLayers(),this._initMarkers()},_initMarkers:function(){this._markerGroup||(this._markerGroup=new e.LayerGroup),this._markers=[];var t,i,s,o,n=this._poly._latlngs;for(t=0,s=n.length;s>t;t++)o=this._createMarker(n[t],t),o.on("click",this._onMarkerClick,this),this._markers.push(o);var a,r;for(t=0,i=s-1;s>t;i=t++)(0!==t||e.Polygon&&this._poly instanceof e.Polygon)&&(a=this._markers[i],r=this._markers[t],this._createMiddleMarker(a,r),this._updatePrevNext(a,r))},_createMarker:function(t,i){var s=new e.Marker(t,{draggable:!0,icon:this.options.icon});return s._origLatLng=t,s._index=i,s.on("drag",this._onMarkerDrag,this),s.on("dragend",this._fireEdit,this),this._markerGroup.addLayer(s),s},_fireEdit:function(){this._poly.fire("edit")},_onMarkerDrag:function(t){var i=t.target;e.extend(i._origLatLng,i._latlng),i._middleLeft&&i._middleLeft.setLatLng(this._getMiddleLatLng(i._prev,i)),i._middleRight&&i._middleRight.setLatLng(this._getMiddleLatLng(i,i._next)),this._poly.redraw()},_onMarkerClick:function(t){if(!(3>this._poly._latlngs.length)){var i=t.target,s=i._index;this._markerGroup.removeLayer(i),this._markers.splice(s,1),this._poly.spliceLatLngs(s,1),this._updateIndexes(s,-1),this._updatePrevNext(i._prev,i._next),i._middleLeft&&this._markerGroup.removeLayer(i._middleLeft),i._middleRight&&this._markerGroup.removeLayer(i._middleRight),i._prev&&i._next?this._createMiddleMarker(i._prev,i._next):i._prev?i._next||(i._prev._middleRight=null):i._next._middleLeft=null,this._poly.fire("edit")}},_updateIndexes:function(t,i){this._markerGroup.eachLayer(function(s){s._index>t&&(s._index+=i)})},_createMiddleMarker:function(t,i){var s,e,o,n=this._getMiddleLatLng(t,i),a=this._createMarker(n);a.setOpacity(.6),t._middleRight=i._middleLeft=a,e=function(){var e=i._index;a._index=e,a.off("click",s).on("click",this._onMarkerClick,this),n.lat=a.getLatLng().lat,n.lng=a.getLatLng().lng,this._poly.spliceLatLngs(e,0,n),this._markers.splice(e,0,a),a.setOpacity(1),this._updateIndexes(e,1),i._index++,this._updatePrevNext(t,a),this._updatePrevNext(a,i)},o=function(){a.off("dragstart",e,this),a.off("dragend",o,this),this._createMiddleMarker(t,a),this._createMiddleMarker(a,i)},s=function(){e.call(this),o.call(this),this._poly.fire("edit")},a.on("click",s,this).on("dragstart",e,this).on("dragend",o,this),this._markerGroup.addLayer(a)},_updatePrevNext:function(t,i){t&&(t._next=i),i&&(i._prev=t)},_getMiddleLatLng:function(t,i){var s=this._poly._map,e=s.latLngToLayerPoint(t.getLatLng()),o=s.latLngToLayerPoint(i.getLatLng());return s.layerPointToLatLng(e._add(o)._divideBy(2))}}),e.Polyline.addInitHook(function(){e.Handler.PolyEdit&&(this.editing=new e.Handler.PolyEdit(this),this.options.editable&&this.editing.enable()),this.on("add",function(){this.editing&&this.editing.enabled()&&this.editing.addHooks()}),this.on("remove",function(){this.editing&&this.editing.enabled()&&this.editing.removeHooks()})}),e.Control=e.Class.extend({options:{position:"topright"},initialize:function(t){e.setOptions(this,t)},getPosition:function(){return this.options.position},setPosition:function(t){var i=this._map;return i&&i.removeControl(this),this.options.position=t,i&&i.addControl(this),this},addTo:function(t){this._map=t;var i=this._container=this.onAdd(t),s=this.getPosition(),o=t._controlCorners[s];return e.DomUtil.addClass(i,"leaflet-control"),-1!==s.indexOf("bottom")?o.insertBefore(i,o.firstChild):o.appendChild(i),this},removeFrom:function(t){var i=this.getPosition(),s=t._controlCorners[i];return s.removeChild(this._container),this._map=null,this.onRemove&&this.onRemove(t),this}}),e.control=function(t){return new e.Control(t)},e.Map.include({addControl:function(t){return t.addTo(this),this},removeControl:function(t){return t.removeFrom(this),this},_initControlPos:function(){function t(t,n){var a=s+t+" "+s+n;i[t+n]=e.DomUtil.create("div",a,o)}var i=this._controlCorners={},s="leaflet-",o=this._controlContainer=e.DomUtil.create("div",s+"control-container",this._container);t("top","left"),t("top","right"),t("bottom","left"),t("bottom","right")}}),e.Control.Zoom=e.Control.extend({options:{position:"topleft"},onAdd:function(t){var i="leaflet-control-zoom",s="leaflet-bar",o=s+"-part",n=e.DomUtil.create("div",i+" "+s);return this._map=t,this._zoomInButton=this._createButton("+","Zoom in",i+"-in "+o+" "+o+"-top",n,this._zoomIn,this),this._zoomOutButton=this._createButton("-","Zoom out",i+"-out "+o+" "+o+"-bottom",n,this._zoomOut,this),t.on("zoomend",this._updateDisabled,this),n},onRemove:function(t){t.off("zoomend",this._updateDisabled,this)},_zoomIn:function(t){this._map.zoomIn(t.shiftKey?3:1)},_zoomOut:function(t){this._map.zoomOut(t.shiftKey?3:1)},_createButton:function(t,i,s,o,n,a){var r=e.DomUtil.create("a",s,o);r.innerHTML=t,r.href="#",r.title=i;var h=e.DomEvent.stopPropagation;return e.DomEvent.on(r,"click",h).on(r,"mousedown",h).on(r,"dblclick",h).on(r,"click",e.DomEvent.preventDefault).on(r,"click",n,a),r},_updateDisabled:function(){var t=this._map,i="leaflet-control-zoom-disabled";e.DomUtil.removeClass(this._zoomInButton,i),e.DomUtil.removeClass(this._zoomOutButton,i),t._zoom===t.getMinZoom()&&e.DomUtil.addClass(this._zoomOutButton,i),t._zoom===t.getMaxZoom()&&e.DomUtil.addClass(this._zoomInButton,i)}}),e.Map.mergeOptions({zoomControl:!0}),e.Map.addInitHook(function(){this.options.zoomControl&&(this.zoomControl=new e.Control.Zoom,this.addControl(this.zoomControl))}),e.control.zoom=function(t){return new e.Control.Zoom(t)},e.Control.Attribution=e.Control.extend({options:{position:"bottomright",prefix:'Powered by Leaflet'},initialize:function(t){e.setOptions(this,t),this._attributions={}},onAdd:function(t){return this._container=e.DomUtil.create("div","leaflet-control-attribution"),e.DomEvent.disableClickPropagation(this._container),t.on("layeradd",this._onLayerAdd,this).on("layerremove",this._onLayerRemove,this),this._update(),this._container},onRemove:function(t){t.off("layeradd",this._onLayerAdd).off("layerremove",this._onLayerRemove)},setPrefix:function(t){return this.options.prefix=t,this._update(),this},addAttribution:function(t){return t?(this._attributions[t]||(this._attributions[t]=0),this._attributions[t]++,this._update(),this):s},removeAttribution:function(t){return t?(this._attributions[t]--,this._update(),this):s},_update:function(){if(this._map){var t=[];for(var i in this._attributions)this._attributions.hasOwnProperty(i)&&this._attributions[i]&&t.push(i);var s=[];this.options.prefix&&s.push(this.options.prefix),t.length&&s.push(t.join(", ")),this._container.innerHTML=s.join(" — ")}},_onLayerAdd:function(t){t.layer.getAttribution&&this.addAttribution(t.layer.getAttribution())},_onLayerRemove:function(t){t.layer.getAttribution&&this.removeAttribution(t.layer.getAttribution())}}),e.Map.mergeOptions({attributionControl:!0}),e.Map.addInitHook(function(){this.options.attributionControl&&(this.attributionControl=(new e.Control.Attribution).addTo(this))}),e.control.attribution=function(t){return new e.Control.Attribution(t)},e.Control.Scale=e.Control.extend({options:{position:"bottomleft",maxWidth:100,metric:!0,imperial:!0,updateWhenIdle:!1},onAdd:function(t){this._map=t;var i="leaflet-control-scale",s=e.DomUtil.create("div",i),o=this.options;return this._addScales(o,i,s),t.on(o.updateWhenIdle?"moveend":"move",this._update,this),t.whenReady(this._update,this),s},onRemove:function(t){t.off(this.options.updateWhenIdle?"moveend":"move",this._update,this)},_addScales:function(t,i,s){t.metric&&(this._mScale=e.DomUtil.create("div",i+"-line",s)),t.imperial&&(this._iScale=e.DomUtil.create("div",i+"-line",s))},_update:function(){var t=this._map.getBounds(),i=t.getCenter().lat,s=6378137*Math.PI*Math.cos(i*Math.PI/180),e=s*(t.getNorthEast().lng-t.getSouthWest().lng)/180,o=this._map.getSize(),n=this.options,a=0;o.x>0&&(a=e*(n.maxWidth/o.x)),this._updateScales(n,a)},_updateScales:function(t,i){t.metric&&i&&this._updateMetric(i),t.imperial&&i&&this._updateImperial(i)},_updateMetric:function(t){var i=this._getRoundNum(t);this._mScale.style.width=this._getScaleWidth(i/t)+"px",this._mScale.innerHTML=1e3>i?i+" m":i/1e3+" km"},_updateImperial:function(t){var i,s,e,o=3.2808399*t,n=this._iScale;o>5280?(i=o/5280,s=this._getRoundNum(i),n.style.width=this._getScaleWidth(s/i)+"px",n.innerHTML=s+" mi"):(e=this._getRoundNum(o),n.style.width=this._getScaleWidth(e/o)+"px",n.innerHTML=e+" ft")},_getScaleWidth:function(t){return Math.round(this.options.maxWidth*t)-10},_getRoundNum:function(t){var i=Math.pow(10,(Math.floor(t)+"").length-1),s=t/i;return s=s>=10?10:s>=5?5:s>=3?3:s>=2?2:1,i*s}}),e.control.scale=function(t){return new e.Control.Scale(t)},e.Control.Layers=e.Control.extend({options:{collapsed:!0,position:"topright",autoZIndex:!0},initialize:function(t,i,s){e.setOptions(this,s),this._layers={},this._lastZIndex=0,this._handlingClick=!1;for(var o in t)t.hasOwnProperty(o)&&this._addLayer(t[o],o);for(o in i)i.hasOwnProperty(o)&&this._addLayer(i[o],o,!0)},onAdd:function(t){return this._initLayout(),this._update(),t.on("layeradd",this._onLayerChange,this).on("layerremove",this._onLayerChange,this),this._container},onRemove:function(t){t.off("layeradd",this._onLayerChange).off("layerremove",this._onLayerChange)},addBaseLayer:function(t,i){return this._addLayer(t,i),this._update(),this},addOverlay:function(t,i){return this._addLayer(t,i,!0),this._update(),this},removeLayer:function(t){var i=e.stamp(t);return delete this._layers[i],this._update(),this},_initLayout:function(){var t="leaflet-control-layers",i=this._container=e.DomUtil.create("div",t);e.Browser.touch?e.DomEvent.on(i,"click",e.DomEvent.stopPropagation):(e.DomEvent.disableClickPropagation(i),e.DomEvent.on(i,"mousewheel",e.DomEvent.stopPropagation));var s=this._form=e.DomUtil.create("form",t+"-list");if(this.options.collapsed){e.DomEvent.on(i,"mouseover",this._expand,this).on(i,"mouseout",this._collapse,this);var o=this._layersLink=e.DomUtil.create("a",t+"-toggle",i);o.href="#",o.title="Layers",e.Browser.touch?e.DomEvent.on(o,"click",e.DomEvent.stopPropagation).on(o,"click",e.DomEvent.preventDefault).on(o,"click",this._expand,this):e.DomEvent.on(o,"focus",this._expand,this),this._map.on("movestart",this._collapse,this)}else this._expand();this._baseLayersList=e.DomUtil.create("div",t+"-base",s),this._separator=e.DomUtil.create("div",t+"-separator",s),this._overlaysList=e.DomUtil.create("div",t+"-overlays",s),i.appendChild(s)},_addLayer:function(t,i,s){var o=e.stamp(t);this._layers[o]={layer:t,name:i,overlay:s},this.options.autoZIndex&&t.setZIndex&&(this._lastZIndex++,t.setZIndex(this._lastZIndex))},_update:function(){if(this._container){this._baseLayersList.innerHTML="",this._overlaysList.innerHTML="";var t=!1,i=!1;for(var s in this._layers)if(this._layers.hasOwnProperty(s)){var e=this._layers[s];this._addItem(e),i=i||e.overlay,t=t||!e.overlay}this._separator.style.display=i&&t?"":"none"}},_onLayerChange:function(t){var i=e.stamp(t.layer);this._layers[i]&&!this._handlingClick&&this._update()},_createRadioElement:function(t,s){var e='t;t++)i=o[t],s=this._layers[i.layerId],i.checked&&!this._map.hasLayer(s.layer)?(this._map.addLayer(s.layer),s.overlay||(e=s.layer)):!i.checked&&this._map.hasLayer(s.layer)&&this._map.removeLayer(s.layer);e&&(this._map.setZoom(this._map.getZoom()),this._map.fire("baselayerchange",{layer:e})),this._handlingClick=!1},_expand:function(){e.DomUtil.addClass(this._container,"leaflet-control-layers-expanded")},_collapse:function(){this._container.className=this._container.className.replace(" leaflet-control-layers-expanded","")}}),e.control.layers=function(t,i,s){return new e.Control.Layers(t,i,s)},e.PosAnimation=e.Class.extend({includes:e.Mixin.Events,run:function(t,i,s,o){this.stop(),this._el=t,this._inProgress=!0,this.fire("start"),t.style[e.DomUtil.TRANSITION]="all "+(s||.25)+"s cubic-bezier(0,0,"+(o||.5)+",1)",e.DomEvent.on(t,e.DomUtil.TRANSITION_END,this._onTransitionEnd,this),e.DomUtil.setPosition(t,i),e.Util.falseFn(t.offsetWidth),this._stepTimer=setInterval(e.bind(this.fire,this,"step"),50)},stop:function(){this._inProgress&&(e.DomUtil.setPosition(this._el,this._getPos()),this._onTransitionEnd(),e.Util.falseFn(this._el.offsetWidth))},_transformRe:/(-?[\d\.]+), (-?[\d\.]+)\)/,_getPos:function(){var i,s,o,n=this._el,a=t.getComputedStyle(n);return e.Browser.any3d?(o=a[e.DomUtil.TRANSFORM].match(this._transformRe),i=parseFloat(o[1]),s=parseFloat(o[2])):(i=parseFloat(a.left),s=parseFloat(a.top)),new e.Point(i,s,!0)},_onTransitionEnd:function(){e.DomEvent.off(this._el,e.DomUtil.TRANSITION_END,this._onTransitionEnd,this),this._inProgress&&(this._inProgress=!1,this._el.style[e.DomUtil.TRANSITION]="",clearInterval(this._stepTimer),this.fire("step").fire("end"))}}),e.Map.include({setView:function(t,i,s){i=this._limitZoom(i);var e=this._zoom!==i;if(this._loaded&&!s&&this._layers){this._panAnim&&this._panAnim.stop();var o=e?this._zoomToIfClose&&this._zoomToIfClose(t,i):this._panByIfClose(t);if(o)return clearTimeout(this._sizeTimer),this}return this._resetView(t,i),this},panBy:function(t,i,s){if(t=e.point(t),!t.x&&!t.y)return this;this._panAnim||(this._panAnim=new e.PosAnimation,this._panAnim.on({step:this._onPanTransitionStep,end:this._onPanTransitionEnd},this)),this.fire("movestart"),e.DomUtil.addClass(this._mapPane,"leaflet-pan-anim");var o=e.DomUtil.getPosition(this._mapPane).subtract(t)._round();return this._panAnim.run(this._mapPane,o,i||.25,s),this},_onPanTransitionStep:function(){this.fire("move")},_onPanTransitionEnd:function(){e.DomUtil.removeClass(this._mapPane,"leaflet-pan-anim"),this.fire("moveend")},_panByIfClose:function(t){var i=this._getCenterOffset(t)._floor();return this._offsetIsWithinView(i)?(this.panBy(i),!0):!1},_offsetIsWithinView:function(t,i){var s=i||1,e=this.getSize();return Math.abs(t.x)<=e.x*s&&Math.abs(t.y)<=e.y*s}}),e.PosAnimation=e.DomUtil.TRANSITION?e.PosAnimation:e.PosAnimation.extend({run:function(t,i,s,o){this.stop(),this._el=t,this._inProgress=!0,this._duration=s||.25,this._easeOutPower=1/Math.max(o||.5,.2),this._startPos=e.DomUtil.getPosition(t),this._offset=i.subtract(this._startPos),this._startTime=+new Date,this.fire("start"),this._animate()},stop:function(){this._inProgress&&(this._step(),this._complete())},_animate:function(){this._animId=e.Util.requestAnimFrame(this._animate,this),this._step()},_step:function(){var t=+new Date-this._startTime,i=1e3*this._duration;i>t?this._runFrame(this._easeOut(t/i)):(this._runFrame(1),this._complete())},_runFrame:function(t){var i=this._startPos.add(this._offset.multiplyBy(t));e.DomUtil.setPosition(this._el,i),this.fire("step")},_complete:function(){e.Util.cancelAnimFrame(this._animId),this._inProgress=!1,this.fire("end")},_easeOut:function(t){return 1-Math.pow(1-t,this._easeOutPower)}}),e.Map.mergeOptions({zoomAnimation:e.DomUtil.TRANSITION&&!e.Browser.android23&&!e.Browser.mobileOpera}),e.DomUtil.TRANSITION&&e.Map.addInitHook(function(){e.DomEvent.on(this._mapPane,e.DomUtil.TRANSITION_END,this._catchTransitionEnd,this)}),e.Map.include(e.DomUtil.TRANSITION?{_zoomToIfClose:function(t,i){if(this._animatingZoom)return!0;if(!this.options.zoomAnimation)return!1;var s=this.getZoomScale(i),o=this._getCenterOffset(t)._divideBy(1-1/s);if(!this._offsetIsWithinView(o,1))return!1;e.DomUtil.addClass(this._mapPane,"leaflet-zoom-anim"),this.fire("movestart").fire("zoomstart"),this.fire("zoomanim",{center:t,zoom:i});var n=this._getCenterLayerPoint().add(o);return this._prepareTileBg(),this._runAnimation(t,i,s,n),!0},_catchTransitionEnd:function(){this._animatingZoom&&this._onZoomTransitionEnd()},_runAnimation:function(t,i,s,o,n){this._animateToCenter=t,this._animateToZoom=i,this._animatingZoom=!0,e.Draggable&&(e.Draggable._disabled=!0);var a=e.DomUtil.TRANSFORM,r=this._tileBg;clearTimeout(this._clearTileBgTimer),e.Util.falseFn(r.offsetWidth);var h=e.DomUtil.getScaleString(s,o),l=r.style[a];r.style[a]=n?l+" "+h:h+" "+l},_prepareTileBg:function(){var t=this._tilePane,i=this._tileBg;if(i&&this._getLoadedTilesPercentage(i)>.5&&.5>this._getLoadedTilesPercentage(t))return t.style.visibility="hidden",t.empty=!0,this._stopLoadingImages(t),s;i||(i=this._tileBg=this._createPane("leaflet-tile-pane",this._mapPane),i.style.zIndex=1),i.style[e.DomUtil.TRANSFORM]="",i.style.visibility="hidden",i.empty=!0,t.empty=!1,this._tilePane=this._panes.tilePane=i;var o=this._tileBg=t;e.DomUtil.addClass(o,"leaflet-zoom-animated"),this._stopLoadingImages(o)},_getLoadedTilesPercentage:function(t){var i,s,e=t.getElementsByTagName("img"),o=0;for(i=0,s=e.length;s>i;i++)e[i].complete&&o++;return o/s},_stopLoadingImages:function(t){var i,s,o,n=Array.prototype.slice.call(t.getElementsByTagName("img"));for(i=0,s=n.length;s>i;i++)o=n[i],o.complete||(o.onload=e.Util.falseFn,o.onerror=e.Util.falseFn,o.src=e.Util.emptyImageUrl,o.parentNode.removeChild(o))},_onZoomTransitionEnd:function(){this._restoreTileFront(),e.DomUtil.removeClass(this._mapPane,"leaflet-zoom-anim"),e.Util.falseFn(this._tileBg.offsetWidth),this._animatingZoom=!1,this._resetView(this._animateToCenter,this._animateToZoom,!0,!0),e.Draggable&&(e.Draggable._disabled=!1)},_restoreTileFront:function(){this._tilePane.innerHTML="",this._tilePane.style.visibility="",this._tilePane.style.zIndex=2,this._tileBg.style.zIndex=1},_clearTileBg:function(){this._animatingZoom||this.touchZoom._zooming||(this._tileBg.innerHTML="")}}:{}),e.Map.include({_defaultLocateOptions:{watch:!1,setView:!1,maxZoom:1/0,timeout:1e4,maximumAge:0,enableHighAccuracy:!1},locate:function(t){if(t=this._locationOptions=e.extend(this._defaultLocateOptions,t),!navigator.geolocation)return this._handleGeolocationError({code:0,message:"Geolocation not supported."}),this;var i=e.bind(this._handleGeolocationResponse,this),s=e.bind(this._handleGeolocationError,this);return t.watch?this._locationWatchId=navigator.geolocation.watchPosition(i,s,t):navigator.geolocation.getCurrentPosition(i,s,t),this},stopLocate:function(){return navigator.geolocation&&navigator.geolocation.clearWatch(this._locationWatchId),this},_handleGeolocationError:function(t){var i=t.code,s=t.message||(1===i?"permission denied":2===i?"position unavailable":"timeout");this._locationOptions.setView&&!this._loaded&&this.fitWorld(),this.fire("locationerror",{code:i,message:"Geolocation error: "+s+"."})},_handleGeolocationResponse:function(t){var i=180*t.coords.accuracy/4e7,s=2*i,o=t.coords.latitude,n=t.coords.longitude,a=new e.LatLng(o,n),r=new e.LatLng(o-i,n-s),h=new e.LatLng(o+i,n+s),l=new e.LatLngBounds(r,h),c=this._locationOptions;if(c.setView){var m=Math.min(this.getBoundsZoom(l),c.maxZoom);this.setView(a,m)}this.fire("locationfound",{latlng:a,bounds:l,accuracy:t.coords.accuracy})}})}(this,document),L.Proj={},L.Proj._isProj4Proj=function(t){return t.projName!==void 0},L.Proj.Projection=L.Class.extend({initialize:function(t,i){if(L.Proj._isProj4Proj(t))this._proj=t;else{var s=t;Proj4js.defs[s]=i,this._proj=new Proj4js.Proj(s)}},project:function(t){var i=new L.Point(t.lng,t.lat);return Proj4js.transform(Proj4js.WGS84,this._proj,i)},unproject:function(t,i){var s=Proj4js.transform(this._proj,Proj4js.WGS84,t.clone());return new L.LatLng(s.y,s.x,i)}}),L.Proj.CRS=L.Class.extend({includes:L.CRS,options:{transformation:new L.Transformation(1,0,-1,0)},initialize:function(t,i,s){var e,o,n,a;L.Proj._isProj4Proj(t)?(o=t,e=o.srsCode,a=i||{},this.projection=new L.Proj.Projection(o)):(e=t,n=i,a=s||{},this.projection=new L.Proj.Projection(e,n)),L.Util.setOptions(this,a),this.code=e,this.transformation=this.options.transformation,this.options.origin&&(this.transformation=new L.Transformation(1,-this.options.origin[0],-1,this.options.origin[1])),this.options.scales?this.scale=function(t){return this.options.scales[t]}:this.options.resolutions&&(this.scale=function(t){return 1/this.options.resolutions[t]})}}),L.Proj.CRS.TMS=L.Proj.CRS.extend({initialize:function(t,i,s,e){if(L.Proj._isProj4Proj(t)){var o=t,n=i,a=s||{};a.origin=[n[0],n[3]],L.Proj.CRS.prototype.initialize(o,a)}else{var r=t,h=i,n=s,a=e||{};a.origin=[n[0],n[3]],L.Proj.CRS.prototype.initialize(r,h,a)}this.projectedBounds=n}}),L.Proj.TileLayer={},L.Proj.TileLayer.TMS=L.TileLayer.extend({options:{tms:!0,continuousWorld:!0},initialize:function(t,i,s){if(!(i instanceof L.Proj.CRS.TMS))throw Error("CRS is not L.Proj.CRS.TMS.");L.TileLayer.prototype.initialize.call(this,t,s),this.crs=i;for(var e=this.options.minZoom;this.options.maxZoom>e;e++){var o=(this.crs.projectedBounds[3]-this.crs.projectedBounds[1])/this._projectedTileSize(e);if(Math.abs(o-Math.round(o))>.001)throw Error("Projected bounds does not match grid at zoom "+e)}},getTileUrl:function(t){var i=Math.round((this.crs.projectedBounds[3]-this.crs.projectedBounds[1])/this._projectedTileSize(this._map.getZoom()));return L.Util.template(this._url,L.Util.extend({s:this._getSubdomain(t),z:this._getZoomForUrl(),x:t.x,y:i-t.y-1},this.options))},_projectedTileSize:function(t){return this.options.tileSize/this.crs.scale(t)}}),"undefined"!=typeof module&&(module.exports=L.Proj),"undefined"!=typeof L&&L.CRS!==void 0&&(L.CRS.proj4js=function(){return function(t,i,s,e){return e=e||{},s&&(e.transformation=s),new L.Proj.CRS(t,i,e)}}()),L.Control.MousePosition=L.Control.extend({options:{position:"bottomleft",separator:" : ",emptyString:"Unavailable",lngFirst:!1,numDigits:5,lngFormatter:void 0,latFormatter:void 0},onAdd:function(t){return this._container=L.DomUtil.create("div","leaflet-control-mouseposition"),L.DomEvent.disableClickPropagation(this._container),t.on("mousemove",this._onMouseMove,this),this._container.innerHTML=this.options.emptyString,this._container},onRemove:function(t){t.off("mousemove",this._onMouseMove)},_onMouseMove:function(t){var i=L.Util.formatNum(t.latlng.lng,this.options.numDigits),s=L.Util.formatNum(t.latlng.lat,this.options.numDigits);this.options.lngFormatter&&(i=this.options.lngFormatter(i)),this.options.latFormatter&&(s=this.options.latFormatter(s));var e=this.options.lngFirst?i+this.options.separator+s:s+this.options.separator+i;this._container.innerHTML=e}}),L.Map.mergeOptions({positionControl:!1}),L.Map.addInitHook(function(){this.options.positionControl&&(this.positionControl=new L.Control.MousePosition,this.addControl(this.positionControl))}),L.control.mousePosition=function(t){return new L.Control.MousePosition(t)},function(t,i){L.KSP={},L.KSP.version="0.2.1",L.KSP.CRS={},L.KSP.CRS.EPSG4326=new L.Proj.CRS.TMS(new Proj4js.Proj("EPSG:4326"),[-180,-90,180,90],{resolutions:[.703125,.3515625,.17578125,.087890625,.0439453125,.02197265625]}),L.KSP.CelestialBody=L.Class.extend({initialize:function(t){if(!t.hasOwnProperty("id"))throw Error("must specify id");if(!t.hasOwnProperty("name"))throw Error("must specify name");if(t.hasOwnProperty("crs")){if(!(t.crs instanceof L.Proj.CRS.TMS))throw Error("crs is not an instance of L.Proj.CRS.TMS")}else this.crs=L.KSP.CRS.EPSG4326;t.hasOwnProperty("radius")||(this.radius=1),t.hasOwnProperty("thumbnail")||(this.thumbnail="body-unknown.png"),t.hasOwnProperty("baseLayers")||(this.baseLayers={}),L.Util.extend(this,t)},addTo:function(t){var i,s=t._body;if(t._body=this,t.fire("bodychangestart",{body:this,oldBody:s}),s){for(i in s.baseLayers)s.baseLayers.hasOwnProperty(i)&&t.removeLayer(s.baseLayers[i]);for(i in s.overlays)s.overlays.hasOwnProperty(i)&&t.removeLayer(s.overlays[i])}var e=this.defaultLayer||this.baseLayers.Satellite;if(e){for(i in this.baseLayers)if(this.baseLayers.hasOwnProperty(i)&&this.baseLayers[i]._type===t._baseLayerType){e=this.baseLayers[i];break}t.addLayer(e),t.fire("baselayerchange",{layer:e})}for(i in this.overlays)this.overlays.hasOwnProperty(i)&&t._overlayTypes.indexOf(this.overlays[i]._type)>=0&&(t.addLayer(this.overlays[i]),t.fire("layeradd",{layer:this.overlays[i]}));t.fire("bodychangeend",{body:this,oldBody:s})},onAdd:function(t){this.addTo(t)},removeFrom:function(t){L.KSP.CelestialBody.DUMMY.addTo(t)},onRemove:function(t){this.removeFrom(t)}}),L.KSP.celestialBody=function(t){return new L.KSP.CelestialBody(t)},L.KSP.CelestialBody.DUMMY=L.KSP.celestialBody({id:"",name:"",crs:L.KSP.CRS.EPSG4326}),L.KSP.CelestialBody.ALL_PLANETARY=[L.KSP.CelestialBody.DUMMY],L.KSP.Map=L.Map.extend({options:{crs:L.KSP.CRS.EPSG4326,continuousWorld:!0},initialize:function(t,i){this._baseLayerType=-1,this._overlayTypes=[],L.Util.setOptions(this,i),this.startTrackingLayerState(),this.on("bodychangestart",this._onBodyChangeStart).on("bodychangeend",this._onBodyChangeEnd),L.Map.prototype.initialize.call(this,t,this.options)},clampZoom:function(){var t=this.getZoom(),i=this.getMinZoom(),s=this.getMaxZoom();i>t?this.setZoom(i):t>s?this.setZoom(s):this.fire("zoomend",this)},_onBodyChangeStart:function(){this.stopTrackingLayerState()},_onBodyChangeEnd:function(){this.clampZoom(),this.startTrackingLayerState()},_onLayerStateChange:function(t){if("layeradd"===t.type)t.layer instanceof L.KSP.TileLayer?this._baseLayerType=t.layer._type:t.layer instanceof L.KSP.LayerGroup&&0>this._overlayTypes.indexOf(t.layer._type)&&this._overlayTypes.push(t.layer._type);else if(t.layer instanceof L.KSP.LayerGroup){var i,s,e=t.layer._type,o=this._overlayTypes;for(i=o.length-1;i>=0;i--)s=o[i],s===e&&o.splice(i,1)}},startTrackingLayerState:function(){this.on("layeradd",this._onLayerStateChange).on("layerremove",this._onLayerStateChange)},stopTrackingLayerState:function(){this.off("layeradd",this._onLayerStateChange).off("layerremove",this._onLayerStateChange)}}),L.KSP.map=function(t,i){return new L.KSP.Map(t,i)},L.KSP.TileLayer=L.Proj.TileLayer.TMS.extend({statics:{TYPE_SATELLITE:0,TYPE_COLORRELIEF:1,TYPE_SLOPE:2,DEFAULT_URL:"http://tiles.kerbalmaps.com/{body}/{style}/{z}/{x}/{y}.png"},options:{continuousWorld:!1,noWrap:!1,minZoom:0,maxZoom:5,attribution:"Map data © Joel Pedraza"},initialize:function(t,i,s,e){L.Util.setOptions(this,e),this._type=t,L.Proj.TileLayer.TMS.prototype.initialize.call(this,i,s,this.options)}}),L.KSP.tileLayer=function(t,i,s,e){return new L.KSP.TileLayer(t,i,s,e)},L.KSP.LayerGroup=L.LayerGroup.extend({statics:{TYPE_SPACECENTER:0,TYPE_ANOMALY:1},initialize:function(t,i){this._type=t,L.LayerGroup.prototype.initialize.call(this,i)}}),L.KSP.layerGroup=function(t,i){return new L.KSP.LayerGroup(t,i)},L.KSP.Icon={},L.KSP.Icon.SPACECENTER=new L.Icon({iconUrl:"../assets/images/markers-spacecenter.png",shadowUrl:"../assets/images/markers-shadow.png",iconSize:[30,40],shadowSize:[35,16],iconAnchor:[15,40],shadowAnchor:[10,12],popupAnchor:[0,-35]}),L.KSP.Icon.ANOMALY=new L.Icon({iconUrl:"../assets/images/markers-anomaly.png",shadowUrl:"../assets/images/markers-shadow.png",iconSize:[30,40],shadowSize:[35,16],iconAnchor:[15,40],shadowAnchor:[10,12],popupAnchor:[0,-35]}),L.KSP.Legend={},L.KSP.Legend.SLOPE={"≥ 60°":"#E19678","< 60°":"#C86464","< 30°":"#965A64","< 15°":"#645064","< 5°":"#325064","0°":"#32465A"},L.KSP.Control=L.KSP.control={},L.KSP.Control.Legend=L.Control.extend({options:{position:"bottomright"},onAdd:function(t){return this._container=L.DomUtil.create("div","leaflet-control-legend"),t.on("baselayerchange",this._onLayerChange,this),this._container},_update:function(t){if(this._container.innerHTML="",t){for(var i in t)t.hasOwnProperty(i)&&(this._container.innerHTML+=''+i+"
    ");L.DomUtil.addClass(this._container,"leaflet-control-legend-visible")}else this._container.className=this._container.className.replace(" leaflet-control-legend-visible","")},_onLayerChange:function(t){this._update(t.layer.options.legend)}}),L.Map.mergeOptions({legendControl:!0}),L.Map.addInitHook(function(){this.options.bodyControl&&(this.legendControl=new L.KSP.Control.Legend,this.addControl(this.legendControl))}),L.control.legend=function(t){return new L.KSP.Control.Legend(t)},L.KSP.Control.Scale=L.Control.Scale.extend({options:{imperial:!1},onAdd:function(t){this._radius=0,t._body&&(this._radius=t._body.radius);var i=L.Control.Scale.prototype.onAdd.call(this,t);return t.on("bodychangeend",this._onBodyChangeEnd,this),i},onRemove:function(t){L.Control.Scale.prototype.onRemove.call(this,t),t.off("bodychangeend",this._onBodyChangeEnd)},_onBodyChangeEnd:function(t){this._radius=t.body.radius,this._update()},_update:function(){var t=this._map.getBounds(),i=t.getCenter().lat,s=this._radius*Math.PI*Math.cos(i*Math.PI/180),e=s*(t.getNorthEast().lng-t.getSouthWest().lng)/180,o=this._map.getSize(),n=this.options,a=0;o.x>0&&(a=e*(n.maxWidth/o.x)),this._updateScales(n,a)}}),L.KSP.Map.mergeOptions({scaleControl:!1}),L.KSP.Map.addInitHook(function(){this.options.scaleControl&&(this.scaleControl=new L.KSP.Control.Scale,this.addControl(this.scaleControl))}),L.KSP.control.scale=function(t){return new L.KSP.Control.Scale(t)},L.KSP.Control.CelestialBody=L.Control.extend({options:{position:"topright",collapsed:!0},initialize:function(t,i){L.Util.setOptions(this,i),this._bodies=t,this._timeInMillis=(new Date).valueOf(),this._weekInMillis=6048e5},onAdd:function(){return this._initLayout(),this._update(),this._map.on("bodychangeend",this._update,this),this._container},_initLayout:function(){var t="leaflet-control-celestialbodies",s=this._container=L.DomUtil.create("div",t),e=this._bodies;if(this.options.collapsed){L.DomEvent.on(s,"mouseover",this._expand,this).on(s,"mouseout",this._collapse,this);var o=this._bodiesLink=L.DomUtil.create("a",t+"-toggle",s);o.href="#",o.title="Celestial Bodies",L.DomEvent.on(o,"focus",this._expand,this),this._map.on("movestart",this._collapse,this)}var n=this._list=L.DomUtil.create("ul",t+"-list",s);for(var a in e)if(e.hasOwnProperty(a)){var r=this._addBody(e[a],n);if(e[a].children){var h=i.createElement("ul");for(var l in e[a].children)e[a].children.hasOwnProperty(l)&&this._addBody(e[a].children[l],h);r.appendChild(h)}}},_update:function(){this._map._body&&(this._bodiesLink.style.backgroundImage='url("'+this._map._body.thumbnail+'")')},_addBody:function(t,s){var e,o=i.createElement("li"),n=i.createElement("img");if(n.src=t.thumbnail,n.alt=o.title=t.name,t.addedOn){this._timeInMillis-t.addedOnKerbal Space Center
    -0.0969 : -74.6004"),L.marker([20.5829,-146.5116],{icon:L.KSP.Icon.SPACECENTER}).bindPopup("Kerbal Space Center 2
    20.5829 : -146.5116"),L.marker([-1.5409,-71.9099],{icon:L.KSP.Icon.SPACECENTER}).bindPopup("Island Airfield
    -1.5409 : -71.9099")]),Anomalies:L.KSP.layerGroup(L.KSP.LayerGroup.TYPE_ANOMALY,[L.marker([.1023,-74.5684],{icon:L.KSP.Icon.ANOMALY}).bindPopup("0.1023 : -74.5684"),L.marker([20.6709,-146.4968],{icon:L.KSP.Icon.ANOMALY}).bindPopup("20.6709 : -146.4968"),L.marker([35.5705,-74.9773],{icon:L.KSP.Icon.ANOMALY}).bindPopup("35.5705 : -74.9773"),L.marker([-.6402,-80.7668],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-0.6402 : -80.7668"),L.marker([-28.8083,-13.4401],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-28.8083 : -13.4401"),L.marker([-6.5057,-141.6856],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-6.5057 : -141.6856"),L.marker([81.9551,-128.518],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-81.9551 : -128.518")])}}),L.KSP.CelestialBody.MUN=L.KSP.celestialBody({id:"mun",name:"Mun",crs:L.KSP.CRS.EPSG4326,radius:2e5,addedOn:13682304e5,lastUpdated:1368144e6,thumbnail:"body-mun.png",baseLayers:{Satellite:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SATELLITE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{body:"mun",style:"sat"}),"Color Relief":L.KSP.tileLayer(L.KSP.TileLayer.TYPE_COLORRELIEF,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{body:"mun",style:"color",legend:{"3150 m":"#EBEBEB","-180 m":"#232323"}}),Slope:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SLOPE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{body:"mun",style:"slope",legend:L.KSP.Legend.SLOPE})},overlays:{Anomalies:L.KSP.layerGroup(L.KSP.LayerGroup.TYPE_ANOMALY,[L.marker([-9.8314,25.9177],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-9.8314 : 25.9177"),L.marker([-82.2063,102.9305],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-82.2063 : 102.9305"),L.marker([57.6604,9.1422],{icon:L.KSP.Icon.ANOMALY}).bindPopup("57.6604 : 9.1422"),L.marker([2.4695,81.5133],{icon:L.KSP.Icon.ANOMALY}).bindPopup("2.4695 : 81.5133"),L.marker([12.4432,39.178],{icon:L.KSP.Icon.ANOMALY}).bindPopup("12.4432 : 39.1780"),L.marker([-12.4431,-140.822],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-12.4431 : -140.8220"),L.marker([.7027,22.747],{icon:L.KSP.Icon.ANOMALY}).bindPopup("0.7027 : 22.7470"),L.marker([-70.9556,-68.1378],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-70.9556,-68.1378")])}}),L.KSP.CelestialBody.MINMUS=L.KSP.celestialBody({id:"minmus",name:"Minmus",crs:L.KSP.CRS.EPSG4326,radius:6e4,addedOn:13682304e5,lastUpdated:13682304e5,thumbnail:"body-minmus.png",baseLayers:{Satellite:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SATELLITE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"sat",body:"minmus"}),"Color Relief":L.KSP.tileLayer(L.KSP.TileLayer.TYPE_COLORRELIEF,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"color",body:"minmus",legend:{"5750 m":"#414B41","2500 m":"#BEE6C3","1 m":"#96CDB4","0 m":"#87B9A5"}}),Slope:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SLOPE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"slope",body:"minmus",legend:L.KSP.Legend.SLOPE})},overlays:{Anomalies:L.KSP.layerGroup(L.KSP.LayerGroup.TYPE_ANOMALY,[L.marker([23.7768,60.0462],{icon:L.KSP.Icon.ANOMALY}).bindPopup("23.7768 : 60.0462")])}}),L.KSP.CelestialBody.DUNA=L.KSP.celestialBody({id:"duna",name:"Duna",crs:L.KSP.CRS.EPSG4326,radius:32e4,addedOn:13688352e5,lastUpdated:13688352e5,thumbnail:"body-duna.png",baseLayers:{Satellite:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SATELLITE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"sat",body:"duna"}),"Color Relief":L.KSP.tileLayer(L.KSP.TileLayer.TYPE_COLORRELIEF,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"color",body:"duna",legend:{"4800 m":"#C3A082","4000 m":"#966446","3000 m":"#733219","2000 m":"#501E14","1000 m":"#3C140F","0 m":"#280F0A"}}),Slope:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SLOPE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"slope",body:"duna",legend:L.KSP.Legend.SLOPE})},overlays:{Anomalies:L.KSP.layerGroup(L.KSP.LayerGroup.TYPE_ANOMALY,[L.marker([17.0483,-85.4717],{icon:L.KSP.Icon.ANOMALY}).bindPopup("17.0483 : -85.4717"),L.marker([-30.3525,-28.6828],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-30.3525 : -28.6828"),L.marker([-66.1344,-160.7432],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-66.1344 : -160.7432")])}}),L.KSP.CelestialBody.IKE=L.KSP.celestialBody({id:"ike",name:"Ike",crs:L.KSP.CRS.EPSG4326,radius:13e4,addedOn:13688352e5,lastUpdated:13688352e5,thumbnail:"body-ike.png",baseLayers:{Satellite:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SATELLITE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"sat",body:"ike"}),"Color Relief":L.KSP.tileLayer(L.KSP.TileLayer.TYPE_COLORRELIEF,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"color",body:"ike",legend:{"13000 m":"#828282","11000 m":"#6E6E6E","9000 m":"#5A5A5A","7000 m":"#464646","5000 m":"#323232","2500 m":"#191919","70 m":"#070707"}}),Slope:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SLOPE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"slope",body:"ike",legend:L.KSP.Legend.SLOPE})},overlays:{}}),L.KSP.CelestialBody.DRES=L.KSP.celestialBody({id:"dres",name:"Dres",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-dres.png"}),L.KSP.CelestialBody.JOOL=L.KSP.celestialBody({id:"jool",name:"Jool",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-jool.png"}),L.KSP.CelestialBody.LAYTHE=L.KSP.celestialBody({id:"laythe",name:"Laythe",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-laythe.png"}),L.KSP.CelestialBody.VALL=L.KSP.celestialBody({id:"vall",name:"Vall",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-vall.png"}),L.KSP.CelestialBody.TYLO=L.KSP.celestialBody({id:"tylo",name:"Tylo",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-tylo.png"}),L.KSP.CelestialBody.BOP=L.KSP.celestialBody({id:"bop",name:"Bop",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-bop.png"}),L.KSP.CelestialBody.POL=L.KSP.celestialBody({id:"pol",name:"Pol",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-pol.png"}),L.KSP.CelestialBody.EELOO=L.KSP.celestialBody({id:"eeloo",name:"Eeloo",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-eeloo.png"}),L.KSP.CelestialBody.KERBIN.defaultLayer=L.KSP.CelestialBody.KERBIN.baseLayers.Satellite,L.KSP.CelestialBody.MUN.defaultLayer=L.KSP.CelestialBody.MUN.baseLayers.Satellite,L.KSP.CelestialBody.MINMUS.defaultLayer=L.KSP.CelestialBody.MINMUS.baseLayers.Satellite,L.KSP.CelestialBody.EVE.children=[L.KSP.CelestialBody.GILLY],L.KSP.CelestialBody.KERBIN.children=[L.KSP.CelestialBody.MUN,L.KSP.CelestialBody.MINMUS],L.KSP.CelestialBody.DUNA.children=[L.KSP.CelestialBody.IKE],L.KSP.CelestialBody.JOOL.children=[L.KSP.CelestialBody.LAYTHE,L.KSP.CelestialBody.VALL,L.KSP.CelestialBody.TYLO,L.KSP.CelestialBody.BOP,L.KSP.CelestialBody.POL],L.KSP.CelestialBody.GILLY.parent=L.KSP.CelestialBody.EVE,L.KSP.CelestialBody.MUN.parent=L.KSP.CelestialBody.MINMUS.parent=L.KSP.CelestialBody.KERBIN,L.KSP.CelestialBody.IKE.parent=L.KSP.CelestialBody.DUNA,L.KSP.CelestialBody.LAYTHE.parent=L.KSP.CelestialBody.VALL.parent=L.KSP.CelestialBody.TYLO.parent=L.KSP.CelestialBody.BOP.parent=L.KSP.CelestialBody.POL.parent=L.KSP.CelestialBody.JOOL,L.KSP.CelestialBody.ALL_PLANETARY=[L.KSP.CelestialBody.MOHO,L.KSP.CelestialBody.EVE,L.KSP.CelestialBody.KERBIN,L.KSP.CelestialBody.DUNA,L.KSP.CelestialBody.DRES,L.KSP.CelestialBody.JOOL,L.KSP.CelestialBody.EELOO],L.KSP.Map.addInitHook(function(){this.options.layers=[L.KSP.CelestialBody.KERBIN]})}(this,document); +var Settings = Class.create({ + initialize: function(defaultHost, defaultPort){ + if(!this.getHost()){ this.setHost(defaultHost)} + if(!this.getPort()){ this.setPort(defaultPort)} + }, + + getHost: function(){ + return this.get('host') + }, + + getPort: function(){ + return this.get('port') + }, + + setHost: function(value){ + return this.set('host', value) + }, + + setPort: function(value){ + return this.set('port', value) + }, + + get: function(property){ + return localStorage.getItem(property) + }, + + set: function(property, value){ + return localStorage.setItem(property, value) + } +}) +var Telemachus = Class.create({ + initialize: function(host, port){ + this.updateConnection(host, port) + this.receiverFunctions = [] + this.subscribedFields = {} + this.orbitingBodies = this.getOrbitalBodies() + this.rate = 500 + + this.loopTimeout = setTimeout(this.poll.bind(this), this.rate) + }, + + url: function(){ + return "http://" + this.host + ":" + this.port + "/telemachus/datalink" + }, + + updateConnection: function(host, port){ + this.host = host + this.port = port + }, + + addReceiverFunction: function(func){ + this.receiverFunctions.push(func) + }, + + subscribeToData: function(fields){ + for (var i = fields.length - 1; i >= 0; i--) { + var field = fields[i] + this.subscribedFields[field] = field + }; + }, + + dispatchMessages: function(data){ + for (var i = this.receiverFunctions.length - 1; i >= 0; i--) { + try{ + this.receiverFunctions[i](data) + } catch(e){ + console.error(e) + } + }; + }, + + send: function(message){ + this.socket.send(JSON.stringify(message)) + }, + + getOrbitalBodyInfo: function(name){ + var properties = this.orbitingBodies[name] + + if(properties){ + return Object.extend({name: name}, properties) + } else{ + return null + } + }, + + notifyIfLOS: function(request){ + if(request.transport.status == 0){ + document.fire('telemachus:loss-of-signal') + return true + } + return false + }, + + prepareParams: function(params){ + var normalizedParams = [] + Object.keys(params).forEach(function(field){ + var sanitizedFieldName = field.replace("[", "{").replace("]","}") + normalizedParams.push(sanitizedFieldName + "=" + field) + }) + return normalizedParams + }, + + convertData: function(rawData){ + var data = {} + var startBracesRegexp = /\{/g + var endBracesRegexp = /\}/g + + Object.keys(rawData).forEach(function(key){ + var convertedFieldName = key.replace(startBracesRegexp, "[").replace(endBracesRegexp, "]") + data[convertedFieldName] = rawData[key] + }) + + return data + }, + + poll: function(){ + var params = this.prepareParams(this.subscribedFields) + var requestURL = this.url() + "?" + params.join("&") + + new Ajax.Request(requestURL, { + method: "get", + onSuccess: function(response){ + var rawData = JSON.parse(response.responseText) + var data = this.convertData(rawData) + + this.dispatchMessages(data) + }.bind(this), + onException: this.notifyIfLOS.bind(this), + onComplete: function(response){ + setTimeout(this.poll.bind(this),this.rate); + }.bind(this) + }) + }, + + sendMessage: function(params, callback){ + new Ajax.Request(this.url(), { + method: "post", + postBody: JSON.stringify(params), + // parameters: params, + onSuccess: function(response){ + var rawData = JSON.parse(response.responseText) + var data = this.convertData(rawData) + callback(data) + }.bind(this), + onException: this.notifyIfLOS.bind(this) + }) + }, + + cameraURL: function(){ + return "http://" + this.host + ":" + this.port + "/telemachus/cameras" + }, + + getCameraList: function(callback){ + new Ajax.Request(this.cameraURL(), { + method: "get", + // parameters: params, + onSuccess: function(response){ + var data = JSON.parse(response.responseText) + callback(data) + }.bind(this), + onException: this.notifyIfLOS.bind(this) + }) + }, + + getOrbitalBodies: function(){ + return { + "Sun" : { + id: 0, + referenceBodyName: null, + mapBody: null, + atmosphericRadius: 0, + color: '#FFFF00', + surfaceGravity: 17.1 //m/s^2, + }, + "Kerbin" : { + id: 1, + referenceBodyName: "Sun", + mapBody: L.KSP.CelestialBody.KERBIN, + atmosphericRadius: 70000, + color: '#4a5472', + surfaceGravity: 9.81 //m/s^2 + }, + "Mun" : { + id: 2, + referenceBodyName: "Kerbin", + mapBody: L.KSP.CelestialBody.MUN, + atmosphericRadius: 0, + color: '#e2e0d7', + surfaceGravity: 1.63 //m/s^2 + }, + "Minmus" : { + id: 3, + referenceBodyName: "Kerbin", + mapBody: L.KSP.CelestialBody.MINMUS, + color: '#98f2c5', + atmosphericRadius: 0, + surfaceGravity: 0.491 //m/s^2 + }, + "Moho" : { + id: 4, + referenceBodyName: "Sun", + mapBody: L.KSP.CelestialBody.MOHO, + atmosphericRadius: 0, + color: '#fdc39e', + surfaceGravity: 2.70 //m/s^2 + }, + "Eve" : { + id: 5, + referenceBodyName: "Sun", + mapBody: L.KSP.CelestialBody.EVE, + atmosphericRadius: 90000, + color: '#c394fe', + surfaceGravity: 16.7 //m/s^2 + }, + "Duna" : { + id: 6, + referenceBodyName: "Sun", + mapBody: L.KSP.CelestialBody.DUNA, + atmosphericRadius: 50000, + color: '#fc5e49', + surfaceGravity: 2.94 //m/s^2 + }, + "Ike" : { + id: 7, + referenceBodyName: "Duna", + mapBody: L.KSP.CelestialBody.IKE, + atmosphericRadius: 0, + color: '#e2e0d7', + surfaceGravity: 1.10 //m/s^2 + }, + "Jool" : { + id: 8, + referenceBodyName: "Sun", + mapBody: L.KSP.CelestialBody.JOOL, + atmosphericRadius: 200000, + color: '#C5DCAB', + surfaceGravity: 7.85 //m/s^2 + }, + "Laythe" : { + id: 9, + referenceBodyName: "Jool", + mapBody: L.KSP.CelestialBody.LAYTHE, + atmosphericRadius: 50000, + color: '#a8b4fe', + surfaceGravity: 7.85 //m/s^2 + }, + "Vall" : { + id: 10, + referenceBodyName: "Jool", + mapBody: L.KSP.CelestialBody.VALL, + atmosphericRadius: 0, + color: '#b0f4fe', + surfaceGravity: 2.31 //m/s^2 + }, + "Bop" : { + id: 11, + referenceBodyName: "Jool", + mapBody: L.KSP.CelestialBody.BOP, + atmosphericRadius: 0, + color: '#c64605', + surfaceGravity: 0.589 //m/s^2 + }, + "Tylo" : { + id: 12, + referenceBodyName: "Jool", + mapBody: L.KSP.CelestialBody.TYLO, + atmosphericRadius: 0, + color: '#fdf7ed', + surfaceGravity: 7.85 //m/s^2 + }, + "Gilly" : { + id: 13, + referenceBodyName: "Eve", + mapBody: L.KSP.CelestialBody.GILLY, + atmosphericRadius: 0, + color: '#fdcbb1', + surfaceGravity: 0.049 //m/s^2 + }, + "Pol" : { + id: 14, + referenceBodyName: "Pol", + mapBody: L.KSP.CelestialBody.POL, + atmosphericRadius: 0, + color: '#fec681', + surfaceGravity: 0.373 //m/s^2 + }, + "Dres" : { + id: 15, + referenceBodyName: "Sun", + mapBody: L.KSP.CelestialBody.DRES, + atmosphericRadius: 0, + color: '#fef8f9', + surfaceGravity: 1.13 //m/s^2 + }, + "Eeloo" : { + id: 16, + referenceBodyName: "Sun", + mapBody: L.KSP.CelestialBody.EELOO, + atmosphericRadius: 0, + color: '#e5fafe', + surfaceGravity: 1.69 //m/s^2 + } + } + } +}) +var TitleBar = Class.create({ + initialize: function(datalink, title_bar_id){ + this.datalink = datalink + this.title_bar_id = title_bar_id + this.title_bar = $(this.title_bar_id) + this.initializeLOSNotifier() + this.initializeDatalink() + }, + + update: function(data){ + window.requestAnimationFrame(function(){ + this.title_bar.down("#world-clock").update(TimeFormatters.formatUT(data["t.universalTime"])) + this.title_bar.down("#mission-time").update(TimeFormatters.formatMET(data["v.missionTime"])) + + this.title_bar.down("#mission-time").removeClassName("loss-of-signal") + }.bind(this)) + }, + + initializeLOSNotifier:function(){ + document.observe('telemachus:loss-of-signal', function(){ + window.requestAnimationFrame(function(){ + this.title_bar.down("#mission-time").update("⚠ LOS ⚠") + this.title_bar.down("#mission-time").addClassName("loss-of-signal") + }.bind(this)) + }.bind(this)) + }, + + initializeDatalink: function(){ + this.datalink.subscribeToData([ + 't.timeWarp', 't.universalTime', 'v.missionTime' + ]) + + this.datalink.addReceiverFunction(this.update.bind(this)) + }, +}) +var ButtonIndicator = Class.create({ + initialize: function(datalink, indicatorId, apiButtonString){ + this.datalink = datalink + this.indicatorId = indicatorId + this.indicator = $(this.indicatorId) + this.apiButtonString = apiButtonString + this.initializeDatalink() + }, + + update: function(data){ + if(data[this.apiButtonString] == true){ + this.indicator.addClassName("on") + } else{ + this.indicator.removeClassName("on") + } + }, + + initializeDatalink: function(){ + this.datalink.subscribeToData([this.apiButtonString]) + + this.datalink.addReceiverFunction(this.update.bind(this)) + }, +}) +var ReadoutTable = Class.create({ + initialize: function(datalink, tableId, dataRows){ + this.datalink = datalink + this.tableId = tableId + this.table = $(this.tableId) + this.dataRows = dataRows + this.initializeDatalink() + }, + + update: function(data){ + window.requestAnimationFrame(function(){ + this.dataRows.forEach(function(row){ + var rowId = row.label + var tableRow = this.table.down("tr[data-label='"+ rowId +"']") + + if(!tableRow){ + var tableRow = new Element("tr", { + "data-label" : rowId + }) + + tableRow.insert("" + row.label + "") + this.table.insert(tableRow) + } + + tableRow.down("td").update(row.formatter(data[row.value])) + }.bind(this)) + }.bind(this)) + }, + + initializeDatalink: function(){ + var dataValues = this.dataRows.map(function(dataRow){ + return dataRow.value + }) + + this.datalink.subscribeToData(dataValues) + + this.datalink.addReceiverFunction(this.update.bind(this)) + }, +}) +var ResourceMonitor = Class.create({ + initialize: function(datalink, resourceName, options){ + this.datalink = datalink + this.resourceName = resourceName + this.options = Object.extend({ + currentStageProgressBar: null, + totalProgressBar: null, + valuePrefix: null + }, options) + + this.resourceStrings = this.buildResourceStrings() + + this.initializeDatalink() + }, + + update: function(data){ + window.requestAnimationFrame(function(){ + if(this.options.totalProgressBar){ + this.options.totalProgressBar.value = data[this.resourceStrings.totalAvailable] + this.options.totalProgressBar.max = data[this.resourceStrings.totalMax] + } + + if(this.options.currentStageProgressBar){ + this.options.currentStageProgressBar.value = data[this.resourceStrings.currentStageAvailable] + this.options.currentStageProgressBar.max = data[this.resourceStrings.currentStageMax] + } + + this.updateValue("-total-value", data[this.resourceStrings.totalAvailable]) + this.updateValue("-total-max", data[this.resourceStrings.totalMax]) + + this.updateValue("-current-stage-value", data[this.resourceStrings.currentStageAvailable]) + this.updateValue("-current-stage-max", data[this.resourceStrings.currentStageMax]) + }.bind(this)) + }, + + updateValue: function(id, value){ + if($(this.options.valuePrefix + id)){ + if(value < 0){ + $(this.options.valuePrefix + id).update("NA") + } else{ + $(this.options.valuePrefix + id).update(value.toFixed(2)) + } + } + }, + + buildResourceStrings: function(){ + return { + totalAvailable: "r.resource["+ this.resourceName +"]", + totalMax: "r.resourceMax["+ this.resourceName +"]", + currentStageAvailable: "r.resourceCurrent["+ this.resourceName +"]", + currentStageMax: "r.resourceCurrentMax["+ this.resourceName +"]", + } + }, + + initializeDatalink: function(){ + this.datalink.subscribeToData([ + this.resourceStrings.totalAvailable, + this.resourceStrings.totalMax, + this.resourceStrings.currentStageAvailable, + this.resourceStrings.currentStageMax + ]) + + this.datalink.addReceiverFunction(this.update.bind(this)) + }, +}) +var DataTable = Class.create({ + initialize: function(tableID, dataRows){ + this.tableID = tableID + this.table = $(this.tableID) + this.dataRows = dataRows + }, + + update: function(){ + window.requestAnimationFrame(function(){ + this.dataRows.forEach(function(row){ + var rowId = row.label + var tableRow = this.table.down("tr[data-label='"+ rowId +"']") + + if(!tableRow){ + var tableRow = new Element("tr", { + "data-label" : rowId + }) + + tableRow.insert("" + row.label + "") + this.table.insert(tableRow) + } + + tableRow.down("td").update(row.value) + }.bind(this)) + }.bind(this)) + }, + + clear: function(){ + window.requestAnimationFrame(function(){ + this.dataRows = [] + this.table.innerHTML = "" + }.bind(this)) + } +}) +var AtmosphericDensityGauge = Class.create({ + initialize: function(datalink, gaugeID){ + this.datalink = datalink + this.gaugeID = gaugeID + this.gauge = $(this.gaugeID) + this.initializeDatalink() + this.func = function(x){return Math.log(2.0 * x)} + }, + + update: function(data){ + var max = this.func(100) + var value = this.func(data['v.atmosphericPressure'] * 100) + if(!isFinite(value)){ value = 0 } + + this.gauge.value = value + this.gauge.max = max + }, + + initializeDatalink: function(){ + this.datalink.subscribeToData(['v.atmosphericPressure']) + + this.datalink.addReceiverFunction(this.update.bind(this)) + }, +}) +var ThrottleGauge = Class.create({ + initialize: function(datalink, gaugeID){ + this.datalink = datalink + this.gaugeID = gaugeID + this.gauge = $(this.gaugeID) + this.initializeDatalink() + }, + + update: function(data){ + this.gauge.value = data['f.throttle'] * 100 + this.gauge.max = 100 + }, + + initializeDatalink: function(){ + this.datalink.subscribeToData(['f.throttle']) + + this.datalink.addReceiverFunction(this.update.bind(this)) + }, +}) +/* Chartist.js 0.9.4 + * Copyright © 2015 Gion Kunz + * Free to use under the WTFPL license. + * http://www.wtfpl.net/ + */ + +!function(a,b){"function"==typeof define&&define.amd?define([],function(){return a.Chartist=b()}):"object"==typeof exports?module.exports=b():a.Chartist=b()}(this,function(){var a={version:"0.9.4"};return function(a,b,c){"use strict";c.noop=function(a){return a},c.alphaNumerate=function(a){return String.fromCharCode(97+a%26)},c.extend=function(a){a=a||{};var b=Array.prototype.slice.call(arguments,1);return b.forEach(function(b){for(var d in b)"object"!=typeof b[d]||null===b[d]||b[d]instanceof Array?a[d]=b[d]:a[d]=c.extend({},a[d],b[d])}),a},c.replaceAll=function(a,b,c){return a.replace(new RegExp(b,"g"),c)},c.stripUnit=function(a){return"string"==typeof a&&(a=a.replace(/[^0-9\+-\.]/g,"")),+a},c.ensureUnit=function(a,b){return"number"==typeof a&&(a+=b),a},c.querySelector=function(a){return a instanceof Node?a:b.querySelector(a)},c.times=function(a){return Array.apply(null,new Array(a))},c.sum=function(a,b){return a+(b?b:0)},c.mapMultiply=function(a){return function(b){return b*a}},c.mapAdd=function(a){return function(b){return b+a}},c.serialMap=function(a,b){var d=[],e=Math.max.apply(null,a.map(function(a){return a.length}));return c.times(e).forEach(function(c,e){var f=a.map(function(a){return a[e]});d[e]=b.apply(null,f)}),d},c.roundWithPrecision=function(a,b){var d=Math.pow(10,b||c.precision);return Math.round(a*d)/d},c.precision=8,c.escapingMap={"&":"&","<":"<",">":">",'"':""","'":"'"},c.serialize=function(a){return null===a||void 0===a?a:("number"==typeof a?a=""+a:"object"==typeof a&&(a=JSON.stringify({data:a})),Object.keys(c.escapingMap).reduce(function(a,b){return c.replaceAll(a,b,c.escapingMap[b])},a))},c.deserialize=function(a){if("string"!=typeof a)return a;a=Object.keys(c.escapingMap).reduce(function(a,b){return c.replaceAll(a,c.escapingMap[b],b)},a);try{a=JSON.parse(a),a=void 0!==a.data?a.data:a}catch(b){}return a},c.createSvg=function(a,b,d,e){var f;return b=b||"100%",d=d||"100%",Array.prototype.slice.call(a.querySelectorAll("svg")).filter(function(a){return a.getAttributeNS("http://www.w3.org/2000/xmlns/",c.xmlNs.prefix)}).forEach(function(b){a.removeChild(b)}),f=new c.Svg("svg").attr({width:b,height:d}).addClass(e).attr({style:"width: "+b+"; height: "+d+";"}),a.appendChild(f._node),f},c.reverseData=function(a){a.labels.reverse(),a.series.reverse();for(var b=0;bf.high&&(f.high=c),h&&ck,m=e?c.rho(j.range):0;if(e&&c.projectLength(a,1,j)>=d)j.step=1;else if(e&&m=d)j.step=m;else for(;;){if(l&&c.projectLength(a,j.step,j)<=d)j.step*=2;else{if(l||!(c.projectLength(a,j.step/2,j)>=d))break;if(j.step/=2,e&&j.step%1!==0){j.step*=2;break}}if(i++>1e3)throw new Error("Exceeded maximum number of iterations while optimizing scale step!")}for(g=j.min,h=j.max;g+j.step<=j.low;)g+=j.step;for(;h-j.step>=j.high;)h-=j.step;for(j.min=g,j.max=h,j.range=j.max-j.min,j.values=[],f=j.min;f<=j.max;f+=j.step)j.values.push(c.roundWithPrecision(f));return j},c.polarToCartesian=function(a,b,c,d){var e=(d-90)*Math.PI/180;return{x:a+c*Math.cos(e),y:b+c*Math.sin(e)}},c.createChartRect=function(a,b,d){var e=!(!b.axisX&&!b.axisY),f=e?b.axisY.offset:0,g=e?b.axisX.offset:0,h=a.width()||c.stripUnit(b.width)||0,i=a.height()||c.stripUnit(b.height)||0,j=c.normalizePadding(b.chartPadding,d);h=Math.max(h,f+j.left+j.right),i=Math.max(i,g+j.top+j.bottom);var k={padding:j,width:function(){return this.x2-this.x1},height:function(){return this.y1-this.y2}};return e?("start"===b.axisX.position?(k.y2=j.top+g,k.y1=Math.max(i-j.bottom,k.y2+1)):(k.y2=j.top,k.y1=Math.max(i-j.bottom-g,k.y2+1)),"start"===b.axisY.position?(k.x1=j.left+f,k.x2=Math.max(h-j.right,k.x1+1)):(k.x1=j.left,k.x2=Math.max(h-j.right-f,k.x1+1))):(k.x1=j.left,k.x2=Math.max(h-j.right,k.x1+1),k.y2=j.top,k.y1=Math.max(i-j.bottom,k.y2+1)),k},c.createGrid=function(a,b,d,e,f,g,h,i){var j={};j[d.units.pos+"1"]=a,j[d.units.pos+"2"]=a,j[d.counterUnits.pos+"1"]=e,j[d.counterUnits.pos+"2"]=e+f;var k=g.elem("line",j,h.join(" "));i.emit("draw",c.extend({type:"grid",axis:d,index:b,group:g,element:k},j))},c.createLabel=function(a,b,d,e,f,g,h,i,j,k,l){var m,n={};if(n[f.units.pos]=a+h[f.units.pos],n[f.counterUnits.pos]=h[f.counterUnits.pos],n[f.units.len]=b,n[f.counterUnits.len]=g-10,k){var o=''+e[d]+"";m=i.foreignObject(o,c.extend({style:"overflow: visible;"},n))}else m=i.elem("text",n,j.join(" ")).text(e[d]);l.emit("draw",c.extend({type:"label",axis:f,index:d,group:i,element:m,text:e[d]},n))},c.getSeriesOption=function(a,b,c){if(a.name&&b.series&&b.series[a.name]){var d=b.series[a.name];return d.hasOwnProperty(c)?d[c]:b[c]}return b[c]},c.optionsProvider=function(b,d,e){function f(b){var f=h;if(h=c.extend({},j),d)for(i=0;i1){var i=[];return h.forEach(function(a){i.push(g(a.pathCoordinates,a.valueData))}),c.Svg.Path.join(i)}if(a=h[0].pathCoordinates,d=h[0].valueData,a.length<=4)return c.Interpolation.none()(a,d);for(var j,k=(new c.Svg.Path).move(a[0],a[1],!1,d[0]),l=0,m=a.length;m-2*!j>l;l+=2){var n=[{x:+a[l-2],y:+a[l-1]},{x:+a[l],y:+a[l+1]},{x:+a[l+2],y:+a[l+3]},{x:+a[l+4],y:+a[l+5]}];j?l?m-4===l?n[3]={x:+a[0],y:+a[1]}:m-2===l&&(n[2]={x:+a[0],y:+a[1]},n[3]={x:+a[2],y:+a[3]}):n[0]={x:+a[m-2],y:+a[m-1]}:m-4===l?n[3]=n[2]:l||(n[0]={x:+a[l],y:+a[l+1]}),k.curve(e*(-n[0].x+6*n[1].x+n[2].x)/6+f*n[2].x,e*(-n[0].y+6*n[1].y+n[2].y)/6+f*n[2].y,e*(n[1].x+6*n[2].x-n[3].x)/6+f*n[2].x,e*(n[1].y+6*n[2].y-n[3].y)/6+f*n[2].y,n[2].x,n[2].y,!1,d[(l+2)/2])}return k}},c.Interpolation.step=function(a){var b={postpone:!0};return a=c.extend({},b,a),function(b,d){for(var e=new c.Svg.Path,f=!0,g=2;g1}).map(function(a){var b=a.pathElements[0],c=a.pathElements[a.pathElements.length-1];return a.clone(!0).position(0).remove(1).move(b.x,r).line(b.x,b.y).position(a.pathElements.length+1).line(c.x,r)}).forEach(function(h){var k=i.elem("path",{d:h.stringify()},a.classNames.area,!0).attr({values:b.normalized[g]},c.xmlNs.uri);this.eventEmitter.emit("draw",{type:"area",values:b.normalized[g],path:h.clone(),series:f,seriesIndex:g,axisX:d,axisY:e,chartRect:j,index:g,group:i,element:k})}.bind(this))}}.bind(this)),this.eventEmitter.emit("created",{bounds:e.bounds,chartRect:j,axisX:d,axisY:e,svg:this.svg,options:a})}function e(a,b,d,e){c.Line["super"].constructor.call(this,a,b,f,c.extend({},f,d),e)}var f={axisX:{offset:30,position:"end",labelOffset:{x:0,y:0},showLabel:!0,showGrid:!0,labelInterpolationFnc:c.noop,type:void 0},axisY:{offset:40,position:"start",labelOffset:{x:0,y:0},showLabel:!0,showGrid:!0,labelInterpolationFnc:c.noop,type:void 0,scaleMinSpace:20,onlyInteger:!1},width:void 0,height:void 0,showLine:!0,showPoint:!0,showArea:!1,areaBase:0,lineSmooth:!0,low:void 0,high:void 0,chartPadding:{top:15,right:15,bottom:5,left:10},fullWidth:!1,reverseData:!1,classNames:{chart:"ct-chart-line",label:"ct-label",labelGroup:"ct-labels",series:"ct-series",line:"ct-line",point:"ct-point",area:"ct-area",grid:"ct-grid",gridGroup:"ct-grids",vertical:"ct-vertical",horizontal:"ct-horizontal",start:"ct-start",end:"ct-end"}};c.Line=c.Base.extend({constructor:e,createChart:d})}(window,document,a),function(a,b,c){"use strict";function d(a){var b,d={raw:this.data,normalized:a.distributeSeries?c.getDataArray(this.data,a.reverseData,a.horizontalBars?"x":"y").map(function(a){return[a]}):c.getDataArray(this.data,a.reverseData,a.horizontalBars?"x":"y")};this.svg=c.createSvg(this.container,a.width,a.height,a.classNames.chart+(a.horizontalBars?" "+a.classNames.horizontalBars:""));var e=this.svg.elem("g").addClass(a.classNames.gridGroup),g=this.svg.elem("g"),h=this.svg.elem("g").addClass(a.classNames.labelGroup);if(a.stackBars){var i=c.serialMap(d.normalized,function(){return Array.prototype.slice.call(arguments).map(function(a){return a}).reduce(function(a,b){return{x:a.x+b.x||0,y:a.y+b.y||0}},{x:0,y:0})});b=c.getHighLow([i],c.extend({},a,{referenceValue:0}),a.horizontalBars?"x":"y")}else b=c.getHighLow(d.normalized,c.extend({},a,{referenceValue:0}),a.horizontalBars?"x":"y");b.high=+a.high||(0===a.high?0:b.high),b.low=+a.low||(0===a.low?0:b.low);var j,k,l,m,n,o=c.createChartRect(this.svg,a,f.padding);k=a.distributeSeries&&a.stackBars?d.raw.labels.slice(0,1):d.raw.labels,a.horizontalBars?(j=m=void 0===a.axisX.type?new c.AutoScaleAxis(c.Axis.units.x,d,o,c.extend({},a.axisX,{highLow:b,referenceValue:0})):a.axisX.type.call(c,c.Axis.units.x,d,o,c.extend({},a.axisX,{highLow:b,referenceValue:0})),l=n=void 0===a.axisY.type?new c.StepAxis(c.Axis.units.y,d,o,{ticks:k}):a.axisY.type.call(c,c.Axis.units.y,d,o,a.axisY)):(l=m=void 0===a.axisX.type?new c.StepAxis(c.Axis.units.x,d,o,{ticks:k}):a.axisX.type.call(c,c.Axis.units.x,d,o,a.axisX),j=n=void 0===a.axisY.type?new c.AutoScaleAxis(c.Axis.units.y,d,o,c.extend({},a.axisY,{highLow:b,referenceValue:0})):a.axisY.type.call(c,c.Axis.units.y,d,o,c.extend({},a.axisY,{highLow:b,referenceValue:0})));var p=a.horizontalBars?o.x1+j.projectValue(0):o.y1-j.projectValue(0),q=[];l.createGridAndLabels(e,h,this.supportsForeignObject,a,this.eventEmitter),j.createGridAndLabels(e,h,this.supportsForeignObject,a,this.eventEmitter),d.raw.series.forEach(function(b,e){var f,h,i=e-(d.raw.series.length-1)/2;f=a.distributeSeries&&!a.stackBars?l.axisLength/d.normalized.length/2:a.distributeSeries&&a.stackBars?l.axisLength/2:l.axisLength/d.normalized[e].length/2,h=g.elem("g"),h.attr({"series-name":b.name,meta:c.serialize(b.meta)},c.xmlNs.uri),h.addClass([a.classNames.series,b.className||a.classNames.series+"-"+c.alphaNumerate(e)].join(" ")),d.normalized[e].forEach(function(g,k){var r,s,t,u;if(u=a.distributeSeries&&!a.stackBars?e:a.distributeSeries&&a.stackBars?0:k,r=a.horizontalBars?{x:o.x1+j.projectValue(g&&g.x?g.x:0,k,d.normalized[e]),y:o.y1-l.projectValue(g&&g.y?g.y:0,u,d.normalized[e])}:{x:o.x1+l.projectValue(g&&g.x?g.x:0,u,d.normalized[e]),y:o.y1-j.projectValue(g&&g.y?g.y:0,k,d.normalized[e])},l instanceof c.StepAxis&&(l.options.stretch||(r[l.units.pos]+=f*(a.horizontalBars?-1:1)),r[l.units.pos]+=a.stackBars||a.distributeSeries?0:i*a.seriesBarDistance*(a.horizontalBars?-1:1)),t=q[k]||p,q[k]=t-(p-r[l.counterUnits.pos]),void 0!==g){var v={};v[l.units.pos+"1"]=r[l.units.pos],v[l.units.pos+"2"]=r[l.units.pos],v[l.counterUnits.pos+"1"]=a.stackBars?t:p,v[l.counterUnits.pos+"2"]=a.stackBars?q[k]:r[l.counterUnits.pos],v.x1=Math.min(Math.max(v.x1,o.x1),o.x2),v.x2=Math.min(Math.max(v.x2,o.x1),o.x2),v.y1=Math.min(Math.max(v.y1,o.y2),o.y1),v.y2=Math.min(Math.max(v.y2,o.y2),o.y1),s=h.elem("line",v,a.classNames.bar).attr({value:[g.x,g.y].filter(function(a){return a}).join(","),meta:c.getMetaData(b,k)},c.xmlNs.uri), +this.eventEmitter.emit("draw",c.extend({type:"bar",value:g,index:k,meta:c.getMetaData(b,k),series:b,seriesIndex:e,axisX:m,axisY:n,chartRect:o,group:h,element:s},v))}}.bind(this))}.bind(this)),this.eventEmitter.emit("created",{bounds:j.bounds,chartRect:o,axisX:m,axisY:n,svg:this.svg,options:a})}function e(a,b,d,e){c.Bar["super"].constructor.call(this,a,b,f,c.extend({},f,d),e)}var f={axisX:{offset:30,position:"end",labelOffset:{x:0,y:0},showLabel:!0,showGrid:!0,labelInterpolationFnc:c.noop,scaleMinSpace:30,onlyInteger:!1},axisY:{offset:40,position:"start",labelOffset:{x:0,y:0},showLabel:!0,showGrid:!0,labelInterpolationFnc:c.noop,scaleMinSpace:20,onlyInteger:!1},width:void 0,height:void 0,high:void 0,low:void 0,onlyInteger:!1,chartPadding:{top:15,right:15,bottom:5,left:10},seriesBarDistance:15,stackBars:!1,horizontalBars:!1,distributeSeries:!1,reverseData:!1,classNames:{chart:"ct-chart-bar",horizontalBars:"ct-horizontal-bars",label:"ct-label",labelGroup:"ct-labels",series:"ct-series",bar:"ct-bar",grid:"ct-grid",gridGroup:"ct-grids",vertical:"ct-vertical",horizontal:"ct-horizontal",start:"ct-start",end:"ct-end"}};c.Bar=c.Base.extend({constructor:e,createChart:d})}(window,document,a),function(a,b,c){"use strict";function d(a,b,c){var d=b.x>a.x;return d&&"explode"===c||!d&&"implode"===c?"start":d&&"implode"===c||!d&&"explode"===c?"end":"middle"}function e(a){var b,e,f,h,i,j=[],k=a.startAngle,l=c.getDataArray(this.data,a.reverseData);this.svg=c.createSvg(this.container,a.width,a.height,a.donut?a.classNames.chartDonut:a.classNames.chartPie),e=c.createChartRect(this.svg,a,g.padding),f=Math.min(e.width()/2,e.height()/2),i=a.total||l.reduce(function(a,b){return a+b},0),f-=a.donut?a.donutWidth/2:0,h="outside"===a.labelPosition||a.donut?f:"center"===a.labelPosition?0:f/2,h+=a.labelOffset;var m={x:e.x1+e.width()/2,y:e.y2+e.height()/2},n=1===this.data.series.filter(function(a){return a.hasOwnProperty("value")?0!==a.value:0!==a}).length;a.showLabel&&(b=this.svg.elem("g",null,null,!0));for(var o=0;o180,0,r.x,r.y);a.donut||t.line(m.x,m.y);var u=j[o].elem("path",{d:t.stringify()},a.donut?a.classNames.sliceDonut:a.classNames.slicePie);if(u.attr({value:l[o],meta:c.serialize(p.meta)},c.xmlNs.uri),a.donut&&u.attr({style:"stroke-width: "+ +a.donutWidth+"px"}),this.eventEmitter.emit("draw",{type:"slice",value:l[o],totalDataSum:i,index:o,meta:p.meta,series:p,group:j[o],element:u,path:t.clone(),center:m,radius:f,startAngle:k,endAngle:q}),a.showLabel){var v=c.polarToCartesian(m.x,m.y,h,k+(q-k)/2),w=a.labelInterpolationFnc(this.data.labels?this.data.labels[o]:l[o],o);if(w||0===w){var x=b.elem("text",{dx:v.x,dy:v.y,"text-anchor":d(m,v,a.labelDirection)},a.classNames.label).text(""+w);this.eventEmitter.emit("draw",{type:"label",index:o,group:b,element:x,text:""+w,x:v.x,y:v.y})}}k=q}this.eventEmitter.emit("created",{chartRect:e,svg:this.svg,options:a})}function f(a,b,d,e){c.Pie["super"].constructor.call(this,a,b,g,c.extend({},g,d),e)}var g={width:void 0,height:void 0,chartPadding:5,classNames:{chartPie:"ct-chart-pie",chartDonut:"ct-chart-donut",series:"ct-series",slicePie:"ct-slice-pie",sliceDonut:"ct-slice-donut",label:"ct-label"},startAngle:0,total:void 0,donut:!1,donutWidth:60,showLabel:!0,labelOffset:0,labelPosition:"inside",labelInterpolationFnc:c.noop,labelDirection:"neutral",reverseData:!1};c.Pie=c.Base.extend({constructor:f,createChart:e,determineAnchorPosition:d})}(window,document,a),a}); +/* + Graticule plugin for Leaflet powered maps. +*/ +L.Graticule = L.GeoJSON.extend({ + + options: { + style: { + color: '#333', + weight: 1 + }, + interval: 20 + }, + + initialize: function (options) { + L.Util.setOptions(this, options); + this._layers = {}; + + if (this.options.sphere) { + this.addData(this._getFrame()); + } else { + this.addData(this._getGraticule()); + } + }, + + _getFrame: function() { + return { "type": "Polygon", + "coordinates": [ + this._getMeridian(-180).concat(this._getMeridian(180).reverse()) + ] + }; + }, + + _getGraticule: function () { + var features = [], interval = this.options.interval; + + // Meridians + for (var lng = 0; lng <= 180; lng = lng + interval) { + features.push(this._getFeature(this._getMeridian(lng), { + "name": (lng) ? lng.toString() + "° E" : "Prime meridian" + })); + if (lng !== 0) { + features.push(this._getFeature(this._getMeridian(-lng), { + "name": lng.toString() + "° W" + })); + } + } + + // Parallels + for (var lat = 0; lat <= 90; lat = lat + interval) { + features.push(this._getFeature(this._getParallel(lat), { + "name": (lat) ? lat.toString() + "° N" : "Equator" + })); + if (lat !== 0) { + features.push(this._getFeature(this._getParallel(-lat), { + "name": lat.toString() + "° S" + })); + } + } + + return { + "type": "FeatureCollection", + "features": features + }; + }, + + _getMeridian: function (lng) { + lng = this._lngFix(lng); + var coords = []; + for (var lat = -90; lat <= 90; lat++) { + coords.push([lng, lat]); + } + return coords; + }, + + _getParallel: function (lat) { + var coords = []; + for (var lng = -180; lng <= 180; lng++) { + coords.push([this._lngFix(lng), lat]); + } + return coords; + }, + + _getFeature: function (coords, prop) { + return { + "type": "Feature", + "geometry": { + "type": "LineString", + "coordinates": coords + }, + "properties": prop + }; + }, + + _lngFix: function (lng) { + if (lng >= 180) return 179.999999; + if (lng <= -180) return -179.999999; + return lng; + } + +}); + +L.graticule = function (options) { + return new L.Graticule(options); +}; +var PositionMap = Class.create({ + initialize: function(datalink, mapId, options){ + this.datalink = datalink + this.mapId = mapId + this.noMapIndicatorId = (mapId + '-no-map') + this.previousBody = "KERBIN" + this.options = Object.extend({ + lockOnVessel: true + }, options) + this.initializeMap() + this.initializeNoMapIndicator() + this.initializeDatalink() + }, + + update: function(data){ + window.requestAnimationFrame(function(){ + if(this.isMapAvailable(data)){ + this.showMap() + this.updateBodyIfNecessary(data) + this.setCoordinatesForMapObject(this.coordinates, data['v.lat'], data['v.long']) + if(this.options.lockOnVessel){ + this.map.panTo([data['v.lat'], data['v.long']]) + } + } else{ + this.hideMap() + } + }.bind(this)) + }, + + updateBodyIfNecessary: function(data){ + var bodyName = data['v.body'].toUpperCase() + if(this.previousBody != bodyName){ + newBody = L.KSP.CelestialBody[bodyName]; + newBody.addTo(this.map); + this.previousBody = bodyName; + } + }, + + initializeMap: function(){ + this.map = new L.KSP.Map(this.mapId, { + layers: [L.KSP.CelestialBody[this.previousBody.toUpperCase()]], + zoom: 'fit', + bodyControl: false, + layerControl: true, + scaleControl: true + }) + + this.map.fitWorld() + + L.graticule().addTo(this.map) + + var circleMarkerOptions = { + // fill: false, + color: '#FD7E23', + opacity: 1.0, + fillOpacity: 1.0, + radius: 5 + } + + this.coordinates = L.circleMarker([0, 0], circleMarkerOptions) + this.coordinates.addTo(this.map) + }, + + convertCoordinatesToMap: function(latitude, longitude){ + return [latitude, longitude > 180 ? longitude - 360 : longitude] + }, + + setCoordinatesForMapObject: function(object, latitude, longitude){ + var convertedCoordinates = this.convertCoordinatesToMap(latitude, longitude) + object.setLatLng([convertedCoordinates[0], convertedCoordinates[1]]) + }, + + isMapAvailable: function(data){ + return data['v.body'].toUpperCase() != "SUN" + }, + + hideMap: function(){ + $(this.mapId).hide() + this.noMapIndicator.removeClassName("hidden") + }, + + showMap: function(){ + $(this.mapId).show() + this.noMapIndicator.addClassName("hidden") + }, + + initializeNoMapIndicator: function(){ + this.noMapIndicator = $(this.noMapIndicatorId) + }, + + initializeDatalink: function(){ + this.datalink.subscribeToData(['v.lat', 'v.long', 'v.body']) + + this.datalink.addReceiverFunction(this.update.bind(this)) + } +}) +var OrbitalPositionData = Class.create({ + initialize: function(datalink, options){ + this.datalink = datalink + this.initializeDatalink() + this.timeoutRate = 1000 //times out every 5 seconds + this.mutexTimestamp = null + this.rootReferenceBody = null + this.options = Object.extend({ + onRecalculate: null, + numberOfSegments: 120 + }, options) + }, + + isLocked: function(){ + this.mutexTimestamp && this.mutexTimestamp < ((Date.now() / 1000 | 0) + this.timeoutRate) + }, + + mutexLock: function(){ + this.mutexTimestamp = Date.now() + }, + + mutexUnlock: function(){ + this.mutexTimestamp = null + }, + + recalculate: function(data){ + if(this.isLocked()){return} + this.mutexLock() + Object.extend(data, { + "currentUniversalTime": this.adjustUniversalTime(data['t.universalTime']), + "vesselBody": data['v.body'], + "vesselCurrentPosition": { "relativePosition": null }, + "targetCurrentPosition": { "relativePosition": null }, + }) + this.getPositionsAndRecalculate(data) + }, + + getPositionsAndRecalculate: function(positionData){ + var requestParams = {}; + //ask for the true position for the current body right now and the radius + var referenceBody = this.datalink.getOrbitalBodyInfo(positionData["vesselBody"]) + this.rootReferenceBody = referenceBody + requestParams["currentReferenceBodyRadius"] = 'b.radius[' + referenceBody.id + ']' + requestParams["currentReferenceBodyTruePosition"] = 'b.o.truePositionAtUT[' + referenceBody.id + ',' + positionData["currentUniversalTime"] + ']' + //ask for the relative position of the vessel in the current orbit patch at the current time + requestParams["vesselCurrentPositionRelativePosition"] = "o.relativePositionAtUTForOrbitPatch[" + 0 +","+ positionData["currentUniversalTime"] + "]" + + this.buildRelativePositionRequestsForOrbitPatches(requestParams, "vesselCurrentOrbit", positionData['o.orbitPatches'], positionData["currentUniversalTime"]) + this.buildRelativePositionRequestsForManeuverNodeOrbitPatches(requestParams, "vesselManeuverNodes", positionData['o.maneuverNodes'], positionData["currentUniversalTime"]) + + if(positionData['tar.type']){ + if(positionData['tar.o.orbitPatches'] && positionData['tar.o.orbitPatches'].length > 0){ + this.buildRelativePositionRequestsForOrbitPatches(requestParams, "targetCurrentOrbit", positionData['tar.o.orbitPatches'], positionData["currentUniversalTime"], 'tar.o') + requestParams["targetCurrentPositionRelativePosition"] = "tar.o.relativePositionAtUTForOrbitPatch[" + 0 +","+ positionData["currentUniversalTime"] + "]" + } else{ + var body = this.datalink.getOrbitalBodyInfo(positionData['tar.name']) + requestParams[body.name + "[metadata]radius"] = 'b.radius[' + body.id + ']' + requestParams[body.name + "["+ positionData["currentUniversalTime"] +"]TruePosition"] = 'b.o.truePositionAtUT[' + body.id + ',' + positionData["currentUniversalTime"] + ']' + requestParams[body.name + "[metadata]currentTruePosition"] = 'b.o.truePositionAtUT[' + body.id + ',' + positionData["currentUniversalTime"] + ']' + } + } + + this.datalink.sendMessage(requestParams, function(data){ + positionData["currentReferenceBodyRadius"] = data["currentReferenceBodyRadius"] + positionData["currentReferenceBodyTruePosition"] = data["currentReferenceBodyTruePosition"] + + this.buildReferenceBodyPositionData(data, positionData) + this.buildReferenceBodyMetadata(data, positionData) + + positionData["vesselCurrentPosition"]["relativePosition"] = data["vesselCurrentPositionRelativePosition"] + this.buildRelativePositionPositionDataForOrbitPatches(data, positionData, "vesselCurrentOrbit", 'o.orbitPatches') + + if(positionData['o.maneuverNodes']){ + this.buildRelativePositionPositionDataForManeuverNodeOrbitPatches(data, positionData, "vesselManeuverNodes", 'o.maneuverNodes') + } + + if(positionData['tar.o.orbitPatches']){ + this.buildRelativePositionPositionDataForOrbitPatches(data, positionData, "targetCurrentOrbit", 'tar.o.orbitPatches', 'tar.o') + positionData["targetCurrentPosition"]["relativePosition"] = data["targetCurrentPositionRelativePosition"] + } + + this.mutexUnlock() + this.options.onRecalculate && this.options.onRecalculate(positionData) + }.bind(this)) + }, + + buildRelativePositionRequestsForOrbitPatches: function(requestParams, orbitPatchType, orbitPatches, currentUniversalTime, requestPrefix){ + requestPrefix = requestPrefix || 'o' + for (var i = 0; i < orbitPatches.length; i++) { + var orbitPatch = orbitPatches[i] + + // get the start and the end universal times for the patch + var startUT = this.adjustUniversalTime(orbitPatch["startUT"]) + var endUT = this.adjustUniversalTime(orbitPatch["endUT"]) + + //ask for the true position for the current body right now and the radius + var referenceBody = this.datalink.getOrbitalBodyInfo(orbitPatch["referenceBody"]) + + var timeInterval = (endUT-startUT)/this.options.numberOfSegments + var UTForInterval = null + for(var j = 0; j < this.options.numberOfSegments; j++){ + UTForInterval = this.adjustUniversalTime(startUT + (timeInterval * j)) + if(UTForInterval > endUT){ + UTForInterval = endUT + } + + //get the true position of the root reference body at this UT as well + requestParams[this.rootReferenceBody.name + "["+ UTForInterval +"]TruePosition"] = 'b.o.truePositionAtUT[' + this.rootReferenceBody.id + ',' + UTForInterval + ']' + + requestParams[orbitPatchType + "[" + i + "][" + UTForInterval + "]RelativePosition"] = requestPrefix + ".relativePositionAtUTForOrbitPatch[" + i +","+ UTForInterval + "]" + requestParams[orbitPatch["referenceBody"] + "["+ UTForInterval +"]TruePosition"] = 'b.o.truePositionAtUT[' + referenceBody.id + ',' + UTForInterval + ']' + } + + requestParams[orbitPatch["referenceBody"] + "[metadata]radius"] = 'b.radius[' + referenceBody.id + ']' + requestParams[orbitPatch["referenceBody"] + "[metadata]currentTruePosition"] = 'b.o.truePositionAtUT[' + referenceBody.id + ',' + currentUniversalTime + ']' + } + }, + + buildRelativePositionRequestsForManeuverNodeOrbitPatches: function(requestParams, maneuverNodeType, maneuverNodes, currentUniversalTime){ + var requestPrefix = "o.maneuverNodes.relativePositionAtUTForManeuverNodesOrbitPatch" + for (var i = 0; i < maneuverNodes.length; i++) { + var maneuverNode = maneuverNodes[i] + + /* + "apistring": "o.maneuverNodes.relativePositionAtUTForManeuverNodesOrbitPatch", + "name": "For a maneuver node, The orbit patch's True Anomaly at Universal Time [int id, orbit patch index, universal time]", + "units": "DEG", + "plotable": true + */ + + var labelPrefix = maneuverNodeType + "[" + i + "]" + + for (var j = 0; j < maneuverNode['orbitPatches'].length; j++) { + var orbitPatch = maneuverNode['orbitPatches'][j] + + // get the start and the end universal times for the patch + var startUT = this.adjustUniversalTime(orbitPatch["startUT"]) + var endUT = this.adjustUniversalTime(orbitPatch["endUT"]) + var period = this.adjustUniversalTime(orbitPatch["period"]) + var endTransition = this.adjustUniversalTime(orbitPatch["patchEndTransition"]) + + //ask for the true position for the current body right now and the radius + var referenceBody = this.datalink.getOrbitalBodyInfo(orbitPatch["referenceBody"]) + var expectedUT = startUT + period + + if(expectedUT < endUT && endTransition == "MANEUVER"){ + var timeInterval = (expectedUT - startUT)/this.options.numberOfSegments + } else{ + var timeInterval = (endUT-startUT)/this.options.numberOfSegments + } + + var UTForInterval = null + for(var k = 0; k < this.options.numberOfSegments; k++){ + UTForInterval = this.adjustUniversalTime((UTForInterval || startUT) + timeInterval) + if(UTForInterval > endUT){ + UTForInterval = endUT + } + + var args = [i,j,UTForInterval] + + //get the true position of the root reference body at this UT as well + requestParams[this.rootReferenceBody.name + "["+ UTForInterval +"]TruePosition"] = 'b.o.truePositionAtUT[' + this.rootReferenceBody.id + ',' + UTForInterval + ']' + + requestParams[labelPrefix + "[" + j + "][" + UTForInterval + "]RelativePosition"] = requestPrefix + "[" + args.join(',') + "]" + requestParams[orbitPatch["referenceBody"] + "["+ UTForInterval +"]TruePosition"] = 'b.o.truePositionAtUT[' + referenceBody.id + ',' + UTForInterval + ']' + } + + requestParams[orbitPatch["referenceBody"] + "[metadata]radius"] = 'b.radius[' + referenceBody.id + ']' + requestParams[orbitPatch["referenceBody"] + "[metadata]currentTruePosition"] = 'b.o.truePositionAtUT[' + referenceBody.id + ',' + currentUniversalTime + ']' + } + }; + }, + + buildRelativePositionPositionDataForOrbitPatches: function(rawData, positionData, orbitPatchType, orbitPatchesKey){ + var relativePositionFieldRegex = new RegExp(orbitPatchType + "\\[(\\d+)\\]\\[([\\d\\.]+)\\]RelativePosition") + var orbitPatches = positionData[orbitPatchesKey] = positionData[orbitPatchesKey] || {} + + var rawDataKeys = Object.keys(rawData) + for (var i = rawDataKeys.length - 1; i >= 0; i--) { + var key = rawDataKeys[i] + if(relativePositionFieldRegex.test(key)){ + var matchParts = relativePositionFieldRegex.exec(key) + var orbitPatchIndex = parseInt(matchParts[1]) + var universalTime = matchParts[2] + var relativePosition = rawData[key] + + var orbitPatch = orbitPatches[orbitPatchIndex] = orbitPatches[orbitPatchIndex] || {} + var orbitPatchPositionData = orbitPatch["positionData"] = orbitPatch["positionData"] || {} + orbitPatchPositionData[universalTime] = orbitPatchPositionData[universalTime] || {} + orbitPatchPositionData[universalTime]["relativePosition"] = relativePosition + } + }; + }, + + buildRelativePositionPositionDataForManeuverNodeOrbitPatches: function(rawData, positionData, maneuverNodeType, maneuverNodesKey){ + var relativePositionFieldRegex = new RegExp(maneuverNodeType + "\\[(\\d+)\\]\\[(\\d+)\\]\\[([\\d\\.]+)\\]RelativePosition") + var maneuverNodes = positionData[maneuverNodesKey] = positionData[maneuverNodesKey] || {} + + var rawDataKeys = Object.keys(rawData) + for (var i = rawDataKeys.length - 1; i >= 0; i--) { + var key = rawDataKeys[i] + if(relativePositionFieldRegex.test(key)){ + var matchParts = relativePositionFieldRegex.exec(key) + var maneuverNodeIndex = parseInt(matchParts[1]) + var orbitPatchIndex = parseInt(matchParts[2]) + var universalTime = matchParts[3] + var relativePosition = rawData[key] + + var orbitPatch = maneuverNodes[maneuverNodeIndex]['orbitPatches'][orbitPatchIndex] = maneuverNodes[maneuverNodeIndex]['orbitPatches'][orbitPatchIndex] || {} + var orbitPatchPositionData = orbitPatch["positionData"] = orbitPatch["positionData"] || {} + orbitPatchPositionData[universalTime] = orbitPatchPositionData[universalTime] || {} + orbitPatchPositionData[universalTime]["relativePosition"] = relativePosition + } + }; + }, + + buildReferenceBodyPositionData: function(rawData, positionData){ + var referenceBodyTruePositionRegex = new RegExp(/(\w+)\[([\d\.]+)\]TruePosition$/) + + var rawDataKeys = Object.keys(rawData) + for (var i = rawDataKeys.length - 1; i >= 0; i--) { + var key = rawDataKeys[i] + if(referenceBodyTruePositionRegex.test(key)){ + var matchParts = referenceBodyTruePositionRegex.exec(key) + var referenceBodyName = matchParts[1] + var universalTime = matchParts[2] + var truePosition = rawData[key] + + var referenceBodies = positionData["referenceBodies"] = positionData["referenceBodies"] || {} + var referenceBodyObject = referenceBodies[referenceBodyName] = referenceBodies[referenceBodyName] || {} + referenceBodyObject["positionData"] = referenceBodyObject["positionData"] || {} + referenceBodyObject["positionData"][universalTime] = referenceBodyObject["positionData"][universalTime] || {} + referenceBodyObject["positionData"][universalTime]["truePosition"] = truePosition + } + } + }, + + buildReferenceBodyMetadata: function(rawData, positionData){ + var referenceBodyTruePositionRegex = new RegExp(/(\w+)\[metadata\](\w+)$/) + + var rawDataKeys = Object.keys(rawData) + for (var i = rawDataKeys.length - 1; i >= 0; i--) { + var key = rawDataKeys[i] + if(referenceBodyTruePositionRegex.test(key)){ + var matchParts = referenceBodyTruePositionRegex.exec(key) + var referenceBodyName = matchParts[1] + var field = matchParts[2] + var data = rawData[key] + + var referenceBodies = positionData["referenceBodies"] = positionData["referenceBodies"] || {} + var referenceBodyObject = referenceBodies[referenceBodyName] = referenceBodies[referenceBodyName] || {} + referenceBodyObject[field] = data + } + } + }, + + adjustUniversalTime: function(ut){ + return ut//.toFixed(3) + }, + + initializeDatalink: function(){ + this.datalink.subscribeToData([ + 'o.orbitPatches', 't.universalTime', 'v.body', + 'tar.name', 'tar.type', 'tar.o.orbitingBody', + 'tar.o.orbitPatches', 'o.maneuverNodes' + ]) + + this.datalink.addReceiverFunction(this.recalculate.bind(this)) + }, +}) +var GroundTrackPositionDataFormatter = Class.create({ + initialize: function(orbitalPositionData, datalink, options){ + this.datalink = datalink + this.orbitalPositionData = orbitalPositionData; + this.orbitalPositionData.options.onRecalculate = this.format.bind(this) + + this.rootReferenceBodyName = null + this.currentUniversalTime = null + + this.options = Object.extend({ + onFormat: null, + numberOfSegments: 120 + }, options) + }, + + format: function(positionData){ + var formattedData = { + "vesselCurrentCoordinates": null, + "targetCurrentCoordinates": null, + + "vesselSuborbitalPaths": [], + "vesselOrbitalPaths": [], + + "targetSuborbitalPaths": [], + "targetOrbitalPaths": [], + + "currentUniversalTime": positionData.currentUniversalTime, + "referenceBodyName": positionData.vesselBody, + "atmosphericRadius": this.datalink.getOrbitalBodyInfo(positionData.vesselBody).atmosphericRadius + } + + this.currentUniversalTime = positionData.currentUniversalTime + this.formatVesselCurrentCoordinates(positionData, formattedData) + this.formatTargetCurrentCoordinates(positionData, formattedData) + this.formatVesselOrbitalPaths(positionData, formattedData) + this.formatTargetOrbitalPaths(positionData, formattedData) + + this.options.onFormat && this.options.onFormat(formattedData) + }, + + formatVesselCurrentCoordinates: function(positionData, formattedData){ + this.rootReferenceBodyName = positionData["vesselBody"] + var currentPosition = positionData["vesselCurrentPosition"]["relativePosition"] + var info = this.rootReferenceBody(positionData) + + formattedData.vesselCurrentCoordinates = this.coordinatesFromVector(currentPosition, info.radius) + }, + + + formatTargetCurrentCoordinates: function(positionData, formattedData){ + if(this.rootReferenceBodyName != positionData["tar.o.orbitingBody"]){ return } + if(positionData["tar.type"] != "Vessel"){ return } + var currentPosition = positionData["targetCurrentPosition"]["relativePosition"] + var info = this.rootReferenceBody(positionData) + + formattedData.targetCurrentCoordinates = this.coordinatesFromVector(currentPosition, info.radius) + }, + + formatVesselOrbitalPaths: function(positionData, formattedData){ + var parentType = "currentVessel" + var orbitPatches = positionData["o.orbitPatches"] + + var pathSet = this.formatPathSet(positionData, orbitPatches, parentType, "orbitPath") + + formattedData.vesselOrbitalPaths = formattedData.vesselOrbitalPaths.concat(pathSet.filter(function(x){ return x.type == "orbital" })) + formattedData.vesselSuborbitalPaths = formattedData.vesselSuborbitalPaths.concat(pathSet.filter(function(x){ return x.type == "suborbital" })) + + this.formatManeuverNodes(positionData, formattedData, positionData["o.maneuverNodes"], parentType) + }, + + formatTargetOrbitalPaths: function(positionData, formattedData){ + if(positionData["tar.type"] != "Vessel"){ return } + var parentType = "targetVessel" + var orbitPatches = positionData["tar.o.orbitPatches"] + + var pathSet = this.formatPathSet(positionData, orbitPatches, parentType, "orbitPath") + + formattedData.targetOrbitalPaths = pathSet.filter(function(x){ return x.type == "orbital" }) + formattedData.targetSuborbitalPaths = pathSet.filter(function(x){ return x.type == "suborbital" }) + }, + + formatManeuverNodes: function(positionData, formattedData, maneuverNodes, parentType){ + for (var i = 0; i < maneuverNodes.length; i++) { + var node = maneuverNodes[i] + if(node.referenceBody != this.rootReferenceBodyName){ break } + + //render each orbit patch as an array of 1 so we can break once the path set returns empty (it's left the SOI) + for (var j = 0; j < node.orbitPatches.length; j++) { + var orbitPatches = [node.orbitPatches[j]] + var pathSet = this.formatPathSet(positionData, orbitPatches, parentType, "maneuverNode") + if(pathSet.length == 0){ return } + + formattedData.vesselOrbitalPaths = formattedData.vesselOrbitalPaths.concat(pathSet.filter(function(x){ return x.type == "orbital" })) + formattedData.vesselSuborbitalPaths = formattedData.vesselSuborbitalPaths.concat(pathSet.filter(function(x){ return x.type == "suborbital" })) + } + } + }, + + formatPathSet: function(positionData, orbitPatches, parentType, pathType){ + var pathSets = [] + var currentPathType = null + var currentPathSet = null + var info = this.rootReferenceBody(positionData) + var orbitalClearanceDistance = this.orbitalClearanceDistance(positionData) + + for (var i = 0; i < orbitPatches.length; i++) { + var orbitPatch = orbitPatches[i] + //If we extend beyond the root reference body then hard-stop the loop. We've escaped the SOI + if(orbitPatch.referenceBody != this.rootReferenceBodyName){ break } + + var sortedUniversalTimes = this.sortedUniversalTimes(orbitPatch.positionData) + + for (var j = 0; j < sortedUniversalTimes.length; j++){ + var key = sortedUniversalTimes[j].toString() + var position = orbitPatch.positionData[key].relativePosition + + var coordinates = this.coordinatesFromVector(position, info.radius) + if(coordinates.length == 0){ continue } + var length = this.vectorLength(position) + + // don't render any points that are underneath the body's surface or back in time + if(length <= info.radius || (sortedUniversalTimes[j] < this.currentUniversalTime && pathType != "maneuverNode" ) ){ + continue + } else if(length > orbitalClearanceDistance){ + var type = "orbital" + } else{ + var type = "suborbital" + } + + if(type != currentPathType){ + currentPathSet = this.buildOrbitPath({ + type: type, + parentType: parentType, + pathType: pathType, + points: [], + altitudes: [] + }) + pathSets.push(currentPathSet) + } + + currentPathSet.points.push(coordinates) + currentPathSet.altitudes.push({time: sortedUniversalTimes[j], altitude: length - info.radius}) + currentPathType = type + } + } + + return pathSets + }, + + buildOrbitPath: function(options){ + return { + type: options.type, + pathType: options.pathType, + parentType: options.parentType, + points: options.points, + altitudes: options.altitudes + } + }, + + vectorLength: function(vector){ + return Math.sqrt(Math.pow(vector[0], 2) + Math.pow(vector[1], 2) + Math.pow(vector[2], 2)) + }, + + coordinatesFromVector: function(vector, radius){ + var x = vector[0] + var y = vector[1] + var z = vector[2] + var lat = 90 - (Math.acos(z / radius)) * 180 / Math.PI + var lon = ((270 + (Math.atan2(x , y)) * 180 / Math.PI) % 360) -180 + if(!isNaN(lat) && !isNaN(lon)){ + return [lat, lon] + } else{ + return [] + } + }, + + sortedUniversalTimes: function(positionData){ + var positionDataKeys = Object.keys(positionData) + return positionDataKeys.map(function(x){return parseFloat(x)}).sortBy(function(x){ x }).reverse() + }, + + orbitalClearanceDistance: function(positionData){ + return this.rootReferenceBody(positionData).radius + this.datalink.getOrbitalBodyInfo(this.rootReferenceBodyName).atmosphericRadius + }, + + rootReferenceBody: function(positionData){ + return positionData.referenceBodies[this.rootReferenceBodyName] + } +}) +var GroundTrack = Class.create({ + initialize: function(datalink, positionDataFormatter, map_id, altitudeEstimationId){ + this.datalink = datalink + this.positionDataFormatter = positionDataFormatter + this.map_id = map_id + this.altitudeEstimationId = altitudeEstimationId + + this.vesselColor = '#F5A623' + this.vesselSuborbitalColor = 'red' + this.maneuverNodeColor = '#b4f489' + this.targetColor = '#987cf9' + this.targetSuborbitalColor = '#f97292' + + this.initializeAltitudeEstimate() + this.initializeMap() + + this.positionDataFormatter.options.onFormat = this.render.bind(this) + }, + + render: function(formattedData){ + this.renderVesselCurrentCoordinates(formattedData) + this.renderTargetCurrentCoordinates(formattedData) + this.renderVesselOrbitPaths(formattedData) + this.renderTargetOrbitPaths(formattedData) + this.updateAltitudeEstimateChart(formattedData) + }, + + renderVesselCurrentCoordinates: function(formattedData){ + var coordinates = formattedData.vesselCurrentCoordinates + if(!coordinates){return} + this.positionMap.setCoordinatesForMapObject(this.markers.vesselCoordinates, coordinates[0], coordinates[1]) + }, + + renderTargetCurrentCoordinates: function(formattedData){ + var coordinates = formattedData.targetCurrentCoordinates + if(!coordinates){return} + this.positionMap.setCoordinatesForMapObject(this.markers.targetCoordinates, coordinates[0], coordinates[1]) + }, + + renderVesselOrbitPaths: function(formattedData){ + this.renderOrbitPaths(this.markers.vesselOrbitalPaths, formattedData.vesselOrbitalPaths, { color: this.vesselColor }) + this.renderOrbitPaths(this.markers.vesselSuborbitalPaths, formattedData.vesselSuborbitalPaths, { color: this.vesselSuborbitalColor }) + }, + + renderTargetOrbitPaths: function(formattedData){ + this.renderOrbitPaths(this.markers.targetOrbitalPaths, formattedData.targetOrbitalPaths, { color: this.targetColor }) + this.renderOrbitPaths(this.markers.targetSuborbitalPaths, formattedData.targetSuborbitalPaths, { color: this.targetSuborbitalColor }) + }, + + renderOrbitPaths: function(markers, orbitPaths, lineOptions){ + //clear all the existing orbital path values + for (var i = markers.length - 1; i >= 0; i--) { + markers[i].setLatLngs([]) + } + + for (var i = 0; i < orbitPaths.length; i++) { + var orbitPath = orbitPaths[i] + var coordinates = orbitPath.points + + if(!markers[i]){ + markers[i] = L.polyline([], lineOptions) + markers[i].addTo(this.positionMap.map) + } + + var options = { + dashArray: orbitPath.pathType == "maneuverNode" ? '5,10' : '' + } + + if(orbitPath.pathType == "maneuverNode"){ + options.color = this.maneuverNodeColor + } + + var marker = markers[i] + marker.setLatLngs(coordinates) + marker.setStyle(options) + } + }, + + updateAltitudeEstimateChart: function(formattedData){ + if(!this.altitudeEstimateChart){ return } + + var chartData = { + labels: [], series: [ + { + name: 'vessel', + data: [] + }, + { + name: 'atmosphere', + data: [] + }, + { + name: 'vesselManeuver', + data: [] + } + ] + } + + if(formattedData.targetCurrentCoordinates){ + chartData.push({ + name: 'target', + data: [] + }) + } + + var maxLabelSections = 10 + var interval = 60 * 5 //seconds based + var intervalsCovered = {} + + var rawChartData = {} + + this.buildAltitudePointsForChart( + formattedData.vesselOrbitalPaths.filter(function(x){ return x.pathType == "orbitPath" }), + formattedData.vesselSuborbitalPaths.filter(function(x){ return x.pathType == "orbitPath" }), + "vessel", + rawChartData + ) + + this.buildAltitudePointsForChart( + formattedData.vesselOrbitalPaths.filter(function(x){ return x.pathType == "maneuverNode" }), + formattedData.vesselSuborbitalPaths.filter(function(x){ return x.pathType == "maneuverNode" }), + "vesselManeuver", + rawChartData + ) + + this.buildAltitudePointsForChart( + formattedData.targetOrbitalPaths, + formattedData.targetSuborbitalPaths, + "target", + rawChartData + ) + + var sortedUniversalTimes = this.sortedUniversalTimes(rawChartData).sort() + if(sortedUniversalTimes.length > 0){ + var startTime = parseFloat(sortedUniversalTimes.first()) + var endTime = parseFloat(sortedUniversalTimes.last()) + + var totalDelta = sortedUniversalTimes.length + var intervalPeriod = Math.floor(totalDelta/maxLabelSections) + } + + for (var i = 0; i < sortedUniversalTimes.length; i++) { + var time = sortedUniversalTimes[i] + var deltaT = time - startTime + var dataPoint = rawChartData[time] + + var intervalSection = Math.floor(i/intervalPeriod) + if(!intervalsCovered[intervalSection] && intervalSection != 0){ + var label = "-" + TimeFormatters.durationString(deltaT.toFixed(0)) + intervalsCovered[intervalSection] = true + } else{ + var label = "" + } + + chartData.labels.push(label) + + chartData.series[0].data.push(dataPoint.vessel || null) + chartData.series[1].data.push(formattedData.atmosphericRadius || null) + chartData.series[2].data.push(dataPoint.vesselManeuver || null) + + if(formattedData.targetCurrentCoordinates){ + chartData.series[3].data.push(dataPoint.target || null) + } + } + + var chartOptions = { + lineSmooth: Chartist.Interpolation.cardinal({ fillHoles: true }), + low: 0, + series: { + 'atmosphere': { + showArea: true, + showPoint: false + }, + 'target': { + lineSmooth: Chartist.Interpolation.cardinal({ fillHoles: true }) + }, + 'vessel': { + lineSmooth: Chartist.Interpolation.cardinal({ fillHoles: true }) + }, + 'vesselManeuver': { + lineSmooth: Chartist.Interpolation.cardinal({ fillHoles: true }) + }, + } + } + + window.requestAnimationFrame(function(){ + this.altitudeEstimateChart.update(chartData, chartOptions) + }.bind(this)) + }, + + buildAltitudePointsForChart: function(orbitPaths, subOrbitalPaths, type, rawChartData){ + var altitudePoints = {} + + orbitPaths.forEach(function(orbitPath){ + orbitPath.altitudes.forEach(function(x){ altitudePoints[x.time] = x.altitude }) + }) + + subOrbitalPaths.forEach(function(orbitPath){ + orbitPath.altitudes.forEach(function(x){ altitudePoints[x.time] = x.altitude }) + }) + + var sortedUniversalTimes = this.sortedUniversalTimes(altitudePoints) + if(sortedUniversalTimes.length > 0){ + var startTime = parseFloat(sortedUniversalTimes[0]) + } + + for (var i = 0; i < sortedUniversalTimes.length; i++) { + var time = sortedUniversalTimes[i] + var altitude = altitudePoints[time] + + rawChartData[time] = rawChartData[time] || {} + rawChartData[time][type] = altitude + } + }, + + initializeMap: function(){ + this.positionMap = new PositionMap(this.datalink, this.map_id, { + lockOnVessel: false + }) + + var circleMarkerOptions = { + // fill: false, + color: '#FD7E23', + opacity: 1.0, + fillOpacity: 1.0, + radius: 5 + } + + var targetMarkerOptions = { + // fill: false, + color: this.targetColor, + opacity: 1.0, + fillOpacity: 1.0, + radius: 5 + } + + this.markers = { + vesselCoordinates : L.circleMarker([0,0], circleMarkerOptions), + vesselSuborbitalPaths: [], + vesselOrbitalPaths: [], + + targetCoordinates: L.circleMarker([0,0], targetMarkerOptions), + targetSuborbitalPaths: [], + targetOrbitalPaths: [], + } + + this.markers.vesselCoordinates.addTo(this.positionMap.map) + this.markers.targetCoordinates.addTo(this.positionMap.map) + }, + + initializeAltitudeEstimate: function(){ + var data = { + // A labels array that can contain any sort of values + labels: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri'], + // Our series array that contains series objects or in this case series data arrays + series: [ + [5, 2, 4, 2, 0] + ] + }; + + if($(this.altitudeEstimationId) == null){ + this.altitudeEstimateChart = null + } else{ + // Create a new line chart object where as first parameter we pass in a selector + // that is resolving to our chart container element. The Second parameter + // is the actual data object. + this.altitudeEstimateChart = new Chartist.Line("#" + this.altitudeEstimationId, data); + } + }, + + sortedUniversalTimes: function(data){ + var keys = Object.keys(data) + return keys.map(function(x){return parseFloat(x)}).sortBy(function(x){ x }).reverse() + }, +}) +var GroundTrackContainer = Class.create({ + initialize: function(map_id, altitudeEstimationId){ + this.mapDatalink = new Telemachus(settings.getHost(), settings.getPort()) + this.mapDatalink.rate = 2000 + this.orbitalPositionData = new OrbitalPositionData(this.mapDatalink) + this.groundTrackFormatter = new GroundTrackPositionDataFormatter(this.orbitalPositionData, this.mapDatalink) + + this.groundTrack = new GroundTrack(this.mapDatalink, this.groundTrackFormatter, map_id, altitudeEstimationId) + } +}) \ No newline at end of file diff --git a/public/assets/images/Ascension-310px.png b/public/assets/images/Ascension-310px.png index d84bb2236175471898297774ccee1930aa748ea9..f88c32094af0c3b5d2834a91321638baeaab6614 100644 GIT binary patch delta 62832 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 t)xmj8^TB7;dP(s>bMa4WJQPYYl z8$LZwnNAYp&Q?Vo5ufC=I=(}yywSwK=U$q*2hBUJqRNv*NhyT~OZpQ~I2 z_W#4587F$TA~r!VQowjEG&T#OP!Zwy5X|U5;fYiYuye2WWj~EekR4r11u-s0No(M< zKuye`LXO%Oi_pR@GlTevP5fpyk88KJ4E~}stmLh^O;epz4Dr1Q_QVQbIQcO>>B3V} zKC>aI?F>*~;uLCV`C5gPS>Mla1${NZ{1#g#%HC9V6zIr!o!ziW zKN21v1zCHZ7rrK9$msL&+rYS_HaWG_{AqByUakvD*Wda}6E|5{r+;IA-~jEKc(0uc z_y177*nG86uYgC?uRFPwX2Luc!wNsQSO2-^7ign%q4pxKn-noXiR?aU2YyjP87iR; zH5;6@ofgy*QBDu3W(;;LbWe4Z8#+bBWnp3Gm0VSPg)4dZkBXC@KoRA*-uF|I7*bH> zPEO|i*HjIHgM~EM9p0J@6n}FZa+bH_Iz{Qu))-MBZris`G z%55ksOC=xeBL#>Qow)$FHQ5BAs=p}?KK_0Bo5gimTfdWYo&V#+KimEO&pmeyBA95{ ziW_@xtB`7-CT|$gjB5{YBz-&FnWGp8?mpzOy8mZ{vNUh_Z5;)4Oc*J&_8vMdFO+A-DFkBZn5({+)+at4n%^E9!Gyj=l*=Rrt+)>Q9)v#;rGD9+;_#awbNlmuk^U z;%2IPM>B-EFy3h@xcr<%8hX|)t$8I~Y)%QY#l@+cgM^ozQjB=U&V25`)eQ(x?6lm& ziChpwafmsPN1Td+4pRkJRTY*4<(M!6-Fdd6FDk^(I~0SChEzro?QAxvi9@sDC0g9I zl`mZBq~5)I7i5L(|C!kN6JWp7ShaS!#{0Gzgwfp;;*JY?poU-nXQw3|{!%1f9Xju3 zrN2UDcxIQVOR~9ABy^;@II!&E%OFONqrcQwz2W_5aFW*ZOBY)6%=Pw96CDoqUp3A# zz@0c}8=OXTp)FdQ=`C~L$?5T)B)x*nOd-A@`V6TB$u39^{&xzhiv7alJT#r`O`M)y z(8Q`0v)hEii(3X(Y{+N8;;*2>x)o(8V*MxHX zZ4d(pElr!ILNM1sA_abdA_!Yiifg4e0fgsjn~A#m(~9!#bCzB=6rjMs7+xmJ+`G6dAa-S zm;;3sS8K%11UBB?IrPcScbPz29COBu7uWk;@mlC1CVUW-XrDgxr(75q+P@;%^N;U` zz*}ToW>=EJ7W(1|k8pgF=T-?>#7xwsoF<|ZynS|mZccMTRHEO)@!;*5aDuQugFuK% z>g$b5Z9;WUy)Af}&=+Zc;f!~jKf1d2zVwiyznX%Y-u1qT4$m~si)YbFgKym0kqpvM zSob?YGWL*X&H!g{F4Gj)+20Kh*~`h;+w=hnAB16RCAutEN4F-G)!je%&~oLBduSajdmsa^AKNh+ez^8cG(r?+1^y!1 zS^pYS|LrhDazW*TQ#cXUY}$E0Iw@QkD(@}GpK{h#V!DbJQQOFs`g1?nt9lw zFayRO*`8Znj?w9mNkc|up0zON%3^GrgfL!o>XB?N=!O-Fo#MR3k6`KD=R`?8%x~Hm z2h5&*3S!=v_*1`%$Jy_U*f(YbbJ{II7gjgi&ee>R;gbWxv(xcnZO-`!^N_qy<*)UP zC*Yxt0l3vs;3&7VTWGREJNls3n^$R)t$7!R?WBjU!U8bCF(0K*@arE5YlC6j{Vy7S zpw6aKo0Hfy!mO;s@`UzjP1JRS!dAJU%1_-?bzLsKzCSx3*K*N0wXv}o&t%xr)I}g! z=};|JRvBrr`O+qrm3UdxwVHoY{Sv%Ed5T1k^G5=dV|X-;Qve3VH%AtKo2&gslJaIp zRwWEMRTeC#dLnpOntI%c&fMT-b9H$qxBSWa}wCAB(07z>Z{)N^7sl^c4T&! z@W*2g_Cx-8b^FfN8d?@U65T*kVDGxGA#3+(pXON{HWmth^hS{z?a5}53vz|`7^MH^!+Qc3=Rs#o)^1VcY_-;=62>`1OXhLUcsg)nbVRxTEx|gnU!KiL_uWpR2H5#}3itb5E<)O7tGtUr=rjv;q~Ox1 zQ%NG>>?8B3CIjaqgH&1 zqMPe*UES~W(FX4<(VmwSMX-x`Hu4R7YTBcEf5nB)Vj0N46D40_vQ`6@Zv#Jw74?44 zG|Ffiyd&WAJS|w$R!7L=o2c#Qlb&WW`@q%ewK7P)q4&UYa{mK8J&NkZzSLvRC3IJ- zPCJI<6gd-{UMg^~Rvp2-$BgLAq{a*hnq^H7IvPNQ5w3OfzKrf0fm7nmhHbs?;4dA& zr}F9W=k|`&Iu1Rp{){w4IsRM#O=dtIE%(NB)L<^oCV+74V0Oz(wdH%Sr<>`>d%K!n zcJgGLJAhk|yX(x&%D;(EqtJ%#yt>2@Gq=ZPk5Y<2wtlOBvVQ#5$r)j;Zh9QKa7Wcx zPaiRN4Sh0t(N~OU>#(7(MK2*bUcSCH8v7*Sa%H0*xbEf5B?-LLJ35gZorgWsgwBqz zTaY`mYfB1z+7(+PPQ0s|^no%K=C4 zUS(f<&RASq+0P4sr%}aVC-rxGTrlbZU4-we*B&zu$-aKBo>29zIQs}cz|cJ5jt5nBn200L%jB=G;Ei|~MUj0L*)R1eb zVr{n)pn6RO8?}8Q9za2LWf1p9DUe8}M@;>tIr?_#puOii_WWyBzehwL7+`q4vQJ2% zz~BS0x0=FzMNYj!fV(8EvwL1wLm=SD?NUlldug8I?a$bAjx1uVLws^`96iW<%I_Al zEjNs9@ekZ z8(b~DfzgI1agICdkjX>xhTl*tT{6w@idJ={_}Qh>C(dX@1J<J8jik3+-2(7N6GTn zK*zx6GI-hG2gK`WiNJyB3f*DZ)$@<*QK(MK3;oG>3seM&N?Fmm z&Tp`YhtKG94jbrMv@2=r>+oC;+Xl}*Q5Ugi^W9eRHm1TsKu!qH4bZe@(I50GCku(2 zERhdr+*aMTER}hNcOEK-+28kZpHE&nX%*nuc|}{d%}aaH#keoxynD&NWah|?m)NO+ z4kKmxD<}+KQ`8}C#5|3Ly`#sTiJRAU_>?j(m|*9P3sXAdqj%?UxP60@-zb|URPkK| zWb3`S_)(|+@BvFntx+`U?i!tbSs4O|UpEUof$(kUu8>)-%w(Kb4Q7;s z<#jQyazQGOhBU$XVrF`-3o`=zjcfM=DP$%%7qLN$HHMQmLvHxHI4MSPB8JWiTkFAF z(;B`pjcU|;W}XNnAV8PV-Ui5a>g-oGT`*K{7-P1=yUJzb)*iB5zCv8d8`~2Z_4C)n z22hPdu)`5nlNN*`v#(vDHFjGb&prlkH_Lpd8 z9h;wo8nCEII8Es~%zqj~LRcX;CD;c4FJ*T@p9>mZ>kg^~3kn<41OpZa4E^03o@%PW zd1?lA)t(J6)*e@;rr^BJV5Idq7dxTTj%Y`)HX}xzU1Fe zaQx$+mQRjwk9LfjM8UjI9B-u8Q4X0*%q@M0G!Ag`ohHXN+ZDUQg;eT4I>rJ=;>BRl zQJRC*P{dO$0l`Wq`B5$yTs-k8sW}(9I&ACpHD9O4ARV3o_n)bkfsc6E~H2@T(7P$3Y5!_e_3bV ziPtK2{Dth$>~T8R*PB&r)$+0rw99I6I!&9nQZDPQi35pU389y|Unzf7J$9Od-DJDw$#(C`vhEw`-|i8wulhOY@Y8=c6le^4zBum zAS3m@cb82hs*WUb{e;6U*F*2SHEx>`WyAGGr1Q#4 zLT8k=LN&jwjw=ux>M)`(dKhRA@8HjsT#{O}g&-)=lNp0zZi{QY)*Ki184}zYX_huq zQ2^x^$FxRf3Fh*~eQipXbgs`tsChYJ_~BAKzEez9Tz`0XF=6-Lo!e1*W6q=NZ^xw@ zuc$2LqL!4Z*JFN;ZYqDxR=;g(B)Kv@{wHAh2emZhH-IVEE)O@3_X9)CS}tCx6?<^_ z*7D5EBl$F^bRo=<2xp=|ZSGpD#_w{1T7go6V@#RN zAoca!dw|!x@2P!J4cf8k?J)$YLlO4dKgUWTg|IbSgr!l{O%Fpy-deZn{X!0T&@Jw! z-W#+dQd$u5y{k}u-XuCXU6JL9i-@~T>UK0ROOiR zd^x#Uh37>U+@_SbS?QtHq7vvcznF6kP8xtX=eWT}TMP1F3S7_Ki-Zf?U%xszkj`l7 z1pl6K?p6|m=q|GuKTe2Yz=`oyHZ9K~-`GkG^cHgNE;aX0(_lp@sS2~Dj;i6}pgN2{M$J9M*n z_k#maSn>vif3vW*oHzeJ2oCh>uG-X=jQ%s+@y}BAWC?W7ql6+ENXC@=T~)^%D%wZ1 zJphgk4RSqXp#W|zesB99O=R%NC(m!!eM|H&kp6@Dr>5AZlFoX7)wUs*d350=Lmf3& zytxVw%WBtJnX7y^=pvS9r^n-_=fuyXYuk9&@rLK`j=8H+Fy$+RSGqS+?ds-CP-xd6 zIeiUGQgdZZ=^1Y~B^lM#VIIA+)9T(cKi2MQ;JJK zGQg$s{)i`q3yB$>y840f!=JbMzZCRPEAG}WJq+n$n5}!fC1`u@(qAMWyp3|lbr0R} zK5;iW^>UrkK-y%DItEfZ4rMr=rN&0+f0z|) zb5yG7wN@P5{C^x;H8IuOLxU$#;Z+%^YPVPJ?XRG8^?TBd=8E*;&pG8~c0+hOsnyW( zFFETqqQ%QMmVfPdXfsuKQ?dtghG%V0UNFCA9O-wfNY3}d+u{!`FQPgx0>GIB7+ey6 zJTSB;+Qj)>9lf9oH50%eT-`;q^~JkqQK7kURvaY{otr~iy87N~2u@2Th?mOSG7o;M z<^%7lbmZ-Y))$t}Gumbv*>PDtot7%302z0cu45>q&(%hYU%*!FU?}U8owB(1M!x~5 zWcAB$pFVwTYOzGOkKTJ=>8q*R)z9#e!?~CyYfZd$M=XwW_f4f?!tH8`beor#?SYsM zONrFOlXi|hFV&}Gu#{GLmSL#2EUcc4b2^SA;sp7awdWe>RWO^bUEi=|{PXw$HK zx%R6E{;t`q4igzmC)+R2dzgh41B*RUUtmYKdio3qVm&F+l89av{T{<2p!b<(AUa~6|E!75_3&l%B~Bk8es#|GedtT4?SKQ#;2g?s_{+Byvr22xytX6*@$aS?h-0ZkAO4`z zw_6GD!gYA=-pxY~J0bgQ?{Do$UVhDT zVBJ0SP$*0wH49iSZ?%$OIY_I)1M4=}kkG>r1@772iK$?xN8%x7#_-Cvnn*|DJ9~C{ z7wv9^uPIVfCpG;}MYDl2`_;2J(li4r@QX}(Wh8K>enxs(VlBnkOk@2O&-mn*hh0qmHOA)_6ZKVB96oG8>{^!JD)6m& z=oH^z)1atx{Gr5=lz)%-JiT!DYENwVTTV-(_;ulZ0lDo5v(RM zmm{`#Rok?Dovi83&B`Wd2zd`xN2&J15_b%|I+hRU`8)ezZsbzq)bWm)da0*jf zxIycz|2V2nJP^#dxQ!t(?|{oh>EdLT4hL+Q5sR-7kDGbjui4f~M5ejn~Ig9ViV7rc2Do5kx-fWQ3-b#wR+ zPq_THd+Bn4xAikh=;$+`$-3;%Z=Hwbynd?1H(m7dyKBS)0Y`=`8es5XaB26=(YXiz zR>H)^^RXRJ6H!}p?*`XumyPmHK{)+2YI-1m+SRD`YUSn7Z0fTG>U1I~h^i$3&%KL` z7$9`lF_|ac@&&u|Qo`gtRNdK0`g`b^DkR8#siF#8Q)P@)dUwBf>1ALcr|F7kF;nknByKJV{NL53FYFTx!M6!!zb-X^fR$GClKGHni=9tRKo zdm6|jj0_vJ)nyc3%@p&B`u|2#Ka~RA;0Gaqiic>GbEFI~Z(hJO;r1w? z^F))=RY%5?eyOtk1)f`Us)?RIi_u9g2nUO#VERvhF=|fkldqAUJO#u+_-X!}q~3da zfRq7yCj6423c6r^c7c~_^0$ls8be;p<9+1ipVXiz_j2YQ##0|ys_LKH!@(KDUQO2E z&Bxc~DuSI2l{P&T=l&-avq{kn^96+Lf8>)FgWa0;wwr+U?6do7Wy>JwjS*OF(2|n+ zmBn8vJm!a2C%l2z8cuaDNMXovpKF{+N8NL|)#MU`&g`6C*aMe8D z_txyd#c+X1oyt`yC*s3X5l=K?)x;)QLa!zb5<@{-PNxHE7xlO^JHMKCegQfN!BBdu zf*r1LwTW^}##XCMn%_H+B3_M?n1Ap(T2D`hdxbk>z%zKTb_G`CEjsLn52nXWd|79t zm}Gx_;FmnRX8Kv!Wi;9Zw3vq)(XOpkZ*t_7w%f4z-^qR6m(2bQop}Z)iS8>ge{s6w z)0dkr(I!$fk)NMdRQ(@`lmG${Nm1Hq_296&!i@|MIXYGw~;nfDw8=8tk@%Oz}x}J9!MhQ6*x{neuGc+-$Rf5z)PU0c!Xvt=X!0 zrPbZlha0HXZ?o~Aw%5ym9h&{_oc+dL5BkB*7P#uVYySUAGEkG-HGIcz_BwjnzI zh+M1ayd3+oT;=reIix`9E-Lc*qMY(JS0`FukgZG#__9JyRIh;v!wLC(#wf0~v;tpl z+<@-+I~}?E0Wi8siDSajj_*dj-&~pVkL8N`8xON7Hn6$4 zKYxGz3psh+E0uiLC%O(6IzUV$c*=&TgqCyRcLC=2%ij<58rfITIbErd|CATR>F*tm ztO_4Gp&N)_(G>{vI<2N#QQZgDubvCf+A*Occ4rYeA-p?A?R2uA99loAls%XBGtPx& zf7`S}OsAmg1fXcj{=`j>;LWr!x#z<2#WQjmfj3Uy)C*F-meTi11u$G4&I#Ed z7u9-?qQKwf(I=MW^PXA?&W|cDY`tZF6V#aNLb1%33v$cIP#l0)HDk zYZr^>bmXmZXGskbzxR~JQ)jmy4&2pr(a;;_2D^ot_w#}f>{*eRfdTQG&wee-@3<#; z#w}K=4R(|zxC*hp*j;06*85$AuE~LUKgu$sd!%7jK5X_06KH7%NvY-Cao% z_|J;-qg2bWf>&(zwo@^M6-U&zL-2uO{m@Pny0CG*#IteB+``gtOt;g{Q>xK?Z)}oH z3F<8DtMjD+MF=q)Hb--e=~!Uq8sZjU4CyW!-v~i-QjXyo-pqc&&?`9(%fZNfFN}36 z7f1?>qa9aobUK1m*HH3siMHbJ2X3H()B4xnYySs622do+wMc_TtSPB2UxE(mvH#3P zP3ev2ZQoPTD?;edEza9A%oB2A1u-BL+`sGH?E?I>V(v%Fn}^1*z=zgTbiOv#eO;#= z+iA`jFDw|*vsvDtx)An4YpPe@ofTbE*qp~l7a9dBcB}>dt(-^04%D>sk$&FkyLE}q2Eo-;X(?UlSmu@WzBuogc!;R^an***HLYeu~Q z|G*|=2y~Q9hPufs)^M?B&*KJoF6Y}(d*{mpPG>K<{eJSbW7r-vs=E;x(zp+?LnnPK zDl^}CN|eE`Uz$+VPLT~%`4Q8QEanz&7AnoFBeyEAo%=_kj)ndQd7^8jOT=p5#vxZ| zysWaM>aanya4u0YF{hb-eP3nd4SN#+QeJK@%5J;h8f>M;zn$T+MUy`i=&~YkXxpIV z^*F>w{faomZTD?_DCgm%SkR5h^Q*&2jZr3zZ%cOqT zfx4Bzzh!}~vSR9Yywb4Eg2pzi$_}vj%l**LV!04WcxB)&XJM0vKVScbE8#%J2_a@B zTS1G%x@7IAJ6{lWn4n?!2hT+{(e-zJ0Uzv20)~cs=;k4wkyjUh%1K4!1HJ_XfnG(~ zk!A(J`&N?#EIcliH>vwx&w8;E7R26nM$l+t z3xU*|2B&kG_)TCU*mCvDj^o~^GRyTtUq{zLcHjhfExg$v=vpony5n@G4?i(I25HJc zRMn5zzB#6yD6ajc+l4)M2J|+#lBdh;7(L`#X#V|>L+MSImHH`d%L^`M(DXyOu$-#> znd5wde*MBXk?r>n$hS}aZAHIMV9@~{NKot3^Lb#{@z2nv6HTe+ zI=^evqfJv{?kx_rpw917kfj|+>%~N2!s6L=6Yw1b_3hRhNjo*YkbAiiAoq=m#?bsR z+Zpkyg7B6mL7tL1UANxmT>x_Rm~jB9UPt?hvnf8=hgU@6;~+1NKF#Kfs8|?(U7XaI z=jf(<;|btw=2~`B-`q;L70rO1e8)S$9CPR=oX? zWn20q!e&z;@sxorrTp;&Q0sCOURFr`_MiH)(7Yj^t-=YveLL~P8I3vSNO!#*mofoT-J2kOXp&et10e7& zFXo?NzTttG77n%n?b_)aVCymWLm@RfCqz|aB;ohpqyF@@{rfid5pZCWLvx~+Tq3GI zBj>Z?t3I?S%frv}M(uFIZB4;6ISKcQ;rnb(1VAcwnTbTwohQZE2E3}R*sgJd z1eo=%8P%gJd)u{hvLU#O@}=R&#d|4#O8u%HxA1m~fcUxI7st*i>rEXX;BvysGq0LR zY>7bQ`4?Zz%o-ac4yes&4jGlNL0w~JhIGG0L+dhrF8DIm!r0DWpdG;_AZSp8@%S^< zfc<}|{%{cd8}AmOjy}j09HN-I#MhVyVyVK<<2En-GdZk8WUU5S`CDU`LF9T4&mRrU)ukoN)-_|6@@&~?_J0qHo-0ao zy(-nK?dtq_b>C5svM-C`hY{(G-;a?LPEZQPgc~s}2}YA=K`~KER%C2fj!70OerL#l z3SK@iZtsyUSSYP3&YUf>6JgqyxJ)p^ERx+R0z#Vw5koeC*3+H{a z{o!9*J{y}!YoGp_MsX3*l?+zhQVza6G@{34TAW|w@%KR}_Z+knE{Av!S{BJPeYSVC z`SQp!=7-SEznj*S2s%1kFEHG2I4Blw2i#AXw$5Bu*B>=V!b64tSNIgqxlu-~YLALq z{FQI<&HA@}K)L3XQD)AMh^*PZ1%tjLoMcUn!iGm3IQU22ySML9X2cnZdso5*y?SG& z=v9Wihe6;MygrbJM`DA_Q#OA4gBT_GYJeaNL<#{Vs1Fs27_i&0I85-Gnu=O>jBpwvLn4a?L ztUb|&+oXp{C6+tLxgDIm%9u(7h9W%6FGgV(qiz`%@H@)~k_j%zn}TpCy=V8s_s!u8 zU{G}!-M?;K_5DQQ?qYUElN@i1E%0z>__60Xzhe9rp|INbb&#>yutiB13#|JQL1Nw& z+z7%7mhHZp&ifbCVG@s6Usu4Wx_mb4i=H7*{s=J6V!|F^y(c+A!ks{pgnvSI-^9O) z_J8CidM58_t?~Lj`2k#E)P}@;LDe=5@6bZC`R^hbIez$qrJX0kgGj!|w|u9k{*R_} z@n`b?|9?_c4l5FJN-C9e-p;mFLM2ox33EvH4mlrZbA>X8a!BQDNu``dd&_yl9An5? zIiJ}ucCgLxU7z3W_Yb(au3gvldOn|z$MgP3`7`X*ausA&?q;i&poRMvN?J!g3Wh*&|@6wppFj_K6@Q?gWhRk?pV5On$mQ8m}ZAZ4P6*Xt_x7TE5 z{hhV;!G4%GNP#=}nWsXv>i5bY4-HW34LqJKYkk=rT{vCbk+Kg6-;SG%ba{CLmM{A| zj&JacCRH{U#lt5=Ilq1Nca%clfDLP=^)#Y)=HGWb=kTi2HtY2PB$slv_uB+rlyJSU zBKPWG=Ci6$gc)W@S=(5b>GHiCy=@B1Rg%2`-*YQm@Hbd%)H) z!fJOU)joY~2-t_6-|JR!^6E4&LhAaqcWTtC{pL>d?K|*~`H=zQm1MK2?BD$@;<0wl zUI)Z`ypFr^#OS6tYC>eri)l85AI1Ed-mw(daa2!?pV!&EbF!1d>~R-u1NuxUH-Gc$ z2|X~sM^qQD%j1A`cD}jqXvUT9_G-ATIAX&te^BoP9LTAhqfnUN3!L`CwIPEeG^0w1ec+`4$j z3E+9q)V%y+D`{%HJN(7{vRd+J`rrFo+{$>%v4fk#Fb%(y5g+i^2^wXbPp~emol|)U zhCIuObJ+U?wYxs#Y2+43w77|s>EJz8#H zmIc!NnSC7@De%ELRA4dX`GL5R6997asZ!a6bxjssw&|82qqK;BcD`0n){bh5Kd16XCY!?R75EtKH^?9T)w(5aN6ae8Pz zrg+;3qvSs*DO=;^Qm*skUz?^lzH5;O9`f^@!I{fGl9BN4o;zqmo&H5Mp`7Kze%O$$ zG0Utv`RxjJp;<^=J}Sk*m`eJ)W;D9a?Ou0aXlgqN26HR&|XJHOni_!`=#lzW6)j z&YMMakYa_Mys4CuLDC}@2ww)(= zOt}8v(sfo$TzicqGmYU*qW#Qs_&fV7lC)z#YNDl04F1NE<@<5GNl4Pie!p%BwZ-Q` zC#$Y1`f~&T6k@qg>wpa2_8*2vj?j$ElO-53w+UMqC>MGLNj=VlM6w2i0 zBf=nEO{H*BC}OM&uTP4RujhH>9KOCZ{`nFCbZMO590jk1owD_}!gAmBAR@7I0 znV0$1DYWvZ){AmHkJ#wn?`!E?LV;A~-zQ=3O{BjUPf}ah8sJr+h@mu(#KLk!3NSqk zVw{&tAH26WR{+ZZsez19De}_A273{nBcO zvR~=>x&4`@AK*y}x%)(PLt`BRfX1PRsUGs$3cQF8*C=AQY8>@kxte#!KhEsjtfbGb zXA01n%B}c_pi8&CNj$-aaGt6$$@$ZRxcZuYBYdKSVNb5m2Y3o*f?!&S!Hzr+_o6c) z>(#NskauM=UgJ#>0@k+}APCaL7+pU6nAOs74xkCMDrw_l(7XJL{s3&z?*Ti-$k_8< z>2g_$%_VZ{UE@vv)n^JvB>47e#x0KE(FbyMASf~ucl)5D$-J3K8BrrNT+oyv`=1nL z*1#=pns831|L`!riiG@bN@0Jr?^~+lfn$uf+sz^V6$Wf`60b3-yC{9Wz&$_Y?~`q` zUKcQU-)BiVI`JehXt6T)A&uBb(QayRk7F#htIK zktv;~)i41;4c@0O#=u?aL*~^}bJ`gPZJ&dUyGp{_dnNrc_jss7nhW z7qS7uKuDnQCPGJ;l{W8fkjnG&v)^g3vxCm2C9Nn`mdqPEhN1&Esy8n;X}Jm;pE_tO zYjt4If!1rn3XT71b~$vqp-WIU;$rqfqZ0N4h5cEu6CoA`nIXnCyY>Jqaf??oS#U=A z+dbY`p5UlEqq5sAy$jh3l}---pN$2;+(@|(^7jnTIb+MO(`Hktz8_y9U#`2N05%O_ z@`E{dB6yb4c|t@nKo@rH{2~=!4*6^z)4sCp)eN_^Rz=SDtHyNikCt5z#@lzR?AmF= z$%2O6YVi3N#m0d>qdvb(bwK}|!M@->G@$zRWL|~=_}~X3-nG^CHqub@dpXc8nH%(7 zG%`(2I3nTK^x4ysxx1k)tq)96X5%yzTzRiU`_WuX4g2W@M<8Nema>`&a7R;%TN;z3n$EPLr)Av&N2bQ(LoDiYY*5LlAYZ13evcjGeIrky4Dph^d8^sZ zSi4F4_-V&*zMG#u0PRbE!UaF22QDji{5U6B%%A7w%sO(b?PSJsjETE~&xIVqNUDUB z2OR@=$I$W@KuCztWbb|pJLcOy8<;U0rG ztiPgbie5$(4tYE(Da_*9T2u`!sK0%Gxon693Zimk0P!3!MljxnHpeYBS%9pC zLl21_fsXNB=xO^`nxsQLQ{vDGUKQ4T0XuJzn{3=+4tl!jf0aptSn)Ehyp9GNMIe{_g8Kn^e#0%5|YT z^;d0yZ+ssM1P2Dnu=tgO{BlE*Ruz`stw|#%sa-Qaq4xEUuo)Y|8_VDt79$VW&=``7 zK=4H2w)OXhZvmal{-Z?Fqx#jmxT*kni>>l4(UYcp!lqFPIg8n zS6>n6cljr--X!G@QOr6mQeJ_52FsW85^S$K`b+UKJP@Ysc&&2uH|RK%aQoqfuoevu z#Yx7YQ^t%!v$=NsZutWlkTkOm8|wzwhKxfP$FKn%AebT3 z{=W;$7Y=_tz?Tv$J0#1L&5u`-5^;HdIsfuMX%+i6NU1F1V-?YG{M4_-B0&eV_R#sj z_-K%4K5MkUT+ca{|6J5NYo_ax%TvqAE@oQ9a@u>6ErBzLQ{dsFY-t}7e>i6r^akg@eg*C0G`<1~D_t96NTb3zhyxg~YPhZ&eSic}4JePz zm+x0L+m>(eEvQfZ9xXJPITouSub+d48B7r&f4WhHJo%&WiD&g2Wj5`cDXenoXa0KZ zTgA(#QjeQ$T>MZU<@Zr)XHINhek*5t= zqwZ*HLG{ACk@)hMpA)0poBIKs3$?B&7SDg|biOMjdJefx?@P7&aFy?MYW9amz+8%X z_g_Y1i8eLo8SU0>8W6bL z^^0#@E$~CUEJS)j4cAx(t_#EJx4}RsO@~os%9wu#GQ;m5(B@6VF`kHU6isg#7HgiG-u74y| z!kL<&8=&J#a^-<$HNMniP`B-IL|BLg{&rZ!0~)VyK40jYS<=MY7jYMDmx$?__}X~j zV{iP^-m};b(;n$x7k*f45RgqzK}BYfrZC+19A=Vl0K_|HOQvk^R?V>=z8gIDK&43UOze=rfkEHyk-VE=W1)+OG>K9OxfV? zJeedKuFrI%F5XIP`yyY~YGLMN>=NJR*x?k><pT&^5J?G@LE1t&>Vh?-x8|yQ{|Gs&8>YBMQ_sxb~ zK%=?XRWr$rr9b2vA6wBzauB3B&pQlMPs z@<#N?M`YID=VARltXI-Q(dTbHPwV|=SCg(IF_l@8&=dJ__>+W~04)6FH3@k_kY%z{ zXl8t3#-0E{XKFw11cO72Wpkkj&0-^d8KiNhmL0Lx&RD*8y~Pq1 zxm@;aKy`no?dyX@G1HRJJ-W{0(38Tz7Zh*(HB@+`;e(RAzocn?xl59*tXC>(t9BB+ z-5>}li?DqSR@I#w+MvLNhX_<5f-f_iuod2!Mr+{J_W?~Bo2RzsZPbe1)jV}D9JIGu zR?_wO>ODkBHtu(sB%*U_W{EiTjY@ef;w7c@z|n8d5Q7B7gOD29M+uvNhrsB3XRhc) zNo4%7jD-H&y*YQkUoL;1J3?3$dNO6gej%+~qQ-F9E@AxyK>*r)$GgRS)nUQkA)D2$ z-ujmfGJpM&{(ITy4H9K{8cElWdM!Pzi#q2CWjMcII>`?*d-)MW;Lqe~p{FN(PaB8p zQ*XDNu!&nXrf(>1^5`nz036s<2EGRp*d(9Q5GNLI#|(K^S{{ZY+#cEE78b*dIy35I z9O;P5xwUR9U*7x2f6t39%#;3-iPJf)%W&T@nLHUW!pK4GG$id%!h$)^RqKfODSPAY z6B0%kO(3oF?@h?m8J;>HTE+Y6QI{$+ZDo8{x;MB>e%liKoz44o_@PJwg6 z)_8;1RGYK@UiPg9{Hp(H?4Ya-J{F9o0VbQ)02#lY6^i?19`hUI_o#fMT|xt; zofGOcg3~HKc(Nxm0(8Jo?sv4f=y<5MsQ+PNw2k(>a+aGbP2{?6Y+VKPUtqICxo4N* zv=;;(ppIsU1j~E(K(;C0XHCXj{-vnDaR=ak>?U@Zl~`c&tHuG!ZQAebUW@uXnE$B| ze+TuVYVI$^^~SuIufGR;+)+_<{+&&b1}c=^w`KYo;uzGayu%SZCsRI?Gi{8w#yyDs$jBZu$Jd-oMuu}<8^XHC zMQs^mw3CUKeAFsgNlF|?d!ekW%W_A$#WV^EgHMYZc5JvCv%g^e-+w78GeTKqUuMQ) zkT0F;WWj*(f>Q%mE(a}S#{-w{ZrR@QiyuS zspY3u0f#020~_Ca9+mjLB@5{vj^}v%vDMb<`ec_HcW|(Mh)O&Lboe)N(Q12i>%G9> zHn|X0W4}~$FQZOm)eh5Vj~O2agV1^e;$-5+p${&!+U(swYM?dORXkbDh~u7O^G;A4 z%HP1<7L(km0j#Lh2JKjM>k`~}4eARMNi)P8CJgt>7xc72%M zw$Za5^UoKvS1D2#zkWS=`ctdIfANLoXRm%0I2^~)PCgZJ>E5-X`x1&5bpFvY6~1!q z>c1o#oooHOTyPSJHa1TKV}2BFO$3y_qu{n+M9=!6-`l_rela(^yION#lR)J#zUbyWJxx zsPkWT{$7OP0k<=nwV}H;W@oM>cVC`pnFh$uYd^*Q>BogcUOeReGOMLg=cpb{OQrj4 zlnFdE<0w)k8wQD{DsMdJ|5JwNtP~9olbjP8l|&cZ{Nn;N^hP4y-t^Y3a$8vO@1LII z4TU&eCDGXiKf?>Vb8PCruYX^$SRAU(WLGJ*r1u-~>xNh;l(18~UraobXKn_rae?_K zN@eW6&L?s)$eGnRX;E;bA_PX6*-OhU;p8uL-+~(Jaq<;%Fcr9>kQ_%anolEpL86S| z!ppqCxcIr$0x{TuJ_wAq4{brQZ-zPmZm3BOm?s^Qq2zT7&y3n5V2n<`?a2WGA zqhNSf9oOnX*qyk%=qOJ$~#F>!>CKtcx zLL**k6EYqj#6&3!{7W|thYyd|2yzM}5hnD6(ptsf36%)$X!t&gNN8Y=jGSuvd<8nA z8H?1M!+}zh>KB`;f6wNLp2l!kG_rSNX3wE9-mg@MMiiN8=h43sxnCgM>b~!^rJmr~H+XMMf zi7v^QMsN2;ET7+Ddk5q{8OZhUNqdds8-eVR)P)LZg{2}>;pO>rXrK1gqa&M1nBA}S z@+`n&nuXnwtr~F+2K=6fUu=I?IsRiZ1iX}|N7ix-G3i+v=^IVud~4%mVqi?M!~M7V zXv%bsnsRpc^W0KxHJGr1{#u6784d4ix1tlVIOPHk?(+i^A4b8%iuK|{C_Qlr8xg0K z9f^M;+1ZBIwvQArGUJ@vf_ONRvg2zLD8k32vJdP7SSg3}3AfS`5O5 zkMCmcvI`Fn$GsNX03F%fhUgh0(gQbM!*Ekpv(ftS2j)qP4 zhd|uR-M8wvOjqAXCFMM2?xCza(Xjb4y@c0ktkxrA+YJ%-FeQj(Zy68ZT#kLc_V6r% zm;?i{hfRX7z9UMLz4*6Kg6^BXhBT=*EXV*rY2Q9o>>Lr=$2R{#Cef!=kIT?aIwkKyzC?R$A2lV7!P$U44Ri z^QOSyqh~$g`8MTGqk^CHpYjE z(0v<)SPmQutHCb>7Xldjon8&e3c-nSZEmqy{0a|88HPsPK#KF#7%{=LLe-j9W`mlstmyG3&zIqD~6W?6u}O+Hew=DSQu$!eay za41*Dr835j_|u5}&?g{R(K!P(PX3#+h5$xKW^X4htke|+=)1Ev=^6F}OIz?@U*l8> zZ%H{NY0qT(-nJ+2&p>Rku%*cG#N#a?C!d>l$+LpJ((KhvoTb<+R=JqqcC=%T8|vLB^Q$DBG3){IR%yPD{iJ zgHwc;PbM9z4K)qCJR~54x!!aPgekMD?12_j^jjk>cl{rQ#7?riLv$7PSZ!NjKV>2e z9?aBEn}jZKX66^Rs!^233ie!JWZ+NU%|DGnVZOEnnA_BPKM2uA1^g72rNp_Szzw>V z)7>-i=$S`Ff%4krt>>WHU0t$rJ@gmxv38A+Zwce%dsO<`Yn|-C%|4>`Pp!v(|BU#~ zFFGtw{UMeW6lnJ!3D`V?Rp-tD{m_5ur6r9maoa-6pS5TJ$Pl{%F&%8}awAO7AvyAd- zK!@~O>OK1#*r1V>W+JKStwQzQ-DmHO!zaVMnfQeV&+5y5(_mZuZl~wl)AppufS?Hs*GRC9I0t4J&AgFnO`px=V)20aw@SSTS-ZL}9rv zChO2HagACLNNNF@(!5|R%FL&GRp+m47Bj|HEKs+hcT^@3#jVJZ{_v0n+@dwzs>eBw zycQVKx%?btb<3X6&+h!qjxF8IV3Sn#s{z1acw;e+^s zzTq)?d$l3qnnre!_CS(*y<33!7Xs~*PeVt~SiOqqIk2(k!-Z}>SjaWi+J{>X4k2H) zUt^@r5K?Qvmvq=0myLHA?CAM4JEvDfuGeyahFs8BN4XWt2*}y2>d-qr-?IdX&A#SJGXb6?{_oowTj4fw&dG+fs$>0-IF%Ui%_q%WX-yuoW9j z4VCNp?KivZ-D3l}a!}6M--u7{3@Hy~(zuFlg$(Q!!kO-0COV8NGUpQCw}HaMJr4)++50#+F>rgH{V=`ciZk*$Dx4&_;)el4zO6@B}SO9+TzBF2=@(Yp`E zGy(-U(N4%OD0uZ%e-G~nw>;GsXY!`*#h(wWym#`9(#PHxIb|KG1Ri6&c-k^9df{JK zxqplgYW|(AH}V+?ZtCAF?KY%Sp49fJ)T8i(#wBQ8LvY90G>SrDrtd&_#bB1l@yR47 zwuA-vxpv#e*Xd9mwG&xk0L5|oGx}@ifVG$SKq%c}l0I^Zat6ab^>VOFL*73@D?zdQ zifDC9`!Oiq%P(y>llnN?k|hS|R^uVnyK_mBg zL(Ea98ak<^c&Z-c^4s=yC{yl~9CD=fEjEHtl+}Y=&@R#neMuC=h^x*2GaHqfmbD&0 z3(_WNnT{h0&bj_j=6GX+4FNR<_OoD1@pGlkE70u6aBnPr?M*r)Xyp9ItPRZsATO=ccwI~m<{MkDIN7Bk`rfYoj2D@^@m>ZVk6JQOc(ik$+~xOu zr7pkDBc1s2b>*XyqKfbW-H4fD+#hnPRMQE8KXpl7<0c_DgpGEtR0V#Ts7>39Pwh91 z7!uG*jj_b0;p-&=O+yL8{L*1(EL7Em$4g6J{xH*udsQ$6m`q~Y1+ z%yB+OGEBhzE;KX86HIZL9cG^GgXg?ma- zsRg!aW1~sGaW6wYidHacrI(lKCOw8q2vpfRg_p}fj)Wcaqj$$y5}J9rjko0YYi!^3 zLg@p{g^^4Dy(^BsEBi)_|BGI~os#qF{`3~Zk(p$21N)C{EVwUFz@=!PlS{~FCUoOqTueHDXF-C3ungjVyugPdW)E~5x8SGW7C=*~FJnX#1}&}~=2&a?+- z8d$l0+k5{=?A}ZKP2faRpJriw2v(m}0)3SUH zvPUNLHVO%uB*e^f_HfYqt8Tss$B$yrta;!JU_aYXnO(*zlPPP~OG~qql@Z=Xc#D9xmZSg7wJd%$ zwy%;|gI6&8%dtL#wwP5$;*vS|BO31GPF7_RXZd-1@~E9nSIL6CWy353-XnTr>BA4c zGo@0ODH54b)WJT*s8fzDr>!d0DAW^WVb8}jru^wjh;R|$&inWn^`#*ykQ=Hqj9&Op8k+o%%xfwE%M6Tyd-qHY$>j4h&4S8 z`o=rGmydOuf$stdkpFBe4cUb$6R;dEJyNZFO_mk6XtaJEPZeX%{LFb4KEdl;Kb|^Q zjsl6f271wBUcAZZ{}U3+lj{t_(-aT)I6U?cAV@2{|96CUMFotcgY)n5KW26MjV!S4 zWAS0tj9J^=j@pSVBR9sMkakAXRyAW)iMDx*AU+zs31s@U5_$&4&dSybx}!9U!!O(; z)a%qjs>OZDhf%@W6zV|NB;KeCeSA1tLR|(E6aM60LWR`+RE0z;RhiO~?vhGbISN8d$@C@0tUJU`5TAXq5pwctX_|(&Vsf)7 zaEpkK8dcvEthqOEnZE8t>nPeKXgM9}+(4daDqB-0)4J@T^GA!In{y@vi$v5<;J^7h z$K(XAK38h7x>&VeBJyaT;|Xmj#Op<=>oSq->$%_96ED#!34)HS{V}RL^p9z`Z>H^c zlU>D9cb!60OMKkc<8UV)Uskt1T{6D3ruH(j+mKwm1GtogJo~C^@TMe)c4=!7Eqn z(aL7VD18o}6D+#H4V0CmFs?qzmd-jA7nv4#;;@wB8MzZ#&8~+~FMs0zqq+DlG)7U^ znBA10Run^h!XwMze{8(2qA3WmUe=y4Uor{GFe-xt;I=$l!>_-+??k@^Wj)Li;T1ZQ zgyUq#v^QAUHj627ZO9r?#fklslmMfDM9HmHl^fxPW_*hT-SLC(p5l8|}r>|G&h3TDJb94KFp~a1WkVxW!O&+W1?RS~eWGcKxoi=uNQ$7FIpz zUTKMnx8Vx$xTNDb#%1t;8sYg@LS0UKoM9P4u#6zUK~8^Hxc|+`z2X?C1W+3kbb{tr zo>PAq!NAd+x5SUA7pw=&7TIbGVrp$>p0t`+P4-PYK@TVHp88n1ut=eh){+SBBSk`H zhz&1~+u~V4;Q^o|DF}6G#JMnsRJLaIr_;PGEq!$(yZ(vFi7zLGclE=*9?sFn(?8+9 zFZ2LblA!GlQ`ucQ@=y++ZQ>{W@ZA?y@)04-(U~Ikpegreg)eomUTUF}Xw>6Hy)C~F z(V)jS!=~(JonGmv;{-O$!jvEI+DM7}!evK_^8!bcV=up0zIk&v(kb^w6-F)r(!!peHqX~$xZAGs)U17rU0xd|Qo z5W*==;vG9{F`(&;aZvRFA>u(=XM*i6a<$g!>(_z|Oxjz))-YbYa!8BBW9zwm99EB= z?$VkMn>`_K1kHCq{M&pZJ4jmwkg7WA^+^i;(;FDcRfF?Fm1I^L?_07Spm&e}tmPL8 zdaJqrrQ!o&FahCgU6Zx&wBG~{>O7^HbC}@xoz^m>$j8uB{H*`d;sjq>W9InqNfwW# zf5UtIsKkMMJ)CTy%~Ze2$jRW)GWA-@cSev-C|$0(S$~Dh%c)r^$z=`q5xDajMczMn zE^^co*3I!0V&{L+XOKU$fDdnsj@f%~E?3(hzsp(n^zaYno6Q2k2K%Ca&F3t3W8_P> zzYg(o+uS4SZ~bh+h7Y46qs3KE+d5HW9PtJrJzWRj)eBQj00~*-xW@5m-O>cxSIs^m z)gx=dS*cv=may0l3L@(sG%IN9doDw`a@dA-Ey6F*)&5WCF)ZN!tjB2Y;_t?L=PwI> z3?=?<3@qPA%ZM92I>QSrZE~TSCS#CHq=bjHhp57yQ)3$MQh@E6OsT#)-GW}hpyk28 zAsM71UT`?cM1C_lh($+yD?og5$~kCXUz!HTpqNb?DnAou7m=ip`!%ud#xC2pR_kcp z_Hc{ESG9tvCB*-Pnw8|sBfd}Nfly1SUd>GYupQ$%$=mdB+Uw#o9XrrNgk9hl++Jxo<=*E*0^PkEB++Fk${U38C>PXRIZjdNyX z>`)0W5agU1h7-`TWRSCqI2J?1$e&Qa)#s%xXx5&g?+9vz&&iVd~>z|u7RZc{4y5!@~2HWGrLZ_M0 zFVwaSywOE$6|nMOqD94&Ibj^6<<&+W&4iz=luSKYym1E&nd(e~ImUod^;i&dri&$> z9yifgT1iK`pan6By^UI_{#it^T8m)($bkbFr7wRhyD@@+Fex^ZXKxGN`RBBw?5@Ov z*^%b3!x3cr$=?pZ4ueegn8&)1gjk1o>pJdWd>a^8E63*scN;7g%P*rXp1JE4jV?_w zY`8z6`QJ= zVus4AjPQdB)M?CDLFrx7dsp_QylwD0)pvF(`a}IEok+|_5l@64^&-pzq;(~Cl9zRq z#TZsfKayi99{%=oryEn6H>6=TkZO4_{xybJE>)=QH-U5BYUHgkWm`75CwLH(Hn7*0F^C;8_Z|S$qeu!|Qv3b12 z9}v?RmpPlYeEp)VbksCG4zNbfaLl8&$JZms)a6)&tndBWAjY?niRpiPbyf`OIn=G;ZI2jJR?%?v=DU7XjGY7EOj~uBdMLg@LN*^W zXv&*B%NtuAyuNRrK}+(R^id*KCoEKQGh7IG@asIvYB$4wEUnxKV!kwGkt z&_w98iCqTXi1EXoe9eqh#^=2rHE2Jt$i&f@-7}#wu@%R*+4*T|9Zjb*B*& z;k%kJy^h7;OHbI!F0sR18kdpFt0EC)hm9c~TDC%6bZ#M^u2ZPTVLc<{h;PZP$~gr# znNKcTzL?Hk9&iy6s-zYlPCS4OL{7JgSXDGU_JjeAdz^jtr5zeb?d@^4*Yu5Zm=zVD z#b4mN%F}IVus5~o9!|#|d`~8FP%b$OB1~p>hOP5w@gugt3xvS{6sSy!)5 z4J{X+Exz7jw9oBK((y}Yv3E32cUU+2PO%Nz|GH0#jz+{>Jv5nre$Zz~hJm;eTAmWt z3kFm8`SH=j*%8^?$2J7Bv#qNrKkgUycx4{W?_g^to~zK2i!w`8miArc22;5 zwS+#u5iwM@abGe{&x&rQ@xzW^IP3;=-R(l|N+R7U| zqcoxVpxYx)n>BljA!q@ODje_JQNs7F_evr@P`^V(Fw-26b zf(1~Nlw&OUBo11uJJsRm-`g|y8l4yB0|q{Ex$mz-H!b2bV!V9A`VqKS5M>iy ze-C&JdKZ1%wk~2MD?Ht03F;Ev=0vDHzJPSDk(y~)Fi$d>fySor?hMOpnny|t8J+H> zNm@5IM!yq5#|^)<_4J$nDH)T#7B9P*5yu(m%fvi1AXe(J25bE{mHegT6A?-fBZu-( zD-$DNu@J?G*YO_g5*?VRhx2N25;?`-wHIL^aose4) z|IyjB9F6iep(O6oAvqZ17AX!wRc6FN8*f;%j)uB46m5vF) zhyHDLj)UFkTsgCmz%mLDCpG5Wp<-THDa&_=m3#>k70y1N#QAghK;P+9WOF;o z8jKteck=8T1K4P#7}BdWom*sopJ5G*af~tNtSG$h`a`clSv_s1dfI6*UTir_|7ZlA zA@RP#&^cs_^^0b?G*_rWr?A^Ev^oH+SjCw`fT009O`9o%QRd?U``DTgNN5w1(IcCrAgyW3D0Pa9h*015A|TtaK8 zJ9uibf7@1aU1PZ~z+gEC!)kV)go0i;>Zl~tP|JO5s0Kk|y8IMM`1(1`Tnh{W(~&^< zx7d{aTtWrXmm+T9cPAn94LxKFr{h`D=AVjq1tNH~rIBEAD?cRHy)y^D=|*Wo?}}=5 ze|6x_mn{}CIT?vLmf4YL+0cgtsl-fx{a~}?ua2=#(hvb;R?FhB^Ha8U6xFC0JpDN0XuxFGl(of8sl^mKr`$k?lVw0#@Yb}3~ zTsHG9;;y%6#C*IHWK}s>b|q^>|G)RPR*dx5E7|aCPF`Ap&30R5xv>De=;Ul1zdGls z?m&00NJtb07Q|d8t@O@vgwYYTuniiQ9WqILSEPNo$Kb_{G%Td;o%KV_AM+UO?`NwM z__X9t0x73bt|tLwL|TuG=R|C zT@}AsORpoO95r|20ND4zenbb%VKK$ZTI8;%LCLg~tFWX}scSJw{l?-SgR*aJc%h0n z6x7jZ(3&HRtd3&D;bPu-&E8LQ@MWCEGeZZJ%3p|n$xsK|>%(Ho4rj+%+B%)n3!7W` zBkiVFxsaA5owRc3PcHt^%>IxS_8;Z4!ON0pFP`vmBYh|oh;7j_LhZNkxxr?~e?yP9 z7}c&N7<+M9ZIAIwM0j+9_0A>Rp1G&vO)yv%pwYh5g2TI300G&1h(qnLsm64F&2CR{D48;tipumVP zN#K|AU0Fy@ZPm~WQM)Y?qK<&B5AKId5w&9M&CVP(xw+p>NBEc_Sv^wPPU~2a9ryIh z+bt11JMg#^%1m3P+;qOzyQs5xx&RZwSt#*Akr!TRcR#GZgPmBG3Y|ZYeFYN5H}h0HYhz6jY-GMdK>c5sez^gGyVJ&m-N6-M(z8&G?s( z9qaVTp>}N&R*dFIOlJHy_mLrnV9a84cP2!&uK9o8e&;v*MH}vjzG?mfWv)oL-sNt%hO z0zPyjPdnjpe-Cx;pApueP2Cdfm(JWgrs2M1l}XgQYFy`?W|^SX-Gm^ z(G(Uy(vg{*nXY{FR&ZhU*b}Jg#}ls1RoNt-sIKP&Z2!>%ws?Jc8q9jYzc(`Yxu|*F zuY=3U1~57$4`541_L*yfOWj+&3q@>8?q+=C$-j{jHEnTI8nxNpC*v~r=c z)ZEB4tx-Y8abK9Sw7zDxOloepl$Mf$xr?665)GFcOWe(=$;>^*U2y>-i%oI@E zO~55E#Fu_Ae{*r23pnRI=ea-keSc~PEpNQb-x$D}L;NqcpMk<+FSY@+z*T#%ObY&# z47!=8V{x;_vfL+-{gzmnmgeRyL(=lUvoe%z z=!zujzC8ybjw>|-h)Gt@G~XdM*J}myW!vjPCh7*j()|U*hlP%|&8?Eow`KV6C!>yg zGh@@p(K#ZH9&Z*~@%-^VPjqrom1zC@m4Bp@L7rX=qH;(RF5Gi1U=`vq+?8LyW(d1% z7o08Y)4r<34$yFHB4d*%x;a%o+~;GmClwIulBK@`a3{zAwkSPY7?}yOLSQhv7?atjZvs zlIH+5rrk^FbgzNkcj2X}Cj!IhF5MA(Ggoi5t~7k5DKl8NLo(@pg%!P(4m;qkCCO$n z@<8hZ5I4hI_I?D(+e+UeNooq4#p7zCmh&3n?s3VT^}deS=e|UJyJj zP5wgYJ4p1X93SnboXB>}74^>SEsHrjU)QgDYMIf&EoEzLCs8+cod&`8nD=8y@4vY&M7#q z3f@yD^NWgWpuoE>4@ly91rg~`Gx3ggxFTx9UJi~j3i7cGa$X+Y9kk^NOc1T+8Asxu zNgfN%yxO}b>Bx-Ei_0kVQRgi5lMiX7L5)9l9*G4Mm{?NL!n0f+(t77vlt}3S2Lh{C zTMfKVn|i7(nv4;T+k-qiHa_nDx|USl0g>}gc#3s54(A>7r1EZ?M@zVtuHF(ugnNo@ ze{4>Kv~~M&b6)sgYSsRnXVm^4N3XU@#?URIUZ63;?-(2^=%Ns%JQOU>CoI+|#P7lT zOoMQr8N|bmzI|OvV-_FCCf{op0J@bLFPwQ612nUL(>s8H$)Vqa0fBUZig%kzq1lQhbZ9Q%ea-RgA9;7H>vznD zYq+|jUkbyNvq0XM(m;#2ca%8o2B&Lq@_ch%yA$ogE6mycxBuJGB3DP3d#86dbuKjN<9o^8P$A7j-8%-@pj0{C=j{46A z^x*4NyB~(lXZZ9EGw9eVH#T#vMux^I6tajX!?C9#5aGGQV-(JR(?rSHuqVxw{m|Mb zEmbG`XaczodrY$Zb*l{fxB-$rXh6tY^?Q+D9?AyXeh6ODW0o#$<-_Hdx2|^xh88e+ z9g%pV-nQR!=bE@fi>JUUO&bqWIWm~`K1Zm+m7u$`OUv`Emy58BLl_uvE+{O=x>fcY zL8eT#Lh`G>Ys7}az^4lrm^gesYXlaxNAZWnfC)1IbfZe=3XRX)P4vYp2S7EeStjSA z0As;3E;dqObTG5SeKWX6s>DceYwgJZKtl$V7`E{$a2%5{7s>gblRcQOouJPB@ZG1A z6V&-f@WICpP6ED&DOSF9ZLpj9_WHG& z#ODZ_LStTWmX}7Mg|adZasgC*{8pRhgJ?jKT@~TlHe2T*&=sz=Y|uMQQM_sQ zs=>^inz!GV+Fo-77%B#KDX1DmTdrLyC^V9gCv!Ipze+BPp2{r_Qg5?s_Z~|z^1iKe zwl>8lig9NNZjN@dJGTz}(yJLV8_yOup(Wdyzh}6H0Ou;|i{D+Ml5R!s+W4Zy$9zfR zm6{Wc6)o3utDU-B3suaTKS1`uHyFd?6K zV79+c0Uz)0GIMmyTed?Gp38Y-t|;KiVyfd7Ls0%tYwWCm#L=X9)WFvX!BMJfmUtY|v>r_@sgaQw+0)lg&6 zsPAlFplc8+{D?Z8#SGF7G&4qiU&hxz0tqCD_S?F>rTGO4yF+H4*OuszwR&cwD<#c3 zFsti3zQC*Al=1DJ=jIY)RRNxA7r!$47GjI~bL+F8rB_Iuw}F^eyZDlDj56he*q)L7 zdfBbA_y}Qb=yNYaF5AUQa#>@X8$FR%0Pa^`b@_**U!7b;@Dx3(bWrH;SW!pL1D<5@3c~CNPxJD z$?t>0QKox({EoG$sjiq@?rudmogvjd*>~(GWB*MOL8ISjYE0B&qnK2R zR|k$bDHGR{wp%f1EBIrHJmhdPE^pA|zKpFWIgA=D@XxO8Ip~m{c@fYl4?Oul!3Q-$ z`}8l(<|KxW7z(#L5B5^=cg?1bh$iNyHGedX`Zhp{@TCBrxwF%V4I@# zI+cV?8){=niIDPXXV`H)^=drB5B$E1bS1@(zkZjiEGfZlo((4AnF`1Id6DEMw zgF=qh%2?p4lFuL4tE2^*t7-~4v>IEaA>HmT_Cm>@_(Q@lEa4N~1xEUxj|5)ykusa-s;)=s>* z-uteMHR@tHqZmY^Ldq@TV>FPc^%U7ZNjOh0@o2Yk%KU} z9ZfKV%{J+J3EJ+zvC5xL?wi>!6NU0$7H%NOCI#Z7+7L+GDAs9kOSYnIz!t06Asj-HZK<29CSw*PM3StG&BVI{%@JR35*K ztC`i>5mJG~HObt>`@BOjFrBQtCfO6&j_o)z%_Aai^)Cjka;;uKQYJ^FF!sef0=^|=hte+1m%r{rwi$o#3LA}xAE*2 ztwlWNCJ8^t#gB#0mmOCI2!WQP7od%{NoTY4Y~vd^wHvG`SU~pvkBB|oU8W8vFFiNI z3&Yk40y6ab&cgrP`d!8Lb!5+sd=4B2-gxI&6}POBe`|X5Rbae0;u7$CR2pMR2B_OE zJ(1#_PB@GyoVSE`XMrYSI?1v)NLdVFMHsRBleRP{Zlcvaf&-Xi<+BEuQ@6gh%5X25 z*kh&H0+jS*v-O7&r((M9>rJ4r9bcmRaQx`F+7C2fG&hDYT?~K$9pZG{xUvNML zP|INvr;10w4O{Nj=z-hctxeGUGFcFii%4nVNv6Q!uE|?ZS&|!5ai__=kPVW8D3EX3 zN3P8|G67!WTo^dZ=##dcf>B?QPhuN+&dr7MH^$rWjmNxXgrw4SPJc$6-eqidN#_-g zo}60SzN0p>Gm}UM;xTdWdqH(S|0eWlf zv?czBG-dlBLl7jQDfWvy{$-8Nm`v>Gd)+1Ov|(0@@8>RJGPM7DnW@}Qny}MXQ4ea6 z%N0Bm@D>W^m#S1IK0%A$Q9RVs(++$+os$8T+iL1N3?leN67c3mi-%#TjR|$!U?I?s zrmY*1y2~o0dCQ_pDn)r)GfGm)k2AE@%0b+xFZI3Z7Ih+;K3<>%Cd7YOGco(~$jQ{p zm-0_#cN!dcL^7XF{P}gtM>*%)LqB!hYnY@~q3M8y<$20-05-hmW=$io|-d5yCn z-`lWNDZxrkl(G4V1?ImsGU45S%wdDHfd($pUyuJDS}j=1c1cgtzh?-yt$V9yge}!W zqMm4lZFjnb3TJ*7@Su&B3y5w!PFCUakU^t6zRmy0mT=Fjvg82fpT1+Qz@iJaBd)Sy z$_tJvH%BtMA15oK&8~MWCdJtCxeLp5e3~&kKsTDh@JN!3)l|CG?Oyd)|Fo>{cl+q2 zy{wzkm} zTszQF{$cb2R%Ze5dmxY{MToJ)LiV9!)#s1n-*I8zne5VqV?Z-GO#^DY2sN{tZQ>48Yle8S zK3$`-+}93k+lgtHqU!jhn+Pj`{|ZOe1>ue;D)SI15^BfYWYmi6I@6&=k@1Cea&HhQ z>*K9&%e>oEOwquks+~>p_g6t7Nnoy@1XKR#`rqECW_C{OF z{7jIW(?)KzttVSZ#8Dq!0AVApAeuhe_t&Q7d8gk>XzIxd6D_t{L~Geda_4tDmK;c| zB6lxe&{0n0D2GjGP-*{5?8Fq6)M*X>Ikfw$KGN)b>C7*dcZ+u>F~am8;ll|)@2@A; z*JKlwePUR%XIx@G*~!?L7L-UWeipnRJ8QMyOs41iD^(VbXpqy<1Szmt-@5HgmC3Z> z)i&nHKu=<{in$AaKh~4hWQ{$!Zf*-$W>^g4)O6di`9;-*-r>g5Y6t>?X8WH}9|Z?0 z%3qWzwmrIWa$-IBk*t&L@*5w3LD8!A;|&*ViYhA%eaJ7%ByCBHs|F-Gwys*HXrG)- z-zgZFcmBIHI4a(9L&hw@7MfE8Z=!J?W3e&te_pMs&vQ~78}Byh@5w%}`HQ&3` z&B$V42*P@>*;h|R0@)4M7Cp=G*d>D&1dV}=E>`!Ras-T?ztGfLlQ*BJ6|z7;)6V8# zV{=osakQ^R$lD!~fI&^%6kk}Poo=6JVjq`QZlgM(X7i~O2y zix)%X`%bLCu^A*{c7_@zuZa*$&#d%B=S`wP?u$C>$-1;>&+h^6MOvggqjf#Puf99Fg@ zX1vVY&2jrBETIjH%QAc}RqbwaU`o{t;2{<5L<@bRv1!)|CKk(Oz8R~qhdqf}wSrNp zxDv*Is8&yzFmv9=7$7t$@jI9gTs4(Dx zBq0K#K~QkE4USY1Ess_@Y~1lY8xL+lECwnnDim!rI2%m#VoD@p@e8-gSf7Ig+q>SX z8xcxKYuRRg8D5uj7*s&;n%$ezLSK4vD{+hex$7WYeNt!|-z4}LHUNc$4>5>2cDc8 z`Yh*P#e3@V0}B`VuSp&n0KnGZV377N;@^(>zkbzi$+R5yplhEbwygx`s-e+jACR=b0H~?Eh?N37|I~XF*azBpNi>gL`R^>UDrUDjU!O6 zrX5`6DmSvoAC*E9fV&>&AFn=niV}kSJ)}sfHLpqs` zq)!?RDp7G>mGV&{dKD+25krPeA&Ct&G9uKw$xZ*!qnYZD?TXq9H>EH8XGnQk;Z3w8 zySC#E69L%7G%R)A;Pa3g^^9EIn_y*Efic^Mv zT3eB$*mBmBOUSL83q+XVyu z$}r=Fpin}v0rh`q$;|?4_VDjLryjmNz3c*P4R4Km$mpNBS1i^G&M+~y{`h|!!dvt9 zd)vr(=k72ws!xLVNgmDgmRAVDAt7n{_dW`>^m(Aw9+#4qnN7c3ax~Ms&1k@nn-LVr z%z?&(o~W4ZDM*~H3ayj&H0`XDs2P&ObCD0eW?juoD`@tpBENvk62$$ zU5~UUH9?!3i+^bs#fVWeAz@r9Em<1m(j6+<q9M{Z{Y)dj$>U)E_zw^`d1VZ`9q#drz+V6-Zp0OD5I8L zocTxG=QX&L_6h%a(#tXcwmnop=10n;qSq8YcRiNErQVw@nOE%43^XwwR(90Gv<2E! zrsaVv*|Q90ucHsDsq4fn1Jp8@8RpeTc2f|tb3g^AlR5d;Ar`H%f6S;oy7wMaN!7(bt2-D1os~GYUg`W_PK}$$p~mr z2LPW2Gzr2g5PLYq4dq|YM&bSQG)ojWpg!<+)bK4^YCWxlPm2KB;%gp z+aTG@u3`m!`<1;+c{{I&8 zBZO+Rf9BZwKv?2~2NFZ<3hV@4AjMaYekrZ!ylMKZv5jL`Fzf(_W~M-((=f2CbI9gjXg$JYQJ!#l1WpOaWvCN z#5efF%oDPsbBdKNNJx6z3%-KS-Hc$T!IqIJqhlh$C#NuHW{X<%I)X>uXE(Kp^nJJ6 z#cRfh!f46w&xq4jP!MN>H>`kfQD0{zvZFVqNB6MApR6b-wVy{$a#PGJYpO-6n|JKLeW-H{`4{?Cg`eCA;cMwZHUU){?xqpUruP|8KR3?} z59R6FN{tl8tL(mq$Ew?tqt8?>3~cQyI2w?lR=VWRll;859pvYv>2yXd1K6^Dp;{4>IFNeFWXg)w4tQG($)I-kQ9%INGpcwLD7K>K>7@ z3c>VHl71NOLNJ82y%aalie6c`IfWs0!olv`>JT?Mp9;vSCOQYI~h>8z52C^e7a;B zk{oVl&~%6n4Y{P&-*jubU#9VEd_(uwVo6fZp0SI!+ixvM?6>gyiQ=`Anz!0!y`jlq zfNBdNExR<}2dzT3J;I#d`Ki7?`^Kq0;ZI(WoAv^~GjO##^6q;0GjzWwRYj&}s;d*y z(;`bR?RnlY!5-B~aZ#=p6{Q^qS^9FPp_!TeXk=@uFx9v_uYRo;ni)3}uISDtQE-HD zGQWIqGu%QZ{<^o|a9j-XfNfDzUKubsDC6JrQQvif^ls;CiQ&g%Kln5^b<{&5=HmrD zSbOQzCcBcubb}8UEHL>=0i+Ib=kh*-n#7(bl1ceN;rhR8Z}hVSgPAY|PF-e4Ovr<} z;L>C@kn!V;&XesTLH3rfH+b=mZ91%7U8jVhoXcOMg#DsYZ$8#J_3s)CaIs8Xf&XmR z@8XT<)6c>LU7$%piwEWwo;!LmF~3?1y(}MDm#vWY%}UO06E8!K?nLvD5BYRS8@HJS z?QxB%mslYU0=DuJxKnN*a9@^>)G4+VW=tUa(I1{9nIEP&hBnXp{eeA3?8zD!H|V*% zddHsBMY>gJSt8QY%mlc9H_@>ba{~(lamS#!q7`Ac@uI8-h`Qi$OCM7PAw) zm|gxgy6r#AWhS`BGprj>qOuyi%@?c3ULL4L8B_GWhEM)H^y4@N3>&g!CV9q^Eb+}X zu9mzd1TWC!(~YT7X$-8OtEA|o6TOPa3<%R5J*BBRi5>uA`U2qItZL@};dqaB?W!sl zXDjXCTZ!jB>>co=Q|?zFAHAL$iI;fL5#J>d7Y0|>1rf*lhv5N83FYoBX%W>(Ay!wT z1z#-pTM13ol@f5~Y6kY=a{O#qZ8TEjF2P$VHhnX=QrD7o$jeGOD#VM-P(u%dKMVd% z&$^rLa*0%o) z=V4c){mkpIb#Jsv(~K%BnluBqHBZ zv_yWEiF+mODhcQ{!#{EB;S|)Se6&0IX%@y~-tU&) z=p|5JF&Gm3rbLB5RImgB1I8R>HJRMFK&7A<6fNF{groWp&Tuf-AmY6;TX7cCvyz!8 zLy`UW37KU{3$Ar}NfqnQeh4>quBb6~)}*94-$&|?dWU~_ds5Ogj+qibBn(TWqor}Z1Gn7qTuWoMnn?tGYoJA0q7I^vRu z+^^QQ)s3kxc3&$wq6xM@T?g5Xo=V98U!kF%+6#rxR?s5m&DZ!bz+`gcWr?XeVZ+D3 zFDuzr6YckduSl)kff|FZ0Urz1jBnSh1#!? zYp)d%tZ1)(=yHoBJBr}cPuW+jjLl3vQ{AUt63)$T>k;E|e1JW%@Fw&eh!5rG$;Vn_-e9MSOS` zIpo={Z0v-c4{<8nfFxwCK2ZP-l%trBKvJ zRVuvC0EGTOJ2ti&h6Ef?mFs!9(%$>x^2IfZt(AWLuUuYg-btJ{Y7W4&rBL4m6lt7_$)Oh zhOE^8u%yNo{{&tAXOHK4hMM_Xki&M_x|s)Xb*SewFrKEU=Zb^Ei|ybAV8}j6WX_zh z@mhGOeI>R-J~`~hd{wLcur%)&(Sd0)2g<_d2K)EdIRBAyfC9qAdi7X@7|{xRTxOSU zLqQ3cussCfIf`S5v%hL~`_jJwtN%Pw)U&a!d)ppo$*tmDld_ztkwhxSly+ZOM}~Jx zg7ARc3_CBICj9ZnVhh%{+Hv!^`oE^aj>NJ8$NG|7giC(wh@O>e774;Gl8ony-^?cm z?NoWI23Cq}zeU;vLr#;MuD z3PtIj$to*{A!087jBaQ^V*D5>r!qPU*gM`HoN^~U+TjT1plETlV)R>UbQw|WRn)WV ztfR!N2LkGKN~T7^!J$&uKVr|Ek6ju#c8&_K+bN%yNkh4A=iS62{7fy;JM9bqe8trKA_Y)V;|1{>xDnlyG%+1Rt3|`Ee=5lAl zIn%y}$p5&VPuNp-<^<}huza^&T#Wo!n}BPy7RMVXY0o$;)ewV5e(D2M!X`EtOm&1s zi-JtManS_b6VvSO$4~0IQ&fw-v}80klGdL53En4TUaacV0*P=hY@!GAu(v`*-29MP z)=0OPrUj$7&1Y6b)`thUTLh?!Ha3Gau{CW(Nf5M3AK41^g*e12qNKyr;1crdvR)>t z-57ilT1QW3jOzn7etcY(siIvBbFMyrZN}U(9g47EpMh9=5=28?oxsh;&YzyYH~r8#Rm7pH1?2VwHD(tFtHYge=SgQ&&cMKB;ygEnieV|KNqGx{Q; zR{rjHUyH&w^8YDWso3}&K&lM0F7`7}4PVTZQ!*54Vu2_^4|=obtDuQxZe|-Gi>0`e9a%XFVmzr;0B8{5<@yY~bpok|(vyY9|Kf=-G|h%{O&1oKNt}YlD|!7e>#z2v)p@cZl^I3U#95J@MV>mS#?PkSJ{xmVOe@ z{0LvYY6OI>u!tCV?7jo|se~tu2gKJY|2pAlu;6oJTKF^f356O;183)rIwP3Y`;B_g zX?9l%R<2qeMMZIEo;W2h>7Ir6v!lK+1ET?^;A2UNI(MjUX>Q36GXPPxAlxQgnc#=n zE|Xt^5OuuN8-yNOwu`MT%(x;M6^Hh}%YXbt)@h2ImJQahPH5x5(~Wpj=&4^6qgo0I z$t-Ybu!eXMbP&n>QHq=I8g>+1Xa&LXaG_*tQ_?pD7^v2Z^S2 zDE(p}jC}6mljd;Fr^S)-8^b^w`D?l`urcPziRELeR|Ykt-5-eZ{p%${6M9y}RmgSj zlmb<-hM&rYD2zG0)9T90vb1YM&vU4Hp(+7U1Vs2-lgtuBg(%?yukYV_=4%ibZhp|+ zMzx^1$I%25TIe5Xks;jd`Xd2dW$%qVtd9O;le^eS^-7lYRIr%o2BPg;UEL{7 zx|*2naT<%;h+xlu`>RrKaye!yCuE5?O{oYOt9D-E-Kkv3{`q5dCrZv+^feR__2BX5Liqu5C&TSs}s!+=AMOV{^z&$NMVAIwkHIluygAZw6TB+^4S-b%wOmnf5#s! z_=-%B>7zSX?bT^>Hto4&)zqUgu5dV$iynD8K$pb#sHCK3m}^=^HAQfGWgKHWhw6rT z+U&gO(+mCeG1Eso+R`r-iVh^iv|I2Bu;w)fJb&)4&|M}0>hK2*{J@}Tr>EM|SJong z1#>2FIFDEBnXNe~iPmYX$GCvp`WiBNIm{_nvbN@$HC|lP1vf@50ZhfBWn5DUm3<#LsHvS>rct*+u!|cBK ziZsl6J^Rn5b{ASc2#n;h$s0G)>GxIR_toU`e}h@M`y*~>7(^wmS<2Zpi0=PZWU5#Y zN@RE5lN&yJ8f;hl*jbau*EaJ?@XRs>$Hv|PDrpvTC@y()xX9AS)|xe@Z(wWJg7%vy zL31QMJ6RRRw$_=8kNRxDA-?)GwIX_Dvll7d5z<2*D_BeVv8OETKB8)$i-5MbBGc#q zJof#m_TtZOm>xdm+BeqI*Fk+4XL(_cTOzwZBtY{D{JyYP8N`|@%&-8~IZrBD_<%`{ zV!CE=n3&TwrIO+je<2H#0TS~u+D3cddS!4tLeaAiV$kTd8tL#8I|KC_BH`L-m1m>t zkMG~6KM)SIqlJ9?AJwJ!(&6p&!+8Axr;RKJ>)*wtT$yRgZvW6%$SAG1R-kbI7s4Bj9r_pq5LK`8?X3c zQ@1TsTTtM#N`Q^`+;to*vi?!QYgoqxwEg76q_GCa+<$$DVR`2!RvBui+0h~X@{!`a z!nsQjE5mZV=68;>u2u_=$$UrhLUB`eCdzWIxAWC;3h+xI{4A_h@t6U(2Q zc0(loKB=}7(+2ek4S#L)|Bq+qm`d0MO4;?V066SIW3l9o6kc6!86L=-O?mr6W_N=5 zh)fc^xh_MvWmx{8prG;JZ%p*&+vdEwfv}W-mXFty{@vrWZ?kGo!VkyQ9!`1xa2`#5 z;45{*`F{GC`I&&BY|p8yNRx`@@|8r{>7_)p@-4}i;9D*U)qGV@P*xWj8jAEV|8L<^ d6%)Sa`c11%wHL*=cS&BCE?hZZea`pM{{ump319#K delta 62796 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 Bl{NqX diff --git a/public/assets/images/BOOST-310px.png b/public/assets/images/BOOST-310px.png index fd965801f15df14a9b0c8205ae7a61a68cf33936..dd43b0a9e19d153027a4d263eaec44e5d7095829 100644 GIT binary patch delta 60648 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

    -9gc4^60OBLn{^F3JbBfX;y2KuDEKuXrzo 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 be|L|~<)fj(qZwO!fX}tdc9+U8y2t+?(j*_m delta 60698 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

    MNRm69QQzF+2)u!nuJ+9>}i@48ID4Cvv5^~Xy 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 diff --git a/public/assets/images/Camera-310px.png b/public/assets/images/Camera-310px.png new file mode 100644 index 0000000000000000000000000000000000000000..3658dfc1d5aa39d9d733c800778e329fc47bb8d9 GIT binary patch literal 52016 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 literal 0 HcmV?d00001 diff --git a/public/assets/images/Camera-32px.png b/public/assets/images/Camera-32px.png new file mode 100644 index 0000000000000000000000000000000000000000..df2f4019ef1932a31c273d934c31df23764c9d25 GIT binary patch literal 589 zcmV-T017tfx1 z61390Ctt*yAd*%^q@vwfnI(p-rnQ?&=|bGh?9R+LUp6yQD;A4Sj^jL-rn!R{$9lcC z=JWZpnayS&>-GBmS7K|L28Y9eo8XLcaQOEG*GTU5dY+z2rQS&qb*A9BKP))v{d-Uj z8;tc2J!~OPoiYG2W`fBn0}u=(lWzk+RJvqY$n;VCnrKWXb~c;AZuc|gAe~NwWmz(8 zLeBx9wBPTc(P)5S7-I37n|wYGtyT-zt0vrdo(F@$0BW_G(1}$lC{bt=)@N>zN%F<2 z9`yTtm`omdm98M2{RDD+7R8H=9jZEEYU4 zu@THh8Gy}Z19-^-6Oh}e1BB)`X3oGRnp6Vg0Q{#?Ww0>cfA`|wT z0rsT@olXZzr4nFYkUeH)0C;w++?LB_Xt&!?C=?)(NN^(jhn^QAR3JjS_^vB|unCc0 zWTRTGayCYz5$^-U2nT=y8n~_-sU4GJ#E7>3j0iUdrG|q#+>^;1(&!y<_F_EsmfRgC%aT bzX30wRJ5eO(@o!H00000NkvXXu0mjfoqGt3 literal 0 HcmV?d00001 diff --git a/public/assets/images/Camera-620px.png b/public/assets/images/Camera-620px.png new file mode 100644 index 0000000000000000000000000000000000000000..d1212654eabcf0b1ae7c1390be0f8c21051ad920 GIT binary patch literal 173586 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 delta 67763 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/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 delta 62166 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 z

    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 diff --git a/public/assets/images/Landing-310px.png b/public/assets/images/Landing-310px.png index 02c179ac75dfb150002321dd17c9c412934cb555..9be2b978d4728a4ab92b13f7a620b90680df1c10 100644 GIT binary patch delta 48146 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
    0V0BGs@kKZFygE%;|Onv}flu6$( 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 n#OQQr7#EInw5jWVw*Z8{tih?jPduOieizO= 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Ⓢ) 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 JL6Yn@jNNZbtiJi@|mI0z_?_m9!?Wa6H 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ⅈALthiaKFdsy=ykO#3wKnxp#i^h%*E!mQ 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 P00000NkvXXu0mjfm^ekU diff --git a/public/assets/images/Vessel Overview-310px.png b/public/assets/images/Vessel Overview-310px.png index 921e6a37ab3e8ed473b4cbf1a321c4fa37087a85..35869b4185e871b85932dd217a6e2ea0844d9bbc 100644 GIT binary patch delta 51887 zcmYhiiCdCs8#Z2JX^x7TC8h|KCCy}@TPo{~6N@az+ zH7!=|G48vFOK!QLwy1#n7Kj=s*~j~SzvK9Re*iqs^&IzoUFUgT=gFE>dN8SU9|N>6 zU)=Xq9O<7*+<7_f-s4;Q8C^Pm+Nb^gm!lSB*PBDM0fs}}Yy5>BDtGP~Uw@Hq)BSr6 z`0=$X7c57vU-MQXUJFh?5!?M{=EvnoAh)izCb#g@=jy_lJE6s8Mf~vZMgE09e(YNh ztGTk&?xGTAQ!)^f4O$HG%2Tp69GPou`U1pwZa!_ZTx3SCJ|_oHJ$B8hUi=!iHsm@! zb>9JG9Rj1+zWV=uVdbV$R6YOpX!z2{wfvnTCpwfm>(^tmP|&cvy@8sZ3_Li4EXQB3 zfy&yQwwP0g*B5uL0>_a5a(*19I+gz42T!yvHRe7EfqCG=dhKSif)T)FUft&+@g4Uc zJ)O==_pd>!YX@`cYX`>~3VzJ|7EqOBI6Bw(-!~6DA3kwOEk=h$F5mhlZiD^!=8UMC zWMuB@9xuIFHwayO?Nk>=i55^Bz3GNwL)uP|QvX~0ZpuP{?dJb0;K|pXqI$u-qeWYt zge^g4Q79m5@XL)_PX$js?yS7APiR|#|H~a&HsE5rG}qZ%+MD|vhmlPV{gRjU&SrhY z*A@7&Iqq6fJydw9(;zsh;rkNVw?PgHSYrZm-=j%UO_z^hn~R=+`EEZXxj!IgS-S7? z-N#m*2Q4EF-{t-ykATFZ~MV!*I;J#L9t0o1Sk{3=EVTPZ$bWpXRwGGuHAG)MZb zX}42G8*$@)o0gJ+ZqiEgFg&cbK>YC$D<^y6x8a{~IjAO~ukl(7)YWop?cbb6zv7$- zjr&s^Ojl6T1DLX5OeeE@zjR@HZqFxZ#i!5HmYg0s7D_c8M*qRXNZUPe3yjYt3v5$4 zU{m2mY>+ZiVY)vy9)sW;H`HQ1N#72mAu{1^tR6~-?S>lSfbyX;YIIFN>XVf1w~*1x zyTm^X`7N9xO@K?;VmL`YVwW{1)v}gd$gBDsTqI&}2Cme4_!P|4U$v5GI^fOXKMPK# z@x)e)88{v4#yQ7&MvPpqWW@THB*r)hwma9!I&kk<<9{Jw-rNp#FaXL#na8*zC*lsr zx6twU&JqN(%w2%9bB!ne=oB50KT~8z2Bv9w`{|$kfFm* zV4GVQ_f8xmKNWDX`8%}BtgQf1FBRnLE>f()UFX4He$=e?I|DWUa;{Zhq3^3337|Bq z!fR;v2MnVON@bWrG?VnE|nynAuB^HinE&4M)SV?(lrqWVQ4>7mIA5=pl zNg&3yIg3686xGZkHN$v_L_hukc`FcoA*ka_!Q9d)P>|?m*?(fn_q7A2F79SaW`kR- z$Zv-HDD%shI{dWF7DXG^rczPTJPfN261Rb22Vt~%OK5(iJ zxXjF4YU`zAR-d`YLE?!<=+w&uiP`S0gkOQA;%0r?24qx|C zk6uYsZ9q{ma$zsA7p%f|Y^!qHh)83Yb#?@35l&1sVQb|}oEK`T4Ovsia*&4UzN0f= zp%WjPx>yKwDK&m!v5f_FrIxva-E;ZGqso?sx%08O#eBBDm%zT|W7{x#CaD-OKMMy? z;x}OKzpUKxtbr?MOeY?9nz(!+t<$_O(KlAS;c`yt46dbRAO{eeCZNPuXGTAM2Ytw- z1}uAYQQzZ#(1zDD$K}K|MZ=-32F^`UI4@US808qt?5P1#FZe;a^GiU7DZZ#ajU#x8V0})?`k_pfEt&;>^ z31Q zu3t=7{|fMT8{)#%&A3;D_sLn4F=y*!gWyWjmc#>cS<~+)DRY2~ojy0=&Nw!PA=R%P z?((s9zcsS@9@0arr~Wy3817!hZP6*WZ(hLPd!XYOEqL1ydaJu+Xm|8XN4bQwwAIsl zD-^rtk8!B8>|bbL(>}yPfA48;3(}=W(vNkDU4kX(zE0V)O+Y$bI?y}iUgzLp+yUA3 zAS;CbpV`||6krPGW+3a*vFAv;O5F`iTl&J!IzF6oI4$@|%S?Vx(>(`)z*er901tg^ z<6P`0&PdIoz*82PYkwdPf{YQQDIz;17QF*XqUv!=KYfbsQbmLiM|k3iSOd=){%&oX%5`oRRkrpY8W=!g1IOlCL%-~Ui1!M+W@V!lt)-B_Tbo8*Jv(+Q>*ET)IOJbEmPDWYqh^+9L!T2Bcy0?;SukDl+`}?Hy$J=v z#GW?PX5|J3vAh?=dgM=f!VILIlyYXqPjH&NoXN*pkI=91AIv}P42Vz6uUz>cbcWYk zY)M`tiFb4!aHiB(Kut5fAEy@6R6U^d^c$9~*x<_JVZ7I|vO&!XLLTF2PLCTo&i@#;JS z!XptWjx!g(c(*@@Q}V5MpZcAnI!^uX9oU)2UMrfv>g!(-gUeO=PqNvg@+w zF%IhQcPGE>0OC8)_0ocX2}-AUJ+~S@O7+mO+>)z{r>-(0KhFwUd4Kt#WsU!s>sZTL zV>N5)Cmv1sgyc?ckg4TQa!64+=YPfSo7-ROz-em z(}&QK5W}C{>3ZeqhIm$MMx)la-g`S3B8Kz(#BOoPMbR3g?#5F43ul)pF2^N_)*Ak{{I&{5v_)3wK z4OXkkGL@}x{B*aJ>ue@7tHg!S=s@X^k;mH@JABBLMr2B+^}i{>YcJ{fu#%Z8!iTUN zspO4c5U`@7*@iKp9xSrxiCDdBMW7@?9Bpb_x<+VAl$Zl5r0UAjzCtxyv?YeOBVO7H z$t#bQjb>CKzORUw;Ks3{9%yHE>-Bi$kN(xf@B<^W$q2f2-EVSM&uk;1O=t)8ckr1Ggmh5Th)0xP&umb_X$9(40!=lCI@eE|qG|5!Z+opw;G`{o@ zKZM7SOVVo+mbk|A4~m_yXm(G7FWhN@I?*6FV$HGe7Z_b zg@s-q)QVpD3jNwuhqK0@(PEKmc3M#1T|eD6S7G&iW9 zf0o7`+4xe8pK#6XE_r*xlcI&>?JrpyWTuuBEQ|+^NScgQ#O~xVl1-;l{7D9agG_g0CL-6VpWUeF!xI5 z0a&(uSWe->Iw_fWQ#!J_)Rb|SZEG5=B6vEYPM>HjG|U)%CgCeis?CHCETQU-BQ>IHyjkH?_Mh zo+OK&gWKSUxfLLjBJHq;_w4s}7w!oU6@&c>Q*Q7-ecYE&T1;ON{@EgQo?x-EyR~rG zVND}+)n4c{B&7KlbJyrek_Q=p7tBNRUY=uUUQ)Xxc)hwd6Pf_o$@t|FYELvY%+}J zu*1DaYyxl1j?V3>aaa}%i2oL;;p#=RQ#vf90gQ8P!uO2V5p=zG(-C?E>kuNavkiu` zS+i;}rqv`39f1?X(}xTjP!k1yvJBPF^Lt!f*lz2G3_YlNyyuZYngbQ|vmol0 zsX7q3K@zaA=f>YBkJD00nz?5Plvu87z#TQLrBZwytxzIlq^1{#T1(pol5)TPG`hqo z0gc<_@Wn?lay*1I1aq8Wq*jZ(ICaq_+F>KKgmeuROWA~^v?o_{yoAB0SLpqTv@-N& za{e-b(e&lgPn}?BoyW?I0X&-8*#=}ZexOU^cRq&*$X$N^TAxIvON?YP{mr&yhiav~ zfh7IYz4Q-5C(RO-2VZ~^U7*py!LxjpIb!a2S0(pTO0KJJ*M?r3}`FCXA|rKZm839u<8ye^2tg65A4)Rx8dHNSOno#A)uHieK47{ zlhc+HckPQ>Q?>0jc&;hs&US-Wl{fgl$6B3tll^VBhOBZmaso$cT%*8nT&)ma{Fcc? zRgF&m1w(VHsf*k`@nK>lI{%`}Ig_p%lfBE(`}0%oSrApAGDKXGTa}PMymq_i_ED#E zSy8mPNxq6xmPM49CVY6##nX!Am%lMQ^M!DZSJqi?e8Ed&D2)Vq+1lsdMYEr^xxYxe zu^)0~`F7v!HcaoTz|O=l8f6z@hn9T|e_(^EmNj#psyUG4kr9G!aV)quFfvR5~-%T{~h)_KC?=X&|CJQFajl;_A|HoPifgx_ku{R`gE6D1?s zn%se9#WmDr%@tCv#ri&BwI8s`woo+!1u1Bd?D7DMZm3&&>1dCj6W(Cwvc|w--G~v& zgwQJk9Fit8J5BZ>{S-|m^w$M6oua06&A&44>hQLCV5DNY!y-TQ73F^K6&K60dq$KN z9L-`TPuD-1f1$!-buAT>v+AQ!sca@88#=ksx)+HDt>${t>`HdHX0_~n-s)2ro>SP} z%ey}DzuRK?mkRG1Wj3BOdqzJ%W&CdVFOVbHEgoryGC*&|VIu1RLj;!I&C*0nc|A7@ zp(TK~VJR~AUhDS;2vCT))&6wW#6*BJ3SBxp}sD;jo99Do8Y2Kq+s{MP^>Et8AKSgLeg`jdBIa^cXONLYtf= ziEejZ>ZS+*-xlzbEE>n^lTO&JgwdQcG`GqNMpzF@Q8+C>=8Fx8(lwlft16J)dlO)` zxEd@^YHB3})J>4x!s&qrXzF!$;6*trUrnUV6PYmlx~Z*gbfxI-#X|Wm!_pat)uh}? zd7(4=@=rzugYO6JNV7B_{>N*iJz+yBrH<43mti@ zt2HYVJGWa@Y`NCdO)qpSkIQM_uJSDotG<>l6I}Wt>nY_akI%>C)k|GrHKCRA$rq`b z(Lmi~zU7@fh$^XC#BEduzp~I)Il8=--4kxcpGKCa1x`K_8ueg2G13s-mDa;1HuW^= z`opIc@RGzj)Yh`*GO4HUvl6K=e36^L)-{OVH!fYUcO&savbP(a)>9pu@=>eFSb#S2M|3mn8St*^d+0~H& zL=~vW-yW;ARsky4+8vt7bs)^@ahlu8yF~MEe@M(0CEU8Pw)1$49_!Iv=!GEQLsP+} z%^R`Zxh0b4skx}!%DXsZJQhk5bn7bT&gbJwM!l;!ri1plx9OS>&YPH+ZTO33+(G^p z>7CyAZ^>5J^7%)M!kPCb;bjwz;~1BzUo~s43?6SO>Dxn15>Ze~YjS^nD1>$)O)pZ*)4U(4l~}YGh?)Z&p0#e|N_sAVAqLXmsLl0hRsW zskxCVN54t`La<>`d>`lSt)FAP38gEeoR(*;CE@#59jj#F9|SV}<1R|Y`_2bM(j7;{ zQ|>n{a$p8?6J0AA?4~2+&ylmzK?4-!KPn6menfnYbC(Y>E1R#W{gX?QN4@B)QkfI3AU8g}GEo+Th;_3Qz$v&aGp+Ghw@ijuVyJNdY<2fJO z%CYwjUfq`ZB97~K-fhRU@^Kdv*xkm1a{r%f&DaKVzCUEe!bAQ0X9#6c#P8843D+WG z%rV*aBfCfuKJTXppc1%1=Z_{Q*mIG8H5HhVq9dm=zwDZu=dq)DoQWIjQ9x*yq z0H?K6X1S2&Wv_fP&VjWD4hEW8?Y_qxp_`&<$jZGb--(^9G~q)i-UE=8utR~s zMBneXeMK^Ibor`(DrwV4Qt~&VZxs<+$LYVW(!c#mxX3dODwX}Y624!aNT}s}4U`#s zho`Oj%s6xD*^Q>u{bH}Si%@Fy{GAhBl=7Kk{MHLSbiQ4HT zUCcbG7;~sCS}&e{J_`!0-kFSbiVQ93Ol{mt_#zixLs%}aU4WQSA>D!E{n;@VP@1}! zAC9L9wmFfzR6lQA`a+~e^MbJqUvoL)Xl+%PHTO~~3Kh}!*ww@k^rDQq%NFua^k&GE zxvLR&%eI%N@r^V$XFR&jJ1|(xA~#LLda$>Febm+N=ivfm2{3p# zrx+r8_mb{u=*_<9U%7^@vvXf#IopXO72^u<`vYILnMZb<`LiKgaV~>T>VG*A_zZHj zTX|M%M6&eIdCd74OT7S(UIb+@Lka2C3BgI|y*_7tJ-LPW*)T=Ixq1d!fnHqcXJtZx zszOO>YQi-9j&$HoI*yTccArESvP$Rcq z&0Lr;|90<8!84V0pZV=|=v97ioezUuy92wWs&3tVb&L^Hp^&BOfp6I_F>@8q+7d%I zLKYiN12V-U2? ze1C~5A`S-gDW_WppCl7G4VwpwypbdmUVhrN56%{@a!ei08VfTuo(L&#Z0* zB~RTT*Zo(2d((JJ>-&wI-0k0m=f~*-|C=zf|7-(BPK3L?h@G3Txmv!fN?p(eDp7f< z2i|61t~gj}ox%gA1HIrsNt(uyn#x$IXS1kz@kED8d98Bd^L@rq9uhXLKx1TaC^0W0 z*kWEYWr!1SEFP8B`lx`|hzINM1qpoB?lDB|wY(9qe zzhl&N)RQJq&bwkGnN~mnrSe+y22uB-vDCf*xmzww^0z4^aXWf1HH_q+L42P4uP)u4JL0~OZvg|s^rp1QXS%2l zi$bIBJhR%NY*M}aK8buYt}vyN@k~=GCu{0FcFg-xo=Ps(P}{+)`MM!%g>mg`&8&Pi ze$r3FV0`&zE#)68>Vqze#`{)DrEZwn>5ucSl>)D}rYm+4ZZmKsB;v=L-b;4wx#0~v z|4UsQQJ)cin1?41{?QE^ss)ueUk_9D(9%F&QqL?sB~7I0(Yn@ORIY<+I~`JA8k#HR zGmfTyGCc4TikG@&_#1Yhv@;uPLap)|V1F8}2tnz`A(DvHTQ=V|&XK*|g})Lp_Hu}% z-O=++xy;d=J;V6k!NbVx19*@ny2VPQo=S#J0r8RLjvOnRqNNBwy<9q%R&&9yoU?Gp zcEShpuiCYceGv3G!qW}$GbB=>Ak^3YR<+AV9Yd6&?js(47In|{~Ajx@6*jh^k)UpO9{*B>nF1)5OQ2lvftrN~X zz>H4h>_hI>b+>5i?sEMau-wZ#0)%ne%8}(6SCSn6ju>AWJf6%p=4HI9`mVY^JGM{C z^Sq6C$(h?f(RdwEd>I|n)`mxTEKLPcx=i`0px%t+ghYB2L{R*SdLN`BYuOjkZZ>?e zaB*mm+uIO9@$|9YwYBn2%mKTYnZ9#p#1gtqXKi7n8dcK7XGX*_3CjV9;(3cai^=OT zO$1mMpP@EsFV=1>i51L2O zCsz`W#RHm$2tSzv5Vrk9$S;MGPGweOD$|fiWviWJK|ywSp0f7WpZaySd`?yJpQZvccqocDU+`hFxR*X=Gr*s{9+n&VwHLE$fkP$|+?y)*Fno|c^q*!uTEV4(pXm@D{@tg*a+jlr*MehY^w7wjJ`OB26NDOm#M@(&{d{p^6v9p(D7g8Le}cDAYm`kJLE zVjj+GZShfVaT+zvvzEP3-_B`e0_cEwzx*|=?f;1QE3d0)R-eQ} zfs+8bYwG>dY4DTKD*v&hUOXfUtdUYT0`f;8U?Dr81_X~T<+&zq?t~I9sqYFvi|#9&EC3QE1l1UK08vU*fSmOoqi^X8k}>jLo(agFW0=!9(-_$} zTTruu2tJYIU}R{FRXGir--x-V-J6>$4H{UR=sS$ih1jekyjV<)9tiRYxwb&~a~@UD zh&#i*5NyYH&5176WMWKeTNvD`;($t#FL>eHuyb`B6NNtMG3mvJV-2x1&QoUI=i{J1 zVOWaKAS}FcT|Sb@jraEaI@yLCqump>xd;ZnR?l|&FQ4XKVdtOnhz?o2@sH6;f9V@% z(zirISgc~ntMenGlk+61$R4^yOIqo0c$>*YVN%~5`VCOO#ceJ{;Il&i|1W1wTG&t$ ze#|*mWz{iO!Ogh%Q^(;qVj{JlZ{&oN8mtR;1@V49BzSl9enL!siD1UzDA=GDRHjFn zItmT@OnEeZAauLe2l(oGNsB&D@Sd>j^H!CKx|qq*GgP;UKqOZuq@g5pJDupx0Az8h zjO-ar37IzKRDhowqrFNVTSZrDm#?&*M@HT*6#ivb!f#$A1@?h!M@HXu9(aPQn{-fU z>C;nSe3X~a6({~j=rnxa_4H4!o;%9x_UXpNFi_`uCmt^EjH=?k?!Y9%NU;+~2w5w| zu+@k`FtwR^hJ+TIEeiF?RScjLui4VbeG?&TJ_2_4YsM#4(irqJaB#}XLTVGtIO?3{ z=>Mxh6SH=5Y#EWXboHx-o8*Y~AEypoay!SrC;W6^kaYFehjxE*2b%H^teQ^roQdI7 z(4>ufUHeLe##n7%tq5Aes~1coG-fp(dF0D{PKkQUH(Q&ccv|n6^Sg1mn#d!uq5Mv9ev;3h7DdTbH zkqWoZ2_CD&SSWFGdgJhucGuiBW2|}IWrZe8E11iFvkxC;6Pp{U%)y+d%KP~NcDbiK z7<<_gfVA{IQ;B+No*i7ubNz?Bb{VMQa4HqR=j+I}aBt^JyHSmv&^YOnw6U1bUl!SP z-)Y?VR1V{0o|aG8v*vfLCvp}AH78M}9At&tdc-{)2Xdp2Gm^g1ZF(}AM-q8S)n3h) zxdfJ5jfnW;oIl7g9A@Kh>}Icpi0OQ*%MggLENiT2vyM4~^E;NCpF`SHEEW7cACHLM{4@M%Sw zEKpNDYf<$#h;%|g>7sZKJbtV({a76&`+)kxTnhuV-tam}JboxLx5dI=W83mXM%871 z+TBaH_nmFobFk9^ zO@Y8^cwacH^Y3Z6F)$)799}*Ii;O1z#3ZA;)^C_gGZd6C{R3A8z?%{EP{YIX$5QO- zy;*Hg&9H+!eO|Y0RG&+dj;z~SYJ|l69$P7T;n1&lMtI)5=DJ}*T1Ln4M-$%1MXhe= zIq+Mh*`QGSF6AzeGrp7-IWjxa9nsF=z2txuICXWMxs-!X##^~;cl}quRu|1`BLh$XsJ~C{i^kZR_NOXn?=|){aHx*@71l=M>N6%9a;BWOlnYc7pITzw!5fw?Er9lJ;z*PW;?>8ac=ug%s-uK zN*rM<{mF>!ZO||1{N?hVPI7y|Ahodf*>*lt+sh*pPX}Vi_U0B3aL$zWmgt7BuKxl?GhJprVhHR7_f9===|!2gB&SJ(rdd8J897BVBl2Rc9;s zmA4_*-vLzRRpsTA&pkbU;_A_&&o`P6yL(Kk(U}$vH;!3BEVp>wRQnB|2O2DB97+@u zGB-U;TQZ{OeuUWMGKUJ7|kt{Gwvs z6Ub-j7#l*;))#jeFH#iK+&_B&S8BOJ^9JHrp!Y8lU@((DEG0ui;a1T_uXSfk=t3h+XqTg2$m5W zKdIsLLRwDux{&t(t^v`NR~ZZ%KaPvE{Zg&aewF_^yIUzm>yOC0zubnoPr5S>FYZY3 zCJgL>2ej(swomzVr_nsMz;7Jx#;VcGf;u?}Ry;2$LoF8eLnITy=epLKG7QVJh}O0r zXmfrFn^0!AzN7hf8&}GW+qRM-p6uYN7Do#n-?cFRk_{jl%1{wgI!AGKpkDO1v|Okb zWQ4C%xvmV8CfeB&tOv21HiWGA7s>PfW*dJ_BodgN*c2J#Y(rYlZm_INITOA3WewH$ zQi0QNJan$DlONh5g|G>stW2_O#Oq>incHql_e!7q#A0n|)WPBI@1t*@tld)3T5z?a zzkW6l+Yd<&ozS<$dRS!O9V9PvZw9uApR-h6=~cZyTL1MwlW?DwZ(4ncWpJMYzAgt= zl#a|CJ&bg5xuawYsp@L!GFEmWJd-41Ayv(McRQMtV=Cpo%px9iVNPX7UWAxf>W#_< zbgYNs{r+?{T)Ds;^%5!>LD26yj9?(zDA2XeGc7z7jVheEMt=jIKJG&KQYK;`>6f7! zD}3#Sz-j8dKP5<)5EUYStMpBfFYE*D7IakgLVq`8%F>GtbM0xoE^7+g4 zE8OH{h4@Cj<@F@LRzP0veG*N2sDPyU&c8pKel@V)zq|i<ytNKk*=;Rw&0bv*+RrX6VC|Myl}YQ=A?G)hQh`wl(q*kD z+_vWdp}B4Lv*`DEFv%>AV0W@@_zK!%6U9;@TZ(@yDTw>!+;G6Zr05Hq&~QKF^o(hj z;S*!qU9n^QP;Kcwb7`rqRw?K{=9${S;b4lYryl4WbQ2n9+68#tN03FvL21S#c8{4c8;49Y=%Yvb2S7feLM7j;Nl78gO;kA_XSu z)pmvOZhTrL?QOsi78qxm^^fYA*&KZEA|vq#zcUA59=t#A_3NW-e63q@@O48E8|tkt zAI_9Y<`F1;MO470W+)B{%H@m?gP(*VYzs=zMQrPGh z-$zVft0fAXqw+$Ji^oi(Ym&XFScQ0t;#c9y`K%fGF;BReyFyBiKMmWYm5R^T#{d1F zP5qBk!TT+EjF^zi@BSus>#D?FCv}$rU%el*YiZ)Z5>=0%2JRPk9&x2f$m9HhJpU)0 zE10VHms0|}gF>5HMpAF6b#hM!T8@Zz6-U1}LZZ!c5pPhN(EAbho>{G?las4 z!2Kkj#0bUIrwASL%BA0SZflT+V~8lqYaG8>$G34nrMw5qnx{7fAbUJjaRAMFB%yY7 z$_KtQ^b~JC9&a};cl?l}S=QXkVp`O%3MNknPB~y_-h|70JbEq#(wq$RL5HIquV@mpjq(}XQJ z?3A&o0fm?!P&?6>G~B~3`=MBqug5c^>PLRBjSZ{>HF<|=g@A6>A2)pE5H_;tqqy4; zQxls~+PhCWW^rV2tR`Q_a?^c$gEusT`BpW=r^D)PzON3r=4A!Fzl1>V0;*~fh&Hz- z9yd@&hJ17ZCvq;#(}Umn{8i<d2mu7 z8m;^$ukQ4$mw0cnCHph6a!~@Ux9bwk3c8e$&>(T_7th}~FY^iO=CB27#?97OvF=|* z57;!Kd}@N8I)3*-L_(>hYoz5?$W#*2!+Ml20jyGc+OPbWxCdt=JtND5g!^<2(YFN1 zo)2Ki$f%+^(V_`=r6T~>qE){b_ut}b>grcg-3!V*BDA&?cD*@)f;{q@1aQQnd{*#t zLu4bfWSH@6L{z$IdGj}u6Tfu*p>_XihU1~R-GkSu(Q(DG7B%XE=5zmA7?O5=JPMqy zMPYc|i+j-vz&bm(5F<{+CH-()A8y!Mn}1wPo0?B1(}W|#S*DY3Mu)WXGVUrFo`qp$ zEmYG*jWqFtHfnvlsdSGfGuM8+x++Vm?KWo&&B^)jhVxf!gk0UP2?v$( zh~=TvqR?>^MCb0<*=nd%rF7#egY;uvgmKr;!?c&n%qsom&E5wiq5`7RJRhD4x zmEi~a;+my_QN~Ntl1;hqyW6_rgC927fxP!>o`<4$rD&9r0=c^>rYAiLW!m*6T^r}V zl&mUQX4idQ&(1?(N-{?CDZF7T8`KVCpz4&~+RY+`Q+veJ#*Z@3F#{GCHc3q%4}Gd1 z*)tTg|E~kx?K~~+FZ-Vj2VztWAxf5KA36N)b!b&SH_3iwG!4pLS|S6R2`qx}_gP=q z=E(dBB(?87qp0(+C1yneCO=U@){7KdtT&gUE48YmWnkw;&sLI{n98urEJFt|yqQMX zHZuL5f1*qF$vJUcKn40^l%CV*i*#LUS9MCNPN2?8-6a;1GDNxl+sh_~gy$P`6EBNZ zf|`GyVfYyV<)T0z_{v*kkyMh3ONu%A_c4N9=_|M?;~6}Va`yoFd!uWBZ1Oj$7+GOG zM`~uX)Ig{EO)A{jwLZHy3>HS;T4ih0Q=J3f5slXJp|Ab!YHrbNY!&@V-9nsC7@ir` zKlF-Om!13Q31~EY$4S&5rw)hg*Em$@clHnZ%(j+&o_gjn{v}Ok(Li;^escET$KspXb#`#ir=hc8Lq z6O23>$G%aAk_r1<%*V*|5xd5D>XSeise$D48L~6A42`IbA z#(%-PM%1k4s%Q!om*CkU{qthQU(E-E*L+IlTVL4Tlxk`7x9ayrzv6l+7nzd!+U8I2 z=Eq@2@>|b*HTz+y#+0{O(hhOX0~Wb6!?)5@H@o1r^{ON^ zC(i$CTj2LSz4XRUhgL_gWO~1!b5*K0ji@rLknhz-V#)+fI8c=Mw);S)Ms$llGQvl? zhfw^!BbRLVD-e%YH$ZQ___(wXYB9`|?(x;M0wVownvwORlkqHOMlvehd(sHw!Y`F9 zK)bgDg9l+XXv%~W%ql{e@Aog$sdTmH0M@KzcIw|EIxpUB=9gmoYR$lv4n=T>k(bZ2 zcEpDT-RymmTP@E?GtncsZS`;6>RfsMrSD&V!BHmA@^k8E4(>kOqC-FN=c~n(pJ)7V zi%0K)Fp*sPn+}bU)q3}u$%oF4(VH|CQFQbk|M;&DCq&OQqpr*Ej&&j%Xp>Fhx-^6N z*%jH(=WcH7WR07IMBPQW6ierJLU|F5zt&&IjwpbTmbqFa_&COF?Q(!wh@#`&u(Ka5G--Uml>5_Zx zwaQJddGADMnbTH3_gyf0($5bW|H!!jA{Q#;+2XI_yTg*RI4{BVI0q+Cxt}v^@I&2s z)_1DrP_gd!(ww^r%{3G%7`S`b5j!J!4#W=M?n@`I{G8?09+Hl<0*QTSN&Duy;V&H; zD(Rr~_Qc_BiiIjkzPH0l{qH%6cBe`}GVNQ!r zNi02+_3>pVOmEWY+t$fS1>NlgK7ASs%NkX|N}Gnx=WYxZf+6*lZ>p#=_ZnwjplG2D z6Ipf%Z14tdmo)#dVFcQ9V;M5>CL8;AvU`x zU}$O&1n+3`!l{7c57g7l0hO&vv4)amT~sNJT0Rn)yn;D~CcNdxOsar9dLkQ!ceM@&}(JV+Fwj-XG%xv@MrgkujPYHrh4p=HsDeacq3vs3 zewbi6{N~ovJHm3LS|QO6dKTyHvY<@p|sOv!qx^qe-ugjfnqgHh;Ex^u0BwP{vzIO zd5F(JT&5o1bCx|)xOef7f>Hl_79AjG^|K;>yadP)Zx*kVjNjj#Gur4ZtQXxyCc!=} z2j_08*JYtD0%?eR|td{Z5My^Dfp5Fog(ooqsjr!TPV8@bHN6h@)Nl8VT3 z^z+QspJOD830_lVW`@o6m=Fw9Td(S<%clHsz515(D|0hl0 zDAJH_ckKykPabf>ZuE)abX@dGs;iS>=pZU2TDI;rY8xRhoa>%HZ}m&7KIR!aC-P`{ zbdMrcbB*<|Xsqeio)iDhFk`<)jIX}3(%71+e-^n9AIftE^w!$2TNJrpAh304?cV_x zcRPVLQ?IU-l}mkliV!&1xoEoZ{A2$>Y2sZD&!OFKoz2r!#C^5%dIMMS4b`mdou_Fn zitH2)wJti9)k^H8Ll##iyt>Inby>s>rSByEnR&Jae(n4jg(qRT9A)=fIV>_u7Vb1E z>n}sRioVs?w=X2fprjcn%gt4y+C+VHDgU0bGiRK3%lh2qP&A_f4 z%5?0@>%{x+5zV_cP#b^_yKTj7PG!4pCf779tPd4OhlVN|QdFn{6;bk2Dl_XMx&@G{ zdLi=`;j^^G5_krUYC{M4p zl9QRXlTH?OtB;>Zefa(JO3TFO^cZGT)W19<2hCjub<%ZqLumL>JA9Pux!z_~@GDeg zu)}hW%7XOUQ+`045ep(O7_Anrd#7_JniMYI4Vrgp=E9k^YaBJuvrhb2C3l}ye-xXT zud*rga50MqFE9UCP+BTg!GxQ#rL$Uh0FuDTnvWjXeUt%mN?)}96%R(*3fsUZELg+bd}N}f7~miHlvSS20!-La_mwJZw*GL?>DCot ze8UgX7@<^r$JbU7)~;CA#m~bR>Ygcx=f`3=qsWPg~u2C4Vm?G##9LdUU9~glxp^2skEh`^AN(fznD^Of+-*s z&txW(qh1r_CuM~LVq{KFNiWE^fk4`7*si_(uiZP6?zPih#Jkz)Mji0qLVkXk`Tf_y zf(Yd9A7^IdxaBzO+nOS$sxIZNN?FtcApINuTlKK?@GaU9vqH_9p)WaWUNd^FofkU* zR>6dbq-mdo+VNSdA>y?!=`>~QuRyKj($~oGO~?A4{p0B~F&@JX)>njrdKBTuv9}G( z7h8(VCsjIo)*<@^=CWijVTo3lZ%dQS)@t$N=J*4{qcDUvr{Xf6;yoH3E?fIx3#M*L z+wDgRBz{O>gruzg5NEc+VtFP{mBK06-v>wTpGUTchn%Ew-LIL`Gzq|mKN$qd_>Nry zDW_tFjKlR0M=E@C{zX>AQsOP5cEvcrJabO<_AiaDkxIYpIQ(0|gI_8BX3AM7jV>A; zRrt};mJpjbU}GT0nc10qEXZ;&(Y$`<7?J^2^wQYesJbB4w^f{S@Ql_w`rnAL)2j~} z9}SfJADX_xuj%jmACQt1rBgxyX^sbT<JC~`27WY?cRINJT?k6`v!JTdZqu)>KLH~fDeTI7yA5eRs3=Pd z1#i_?eh^APRk12ou2(&zX0dagt#_N23!->f6`615(e-3Tb?We>8@9`TjIbL&=)V2- zKgH>P1CFR~z-+zs#NutM5P$T+Pp96NoQ|tZ@O=M*2+Bmhkdbgk4~veOsS7-Ea@E!o zGX8FoEER{|r(ttH)EUjhHOfOB*F6R)w_BX?uDde5+;SoMW2Em$$27H+Un?I}V=^UU zF3J%&6U?e3gis;ejd7p5PH4`UV_a0RXZ1E5lmpVx|2k)^Y4?_X0J7^0es!J4j9YsS zOZk52f7Obk?}UTa(+{pgfZ#GMAJjMRa^VH|U=Aar#raBaAqTHY#ogsML&hQA8@$i5 z_U4^Uj9~|1{xxG@yp+_o*UuEj;1C~wBQ9&-cYlMt|7%{1vohG~be3YMf%^FWQkbgR zP(>{2@Cpp_FCMo!$&LRxwO%J^_+5Coz5NhjdM^2^)$;OBT8q!SS%ko|y8r>@mjF~H z@NTz@{EaiOE*b%l^E)?NHeX3`0gR|v)DAX!63X_?%`Z0E6E^zjO;BeVp zBmCxY3-~E#4gUE9f;0zq#%;$6t#*ld6`wMycyF&X#DtuIp?jjUL$1YZ>{|MPII1zJ zlu&=F>#aL8J_vjCSt&26K%G+5+BBNo;Vr8QQ^Yv9fgI|5vr%Wmz0`P`L`fTRpG!*) z_4o7y(;9MCy0$>9dek+$6EaIU&Rg>ZhpZv)(bhTSjv?sEb}|)vYLisif7CrTNJ-e1%6*>(=b>NNDD zCl-q!iyU{~{seLlJvL089t>%fQRlW83@R(gbT0_ILsy()cN(sQa?!6fbYdLR3e^kj zm&5`fK2U+X45>^Y$R=lxaeM9=R=BsdZlOql$xr$^D}5UL`Lf^(+cYuB z*Zn2Z7_B8Rdtw(SwkV`J$ab*ReN;zvQpn#&)6t2#pGTNTdMa$7MAWKG{_rHi%TBs* z?J3ssqj(*sZ%b*6Jba+hcG<%N7kb$s$b8a8X;yX69pmb*2)7n*&loj^uMm??wjD6h z0t0Z{U$lv-Dy0M|3z{qvN80tq(Tg^2!kPNMdzxRmLWLe^$_65D3JLr*2DcFKEXE5g zj^E_^7kcS0`2*P(_*~>rUoXDv(i0Oqc0g{3`}|L53#TbwXR=efc>P25#ht^0AyanM z;q~+0tqZ4-5dCGM5~s5sG~ik4SpBbT0w@zXGhFU()vWp-se07B6MR`RlF3j0Ut7cgNU9=qj^2sd>;z^wHSRGT_l0(h@Tx>>5pE|Rsrv^$`0$uX?STDcq5CYg zw&~UVW@Tk|$U$cYPn4C3$}ff*5SQBV*;)hlKF_aK^ulHJzlYIN565dZo;{)eYx}Zs zlI~q#I{`2`HcmNsoO@79)o&)1Wrg-@{&UK!>>E_EoiEQG-{`fRBXgc;>!qKlc zVn_1CZ#n1kY!!}Rd@f7+9r5V76$5BBYtQ%=1A4BcqiS`%%rjNhl5QWjUS}(JW`%Y2Wi*Z69?v%;^R@ z{?p3nKz~{RK)?X1XQ~RfNrcv9smc2^d-a&V@A4|h#K>v0^{)T#Wtw~IYY_7Izaiow*?F!{^_lJDg+2i-70C7g_*aPAC^D%z**Z$T;;9&ax0dHqk|W$T;u`0O2UU@yk>3;+(dCD12DKTnSv{L8*dxQf;=|DsA# z2Z?-%ws~v)@EZTi2m$hndC{9q(yxDUYLk!M<~8^kPZfTX<<_5DHbsm_SOsq>|AQEWOyfldfekc7v6E_*0AQ(agYF`0TL;Q8P6m%G|)M{nh zE^I&B(5##(qH6DD_o1*bA7-2tLnW@{;|Rss@wa&NAqEwm-Jg=SIvI-SR#9k+VTj-+ z6<7m(b)W4nL{#|{3uZdodnD$FgLd8rYV863P3Byg^{by_C#|}das5(!xy4tky(&Xw zwPb2@Y`lp}FN%AvLFpe;%e6eezLTcOv-7t{byXWGdpS>@2^E+Gn4QEJH`(FqdR5)< zi)^h#QC3Eivp`NxSfZ3|-1;ZKDC8f{=9t#{ji|nEVduEjhEHkVr5Bw2cN1Q?O#nsS z|2=%GpIvfR%h!bBtjFDIt@{N(GzIsWjK;#>DVM^U%>?^r#hp=#&Pg)arFRJEDR}+f z&6#tjS1_aY)n{DfUDxs9?E&6wv7YfVT+ZHTB{u{GJFDd}T9rQAnrpH>dnxKKMR~2= znx8>%X|a4o#mloU`ufC0p>LMYlmY+lByLM~D`UKtZGxpj-xf>dYW;`c)#07bR?xlf zrF;R%ElfSL;U1gQ-ew@Pxf8deEOsFo(}|3#*ig^08jmkgIW1rH_N?=c1)#$QA-fcN z6!NRB!Mkd6@$2hM9Ai1_$<=JK=!2DA#1I_HMCKC(QI}|1;%ScoI0+uRzF)dK zC=>CLUrFBhbK13Kqd)$;uKf1JdK0jIgrk>d3sVIPK9n zp4+OKQLRn4*QH z1FH39153uE3+mGs-uP@jfoH&xEwIDyweI9xl;O7GdekAlHlKzZ^s6qK(Eb(Wo+J-? zXvhV7=#=kEW(CAYfFhjau=A#J`j|^Ow>eMj_}(lVWAk~#?#1PQe`BX5GyJ0qI$?dU zyL;xW7A%HM%r?b z*wGDhvsv#7-rXu89gjX}zm#Q^q1MX|N zq@H@j%7a=GBNz+4b%&HKRr$;#C}2&F7S9fRQeRh;lU7`Bj_svhWuMQJu|dfRC`Cir zQY}y>5f9OnXOzpdrmcN zSnf>X%ZlRXXL_mj%0A@ZMJ=xLZ8lS`W+)-heNQDZZRuGX*t67U=wj7P$sQOQ;^sufPIA+S7+X zT-3P(F0}efY%2TvE)pZ8w3&~|>vSK;wXw^lg;G2%Te$9!DJQ&9T@9Sp0#if1Q}JUh z`*!nRPRGu;W_P3ZmWCu1LV%>MVp_*RZjK<=zN4bZNWPZ6r&I|KD(;0?GFBW=b@F7v zc|<)>q7Z?(nN;BGy^1xJDF;DJDK=%S)ETUVT_+xFyIhIG1A>KTDwUhMEybnMuzcmF4q5F$MZ(>waj z7jY?(L)Eygd|O6g`$P$Gb3J!<`p6>v>VYhu2o#Eq8=W zWe-r0r?8pMBy*QGN3EoXhdr#V*tcMaIbw)l%zYfMCCm|6-c2>wjpELc_dOUa`Jl5G zkqHmPx!lG>rJXvn_@vifg7KfG6(m>{ZcEa=nkVac{?SlQI^d%rnGRnr)YNpS$>s%2fsPp0y;~95Z3oi^3wL zwP?dO*8vOr7xu%`$~U8bsuE)OgkAbnKIiD&v2MlAyDimP@7++W2<$hXl?_SO+vJX8 zVCUEwZzc@7&jR#af^jpfnfdj6G7_aHrEs!U`zOZM!3X{^|2okSH$y$8Ij^>N>ZL#A z0VGYYyhf?$GiR7s?Kt|li#2m4nr{WVYyG93 zX8&3RYjQT4cX?gIvFJs?5N((4K{z*XWX4GFfeoK{^a)D$j*k=G>7LEUVL-uSE6c=k zYb^*L8>eYis&u)s{U|G_seB(MSex}Z=0UwFKa&uo+#J$x?-dAnQ!*k~>&WLb#m3`> z66WyjKlLg8>@qxJ)0WRSQo)+q;;2@>@8ST1eA;|3e?%qj!ks_h@$k7W2N{sVzro?n zj}+iqAmQFfv-F)f&L#oBP`ewn**+`JW)>Ix8aXEFcwqLDilL++gna|4roE&z5c*T%S90r z8t8W?@q(rr#bK`+kRWSeptMq!iHTXkeCU|!Z&s?GkHHA55s-s-(kx`R>7b!wqq!g} z2V><*rW^Rh*=nx~7A3WnrB~#9xAx4kzNTD5wT6FANkn6#qkdP^@*5IiX)d3H5C;;WHFht~rda8@5Ux0-Kd7ITg znS0pYyN%Nya%}l+x~cGUdFKe{xW#SNr8l+nX$=`1bww7ly*AkI;T-Dhf{ z%q@QBkT8$H%on;_K*ks&d3d*H78qhVesy``72ac_$cyuS{V>JQ&Tq_QM4#*59Ae0$ zT{pN`w!T=d6I?4#G+iH$et`Mn>{tpqveMjrMK#-gD0xJ|W>F4Wcz>(sAm!r}MF9`b zGq-jF>VFf7L1zp3j(Xp?fn^>076ktsq;IuMo*ZMss8e=heYv#)uT$IclyUnR8rku7 zuE*zI`HI8%f}#Jh|K>cxlvsA5DMf1D*o1;$H1B0{di)!Z1eElScz{{tT8WQ4d6)Wh z%qr2_(raf?S^2KuFvoVoC+D0mA;g@*#kYI#&SH*`JqM!6;=Ttw?`Pyv8J|wZvM{!M zjObxu@ZH6mTJs|Eb93x$A#C&teM{B)cp8pb7Zn$!ctR*HP0!E9XV9E4BA5{>kUO*D z!D4uRb0!F=yYpP5S7GJ$Z&EfY83Tjj1@Cc_f`f$F1B|tro9ie~%tj{=8#?aN>m)o2 z7@7%dsgmL4Wr5UaueN@g3%>Ej88rez4b%cJYf^eqf2S4viVhxJAI(gAc#je}&)*$h z#+g;GZ6c@dXU^LiTqVbLH>eQ4@|BQQ&CE^z7yA2QBx#5Ovp@~jp$2JgOn1*=Wo9eM zorjk|qo?FEQCvtHOE25Q^7b_B$*ftR1F}67K2%zls7@dg;|)mvmn_o~EIESv4WS1# zG;yHEOJ}xE_%Z;e z)4H#d-xfS~6g+o4vYPWH#eA_kI}JC|5dNoutX;GI9$Qe2Mo)u0g(m7AyN7vE^m?al zM5}jFyR+rO+XN~VZtoJHJ|`I5GA!uMz*k{JdcTx9P%fE!_9jnx`LYm|EM*^M=v#ba zA&WBKe?n3=-(x{{H##}PUN{GJfi*+3>B)$iQ2Ihsju5WBZ&qMw@}@PlE#^F=5UPYVa&gkDDb3s}E`sTVd$ z9^6IA12I(`!kqBe?UtL2E0LDZ-X&pW_s?pp;%8W!DGA03@^NSkP3nzl`kI*sIFld# zNB%o9*@zUOm&3s-PMpa$u;3f4$V(odMabiY-t z8Ys-D1@Q(2P}$d8lL~5;J)&@`$xkP=K`d*ENBCj;yNM0?l>E4f+oQZai|9@}+gs@q z90?iTsr>ZP_8c-TO9?7HwS32+0+mtl{fq|#V#%;`=P_RfFQzl(YTBOm6xB%gol0BkG=*3-qFds*w(EGF{?XlM>akrj;G z$v4V!oZ0SJ6S#o2qb>Z_gr!*J?pg-w{5tkzq~Wd%NbqJi(97_aq(a`7g62SR$R+jY zoNr!n5&LgFCc)V~Cn;#^&1LGoqI#qn=R66 z(9^dPD=Sg_W?TxhrB4meh;FHGa=ezC)e|M);8Joj48F7(7CTyR?^HxNI(>eZzW%Gm zaEI5(^HlA0Hi^)B8V89_1g6h>+|PQ>{hTPi-)2tF8g+`>mdhm!401SS$#5HW2N%J} z(gu8oR&G`_|KSX4W+h#1shTsn_^d)~czNS7ry&i0-1~F9QJ~B#O&c?(vja0-WFgst zX=+xH5(lD6(vO8N62@yD_~NsGVZzdAnBZy|K@a{id;P7+^+V4^zxD>dp(OM<(f9|$9d3lOMAlbsO;t6r306t zWGh^9nhOeyA2_G@I{jCSWLd-#6eoOiPc~3i^`M9(Qe7)#wCWo#*1Wr)li+68m)Te! z#uGvjV-ZvtH3z|aqMb&Y&H=`SNLY7Ak9IdL`!IE`U>~P2yE=DuRN)b(%W^tkHCr+K zOF6+(S1oa&`+4LL?T7H&Hv0=3s|szkyv1d|G;O3F+dwvYyu*Ptb-u}IpHbaRVWMz# z$#QH|Uo9A5N;344`A12i8ABJvI0bsai$EcsHwuz+z zJ*Hal%YO`K-25)OG8uLS*_TPA<3HDvN@}~3OZD!fy$$}pJmbCCg~40J^@INz!m5Zu zn8Kc+-}MFiWp~dXDG$VKxYX|HWmeV@w|Ry;j1b4wuN!a&gH3eOxYF+_uvz+y^kA$9 zHAD$9;b(ua0f5F=i&<0v6l78Hvn^VlH@J)O*kyh1R6D&I8VO(PSaG5l;)FKsBa^GX zQR7Y@{4yCAk@@KvJwj#|pY&5kP+?GnLp3`tv-WvI^k~RfcPrw!&_>@p_-`d3xA*I> z>tXA~Mk@m^Hy4&RE6|>Ped5ESqV*{;r;Czh`vosSfTW#?M8FA(L*zCE%;Iwt-GrEF z2+#F?s|l6GEmyvyFB32f6U8hCck7hGba-nHXgIBWEBi4nFZKK8s~I65mo^2QH#>xL zw@s!OY%9u*zLQb(J*Q-+;D+;~eu*-?_*ByVRt|l`G=)1=w=-lnf)8w!i}zJ%5m;Rk z+zA*0f_e%oX9gqhht%x74G-$6uzc;&|U&#`L?IP^V-$iH@l2U>80Q>NYZ^E{?t9R^`xkk(|YjoVng6xo;-v9`&7GuP|vF$RWj zaQSqaH{2y&!?J>OB(4m7-$=|?!JXU>hzb&(gbjIyA&RmGYqtD#6xps1ziG`GqOWwU z(A=h-G~?-u7559rCOPbzB6!NMEl@+RuYO=(x$9x=!1}`YkTWcwH4Ie(l|jb^KYhq> zDiOuy-sFi_X~nAu>i?EtNb|!1<0gioScC=I9ASKLj2(Y)yj&@BiteQLE9L9Ku}}s% zjD`P;lpnLI{51W4JM0<7|DcWI+Uz%%P(y0{?p5x9V3cE(eBDSB2UrO-@N$qdNMVC4 zX%AFysIU62>F=PTzIk*1Ny|~QJ2?2AVwyF!Gb5;O#ar#}(E@)naC*BTrkF|T3)7m* z?=qAMRnxbvqLbi@tr4Pg|3y`6w)t{PQ`qyImmUpo@?hA8rrOyV6Zy^t`AUx)Xa7Fb zgEcmd*47-f^m9=b-W^=O%^71OOUPIZZj*IK(=$JaGGFznjXz%Zo=vyX!xiY(h=L#T zPettwxE5Et43F~e0nu77 z@B78iTFvs)$~O@ir)TwdiMrz zIIWiDFuu`jbkf2&>JJ0)({!0U*;r-T678;yryKUruv7v)O3eXs>&b@FCGt@SNZdV; z1vwlHxk;iN9So(99}t)e9FYkT_~ zoS=9#W$*o~q<7WdPp25}OrBsto~7zEwP6kMoaabLd$;ZG2I`&J|A<&wR#iF1>mn@# zv2SGY!1hA2vt`*rziu#CgORfFDoXwn9|@DSVHi%2`*PnMO}Xc+@I5JFgol&czKPpK z6|CoU3(g>5Jn{+_r=n!TOi5TZoX{;|<=-9ddE|0(@|VM*-i3WYcX)S!^2 z&W#55YGnyKWrt+0LiO0lD{V&}4!VA9(S!_;<-v~!q(asRJ2U+HwnJ){XYGZ+P>Uk} zbR}0~qv092`rzdK(B#6>A8zG;7dyLm_TW0H}=KjI(_fCCNA7`f^B3H;*}6nn13_nARer%HDIOP#1aZ zF&NDDQiJQRsvk6Ck*d=&=gU!~6x8-?^}R|fdha~a;!S+pNL*->N6rDRqkcaE)k3+h zy_^abpZiN4(kC&NA;Y(96vEN?DJclO@3nVzhp;E_#tF{%ar*;Z6)~X|@4S1=M`?cw z7}~5WGQxR(9+&@EpnaSvGsI{=zOp_@+NUtRORLxNo+6j$Y=RXUvbGR#o*qKy^tdlL{E4V#j@TIrL|63`(kl0Asnm99G6)<{A@!HM`m z@i!&|>l)v>%IE@jWJ7OGn#c+wOFqY~voNb>*DDQctXDg_Jrm~kW-xx?8am^Dyg&ZB z3jHS{Uu0EnibdH3d(Uc%iZL~Z7pxp;vVYbc`f4D`Q~v`2!K2)>4+TRgUTLk%kkRpqAsM!%&l(z1UzfE>upg(WAg;q6*B%u!EpNKT1A1lTqqC3^RNv zSEyz`;Dx4Df~fu4Wxm_35#db#vd$F@>^ADSxJxt3$a*}dkeb7FW)!9$yHs0m5PI)& z%MzLSAej69OXANKKW^jriyf55SjbuZ2b%RNf?CI{+u0T+rX1g_4*!$=$tJPtZiT!( z*k1K!7m&T3(I?{NVTKWOb`euD^V2BrgAGx(?%sQiCNhCbg@r@H-5B=>bi8Pr0;G4Pz_v}+*toxEH!@Rmc2P^59!ty%i$5hOo0)@F`DAahL04 z!-?@a^C!pt+Bc2KDVK7nyjX-QX>=*N*+&ilwy&Y)S}b>h?MMYaI9kqn=WSAUP z$I>4pg(nwt9>lZT{Ad{=#?iF&i&#L~%ah^q?(Srn?kwipgK8T_65YLA|Cd&n@6-$$7w^+i z$1U2&7l+Op(Z%KO-qT}|*}(2r`*b+yR58_UkKJgBx!&TL-h)i+-$5Vv+z6t%IW+1q-Y@@5~+1e_NTnI!DXYO8KY??^ASb%e(zvFSk8o$)ECG-v8rC zDQ^E%`dF;MSl7sR7IUp7AX1V?RkizvihNUjUb%7DZ5_$tnCoZt)HwPiW9a?Ll}V_d zV_X_^slARWqFH)x;WN>==5=YikJ2V)7IHEIPZ)1AeM97*D!56VULZC?(kE01y>H!+ zoluF|G`mKVac0Krw8hvRhC3dl-zS%z_#&Gv!F_G&Mw2wlaq+#p9Lh{8X6)ECqZ^&K z%ZA&u)uw!ydB&q9bCEbqlVf&Hl;YGkz7W4q>;mFQtsp0gQ&8b5I>j~fs($!cEu)Ap zNrVin0I6qEnEuOxx>#FZf%*>SP~RL~EC=i!*DlkitdN1wfoettRf4rJELoF4LMq z>&p91N{g_#cUu^0?joi{cWo&~q65^`iz4TE`#ZH`RFKrpv*dgoANPXsI{dJ;sD&o?T5-gO+~?zw|XI{ zb7B%KCwY7m79PmGnNJ7n3$%~jjZ`{%o{ zgo9JpR%yy3CgnRYbTGE}$WAKzBN zOX@TSI)u#`a}q+@aqF*FQk8G*Rb<9)P3vm55-%AKKhv48C)+d>2KMn;9j`2J?{c!S zgY6SIv}n}3-zT(Hx^e@W-3W1kA>Nk7zm7=b2V!r};>ut{E${G~o!_+=^2?7U>bmn) zJ07g$gumTv|8sSMn;z%k&3KPVg<7@VZcnGFqt2305}=~JNItLPCd-%|J6lBY9S@c& zT{%1Nu%#s#Gg3LW8_xbc*u9y*$3>xD%u;cie_olp%MrfjEda1IdjF~>3~jNf0h48m zi6B?1j2be(#|5V&$n^>TBtNK=UNO%6cpqU-M2)?M41by;7v0%lU_Q6IxTm9=U6d}SArrXDgmV7pJcWYIwL4C-f% z-u0R`^NaK;PI|a$qRw)EDJIF&pKvWgN<_TozAS*=ip;HY#rZp|MQXv%vi)X3W-Wg# zi51lzXPDQ2^v73>xM$DS@@s4=v}iaL@W13DUT<6EwNJj9e5|80B4NkeuzaGgrC-=# zfHNOuzNNH&w+!am9GW4Py1UyMqm>Z%&UwMFHqw0{r+NawiKy)p8)tq0_G0Pz)@K5N zjS{X_^WTS8IbxOCC+Yxo$m2I%QGao=p~b)(Kb`E3qf2r3ZZ?TIu(Q1;d+nu#P%Zu2 znWU6mnlKds@5qQ}k&jX&q-i23Z_TZCGjrp!SjT8mts>y_FS;iEWubSSRC&dfS$_Hu z623DKk zo=^sn+t~G22KqgmboSk$&~_Ou^xjX@@$UGTm>F~=ZZzzZzV!G{>ZIx%SN!Y4YjE!7 z-9h;-DQHOE;p^?R?*^6jl@KD(MF|cQF#WN>Ng=?wrA@qlno=}xtd-jpuGUJjxUrVUto+gf`$PmpeOp2NZ$B!ucX_(toWYy!lADq z7NdDQFE5SX{f8VG6{sOR?NPowjy!%&G68p|&!tzMB8^<;5!6?AYF#TK5_GkX+v@#V zmKSstXYO0+Lx``X9l7s#EVEvlfjX%30;#=c8Q#!V^&>h~9Vkj!s9e6RQ^*&Tr=I>PDJNgmR)*#pScERJzOd^WYB*&CoeA;SR^+u%|ER}Cz zGL1N<!ya}yXzu)oQod%gydd1N1famj%yG# zn+}0AU3&@cKnkI`Nv-iJNpQC`pY3wvY{+h3+g`BI`DmkR60wYGbBlejY9>`kLp77?6jK>Bx=@^Ck|N{r6@fj&8-^RT%q(lY z+;mb?aU)~Ua{KTqK#Hx1-^&>Cdk3AiNL)}6kw@HVyEN}RNDK_8S7tdEyPz;lO3Id= zk*tCx-B8GZ+R|uM60m=O-JKWJ^Y}c$Q4q6g6pWzl_6J+a{4%H&2u&(Aaoq67Bj#f%}BdL$J-gSc{WmsFu%yaorv= z$+k0HEimYzTW_$mqBY)6yp)l6h~AKAc@OeI^|f}0)Ve3)w&H!C@_LHaKoYTM0r%h~ zX_xk%R|F_26(xBdmg-);TwEFZG6@%Ucl5{F@SRxrK*?ZyDM`DZ76pdA?2%*Xi1B;J zsRe-H+9~gG4%o&1a3wZRsp1v=9^(+V@5LW=A2s}^q2fzd=`R(K%@pcB#TOwbPX*`L zCG;6yxgp=w-`yFPg-Hn?Of2ey8b{?##9e0U4amM|OMg$>rOR7!ZF-a!&5w_P=Tsrh z6wx;3#%(tWku?uxtMnCqAI23tU?DeQDI^0lc<;_R@`}H>ji6Pz+_eqljKQ23SP=ow zW*D^+etGz>v9)T*-=_(wa#We-%Ti!M9JUhr&am4T@~g#goJhjhlHBBY{lumChKQ{H z9w?b1hphX_U>2Avew{W-9!$^Z8&=_XE8{@nW6r@u**=oRL7|!`(5OADjyvUGD0ZYs5t?J6F6Ybbk?icPhVs@KILjrsN+1Kf2*3)rC zrImENAkFK)Eyz(sE%SPSLp9%DAx`Pb?S;=Y9Ht+udcrmNUV4=reU#xsb{cuC4G&7H zvdeo92Kw5}k8DUW@^&~Cz4L{30i7z3_MZoFA`Wch+ju`bAS{W+kI{g>TnQCkh+&-r zC~mb@hg zA+{28*)QL|6Y<`Dor|UJ_yEgPya_X9vK!^G=wdL9)Js~C;`+WwaV^Q2@$9R;9xB8A zR%8V+f}6QX35IUgp4|XTCLX2Yj(=r+_=+keEu-A#|4*$G0}EE9xXf!#1jwHdAOl{> z*$Prmzi){mbTQ1bj$IarGY9q&W9c}S@D-nU|Ts|x5Av#J0s#mV)ksBN)G^7w1d`Aeh!Z@ay?kzB-~ zI{cNf1$^&6HzRdymS=sDdnu&tqm%y%Zm7<}l4j4&HlHNao+aUdko2qqP^W7&zxFmO zX3YndQpEyuX&ZB~lVm;{P9!tZ*ChR8bN!h@-)`ZfHW7nTZ@ED_`cYSt>VsFq z@PplK)=eOy`;S)G5?^z5Tf9yMu^MA1NCH???!|g;g8nUTk=ozE@4^{6)b|DIU$%E{ zP!?n)O;1a)Dm>s!+y?$*rj8;tlhfjsL*LW%c5nXjkdd+%(W|~fLpPJvvysY-ilZ&m z)bqICB)#x?`%iIaSeX`-scCm2^r2R6*=jCuv7#8Vq^O{FV5n9N+WIxB8CE5=vE_VN zwkLg68IE@|iKJmuvhZavtDbtP`a8Xe&?IkfNe*LSY-uJJ;I)_bh{#-uV1?|p!-{UN z-KnNuri+N%*b{rI@RSnHTgkDczyg>2Gg{`sj_AgWhh5KnR(8}bBu0W>OBb`4_$oZV z!YTf^Ht%1f$(Bs6WZiuDm87jQV4~lu2DJRqu*dq_8686W_neIB|E2#v!TQy-rTo)m zb1$tHU`;UK85E|^auWbX$aLsHH`!XiZnT{=O*~S2LmNTU3KA3 z+3Mb5f=&s1yj1ea{(TK!t~II@SCsF3Ud(e66wra`d#tUqi1^Em47x{ZWmcG#<(U>4 zEU>&7cR7~)xe8tdWnM|M0DN*EJDN%6Yt4@x6r0aHkK6BM1 zqDnFU_W`=O(p^`>Ty>eVh4}b&^)|_eHx_m;g?8iikX(wj-$?RqW=6<~I_&Ry&o+^% zGipN8d#jK!45u@dFSR@5hul>&S2p>8okjdo$o)sgbSKc{_S4J5M zQWM7WL}!xsdvdP`6j~b{Yed4md`iH;HBtSFBGpXbad9)E>Ux^}Tm4(A#1n+)cw~CU#EyMg(cK75B^Lpks zbEO6NUzc9IwgX~-5@%I-vPBUR@7ozQqbfT^&XofRzqOnj{Nlv~7BHrWk>vdZ70R5kYb#s4X8o)$f3vNmZ;%4z z>;*}2)nAyrbv{XAc10BzGKuK#d;Pm=z4usV;)6xJi?|ZAJAB+(#?4Yb-qc4-KbWo{ zPK)2Wo7`llZsmm#4LC5PNPZTXCto)qE{$fU_BVritptMWprIdzhM>>N$TR@nGBRzH z2_G*9Sh-|ku^6FD(lYPlRq?^BoV_byMKm68d5*73To$FNWfq6nqq0aH9B zeWLFvlM~Aze%Qw)=w%Dc4_1a&;5IPKi?Enx#r&xsHE! zvxMCE^;0wG6H%o66StBtw@u^4UaZVKPcrH=(4f(bq=pmSxqai3W;w;^X>I`sh zOD{CjC+Xq^T7{p->+6Z5h=>#^bmMEhm3f&#HP!gp_5Rh_kbNz{2gr4Eh`l75e0+q-)~4E35WmFcgGt!1&VA=(Q^fliLqD@DNg3pm z&FHuQe_;D1GxL+;y5TCyYkcsyo|jLop3`J9#MTVy)LiUYe$;`R`tZw2JC4FnN#SK5H>3dxLNZxWqkWZ-}qx>VcOWSnV%eTyjUQQ z{WW%?Sh~{kd7I#n)Cr5AEP9t&P?m)SEWtPL?6a52C3tq&mb=t$Sw zB%l60*fBS*LREGDGviFt*|OB!*`fR8;fi_7vU${2eOvqdwTxhnxT|QA;U*1uVRZsL z&A$pcn0Re!O*3(&KED?ez4qPz1<8s~XVHTs#nLtQsXROBeqxItVPD=^`cA8gn0I$u z14#UWy|dWHVYESpF6gsHbj zi)_`px`mM08W0^|jD$?m@_b~p2mZ&NPzv5=Oq?ZLt^yaUgF!^Sih8QKj=7b%3r+On zdmPsczyce|KB-B4G#cGnBNLK0w*Tz9zWlG2;Gts?xcR9{119+|;d^+8qcb|bipxr2 zkU+0Km(w@eiRpZNR`rtfi$2WF#9>qQ!eIKSZ3kPj_b}p)n@=1b=86Nh=R=5`O(1h! zA$VCdqL#JpOT%HWJvlb9>JsJG;timP8Bd~{hyb4_`Xs~Exkc86tUieIi#Z(o7$7&- z3$dlr+IC9G7M)rw$QTMMUvquR)-Q?RXG>?1s{Q7j&e?pNY6pEeamd8wpbOL5+7*XM zspg(7HE!>k1Ah+!V7Bm#SCa1QPy%KiI#K}t0A7Eh&&kfBke2! zVSkO4ZN&nOFfUK=b^0pJ*7?MCeMMEMEX&6jc}vLTwM}4uOP9aBDglnGKL1n2Yvt8k z`dT6bQ!IEay`m^Oz9KerrJl(&Zaw+y93~d+3`{?Mz>C5@3o6+%z@p<+;B2(!PXoox>P}}*R2FH8k)b|U{Q&h}HK#Qpyu>}*THRiaS1EofsizHA zrD{-F`1+3FCApVLrJ`h*&VS0u*}R`s zexW_sOvI11k+32q{+5Q=|2!N+oVO%Y0xyyj-7Kv~p4ONQ203A7k-yZM?82#5i>pwa z6sXJj=Dm3L>1il_@N^I9lxB4pch$2N5*(h`0QVOXwSZ1|-MM{Tm{4u%Au&k;A|9H_ zqBn0AJVI2(glSSfF-UO69{49SMH+vJ5`HcZmE9Nm%-jB8f`7`=K!aQ=)1#7epSPRrQrF$b7I84!RUMB=@d1ODH z5m-Z`$fAdfXI%p5Wh7l47r|L215c)i4CZ`O;2SKFl>KXM!OS>pO{9q}l0MS-BQU*W zcd107YQlBx5DwS;v`7Fv(lG+APG0ct45M~FtDXY`Lj6i>D`$QSx{BtSnMLm_x8IJ- zT@CBIZo2%#Wj&zi`bF7_g!RrF4WIW{w`Ju6rK2U4(c(#P-X&1k&B;2TO&68ce9C~z zeKDGc$8*Ptg~#w3jB2wK>W~WgT^39ZM?US2j(0vtXviwmykP1>!(@7Go=eQIKt}NJhe+JyEkLK_6M>Lh-{|I;157jv#AZki}IQ_=< z4E$uL!@j#7Y<+LwX5!aN8tgQ3j1QT6CNC7VZ=cnkjs*sFv=S+0xL$sX-a$(Fbx|Bj za8%c?YB_>$L!X!2?6cf%i7JtnwbzQa%kT`{zHgFqnRjAJVQp`JLqw`9IV;?~s?OUg zq(w@nBw_`n3*A{T(*@WdptN>_YHyZ7J0HFIY4GZbzXkB8bpuI6_TBNiQ;b-BO^}1y z`RxwmbQNWeI|u|ni4Kz2Tjt}QUHAdMa>2LmwCl5kjl^igiN93D_1~!PAnvL$?`JnK zZ#}g^ul`e#gT0{x?NN=}w0_;8<581= zstq{M`|-A540pq=@A}g$VPA{s!d68aA=twk|LIEim z@~@|(YPEID(WsEQV{+jgKQ~SK6gozsNDGgIegK)urLOj;SV9Ie3aK?B4=mxb>^NTM zap$#9S^PqXjzt}{Vt9AkB*|*CkcavChq{W>z7{Ev^^OS(XJB}@)o9vI0swO-{z(Pi zAgb@nNJP^nsws#qZssjUUle>eUcVmANP4DEBf)bzuFEZlP#^E_7yi3bJyZg*%mt1a zmk0E!o;{|#%4NJ64b!3JnLrb2H5(s8Py2;;TKc237)rJ;j6LX&&O%wK0=mlFz9f0n zv0SE*tTOUZv5Hi`g9N+{o9f=7yv?&H8TFhRXRQ7;OrY&{X7f9_NA?7r5J;26{fu)O zXVzSPgg;5PsMA5qy=@4QyyGmH6sdT2y)ZX4^YLzCCt!4=#A7o9Y8o_3P3+fgI4t25 zZmHm8rC$VrV~dQ~Ihx3NdEpdRi?4cIg%lW#-M%=}TC3NrjB+Ft0)wG{ocJa)x0*r7 z($N3O@@mtG8|==9tdrA!s;IO3GLJP@un=|jL+lLre7VD-gO}8Ka#4;y@vcM1ozn~F_Ok{mJS{-?p~rWqopVsT<&YVPTAIoQTHr5%%OGkzYr$R| zr2GNZ^OJSwKQHIC*Wg;#OOrC6UPSmyhtYK|InVjqsyxOj{QFRwO_xLH?Az(>#fW9# zTxdKx9`?vsFveo>4hFyslKg&X5(GKAUTPeJ>b_jwpQm7-;J!(}yK}AOO>-D3Bk5>H z5&Ko;Tys)|W@GEcfF4FpV$(;8ImBnqUdt<1L6keg(*X63$~YgfBc57i&>xhSX&e-Q7$8@n5(9hg6C-lLk zJQHfkcU8ZixL@_UHjaVA++DTcYX0ED@b`j01dJ=qsb`xqL`sVE@mzrtGw3CMf<`3Y zh&iRGcjn>gi}?E1A@hTsA6}oa(L5WIQcBwLAm^(bVeh|)VYlR?93&S3vWxk&l2JKL zM);S}s}XLRC_-m0G|ZzYJ@&cL>!GgfAx80W+I~z5 zh|hoE!~gG{IF+&=DvYb@U5l0L64q}bv+bKU?9>04v`*Ws?9k(OzNSuJB;cgyR96}g z2JCF~;VYQly(m;)8n9Mu_NPrb)fm#=Rt9EeJV3fXKfM698$J z?+#|Xy(YQO_c$ECai-!~<_3LWI9D>lFxB-PtF-fN$bnceEAiipEpJn1R*Nnsl1$EI zI{6(gE%WRFtRl)cQDVZ#F-#Hzn(bQIcHB7Wiwixe*J?W|)+>%Hjz^-U+xVxF;BAf~ zVT)d}U^`nXoqpfS$0$^%Pzh_`QI{72aSCCy5qi0YDpAF?o@=yzToC{6dC^sm{~jo` z+iy>t*z0v*F;hu@wN(Y_+fX$prw8D*1gB+*30U81k(>EU9=jCyLK|B|hF_AX)#sU8 z^7V5TZmjC_3X|Hkq7M~Zfyiz4R8p4(T(bfX5o?0YtF^akYC4PQxma?0MRaRRngZNH z`h`4-AGhF@onVwY)Craso77RRWxkS638+Xawr%dqtJPj}Gb|~)pXInqdKO=vTr#x= z7)@yrS*w3Mrq7~r@C#E5k60rwN#B3|I9M}T-0072*b!*x*m^c|f(5_(AV3Ol2sb{% zgqZK~$4@zwF>0=qY94y(m3!v-%vYv=-pna$zp|?Yb?zDU#>c0~3iazsTW9=hww@~B z*4D@O21>ZB5=7MuI#L|Vx45pK@NmGC8)kbgqfom&N(e&BFKe53yJ&@`GX@!|at0xD z0*dBIL-)ippzzIb;yaJgQ@T=Pm>?t*8m$GIl5NR zpzD-qeLJJt#B`Vfx`8Ty+$R$6`gwZ&5KJHfTH&LcD0zjZp7^zFM3c)h>ez8V%t8yv zN;#YMGTX6cMj||*BbPhJcI^*aF;V-^ z{cifXRs2&XJ95o(N#OSkP<&O)qAii4ln8Ob?JPd1_p2{@E+g!*Sm51EGq0QqDi3i~ z0IhU}`vg{`IH*FO|n3w$4ZyfhM9~1^P$q)x;-dXopCa?itiJEvncX z1v`JK^Pxt0fr?d|ZAC(PiC#;=wJO34TeTxZ#$t0#>^M?EO&SfPqGr}U?TZ495Rb^$ z@vio#AbvBF#H6wlYA0nZMhmW|yWoVOu1 zvwHW`Y&y!hlVDHYog_Auf(@VR{^J^Oi_TxDAjHxE0s2oyTWz(uYb}#~PwX8T2prCM z`^RWJBS%11F~4N5hL*>GzPjp|t(mezKm5AA%}&}fuNOb0Ue5d8Y|8s=>YHDV-%Ni-m%Ixk?al{ z1lkM4#|*Oco8l@S_Xs2W4l8D9vJQtMRl2h@Po%hMZnxasT^o@mUE*N{7_GO{W_j{s z+^=9D7<*?wu=CHh#0SSUddA85t`i)y)n($3Wt~4AYVB{nz43T0rOi?>ww8N@56(Nh zKT8`#71r)#zVAQuh&9lzA|%wG_T&N3%Xq7I=6cMTi`4Tlbl=h zjW6P|NYnVIuDuNrcM&cE1tDH?LguM!JRI}goM`KwEuindlvj{l=fr7WSc#YSlfdBu zF&38;H^o41SD}Ss$DPKGY`O>HtPbw4Rx> zCg|wjO*e`Dt^ZN5?#iPblon-QgTf5|QuDv@R8RKn{pE+Sc!8LFYwkd^ZG~xGYm^BT z*>!hqhWsd#z;lV;LCaK#L?N*k7MYcThfb%vSw*RncUWr&E0XOXK%Gmt^y#YsJw^5= z=m+SNA!v@73C$0bM*~z9jIJOJG2}ce&#G>)LMoNrQF^m|6xpNguCu|SbD~&iaVX_i zQsm+BPsvVo9IIc{k$t+C1I7_Go@2eC{u7ydgHgp5T2W?H=|G(f{ObJQv((#re)d+W zAF>S8koV~G{g<2>bvX7Wy#MV0-GltUuw zURVUNt3=FqE1?FM(Z}%$qDbj#=L>T)E#3r9Vj1i%%a*JQgHhuRMOccvNCCZZlHY2@ zZ=Dl(<^ueXw6H&1ypMFVk(>QLu{utR9j5O``|nN<#Zw^#D9B*wNUl$q)RAF|a)15h4Zib{jqyC&xIa*^bT5Y|vk z2jd}|+odcih1j2OOL7+n8`r;EK~=q;!o1e@LpNU&Xc-XpyjPB48i{y{4z%NB-P~@u z^B<2UC=2-g3jqA5<8^<)F^(d2Gh{8N#R0*lymQ;Kw?kQBX@=r`^aI;Yo_Z_5e?x8K zfv6&_AKzcEpzjkhsJ!O<62?UG_+eDNfKqc&-#YPnf}B>+9{u+vH7EQ(_tO402n&8d zWhloQ`!qa@e2sL%M!t_aFG;;|*?sgyhQ8b-&-$H(l_+?CeSUkDKL4c(4w7S3)nD3^ zi)EVd`OQP4mCCR=Z0fHb(1j4-g(GrWY5Uu%h^cR{XSk9{a*0RWP}DKytam~G}U_Lp}w z@#<~I_UTQ>`Bu-R3Fv;`A6kV7sCH{-j$TR_D-$U2q5aK_MKt$PoJ!uHeG_Ddf^OB3 zeSz&P%8n?@a$XT|pk||pMvFz$s(xX?=Qc@s`cQ6?8dBb40%5<-#jnrt6~%LRQs#x? zJUpSUUvKGkm~xMK=*7DRsCTH0D6FPit-zf-rBNE|rHk+9wkrCO;YVx6e3~NG+H{G& z{C^{Mhk)lsKjU{gJP8z45-qf>@zkQKQ?KGX!DGt`Vh1b{#p>{qzwwHU& z%IQKgq?yY0;!7SQsL3PW9AVSVxM*^xO{2&gz!)9Kp})SFMGR?n8IwCRL@au4$9Jjp z37ZS^TaP{G6nqQIwA${k-t4ei-RuC1BCZHq<+ev_2QkXcAu;kNP@i|^eyWM&h73hU zwkv!fE1!tKEzllXh1H=m8%vrS=d?>`SpGD0szG3Jqi~?_o~C7jnvqAt*q6q>?YL^d znxI=<+*DIr{`Tf7Y<%VbSwEWpOn!WSIG|2%Qnqcoiu8}K3GBpZ&u-Eh zo}2_74os29_L_EHyBOBy!P$@xK*%Mpm>7K zDn~snNwmahnes%vRoH@P+g+s%Ok-U@94Q@S+LQM9D2eG7EOTvezagEJ{nde zSs_Cms*A5SF4K6=C2HGB3D3v7@>g(WrDq-p={$M<&hVE4gg}|DoToXt}W?b(0Fb z8*oD|Ul5k)zT00^vmgOvACUzgN3V90E{Awf(&E<(wUxGib(u%~b1w2@w@wzFBK z|ADa~T2srRm<8Kvaa$QE_i}ce_Fvr$uQBP+oAVGsv!<&%gD*7k?0O(U0;Xi7pfl7^FH@9kgKa`<&uYive z#b`cw4_`6!Rq4`cUC0Fkd4Al$$k8K>Ch$@Z2?RET^|q&!<9MY}`y1&eyQSN?hLwc3 zs%p&}%VNiOzV4sjwAWOZ5MVc@co+7G*VW=%%*gUV;;3p6W#3#w3HB38UG`Y18--B1 znyRMY%ZIE!!k`#7QFQ&8CJ*2cVmuBNGCV1tNP?Pmc^ie64#^UP{c2DOp zy|z1KV%bS|(r81OTvR=25a39#OU7wxBk!KguG)z){?%rFll7OTZ~N?8WSa4w-9rh_5k7}=ke>ql`Wj|Ji7O)xRfWnS8Lpr#mR|G71FT8 zCsD%hhxL$Z=1B&2%QLEbG(35*J(aKvJlH|I7z?OiYvnR_{@Wf&PE{TK;fiKZ&$5FA zHKSd{a4P*_TgBv&@4qf)iPceB<%**_ng`ZwrevBNMGOv3)wLun93vD9rDAjK(H(%m zd+9=30J&;X;EA_Je5qvj1`%FtvbmZq3UofC;Sbqcusi325y2-*fSu)b0`m7DbZ77^ zrt~jdwT~W4Xi@ZW0_swpV0kqPV0A zWz#mMB_aL+(bO@@?M5_9pr+t8026}#y>IM47iknYe^0etdeXIh!=$5c_C0srm)F0y zAvD1ZZqImo<>?KOKsPHrw7hRsQNBEYJ9fY$sUf1&wa*iziVW2mqU1wxLDOX=gM)wj zUdXp`w>AmGJy@q*S~*74Hj=x5Szwe&a60Rd*m93@_c*iU_!H1JPeRnM_tMbWoX(0=7_yOFAxqeC zyDUB!uPbecP&;0==ZWtHFa15z=N`#Tqc3nh#xQR)$@(V8VQO1k#uE8yREJEGNdR|X z;t<+^+Ij3r*riiG@x~pfOK8P9?g3FJh-|cGdKd&%h03Om0uP|9(@|C`Q)_RX+%I4U z$d@&GcyAtK5r3_9e4IkkJWTq*Ph&dhLyA#7JPTo+O!RAAWFs?xcf8qYy! zU$9D!=VR2%UxOVQ`kv{_FH`!toq`O5vwnYKn*?O&cA%kF;Ow#ale96!GFKwJq@;`! z@atZ0Ljb{h=wAW7Y4O+g&#OCT2&TmJ^s$$t0+Xc+FJ+7k^C{o-TkZXqe>kL+Top)e zl;4A&#SSpupZ-k!3t~|k-??}oT{Khj2ElAH$5j6BtpG=tWteo9sc?cxVfDMm4cPaP zYzIBwrGDu%`Pqk@uIo(Cf||&KUU;=~5TCiHKvNJwejWd~TtoG5Y6q%~yWTP5-!S7T z=ZB^b4*jjEF=tI2gM@~)Z4Nqh=md!^q(DqIc~2MCAf*1{K$J`bKlHao%d~$PeDbB5 z!uIaL#YJ0u?(^Pvl|I~PAL#=>1f1TnhK(Yh3GP4P;m?vR%h14_;jQH{6lWe6-UC6X z1KBIiuD_lVF9%WWyy77nMxXAq{#DL1N$x*OYz#1>2rY6tV$Bf#Wgk$#=Zb}#G^3{i z%kHAtaf=T)o%kf^`rL8~3p0}i3UQn|0XMEoz|imizs+%sly}XlZAbTLj+^QwTZ^LP z$|XSEGVTFKh=B-?iK|bfj_n7GYT2V;@$90fH>olwZfbN$D@p5QHMx>Hgd^~$om)il z*&&;^D~=E1@!yrwJ!q=J)alpVAY`mvIS*VN@wGcIt9awAf&*5%Z7a>Fl%l&u)vh`w zqQmYa5A<;CbEk$bSMhY6&1@O>AT~tOscs#nh(1b2)PGY(#q6C`7*O6uJDHswwtG&R z+DkM1&0qWV``?{oHV$PxLE?#)2Yq0~1r_k_b7ifr(<5xDS0kW%yA}I}DS#HvE^lZw zj*!{kA=wKlYbw88Qc7wAe`+a|`N48S`?{78Tx=0@PmC{%h@0f9Ci9>{$Q-Z5q1Yjpyyuj-UDRK3n_$3Yu(3ZY5pG4 zoD*r>yy&cylyUmX+zd-o4!f%HmrkO4Qem`@{A{c*=O}3OtX)t%X9IIuG<=4p=$_DW zp%`-_SeSlVN;%u5Ioj?rGih+>)@k13I5Xl-??`kurZBh|sEc)1X>PH}Qev&|hjTzVOJVAO#98-c8OaAl?{7TQ?{GY#=lIG_Sq(uX9X13O$}`1+I#*-V zm)8X%V=IK-8jd3&Kf3X|sj+^(vZ$_44<~1M;IJ*@M%!UO*V>$z2e+>T3`CZGtuaqk z{_<7jY8UqD(Jx=?efPhB#5_Iq`g7c~i^o5d9&Ojz2Ph`7k6&%6O>GMN@jJ^G5>7rt zdMbjt=HIX1F2I4E<{Xw;{>^%7IB`eq7UqBL_5JbcnYJ4?PMg@c{Y??ILsq~}b_#e|OO9(RNc+qQ9CF*u-&g(#=-p`WIY*5{2PY%# zw>M1vSglX$U)I zj6KxQn6g+j+ZEle29q#B8=xf3^k0ysvYu7s!NGSNKI%GnGoapsqaQ(2o-Rh-hUU< z9!^9C=%o$r9X{RrO%xCd;1$ve7v=WA1kux1dfcA7=4V4vOZ1*a_}NZtKnx9y_4QmT z-z>+?9^uVSk!7+R#X{&TiV~Ma(UjHFK`eeC*`#l=qg}g`)pJzb=&!@~5lkXHZEODt z9$iE|ZoVsy+;|IYl-ak7s3>QKaF@>%et&_WT*C}e`axa|r}T;r89U56O)c`HkNAWT zd96xdc~RqV-mZW>P#3}~Yp<#}T8=veG%7L*eY>l}?I-;{=!U)Sk-@x>ZLhM022@mS z9fKQ>&$<*TgxcbzAmYT5rHX(0H`iwET}m9cWf++HJ-u|9FOg{lq4F-t11!m!lQLOw zsLu48W{$74hG%%9b2w;nHb;vaOQKRpu07`RX8O%t6)Ecs-z78sc9n!mTPm<|(UQA( z(CIQ>sWAfnIzUQAxp5rxa+q=~mab~0b9+LAl^Io;g7GVFdkAZfr?;8eN(bQ-2KXEa zeJZq$x_WIX-eIj<*vy%@NI7cw1sRS)hE189IOqrCT`=S$VW*s{wr)kxR(2k}2wo)( zmBq>{KpJgp7HKQX_6GVgz%y8aXPB?SudUlYnDXE}?%FKbGec5uqXXK8wpvA%cr8gL z_tD{kgl(?w%n2*Gbhn6ac(_~~~#;P7V+qLvdxxtKZfakT}M4kzvcS+|Ny<%JEwm!aY~ z?iGipHkoeCbcS{2+|qeny}%K1;-)YVmf`6Tvr(v2n6Ydk=k`K&QZ1Rw9^$A%L%;dd z_N#S3Z&k*W;uJRVGc`+tk6O(Dq28dyrNS-tX+ghcwlzVS& z>}jF6gIjV%-3*{~JjbhDLRTIZ-U3ocu5r6#*fdSs;%5~VF;tL!#8H>}{~QndC;v+h z3US1MG6+#YIdQP4DE!J-%IpVv8UANW^H%4~DYm9d4|n!r-8Hwh_WLV|(`|~sR$E^W za9nkzHZ|NB7lM6VTUM3W0d6gjq+%?6CW&5e#G;)XKN=Jjdt ziYui`dDFF*S^C8Ux*)T;Zi<{W$5&^xuq9+IjWm|dO@)oJaBq@R#nbJasDg-!#u8_Q zuPETV9-EypdzI-{Fz2U5UYf|u z<9#L$EZjE80Phn|m}92#q_7&BZk@wUqLB7DDdR)EN zPW`8dHT;bto^9L&E0eym%Pc2#3Z5sua=?C#?A)ujUE^IH5_$^hYGs8_wzMn_;3cOwBH60O21w7~=DM)nP2ZQXv7bLB zn;|C-gkejUy3H)YLr@&{sEXU_Ke1_v>+KaAwCtj=n(Th!s9Xw}b(vOw2iyf+==YIUy+sjyOxon`EKmOKUhWV)lZB3xgnBfYB?=70c^oyaBTGI=5GE**v7` zQM&JRk$~|KBRy*vE@IN^0_Y~2hv}1I#NC4+4eX-XBh*6NZ8WOJ?X7dlW>US}lI)b< z1NCBTxZOWOS)r!uyg3uI3~hju;I+J(y5g{uO4IK_2K`>Q1J_ePd-iC4{F6G_bjYH= zFK;x$f#@1^W6bF?>~gZ{lPgC+BZ{AN$wNQkis|O>+0ZtuMmM`~^t^ zU(wrfOok>`dgE|{RfYM7<1G+)y26;vZ(&;~)^%pGyIaOe$BP6n#{R;xqHVFfwR;f2BI8EL{fS&k$$~ZLbgh)!`oX7(xygOdNGzoyw`Q$=Qr}0O3m;^ z8!!zsSdpYxG)uBc5Ukz7$dH1cwHB{f3l5rq_>R))-P5tSs(&9F3y{HcXr11BnlCFn zN6z-%DNJ=7)E+JLg-K)aHc6-5#UROnWvIy+uYLj%h>dQ~^1)Z`9RbOc+J#ji6_>&= zvsN=v1j1k%fSvPuulpj*h`xxCS^LoH{$uqGxyPz83pEt%(kVi6V_%`6)|qio#9 z7bI|W#7Us@Pn1Hs-892=Hr?xCu0di4R>GqVol)cbg_$Q(pr+QeoscTzcEvy9zt)Cr zo@Y`NAJmZjd2%7*(wTwD&8!b>-v=Mb&-|NPbAE`w5y*G+b}4zwq+D|cHADc*u^9%H z&06e-R5cWKAG6wcBb1T0`eiO`pH0SYDL^0~VWFIP)p=Z9=YfRG5_3oRqNFr#_2ld+ za0WL3vl<^oL{OC7j%=+?x0~(ECX6T~G^YBB;Nd7)cwe6>Z0i&}sEXyre*Ps{Bft}fcEWLnK{_>I z=ivr=bPh zXRT_ox+@!mDShy8BYFk0wHgc7u;hk9w}N-)76XI$NJ(V|bc9*7dhxh)(* zZn`n1Rg@KwMx{$RQPt7fV#8`+`NCT}0o<=6LYls5WT2};B1;{qUnb={Y*W07 zmm&}pZNA=X2y?q>g_$$4Vs{7~o)6^2iXMB3A!Mq%nlUiH|K> zyCZ^#qzo${p>^=-ihq1I*JwWI!zB-{p8L)+=2IE9YFCE-+K+R(Aoj8S>gXd4B%;+p zt2eE)eVo#kB#tn&$E7J`OS_TD`YvCe|2G#~0eNlfco?-S?1UXYpLNU8O{NB*L=~Bi zmxlECl@(Vl334T@>LU8w2D>kbhUccBO~Vm-i>>~iey7m0-bsxUBj`4DY!e-eGJQ4a3x}qdR7jX6^S+gt5BxX(BI&=23=$ z1q$^2ejtOp9T-zAls7;1X>{!Cni9iNS+f-)1uauv)#0w4Bfx$M--E7tl8;rVW@8;$ zIJZz&4y1wvKNqCQ<3PyolasU?^+H~wimCn( zL{_B{>6x#Zckkt`$r@K$p`mpKCF*&Owe`*`6-0RB3*E+$5Z^EO%z+_VvPo^*fqdN+ zMqxpGNg$3QNVRs@$vglJM^fkbGw$mBZZYEI>=z?XT&p400A^@p4NGG%E06b|^ke)E z46CYYvBG8m5oHfQh`g_rq3(T@C)73hoK(cPlFN`gD92x)y0}bc%>R^>l3S;7*C<{` z@c1zYZz`qBOo6jjfmdNtgb1?loO(UCVG#80@bhj;weG=eSm`~CZtG{W;i#t3M{}qt za&w=GGs*-}R>&E%C)<;!D||jjW@Qp=O~ZAxNx*$;DS2(8!fNW5`crJaH1%@{23UFe1lGM^b#*r%sn zufd88xK5$A!YP-IPabqj z>2+?Tl_QmXTETb5B|Fm?7Ud+@(wCR#_XZ+ov0*oTUus0gRE|guS?K+-j{zl|aIy%o zt!;jj9}(ss_|2I!lpMUvEIZ>ypG7Hi?5CsW3A&My`S82*l=%W+3;oY;95E~`_&Dg| zqpWBt$mO+bpn})(3Yp!ee;IZ*nOs027^+T?4g*WU@ZAZf!{H|9H+G-JyV27)i#rC_ z3H76tmSIZwU3u;yqz;nvW^7Uz4p!@Izn|WCG`S>{h~fNtzbL_ZPlaGtndU7+c1g^D z&c)cbP`TnQ0^khuuA7;b6B;2)t{ME+_t}WeXoYTQpF$8ZgR>l);(1Cp3~LGp zG#%F6AXB>RT~|?WIn1+?QQtM!{N&h563jRV#Ti}kCE??By|=^m!0}6u`)zJ=UR+uj zqQyS+p`WJuxtMzeDL?Ba8cZKI%o);^n}F6aN#)ar+M}h69ktgp-k8*q`V|J3uj*-j zO9WRn(2zg93cmkZqe0R=Uf7Z3pSA#7Lc}>5ex-$D{VY249u_Ml>Bh#e6d3-J<3d-8f`4!+-~E; zWhQ0ca@x2(uE&{PP%EMlyp}7B?6*R02pW62dyr?jLaEG?bx**p41HT1xIL%u5cJ>mA@LmlRA17DhVGCA zcJ*iCSi9@o)EOI)L&j_>A@z=#(NU3P{LA=KiSc#c0n&`Bu)Q`tMqHSxVCkKC)u_E) zW%p5LWsLE5j7V|KuzOzAv3lb4Z9KxoU~JRxNR*YJKFa3DF9B{*?J*@t8!yh{BAxwG zgitU}$-w#LMA7DtCa8~B)o>!M`-auCv<0|D-PU$BE+eVCFRQc<|4*(wco4&Mkpj&e ziHFq%LY^2eKB+qb6IHO4%U6?{z%G3F6A8Mt`*L$ImX<_acb4)u5r4Nu^cw9v|A)EYZ#)vN+Or&`Bhu` z%!w43ebib355z>O$V1(tt!9KqLIY0puJcIU|2R}23S&-yZE#ze0q>ZrNwVPEJAB$T zFE8g}3R6`WTl?I#;+^g}XY59#dc9nHh)({7F9NW)0n7_k!p0V`>nlN7MS64CZ?qLZ+zn!X!Prp;SuvG%Zaj20Ly zrYgRv$HVJRyD9Pct)i;^RAyk#;@EWQoV}cW?KpEtW!R@pRR_Ay9Ah`q&SmfhWd-$* zCX2zAXnZEF>P%M1vvp+@sCd^fW3-)R>|bq22ty0g3T&{;ey>#;{58j7?HmJI3y*U! z_mYFfFB$lUPFpLjv2%JvlC(3Y+WfSr?yP5Y#ohcHoN*`Zm0Xw=T!f935g% z?z7>OJ$s$JOMQ>FBb`%9x+*>qtpUGHN}j7@R_Kwm5z<4LtXf&{-oK6~7#EtRExHz> z0zfVa=>mN@qdbk4@009#{D4gcn^ltt&dzMk*Xow24iswpEG|HcRX((_`Hb)ff+xM$ z?>{`l*?H!QkB=jq@vjP?IX$F=V`CP(;{i=3)0yZQ#!C|;!i+6Zni!z@WD|kSeTEo3!jLJ$oGA&;`8=h@0S!{_n3hQ~>TkjC`)H}qY?C`%} zK_+zTJf7?T=YFzLF;4MYabPUYLW)P3$ExLK+d-ya-dCU?_9ps+P1t}PsYSaB?i`M) zVa_VuJ!KX6aanHmw5McKBZ9v8?T#gr^V8yA#U7;ihBjB3>bv@|*SpuLf5F8-DBPD; zaDVO}L{-hpL3u43!?-~0VHE?-E_G4d<*A5@|G)Olt!D3{_6jhu&m7?}3o`5a!e^3z ziHNrlBY@N2IlTDuNa9tOcOF--efw_l^T0KiLym_&srou#T}36G%N|voLg~pxU_FBz zUbZb?^d;S&hWdbDFsy#rbPg(0+#7XMTQ-0z=D_(LY)f7D)MqI3Y`fzJ{_$$0s~%6y z(DKnwTGg5EDnZmc>@3|vXlb@668zg_`?&C~H{mzn%LMcHtoR4cB zvzCkYr*iyF0v#zZ4DcQ|jM6wx^24Ml(rN2y*rg zYtHX3B>T~a5iPw2;d4_8k`3rhY#~KG$e+(%^qkC+aKUl~WCPB^!DclG>76zhZlx3ynGY2sO1|M0`^ z7vuHlbY6_PC!)b|Tmu^y;<=*1=(57cRd<6wpMXmsF;|iJH&WSa(@Ht zkU|mmHW6QbZ&Br^!0x|%H!0CBz(N2xGN5A)TqH6x;6jrGnHujngz35UQb`becI;oj z0{BOj&5|?EzUw`kkWuJ(6v5sUMi@#Ym)f@jd)f3B&+q_0Maoe13Gur~UUzb4f_k4H2_M^-wmxZ$cm-l}`P6rrOxtfW2N zF{7^%|IG0*V<`$-@MX)T3*W2%;-SvWMP-$Gqwp#_AgDnjq~H>mMM(s-ob~&VFGNh{ zcLiBt*vjTF&r>K#vJsk`fmBMKm%#jXG}ttNy{SjOS8>zO^6QD_7p_yG9)c|>YzD7Z zR35|quex?UPt2oYx4v-l>t#8i7*X_Sr@ z(qFSzIP$(ti2BVRU5o2C(q7i{t1*C*IrtD*OvxR)SdY? zv0gCxt&$n~G;pU^!@wc_tF*CQN5dU(S|+`AhM9LS@C6&iM&ebb&^}|8$oFDI&&&B4k^e9 zgHPoPis(i!6l(N`pd}Qu%$2_aB!6=?q=&u=kcT-)*M)xJGA`5=YJjKqk`37B920k+ zbk3Dh=J9_T-;7zqwPXl`oZQTTWM^~za+6g69Ci3ibh1PEE?du+tw`l#s-h3Ii{m34 zsH>>v4wc5#9s}BPR4oWAG|7EG?S3aIWwx#)SvK6bl-_y>8tkPHZ1~Z~T!w`7pACuc zGtYp-+@h0`1XWiNZGlXQGE5KLXgxHgiwGTD{V*G6<<}@r4k)RiTYaTTWN0PYdRKQ(M00>@2nw zofmjfCWn-ErNVUa=U!lE$)@R1{V~tni(=+S=Tu@mQOfluN>tdTuXSx?&WIXOyMxGZ zd8BMyHZ~o|4WYj@7mrF}OXN2?c)?cHY@`v7T3m1Hq6A~4V9gmYx$Wnj;&tq1*XO5LrajZa<@{FH}=33S;*bzl^$m>(6vikS=Nvk_8!Xf zD$qd$_%+{;S0U>C@;V|u`B5hJjOo0!k?Z2(i%LL`mmVwPP8V%ALt@a2Uh?QAm385B zD!Ab*`Qn~6>*?ez7pZK8wvOz{w2y@DiFf}eA_d+08w_4K86-@;W&@stRRb&=e)e*( zhKt|b(YInA&(_tyuA~3A`)ob;+;bOiyz$0%4(sE?pZ)A-f3v>9eX!QQb=&>O_|{T< z^ZVcb{vWS@=0C9Z7r*}XuP?s$z3*LIyLRp7OO2j5#4bt~(ZM;W4%A_FuzcnvWaIB} z{Zw)p*zMU!I(%Z7>BKQBo<82}c>BqlAHFU-T^HNj#Vj9KT=sk>KfL^0U_4#UV#|xn z7}mH*4=~Pr=<(GrdinFQHi%h#zHIf|I({}7Sa$h;nS0=>1s{F*_&N)9;4#?j4L*i- zapM$A9AeG4KTOldR~`C-i{Rj6u!q+Ne)a}j*mA%j7rt}d9m8i37+A48Bf4^dvvy9^ zTwMNq?Qs{24mJ+HI1Q4`o}Uf zTDuTk0(OFf4vvm5fpq~~YVo>6T@vxEVVYemYlEMd{Cc3w_UXG=bmDucNqD(f<0D;M zYaFEfafIh1KQ?Q%@U^bK`VbE;cDQuq$p=S&dBD=KS1X-(_G-aH?2UNi6u-QzNu2x% zeR#9{;{aOFv_CVusQ zlr3Mi-wDswE3dqA@#7!=`1H0U9;luS3`_^j4 zpRT<__{Mq*UcB?pI~U*i&UY^EzWeU2DH_lrXp|<_&<;Yw>0sw!TC>rc_l@5l;N-C; zcpc1KPfoUmcw*Vhb^3O(&2VZWanr+pt*`CIel7pECimahDJ zX>`uB_c)6eNA}`>-JdOgQ+xX9r!Ss;_F4VzrFQY|yYK$POE10T>)VHGcp!euxV_ZY z>__!IYg~Kekw^Z1{bzXoY^`sR_3t%ZzvrHNlYa0bf8+}gDDIXY?)Y=1WZ){|iL#tB1iVJ4XNj002ovPDHLkV1jY#d3gW; delta 51919 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 - + ascension-preview Created with Sketch. @@ -38,14 +38,12 @@ - - diff --git a/public/assets/images/boost-preview.svg b/public/assets/images/boost-preview.svg index 4bd819b..d7ad3b0 100644 --- a/public/assets/images/boost-preview.svg +++ b/public/assets/images/boost-preview.svg @@ -1,6 +1,6 @@ - + boost-preview Created with Sketch. @@ -38,13 +38,11 @@ - - diff --git a/public/assets/images/camera-preview.svg b/public/assets/images/camera-preview.svg new file mode 100644 index 0000000..baaa37f --- /dev/null +++ b/public/assets/images/camera-preview.svg @@ -0,0 +1,32 @@ + + + + camera-preview + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/assets/images/camera-test.jpeg b/public/assets/images/camera-test.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..c47c27006ecd78f0edafd7a4586cdb0cedbf8aa9 GIT binary patch literal 7780 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 literal 0 HcmV?d00001 diff --git a/public/assets/images/docking-preview.svg b/public/assets/images/docking-preview.svg index 6078e93..f632f62 100644 --- a/public/assets/images/docking-preview.svg +++ b/public/assets/images/docking-preview.svg @@ -1,6 +1,6 @@ - + docking-preview Created with Sketch. diff --git a/public/assets/images/ground-track-preview.svg b/public/assets/images/ground-track-preview.svg index 455198e..e927777 100644 --- a/public/assets/images/ground-track-preview.svg +++ b/public/assets/images/ground-track-preview.svg @@ -1,6 +1,6 @@ - + ground-track-preview Created with Sketch. @@ -31,7 +31,6 @@ - diff --git a/public/assets/images/landing-preview.svg b/public/assets/images/landing-preview.svg index 9224221..2739820 100644 --- a/public/assets/images/landing-preview.svg +++ b/public/assets/images/landing-preview.svg @@ -1,6 +1,6 @@ - + landing-preview Created with Sketch. @@ -38,13 +38,11 @@ - - diff --git a/public/assets/images/map-preview.svg b/public/assets/images/map-preview.svg index 652947c..d6ab915 100644 --- a/public/assets/images/map-preview.svg +++ b/public/assets/images/map-preview.svg @@ -1,6 +1,6 @@ - + map-preview Created with Sketch. @@ -25,7 +25,6 @@ - diff --git a/public/assets/images/mission-wall-preview.svg b/public/assets/images/mission-wall-preview.svg index 941f094..9591664 100644 --- a/public/assets/images/mission-wall-preview.svg +++ b/public/assets/images/mission-wall-preview.svg @@ -1,6 +1,6 @@ - + mission-wall-preview Created with Sketch. @@ -25,7 +25,6 @@ - diff --git a/public/assets/images/navigation-310px.png b/public/assets/images/navigation-310px.png index b7a57fbf014d0194b166e25c43c0b971188e8b43..dccf48af855fdf3126c0a9dc46416c99a44f4b64 100644 GIT binary patch delta 63870 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 - + navigation-preview Created with Sketch. @@ -25,7 +25,6 @@ - diff --git a/public/assets/images/settings-preview.svg b/public/assets/images/settings-preview.svg index 4def653..678a06c 100644 --- a/public/assets/images/settings-preview.svg +++ b/public/assets/images/settings-preview.svg @@ -1,6 +1,6 @@ - + settings-preview Created with Sketch. @@ -25,7 +25,6 @@ - diff --git a/public/assets/images/staging-analysis-preview.svg b/public/assets/images/staging-analysis-preview.svg index 0046281..ed47e01 100644 --- a/public/assets/images/staging-analysis-preview.svg +++ b/public/assets/images/staging-analysis-preview.svg @@ -1,6 +1,6 @@ - + staging-analysis-preview Created with Sketch. @@ -26,7 +26,6 @@ - diff --git a/public/assets/images/sysops-preview.svg b/public/assets/images/sysops-preview.svg index e0dc9cb..2b66630 100644 --- a/public/assets/images/sysops-preview.svg +++ b/public/assets/images/sysops-preview.svg @@ -1,6 +1,6 @@ - + sysops-preview Created with Sketch. @@ -25,7 +25,6 @@ - diff --git a/public/assets/images/vessel-overview-preview.svg b/public/assets/images/vessel-overview-preview.svg index 2c0082d..4482227 100644 --- a/public/assets/images/vessel-overview-preview.svg +++ b/public/assets/images/vessel-overview-preview.svg @@ -1,10 +1,10 @@ - + vessel-overview-preview Created with Sketch. - + @@ -25,7 +25,6 @@ - diff --git a/public/assets/js/camera_feed.js b/public/assets/js/camera_feed.js new file mode 100644 index 0000000..1d6e46d --- /dev/null +++ b/public/assets/js/camera_feed.js @@ -0,0 +1,111 @@ +var CameraFeed = Class.create({ + initialize: function(datalink, options){ + this.datalink = datalink + + this.options = options || {} + this.cameraData = [] + this.selectedCameraURL = "" + this.selectedCameraName = "" + this.initializeDatalink() + this.initializeObservers() + this.initializeImageRefresh() + }, + + initializeDatalink: function(){ + setInterval(function(){ + this.datalink.getCameraList(this.updateCameraList.bind(this)) + }.bind(this), 1000); + }, + + initializeImageRefresh: function(){ + setInterval(function(){ + if(!this.hasSelectedCamera()){ return } + this.options.cameraImage.src = this.options.cameraImage.getAttribute('data-base-url') + "?" + Math.floor((Math.random() * 100) + 1) + }.bind(this), 1000); + }, + + initializeObservers: function(){ + this.options.cameraList.observe('click', function(event){ + var clickedButton = event.findElement('button'); + if (clickedButton) { + this.selectCameraAndHideList( + clickedButton.getAttribute("data-image-name"), + clickedButton.getAttribute("data-image-url") + ) + } + }.bind(this)) + + this.options.showCameraList.observe('click', this.toggleCameraList.bind(this)) + }, + + hasSelectedCamera: function(){ + return this.selectedCameraURL != "" + }, + + setSelectedCamera: function(name, image_url){ + this.selectedCameraName = name + this.selectedCameraURL = image_url + this.options.cameraName.update(this.selectedCameraName) + this.options.cameraImage.setAttribute('src', this.selectedCameraURL) + this.options.cameraImage.setAttribute('data-base-url',this.selectedCameraURL) + }, + + selectCameraAndHideList: function(name, image_url){ + this.setSelectedCamera(name, image_url) + this.hideCameraList() + }, + + hideCameraList: function(){ + this.options.cameraListContainer.addClassName('hidden') + }, + + showCameraList: function(){ + this.options.cameraListContainer.removeClassName('hidden') + }, + + toggleCameraList: function(){ + this.options.cameraListContainer.toggleClassName('hidden') + }, + + updateCameraList: function(data){ + // console.log(data) + var sortedData = data.sort(function(a,b){ + //the flight camera should always be on top + if(a.name == "TelemachusFlightCamera"){ + return -1 + } + + //otherwise, compare normally + return a.name.localeCompare(b.name); + }); + + //clear existing child nodes in camera list + while (this.options.cameraList.hasChildNodes()){ + this.options.cameraList.removeChild(this.options.cameraList.lastChild); + } + + for (var i = 0; i < sortedData.length; i++) { + var cameraObject = sortedData[i] + + if(!this.hasSelectedCamera()){ + this.setSelectedCamera(cameraObject.name, cameraObject.url) + } + + var docFragment = document.createDocumentFragment() + var li = document.createElement('li') + var selectCamera = document.createElement("button") + selectCamera.setAttribute('data-image-name', cameraObject.name) + selectCamera.setAttribute('data-image-url', cameraObject.url) + if(this.selectedCameraURL == cameraObject.url){ + selectCamera.addClassName("selected") + } + selectCamera.update(cameraObject.name) + + li.appendChild(selectCamera) + docFragment.appendChild(li) + this.options.cameraList.appendChild(docFragment) + } + + this.cameraData = sortedData + } +}) \ No newline at end of file diff --git a/public/assets/js/telemachus.js b/public/assets/js/telemachus.js index 7369657..b4519da 100644 --- a/public/assets/js/telemachus.js +++ b/public/assets/js/telemachus.js @@ -116,6 +116,22 @@ var Telemachus = Class.create({ }) }, + cameraURL: function(){ + return "http://" + this.host + ":" + this.port + "/telemachus/cameras" + }, + + getCameraList: function(callback){ + new Ajax.Request(this.cameraURL(), { + method: "get", + // parameters: params, + onSuccess: function(response){ + var data = JSON.parse(response.responseText) + callback(data) + }.bind(this), + onException: this.notifyIfLOS.bind(this) + }) + }, + getOrbitalBodies: function(){ return { "Sun" : { diff --git a/public/assets/landing.js b/public/assets/landing.js index 93e36ad..8462c60 100644 --- a/public/assets/landing.js +++ b/public/assets/landing.js @@ -1,47 +1,10614 @@ -Math.toDegrees=function(angleInRadians){return angleInRadians*(180/Math.PI)};Math.toRadians=function(angleInDegrees){return angleInDegrees*(Math.PI/180)};Math.crossProduct=function(x,y){[x[1]*y[2]-x[2]*y[1],x[2]*y[0]-x[0]*y[2],x[0]*y[1]-x[1]*y[0]]};Math.sign=Math.sign||function(x){x=+x;if(x===0||isNaN(x)){return x}return x>0?1:-1};Math.cosh=Math.cosh||function(x){return(Math.exp(x)+Math.exp(-x))/2};Math.sinh=Math.sinh||function(x){return(Math.exp(x)-Math.exp(-x))/2};Math.matrixAdd=Math.matrixAdd||function(){var arrays=arguments,results=[],count=arrays[0].length,L=arrays.length,sum,next=0,i;while(next-1?e(a,b,c):b.indexOf("%")>-1?f(a,b,c):b.indexOf(":")>-1?g(a,b):i(a._value,b,c)}function d(a,b){var c,d,e,f,g,i=b,j=["KB","MB","GB","TB","PB","EB","ZB","YB"],k=!1;if(b.indexOf(":")>-1)a._value=h(b);else if(b===q)a._value=0;else{for("."!==o[p].delimiters.decimal&&(b=b.replace(/\./g,"").replace(o[p].delimiters.decimal,".")),c=new RegExp("[^a-zA-Z]"+o[p].abbreviations.thousand+"(?:\\)|(\\"+o[p].currency.symbol+")?(?:\\))?)?$"),d=new RegExp("[^a-zA-Z]"+o[p].abbreviations.million+"(?:\\)|(\\"+o[p].currency.symbol+")?(?:\\))?)?$"),e=new RegExp("[^a-zA-Z]"+o[p].abbreviations.billion+"(?:\\)|(\\"+o[p].currency.symbol+")?(?:\\))?)?$"),f=new RegExp("[^a-zA-Z]"+o[p].abbreviations.trillion+"(?:\\)|(\\"+o[p].currency.symbol+")?(?:\\))?)?$"),g=0;g<=j.length&&!(k=b.indexOf(j[g])>-1?Math.pow(1024,g+1):!1);g++);a._value=(k?k:1)*(i.match(c)?Math.pow(10,3):1)*(i.match(d)?Math.pow(10,6):1)*(i.match(e)?Math.pow(10,9):1)*(i.match(f)?Math.pow(10,12):1)*(b.indexOf("%")>-1?.01:1)*((b.split("-").length+Math.min(b.split("(").length-1,b.split(")").length-1))%2?1:-1)*Number(b.replace(/[^0-9\.]+/g,"")),a._value=k?Math.ceil(a._value):a._value}return a._value}function e(a,b,c){var d,e,f=b.indexOf("$"),g=b.indexOf("("),h=b.indexOf("-"),j="";return b.indexOf(" $")>-1?(j=" ",b=b.replace(" $","")):b.indexOf("$ ")>-1?(j=" ",b=b.replace("$ ","")):b=b.replace("$",""),e=i(a._value,b,c),1>=f?e.indexOf("(")>-1||e.indexOf("-")>-1?(e=e.split(""),d=1,(g>f||h>f)&&(d=0),e.splice(d,0,o[p].currency.symbol+j),e=e.join("")):e=o[p].currency.symbol+j+e:e.indexOf(")")>-1?(e=e.split(""),e.splice(-1,0,j+o[p].currency.symbol),e=e.join("")):e=e+j+o[p].currency.symbol,e}function f(a,b,c){var d,e="",f=100*a._value;return b.indexOf(" %")>-1?(e=" ",b=b.replace(" %","")):b=b.replace("%",""),d=i(f,b,c),d.indexOf(")")>-1?(d=d.split(""),d.splice(-1,0,e+"%"),d=d.join("")):d=d+e+"%",d}function g(a){var b=Math.floor(a._value/60/60),c=Math.floor((a._value-60*b*60)/60),d=Math.round(a._value-60*b*60-60*c);return b+":"+(10>c?"0"+c:c)+":"+(10>d?"0"+d:d)}function h(a){var b=a.split(":"),c=0;return 3===b.length?(c+=60*Number(b[0])*60,c+=60*Number(b[1]),c+=Number(b[2])):2===b.length&&(c+=60*Number(b[0]),c+=Number(b[1])),Number(c)}function i(a,c,d){var e,f,g,h,i,j,k=!1,l=!1,m=!1,n="",r=!1,s=!1,t=!1,u=!1,v=!1,w="",x="",y=Math.abs(a),z=["B","KB","MB","GB","TB","PB","EB","ZB","YB"],A="",B=!1;if(0===a&&null!==q)return q;if(c.indexOf("(")>-1?(k=!0,c=c.slice(1,-1)):c.indexOf("+")>-1&&(l=!0,c=c.replace(/\+/g,"")),c.indexOf("a")>-1&&(r=c.indexOf("aK")>=0,s=c.indexOf("aM")>=0,t=c.indexOf("aB")>=0,u=c.indexOf("aT")>=0,v=r||s||t||u,c.indexOf(" a")>-1?(n=" ",c=c.replace(" a","")):c=c.replace("a",""),y>=Math.pow(10,12)&&!v||u?(n+=o[p].abbreviations.trillion,a/=Math.pow(10,12)):y=Math.pow(10,9)&&!v||t?(n+=o[p].abbreviations.billion,a/=Math.pow(10,9)):y=Math.pow(10,6)&&!v||s?(n+=o[p].abbreviations.million,a/=Math.pow(10,6)):(y=Math.pow(10,3)&&!v||r)&&(n+=o[p].abbreviations.thousand,a/=Math.pow(10,3))),c.indexOf("b")>-1)for(c.indexOf(" b")>-1?(w=" ",c=c.replace(" b","")):c=c.replace("b",""),g=0;g<=z.length;g++)if(e=Math.pow(1024,g),f=Math.pow(1024,g+1),a>=e&&f>a){w+=z[g],e>0&&(a/=e);break}return c.indexOf("o")>-1&&(c.indexOf(" o")>-1?(x=" ",c=c.replace(" o","")):c=c.replace("o",""),x+=o[p].ordinal(a)),c.indexOf("[.]")>-1&&(m=!0,c=c.replace("[.]",".")),h=a.toString().split(".")[0],i=c.split(".")[1],j=c.indexOf(","),i?(i.indexOf("[")>-1?(i=i.replace("]",""),i=i.split("["),A=b(a,i[0].length+i[1].length,d,i[1].length)):A=b(a,i.length,d),h=A.split(".")[0],A=A.split(".")[1].length?o[p].delimiters.decimal+A.split(".")[1]:"",m&&0===Number(A.slice(1))&&(A="")):h=b(a,null,d),h.indexOf("-")>-1&&(h=h.slice(1),B=!0),j>-1&&(h=h.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g,"$1"+o[p].delimiters.thousands)),0===c.indexOf(".")&&(h=""),(k&&B?"(":"")+(!k&&B?"-":"")+(!B&&l?"+":"")+h+A+(x?x:"")+(n?n:"")+(w?w:"")+(k&&B?")":"")}function j(a,b){o[a]=b}function k(a){var b=a.toString().split(".");return b.length<2?1:Math.pow(10,b[1].length)}function l(){var a=Array.prototype.slice.call(arguments);return a.reduce(function(a,b){var c=k(a),d=k(b);return c>d?c:d},-1/0)}var m,n="1.5.3",o={},p="en",q=null,r="0,0",s="undefined"!=typeof module&&module.exports;m=function(b){return m.isNumeral(b)?b=b.value():0===b||"undefined"==typeof b?b=0:Number(b)||(b=m.fn.unformat(b)),new a(Number(b))},m.version=n,m.isNumeral=function(b){return b instanceof a},m.language=function(a,b){if(!a)return p;if(a&&!b){if(!o[a])throw new Error("Unknown language : "+a);p=a}return(b||!o[a])&&j(a,b),m},m.languageData=function(a){if(!a)return o[p];if(!o[a])throw new Error("Unknown language : "+a);return o[a]},m.language("en",{delimiters:{thousands:",",decimal:"."},abbreviations:{thousand:"k",million:"m",billion:"b",trillion:"t"},ordinal:function(a){var b=a%10;return 1===~~(a%100/10)?"th":1===b?"st":2===b?"nd":3===b?"rd":"th"},currency:{symbol:"$"}}),m.zeroFormat=function(a){q="string"==typeof a?a:null},m.defaultFormat=function(a){r="string"==typeof a?a:"0.0"},"function"!=typeof Array.prototype.reduce&&(Array.prototype.reduce=function(a,b){"use strict";if(null===this||"undefined"==typeof this)throw new TypeError("Array.prototype.reduce called on null or undefined");if("function"!=typeof a)throw new TypeError(a+" is not a function");var c,d,e=this.length>>>0,f=!1;for(1c;++c)this.hasOwnProperty(c)&&(f?d=a(d,this[c],c,this):(d=this[c],f=!0));if(!f)throw new TypeError("Reduce of empty array with no initial value");return d}),m.fn=a.prototype={clone:function(){return m(this)},format:function(a,b){return c(this,a?a:r,void 0!==b?b:Math.round)},unformat:function(a){return"[object Number]"===Object.prototype.toString.call(a)?a:d(this,a?a:r)},value:function(){return this._value},valueOf:function(){return this._value},set:function(a){return this._value=Number(a),this},add:function(a){function b(a,b){return a+c*b}var c=l.call(null,this._value,a);return this._value=[this._value,a].reduce(b,0)/c,this},subtract:function(a){function b(a,b){return a-c*b}var c=l.call(null,this._value,a);return this._value=[a].reduce(b,this._value*c)/c,this},multiply:function(a){function b(a,b){var c=l(a,b);return a*c*b*c/(c*c)}return this._value=[this._value,a].reduce(b,1),this},divide:function(a){function b(a,b){var c=l(a,b);return a*c/(b*c)}return this._value=[this._value,a].reduce(b),this},difference:function(a){return Math.abs(m(this._value).subtract(a).value())}},s&&(module.exports=m),"undefined"==typeof ender&&(this.numeral=m),"function"==typeof define&&define.amd&&define([],function(){return m})}).call(this);var TimeFormatters={formatUT:function(t){var day,year;if(t==null){t=0}year=(t/(365*24*3600)|0)+1;t%=365*24*3600;day=(t/(24*3600)|0)+1;t%=24*3600;return"Year "+year+", Day "+day+", "+this.hourMinSec(t)+" UT"},formatMET:function(t){var result;if(t==null){t=0}result="T+";if(t>=365*24*3600){result+=(t/(365*24*3600)|0)+":";t%=365*24*3600;if(t<24*3600){result+="0:"}}if(t>=24*3600){result+=(t/(24*3600)|0)+":"}t%=24*3600;return result+this.hourMinSec(t)+" MET"},hourMinSec:function(t){var hour,min,sec;if(t==null){t=0}hour=t/3600|0;if(hour<10){hour="0"+hour}t%=3600;min=t/60|0;if(min<10){min="0"+min}sec=(t%60|0).toFixed();if(sec<10){sec="0"+sec}return""+hour+":"+min+":"+sec},durationString:function(t){var result;if(t==null){t=0}result=t<0?"-":"";t=Math.abs(t);if(t>=365*24*3600){result+=(t/(365*24*3600)|0)+" years ";t%=365*24*3600;if(t<24*3600){result+="0 days "}}if(t>=24*3600){result+=(t/(24*3600)|0)+" days "}t%=24*3600;return result+this.hourMinSec(t)}};var DataFormatters={distanceString:function(value){return numeral(value).format("0,0.000 a")+"m"},heightFromTerrainString:function(value){if(value<=-1){return"NA"}return numeral(value).format("0,0.000 a")+"m"},degreeString:function(value){return numeral(value).format("0.000")+"°"},velocityString:function(value){return numeral(value).format("0,0.000 a")+"m/s"},temperatureString:function(value){if(!value){return"NA"}return numeral(value).format("0,000")+"°C"},accelerationSensorString:function(value){if(value[0]=="No Sensors of the Appropriate Type"){return"NA"}return numeral(value[1][0]).format("0,000")+"G"},pressureSensorString:function(value){if(value[0]=="No Sensors of the Appropriate Type"){return"NA"}return numeral(value[1][0]).format("0,000")+"Pa"},gravitySensorString:function(value){if(value[0]=="No Sensors of the Appropriate Type"){return"NA"}return numeral(value[1][0]).format("0,000 a")+"m/s²"},newtonsString:function(value){return numeral(value).format("0,0.00")+" N"},percentageString:function(value){return numeral(value).format("0%")},tonnageString:function(value){return numeral(value).format("0,0.00")+" t"},timeString:function(value){return numeral(value).format("00:00:00")},plainNumberString:function(value){return numeral(value).format("0,0.00")}};var Prototype={Version:"1.7.2",Browser:function(){var ua=navigator.userAgent;var isOpera=Object.prototype.toString.call(window.opera)=="[object Opera]";return{IE:!!window.attachEvent&&!isOpera,Opera:isOpera,WebKit:ua.indexOf("AppleWebKit/")>-1,Gecko:ua.indexOf("Gecko")>-1&&ua.indexOf("KHTML")===-1,MobileSafari:/Apple.*Mobile/.test(ua)}}(),BrowserFeatures:{XPath:!!document.evaluate,SelectorsAPI:!!document.querySelector,ElementExtensions:function(){var constructor=window.Element||window.HTMLElement;return!!(constructor&&constructor.prototype)}(),SpecificElementExtensions:function(){if(typeof window.HTMLDivElement!=="undefined")return true;var div=document.createElement("div"),form=document.createElement("form"),isSupported=false;if(div["__proto__"]&&div["__proto__"]!==form["__proto__"]){isSupported=true}div=form=null;return isSupported}()},ScriptFragment:"]*>([\\S\\s]*?)",JSONFilter:/^\/\*-secure-([\s\S]*)\*\/\s*$/,emptyFunction:function(){},K:function(x){return x}};if(Prototype.Browser.MobileSafari)Prototype.BrowserFeatures.SpecificElementExtensions=false;var Class=function(){var IS_DONTENUM_BUGGY=function(){for(var p in{toString:1}){if(p==="toString")return false}return true}();function subclass(){}function create(){var parent=null,properties=$A(arguments);if(Object.isFunction(properties[0]))parent=properties.shift();function klass(){this.initialize.apply(this,arguments)}Object.extend(klass,Class.Methods);klass.superclass=parent;klass.subclasses=[];if(parent){subclass.prototype=parent.prototype;klass.prototype=new subclass;parent.subclasses.push(klass)}for(var i=0,length=properties.length;i0){match=source.match(pattern);if(match&&match[0].length>0){result+=source.slice(0,match.index);result+=String.interpret(replacement(match));source=source.slice(match.index+match[0].length)}else{result+=source,source=""}}return result}function sub(pattern,replacement,count){replacement=prepareReplacement(replacement);count=Object.isUndefined(count)?1:count;return this.gsub(pattern,function(match){if(--count<0)return match[0];return replacement(match)})}function scan(pattern,iterator){this.gsub(pattern,iterator);return String(this)}function truncate(length,truncation){length=length||30;truncation=Object.isUndefined(truncation)?"...":truncation;return this.length>length?this.slice(0,length-truncation.length)+truncation:String(this)}function strip(){return this.replace(/^\s+/,"").replace(/\s+$/,"")}function stripTags(){return this.replace(/<\w+(\s+("[^"]*"|'[^']*'|[^>])+)?>|<\/\w+>/gi,"")}function stripScripts(){return this.replace(new RegExp(Prototype.ScriptFragment,"img"),"")}function extractScripts(){var matchAll=new RegExp(Prototype.ScriptFragment,"img"),matchOne=new RegExp(Prototype.ScriptFragment,"im");return(this.match(matchAll)||[]).map(function(scriptTag){return(scriptTag.match(matchOne)||["",""])[1]})}function evalScripts(){return this.extractScripts().map(function(script){return eval(script)})}function escapeHTML(){return this.replace(/&/g,"&").replace(//g,">")}function unescapeHTML(){return this.stripTags().replace(/</g,"<").replace(/>/g,">").replace(/&/g,"&")}function toQueryParams(separator){var match=this.strip().match(/([^?#]*)(#.*)?$/);if(!match)return{};return match[1].split(separator||"&").inject({},function(hash,pair){if((pair=pair.split("="))[0]){var key=decodeURIComponent(pair.shift()),value=pair.length>1?pair.join("="):pair[0];if(value!=undefined){value=value.gsub("+"," ");value=decodeURIComponent(value)}if(key in hash){if(!Object.isArray(hash[key]))hash[key]=[hash[key]];hash[key].push(value)}else hash[key]=value}return hash})}function toArray(){return this.split("")}function succ(){return this.slice(0,this.length-1)+String.fromCharCode(this.charCodeAt(this.length-1)+1)}function times(count){return count<1?"":new Array(count+1).join(this)}function camelize(){return this.replace(/-+(.)?/g,function(match,chr){return chr?chr.toUpperCase():""})}function capitalize(){return this.charAt(0).toUpperCase()+this.substring(1).toLowerCase()}function underscore(){return this.replace(/::/g,"/").replace(/([A-Z]+)([A-Z][a-z])/g,"$1_$2").replace(/([a-z\d])([A-Z])/g,"$1_$2").replace(/-/g,"_").toLowerCase()}function dasherize(){return this.replace(/_/g,"-")}function inspect(useDoubleQuotes){var escapedString=this.replace(/[\x00-\x1f\\]/g,function(character){if(character in String.specialChar){return String.specialChar[character]}return"\\u00"+character.charCodeAt().toPaddedString(2,16)});if(useDoubleQuotes)return'"'+escapedString.replace(/"/g,'\\"')+'"';return"'"+escapedString.replace(/'/g,"\\'")+"'"}function unfilterJSON(filter){return this.replace(filter||Prototype.JSONFilter,"$1")}function isJSON(){var str=this;if(str.blank())return false;str=str.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,"@");str=str.replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,"]");str=str.replace(/(?:^|:|,)(?:\s*\[)+/g,"");return/^[\],:{}\s]*$/.test(str)}function evalJSON(sanitize){var json=this.unfilterJSON(),cx=/[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g;if(cx.test(json)){json=json.replace(cx,function(a){return"\\u"+("0000"+a.charCodeAt(0).toString(16)).slice(-4)})}try{if(!sanitize||json.isJSON())return eval("("+json+")")}catch(e){}throw new SyntaxError("Badly formed JSON string: "+this.inspect())}function parseJSON(){var json=this.unfilterJSON();return JSON.parse(json)}function include(pattern){return this.indexOf(pattern)>-1}function startsWith(pattern,position){position=Object.isNumber(position)?position:0;return this.lastIndexOf(pattern,position)===position}function endsWith(pattern,position){pattern=String(pattern);position=Object.isNumber(position)?position:this.length;if(position<0)position=0;if(position>this.length)position=this.length;var d=position-pattern.length;return d>=0&&this.indexOf(pattern,d)===d}function empty(){return this==""}function blank(){return/^\s*$/.test(this)}function interpolate(object,pattern){return new Template(this,pattern).evaluate(object)}return{gsub:gsub,sub:sub,scan:scan,truncate:truncate,strip:String.prototype.trim||strip,stripTags:stripTags,stripScripts:stripScripts,extractScripts:extractScripts,evalScripts:evalScripts,escapeHTML:escapeHTML,unescapeHTML:unescapeHTML,toQueryParams:toQueryParams,parseQuery:toQueryParams,toArray:toArray,succ:succ,times:times,camelize:camelize,capitalize:capitalize,underscore:underscore,dasherize:dasherize,inspect:inspect,unfilterJSON:unfilterJSON,isJSON:isJSON,evalJSON:NATIVE_JSON_PARSE_SUPPORT?parseJSON:evalJSON,include:include,startsWith:String.prototype.startsWith||startsWith,endsWith:String.prototype.endsWith||endsWith,empty:empty,blank:blank,interpolate:interpolate}}());var Template=Class.create({initialize:function(template,pattern){this.template=template.toString();this.pattern=pattern||Template.Pattern},evaluate:function(object){if(object&&Object.isFunction(object.toTemplateReplacements))object=object.toTemplateReplacements();return this.template.gsub(this.pattern,function(match){if(object==null)return match[1]+"";var before=match[1]||"";if(before=="\\")return match[2];var ctx=object,expr=match[3],pattern=/^([^.[]+|\[((?:.*?[^\\])?)\])(\.|\[|$)/;match=pattern.exec(expr);if(match==null)return before;while(match!=null){var comp=match[1].startsWith("[")?match[2].replace(/\\\\]/g,"]"):match[1];ctx=ctx[comp];if(null==ctx||""==match[3])break;expr=expr.substring("["==match[3]?match[1].length:match[0].length);match=pattern.exec(expr)}return before+String.interpret(ctx)})}});Template.Pattern=/(^|.|\r|\n)(#\{(.*?)\})/;var $break={};var Enumerable=function(){function each(iterator,context){try{this._each(iterator,context)}catch(e){if(e!=$break)throw e}return this}function eachSlice(number,iterator,context){var index=-number,slices=[],array=this.toArray();if(number<1)return array;while((index+=number)=result)result=value},this);return result}function min(iterator,context){iterator=iterator||Prototype.K;var result;this.each(function(value,index){value=iterator.call(context,value,index,this);if(result==null||valueb?1:0}).pluck("value")}function toArray(){return this.map()}function zip(){var iterator=Prototype.K,args=$A(arguments);if(Object.isFunction(args.last()))iterator=args.pop();var collections=[this].concat(args).map($A);return this.map(function(value,index){return iterator(collections.pluck(index))})}function size(){return this.toArray().length}function inspect(){return"#"}return{each:each,eachSlice:eachSlice,all:all,every:all,any:any,some:any,collect:collect,map:collect,detect:detect,findAll:findAll,select:findAll,filter:findAll,grep:grep,include:include,member:include,inGroupsOf:inGroupsOf,inject:inject,invoke:invoke,max:max,min:min,partition:partition,pluck:pluck,reject:reject,sortBy:sortBy,toArray:toArray,entries:toArray,zip:zip,size:size,inspect:inspect,find:detect}}();function $A(iterable){if(!iterable)return[];if("toArray"in Object(iterable))return iterable.toArray();var length=iterable.length||0,results=new Array(length);while(length--)results[length]=iterable[length];return results}function $w(string){if(!Object.isString(string))return[];string=string.strip();return string?string.split(/\s+/):[]}Array.from=$A;(function(){var arrayProto=Array.prototype,slice=arrayProto.slice,_each=arrayProto.forEach;function each(iterator,context){for(var i=0,length=this.length>>>0;i>>0;if(length===0)return-1;i=Number(i);if(isNaN(i)){i=0}else if(i!==0&&isFinite(i)){i=(i>0?1:-1)*Math.floor(Math.abs(i))}if(i>length)return-1;var k=i>=0?i:Math.max(length-Math.abs(i),0);for(;k>>0;if(length===0)return-1;if(!Object.isUndefined(i)){i=Number(i);if(isNaN(i)){i=0}else if(i!==0&&isFinite(i)){i=(i>0?1:-1)*Math.floor(Math.abs(i))}}else{i=length}var k=i>=0?Math.min(i,length-1):length-Math.abs(i);for(;k>=0;k--)if(k in array&&array[k]===item)return k;return-1}function concat(_){var array=[],items=slice.call(arguments,0),item,n=0;items.unshift(this);for(var i=0,length=items.length;i>>0;i>>0;i>>0;i>>0;i"}function clone(){return new Hash(this)}return{initialize:initialize,_each:_each,set:set,get:get,unset:unset,toObject:toObject,toTemplateReplacements:toObject,keys:keys,values:values,index:index,merge:merge,update:update,toQueryString:toQueryString,inspect:inspect,toJSON:toObject,clone:clone}}());Hash.from=$H;Object.extend(Number.prototype,function(){function toColorPart(){return this.toPaddedString(2,16)}function succ(){return this+1}function times(iterator,context){$R(0,this,true).each(iterator,context);return this}function toPaddedString(length,radix){var string=this.toString(radix||10);return"0".times(length-string.length)+string}function abs(){return Math.abs(this)}function round(){return Math.round(this)}function ceil(){return Math.ceil(this)}function floor(){return Math.floor(this)}return{toColorPart:toColorPart,succ:succ,times:times,toPaddedString:toPaddedString,abs:abs,round:round,ceil:ceil,floor:floor}}());function $R(start,end,exclusive){return new ObjectRange(start,end,exclusive)}var ObjectRange=Class.create(Enumerable,function(){function initialize(start,end,exclusive){this.start=start;this.end=end;this.exclusive=exclusive}function _each(iterator,context){var value=this.start,i;for(i=0;this.include(value);i++){iterator.call(context,value,i);value=value.succ()}}function include(value){if(value1&&!(readyState==4&&this._complete))this.respondToReadyState(this.transport.readyState)},setRequestHeaders:function(){var headers={"X-Requested-With":"XMLHttpRequest","X-Prototype-Version":Prototype.Version,Accept:"text/javascript, text/html, application/xml, text/xml, */*"};if(this.method=="post"){headers["Content-type"]=this.options.contentType+(this.options.encoding?"; charset="+this.options.encoding:"");if(this.transport.overrideMimeType&&(navigator.userAgent.match(/Gecko\/(\d{4})/)||[0,2005])[1]<2005)headers["Connection"]="close"}if(typeof this.options.requestHeaders=="object"){var extras=this.options.requestHeaders;if(Object.isFunction(extras.push))for(var i=0,length=extras.length;i=200&&status<300||status==304},getStatus:function(){try{if(this.transport.status===1223)return 204;return this.transport.status||0}catch(e){return 0}},respondToReadyState:function(readyState){var state=Ajax.Request.Events[readyState],response=new Ajax.Response(this);if(state=="Complete"){try{this._complete=true;(this.options["on"+response.status]||this.options["on"+(this.success()?"Success":"Failure")]||Prototype.emptyFunction)(response,response.headerJSON)}catch(e){this.dispatchException(e)}var contentType=response.getHeader("Content-type");if(this.options.evalJS=="force"||this.options.evalJS&&this.isSameOrigin()&&contentType&&contentType.match(/^\s*(text|application)\/(x-)?(java|ecma)script(;.*)?\s*$/i))this.evalResponse()}try{(this.options["on"+state]||Prototype.emptyFunction)(response,response.headerJSON);Ajax.Responders.dispatch("on"+state,this,response,response.headerJSON)}catch(e){this.dispatchException(e)}if(state=="Complete"){this.transport.onreadystatechange=Prototype.emptyFunction}},isSameOrigin:function(){var m=this.url.match(/^\s*https?:\/\/[^\/]*/);return!m||m[0]=="#{protocol}//#{domain}#{port}".interpolate({protocol:location.protocol,domain:document.domain,port:location.port?":"+location.port:""})},getHeader:function(name){try{return this.transport.getResponseHeader(name)||null}catch(e){return null}},evalResponse:function(){try{return eval((this.transport.responseText||"").unfilterJSON())}catch(e){this.dispatchException(e)}},dispatchException:function(exception){(this.options.onException||Prototype.emptyFunction)(this,exception);Ajax.Responders.dispatch("onException",this,exception)}});Ajax.Request.Events=["Uninitialized","Loading","Loaded","Interactive","Complete"];Ajax.Response=Class.create({initialize:function(request){this.request=request;var transport=this.transport=request.transport,readyState=this.readyState=transport.readyState;if(readyState>2&&!Prototype.Browser.IE||readyState==4){this.status=this.getStatus();this.statusText=this.getStatusText();this.responseText=String.interpret(transport.responseText);this.headerJSON=this._getHeaderJSON()}if(readyState==4){var xml=transport.responseXML;this.responseXML=Object.isUndefined(xml)?null:xml;this.responseJSON=this._getResponseJSON()}},status:0,statusText:"",getStatus:Ajax.Request.prototype.getStatus,getStatusText:function(){try{return this.transport.statusText||""}catch(e){return""}},getHeader:Ajax.Request.prototype.getHeader,getAllHeaders:function(){try{return this.getAllResponseHeaders()}catch(e){return null}},getResponseHeader:function(name){return this.transport.getResponseHeader(name)},getAllResponseHeaders:function(){return this.transport.getAllResponseHeaders()},_getHeaderJSON:function(){var json=this.getHeader("X-JSON");if(!json)return null;try{json=decodeURIComponent(escape(json))}catch(e){}try{return json.evalJSON(this.request.options.sanitizeJSON||!this.request.isSameOrigin())}catch(e){this.request.dispatchException(e)}},_getResponseJSON:function(){var options=this.request.options;if(!options.evalJSON||options.evalJSON!="force"&&!(this.getHeader("Content-type")||"").include("application/json")||this.responseText.blank())return null;try{return this.responseText.evalJSON(options.sanitizeJSON||!this.request.isSameOrigin())}catch(e){this.request.dispatchException(e)}}});Ajax.Updater=Class.create(Ajax.Request,{initialize:function($super,container,url,options){this.container={success:container.success||container,failure:container.failure||(container.success?null:container)};options=Object.clone(options);var onComplete=options.onComplete;options.onComplete=function(response,json){this.updateContent(response.responseText);if(Object.isFunction(onComplete))onComplete(response,json)}.bind(this);$super(url,options)},updateContent:function(responseText){var receiver=this.container[this.success()?"success":"failure"],options=this.options;if(!options.evalScripts)responseText=responseText.stripScripts();if(receiver=$(receiver)){if(options.insertion){if(Object.isString(options.insertion)){var insertion={};insertion[options.insertion]=responseText;receiver.insert(insertion)}else options.insertion(receiver,responseText)}else receiver.update(responseText)}}});Ajax.PeriodicalUpdater=Class.create(Ajax.Base,{initialize:function($super,container,url,options){$super(options);this.onComplete=this.options.onComplete;this.frequency=this.options.frequency||2;this.decay=this.options.decay||1;this.updater={};this.container=container;this.url=url;this.start()},start:function(){this.options.onComplete=this.updateComplete.bind(this);this.onTimerEvent()},stop:function(){this.updater.options.onComplete=undefined;clearTimeout(this.timer);(this.onComplete||Prototype.emptyFunction).apply(this,arguments)},updateComplete:function(response){if(this.options.decay){this.decay=response.responseText==this.lastText?this.decay*this.options.decay:1;this.lastText=response.responseText}this.timer=this.onTimerEvent.bind(this).delay(this.decay*this.frequency)},onTimerEvent:function(){this.updater=new Ajax.Updater(this.container,this.url,this.options)}});(function(GLOBAL){var UNDEFINED;var SLICE=Array.prototype.slice;var DIV=document.createElement("div");function $(element){if(arguments.length>1){for(var i=0,elements=[],length=arguments.length;i');return el.tagName.toLowerCase()==="input"&&el.name==="x"}catch(err){return false}}();var oldElement=GLOBAL.Element;function Element(tagName,attributes){attributes=attributes||{};tagName=tagName.toLowerCase();if(HAS_EXTENDED_CREATE_ELEMENT_SYNTAX&&attributes.name){tagName="<"+tagName+' name="'+attributes.name+'">';delete attributes.name;return Element.writeAttribute(document.createElement(tagName),attributes)}if(!ELEMENT_CACHE[tagName])ELEMENT_CACHE[tagName]=Element.extend(document.createElement(tagName));var node=shouldUseCreationCache(tagName,attributes)?ELEMENT_CACHE[tagName].cloneNode(false):document.createElement(tagName);return Element.writeAttribute(node,attributes)}GLOBAL.Element=Element;Object.extend(GLOBAL.Element,oldElement||{});if(oldElement)GLOBAL.Element.prototype=oldElement.prototype;Element.Methods={ByTag:{},Simulated:{}};var methods={};var INSPECT_ATTRIBUTES={id:"id",className:"class"};function inspect(element){element=$(element);var result="<"+element.tagName.toLowerCase();var attribute,value;for(var property in INSPECT_ATTRIBUTES){attribute=INSPECT_ATTRIBUTES[property];value=(element[property]||"").toString();if(value)result+=" "+attribute+"="+value.inspect(true)}return result+">"}methods.inspect=inspect;function visible(element){return $(element).style.display!=="none"}function toggle(element,bool){element=$(element);if(Object.isUndefined(bool))bool=!Element.visible(element);Element[bool?"show":"hide"](element);return element}function hide(element){element=$(element);element.style.display="none";return element}function show(element){element=$(element);element.style.display="";return element}Object.extend(methods,{visible:visible,toggle:toggle,hide:hide,show:show});function remove(element){element=$(element);element.parentNode.removeChild(element);return element}var SELECT_ELEMENT_INNERHTML_BUGGY=function(){var el=document.createElement("select"),isBuggy=true;el.innerHTML='';if(el.options&&el.options[0]){isBuggy=el.options[0].nodeName.toUpperCase()!=="OPTION"}el=null;return isBuggy}();var TABLE_ELEMENT_INNERHTML_BUGGY=function(){try{var el=document.createElement("table");if(el&&el.tBodies){el.innerHTML="
    test
    ";var isBuggy=typeof el.tBodies[0]=="undefined";el=null;return isBuggy}}catch(e){return true}}();var LINK_ELEMENT_INNERHTML_BUGGY=function(){try{var el=document.createElement("div");el.innerHTML="";var isBuggy=el.childNodes.length===0;el=null;return isBuggy}catch(e){return true}}();var ANY_INNERHTML_BUGGY=SELECT_ELEMENT_INNERHTML_BUGGY||TABLE_ELEMENT_INNERHTML_BUGGY||LINK_ELEMENT_INNERHTML_BUGGY;var SCRIPT_ELEMENT_REJECTS_TEXTNODE_APPENDING=function(){var s=document.createElement("script"),isBuggy=false;try{s.appendChild(document.createTextNode(""));isBuggy=!s.firstChild||s.firstChild&&s.firstChild.nodeType!==3}catch(e){isBuggy=true}s=null;return isBuggy}();function update(element,content){element=$(element);var descendants=element.getElementsByTagName("*"),i=descendants.length;while(i--)purgeElement(descendants[i]);if(content&&content.toElement)content=content.toElement();if(Object.isElement(content))return element.update().insert(content);content=Object.toHTML(content);var tagName=element.tagName.toUpperCase();if(tagName==="SCRIPT"&&SCRIPT_ELEMENT_REJECTS_TEXTNODE_APPENDING){element.text=content;return element}if(ANY_INNERHTML_BUGGY){if(tagName in INSERTION_TRANSLATIONS.tags){while(element.firstChild)element.removeChild(element.firstChild);var nodes=getContentFromAnonymousElement(tagName,content.stripScripts());for(var i=0,node;node=nodes[i];i++)element.appendChild(node)}else if(LINK_ELEMENT_INNERHTML_BUGGY&&Object.isString(content)&&content.indexOf("-1){while(element.firstChild)element.removeChild(element.firstChild);var nodes=getContentFromAnonymousElement(tagName,content.stripScripts(),true);for(var i=0,node;node=nodes[i];i++)element.appendChild(node)}else{element.innerHTML=content.stripScripts()}}else{element.innerHTML=content.stripScripts()}content.evalScripts.bind(content).defer();return element}function replace(element,content){element=$(element);if(content&&content.toElement){content=content.toElement()}else if(!Object.isElement(content)){content=Object.toHTML(content);var range=element.ownerDocument.createRange();range.selectNode(element);content.evalScripts.bind(content).defer();content=range.createContextualFragment(content.stripScripts())}element.parentNode.replaceChild(content,element);return element}var INSERTION_TRANSLATIONS={before:function(element,node){element.parentNode.insertBefore(node,element)},top:function(element,node){element.insertBefore(node,element.firstChild)},bottom:function(element,node){element.appendChild(node)},after:function(element,node){element.parentNode.insertBefore(node,element.nextSibling)},tags:{TABLE:["
    ","
    ",1],TBODY:["","
    ",2],TR:["","
    ",3],TD:["
    ","
    ",4],SELECT:["",1]}};var tags=INSERTION_TRANSLATIONS.tags;Object.extend(tags,{THEAD:tags.TBODY,TFOOT:tags.TBODY,TH:tags.TD});function replace_IE(element,content){element=$(element);if(content&&content.toElement)content=content.toElement();if(Object.isElement(content)){element.parentNode.replaceChild(content,element);return element}content=Object.toHTML(content);var parent=element.parentNode,tagName=parent.tagName.toUpperCase();if(tagName in INSERTION_TRANSLATIONS.tags){var nextSibling=Element.next(element);var fragments=getContentFromAnonymousElement(tagName,content.stripScripts());parent.removeChild(element);var iterator;if(nextSibling)iterator=function(node){parent.insertBefore(node,nextSibling)};else iterator=function(node){parent.appendChild(node)};fragments.each(iterator)}else{element.outerHTML=content.stripScripts()}content.evalScripts.bind(content).defer();return element}if("outerHTML"in document.documentElement)replace=replace_IE;function isContent(content){if(Object.isUndefined(content)||content===null)return false;if(Object.isString(content)||Object.isNumber(content))return true;if(Object.isElement(content))return true;if(content.toElement||content.toHTML)return true;return false}function insertContentAt(element,content,position){position=position.toLowerCase();var method=INSERTION_TRANSLATIONS[position];if(content&&content.toElement)content=content.toElement();if(Object.isElement(content)){method(element,content);return element}content=Object.toHTML(content);var tagName=(position==="before"||position==="after"?element.parentNode:element).tagName.toUpperCase();var childNodes=getContentFromAnonymousElement(tagName,content.stripScripts());if(position==="top"||position==="after")childNodes.reverse();for(var i=0,node;node=childNodes[i];i++)method(element,node);content.evalScripts.bind(content).defer()}function insert(element,insertions){element=$(element);if(isContent(insertions))insertions={bottom:insertions};for(var position in insertions)insertContentAt(element,insertions[position],position);return element}function wrap(element,wrapper,attributes){element=$(element);if(Object.isElement(wrapper)){$(wrapper).writeAttribute(attributes||{})}else if(Object.isString(wrapper)){wrapper=new Element(wrapper,attributes)}else{wrapper=new Element("div",wrapper)}if(element.parentNode)element.parentNode.replaceChild(wrapper,element);wrapper.appendChild(element);return wrapper}function cleanWhitespace(element){element=$(element);var node=element.firstChild;while(node){var nextNode=node.nextSibling;if(node.nodeType===Node.TEXT_NODE&&!/\S/.test(node.nodeValue))element.removeChild(node);node=nextNode}return element}function empty(element){return $(element).innerHTML.blank()}function getContentFromAnonymousElement(tagName,html,force){var t=INSERTION_TRANSLATIONS.tags[tagName],div=DIV;var workaround=!!t;if(!workaround&&force){workaround=true;t=["","",0]}if(workaround){div.innerHTML=" "+t[0]+html+t[1];div.removeChild(div.firstChild);for(var i=t[2];i--;)div=div.firstChild}else{div.innerHTML=html}return $A(div.childNodes)}function clone(element,deep){if(!(element=$(element)))return;var clone=element.cloneNode(deep);if(!HAS_UNIQUE_ID_PROPERTY){clone._prototypeUID=UNDEFINED;if(deep){var descendants=Element.select(clone,"*"),i=descendants.length;while(i--)descendants[i]._prototypeUID=UNDEFINED}}return Element.extend(clone)}function purgeElement(element){var uid=getUniqueElementID(element);if(uid){Element.stopObserving(element);if(!HAS_UNIQUE_ID_PROPERTY)element._prototypeUID=UNDEFINED;delete Element.Storage[uid]}}function purgeCollection(elements){var i=elements.length;while(i--)purgeElement(elements[i])}function purgeCollection_IE(elements){var i=elements.length,element,uid;while(i--){element=elements[i];uid=getUniqueElementID(element);delete Element.Storage[uid];delete Event.cache[uid]}}if(HAS_UNIQUE_ID_PROPERTY){purgeCollection=purgeCollection_IE}function purge(element){if(!(element=$(element)))return;purgeElement(element);var descendants=element.getElementsByTagName("*"),i=descendants.length;while(i--)purgeElement(descendants[i]);return null}Object.extend(methods,{remove:remove,update:update,replace:replace,insert:insert,wrap:wrap,cleanWhitespace:cleanWhitespace,empty:empty,clone:clone,purge:purge});function recursivelyCollect(element,property,maximumLength){element=$(element);maximumLength=maximumLength||-1;var elements=[];while(element=element[property]){if(element.nodeType===Node.ELEMENT_NODE)elements.push(Element.extend(element));if(elements.length===maximumLength)break}return elements}function ancestors(element){return recursivelyCollect(element,"parentNode")}function descendants(element){return Element.select(element,"*")}function firstDescendant(element){element=$(element).firstChild;while(element&&element.nodeType!==Node.ELEMENT_NODE)element=element.nextSibling;return $(element)}function immediateDescendants(element){var results=[],child=$(element).firstChild;while(child){if(child.nodeType===Node.ELEMENT_NODE)results.push(Element.extend(child));child=child.nextSibling}return results}function previousSiblings(element){return recursivelyCollect(element,"previousSibling")}function nextSiblings(element){return recursivelyCollect(element,"nextSibling")}function siblings(element){element=$(element);var previous=previousSiblings(element),next=nextSiblings(element);return previous.reverse().concat(next)}function match(element,selector){element=$(element);if(Object.isString(selector))return Prototype.Selector.match(element,selector);return selector.match(element)}function _recursivelyFind(element,property,expression,index){element=$(element),expression=expression||0,index=index||0;if(Object.isNumber(expression)){index=expression,expression=null}while(element=element[property]){if(element.nodeType!==1)continue;if(expression&&!Prototype.Selector.match(element,expression))continue;if(--index>=0)continue;return Element.extend(element)}}function up(element,expression,index){element=$(element);if(arguments.length===1)return $(element.parentNode);return _recursivelyFind(element,"parentNode",expression,index)}function down(element,expression,index){if(arguments.length===1)return firstDescendant(element);element=$(element),expression=expression||0,index=index||0;if(Object.isNumber(expression))index=expression,expression="*";var node=Prototype.Selector.select(expression,element)[index];return Element.extend(node)}function previous(element,expression,index){return _recursivelyFind(element,"previousSibling",expression,index)}function next(element,expression,index){return _recursivelyFind(element,"nextSibling",expression,index)}function select(element){element=$(element);var expressions=SLICE.call(arguments,1).join(", ");return Prototype.Selector.select(expressions,element)}function adjacent(element){element=$(element);var expressions=SLICE.call(arguments,1).join(", ");var siblings=Element.siblings(element),results=[];for(var i=0,sibling;sibling=siblings[i];i++){if(Prototype.Selector.match(sibling,expressions))results.push(sibling)}return results}function descendantOf_DOM(element,ancestor){element=$(element),ancestor=$(ancestor);while(element=element.parentNode)if(element===ancestor)return true;return false}function descendantOf_contains(element,ancestor){element=$(element),ancestor=$(ancestor);if(!ancestor.contains)return descendantOf_DOM(element,ancestor);return ancestor.contains(element)&&ancestor!==element}function descendantOf_compareDocumentPosition(element,ancestor){element=$(element),ancestor=$(ancestor);return(element.compareDocumentPosition(ancestor)&8)===8}var descendantOf;if(DIV.compareDocumentPosition){descendantOf=descendantOf_compareDocumentPosition}else if(DIV.contains){descendantOf=descendantOf_contains}else{descendantOf=descendantOf_DOM}Object.extend(methods,{recursivelyCollect:recursivelyCollect,ancestors:ancestors,descendants:descendants,firstDescendant:firstDescendant,immediateDescendants:immediateDescendants,previousSiblings:previousSiblings,nextSiblings:nextSiblings,siblings:siblings,match:match,up:up,down:down,previous:previous,next:next,select:select,adjacent:adjacent,descendantOf:descendantOf,getElementsBySelector:select,childElements:immediateDescendants});var idCounter=1;function identify(element){element=$(element);var id=Element.readAttribute(element,"id");if(id)return id;do{id="anonymous_element_"+idCounter++}while($(id));Element.writeAttribute(element,"id",id);return id}function readAttribute(element,name){return $(element).getAttribute(name)}function readAttribute_IE(element,name){element=$(element);var table=ATTRIBUTE_TRANSLATIONS.read;if(table.values[name])return table.values[name](element,name);if(table.names[name])name=table.names[name];if(name.include(":")){if(!element.attributes||!element.attributes[name])return null;return element.attributes[name].value}return element.getAttribute(name)}function readAttribute_Opera(element,name){if(name==="title")return element.title;return element.getAttribute(name)}var PROBLEMATIC_ATTRIBUTE_READING=function(){DIV.setAttribute("onclick",[]);var value=DIV.getAttribute("onclick");var isFunction=Object.isArray(value);DIV.removeAttribute("onclick");return isFunction}();if(PROBLEMATIC_ATTRIBUTE_READING){readAttribute=readAttribute_IE}else if(Prototype.Browser.Opera){readAttribute=readAttribute_Opera}function writeAttribute(element,name,value){element=$(element);var attributes={},table=ATTRIBUTE_TRANSLATIONS.write; +Math.toRadians = function(angleInDegrees){ + return angleInDegrees * (Math.PI/180) +} -if(typeof name==="object"){attributes=name}else{attributes[name]=Object.isUndefined(value)?true:value}for(var attr in attributes){name=table.names[attr]||attr;value=attributes[attr];if(table.values[attr])name=table.values[attr](element,value)||name;if(value===false||value===null)element.removeAttribute(name);else if(value===true)element.setAttribute(name,name);else element.setAttribute(name,value)}return element}var PROBLEMATIC_HAS_ATTRIBUTE_WITH_CHECKBOXES=function(){if(!HAS_EXTENDED_CREATE_ELEMENT_SYNTAX){return false}var checkbox=document.createElement('');checkbox.checked=true;var node=checkbox.getAttributeNode("checked");return!node||!node.specified}();function hasAttribute(element,attribute){attribute=ATTRIBUTE_TRANSLATIONS.has[attribute]||attribute;var node=$(element).getAttributeNode(attribute);return!!(node&&node.specified)}function hasAttribute_IE(element,attribute){if(attribute==="checked"){return element.checked}return hasAttribute(element,attribute)}GLOBAL.Element.Methods.Simulated.hasAttribute=PROBLEMATIC_HAS_ATTRIBUTE_WITH_CHECKBOXES?hasAttribute_IE:hasAttribute;function classNames(element){return new Element.ClassNames(element)}var regExpCache={};function getRegExpForClassName(className){if(regExpCache[className])return regExpCache[className];var re=new RegExp("(^|\\s+)"+className+"(\\s+|$)");regExpCache[className]=re;return re}function hasClassName(element,className){if(!(element=$(element)))return;var elementClassName=element.className;if(elementClassName.length===0)return false;if(elementClassName===className)return true;return getRegExpForClassName(className).test(elementClassName)}function addClassName(element,className){if(!(element=$(element)))return;if(!hasClassName(element,className))element.className+=(element.className?" ":"")+className;return element}function removeClassName(element,className){if(!(element=$(element)))return;element.className=element.className.replace(getRegExpForClassName(className)," ").strip();return element}function toggleClassName(element,className,bool){if(!(element=$(element)))return;if(Object.isUndefined(bool))bool=!hasClassName(element,className);var method=Element[bool?"addClassName":"removeClassName"];return method(element,className)}var ATTRIBUTE_TRANSLATIONS={};var classProp="className",forProp="for";DIV.setAttribute(classProp,"x");if(DIV.className!=="x"){DIV.setAttribute("class","x");if(DIV.className==="x")classProp="class"}var LABEL=document.createElement("label");LABEL.setAttribute(forProp,"x");if(LABEL.htmlFor!=="x"){LABEL.setAttribute("htmlFor","x");if(LABEL.htmlFor==="x")forProp="htmlFor"}LABEL=null;function _getAttr(element,attribute){return element.getAttribute(attribute)}function _getAttr2(element,attribute){return element.getAttribute(attribute,2)}function _getAttrNode(element,attribute){var node=element.getAttributeNode(attribute);return node?node.value:""}function _getFlag(element,attribute){return $(element).hasAttribute(attribute)?attribute:null}DIV.onclick=Prototype.emptyFunction;var onclickValue=DIV.getAttribute("onclick");var _getEv;if(String(onclickValue).indexOf("{")>-1){_getEv=function(element,attribute){var value=element.getAttribute(attribute);if(!value)return null;value=value.toString();value=value.split("{")[1];value=value.split("}")[0];return value.strip()}}else if(onclickValue===""){_getEv=function(element,attribute){var value=element.getAttribute(attribute);if(!value)return null;return value.strip()}}ATTRIBUTE_TRANSLATIONS.read={names:{class:classProp,className:classProp,for:forProp,htmlFor:forProp},values:{style:function(element){return element.style.cssText.toLowerCase()},title:function(element){return element.title}}};ATTRIBUTE_TRANSLATIONS.write={names:{className:"class",htmlFor:"for",cellpadding:"cellPadding",cellspacing:"cellSpacing"},values:{checked:function(element,value){element.checked=!!value},style:function(element,value){element.style.cssText=value?value:""}}};ATTRIBUTE_TRANSLATIONS.has={names:{}};Object.extend(ATTRIBUTE_TRANSLATIONS.write.names,ATTRIBUTE_TRANSLATIONS.read.names);var CAMEL_CASED_ATTRIBUTE_NAMES=$w("colSpan rowSpan vAlign dateTime "+"accessKey tabIndex encType maxLength readOnly longDesc frameBorder");for(var i=0,attr;attr=CAMEL_CASED_ATTRIBUTE_NAMES[i];i++){ATTRIBUTE_TRANSLATIONS.write.names[attr.toLowerCase()]=attr;ATTRIBUTE_TRANSLATIONS.has.names[attr.toLowerCase()]=attr}Object.extend(ATTRIBUTE_TRANSLATIONS.read.values,{href:_getAttr2,src:_getAttr2,type:_getAttr,action:_getAttrNode,disabled:_getFlag,checked:_getFlag,readonly:_getFlag,multiple:_getFlag,onload:_getEv,onunload:_getEv,onclick:_getEv,ondblclick:_getEv,onmousedown:_getEv,onmouseup:_getEv,onmouseover:_getEv,onmousemove:_getEv,onmouseout:_getEv,onfocus:_getEv,onblur:_getEv,onkeypress:_getEv,onkeydown:_getEv,onkeyup:_getEv,onsubmit:_getEv,onreset:_getEv,onselect:_getEv,onchange:_getEv});Object.extend(methods,{identify:identify,readAttribute:readAttribute,writeAttribute:writeAttribute,classNames:classNames,hasClassName:hasClassName,addClassName:addClassName,removeClassName:removeClassName,toggleClassName:toggleClassName});function normalizeStyleName(style){if(style==="float"||style==="styleFloat")return"cssFloat";return style.camelize()}function normalizeStyleName_IE(style){if(style==="float"||style==="cssFloat")return"styleFloat";return style.camelize()}function setStyle(element,styles){element=$(element);var elementStyle=element.style,match;if(Object.isString(styles)){elementStyle.cssText+=";"+styles;if(styles.include("opacity")){var opacity=styles.match(/opacity:\s*(\d?\.?\d*)/)[1];Element.setOpacity(element,opacity)}return element}for(var property in styles){if(property==="opacity"){Element.setOpacity(element,styles[property])}else{var value=styles[property];if(property==="float"||property==="cssFloat"){property=Object.isUndefined(elementStyle.styleFloat)?"cssFloat":"styleFloat"}elementStyle[property]=value}}return element}function getStyle(element,style){element=$(element);style=normalizeStyleName(style);var value=element.style[style];if(!value||value==="auto"){var css=document.defaultView.getComputedStyle(element,null);value=css?css[style]:null}if(style==="opacity")return value?parseFloat(value):1;return value==="auto"?null:value}function getStyle_Opera(element,style){switch(style){case"height":case"width":if(!Element.visible(element))return null;var dim=parseInt(getStyle(element,style),10);if(dim!==element["offset"+style.capitalize()])return dim+"px";return Element.measure(element,style);default:return getStyle(element,style)}}function getStyle_IE(element,style){element=$(element);style=normalizeStyleName_IE(style);var value=element.style[style];if(!value&&element.currentStyle){value=element.currentStyle[style]}if(style==="opacity"&&!STANDARD_CSS_OPACITY_SUPPORTED)return getOpacity_IE(element);if(value==="auto"){if((style==="width"||style==="height")&&Element.visible(element))return Element.measure(element,style)+"px";return null}return value}function stripAlphaFromFilter_IE(filter){return(filter||"").replace(/alpha\([^\)]*\)/gi,"")}function hasLayout_IE(element){if(!element.currentStyle||!element.currentStyle.hasLayout)element.style.zoom=1;return element}var STANDARD_CSS_OPACITY_SUPPORTED=function(){DIV.style.cssText="opacity:.55";return/^0.55/.test(DIV.style.opacity)}();function setOpacity(element,value){element=$(element);if(value==1||value==="")value="";else if(value<1e-5)value=0;element.style.opacity=value;return element}function setOpacity_IE(element,value){if(STANDARD_CSS_OPACITY_SUPPORTED)return setOpacity(element,value);element=hasLayout_IE($(element));var filter=Element.getStyle(element,"filter"),style=element.style;if(value==1||value===""){filter=stripAlphaFromFilter_IE(filter);if(filter)style.filter=filter;else style.removeAttribute("filter");return element}if(value<1e-5)value=0;style.filter=stripAlphaFromFilter_IE(filter)+"alpha(opacity="+value*100+")";return element}function getOpacity(element){return Element.getStyle(element,"opacity")}function getOpacity_IE(element){if(STANDARD_CSS_OPACITY_SUPPORTED)return getOpacity(element);var filter=Element.getStyle(element,"filter");if(filter.length===0)return 1;var match=(filter||"").match(/alpha\(opacity=(.*)\)/);if(match&&match[1])return parseFloat(match[1])/100;return 1}Object.extend(methods,{setStyle:setStyle,getStyle:getStyle,setOpacity:setOpacity,getOpacity:getOpacity});if("styleFloat"in DIV.style){methods.getStyle=getStyle_IE;methods.setOpacity=setOpacity_IE;methods.getOpacity=getOpacity_IE}var UID=0;GLOBAL.Element.Storage={UID:1};function getUniqueElementID(element){if(element===window)return 0;if(typeof element._prototypeUID==="undefined")element._prototypeUID=Element.Storage.UID++;return element._prototypeUID}function getUniqueElementID_IE(element){if(element===window)return 0;if(element==document)return 1;return element.uniqueID}var HAS_UNIQUE_ID_PROPERTY="uniqueID"in DIV;if(HAS_UNIQUE_ID_PROPERTY)getUniqueElementID=getUniqueElementID_IE;function getStorage(element){if(!(element=$(element)))return;var uid=getUniqueElementID(element);if(!Element.Storage[uid])Element.Storage[uid]=$H();return Element.Storage[uid]}function store(element,key,value){if(!(element=$(element)))return;var storage=getStorage(element);if(arguments.length===2){storage.update(key)}else{storage.set(key,value)}return element}function retrieve(element,key,defaultValue){if(!(element=$(element)))return;var storage=getStorage(element),value=storage.get(key);if(Object.isUndefined(value)){storage.set(key,defaultValue);value=defaultValue}return value}Object.extend(methods,{getStorage:getStorage,store:store,retrieve:retrieve});var Methods={},ByTag=Element.Methods.ByTag,F=Prototype.BrowserFeatures;if(!F.ElementExtensions&&"__proto__"in DIV){GLOBAL.HTMLElement={};GLOBAL.HTMLElement.prototype=DIV["__proto__"];F.ElementExtensions=true}function checkElementPrototypeDeficiency(tagName){if(typeof window.Element==="undefined")return false;if(!HAS_EXTENDED_CREATE_ELEMENT_SYNTAX)return false;var proto=window.Element.prototype;if(proto){var id="_"+(Math.random()+"").slice(2),el=document.createElement(tagName);proto[id]="x";var isBuggy=el[id]!=="x";delete proto[id];el=null;return isBuggy}return false}var HTMLOBJECTELEMENT_PROTOTYPE_BUGGY=checkElementPrototypeDeficiency("object");function extendElementWith(element,methods){for(var property in methods){var value=methods[property];if(Object.isFunction(value)&&!(property in element))element[property]=value.methodize()}}var EXTENDED={};function elementIsExtended(element){var uid=getUniqueElementID(element);return uid in EXTENDED}function extend(element){if(!element||elementIsExtended(element))return element;if(element.nodeType!==Node.ELEMENT_NODE||element==window)return element;var methods=Object.clone(Methods),tagName=element.tagName.toUpperCase();if(ByTag[tagName])Object.extend(methods,ByTag[tagName]);extendElementWith(element,methods);EXTENDED[getUniqueElementID(element)]=true;return element}function extend_IE8(element){if(!element||elementIsExtended(element))return element;var t=element.tagName;if(t&&/^(?:object|applet|embed)$/i.test(t)){extendElementWith(element,Element.Methods);extendElementWith(element,Element.Methods.Simulated);extendElementWith(element,Element.Methods.ByTag[t.toUpperCase()])}return element}if(F.SpecificElementExtensions){extend=HTMLOBJECTELEMENT_PROTOTYPE_BUGGY?extend_IE8:Prototype.K}function addMethodsToTagName(tagName,methods){tagName=tagName.toUpperCase();if(!ByTag[tagName])ByTag[tagName]={};Object.extend(ByTag[tagName],methods)}function mergeMethods(destination,methods,onlyIfAbsent){if(Object.isUndefined(onlyIfAbsent))onlyIfAbsent=false;for(var property in methods){var value=methods[property];if(!Object.isFunction(value))continue;if(!onlyIfAbsent||!(property in destination))destination[property]=value.methodize()}}function findDOMClass(tagName){var klass;var trans={OPTGROUP:"OptGroup",TEXTAREA:"TextArea",P:"Paragraph",FIELDSET:"FieldSet",UL:"UList",OL:"OList",DL:"DList",DIR:"Directory",H1:"Heading",H2:"Heading",H3:"Heading",H4:"Heading",H5:"Heading",H6:"Heading",Q:"Quote",INS:"Mod",DEL:"Mod",A:"Anchor",IMG:"Image",CAPTION:"TableCaption",COL:"TableCol",COLGROUP:"TableCol",THEAD:"TableSection",TFOOT:"TableSection",TBODY:"TableSection",TR:"TableRow",TH:"TableCell",TD:"TableCell",FRAMESET:"FrameSet",IFRAME:"IFrame"};if(trans[tagName])klass="HTML"+trans[tagName]+"Element";if(window[klass])return window[klass];klass="HTML"+tagName+"Element";if(window[klass])return window[klass];klass="HTML"+tagName.capitalize()+"Element";if(window[klass])return window[klass];var element=document.createElement(tagName),proto=element["__proto__"]||element.constructor.prototype;element=null;return proto}function addMethods(methods){if(arguments.length===0)addFormMethods();if(arguments.length===2){var tagName=methods;methods=arguments[1]}if(!tagName){Object.extend(Element.Methods,methods||{})}else{if(Object.isArray(tagName)){for(var i=0,tag;tag=tagName[i];i++)addMethodsToTagName(tag,methods)}else{addMethodsToTagName(tagName,methods)}}var ELEMENT_PROTOTYPE=window.HTMLElement?HTMLElement.prototype:Element.prototype;if(F.ElementExtensions){mergeMethods(ELEMENT_PROTOTYPE,Element.Methods);mergeMethods(ELEMENT_PROTOTYPE,Element.Methods.Simulated,true)}if(F.SpecificElementExtensions){for(var tag in Element.Methods.ByTag){var klass=findDOMClass(tag);if(Object.isUndefined(klass))continue;mergeMethods(klass.prototype,ByTag[tag])}}Object.extend(Element,Element.Methods);Object.extend(Element,Element.Methods.Simulated);delete Element.ByTag;delete Element.Simulated;Element.extend.refresh();ELEMENT_CACHE={}}Object.extend(GLOBAL.Element,{extend:extend,addMethods:addMethods});if(extend===Prototype.K){GLOBAL.Element.extend.refresh=Prototype.emptyFunction}else{GLOBAL.Element.extend.refresh=function(){if(Prototype.BrowserFeatures.ElementExtensions)return;Object.extend(Methods,Element.Methods);Object.extend(Methods,Element.Methods.Simulated);EXTENDED={}}}function addFormMethods(){Object.extend(Form,Form.Methods);Object.extend(Form.Element,Form.Element.Methods);Object.extend(Element.Methods.ByTag,{FORM:Object.clone(Form.Methods),INPUT:Object.clone(Form.Element.Methods),SELECT:Object.clone(Form.Element.Methods),TEXTAREA:Object.clone(Form.Element.Methods),BUTTON:Object.clone(Form.Element.Methods)})}Element.addMethods(methods);function destroyCache_IE(){DIV=null;ELEMENT_CACHE=null}if(window.attachEvent)window.attachEvent("onunload",destroyCache_IE)})(this);(function(){function toDecimal(pctString){var match=pctString.match(/^(\d+)%?$/i);if(!match)return null;return Number(match[1])/100}function getRawStyle(element,style){element=$(element);var value=element.style[style];if(!value||value==="auto"){var css=document.defaultView.getComputedStyle(element,null);value=css?css[style]:null}if(style==="opacity")return value?parseFloat(value):1;return value==="auto"?null:value}function getRawStyle_IE(element,style){var value=element.style[style];if(!value&&element.currentStyle){value=element.currentStyle[style]}return value}function getContentWidth(element,context){var boxWidth=element.offsetWidth;var bl=getPixelValue(element,"borderLeftWidth",context)||0;var br=getPixelValue(element,"borderRightWidth",context)||0;var pl=getPixelValue(element,"paddingLeft",context)||0;var pr=getPixelValue(element,"paddingRight",context)||0;return boxWidth-bl-br-pl-pr}if("currentStyle"in document.documentElement){getRawStyle=getRawStyle_IE}function getPixelValue(value,property,context){var element=null;if(Object.isElement(value)){element=value;value=getRawStyle(element,property)}if(value===null||Object.isUndefined(value)){return null}if(/^(?:-)?\d+(\.\d+)?(px)?$/i.test(value)){return window.parseFloat(value)}var isPercentage=value.include("%"),isViewport=context===document.viewport;if(/\d/.test(value)&&element&&element.runtimeStyle&&!(isPercentage&&isViewport)){var style=element.style.left,rStyle=element.runtimeStyle.left;element.runtimeStyle.left=element.currentStyle.left;element.style.left=value||0;value=element.style.pixelLeft;element.style.left=style;element.runtimeStyle.left=rStyle;return value}if(element&&isPercentage){context=context||element.parentNode;var decimal=toDecimal(value),whole=null;var isHorizontal=property.include("left")||property.include("right")||property.include("width");var isVertical=property.include("top")||property.include("bottom")||property.include("height");if(context===document.viewport){if(isHorizontal){whole=document.viewport.getWidth()}else if(isVertical){whole=document.viewport.getHeight()}}else{if(isHorizontal){whole=$(context).measure("width")}else if(isVertical){whole=$(context).measure("height")}}return whole===null?0:whole*decimal}return 0}function toCSSPixels(number){if(Object.isString(number)&&number.endsWith("px"))return number;return number+"px"}function isDisplayed(element){while(element&&element.parentNode){var display=element.getStyle("display");if(display==="none"){return false}element=$(element.parentNode)}return true}var hasLayout=Prototype.K;if("currentStyle"in document.documentElement){hasLayout=function(element){if(!element.currentStyle.hasLayout){element.style.zoom=1}return element}}function cssNameFor(key){if(key.include("border"))key=key+"-width";return key.camelize()}Element.Layout=Class.create(Hash,{initialize:function($super,element,preCompute){$super();this.element=$(element);Element.Layout.PROPERTIES.each(function(property){this._set(property,null)},this);if(preCompute){this._preComputing=true;this._begin();Element.Layout.PROPERTIES.each(this._compute,this);this._end();this._preComputing=false}},_set:function(property,value){return Hash.prototype.set.call(this,property,value)},set:function(property,value){throw"Properties of Element.Layout are read-only."},get:function($super,property){var value=$super(property);return value===null?this._compute(property):value},_begin:function(){if(this._isPrepared())return;var element=this.element;if(isDisplayed(element)){this._setPrepared(true);return}var originalStyles={position:element.style.position||"",width:element.style.width||"",visibility:element.style.visibility||"",display:element.style.display||""};element.store("prototype_original_styles",originalStyles);var position=getRawStyle(element,"position"),width=element.offsetWidth;if(width===0||width===null){element.style.display="block";width=element.offsetWidth}var context=position==="fixed"?document.viewport:element.parentNode;var tempStyles={visibility:"hidden",display:"block"};if(position!=="fixed")tempStyles.position="absolute";element.setStyle(tempStyles);var positionedWidth=element.offsetWidth,newWidth;if(width&&positionedWidth===width){newWidth=getContentWidth(element,context)}else if(position==="absolute"||position==="fixed"){newWidth=getContentWidth(element,context)}else{var parent=element.parentNode,pLayout=$(parent).getLayout();newWidth=pLayout.get("width")-this.get("margin-left")-this.get("border-left")-this.get("padding-left")-this.get("padding-right")-this.get("border-right")-this.get("margin-right")}element.setStyle({width:newWidth+"px"});this._setPrepared(true)},_end:function(){var element=this.element;var originalStyles=element.retrieve("prototype_original_styles");element.store("prototype_original_styles",null);element.setStyle(originalStyles);this._setPrepared(false)},_compute:function(property){var COMPUTATIONS=Element.Layout.COMPUTATIONS;if(!(property in COMPUTATIONS)){throw"Property not found."}return this._set(property,COMPUTATIONS[property].call(this,this.element))},_isPrepared:function(){return this.element.retrieve("prototype_element_layout_prepared",false)},_setPrepared:function(bool){return this.element.store("prototype_element_layout_prepared",bool)},toObject:function(){var args=$A(arguments);var keys=args.length===0?Element.Layout.PROPERTIES:args.join(" ").split(" ");var obj={};keys.each(function(key){if(!Element.Layout.PROPERTIES.include(key))return;var value=this.get(key);if(value!=null)obj[key]=value},this);return obj},toHash:function(){var obj=this.toObject.apply(this,arguments);return new Hash(obj)},toCSS:function(){var args=$A(arguments);var keys=args.length===0?Element.Layout.PROPERTIES:args.join(" ").split(" ");var css={};keys.each(function(key){if(!Element.Layout.PROPERTIES.include(key))return;if(Element.Layout.COMPOSITE_PROPERTIES.include(key))return;var value=this.get(key);if(value!=null)css[cssNameFor(key)]=value+"px"},this);return css},inspect:function(){return"#"}});Object.extend(Element.Layout,{PROPERTIES:$w("height width top left right bottom border-left border-right border-top border-bottom padding-left padding-right padding-top padding-bottom margin-top margin-bottom margin-left margin-right padding-box-width padding-box-height border-box-width border-box-height margin-box-width margin-box-height"),COMPOSITE_PROPERTIES:$w("padding-box-width padding-box-height margin-box-width margin-box-height border-box-width border-box-height"),COMPUTATIONS:{height:function(element){if(!this._preComputing)this._begin();var bHeight=this.get("border-box-height");if(bHeight<=0){if(!this._preComputing)this._end();return 0}var bTop=this.get("border-top"),bBottom=this.get("border-bottom");var pTop=this.get("padding-top"),pBottom=this.get("padding-bottom");if(!this._preComputing)this._end();return bHeight-bTop-bBottom-pTop-pBottom},width:function(element){if(!this._preComputing)this._begin();var bWidth=this.get("border-box-width");if(bWidth<=0){if(!this._preComputing)this._end();return 0}var bLeft=this.get("border-left"),bRight=this.get("border-right");var pLeft=this.get("padding-left"),pRight=this.get("padding-right");if(!this._preComputing)this._end();return bWidth-bLeft-bRight-pLeft-pRight},"padding-box-height":function(element){var height=this.get("height"),pTop=this.get("padding-top"),pBottom=this.get("padding-bottom");return height+pTop+pBottom},"padding-box-width":function(element){var width=this.get("width"),pLeft=this.get("padding-left"),pRight=this.get("padding-right");return width+pLeft+pRight},"border-box-height":function(element){if(!this._preComputing)this._begin();var height=element.offsetHeight;if(!this._preComputing)this._end();return height},"border-box-width":function(element){if(!this._preComputing)this._begin();var width=element.offsetWidth;if(!this._preComputing)this._end();return width},"margin-box-height":function(element){var bHeight=this.get("border-box-height"),mTop=this.get("margin-top"),mBottom=this.get("margin-bottom");if(bHeight<=0)return 0;return bHeight+mTop+mBottom},"margin-box-width":function(element){var bWidth=this.get("border-box-width"),mLeft=this.get("margin-left"),mRight=this.get("margin-right");if(bWidth<=0)return 0;return bWidth+mLeft+mRight},top:function(element){var offset=element.positionedOffset();return offset.top},bottom:function(element){var offset=element.positionedOffset(),parent=element.getOffsetParent(),pHeight=parent.measure("height");var mHeight=this.get("border-box-height");return pHeight-mHeight-offset.top},left:function(element){var offset=element.positionedOffset();return offset.left},right:function(element){var offset=element.positionedOffset(),parent=element.getOffsetParent(),pWidth=parent.measure("width");var mWidth=this.get("border-box-width");return pWidth-mWidth-offset.left},"padding-top":function(element){return getPixelValue(element,"paddingTop")},"padding-bottom":function(element){return getPixelValue(element,"paddingBottom")},"padding-left":function(element){return getPixelValue(element,"paddingLeft")},"padding-right":function(element){return getPixelValue(element,"paddingRight")},"border-top":function(element){return getPixelValue(element,"borderTopWidth")},"border-bottom":function(element){return getPixelValue(element,"borderBottomWidth")},"border-left":function(element){return getPixelValue(element,"borderLeftWidth")},"border-right":function(element){return getPixelValue(element,"borderRightWidth")},"margin-top":function(element){return getPixelValue(element,"marginTop")},"margin-bottom":function(element){return getPixelValue(element,"marginBottom")},"margin-left":function(element){return getPixelValue(element,"marginLeft")},"margin-right":function(element){return getPixelValue(element,"marginRight")}}});if("getBoundingClientRect"in document.documentElement){Object.extend(Element.Layout.COMPUTATIONS,{right:function(element){var parent=hasLayout(element.getOffsetParent());var rect=element.getBoundingClientRect(),pRect=parent.getBoundingClientRect();return(pRect.right-rect.right).round()},bottom:function(element){var parent=hasLayout(element.getOffsetParent());var rect=element.getBoundingClientRect(),pRect=parent.getBoundingClientRect();return(pRect.bottom-rect.bottom).round()}})}Element.Offset=Class.create({initialize:function(left,top){this.left=left.round();this.top=top.round();this[0]=this.left;this[1]=this.top},relativeTo:function(offset){return new Element.Offset(this.left-offset.left,this.top-offset.top)},inspect:function(){return"#".interpolate(this)},toString:function(){return"[#{left}, #{top}]".interpolate(this)},toArray:function(){return[this.left,this.top]}});function getLayout(element,preCompute){return new Element.Layout(element,preCompute)}function measure(element,property){return $(element).getLayout().get(property)}function getHeight(element){return Element.getDimensions(element).height}function getWidth(element){return Element.getDimensions(element).width}function getDimensions(element){element=$(element);var display=Element.getStyle(element,"display");if(display&&display!=="none"){return{width:element.offsetWidth,height:element.offsetHeight}}var style=element.style;var originalStyles={visibility:style.visibility,position:style.position,display:style.display};var newStyles={visibility:"hidden",display:"block"};if(originalStyles.position!=="fixed")newStyles.position="absolute";Element.setStyle(element,newStyles);var dimensions={width:element.offsetWidth,height:element.offsetHeight};Element.setStyle(element,originalStyles);return dimensions}function getOffsetParent(element){element=$(element);if(isDocument(element)||isDetached(element)||isBody(element)||isHtml(element))return $(document.body);var isInline=Element.getStyle(element,"display")==="inline";if(!isInline&&element.offsetParent)return $(element.offsetParent);while((element=element.parentNode)&&element!==document.body){if(Element.getStyle(element,"position")!=="static"){return isHtml(element)?$(document.body):$(element)}}return $(document.body)}function cumulativeOffset(element){element=$(element);var valueT=0,valueL=0;if(element.parentNode){do{valueT+=element.offsetTop||0;valueL+=element.offsetLeft||0;element=element.offsetParent}while(element)}return new Element.Offset(valueL,valueT)}function positionedOffset(element){element=$(element);var layout=element.getLayout();var valueT=0,valueL=0;do{valueT+=element.offsetTop||0;valueL+=element.offsetLeft||0;element=element.offsetParent;if(element){if(isBody(element))break;var p=Element.getStyle(element,"position");if(p!=="static")break}}while(element);valueL-=layout.get("margin-top");valueT-=layout.get("margin-left");return new Element.Offset(valueL,valueT)}function cumulativeScrollOffset(element){var valueT=0,valueL=0;do{if(element===document.body){var bodyScrollNode=document.documentElement||document.body.parentNode||document.body;valueT+=!Object.isUndefined(window.pageYOffset)?window.pageYOffset:bodyScrollNode.scrollTop||0;valueL+=!Object.isUndefined(window.pageXOffset)?window.pageXOffset:bodyScrollNode.scrollLeft||0;break}else{valueT+=element.scrollTop||0;valueL+=element.scrollLeft||0;element=element.parentNode}}while(element);return new Element.Offset(valueL,valueT)}function viewportOffset(forElement){var valueT=0,valueL=0,docBody=document.body;forElement=$(forElement);var element=forElement;do{valueT+=element.offsetTop||0;valueL+=element.offsetLeft||0;if(element.offsetParent==docBody&&Element.getStyle(element,"position")=="absolute")break}while(element=element.offsetParent);element=forElement;do{if(element!=docBody){valueT-=element.scrollTop||0;valueL-=element.scrollLeft||0}}while(element=element.parentNode);return new Element.Offset(valueL,valueT)}function absolutize(element){element=$(element);if(Element.getStyle(element,"position")==="absolute"){return element}var offsetParent=getOffsetParent(element);var eOffset=element.viewportOffset(),pOffset=offsetParent.viewportOffset();var offset=eOffset.relativeTo(pOffset);var layout=element.getLayout();element.store("prototype_absolutize_original_styles",{position:element.getStyle("position"),left:element.getStyle("left"),top:element.getStyle("top"),width:element.getStyle("width"),height:element.getStyle("height")});element.setStyle({position:"absolute",top:offset.top+"px",left:offset.left+"px",width:layout.get("width")+"px",height:layout.get("height")+"px"});return element}function relativize(element){element=$(element);if(Element.getStyle(element,"position")==="relative"){return element}var originalStyles=element.retrieve("prototype_absolutize_original_styles");if(originalStyles)element.setStyle(originalStyles);return element}function scrollTo(element){element=$(element);var pos=Element.cumulativeOffset(element);window.scrollTo(pos.left,pos.top);return element}function makePositioned(element){element=$(element);var position=Element.getStyle(element,"position"),styles={};if(position==="static"||!position){styles.position="relative";if(Prototype.Browser.Opera){styles.top=0;styles.left=0}Element.setStyle(element,styles);Element.store(element,"prototype_made_positioned",true)}return element}function undoPositioned(element){element=$(element);var storage=Element.getStorage(element),madePositioned=storage.get("prototype_made_positioned");if(madePositioned){storage.unset("prototype_made_positioned");Element.setStyle(element,{position:"",top:"",bottom:"",left:"",right:""})}return element}function makeClipping(element){element=$(element);var storage=Element.getStorage(element),madeClipping=storage.get("prototype_made_clipping");if(Object.isUndefined(madeClipping)){var overflow=Element.getStyle(element,"overflow");storage.set("prototype_made_clipping",overflow);if(overflow!=="hidden")element.style.overflow="hidden"}return element}function undoClipping(element){element=$(element);var storage=Element.getStorage(element),overflow=storage.get("prototype_made_clipping");if(!Object.isUndefined(overflow)){storage.unset("prototype_made_clipping");element.style.overflow=overflow||""}return element}function clonePosition(element,source,options){options=Object.extend({setLeft:true,setTop:true,setWidth:true,setHeight:true,offsetTop:0,offsetLeft:0},options||{});source=$(source);element=$(element);var p,delta,layout,styles={};if(options.setLeft||options.setTop){p=Element.viewportOffset(source);delta=[0,0];if(Element.getStyle(element,"position")==="absolute"){var parent=Element.getOffsetParent(element);if(parent!==document.body)delta=Element.viewportOffset(parent)}}if(options.setWidth||options.setHeight){layout=Element.getLayout(source)}if(options.setLeft)styles.left=p[0]-delta[0]+options.offsetLeft+"px";if(options.setTop)styles.top=p[1]-delta[1]+options.offsetTop+"px";if(options.setWidth)styles.width=layout.get("border-box-width")+"px";if(options.setHeight)styles.height=layout.get("border-box-height")+"px";return Element.setStyle(element,styles)}if(Prototype.Browser.IE){getOffsetParent=getOffsetParent.wrap(function(proceed,element){element=$(element);if(isDocument(element)||isDetached(element)||isBody(element)||isHtml(element))return $(document.body);var position=element.getStyle("position");if(position!=="static")return proceed(element);element.setStyle({position:"relative"});var value=proceed(element);element.setStyle({position:position});return value});positionedOffset=positionedOffset.wrap(function(proceed,element){element=$(element);if(!element.parentNode)return new Element.Offset(0,0);var position=element.getStyle("position"); +Math.crossProduct = function(x, y){ + [ + x[1]*y[2]-x[2]*y[1], + x[2]*y[0]-x[0]*y[2], + x[0]*y[1]-x[1]*y[0] + ] +} -if(position!=="static")return proceed(element);var offsetParent=element.getOffsetParent();if(offsetParent&&offsetParent.getStyle("position")==="fixed")hasLayout(offsetParent);element.setStyle({position:"relative"});var value=proceed(element);element.setStyle({position:position});return value})}else if(Prototype.Browser.Webkit){cumulativeOffset=function(element){element=$(element);var valueT=0,valueL=0;do{valueT+=element.offsetTop||0;valueL+=element.offsetLeft||0;if(element.offsetParent==document.body){if(Element.getStyle(element,"position")=="absolute")break}element=element.offsetParent}while(element);return new Element.Offset(valueL,valueT)}}Element.addMethods({getLayout:getLayout,measure:measure,getWidth:getWidth,getHeight:getHeight,getDimensions:getDimensions,getOffsetParent:getOffsetParent,cumulativeOffset:cumulativeOffset,positionedOffset:positionedOffset,cumulativeScrollOffset:cumulativeScrollOffset,viewportOffset:viewportOffset,absolutize:absolutize,relativize:relativize,scrollTo:scrollTo,makePositioned:makePositioned,undoPositioned:undoPositioned,makeClipping:makeClipping,undoClipping:undoClipping,clonePosition:clonePosition});function isBody(element){return element.nodeName.toUpperCase()==="BODY"}function isHtml(element){return element.nodeName.toUpperCase()==="HTML"}function isDocument(element){return element.nodeType===Node.DOCUMENT_NODE}function isDetached(element){return element!==document.body&&!Element.descendantOf(element,document.body)}if("getBoundingClientRect"in document.documentElement){Element.addMethods({viewportOffset:function(element){element=$(element);if(isDetached(element))return new Element.Offset(0,0);var rect=element.getBoundingClientRect(),docEl=document.documentElement;return new Element.Offset(rect.left-docEl.clientLeft,rect.top-docEl.clientTop)}})}})();(function(){var IS_OLD_OPERA=Prototype.Browser.Opera&&window.parseFloat(window.opera.version())<9.5;var ROOT=null;function getRootElement(){if(ROOT)return ROOT;ROOT=IS_OLD_OPERA?document.body:document.documentElement;return ROOT}function getDimensions(){return{width:this.getWidth(),height:this.getHeight()}}function getWidth(){return getRootElement().clientWidth}function getHeight(){return getRootElement().clientHeight}function getScrollOffsets(){var x=window.pageXOffset||document.documentElement.scrollLeft||document.body.scrollLeft;var y=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop;return new Element.Offset(x,y)}document.viewport={getDimensions:getDimensions,getWidth:getWidth,getHeight:getHeight,getScrollOffsets:getScrollOffsets}})();window.$$=function(){var expression=$A(arguments).join(", ");return Prototype.Selector.select(expression,document)};Prototype.Selector=function(){function select(){throw new Error('Method "Prototype.Selector.select" must be defined.')}function match(){throw new Error('Method "Prototype.Selector.match" must be defined.')}function find(elements,expression,index){index=index||0;var match=Prototype.Selector.match,length=elements.length,matchIndex=0,i;for(i=0;i+~]|"+whitespace+")"+whitespace+"*"),rattributeQuotes=new RegExp("="+whitespace+"*([^\\]'\"]*?)"+whitespace+"*\\]","g"),rpseudo=new RegExp(pseudos),ridentifier=new RegExp("^"+identifier+"$"),matchExpr={ID:new RegExp("^#("+characterEncoding+")"),CLASS:new RegExp("^\\.("+characterEncoding+")"),TAG:new RegExp("^("+characterEncoding.replace("w","w*")+")"),ATTR:new RegExp("^"+attributes),PSEUDO:new RegExp("^"+pseudos),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+whitespace+"*(even|odd|(([+-]|)(\\d*)n|)"+whitespace+"*(?:([+-]|)"+whitespace+"*(\\d+)|))"+whitespace+"*\\)|)","i"),bool:new RegExp("^(?:"+booleans+")$","i"),needsContext:new RegExp("^"+whitespace+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+whitespace+"*((?:-\\d)?\\d*)"+whitespace+"*\\)|)(?=[^-]|$)","i")},rinputs=/^(?:input|select|textarea|button)$/i,rheader=/^h\d$/i,rnative=/^[^{]+\{\s*\[native \w/,rquickExpr=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,rsibling=/[+~]/,rescape=/'|\\/g,runescape=new RegExp("\\\\([\\da-f]{1,6}"+whitespace+"?|("+whitespace+")|.)","ig"),funescape=function(_,escaped,escapedWhitespace){var high="0x"+escaped-65536;return high!==high||escapedWhitespace?escaped:high<0?String.fromCharCode(high+65536):String.fromCharCode(high>>10|55296,high&1023|56320)};try{push.apply(arr=slice.call(preferredDoc.childNodes),preferredDoc.childNodes);arr[preferredDoc.childNodes.length].nodeType}catch(e){push={apply:arr.length?function(target,els){push_native.apply(target,slice.call(els))}:function(target,els){var j=target.length,i=0;while(target[j++]=els[i++]){}target.length=j-1}}}function Sizzle(selector,context,results,seed){var match,elem,m,nodeType,i,groups,old,nid,newContext,newSelector;if((context?context.ownerDocument||context:preferredDoc)!==document){setDocument(context)}context=context||document;results=results||[];if(!selector||typeof selector!=="string"){return results}if((nodeType=context.nodeType)!==1&&nodeType!==9){return[]}if(documentIsHTML&&!seed){if(match=rquickExpr.exec(selector)){if(m=match[1]){if(nodeType===9){elem=context.getElementById(m);if(elem&&elem.parentNode){if(elem.id===m){results.push(elem);return results}}else{return results}}else{if(context.ownerDocument&&(elem=context.ownerDocument.getElementById(m))&&contains(context,elem)&&elem.id===m){results.push(elem);return results}}}else if(match[2]){push.apply(results,context.getElementsByTagName(selector));return results}else if((m=match[3])&&support.getElementsByClassName&&context.getElementsByClassName){push.apply(results,context.getElementsByClassName(m));return results}}if(support.qsa&&(!rbuggyQSA||!rbuggyQSA.test(selector))){nid=old=expando;newContext=context;newSelector=nodeType===9&&selector;if(nodeType===1&&context.nodeName.toLowerCase()!=="object"){groups=tokenize(selector);if(old=context.getAttribute("id")){nid=old.replace(rescape,"\\$&")}else{context.setAttribute("id",nid)}nid="[id='"+nid+"'] ";i=groups.length;while(i--){groups[i]=nid+toSelector(groups[i])}newContext=rsibling.test(selector)&&testContext(context.parentNode)||context;newSelector=groups.join(",")}if(newSelector){try{push.apply(results,newContext.querySelectorAll(newSelector));return results}catch(qsaError){}finally{if(!old){context.removeAttribute("id")}}}}}return select(selector.replace(rtrim,"$1"),context,results,seed)}function createCache(){var keys=[];function cache(key,value){if(keys.push(key+" ")>Expr.cacheLength){delete cache[keys.shift()]}return cache[key+" "]=value}return cache}function markFunction(fn){fn[expando]=true;return fn}function assert(fn){var div=document.createElement("div");try{return!!fn(div)}catch(e){return false}finally{if(div.parentNode){div.parentNode.removeChild(div)}div=null}}function addHandle(attrs,handler){var arr=attrs.split("|"),i=attrs.length;while(i--){Expr.attrHandle[arr[i]]=handler}}function siblingCheck(a,b){var cur=b&&a,diff=cur&&a.nodeType===1&&b.nodeType===1&&(~b.sourceIndex||MAX_NEGATIVE)-(~a.sourceIndex||MAX_NEGATIVE);if(diff){return diff}if(cur){while(cur=cur.nextSibling){if(cur===b){return-1}}}return a?1:-1}function createInputPseudo(type){return function(elem){var name=elem.nodeName.toLowerCase();return name==="input"&&elem.type===type}}function createButtonPseudo(type){return function(elem){var name=elem.nodeName.toLowerCase();return(name==="input"||name==="button")&&elem.type===type}}function createPositionalPseudo(fn){return markFunction(function(argument){argument=+argument;return markFunction(function(seed,matches){var j,matchIndexes=fn([],seed.length,argument),i=matchIndexes.length;while(i--){if(seed[j=matchIndexes[i]]){seed[j]=!(matches[j]=seed[j])}}})})}function testContext(context){return context&&typeof context.getElementsByTagName!==strundefined&&context}support=Sizzle.support={};isXML=Sizzle.isXML=function(elem){var documentElement=elem&&(elem.ownerDocument||elem).documentElement;return documentElement?documentElement.nodeName!=="HTML":false};setDocument=Sizzle.setDocument=function(node){var hasCompare,doc=node?node.ownerDocument||node:preferredDoc,parent=doc.defaultView;if(doc===document||doc.nodeType!==9||!doc.documentElement){return document}document=doc;docElem=doc.documentElement;documentIsHTML=!isXML(doc);if(parent&&parent!==parent.top){if(parent.addEventListener){parent.addEventListener("unload",function(){setDocument()},false)}else if(parent.attachEvent){parent.attachEvent("onunload",function(){setDocument()})}}support.attributes=assert(function(div){div.className="i";return!div.getAttribute("className")});support.getElementsByTagName=assert(function(div){div.appendChild(doc.createComment(""));return!div.getElementsByTagName("*").length});support.getElementsByClassName=rnative.test(doc.getElementsByClassName)&&assert(function(div){div.innerHTML="

    ";div.firstChild.className="i";return div.getElementsByClassName("i").length===2});support.getById=assert(function(div){docElem.appendChild(div).id=expando;return!doc.getElementsByName||!doc.getElementsByName(expando).length});if(support.getById){Expr.find["ID"]=function(id,context){if(typeof context.getElementById!==strundefined&&documentIsHTML){var m=context.getElementById(id);return m&&m.parentNode?[m]:[]}};Expr.filter["ID"]=function(id){var attrId=id.replace(runescape,funescape);return function(elem){return elem.getAttribute("id")===attrId}}}else{delete Expr.find["ID"];Expr.filter["ID"]=function(id){var attrId=id.replace(runescape,funescape);return function(elem){var node=typeof elem.getAttributeNode!==strundefined&&elem.getAttributeNode("id");return node&&node.value===attrId}}}Expr.find["TAG"]=support.getElementsByTagName?function(tag,context){if(typeof context.getElementsByTagName!==strundefined){return context.getElementsByTagName(tag)}}:function(tag,context){var elem,tmp=[],i=0,results=context.getElementsByTagName(tag);if(tag==="*"){while(elem=results[i++]){if(elem.nodeType===1){tmp.push(elem)}}return tmp}return results};Expr.find["CLASS"]=support.getElementsByClassName&&function(className,context){if(typeof context.getElementsByClassName!==strundefined&&documentIsHTML){return context.getElementsByClassName(className)}};rbuggyMatches=[];rbuggyQSA=[];if(support.qsa=rnative.test(doc.querySelectorAll)){assert(function(div){div.innerHTML="";if(div.querySelectorAll("[t^='']").length){rbuggyQSA.push("[*^$]="+whitespace+"*(?:''|\"\")")}if(!div.querySelectorAll("[selected]").length){rbuggyQSA.push("\\["+whitespace+"*(?:value|"+booleans+")")}if(!div.querySelectorAll(":checked").length){rbuggyQSA.push(":checked")}});assert(function(div){var input=doc.createElement("input");input.setAttribute("type","hidden");div.appendChild(input).setAttribute("name","D");if(div.querySelectorAll("[name=d]").length){rbuggyQSA.push("name"+whitespace+"*[*^$|!~]?=")}if(!div.querySelectorAll(":enabled").length){rbuggyQSA.push(":enabled",":disabled")}div.querySelectorAll("*,:x");rbuggyQSA.push(",.*:")})}if(support.matchesSelector=rnative.test(matches=docElem.webkitMatchesSelector||docElem.mozMatchesSelector||docElem.oMatchesSelector||docElem.msMatchesSelector)){assert(function(div){support.disconnectedMatch=matches.call(div,"div");matches.call(div,"[s!='']:x");rbuggyMatches.push("!=",pseudos)})}rbuggyQSA=rbuggyQSA.length&&new RegExp(rbuggyQSA.join("|"));rbuggyMatches=rbuggyMatches.length&&new RegExp(rbuggyMatches.join("|"));hasCompare=rnative.test(docElem.compareDocumentPosition);contains=hasCompare||rnative.test(docElem.contains)?function(a,b){var adown=a.nodeType===9?a.documentElement:a,bup=b&&b.parentNode;return a===bup||!!(bup&&bup.nodeType===1&&(adown.contains?adown.contains(bup):a.compareDocumentPosition&&a.compareDocumentPosition(bup)&16))}:function(a,b){if(b){while(b=b.parentNode){if(b===a){return true}}}return false};sortOrder=hasCompare?function(a,b){if(a===b){hasDuplicate=true;return 0}var compare=!a.compareDocumentPosition-!b.compareDocumentPosition;if(compare){return compare}compare=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1;if(compare&1||!support.sortDetached&&b.compareDocumentPosition(a)===compare){if(a===doc||a.ownerDocument===preferredDoc&&contains(preferredDoc,a)){return-1}if(b===doc||b.ownerDocument===preferredDoc&&contains(preferredDoc,b)){return 1}return sortInput?indexOf.call(sortInput,a)-indexOf.call(sortInput,b):0}return compare&4?-1:1}:function(a,b){if(a===b){hasDuplicate=true;return 0}var cur,i=0,aup=a.parentNode,bup=b.parentNode,ap=[a],bp=[b];if(!aup||!bup){return a===doc?-1:b===doc?1:aup?-1:bup?1:sortInput?indexOf.call(sortInput,a)-indexOf.call(sortInput,b):0}else if(aup===bup){return siblingCheck(a,b)}cur=a;while(cur=cur.parentNode){ap.unshift(cur)}cur=b;while(cur=cur.parentNode){bp.unshift(cur)}while(ap[i]===bp[i]){i++}return i?siblingCheck(ap[i],bp[i]):ap[i]===preferredDoc?-1:bp[i]===preferredDoc?1:0};return doc};Sizzle.matches=function(expr,elements){return Sizzle(expr,null,null,elements)};Sizzle.matchesSelector=function(elem,expr){if((elem.ownerDocument||elem)!==document){setDocument(elem)}expr=expr.replace(rattributeQuotes,"='$1']");if(support.matchesSelector&&documentIsHTML&&(!rbuggyMatches||!rbuggyMatches.test(expr))&&(!rbuggyQSA||!rbuggyQSA.test(expr))){try{var ret=matches.call(elem,expr);if(ret||support.disconnectedMatch||elem.document&&elem.document.nodeType!==11){return ret}}catch(e){}}return Sizzle(expr,document,null,[elem]).length>0};Sizzle.contains=function(context,elem){if((context.ownerDocument||context)!==document){setDocument(context)}return contains(context,elem)};Sizzle.attr=function(elem,name){if((elem.ownerDocument||elem)!==document){setDocument(elem)}var fn=Expr.attrHandle[name.toLowerCase()],val=fn&&hasOwn.call(Expr.attrHandle,name.toLowerCase())?fn(elem,name,!documentIsHTML):undefined;return val!==undefined?val:support.attributes||!documentIsHTML?elem.getAttribute(name):(val=elem.getAttributeNode(name))&&val.specified?val.value:null};Sizzle.error=function(msg){throw new Error("Syntax error, unrecognized expression: "+msg)};Sizzle.uniqueSort=function(results){var elem,duplicates=[],j=0,i=0;hasDuplicate=!support.detectDuplicates;sortInput=!support.sortStable&&results.slice(0);results.sort(sortOrder);if(hasDuplicate){while(elem=results[i++]){if(elem===results[i]){j=duplicates.push(i)}}while(j--){results.splice(duplicates[j],1)}}sortInput=null;return results};getText=Sizzle.getText=function(elem){var node,ret="",i=0,nodeType=elem.nodeType;if(!nodeType){while(node=elem[i++]){ret+=getText(node)}}else if(nodeType===1||nodeType===9||nodeType===11){if(typeof elem.textContent==="string"){return elem.textContent}else{for(elem=elem.firstChild;elem;elem=elem.nextSibling){ret+=getText(elem)}}}else if(nodeType===3||nodeType===4){return elem.nodeValue}return ret};Expr=Sizzle.selectors={cacheLength:50,createPseudo:markFunction,match:matchExpr,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:true}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:true},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(match){match[1]=match[1].replace(runescape,funescape);match[3]=(match[4]||match[5]||"").replace(runescape,funescape);if(match[2]==="~="){match[3]=" "+match[3]+" "}return match.slice(0,4)},CHILD:function(match){match[1]=match[1].toLowerCase();if(match[1].slice(0,3)==="nth"){if(!match[3]){Sizzle.error(match[0])}match[4]=+(match[4]?match[5]+(match[6]||1):2*(match[3]==="even"||match[3]==="odd"));match[5]=+(match[7]+match[8]||match[3]==="odd")}else if(match[3]){Sizzle.error(match[0])}return match},PSEUDO:function(match){var excess,unquoted=!match[5]&&match[2];if(matchExpr["CHILD"].test(match[0])){return null}if(match[3]&&match[4]!==undefined){match[2]=match[4]}else if(unquoted&&rpseudo.test(unquoted)&&(excess=tokenize(unquoted,true))&&(excess=unquoted.indexOf(")",unquoted.length-excess)-unquoted.length)){match[0]=match[0].slice(0,excess);match[2]=unquoted.slice(0,excess)}return match.slice(0,3)}},filter:{TAG:function(nodeNameSelector){var nodeName=nodeNameSelector.replace(runescape,funescape).toLowerCase();return nodeNameSelector==="*"?function(){return true}:function(elem){return elem.nodeName&&elem.nodeName.toLowerCase()===nodeName}},CLASS:function(className){var pattern=classCache[className+" "];return pattern||(pattern=new RegExp("(^|"+whitespace+")"+className+"("+whitespace+"|$)"))&&classCache(className,function(elem){return pattern.test(typeof elem.className==="string"&&elem.className||typeof elem.getAttribute!==strundefined&&elem.getAttribute("class")||"")})},ATTR:function(name,operator,check){return function(elem){var result=Sizzle.attr(elem,name);if(result==null){return operator==="!="}if(!operator){return true}result+="";return operator==="="?result===check:operator==="!="?result!==check:operator==="^="?check&&result.indexOf(check)===0:operator==="*="?check&&result.indexOf(check)>-1:operator==="$="?check&&result.slice(-check.length)===check:operator==="~="?(" "+result+" ").indexOf(check)>-1:operator==="|="?result===check||result.slice(0,check.length+1)===check+"-":false}},CHILD:function(type,what,argument,first,last){var simple=type.slice(0,3)!=="nth",forward=type.slice(-4)!=="last",ofType=what==="of-type";return first===1&&last===0?function(elem){return!!elem.parentNode}:function(elem,context,xml){var cache,outerCache,node,diff,nodeIndex,start,dir=simple!==forward?"nextSibling":"previousSibling",parent=elem.parentNode,name=ofType&&elem.nodeName.toLowerCase(),useCache=!xml&&!ofType;if(parent){if(simple){while(dir){node=elem;while(node=node[dir]){if(ofType?node.nodeName.toLowerCase()===name:node.nodeType===1){return false}}start=dir=type==="only"&&!start&&"nextSibling"}return true}start=[forward?parent.firstChild:parent.lastChild];if(forward&&useCache){outerCache=parent[expando]||(parent[expando]={});cache=outerCache[type]||[];nodeIndex=cache[0]===dirruns&&cache[1];diff=cache[0]===dirruns&&cache[2];node=nodeIndex&&parent.childNodes[nodeIndex];while(node=++nodeIndex&&node&&node[dir]||(diff=nodeIndex=0)||start.pop()){if(node.nodeType===1&&++diff&&node===elem){outerCache[type]=[dirruns,nodeIndex,diff];break}}}else if(useCache&&(cache=(elem[expando]||(elem[expando]={}))[type])&&cache[0]===dirruns){diff=cache[1]}else{while(node=++nodeIndex&&node&&node[dir]||(diff=nodeIndex=0)||start.pop()){if((ofType?node.nodeName.toLowerCase()===name:node.nodeType===1)&&++diff){if(useCache){(node[expando]||(node[expando]={}))[type]=[dirruns,diff]}if(node===elem){break}}}}diff-=last;return diff===first||diff%first===0&&diff/first>=0}}},PSEUDO:function(pseudo,argument){var args,fn=Expr.pseudos[pseudo]||Expr.setFilters[pseudo.toLowerCase()]||Sizzle.error("unsupported pseudo: "+pseudo);if(fn[expando]){return fn(argument)}if(fn.length>1){args=[pseudo,pseudo,"",argument];return Expr.setFilters.hasOwnProperty(pseudo.toLowerCase())?markFunction(function(seed,matches){var idx,matched=fn(seed,argument),i=matched.length;while(i--){idx=indexOf.call(seed,matched[i]);seed[idx]=!(matches[idx]=matched[i])}}):function(elem){return fn(elem,0,args)}}return fn}},pseudos:{not:markFunction(function(selector){var input=[],results=[],matcher=compile(selector.replace(rtrim,"$1"));return matcher[expando]?markFunction(function(seed,matches,context,xml){var elem,unmatched=matcher(seed,null,xml,[]),i=seed.length;while(i--){if(elem=unmatched[i]){seed[i]=!(matches[i]=elem)}}}):function(elem,context,xml){input[0]=elem;matcher(input,null,xml,results);return!results.pop()}}),has:markFunction(function(selector){return function(elem){return Sizzle(selector,elem).length>0}}),contains:markFunction(function(text){return function(elem){return(elem.textContent||elem.innerText||getText(elem)).indexOf(text)>-1}}),lang:markFunction(function(lang){if(!ridentifier.test(lang||"")){Sizzle.error("unsupported lang: "+lang)}lang=lang.replace(runescape,funescape).toLowerCase();return function(elem){var elemLang;do{if(elemLang=documentIsHTML?elem.lang:elem.getAttribute("xml:lang")||elem.getAttribute("lang")){elemLang=elemLang.toLowerCase();return elemLang===lang||elemLang.indexOf(lang+"-")===0}}while((elem=elem.parentNode)&&elem.nodeType===1);return false}}),target:function(elem){var hash=window.location&&window.location.hash;return hash&&hash.slice(1)===elem.id},root:function(elem){return elem===docElem},focus:function(elem){return elem===document.activeElement&&(!document.hasFocus||document.hasFocus())&&!!(elem.type||elem.href||~elem.tabIndex)},enabled:function(elem){return elem.disabled===false},disabled:function(elem){return elem.disabled===true},checked:function(elem){var nodeName=elem.nodeName.toLowerCase();return nodeName==="input"&&!!elem.checked||nodeName==="option"&&!!elem.selected},selected:function(elem){if(elem.parentNode){elem.parentNode.selectedIndex}return elem.selected===true},empty:function(elem){for(elem=elem.firstChild;elem;elem=elem.nextSibling){if(elem.nodeType<6){return false}}return true},parent:function(elem){return!Expr.pseudos["empty"](elem)},header:function(elem){return rheader.test(elem.nodeName)},input:function(elem){return rinputs.test(elem.nodeName)},button:function(elem){var name=elem.nodeName.toLowerCase();return name==="input"&&elem.type==="button"||name==="button"},text:function(elem){var attr;return elem.nodeName.toLowerCase()==="input"&&elem.type==="text"&&((attr=elem.getAttribute("type"))==null||attr.toLowerCase()==="text")},first:createPositionalPseudo(function(){return[0]}),last:createPositionalPseudo(function(matchIndexes,length){return[length-1]}),eq:createPositionalPseudo(function(matchIndexes,length,argument){return[argument<0?argument+length:argument]}),even:createPositionalPseudo(function(matchIndexes,length){var i=0;for(;i=0;){matchIndexes.push(i)}return matchIndexes}),gt:createPositionalPseudo(function(matchIndexes,length,argument){var i=argument<0?argument+length:argument;for(;++i1?function(elem,context,xml){var i=matchers.length;while(i--){if(!matchers[i](elem,context,xml)){return false}}return true}:matchers[0]}function multipleContexts(selector,contexts,results){var i=0,len=contexts.length;for(;i-1){seed[temp]=!(results[temp]=elem)}}}}else{matcherOut=condense(matcherOut===results?matcherOut.splice(preexisting,matcherOut.length):matcherOut);if(postFinder){postFinder(null,results,matcherOut,xml)}else{push.apply(results,matcherOut)}}})}function matcherFromTokens(tokens){var checkContext,matcher,j,len=tokens.length,leadingRelative=Expr.relative[tokens[0].type],implicitRelative=leadingRelative||Expr.relative[" "],i=leadingRelative?1:0,matchContext=addCombinator(function(elem){return elem===checkContext},implicitRelative,true),matchAnyContext=addCombinator(function(elem){return indexOf.call(checkContext,elem)>-1},implicitRelative,true),matchers=[function(elem,context,xml){return!leadingRelative&&(xml||context!==outermostContext)||((checkContext=context).nodeType?matchContext(elem,context,xml):matchAnyContext(elem,context,xml))}];for(;i1&&elementMatcher(matchers),i>1&&toSelector(tokens.slice(0,i-1).concat({value:tokens[i-2].type===" "?"*":""})).replace(rtrim,"$1"),matcher,i0,byElement=elementMatchers.length>0,superMatcher=function(seed,context,xml,results,outermost){var elem,j,matcher,matchedCount=0,i="0",unmatched=seed&&[],setMatched=[],contextBackup=outermostContext,elems=seed||byElement&&Expr.find["TAG"]("*",outermost),dirrunsUnique=dirruns+=contextBackup==null?1:Math.random()||.1,len=elems.length;if(outermost){outermostContext=context!==document&&context}for(;i!==len&&(elem=elems[i])!=null;i++){if(byElement&&elem){j=0;while(matcher=elementMatchers[j++]){if(matcher(elem,context,xml)){results.push(elem);break}}if(outermost){dirruns=dirrunsUnique}}if(bySet){if(elem=!matcher&&elem){matchedCount--}if(seed){unmatched.push(elem)}}}matchedCount+=i;if(bySet&&i!==matchedCount){j=0;while(matcher=setMatchers[j++]){matcher(unmatched,setMatched,context,xml)}if(seed){if(matchedCount>0){while(i--){if(!(unmatched[i]||setMatched[i])){setMatched[i]=pop.call(results)}}}setMatched=condense(setMatched)}push.apply(results,setMatched);if(outermost&&!seed&&setMatched.length>0&&matchedCount+setMatchers.length>1){Sizzle.uniqueSort(results)}}if(outermost){dirruns=dirrunsUnique;outermostContext=contextBackup}return unmatched};return bySet?markFunction(superMatcher):superMatcher}compile=Sizzle.compile=function(selector,match){var i,setMatchers=[],elementMatchers=[],cached=compilerCache[selector+" "];if(!cached){if(!match){match=tokenize(selector)}i=match.length;while(i--){cached=matcherFromTokens(match[i]);if(cached[expando]){setMatchers.push(cached)}else{elementMatchers.push(cached)}}cached=compilerCache(selector,matcherFromGroupMatchers(elementMatchers,setMatchers));cached.selector=selector}return cached};select=Sizzle.select=function(selector,context,results,seed){var i,tokens,token,type,find,compiled=typeof selector==="function"&&selector,match=!seed&&tokenize(selector=compiled.selector||selector);results=results||[];if(match.length===1){tokens=match[0]=match[0].slice(0);if(tokens.length>2&&(token=tokens[0]).type==="ID"&&support.getById&&context.nodeType===9&&documentIsHTML&&Expr.relative[tokens[1].type]){context=(Expr.find["ID"](token.matches[0].replace(runescape,funescape),context)||[])[0];if(!context){return results}else if(compiled){context=context.parentNode}selector=selector.slice(tokens.shift().value.length)}i=matchExpr["needsContext"].test(selector)?0:tokens.length;while(i--){token=tokens[i];if(Expr.relative[type=token.type]){break}if(find=Expr.find[type]){if(seed=find(token.matches[0].replace(runescape,funescape),rsibling.test(tokens[0].type)&&testContext(context.parentNode)||context)){ -tokens.splice(i,1);selector=seed.length&&toSelector(tokens);if(!selector){push.apply(results,seed);return results}break}}}}(compiled||compile(selector,match))(seed,context,!documentIsHTML,results,rsibling.test(selector)&&testContext(context.parentNode)||context);return results};support.sortStable=expando.split("").sort(sortOrder).join("")===expando;support.detectDuplicates=!!hasDuplicate;setDocument();support.sortDetached=assert(function(div1){return div1.compareDocumentPosition(document.createElement("div"))&1});if(!assert(function(div){div.innerHTML="
    ";return div.firstChild.getAttribute("href")==="#"})){addHandle("type|href|height|width",function(elem,name,isXML){if(!isXML){return elem.getAttribute(name,name.toLowerCase()==="type"?1:2)}})}if(!support.attributes||!assert(function(div){div.innerHTML="";div.firstChild.setAttribute("value","");return div.firstChild.getAttribute("value")===""})){addHandle("value",function(elem,name,isXML){if(!isXML&&elem.nodeName.toLowerCase()==="input"){return elem.defaultValue}})}if(!assert(function(div){return div.getAttribute("disabled")==null})){addHandle(booleans,function(elem,name,isXML){var val;if(!isXML){return elem[name]===true?name.toLowerCase():(val=elem.getAttributeNode(name))&&val.specified?val.value:null}})}if(typeof define==="function"&&define.amd){define(function(){return Sizzle})}else if(typeof module!=="undefined"&&module.exports){module.exports=Sizzle}else{window.Sizzle=Sizzle}})(window);(function(engine){var extendElements=Prototype.Selector.extendElements;function select(selector,scope){return extendElements(engine(selector,scope||document))}function match(element,selector){return engine.matches(selector,[element]).length==1}Prototype.Selector.engine=engine;Prototype.Selector.select=select;Prototype.Selector.match=match})(Sizzle);window.Sizzle=Prototype._original_property;delete Prototype._original_property;var Form={reset:function(form){form=$(form);form.reset();return form},serializeElements:function(elements,options){if(typeof options!="object")options={hash:!!options};else if(Object.isUndefined(options.hash))options.hash=true;var key,value,submitted=false,submit=options.submit,accumulator,initial;if(options.hash){initial={};accumulator=function(result,key,value){if(key in result){if(!Object.isArray(result[key]))result[key]=[result[key]];result[key]=result[key].concat(value)}else result[key]=value;return result}}else{initial="";accumulator=function(result,key,values){if(!Object.isArray(values)){values=[values]}if(!values.length){return result}var encodedKey=encodeURIComponent(key).gsub(/%20/,"+");return result+(result?"&":"")+values.map(function(value){value=value.gsub(/(\r)?\n/,"\r\n");value=encodeURIComponent(value);value=value.gsub(/%20/,"+");return encodedKey+"="+value}).join("&")}}return elements.inject(initial,function(result,element){if(!element.disabled&&element.name){key=element.name;value=$(element).getValue();if(value!=null&&element.type!="file"&&(element.type!="submit"||!submitted&&submit!==false&&(!submit||key==submit)&&(submitted=true))){result=accumulator(result,key,value)}}return result})}};Form.Methods={serialize:function(form,options){return Form.serializeElements(Form.getElements(form),options)},getElements:function(form){var elements=$(form).getElementsByTagName("*");var element,results=[],serializers=Form.Element.Serializers;for(var i=0;element=elements[i];i++){if(serializers[element.tagName.toLowerCase()])results.push(Element.extend(element))}return results},getInputs:function(form,typeName,name){form=$(form);var inputs=form.getElementsByTagName("input");if(!typeName&&!name)return $A(inputs).map(Element.extend);for(var i=0,matchingInputs=[],length=inputs.length;i=0}).sortBy(function(element){return element.tabIndex}).first();return firstByIndex?firstByIndex:elements.find(function(element){return/^(?:input|select|textarea)$/i.test(element.tagName)})},focusFirstElement:function(form){form=$(form);var element=form.findFirstElement();if(element)element.activate();return form},request:function(form,options){form=$(form),options=Object.clone(options||{});var params=options.parameters,action=form.readAttribute("action")||"";if(action.blank())action=window.location.href;options.parameters=form.serialize(true);if(params){if(Object.isString(params))params=params.toQueryParams();Object.extend(options.parameters,params)}if(form.hasAttribute("method")&&!options.method)options.method=form.method;return new Ajax.Request(action,options)}};Form.Element={focus:function(element){$(element).focus();return element},select:function(element){$(element).select();return element}};Form.Element.Methods={serialize:function(element){element=$(element);if(!element.disabled&&element.name){var value=element.getValue();if(value!=undefined){var pair={};pair[element.name]=value;return Object.toQueryString(pair)}}return""},getValue:function(element){element=$(element);var method=element.tagName.toLowerCase();return Form.Element.Serializers[method](element)},setValue:function(element,value){element=$(element);var method=element.tagName.toLowerCase();Form.Element.Serializers[method](element,value);return element},clear:function(element){$(element).value="";return element},present:function(element){return $(element).value!=""},activate:function(element){element=$(element);try{element.focus();if(element.select&&(element.tagName.toLowerCase()!="input"||!/^(?:button|reset|submit)$/i.test(element.type)))element.select()}catch(e){}return element},disable:function(element){element=$(element);element.disabled=true;return element},enable:function(element){element=$(element);element.disabled=false;return element}};var Field=Form.Element;var $F=Form.Element.Methods.getValue;Form.Element.Serializers=function(){function input(element,value){switch(element.type.toLowerCase()){case"checkbox":case"radio":return inputSelector(element,value);default:return valueSelector(element,value)}}function inputSelector(element,value){if(Object.isUndefined(value))return element.checked?element.value:null;else element.checked=!!value}function valueSelector(element,value){if(Object.isUndefined(value))return element.value;else element.value=value}function select(element,value){if(Object.isUndefined(value))return(element.type==="select-one"?selectOne:selectMany)(element);var opt,currentValue,single=!Object.isArray(value);for(var i=0,length=element.length;i=0?optionValue(element.options[index]):null}function selectMany(element){var values,length=element.length;if(!length)return null;for(var i=0,values=[];i=this.offset[1]&&y=this.offset[0]&&x=this.offset[1]&&this.ycomp=this.offset[0]&&this.xcomp0})._each(iterator,context)},set:function(className){this.element.className=className},add:function(classNameToAdd){if(this.include(classNameToAdd))return;this.set($A(this).concat(classNameToAdd).join(" "))},remove:function(classNameToRemove){if(!this.include(classNameToRemove))return;this.set($A(this).without(classNameToRemove).join(" "))},toString:function(){return $A(this).join(" ")}};Object.extend(Element.ClassNames.prototype,Enumerable);(function(){window.Selector=Class.create({initialize:function(expression){this.expression=expression.strip()},findElements:function(rootElement){return Prototype.Selector.select(this.expression,rootElement)},match:function(element){return Prototype.Selector.match(element,this.expression)},toString:function(){return this.expression},inspect:function(){return"#"}});Object.extend(Selector,{matchElements:function(elements,expression){var match=Prototype.Selector.match,results=[];for(var i=0,length=elements.length;i=y;y++)if(l=Math.sin(h),m=Math.tan(h),r=m*Math.sqrt(1-t*l*l),c=Math.sin(2*h),u=i*h-s*c+e*Math.sin(4*h)-o*Math.sin(6*h),d=i-2*s*Math.cos(2*h)+4*e*Math.cos(4*h)-6*o*Math.cos(6*h),p=2*u+r*(u*u+a)-2*n*(r*u+1),_=t*c*(u*u+a-2*n*u)/(2*r),f=2*(n-u)*(r*d-2/c)-2*d,P=p/(_+f),h+=P,1e-10>=Math.abs(P))return h;return Proj4js.reportError("phi4z: No convergence"),null}function e4fn(t){var i,s;return i=1+t,s=1-t,Math.sqrt(Math.pow(i,i)*Math.pow(s,s))}var Proj4js={defaultDatum:"WGS84",transform:function(t,i,s){if(!t.readyToUse)return this.reportError("Proj4js initialization for:"+t.srsCode+" not yet complete"),s;if(!i.readyToUse)return this.reportError("Proj4js initialization for:"+i.srsCode+" not yet complete"),s;if(t.datum&&i.datum&&((t.datum.datum_type==Proj4js.common.PJD_3PARAM||t.datum.datum_type==Proj4js.common.PJD_7PARAM)&&"WGS84"!=i.datumCode||(i.datum.datum_type==Proj4js.common.PJD_3PARAM||i.datum.datum_type==Proj4js.common.PJD_7PARAM)&&"WGS84"!=t.datumCode)){var e=Proj4js.WGS84;this.transform(t,e,s),t=e}return"enu"!=t.axis&&this.adjust_axis(t,!1,s),"longlat"==t.projName?(s.x*=Proj4js.common.D2R,s.y*=Proj4js.common.D2R):(t.to_meter&&(s.x*=t.to_meter,s.y*=t.to_meter),t.inverse(s)),t.from_greenwich&&(s.x+=t.from_greenwich),s=this.datum_transform(t.datum,i.datum,s),i.from_greenwich&&(s.x-=i.from_greenwich),"longlat"==i.projName?(s.x*=Proj4js.common.R2D,s.y*=Proj4js.common.R2D):(i.forward(s),i.to_meter&&(s.x/=i.to_meter,s.y/=i.to_meter)),"enu"!=i.axis&&this.adjust_axis(i,!0,s),s},datum_transform:function(t,i,s){return t.compare_datums(i)?s:t.datum_type==Proj4js.common.PJD_NODATUM||i.datum_type==Proj4js.common.PJD_NODATUM?s:((t.es!=i.es||t.a!=i.a||t.datum_type==Proj4js.common.PJD_3PARAM||t.datum_type==Proj4js.common.PJD_7PARAM||i.datum_type==Proj4js.common.PJD_3PARAM||i.datum_type==Proj4js.common.PJD_7PARAM)&&(t.geodetic_to_geocentric(s),(t.datum_type==Proj4js.common.PJD_3PARAM||t.datum_type==Proj4js.common.PJD_7PARAM)&&t.geocentric_to_wgs84(s),(i.datum_type==Proj4js.common.PJD_3PARAM||i.datum_type==Proj4js.common.PJD_7PARAM)&&i.geocentric_from_wgs84(s),i.geocentric_to_geodetic(s)),s)},adjust_axis:function(t,i,s){for(var e,o,n=s.x,a=s.y,r=s.z||0,h=0;3>h;h++)if(!i||2!=h||void 0!==s.z)switch(0==h?(e=n,o="x"):1==h?(e=a,o="y"):(e=r,o="z"),t.axis[h]){case"e":s[o]=e;break;case"w":s[o]=-e;break;case"n":s[o]=e;break;case"s":s[o]=-e;break;case"u":void 0!==s[o]&&(s.z=e);break;case"d":void 0!==s[o]&&(s.z=-e);break;default:return alert("ERROR: unknow axis ("+t.axis[h]+") - check definition of "+t.projName),null}return s},reportError:function(){},extend:function(t,i){if(t=t||{},i)for(var s in i){var e=i[s];void 0!==e&&(t[s]=e)}return t},Class:function(){for(var t,i=function(){this.initialize.apply(this,arguments)},s={},e=0;arguments.length>e;++e)t="function"==typeof arguments[e]?arguments[e].prototype:arguments[e],Proj4js.extend(s,t);return i.prototype=s,i},bind:function(t,i){var s=Array.prototype.slice.apply(arguments,[2]);return function(){var e=s.concat(Array.prototype.slice.apply(arguments,[0])); +Math.sign = Math.sign || function(x) { + x = +x; // convert to a number + if (x === 0 || isNaN(x)) { + return x; + } + return x > 0 ? 1 : -1; +} -return t.apply(i,e)}},scriptName:"proj4js-combined.js",defsLookupService:"http://spatialreference.org/ref",libPath:null,getScriptLocation:function(){if(this.libPath)return this.libPath;for(var t=this.scriptName,i=t.length,s=document.getElementsByTagName("script"),e=0;s.length>e;e++){var o=s[e].getAttribute("src");if(o){var n=o.lastIndexOf(t);if(n>-1&&n+i==o.length){this.libPath=o.slice(0,-i);break}}}return this.libPath||""},loadScript:function(t,i,s,e){var o=document.createElement("script");o.defer=!1,o.type="text/javascript",o.id=t,o.src=t,o.onload=i,o.onerror=s,o.loadCheck=e,/MSIE/.test(navigator.userAgent)&&(o.onreadystatechange=this.checkReadyState),document.getElementsByTagName("head")[0].appendChild(o)},checkReadyState:function(){"loaded"==this.readyState&&(this.loadCheck()?this.onload():this.onerror())}};Proj4js.Proj=Proj4js.Class({readyToUse:!1,title:null,projName:null,units:null,datum:null,x0:0,y0:0,localCS:!1,queue:null,initialize:function(t,i){if(this.srsCodeInput=t,this.queue=[],i&&this.queue.push(i),t.indexOf("GEOGCS")>=0||t.indexOf("GEOCCS")>=0||t.indexOf("PROJCS")>=0||t.indexOf("LOCAL_CS")>=0)return this.parseWKT(t),this.deriveConstants(),this.loadProjCode(this.projName),void 0;if(0==t.indexOf("urn:")){var s=t.split(":");"ogc"!=s[1]&&"x-ogc"!=s[1]||"def"!=s[2]||"crs"!=s[3]||(t=s[4]+":"+s[s.length-1])}else if(0==t.indexOf("http://")){var e=t.split("#");e[0].match(/epsg.org/)?t="EPSG:"+e[1]:e[0].match(/RIG.xml/)&&(t="IGNF:"+e[1])}this.srsCode=t.toUpperCase(),0==this.srsCode.indexOf("EPSG")?(this.srsCode=this.srsCode,this.srsAuth="epsg",this.srsProjNumber=this.srsCode.substring(5)):0==this.srsCode.indexOf("IGNF")?(this.srsCode=this.srsCode,this.srsAuth="IGNF",this.srsProjNumber=this.srsCode.substring(5)):0==this.srsCode.indexOf("CRS")?(this.srsCode=this.srsCode,this.srsAuth="CRS",this.srsProjNumber=this.srsCode.substring(4)):(this.srsAuth="",this.srsProjNumber=this.srsCode),this.loadProjDefinition()},loadProjDefinition:function(){if(Proj4js.defs[this.srsCode])return this.defsLoaded(),void 0;var t=Proj4js.getScriptLocation()+"defs/"+this.srsAuth.toUpperCase()+this.srsProjNumber+".js";Proj4js.loadScript(t,Proj4js.bind(this.defsLoaded,this),Proj4js.bind(this.loadFromService,this),Proj4js.bind(this.checkDefsLoaded,this))},loadFromService:function(){var t=Proj4js.defsLookupService+"/"+this.srsAuth+"/"+this.srsProjNumber+"/proj4js/";Proj4js.loadScript(t,Proj4js.bind(this.defsLoaded,this),Proj4js.bind(this.defsFailed,this),Proj4js.bind(this.checkDefsLoaded,this))},defsLoaded:function(){this.parseDefs(),this.loadProjCode(this.projName)},checkDefsLoaded:function(){return Proj4js.defs[this.srsCode]?!0:!1},defsFailed:function(){Proj4js.reportError("failed to load projection definition for: "+this.srsCode),Proj4js.defs[this.srsCode]=Proj4js.defs.WGS84,this.defsLoaded()},loadProjCode:function(t){if(Proj4js.Proj[t])return this.initTransforms(),void 0;var i=Proj4js.getScriptLocation()+"projCode/"+t+".js";Proj4js.loadScript(i,Proj4js.bind(this.loadProjCodeSuccess,this,t),Proj4js.bind(this.loadProjCodeFailure,this,t),Proj4js.bind(this.checkCodeLoaded,this,t))},loadProjCodeSuccess:function(t){Proj4js.Proj[t].dependsOn?this.loadProjCode(Proj4js.Proj[t].dependsOn):this.initTransforms()},loadProjCodeFailure:function(t){Proj4js.reportError("failed to find projection file for: "+t)},checkCodeLoaded:function(t){return Proj4js.Proj[t]?!0:!1},initTransforms:function(){if(Proj4js.extend(this,Proj4js.Proj[this.projName]),this.init(),this.readyToUse=!0,this.queue)for(var t;t=this.queue.shift();)t.call(this,this)},wktRE:/^(\w+)\[(.*)\]$/,parseWKT:function(t){var i=t.match(this.wktRE);if(i){var s,e=i[1],o=i[2],n=o.split(",");s="TOWGS84"==e.toUpperCase()?e:n.shift(),s=s.replace(/^\"/,""),s=s.replace(/\"$/,"");for(var a=[],r=0,h="",l=0;n.length>l;++l){for(var c=n[l],m=0;c.length>m;++m)"["==c.charAt(m)&&++r,"]"==c.charAt(m)&&--r;h+=c,0===r?(a.push(h),h=""):h+=","}switch(e){case"LOCAL_CS":this.projName="identity",this.localCS=!0,this.srsCode=s;break;case"GEOGCS":this.projName="longlat",this.geocsCode=s,this.srsCode||(this.srsCode=s);break;case"PROJCS":this.srsCode=s;break;case"GEOCCS":break;case"PROJECTION":this.projName=Proj4js.wktProjections[s];break;case"DATUM":this.datumName=s;break;case"LOCAL_DATUM":this.datumCode="none";break;case"SPHEROID":this.ellps=s,this.a=parseFloat(a.shift()),this.rf=parseFloat(a.shift());break;case"PRIMEM":this.from_greenwich=parseFloat(a.shift());break;case"UNIT":this.units=s,this.unitsPerMeter=parseFloat(a.shift());break;case"PARAMETER":var u=s.toLowerCase(),d=parseFloat(a.shift());switch(u){case"false_easting":this.x0=d;break;case"false_northing":this.y0=d;break;case"scale_factor":this.k0=d;break;case"central_meridian":this.long0=d*Proj4js.common.D2R;break;case"latitude_of_origin":this.lat0=d*Proj4js.common.D2R;break;case"more_here":break;default:}break;case"TOWGS84":this.datum_params=a;break;case"AXIS":var u=s.toLowerCase(),d=a.shift();switch(d){case"EAST":d="e";break;case"WEST":d="w";break;case"NORTH":d="n";break;case"SOUTH":d="s";break;case"UP":d="u";break;case"DOWN":d="d";break;case"OTHER":default:d=" "}switch(this.axis||(this.axis="enu"),u){case"x":this.axis=d+this.axis.substr(1,2);break;case"y":this.axis=this.axis.substr(0,1)+d+this.axis.substr(2,1);break;case"z":this.axis=this.axis.substr(0,2)+d;break;default:}case"MORE_HERE":break;default:}for(var l=0;a.length>l;++l)this.parseWKT(a[l])}},parseDefs:function(){this.defData=Proj4js.defs[this.srsCode];var t,i;if(this.defData){for(var s=this.defData.split("+"),e=0;s.length>e;e++){var o=s[e].split("=");switch(t=o[0].toLowerCase(),i=o[1],t.replace(/\s/gi,"")){case"":break;case"title":this.title=i;break;case"proj":this.projName=i.replace(/\s/gi,"");break;case"units":this.units=i.replace(/\s/gi,"");break;case"datum":this.datumCode=i.replace(/\s/gi,"");break;case"nadgrids":this.nagrids=i.replace(/\s/gi,"");break;case"ellps":this.ellps=i.replace(/\s/gi,"");break;case"a":this.a=parseFloat(i);break;case"b":this.b=parseFloat(i);break;case"rf":this.rf=parseFloat(i);break;case"lat_0":this.lat0=i*Proj4js.common.D2R;break;case"lat_1":this.lat1=i*Proj4js.common.D2R;break;case"lat_2":this.lat2=i*Proj4js.common.D2R;break;case"lat_ts":this.lat_ts=i*Proj4js.common.D2R;break;case"lon_0":this.long0=i*Proj4js.common.D2R;break;case"alpha":this.alpha=parseFloat(i)*Proj4js.common.D2R;break;case"lonc":this.longc=i*Proj4js.common.D2R;break;case"x_0":this.x0=parseFloat(i);break;case"y_0":this.y0=parseFloat(i);break;case"k_0":this.k0=parseFloat(i);break;case"k":this.k0=parseFloat(i);break;case"r_a":this.R_A=!0;break;case"zone":this.zone=parseInt(i,10);break;case"south":this.utmSouth=!0;break;case"towgs84":this.datum_params=i.split(",");break;case"to_meter":this.to_meter=parseFloat(i);break;case"from_greenwich":this.from_greenwich=i*Proj4js.common.D2R;break;case"pm":i=i.replace(/\s/gi,""),this.from_greenwich=Proj4js.PrimeMeridian[i]?Proj4js.PrimeMeridian[i]:parseFloat(i),this.from_greenwich*=Proj4js.common.D2R;break;case"axis":i=i.replace(/\s/gi,"");var n="ewnsud";3==i.length&&-1!=n.indexOf(i.substr(0,1))&&-1!=n.indexOf(i.substr(1,1))&&-1!=n.indexOf(i.substr(2,1))&&(this.axis=i);break;case"no_defs":break;default:}}this.deriveConstants()}},deriveConstants:function(){if("@null"==this.nagrids&&(this.datumCode="none"),this.datumCode&&"none"!=this.datumCode){var t=Proj4js.Datum[this.datumCode];t&&(this.datum_params=t.towgs84?t.towgs84.split(","):null,this.ellps=t.ellipse,this.datumName=t.datumName?t.datumName:this.datumCode)}if(!this.a){var i=Proj4js.Ellipsoid[this.ellps]?Proj4js.Ellipsoid[this.ellps]:Proj4js.Ellipsoid.WGS84;Proj4js.extend(this,i)}this.rf&&!this.b&&(this.b=(1-1/this.rf)*this.a),(0===this.rf||Math.abs(this.a-this.b)=a;a++)if(s=t*Math.sin(n),e=this.HALF_PI-2*Math.atan(i*Math.pow((1-s)/(1+s),o))-n,n+=e,1e-10>=Math.abs(e))return n;return alert("phi2z has NoConvergence"),-9999},qsfnz:function(t,i){var s;return t>1e-7?(s=t*i,(1-t*t)*(i/(1-s*s)-.5/t*Math.log((1-s)/(1+s)))):2*i},asinz:function(t){return Math.abs(t)>1&&(t=t>1?1:-1),Math.asin(t)},e0fn:function(t){return 1-.25*t*(1+t/16*(3+1.25*t))},e1fn:function(t){return.375*t*(1+.25*t*(1+.46875*t))},e2fn:function(t){return.05859375*t*t*(1+.75*t)},e3fn:function(t){return t*t*t*(35/3072)},mlfn:function(t,i,s,e,o){return t*o-i*Math.sin(2*o)+s*Math.sin(4*o)-e*Math.sin(6*o)},srat:function(t,i){return Math.pow((1-t)/(1+t),i)},sign:function(t){return 0>t?-1:1},adjust_lon:function(t){return t=Math.abs(t)this.HALF_PI)return+Number.NaN;if(i==this.HALF_PI)return Number.POSITIVE_INFINITY;if(i==-1*this.HALF_PI)return-1*Number.POSITIVE_INFINITY;var e=t*s;return Math.log(Math.tan((this.HALF_PI+i)/2))+t*Math.log((1-e)/(1+e))/2},fL:function(t,i){return 2*Math.atan(t*Math.exp(i))-this.HALF_PI},invlatiso:function(t,i){var s=this.fL(1,i),e=0,o=0;do e=s,o=t*Math.sin(e),s=this.fL(Math.exp(t*Math.log((1+o)/(1-o))/2),i);while(Math.abs(s-e)>1e-12);return s},sinh:function(t){var i=Math.exp(t);return i=(i-1/i)/2},cosh:function(t){var i=Math.exp(t);return i=(i+1/i)/2},tanh:function(t){var i=Math.exp(t);return i=(i-1/i)/(i+1/i)},asinh:function(t){var i=t>=0?1:-1;return i*Math.log(Math.abs(t)+Math.sqrt(t*t+1))},acosh:function(t){return 2*Math.log(Math.sqrt((t+1)/2)+Math.sqrt((t-1)/2))},atanh:function(t){return Math.log((t-1)/(t+1))/2},gN:function(t,i,s){var e=i*s;return t/Math.sqrt(1-e*e)},pj_enfn:function(t){var i=[];i[0]=this.C00-t*(this.C02+t*(this.C04+t*(this.C06+t*this.C08))),i[1]=t*(this.C22-t*(this.C04+t*(this.C06+t*this.C08)));var s=t*t;return i[2]=s*(this.C44-t*(this.C46+t*this.C48)),s*=t,i[3]=s*(this.C66-t*this.C68),i[4]=s*t*this.C88,i},pj_mlfn:function(t,i,s,e){return s*=i,i*=i,e[0]*t-s*(e[1]+i*(e[2]+i*(e[3]+i*e[4])))},pj_inv_mlfn:function(t,i,s){for(var e=1/(1-i),o=t,n=Proj4js.common.MAX_ITER;n;--n){var a=Math.sin(o),r=1-i*a*a;if(r=(this.pj_mlfn(o,a,Math.cos(o),s)-t)*r*Math.sqrt(r)*e,o-=r,Math.abs(r)i;i++)t.datum_params[i]=parseFloat(t.datum_params[i]);(0!=t.datum_params[0]||0!=t.datum_params[1]||0!=t.datum_params[2])&&(this.datum_type=Proj4js.common.PJD_3PARAM),t.datum_params.length>3&&(0!=t.datum_params[3]||0!=t.datum_params[4]||0!=t.datum_params[5]||0!=t.datum_params[6])&&(this.datum_type=Proj4js.common.PJD_7PARAM,t.datum_params[3]*=Proj4js.common.SEC_TO_RAD,t.datum_params[4]*=Proj4js.common.SEC_TO_RAD,t.datum_params[5]*=Proj4js.common.SEC_TO_RAD,t.datum_params[6]=t.datum_params[6]/1e6+1)}t&&(this.a=t.a,this.b=t.b,this.es=t.es,this.ep2=t.ep2,this.datum_params=t.datum_params)},compare_datums:function(t){return this.datum_type!=t.datum_type?!1:this.a!=t.a||Math.abs(this.es-t.es)>5e-11?!1:this.datum_type==Proj4js.common.PJD_3PARAM?this.datum_params[0]==t.datum_params[0]&&this.datum_params[1]==t.datum_params[1]&&this.datum_params[2]==t.datum_params[2]:this.datum_type==Proj4js.common.PJD_7PARAM?this.datum_params[0]==t.datum_params[0]&&this.datum_params[1]==t.datum_params[1]&&this.datum_params[2]==t.datum_params[2]&&this.datum_params[3]==t.datum_params[3]&&this.datum_params[4]==t.datum_params[4]&&this.datum_params[5]==t.datum_params[5]&&this.datum_params[6]==t.datum_params[6]:this.datum_type==Proj4js.common.PJD_GRIDSHIFT||t.datum_type==Proj4js.common.PJD_GRIDSHIFT?(alert("ERROR: Grid shift transformations are not implemented."),!1):!0},geodetic_to_geocentric:function(t){var i,s,e,o,n,a,r,h=t.x,l=t.y,c=t.z?t.z:0,m=0;if(-Proj4js.common.HALF_PI>l&&l>-1.001*Proj4js.common.HALF_PI)l=-Proj4js.common.HALF_PI;else if(l>Proj4js.common.HALF_PI&&1.001*Proj4js.common.HALF_PI>l)l=Proj4js.common.HALF_PI;else if(-Proj4js.common.HALF_PI>l||l>Proj4js.common.HALF_PI)return Proj4js.reportError("geocent:lat out of range:"+l),null;return h>Proj4js.common.PI&&(h-=2*Proj4js.common.PI),n=Math.sin(l),r=Math.cos(l),a=n*n,o=this.a/Math.sqrt(1-this.es*a),i=(o+c)*r*Math.cos(h),s=(o+c)*r*Math.sin(h),e=(o*(1-this.es)+c)*n,t.x=i,t.y=s,t.z=e,m},geocentric_to_geodetic:function(t){var i,s,e,o,n,a,r,h,l,c,m,u,d,p,_,f,P,y=1e-12,g=y*y,L=30,v=t.x,j=t.y,M=t.z?t.z:0;if(d=!1,i=Math.sqrt(v*v+j*j),s=Math.sqrt(v*v+j*j+M*M),y>i/this.a){if(d=!0,_=0,y>s/this.a)return f=Proj4js.common.HALF_PI,P=-this.b,void 0}else _=Math.atan2(j,v);e=M/s,o=i/s,n=1/Math.sqrt(1-this.es*(2-this.es)*o*o),h=o*(1-this.es)*n,l=e*n,p=0;do p++,r=this.a/Math.sqrt(1-this.es*l*l),P=i*h+M*l-r*(1-this.es*l*l),a=this.es*r/(r+P),n=1/Math.sqrt(1-a*(2-a)*o*o),c=o*(1-a)*n,m=e*n,u=m*h-c*l,h=c,l=m;while(u*u>g&&L>p);return f=Math.atan(m/Math.abs(c)),t.x=_,t.y=f,t.z=P,t},geocentric_to_geodetic_noniter:function(t){var i,s,e,o,n,a,r,h,l,c,m,u,d,p,_,f,P,y=t.x,g=t.y,L=t.z?t.z:0;if(y=parseFloat(y),g=parseFloat(g),L=parseFloat(L),P=!1,0!=y)i=Math.atan2(g,y);else if(g>0)i=Proj4js.common.HALF_PI;else if(0>g)i=-Proj4js.common.HALF_PI;else if(P=!0,i=0,L>0)s=Proj4js.common.HALF_PI;else{if(!(0>L))return s=Proj4js.common.HALF_PI,e=-this.b,void 0;s=-Proj4js.common.HALF_PI}return n=y*y+g*g,o=Math.sqrt(n),a=L*Proj4js.common.AD_C,h=Math.sqrt(a*a+n),c=a/h,u=o/h,m=c*c*c,r=L+this.b*this.ep2*m,f=o-this.a*this.es*u*u*u,l=Math.sqrt(r*r+f*f),d=r/l,p=f/l,_=this.a/Math.sqrt(1-this.es*d*d),e=p>=Proj4js.common.COS_67P5?o/p-_:-Proj4js.common.COS_67P5>=p?o/-p-_:L/d+_*(this.es-1),0==P&&(s=Math.atan(d/p)),t.x=i,t.y=s,t.z=e,t},geocentric_to_wgs84:function(t){if(this.datum_type==Proj4js.common.PJD_3PARAM)t.x+=this.datum_params[0],t.y+=this.datum_params[1],t.z+=this.datum_params[2];else if(this.datum_type==Proj4js.common.PJD_7PARAM){var i=this.datum_params[0],s=this.datum_params[1],e=this.datum_params[2],o=this.datum_params[3],n=this.datum_params[4],a=this.datum_params[5],r=this.datum_params[6],h=r*(t.x-a*t.y+n*t.z)+i,l=r*(a*t.x+t.y-o*t.z)+s,c=r*(-n*t.x+o*t.y+t.z)+e;t.x=h,t.y=l,t.z=c}},geocentric_from_wgs84:function(t){if(this.datum_type==Proj4js.common.PJD_3PARAM)t.x-=this.datum_params[0],t.y-=this.datum_params[1],t.z-=this.datum_params[2];else if(this.datum_type==Proj4js.common.PJD_7PARAM){var i=this.datum_params[0],s=this.datum_params[1],e=this.datum_params[2],o=this.datum_params[3],n=this.datum_params[4],a=this.datum_params[5],r=this.datum_params[6],h=(t.x-i)/r,l=(t.y-s)/r,c=(t.z-e)/r;t.x=h+a*l-n*c,t.y=-a*h+l+o*c,t.z=n*h-o*l+c}}}),Proj4js.Point=Proj4js.Class({initialize:function(t,i,s){if("object"==typeof t)this.x=t[0],this.y=t[1],this.z=t[2]||0;else if("string"==typeof t&&i===void 0){var e=t.split(",");this.x=parseFloat(e[0]),this.y=parseFloat(e[1]),this.z=parseFloat(e[2])||0}else this.x=t,this.y=i,this.z=s||0},clone:function(){return new Proj4js.Point(this.x,this.y,this.z)},toString:function(){return"x="+this.x+",y="+this.y},toShortString:function(){return this.x+", "+this.y}}),Proj4js.PrimeMeridian={greenwich:0,lisbon:-9.131906111111,paris:2.337229166667,bogota:-74.080916666667,madrid:-3.687938888889,rome:12.452333333333,bern:7.439583333333,jakarta:106.807719444444,ferro:-17.666666666667,brussels:4.367975,stockholm:18.058277777778,athens:23.7163375,oslo:10.722916666667},Proj4js.Ellipsoid={MERIT:{a:6378137,rf:298.257,ellipseName:"MERIT 1983"},SGS85:{a:6378136,rf:298.257,ellipseName:"Soviet Geodetic System 85"},GRS80:{a:6378137,rf:298.257222101,ellipseName:"GRS 1980(IUGG, 1980)"},IAU76:{a:6378140,rf:298.257,ellipseName:"IAU 1976"},airy:{a:6377563.396,b:6356256.91,ellipseName:"Airy 1830"},"APL4.":{a:6378137,rf:298.25,ellipseName:"Appl. Physics. 1965"},NWL9D:{a:6378145,rf:298.25,ellipseName:"Naval Weapons Lab., 1965"},mod_airy:{a:6377340.189,b:6356034.446,ellipseName:"Modified Airy"},andrae:{a:6377104.43,rf:300,ellipseName:"Andrae 1876 (Den., Iclnd.)"},aust_SA:{a:6378160,rf:298.25,ellipseName:"Australian Natl & S. Amer. 1969"},GRS67:{a:6378160,rf:298.247167427,ellipseName:"GRS 67(IUGG 1967)"},bessel:{a:6377397.155,rf:299.1528128,ellipseName:"Bessel 1841"},bess_nam:{a:6377483.865,rf:299.1528128,ellipseName:"Bessel 1841 (Namibia)"},clrk66:{a:6378206.4,b:6356583.8,ellipseName:"Clarke 1866"},clrk80:{a:6378249.145,rf:293.4663,ellipseName:"Clarke 1880 mod."},CPM:{a:6375738.7,rf:334.29,ellipseName:"Comm. des Poids et Mesures 1799"},delmbr:{a:6376428,rf:311.5,ellipseName:"Delambre 1810 (Belgium)"},engelis:{a:6378136.05,rf:298.2566,ellipseName:"Engelis 1985"},evrst30:{a:6377276.345,rf:300.8017,ellipseName:"Everest 1830"},evrst48:{a:6377304.063,rf:300.8017,ellipseName:"Everest 1948"},evrst56:{a:6377301.243,rf:300.8017,ellipseName:"Everest 1956"},evrst69:{a:6377295.664,rf:300.8017,ellipseName:"Everest 1969"},evrstSS:{a:6377298.556,rf:300.8017,ellipseName:"Everest (Sabah & Sarawak)"},fschr60:{a:6378166,rf:298.3,ellipseName:"Fischer (Mercury Datum) 1960"},fschr60m:{a:6378155,rf:298.3,ellipseName:"Fischer 1960"},fschr68:{a:6378150,rf:298.3,ellipseName:"Fischer 1968"},helmert:{a:6378200,rf:298.3,ellipseName:"Helmert 1906"},hough:{a:6378270,rf:297,ellipseName:"Hough"},intl:{a:6378388,rf:297,ellipseName:"International 1909 (Hayford)"},kaula:{a:6378163,rf:298.24,ellipseName:"Kaula 1961"},lerch:{a:6378139,rf:298.257,ellipseName:"Lerch 1979"},mprts:{a:6397300,rf:191,ellipseName:"Maupertius 1738"},new_intl:{a:6378157.5,b:6356772.2,ellipseName:"New International 1967"},plessis:{a:6376523,rf:6355863,ellipseName:"Plessis 1817 (France)"},krass:{a:6378245,rf:298.3,ellipseName:"Krassovsky, 1942"},SEasia:{a:6378155,b:6356773.3205,ellipseName:"Southeast Asia"},walbeck:{a:6376896,b:6355834.8467,ellipseName:"Walbeck"},WGS60:{a:6378165,rf:298.3,ellipseName:"WGS 60"},WGS66:{a:6378145,rf:298.25,ellipseName:"WGS 66"},WGS72:{a:6378135,rf:298.26,ellipseName:"WGS 72"},WGS84:{a:6378137,rf:298.257223563,ellipseName:"WGS 84"},sphere:{a:6370997,b:6370997,ellipseName:"Normal Sphere (r=6370997)"}},Proj4js.Datum={WGS84:{towgs84:"0,0,0",ellipse:"WGS84",datumName:"WGS84"},GGRS87:{towgs84:"-199.87,74.79,246.62",ellipse:"GRS80",datumName:"Greek_Geodetic_Reference_System_1987"},NAD83:{towgs84:"0,0,0",ellipse:"GRS80",datumName:"North_American_Datum_1983"},NAD27:{nadgrids:"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat",ellipse:"clrk66",datumName:"North_American_Datum_1927"},potsdam:{towgs84:"606.0,23.0,413.0",ellipse:"bessel",datumName:"Potsdam Rauenberg 1950 DHDN"},carthage:{towgs84:"-263.0,6.0,431.0",ellipse:"clark80",datumName:"Carthage 1934 Tunisia"},hermannskogel:{towgs84:"653.0,-212.0,449.0",ellipse:"bessel",datumName:"Hermannskogel"},ire65:{towgs84:"482.530,-130.596,564.557,-1.042,-0.214,-0.631,8.15",ellipse:"mod_airy",datumName:"Ireland 1965"},nzgd49:{towgs84:"59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993",ellipse:"intl",datumName:"New Zealand Geodetic Datum 1949"},OSGB36:{towgs84:"446.448,-125.157,542.060,0.1502,0.2470,0.8421,-20.4894",ellipse:"airy",datumName:"Airy 1830"}},Proj4js.WGS84=new Proj4js.Proj("WGS84"),Proj4js.Datum.OSB36=Proj4js.Datum.OSGB36,Proj4js.wktProjections={"Lambert Tangential Conformal Conic Projection":"lcc",Mercator:"merc","Popular Visualisation Pseudo Mercator":"merc",Mercator_1SP:"merc",Transverse_Mercator:"tmerc","Transverse Mercator":"tmerc","Lambert Azimuthal Equal Area":"laea","Universal Transverse Mercator System":"utm"},Proj4js.Proj.aea={init:function(){return Math.abs(this.lat1+this.lat2)Proj4js.common.EPSLN?(this.ms1*this.ms1-this.ms2*this.ms2)/(this.qs2-this.qs1):this.con,this.c=this.ms1*this.ms1+this.ns0*this.qs1,this.rh=this.a*Math.sqrt(this.c-this.ns0*this.qs0)/this.ns0,void 0)},forward:function(t){var i=t.x,s=t.y;this.sin_phi=Math.sin(s),this.cos_phi=Math.cos(s);var e=Proj4js.common.qsfnz(this.e3,this.sin_phi,this.cos_phi),o=this.a*Math.sqrt(this.c-this.ns0*e)/this.ns0,n=this.ns0*Proj4js.common.adjust_lon(i-this.long0),a=o*Math.sin(n)+this.x0,r=this.rh-o*Math.cos(n)+this.y0;return t.x=a,t.y=r,t},inverse:function(t){var i,s,e,o,n,a;return t.x-=this.x0,t.y=this.rh-t.y+this.y0,this.ns0>=0?(i=Math.sqrt(t.x*t.x+t.y*t.y),e=1):(i=-Math.sqrt(t.x*t.x+t.y*t.y),e=-1),o=0,0!=i&&(o=Math.atan2(e*t.x,e*t.y)),e=i*this.ns0/this.a,s=(this.c-e*e)/this.ns0,this.e3>=1e-10?(e=1-.5*(1-this.es)*Math.log((1-this.e3)/(1+this.e3))/this.e3,a=Math.abs(Math.abs(e)-Math.abs(s))>1e-10?this.phi1z(this.e3,s):s>=0?.5*Proj4js.common.PI:-.5*Proj4js.common.PI):a=this.phi1z(this.e3,s),n=Proj4js.common.adjust_lon(o/this.ns0+this.long0),t.x=n,t.y=a,t},phi1z:function(t,i){var s,e,o,n,a,r=Proj4js.common.asinz(.5*i);if(Proj4js.common.EPSLN>t)return r;for(var h=t*t,l=1;25>=l;l++)if(s=Math.sin(r),e=Math.cos(r),o=t*s,n=1-o*o,a=.5*n*n/e*(i/(1-h)-s/n+.5/t*Math.log((1-o)/(1+o))),r+=a,1e-7>=Math.abs(a))return r;return Proj4js.reportError("aea:phi1z:Convergence error"),null}},Proj4js.Proj.sterea={dependsOn:"gauss",init:function(){return Proj4js.Proj.gauss.init.apply(this),this.rc?(this.sinc0=Math.sin(this.phic0),this.cosc0=Math.cos(this.phic0),this.R2=2*this.rc,this.title||(this.title="Oblique Stereographic Alternative"),void 0):(Proj4js.reportError("sterea:init:E_ERROR_0"),void 0)},forward:function(t){var i,s,e,o;return t.x=Proj4js.common.adjust_lon(t.x-this.long0),Proj4js.Proj.gauss.forward.apply(this,[t]),i=Math.sin(t.y),s=Math.cos(t.y),e=Math.cos(t.x),o=this.k0*this.R2/(1+this.sinc0*i+this.cosc0*s*e),t.x=o*s*Math.sin(t.x),t.y=o*(this.cosc0*i-this.sinc0*s*e),t.x=this.a*t.x+this.x0,t.y=this.a*t.y+this.y0,t},inverse:function(t){var i,s,e,o,n;if(t.x=(t.x-this.x0)/this.a,t.y=(t.y-this.y0)/this.a,t.x/=this.k0,t.y/=this.k0,n=Math.sqrt(t.x*t.x+t.y*t.y)){var a=2*Math.atan2(n,this.R2);i=Math.sin(a),s=Math.cos(a),o=Math.asin(s*this.sinc0+t.y*i*this.cosc0/n),e=Math.atan2(t.x*i,n*this.cosc0*s-t.y*this.sinc0*i)}else o=this.phic0,e=0;return t.x=e,t.y=o,Proj4js.Proj.gauss.inverse.apply(this,[t]),t.x=Proj4js.common.adjust_lon(t.x+this.long0),t}},Proj4js.Proj.poly={init:function(){0==this.lat0&&(this.lat0=90),this.temp=this.b/this.a,this.es=1-Math.pow(this.temp,2),this.e=Math.sqrt(this.es),this.e0=Proj4js.common.e0fn(this.es),this.e1=Proj4js.common.e1fn(this.es),this.e2=Proj4js.common.e2fn(this.es),this.e3=Proj4js.common.e3fn(this.es),this.ml0=Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,this.lat0)},forward:function(t){var i,s,e,o,n,a,r,h=t.x,l=t.y;return e=Proj4js.common.adjust_lon(h-this.long0),1e-7>=Math.abs(l)?(a=this.x0+this.a*e,r=this.y0-this.a*this.ml0):(i=Math.sin(l),s=Math.cos(l),o=Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,l),n=Proj4js.common.msfnz(this.e,i,s),e=i,a=this.x0+this.a*n*Math.sin(e)/i,r=this.y0+this.a*(o-this.ml0+n*(1-Math.cos(e))/i)),t.x=a,t.y=r,t},inverse:function(t){var i,s,e,o,n,a;if(t.x-=this.x0,t.y-=this.y0,i=this.ml0+t.y/this.a,o=0,1e-7>=Math.abs(i))n=t.x/this.a+this.long0,a=0;else{if(s=i*i+t.x/this.a*(t.x/this.a),o=phi4z(this.es,this.e0,this.e1,this.e2,this.e3,this.al,s,e,a),1!=o)return o;n=Proj4js.common.adjust_lon(Proj4js.common.asinz(t.x*e/this.a)/Math.sin(a)+this.long0)}return t.x=n,t.y=a,t}},Proj4js.Proj.equi={init:function(){this.x0||(this.x0=0),this.y0||(this.y0=0),this.lat0||(this.lat0=0),this.long0||(this.long0=0)},forward:function(t){var i=t.x,s=t.y,e=Proj4js.common.adjust_lon(i-this.long0),o=this.x0+this.a*e*Math.cos(this.lat0),n=this.y0+this.a*s;return this.t1=o,this.t2=Math.cos(this.lat0),t.x=o,t.y=n,t},inverse:function(t){t.x-=this.x0,t.y-=this.y0;var i=t.y/this.a;Math.abs(i)>Proj4js.common.HALF_PI&&Proj4js.reportError("equi:Inv:DataError");var s=Proj4js.common.adjust_lon(this.long0+t.x/(this.a*Math.cos(this.lat0)));t.x=s,t.y=i}},Proj4js.Proj.merc={init:function(){this.lat_ts&&(this.k0=this.sphere?Math.cos(this.lat_ts):Proj4js.common.msfnz(this.es,Math.sin(this.lat_ts),Math.cos(this.lat_ts)))},forward:function(t){var i=t.x,s=t.y;if(s*Proj4js.common.R2D>90&&-90>s*Proj4js.common.R2D&&i*Proj4js.common.R2D>180&&-180>i*Proj4js.common.R2D)return Proj4js.reportError("merc:forward: llInputOutOfRange: "+i+" : "+s),null;var e,o;if(Math.abs(Math.abs(s)-Proj4js.common.HALF_PI)<=Proj4js.common.EPSLN)return Proj4js.reportError("merc:forward: ll2mAtPoles"),null;if(this.sphere)e=this.x0+this.a*this.k0*Proj4js.common.adjust_lon(i-this.long0),o=this.y0+this.a*this.k0*Math.log(Math.tan(Proj4js.common.FORTPI+.5*s));else{var n=Math.sin(s),a=Proj4js.common.tsfnz(this.e,s,n);e=this.x0+this.a*this.k0*Proj4js.common.adjust_lon(i-this.long0),o=this.y0-this.a*this.k0*Math.log(a)}return t.x=e,t.y=o,t},inverse:function(t){var i,s,e=t.x-this.x0,o=t.y-this.y0;if(this.sphere)s=Proj4js.common.HALF_PI-2*Math.atan(Math.exp(-o/this.a*this.k0));else{var n=Math.exp(-o/(this.a*this.k0));if(s=Proj4js.common.phi2z(this.e,n),-9999==s)return Proj4js.reportError("merc:inverse: lat = -9999"),null}return i=Proj4js.common.adjust_lon(this.long0+e/(this.a*this.k0)),t.x=i,t.y=s,t}},Proj4js.Proj.utm={dependsOn:"tmerc",init:function(){return this.zone?(this.lat0=0,this.long0=(6*Math.abs(this.zone)-183)*Proj4js.common.D2R,this.x0=5e5,this.y0=this.utmSouth?1e7:0,this.k0=.9996,Proj4js.Proj.tmerc.init.apply(this),this.forward=Proj4js.Proj.tmerc.forward,this.inverse=Proj4js.Proj.tmerc.inverse,void 0):(Proj4js.reportError("utm:init: zone must be specified for UTM"),void 0)}},Proj4js.Proj.eqdc={init:function(){this.mode||(this.mode=0),this.temp=this.b/this.a,this.es=1-Math.pow(this.temp,2),this.e=Math.sqrt(this.es),this.e0=Proj4js.common.e0fn(this.es),this.e1=Proj4js.common.e1fn(this.es),this.e2=Proj4js.common.e2fn(this.es),this.e3=Proj4js.common.e3fn(this.es),this.sinphi=Math.sin(this.lat1),this.cosphi=Math.cos(this.lat1),this.ms1=Proj4js.common.msfnz(this.e,this.sinphi,this.cosphi),this.ml1=Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,this.lat1),0!=this.mode?(Math.abs(this.lat1+this.lat2)=Proj4js.common.EPSLN?(this.ms1-this.ms2)/(this.ml2-this.ml1):this.sinphi):this.ns=this.sinphi,this.g=this.ml1+this.ms1/this.ns,this.ml0=Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,this.lat0),this.rh=this.a*(this.g-this.ml0)},forward:function(t){var i=t.x,s=t.y,e=Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,s),o=this.a*(this.g-e),n=this.ns*Proj4js.common.adjust_lon(i-this.long0),a=this.x0+o*Math.sin(n),r=this.y0+this.rh-o*Math.cos(n);return t.x=a,t.y=r,t},inverse:function(t){t.x-=this.x0,t.y=this.rh-t.y+this.y0;var i,s;this.ns>=0?(s=Math.sqrt(t.x*t.x+t.y*t.y),i=1):(s=-Math.sqrt(t.x*t.x+t.y*t.y),i=-1);var e=0;0!=s&&(e=Math.atan2(i*t.x,i*t.y));var o=this.g-s/this.a,n=this.phi3z(o,this.e0,this.e1,this.e2,this.e3),a=Proj4js.common.adjust_lon(this.long0+e/this.ns);return t.x=a,t.y=n,t},phi3z:function(t,i,s,e,o){var n,a;n=t;for(var r=0;15>r;r++)if(a=(t+s*Math.sin(2*n)-e*Math.sin(4*n)+o*Math.sin(6*n))/i-n,n+=a,1e-10>=Math.abs(a))return n;return Proj4js.reportError("PHI3Z-CONV:Latitude failed to converge after 15 iterations"),null}},Proj4js.Proj.tmerc={init:function(){this.e0=Proj4js.common.e0fn(this.es),this.e1=Proj4js.common.e1fn(this.es),this.e2=Proj4js.common.e2fn(this.es),this.e3=Proj4js.common.e3fn(this.es),this.ml0=this.a*Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,this.lat0)},forward:function(t){var i,s,e,o=t.x,n=t.y,a=Proj4js.common.adjust_lon(o-this.long0),r=Math.sin(n),h=Math.cos(n);if(this.sphere){var l=h*Math.sin(a);if(1e-10>Math.abs(Math.abs(l)-1))return Proj4js.reportError("tmerc:forward: Point projects into infinity"),93;s=.5*this.a*this.k0*Math.log((1+l)/(1-l)),i=Math.acos(h*Math.cos(a)/Math.sqrt(1-l*l)),0>n&&(i=-i),e=this.a*this.k0*(i-this.lat0)}else{var c=h*a,m=Math.pow(c,2),u=this.ep2*Math.pow(h,2),d=Math.tan(n),p=Math.pow(d,2);i=1-this.es*Math.pow(r,2);var _=this.a/Math.sqrt(i),f=this.a*Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,n);s=this.k0*_*c*(1+m/6*(1-p+u+m/20*(5-18*p+Math.pow(p,2)+72*u-58*this.ep2)))+this.x0,e=this.k0*(f-this.ml0+_*d*m*(.5+m/24*(5-p+9*u+4*Math.pow(u,2)+m/30*(61-58*p+Math.pow(p,2)+600*u-330*this.ep2))))+this.y0}return t.x=s,t.y=e,t},inverse:function(t){var i,s,e,o,n,a,r=6;if(this.sphere){var h=Math.exp(t.x/(this.a*this.k0)),l=.5*(h-1/h),c=this.lat0+t.y/(this.a*this.k0),m=Math.cos(c);i=Math.sqrt((1-m*m)/(1+l*l)),n=Proj4js.common.asinz(i),0>c&&(n=-n),a=0==l&&0==m?this.long0:Proj4js.common.adjust_lon(Math.atan2(l,m)+this.long0)}else{var u=t.x-this.x0,d=t.y-this.y0;for(i=(this.ml0+d/this.k0)/this.a,s=i,o=0;!0&&(e=(i+this.e1*Math.sin(2*s)-this.e2*Math.sin(4*s)+this.e3*Math.sin(6*s))/this.e0-s,s+=e,!(Math.abs(e)<=Proj4js.common.EPSLN));o++)if(o>=r)return Proj4js.reportError("tmerc:inverse: Latitude failed to converge"),95;if(Math.abs(s)0||Math.abs(a)<=Proj4js.common.EPSLN)var l=this.a*n*s*Math.sin(e),c=this.y0+this.a*n*(this.cos_p14*i-this.sin_p14*s*o);else Proj4js.reportError("orthoFwdPointError");return t.x=l,t.y=c,t},inverse:function(t){var i,s,e,o,n,a,r;return t.x-=this.x0,t.y-=this.y0,i=Math.sqrt(t.x*t.x+t.y*t.y),i>this.a+1e-7&&Proj4js.reportError("orthoInvDataError"),s=Proj4js.common.asinz(i/this.a),e=Math.sin(s),o=Math.cos(s),a=this.long0,Math.abs(i)<=Proj4js.common.EPSLN&&(r=this.lat0),r=Proj4js.common.asinz(o*this.sin_p14+t.y*e*this.cos_p14/i),n=Math.abs(this.lat0)-Proj4js.common.HALF_PI,Math.abs(n)<=Proj4js.common.EPSLN&&(a=this.lat0>=0?Proj4js.common.adjust_lon(this.long0+Math.atan2(t.x,-t.y)):Proj4js.common.adjust_lon(this.long0-Math.atan2(-t.x,t.y))),n=o-this.sin_p14*Math.sin(r),t.x=a,t.y=r,t}},Proj4js.Proj.krovak={init:function(){this.a=6377397.155,this.es=.006674372230614,this.e=Math.sqrt(this.es),this.lat0||(this.lat0=.863937979737193),this.long0||(this.long0=.4334234309119251),this.k0||(this.k0=.9999),this.s45=.785398163397448,this.s90=2*this.s45,this.fi0=this.lat0,this.e2=this.es,this.e=Math.sqrt(this.e2),this.alfa=Math.sqrt(1+this.e2*Math.pow(Math.cos(this.fi0),4)/(1-this.e2)),this.uq=1.04216856380474,this.u0=Math.asin(Math.sin(this.fi0)/this.alfa),this.g=Math.pow((1+this.e*Math.sin(this.fi0))/(1-this.e*Math.sin(this.fi0)),this.alfa*this.e/2),this.k=Math.tan(this.u0/2+this.s45)/Math.pow(Math.tan(this.fi0/2+this.s45),this.alfa)*this.g,this.k1=this.k0,this.n0=this.a*Math.sqrt(1-this.e2)/(1-this.e2*Math.pow(Math.sin(this.fi0),2)),this.s0=1.37008346281555,this.n=Math.sin(this.s0),this.ro0=this.k1*this.n0/Math.tan(this.s0),this.ad=this.s90-this.uq},forward:function(t){var i,s,e,o,n,a,r,h=t.x,l=t.y,c=Proj4js.common.adjust_lon(h-this.long0);return i=Math.pow((1+this.e*Math.sin(l))/(1-this.e*Math.sin(l)),this.alfa*this.e/2),s=2*(Math.atan(this.k*Math.pow(Math.tan(l/2+this.s45),this.alfa)/i)-this.s45),e=-c*this.alfa,o=Math.asin(Math.cos(this.ad)*Math.sin(s)+Math.sin(this.ad)*Math.cos(s)*Math.cos(e)),n=Math.asin(Math.cos(s)*Math.sin(e)/Math.cos(o)),a=this.n*n,r=this.ro0*Math.pow(Math.tan(this.s0/2+this.s45),this.n)/Math.pow(Math.tan(o/2+this.s45),this.n),t.y=r*Math.cos(a)/1,t.x=r*Math.sin(a)/1,this.czech&&(t.y*=-1,t.x*=-1),t},inverse:function(t){var i,s,e,o,n,a,r,h,l=t.x;t.x=t.y,t.y=l,this.czech&&(t.y*=-1,t.x*=-1),a=Math.sqrt(t.x*t.x+t.y*t.y),n=Math.atan2(t.y,t.x),o=n/Math.sin(this.s0),e=2*(Math.atan(Math.pow(this.ro0/a,1/this.n)*Math.tan(this.s0/2+this.s45))-this.s45),i=Math.asin(Math.cos(this.ad)*Math.sin(e)-Math.sin(this.ad)*Math.cos(e)*Math.cos(o)),s=Math.asin(Math.cos(e)*Math.sin(o)/Math.cos(i)),t.x=this.long0-s/this.alfa,r=i,h=0;var c=0;do t.y=2*(Math.atan(Math.pow(this.k,-1/this.alfa)*Math.pow(Math.tan(i/2+this.s45),1/this.alfa)*Math.pow((1+this.e*Math.sin(r))/(1-this.e*Math.sin(r)),this.e/2))-this.s45),1e-10>Math.abs(r-t.y)&&(h=1),r=t.y,c+=1;while(0==h&&15>c);return c>=15?(Proj4js.reportError("PHI3Z-CONV:Latitude failed to converge after 15 iterations"),null):t}},Proj4js.Proj.somerc={init:function(){var t=this.lat0;this.lambda0=this.long0;var i=Math.sin(t),s=this.a,e=this.rf,o=1/e,n=2*o-Math.pow(o,2),a=this.e=Math.sqrt(n);this.R=this.k0*s*Math.sqrt(1-n)/(1-n*Math.pow(i,2)),this.alpha=Math.sqrt(1+n/(1-n)*Math.pow(Math.cos(t),4)),this.b0=Math.asin(i/this.alpha),this.K=Math.log(Math.tan(Math.PI/4+this.b0/2))-this.alpha*Math.log(Math.tan(Math.PI/4+t/2))+this.alpha*a/2*Math.log((1+a*i)/(1-a*i))},forward:function(t){var i=Math.log(Math.tan(Math.PI/4-t.y/2)),s=this.e/2*Math.log((1+this.e*Math.sin(t.y))/(1-this.e*Math.sin(t.y))),e=-this.alpha*(i+s)+this.K,o=2*(Math.atan(Math.exp(e))-Math.PI/4),n=this.alpha*(t.x-this.lambda0),a=Math.atan(Math.sin(n)/(Math.sin(this.b0)*Math.tan(o)+Math.cos(this.b0)*Math.cos(n))),r=Math.asin(Math.cos(this.b0)*Math.sin(o)-Math.sin(this.b0)*Math.cos(o)*Math.cos(n));return t.y=this.R/2*Math.log((1+Math.sin(r))/(1-Math.sin(r)))+this.y0,t.x=this.R*a+this.x0,t},inverse:function(t){for(var i=t.x-this.x0,s=t.y-this.y0,e=i/this.R,o=2*(Math.atan(Math.exp(s/this.R))-Math.PI/4),n=Math.asin(Math.cos(this.b0)*Math.sin(o)+Math.sin(this.b0)*Math.cos(o)*Math.cos(e)),a=Math.atan(Math.sin(e)/(Math.cos(this.b0)*Math.cos(e)-Math.sin(this.b0)*Math.tan(o))),r=this.lambda0+a/this.alpha,h=0,l=n,c=-1e3,m=0;Math.abs(l-c)>1e-7;){if(++m>20)return Proj4js.reportError("omercFwdInfinity"),void 0;h=1/this.alpha*(Math.log(Math.tan(Math.PI/4+n/2))-this.K)+this.e*Math.log(Math.tan(Math.PI/4+Math.asin(this.e*Math.sin(l))/2)),c=l,l=2*Math.atan(Math.exp(h))-Math.PI/2}return t.x=r,t.y=l,t}},Proj4js.Proj.stere={ssfn_:function(t,i,s){return i*=s,Math.tan(.5*(Proj4js.common.HALF_PI+t))*Math.pow((1-i)/(1+i),.5*s)},TOL:1e-8,NITER:8,CONV:1e-10,S_POLE:0,N_POLE:1,OBLIQ:2,EQUIT:3,init:function(){this.phits=this.lat_ts?this.lat_ts:Proj4js.common.HALF_PI;var t=Math.abs(this.lat0);if(this.mode=Math.abs(t)-Proj4js.common.HALF_PIthis.lat0?this.S_POLE:this.N_POLE:t>Proj4js.common.EPSLN?this.OBLIQ:this.EQUIT,this.phits=Math.abs(this.phits),this.es){var i;switch(this.mode){case this.N_POLE:case this.S_POLE:Math.abs(this.phits-Proj4js.common.HALF_PI)=Proj4js.common.EPSLN?Math.cos(this.phits)/Math.tan(Proj4js.common.FORTPI-.5*this.phits):2*this.k0}},forward:function(t){var i=t.x;i=Proj4js.common.adjust_lon(i-this.long0);var s,e,o=t.y;if(this.sphere){var n,a,r,h;switch(n=Math.sin(o),a=Math.cos(o),r=Math.cos(i),h=Math.sin(i),this.mode){case this.EQUIT:e=1+a*r,Proj4js.common.EPSLN>=e&&Proj4js.reportError("stere:forward:Equit"),e=this.akm1/e,s=e*a*h,e*=n;break;case this.OBLIQ:e=1+this.sinph0*n+this.cosph0*a*r,Proj4js.common.EPSLN>=e&&Proj4js.reportError("stere:forward:Obliq"),e=this.akm1/e,s=e*a*h,e*=this.cosph0*n-this.sinph0*a*r;break;case this.N_POLE:r=-r,o=-o;case this.S_POLE:Math.abs(o-Proj4js.common.HALF_PI)=l;l++)r*=n,h+=this.A[l]*r;for(var c,m,u=h,d=a,p=1,_=0,f=0,P=0,l=1;6>=l;l++)c=p*u-_*d,m=_*u+p*d,p=c,_=m,f=f+this.B_re[l]*p-this.B_im[l]*_,P=P+this.B_im[l]*p+this.B_re[l]*_;return t.x=P*this.a+this.x0,t.y=f*this.a+this.y0,t},inverse:function(t){for(var i,s,e=t.x,o=t.y,n=e-this.x0,a=o-this.y0,r=a/this.a,h=n/this.a,l=1,c=0,m=0,u=0,d=1;6>=d;d++)i=l*r-c*h,s=c*r+l*h,l=i,c=s,m=m+this.C_re[d]*l-this.C_im[d]*c,u=u+this.C_im[d]*l+this.C_re[d]*c;for(var p=0;this.iterations>p;p++){for(var _,f,P=m,y=u,g=r,L=h,d=2;6>=d;d++)_=P*m-y*u,f=y*m+P*u,P=_,y=f,g+=(d-1)*(this.B_re[d]*P-this.B_im[d]*y),L+=(d-1)*(this.B_im[d]*P+this.B_re[d]*y);P=1,y=0;for(var v=this.B_re[1],j=this.B_im[1],d=2;6>=d;d++)_=P*m-y*u,f=y*m+P*u,P=_,y=f,v+=d*(this.B_re[d]*P-this.B_im[d]*y),j+=d*(this.B_im[d]*P+this.B_re[d]*y);var M=v*v+j*j;m=(g*v+L*j)/M,u=(L*v-g*j)/M}for(var S=m,b=u,x=1,E=0,d=1;9>=d;d++)x*=S,E+=this.D[d]*x;var C=this.lat0+1e5*E*Proj4js.common.SEC_TO_RAD,w=this.long0+b;return t.x=w,t.y=C,t}},Proj4js.Proj.mill={init:function(){},forward:function(t){var i=t.x,s=t.y,e=Proj4js.common.adjust_lon(i-this.long0),o=this.x0+this.a*e,n=this.y0+1.25*this.a*Math.log(Math.tan(Proj4js.common.PI/4+s/2.5));return t.x=o,t.y=n,t},inverse:function(t){t.x-=this.x0,t.y-=this.y0;var i=Proj4js.common.adjust_lon(this.long0+t.x/this.a),s=2.5*(Math.atan(Math.exp(.8*t.y/this.a))-Proj4js.common.PI/4);return t.x=i,t.y=s,t}},Proj4js.Proj.gnom={init:function(){this.sin_p14=Math.sin(this.lat0),this.cos_p14=Math.cos(this.lat0),this.infinity_dist=1e3*this.a,this.rc=1},forward:function(t){var i,s,e,o,n,a,r,h,l=t.x,c=t.y;return e=Proj4js.common.adjust_lon(l-this.long0),i=Math.sin(c),s=Math.cos(c),o=Math.cos(e),a=this.sin_p14*i+this.cos_p14*s*o,n=1,a>0||Math.abs(a)<=Proj4js.common.EPSLN?(r=this.x0+this.a*n*s*Math.sin(e)/a,h=this.y0+this.a*n*(this.cos_p14*i-this.sin_p14*s*o)/a):(Proj4js.reportError("orthoFwdPointError"),r=this.x0+this.infinity_dist*s*Math.sin(e),h=this.y0+this.infinity_dist*(this.cos_p14*i-this.sin_p14*s*o)),t.x=r,t.y=h,t},inverse:function(t){var i,s,e,o,n,a;return t.x=(t.x-this.x0)/this.a,t.y=(t.y-this.y0)/this.a,t.x/=this.k0,t.y/=this.k0,(i=Math.sqrt(t.x*t.x+t.y*t.y))?(o=Math.atan2(i,this.rc),s=Math.sin(o),e=Math.cos(o),a=Proj4js.common.asinz(e*this.sin_p14+t.y*s*this.cos_p14/i),n=Math.atan2(t.x*s,i*this.cos_p14*e-t.y*this.sin_p14*s),n=Proj4js.common.adjust_lon(this.long0+n)):(a=this.phic0,n=0),t.x=n,t.y=a,t}},Proj4js.Proj.sinu={init:function(){this.sphere?(this.n=1,this.m=0,this.es=0,this.C_y=Math.sqrt((this.m+1)/this.n),this.C_x=this.C_y/(this.m+1)):this.en=Proj4js.common.pj_enfn(this.es)},forward:function(t){var i,s,e=t.x,o=t.y;if(e=Proj4js.common.adjust_lon(e-this.long0),this.sphere){if(this.m)for(var n=this.n*Math.sin(o),a=Proj4js.common.MAX_ITER;a;--a){var r=(this.m*o+Math.sin(o)-n)/(this.m+Math.cos(o));if(o-=r,Math.abs(r)o?(o=Math.sin(i),s=this.long0+t.x*Math.sqrt(1-this.es*o*o)/(this.a*Math.cos(i)),e=Proj4js.common.adjust_lon(s)):o-Proj4js.common.EPSLN=0?this.y0+Proj4js.common.PI*this.R*Math.tan(.5*a):this.y0+Proj4js.common.PI*this.R*-Math.tan(.5*a));var r=.5*Math.abs(Proj4js.common.PI/n-n/Proj4js.common.PI),h=r*r,l=Math.sin(a),c=Math.cos(a),m=c/(l+c-1),u=m*m,d=m*(2/l-1),p=d*d,_=Proj4js.common.PI*this.R*(r*(m-p)+Math.sqrt(h*(m-p)*(m-p)-(p+h)*(u-p)))/(p+h);return 0>n&&(_=-_),i=this.x0+_,_=Math.abs(_/(Proj4js.common.PI*this.R)),s=o>=0?this.y0+Proj4js.common.PI*this.R*Math.sqrt(1-_*_-2*r*_):this.y0-Proj4js.common.PI*this.R*Math.sqrt(1-_*_-2*r*_),t.x=i,t.y=s,t},inverse:function(t){var i,s,e,o,n,a,r,h,l,c,m,u,d;return t.x-=this.x0,t.y-=this.y0,m=Proj4js.common.PI*this.R,e=t.x/m,o=t.y/m,n=e*e+o*o,a=-Math.abs(o)*(1+n),r=a-2*o*o+e*e,h=-2*a+1+2*o*o+n*n,d=o*o/h+(2*r*r*r/h/h/h-9*a*r/h/h)/27,l=(a-r*r/3/h)/h,c=2*Math.sqrt(-l/3),m=3*d/l/c,Math.abs(m)>1&&(m=m>=0?1:-1),u=Math.acos(m)/3,s=t.y>=0?(-c*Math.cos(u+Proj4js.common.PI/3)-r/3/h)*Proj4js.common.PI:-(-c*Math.cos(u+Proj4js.common.PI/3)-r/3/h)*Proj4js.common.PI,Math.abs(e)0&&(e=2*Math.atan(o*Proj4js.common.srat(this.e*Math.sin(t.y),-.5*this.e))-Proj4js.common.HALF_PI,!(i>Math.abs(e-t.y)));--n)t.y=e;return n?(t.x=s,t.y=e,t):(Proj4js.reportError("gauss:inverse:convergence failed"),null)}},Proj4js.Proj.omerc={init:function(){this.mode||(this.mode=0),this.lon1||(this.lon1=0,this.mode=1),this.lon2||(this.lon2=0),this.lat2||(this.lat2=0);var t=this.b/this.a,i=1-Math.pow(t,2);Math.sqrt(i),this.sin_p20=Math.sin(this.lat0),this.cos_p20=Math.cos(this.lat0),this.con=1-this.es*this.sin_p20*this.sin_p20,this.com=Math.sqrt(1-i),this.bl=Math.sqrt(1+this.es*Math.pow(this.cos_p20,4)/(1-i)),this.al=this.a*this.bl*this.k0*this.com/this.con,Math.abs(this.lat0)0?this.lat0>=0?this.d+Math.sqrt(this.d*this.d-1):this.d-Math.sqrt(this.d*this.d-1):this.d,this.el=this.f*Math.pow(this.ts,this.bl)),0!=this.mode?(this.g=.5*(this.f-1/this.f),this.gama=Proj4js.common.asinz(Math.sin(this.alpha)/this.d),this.longc=this.longc-Proj4js.common.asinz(this.g*Math.tan(this.gama))/this.bl,this.con=Math.abs(this.lat0),this.con>Proj4js.common.EPSLN&&Math.abs(this.con-Proj4js.common.HALF_PI)>Proj4js.common.EPSLN?(this.singam=Math.sin(this.gama),this.cosgam=Math.cos(this.gama),this.sinaz=Math.sin(this.alpha),this.cosaz=Math.cos(this.alpha),this.u=this.lat0>=0?this.al/this.bl*Math.atan(Math.sqrt(this.d*this.d-1)/this.cosaz):-(this.al/this.bl)*Math.atan(Math.sqrt(this.d*this.d-1)/this.cosaz)):Proj4js.reportError("omerc:Init:DataError")):(this.sinphi=Math.sin(this.at1),this.ts1=Proj4js.common.tsfnz(this.e,this.lat1,this.sinphi),this.sinphi=Math.sin(this.lat2),this.ts2=Proj4js.common.tsfnz(this.e,this.lat2,this.sinphi),this.h=Math.pow(this.ts1,this.bl),this.l=Math.pow(this.ts2,this.bl),this.f=this.el/this.h,this.g=.5*(this.f-1/this.f),this.j=(this.el*this.el-this.l*this.h)/(this.el*this.el+this.l*this.h),this.p=(this.l-this.h)/(this.l+this.h),this.dlon=this.lon1-this.lon2,this.dlon<-Proj4js.common.PI&&(this.lon2=this.lon2-2*Proj4js.common.PI),this.dlon>Proj4js.common.PI&&(this.lon2=this.lon2+2*Proj4js.common.PI),this.dlon=this.lon1-this.lon2,this.longc=.5*(this.lon1+this.lon2)-Math.atan(this.j*Math.tan(.5*this.bl*this.dlon)/this.p)/this.bl,this.dlon=Proj4js.common.adjust_lon(this.lon1-this.longc),this.gama=Math.atan(Math.sin(this.bl*this.dlon)/this.g),this.alpha=Proj4js.common.asinz(this.d*Math.sin(this.gama)),Math.abs(this.lat1-this.lat2)<=Proj4js.common.EPSLN?Proj4js.reportError("omercInitDataError"):this.con=Math.abs(this.lat1),this.con<=Proj4js.common.EPSLN||Math.abs(this.con-Proj4js.common.HALF_PI)<=Proj4js.common.EPSLN?Proj4js.reportError("omercInitDataError"):Math.abs(Math.abs(this.lat0)-Proj4js.common.HALF_PI)<=Proj4js.common.EPSLN&&Proj4js.reportError("omercInitDataError"),this.singam=Math.sin(this.gam),this.cosgam=Math.cos(this.gam),this.sinaz=Math.sin(this.alpha),this.cosaz=Math.cos(this.alpha),this.u=this.lat0>=0?this.al/this.bl*Math.atan(Math.sqrt(this.d*this.d-1)/this.cosaz):-(this.al/this.bl)*Math.atan(Math.sqrt(this.d*this.d-1)/this.cosaz))},forward:function(t){var i,s,e,o,n,a,r,h,l,c,m,u=t.x,d=t.y;i=Math.sin(d),c=Proj4js.common.adjust_lon(u-this.longc),a=Math.sin(this.bl*c),Math.abs(Math.abs(d)-Proj4js.common.HALF_PI)>Proj4js.common.EPSLN?(m=Proj4js.common.tsfnz(this.e,d,i),o=this.el/Math.pow(m,this.bl),l=.5*(o-1/o),s=.5*(o+1/o),r=(l*this.singam-a*this.cosgam)/s,e=Math.cos(this.bl*c),1e-7>Math.abs(e)?n=this.al*this.bl*c:(n=this.al*Math.atan((l*this.cosgam+a*this.singam)/e)/this.bl,0>e&&(n+=Proj4js.common.PI*this.al/this.bl))):(r=d>=0?this.singam:-this.singam,n=this.al*d/this.bl),Math.abs(Math.abs(r)-1)<=Proj4js.common.EPSLN&&Proj4js.reportError("omercFwdInfinity"),h=.5*this.al*Math.log((1-r)/(1+r))/this.bl,n-=this.u;var p=this.x0+h*this.cosaz+n*this.sinaz,_=this.y0+n*this.cosaz-h*this.sinaz;return t.x=p,t.y=_,t},inverse:function(t){var i,s,e,o,n,a,r,h,l,c,m,u,d;return t.x-=this.x0,t.y-=this.y0,d=0,o=t.x*this.cosaz-t.y*this.sinaz,n=t.y*this.cosaz+t.x*this.sinaz,n+=this.u,a=Math.exp(-this.bl*o/this.al),r=.5*(a-1/a),s=.5*(a+1/a),l=Math.sin(this.bl*n/this.al),c=(l*this.cosgam+r*this.singam)/s,Math.abs(Math.abs(c)-1)<=Proj4js.common.EPSLN?(m=this.longc,u=c>=0?Proj4js.common.HALF_PI:-Proj4js.common.HALF_PI):(e=1/this.bl,h=Math.pow(this.el/Math.sqrt((1+c)/(1-c)),e),u=Proj4js.common.phi2z(this.e,h),i=this.longc-Math.atan2(r*this.cosgam-l*this.singam,e)/this.bl,m=Proj4js.common.adjust_lon(i)),t.x=m,t.y=u,t}},Proj4js.Proj.lcc={init:function(){if(this.lat2||(this.lat2=this.lat0),this.k0||(this.k0=1),Math.abs(this.lat1+this.lat2)Proj4js.common.EPSLN?Math.log(e/r)/Math.log(o/h):i,this.f0=e/(this.ns*Math.pow(o,this.ns)),this.rh=this.a*this.f0*Math.pow(l,this.ns),this.title||(this.title="Lambert Conformal Conic")},forward:function(t){var i=t.x,s=t.y;if(!(90>=s&&s>=-90&&180>=i&&i>=-180))return Proj4js.reportError("lcc:forward: llInputOutOfRange: "+i+" : "+s),null;var e,o,n=Math.abs(Math.abs(s)-Proj4js.common.HALF_PI);if(n>Proj4js.common.EPSLN)e=Proj4js.common.tsfnz(this.e,s,Math.sin(s)),o=this.a*this.f0*Math.pow(e,this.ns);else{if(n=s*this.ns,0>=n)return Proj4js.reportError("lcc:forward: No Projection"),null;o=0}var a=this.ns*Proj4js.common.adjust_lon(i-this.long0);return t.x=this.k0*o*Math.sin(a)+this.x0,t.y=this.k0*(this.rh-o*Math.cos(a))+this.y0,t},inverse:function(t){var i,s,e,o,n,a=(t.x-this.x0)/this.k0,r=this.rh-(t.y-this.y0)/this.k0;this.ns>0?(i=Math.sqrt(a*a+r*r),s=1):(i=-Math.sqrt(a*a+r*r),s=-1);var h=0;if(0!=i&&(h=Math.atan2(s*a,s*r)),0!=i||this.ns>0){if(s=1/this.ns,e=Math.pow(i/(this.a*this.f0),s),o=Proj4js.common.phi2z(this.e,e),-9999==o)return null}else o=-Proj4js.common.HALF_PI;return n=Proj4js.common.adjust_lon(h/this.ns+this.long0),t.x=n,t.y=o,t}},Proj4js.Proj.laea={S_POLE:1,N_POLE:2,EQUIT:3,OBLIQ:4,init:function(){var t=Math.abs(this.lat0);if(this.mode=Math.abs(t-Proj4js.common.HALF_PI)this.lat0?this.S_POLE:this.N_POLE:Math.abs(t)0){var i;switch(this.qp=Proj4js.common.qsfnz(this.e,1),this.mmf=.5/(1-this.es),this.apa=this.authset(this.es),this.mode){case this.N_POLE:case this.S_POLE:this.dd=1;break;case this.EQUIT:this.rq=Math.sqrt(.5*this.qp),this.dd=1/this.rq,this.xmf=1,this.ymf=.5*this.qp;break;case this.OBLIQ:this.rq=Math.sqrt(.5*this.qp),i=Math.sin(this.lat0),this.sinb1=Proj4js.common.qsfnz(this.e,i)/this.qp,this.cosb1=Math.sqrt(1-this.sinb1*this.sinb1),this.dd=Math.cos(this.lat0)/(Math.sqrt(1-this.es*i*i)*this.rq*this.cosb1),this.ymf=(this.xmf=this.rq)/this.dd,this.xmf*=this.dd}}else this.mode==this.OBLIQ&&(this.sinph0=Math.sin(this.lat0),this.cosph0=Math.cos(this.lat0))},forward:function(t){var i,s,e=t.x,o=t.y;if(e=Proj4js.common.adjust_lon(e-this.long0),this.sphere){var n,a,r;switch(r=Math.sin(o),a=Math.cos(o),n=Math.cos(e),this.mode){case this.OBLIQ:case this.EQUIT:if(s=this.mode==this.EQUIT?1+a*n:1+this.sinph0*r+this.cosph0*a*n,Proj4js.common.EPSLN>=s)return Proj4js.reportError("laea:fwd:y less than eps"),null;s=Math.sqrt(2/s),i=s*a*Math.sin(e),s*=this.mode==this.EQUIT?r:this.cosph0*r-this.sinph0*a*n;break;case this.N_POLE:n=-n;case this.S_POLE:if(Math.abs(o+this.phi0)=0?(i=(u=Math.sqrt(l))*h,s=n*(this.mode==this.S_POLE?u:-u)):i=s=0}}return t.x=this.a*i+this.x0,t.y=this.a*s+this.y0,t},inverse:function(t){t.x-=this.x0,t.y-=this.y0;var i,s,e=t.x/this.a,o=t.y/this.a;if(this.sphere){var n,a=0,r=0;if(n=Math.sqrt(e*e+o*o),s=.5*n,s>1)return Proj4js.reportError("laea:Inv:DataError"),null;switch(s=2*Math.asin(s),(this.mode==this.OBLIQ||this.mode==this.EQUIT)&&(r=Math.sin(s),a=Math.cos(s)),this.mode){case this.EQUIT:s=Math.abs(n)<=Proj4js.common.EPSLN?0:Math.asin(o*r/n),e*=r,o=a*n;break;case this.OBLIQ:s=Math.abs(n)<=Proj4js.common.EPSLN?this.phi0:Math.asin(a*this.sinph0+o*r*this.cosph0/n),e*=r*this.cosph0,o=(a-Math.sin(s)*this.sinph0)*n;break;case this.N_POLE:o=-o,s=Proj4js.common.HALF_PI-s;break;case this.S_POLE:s-=Proj4js.common.HALF_PI}i=0!=o||this.mode!=this.EQUIT&&this.mode!=this.OBLIQ?Math.atan2(e,o):0}else{var h,l,c,m,u=0;switch(this.mode){case this.EQUIT:case this.OBLIQ:if(e/=this.dd,o*=this.dd,m=Math.sqrt(e*e+o*o),Proj4js.common.EPSLN>m)return t.x=0,t.y=this.phi0,t;l=2*Math.asin(.5*m/this.rq),h=Math.cos(l),e*=l=Math.sin(l),this.mode==this.OBLIQ?(u=h*this.sinb1+o*l*this.cosb1/m,c=this.qp*u,o=m*this.cosb1*h-o*this.sinb1*l):(u=o*l/m,c=this.qp*u,o=m*h);break;case this.N_POLE:o=-o;case this.S_POLE:if(c=e*e+o*o,!c)return t.x=0,t.y=this.phi0,t;u=1-c/this.qp,this.mode==this.S_POLE&&(u=-u)}i=Math.atan2(e,o),s=this.authlat(Math.asin(u),this.apa)}return t.x=Proj4js.common.adjust_lon(this.long0+i),t.y=s,t},P00:.3333333333333333,P01:.17222222222222222,P02:.10257936507936508,P10:.06388888888888888,P11:.0664021164021164,P20:.016415012942191543,authset:function(t){var i,s=[];return s[0]=t*this.P00,i=t*t,s[0]+=i*this.P01,s[1]=i*this.P10,i*=t,s[0]+=i*this.P02,s[1]+=i*this.P11,s[2]=i*this.P20,s},authlat:function(t,i){var s=t+t;return t+i[0]*Math.sin(s)+i[1]*Math.sin(s+s)+i[2]*Math.sin(s+s+s)}},Proj4js.Proj.aeqd={init:function(){this.sin_p12=Math.sin(this.lat0),this.cos_p12=Math.cos(this.lat0)},forward:function(t){var i=t.x;t.y;var s,e=Math.sin(t.y),o=Math.cos(t.y),n=Proj4js.common.adjust_lon(i-this.long0),a=Math.cos(n),r=this.sin_p12*e+this.cos_p12*o*a;if(Math.abs(Math.abs(r)-1)r)return Proj4js.reportError("aeqd:Fwd:PointError"),void 0}else{var h=Math.acos(r);s=h/Math.sin(h)}return t.x=this.x0+this.a*s*o*Math.sin(n),t.y=this.y0+this.a*s*(this.cos_p12*e-this.sin_p12*o*a),t},inverse:function(t){t.x-=this.x0,t.y-=this.y0;var i=Math.sqrt(t.x*t.x+t.y*t.y);if(i>2*Proj4js.common.HALF_PI*this.a)return Proj4js.reportError("aeqdInvDataError"),void 0;var s,e=i/this.a,o=Math.sin(e),n=Math.cos(e),a=this.long0;if(Math.abs(i)<=Proj4js.common.EPSLN)s=this.lat0;else{s=Proj4js.common.asinz(n*this.sin_p12+t.y*o*this.cos_p12/i);var r=Math.abs(this.lat0)-Proj4js.common.HALF_PI;Math.abs(r)<=Proj4js.common.EPSLN?a=this.lat0>=0?Proj4js.common.adjust_lon(this.long0+Math.atan2(t.x,-t.y)):Proj4js.common.adjust_lon(this.long0-Math.atan2(-t.x,t.y)):(r=n-this.sin_p12*Math.sin(s),Math.abs(r)=50&&Proj4js.reportError("moll:Fwd:IterationError")}o/=2,Proj4js.common.PI/2-Math.abs(s).999999999999&&(s=.999999999999);var i=Math.asin(s),e=Proj4js.common.adjust_lon(this.long0+t.x/(.900316316158*this.a*Math.cos(i)));-Proj4js.common.PI>e&&(e=-Proj4js.common.PI),e>Proj4js.common.PI&&(e=Proj4js.common.PI),s=(2*i+Math.sin(2*i))/Proj4js.common.PI,Math.abs(s)>1&&(s=1);var o=Math.asin(s);return t.x=e,t.y=o,t}},function(t,i,s){var e,o;typeof exports!=s+""?e=exports:(o=t.L,e={},e.noConflict=function(){return t.L=o,this},t.L=e),e.version="0.5.1",e.Util={extend:function(t){var i,s,e,o,n=Array.prototype.slice.call(arguments,1);for(s=0,e=n.length;e>s;s++){o=n[s]||{};for(i in o)o.hasOwnProperty(i)&&(t[i]=o[i])}return t},bind:function(t,i){var s=arguments.length>2?Array.prototype.slice.call(arguments,2):null;return function(){return t.apply(i,s||arguments)}},stamp:function(){var t=0,i="_leaflet_id";return function(s){return s[i]=s[i]||++t,s[i]}}(),limitExecByInterval:function(t,i,e){var o,n;return function a(){var r=arguments;return o?(n=!0,s):(o=!0,setTimeout(function(){o=!1,n&&(a.apply(e,r),n=!1)},i),t.apply(e,r),s)}},falseFn:function(){return!1},formatNum:function(t,i){var s=Math.pow(10,i||5);return Math.round(t*s)/s},splitWords:function(t){return t.replace(/^\s+|\s+$/g,"").split(/\s+/)},setOptions:function(t,i){return t.options=e.extend({},t.options,i),t.options},getParamString:function(t,i){var s=[];for(var e in t)t.hasOwnProperty(e)&&s.push(e+"="+t[e]);return(i&&-1!==i.indexOf("?")?"&":"?")+s.join("&")},template:function(t,i){return t.replace(/\{ *([\w_]+) *\}/g,function(t,s){var e=i[s];if(!i.hasOwnProperty(s))throw Error("No value provided for variable "+t);return e})},isArray:function(t){return"[object Array]"===Object.prototype.toString.call(t)},emptyImageUrl:"data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs="},function(){function i(i){var s,e,o=["webkit","moz","o","ms"];for(s=0;o.length>s&&!e;s++)e=t[o[s]+i];return e}function o(i){var s=+new Date,e=Math.max(0,16-(s-n));return n=s+e,t.setTimeout(i,e)}var n=0,a=t.requestAnimationFrame||i("RequestAnimationFrame")||o,r=t.cancelAnimationFrame||i("CancelAnimationFrame")||i("CancelRequestAnimationFrame")||function(i){t.clearTimeout(i)};e.Util.requestAnimFrame=function(i,n,r,h){return i=e.bind(i,n),r&&a===o?(i(),s):a.call(t,i,h)},e.Util.cancelAnimFrame=function(i){i&&r.call(t,i)}}(),e.extend=e.Util.extend,e.bind=e.Util.bind,e.stamp=e.Util.stamp,e.setOptions=e.Util.setOptions,e.Class=function(){},e.Class.extend=function(t){var i=function(){this.initialize&&this.initialize.apply(this,arguments),this._initHooks&&this.callInitHooks()},s=function(){};s.prototype=this.prototype;var o=new s;o.constructor=i,i.prototype=o;for(var n in this)this.hasOwnProperty(n)&&"prototype"!==n&&(i[n]=this[n]);t.statics&&(e.extend(i,t.statics),delete t.statics),t.includes&&(e.Util.extend.apply(null,[o].concat(t.includes)),delete t.includes),t.options&&o.options&&(t.options=e.extend({},o.options,t.options)),e.extend(o,t),o._initHooks=[];var a=this;return o.callInitHooks=function(){if(!this._initHooksCalled){a.prototype.callInitHooks&&a.prototype.callInitHooks.call(this),this._initHooksCalled=!0;for(var t=0,i=o._initHooks.length;i>t;t++)o._initHooks[t].call(this)}},i},e.Class.include=function(t){e.extend(this.prototype,t)},e.Class.mergeOptions=function(t){e.extend(this.prototype.options,t)},e.Class.addInitHook=function(t){var i=Array.prototype.slice.call(arguments,1),s="function"==typeof t?t:function(){this[t].apply(this,i)};this.prototype._initHooks=this.prototype._initHooks||[],this.prototype._initHooks.push(s)};var n="_leaflet_events";e.Mixin={},e.Mixin.Events={addEventListener:function(t,i,s){var o,a,r,h=this[n]=this[n]||{};if("object"==typeof t){for(o in t)t.hasOwnProperty(o)&&this.addEventListener(o,t[o],i);return this}for(t=e.Util.splitWords(t),a=0,r=t.length;r>a;a++)h[t[a]]=h[t[a]]||[],h[t[a]].push({action:i,context:s||this});return this},hasEventListeners:function(t){return n in this&&t in this[n]&&this[n][t].length>0},removeEventListener:function(t,i,s){var o,a,r,h,l,c=this[n];if("object"==typeof t){for(o in t)t.hasOwnProperty(o)&&this.removeEventListener(o,t[o],i);return this}for(t=e.Util.splitWords(t),a=0,r=t.length;r>a;a++)if(this.hasEventListeners(t[a]))for(h=c[t[a]],l=h.length-1;l>=0;l--)i&&h[l].action!==i||s&&h[l].context!==s||h.splice(l,1);return this},fireEvent:function(t,i){if(!this.hasEventListeners(t))return this;for(var s=e.extend({type:t,target:this},i),o=this[n][t].slice(),a=0,r=o.length;r>a;a++)o[a].action.call(o[a].context||this,s);return this}},e.Mixin.Events.on=e.Mixin.Events.addEventListener,e.Mixin.Events.off=e.Mixin.Events.removeEventListener,e.Mixin.Events.fire=e.Mixin.Events.fireEvent,function(){var o=!!t.ActiveXObject,n=o&&!t.XMLHttpRequest,a=o&&!i.querySelector,r=navigator.userAgent.toLowerCase(),h=-1!==r.indexOf("webkit"),l=-1!==r.indexOf("chrome"),c=-1!==r.indexOf("android"),m=-1!==r.search("android [23]"),u=typeof orientation!=s+"",d=t.navigator&&t.navigator.msPointerEnabled&&t.navigator.msMaxTouchPoints,p="devicePixelRatio"in t&&t.devicePixelRatio>1||"matchMedia"in t&&t.matchMedia("(min-resolution:144dpi)")&&t.matchMedia("(min-resolution:144dpi)").matches,_=i.documentElement,f=o&&"transition"in _.style,P="WebKitCSSMatrix"in t&&"m11"in new t.WebKitCSSMatrix,y="MozPerspective"in _.style,g="OTransition"in _.style,L=!t.L_DISABLE_3D&&(f||P||y||g),v=!t.L_NO_TOUCH&&function(){var t="ontouchstart";if(d||t in _)return!0;var s=i.createElement("div"),e=!1;return s.setAttribute?(s.setAttribute(t,"return;"),"function"==typeof s[t]&&(e=!0),s.removeAttribute(t),s=null,e):!1}();e.Browser={ie:o,ie6:n,ie7:a,webkit:h,android:c,android23:m,chrome:l,ie3d:f,webkit3d:P,gecko3d:y,opera3d:g,any3d:L,mobile:u,mobileWebkit:u&&h,mobileWebkit3d:u&&P,mobileOpera:u&&t.opera,touch:v,msTouch:d,retina:p}}(),e.Point=function(t,i,s){this.x=s?Math.round(t):t,this.y=s?Math.round(i):i},e.Point.prototype={clone:function(){return new e.Point(this.x,this.y)},add:function(t){return this.clone()._add(e.point(t))},_add:function(t){return this.x+=t.x,this.y+=t.y,this},subtract:function(t){return this.clone()._subtract(e.point(t))},_subtract:function(t){return this.x-=t.x,this.y-=t.y,this},divideBy:function(t){return this.clone()._divideBy(t)},_divideBy:function(t){return this.x/=t,this.y/=t,this},multiplyBy:function(t){return this.clone()._multiplyBy(t)},_multiplyBy:function(t){return this.x*=t,this.y*=t,this},round:function(){return this.clone()._round()},_round:function(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this},floor:function(){return this.clone()._floor()},_floor:function(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this},distanceTo:function(t){t=e.point(t);var i=t.x-this.x,s=t.y-this.y;return Math.sqrt(i*i+s*s)},equals:function(t){return t.x===this.x&&t.y===this.y},toString:function(){return"Point("+e.Util.formatNum(this.x)+", "+e.Util.formatNum(this.y)+")"}},e.point=function(t,i,s){return t instanceof e.Point?t:e.Util.isArray(t)?new e.Point(t[0],t[1]):isNaN(t)?t:new e.Point(t,i,s)},e.Bounds=function(t,i){if(t)for(var s=i?[t,i]:t,e=0,o=s.length;o>e;e++)this.extend(s[e])},e.Bounds.prototype={extend:function(t){return t=e.point(t),this.min||this.max?(this.min.x=Math.min(t.x,this.min.x),this.max.x=Math.max(t.x,this.max.x),this.min.y=Math.min(t.y,this.min.y),this.max.y=Math.max(t.y,this.max.y)):(this.min=t.clone(),this.max=t.clone()),this},getCenter:function(t){return new e.Point((this.min.x+this.max.x)/2,(this.min.y+this.max.y)/2,t)},getBottomLeft:function(){return new e.Point(this.min.x,this.max.y)},getTopRight:function(){return new e.Point(this.max.x,this.min.y)},getSize:function(){return this.max.subtract(this.min)},contains:function(t){var i,s;return t="number"==typeof t[0]||t instanceof e.Point?e.point(t):e.bounds(t),t instanceof e.Bounds?(i=t.min,s=t.max):i=s=t,i.x>=this.min.x&&s.x<=this.max.x&&i.y>=this.min.y&&s.y<=this.max.y},intersects:function(t){t=e.bounds(t);var i=this.min,s=this.max,o=t.min,n=t.max,a=n.x>=i.x&&o.x<=s.x,r=n.y>=i.y&&o.y<=s.y;return a&&r},isValid:function(){return!(!this.min||!this.max)}},e.bounds=function(t,i){return!t||t instanceof e.Bounds?t:new e.Bounds(t,i)},e.Transformation=function(t,i,s,e){this._a=t,this._b=i,this._c=s,this._d=e},e.Transformation.prototype={transform:function(t,i){return this._transform(t.clone(),i)},_transform:function(t,i){return i=i||1,t.x=i*(this._a*t.x+this._b),t.y=i*(this._c*t.y+this._d),t},untransform:function(t,i){return i=i||1,new e.Point((t.x/i-this._b)/this._a,(t.y/i-this._d)/this._c)}},e.DomUtil={get:function(t){return"string"==typeof t?i.getElementById(t):t},getStyle:function(t,s){var e=t.style[s];if(!e&&t.currentStyle&&(e=t.currentStyle[s]),(!e||"auto"===e)&&i.defaultView){var o=i.defaultView.getComputedStyle(t,null);e=o?o[s]:null}return"auto"===e?null:e},getViewportOffset:function(t){var s,o=0,n=0,a=t,r=i.body,h=e.Browser.ie7;do{if(o+=a.offsetTop||0,n+=a.offsetLeft||0,o+=parseInt(e.DomUtil.getStyle(a,"borderTopWidth"),10)||0,n+=parseInt(e.DomUtil.getStyle(a,"borderLeftWidth"),10)||0,s=e.DomUtil.getStyle(a,"position"),a.offsetParent===r&&"absolute"===s)break;if("fixed"===s){o+=r.scrollTop||0,n+=r.scrollLeft||0;break}a=a.offsetParent}while(a);a=t;do{if(a===r)break;o-=a.scrollTop||0,n-=a.scrollLeft||0,e.DomUtil.documentIsLtr()||!e.Browser.webkit&&!h||(n+=a.scrollWidth-a.clientWidth,h&&"hidden"!==e.DomUtil.getStyle(a,"overflow-y")&&"hidden"!==e.DomUtil.getStyle(a,"overflow")&&(n+=17)),a=a.parentNode}while(a);return new e.Point(n,o)},documentIsLtr:function(){return e.DomUtil._docIsLtrCached||(e.DomUtil._docIsLtrCached=!0,e.DomUtil._docIsLtr="ltr"===e.DomUtil.getStyle(i.body,"direction")),e.DomUtil._docIsLtr},create:function(t,s,e){var o=i.createElement(t);return o.className=s,e&&e.appendChild(o),o},disableTextSelection:function(){i.selection&&i.selection.empty&&i.selection.empty(),this._onselectstart||(this._onselectstart=i.onselectstart||null,i.onselectstart=e.Util.falseFn)},enableTextSelection:function(){i.onselectstart===e.Util.falseFn&&(i.onselectstart=this._onselectstart,this._onselectstart=null)},hasClass:function(t,i){return t.className.length>0&&RegExp("(^|\\s)"+i+"(\\s|$)").test(t.className)},addClass:function(t,i){e.DomUtil.hasClass(t,i)||(t.className+=(t.className?" ":"")+i)},removeClass:function(t,i){function s(t,s){return s===i?"":t}t.className=t.className.replace(/(\S+)\s*/g,s).replace(/(^\s+|\s+$)/,"")},setOpacity:function(t,i){if("opacity"in t.style)t.style.opacity=i;else if("filter"in t.style){var s=!1,e="DXImageTransform.Microsoft.Alpha";try{s=t.filters.item(e)}catch(o){}i=Math.round(100*i),s?(s.Enabled=100!==i,s.Opacity=i):t.style.filter+=" progid:"+e+"(opacity="+i+")"}},testProp:function(t){for(var s=i.documentElement.style,e=0;t.length>e;e++)if(t[e]in s)return t[e];return!1},getTranslateString:function(t){var i=e.Browser.webkit3d,s="translate"+(i?"3d":"")+"(",o=(i?",0":"")+")";return s+t.x+"px,"+t.y+"px"+o},getScaleString:function(t,i){var s=e.DomUtil.getTranslateString(i.add(i.multiplyBy(-1*t))),o=" scale("+t+") ";return s+o},setPosition:function(t,i,s){t._leaflet_pos=i,!s&&e.Browser.any3d?(t.style[e.DomUtil.TRANSFORM]=e.DomUtil.getTranslateString(i),e.Browser.mobileWebkit3d&&(t.style.WebkitBackfaceVisibility="hidden")):(t.style.left=i.x+"px",t.style.top=i.y+"px")},getPosition:function(t){return t._leaflet_pos}},e.DomUtil.TRANSFORM=e.DomUtil.testProp(["transform","WebkitTransform","OTransform","MozTransform","msTransform"]),e.DomUtil.TRANSITION=e.DomUtil.testProp(["webkitTransition","transition","OTransition","MozTransition","msTransition"]),e.DomUtil.TRANSITION_END="webkitTransition"===e.DomUtil.TRANSITION||"OTransition"===e.DomUtil.TRANSITION?e.DomUtil.TRANSITION+"End":"transitionend",e.LatLng=function(t,i){var s=parseFloat(t),e=parseFloat(i);if(isNaN(s)||isNaN(e))throw Error("Invalid LatLng object: ("+t+", "+i+")");this.lat=s,this.lng=e},e.extend(e.LatLng,{DEG_TO_RAD:Math.PI/180,RAD_TO_DEG:180/Math.PI,MAX_MARGIN:1e-9}),e.LatLng.prototype={equals:function(t){if(!t)return!1;t=e.latLng(t);var i=Math.max(Math.abs(this.lat-t.lat),Math.abs(this.lng-t.lng));return e.LatLng.MAX_MARGIN>=i},toString:function(t){return"LatLng("+e.Util.formatNum(this.lat,t)+", "+e.Util.formatNum(this.lng,t)+")"},distanceTo:function(t){t=e.latLng(t);var i=6378137,s=e.LatLng.DEG_TO_RAD,o=(t.lat-this.lat)*s,n=(t.lng-this.lng)*s,a=this.lat*s,r=t.lat*s,h=Math.sin(o/2),l=Math.sin(n/2),c=h*h+l*l*Math.cos(a)*Math.cos(r);return 2*i*Math.atan2(Math.sqrt(c),Math.sqrt(1-c))},wrap:function(t,i){var s=this.lng;return t=t||-180,i=i||180,s=(s+i)%(i-t)+(t>s||s===i?i:t),new e.LatLng(this.lat,s)}},e.latLng=function(t,i){return t instanceof e.LatLng?t:e.Util.isArray(t)?new e.LatLng(t[0],t[1]):isNaN(t)?t:new e.LatLng(t,i)},e.LatLngBounds=function(t,i){if(t)for(var s=i?[t,i]:t,e=0,o=s.length;o>e;e++)this.extend(s[e])},e.LatLngBounds.prototype={extend:function(t){return t="number"==typeof t[0]||"string"==typeof t[0]||t instanceof e.LatLng?e.latLng(t):e.latLngBounds(t),t instanceof e.LatLng?this._southWest||this._northEast?(this._southWest.lat=Math.min(t.lat,this._southWest.lat),this._southWest.lng=Math.min(t.lng,this._southWest.lng),this._northEast.lat=Math.max(t.lat,this._northEast.lat),this._northEast.lng=Math.max(t.lng,this._northEast.lng)):(this._southWest=new e.LatLng(t.lat,t.lng),this._northEast=new e.LatLng(t.lat,t.lng)):t instanceof e.LatLngBounds&&(this.extend(t._southWest),this.extend(t._northEast)),this},pad:function(t){var i=this._southWest,s=this._northEast,o=Math.abs(i.lat-s.lat)*t,n=Math.abs(i.lng-s.lng)*t;return new e.LatLngBounds(new e.LatLng(i.lat-o,i.lng-n),new e.LatLng(s.lat+o,s.lng+n))},getCenter:function(){return new e.LatLng((this._southWest.lat+this._northEast.lat)/2,(this._southWest.lng+this._northEast.lng)/2)},getSouthWest:function(){return this._southWest},getNorthEast:function(){return this._northEast},getNorthWest:function(){return new e.LatLng(this._northEast.lat,this._southWest.lng)},getSouthEast:function(){return new e.LatLng(this._southWest.lat,this._northEast.lng)},contains:function(t){t="number"==typeof t[0]||t instanceof e.LatLng?e.latLng(t):e.latLngBounds(t);var i,s,o=this._southWest,n=this._northEast;return t instanceof e.LatLngBounds?(i=t.getSouthWest(),s=t.getNorthEast()):i=s=t,i.lat>=o.lat&&s.lat<=n.lat&&i.lng>=o.lng&&s.lng<=n.lng},intersects:function(t){t=e.latLngBounds(t);var i=this._southWest,s=this._northEast,o=t.getSouthWest(),n=t.getNorthEast(),a=n.lat>=i.lat&&o.lat<=s.lat,r=n.lng>=i.lng&&o.lng<=s.lng;return a&&r},toBBoxString:function(){var t=this._southWest,i=this._northEast;return[t.lng,t.lat,i.lng,i.lat].join(",")},equals:function(t){return t?(t=e.latLngBounds(t),this._southWest.equals(t.getSouthWest())&&this._northEast.equals(t.getNorthEast())):!1},isValid:function(){return!(!this._southWest||!this._northEast)}},e.latLngBounds=function(t,i){return!t||t instanceof e.LatLngBounds?t:new e.LatLngBounds(t,i)},e.Projection={},e.Projection.SphericalMercator={MAX_LATITUDE:85.0511287798,project:function(t){var i=e.LatLng.DEG_TO_RAD,s=this.MAX_LATITUDE,o=Math.max(Math.min(s,t.lat),-s),n=t.lng*i,a=o*i;return a=Math.log(Math.tan(Math.PI/4+a/2)),new e.Point(n,a)},unproject:function(t){var i=e.LatLng.RAD_TO_DEG,s=t.x*i,o=(2*Math.atan(Math.exp(t.y))-Math.PI/2)*i;return new e.LatLng(o,s)}},e.Projection.LonLat={project:function(t){return new e.Point(t.lng,t.lat)},unproject:function(t){return new e.LatLng(t.y,t.x)}},e.CRS={latLngToPoint:function(t,i){var s=this.projection.project(t),e=this.scale(i);return this.transformation._transform(s,e)},pointToLatLng:function(t,i){var s=this.scale(i),e=this.transformation.untransform(t,s);return this.projection.unproject(e)},project:function(t){return this.projection.project(t)},scale:function(t){return 256*Math.pow(2,t)}},e.CRS.Simple=e.extend({},e.CRS,{projection:e.Projection.LonLat,transformation:new e.Transformation(1,0,-1,0),scale:function(t){return Math.pow(2,t)}}),e.CRS.EPSG3857=e.extend({},e.CRS,{code:"EPSG:3857",projection:e.Projection.SphericalMercator,transformation:new e.Transformation(.5/Math.PI,.5,-.5/Math.PI,.5),project:function(t){var i=this.projection.project(t),s=6378137;return i.multiplyBy(s)}}),e.CRS.EPSG900913=e.extend({},e.CRS.EPSG3857,{code:"EPSG:900913"}),e.CRS.EPSG4326=e.extend({},e.CRS,{code:"EPSG:4326",projection:e.Projection.LonLat,transformation:new e.Transformation(1/360,.5,-1/360,.5)}),e.Map=e.Class.extend({includes:e.Mixin.Events,options:{crs:e.CRS.EPSG3857,fadeAnimation:e.DomUtil.TRANSITION&&!e.Browser.android23,trackResize:!0,markerZoomAnimation:e.DomUtil.TRANSITION&&e.Browser.any3d},initialize:function(t,i){i=e.setOptions(this,i),this._initContainer(t),this._initLayout(),this.callInitHooks(),this._initEvents(),i.maxBounds&&this.setMaxBounds(i.maxBounds),i.center&&i.zoom!==s&&this.setView(e.latLng(i.center),i.zoom,!0),this._initLayers(i.layers)},setView:function(t,i){return this._resetView(e.latLng(t),this._limitZoom(i)),this},setZoom:function(t){return this.setView(this.getCenter(),t)},zoomIn:function(t){return this.setZoom(this._zoom+(t||1))},zoomOut:function(t){return this.setZoom(this._zoom-(t||1))},fitBounds:function(t){var i=this.getBoundsZoom(t);return this.setView(e.latLngBounds(t).getCenter(),i)},fitWorld:function(){var t=new e.LatLng(-60,-170),i=new e.LatLng(85,179);return this.fitBounds(new e.LatLngBounds(t,i))},panTo:function(t){return this.setView(t,this._zoom)},panBy:function(t){return this.fire("movestart"),this._rawPanBy(e.point(t)),this.fire("move"),this.fire("moveend")},setMaxBounds:function(t){if(t=e.latLngBounds(t),this.options.maxBounds=t,!t)return this._boundsMinZoom=null,this;var i=this.getBoundsZoom(t,!0);return this._boundsMinZoom=i,this._loaded&&(i>this._zoom?this.setView(t.getCenter(),i):this.panInsideBounds(t)),this},panInsideBounds:function(t){t=e.latLngBounds(t);var i=this.getBounds(),s=this.project(i.getSouthWest()),o=this.project(i.getNorthEast()),n=this.project(t.getSouthWest()),a=this.project(t.getNorthEast()),r=0,h=0;return o.ya.x&&(r=a.x-o.x),s.y>n.y&&(h=n.y-s.y),s.x=r);return m&&i?null:i?r:r-1},getSize:function(){return(!this._size||this._sizeChanged)&&(this._size=new e.Point(this._container.clientWidth,this._container.clientHeight),this._sizeChanged=!1),this._size.clone()},getPixelBounds:function(){var t=this._getTopLeftPoint();return new e.Bounds(t,t.add(this.getSize()))},getPixelOrigin:function(){return this._initialTopLeftPoint},getPanes:function(){return this._panes},getContainer:function(){return this._container},getZoomScale:function(t){var i=this.options.crs;return i.scale(t)/i.scale(this._zoom)},getScaleZoom:function(t){return this._zoom+Math.log(t)/Math.LN2},project:function(t,i){return i=i===s?this._zoom:i,this.options.crs.latLngToPoint(e.latLng(t),i)},unproject:function(t,i){return i=i===s?this._zoom:i,this.options.crs.pointToLatLng(e.point(t),i)},layerPointToLatLng:function(t){var i=e.point(t).add(this._initialTopLeftPoint);return this.unproject(i)},latLngToLayerPoint:function(t){var i=this.project(e.latLng(t))._round();return i._subtract(this._initialTopLeftPoint)},containerPointToLayerPoint:function(t){return e.point(t).subtract(this._getMapPanePos())},layerPointToContainerPoint:function(t){return e.point(t).add(this._getMapPanePos())},containerPointToLatLng:function(t){var i=this.containerPointToLayerPoint(e.point(t));return this.layerPointToLatLng(i)},latLngToContainerPoint:function(t){return this.layerPointToContainerPoint(this.latLngToLayerPoint(e.latLng(t)))},mouseEventToContainerPoint:function(t){return e.DomEvent.getMousePosition(t,this._container)},mouseEventToLayerPoint:function(t){return this.containerPointToLayerPoint(this.mouseEventToContainerPoint(t))},mouseEventToLatLng:function(t){return this.layerPointToLatLng(this.mouseEventToLayerPoint(t))},_initContainer:function(t){var i=this._container=e.DomUtil.get(t);if(i._leaflet)throw Error("Map container is already initialized.");i._leaflet=!0},_initLayout:function(){var t=this._container;e.DomUtil.addClass(t,"leaflet-container"),e.Browser.touch&&e.DomUtil.addClass(t,"leaflet-touch"),this.options.fadeAnimation&&e.DomUtil.addClass(t,"leaflet-fade-anim");var i=e.DomUtil.getStyle(t,"position");"absolute"!==i&&"relative"!==i&&"fixed"!==i&&(t.style.position="relative"),this._initPanes(),this._initControlPos&&this._initControlPos()},_initPanes:function(){var t=this._panes={};this._mapPane=t.mapPane=this._createPane("leaflet-map-pane",this._container),this._tilePane=t.tilePane=this._createPane("leaflet-tile-pane",this._mapPane),t.objectsPane=this._createPane("leaflet-objects-pane",this._mapPane),t.shadowPane=this._createPane("leaflet-shadow-pane"),t.overlayPane=this._createPane("leaflet-overlay-pane"),t.markerPane=this._createPane("leaflet-marker-pane"),t.popupPane=this._createPane("leaflet-popup-pane");var i=" leaflet-zoom-hide";this.options.markerZoomAnimation||(e.DomUtil.addClass(t.markerPane,i),e.DomUtil.addClass(t.shadowPane,i),e.DomUtil.addClass(t.popupPane,i))},_createPane:function(t,i){return e.DomUtil.create("div",t,i||this._panes.objectsPane)},_initLayers:function(t){t=t?e.Util.isArray(t)?t:[t]:[],this._layers={},this._zoomBoundLayers={},this._tileLayersNum=0;var i,s;for(i=0,s=t.length;s>i;i++)this.addLayer(t[i])},_resetView:function(t,i,s,o){var n=this._zoom!==i;o||(this.fire("movestart"),n&&this.fire("zoomstart")),this._zoom=i,this._initialTopLeftPoint=this._getNewTopLeftPoint(t),s?this._initialTopLeftPoint._add(this._getMapPanePos()):e.DomUtil.setPosition(this._mapPane,new e.Point(0,0)),this._tileLayersToLoad=this._tileLayersNum;var a=!this._loaded;this._loaded=!0,this.fire("viewreset",{hard:!s}),this.fire("move"),(n||o)&&this.fire("zoomend"),this.fire("moveend",{hard:!s}),a&&this.fire("load")},_rawPanBy:function(t){e.DomUtil.setPosition(this._mapPane,this._getMapPanePos().subtract(t))},_updateZoomLevels:function(){var t,i=1/0,e=-1/0;for(t in this._zoomBoundLayers)if(this._zoomBoundLayers.hasOwnProperty(t)){var o=this._zoomBoundLayers[t];isNaN(o.options.minZoom)||(i=Math.min(i,o.options.minZoom)),isNaN(o.options.maxZoom)||(e=Math.max(e,o.options.maxZoom))}t===s?this._layersMaxZoom=this._layersMinZoom=s:(this._layersMaxZoom=e,this._layersMinZoom=i)},_initEvents:function(){if(e.DomEvent){e.DomEvent.on(this._container,"click",this._onMouseClick,this);var i,s,o=["dblclick","mousedown","mouseup","mouseenter","mouseleave","mousemove","contextmenu"];for(i=0,s=o.length;s>i;i++)e.DomEvent.on(this._container,o[i],this._fireMouseEvent,this);this.options.trackResize&&e.DomEvent.on(t,"resize",this._onResize,this)}},_onResize:function(){e.Util.cancelAnimFrame(this._resizeRequest),this._resizeRequest=e.Util.requestAnimFrame(this.invalidateSize,this,!1,this._container)},_onMouseClick:function(t){!this._loaded||this.dragging&&this.dragging.moved()||(this.fire("preclick"),this._fireMouseEvent(t))},_fireMouseEvent:function(t){if(this._loaded){var i=t.type;if(i="mouseenter"===i?"mouseover":"mouseleave"===i?"mouseout":i,this.hasEventListeners(i)){"contextmenu"===i&&e.DomEvent.preventDefault(t);var s=this.mouseEventToContainerPoint(t),o=this.containerPointToLayerPoint(s),n=this.layerPointToLatLng(o);this.fire(i,{latlng:n,layerPoint:o,containerPoint:s,originalEvent:t})}}},_onTileLayerLoad:function(){this._tileLayersToLoad--,this._tileLayersNum&&!this._tileLayersToLoad&&this._tileBg&&(clearTimeout(this._clearTileBgTimer),this._clearTileBgTimer=setTimeout(e.bind(this._clearTileBg,this),500))},whenReady:function(t,i){return this._loaded?t.call(i||this,this):this.on("load",t,i),this},_getMapPanePos:function(){return e.DomUtil.getPosition(this._mapPane)},_getTopLeftPoint:function(){if(!this._loaded)throw Error("Set map center and zoom first.");return this._initialTopLeftPoint.subtract(this._getMapPanePos())},_getNewTopLeftPoint:function(t,i){var s=this.getSize()._divideBy(2);return this.project(t,i)._subtract(s)._round()},_latLngToNewLayerPoint:function(t,i,s){var e=this._getNewTopLeftPoint(s,i).add(this._getMapPanePos());return this.project(t,i)._subtract(e)},_getCenterLayerPoint:function(){return this.containerPointToLayerPoint(this.getSize()._divideBy(2))},_getCenterOffset:function(t){return this.latLngToLayerPoint(t).subtract(this._getCenterLayerPoint())},_limitZoom:function(t){var i=this.getMinZoom(),s=this.getMaxZoom();return Math.max(i,Math.min(s,t))}}),e.map=function(t,i){return new e.Map(t,i)},e.Projection.Mercator={MAX_LATITUDE:85.0840591556,R_MINOR:6356752.3142,R_MAJOR:6378137,project:function(t){var i=e.LatLng.DEG_TO_RAD,s=this.MAX_LATITUDE,o=Math.max(Math.min(s,t.lat),-s),n=this.R_MAJOR,a=this.R_MINOR,r=t.lng*i*n,h=o*i,l=a/n,c=Math.sqrt(1-l*l),m=c*Math.sin(h);m=Math.pow((1-m)/(1+m),.5*c);var u=Math.tan(.5*(.5*Math.PI-h))/m;return h=-a*Math.log(u),new e.Point(r,h)},unproject:function(t){for(var i,s=e.LatLng.RAD_TO_DEG,o=this.R_MAJOR,n=this.R_MINOR,a=t.x*s/o,r=n/o,h=Math.sqrt(1-r*r),l=Math.exp(-t.y/n),c=Math.PI/2-2*Math.atan(l),m=15,u=1e-7,d=m,p=.1;Math.abs(p)>u&&--d>0;)i=h*Math.sin(c),p=Math.PI/2-2*Math.atan(l*Math.pow((1-i)/(1+i),.5*h))-c,c+=p;return new e.LatLng(c*s,a)}},e.CRS.EPSG3395=e.extend({},e.CRS,{code:"EPSG:3395",projection:e.Projection.Mercator,transformation:function(){var t=e.Projection.Mercator,i=t.R_MAJOR,s=t.R_MINOR;return new e.Transformation(.5/(Math.PI*i),.5,-.5/(Math.PI*s),.5)}()}),e.TileLayer=e.Class.extend({includes:e.Mixin.Events,options:{minZoom:0,maxZoom:18,tileSize:256,subdomains:"abc",errorTileUrl:"",attribution:"",zoomOffset:0,opacity:1,unloadInvisibleTiles:e.Browser.mobile,updateWhenIdle:e.Browser.mobile},initialize:function(t,i){i=e.setOptions(this,i),i.detectRetina&&e.Browser.retina&&i.maxZoom>0&&(i.tileSize=Math.floor(i.tileSize/2),i.zoomOffset++,i.minZoom>0&&i.minZoom--,this.options.maxZoom--),this._url=t;var s=this.options.subdomains;"string"==typeof s&&(this.options.subdomains=s.split(""))},onAdd:function(t){this._map=t,this._initContainer(),this._createTileProto(),t.on({viewreset:this._resetCallback,moveend:this._update},this),this.options.updateWhenIdle||(this._limitedUpdate=e.Util.limitExecByInterval(this._update,150,this),t.on("move",this._limitedUpdate,this)),this._reset(),this._update()},addTo:function(t){return t.addLayer(this),this},onRemove:function(t){this._container.parentNode.removeChild(this._container),t.off({viewreset:this._resetCallback,moveend:this._update},this),this.options.updateWhenIdle||t.off("move",this._limitedUpdate,this),this._container=null,this._map=null},bringToFront:function(){var t=this._map._panes.tilePane;return this._container&&(t.appendChild(this._container),this._setAutoZIndex(t,Math.max)),this},bringToBack:function(){var t=this._map._panes.tilePane;return this._container&&(t.insertBefore(this._container,t.firstChild),this._setAutoZIndex(t,Math.min)),this},getAttribution:function(){return this.options.attribution},setOpacity:function(t){return this.options.opacity=t,this._map&&this._updateOpacity(),this},setZIndex:function(t){return this.options.zIndex=t,this._updateZIndex(),this},setUrl:function(t,i){return this._url=t,i||this.redraw(),this},redraw:function(){return this._map&&(this._map._panes.tilePane.empty=!1,this._reset(!0),this._update()),this},_updateZIndex:function(){this._container&&this.options.zIndex!==s&&(this._container.style.zIndex=this.options.zIndex)},_setAutoZIndex:function(t,i){var s,e,o,n=t.children,a=-i(1/0,-1/0);for(e=0,o=n.length;o>e;e++)n[e]!==this._container&&(s=parseInt(n[e].style.zIndex,10),isNaN(s)||(a=i(a,s)));this.options.zIndex=this._container.style.zIndex=(isFinite(a)?a:0)+i(1,-1)},_updateOpacity:function(){e.DomUtil.setOpacity(this._container,this.options.opacity);var t,i=this._tiles;if(e.Browser.webkit)for(t in i)i.hasOwnProperty(t)&&(i[t].style.webkitTransform+=" translate(0,0)")},_initContainer:function(){var t=this._map._panes.tilePane;(!this._container||t.empty)&&(this._container=e.DomUtil.create("div","leaflet-layer"),this._updateZIndex(),t.appendChild(this._container),1>this.options.opacity&&this._updateOpacity())},_resetCallback:function(t){this._reset(t.hard)},_reset:function(t){var i=this._tiles;for(var s in i)i.hasOwnProperty(s)&&this.fire("tileunload",{tile:i[s]});this._tiles={},this._tilesToLoad=0,this.options.reuseTiles&&(this._unusedTiles=[]),t&&this._container&&(this._container.innerHTML=""),this._initContainer()},_update:function(){if(this._map){var t=this._map.getPixelBounds(),i=this._map.getZoom(),s=this.options.tileSize;if(!(i>this.options.maxZoom||this.options.minZoom>i)){var o=new e.Point(Math.floor(t.min.x/s),Math.floor(t.min.y/s)),n=new e.Point(Math.floor(t.max.x/s),Math.floor(t.max.y/s)),a=new e.Bounds(o,n);this._addTilesFromCenterOut(a),(this.options.unloadInvisibleTiles||this.options.reuseTiles)&&this._removeOtherTiles(a)}}},_addTilesFromCenterOut:function(t){var s,o,n,a=[],r=t.getCenter();for(s=t.min.y;t.max.y>=s;s++)for(o=t.min.x;t.max.x>=o;o++)n=new e.Point(o,s),this._tileShouldBeLoaded(n)&&a.push(n);var h=a.length;if(0!==h){a.sort(function(t,i){return t.distanceTo(r)-i.distanceTo(r)});var l=i.createDocumentFragment();for(this._tilesToLoad||this.fire("loading"),this._tilesToLoad+=h,o=0;h>o;o++)this._addTile(a[o],l);this._container.appendChild(l)}},_tileShouldBeLoaded:function(t){ -if(t.x+":"+t.y in this._tiles)return!1;if(!this.options.continuousWorld){var i=this._getWrapTileNum();if(this.options.noWrap&&(0>t.x||t.x>=i)||0>t.y||t.y>=i)return!1}return!0},_removeOtherTiles:function(t){var i,s,e,o;for(o in this._tiles)this._tiles.hasOwnProperty(o)&&(i=o.split(":"),s=parseInt(i[0],10),e=parseInt(i[1],10),(t.min.x>s||s>t.max.x||t.min.y>e||e>t.max.y)&&this._removeTile(o))},_removeTile:function(t){var i=this._tiles[t];this.fire("tileunload",{tile:i,url:i.src}),this.options.reuseTiles?(e.DomUtil.removeClass(i,"leaflet-tile-loaded"),this._unusedTiles.push(i)):i.parentNode===this._container&&this._container.removeChild(i),e.Browser.android||(i.src=e.Util.emptyImageUrl),delete this._tiles[t]},_addTile:function(t,i){var s=this._getTilePos(t),o=this._getTile();e.DomUtil.setPosition(o,s,e.Browser.chrome||e.Browser.android23),this._tiles[t.x+":"+t.y]=o,this._loadTile(o,t),o.parentNode!==this._container&&i.appendChild(o)},_getZoomForUrl:function(){var t=this.options,i=this._map.getZoom();return t.zoomReverse&&(i=t.maxZoom-i),i+t.zoomOffset},_getTilePos:function(t){var i=this._map.getPixelOrigin(),s=this.options.tileSize;return t.multiplyBy(s).subtract(i)},getTileUrl:function(t){return this._adjustTilePoint(t),e.Util.template(this._url,e.extend({s:this._getSubdomain(t),z:this._getZoomForUrl(),x:t.x,y:t.y},this.options))},_getWrapTileNum:function(){return Math.pow(2,this._getZoomForUrl())},_adjustTilePoint:function(t){var i=this._getWrapTileNum();this.options.continuousWorld||this.options.noWrap||(t.x=(t.x%i+i)%i),this.options.tms&&(t.y=i-t.y-1)},_getSubdomain:function(t){var i=(t.x+t.y)%this.options.subdomains.length;return this.options.subdomains[i]},_createTileProto:function(){var t=this._tileImg=e.DomUtil.create("img","leaflet-tile");t.style.width=t.style.height=this.options.tileSize+"px",t.galleryimg="no"},_getTile:function(){if(this.options.reuseTiles&&this._unusedTiles.length>0){var t=this._unusedTiles.pop();return this._resetTile(t),t}return this._createTile()},_resetTile:function(){},_createTile:function(){var t=this._tileImg.cloneNode(!1);return t.onselectstart=t.onmousemove=e.Util.falseFn,t},_loadTile:function(t,i){t._layer=this,t.onload=this._tileOnLoad,t.onerror=this._tileOnError,t.src=this.getTileUrl(i)},_tileLoaded:function(){this._tilesToLoad--,this._tilesToLoad||this.fire("load")},_tileOnLoad:function(){var t=this._layer;this.src!==e.Util.emptyImageUrl&&(e.DomUtil.addClass(this,"leaflet-tile-loaded"),t.fire("tileload",{tile:this,url:this.src})),t._tileLoaded()},_tileOnError:function(){var t=this._layer;t.fire("tileerror",{tile:this,url:this.src});var i=t.options.errorTileUrl;i&&(this.src=i),t._tileLoaded()}}),e.tileLayer=function(t,i){return new e.TileLayer(t,i)},e.TileLayer.WMS=e.TileLayer.extend({defaultWmsParams:{service:"WMS",request:"GetMap",version:"1.1.1",layers:"",styles:"",format:"image/jpeg",transparent:!1},initialize:function(t,i){this._url=t;var s=e.extend({},this.defaultWmsParams);s.width=s.height=i.detectRetina&&e.Browser.retina?2*this.options.tileSize:this.options.tileSize;for(var o in i)this.options.hasOwnProperty(o)||(s[o]=i[o]);this.wmsParams=s,e.setOptions(this,i)},onAdd:function(t){var i=parseFloat(this.wmsParams.version)>=1.3?"crs":"srs";this.wmsParams[i]=t.options.crs.code,e.TileLayer.prototype.onAdd.call(this,t)},getTileUrl:function(t,i){this._adjustTilePoint(t);var s=this._map,o=s.options.crs,n=this.options.tileSize,a=t.multiplyBy(n),r=a.add(new e.Point(n,n)),h=o.project(s.unproject(a,i)),l=o.project(s.unproject(r,i)),c=[h.x,l.y,l.x,h.y].join(","),m=e.Util.template(this._url,{s:this._getSubdomain(t)});return m+e.Util.getParamString(this.wmsParams,m)+"&bbox="+c},setParams:function(t,i){return e.extend(this.wmsParams,t),i||this.redraw(),this}}),e.tileLayer.wms=function(t,i){return new e.TileLayer.WMS(t,i)},e.TileLayer.Canvas=e.TileLayer.extend({options:{async:!1},initialize:function(t){e.setOptions(this,t)},redraw:function(){var t=this._tiles;for(var i in t)t.hasOwnProperty(i)&&this._redrawTile(t[i])},_redrawTile:function(t){this.drawTile(t,t._tilePoint,this._map._zoom)},_createTileProto:function(){var t=this._canvasProto=e.DomUtil.create("canvas","leaflet-tile");t.width=t.height=this.options.tileSize},_createTile:function(){var t=this._canvasProto.cloneNode(!1);return t.onselectstart=t.onmousemove=e.Util.falseFn,t},_loadTile:function(t,i){t._layer=this,t._tilePoint=i,this._redrawTile(t),this.options.async||this.tileDrawn(t)},drawTile:function(){},tileDrawn:function(t){this._tileOnLoad.call(t)}}),e.tileLayer.canvas=function(t){return new e.TileLayer.Canvas(t)},e.ImageOverlay=e.Class.extend({includes:e.Mixin.Events,options:{opacity:1},initialize:function(t,i,s){this._url=t,this._bounds=e.latLngBounds(i),e.setOptions(this,s)},onAdd:function(t){this._map=t,this._image||this._initImage(),t._panes.overlayPane.appendChild(this._image),t.on("viewreset",this._reset,this),t.options.zoomAnimation&&e.Browser.any3d&&t.on("zoomanim",this._animateZoom,this),this._reset()},onRemove:function(t){t.getPanes().overlayPane.removeChild(this._image),t.off("viewreset",this._reset,this),t.options.zoomAnimation&&t.off("zoomanim",this._animateZoom,this)},addTo:function(t){return t.addLayer(this),this},setOpacity:function(t){return this.options.opacity=t,this._updateOpacity(),this},bringToFront:function(){return this._image&&this._map._panes.overlayPane.appendChild(this._image),this},bringToBack:function(){var t=this._map._panes.overlayPane;return this._image&&t.insertBefore(this._image,t.firstChild),this},_initImage:function(){this._image=e.DomUtil.create("img","leaflet-image-layer"),this._map.options.zoomAnimation&&e.Browser.any3d?e.DomUtil.addClass(this._image,"leaflet-zoom-animated"):e.DomUtil.addClass(this._image,"leaflet-zoom-hide"),this._updateOpacity(),e.extend(this._image,{galleryimg:"no",onselectstart:e.Util.falseFn,onmousemove:e.Util.falseFn,onload:e.bind(this._onImageLoad,this),src:this._url})},_animateZoom:function(t){var i=this._map,s=this._image,o=i.getZoomScale(t.zoom),n=this._bounds.getNorthWest(),a=this._bounds.getSouthEast(),r=i._latLngToNewLayerPoint(n,t.zoom,t.center),h=i._latLngToNewLayerPoint(a,t.zoom,t.center)._subtract(r),l=r._add(h._multiplyBy(.5*(1-1/o)));s.style[e.DomUtil.TRANSFORM]=e.DomUtil.getTranslateString(l)+" scale("+o+") "},_reset:function(){var t=this._image,i=this._map.latLngToLayerPoint(this._bounds.getNorthWest()),s=this._map.latLngToLayerPoint(this._bounds.getSouthEast())._subtract(i);e.DomUtil.setPosition(t,i),t.style.width=s.x+"px",t.style.height=s.y+"px"},_onImageLoad:function(){this.fire("load")},_updateOpacity:function(){e.DomUtil.setOpacity(this._image,this.options.opacity)}}),e.imageOverlay=function(t,i,s){return new e.ImageOverlay(t,i,s)},e.Icon=e.Class.extend({options:{className:""},initialize:function(t){e.setOptions(this,t)},createIcon:function(){return this._createIcon("icon")},createShadow:function(){return this._createIcon("shadow")},_createIcon:function(t){var i=this._getIconUrl(t);if(!i){if("icon"===t)throw Error("iconUrl not set in Icon options (see the docs).");return null}var s=this._createImg(i);return this._setIconStyles(s,t),s},_setIconStyles:function(t,i){var s,o=this.options,n=e.point(o[i+"Size"]);s="shadow"===i?e.point(o.shadowAnchor||o.iconAnchor):e.point(o.iconAnchor),!s&&n&&(s=n.divideBy(2,!0)),t.className="leaflet-marker-"+i+" "+o.className,s&&(t.style.marginLeft=-s.x+"px",t.style.marginTop=-s.y+"px"),n&&(t.style.width=n.x+"px",t.style.height=n.y+"px")},_createImg:function(t){var s;return e.Browser.ie6?(s=i.createElement("div"),s.style.filter='progid:DXImageTransform.Microsoft.AlphaImageLoader(src="'+t+'")'):(s=i.createElement("img"),s.src=t),s},_getIconUrl:function(t){return e.Browser.retina&&this.options[t+"RetinaUrl"]?this.options[t+"RetinaUrl"]:this.options[t+"Url"]}}),e.icon=function(t){return new e.Icon(t)},e.Icon.Default=e.Icon.extend({options:{iconSize:new e.Point(25,41),iconAnchor:new e.Point(12,41),popupAnchor:new e.Point(1,-34),shadowSize:new e.Point(41,41)},_getIconUrl:function(t){var i=t+"Url";if(this.options[i])return this.options[i];e.Browser.retina&&"icon"===t&&(t+="@2x");var s=e.Icon.Default.imagePath;if(!s)throw Error("Couldn't autodetect L.Icon.Default.imagePath, set it manually.");return"marker-"+t+".png"}}),e.Icon.Default.imagePath=function(){var t,s,e,o,n=i.getElementsByTagName("script"),a=/\/?leaflet[\-\._]?([\w\-\._]*)\.js\??/;for(t=0,s=n.length;s>t;t++)if(e=n[t].src,o=e.match(a))return e.split(a)[0]+""}(),e.Marker=e.Class.extend({includes:e.Mixin.Events,options:{icon:new e.Icon.Default,title:"",clickable:!0,draggable:!1,zIndexOffset:0,opacity:1,riseOnHover:!1,riseOffset:250},initialize:function(t,i){e.setOptions(this,i),this._latlng=e.latLng(t)},onAdd:function(t){this._map=t,t.on("viewreset",this.update,this),this._initIcon(),this.update(),t.options.zoomAnimation&&t.options.markerZoomAnimation&&t.on("zoomanim",this._animateZoom,this)},addTo:function(t){return t.addLayer(this),this},onRemove:function(t){this._removeIcon(),this.fire("remove"),t.off({viewreset:this.update,zoomanim:this._animateZoom},this),this._map=null},getLatLng:function(){return this._latlng},setLatLng:function(t){return this._latlng=e.latLng(t),this.update(),this.fire("move",{latlng:this._latlng})},setZIndexOffset:function(t){return this.options.zIndexOffset=t,this.update(),this},setIcon:function(t){return this._map&&this._removeIcon(),this.options.icon=t,this._map&&(this._initIcon(),this.update()),this},update:function(){if(this._icon){var t=this._map.latLngToLayerPoint(this._latlng).round();this._setPos(t)}return this},_initIcon:function(){var t=this.options,i=this._map,s=i.options.zoomAnimation&&i.options.markerZoomAnimation,o=s?"leaflet-zoom-animated":"leaflet-zoom-hide",n=!1;this._icon||(this._icon=t.icon.createIcon(),t.title&&(this._icon.title=t.title),this._initInteraction(),n=1>this.options.opacity,e.DomUtil.addClass(this._icon,o),t.riseOnHover&&e.DomEvent.on(this._icon,"mouseover",this._bringToFront,this).on(this._icon,"mouseout",this._resetZIndex,this)),this._shadow||(this._shadow=t.icon.createShadow(),this._shadow&&(e.DomUtil.addClass(this._shadow,o),n=1>this.options.opacity)),n&&this._updateOpacity();var a=this._map._panes;a.markerPane.appendChild(this._icon),this._shadow&&a.shadowPane.appendChild(this._shadow)},_removeIcon:function(){var t=this._map._panes;this.options.riseOnHover&&e.DomEvent.off(this._icon,"mouseover",this._bringToFront).off(this._icon,"mouseout",this._resetZIndex),t.markerPane.removeChild(this._icon),this._shadow&&t.shadowPane.removeChild(this._shadow),this._icon=this._shadow=null},_setPos:function(t){e.DomUtil.setPosition(this._icon,t),this._shadow&&e.DomUtil.setPosition(this._shadow,t),this._zIndex=t.y+this.options.zIndexOffset,this._resetZIndex()},_updateZIndex:function(t){this._icon.style.zIndex=this._zIndex+t},_animateZoom:function(t){var i=this._map._latLngToNewLayerPoint(this._latlng,t.zoom,t.center);this._setPos(i)},_initInteraction:function(){if(this.options.clickable){var t=this._icon,i=["dblclick","mousedown","mouseover","mouseout","contextmenu"];e.DomUtil.addClass(t,"leaflet-clickable"),e.DomEvent.on(t,"click",this._onMouseClick,this);for(var s=0;i.length>s;s++)e.DomEvent.on(t,i[s],this._fireMouseEvent,this);e.Handler.MarkerDrag&&(this.dragging=new e.Handler.MarkerDrag(this),this.options.draggable&&this.dragging.enable())}},_onMouseClick:function(t){var i=this.dragging&&this.dragging.moved();(this.hasEventListeners(t.type)||i)&&e.DomEvent.stopPropagation(t),i||(this.dragging&&this.dragging._enabled||!this._map.dragging||!this._map.dragging.moved())&&this.fire(t.type,{originalEvent:t})},_fireMouseEvent:function(t){this.fire(t.type,{originalEvent:t}),"contextmenu"===t.type&&this.hasEventListeners(t.type)&&e.DomEvent.preventDefault(t),"mousedown"!==t.type&&e.DomEvent.stopPropagation(t)},setOpacity:function(t){this.options.opacity=t,this._map&&this._updateOpacity()},_updateOpacity:function(){e.DomUtil.setOpacity(this._icon,this.options.opacity),this._shadow&&e.DomUtil.setOpacity(this._shadow,this.options.opacity)},_bringToFront:function(){this._updateZIndex(this.options.riseOffset)},_resetZIndex:function(){this._updateZIndex(0)}}),e.marker=function(t,i){return new e.Marker(t,i)},e.DivIcon=e.Icon.extend({options:{iconSize:new e.Point(12,12),className:"leaflet-div-icon"},createIcon:function(){var t=i.createElement("div"),s=this.options;return s.html&&(t.innerHTML=s.html),s.bgPos&&(t.style.backgroundPosition=-s.bgPos.x+"px "+-s.bgPos.y+"px"),this._setIconStyles(t,"icon"),t},createShadow:function(){return null}}),e.divIcon=function(t){return new e.DivIcon(t)},e.Map.mergeOptions({closePopupOnClick:!0}),e.Popup=e.Class.extend({includes:e.Mixin.Events,options:{minWidth:50,maxWidth:300,maxHeight:null,autoPan:!0,closeButton:!0,offset:new e.Point(0,6),autoPanPadding:new e.Point(5,5),className:"",zoomAnimation:!0},initialize:function(t,i){e.setOptions(this,t),this._source=i,this._animated=e.Browser.any3d&&this.options.zoomAnimation},onAdd:function(t){this._map=t,this._container||this._initLayout(),this._updateContent();var i=t.options.fadeAnimation;i&&e.DomUtil.setOpacity(this._container,0),t._panes.popupPane.appendChild(this._container),t.on("viewreset",this._updatePosition,this),this._animated&&t.on("zoomanim",this._zoomAnimation,this),t.options.closePopupOnClick&&t.on("preclick",this._close,this),this._update(),i&&e.DomUtil.setOpacity(this._container,1)},addTo:function(t){return t.addLayer(this),this},openOn:function(t){return t.openPopup(this),this},onRemove:function(t){t._panes.popupPane.removeChild(this._container),e.Util.falseFn(this._container.offsetWidth),t.off({viewreset:this._updatePosition,preclick:this._close,zoomanim:this._zoomAnimation},this),t.options.fadeAnimation&&e.DomUtil.setOpacity(this._container,0),this._map=null},setLatLng:function(t){return this._latlng=e.latLng(t),this._update(),this},setContent:function(t){return this._content=t,this._update(),this},_close:function(){var t=this._map;t&&(t._popup=null,t.removeLayer(this).fire("popupclose",{popup:this}))},_initLayout:function(){var t,i="leaflet-popup",s=i+" "+this.options.className+" leaflet-zoom-"+(this._animated?"animated":"hide"),o=this._container=e.DomUtil.create("div",s);this.options.closeButton&&(t=this._closeButton=e.DomUtil.create("a",i+"-close-button",o),t.href="#close",t.innerHTML="×",e.DomEvent.on(t,"click",this._onCloseButtonClick,this));var n=this._wrapper=e.DomUtil.create("div",i+"-content-wrapper",o);e.DomEvent.disableClickPropagation(n),this._contentNode=e.DomUtil.create("div",i+"-content",n),e.DomEvent.on(this._contentNode,"mousewheel",e.DomEvent.stopPropagation),this._tipContainer=e.DomUtil.create("div",i+"-tip-container",o),this._tip=e.DomUtil.create("div",i+"-tip",this._tipContainer)},_update:function(){this._map&&(this._container.style.visibility="hidden",this._updateContent(),this._updateLayout(),this._updatePosition(),this._container.style.visibility="",this._adjustPan())},_updateContent:function(){if(this._content){if("string"==typeof this._content)this._contentNode.innerHTML=this._content;else{for(;this._contentNode.hasChildNodes();)this._contentNode.removeChild(this._contentNode.firstChild);this._contentNode.appendChild(this._content)}this.fire("contentupdate")}},_updateLayout:function(){var t=this._contentNode,i=t.style;i.width="",i.whiteSpace="nowrap";var s=t.offsetWidth;s=Math.min(s,this.options.maxWidth),s=Math.max(s,this.options.minWidth),i.width=s+1+"px",i.whiteSpace="",i.height="";var o=t.offsetHeight,n=this.options.maxHeight,a="leaflet-popup-scrolled";n&&o>n?(i.height=n+"px",e.DomUtil.addClass(t,a)):e.DomUtil.removeClass(t,a),this._containerWidth=this._container.offsetWidth},_updatePosition:function(){if(this._map){var t=this._map.latLngToLayerPoint(this._latlng),i=this._animated,s=this.options.offset;i&&e.DomUtil.setPosition(this._container,t),this._containerBottom=-s.y-(i?0:t.y),this._containerLeft=-Math.round(this._containerWidth/2)+s.x+(i?0:t.x),this._container.style.bottom=this._containerBottom+"px",this._container.style.left=this._containerLeft+"px"}},_zoomAnimation:function(t){var i=this._map._latLngToNewLayerPoint(this._latlng,t.zoom,t.center);e.DomUtil.setPosition(this._container,i)},_adjustPan:function(){if(this.options.autoPan){var t=this._map,i=this._container.offsetHeight,s=this._containerWidth,o=new e.Point(this._containerLeft,-i-this._containerBottom);this._animated&&o._add(e.DomUtil.getPosition(this._container));var n=t.layerPointToContainerPoint(o),a=this.options.autoPanPadding,r=t.getSize(),h=0,l=0;0>n.x&&(h=n.x-a.x),n.x+s>r.x&&(h=n.x+s-r.x+a.x),0>n.y&&(l=n.y-a.y),n.y+i>r.y&&(l=n.y+i-r.y+a.y),(h||l)&&t.panBy(new e.Point(h,l))}},_onCloseButtonClick:function(t){this._close(),e.DomEvent.stop(t)}}),e.popup=function(t,i){return new e.Popup(t,i)},e.Marker.include({openPopup:function(){return this._popup&&this._map&&(this._popup.setLatLng(this._latlng),this._map.openPopup(this._popup)),this},closePopup:function(){return this._popup&&this._popup._close(),this},bindPopup:function(t,i){var s=e.point(this.options.icon.options.popupAnchor)||new e.Point(0,0);return s=s.add(e.Popup.prototype.options.offset),i&&i.offset&&(s=s.add(i.offset)),i=e.extend({offset:s},i),this._popup||this.on("click",this.openPopup,this).on("remove",this.closePopup,this).on("move",this._movePopup,this),this._popup=new e.Popup(i,this).setContent(t),this},unbindPopup:function(){return this._popup&&(this._popup=null,this.off("click",this.openPopup).off("remove",this.closePopup).off("move",this._movePopup)),this},_movePopup:function(t){this._popup.setLatLng(t.latlng)}}),e.Map.include({openPopup:function(t){return this.closePopup(),this._popup=t,this.addLayer(t).fire("popupopen",{popup:this._popup})},closePopup:function(){return this._popup&&this._popup._close(),this}}),e.LayerGroup=e.Class.extend({initialize:function(t){this._layers={};var i,s;if(t)for(i=0,s=t.length;s>i;i++)this.addLayer(t[i])},addLayer:function(t){var i=e.stamp(t);return this._layers[i]=t,this._map&&this._map.addLayer(t),this},removeLayer:function(t){var i=e.stamp(t);return delete this._layers[i],this._map&&this._map.removeLayer(t),this},clearLayers:function(){return this.eachLayer(this.removeLayer,this),this},invoke:function(t){var i,s,e=Array.prototype.slice.call(arguments,1);for(i in this._layers)this._layers.hasOwnProperty(i)&&(s=this._layers[i],s[t]&&s[t].apply(s,e));return this},onAdd:function(t){this._map=t,this.eachLayer(t.addLayer,t)},onRemove:function(t){this.eachLayer(t.removeLayer,t),this._map=null},addTo:function(t){return t.addLayer(this),this},eachLayer:function(t,i){for(var s in this._layers)this._layers.hasOwnProperty(s)&&t.call(i,this._layers[s])},setZIndex:function(t){return this.invoke("setZIndex",t)}}),e.layerGroup=function(t){return new e.LayerGroup(t)},e.FeatureGroup=e.LayerGroup.extend({includes:e.Mixin.Events,statics:{EVENTS:"click dblclick mouseover mouseout mousemove contextmenu"},addLayer:function(t){return this._layers[e.stamp(t)]?this:(t.on(e.FeatureGroup.EVENTS,this._propagateEvent,this),e.LayerGroup.prototype.addLayer.call(this,t),this._popupContent&&t.bindPopup&&t.bindPopup(this._popupContent,this._popupOptions),this.fire("layeradd",{layer:t}))},removeLayer:function(t){return t.off(e.FeatureGroup.EVENTS,this._propagateEvent,this),e.LayerGroup.prototype.removeLayer.call(this,t),this._popupContent&&this.invoke("unbindPopup"),this.fire("layerremove",{layer:t})},bindPopup:function(t,i){return this._popupContent=t,this._popupOptions=i,this.invoke("bindPopup",t,i)},setStyle:function(t){return this.invoke("setStyle",t)},bringToFront:function(){return this.invoke("bringToFront")},bringToBack:function(){return this.invoke("bringToBack")},getBounds:function(){var t=new e.LatLngBounds;return this.eachLayer(function(i){t.extend(i instanceof e.Marker?i.getLatLng():i.getBounds())}),t},_propagateEvent:function(t){t.layer=t.target,t.target=this,this.fire(t.type,t)}}),e.featureGroup=function(t){return new e.FeatureGroup(t)},e.Path=e.Class.extend({includes:[e.Mixin.Events],statics:{CLIP_PADDING:e.Browser.mobile?Math.max(0,Math.min(.5,(1280/Math.max(t.innerWidth,t.innerHeight)-1)/2)):.5},options:{stroke:!0,color:"#0033ff",dashArray:null,weight:5,opacity:.5,fill:!1,fillColor:null,fillOpacity:.2,clickable:!0},initialize:function(t){e.setOptions(this,t)},onAdd:function(t){this._map=t,this._container||(this._initElements(),this._initEvents()),this.projectLatlngs(),this._updatePath(),this._container&&this._map._pathRoot.appendChild(this._container),this.fire("add"),t.on({viewreset:this.projectLatlngs,moveend:this._updatePath},this)},addTo:function(t){return t.addLayer(this),this},onRemove:function(t){t._pathRoot.removeChild(this._container),this.fire("remove"),this._map=null,e.Browser.vml&&(this._container=null,this._stroke=null,this._fill=null),t.off({viewreset:this.projectLatlngs,moveend:this._updatePath},this)},projectLatlngs:function(){},setStyle:function(t){return e.setOptions(this,t),this._container&&this._updateStyle(),this},redraw:function(){return this._map&&(this.projectLatlngs(),this._updatePath()),this}}),e.Map.include({_updatePathViewport:function(){var t=e.Path.CLIP_PADDING,i=this.getSize(),s=e.DomUtil.getPosition(this._mapPane),o=s.multiplyBy(-1)._subtract(i.multiplyBy(t)._round()),n=o.add(i.multiplyBy(1+2*t)._round());this._pathViewport=new e.Bounds(o,n)}}),e.Path.SVG_NS="http://www.w3.org/2000/svg",e.Browser.svg=!(!i.createElementNS||!i.createElementNS(e.Path.SVG_NS,"svg").createSVGRect),e.Path=e.Path.extend({statics:{SVG:e.Browser.svg},bringToFront:function(){var t=this._map._pathRoot,i=this._container;return i&&t.lastChild!==i&&t.appendChild(i),this},bringToBack:function(){var t=this._map._pathRoot,i=this._container,s=t.firstChild;return i&&s!==i&&t.insertBefore(i,s),this},getPathString:function(){},_createElement:function(t){return i.createElementNS(e.Path.SVG_NS,t)},_initElements:function(){this._map._initPathRoot(),this._initPath(),this._initStyle()},_initPath:function(){this._container=this._createElement("g"),this._path=this._createElement("path"),this._container.appendChild(this._path)},_initStyle:function(){this.options.stroke&&(this._path.setAttribute("stroke-linejoin","round"),this._path.setAttribute("stroke-linecap","round")),this.options.fill&&this._path.setAttribute("fill-rule","evenodd"),this._updateStyle()},_updateStyle:function(){this.options.stroke?(this._path.setAttribute("stroke",this.options.color),this._path.setAttribute("stroke-opacity",this.options.opacity),this._path.setAttribute("stroke-width",this.options.weight),this.options.dashArray?this._path.setAttribute("stroke-dasharray",this.options.dashArray):this._path.removeAttribute("stroke-dasharray")):this._path.setAttribute("stroke","none"),this.options.fill?(this._path.setAttribute("fill",this.options.fillColor||this.options.color),this._path.setAttribute("fill-opacity",this.options.fillOpacity)):this._path.setAttribute("fill","none")},_updatePath:function(){var t=this.getPathString();t||(t="M0 0"),this._path.setAttribute("d",t)},_initEvents:function(){if(this.options.clickable){(e.Browser.svg||!e.Browser.vml)&&this._path.setAttribute("class","leaflet-clickable"),e.DomEvent.on(this._container,"click",this._onMouseClick,this);for(var t=["dblclick","mousedown","mouseover","mouseout","mousemove","contextmenu"],i=0;t.length>i;i++)e.DomEvent.on(this._container,t[i],this._fireMouseEvent,this)}},_onMouseClick:function(t){this._map.dragging&&this._map.dragging.moved()||this._fireMouseEvent(t)},_fireMouseEvent:function(t){if(this.hasEventListeners(t.type)){var i=this._map,s=i.mouseEventToContainerPoint(t),o=i.containerPointToLayerPoint(s),n=i.layerPointToLatLng(o);this.fire(t.type,{latlng:n,layerPoint:o,containerPoint:s,originalEvent:t}),"contextmenu"===t.type&&e.DomEvent.preventDefault(t),"mousemove"!==t.type&&e.DomEvent.stopPropagation(t)}}}),e.Map.include({_initPathRoot:function(){this._pathRoot||(this._pathRoot=e.Path.prototype._createElement("svg"),this._panes.overlayPane.appendChild(this._pathRoot),this.options.zoomAnimation&&e.Browser.any3d?(this._pathRoot.setAttribute("class"," leaflet-zoom-animated"),this.on({zoomanim:this._animatePathZoom,zoomend:this._endPathZoom})):this._pathRoot.setAttribute("class"," leaflet-zoom-hide"),this.on("moveend",this._updateSvgViewport),this._updateSvgViewport())},_animatePathZoom:function(t){var i=this.getZoomScale(t.zoom),s=this._getCenterOffset(t.center)._multiplyBy(-i)._add(this._pathViewport.min);this._pathRoot.style[e.DomUtil.TRANSFORM]=e.DomUtil.getTranslateString(s)+" scale("+i+") ",this._pathZooming=!0},_endPathZoom:function(){this._pathZooming=!1},_updateSvgViewport:function(){if(!this._pathZooming){this._updatePathViewport();var t=this._pathViewport,i=t.min,s=t.max,o=s.x-i.x,n=s.y-i.y,a=this._pathRoot,r=this._panes.overlayPane;e.Browser.mobileWebkit&&r.removeChild(a),e.DomUtil.setPosition(a,i),a.setAttribute("width",o),a.setAttribute("height",n),a.setAttribute("viewBox",[i.x,i.y,o,n].join(" ")),e.Browser.mobileWebkit&&r.appendChild(a)}}}),e.Path.include({bindPopup:function(t,i){return(!this._popup||i)&&(this._popup=new e.Popup(i,this)),this._popup.setContent(t),this._popupHandlersAdded||(this.on("click",this._openPopup,this).on("remove",this.closePopup,this),this._popupHandlersAdded=!0),this},unbindPopup:function(){return this._popup&&(this._popup=null,this.off("click",this._openPopup).off("remove",this.closePopup),this._popupHandlersAdded=!1),this},openPopup:function(t){return this._popup&&(t=t||this._latlng||this._latlngs[Math.floor(this._latlngs.length/2)],this._openPopup({latlng:t})),this},closePopup:function(){return this._popup&&this._popup._close(),this},_openPopup:function(t){this._popup.setLatLng(t.latlng),this._map.openPopup(this._popup)}}),e.Browser.vml=!e.Browser.svg&&function(){try{var t=i.createElement("div");t.innerHTML='';var s=t.firstChild;return s.style.behavior="url(#default#VML)",s&&"object"==typeof s.adj}catch(e){return!1}}(),e.Path=e.Browser.svg||!e.Browser.vml?e.Path:e.Path.extend({statics:{VML:!0,CLIP_PADDING:.02},_createElement:function(){try{return i.namespaces.add("lvml","urn:schemas-microsoft-com:vml"),function(t){return i.createElement("')}}catch(t){return function(t){return i.createElement("<"+t+' xmlns="urn:schemas-microsoft.com:vml" class="lvml">')}}}(),_initPath:function(){var t=this._container=this._createElement("shape");e.DomUtil.addClass(t,"leaflet-vml-shape"),this.options.clickable&&e.DomUtil.addClass(t,"leaflet-clickable"),t.coordsize="1 1",this._path=this._createElement("path"),t.appendChild(this._path),this._map._pathRoot.appendChild(t)},_initStyle:function(){this._updateStyle()},_updateStyle:function(){var t=this._stroke,i=this._fill,s=this.options,e=this._container;e.stroked=s.stroke,e.filled=s.fill,s.stroke?(t||(t=this._stroke=this._createElement("stroke"),t.endcap="round",e.appendChild(t)),t.weight=s.weight+"px",t.color=s.color,t.opacity=s.opacity,t.dashStyle=s.dashArray?s.dashArray instanceof Array?s.dashArray.join(" "):s.dashArray.replace(/ *, */g," "):""):t&&(e.removeChild(t),this._stroke=null),s.fill?(i||(i=this._fill=this._createElement("fill"),e.appendChild(i)),i.color=s.fillColor||s.color,i.opacity=s.fillOpacity):i&&(e.removeChild(i),this._fill=null)},_updatePath:function(){var t=this._container.style;t.display="none",this._path.v=this.getPathString()+" ",t.display=""}}),e.Map.include(e.Browser.svg||!e.Browser.vml?{}:{_initPathRoot:function(){if(!this._pathRoot){var t=this._pathRoot=i.createElement("div");t.className="leaflet-vml-container",this._panes.overlayPane.appendChild(t),this.on("moveend",this._updatePathViewport),this._updatePathViewport()}}}),e.Browser.canvas=function(){return!!i.createElement("canvas").getContext}(),e.Path=e.Path.SVG&&!t.L_PREFER_CANVAS||!e.Browser.canvas?e.Path:e.Path.extend({statics:{CANVAS:!0,SVG:!1},redraw:function(){return this._map&&(this.projectLatlngs(),this._requestUpdate()),this},setStyle:function(t){return e.setOptions(this,t),this._map&&(this._updateStyle(),this._requestUpdate()),this},onRemove:function(t){t.off("viewreset",this.projectLatlngs,this).off("moveend",this._updatePath,this),this.options.clickable&&this._map.off("click",this._onClick,this),this._requestUpdate(),this._map=null},_requestUpdate:function(){this._map&&!e.Path._updateRequest&&(e.Path._updateRequest=e.Util.requestAnimFrame(this._fireMapMoveEnd,this._map))},_fireMapMoveEnd:function(){e.Path._updateRequest=null,this.fire("moveend")},_initElements:function(){this._map._initPathRoot(),this._ctx=this._map._canvasCtx},_updateStyle:function(){var t=this.options;t.stroke&&(this._ctx.lineWidth=t.weight,this._ctx.strokeStyle=t.color),t.fill&&(this._ctx.fillStyle=t.fillColor||t.color)},_drawPath:function(){var t,i,s,o,n,a;for(this._ctx.beginPath(),t=0,s=this._parts.length;s>t;t++){for(i=0,o=this._parts[t].length;o>i;i++)n=this._parts[t][i],a=(0===i?"move":"line")+"To",this._ctx[a](n.x,n.y);this instanceof e.Polygon&&this._ctx.closePath()}},_checkIfEmpty:function(){return!this._parts.length},_updatePath:function(){if(!this._checkIfEmpty()){var t=this._ctx,i=this.options;this._drawPath(),t.save(),this._updateStyle(),i.fill&&(t.globalAlpha=i.fillOpacity,t.fill()),i.stroke&&(t.globalAlpha=i.opacity,t.stroke()),t.restore()}},_initEvents:function(){this.options.clickable&&this._map.on("click",this._onClick,this)},_onClick:function(t){this._containsPoint(t.layerPoint)&&this.fire("click",{latlng:t.latlng,layerPoint:t.layerPoint,containerPoint:t.containerPoint,originalEvent:t})}}),e.Map.include(e.Path.SVG&&!t.L_PREFER_CANVAS||!e.Browser.canvas?{}:{_initPathRoot:function(){var t,s=this._pathRoot;s||(s=this._pathRoot=i.createElement("canvas"),s.style.position="absolute",t=this._canvasCtx=s.getContext("2d"),t.lineCap="round",t.lineJoin="round",this._panes.overlayPane.appendChild(s),this.options.zoomAnimation&&(this._pathRoot.className="leaflet-zoom-animated",this.on("zoomanim",this._animatePathZoom),this.on("zoomend",this._endPathZoom)),this.on("moveend",this._updateCanvasViewport),this._updateCanvasViewport())},_updateCanvasViewport:function(){if(!this._pathZooming){this._updatePathViewport();var t=this._pathViewport,i=t.min,s=t.max.subtract(i),o=this._pathRoot;e.DomUtil.setPosition(o,i),o.width=s.x,o.height=s.y,o.getContext("2d").translate(-i.x,-i.y)}}}),e.LineUtil={simplify:function(t,i){if(!i||!t.length)return t.slice();var s=i*i;return t=this._reducePoints(t,s),t=this._simplifyDP(t,s)},pointToSegmentDistance:function(t,i,s){return Math.sqrt(this._sqClosestPointOnSegment(t,i,s,!0))},closestPointOnSegment:function(t,i,s){return this._sqClosestPointOnSegment(t,i,s)},_simplifyDP:function(t,i){var e=t.length,o=typeof Uint8Array!=s+""?Uint8Array:Array,n=new o(e);n[0]=n[e-1]=1,this._simplifyDPStep(t,n,i,0,e-1);var a,r=[];for(a=0;e>a;a++)n[a]&&r.push(t[a]);return r},_simplifyDPStep:function(t,i,s,e,o){var n,a,r,h=0;for(a=e+1;o-1>=a;a++)r=this._sqClosestPointOnSegment(t[a],t[e],t[o],!0),r>h&&(n=a,h=r);h>s&&(i[n]=1,this._simplifyDPStep(t,i,s,e,n),this._simplifyDPStep(t,i,s,n,o))},_reducePoints:function(t,i){for(var s=[t[0]],e=1,o=0,n=t.length;n>e;e++)this._sqDist(t[e],t[o])>i&&(s.push(t[e]),o=e);return n-1>o&&s.push(t[n-1]),s},clipSegment:function(t,i,s,e){var o,n,a,r=e?this._lastCode:this._getBitCode(t,s),h=this._getBitCode(i,s);for(this._lastCode=h;;){if(!(r|h))return[t,i];if(r&h)return!1;o=r||h,n=this._getEdgeIntersection(t,i,o,s),a=this._getBitCode(n,s),o===r?(t=n,r=a):(i=n,h=a)}},_getEdgeIntersection:function(t,i,o,n){var a=i.x-t.x,r=i.y-t.y,h=n.min,l=n.max;return 8&o?new e.Point(t.x+a*(l.y-t.y)/r,l.y):4&o?new e.Point(t.x+a*(h.y-t.y)/r,h.y):2&o?new e.Point(l.x,t.y+r*(l.x-t.x)/a):1&o?new e.Point(h.x,t.y+r*(h.x-t.x)/a):s},_getBitCode:function(t,i){var s=0;return t.xi.max.x&&(s|=2),t.yi.max.y&&(s|=8),s},_sqDist:function(t,i){var s=i.x-t.x,e=i.y-t.y;return s*s+e*e},_sqClosestPointOnSegment:function(t,i,s,o){var n,a=i.x,r=i.y,h=s.x-a,l=s.y-r,c=h*h+l*l;return c>0&&(n=((t.x-a)*h+(t.y-r)*l)/c, -n>1?(a=s.x,r=s.y):n>0&&(a+=h*n,r+=l*n)),h=t.x-a,l=t.y-r,o?h*h+l*l:new e.Point(a,r)}},e.Polyline=e.Path.extend({initialize:function(t,i){e.Path.prototype.initialize.call(this,i),this._latlngs=this._convertLatLngs(t)},options:{smoothFactor:1,noClip:!1},projectLatlngs:function(){this._originalPoints=[];for(var t=0,i=this._latlngs.length;i>t;t++)this._originalPoints[t]=this._map.latLngToLayerPoint(this._latlngs[t])},getPathString:function(){for(var t=0,i=this._parts.length,s="";i>t;t++)s+=this._getPathPartStr(this._parts[t]);return s},getLatLngs:function(){return this._latlngs},setLatLngs:function(t){return this._latlngs=this._convertLatLngs(t),this.redraw()},addLatLng:function(t){return this._latlngs.push(e.latLng(t)),this.redraw()},spliceLatLngs:function(){var t=[].splice.apply(this._latlngs,arguments);return this._convertLatLngs(this._latlngs),this.redraw(),t},closestLayerPoint:function(t){for(var i,s,o=1/0,n=this._parts,a=null,r=0,h=n.length;h>r;r++)for(var l=n[r],c=1,m=l.length;m>c;c++){i=l[c-1],s=l[c];var u=e.LineUtil._sqClosestPointOnSegment(t,i,s,!0);o>u&&(o=u,a=e.LineUtil._sqClosestPointOnSegment(t,i,s))}return a&&(a.distance=Math.sqrt(o)),a},getBounds:function(){var t,i,s=new e.LatLngBounds,o=this.getLatLngs();for(t=0,i=o.length;i>t;t++)s.extend(o[t]);return s},_convertLatLngs:function(t){var i,s;for(i=0,s=t.length;s>i;i++){if(e.Util.isArray(t[i])&&"number"!=typeof t[i][0])return;t[i]=e.latLng(t[i])}return t},_initEvents:function(){e.Path.prototype._initEvents.call(this)},_getPathPartStr:function(t){for(var i,s=e.Path.VML,o=0,n=t.length,a="";n>o;o++)i=t[o],s&&i._round(),a+=(o?"L":"M")+i.x+" "+i.y;return a},_clipPoints:function(){var t,i,o,n=this._originalPoints,a=n.length;if(this.options.noClip)return this._parts=[n],s;this._parts=[];var r=this._parts,h=this._map._pathViewport,l=e.LineUtil;for(t=0,i=0;a-1>t;t++)o=l.clipSegment(n[t],n[t+1],h,t),o&&(r[i]=r[i]||[],r[i].push(o[0]),(o[1]!==n[t+1]||t===a-2)&&(r[i].push(o[1]),i++))},_simplifyPoints:function(){for(var t=this._parts,i=e.LineUtil,s=0,o=t.length;o>s;s++)t[s]=i.simplify(t[s],this.options.smoothFactor)},_updatePath:function(){this._map&&(this._clipPoints(),this._simplifyPoints(),e.Path.prototype._updatePath.call(this))}}),e.polyline=function(t,i){return new e.Polyline(t,i)},e.PolyUtil={},e.PolyUtil.clipPolygon=function(t,i){var s,o,n,a,r,h,l,c,m,u=[1,4,2,8],d=e.LineUtil;for(o=0,l=t.length;l>o;o++)t[o]._code=d._getBitCode(t[o],i);for(a=0;4>a;a++){for(c=u[a],s=[],o=0,l=t.length,n=l-1;l>o;n=o++)r=t[o],h=t[n],r._code&c?h._code&c||(m=d._getEdgeIntersection(h,r,c,i),m._code=d._getBitCode(m,i),s.push(m)):(h._code&c&&(m=d._getEdgeIntersection(h,r,c,i),m._code=d._getBitCode(m,i),s.push(m)),s.push(r));t=s}return t},e.Polygon=e.Polyline.extend({options:{fill:!0},initialize:function(t,i){e.Polyline.prototype.initialize.call(this,t,i),t&&e.Util.isArray(t[0])&&"number"!=typeof t[0][0]&&(this._latlngs=this._convertLatLngs(t[0]),this._holes=t.slice(1))},projectLatlngs:function(){if(e.Polyline.prototype.projectLatlngs.call(this),this._holePoints=[],this._holes){var t,i,s,o;for(t=0,s=this._holes.length;s>t;t++)for(this._holePoints[t]=[],i=0,o=this._holes[t].length;o>i;i++)this._holePoints[t][i]=this._map.latLngToLayerPoint(this._holes[t][i])}},_clipPoints:function(){var t=this._originalPoints,i=[];if(this._parts=[t].concat(this._holePoints),!this.options.noClip){for(var s=0,o=this._parts.length;o>s;s++){var n=e.PolyUtil.clipPolygon(this._parts[s],this._map._pathViewport);n.length&&i.push(n)}this._parts=i}},_getPathPartStr:function(t){var i=e.Polyline.prototype._getPathPartStr.call(this,t);return i+(e.Browser.svg?"z":"x")}}),e.polygon=function(t,i){return new e.Polygon(t,i)},function(){function t(t){return e.FeatureGroup.extend({initialize:function(t,i){this._layers={},this._options=i,this.setLatLngs(t)},setLatLngs:function(i){var s=0,e=i.length;for(this.eachLayer(function(t){e>s?t.setLatLngs(i[s++]):this.removeLayer(t)},this);e>s;)this.addLayer(new t(i[s++],this._options));return this}})}e.MultiPolyline=t(e.Polyline),e.MultiPolygon=t(e.Polygon),e.multiPolyline=function(t,i){return new e.MultiPolyline(t,i)},e.multiPolygon=function(t,i){return new e.MultiPolygon(t,i)}}(),e.Rectangle=e.Polygon.extend({initialize:function(t,i){e.Polygon.prototype.initialize.call(this,this._boundsToLatLngs(t),i)},setBounds:function(t){this.setLatLngs(this._boundsToLatLngs(t))},_boundsToLatLngs:function(t){return t=e.latLngBounds(t),[t.getSouthWest(),t.getNorthWest(),t.getNorthEast(),t.getSouthEast()]}}),e.rectangle=function(t,i){return new e.Rectangle(t,i)},e.Circle=e.Path.extend({initialize:function(t,i,s){e.Path.prototype.initialize.call(this,s),this._latlng=e.latLng(t),this._mRadius=i},options:{fill:!0},setLatLng:function(t){return this._latlng=e.latLng(t),this.redraw()},setRadius:function(t){return this._mRadius=t,this.redraw()},projectLatlngs:function(){var t=this._getLngRadius(),i=new e.LatLng(this._latlng.lat,this._latlng.lng-t),s=this._map.latLngToLayerPoint(i);this._point=this._map.latLngToLayerPoint(this._latlng),this._radius=Math.max(Math.round(this._point.x-s.x),1)},getBounds:function(){var t=this._getLngRadius(),i=360*(this._mRadius/40075017),s=this._latlng,o=new e.LatLng(s.lat-i,s.lng-t),n=new e.LatLng(s.lat+i,s.lng+t);return new e.LatLngBounds(o,n)},getLatLng:function(){return this._latlng},getPathString:function(){var t=this._point,i=this._radius;return this._checkIfEmpty()?"":e.Browser.svg?"M"+t.x+","+(t.y-i)+"A"+i+","+i+",0,1,1,"+(t.x-.1)+","+(t.y-i)+" z":(t._round(),i=Math.round(i),"AL "+t.x+","+t.y+" "+i+","+i+" 0,"+23592600)},getRadius:function(){return this._mRadius},_getLatRadius:function(){return 360*(this._mRadius/40075017)},_getLngRadius:function(){return this._getLatRadius()/Math.cos(e.LatLng.DEG_TO_RAD*this._latlng.lat)},_checkIfEmpty:function(){if(!this._map)return!1;var t=this._map._pathViewport,i=this._radius,s=this._point;return s.x-i>t.max.x||s.y-i>t.max.y||s.x+is;s++)for(l=this._parts[s],o=0,r=l.length,n=r-1;r>o;n=o++)if((i||0!==o)&&(h=e.LineUtil.pointToSegmentDistance(t,l[n],l[o]),c>=h))return!0;return!1}}:{}),e.Polygon.include(e.Path.CANVAS?{_containsPoint:function(t){var i,s,o,n,a,r,h,l,c=!1;if(e.Polyline.prototype._containsPoint.call(this,t,!0))return!0;for(n=0,h=this._parts.length;h>n;n++)for(i=this._parts[n],a=0,l=i.length,r=l-1;l>a;r=a++)s=i[a],o=i[r],s.y>t.y!=o.y>t.y&&t.x<(o.x-s.x)*(t.y-s.y)/(o.y-s.y)+s.x&&(c=!c);return c}}:{}),e.Circle.include(e.Path.CANVAS?{_drawPath:function(){var t=this._point;this._ctx.beginPath(),this._ctx.arc(t.x,t.y,this._radius,0,2*Math.PI,!1)},_containsPoint:function(t){var i=this._point,s=this.options.stroke?this.options.weight/2:0;return t.distanceTo(i)<=this._radius+s}}:{}),e.GeoJSON=e.FeatureGroup.extend({initialize:function(t,i){e.setOptions(this,i),this._layers={},t&&this.addData(t)},addData:function(t){var i,s,o=e.Util.isArray(t)?t:t.features;if(o){for(i=0,s=o.length;s>i;i++)(o[i].geometries||o[i].geometry||o[i].features)&&this.addData(o[i]);return this}var n=this.options;if(!n.filter||n.filter(t)){var a=e.GeoJSON.geometryToLayer(t,n.pointToLayer);return a.feature=t,a.defaultOptions=a.options,this.resetStyle(a),n.onEachFeature&&n.onEachFeature(t,a),this.addLayer(a)}},resetStyle:function(t){var i=this.options.style;i&&(e.Util.extend(t.options,t.defaultOptions),this._setLayerStyle(t,i))},setStyle:function(t){this.eachLayer(function(i){this._setLayerStyle(i,t)},this)},_setLayerStyle:function(t,i){"function"==typeof i&&(i=i(t.feature)),t.setStyle&&t.setStyle(i)}}),e.extend(e.GeoJSON,{geometryToLayer:function(t,i){var s,o,n,a,r,h="Feature"===t.type?t.geometry:t,l=h.coordinates,c=[];switch(h.type){case"Point":return s=this.coordsToLatLng(l),i?i(t,s):new e.Marker(s);case"MultiPoint":for(n=0,a=l.length;a>n;n++)s=this.coordsToLatLng(l[n]),r=i?i(t,s):new e.Marker(s),c.push(r);return new e.FeatureGroup(c);case"LineString":return o=this.coordsToLatLngs(l),new e.Polyline(o);case"Polygon":return o=this.coordsToLatLngs(l,1),new e.Polygon(o);case"MultiLineString":return o=this.coordsToLatLngs(l,1),new e.MultiPolyline(o);case"MultiPolygon":return o=this.coordsToLatLngs(l,2),new e.MultiPolygon(o);case"GeometryCollection":for(n=0,a=h.geometries.length;a>n;n++)r=this.geometryToLayer({geometry:h.geometries[n],type:"Feature",properties:t.properties},i),c.push(r);return new e.FeatureGroup(c);default:throw Error("Invalid GeoJSON object.")}},coordsToLatLng:function(t,i){var s=parseFloat(t[i?0:1]),o=parseFloat(t[i?1:0]);return new e.LatLng(s,o)},coordsToLatLngs:function(t,i,s){var e,o,n,a=[];for(o=0,n=t.length;n>o;o++)e=i?this.coordsToLatLngs(t[o],i-1,s):this.coordsToLatLng(t[o],s),a.push(e);return a}}),e.geoJson=function(t,i){return new e.GeoJSON(t,i)},e.DomEvent={addListener:function(t,i,o,n){var a,r,h,l=e.stamp(o),c="_leaflet_"+i+l;return t[c]?this:(a=function(i){return o.call(n||t,i||e.DomEvent._getEvent())},e.Browser.msTouch&&0===i.indexOf("touch")?this.addMsTouchListener(t,i,a,l):(e.Browser.touch&&"dblclick"===i&&this.addDoubleTapListener&&this.addDoubleTapListener(t,a,l),"addEventListener"in t?"mousewheel"===i?(t.addEventListener("DOMMouseScroll",a,!1),t.addEventListener(i,a,!1)):"mouseenter"===i||"mouseleave"===i?(r=a,h="mouseenter"===i?"mouseover":"mouseout",a=function(i){return e.DomEvent._checkMouse(t,i)?r(i):s},t.addEventListener(h,a,!1)):t.addEventListener(i,a,!1):"attachEvent"in t&&t.attachEvent("on"+i,a),t[c]=a,this))},removeListener:function(t,i,s){var o=e.stamp(s),n="_leaflet_"+i+o,a=t[n];if(a)return e.Browser.msTouch&&0===i.indexOf("touch")?this.removeMsTouchListener(t,i,o):e.Browser.touch&&"dblclick"===i&&this.removeDoubleTapListener?this.removeDoubleTapListener(t,o):"removeEventListener"in t?"mousewheel"===i?(t.removeEventListener("DOMMouseScroll",a,!1),t.removeEventListener(i,a,!1)):"mouseenter"===i||"mouseleave"===i?t.removeEventListener("mouseenter"===i?"mouseover":"mouseout",a,!1):t.removeEventListener(i,a,!1):"detachEvent"in t&&t.detachEvent("on"+i,a),t[n]=null,this},stopPropagation:function(t){return t.stopPropagation?t.stopPropagation():t.cancelBubble=!0,this},disableClickPropagation:function(t){for(var i=e.DomEvent.stopPropagation,s=e.Draggable.START.length-1;s>=0;s--)e.DomEvent.addListener(t,e.Draggable.START[s],i);return e.DomEvent.addListener(t,"click",i).addListener(t,"dblclick",i)},preventDefault:function(t){return t.preventDefault?t.preventDefault():t.returnValue=!1,this},stop:function(t){return e.DomEvent.preventDefault(t).stopPropagation(t)},getMousePosition:function(t,s){var o=i.body,n=i.documentElement,a=t.pageX?t.pageX:t.clientX+o.scrollLeft+n.scrollLeft,r=t.pageY?t.pageY:t.clientY+o.scrollTop+n.scrollTop,h=new e.Point(a,r);return s?h._subtract(e.DomUtil.getViewportOffset(s)):h},getWheelDelta:function(t){var i=0;return t.wheelDelta&&(i=t.wheelDelta/120),t.detail&&(i=-t.detail/3),i},_checkMouse:function(t,i){var s=i.relatedTarget;if(!s)return!0;try{for(;s&&s!==t;)s=s.parentNode}catch(e){return!1}return s!==t},_getEvent:function(){var i=t.event;if(!i)for(var s=arguments.callee.caller;s&&(i=s.arguments[0],!i||t.Event!==i.constructor);)s=s.caller;return i}},e.DomEvent.on=e.DomEvent.addListener,e.DomEvent.off=e.DomEvent.removeListener,e.Draggable=e.Class.extend({includes:e.Mixin.Events,statics:{START:e.Browser.touch?["touchstart","mousedown"]:["mousedown"],END:{mousedown:"mouseup",touchstart:"touchend",MSPointerDown:"touchend"},MOVE:{mousedown:"mousemove",touchstart:"touchmove",MSPointerDown:"touchmove"},TAP_TOLERANCE:15},initialize:function(t,i,s){this._element=t,this._dragStartTarget=i||t,this._longPress=s&&!e.Browser.msTouch},enable:function(){if(!this._enabled){for(var t=e.Draggable.START.length-1;t>=0;t--)e.DomEvent.on(this._dragStartTarget,e.Draggable.START[t],this._onDown,this);this._enabled=!0}},disable:function(){if(this._enabled){for(var t=e.Draggable.START.length-1;t>=0;t--)e.DomEvent.off(this._dragStartTarget,e.Draggable.START[t],this._onDown,this);this._enabled=!1,this._moved=!1}},_onDown:function(t){if(!(!e.Browser.touch&&t.shiftKey||1!==t.which&&1!==t.button&&!t.touches||(e.DomEvent.preventDefault(t),e.DomEvent.stopPropagation(t),e.Draggable._disabled))){if(this._simulateClick=!0,t.touches&&t.touches.length>1)return this._simulateClick=!1,clearTimeout(this._longPressTimeout),s;var o=t.touches&&1===t.touches.length?t.touches[0]:t,n=o.target;e.Browser.touch&&"a"===n.tagName.toLowerCase()&&e.DomUtil.addClass(n,"leaflet-active"),this._moved=!1,this._moving||(this._startPoint=new e.Point(o.clientX,o.clientY),this._startPos=this._newPos=e.DomUtil.getPosition(this._element),t.touches&&1===t.touches.length&&e.Browser.touch&&this._longPress&&(this._longPressTimeout=setTimeout(e.bind(function(){var t=this._newPos&&this._newPos.distanceTo(this._startPos)||0;e.Draggable.TAP_TOLERANCE>t&&(this._simulateClick=!1,this._onUp(),this._simulateEvent("contextmenu",o))},this),1e3)),e.DomEvent.on(i,e.Draggable.MOVE[t.type],this._onMove,this),e.DomEvent.on(i,e.Draggable.END[t.type],this._onUp,this))}},_onMove:function(t){if(!(t.touches&&t.touches.length>1)){var i=t.touches&&1===t.touches.length?t.touches[0]:t,s=new e.Point(i.clientX,i.clientY),o=s.subtract(this._startPoint);(o.x||o.y)&&(e.DomEvent.preventDefault(t),this._moved||(this.fire("dragstart"),this._moved=!0,this._startPos=e.DomUtil.getPosition(this._element).subtract(o),e.Browser.touch||(e.DomUtil.disableTextSelection(),this._setMovingCursor())),this._newPos=this._startPos.add(o),this._moving=!0,e.Util.cancelAnimFrame(this._animRequest),this._animRequest=e.Util.requestAnimFrame(this._updatePosition,this,!0,this._dragStartTarget))}},_updatePosition:function(){this.fire("predrag"),e.DomUtil.setPosition(this._element,this._newPos),this.fire("drag")},_onUp:function(t){var s;if(clearTimeout(this._longPressTimeout),this._simulateClick&&t.changedTouches){var o=t.changedTouches[0],n=o.target,a=this._newPos&&this._newPos.distanceTo(this._startPos)||0;"a"===n.tagName.toLowerCase()&&e.DomUtil.removeClass(n,"leaflet-active"),e.Draggable.TAP_TOLERANCE>a&&(s=o)}e.Browser.touch||(e.DomUtil.enableTextSelection(),this._restoreCursor());for(var r in e.Draggable.MOVE)e.Draggable.MOVE.hasOwnProperty(r)&&(e.DomEvent.off(i,e.Draggable.MOVE[r],this._onMove),e.DomEvent.off(i,e.Draggable.END[r],this._onUp));this._moved&&(e.Util.cancelAnimFrame(this._animRequest),this.fire("dragend")),this._moving=!1,s&&(this._moved=!1,this._simulateEvent("click",s))},_setMovingCursor:function(){e.DomUtil.addClass(i.body,"leaflet-dragging")},_restoreCursor:function(){e.DomUtil.removeClass(i.body,"leaflet-dragging")},_simulateEvent:function(s,e){var o=i.createEvent("MouseEvents");o.initMouseEvent(s,!0,!0,t,1,e.screenX,e.screenY,e.clientX,e.clientY,!1,!1,!1,!1,0,null),e.target.dispatchEvent(o)}}),e.Handler=e.Class.extend({initialize:function(t){this._map=t},enable:function(){this._enabled||(this._enabled=!0,this.addHooks())},disable:function(){this._enabled&&(this._enabled=!1,this.removeHooks())},enabled:function(){return!!this._enabled}}),e.Map.mergeOptions({dragging:!0,inertia:!e.Browser.android23,inertiaDeceleration:3400,inertiaMaxSpeed:1/0,inertiaThreshold:e.Browser.touch?32:18,easeLinearity:.25,longPress:!0,worldCopyJump:!1}),e.Map.Drag=e.Handler.extend({addHooks:function(){if(!this._draggable){var t=this._map;this._draggable=new e.Draggable(t._mapPane,t._container,t.options.longPress),this._draggable.on({dragstart:this._onDragStart,drag:this._onDrag,dragend:this._onDragEnd},this),t.options.worldCopyJump&&(this._draggable.on("predrag",this._onPreDrag,this),t.on("viewreset",this._onViewReset,this))}this._draggable.enable()},removeHooks:function(){this._draggable.disable()},moved:function(){return this._draggable&&this._draggable._moved},_onDragStart:function(){var t=this._map;t._panAnim&&t._panAnim.stop(),t.fire("movestart").fire("dragstart"),t.options.inertia&&(this._positions=[],this._times=[])},_onDrag:function(){if(this._map.options.inertia){var t=this._lastTime=+new Date,i=this._lastPos=this._draggable._newPos;this._positions.push(i),this._times.push(t),t-this._times[0]>200&&(this._positions.shift(),this._times.shift())}this._map.fire("move").fire("drag")},_onViewReset:function(){var t=this._map.getSize()._divideBy(2),i=this._map.latLngToLayerPoint(new e.LatLng(0,0));this._initialWorldOffset=i.subtract(t).x,this._worldWidth=this._map.project(new e.LatLng(0,180)).x},_onPreDrag:function(){var t=this._worldWidth,i=Math.round(t/2),s=this._initialWorldOffset,e=this._draggable._newPos.x,o=(e-i+s)%t+i-s,n=(e+i+s)%t-i-s,a=Math.abs(o+s)i.inertiaThreshold||!this._positions[0];if(o)t.fire("moveend");else{var n=this._lastPos.subtract(this._positions[0]),a=(this._lastTime+s-this._times[0])/1e3,r=i.easeLinearity,h=n.multiplyBy(r/a),l=h.distanceTo(new e.Point(0,0)),c=Math.min(i.inertiaMaxSpeed,l),m=h.multiplyBy(c/l),u=c/(i.inertiaDeceleration*r),d=m.multiplyBy(-u/2).round();e.Util.requestAnimFrame(function(){t.panBy(d,u,r)})}t.fire("dragend"),i.maxBounds&&e.Util.requestAnimFrame(this._panInsideMaxBounds,t,!0,t._container)},_panInsideMaxBounds:function(){this.panInsideBounds(this.options.maxBounds)}}),e.Map.addInitHook("addHandler","dragging",e.Map.Drag),e.Map.mergeOptions({doubleClickZoom:!0}),e.Map.DoubleClickZoom=e.Handler.extend({addHooks:function(){this._map.on("dblclick",this._onDoubleClick)},removeHooks:function(){this._map.off("dblclick",this._onDoubleClick)},_onDoubleClick:function(t){this.setView(t.latlng,this._zoom+1)}}),e.Map.addInitHook("addHandler","doubleClickZoom",e.Map.DoubleClickZoom),e.Map.mergeOptions({scrollWheelZoom:!0}),e.Map.ScrollWheelZoom=e.Handler.extend({addHooks:function(){e.DomEvent.on(this._map._container,"mousewheel",this._onWheelScroll,this),this._delta=0},removeHooks:function(){e.DomEvent.off(this._map._container,"mousewheel",this._onWheelScroll)},_onWheelScroll:function(t){var i=e.DomEvent.getWheelDelta(t);this._delta+=i,this._lastMousePos=this._map.mouseEventToContainerPoint(t),this._startTime||(this._startTime=+new Date);var s=Math.max(40-(+new Date-this._startTime),0);clearTimeout(this._timer),this._timer=setTimeout(e.bind(this._performZoom,this),s),e.DomEvent.preventDefault(t),e.DomEvent.stopPropagation(t)},_performZoom:function(){var t=this._map,i=this._delta,s=t.getZoom();if(i=i>0?Math.ceil(i):Math.round(i),i=Math.max(Math.min(i,4),-4),i=t._limitZoom(s+i)-s,this._delta=0,this._startTime=null,i){var e=s+i,o=this._getCenterForScrollWheelZoom(e);t.setView(o,e)}},_getCenterForScrollWheelZoom:function(t){var i=this._map,s=i.getZoomScale(t),e=i.getSize()._divideBy(2),o=this._lastMousePos._subtract(e)._multiplyBy(1-1/s),n=i._getTopLeftPoint()._add(e)._add(o);return i.unproject(n)}}),e.Map.addInitHook("addHandler","scrollWheelZoom",e.Map.ScrollWheelZoom),e.extend(e.DomEvent,{_touchstart:e.Browser.msTouch?"MSPointerDown":"touchstart",_touchend:e.Browser.msTouch?"MSPointerUp":"touchend",addDoubleTapListener:function(t,s,o){function n(t){var i;if(e.Browser.msTouch?(p.push(t.pointerId),i=p.length):i=t.touches.length,!(i>1)){var s=Date.now(),o=s-(r||s);h=t.touches?t.touches[0]:t,l=o>0&&c>=o,r=s}}function a(t){if(e.Browser.msTouch){var i=p.indexOf(t.pointerId);if(-1===i)return;p.splice(i,1)}if(l){if(e.Browser.msTouch){var o,n={};for(var a in h)o=h[a],n[a]="function"==typeof o?o.bind(h):o;h=n}h.type="dblclick",s(h),r=null}}var r,h,l=!1,c=250,m="_leaflet_",u=this._touchstart,d=this._touchend,p=[];t[m+u+o]=n,t[m+d+o]=a;var _=e.Browser.msTouch?i.documentElement:t;return t.addEventListener(u,n,!1),_.addEventListener(d,a,!1),e.Browser.msTouch&&_.addEventListener("MSPointerCancel",a,!1),this},removeDoubleTapListener:function(t,s){var o="_leaflet_";return t.removeEventListener(this._touchstart,t[o+this._touchstart+s],!1),(e.Browser.msTouch?i.documentElement:t).removeEventListener(this._touchend,t[o+this._touchend+s],!1),e.Browser.msTouch&&i.documentElement.removeEventListener("MSPointerCancel",t[o+this._touchend+s],!1),this}}),e.extend(e.DomEvent,{_msTouches:[],_msDocumentListener:!1,addMsTouchListener:function(t,i,s,e){switch(i){case"touchstart":return this.addMsTouchListenerStart(t,i,s,e);case"touchend":return this.addMsTouchListenerEnd(t,i,s,e);case"touchmove":return this.addMsTouchListenerMove(t,i,s,e);default:throw"Unknown touch event type"}},addMsTouchListenerStart:function(t,s,e,o){var n="_leaflet_",a=this._msTouches,r=function(t){for(var i=!1,s=0;a.length>s;s++)if(a[s].pointerId===t.pointerId){i=!0;break}i||a.push(t),t.touches=a.slice(),t.changedTouches=[t],e(t)};if(t[n+"touchstart"+o]=r,t.addEventListener("MSPointerDown",r,!1),!this._msDocumentListener){var h=function(t){for(var i=0;a.length>i;i++)if(a[i].pointerId===t.pointerId){a.splice(i,1);break}};i.documentElement.addEventListener("MSPointerUp",h,!1),i.documentElement.addEventListener("MSPointerCancel",h,!1),this._msDocumentListener=!0}return this},addMsTouchListenerMove:function(t,i,s,e){function o(t){if(t.pointerType!==t.MSPOINTER_TYPE_MOUSE||0!==t.buttons){for(var i=0;a.length>i;i++)if(a[i].pointerId===t.pointerId){a[i]=t;break}t.touches=a.slice(),t.changedTouches=[t],s(t)}}var n="_leaflet_",a=this._msTouches;return t[n+"touchmove"+e]=o,t.addEventListener("MSPointerMove",o,!1),this},addMsTouchListenerEnd:function(t,i,s,e){var o="_leaflet_",n=this._msTouches,a=function(t){for(var i=0;n.length>i;i++)if(n[i].pointerId===t.pointerId){n.splice(i,1);break}t.touches=n.slice(),t.changedTouches=[t],s(t)};return t[o+"touchend"+e]=a,t.addEventListener("MSPointerUp",a,!1),t.addEventListener("MSPointerCancel",a,!1),this},removeMsTouchListener:function(t,i,s){var e="_leaflet_",o=t[e+i+s];switch(i){case"touchstart":t.removeEventListener("MSPointerDown",o,!1);break;case"touchmove":t.removeEventListener("MSPointerMove",o,!1);break;case"touchend":t.removeEventListener("MSPointerUp",o,!1),t.removeEventListener("MSPointerCancel",o,!1)}return this}}),e.Map.mergeOptions({touchZoom:e.Browser.touch&&!e.Browser.android23}),e.Map.TouchZoom=e.Handler.extend({addHooks:function(){e.DomEvent.on(this._map._container,"touchstart",this._onTouchStart,this)},removeHooks:function(){e.DomEvent.off(this._map._container,"touchstart",this._onTouchStart,this)},_onTouchStart:function(t){var s=this._map;if(t.touches&&2===t.touches.length&&!s._animatingZoom&&!this._zooming){var o=s.mouseEventToLayerPoint(t.touches[0]),n=s.mouseEventToLayerPoint(t.touches[1]),a=s._getCenterLayerPoint();this._startCenter=o.add(n)._divideBy(2),this._startDist=o.distanceTo(n),this._moved=!1,this._zooming=!0,this._centerOffset=a.subtract(this._startCenter),s._panAnim&&s._panAnim.stop(),e.DomEvent.on(i,"touchmove",this._onTouchMove,this).on(i,"touchend",this._onTouchEnd,this),e.DomEvent.preventDefault(t)}},_onTouchMove:function(t){if(t.touches&&2===t.touches.length){var i=this._map,s=i.mouseEventToLayerPoint(t.touches[0]),o=i.mouseEventToLayerPoint(t.touches[1]);this._scale=s.distanceTo(o)/this._startDist,this._delta=s._add(o)._divideBy(2)._subtract(this._startCenter),1!==this._scale&&(this._moved||(e.DomUtil.addClass(i._mapPane,"leaflet-zoom-anim leaflet-touching"),i.fire("movestart").fire("zoomstart")._prepareTileBg(),this._moved=!0),e.Util.cancelAnimFrame(this._animRequest),this._animRequest=e.Util.requestAnimFrame(this._updateOnMove,this,!0,this._map._container),e.DomEvent.preventDefault(t))}},_updateOnMove:function(){var t=this._map,i=this._getScaleOrigin(),s=t.layerPointToLatLng(i);t.fire("zoomanim",{center:s,zoom:t.getScaleZoom(this._scale)}),t._tileBg.style[e.DomUtil.TRANSFORM]=e.DomUtil.getTranslateString(this._delta)+" "+e.DomUtil.getScaleString(this._scale,this._startCenter)},_onTouchEnd:function(){if(this._moved&&this._zooming){var t=this._map;this._zooming=!1,e.DomUtil.removeClass(t._mapPane,"leaflet-touching"),e.DomEvent.off(i,"touchmove",this._onTouchMove).off(i,"touchend",this._onTouchEnd);var s=this._getScaleOrigin(),o=t.layerPointToLatLng(s),n=t.getZoom(),a=t.getScaleZoom(this._scale)-n,r=a>0?Math.ceil(a):Math.floor(a),h=t._limitZoom(n+r);t.fire("zoomanim",{center:o,zoom:h}),t._runAnimation(o,h,t.getZoomScale(h)/this._scale,s,!0)}},_getScaleOrigin:function(){var t=this._centerOffset.subtract(this._delta).divideBy(this._scale);return this._startCenter.add(t)}}),e.Map.addInitHook("addHandler","touchZoom",e.Map.TouchZoom),e.Map.mergeOptions({boxZoom:!0}),e.Map.BoxZoom=e.Handler.extend({initialize:function(t){this._map=t,this._container=t._container,this._pane=t._panes.overlayPane},addHooks:function(){e.DomEvent.on(this._container,"mousedown",this._onMouseDown,this)},removeHooks:function(){e.DomEvent.off(this._container,"mousedown",this._onMouseDown)},_onMouseDown:function(t){return!t.shiftKey||1!==t.which&&1!==t.button?!1:(e.DomUtil.disableTextSelection(),this._startLayerPoint=this._map.mouseEventToLayerPoint(t),this._box=e.DomUtil.create("div","leaflet-zoom-box",this._pane),e.DomUtil.setPosition(this._box,this._startLayerPoint),this._container.style.cursor="crosshair",e.DomEvent.on(i,"mousemove",this._onMouseMove,this).on(i,"mouseup",this._onMouseUp,this).preventDefault(t),this._map.fire("boxzoomstart"),s)},_onMouseMove:function(t){var i=this._startLayerPoint,s=this._box,o=this._map.mouseEventToLayerPoint(t),n=o.subtract(i),a=new e.Point(Math.min(o.x,i.x),Math.min(o.y,i.y));e.DomUtil.setPosition(s,a),s.style.width=Math.max(0,Math.abs(n.x)-4)+"px",s.style.height=Math.max(0,Math.abs(n.y)-4)+"px"},_onMouseUp:function(t){this._pane.removeChild(this._box),this._container.style.cursor="",e.DomUtil.enableTextSelection(),e.DomEvent.off(i,"mousemove",this._onMouseMove).off(i,"mouseup",this._onMouseUp);var s=this._map,o=s.mouseEventToLayerPoint(t);if(!this._startLayerPoint.equals(o)){var n=new e.LatLngBounds(s.layerPointToLatLng(this._startLayerPoint),s.layerPointToLatLng(o));s.fitBounds(n),s.fire("boxzoomend",{boxZoomBounds:n})}}}),e.Map.addInitHook("addHandler","boxZoom",e.Map.BoxZoom),e.Map.mergeOptions({keyboard:!0,keyboardPanOffset:80,keyboardZoomOffset:1}),e.Map.Keyboard=e.Handler.extend({keyCodes:{left:[37],right:[39],down:[40],up:[38],zoomIn:[187,107,61],zoomOut:[189,109,173]},initialize:function(t){this._map=t,this._setPanOffset(t.options.keyboardPanOffset),this._setZoomOffset(t.options.keyboardZoomOffset)},addHooks:function(){var t=this._map._container;-1===t.tabIndex&&(t.tabIndex="0"),e.DomEvent.on(t,"focus",this._onFocus,this).on(t,"blur",this._onBlur,this).on(t,"mousedown",this._onMouseDown,this),this._map.on("focus",this._addHooks,this).on("blur",this._removeHooks,this)},removeHooks:function(){this._removeHooks();var t=this._map._container;e.DomEvent.off(t,"focus",this._onFocus,this).off(t,"blur",this._onBlur,this).off(t,"mousedown",this._onMouseDown,this),this._map.off("focus",this._addHooks,this).off("blur",this._removeHooks,this)},_onMouseDown:function(){this._focused||this._map._container.focus()},_onFocus:function(){this._focused=!0,this._map.fire("focus")},_onBlur:function(){this._focused=!1,this._map.fire("blur")},_setPanOffset:function(t){var i,s,e=this._panKeys={},o=this.keyCodes;for(i=0,s=o.left.length;s>i;i++)e[o.left[i]]=[-1*t,0];for(i=0,s=o.right.length;s>i;i++)e[o.right[i]]=[t,0];for(i=0,s=o.down.length;s>i;i++)e[o.down[i]]=[0,t];for(i=0,s=o.up.length;s>i;i++)e[o.up[i]]=[0,-1*t]},_setZoomOffset:function(t){var i,s,e=this._zoomKeys={},o=this.keyCodes;for(i=0,s=o.zoomIn.length;s>i;i++)e[o.zoomIn[i]]=t;for(i=0,s=o.zoomOut.length;s>i;i++)e[o.zoomOut[i]]=-t},_addHooks:function(){e.DomEvent.on(i,"keydown",this._onKeyDown,this)},_removeHooks:function(){e.DomEvent.off(i,"keydown",this._onKeyDown,this)},_onKeyDown:function(t){var i=t.keyCode,s=this._map;if(this._panKeys.hasOwnProperty(i))s.panBy(this._panKeys[i]),s.options.maxBounds&&s.panInsideBounds(s.options.maxBounds);else{if(!this._zoomKeys.hasOwnProperty(i))return;s.setZoom(s.getZoom()+this._zoomKeys[i])}e.DomEvent.stop(t)}}),e.Map.addInitHook("addHandler","keyboard",e.Map.Keyboard),e.Handler.MarkerDrag=e.Handler.extend({initialize:function(t){this._marker=t},addHooks:function(){var t=this._marker._icon;this._draggable||(this._draggable=new e.Draggable(t,t).on("dragstart",this._onDragStart,this).on("drag",this._onDrag,this).on("dragend",this._onDragEnd,this)),this._draggable.enable()},removeHooks:function(){this._draggable.disable()},moved:function(){return this._draggable&&this._draggable._moved},_onDragStart:function(){this._marker.closePopup().fire("movestart").fire("dragstart")},_onDrag:function(){var t=this._marker,i=t._shadow,s=e.DomUtil.getPosition(t._icon),o=t._map.layerPointToLatLng(s);i&&e.DomUtil.setPosition(i,s),t._latlng=o,t.fire("move",{latlng:o}).fire("drag")},_onDragEnd:function(){this._marker.fire("moveend").fire("dragend")}}),e.Handler.PolyEdit=e.Handler.extend({options:{icon:new e.DivIcon({iconSize:new e.Point(8,8),className:"leaflet-div-icon leaflet-editing-icon"})},initialize:function(t,i){this._poly=t,e.setOptions(this,i)},addHooks:function(){this._poly._map&&(this._markerGroup||this._initMarkers(),this._poly._map.addLayer(this._markerGroup))},removeHooks:function(){this._poly._map&&(this._poly._map.removeLayer(this._markerGroup),delete this._markerGroup,delete this._markers)},updateMarkers:function(){this._markerGroup.clearLayers(),this._initMarkers()},_initMarkers:function(){this._markerGroup||(this._markerGroup=new e.LayerGroup),this._markers=[];var t,i,s,o,n=this._poly._latlngs;for(t=0,s=n.length;s>t;t++)o=this._createMarker(n[t],t),o.on("click",this._onMarkerClick,this),this._markers.push(o);var a,r;for(t=0,i=s-1;s>t;i=t++)(0!==t||e.Polygon&&this._poly instanceof e.Polygon)&&(a=this._markers[i],r=this._markers[t],this._createMiddleMarker(a,r),this._updatePrevNext(a,r))},_createMarker:function(t,i){var s=new e.Marker(t,{draggable:!0,icon:this.options.icon});return s._origLatLng=t,s._index=i,s.on("drag",this._onMarkerDrag,this),s.on("dragend",this._fireEdit,this),this._markerGroup.addLayer(s),s},_fireEdit:function(){this._poly.fire("edit")},_onMarkerDrag:function(t){var i=t.target;e.extend(i._origLatLng,i._latlng),i._middleLeft&&i._middleLeft.setLatLng(this._getMiddleLatLng(i._prev,i)),i._middleRight&&i._middleRight.setLatLng(this._getMiddleLatLng(i,i._next)),this._poly.redraw()},_onMarkerClick:function(t){if(!(3>this._poly._latlngs.length)){var i=t.target,s=i._index;this._markerGroup.removeLayer(i),this._markers.splice(s,1),this._poly.spliceLatLngs(s,1),this._updateIndexes(s,-1),this._updatePrevNext(i._prev,i._next),i._middleLeft&&this._markerGroup.removeLayer(i._middleLeft),i._middleRight&&this._markerGroup.removeLayer(i._middleRight),i._prev&&i._next?this._createMiddleMarker(i._prev,i._next):i._prev?i._next||(i._prev._middleRight=null):i._next._middleLeft=null,this._poly.fire("edit")}},_updateIndexes:function(t,i){this._markerGroup.eachLayer(function(s){s._index>t&&(s._index+=i)})},_createMiddleMarker:function(t,i){var s,e,o,n=this._getMiddleLatLng(t,i),a=this._createMarker(n);a.setOpacity(.6),t._middleRight=i._middleLeft=a,e=function(){var e=i._index;a._index=e,a.off("click",s).on("click",this._onMarkerClick,this),n.lat=a.getLatLng().lat,n.lng=a.getLatLng().lng,this._poly.spliceLatLngs(e,0,n),this._markers.splice(e,0,a),a.setOpacity(1),this._updateIndexes(e,1),i._index++,this._updatePrevNext(t,a),this._updatePrevNext(a,i)},o=function(){a.off("dragstart",e,this),a.off("dragend",o,this), -this._createMiddleMarker(t,a),this._createMiddleMarker(a,i)},s=function(){e.call(this),o.call(this),this._poly.fire("edit")},a.on("click",s,this).on("dragstart",e,this).on("dragend",o,this),this._markerGroup.addLayer(a)},_updatePrevNext:function(t,i){t&&(t._next=i),i&&(i._prev=t)},_getMiddleLatLng:function(t,i){var s=this._poly._map,e=s.latLngToLayerPoint(t.getLatLng()),o=s.latLngToLayerPoint(i.getLatLng());return s.layerPointToLatLng(e._add(o)._divideBy(2))}}),e.Polyline.addInitHook(function(){e.Handler.PolyEdit&&(this.editing=new e.Handler.PolyEdit(this),this.options.editable&&this.editing.enable()),this.on("add",function(){this.editing&&this.editing.enabled()&&this.editing.addHooks()}),this.on("remove",function(){this.editing&&this.editing.enabled()&&this.editing.removeHooks()})}),e.Control=e.Class.extend({options:{position:"topright"},initialize:function(t){e.setOptions(this,t)},getPosition:function(){return this.options.position},setPosition:function(t){var i=this._map;return i&&i.removeControl(this),this.options.position=t,i&&i.addControl(this),this},addTo:function(t){this._map=t;var i=this._container=this.onAdd(t),s=this.getPosition(),o=t._controlCorners[s];return e.DomUtil.addClass(i,"leaflet-control"),-1!==s.indexOf("bottom")?o.insertBefore(i,o.firstChild):o.appendChild(i),this},removeFrom:function(t){var i=this.getPosition(),s=t._controlCorners[i];return s.removeChild(this._container),this._map=null,this.onRemove&&this.onRemove(t),this}}),e.control=function(t){return new e.Control(t)},e.Map.include({addControl:function(t){return t.addTo(this),this},removeControl:function(t){return t.removeFrom(this),this},_initControlPos:function(){function t(t,n){var a=s+t+" "+s+n;i[t+n]=e.DomUtil.create("div",a,o)}var i=this._controlCorners={},s="leaflet-",o=this._controlContainer=e.DomUtil.create("div",s+"control-container",this._container);t("top","left"),t("top","right"),t("bottom","left"),t("bottom","right")}}),e.Control.Zoom=e.Control.extend({options:{position:"topleft"},onAdd:function(t){var i="leaflet-control-zoom",s="leaflet-bar",o=s+"-part",n=e.DomUtil.create("div",i+" "+s);return this._map=t,this._zoomInButton=this._createButton("+","Zoom in",i+"-in "+o+" "+o+"-top",n,this._zoomIn,this),this._zoomOutButton=this._createButton("-","Zoom out",i+"-out "+o+" "+o+"-bottom",n,this._zoomOut,this),t.on("zoomend",this._updateDisabled,this),n},onRemove:function(t){t.off("zoomend",this._updateDisabled,this)},_zoomIn:function(t){this._map.zoomIn(t.shiftKey?3:1)},_zoomOut:function(t){this._map.zoomOut(t.shiftKey?3:1)},_createButton:function(t,i,s,o,n,a){var r=e.DomUtil.create("a",s,o);r.innerHTML=t,r.href="#",r.title=i;var h=e.DomEvent.stopPropagation;return e.DomEvent.on(r,"click",h).on(r,"mousedown",h).on(r,"dblclick",h).on(r,"click",e.DomEvent.preventDefault).on(r,"click",n,a),r},_updateDisabled:function(){var t=this._map,i="leaflet-control-zoom-disabled";e.DomUtil.removeClass(this._zoomInButton,i),e.DomUtil.removeClass(this._zoomOutButton,i),t._zoom===t.getMinZoom()&&e.DomUtil.addClass(this._zoomOutButton,i),t._zoom===t.getMaxZoom()&&e.DomUtil.addClass(this._zoomInButton,i)}}),e.Map.mergeOptions({zoomControl:!0}),e.Map.addInitHook(function(){this.options.zoomControl&&(this.zoomControl=new e.Control.Zoom,this.addControl(this.zoomControl))}),e.control.zoom=function(t){return new e.Control.Zoom(t)},e.Control.Attribution=e.Control.extend({options:{position:"bottomright",prefix:'Powered by Leaflet'},initialize:function(t){e.setOptions(this,t),this._attributions={}},onAdd:function(t){return this._container=e.DomUtil.create("div","leaflet-control-attribution"),e.DomEvent.disableClickPropagation(this._container),t.on("layeradd",this._onLayerAdd,this).on("layerremove",this._onLayerRemove,this),this._update(),this._container},onRemove:function(t){t.off("layeradd",this._onLayerAdd).off("layerremove",this._onLayerRemove)},setPrefix:function(t){return this.options.prefix=t,this._update(),this},addAttribution:function(t){return t?(this._attributions[t]||(this._attributions[t]=0),this._attributions[t]++,this._update(),this):s},removeAttribution:function(t){return t?(this._attributions[t]--,this._update(),this):s},_update:function(){if(this._map){var t=[];for(var i in this._attributions)this._attributions.hasOwnProperty(i)&&this._attributions[i]&&t.push(i);var s=[];this.options.prefix&&s.push(this.options.prefix),t.length&&s.push(t.join(", ")),this._container.innerHTML=s.join(" — ")}},_onLayerAdd:function(t){t.layer.getAttribution&&this.addAttribution(t.layer.getAttribution())},_onLayerRemove:function(t){t.layer.getAttribution&&this.removeAttribution(t.layer.getAttribution())}}),e.Map.mergeOptions({attributionControl:!0}),e.Map.addInitHook(function(){this.options.attributionControl&&(this.attributionControl=(new e.Control.Attribution).addTo(this))}),e.control.attribution=function(t){return new e.Control.Attribution(t)},e.Control.Scale=e.Control.extend({options:{position:"bottomleft",maxWidth:100,metric:!0,imperial:!0,updateWhenIdle:!1},onAdd:function(t){this._map=t;var i="leaflet-control-scale",s=e.DomUtil.create("div",i),o=this.options;return this._addScales(o,i,s),t.on(o.updateWhenIdle?"moveend":"move",this._update,this),t.whenReady(this._update,this),s},onRemove:function(t){t.off(this.options.updateWhenIdle?"moveend":"move",this._update,this)},_addScales:function(t,i,s){t.metric&&(this._mScale=e.DomUtil.create("div",i+"-line",s)),t.imperial&&(this._iScale=e.DomUtil.create("div",i+"-line",s))},_update:function(){var t=this._map.getBounds(),i=t.getCenter().lat,s=6378137*Math.PI*Math.cos(i*Math.PI/180),e=s*(t.getNorthEast().lng-t.getSouthWest().lng)/180,o=this._map.getSize(),n=this.options,a=0;o.x>0&&(a=e*(n.maxWidth/o.x)),this._updateScales(n,a)},_updateScales:function(t,i){t.metric&&i&&this._updateMetric(i),t.imperial&&i&&this._updateImperial(i)},_updateMetric:function(t){var i=this._getRoundNum(t);this._mScale.style.width=this._getScaleWidth(i/t)+"px",this._mScale.innerHTML=1e3>i?i+" m":i/1e3+" km"},_updateImperial:function(t){var i,s,e,o=3.2808399*t,n=this._iScale;o>5280?(i=o/5280,s=this._getRoundNum(i),n.style.width=this._getScaleWidth(s/i)+"px",n.innerHTML=s+" mi"):(e=this._getRoundNum(o),n.style.width=this._getScaleWidth(e/o)+"px",n.innerHTML=e+" ft")},_getScaleWidth:function(t){return Math.round(this.options.maxWidth*t)-10},_getRoundNum:function(t){var i=Math.pow(10,(Math.floor(t)+"").length-1),s=t/i;return s=s>=10?10:s>=5?5:s>=3?3:s>=2?2:1,i*s}}),e.control.scale=function(t){return new e.Control.Scale(t)},e.Control.Layers=e.Control.extend({options:{collapsed:!0,position:"topright",autoZIndex:!0},initialize:function(t,i,s){e.setOptions(this,s),this._layers={},this._lastZIndex=0,this._handlingClick=!1;for(var o in t)t.hasOwnProperty(o)&&this._addLayer(t[o],o);for(o in i)i.hasOwnProperty(o)&&this._addLayer(i[o],o,!0)},onAdd:function(t){return this._initLayout(),this._update(),t.on("layeradd",this._onLayerChange,this).on("layerremove",this._onLayerChange,this),this._container},onRemove:function(t){t.off("layeradd",this._onLayerChange).off("layerremove",this._onLayerChange)},addBaseLayer:function(t,i){return this._addLayer(t,i),this._update(),this},addOverlay:function(t,i){return this._addLayer(t,i,!0),this._update(),this},removeLayer:function(t){var i=e.stamp(t);return delete this._layers[i],this._update(),this},_initLayout:function(){var t="leaflet-control-layers",i=this._container=e.DomUtil.create("div",t);e.Browser.touch?e.DomEvent.on(i,"click",e.DomEvent.stopPropagation):(e.DomEvent.disableClickPropagation(i),e.DomEvent.on(i,"mousewheel",e.DomEvent.stopPropagation));var s=this._form=e.DomUtil.create("form",t+"-list");if(this.options.collapsed){e.DomEvent.on(i,"mouseover",this._expand,this).on(i,"mouseout",this._collapse,this);var o=this._layersLink=e.DomUtil.create("a",t+"-toggle",i);o.href="#",o.title="Layers",e.Browser.touch?e.DomEvent.on(o,"click",e.DomEvent.stopPropagation).on(o,"click",e.DomEvent.preventDefault).on(o,"click",this._expand,this):e.DomEvent.on(o,"focus",this._expand,this),this._map.on("movestart",this._collapse,this)}else this._expand();this._baseLayersList=e.DomUtil.create("div",t+"-base",s),this._separator=e.DomUtil.create("div",t+"-separator",s),this._overlaysList=e.DomUtil.create("div",t+"-overlays",s),i.appendChild(s)},_addLayer:function(t,i,s){var o=e.stamp(t);this._layers[o]={layer:t,name:i,overlay:s},this.options.autoZIndex&&t.setZIndex&&(this._lastZIndex++,t.setZIndex(this._lastZIndex))},_update:function(){if(this._container){this._baseLayersList.innerHTML="",this._overlaysList.innerHTML="";var t=!1,i=!1;for(var s in this._layers)if(this._layers.hasOwnProperty(s)){var e=this._layers[s];this._addItem(e),i=i||e.overlay,t=t||!e.overlay}this._separator.style.display=i&&t?"":"none"}},_onLayerChange:function(t){var i=e.stamp(t.layer);this._layers[i]&&!this._handlingClick&&this._update()},_createRadioElement:function(t,s){var e='t;t++)i=o[t],s=this._layers[i.layerId],i.checked&&!this._map.hasLayer(s.layer)?(this._map.addLayer(s.layer),s.overlay||(e=s.layer)):!i.checked&&this._map.hasLayer(s.layer)&&this._map.removeLayer(s.layer);e&&(this._map.setZoom(this._map.getZoom()),this._map.fire("baselayerchange",{layer:e})),this._handlingClick=!1},_expand:function(){e.DomUtil.addClass(this._container,"leaflet-control-layers-expanded")},_collapse:function(){this._container.className=this._container.className.replace(" leaflet-control-layers-expanded","")}}),e.control.layers=function(t,i,s){return new e.Control.Layers(t,i,s)},e.PosAnimation=e.Class.extend({includes:e.Mixin.Events,run:function(t,i,s,o){this.stop(),this._el=t,this._inProgress=!0,this.fire("start"),t.style[e.DomUtil.TRANSITION]="all "+(s||.25)+"s cubic-bezier(0,0,"+(o||.5)+",1)",e.DomEvent.on(t,e.DomUtil.TRANSITION_END,this._onTransitionEnd,this),e.DomUtil.setPosition(t,i),e.Util.falseFn(t.offsetWidth),this._stepTimer=setInterval(e.bind(this.fire,this,"step"),50)},stop:function(){this._inProgress&&(e.DomUtil.setPosition(this._el,this._getPos()),this._onTransitionEnd(),e.Util.falseFn(this._el.offsetWidth))},_transformRe:/(-?[\d\.]+), (-?[\d\.]+)\)/,_getPos:function(){var i,s,o,n=this._el,a=t.getComputedStyle(n);return e.Browser.any3d?(o=a[e.DomUtil.TRANSFORM].match(this._transformRe),i=parseFloat(o[1]),s=parseFloat(o[2])):(i=parseFloat(a.left),s=parseFloat(a.top)),new e.Point(i,s,!0)},_onTransitionEnd:function(){e.DomEvent.off(this._el,e.DomUtil.TRANSITION_END,this._onTransitionEnd,this),this._inProgress&&(this._inProgress=!1,this._el.style[e.DomUtil.TRANSITION]="",clearInterval(this._stepTimer),this.fire("step").fire("end"))}}),e.Map.include({setView:function(t,i,s){i=this._limitZoom(i);var e=this._zoom!==i;if(this._loaded&&!s&&this._layers){this._panAnim&&this._panAnim.stop();var o=e?this._zoomToIfClose&&this._zoomToIfClose(t,i):this._panByIfClose(t);if(o)return clearTimeout(this._sizeTimer),this}return this._resetView(t,i),this},panBy:function(t,i,s){if(t=e.point(t),!t.x&&!t.y)return this;this._panAnim||(this._panAnim=new e.PosAnimation,this._panAnim.on({step:this._onPanTransitionStep,end:this._onPanTransitionEnd},this)),this.fire("movestart"),e.DomUtil.addClass(this._mapPane,"leaflet-pan-anim");var o=e.DomUtil.getPosition(this._mapPane).subtract(t)._round();return this._panAnim.run(this._mapPane,o,i||.25,s),this},_onPanTransitionStep:function(){this.fire("move")},_onPanTransitionEnd:function(){e.DomUtil.removeClass(this._mapPane,"leaflet-pan-anim"),this.fire("moveend")},_panByIfClose:function(t){var i=this._getCenterOffset(t)._floor();return this._offsetIsWithinView(i)?(this.panBy(i),!0):!1},_offsetIsWithinView:function(t,i){var s=i||1,e=this.getSize();return Math.abs(t.x)<=e.x*s&&Math.abs(t.y)<=e.y*s}}),e.PosAnimation=e.DomUtil.TRANSITION?e.PosAnimation:e.PosAnimation.extend({run:function(t,i,s,o){this.stop(),this._el=t,this._inProgress=!0,this._duration=s||.25,this._easeOutPower=1/Math.max(o||.5,.2),this._startPos=e.DomUtil.getPosition(t),this._offset=i.subtract(this._startPos),this._startTime=+new Date,this.fire("start"),this._animate()},stop:function(){this._inProgress&&(this._step(),this._complete())},_animate:function(){this._animId=e.Util.requestAnimFrame(this._animate,this),this._step()},_step:function(){var t=+new Date-this._startTime,i=1e3*this._duration;i>t?this._runFrame(this._easeOut(t/i)):(this._runFrame(1),this._complete())},_runFrame:function(t){var i=this._startPos.add(this._offset.multiplyBy(t));e.DomUtil.setPosition(this._el,i),this.fire("step")},_complete:function(){e.Util.cancelAnimFrame(this._animId),this._inProgress=!1,this.fire("end")},_easeOut:function(t){return 1-Math.pow(1-t,this._easeOutPower)}}),e.Map.mergeOptions({zoomAnimation:e.DomUtil.TRANSITION&&!e.Browser.android23&&!e.Browser.mobileOpera}),e.DomUtil.TRANSITION&&e.Map.addInitHook(function(){e.DomEvent.on(this._mapPane,e.DomUtil.TRANSITION_END,this._catchTransitionEnd,this)}),e.Map.include(e.DomUtil.TRANSITION?{_zoomToIfClose:function(t,i){if(this._animatingZoom)return!0;if(!this.options.zoomAnimation)return!1;var s=this.getZoomScale(i),o=this._getCenterOffset(t)._divideBy(1-1/s);if(!this._offsetIsWithinView(o,1))return!1;e.DomUtil.addClass(this._mapPane,"leaflet-zoom-anim"),this.fire("movestart").fire("zoomstart"),this.fire("zoomanim",{center:t,zoom:i});var n=this._getCenterLayerPoint().add(o);return this._prepareTileBg(),this._runAnimation(t,i,s,n),!0},_catchTransitionEnd:function(){this._animatingZoom&&this._onZoomTransitionEnd()},_runAnimation:function(t,i,s,o,n){this._animateToCenter=t,this._animateToZoom=i,this._animatingZoom=!0,e.Draggable&&(e.Draggable._disabled=!0);var a=e.DomUtil.TRANSFORM,r=this._tileBg;clearTimeout(this._clearTileBgTimer),e.Util.falseFn(r.offsetWidth);var h=e.DomUtil.getScaleString(s,o),l=r.style[a];r.style[a]=n?l+" "+h:h+" "+l},_prepareTileBg:function(){var t=this._tilePane,i=this._tileBg;if(i&&this._getLoadedTilesPercentage(i)>.5&&.5>this._getLoadedTilesPercentage(t))return t.style.visibility="hidden",t.empty=!0,this._stopLoadingImages(t),s;i||(i=this._tileBg=this._createPane("leaflet-tile-pane",this._mapPane),i.style.zIndex=1),i.style[e.DomUtil.TRANSFORM]="",i.style.visibility="hidden",i.empty=!0,t.empty=!1,this._tilePane=this._panes.tilePane=i;var o=this._tileBg=t;e.DomUtil.addClass(o,"leaflet-zoom-animated"),this._stopLoadingImages(o)},_getLoadedTilesPercentage:function(t){var i,s,e=t.getElementsByTagName("img"),o=0;for(i=0,s=e.length;s>i;i++)e[i].complete&&o++;return o/s},_stopLoadingImages:function(t){var i,s,o,n=Array.prototype.slice.call(t.getElementsByTagName("img"));for(i=0,s=n.length;s>i;i++)o=n[i],o.complete||(o.onload=e.Util.falseFn,o.onerror=e.Util.falseFn,o.src=e.Util.emptyImageUrl,o.parentNode.removeChild(o))},_onZoomTransitionEnd:function(){this._restoreTileFront(),e.DomUtil.removeClass(this._mapPane,"leaflet-zoom-anim"),e.Util.falseFn(this._tileBg.offsetWidth),this._animatingZoom=!1,this._resetView(this._animateToCenter,this._animateToZoom,!0,!0),e.Draggable&&(e.Draggable._disabled=!1)},_restoreTileFront:function(){this._tilePane.innerHTML="",this._tilePane.style.visibility="",this._tilePane.style.zIndex=2,this._tileBg.style.zIndex=1},_clearTileBg:function(){this._animatingZoom||this.touchZoom._zooming||(this._tileBg.innerHTML="")}}:{}),e.Map.include({_defaultLocateOptions:{watch:!1,setView:!1,maxZoom:1/0,timeout:1e4,maximumAge:0,enableHighAccuracy:!1},locate:function(t){if(t=this._locationOptions=e.extend(this._defaultLocateOptions,t),!navigator.geolocation)return this._handleGeolocationError({code:0,message:"Geolocation not supported."}),this;var i=e.bind(this._handleGeolocationResponse,this),s=e.bind(this._handleGeolocationError,this);return t.watch?this._locationWatchId=navigator.geolocation.watchPosition(i,s,t):navigator.geolocation.getCurrentPosition(i,s,t),this},stopLocate:function(){return navigator.geolocation&&navigator.geolocation.clearWatch(this._locationWatchId),this},_handleGeolocationError:function(t){var i=t.code,s=t.message||(1===i?"permission denied":2===i?"position unavailable":"timeout");this._locationOptions.setView&&!this._loaded&&this.fitWorld(),this.fire("locationerror",{code:i,message:"Geolocation error: "+s+"."})},_handleGeolocationResponse:function(t){var i=180*t.coords.accuracy/4e7,s=2*i,o=t.coords.latitude,n=t.coords.longitude,a=new e.LatLng(o,n),r=new e.LatLng(o-i,n-s),h=new e.LatLng(o+i,n+s),l=new e.LatLngBounds(r,h),c=this._locationOptions;if(c.setView){var m=Math.min(this.getBoundsZoom(l),c.maxZoom);this.setView(a,m)}this.fire("locationfound",{latlng:a,bounds:l,accuracy:t.coords.accuracy})}})}(this,document),L.Proj={},L.Proj._isProj4Proj=function(t){return t.projName!==void 0},L.Proj.Projection=L.Class.extend({initialize:function(t,i){if(L.Proj._isProj4Proj(t))this._proj=t;else{var s=t;Proj4js.defs[s]=i,this._proj=new Proj4js.Proj(s)}},project:function(t){var i=new L.Point(t.lng,t.lat);return Proj4js.transform(Proj4js.WGS84,this._proj,i)},unproject:function(t,i){var s=Proj4js.transform(this._proj,Proj4js.WGS84,t.clone());return new L.LatLng(s.y,s.x,i)}}),L.Proj.CRS=L.Class.extend({includes:L.CRS,options:{transformation:new L.Transformation(1,0,-1,0)},initialize:function(t,i,s){var e,o,n,a;L.Proj._isProj4Proj(t)?(o=t,e=o.srsCode,a=i||{},this.projection=new L.Proj.Projection(o)):(e=t,n=i,a=s||{},this.projection=new L.Proj.Projection(e,n)),L.Util.setOptions(this,a),this.code=e,this.transformation=this.options.transformation,this.options.origin&&(this.transformation=new L.Transformation(1,-this.options.origin[0],-1,this.options.origin[1])),this.options.scales?this.scale=function(t){return this.options.scales[t]}:this.options.resolutions&&(this.scale=function(t){return 1/this.options.resolutions[t]})}}),L.Proj.CRS.TMS=L.Proj.CRS.extend({initialize:function(t,i,s,e){if(L.Proj._isProj4Proj(t)){var o=t,n=i,a=s||{};a.origin=[n[0],n[3]],L.Proj.CRS.prototype.initialize(o,a)}else{var r=t,h=i,n=s,a=e||{};a.origin=[n[0],n[3]],L.Proj.CRS.prototype.initialize(r,h,a)}this.projectedBounds=n}}),L.Proj.TileLayer={},L.Proj.TileLayer.TMS=L.TileLayer.extend({options:{tms:!0,continuousWorld:!0},initialize:function(t,i,s){if(!(i instanceof L.Proj.CRS.TMS))throw Error("CRS is not L.Proj.CRS.TMS.");L.TileLayer.prototype.initialize.call(this,t,s),this.crs=i;for(var e=this.options.minZoom;this.options.maxZoom>e;e++){var o=(this.crs.projectedBounds[3]-this.crs.projectedBounds[1])/this._projectedTileSize(e);if(Math.abs(o-Math.round(o))>.001)throw Error("Projected bounds does not match grid at zoom "+e)}},getTileUrl:function(t){var i=Math.round((this.crs.projectedBounds[3]-this.crs.projectedBounds[1])/this._projectedTileSize(this._map.getZoom()));return L.Util.template(this._url,L.Util.extend({s:this._getSubdomain(t),z:this._getZoomForUrl(),x:t.x,y:i-t.y-1},this.options))},_projectedTileSize:function(t){return this.options.tileSize/this.crs.scale(t)}}),"undefined"!=typeof module&&(module.exports=L.Proj),"undefined"!=typeof L&&L.CRS!==void 0&&(L.CRS.proj4js=function(){return function(t,i,s,e){return e=e||{},s&&(e.transformation=s),new L.Proj.CRS(t,i,e)}}()),L.Control.MousePosition=L.Control.extend({options:{position:"bottomleft",separator:" : ",emptyString:"Unavailable",lngFirst:!1,numDigits:5,lngFormatter:void 0,latFormatter:void 0},onAdd:function(t){return this._container=L.DomUtil.create("div","leaflet-control-mouseposition"),L.DomEvent.disableClickPropagation(this._container),t.on("mousemove",this._onMouseMove,this),this._container.innerHTML=this.options.emptyString,this._container},onRemove:function(t){t.off("mousemove",this._onMouseMove)},_onMouseMove:function(t){var i=L.Util.formatNum(t.latlng.lng,this.options.numDigits),s=L.Util.formatNum(t.latlng.lat,this.options.numDigits);this.options.lngFormatter&&(i=this.options.lngFormatter(i)),this.options.latFormatter&&(s=this.options.latFormatter(s));var e=this.options.lngFirst?i+this.options.separator+s:s+this.options.separator+i;this._container.innerHTML=e}}),L.Map.mergeOptions({positionControl:!1}),L.Map.addInitHook(function(){this.options.positionControl&&(this.positionControl=new L.Control.MousePosition,this.addControl(this.positionControl))}),L.control.mousePosition=function(t){return new L.Control.MousePosition(t)},function(t,i){L.KSP={},L.KSP.version="0.2.1",L.KSP.CRS={},L.KSP.CRS.EPSG4326=new L.Proj.CRS.TMS(new Proj4js.Proj("EPSG:4326"),[-180,-90,180,90],{resolutions:[.703125,.3515625,.17578125,.087890625,.0439453125,.02197265625]}),L.KSP.CelestialBody=L.Class.extend({initialize:function(t){if(!t.hasOwnProperty("id"))throw Error("must specify id");if(!t.hasOwnProperty("name"))throw Error("must specify name");if(t.hasOwnProperty("crs")){if(!(t.crs instanceof L.Proj.CRS.TMS))throw Error("crs is not an instance of L.Proj.CRS.TMS")}else this.crs=L.KSP.CRS.EPSG4326;t.hasOwnProperty("radius")||(this.radius=1),t.hasOwnProperty("thumbnail")||(this.thumbnail="body-unknown.png"),t.hasOwnProperty("baseLayers")||(this.baseLayers={}),L.Util.extend(this,t)},addTo:function(t){var i,s=t._body;if(t._body=this,t.fire("bodychangestart",{body:this,oldBody:s}),s){for(i in s.baseLayers)s.baseLayers.hasOwnProperty(i)&&t.removeLayer(s.baseLayers[i]);for(i in s.overlays)s.overlays.hasOwnProperty(i)&&t.removeLayer(s.overlays[i])}var e=this.defaultLayer||this.baseLayers.Satellite;if(e){for(i in this.baseLayers)if(this.baseLayers.hasOwnProperty(i)&&this.baseLayers[i]._type===t._baseLayerType){e=this.baseLayers[i];break}t.addLayer(e),t.fire("baselayerchange",{layer:e})}for(i in this.overlays)this.overlays.hasOwnProperty(i)&&t._overlayTypes.indexOf(this.overlays[i]._type)>=0&&(t.addLayer(this.overlays[i]),t.fire("layeradd",{layer:this.overlays[i]}));t.fire("bodychangeend",{body:this,oldBody:s})},onAdd:function(t){this.addTo(t)},removeFrom:function(t){L.KSP.CelestialBody.DUMMY.addTo(t)},onRemove:function(t){this.removeFrom(t)}}),L.KSP.celestialBody=function(t){return new L.KSP.CelestialBody(t)},L.KSP.CelestialBody.DUMMY=L.KSP.celestialBody({id:"",name:"",crs:L.KSP.CRS.EPSG4326}),L.KSP.CelestialBody.ALL_PLANETARY=[L.KSP.CelestialBody.DUMMY],L.KSP.Map=L.Map.extend({options:{crs:L.KSP.CRS.EPSG4326,continuousWorld:!0},initialize:function(t,i){this._baseLayerType=-1,this._overlayTypes=[],L.Util.setOptions(this,i),this.startTrackingLayerState(),this.on("bodychangestart",this._onBodyChangeStart).on("bodychangeend",this._onBodyChangeEnd),L.Map.prototype.initialize.call(this,t,this.options)},clampZoom:function(){var t=this.getZoom(),i=this.getMinZoom(),s=this.getMaxZoom();i>t?this.setZoom(i):t>s?this.setZoom(s):this.fire("zoomend",this)},_onBodyChangeStart:function(){this.stopTrackingLayerState()},_onBodyChangeEnd:function(){this.clampZoom(),this.startTrackingLayerState()},_onLayerStateChange:function(t){if("layeradd"===t.type)t.layer instanceof L.KSP.TileLayer?this._baseLayerType=t.layer._type:t.layer instanceof L.KSP.LayerGroup&&0>this._overlayTypes.indexOf(t.layer._type)&&this._overlayTypes.push(t.layer._type);else if(t.layer instanceof L.KSP.LayerGroup){var i,s,e=t.layer._type,o=this._overlayTypes;for(i=o.length-1;i>=0;i--)s=o[i],s===e&&o.splice(i,1)}},startTrackingLayerState:function(){this.on("layeradd",this._onLayerStateChange).on("layerremove",this._onLayerStateChange)},stopTrackingLayerState:function(){this.off("layeradd",this._onLayerStateChange).off("layerremove",this._onLayerStateChange)}}),L.KSP.map=function(t,i){return new L.KSP.Map(t,i)},L.KSP.TileLayer=L.Proj.TileLayer.TMS.extend({statics:{TYPE_SATELLITE:0,TYPE_COLORRELIEF:1,TYPE_SLOPE:2,DEFAULT_URL:"http://tiles.kerbalmaps.com/{body}/{style}/{z}/{x}/{y}.png"},options:{continuousWorld:!1,noWrap:!1,minZoom:0,maxZoom:5,attribution:"Map data © Joel Pedraza"},initialize:function(t,i,s,e){L.Util.setOptions(this,e),this._type=t,L.Proj.TileLayer.TMS.prototype.initialize.call(this,i,s,this.options)}}),L.KSP.tileLayer=function(t,i,s,e){return new L.KSP.TileLayer(t,i,s,e)},L.KSP.LayerGroup=L.LayerGroup.extend({statics:{TYPE_SPACECENTER:0,TYPE_ANOMALY:1},initialize:function(t,i){this._type=t,L.LayerGroup.prototype.initialize.call(this,i)}}),L.KSP.layerGroup=function(t,i){return new L.KSP.LayerGroup(t,i)},L.KSP.Icon={},L.KSP.Icon.SPACECENTER=new L.Icon({iconUrl:"../assets/images/markers-spacecenter.png",shadowUrl:"../assets/images/markers-shadow.png",iconSize:[30,40],shadowSize:[35,16],iconAnchor:[15,40],shadowAnchor:[10,12],popupAnchor:[0,-35]}),L.KSP.Icon.ANOMALY=new L.Icon({iconUrl:"../assets/images/markers-anomaly.png",shadowUrl:"../assets/images/markers-shadow.png",iconSize:[30,40],shadowSize:[35,16],iconAnchor:[15,40],shadowAnchor:[10,12],popupAnchor:[0,-35]}),L.KSP.Legend={},L.KSP.Legend.SLOPE={"≥ 60°":"#E19678","< 60°":"#C86464","< 30°":"#965A64","< 15°":"#645064","< 5°":"#325064","0°":"#32465A"},L.KSP.Control=L.KSP.control={},L.KSP.Control.Legend=L.Control.extend({options:{position:"bottomright"},onAdd:function(t){return this._container=L.DomUtil.create("div","leaflet-control-legend"),t.on("baselayerchange",this._onLayerChange,this),this._container},_update:function(t){if(this._container.innerHTML="",t){for(var i in t)t.hasOwnProperty(i)&&(this._container.innerHTML+=''+i+"
    ");L.DomUtil.addClass(this._container,"leaflet-control-legend-visible")}else this._container.className=this._container.className.replace(" leaflet-control-legend-visible","")},_onLayerChange:function(t){this._update(t.layer.options.legend)}}),L.Map.mergeOptions({legendControl:!0}),L.Map.addInitHook(function(){this.options.bodyControl&&(this.legendControl=new L.KSP.Control.Legend,this.addControl(this.legendControl))}),L.control.legend=function(t){return new L.KSP.Control.Legend(t)},L.KSP.Control.Scale=L.Control.Scale.extend({options:{imperial:!1},onAdd:function(t){this._radius=0,t._body&&(this._radius=t._body.radius);var i=L.Control.Scale.prototype.onAdd.call(this,t);return t.on("bodychangeend",this._onBodyChangeEnd,this),i},onRemove:function(t){L.Control.Scale.prototype.onRemove.call(this,t),t.off("bodychangeend",this._onBodyChangeEnd)},_onBodyChangeEnd:function(t){this._radius=t.body.radius,this._update()},_update:function(){var t=this._map.getBounds(),i=t.getCenter().lat,s=this._radius*Math.PI*Math.cos(i*Math.PI/180),e=s*(t.getNorthEast().lng-t.getSouthWest().lng)/180,o=this._map.getSize(),n=this.options,a=0;o.x>0&&(a=e*(n.maxWidth/o.x)),this._updateScales(n,a)}}),L.KSP.Map.mergeOptions({scaleControl:!1}),L.KSP.Map.addInitHook(function(){this.options.scaleControl&&(this.scaleControl=new L.KSP.Control.Scale,this.addControl(this.scaleControl))}),L.KSP.control.scale=function(t){return new L.KSP.Control.Scale(t)},L.KSP.Control.CelestialBody=L.Control.extend({options:{position:"topright",collapsed:!0},initialize:function(t,i){L.Util.setOptions(this,i),this._bodies=t,this._timeInMillis=(new Date).valueOf(),this._weekInMillis=6048e5},onAdd:function(){return this._initLayout(),this._update(),this._map.on("bodychangeend",this._update,this),this._container},_initLayout:function(){var t="leaflet-control-celestialbodies",s=this._container=L.DomUtil.create("div",t),e=this._bodies;if(this.options.collapsed){L.DomEvent.on(s,"mouseover",this._expand,this).on(s,"mouseout",this._collapse,this);var o=this._bodiesLink=L.DomUtil.create("a",t+"-toggle",s);o.href="#",o.title="Celestial Bodies",L.DomEvent.on(o,"focus",this._expand,this),this._map.on("movestart",this._collapse,this)}var n=this._list=L.DomUtil.create("ul",t+"-list",s);for(var a in e)if(e.hasOwnProperty(a)){var r=this._addBody(e[a],n);if(e[a].children){var h=i.createElement("ul");for(var l in e[a].children)e[a].children.hasOwnProperty(l)&&this._addBody(e[a].children[l],h);r.appendChild(h)}}},_update:function(){this._map._body&&(this._bodiesLink.style.backgroundImage='url("'+this._map._body.thumbnail+'")')},_addBody:function(t,s){var e,o=i.createElement("li"),n=i.createElement("img");if(n.src=t.thumbnail,n.alt=o.title=t.name,t.addedOn){this._timeInMillis-t.addedOnKerbal Space Center
    -0.0969 : -74.6004"),L.marker([20.5829,-146.5116],{icon:L.KSP.Icon.SPACECENTER}).bindPopup("Kerbal Space Center 2
    20.5829 : -146.5116"),L.marker([-1.5409,-71.9099],{icon:L.KSP.Icon.SPACECENTER}).bindPopup("Island Airfield
    -1.5409 : -71.9099")]),Anomalies:L.KSP.layerGroup(L.KSP.LayerGroup.TYPE_ANOMALY,[L.marker([.1023,-74.5684],{icon:L.KSP.Icon.ANOMALY}).bindPopup("0.1023 : -74.5684"),L.marker([20.6709,-146.4968],{icon:L.KSP.Icon.ANOMALY}).bindPopup("20.6709 : -146.4968"),L.marker([35.5705,-74.9773],{icon:L.KSP.Icon.ANOMALY}).bindPopup("35.5705 : -74.9773"),L.marker([-.6402,-80.7668],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-0.6402 : -80.7668"),L.marker([-28.8083,-13.4401],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-28.8083 : -13.4401"),L.marker([-6.5057,-141.6856],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-6.5057 : -141.6856"),L.marker([81.9551,-128.518],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-81.9551 : -128.518")])}}),L.KSP.CelestialBody.MUN=L.KSP.celestialBody({id:"mun",name:"Mun",crs:L.KSP.CRS.EPSG4326,radius:2e5,addedOn:13682304e5,lastUpdated:1368144e6,thumbnail:"body-mun.png",baseLayers:{Satellite:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SATELLITE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{body:"mun",style:"sat"}),"Color Relief":L.KSP.tileLayer(L.KSP.TileLayer.TYPE_COLORRELIEF,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{body:"mun",style:"color",legend:{"3150 m":"#EBEBEB","-180 m":"#232323"}}),Slope:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SLOPE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{body:"mun",style:"slope",legend:L.KSP.Legend.SLOPE})},overlays:{Anomalies:L.KSP.layerGroup(L.KSP.LayerGroup.TYPE_ANOMALY,[L.marker([-9.8314,25.9177],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-9.8314 : 25.9177"),L.marker([-82.2063,102.9305],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-82.2063 : 102.9305"),L.marker([57.6604,9.1422],{icon:L.KSP.Icon.ANOMALY}).bindPopup("57.6604 : 9.1422"),L.marker([2.4695,81.5133],{icon:L.KSP.Icon.ANOMALY}).bindPopup("2.4695 : 81.5133"),L.marker([12.4432,39.178],{icon:L.KSP.Icon.ANOMALY}).bindPopup("12.4432 : 39.1780"),L.marker([-12.4431,-140.822],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-12.4431 : -140.8220"),L.marker([.7027,22.747],{icon:L.KSP.Icon.ANOMALY}).bindPopup("0.7027 : 22.7470"),L.marker([-70.9556,-68.1378],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-70.9556,-68.1378")])}}),L.KSP.CelestialBody.MINMUS=L.KSP.celestialBody({id:"minmus",name:"Minmus",crs:L.KSP.CRS.EPSG4326,radius:6e4,addedOn:13682304e5,lastUpdated:13682304e5,thumbnail:"body-minmus.png",baseLayers:{Satellite:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SATELLITE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"sat",body:"minmus"}),"Color Relief":L.KSP.tileLayer(L.KSP.TileLayer.TYPE_COLORRELIEF,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"color",body:"minmus",legend:{"5750 m":"#414B41","2500 m":"#BEE6C3","1 m":"#96CDB4","0 m":"#87B9A5"}}),Slope:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SLOPE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"slope",body:"minmus",legend:L.KSP.Legend.SLOPE})},overlays:{Anomalies:L.KSP.layerGroup(L.KSP.LayerGroup.TYPE_ANOMALY,[L.marker([23.7768,60.0462],{icon:L.KSP.Icon.ANOMALY}).bindPopup("23.7768 : 60.0462")])}}),L.KSP.CelestialBody.DUNA=L.KSP.celestialBody({id:"duna",name:"Duna",crs:L.KSP.CRS.EPSG4326,radius:32e4,addedOn:13688352e5,lastUpdated:13688352e5,thumbnail:"body-duna.png",baseLayers:{Satellite:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SATELLITE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"sat",body:"duna"}),"Color Relief":L.KSP.tileLayer(L.KSP.TileLayer.TYPE_COLORRELIEF,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"color",body:"duna",legend:{"4800 m":"#C3A082","4000 m":"#966446","3000 m":"#733219","2000 m":"#501E14","1000 m":"#3C140F","0 m":"#280F0A"}}),Slope:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SLOPE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"slope",body:"duna",legend:L.KSP.Legend.SLOPE})},overlays:{Anomalies:L.KSP.layerGroup(L.KSP.LayerGroup.TYPE_ANOMALY,[L.marker([17.0483,-85.4717],{icon:L.KSP.Icon.ANOMALY}).bindPopup("17.0483 : -85.4717"),L.marker([-30.3525,-28.6828],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-30.3525 : -28.6828"),L.marker([-66.1344,-160.7432],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-66.1344 : -160.7432")])}}),L.KSP.CelestialBody.IKE=L.KSP.celestialBody({id:"ike",name:"Ike",crs:L.KSP.CRS.EPSG4326,radius:13e4,addedOn:13688352e5,lastUpdated:13688352e5,thumbnail:"body-ike.png",baseLayers:{Satellite:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SATELLITE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"sat",body:"ike"}),"Color Relief":L.KSP.tileLayer(L.KSP.TileLayer.TYPE_COLORRELIEF,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"color",body:"ike",legend:{"13000 m":"#828282","11000 m":"#6E6E6E","9000 m":"#5A5A5A","7000 m":"#464646","5000 m":"#323232","2500 m":"#191919","70 m":"#070707"}}),Slope:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SLOPE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"slope",body:"ike",legend:L.KSP.Legend.SLOPE})},overlays:{}}),L.KSP.CelestialBody.DRES=L.KSP.celestialBody({id:"dres",name:"Dres",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-dres.png"}),L.KSP.CelestialBody.JOOL=L.KSP.celestialBody({id:"jool",name:"Jool",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-jool.png"}),L.KSP.CelestialBody.LAYTHE=L.KSP.celestialBody({id:"laythe",name:"Laythe",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-laythe.png"}),L.KSP.CelestialBody.VALL=L.KSP.celestialBody({id:"vall",name:"Vall",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-vall.png"}),L.KSP.CelestialBody.TYLO=L.KSP.celestialBody({id:"tylo",name:"Tylo",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-tylo.png"}),L.KSP.CelestialBody.BOP=L.KSP.celestialBody({id:"bop",name:"Bop",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-bop.png"}),L.KSP.CelestialBody.POL=L.KSP.celestialBody({id:"pol",name:"Pol",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-pol.png"}),L.KSP.CelestialBody.EELOO=L.KSP.celestialBody({id:"eeloo",name:"Eeloo",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-eeloo.png"}),L.KSP.CelestialBody.KERBIN.defaultLayer=L.KSP.CelestialBody.KERBIN.baseLayers.Satellite,L.KSP.CelestialBody.MUN.defaultLayer=L.KSP.CelestialBody.MUN.baseLayers.Satellite,L.KSP.CelestialBody.MINMUS.defaultLayer=L.KSP.CelestialBody.MINMUS.baseLayers.Satellite,L.KSP.CelestialBody.EVE.children=[L.KSP.CelestialBody.GILLY],L.KSP.CelestialBody.KERBIN.children=[L.KSP.CelestialBody.MUN,L.KSP.CelestialBody.MINMUS],L.KSP.CelestialBody.DUNA.children=[L.KSP.CelestialBody.IKE],L.KSP.CelestialBody.JOOL.children=[L.KSP.CelestialBody.LAYTHE,L.KSP.CelestialBody.VALL,L.KSP.CelestialBody.TYLO,L.KSP.CelestialBody.BOP,L.KSP.CelestialBody.POL],L.KSP.CelestialBody.GILLY.parent=L.KSP.CelestialBody.EVE,L.KSP.CelestialBody.MUN.parent=L.KSP.CelestialBody.MINMUS.parent=L.KSP.CelestialBody.KERBIN,L.KSP.CelestialBody.IKE.parent=L.KSP.CelestialBody.DUNA,L.KSP.CelestialBody.LAYTHE.parent=L.KSP.CelestialBody.VALL.parent=L.KSP.CelestialBody.TYLO.parent=L.KSP.CelestialBody.BOP.parent=L.KSP.CelestialBody.POL.parent=L.KSP.CelestialBody.JOOL,L.KSP.CelestialBody.ALL_PLANETARY=[L.KSP.CelestialBody.MOHO,L.KSP.CelestialBody.EVE,L.KSP.CelestialBody.KERBIN,L.KSP.CelestialBody.DUNA,L.KSP.CelestialBody.DRES,L.KSP.CelestialBody.JOOL,L.KSP.CelestialBody.EELOO],L.KSP.Map.addInitHook(function(){this.options.layers=[L.KSP.CelestialBody.KERBIN]})}(this,document);var Settings=Class.create({initialize:function(defaultHost,defaultPort){if(!this.getHost()){this.setHost(defaultHost)}if(!this.getPort()){this.setPort(defaultPort)}},getHost:function(){return this.get("host")},getPort:function(){return this.get("port")},setHost:function(value){return this.set("host",value)},setPort:function(value){return this.set("port",value)},get:function(property){return localStorage.getItem(property)},set:function(property,value){return localStorage.setItem(property,value)}});var Telemachus=Class.create({initialize:function(host,port){this.updateConnection(host,port);this.receiverFunctions=[];this.subscribedFields={};this.orbitingBodies=this.getOrbitalBodies();this.rate=500;this.loopTimeout=setTimeout(this.poll.bind(this),this.rate)},url:function(){return"http://"+this.host+":"+this.port+"/telemachus/datalink"},updateConnection:function(host,port){this.host=host;this.port=port},addReceiverFunction:function(func){this.receiverFunctions.push(func)},subscribeToData:function(fields){for(var i=fields.length-1;i>=0;i--){var field=fields[i];this.subscribedFields[field]=field}},dispatchMessages:function(data){for(var i=this.receiverFunctions.length-1;i>=0;i--){try{this.receiverFunctions[i](data)}catch(e){console.error(e)}}},send:function(message){this.socket.send(JSON.stringify(message))},getOrbitalBodyInfo:function(name){var properties=this.orbitingBodies[name];if(properties){return Object.extend({name:name},properties)}else{return null}},notifyIfLOS:function(request){if(request.transport.status==0){document.fire("telemachus:loss-of-signal");return true}return false},prepareParams:function(params){var normalizedParams=[];Object.keys(params).forEach(function(field){var sanitizedFieldName=field.replace("[","{").replace("]","}");normalizedParams.push(sanitizedFieldName+"="+field)});return normalizedParams},convertData:function(rawData){var data={};var startBracesRegexp=/\{/g;var endBracesRegexp=/\}/g;Object.keys(rawData).forEach(function(key){var convertedFieldName=key.replace(startBracesRegexp,"[").replace(endBracesRegexp,"]");data[convertedFieldName]=rawData[key]});return data},poll:function(){var params=this.prepareParams(this.subscribedFields);var requestURL=this.url()+"?"+params.join("&");new Ajax.Request(requestURL,{method:"get",onSuccess:function(response){var rawData=JSON.parse(response.responseText);var data=this.convertData(rawData);this.dispatchMessages(data)}.bind(this),onException:this.notifyIfLOS.bind(this),onComplete:function(response){setTimeout(this.poll.bind(this),this.rate)}.bind(this)})},sendMessage:function(params,callback){new Ajax.Request(this.url(),{method:"post",postBody:JSON.stringify(params),onSuccess:function(response){var rawData=JSON.parse(response.responseText);var data=this.convertData(rawData);callback(data)}.bind(this),onException:this.notifyIfLOS.bind(this)})},getOrbitalBodies:function(){return{Sun:{id:0,referenceBodyName:null,mapBody:null,atmosphericRadius:0,color:"#FFFF00",surfaceGravity:17.1},Kerbin:{id:1,referenceBodyName:"Sun",mapBody:L.KSP.CelestialBody.KERBIN,atmosphericRadius:7e4,color:"#4a5472",surfaceGravity:9.81},Mun:{id:2,referenceBodyName:"Kerbin",mapBody:L.KSP.CelestialBody.MUN,atmosphericRadius:0,color:"#e2e0d7",surfaceGravity:1.63},Minmus:{id:3,referenceBodyName:"Kerbin",mapBody:L.KSP.CelestialBody.MINMUS,color:"#98f2c5",atmosphericRadius:0,surfaceGravity:.491},Moho:{id:4,referenceBodyName:"Sun",mapBody:L.KSP.CelestialBody.MOHO,atmosphericRadius:0,color:"#fdc39e",surfaceGravity:2.7},Eve:{id:5,referenceBodyName:"Sun",mapBody:L.KSP.CelestialBody.EVE,atmosphericRadius:9e4,color:"#c394fe",surfaceGravity:16.7},Duna:{id:6,referenceBodyName:"Sun",mapBody:L.KSP.CelestialBody.DUNA,atmosphericRadius:5e4,color:"#fc5e49",surfaceGravity:2.94},Ike:{id:7,referenceBodyName:"Duna",mapBody:L.KSP.CelestialBody.IKE,atmosphericRadius:0,color:"#e2e0d7",surfaceGravity:1.1},Jool:{id:8,referenceBodyName:"Sun",mapBody:L.KSP.CelestialBody.JOOL,atmosphericRadius:2e5,color:"#C5DCAB",surfaceGravity:7.85},Laythe:{id:9,referenceBodyName:"Jool",mapBody:L.KSP.CelestialBody.LAYTHE,atmosphericRadius:5e4,color:"#a8b4fe",surfaceGravity:7.85},Vall:{id:10,referenceBodyName:"Jool",mapBody:L.KSP.CelestialBody.VALL,atmosphericRadius:0,color:"#b0f4fe",surfaceGravity:2.31},Bop:{id:11,referenceBodyName:"Jool",mapBody:L.KSP.CelestialBody.BOP,atmosphericRadius:0,color:"#c64605",surfaceGravity:.589},Tylo:{id:12,referenceBodyName:"Jool",mapBody:L.KSP.CelestialBody.TYLO,atmosphericRadius:0,color:"#fdf7ed",surfaceGravity:7.85},Gilly:{id:13,referenceBodyName:"Eve",mapBody:L.KSP.CelestialBody.GILLY,atmosphericRadius:0,color:"#fdcbb1",surfaceGravity:.049},Pol:{id:14,referenceBodyName:"Pol",mapBody:L.KSP.CelestialBody.POL,atmosphericRadius:0,color:"#fec681",surfaceGravity:.373},Dres:{id:15,referenceBodyName:"Sun",mapBody:L.KSP.CelestialBody.DRES,atmosphericRadius:0,color:"#fef8f9",surfaceGravity:1.13},Eeloo:{id:16,referenceBodyName:"Sun",mapBody:L.KSP.CelestialBody.EELOO,atmosphericRadius:0,color:"#e5fafe",surfaceGravity:1.69}}}});var TitleBar=Class.create({initialize:function(datalink,title_bar_id){this.datalink=datalink;this.title_bar_id=title_bar_id;this.title_bar=$(this.title_bar_id);this.initializeLOSNotifier();this.initializeDatalink()},update:function(data){window.requestAnimationFrame(function(){this.title_bar.down("#world-clock").update(TimeFormatters.formatUT(data["t.universalTime"]));this.title_bar.down("#mission-time").update(TimeFormatters.formatMET(data["v.missionTime"]));this.title_bar.down("#mission-time").removeClassName("loss-of-signal")}.bind(this))},initializeLOSNotifier:function(){document.observe("telemachus:loss-of-signal",function(){window.requestAnimationFrame(function(){this.title_bar.down("#mission-time").update("⚠ LOS ⚠");this.title_bar.down("#mission-time").addClassName("loss-of-signal")}.bind(this))}.bind(this))},initializeDatalink:function(){this.datalink.subscribeToData(["t.timeWarp","t.universalTime","v.missionTime"]);this.datalink.addReceiverFunction(this.update.bind(this))}});var ButtonIndicator=Class.create({initialize:function(datalink,indicatorId,apiButtonString){this.datalink=datalink;this.indicatorId=indicatorId;this.indicator=$(this.indicatorId);this.apiButtonString=apiButtonString;this.initializeDatalink()},update:function(data){if(data[this.apiButtonString]==true){this.indicator.addClassName("on")}else{this.indicator.removeClassName("on")}},initializeDatalink:function(){this.datalink.subscribeToData([this.apiButtonString]);this.datalink.addReceiverFunction(this.update.bind(this))}});var ReadoutTable=Class.create({initialize:function(datalink,tableId,dataRows){this.datalink=datalink;this.tableId=tableId;this.table=$(this.tableId);this.dataRows=dataRows;this.initializeDatalink()},update:function(data){window.requestAnimationFrame(function(){this.dataRows.forEach(function(row){var rowId=row.label;var tableRow=this.table.down("tr[data-label='"+rowId+"']");if(!tableRow){var tableRow=new Element("tr",{"data-label":rowId});tableRow.insert(""+row.label+"");this.table.insert(tableRow)}tableRow.down("td").update(row.formatter(data[row.value]))}.bind(this))}.bind(this))},initializeDatalink:function(){var dataValues=this.dataRows.map(function(dataRow){return dataRow.value});this.datalink.subscribeToData(dataValues);this.datalink.addReceiverFunction(this.update.bind(this))}});var ResourceMonitor=Class.create({initialize:function(datalink,resourceName,options){this.datalink=datalink;this.resourceName=resourceName;this.options=Object.extend({currentStageProgressBar:null,totalProgressBar:null,valuePrefix:null},options);this.resourceStrings=this.buildResourceStrings();this.initializeDatalink()},update:function(data){window.requestAnimationFrame(function(){if(this.options.totalProgressBar){this.options.totalProgressBar.value=data[this.resourceStrings.totalAvailable];this.options.totalProgressBar.max=data[this.resourceStrings.totalMax]}if(this.options.currentStageProgressBar){this.options.currentStageProgressBar.value=data[this.resourceStrings.currentStageAvailable];this.options.currentStageProgressBar.max=data[this.resourceStrings.currentStageMax]}this.updateValue("-total-value",data[this.resourceStrings.totalAvailable]);this.updateValue("-total-max",data[this.resourceStrings.totalMax]);this.updateValue("-current-stage-value",data[this.resourceStrings.currentStageAvailable]);this.updateValue("-current-stage-max",data[this.resourceStrings.currentStageMax])}.bind(this))},updateValue:function(id,value){if($(this.options.valuePrefix+id)){if(value<0){$(this.options.valuePrefix+id).update("NA")}else{$(this.options.valuePrefix+id).update(value.toFixed(2))}}},buildResourceStrings:function(){return{totalAvailable:"r.resource["+this.resourceName+"]",totalMax:"r.resourceMax["+this.resourceName+"]",currentStageAvailable:"r.resourceCurrent["+this.resourceName+"]",currentStageMax:"r.resourceCurrentMax["+this.resourceName+"]"}},initializeDatalink:function(){this.datalink.subscribeToData([this.resourceStrings.totalAvailable,this.resourceStrings.totalMax,this.resourceStrings.currentStageAvailable,this.resourceStrings.currentStageMax]);this.datalink.addReceiverFunction(this.update.bind(this))}});var DataTable=Class.create({initialize:function(tableID,dataRows){this.tableID=tableID;this.table=$(this.tableID);this.dataRows=dataRows},update:function(){window.requestAnimationFrame(function(){this.dataRows.forEach(function(row){var rowId=row.label;var tableRow=this.table.down("tr[data-label='"+rowId+"']");if(!tableRow){var tableRow=new Element("tr",{"data-label":rowId});tableRow.insert(""+row.label+"");this.table.insert(tableRow)}tableRow.down("td").update(row.value)}.bind(this))}.bind(this))},clear:function(){window.requestAnimationFrame(function(){this.dataRows=[];this.table.innerHTML=""}.bind(this))}});var AtmosphericDensityGauge=Class.create({initialize:function(datalink,gaugeID){this.datalink=datalink;this.gaugeID=gaugeID;this.gauge=$(this.gaugeID);this.initializeDatalink();this.func=function(x){return Math.log(2*x)}},update:function(data){var max=this.func(100);var value=this.func(data["v.atmosphericPressure"]*100);if(!isFinite(value)){value=0}this.gauge.value=value;this.gauge.max=max},initializeDatalink:function(){this.datalink.subscribeToData(["v.atmosphericPressure"]);this.datalink.addReceiverFunction(this.update.bind(this))}});var ThrottleGauge=Class.create({initialize:function(datalink,gaugeID){this.datalink=datalink;this.gaugeID=gaugeID;this.gauge=$(this.gaugeID);this.initializeDatalink()},update:function(data){this.gauge.value=data["f.throttle"]*100;this.gauge.max=100},initializeDatalink:function(){this.datalink.subscribeToData(["f.throttle"]);this.datalink.addReceiverFunction(this.update.bind(this))}});!function(a,b){"function"==typeof define&&define.amd?define([],function(){return a.Chartist=b()}):"object"==typeof exports?module.exports=b():a.Chartist=b()}(this,function(){var a={version:"0.9.4"};return function(a,b,c){"use strict";c.noop=function(a){return a},c.alphaNumerate=function(a){return String.fromCharCode(97+a%26)},c.extend=function(a){a=a||{};var b=Array.prototype.slice.call(arguments,1);return b.forEach(function(b){for(var d in b)"object"!=typeof b[d]||null===b[d]||b[d]instanceof Array?a[d]=b[d]:a[d]=c.extend({},a[d],b[d])}),a},c.replaceAll=function(a,b,c){return a.replace(new RegExp(b,"g"),c)},c.stripUnit=function(a){return"string"==typeof a&&(a=a.replace(/[^0-9\+-\.]/g,"")),+a},c.ensureUnit=function(a,b){return"number"==typeof a&&(a+=b),a},c.querySelector=function(a){return a instanceof Node?a:b.querySelector(a)},c.times=function(a){return Array.apply(null,new Array(a))},c.sum=function(a,b){return a+(b?b:0)},c.mapMultiply=function(a){return function(b){return b*a}},c.mapAdd=function(a){return function(b){return b+a}},c.serialMap=function(a,b){var d=[],e=Math.max.apply(null,a.map(function(a){return a.length}));return c.times(e).forEach(function(c,e){var f=a.map(function(a){return a[e]});d[e]=b.apply(null,f)}),d},c.roundWithPrecision=function(a,b){var d=Math.pow(10,b||c.precision);return Math.round(a*d)/d},c.precision=8,c.escapingMap={"&":"&","<":"<",">":">",'"':""","'":"'"},c.serialize=function(a){return null===a||void 0===a?a:("number"==typeof a?a=""+a:"object"==typeof a&&(a=JSON.stringify({data:a})),Object.keys(c.escapingMap).reduce(function(a,b){return c.replaceAll(a,b,c.escapingMap[b])},a))},c.deserialize=function(a){if("string"!=typeof a)return a;a=Object.keys(c.escapingMap).reduce(function(a,b){return c.replaceAll(a,c.escapingMap[b],b)},a);try{a=JSON.parse(a),a=void 0!==a.data?a.data:a}catch(b){}return a},c.createSvg=function(a,b,d,e){var f;return b=b||"100%",d=d||"100%",Array.prototype.slice.call(a.querySelectorAll("svg")).filter(function(a){return a.getAttributeNS("http://www.w3.org/2000/xmlns/",c.xmlNs.prefix)}).forEach(function(b){a.removeChild(b)}),f=new c.Svg("svg").attr({width:b,height:d}).addClass(e).attr({style:"width: "+b+"; height: "+d+";"}),a.appendChild(f._node),f},c.reverseData=function(a){a.labels.reverse(),a.series.reverse();for(var b=0;bf.high&&(f.high=c),h&&ck,m=e?c.rho(j.range):0;if(e&&c.projectLength(a,1,j)>=d)j.step=1;else if(e&&m=d)j.step=m;else for(;;){if(l&&c.projectLength(a,j.step,j)<=d)j.step*=2;else{if(l||!(c.projectLength(a,j.step/2,j)>=d))break;if(j.step/=2,e&&j.step%1!==0){j.step*=2;break}}if(i++>1e3)throw new Error("Exceeded maximum number of iterations while optimizing scale step!")}for(g=j.min,h=j.max;g+j.step<=j.low;)g+=j.step;for(;h-j.step>=j.high;)h-=j.step;for(j.min=g,j.max=h,j.range=j.max-j.min,j.values=[],f=j.min;f<=j.max;f+=j.step)j.values.push(c.roundWithPrecision(f));return j},c.polarToCartesian=function(a,b,c,d){var e=(d-90)*Math.PI/180;return{x:a+c*Math.cos(e),y:b+c*Math.sin(e)}},c.createChartRect=function(a,b,d){var e=!(!b.axisX&&!b.axisY),f=e?b.axisY.offset:0,g=e?b.axisX.offset:0,h=a.width()||c.stripUnit(b.width)||0,i=a.height()||c.stripUnit(b.height)||0,j=c.normalizePadding(b.chartPadding,d);h=Math.max(h,f+j.left+j.right),i=Math.max(i,g+j.top+j.bottom);var k={padding:j,width:function(){return this.x2-this.x1},height:function(){return this.y1-this.y2}};return e?("start"===b.axisX.position?(k.y2=j.top+g,k.y1=Math.max(i-j.bottom,k.y2+1)):(k.y2=j.top,k.y1=Math.max(i-j.bottom-g,k.y2+1)),"start"===b.axisY.position?(k.x1=j.left+f,k.x2=Math.max(h-j.right,k.x1+1)):(k.x1=j.left,k.x2=Math.max(h-j.right-f,k.x1+1))):(k.x1=j.left,k.x2=Math.max(h-j.right,k.x1+1),k.y2=j.top,k.y1=Math.max(i-j.bottom,k.y2+1)),k},c.createGrid=function(a,b,d,e,f,g,h,i){var j={};j[d.units.pos+"1"]=a,j[d.units.pos+"2"]=a,j[d.counterUnits.pos+"1"]=e,j[d.counterUnits.pos+"2"]=e+f;var k=g.elem("line",j,h.join(" "));i.emit("draw",c.extend({type:"grid",axis:d,index:b,group:g,element:k},j))},c.createLabel=function(a,b,d,e,f,g,h,i,j,k,l){var m,n={};if(n[f.units.pos]=a+h[f.units.pos],n[f.counterUnits.pos]=h[f.counterUnits.pos],n[f.units.len]=b,n[f.counterUnits.len]=g-10,k){var o=''+e[d]+"";m=i.foreignObject(o,c.extend({style:"overflow: visible;"},n))}else m=i.elem("text",n,j.join(" ")).text(e[d]);l.emit("draw",c.extend({type:"label",axis:f,index:d,group:i,element:m,text:e[d]},n))},c.getSeriesOption=function(a,b,c){if(a.name&&b.series&&b.series[a.name]){var d=b.series[a.name];return d.hasOwnProperty(c)?d[c]:b[c]}return b[c]},c.optionsProvider=function(b,d,e){function f(b){var f=h;if(h=c.extend({},j),d)for(i=0;i1){var i=[];return h.forEach(function(a){i.push(g(a.pathCoordinates,a.valueData))}),c.Svg.Path.join(i)}if(a=h[0].pathCoordinates,d=h[0].valueData,a.length<=4)return c.Interpolation.none()(a,d);for(var j,k=(new c.Svg.Path).move(a[0],a[1],!1,d[0]),l=0,m=a.length;m-2*!j>l;l+=2){var n=[{x:+a[l-2],y:+a[l-1]},{x:+a[l],y:+a[l+1]},{x:+a[l+2],y:+a[l+3]},{x:+a[l+4],y:+a[l+5]}];j?l?m-4===l?n[3]={x:+a[0],y:+a[1]}:m-2===l&&(n[2]={x:+a[0],y:+a[1]},n[3]={x:+a[2],y:+a[3]}):n[0]={x:+a[m-2],y:+a[m-1]}:m-4===l?n[3]=n[2]:l||(n[0]={x:+a[l],y:+a[l+1]}),k.curve(e*(-n[0].x+6*n[1].x+n[2].x)/6+f*n[2].x,e*(-n[0].y+6*n[1].y+n[2].y)/6+f*n[2].y,e*(n[1].x+6*n[2].x-n[3].x)/6+f*n[2].x,e*(n[1].y+6*n[2].y-n[3].y)/6+f*n[2].y,n[2].x,n[2].y,!1,d[(l+2)/2])}return k}},c.Interpolation.step=function(a){var b={postpone:!0};return a=c.extend({},b,a),function(b,d){for(var e=new c.Svg.Path,f=!0,g=2;g1}).map(function(a){var b=a.pathElements[0],c=a.pathElements[a.pathElements.length-1];return a.clone(!0).position(0).remove(1).move(b.x,r).line(b.x,b.y).position(a.pathElements.length+1).line(c.x,r)}).forEach(function(h){var k=i.elem("path",{d:h.stringify()},a.classNames.area,!0).attr({values:b.normalized[g]},c.xmlNs.uri);this.eventEmitter.emit("draw",{type:"area",values:b.normalized[g],path:h.clone(),series:f,seriesIndex:g,axisX:d,axisY:e,chartRect:j,index:g,group:i,element:k})}.bind(this))}}.bind(this)),this.eventEmitter.emit("created",{bounds:e.bounds,chartRect:j,axisX:d,axisY:e,svg:this.svg,options:a})}function e(a,b,d,e){c.Line["super"].constructor.call(this,a,b,f,c.extend({},f,d),e)}var f={axisX:{offset:30,position:"end",labelOffset:{x:0,y:0},showLabel:!0,showGrid:!0,labelInterpolationFnc:c.noop,type:void 0},axisY:{offset:40,position:"start",labelOffset:{x:0,y:0},showLabel:!0,showGrid:!0,labelInterpolationFnc:c.noop,type:void 0,scaleMinSpace:20,onlyInteger:!1},width:void 0,height:void 0,showLine:!0,showPoint:!0,showArea:!1,areaBase:0,lineSmooth:!0,low:void 0,high:void 0,chartPadding:{top:15,right:15,bottom:5,left:10},fullWidth:!1,reverseData:!1,classNames:{chart:"ct-chart-line",label:"ct-label",labelGroup:"ct-labels",series:"ct-series",line:"ct-line",point:"ct-point",area:"ct-area",grid:"ct-grid",gridGroup:"ct-grids",vertical:"ct-vertical",horizontal:"ct-horizontal",start:"ct-start",end:"ct-end"}};c.Line=c.Base.extend({constructor:e,createChart:d})}(window,document,a),function(a,b,c){"use strict";function d(a){var b,d={raw:this.data,normalized:a.distributeSeries?c.getDataArray(this.data,a.reverseData,a.horizontalBars?"x":"y").map(function(a){return[a]}):c.getDataArray(this.data,a.reverseData,a.horizontalBars?"x":"y")};this.svg=c.createSvg(this.container,a.width,a.height,a.classNames.chart+(a.horizontalBars?" "+a.classNames.horizontalBars:""));var e=this.svg.elem("g").addClass(a.classNames.gridGroup),g=this.svg.elem("g"),h=this.svg.elem("g").addClass(a.classNames.labelGroup);if(a.stackBars){var i=c.serialMap(d.normalized,function(){return Array.prototype.slice.call(arguments).map(function(a){return a}).reduce(function(a,b){return{x:a.x+b.x||0,y:a.y+b.y||0}},{x:0,y:0})});b=c.getHighLow([i],c.extend({},a,{referenceValue:0}),a.horizontalBars?"x":"y")}else b=c.getHighLow(d.normalized,c.extend({},a,{referenceValue:0}),a.horizontalBars?"x":"y");b.high=+a.high||(0===a.high?0:b.high),b.low=+a.low||(0===a.low?0:b.low);var j,k,l,m,n,o=c.createChartRect(this.svg,a,f.padding);k=a.distributeSeries&&a.stackBars?d.raw.labels.slice(0,1):d.raw.labels,a.horizontalBars?(j=m=void 0===a.axisX.type?new c.AutoScaleAxis(c.Axis.units.x,d,o,c.extend({},a.axisX,{highLow:b,referenceValue:0})):a.axisX.type.call(c,c.Axis.units.x,d,o,c.extend({},a.axisX,{highLow:b,referenceValue:0})),l=n=void 0===a.axisY.type?new c.StepAxis(c.Axis.units.y,d,o,{ticks:k}):a.axisY.type.call(c,c.Axis.units.y,d,o,a.axisY)):(l=m=void 0===a.axisX.type?new c.StepAxis(c.Axis.units.x,d,o,{ticks:k}):a.axisX.type.call(c,c.Axis.units.x,d,o,a.axisX),j=n=void 0===a.axisY.type?new c.AutoScaleAxis(c.Axis.units.y,d,o,c.extend({},a.axisY,{highLow:b,referenceValue:0})):a.axisY.type.call(c,c.Axis.units.y,d,o,c.extend({},a.axisY,{highLow:b,referenceValue:0})));var p=a.horizontalBars?o.x1+j.projectValue(0):o.y1-j.projectValue(0),q=[];l.createGridAndLabels(e,h,this.supportsForeignObject,a,this.eventEmitter),j.createGridAndLabels(e,h,this.supportsForeignObject,a,this.eventEmitter),d.raw.series.forEach(function(b,e){var f,h,i=e-(d.raw.series.length-1)/2;f=a.distributeSeries&&!a.stackBars?l.axisLength/d.normalized.length/2:a.distributeSeries&&a.stackBars?l.axisLength/2:l.axisLength/d.normalized[e].length/2,h=g.elem("g"),h.attr({"series-name":b.name,meta:c.serialize(b.meta)},c.xmlNs.uri),h.addClass([a.classNames.series,b.className||a.classNames.series+"-"+c.alphaNumerate(e)].join(" ")),d.normalized[e].forEach(function(g,k){var r,s,t,u;if(u=a.distributeSeries&&!a.stackBars?e:a.distributeSeries&&a.stackBars?0:k,r=a.horizontalBars?{x:o.x1+j.projectValue(g&&g.x?g.x:0,k,d.normalized[e]),y:o.y1-l.projectValue(g&&g.y?g.y:0,u,d.normalized[e])}:{x:o.x1+l.projectValue(g&&g.x?g.x:0,u,d.normalized[e]),y:o.y1-j.projectValue(g&&g.y?g.y:0,k,d.normalized[e])},l instanceof c.StepAxis&&(l.options.stretch||(r[l.units.pos]+=f*(a.horizontalBars?-1:1)),r[l.units.pos]+=a.stackBars||a.distributeSeries?0:i*a.seriesBarDistance*(a.horizontalBars?-1:1)),t=q[k]||p,q[k]=t-(p-r[l.counterUnits.pos]),void 0!==g){var v={};v[l.units.pos+"1"]=r[l.units.pos],v[l.units.pos+"2"]=r[l.units.pos],v[l.counterUnits.pos+"1"]=a.stackBars?t:p,v[l.counterUnits.pos+"2"]=a.stackBars?q[k]:r[l.counterUnits.pos],v.x1=Math.min(Math.max(v.x1,o.x1),o.x2),v.x2=Math.min(Math.max(v.x2,o.x1),o.x2),v.y1=Math.min(Math.max(v.y1,o.y2),o.y1),v.y2=Math.min(Math.max(v.y2,o.y2),o.y1),s=h.elem("line",v,a.classNames.bar).attr({value:[g.x,g.y].filter(function(a){return a}).join(","),meta:c.getMetaData(b,k)},c.xmlNs.uri),this.eventEmitter.emit("draw",c.extend({type:"bar",value:g,index:k,meta:c.getMetaData(b,k),series:b,seriesIndex:e,axisX:m,axisY:n,chartRect:o,group:h,element:s},v))}}.bind(this))}.bind(this)),this.eventEmitter.emit("created",{bounds:j.bounds,chartRect:o,axisX:m,axisY:n,svg:this.svg,options:a})}function e(a,b,d,e){c.Bar["super"].constructor.call(this,a,b,f,c.extend({},f,d),e)}var f={axisX:{offset:30,position:"end",labelOffset:{x:0,y:0},showLabel:!0,showGrid:!0,labelInterpolationFnc:c.noop,scaleMinSpace:30,onlyInteger:!1},axisY:{offset:40,position:"start",labelOffset:{x:0,y:0},showLabel:!0,showGrid:!0,labelInterpolationFnc:c.noop,scaleMinSpace:20,onlyInteger:!1},width:void 0,height:void 0,high:void 0,low:void 0,onlyInteger:!1,chartPadding:{top:15,right:15,bottom:5,left:10},seriesBarDistance:15,stackBars:!1,horizontalBars:!1,distributeSeries:!1,reverseData:!1,classNames:{chart:"ct-chart-bar",horizontalBars:"ct-horizontal-bars",label:"ct-label",labelGroup:"ct-labels",series:"ct-series",bar:"ct-bar",grid:"ct-grid",gridGroup:"ct-grids",vertical:"ct-vertical",horizontal:"ct-horizontal",start:"ct-start",end:"ct-end"}};c.Bar=c.Base.extend({constructor:e,createChart:d})}(window,document,a),function(a,b,c){"use strict";function d(a,b,c){var d=b.x>a.x;return d&&"explode"===c||!d&&"implode"===c?"start":d&&"implode"===c||!d&&"explode"===c?"end":"middle"}function e(a){var b,e,f,h,i,j=[],k=a.startAngle,l=c.getDataArray(this.data,a.reverseData);this.svg=c.createSvg(this.container,a.width,a.height,a.donut?a.classNames.chartDonut:a.classNames.chartPie),e=c.createChartRect(this.svg,a,g.padding),f=Math.min(e.width()/2,e.height()/2),i=a.total||l.reduce(function(a,b){return a+b},0),f-=a.donut?a.donutWidth/2:0,h="outside"===a.labelPosition||a.donut?f:"center"===a.labelPosition?0:f/2,h+=a.labelOffset;var m={x:e.x1+e.width()/2,y:e.y2+e.height()/2},n=1===this.data.series.filter(function(a){return a.hasOwnProperty("value")?0!==a.value:0!==a}).length;a.showLabel&&(b=this.svg.elem("g",null,null,!0));for(var o=0;o180,0,r.x,r.y);a.donut||t.line(m.x,m.y);var u=j[o].elem("path",{d:t.stringify()},a.donut?a.classNames.sliceDonut:a.classNames.slicePie);if(u.attr({value:l[o],meta:c.serialize(p.meta)},c.xmlNs.uri),a.donut&&u.attr({style:"stroke-width: "+ +a.donutWidth+"px"}),this.eventEmitter.emit("draw",{type:"slice",value:l[o],totalDataSum:i,index:o,meta:p.meta,series:p,group:j[o],element:u,path:t.clone(),center:m,radius:f,startAngle:k,endAngle:q}),a.showLabel){var v=c.polarToCartesian(m.x,m.y,h,k+(q-k)/2),w=a.labelInterpolationFnc(this.data.labels?this.data.labels[o]:l[o],o);if(w||0===w){var x=b.elem("text",{dx:v.x,dy:v.y,"text-anchor":d(m,v,a.labelDirection)},a.classNames.label).text(""+w);this.eventEmitter.emit("draw",{type:"label",index:o,group:b,element:x,text:""+w,x:v.x,y:v.y})}}k=q}this.eventEmitter.emit("created",{chartRect:e,svg:this.svg,options:a})}function f(a,b,d,e){c.Pie["super"].constructor.call(this,a,b,g,c.extend({},g,d),e)}var g={width:void 0,height:void 0,chartPadding:5,classNames:{chartPie:"ct-chart-pie",chartDonut:"ct-chart-donut",series:"ct-series",slicePie:"ct-slice-pie",sliceDonut:"ct-slice-donut",label:"ct-label"},startAngle:0,total:void 0,donut:!1,donutWidth:60,showLabel:!0,labelOffset:0,labelPosition:"inside",labelInterpolationFnc:c.noop,labelDirection:"neutral",reverseData:!1};c.Pie=c.Base.extend({constructor:f,createChart:e,determineAnchorPosition:d})}(window,document,a),a});L.Graticule=L.GeoJSON.extend({options:{style:{color:"#333",weight:1},interval:20},initialize:function(options){L.Util.setOptions(this,options);this._layers={};if(this.options.sphere){this.addData(this._getFrame())}else{this.addData(this._getGraticule())}},_getFrame:function(){return{type:"Polygon",coordinates:[this._getMeridian(-180).concat(this._getMeridian(180).reverse())]}},_getGraticule:function(){var features=[],interval=this.options.interval;for(var lng=0;lng<=180;lng=lng+interval){features.push(this._getFeature(this._getMeridian(lng),{name:lng?lng.toString()+"° E":"Prime meridian"}));if(lng!==0){features.push(this._getFeature(this._getMeridian(-lng),{name:lng.toString()+"° W"}))}}for(var lat=0;lat<=90;lat=lat+interval){features.push(this._getFeature(this._getParallel(lat),{name:lat?lat.toString()+"° N":"Equator"}));if(lat!==0){features.push(this._getFeature(this._getParallel(-lat),{name:lat.toString()+"° S"}))}}return{type:"FeatureCollection",features:features}},_getMeridian:function(lng){lng=this._lngFix(lng);var coords=[];for(var lat=-90;lat<=90;lat++){coords.push([lng,lat])}return coords},_getParallel:function(lat){var coords=[];for(var lng=-180;lng<=180;lng++){coords.push([this._lngFix(lng),lat])}return coords},_getFeature:function(coords,prop){return{type:"Feature",geometry:{type:"LineString",coordinates:coords},properties:prop}},_lngFix:function(lng){if(lng>=180)return 179.999999;if(lng<=-180)return-179.999999;return lng}});L.graticule=function(options){return new L.Graticule(options)};var PositionMap=Class.create({initialize:function(datalink,mapId,options){this.datalink=datalink;this.mapId=mapId;this.noMapIndicatorId=mapId+"-no-map";this.previousBody="KERBIN";this.options=Object.extend({lockOnVessel:true},options);this.initializeMap();this.initializeNoMapIndicator();this.initializeDatalink()},update:function(data){window.requestAnimationFrame(function(){if(this.isMapAvailable(data)){this.showMap();this.updateBodyIfNecessary(data);this.setCoordinatesForMapObject(this.coordinates,data["v.lat"],data["v.long"]);if(this.options.lockOnVessel){this.map.panTo([data["v.lat"],data["v.long"]])}}else{this.hideMap()}}.bind(this))},updateBodyIfNecessary:function(data){var bodyName=data["v.body"].toUpperCase();if(this.previousBody!=bodyName){newBody=L.KSP.CelestialBody[bodyName];newBody.addTo(this.map);this.previousBody=bodyName}},initializeMap:function(){this.map=new L.KSP.Map(this.mapId,{layers:[L.KSP.CelestialBody[this.previousBody.toUpperCase()]],zoom:"fit",bodyControl:false,layerControl:true,scaleControl:true});this.map.fitWorld();L.graticule().addTo(this.map);var circleMarkerOptions={color:"#FD7E23",opacity:1,fillOpacity:1,radius:5};this.coordinates=L.circleMarker([0,0],circleMarkerOptions);this.coordinates.addTo(this.map)},convertCoordinatesToMap:function(latitude,longitude){return[latitude,longitude>180?longitude-360:longitude]},setCoordinatesForMapObject:function(object,latitude,longitude){var convertedCoordinates=this.convertCoordinatesToMap(latitude,longitude);object.setLatLng([convertedCoordinates[0],convertedCoordinates[1]])},isMapAvailable:function(data){return data["v.body"].toUpperCase()!="SUN"},hideMap:function(){$(this.mapId).hide();this.noMapIndicator.removeClassName("hidden")},showMap:function(){$(this.mapId).show();this.noMapIndicator.addClassName("hidden")},initializeNoMapIndicator:function(){this.noMapIndicator=$(this.noMapIndicatorId)},initializeDatalink:function(){this.datalink.subscribeToData(["v.lat","v.long","v.body"]);this.datalink.addReceiverFunction(this.update.bind(this))}});var OrbitalPositionData=Class.create({initialize:function(datalink,options){this.datalink=datalink;this.initializeDatalink();this.timeoutRate=1e3;this.mutexTimestamp=null;this.rootReferenceBody=null;this.options=Object.extend({onRecalculate:null,numberOfSegments:120},options)},isLocked:function(){this.mutexTimestamp&&this.mutexTimestamp<(Date.now()/1e3|0)+this.timeoutRate},mutexLock:function(){this.mutexTimestamp=Date.now()},mutexUnlock:function(){this.mutexTimestamp=null},recalculate:function(data){if(this.isLocked()){return}this.mutexLock();Object.extend(data,{currentUniversalTime:this.adjustUniversalTime(data["t.universalTime"]),vesselBody:data["v.body"],vesselCurrentPosition:{relativePosition:null},targetCurrentPosition:{relativePosition:null}});this.getPositionsAndRecalculate(data)},getPositionsAndRecalculate:function(positionData){var requestParams={};var referenceBody=this.datalink.getOrbitalBodyInfo(positionData["vesselBody"]);this.rootReferenceBody=referenceBody;requestParams["currentReferenceBodyRadius"]="b.radius["+referenceBody.id+"]";requestParams["currentReferenceBodyTruePosition"]="b.o.truePositionAtUT["+referenceBody.id+","+positionData["currentUniversalTime"]+"]";requestParams["vesselCurrentPositionRelativePosition"]="o.relativePositionAtUTForOrbitPatch["+0+","+positionData["currentUniversalTime"]+"]";this.buildRelativePositionRequestsForOrbitPatches(requestParams,"vesselCurrentOrbit",positionData["o.orbitPatches"],positionData["currentUniversalTime"]);this.buildRelativePositionRequestsForManeuverNodeOrbitPatches(requestParams,"vesselManeuverNodes",positionData["o.maneuverNodes"],positionData["currentUniversalTime"]);if(positionData["tar.type"]){if(positionData["tar.o.orbitPatches"]&&positionData["tar.o.orbitPatches"].length>0){this.buildRelativePositionRequestsForOrbitPatches(requestParams,"targetCurrentOrbit",positionData["tar.o.orbitPatches"],positionData["currentUniversalTime"],"tar.o");requestParams["targetCurrentPositionRelativePosition"]="tar.o.relativePositionAtUTForOrbitPatch["+0+","+positionData["currentUniversalTime"]+"]"}else{var body=this.datalink.getOrbitalBodyInfo(positionData["tar.name"]);requestParams[body.name+"[metadata]radius"]="b.radius["+body.id+"]";requestParams[body.name+"["+positionData["currentUniversalTime"]+"]TruePosition"]="b.o.truePositionAtUT["+body.id+","+positionData["currentUniversalTime"]+"]";requestParams[body.name+"[metadata]currentTruePosition"]="b.o.truePositionAtUT["+body.id+","+positionData["currentUniversalTime"]+"]"}}this.datalink.sendMessage(requestParams,function(data){positionData["currentReferenceBodyRadius"]=data["currentReferenceBodyRadius"];positionData["currentReferenceBodyTruePosition"]=data["currentReferenceBodyTruePosition"];this.buildReferenceBodyPositionData(data,positionData);this.buildReferenceBodyMetadata(data,positionData);positionData["vesselCurrentPosition"]["relativePosition"]=data["vesselCurrentPositionRelativePosition"];this.buildRelativePositionPositionDataForOrbitPatches(data,positionData,"vesselCurrentOrbit","o.orbitPatches");if(positionData["o.maneuverNodes"]){this.buildRelativePositionPositionDataForManeuverNodeOrbitPatches(data,positionData,"vesselManeuverNodes","o.maneuverNodes")}if(positionData["tar.o.orbitPatches"]){this.buildRelativePositionPositionDataForOrbitPatches(data,positionData,"targetCurrentOrbit","tar.o.orbitPatches","tar.o");positionData["targetCurrentPosition"]["relativePosition"]=data["targetCurrentPositionRelativePosition"]}this.mutexUnlock();this.options.onRecalculate&&this.options.onRecalculate(positionData)}.bind(this))},buildRelativePositionRequestsForOrbitPatches:function(requestParams,orbitPatchType,orbitPatches,currentUniversalTime,requestPrefix){requestPrefix=requestPrefix||"o";for(var i=0;iendUT){UTForInterval=endUT}requestParams[this.rootReferenceBody.name+"["+UTForInterval+"]TruePosition"]="b.o.truePositionAtUT["+this.rootReferenceBody.id+","+UTForInterval+"]";requestParams[orbitPatchType+"["+i+"]["+UTForInterval+"]RelativePosition"]=requestPrefix+".relativePositionAtUTForOrbitPatch["+i+","+UTForInterval+"]";requestParams[orbitPatch["referenceBody"]+"["+UTForInterval+"]TruePosition"]="b.o.truePositionAtUT["+referenceBody.id+","+UTForInterval+"]"}requestParams[orbitPatch["referenceBody"]+"[metadata]radius"]="b.radius["+referenceBody.id+"]";requestParams[orbitPatch["referenceBody"]+"[metadata]currentTruePosition"]="b.o.truePositionAtUT["+referenceBody.id+","+currentUniversalTime+"]"}},buildRelativePositionRequestsForManeuverNodeOrbitPatches:function(requestParams,maneuverNodeType,maneuverNodes,currentUniversalTime){var requestPrefix="o.maneuverNodes.relativePositionAtUTForManeuverNodesOrbitPatch";for(var i=0;iendUT){UTForInterval=endUT; +Math.cosh = Math.cosh || function(x) { + return (Math.exp(x) + Math.exp(-x)) / 2; +} -}var args=[i,j,UTForInterval];requestParams[this.rootReferenceBody.name+"["+UTForInterval+"]TruePosition"]="b.o.truePositionAtUT["+this.rootReferenceBody.id+","+UTForInterval+"]";requestParams[labelPrefix+"["+j+"]["+UTForInterval+"]RelativePosition"]=requestPrefix+"["+args.join(",")+"]";requestParams[orbitPatch["referenceBody"]+"["+UTForInterval+"]TruePosition"]="b.o.truePositionAtUT["+referenceBody.id+","+UTForInterval+"]"}requestParams[orbitPatch["referenceBody"]+"[metadata]radius"]="b.radius["+referenceBody.id+"]";requestParams[orbitPatch["referenceBody"]+"[metadata]currentTruePosition"]="b.o.truePositionAtUT["+referenceBody.id+","+currentUniversalTime+"]"}}},buildRelativePositionPositionDataForOrbitPatches:function(rawData,positionData,orbitPatchType,orbitPatchesKey){var relativePositionFieldRegex=new RegExp(orbitPatchType+"\\[(\\d+)\\]\\[([\\d\\.]+)\\]RelativePosition");var orbitPatches=positionData[orbitPatchesKey]=positionData[orbitPatchesKey]||{};var rawDataKeys=Object.keys(rawData);for(var i=rawDataKeys.length-1;i>=0;i--){var key=rawDataKeys[i];if(relativePositionFieldRegex.test(key)){var matchParts=relativePositionFieldRegex.exec(key);var orbitPatchIndex=parseInt(matchParts[1]);var universalTime=matchParts[2];var relativePosition=rawData[key];var orbitPatch=orbitPatches[orbitPatchIndex]=orbitPatches[orbitPatchIndex]||{};var orbitPatchPositionData=orbitPatch["positionData"]=orbitPatch["positionData"]||{};orbitPatchPositionData[universalTime]=orbitPatchPositionData[universalTime]||{};orbitPatchPositionData[universalTime]["relativePosition"]=relativePosition}}},buildRelativePositionPositionDataForManeuverNodeOrbitPatches:function(rawData,positionData,maneuverNodeType,maneuverNodesKey){var relativePositionFieldRegex=new RegExp(maneuverNodeType+"\\[(\\d+)\\]\\[(\\d+)\\]\\[([\\d\\.]+)\\]RelativePosition");var maneuverNodes=positionData[maneuverNodesKey]=positionData[maneuverNodesKey]||{};var rawDataKeys=Object.keys(rawData);for(var i=rawDataKeys.length-1;i>=0;i--){var key=rawDataKeys[i];if(relativePositionFieldRegex.test(key)){var matchParts=relativePositionFieldRegex.exec(key);var maneuverNodeIndex=parseInt(matchParts[1]);var orbitPatchIndex=parseInt(matchParts[2]);var universalTime=matchParts[3];var relativePosition=rawData[key];var orbitPatch=maneuverNodes[maneuverNodeIndex]["orbitPatches"][orbitPatchIndex]=maneuverNodes[maneuverNodeIndex]["orbitPatches"][orbitPatchIndex]||{};var orbitPatchPositionData=orbitPatch["positionData"]=orbitPatch["positionData"]||{};orbitPatchPositionData[universalTime]=orbitPatchPositionData[universalTime]||{};orbitPatchPositionData[universalTime]["relativePosition"]=relativePosition}}},buildReferenceBodyPositionData:function(rawData,positionData){var referenceBodyTruePositionRegex=new RegExp(/(\w+)\[([\d\.]+)\]TruePosition$/);var rawDataKeys=Object.keys(rawData);for(var i=rawDataKeys.length-1;i>=0;i--){var key=rawDataKeys[i];if(referenceBodyTruePositionRegex.test(key)){var matchParts=referenceBodyTruePositionRegex.exec(key);var referenceBodyName=matchParts[1];var universalTime=matchParts[2];var truePosition=rawData[key];var referenceBodies=positionData["referenceBodies"]=positionData["referenceBodies"]||{};var referenceBodyObject=referenceBodies[referenceBodyName]=referenceBodies[referenceBodyName]||{};referenceBodyObject["positionData"]=referenceBodyObject["positionData"]||{};referenceBodyObject["positionData"][universalTime]=referenceBodyObject["positionData"][universalTime]||{};referenceBodyObject["positionData"][universalTime]["truePosition"]=truePosition}}},buildReferenceBodyMetadata:function(rawData,positionData){var referenceBodyTruePositionRegex=new RegExp(/(\w+)\[metadata\](\w+)$/);var rawDataKeys=Object.keys(rawData);for(var i=rawDataKeys.length-1;i>=0;i--){var key=rawDataKeys[i];if(referenceBodyTruePositionRegex.test(key)){var matchParts=referenceBodyTruePositionRegex.exec(key);var referenceBodyName=matchParts[1];var field=matchParts[2];var data=rawData[key];var referenceBodies=positionData["referenceBodies"]=positionData["referenceBodies"]||{};var referenceBodyObject=referenceBodies[referenceBodyName]=referenceBodies[referenceBodyName]||{};referenceBodyObject[field]=data}}},adjustUniversalTime:function(ut){return ut},initializeDatalink:function(){this.datalink.subscribeToData(["o.orbitPatches","t.universalTime","v.body","tar.name","tar.type","tar.o.orbitingBody","tar.o.orbitPatches","o.maneuverNodes"]);this.datalink.addReceiverFunction(this.recalculate.bind(this))}});var GroundTrackPositionDataFormatter=Class.create({initialize:function(orbitalPositionData,datalink,options){this.datalink=datalink;this.orbitalPositionData=orbitalPositionData;this.orbitalPositionData.options.onRecalculate=this.format.bind(this);this.rootReferenceBodyName=null;this.currentUniversalTime=null;this.options=Object.extend({onFormat:null,numberOfSegments:120},options)},format:function(positionData){var formattedData={vesselCurrentCoordinates:null,targetCurrentCoordinates:null,vesselSuborbitalPaths:[],vesselOrbitalPaths:[],targetSuborbitalPaths:[],targetOrbitalPaths:[],currentUniversalTime:positionData.currentUniversalTime,referenceBodyName:positionData.vesselBody,atmosphericRadius:this.datalink.getOrbitalBodyInfo(positionData.vesselBody).atmosphericRadius};this.currentUniversalTime=positionData.currentUniversalTime;this.formatVesselCurrentCoordinates(positionData,formattedData);this.formatTargetCurrentCoordinates(positionData,formattedData);this.formatVesselOrbitalPaths(positionData,formattedData);this.formatTargetOrbitalPaths(positionData,formattedData);this.options.onFormat&&this.options.onFormat(formattedData)},formatVesselCurrentCoordinates:function(positionData,formattedData){this.rootReferenceBodyName=positionData["vesselBody"];var currentPosition=positionData["vesselCurrentPosition"]["relativePosition"];var info=this.rootReferenceBody(positionData);formattedData.vesselCurrentCoordinates=this.coordinatesFromVector(currentPosition,info.radius)},formatTargetCurrentCoordinates:function(positionData,formattedData){if(this.rootReferenceBodyName!=positionData["tar.o.orbitingBody"]){return}if(positionData["tar.type"]!="Vessel"){return}var currentPosition=positionData["targetCurrentPosition"]["relativePosition"];var info=this.rootReferenceBody(positionData);formattedData.targetCurrentCoordinates=this.coordinatesFromVector(currentPosition,info.radius)},formatVesselOrbitalPaths:function(positionData,formattedData){var parentType="currentVessel";var orbitPatches=positionData["o.orbitPatches"];var pathSet=this.formatPathSet(positionData,orbitPatches,parentType,"orbitPath");formattedData.vesselOrbitalPaths=formattedData.vesselOrbitalPaths.concat(pathSet.filter(function(x){return x.type=="orbital"}));formattedData.vesselSuborbitalPaths=formattedData.vesselSuborbitalPaths.concat(pathSet.filter(function(x){return x.type=="suborbital"}));this.formatManeuverNodes(positionData,formattedData,positionData["o.maneuverNodes"],parentType)},formatTargetOrbitalPaths:function(positionData,formattedData){if(positionData["tar.type"]!="Vessel"){return}var parentType="targetVessel";var orbitPatches=positionData["tar.o.orbitPatches"];var pathSet=this.formatPathSet(positionData,orbitPatches,parentType,"orbitPath");formattedData.targetOrbitalPaths=pathSet.filter(function(x){return x.type=="orbital"});formattedData.targetSuborbitalPaths=pathSet.filter(function(x){return x.type=="suborbital"})},formatManeuverNodes:function(positionData,formattedData,maneuverNodes,parentType){for(var i=0;iorbitalClearanceDistance){var type="orbital"}else{var type="suborbital"}if(type!=currentPathType){currentPathSet=this.buildOrbitPath({type:type,parentType:parentType,pathType:pathType,points:[],altitudes:[]});pathSets.push(currentPathSet)}currentPathSet.points.push(coordinates);currentPathSet.altitudes.push({time:sortedUniversalTimes[j],altitude:length-info.radius});currentPathType=type}}return pathSets},buildOrbitPath:function(options){return{type:options.type,pathType:options.pathType,parentType:options.parentType,points:options.points,altitudes:options.altitudes}},vectorLength:function(vector){return Math.sqrt(Math.pow(vector[0],2)+Math.pow(vector[1],2)+Math.pow(vector[2],2))},coordinatesFromVector:function(vector,radius){var x=vector[0];var y=vector[1];var z=vector[2];var lat=90-Math.acos(z/radius)*180/Math.PI;var lon=(270+Math.atan2(x,y)*180/Math.PI)%360-180;if(!isNaN(lat)&&!isNaN(lon)){return[lat,lon]}else{return[]}},sortedUniversalTimes:function(positionData){var positionDataKeys=Object.keys(positionData);return positionDataKeys.map(function(x){return parseFloat(x)}).sortBy(function(x){x}).reverse()},orbitalClearanceDistance:function(positionData){return this.rootReferenceBody(positionData).radius+this.datalink.getOrbitalBodyInfo(this.rootReferenceBodyName).atmosphericRadius},rootReferenceBody:function(positionData){return positionData.referenceBodies[this.rootReferenceBodyName]}});var GroundTrack=Class.create({initialize:function(datalink,positionDataFormatter,map_id,altitudeEstimationId){this.datalink=datalink;this.positionDataFormatter=positionDataFormatter;this.map_id=map_id;this.altitudeEstimationId=altitudeEstimationId;this.vesselColor="#F5A623";this.vesselSuborbitalColor="red";this.maneuverNodeColor="#b4f489";this.targetColor="#987cf9";this.targetSuborbitalColor="#f97292";this.initializeAltitudeEstimate();this.initializeMap();this.positionDataFormatter.options.onFormat=this.render.bind(this)},render:function(formattedData){this.renderVesselCurrentCoordinates(formattedData);this.renderTargetCurrentCoordinates(formattedData);this.renderVesselOrbitPaths(formattedData);this.renderTargetOrbitPaths(formattedData);this.updateAltitudeEstimateChart(formattedData)},renderVesselCurrentCoordinates:function(formattedData){var coordinates=formattedData.vesselCurrentCoordinates;if(!coordinates){return}this.positionMap.setCoordinatesForMapObject(this.markers.vesselCoordinates,coordinates[0],coordinates[1])},renderTargetCurrentCoordinates:function(formattedData){var coordinates=formattedData.targetCurrentCoordinates;if(!coordinates){return}this.positionMap.setCoordinatesForMapObject(this.markers.targetCoordinates,coordinates[0],coordinates[1])},renderVesselOrbitPaths:function(formattedData){this.renderOrbitPaths(this.markers.vesselOrbitalPaths,formattedData.vesselOrbitalPaths,{color:this.vesselColor});this.renderOrbitPaths(this.markers.vesselSuborbitalPaths,formattedData.vesselSuborbitalPaths,{color:this.vesselSuborbitalColor})},renderTargetOrbitPaths:function(formattedData){this.renderOrbitPaths(this.markers.targetOrbitalPaths,formattedData.targetOrbitalPaths,{color:this.targetColor});this.renderOrbitPaths(this.markers.targetSuborbitalPaths,formattedData.targetSuborbitalPaths,{color:this.targetSuborbitalColor})},renderOrbitPaths:function(markers,orbitPaths,lineOptions){for(var i=markers.length-1;i>=0;i--){markers[i].setLatLngs([])}for(var i=0;i0){var startTime=parseFloat(sortedUniversalTimes.first());var endTime=parseFloat(sortedUniversalTimes.last());var totalDelta=sortedUniversalTimes.length;var intervalPeriod=Math.floor(totalDelta/maxLabelSections)}for(var i=0;i0){var startTime=parseFloat(sortedUniversalTimes[0])}for(var i=0;ia?-1:0>16&255)/255;this.g=(a>>8&255)/255;this.b=(a&255)/255;return this},setRGB:function(a,b,c){this.r=a;this.g=b;this.b=c;return this},setHSL:function(){function a(a,c,d){0>d&&(d+=1);1d?c:d<2/3?a+6*(c-a)*(2/3-d):a}return function(b,c,d){b=THREE.Math.euclideanModulo(b,1);c=THREE.Math.clamp(c,0,1);d=THREE.Math.clamp(d,0,1);0===c?this.r=this.g=this.b=d:(c=.5>=d?d*(1+c):d+c-d*c,d=2*d-c,this.r=a(d,c,b+1/3),this.g=a(d,c,b),this.b=a(d,c,b-1/3));return this}}(),setStyle:function(a){function b(b){void 0!==b&&1>parseFloat(b)&&console.warn("THREE.Color: Alpha component of "+a+" will be ignored.")}var c;if(c=/^((?:rgb|hsl)a?)\(\s*([^\)]*)\)/.exec(a)){var d=c[2];switch(c[1]){case"rgb":case"rgba":if(c=/^(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(d))return this.r=Math.min(255,parseInt(c[1],10))/255,this.g=Math.min(255,parseInt(c[2],10))/255,this.b=Math.min(255,parseInt(c[3],10))/255,b(c[5]),this;if(c=/^(\d+)\%\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(d))return this.r=Math.min(100,parseInt(c[1],10))/100,this.g=Math.min(100,parseInt(c[2],10))/100,this.b=Math.min(100,parseInt(c[3],10))/100,b(c[5]),this;break;case"hsl":case"hsla":if(c=/^([0-9]*\.?[0-9]+)\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(d)){var d=parseFloat(c[1])/360,e=parseInt(c[2],10)/100,f=parseInt(c[3],10)/100;b(c[5]);return this.setHSL(d,e,f)}}}else if(c=/^\#([A-Fa-f0-9]+)$/.exec(a)){c=c[1];d=c.length;if(3===d)return this.r=parseInt(c.charAt(0)+c.charAt(0),16)/255,this.g=parseInt(c.charAt(1)+c.charAt(1),16)/255,this.b=parseInt(c.charAt(2)+c.charAt(2),16)/255,this;if(6===d)return this.r=parseInt(c.charAt(0)+c.charAt(1),16)/255,this.g=parseInt(c.charAt(2)+c.charAt(3),16)/255,this.b=parseInt(c.charAt(4)+c.charAt(5),16)/255,this}a&&0=h?k/(e+f):k/(2-e-f);switch(e){case b:g=(c-d)/k+(cf&&c>b?(c=2*Math.sqrt(1+c-f-b),this._w=(k-g)/c,this._x=.25*c,this._y=(a+e)/c,this._z=(d+h)/c):f>b?(c=2*Math.sqrt(1+f-c-b),this._w=(d-h)/c,this._x=(a+e)/c,this._y=.25*c,this._z=(g+k)/c):(c=2*Math.sqrt(1+b-c-f),this._w=(e-a)/c,this._x=(d+h)/c,this._y=(g+k)/c,this._z=.25*c);this.onChangeCallback();return this},setFromUnitVectors:function(){var a,b;return function(c,d){void 0===a&&(a=new THREE.Vector3);b=c.dot(d)+1;1e-6>b?(b=0,Math.abs(c.x)>Math.abs(c.z)?a.set(-c.y,c.x,0):a.set(0,-c.z,c.y)):a.crossVectors(c,d);this._x=a.x;this._y=a.y;this._z=a.z;this._w=b;this.normalize();return this}}(),inverse:function(){this.conjugate().normalize();return this},conjugate:function(){this._x*=-1;this._y*=-1;this._z*=-1;this.onChangeCallback();return this},dot:function(a){return this._x*a._x+this._y*a._y+this._z*a._z+this._w*a._w},lengthSq:function(){return this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w},length:function(){return Math.sqrt(this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w)},normalize:function(){var a=this.length();0===a?(this._z=this._y=this._x=0,this._w=1):(a=1/a,this._x*=a,this._y*=a,this._z*=a,this._w*=a);this.onChangeCallback();return this},multiply:function(a,b){return void 0!==b?(console.warn("THREE.Quaternion: .multiply() now only accepts one argument. Use .multiplyQuaternions( a, b ) instead."),this.multiplyQuaternions(a,b)):this.multiplyQuaternions(this,a)},multiplyQuaternions:function(a,b){var c=a._x,d=a._y,e=a._z,f=a._w,g=b._x,h=b._y,k=b._z,l=b._w; +Math.sinh = Math.sinh || function(x) { + return (Math.exp(x) - Math.exp(-x)) / 2; +}; -this._x=c*l+f*g+d*k-e*h;this._y=d*l+f*h+e*g-c*k;this._z=e*l+f*k+c*h-d*g;this._w=f*l-c*g-d*h-e*k;this.onChangeCallback();return this},slerp:function(a,b){if(0===b)return this;if(1===b)return this.copy(a);var c=this._x,d=this._y,e=this._z,f=this._w,g=f*a._w+c*a._x+d*a._y+e*a._z;0>g?(this._w=-a._w,this._x=-a._x,this._y=-a._y,this._z=-a._z,g=-g):this.copy(a);if(1<=g)return this._w=f,this._x=c,this._y=d,this._z=e,this;var h=Math.sqrt(1-g*g);if(.001>Math.abs(h))return this._w=.5*(f+this._w),this._x=.5*(c+this._x),this._y=.5*(d+this._y),this._z=.5*(e+this._z),this;var k=Math.atan2(h,g),g=Math.sin((1-b)*k)/h,h=Math.sin(b*k)/h;this._w=f*g+this._w*h;this._x=c*g+this._x*h;this._y=d*g+this._y*h;this._z=e*g+this._z*h;this.onChangeCallback();return this},equals:function(a){return a._x===this._x&&a._y===this._y&&a._z===this._z&&a._w===this._w},fromArray:function(a,b){void 0===b&&(b=0);this._x=a[b];this._y=a[b+1];this._z=a[b+2];this._w=a[b+3];this.onChangeCallback();return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);a[b]=this._x;a[b+1]=this._y;a[b+2]=this._z;a[b+3]=this._w;return a},onChange:function(a){this.onChangeCallback=a;return this},onChangeCallback:function(){}};Object.assign(THREE.Quaternion,{slerp:function(a,b,c,d){return c.copy(a).slerp(b,d)},slerpFlat:function(a,b,c,d,e,f,g){var h=c[d+0],k=c[d+1],l=c[d+2];c=c[d+3];d=e[f+0];var p=e[f+1],n=e[f+2];e=e[f+3];if(c!==e||h!==d||k!==p||l!==n){f=1-g;var m=h*d+k*p+l*n+c*e,q=0<=m?1:-1,u=1-m*m;u>Number.EPSILON&&(u=Math.sqrt(u),m=Math.atan2(u,m*q),f=Math.sin(f*m)/u,g=Math.sin(g*m)/u);q*=g;h=h*f+d*q;k=k*f+p*q;l=l*f+n*q;c=c*f+e*q;f===1-g&&(g=1/Math.sqrt(h*h+k*k+l*l+c*c),h*=g,k*=g,l*=g,c*=g)}a[b]=h;a[b+1]=k;a[b+2]=l;a[b+3]=c}});THREE.Vector2=function(a,b){this.x=a||0;this.y=b||0};THREE.Vector2.prototype={constructor:THREE.Vector2,get width(){return this.x},set width(a){this.x=a},get height(){return this.y},set height(a){this.y=a},set:function(a,b){this.x=a;this.y=b;return this},setScalar:function(a){this.y=this.x=a;return this},setX:function(a){this.x=a;return this},setY:function(a){this.y=a;return this},setComponent:function(a,b){switch(a){case 0:this.x=b;break;case 1:this.y=b;break;default:throw Error("index is out of range: "+a)}},getComponent:function(a){switch(a){case 0:return this.x;case 1:return this.y;default:throw Error("index is out of range: "+a)}},clone:function(){return new this.constructor(this.x,this.y)},copy:function(a){this.x=a.x;this.y=a.y;return this},add:function(a,b){if(void 0!==b)return console.warn("THREE.Vector2: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(a,b);this.x+=a.x;this.y+=a.y;return this},addScalar:function(a){this.x+=a;this.y+=a;return this},addVectors:function(a,b){this.x=a.x+b.x;this.y=a.y+b.y;return this},addScaledVector:function(a,b){this.x+=a.x*b;this.y+=a.y*b;return this},sub:function(a,b){if(void 0!==b)return console.warn("THREE.Vector2: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(a,b);this.x-=a.x;this.y-=a.y;return this},subScalar:function(a){this.x-=a;this.y-=a;return this},subVectors:function(a,b){this.x=a.x-b.x;this.y=a.y-b.y;return this},multiply:function(a){this.x*=a.x;this.y*=a.y;return this},multiplyScalar:function(a){isFinite(a)?(this.x*=a,this.y*=a):this.y=this.x=0;return this},divide:function(a){this.x/=a.x;this.y/=a.y;return this},divideScalar:function(a){return this.multiplyScalar(1/a)},min:function(a){this.x=Math.min(this.x,a.x);this.y=Math.min(this.y,a.y);return this},max:function(a){this.x=Math.max(this.x,a.x);this.y=Math.max(this.y,a.y);return this},clamp:function(a,b){this.x=Math.max(a.x,Math.min(b.x,this.x));this.y=Math.max(a.y,Math.min(b.y,this.y));return this},clampScalar:function(){var a,b;return function(c,d){void 0===a&&(a=new THREE.Vector2,b=new THREE.Vector2);a.set(c,c);b.set(d,d);return this.clamp(a,b)}}(),clampLength:function(a,b){var c=this.length();this.multiplyScalar(Math.max(a,Math.min(b,c))/c);return this},floor:function(){this.x=Math.floor(this.x);this.y=Math.floor(this.y);return this},ceil:function(){this.x=Math.ceil(this.x);this.y=Math.ceil(this.y);return this},round:function(){this.x=Math.round(this.x);this.y=Math.round(this.y);return this},roundToZero:function(){this.x=0>this.x?Math.ceil(this.x):Math.floor(this.x);this.y=0>this.y?Math.ceil(this.y):Math.floor(this.y);return this},negate:function(){this.x=-this.x;this.y=-this.y;return this},dot:function(a){return this.x*a.x+this.y*a.y},lengthSq:function(){return this.x*this.x+this.y*this.y},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y)},lengthManhattan:function(){return Math.abs(this.x)+Math.abs(this.y)},normalize:function(){return this.divideScalar(this.length())},angle:function(){var a=Math.atan2(this.y,this.x);0>a&&(a+=2*Math.PI);return a},distanceTo:function(a){return Math.sqrt(this.distanceToSquared(a))},distanceToSquared:function(a){var b=this.x-a.x;a=this.y-a.y;return b*b+a*a},setLength:function(a){return this.multiplyScalar(a/this.length())},lerp:function(a,b){this.x+=(a.x-this.x)*b;this.y+=(a.y-this.y)*b;return this},lerpVectors:function(a,b,c){this.subVectors(b,a).multiplyScalar(c).add(a);return this},equals:function(a){return a.x===this.x&&a.y===this.y},fromArray:function(a,b){void 0===b&&(b=0);this.x=a[b];this.y=a[b+1];return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);a[b]=this.x;a[b+1]=this.y;return a},fromAttribute:function(a,b,c){void 0===c&&(c=0);b=b*a.itemSize+c;this.x=a.array[b];this.y=a.array[b+1];return this},rotateAround:function(a,b){var c=Math.cos(b),d=Math.sin(b),e=this.x-a.x,f=this.y-a.y;this.x=e*c-f*d+a.x;this.y=e*d+f*c+a.y;return this}};THREE.Vector3=function(a,b,c){this.x=a||0;this.y=b||0;this.z=c||0};THREE.Vector3.prototype={constructor:THREE.Vector3,set:function(a,b,c){this.x=a;this.y=b;this.z=c;return this},setScalar:function(a){this.z=this.y=this.x=a;return this},setX:function(a){this.x=a;return this},setY:function(a){this.y=a;return this},setZ:function(a){this.z=a;return this},setComponent:function(a,b){switch(a){case 0:this.x=b;break;case 1:this.y=b;break;case 2:this.z=b;break;default:throw Error("index is out of range: "+a)}},getComponent:function(a){switch(a){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw Error("index is out of range: "+a)}},clone:function(){return new this.constructor(this.x,this.y,this.z)},copy:function(a){this.x=a.x;this.y=a.y;this.z=a.z;return this},add:function(a,b){if(void 0!==b)return console.warn("THREE.Vector3: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(a,b);this.x+=a.x;this.y+=a.y;this.z+=a.z;return this},addScalar:function(a){this.x+=a;this.y+=a;this.z+=a;return this},addVectors:function(a,b){this.x=a.x+b.x;this.y=a.y+b.y;this.z=a.z+b.z;return this},addScaledVector:function(a,b){this.x+=a.x*b;this.y+=a.y*b;this.z+=a.z*b;return this},sub:function(a,b){if(void 0!==b)return console.warn("THREE.Vector3: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(a,b);this.x-=a.x;this.y-=a.y;this.z-=a.z;return this},subScalar:function(a){this.x-=a;this.y-=a;this.z-=a;return this},subVectors:function(a,b){this.x=a.x-b.x;this.y=a.y-b.y;this.z=a.z-b.z;return this},multiply:function(a,b){if(void 0!==b)return console.warn("THREE.Vector3: .multiply() now only accepts one argument. Use .multiplyVectors( a, b ) instead."),this.multiplyVectors(a,b);this.x*=a.x;this.y*=a.y;this.z*=a.z;return this},multiplyScalar:function(a){isFinite(a)?(this.x*=a,this.y*=a,this.z*=a):this.z=this.y=this.x=0;return this},multiplyVectors:function(a,b){this.x=a.x*b.x;this.y=a.y*b.y;this.z=a.z*b.z;return this},applyEuler:function(){var a;return function(b){!1===b instanceof THREE.Euler&&console.error("THREE.Vector3: .applyEuler() now expects an Euler rotation rather than a Vector3 and order.");void 0===a&&(a=new THREE.Quaternion);this.applyQuaternion(a.setFromEuler(b));return this}}(),applyAxisAngle:function(){var a;return function(b,c){void 0===a&&(a=new THREE.Quaternion);this.applyQuaternion(a.setFromAxisAngle(b,c));return this}}(),applyMatrix3:function(a){var b=this.x,c=this.y,d=this.z;a=a.elements;this.x=a[0]*b+a[3]*c+a[6]*d;this.y=a[1]*b+a[4]*c+a[7]*d;this.z=a[2]*b+a[5]*c+a[8]*d;return this},applyMatrix4:function(a){var b=this.x,c=this.y,d=this.z;a=a.elements;this.x=a[0]*b+a[4]*c+a[8]*d+a[12];this.y=a[1]*b+a[5]*c+a[9]*d+a[13];this.z=a[2]*b+a[6]*c+a[10]*d+a[14];return this},applyProjection:function(a){var b=this.x,c=this.y,d=this.z;a=a.elements;var e=1/(a[3]*b+a[7]*c+a[11]*d+a[15]);this.x=(a[0]*b+a[4]*c+a[8]*d+a[12])*e;this.y=(a[1]*b+a[5]*c+a[9]*d+a[13])*e;this.z=(a[2]*b+a[6]*c+a[10]*d+a[14])*e;return this},applyQuaternion:function(a){var b=this.x,c=this.y,d=this.z,e=a.x,f=a.y,g=a.z;a=a.w;var h=a*b+f*d-g*c,k=a*c+g*b-e*d,l=a*d+e*c-f*b,b=-e*b-f*c-g*d;this.x=h*a+b*-e+k*-g-l*-f;this.y=k*a+b*-f+l*-e-h*-g;this.z=l*a+b*-g+h*-f-k*-e;return this},project:function(){var a;return function(b){void 0===a&&(a=new THREE.Matrix4);a.multiplyMatrices(b.projectionMatrix,a.getInverse(b.matrixWorld));return this.applyProjection(a)}}(),unproject:function(){var a;return function(b){void 0===a&&(a=new THREE.Matrix4);a.multiplyMatrices(b.matrixWorld,a.getInverse(b.projectionMatrix));return this.applyProjection(a)}}(),transformDirection:function(a){var b=this.x,c=this.y,d=this.z;a=a.elements;this.x=a[0]*b+a[4]*c+a[8]*d;this.y=a[1]*b+a[5]*c+a[9]*d;this.z=a[2]*b+a[6]*c+a[10]*d;this.normalize();return this},divide:function(a){this.x/=a.x;this.y/=a.y;this.z/=a.z;return this},divideScalar:function(a){return this.multiplyScalar(1/a)},min:function(a){this.x=Math.min(this.x,a.x);this.y=Math.min(this.y,a.y);this.z=Math.min(this.z,a.z);return this},max:function(a){this.x=Math.max(this.x,a.x);this.y=Math.max(this.y,a.y);this.z=Math.max(this.z,a.z);return this},clamp:function(a,b){this.x=Math.max(a.x,Math.min(b.x,this.x));this.y=Math.max(a.y,Math.min(b.y,this.y));this.z=Math.max(a.z,Math.min(b.z,this.z));return this},clampScalar:function(){var a,b;return function(c,d){void 0===a&&(a=new THREE.Vector3,b=new THREE.Vector3);a.set(c,c,c);b.set(d,d,d);return this.clamp(a,b)}}(),clampLength:function(a,b){var c=this.length();this.multiplyScalar(Math.max(a,Math.min(b,c))/c);return this},floor:function(){this.x=Math.floor(this.x);this.y=Math.floor(this.y);this.z=Math.floor(this.z);return this},ceil:function(){this.x=Math.ceil(this.x);this.y=Math.ceil(this.y);this.z=Math.ceil(this.z);return this},round:function(){this.x=Math.round(this.x);this.y=Math.round(this.y);this.z=Math.round(this.z);return this},roundToZero:function(){this.x=0>this.x?Math.ceil(this.x):Math.floor(this.x);this.y=0>this.y?Math.ceil(this.y):Math.floor(this.y);this.z=0>this.z?Math.ceil(this.z):Math.floor(this.z);return this},negate:function(){this.x=-this.x;this.y=-this.y;this.z=-this.z;return this},dot:function(a){return this.x*a.x+this.y*a.y+this.z*a.z},lengthSq:function(){return this.x*this.x+this.y*this.y+this.z*this.z},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)},lengthManhattan:function(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)},normalize:function(){return this.divideScalar(this.length())},setLength:function(a){return this.multiplyScalar(a/this.length())},lerp:function(a,b){this.x+=(a.x-this.x)*b;this.y+=(a.y-this.y)*b;this.z+=(a.z-this.z)*b;return this},lerpVectors:function(a,b,c){this.subVectors(b,a).multiplyScalar(c).add(a);return this},cross:function(a,b){if(void 0!==b)return console.warn("THREE.Vector3: .cross() now only accepts one argument. Use .crossVectors( a, b ) instead."),this.crossVectors(a,b);var c=this.x,d=this.y,e=this.z;this.x=d*a.z-e*a.y;this.y=e*a.x-c*a.z;this.z=c*a.y-d*a.x;return this},crossVectors:function(a,b){var c=a.x,d=a.y,e=a.z,f=b.x,g=b.y,h=b.z;this.x=d*h-e*g;this.y=e*f-c*h;this.z=c*g-d*f;return this},projectOnVector:function(){var a,b;return function(c){void 0===a&&(a=new THREE.Vector3);a.copy(c).normalize();b=this.dot(a);return this.copy(a).multiplyScalar(b)}}(),projectOnPlane:function(){var a;return function(b){void 0===a&&(a=new THREE.Vector3);a.copy(this).projectOnVector(b);return this.sub(a)}}(),reflect:function(){var a;return function(b){void 0===a&&(a=new THREE.Vector3);return this.sub(a.copy(b).multiplyScalar(2*this.dot(b)))}}(),angleTo:function(a){a=this.dot(a)/Math.sqrt(this.lengthSq()*a.lengthSq());return Math.acos(THREE.Math.clamp(a,-1,1))},distanceTo:function(a){return Math.sqrt(this.distanceToSquared(a))},distanceToSquared:function(a){var b=this.x-a.x,c=this.y-a.y;a=this.z-a.z;return b*b+c*c+a*a},setFromSpherical:function(a){var b=Math.sin(a.phi)*a.radius;this.x=b*Math.sin(a.theta);this.y=Math.cos(a.phi)*a.radius;this.z=b*Math.cos(a.theta);return this},setFromMatrixPosition:function(a){return this.setFromMatrixColumn(a,3)},setFromMatrixScale:function(a){var b=this.setFromMatrixColumn(a,0).length(),c=this.setFromMatrixColumn(a,1).length();a=this.setFromMatrixColumn(a,2).length();this.x=b;this.y=c;this.z=a;return this},setFromMatrixColumn:function(a,b){"number"===typeof a&&(console.warn("THREE.Vector3: setFromMatrixColumn now expects ( matrix, index )."),b=a=b);return this.fromArray(a.elements,4*b)},equals:function(a){return a.x===this.x&&a.y===this.y&&a.z===this.z},fromArray:function(a,b){void 0===b&&(b=0);this.x=a[b];this.y=a[b+1];this.z=a[b+2];return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);a[b]=this.x;a[b+1]=this.y;a[b+2]=this.z;return a},fromAttribute:function(a,b,c){void 0===c&&(c=0);b=b*a.itemSize+c;this.x=a.array[b];this.y=a.array[b+1];this.z=a.array[b+2];return this}};THREE.Vector4=function(a,b,c,d){this.x=a||0;this.y=b||0;this.z=c||0;this.w=void 0!==d?d:1};THREE.Vector4.prototype={constructor:THREE.Vector4,set:function(a,b,c,d){this.x=a;this.y=b;this.z=c;this.w=d;return this},setScalar:function(a){this.w=this.z=this.y=this.x=a;return this},setX:function(a){this.x=a;return this},setY:function(a){this.y=a;return this},setZ:function(a){this.z=a;return this},setW:function(a){this.w=a;return this},setComponent:function(a,b){switch(a){case 0:this.x=b;break;case 1:this.y=b;break;case 2:this.z=b;break;case 3:this.w=b;break;default:throw Error("index is out of range: "+a)}},getComponent:function(a){switch(a){case 0:return this.x;case 1:return this.y;case 2:return this.z;case 3:return this.w;default:throw Error("index is out of range: "+a)}},clone:function(){return new this.constructor(this.x,this.y,this.z,this.w)},copy:function(a){this.x=a.x;this.y=a.y;this.z=a.z;this.w=void 0!==a.w?a.w:1;return this},add:function(a,b){if(void 0!==b)return console.warn("THREE.Vector4: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(a,b);this.x+=a.x;this.y+=a.y;this.z+=a.z;this.w+=a.w;return this},addScalar:function(a){this.x+=a;this.y+=a;this.z+=a;this.w+=a;return this},addVectors:function(a,b){this.x=a.x+b.x;this.y=a.y+b.y;this.z=a.z+b.z;this.w=a.w+b.w;return this},addScaledVector:function(a,b){this.x+=a.x*b;this.y+=a.y*b;this.z+=a.z*b;this.w+=a.w*b;return this},sub:function(a,b){if(void 0!==b)return console.warn("THREE.Vector4: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(a,b);this.x-=a.x;this.y-=a.y;this.z-=a.z;this.w-=a.w;return this},subScalar:function(a){this.x-=a;this.y-=a;this.z-=a;this.w-=a;return this},subVectors:function(a,b){this.x=a.x-b.x;this.y=a.y-b.y;this.z=a.z-b.z;this.w=a.w-b.w;return this},multiplyScalar:function(a){isFinite(a)?(this.x*=a,this.y*=a,this.z*=a,this.w*=a):this.w=this.z=this.y=this.x=0;return this},applyMatrix4:function(a){var b=this.x,c=this.y,d=this.z,e=this.w;a=a.elements;this.x=a[0]*b+a[4]*c+a[8]*d+a[12]*e;this.y=a[1]*b+a[5]*c+a[9]*d+a[13]*e;this.z=a[2]*b+a[6]*c+a[10]*d+a[14]*e;this.w=a[3]*b+a[7]*c+a[11]*d+a[15]*e;return this},divideScalar:function(a){return this.multiplyScalar(1/a)},setAxisAngleFromQuaternion:function(a){this.w=2*Math.acos(a.w);var b=Math.sqrt(1-a.w*a.w);1e-4>b?(this.x=1,this.z=this.y=0):(this.x=a.x/b,this.y=a.y/b,this.z=a.z/b);return this},setAxisAngleFromRotationMatrix:function(a){var b,c,d;a=a.elements;var e=a[0];d=a[4];var f=a[8],g=a[1],h=a[5],k=a[9];c=a[2];b=a[6];var l=a[10];if(.01>Math.abs(d-g)&&.01>Math.abs(f-c)&&.01>Math.abs(k-b)){if(.1>Math.abs(d+g)&&.1>Math.abs(f+c)&&.1>Math.abs(k+b)&&.1>Math.abs(e+h+l-3))return this.set(1,0,0,0),this;a=Math.PI;e=(e+1)/2;h=(h+1)/2;l=(l+1)/2;d=(d+g)/4;f=(f+c)/4;k=(k+b)/4;e>h&&e>l?.01>e?(b=0,d=c=.707106781):(b=Math.sqrt(e),c=d/b,d=f/b):h>l?.01>h?(b=.707106781,c=0,d=.707106781):(c=Math.sqrt(h),b=d/c,d=k/c):.01>l?(c=b=.707106781,d=0):(d=Math.sqrt(l),b=f/d,c=k/d);this.set(b,c,d,a);return this}a=Math.sqrt((b-k)*(b-k)+(f-c)*(f-c)+(g-d)*(g-d));.001>Math.abs(a)&&(a=1);this.x=(b-k)/a;this.y=(f-c)/a;this.z=(g-d)/a;this.w=Math.acos((e+h+l-1)/2);return this},min:function(a){this.x=Math.min(this.x,a.x);this.y=Math.min(this.y,a.y);this.z=Math.min(this.z,a.z);this.w=Math.min(this.w,a.w);return this},max:function(a){this.x=Math.max(this.x,a.x);this.y=Math.max(this.y,a.y);this.z=Math.max(this.z,a.z);this.w=Math.max(this.w,a.w);return this},clamp:function(a,b){this.x=Math.max(a.x,Math.min(b.x,this.x));this.y=Math.max(a.y,Math.min(b.y,this.y));this.z=Math.max(a.z,Math.min(b.z,this.z));this.w=Math.max(a.w,Math.min(b.w,this.w));return this},clampScalar:function(){var a,b;return function(c,d){void 0===a&&(a=new THREE.Vector4,b=new THREE.Vector4);a.set(c,c,c,c);b.set(d,d,d,d);return this.clamp(a,b)}}(),floor:function(){this.x=Math.floor(this.x);this.y=Math.floor(this.y);this.z=Math.floor(this.z);this.w=Math.floor(this.w);return this},ceil:function(){this.x=Math.ceil(this.x);this.y=Math.ceil(this.y);this.z=Math.ceil(this.z);this.w=Math.ceil(this.w);return this},round:function(){this.x=Math.round(this.x);this.y=Math.round(this.y);this.z=Math.round(this.z);this.w=Math.round(this.w);return this},roundToZero:function(){this.x=0>this.x?Math.ceil(this.x):Math.floor(this.x);this.y=0>this.y?Math.ceil(this.y):Math.floor(this.y);this.z=0>this.z?Math.ceil(this.z):Math.floor(this.z);this.w=0>this.w?Math.ceil(this.w):Math.floor(this.w);return this},negate:function(){this.x=-this.x;this.y=-this.y;this.z=-this.z;this.w=-this.w;return this},dot:function(a){return this.x*a.x+this.y*a.y+this.z*a.z+this.w*a.w},lengthSq:function(){return this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w)},lengthManhattan:function(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)+Math.abs(this.w)},normalize:function(){return this.divideScalar(this.length())},setLength:function(a){return this.multiplyScalar(a/this.length())},lerp:function(a,b){this.x+=(a.x-this.x)*b;this.y+=(a.y-this.y)*b;this.z+=(a.z-this.z)*b;this.w+=(a.w-this.w)*b;return this},lerpVectors:function(a,b,c){this.subVectors(b,a).multiplyScalar(c).add(a);return this},equals:function(a){return a.x===this.x&&a.y===this.y&&a.z===this.z&&a.w===this.w},fromArray:function(a,b){void 0===b&&(b=0);this.x=a[b];this.y=a[b+1];this.z=a[b+2];this.w=a[b+3];return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);a[b]=this.x;a[b+1]=this.y;a[b+2]=this.z;a[b+3]=this.w;return a},fromAttribute:function(a,b,c){void 0===c&&(c=0);b=b*a.itemSize+c;this.x=a.array[b];this.y=a.array[b+1];this.z=a.array[b+2];this.w=a.array[b+3];return this}};THREE.Euler=function(a,b,c,d){this._x=a||0;this._y=b||0;this._z=c||0;this._order=d||THREE.Euler.DefaultOrder};THREE.Euler.RotationOrders="XYZ YZX ZXY XZY YXZ ZYX".split(" ");THREE.Euler.DefaultOrder="XYZ";THREE.Euler.prototype={constructor:THREE.Euler,get x(){return this._x},set x(a){this._x=a;this.onChangeCallback()},get y(){return this._y},set y(a){this._y=a;this.onChangeCallback()},get z(){return this._z},set z(a){this._z=a;this.onChangeCallback()},get order(){return this._order},set order(a){this._order=a;this.onChangeCallback()},set:function(a,b,c,d){this._x=a;this._y=b;this._z=c;this._order=d||this._order;this.onChangeCallback();return this},clone:function(){return new this.constructor(this._x,this._y,this._z,this._order)},copy:function(a){this._x=a._x;this._y=a._y;this._z=a._z;this._order=a._order;this.onChangeCallback();return this},setFromRotationMatrix:function(a,b,c){var d=THREE.Math.clamp,e=a.elements;a=e[0];var f=e[4],g=e[8],h=e[1],k=e[5],l=e[9],p=e[2],n=e[6],e=e[10];b=b||this._order;"XYZ"===b?(this._y=Math.asin(d(g,-1,1)),.99999>Math.abs(g)?(this._x=Math.atan2(-l,e),this._z=Math.atan2(-f,a)):(this._x=Math.atan2(n,k),this._z=0)):"YXZ"===b?(this._x=Math.asin(-d(l,-1,1)),.99999>Math.abs(l)?(this._y=Math.atan2(g,e),this._z=Math.atan2(h,k)):(this._y=Math.atan2(-p,a),this._z=0)):"ZXY"===b?(this._x=Math.asin(d(n,-1,1)),.99999>Math.abs(n)?(this._y=Math.atan2(-p,e),this._z=Math.atan2(-f,k)):(this._y=0,this._z=Math.atan2(h,a))):"ZYX"===b?(this._y=Math.asin(-d(p,-1,1)),.99999>Math.abs(p)?(this._x=Math.atan2(n,e),this._z=Math.atan2(h,a)):(this._x=0,this._z=Math.atan2(-f,k))):"YZX"===b?(this._z=Math.asin(d(h,-1,1)),.99999>Math.abs(h)?(this._x=Math.atan2(-l,k),this._y=Math.atan2(-p,a)):(this._x=0,this._y=Math.atan2(g,e))):"XZY"===b?(this._z=Math.asin(-d(f,-1,1)),.99999>Math.abs(f)?(this._x=Math.atan2(n,k),this._y=Math.atan2(g,a)):(this._x=Math.atan2(-l,e),this._y=0)):console.warn("THREE.Euler: .setFromRotationMatrix() given unsupported order: "+b);this._order=b;if(!1!==c)this.onChangeCallback();return this},setFromQuaternion:function(){var a;return function(b,c,d){void 0===a&&(a=new THREE.Matrix4);a.makeRotationFromQuaternion(b);this.setFromRotationMatrix(a,c,d);return this}}(),setFromVector3:function(a,b){return this.set(a.x,a.y,a.z,b||this._order)},reorder:function(){var a=new THREE.Quaternion;return function(b){a.setFromEuler(this);this.setFromQuaternion(a,b)}}(),equals:function(a){return a._x===this._x&&a._y===this._y&&a._z===this._z&&a._order===this._order},fromArray:function(a){this._x=a[0];this._y=a[1];this._z=a[2];void 0!==a[3]&&(this._order=a[3]);this.onChangeCallback();return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);a[b]=this._x;a[b+1]=this._y;a[b+2]=this._z;a[b+3]=this._order;return a},toVector3:function(a){return a?a.set(this._x,this._y,this._z):new THREE.Vector3(this._x,this._y,this._z)},onChange:function(a){this.onChangeCallback=a;return this},onChangeCallback:function(){}};THREE.Line3=function(a,b){this.start=void 0!==a?a:new THREE.Vector3;this.end=void 0!==b?b:new THREE.Vector3};THREE.Line3.prototype={constructor:THREE.Line3,set:function(a,b){this.start.copy(a);this.end.copy(b);return this},clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.start.copy(a.start);this.end.copy(a.end);return this},center:function(a){return(a||new THREE.Vector3).addVectors(this.start,this.end).multiplyScalar(.5)},delta:function(a){return(a||new THREE.Vector3).subVectors(this.end,this.start)},distanceSq:function(){return this.start.distanceToSquared(this.end)},distance:function(){return this.start.distanceTo(this.end)},at:function(a,b){var c=b||new THREE.Vector3;return this.delta(c).multiplyScalar(a).add(this.start)},closestPointToPointParameter:function(){var a=new THREE.Vector3,b=new THREE.Vector3;return function(c,d){a.subVectors(c,this.start);b.subVectors(this.end,this.start);var e=b.dot(b),e=b.dot(a)/e;d&&(e=THREE.Math.clamp(e,0,1));return e}}(),closestPointToPoint:function(a,b,c){a=this.closestPointToPointParameter(a,b);c=c||new THREE.Vector3;return this.delta(c).multiplyScalar(a).add(this.start)},applyMatrix4:function(a){this.start.applyMatrix4(a);this.end.applyMatrix4(a);return this},equals:function(a){return a.start.equals(this.start)&&a.end.equals(this.end)}};THREE.Box2=function(a,b){this.min=void 0!==a?a:new THREE.Vector2(Infinity,Infinity);this.max=void 0!==b?b:new THREE.Vector2(-Infinity,-Infinity)};THREE.Box2.prototype={constructor:THREE.Box2,set:function(a,b){this.min.copy(a);this.max.copy(b);return this},setFromPoints:function(a){this.makeEmpty();for(var b=0,c=a.length;bthis.max.x||a.ythis.max.y?!1:!0},containsBox:function(a){return this.min.x<=a.min.x&&a.max.x<=this.max.x&&this.min.y<=a.min.y&&a.max.y<=this.max.y?!0:!1},getParameter:function(a,b){return(b||new THREE.Vector2).set((a.x-this.min.x)/(this.max.x-this.min.x),(a.y-this.min.y)/(this.max.y-this.min.y))},intersectsBox:function(a){return a.max.xthis.max.x||a.max.ythis.max.y?!1:!0},clampPoint:function(a,b){return(b||new THREE.Vector2).copy(a).clamp(this.min,this.max)},distanceToPoint:function(){var a=new THREE.Vector2;return function(b){return a.copy(b).clamp(this.min,this.max).sub(b).length()}}(),intersect:function(a){this.min.max(a.min);this.max.min(a.max);return this},union:function(a){this.min.min(a.min);this.max.max(a.max);return this},translate:function(a){this.min.add(a);this.max.add(a);return this},equals:function(a){return a.min.equals(this.min)&&a.max.equals(this.max)}};THREE.Box3=function(a,b){this.min=void 0!==a?a:new THREE.Vector3(Infinity,Infinity,Infinity);this.max=void 0!==b?b:new THREE.Vector3(-Infinity,-Infinity,-Infinity)};THREE.Box3.prototype={constructor:THREE.Box3,set:function(a,b){this.min.copy(a);this.max.copy(b);return this},setFromArray:function(a){this.makeEmpty();for(var b=Infinity,c=Infinity,d=Infinity,e=-Infinity,f=-Infinity,g=-Infinity,h=0,k=a.length;he&&(e=l);p>f&&(f=p);n>g&&(g=n)}this.min.set(b,c,d);this.max.set(e,f,g)},setFromPoints:function(a){this.makeEmpty();for(var b=0,c=a.length;bthis.max.x||a.ythis.max.y||a.zthis.max.z?!1:!0},containsBox:function(a){return this.min.x<=a.min.x&&a.max.x<=this.max.x&&this.min.y<=a.min.y&&a.max.y<=this.max.y&&this.min.z<=a.min.z&&a.max.z<=this.max.z?!0:!1},getParameter:function(a,b){return(b||new THREE.Vector3).set((a.x-this.min.x)/(this.max.x-this.min.x),(a.y-this.min.y)/(this.max.y-this.min.y),(a.z-this.min.z)/(this.max.z-this.min.z))},intersectsBox:function(a){return a.max.xthis.max.x||a.max.ythis.max.y||a.max.zthis.max.z?!1:!0},intersectsSphere:function(){var a;return function(b){void 0===a&&(a=new THREE.Vector3);this.clampPoint(b.center,a);return a.distanceToSquared(b.center)<=b.radius*b.radius}}(),intersectsPlane:function(a){var b,c;0=a.constant},clampPoint:function(a,b){return(b||new THREE.Vector3).copy(a).clamp(this.min,this.max)},distanceToPoint:function(){var a=new THREE.Vector3;return function(b){return a.copy(b).clamp(this.min,this.max).sub(b).length()}}(),getBoundingSphere:function(){var a=new THREE.Vector3;return function(b){b=b||new THREE.Sphere;b.center=this.center();b.radius=.5*this.size(a).length();return b}}(),intersect:function(a){this.min.max(a.min);this.max.min(a.max);return this},union:function(a){this.min.min(a.min);this.max.max(a.max);return this},applyMatrix4:function(){var a=[new THREE.Vector3,new THREE.Vector3,new THREE.Vector3,new THREE.Vector3,new THREE.Vector3,new THREE.Vector3,new THREE.Vector3,new THREE.Vector3];return function(b){a[0].set(this.min.x,this.min.y,this.min.z).applyMatrix4(b);a[1].set(this.min.x,this.min.y,this.max.z).applyMatrix4(b);a[2].set(this.min.x,this.max.y,this.min.z).applyMatrix4(b);a[3].set(this.min.x,this.max.y,this.max.z).applyMatrix4(b);a[4].set(this.max.x,this.min.y,this.min.z).applyMatrix4(b);a[5].set(this.max.x,this.min.y,this.max.z).applyMatrix4(b);a[6].set(this.max.x,this.max.y,this.min.z).applyMatrix4(b);a[7].set(this.max.x,this.max.y,this.max.z).applyMatrix4(b);this.makeEmpty();this.setFromPoints(a);return this}}(),translate:function(a){this.min.add(a);this.max.add(a);return this},equals:function(a){return a.min.equals(this.min)&&a.max.equals(this.max)}};THREE.Matrix3=function(){this.elements=new Float32Array([1,0,0,0,1,0,0,0,1]);0this.determinant()&&(g=-g);c.x=f[12];c.y=f[13];c.z=f[14];b.elements.set(this.elements);c=1/g;var f=1/h,l=1/k;b.elements[0]*=c;b.elements[1]*=c;b.elements[2]*=c;b.elements[4]*=f;b.elements[5]*=f;b.elements[6]*=f;b.elements[8]*=l;b.elements[9]*=l;b.elements[10]*=l;d.setFromRotationMatrix(b);e.x=g;e.y=h;e.z=k;return this}}(),makeFrustum:function(a,b,c,d,e,f){var g=this.elements;g[0]=2*e/(b-a);g[4]=0;g[8]=(b+a)/(b-a);g[12]=0;g[1]=0;g[5]=2*e/(d-c);g[9]=(d+c)/(d-c);g[13]=0;g[2]=0;g[6]=0;g[10]=-(f+e)/(f-e);g[14]=-2*f*e/(f-e);g[3]=0;g[7]=0;g[11]=-1;g[15]=0;return this},makePerspective:function(a,b,c,d){a=c*Math.tan(THREE.Math.degToRad(.5*a));var e=-a;return this.makeFrustum(e*b,a*b,e,a,c,d)},makeOrthographic:function(a,b,c,d,e,f){var g=this.elements,h=1/(b-a),k=1/(c-d),l=1/(f-e);g[0]=2*h;g[4]=0;g[8]=0;g[12]=-((b+a)*h);g[1]=0;g[5]=2*k;g[9]=0;g[13]=-((c+d)*k);g[2]=0;g[6]=0;g[10]=-2*l;g[14]=-((f+e)*l);g[3]=0;g[7]=0;g[11]=0;g[15]=1;return this},equals:function(a){var b=this.elements;a=a.elements;for(var c=0;16>c;c++)if(b[c]!==a[c])return!1;return!0},fromArray:function(a){this.elements.set(a);return this},toArray:function(){var a=this.elements;return[a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8],a[9],a[10],a[11],a[12],a[13],a[14],a[15]]}};THREE.Ray=function(a,b){this.origin=void 0!==a?a:new THREE.Vector3;this.direction=void 0!==b?b:new THREE.Vector3};THREE.Ray.prototype={constructor:THREE.Ray,set:function(a,b){this.origin.copy(a);this.direction.copy(b);return this},clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.origin.copy(a.origin);this.direction.copy(a.direction);return this},at:function(a,b){return(b||new THREE.Vector3).copy(this.direction).multiplyScalar(a).add(this.origin)},lookAt:function(a){this.direction.copy(a).sub(this.origin).normalize()},recast:function(){var a=new THREE.Vector3;return function(b){this.origin.copy(this.at(b,a));return this}}(),closestPointToPoint:function(a,b){var c=b||new THREE.Vector3;c.subVectors(a,this.origin);var d=c.dot(this.direction);return 0>d?c.copy(this.origin):c.copy(this.direction).multiplyScalar(d).add(this.origin)},distanceToPoint:function(a){return Math.sqrt(this.distanceSqToPoint(a))},distanceSqToPoint:function(){var a=new THREE.Vector3;return function(b){var c=a.subVectors(b,this.origin).dot(this.direction);if(0>c)return this.origin.distanceToSquared(b);a.copy(this.direction).multiplyScalar(c).add(this.origin);return a.distanceToSquared(b)}}(),distanceSqToSegment:function(){var a=new THREE.Vector3,b=new THREE.Vector3,c=new THREE.Vector3;return function(d,e,f,g){a.copy(d).add(e).multiplyScalar(.5);b.copy(e).sub(d).normalize();c.copy(this.origin).sub(a);var h=.5*d.distanceTo(e),k=-this.direction.dot(b),l=c.dot(this.direction),p=-c.dot(b),n=c.lengthSq(),m=Math.abs(1-k*k),q;0=-q?e<=q?(h=1/m,d*=h,e*=h,k=d*(d+k*e+2*l)+e*(k*d+e+2*p)+n):(e=h,d=Math.max(0,-(k*e+l)),k=-d*d+e*(e+2*p)+n):(e=-h,d=Math.max(0,-(k*e+l)),k=-d*d+e*(e+2*p)+n):e<=-q?(d=Math.max(0,-(-k*h+l)),e=0f)return null;f=Math.sqrt(f-e);e=d-f;d+=f;return 0>e&&0>d?null:0>e?this.at(d,c):this.at(e,c)}}(),intersectsSphere:function(a){return this.distanceToPoint(a.center)<=a.radius},distanceToPlane:function(a){var b=a.normal.dot(this.direction);if(0===b)return 0===a.distanceToPoint(this.origin)?0:null;a=-(this.origin.dot(a.normal)+a.constant)/b;return 0<=a?a:null},intersectPlane:function(a,b){var c=this.distanceToPlane(a);return null===c?null:this.at(c,b)},intersectsPlane:function(a){var b=a.distanceToPoint(this.origin);return 0===b||0>a.normal.dot(this.direction)*b?!0:!1},intersectBox:function(a,b){var c,d,e,f,g;d=1/this.direction.x;f=1/this.direction.y;g=1/this.direction.z;var h=this.origin;0<=d?(c=(a.min.x-h.x)*d,d*=a.max.x-h.x):(c=(a.max.x-h.x)*d,d*=a.min.x-h.x);0<=f?(e=(a.min.y-h.y)*f,f*=a.max.y-h.y):(e=(a.max.y-h.y)*f,f*=a.min.y-h.y);if(c>f||e>d)return null;if(e>c||c!==c)c=e;if(fg||e>d)return null;if(e>c||c!==c)c=e;if(gd?null:this.at(0<=c?c:d,b)},intersectsBox:function(){var a=new THREE.Vector3;return function(b){return null!==this.intersectBox(b,a)}}(),intersectTriangle:function(){var a=new THREE.Vector3,b=new THREE.Vector3,c=new THREE.Vector3,d=new THREE.Vector3;return function(e,f,g,h,k){b.subVectors(f,e);c.subVectors(g,e);d.crossVectors(b,c);f=this.direction.dot(d);if(0f)h=-1,f=-f;else return null;a.subVectors(this.origin,e);e=h*this.direction.dot(c.crossVectors(a,c));if(0>e)return null;g=h*this.direction.dot(b.cross(a));if(0>g||e+g>f)return null;e=-h*a.dot(d);return 0>e?null:this.at(e/f,k)}}(),applyMatrix4:function(a){this.direction.add(this.origin).applyMatrix4(a);this.origin.applyMatrix4(a);this.direction.sub(this.origin);this.direction.normalize();return this},equals:function(a){return a.origin.equals(this.origin)&&a.direction.equals(this.direction)}};THREE.Sphere=function(a,b){this.center=void 0!==a?a:new THREE.Vector3;this.radius=void 0!==b?b:0};THREE.Sphere.prototype={constructor:THREE.Sphere,set:function(a,b){this.center.copy(a);this.radius=b;return this},setFromPoints:function(){var a=new THREE.Box3;return function(b,c){var d=this.center;void 0!==c?d.copy(c):a.setFromPoints(b).center(d);for(var e=0,f=0,g=b.length;f=this.radius},containsPoint:function(a){return a.distanceToSquared(this.center)<=this.radius*this.radius},distanceToPoint:function(a){return a.distanceTo(this.center)-this.radius},intersectsSphere:function(a){var b=this.radius+a.radius;return a.center.distanceToSquared(this.center)<=b*b},intersectsBox:function(a){return a.intersectsSphere(this)},intersectsPlane:function(a){return Math.abs(this.center.dot(a.normal)-a.constant)<=this.radius},clampPoint:function(a,b){var c=this.center.distanceToSquared(a),d=b||new THREE.Vector3;d.copy(a);c>this.radius*this.radius&&(d.sub(this.center).normalize(),d.multiplyScalar(this.radius).add(this.center));return d},getBoundingBox:function(a){a=a||new THREE.Box3;a.set(this.center,this.center);a.expandByScalar(this.radius);return a},applyMatrix4:function(a){this.center.applyMatrix4(a);this.radius*=a.getMaxScaleOnAxis();return this},translate:function(a){this.center.add(a);return this},equals:function(a){return a.center.equals(this.center)&&a.radius===this.radius}};THREE.Frustum=function(a,b,c,d,e,f){this.planes=[void 0!==a?a:new THREE.Plane,void 0!==b?b:new THREE.Plane,void 0!==c?c:new THREE.Plane,void 0!==d?d:new THREE.Plane,void 0!==e?e:new THREE.Plane,void 0!==f?f:new THREE.Plane]};THREE.Frustum.prototype={constructor:THREE.Frustum,set:function(a,b,c,d,e,f){var g=this.planes;g[0].copy(a);g[1].copy(b);g[2].copy(c);g[3].copy(d);g[4].copy(e);g[5].copy(f);return this},clone:function(){return(new this.constructor).copy(this)},copy:function(a){for(var b=this.planes,c=0;6>c;c++)b[c].copy(a.planes[c]);return this},setFromMatrix:function(a){var b=this.planes,c=a.elements;a=c[0];var d=c[1],e=c[2],f=c[3],g=c[4],h=c[5],k=c[6],l=c[7],p=c[8],n=c[9],m=c[10],q=c[11],u=c[12],v=c[13],t=c[14],c=c[15];b[0].setComponents(f-a,l-g,q-p,c-u).normalize();b[1].setComponents(f+a,l+g,q+p,c+u).normalize();b[2].setComponents(f+d,l+h,q+n,c+v).normalize();b[3].setComponents(f-d,l-h,q-n,c-v).normalize();b[4].setComponents(f-e,l-k,q-m,c-t).normalize();b[5].setComponents(f+e,l+k,q+m,c+t).normalize();return this},intersectsObject:function(){var a=new THREE.Sphere;return function(b){var c=b.geometry;null===c.boundingSphere&&c.computeBoundingSphere();a.copy(c.boundingSphere);a.applyMatrix4(b.matrixWorld);return this.intersectsSphere(a)}}(),intersectsSphere:function(a){var b=this.planes,c=a.center;a=-a.radius;for(var d=0;6>d;d++)if(b[d].distanceToPoint(c)e;e++){var f=d[e];a.x=0g&&0>f)return!1}return!0}}(),containsPoint:function(a){for(var b=this.planes,c=0;6>c;c++)if(0>b[c].distanceToPoint(a))return!1;return!0}};THREE.Plane=function(a,b){this.normal=void 0!==a?a:new THREE.Vector3(1,0,0);this.constant=void 0!==b?b:0};THREE.Plane.prototype={constructor:THREE.Plane,set:function(a,b){this.normal.copy(a);this.constant=b;return this},setComponents:function(a,b,c,d){this.normal.set(a,b,c);this.constant=d;return this},setFromNormalAndCoplanarPoint:function(a,b){this.normal.copy(a);this.constant=-b.dot(this.normal);return this},setFromCoplanarPoints:function(){var a=new THREE.Vector3,b=new THREE.Vector3;return function(c,d,e){d=a.subVectors(e,d).cross(b.subVectors(c,d)).normalize();this.setFromNormalAndCoplanarPoint(d,c);return this}}(),clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.normal.copy(a.normal);this.constant=a.constant;return this},normalize:function(){var a=1/this.normal.length();this.normal.multiplyScalar(a);this.constant*=a;return this},negate:function(){this.constant*=-1;this.normal.negate();return this},distanceToPoint:function(a){return this.normal.dot(a)+this.constant},distanceToSphere:function(a){return this.distanceToPoint(a.center)-a.radius},projectPoint:function(a,b){return this.orthoPoint(a,b).sub(a).negate()},orthoPoint:function(a,b){var c=this.distanceToPoint(a);return(b||new THREE.Vector3).copy(this.normal).multiplyScalar(c)},intersectLine:function(){var a=new THREE.Vector3;return function(b,c){var d=c||new THREE.Vector3,e=b.delta(a),f=this.normal.dot(e);if(0===f){if(0===this.distanceToPoint(b.start))return d.copy(b.start)}else return f=-(b.start.dot(this.normal)+this.constant)/f,0>f||1b&&0a&&0e;e++)8===e||13===e||18===e||23===e?b[e]="-":14===e?b[e]="4":(2>=c&&(c=33554432+16777216*Math.random()|0),d=c&15,c>>=4,b[e]=a[19===e?d&3|8:d]);return b.join("")}}(),clamp:function(a,b,c){return Math.max(b,Math.min(c,a))},euclideanModulo:function(a,b){return(a%b+b)%b},mapLinear:function(a,b,c,d,e){return d+(a-b)*(e-d)/(c-b)},smoothstep:function(a,b,c){if(a<=b)return 0;if(a>=c)return 1;a=(a-b)/(c-b);return a*a*(3-2*a)},smootherstep:function(a,b,c){if(a<=b)return 0;if(a>=c)return 1;a=(a-b)/(c-b);return a*a*a*(a*(6*a-15)+10)},random16:function(){console.warn("THREE.Math.random16() has been deprecated. Use Math.random() instead.");return Math.random()},randInt:function(a,b){return a+Math.floor(Math.random()*(b-a+1))},randFloat:function(a,b){return a+Math.random()*(b-a)},randFloatSpread:function(a){return a*(.5-Math.random())},degToRad:function(){var a=Math.PI/180;return function(b){return b*a}}(),radToDeg:function(){var a=180/Math.PI;return function(b){return b*a}}(),isPowerOfTwo:function(a){return 0===(a&a-1)&&0!==a},nearestPowerOfTwo:function(a){return Math.pow(2,Math.round(Math.log(a)/Math.LN2))},nextPowerOfTwo:function(a){a--;a|=a>>1;a|=a>>2;a|=a>>4;a|=a>>8;a|=a>>16;a++;return a}};THREE.Spline=function(a){function b(a,b,c,d,e,f,g){a=.5*(c-a);d=.5*(d-b);return(2*(b-c)+a+d)*g+(-3*(b-c)-2*a-d)*f+a*e+b}this.points=a;var c=[],d={x:0,y:0,z:0},e,f,g,h,k,l,p,n,m;this.initFromArray=function(a){this.points=[];for(var b=0;bthis.points.length-2?this.points.length-1:f+1;c[3]=f>this.points.length-3?this.points.length-1:f+2;l=this.points[c[0]];p=this.points[c[1]];n=this.points[c[2]];m=this.points[c[3]];h=g*g;k=g*h;d.x=b(l.x,p.x,n.x,m.x,g,h,k);d.y=b(l.y,p.y,n.y,m.y,g,h,k);d.z=b(l.z,p.z,n.z,m.z,g,h,k);return d};this.getControlPointsArray=function(){var a,b,c=this.points.length,d=[];for(a=0;a=b.x+b.y}}();THREE.Triangle.prototype={constructor:THREE.Triangle,set:function(a,b,c){this.a.copy(a);this.b.copy(b);this.c.copy(c);return this},setFromPointsAndIndices:function(a,b,c,d){this.a.copy(a[b]);this.b.copy(a[c]);this.c.copy(a[d]);return this},clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.a.copy(a.a);this.b.copy(a.b);this.c.copy(a.c);return this},area:function(){var a=new THREE.Vector3,b=new THREE.Vector3;return function(){a.subVectors(this.c,this.b);b.subVectors(this.a,this.b);return.5*a.cross(b).length()}}(),midpoint:function(a){return(a||new THREE.Vector3).addVectors(this.a,this.b).add(this.c).multiplyScalar(1/3)},normal:function(a){return THREE.Triangle.normal(this.a,this.b,this.c,a)},plane:function(a){return(a||new THREE.Plane).setFromCoplanarPoints(this.a,this.b,this.c)},barycoordFromPoint:function(a,b){return THREE.Triangle.barycoordFromPoint(a,this.a,this.b,this.c,b)},containsPoint:function(a){return THREE.Triangle.containsPoint(a,this.a,this.b,this.c)},equals:function(a){return a.a.equals(this.a)&&a.b.equals(this.b)&&a.c.equals(this.c)}};THREE.Interpolant=function(a,b,c,d){this.parameterPositions=a;this._cachedIndex=0;this.resultBuffer=void 0!==d?d:new b.constructor(c);this.sampleValues=b;this.valueSize=c};THREE.Interpolant.prototype={constructor:THREE.Interpolant,evaluate:function(a){var b=this.parameterPositions,c=this._cachedIndex,d=b[c],e=b[c-1];a:{b:{c:{d:if(!(a=e)break a;else{f=b[1];a=e)break b}d=c;c=0}}for(;c>>1,ad;d++)if(e[d]===e[(d+1)%3]){a.push(f);break}for(f=a.length-1;0<=f;f--)for(e=a[f],this.faces.splice(e,1),c=0,g=this.faceVertexUvs.length;c-1?e(a,b,c):b.indexOf("%")>-1?f(a,b,c):b.indexOf(":")>-1?g(a,b):i(a._value,b,c)}function d(a,b){var c,d,e,f,g,i=b,j=["KB","MB","GB","TB","PB","EB","ZB","YB"],k=!1;if(b.indexOf(":")>-1)a._value=h(b);else if(b===q)a._value=0;else{for("."!==o[p].delimiters.decimal&&(b=b.replace(/\./g,"").replace(o[p].delimiters.decimal,".")),c=new RegExp("[^a-zA-Z]"+o[p].abbreviations.thousand+"(?:\\)|(\\"+o[p].currency.symbol+")?(?:\\))?)?$"),d=new RegExp("[^a-zA-Z]"+o[p].abbreviations.million+"(?:\\)|(\\"+o[p].currency.symbol+")?(?:\\))?)?$"),e=new RegExp("[^a-zA-Z]"+o[p].abbreviations.billion+"(?:\\)|(\\"+o[p].currency.symbol+")?(?:\\))?)?$"),f=new RegExp("[^a-zA-Z]"+o[p].abbreviations.trillion+"(?:\\)|(\\"+o[p].currency.symbol+")?(?:\\))?)?$"),g=0;g<=j.length&&!(k=b.indexOf(j[g])>-1?Math.pow(1024,g+1):!1);g++);a._value=(k?k:1)*(i.match(c)?Math.pow(10,3):1)*(i.match(d)?Math.pow(10,6):1)*(i.match(e)?Math.pow(10,9):1)*(i.match(f)?Math.pow(10,12):1)*(b.indexOf("%")>-1?.01:1)*((b.split("-").length+Math.min(b.split("(").length-1,b.split(")").length-1))%2?1:-1)*Number(b.replace(/[^0-9\.]+/g,"")),a._value=k?Math.ceil(a._value):a._value}return a._value}function e(a,b,c){var d,e,f=b.indexOf("$"),g=b.indexOf("("),h=b.indexOf("-"),j="";return b.indexOf(" $")>-1?(j=" ",b=b.replace(" $","")):b.indexOf("$ ")>-1?(j=" ",b=b.replace("$ ","")):b=b.replace("$",""),e=i(a._value,b,c),1>=f?e.indexOf("(")>-1||e.indexOf("-")>-1?(e=e.split(""),d=1,(g>f||h>f)&&(d=0),e.splice(d,0,o[p].currency.symbol+j),e=e.join("")):e=o[p].currency.symbol+j+e:e.indexOf(")")>-1?(e=e.split(""),e.splice(-1,0,j+o[p].currency.symbol),e=e.join("")):e=e+j+o[p].currency.symbol,e}function f(a,b,c){var d,e="",f=100*a._value;return b.indexOf(" %")>-1?(e=" ",b=b.replace(" %","")):b=b.replace("%",""),d=i(f,b,c),d.indexOf(")")>-1?(d=d.split(""),d.splice(-1,0,e+"%"),d=d.join("")):d=d+e+"%",d}function g(a){var b=Math.floor(a._value/60/60),c=Math.floor((a._value-60*b*60)/60),d=Math.round(a._value-60*b*60-60*c);return b+":"+(10>c?"0"+c:c)+":"+(10>d?"0"+d:d)}function h(a){var b=a.split(":"),c=0;return 3===b.length?(c+=60*Number(b[0])*60,c+=60*Number(b[1]),c+=Number(b[2])):2===b.length&&(c+=60*Number(b[0]),c+=Number(b[1])),Number(c)}function i(a,c,d){var e,f,g,h,i,j,k=!1,l=!1,m=!1,n="",r=!1,s=!1,t=!1,u=!1,v=!1,w="",x="",y=Math.abs(a),z=["B","KB","MB","GB","TB","PB","EB","ZB","YB"],A="",B=!1;if(0===a&&null!==q)return q;if(c.indexOf("(")>-1?(k=!0,c=c.slice(1,-1)):c.indexOf("+")>-1&&(l=!0,c=c.replace(/\+/g,"")),c.indexOf("a")>-1&&(r=c.indexOf("aK")>=0,s=c.indexOf("aM")>=0,t=c.indexOf("aB")>=0,u=c.indexOf("aT")>=0,v=r||s||t||u,c.indexOf(" a")>-1?(n=" ",c=c.replace(" a","")):c=c.replace("a",""),y>=Math.pow(10,12)&&!v||u?(n+=o[p].abbreviations.trillion,a/=Math.pow(10,12)):y=Math.pow(10,9)&&!v||t?(n+=o[p].abbreviations.billion,a/=Math.pow(10,9)):y=Math.pow(10,6)&&!v||s?(n+=o[p].abbreviations.million,a/=Math.pow(10,6)):(y=Math.pow(10,3)&&!v||r)&&(n+=o[p].abbreviations.thousand,a/=Math.pow(10,3))),c.indexOf("b")>-1)for(c.indexOf(" b")>-1?(w=" ",c=c.replace(" b","")):c=c.replace("b",""),g=0;g<=z.length;g++)if(e=Math.pow(1024,g),f=Math.pow(1024,g+1),a>=e&&f>a){w+=z[g],e>0&&(a/=e);break}return c.indexOf("o")>-1&&(c.indexOf(" o")>-1?(x=" ",c=c.replace(" o","")):c=c.replace("o",""),x+=o[p].ordinal(a)),c.indexOf("[.]")>-1&&(m=!0,c=c.replace("[.]",".")),h=a.toString().split(".")[0],i=c.split(".")[1],j=c.indexOf(","),i?(i.indexOf("[")>-1?(i=i.replace("]",""),i=i.split("["),A=b(a,i[0].length+i[1].length,d,i[1].length)):A=b(a,i.length,d),h=A.split(".")[0],A=A.split(".")[1].length?o[p].delimiters.decimal+A.split(".")[1]:"",m&&0===Number(A.slice(1))&&(A="")):h=b(a,null,d),h.indexOf("-")>-1&&(h=h.slice(1),B=!0),j>-1&&(h=h.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g,"$1"+o[p].delimiters.thousands)),0===c.indexOf(".")&&(h=""),(k&&B?"(":"")+(!k&&B?"-":"")+(!B&&l?"+":"")+h+A+(x?x:"")+(n?n:"")+(w?w:"")+(k&&B?")":"")}function j(a,b){o[a]=b}function k(a){var b=a.toString().split(".");return b.length<2?1:Math.pow(10,b[1].length)}function l(){var a=Array.prototype.slice.call(arguments);return a.reduce(function(a,b){var c=k(a),d=k(b);return c>d?c:d},-1/0)}var m,n="1.5.3",o={},p="en",q=null,r="0,0",s="undefined"!=typeof module&&module.exports;m=function(b){return m.isNumeral(b)?b=b.value():0===b||"undefined"==typeof b?b=0:Number(b)||(b=m.fn.unformat(b)),new a(Number(b))},m.version=n,m.isNumeral=function(b){return b instanceof a},m.language=function(a,b){if(!a)return p;if(a&&!b){if(!o[a])throw new Error("Unknown language : "+a);p=a}return(b||!o[a])&&j(a,b),m},m.languageData=function(a){if(!a)return o[p];if(!o[a])throw new Error("Unknown language : "+a);return o[a]},m.language("en",{delimiters:{thousands:",",decimal:"."},abbreviations:{thousand:"k",million:"m",billion:"b",trillion:"t"},ordinal:function(a){var b=a%10;return 1===~~(a%100/10)?"th":1===b?"st":2===b?"nd":3===b?"rd":"th"},currency:{symbol:"$"}}),m.zeroFormat=function(a){q="string"==typeof a?a:null},m.defaultFormat=function(a){r="string"==typeof a?a:"0.0"},"function"!=typeof Array.prototype.reduce&&(Array.prototype.reduce=function(a,b){"use strict";if(null===this||"undefined"==typeof this)throw new TypeError("Array.prototype.reduce called on null or undefined");if("function"!=typeof a)throw new TypeError(a+" is not a function");var c,d,e=this.length>>>0,f=!1;for(1c;++c)this.hasOwnProperty(c)&&(f?d=a(d,this[c],c,this):(d=this[c],f=!0));if(!f)throw new TypeError("Reduce of empty array with no initial value");return d}),m.fn=a.prototype={clone:function(){return m(this)},format:function(a,b){return c(this,a?a:r,void 0!==b?b:Math.round)},unformat:function(a){return"[object Number]"===Object.prototype.toString.call(a)?a:d(this,a?a:r)},value:function(){return this._value},valueOf:function(){return this._value},set:function(a){return this._value=Number(a),this},add:function(a){function b(a,b){return a+c*b}var c=l.call(null,this._value,a);return this._value=[this._value,a].reduce(b,0)/c,this},subtract:function(a){function b(a,b){return a-c*b}var c=l.call(null,this._value,a);return this._value=[a].reduce(b,this._value*c)/c,this},multiply:function(a){function b(a,b){var c=l(a,b);return a*c*b*c/(c*c)}return this._value=[this._value,a].reduce(b,1),this},divide:function(a){function b(a,b){var c=l(a,b);return a*c/(b*c)}return this._value=[this._value,a].reduce(b),this},difference:function(a){return Math.abs(m(this._value).subtract(a).value())}},s&&(module.exports=m),"undefined"==typeof ender&&(this.numeral=m),"function"==typeof define&&define.amd&&define([],function(){return m})}).call(this); +// Extracted Richard Bunt's work in Telemachus: https://github.com/richardbunt/Telemachus/blob/master/WebPages/WebPages/src/console.js -},getAttribute:function(a){return this.attributes[a]},removeAttribute:function(a){delete this.attributes[a];return this},addGroup:function(a,b,c){this.groups.push({start:a,count:b,materialIndex:void 0!==c?c:0})},clearGroups:function(){this.groups=[]},setDrawRange:function(a,b){this.drawRange.start=a;this.drawRange.count=b},applyMatrix:function(a){var b=this.attributes.position;void 0!==b&&(a.applyToVector3Array(b.array),b.needsUpdate=!0);b=this.attributes.normal;void 0!==b&&((new THREE.Matrix3).getNormalMatrix(a).applyToVector3Array(b.array),b.needsUpdate=!0);null!==this.boundingBox&&this.computeBoundingBox();null!==this.boundingSphere&&this.computeBoundingSphere();return this},rotateX:function(){var a;return function(b){void 0===a&&(a=new THREE.Matrix4);a.makeRotationX(b);this.applyMatrix(a);return this}}(),rotateY:function(){var a;return function(b){void 0===a&&(a=new THREE.Matrix4);a.makeRotationY(b);this.applyMatrix(a);return this}}(),rotateZ:function(){var a;return function(b){void 0===a&&(a=new THREE.Matrix4);a.makeRotationZ(b);this.applyMatrix(a);return this}}(),translate:function(){var a;return function(b,c,d){void 0===a&&(a=new THREE.Matrix4);a.makeTranslation(b,c,d);this.applyMatrix(a);return this}}(),scale:function(){var a;return function(b,c,d){void 0===a&&(a=new THREE.Matrix4);a.makeScale(b,c,d);this.applyMatrix(a);return this}}(),lookAt:function(){var a;return function(b){void 0===a&&(a=new THREE.Object3D);a.lookAt(b);a.updateMatrix();this.applyMatrix(a.matrix)}}(),center:function(){this.computeBoundingBox();var a=this.boundingBox.center().negate();this.translate(a.x,a.y,a.z);return a},setFromObject:function(a){var b=a.geometry;if(a instanceof THREE.Points||a instanceof THREE.Line){a=new THREE.Float32Attribute(3*b.vertices.length,3);var c=new THREE.Float32Attribute(3*b.colors.length,3);this.addAttribute("position",a.copyVector3sArray(b.vertices));this.addAttribute("color",c.copyColorsArray(b.colors));b.lineDistances&&b.lineDistances.length===b.vertices.length&&(a=new THREE.Float32Attribute(b.lineDistances.length,1),this.addAttribute("lineDistance",a.copyArray(b.lineDistances)));null!==b.boundingSphere&&(this.boundingSphere=b.boundingSphere.clone());null!==b.boundingBox&&(this.boundingBox=b.boundingBox.clone())}else a instanceof THREE.Mesh&&b instanceof THREE.Geometry&&this.fromGeometry(b);return this},updateFromObject:function(a){var b=a.geometry;if(a instanceof THREE.Mesh){var c=b.__directGeometry;if(void 0===c)return this.fromGeometry(b);c.verticesNeedUpdate=b.verticesNeedUpdate;c.normalsNeedUpdate=b.normalsNeedUpdate;c.colorsNeedUpdate=b.colorsNeedUpdate;c.uvsNeedUpdate=b.uvsNeedUpdate;c.groupsNeedUpdate=b.groupsNeedUpdate;b.verticesNeedUpdate=!1;b.normalsNeedUpdate=!1;b.colorsNeedUpdate=!1;b.uvsNeedUpdate=!1;b.groupsNeedUpdate=!1;b=c}!0===b.verticesNeedUpdate&&(c=this.attributes.position,void 0!==c&&(c.copyVector3sArray(b.vertices),c.needsUpdate=!0),b.verticesNeedUpdate=!1);!0===b.normalsNeedUpdate&&(c=this.attributes.normal,void 0!==c&&(c.copyVector3sArray(b.normals),c.needsUpdate=!0),b.normalsNeedUpdate=!1);!0===b.colorsNeedUpdate&&(c=this.attributes.color,void 0!==c&&(c.copyColorsArray(b.colors),c.needsUpdate=!0),b.colorsNeedUpdate=!1);b.uvsNeedUpdate&&(c=this.attributes.uv,void 0!==c&&(c.copyVector2sArray(b.uvs),c.needsUpdate=!0),b.uvsNeedUpdate=!1);b.lineDistancesNeedUpdate&&(c=this.attributes.lineDistance,void 0!==c&&(c.copyArray(b.lineDistances),c.needsUpdate=!0),b.lineDistancesNeedUpdate=!1);b.groupsNeedUpdate&&(b.computeGroups(a.geometry),this.groups=b.groups,b.groupsNeedUpdate=!1);return this},fromGeometry:function(a){a.__directGeometry=(new THREE.DirectGeometry).fromGeometry(a);return this.fromDirectGeometry(a.__directGeometry)},fromDirectGeometry:function(a){var b=new Float32Array(3*a.vertices.length);this.addAttribute("position",new THREE.BufferAttribute(b,3).copyVector3sArray(a.vertices));0this.duration&&this.resetDuration();this.trim();this.optimize()};THREE.AnimationClip.prototype={constructor:THREE.AnimationClip,resetDuration:function(){for(var a=0,b=0,c=this.tracks.length;b!==c;++b)var d=this.tracks[b],a=Math.max(a,d.times[d.times.length-1]);this.duration=a},trim:function(){for(var a=0;ab||0===c)return;this._startTime=null;b*=c}b*=this._updateTimeScale(a);c=this._updateTime(b);a=this._updateWeight(a);if(0c.parameterPositions[1]&&(this.stopFading(),0===d&&(this.enabled=!1))}}return this._effectiveWeight=b},_updateTimeScale:function(a){var b=0;if(!this.paused){var b=this.timeScale,c=this._timeScaleInterpolant;if(null!==c){var d=c.evaluate(a)[0],b=b*d;a>c.parameterPositions[1]&&(this.stopWarping(),0===b?this.pause=!0:this.timeScale=b)}}return this._effectiveTimeScale=b},_updateTime:function(a){var b=this.time+a;if(0===a)return b;var c=this._clip.duration,d=this.loop,e=this._loopCount,f=!1;switch(d){case THREE.LoopOnce:-1===e&&(this.loopCount=0,this._setEndings(!0,!0,!1));if(b>=c)b=c;else if(0>b)b=0;else break;this.clampWhenFinished?this.pause=!0:this.enabled=!1;this._mixer.dispatchEvent({type:"finished",action:this,direction:0>a?-1:1});break;case THREE.LoopPingPong:f=!0;case THREE.LoopRepeat:-1===e&&(0=c||0>b){var g=Math.floor(b/c),b=b-c*g,e=e+Math.abs(g),h=this.repetitions-e;if(0>h){this.clampWhenFinished?this.paused=!0:this.enabled=!1;b=0a,this._setEndings(a,!a,f)):this._setEndings(!1,!1,f);this._loopCount=e;this._mixer.dispatchEvent({type:"loop",action:this,loopDelta:g})}if(d===THREE.LoopPingPong&&1===(e&1))return this.time=b,c-b}return this.time=b},_setEndings:function(a,b,c){var d=this._interpolantSettings;c?(d.endingStart=THREE.ZeroSlopeEnding,d.endingEnd=THREE.ZeroSlopeEnding):(d.endingStart=a?this.zeroSlopeAtStart?THREE.ZeroSlopeEnding:THREE.ZeroCurvatureEnding:THREE.WrapAroundEnding,d.endingEnd=b?this.zeroSlopeAtEnd?THREE.ZeroSlopeEnding:THREE.ZeroCurvatureEnding:THREE.WrapAroundEnding)},_scheduleFading:function(a,b,c){var d=this._mixer,e=d.time,f=this._weightInterpolant;null===f&&(this._weightInterpolant=f=d._lendControlInterpolant());d=f.parameterPositions;f=f.sampleValues;d[0]=e;f[0]=b;d[1]=e+a;f[1]=c;return this}};Object.assign(THREE.AnimationMixer.prototype,{_bindAction:function(a,b){var c=a._localRoot||this._root,d=a._clip.tracks,e=d.length,f=a._propertyBindings,g=a._interpolants,h=c.uuid,k=this._bindingsByRootAndName,l=k[h];void 0===l&&(l={},k[h]=l);for(k=0;k!==e;++k){var p=d[k],n=p.name,m=l[n];if(void 0===m){m=f[k];if(void 0!==m){null===m._cacheIndex&&(++m.referenceCount,this._addInactiveBinding(m,h,n));continue}m=new THREE.PropertyMixer(THREE.PropertyBinding.create(c,n,b&&b._propertyBindings[k].binding.parsedPath),p.ValueTypeName,p.getValueSize());++m.referenceCount;this._addInactiveBinding(m,h,n)}f[k]=m;g[k].resultBuffer=m.buffer}},_activateAction:function(a){if(!this._isActiveAction(a)){if(null===a._cacheIndex){var b=(a._localRoot||this._root).uuid,c=a._clip.name,d=this._actionsByClip[c];this._bindAction(a,d&&d.knownActions[0]);this._addInactiveAction(a,c,b)}b=a._propertyBindings;c=0;for(d=b.length;c!==d;++c){var e=b[c];0===e.useCount++&&(this._lendBinding(e),e.saveOriginalState())}this._lendAction(a)}},_deactivateAction:function(a){if(this._isActiveAction(a)){for(var b=a._propertyBindings,c=0,d=b.length;c!==d;++c){var e=b[c];0===--e.useCount&&(e.restoreOriginalState(),this._takeBackBinding(e))}this._takeBackAction(a)}},_initMemoryManager:function(){this._actions=[];this._nActiveActions=0;this._actionsByClip={};this._bindings=[];this._nActiveBindings=0;this._bindingsByRootAndName={};this._controlInterpolants=[];this._nActiveControlInterpolants=0;var a=this;this.stats={actions:{get total(){return a._actions.length},get inUse(){return a._nActiveActions}},bindings:{get total(){return a._bindings.length},get inUse(){return a._nActiveBindings}},controlInterpolants:{get total(){return a._controlInterpolants.length},get inUse(){return a._nActiveControlInterpolants}}}},_isActiveAction:function(a){a=a._cacheIndex;return null!==a&&a=c){var n=c++,m=b[n];d[m.uuid]=p;b[p]=m;d[l]=n;b[n]=k;k=0;for(l=f;k!==l;++k){var m=e[k],q=m[p];m[p]=m[n];m[n]=q}}}this.nCachedObjects_=c},uncache:function(a){for(var b=this._objects,c=b.length,d=this.nCachedObjects_,e=this._indicesByUUID,f=this._bindings,g=f.length,h=0,k=arguments.length;h!==k;++h){var l=arguments[h].uuid,p=e[l];if(void 0!==p)if(delete e[l],pb;)--f;++f;if(0!==e||f!==d)e>=f&&(f=Math.max(f,1),e=f-1),d=this.getValueSize(),this.times=THREE.AnimationUtils.arraySlice(c,e,f),this.values=THREE.AnimationUtils.arraySlice(this.values,e*d,f*d);return this},validate:function(){var a=!0,b=this.getValueSize();0!==b-Math.floor(b)&&(console.error("invalid value size in track",this),a=!1);var c=this.times,b=this.values,d=c.length;0===d&&(console.error("track is empty",this),a=!1);for(var e=null,f=0;f!==d;f++){var g=c[f];if("number"===typeof g&&isNaN(g)){console.error("time is not a valid number",this,f,g);a=!1;break}if(null!==e&&e>g){console.error("out of order keys",this,f,g,e);a=!1;break}e=g}if(void 0!==b&&THREE.AnimationUtils.isTypedArray(b))for(f=0,c=b.length;f!==c;++f)if(d=b[f],isNaN(d)){console.error("value is not a valid number",this,f,d);a=!1;break}return a},optimize:function(){ -for(var a=this.times,b=this.values,c=this.getValueSize(),d=1,e=1,f=a.length-1;e<=f;++e){var g=!1,h=a[e];if(h!==a[e+1]&&(1!==e||h!==h[0]))for(var k=e*c,l=k-c,p=k+c,h=0;h!==c;++h){var n=b[k+h];if(n!==b[l+h]||n!==b[p+h]){g=!0;break}}if(g){if(e!==d)for(a[d]=a[e],g=e*c,k=d*c,h=0;h!==c;++h)b[k+h]=b[g+h];++d}}d!==a.length&&(this.times=THREE.AnimationUtils.arraySlice(a,0,d),this.values=THREE.AnimationUtils.arraySlice(b,0,d*c));return this}};Object.assign(THREE.KeyframeTrack,{parse:function(a){if(void 0===a.type)throw Error("track type undefined, can not parse");var b=THREE.KeyframeTrack._getTrackTypeForValueTypeName(a.type);if(void 0===a.times){console.warn("legacy JSON format detected, converting");var c=[],d=[];THREE.AnimationUtils.flattenJSON(a.keys,c,d,"value");a.times=c;a.values=d}return void 0!==b.parse?b.parse(a):new b(a.name,a.times,a.values,a.interpolation)},toJSON:function(a){var b=a.constructor;if(void 0!==b.toJSON)b=b.toJSON(a);else{var b={name:a.name,times:THREE.AnimationUtils.convertArray(a.times,Array),values:THREE.AnimationUtils.convertArray(a.values,Array)},c=a.getInterpolation();c!==a.DefaultInterpolation&&(b.interpolation=c)}b.type=a.ValueTypeName;return b},_getTrackTypeForValueTypeName:function(a){switch(a.toLowerCase()){case"scalar":case"double":case"float":case"number":case"integer":return THREE.NumberKeyframeTrack;case"vector":case"vector2":case"vector3":case"vector4":return THREE.VectorKeyframeTrack;case"color":return THREE.ColorKeyframeTrack;case"quaternion":return THREE.QuaternionKeyframeTrack;case"bool":case"boolean":return THREE.BooleanKeyframeTrack;case"string":return THREE.StringKeyframeTrack}throw Error("Unsupported typeName: "+a)}});THREE.PropertyBinding=function(a,b,c){this.path=b;this.parsedPath=c||THREE.PropertyBinding.parseTrackName(b);this.node=THREE.PropertyBinding.findNode(a,this.parsedPath.nodeName)||a;this.rootNode=a};THREE.PropertyBinding.prototype={constructor:THREE.PropertyBinding,getValue:function(a,b){this.bind();this.getValue(a,b)},setValue:function(a,b){this.bind();this.setValue(a,b)},bind:function(){var a=this.node,b=this.parsedPath,c=b.objectName,d=b.propertyName,e=b.propertyIndex;a||(this.node=a=THREE.PropertyBinding.findNode(this.rootNode,b.nodeName)||this.rootNode);this.getValue=this._getValue_unavailable;this.setValue=this._setValue_unavailable;if(a){if(c){var f=b.objectIndex;switch(c){case"materials":if(!a.material){console.error(" can not bind to material as node does not have a material",this);return}if(!a.material.materials){console.error(" can not bind to material.materials as node.material does not have a materials array",this);return}a=a.material.materials;break;case"bones":if(!a.skeleton){console.error(" can not bind to bones as node does not have a skeleton",this);return}a=a.skeleton.bones;for(c=0;cd&&this._mixBufferRegion(c,a,3*b,1-d,b);for(var d=b,f=b+b;d!==f;++d)if(c[d]!==c[d+b]){e.setValue(c,a);break}},saveOriginalState:function(){var a=this.buffer,b=this.valueSize,c=3*b;this.binding.getValue(a,c);for(var d=b;d!==c;++d)a[d]=a[c+d%b];this.cumulativeWeight=0},restoreOriginalState:function(){this.binding.setValue(this.buffer,3*this.valueSize)},_select:function(a,b,c,d,e){if(.5<=d)for(d=0;d!==e;++d)a[b+d]=a[c+d]},_slerp:function(a,b,c,d,e){THREE.Quaternion.slerpFlat(a,b,a,b,a,c,d)},_lerp:function(a,b,c,d,e){for(var f=1-d,g=0;g!==e;++g){var h=b+g;a[h]=a[h]*f+a[c+g]*d}}};THREE.BooleanKeyframeTrack=function(a,b,c){THREE.KeyframeTrack.call(this,a,b,c)};THREE.BooleanKeyframeTrack.prototype=Object.assign(Object.create(THREE.KeyframeTrack.prototype),{constructor:THREE.BooleanKeyframeTrack,ValueTypeName:"bool",ValueBufferType:Array,DefaultInterpolation:THREE.IntepolateDiscrete,InterpolantFactoryMethodLinear:void 0,InterpolantFactoryMethodSmooth:void 0});THREE.NumberKeyframeTrack=function(a,b,c,d){THREE.KeyframeTrack.call(this,a,b,c,d)};THREE.NumberKeyframeTrack.prototype=Object.assign(Object.create(THREE.KeyframeTrack.prototype),{constructor:THREE.NumberKeyframeTrack,ValueTypeName:"number"});THREE.QuaternionKeyframeTrack=function(a,b,c,d){THREE.KeyframeTrack.call(this,a,b,c,d)};THREE.QuaternionKeyframeTrack.prototype=Object.assign(Object.create(THREE.KeyframeTrack.prototype),{constructor:THREE.QuaternionKeyframeTrack,ValueTypeName:"quaternion",DefaultInterpolation:THREE.InterpolateLinear,InterpolantFactoryMethodLinear:function(a){return new THREE.QuaternionLinearInterpolant(this.times,this.values,this.getValueSize(),a)},InterpolantFactoryMethodSmooth:void 0});THREE.StringKeyframeTrack=function(a,b,c,d){THREE.KeyframeTrack.call(this,a,b,c,d)};THREE.StringKeyframeTrack.prototype=Object.assign(Object.create(THREE.KeyframeTrack.prototype),{constructor:THREE.StringKeyframeTrack,ValueTypeName:"string",ValueBufferType:Array,DefaultInterpolation:THREE.IntepolateDiscrete,InterpolantFactoryMethodLinear:void 0,InterpolantFactoryMethodSmooth:void 0});THREE.VectorKeyframeTrack=function(a,b,c,d){THREE.KeyframeTrack.call(this,a,b,c,d)};THREE.VectorKeyframeTrack.prototype=Object.assign(Object.create(THREE.KeyframeTrack.prototype),{constructor:THREE.VectorKeyframeTrack,ValueTypeName:"vector"});THREE.Audio=function(a){THREE.Object3D.call(this);this.type="Audio";this.context=a.context;this.source=this.context.createBufferSource();this.source.onended=this.onEnded.bind(this);this.gain=this.context.createGain();this.gain.connect(a.getInput());this.autoplay=!1;this.startTime=0;this.playbackRate=1;this.isPlaying=!1;this.hasPlaybackControl=!0;this.sourceType="empty";this.filter=null};THREE.Audio.prototype=Object.create(THREE.Object3D.prototype);THREE.Audio.prototype.constructor=THREE.Audio;THREE.Audio.prototype.getOutput=function(){return this.gain};THREE.Audio.prototype.load=function(a){var b=new THREE.AudioBuffer(this.context);b.load(a);this.setBuffer(b);return this};THREE.Audio.prototype.setNodeSource=function(a){this.hasPlaybackControl=!1;this.sourceType="audioNode";this.source=a;this.connect();return this};THREE.Audio.prototype.setBuffer=function(a){var b=this;a.onReady(function(a){b.source.buffer=a;b.sourceType="buffer";b.autoplay&&b.play()});return this};THREE.Audio.prototype.play=function(){if(!0===this.isPlaying)console.warn("THREE.Audio: Audio is already playing.");else if(!1===this.hasPlaybackControl)console.warn("THREE.Audio: this Audio has no playback control.");else{var a=this.context.createBufferSource();a.buffer=this.source.buffer;a.loop=this.source.loop;a.onended=this.source.onended;a.start(0,this.startTime);a.playbackRate.value=this.playbackRate;this.isPlaying=!0;this.source=a;this.connect()}};THREE.Audio.prototype.pause=function(){!1===this.hasPlaybackControl?console.warn("THREE.Audio: this Audio has no playback control."):(this.source.stop(),this.startTime=this.context.currentTime)};THREE.Audio.prototype.stop=function(){!1===this.hasPlaybackControl?console.warn("THREE.Audio: this Audio has no playback control."):(this.source.stop(),this.startTime=0)};THREE.Audio.prototype.connect=function(){null!==this.filter?(this.source.connect(this.filter),this.filter.connect(this.getOutput())):this.source.connect(this.getOutput())};THREE.Audio.prototype.disconnect=function(){null!==this.filter?(this.source.disconnect(this.filter),this.filter.disconnect(this.getOutput())):this.source.disconnect(this.getOutput())};THREE.Audio.prototype.getFilter=function(){return this.filter};THREE.Audio.prototype.setFilter=function(a){void 0===a&&(a=null);!0===this.isPlaying?(this.disconnect(),this.filter=a,this.connect()):this.filter=a};THREE.Audio.prototype.setPlaybackRate=function(a){!1===this.hasPlaybackControl?console.warn("THREE.Audio: this Audio has no playback control."):(this.playbackRate=a,!0===this.isPlaying&&(this.source.playbackRate.value=this.playbackRate))};THREE.Audio.prototype.getPlaybackRate=function(){return this.playbackRate};THREE.Audio.prototype.onEnded=function(){this.isPlaying=!1};THREE.Audio.prototype.setLoop=function(a){!1===this.hasPlaybackControl?console.warn("THREE.Audio: this Audio has no playback control."):this.source.loop=a};THREE.Audio.prototype.getLoop=function(){return!1===this.hasPlaybackControl?(console.warn("THREE.Audio: this Audio has no playback control."),!1):this.source.loop};THREE.Audio.prototype.setVolume=function(a){this.gain.gain.value=a};THREE.Audio.prototype.getVolume=function(){return this.gain.gain.value};THREE.AudioAnalyser=function(a,b){this.analyser=a.context.createAnalyser();this.analyser.fftSize=void 0!==b?b:2048;this.data=new Uint8Array(this.analyser.frequencyBinCount);a.getOutput().connect(this.analyser)};THREE.AudioAnalyser.prototype={constructor:THREE.AudioAnalyser,getData:function(){this.analyser.getByteFrequencyData(this.data);return this.data}};THREE.AudioBuffer=function(a){this.context=a;this.ready=!1;this.readyCallbacks=[]};THREE.AudioBuffer.prototype.load=function(a){var b=this,c=new XMLHttpRequest;c.open("GET",a,!0);c.responseType="arraybuffer";c.onload=function(a){b.context.decodeAudioData(this.response,function(a){b.buffer=a;b.ready=!0;for(a=0;ak.opacity&&(k.transparent=!0);c.setTextures(h);return c.parse(k)}}()};THREE.Loader.Handlers={handlers:[],add:function(a,b){this.handlers.push(a,b)},get:function(a){for(var b=this.handlers,c=0,d=b.length;cg;g++)m=w[k++],s=t[2*m],m=t[2*m+1],s=new THREE.Vector2(s,m),2!==g&&c.faceVertexUvs[d][h].push(s),0!==g&&c.faceVertexUvs[d][h+1].push(s);n&&(n=3*w[k++],q.normal.set(E[n++],E[n++],E[n]),v.normal.copy(q.normal));if(u)for(d=0;4>d;d++)n=3*w[k++],u=new THREE.Vector3(E[n++],E[n++],E[n]),2!==d&&q.vertexNormals.push(u),0!==d&&v.vertexNormals.push(u);p&&(p=w[k++],p=x[p],q.color.setHex(p),v.color.setHex(p));if(b)for(d=0;4>d;d++)p=w[k++],p=x[p],2!==d&&q.vertexColors.push(new THREE.Color(p)),0!==d&&v.vertexColors.push(new THREE.Color(p));c.faces.push(q);c.faces.push(v)}else{q=new THREE.Face3;q.a=w[k++];q.b=w[k++];q.c=w[k++];h&&(h=w[k++],q.materialIndex=h);h=c.faces.length;if(d)for(d=0;dg;g++)m=w[k++],s=t[2*m],m=t[2*m+1],s=new THREE.Vector2(s,m),c.faceVertexUvs[d][h].push(s);n&&(n=3*w[k++],q.normal.set(E[n++],E[n++],E[n]));if(u)for(d=0;3>d;d++)n=3*w[k++],u=new THREE.Vector3(E[n++],E[n++],E[n]),q.vertexNormals.push(u);p&&(p=w[k++],q.color.setHex(x[p]));if(b)for(d=0;3>d;d++)p=w[k++],q.vertexColors.push(new THREE.Color(x[p]));c.faces.push(q)}})(d);(function(){var b=void 0!==a.influencesPerVertex?a.influencesPerVertex:2;if(a.skinWeights)for(var d=0,g=a.skinWeights.length;dthis.opacity&&(d.opacity=this.opacity);!0===this.transparent&&(d.transparent=this.transparent);0= 365 * 24 * 3600) { + result += (t / (365 * 24 * 3600) | 0) + ":"; + t %= 365 * 24 * 3600; + if (t < 24 * 3600) { + result += "0:"; + } + } + if (t >= 24 * 3600) { + result += (t / (24 * 3600) | 0) + ":"; + } + t %= 24 * 3600; + return result + this.hourMinSec(t) + " MET"; + }, -this.specular=new THREE.Color(1118481);this.shininess=30;this.lightMap=this.map=null;this.lightMapIntensity=1;this.aoMap=null;this.aoMapIntensity=1;this.emissive=new THREE.Color(0);this.emissiveIntensity=1;this.bumpMap=this.emissiveMap=null;this.bumpScale=1;this.normalMap=null;this.normalScale=new THREE.Vector2(1,1);this.displacementMap=null;this.displacementScale=1;this.displacementBias=0;this.envMap=this.alphaMap=this.specularMap=null;this.combine=THREE.MultiplyOperation;this.reflectivity=1;this.refractionRatio=.98;this.fog=!0;this.shading=THREE.SmoothShading;this.blending=THREE.NormalBlending;this.wireframe=!1;this.wireframeLinewidth=1;this.wireframeLinejoin=this.wireframeLinecap="round";this.vertexColors=THREE.NoColors;this.morphNormals=this.morphTargets=this.skinning=!1;this.setValues(a)};THREE.MeshPhongMaterial.prototype=Object.create(THREE.Material.prototype);THREE.MeshPhongMaterial.prototype.constructor=THREE.MeshPhongMaterial;THREE.MeshPhongMaterial.prototype.copy=function(a){THREE.Material.prototype.copy.call(this,a);this.color.copy(a.color);this.specular.copy(a.specular);this.shininess=a.shininess;this.map=a.map;this.lightMap=a.lightMap;this.lightMapIntensity=a.lightMapIntensity;this.aoMap=a.aoMap;this.aoMapIntensity=a.aoMapIntensity;this.emissive.copy(a.emissive);this.emissiveMap=a.emissiveMap;this.emissiveIntensity=a.emissiveIntensity;this.bumpMap=a.bumpMap;this.bumpScale=a.bumpScale;this.normalMap=a.normalMap;this.normalScale.copy(a.normalScale);this.displacementMap=a.displacementMap;this.displacementScale=a.displacementScale;this.displacementBias=a.displacementBias;this.specularMap=a.specularMap;this.alphaMap=a.alphaMap;this.envMap=a.envMap;this.combine=a.combine;this.reflectivity=a.reflectivity;this.refractionRatio=a.refractionRatio;this.fog=a.fog;this.shading=a.shading;this.wireframe=a.wireframe;this.wireframeLinewidth=a.wireframeLinewidth;this.wireframeLinecap=a.wireframeLinecap;this.wireframeLinejoin=a.wireframeLinejoin;this.vertexColors=a.vertexColors;this.skinning=a.skinning;this.morphTargets=a.morphTargets;this.morphNormals=a.morphNormals;return this};THREE.MeshStandardMaterial=function(a){THREE.Material.call(this);this.type="MeshStandardMaterial";this.color=new THREE.Color(16777215);this.metalness=this.roughness=.5;this.lightMap=this.map=null;this.lightMapIntensity=1;this.aoMap=null;this.aoMapIntensity=1;this.emissive=new THREE.Color(0);this.emissiveIntensity=1;this.bumpMap=this.emissiveMap=null;this.bumpScale=1;this.normalMap=null;this.normalScale=new THREE.Vector2(1,1);this.displacementMap=null;this.displacementScale=1;this.displacementBias=0;this.envMap=this.alphaMap=this.metalnessMap=this.roughnessMap=null;this.envMapIntensity=1;this.refractionRatio=.98;this.fog=!0;this.shading=THREE.SmoothShading;this.blending=THREE.NormalBlending;this.wireframe=!1;this.wireframeLinewidth=1;this.wireframeLinejoin=this.wireframeLinecap="round";this.vertexColors=THREE.NoColors;this.morphNormals=this.morphTargets=this.skinning=!1;this.setValues(a)};THREE.MeshStandardMaterial.prototype=Object.create(THREE.Material.prototype);THREE.MeshStandardMaterial.prototype.constructor=THREE.MeshStandardMaterial;THREE.MeshStandardMaterial.prototype.copy=function(a){THREE.Material.prototype.copy.call(this,a);this.color.copy(a.color);this.roughness=a.roughness;this.metalness=a.metalness;this.map=a.map;this.lightMap=a.lightMap;this.lightMapIntensity=a.lightMapIntensity;this.aoMap=a.aoMap;this.aoMapIntensity=a.aoMapIntensity;this.emissive.copy(a.emissive);this.emissiveMap=a.emissiveMap;this.emissiveIntensity=a.emissiveIntensity;this.bumpMap=a.bumpMap;this.bumpScale=a.bumpScale;this.normalMap=a.normalMap;this.normalScale.copy(a.normalScale);this.displacementMap=a.displacementMap;this.displacementScale=a.displacementScale;this.displacementBias=a.displacementBias;this.roughnessMap=a.roughnessMap;this.metalnessMap=a.metalnessMap;this.alphaMap=a.alphaMap;this.envMap=a.envMap;this.envMapIntensity=a.envMapIntensity;this.refractionRatio=a.refractionRatio;this.fog=a.fog;this.shading=a.shading;this.wireframe=a.wireframe;this.wireframeLinewidth=a.wireframeLinewidth;this.wireframeLinecap=a.wireframeLinecap;this.wireframeLinejoin=a.wireframeLinejoin;this.vertexColors=a.vertexColors;this.skinning=a.skinning;this.morphTargets=a.morphTargets;this.morphNormals=a.morphNormals;return this};THREE.MeshDepthMaterial=function(a){THREE.Material.call(this);this.type="MeshDepthMaterial";this.wireframe=this.morphTargets=!1;this.wireframeLinewidth=1;this.setValues(a)};THREE.MeshDepthMaterial.prototype=Object.create(THREE.Material.prototype);THREE.MeshDepthMaterial.prototype.constructor=THREE.MeshDepthMaterial;THREE.MeshDepthMaterial.prototype.copy=function(a){THREE.Material.prototype.copy.call(this,a);this.wireframe=a.wireframe;this.wireframeLinewidth=a.wireframeLinewidth;return this};THREE.MeshNormalMaterial=function(a){THREE.Material.call(this,a);this.type="MeshNormalMaterial";this.wireframe=!1;this.wireframeLinewidth=1;this.morphTargets=!1;this.setValues(a)};THREE.MeshNormalMaterial.prototype=Object.create(THREE.Material.prototype);THREE.MeshNormalMaterial.prototype.constructor=THREE.MeshNormalMaterial;THREE.MeshNormalMaterial.prototype.copy=function(a){THREE.Material.prototype.copy.call(this,a);this.wireframe=a.wireframe;this.wireframeLinewidth=a.wireframeLinewidth;return this};THREE.MultiMaterial=function(a){this.uuid=THREE.Math.generateUUID();this.type="MultiMaterial";this.materials=a instanceof Array?a:[];this.visible=!0};THREE.MultiMaterial.prototype={constructor:THREE.MultiMaterial,toJSON:function(a){for(var b={metadata:{version:4.2,type:"material",generator:"MaterialExporter"},uuid:this.uuid,type:this.type,materials:[]},c=this.materials,d=0,e=c.length;da.x||1a.x?0:1;break;case THREE.MirroredRepeatWrapping:1===Math.abs(Math.floor(a.x)%2)?a.x=Math.ceil(a.x)-a.x:a.x-=Math.floor(a.x)}if(0>a.y||1a.y?0:1;break;case THREE.MirroredRepeatWrapping:1===Math.abs(Math.floor(a.y)%2)?a.y=Math.ceil(a.y)-a.y:a.y-=Math.floor(a.y)}this.flipY&&(a.y=1-a.y)}}};THREE.EventDispatcher.prototype.apply(THREE.Texture.prototype);THREE.TextureIdCount=0;THREE.CanvasTexture=function(a,b,c,d,e,f,g,h,k){THREE.Texture.call(this,a,b,c,d,e,f,g,h,k);this.needsUpdate=!0};THREE.CanvasTexture.prototype=Object.create(THREE.Texture.prototype);THREE.CanvasTexture.prototype.constructor=THREE.CanvasTexture;THREE.CubeTexture=function(a,b,c,d,e,f,g,h,k){a=void 0!==a?a:[];b=void 0!==b?b:THREE.CubeReflectionMapping;THREE.Texture.call(this,a,b,c,d,e,f,g,h,k);this.flipY=!1};THREE.CubeTexture.prototype=Object.create(THREE.Texture.prototype);THREE.CubeTexture.prototype.constructor=THREE.CubeTexture;Object.defineProperty(THREE.CubeTexture.prototype,"images",{get:function(){return this.image},set:function(a){this.image=a}});THREE.CompressedTexture=function(a,b,c,d,e,f,g,h,k,l,p){THREE.Texture.call(this,null,f,g,h,k,l,d,e,p);this.image={width:b,height:c};this.mipmaps=a;this.generateMipmaps=this.flipY=!1};THREE.CompressedTexture.prototype=Object.create(THREE.Texture.prototype);THREE.CompressedTexture.prototype.constructor=THREE.CompressedTexture;THREE.DataTexture=function(a,b,c,d,e,f,g,h,k,l,p){THREE.Texture.call(this,null,f,g,h,k,l,d,e,p);this.image={data:a,width:b,height:c};this.magFilter=void 0!==k?k:THREE.NearestFilter;this.minFilter=void 0!==l?l:THREE.NearestFilter;this.generateMipmaps=this.flipY=!1};THREE.DataTexture.prototype=Object.create(THREE.Texture.prototype);THREE.DataTexture.prototype.constructor=THREE.DataTexture;THREE.VideoTexture=function(a,b,c,d,e,f,g,h,k){function l(){requestAnimationFrame(l);a.readyState===a.HAVE_ENOUGH_DATA&&(p.needsUpdate=!0)}THREE.Texture.call(this,a,b,c,d,e,f,g,h,k);this.generateMipmaps=!1;var p=this;l()};THREE.VideoTexture.prototype=Object.create(THREE.Texture.prototype);THREE.VideoTexture.prototype.constructor=THREE.VideoTexture;THREE.Group=function(){THREE.Object3D.call(this);this.type="Group"};THREE.Group.prototype=Object.create(THREE.Object3D.prototype);THREE.Group.prototype.constructor=THREE.Group;THREE.Points=function(a,b){THREE.Object3D.call(this);this.type="Points";this.geometry=void 0!==a?a:new THREE.Geometry;this.material=void 0!==b?b:new THREE.PointsMaterial({color:16777215*Math.random()})};THREE.Points.prototype=Object.create(THREE.Object3D.prototype);THREE.Points.prototype.constructor=THREE.Points;THREE.Points.prototype.raycast=function(){var a=new THREE.Matrix4,b=new THREE.Ray,c=new THREE.Sphere;return function(d,e){function f(a,c){var f=b.distanceSqToPoint(a);if(fd.far||e.push({distance:l,distanceToRay:Math.sqrt(f),point:h.clone(),index:c,face:null,object:g})}}var g=this,h=this.geometry,k=this.matrixWorld,l=d.params.Points.threshold;null===h.boundingSphere&&h.computeBoundingSphere();c.copy(h.boundingSphere);c.applyMatrix4(k);if(!1!==d.ray.intersectsSphere(c)){a.getInverse(k);b.copy(d.ray).applyMatrix4(a);var l=l/((this.scale.x+this.scale.y+this.scale.z)/3),p=l*l,l=new THREE.Vector3;if(h instanceof THREE.BufferGeometry){var n=h.index,h=h.attributes.position.array;if(null!==n)for(var m=n.array,n=0,q=m.length;nf||(p.applyMatrix4(this.matrixWorld),v=d.ray.origin.distanceTo(p),vd.far||e.push({distance:v,point:h.clone().applyMatrix4(this.matrixWorld),index:g,face:null,faceIndex:null,object:this}))}else for(g=0,u=q.length/3-1;gf||(p.applyMatrix4(this.matrixWorld),v=d.ray.origin.distanceTo(p),vd.far||e.push({distance:v,point:h.clone().applyMatrix4(this.matrixWorld),index:g,face:null,faceIndex:null,object:this}))}else if(g instanceof THREE.Geometry)for(k=g.vertices,l=k.length,g=0;gf||(p.applyMatrix4(this.matrixWorld),v=d.ray.origin.distanceTo(p),vd.far||e.push({distance:v,point:h.clone().applyMatrix4(this.matrixWorld),index:g,face:null,faceIndex:null,object:this}))}}}();THREE.Line.prototype.clone=function(){return new this.constructor(this.geometry,this.material).copy(this)};THREE.LineStrip=0;THREE.LinePieces=1;THREE.LineSegments=function(a,b){THREE.Line.call(this,a,b);this.type="LineSegments"};THREE.LineSegments.prototype=Object.create(THREE.Line.prototype);THREE.LineSegments.prototype.constructor=THREE.LineSegments;THREE.Mesh=function(a,b){THREE.Object3D.call(this);this.type="Mesh";this.geometry=void 0!==a?a:new THREE.Geometry;this.material=void 0!==b?b:new THREE.MeshBasicMaterial({color:16777215*Math.random()});this.drawMode=THREE.TrianglesDrawMode;this.updateMorphTargets()};THREE.Mesh.prototype=Object.create(THREE.Object3D.prototype);THREE.Mesh.prototype.constructor=THREE.Mesh;THREE.Mesh.prototype.setDrawMode=function(a){this.drawMode=a};THREE.Mesh.prototype.updateMorphTargets=function(){if(void 0!==this.geometry.morphTargets&&0b.far?null:{distance:c,point:s.clone(),object:a}}function c(c,d,e,f,l,p,n,s){g.fromArray(f,3*p);h.fromArray(f,3*n);k.fromArray(f,3*s);if(c=b(c,d,e,g,h,k,t))l&&(m.fromArray(l,2*p),q.fromArray(l,2*n),u.fromArray(l,2*s),c.uv=a(t,g,h,k,m,q,u)),c.face=new THREE.Face3(p,n,s,THREE.Triangle.normal(g,h,k)),c.faceIndex=p;return c}var d=new THREE.Matrix4,e=new THREE.Ray,f=new THREE.Sphere,g=new THREE.Vector3,h=new THREE.Vector3,k=new THREE.Vector3,l=new THREE.Vector3,p=new THREE.Vector3,n=new THREE.Vector3,m=new THREE.Vector2,q=new THREE.Vector2,u=new THREE.Vector2,v=new THREE.Vector3,t=new THREE.Vector3,s=new THREE.Vector3;return function(s,v){var x=this.geometry,D=this.material,z=this.matrixWorld;if(void 0!==D&&(null===x.boundingSphere&&x.computeBoundingSphere(),f.copy(x.boundingSphere),f.applyMatrix4(z),!1!==s.ray.intersectsSphere(f)&&(d.getInverse(z),e.copy(s.ray).applyMatrix4(d),null===x.boundingBox||!1!==e.intersectsBox(x.boundingBox)))){var y,B;if(x instanceof THREE.BufferGeometry){var G,F,D=x.index,z=x.attributes,x=z.position.array;void 0!==z.uv&&(y=z.uv.array);if(null!==D)for(var z=D.array,H=0,L=z.length;H=d[e].distance)d[e-1].object.visible=!1,d[e].object.visible=!0;else break;for(;ethis.scale.x*this.scale.y||c.push({distance:Math.sqrt(d),point:this.position,face:null,object:this})}}();THREE.Sprite.prototype.clone=function(){return new this.constructor(this.material).copy(this)};THREE.Particle=THREE.Sprite;THREE.LensFlare=function(a,b,c,d,e){THREE.Object3D.call(this);this.lensFlares=[];this.positionScreen=new THREE.Vector3;this.customUpdateCallback=void 0;void 0!==a&&this.add(a,b,c,d,e)};THREE.LensFlare.prototype=Object.create(THREE.Object3D.prototype);THREE.LensFlare.prototype.constructor=THREE.LensFlare;THREE.LensFlare.prototype.add=function(a,b,c,d,e,f){void 0===b&&(b=-1);void 0===c&&(c=0);void 0===f&&(f=1);void 0===e&&(e=new THREE.Color(16777215));void 0===d&&(d=THREE.NormalBlending);c=Math.min(c,Math.max(0,c));this.lensFlares.push({texture:a,size:b,distance:c,x:0,y:0,z:0,scale:1,rotation:0,opacity:f,color:e,blending:d})};THREE.LensFlare.prototype.updateLensFlares=function(){var a,b=this.lensFlares.length,c,d=2*-this.positionScreen.x,e=2*-this.positionScreen.y;for(a=0;a= 365 * 24 * 3600) { + result += (t / (365 * 24 * 3600) | 0) + " years "; + t %= 365 * 24 * 3600; + if (t < 24 * 3600) { + result += "0 days "; + } + } + if (t >= 24 * 3600) { + result += (t / (24 * 3600) | 0) + " days "; + } + t %= 24 * 3600; + return result + this.hourMinSec(t); + } +} +var DataFormatters = { + distanceString: function(value){ + return numeral(value).format('0,0.000 a') + "m" + }, -THREE.ShaderChunk.lights_template="\nGeometricContext geometry;\ngeometry.position = - vViewPosition;\ngeometry.normal = normal;\ngeometry.viewDir = normalize( vViewPosition );\nIncidentLight directLight;\n#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct )\n PointLight pointLight;\n for ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n pointLight = pointLights[ i ];\n directLight = getPointDirectLightIrradiance( pointLight, geometry );\n #ifdef USE_SHADOWMAP\n directLight.color *= all( bvec2( pointLight.shadow, directLight.visible ) ) ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ] ) : 1.0;\n #endif\n RE_Direct( directLight, geometry, material, reflectedLight );\n }\n#endif\n#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct )\n SpotLight spotLight;\n for ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n spotLight = spotLights[ i ];\n directLight = getSpotDirectLightIrradiance( spotLight, geometry );\n #ifdef USE_SHADOWMAP\n directLight.color *= all( bvec2( spotLight.shadow, directLight.visible ) ) ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n #endif\n RE_Direct( directLight, geometry, material, reflectedLight );\n }\n#endif\n#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct )\n DirectionalLight directionalLight;\n for ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n directionalLight = directionalLights[ i ];\n directLight = getDirectionalDirectLightIrradiance( directionalLight, geometry );\n #ifdef USE_SHADOWMAP\n directLight.color *= all( bvec2( directionalLight.shadow, directLight.visible ) ) ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n #endif\n RE_Direct( directLight, geometry, material, reflectedLight );\n }\n#endif\n#if defined( RE_IndirectDiffuse )\n vec3 irradiance = getAmbientLightIrradiance( ambientLightColor );\n #ifdef USE_LIGHTMAP\n vec3 lightMapIrradiance = texture2D( lightMap, vUv2 ).xyz * lightMapIntensity;\n #ifndef PHYSICALLY_CORRECT_LIGHTS\n lightMapIrradiance *= PI;\n #endif\n irradiance += lightMapIrradiance;\n #endif\n #if ( NUM_HEMI_LIGHTS > 0 )\n for ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n irradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\n }\n #endif\n #if defined( USE_ENVMAP ) && defined( STANDARD ) && defined( ENVMAP_TYPE_CUBE_UV )\n irradiance += getLightProbeIndirectIrradiance( geometry, 8 );\n #endif\n RE_IndirectDiffuse( irradiance, geometry, material, reflectedLight );\n#endif\n#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )\n vec3 radiance = getLightProbeIndirectRadiance( geometry, Material_BlinnShininessExponent( material ), 8 );\n RE_IndirectSpecular( radiance, geometry, material, reflectedLight );\n#endif\n";THREE.ShaderChunk.logdepthbuf_fragment="#if defined(USE_LOGDEPTHBUF) && defined(USE_LOGDEPTHBUF_EXT)\n gl_FragDepthEXT = log2(vFragDepth) * logDepthBufFC * 0.5;\n#endif";THREE.ShaderChunk.logdepthbuf_pars_fragment="#ifdef USE_LOGDEPTHBUF\n uniform float logDepthBufFC;\n #ifdef USE_LOGDEPTHBUF_EXT\n varying float vFragDepth;\n #endif\n#endif\n";THREE.ShaderChunk.logdepthbuf_pars_vertex="#ifdef USE_LOGDEPTHBUF\n #ifdef USE_LOGDEPTHBUF_EXT\n varying float vFragDepth;\n #endif\n uniform float logDepthBufFC;\n#endif";THREE.ShaderChunk.logdepthbuf_vertex="#ifdef USE_LOGDEPTHBUF\n gl_Position.z = log2(max( EPSILON, gl_Position.w + 1.0 )) * logDepthBufFC;\n #ifdef USE_LOGDEPTHBUF_EXT\n vFragDepth = 1.0 + gl_Position.w;\n #else\n gl_Position.z = (gl_Position.z - 1.0) * gl_Position.w;\n #endif\n#endif\n";THREE.ShaderChunk.map_fragment="#ifdef USE_MAP\n vec4 texelColor = texture2D( map, vUv );\n texelColor = mapTexelToLinear( texelColor );\n diffuseColor *= texelColor;\n#endif\n";THREE.ShaderChunk.map_pars_fragment="#ifdef USE_MAP\n uniform sampler2D map;\n#endif\n";THREE.ShaderChunk.map_particle_fragment="#ifdef USE_MAP\n vec4 mapTexel = texture2D( map, vec2( gl_PointCoord.x, 1.0 - gl_PointCoord.y ) * offsetRepeat.zw + offsetRepeat.xy );\n diffuseColor *= mapTexelToLinear( mapTexel );\n#endif\n";THREE.ShaderChunk.map_particle_pars_fragment="#ifdef USE_MAP\n uniform vec4 offsetRepeat;\n uniform sampler2D map;\n#endif\n";THREE.ShaderChunk.metalnessmap_fragment="float metalnessFactor = metalness;\n#ifdef USE_METALNESSMAP\n vec4 texelMetalness = texture2D( metalnessMap, vUv );\n metalnessFactor *= texelMetalness.r;\n#endif\n";THREE.ShaderChunk.metalnessmap_pars_fragment="#ifdef USE_METALNESSMAP\n uniform sampler2D metalnessMap;\n#endif";THREE.ShaderChunk.morphnormal_vertex="#ifdef USE_MORPHNORMALS\n objectNormal += ( morphNormal0 - normal ) * morphTargetInfluences[ 0 ];\n objectNormal += ( morphNormal1 - normal ) * morphTargetInfluences[ 1 ];\n objectNormal += ( morphNormal2 - normal ) * morphTargetInfluences[ 2 ];\n objectNormal += ( morphNormal3 - normal ) * morphTargetInfluences[ 3 ];\n#endif\n";THREE.ShaderChunk.morphtarget_pars_vertex="#ifdef USE_MORPHTARGETS\n #ifndef USE_MORPHNORMALS\n uniform float morphTargetInfluences[ 8 ];\n #else\n uniform float morphTargetInfluences[ 4 ];\n #endif\n#endif";THREE.ShaderChunk.morphtarget_vertex="#ifdef USE_MORPHTARGETS\n transformed += ( morphTarget0 - position ) * morphTargetInfluences[ 0 ];\n transformed += ( morphTarget1 - position ) * morphTargetInfluences[ 1 ];\n transformed += ( morphTarget2 - position ) * morphTargetInfluences[ 2 ];\n transformed += ( morphTarget3 - position ) * morphTargetInfluences[ 3 ];\n #ifndef USE_MORPHNORMALS\n transformed += ( morphTarget4 - position ) * morphTargetInfluences[ 4 ];\n transformed += ( morphTarget5 - position ) * morphTargetInfluences[ 5 ];\n transformed += ( morphTarget6 - position ) * morphTargetInfluences[ 6 ];\n transformed += ( morphTarget7 - position ) * morphTargetInfluences[ 7 ];\n #endif\n#endif\n";THREE.ShaderChunk.normal_fragment="#ifdef FLAT_SHADED\n vec3 fdx = vec3( dFdx( vViewPosition.x ), dFdx( vViewPosition.y ), dFdx( vViewPosition.z ) );\n vec3 fdy = vec3( dFdy( vViewPosition.x ), dFdy( vViewPosition.y ), dFdy( vViewPosition.z ) );\n vec3 normal = normalize( cross( fdx, fdy ) );\n#else\n vec3 normal = normalize( vNormal );\n #ifdef DOUBLE_SIDED\n normal = normal * ( -1.0 + 2.0 * float( gl_FrontFacing ) );\n #endif\n#endif\n#ifdef USE_NORMALMAP\n normal = perturbNormal2Arb( -vViewPosition, normal );\n#elif defined( USE_BUMPMAP )\n normal = perturbNormalArb( -vViewPosition, normal, dHdxy_fwd() );\n#endif\n";THREE.ShaderChunk.normalmap_pars_fragment="#ifdef USE_NORMALMAP\n uniform sampler2D normalMap;\n uniform vec2 normalScale;\n vec3 perturbNormal2Arb( vec3 eye_pos, vec3 surf_norm ) {\n vec3 q0 = dFdx( eye_pos.xyz );\n vec3 q1 = dFdy( eye_pos.xyz );\n vec2 st0 = dFdx( vUv.st );\n vec2 st1 = dFdy( vUv.st );\n vec3 S = normalize( q0 * st1.t - q1 * st0.t );\n vec3 T = normalize( -q0 * st1.s + q1 * st0.s );\n vec3 N = normalize( surf_norm );\n vec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n mapN.xy = normalScale * mapN.xy;\n mat3 tsn = mat3( S, T, N );\n return normalize( tsn * mapN );\n }\n#endif\n";THREE.ShaderChunk.premultiplied_alpha_fragment="#ifdef PREMULTIPLIED_ALPHA\n gl_FragColor.rgb *= gl_FragColor.a;\n#endif\n";THREE.ShaderChunk.project_vertex="#ifdef USE_SKINNING\n vec4 mvPosition = modelViewMatrix * skinned;\n#else\n vec4 mvPosition = modelViewMatrix * vec4( transformed, 1.0 );\n#endif\ngl_Position = projectionMatrix * mvPosition;\n";THREE.ShaderChunk.roughnessmap_fragment="float roughnessFactor = roughness;\n#ifdef USE_ROUGHNESSMAP\n vec4 texelRoughness = texture2D( roughnessMap, vUv );\n roughnessFactor *= texelRoughness.r;\n#endif\n";THREE.ShaderChunk.roughnessmap_pars_fragment="#ifdef USE_ROUGHNESSMAP\n uniform sampler2D roughnessMap;\n#endif";THREE.ShaderChunk.shadowmap_pars_fragment="#ifdef USE_SHADOWMAP\n #if NUM_DIR_LIGHTS > 0\n uniform sampler2D directionalShadowMap[ NUM_DIR_LIGHTS ];\n varying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHTS ];\n #endif\n #if NUM_SPOT_LIGHTS > 0\n uniform sampler2D spotShadowMap[ NUM_SPOT_LIGHTS ];\n varying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHTS ];\n #endif\n #if NUM_POINT_LIGHTS > 0\n uniform sampler2D pointShadowMap[ NUM_POINT_LIGHTS ];\n varying vec4 vPointShadowCoord[ NUM_POINT_LIGHTS ];\n #endif\n float unpackDepth( const in vec4 rgba_depth ) {\n const vec4 bit_shift = vec4( 1.0 / ( 256.0 * 256.0 * 256.0 ), 1.0 / ( 256.0 * 256.0 ), 1.0 / 256.0, 1.0 );\n return dot( rgba_depth, bit_shift );\n }\n float texture2DCompare( sampler2D depths, vec2 uv, float compare ) {\n return step( compare, unpackDepth( texture2D( depths, uv ) ) );\n }\n float texture2DShadowLerp( sampler2D depths, vec2 size, vec2 uv, float compare ) {\n const vec2 offset = vec2( 0.0, 1.0 );\n vec2 texelSize = vec2( 1.0 ) / size;\n vec2 centroidUV = floor( uv * size + 0.5 ) / size;\n float lb = texture2DCompare( depths, centroidUV + texelSize * offset.xx, compare );\n float lt = texture2DCompare( depths, centroidUV + texelSize * offset.xy, compare );\n float rb = texture2DCompare( depths, centroidUV + texelSize * offset.yx, compare );\n float rt = texture2DCompare( depths, centroidUV + texelSize * offset.yy, compare );\n vec2 f = fract( uv * size + 0.5 );\n float a = mix( lb, lt, f.y );\n float b = mix( rb, rt, f.y );\n float c = mix( a, b, f.x );\n return c;\n }\n float getShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord ) {\n shadowCoord.xyz /= shadowCoord.w;\n shadowCoord.z += shadowBias;\n bvec4 inFrustumVec = bvec4 ( shadowCoord.x >= 0.0, shadowCoord.x <= 1.0, shadowCoord.y >= 0.0, shadowCoord.y <= 1.0 );\n bool inFrustum = all( inFrustumVec );\n bvec2 frustumTestVec = bvec2( inFrustum, shadowCoord.z <= 1.0 );\n bool frustumTest = all( frustumTestVec );\n if ( frustumTest ) {\n #if defined( SHADOWMAP_TYPE_PCF )\n vec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n float dx0 = - texelSize.x * shadowRadius;\n float dy0 = - texelSize.y * shadowRadius;\n float dx1 = + texelSize.x * shadowRadius;\n float dy1 = + texelSize.y * shadowRadius;\n return (\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\n ) * ( 1.0 / 9.0 );\n #elif defined( SHADOWMAP_TYPE_PCF_SOFT )\n vec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n float dx0 = - texelSize.x * shadowRadius;\n float dy0 = - texelSize.y * shadowRadius;\n float dx1 = + texelSize.x * shadowRadius;\n float dy1 = + texelSize.y * shadowRadius;\n return (\n texture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\n texture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\n texture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\n texture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\n texture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy, shadowCoord.z ) +\n texture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\n texture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\n texture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\n texture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\n ) * ( 1.0 / 9.0 );\n #else\n return texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z );\n #endif\n }\n return 1.0;\n }\n vec2 cubeToUV( vec3 v, float texelSizeY ) {\n vec3 absV = abs( v );\n float scaleToCube = 1.0 / max( absV.x, max( absV.y, absV.z ) );\n absV *= scaleToCube;\n v *= scaleToCube * ( 1.0 - 2.0 * texelSizeY );\n vec2 planar = v.xy;\n float almostATexel = 1.5 * texelSizeY;\n float almostOne = 1.0 - almostATexel;\n if ( absV.z >= almostOne ) {\n if ( v.z > 0.0 )\n planar.x = 4.0 - v.x;\n } else if ( absV.x >= almostOne ) {\n float signX = sign( v.x );\n planar.x = v.z * signX + 2.0 * signX;\n } else if ( absV.y >= almostOne ) {\n float signY = sign( v.y );\n planar.x = v.x + 2.0 * signY + 2.0;\n planar.y = v.z * signY - 2.0;\n }\n return vec2( 0.125, 0.25 ) * planar + vec2( 0.375, 0.75 );\n }\n float getPointShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord ) {\n vec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) );\n vec3 lightToPosition = shadowCoord.xyz;\n vec3 bd3D = normalize( lightToPosition );\n float dp = ( length( lightToPosition ) - shadowBias ) / 1000.0;\n #if defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_PCF_SOFT )\n vec2 offset = vec2( - 1, 1 ) * shadowRadius * texelSize.y;\n return (\n texture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyy, texelSize.y ), dp ) +\n texture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyy, texelSize.y ), dp ) +\n texture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyx, texelSize.y ), dp ) +\n texture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyx, texelSize.y ), dp ) +\n texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ) +\n texture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxy, texelSize.y ), dp ) +\n texture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxy, texelSize.y ), dp ) +\n texture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxx, texelSize.y ), dp ) +\n texture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxx, texelSize.y ), dp )\n ) * ( 1.0 / 9.0 );\n #else\n return texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp );\n #endif\n }\n#endif\n";THREE.ShaderChunk.shadowmap_pars_vertex="#ifdef USE_SHADOWMAP\n #if NUM_DIR_LIGHTS > 0\n uniform mat4 directionalShadowMatrix[ NUM_DIR_LIGHTS ];\n varying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHTS ];\n #endif\n #if NUM_SPOT_LIGHTS > 0\n uniform mat4 spotShadowMatrix[ NUM_SPOT_LIGHTS ];\n varying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHTS ];\n #endif\n #if NUM_POINT_LIGHTS > 0\n uniform mat4 pointShadowMatrix[ NUM_POINT_LIGHTS ];\n varying vec4 vPointShadowCoord[ NUM_POINT_LIGHTS ];\n #endif\n#endif\n";THREE.ShaderChunk.shadowmap_vertex="#ifdef USE_SHADOWMAP\n #if NUM_DIR_LIGHTS > 0\n for ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n vDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * worldPosition;\n }\n #endif\n #if NUM_SPOT_LIGHTS > 0\n for ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n vSpotShadowCoord[ i ] = spotShadowMatrix[ i ] * worldPosition;\n }\n #endif\n #if NUM_POINT_LIGHTS > 0\n for ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n vPointShadowCoord[ i ] = pointShadowMatrix[ i ] * worldPosition;\n }\n #endif\n#endif\n";THREE.ShaderChunk.shadowmask_pars_fragment="float getShadowMask() {\n float shadow = 1.0;\n #ifdef USE_SHADOWMAP\n #if NUM_DIR_LIGHTS > 0\n DirectionalLight directionalLight;\n for ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n directionalLight = directionalLights[ i ];\n shadow *= bool( directionalLight.shadow ) ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n }\n #endif\n #if NUM_SPOT_LIGHTS > 0\n SpotLight spotLight;\n for ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n spotLight = spotLights[ i ];\n shadow *= bool( spotLight.shadow ) ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n }\n #endif\n #if NUM_POINT_LIGHTS > 0\n PointLight pointLight;\n for ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n pointLight = pointLights[ i ];\n shadow *= bool( pointLight.shadow ) ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ] ) : 1.0;\n }\n #endif\n #endif\n return shadow;\n}\n";THREE.ShaderChunk.skinbase_vertex="#ifdef USE_SKINNING\n mat4 boneMatX = getBoneMatrix( skinIndex.x );\n mat4 boneMatY = getBoneMatrix( skinIndex.y );\n mat4 boneMatZ = getBoneMatrix( skinIndex.z );\n mat4 boneMatW = getBoneMatrix( skinIndex.w );\n#endif";THREE.ShaderChunk.skinning_pars_vertex="#ifdef USE_SKINNING\n uniform mat4 bindMatrix;\n uniform mat4 bindMatrixInverse;\n #ifdef BONE_TEXTURE\n uniform sampler2D boneTexture;\n uniform int boneTextureWidth;\n uniform int boneTextureHeight;\n mat4 getBoneMatrix( const in float i ) {\n float j = i * 4.0;\n float x = mod( j, float( boneTextureWidth ) );\n float y = floor( j / float( boneTextureWidth ) );\n float dx = 1.0 / float( boneTextureWidth );\n float dy = 1.0 / float( boneTextureHeight );\n y = dy * ( y + 0.5 );\n vec4 v1 = texture2D( boneTexture, vec2( dx * ( x + 0.5 ), y ) );\n vec4 v2 = texture2D( boneTexture, vec2( dx * ( x + 1.5 ), y ) );\n vec4 v3 = texture2D( boneTexture, vec2( dx * ( x + 2.5 ), y ) );\n vec4 v4 = texture2D( boneTexture, vec2( dx * ( x + 3.5 ), y ) );\n mat4 bone = mat4( v1, v2, v3, v4 );\n return bone;\n }\n #else\n uniform mat4 boneGlobalMatrices[ MAX_BONES ];\n mat4 getBoneMatrix( const in float i ) {\n mat4 bone = boneGlobalMatrices[ int(i) ];\n return bone;\n }\n #endif\n#endif\n";THREE.ShaderChunk.skinning_vertex="#ifdef USE_SKINNING\n vec4 skinVertex = bindMatrix * vec4( transformed, 1.0 );\n vec4 skinned = vec4( 0.0 );\n skinned += boneMatX * skinVertex * skinWeight.x;\n skinned += boneMatY * skinVertex * skinWeight.y;\n skinned += boneMatZ * skinVertex * skinWeight.z;\n skinned += boneMatW * skinVertex * skinWeight.w;\n skinned = bindMatrixInverse * skinned;\n#endif\n";THREE.ShaderChunk.skinnormal_vertex="#ifdef USE_SKINNING\n mat4 skinMatrix = mat4( 0.0 );\n skinMatrix += skinWeight.x * boneMatX;\n skinMatrix += skinWeight.y * boneMatY;\n skinMatrix += skinWeight.z * boneMatZ;\n skinMatrix += skinWeight.w * boneMatW;\n skinMatrix = bindMatrixInverse * skinMatrix * bindMatrix;\n objectNormal = vec4( skinMatrix * vec4( objectNormal, 0.0 ) ).xyz;\n#endif\n";THREE.ShaderChunk.specularmap_fragment="float specularStrength;\n#ifdef USE_SPECULARMAP\n vec4 texelSpecular = texture2D( specularMap, vUv );\n specularStrength = texelSpecular.r;\n#else\n specularStrength = 1.0;\n#endif";THREE.ShaderChunk.specularmap_pars_fragment="#ifdef USE_SPECULARMAP\n uniform sampler2D specularMap;\n#endif";THREE.ShaderChunk.tonemapping_fragment="#if defined( TONE_MAPPING )\n gl_FragColor.rgb = toneMapping( gl_FragColor.rgb );\n#endif\n";THREE.ShaderChunk.tonemapping_pars_fragment="#define saturate(a) clamp( a, 0.0, 1.0 )\nuniform float toneMappingExposure;\nuniform float toneMappingWhitePoint;\nvec3 LinearToneMapping( vec3 color ) {\n return toneMappingExposure * color;\n}\nvec3 ReinhardToneMapping( vec3 color ) {\n color *= toneMappingExposure;\n return saturate( color / ( vec3( 1.0 ) + color ) );\n}\n#define Uncharted2Helper( x ) max( ( ( x * ( 0.15 * x + 0.10 * 0.50 ) + 0.20 * 0.02 ) / ( x * ( 0.15 * x + 0.50 ) + 0.20 * 0.30 ) ) - 0.02 / 0.30, vec3( 0.0 ) )\nvec3 Uncharted2ToneMapping( vec3 color ) {\n color *= toneMappingExposure;\n return saturate( Uncharted2Helper( color ) / Uncharted2Helper( vec3( toneMappingWhitePoint ) ) );\n}\nvec3 OptimizedCineonToneMapping( vec3 color ) {\n color *= toneMappingExposure;\n color = max( vec3( 0.0 ), color - 0.004 );\n return pow( ( color * ( 6.2 * color + 0.5 ) ) / ( color * ( 6.2 * color + 1.7 ) + 0.06 ), vec3( 2.2 ) );\n}\n";THREE.ShaderChunk.uv2_pars_fragment="#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n varying vec2 vUv2;\n#endif";THREE.ShaderChunk.uv2_pars_vertex="#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n attribute vec2 uv2;\n varying vec2 vUv2;\n#endif";THREE.ShaderChunk.uv2_vertex="#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n vUv2 = uv2;\n#endif";THREE.ShaderChunk.uv_pars_fragment="#if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP ) || defined( USE_ALPHAMAP ) || defined( USE_EMISSIVEMAP ) || defined( USE_ROUGHNESSMAP ) || defined( USE_METALNESSMAP )\n varying vec2 vUv;\n#endif";THREE.ShaderChunk.uv_pars_vertex="#if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP ) || defined( USE_ALPHAMAP ) || defined( USE_EMISSIVEMAP ) || defined( USE_ROUGHNESSMAP ) || defined( USE_METALNESSMAP )\n varying vec2 vUv;\n uniform vec4 offsetRepeat;\n#endif\n";THREE.ShaderChunk.uv_vertex="#if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP ) || defined( USE_ALPHAMAP ) || defined( USE_EMISSIVEMAP ) || defined( USE_ROUGHNESSMAP ) || defined( USE_METALNESSMAP )\n vUv = uv * offsetRepeat.zw + offsetRepeat.xy;\n#endif";THREE.ShaderChunk.worldpos_vertex="#if defined( USE_ENVMAP ) || defined( PHONG ) || defined( STANDARD ) || defined( LAMBERT ) || defined ( USE_SHADOWMAP )\n #ifdef USE_SKINNING\n vec4 worldPosition = modelMatrix * skinned;\n #else\n vec4 worldPosition = modelMatrix * vec4( transformed, 1.0 );\n #endif\n#endif\n";THREE.UniformsUtils={merge:function(a){for(var b={},c=0;cc;c++)r.deleteFramebuffer(b.__webglFramebuffer[c]),r.deleteRenderbuffer(b.__webglDepthbuffer[c]);else r.deleteFramebuffer(b.__webglFramebuffer),r.deleteRenderbuffer(b.__webglDepthbuffer);U.delete(a.texture);U.delete(a)}ia.textures--}function h(a){a=a.target;a.removeEventListener("dispose",h);k(a);U.delete(a)}function k(a){var b=U.get(a).program;a.program=void 0;void 0!==b&&oa.releaseProgram(b)}function l(a,b){return Math.abs(b[0])-Math.abs(a[0])}function p(a,b){return a.object.renderOrder!==b.object.renderOrder?a.object.renderOrder-b.object.renderOrder:a.material.id!==b.material.id?a.material.id-b.material.id:a.z!==b.z?a.z-b.z:a.id-b.id}function n(a,b){return a.object.renderOrder!==b.object.renderOrder?a.object.renderOrder-b.object.renderOrder:a.z!==b.z?b.z-a.z:a.id-b.id}function m(a,b,c,d,e){var f;c.transparent?(d=S,f=++Y):(d=C,f=++Z);f=d[f];void 0!==f?(f.id=a.id,f.object=a,f.geometry=b,f.material=c,f.z=W.z,f.group=e):(f={id:a.id,object:a,geometry:b,material:c,z:W.z,group:e},d.push(f))}function q(a,b){if(!1!==a.visible){if(a.layers.test(b.layers))if(a instanceof THREE.Light)J.push(a);else if(a instanceof THREE.Sprite)!1!==a.frustumCulled&&!0!==za.intersectsObject(a)||ja.push(a);else if(a instanceof THREE.LensFlare)ea.push(a);else if(a instanceof THREE.ImmediateRenderObject)!0===X.sortObjects&&(W.setFromMatrixPosition(a.matrixWorld),W.applyProjection(sa)),m(a,null,a.material,W.z,null);else if(a instanceof THREE.Mesh||a instanceof THREE.Line||a instanceof THREE.Points)if(a instanceof THREE.SkinnedMesh&&a.skeleton.update(),!1===a.frustumCulled||!0===za.intersectsObject(a)){var c=a.material;if(!0===c.visible){!0===X.sortObjects&&(W.setFromMatrixPosition(a.matrixWorld),W.applyProjection(sa));var d=pa.update(a);if(c instanceof THREE.MultiMaterial)for(var e=d.groups,f=c.materials,c=0,g=e.length;c=da.maxTextures&&console.warn("WebGLRenderer: trying to use "+a+" texture units while this GPU supports only "+da.maxTextures);ta+=1;return a}function w(a,b,c,d){var e;if("1i"===b)r.uniform1i(c,d);else if("1f"===b)r.uniform1f(c,d);else if("2f"===b)r.uniform2f(c,d[0],d[1]);else if("3f"===b)r.uniform3f(c,d[0],d[1],d[2]);else if("4f"===b)r.uniform4f(c,d[0],d[1],d[2],d[3]);else if("1iv"===b)r.uniform1iv(c,d);else if("3iv"===b)r.uniform3iv(c,d);else if("1fv"===b)r.uniform1fv(c,d);else if("2fv"===b)r.uniform2fv(c,d);else if("3fv"===b)r.uniform3fv(c,d);else if("4fv"===b)r.uniform4fv(c,d);else if("Matrix2fv"===b)r.uniformMatrix2fv(c,!1,d);else if("Matrix3fv"===b)r.uniformMatrix3fv(c,!1,d);else if("Matrix4fv"===b)r.uniformMatrix4fv(c,!1,d);else if("i"===b)r.uniform1i(c,d);else if("f"===b)r.uniform1f(c,d);else if("v2"===b)r.uniform2f(c,d.x,d.y);else if("v3"===b)r.uniform3f(c,d.x,d.y,d.z);else if("v4"===b)r.uniform4f(c,d.x,d.y,d.z,d.w);else if("c"===b)r.uniform3f(c,d.r,d.g,d.b);else if("s"===b){a=a.properties;for(var g in a){e=a[g];var f=c[g],h=d[g];w(e,e.type,f,h)}}else if("sa"===b){a=a.properties;b=0;for(var k=d.length;bb||a.height>b){var c=b/Math.max(a.width,a.height),d=document.createElement("canvas");d.width=Math.floor(a.width*c);d.height=Math.floor(a.height*c);d.getContext("2d").drawImage(a,0,0,a.width,a.height,0,0,d.width,d.height);console.warn("THREE.WebGLRenderer: image is too big ("+a.width+"x"+a.height+"). Resized to "+d.width+"x"+d.height,a);return d}return a}function z(a){return THREE.Math.isPowerOfTwo(a.width)&&THREE.Math.isPowerOfTwo(a.height)}function y(a,b){var c=U.get(a);if(6===a.image.length)if(0h;h++)g[h]=!X.autoScaleCubemaps||d||e?e?a.image[h].image:a.image[h]:D(a.image[h],da.maxCubemapSize);var k=z(g[0]),l=L(a.format),m=L(a.type);x(r.TEXTURE_CUBE_MAP,a,k);for(h=0;6>h;h++)if(d)for(var n,p=g[h].mipmaps,q=0,s=p.length;qf;f++)b.__webglFramebuffer[f]=r.createFramebuffer()}else b.__webglFramebuffer=r.createFramebuffer();if(d){K.bindTexture(r.TEXTURE_CUBE_MAP,c.__webglTexture);x(r.TEXTURE_CUBE_MAP,a.texture,e);for(f=0;6>f;f++)G(b.__webglFramebuffer[f],a,r.COLOR_ATTACHMENT0,r.TEXTURE_CUBE_MAP_POSITIVE_X+f);a.texture.generateMipmaps&&e&&r.generateMipmap(r.TEXTURE_CUBE_MAP);K.bindTexture(r.TEXTURE_CUBE_MAP,null)}else K.bindTexture(r.TEXTURE_2D,c.__webglTexture),x(r.TEXTURE_2D,a.texture,e),G(b.__webglFramebuffer,a,r.COLOR_ATTACHMENT0,r.TEXTURE_2D),a.texture.generateMipmaps&&e&&r.generateMipmap(r.TEXTURE_2D),K.bindTexture(r.TEXTURE_2D,null);if(a.depthBuffer){b=U.get(a);if(a instanceof THREE.WebGLRenderTargetCube)for(b.__webglDepthbuffer=[],c=0;6>c;c++)r.bindFramebuffer(r.FRAMEBUFFER,b.__webglFramebuffer[c]),b.__webglDepthbuffer[c]=r.createRenderbuffer(),F(b.__webglDepthbuffer[c],a);else r.bindFramebuffer(r.FRAMEBUFFER,b.__webglFramebuffer),b.__webglDepthbuffer=r.createRenderbuffer(),F(b.__webglDepthbuffer,a);r.bindFramebuffer(r.FRAMEBUFFER,null)}}b=a instanceof THREE.WebGLRenderTargetCube;a?(c=U.get(a),c=b?c.__webglFramebuffer[a.activeCubeFace]:c.__webglFramebuffer,qa.copy(a.scissor),Aa=a.scissorTest,ka.copy(a.viewport)):(c=null,qa.copy(ya).multiplyScalar(aa),Aa=Ba,ka.copy(la).multiplyScalar(aa));ua!==c&&(r.bindFramebuffer(r.FRAMEBUFFER,c),ua=c);K.scissor(qa);K.setScissorTest(Aa);K.viewport(ka);b&&(b=U.get(a.texture),r.framebufferTexture2D(r.FRAMEBUFFER,r.COLOR_ATTACHMENT0,r.TEXTURE_CUBE_MAP_POSITIVE_X+a.activeCubeFace,b.__webglTexture,a.activeMipMapLevel))};this.readRenderTargetPixels=function(a,b,c,d,e,g){if(!1===a instanceof THREE.WebGLRenderTarget)console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.");else{var f=U.get(a).__webglFramebuffer;if(f){var h=!1;f!==ua&&(r.bindFramebuffer(r.FRAMEBUFFER,f),h=!0);try{var k=a.texture;k.format!==THREE.RGBAFormat&&L(k.format)!==r.getParameter(r.IMPLEMENTATION_COLOR_READ_FORMAT)?console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format."):k.type===THREE.UnsignedByteType||L(k.type)===r.getParameter(r.IMPLEMENTATION_COLOR_READ_TYPE)||k.type===THREE.FloatType&&V.get("WEBGL_color_buffer_float")||k.type===THREE.HalfFloatType&&V.get("EXT_color_buffer_half_float")?r.checkFramebufferStatus(r.FRAMEBUFFER)===r.FRAMEBUFFER_COMPLETE?r.readPixels(b,c,d,e,L(k.format),L(k.type),g):console.error("THREE.WebGLRenderer.readRenderTargetPixels: readPixels from renderTarget failed. Framebuffer not complete."):console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.")}finally{h&&r.bindFramebuffer(r.FRAMEBUFFER,ua)}}}}};THREE.WebGLRenderTarget=function(a,b,c){this.uuid=THREE.Math.generateUUID();this.width=a;this.height=b;this.scissor=new THREE.Vector4(0,0,a,b);this.scissorTest=!1;this.viewport=new THREE.Vector4(0,0,a,b);c=c||{};void 0===c.minFilter&&(c.minFilter=THREE.LinearFilter);this.texture=new THREE.Texture(void 0,void 0,c.wrapS,c.wrapT,c.magFilter,c.minFilter,c.format,c.type,c.anisotropy);this.depthBuffer=void 0!==c.depthBuffer?c.depthBuffer:!0;this.stencilBuffer=void 0!==c.stencilBuffer?c.stencilBuffer:!0};THREE.WebGLRenderTarget.prototype={constructor:THREE.WebGLRenderTarget,setSize:function(a,b){if(this.width!==a||this.height!==b)this.width=a,this.height=b,this.dispose();this.viewport.set(0,0,a,b);this.scissor.set(0,0,a,b)},clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.width=a.width;this.height=a.height;this.viewport.copy(a.viewport);this.texture=a.texture.clone();this.depthBuffer=a.depthBuffer;this.stencilBuffer=a.stencilBuffer;return this},dispose:function(){this.dispatchEvent({type:"dispose"})}};THREE.EventDispatcher.prototype.apply(THREE.WebGLRenderTarget.prototype);THREE.WebGLRenderTargetCube=function(a,b,c){THREE.WebGLRenderTarget.call(this,a,b,c);this.activeMipMapLevel=this.activeCubeFace=0};THREE.WebGLRenderTargetCube.prototype=Object.create(THREE.WebGLRenderTarget.prototype);THREE.WebGLRenderTargetCube.prototype.constructor=THREE.WebGLRenderTargetCube;THREE.WebGLBufferRenderer=function(a,b,c){var d;this.setMode=function(a){d=a};this.render=function(b,f){a.drawArrays(d,b,f);c.calls++;c.vertices+=f;d===a.TRIANGLES&&(c.faces+=f/3)};this.renderInstances=function(e){var f=b.get("ANGLE_instanced_arrays");if(null===f)console.error("THREE.WebGLBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.");else{var g=e.attributes.position,h=0,h=g instanceof THREE.InterleavedBufferAttribute?g.data.count:g.count;f.drawArraysInstancedANGLE(d,0,h,e.maxInstancedCount);c.calls++;c.vertices+=h*e.maxInstancedCount;d===a.TRIANGLES&&(c.faces+=e.maxInstancedCount*h/3)}}};THREE.WebGLIndexedBufferRenderer=function(a,b,c){var d,e,f;this.setMode=function(a){d=a};this.setIndex=function(c){c.array instanceof Uint32Array&&b.get("OES_element_index_uint")?(e=a.UNSIGNED_INT,f=4):(e=a.UNSIGNED_SHORT,f=2)};this.render=function(b,h){a.drawElements(d,h,e,b*f);c.calls++;c.vertices+=h;d===a.TRIANGLES&&(c.faces+=h/3)};this.renderInstances=function(g,h,k){var l=b.get("ANGLE_instanced_arrays");null===l?console.error("THREE.WebGLBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays."):(l.drawElementsInstancedANGLE(d,k,e,h*f,g.maxInstancedCount),c.calls++,c.vertices+=k*g.maxInstancedCount,d===a.TRIANGLES&&(c.faces+=g.maxInstancedCount*k/3))}};THREE.WebGLExtensions=function(a){var b={};this.get=function(c){if(void 0!==b[c])return b[c];var d;switch(c){case"EXT_texture_filter_anisotropic":d=a.getExtension("EXT_texture_filter_anisotropic")||a.getExtension("MOZ_EXT_texture_filter_anisotropic")||a.getExtension("WEBKIT_EXT_texture_filter_anisotropic");break;case"WEBGL_compressed_texture_s3tc":d=a.getExtension("WEBGL_compressed_texture_s3tc")||a.getExtension("MOZ_WEBGL_compressed_texture_s3tc")||a.getExtension("WEBKIT_WEBGL_compressed_texture_s3tc");break;case"WEBGL_compressed_texture_pvrtc":d=a.getExtension("WEBGL_compressed_texture_pvrtc")||a.getExtension("WEBKIT_WEBGL_compressed_texture_pvrtc");break;case"WEBGL_compressed_texture_etc1":d=a.getExtension("WEBGL_compressed_texture_etc1");break;default:d=a.getExtension(c)}null===d&&console.warn("THREE.WebGLRenderer: "+c+" extension not supported.");return b[c]=d}};THREE.WebGLCapabilities=function(a,b,c){function d(b){if("highp"===b){if(0c){var d=b;b=c;c=d}d=a[b];return void 0===d?(a[b]=[c],!0):-1===d.indexOf(c)?(d.push(c),!0):!1}var f=new THREE.WebGLGeometries(a,b,c);this.getAttributeBuffer=function(a){return a instanceof THREE.InterleavedBufferAttribute?b.get(a.data).__webglBuffer:b.get(a).__webglBuffer};this.getWireframeAttribute=function(c){var f=b.get(c);if(void 0!==f.wireframe)return f.wireframe;var k=[],l=c.index,p=c.attributes;c=p.position;if(null!==l)for(var p={},l=l.array,n=0,m=l.length;n/g,function(a,b){var c=THREE.ShaderChunk[b];if(void 0===c)throw Error("Can not resolve #include <"+b+">");return k(c)})}function l(a){return a.replace(/for \( int i \= (\d+)\; i < (\d+)\; i \+\+ \) \{([\s\S]+?)(?=\})\}/g,function(a,b,c,d){a="";for(b=parseInt(b);b 0 ) {\nfloat depth = gl_FragCoord.z / gl_FragCoord.w;\nfloat fogFactor = 0.0;\nif ( fogType == 1 ) {\nfogFactor = smoothstep( fogNear, fogFar, depth );\n} else {\nconst float LOG2 = 1.442695;\nfogFactor = exp2( - fogDensity * fogDensity * depth * depth * LOG2 );\nfogFactor = 1.0 - clamp( fogFactor, 0.0, 1.0 );\n}\ngl_FragColor = mix( gl_FragColor, vec4( fogColor, gl_FragColor.w ), fogFactor );\n}\n}"].join("\n")); + velocityString: function(value){ + return numeral(value).format('0,0.000 a') + "m/s" + }, -x.compileShader(I);x.compileShader(O);x.attachShader(M,I);x.attachShader(M,O);x.linkProgram(M);B=M;s=x.getAttribLocation(B,"position");w=x.getAttribLocation(B,"uv");c=x.getUniformLocation(B,"uvOffset");d=x.getUniformLocation(B,"uvScale");e=x.getUniformLocation(B,"rotation");f=x.getUniformLocation(B,"scale");g=x.getUniformLocation(B,"color");h=x.getUniformLocation(B,"map");k=x.getUniformLocation(B,"opacity");l=x.getUniformLocation(B,"modelViewMatrix");p=x.getUniformLocation(B,"projectionMatrix");n=x.getUniformLocation(B,"fogType");m=x.getUniformLocation(B,"fogDensity");q=x.getUniformLocation(B,"fogNear");u=x.getUniformLocation(B,"fogFar");v=x.getUniformLocation(B,"fogColor");t=x.getUniformLocation(B,"alphaTest");M=document.createElement("canvas");M.width=8;M.height=8;I=M.getContext("2d");I.fillStyle="white";I.fillRect(0,0,8,8);G=new THREE.Texture(M);G.needsUpdate=!0}x.useProgram(B);D.initAttributes();D.enableAttribute(s);D.enableAttribute(w);D.disableUnusedAttributes();D.disable(x.CULL_FACE);D.enable(x.BLEND);x.bindBuffer(x.ARRAY_BUFFER,z);x.vertexAttribPointer(s,2,x.FLOAT,!1,16,0);x.vertexAttribPointer(w,2,x.FLOAT,!1,16,8);x.bindBuffer(x.ELEMENT_ARRAY_BUFFER,y);x.uniformMatrix4fv(p,!1,N.projectionMatrix.elements);D.activeTexture(x.TEXTURE0);x.uniform1i(h,0);I=M=0;(O=A.fog)?(x.uniform3f(v,O.color.r,O.color.g,O.color.b),O instanceof THREE.Fog?(x.uniform1f(q,O.near),x.uniform1f(u,O.far),x.uniform1i(n,1),I=M=1):O instanceof THREE.FogExp2&&(x.uniform1f(m,O.density),x.uniform1i(n,2),I=M=2)):(x.uniform1i(n,0),I=M=0);for(var O=0,Q=b.length;Oc)return null;var d=[],e=[],f=[],g,h,k;if(0=l--){console.warn("THREE.ShapeUtils: Unable to triangulate polygon! in triangulate()");break}g=h;c<=g&&(g=0);h=g+1;c<=h&&(h=0);k=h+1;c<=k&&(k=0);var p;a:{var n=p=void 0,m=void 0,q=void 0,u=void 0,v=void 0,t=void 0,s=void 0,w=void 0,n=a[e[g]].x,m=a[e[g]].y,q=a[e[h]].x,u=a[e[h]].y,v=a[e[k]].x,t=a[e[k]].y;if(Number.EPSILON>(q-n)*(t-m)-(u-m)*(v-n))p=!1;else{var E=void 0,x=void 0,D=void 0,z=void 0,y=void 0,B=void 0,G=void 0,F=void 0,H=void 0,L=void 0,H=F=G=w=s=void 0,E=v-q,x=t-u,D=n-v,z=m-t,y=q-n,B=u-m;for(p=0;p=-Number.EPSILON&&F>=-Number.EPSILON&&G>=-Number.EPSILON)){p=!1;break a}p=!0}}if(p){d.push([a[e[g]],a[e[h]],a[e[k]]]);f.push([e[g],e[h],e[k]]);g=h;for(k=h+1;kNumber.EPSILON){if(0B||B>y)return[];k=l*n-k*p;if(0>k||k>y)return[]}else{if(0d?[]:k===d?f?[]:[g]:a<=d?[g,h]:[g,l]}function e(a,b,c,d){var e=b.x-a.x,f=b.y-a.y;b=c.x-a.x;c=c.y-a.y;var g=d.x-a.x;d=d.y-a.y;a=e*c-f*b;e=e*d-f*g;return Math.abs(a)>Number.EPSILON?(b=g*c-d*b,0f&&(f=d);var g=a+1;g>d&&(g=0);d=e(h[a],h[f],h[g],k[b]);if(!d)return!1;d=k.length-1;f=b-1;0>f&&(f=d);g=b+1;g>d&&(g=0);return(d=e(k[b],k[f],k[g],h[a]))?!0:!1}function f(a,b){var c,e;for(c=0;cN){console.log("Infinite Loop! Holes left:"+l.length+", Probably Hole outside Shape!");break}for(p=F;ph;h++)l=k[h].x+":"+k[h].y,l=p[l],void 0!==l&&(k[h]=l);return n.concat()},isClockWise:function(a){return 0>THREE.ShapeUtils.area(a)},b2:function(){return function(a,b,c,d){var e=1-a;return e*e*b+2*(1-a)*a*c+a*a*d}}(),b3:function(){return function(a,b,c,d,e){var f=1-a,g=1-a;return f*f*f*b+3*g*g*a*c+3*(1-a)*a*a*d+a*a*a*e}}()};THREE.Curve=function(){};THREE.Curve.prototype={constructor:THREE.Curve,getPoint:function(a){console.warn("THREE.Curve: Warning, getPoint() not implemented!");return null},getPointAt:function(a){a=this.getUtoTmapping(a);return this.getPoint(a)},getPoints:function(a){a||(a=5);var b,c=[];for(b=0;b<=a;b++)c.push(this.getPoint(b/a));return c},getSpacedPoints:function(a){a||(a=5);var b,c=[];for(b=0;b<=a;b++)c.push(this.getPointAt(b/a));return c},getLength:function(){var a=this.getLengths();return a[a.length-1]},getLengths:function(a){a||(a=this.__arcLengthDivisions?this.__arcLengthDivisions:200);if(this.cacheArcLengths&&this.cacheArcLengths.length===a+1&&!this.needsUpdate)return this.cacheArcLengths;this.needsUpdate=!1;var b=[],c,d=this.getPoint(0),e,f=0;b.push(0);for(e=1;e<=a;e++)c=this.getPoint(e/a),f+=c.distanceTo(d),b.push(f),d=c;return this.cacheArcLengths=b},updateArcLengths:function(){this.needsUpdate=!0;this.getLengths()},getUtoTmapping:function(a,b){var c=this.getLengths(),d=0,e=c.length,f;f=b?b:a*c[e-1];for(var g=0,h=e-1,k;g<=h;)if(d=Math.floor(g+(h-g)/2),k=c[d]-f,0>k)g=d+1;else if(0b&&(b=0);1=b)return a=this.curves[d],b=1-(c[d]-b)/a.getLength(),a.getPointAt(b);d++}return null};THREE.CurvePath.prototype.getLength=function(){var a=this.getCurveLengths();return a[a.length-1]};THREE.CurvePath.prototype.getCurveLengths=function(){if(this.cacheLengths&&this.cacheLengths.length===this.curves.length)return this.cacheLengths;for(var a=[],b=0,c=0,d=this.curves.length;cNumber.EPSILON){if(0>l&&(g=b[f],k=-k,h=b[e],l=-l),!(a.yh.y))if(a.y===g.y){if(a.x===g.x)return!0}else{e=l*(a.x-g.x)-k*(a.y-g.y);if(0===e)return!0;0>e||(d=!d)}}else if(a.y===g.y&&(h.x<=a.x&&a.x<=g.x||g.x<=a.x&&a.x<=h.x))return!0}return d}var e=THREE.ShapeUtils.isClockWise,f=function(a){for(var b=[],c=new THREE.Path,d=0,e=a.length;db.length-2?b.length-1:c+1],b=b[c>b.length-3?b.length-1:c+2],c=THREE.CurveUtils.interpolate;return new THREE.Vector2(c(d.x,e.x,f.x,b.x,a),c(d.y,e.y,f.y,b.y,a))};THREE.EllipseCurve=function(a,b,c,d,e,f,g,h){this.aX=a;this.aY=b;this.xRadius=c;this.yRadius=d;this.aStartAngle=e;this.aEndAngle=f;this.aClockwise=g;this.aRotation=h||0};THREE.EllipseCurve.prototype=Object.create(THREE.Curve.prototype);THREE.EllipseCurve.prototype.constructor=THREE.EllipseCurve;THREE.EllipseCurve.prototype.getPoint=function(a){var b=this.aEndAngle-this.aStartAngle;0>b&&(b+=2*Math.PI);b>2*Math.PI&&(b-=2*Math.PI);b=!0===this.aClockwise?this.aEndAngle+(1-a)*(2*Math.PI-b):this.aStartAngle+a*b;a=this.aX+this.xRadius*Math.cos(b);var c=this.aY+this.yRadius*Math.sin(b);if(0!==this.aRotation){var b=Math.cos(this.aRotation),d=Math.sin(this.aRotation),e=a;a=(e-this.aX)*b-(c-this.aY)*d+this.aX;c=(e-this.aX)*d+(c-this.aY)*b+this.aY}return new THREE.Vector2(a,c)};THREE.ArcCurve=function(a,b,c,d,e,f){THREE.EllipseCurve.call(this,a,b,c,c,d,e,f)};THREE.ArcCurve.prototype=Object.create(THREE.EllipseCurve.prototype);THREE.ArcCurve.prototype.constructor=THREE.ArcCurve;THREE.LineCurve3=THREE.Curve.create(function(a,b){this.v1=a;this.v2=b},function(a){var b=new THREE.Vector3;b.subVectors(this.v2,this.v1);b.multiplyScalar(a);b.add(this.v1);return b});THREE.QuadraticBezierCurve3=THREE.Curve.create(function(a,b,c){this.v0=a;this.v1=b;this.v2=c},function(a){var b=THREE.ShapeUtils.b2;return new THREE.Vector3(b(a,this.v0.x,this.v1.x,this.v2.x),b(a,this.v0.y,this.v1.y,this.v2.y),b(a,this.v0.z,this.v1.z,this.v2.z))});THREE.CubicBezierCurve3=THREE.Curve.create(function(a,b,c,d){this.v0=a;this.v1=b;this.v2=c;this.v3=d},function(a){var b=THREE.ShapeUtils.b3;return new THREE.Vector3(b(a,this.v0.x,this.v1.x,this.v2.x,this.v3.x),b(a,this.v0.y,this.v1.y,this.v2.y,this.v3.y),b(a,this.v0.z,this.v1.z,this.v2.z,this.v3.z))});THREE.SplineCurve3=THREE.Curve.create(function(a){console.warn("THREE.SplineCurve3 will be deprecated. Please use THREE.CatmullRomCurve3");this.points=void 0==a?[]:a},function(a){var b=this.points;a*=b.length-1;var c=Math.floor(a);a-=c;var d=b[0==c?c:c-1],e=b[c],f=b[c>b.length-2?b.length-1:c+1],b=b[c>b.length-3?b.length-1:c+2],c=THREE.CurveUtils.interpolate;return new THREE.Vector3(c(d.x,e.x,f.x,b.x,a),c(d.y,e.y,f.y,b.y,a),c(d.z,e.z,f.z,b.z,a))});THREE.CatmullRomCurve3=function(){function a(){}var b=new THREE.Vector3,c=new a,d=new a,e=new a;a.prototype.init=function(a,b,c,d){this.c0=a;this.c1=c;this.c2=-3*a+3*b-2*c-d;this.c3=2*a-2*b+c+d};a.prototype.initNonuniformCatmullRom=function(a,b,c,d,e,p,n){a=((b-a)/e-(c-a)/(e+p)+(c-b)/p)*p;d=((c-b)/p-(d-b)/(p+n)+(d-c)/n)*p;this.init(b,c,a,d)};a.prototype.initCatmullRom=function(a,b,c,d,e){this.init(b,c,e*(c-a),e*(d-b))};a.prototype.calc=function(a){var b=a*a;return this.c0+this.c1*a+this.c2*b+this.c3*b*a};return THREE.Curve.create(function(a){this.points=a||[];this.closed=!1},function(a){var g=this.points,h,k;k=g.length;2>k&&console.log("duh, you need at least 2 points");a*=k-(this.closed?0:1);h=Math.floor(a);a-=h;this.closed?h+=0h&&(h=1);1e-4>k&&(k=h);1e-4>m&&(m=h);c.initNonuniformCatmullRom(l.x,p.x,n.x,g.x,k,h,m);d.initNonuniformCatmullRom(l.y,p.y,n.y,g.y,k,h,m);e.initNonuniformCatmullRom(l.z,p.z,n.z,g.z,k,h,m)}else"catmullrom"===this.type&&(k=void 0!==this.tension?this.tension:.5,c.initCatmullRom(l.x,p.x,n.x,g.x,k),d.initCatmullRom(l.y,p.y,n.y,g.y,k),e.initCatmullRom(l.z,p.z,n.z,g.z,k));return new THREE.Vector3(c.calc(a),d.calc(a),e.calc(a))})}();THREE.ClosedSplineCurve3=function(a){console.warn("THREE.ClosedSplineCurve3 has been deprecated. Please use THREE.CatmullRomCurve3.");THREE.CatmullRomCurve3.call(this,a);this.type="catmullrom";this.closed=!0};THREE.ClosedSplineCurve3.prototype=Object.create(THREE.CatmullRomCurve3.prototype);THREE.BoxGeometry=function(a,b,c,d,e,f){THREE.Geometry.call(this);this.type="BoxGeometry";this.parameters={width:a,height:b,depth:c,widthSegments:d,heightSegments:e,depthSegments:f};this.fromBufferGeometry(new THREE.BoxBufferGeometry(a,b,c,d,e,f));this.mergeVertices()};THREE.BoxGeometry.prototype=Object.create(THREE.Geometry.prototype);THREE.BoxGeometry.prototype.constructor=THREE.BoxGeometry;THREE.CubeGeometry=THREE.BoxGeometry;THREE.BoxBufferGeometry=function(a,b,c,d,e,f){function g(a,b,c,d,e,f,g,k,l,L,A){var N=f/l,M=g/L,I=f/2,O=g/2,Q=k/2;g=l+1;for(var P=L+1,T=f=0,J=new THREE.Vector3,C=0;Cm;m++){e[0]=n[g[m]];e[1]=n[g[(m+1)%3]];e.sort(c);var q=e.toString();void 0===f[q]?f[q]={vert1:e[0],vert2:e[1],face1:l,face2:void 0}:f[q].face2=l}e=[];for(q in f)if(g=f[q],void 0===g.face2||h[g.face1].normal.dot(h[g.face2].normal)<=d)l=k[g.vert1],e.push(l.x),e.push(l.y),e.push(l.z),l=k[g.vert2],e.push(l.x),e.push(l.y),e.push(l.z);this.addAttribute("position",new THREE.BufferAttribute(new Float32Array(e),3))};THREE.EdgesGeometry.prototype=Object.create(THREE.BufferGeometry.prototype);THREE.EdgesGeometry.prototype.constructor=THREE.EdgesGeometry;THREE.ExtrudeGeometry=function(a,b){"undefined"!==typeof a&&(THREE.Geometry.call(this),this.type="ExtrudeGeometry",a=Array.isArray(a)?a:[a],this.addShapeList(a,b),this.computeFaceNormals())};THREE.ExtrudeGeometry.prototype=Object.create(THREE.Geometry.prototype);THREE.ExtrudeGeometry.prototype.constructor=THREE.ExtrudeGeometry;THREE.ExtrudeGeometry.prototype.addShapeList=function(a,b){for(var c=a.length,d=0;dNumber.EPSILON){var k=Math.sqrt(h),l=Math.sqrt(f*f+g*g),h=b.x-e/k;b=b.y+d/k;f=((c.x-g/l-h)*g-(c.y+f/l-b)*f)/(d*g-e*f);c=h+d*f-a.x;a=b+e*f-a.y;d=c*c+a*a;if(2>=d)return new THREE.Vector2(c,a);d=Math.sqrt(d/2)}else a=!1,d>Number.EPSILON?f>Number.EPSILON&&(a=!0):d<-Number.EPSILON?f<-Number.EPSILON&&(a=!0):Math.sign(e)===Math.sign(g)&&(a=!0),a?(c=-e,a=d,d=Math.sqrt(h)):(c=d,a=e,d=Math.sqrt(h/2));return new THREE.Vector2(c/d,a/d)}function e(a,b){var c,d;for(C=a.length;0<=--C;){c=C;d=C-1;0>d&&(d=a.length-1);for(var e=0,f=q+2*p,e=0;eMath.abs(b.y-c.y)?[new THREE.Vector2(b.x,1-b.z),new THREE.Vector2(c.x,1-c.z),new THREE.Vector2(d.x,1-d.z),new THREE.Vector2(e.x,1-e.z)]:[new THREE.Vector2(b.y,1-b.z),new THREE.Vector2(c.y,1-c.z),new THREE.Vector2(d.y,1-d.z),new THREE.Vector2(e.y,1-e.z)]}};THREE.ShapeGeometry=function(a,b){THREE.Geometry.call(this);this.type="ShapeGeometry";!1===Array.isArray(a)&&(a=[a]);this.addShapeList(a,b);this.computeFaceNormals()};THREE.ShapeGeometry.prototype=Object.create(THREE.Geometry.prototype);THREE.ShapeGeometry.prototype.constructor=THREE.ShapeGeometry;THREE.ShapeGeometry.prototype.addShapeList=function(a,b){for(var c=0,d=a.length;cNumber.EPSILON&&(h.normalize(),d=Math.acos(THREE.Math.clamp(e[l-1].dot(e[l]),-1,1)),f[l].applyMatrix4(k.makeRotationAxis(h,d))),g[l].crossVectors(e[l],f[l]);if(c)for(d=Math.acos(THREE.Math.clamp(f[0].dot(f[b-1]),-1,1)),d/=b-1,0c&&1===a.x&&(a=new THREE.Vector2(a.x-1,a.y));0===b.x&&0===b.z&&(a=new THREE.Vector2(c/2/Math.PI+.5,a.y));return a.clone()}THREE.Geometry.call(this);this.type="PolyhedronGeometry";this.parameters={vertices:a,indices:b,radius:c,detail:d};c=c||1;d=d||0;for(var k=this,l=0,p=a.length;lq&&(.2>d&&(b[0].x+=1),.2>a&&(b[1].x+=1),.2>n&&(b[2].x+=1));l=0;for(p=this.vertices.length;ln;n++){c[0]=p[e[n]];c[1]=p[e[(n+1)%3]];c.sort(b);var m=c.toString();void 0===d[m]&&(k[2*h]=c[0],k[2*h+1]=c[1],d[m]=!0,h++)}c=new Float32Array(6*h);a=0;for(l=h;an;n++)d=f[k[2*a+n]],h=6*a+3*n,c[h+0]=d.x,c[h+1]=d.y,c[h+2]=d.z;this.addAttribute("position",new THREE.BufferAttribute(c,3))}else if(a instanceof THREE.BufferGeometry){if(null!==a.index){l=a.index.array;f=a.attributes.position;e=a.groups;h=0;0===e.length&&a.addGroup(0,l.length);k=new Uint32Array(2*l.length);g=0;for(p=e.length;gn;n++)c[0]=l[a+n],c[1]=l[a+(n+1)%3],c.sort(b),m=c.toString(),void 0===d[m]&&(k[2*h]=c[0],k[2*h+1]=c[1],d[m]=!0,h++)}c=new Float32Array(6*h);a=0;for(l=h;an;n++)h=6*a+3*n,d=k[2*a+n],c[h+0]=f.getX(d),c[h+1]=f.getY(d),c[h+2]=f.getZ(d)}else for(f=a.attributes.position.array,h=f.length/3,k=h/3,c=new Float32Array(6*h),a=0,l=k;an;n++)h=18*a+6*n,k=9*a+3*n,c[h+0]=f[k],c[h+1]=f[k+1],c[h+2]=f[k+2],d=9*a+(n+1)%3*3,c[h+3]=f[d],c[h+4]=f[d+1],c[h+5]=f[d+2];this.addAttribute("position",new THREE.BufferAttribute(c,3))}};THREE.WireframeGeometry.prototype=Object.create(THREE.BufferGeometry.prototype);THREE.WireframeGeometry.prototype.constructor=THREE.WireframeGeometry;THREE.AxisHelper=function(a){a=a||1;var b=new Float32Array([0,0,0,a,0,0,0,0,0,0,a,0,0,0,0,0,0,a]),c=new Float32Array([1,0,0,1,.6,0,0,1,0,.6,1,0,0,0,1,0,.6,1]);a=new THREE.BufferGeometry;a.addAttribute("position",new THREE.BufferAttribute(b,3));a.addAttribute("color",new THREE.BufferAttribute(c,3));b=new THREE.LineBasicMaterial({vertexColors:THREE.VertexColors});THREE.LineSegments.call(this,a,b)};THREE.AxisHelper.prototype=Object.create(THREE.LineSegments.prototype);THREE.AxisHelper.prototype.constructor=THREE.AxisHelper;THREE.ArrowHelper=function(){var a=new THREE.Geometry;a.vertices.push(new THREE.Vector3(0,0,0),new THREE.Vector3(0,1,0));var b=new THREE.CylinderGeometry(0,.5,1,5,1);b.translate(0,-.5,0);return function(c,d,e,f,g,h){THREE.Object3D.call(this);void 0===f&&(f=16776960);void 0===e&&(e=1);void 0===g&&(g=.2*e);void 0===h&&(h=.2*g);this.position.copy(d);this.line=new THREE.Line(a,new THREE.LineBasicMaterial({color:f}));this.line.matrixAutoUpdate=!1;this.add(this.line);this.cone=new THREE.Mesh(b,new THREE.MeshBasicMaterial({color:f}));this.cone.matrixAutoUpdate=!1;this.add(this.cone);this.setDirection(c);this.setLength(e,g,h)}}();THREE.ArrowHelper.prototype=Object.create(THREE.Object3D.prototype);THREE.ArrowHelper.prototype.constructor=THREE.ArrowHelper;THREE.ArrowHelper.prototype.setDirection=function(){var a=new THREE.Vector3,b;return function(c){.99999c.y?this.quaternion.set(1,0,0,0):(a.set(c.z,0,-c.x).normalize(),b=Math.acos(c.y),this.quaternion.setFromAxisAngle(a,b))}}();THREE.ArrowHelper.prototype.setLength=function(a,b,c){void 0===b&&(b=.2*a);void 0===c&&(c=.2*b);this.line.scale.set(1,Math.max(0,a-b),1);this.line.updateMatrix();this.cone.scale.set(c,b,c);this.cone.position.y=a;this.cone.updateMatrix()};THREE.ArrowHelper.prototype.setColor=function(a){this.line.material.color.set(a);this.cone.material.color.set(a)};THREE.BoxHelper=function(a){var b=new Uint16Array([0,1,1,2,2,3,3,0,4,5,5,6,6,7,7,4,0,4,1,5,2,6,3,7]),c=new Float32Array(24),d=new THREE.BufferGeometry;d.setIndex(new THREE.BufferAttribute(b,1));d.addAttribute("position",new THREE.BufferAttribute(c,3));THREE.LineSegments.call(this,d,new THREE.LineBasicMaterial({color:16776960}));void 0!==a&&this.update(a)};THREE.BoxHelper.prototype=Object.create(THREE.LineSegments.prototype);THREE.BoxHelper.prototype.constructor=THREE.BoxHelper;THREE.BoxHelper.prototype.update=function(){var a=new THREE.Box3;return function(b){a.setFromObject(b);if(!a.isEmpty()){b=a.min;var c=a.max,d=this.geometry.attributes.position,e=d.array;e[0]=c.x;e[1]=c.y;e[2]=c.z;e[3]=b.x;e[4]=c.y;e[5]=c.z;e[6]=b.x;e[7]=b.y;e[8]=c.z;e[9]=c.x;e[10]=b.y;e[11]=c.z;e[12]=c.x;e[13]=c.y;e[14]=b.z;e[15]=b.x;e[16]=c.y;e[17]=b.z;e[18]=b.x;e[19]=b.y;e[20]=b.z;e[21]=c.x;e[22]=b.y;e[23]=b.z;d.needsUpdate=!0;this.geometry.computeBoundingSphere()}}}();THREE.BoundingBoxHelper=function(a,b){var c=void 0!==b?b:8947848;this.object=a;this.box=new THREE.Box3;THREE.Mesh.call(this,new THREE.BoxGeometry(1,1,1),new THREE.MeshBasicMaterial({color:c,wireframe:!0}))};THREE.BoundingBoxHelper.prototype=Object.create(THREE.Mesh.prototype);THREE.BoundingBoxHelper.prototype.constructor=THREE.BoundingBoxHelper;THREE.BoundingBoxHelper.prototype.update=function(){this.box.setFromObject(this.object);this.box.size(this.scale);this.box.center(this.position)};THREE.CameraHelper=function(a){function b(a,b,d){c(a,d);c(b,d)}function c(a,b){d.vertices.push(new THREE.Vector3);d.colors.push(new THREE.Color(b));void 0===f[a]&&(f[a]=[]);f[a].push(d.vertices.length-1)}var d=new THREE.Geometry,e=new THREE.LineBasicMaterial({color:16777215,vertexColors:THREE.FaceColors}),f={};b("n1","n2",16755200);b("n2","n4",16755200);b("n4","n3",16755200);b("n3","n1",16755200);b("f1","f2",16755200);b("f2","f4",16755200);b("f4","f3",16755200);b("f3","f1",16755200);b("n1","f1",16755200);b("n2","f2",16755200);b("n3","f3",16755200);b("n4","f4",16755200);b("p","n1",16711680);b("p","n2",16711680);b("p","n3",16711680);b("p","n4",16711680);b("u1","u2",43775);b("u2","u3",43775);b("u3","u1",43775);b("c","t",16777215);b("p","c",3355443);b("cn1","cn2",3355443);b("cn3","cn4",3355443);b("cf1","cf2",3355443);b("cf3","cf4",3355443);THREE.LineSegments.call(this,d,e);this.camera=a;this.camera.updateProjectionMatrix();this.matrix=a.matrixWorld;this.matrixAutoUpdate=!1;this.pointMap=f;this.update()};THREE.CameraHelper.prototype=Object.create(THREE.LineSegments.prototype);THREE.CameraHelper.prototype.constructor=THREE.CameraHelper;THREE.CameraHelper.prototype.update=function(){function a(a,g,h,k){d.set(g,h,k).unproject(e);a=c[a];if(void 0!==a)for(g=0,h=a.length;gd;d++)c.faces[d].color=this.colors[4>d?0:1];d=new THREE.MeshBasicMaterial({vertexColors:THREE.FaceColors,wireframe:!0});this.lightSphere=new THREE.Mesh(c,d);this.add(this.lightSphere);this.update()};THREE.HemisphereLightHelper.prototype=Object.create(THREE.Object3D.prototype);THREE.HemisphereLightHelper.prototype.constructor=THREE.HemisphereLightHelper;THREE.HemisphereLightHelper.prototype.dispose=function(){this.lightSphere.geometry.dispose();this.lightSphere.material.dispose()};THREE.HemisphereLightHelper.prototype.update=function(){var a=new THREE.Vector3;return function(){this.colors[0].copy(this.light.color).multiplyScalar(this.light.intensity);this.colors[1].copy(this.light.groundColor).multiplyScalar(this.light.intensity);this.lightSphere.lookAt(a.setFromMatrixPosition(this.light.matrixWorld).negate());this.lightSphere.geometry.colorsNeedUpdate=!0}}();THREE.PointLightHelper=function(a,b){this.light=a;this.light.updateMatrixWorld();var c=new THREE.SphereGeometry(b,4,2),d=new THREE.MeshBasicMaterial({wireframe:!0,fog:!1});d.color.copy(this.light.color).multiplyScalar(this.light.intensity);THREE.Mesh.call(this,c,d);this.matrix=this.light.matrixWorld;this.matrixAutoUpdate=!1};THREE.PointLightHelper.prototype=Object.create(THREE.Mesh.prototype);THREE.PointLightHelper.prototype.constructor=THREE.PointLightHelper;THREE.PointLightHelper.prototype.dispose=function(){this.geometry.dispose();this.material.dispose()};THREE.PointLightHelper.prototype.update=function(){this.material.color.copy(this.light.color).multiplyScalar(this.light.intensity)};THREE.SkeletonHelper=function(a){this.bones=this.getBoneList(a);for(var b=new THREE.Geometry,c=0;ch.end&&(h.end=f);c||(c=k)}}for(k in d)h=d[k],this.createAnimation(k,h.start,h.end,a);this.firstAnimation=c};THREE.MorphBlendMesh.prototype.setAnimationDirectionForward=function(a){if(a=this.animationsMap[a])a.direction=1,a.directionBackwards=!1};THREE.MorphBlendMesh.prototype.setAnimationDirectionBackward=function(a){if(a=this.animationsMap[a])a.direction=-1,a.directionBackwards=!0};THREE.MorphBlendMesh.prototype.setAnimationFPS=function(a,b){var c=this.animationsMap[a];c&&(c.fps=b,c.duration=(c.end-c.start)/c.fps)};THREE.MorphBlendMesh.prototype.setAnimationDuration=function(a,b){var c=this.animationsMap[a];c&&(c.duration=b,c.fps=(c.end-c.start)/c.duration)};THREE.MorphBlendMesh.prototype.setAnimationWeight=function(a,b){var c=this.animationsMap[a];c&&(c.weight=b)};THREE.MorphBlendMesh.prototype.setAnimationTime=function(a,b){var c=this.animationsMap[a];c&&(c.time=b)};THREE.MorphBlendMesh.prototype.getAnimationTime=function(a){var b=0;if(a=this.animationsMap[a])b=a.time;return b};THREE.MorphBlendMesh.prototype.getAnimationDuration=function(a){var b=-1;if(a=this.animationsMap[a])b=a.duration;return b};THREE.MorphBlendMesh.prototype.playAnimation=function(a){var b=this.animationsMap[a];b?(b.time=0,b.active=!0):console.warn("THREE.MorphBlendMesh: animation["+a+"] undefined in .playAnimation()")};THREE.MorphBlendMesh.prototype.stopAnimation=function(a){if(a=this.animationsMap[a])a.active=!1};THREE.MorphBlendMesh.prototype.update=function(a){for(var b=0,c=this.animationsList.length;bd.duration||0>d.time)d.direction*=-1,d.time>d.duration&&(d.time=d.duration,d.directionBackwards=!0),0>d.time&&(d.time=0,d.directionBackwards=!1)}else d.time%=d.duration,0>d.time&&(d.time+=d.duration);var f=d.start+THREE.Math.clamp(Math.floor(d.time/e),0,d.length-1),g=d.weight;f!==d.currentFrame&&(this.morphTargetInfluences[d.lastFrame]=0,this.morphTargetInfluences[d.currentFrame]=1*g,this.morphTargetInfluences[f]=0,d.lastFrame=d.currentFrame,d.currentFrame=f);e=d.time%e/e;d.directionBackwards&&(e=1-e);d.currentFrame!==d.lastFrame?(this.morphTargetInfluences[d.currentFrame]=e*g,this.morphTargetInfluences[d.lastFrame]=(1-e)*g):this.morphTargetInfluences[d.currentFrame]=g}}};"use strict";void 0===Date.now&&(Date.now=function(){return(new Date).valueOf()});var TWEEN=TWEEN||function(){var a=[];return{REVISION:"14",getAll:function(){return a},removeAll:function(){a=[]},add:function(c){a.push(c)},remove:function(c){c=a.indexOf(c);-1!==c&&a.splice(c,1)},update:function(c){if(0===a.length)return!1;for(var b=0,c=void 0!==c?c:"undefined"!==typeof window&&void 0!==window.performance&&void 0!==window.performance.now?window.performance.now():Date.now();b(a*=2)?.5*a*a:-.5*(--a*(a-2)-1)}},Cubic:{In:function(a){return a*a*a},Out:function(a){return--a*a*a+1},InOut:function(a){return 1>(a*=2)?.5*a*a*a:.5*((a-=2)*a*a+2)}},Quartic:{In:function(a){return a*a*a*a},Out:function(a){return 1- --a*a*a*a},InOut:function(a){return 1>(a*=2)?.5*a*a*a*a:-.5*((a-=2)*a*a*a-2)}},Quintic:{In:function(a){return a*a*a*a*a},Out:function(a){return--a*a*a*a*a+1},InOut:function(a){return 1>(a*=2)?.5*a*a*a*a*a:.5*((a-=2)*a*a*a*a+2)}},Sinusoidal:{In:function(a){return 1-Math.cos(a*Math.PI/2)},Out:function(a){return Math.sin(a*Math.PI/2)},InOut:function(a){return.5*(1-Math.cos(Math.PI*a))}},Exponential:{In:function(a){return 0===a?0:Math.pow(1024,a-1)},Out:function(a){return 1===a?1:1-Math.pow(2,-10*a)},InOut:function(a){return 0===a?0:1===a?1:1>(a*=2)?.5*Math.pow(1024,a-1):.5*(-Math.pow(2,-10*(a-1))+2)}},Circular:{In:function(a){return 1-Math.sqrt(1-a*a)},Out:function(a){return Math.sqrt(1- --a*a)},InOut:function(a){return 1>(a*=2)?-.5*(Math.sqrt(1-a*a)-1):.5*(Math.sqrt(1-(a-=2)*a)+1)}},Elastic:{In:function(a){var c,b=.1;if(0===a)return 0;if(1===a)return 1;!b||1>b?(b=1,c=.1):c=.4*Math.asin(1/b)/(2*Math.PI);return-(b*Math.pow(2,10*(a-=1))*Math.sin((a-c)*2*Math.PI/.4))},Out:function(a){var c,b=.1;if(0===a)return 0;if(1===a)return 1;!b||1>b?(b=1,c=.1):c=.4*Math.asin(1/b)/(2*Math.PI);return b*Math.pow(2,-10*a)*Math.sin((a-c)*2*Math.PI/.4)+1},InOut:function(a){var c,b=.1;if(0===a)return 0;if(1===a)return 1;!b||1>b?(b=1,c=.1):c=.4*Math.asin(1/b)/(2*Math.PI);return 1>(a*=2)?-.5*b*Math.pow(2,10*(a-=1))*Math.sin((a-c)*2*Math.PI/.4):.5*b*Math.pow(2,-10*(a-=1))*Math.sin((a-c)*2*Math.PI/.4)+1}},Back:{In:function(a){return a*a*(2.70158*a-1.70158)},Out:function(a){return--a*a*(2.70158*a+1.70158)+1},InOut:function(a){return 1>(a*=2)?.5*a*a*(3.5949095*a-2.5949095):.5*((a-=2)*a*(3.5949095*a+2.5949095)+2)}},Bounce:{In:function(a){return 1-TWEEN.Easing.Bounce.Out(1-a)},Out:function(a){return a<1/2.75?7.5625*a*a:a<2/2.75?7.5625*(a-=1.5/2.75)*a+.75:a<2.5/2.75?7.5625*(a-=2.25/2.75)*a+.9375:7.5625*(a-=2.625/2.75)*a+.984375},InOut:function(a){return.5>a?.5*TWEEN.Easing.Bounce.In(2*a):.5*TWEEN.Easing.Bounce.Out(2*a-1)+.5}}};TWEEN.Interpolation={Linear:function(a,c){var b=a.length-1,d=b*c,e=Math.floor(d),g=TWEEN.Interpolation.Utils.Linear;return 0>c?g(a[0],a[1],d):1b?b:e+1],d-e)},Bezier:function(a,c){var b=0,d=a.length-1,e=Math.pow,g=TWEEN.Interpolation.Utils.Bernstein,h;for(h=0;h<=d;h++)b+=e(1-c,d-h)*e(c,h)*a[h]*g(d,h);return b},CatmullRom:function(a,c){var b=a.length-1,d=b*c,e=Math.floor(d),g=TWEEN.Interpolation.Utils.CatmullRom;return a[0]===a[b]?(0>c&&(e=Math.floor(d=b*(1+c))),g(a[(e-1+b)%b],a[e],a[(e+1)%b],a[(e+2)%b],d-e)):0>c?a[0]-(g(a[0],a[0],a[1],a[1],-d)-a[0]):1180){delta=delta-360}else if(delta<-180){delta=360+delta}return delta},initializeNavBall:function(){this.renderer=new THREE.WebGLRenderer({alpha:true,antialias:true});this.renderer.setSize(1,1);this.container.update(this.renderer.domElement);this.resize();Event.observe(window,"resize",this.resize.bind(this));var scene=new THREE.Scene;var camera=new THREE.PerspectiveCamera(32,1,.01,1e3);camera.position.z=190;scene.add(new THREE.AmbientLight(11184810));var light1=new THREE.DirectionalLight(16777215,1);light1.position.set(1500,1500,500);var light2=new THREE.DirectionalLight(16777215,.5);light2.position.set(-1500,-1500,500);scene.add(light1);scene.add(light2);var navballGeometry=new THREE.SphereGeometry(this.displayRadius,48,48);var navballTexture=THREE.ImageUtils.loadTexture("../assets/images/navball.png");navballTexture.anisotropy=this.renderer.getMaxAnisotropy();var navballMaterial=new THREE.MeshPhongMaterial({map:navballTexture,bumpMap:THREE.ImageUtils.loadTexture("../assets/images/navball-normal.png"),bumpScale:.25,shininess:80});this.navballMesh=new THREE.Mesh(navballGeometry,navballMaterial);scene.add(this.navballMesh);var animate=function(){window.setTimeout(function(){requestAnimationFrame(animate)},this.datalink.rate/60);TWEEN.update();this.renderer.render(scene,camera)}.bind(this);requestAnimationFrame(animate)},resize:function(){var width=this.container.getWidth();var height=this.container.getHeight();this.renderer.setSize(width,height)},initializeDatalink:function(){this.datalink.subscribeToData(["n.pitch","n.roll","n.heading"]);this.datalink.addReceiverFunction(this.update.bind(this))}});var AltitudeTracker=Class.create({initialize:function(datalink,altitudeTrackerId,options){this.datalink=datalink;this.altitudeTrackerId=altitudeTrackerId;this.altitudeTracker=$(this.altitudeTrackerId);this.options=Object.extend({maxDataPoints:10},options);this.altitudeData=[];this.heightFromTerrainData=[];this.initializeDatalink()},update:function(data){this.altitudeData.push(data["v.altitude"]);if(data["v.terrainHeight"]>-1&&data["v.heightFromTerrain"]>-1){this.heightFromTerrainData.push(data["v.terrainHeight"])}else{this.heightFromTerrainData.push(0)}if(this.altitudeData.length>=this.options.maxDataPoints){this.altitudeData.shift()}if(this.heightFromTerrainData.length>=this.options.maxDataPoints){this.heightFromTerrainData.shift()}if(!this.altitudeTrackerChart){this.initializeChart()}window.requestAnimationFrame(function(){this.altitudeTrackerChart.update(this.generateData())}.bind(this))},initializeDatalink:function(){this.datalink.subscribeToData(["v.altitude","v.terrainHeight","v.heightFromTerrain"]);this.datalink.addReceiverFunction(this.update.bind(this))},generateData:function(){var labelSize=Math.max(this.altitudeData.length,this.heightFromTerrainData.length);var labels=[];for(var i=0;i -1, + Gecko: ua.indexOf('Gecko') > -1 && ua.indexOf('KHTML') === -1, + MobileSafari: /Apple.*Mobile/.test(ua) + } + })(), + + BrowserFeatures: { + XPath: !!document.evaluate, + + SelectorsAPI: !!document.querySelector, + + ElementExtensions: (function() { + var constructor = window.Element || window.HTMLElement; + return !!(constructor && constructor.prototype); + })(), + SpecificElementExtensions: (function() { + if (typeof window.HTMLDivElement !== 'undefined') + return true; + + var div = document.createElement('div'), + form = document.createElement('form'), + isSupported = false; + + if (div['__proto__'] && (div['__proto__'] !== form['__proto__'])) { + isSupported = true; + } + + div = form = null; + + return isSupported; + })() + }, + + ScriptFragment: ']*>([\\S\\s]*?)<\/script\\s*>', + JSONFilter: /^\/\*-secure-([\s\S]*)\*\/\s*$/, + + emptyFunction: function() { }, + + K: function(x) { return x } +}; + +if (Prototype.Browser.MobileSafari) + Prototype.BrowserFeatures.SpecificElementExtensions = false; +/* Based on Alex Arnell's inheritance implementation. */ + +var Class = (function() { + + var IS_DONTENUM_BUGGY = (function(){ + for (var p in { toString: 1 }) { + if (p === 'toString') return false; + } + return true; + })(); + + function subclass() {}; + function create() { + var parent = null, properties = $A(arguments); + if (Object.isFunction(properties[0])) + parent = properties.shift(); + + function klass() { + this.initialize.apply(this, arguments); + } + + Object.extend(klass, Class.Methods); + klass.superclass = parent; + klass.subclasses = []; + + if (parent) { + subclass.prototype = parent.prototype; + klass.prototype = new subclass; + parent.subclasses.push(klass); + } + + for (var i = 0, length = properties.length; i < length; i++) + klass.addMethods(properties[i]); + + if (!klass.prototype.initialize) + klass.prototype.initialize = Prototype.emptyFunction; + + klass.prototype.constructor = klass; + return klass; + } + + function addMethods(source) { + var ancestor = this.superclass && this.superclass.prototype, + properties = Object.keys(source); + + if (IS_DONTENUM_BUGGY) { + if (source.toString != Object.prototype.toString) + properties.push("toString"); + if (source.valueOf != Object.prototype.valueOf) + properties.push("valueOf"); + } + + for (var i = 0, length = properties.length; i < length; i++) { + var property = properties[i], value = source[property]; + if (ancestor && Object.isFunction(value) && + value.argumentNames()[0] == "$super") { + var method = value; + value = (function(m) { + return function() { return ancestor[m].apply(this, arguments); }; + })(property).wrap(method); + + value.valueOf = (function(method) { + return function() { return method.valueOf.call(method); }; + })(method); + + value.toString = (function(method) { + return function() { return method.toString.call(method); }; + })(method); + } + this.prototype[property] = value; + } + + return this; + } + + return { + create: create, + Methods: { + addMethods: addMethods + } + }; +})(); +(function() { + + var _toString = Object.prototype.toString, + _hasOwnProperty = Object.prototype.hasOwnProperty, + NULL_TYPE = 'Null', + UNDEFINED_TYPE = 'Undefined', + BOOLEAN_TYPE = 'Boolean', + NUMBER_TYPE = 'Number', + STRING_TYPE = 'String', + OBJECT_TYPE = 'Object', + FUNCTION_CLASS = '[object Function]', + BOOLEAN_CLASS = '[object Boolean]', + NUMBER_CLASS = '[object Number]', + STRING_CLASS = '[object String]', + ARRAY_CLASS = '[object Array]', + DATE_CLASS = '[object Date]', + NATIVE_JSON_STRINGIFY_SUPPORT = window.JSON && + typeof JSON.stringify === 'function' && + JSON.stringify(0) === '0' && + typeof JSON.stringify(Prototype.K) === 'undefined'; + + + + var DONT_ENUMS = ['toString', 'toLocaleString', 'valueOf', + 'hasOwnProperty', 'isPrototypeOf', 'propertyIsEnumerable', 'constructor']; + + var IS_DONTENUM_BUGGY = (function(){ + for (var p in { toString: 1 }) { + if (p === 'toString') return false; + } + return true; + })(); + + function Type(o) { + switch(o) { + case null: return NULL_TYPE; + case (void 0): return UNDEFINED_TYPE; + } + var type = typeof o; + switch(type) { + case 'boolean': return BOOLEAN_TYPE; + case 'number': return NUMBER_TYPE; + case 'string': return STRING_TYPE; + } + return OBJECT_TYPE; + } + + function extend(destination, source) { + for (var property in source) + destination[property] = source[property]; + return destination; + } + + function inspect(object) { + try { + if (isUndefined(object)) return 'undefined'; + if (object === null) return 'null'; + return object.inspect ? object.inspect() : String(object); + } catch (e) { + if (e instanceof RangeError) return '...'; + throw e; + } + } + + function toJSON(value) { + return Str('', { '': value }, []); + } + + function Str(key, holder, stack) { + var value = holder[key]; + if (Type(value) === OBJECT_TYPE && typeof value.toJSON === 'function') { + value = value.toJSON(key); + } + + var _class = _toString.call(value); + + switch (_class) { + case NUMBER_CLASS: + case BOOLEAN_CLASS: + case STRING_CLASS: + value = value.valueOf(); + } + + switch (value) { + case null: return 'null'; + case true: return 'true'; + case false: return 'false'; + } + + var type = typeof value; + switch (type) { + case 'string': + return value.inspect(true); + case 'number': + return isFinite(value) ? String(value) : 'null'; + case 'object': + + for (var i = 0, length = stack.length; i < length; i++) { + if (stack[i] === value) { + throw new TypeError("Cyclic reference to '" + value + "' in object"); + } + } + stack.push(value); + + var partial = []; + if (_class === ARRAY_CLASS) { + for (var i = 0, length = value.length; i < length; i++) { + var str = Str(i, value, stack); + partial.push(typeof str === 'undefined' ? 'null' : str); + } + partial = '[' + partial.join(',') + ']'; + } else { + var keys = Object.keys(value); + for (var i = 0, length = keys.length; i < length; i++) { + var key = keys[i], str = Str(key, value, stack); + if (typeof str !== "undefined") { + partial.push(key.inspect(true)+ ':' + str); + } + } + partial = '{' + partial.join(',') + '}'; + } + stack.pop(); + return partial; + } + } + + function stringify(object) { + return JSON.stringify(object); + } + + function toQueryString(object) { + return $H(object).toQueryString(); + } + + function toHTML(object) { + return object && object.toHTML ? object.toHTML() : String.interpret(object); + } + + function keys(object) { + if (Type(object) !== OBJECT_TYPE) { throw new TypeError(); } + var results = []; + for (var property in object) { + if (_hasOwnProperty.call(object, property)) + results.push(property); + } + + if (IS_DONTENUM_BUGGY) { + for (var i = 0; property = DONT_ENUMS[i]; i++) { + if (_hasOwnProperty.call(object, property)) + results.push(property); + } + } + + return results; + } + + function values(object) { + var results = []; + for (var property in object) + results.push(object[property]); + return results; + } + + function clone(object) { + return extend({ }, object); + } + + function isElement(object) { + return !!(object && object.nodeType == 1); + } + + function isArray(object) { + return _toString.call(object) === ARRAY_CLASS; + } + + var hasNativeIsArray = (typeof Array.isArray == 'function') + && Array.isArray([]) && !Array.isArray({}); + + if (hasNativeIsArray) { + isArray = Array.isArray; + } + + function isHash(object) { + return object instanceof Hash; + } + + function isFunction(object) { + return _toString.call(object) === FUNCTION_CLASS; + } + + function isString(object) { + return _toString.call(object) === STRING_CLASS; + } + + function isNumber(object) { + return _toString.call(object) === NUMBER_CLASS; + } + + function isDate(object) { + return _toString.call(object) === DATE_CLASS; + } + + function isUndefined(object) { + return typeof object === "undefined"; + } + + extend(Object, { + extend: extend, + inspect: inspect, + toJSON: NATIVE_JSON_STRINGIFY_SUPPORT ? stringify : toJSON, + toQueryString: toQueryString, + toHTML: toHTML, + keys: Object.keys || keys, + values: values, + clone: clone, + isElement: isElement, + isArray: isArray, + isHash: isHash, + isFunction: isFunction, + isString: isString, + isNumber: isNumber, + isDate: isDate, + isUndefined: isUndefined + }); +})(); +Object.extend(Function.prototype, (function() { + var slice = Array.prototype.slice; + + function update(array, args) { + var arrayLength = array.length, length = args.length; + while (length--) array[arrayLength + length] = args[length]; + return array; + } + + function merge(array, args) { + array = slice.call(array, 0); + return update(array, args); + } + + function argumentNames() { + var names = this.toString().match(/^[\s\(]*function[^(]*\(([^)]*)\)/)[1] + .replace(/\/\/.*?[\r\n]|\/\*(?:.|[\r\n])*?\*\//g, '') + .replace(/\s+/g, '').split(','); + return names.length == 1 && !names[0] ? [] : names; + } + + + function bind(context) { + if (arguments.length < 2 && Object.isUndefined(arguments[0])) + return this; + + if (!Object.isFunction(this)) + throw new TypeError("The object is not callable."); + + var nop = function() {}; + var __method = this, args = slice.call(arguments, 1); + + var bound = function() { + var a = merge(args, arguments); + var c = this instanceof bound ? this : context; + return __method.apply(c, a); + }; + + nop.prototype = this.prototype; + bound.prototype = new nop(); + + return bound; + } + + function bindAsEventListener(context) { + var __method = this, args = slice.call(arguments, 1); + return function(event) { + var a = update([event || window.event], args); + return __method.apply(context, a); + } + } + + function curry() { + if (!arguments.length) return this; + var __method = this, args = slice.call(arguments, 0); + return function() { + var a = merge(args, arguments); + return __method.apply(this, a); + } + } + + function delay(timeout) { + var __method = this, args = slice.call(arguments, 1); + timeout = timeout * 1000; + return window.setTimeout(function() { + return __method.apply(__method, args); + }, timeout); + } + + function defer() { + var args = update([0.01], arguments); + return this.delay.apply(this, args); + } + + function wrap(wrapper) { + var __method = this; + return function() { + var a = update([__method.bind(this)], arguments); + return wrapper.apply(this, a); + } + } + + function methodize() { + if (this._methodized) return this._methodized; + var __method = this; + return this._methodized = function() { + var a = update([this], arguments); + return __method.apply(null, a); + }; + } + + var extensions = { + argumentNames: argumentNames, + bindAsEventListener: bindAsEventListener, + curry: curry, + delay: delay, + defer: defer, + wrap: wrap, + methodize: methodize + }; + + if (!Function.prototype.bind) + extensions.bind = bind; + + return extensions; +})()); + + + +(function(proto) { + + + function toISOString() { + return this.getUTCFullYear() + '-' + + (this.getUTCMonth() + 1).toPaddedString(2) + '-' + + this.getUTCDate().toPaddedString(2) + 'T' + + this.getUTCHours().toPaddedString(2) + ':' + + this.getUTCMinutes().toPaddedString(2) + ':' + + this.getUTCSeconds().toPaddedString(2) + 'Z'; + } + + + function toJSON() { + return this.toISOString(); + } + + if (!proto.toISOString) proto.toISOString = toISOString; + if (!proto.toJSON) proto.toJSON = toJSON; + +})(Date.prototype); + + +RegExp.prototype.match = RegExp.prototype.test; + +RegExp.escape = function(str) { + return String(str).replace(/([.*+?^=!:${}()|[\]\/\\])/g, '\\$1'); +}; +var PeriodicalExecuter = Class.create({ + initialize: function(callback, frequency) { + this.callback = callback; + this.frequency = frequency; + this.currentlyExecuting = false; + + this.registerCallback(); + }, + + registerCallback: function() { + this.timer = setInterval(this.onTimerEvent.bind(this), this.frequency * 1000); + }, + + execute: function() { + this.callback(this); + }, + + stop: function() { + if (!this.timer) return; + clearInterval(this.timer); + this.timer = null; + }, + + onTimerEvent: function() { + if (!this.currentlyExecuting) { + try { + this.currentlyExecuting = true; + this.execute(); + this.currentlyExecuting = false; + } catch(e) { + this.currentlyExecuting = false; + throw e; + } + } + } +}); +Object.extend(String, { + interpret: function(value) { + return value == null ? '' : String(value); + }, + specialChar: { + '\b': '\\b', + '\t': '\\t', + '\n': '\\n', + '\f': '\\f', + '\r': '\\r', + '\\': '\\\\' + } +}); + +Object.extend(String.prototype, (function() { + var NATIVE_JSON_PARSE_SUPPORT = window.JSON && + typeof JSON.parse === 'function' && + JSON.parse('{"test": true}').test; + + function prepareReplacement(replacement) { + if (Object.isFunction(replacement)) return replacement; + var template = new Template(replacement); + return function(match) { return template.evaluate(match) }; + } + + function isNonEmptyRegExp(regexp) { + return regexp.source && regexp.source !== '(?:)'; + } + + + function gsub(pattern, replacement) { + var result = '', source = this, match; + replacement = prepareReplacement(replacement); + + if (Object.isString(pattern)) + pattern = RegExp.escape(pattern); + + if (!(pattern.length || isNonEmptyRegExp(pattern))) { + replacement = replacement(''); + return replacement + source.split('').join(replacement) + replacement; + } + + while (source.length > 0) { + match = source.match(pattern) + if (match && match[0].length > 0) { + result += source.slice(0, match.index); + result += String.interpret(replacement(match)); + source = source.slice(match.index + match[0].length); + } else { + result += source, source = ''; + } + } + return result; + } + + function sub(pattern, replacement, count) { + replacement = prepareReplacement(replacement); + count = Object.isUndefined(count) ? 1 : count; + + return this.gsub(pattern, function(match) { + if (--count < 0) return match[0]; + return replacement(match); + }); + } + + function scan(pattern, iterator) { + this.gsub(pattern, iterator); + return String(this); + } + + function truncate(length, truncation) { + length = length || 30; + truncation = Object.isUndefined(truncation) ? '...' : truncation; + return this.length > length ? + this.slice(0, length - truncation.length) + truncation : String(this); + } + + function strip() { + return this.replace(/^\s+/, '').replace(/\s+$/, ''); + } + + function stripTags() { + return this.replace(/<\w+(\s+("[^"]*"|'[^']*'|[^>])+)?>|<\/\w+>/gi, ''); + } + + function stripScripts() { + return this.replace(new RegExp(Prototype.ScriptFragment, 'img'), ''); + } + + function extractScripts() { + var matchAll = new RegExp(Prototype.ScriptFragment, 'img'), + matchOne = new RegExp(Prototype.ScriptFragment, 'im'); + return (this.match(matchAll) || []).map(function(scriptTag) { + return (scriptTag.match(matchOne) || ['', ''])[1]; + }); + } + + function evalScripts() { + return this.extractScripts().map(function(script) { return eval(script); }); + } + + function escapeHTML() { + return this.replace(/&/g,'&').replace(//g,'>'); + } + + function unescapeHTML() { + return this.stripTags().replace(/</g,'<').replace(/>/g,'>').replace(/&/g,'&'); + } + + + function toQueryParams(separator) { + var match = this.strip().match(/([^?#]*)(#.*)?$/); + if (!match) return { }; + + return match[1].split(separator || '&').inject({ }, function(hash, pair) { + if ((pair = pair.split('='))[0]) { + var key = decodeURIComponent(pair.shift()), + value = pair.length > 1 ? pair.join('=') : pair[0]; + + if (value != undefined) { + value = value.gsub('+', ' '); + value = decodeURIComponent(value); + } + + if (key in hash) { + if (!Object.isArray(hash[key])) hash[key] = [hash[key]]; + hash[key].push(value); + } + else hash[key] = value; + } + return hash; + }); + } + + function toArray() { + return this.split(''); + } + + function succ() { + return this.slice(0, this.length - 1) + + String.fromCharCode(this.charCodeAt(this.length - 1) + 1); + } + + function times(count) { + return count < 1 ? '' : new Array(count + 1).join(this); + } + + function camelize() { + return this.replace(/-+(.)?/g, function(match, chr) { + return chr ? chr.toUpperCase() : ''; + }); + } + + function capitalize() { + return this.charAt(0).toUpperCase() + this.substring(1).toLowerCase(); + } + + function underscore() { + return this.replace(/::/g, '/') + .replace(/([A-Z]+)([A-Z][a-z])/g, '$1_$2') + .replace(/([a-z\d])([A-Z])/g, '$1_$2') + .replace(/-/g, '_') + .toLowerCase(); + } + + function dasherize() { + return this.replace(/_/g, '-'); + } + + function inspect(useDoubleQuotes) { + var escapedString = this.replace(/[\x00-\x1f\\]/g, function(character) { + if (character in String.specialChar) { + return String.specialChar[character]; + } + return '\\u00' + character.charCodeAt().toPaddedString(2, 16); + }); + if (useDoubleQuotes) return '"' + escapedString.replace(/"/g, '\\"') + '"'; + return "'" + escapedString.replace(/'/g, '\\\'') + "'"; + } + + function unfilterJSON(filter) { + return this.replace(filter || Prototype.JSONFilter, '$1'); + } + + function isJSON() { + var str = this; + if (str.blank()) return false; + str = str.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@'); + str = str.replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']'); + str = str.replace(/(?:^|:|,)(?:\s*\[)+/g, ''); + return (/^[\],:{}\s]*$/).test(str); + } + + function evalJSON(sanitize) { + var json = this.unfilterJSON(), + cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g; + if (cx.test(json)) { + json = json.replace(cx, function (a) { + return '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4); + }); + } + try { + if (!sanitize || json.isJSON()) return eval('(' + json + ')'); + } catch (e) { } + throw new SyntaxError('Badly formed JSON string: ' + this.inspect()); + } + + function parseJSON() { + var json = this.unfilterJSON(); + return JSON.parse(json); + } + + function include(pattern) { + return this.indexOf(pattern) > -1; + } + + function startsWith(pattern, position) { + position = Object.isNumber(position) ? position : 0; + return this.lastIndexOf(pattern, position) === position; + } + + function endsWith(pattern, position) { + pattern = String(pattern); + position = Object.isNumber(position) ? position : this.length; + if (position < 0) position = 0; + if (position > this.length) position = this.length; + var d = position - pattern.length; + return d >= 0 && this.indexOf(pattern, d) === d; + } + + function empty() { + return this == ''; + } + + function blank() { + return /^\s*$/.test(this); + } + + function interpolate(object, pattern) { + return new Template(this, pattern).evaluate(object); + } + + return { + gsub: gsub, + sub: sub, + scan: scan, + truncate: truncate, + strip: String.prototype.trim || strip, + stripTags: stripTags, + stripScripts: stripScripts, + extractScripts: extractScripts, + evalScripts: evalScripts, + escapeHTML: escapeHTML, + unescapeHTML: unescapeHTML, + toQueryParams: toQueryParams, + parseQuery: toQueryParams, + toArray: toArray, + succ: succ, + times: times, + camelize: camelize, + capitalize: capitalize, + underscore: underscore, + dasherize: dasherize, + inspect: inspect, + unfilterJSON: unfilterJSON, + isJSON: isJSON, + evalJSON: NATIVE_JSON_PARSE_SUPPORT ? parseJSON : evalJSON, + include: include, + startsWith: String.prototype.startsWith || startsWith, + endsWith: String.prototype.endsWith || endsWith, + empty: empty, + blank: blank, + interpolate: interpolate + }; +})()); + +var Template = Class.create({ + initialize: function(template, pattern) { + this.template = template.toString(); + this.pattern = pattern || Template.Pattern; + }, + + evaluate: function(object) { + if (object && Object.isFunction(object.toTemplateReplacements)) + object = object.toTemplateReplacements(); + + return this.template.gsub(this.pattern, function(match) { + if (object == null) return (match[1] + ''); + + var before = match[1] || ''; + if (before == '\\') return match[2]; + + var ctx = object, expr = match[3], + pattern = /^([^.[]+|\[((?:.*?[^\\])?)\])(\.|\[|$)/; + + match = pattern.exec(expr); + if (match == null) return before; + + while (match != null) { + var comp = match[1].startsWith('[') ? match[2].replace(/\\\\]/g, ']') : match[1]; + ctx = ctx[comp]; + if (null == ctx || '' == match[3]) break; + expr = expr.substring('[' == match[3] ? match[1].length : match[0].length); + match = pattern.exec(expr); + } + + return before + String.interpret(ctx); + }); + } +}); +Template.Pattern = /(^|.|\r|\n)(#\{(.*?)\})/; + +var $break = { }; + +var Enumerable = (function() { + function each(iterator, context) { + try { + this._each(iterator, context); + } catch (e) { + if (e != $break) throw e; + } + return this; + } + + function eachSlice(number, iterator, context) { + var index = -number, slices = [], array = this.toArray(); + if (number < 1) return array; + while ((index += number) < array.length) + slices.push(array.slice(index, index+number)); + return slices.collect(iterator, context); + } + + function all(iterator, context) { + iterator = iterator || Prototype.K; + var result = true; + this.each(function(value, index) { + result = result && !!iterator.call(context, value, index, this); + if (!result) throw $break; + }, this); + return result; + } + + function any(iterator, context) { + iterator = iterator || Prototype.K; + var result = false; + this.each(function(value, index) { + if (result = !!iterator.call(context, value, index, this)) + throw $break; + }, this); + return result; + } + + function collect(iterator, context) { + iterator = iterator || Prototype.K; + var results = []; + this.each(function(value, index) { + results.push(iterator.call(context, value, index, this)); + }, this); + return results; + } + + function detect(iterator, context) { + var result; + this.each(function(value, index) { + if (iterator.call(context, value, index, this)) { + result = value; + throw $break; + } + }, this); + return result; + } + + function findAll(iterator, context) { + var results = []; + this.each(function(value, index) { + if (iterator.call(context, value, index, this)) + results.push(value); + }, this); + return results; + } + + function grep(filter, iterator, context) { + iterator = iterator || Prototype.K; + var results = []; + + if (Object.isString(filter)) + filter = new RegExp(RegExp.escape(filter)); + + this.each(function(value, index) { + if (filter.match(value)) + results.push(iterator.call(context, value, index, this)); + }, this); + return results; + } + + function include(object) { + if (Object.isFunction(this.indexOf) && this.indexOf(object) != -1) + return true; + + var found = false; + this.each(function(value) { + if (value == object) { + found = true; + throw $break; + } + }); + return found; + } + + function inGroupsOf(number, fillWith) { + fillWith = Object.isUndefined(fillWith) ? null : fillWith; + return this.eachSlice(number, function(slice) { + while(slice.length < number) slice.push(fillWith); + return slice; + }); + } + + function inject(memo, iterator, context) { + this.each(function(value, index) { + memo = iterator.call(context, memo, value, index, this); + }, this); + return memo; + } + + function invoke(method) { + var args = $A(arguments).slice(1); + return this.map(function(value) { + return value[method].apply(value, args); + }); + } + + function max(iterator, context) { + iterator = iterator || Prototype.K; + var result; + this.each(function(value, index) { + value = iterator.call(context, value, index, this); + if (result == null || value >= result) + result = value; + }, this); + return result; + } + + function min(iterator, context) { + iterator = iterator || Prototype.K; + var result; + this.each(function(value, index) { + value = iterator.call(context, value, index, this); + if (result == null || value < result) + result = value; + }, this); + return result; + } + + function partition(iterator, context) { + iterator = iterator || Prototype.K; + var trues = [], falses = []; + this.each(function(value, index) { + (iterator.call(context, value, index, this) ? + trues : falses).push(value); + }, this); + return [trues, falses]; + } + + function pluck(property) { + var results = []; + this.each(function(value) { + results.push(value[property]); + }); + return results; + } + + function reject(iterator, context) { + var results = []; + this.each(function(value, index) { + if (!iterator.call(context, value, index, this)) + results.push(value); + }, this); + return results; + } + + function sortBy(iterator, context) { + return this.map(function(value, index) { + return { + value: value, + criteria: iterator.call(context, value, index, this) + }; + }, this).sort(function(left, right) { + var a = left.criteria, b = right.criteria; + return a < b ? -1 : a > b ? 1 : 0; + }).pluck('value'); + } + + function toArray() { + return this.map(); + } + + function zip() { + var iterator = Prototype.K, args = $A(arguments); + if (Object.isFunction(args.last())) + iterator = args.pop(); + + var collections = [this].concat(args).map($A); + return this.map(function(value, index) { + return iterator(collections.pluck(index)); + }); + } + + function size() { + return this.toArray().length; + } + + function inspect() { + return '#'; + } + + + + + + + + + + return { + each: each, + eachSlice: eachSlice, + all: all, + every: all, + any: any, + some: any, + collect: collect, + map: collect, + detect: detect, + findAll: findAll, + select: findAll, + filter: findAll, + grep: grep, + include: include, + member: include, + inGroupsOf: inGroupsOf, + inject: inject, + invoke: invoke, + max: max, + min: min, + partition: partition, + pluck: pluck, + reject: reject, + sortBy: sortBy, + toArray: toArray, + entries: toArray, + zip: zip, + size: size, + inspect: inspect, + find: detect + }; +})(); + +function $A(iterable) { + if (!iterable) return []; + if ('toArray' in Object(iterable)) return iterable.toArray(); + var length = iterable.length || 0, results = new Array(length); + while (length--) results[length] = iterable[length]; + return results; +} + + +function $w(string) { + if (!Object.isString(string)) return []; + string = string.strip(); + return string ? string.split(/\s+/) : []; +} + +Array.from = $A; + + +(function() { + var arrayProto = Array.prototype, + slice = arrayProto.slice, + _each = arrayProto.forEach; // use native browser JS 1.6 implementation if available + + function each(iterator, context) { + for (var i = 0, length = this.length >>> 0; i < length; i++) { + if (i in this) iterator.call(context, this[i], i, this); + } + } + if (!_each) _each = each; + + function clear() { + this.length = 0; + return this; + } + + function first() { + return this[0]; + } + + function last() { + return this[this.length - 1]; + } + + function compact() { + return this.select(function(value) { + return value != null; + }); + } + + function flatten() { + return this.inject([], function(array, value) { + if (Object.isArray(value)) + return array.concat(value.flatten()); + array.push(value); + return array; + }); + } + + function without() { + var values = slice.call(arguments, 0); + return this.select(function(value) { + return !values.include(value); + }); + } + + function reverse(inline) { + return (inline === false ? this.toArray() : this)._reverse(); + } + + function uniq(sorted) { + return this.inject([], function(array, value, index) { + if (0 == index || (sorted ? array.last() != value : !array.include(value))) + array.push(value); + return array; + }); + } + + function intersect(array) { + return this.uniq().findAll(function(item) { + return array.indexOf(item) !== -1; + }); + } + + + function clone() { + return slice.call(this, 0); + } + + function size() { + return this.length; + } + + function inspect() { + return '[' + this.map(Object.inspect).join(', ') + ']'; + } + + function indexOf(item, i) { + if (this == null) throw new TypeError(); + + var array = Object(this), length = array.length >>> 0; + if (length === 0) return -1; + + i = Number(i); + if (isNaN(i)) { + i = 0; + } else if (i !== 0 && isFinite(i)) { + i = (i > 0 ? 1 : -1) * Math.floor(Math.abs(i)); + } + + if (i > length) return -1; + + var k = i >= 0 ? i : Math.max(length - Math.abs(i), 0); + for (; k < length; k++) + if (k in array && array[k] === item) return k; + return -1; + } + + + function lastIndexOf(item, i) { + if (this == null) throw new TypeError(); + + var array = Object(this), length = array.length >>> 0; + if (length === 0) return -1; + + if (!Object.isUndefined(i)) { + i = Number(i); + if (isNaN(i)) { + i = 0; + } else if (i !== 0 && isFinite(i)) { + i = (i > 0 ? 1 : -1) * Math.floor(Math.abs(i)); + } + } else { + i = length; + } + + var k = i >= 0 ? Math.min(i, length - 1) : + length - Math.abs(i); + + for (; k >= 0; k--) + if (k in array && array[k] === item) return k; + return -1; + } + + function concat(_) { + var array = [], items = slice.call(arguments, 0), item, n = 0; + items.unshift(this); + for (var i = 0, length = items.length; i < length; i++) { + item = items[i]; + if (Object.isArray(item) && !('callee' in item)) { + for (var j = 0, arrayLength = item.length; j < arrayLength; j++) { + if (j in item) array[n] = item[j]; + n++; + } + } else { + array[n++] = item; + } + } + array.length = n; + return array; + } + + + function wrapNative(method) { + return function() { + if (arguments.length === 0) { + return method.call(this, Prototype.K); + } else if (arguments[0] === undefined) { + var args = slice.call(arguments, 1); + args.unshift(Prototype.K); + return method.apply(this, args); + } else { + return method.apply(this, arguments); + } + }; + } + + + function map(iterator) { + if (this == null) throw new TypeError(); + iterator = iterator || Prototype.K; + + var object = Object(this); + var results = [], context = arguments[1], n = 0; + + for (var i = 0, length = object.length >>> 0; i < length; i++) { + if (i in object) { + results[n] = iterator.call(context, object[i], i, object); + } + n++; + } + results.length = n; + return results; + } + + if (arrayProto.map) { + map = wrapNative(Array.prototype.map); + } + + function filter(iterator) { + if (this == null || !Object.isFunction(iterator)) + throw new TypeError(); + + var object = Object(this); + var results = [], context = arguments[1], value; + + for (var i = 0, length = object.length >>> 0; i < length; i++) { + if (i in object) { + value = object[i]; + if (iterator.call(context, value, i, object)) { + results.push(value); + } + } + } + return results; + } + + if (arrayProto.filter) { + filter = Array.prototype.filter; + } + + function some(iterator) { + if (this == null) throw new TypeError(); + iterator = iterator || Prototype.K; + var context = arguments[1]; + + var object = Object(this); + for (var i = 0, length = object.length >>> 0; i < length; i++) { + if (i in object && iterator.call(context, object[i], i, object)) { + return true; + } + } + + return false; + } + + if (arrayProto.some) { + var some = wrapNative(Array.prototype.some); + } + + + function every(iterator) { + if (this == null) throw new TypeError(); + iterator = iterator || Prototype.K; + var context = arguments[1]; + + var object = Object(this); + for (var i = 0, length = object.length >>> 0; i < length; i++) { + if (i in object && !iterator.call(context, object[i], i, object)) { + return false; + } + } + + return true; + } + + if (arrayProto.every) { + var every = wrapNative(Array.prototype.every); + } + + var _reduce = arrayProto.reduce; + function inject(memo, iterator) { + iterator = iterator || Prototype.K; + var context = arguments[2]; + return _reduce.call(this, iterator.bind(context), memo); + } + + if (!arrayProto.reduce) { + var inject = Enumerable.inject; + } + + Object.extend(arrayProto, Enumerable); + + if (!arrayProto._reverse) + arrayProto._reverse = arrayProto.reverse; + + Object.extend(arrayProto, { + _each: _each, + + map: map, + collect: map, + select: filter, + filter: filter, + findAll: filter, + some: some, + any: some, + every: every, + all: every, + inject: inject, + + clear: clear, + first: first, + last: last, + compact: compact, + flatten: flatten, + without: without, + reverse: reverse, + uniq: uniq, + intersect: intersect, + clone: clone, + toArray: clone, + size: size, + inspect: inspect + }); + + var CONCAT_ARGUMENTS_BUGGY = (function() { + return [].concat(arguments)[0][0] !== 1; + })(1,2); + + if (CONCAT_ARGUMENTS_BUGGY) arrayProto.concat = concat; + + if (!arrayProto.indexOf) arrayProto.indexOf = indexOf; + if (!arrayProto.lastIndexOf) arrayProto.lastIndexOf = lastIndexOf; +})(); +function $H(object) { + return new Hash(object); +}; + +var Hash = Class.create(Enumerable, (function() { + function initialize(object) { + this._object = Object.isHash(object) ? object.toObject() : Object.clone(object); + } + + + function _each(iterator, context) { + var i = 0; + for (var key in this._object) { + var value = this._object[key], pair = [key, value]; + pair.key = key; + pair.value = value; + iterator.call(context, pair, i); + i++; + } + } + + function set(key, value) { + return this._object[key] = value; + } + + function get(key) { + if (this._object[key] !== Object.prototype[key]) + return this._object[key]; + } + + function unset(key) { + var value = this._object[key]; + delete this._object[key]; + return value; + } + + function toObject() { + return Object.clone(this._object); + } + + + + function keys() { + return this.pluck('key'); + } + + function values() { + return this.pluck('value'); + } + + function index(value) { + var match = this.detect(function(pair) { + return pair.value === value; + }); + return match && match.key; + } + + function merge(object) { + return this.clone().update(object); + } + + function update(object) { + return new Hash(object).inject(this, function(result, pair) { + result.set(pair.key, pair.value); + return result; + }); + } + + function toQueryPair(key, value) { + if (Object.isUndefined(value)) return key; + + value = String.interpret(value); + + value = value.gsub(/(\r)?\n/, '\r\n'); + value = encodeURIComponent(value); + value = value.gsub(/%20/, '+'); + return key + '=' + value; + } + + function toQueryString() { + return this.inject([], function(results, pair) { + var key = encodeURIComponent(pair.key), values = pair.value; + + if (values && typeof values == 'object') { + if (Object.isArray(values)) { + var queryValues = []; + for (var i = 0, len = values.length, value; i < len; i++) { + value = values[i]; + queryValues.push(toQueryPair(key, value)); + } + return results.concat(queryValues); + } + } else results.push(toQueryPair(key, values)); + return results; + }).join('&'); + } + + function inspect() { + return '#'; + } + + function clone() { + return new Hash(this); + } + + return { + initialize: initialize, + _each: _each, + set: set, + get: get, + unset: unset, + toObject: toObject, + toTemplateReplacements: toObject, + keys: keys, + values: values, + index: index, + merge: merge, + update: update, + toQueryString: toQueryString, + inspect: inspect, + toJSON: toObject, + clone: clone + }; +})()); + +Hash.from = $H; +Object.extend(Number.prototype, (function() { + function toColorPart() { + return this.toPaddedString(2, 16); + } + + function succ() { + return this + 1; + } + + function times(iterator, context) { + $R(0, this, true).each(iterator, context); + return this; + } + + function toPaddedString(length, radix) { + var string = this.toString(radix || 10); + return '0'.times(length - string.length) + string; + } + + function abs() { + return Math.abs(this); + } + + function round() { + return Math.round(this); + } + + function ceil() { + return Math.ceil(this); + } + + function floor() { + return Math.floor(this); + } + + return { + toColorPart: toColorPart, + succ: succ, + times: times, + toPaddedString: toPaddedString, + abs: abs, + round: round, + ceil: ceil, + floor: floor + }; +})()); + +function $R(start, end, exclusive) { + return new ObjectRange(start, end, exclusive); +} + +var ObjectRange = Class.create(Enumerable, (function() { + function initialize(start, end, exclusive) { + this.start = start; + this.end = end; + this.exclusive = exclusive; + } + + function _each(iterator, context) { + var value = this.start, i; + for (i = 0; this.include(value); i++) { + iterator.call(context, value, i); + value = value.succ(); + } + } + + function include(value) { + if (value < this.start) + return false; + if (this.exclusive) + return value < this.end; + return value <= this.end; + } + + return { + initialize: initialize, + _each: _each, + include: include + }; +})()); + + + +var Abstract = { }; + + +var Try = { + these: function() { + var returnValue; + + for (var i = 0, length = arguments.length; i < length; i++) { + var lambda = arguments[i]; + try { + returnValue = lambda(); + break; + } catch (e) { } + } + + return returnValue; + } +}; + +var Ajax = { + getTransport: function() { + return Try.these( + function() {return new XMLHttpRequest()}, + function() {return new ActiveXObject('Msxml2.XMLHTTP')}, + function() {return new ActiveXObject('Microsoft.XMLHTTP')} + ) || false; + }, + + activeRequestCount: 0 +}; + +Ajax.Responders = { + responders: [], + + _each: function(iterator, context) { + this.responders._each(iterator, context); + }, + + register: function(responder) { + if (!this.include(responder)) + this.responders.push(responder); + }, + + unregister: function(responder) { + this.responders = this.responders.without(responder); + }, + + dispatch: function(callback, request, transport, json) { + this.each(function(responder) { + if (Object.isFunction(responder[callback])) { + try { + responder[callback].apply(responder, [request, transport, json]); + } catch (e) { } + } + }); + } +}; + +Object.extend(Ajax.Responders, Enumerable); + +Ajax.Responders.register({ + onCreate: function() { Ajax.activeRequestCount++ }, + onComplete: function() { Ajax.activeRequestCount-- } +}); +Ajax.Base = Class.create({ + initialize: function(options) { + this.options = { + method: 'post', + asynchronous: true, + contentType: 'application/x-www-form-urlencoded', + encoding: 'UTF-8', + parameters: '', + evalJSON: true, + evalJS: true + }; + Object.extend(this.options, options || { }); + + this.options.method = this.options.method.toLowerCase(); + + if (Object.isHash(this.options.parameters)) + this.options.parameters = this.options.parameters.toObject(); + } +}); +Ajax.Request = Class.create(Ajax.Base, { + _complete: false, + + initialize: function($super, url, options) { + $super(options); + this.transport = Ajax.getTransport(); + this.request(url); + }, + + request: function(url) { + this.url = url; + this.method = this.options.method; + var params = Object.isString(this.options.parameters) ? + this.options.parameters : + Object.toQueryString(this.options.parameters); + + if (!['get', 'post'].include(this.method)) { + params += (params ? '&' : '') + "_method=" + this.method; + this.method = 'post'; + } + + if (params && this.method === 'get') { + this.url += (this.url.include('?') ? '&' : '?') + params; + } + + this.parameters = params.toQueryParams(); + + try { + var response = new Ajax.Response(this); + if (this.options.onCreate) this.options.onCreate(response); + Ajax.Responders.dispatch('onCreate', this, response); + + this.transport.open(this.method.toUpperCase(), this.url, + this.options.asynchronous); + + if (this.options.asynchronous) this.respondToReadyState.bind(this).defer(1); + + this.transport.onreadystatechange = this.onStateChange.bind(this); + this.setRequestHeaders(); + + this.body = this.method == 'post' ? (this.options.postBody || params) : null; + this.transport.send(this.body); + + /* Force Firefox to handle ready state 4 for synchronous requests */ + if (!this.options.asynchronous && this.transport.overrideMimeType) + this.onStateChange(); + + } + catch (e) { + this.dispatchException(e); + } + }, + + onStateChange: function() { + var readyState = this.transport.readyState; + if (readyState > 1 && !((readyState == 4) && this._complete)) + this.respondToReadyState(this.transport.readyState); + }, + + setRequestHeaders: function() { + var headers = { + 'X-Requested-With': 'XMLHttpRequest', + 'X-Prototype-Version': Prototype.Version, + 'Accept': 'text/javascript, text/html, application/xml, text/xml, */*' + }; + + if (this.method == 'post') { + headers['Content-type'] = this.options.contentType + + (this.options.encoding ? '; charset=' + this.options.encoding : ''); + + /* Force "Connection: close" for older Mozilla browsers to work + * around a bug where XMLHttpRequest sends an incorrect + * Content-length header. See Mozilla Bugzilla #246651. + */ + if (this.transport.overrideMimeType && + (navigator.userAgent.match(/Gecko\/(\d{4})/) || [0,2005])[1] < 2005) + headers['Connection'] = 'close'; + } + + if (typeof this.options.requestHeaders == 'object') { + var extras = this.options.requestHeaders; + + if (Object.isFunction(extras.push)) + for (var i = 0, length = extras.length; i < length; i += 2) + headers[extras[i]] = extras[i+1]; + else + $H(extras).each(function(pair) { headers[pair.key] = pair.value }); + } + + for (var name in headers) + if (headers[name] != null) + this.transport.setRequestHeader(name, headers[name]); + }, + + success: function() { + var status = this.getStatus(); + return !status || (status >= 200 && status < 300) || status == 304; + }, + + getStatus: function() { + try { + if (this.transport.status === 1223) return 204; + return this.transport.status || 0; + } catch (e) { return 0 } + }, + + respondToReadyState: function(readyState) { + var state = Ajax.Request.Events[readyState], response = new Ajax.Response(this); + + if (state == 'Complete') { + try { + this._complete = true; + (this.options['on' + response.status] + || this.options['on' + (this.success() ? 'Success' : 'Failure')] + || Prototype.emptyFunction)(response, response.headerJSON); + } catch (e) { + this.dispatchException(e); + } + + var contentType = response.getHeader('Content-type'); + if (this.options.evalJS == 'force' + || (this.options.evalJS && this.isSameOrigin() && contentType + && contentType.match(/^\s*(text|application)\/(x-)?(java|ecma)script(;.*)?\s*$/i))) + this.evalResponse(); + } + + try { + (this.options['on' + state] || Prototype.emptyFunction)(response, response.headerJSON); + Ajax.Responders.dispatch('on' + state, this, response, response.headerJSON); + } catch (e) { + this.dispatchException(e); + } + + if (state == 'Complete') { + this.transport.onreadystatechange = Prototype.emptyFunction; + } + }, + + isSameOrigin: function() { + var m = this.url.match(/^\s*https?:\/\/[^\/]*/); + return !m || (m[0] == '#{protocol}//#{domain}#{port}'.interpolate({ + protocol: location.protocol, + domain: document.domain, + port: location.port ? ':' + location.port : '' + })); + }, + + getHeader: function(name) { + try { + return this.transport.getResponseHeader(name) || null; + } catch (e) { return null; } + }, + + evalResponse: function() { + try { + return eval((this.transport.responseText || '').unfilterJSON()); + } catch (e) { + this.dispatchException(e); + } + }, + + dispatchException: function(exception) { + (this.options.onException || Prototype.emptyFunction)(this, exception); + Ajax.Responders.dispatch('onException', this, exception); + } +}); + +Ajax.Request.Events = + ['Uninitialized', 'Loading', 'Loaded', 'Interactive', 'Complete']; + + + + + + + + +Ajax.Response = Class.create({ + initialize: function(request){ + this.request = request; + var transport = this.transport = request.transport, + readyState = this.readyState = transport.readyState; + + if ((readyState > 2 && !Prototype.Browser.IE) || readyState == 4) { + this.status = this.getStatus(); + this.statusText = this.getStatusText(); + this.responseText = String.interpret(transport.responseText); + this.headerJSON = this._getHeaderJSON(); + } + + if (readyState == 4) { + var xml = transport.responseXML; + this.responseXML = Object.isUndefined(xml) ? null : xml; + this.responseJSON = this._getResponseJSON(); + } + }, + + status: 0, + + statusText: '', + + getStatus: Ajax.Request.prototype.getStatus, + + getStatusText: function() { + try { + return this.transport.statusText || ''; + } catch (e) { return '' } + }, + + getHeader: Ajax.Request.prototype.getHeader, + + getAllHeaders: function() { + try { + return this.getAllResponseHeaders(); + } catch (e) { return null } + }, + + getResponseHeader: function(name) { + return this.transport.getResponseHeader(name); + }, + + getAllResponseHeaders: function() { + return this.transport.getAllResponseHeaders(); + }, + + _getHeaderJSON: function() { + var json = this.getHeader('X-JSON'); + if (!json) return null; + + try { + json = decodeURIComponent(escape(json)); + } catch(e) { + } + + try { + return json.evalJSON(this.request.options.sanitizeJSON || + !this.request.isSameOrigin()); + } catch (e) { + this.request.dispatchException(e); + } + }, + + _getResponseJSON: function() { + var options = this.request.options; + if (!options.evalJSON || (options.evalJSON != 'force' && + !(this.getHeader('Content-type') || '').include('application/json')) || + this.responseText.blank()) + return null; + try { + return this.responseText.evalJSON(options.sanitizeJSON || + !this.request.isSameOrigin()); + } catch (e) { + this.request.dispatchException(e); + } + } +}); + +Ajax.Updater = Class.create(Ajax.Request, { + initialize: function($super, container, url, options) { + this.container = { + success: (container.success || container), + failure: (container.failure || (container.success ? null : container)) + }; + + options = Object.clone(options); + var onComplete = options.onComplete; + options.onComplete = (function(response, json) { + this.updateContent(response.responseText); + if (Object.isFunction(onComplete)) onComplete(response, json); + }).bind(this); + + $super(url, options); + }, + + updateContent: function(responseText) { + var receiver = this.container[this.success() ? 'success' : 'failure'], + options = this.options; + + if (!options.evalScripts) responseText = responseText.stripScripts(); + + if (receiver = $(receiver)) { + if (options.insertion) { + if (Object.isString(options.insertion)) { + var insertion = { }; insertion[options.insertion] = responseText; + receiver.insert(insertion); + } + else options.insertion(receiver, responseText); + } + else receiver.update(responseText); + } + } +}); + +Ajax.PeriodicalUpdater = Class.create(Ajax.Base, { + initialize: function($super, container, url, options) { + $super(options); + this.onComplete = this.options.onComplete; + + this.frequency = (this.options.frequency || 2); + this.decay = (this.options.decay || 1); + + this.updater = { }; + this.container = container; + this.url = url; + + this.start(); + }, + + start: function() { + this.options.onComplete = this.updateComplete.bind(this); + this.onTimerEvent(); + }, + + stop: function() { + this.updater.options.onComplete = undefined; + clearTimeout(this.timer); + (this.onComplete || Prototype.emptyFunction).apply(this, arguments); + }, + + updateComplete: function(response) { + if (this.options.decay) { + this.decay = (response.responseText == this.lastText ? + this.decay * this.options.decay : 1); + + this.lastText = response.responseText; + } + this.timer = this.onTimerEvent.bind(this).delay(this.decay * this.frequency); + }, + + onTimerEvent: function() { + this.updater = new Ajax.Updater(this.container, this.url, this.options); + } +}); + +(function(GLOBAL) { + + var UNDEFINED; + var SLICE = Array.prototype.slice; + + var DIV = document.createElement('div'); + + + function $(element) { + if (arguments.length > 1) { + for (var i = 0, elements = [], length = arguments.length; i < length; i++) + elements.push($(arguments[i])); + return elements; + } + + if (Object.isString(element)) + element = document.getElementById(element); + return Element.extend(element); + } + + GLOBAL.$ = $; + + + if (!GLOBAL.Node) GLOBAL.Node = {}; + + if (!GLOBAL.Node.ELEMENT_NODE) { + Object.extend(GLOBAL.Node, { + ELEMENT_NODE: 1, + ATTRIBUTE_NODE: 2, + TEXT_NODE: 3, + CDATA_SECTION_NODE: 4, + ENTITY_REFERENCE_NODE: 5, + ENTITY_NODE: 6, + PROCESSING_INSTRUCTION_NODE: 7, + COMMENT_NODE: 8, + DOCUMENT_NODE: 9, + DOCUMENT_TYPE_NODE: 10, + DOCUMENT_FRAGMENT_NODE: 11, + NOTATION_NODE: 12 + }); + } + + var ELEMENT_CACHE = {}; + + function shouldUseCreationCache(tagName, attributes) { + if (tagName === 'select') return false; + if ('type' in attributes) return false; + return true; + } + + var HAS_EXTENDED_CREATE_ELEMENT_SYNTAX = (function(){ + try { + var el = document.createElement(''); + return el.tagName.toLowerCase() === 'input' && el.name === 'x'; + } + catch(err) { + return false; + } + })(); + + + var oldElement = GLOBAL.Element; + function Element(tagName, attributes) { + attributes = attributes || {}; + tagName = tagName.toLowerCase(); + + if (HAS_EXTENDED_CREATE_ELEMENT_SYNTAX && attributes.name) { + tagName = '<' + tagName + ' name="' + attributes.name + '">'; + delete attributes.name; + return Element.writeAttribute(document.createElement(tagName), attributes); + } + + if (!ELEMENT_CACHE[tagName]) + ELEMENT_CACHE[tagName] = Element.extend(document.createElement(tagName)); + + var node = shouldUseCreationCache(tagName, attributes) ? + ELEMENT_CACHE[tagName].cloneNode(false) : document.createElement(tagName); + + return Element.writeAttribute(node, attributes); + } + + GLOBAL.Element = Element; + + Object.extend(GLOBAL.Element, oldElement || {}); + if (oldElement) GLOBAL.Element.prototype = oldElement.prototype; + + Element.Methods = { ByTag: {}, Simulated: {} }; + + var methods = {}; + + var INSPECT_ATTRIBUTES = { id: 'id', className: 'class' }; + function inspect(element) { + element = $(element); + var result = '<' + element.tagName.toLowerCase(); + + var attribute, value; + for (var property in INSPECT_ATTRIBUTES) { + attribute = INSPECT_ATTRIBUTES[property]; + value = (element[property] || '').toString(); + if (value) result += ' ' + attribute + '=' + value.inspect(true); + } + + return result + '>'; + } + + methods.inspect = inspect; + + + function visible(element) { + return $(element).style.display !== 'none'; + } + + function toggle(element, bool) { + element = $(element); + if (Object.isUndefined(bool)) + bool = !Element.visible(element); + Element[bool ? 'show' : 'hide'](element); + + return element; + } + + function hide(element) { + element = $(element); + element.style.display = 'none'; + return element; + } + + function show(element) { + element = $(element); + element.style.display = ''; + return element; + } + + + Object.extend(methods, { + visible: visible, + toggle: toggle, + hide: hide, + show: show + }); + + + function remove(element) { + element = $(element); + element.parentNode.removeChild(element); + return element; + } + + var SELECT_ELEMENT_INNERHTML_BUGGY = (function(){ + var el = document.createElement("select"), + isBuggy = true; + el.innerHTML = ""; + if (el.options && el.options[0]) { + isBuggy = el.options[0].nodeName.toUpperCase() !== "OPTION"; + } + el = null; + return isBuggy; + })(); + + var TABLE_ELEMENT_INNERHTML_BUGGY = (function(){ + try { + var el = document.createElement("table"); + if (el && el.tBodies) { + el.innerHTML = "test"; + var isBuggy = typeof el.tBodies[0] == "undefined"; + el = null; + return isBuggy; + } + } catch (e) { + return true; + } + })(); + + var LINK_ELEMENT_INNERHTML_BUGGY = (function() { + try { + var el = document.createElement('div'); + el.innerHTML = ""; + var isBuggy = (el.childNodes.length === 0); + el = null; + return isBuggy; + } catch(e) { + return true; + } + })(); + + var ANY_INNERHTML_BUGGY = SELECT_ELEMENT_INNERHTML_BUGGY || + TABLE_ELEMENT_INNERHTML_BUGGY || LINK_ELEMENT_INNERHTML_BUGGY; + + var SCRIPT_ELEMENT_REJECTS_TEXTNODE_APPENDING = (function () { + var s = document.createElement("script"), + isBuggy = false; + try { + s.appendChild(document.createTextNode("")); + isBuggy = !s.firstChild || + s.firstChild && s.firstChild.nodeType !== 3; + } catch (e) { + isBuggy = true; + } + s = null; + return isBuggy; + })(); + + function update(element, content) { + element = $(element); + + var descendants = element.getElementsByTagName('*'), + i = descendants.length; + while (i--) purgeElement(descendants[i]); + + if (content && content.toElement) + content = content.toElement(); + + if (Object.isElement(content)) + return element.update().insert(content); + + + content = Object.toHTML(content); + var tagName = element.tagName.toUpperCase(); + + if (tagName === 'SCRIPT' && SCRIPT_ELEMENT_REJECTS_TEXTNODE_APPENDING) { + element.text = content; + return element; + } + + if (ANY_INNERHTML_BUGGY) { + if (tagName in INSERTION_TRANSLATIONS.tags) { + while (element.firstChild) + element.removeChild(element.firstChild); + + var nodes = getContentFromAnonymousElement(tagName, content.stripScripts()); + for (var i = 0, node; node = nodes[i]; i++) + element.appendChild(node); + + } else if (LINK_ELEMENT_INNERHTML_BUGGY && Object.isString(content) && content.indexOf(' -1) { + while (element.firstChild) + element.removeChild(element.firstChild); + + var nodes = getContentFromAnonymousElement(tagName, + content.stripScripts(), true); + + for (var i = 0, node; node = nodes[i]; i++) + element.appendChild(node); + } else { + element.innerHTML = content.stripScripts(); + } + } else { + element.innerHTML = content.stripScripts(); + } + + content.evalScripts.bind(content).defer(); + return element; + } + + function replace(element, content) { + element = $(element); + + if (content && content.toElement) { + content = content.toElement(); + } else if (!Object.isElement(content)) { + content = Object.toHTML(content); + var range = element.ownerDocument.createRange(); + range.selectNode(element); + content.evalScripts.bind(content).defer(); + content = range.createContextualFragment(content.stripScripts()); + } + + element.parentNode.replaceChild(content, element); + return element; + } + + var INSERTION_TRANSLATIONS = { + before: function(element, node) { + element.parentNode.insertBefore(node, element); + }, + top: function(element, node) { + element.insertBefore(node, element.firstChild); + }, + bottom: function(element, node) { + element.appendChild(node); + }, + after: function(element, node) { + element.parentNode.insertBefore(node, element.nextSibling); + }, + + tags: { + TABLE: ['', '
    ', 1], + TBODY: ['', '
    ', 2], + TR: ['', '
    ', 3], + TD: ['
    ', '
    ', 4], + SELECT: ['', 1] + } + }; + + var tags = INSERTION_TRANSLATIONS.tags; + + Object.extend(tags, { + THEAD: tags.TBODY, + TFOOT: tags.TBODY, + TH: tags.TD + }); + + function replace_IE(element, content) { + element = $(element); + if (content && content.toElement) + content = content.toElement(); + if (Object.isElement(content)) { + element.parentNode.replaceChild(content, element); + return element; + } + + content = Object.toHTML(content); + var parent = element.parentNode, tagName = parent.tagName.toUpperCase(); + + if (tagName in INSERTION_TRANSLATIONS.tags) { + var nextSibling = Element.next(element); + var fragments = getContentFromAnonymousElement( + tagName, content.stripScripts()); + + parent.removeChild(element); + + var iterator; + if (nextSibling) + iterator = function(node) { parent.insertBefore(node, nextSibling) }; + else + iterator = function(node) { parent.appendChild(node); } + + fragments.each(iterator); + } else { + element.outerHTML = content.stripScripts(); + } + + content.evalScripts.bind(content).defer(); + return element; + } + + if ('outerHTML' in document.documentElement) + replace = replace_IE; + + function isContent(content) { + if (Object.isUndefined(content) || content === null) return false; + + if (Object.isString(content) || Object.isNumber(content)) return true; + if (Object.isElement(content)) return true; + if (content.toElement || content.toHTML) return true; + + return false; + } + + function insertContentAt(element, content, position) { + position = position.toLowerCase(); + var method = INSERTION_TRANSLATIONS[position]; + + if (content && content.toElement) content = content.toElement(); + if (Object.isElement(content)) { + method(element, content); + return element; + } + + content = Object.toHTML(content); + var tagName = ((position === 'before' || position === 'after') ? + element.parentNode : element).tagName.toUpperCase(); + + var childNodes = getContentFromAnonymousElement(tagName, content.stripScripts()); + + if (position === 'top' || position === 'after') childNodes.reverse(); + + for (var i = 0, node; node = childNodes[i]; i++) + method(element, node); + + content.evalScripts.bind(content).defer(); + } + + function insert(element, insertions) { + element = $(element); + + if (isContent(insertions)) + insertions = { bottom: insertions }; + + for (var position in insertions) + insertContentAt(element, insertions[position], position); + + return element; + } + + function wrap(element, wrapper, attributes) { + element = $(element); + + if (Object.isElement(wrapper)) { + $(wrapper).writeAttribute(attributes || {}); + } else if (Object.isString(wrapper)) { + wrapper = new Element(wrapper, attributes); + } else { + wrapper = new Element('div', wrapper); + } + + if (element.parentNode) + element.parentNode.replaceChild(wrapper, element); + + wrapper.appendChild(element); + + return wrapper; + } + + function cleanWhitespace(element) { + element = $(element); + var node = element.firstChild; + + while (node) { + var nextNode = node.nextSibling; + if (node.nodeType === Node.TEXT_NODE && !/\S/.test(node.nodeValue)) + element.removeChild(node); + node = nextNode; + } + return element; + } + + function empty(element) { + return $(element).innerHTML.blank(); + } + + function getContentFromAnonymousElement(tagName, html, force) { + var t = INSERTION_TRANSLATIONS.tags[tagName], div = DIV; + + var workaround = !!t; + if (!workaround && force) { + workaround = true; + t = ['', '', 0]; + } + + if (workaround) { + div.innerHTML = ' ' + t[0] + html + t[1]; + div.removeChild(div.firstChild); + for (var i = t[2]; i--; ) + div = div.firstChild; + } else { + div.innerHTML = html; + } + + return $A(div.childNodes); + } + + function clone(element, deep) { + if (!(element = $(element))) return; + var clone = element.cloneNode(deep); + if (!HAS_UNIQUE_ID_PROPERTY) { + clone._prototypeUID = UNDEFINED; + if (deep) { + var descendants = Element.select(clone, '*'), + i = descendants.length; + while (i--) + descendants[i]._prototypeUID = UNDEFINED; + } + } + return Element.extend(clone); + } + + function purgeElement(element) { + var uid = getUniqueElementID(element); + if (uid) { + Element.stopObserving(element); + if (!HAS_UNIQUE_ID_PROPERTY) + element._prototypeUID = UNDEFINED; + delete Element.Storage[uid]; + } + } + + function purgeCollection(elements) { + var i = elements.length; + while (i--) + purgeElement(elements[i]); + } + + function purgeCollection_IE(elements) { + var i = elements.length, element, uid; + while (i--) { + element = elements[i]; + uid = getUniqueElementID(element); + delete Element.Storage[uid]; + delete Event.cache[uid]; + } + } + + if (HAS_UNIQUE_ID_PROPERTY) { + purgeCollection = purgeCollection_IE; + } + + + function purge(element) { + if (!(element = $(element))) return; + purgeElement(element); + + var descendants = element.getElementsByTagName('*'), + i = descendants.length; + + while (i--) purgeElement(descendants[i]); + + return null; + } + + Object.extend(methods, { + remove: remove, + update: update, + replace: replace, + insert: insert, + wrap: wrap, + cleanWhitespace: cleanWhitespace, + empty: empty, + clone: clone, + purge: purge + }); + + + + function recursivelyCollect(element, property, maximumLength) { + element = $(element); + maximumLength = maximumLength || -1; + var elements = []; + + while (element = element[property]) { + if (element.nodeType === Node.ELEMENT_NODE) + elements.push(Element.extend(element)); + + if (elements.length === maximumLength) break; + } + + return elements; + } + + + function ancestors(element) { + return recursivelyCollect(element, 'parentNode'); + } + + function descendants(element) { + return Element.select(element, '*'); + } + + function firstDescendant(element) { + element = $(element).firstChild; + while (element && element.nodeType !== Node.ELEMENT_NODE) + element = element.nextSibling; + + return $(element); + } + + function immediateDescendants(element) { + var results = [], child = $(element).firstChild; + + while (child) { + if (child.nodeType === Node.ELEMENT_NODE) + results.push(Element.extend(child)); + + child = child.nextSibling; + } + + return results; + } + + function previousSiblings(element) { + return recursivelyCollect(element, 'previousSibling'); + } + + function nextSiblings(element) { + return recursivelyCollect(element, 'nextSibling'); + } + + function siblings(element) { + element = $(element); + var previous = previousSiblings(element), + next = nextSiblings(element); + return previous.reverse().concat(next); + } + + function match(element, selector) { + element = $(element); + + if (Object.isString(selector)) + return Prototype.Selector.match(element, selector); + + return selector.match(element); + } + + + function _recursivelyFind(element, property, expression, index) { + element = $(element), expression = expression || 0, index = index || 0; + if (Object.isNumber(expression)) { + index = expression, expression = null; + } + + while (element = element[property]) { + if (element.nodeType !== 1) continue; + if (expression && !Prototype.Selector.match(element, expression)) + continue; + if (--index >= 0) continue; + + return Element.extend(element); + } + } + + + function up(element, expression, index) { + element = $(element); + + if (arguments.length === 1) return $(element.parentNode); + return _recursivelyFind(element, 'parentNode', expression, index); + } + + function down(element, expression, index) { + if (arguments.length === 1) return firstDescendant(element); + element = $(element), expression = expression || 0, index = index || 0; + + if (Object.isNumber(expression)) + index = expression, expression = '*'; + + var node = Prototype.Selector.select(expression, element)[index]; + return Element.extend(node); + } + + function previous(element, expression, index) { + return _recursivelyFind(element, 'previousSibling', expression, index); + } + + function next(element, expression, index) { + return _recursivelyFind(element, 'nextSibling', expression, index); + } + + function select(element) { + element = $(element); + var expressions = SLICE.call(arguments, 1).join(', '); + return Prototype.Selector.select(expressions, element); + } + + function adjacent(element) { + element = $(element); + var expressions = SLICE.call(arguments, 1).join(', '); + var siblings = Element.siblings(element), results = []; + for (var i = 0, sibling; sibling = siblings[i]; i++) { + if (Prototype.Selector.match(sibling, expressions)) + results.push(sibling); + } + + return results; + } + + function descendantOf_DOM(element, ancestor) { + element = $(element), ancestor = $(ancestor); + while (element = element.parentNode) + if (element === ancestor) return true; + return false; + } + + function descendantOf_contains(element, ancestor) { + element = $(element), ancestor = $(ancestor); + if (!ancestor.contains) return descendantOf_DOM(element, ancestor); + return ancestor.contains(element) && ancestor !== element; + } + + function descendantOf_compareDocumentPosition(element, ancestor) { + element = $(element), ancestor = $(ancestor); + return (element.compareDocumentPosition(ancestor) & 8) === 8; + } + + var descendantOf; + if (DIV.compareDocumentPosition) { + descendantOf = descendantOf_compareDocumentPosition; + } else if (DIV.contains) { + descendantOf = descendantOf_contains; + } else { + descendantOf = descendantOf_DOM; + } + + + Object.extend(methods, { + recursivelyCollect: recursivelyCollect, + ancestors: ancestors, + descendants: descendants, + firstDescendant: firstDescendant, + immediateDescendants: immediateDescendants, + previousSiblings: previousSiblings, + nextSiblings: nextSiblings, + siblings: siblings, + match: match, + up: up, + down: down, + previous: previous, + next: next, + select: select, + adjacent: adjacent, + descendantOf: descendantOf, + + getElementsBySelector: select, + + childElements: immediateDescendants + }); + + + var idCounter = 1; + function identify(element) { + element = $(element); + var id = Element.readAttribute(element, 'id'); + if (id) return id; + + do { id = 'anonymous_element_' + idCounter++ } while ($(id)); + + Element.writeAttribute(element, 'id', id); + return id; + } + + + function readAttribute(element, name) { + return $(element).getAttribute(name); + } + + function readAttribute_IE(element, name) { + element = $(element); + + var table = ATTRIBUTE_TRANSLATIONS.read; + if (table.values[name]) + return table.values[name](element, name); + + if (table.names[name]) name = table.names[name]; + + if (name.include(':')) { + if (!element.attributes || !element.attributes[name]) return null; + return element.attributes[name].value; + } + + return element.getAttribute(name); + } + + function readAttribute_Opera(element, name) { + if (name === 'title') return element.title; + return element.getAttribute(name); + } + + var PROBLEMATIC_ATTRIBUTE_READING = (function() { + DIV.setAttribute('onclick', []); + var value = DIV.getAttribute('onclick'); + var isFunction = Object.isArray(value); + DIV.removeAttribute('onclick'); + return isFunction; + })(); + + if (PROBLEMATIC_ATTRIBUTE_READING) { + readAttribute = readAttribute_IE; + } else if (Prototype.Browser.Opera) { + readAttribute = readAttribute_Opera; + } + + + function writeAttribute(element, name, value) { + element = $(element); + var attributes = {}, table = ATTRIBUTE_TRANSLATIONS.write; + + if (typeof name === 'object') { + attributes = name; + } else { + attributes[name] = Object.isUndefined(value) ? true : value; + } + + for (var attr in attributes) { + name = table.names[attr] || attr; + value = attributes[attr]; + if (table.values[attr]) + name = table.values[attr](element, value) || name; + if (value === false || value === null) + element.removeAttribute(name); + else if (value === true) + element.setAttribute(name, name); + else element.setAttribute(name, value); + } + + return element; + } + + var PROBLEMATIC_HAS_ATTRIBUTE_WITH_CHECKBOXES = (function () { + if (!HAS_EXTENDED_CREATE_ELEMENT_SYNTAX) { + return false; + } + var checkbox = document.createElement(''); + checkbox.checked = true; + var node = checkbox.getAttributeNode('checked'); + return !node || !node.specified; + })(); + + function hasAttribute(element, attribute) { + attribute = ATTRIBUTE_TRANSLATIONS.has[attribute] || attribute; + var node = $(element).getAttributeNode(attribute); + return !!(node && node.specified); + } + + function hasAttribute_IE(element, attribute) { + if (attribute === 'checked') { + return element.checked; + } + return hasAttribute(element, attribute); + } + + GLOBAL.Element.Methods.Simulated.hasAttribute = + PROBLEMATIC_HAS_ATTRIBUTE_WITH_CHECKBOXES ? + hasAttribute_IE : hasAttribute; + + function classNames(element) { + return new Element.ClassNames(element); + } + + var regExpCache = {}; + function getRegExpForClassName(className) { + if (regExpCache[className]) return regExpCache[className]; + + var re = new RegExp("(^|\\s+)" + className + "(\\s+|$)"); + regExpCache[className] = re; + return re; + } + + function hasClassName(element, className) { + if (!(element = $(element))) return; + + var elementClassName = element.className; + + if (elementClassName.length === 0) return false; + if (elementClassName === className) return true; + + return getRegExpForClassName(className).test(elementClassName); + } + + function addClassName(element, className) { + if (!(element = $(element))) return; + + if (!hasClassName(element, className)) + element.className += (element.className ? ' ' : '') + className; + + return element; + } + + function removeClassName(element, className) { + if (!(element = $(element))) return; + + element.className = element.className.replace( + getRegExpForClassName(className), ' ').strip(); + + return element; + } + + function toggleClassName(element, className, bool) { + if (!(element = $(element))) return; + + if (Object.isUndefined(bool)) + bool = !hasClassName(element, className); + + var method = Element[bool ? 'addClassName' : 'removeClassName']; + return method(element, className); + } + + var ATTRIBUTE_TRANSLATIONS = {}; + + var classProp = 'className', forProp = 'for'; + + DIV.setAttribute(classProp, 'x'); + if (DIV.className !== 'x') { + DIV.setAttribute('class', 'x'); + if (DIV.className === 'x') + classProp = 'class'; + } + + var LABEL = document.createElement('label'); + LABEL.setAttribute(forProp, 'x'); + if (LABEL.htmlFor !== 'x') { + LABEL.setAttribute('htmlFor', 'x'); + if (LABEL.htmlFor === 'x') + forProp = 'htmlFor'; + } + LABEL = null; + + function _getAttr(element, attribute) { + return element.getAttribute(attribute); + } + + function _getAttr2(element, attribute) { + return element.getAttribute(attribute, 2); + } + + function _getAttrNode(element, attribute) { + var node = element.getAttributeNode(attribute); + return node ? node.value : ''; + } + + function _getFlag(element, attribute) { + return $(element).hasAttribute(attribute) ? attribute : null; + } + + DIV.onclick = Prototype.emptyFunction; + var onclickValue = DIV.getAttribute('onclick'); + + var _getEv; + + if (String(onclickValue).indexOf('{') > -1) { + _getEv = function(element, attribute) { + var value = element.getAttribute(attribute); + if (!value) return null; + value = value.toString(); + value = value.split('{')[1]; + value = value.split('}')[0]; + return value.strip(); + }; + } + else if (onclickValue === '') { + _getEv = function(element, attribute) { + var value = element.getAttribute(attribute); + if (!value) return null; + return value.strip(); + }; + } + + ATTRIBUTE_TRANSLATIONS.read = { + names: { + 'class': classProp, + 'className': classProp, + 'for': forProp, + 'htmlFor': forProp + }, + + values: { + style: function(element) { + return element.style.cssText.toLowerCase(); + }, + title: function(element) { + return element.title; + } + } + }; + + ATTRIBUTE_TRANSLATIONS.write = { + names: { + className: 'class', + htmlFor: 'for', + cellpadding: 'cellPadding', + cellspacing: 'cellSpacing' + }, + + values: { + checked: function(element, value) { + element.checked = !!value; + }, + + style: function(element, value) { + element.style.cssText = value ? value : ''; + } + } + }; + + ATTRIBUTE_TRANSLATIONS.has = { names: {} }; + + Object.extend(ATTRIBUTE_TRANSLATIONS.write.names, + ATTRIBUTE_TRANSLATIONS.read.names); + + var CAMEL_CASED_ATTRIBUTE_NAMES = $w('colSpan rowSpan vAlign dateTime ' + + 'accessKey tabIndex encType maxLength readOnly longDesc frameBorder'); + + for (var i = 0, attr; attr = CAMEL_CASED_ATTRIBUTE_NAMES[i]; i++) { + ATTRIBUTE_TRANSLATIONS.write.names[attr.toLowerCase()] = attr; + ATTRIBUTE_TRANSLATIONS.has.names[attr.toLowerCase()] = attr; + } + + Object.extend(ATTRIBUTE_TRANSLATIONS.read.values, { + href: _getAttr2, + src: _getAttr2, + type: _getAttr, + action: _getAttrNode, + disabled: _getFlag, + checked: _getFlag, + readonly: _getFlag, + multiple: _getFlag, + onload: _getEv, + onunload: _getEv, + onclick: _getEv, + ondblclick: _getEv, + onmousedown: _getEv, + onmouseup: _getEv, + onmouseover: _getEv, + onmousemove: _getEv, + onmouseout: _getEv, + onfocus: _getEv, + onblur: _getEv, + onkeypress: _getEv, + onkeydown: _getEv, + onkeyup: _getEv, + onsubmit: _getEv, + onreset: _getEv, + onselect: _getEv, + onchange: _getEv + }); + + + Object.extend(methods, { + identify: identify, + readAttribute: readAttribute, + writeAttribute: writeAttribute, + classNames: classNames, + hasClassName: hasClassName, + addClassName: addClassName, + removeClassName: removeClassName, + toggleClassName: toggleClassName + }); + + + function normalizeStyleName(style) { + if (style === 'float' || style === 'styleFloat') + return 'cssFloat'; + return style.camelize(); + } + + function normalizeStyleName_IE(style) { + if (style === 'float' || style === 'cssFloat') + return 'styleFloat'; + return style.camelize(); + } + + function setStyle(element, styles) { + element = $(element); + var elementStyle = element.style, match; + + if (Object.isString(styles)) { + elementStyle.cssText += ';' + styles; + if (styles.include('opacity')) { + var opacity = styles.match(/opacity:\s*(\d?\.?\d*)/)[1]; + Element.setOpacity(element, opacity); + } + return element; + } + + for (var property in styles) { + if (property === 'opacity') { + Element.setOpacity(element, styles[property]); + } else { + var value = styles[property]; + if (property === 'float' || property === 'cssFloat') { + property = Object.isUndefined(elementStyle.styleFloat) ? + 'cssFloat' : 'styleFloat'; + } + elementStyle[property] = value; + } + } + + return element; + } + + + function getStyle(element, style) { + element = $(element); + style = normalizeStyleName(style); + + var value = element.style[style]; + if (!value || value === 'auto') { + var css = document.defaultView.getComputedStyle(element, null); + value = css ? css[style] : null; + } + + if (style === 'opacity') return value ? parseFloat(value) : 1.0; + return value === 'auto' ? null : value; + } + + function getStyle_Opera(element, style) { + switch (style) { + case 'height': case 'width': + if (!Element.visible(element)) return null; + + var dim = parseInt(getStyle(element, style), 10); + + if (dim !== element['offset' + style.capitalize()]) + return dim + 'px'; + + return Element.measure(element, style); + + default: return getStyle(element, style); + } + } + + function getStyle_IE(element, style) { + element = $(element); + style = normalizeStyleName_IE(style); + + var value = element.style[style]; + if (!value && element.currentStyle) { + value = element.currentStyle[style]; + } + + if (style === 'opacity' && !STANDARD_CSS_OPACITY_SUPPORTED) + return getOpacity_IE(element); + + if (value === 'auto') { + if ((style === 'width' || style === 'height') && Element.visible(element)) + return Element.measure(element, style) + 'px'; + return null; + } + + return value; + } + + function stripAlphaFromFilter_IE(filter) { + return (filter || '').replace(/alpha\([^\)]*\)/gi, ''); + } + + function hasLayout_IE(element) { + if (!element.currentStyle || !element.currentStyle.hasLayout) + element.style.zoom = 1; + return element; + } + + var STANDARD_CSS_OPACITY_SUPPORTED = (function() { + DIV.style.cssText = "opacity:.55"; + return /^0.55/.test(DIV.style.opacity); + })(); + + function setOpacity(element, value) { + element = $(element); + if (value == 1 || value === '') value = ''; + else if (value < 0.00001) value = 0; + element.style.opacity = value; + return element; + } + + function setOpacity_IE(element, value) { + if (STANDARD_CSS_OPACITY_SUPPORTED) + return setOpacity(element, value); + + element = hasLayout_IE($(element)); + var filter = Element.getStyle(element, 'filter'), + style = element.style; + + if (value == 1 || value === '') { + filter = stripAlphaFromFilter_IE(filter); + if (filter) style.filter = filter; + else style.removeAttribute('filter'); + return element; + } + + if (value < 0.00001) value = 0; + + style.filter = stripAlphaFromFilter_IE(filter) + + 'alpha(opacity=' + (value * 100) + ')'; + + return element; + } + + + function getOpacity(element) { + return Element.getStyle(element, 'opacity'); + } + + function getOpacity_IE(element) { + if (STANDARD_CSS_OPACITY_SUPPORTED) + return getOpacity(element); + + var filter = Element.getStyle(element, 'filter'); + if (filter.length === 0) return 1.0; + var match = (filter || '').match(/alpha\(opacity=(.*)\)/); + if (match && match[1]) return parseFloat(match[1]) / 100; + return 1.0; + } + + + Object.extend(methods, { + setStyle: setStyle, + getStyle: getStyle, + setOpacity: setOpacity, + getOpacity: getOpacity + }); + + if ('styleFloat' in DIV.style) { + methods.getStyle = getStyle_IE; + methods.setOpacity = setOpacity_IE; + methods.getOpacity = getOpacity_IE; + } + + var UID = 0; + + GLOBAL.Element.Storage = { UID: 1 }; + + function getUniqueElementID(element) { + if (element === window) return 0; + + if (typeof element._prototypeUID === 'undefined') + element._prototypeUID = Element.Storage.UID++; + return element._prototypeUID; + } + + function getUniqueElementID_IE(element) { + if (element === window) return 0; + if (element == document) return 1; + return element.uniqueID; + } + + var HAS_UNIQUE_ID_PROPERTY = ('uniqueID' in DIV); + if (HAS_UNIQUE_ID_PROPERTY) + getUniqueElementID = getUniqueElementID_IE; + + function getStorage(element) { + if (!(element = $(element))) return; + + var uid = getUniqueElementID(element); + + if (!Element.Storage[uid]) + Element.Storage[uid] = $H(); + + return Element.Storage[uid]; + } + + function store(element, key, value) { + if (!(element = $(element))) return; + var storage = getStorage(element); + if (arguments.length === 2) { + storage.update(key); + } else { + storage.set(key, value); + } + return element; + } + + function retrieve(element, key, defaultValue) { + if (!(element = $(element))) return; + var storage = getStorage(element), value = storage.get(key); + + if (Object.isUndefined(value)) { + storage.set(key, defaultValue); + value = defaultValue; + } + + return value; + } + + + Object.extend(methods, { + getStorage: getStorage, + store: store, + retrieve: retrieve + }); + + + var Methods = {}, ByTag = Element.Methods.ByTag, + F = Prototype.BrowserFeatures; + + if (!F.ElementExtensions && ('__proto__' in DIV)) { + GLOBAL.HTMLElement = {}; + GLOBAL.HTMLElement.prototype = DIV['__proto__']; + F.ElementExtensions = true; + } + + function checkElementPrototypeDeficiency(tagName) { + if (typeof window.Element === 'undefined') return false; + if (!HAS_EXTENDED_CREATE_ELEMENT_SYNTAX) return false; + var proto = window.Element.prototype; + if (proto) { + var id = '_' + (Math.random() + '').slice(2), + el = document.createElement(tagName); + proto[id] = 'x'; + var isBuggy = (el[id] !== 'x'); + delete proto[id]; + el = null; + return isBuggy; + } + + return false; + } + + var HTMLOBJECTELEMENT_PROTOTYPE_BUGGY = + checkElementPrototypeDeficiency('object'); + + function extendElementWith(element, methods) { + for (var property in methods) { + var value = methods[property]; + if (Object.isFunction(value) && !(property in element)) + element[property] = value.methodize(); + } + } + + var EXTENDED = {}; + function elementIsExtended(element) { + var uid = getUniqueElementID(element); + return (uid in EXTENDED); + } + + function extend(element) { + if (!element || elementIsExtended(element)) return element; + if (element.nodeType !== Node.ELEMENT_NODE || element == window) + return element; + + var methods = Object.clone(Methods), + tagName = element.tagName.toUpperCase(); + + if (ByTag[tagName]) Object.extend(methods, ByTag[tagName]); + + extendElementWith(element, methods); + EXTENDED[getUniqueElementID(element)] = true; + return element; + } + + function extend_IE8(element) { + if (!element || elementIsExtended(element)) return element; + + var t = element.tagName; + if (t && (/^(?:object|applet|embed)$/i.test(t))) { + extendElementWith(element, Element.Methods); + extendElementWith(element, Element.Methods.Simulated); + extendElementWith(element, Element.Methods.ByTag[t.toUpperCase()]); + } + + return element; + } + + if (F.SpecificElementExtensions) { + extend = HTMLOBJECTELEMENT_PROTOTYPE_BUGGY ? extend_IE8 : Prototype.K; + } + + function addMethodsToTagName(tagName, methods) { + tagName = tagName.toUpperCase(); + if (!ByTag[tagName]) ByTag[tagName] = {}; + Object.extend(ByTag[tagName], methods); + } + + function mergeMethods(destination, methods, onlyIfAbsent) { + if (Object.isUndefined(onlyIfAbsent)) onlyIfAbsent = false; + for (var property in methods) { + var value = methods[property]; + if (!Object.isFunction(value)) continue; + if (!onlyIfAbsent || !(property in destination)) + destination[property] = value.methodize(); + } + } + + function findDOMClass(tagName) { + var klass; + var trans = { + "OPTGROUP": "OptGroup", "TEXTAREA": "TextArea", "P": "Paragraph", + "FIELDSET": "FieldSet", "UL": "UList", "OL": "OList", "DL": "DList", + "DIR": "Directory", "H1": "Heading", "H2": "Heading", "H3": "Heading", + "H4": "Heading", "H5": "Heading", "H6": "Heading", "Q": "Quote", + "INS": "Mod", "DEL": "Mod", "A": "Anchor", "IMG": "Image", "CAPTION": + "TableCaption", "COL": "TableCol", "COLGROUP": "TableCol", "THEAD": + "TableSection", "TFOOT": "TableSection", "TBODY": "TableSection", "TR": + "TableRow", "TH": "TableCell", "TD": "TableCell", "FRAMESET": + "FrameSet", "IFRAME": "IFrame" + }; + if (trans[tagName]) klass = 'HTML' + trans[tagName] + 'Element'; + if (window[klass]) return window[klass]; + klass = 'HTML' + tagName + 'Element'; + if (window[klass]) return window[klass]; + klass = 'HTML' + tagName.capitalize() + 'Element'; + if (window[klass]) return window[klass]; + + var element = document.createElement(tagName), + proto = element['__proto__'] || element.constructor.prototype; + + element = null; + return proto; + } + + function addMethods(methods) { + if (arguments.length === 0) addFormMethods(); + + if (arguments.length === 2) { + var tagName = methods; + methods = arguments[1]; + } + + if (!tagName) { + Object.extend(Element.Methods, methods || {}); + } else { + if (Object.isArray(tagName)) { + for (var i = 0, tag; tag = tagName[i]; i++) + addMethodsToTagName(tag, methods); + } else { + addMethodsToTagName(tagName, methods); + } + } + + var ELEMENT_PROTOTYPE = window.HTMLElement ? HTMLElement.prototype : + Element.prototype; + + if (F.ElementExtensions) { + mergeMethods(ELEMENT_PROTOTYPE, Element.Methods); + mergeMethods(ELEMENT_PROTOTYPE, Element.Methods.Simulated, true); + } + + if (F.SpecificElementExtensions) { + for (var tag in Element.Methods.ByTag) { + var klass = findDOMClass(tag); + if (Object.isUndefined(klass)) continue; + mergeMethods(klass.prototype, ByTag[tag]); + } + } + + Object.extend(Element, Element.Methods); + Object.extend(Element, Element.Methods.Simulated); + delete Element.ByTag; + delete Element.Simulated; + + Element.extend.refresh(); + + ELEMENT_CACHE = {}; + } + + Object.extend(GLOBAL.Element, { + extend: extend, + addMethods: addMethods + }); + + if (extend === Prototype.K) { + GLOBAL.Element.extend.refresh = Prototype.emptyFunction; + } else { + GLOBAL.Element.extend.refresh = function() { + if (Prototype.BrowserFeatures.ElementExtensions) return; + Object.extend(Methods, Element.Methods); + Object.extend(Methods, Element.Methods.Simulated); + + EXTENDED = {}; + }; + } + + function addFormMethods() { + Object.extend(Form, Form.Methods); + Object.extend(Form.Element, Form.Element.Methods); + Object.extend(Element.Methods.ByTag, { + "FORM": Object.clone(Form.Methods), + "INPUT": Object.clone(Form.Element.Methods), + "SELECT": Object.clone(Form.Element.Methods), + "TEXTAREA": Object.clone(Form.Element.Methods), + "BUTTON": Object.clone(Form.Element.Methods) + }); + } + + Element.addMethods(methods); + + function destroyCache_IE() { + DIV = null; + ELEMENT_CACHE = null; + } + + if (window.attachEvent) + window.attachEvent('onunload', destroyCache_IE); + +})(this); +(function() { + + function toDecimal(pctString) { + var match = pctString.match(/^(\d+)%?$/i); + if (!match) return null; + return (Number(match[1]) / 100); + } + + function getRawStyle(element, style) { + element = $(element); + + var value = element.style[style]; + if (!value || value === 'auto') { + var css = document.defaultView.getComputedStyle(element, null); + value = css ? css[style] : null; + } + + if (style === 'opacity') return value ? parseFloat(value) : 1.0; + return value === 'auto' ? null : value; + } + + function getRawStyle_IE(element, style) { + var value = element.style[style]; + if (!value && element.currentStyle) { + value = element.currentStyle[style]; + } + return value; + } + + function getContentWidth(element, context) { + var boxWidth = element.offsetWidth; + + var bl = getPixelValue(element, 'borderLeftWidth', context) || 0; + var br = getPixelValue(element, 'borderRightWidth', context) || 0; + var pl = getPixelValue(element, 'paddingLeft', context) || 0; + var pr = getPixelValue(element, 'paddingRight', context) || 0; + + return boxWidth - bl - br - pl - pr; + } + + if ('currentStyle' in document.documentElement) { + getRawStyle = getRawStyle_IE; + } + + + function getPixelValue(value, property, context) { + var element = null; + if (Object.isElement(value)) { + element = value; + value = getRawStyle(element, property); + } + + if (value === null || Object.isUndefined(value)) { + return null; + } + + if ((/^(?:-)?\d+(\.\d+)?(px)?$/i).test(value)) { + return window.parseFloat(value); + } + + var isPercentage = value.include('%'), isViewport = (context === document.viewport); + + if (/\d/.test(value) && element && element.runtimeStyle && !(isPercentage && isViewport)) { + var style = element.style.left, rStyle = element.runtimeStyle.left; + element.runtimeStyle.left = element.currentStyle.left; + element.style.left = value || 0; + value = element.style.pixelLeft; + element.style.left = style; + element.runtimeStyle.left = rStyle; + + return value; + } + + if (element && isPercentage) { + context = context || element.parentNode; + var decimal = toDecimal(value), whole = null; + + var isHorizontal = property.include('left') || property.include('right') || + property.include('width'); + + var isVertical = property.include('top') || property.include('bottom') || + property.include('height'); + + if (context === document.viewport) { + if (isHorizontal) { + whole = document.viewport.getWidth(); + } else if (isVertical) { + whole = document.viewport.getHeight(); + } + } else { + if (isHorizontal) { + whole = $(context).measure('width'); + } else if (isVertical) { + whole = $(context).measure('height'); + } + } + + return (whole === null) ? 0 : whole * decimal; + } + + return 0; + } + + function toCSSPixels(number) { + if (Object.isString(number) && number.endsWith('px')) + return number; + return number + 'px'; + } + + function isDisplayed(element) { + while (element && element.parentNode) { + var display = element.getStyle('display'); + if (display === 'none') { + return false; + } + element = $(element.parentNode); + } + return true; + } + + var hasLayout = Prototype.K; + if ('currentStyle' in document.documentElement) { + hasLayout = function(element) { + if (!element.currentStyle.hasLayout) { + element.style.zoom = 1; + } + return element; + }; + } + + function cssNameFor(key) { + if (key.include('border')) key = key + '-width'; + return key.camelize(); + } + + Element.Layout = Class.create(Hash, { + initialize: function($super, element, preCompute) { + $super(); + this.element = $(element); + + Element.Layout.PROPERTIES.each( function(property) { + this._set(property, null); + }, this); + + if (preCompute) { + this._preComputing = true; + this._begin(); + Element.Layout.PROPERTIES.each( this._compute, this ); + this._end(); + this._preComputing = false; + } + }, + + _set: function(property, value) { + return Hash.prototype.set.call(this, property, value); + }, + + set: function(property, value) { + throw "Properties of Element.Layout are read-only."; + }, + + get: function($super, property) { + var value = $super(property); + return value === null ? this._compute(property) : value; + }, + + _begin: function() { + if (this._isPrepared()) return; + + var element = this.element; + if (isDisplayed(element)) { + this._setPrepared(true); + return; + } + + + var originalStyles = { + position: element.style.position || '', + width: element.style.width || '', + visibility: element.style.visibility || '', + display: element.style.display || '' + }; + + element.store('prototype_original_styles', originalStyles); + + var position = getRawStyle(element, 'position'), width = element.offsetWidth; + + if (width === 0 || width === null) { + element.style.display = 'block'; + width = element.offsetWidth; + } + + var context = (position === 'fixed') ? document.viewport : + element.parentNode; + + var tempStyles = { + visibility: 'hidden', + display: 'block' + }; + + if (position !== 'fixed') tempStyles.position = 'absolute'; + + element.setStyle(tempStyles); + + var positionedWidth = element.offsetWidth, newWidth; + if (width && (positionedWidth === width)) { + newWidth = getContentWidth(element, context); + } else if (position === 'absolute' || position === 'fixed') { + newWidth = getContentWidth(element, context); + } else { + var parent = element.parentNode, pLayout = $(parent).getLayout(); + + newWidth = pLayout.get('width') - + this.get('margin-left') - + this.get('border-left') - + this.get('padding-left') - + this.get('padding-right') - + this.get('border-right') - + this.get('margin-right'); + } + + element.setStyle({ width: newWidth + 'px' }); + + this._setPrepared(true); + }, + + _end: function() { + var element = this.element; + var originalStyles = element.retrieve('prototype_original_styles'); + element.store('prototype_original_styles', null); + element.setStyle(originalStyles); + this._setPrepared(false); + }, + + _compute: function(property) { + var COMPUTATIONS = Element.Layout.COMPUTATIONS; + if (!(property in COMPUTATIONS)) { + throw "Property not found."; + } + + return this._set(property, COMPUTATIONS[property].call(this, this.element)); + }, + + _isPrepared: function() { + return this.element.retrieve('prototype_element_layout_prepared', false); + }, + + _setPrepared: function(bool) { + return this.element.store('prototype_element_layout_prepared', bool); + }, + + toObject: function() { + var args = $A(arguments); + var keys = (args.length === 0) ? Element.Layout.PROPERTIES : + args.join(' ').split(' '); + var obj = {}; + keys.each( function(key) { + if (!Element.Layout.PROPERTIES.include(key)) return; + var value = this.get(key); + if (value != null) obj[key] = value; + }, this); + return obj; + }, + + toHash: function() { + var obj = this.toObject.apply(this, arguments); + return new Hash(obj); + }, + + toCSS: function() { + var args = $A(arguments); + var keys = (args.length === 0) ? Element.Layout.PROPERTIES : + args.join(' ').split(' '); + var css = {}; + + keys.each( function(key) { + if (!Element.Layout.PROPERTIES.include(key)) return; + if (Element.Layout.COMPOSITE_PROPERTIES.include(key)) return; + + var value = this.get(key); + if (value != null) css[cssNameFor(key)] = value + 'px'; + }, this); + return css; + }, + + inspect: function() { + return "#"; + } + }); + + Object.extend(Element.Layout, { + PROPERTIES: $w('height width top left right bottom border-left border-right border-top border-bottom padding-left padding-right padding-top padding-bottom margin-top margin-bottom margin-left margin-right padding-box-width padding-box-height border-box-width border-box-height margin-box-width margin-box-height'), + + COMPOSITE_PROPERTIES: $w('padding-box-width padding-box-height margin-box-width margin-box-height border-box-width border-box-height'), + + COMPUTATIONS: { + 'height': function(element) { + if (!this._preComputing) this._begin(); + + var bHeight = this.get('border-box-height'); + if (bHeight <= 0) { + if (!this._preComputing) this._end(); + return 0; + } + + var bTop = this.get('border-top'), + bBottom = this.get('border-bottom'); + + var pTop = this.get('padding-top'), + pBottom = this.get('padding-bottom'); + + if (!this._preComputing) this._end(); + + return bHeight - bTop - bBottom - pTop - pBottom; + }, + + 'width': function(element) { + if (!this._preComputing) this._begin(); + + var bWidth = this.get('border-box-width'); + if (bWidth <= 0) { + if (!this._preComputing) this._end(); + return 0; + } + + var bLeft = this.get('border-left'), + bRight = this.get('border-right'); + + var pLeft = this.get('padding-left'), + pRight = this.get('padding-right'); + + if (!this._preComputing) this._end(); + return bWidth - bLeft - bRight - pLeft - pRight; + }, + + 'padding-box-height': function(element) { + var height = this.get('height'), + pTop = this.get('padding-top'), + pBottom = this.get('padding-bottom'); + + return height + pTop + pBottom; + }, + + 'padding-box-width': function(element) { + var width = this.get('width'), + pLeft = this.get('padding-left'), + pRight = this.get('padding-right'); + + return width + pLeft + pRight; + }, + + 'border-box-height': function(element) { + if (!this._preComputing) this._begin(); + var height = element.offsetHeight; + if (!this._preComputing) this._end(); + return height; + }, + + 'border-box-width': function(element) { + if (!this._preComputing) this._begin(); + var width = element.offsetWidth; + if (!this._preComputing) this._end(); + return width; + }, + + 'margin-box-height': function(element) { + var bHeight = this.get('border-box-height'), + mTop = this.get('margin-top'), + mBottom = this.get('margin-bottom'); + + if (bHeight <= 0) return 0; + + return bHeight + mTop + mBottom; + }, + + 'margin-box-width': function(element) { + var bWidth = this.get('border-box-width'), + mLeft = this.get('margin-left'), + mRight = this.get('margin-right'); + + if (bWidth <= 0) return 0; + + return bWidth + mLeft + mRight; + }, + + 'top': function(element) { + var offset = element.positionedOffset(); + return offset.top; + }, + + 'bottom': function(element) { + var offset = element.positionedOffset(), + parent = element.getOffsetParent(), + pHeight = parent.measure('height'); + + var mHeight = this.get('border-box-height'); + + return pHeight - mHeight - offset.top; + }, + + 'left': function(element) { + var offset = element.positionedOffset(); + return offset.left; + }, + + 'right': function(element) { + var offset = element.positionedOffset(), + parent = element.getOffsetParent(), + pWidth = parent.measure('width'); + + var mWidth = this.get('border-box-width'); + + return pWidth - mWidth - offset.left; + }, + + 'padding-top': function(element) { + return getPixelValue(element, 'paddingTop'); + }, + + 'padding-bottom': function(element) { + return getPixelValue(element, 'paddingBottom'); + }, + + 'padding-left': function(element) { + return getPixelValue(element, 'paddingLeft'); + }, + + 'padding-right': function(element) { + return getPixelValue(element, 'paddingRight'); + }, + + 'border-top': function(element) { + return getPixelValue(element, 'borderTopWidth'); + }, + + 'border-bottom': function(element) { + return getPixelValue(element, 'borderBottomWidth'); + }, + + 'border-left': function(element) { + return getPixelValue(element, 'borderLeftWidth'); + }, + + 'border-right': function(element) { + return getPixelValue(element, 'borderRightWidth'); + }, + + 'margin-top': function(element) { + return getPixelValue(element, 'marginTop'); + }, + + 'margin-bottom': function(element) { + return getPixelValue(element, 'marginBottom'); + }, + + 'margin-left': function(element) { + return getPixelValue(element, 'marginLeft'); + }, + + 'margin-right': function(element) { + return getPixelValue(element, 'marginRight'); + } + } + }); + + if ('getBoundingClientRect' in document.documentElement) { + Object.extend(Element.Layout.COMPUTATIONS, { + 'right': function(element) { + var parent = hasLayout(element.getOffsetParent()); + var rect = element.getBoundingClientRect(), + pRect = parent.getBoundingClientRect(); + + return (pRect.right - rect.right).round(); + }, + + 'bottom': function(element) { + var parent = hasLayout(element.getOffsetParent()); + var rect = element.getBoundingClientRect(), + pRect = parent.getBoundingClientRect(); + + return (pRect.bottom - rect.bottom).round(); + } + }); + } + + Element.Offset = Class.create({ + initialize: function(left, top) { + this.left = left.round(); + this.top = top.round(); + + this[0] = this.left; + this[1] = this.top; + }, + + relativeTo: function(offset) { + return new Element.Offset( + this.left - offset.left, + this.top - offset.top + ); + }, + + inspect: function() { + return "#".interpolate(this); + }, + + toString: function() { + return "[#{left}, #{top}]".interpolate(this); + }, + + toArray: function() { + return [this.left, this.top]; + } + }); + + function getLayout(element, preCompute) { + return new Element.Layout(element, preCompute); + } + + function measure(element, property) { + return $(element).getLayout().get(property); + } + + function getHeight(element) { + return Element.getDimensions(element).height; + } + + function getWidth(element) { + return Element.getDimensions(element).width; + } + + function getDimensions(element) { + element = $(element); + var display = Element.getStyle(element, 'display'); + + if (display && display !== 'none') { + return { width: element.offsetWidth, height: element.offsetHeight }; + } + + var style = element.style; + var originalStyles = { + visibility: style.visibility, + position: style.position, + display: style.display + }; + + var newStyles = { + visibility: 'hidden', + display: 'block' + }; + + if (originalStyles.position !== 'fixed') + newStyles.position = 'absolute'; + + Element.setStyle(element, newStyles); + + var dimensions = { + width: element.offsetWidth, + height: element.offsetHeight + }; + + Element.setStyle(element, originalStyles); + + return dimensions; + } + + function getOffsetParent(element) { + element = $(element); + + if (isDocument(element) || isDetached(element) || isBody(element) || isHtml(element)) + return $(document.body); + + var isInline = (Element.getStyle(element, 'display') === 'inline'); + if (!isInline && element.offsetParent) return $(element.offsetParent); + + while ((element = element.parentNode) && element !== document.body) { + if (Element.getStyle(element, 'position') !== 'static') { + return isHtml(element) ? $(document.body) : $(element); + } + } + + return $(document.body); + } + + + function cumulativeOffset(element) { + element = $(element); + var valueT = 0, valueL = 0; + if (element.parentNode) { + do { + valueT += element.offsetTop || 0; + valueL += element.offsetLeft || 0; + element = element.offsetParent; + } while (element); + } + return new Element.Offset(valueL, valueT); + } + + function positionedOffset(element) { + element = $(element); + + var layout = element.getLayout(); + + var valueT = 0, valueL = 0; + do { + valueT += element.offsetTop || 0; + valueL += element.offsetLeft || 0; + element = element.offsetParent; + if (element) { + if (isBody(element)) break; + var p = Element.getStyle(element, 'position'); + if (p !== 'static') break; + } + } while (element); + + valueL -= layout.get('margin-top'); + valueT -= layout.get('margin-left'); + + return new Element.Offset(valueL, valueT); + } + + function cumulativeScrollOffset(element) { + var valueT = 0, valueL = 0; + do { + if (element === document.body) { + var bodyScrollNode = document.documentElement || document.body.parentNode || document.body; + valueT += !Object.isUndefined(window.pageYOffset) ? window.pageYOffset : bodyScrollNode.scrollTop || 0; + valueL += !Object.isUndefined(window.pageXOffset) ? window.pageXOffset : bodyScrollNode.scrollLeft || 0; + break; + } else { + valueT += element.scrollTop || 0; + valueL += element.scrollLeft || 0; + element = element.parentNode; + } + } while (element); + return new Element.Offset(valueL, valueT); + } + + function viewportOffset(forElement) { + var valueT = 0, valueL = 0, docBody = document.body; + + forElement = $(forElement); + var element = forElement; + do { + valueT += element.offsetTop || 0; + valueL += element.offsetLeft || 0; + if (element.offsetParent == docBody && + Element.getStyle(element, 'position') == 'absolute') break; + } while (element = element.offsetParent); + + element = forElement; + do { + if (element != docBody) { + valueT -= element.scrollTop || 0; + valueL -= element.scrollLeft || 0; + } + } while (element = element.parentNode); + return new Element.Offset(valueL, valueT); + } + + function absolutize(element) { + element = $(element); + + if (Element.getStyle(element, 'position') === 'absolute') { + return element; + } + + var offsetParent = getOffsetParent(element); + var eOffset = element.viewportOffset(), + pOffset = offsetParent.viewportOffset(); + + var offset = eOffset.relativeTo(pOffset); + var layout = element.getLayout(); + + element.store('prototype_absolutize_original_styles', { + position: element.getStyle('position'), + left: element.getStyle('left'), + top: element.getStyle('top'), + width: element.getStyle('width'), + height: element.getStyle('height') + }); + + element.setStyle({ + position: 'absolute', + top: offset.top + 'px', + left: offset.left + 'px', + width: layout.get('width') + 'px', + height: layout.get('height') + 'px' + }); + + return element; + } + + function relativize(element) { + element = $(element); + if (Element.getStyle(element, 'position') === 'relative') { + return element; + } + + var originalStyles = + element.retrieve('prototype_absolutize_original_styles'); + + if (originalStyles) element.setStyle(originalStyles); + return element; + } + + + function scrollTo(element) { + element = $(element); + var pos = Element.cumulativeOffset(element); + window.scrollTo(pos.left, pos.top); + return element; + } + + + function makePositioned(element) { + element = $(element); + var position = Element.getStyle(element, 'position'), styles = {}; + if (position === 'static' || !position) { + styles.position = 'relative'; + if (Prototype.Browser.Opera) { + styles.top = 0; + styles.left = 0; + } + Element.setStyle(element, styles); + Element.store(element, 'prototype_made_positioned', true); + } + return element; + } + + function undoPositioned(element) { + element = $(element); + var storage = Element.getStorage(element), + madePositioned = storage.get('prototype_made_positioned'); + + if (madePositioned) { + storage.unset('prototype_made_positioned'); + Element.setStyle(element, { + position: '', + top: '', + bottom: '', + left: '', + right: '' + }); + } + return element; + } + + function makeClipping(element) { + element = $(element); + + var storage = Element.getStorage(element), + madeClipping = storage.get('prototype_made_clipping'); + + if (Object.isUndefined(madeClipping)) { + var overflow = Element.getStyle(element, 'overflow'); + storage.set('prototype_made_clipping', overflow); + if (overflow !== 'hidden') + element.style.overflow = 'hidden'; + } + + return element; + } + + function undoClipping(element) { + element = $(element); + var storage = Element.getStorage(element), + overflow = storage.get('prototype_made_clipping'); + + if (!Object.isUndefined(overflow)) { + storage.unset('prototype_made_clipping'); + element.style.overflow = overflow || ''; + } + + return element; + } + + function clonePosition(element, source, options) { + options = Object.extend({ + setLeft: true, + setTop: true, + setWidth: true, + setHeight: true, + offsetTop: 0, + offsetLeft: 0 + }, options || {}); + + source = $(source); + element = $(element); + var p, delta, layout, styles = {}; + + if (options.setLeft || options.setTop) { + p = Element.viewportOffset(source); + delta = [0, 0]; + if (Element.getStyle(element, 'position') === 'absolute') { + var parent = Element.getOffsetParent(element); + if (parent !== document.body) delta = Element.viewportOffset(parent); + } + } + + if (options.setWidth || options.setHeight) { + layout = Element.getLayout(source); + } + + if (options.setLeft) + styles.left = (p[0] - delta[0] + options.offsetLeft) + 'px'; + if (options.setTop) + styles.top = (p[1] - delta[1] + options.offsetTop) + 'px'; + + if (options.setWidth) + styles.width = layout.get('border-box-width') + 'px'; + if (options.setHeight) + styles.height = layout.get('border-box-height') + 'px'; + + return Element.setStyle(element, styles); + } + + + if (Prototype.Browser.IE) { + getOffsetParent = getOffsetParent.wrap( + function(proceed, element) { + element = $(element); + + if (isDocument(element) || isDetached(element) || isBody(element) || isHtml(element)) + return $(document.body); + + var position = element.getStyle('position'); + if (position !== 'static') return proceed(element); + + element.setStyle({ position: 'relative' }); + var value = proceed(element); + element.setStyle({ position: position }); + return value; + } + ); + + positionedOffset = positionedOffset.wrap(function(proceed, element) { + element = $(element); + if (!element.parentNode) return new Element.Offset(0, 0); + var position = element.getStyle('position'); + if (position !== 'static') return proceed(element); + + var offsetParent = element.getOffsetParent(); + if (offsetParent && offsetParent.getStyle('position') === 'fixed') + hasLayout(offsetParent); + + element.setStyle({ position: 'relative' }); + var value = proceed(element); + element.setStyle({ position: position }); + return value; + }); + } else if (Prototype.Browser.Webkit) { + cumulativeOffset = function(element) { + element = $(element); + var valueT = 0, valueL = 0; + do { + valueT += element.offsetTop || 0; + valueL += element.offsetLeft || 0; + if (element.offsetParent == document.body) { + if (Element.getStyle(element, 'position') == 'absolute') break; + } + + element = element.offsetParent; + } while (element); + + return new Element.Offset(valueL, valueT); + }; + } + + + Element.addMethods({ + getLayout: getLayout, + measure: measure, + getWidth: getWidth, + getHeight: getHeight, + getDimensions: getDimensions, + getOffsetParent: getOffsetParent, + cumulativeOffset: cumulativeOffset, + positionedOffset: positionedOffset, + cumulativeScrollOffset: cumulativeScrollOffset, + viewportOffset: viewportOffset, + absolutize: absolutize, + relativize: relativize, + scrollTo: scrollTo, + makePositioned: makePositioned, + undoPositioned: undoPositioned, + makeClipping: makeClipping, + undoClipping: undoClipping, + clonePosition: clonePosition + }); + + function isBody(element) { + return element.nodeName.toUpperCase() === 'BODY'; + } + + function isHtml(element) { + return element.nodeName.toUpperCase() === 'HTML'; + } + + function isDocument(element) { + return element.nodeType === Node.DOCUMENT_NODE; + } + + function isDetached(element) { + return element !== document.body && + !Element.descendantOf(element, document.body); + } + + if ('getBoundingClientRect' in document.documentElement) { + Element.addMethods({ + viewportOffset: function(element) { + element = $(element); + if (isDetached(element)) return new Element.Offset(0, 0); + + var rect = element.getBoundingClientRect(), + docEl = document.documentElement; + return new Element.Offset(rect.left - docEl.clientLeft, + rect.top - docEl.clientTop); + } + }); + } + + +})(); + +(function() { + + var IS_OLD_OPERA = Prototype.Browser.Opera && + (window.parseFloat(window.opera.version()) < 9.5); + var ROOT = null; + function getRootElement() { + if (ROOT) return ROOT; + ROOT = IS_OLD_OPERA ? document.body : document.documentElement; + return ROOT; + } + + function getDimensions() { + return { width: this.getWidth(), height: this.getHeight() }; + } + + function getWidth() { + return getRootElement().clientWidth; + } + + function getHeight() { + return getRootElement().clientHeight; + } + + function getScrollOffsets() { + var x = window.pageXOffset || document.documentElement.scrollLeft || + document.body.scrollLeft; + var y = window.pageYOffset || document.documentElement.scrollTop || + document.body.scrollTop; + + return new Element.Offset(x, y); + } + + document.viewport = { + getDimensions: getDimensions, + getWidth: getWidth, + getHeight: getHeight, + getScrollOffsets: getScrollOffsets + }; + +})(); +window.$$ = function() { + var expression = $A(arguments).join(', '); + return Prototype.Selector.select(expression, document); +}; + +Prototype.Selector = (function() { + + function select() { + throw new Error('Method "Prototype.Selector.select" must be defined.'); + } + + function match() { + throw new Error('Method "Prototype.Selector.match" must be defined.'); + } + + function find(elements, expression, index) { + index = index || 0; + var match = Prototype.Selector.match, length = elements.length, matchIndex = 0, i; + + for (i = 0; i < length; i++) { + if (match(elements[i], expression) && index == matchIndex++) { + return Element.extend(elements[i]); + } + } + } + + function extendElements(elements) { + for (var i = 0, length = elements.length; i < length; i++) { + Element.extend(elements[i]); + } + return elements; + } + + + var K = Prototype.K; + + return { + select: select, + match: match, + find: find, + extendElements: (Element.extend === K) ? K : extendElements, + extendElement: Element.extend + }; +})(); +Prototype._original_property = window.Sizzle; +/*! + * Sizzle CSS Selector Engine v@VERSION + * http://sizzlejs.com/ + * + * Copyright 2013 jQuery Foundation, Inc. and other contributors + * Released under the MIT license + * http://jquery.org/license + * + * Date: @DATE + */ +(function( window ) { + +var i, + support, + Expr, + getText, + isXML, + compile, + select, + outermostContext, + sortInput, + hasDuplicate, + + setDocument, + document, + docElem, + documentIsHTML, + rbuggyQSA, + rbuggyMatches, + matches, + contains, + + expando = "sizzle" + -(new Date()), + preferredDoc = window.document, + dirruns = 0, + done = 0, + classCache = createCache(), + tokenCache = createCache(), + compilerCache = createCache(), + sortOrder = function( a, b ) { + if ( a === b ) { + hasDuplicate = true; + } + return 0; + }, + + strundefined = typeof undefined, + MAX_NEGATIVE = 1 << 31, + + hasOwn = ({}).hasOwnProperty, + arr = [], + pop = arr.pop, + push_native = arr.push, + push = arr.push, + slice = arr.slice, + indexOf = arr.indexOf || function( elem ) { + var i = 0, + len = this.length; + for ( ; i < len; i++ ) { + if ( this[i] === elem ) { + return i; + } + } + return -1; + }, + + booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped", + + + whitespace = "[\\x20\\t\\r\\n\\f]", + characterEncoding = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+", + + identifier = characterEncoding.replace( "w", "w#" ), + + attributes = "\\[" + whitespace + "*(" + characterEncoding + ")" + whitespace + + "*(?:([*^$|!~]?=)" + whitespace + "*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|(" + identifier + ")|)|)" + whitespace + "*\\]", + + pseudos = ":(" + characterEncoding + ")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|" + attributes.replace( 3, 8 ) + ")*)|.*)\\)|)", + + rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ), + + rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), + rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ), + + rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]", "g" ), + + rpseudo = new RegExp( pseudos ), + ridentifier = new RegExp( "^" + identifier + "$" ), + + matchExpr = { + "ID": new RegExp( "^#(" + characterEncoding + ")" ), + "CLASS": new RegExp( "^\\.(" + characterEncoding + ")" ), + "TAG": new RegExp( "^(" + characterEncoding.replace( "w", "w*" ) + ")" ), + "ATTR": new RegExp( "^" + attributes ), + "PSEUDO": new RegExp( "^" + pseudos ), + "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace + + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace + + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), + "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), + "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + + whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) + }, + + rinputs = /^(?:input|select|textarea|button)$/i, + rheader = /^h\d$/i, + + rnative = /^[^{]+\{\s*\[native \w/, + + rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, + + rsibling = /[+~]/, + rescape = /'|\\/g, + + runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ), + funescape = function( _, escaped, escapedWhitespace ) { + var high = "0x" + escaped - 0x10000; + return high !== high || escapedWhitespace ? + escaped : + high < 0 ? + String.fromCharCode( high + 0x10000 ) : + String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); + }; + +try { + push.apply( + (arr = slice.call( preferredDoc.childNodes )), + preferredDoc.childNodes + ); + arr[ preferredDoc.childNodes.length ].nodeType; +} catch ( e ) { + push = { apply: arr.length ? + + function( target, els ) { + push_native.apply( target, slice.call(els) ); + } : + + function( target, els ) { + var j = target.length, + i = 0; + while ( (target[j++] = els[i++]) ) {} + target.length = j - 1; + } + }; +} + +function Sizzle( selector, context, results, seed ) { + var match, elem, m, nodeType, + i, groups, old, nid, newContext, newSelector; + + if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) { + setDocument( context ); + } + + context = context || document; + results = results || []; + + if ( !selector || typeof selector !== "string" ) { + return results; + } + + if ( (nodeType = context.nodeType) !== 1 && nodeType !== 9 ) { + return []; + } + + if ( documentIsHTML && !seed ) { + + if ( (match = rquickExpr.exec( selector )) ) { + if ( (m = match[1]) ) { + if ( nodeType === 9 ) { + elem = context.getElementById( m ); + if ( elem && elem.parentNode ) { + if ( elem.id === m ) { + results.push( elem ); + return results; + } + } else { + return results; + } + } else { + if ( context.ownerDocument && (elem = context.ownerDocument.getElementById( m )) && + contains( context, elem ) && elem.id === m ) { + results.push( elem ); + return results; + } + } + + } else if ( match[2] ) { + push.apply( results, context.getElementsByTagName( selector ) ); + return results; + + } else if ( (m = match[3]) && support.getElementsByClassName && context.getElementsByClassName ) { + push.apply( results, context.getElementsByClassName( m ) ); + return results; + } + } + + if ( support.qsa && (!rbuggyQSA || !rbuggyQSA.test( selector )) ) { + nid = old = expando; + newContext = context; + newSelector = nodeType === 9 && selector; + + if ( nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) { + groups = tokenize( selector ); + + if ( (old = context.getAttribute("id")) ) { + nid = old.replace( rescape, "\\$&" ); + } else { + context.setAttribute( "id", nid ); + } + nid = "[id='" + nid + "'] "; + + i = groups.length; + while ( i-- ) { + groups[i] = nid + toSelector( groups[i] ); + } + newContext = rsibling.test( selector ) && testContext( context.parentNode ) || context; + newSelector = groups.join(","); + } + + if ( newSelector ) { + try { + push.apply( results, + newContext.querySelectorAll( newSelector ) + ); + return results; + } catch(qsaError) { + } finally { + if ( !old ) { + context.removeAttribute("id"); + } + } + } + } + } + + return select( selector.replace( rtrim, "$1" ), context, results, seed ); +} + +/** + * Create key-value caches of limited size + * @returns {Function(string, Object)} Returns the Object data after storing it on itself with + * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) + * deleting the oldest entry + */ +function createCache() { + var keys = []; + + function cache( key, value ) { + if ( keys.push( key + " " ) > Expr.cacheLength ) { + delete cache[ keys.shift() ]; + } + return (cache[ key + " " ] = value); + } + return cache; +} + +/** + * Mark a function for special use by Sizzle + * @param {Function} fn The function to mark + */ +function markFunction( fn ) { + fn[ expando ] = true; + return fn; +} + +/** + * Support testing using an element + * @param {Function} fn Passed the created div and expects a boolean result + */ +function assert( fn ) { + var div = document.createElement("div"); + + try { + return !!fn( div ); + } catch (e) { + return false; + } finally { + if ( div.parentNode ) { + div.parentNode.removeChild( div ); + } + div = null; + } +} + +/** + * Adds the same handler for all of the specified attrs + * @param {String} attrs Pipe-separated list of attributes + * @param {Function} handler The method that will be applied + */ +function addHandle( attrs, handler ) { + var arr = attrs.split("|"), + i = attrs.length; + + while ( i-- ) { + Expr.attrHandle[ arr[i] ] = handler; + } +} + +/** + * Checks document order of two siblings + * @param {Element} a + * @param {Element} b + * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b + */ +function siblingCheck( a, b ) { + var cur = b && a, + diff = cur && a.nodeType === 1 && b.nodeType === 1 && + ( ~b.sourceIndex || MAX_NEGATIVE ) - + ( ~a.sourceIndex || MAX_NEGATIVE ); + + if ( diff ) { + return diff; + } + + if ( cur ) { + while ( (cur = cur.nextSibling) ) { + if ( cur === b ) { + return -1; + } + } + } + + return a ? 1 : -1; +} + +/** + * Returns a function to use in pseudos for input types + * @param {String} type + */ +function createInputPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for buttons + * @param {String} type + */ +function createButtonPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return (name === "input" || name === "button") && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for positionals + * @param {Function} fn + */ +function createPositionalPseudo( fn ) { + return markFunction(function( argument ) { + argument = +argument; + return markFunction(function( seed, matches ) { + var j, + matchIndexes = fn( [], seed.length, argument ), + i = matchIndexes.length; + + while ( i-- ) { + if ( seed[ (j = matchIndexes[i]) ] ) { + seed[j] = !(matches[j] = seed[j]); + } + } + }); + }); +} + +/** + * Checks a node for validity as a Sizzle context + * @param {Element|Object=} context + * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value + */ +function testContext( context ) { + return context && typeof context.getElementsByTagName !== strundefined && context; +} + +support = Sizzle.support = {}; + +/** + * Detects XML nodes + * @param {Element|Object} elem An element or a document + * @returns {Boolean} True iff elem is a non-HTML XML node + */ +isXML = Sizzle.isXML = function( elem ) { + var documentElement = elem && (elem.ownerDocument || elem).documentElement; + return documentElement ? documentElement.nodeName !== "HTML" : false; +}; + +/** + * Sets document-related variables once based on the current document + * @param {Element|Object} [doc] An element or document object to use to set the document + * @returns {Object} Returns the current document + */ +setDocument = Sizzle.setDocument = function( node ) { + var hasCompare, + doc = node ? node.ownerDocument || node : preferredDoc, + parent = doc.defaultView; + + if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) { + return document; + } + + document = doc; + docElem = doc.documentElement; + + documentIsHTML = !isXML( doc ); + + if ( parent && parent !== parent.top ) { + if ( parent.addEventListener ) { + parent.addEventListener( "unload", function() { + setDocument(); + }, false ); + } else if ( parent.attachEvent ) { + parent.attachEvent( "onunload", function() { + setDocument(); + }); + } + } + + /* Attributes + ---------------------------------------------------------------------- */ + + support.attributes = assert(function( div ) { + div.className = "i"; + return !div.getAttribute("className"); + }); + + /* getElement(s)By* + ---------------------------------------------------------------------- */ + + support.getElementsByTagName = assert(function( div ) { + div.appendChild( doc.createComment("") ); + return !div.getElementsByTagName("*").length; + }); + + support.getElementsByClassName = rnative.test( doc.getElementsByClassName ) && assert(function( div ) { + div.innerHTML = "
    "; + + div.firstChild.className = "i"; + return div.getElementsByClassName("i").length === 2; + }); + + support.getById = assert(function( div ) { + docElem.appendChild( div ).id = expando; + return !doc.getElementsByName || !doc.getElementsByName( expando ).length; + }); + + if ( support.getById ) { + Expr.find["ID"] = function( id, context ) { + if ( typeof context.getElementById !== strundefined && documentIsHTML ) { + var m = context.getElementById( id ); + return m && m.parentNode ? [m] : []; + } + }; + Expr.filter["ID"] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + return elem.getAttribute("id") === attrId; + }; + }; + } else { + delete Expr.find["ID"]; + + Expr.filter["ID"] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + var node = typeof elem.getAttributeNode !== strundefined && elem.getAttributeNode("id"); + return node && node.value === attrId; + }; + }; + } + + Expr.find["TAG"] = support.getElementsByTagName ? + function( tag, context ) { + if ( typeof context.getElementsByTagName !== strundefined ) { + return context.getElementsByTagName( tag ); + } + } : + function( tag, context ) { + var elem, + tmp = [], + i = 0, + results = context.getElementsByTagName( tag ); + + if ( tag === "*" ) { + while ( (elem = results[i++]) ) { + if ( elem.nodeType === 1 ) { + tmp.push( elem ); + } + } + + return tmp; + } + return results; + }; + + Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) { + if ( typeof context.getElementsByClassName !== strundefined && documentIsHTML ) { + return context.getElementsByClassName( className ); + } + }; + + /* QSA/matchesSelector + ---------------------------------------------------------------------- */ + + + rbuggyMatches = []; + + rbuggyQSA = []; + + if ( (support.qsa = rnative.test( doc.querySelectorAll )) ) { + assert(function( div ) { + div.innerHTML = ""; + + if ( div.querySelectorAll("[t^='']").length ) { + rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); + } + + if ( !div.querySelectorAll("[selected]").length ) { + rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); + } + + if ( !div.querySelectorAll(":checked").length ) { + rbuggyQSA.push(":checked"); + } + }); + + assert(function( div ) { + var input = doc.createElement("input"); + input.setAttribute( "type", "hidden" ); + div.appendChild( input ).setAttribute( "name", "D" ); + + if ( div.querySelectorAll("[name=d]").length ) { + rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" ); + } + + if ( !div.querySelectorAll(":enabled").length ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + div.querySelectorAll("*,:x"); + rbuggyQSA.push(",.*:"); + }); + } + + if ( (support.matchesSelector = rnative.test( (matches = docElem.webkitMatchesSelector || + docElem.mozMatchesSelector || + docElem.oMatchesSelector || + docElem.msMatchesSelector) )) ) { + + assert(function( div ) { + support.disconnectedMatch = matches.call( div, "div" ); + + matches.call( div, "[s!='']:x" ); + rbuggyMatches.push( "!=", pseudos ); + }); + } + + rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") ); + rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") ); + + /* Contains + ---------------------------------------------------------------------- */ + hasCompare = rnative.test( docElem.compareDocumentPosition ); + + contains = hasCompare || rnative.test( docElem.contains ) ? + function( a, b ) { + var adown = a.nodeType === 9 ? a.documentElement : a, + bup = b && b.parentNode; + return a === bup || !!( bup && bup.nodeType === 1 && ( + adown.contains ? + adown.contains( bup ) : + a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 + )); + } : + function( a, b ) { + if ( b ) { + while ( (b = b.parentNode) ) { + if ( b === a ) { + return true; + } + } + } + return false; + }; + + /* Sorting + ---------------------------------------------------------------------- */ + + sortOrder = hasCompare ? + function( a, b ) { + + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; + if ( compare ) { + return compare; + } + + compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ? + a.compareDocumentPosition( b ) : + + 1; + + if ( compare & 1 || + (!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) { + + if ( a === doc || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) { + return -1; + } + if ( b === doc || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) { + return 1; + } + + return sortInput ? + ( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) : + 0; + } + + return compare & 4 ? -1 : 1; + } : + function( a, b ) { + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + var cur, + i = 0, + aup = a.parentNode, + bup = b.parentNode, + ap = [ a ], + bp = [ b ]; + + if ( !aup || !bup ) { + return a === doc ? -1 : + b === doc ? 1 : + aup ? -1 : + bup ? 1 : + sortInput ? + ( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) : + 0; + + } else if ( aup === bup ) { + return siblingCheck( a, b ); + } + + cur = a; + while ( (cur = cur.parentNode) ) { + ap.unshift( cur ); + } + cur = b; + while ( (cur = cur.parentNode) ) { + bp.unshift( cur ); + } + + while ( ap[i] === bp[i] ) { + i++; + } + + return i ? + siblingCheck( ap[i], bp[i] ) : + + ap[i] === preferredDoc ? -1 : + bp[i] === preferredDoc ? 1 : + 0; + }; + + return doc; +}; + +Sizzle.matches = function( expr, elements ) { + return Sizzle( expr, null, null, elements ); +}; + +Sizzle.matchesSelector = function( elem, expr ) { + if ( ( elem.ownerDocument || elem ) !== document ) { + setDocument( elem ); + } + + expr = expr.replace( rattributeQuotes, "='$1']" ); + + if ( support.matchesSelector && documentIsHTML && + ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) && + ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { + + try { + var ret = matches.call( elem, expr ); + + if ( ret || support.disconnectedMatch || + elem.document && elem.document.nodeType !== 11 ) { + return ret; + } + } catch(e) {} + } + + return Sizzle( expr, document, null, [elem] ).length > 0; +}; + +Sizzle.contains = function( context, elem ) { + if ( ( context.ownerDocument || context ) !== document ) { + setDocument( context ); + } + return contains( context, elem ); +}; + +Sizzle.attr = function( elem, name ) { + if ( ( elem.ownerDocument || elem ) !== document ) { + setDocument( elem ); + } + + var fn = Expr.attrHandle[ name.toLowerCase() ], + val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? + fn( elem, name, !documentIsHTML ) : + undefined; + + return val !== undefined ? + val : + support.attributes || !documentIsHTML ? + elem.getAttribute( name ) : + (val = elem.getAttributeNode(name)) && val.specified ? + val.value : + null; +}; + +Sizzle.error = function( msg ) { + throw new Error( "Syntax error, unrecognized expression: " + msg ); +}; + +/** + * Document sorting and removing duplicates + * @param {ArrayLike} results + */ +Sizzle.uniqueSort = function( results ) { + var elem, + duplicates = [], + j = 0, + i = 0; + + hasDuplicate = !support.detectDuplicates; + sortInput = !support.sortStable && results.slice( 0 ); + results.sort( sortOrder ); + + if ( hasDuplicate ) { + while ( (elem = results[i++]) ) { + if ( elem === results[ i ] ) { + j = duplicates.push( i ); + } + } + while ( j-- ) { + results.splice( duplicates[ j ], 1 ); + } + } + + sortInput = null; + + return results; +}; + +/** + * Utility function for retrieving the text value of an array of DOM nodes + * @param {Array|Element} elem + */ +getText = Sizzle.getText = function( elem ) { + var node, + ret = "", + i = 0, + nodeType = elem.nodeType; + + if ( !nodeType ) { + while ( (node = elem[i++]) ) { + ret += getText( node ); + } + } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { + if ( typeof elem.textContent === "string" ) { + return elem.textContent; + } else { + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + ret += getText( elem ); + } + } + } else if ( nodeType === 3 || nodeType === 4 ) { + return elem.nodeValue; + } + + return ret; +}; + +Expr = Sizzle.selectors = { + + cacheLength: 50, + + createPseudo: markFunction, + + match: matchExpr, + + attrHandle: {}, + + find: {}, + + relative: { + ">": { dir: "parentNode", first: true }, + " ": { dir: "parentNode" }, + "+": { dir: "previousSibling", first: true }, + "~": { dir: "previousSibling" } + }, + + preFilter: { + "ATTR": function( match ) { + match[1] = match[1].replace( runescape, funescape ); + + match[3] = ( match[4] || match[5] || "" ).replace( runescape, funescape ); + + if ( match[2] === "~=" ) { + match[3] = " " + match[3] + " "; + } + + return match.slice( 0, 4 ); + }, + + "CHILD": function( match ) { + /* matches from matchExpr["CHILD"] + 1 type (only|nth|...) + 2 what (child|of-type) + 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) + 4 xn-component of xn+y argument ([+-]?\d*n|) + 5 sign of xn-component + 6 x of xn-component + 7 sign of y-component + 8 y of y-component + */ + match[1] = match[1].toLowerCase(); + + if ( match[1].slice( 0, 3 ) === "nth" ) { + if ( !match[3] ) { + Sizzle.error( match[0] ); + } + + match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) ); + match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" ); + + } else if ( match[3] ) { + Sizzle.error( match[0] ); + } + + return match; + }, + + "PSEUDO": function( match ) { + var excess, + unquoted = !match[5] && match[2]; + + if ( matchExpr["CHILD"].test( match[0] ) ) { + return null; + } + + if ( match[3] && match[4] !== undefined ) { + match[2] = match[4]; + + } else if ( unquoted && rpseudo.test( unquoted ) && + (excess = tokenize( unquoted, true )) && + (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) { + + match[0] = match[0].slice( 0, excess ); + match[2] = unquoted.slice( 0, excess ); + } + + return match.slice( 0, 3 ); + } + }, + + filter: { + + "TAG": function( nodeNameSelector ) { + var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); + return nodeNameSelector === "*" ? + function() { return true; } : + function( elem ) { + return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; + }; + }, + + "CLASS": function( className ) { + var pattern = classCache[ className + " " ]; + + return pattern || + (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) && + classCache( className, function( elem ) { + return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== strundefined && elem.getAttribute("class") || "" ); + }); + }, + + "ATTR": function( name, operator, check ) { + return function( elem ) { + var result = Sizzle.attr( elem, name ); + + if ( result == null ) { + return operator === "!="; + } + if ( !operator ) { + return true; + } + + result += ""; + + return operator === "=" ? result === check : + operator === "!=" ? result !== check : + operator === "^=" ? check && result.indexOf( check ) === 0 : + operator === "*=" ? check && result.indexOf( check ) > -1 : + operator === "$=" ? check && result.slice( -check.length ) === check : + operator === "~=" ? ( " " + result + " " ).indexOf( check ) > -1 : + operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : + false; + }; + }, + + "CHILD": function( type, what, argument, first, last ) { + var simple = type.slice( 0, 3 ) !== "nth", + forward = type.slice( -4 ) !== "last", + ofType = what === "of-type"; + + return first === 1 && last === 0 ? + + function( elem ) { + return !!elem.parentNode; + } : + + function( elem, context, xml ) { + var cache, outerCache, node, diff, nodeIndex, start, + dir = simple !== forward ? "nextSibling" : "previousSibling", + parent = elem.parentNode, + name = ofType && elem.nodeName.toLowerCase(), + useCache = !xml && !ofType; + + if ( parent ) { + + if ( simple ) { + while ( dir ) { + node = elem; + while ( (node = node[ dir ]) ) { + if ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) { + return false; + } + } + start = dir = type === "only" && !start && "nextSibling"; + } + return true; + } + + start = [ forward ? parent.firstChild : parent.lastChild ]; + + if ( forward && useCache ) { + outerCache = parent[ expando ] || (parent[ expando ] = {}); + cache = outerCache[ type ] || []; + nodeIndex = cache[0] === dirruns && cache[1]; + diff = cache[0] === dirruns && cache[2]; + node = nodeIndex && parent.childNodes[ nodeIndex ]; + + while ( (node = ++nodeIndex && node && node[ dir ] || + + (diff = nodeIndex = 0) || start.pop()) ) { + + if ( node.nodeType === 1 && ++diff && node === elem ) { + outerCache[ type ] = [ dirruns, nodeIndex, diff ]; + break; + } + } + + } else if ( useCache && (cache = (elem[ expando ] || (elem[ expando ] = {}))[ type ]) && cache[0] === dirruns ) { + diff = cache[1]; + + } else { + while ( (node = ++nodeIndex && node && node[ dir ] || + (diff = nodeIndex = 0) || start.pop()) ) { + + if ( ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) && ++diff ) { + if ( useCache ) { + (node[ expando ] || (node[ expando ] = {}))[ type ] = [ dirruns, diff ]; + } + + if ( node === elem ) { + break; + } + } + } + } + + diff -= last; + return diff === first || ( diff % first === 0 && diff / first >= 0 ); + } + }; + }, + + "PSEUDO": function( pseudo, argument ) { + var args, + fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || + Sizzle.error( "unsupported pseudo: " + pseudo ); + + if ( fn[ expando ] ) { + return fn( argument ); + } + + if ( fn.length > 1 ) { + args = [ pseudo, pseudo, "", argument ]; + return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? + markFunction(function( seed, matches ) { + var idx, + matched = fn( seed, argument ), + i = matched.length; + while ( i-- ) { + idx = indexOf.call( seed, matched[i] ); + seed[ idx ] = !( matches[ idx ] = matched[i] ); + } + }) : + function( elem ) { + return fn( elem, 0, args ); + }; + } + + return fn; + } + }, + + pseudos: { + "not": markFunction(function( selector ) { + var input = [], + results = [], + matcher = compile( selector.replace( rtrim, "$1" ) ); + + return matcher[ expando ] ? + markFunction(function( seed, matches, context, xml ) { + var elem, + unmatched = matcher( seed, null, xml, [] ), + i = seed.length; + + while ( i-- ) { + if ( (elem = unmatched[i]) ) { + seed[i] = !(matches[i] = elem); + } + } + }) : + function( elem, context, xml ) { + input[0] = elem; + matcher( input, null, xml, results ); + return !results.pop(); + }; + }), + + "has": markFunction(function( selector ) { + return function( elem ) { + return Sizzle( selector, elem ).length > 0; + }; + }), + + "contains": markFunction(function( text ) { + return function( elem ) { + return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1; + }; + }), + + "lang": markFunction( function( lang ) { + if ( !ridentifier.test(lang || "") ) { + Sizzle.error( "unsupported lang: " + lang ); + } + lang = lang.replace( runescape, funescape ).toLowerCase(); + return function( elem ) { + var elemLang; + do { + if ( (elemLang = documentIsHTML ? + elem.lang : + elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) { + + elemLang = elemLang.toLowerCase(); + return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; + } + } while ( (elem = elem.parentNode) && elem.nodeType === 1 ); + return false; + }; + }), + + "target": function( elem ) { + var hash = window.location && window.location.hash; + return hash && hash.slice( 1 ) === elem.id; + }, + + "root": function( elem ) { + return elem === docElem; + }, + + "focus": function( elem ) { + return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex); + }, + + "enabled": function( elem ) { + return elem.disabled === false; + }, + + "disabled": function( elem ) { + return elem.disabled === true; + }, + + "checked": function( elem ) { + var nodeName = elem.nodeName.toLowerCase(); + return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected); + }, + + "selected": function( elem ) { + if ( elem.parentNode ) { + elem.parentNode.selectedIndex; + } + + return elem.selected === true; + }, + + "empty": function( elem ) { + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + if ( elem.nodeType < 6 ) { + return false; + } + } + return true; + }, + + "parent": function( elem ) { + return !Expr.pseudos["empty"]( elem ); + }, + + "header": function( elem ) { + return rheader.test( elem.nodeName ); + }, + + "input": function( elem ) { + return rinputs.test( elem.nodeName ); + }, + + "button": function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === "button" || name === "button"; + }, + + "text": function( elem ) { + var attr; + return elem.nodeName.toLowerCase() === "input" && + elem.type === "text" && + + ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" ); + }, + + "first": createPositionalPseudo(function() { + return [ 0 ]; + }), + + "last": createPositionalPseudo(function( matchIndexes, length ) { + return [ length - 1 ]; + }), + + "eq": createPositionalPseudo(function( matchIndexes, length, argument ) { + return [ argument < 0 ? argument + length : argument ]; + }), + + "even": createPositionalPseudo(function( matchIndexes, length ) { + var i = 0; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "odd": createPositionalPseudo(function( matchIndexes, length ) { + var i = 1; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "lt": createPositionalPseudo(function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; --i >= 0; ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "gt": createPositionalPseudo(function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; ++i < length; ) { + matchIndexes.push( i ); + } + return matchIndexes; + }) + } +}; + +Expr.pseudos["nth"] = Expr.pseudos["eq"]; + +for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { + Expr.pseudos[ i ] = createInputPseudo( i ); +} +for ( i in { submit: true, reset: true } ) { + Expr.pseudos[ i ] = createButtonPseudo( i ); +} + +function setFilters() {} +setFilters.prototype = Expr.filters = Expr.pseudos; +Expr.setFilters = new setFilters(); + +function tokenize( selector, parseOnly ) { + var matched, match, tokens, type, + soFar, groups, preFilters, + cached = tokenCache[ selector + " " ]; + + if ( cached ) { + return parseOnly ? 0 : cached.slice( 0 ); + } + + soFar = selector; + groups = []; + preFilters = Expr.preFilter; + + while ( soFar ) { + + if ( !matched || (match = rcomma.exec( soFar )) ) { + if ( match ) { + soFar = soFar.slice( match[0].length ) || soFar; + } + groups.push( (tokens = []) ); + } + + matched = false; + + if ( (match = rcombinators.exec( soFar )) ) { + matched = match.shift(); + tokens.push({ + value: matched, + type: match[0].replace( rtrim, " " ) + }); + soFar = soFar.slice( matched.length ); + } + + for ( type in Expr.filter ) { + if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] || + (match = preFilters[ type ]( match ))) ) { + matched = match.shift(); + tokens.push({ + value: matched, + type: type, + matches: match + }); + soFar = soFar.slice( matched.length ); + } + } + + if ( !matched ) { + break; + } + } + + return parseOnly ? + soFar.length : + soFar ? + Sizzle.error( selector ) : + tokenCache( selector, groups ).slice( 0 ); +} + +function toSelector( tokens ) { + var i = 0, + len = tokens.length, + selector = ""; + for ( ; i < len; i++ ) { + selector += tokens[i].value; + } + return selector; +} + +function addCombinator( matcher, combinator, base ) { + var dir = combinator.dir, + checkNonElements = base && dir === "parentNode", + doneName = done++; + + return combinator.first ? + function( elem, context, xml ) { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + return matcher( elem, context, xml ); + } + } + } : + + function( elem, context, xml ) { + var oldCache, outerCache, + newCache = [ dirruns, doneName ]; + + if ( xml ) { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + if ( matcher( elem, context, xml ) ) { + return true; + } + } + } + } else { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + outerCache = elem[ expando ] || (elem[ expando ] = {}); + if ( (oldCache = outerCache[ dir ]) && + oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { + + return (newCache[ 2 ] = oldCache[ 2 ]); + } else { + outerCache[ dir ] = newCache; + + if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) { + return true; + } + } + } + } + } + }; +} + +function elementMatcher( matchers ) { + return matchers.length > 1 ? + function( elem, context, xml ) { + var i = matchers.length; + while ( i-- ) { + if ( !matchers[i]( elem, context, xml ) ) { + return false; + } + } + return true; + } : + matchers[0]; +} + +function multipleContexts( selector, contexts, results ) { + var i = 0, + len = contexts.length; + for ( ; i < len; i++ ) { + Sizzle( selector, contexts[i], results ); + } + return results; +} + +function condense( unmatched, map, filter, context, xml ) { + var elem, + newUnmatched = [], + i = 0, + len = unmatched.length, + mapped = map != null; + + for ( ; i < len; i++ ) { + if ( (elem = unmatched[i]) ) { + if ( !filter || filter( elem, context, xml ) ) { + newUnmatched.push( elem ); + if ( mapped ) { + map.push( i ); + } + } + } + } + + return newUnmatched; +} + +function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { + if ( postFilter && !postFilter[ expando ] ) { + postFilter = setMatcher( postFilter ); + } + if ( postFinder && !postFinder[ expando ] ) { + postFinder = setMatcher( postFinder, postSelector ); + } + return markFunction(function( seed, results, context, xml ) { + var temp, i, elem, + preMap = [], + postMap = [], + preexisting = results.length, + + elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ), + + matcherIn = preFilter && ( seed || !selector ) ? + condense( elems, preMap, preFilter, context, xml ) : + elems, + + matcherOut = matcher ? + postFinder || ( seed ? preFilter : preexisting || postFilter ) ? + + [] : + + results : + matcherIn; + + if ( matcher ) { + matcher( matcherIn, matcherOut, context, xml ); + } + + if ( postFilter ) { + temp = condense( matcherOut, postMap ); + postFilter( temp, [], context, xml ); + + i = temp.length; + while ( i-- ) { + if ( (elem = temp[i]) ) { + matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem); + } + } + } + + if ( seed ) { + if ( postFinder || preFilter ) { + if ( postFinder ) { + temp = []; + i = matcherOut.length; + while ( i-- ) { + if ( (elem = matcherOut[i]) ) { + temp.push( (matcherIn[i] = elem) ); + } + } + postFinder( null, (matcherOut = []), temp, xml ); + } + + i = matcherOut.length; + while ( i-- ) { + if ( (elem = matcherOut[i]) && + (temp = postFinder ? indexOf.call( seed, elem ) : preMap[i]) > -1 ) { + + seed[temp] = !(results[temp] = elem); + } + } + } + + } else { + matcherOut = condense( + matcherOut === results ? + matcherOut.splice( preexisting, matcherOut.length ) : + matcherOut + ); + if ( postFinder ) { + postFinder( null, results, matcherOut, xml ); + } else { + push.apply( results, matcherOut ); + } + } + }); +} + +function matcherFromTokens( tokens ) { + var checkContext, matcher, j, + len = tokens.length, + leadingRelative = Expr.relative[ tokens[0].type ], + implicitRelative = leadingRelative || Expr.relative[" "], + i = leadingRelative ? 1 : 0, + + matchContext = addCombinator( function( elem ) { + return elem === checkContext; + }, implicitRelative, true ), + matchAnyContext = addCombinator( function( elem ) { + return indexOf.call( checkContext, elem ) > -1; + }, implicitRelative, true ), + matchers = [ function( elem, context, xml ) { + return ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( + (checkContext = context).nodeType ? + matchContext( elem, context, xml ) : + matchAnyContext( elem, context, xml ) ); + } ]; + + for ( ; i < len; i++ ) { + if ( (matcher = Expr.relative[ tokens[i].type ]) ) { + matchers = [ addCombinator(elementMatcher( matchers ), matcher) ]; + } else { + matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches ); + + if ( matcher[ expando ] ) { + j = ++i; + for ( ; j < len; j++ ) { + if ( Expr.relative[ tokens[j].type ] ) { + break; + } + } + return setMatcher( + i > 1 && elementMatcher( matchers ), + i > 1 && toSelector( + tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" }) + ).replace( rtrim, "$1" ), + matcher, + i < j && matcherFromTokens( tokens.slice( i, j ) ), + j < len && matcherFromTokens( (tokens = tokens.slice( j )) ), + j < len && toSelector( tokens ) + ); + } + matchers.push( matcher ); + } + } + + return elementMatcher( matchers ); +} + +function matcherFromGroupMatchers( elementMatchers, setMatchers ) { + var bySet = setMatchers.length > 0, + byElement = elementMatchers.length > 0, + superMatcher = function( seed, context, xml, results, outermost ) { + var elem, j, matcher, + matchedCount = 0, + i = "0", + unmatched = seed && [], + setMatched = [], + contextBackup = outermostContext, + elems = seed || byElement && Expr.find["TAG"]( "*", outermost ), + dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1), + len = elems.length; + + if ( outermost ) { + outermostContext = context !== document && context; + } + + for ( ; i !== len && (elem = elems[i]) != null; i++ ) { + if ( byElement && elem ) { + j = 0; + while ( (matcher = elementMatchers[j++]) ) { + if ( matcher( elem, context, xml ) ) { + results.push( elem ); + break; + } + } + if ( outermost ) { + dirruns = dirrunsUnique; + } + } + + if ( bySet ) { + if ( (elem = !matcher && elem) ) { + matchedCount--; + } + + if ( seed ) { + unmatched.push( elem ); + } + } + } + + matchedCount += i; + if ( bySet && i !== matchedCount ) { + j = 0; + while ( (matcher = setMatchers[j++]) ) { + matcher( unmatched, setMatched, context, xml ); + } + + if ( seed ) { + if ( matchedCount > 0 ) { + while ( i-- ) { + if ( !(unmatched[i] || setMatched[i]) ) { + setMatched[i] = pop.call( results ); + } + } + } + + setMatched = condense( setMatched ); + } + + push.apply( results, setMatched ); + + if ( outermost && !seed && setMatched.length > 0 && + ( matchedCount + setMatchers.length ) > 1 ) { + + Sizzle.uniqueSort( results ); + } + } + + if ( outermost ) { + dirruns = dirrunsUnique; + outermostContext = contextBackup; + } + + return unmatched; + }; + + return bySet ? + markFunction( superMatcher ) : + superMatcher; +} + +compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) { + var i, + setMatchers = [], + elementMatchers = [], + cached = compilerCache[ selector + " " ]; + + if ( !cached ) { + if ( !match ) { + match = tokenize( selector ); + } + i = match.length; + while ( i-- ) { + cached = matcherFromTokens( match[i] ); + if ( cached[ expando ] ) { + setMatchers.push( cached ); + } else { + elementMatchers.push( cached ); + } + } + + cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) ); + + cached.selector = selector; + } + return cached; +}; + +/** + * A low-level selection function that works with Sizzle's compiled + * selector functions + * @param {String|Function} selector A selector or a pre-compiled + * selector function built with Sizzle.compile + * @param {Element} context + * @param {Array} [results] + * @param {Array} [seed] A set of elements to match against + */ +select = Sizzle.select = function( selector, context, results, seed ) { + var i, tokens, token, type, find, + compiled = typeof selector === "function" && selector, + match = !seed && tokenize( (selector = compiled.selector || selector) ); + + results = results || []; + + if ( match.length === 1 ) { + + tokens = match[0] = match[0].slice( 0 ); + if ( tokens.length > 2 && (token = tokens[0]).type === "ID" && + support.getById && context.nodeType === 9 && documentIsHTML && + Expr.relative[ tokens[1].type ] ) { + + context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0]; + if ( !context ) { + return results; + + } else if ( compiled ) { + context = context.parentNode; + } + + selector = selector.slice( tokens.shift().value.length ); + } + + i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length; + while ( i-- ) { + token = tokens[i]; + + if ( Expr.relative[ (type = token.type) ] ) { + break; + } + if ( (find = Expr.find[ type ]) ) { + if ( (seed = find( + token.matches[0].replace( runescape, funescape ), + rsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context + )) ) { + + tokens.splice( i, 1 ); + selector = seed.length && toSelector( tokens ); + if ( !selector ) { + push.apply( results, seed ); + return results; + } + + break; + } + } + } + } + + ( compiled || compile( selector, match ) )( + seed, + context, + !documentIsHTML, + results, + rsibling.test( selector ) && testContext( context.parentNode ) || context + ); + return results; +}; + + +support.sortStable = expando.split("").sort( sortOrder ).join("") === expando; + +support.detectDuplicates = !!hasDuplicate; + +setDocument(); + +support.sortDetached = assert(function( div1 ) { + return div1.compareDocumentPosition( document.createElement("div") ) & 1; +}); + +if ( !assert(function( div ) { + div.innerHTML = ""; + return div.firstChild.getAttribute("href") === "#" ; +}) ) { + addHandle( "type|href|height|width", function( elem, name, isXML ) { + if ( !isXML ) { + return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 ); + } + }); +} + +if ( !support.attributes || !assert(function( div ) { + div.innerHTML = ""; + div.firstChild.setAttribute( "value", "" ); + return div.firstChild.getAttribute( "value" ) === ""; +}) ) { + addHandle( "value", function( elem, name, isXML ) { + if ( !isXML && elem.nodeName.toLowerCase() === "input" ) { + return elem.defaultValue; + } + }); +} + +if ( !assert(function( div ) { + return div.getAttribute("disabled") == null; +}) ) { + addHandle( booleans, function( elem, name, isXML ) { + var val; + if ( !isXML ) { + return elem[ name ] === true ? name.toLowerCase() : + (val = elem.getAttributeNode( name )) && val.specified ? + val.value : + null; + } + }); +} + +if ( typeof define === "function" && define.amd ) { + define(function() { return Sizzle; }); +} else if ( typeof module !== "undefined" && module.exports ) { + module.exports = Sizzle; +} else { + window.Sizzle = Sizzle; +} + +})( window ); + +;(function(engine) { + var extendElements = Prototype.Selector.extendElements; + + function select(selector, scope) { + return extendElements(engine(selector, scope || document)); + } + + function match(element, selector) { + return engine.matches(selector, [element]).length == 1; + } + + Prototype.Selector.engine = engine; + Prototype.Selector.select = select; + Prototype.Selector.match = match; +})(Sizzle); + +window.Sizzle = Prototype._original_property; +delete Prototype._original_property; + +var Form = { + reset: function(form) { + form = $(form); + form.reset(); + return form; + }, + + serializeElements: function(elements, options) { + if (typeof options != 'object') options = { hash: !!options }; + else if (Object.isUndefined(options.hash)) options.hash = true; + var key, value, submitted = false, submit = options.submit, accumulator, initial; + + if (options.hash) { + initial = {}; + accumulator = function(result, key, value) { + if (key in result) { + if (!Object.isArray(result[key])) result[key] = [result[key]]; + result[key] = result[key].concat(value); + } else result[key] = value; + return result; + }; + } else { + initial = ''; + accumulator = function(result, key, values) { + if (!Object.isArray(values)) {values = [values];} + if (!values.length) {return result;} + var encodedKey = encodeURIComponent(key).gsub(/%20/, '+'); + return result + (result ? "&" : "") + values.map(function (value) { + value = value.gsub(/(\r)?\n/, '\r\n'); + value = encodeURIComponent(value); + value = value.gsub(/%20/, '+'); + return encodedKey + "=" + value; + }).join("&"); + }; + } + + return elements.inject(initial, function(result, element) { + if (!element.disabled && element.name) { + key = element.name; value = $(element).getValue(); + if (value != null && element.type != 'file' && (element.type != 'submit' || (!submitted && + submit !== false && (!submit || key == submit) && (submitted = true)))) { + result = accumulator(result, key, value); + } + } + return result; + }); + } +}; + +Form.Methods = { + serialize: function(form, options) { + return Form.serializeElements(Form.getElements(form), options); + }, + + + getElements: function(form) { + var elements = $(form).getElementsByTagName('*'); + var element, results = [], serializers = Form.Element.Serializers; + + for (var i = 0; element = elements[i]; i++) { + if (serializers[element.tagName.toLowerCase()]) + results.push(Element.extend(element)); + } + return results; + }, + + getInputs: function(form, typeName, name) { + form = $(form); + var inputs = form.getElementsByTagName('input'); + + if (!typeName && !name) return $A(inputs).map(Element.extend); + + for (var i = 0, matchingInputs = [], length = inputs.length; i < length; i++) { + var input = inputs[i]; + if ((typeName && input.type != typeName) || (name && input.name != name)) + continue; + matchingInputs.push(Element.extend(input)); + } + + return matchingInputs; + }, + + disable: function(form) { + form = $(form); + Form.getElements(form).invoke('disable'); + return form; + }, + + enable: function(form) { + form = $(form); + Form.getElements(form).invoke('enable'); + return form; + }, + + findFirstElement: function(form) { + var elements = $(form).getElements().findAll(function(element) { + return 'hidden' != element.type && !element.disabled; + }); + var firstByIndex = elements.findAll(function(element) { + return element.hasAttribute('tabIndex') && element.tabIndex >= 0; + }).sortBy(function(element) { return element.tabIndex }).first(); + + return firstByIndex ? firstByIndex : elements.find(function(element) { + return /^(?:input|select|textarea)$/i.test(element.tagName); + }); + }, + + focusFirstElement: function(form) { + form = $(form); + var element = form.findFirstElement(); + if (element) element.activate(); + return form; + }, + + request: function(form, options) { + form = $(form), options = Object.clone(options || { }); + + var params = options.parameters, action = form.readAttribute('action') || ''; + if (action.blank()) action = window.location.href; + options.parameters = form.serialize(true); + + if (params) { + if (Object.isString(params)) params = params.toQueryParams(); + Object.extend(options.parameters, params); + } + + if (form.hasAttribute('method') && !options.method) + options.method = form.method; + + return new Ajax.Request(action, options); + } +}; + +/*--------------------------------------------------------------------------*/ + + +Form.Element = { + focus: function(element) { + $(element).focus(); + return element; + }, + + select: function(element) { + $(element).select(); + return element; + } +}; + +Form.Element.Methods = { + + serialize: function(element) { + element = $(element); + if (!element.disabled && element.name) { + var value = element.getValue(); + if (value != undefined) { + var pair = { }; + pair[element.name] = value; + return Object.toQueryString(pair); + } + } + return ''; + }, + + getValue: function(element) { + element = $(element); + var method = element.tagName.toLowerCase(); + return Form.Element.Serializers[method](element); + }, + + setValue: function(element, value) { + element = $(element); + var method = element.tagName.toLowerCase(); + Form.Element.Serializers[method](element, value); + return element; + }, + + clear: function(element) { + $(element).value = ''; + return element; + }, + + present: function(element) { + return $(element).value != ''; + }, + + activate: function(element) { + element = $(element); + try { + element.focus(); + if (element.select && (element.tagName.toLowerCase() != 'input' || + !(/^(?:button|reset|submit)$/i.test(element.type)))) + element.select(); + } catch (e) { } + return element; + }, + + disable: function(element) { + element = $(element); + element.disabled = true; + return element; + }, + + enable: function(element) { + element = $(element); + element.disabled = false; + return element; + } +}; + +/*--------------------------------------------------------------------------*/ + +var Field = Form.Element; + +var $F = Form.Element.Methods.getValue; + +/*--------------------------------------------------------------------------*/ + +Form.Element.Serializers = (function() { + function input(element, value) { + switch (element.type.toLowerCase()) { + case 'checkbox': + case 'radio': + return inputSelector(element, value); + default: + return valueSelector(element, value); + } + } + + function inputSelector(element, value) { + if (Object.isUndefined(value)) + return element.checked ? element.value : null; + else element.checked = !!value; + } + + function valueSelector(element, value) { + if (Object.isUndefined(value)) return element.value; + else element.value = value; + } + + function select(element, value) { + if (Object.isUndefined(value)) + return (element.type === 'select-one' ? selectOne : selectMany)(element); + + var opt, currentValue, single = !Object.isArray(value); + for (var i = 0, length = element.length; i < length; i++) { + opt = element.options[i]; + currentValue = this.optionValue(opt); + if (single) { + if (currentValue == value) { + opt.selected = true; + return; + } + } + else opt.selected = value.include(currentValue); + } + } + + function selectOne(element) { + var index = element.selectedIndex; + return index >= 0 ? optionValue(element.options[index]) : null; + } + + function selectMany(element) { + var values, length = element.length; + if (!length) return null; + + for (var i = 0, values = []; i < length; i++) { + var opt = element.options[i]; + if (opt.selected) values.push(optionValue(opt)); + } + return values; + } + + function optionValue(opt) { + return Element.hasAttribute(opt, 'value') ? opt.value : opt.text; + } + + return { + input: input, + inputSelector: inputSelector, + textarea: valueSelector, + select: select, + selectOne: selectOne, + selectMany: selectMany, + optionValue: optionValue, + button: valueSelector + }; +})(); + +/*--------------------------------------------------------------------------*/ + + +Abstract.TimedObserver = Class.create(PeriodicalExecuter, { + initialize: function($super, element, frequency, callback) { + $super(callback, frequency); + this.element = $(element); + this.lastValue = this.getValue(); + }, + + execute: function() { + var value = this.getValue(); + if (Object.isString(this.lastValue) && Object.isString(value) ? + this.lastValue != value : String(this.lastValue) != String(value)) { + this.callback(this.element, value); + this.lastValue = value; + } + } +}); + +Form.Element.Observer = Class.create(Abstract.TimedObserver, { + getValue: function() { + return Form.Element.getValue(this.element); + } +}); + +Form.Observer = Class.create(Abstract.TimedObserver, { + getValue: function() { + return Form.serialize(this.element); + } +}); + +/*--------------------------------------------------------------------------*/ + +Abstract.EventObserver = Class.create({ + initialize: function(element, callback) { + this.element = $(element); + this.callback = callback; + + this.lastValue = this.getValue(); + if (this.element.tagName.toLowerCase() == 'form') + this.registerFormCallbacks(); + else + this.registerCallback(this.element); + }, + + onElementEvent: function() { + var value = this.getValue(); + if (this.lastValue != value) { + this.callback(this.element, value); + this.lastValue = value; + } + }, + + registerFormCallbacks: function() { + Form.getElements(this.element).each(this.registerCallback, this); + }, + + registerCallback: function(element) { + if (element.type) { + switch (element.type.toLowerCase()) { + case 'checkbox': + case 'radio': + Event.observe(element, 'click', this.onElementEvent.bind(this)); + break; + default: + Event.observe(element, 'change', this.onElementEvent.bind(this)); + break; + } + } + } +}); + +Form.Element.EventObserver = Class.create(Abstract.EventObserver, { + getValue: function() { + return Form.Element.getValue(this.element); + } +}); + +Form.EventObserver = Class.create(Abstract.EventObserver, { + getValue: function() { + return Form.serialize(this.element); + } +}); +(function(GLOBAL) { + var DIV = document.createElement('div'); + var docEl = document.documentElement; + var MOUSEENTER_MOUSELEAVE_EVENTS_SUPPORTED = 'onmouseenter' in docEl + && 'onmouseleave' in docEl; + + var Event = { + KEY_BACKSPACE: 8, + KEY_TAB: 9, + KEY_RETURN: 13, + KEY_ESC: 27, + KEY_LEFT: 37, + KEY_UP: 38, + KEY_RIGHT: 39, + KEY_DOWN: 40, + KEY_DELETE: 46, + KEY_HOME: 36, + KEY_END: 35, + KEY_PAGEUP: 33, + KEY_PAGEDOWN: 34, + KEY_INSERT: 45 + }; + + + var isIELegacyEvent = function(event) { return false; }; + + if (window.attachEvent) { + if (window.addEventListener) { + isIELegacyEvent = function(event) { + return !(event instanceof window.Event); + }; + } else { + isIELegacyEvent = function(event) { return true; }; + } + } + + var _isButton; + + function _isButtonForDOMEvents(event, code) { + return event.which ? (event.which === code + 1) : (event.button === code); + } + + var legacyButtonMap = { 0: 1, 1: 4, 2: 2 }; + function _isButtonForLegacyEvents(event, code) { + return event.button === legacyButtonMap[code]; + } + + function _isButtonForWebKit(event, code) { + switch (code) { + case 0: return event.which == 1 && !event.metaKey; + case 1: return event.which == 2 || (event.which == 1 && event.metaKey); + case 2: return event.which == 3; + default: return false; + } + } + + if (window.attachEvent) { + if (!window.addEventListener) { + _isButton = _isButtonForLegacyEvents; + } else { + _isButton = function(event, code) { + return isIELegacyEvent(event) ? _isButtonForLegacyEvents(event, code) : + _isButtonForDOMEvents(event, code); + } + } + } else if (Prototype.Browser.WebKit) { + _isButton = _isButtonForWebKit; + } else { + _isButton = _isButtonForDOMEvents; + } + + function isLeftClick(event) { return _isButton(event, 0) } + + function isMiddleClick(event) { return _isButton(event, 1) } + + function isRightClick(event) { return _isButton(event, 2) } + + function element(event) { + return Element.extend(_element(event)); + } + + function _element(event) { + event = Event.extend(event); + + var node = event.target, type = event.type, + currentTarget = event.currentTarget; + + if (currentTarget && currentTarget.tagName) { + if (type === 'load' || type === 'error' || + (type === 'click' && currentTarget.tagName.toLowerCase() === 'input' + && currentTarget.type === 'radio')) + node = currentTarget; + } + + return node.nodeType == Node.TEXT_NODE ? node.parentNode : node; + } + + function findElement(event, expression) { + var element = _element(event), selector = Prototype.Selector; + if (!expression) return Element.extend(element); + while (element) { + if (Object.isElement(element) && selector.match(element, expression)) + return Element.extend(element); + element = element.parentNode; + } + } + + function pointer(event) { + return { x: pointerX(event), y: pointerY(event) }; + } + + function pointerX(event) { + var docElement = document.documentElement, + body = document.body || { scrollLeft: 0 }; + + return event.pageX || (event.clientX + + (docElement.scrollLeft || body.scrollLeft) - + (docElement.clientLeft || 0)); + } + + function pointerY(event) { + var docElement = document.documentElement, + body = document.body || { scrollTop: 0 }; + + return event.pageY || (event.clientY + + (docElement.scrollTop || body.scrollTop) - + (docElement.clientTop || 0)); + } + + + function stop(event) { + Event.extend(event); + event.preventDefault(); + event.stopPropagation(); + + event.stopped = true; + } + + + Event.Methods = { + isLeftClick: isLeftClick, + isMiddleClick: isMiddleClick, + isRightClick: isRightClick, + + element: element, + findElement: findElement, + + pointer: pointer, + pointerX: pointerX, + pointerY: pointerY, + + stop: stop + }; + + var methods = Object.keys(Event.Methods).inject({ }, function(m, name) { + m[name] = Event.Methods[name].methodize(); + return m; + }); + + if (window.attachEvent) { + function _relatedTarget(event) { + var element; + switch (event.type) { + case 'mouseover': + case 'mouseenter': + element = event.fromElement; + break; + case 'mouseout': + case 'mouseleave': + element = event.toElement; + break; + default: + return null; + } + return Element.extend(element); + } + + var additionalMethods = { + stopPropagation: function() { this.cancelBubble = true }, + preventDefault: function() { this.returnValue = false }, + inspect: function() { return '[object Event]' } + }; + + Event.extend = function(event, element) { + if (!event) return false; + + if (!isIELegacyEvent(event)) return event; + + if (event._extendedByPrototype) return event; + event._extendedByPrototype = Prototype.emptyFunction; + + var pointer = Event.pointer(event); + + Object.extend(event, { + target: event.srcElement || element, + relatedTarget: _relatedTarget(event), + pageX: pointer.x, + pageY: pointer.y + }); + + Object.extend(event, methods); + Object.extend(event, additionalMethods); + + return event; + }; + } else { + Event.extend = Prototype.K; + } + + if (window.addEventListener) { + Event.prototype = window.Event.prototype || document.createEvent('HTMLEvents').__proto__; + Object.extend(Event.prototype, methods); + } + + var EVENT_TRANSLATIONS = { + mouseenter: 'mouseover', + mouseleave: 'mouseout' + }; + + function getDOMEventName(eventName) { + return EVENT_TRANSLATIONS[eventName] || eventName; + } + + if (MOUSEENTER_MOUSELEAVE_EVENTS_SUPPORTED) + getDOMEventName = Prototype.K; + + function getUniqueElementID(element) { + if (element === window) return 0; + + if (typeof element._prototypeUID === 'undefined') + element._prototypeUID = Element.Storage.UID++; + return element._prototypeUID; + } + + function getUniqueElementID_IE(element) { + if (element === window) return 0; + if (element == document) return 1; + return element.uniqueID; + } + + if ('uniqueID' in DIV) + getUniqueElementID = getUniqueElementID_IE; + + function isCustomEvent(eventName) { + return eventName.include(':'); + } + + Event._isCustomEvent = isCustomEvent; + + function getRegistryForElement(element, uid) { + var CACHE = GLOBAL.Event.cache; + if (Object.isUndefined(uid)) + uid = getUniqueElementID(element); + if (!CACHE[uid]) CACHE[uid] = { element: element }; + return CACHE[uid]; + } + + function destroyRegistryForElement(element, uid) { + if (Object.isUndefined(uid)) + uid = getUniqueElementID(element); + delete GLOBAL.Event.cache[uid]; + } + + + function register(element, eventName, handler) { + var registry = getRegistryForElement(element); + if (!registry[eventName]) registry[eventName] = []; + var entries = registry[eventName]; + + var i = entries.length; + while (i--) + if (entries[i].handler === handler) return null; + + var uid = getUniqueElementID(element); + var responder = GLOBAL.Event._createResponder(uid, eventName, handler); + var entry = { + responder: responder, + handler: handler + }; + + entries.push(entry); + return entry; + } + + function unregister(element, eventName, handler) { + var registry = getRegistryForElement(element); + var entries = registry[eventName]; + if (!entries) return; + + var i = entries.length, entry; + while (i--) { + if (entries[i].handler === handler) { + entry = entries[i]; + break; + } + } + + if (!entry) return; + + var index = entries.indexOf(entry); + entries.splice(index, 1); + + return entry; + } + + + function observe(element, eventName, handler) { + element = $(element); + var entry = register(element, eventName, handler); + + if (entry === null) return element; + + var responder = entry.responder; + if (isCustomEvent(eventName)) + observeCustomEvent(element, eventName, responder); + else + observeStandardEvent(element, eventName, responder); + + return element; + } + + function observeStandardEvent(element, eventName, responder) { + var actualEventName = getDOMEventName(eventName); + if (element.addEventListener) { + element.addEventListener(actualEventName, responder, false); + } else { + element.attachEvent('on' + actualEventName, responder); + } + } + + function observeCustomEvent(element, eventName, responder) { + if (element.addEventListener) { + element.addEventListener('dataavailable', responder, false); + } else { + element.attachEvent('ondataavailable', responder); + element.attachEvent('onlosecapture', responder); + } + } + + function stopObserving(element, eventName, handler) { + element = $(element); + var handlerGiven = !Object.isUndefined(handler), + eventNameGiven = !Object.isUndefined(eventName); + + if (!eventNameGiven && !handlerGiven) { + stopObservingElement(element); + return element; + } + + if (!handlerGiven) { + stopObservingEventName(element, eventName); + return element; + } + + var entry = unregister(element, eventName, handler); + + if (!entry) return element; + removeEvent(element, eventName, entry.responder); + return element; + } + + function stopObservingStandardEvent(element, eventName, responder) { + var actualEventName = getDOMEventName(eventName); + if (element.removeEventListener) { + element.removeEventListener(actualEventName, responder, false); + } else { + element.detachEvent('on' + actualEventName, responder); + } + } + + function stopObservingCustomEvent(element, eventName, responder) { + if (element.removeEventListener) { + element.removeEventListener('dataavailable', responder, false); + } else { + element.detachEvent('ondataavailable', responder); + element.detachEvent('onlosecapture', responder); + } + } + + + + function stopObservingElement(element) { + var uid = getUniqueElementID(element), registry = GLOBAL.Event.cache[uid]; + if (!registry) return; + + destroyRegistryForElement(element, uid); + + var entries, i; + for (var eventName in registry) { + if (eventName === 'element') continue; + + entries = registry[eventName]; + i = entries.length; + while (i--) + removeEvent(element, eventName, entries[i].responder); + } + } + + function stopObservingEventName(element, eventName) { + var registry = getRegistryForElement(element); + var entries = registry[eventName]; + if (!entries) return; + delete registry[eventName]; + + var i = entries.length; + while (i--) + removeEvent(element, eventName, entries[i].responder); + } + + + function removeEvent(element, eventName, handler) { + if (isCustomEvent(eventName)) + stopObservingCustomEvent(element, eventName, handler); + else + stopObservingStandardEvent(element, eventName, handler); + } + + + + function getFireTarget(element) { + if (element !== document) return element; + if (document.createEvent && !element.dispatchEvent) + return document.documentElement; + return element; + } + + function fire(element, eventName, memo, bubble) { + element = getFireTarget($(element)); + if (Object.isUndefined(bubble)) bubble = true; + memo = memo || {}; + + var event = fireEvent(element, eventName, memo, bubble); + return Event.extend(event); + } + + function fireEvent_DOM(element, eventName, memo, bubble) { + var event = document.createEvent('HTMLEvents'); + event.initEvent('dataavailable', bubble, true); + + event.eventName = eventName; + event.memo = memo; + + element.dispatchEvent(event); + return event; + } + + function fireEvent_IE(element, eventName, memo, bubble) { + var event = document.createEventObject(); + event.eventType = bubble ? 'ondataavailable' : 'onlosecapture'; + + event.eventName = eventName; + event.memo = memo; + + element.fireEvent(event.eventType, event); + return event; + } + + var fireEvent = document.createEvent ? fireEvent_DOM : fireEvent_IE; + + + + Event.Handler = Class.create({ + initialize: function(element, eventName, selector, callback) { + this.element = $(element); + this.eventName = eventName; + this.selector = selector; + this.callback = callback; + this.handler = this.handleEvent.bind(this); + }, + + + start: function() { + Event.observe(this.element, this.eventName, this.handler); + return this; + }, + + stop: function() { + Event.stopObserving(this.element, this.eventName, this.handler); + return this; + }, + + handleEvent: function(event) { + var element = Event.findElement(event, this.selector); + if (element) this.callback.call(this.element, event, element); + } + }); + + function on(element, eventName, selector, callback) { + element = $(element); + if (Object.isFunction(selector) && Object.isUndefined(callback)) { + callback = selector, selector = null; + } + + return new Event.Handler(element, eventName, selector, callback).start(); + } + + Object.extend(Event, Event.Methods); + + Object.extend(Event, { + fire: fire, + observe: observe, + stopObserving: stopObserving, + on: on + }); + + Element.addMethods({ + fire: fire, + + observe: observe, + + stopObserving: stopObserving, + + on: on + }); + + Object.extend(document, { + fire: fire.methodize(), + + observe: observe.methodize(), + + stopObserving: stopObserving.methodize(), + + on: on.methodize(), + + loaded: false + }); + + if (GLOBAL.Event) Object.extend(window.Event, Event); + else GLOBAL.Event = Event; + + GLOBAL.Event.cache = {}; + + function destroyCache_IE() { + GLOBAL.Event.cache = null; + } + + if (window.attachEvent) + window.attachEvent('onunload', destroyCache_IE); + + DIV = null; + docEl = null; +})(this); + +(function(GLOBAL) { + /* Code for creating leak-free event responders is based on work by + John-David Dalton. */ + + var docEl = document.documentElement; + var MOUSEENTER_MOUSELEAVE_EVENTS_SUPPORTED = 'onmouseenter' in docEl + && 'onmouseleave' in docEl; + + function isSimulatedMouseEnterLeaveEvent(eventName) { + return !MOUSEENTER_MOUSELEAVE_EVENTS_SUPPORTED && + (eventName === 'mouseenter' || eventName === 'mouseleave'); + } + + function createResponder(uid, eventName, handler) { + if (Event._isCustomEvent(eventName)) + return createResponderForCustomEvent(uid, eventName, handler); + if (isSimulatedMouseEnterLeaveEvent(eventName)) + return createMouseEnterLeaveResponder(uid, eventName, handler); + + return function(event) { + if (!Event.cache) return; + + var element = Event.cache[uid].element; + Event.extend(event, element); + handler.call(element, event); + }; + } + + function createResponderForCustomEvent(uid, eventName, handler) { + return function(event) { + var element = Event.cache[uid].element; + + if (Object.isUndefined(event.eventName)) + return false; + + if (event.eventName !== eventName) + return false; + + Event.extend(event, element); + handler.call(element, event); + }; + } + + function createMouseEnterLeaveResponder(uid, eventName, handler) { + return function(event) { + var element = Event.cache[uid].element; + + Event.extend(event, element); + var parent = event.relatedTarget; + + while (parent && parent !== element) { + try { parent = parent.parentNode; } + catch(e) { parent = element; } + } + + if (parent === element) return; + handler.call(element, event); + } + } + + GLOBAL.Event._createResponder = createResponder; + docEl = null; +})(this); + +(function(GLOBAL) { + /* Support for the DOMContentLoaded event is based on work by Dan Webb, + Matthias Miller, Dean Edwards, John Resig, and Diego Perini. */ + + var TIMER; + + function fireContentLoadedEvent() { + if (document.loaded) return; + if (TIMER) window.clearTimeout(TIMER); + document.loaded = true; + document.fire('dom:loaded'); + } + + function checkReadyState() { + if (document.readyState === 'complete') { + document.detachEvent('onreadystatechange', checkReadyState); + fireContentLoadedEvent(); + } + } + + function pollDoScroll() { + try { + document.documentElement.doScroll('left'); + } catch (e) { + TIMER = pollDoScroll.defer(); + return; + } + + fireContentLoadedEvent(); + } + + + if (document.readyState === 'complete') { + fireContentLoadedEvent(); + return; + } + + if (document.addEventListener) { + document.addEventListener('DOMContentLoaded', fireContentLoadedEvent, false); + } else { + document.attachEvent('onreadystatechange', checkReadyState); + if (window == top) TIMER = pollDoScroll.defer(); + } + + Event.observe(window, 'load', fireContentLoadedEvent); +})(this); + + +Element.addMethods(); +/*------------------------------- DEPRECATED -------------------------------*/ + +Hash.toQueryString = Object.toQueryString; + +var Toggle = { display: Element.toggle }; + +Element.Methods.childOf = Element.Methods.descendantOf; + +var Insertion = { + Before: function(element, content) { + return Element.insert(element, {before:content}); + }, + + Top: function(element, content) { + return Element.insert(element, {top:content}); + }, + + Bottom: function(element, content) { + return Element.insert(element, {bottom:content}); + }, + + After: function(element, content) { + return Element.insert(element, {after:content}); + } +}; + +var $continue = new Error('"throw $continue" is deprecated, use "return" instead'); + +var Position = { + includeScrollOffsets: false, + + prepare: function() { + this.deltaX = window.pageXOffset + || document.documentElement.scrollLeft + || document.body.scrollLeft + || 0; + this.deltaY = window.pageYOffset + || document.documentElement.scrollTop + || document.body.scrollTop + || 0; + }, + + within: function(element, x, y) { + if (this.includeScrollOffsets) + return this.withinIncludingScrolloffsets(element, x, y); + this.xcomp = x; + this.ycomp = y; + this.offset = Element.cumulativeOffset(element); + + return (y >= this.offset[1] && + y < this.offset[1] + element.offsetHeight && + x >= this.offset[0] && + x < this.offset[0] + element.offsetWidth); + }, + + withinIncludingScrolloffsets: function(element, x, y) { + var offsetcache = Element.cumulativeScrollOffset(element); + + this.xcomp = x + offsetcache[0] - this.deltaX; + this.ycomp = y + offsetcache[1] - this.deltaY; + this.offset = Element.cumulativeOffset(element); + + return (this.ycomp >= this.offset[1] && + this.ycomp < this.offset[1] + element.offsetHeight && + this.xcomp >= this.offset[0] && + this.xcomp < this.offset[0] + element.offsetWidth); + }, + + overlap: function(mode, element) { + if (!mode) return 0; + if (mode == 'vertical') + return ((this.offset[1] + element.offsetHeight) - this.ycomp) / + element.offsetHeight; + if (mode == 'horizontal') + return ((this.offset[0] + element.offsetWidth) - this.xcomp) / + element.offsetWidth; + }, + + + cumulativeOffset: Element.Methods.cumulativeOffset, + + positionedOffset: Element.Methods.positionedOffset, + + absolutize: function(element) { + Position.prepare(); + return Element.absolutize(element); + }, + + relativize: function(element) { + Position.prepare(); + return Element.relativize(element); + }, + + realOffset: Element.Methods.cumulativeScrollOffset, + + offsetParent: Element.Methods.getOffsetParent, + + page: Element.Methods.viewportOffset, + + clone: function(source, target, options) { + options = options || { }; + return Element.clonePosition(target, source, options); + } +}; + +/*--------------------------------------------------------------------------*/ + +if (!document.getElementsByClassName) document.getElementsByClassName = function(instanceMethods){ + function iter(name) { + return name.blank() ? null : "[contains(concat(' ', @class, ' '), ' " + name + " ')]"; + } + + instanceMethods.getElementsByClassName = Prototype.BrowserFeatures.XPath ? + function(element, className) { + className = className.toString().strip(); + var cond = /\s/.test(className) ? $w(className).map(iter).join('') : iter(className); + return cond ? document._getElementsByXPath('.//*' + cond, element) : []; + } : function(element, className) { + className = className.toString().strip(); + var elements = [], classNames = (/\s/.test(className) ? $w(className) : null); + if (!classNames && !className) return elements; + + var nodes = $(element).getElementsByTagName('*'); + className = ' ' + className + ' '; + + for (var i = 0, child, cn; child = nodes[i]; i++) { + if (child.className && (cn = ' ' + child.className + ' ') && (cn.include(className) || + (classNames && classNames.all(function(name) { + return !name.toString().blank() && cn.include(' ' + name + ' '); + })))) + elements.push(Element.extend(child)); + } + return elements; + }; + + return function(className, parentElement) { + return $(parentElement || document.body).getElementsByClassName(className); + }; +}(Element.Methods); + +/*--------------------------------------------------------------------------*/ + +Element.ClassNames = Class.create(); +Element.ClassNames.prototype = { + initialize: function(element) { + this.element = $(element); + }, + + _each: function(iterator, context) { + this.element.className.split(/\s+/).select(function(name) { + return name.length > 0; + })._each(iterator, context); + }, + + set: function(className) { + this.element.className = className; + }, + + add: function(classNameToAdd) { + if (this.include(classNameToAdd)) return; + this.set($A(this).concat(classNameToAdd).join(' ')); + }, + + remove: function(classNameToRemove) { + if (!this.include(classNameToRemove)) return; + this.set($A(this).without(classNameToRemove).join(' ')); + }, + + toString: function() { + return $A(this).join(' '); + } +}; + +Object.extend(Element.ClassNames.prototype, Enumerable); + +/*--------------------------------------------------------------------------*/ + +(function() { + window.Selector = Class.create({ + initialize: function(expression) { + this.expression = expression.strip(); + }, + + findElements: function(rootElement) { + return Prototype.Selector.select(this.expression, rootElement); + }, + + match: function(element) { + return Prototype.Selector.match(element, this.expression); + }, + + toString: function() { + return this.expression; + }, + + inspect: function() { + return "#"; + } + }); + + Object.extend(Selector, { + matchElements: function(elements, expression) { + var match = Prototype.Selector.match, + results = []; + + for (var i = 0, length = elements.length; i < length; i++) { + var element = elements[i]; + if (match(element, expression)) { + results.push(Element.extend(element)); + } + } + return results; + }, + + findElement: function(elements, expression, index) { + index = index || 0; + var matchIndex = 0, element; + for (var i = 0, length = elements.length; i < length; i++) { + element = elements[i]; + if (Prototype.Selector.match(element, expression) && index === matchIndex++) { + return Element.extend(element); + } + } + }, + + findChildElements: function(element, expressions) { + var selector = expressions.toArray().join(', '); + return Prototype.Selector.select(selector, element || document); + } + }); +})(); + +/** + * Event.simulate(@element, eventName[, options]) -> Element + * + * - @element: element to fire event on + * - eventName: name of event to fire (only MouseEvents and HTMLEvents interfaces are supported) + * - options: optional object to fine-tune event properties - pointerX, pointerY, ctrlKey, etc. + * + * $('foo').simulate('click'); // => fires "click" event on an element with id=foo + * + **/ +(function(){ + + var eventMatchers = { + 'HTMLEvents': /^(?:load|unload|abort|error|select|change|submit|reset|focus|blur|resize|scroll|input)$/, + 'MouseEvents': /^(?:click|mouse(?:down|up|over|move|out))$/ + } + var defaultOptions = { + pointerX: 0, + pointerY: 0, + button: 0, + ctrlKey: false, + altKey: false, + shiftKey: false, + metaKey: false, + bubbles: true, + cancelable: true + } + + Event.simulate = function(element, eventName) { + var options = Object.extend(defaultOptions, arguments[2] || { }); + var oEvent, eventType = null; + + element = $(element); + + for (var name in eventMatchers) { + if (eventMatchers[name].test(eventName)) { eventType = name; break; } + } + + if (!eventType) + throw new SyntaxError('Only HTMLEvents and MouseEvents interfaces are supported'); + + if (document.createEvent) { + oEvent = document.createEvent(eventType); + if (eventType == 'HTMLEvents') { + oEvent.initEvent(eventName, options.bubbles, options.cancelable); + } + else { + oEvent.initMouseEvent(eventName, options.bubbles, options.cancelable, document.defaultView, + options.button, options.pointerX, options.pointerY, options.pointerX, options.pointerY, + options.ctrlKey, options.altKey, options.shiftKey, options.metaKey, options.button, element); + } + element.dispatchEvent(oEvent); + } + else { + options.clientX = options.pointerX; + options.clientY = options.pointerY; + oEvent = Object.extend(document.createEventObject(), options); + element.fireEvent('on' + eventName, oEvent); + } + return element; + } + + Element.addMethods({ simulate: Event.simulate }); +})() +function phi4z(t,i,s,e,o,n,a,r,h){var l,c,m,u,d,p,_,f,P,y;for(h=n,y=1;15>=y;y++)if(l=Math.sin(h),m=Math.tan(h),r=m*Math.sqrt(1-t*l*l),c=Math.sin(2*h),u=i*h-s*c+e*Math.sin(4*h)-o*Math.sin(6*h),d=i-2*s*Math.cos(2*h)+4*e*Math.cos(4*h)-6*o*Math.cos(6*h),p=2*u+r*(u*u+a)-2*n*(r*u+1),_=t*c*(u*u+a-2*n*u)/(2*r),f=2*(n-u)*(r*d-2/c)-2*d,P=p/(_+f),h+=P,1e-10>=Math.abs(P))return h;return Proj4js.reportError("phi4z: No convergence"),null}function e4fn(t){var i,s;return i=1+t,s=1-t,Math.sqrt(Math.pow(i,i)*Math.pow(s,s))}var Proj4js={defaultDatum:"WGS84",transform:function(t,i,s){if(!t.readyToUse)return this.reportError("Proj4js initialization for:"+t.srsCode+" not yet complete"),s;if(!i.readyToUse)return this.reportError("Proj4js initialization for:"+i.srsCode+" not yet complete"),s;if(t.datum&&i.datum&&((t.datum.datum_type==Proj4js.common.PJD_3PARAM||t.datum.datum_type==Proj4js.common.PJD_7PARAM)&&"WGS84"!=i.datumCode||(i.datum.datum_type==Proj4js.common.PJD_3PARAM||i.datum.datum_type==Proj4js.common.PJD_7PARAM)&&"WGS84"!=t.datumCode)){var e=Proj4js.WGS84;this.transform(t,e,s),t=e}return"enu"!=t.axis&&this.adjust_axis(t,!1,s),"longlat"==t.projName?(s.x*=Proj4js.common.D2R,s.y*=Proj4js.common.D2R):(t.to_meter&&(s.x*=t.to_meter,s.y*=t.to_meter),t.inverse(s)),t.from_greenwich&&(s.x+=t.from_greenwich),s=this.datum_transform(t.datum,i.datum,s),i.from_greenwich&&(s.x-=i.from_greenwich),"longlat"==i.projName?(s.x*=Proj4js.common.R2D,s.y*=Proj4js.common.R2D):(i.forward(s),i.to_meter&&(s.x/=i.to_meter,s.y/=i.to_meter)),"enu"!=i.axis&&this.adjust_axis(i,!0,s),s},datum_transform:function(t,i,s){return t.compare_datums(i)?s:t.datum_type==Proj4js.common.PJD_NODATUM||i.datum_type==Proj4js.common.PJD_NODATUM?s:((t.es!=i.es||t.a!=i.a||t.datum_type==Proj4js.common.PJD_3PARAM||t.datum_type==Proj4js.common.PJD_7PARAM||i.datum_type==Proj4js.common.PJD_3PARAM||i.datum_type==Proj4js.common.PJD_7PARAM)&&(t.geodetic_to_geocentric(s),(t.datum_type==Proj4js.common.PJD_3PARAM||t.datum_type==Proj4js.common.PJD_7PARAM)&&t.geocentric_to_wgs84(s),(i.datum_type==Proj4js.common.PJD_3PARAM||i.datum_type==Proj4js.common.PJD_7PARAM)&&i.geocentric_from_wgs84(s),i.geocentric_to_geodetic(s)),s)},adjust_axis:function(t,i,s){for(var e,o,n=s.x,a=s.y,r=s.z||0,h=0;3>h;h++)if(!i||2!=h||void 0!==s.z)switch(0==h?(e=n,o="x"):1==h?(e=a,o="y"):(e=r,o="z"),t.axis[h]){case"e":s[o]=e;break;case"w":s[o]=-e;break;case"n":s[o]=e;break;case"s":s[o]=-e;break;case"u":void 0!==s[o]&&(s.z=e);break;case"d":void 0!==s[o]&&(s.z=-e);break;default:return alert("ERROR: unknow axis ("+t.axis[h]+") - check definition of "+t.projName),null}return s},reportError:function(){},extend:function(t,i){if(t=t||{},i)for(var s in i){var e=i[s];void 0!==e&&(t[s]=e)}return t},Class:function(){for(var t,i=function(){this.initialize.apply(this,arguments)},s={},e=0;arguments.length>e;++e)t="function"==typeof arguments[e]?arguments[e].prototype:arguments[e],Proj4js.extend(s,t);return i.prototype=s,i},bind:function(t,i){var s=Array.prototype.slice.apply(arguments,[2]);return function(){var e=s.concat(Array.prototype.slice.apply(arguments,[0]));return t.apply(i,e)}},scriptName:"proj4js-combined.js",defsLookupService:"http://spatialreference.org/ref",libPath:null,getScriptLocation:function(){if(this.libPath)return this.libPath;for(var t=this.scriptName,i=t.length,s=document.getElementsByTagName("script"),e=0;s.length>e;e++){var o=s[e].getAttribute("src");if(o){var n=o.lastIndexOf(t);if(n>-1&&n+i==o.length){this.libPath=o.slice(0,-i);break}}}return this.libPath||""},loadScript:function(t,i,s,e){var o=document.createElement("script");o.defer=!1,o.type="text/javascript",o.id=t,o.src=t,o.onload=i,o.onerror=s,o.loadCheck=e,/MSIE/.test(navigator.userAgent)&&(o.onreadystatechange=this.checkReadyState),document.getElementsByTagName("head")[0].appendChild(o)},checkReadyState:function(){"loaded"==this.readyState&&(this.loadCheck()?this.onload():this.onerror())}};Proj4js.Proj=Proj4js.Class({readyToUse:!1,title:null,projName:null,units:null,datum:null,x0:0,y0:0,localCS:!1,queue:null,initialize:function(t,i){if(this.srsCodeInput=t,this.queue=[],i&&this.queue.push(i),t.indexOf("GEOGCS")>=0||t.indexOf("GEOCCS")>=0||t.indexOf("PROJCS")>=0||t.indexOf("LOCAL_CS")>=0)return this.parseWKT(t),this.deriveConstants(),this.loadProjCode(this.projName),void 0;if(0==t.indexOf("urn:")){var s=t.split(":");"ogc"!=s[1]&&"x-ogc"!=s[1]||"def"!=s[2]||"crs"!=s[3]||(t=s[4]+":"+s[s.length-1])}else if(0==t.indexOf("http://")){var e=t.split("#");e[0].match(/epsg.org/)?t="EPSG:"+e[1]:e[0].match(/RIG.xml/)&&(t="IGNF:"+e[1])}this.srsCode=t.toUpperCase(),0==this.srsCode.indexOf("EPSG")?(this.srsCode=this.srsCode,this.srsAuth="epsg",this.srsProjNumber=this.srsCode.substring(5)):0==this.srsCode.indexOf("IGNF")?(this.srsCode=this.srsCode,this.srsAuth="IGNF",this.srsProjNumber=this.srsCode.substring(5)):0==this.srsCode.indexOf("CRS")?(this.srsCode=this.srsCode,this.srsAuth="CRS",this.srsProjNumber=this.srsCode.substring(4)):(this.srsAuth="",this.srsProjNumber=this.srsCode),this.loadProjDefinition()},loadProjDefinition:function(){if(Proj4js.defs[this.srsCode])return this.defsLoaded(),void 0;var t=Proj4js.getScriptLocation()+"defs/"+this.srsAuth.toUpperCase()+this.srsProjNumber+".js";Proj4js.loadScript(t,Proj4js.bind(this.defsLoaded,this),Proj4js.bind(this.loadFromService,this),Proj4js.bind(this.checkDefsLoaded,this))},loadFromService:function(){var t=Proj4js.defsLookupService+"/"+this.srsAuth+"/"+this.srsProjNumber+"/proj4js/";Proj4js.loadScript(t,Proj4js.bind(this.defsLoaded,this),Proj4js.bind(this.defsFailed,this),Proj4js.bind(this.checkDefsLoaded,this))},defsLoaded:function(){this.parseDefs(),this.loadProjCode(this.projName)},checkDefsLoaded:function(){return Proj4js.defs[this.srsCode]?!0:!1},defsFailed:function(){Proj4js.reportError("failed to load projection definition for: "+this.srsCode),Proj4js.defs[this.srsCode]=Proj4js.defs.WGS84,this.defsLoaded()},loadProjCode:function(t){if(Proj4js.Proj[t])return this.initTransforms(),void 0;var i=Proj4js.getScriptLocation()+"projCode/"+t+".js";Proj4js.loadScript(i,Proj4js.bind(this.loadProjCodeSuccess,this,t),Proj4js.bind(this.loadProjCodeFailure,this,t),Proj4js.bind(this.checkCodeLoaded,this,t))},loadProjCodeSuccess:function(t){Proj4js.Proj[t].dependsOn?this.loadProjCode(Proj4js.Proj[t].dependsOn):this.initTransforms()},loadProjCodeFailure:function(t){Proj4js.reportError("failed to find projection file for: "+t)},checkCodeLoaded:function(t){return Proj4js.Proj[t]?!0:!1},initTransforms:function(){if(Proj4js.extend(this,Proj4js.Proj[this.projName]),this.init(),this.readyToUse=!0,this.queue)for(var t;t=this.queue.shift();)t.call(this,this)},wktRE:/^(\w+)\[(.*)\]$/,parseWKT:function(t){var i=t.match(this.wktRE);if(i){var s,e=i[1],o=i[2],n=o.split(",");s="TOWGS84"==e.toUpperCase()?e:n.shift(),s=s.replace(/^\"/,""),s=s.replace(/\"$/,"");for(var a=[],r=0,h="",l=0;n.length>l;++l){for(var c=n[l],m=0;c.length>m;++m)"["==c.charAt(m)&&++r,"]"==c.charAt(m)&&--r;h+=c,0===r?(a.push(h),h=""):h+=","}switch(e){case"LOCAL_CS":this.projName="identity",this.localCS=!0,this.srsCode=s;break;case"GEOGCS":this.projName="longlat",this.geocsCode=s,this.srsCode||(this.srsCode=s);break;case"PROJCS":this.srsCode=s;break;case"GEOCCS":break;case"PROJECTION":this.projName=Proj4js.wktProjections[s];break;case"DATUM":this.datumName=s;break;case"LOCAL_DATUM":this.datumCode="none";break;case"SPHEROID":this.ellps=s,this.a=parseFloat(a.shift()),this.rf=parseFloat(a.shift());break;case"PRIMEM":this.from_greenwich=parseFloat(a.shift());break;case"UNIT":this.units=s,this.unitsPerMeter=parseFloat(a.shift());break;case"PARAMETER":var u=s.toLowerCase(),d=parseFloat(a.shift());switch(u){case"false_easting":this.x0=d;break;case"false_northing":this.y0=d;break;case"scale_factor":this.k0=d;break;case"central_meridian":this.long0=d*Proj4js.common.D2R;break;case"latitude_of_origin":this.lat0=d*Proj4js.common.D2R;break;case"more_here":break;default:}break;case"TOWGS84":this.datum_params=a;break;case"AXIS":var u=s.toLowerCase(),d=a.shift();switch(d){case"EAST":d="e";break;case"WEST":d="w";break;case"NORTH":d="n";break;case"SOUTH":d="s";break;case"UP":d="u";break;case"DOWN":d="d";break;case"OTHER":default:d=" "}switch(this.axis||(this.axis="enu"),u){case"x":this.axis=d+this.axis.substr(1,2);break;case"y":this.axis=this.axis.substr(0,1)+d+this.axis.substr(2,1);break;case"z":this.axis=this.axis.substr(0,2)+d;break;default:}case"MORE_HERE":break;default:}for(var l=0;a.length>l;++l)this.parseWKT(a[l])}},parseDefs:function(){this.defData=Proj4js.defs[this.srsCode];var t,i;if(this.defData){for(var s=this.defData.split("+"),e=0;s.length>e;e++){var o=s[e].split("=");switch(t=o[0].toLowerCase(),i=o[1],t.replace(/\s/gi,"")){case"":break;case"title":this.title=i;break;case"proj":this.projName=i.replace(/\s/gi,"");break;case"units":this.units=i.replace(/\s/gi,"");break;case"datum":this.datumCode=i.replace(/\s/gi,"");break;case"nadgrids":this.nagrids=i.replace(/\s/gi,"");break;case"ellps":this.ellps=i.replace(/\s/gi,"");break;case"a":this.a=parseFloat(i);break;case"b":this.b=parseFloat(i);break;case"rf":this.rf=parseFloat(i);break;case"lat_0":this.lat0=i*Proj4js.common.D2R;break;case"lat_1":this.lat1=i*Proj4js.common.D2R;break;case"lat_2":this.lat2=i*Proj4js.common.D2R;break;case"lat_ts":this.lat_ts=i*Proj4js.common.D2R;break;case"lon_0":this.long0=i*Proj4js.common.D2R;break;case"alpha":this.alpha=parseFloat(i)*Proj4js.common.D2R;break;case"lonc":this.longc=i*Proj4js.common.D2R;break;case"x_0":this.x0=parseFloat(i);break;case"y_0":this.y0=parseFloat(i);break;case"k_0":this.k0=parseFloat(i);break;case"k":this.k0=parseFloat(i);break;case"r_a":this.R_A=!0;break;case"zone":this.zone=parseInt(i,10);break;case"south":this.utmSouth=!0;break;case"towgs84":this.datum_params=i.split(",");break;case"to_meter":this.to_meter=parseFloat(i);break;case"from_greenwich":this.from_greenwich=i*Proj4js.common.D2R;break;case"pm":i=i.replace(/\s/gi,""),this.from_greenwich=Proj4js.PrimeMeridian[i]?Proj4js.PrimeMeridian[i]:parseFloat(i),this.from_greenwich*=Proj4js.common.D2R;break;case"axis":i=i.replace(/\s/gi,"");var n="ewnsud";3==i.length&&-1!=n.indexOf(i.substr(0,1))&&-1!=n.indexOf(i.substr(1,1))&&-1!=n.indexOf(i.substr(2,1))&&(this.axis=i);break;case"no_defs":break;default:}}this.deriveConstants()}},deriveConstants:function(){if("@null"==this.nagrids&&(this.datumCode="none"),this.datumCode&&"none"!=this.datumCode){var t=Proj4js.Datum[this.datumCode];t&&(this.datum_params=t.towgs84?t.towgs84.split(","):null,this.ellps=t.ellipse,this.datumName=t.datumName?t.datumName:this.datumCode)}if(!this.a){var i=Proj4js.Ellipsoid[this.ellps]?Proj4js.Ellipsoid[this.ellps]:Proj4js.Ellipsoid.WGS84;Proj4js.extend(this,i)}this.rf&&!this.b&&(this.b=(1-1/this.rf)*this.a),(0===this.rf||Math.abs(this.a-this.b)=a;a++)if(s=t*Math.sin(n),e=this.HALF_PI-2*Math.atan(i*Math.pow((1-s)/(1+s),o))-n,n+=e,1e-10>=Math.abs(e))return n;return alert("phi2z has NoConvergence"),-9999},qsfnz:function(t,i){var s;return t>1e-7?(s=t*i,(1-t*t)*(i/(1-s*s)-.5/t*Math.log((1-s)/(1+s)))):2*i},asinz:function(t){return Math.abs(t)>1&&(t=t>1?1:-1),Math.asin(t)},e0fn:function(t){return 1-.25*t*(1+t/16*(3+1.25*t))},e1fn:function(t){return.375*t*(1+.25*t*(1+.46875*t))},e2fn:function(t){return.05859375*t*t*(1+.75*t)},e3fn:function(t){return t*t*t*(35/3072)},mlfn:function(t,i,s,e,o){return t*o-i*Math.sin(2*o)+s*Math.sin(4*o)-e*Math.sin(6*o)},srat:function(t,i){return Math.pow((1-t)/(1+t),i)},sign:function(t){return 0>t?-1:1},adjust_lon:function(t){return t=Math.abs(t)this.HALF_PI)return+Number.NaN;if(i==this.HALF_PI)return Number.POSITIVE_INFINITY;if(i==-1*this.HALF_PI)return-1*Number.POSITIVE_INFINITY;var e=t*s;return Math.log(Math.tan((this.HALF_PI+i)/2))+t*Math.log((1-e)/(1+e))/2},fL:function(t,i){return 2*Math.atan(t*Math.exp(i))-this.HALF_PI},invlatiso:function(t,i){var s=this.fL(1,i),e=0,o=0;do e=s,o=t*Math.sin(e),s=this.fL(Math.exp(t*Math.log((1+o)/(1-o))/2),i);while(Math.abs(s-e)>1e-12);return s},sinh:function(t){var i=Math.exp(t);return i=(i-1/i)/2},cosh:function(t){var i=Math.exp(t);return i=(i+1/i)/2},tanh:function(t){var i=Math.exp(t);return i=(i-1/i)/(i+1/i)},asinh:function(t){var i=t>=0?1:-1;return i*Math.log(Math.abs(t)+Math.sqrt(t*t+1))},acosh:function(t){return 2*Math.log(Math.sqrt((t+1)/2)+Math.sqrt((t-1)/2))},atanh:function(t){return Math.log((t-1)/(t+1))/2},gN:function(t,i,s){var e=i*s;return t/Math.sqrt(1-e*e)},pj_enfn:function(t){var i=[];i[0]=this.C00-t*(this.C02+t*(this.C04+t*(this.C06+t*this.C08))),i[1]=t*(this.C22-t*(this.C04+t*(this.C06+t*this.C08)));var s=t*t;return i[2]=s*(this.C44-t*(this.C46+t*this.C48)),s*=t,i[3]=s*(this.C66-t*this.C68),i[4]=s*t*this.C88,i},pj_mlfn:function(t,i,s,e){return s*=i,i*=i,e[0]*t-s*(e[1]+i*(e[2]+i*(e[3]+i*e[4])))},pj_inv_mlfn:function(t,i,s){for(var e=1/(1-i),o=t,n=Proj4js.common.MAX_ITER;n;--n){var a=Math.sin(o),r=1-i*a*a;if(r=(this.pj_mlfn(o,a,Math.cos(o),s)-t)*r*Math.sqrt(r)*e,o-=r,Math.abs(r)i;i++)t.datum_params[i]=parseFloat(t.datum_params[i]);(0!=t.datum_params[0]||0!=t.datum_params[1]||0!=t.datum_params[2])&&(this.datum_type=Proj4js.common.PJD_3PARAM),t.datum_params.length>3&&(0!=t.datum_params[3]||0!=t.datum_params[4]||0!=t.datum_params[5]||0!=t.datum_params[6])&&(this.datum_type=Proj4js.common.PJD_7PARAM,t.datum_params[3]*=Proj4js.common.SEC_TO_RAD,t.datum_params[4]*=Proj4js.common.SEC_TO_RAD,t.datum_params[5]*=Proj4js.common.SEC_TO_RAD,t.datum_params[6]=t.datum_params[6]/1e6+1)}t&&(this.a=t.a,this.b=t.b,this.es=t.es,this.ep2=t.ep2,this.datum_params=t.datum_params)},compare_datums:function(t){return this.datum_type!=t.datum_type?!1:this.a!=t.a||Math.abs(this.es-t.es)>5e-11?!1:this.datum_type==Proj4js.common.PJD_3PARAM?this.datum_params[0]==t.datum_params[0]&&this.datum_params[1]==t.datum_params[1]&&this.datum_params[2]==t.datum_params[2]:this.datum_type==Proj4js.common.PJD_7PARAM?this.datum_params[0]==t.datum_params[0]&&this.datum_params[1]==t.datum_params[1]&&this.datum_params[2]==t.datum_params[2]&&this.datum_params[3]==t.datum_params[3]&&this.datum_params[4]==t.datum_params[4]&&this.datum_params[5]==t.datum_params[5]&&this.datum_params[6]==t.datum_params[6]:this.datum_type==Proj4js.common.PJD_GRIDSHIFT||t.datum_type==Proj4js.common.PJD_GRIDSHIFT?(alert("ERROR: Grid shift transformations are not implemented."),!1):!0},geodetic_to_geocentric:function(t){var i,s,e,o,n,a,r,h=t.x,l=t.y,c=t.z?t.z:0,m=0;if(-Proj4js.common.HALF_PI>l&&l>-1.001*Proj4js.common.HALF_PI)l=-Proj4js.common.HALF_PI;else if(l>Proj4js.common.HALF_PI&&1.001*Proj4js.common.HALF_PI>l)l=Proj4js.common.HALF_PI;else if(-Proj4js.common.HALF_PI>l||l>Proj4js.common.HALF_PI)return Proj4js.reportError("geocent:lat out of range:"+l),null;return h>Proj4js.common.PI&&(h-=2*Proj4js.common.PI),n=Math.sin(l),r=Math.cos(l),a=n*n,o=this.a/Math.sqrt(1-this.es*a),i=(o+c)*r*Math.cos(h),s=(o+c)*r*Math.sin(h),e=(o*(1-this.es)+c)*n,t.x=i,t.y=s,t.z=e,m},geocentric_to_geodetic:function(t){var i,s,e,o,n,a,r,h,l,c,m,u,d,p,_,f,P,y=1e-12,g=y*y,L=30,v=t.x,j=t.y,M=t.z?t.z:0;if(d=!1,i=Math.sqrt(v*v+j*j),s=Math.sqrt(v*v+j*j+M*M),y>i/this.a){if(d=!0,_=0,y>s/this.a)return f=Proj4js.common.HALF_PI,P=-this.b,void 0}else _=Math.atan2(j,v);e=M/s,o=i/s,n=1/Math.sqrt(1-this.es*(2-this.es)*o*o),h=o*(1-this.es)*n,l=e*n,p=0;do p++,r=this.a/Math.sqrt(1-this.es*l*l),P=i*h+M*l-r*(1-this.es*l*l),a=this.es*r/(r+P),n=1/Math.sqrt(1-a*(2-a)*o*o),c=o*(1-a)*n,m=e*n,u=m*h-c*l,h=c,l=m;while(u*u>g&&L>p);return f=Math.atan(m/Math.abs(c)),t.x=_,t.y=f,t.z=P,t},geocentric_to_geodetic_noniter:function(t){var i,s,e,o,n,a,r,h,l,c,m,u,d,p,_,f,P,y=t.x,g=t.y,L=t.z?t.z:0;if(y=parseFloat(y),g=parseFloat(g),L=parseFloat(L),P=!1,0!=y)i=Math.atan2(g,y);else if(g>0)i=Proj4js.common.HALF_PI;else if(0>g)i=-Proj4js.common.HALF_PI;else if(P=!0,i=0,L>0)s=Proj4js.common.HALF_PI;else{if(!(0>L))return s=Proj4js.common.HALF_PI,e=-this.b,void 0;s=-Proj4js.common.HALF_PI}return n=y*y+g*g,o=Math.sqrt(n),a=L*Proj4js.common.AD_C,h=Math.sqrt(a*a+n),c=a/h,u=o/h,m=c*c*c,r=L+this.b*this.ep2*m,f=o-this.a*this.es*u*u*u,l=Math.sqrt(r*r+f*f),d=r/l,p=f/l,_=this.a/Math.sqrt(1-this.es*d*d),e=p>=Proj4js.common.COS_67P5?o/p-_:-Proj4js.common.COS_67P5>=p?o/-p-_:L/d+_*(this.es-1),0==P&&(s=Math.atan(d/p)),t.x=i,t.y=s,t.z=e,t},geocentric_to_wgs84:function(t){if(this.datum_type==Proj4js.common.PJD_3PARAM)t.x+=this.datum_params[0],t.y+=this.datum_params[1],t.z+=this.datum_params[2];else if(this.datum_type==Proj4js.common.PJD_7PARAM){var i=this.datum_params[0],s=this.datum_params[1],e=this.datum_params[2],o=this.datum_params[3],n=this.datum_params[4],a=this.datum_params[5],r=this.datum_params[6],h=r*(t.x-a*t.y+n*t.z)+i,l=r*(a*t.x+t.y-o*t.z)+s,c=r*(-n*t.x+o*t.y+t.z)+e;t.x=h,t.y=l,t.z=c}},geocentric_from_wgs84:function(t){if(this.datum_type==Proj4js.common.PJD_3PARAM)t.x-=this.datum_params[0],t.y-=this.datum_params[1],t.z-=this.datum_params[2];else if(this.datum_type==Proj4js.common.PJD_7PARAM){var i=this.datum_params[0],s=this.datum_params[1],e=this.datum_params[2],o=this.datum_params[3],n=this.datum_params[4],a=this.datum_params[5],r=this.datum_params[6],h=(t.x-i)/r,l=(t.y-s)/r,c=(t.z-e)/r;t.x=h+a*l-n*c,t.y=-a*h+l+o*c,t.z=n*h-o*l+c}}}),Proj4js.Point=Proj4js.Class({initialize:function(t,i,s){if("object"==typeof t)this.x=t[0],this.y=t[1],this.z=t[2]||0;else if("string"==typeof t&&i===void 0){var e=t.split(",");this.x=parseFloat(e[0]),this.y=parseFloat(e[1]),this.z=parseFloat(e[2])||0}else this.x=t,this.y=i,this.z=s||0},clone:function(){return new Proj4js.Point(this.x,this.y,this.z)},toString:function(){return"x="+this.x+",y="+this.y},toShortString:function(){return this.x+", "+this.y}}),Proj4js.PrimeMeridian={greenwich:0,lisbon:-9.131906111111,paris:2.337229166667,bogota:-74.080916666667,madrid:-3.687938888889,rome:12.452333333333,bern:7.439583333333,jakarta:106.807719444444,ferro:-17.666666666667,brussels:4.367975,stockholm:18.058277777778,athens:23.7163375,oslo:10.722916666667},Proj4js.Ellipsoid={MERIT:{a:6378137,rf:298.257,ellipseName:"MERIT 1983"},SGS85:{a:6378136,rf:298.257,ellipseName:"Soviet Geodetic System 85"},GRS80:{a:6378137,rf:298.257222101,ellipseName:"GRS 1980(IUGG, 1980)"},IAU76:{a:6378140,rf:298.257,ellipseName:"IAU 1976"},airy:{a:6377563.396,b:6356256.91,ellipseName:"Airy 1830"},"APL4.":{a:6378137,rf:298.25,ellipseName:"Appl. Physics. 1965"},NWL9D:{a:6378145,rf:298.25,ellipseName:"Naval Weapons Lab., 1965"},mod_airy:{a:6377340.189,b:6356034.446,ellipseName:"Modified Airy"},andrae:{a:6377104.43,rf:300,ellipseName:"Andrae 1876 (Den., Iclnd.)"},aust_SA:{a:6378160,rf:298.25,ellipseName:"Australian Natl & S. Amer. 1969"},GRS67:{a:6378160,rf:298.247167427,ellipseName:"GRS 67(IUGG 1967)"},bessel:{a:6377397.155,rf:299.1528128,ellipseName:"Bessel 1841"},bess_nam:{a:6377483.865,rf:299.1528128,ellipseName:"Bessel 1841 (Namibia)"},clrk66:{a:6378206.4,b:6356583.8,ellipseName:"Clarke 1866"},clrk80:{a:6378249.145,rf:293.4663,ellipseName:"Clarke 1880 mod."},CPM:{a:6375738.7,rf:334.29,ellipseName:"Comm. des Poids et Mesures 1799"},delmbr:{a:6376428,rf:311.5,ellipseName:"Delambre 1810 (Belgium)"},engelis:{a:6378136.05,rf:298.2566,ellipseName:"Engelis 1985"},evrst30:{a:6377276.345,rf:300.8017,ellipseName:"Everest 1830"},evrst48:{a:6377304.063,rf:300.8017,ellipseName:"Everest 1948"},evrst56:{a:6377301.243,rf:300.8017,ellipseName:"Everest 1956"},evrst69:{a:6377295.664,rf:300.8017,ellipseName:"Everest 1969"},evrstSS:{a:6377298.556,rf:300.8017,ellipseName:"Everest (Sabah & Sarawak)"},fschr60:{a:6378166,rf:298.3,ellipseName:"Fischer (Mercury Datum) 1960"},fschr60m:{a:6378155,rf:298.3,ellipseName:"Fischer 1960"},fschr68:{a:6378150,rf:298.3,ellipseName:"Fischer 1968"},helmert:{a:6378200,rf:298.3,ellipseName:"Helmert 1906"},hough:{a:6378270,rf:297,ellipseName:"Hough"},intl:{a:6378388,rf:297,ellipseName:"International 1909 (Hayford)"},kaula:{a:6378163,rf:298.24,ellipseName:"Kaula 1961"},lerch:{a:6378139,rf:298.257,ellipseName:"Lerch 1979"},mprts:{a:6397300,rf:191,ellipseName:"Maupertius 1738"},new_intl:{a:6378157.5,b:6356772.2,ellipseName:"New International 1967"},plessis:{a:6376523,rf:6355863,ellipseName:"Plessis 1817 (France)"},krass:{a:6378245,rf:298.3,ellipseName:"Krassovsky, 1942"},SEasia:{a:6378155,b:6356773.3205,ellipseName:"Southeast Asia"},walbeck:{a:6376896,b:6355834.8467,ellipseName:"Walbeck"},WGS60:{a:6378165,rf:298.3,ellipseName:"WGS 60"},WGS66:{a:6378145,rf:298.25,ellipseName:"WGS 66"},WGS72:{a:6378135,rf:298.26,ellipseName:"WGS 72"},WGS84:{a:6378137,rf:298.257223563,ellipseName:"WGS 84"},sphere:{a:6370997,b:6370997,ellipseName:"Normal Sphere (r=6370997)"}},Proj4js.Datum={WGS84:{towgs84:"0,0,0",ellipse:"WGS84",datumName:"WGS84"},GGRS87:{towgs84:"-199.87,74.79,246.62",ellipse:"GRS80",datumName:"Greek_Geodetic_Reference_System_1987"},NAD83:{towgs84:"0,0,0",ellipse:"GRS80",datumName:"North_American_Datum_1983"},NAD27:{nadgrids:"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat",ellipse:"clrk66",datumName:"North_American_Datum_1927"},potsdam:{towgs84:"606.0,23.0,413.0",ellipse:"bessel",datumName:"Potsdam Rauenberg 1950 DHDN"},carthage:{towgs84:"-263.0,6.0,431.0",ellipse:"clark80",datumName:"Carthage 1934 Tunisia"},hermannskogel:{towgs84:"653.0,-212.0,449.0",ellipse:"bessel",datumName:"Hermannskogel"},ire65:{towgs84:"482.530,-130.596,564.557,-1.042,-0.214,-0.631,8.15",ellipse:"mod_airy",datumName:"Ireland 1965"},nzgd49:{towgs84:"59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993",ellipse:"intl",datumName:"New Zealand Geodetic Datum 1949"},OSGB36:{towgs84:"446.448,-125.157,542.060,0.1502,0.2470,0.8421,-20.4894",ellipse:"airy",datumName:"Airy 1830"}},Proj4js.WGS84=new Proj4js.Proj("WGS84"),Proj4js.Datum.OSB36=Proj4js.Datum.OSGB36,Proj4js.wktProjections={"Lambert Tangential Conformal Conic Projection":"lcc",Mercator:"merc","Popular Visualisation Pseudo Mercator":"merc",Mercator_1SP:"merc",Transverse_Mercator:"tmerc","Transverse Mercator":"tmerc","Lambert Azimuthal Equal Area":"laea","Universal Transverse Mercator System":"utm"},Proj4js.Proj.aea={init:function(){return Math.abs(this.lat1+this.lat2)Proj4js.common.EPSLN?(this.ms1*this.ms1-this.ms2*this.ms2)/(this.qs2-this.qs1):this.con,this.c=this.ms1*this.ms1+this.ns0*this.qs1,this.rh=this.a*Math.sqrt(this.c-this.ns0*this.qs0)/this.ns0,void 0)},forward:function(t){var i=t.x,s=t.y;this.sin_phi=Math.sin(s),this.cos_phi=Math.cos(s);var e=Proj4js.common.qsfnz(this.e3,this.sin_phi,this.cos_phi),o=this.a*Math.sqrt(this.c-this.ns0*e)/this.ns0,n=this.ns0*Proj4js.common.adjust_lon(i-this.long0),a=o*Math.sin(n)+this.x0,r=this.rh-o*Math.cos(n)+this.y0;return t.x=a,t.y=r,t},inverse:function(t){var i,s,e,o,n,a;return t.x-=this.x0,t.y=this.rh-t.y+this.y0,this.ns0>=0?(i=Math.sqrt(t.x*t.x+t.y*t.y),e=1):(i=-Math.sqrt(t.x*t.x+t.y*t.y),e=-1),o=0,0!=i&&(o=Math.atan2(e*t.x,e*t.y)),e=i*this.ns0/this.a,s=(this.c-e*e)/this.ns0,this.e3>=1e-10?(e=1-.5*(1-this.es)*Math.log((1-this.e3)/(1+this.e3))/this.e3,a=Math.abs(Math.abs(e)-Math.abs(s))>1e-10?this.phi1z(this.e3,s):s>=0?.5*Proj4js.common.PI:-.5*Proj4js.common.PI):a=this.phi1z(this.e3,s),n=Proj4js.common.adjust_lon(o/this.ns0+this.long0),t.x=n,t.y=a,t},phi1z:function(t,i){var s,e,o,n,a,r=Proj4js.common.asinz(.5*i);if(Proj4js.common.EPSLN>t)return r;for(var h=t*t,l=1;25>=l;l++)if(s=Math.sin(r),e=Math.cos(r),o=t*s,n=1-o*o,a=.5*n*n/e*(i/(1-h)-s/n+.5/t*Math.log((1-o)/(1+o))),r+=a,1e-7>=Math.abs(a))return r;return Proj4js.reportError("aea:phi1z:Convergence error"),null}},Proj4js.Proj.sterea={dependsOn:"gauss",init:function(){return Proj4js.Proj.gauss.init.apply(this),this.rc?(this.sinc0=Math.sin(this.phic0),this.cosc0=Math.cos(this.phic0),this.R2=2*this.rc,this.title||(this.title="Oblique Stereographic Alternative"),void 0):(Proj4js.reportError("sterea:init:E_ERROR_0"),void 0)},forward:function(t){var i,s,e,o;return t.x=Proj4js.common.adjust_lon(t.x-this.long0),Proj4js.Proj.gauss.forward.apply(this,[t]),i=Math.sin(t.y),s=Math.cos(t.y),e=Math.cos(t.x),o=this.k0*this.R2/(1+this.sinc0*i+this.cosc0*s*e),t.x=o*s*Math.sin(t.x),t.y=o*(this.cosc0*i-this.sinc0*s*e),t.x=this.a*t.x+this.x0,t.y=this.a*t.y+this.y0,t},inverse:function(t){var i,s,e,o,n;if(t.x=(t.x-this.x0)/this.a,t.y=(t.y-this.y0)/this.a,t.x/=this.k0,t.y/=this.k0,n=Math.sqrt(t.x*t.x+t.y*t.y)){var a=2*Math.atan2(n,this.R2);i=Math.sin(a),s=Math.cos(a),o=Math.asin(s*this.sinc0+t.y*i*this.cosc0/n),e=Math.atan2(t.x*i,n*this.cosc0*s-t.y*this.sinc0*i)}else o=this.phic0,e=0;return t.x=e,t.y=o,Proj4js.Proj.gauss.inverse.apply(this,[t]),t.x=Proj4js.common.adjust_lon(t.x+this.long0),t}},Proj4js.Proj.poly={init:function(){0==this.lat0&&(this.lat0=90),this.temp=this.b/this.a,this.es=1-Math.pow(this.temp,2),this.e=Math.sqrt(this.es),this.e0=Proj4js.common.e0fn(this.es),this.e1=Proj4js.common.e1fn(this.es),this.e2=Proj4js.common.e2fn(this.es),this.e3=Proj4js.common.e3fn(this.es),this.ml0=Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,this.lat0)},forward:function(t){var i,s,e,o,n,a,r,h=t.x,l=t.y;return e=Proj4js.common.adjust_lon(h-this.long0),1e-7>=Math.abs(l)?(a=this.x0+this.a*e,r=this.y0-this.a*this.ml0):(i=Math.sin(l),s=Math.cos(l),o=Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,l),n=Proj4js.common.msfnz(this.e,i,s),e=i,a=this.x0+this.a*n*Math.sin(e)/i,r=this.y0+this.a*(o-this.ml0+n*(1-Math.cos(e))/i)),t.x=a,t.y=r,t},inverse:function(t){var i,s,e,o,n,a;if(t.x-=this.x0,t.y-=this.y0,i=this.ml0+t.y/this.a,o=0,1e-7>=Math.abs(i))n=t.x/this.a+this.long0,a=0;else{if(s=i*i+t.x/this.a*(t.x/this.a),o=phi4z(this.es,this.e0,this.e1,this.e2,this.e3,this.al,s,e,a),1!=o)return o;n=Proj4js.common.adjust_lon(Proj4js.common.asinz(t.x*e/this.a)/Math.sin(a)+this.long0)}return t.x=n,t.y=a,t}},Proj4js.Proj.equi={init:function(){this.x0||(this.x0=0),this.y0||(this.y0=0),this.lat0||(this.lat0=0),this.long0||(this.long0=0)},forward:function(t){var i=t.x,s=t.y,e=Proj4js.common.adjust_lon(i-this.long0),o=this.x0+this.a*e*Math.cos(this.lat0),n=this.y0+this.a*s;return this.t1=o,this.t2=Math.cos(this.lat0),t.x=o,t.y=n,t},inverse:function(t){t.x-=this.x0,t.y-=this.y0;var i=t.y/this.a;Math.abs(i)>Proj4js.common.HALF_PI&&Proj4js.reportError("equi:Inv:DataError");var s=Proj4js.common.adjust_lon(this.long0+t.x/(this.a*Math.cos(this.lat0)));t.x=s,t.y=i}},Proj4js.Proj.merc={init:function(){this.lat_ts&&(this.k0=this.sphere?Math.cos(this.lat_ts):Proj4js.common.msfnz(this.es,Math.sin(this.lat_ts),Math.cos(this.lat_ts)))},forward:function(t){var i=t.x,s=t.y;if(s*Proj4js.common.R2D>90&&-90>s*Proj4js.common.R2D&&i*Proj4js.common.R2D>180&&-180>i*Proj4js.common.R2D)return Proj4js.reportError("merc:forward: llInputOutOfRange: "+i+" : "+s),null;var e,o;if(Math.abs(Math.abs(s)-Proj4js.common.HALF_PI)<=Proj4js.common.EPSLN)return Proj4js.reportError("merc:forward: ll2mAtPoles"),null;if(this.sphere)e=this.x0+this.a*this.k0*Proj4js.common.adjust_lon(i-this.long0),o=this.y0+this.a*this.k0*Math.log(Math.tan(Proj4js.common.FORTPI+.5*s));else{var n=Math.sin(s),a=Proj4js.common.tsfnz(this.e,s,n);e=this.x0+this.a*this.k0*Proj4js.common.adjust_lon(i-this.long0),o=this.y0-this.a*this.k0*Math.log(a)}return t.x=e,t.y=o,t},inverse:function(t){var i,s,e=t.x-this.x0,o=t.y-this.y0;if(this.sphere)s=Proj4js.common.HALF_PI-2*Math.atan(Math.exp(-o/this.a*this.k0));else{var n=Math.exp(-o/(this.a*this.k0));if(s=Proj4js.common.phi2z(this.e,n),-9999==s)return Proj4js.reportError("merc:inverse: lat = -9999"),null}return i=Proj4js.common.adjust_lon(this.long0+e/(this.a*this.k0)),t.x=i,t.y=s,t}},Proj4js.Proj.utm={dependsOn:"tmerc",init:function(){return this.zone?(this.lat0=0,this.long0=(6*Math.abs(this.zone)-183)*Proj4js.common.D2R,this.x0=5e5,this.y0=this.utmSouth?1e7:0,this.k0=.9996,Proj4js.Proj.tmerc.init.apply(this),this.forward=Proj4js.Proj.tmerc.forward,this.inverse=Proj4js.Proj.tmerc.inverse,void 0):(Proj4js.reportError("utm:init: zone must be specified for UTM"),void 0)}},Proj4js.Proj.eqdc={init:function(){this.mode||(this.mode=0),this.temp=this.b/this.a,this.es=1-Math.pow(this.temp,2),this.e=Math.sqrt(this.es),this.e0=Proj4js.common.e0fn(this.es),this.e1=Proj4js.common.e1fn(this.es),this.e2=Proj4js.common.e2fn(this.es),this.e3=Proj4js.common.e3fn(this.es),this.sinphi=Math.sin(this.lat1),this.cosphi=Math.cos(this.lat1),this.ms1=Proj4js.common.msfnz(this.e,this.sinphi,this.cosphi),this.ml1=Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,this.lat1),0!=this.mode?(Math.abs(this.lat1+this.lat2)=Proj4js.common.EPSLN?(this.ms1-this.ms2)/(this.ml2-this.ml1):this.sinphi):this.ns=this.sinphi,this.g=this.ml1+this.ms1/this.ns,this.ml0=Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,this.lat0),this.rh=this.a*(this.g-this.ml0) +},forward:function(t){var i=t.x,s=t.y,e=Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,s),o=this.a*(this.g-e),n=this.ns*Proj4js.common.adjust_lon(i-this.long0),a=this.x0+o*Math.sin(n),r=this.y0+this.rh-o*Math.cos(n);return t.x=a,t.y=r,t},inverse:function(t){t.x-=this.x0,t.y=this.rh-t.y+this.y0;var i,s;this.ns>=0?(s=Math.sqrt(t.x*t.x+t.y*t.y),i=1):(s=-Math.sqrt(t.x*t.x+t.y*t.y),i=-1);var e=0;0!=s&&(e=Math.atan2(i*t.x,i*t.y));var o=this.g-s/this.a,n=this.phi3z(o,this.e0,this.e1,this.e2,this.e3),a=Proj4js.common.adjust_lon(this.long0+e/this.ns);return t.x=a,t.y=n,t},phi3z:function(t,i,s,e,o){var n,a;n=t;for(var r=0;15>r;r++)if(a=(t+s*Math.sin(2*n)-e*Math.sin(4*n)+o*Math.sin(6*n))/i-n,n+=a,1e-10>=Math.abs(a))return n;return Proj4js.reportError("PHI3Z-CONV:Latitude failed to converge after 15 iterations"),null}},Proj4js.Proj.tmerc={init:function(){this.e0=Proj4js.common.e0fn(this.es),this.e1=Proj4js.common.e1fn(this.es),this.e2=Proj4js.common.e2fn(this.es),this.e3=Proj4js.common.e3fn(this.es),this.ml0=this.a*Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,this.lat0)},forward:function(t){var i,s,e,o=t.x,n=t.y,a=Proj4js.common.adjust_lon(o-this.long0),r=Math.sin(n),h=Math.cos(n);if(this.sphere){var l=h*Math.sin(a);if(1e-10>Math.abs(Math.abs(l)-1))return Proj4js.reportError("tmerc:forward: Point projects into infinity"),93;s=.5*this.a*this.k0*Math.log((1+l)/(1-l)),i=Math.acos(h*Math.cos(a)/Math.sqrt(1-l*l)),0>n&&(i=-i),e=this.a*this.k0*(i-this.lat0)}else{var c=h*a,m=Math.pow(c,2),u=this.ep2*Math.pow(h,2),d=Math.tan(n),p=Math.pow(d,2);i=1-this.es*Math.pow(r,2);var _=this.a/Math.sqrt(i),f=this.a*Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,n);s=this.k0*_*c*(1+m/6*(1-p+u+m/20*(5-18*p+Math.pow(p,2)+72*u-58*this.ep2)))+this.x0,e=this.k0*(f-this.ml0+_*d*m*(.5+m/24*(5-p+9*u+4*Math.pow(u,2)+m/30*(61-58*p+Math.pow(p,2)+600*u-330*this.ep2))))+this.y0}return t.x=s,t.y=e,t},inverse:function(t){var i,s,e,o,n,a,r=6;if(this.sphere){var h=Math.exp(t.x/(this.a*this.k0)),l=.5*(h-1/h),c=this.lat0+t.y/(this.a*this.k0),m=Math.cos(c);i=Math.sqrt((1-m*m)/(1+l*l)),n=Proj4js.common.asinz(i),0>c&&(n=-n),a=0==l&&0==m?this.long0:Proj4js.common.adjust_lon(Math.atan2(l,m)+this.long0)}else{var u=t.x-this.x0,d=t.y-this.y0;for(i=(this.ml0+d/this.k0)/this.a,s=i,o=0;!0&&(e=(i+this.e1*Math.sin(2*s)-this.e2*Math.sin(4*s)+this.e3*Math.sin(6*s))/this.e0-s,s+=e,!(Math.abs(e)<=Proj4js.common.EPSLN));o++)if(o>=r)return Proj4js.reportError("tmerc:inverse: Latitude failed to converge"),95;if(Math.abs(s)0||Math.abs(a)<=Proj4js.common.EPSLN)var l=this.a*n*s*Math.sin(e),c=this.y0+this.a*n*(this.cos_p14*i-this.sin_p14*s*o);else Proj4js.reportError("orthoFwdPointError");return t.x=l,t.y=c,t},inverse:function(t){var i,s,e,o,n,a,r;return t.x-=this.x0,t.y-=this.y0,i=Math.sqrt(t.x*t.x+t.y*t.y),i>this.a+1e-7&&Proj4js.reportError("orthoInvDataError"),s=Proj4js.common.asinz(i/this.a),e=Math.sin(s),o=Math.cos(s),a=this.long0,Math.abs(i)<=Proj4js.common.EPSLN&&(r=this.lat0),r=Proj4js.common.asinz(o*this.sin_p14+t.y*e*this.cos_p14/i),n=Math.abs(this.lat0)-Proj4js.common.HALF_PI,Math.abs(n)<=Proj4js.common.EPSLN&&(a=this.lat0>=0?Proj4js.common.adjust_lon(this.long0+Math.atan2(t.x,-t.y)):Proj4js.common.adjust_lon(this.long0-Math.atan2(-t.x,t.y))),n=o-this.sin_p14*Math.sin(r),t.x=a,t.y=r,t}},Proj4js.Proj.krovak={init:function(){this.a=6377397.155,this.es=.006674372230614,this.e=Math.sqrt(this.es),this.lat0||(this.lat0=.863937979737193),this.long0||(this.long0=.4334234309119251),this.k0||(this.k0=.9999),this.s45=.785398163397448,this.s90=2*this.s45,this.fi0=this.lat0,this.e2=this.es,this.e=Math.sqrt(this.e2),this.alfa=Math.sqrt(1+this.e2*Math.pow(Math.cos(this.fi0),4)/(1-this.e2)),this.uq=1.04216856380474,this.u0=Math.asin(Math.sin(this.fi0)/this.alfa),this.g=Math.pow((1+this.e*Math.sin(this.fi0))/(1-this.e*Math.sin(this.fi0)),this.alfa*this.e/2),this.k=Math.tan(this.u0/2+this.s45)/Math.pow(Math.tan(this.fi0/2+this.s45),this.alfa)*this.g,this.k1=this.k0,this.n0=this.a*Math.sqrt(1-this.e2)/(1-this.e2*Math.pow(Math.sin(this.fi0),2)),this.s0=1.37008346281555,this.n=Math.sin(this.s0),this.ro0=this.k1*this.n0/Math.tan(this.s0),this.ad=this.s90-this.uq},forward:function(t){var i,s,e,o,n,a,r,h=t.x,l=t.y,c=Proj4js.common.adjust_lon(h-this.long0);return i=Math.pow((1+this.e*Math.sin(l))/(1-this.e*Math.sin(l)),this.alfa*this.e/2),s=2*(Math.atan(this.k*Math.pow(Math.tan(l/2+this.s45),this.alfa)/i)-this.s45),e=-c*this.alfa,o=Math.asin(Math.cos(this.ad)*Math.sin(s)+Math.sin(this.ad)*Math.cos(s)*Math.cos(e)),n=Math.asin(Math.cos(s)*Math.sin(e)/Math.cos(o)),a=this.n*n,r=this.ro0*Math.pow(Math.tan(this.s0/2+this.s45),this.n)/Math.pow(Math.tan(o/2+this.s45),this.n),t.y=r*Math.cos(a)/1,t.x=r*Math.sin(a)/1,this.czech&&(t.y*=-1,t.x*=-1),t},inverse:function(t){var i,s,e,o,n,a,r,h,l=t.x;t.x=t.y,t.y=l,this.czech&&(t.y*=-1,t.x*=-1),a=Math.sqrt(t.x*t.x+t.y*t.y),n=Math.atan2(t.y,t.x),o=n/Math.sin(this.s0),e=2*(Math.atan(Math.pow(this.ro0/a,1/this.n)*Math.tan(this.s0/2+this.s45))-this.s45),i=Math.asin(Math.cos(this.ad)*Math.sin(e)-Math.sin(this.ad)*Math.cos(e)*Math.cos(o)),s=Math.asin(Math.cos(e)*Math.sin(o)/Math.cos(i)),t.x=this.long0-s/this.alfa,r=i,h=0;var c=0;do t.y=2*(Math.atan(Math.pow(this.k,-1/this.alfa)*Math.pow(Math.tan(i/2+this.s45),1/this.alfa)*Math.pow((1+this.e*Math.sin(r))/(1-this.e*Math.sin(r)),this.e/2))-this.s45),1e-10>Math.abs(r-t.y)&&(h=1),r=t.y,c+=1;while(0==h&&15>c);return c>=15?(Proj4js.reportError("PHI3Z-CONV:Latitude failed to converge after 15 iterations"),null):t}},Proj4js.Proj.somerc={init:function(){var t=this.lat0;this.lambda0=this.long0;var i=Math.sin(t),s=this.a,e=this.rf,o=1/e,n=2*o-Math.pow(o,2),a=this.e=Math.sqrt(n);this.R=this.k0*s*Math.sqrt(1-n)/(1-n*Math.pow(i,2)),this.alpha=Math.sqrt(1+n/(1-n)*Math.pow(Math.cos(t),4)),this.b0=Math.asin(i/this.alpha),this.K=Math.log(Math.tan(Math.PI/4+this.b0/2))-this.alpha*Math.log(Math.tan(Math.PI/4+t/2))+this.alpha*a/2*Math.log((1+a*i)/(1-a*i))},forward:function(t){var i=Math.log(Math.tan(Math.PI/4-t.y/2)),s=this.e/2*Math.log((1+this.e*Math.sin(t.y))/(1-this.e*Math.sin(t.y))),e=-this.alpha*(i+s)+this.K,o=2*(Math.atan(Math.exp(e))-Math.PI/4),n=this.alpha*(t.x-this.lambda0),a=Math.atan(Math.sin(n)/(Math.sin(this.b0)*Math.tan(o)+Math.cos(this.b0)*Math.cos(n))),r=Math.asin(Math.cos(this.b0)*Math.sin(o)-Math.sin(this.b0)*Math.cos(o)*Math.cos(n));return t.y=this.R/2*Math.log((1+Math.sin(r))/(1-Math.sin(r)))+this.y0,t.x=this.R*a+this.x0,t},inverse:function(t){for(var i=t.x-this.x0,s=t.y-this.y0,e=i/this.R,o=2*(Math.atan(Math.exp(s/this.R))-Math.PI/4),n=Math.asin(Math.cos(this.b0)*Math.sin(o)+Math.sin(this.b0)*Math.cos(o)*Math.cos(e)),a=Math.atan(Math.sin(e)/(Math.cos(this.b0)*Math.cos(e)-Math.sin(this.b0)*Math.tan(o))),r=this.lambda0+a/this.alpha,h=0,l=n,c=-1e3,m=0;Math.abs(l-c)>1e-7;){if(++m>20)return Proj4js.reportError("omercFwdInfinity"),void 0;h=1/this.alpha*(Math.log(Math.tan(Math.PI/4+n/2))-this.K)+this.e*Math.log(Math.tan(Math.PI/4+Math.asin(this.e*Math.sin(l))/2)),c=l,l=2*Math.atan(Math.exp(h))-Math.PI/2}return t.x=r,t.y=l,t}},Proj4js.Proj.stere={ssfn_:function(t,i,s){return i*=s,Math.tan(.5*(Proj4js.common.HALF_PI+t))*Math.pow((1-i)/(1+i),.5*s)},TOL:1e-8,NITER:8,CONV:1e-10,S_POLE:0,N_POLE:1,OBLIQ:2,EQUIT:3,init:function(){this.phits=this.lat_ts?this.lat_ts:Proj4js.common.HALF_PI;var t=Math.abs(this.lat0);if(this.mode=Math.abs(t)-Proj4js.common.HALF_PIthis.lat0?this.S_POLE:this.N_POLE:t>Proj4js.common.EPSLN?this.OBLIQ:this.EQUIT,this.phits=Math.abs(this.phits),this.es){var i;switch(this.mode){case this.N_POLE:case this.S_POLE:Math.abs(this.phits-Proj4js.common.HALF_PI)=Proj4js.common.EPSLN?Math.cos(this.phits)/Math.tan(Proj4js.common.FORTPI-.5*this.phits):2*this.k0}},forward:function(t){var i=t.x;i=Proj4js.common.adjust_lon(i-this.long0);var s,e,o=t.y;if(this.sphere){var n,a,r,h;switch(n=Math.sin(o),a=Math.cos(o),r=Math.cos(i),h=Math.sin(i),this.mode){case this.EQUIT:e=1+a*r,Proj4js.common.EPSLN>=e&&Proj4js.reportError("stere:forward:Equit"),e=this.akm1/e,s=e*a*h,e*=n;break;case this.OBLIQ:e=1+this.sinph0*n+this.cosph0*a*r,Proj4js.common.EPSLN>=e&&Proj4js.reportError("stere:forward:Obliq"),e=this.akm1/e,s=e*a*h,e*=this.cosph0*n-this.sinph0*a*r;break;case this.N_POLE:r=-r,o=-o;case this.S_POLE:Math.abs(o-Proj4js.common.HALF_PI)=l;l++)r*=n,h+=this.A[l]*r;for(var c,m,u=h,d=a,p=1,_=0,f=0,P=0,l=1;6>=l;l++)c=p*u-_*d,m=_*u+p*d,p=c,_=m,f=f+this.B_re[l]*p-this.B_im[l]*_,P=P+this.B_im[l]*p+this.B_re[l]*_;return t.x=P*this.a+this.x0,t.y=f*this.a+this.y0,t},inverse:function(t){for(var i,s,e=t.x,o=t.y,n=e-this.x0,a=o-this.y0,r=a/this.a,h=n/this.a,l=1,c=0,m=0,u=0,d=1;6>=d;d++)i=l*r-c*h,s=c*r+l*h,l=i,c=s,m=m+this.C_re[d]*l-this.C_im[d]*c,u=u+this.C_im[d]*l+this.C_re[d]*c;for(var p=0;this.iterations>p;p++){for(var _,f,P=m,y=u,g=r,L=h,d=2;6>=d;d++)_=P*m-y*u,f=y*m+P*u,P=_,y=f,g+=(d-1)*(this.B_re[d]*P-this.B_im[d]*y),L+=(d-1)*(this.B_im[d]*P+this.B_re[d]*y);P=1,y=0;for(var v=this.B_re[1],j=this.B_im[1],d=2;6>=d;d++)_=P*m-y*u,f=y*m+P*u,P=_,y=f,v+=d*(this.B_re[d]*P-this.B_im[d]*y),j+=d*(this.B_im[d]*P+this.B_re[d]*y);var M=v*v+j*j;m=(g*v+L*j)/M,u=(L*v-g*j)/M}for(var S=m,b=u,x=1,E=0,d=1;9>=d;d++)x*=S,E+=this.D[d]*x;var C=this.lat0+1e5*E*Proj4js.common.SEC_TO_RAD,w=this.long0+b;return t.x=w,t.y=C,t}},Proj4js.Proj.mill={init:function(){},forward:function(t){var i=t.x,s=t.y,e=Proj4js.common.adjust_lon(i-this.long0),o=this.x0+this.a*e,n=this.y0+1.25*this.a*Math.log(Math.tan(Proj4js.common.PI/4+s/2.5));return t.x=o,t.y=n,t},inverse:function(t){t.x-=this.x0,t.y-=this.y0;var i=Proj4js.common.adjust_lon(this.long0+t.x/this.a),s=2.5*(Math.atan(Math.exp(.8*t.y/this.a))-Proj4js.common.PI/4);return t.x=i,t.y=s,t}},Proj4js.Proj.gnom={init:function(){this.sin_p14=Math.sin(this.lat0),this.cos_p14=Math.cos(this.lat0),this.infinity_dist=1e3*this.a,this.rc=1},forward:function(t){var i,s,e,o,n,a,r,h,l=t.x,c=t.y;return e=Proj4js.common.adjust_lon(l-this.long0),i=Math.sin(c),s=Math.cos(c),o=Math.cos(e),a=this.sin_p14*i+this.cos_p14*s*o,n=1,a>0||Math.abs(a)<=Proj4js.common.EPSLN?(r=this.x0+this.a*n*s*Math.sin(e)/a,h=this.y0+this.a*n*(this.cos_p14*i-this.sin_p14*s*o)/a):(Proj4js.reportError("orthoFwdPointError"),r=this.x0+this.infinity_dist*s*Math.sin(e),h=this.y0+this.infinity_dist*(this.cos_p14*i-this.sin_p14*s*o)),t.x=r,t.y=h,t},inverse:function(t){var i,s,e,o,n,a;return t.x=(t.x-this.x0)/this.a,t.y=(t.y-this.y0)/this.a,t.x/=this.k0,t.y/=this.k0,(i=Math.sqrt(t.x*t.x+t.y*t.y))?(o=Math.atan2(i,this.rc),s=Math.sin(o),e=Math.cos(o),a=Proj4js.common.asinz(e*this.sin_p14+t.y*s*this.cos_p14/i),n=Math.atan2(t.x*s,i*this.cos_p14*e-t.y*this.sin_p14*s),n=Proj4js.common.adjust_lon(this.long0+n)):(a=this.phic0,n=0),t.x=n,t.y=a,t}},Proj4js.Proj.sinu={init:function(){this.sphere?(this.n=1,this.m=0,this.es=0,this.C_y=Math.sqrt((this.m+1)/this.n),this.C_x=this.C_y/(this.m+1)):this.en=Proj4js.common.pj_enfn(this.es)},forward:function(t){var i,s,e=t.x,o=t.y;if(e=Proj4js.common.adjust_lon(e-this.long0),this.sphere){if(this.m)for(var n=this.n*Math.sin(o),a=Proj4js.common.MAX_ITER;a;--a){var r=(this.m*o+Math.sin(o)-n)/(this.m+Math.cos(o));if(o-=r,Math.abs(r)o?(o=Math.sin(i),s=this.long0+t.x*Math.sqrt(1-this.es*o*o)/(this.a*Math.cos(i)),e=Proj4js.common.adjust_lon(s)):o-Proj4js.common.EPSLN=0?this.y0+Proj4js.common.PI*this.R*Math.tan(.5*a):this.y0+Proj4js.common.PI*this.R*-Math.tan(.5*a));var r=.5*Math.abs(Proj4js.common.PI/n-n/Proj4js.common.PI),h=r*r,l=Math.sin(a),c=Math.cos(a),m=c/(l+c-1),u=m*m,d=m*(2/l-1),p=d*d,_=Proj4js.common.PI*this.R*(r*(m-p)+Math.sqrt(h*(m-p)*(m-p)-(p+h)*(u-p)))/(p+h);return 0>n&&(_=-_),i=this.x0+_,_=Math.abs(_/(Proj4js.common.PI*this.R)),s=o>=0?this.y0+Proj4js.common.PI*this.R*Math.sqrt(1-_*_-2*r*_):this.y0-Proj4js.common.PI*this.R*Math.sqrt(1-_*_-2*r*_),t.x=i,t.y=s,t},inverse:function(t){var i,s,e,o,n,a,r,h,l,c,m,u,d;return t.x-=this.x0,t.y-=this.y0,m=Proj4js.common.PI*this.R,e=t.x/m,o=t.y/m,n=e*e+o*o,a=-Math.abs(o)*(1+n),r=a-2*o*o+e*e,h=-2*a+1+2*o*o+n*n,d=o*o/h+(2*r*r*r/h/h/h-9*a*r/h/h)/27,l=(a-r*r/3/h)/h,c=2*Math.sqrt(-l/3),m=3*d/l/c,Math.abs(m)>1&&(m=m>=0?1:-1),u=Math.acos(m)/3,s=t.y>=0?(-c*Math.cos(u+Proj4js.common.PI/3)-r/3/h)*Proj4js.common.PI:-(-c*Math.cos(u+Proj4js.common.PI/3)-r/3/h)*Proj4js.common.PI,Math.abs(e)0&&(e=2*Math.atan(o*Proj4js.common.srat(this.e*Math.sin(t.y),-.5*this.e))-Proj4js.common.HALF_PI,!(i>Math.abs(e-t.y)));--n)t.y=e;return n?(t.x=s,t.y=e,t):(Proj4js.reportError("gauss:inverse:convergence failed"),null)}},Proj4js.Proj.omerc={init:function(){this.mode||(this.mode=0),this.lon1||(this.lon1=0,this.mode=1),this.lon2||(this.lon2=0),this.lat2||(this.lat2=0);var t=this.b/this.a,i=1-Math.pow(t,2);Math.sqrt(i),this.sin_p20=Math.sin(this.lat0),this.cos_p20=Math.cos(this.lat0),this.con=1-this.es*this.sin_p20*this.sin_p20,this.com=Math.sqrt(1-i),this.bl=Math.sqrt(1+this.es*Math.pow(this.cos_p20,4)/(1-i)),this.al=this.a*this.bl*this.k0*this.com/this.con,Math.abs(this.lat0)0?this.lat0>=0?this.d+Math.sqrt(this.d*this.d-1):this.d-Math.sqrt(this.d*this.d-1):this.d,this.el=this.f*Math.pow(this.ts,this.bl)),0!=this.mode?(this.g=.5*(this.f-1/this.f),this.gama=Proj4js.common.asinz(Math.sin(this.alpha)/this.d),this.longc=this.longc-Proj4js.common.asinz(this.g*Math.tan(this.gama))/this.bl,this.con=Math.abs(this.lat0),this.con>Proj4js.common.EPSLN&&Math.abs(this.con-Proj4js.common.HALF_PI)>Proj4js.common.EPSLN?(this.singam=Math.sin(this.gama),this.cosgam=Math.cos(this.gama),this.sinaz=Math.sin(this.alpha),this.cosaz=Math.cos(this.alpha),this.u=this.lat0>=0?this.al/this.bl*Math.atan(Math.sqrt(this.d*this.d-1)/this.cosaz):-(this.al/this.bl)*Math.atan(Math.sqrt(this.d*this.d-1)/this.cosaz)):Proj4js.reportError("omerc:Init:DataError")):(this.sinphi=Math.sin(this.at1),this.ts1=Proj4js.common.tsfnz(this.e,this.lat1,this.sinphi),this.sinphi=Math.sin(this.lat2),this.ts2=Proj4js.common.tsfnz(this.e,this.lat2,this.sinphi),this.h=Math.pow(this.ts1,this.bl),this.l=Math.pow(this.ts2,this.bl),this.f=this.el/this.h,this.g=.5*(this.f-1/this.f),this.j=(this.el*this.el-this.l*this.h)/(this.el*this.el+this.l*this.h),this.p=(this.l-this.h)/(this.l+this.h),this.dlon=this.lon1-this.lon2,this.dlon<-Proj4js.common.PI&&(this.lon2=this.lon2-2*Proj4js.common.PI),this.dlon>Proj4js.common.PI&&(this.lon2=this.lon2+2*Proj4js.common.PI),this.dlon=this.lon1-this.lon2,this.longc=.5*(this.lon1+this.lon2)-Math.atan(this.j*Math.tan(.5*this.bl*this.dlon)/this.p)/this.bl,this.dlon=Proj4js.common.adjust_lon(this.lon1-this.longc),this.gama=Math.atan(Math.sin(this.bl*this.dlon)/this.g),this.alpha=Proj4js.common.asinz(this.d*Math.sin(this.gama)),Math.abs(this.lat1-this.lat2)<=Proj4js.common.EPSLN?Proj4js.reportError("omercInitDataError"):this.con=Math.abs(this.lat1),this.con<=Proj4js.common.EPSLN||Math.abs(this.con-Proj4js.common.HALF_PI)<=Proj4js.common.EPSLN?Proj4js.reportError("omercInitDataError"):Math.abs(Math.abs(this.lat0)-Proj4js.common.HALF_PI)<=Proj4js.common.EPSLN&&Proj4js.reportError("omercInitDataError"),this.singam=Math.sin(this.gam),this.cosgam=Math.cos(this.gam),this.sinaz=Math.sin(this.alpha),this.cosaz=Math.cos(this.alpha),this.u=this.lat0>=0?this.al/this.bl*Math.atan(Math.sqrt(this.d*this.d-1)/this.cosaz):-(this.al/this.bl)*Math.atan(Math.sqrt(this.d*this.d-1)/this.cosaz))},forward:function(t){var i,s,e,o,n,a,r,h,l,c,m,u=t.x,d=t.y;i=Math.sin(d),c=Proj4js.common.adjust_lon(u-this.longc),a=Math.sin(this.bl*c),Math.abs(Math.abs(d)-Proj4js.common.HALF_PI)>Proj4js.common.EPSLN?(m=Proj4js.common.tsfnz(this.e,d,i),o=this.el/Math.pow(m,this.bl),l=.5*(o-1/o),s=.5*(o+1/o),r=(l*this.singam-a*this.cosgam)/s,e=Math.cos(this.bl*c),1e-7>Math.abs(e)?n=this.al*this.bl*c:(n=this.al*Math.atan((l*this.cosgam+a*this.singam)/e)/this.bl,0>e&&(n+=Proj4js.common.PI*this.al/this.bl))):(r=d>=0?this.singam:-this.singam,n=this.al*d/this.bl),Math.abs(Math.abs(r)-1)<=Proj4js.common.EPSLN&&Proj4js.reportError("omercFwdInfinity"),h=.5*this.al*Math.log((1-r)/(1+r))/this.bl,n-=this.u;var p=this.x0+h*this.cosaz+n*this.sinaz,_=this.y0+n*this.cosaz-h*this.sinaz;return t.x=p,t.y=_,t},inverse:function(t){var i,s,e,o,n,a,r,h,l,c,m,u,d;return t.x-=this.x0,t.y-=this.y0,d=0,o=t.x*this.cosaz-t.y*this.sinaz,n=t.y*this.cosaz+t.x*this.sinaz,n+=this.u,a=Math.exp(-this.bl*o/this.al),r=.5*(a-1/a),s=.5*(a+1/a),l=Math.sin(this.bl*n/this.al),c=(l*this.cosgam+r*this.singam)/s,Math.abs(Math.abs(c)-1)<=Proj4js.common.EPSLN?(m=this.longc,u=c>=0?Proj4js.common.HALF_PI:-Proj4js.common.HALF_PI):(e=1/this.bl,h=Math.pow(this.el/Math.sqrt((1+c)/(1-c)),e),u=Proj4js.common.phi2z(this.e,h),i=this.longc-Math.atan2(r*this.cosgam-l*this.singam,e)/this.bl,m=Proj4js.common.adjust_lon(i)),t.x=m,t.y=u,t}},Proj4js.Proj.lcc={init:function(){if(this.lat2||(this.lat2=this.lat0),this.k0||(this.k0=1),Math.abs(this.lat1+this.lat2)Proj4js.common.EPSLN?Math.log(e/r)/Math.log(o/h):i,this.f0=e/(this.ns*Math.pow(o,this.ns)),this.rh=this.a*this.f0*Math.pow(l,this.ns),this.title||(this.title="Lambert Conformal Conic")},forward:function(t){var i=t.x,s=t.y;if(!(90>=s&&s>=-90&&180>=i&&i>=-180))return Proj4js.reportError("lcc:forward: llInputOutOfRange: "+i+" : "+s),null;var e,o,n=Math.abs(Math.abs(s)-Proj4js.common.HALF_PI);if(n>Proj4js.common.EPSLN)e=Proj4js.common.tsfnz(this.e,s,Math.sin(s)),o=this.a*this.f0*Math.pow(e,this.ns);else{if(n=s*this.ns,0>=n)return Proj4js.reportError("lcc:forward: No Projection"),null;o=0}var a=this.ns*Proj4js.common.adjust_lon(i-this.long0);return t.x=this.k0*o*Math.sin(a)+this.x0,t.y=this.k0*(this.rh-o*Math.cos(a))+this.y0,t},inverse:function(t){var i,s,e,o,n,a=(t.x-this.x0)/this.k0,r=this.rh-(t.y-this.y0)/this.k0;this.ns>0?(i=Math.sqrt(a*a+r*r),s=1):(i=-Math.sqrt(a*a+r*r),s=-1);var h=0;if(0!=i&&(h=Math.atan2(s*a,s*r)),0!=i||this.ns>0){if(s=1/this.ns,e=Math.pow(i/(this.a*this.f0),s),o=Proj4js.common.phi2z(this.e,e),-9999==o)return null}else o=-Proj4js.common.HALF_PI;return n=Proj4js.common.adjust_lon(h/this.ns+this.long0),t.x=n,t.y=o,t}},Proj4js.Proj.laea={S_POLE:1,N_POLE:2,EQUIT:3,OBLIQ:4,init:function(){var t=Math.abs(this.lat0);if(this.mode=Math.abs(t-Proj4js.common.HALF_PI)this.lat0?this.S_POLE:this.N_POLE:Math.abs(t)0){var i;switch(this.qp=Proj4js.common.qsfnz(this.e,1),this.mmf=.5/(1-this.es),this.apa=this.authset(this.es),this.mode){case this.N_POLE:case this.S_POLE:this.dd=1;break;case this.EQUIT:this.rq=Math.sqrt(.5*this.qp),this.dd=1/this.rq,this.xmf=1,this.ymf=.5*this.qp;break;case this.OBLIQ:this.rq=Math.sqrt(.5*this.qp),i=Math.sin(this.lat0),this.sinb1=Proj4js.common.qsfnz(this.e,i)/this.qp,this.cosb1=Math.sqrt(1-this.sinb1*this.sinb1),this.dd=Math.cos(this.lat0)/(Math.sqrt(1-this.es*i*i)*this.rq*this.cosb1),this.ymf=(this.xmf=this.rq)/this.dd,this.xmf*=this.dd}}else this.mode==this.OBLIQ&&(this.sinph0=Math.sin(this.lat0),this.cosph0=Math.cos(this.lat0))},forward:function(t){var i,s,e=t.x,o=t.y;if(e=Proj4js.common.adjust_lon(e-this.long0),this.sphere){var n,a,r;switch(r=Math.sin(o),a=Math.cos(o),n=Math.cos(e),this.mode){case this.OBLIQ:case this.EQUIT:if(s=this.mode==this.EQUIT?1+a*n:1+this.sinph0*r+this.cosph0*a*n,Proj4js.common.EPSLN>=s)return Proj4js.reportError("laea:fwd:y less than eps"),null;s=Math.sqrt(2/s),i=s*a*Math.sin(e),s*=this.mode==this.EQUIT?r:this.cosph0*r-this.sinph0*a*n;break;case this.N_POLE:n=-n;case this.S_POLE:if(Math.abs(o+this.phi0)=0?(i=(u=Math.sqrt(l))*h,s=n*(this.mode==this.S_POLE?u:-u)):i=s=0}}return t.x=this.a*i+this.x0,t.y=this.a*s+this.y0,t},inverse:function(t){t.x-=this.x0,t.y-=this.y0;var i,s,e=t.x/this.a,o=t.y/this.a;if(this.sphere){var n,a=0,r=0;if(n=Math.sqrt(e*e+o*o),s=.5*n,s>1)return Proj4js.reportError("laea:Inv:DataError"),null; +switch(s=2*Math.asin(s),(this.mode==this.OBLIQ||this.mode==this.EQUIT)&&(r=Math.sin(s),a=Math.cos(s)),this.mode){case this.EQUIT:s=Math.abs(n)<=Proj4js.common.EPSLN?0:Math.asin(o*r/n),e*=r,o=a*n;break;case this.OBLIQ:s=Math.abs(n)<=Proj4js.common.EPSLN?this.phi0:Math.asin(a*this.sinph0+o*r*this.cosph0/n),e*=r*this.cosph0,o=(a-Math.sin(s)*this.sinph0)*n;break;case this.N_POLE:o=-o,s=Proj4js.common.HALF_PI-s;break;case this.S_POLE:s-=Proj4js.common.HALF_PI}i=0!=o||this.mode!=this.EQUIT&&this.mode!=this.OBLIQ?Math.atan2(e,o):0}else{var h,l,c,m,u=0;switch(this.mode){case this.EQUIT:case this.OBLIQ:if(e/=this.dd,o*=this.dd,m=Math.sqrt(e*e+o*o),Proj4js.common.EPSLN>m)return t.x=0,t.y=this.phi0,t;l=2*Math.asin(.5*m/this.rq),h=Math.cos(l),e*=l=Math.sin(l),this.mode==this.OBLIQ?(u=h*this.sinb1+o*l*this.cosb1/m,c=this.qp*u,o=m*this.cosb1*h-o*this.sinb1*l):(u=o*l/m,c=this.qp*u,o=m*h);break;case this.N_POLE:o=-o;case this.S_POLE:if(c=e*e+o*o,!c)return t.x=0,t.y=this.phi0,t;u=1-c/this.qp,this.mode==this.S_POLE&&(u=-u)}i=Math.atan2(e,o),s=this.authlat(Math.asin(u),this.apa)}return t.x=Proj4js.common.adjust_lon(this.long0+i),t.y=s,t},P00:.3333333333333333,P01:.17222222222222222,P02:.10257936507936508,P10:.06388888888888888,P11:.0664021164021164,P20:.016415012942191543,authset:function(t){var i,s=[];return s[0]=t*this.P00,i=t*t,s[0]+=i*this.P01,s[1]=i*this.P10,i*=t,s[0]+=i*this.P02,s[1]+=i*this.P11,s[2]=i*this.P20,s},authlat:function(t,i){var s=t+t;return t+i[0]*Math.sin(s)+i[1]*Math.sin(s+s)+i[2]*Math.sin(s+s+s)}},Proj4js.Proj.aeqd={init:function(){this.sin_p12=Math.sin(this.lat0),this.cos_p12=Math.cos(this.lat0)},forward:function(t){var i=t.x;t.y;var s,e=Math.sin(t.y),o=Math.cos(t.y),n=Proj4js.common.adjust_lon(i-this.long0),a=Math.cos(n),r=this.sin_p12*e+this.cos_p12*o*a;if(Math.abs(Math.abs(r)-1)r)return Proj4js.reportError("aeqd:Fwd:PointError"),void 0}else{var h=Math.acos(r);s=h/Math.sin(h)}return t.x=this.x0+this.a*s*o*Math.sin(n),t.y=this.y0+this.a*s*(this.cos_p12*e-this.sin_p12*o*a),t},inverse:function(t){t.x-=this.x0,t.y-=this.y0;var i=Math.sqrt(t.x*t.x+t.y*t.y);if(i>2*Proj4js.common.HALF_PI*this.a)return Proj4js.reportError("aeqdInvDataError"),void 0;var s,e=i/this.a,o=Math.sin(e),n=Math.cos(e),a=this.long0;if(Math.abs(i)<=Proj4js.common.EPSLN)s=this.lat0;else{s=Proj4js.common.asinz(n*this.sin_p12+t.y*o*this.cos_p12/i);var r=Math.abs(this.lat0)-Proj4js.common.HALF_PI;Math.abs(r)<=Proj4js.common.EPSLN?a=this.lat0>=0?Proj4js.common.adjust_lon(this.long0+Math.atan2(t.x,-t.y)):Proj4js.common.adjust_lon(this.long0-Math.atan2(-t.x,t.y)):(r=n-this.sin_p12*Math.sin(s),Math.abs(r)=50&&Proj4js.reportError("moll:Fwd:IterationError")}o/=2,Proj4js.common.PI/2-Math.abs(s).999999999999&&(s=.999999999999);var i=Math.asin(s),e=Proj4js.common.adjust_lon(this.long0+t.x/(.900316316158*this.a*Math.cos(i)));-Proj4js.common.PI>e&&(e=-Proj4js.common.PI),e>Proj4js.common.PI&&(e=Proj4js.common.PI),s=(2*i+Math.sin(2*i))/Proj4js.common.PI,Math.abs(s)>1&&(s=1);var o=Math.asin(s);return t.x=e,t.y=o,t}},function(t,i,s){var e,o;typeof exports!=s+""?e=exports:(o=t.L,e={},e.noConflict=function(){return t.L=o,this},t.L=e),e.version="0.5.1",e.Util={extend:function(t){var i,s,e,o,n=Array.prototype.slice.call(arguments,1);for(s=0,e=n.length;e>s;s++){o=n[s]||{};for(i in o)o.hasOwnProperty(i)&&(t[i]=o[i])}return t},bind:function(t,i){var s=arguments.length>2?Array.prototype.slice.call(arguments,2):null;return function(){return t.apply(i,s||arguments)}},stamp:function(){var t=0,i="_leaflet_id";return function(s){return s[i]=s[i]||++t,s[i]}}(),limitExecByInterval:function(t,i,e){var o,n;return function a(){var r=arguments;return o?(n=!0,s):(o=!0,setTimeout(function(){o=!1,n&&(a.apply(e,r),n=!1)},i),t.apply(e,r),s)}},falseFn:function(){return!1},formatNum:function(t,i){var s=Math.pow(10,i||5);return Math.round(t*s)/s},splitWords:function(t){return t.replace(/^\s+|\s+$/g,"").split(/\s+/)},setOptions:function(t,i){return t.options=e.extend({},t.options,i),t.options},getParamString:function(t,i){var s=[];for(var e in t)t.hasOwnProperty(e)&&s.push(e+"="+t[e]);return(i&&-1!==i.indexOf("?")?"&":"?")+s.join("&")},template:function(t,i){return t.replace(/\{ *([\w_]+) *\}/g,function(t,s){var e=i[s];if(!i.hasOwnProperty(s))throw Error("No value provided for variable "+t);return e})},isArray:function(t){return"[object Array]"===Object.prototype.toString.call(t)},emptyImageUrl:"data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs="},function(){function i(i){var s,e,o=["webkit","moz","o","ms"];for(s=0;o.length>s&&!e;s++)e=t[o[s]+i];return e}function o(i){var s=+new Date,e=Math.max(0,16-(s-n));return n=s+e,t.setTimeout(i,e)}var n=0,a=t.requestAnimationFrame||i("RequestAnimationFrame")||o,r=t.cancelAnimationFrame||i("CancelAnimationFrame")||i("CancelRequestAnimationFrame")||function(i){t.clearTimeout(i)};e.Util.requestAnimFrame=function(i,n,r,h){return i=e.bind(i,n),r&&a===o?(i(),s):a.call(t,i,h)},e.Util.cancelAnimFrame=function(i){i&&r.call(t,i)}}(),e.extend=e.Util.extend,e.bind=e.Util.bind,e.stamp=e.Util.stamp,e.setOptions=e.Util.setOptions,e.Class=function(){},e.Class.extend=function(t){var i=function(){this.initialize&&this.initialize.apply(this,arguments),this._initHooks&&this.callInitHooks()},s=function(){};s.prototype=this.prototype;var o=new s;o.constructor=i,i.prototype=o;for(var n in this)this.hasOwnProperty(n)&&"prototype"!==n&&(i[n]=this[n]);t.statics&&(e.extend(i,t.statics),delete t.statics),t.includes&&(e.Util.extend.apply(null,[o].concat(t.includes)),delete t.includes),t.options&&o.options&&(t.options=e.extend({},o.options,t.options)),e.extend(o,t),o._initHooks=[];var a=this;return o.callInitHooks=function(){if(!this._initHooksCalled){a.prototype.callInitHooks&&a.prototype.callInitHooks.call(this),this._initHooksCalled=!0;for(var t=0,i=o._initHooks.length;i>t;t++)o._initHooks[t].call(this)}},i},e.Class.include=function(t){e.extend(this.prototype,t)},e.Class.mergeOptions=function(t){e.extend(this.prototype.options,t)},e.Class.addInitHook=function(t){var i=Array.prototype.slice.call(arguments,1),s="function"==typeof t?t:function(){this[t].apply(this,i)};this.prototype._initHooks=this.prototype._initHooks||[],this.prototype._initHooks.push(s)};var n="_leaflet_events";e.Mixin={},e.Mixin.Events={addEventListener:function(t,i,s){var o,a,r,h=this[n]=this[n]||{};if("object"==typeof t){for(o in t)t.hasOwnProperty(o)&&this.addEventListener(o,t[o],i);return this}for(t=e.Util.splitWords(t),a=0,r=t.length;r>a;a++)h[t[a]]=h[t[a]]||[],h[t[a]].push({action:i,context:s||this});return this},hasEventListeners:function(t){return n in this&&t in this[n]&&this[n][t].length>0},removeEventListener:function(t,i,s){var o,a,r,h,l,c=this[n];if("object"==typeof t){for(o in t)t.hasOwnProperty(o)&&this.removeEventListener(o,t[o],i);return this}for(t=e.Util.splitWords(t),a=0,r=t.length;r>a;a++)if(this.hasEventListeners(t[a]))for(h=c[t[a]],l=h.length-1;l>=0;l--)i&&h[l].action!==i||s&&h[l].context!==s||h.splice(l,1);return this},fireEvent:function(t,i){if(!this.hasEventListeners(t))return this;for(var s=e.extend({type:t,target:this},i),o=this[n][t].slice(),a=0,r=o.length;r>a;a++)o[a].action.call(o[a].context||this,s);return this}},e.Mixin.Events.on=e.Mixin.Events.addEventListener,e.Mixin.Events.off=e.Mixin.Events.removeEventListener,e.Mixin.Events.fire=e.Mixin.Events.fireEvent,function(){var o=!!t.ActiveXObject,n=o&&!t.XMLHttpRequest,a=o&&!i.querySelector,r=navigator.userAgent.toLowerCase(),h=-1!==r.indexOf("webkit"),l=-1!==r.indexOf("chrome"),c=-1!==r.indexOf("android"),m=-1!==r.search("android [23]"),u=typeof orientation!=s+"",d=t.navigator&&t.navigator.msPointerEnabled&&t.navigator.msMaxTouchPoints,p="devicePixelRatio"in t&&t.devicePixelRatio>1||"matchMedia"in t&&t.matchMedia("(min-resolution:144dpi)")&&t.matchMedia("(min-resolution:144dpi)").matches,_=i.documentElement,f=o&&"transition"in _.style,P="WebKitCSSMatrix"in t&&"m11"in new t.WebKitCSSMatrix,y="MozPerspective"in _.style,g="OTransition"in _.style,L=!t.L_DISABLE_3D&&(f||P||y||g),v=!t.L_NO_TOUCH&&function(){var t="ontouchstart";if(d||t in _)return!0;var s=i.createElement("div"),e=!1;return s.setAttribute?(s.setAttribute(t,"return;"),"function"==typeof s[t]&&(e=!0),s.removeAttribute(t),s=null,e):!1}();e.Browser={ie:o,ie6:n,ie7:a,webkit:h,android:c,android23:m,chrome:l,ie3d:f,webkit3d:P,gecko3d:y,opera3d:g,any3d:L,mobile:u,mobileWebkit:u&&h,mobileWebkit3d:u&&P,mobileOpera:u&&t.opera,touch:v,msTouch:d,retina:p}}(),e.Point=function(t,i,s){this.x=s?Math.round(t):t,this.y=s?Math.round(i):i},e.Point.prototype={clone:function(){return new e.Point(this.x,this.y)},add:function(t){return this.clone()._add(e.point(t))},_add:function(t){return this.x+=t.x,this.y+=t.y,this},subtract:function(t){return this.clone()._subtract(e.point(t))},_subtract:function(t){return this.x-=t.x,this.y-=t.y,this},divideBy:function(t){return this.clone()._divideBy(t)},_divideBy:function(t){return this.x/=t,this.y/=t,this},multiplyBy:function(t){return this.clone()._multiplyBy(t)},_multiplyBy:function(t){return this.x*=t,this.y*=t,this},round:function(){return this.clone()._round()},_round:function(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this},floor:function(){return this.clone()._floor()},_floor:function(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this},distanceTo:function(t){t=e.point(t);var i=t.x-this.x,s=t.y-this.y;return Math.sqrt(i*i+s*s)},equals:function(t){return t.x===this.x&&t.y===this.y},toString:function(){return"Point("+e.Util.formatNum(this.x)+", "+e.Util.formatNum(this.y)+")"}},e.point=function(t,i,s){return t instanceof e.Point?t:e.Util.isArray(t)?new e.Point(t[0],t[1]):isNaN(t)?t:new e.Point(t,i,s)},e.Bounds=function(t,i){if(t)for(var s=i?[t,i]:t,e=0,o=s.length;o>e;e++)this.extend(s[e])},e.Bounds.prototype={extend:function(t){return t=e.point(t),this.min||this.max?(this.min.x=Math.min(t.x,this.min.x),this.max.x=Math.max(t.x,this.max.x),this.min.y=Math.min(t.y,this.min.y),this.max.y=Math.max(t.y,this.max.y)):(this.min=t.clone(),this.max=t.clone()),this},getCenter:function(t){return new e.Point((this.min.x+this.max.x)/2,(this.min.y+this.max.y)/2,t)},getBottomLeft:function(){return new e.Point(this.min.x,this.max.y)},getTopRight:function(){return new e.Point(this.max.x,this.min.y)},getSize:function(){return this.max.subtract(this.min)},contains:function(t){var i,s;return t="number"==typeof t[0]||t instanceof e.Point?e.point(t):e.bounds(t),t instanceof e.Bounds?(i=t.min,s=t.max):i=s=t,i.x>=this.min.x&&s.x<=this.max.x&&i.y>=this.min.y&&s.y<=this.max.y},intersects:function(t){t=e.bounds(t);var i=this.min,s=this.max,o=t.min,n=t.max,a=n.x>=i.x&&o.x<=s.x,r=n.y>=i.y&&o.y<=s.y;return a&&r},isValid:function(){return!(!this.min||!this.max)}},e.bounds=function(t,i){return!t||t instanceof e.Bounds?t:new e.Bounds(t,i)},e.Transformation=function(t,i,s,e){this._a=t,this._b=i,this._c=s,this._d=e},e.Transformation.prototype={transform:function(t,i){return this._transform(t.clone(),i)},_transform:function(t,i){return i=i||1,t.x=i*(this._a*t.x+this._b),t.y=i*(this._c*t.y+this._d),t},untransform:function(t,i){return i=i||1,new e.Point((t.x/i-this._b)/this._a,(t.y/i-this._d)/this._c)}},e.DomUtil={get:function(t){return"string"==typeof t?i.getElementById(t):t},getStyle:function(t,s){var e=t.style[s];if(!e&&t.currentStyle&&(e=t.currentStyle[s]),(!e||"auto"===e)&&i.defaultView){var o=i.defaultView.getComputedStyle(t,null);e=o?o[s]:null}return"auto"===e?null:e},getViewportOffset:function(t){var s,o=0,n=0,a=t,r=i.body,h=e.Browser.ie7;do{if(o+=a.offsetTop||0,n+=a.offsetLeft||0,o+=parseInt(e.DomUtil.getStyle(a,"borderTopWidth"),10)||0,n+=parseInt(e.DomUtil.getStyle(a,"borderLeftWidth"),10)||0,s=e.DomUtil.getStyle(a,"position"),a.offsetParent===r&&"absolute"===s)break;if("fixed"===s){o+=r.scrollTop||0,n+=r.scrollLeft||0;break}a=a.offsetParent}while(a);a=t;do{if(a===r)break;o-=a.scrollTop||0,n-=a.scrollLeft||0,e.DomUtil.documentIsLtr()||!e.Browser.webkit&&!h||(n+=a.scrollWidth-a.clientWidth,h&&"hidden"!==e.DomUtil.getStyle(a,"overflow-y")&&"hidden"!==e.DomUtil.getStyle(a,"overflow")&&(n+=17)),a=a.parentNode}while(a);return new e.Point(n,o)},documentIsLtr:function(){return e.DomUtil._docIsLtrCached||(e.DomUtil._docIsLtrCached=!0,e.DomUtil._docIsLtr="ltr"===e.DomUtil.getStyle(i.body,"direction")),e.DomUtil._docIsLtr},create:function(t,s,e){var o=i.createElement(t);return o.className=s,e&&e.appendChild(o),o},disableTextSelection:function(){i.selection&&i.selection.empty&&i.selection.empty(),this._onselectstart||(this._onselectstart=i.onselectstart||null,i.onselectstart=e.Util.falseFn)},enableTextSelection:function(){i.onselectstart===e.Util.falseFn&&(i.onselectstart=this._onselectstart,this._onselectstart=null)},hasClass:function(t,i){return t.className.length>0&&RegExp("(^|\\s)"+i+"(\\s|$)").test(t.className)},addClass:function(t,i){e.DomUtil.hasClass(t,i)||(t.className+=(t.className?" ":"")+i)},removeClass:function(t,i){function s(t,s){return s===i?"":t}t.className=t.className.replace(/(\S+)\s*/g,s).replace(/(^\s+|\s+$)/,"")},setOpacity:function(t,i){if("opacity"in t.style)t.style.opacity=i;else if("filter"in t.style){var s=!1,e="DXImageTransform.Microsoft.Alpha";try{s=t.filters.item(e)}catch(o){}i=Math.round(100*i),s?(s.Enabled=100!==i,s.Opacity=i):t.style.filter+=" progid:"+e+"(opacity="+i+")"}},testProp:function(t){for(var s=i.documentElement.style,e=0;t.length>e;e++)if(t[e]in s)return t[e];return!1},getTranslateString:function(t){var i=e.Browser.webkit3d,s="translate"+(i?"3d":"")+"(",o=(i?",0":"")+")";return s+t.x+"px,"+t.y+"px"+o},getScaleString:function(t,i){var s=e.DomUtil.getTranslateString(i.add(i.multiplyBy(-1*t))),o=" scale("+t+") ";return s+o},setPosition:function(t,i,s){t._leaflet_pos=i,!s&&e.Browser.any3d?(t.style[e.DomUtil.TRANSFORM]=e.DomUtil.getTranslateString(i),e.Browser.mobileWebkit3d&&(t.style.WebkitBackfaceVisibility="hidden")):(t.style.left=i.x+"px",t.style.top=i.y+"px")},getPosition:function(t){return t._leaflet_pos}},e.DomUtil.TRANSFORM=e.DomUtil.testProp(["transform","WebkitTransform","OTransform","MozTransform","msTransform"]),e.DomUtil.TRANSITION=e.DomUtil.testProp(["webkitTransition","transition","OTransition","MozTransition","msTransition"]),e.DomUtil.TRANSITION_END="webkitTransition"===e.DomUtil.TRANSITION||"OTransition"===e.DomUtil.TRANSITION?e.DomUtil.TRANSITION+"End":"transitionend",e.LatLng=function(t,i){var s=parseFloat(t),e=parseFloat(i);if(isNaN(s)||isNaN(e))throw Error("Invalid LatLng object: ("+t+", "+i+")");this.lat=s,this.lng=e},e.extend(e.LatLng,{DEG_TO_RAD:Math.PI/180,RAD_TO_DEG:180/Math.PI,MAX_MARGIN:1e-9}),e.LatLng.prototype={equals:function(t){if(!t)return!1;t=e.latLng(t);var i=Math.max(Math.abs(this.lat-t.lat),Math.abs(this.lng-t.lng));return e.LatLng.MAX_MARGIN>=i},toString:function(t){return"LatLng("+e.Util.formatNum(this.lat,t)+", "+e.Util.formatNum(this.lng,t)+")"},distanceTo:function(t){t=e.latLng(t);var i=6378137,s=e.LatLng.DEG_TO_RAD,o=(t.lat-this.lat)*s,n=(t.lng-this.lng)*s,a=this.lat*s,r=t.lat*s,h=Math.sin(o/2),l=Math.sin(n/2),c=h*h+l*l*Math.cos(a)*Math.cos(r);return 2*i*Math.atan2(Math.sqrt(c),Math.sqrt(1-c))},wrap:function(t,i){var s=this.lng;return t=t||-180,i=i||180,s=(s+i)%(i-t)+(t>s||s===i?i:t),new e.LatLng(this.lat,s)}},e.latLng=function(t,i){return t instanceof e.LatLng?t:e.Util.isArray(t)?new e.LatLng(t[0],t[1]):isNaN(t)?t:new e.LatLng(t,i)},e.LatLngBounds=function(t,i){if(t)for(var s=i?[t,i]:t,e=0,o=s.length;o>e;e++)this.extend(s[e])},e.LatLngBounds.prototype={extend:function(t){return t="number"==typeof t[0]||"string"==typeof t[0]||t instanceof e.LatLng?e.latLng(t):e.latLngBounds(t),t instanceof e.LatLng?this._southWest||this._northEast?(this._southWest.lat=Math.min(t.lat,this._southWest.lat),this._southWest.lng=Math.min(t.lng,this._southWest.lng),this._northEast.lat=Math.max(t.lat,this._northEast.lat),this._northEast.lng=Math.max(t.lng,this._northEast.lng)):(this._southWest=new e.LatLng(t.lat,t.lng),this._northEast=new e.LatLng(t.lat,t.lng)):t instanceof e.LatLngBounds&&(this.extend(t._southWest),this.extend(t._northEast)),this},pad:function(t){var i=this._southWest,s=this._northEast,o=Math.abs(i.lat-s.lat)*t,n=Math.abs(i.lng-s.lng)*t;return new e.LatLngBounds(new e.LatLng(i.lat-o,i.lng-n),new e.LatLng(s.lat+o,s.lng+n))},getCenter:function(){return new e.LatLng((this._southWest.lat+this._northEast.lat)/2,(this._southWest.lng+this._northEast.lng)/2)},getSouthWest:function(){return this._southWest},getNorthEast:function(){return this._northEast},getNorthWest:function(){return new e.LatLng(this._northEast.lat,this._southWest.lng)},getSouthEast:function(){return new e.LatLng(this._southWest.lat,this._northEast.lng)},contains:function(t){t="number"==typeof t[0]||t instanceof e.LatLng?e.latLng(t):e.latLngBounds(t);var i,s,o=this._southWest,n=this._northEast;return t instanceof e.LatLngBounds?(i=t.getSouthWest(),s=t.getNorthEast()):i=s=t,i.lat>=o.lat&&s.lat<=n.lat&&i.lng>=o.lng&&s.lng<=n.lng},intersects:function(t){t=e.latLngBounds(t);var i=this._southWest,s=this._northEast,o=t.getSouthWest(),n=t.getNorthEast(),a=n.lat>=i.lat&&o.lat<=s.lat,r=n.lng>=i.lng&&o.lng<=s.lng;return a&&r},toBBoxString:function(){var t=this._southWest,i=this._northEast;return[t.lng,t.lat,i.lng,i.lat].join(",")},equals:function(t){return t?(t=e.latLngBounds(t),this._southWest.equals(t.getSouthWest())&&this._northEast.equals(t.getNorthEast())):!1},isValid:function(){return!(!this._southWest||!this._northEast)}},e.latLngBounds=function(t,i){return!t||t instanceof e.LatLngBounds?t:new e.LatLngBounds(t,i)},e.Projection={},e.Projection.SphericalMercator={MAX_LATITUDE:85.0511287798,project:function(t){var i=e.LatLng.DEG_TO_RAD,s=this.MAX_LATITUDE,o=Math.max(Math.min(s,t.lat),-s),n=t.lng*i,a=o*i;return a=Math.log(Math.tan(Math.PI/4+a/2)),new e.Point(n,a)},unproject:function(t){var i=e.LatLng.RAD_TO_DEG,s=t.x*i,o=(2*Math.atan(Math.exp(t.y))-Math.PI/2)*i;return new e.LatLng(o,s)}},e.Projection.LonLat={project:function(t){return new e.Point(t.lng,t.lat)},unproject:function(t){return new e.LatLng(t.y,t.x)}},e.CRS={latLngToPoint:function(t,i){var s=this.projection.project(t),e=this.scale(i);return this.transformation._transform(s,e)},pointToLatLng:function(t,i){var s=this.scale(i),e=this.transformation.untransform(t,s);return this.projection.unproject(e)},project:function(t){return this.projection.project(t)},scale:function(t){return 256*Math.pow(2,t)}},e.CRS.Simple=e.extend({},e.CRS,{projection:e.Projection.LonLat,transformation:new e.Transformation(1,0,-1,0),scale:function(t){return Math.pow(2,t)}}),e.CRS.EPSG3857=e.extend({},e.CRS,{code:"EPSG:3857",projection:e.Projection.SphericalMercator,transformation:new e.Transformation(.5/Math.PI,.5,-.5/Math.PI,.5),project:function(t){var i=this.projection.project(t),s=6378137;return i.multiplyBy(s)}}),e.CRS.EPSG900913=e.extend({},e.CRS.EPSG3857,{code:"EPSG:900913"}),e.CRS.EPSG4326=e.extend({},e.CRS,{code:"EPSG:4326",projection:e.Projection.LonLat,transformation:new e.Transformation(1/360,.5,-1/360,.5)}),e.Map=e.Class.extend({includes:e.Mixin.Events,options:{crs:e.CRS.EPSG3857,fadeAnimation:e.DomUtil.TRANSITION&&!e.Browser.android23,trackResize:!0,markerZoomAnimation:e.DomUtil.TRANSITION&&e.Browser.any3d},initialize:function(t,i){i=e.setOptions(this,i),this._initContainer(t),this._initLayout(),this.callInitHooks(),this._initEvents(),i.maxBounds&&this.setMaxBounds(i.maxBounds),i.center&&i.zoom!==s&&this.setView(e.latLng(i.center),i.zoom,!0),this._initLayers(i.layers)},setView:function(t,i){return this._resetView(e.latLng(t),this._limitZoom(i)),this},setZoom:function(t){return this.setView(this.getCenter(),t)},zoomIn:function(t){return this.setZoom(this._zoom+(t||1))},zoomOut:function(t){return this.setZoom(this._zoom-(t||1))},fitBounds:function(t){var i=this.getBoundsZoom(t);return this.setView(e.latLngBounds(t).getCenter(),i)},fitWorld:function(){var t=new e.LatLng(-60,-170),i=new e.LatLng(85,179);return this.fitBounds(new e.LatLngBounds(t,i))},panTo:function(t){return this.setView(t,this._zoom)},panBy:function(t){return this.fire("movestart"),this._rawPanBy(e.point(t)),this.fire("move"),this.fire("moveend")},setMaxBounds:function(t){if(t=e.latLngBounds(t),this.options.maxBounds=t,!t)return this._boundsMinZoom=null,this;var i=this.getBoundsZoom(t,!0);return this._boundsMinZoom=i,this._loaded&&(i>this._zoom?this.setView(t.getCenter(),i):this.panInsideBounds(t)),this},panInsideBounds:function(t){t=e.latLngBounds(t);var i=this.getBounds(),s=this.project(i.getSouthWest()),o=this.project(i.getNorthEast()),n=this.project(t.getSouthWest()),a=this.project(t.getNorthEast()),r=0,h=0;return o.ya.x&&(r=a.x-o.x),s.y>n.y&&(h=n.y-s.y),s.x=r);return m&&i?null:i?r:r-1},getSize:function(){return(!this._size||this._sizeChanged)&&(this._size=new e.Point(this._container.clientWidth,this._container.clientHeight),this._sizeChanged=!1),this._size.clone()},getPixelBounds:function(){var t=this._getTopLeftPoint();return new e.Bounds(t,t.add(this.getSize()))},getPixelOrigin:function(){return this._initialTopLeftPoint},getPanes:function(){return this._panes},getContainer:function(){return this._container},getZoomScale:function(t){var i=this.options.crs;return i.scale(t)/i.scale(this._zoom)},getScaleZoom:function(t){return this._zoom+Math.log(t)/Math.LN2},project:function(t,i){return i=i===s?this._zoom:i,this.options.crs.latLngToPoint(e.latLng(t),i)},unproject:function(t,i){return i=i===s?this._zoom:i,this.options.crs.pointToLatLng(e.point(t),i)},layerPointToLatLng:function(t){var i=e.point(t).add(this._initialTopLeftPoint);return this.unproject(i)},latLngToLayerPoint:function(t){var i=this.project(e.latLng(t))._round();return i._subtract(this._initialTopLeftPoint)},containerPointToLayerPoint:function(t){return e.point(t).subtract(this._getMapPanePos())},layerPointToContainerPoint:function(t){return e.point(t).add(this._getMapPanePos())},containerPointToLatLng:function(t){var i=this.containerPointToLayerPoint(e.point(t));return this.layerPointToLatLng(i)},latLngToContainerPoint:function(t){return this.layerPointToContainerPoint(this.latLngToLayerPoint(e.latLng(t)))},mouseEventToContainerPoint:function(t){return e.DomEvent.getMousePosition(t,this._container)},mouseEventToLayerPoint:function(t){return this.containerPointToLayerPoint(this.mouseEventToContainerPoint(t))},mouseEventToLatLng:function(t){return this.layerPointToLatLng(this.mouseEventToLayerPoint(t))},_initContainer:function(t){var i=this._container=e.DomUtil.get(t);if(i._leaflet)throw Error("Map container is already initialized.");i._leaflet=!0},_initLayout:function(){var t=this._container;e.DomUtil.addClass(t,"leaflet-container"),e.Browser.touch&&e.DomUtil.addClass(t,"leaflet-touch"),this.options.fadeAnimation&&e.DomUtil.addClass(t,"leaflet-fade-anim");var i=e.DomUtil.getStyle(t,"position");"absolute"!==i&&"relative"!==i&&"fixed"!==i&&(t.style.position="relative"),this._initPanes(),this._initControlPos&&this._initControlPos()},_initPanes:function(){var t=this._panes={};this._mapPane=t.mapPane=this._createPane("leaflet-map-pane",this._container),this._tilePane=t.tilePane=this._createPane("leaflet-tile-pane",this._mapPane),t.objectsPane=this._createPane("leaflet-objects-pane",this._mapPane),t.shadowPane=this._createPane("leaflet-shadow-pane"),t.overlayPane=this._createPane("leaflet-overlay-pane"),t.markerPane=this._createPane("leaflet-marker-pane"),t.popupPane=this._createPane("leaflet-popup-pane");var i=" leaflet-zoom-hide";this.options.markerZoomAnimation||(e.DomUtil.addClass(t.markerPane,i),e.DomUtil.addClass(t.shadowPane,i),e.DomUtil.addClass(t.popupPane,i))},_createPane:function(t,i){return e.DomUtil.create("div",t,i||this._panes.objectsPane)},_initLayers:function(t){t=t?e.Util.isArray(t)?t:[t]:[],this._layers={},this._zoomBoundLayers={},this._tileLayersNum=0;var i,s;for(i=0,s=t.length;s>i;i++)this.addLayer(t[i])},_resetView:function(t,i,s,o){var n=this._zoom!==i;o||(this.fire("movestart"),n&&this.fire("zoomstart")),this._zoom=i,this._initialTopLeftPoint=this._getNewTopLeftPoint(t),s?this._initialTopLeftPoint._add(this._getMapPanePos()):e.DomUtil.setPosition(this._mapPane,new e.Point(0,0)),this._tileLayersToLoad=this._tileLayersNum;var a=!this._loaded;this._loaded=!0,this.fire("viewreset",{hard:!s}),this.fire("move"),(n||o)&&this.fire("zoomend"),this.fire("moveend",{hard:!s}),a&&this.fire("load")},_rawPanBy:function(t){e.DomUtil.setPosition(this._mapPane,this._getMapPanePos().subtract(t))},_updateZoomLevels:function(){var t,i=1/0,e=-1/0;for(t in this._zoomBoundLayers)if(this._zoomBoundLayers.hasOwnProperty(t)){var o=this._zoomBoundLayers[t];isNaN(o.options.minZoom)||(i=Math.min(i,o.options.minZoom)),isNaN(o.options.maxZoom)||(e=Math.max(e,o.options.maxZoom))}t===s?this._layersMaxZoom=this._layersMinZoom=s:(this._layersMaxZoom=e,this._layersMinZoom=i)},_initEvents:function(){if(e.DomEvent){e.DomEvent.on(this._container,"click",this._onMouseClick,this);var i,s,o=["dblclick","mousedown","mouseup","mouseenter","mouseleave","mousemove","contextmenu"];for(i=0,s=o.length;s>i;i++)e.DomEvent.on(this._container,o[i],this._fireMouseEvent,this);this.options.trackResize&&e.DomEvent.on(t,"resize",this._onResize,this)}},_onResize:function(){e.Util.cancelAnimFrame(this._resizeRequest),this._resizeRequest=e.Util.requestAnimFrame(this.invalidateSize,this,!1,this._container)},_onMouseClick:function(t){!this._loaded||this.dragging&&this.dragging.moved()||(this.fire("preclick"),this._fireMouseEvent(t))},_fireMouseEvent:function(t){if(this._loaded){var i=t.type;if(i="mouseenter"===i?"mouseover":"mouseleave"===i?"mouseout":i,this.hasEventListeners(i)){"contextmenu"===i&&e.DomEvent.preventDefault(t);var s=this.mouseEventToContainerPoint(t),o=this.containerPointToLayerPoint(s),n=this.layerPointToLatLng(o);this.fire(i,{latlng:n,layerPoint:o,containerPoint:s,originalEvent:t})}}},_onTileLayerLoad:function(){this._tileLayersToLoad--,this._tileLayersNum&&!this._tileLayersToLoad&&this._tileBg&&(clearTimeout(this._clearTileBgTimer),this._clearTileBgTimer=setTimeout(e.bind(this._clearTileBg,this),500))},whenReady:function(t,i){return this._loaded?t.call(i||this,this):this.on("load",t,i),this},_getMapPanePos:function(){return e.DomUtil.getPosition(this._mapPane)},_getTopLeftPoint:function(){if(!this._loaded)throw Error("Set map center and zoom first.");return this._initialTopLeftPoint.subtract(this._getMapPanePos())},_getNewTopLeftPoint:function(t,i){var s=this.getSize()._divideBy(2);return this.project(t,i)._subtract(s)._round()},_latLngToNewLayerPoint:function(t,i,s){var e=this._getNewTopLeftPoint(s,i).add(this._getMapPanePos());return this.project(t,i)._subtract(e)},_getCenterLayerPoint:function(){return this.containerPointToLayerPoint(this.getSize()._divideBy(2))},_getCenterOffset:function(t){return this.latLngToLayerPoint(t).subtract(this._getCenterLayerPoint())},_limitZoom:function(t){var i=this.getMinZoom(),s=this.getMaxZoom();return Math.max(i,Math.min(s,t))}}),e.map=function(t,i){return new e.Map(t,i)},e.Projection.Mercator={MAX_LATITUDE:85.0840591556,R_MINOR:6356752.3142,R_MAJOR:6378137,project:function(t){var i=e.LatLng.DEG_TO_RAD,s=this.MAX_LATITUDE,o=Math.max(Math.min(s,t.lat),-s),n=this.R_MAJOR,a=this.R_MINOR,r=t.lng*i*n,h=o*i,l=a/n,c=Math.sqrt(1-l*l),m=c*Math.sin(h);m=Math.pow((1-m)/(1+m),.5*c);var u=Math.tan(.5*(.5*Math.PI-h))/m;return h=-a*Math.log(u),new e.Point(r,h)},unproject:function(t){for(var i,s=e.LatLng.RAD_TO_DEG,o=this.R_MAJOR,n=this.R_MINOR,a=t.x*s/o,r=n/o,h=Math.sqrt(1-r*r),l=Math.exp(-t.y/n),c=Math.PI/2-2*Math.atan(l),m=15,u=1e-7,d=m,p=.1;Math.abs(p)>u&&--d>0;)i=h*Math.sin(c),p=Math.PI/2-2*Math.atan(l*Math.pow((1-i)/(1+i),.5*h))-c,c+=p;return new e.LatLng(c*s,a)}},e.CRS.EPSG3395=e.extend({},e.CRS,{code:"EPSG:3395",projection:e.Projection.Mercator,transformation:function(){var t=e.Projection.Mercator,i=t.R_MAJOR,s=t.R_MINOR;return new e.Transformation(.5/(Math.PI*i),.5,-.5/(Math.PI*s),.5)}()}),e.TileLayer=e.Class.extend({includes:e.Mixin.Events,options:{minZoom:0,maxZoom:18,tileSize:256,subdomains:"abc",errorTileUrl:"",attribution:"",zoomOffset:0,opacity:1,unloadInvisibleTiles:e.Browser.mobile,updateWhenIdle:e.Browser.mobile},initialize:function(t,i){i=e.setOptions(this,i),i.detectRetina&&e.Browser.retina&&i.maxZoom>0&&(i.tileSize=Math.floor(i.tileSize/2),i.zoomOffset++,i.minZoom>0&&i.minZoom--,this.options.maxZoom--),this._url=t;var s=this.options.subdomains;"string"==typeof s&&(this.options.subdomains=s.split(""))},onAdd:function(t){this._map=t,this._initContainer(),this._createTileProto(),t.on({viewreset:this._resetCallback,moveend:this._update},this),this.options.updateWhenIdle||(this._limitedUpdate=e.Util.limitExecByInterval(this._update,150,this),t.on("move",this._limitedUpdate,this)),this._reset(),this._update()},addTo:function(t){return t.addLayer(this),this},onRemove:function(t){this._container.parentNode.removeChild(this._container),t.off({viewreset:this._resetCallback,moveend:this._update},this),this.options.updateWhenIdle||t.off("move",this._limitedUpdate,this),this._container=null,this._map=null +},bringToFront:function(){var t=this._map._panes.tilePane;return this._container&&(t.appendChild(this._container),this._setAutoZIndex(t,Math.max)),this},bringToBack:function(){var t=this._map._panes.tilePane;return this._container&&(t.insertBefore(this._container,t.firstChild),this._setAutoZIndex(t,Math.min)),this},getAttribution:function(){return this.options.attribution},setOpacity:function(t){return this.options.opacity=t,this._map&&this._updateOpacity(),this},setZIndex:function(t){return this.options.zIndex=t,this._updateZIndex(),this},setUrl:function(t,i){return this._url=t,i||this.redraw(),this},redraw:function(){return this._map&&(this._map._panes.tilePane.empty=!1,this._reset(!0),this._update()),this},_updateZIndex:function(){this._container&&this.options.zIndex!==s&&(this._container.style.zIndex=this.options.zIndex)},_setAutoZIndex:function(t,i){var s,e,o,n=t.children,a=-i(1/0,-1/0);for(e=0,o=n.length;o>e;e++)n[e]!==this._container&&(s=parseInt(n[e].style.zIndex,10),isNaN(s)||(a=i(a,s)));this.options.zIndex=this._container.style.zIndex=(isFinite(a)?a:0)+i(1,-1)},_updateOpacity:function(){e.DomUtil.setOpacity(this._container,this.options.opacity);var t,i=this._tiles;if(e.Browser.webkit)for(t in i)i.hasOwnProperty(t)&&(i[t].style.webkitTransform+=" translate(0,0)")},_initContainer:function(){var t=this._map._panes.tilePane;(!this._container||t.empty)&&(this._container=e.DomUtil.create("div","leaflet-layer"),this._updateZIndex(),t.appendChild(this._container),1>this.options.opacity&&this._updateOpacity())},_resetCallback:function(t){this._reset(t.hard)},_reset:function(t){var i=this._tiles;for(var s in i)i.hasOwnProperty(s)&&this.fire("tileunload",{tile:i[s]});this._tiles={},this._tilesToLoad=0,this.options.reuseTiles&&(this._unusedTiles=[]),t&&this._container&&(this._container.innerHTML=""),this._initContainer()},_update:function(){if(this._map){var t=this._map.getPixelBounds(),i=this._map.getZoom(),s=this.options.tileSize;if(!(i>this.options.maxZoom||this.options.minZoom>i)){var o=new e.Point(Math.floor(t.min.x/s),Math.floor(t.min.y/s)),n=new e.Point(Math.floor(t.max.x/s),Math.floor(t.max.y/s)),a=new e.Bounds(o,n);this._addTilesFromCenterOut(a),(this.options.unloadInvisibleTiles||this.options.reuseTiles)&&this._removeOtherTiles(a)}}},_addTilesFromCenterOut:function(t){var s,o,n,a=[],r=t.getCenter();for(s=t.min.y;t.max.y>=s;s++)for(o=t.min.x;t.max.x>=o;o++)n=new e.Point(o,s),this._tileShouldBeLoaded(n)&&a.push(n);var h=a.length;if(0!==h){a.sort(function(t,i){return t.distanceTo(r)-i.distanceTo(r)});var l=i.createDocumentFragment();for(this._tilesToLoad||this.fire("loading"),this._tilesToLoad+=h,o=0;h>o;o++)this._addTile(a[o],l);this._container.appendChild(l)}},_tileShouldBeLoaded:function(t){if(t.x+":"+t.y in this._tiles)return!1;if(!this.options.continuousWorld){var i=this._getWrapTileNum();if(this.options.noWrap&&(0>t.x||t.x>=i)||0>t.y||t.y>=i)return!1}return!0},_removeOtherTiles:function(t){var i,s,e,o;for(o in this._tiles)this._tiles.hasOwnProperty(o)&&(i=o.split(":"),s=parseInt(i[0],10),e=parseInt(i[1],10),(t.min.x>s||s>t.max.x||t.min.y>e||e>t.max.y)&&this._removeTile(o))},_removeTile:function(t){var i=this._tiles[t];this.fire("tileunload",{tile:i,url:i.src}),this.options.reuseTiles?(e.DomUtil.removeClass(i,"leaflet-tile-loaded"),this._unusedTiles.push(i)):i.parentNode===this._container&&this._container.removeChild(i),e.Browser.android||(i.src=e.Util.emptyImageUrl),delete this._tiles[t]},_addTile:function(t,i){var s=this._getTilePos(t),o=this._getTile();e.DomUtil.setPosition(o,s,e.Browser.chrome||e.Browser.android23),this._tiles[t.x+":"+t.y]=o,this._loadTile(o,t),o.parentNode!==this._container&&i.appendChild(o)},_getZoomForUrl:function(){var t=this.options,i=this._map.getZoom();return t.zoomReverse&&(i=t.maxZoom-i),i+t.zoomOffset},_getTilePos:function(t){var i=this._map.getPixelOrigin(),s=this.options.tileSize;return t.multiplyBy(s).subtract(i)},getTileUrl:function(t){return this._adjustTilePoint(t),e.Util.template(this._url,e.extend({s:this._getSubdomain(t),z:this._getZoomForUrl(),x:t.x,y:t.y},this.options))},_getWrapTileNum:function(){return Math.pow(2,this._getZoomForUrl())},_adjustTilePoint:function(t){var i=this._getWrapTileNum();this.options.continuousWorld||this.options.noWrap||(t.x=(t.x%i+i)%i),this.options.tms&&(t.y=i-t.y-1)},_getSubdomain:function(t){var i=(t.x+t.y)%this.options.subdomains.length;return this.options.subdomains[i]},_createTileProto:function(){var t=this._tileImg=e.DomUtil.create("img","leaflet-tile");t.style.width=t.style.height=this.options.tileSize+"px",t.galleryimg="no"},_getTile:function(){if(this.options.reuseTiles&&this._unusedTiles.length>0){var t=this._unusedTiles.pop();return this._resetTile(t),t}return this._createTile()},_resetTile:function(){},_createTile:function(){var t=this._tileImg.cloneNode(!1);return t.onselectstart=t.onmousemove=e.Util.falseFn,t},_loadTile:function(t,i){t._layer=this,t.onload=this._tileOnLoad,t.onerror=this._tileOnError,t.src=this.getTileUrl(i)},_tileLoaded:function(){this._tilesToLoad--,this._tilesToLoad||this.fire("load")},_tileOnLoad:function(){var t=this._layer;this.src!==e.Util.emptyImageUrl&&(e.DomUtil.addClass(this,"leaflet-tile-loaded"),t.fire("tileload",{tile:this,url:this.src})),t._tileLoaded()},_tileOnError:function(){var t=this._layer;t.fire("tileerror",{tile:this,url:this.src});var i=t.options.errorTileUrl;i&&(this.src=i),t._tileLoaded()}}),e.tileLayer=function(t,i){return new e.TileLayer(t,i)},e.TileLayer.WMS=e.TileLayer.extend({defaultWmsParams:{service:"WMS",request:"GetMap",version:"1.1.1",layers:"",styles:"",format:"image/jpeg",transparent:!1},initialize:function(t,i){this._url=t;var s=e.extend({},this.defaultWmsParams);s.width=s.height=i.detectRetina&&e.Browser.retina?2*this.options.tileSize:this.options.tileSize;for(var o in i)this.options.hasOwnProperty(o)||(s[o]=i[o]);this.wmsParams=s,e.setOptions(this,i)},onAdd:function(t){var i=parseFloat(this.wmsParams.version)>=1.3?"crs":"srs";this.wmsParams[i]=t.options.crs.code,e.TileLayer.prototype.onAdd.call(this,t)},getTileUrl:function(t,i){this._adjustTilePoint(t);var s=this._map,o=s.options.crs,n=this.options.tileSize,a=t.multiplyBy(n),r=a.add(new e.Point(n,n)),h=o.project(s.unproject(a,i)),l=o.project(s.unproject(r,i)),c=[h.x,l.y,l.x,h.y].join(","),m=e.Util.template(this._url,{s:this._getSubdomain(t)});return m+e.Util.getParamString(this.wmsParams,m)+"&bbox="+c},setParams:function(t,i){return e.extend(this.wmsParams,t),i||this.redraw(),this}}),e.tileLayer.wms=function(t,i){return new e.TileLayer.WMS(t,i)},e.TileLayer.Canvas=e.TileLayer.extend({options:{async:!1},initialize:function(t){e.setOptions(this,t)},redraw:function(){var t=this._tiles;for(var i in t)t.hasOwnProperty(i)&&this._redrawTile(t[i])},_redrawTile:function(t){this.drawTile(t,t._tilePoint,this._map._zoom)},_createTileProto:function(){var t=this._canvasProto=e.DomUtil.create("canvas","leaflet-tile");t.width=t.height=this.options.tileSize},_createTile:function(){var t=this._canvasProto.cloneNode(!1);return t.onselectstart=t.onmousemove=e.Util.falseFn,t},_loadTile:function(t,i){t._layer=this,t._tilePoint=i,this._redrawTile(t),this.options.async||this.tileDrawn(t)},drawTile:function(){},tileDrawn:function(t){this._tileOnLoad.call(t)}}),e.tileLayer.canvas=function(t){return new e.TileLayer.Canvas(t)},e.ImageOverlay=e.Class.extend({includes:e.Mixin.Events,options:{opacity:1},initialize:function(t,i,s){this._url=t,this._bounds=e.latLngBounds(i),e.setOptions(this,s)},onAdd:function(t){this._map=t,this._image||this._initImage(),t._panes.overlayPane.appendChild(this._image),t.on("viewreset",this._reset,this),t.options.zoomAnimation&&e.Browser.any3d&&t.on("zoomanim",this._animateZoom,this),this._reset()},onRemove:function(t){t.getPanes().overlayPane.removeChild(this._image),t.off("viewreset",this._reset,this),t.options.zoomAnimation&&t.off("zoomanim",this._animateZoom,this)},addTo:function(t){return t.addLayer(this),this},setOpacity:function(t){return this.options.opacity=t,this._updateOpacity(),this},bringToFront:function(){return this._image&&this._map._panes.overlayPane.appendChild(this._image),this},bringToBack:function(){var t=this._map._panes.overlayPane;return this._image&&t.insertBefore(this._image,t.firstChild),this},_initImage:function(){this._image=e.DomUtil.create("img","leaflet-image-layer"),this._map.options.zoomAnimation&&e.Browser.any3d?e.DomUtil.addClass(this._image,"leaflet-zoom-animated"):e.DomUtil.addClass(this._image,"leaflet-zoom-hide"),this._updateOpacity(),e.extend(this._image,{galleryimg:"no",onselectstart:e.Util.falseFn,onmousemove:e.Util.falseFn,onload:e.bind(this._onImageLoad,this),src:this._url})},_animateZoom:function(t){var i=this._map,s=this._image,o=i.getZoomScale(t.zoom),n=this._bounds.getNorthWest(),a=this._bounds.getSouthEast(),r=i._latLngToNewLayerPoint(n,t.zoom,t.center),h=i._latLngToNewLayerPoint(a,t.zoom,t.center)._subtract(r),l=r._add(h._multiplyBy(.5*(1-1/o)));s.style[e.DomUtil.TRANSFORM]=e.DomUtil.getTranslateString(l)+" scale("+o+") "},_reset:function(){var t=this._image,i=this._map.latLngToLayerPoint(this._bounds.getNorthWest()),s=this._map.latLngToLayerPoint(this._bounds.getSouthEast())._subtract(i);e.DomUtil.setPosition(t,i),t.style.width=s.x+"px",t.style.height=s.y+"px"},_onImageLoad:function(){this.fire("load")},_updateOpacity:function(){e.DomUtil.setOpacity(this._image,this.options.opacity)}}),e.imageOverlay=function(t,i,s){return new e.ImageOverlay(t,i,s)},e.Icon=e.Class.extend({options:{className:""},initialize:function(t){e.setOptions(this,t)},createIcon:function(){return this._createIcon("icon")},createShadow:function(){return this._createIcon("shadow")},_createIcon:function(t){var i=this._getIconUrl(t);if(!i){if("icon"===t)throw Error("iconUrl not set in Icon options (see the docs).");return null}var s=this._createImg(i);return this._setIconStyles(s,t),s},_setIconStyles:function(t,i){var s,o=this.options,n=e.point(o[i+"Size"]);s="shadow"===i?e.point(o.shadowAnchor||o.iconAnchor):e.point(o.iconAnchor),!s&&n&&(s=n.divideBy(2,!0)),t.className="leaflet-marker-"+i+" "+o.className,s&&(t.style.marginLeft=-s.x+"px",t.style.marginTop=-s.y+"px"),n&&(t.style.width=n.x+"px",t.style.height=n.y+"px")},_createImg:function(t){var s;return e.Browser.ie6?(s=i.createElement("div"),s.style.filter='progid:DXImageTransform.Microsoft.AlphaImageLoader(src="'+t+'")'):(s=i.createElement("img"),s.src=t),s},_getIconUrl:function(t){return e.Browser.retina&&this.options[t+"RetinaUrl"]?this.options[t+"RetinaUrl"]:this.options[t+"Url"]}}),e.icon=function(t){return new e.Icon(t)},e.Icon.Default=e.Icon.extend({options:{iconSize:new e.Point(25,41),iconAnchor:new e.Point(12,41),popupAnchor:new e.Point(1,-34),shadowSize:new e.Point(41,41)},_getIconUrl:function(t){var i=t+"Url";if(this.options[i])return this.options[i];e.Browser.retina&&"icon"===t&&(t+="@2x");var s=e.Icon.Default.imagePath;if(!s)throw Error("Couldn't autodetect L.Icon.Default.imagePath, set it manually.");return "marker-"+t+".png"}}),e.Icon.Default.imagePath=function(){var t,s,e,o,n=i.getElementsByTagName("script"),a=/\/?leaflet[\-\._]?([\w\-\._]*)\.js\??/;for(t=0,s=n.length;s>t;t++)if(e=n[t].src,o=e.match(a))return e.split(a)[0]+""}(),e.Marker=e.Class.extend({includes:e.Mixin.Events,options:{icon:new e.Icon.Default,title:"",clickable:!0,draggable:!1,zIndexOffset:0,opacity:1,riseOnHover:!1,riseOffset:250},initialize:function(t,i){e.setOptions(this,i),this._latlng=e.latLng(t)},onAdd:function(t){this._map=t,t.on("viewreset",this.update,this),this._initIcon(),this.update(),t.options.zoomAnimation&&t.options.markerZoomAnimation&&t.on("zoomanim",this._animateZoom,this)},addTo:function(t){return t.addLayer(this),this},onRemove:function(t){this._removeIcon(),this.fire("remove"),t.off({viewreset:this.update,zoomanim:this._animateZoom},this),this._map=null},getLatLng:function(){return this._latlng},setLatLng:function(t){return this._latlng=e.latLng(t),this.update(),this.fire("move",{latlng:this._latlng})},setZIndexOffset:function(t){return this.options.zIndexOffset=t,this.update(),this},setIcon:function(t){return this._map&&this._removeIcon(),this.options.icon=t,this._map&&(this._initIcon(),this.update()),this},update:function(){if(this._icon){var t=this._map.latLngToLayerPoint(this._latlng).round();this._setPos(t)}return this},_initIcon:function(){var t=this.options,i=this._map,s=i.options.zoomAnimation&&i.options.markerZoomAnimation,o=s?"leaflet-zoom-animated":"leaflet-zoom-hide",n=!1;this._icon||(this._icon=t.icon.createIcon(),t.title&&(this._icon.title=t.title),this._initInteraction(),n=1>this.options.opacity,e.DomUtil.addClass(this._icon,o),t.riseOnHover&&e.DomEvent.on(this._icon,"mouseover",this._bringToFront,this).on(this._icon,"mouseout",this._resetZIndex,this)),this._shadow||(this._shadow=t.icon.createShadow(),this._shadow&&(e.DomUtil.addClass(this._shadow,o),n=1>this.options.opacity)),n&&this._updateOpacity();var a=this._map._panes;a.markerPane.appendChild(this._icon),this._shadow&&a.shadowPane.appendChild(this._shadow)},_removeIcon:function(){var t=this._map._panes;this.options.riseOnHover&&e.DomEvent.off(this._icon,"mouseover",this._bringToFront).off(this._icon,"mouseout",this._resetZIndex),t.markerPane.removeChild(this._icon),this._shadow&&t.shadowPane.removeChild(this._shadow),this._icon=this._shadow=null},_setPos:function(t){e.DomUtil.setPosition(this._icon,t),this._shadow&&e.DomUtil.setPosition(this._shadow,t),this._zIndex=t.y+this.options.zIndexOffset,this._resetZIndex()},_updateZIndex:function(t){this._icon.style.zIndex=this._zIndex+t},_animateZoom:function(t){var i=this._map._latLngToNewLayerPoint(this._latlng,t.zoom,t.center);this._setPos(i)},_initInteraction:function(){if(this.options.clickable){var t=this._icon,i=["dblclick","mousedown","mouseover","mouseout","contextmenu"];e.DomUtil.addClass(t,"leaflet-clickable"),e.DomEvent.on(t,"click",this._onMouseClick,this);for(var s=0;i.length>s;s++)e.DomEvent.on(t,i[s],this._fireMouseEvent,this);e.Handler.MarkerDrag&&(this.dragging=new e.Handler.MarkerDrag(this),this.options.draggable&&this.dragging.enable())}},_onMouseClick:function(t){var i=this.dragging&&this.dragging.moved();(this.hasEventListeners(t.type)||i)&&e.DomEvent.stopPropagation(t),i||(this.dragging&&this.dragging._enabled||!this._map.dragging||!this._map.dragging.moved())&&this.fire(t.type,{originalEvent:t})},_fireMouseEvent:function(t){this.fire(t.type,{originalEvent:t}),"contextmenu"===t.type&&this.hasEventListeners(t.type)&&e.DomEvent.preventDefault(t),"mousedown"!==t.type&&e.DomEvent.stopPropagation(t)},setOpacity:function(t){this.options.opacity=t,this._map&&this._updateOpacity()},_updateOpacity:function(){e.DomUtil.setOpacity(this._icon,this.options.opacity),this._shadow&&e.DomUtil.setOpacity(this._shadow,this.options.opacity)},_bringToFront:function(){this._updateZIndex(this.options.riseOffset)},_resetZIndex:function(){this._updateZIndex(0)}}),e.marker=function(t,i){return new e.Marker(t,i)},e.DivIcon=e.Icon.extend({options:{iconSize:new e.Point(12,12),className:"leaflet-div-icon"},createIcon:function(){var t=i.createElement("div"),s=this.options;return s.html&&(t.innerHTML=s.html),s.bgPos&&(t.style.backgroundPosition=-s.bgPos.x+"px "+-s.bgPos.y+"px"),this._setIconStyles(t,"icon"),t},createShadow:function(){return null}}),e.divIcon=function(t){return new e.DivIcon(t)},e.Map.mergeOptions({closePopupOnClick:!0}),e.Popup=e.Class.extend({includes:e.Mixin.Events,options:{minWidth:50,maxWidth:300,maxHeight:null,autoPan:!0,closeButton:!0,offset:new e.Point(0,6),autoPanPadding:new e.Point(5,5),className:"",zoomAnimation:!0},initialize:function(t,i){e.setOptions(this,t),this._source=i,this._animated=e.Browser.any3d&&this.options.zoomAnimation},onAdd:function(t){this._map=t,this._container||this._initLayout(),this._updateContent();var i=t.options.fadeAnimation;i&&e.DomUtil.setOpacity(this._container,0),t._panes.popupPane.appendChild(this._container),t.on("viewreset",this._updatePosition,this),this._animated&&t.on("zoomanim",this._zoomAnimation,this),t.options.closePopupOnClick&&t.on("preclick",this._close,this),this._update(),i&&e.DomUtil.setOpacity(this._container,1)},addTo:function(t){return t.addLayer(this),this},openOn:function(t){return t.openPopup(this),this},onRemove:function(t){t._panes.popupPane.removeChild(this._container),e.Util.falseFn(this._container.offsetWidth),t.off({viewreset:this._updatePosition,preclick:this._close,zoomanim:this._zoomAnimation},this),t.options.fadeAnimation&&e.DomUtil.setOpacity(this._container,0),this._map=null},setLatLng:function(t){return this._latlng=e.latLng(t),this._update(),this},setContent:function(t){return this._content=t,this._update(),this},_close:function(){var t=this._map;t&&(t._popup=null,t.removeLayer(this).fire("popupclose",{popup:this}))},_initLayout:function(){var t,i="leaflet-popup",s=i+" "+this.options.className+" leaflet-zoom-"+(this._animated?"animated":"hide"),o=this._container=e.DomUtil.create("div",s);this.options.closeButton&&(t=this._closeButton=e.DomUtil.create("a",i+"-close-button",o),t.href="#close",t.innerHTML="×",e.DomEvent.on(t,"click",this._onCloseButtonClick,this));var n=this._wrapper=e.DomUtil.create("div",i+"-content-wrapper",o);e.DomEvent.disableClickPropagation(n),this._contentNode=e.DomUtil.create("div",i+"-content",n),e.DomEvent.on(this._contentNode,"mousewheel",e.DomEvent.stopPropagation),this._tipContainer=e.DomUtil.create("div",i+"-tip-container",o),this._tip=e.DomUtil.create("div",i+"-tip",this._tipContainer)},_update:function(){this._map&&(this._container.style.visibility="hidden",this._updateContent(),this._updateLayout(),this._updatePosition(),this._container.style.visibility="",this._adjustPan())},_updateContent:function(){if(this._content){if("string"==typeof this._content)this._contentNode.innerHTML=this._content;else{for(;this._contentNode.hasChildNodes();)this._contentNode.removeChild(this._contentNode.firstChild);this._contentNode.appendChild(this._content)}this.fire("contentupdate")}},_updateLayout:function(){var t=this._contentNode,i=t.style;i.width="",i.whiteSpace="nowrap";var s=t.offsetWidth;s=Math.min(s,this.options.maxWidth),s=Math.max(s,this.options.minWidth),i.width=s+1+"px",i.whiteSpace="",i.height="";var o=t.offsetHeight,n=this.options.maxHeight,a="leaflet-popup-scrolled";n&&o>n?(i.height=n+"px",e.DomUtil.addClass(t,a)):e.DomUtil.removeClass(t,a),this._containerWidth=this._container.offsetWidth},_updatePosition:function(){if(this._map){var t=this._map.latLngToLayerPoint(this._latlng),i=this._animated,s=this.options.offset;i&&e.DomUtil.setPosition(this._container,t),this._containerBottom=-s.y-(i?0:t.y),this._containerLeft=-Math.round(this._containerWidth/2)+s.x+(i?0:t.x),this._container.style.bottom=this._containerBottom+"px",this._container.style.left=this._containerLeft+"px"}},_zoomAnimation:function(t){var i=this._map._latLngToNewLayerPoint(this._latlng,t.zoom,t.center);e.DomUtil.setPosition(this._container,i)},_adjustPan:function(){if(this.options.autoPan){var t=this._map,i=this._container.offsetHeight,s=this._containerWidth,o=new e.Point(this._containerLeft,-i-this._containerBottom);this._animated&&o._add(e.DomUtil.getPosition(this._container));var n=t.layerPointToContainerPoint(o),a=this.options.autoPanPadding,r=t.getSize(),h=0,l=0;0>n.x&&(h=n.x-a.x),n.x+s>r.x&&(h=n.x+s-r.x+a.x),0>n.y&&(l=n.y-a.y),n.y+i>r.y&&(l=n.y+i-r.y+a.y),(h||l)&&t.panBy(new e.Point(h,l))}},_onCloseButtonClick:function(t){this._close(),e.DomEvent.stop(t)}}),e.popup=function(t,i){return new e.Popup(t,i)},e.Marker.include({openPopup:function(){return this._popup&&this._map&&(this._popup.setLatLng(this._latlng),this._map.openPopup(this._popup)),this},closePopup:function(){return this._popup&&this._popup._close(),this},bindPopup:function(t,i){var s=e.point(this.options.icon.options.popupAnchor)||new e.Point(0,0);return s=s.add(e.Popup.prototype.options.offset),i&&i.offset&&(s=s.add(i.offset)),i=e.extend({offset:s},i),this._popup||this.on("click",this.openPopup,this).on("remove",this.closePopup,this).on("move",this._movePopup,this),this._popup=new e.Popup(i,this).setContent(t),this},unbindPopup:function(){return this._popup&&(this._popup=null,this.off("click",this.openPopup).off("remove",this.closePopup).off("move",this._movePopup)),this},_movePopup:function(t){this._popup.setLatLng(t.latlng)}}),e.Map.include({openPopup:function(t){return this.closePopup(),this._popup=t,this.addLayer(t).fire("popupopen",{popup:this._popup})},closePopup:function(){return this._popup&&this._popup._close(),this}}),e.LayerGroup=e.Class.extend({initialize:function(t){this._layers={};var i,s;if(t)for(i=0,s=t.length;s>i;i++)this.addLayer(t[i])},addLayer:function(t){var i=e.stamp(t);return this._layers[i]=t,this._map&&this._map.addLayer(t),this},removeLayer:function(t){var i=e.stamp(t);return delete this._layers[i],this._map&&this._map.removeLayer(t),this},clearLayers:function(){return this.eachLayer(this.removeLayer,this),this},invoke:function(t){var i,s,e=Array.prototype.slice.call(arguments,1);for(i in this._layers)this._layers.hasOwnProperty(i)&&(s=this._layers[i],s[t]&&s[t].apply(s,e));return this},onAdd:function(t){this._map=t,this.eachLayer(t.addLayer,t)},onRemove:function(t){this.eachLayer(t.removeLayer,t),this._map=null},addTo:function(t){return t.addLayer(this),this},eachLayer:function(t,i){for(var s in this._layers)this._layers.hasOwnProperty(s)&&t.call(i,this._layers[s])},setZIndex:function(t){return this.invoke("setZIndex",t)}}),e.layerGroup=function(t){return new e.LayerGroup(t)},e.FeatureGroup=e.LayerGroup.extend({includes:e.Mixin.Events,statics:{EVENTS:"click dblclick mouseover mouseout mousemove contextmenu"},addLayer:function(t){return this._layers[e.stamp(t)]?this:(t.on(e.FeatureGroup.EVENTS,this._propagateEvent,this),e.LayerGroup.prototype.addLayer.call(this,t),this._popupContent&&t.bindPopup&&t.bindPopup(this._popupContent,this._popupOptions),this.fire("layeradd",{layer:t}))},removeLayer:function(t){return t.off(e.FeatureGroup.EVENTS,this._propagateEvent,this),e.LayerGroup.prototype.removeLayer.call(this,t),this._popupContent&&this.invoke("unbindPopup"),this.fire("layerremove",{layer:t})},bindPopup:function(t,i){return this._popupContent=t,this._popupOptions=i,this.invoke("bindPopup",t,i)},setStyle:function(t){return this.invoke("setStyle",t)},bringToFront:function(){return this.invoke("bringToFront")},bringToBack:function(){return this.invoke("bringToBack")},getBounds:function(){var t=new e.LatLngBounds;return this.eachLayer(function(i){t.extend(i instanceof e.Marker?i.getLatLng():i.getBounds())}),t},_propagateEvent:function(t){t.layer=t.target,t.target=this,this.fire(t.type,t)}}),e.featureGroup=function(t){return new e.FeatureGroup(t)},e.Path=e.Class.extend({includes:[e.Mixin.Events],statics:{CLIP_PADDING:e.Browser.mobile?Math.max(0,Math.min(.5,(1280/Math.max(t.innerWidth,t.innerHeight)-1)/2)):.5},options:{stroke:!0,color:"#0033ff",dashArray:null,weight:5,opacity:.5,fill:!1,fillColor:null,fillOpacity:.2,clickable:!0},initialize:function(t){e.setOptions(this,t)},onAdd:function(t){this._map=t,this._container||(this._initElements(),this._initEvents()),this.projectLatlngs(),this._updatePath(),this._container&&this._map._pathRoot.appendChild(this._container),this.fire("add"),t.on({viewreset:this.projectLatlngs,moveend:this._updatePath},this)},addTo:function(t){return t.addLayer(this),this},onRemove:function(t){t._pathRoot.removeChild(this._container),this.fire("remove"),this._map=null,e.Browser.vml&&(this._container=null,this._stroke=null,this._fill=null),t.off({viewreset:this.projectLatlngs,moveend:this._updatePath},this)},projectLatlngs:function(){},setStyle:function(t){return e.setOptions(this,t),this._container&&this._updateStyle(),this},redraw:function(){return this._map&&(this.projectLatlngs(),this._updatePath()),this}}),e.Map.include({_updatePathViewport:function(){var t=e.Path.CLIP_PADDING,i=this.getSize(),s=e.DomUtil.getPosition(this._mapPane),o=s.multiplyBy(-1)._subtract(i.multiplyBy(t)._round()),n=o.add(i.multiplyBy(1+2*t)._round());this._pathViewport=new e.Bounds(o,n)}}),e.Path.SVG_NS="http://www.w3.org/2000/svg",e.Browser.svg=!(!i.createElementNS||!i.createElementNS(e.Path.SVG_NS,"svg").createSVGRect),e.Path=e.Path.extend({statics:{SVG:e.Browser.svg},bringToFront:function(){var t=this._map._pathRoot,i=this._container;return i&&t.lastChild!==i&&t.appendChild(i),this},bringToBack:function(){var t=this._map._pathRoot,i=this._container,s=t.firstChild;return i&&s!==i&&t.insertBefore(i,s),this},getPathString:function(){},_createElement:function(t){return i.createElementNS(e.Path.SVG_NS,t)},_initElements:function(){this._map._initPathRoot(),this._initPath(),this._initStyle()},_initPath:function(){this._container=this._createElement("g"),this._path=this._createElement("path"),this._container.appendChild(this._path)},_initStyle:function(){this.options.stroke&&(this._path.setAttribute("stroke-linejoin","round"),this._path.setAttribute("stroke-linecap","round")),this.options.fill&&this._path.setAttribute("fill-rule","evenodd"),this._updateStyle()},_updateStyle:function(){this.options.stroke?(this._path.setAttribute("stroke",this.options.color),this._path.setAttribute("stroke-opacity",this.options.opacity),this._path.setAttribute("stroke-width",this.options.weight),this.options.dashArray?this._path.setAttribute("stroke-dasharray",this.options.dashArray):this._path.removeAttribute("stroke-dasharray")):this._path.setAttribute("stroke","none"),this.options.fill?(this._path.setAttribute("fill",this.options.fillColor||this.options.color),this._path.setAttribute("fill-opacity",this.options.fillOpacity)):this._path.setAttribute("fill","none")},_updatePath:function(){var t=this.getPathString();t||(t="M0 0"),this._path.setAttribute("d",t)},_initEvents:function(){if(this.options.clickable){(e.Browser.svg||!e.Browser.vml)&&this._path.setAttribute("class","leaflet-clickable"),e.DomEvent.on(this._container,"click",this._onMouseClick,this);for(var t=["dblclick","mousedown","mouseover","mouseout","mousemove","contextmenu"],i=0;t.length>i;i++)e.DomEvent.on(this._container,t[i],this._fireMouseEvent,this)}},_onMouseClick:function(t){this._map.dragging&&this._map.dragging.moved()||this._fireMouseEvent(t)},_fireMouseEvent:function(t){if(this.hasEventListeners(t.type)){var i=this._map,s=i.mouseEventToContainerPoint(t),o=i.containerPointToLayerPoint(s),n=i.layerPointToLatLng(o);this.fire(t.type,{latlng:n,layerPoint:o,containerPoint:s,originalEvent:t}),"contextmenu"===t.type&&e.DomEvent.preventDefault(t),"mousemove"!==t.type&&e.DomEvent.stopPropagation(t)}}}),e.Map.include({_initPathRoot:function(){this._pathRoot||(this._pathRoot=e.Path.prototype._createElement("svg"),this._panes.overlayPane.appendChild(this._pathRoot),this.options.zoomAnimation&&e.Browser.any3d?(this._pathRoot.setAttribute("class"," leaflet-zoom-animated"),this.on({zoomanim:this._animatePathZoom,zoomend:this._endPathZoom})):this._pathRoot.setAttribute("class"," leaflet-zoom-hide"),this.on("moveend",this._updateSvgViewport),this._updateSvgViewport())},_animatePathZoom:function(t){var i=this.getZoomScale(t.zoom),s=this._getCenterOffset(t.center)._multiplyBy(-i)._add(this._pathViewport.min);this._pathRoot.style[e.DomUtil.TRANSFORM]=e.DomUtil.getTranslateString(s)+" scale("+i+") ",this._pathZooming=!0},_endPathZoom:function(){this._pathZooming=!1},_updateSvgViewport:function(){if(!this._pathZooming){this._updatePathViewport();var t=this._pathViewport,i=t.min,s=t.max,o=s.x-i.x,n=s.y-i.y,a=this._pathRoot,r=this._panes.overlayPane;e.Browser.mobileWebkit&&r.removeChild(a),e.DomUtil.setPosition(a,i),a.setAttribute("width",o),a.setAttribute("height",n),a.setAttribute("viewBox",[i.x,i.y,o,n].join(" ")),e.Browser.mobileWebkit&&r.appendChild(a)}}}),e.Path.include({bindPopup:function(t,i){return(!this._popup||i)&&(this._popup=new e.Popup(i,this)),this._popup.setContent(t),this._popupHandlersAdded||(this.on("click",this._openPopup,this).on("remove",this.closePopup,this),this._popupHandlersAdded=!0),this},unbindPopup:function(){return this._popup&&(this._popup=null,this.off("click",this._openPopup).off("remove",this.closePopup),this._popupHandlersAdded=!1),this},openPopup:function(t){return this._popup&&(t=t||this._latlng||this._latlngs[Math.floor(this._latlngs.length/2)],this._openPopup({latlng:t})),this},closePopup:function(){return this._popup&&this._popup._close(),this},_openPopup:function(t){this._popup.setLatLng(t.latlng),this._map.openPopup(this._popup)}}),e.Browser.vml=!e.Browser.svg&&function(){try{var t=i.createElement("div");t.innerHTML='';var s=t.firstChild;return s.style.behavior="url(#default#VML)",s&&"object"==typeof s.adj}catch(e){return!1}}(),e.Path=e.Browser.svg||!e.Browser.vml?e.Path:e.Path.extend({statics:{VML:!0,CLIP_PADDING:.02},_createElement:function(){try{return i.namespaces.add("lvml","urn:schemas-microsoft-com:vml"),function(t){return i.createElement("')}}catch(t){return function(t){return i.createElement("<"+t+' xmlns="urn:schemas-microsoft.com:vml" class="lvml">')}}}(),_initPath:function(){var t=this._container=this._createElement("shape");e.DomUtil.addClass(t,"leaflet-vml-shape"),this.options.clickable&&e.DomUtil.addClass(t,"leaflet-clickable"),t.coordsize="1 1",this._path=this._createElement("path"),t.appendChild(this._path),this._map._pathRoot.appendChild(t)},_initStyle:function(){this._updateStyle()},_updateStyle:function(){var t=this._stroke,i=this._fill,s=this.options,e=this._container;e.stroked=s.stroke,e.filled=s.fill,s.stroke?(t||(t=this._stroke=this._createElement("stroke"),t.endcap="round",e.appendChild(t)),t.weight=s.weight+"px",t.color=s.color,t.opacity=s.opacity,t.dashStyle=s.dashArray?s.dashArray instanceof Array?s.dashArray.join(" "):s.dashArray.replace(/ *, */g," "):""):t&&(e.removeChild(t),this._stroke=null),s.fill?(i||(i=this._fill=this._createElement("fill"),e.appendChild(i)),i.color=s.fillColor||s.color,i.opacity=s.fillOpacity):i&&(e.removeChild(i),this._fill=null)},_updatePath:function(){var t=this._container.style;t.display="none",this._path.v=this.getPathString()+" ",t.display=""}}),e.Map.include(e.Browser.svg||!e.Browser.vml?{}:{_initPathRoot:function(){if(!this._pathRoot){var t=this._pathRoot=i.createElement("div");t.className="leaflet-vml-container",this._panes.overlayPane.appendChild(t),this.on("moveend",this._updatePathViewport),this._updatePathViewport()}}}),e.Browser.canvas=function(){return!!i.createElement("canvas").getContext}(),e.Path=e.Path.SVG&&!t.L_PREFER_CANVAS||!e.Browser.canvas?e.Path:e.Path.extend({statics:{CANVAS:!0,SVG:!1},redraw:function(){return this._map&&(this.projectLatlngs(),this._requestUpdate()),this},setStyle:function(t){return e.setOptions(this,t),this._map&&(this._updateStyle(),this._requestUpdate()),this},onRemove:function(t){t.off("viewreset",this.projectLatlngs,this).off("moveend",this._updatePath,this),this.options.clickable&&this._map.off("click",this._onClick,this),this._requestUpdate(),this._map=null},_requestUpdate:function(){this._map&&!e.Path._updateRequest&&(e.Path._updateRequest=e.Util.requestAnimFrame(this._fireMapMoveEnd,this._map))},_fireMapMoveEnd:function(){e.Path._updateRequest=null,this.fire("moveend")},_initElements:function(){this._map._initPathRoot(),this._ctx=this._map._canvasCtx},_updateStyle:function(){var t=this.options;t.stroke&&(this._ctx.lineWidth=t.weight,this._ctx.strokeStyle=t.color),t.fill&&(this._ctx.fillStyle=t.fillColor||t.color)},_drawPath:function(){var t,i,s,o,n,a;for(this._ctx.beginPath(),t=0,s=this._parts.length;s>t;t++){for(i=0,o=this._parts[t].length;o>i;i++)n=this._parts[t][i],a=(0===i?"move":"line")+"To",this._ctx[a](n.x,n.y);this instanceof e.Polygon&&this._ctx.closePath()}},_checkIfEmpty:function(){return!this._parts.length},_updatePath:function(){if(!this._checkIfEmpty()){var t=this._ctx,i=this.options;this._drawPath(),t.save(),this._updateStyle(),i.fill&&(t.globalAlpha=i.fillOpacity,t.fill()),i.stroke&&(t.globalAlpha=i.opacity,t.stroke()),t.restore() +}},_initEvents:function(){this.options.clickable&&this._map.on("click",this._onClick,this)},_onClick:function(t){this._containsPoint(t.layerPoint)&&this.fire("click",{latlng:t.latlng,layerPoint:t.layerPoint,containerPoint:t.containerPoint,originalEvent:t})}}),e.Map.include(e.Path.SVG&&!t.L_PREFER_CANVAS||!e.Browser.canvas?{}:{_initPathRoot:function(){var t,s=this._pathRoot;s||(s=this._pathRoot=i.createElement("canvas"),s.style.position="absolute",t=this._canvasCtx=s.getContext("2d"),t.lineCap="round",t.lineJoin="round",this._panes.overlayPane.appendChild(s),this.options.zoomAnimation&&(this._pathRoot.className="leaflet-zoom-animated",this.on("zoomanim",this._animatePathZoom),this.on("zoomend",this._endPathZoom)),this.on("moveend",this._updateCanvasViewport),this._updateCanvasViewport())},_updateCanvasViewport:function(){if(!this._pathZooming){this._updatePathViewport();var t=this._pathViewport,i=t.min,s=t.max.subtract(i),o=this._pathRoot;e.DomUtil.setPosition(o,i),o.width=s.x,o.height=s.y,o.getContext("2d").translate(-i.x,-i.y)}}}),e.LineUtil={simplify:function(t,i){if(!i||!t.length)return t.slice();var s=i*i;return t=this._reducePoints(t,s),t=this._simplifyDP(t,s)},pointToSegmentDistance:function(t,i,s){return Math.sqrt(this._sqClosestPointOnSegment(t,i,s,!0))},closestPointOnSegment:function(t,i,s){return this._sqClosestPointOnSegment(t,i,s)},_simplifyDP:function(t,i){var e=t.length,o=typeof Uint8Array!=s+""?Uint8Array:Array,n=new o(e);n[0]=n[e-1]=1,this._simplifyDPStep(t,n,i,0,e-1);var a,r=[];for(a=0;e>a;a++)n[a]&&r.push(t[a]);return r},_simplifyDPStep:function(t,i,s,e,o){var n,a,r,h=0;for(a=e+1;o-1>=a;a++)r=this._sqClosestPointOnSegment(t[a],t[e],t[o],!0),r>h&&(n=a,h=r);h>s&&(i[n]=1,this._simplifyDPStep(t,i,s,e,n),this._simplifyDPStep(t,i,s,n,o))},_reducePoints:function(t,i){for(var s=[t[0]],e=1,o=0,n=t.length;n>e;e++)this._sqDist(t[e],t[o])>i&&(s.push(t[e]),o=e);return n-1>o&&s.push(t[n-1]),s},clipSegment:function(t,i,s,e){var o,n,a,r=e?this._lastCode:this._getBitCode(t,s),h=this._getBitCode(i,s);for(this._lastCode=h;;){if(!(r|h))return[t,i];if(r&h)return!1;o=r||h,n=this._getEdgeIntersection(t,i,o,s),a=this._getBitCode(n,s),o===r?(t=n,r=a):(i=n,h=a)}},_getEdgeIntersection:function(t,i,o,n){var a=i.x-t.x,r=i.y-t.y,h=n.min,l=n.max;return 8&o?new e.Point(t.x+a*(l.y-t.y)/r,l.y):4&o?new e.Point(t.x+a*(h.y-t.y)/r,h.y):2&o?new e.Point(l.x,t.y+r*(l.x-t.x)/a):1&o?new e.Point(h.x,t.y+r*(h.x-t.x)/a):s},_getBitCode:function(t,i){var s=0;return t.xi.max.x&&(s|=2),t.yi.max.y&&(s|=8),s},_sqDist:function(t,i){var s=i.x-t.x,e=i.y-t.y;return s*s+e*e},_sqClosestPointOnSegment:function(t,i,s,o){var n,a=i.x,r=i.y,h=s.x-a,l=s.y-r,c=h*h+l*l;return c>0&&(n=((t.x-a)*h+(t.y-r)*l)/c,n>1?(a=s.x,r=s.y):n>0&&(a+=h*n,r+=l*n)),h=t.x-a,l=t.y-r,o?h*h+l*l:new e.Point(a,r)}},e.Polyline=e.Path.extend({initialize:function(t,i){e.Path.prototype.initialize.call(this,i),this._latlngs=this._convertLatLngs(t)},options:{smoothFactor:1,noClip:!1},projectLatlngs:function(){this._originalPoints=[];for(var t=0,i=this._latlngs.length;i>t;t++)this._originalPoints[t]=this._map.latLngToLayerPoint(this._latlngs[t])},getPathString:function(){for(var t=0,i=this._parts.length,s="";i>t;t++)s+=this._getPathPartStr(this._parts[t]);return s},getLatLngs:function(){return this._latlngs},setLatLngs:function(t){return this._latlngs=this._convertLatLngs(t),this.redraw()},addLatLng:function(t){return this._latlngs.push(e.latLng(t)),this.redraw()},spliceLatLngs:function(){var t=[].splice.apply(this._latlngs,arguments);return this._convertLatLngs(this._latlngs),this.redraw(),t},closestLayerPoint:function(t){for(var i,s,o=1/0,n=this._parts,a=null,r=0,h=n.length;h>r;r++)for(var l=n[r],c=1,m=l.length;m>c;c++){i=l[c-1],s=l[c];var u=e.LineUtil._sqClosestPointOnSegment(t,i,s,!0);o>u&&(o=u,a=e.LineUtil._sqClosestPointOnSegment(t,i,s))}return a&&(a.distance=Math.sqrt(o)),a},getBounds:function(){var t,i,s=new e.LatLngBounds,o=this.getLatLngs();for(t=0,i=o.length;i>t;t++)s.extend(o[t]);return s},_convertLatLngs:function(t){var i,s;for(i=0,s=t.length;s>i;i++){if(e.Util.isArray(t[i])&&"number"!=typeof t[i][0])return;t[i]=e.latLng(t[i])}return t},_initEvents:function(){e.Path.prototype._initEvents.call(this)},_getPathPartStr:function(t){for(var i,s=e.Path.VML,o=0,n=t.length,a="";n>o;o++)i=t[o],s&&i._round(),a+=(o?"L":"M")+i.x+" "+i.y;return a},_clipPoints:function(){var t,i,o,n=this._originalPoints,a=n.length;if(this.options.noClip)return this._parts=[n],s;this._parts=[];var r=this._parts,h=this._map._pathViewport,l=e.LineUtil;for(t=0,i=0;a-1>t;t++)o=l.clipSegment(n[t],n[t+1],h,t),o&&(r[i]=r[i]||[],r[i].push(o[0]),(o[1]!==n[t+1]||t===a-2)&&(r[i].push(o[1]),i++))},_simplifyPoints:function(){for(var t=this._parts,i=e.LineUtil,s=0,o=t.length;o>s;s++)t[s]=i.simplify(t[s],this.options.smoothFactor)},_updatePath:function(){this._map&&(this._clipPoints(),this._simplifyPoints(),e.Path.prototype._updatePath.call(this))}}),e.polyline=function(t,i){return new e.Polyline(t,i)},e.PolyUtil={},e.PolyUtil.clipPolygon=function(t,i){var s,o,n,a,r,h,l,c,m,u=[1,4,2,8],d=e.LineUtil;for(o=0,l=t.length;l>o;o++)t[o]._code=d._getBitCode(t[o],i);for(a=0;4>a;a++){for(c=u[a],s=[],o=0,l=t.length,n=l-1;l>o;n=o++)r=t[o],h=t[n],r._code&c?h._code&c||(m=d._getEdgeIntersection(h,r,c,i),m._code=d._getBitCode(m,i),s.push(m)):(h._code&c&&(m=d._getEdgeIntersection(h,r,c,i),m._code=d._getBitCode(m,i),s.push(m)),s.push(r));t=s}return t},e.Polygon=e.Polyline.extend({options:{fill:!0},initialize:function(t,i){e.Polyline.prototype.initialize.call(this,t,i),t&&e.Util.isArray(t[0])&&"number"!=typeof t[0][0]&&(this._latlngs=this._convertLatLngs(t[0]),this._holes=t.slice(1))},projectLatlngs:function(){if(e.Polyline.prototype.projectLatlngs.call(this),this._holePoints=[],this._holes){var t,i,s,o;for(t=0,s=this._holes.length;s>t;t++)for(this._holePoints[t]=[],i=0,o=this._holes[t].length;o>i;i++)this._holePoints[t][i]=this._map.latLngToLayerPoint(this._holes[t][i])}},_clipPoints:function(){var t=this._originalPoints,i=[];if(this._parts=[t].concat(this._holePoints),!this.options.noClip){for(var s=0,o=this._parts.length;o>s;s++){var n=e.PolyUtil.clipPolygon(this._parts[s],this._map._pathViewport);n.length&&i.push(n)}this._parts=i}},_getPathPartStr:function(t){var i=e.Polyline.prototype._getPathPartStr.call(this,t);return i+(e.Browser.svg?"z":"x")}}),e.polygon=function(t,i){return new e.Polygon(t,i)},function(){function t(t){return e.FeatureGroup.extend({initialize:function(t,i){this._layers={},this._options=i,this.setLatLngs(t)},setLatLngs:function(i){var s=0,e=i.length;for(this.eachLayer(function(t){e>s?t.setLatLngs(i[s++]):this.removeLayer(t)},this);e>s;)this.addLayer(new t(i[s++],this._options));return this}})}e.MultiPolyline=t(e.Polyline),e.MultiPolygon=t(e.Polygon),e.multiPolyline=function(t,i){return new e.MultiPolyline(t,i)},e.multiPolygon=function(t,i){return new e.MultiPolygon(t,i)}}(),e.Rectangle=e.Polygon.extend({initialize:function(t,i){e.Polygon.prototype.initialize.call(this,this._boundsToLatLngs(t),i)},setBounds:function(t){this.setLatLngs(this._boundsToLatLngs(t))},_boundsToLatLngs:function(t){return t=e.latLngBounds(t),[t.getSouthWest(),t.getNorthWest(),t.getNorthEast(),t.getSouthEast()]}}),e.rectangle=function(t,i){return new e.Rectangle(t,i)},e.Circle=e.Path.extend({initialize:function(t,i,s){e.Path.prototype.initialize.call(this,s),this._latlng=e.latLng(t),this._mRadius=i},options:{fill:!0},setLatLng:function(t){return this._latlng=e.latLng(t),this.redraw()},setRadius:function(t){return this._mRadius=t,this.redraw()},projectLatlngs:function(){var t=this._getLngRadius(),i=new e.LatLng(this._latlng.lat,this._latlng.lng-t),s=this._map.latLngToLayerPoint(i);this._point=this._map.latLngToLayerPoint(this._latlng),this._radius=Math.max(Math.round(this._point.x-s.x),1)},getBounds:function(){var t=this._getLngRadius(),i=360*(this._mRadius/40075017),s=this._latlng,o=new e.LatLng(s.lat-i,s.lng-t),n=new e.LatLng(s.lat+i,s.lng+t);return new e.LatLngBounds(o,n)},getLatLng:function(){return this._latlng},getPathString:function(){var t=this._point,i=this._radius;return this._checkIfEmpty()?"":e.Browser.svg?"M"+t.x+","+(t.y-i)+"A"+i+","+i+",0,1,1,"+(t.x-.1)+","+(t.y-i)+" z":(t._round(),i=Math.round(i),"AL "+t.x+","+t.y+" "+i+","+i+" 0,"+23592600)},getRadius:function(){return this._mRadius},_getLatRadius:function(){return 360*(this._mRadius/40075017)},_getLngRadius:function(){return this._getLatRadius()/Math.cos(e.LatLng.DEG_TO_RAD*this._latlng.lat)},_checkIfEmpty:function(){if(!this._map)return!1;var t=this._map._pathViewport,i=this._radius,s=this._point;return s.x-i>t.max.x||s.y-i>t.max.y||s.x+is;s++)for(l=this._parts[s],o=0,r=l.length,n=r-1;r>o;n=o++)if((i||0!==o)&&(h=e.LineUtil.pointToSegmentDistance(t,l[n],l[o]),c>=h))return!0;return!1}}:{}),e.Polygon.include(e.Path.CANVAS?{_containsPoint:function(t){var i,s,o,n,a,r,h,l,c=!1;if(e.Polyline.prototype._containsPoint.call(this,t,!0))return!0;for(n=0,h=this._parts.length;h>n;n++)for(i=this._parts[n],a=0,l=i.length,r=l-1;l>a;r=a++)s=i[a],o=i[r],s.y>t.y!=o.y>t.y&&t.x<(o.x-s.x)*(t.y-s.y)/(o.y-s.y)+s.x&&(c=!c);return c}}:{}),e.Circle.include(e.Path.CANVAS?{_drawPath:function(){var t=this._point;this._ctx.beginPath(),this._ctx.arc(t.x,t.y,this._radius,0,2*Math.PI,!1)},_containsPoint:function(t){var i=this._point,s=this.options.stroke?this.options.weight/2:0;return t.distanceTo(i)<=this._radius+s}}:{}),e.GeoJSON=e.FeatureGroup.extend({initialize:function(t,i){e.setOptions(this,i),this._layers={},t&&this.addData(t)},addData:function(t){var i,s,o=e.Util.isArray(t)?t:t.features;if(o){for(i=0,s=o.length;s>i;i++)(o[i].geometries||o[i].geometry||o[i].features)&&this.addData(o[i]);return this}var n=this.options;if(!n.filter||n.filter(t)){var a=e.GeoJSON.geometryToLayer(t,n.pointToLayer);return a.feature=t,a.defaultOptions=a.options,this.resetStyle(a),n.onEachFeature&&n.onEachFeature(t,a),this.addLayer(a)}},resetStyle:function(t){var i=this.options.style;i&&(e.Util.extend(t.options,t.defaultOptions),this._setLayerStyle(t,i))},setStyle:function(t){this.eachLayer(function(i){this._setLayerStyle(i,t)},this)},_setLayerStyle:function(t,i){"function"==typeof i&&(i=i(t.feature)),t.setStyle&&t.setStyle(i)}}),e.extend(e.GeoJSON,{geometryToLayer:function(t,i){var s,o,n,a,r,h="Feature"===t.type?t.geometry:t,l=h.coordinates,c=[];switch(h.type){case"Point":return s=this.coordsToLatLng(l),i?i(t,s):new e.Marker(s);case"MultiPoint":for(n=0,a=l.length;a>n;n++)s=this.coordsToLatLng(l[n]),r=i?i(t,s):new e.Marker(s),c.push(r);return new e.FeatureGroup(c);case"LineString":return o=this.coordsToLatLngs(l),new e.Polyline(o);case"Polygon":return o=this.coordsToLatLngs(l,1),new e.Polygon(o);case"MultiLineString":return o=this.coordsToLatLngs(l,1),new e.MultiPolyline(o);case"MultiPolygon":return o=this.coordsToLatLngs(l,2),new e.MultiPolygon(o);case"GeometryCollection":for(n=0,a=h.geometries.length;a>n;n++)r=this.geometryToLayer({geometry:h.geometries[n],type:"Feature",properties:t.properties},i),c.push(r);return new e.FeatureGroup(c);default:throw Error("Invalid GeoJSON object.")}},coordsToLatLng:function(t,i){var s=parseFloat(t[i?0:1]),o=parseFloat(t[i?1:0]);return new e.LatLng(s,o)},coordsToLatLngs:function(t,i,s){var e,o,n,a=[];for(o=0,n=t.length;n>o;o++)e=i?this.coordsToLatLngs(t[o],i-1,s):this.coordsToLatLng(t[o],s),a.push(e);return a}}),e.geoJson=function(t,i){return new e.GeoJSON(t,i)},e.DomEvent={addListener:function(t,i,o,n){var a,r,h,l=e.stamp(o),c="_leaflet_"+i+l;return t[c]?this:(a=function(i){return o.call(n||t,i||e.DomEvent._getEvent())},e.Browser.msTouch&&0===i.indexOf("touch")?this.addMsTouchListener(t,i,a,l):(e.Browser.touch&&"dblclick"===i&&this.addDoubleTapListener&&this.addDoubleTapListener(t,a,l),"addEventListener"in t?"mousewheel"===i?(t.addEventListener("DOMMouseScroll",a,!1),t.addEventListener(i,a,!1)):"mouseenter"===i||"mouseleave"===i?(r=a,h="mouseenter"===i?"mouseover":"mouseout",a=function(i){return e.DomEvent._checkMouse(t,i)?r(i):s},t.addEventListener(h,a,!1)):t.addEventListener(i,a,!1):"attachEvent"in t&&t.attachEvent("on"+i,a),t[c]=a,this))},removeListener:function(t,i,s){var o=e.stamp(s),n="_leaflet_"+i+o,a=t[n];if(a)return e.Browser.msTouch&&0===i.indexOf("touch")?this.removeMsTouchListener(t,i,o):e.Browser.touch&&"dblclick"===i&&this.removeDoubleTapListener?this.removeDoubleTapListener(t,o):"removeEventListener"in t?"mousewheel"===i?(t.removeEventListener("DOMMouseScroll",a,!1),t.removeEventListener(i,a,!1)):"mouseenter"===i||"mouseleave"===i?t.removeEventListener("mouseenter"===i?"mouseover":"mouseout",a,!1):t.removeEventListener(i,a,!1):"detachEvent"in t&&t.detachEvent("on"+i,a),t[n]=null,this},stopPropagation:function(t){return t.stopPropagation?t.stopPropagation():t.cancelBubble=!0,this},disableClickPropagation:function(t){for(var i=e.DomEvent.stopPropagation,s=e.Draggable.START.length-1;s>=0;s--)e.DomEvent.addListener(t,e.Draggable.START[s],i);return e.DomEvent.addListener(t,"click",i).addListener(t,"dblclick",i)},preventDefault:function(t){return t.preventDefault?t.preventDefault():t.returnValue=!1,this},stop:function(t){return e.DomEvent.preventDefault(t).stopPropagation(t)},getMousePosition:function(t,s){var o=i.body,n=i.documentElement,a=t.pageX?t.pageX:t.clientX+o.scrollLeft+n.scrollLeft,r=t.pageY?t.pageY:t.clientY+o.scrollTop+n.scrollTop,h=new e.Point(a,r);return s?h._subtract(e.DomUtil.getViewportOffset(s)):h},getWheelDelta:function(t){var i=0;return t.wheelDelta&&(i=t.wheelDelta/120),t.detail&&(i=-t.detail/3),i},_checkMouse:function(t,i){var s=i.relatedTarget;if(!s)return!0;try{for(;s&&s!==t;)s=s.parentNode}catch(e){return!1}return s!==t},_getEvent:function(){var i=t.event;if(!i)for(var s=arguments.callee.caller;s&&(i=s.arguments[0],!i||t.Event!==i.constructor);)s=s.caller;return i}},e.DomEvent.on=e.DomEvent.addListener,e.DomEvent.off=e.DomEvent.removeListener,e.Draggable=e.Class.extend({includes:e.Mixin.Events,statics:{START:e.Browser.touch?["touchstart","mousedown"]:["mousedown"],END:{mousedown:"mouseup",touchstart:"touchend",MSPointerDown:"touchend"},MOVE:{mousedown:"mousemove",touchstart:"touchmove",MSPointerDown:"touchmove"},TAP_TOLERANCE:15},initialize:function(t,i,s){this._element=t,this._dragStartTarget=i||t,this._longPress=s&&!e.Browser.msTouch},enable:function(){if(!this._enabled){for(var t=e.Draggable.START.length-1;t>=0;t--)e.DomEvent.on(this._dragStartTarget,e.Draggable.START[t],this._onDown,this);this._enabled=!0}},disable:function(){if(this._enabled){for(var t=e.Draggable.START.length-1;t>=0;t--)e.DomEvent.off(this._dragStartTarget,e.Draggable.START[t],this._onDown,this);this._enabled=!1,this._moved=!1}},_onDown:function(t){if(!(!e.Browser.touch&&t.shiftKey||1!==t.which&&1!==t.button&&!t.touches||(e.DomEvent.preventDefault(t),e.DomEvent.stopPropagation(t),e.Draggable._disabled))){if(this._simulateClick=!0,t.touches&&t.touches.length>1)return this._simulateClick=!1,clearTimeout(this._longPressTimeout),s;var o=t.touches&&1===t.touches.length?t.touches[0]:t,n=o.target;e.Browser.touch&&"a"===n.tagName.toLowerCase()&&e.DomUtil.addClass(n,"leaflet-active"),this._moved=!1,this._moving||(this._startPoint=new e.Point(o.clientX,o.clientY),this._startPos=this._newPos=e.DomUtil.getPosition(this._element),t.touches&&1===t.touches.length&&e.Browser.touch&&this._longPress&&(this._longPressTimeout=setTimeout(e.bind(function(){var t=this._newPos&&this._newPos.distanceTo(this._startPos)||0;e.Draggable.TAP_TOLERANCE>t&&(this._simulateClick=!1,this._onUp(),this._simulateEvent("contextmenu",o))},this),1e3)),e.DomEvent.on(i,e.Draggable.MOVE[t.type],this._onMove,this),e.DomEvent.on(i,e.Draggable.END[t.type],this._onUp,this))}},_onMove:function(t){if(!(t.touches&&t.touches.length>1)){var i=t.touches&&1===t.touches.length?t.touches[0]:t,s=new e.Point(i.clientX,i.clientY),o=s.subtract(this._startPoint);(o.x||o.y)&&(e.DomEvent.preventDefault(t),this._moved||(this.fire("dragstart"),this._moved=!0,this._startPos=e.DomUtil.getPosition(this._element).subtract(o),e.Browser.touch||(e.DomUtil.disableTextSelection(),this._setMovingCursor())),this._newPos=this._startPos.add(o),this._moving=!0,e.Util.cancelAnimFrame(this._animRequest),this._animRequest=e.Util.requestAnimFrame(this._updatePosition,this,!0,this._dragStartTarget))}},_updatePosition:function(){this.fire("predrag"),e.DomUtil.setPosition(this._element,this._newPos),this.fire("drag")},_onUp:function(t){var s;if(clearTimeout(this._longPressTimeout),this._simulateClick&&t.changedTouches){var o=t.changedTouches[0],n=o.target,a=this._newPos&&this._newPos.distanceTo(this._startPos)||0;"a"===n.tagName.toLowerCase()&&e.DomUtil.removeClass(n,"leaflet-active"),e.Draggable.TAP_TOLERANCE>a&&(s=o)}e.Browser.touch||(e.DomUtil.enableTextSelection(),this._restoreCursor());for(var r in e.Draggable.MOVE)e.Draggable.MOVE.hasOwnProperty(r)&&(e.DomEvent.off(i,e.Draggable.MOVE[r],this._onMove),e.DomEvent.off(i,e.Draggable.END[r],this._onUp));this._moved&&(e.Util.cancelAnimFrame(this._animRequest),this.fire("dragend")),this._moving=!1,s&&(this._moved=!1,this._simulateEvent("click",s))},_setMovingCursor:function(){e.DomUtil.addClass(i.body,"leaflet-dragging")},_restoreCursor:function(){e.DomUtil.removeClass(i.body,"leaflet-dragging")},_simulateEvent:function(s,e){var o=i.createEvent("MouseEvents");o.initMouseEvent(s,!0,!0,t,1,e.screenX,e.screenY,e.clientX,e.clientY,!1,!1,!1,!1,0,null),e.target.dispatchEvent(o)}}),e.Handler=e.Class.extend({initialize:function(t){this._map=t},enable:function(){this._enabled||(this._enabled=!0,this.addHooks())},disable:function(){this._enabled&&(this._enabled=!1,this.removeHooks())},enabled:function(){return!!this._enabled}}),e.Map.mergeOptions({dragging:!0,inertia:!e.Browser.android23,inertiaDeceleration:3400,inertiaMaxSpeed:1/0,inertiaThreshold:e.Browser.touch?32:18,easeLinearity:.25,longPress:!0,worldCopyJump:!1}),e.Map.Drag=e.Handler.extend({addHooks:function(){if(!this._draggable){var t=this._map;this._draggable=new e.Draggable(t._mapPane,t._container,t.options.longPress),this._draggable.on({dragstart:this._onDragStart,drag:this._onDrag,dragend:this._onDragEnd},this),t.options.worldCopyJump&&(this._draggable.on("predrag",this._onPreDrag,this),t.on("viewreset",this._onViewReset,this))}this._draggable.enable()},removeHooks:function(){this._draggable.disable()},moved:function(){return this._draggable&&this._draggable._moved},_onDragStart:function(){var t=this._map;t._panAnim&&t._panAnim.stop(),t.fire("movestart").fire("dragstart"),t.options.inertia&&(this._positions=[],this._times=[])},_onDrag:function(){if(this._map.options.inertia){var t=this._lastTime=+new Date,i=this._lastPos=this._draggable._newPos;this._positions.push(i),this._times.push(t),t-this._times[0]>200&&(this._positions.shift(),this._times.shift())}this._map.fire("move").fire("drag")},_onViewReset:function(){var t=this._map.getSize()._divideBy(2),i=this._map.latLngToLayerPoint(new e.LatLng(0,0));this._initialWorldOffset=i.subtract(t).x,this._worldWidth=this._map.project(new e.LatLng(0,180)).x},_onPreDrag:function(){var t=this._worldWidth,i=Math.round(t/2),s=this._initialWorldOffset,e=this._draggable._newPos.x,o=(e-i+s)%t+i-s,n=(e+i+s)%t-i-s,a=Math.abs(o+s)i.inertiaThreshold||!this._positions[0];if(o)t.fire("moveend");else{var n=this._lastPos.subtract(this._positions[0]),a=(this._lastTime+s-this._times[0])/1e3,r=i.easeLinearity,h=n.multiplyBy(r/a),l=h.distanceTo(new e.Point(0,0)),c=Math.min(i.inertiaMaxSpeed,l),m=h.multiplyBy(c/l),u=c/(i.inertiaDeceleration*r),d=m.multiplyBy(-u/2).round();e.Util.requestAnimFrame(function(){t.panBy(d,u,r)})}t.fire("dragend"),i.maxBounds&&e.Util.requestAnimFrame(this._panInsideMaxBounds,t,!0,t._container)},_panInsideMaxBounds:function(){this.panInsideBounds(this.options.maxBounds)}}),e.Map.addInitHook("addHandler","dragging",e.Map.Drag),e.Map.mergeOptions({doubleClickZoom:!0}),e.Map.DoubleClickZoom=e.Handler.extend({addHooks:function(){this._map.on("dblclick",this._onDoubleClick)},removeHooks:function(){this._map.off("dblclick",this._onDoubleClick)},_onDoubleClick:function(t){this.setView(t.latlng,this._zoom+1)}}),e.Map.addInitHook("addHandler","doubleClickZoom",e.Map.DoubleClickZoom),e.Map.mergeOptions({scrollWheelZoom:!0}),e.Map.ScrollWheelZoom=e.Handler.extend({addHooks:function(){e.DomEvent.on(this._map._container,"mousewheel",this._onWheelScroll,this),this._delta=0},removeHooks:function(){e.DomEvent.off(this._map._container,"mousewheel",this._onWheelScroll)},_onWheelScroll:function(t){var i=e.DomEvent.getWheelDelta(t);this._delta+=i,this._lastMousePos=this._map.mouseEventToContainerPoint(t),this._startTime||(this._startTime=+new Date);var s=Math.max(40-(+new Date-this._startTime),0);clearTimeout(this._timer),this._timer=setTimeout(e.bind(this._performZoom,this),s),e.DomEvent.preventDefault(t),e.DomEvent.stopPropagation(t)},_performZoom:function(){var t=this._map,i=this._delta,s=t.getZoom();if(i=i>0?Math.ceil(i):Math.round(i),i=Math.max(Math.min(i,4),-4),i=t._limitZoom(s+i)-s,this._delta=0,this._startTime=null,i){var e=s+i,o=this._getCenterForScrollWheelZoom(e);t.setView(o,e)}},_getCenterForScrollWheelZoom:function(t){var i=this._map,s=i.getZoomScale(t),e=i.getSize()._divideBy(2),o=this._lastMousePos._subtract(e)._multiplyBy(1-1/s),n=i._getTopLeftPoint()._add(e)._add(o);return i.unproject(n)}}),e.Map.addInitHook("addHandler","scrollWheelZoom",e.Map.ScrollWheelZoom),e.extend(e.DomEvent,{_touchstart:e.Browser.msTouch?"MSPointerDown":"touchstart",_touchend:e.Browser.msTouch?"MSPointerUp":"touchend",addDoubleTapListener:function(t,s,o){function n(t){var i;if(e.Browser.msTouch?(p.push(t.pointerId),i=p.length):i=t.touches.length,!(i>1)){var s=Date.now(),o=s-(r||s);h=t.touches?t.touches[0]:t,l=o>0&&c>=o,r=s}}function a(t){if(e.Browser.msTouch){var i=p.indexOf(t.pointerId);if(-1===i)return;p.splice(i,1)}if(l){if(e.Browser.msTouch){var o,n={};for(var a in h)o=h[a],n[a]="function"==typeof o?o.bind(h):o;h=n}h.type="dblclick",s(h),r=null}}var r,h,l=!1,c=250,m="_leaflet_",u=this._touchstart,d=this._touchend,p=[];t[m+u+o]=n,t[m+d+o]=a;var _=e.Browser.msTouch?i.documentElement:t;return t.addEventListener(u,n,!1),_.addEventListener(d,a,!1),e.Browser.msTouch&&_.addEventListener("MSPointerCancel",a,!1),this},removeDoubleTapListener:function(t,s){var o="_leaflet_";return t.removeEventListener(this._touchstart,t[o+this._touchstart+s],!1),(e.Browser.msTouch?i.documentElement:t).removeEventListener(this._touchend,t[o+this._touchend+s],!1),e.Browser.msTouch&&i.documentElement.removeEventListener("MSPointerCancel",t[o+this._touchend+s],!1),this}}),e.extend(e.DomEvent,{_msTouches:[],_msDocumentListener:!1,addMsTouchListener:function(t,i,s,e){switch(i){case"touchstart":return this.addMsTouchListenerStart(t,i,s,e);case"touchend":return this.addMsTouchListenerEnd(t,i,s,e);case"touchmove":return this.addMsTouchListenerMove(t,i,s,e);default:throw"Unknown touch event type"}},addMsTouchListenerStart:function(t,s,e,o){var n="_leaflet_",a=this._msTouches,r=function(t){for(var i=!1,s=0;a.length>s;s++)if(a[s].pointerId===t.pointerId){i=!0;break}i||a.push(t),t.touches=a.slice(),t.changedTouches=[t],e(t)};if(t[n+"touchstart"+o]=r,t.addEventListener("MSPointerDown",r,!1),!this._msDocumentListener){var h=function(t){for(var i=0;a.length>i;i++)if(a[i].pointerId===t.pointerId){a.splice(i,1);break}};i.documentElement.addEventListener("MSPointerUp",h,!1),i.documentElement.addEventListener("MSPointerCancel",h,!1),this._msDocumentListener=!0}return this},addMsTouchListenerMove:function(t,i,s,e){function o(t){if(t.pointerType!==t.MSPOINTER_TYPE_MOUSE||0!==t.buttons){for(var i=0;a.length>i;i++)if(a[i].pointerId===t.pointerId){a[i]=t;break}t.touches=a.slice(),t.changedTouches=[t],s(t)}}var n="_leaflet_",a=this._msTouches;return t[n+"touchmove"+e]=o,t.addEventListener("MSPointerMove",o,!1),this},addMsTouchListenerEnd:function(t,i,s,e){var o="_leaflet_",n=this._msTouches,a=function(t){for(var i=0;n.length>i;i++)if(n[i].pointerId===t.pointerId){n.splice(i,1);break}t.touches=n.slice(),t.changedTouches=[t],s(t)};return t[o+"touchend"+e]=a,t.addEventListener("MSPointerUp",a,!1),t.addEventListener("MSPointerCancel",a,!1),this},removeMsTouchListener:function(t,i,s){var e="_leaflet_",o=t[e+i+s];switch(i){case"touchstart":t.removeEventListener("MSPointerDown",o,!1);break;case"touchmove":t.removeEventListener("MSPointerMove",o,!1);break;case"touchend":t.removeEventListener("MSPointerUp",o,!1),t.removeEventListener("MSPointerCancel",o,!1)}return this}}),e.Map.mergeOptions({touchZoom:e.Browser.touch&&!e.Browser.android23}),e.Map.TouchZoom=e.Handler.extend({addHooks:function(){e.DomEvent.on(this._map._container,"touchstart",this._onTouchStart,this)},removeHooks:function(){e.DomEvent.off(this._map._container,"touchstart",this._onTouchStart,this)},_onTouchStart:function(t){var s=this._map;if(t.touches&&2===t.touches.length&&!s._animatingZoom&&!this._zooming){var o=s.mouseEventToLayerPoint(t.touches[0]),n=s.mouseEventToLayerPoint(t.touches[1]),a=s._getCenterLayerPoint();this._startCenter=o.add(n)._divideBy(2),this._startDist=o.distanceTo(n),this._moved=!1,this._zooming=!0,this._centerOffset=a.subtract(this._startCenter),s._panAnim&&s._panAnim.stop(),e.DomEvent.on(i,"touchmove",this._onTouchMove,this).on(i,"touchend",this._onTouchEnd,this),e.DomEvent.preventDefault(t)}},_onTouchMove:function(t){if(t.touches&&2===t.touches.length){var i=this._map,s=i.mouseEventToLayerPoint(t.touches[0]),o=i.mouseEventToLayerPoint(t.touches[1]);this._scale=s.distanceTo(o)/this._startDist,this._delta=s._add(o)._divideBy(2)._subtract(this._startCenter),1!==this._scale&&(this._moved||(e.DomUtil.addClass(i._mapPane,"leaflet-zoom-anim leaflet-touching"),i.fire("movestart").fire("zoomstart")._prepareTileBg(),this._moved=!0),e.Util.cancelAnimFrame(this._animRequest),this._animRequest=e.Util.requestAnimFrame(this._updateOnMove,this,!0,this._map._container),e.DomEvent.preventDefault(t))}},_updateOnMove:function(){var t=this._map,i=this._getScaleOrigin(),s=t.layerPointToLatLng(i);t.fire("zoomanim",{center:s,zoom:t.getScaleZoom(this._scale)}),t._tileBg.style[e.DomUtil.TRANSFORM]=e.DomUtil.getTranslateString(this._delta)+" "+e.DomUtil.getScaleString(this._scale,this._startCenter)},_onTouchEnd:function(){if(this._moved&&this._zooming){var t=this._map;this._zooming=!1,e.DomUtil.removeClass(t._mapPane,"leaflet-touching"),e.DomEvent.off(i,"touchmove",this._onTouchMove).off(i,"touchend",this._onTouchEnd);var s=this._getScaleOrigin(),o=t.layerPointToLatLng(s),n=t.getZoom(),a=t.getScaleZoom(this._scale)-n,r=a>0?Math.ceil(a):Math.floor(a),h=t._limitZoom(n+r);t.fire("zoomanim",{center:o,zoom:h}),t._runAnimation(o,h,t.getZoomScale(h)/this._scale,s,!0)}},_getScaleOrigin:function(){var t=this._centerOffset.subtract(this._delta).divideBy(this._scale);return this._startCenter.add(t)}}),e.Map.addInitHook("addHandler","touchZoom",e.Map.TouchZoom),e.Map.mergeOptions({boxZoom:!0}),e.Map.BoxZoom=e.Handler.extend({initialize:function(t){this._map=t,this._container=t._container,this._pane=t._panes.overlayPane},addHooks:function(){e.DomEvent.on(this._container,"mousedown",this._onMouseDown,this)},removeHooks:function(){e.DomEvent.off(this._container,"mousedown",this._onMouseDown)},_onMouseDown:function(t){return!t.shiftKey||1!==t.which&&1!==t.button?!1:(e.DomUtil.disableTextSelection(),this._startLayerPoint=this._map.mouseEventToLayerPoint(t),this._box=e.DomUtil.create("div","leaflet-zoom-box",this._pane),e.DomUtil.setPosition(this._box,this._startLayerPoint),this._container.style.cursor="crosshair",e.DomEvent.on(i,"mousemove",this._onMouseMove,this).on(i,"mouseup",this._onMouseUp,this).preventDefault(t),this._map.fire("boxzoomstart"),s)},_onMouseMove:function(t){var i=this._startLayerPoint,s=this._box,o=this._map.mouseEventToLayerPoint(t),n=o.subtract(i),a=new e.Point(Math.min(o.x,i.x),Math.min(o.y,i.y));e.DomUtil.setPosition(s,a),s.style.width=Math.max(0,Math.abs(n.x)-4)+"px",s.style.height=Math.max(0,Math.abs(n.y)-4)+"px"},_onMouseUp:function(t){this._pane.removeChild(this._box),this._container.style.cursor="",e.DomUtil.enableTextSelection(),e.DomEvent.off(i,"mousemove",this._onMouseMove).off(i,"mouseup",this._onMouseUp);var s=this._map,o=s.mouseEventToLayerPoint(t);if(!this._startLayerPoint.equals(o)){var n=new e.LatLngBounds(s.layerPointToLatLng(this._startLayerPoint),s.layerPointToLatLng(o));s.fitBounds(n),s.fire("boxzoomend",{boxZoomBounds:n})}}}),e.Map.addInitHook("addHandler","boxZoom",e.Map.BoxZoom),e.Map.mergeOptions({keyboard:!0,keyboardPanOffset:80,keyboardZoomOffset:1}),e.Map.Keyboard=e.Handler.extend({keyCodes:{left:[37],right:[39],down:[40],up:[38],zoomIn:[187,107,61],zoomOut:[189,109,173]},initialize:function(t){this._map=t,this._setPanOffset(t.options.keyboardPanOffset),this._setZoomOffset(t.options.keyboardZoomOffset)},addHooks:function(){var t=this._map._container;-1===t.tabIndex&&(t.tabIndex="0"),e.DomEvent.on(t,"focus",this._onFocus,this).on(t,"blur",this._onBlur,this).on(t,"mousedown",this._onMouseDown,this),this._map.on("focus",this._addHooks,this).on("blur",this._removeHooks,this)},removeHooks:function(){this._removeHooks();var t=this._map._container;e.DomEvent.off(t,"focus",this._onFocus,this).off(t,"blur",this._onBlur,this).off(t,"mousedown",this._onMouseDown,this),this._map.off("focus",this._addHooks,this).off("blur",this._removeHooks,this)},_onMouseDown:function(){this._focused||this._map._container.focus()},_onFocus:function(){this._focused=!0,this._map.fire("focus")},_onBlur:function(){this._focused=!1,this._map.fire("blur")},_setPanOffset:function(t){var i,s,e=this._panKeys={},o=this.keyCodes;for(i=0,s=o.left.length;s>i;i++)e[o.left[i]]=[-1*t,0];for(i=0,s=o.right.length;s>i;i++)e[o.right[i]]=[t,0];for(i=0,s=o.down.length;s>i;i++)e[o.down[i]]=[0,t];for(i=0,s=o.up.length;s>i;i++)e[o.up[i]]=[0,-1*t]},_setZoomOffset:function(t){var i,s,e=this._zoomKeys={},o=this.keyCodes;for(i=0,s=o.zoomIn.length;s>i;i++)e[o.zoomIn[i]]=t;for(i=0,s=o.zoomOut.length;s>i;i++)e[o.zoomOut[i]]=-t},_addHooks:function(){e.DomEvent.on(i,"keydown",this._onKeyDown,this)},_removeHooks:function(){e.DomEvent.off(i,"keydown",this._onKeyDown,this)},_onKeyDown:function(t){var i=t.keyCode,s=this._map;if(this._panKeys.hasOwnProperty(i))s.panBy(this._panKeys[i]),s.options.maxBounds&&s.panInsideBounds(s.options.maxBounds);else{if(!this._zoomKeys.hasOwnProperty(i))return;s.setZoom(s.getZoom()+this._zoomKeys[i])}e.DomEvent.stop(t)}}),e.Map.addInitHook("addHandler","keyboard",e.Map.Keyboard),e.Handler.MarkerDrag=e.Handler.extend({initialize:function(t){this._marker=t},addHooks:function(){var t=this._marker._icon;this._draggable||(this._draggable=new e.Draggable(t,t).on("dragstart",this._onDragStart,this).on("drag",this._onDrag,this).on("dragend",this._onDragEnd,this)),this._draggable.enable()},removeHooks:function(){this._draggable.disable()},moved:function(){return this._draggable&&this._draggable._moved},_onDragStart:function(){this._marker.closePopup().fire("movestart").fire("dragstart")},_onDrag:function(){var t=this._marker,i=t._shadow,s=e.DomUtil.getPosition(t._icon),o=t._map.layerPointToLatLng(s);i&&e.DomUtil.setPosition(i,s),t._latlng=o,t.fire("move",{latlng:o}).fire("drag") +},_onDragEnd:function(){this._marker.fire("moveend").fire("dragend")}}),e.Handler.PolyEdit=e.Handler.extend({options:{icon:new e.DivIcon({iconSize:new e.Point(8,8),className:"leaflet-div-icon leaflet-editing-icon"})},initialize:function(t,i){this._poly=t,e.setOptions(this,i)},addHooks:function(){this._poly._map&&(this._markerGroup||this._initMarkers(),this._poly._map.addLayer(this._markerGroup))},removeHooks:function(){this._poly._map&&(this._poly._map.removeLayer(this._markerGroup),delete this._markerGroup,delete this._markers)},updateMarkers:function(){this._markerGroup.clearLayers(),this._initMarkers()},_initMarkers:function(){this._markerGroup||(this._markerGroup=new e.LayerGroup),this._markers=[];var t,i,s,o,n=this._poly._latlngs;for(t=0,s=n.length;s>t;t++)o=this._createMarker(n[t],t),o.on("click",this._onMarkerClick,this),this._markers.push(o);var a,r;for(t=0,i=s-1;s>t;i=t++)(0!==t||e.Polygon&&this._poly instanceof e.Polygon)&&(a=this._markers[i],r=this._markers[t],this._createMiddleMarker(a,r),this._updatePrevNext(a,r))},_createMarker:function(t,i){var s=new e.Marker(t,{draggable:!0,icon:this.options.icon});return s._origLatLng=t,s._index=i,s.on("drag",this._onMarkerDrag,this),s.on("dragend",this._fireEdit,this),this._markerGroup.addLayer(s),s},_fireEdit:function(){this._poly.fire("edit")},_onMarkerDrag:function(t){var i=t.target;e.extend(i._origLatLng,i._latlng),i._middleLeft&&i._middleLeft.setLatLng(this._getMiddleLatLng(i._prev,i)),i._middleRight&&i._middleRight.setLatLng(this._getMiddleLatLng(i,i._next)),this._poly.redraw()},_onMarkerClick:function(t){if(!(3>this._poly._latlngs.length)){var i=t.target,s=i._index;this._markerGroup.removeLayer(i),this._markers.splice(s,1),this._poly.spliceLatLngs(s,1),this._updateIndexes(s,-1),this._updatePrevNext(i._prev,i._next),i._middleLeft&&this._markerGroup.removeLayer(i._middleLeft),i._middleRight&&this._markerGroup.removeLayer(i._middleRight),i._prev&&i._next?this._createMiddleMarker(i._prev,i._next):i._prev?i._next||(i._prev._middleRight=null):i._next._middleLeft=null,this._poly.fire("edit")}},_updateIndexes:function(t,i){this._markerGroup.eachLayer(function(s){s._index>t&&(s._index+=i)})},_createMiddleMarker:function(t,i){var s,e,o,n=this._getMiddleLatLng(t,i),a=this._createMarker(n);a.setOpacity(.6),t._middleRight=i._middleLeft=a,e=function(){var e=i._index;a._index=e,a.off("click",s).on("click",this._onMarkerClick,this),n.lat=a.getLatLng().lat,n.lng=a.getLatLng().lng,this._poly.spliceLatLngs(e,0,n),this._markers.splice(e,0,a),a.setOpacity(1),this._updateIndexes(e,1),i._index++,this._updatePrevNext(t,a),this._updatePrevNext(a,i)},o=function(){a.off("dragstart",e,this),a.off("dragend",o,this),this._createMiddleMarker(t,a),this._createMiddleMarker(a,i)},s=function(){e.call(this),o.call(this),this._poly.fire("edit")},a.on("click",s,this).on("dragstart",e,this).on("dragend",o,this),this._markerGroup.addLayer(a)},_updatePrevNext:function(t,i){t&&(t._next=i),i&&(i._prev=t)},_getMiddleLatLng:function(t,i){var s=this._poly._map,e=s.latLngToLayerPoint(t.getLatLng()),o=s.latLngToLayerPoint(i.getLatLng());return s.layerPointToLatLng(e._add(o)._divideBy(2))}}),e.Polyline.addInitHook(function(){e.Handler.PolyEdit&&(this.editing=new e.Handler.PolyEdit(this),this.options.editable&&this.editing.enable()),this.on("add",function(){this.editing&&this.editing.enabled()&&this.editing.addHooks()}),this.on("remove",function(){this.editing&&this.editing.enabled()&&this.editing.removeHooks()})}),e.Control=e.Class.extend({options:{position:"topright"},initialize:function(t){e.setOptions(this,t)},getPosition:function(){return this.options.position},setPosition:function(t){var i=this._map;return i&&i.removeControl(this),this.options.position=t,i&&i.addControl(this),this},addTo:function(t){this._map=t;var i=this._container=this.onAdd(t),s=this.getPosition(),o=t._controlCorners[s];return e.DomUtil.addClass(i,"leaflet-control"),-1!==s.indexOf("bottom")?o.insertBefore(i,o.firstChild):o.appendChild(i),this},removeFrom:function(t){var i=this.getPosition(),s=t._controlCorners[i];return s.removeChild(this._container),this._map=null,this.onRemove&&this.onRemove(t),this}}),e.control=function(t){return new e.Control(t)},e.Map.include({addControl:function(t){return t.addTo(this),this},removeControl:function(t){return t.removeFrom(this),this},_initControlPos:function(){function t(t,n){var a=s+t+" "+s+n;i[t+n]=e.DomUtil.create("div",a,o)}var i=this._controlCorners={},s="leaflet-",o=this._controlContainer=e.DomUtil.create("div",s+"control-container",this._container);t("top","left"),t("top","right"),t("bottom","left"),t("bottom","right")}}),e.Control.Zoom=e.Control.extend({options:{position:"topleft"},onAdd:function(t){var i="leaflet-control-zoom",s="leaflet-bar",o=s+"-part",n=e.DomUtil.create("div",i+" "+s);return this._map=t,this._zoomInButton=this._createButton("+","Zoom in",i+"-in "+o+" "+o+"-top",n,this._zoomIn,this),this._zoomOutButton=this._createButton("-","Zoom out",i+"-out "+o+" "+o+"-bottom",n,this._zoomOut,this),t.on("zoomend",this._updateDisabled,this),n},onRemove:function(t){t.off("zoomend",this._updateDisabled,this)},_zoomIn:function(t){this._map.zoomIn(t.shiftKey?3:1)},_zoomOut:function(t){this._map.zoomOut(t.shiftKey?3:1)},_createButton:function(t,i,s,o,n,a){var r=e.DomUtil.create("a",s,o);r.innerHTML=t,r.href="#",r.title=i;var h=e.DomEvent.stopPropagation;return e.DomEvent.on(r,"click",h).on(r,"mousedown",h).on(r,"dblclick",h).on(r,"click",e.DomEvent.preventDefault).on(r,"click",n,a),r},_updateDisabled:function(){var t=this._map,i="leaflet-control-zoom-disabled";e.DomUtil.removeClass(this._zoomInButton,i),e.DomUtil.removeClass(this._zoomOutButton,i),t._zoom===t.getMinZoom()&&e.DomUtil.addClass(this._zoomOutButton,i),t._zoom===t.getMaxZoom()&&e.DomUtil.addClass(this._zoomInButton,i)}}),e.Map.mergeOptions({zoomControl:!0}),e.Map.addInitHook(function(){this.options.zoomControl&&(this.zoomControl=new e.Control.Zoom,this.addControl(this.zoomControl))}),e.control.zoom=function(t){return new e.Control.Zoom(t)},e.Control.Attribution=e.Control.extend({options:{position:"bottomright",prefix:'Powered by Leaflet'},initialize:function(t){e.setOptions(this,t),this._attributions={}},onAdd:function(t){return this._container=e.DomUtil.create("div","leaflet-control-attribution"),e.DomEvent.disableClickPropagation(this._container),t.on("layeradd",this._onLayerAdd,this).on("layerremove",this._onLayerRemove,this),this._update(),this._container},onRemove:function(t){t.off("layeradd",this._onLayerAdd).off("layerremove",this._onLayerRemove)},setPrefix:function(t){return this.options.prefix=t,this._update(),this},addAttribution:function(t){return t?(this._attributions[t]||(this._attributions[t]=0),this._attributions[t]++,this._update(),this):s},removeAttribution:function(t){return t?(this._attributions[t]--,this._update(),this):s},_update:function(){if(this._map){var t=[];for(var i in this._attributions)this._attributions.hasOwnProperty(i)&&this._attributions[i]&&t.push(i);var s=[];this.options.prefix&&s.push(this.options.prefix),t.length&&s.push(t.join(", ")),this._container.innerHTML=s.join(" — ")}},_onLayerAdd:function(t){t.layer.getAttribution&&this.addAttribution(t.layer.getAttribution())},_onLayerRemove:function(t){t.layer.getAttribution&&this.removeAttribution(t.layer.getAttribution())}}),e.Map.mergeOptions({attributionControl:!0}),e.Map.addInitHook(function(){this.options.attributionControl&&(this.attributionControl=(new e.Control.Attribution).addTo(this))}),e.control.attribution=function(t){return new e.Control.Attribution(t)},e.Control.Scale=e.Control.extend({options:{position:"bottomleft",maxWidth:100,metric:!0,imperial:!0,updateWhenIdle:!1},onAdd:function(t){this._map=t;var i="leaflet-control-scale",s=e.DomUtil.create("div",i),o=this.options;return this._addScales(o,i,s),t.on(o.updateWhenIdle?"moveend":"move",this._update,this),t.whenReady(this._update,this),s},onRemove:function(t){t.off(this.options.updateWhenIdle?"moveend":"move",this._update,this)},_addScales:function(t,i,s){t.metric&&(this._mScale=e.DomUtil.create("div",i+"-line",s)),t.imperial&&(this._iScale=e.DomUtil.create("div",i+"-line",s))},_update:function(){var t=this._map.getBounds(),i=t.getCenter().lat,s=6378137*Math.PI*Math.cos(i*Math.PI/180),e=s*(t.getNorthEast().lng-t.getSouthWest().lng)/180,o=this._map.getSize(),n=this.options,a=0;o.x>0&&(a=e*(n.maxWidth/o.x)),this._updateScales(n,a)},_updateScales:function(t,i){t.metric&&i&&this._updateMetric(i),t.imperial&&i&&this._updateImperial(i)},_updateMetric:function(t){var i=this._getRoundNum(t);this._mScale.style.width=this._getScaleWidth(i/t)+"px",this._mScale.innerHTML=1e3>i?i+" m":i/1e3+" km"},_updateImperial:function(t){var i,s,e,o=3.2808399*t,n=this._iScale;o>5280?(i=o/5280,s=this._getRoundNum(i),n.style.width=this._getScaleWidth(s/i)+"px",n.innerHTML=s+" mi"):(e=this._getRoundNum(o),n.style.width=this._getScaleWidth(e/o)+"px",n.innerHTML=e+" ft")},_getScaleWidth:function(t){return Math.round(this.options.maxWidth*t)-10},_getRoundNum:function(t){var i=Math.pow(10,(Math.floor(t)+"").length-1),s=t/i;return s=s>=10?10:s>=5?5:s>=3?3:s>=2?2:1,i*s}}),e.control.scale=function(t){return new e.Control.Scale(t)},e.Control.Layers=e.Control.extend({options:{collapsed:!0,position:"topright",autoZIndex:!0},initialize:function(t,i,s){e.setOptions(this,s),this._layers={},this._lastZIndex=0,this._handlingClick=!1;for(var o in t)t.hasOwnProperty(o)&&this._addLayer(t[o],o);for(o in i)i.hasOwnProperty(o)&&this._addLayer(i[o],o,!0)},onAdd:function(t){return this._initLayout(),this._update(),t.on("layeradd",this._onLayerChange,this).on("layerremove",this._onLayerChange,this),this._container},onRemove:function(t){t.off("layeradd",this._onLayerChange).off("layerremove",this._onLayerChange)},addBaseLayer:function(t,i){return this._addLayer(t,i),this._update(),this},addOverlay:function(t,i){return this._addLayer(t,i,!0),this._update(),this},removeLayer:function(t){var i=e.stamp(t);return delete this._layers[i],this._update(),this},_initLayout:function(){var t="leaflet-control-layers",i=this._container=e.DomUtil.create("div",t);e.Browser.touch?e.DomEvent.on(i,"click",e.DomEvent.stopPropagation):(e.DomEvent.disableClickPropagation(i),e.DomEvent.on(i,"mousewheel",e.DomEvent.stopPropagation));var s=this._form=e.DomUtil.create("form",t+"-list");if(this.options.collapsed){e.DomEvent.on(i,"mouseover",this._expand,this).on(i,"mouseout",this._collapse,this);var o=this._layersLink=e.DomUtil.create("a",t+"-toggle",i);o.href="#",o.title="Layers",e.Browser.touch?e.DomEvent.on(o,"click",e.DomEvent.stopPropagation).on(o,"click",e.DomEvent.preventDefault).on(o,"click",this._expand,this):e.DomEvent.on(o,"focus",this._expand,this),this._map.on("movestart",this._collapse,this)}else this._expand();this._baseLayersList=e.DomUtil.create("div",t+"-base",s),this._separator=e.DomUtil.create("div",t+"-separator",s),this._overlaysList=e.DomUtil.create("div",t+"-overlays",s),i.appendChild(s)},_addLayer:function(t,i,s){var o=e.stamp(t);this._layers[o]={layer:t,name:i,overlay:s},this.options.autoZIndex&&t.setZIndex&&(this._lastZIndex++,t.setZIndex(this._lastZIndex))},_update:function(){if(this._container){this._baseLayersList.innerHTML="",this._overlaysList.innerHTML="";var t=!1,i=!1;for(var s in this._layers)if(this._layers.hasOwnProperty(s)){var e=this._layers[s];this._addItem(e),i=i||e.overlay,t=t||!e.overlay}this._separator.style.display=i&&t?"":"none"}},_onLayerChange:function(t){var i=e.stamp(t.layer);this._layers[i]&&!this._handlingClick&&this._update()},_createRadioElement:function(t,s){var e='t;t++)i=o[t],s=this._layers[i.layerId],i.checked&&!this._map.hasLayer(s.layer)?(this._map.addLayer(s.layer),s.overlay||(e=s.layer)):!i.checked&&this._map.hasLayer(s.layer)&&this._map.removeLayer(s.layer);e&&(this._map.setZoom(this._map.getZoom()),this._map.fire("baselayerchange",{layer:e})),this._handlingClick=!1},_expand:function(){e.DomUtil.addClass(this._container,"leaflet-control-layers-expanded")},_collapse:function(){this._container.className=this._container.className.replace(" leaflet-control-layers-expanded","")}}),e.control.layers=function(t,i,s){return new e.Control.Layers(t,i,s)},e.PosAnimation=e.Class.extend({includes:e.Mixin.Events,run:function(t,i,s,o){this.stop(),this._el=t,this._inProgress=!0,this.fire("start"),t.style[e.DomUtil.TRANSITION]="all "+(s||.25)+"s cubic-bezier(0,0,"+(o||.5)+",1)",e.DomEvent.on(t,e.DomUtil.TRANSITION_END,this._onTransitionEnd,this),e.DomUtil.setPosition(t,i),e.Util.falseFn(t.offsetWidth),this._stepTimer=setInterval(e.bind(this.fire,this,"step"),50)},stop:function(){this._inProgress&&(e.DomUtil.setPosition(this._el,this._getPos()),this._onTransitionEnd(),e.Util.falseFn(this._el.offsetWidth))},_transformRe:/(-?[\d\.]+), (-?[\d\.]+)\)/,_getPos:function(){var i,s,o,n=this._el,a=t.getComputedStyle(n);return e.Browser.any3d?(o=a[e.DomUtil.TRANSFORM].match(this._transformRe),i=parseFloat(o[1]),s=parseFloat(o[2])):(i=parseFloat(a.left),s=parseFloat(a.top)),new e.Point(i,s,!0)},_onTransitionEnd:function(){e.DomEvent.off(this._el,e.DomUtil.TRANSITION_END,this._onTransitionEnd,this),this._inProgress&&(this._inProgress=!1,this._el.style[e.DomUtil.TRANSITION]="",clearInterval(this._stepTimer),this.fire("step").fire("end"))}}),e.Map.include({setView:function(t,i,s){i=this._limitZoom(i);var e=this._zoom!==i;if(this._loaded&&!s&&this._layers){this._panAnim&&this._panAnim.stop();var o=e?this._zoomToIfClose&&this._zoomToIfClose(t,i):this._panByIfClose(t);if(o)return clearTimeout(this._sizeTimer),this}return this._resetView(t,i),this},panBy:function(t,i,s){if(t=e.point(t),!t.x&&!t.y)return this;this._panAnim||(this._panAnim=new e.PosAnimation,this._panAnim.on({step:this._onPanTransitionStep,end:this._onPanTransitionEnd},this)),this.fire("movestart"),e.DomUtil.addClass(this._mapPane,"leaflet-pan-anim");var o=e.DomUtil.getPosition(this._mapPane).subtract(t)._round();return this._panAnim.run(this._mapPane,o,i||.25,s),this},_onPanTransitionStep:function(){this.fire("move")},_onPanTransitionEnd:function(){e.DomUtil.removeClass(this._mapPane,"leaflet-pan-anim"),this.fire("moveend")},_panByIfClose:function(t){var i=this._getCenterOffset(t)._floor();return this._offsetIsWithinView(i)?(this.panBy(i),!0):!1},_offsetIsWithinView:function(t,i){var s=i||1,e=this.getSize();return Math.abs(t.x)<=e.x*s&&Math.abs(t.y)<=e.y*s}}),e.PosAnimation=e.DomUtil.TRANSITION?e.PosAnimation:e.PosAnimation.extend({run:function(t,i,s,o){this.stop(),this._el=t,this._inProgress=!0,this._duration=s||.25,this._easeOutPower=1/Math.max(o||.5,.2),this._startPos=e.DomUtil.getPosition(t),this._offset=i.subtract(this._startPos),this._startTime=+new Date,this.fire("start"),this._animate()},stop:function(){this._inProgress&&(this._step(),this._complete())},_animate:function(){this._animId=e.Util.requestAnimFrame(this._animate,this),this._step()},_step:function(){var t=+new Date-this._startTime,i=1e3*this._duration;i>t?this._runFrame(this._easeOut(t/i)):(this._runFrame(1),this._complete())},_runFrame:function(t){var i=this._startPos.add(this._offset.multiplyBy(t));e.DomUtil.setPosition(this._el,i),this.fire("step")},_complete:function(){e.Util.cancelAnimFrame(this._animId),this._inProgress=!1,this.fire("end")},_easeOut:function(t){return 1-Math.pow(1-t,this._easeOutPower)}}),e.Map.mergeOptions({zoomAnimation:e.DomUtil.TRANSITION&&!e.Browser.android23&&!e.Browser.mobileOpera}),e.DomUtil.TRANSITION&&e.Map.addInitHook(function(){e.DomEvent.on(this._mapPane,e.DomUtil.TRANSITION_END,this._catchTransitionEnd,this)}),e.Map.include(e.DomUtil.TRANSITION?{_zoomToIfClose:function(t,i){if(this._animatingZoom)return!0;if(!this.options.zoomAnimation)return!1;var s=this.getZoomScale(i),o=this._getCenterOffset(t)._divideBy(1-1/s);if(!this._offsetIsWithinView(o,1))return!1;e.DomUtil.addClass(this._mapPane,"leaflet-zoom-anim"),this.fire("movestart").fire("zoomstart"),this.fire("zoomanim",{center:t,zoom:i});var n=this._getCenterLayerPoint().add(o);return this._prepareTileBg(),this._runAnimation(t,i,s,n),!0},_catchTransitionEnd:function(){this._animatingZoom&&this._onZoomTransitionEnd()},_runAnimation:function(t,i,s,o,n){this._animateToCenter=t,this._animateToZoom=i,this._animatingZoom=!0,e.Draggable&&(e.Draggable._disabled=!0);var a=e.DomUtil.TRANSFORM,r=this._tileBg;clearTimeout(this._clearTileBgTimer),e.Util.falseFn(r.offsetWidth);var h=e.DomUtil.getScaleString(s,o),l=r.style[a];r.style[a]=n?l+" "+h:h+" "+l},_prepareTileBg:function(){var t=this._tilePane,i=this._tileBg;if(i&&this._getLoadedTilesPercentage(i)>.5&&.5>this._getLoadedTilesPercentage(t))return t.style.visibility="hidden",t.empty=!0,this._stopLoadingImages(t),s;i||(i=this._tileBg=this._createPane("leaflet-tile-pane",this._mapPane),i.style.zIndex=1),i.style[e.DomUtil.TRANSFORM]="",i.style.visibility="hidden",i.empty=!0,t.empty=!1,this._tilePane=this._panes.tilePane=i;var o=this._tileBg=t;e.DomUtil.addClass(o,"leaflet-zoom-animated"),this._stopLoadingImages(o)},_getLoadedTilesPercentage:function(t){var i,s,e=t.getElementsByTagName("img"),o=0;for(i=0,s=e.length;s>i;i++)e[i].complete&&o++;return o/s},_stopLoadingImages:function(t){var i,s,o,n=Array.prototype.slice.call(t.getElementsByTagName("img"));for(i=0,s=n.length;s>i;i++)o=n[i],o.complete||(o.onload=e.Util.falseFn,o.onerror=e.Util.falseFn,o.src=e.Util.emptyImageUrl,o.parentNode.removeChild(o))},_onZoomTransitionEnd:function(){this._restoreTileFront(),e.DomUtil.removeClass(this._mapPane,"leaflet-zoom-anim"),e.Util.falseFn(this._tileBg.offsetWidth),this._animatingZoom=!1,this._resetView(this._animateToCenter,this._animateToZoom,!0,!0),e.Draggable&&(e.Draggable._disabled=!1)},_restoreTileFront:function(){this._tilePane.innerHTML="",this._tilePane.style.visibility="",this._tilePane.style.zIndex=2,this._tileBg.style.zIndex=1},_clearTileBg:function(){this._animatingZoom||this.touchZoom._zooming||(this._tileBg.innerHTML="")}}:{}),e.Map.include({_defaultLocateOptions:{watch:!1,setView:!1,maxZoom:1/0,timeout:1e4,maximumAge:0,enableHighAccuracy:!1},locate:function(t){if(t=this._locationOptions=e.extend(this._defaultLocateOptions,t),!navigator.geolocation)return this._handleGeolocationError({code:0,message:"Geolocation not supported."}),this;var i=e.bind(this._handleGeolocationResponse,this),s=e.bind(this._handleGeolocationError,this);return t.watch?this._locationWatchId=navigator.geolocation.watchPosition(i,s,t):navigator.geolocation.getCurrentPosition(i,s,t),this},stopLocate:function(){return navigator.geolocation&&navigator.geolocation.clearWatch(this._locationWatchId),this},_handleGeolocationError:function(t){var i=t.code,s=t.message||(1===i?"permission denied":2===i?"position unavailable":"timeout");this._locationOptions.setView&&!this._loaded&&this.fitWorld(),this.fire("locationerror",{code:i,message:"Geolocation error: "+s+"."})},_handleGeolocationResponse:function(t){var i=180*t.coords.accuracy/4e7,s=2*i,o=t.coords.latitude,n=t.coords.longitude,a=new e.LatLng(o,n),r=new e.LatLng(o-i,n-s),h=new e.LatLng(o+i,n+s),l=new e.LatLngBounds(r,h),c=this._locationOptions;if(c.setView){var m=Math.min(this.getBoundsZoom(l),c.maxZoom);this.setView(a,m)}this.fire("locationfound",{latlng:a,bounds:l,accuracy:t.coords.accuracy})}})}(this,document),L.Proj={},L.Proj._isProj4Proj=function(t){return t.projName!==void 0},L.Proj.Projection=L.Class.extend({initialize:function(t,i){if(L.Proj._isProj4Proj(t))this._proj=t;else{var s=t;Proj4js.defs[s]=i,this._proj=new Proj4js.Proj(s)}},project:function(t){var i=new L.Point(t.lng,t.lat);return Proj4js.transform(Proj4js.WGS84,this._proj,i)},unproject:function(t,i){var s=Proj4js.transform(this._proj,Proj4js.WGS84,t.clone());return new L.LatLng(s.y,s.x,i)}}),L.Proj.CRS=L.Class.extend({includes:L.CRS,options:{transformation:new L.Transformation(1,0,-1,0)},initialize:function(t,i,s){var e,o,n,a;L.Proj._isProj4Proj(t)?(o=t,e=o.srsCode,a=i||{},this.projection=new L.Proj.Projection(o)):(e=t,n=i,a=s||{},this.projection=new L.Proj.Projection(e,n)),L.Util.setOptions(this,a),this.code=e,this.transformation=this.options.transformation,this.options.origin&&(this.transformation=new L.Transformation(1,-this.options.origin[0],-1,this.options.origin[1])),this.options.scales?this.scale=function(t){return this.options.scales[t]}:this.options.resolutions&&(this.scale=function(t){return 1/this.options.resolutions[t]})}}),L.Proj.CRS.TMS=L.Proj.CRS.extend({initialize:function(t,i,s,e){if(L.Proj._isProj4Proj(t)){var o=t,n=i,a=s||{};a.origin=[n[0],n[3]],L.Proj.CRS.prototype.initialize(o,a)}else{var r=t,h=i,n=s,a=e||{};a.origin=[n[0],n[3]],L.Proj.CRS.prototype.initialize(r,h,a)}this.projectedBounds=n}}),L.Proj.TileLayer={},L.Proj.TileLayer.TMS=L.TileLayer.extend({options:{tms:!0,continuousWorld:!0},initialize:function(t,i,s){if(!(i instanceof L.Proj.CRS.TMS))throw Error("CRS is not L.Proj.CRS.TMS.");L.TileLayer.prototype.initialize.call(this,t,s),this.crs=i;for(var e=this.options.minZoom;this.options.maxZoom>e;e++){var o=(this.crs.projectedBounds[3]-this.crs.projectedBounds[1])/this._projectedTileSize(e);if(Math.abs(o-Math.round(o))>.001)throw Error("Projected bounds does not match grid at zoom "+e)}},getTileUrl:function(t){var i=Math.round((this.crs.projectedBounds[3]-this.crs.projectedBounds[1])/this._projectedTileSize(this._map.getZoom()));return L.Util.template(this._url,L.Util.extend({s:this._getSubdomain(t),z:this._getZoomForUrl(),x:t.x,y:i-t.y-1},this.options))},_projectedTileSize:function(t){return this.options.tileSize/this.crs.scale(t)}}),"undefined"!=typeof module&&(module.exports=L.Proj),"undefined"!=typeof L&&L.CRS!==void 0&&(L.CRS.proj4js=function(){return function(t,i,s,e){return e=e||{},s&&(e.transformation=s),new L.Proj.CRS(t,i,e)}}()),L.Control.MousePosition=L.Control.extend({options:{position:"bottomleft",separator:" : ",emptyString:"Unavailable",lngFirst:!1,numDigits:5,lngFormatter:void 0,latFormatter:void 0},onAdd:function(t){return this._container=L.DomUtil.create("div","leaflet-control-mouseposition"),L.DomEvent.disableClickPropagation(this._container),t.on("mousemove",this._onMouseMove,this),this._container.innerHTML=this.options.emptyString,this._container},onRemove:function(t){t.off("mousemove",this._onMouseMove)},_onMouseMove:function(t){var i=L.Util.formatNum(t.latlng.lng,this.options.numDigits),s=L.Util.formatNum(t.latlng.lat,this.options.numDigits);this.options.lngFormatter&&(i=this.options.lngFormatter(i)),this.options.latFormatter&&(s=this.options.latFormatter(s));var e=this.options.lngFirst?i+this.options.separator+s:s+this.options.separator+i;this._container.innerHTML=e}}),L.Map.mergeOptions({positionControl:!1}),L.Map.addInitHook(function(){this.options.positionControl&&(this.positionControl=new L.Control.MousePosition,this.addControl(this.positionControl))}),L.control.mousePosition=function(t){return new L.Control.MousePosition(t)},function(t,i){L.KSP={},L.KSP.version="0.2.1",L.KSP.CRS={},L.KSP.CRS.EPSG4326=new L.Proj.CRS.TMS(new Proj4js.Proj("EPSG:4326"),[-180,-90,180,90],{resolutions:[.703125,.3515625,.17578125,.087890625,.0439453125,.02197265625]}),L.KSP.CelestialBody=L.Class.extend({initialize:function(t){if(!t.hasOwnProperty("id"))throw Error("must specify id");if(!t.hasOwnProperty("name"))throw Error("must specify name");if(t.hasOwnProperty("crs")){if(!(t.crs instanceof L.Proj.CRS.TMS))throw Error("crs is not an instance of L.Proj.CRS.TMS")}else this.crs=L.KSP.CRS.EPSG4326;t.hasOwnProperty("radius")||(this.radius=1),t.hasOwnProperty("thumbnail")||(this.thumbnail="body-unknown.png"),t.hasOwnProperty("baseLayers")||(this.baseLayers={}),L.Util.extend(this,t)},addTo:function(t){var i,s=t._body;if(t._body=this,t.fire("bodychangestart",{body:this,oldBody:s}),s){for(i in s.baseLayers)s.baseLayers.hasOwnProperty(i)&&t.removeLayer(s.baseLayers[i]);for(i in s.overlays)s.overlays.hasOwnProperty(i)&&t.removeLayer(s.overlays[i])}var e=this.defaultLayer||this.baseLayers.Satellite;if(e){for(i in this.baseLayers)if(this.baseLayers.hasOwnProperty(i)&&this.baseLayers[i]._type===t._baseLayerType){e=this.baseLayers[i];break}t.addLayer(e),t.fire("baselayerchange",{layer:e})}for(i in this.overlays)this.overlays.hasOwnProperty(i)&&t._overlayTypes.indexOf(this.overlays[i]._type)>=0&&(t.addLayer(this.overlays[i]),t.fire("layeradd",{layer:this.overlays[i]}));t.fire("bodychangeend",{body:this,oldBody:s})},onAdd:function(t){this.addTo(t)},removeFrom:function(t){L.KSP.CelestialBody.DUMMY.addTo(t)},onRemove:function(t){this.removeFrom(t)}}),L.KSP.celestialBody=function(t){return new L.KSP.CelestialBody(t)},L.KSP.CelestialBody.DUMMY=L.KSP.celestialBody({id:"",name:"",crs:L.KSP.CRS.EPSG4326}),L.KSP.CelestialBody.ALL_PLANETARY=[L.KSP.CelestialBody.DUMMY],L.KSP.Map=L.Map.extend({options:{crs:L.KSP.CRS.EPSG4326,continuousWorld:!0},initialize:function(t,i){this._baseLayerType=-1,this._overlayTypes=[],L.Util.setOptions(this,i),this.startTrackingLayerState(),this.on("bodychangestart",this._onBodyChangeStart).on("bodychangeend",this._onBodyChangeEnd),L.Map.prototype.initialize.call(this,t,this.options)},clampZoom:function(){var t=this.getZoom(),i=this.getMinZoom(),s=this.getMaxZoom();i>t?this.setZoom(i):t>s?this.setZoom(s):this.fire("zoomend",this)},_onBodyChangeStart:function(){this.stopTrackingLayerState()},_onBodyChangeEnd:function(){this.clampZoom(),this.startTrackingLayerState()},_onLayerStateChange:function(t){if("layeradd"===t.type)t.layer instanceof L.KSP.TileLayer?this._baseLayerType=t.layer._type:t.layer instanceof L.KSP.LayerGroup&&0>this._overlayTypes.indexOf(t.layer._type)&&this._overlayTypes.push(t.layer._type);else if(t.layer instanceof L.KSP.LayerGroup){var i,s,e=t.layer._type,o=this._overlayTypes;for(i=o.length-1;i>=0;i--)s=o[i],s===e&&o.splice(i,1)}},startTrackingLayerState:function(){this.on("layeradd",this._onLayerStateChange).on("layerremove",this._onLayerStateChange)},stopTrackingLayerState:function(){this.off("layeradd",this._onLayerStateChange).off("layerremove",this._onLayerStateChange)}}),L.KSP.map=function(t,i){return new L.KSP.Map(t,i)},L.KSP.TileLayer=L.Proj.TileLayer.TMS.extend({statics:{TYPE_SATELLITE:0,TYPE_COLORRELIEF:1,TYPE_SLOPE:2,DEFAULT_URL:"http://tiles.kerbalmaps.com/{body}/{style}/{z}/{x}/{y}.png"},options:{continuousWorld:!1,noWrap:!1,minZoom:0,maxZoom:5,attribution:"Map data © Joel Pedraza"},initialize:function(t,i,s,e){L.Util.setOptions(this,e),this._type=t,L.Proj.TileLayer.TMS.prototype.initialize.call(this,i,s,this.options)}}),L.KSP.tileLayer=function(t,i,s,e){return new L.KSP.TileLayer(t,i,s,e)},L.KSP.LayerGroup=L.LayerGroup.extend({statics:{TYPE_SPACECENTER:0,TYPE_ANOMALY:1},initialize:function(t,i){this._type=t,L.LayerGroup.prototype.initialize.call(this,i)}}),L.KSP.layerGroup=function(t,i){return new L.KSP.LayerGroup(t,i)},L.KSP.Icon={},L.KSP.Icon.SPACECENTER=new L.Icon({iconUrl:"../assets/images/markers-spacecenter.png",shadowUrl:"../assets/images/markers-shadow.png",iconSize:[30,40],shadowSize:[35,16],iconAnchor:[15,40],shadowAnchor:[10,12],popupAnchor:[0,-35]}),L.KSP.Icon.ANOMALY=new L.Icon({iconUrl:"../assets/images/markers-anomaly.png",shadowUrl:"../assets/images/markers-shadow.png",iconSize:[30,40],shadowSize:[35,16],iconAnchor:[15,40],shadowAnchor:[10,12],popupAnchor:[0,-35]}),L.KSP.Legend={},L.KSP.Legend.SLOPE={"≥ 60°":"#E19678","< 60°":"#C86464","< 30°":"#965A64","< 15°":"#645064","< 5°":"#325064","0°":"#32465A"},L.KSP.Control=L.KSP.control={},L.KSP.Control.Legend=L.Control.extend({options:{position:"bottomright"},onAdd:function(t){return this._container=L.DomUtil.create("div","leaflet-control-legend"),t.on("baselayerchange",this._onLayerChange,this),this._container},_update:function(t){if(this._container.innerHTML="",t){for(var i in t)t.hasOwnProperty(i)&&(this._container.innerHTML+=''+i+"
    ");L.DomUtil.addClass(this._container,"leaflet-control-legend-visible")}else this._container.className=this._container.className.replace(" leaflet-control-legend-visible","")},_onLayerChange:function(t){this._update(t.layer.options.legend)}}),L.Map.mergeOptions({legendControl:!0}),L.Map.addInitHook(function(){this.options.bodyControl&&(this.legendControl=new L.KSP.Control.Legend,this.addControl(this.legendControl))}),L.control.legend=function(t){return new L.KSP.Control.Legend(t)},L.KSP.Control.Scale=L.Control.Scale.extend({options:{imperial:!1},onAdd:function(t){this._radius=0,t._body&&(this._radius=t._body.radius);var i=L.Control.Scale.prototype.onAdd.call(this,t);return t.on("bodychangeend",this._onBodyChangeEnd,this),i},onRemove:function(t){L.Control.Scale.prototype.onRemove.call(this,t),t.off("bodychangeend",this._onBodyChangeEnd)},_onBodyChangeEnd:function(t){this._radius=t.body.radius,this._update()},_update:function(){var t=this._map.getBounds(),i=t.getCenter().lat,s=this._radius*Math.PI*Math.cos(i*Math.PI/180),e=s*(t.getNorthEast().lng-t.getSouthWest().lng)/180,o=this._map.getSize(),n=this.options,a=0;o.x>0&&(a=e*(n.maxWidth/o.x)),this._updateScales(n,a)}}),L.KSP.Map.mergeOptions({scaleControl:!1}),L.KSP.Map.addInitHook(function(){this.options.scaleControl&&(this.scaleControl=new L.KSP.Control.Scale,this.addControl(this.scaleControl))}),L.KSP.control.scale=function(t){return new L.KSP.Control.Scale(t)},L.KSP.Control.CelestialBody=L.Control.extend({options:{position:"topright",collapsed:!0},initialize:function(t,i){L.Util.setOptions(this,i),this._bodies=t,this._timeInMillis=(new Date).valueOf(),this._weekInMillis=6048e5},onAdd:function(){return this._initLayout(),this._update(),this._map.on("bodychangeend",this._update,this),this._container},_initLayout:function(){var t="leaflet-control-celestialbodies",s=this._container=L.DomUtil.create("div",t),e=this._bodies;if(this.options.collapsed){L.DomEvent.on(s,"mouseover",this._expand,this).on(s,"mouseout",this._collapse,this);var o=this._bodiesLink=L.DomUtil.create("a",t+"-toggle",s);o.href="#",o.title="Celestial Bodies",L.DomEvent.on(o,"focus",this._expand,this),this._map.on("movestart",this._collapse,this)}var n=this._list=L.DomUtil.create("ul",t+"-list",s);for(var a in e)if(e.hasOwnProperty(a)){var r=this._addBody(e[a],n);if(e[a].children){var h=i.createElement("ul");for(var l in e[a].children)e[a].children.hasOwnProperty(l)&&this._addBody(e[a].children[l],h);r.appendChild(h)}}},_update:function(){this._map._body&&(this._bodiesLink.style.backgroundImage='url("'+this._map._body.thumbnail+'")')},_addBody:function(t,s){var e,o=i.createElement("li"),n=i.createElement("img");if(n.src=t.thumbnail,n.alt=o.title=t.name,t.addedOn){this._timeInMillis-t.addedOnKerbal Space Center
    -0.0969 : -74.6004"),L.marker([20.5829,-146.5116],{icon:L.KSP.Icon.SPACECENTER}).bindPopup("Kerbal Space Center 2
    20.5829 : -146.5116"),L.marker([-1.5409,-71.9099],{icon:L.KSP.Icon.SPACECENTER}).bindPopup("Island Airfield
    -1.5409 : -71.9099")]),Anomalies:L.KSP.layerGroup(L.KSP.LayerGroup.TYPE_ANOMALY,[L.marker([.1023,-74.5684],{icon:L.KSP.Icon.ANOMALY}).bindPopup("0.1023 : -74.5684"),L.marker([20.6709,-146.4968],{icon:L.KSP.Icon.ANOMALY}).bindPopup("20.6709 : -146.4968"),L.marker([35.5705,-74.9773],{icon:L.KSP.Icon.ANOMALY}).bindPopup("35.5705 : -74.9773"),L.marker([-.6402,-80.7668],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-0.6402 : -80.7668"),L.marker([-28.8083,-13.4401],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-28.8083 : -13.4401"),L.marker([-6.5057,-141.6856],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-6.5057 : -141.6856"),L.marker([81.9551,-128.518],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-81.9551 : -128.518")])}}),L.KSP.CelestialBody.MUN=L.KSP.celestialBody({id:"mun",name:"Mun",crs:L.KSP.CRS.EPSG4326,radius:2e5,addedOn:13682304e5,lastUpdated:1368144e6,thumbnail:"body-mun.png",baseLayers:{Satellite:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SATELLITE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{body:"mun",style:"sat"}),"Color Relief":L.KSP.tileLayer(L.KSP.TileLayer.TYPE_COLORRELIEF,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{body:"mun",style:"color",legend:{"3150 m":"#EBEBEB","-180 m":"#232323"}}),Slope:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SLOPE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{body:"mun",style:"slope",legend:L.KSP.Legend.SLOPE})},overlays:{Anomalies:L.KSP.layerGroup(L.KSP.LayerGroup.TYPE_ANOMALY,[L.marker([-9.8314,25.9177],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-9.8314 : 25.9177"),L.marker([-82.2063,102.9305],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-82.2063 : 102.9305"),L.marker([57.6604,9.1422],{icon:L.KSP.Icon.ANOMALY}).bindPopup("57.6604 : 9.1422"),L.marker([2.4695,81.5133],{icon:L.KSP.Icon.ANOMALY}).bindPopup("2.4695 : 81.5133"),L.marker([12.4432,39.178],{icon:L.KSP.Icon.ANOMALY}).bindPopup("12.4432 : 39.1780"),L.marker([-12.4431,-140.822],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-12.4431 : -140.8220"),L.marker([.7027,22.747],{icon:L.KSP.Icon.ANOMALY}).bindPopup("0.7027 : 22.7470"),L.marker([-70.9556,-68.1378],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-70.9556,-68.1378")])}}),L.KSP.CelestialBody.MINMUS=L.KSP.celestialBody({id:"minmus",name:"Minmus",crs:L.KSP.CRS.EPSG4326,radius:6e4,addedOn:13682304e5,lastUpdated:13682304e5,thumbnail:"body-minmus.png",baseLayers:{Satellite:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SATELLITE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"sat",body:"minmus"}),"Color Relief":L.KSP.tileLayer(L.KSP.TileLayer.TYPE_COLORRELIEF,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"color",body:"minmus",legend:{"5750 m":"#414B41","2500 m":"#BEE6C3","1 m":"#96CDB4","0 m":"#87B9A5"}}),Slope:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SLOPE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"slope",body:"minmus",legend:L.KSP.Legend.SLOPE})},overlays:{Anomalies:L.KSP.layerGroup(L.KSP.LayerGroup.TYPE_ANOMALY,[L.marker([23.7768,60.0462],{icon:L.KSP.Icon.ANOMALY}).bindPopup("23.7768 : 60.0462")])}}),L.KSP.CelestialBody.DUNA=L.KSP.celestialBody({id:"duna",name:"Duna",crs:L.KSP.CRS.EPSG4326,radius:32e4,addedOn:13688352e5,lastUpdated:13688352e5,thumbnail:"body-duna.png",baseLayers:{Satellite:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SATELLITE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"sat",body:"duna"}),"Color Relief":L.KSP.tileLayer(L.KSP.TileLayer.TYPE_COLORRELIEF,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"color",body:"duna",legend:{"4800 m":"#C3A082","4000 m":"#966446","3000 m":"#733219","2000 m":"#501E14","1000 m":"#3C140F","0 m":"#280F0A"}}),Slope:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SLOPE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"slope",body:"duna",legend:L.KSP.Legend.SLOPE})},overlays:{Anomalies:L.KSP.layerGroup(L.KSP.LayerGroup.TYPE_ANOMALY,[L.marker([17.0483,-85.4717],{icon:L.KSP.Icon.ANOMALY}).bindPopup("17.0483 : -85.4717"),L.marker([-30.3525,-28.6828],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-30.3525 : -28.6828"),L.marker([-66.1344,-160.7432],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-66.1344 : -160.7432")])}}),L.KSP.CelestialBody.IKE=L.KSP.celestialBody({id:"ike",name:"Ike",crs:L.KSP.CRS.EPSG4326,radius:13e4,addedOn:13688352e5,lastUpdated:13688352e5,thumbnail:"body-ike.png",baseLayers:{Satellite:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SATELLITE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"sat",body:"ike"}),"Color Relief":L.KSP.tileLayer(L.KSP.TileLayer.TYPE_COLORRELIEF,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"color",body:"ike",legend:{"13000 m":"#828282","11000 m":"#6E6E6E","9000 m":"#5A5A5A","7000 m":"#464646","5000 m":"#323232","2500 m":"#191919","70 m":"#070707"}}),Slope:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SLOPE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"slope",body:"ike",legend:L.KSP.Legend.SLOPE})},overlays:{}}),L.KSP.CelestialBody.DRES=L.KSP.celestialBody({id:"dres",name:"Dres",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-dres.png"}),L.KSP.CelestialBody.JOOL=L.KSP.celestialBody({id:"jool",name:"Jool",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-jool.png"}),L.KSP.CelestialBody.LAYTHE=L.KSP.celestialBody({id:"laythe",name:"Laythe",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-laythe.png"}),L.KSP.CelestialBody.VALL=L.KSP.celestialBody({id:"vall",name:"Vall",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-vall.png"}),L.KSP.CelestialBody.TYLO=L.KSP.celestialBody({id:"tylo",name:"Tylo",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-tylo.png"}),L.KSP.CelestialBody.BOP=L.KSP.celestialBody({id:"bop",name:"Bop",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-bop.png"}),L.KSP.CelestialBody.POL=L.KSP.celestialBody({id:"pol",name:"Pol",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-pol.png"}),L.KSP.CelestialBody.EELOO=L.KSP.celestialBody({id:"eeloo",name:"Eeloo",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-eeloo.png"}),L.KSP.CelestialBody.KERBIN.defaultLayer=L.KSP.CelestialBody.KERBIN.baseLayers.Satellite,L.KSP.CelestialBody.MUN.defaultLayer=L.KSP.CelestialBody.MUN.baseLayers.Satellite,L.KSP.CelestialBody.MINMUS.defaultLayer=L.KSP.CelestialBody.MINMUS.baseLayers.Satellite,L.KSP.CelestialBody.EVE.children=[L.KSP.CelestialBody.GILLY],L.KSP.CelestialBody.KERBIN.children=[L.KSP.CelestialBody.MUN,L.KSP.CelestialBody.MINMUS],L.KSP.CelestialBody.DUNA.children=[L.KSP.CelestialBody.IKE],L.KSP.CelestialBody.JOOL.children=[L.KSP.CelestialBody.LAYTHE,L.KSP.CelestialBody.VALL,L.KSP.CelestialBody.TYLO,L.KSP.CelestialBody.BOP,L.KSP.CelestialBody.POL],L.KSP.CelestialBody.GILLY.parent=L.KSP.CelestialBody.EVE,L.KSP.CelestialBody.MUN.parent=L.KSP.CelestialBody.MINMUS.parent=L.KSP.CelestialBody.KERBIN,L.KSP.CelestialBody.IKE.parent=L.KSP.CelestialBody.DUNA,L.KSP.CelestialBody.LAYTHE.parent=L.KSP.CelestialBody.VALL.parent=L.KSP.CelestialBody.TYLO.parent=L.KSP.CelestialBody.BOP.parent=L.KSP.CelestialBody.POL.parent=L.KSP.CelestialBody.JOOL,L.KSP.CelestialBody.ALL_PLANETARY=[L.KSP.CelestialBody.MOHO,L.KSP.CelestialBody.EVE,L.KSP.CelestialBody.KERBIN,L.KSP.CelestialBody.DUNA,L.KSP.CelestialBody.DRES,L.KSP.CelestialBody.JOOL,L.KSP.CelestialBody.EELOO],L.KSP.Map.addInitHook(function(){this.options.layers=[L.KSP.CelestialBody.KERBIN]})}(this,document); +var Settings = Class.create({ + initialize: function(defaultHost, defaultPort){ + if(!this.getHost()){ this.setHost(defaultHost)} + if(!this.getPort()){ this.setPort(defaultPort)} + }, + + getHost: function(){ + return this.get('host') + }, + + getPort: function(){ + return this.get('port') + }, + + setHost: function(value){ + return this.set('host', value) + }, + + setPort: function(value){ + return this.set('port', value) + }, + + get: function(property){ + return localStorage.getItem(property) + }, + + set: function(property, value){ + return localStorage.setItem(property, value) + } +}) +var Telemachus = Class.create({ + initialize: function(host, port){ + this.updateConnection(host, port) + this.receiverFunctions = [] + this.subscribedFields = {} + this.orbitingBodies = this.getOrbitalBodies() + this.rate = 500 + + this.loopTimeout = setTimeout(this.poll.bind(this), this.rate) + }, + + url: function(){ + return "http://" + this.host + ":" + this.port + "/telemachus/datalink" + }, + + updateConnection: function(host, port){ + this.host = host + this.port = port + }, + + addReceiverFunction: function(func){ + this.receiverFunctions.push(func) + }, + + subscribeToData: function(fields){ + for (var i = fields.length - 1; i >= 0; i--) { + var field = fields[i] + this.subscribedFields[field] = field + }; + }, + + dispatchMessages: function(data){ + for (var i = this.receiverFunctions.length - 1; i >= 0; i--) { + try{ + this.receiverFunctions[i](data) + } catch(e){ + console.error(e) + } + }; + }, + + send: function(message){ + this.socket.send(JSON.stringify(message)) + }, + + getOrbitalBodyInfo: function(name){ + var properties = this.orbitingBodies[name] + + if(properties){ + return Object.extend({name: name}, properties) + } else{ + return null + } + }, + + notifyIfLOS: function(request){ + if(request.transport.status == 0){ + document.fire('telemachus:loss-of-signal') + return true + } + return false + }, + + prepareParams: function(params){ + var normalizedParams = [] + Object.keys(params).forEach(function(field){ + var sanitizedFieldName = field.replace("[", "{").replace("]","}") + normalizedParams.push(sanitizedFieldName + "=" + field) + }) + return normalizedParams + }, + + convertData: function(rawData){ + var data = {} + var startBracesRegexp = /\{/g + var endBracesRegexp = /\}/g + + Object.keys(rawData).forEach(function(key){ + var convertedFieldName = key.replace(startBracesRegexp, "[").replace(endBracesRegexp, "]") + data[convertedFieldName] = rawData[key] + }) + + return data + }, + + poll: function(){ + var params = this.prepareParams(this.subscribedFields) + var requestURL = this.url() + "?" + params.join("&") + + new Ajax.Request(requestURL, { + method: "get", + onSuccess: function(response){ + var rawData = JSON.parse(response.responseText) + var data = this.convertData(rawData) + + this.dispatchMessages(data) + }.bind(this), + onException: this.notifyIfLOS.bind(this), + onComplete: function(response){ + setTimeout(this.poll.bind(this),this.rate); + }.bind(this) + }) + }, + + sendMessage: function(params, callback){ + new Ajax.Request(this.url(), { + method: "post", + postBody: JSON.stringify(params), + // parameters: params, + onSuccess: function(response){ + var rawData = JSON.parse(response.responseText) + var data = this.convertData(rawData) + callback(data) + }.bind(this), + onException: this.notifyIfLOS.bind(this) + }) + }, + + cameraURL: function(){ + return "http://" + this.host + ":" + this.port + "/telemachus/cameras" + }, + + getCameraList: function(callback){ + new Ajax.Request(this.cameraURL(), { + method: "get", + // parameters: params, + onSuccess: function(response){ + var data = JSON.parse(response.responseText) + callback(data) + }.bind(this), + onException: this.notifyIfLOS.bind(this) + }) + }, + + getOrbitalBodies: function(){ + return { + "Sun" : { + id: 0, + referenceBodyName: null, + mapBody: null, + atmosphericRadius: 0, + color: '#FFFF00', + surfaceGravity: 17.1 //m/s^2, + }, + "Kerbin" : { + id: 1, + referenceBodyName: "Sun", + mapBody: L.KSP.CelestialBody.KERBIN, + atmosphericRadius: 70000, + color: '#4a5472', + surfaceGravity: 9.81 //m/s^2 + }, + "Mun" : { + id: 2, + referenceBodyName: "Kerbin", + mapBody: L.KSP.CelestialBody.MUN, + atmosphericRadius: 0, + color: '#e2e0d7', + surfaceGravity: 1.63 //m/s^2 + }, + "Minmus" : { + id: 3, + referenceBodyName: "Kerbin", + mapBody: L.KSP.CelestialBody.MINMUS, + color: '#98f2c5', + atmosphericRadius: 0, + surfaceGravity: 0.491 //m/s^2 + }, + "Moho" : { + id: 4, + referenceBodyName: "Sun", + mapBody: L.KSP.CelestialBody.MOHO, + atmosphericRadius: 0, + color: '#fdc39e', + surfaceGravity: 2.70 //m/s^2 + }, + "Eve" : { + id: 5, + referenceBodyName: "Sun", + mapBody: L.KSP.CelestialBody.EVE, + atmosphericRadius: 90000, + color: '#c394fe', + surfaceGravity: 16.7 //m/s^2 + }, + "Duna" : { + id: 6, + referenceBodyName: "Sun", + mapBody: L.KSP.CelestialBody.DUNA, + atmosphericRadius: 50000, + color: '#fc5e49', + surfaceGravity: 2.94 //m/s^2 + }, + "Ike" : { + id: 7, + referenceBodyName: "Duna", + mapBody: L.KSP.CelestialBody.IKE, + atmosphericRadius: 0, + color: '#e2e0d7', + surfaceGravity: 1.10 //m/s^2 + }, + "Jool" : { + id: 8, + referenceBodyName: "Sun", + mapBody: L.KSP.CelestialBody.JOOL, + atmosphericRadius: 200000, + color: '#C5DCAB', + surfaceGravity: 7.85 //m/s^2 + }, + "Laythe" : { + id: 9, + referenceBodyName: "Jool", + mapBody: L.KSP.CelestialBody.LAYTHE, + atmosphericRadius: 50000, + color: '#a8b4fe', + surfaceGravity: 7.85 //m/s^2 + }, + "Vall" : { + id: 10, + referenceBodyName: "Jool", + mapBody: L.KSP.CelestialBody.VALL, + atmosphericRadius: 0, + color: '#b0f4fe', + surfaceGravity: 2.31 //m/s^2 + }, + "Bop" : { + id: 11, + referenceBodyName: "Jool", + mapBody: L.KSP.CelestialBody.BOP, + atmosphericRadius: 0, + color: '#c64605', + surfaceGravity: 0.589 //m/s^2 + }, + "Tylo" : { + id: 12, + referenceBodyName: "Jool", + mapBody: L.KSP.CelestialBody.TYLO, + atmosphericRadius: 0, + color: '#fdf7ed', + surfaceGravity: 7.85 //m/s^2 + }, + "Gilly" : { + id: 13, + referenceBodyName: "Eve", + mapBody: L.KSP.CelestialBody.GILLY, + atmosphericRadius: 0, + color: '#fdcbb1', + surfaceGravity: 0.049 //m/s^2 + }, + "Pol" : { + id: 14, + referenceBodyName: "Pol", + mapBody: L.KSP.CelestialBody.POL, + atmosphericRadius: 0, + color: '#fec681', + surfaceGravity: 0.373 //m/s^2 + }, + "Dres" : { + id: 15, + referenceBodyName: "Sun", + mapBody: L.KSP.CelestialBody.DRES, + atmosphericRadius: 0, + color: '#fef8f9', + surfaceGravity: 1.13 //m/s^2 + }, + "Eeloo" : { + id: 16, + referenceBodyName: "Sun", + mapBody: L.KSP.CelestialBody.EELOO, + atmosphericRadius: 0, + color: '#e5fafe', + surfaceGravity: 1.69 //m/s^2 + } + } + } +}) +var TitleBar = Class.create({ + initialize: function(datalink, title_bar_id){ + this.datalink = datalink + this.title_bar_id = title_bar_id + this.title_bar = $(this.title_bar_id) + this.initializeLOSNotifier() + this.initializeDatalink() + }, + + update: function(data){ + window.requestAnimationFrame(function(){ + this.title_bar.down("#world-clock").update(TimeFormatters.formatUT(data["t.universalTime"])) + this.title_bar.down("#mission-time").update(TimeFormatters.formatMET(data["v.missionTime"])) + + this.title_bar.down("#mission-time").removeClassName("loss-of-signal") + }.bind(this)) + }, + + initializeLOSNotifier:function(){ + document.observe('telemachus:loss-of-signal', function(){ + window.requestAnimationFrame(function(){ + this.title_bar.down("#mission-time").update("⚠ LOS ⚠") + this.title_bar.down("#mission-time").addClassName("loss-of-signal") + }.bind(this)) + }.bind(this)) + }, + + initializeDatalink: function(){ + this.datalink.subscribeToData([ + 't.timeWarp', 't.universalTime', 'v.missionTime' + ]) + + this.datalink.addReceiverFunction(this.update.bind(this)) + }, +}) +var ButtonIndicator = Class.create({ + initialize: function(datalink, indicatorId, apiButtonString){ + this.datalink = datalink + this.indicatorId = indicatorId + this.indicator = $(this.indicatorId) + this.apiButtonString = apiButtonString + this.initializeDatalink() + }, + + update: function(data){ + if(data[this.apiButtonString] == true){ + this.indicator.addClassName("on") + } else{ + this.indicator.removeClassName("on") + } + }, + + initializeDatalink: function(){ + this.datalink.subscribeToData([this.apiButtonString]) + + this.datalink.addReceiverFunction(this.update.bind(this)) + }, +}) +var ReadoutTable = Class.create({ + initialize: function(datalink, tableId, dataRows){ + this.datalink = datalink + this.tableId = tableId + this.table = $(this.tableId) + this.dataRows = dataRows + this.initializeDatalink() + }, + + update: function(data){ + window.requestAnimationFrame(function(){ + this.dataRows.forEach(function(row){ + var rowId = row.label + var tableRow = this.table.down("tr[data-label='"+ rowId +"']") + + if(!tableRow){ + var tableRow = new Element("tr", { + "data-label" : rowId + }) + + tableRow.insert("" + row.label + "") + this.table.insert(tableRow) + } + + tableRow.down("td").update(row.formatter(data[row.value])) + }.bind(this)) + }.bind(this)) + }, + + initializeDatalink: function(){ + var dataValues = this.dataRows.map(function(dataRow){ + return dataRow.value + }) + + this.datalink.subscribeToData(dataValues) + + this.datalink.addReceiverFunction(this.update.bind(this)) + }, +}) +var ResourceMonitor = Class.create({ + initialize: function(datalink, resourceName, options){ + this.datalink = datalink + this.resourceName = resourceName + this.options = Object.extend({ + currentStageProgressBar: null, + totalProgressBar: null, + valuePrefix: null + }, options) + + this.resourceStrings = this.buildResourceStrings() + + this.initializeDatalink() + }, + + update: function(data){ + window.requestAnimationFrame(function(){ + if(this.options.totalProgressBar){ + this.options.totalProgressBar.value = data[this.resourceStrings.totalAvailable] + this.options.totalProgressBar.max = data[this.resourceStrings.totalMax] + } + + if(this.options.currentStageProgressBar){ + this.options.currentStageProgressBar.value = data[this.resourceStrings.currentStageAvailable] + this.options.currentStageProgressBar.max = data[this.resourceStrings.currentStageMax] + } + + this.updateValue("-total-value", data[this.resourceStrings.totalAvailable]) + this.updateValue("-total-max", data[this.resourceStrings.totalMax]) + + this.updateValue("-current-stage-value", data[this.resourceStrings.currentStageAvailable]) + this.updateValue("-current-stage-max", data[this.resourceStrings.currentStageMax]) + }.bind(this)) + }, + + updateValue: function(id, value){ + if($(this.options.valuePrefix + id)){ + if(value < 0){ + $(this.options.valuePrefix + id).update("NA") + } else{ + $(this.options.valuePrefix + id).update(value.toFixed(2)) + } + } + }, + + buildResourceStrings: function(){ + return { + totalAvailable: "r.resource["+ this.resourceName +"]", + totalMax: "r.resourceMax["+ this.resourceName +"]", + currentStageAvailable: "r.resourceCurrent["+ this.resourceName +"]", + currentStageMax: "r.resourceCurrentMax["+ this.resourceName +"]", + } + }, + + initializeDatalink: function(){ + this.datalink.subscribeToData([ + this.resourceStrings.totalAvailable, + this.resourceStrings.totalMax, + this.resourceStrings.currentStageAvailable, + this.resourceStrings.currentStageMax + ]) + + this.datalink.addReceiverFunction(this.update.bind(this)) + }, +}) +var DataTable = Class.create({ + initialize: function(tableID, dataRows){ + this.tableID = tableID + this.table = $(this.tableID) + this.dataRows = dataRows + }, + + update: function(){ + window.requestAnimationFrame(function(){ + this.dataRows.forEach(function(row){ + var rowId = row.label + var tableRow = this.table.down("tr[data-label='"+ rowId +"']") + + if(!tableRow){ + var tableRow = new Element("tr", { + "data-label" : rowId + }) + + tableRow.insert("" + row.label + "") + this.table.insert(tableRow) + } + + tableRow.down("td").update(row.value) + }.bind(this)) + }.bind(this)) + }, + + clear: function(){ + window.requestAnimationFrame(function(){ + this.dataRows = [] + this.table.innerHTML = "" + }.bind(this)) + } +}) +var AtmosphericDensityGauge = Class.create({ + initialize: function(datalink, gaugeID){ + this.datalink = datalink + this.gaugeID = gaugeID + this.gauge = $(this.gaugeID) + this.initializeDatalink() + this.func = function(x){return Math.log(2.0 * x)} + }, + + update: function(data){ + var max = this.func(100) + var value = this.func(data['v.atmosphericPressure'] * 100) + if(!isFinite(value)){ value = 0 } + + this.gauge.value = value + this.gauge.max = max + }, + + initializeDatalink: function(){ + this.datalink.subscribeToData(['v.atmosphericPressure']) + + this.datalink.addReceiverFunction(this.update.bind(this)) + }, +}) +var ThrottleGauge = Class.create({ + initialize: function(datalink, gaugeID){ + this.datalink = datalink + this.gaugeID = gaugeID + this.gauge = $(this.gaugeID) + this.initializeDatalink() + }, + + update: function(data){ + this.gauge.value = data['f.throttle'] * 100 + this.gauge.max = 100 + }, + + initializeDatalink: function(){ + this.datalink.subscribeToData(['f.throttle']) + + this.datalink.addReceiverFunction(this.update.bind(this)) + }, +}) +/* Chartist.js 0.9.4 + * Copyright © 2015 Gion Kunz + * Free to use under the WTFPL license. + * http://www.wtfpl.net/ + */ + +!function(a,b){"function"==typeof define&&define.amd?define([],function(){return a.Chartist=b()}):"object"==typeof exports?module.exports=b():a.Chartist=b()}(this,function(){var a={version:"0.9.4"};return function(a,b,c){"use strict";c.noop=function(a){return a},c.alphaNumerate=function(a){return String.fromCharCode(97+a%26)},c.extend=function(a){a=a||{};var b=Array.prototype.slice.call(arguments,1);return b.forEach(function(b){for(var d in b)"object"!=typeof b[d]||null===b[d]||b[d]instanceof Array?a[d]=b[d]:a[d]=c.extend({},a[d],b[d])}),a},c.replaceAll=function(a,b,c){return a.replace(new RegExp(b,"g"),c)},c.stripUnit=function(a){return"string"==typeof a&&(a=a.replace(/[^0-9\+-\.]/g,"")),+a},c.ensureUnit=function(a,b){return"number"==typeof a&&(a+=b),a},c.querySelector=function(a){return a instanceof Node?a:b.querySelector(a)},c.times=function(a){return Array.apply(null,new Array(a))},c.sum=function(a,b){return a+(b?b:0)},c.mapMultiply=function(a){return function(b){return b*a}},c.mapAdd=function(a){return function(b){return b+a}},c.serialMap=function(a,b){var d=[],e=Math.max.apply(null,a.map(function(a){return a.length}));return c.times(e).forEach(function(c,e){var f=a.map(function(a){return a[e]});d[e]=b.apply(null,f)}),d},c.roundWithPrecision=function(a,b){var d=Math.pow(10,b||c.precision);return Math.round(a*d)/d},c.precision=8,c.escapingMap={"&":"&","<":"<",">":">",'"':""","'":"'"},c.serialize=function(a){return null===a||void 0===a?a:("number"==typeof a?a=""+a:"object"==typeof a&&(a=JSON.stringify({data:a})),Object.keys(c.escapingMap).reduce(function(a,b){return c.replaceAll(a,b,c.escapingMap[b])},a))},c.deserialize=function(a){if("string"!=typeof a)return a;a=Object.keys(c.escapingMap).reduce(function(a,b){return c.replaceAll(a,c.escapingMap[b],b)},a);try{a=JSON.parse(a),a=void 0!==a.data?a.data:a}catch(b){}return a},c.createSvg=function(a,b,d,e){var f;return b=b||"100%",d=d||"100%",Array.prototype.slice.call(a.querySelectorAll("svg")).filter(function(a){return a.getAttributeNS("http://www.w3.org/2000/xmlns/",c.xmlNs.prefix)}).forEach(function(b){a.removeChild(b)}),f=new c.Svg("svg").attr({width:b,height:d}).addClass(e).attr({style:"width: "+b+"; height: "+d+";"}),a.appendChild(f._node),f},c.reverseData=function(a){a.labels.reverse(),a.series.reverse();for(var b=0;bf.high&&(f.high=c),h&&ck,m=e?c.rho(j.range):0;if(e&&c.projectLength(a,1,j)>=d)j.step=1;else if(e&&m=d)j.step=m;else for(;;){if(l&&c.projectLength(a,j.step,j)<=d)j.step*=2;else{if(l||!(c.projectLength(a,j.step/2,j)>=d))break;if(j.step/=2,e&&j.step%1!==0){j.step*=2;break}}if(i++>1e3)throw new Error("Exceeded maximum number of iterations while optimizing scale step!")}for(g=j.min,h=j.max;g+j.step<=j.low;)g+=j.step;for(;h-j.step>=j.high;)h-=j.step;for(j.min=g,j.max=h,j.range=j.max-j.min,j.values=[],f=j.min;f<=j.max;f+=j.step)j.values.push(c.roundWithPrecision(f));return j},c.polarToCartesian=function(a,b,c,d){var e=(d-90)*Math.PI/180;return{x:a+c*Math.cos(e),y:b+c*Math.sin(e)}},c.createChartRect=function(a,b,d){var e=!(!b.axisX&&!b.axisY),f=e?b.axisY.offset:0,g=e?b.axisX.offset:0,h=a.width()||c.stripUnit(b.width)||0,i=a.height()||c.stripUnit(b.height)||0,j=c.normalizePadding(b.chartPadding,d);h=Math.max(h,f+j.left+j.right),i=Math.max(i,g+j.top+j.bottom);var k={padding:j,width:function(){return this.x2-this.x1},height:function(){return this.y1-this.y2}};return e?("start"===b.axisX.position?(k.y2=j.top+g,k.y1=Math.max(i-j.bottom,k.y2+1)):(k.y2=j.top,k.y1=Math.max(i-j.bottom-g,k.y2+1)),"start"===b.axisY.position?(k.x1=j.left+f,k.x2=Math.max(h-j.right,k.x1+1)):(k.x1=j.left,k.x2=Math.max(h-j.right-f,k.x1+1))):(k.x1=j.left,k.x2=Math.max(h-j.right,k.x1+1),k.y2=j.top,k.y1=Math.max(i-j.bottom,k.y2+1)),k},c.createGrid=function(a,b,d,e,f,g,h,i){var j={};j[d.units.pos+"1"]=a,j[d.units.pos+"2"]=a,j[d.counterUnits.pos+"1"]=e,j[d.counterUnits.pos+"2"]=e+f;var k=g.elem("line",j,h.join(" "));i.emit("draw",c.extend({type:"grid",axis:d,index:b,group:g,element:k},j))},c.createLabel=function(a,b,d,e,f,g,h,i,j,k,l){var m,n={};if(n[f.units.pos]=a+h[f.units.pos],n[f.counterUnits.pos]=h[f.counterUnits.pos],n[f.units.len]=b,n[f.counterUnits.len]=g-10,k){var o=''+e[d]+"";m=i.foreignObject(o,c.extend({style:"overflow: visible;"},n))}else m=i.elem("text",n,j.join(" ")).text(e[d]);l.emit("draw",c.extend({type:"label",axis:f,index:d,group:i,element:m,text:e[d]},n))},c.getSeriesOption=function(a,b,c){if(a.name&&b.series&&b.series[a.name]){var d=b.series[a.name];return d.hasOwnProperty(c)?d[c]:b[c]}return b[c]},c.optionsProvider=function(b,d,e){function f(b){var f=h;if(h=c.extend({},j),d)for(i=0;i1){var i=[];return h.forEach(function(a){i.push(g(a.pathCoordinates,a.valueData))}),c.Svg.Path.join(i)}if(a=h[0].pathCoordinates,d=h[0].valueData,a.length<=4)return c.Interpolation.none()(a,d);for(var j,k=(new c.Svg.Path).move(a[0],a[1],!1,d[0]),l=0,m=a.length;m-2*!j>l;l+=2){var n=[{x:+a[l-2],y:+a[l-1]},{x:+a[l],y:+a[l+1]},{x:+a[l+2],y:+a[l+3]},{x:+a[l+4],y:+a[l+5]}];j?l?m-4===l?n[3]={x:+a[0],y:+a[1]}:m-2===l&&(n[2]={x:+a[0],y:+a[1]},n[3]={x:+a[2],y:+a[3]}):n[0]={x:+a[m-2],y:+a[m-1]}:m-4===l?n[3]=n[2]:l||(n[0]={x:+a[l],y:+a[l+1]}),k.curve(e*(-n[0].x+6*n[1].x+n[2].x)/6+f*n[2].x,e*(-n[0].y+6*n[1].y+n[2].y)/6+f*n[2].y,e*(n[1].x+6*n[2].x-n[3].x)/6+f*n[2].x,e*(n[1].y+6*n[2].y-n[3].y)/6+f*n[2].y,n[2].x,n[2].y,!1,d[(l+2)/2])}return k}},c.Interpolation.step=function(a){var b={postpone:!0};return a=c.extend({},b,a),function(b,d){for(var e=new c.Svg.Path,f=!0,g=2;g1}).map(function(a){var b=a.pathElements[0],c=a.pathElements[a.pathElements.length-1];return a.clone(!0).position(0).remove(1).move(b.x,r).line(b.x,b.y).position(a.pathElements.length+1).line(c.x,r)}).forEach(function(h){var k=i.elem("path",{d:h.stringify()},a.classNames.area,!0).attr({values:b.normalized[g]},c.xmlNs.uri);this.eventEmitter.emit("draw",{type:"area",values:b.normalized[g],path:h.clone(),series:f,seriesIndex:g,axisX:d,axisY:e,chartRect:j,index:g,group:i,element:k})}.bind(this))}}.bind(this)),this.eventEmitter.emit("created",{bounds:e.bounds,chartRect:j,axisX:d,axisY:e,svg:this.svg,options:a})}function e(a,b,d,e){c.Line["super"].constructor.call(this,a,b,f,c.extend({},f,d),e)}var f={axisX:{offset:30,position:"end",labelOffset:{x:0,y:0},showLabel:!0,showGrid:!0,labelInterpolationFnc:c.noop,type:void 0},axisY:{offset:40,position:"start",labelOffset:{x:0,y:0},showLabel:!0,showGrid:!0,labelInterpolationFnc:c.noop,type:void 0,scaleMinSpace:20,onlyInteger:!1},width:void 0,height:void 0,showLine:!0,showPoint:!0,showArea:!1,areaBase:0,lineSmooth:!0,low:void 0,high:void 0,chartPadding:{top:15,right:15,bottom:5,left:10},fullWidth:!1,reverseData:!1,classNames:{chart:"ct-chart-line",label:"ct-label",labelGroup:"ct-labels",series:"ct-series",line:"ct-line",point:"ct-point",area:"ct-area",grid:"ct-grid",gridGroup:"ct-grids",vertical:"ct-vertical",horizontal:"ct-horizontal",start:"ct-start",end:"ct-end"}};c.Line=c.Base.extend({constructor:e,createChart:d})}(window,document,a),function(a,b,c){"use strict";function d(a){var b,d={raw:this.data,normalized:a.distributeSeries?c.getDataArray(this.data,a.reverseData,a.horizontalBars?"x":"y").map(function(a){return[a]}):c.getDataArray(this.data,a.reverseData,a.horizontalBars?"x":"y")};this.svg=c.createSvg(this.container,a.width,a.height,a.classNames.chart+(a.horizontalBars?" "+a.classNames.horizontalBars:""));var e=this.svg.elem("g").addClass(a.classNames.gridGroup),g=this.svg.elem("g"),h=this.svg.elem("g").addClass(a.classNames.labelGroup);if(a.stackBars){var i=c.serialMap(d.normalized,function(){return Array.prototype.slice.call(arguments).map(function(a){return a}).reduce(function(a,b){return{x:a.x+b.x||0,y:a.y+b.y||0}},{x:0,y:0})});b=c.getHighLow([i],c.extend({},a,{referenceValue:0}),a.horizontalBars?"x":"y")}else b=c.getHighLow(d.normalized,c.extend({},a,{referenceValue:0}),a.horizontalBars?"x":"y");b.high=+a.high||(0===a.high?0:b.high),b.low=+a.low||(0===a.low?0:b.low);var j,k,l,m,n,o=c.createChartRect(this.svg,a,f.padding);k=a.distributeSeries&&a.stackBars?d.raw.labels.slice(0,1):d.raw.labels,a.horizontalBars?(j=m=void 0===a.axisX.type?new c.AutoScaleAxis(c.Axis.units.x,d,o,c.extend({},a.axisX,{highLow:b,referenceValue:0})):a.axisX.type.call(c,c.Axis.units.x,d,o,c.extend({},a.axisX,{highLow:b,referenceValue:0})),l=n=void 0===a.axisY.type?new c.StepAxis(c.Axis.units.y,d,o,{ticks:k}):a.axisY.type.call(c,c.Axis.units.y,d,o,a.axisY)):(l=m=void 0===a.axisX.type?new c.StepAxis(c.Axis.units.x,d,o,{ticks:k}):a.axisX.type.call(c,c.Axis.units.x,d,o,a.axisX),j=n=void 0===a.axisY.type?new c.AutoScaleAxis(c.Axis.units.y,d,o,c.extend({},a.axisY,{highLow:b,referenceValue:0})):a.axisY.type.call(c,c.Axis.units.y,d,o,c.extend({},a.axisY,{highLow:b,referenceValue:0})));var p=a.horizontalBars?o.x1+j.projectValue(0):o.y1-j.projectValue(0),q=[];l.createGridAndLabels(e,h,this.supportsForeignObject,a,this.eventEmitter),j.createGridAndLabels(e,h,this.supportsForeignObject,a,this.eventEmitter),d.raw.series.forEach(function(b,e){var f,h,i=e-(d.raw.series.length-1)/2;f=a.distributeSeries&&!a.stackBars?l.axisLength/d.normalized.length/2:a.distributeSeries&&a.stackBars?l.axisLength/2:l.axisLength/d.normalized[e].length/2,h=g.elem("g"),h.attr({"series-name":b.name,meta:c.serialize(b.meta)},c.xmlNs.uri),h.addClass([a.classNames.series,b.className||a.classNames.series+"-"+c.alphaNumerate(e)].join(" ")),d.normalized[e].forEach(function(g,k){var r,s,t,u;if(u=a.distributeSeries&&!a.stackBars?e:a.distributeSeries&&a.stackBars?0:k,r=a.horizontalBars?{x:o.x1+j.projectValue(g&&g.x?g.x:0,k,d.normalized[e]),y:o.y1-l.projectValue(g&&g.y?g.y:0,u,d.normalized[e])}:{x:o.x1+l.projectValue(g&&g.x?g.x:0,u,d.normalized[e]),y:o.y1-j.projectValue(g&&g.y?g.y:0,k,d.normalized[e])},l instanceof c.StepAxis&&(l.options.stretch||(r[l.units.pos]+=f*(a.horizontalBars?-1:1)),r[l.units.pos]+=a.stackBars||a.distributeSeries?0:i*a.seriesBarDistance*(a.horizontalBars?-1:1)),t=q[k]||p,q[k]=t-(p-r[l.counterUnits.pos]),void 0!==g){var v={};v[l.units.pos+"1"]=r[l.units.pos],v[l.units.pos+"2"]=r[l.units.pos],v[l.counterUnits.pos+"1"]=a.stackBars?t:p,v[l.counterUnits.pos+"2"]=a.stackBars?q[k]:r[l.counterUnits.pos],v.x1=Math.min(Math.max(v.x1,o.x1),o.x2),v.x2=Math.min(Math.max(v.x2,o.x1),o.x2),v.y1=Math.min(Math.max(v.y1,o.y2),o.y1),v.y2=Math.min(Math.max(v.y2,o.y2),o.y1),s=h.elem("line",v,a.classNames.bar).attr({value:[g.x,g.y].filter(function(a){return a}).join(","),meta:c.getMetaData(b,k)},c.xmlNs.uri), +this.eventEmitter.emit("draw",c.extend({type:"bar",value:g,index:k,meta:c.getMetaData(b,k),series:b,seriesIndex:e,axisX:m,axisY:n,chartRect:o,group:h,element:s},v))}}.bind(this))}.bind(this)),this.eventEmitter.emit("created",{bounds:j.bounds,chartRect:o,axisX:m,axisY:n,svg:this.svg,options:a})}function e(a,b,d,e){c.Bar["super"].constructor.call(this,a,b,f,c.extend({},f,d),e)}var f={axisX:{offset:30,position:"end",labelOffset:{x:0,y:0},showLabel:!0,showGrid:!0,labelInterpolationFnc:c.noop,scaleMinSpace:30,onlyInteger:!1},axisY:{offset:40,position:"start",labelOffset:{x:0,y:0},showLabel:!0,showGrid:!0,labelInterpolationFnc:c.noop,scaleMinSpace:20,onlyInteger:!1},width:void 0,height:void 0,high:void 0,low:void 0,onlyInteger:!1,chartPadding:{top:15,right:15,bottom:5,left:10},seriesBarDistance:15,stackBars:!1,horizontalBars:!1,distributeSeries:!1,reverseData:!1,classNames:{chart:"ct-chart-bar",horizontalBars:"ct-horizontal-bars",label:"ct-label",labelGroup:"ct-labels",series:"ct-series",bar:"ct-bar",grid:"ct-grid",gridGroup:"ct-grids",vertical:"ct-vertical",horizontal:"ct-horizontal",start:"ct-start",end:"ct-end"}};c.Bar=c.Base.extend({constructor:e,createChart:d})}(window,document,a),function(a,b,c){"use strict";function d(a,b,c){var d=b.x>a.x;return d&&"explode"===c||!d&&"implode"===c?"start":d&&"implode"===c||!d&&"explode"===c?"end":"middle"}function e(a){var b,e,f,h,i,j=[],k=a.startAngle,l=c.getDataArray(this.data,a.reverseData);this.svg=c.createSvg(this.container,a.width,a.height,a.donut?a.classNames.chartDonut:a.classNames.chartPie),e=c.createChartRect(this.svg,a,g.padding),f=Math.min(e.width()/2,e.height()/2),i=a.total||l.reduce(function(a,b){return a+b},0),f-=a.donut?a.donutWidth/2:0,h="outside"===a.labelPosition||a.donut?f:"center"===a.labelPosition?0:f/2,h+=a.labelOffset;var m={x:e.x1+e.width()/2,y:e.y2+e.height()/2},n=1===this.data.series.filter(function(a){return a.hasOwnProperty("value")?0!==a.value:0!==a}).length;a.showLabel&&(b=this.svg.elem("g",null,null,!0));for(var o=0;o180,0,r.x,r.y);a.donut||t.line(m.x,m.y);var u=j[o].elem("path",{d:t.stringify()},a.donut?a.classNames.sliceDonut:a.classNames.slicePie);if(u.attr({value:l[o],meta:c.serialize(p.meta)},c.xmlNs.uri),a.donut&&u.attr({style:"stroke-width: "+ +a.donutWidth+"px"}),this.eventEmitter.emit("draw",{type:"slice",value:l[o],totalDataSum:i,index:o,meta:p.meta,series:p,group:j[o],element:u,path:t.clone(),center:m,radius:f,startAngle:k,endAngle:q}),a.showLabel){var v=c.polarToCartesian(m.x,m.y,h,k+(q-k)/2),w=a.labelInterpolationFnc(this.data.labels?this.data.labels[o]:l[o],o);if(w||0===w){var x=b.elem("text",{dx:v.x,dy:v.y,"text-anchor":d(m,v,a.labelDirection)},a.classNames.label).text(""+w);this.eventEmitter.emit("draw",{type:"label",index:o,group:b,element:x,text:""+w,x:v.x,y:v.y})}}k=q}this.eventEmitter.emit("created",{chartRect:e,svg:this.svg,options:a})}function f(a,b,d,e){c.Pie["super"].constructor.call(this,a,b,g,c.extend({},g,d),e)}var g={width:void 0,height:void 0,chartPadding:5,classNames:{chartPie:"ct-chart-pie",chartDonut:"ct-chart-donut",series:"ct-series",slicePie:"ct-slice-pie",sliceDonut:"ct-slice-donut",label:"ct-label"},startAngle:0,total:void 0,donut:!1,donutWidth:60,showLabel:!0,labelOffset:0,labelPosition:"inside",labelInterpolationFnc:c.noop,labelDirection:"neutral",reverseData:!1};c.Pie=c.Base.extend({constructor:f,createChart:e,determineAnchorPosition:d})}(window,document,a),a}); +/* + Graticule plugin for Leaflet powered maps. +*/ +L.Graticule = L.GeoJSON.extend({ + + options: { + style: { + color: '#333', + weight: 1 + }, + interval: 20 + }, + + initialize: function (options) { + L.Util.setOptions(this, options); + this._layers = {}; + + if (this.options.sphere) { + this.addData(this._getFrame()); + } else { + this.addData(this._getGraticule()); + } + }, + + _getFrame: function() { + return { "type": "Polygon", + "coordinates": [ + this._getMeridian(-180).concat(this._getMeridian(180).reverse()) + ] + }; + }, + + _getGraticule: function () { + var features = [], interval = this.options.interval; + + // Meridians + for (var lng = 0; lng <= 180; lng = lng + interval) { + features.push(this._getFeature(this._getMeridian(lng), { + "name": (lng) ? lng.toString() + "° E" : "Prime meridian" + })); + if (lng !== 0) { + features.push(this._getFeature(this._getMeridian(-lng), { + "name": lng.toString() + "° W" + })); + } + } + + // Parallels + for (var lat = 0; lat <= 90; lat = lat + interval) { + features.push(this._getFeature(this._getParallel(lat), { + "name": (lat) ? lat.toString() + "° N" : "Equator" + })); + if (lat !== 0) { + features.push(this._getFeature(this._getParallel(-lat), { + "name": lat.toString() + "° S" + })); + } + } + + return { + "type": "FeatureCollection", + "features": features + }; + }, + + _getMeridian: function (lng) { + lng = this._lngFix(lng); + var coords = []; + for (var lat = -90; lat <= 90; lat++) { + coords.push([lng, lat]); + } + return coords; + }, + + _getParallel: function (lat) { + var coords = []; + for (var lng = -180; lng <= 180; lng++) { + coords.push([this._lngFix(lng), lat]); + } + return coords; + }, + + _getFeature: function (coords, prop) { + return { + "type": "Feature", + "geometry": { + "type": "LineString", + "coordinates": coords + }, + "properties": prop + }; + }, + + _lngFix: function (lng) { + if (lng >= 180) return 179.999999; + if (lng <= -180) return -179.999999; + return lng; + } + +}); + +L.graticule = function (options) { + return new L.Graticule(options); +}; +var PositionMap = Class.create({ + initialize: function(datalink, mapId, options){ + this.datalink = datalink + this.mapId = mapId + this.noMapIndicatorId = (mapId + '-no-map') + this.previousBody = "KERBIN" + this.options = Object.extend({ + lockOnVessel: true + }, options) + this.initializeMap() + this.initializeNoMapIndicator() + this.initializeDatalink() + }, + + update: function(data){ + window.requestAnimationFrame(function(){ + if(this.isMapAvailable(data)){ + this.showMap() + this.updateBodyIfNecessary(data) + this.setCoordinatesForMapObject(this.coordinates, data['v.lat'], data['v.long']) + if(this.options.lockOnVessel){ + this.map.panTo([data['v.lat'], data['v.long']]) + } + } else{ + this.hideMap() + } + }.bind(this)) + }, + + updateBodyIfNecessary: function(data){ + var bodyName = data['v.body'].toUpperCase() + if(this.previousBody != bodyName){ + newBody = L.KSP.CelestialBody[bodyName]; + newBody.addTo(this.map); + this.previousBody = bodyName; + } + }, + + initializeMap: function(){ + this.map = new L.KSP.Map(this.mapId, { + layers: [L.KSP.CelestialBody[this.previousBody.toUpperCase()]], + zoom: 'fit', + bodyControl: false, + layerControl: true, + scaleControl: true + }) + + this.map.fitWorld() + + L.graticule().addTo(this.map) + + var circleMarkerOptions = { + // fill: false, + color: '#FD7E23', + opacity: 1.0, + fillOpacity: 1.0, + radius: 5 + } + + this.coordinates = L.circleMarker([0, 0], circleMarkerOptions) + this.coordinates.addTo(this.map) + }, + + convertCoordinatesToMap: function(latitude, longitude){ + return [latitude, longitude > 180 ? longitude - 360 : longitude] + }, + + setCoordinatesForMapObject: function(object, latitude, longitude){ + var convertedCoordinates = this.convertCoordinatesToMap(latitude, longitude) + object.setLatLng([convertedCoordinates[0], convertedCoordinates[1]]) + }, + + isMapAvailable: function(data){ + return data['v.body'].toUpperCase() != "SUN" + }, + + hideMap: function(){ + $(this.mapId).hide() + this.noMapIndicator.removeClassName("hidden") + }, + + showMap: function(){ + $(this.mapId).show() + this.noMapIndicator.addClassName("hidden") + }, + + initializeNoMapIndicator: function(){ + this.noMapIndicator = $(this.noMapIndicatorId) + }, + + initializeDatalink: function(){ + this.datalink.subscribeToData(['v.lat', 'v.long', 'v.body']) + + this.datalink.addReceiverFunction(this.update.bind(this)) + } +}) +var OrbitalPositionData = Class.create({ + initialize: function(datalink, options){ + this.datalink = datalink + this.initializeDatalink() + this.timeoutRate = 1000 //times out every 5 seconds + this.mutexTimestamp = null + this.rootReferenceBody = null + this.options = Object.extend({ + onRecalculate: null, + numberOfSegments: 120 + }, options) + }, + + isLocked: function(){ + this.mutexTimestamp && this.mutexTimestamp < ((Date.now() / 1000 | 0) + this.timeoutRate) + }, + + mutexLock: function(){ + this.mutexTimestamp = Date.now() + }, + + mutexUnlock: function(){ + this.mutexTimestamp = null + }, + + recalculate: function(data){ + if(this.isLocked()){return} + this.mutexLock() + Object.extend(data, { + "currentUniversalTime": this.adjustUniversalTime(data['t.universalTime']), + "vesselBody": data['v.body'], + "vesselCurrentPosition": { "relativePosition": null }, + "targetCurrentPosition": { "relativePosition": null }, + }) + this.getPositionsAndRecalculate(data) + }, + + getPositionsAndRecalculate: function(positionData){ + var requestParams = {}; + //ask for the true position for the current body right now and the radius + var referenceBody = this.datalink.getOrbitalBodyInfo(positionData["vesselBody"]) + this.rootReferenceBody = referenceBody + requestParams["currentReferenceBodyRadius"] = 'b.radius[' + referenceBody.id + ']' + requestParams["currentReferenceBodyTruePosition"] = 'b.o.truePositionAtUT[' + referenceBody.id + ',' + positionData["currentUniversalTime"] + ']' + //ask for the relative position of the vessel in the current orbit patch at the current time + requestParams["vesselCurrentPositionRelativePosition"] = "o.relativePositionAtUTForOrbitPatch[" + 0 +","+ positionData["currentUniversalTime"] + "]" + + this.buildRelativePositionRequestsForOrbitPatches(requestParams, "vesselCurrentOrbit", positionData['o.orbitPatches'], positionData["currentUniversalTime"]) + this.buildRelativePositionRequestsForManeuverNodeOrbitPatches(requestParams, "vesselManeuverNodes", positionData['o.maneuverNodes'], positionData["currentUniversalTime"]) + + if(positionData['tar.type']){ + if(positionData['tar.o.orbitPatches'] && positionData['tar.o.orbitPatches'].length > 0){ + this.buildRelativePositionRequestsForOrbitPatches(requestParams, "targetCurrentOrbit", positionData['tar.o.orbitPatches'], positionData["currentUniversalTime"], 'tar.o') + requestParams["targetCurrentPositionRelativePosition"] = "tar.o.relativePositionAtUTForOrbitPatch[" + 0 +","+ positionData["currentUniversalTime"] + "]" + } else{ + var body = this.datalink.getOrbitalBodyInfo(positionData['tar.name']) + requestParams[body.name + "[metadata]radius"] = 'b.radius[' + body.id + ']' + requestParams[body.name + "["+ positionData["currentUniversalTime"] +"]TruePosition"] = 'b.o.truePositionAtUT[' + body.id + ',' + positionData["currentUniversalTime"] + ']' + requestParams[body.name + "[metadata]currentTruePosition"] = 'b.o.truePositionAtUT[' + body.id + ',' + positionData["currentUniversalTime"] + ']' + } + } + + this.datalink.sendMessage(requestParams, function(data){ + positionData["currentReferenceBodyRadius"] = data["currentReferenceBodyRadius"] + positionData["currentReferenceBodyTruePosition"] = data["currentReferenceBodyTruePosition"] + + this.buildReferenceBodyPositionData(data, positionData) + this.buildReferenceBodyMetadata(data, positionData) + + positionData["vesselCurrentPosition"]["relativePosition"] = data["vesselCurrentPositionRelativePosition"] + this.buildRelativePositionPositionDataForOrbitPatches(data, positionData, "vesselCurrentOrbit", 'o.orbitPatches') + + if(positionData['o.maneuverNodes']){ + this.buildRelativePositionPositionDataForManeuverNodeOrbitPatches(data, positionData, "vesselManeuverNodes", 'o.maneuverNodes') + } + + if(positionData['tar.o.orbitPatches']){ + this.buildRelativePositionPositionDataForOrbitPatches(data, positionData, "targetCurrentOrbit", 'tar.o.orbitPatches', 'tar.o') + positionData["targetCurrentPosition"]["relativePosition"] = data["targetCurrentPositionRelativePosition"] + } + + this.mutexUnlock() + this.options.onRecalculate && this.options.onRecalculate(positionData) + }.bind(this)) + }, + + buildRelativePositionRequestsForOrbitPatches: function(requestParams, orbitPatchType, orbitPatches, currentUniversalTime, requestPrefix){ + requestPrefix = requestPrefix || 'o' + for (var i = 0; i < orbitPatches.length; i++) { + var orbitPatch = orbitPatches[i] + + // get the start and the end universal times for the patch + var startUT = this.adjustUniversalTime(orbitPatch["startUT"]) + var endUT = this.adjustUniversalTime(orbitPatch["endUT"]) + + //ask for the true position for the current body right now and the radius + var referenceBody = this.datalink.getOrbitalBodyInfo(orbitPatch["referenceBody"]) + + var timeInterval = (endUT-startUT)/this.options.numberOfSegments + var UTForInterval = null + for(var j = 0; j < this.options.numberOfSegments; j++){ + UTForInterval = this.adjustUniversalTime(startUT + (timeInterval * j)) + if(UTForInterval > endUT){ + UTForInterval = endUT + } + + //get the true position of the root reference body at this UT as well + requestParams[this.rootReferenceBody.name + "["+ UTForInterval +"]TruePosition"] = 'b.o.truePositionAtUT[' + this.rootReferenceBody.id + ',' + UTForInterval + ']' + + requestParams[orbitPatchType + "[" + i + "][" + UTForInterval + "]RelativePosition"] = requestPrefix + ".relativePositionAtUTForOrbitPatch[" + i +","+ UTForInterval + "]" + requestParams[orbitPatch["referenceBody"] + "["+ UTForInterval +"]TruePosition"] = 'b.o.truePositionAtUT[' + referenceBody.id + ',' + UTForInterval + ']' + } + + requestParams[orbitPatch["referenceBody"] + "[metadata]radius"] = 'b.radius[' + referenceBody.id + ']' + requestParams[orbitPatch["referenceBody"] + "[metadata]currentTruePosition"] = 'b.o.truePositionAtUT[' + referenceBody.id + ',' + currentUniversalTime + ']' + } + }, + + buildRelativePositionRequestsForManeuverNodeOrbitPatches: function(requestParams, maneuverNodeType, maneuverNodes, currentUniversalTime){ + var requestPrefix = "o.maneuverNodes.relativePositionAtUTForManeuverNodesOrbitPatch" + for (var i = 0; i < maneuverNodes.length; i++) { + var maneuverNode = maneuverNodes[i] + + /* + "apistring": "o.maneuverNodes.relativePositionAtUTForManeuverNodesOrbitPatch", + "name": "For a maneuver node, The orbit patch's True Anomaly at Universal Time [int id, orbit patch index, universal time]", + "units": "DEG", + "plotable": true + */ + + var labelPrefix = maneuverNodeType + "[" + i + "]" + + for (var j = 0; j < maneuverNode['orbitPatches'].length; j++) { + var orbitPatch = maneuverNode['orbitPatches'][j] + + // get the start and the end universal times for the patch + var startUT = this.adjustUniversalTime(orbitPatch["startUT"]) + var endUT = this.adjustUniversalTime(orbitPatch["endUT"]) + var period = this.adjustUniversalTime(orbitPatch["period"]) + var endTransition = this.adjustUniversalTime(orbitPatch["patchEndTransition"]) + + //ask for the true position for the current body right now and the radius + var referenceBody = this.datalink.getOrbitalBodyInfo(orbitPatch["referenceBody"]) + var expectedUT = startUT + period + + if(expectedUT < endUT && endTransition == "MANEUVER"){ + var timeInterval = (expectedUT - startUT)/this.options.numberOfSegments + } else{ + var timeInterval = (endUT-startUT)/this.options.numberOfSegments + } + + var UTForInterval = null + for(var k = 0; k < this.options.numberOfSegments; k++){ + UTForInterval = this.adjustUniversalTime((UTForInterval || startUT) + timeInterval) + if(UTForInterval > endUT){ + UTForInterval = endUT + } + + var args = [i,j,UTForInterval] + + //get the true position of the root reference body at this UT as well + requestParams[this.rootReferenceBody.name + "["+ UTForInterval +"]TruePosition"] = 'b.o.truePositionAtUT[' + this.rootReferenceBody.id + ',' + UTForInterval + ']' + + requestParams[labelPrefix + "[" + j + "][" + UTForInterval + "]RelativePosition"] = requestPrefix + "[" + args.join(',') + "]" + requestParams[orbitPatch["referenceBody"] + "["+ UTForInterval +"]TruePosition"] = 'b.o.truePositionAtUT[' + referenceBody.id + ',' + UTForInterval + ']' + } + + requestParams[orbitPatch["referenceBody"] + "[metadata]radius"] = 'b.radius[' + referenceBody.id + ']' + requestParams[orbitPatch["referenceBody"] + "[metadata]currentTruePosition"] = 'b.o.truePositionAtUT[' + referenceBody.id + ',' + currentUniversalTime + ']' + } + }; + }, + + buildRelativePositionPositionDataForOrbitPatches: function(rawData, positionData, orbitPatchType, orbitPatchesKey){ + var relativePositionFieldRegex = new RegExp(orbitPatchType + "\\[(\\d+)\\]\\[([\\d\\.]+)\\]RelativePosition") + var orbitPatches = positionData[orbitPatchesKey] = positionData[orbitPatchesKey] || {} + + var rawDataKeys = Object.keys(rawData) + for (var i = rawDataKeys.length - 1; i >= 0; i--) { + var key = rawDataKeys[i] + if(relativePositionFieldRegex.test(key)){ + var matchParts = relativePositionFieldRegex.exec(key) + var orbitPatchIndex = parseInt(matchParts[1]) + var universalTime = matchParts[2] + var relativePosition = rawData[key] + + var orbitPatch = orbitPatches[orbitPatchIndex] = orbitPatches[orbitPatchIndex] || {} + var orbitPatchPositionData = orbitPatch["positionData"] = orbitPatch["positionData"] || {} + orbitPatchPositionData[universalTime] = orbitPatchPositionData[universalTime] || {} + orbitPatchPositionData[universalTime]["relativePosition"] = relativePosition + } + }; + }, + + buildRelativePositionPositionDataForManeuverNodeOrbitPatches: function(rawData, positionData, maneuverNodeType, maneuverNodesKey){ + var relativePositionFieldRegex = new RegExp(maneuverNodeType + "\\[(\\d+)\\]\\[(\\d+)\\]\\[([\\d\\.]+)\\]RelativePosition") + var maneuverNodes = positionData[maneuverNodesKey] = positionData[maneuverNodesKey] || {} + + var rawDataKeys = Object.keys(rawData) + for (var i = rawDataKeys.length - 1; i >= 0; i--) { + var key = rawDataKeys[i] + if(relativePositionFieldRegex.test(key)){ + var matchParts = relativePositionFieldRegex.exec(key) + var maneuverNodeIndex = parseInt(matchParts[1]) + var orbitPatchIndex = parseInt(matchParts[2]) + var universalTime = matchParts[3] + var relativePosition = rawData[key] + + var orbitPatch = maneuverNodes[maneuverNodeIndex]['orbitPatches'][orbitPatchIndex] = maneuverNodes[maneuverNodeIndex]['orbitPatches'][orbitPatchIndex] || {} + var orbitPatchPositionData = orbitPatch["positionData"] = orbitPatch["positionData"] || {} + orbitPatchPositionData[universalTime] = orbitPatchPositionData[universalTime] || {} + orbitPatchPositionData[universalTime]["relativePosition"] = relativePosition + } + }; + }, + + buildReferenceBodyPositionData: function(rawData, positionData){ + var referenceBodyTruePositionRegex = new RegExp(/(\w+)\[([\d\.]+)\]TruePosition$/) + + var rawDataKeys = Object.keys(rawData) + for (var i = rawDataKeys.length - 1; i >= 0; i--) { + var key = rawDataKeys[i] + if(referenceBodyTruePositionRegex.test(key)){ + var matchParts = referenceBodyTruePositionRegex.exec(key) + var referenceBodyName = matchParts[1] + var universalTime = matchParts[2] + var truePosition = rawData[key] + + var referenceBodies = positionData["referenceBodies"] = positionData["referenceBodies"] || {} + var referenceBodyObject = referenceBodies[referenceBodyName] = referenceBodies[referenceBodyName] || {} + referenceBodyObject["positionData"] = referenceBodyObject["positionData"] || {} + referenceBodyObject["positionData"][universalTime] = referenceBodyObject["positionData"][universalTime] || {} + referenceBodyObject["positionData"][universalTime]["truePosition"] = truePosition + } + } + }, + + buildReferenceBodyMetadata: function(rawData, positionData){ + var referenceBodyTruePositionRegex = new RegExp(/(\w+)\[metadata\](\w+)$/) + + var rawDataKeys = Object.keys(rawData) + for (var i = rawDataKeys.length - 1; i >= 0; i--) { + var key = rawDataKeys[i] + if(referenceBodyTruePositionRegex.test(key)){ + var matchParts = referenceBodyTruePositionRegex.exec(key) + var referenceBodyName = matchParts[1] + var field = matchParts[2] + var data = rawData[key] + + var referenceBodies = positionData["referenceBodies"] = positionData["referenceBodies"] || {} + var referenceBodyObject = referenceBodies[referenceBodyName] = referenceBodies[referenceBodyName] || {} + referenceBodyObject[field] = data + } + } + }, + + adjustUniversalTime: function(ut){ + return ut//.toFixed(3) + }, + + initializeDatalink: function(){ + this.datalink.subscribeToData([ + 'o.orbitPatches', 't.universalTime', 'v.body', + 'tar.name', 'tar.type', 'tar.o.orbitingBody', + 'tar.o.orbitPatches', 'o.maneuverNodes' + ]) + + this.datalink.addReceiverFunction(this.recalculate.bind(this)) + }, +}) +var GroundTrackPositionDataFormatter = Class.create({ + initialize: function(orbitalPositionData, datalink, options){ + this.datalink = datalink + this.orbitalPositionData = orbitalPositionData; + this.orbitalPositionData.options.onRecalculate = this.format.bind(this) + + this.rootReferenceBodyName = null + this.currentUniversalTime = null + + this.options = Object.extend({ + onFormat: null, + numberOfSegments: 120 + }, options) + }, + + format: function(positionData){ + var formattedData = { + "vesselCurrentCoordinates": null, + "targetCurrentCoordinates": null, + + "vesselSuborbitalPaths": [], + "vesselOrbitalPaths": [], + + "targetSuborbitalPaths": [], + "targetOrbitalPaths": [], + + "currentUniversalTime": positionData.currentUniversalTime, + "referenceBodyName": positionData.vesselBody, + "atmosphericRadius": this.datalink.getOrbitalBodyInfo(positionData.vesselBody).atmosphericRadius + } + + this.currentUniversalTime = positionData.currentUniversalTime + this.formatVesselCurrentCoordinates(positionData, formattedData) + this.formatTargetCurrentCoordinates(positionData, formattedData) + this.formatVesselOrbitalPaths(positionData, formattedData) + this.formatTargetOrbitalPaths(positionData, formattedData) + + this.options.onFormat && this.options.onFormat(formattedData) + }, + + formatVesselCurrentCoordinates: function(positionData, formattedData){ + this.rootReferenceBodyName = positionData["vesselBody"] + var currentPosition = positionData["vesselCurrentPosition"]["relativePosition"] + var info = this.rootReferenceBody(positionData) + + formattedData.vesselCurrentCoordinates = this.coordinatesFromVector(currentPosition, info.radius) + }, + + + formatTargetCurrentCoordinates: function(positionData, formattedData){ + if(this.rootReferenceBodyName != positionData["tar.o.orbitingBody"]){ return } + if(positionData["tar.type"] != "Vessel"){ return } + var currentPosition = positionData["targetCurrentPosition"]["relativePosition"] + var info = this.rootReferenceBody(positionData) + + formattedData.targetCurrentCoordinates = this.coordinatesFromVector(currentPosition, info.radius) + }, + + formatVesselOrbitalPaths: function(positionData, formattedData){ + var parentType = "currentVessel" + var orbitPatches = positionData["o.orbitPatches"] + + var pathSet = this.formatPathSet(positionData, orbitPatches, parentType, "orbitPath") + + formattedData.vesselOrbitalPaths = formattedData.vesselOrbitalPaths.concat(pathSet.filter(function(x){ return x.type == "orbital" })) + formattedData.vesselSuborbitalPaths = formattedData.vesselSuborbitalPaths.concat(pathSet.filter(function(x){ return x.type == "suborbital" })) + + this.formatManeuverNodes(positionData, formattedData, positionData["o.maneuverNodes"], parentType) + }, + + formatTargetOrbitalPaths: function(positionData, formattedData){ + if(positionData["tar.type"] != "Vessel"){ return } + var parentType = "targetVessel" + var orbitPatches = positionData["tar.o.orbitPatches"] + + var pathSet = this.formatPathSet(positionData, orbitPatches, parentType, "orbitPath") + + formattedData.targetOrbitalPaths = pathSet.filter(function(x){ return x.type == "orbital" }) + formattedData.targetSuborbitalPaths = pathSet.filter(function(x){ return x.type == "suborbital" }) + }, + + formatManeuverNodes: function(positionData, formattedData, maneuverNodes, parentType){ + for (var i = 0; i < maneuverNodes.length; i++) { + var node = maneuverNodes[i] + if(node.referenceBody != this.rootReferenceBodyName){ break } + + //render each orbit patch as an array of 1 so we can break once the path set returns empty (it's left the SOI) + for (var j = 0; j < node.orbitPatches.length; j++) { + var orbitPatches = [node.orbitPatches[j]] + var pathSet = this.formatPathSet(positionData, orbitPatches, parentType, "maneuverNode") + if(pathSet.length == 0){ return } + + formattedData.vesselOrbitalPaths = formattedData.vesselOrbitalPaths.concat(pathSet.filter(function(x){ return x.type == "orbital" })) + formattedData.vesselSuborbitalPaths = formattedData.vesselSuborbitalPaths.concat(pathSet.filter(function(x){ return x.type == "suborbital" })) + } + } + }, + + formatPathSet: function(positionData, orbitPatches, parentType, pathType){ + var pathSets = [] + var currentPathType = null + var currentPathSet = null + var info = this.rootReferenceBody(positionData) + var orbitalClearanceDistance = this.orbitalClearanceDistance(positionData) + + for (var i = 0; i < orbitPatches.length; i++) { + var orbitPatch = orbitPatches[i] + //If we extend beyond the root reference body then hard-stop the loop. We've escaped the SOI + if(orbitPatch.referenceBody != this.rootReferenceBodyName){ break } + + var sortedUniversalTimes = this.sortedUniversalTimes(orbitPatch.positionData) + + for (var j = 0; j < sortedUniversalTimes.length; j++){ + var key = sortedUniversalTimes[j].toString() + var position = orbitPatch.positionData[key].relativePosition + + var coordinates = this.coordinatesFromVector(position, info.radius) + if(coordinates.length == 0){ continue } + var length = this.vectorLength(position) + + // don't render any points that are underneath the body's surface or back in time + if(length <= info.radius || (sortedUniversalTimes[j] < this.currentUniversalTime && pathType != "maneuverNode" ) ){ + continue + } else if(length > orbitalClearanceDistance){ + var type = "orbital" + } else{ + var type = "suborbital" + } + + if(type != currentPathType){ + currentPathSet = this.buildOrbitPath({ + type: type, + parentType: parentType, + pathType: pathType, + points: [], + altitudes: [] + }) + pathSets.push(currentPathSet) + } + + currentPathSet.points.push(coordinates) + currentPathSet.altitudes.push({time: sortedUniversalTimes[j], altitude: length - info.radius}) + currentPathType = type + } + } + + return pathSets + }, + + buildOrbitPath: function(options){ + return { + type: options.type, + pathType: options.pathType, + parentType: options.parentType, + points: options.points, + altitudes: options.altitudes + } + }, + + vectorLength: function(vector){ + return Math.sqrt(Math.pow(vector[0], 2) + Math.pow(vector[1], 2) + Math.pow(vector[2], 2)) + }, + + coordinatesFromVector: function(vector, radius){ + var x = vector[0] + var y = vector[1] + var z = vector[2] + var lat = 90 - (Math.acos(z / radius)) * 180 / Math.PI + var lon = ((270 + (Math.atan2(x , y)) * 180 / Math.PI) % 360) -180 + if(!isNaN(lat) && !isNaN(lon)){ + return [lat, lon] + } else{ + return [] + } + }, + + sortedUniversalTimes: function(positionData){ + var positionDataKeys = Object.keys(positionData) + return positionDataKeys.map(function(x){return parseFloat(x)}).sortBy(function(x){ x }).reverse() + }, + + orbitalClearanceDistance: function(positionData){ + return this.rootReferenceBody(positionData).radius + this.datalink.getOrbitalBodyInfo(this.rootReferenceBodyName).atmosphericRadius + }, + + rootReferenceBody: function(positionData){ + return positionData.referenceBodies[this.rootReferenceBodyName] + } +}) +var GroundTrack = Class.create({ + initialize: function(datalink, positionDataFormatter, map_id, altitudeEstimationId){ + this.datalink = datalink + this.positionDataFormatter = positionDataFormatter + this.map_id = map_id + this.altitudeEstimationId = altitudeEstimationId + + this.vesselColor = '#F5A623' + this.vesselSuborbitalColor = 'red' + this.maneuverNodeColor = '#b4f489' + this.targetColor = '#987cf9' + this.targetSuborbitalColor = '#f97292' + + this.initializeAltitudeEstimate() + this.initializeMap() + + this.positionDataFormatter.options.onFormat = this.render.bind(this) + }, + + render: function(formattedData){ + this.renderVesselCurrentCoordinates(formattedData) + this.renderTargetCurrentCoordinates(formattedData) + this.renderVesselOrbitPaths(formattedData) + this.renderTargetOrbitPaths(formattedData) + this.updateAltitudeEstimateChart(formattedData) + }, + + renderVesselCurrentCoordinates: function(formattedData){ + var coordinates = formattedData.vesselCurrentCoordinates + if(!coordinates){return} + this.positionMap.setCoordinatesForMapObject(this.markers.vesselCoordinates, coordinates[0], coordinates[1]) + }, + + renderTargetCurrentCoordinates: function(formattedData){ + var coordinates = formattedData.targetCurrentCoordinates + if(!coordinates){return} + this.positionMap.setCoordinatesForMapObject(this.markers.targetCoordinates, coordinates[0], coordinates[1]) + }, + + renderVesselOrbitPaths: function(formattedData){ + this.renderOrbitPaths(this.markers.vesselOrbitalPaths, formattedData.vesselOrbitalPaths, { color: this.vesselColor }) + this.renderOrbitPaths(this.markers.vesselSuborbitalPaths, formattedData.vesselSuborbitalPaths, { color: this.vesselSuborbitalColor }) + }, + + renderTargetOrbitPaths: function(formattedData){ + this.renderOrbitPaths(this.markers.targetOrbitalPaths, formattedData.targetOrbitalPaths, { color: this.targetColor }) + this.renderOrbitPaths(this.markers.targetSuborbitalPaths, formattedData.targetSuborbitalPaths, { color: this.targetSuborbitalColor }) + }, + + renderOrbitPaths: function(markers, orbitPaths, lineOptions){ + //clear all the existing orbital path values + for (var i = markers.length - 1; i >= 0; i--) { + markers[i].setLatLngs([]) + } + + for (var i = 0; i < orbitPaths.length; i++) { + var orbitPath = orbitPaths[i] + var coordinates = orbitPath.points + + if(!markers[i]){ + markers[i] = L.polyline([], lineOptions) + markers[i].addTo(this.positionMap.map) + } + + var options = { + dashArray: orbitPath.pathType == "maneuverNode" ? '5,10' : '' + } + + if(orbitPath.pathType == "maneuverNode"){ + options.color = this.maneuverNodeColor + } + + var marker = markers[i] + marker.setLatLngs(coordinates) + marker.setStyle(options) + } + }, + + updateAltitudeEstimateChart: function(formattedData){ + if(!this.altitudeEstimateChart){ return } + + var chartData = { + labels: [], series: [ + { + name: 'vessel', + data: [] + }, + { + name: 'atmosphere', + data: [] + }, + { + name: 'vesselManeuver', + data: [] + } + ] + } + + if(formattedData.targetCurrentCoordinates){ + chartData.push({ + name: 'target', + data: [] + }) + } + + var maxLabelSections = 10 + var interval = 60 * 5 //seconds based + var intervalsCovered = {} + + var rawChartData = {} + + this.buildAltitudePointsForChart( + formattedData.vesselOrbitalPaths.filter(function(x){ return x.pathType == "orbitPath" }), + formattedData.vesselSuborbitalPaths.filter(function(x){ return x.pathType == "orbitPath" }), + "vessel", + rawChartData + ) + + this.buildAltitudePointsForChart( + formattedData.vesselOrbitalPaths.filter(function(x){ return x.pathType == "maneuverNode" }), + formattedData.vesselSuborbitalPaths.filter(function(x){ return x.pathType == "maneuverNode" }), + "vesselManeuver", + rawChartData + ) + + this.buildAltitudePointsForChart( + formattedData.targetOrbitalPaths, + formattedData.targetSuborbitalPaths, + "target", + rawChartData + ) + + var sortedUniversalTimes = this.sortedUniversalTimes(rawChartData).sort() + if(sortedUniversalTimes.length > 0){ + var startTime = parseFloat(sortedUniversalTimes.first()) + var endTime = parseFloat(sortedUniversalTimes.last()) + + var totalDelta = sortedUniversalTimes.length + var intervalPeriod = Math.floor(totalDelta/maxLabelSections) + } + + for (var i = 0; i < sortedUniversalTimes.length; i++) { + var time = sortedUniversalTimes[i] + var deltaT = time - startTime + var dataPoint = rawChartData[time] + + var intervalSection = Math.floor(i/intervalPeriod) + if(!intervalsCovered[intervalSection] && intervalSection != 0){ + var label = "-" + TimeFormatters.durationString(deltaT.toFixed(0)) + intervalsCovered[intervalSection] = true + } else{ + var label = "" + } + + chartData.labels.push(label) + + chartData.series[0].data.push(dataPoint.vessel || null) + chartData.series[1].data.push(formattedData.atmosphericRadius || null) + chartData.series[2].data.push(dataPoint.vesselManeuver || null) + + if(formattedData.targetCurrentCoordinates){ + chartData.series[3].data.push(dataPoint.target || null) + } + } + + var chartOptions = { + lineSmooth: Chartist.Interpolation.cardinal({ fillHoles: true }), + low: 0, + series: { + 'atmosphere': { + showArea: true, + showPoint: false + }, + 'target': { + lineSmooth: Chartist.Interpolation.cardinal({ fillHoles: true }) + }, + 'vessel': { + lineSmooth: Chartist.Interpolation.cardinal({ fillHoles: true }) + }, + 'vesselManeuver': { + lineSmooth: Chartist.Interpolation.cardinal({ fillHoles: true }) + }, + } + } + + window.requestAnimationFrame(function(){ + this.altitudeEstimateChart.update(chartData, chartOptions) + }.bind(this)) + }, + + buildAltitudePointsForChart: function(orbitPaths, subOrbitalPaths, type, rawChartData){ + var altitudePoints = {} + + orbitPaths.forEach(function(orbitPath){ + orbitPath.altitudes.forEach(function(x){ altitudePoints[x.time] = x.altitude }) + }) + + subOrbitalPaths.forEach(function(orbitPath){ + orbitPath.altitudes.forEach(function(x){ altitudePoints[x.time] = x.altitude }) + }) + + var sortedUniversalTimes = this.sortedUniversalTimes(altitudePoints) + if(sortedUniversalTimes.length > 0){ + var startTime = parseFloat(sortedUniversalTimes[0]) + } + + for (var i = 0; i < sortedUniversalTimes.length; i++) { + var time = sortedUniversalTimes[i] + var altitude = altitudePoints[time] + + rawChartData[time] = rawChartData[time] || {} + rawChartData[time][type] = altitude + } + }, + + initializeMap: function(){ + this.positionMap = new PositionMap(this.datalink, this.map_id, { + lockOnVessel: false + }) + + var circleMarkerOptions = { + // fill: false, + color: '#FD7E23', + opacity: 1.0, + fillOpacity: 1.0, + radius: 5 + } + + var targetMarkerOptions = { + // fill: false, + color: this.targetColor, + opacity: 1.0, + fillOpacity: 1.0, + radius: 5 + } + + this.markers = { + vesselCoordinates : L.circleMarker([0,0], circleMarkerOptions), + vesselSuborbitalPaths: [], + vesselOrbitalPaths: [], + + targetCoordinates: L.circleMarker([0,0], targetMarkerOptions), + targetSuborbitalPaths: [], + targetOrbitalPaths: [], + } + + this.markers.vesselCoordinates.addTo(this.positionMap.map) + this.markers.targetCoordinates.addTo(this.positionMap.map) + }, + + initializeAltitudeEstimate: function(){ + var data = { + // A labels array that can contain any sort of values + labels: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri'], + // Our series array that contains series objects or in this case series data arrays + series: [ + [5, 2, 4, 2, 0] + ] + }; + + if($(this.altitudeEstimationId) == null){ + this.altitudeEstimateChart = null + } else{ + // Create a new line chart object where as first parameter we pass in a selector + // that is resolving to our chart container element. The Second parameter + // is the actual data object. + this.altitudeEstimateChart = new Chartist.Line("#" + this.altitudeEstimationId, data); + } + }, + + sortedUniversalTimes: function(data){ + var keys = Object.keys(data) + return keys.map(function(x){return parseFloat(x)}).sortBy(function(x){ x }).reverse() + }, +}) +var GroundTrackContainer = Class.create({ + initialize: function(map_id, altitudeEstimationId){ + this.mapDatalink = new Telemachus(settings.getHost(), settings.getPort()) + this.mapDatalink.rate = 2000 + this.orbitalPositionData = new OrbitalPositionData(this.mapDatalink) + this.groundTrackFormatter = new GroundTrackPositionDataFormatter(this.orbitalPositionData, this.mapDatalink) + + this.groundTrack = new GroundTrack(this.mapDatalink, this.groundTrackFormatter, map_id, altitudeEstimationId) + } +}) +// threejs.org/license +'use strict';var THREE={REVISION:"75"};"function"===typeof define&&define.amd?define("three",THREE):"undefined"!==typeof exports&&"undefined"!==typeof module&&(module.exports=THREE);void 0===Number.EPSILON&&(Number.EPSILON=Math.pow(2,-52));void 0===Math.sign&&(Math.sign=function(a){return 0>a?-1:0>16&255)/255;this.g=(a>>8&255)/255;this.b=(a&255)/255;return this},setRGB:function(a,b,c){this.r=a;this.g=b;this.b=c;return this},setHSL:function(){function a(a,c,d){0>d&&(d+=1);1d?c:d<2/3?a+6*(c-a)*(2/3-d):a}return function(b,c,d){b=THREE.Math.euclideanModulo(b,1);c=THREE.Math.clamp(c,0,1);d=THREE.Math.clamp(d,0,1);0===c?this.r=this.g=this.b=d:(c=.5>=d?d*(1+c):d+c-d*c,d=2*d-c,this.r=a(d,c,b+1/3),this.g=a(d,c,b),this.b=a(d,c,b-1/3));return this}}(),setStyle:function(a){function b(b){void 0!==b&&1>parseFloat(b)&&console.warn("THREE.Color: Alpha component of "+a+" will be ignored.")}var c;if(c=/^((?:rgb|hsl)a?)\(\s*([^\)]*)\)/.exec(a)){var d=c[2];switch(c[1]){case "rgb":case "rgba":if(c= +/^(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(d))return this.r=Math.min(255,parseInt(c[1],10))/255,this.g=Math.min(255,parseInt(c[2],10))/255,this.b=Math.min(255,parseInt(c[3],10))/255,b(c[5]),this;if(c=/^(\d+)\%\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(d))return this.r=Math.min(100,parseInt(c[1],10))/100,this.g=Math.min(100,parseInt(c[2],10))/100,this.b=Math.min(100,parseInt(c[3],10))/100,b(c[5]),this;break;case "hsl":case "hsla":if(c=/^([0-9]*\.?[0-9]+)\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(d)){var d= +parseFloat(c[1])/360,e=parseInt(c[2],10)/100,f=parseInt(c[3],10)/100;b(c[5]);return this.setHSL(d,e,f)}}}else if(c=/^\#([A-Fa-f0-9]+)$/.exec(a)){c=c[1];d=c.length;if(3===d)return this.r=parseInt(c.charAt(0)+c.charAt(0),16)/255,this.g=parseInt(c.charAt(1)+c.charAt(1),16)/255,this.b=parseInt(c.charAt(2)+c.charAt(2),16)/255,this;if(6===d)return this.r=parseInt(c.charAt(0)+c.charAt(1),16)/255,this.g=parseInt(c.charAt(2)+c.charAt(3),16)/255,this.b=parseInt(c.charAt(4)+c.charAt(5),16)/255,this}a&&0=h?k/(e+f):k/(2-e-f);switch(e){case b:g=(c-d)/k+(cf&&c>b?(c=2*Math.sqrt(1+c-f-b),this._w=(k-g)/c,this._x=.25*c,this._y=(a+e)/c,this._z=(d+h)/c):f>b?(c=2*Math.sqrt(1+f-c-b),this._w=(d-h)/c,this._x=(a+e)/c,this._y= +.25*c,this._z=(g+k)/c):(c=2*Math.sqrt(1+b-c-f),this._w=(e-a)/c,this._x=(d+h)/c,this._y=(g+k)/c,this._z=.25*c);this.onChangeCallback();return this},setFromUnitVectors:function(){var a,b;return function(c,d){void 0===a&&(a=new THREE.Vector3);b=c.dot(d)+1;1E-6>b?(b=0,Math.abs(c.x)>Math.abs(c.z)?a.set(-c.y,c.x,0):a.set(0,-c.z,c.y)):a.crossVectors(c,d);this._x=a.x;this._y=a.y;this._z=a.z;this._w=b;this.normalize();return this}}(),inverse:function(){this.conjugate().normalize();return this},conjugate:function(){this._x*= +-1;this._y*=-1;this._z*=-1;this.onChangeCallback();return this},dot:function(a){return this._x*a._x+this._y*a._y+this._z*a._z+this._w*a._w},lengthSq:function(){return this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w},length:function(){return Math.sqrt(this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w)},normalize:function(){var a=this.length();0===a?(this._z=this._y=this._x=0,this._w=1):(a=1/a,this._x*=a,this._y*=a,this._z*=a,this._w*=a);this.onChangeCallback();return this}, +multiply:function(a,b){return void 0!==b?(console.warn("THREE.Quaternion: .multiply() now only accepts one argument. Use .multiplyQuaternions( a, b ) instead."),this.multiplyQuaternions(a,b)):this.multiplyQuaternions(this,a)},multiplyQuaternions:function(a,b){var c=a._x,d=a._y,e=a._z,f=a._w,g=b._x,h=b._y,k=b._z,l=b._w;this._x=c*l+f*g+d*k-e*h;this._y=d*l+f*h+e*g-c*k;this._z=e*l+f*k+c*h-d*g;this._w=f*l-c*g-d*h-e*k;this.onChangeCallback();return this},slerp:function(a,b){if(0===b)return this;if(1=== +b)return this.copy(a);var c=this._x,d=this._y,e=this._z,f=this._w,g=f*a._w+c*a._x+d*a._y+e*a._z;0>g?(this._w=-a._w,this._x=-a._x,this._y=-a._y,this._z=-a._z,g=-g):this.copy(a);if(1<=g)return this._w=f,this._x=c,this._y=d,this._z=e,this;var h=Math.sqrt(1-g*g);if(.001>Math.abs(h))return this._w=.5*(f+this._w),this._x=.5*(c+this._x),this._y=.5*(d+this._y),this._z=.5*(e+this._z),this;var k=Math.atan2(h,g),g=Math.sin((1-b)*k)/h,h=Math.sin(b*k)/h;this._w=f*g+this._w*h;this._x=c*g+this._x*h;this._y=d*g+ +this._y*h;this._z=e*g+this._z*h;this.onChangeCallback();return this},equals:function(a){return a._x===this._x&&a._y===this._y&&a._z===this._z&&a._w===this._w},fromArray:function(a,b){void 0===b&&(b=0);this._x=a[b];this._y=a[b+1];this._z=a[b+2];this._w=a[b+3];this.onChangeCallback();return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);a[b]=this._x;a[b+1]=this._y;a[b+2]=this._z;a[b+3]=this._w;return a},onChange:function(a){this.onChangeCallback=a;return this},onChangeCallback:function(){}}; +Object.assign(THREE.Quaternion,{slerp:function(a,b,c,d){return c.copy(a).slerp(b,d)},slerpFlat:function(a,b,c,d,e,f,g){var h=c[d+0],k=c[d+1],l=c[d+2];c=c[d+3];d=e[f+0];var p=e[f+1],n=e[f+2];e=e[f+3];if(c!==e||h!==d||k!==p||l!==n){f=1-g;var m=h*d+k*p+l*n+c*e,q=0<=m?1:-1,u=1-m*m;u>Number.EPSILON&&(u=Math.sqrt(u),m=Math.atan2(u,m*q),f=Math.sin(f*m)/u,g=Math.sin(g*m)/u);q*=g;h=h*f+d*q;k=k*f+p*q;l=l*f+n*q;c=c*f+e*q;f===1-g&&(g=1/Math.sqrt(h*h+k*k+l*l+c*c),h*=g,k*=g,l*=g,c*=g)}a[b]=h;a[b+1]=k;a[b+2]=l; +a[b+3]=c}});THREE.Vector2=function(a,b){this.x=a||0;this.y=b||0}; +THREE.Vector2.prototype={constructor:THREE.Vector2,get width(){return this.x},set width(a){this.x=a},get height(){return this.y},set height(a){this.y=a},set:function(a,b){this.x=a;this.y=b;return this},setScalar:function(a){this.y=this.x=a;return this},setX:function(a){this.x=a;return this},setY:function(a){this.y=a;return this},setComponent:function(a,b){switch(a){case 0:this.x=b;break;case 1:this.y=b;break;default:throw Error("index is out of range: "+a);}},getComponent:function(a){switch(a){case 0:return this.x; +case 1:return this.y;default:throw Error("index is out of range: "+a);}},clone:function(){return new this.constructor(this.x,this.y)},copy:function(a){this.x=a.x;this.y=a.y;return this},add:function(a,b){if(void 0!==b)return console.warn("THREE.Vector2: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(a,b);this.x+=a.x;this.y+=a.y;return this},addScalar:function(a){this.x+=a;this.y+=a;return this},addVectors:function(a,b){this.x=a.x+b.x;this.y=a.y+b.y;return this}, +addScaledVector:function(a,b){this.x+=a.x*b;this.y+=a.y*b;return this},sub:function(a,b){if(void 0!==b)return console.warn("THREE.Vector2: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(a,b);this.x-=a.x;this.y-=a.y;return this},subScalar:function(a){this.x-=a;this.y-=a;return this},subVectors:function(a,b){this.x=a.x-b.x;this.y=a.y-b.y;return this},multiply:function(a){this.x*=a.x;this.y*=a.y;return this},multiplyScalar:function(a){isFinite(a)?(this.x*=a, +this.y*=a):this.y=this.x=0;return this},divide:function(a){this.x/=a.x;this.y/=a.y;return this},divideScalar:function(a){return this.multiplyScalar(1/a)},min:function(a){this.x=Math.min(this.x,a.x);this.y=Math.min(this.y,a.y);return this},max:function(a){this.x=Math.max(this.x,a.x);this.y=Math.max(this.y,a.y);return this},clamp:function(a,b){this.x=Math.max(a.x,Math.min(b.x,this.x));this.y=Math.max(a.y,Math.min(b.y,this.y));return this},clampScalar:function(){var a,b;return function(c,d){void 0=== +a&&(a=new THREE.Vector2,b=new THREE.Vector2);a.set(c,c);b.set(d,d);return this.clamp(a,b)}}(),clampLength:function(a,b){var c=this.length();this.multiplyScalar(Math.max(a,Math.min(b,c))/c);return this},floor:function(){this.x=Math.floor(this.x);this.y=Math.floor(this.y);return this},ceil:function(){this.x=Math.ceil(this.x);this.y=Math.ceil(this.y);return this},round:function(){this.x=Math.round(this.x);this.y=Math.round(this.y);return this},roundToZero:function(){this.x=0>this.x?Math.ceil(this.x): +Math.floor(this.x);this.y=0>this.y?Math.ceil(this.y):Math.floor(this.y);return this},negate:function(){this.x=-this.x;this.y=-this.y;return this},dot:function(a){return this.x*a.x+this.y*a.y},lengthSq:function(){return this.x*this.x+this.y*this.y},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y)},lengthManhattan:function(){return Math.abs(this.x)+Math.abs(this.y)},normalize:function(){return this.divideScalar(this.length())},angle:function(){var a=Math.atan2(this.y,this.x);0>a&&(a+= +2*Math.PI);return a},distanceTo:function(a){return Math.sqrt(this.distanceToSquared(a))},distanceToSquared:function(a){var b=this.x-a.x;a=this.y-a.y;return b*b+a*a},setLength:function(a){return this.multiplyScalar(a/this.length())},lerp:function(a,b){this.x+=(a.x-this.x)*b;this.y+=(a.y-this.y)*b;return this},lerpVectors:function(a,b,c){this.subVectors(b,a).multiplyScalar(c).add(a);return this},equals:function(a){return a.x===this.x&&a.y===this.y},fromArray:function(a,b){void 0===b&&(b=0);this.x=a[b]; +this.y=a[b+1];return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);a[b]=this.x;a[b+1]=this.y;return a},fromAttribute:function(a,b,c){void 0===c&&(c=0);b=b*a.itemSize+c;this.x=a.array[b];this.y=a.array[b+1];return this},rotateAround:function(a,b){var c=Math.cos(b),d=Math.sin(b),e=this.x-a.x,f=this.y-a.y;this.x=e*c-f*d+a.x;this.y=e*d+f*c+a.y;return this}};THREE.Vector3=function(a,b,c){this.x=a||0;this.y=b||0;this.z=c||0}; +THREE.Vector3.prototype={constructor:THREE.Vector3,set:function(a,b,c){this.x=a;this.y=b;this.z=c;return this},setScalar:function(a){this.z=this.y=this.x=a;return this},setX:function(a){this.x=a;return this},setY:function(a){this.y=a;return this},setZ:function(a){this.z=a;return this},setComponent:function(a,b){switch(a){case 0:this.x=b;break;case 1:this.y=b;break;case 2:this.z=b;break;default:throw Error("index is out of range: "+a);}},getComponent:function(a){switch(a){case 0:return this.x;case 1:return this.y; +case 2:return this.z;default:throw Error("index is out of range: "+a);}},clone:function(){return new this.constructor(this.x,this.y,this.z)},copy:function(a){this.x=a.x;this.y=a.y;this.z=a.z;return this},add:function(a,b){if(void 0!==b)return console.warn("THREE.Vector3: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(a,b);this.x+=a.x;this.y+=a.y;this.z+=a.z;return this},addScalar:function(a){this.x+=a;this.y+=a;this.z+=a;return this},addVectors:function(a, +b){this.x=a.x+b.x;this.y=a.y+b.y;this.z=a.z+b.z;return this},addScaledVector:function(a,b){this.x+=a.x*b;this.y+=a.y*b;this.z+=a.z*b;return this},sub:function(a,b){if(void 0!==b)return console.warn("THREE.Vector3: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(a,b);this.x-=a.x;this.y-=a.y;this.z-=a.z;return this},subScalar:function(a){this.x-=a;this.y-=a;this.z-=a;return this},subVectors:function(a,b){this.x=a.x-b.x;this.y=a.y-b.y;this.z=a.z-b.z;return this}, +multiply:function(a,b){if(void 0!==b)return console.warn("THREE.Vector3: .multiply() now only accepts one argument. Use .multiplyVectors( a, b ) instead."),this.multiplyVectors(a,b);this.x*=a.x;this.y*=a.y;this.z*=a.z;return this},multiplyScalar:function(a){isFinite(a)?(this.x*=a,this.y*=a,this.z*=a):this.z=this.y=this.x=0;return this},multiplyVectors:function(a,b){this.x=a.x*b.x;this.y=a.y*b.y;this.z=a.z*b.z;return this},applyEuler:function(){var a;return function(b){!1===b instanceof THREE.Euler&& +console.error("THREE.Vector3: .applyEuler() now expects an Euler rotation rather than a Vector3 and order.");void 0===a&&(a=new THREE.Quaternion);this.applyQuaternion(a.setFromEuler(b));return this}}(),applyAxisAngle:function(){var a;return function(b,c){void 0===a&&(a=new THREE.Quaternion);this.applyQuaternion(a.setFromAxisAngle(b,c));return this}}(),applyMatrix3:function(a){var b=this.x,c=this.y,d=this.z;a=a.elements;this.x=a[0]*b+a[3]*c+a[6]*d;this.y=a[1]*b+a[4]*c+a[7]*d;this.z=a[2]*b+a[5]*c+a[8]* +d;return this},applyMatrix4:function(a){var b=this.x,c=this.y,d=this.z;a=a.elements;this.x=a[0]*b+a[4]*c+a[8]*d+a[12];this.y=a[1]*b+a[5]*c+a[9]*d+a[13];this.z=a[2]*b+a[6]*c+a[10]*d+a[14];return this},applyProjection:function(a){var b=this.x,c=this.y,d=this.z;a=a.elements;var e=1/(a[3]*b+a[7]*c+a[11]*d+a[15]);this.x=(a[0]*b+a[4]*c+a[8]*d+a[12])*e;this.y=(a[1]*b+a[5]*c+a[9]*d+a[13])*e;this.z=(a[2]*b+a[6]*c+a[10]*d+a[14])*e;return this},applyQuaternion:function(a){var b=this.x,c=this.y,d=this.z,e=a.x, +f=a.y,g=a.z;a=a.w;var h=a*b+f*d-g*c,k=a*c+g*b-e*d,l=a*d+e*c-f*b,b=-e*b-f*c-g*d;this.x=h*a+b*-e+k*-g-l*-f;this.y=k*a+b*-f+l*-e-h*-g;this.z=l*a+b*-g+h*-f-k*-e;return this},project:function(){var a;return function(b){void 0===a&&(a=new THREE.Matrix4);a.multiplyMatrices(b.projectionMatrix,a.getInverse(b.matrixWorld));return this.applyProjection(a)}}(),unproject:function(){var a;return function(b){void 0===a&&(a=new THREE.Matrix4);a.multiplyMatrices(b.matrixWorld,a.getInverse(b.projectionMatrix));return this.applyProjection(a)}}(), +transformDirection:function(a){var b=this.x,c=this.y,d=this.z;a=a.elements;this.x=a[0]*b+a[4]*c+a[8]*d;this.y=a[1]*b+a[5]*c+a[9]*d;this.z=a[2]*b+a[6]*c+a[10]*d;this.normalize();return this},divide:function(a){this.x/=a.x;this.y/=a.y;this.z/=a.z;return this},divideScalar:function(a){return this.multiplyScalar(1/a)},min:function(a){this.x=Math.min(this.x,a.x);this.y=Math.min(this.y,a.y);this.z=Math.min(this.z,a.z);return this},max:function(a){this.x=Math.max(this.x,a.x);this.y=Math.max(this.y,a.y); +this.z=Math.max(this.z,a.z);return this},clamp:function(a,b){this.x=Math.max(a.x,Math.min(b.x,this.x));this.y=Math.max(a.y,Math.min(b.y,this.y));this.z=Math.max(a.z,Math.min(b.z,this.z));return this},clampScalar:function(){var a,b;return function(c,d){void 0===a&&(a=new THREE.Vector3,b=new THREE.Vector3);a.set(c,c,c);b.set(d,d,d);return this.clamp(a,b)}}(),clampLength:function(a,b){var c=this.length();this.multiplyScalar(Math.max(a,Math.min(b,c))/c);return this},floor:function(){this.x=Math.floor(this.x); +this.y=Math.floor(this.y);this.z=Math.floor(this.z);return this},ceil:function(){this.x=Math.ceil(this.x);this.y=Math.ceil(this.y);this.z=Math.ceil(this.z);return this},round:function(){this.x=Math.round(this.x);this.y=Math.round(this.y);this.z=Math.round(this.z);return this},roundToZero:function(){this.x=0>this.x?Math.ceil(this.x):Math.floor(this.x);this.y=0>this.y?Math.ceil(this.y):Math.floor(this.y);this.z=0>this.z?Math.ceil(this.z):Math.floor(this.z);return this},negate:function(){this.x=-this.x; +this.y=-this.y;this.z=-this.z;return this},dot:function(a){return this.x*a.x+this.y*a.y+this.z*a.z},lengthSq:function(){return this.x*this.x+this.y*this.y+this.z*this.z},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)},lengthManhattan:function(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)},normalize:function(){return this.divideScalar(this.length())},setLength:function(a){return this.multiplyScalar(a/this.length())},lerp:function(a,b){this.x+=(a.x-this.x)* +b;this.y+=(a.y-this.y)*b;this.z+=(a.z-this.z)*b;return this},lerpVectors:function(a,b,c){this.subVectors(b,a).multiplyScalar(c).add(a);return this},cross:function(a,b){if(void 0!==b)return console.warn("THREE.Vector3: .cross() now only accepts one argument. Use .crossVectors( a, b ) instead."),this.crossVectors(a,b);var c=this.x,d=this.y,e=this.z;this.x=d*a.z-e*a.y;this.y=e*a.x-c*a.z;this.z=c*a.y-d*a.x;return this},crossVectors:function(a,b){var c=a.x,d=a.y,e=a.z,f=b.x,g=b.y,h=b.z;this.x=d*h-e*g; +this.y=e*f-c*h;this.z=c*g-d*f;return this},projectOnVector:function(){var a,b;return function(c){void 0===a&&(a=new THREE.Vector3);a.copy(c).normalize();b=this.dot(a);return this.copy(a).multiplyScalar(b)}}(),projectOnPlane:function(){var a;return function(b){void 0===a&&(a=new THREE.Vector3);a.copy(this).projectOnVector(b);return this.sub(a)}}(),reflect:function(){var a;return function(b){void 0===a&&(a=new THREE.Vector3);return this.sub(a.copy(b).multiplyScalar(2*this.dot(b)))}}(),angleTo:function(a){a= +this.dot(a)/Math.sqrt(this.lengthSq()*a.lengthSq());return Math.acos(THREE.Math.clamp(a,-1,1))},distanceTo:function(a){return Math.sqrt(this.distanceToSquared(a))},distanceToSquared:function(a){var b=this.x-a.x,c=this.y-a.y;a=this.z-a.z;return b*b+c*c+a*a},setFromSpherical:function(a){var b=Math.sin(a.phi)*a.radius;this.x=b*Math.sin(a.theta);this.y=Math.cos(a.phi)*a.radius;this.z=b*Math.cos(a.theta);return this},setFromMatrixPosition:function(a){return this.setFromMatrixColumn(a,3)},setFromMatrixScale:function(a){var b= +this.setFromMatrixColumn(a,0).length(),c=this.setFromMatrixColumn(a,1).length();a=this.setFromMatrixColumn(a,2).length();this.x=b;this.y=c;this.z=a;return this},setFromMatrixColumn:function(a,b){"number"===typeof a&&(console.warn("THREE.Vector3: setFromMatrixColumn now expects ( matrix, index )."),b=a=b);return this.fromArray(a.elements,4*b)},equals:function(a){return a.x===this.x&&a.y===this.y&&a.z===this.z},fromArray:function(a,b){void 0===b&&(b=0);this.x=a[b];this.y=a[b+1];this.z=a[b+2];return this}, +toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);a[b]=this.x;a[b+1]=this.y;a[b+2]=this.z;return a},fromAttribute:function(a,b,c){void 0===c&&(c=0);b=b*a.itemSize+c;this.x=a.array[b];this.y=a.array[b+1];this.z=a.array[b+2];return this}};THREE.Vector4=function(a,b,c,d){this.x=a||0;this.y=b||0;this.z=c||0;this.w=void 0!==d?d:1}; +THREE.Vector4.prototype={constructor:THREE.Vector4,set:function(a,b,c,d){this.x=a;this.y=b;this.z=c;this.w=d;return this},setScalar:function(a){this.w=this.z=this.y=this.x=a;return this},setX:function(a){this.x=a;return this},setY:function(a){this.y=a;return this},setZ:function(a){this.z=a;return this},setW:function(a){this.w=a;return this},setComponent:function(a,b){switch(a){case 0:this.x=b;break;case 1:this.y=b;break;case 2:this.z=b;break;case 3:this.w=b;break;default:throw Error("index is out of range: "+ +a);}},getComponent:function(a){switch(a){case 0:return this.x;case 1:return this.y;case 2:return this.z;case 3:return this.w;default:throw Error("index is out of range: "+a);}},clone:function(){return new this.constructor(this.x,this.y,this.z,this.w)},copy:function(a){this.x=a.x;this.y=a.y;this.z=a.z;this.w=void 0!==a.w?a.w:1;return this},add:function(a,b){if(void 0!==b)return console.warn("THREE.Vector4: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(a,b); +this.x+=a.x;this.y+=a.y;this.z+=a.z;this.w+=a.w;return this},addScalar:function(a){this.x+=a;this.y+=a;this.z+=a;this.w+=a;return this},addVectors:function(a,b){this.x=a.x+b.x;this.y=a.y+b.y;this.z=a.z+b.z;this.w=a.w+b.w;return this},addScaledVector:function(a,b){this.x+=a.x*b;this.y+=a.y*b;this.z+=a.z*b;this.w+=a.w*b;return this},sub:function(a,b){if(void 0!==b)return console.warn("THREE.Vector4: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(a,b);this.x-= +a.x;this.y-=a.y;this.z-=a.z;this.w-=a.w;return this},subScalar:function(a){this.x-=a;this.y-=a;this.z-=a;this.w-=a;return this},subVectors:function(a,b){this.x=a.x-b.x;this.y=a.y-b.y;this.z=a.z-b.z;this.w=a.w-b.w;return this},multiplyScalar:function(a){isFinite(a)?(this.x*=a,this.y*=a,this.z*=a,this.w*=a):this.w=this.z=this.y=this.x=0;return this},applyMatrix4:function(a){var b=this.x,c=this.y,d=this.z,e=this.w;a=a.elements;this.x=a[0]*b+a[4]*c+a[8]*d+a[12]*e;this.y=a[1]*b+a[5]*c+a[9]*d+a[13]*e;this.z= +a[2]*b+a[6]*c+a[10]*d+a[14]*e;this.w=a[3]*b+a[7]*c+a[11]*d+a[15]*e;return this},divideScalar:function(a){return this.multiplyScalar(1/a)},setAxisAngleFromQuaternion:function(a){this.w=2*Math.acos(a.w);var b=Math.sqrt(1-a.w*a.w);1E-4>b?(this.x=1,this.z=this.y=0):(this.x=a.x/b,this.y=a.y/b,this.z=a.z/b);return this},setAxisAngleFromRotationMatrix:function(a){var b,c,d;a=a.elements;var e=a[0];d=a[4];var f=a[8],g=a[1],h=a[5],k=a[9];c=a[2];b=a[6];var l=a[10];if(.01>Math.abs(d-g)&&.01>Math.abs(f-c)&&.01> +Math.abs(k-b)){if(.1>Math.abs(d+g)&&.1>Math.abs(f+c)&&.1>Math.abs(k+b)&&.1>Math.abs(e+h+l-3))return this.set(1,0,0,0),this;a=Math.PI;e=(e+1)/2;h=(h+1)/2;l=(l+1)/2;d=(d+g)/4;f=(f+c)/4;k=(k+b)/4;e>h&&e>l?.01>e?(b=0,d=c=.707106781):(b=Math.sqrt(e),c=d/b,d=f/b):h>l?.01>h?(b=.707106781,c=0,d=.707106781):(c=Math.sqrt(h),b=d/c,d=k/c):.01>l?(c=b=.707106781,d=0):(d=Math.sqrt(l),b=f/d,c=k/d);this.set(b,c,d,a);return this}a=Math.sqrt((b-k)*(b-k)+(f-c)*(f-c)+(g-d)*(g-d));.001>Math.abs(a)&&(a=1);this.x=(b-k)/ +a;this.y=(f-c)/a;this.z=(g-d)/a;this.w=Math.acos((e+h+l-1)/2);return this},min:function(a){this.x=Math.min(this.x,a.x);this.y=Math.min(this.y,a.y);this.z=Math.min(this.z,a.z);this.w=Math.min(this.w,a.w);return this},max:function(a){this.x=Math.max(this.x,a.x);this.y=Math.max(this.y,a.y);this.z=Math.max(this.z,a.z);this.w=Math.max(this.w,a.w);return this},clamp:function(a,b){this.x=Math.max(a.x,Math.min(b.x,this.x));this.y=Math.max(a.y,Math.min(b.y,this.y));this.z=Math.max(a.z,Math.min(b.z,this.z)); +this.w=Math.max(a.w,Math.min(b.w,this.w));return this},clampScalar:function(){var a,b;return function(c,d){void 0===a&&(a=new THREE.Vector4,b=new THREE.Vector4);a.set(c,c,c,c);b.set(d,d,d,d);return this.clamp(a,b)}}(),floor:function(){this.x=Math.floor(this.x);this.y=Math.floor(this.y);this.z=Math.floor(this.z);this.w=Math.floor(this.w);return this},ceil:function(){this.x=Math.ceil(this.x);this.y=Math.ceil(this.y);this.z=Math.ceil(this.z);this.w=Math.ceil(this.w);return this},round:function(){this.x= +Math.round(this.x);this.y=Math.round(this.y);this.z=Math.round(this.z);this.w=Math.round(this.w);return this},roundToZero:function(){this.x=0>this.x?Math.ceil(this.x):Math.floor(this.x);this.y=0>this.y?Math.ceil(this.y):Math.floor(this.y);this.z=0>this.z?Math.ceil(this.z):Math.floor(this.z);this.w=0>this.w?Math.ceil(this.w):Math.floor(this.w);return this},negate:function(){this.x=-this.x;this.y=-this.y;this.z=-this.z;this.w=-this.w;return this},dot:function(a){return this.x*a.x+this.y*a.y+this.z* +a.z+this.w*a.w},lengthSq:function(){return this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w)},lengthManhattan:function(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)+Math.abs(this.w)},normalize:function(){return this.divideScalar(this.length())},setLength:function(a){return this.multiplyScalar(a/this.length())},lerp:function(a,b){this.x+=(a.x-this.x)*b;this.y+=(a.y-this.y)*b;this.z+=(a.z- +this.z)*b;this.w+=(a.w-this.w)*b;return this},lerpVectors:function(a,b,c){this.subVectors(b,a).multiplyScalar(c).add(a);return this},equals:function(a){return a.x===this.x&&a.y===this.y&&a.z===this.z&&a.w===this.w},fromArray:function(a,b){void 0===b&&(b=0);this.x=a[b];this.y=a[b+1];this.z=a[b+2];this.w=a[b+3];return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);a[b]=this.x;a[b+1]=this.y;a[b+2]=this.z;a[b+3]=this.w;return a},fromAttribute:function(a,b,c){void 0===c&&(c=0);b=b*a.itemSize+ +c;this.x=a.array[b];this.y=a.array[b+1];this.z=a.array[b+2];this.w=a.array[b+3];return this}};THREE.Euler=function(a,b,c,d){this._x=a||0;this._y=b||0;this._z=c||0;this._order=d||THREE.Euler.DefaultOrder};THREE.Euler.RotationOrders="XYZ YZX ZXY XZY YXZ ZYX".split(" ");THREE.Euler.DefaultOrder="XYZ"; +THREE.Euler.prototype={constructor:THREE.Euler,get x(){return this._x},set x(a){this._x=a;this.onChangeCallback()},get y(){return this._y},set y(a){this._y=a;this.onChangeCallback()},get z(){return this._z},set z(a){this._z=a;this.onChangeCallback()},get order(){return this._order},set order(a){this._order=a;this.onChangeCallback()},set:function(a,b,c,d){this._x=a;this._y=b;this._z=c;this._order=d||this._order;this.onChangeCallback();return this},clone:function(){return new this.constructor(this._x, +this._y,this._z,this._order)},copy:function(a){this._x=a._x;this._y=a._y;this._z=a._z;this._order=a._order;this.onChangeCallback();return this},setFromRotationMatrix:function(a,b,c){var d=THREE.Math.clamp,e=a.elements;a=e[0];var f=e[4],g=e[8],h=e[1],k=e[5],l=e[9],p=e[2],n=e[6],e=e[10];b=b||this._order;"XYZ"===b?(this._y=Math.asin(d(g,-1,1)),.99999>Math.abs(g)?(this._x=Math.atan2(-l,e),this._z=Math.atan2(-f,a)):(this._x=Math.atan2(n,k),this._z=0)):"YXZ"===b?(this._x=Math.asin(-d(l,-1,1)),.99999>Math.abs(l)? +(this._y=Math.atan2(g,e),this._z=Math.atan2(h,k)):(this._y=Math.atan2(-p,a),this._z=0)):"ZXY"===b?(this._x=Math.asin(d(n,-1,1)),.99999>Math.abs(n)?(this._y=Math.atan2(-p,e),this._z=Math.atan2(-f,k)):(this._y=0,this._z=Math.atan2(h,a))):"ZYX"===b?(this._y=Math.asin(-d(p,-1,1)),.99999>Math.abs(p)?(this._x=Math.atan2(n,e),this._z=Math.atan2(h,a)):(this._x=0,this._z=Math.atan2(-f,k))):"YZX"===b?(this._z=Math.asin(d(h,-1,1)),.99999>Math.abs(h)?(this._x=Math.atan2(-l,k),this._y=Math.atan2(-p,a)):(this._x= +0,this._y=Math.atan2(g,e))):"XZY"===b?(this._z=Math.asin(-d(f,-1,1)),.99999>Math.abs(f)?(this._x=Math.atan2(n,k),this._y=Math.atan2(g,a)):(this._x=Math.atan2(-l,e),this._y=0)):console.warn("THREE.Euler: .setFromRotationMatrix() given unsupported order: "+b);this._order=b;if(!1!==c)this.onChangeCallback();return this},setFromQuaternion:function(){var a;return function(b,c,d){void 0===a&&(a=new THREE.Matrix4);a.makeRotationFromQuaternion(b);this.setFromRotationMatrix(a,c,d);return this}}(),setFromVector3:function(a, +b){return this.set(a.x,a.y,a.z,b||this._order)},reorder:function(){var a=new THREE.Quaternion;return function(b){a.setFromEuler(this);this.setFromQuaternion(a,b)}}(),equals:function(a){return a._x===this._x&&a._y===this._y&&a._z===this._z&&a._order===this._order},fromArray:function(a){this._x=a[0];this._y=a[1];this._z=a[2];void 0!==a[3]&&(this._order=a[3]);this.onChangeCallback();return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);a[b]=this._x;a[b+1]=this._y;a[b+2]=this._z;a[b+ +3]=this._order;return a},toVector3:function(a){return a?a.set(this._x,this._y,this._z):new THREE.Vector3(this._x,this._y,this._z)},onChange:function(a){this.onChangeCallback=a;return this},onChangeCallback:function(){}};THREE.Line3=function(a,b){this.start=void 0!==a?a:new THREE.Vector3;this.end=void 0!==b?b:new THREE.Vector3}; +THREE.Line3.prototype={constructor:THREE.Line3,set:function(a,b){this.start.copy(a);this.end.copy(b);return this},clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.start.copy(a.start);this.end.copy(a.end);return this},center:function(a){return(a||new THREE.Vector3).addVectors(this.start,this.end).multiplyScalar(.5)},delta:function(a){return(a||new THREE.Vector3).subVectors(this.end,this.start)},distanceSq:function(){return this.start.distanceToSquared(this.end)},distance:function(){return this.start.distanceTo(this.end)}, +at:function(a,b){var c=b||new THREE.Vector3;return this.delta(c).multiplyScalar(a).add(this.start)},closestPointToPointParameter:function(){var a=new THREE.Vector3,b=new THREE.Vector3;return function(c,d){a.subVectors(c,this.start);b.subVectors(this.end,this.start);var e=b.dot(b),e=b.dot(a)/e;d&&(e=THREE.Math.clamp(e,0,1));return e}}(),closestPointToPoint:function(a,b,c){a=this.closestPointToPointParameter(a,b);c=c||new THREE.Vector3;return this.delta(c).multiplyScalar(a).add(this.start)},applyMatrix4:function(a){this.start.applyMatrix4(a); +this.end.applyMatrix4(a);return this},equals:function(a){return a.start.equals(this.start)&&a.end.equals(this.end)}};THREE.Box2=function(a,b){this.min=void 0!==a?a:new THREE.Vector2(Infinity,Infinity);this.max=void 0!==b?b:new THREE.Vector2(-Infinity,-Infinity)}; +THREE.Box2.prototype={constructor:THREE.Box2,set:function(a,b){this.min.copy(a);this.max.copy(b);return this},setFromPoints:function(a){this.makeEmpty();for(var b=0,c=a.length;bthis.max.x||a.ythis.max.y?!1:!0},containsBox:function(a){return this.min.x<=a.min.x&&a.max.x<=this.max.x&&this.min.y<=a.min.y&&a.max.y<=this.max.y?!0:!1},getParameter:function(a,b){return(b||new THREE.Vector2).set((a.x-this.min.x)/(this.max.x-this.min.x),(a.y-this.min.y)/(this.max.y-this.min.y))},intersectsBox:function(a){return a.max.xthis.max.x||a.max.y +this.max.y?!1:!0},clampPoint:function(a,b){return(b||new THREE.Vector2).copy(a).clamp(this.min,this.max)},distanceToPoint:function(){var a=new THREE.Vector2;return function(b){return a.copy(b).clamp(this.min,this.max).sub(b).length()}}(),intersect:function(a){this.min.max(a.min);this.max.min(a.max);return this},union:function(a){this.min.min(a.min);this.max.max(a.max);return this},translate:function(a){this.min.add(a);this.max.add(a);return this},equals:function(a){return a.min.equals(this.min)&& +a.max.equals(this.max)}};THREE.Box3=function(a,b){this.min=void 0!==a?a:new THREE.Vector3(Infinity,Infinity,Infinity);this.max=void 0!==b?b:new THREE.Vector3(-Infinity,-Infinity,-Infinity)}; +THREE.Box3.prototype={constructor:THREE.Box3,set:function(a,b){this.min.copy(a);this.max.copy(b);return this},setFromArray:function(a){this.makeEmpty();for(var b=Infinity,c=Infinity,d=Infinity,e=-Infinity,f=-Infinity,g=-Infinity,h=0,k=a.length;he&&(e=l);p>f&&(f=p);n>g&&(g=n)}this.min.set(b,c,d);this.max.set(e,f,g)},setFromPoints:function(a){this.makeEmpty();for(var b=0,c=a.length;bthis.max.x||a.ythis.max.y||a.zthis.max.z?!1:!0},containsBox:function(a){return this.min.x<=a.min.x&&a.max.x<=this.max.x&&this.min.y<=a.min.y&&a.max.y<=this.max.y&&this.min.z<= +a.min.z&&a.max.z<=this.max.z?!0:!1},getParameter:function(a,b){return(b||new THREE.Vector3).set((a.x-this.min.x)/(this.max.x-this.min.x),(a.y-this.min.y)/(this.max.y-this.min.y),(a.z-this.min.z)/(this.max.z-this.min.z))},intersectsBox:function(a){return a.max.xthis.max.x||a.max.ythis.max.y||a.max.zthis.max.z?!1:!0},intersectsSphere:function(){var a;return function(b){void 0===a&&(a=new THREE.Vector3);this.clampPoint(b.center,a);return a.distanceToSquared(b.center)<= +b.radius*b.radius}}(),intersectsPlane:function(a){var b,c;0=a.constant},clampPoint:function(a,b){return(b||new THREE.Vector3).copy(a).clamp(this.min, +this.max)},distanceToPoint:function(){var a=new THREE.Vector3;return function(b){return a.copy(b).clamp(this.min,this.max).sub(b).length()}}(),getBoundingSphere:function(){var a=new THREE.Vector3;return function(b){b=b||new THREE.Sphere;b.center=this.center();b.radius=.5*this.size(a).length();return b}}(),intersect:function(a){this.min.max(a.min);this.max.min(a.max);return this},union:function(a){this.min.min(a.min);this.max.max(a.max);return this},applyMatrix4:function(){var a=[new THREE.Vector3, +new THREE.Vector3,new THREE.Vector3,new THREE.Vector3,new THREE.Vector3,new THREE.Vector3,new THREE.Vector3,new THREE.Vector3];return function(b){a[0].set(this.min.x,this.min.y,this.min.z).applyMatrix4(b);a[1].set(this.min.x,this.min.y,this.max.z).applyMatrix4(b);a[2].set(this.min.x,this.max.y,this.min.z).applyMatrix4(b);a[3].set(this.min.x,this.max.y,this.max.z).applyMatrix4(b);a[4].set(this.max.x,this.min.y,this.min.z).applyMatrix4(b);a[5].set(this.max.x,this.min.y,this.max.z).applyMatrix4(b);a[6].set(this.max.x, +this.max.y,this.min.z).applyMatrix4(b);a[7].set(this.max.x,this.max.y,this.max.z).applyMatrix4(b);this.makeEmpty();this.setFromPoints(a);return this}}(),translate:function(a){this.min.add(a);this.max.add(a);return this},equals:function(a){return a.min.equals(this.min)&&a.max.equals(this.max)}};THREE.Matrix3=function(){this.elements=new Float32Array([1,0,0,0,1,0,0,0,1]);0this.determinant()&&(g=-g);c.x= +f[12];c.y=f[13];c.z=f[14];b.elements.set(this.elements);c=1/g;var f=1/h,l=1/k;b.elements[0]*=c;b.elements[1]*=c;b.elements[2]*=c;b.elements[4]*=f;b.elements[5]*=f;b.elements[6]*=f;b.elements[8]*=l;b.elements[9]*=l;b.elements[10]*=l;d.setFromRotationMatrix(b);e.x=g;e.y=h;e.z=k;return this}}(),makeFrustum:function(a,b,c,d,e,f){var g=this.elements;g[0]=2*e/(b-a);g[4]=0;g[8]=(b+a)/(b-a);g[12]=0;g[1]=0;g[5]=2*e/(d-c);g[9]=(d+c)/(d-c);g[13]=0;g[2]=0;g[6]=0;g[10]=-(f+e)/(f-e);g[14]=-2*f*e/(f-e);g[3]=0;g[7]= +0;g[11]=-1;g[15]=0;return this},makePerspective:function(a,b,c,d){a=c*Math.tan(THREE.Math.degToRad(.5*a));var e=-a;return this.makeFrustum(e*b,a*b,e,a,c,d)},makeOrthographic:function(a,b,c,d,e,f){var g=this.elements,h=1/(b-a),k=1/(c-d),l=1/(f-e);g[0]=2*h;g[4]=0;g[8]=0;g[12]=-((b+a)*h);g[1]=0;g[5]=2*k;g[9]=0;g[13]=-((c+d)*k);g[2]=0;g[6]=0;g[10]=-2*l;g[14]=-((f+e)*l);g[3]=0;g[7]=0;g[11]=0;g[15]=1;return this},equals:function(a){var b=this.elements;a=a.elements;for(var c=0;16>c;c++)if(b[c]!==a[c])return!1; +return!0},fromArray:function(a){this.elements.set(a);return this},toArray:function(){var a=this.elements;return[a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8],a[9],a[10],a[11],a[12],a[13],a[14],a[15]]}};THREE.Ray=function(a,b){this.origin=void 0!==a?a:new THREE.Vector3;this.direction=void 0!==b?b:new THREE.Vector3}; +THREE.Ray.prototype={constructor:THREE.Ray,set:function(a,b){this.origin.copy(a);this.direction.copy(b);return this},clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.origin.copy(a.origin);this.direction.copy(a.direction);return this},at:function(a,b){return(b||new THREE.Vector3).copy(this.direction).multiplyScalar(a).add(this.origin)},lookAt:function(a){this.direction.copy(a).sub(this.origin).normalize()},recast:function(){var a=new THREE.Vector3;return function(b){this.origin.copy(this.at(b, +a));return this}}(),closestPointToPoint:function(a,b){var c=b||new THREE.Vector3;c.subVectors(a,this.origin);var d=c.dot(this.direction);return 0>d?c.copy(this.origin):c.copy(this.direction).multiplyScalar(d).add(this.origin)},distanceToPoint:function(a){return Math.sqrt(this.distanceSqToPoint(a))},distanceSqToPoint:function(){var a=new THREE.Vector3;return function(b){var c=a.subVectors(b,this.origin).dot(this.direction);if(0>c)return this.origin.distanceToSquared(b);a.copy(this.direction).multiplyScalar(c).add(this.origin); +return a.distanceToSquared(b)}}(),distanceSqToSegment:function(){var a=new THREE.Vector3,b=new THREE.Vector3,c=new THREE.Vector3;return function(d,e,f,g){a.copy(d).add(e).multiplyScalar(.5);b.copy(e).sub(d).normalize();c.copy(this.origin).sub(a);var h=.5*d.distanceTo(e),k=-this.direction.dot(b),l=c.dot(this.direction),p=-c.dot(b),n=c.lengthSq(),m=Math.abs(1-k*k),q;0=-q?e<=q?(h=1/m,d*=h,e*=h,k=d*(d+k*e+2*l)+e*(k*d+e+2*p)+n):(e=h,d=Math.max(0,-(k*e+l)),k=-d*d+e*(e+2* +p)+n):(e=-h,d=Math.max(0,-(k*e+l)),k=-d*d+e*(e+2*p)+n):e<=-q?(d=Math.max(0,-(-k*h+l)),e=0f)return null;f=Math.sqrt(f-e);e=d-f;d+=f;return 0>e&&0>d?null:0>e?this.at(d,c):this.at(e,c)}}(),intersectsSphere:function(a){return this.distanceToPoint(a.center)<=a.radius},distanceToPlane:function(a){var b=a.normal.dot(this.direction);if(0===b)return 0===a.distanceToPoint(this.origin)?0:null;a=-(this.origin.dot(a.normal)+a.constant)/b;return 0<=a?a:null},intersectPlane:function(a,b){var c= +this.distanceToPlane(a);return null===c?null:this.at(c,b)},intersectsPlane:function(a){var b=a.distanceToPoint(this.origin);return 0===b||0>a.normal.dot(this.direction)*b?!0:!1},intersectBox:function(a,b){var c,d,e,f,g;d=1/this.direction.x;f=1/this.direction.y;g=1/this.direction.z;var h=this.origin;0<=d?(c=(a.min.x-h.x)*d,d*=a.max.x-h.x):(c=(a.max.x-h.x)*d,d*=a.min.x-h.x);0<=f?(e=(a.min.y-h.y)*f,f*=a.max.y-h.y):(e=(a.max.y-h.y)*f,f*=a.min.y-h.y);if(c>f||e>d)return null;if(e>c||c!==c)c=e;if(fg||e>d)return null;if(e>c||c!==c)c=e;if(gd?null:this.at(0<=c?c:d,b)},intersectsBox:function(){var a=new THREE.Vector3;return function(b){return null!==this.intersectBox(b,a)}}(),intersectTriangle:function(){var a=new THREE.Vector3,b=new THREE.Vector3,c=new THREE.Vector3,d=new THREE.Vector3;return function(e,f,g,h,k){b.subVectors(f,e);c.subVectors(g,e);d.crossVectors(b,c);f=this.direction.dot(d); +if(0f)h=-1,f=-f;else return null;a.subVectors(this.origin,e);e=h*this.direction.dot(c.crossVectors(a,c));if(0>e)return null;g=h*this.direction.dot(b.cross(a));if(0>g||e+g>f)return null;e=-h*a.dot(d);return 0>e?null:this.at(e/f,k)}}(),applyMatrix4:function(a){this.direction.add(this.origin).applyMatrix4(a);this.origin.applyMatrix4(a);this.direction.sub(this.origin);this.direction.normalize();return this},equals:function(a){return a.origin.equals(this.origin)&&a.direction.equals(this.direction)}}; +THREE.Sphere=function(a,b){this.center=void 0!==a?a:new THREE.Vector3;this.radius=void 0!==b?b:0}; +THREE.Sphere.prototype={constructor:THREE.Sphere,set:function(a,b){this.center.copy(a);this.radius=b;return this},setFromPoints:function(){var a=new THREE.Box3;return function(b,c){var d=this.center;void 0!==c?d.copy(c):a.setFromPoints(b).center(d);for(var e=0,f=0,g=b.length;f=this.radius},containsPoint:function(a){return a.distanceToSquared(this.center)<=this.radius*this.radius},distanceToPoint:function(a){return a.distanceTo(this.center)-this.radius},intersectsSphere:function(a){var b=this.radius+a.radius;return a.center.distanceToSquared(this.center)<=b*b},intersectsBox:function(a){return a.intersectsSphere(this)},intersectsPlane:function(a){return Math.abs(this.center.dot(a.normal)-a.constant)<=this.radius},clampPoint:function(a,b){var c= +this.center.distanceToSquared(a),d=b||new THREE.Vector3;d.copy(a);c>this.radius*this.radius&&(d.sub(this.center).normalize(),d.multiplyScalar(this.radius).add(this.center));return d},getBoundingBox:function(a){a=a||new THREE.Box3;a.set(this.center,this.center);a.expandByScalar(this.radius);return a},applyMatrix4:function(a){this.center.applyMatrix4(a);this.radius*=a.getMaxScaleOnAxis();return this},translate:function(a){this.center.add(a);return this},equals:function(a){return a.center.equals(this.center)&& +a.radius===this.radius}};THREE.Frustum=function(a,b,c,d,e,f){this.planes=[void 0!==a?a:new THREE.Plane,void 0!==b?b:new THREE.Plane,void 0!==c?c:new THREE.Plane,void 0!==d?d:new THREE.Plane,void 0!==e?e:new THREE.Plane,void 0!==f?f:new THREE.Plane]}; +THREE.Frustum.prototype={constructor:THREE.Frustum,set:function(a,b,c,d,e,f){var g=this.planes;g[0].copy(a);g[1].copy(b);g[2].copy(c);g[3].copy(d);g[4].copy(e);g[5].copy(f);return this},clone:function(){return(new this.constructor).copy(this)},copy:function(a){for(var b=this.planes,c=0;6>c;c++)b[c].copy(a.planes[c]);return this},setFromMatrix:function(a){var b=this.planes,c=a.elements;a=c[0];var d=c[1],e=c[2],f=c[3],g=c[4],h=c[5],k=c[6],l=c[7],p=c[8],n=c[9],m=c[10],q=c[11],u=c[12],v=c[13],t=c[14], +c=c[15];b[0].setComponents(f-a,l-g,q-p,c-u).normalize();b[1].setComponents(f+a,l+g,q+p,c+u).normalize();b[2].setComponents(f+d,l+h,q+n,c+v).normalize();b[3].setComponents(f-d,l-h,q-n,c-v).normalize();b[4].setComponents(f-e,l-k,q-m,c-t).normalize();b[5].setComponents(f+e,l+k,q+m,c+t).normalize();return this},intersectsObject:function(){var a=new THREE.Sphere;return function(b){var c=b.geometry;null===c.boundingSphere&&c.computeBoundingSphere();a.copy(c.boundingSphere);a.applyMatrix4(b.matrixWorld); +return this.intersectsSphere(a)}}(),intersectsSphere:function(a){var b=this.planes,c=a.center;a=-a.radius;for(var d=0;6>d;d++)if(b[d].distanceToPoint(c)e;e++){var f=d[e];a.x=0g&&0>f)return!1}return!0}}(),containsPoint:function(a){for(var b=this.planes,c=0;6>c;c++)if(0>b[c].distanceToPoint(a))return!1;return!0}};THREE.Plane=function(a,b){this.normal=void 0!==a?a:new THREE.Vector3(1,0,0);this.constant=void 0!==b?b:0}; +THREE.Plane.prototype={constructor:THREE.Plane,set:function(a,b){this.normal.copy(a);this.constant=b;return this},setComponents:function(a,b,c,d){this.normal.set(a,b,c);this.constant=d;return this},setFromNormalAndCoplanarPoint:function(a,b){this.normal.copy(a);this.constant=-b.dot(this.normal);return this},setFromCoplanarPoints:function(){var a=new THREE.Vector3,b=new THREE.Vector3;return function(c,d,e){d=a.subVectors(e,d).cross(b.subVectors(c,d)).normalize();this.setFromNormalAndCoplanarPoint(d, +c);return this}}(),clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.normal.copy(a.normal);this.constant=a.constant;return this},normalize:function(){var a=1/this.normal.length();this.normal.multiplyScalar(a);this.constant*=a;return this},negate:function(){this.constant*=-1;this.normal.negate();return this},distanceToPoint:function(a){return this.normal.dot(a)+this.constant},distanceToSphere:function(a){return this.distanceToPoint(a.center)-a.radius},projectPoint:function(a, +b){return this.orthoPoint(a,b).sub(a).negate()},orthoPoint:function(a,b){var c=this.distanceToPoint(a);return(b||new THREE.Vector3).copy(this.normal).multiplyScalar(c)},intersectLine:function(){var a=new THREE.Vector3;return function(b,c){var d=c||new THREE.Vector3,e=b.delta(a),f=this.normal.dot(e);if(0===f){if(0===this.distanceToPoint(b.start))return d.copy(b.start)}else return f=-(b.start.dot(this.normal)+this.constant)/f,0>f||1b&&0a&&0e;e++)8===e||13===e||18===e||23===e?b[e]="-":14===e?b[e]="4":(2>=c&&(c=33554432+16777216*Math.random()|0),d=c&15,c>>=4,b[e]=a[19===e?d&3|8:d]);return b.join("")}}(),clamp:function(a,b,c){return Math.max(b,Math.min(c,a))},euclideanModulo:function(a,b){return(a%b+b)%b},mapLinear:function(a,b,c,d,e){return d+(a-b)*(e-d)/(c-b)},smoothstep:function(a, +b,c){if(a<=b)return 0;if(a>=c)return 1;a=(a-b)/(c-b);return a*a*(3-2*a)},smootherstep:function(a,b,c){if(a<=b)return 0;if(a>=c)return 1;a=(a-b)/(c-b);return a*a*a*(a*(6*a-15)+10)},random16:function(){console.warn("THREE.Math.random16() has been deprecated. Use Math.random() instead.");return Math.random()},randInt:function(a,b){return a+Math.floor(Math.random()*(b-a+1))},randFloat:function(a,b){return a+Math.random()*(b-a)},randFloatSpread:function(a){return a*(.5-Math.random())},degToRad:function(){var a= +Math.PI/180;return function(b){return b*a}}(),radToDeg:function(){var a=180/Math.PI;return function(b){return b*a}}(),isPowerOfTwo:function(a){return 0===(a&a-1)&&0!==a},nearestPowerOfTwo:function(a){return Math.pow(2,Math.round(Math.log(a)/Math.LN2))},nextPowerOfTwo:function(a){a--;a|=a>>1;a|=a>>2;a|=a>>4;a|=a>>8;a|=a>>16;a++;return a}}; +THREE.Spline=function(a){function b(a,b,c,d,e,f,g){a=.5*(c-a);d=.5*(d-b);return(2*(b-c)+a+d)*g+(-3*(b-c)-2*a-d)*f+a*e+b}this.points=a;var c=[],d={x:0,y:0,z:0},e,f,g,h,k,l,p,n,m;this.initFromArray=function(a){this.points=[];for(var b=0;bthis.points.length-2?this.points.length-1:f+1;c[3]=f>this.points.length-3?this.points.length-1:f+ +2;l=this.points[c[0]];p=this.points[c[1]];n=this.points[c[2]];m=this.points[c[3]];h=g*g;k=g*h;d.x=b(l.x,p.x,n.x,m.x,g,h,k);d.y=b(l.y,p.y,n.y,m.y,g,h,k);d.z=b(l.z,p.z,n.z,m.z,g,h,k);return d};this.getControlPointsArray=function(){var a,b,c=this.points.length,d=[];for(a=0;a=b.x+b.y}}(); +THREE.Triangle.prototype={constructor:THREE.Triangle,set:function(a,b,c){this.a.copy(a);this.b.copy(b);this.c.copy(c);return this},setFromPointsAndIndices:function(a,b,c,d){this.a.copy(a[b]);this.b.copy(a[c]);this.c.copy(a[d]);return this},clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.a.copy(a.a);this.b.copy(a.b);this.c.copy(a.c);return this},area:function(){var a=new THREE.Vector3,b=new THREE.Vector3;return function(){a.subVectors(this.c,this.b);b.subVectors(this.a, +this.b);return.5*a.cross(b).length()}}(),midpoint:function(a){return(a||new THREE.Vector3).addVectors(this.a,this.b).add(this.c).multiplyScalar(1/3)},normal:function(a){return THREE.Triangle.normal(this.a,this.b,this.c,a)},plane:function(a){return(a||new THREE.Plane).setFromCoplanarPoints(this.a,this.b,this.c)},barycoordFromPoint:function(a,b){return THREE.Triangle.barycoordFromPoint(a,this.a,this.b,this.c,b)},containsPoint:function(a){return THREE.Triangle.containsPoint(a,this.a,this.b,this.c)}, +equals:function(a){return a.a.equals(this.a)&&a.b.equals(this.b)&&a.c.equals(this.c)}};THREE.Interpolant=function(a,b,c,d){this.parameterPositions=a;this._cachedIndex=0;this.resultBuffer=void 0!==d?d:new b.constructor(c);this.sampleValues=b;this.valueSize=c}; +THREE.Interpolant.prototype={constructor:THREE.Interpolant,evaluate:function(a){var b=this.parameterPositions,c=this._cachedIndex,d=b[c],e=b[c-1];a:{b:{c:{d:if(!(a=e)break a;else{f=b[1];a=e)break b}d= +c;c=0}}for(;c>>1,ad;d++)if(e[d]===e[(d+1)%3]){a.push(f);break}for(f=a.length-1;0<=f;f--)for(e=a[f],this.faces.splice(e, +1),c=0,g=this.faceVertexUvs.length;cthis.duration&&this.resetDuration();this.trim();this.optimize()}; +THREE.AnimationClip.prototype={constructor:THREE.AnimationClip,resetDuration:function(){for(var a=0,b=0,c=this.tracks.length;b!==c;++b)var d=this.tracks[b],a=Math.max(a,d.times[d.times.length-1]);this.duration=a},trim:function(){for(var a=0;ab||0===c)return;this._startTime=null;b*=c}b*=this._updateTimeScale(a);c=this._updateTime(b);a=this._updateWeight(a);if(0c.parameterPositions[1]&&(this.stopFading(),0===d&&(this.enabled=!1))}}return this._effectiveWeight=b},_updateTimeScale:function(a){var b=0;if(!this.paused){var b=this.timeScale,c=this._timeScaleInterpolant;if(null!==c){var d=c.evaluate(a)[0],b=b*d;a>c.parameterPositions[1]&&(this.stopWarping(),0===b?this.pause=!0:this.timeScale=b)}}return this._effectiveTimeScale= +b},_updateTime:function(a){var b=this.time+a;if(0===a)return b;var c=this._clip.duration,d=this.loop,e=this._loopCount,f=!1;switch(d){case THREE.LoopOnce:-1===e&&(this.loopCount=0,this._setEndings(!0,!0,!1));if(b>=c)b=c;else if(0>b)b=0;else break;this.clampWhenFinished?this.pause=!0:this.enabled=!1;this._mixer.dispatchEvent({type:"finished",action:this,direction:0>a?-1:1});break;case THREE.LoopPingPong:f=!0;case THREE.LoopRepeat:-1===e&&(0=c||0>b){var g=Math.floor(b/c),b=b-c*g,e=e+Math.abs(g),h=this.repetitions-e;if(0>h){this.clampWhenFinished?this.paused=!0:this.enabled=!1;b=0a,this._setEndings(a,!a,f)):this._setEndings(!1,!1,f);this._loopCount=e;this._mixer.dispatchEvent({type:"loop",action:this,loopDelta:g})}if(d===THREE.LoopPingPong&&1===(e&1))return this.time=b,c-b}return this.time=b},_setEndings:function(a, +b,c){var d=this._interpolantSettings;c?(d.endingStart=THREE.ZeroSlopeEnding,d.endingEnd=THREE.ZeroSlopeEnding):(d.endingStart=a?this.zeroSlopeAtStart?THREE.ZeroSlopeEnding:THREE.ZeroCurvatureEnding:THREE.WrapAroundEnding,d.endingEnd=b?this.zeroSlopeAtEnd?THREE.ZeroSlopeEnding:THREE.ZeroCurvatureEnding:THREE.WrapAroundEnding)},_scheduleFading:function(a,b,c){var d=this._mixer,e=d.time,f=this._weightInterpolant;null===f&&(this._weightInterpolant=f=d._lendControlInterpolant());d=f.parameterPositions; +f=f.sampleValues;d[0]=e;f[0]=b;d[1]=e+a;f[1]=c;return this}}; +Object.assign(THREE.AnimationMixer.prototype,{_bindAction:function(a,b){var c=a._localRoot||this._root,d=a._clip.tracks,e=d.length,f=a._propertyBindings,g=a._interpolants,h=c.uuid,k=this._bindingsByRootAndName,l=k[h];void 0===l&&(l={},k[h]=l);for(k=0;k!==e;++k){var p=d[k],n=p.name,m=l[n];if(void 0===m){m=f[k];if(void 0!==m){null===m._cacheIndex&&(++m.referenceCount,this._addInactiveBinding(m,h,n));continue}m=new THREE.PropertyMixer(THREE.PropertyBinding.create(c,n,b&&b._propertyBindings[k].binding.parsedPath), +p.ValueTypeName,p.getValueSize());++m.referenceCount;this._addInactiveBinding(m,h,n)}f[k]=m;g[k].resultBuffer=m.buffer}},_activateAction:function(a){if(!this._isActiveAction(a)){if(null===a._cacheIndex){var b=(a._localRoot||this._root).uuid,c=a._clip.name,d=this._actionsByClip[c];this._bindAction(a,d&&d.knownActions[0]);this._addInactiveAction(a,c,b)}b=a._propertyBindings;c=0;for(d=b.length;c!==d;++c){var e=b[c];0===e.useCount++&&(this._lendBinding(e),e.saveOriginalState())}this._lendAction(a)}}, +_deactivateAction:function(a){if(this._isActiveAction(a)){for(var b=a._propertyBindings,c=0,d=b.length;c!==d;++c){var e=b[c];0===--e.useCount&&(e.restoreOriginalState(),this._takeBackBinding(e))}this._takeBackAction(a)}},_initMemoryManager:function(){this._actions=[];this._nActiveActions=0;this._actionsByClip={};this._bindings=[];this._nActiveBindings=0;this._bindingsByRootAndName={};this._controlInterpolants=[];this._nActiveControlInterpolants=0;var a=this;this.stats={actions:{get total(){return a._actions.length}, +get inUse(){return a._nActiveActions}},bindings:{get total(){return a._bindings.length},get inUse(){return a._nActiveBindings}},controlInterpolants:{get total(){return a._controlInterpolants.length},get inUse(){return a._nActiveControlInterpolants}}}},_isActiveAction:function(a){a=a._cacheIndex;return null!==a&&a=c){var n=c++,m=b[n];d[m.uuid]= +p;b[p]=m;d[l]=n;b[n]=k;k=0;for(l=f;k!==l;++k){var m=e[k],q=m[p];m[p]=m[n];m[n]=q}}}this.nCachedObjects_=c},uncache:function(a){for(var b=this._objects,c=b.length,d=this.nCachedObjects_,e=this._indicesByUUID,f=this._bindings,g=f.length,h=0,k=arguments.length;h!==k;++h){var l=arguments[h].uuid,p=e[l];if(void 0!==p)if(delete e[l],pb;)--f;++f;if(0!==e||f!==d)e>=f&&(f=Math.max(f,1),e=f-1),d=this.getValueSize(),this.times=THREE.AnimationUtils.arraySlice(c,e,f),this.values=THREE.AnimationUtils.arraySlice(this.values,e*d,f*d);return this},validate:function(){var a=!0,b=this.getValueSize();0!==b-Math.floor(b)&&(console.error("invalid value size in track", +this),a=!1);var c=this.times,b=this.values,d=c.length;0===d&&(console.error("track is empty",this),a=!1);for(var e=null,f=0;f!==d;f++){var g=c[f];if("number"===typeof g&&isNaN(g)){console.error("time is not a valid number",this,f,g);a=!1;break}if(null!==e&&e>g){console.error("out of order keys",this,f,g,e);a=!1;break}e=g}if(void 0!==b&&THREE.AnimationUtils.isTypedArray(b))for(f=0,c=b.length;f!==c;++f)if(d=b[f],isNaN(d)){console.error("value is not a valid number",this,f,d);a=!1;break}return a},optimize:function(){for(var a= +this.times,b=this.values,c=this.getValueSize(),d=1,e=1,f=a.length-1;e<=f;++e){var g=!1,h=a[e];if(h!==a[e+1]&&(1!==e||h!==h[0]))for(var k=e*c,l=k-c,p=k+c,h=0;h!==c;++h){var n=b[k+h];if(n!==b[l+h]||n!==b[p+h]){g=!0;break}}if(g){if(e!==d)for(a[d]=a[e],g=e*c,k=d*c,h=0;h!==c;++h)b[k+h]=b[g+h];++d}}d!==a.length&&(this.times=THREE.AnimationUtils.arraySlice(a,0,d),this.values=THREE.AnimationUtils.arraySlice(b,0,d*c));return this}}; +Object.assign(THREE.KeyframeTrack,{parse:function(a){if(void 0===a.type)throw Error("track type undefined, can not parse");var b=THREE.KeyframeTrack._getTrackTypeForValueTypeName(a.type);if(void 0===a.times){console.warn("legacy JSON format detected, converting");var c=[],d=[];THREE.AnimationUtils.flattenJSON(a.keys,c,d,"value");a.times=c;a.values=d}return void 0!==b.parse?b.parse(a):new b(a.name,a.times,a.values,a.interpolation)},toJSON:function(a){var b=a.constructor;if(void 0!==b.toJSON)b=b.toJSON(a); +else{var b={name:a.name,times:THREE.AnimationUtils.convertArray(a.times,Array),values:THREE.AnimationUtils.convertArray(a.values,Array)},c=a.getInterpolation();c!==a.DefaultInterpolation&&(b.interpolation=c)}b.type=a.ValueTypeName;return b},_getTrackTypeForValueTypeName:function(a){switch(a.toLowerCase()){case "scalar":case "double":case "float":case "number":case "integer":return THREE.NumberKeyframeTrack;case "vector":case "vector2":case "vector3":case "vector4":return THREE.VectorKeyframeTrack; +case "color":return THREE.ColorKeyframeTrack;case "quaternion":return THREE.QuaternionKeyframeTrack;case "bool":case "boolean":return THREE.BooleanKeyframeTrack;case "string":return THREE.StringKeyframeTrack}throw Error("Unsupported typeName: "+a);}});THREE.PropertyBinding=function(a,b,c){this.path=b;this.parsedPath=c||THREE.PropertyBinding.parseTrackName(b);this.node=THREE.PropertyBinding.findNode(a,this.parsedPath.nodeName)||a;this.rootNode=a}; +THREE.PropertyBinding.prototype={constructor:THREE.PropertyBinding,getValue:function(a,b){this.bind();this.getValue(a,b)},setValue:function(a,b){this.bind();this.setValue(a,b)},bind:function(){var a=this.node,b=this.parsedPath,c=b.objectName,d=b.propertyName,e=b.propertyIndex;a||(this.node=a=THREE.PropertyBinding.findNode(this.rootNode,b.nodeName)||this.rootNode);this.getValue=this._getValue_unavailable;this.setValue=this._setValue_unavailable;if(a){if(c){var f=b.objectIndex;switch(c){case "materials":if(!a.material){console.error(" can not bind to material as node does not have a material", +this);return}if(!a.material.materials){console.error(" can not bind to material.materials as node.material does not have a materials array",this);return}a=a.material.materials;break;case "bones":if(!a.skeleton){console.error(" can not bind to bones as node does not have a skeleton",this);return}a=a.skeleton.bones;for(c=0;cd&&this._mixBufferRegion(c,a,3*b,1-d,b);for(var d=b,f=b+b;d!==f;++d)if(c[d]!==c[d+b]){e.setValue(c,a); +break}},saveOriginalState:function(){var a=this.buffer,b=this.valueSize,c=3*b;this.binding.getValue(a,c);for(var d=b;d!==c;++d)a[d]=a[c+d%b];this.cumulativeWeight=0},restoreOriginalState:function(){this.binding.setValue(this.buffer,3*this.valueSize)},_select:function(a,b,c,d,e){if(.5<=d)for(d=0;d!==e;++d)a[b+d]=a[c+d]},_slerp:function(a,b,c,d,e){THREE.Quaternion.slerpFlat(a,b,a,b,a,c,d)},_lerp:function(a,b,c,d,e){for(var f=1-d,g=0;g!==e;++g){var h=b+g;a[h]=a[h]*f+a[c+g]*d}}}; +THREE.BooleanKeyframeTrack=function(a,b,c){THREE.KeyframeTrack.call(this,a,b,c)};THREE.BooleanKeyframeTrack.prototype=Object.assign(Object.create(THREE.KeyframeTrack.prototype),{constructor:THREE.BooleanKeyframeTrack,ValueTypeName:"bool",ValueBufferType:Array,DefaultInterpolation:THREE.IntepolateDiscrete,InterpolantFactoryMethodLinear:void 0,InterpolantFactoryMethodSmooth:void 0});THREE.NumberKeyframeTrack=function(a,b,c,d){THREE.KeyframeTrack.call(this,a,b,c,d)}; +THREE.NumberKeyframeTrack.prototype=Object.assign(Object.create(THREE.KeyframeTrack.prototype),{constructor:THREE.NumberKeyframeTrack,ValueTypeName:"number"});THREE.QuaternionKeyframeTrack=function(a,b,c,d){THREE.KeyframeTrack.call(this,a,b,c,d)}; +THREE.QuaternionKeyframeTrack.prototype=Object.assign(Object.create(THREE.KeyframeTrack.prototype),{constructor:THREE.QuaternionKeyframeTrack,ValueTypeName:"quaternion",DefaultInterpolation:THREE.InterpolateLinear,InterpolantFactoryMethodLinear:function(a){return new THREE.QuaternionLinearInterpolant(this.times,this.values,this.getValueSize(),a)},InterpolantFactoryMethodSmooth:void 0});THREE.StringKeyframeTrack=function(a,b,c,d){THREE.KeyframeTrack.call(this,a,b,c,d)}; +THREE.StringKeyframeTrack.prototype=Object.assign(Object.create(THREE.KeyframeTrack.prototype),{constructor:THREE.StringKeyframeTrack,ValueTypeName:"string",ValueBufferType:Array,DefaultInterpolation:THREE.IntepolateDiscrete,InterpolantFactoryMethodLinear:void 0,InterpolantFactoryMethodSmooth:void 0});THREE.VectorKeyframeTrack=function(a,b,c,d){THREE.KeyframeTrack.call(this,a,b,c,d)}; +THREE.VectorKeyframeTrack.prototype=Object.assign(Object.create(THREE.KeyframeTrack.prototype),{constructor:THREE.VectorKeyframeTrack,ValueTypeName:"vector"}); +THREE.Audio=function(a){THREE.Object3D.call(this);this.type="Audio";this.context=a.context;this.source=this.context.createBufferSource();this.source.onended=this.onEnded.bind(this);this.gain=this.context.createGain();this.gain.connect(a.getInput());this.autoplay=!1;this.startTime=0;this.playbackRate=1;this.isPlaying=!1;this.hasPlaybackControl=!0;this.sourceType="empty";this.filter=null};THREE.Audio.prototype=Object.create(THREE.Object3D.prototype);THREE.Audio.prototype.constructor=THREE.Audio; +THREE.Audio.prototype.getOutput=function(){return this.gain};THREE.Audio.prototype.load=function(a){var b=new THREE.AudioBuffer(this.context);b.load(a);this.setBuffer(b);return this};THREE.Audio.prototype.setNodeSource=function(a){this.hasPlaybackControl=!1;this.sourceType="audioNode";this.source=a;this.connect();return this};THREE.Audio.prototype.setBuffer=function(a){var b=this;a.onReady(function(a){b.source.buffer=a;b.sourceType="buffer";b.autoplay&&b.play()});return this}; +THREE.Audio.prototype.play=function(){if(!0===this.isPlaying)console.warn("THREE.Audio: Audio is already playing.");else if(!1===this.hasPlaybackControl)console.warn("THREE.Audio: this Audio has no playback control.");else{var a=this.context.createBufferSource();a.buffer=this.source.buffer;a.loop=this.source.loop;a.onended=this.source.onended;a.start(0,this.startTime);a.playbackRate.value=this.playbackRate;this.isPlaying=!0;this.source=a;this.connect()}}; +THREE.Audio.prototype.pause=function(){!1===this.hasPlaybackControl?console.warn("THREE.Audio: this Audio has no playback control."):(this.source.stop(),this.startTime=this.context.currentTime)};THREE.Audio.prototype.stop=function(){!1===this.hasPlaybackControl?console.warn("THREE.Audio: this Audio has no playback control."):(this.source.stop(),this.startTime=0)};THREE.Audio.prototype.connect=function(){null!==this.filter?(this.source.connect(this.filter),this.filter.connect(this.getOutput())):this.source.connect(this.getOutput())}; +THREE.Audio.prototype.disconnect=function(){null!==this.filter?(this.source.disconnect(this.filter),this.filter.disconnect(this.getOutput())):this.source.disconnect(this.getOutput())};THREE.Audio.prototype.getFilter=function(){return this.filter};THREE.Audio.prototype.setFilter=function(a){void 0===a&&(a=null);!0===this.isPlaying?(this.disconnect(),this.filter=a,this.connect()):this.filter=a}; +THREE.Audio.prototype.setPlaybackRate=function(a){!1===this.hasPlaybackControl?console.warn("THREE.Audio: this Audio has no playback control."):(this.playbackRate=a,!0===this.isPlaying&&(this.source.playbackRate.value=this.playbackRate))};THREE.Audio.prototype.getPlaybackRate=function(){return this.playbackRate};THREE.Audio.prototype.onEnded=function(){this.isPlaying=!1}; +THREE.Audio.prototype.setLoop=function(a){!1===this.hasPlaybackControl?console.warn("THREE.Audio: this Audio has no playback control."):this.source.loop=a};THREE.Audio.prototype.getLoop=function(){return!1===this.hasPlaybackControl?(console.warn("THREE.Audio: this Audio has no playback control."),!1):this.source.loop};THREE.Audio.prototype.setVolume=function(a){this.gain.gain.value=a};THREE.Audio.prototype.getVolume=function(){return this.gain.gain.value}; +THREE.AudioAnalyser=function(a,b){this.analyser=a.context.createAnalyser();this.analyser.fftSize=void 0!==b?b:2048;this.data=new Uint8Array(this.analyser.frequencyBinCount);a.getOutput().connect(this.analyser)};THREE.AudioAnalyser.prototype={constructor:THREE.AudioAnalyser,getData:function(){this.analyser.getByteFrequencyData(this.data);return this.data}};THREE.AudioBuffer=function(a){this.context=a;this.ready=!1;this.readyCallbacks=[]}; +THREE.AudioBuffer.prototype.load=function(a){var b=this,c=new XMLHttpRequest;c.open("GET",a,!0);c.responseType="arraybuffer";c.onload=function(a){b.context.decodeAudioData(this.response,function(a){b.buffer=a;b.ready=!0;for(a=0;ak.opacity&&(k.transparent=!0);c.setTextures(h);return c.parse(k)}}()}; +THREE.Loader.Handlers={handlers:[],add:function(a,b){this.handlers.push(a,b)},get:function(a){for(var b=this.handlers,c=0,d=b.length;cg;g++)m=w[k++],s=t[2*m],m=t[2*m+1],s=new THREE.Vector2(s,m),2!==g&&c.faceVertexUvs[d][h].push(s),0!==g&&c.faceVertexUvs[d][h+1].push(s);n&&(n=3*w[k++],q.normal.set(E[n++],E[n++],E[n]),v.normal.copy(q.normal));if(u)for(d=0;4>d;d++)n=3*w[k++],u=new THREE.Vector3(E[n++],E[n++],E[n]),2!==d&&q.vertexNormals.push(u),0!==d&&v.vertexNormals.push(u); +p&&(p=w[k++],p=x[p],q.color.setHex(p),v.color.setHex(p));if(b)for(d=0;4>d;d++)p=w[k++],p=x[p],2!==d&&q.vertexColors.push(new THREE.Color(p)),0!==d&&v.vertexColors.push(new THREE.Color(p));c.faces.push(q);c.faces.push(v)}else{q=new THREE.Face3;q.a=w[k++];q.b=w[k++];q.c=w[k++];h&&(h=w[k++],q.materialIndex=h);h=c.faces.length;if(d)for(d=0;dg;g++)m=w[k++],s=t[2*m],m=t[2*m+1],s=new THREE.Vector2(s,m),c.faceVertexUvs[d][h].push(s);n&&(n=3*w[k++],q.normal.set(E[n++], +E[n++],E[n]));if(u)for(d=0;3>d;d++)n=3*w[k++],u=new THREE.Vector3(E[n++],E[n++],E[n]),q.vertexNormals.push(u);p&&(p=w[k++],q.color.setHex(x[p]));if(b)for(d=0;3>d;d++)p=w[k++],q.vertexColors.push(new THREE.Color(x[p]));c.faces.push(q)}})(d);(function(){var b=void 0!==a.influencesPerVertex?a.influencesPerVertex:2;if(a.skinWeights)for(var d=0,g=a.skinWeights.length;dthis.opacity&&(d.opacity=this.opacity);!0===this.transparent&&(d.transparent=this.transparent);0a.x||1a.x?0:1;break;case THREE.MirroredRepeatWrapping:1===Math.abs(Math.floor(a.x)%2)?a.x=Math.ceil(a.x)-a.x:a.x-=Math.floor(a.x)}if(0>a.y||1a.y?0:1;break;case THREE.MirroredRepeatWrapping:1=== +Math.abs(Math.floor(a.y)%2)?a.y=Math.ceil(a.y)-a.y:a.y-=Math.floor(a.y)}this.flipY&&(a.y=1-a.y)}}};THREE.EventDispatcher.prototype.apply(THREE.Texture.prototype);THREE.TextureIdCount=0;THREE.CanvasTexture=function(a,b,c,d,e,f,g,h,k){THREE.Texture.call(this,a,b,c,d,e,f,g,h,k);this.needsUpdate=!0};THREE.CanvasTexture.prototype=Object.create(THREE.Texture.prototype);THREE.CanvasTexture.prototype.constructor=THREE.CanvasTexture; +THREE.CubeTexture=function(a,b,c,d,e,f,g,h,k){a=void 0!==a?a:[];b=void 0!==b?b:THREE.CubeReflectionMapping;THREE.Texture.call(this,a,b,c,d,e,f,g,h,k);this.flipY=!1};THREE.CubeTexture.prototype=Object.create(THREE.Texture.prototype);THREE.CubeTexture.prototype.constructor=THREE.CubeTexture;Object.defineProperty(THREE.CubeTexture.prototype,"images",{get:function(){return this.image},set:function(a){this.image=a}}); +THREE.CompressedTexture=function(a,b,c,d,e,f,g,h,k,l,p){THREE.Texture.call(this,null,f,g,h,k,l,d,e,p);this.image={width:b,height:c};this.mipmaps=a;this.generateMipmaps=this.flipY=!1};THREE.CompressedTexture.prototype=Object.create(THREE.Texture.prototype);THREE.CompressedTexture.prototype.constructor=THREE.CompressedTexture; +THREE.DataTexture=function(a,b,c,d,e,f,g,h,k,l,p){THREE.Texture.call(this,null,f,g,h,k,l,d,e,p);this.image={data:a,width:b,height:c};this.magFilter=void 0!==k?k:THREE.NearestFilter;this.minFilter=void 0!==l?l:THREE.NearestFilter;this.generateMipmaps=this.flipY=!1};THREE.DataTexture.prototype=Object.create(THREE.Texture.prototype);THREE.DataTexture.prototype.constructor=THREE.DataTexture; +THREE.VideoTexture=function(a,b,c,d,e,f,g,h,k){function l(){requestAnimationFrame(l);a.readyState===a.HAVE_ENOUGH_DATA&&(p.needsUpdate=!0)}THREE.Texture.call(this,a,b,c,d,e,f,g,h,k);this.generateMipmaps=!1;var p=this;l()};THREE.VideoTexture.prototype=Object.create(THREE.Texture.prototype);THREE.VideoTexture.prototype.constructor=THREE.VideoTexture;THREE.Group=function(){THREE.Object3D.call(this);this.type="Group"};THREE.Group.prototype=Object.create(THREE.Object3D.prototype); +THREE.Group.prototype.constructor=THREE.Group;THREE.Points=function(a,b){THREE.Object3D.call(this);this.type="Points";this.geometry=void 0!==a?a:new THREE.Geometry;this.material=void 0!==b?b:new THREE.PointsMaterial({color:16777215*Math.random()})};THREE.Points.prototype=Object.create(THREE.Object3D.prototype);THREE.Points.prototype.constructor=THREE.Points; +THREE.Points.prototype.raycast=function(){var a=new THREE.Matrix4,b=new THREE.Ray,c=new THREE.Sphere;return function(d,e){function f(a,c){var f=b.distanceSqToPoint(a);if(fd.far||e.push({distance:l,distanceToRay:Math.sqrt(f),point:h.clone(),index:c,face:null,object:g})}}var g=this,h=this.geometry,k=this.matrixWorld,l=d.params.Points.threshold;null===h.boundingSphere&&h.computeBoundingSphere();c.copy(h.boundingSphere); +c.applyMatrix4(k);if(!1!==d.ray.intersectsSphere(c)){a.getInverse(k);b.copy(d.ray).applyMatrix4(a);var l=l/((this.scale.x+this.scale.y+this.scale.z)/3),p=l*l,l=new THREE.Vector3;if(h instanceof THREE.BufferGeometry){var n=h.index,h=h.attributes.position.array;if(null!==n)for(var m=n.array,n=0,q=m.length;nf||(p.applyMatrix4(this.matrixWorld),v=d.ray.origin.distanceTo(p),vd.far||e.push({distance:v,point:h.clone().applyMatrix4(this.matrixWorld),index:g,face:null,faceIndex:null,object:this}))}else for(g=0,u=q.length/3-1;gf||(p.applyMatrix4(this.matrixWorld), +v=d.ray.origin.distanceTo(p),vd.far||e.push({distance:v,point:h.clone().applyMatrix4(this.matrixWorld),index:g,face:null,faceIndex:null,object:this}))}else if(g instanceof THREE.Geometry)for(k=g.vertices,l=k.length,g=0;gf||(p.applyMatrix4(this.matrixWorld),v=d.ray.origin.distanceTo(p),vd.far||e.push({distance:v,point:h.clone().applyMatrix4(this.matrixWorld),index:g,face:null,faceIndex:null,object:this}))}}}(); +THREE.Line.prototype.clone=function(){return(new this.constructor(this.geometry,this.material)).copy(this)};THREE.LineStrip=0;THREE.LinePieces=1;THREE.LineSegments=function(a,b){THREE.Line.call(this,a,b);this.type="LineSegments"};THREE.LineSegments.prototype=Object.create(THREE.Line.prototype);THREE.LineSegments.prototype.constructor=THREE.LineSegments; +THREE.Mesh=function(a,b){THREE.Object3D.call(this);this.type="Mesh";this.geometry=void 0!==a?a:new THREE.Geometry;this.material=void 0!==b?b:new THREE.MeshBasicMaterial({color:16777215*Math.random()});this.drawMode=THREE.TrianglesDrawMode;this.updateMorphTargets()};THREE.Mesh.prototype=Object.create(THREE.Object3D.prototype);THREE.Mesh.prototype.constructor=THREE.Mesh;THREE.Mesh.prototype.setDrawMode=function(a){this.drawMode=a}; +THREE.Mesh.prototype.updateMorphTargets=function(){if(void 0!==this.geometry.morphTargets&&0b.far?null:{distance:c,point:s.clone(), +object:a}}function c(c,d,e,f,l,p,n,s){g.fromArray(f,3*p);h.fromArray(f,3*n);k.fromArray(f,3*s);if(c=b(c,d,e,g,h,k,t))l&&(m.fromArray(l,2*p),q.fromArray(l,2*n),u.fromArray(l,2*s),c.uv=a(t,g,h,k,m,q,u)),c.face=new THREE.Face3(p,n,s,THREE.Triangle.normal(g,h,k)),c.faceIndex=p;return c}var d=new THREE.Matrix4,e=new THREE.Ray,f=new THREE.Sphere,g=new THREE.Vector3,h=new THREE.Vector3,k=new THREE.Vector3,l=new THREE.Vector3,p=new THREE.Vector3,n=new THREE.Vector3,m=new THREE.Vector2,q=new THREE.Vector2, +u=new THREE.Vector2,v=new THREE.Vector3,t=new THREE.Vector3,s=new THREE.Vector3;return function(s,v){var x=this.geometry,D=this.material,z=this.matrixWorld;if(void 0!==D&&(null===x.boundingSphere&&x.computeBoundingSphere(),f.copy(x.boundingSphere),f.applyMatrix4(z),!1!==s.ray.intersectsSphere(f)&&(d.getInverse(z),e.copy(s.ray).applyMatrix4(d),null===x.boundingBox||!1!==e.intersectsBox(x.boundingBox)))){var y,B;if(x instanceof THREE.BufferGeometry){var G,F,D=x.index,z=x.attributes,x=z.position.array; +void 0!==z.uv&&(y=z.uv.array);if(null!==D)for(var z=D.array,H=0,L=z.length;H=d[e].distance)d[e-1].object.visible=!1,d[e].object.visible=!0;else break;for(;ethis.scale.x*this.scale.y||c.push({distance:Math.sqrt(d),point:this.position,face:null,object:this})}}();THREE.Sprite.prototype.clone=function(){return(new this.constructor(this.material)).copy(this)};THREE.Particle=THREE.Sprite; +THREE.LensFlare=function(a,b,c,d,e){THREE.Object3D.call(this);this.lensFlares=[];this.positionScreen=new THREE.Vector3;this.customUpdateCallback=void 0;void 0!==a&&this.add(a,b,c,d,e)};THREE.LensFlare.prototype=Object.create(THREE.Object3D.prototype);THREE.LensFlare.prototype.constructor=THREE.LensFlare; +THREE.LensFlare.prototype.add=function(a,b,c,d,e,f){void 0===b&&(b=-1);void 0===c&&(c=0);void 0===f&&(f=1);void 0===e&&(e=new THREE.Color(16777215));void 0===d&&(d=THREE.NormalBlending);c=Math.min(c,Math.max(0,c));this.lensFlares.push({texture:a,size:b,distance:c,x:0,y:0,z:0,scale:1,rotation:0,opacity:f,color:e,blending:d})}; +THREE.LensFlare.prototype.updateLensFlares=function(){var a,b=this.lensFlares.length,c,d=2*-this.positionScreen.x,e=2*-this.positionScreen.y;for(a=0;ac;c++)r.deleteFramebuffer(b.__webglFramebuffer[c]),r.deleteRenderbuffer(b.__webglDepthbuffer[c]);else r.deleteFramebuffer(b.__webglFramebuffer),r.deleteRenderbuffer(b.__webglDepthbuffer);U.delete(a.texture); +U.delete(a)}ia.textures--}function h(a){a=a.target;a.removeEventListener("dispose",h);k(a);U.delete(a)}function k(a){var b=U.get(a).program;a.program=void 0;void 0!==b&&oa.releaseProgram(b)}function l(a,b){return Math.abs(b[0])-Math.abs(a[0])}function p(a,b){return a.object.renderOrder!==b.object.renderOrder?a.object.renderOrder-b.object.renderOrder:a.material.id!==b.material.id?a.material.id-b.material.id:a.z!==b.z?a.z-b.z:a.id-b.id}function n(a,b){return a.object.renderOrder!==b.object.renderOrder? +a.object.renderOrder-b.object.renderOrder:a.z!==b.z?b.z-a.z:a.id-b.id}function m(a,b,c,d,e){var f;c.transparent?(d=S,f=++Y):(d=C,f=++Z);f=d[f];void 0!==f?(f.id=a.id,f.object=a,f.geometry=b,f.material=c,f.z=W.z,f.group=e):(f={id:a.id,object:a,geometry:b,material:c,z:W.z,group:e},d.push(f))}function q(a,b){if(!1!==a.visible){if(a.layers.test(b.layers))if(a instanceof THREE.Light)J.push(a);else if(a instanceof THREE.Sprite)!1!==a.frustumCulled&&!0!==za.intersectsObject(a)||ja.push(a);else if(a instanceof +THREE.LensFlare)ea.push(a);else if(a instanceof THREE.ImmediateRenderObject)!0===X.sortObjects&&(W.setFromMatrixPosition(a.matrixWorld),W.applyProjection(sa)),m(a,null,a.material,W.z,null);else if(a instanceof THREE.Mesh||a instanceof THREE.Line||a instanceof THREE.Points)if(a instanceof THREE.SkinnedMesh&&a.skeleton.update(),!1===a.frustumCulled||!0===za.intersectsObject(a)){var c=a.material;if(!0===c.visible){!0===X.sortObjects&&(W.setFromMatrixPosition(a.matrixWorld),W.applyProjection(sa));var d= +pa.update(a);if(c instanceof THREE.MultiMaterial)for(var e=d.groups,f=c.materials,c=0,g=e.length;c=da.maxTextures&&console.warn("WebGLRenderer: trying to use "+a+" texture units while this GPU supports only "+da.maxTextures);ta+=1;return a}function w(a,b,c,d){var e;if("1i"===b)r.uniform1i(c,d);else if("1f"===b)r.uniform1f(c,d);else if("2f"===b)r.uniform2f(c,d[0],d[1]);else if("3f"=== +b)r.uniform3f(c,d[0],d[1],d[2]);else if("4f"===b)r.uniform4f(c,d[0],d[1],d[2],d[3]);else if("1iv"===b)r.uniform1iv(c,d);else if("3iv"===b)r.uniform3iv(c,d);else if("1fv"===b)r.uniform1fv(c,d);else if("2fv"===b)r.uniform2fv(c,d);else if("3fv"===b)r.uniform3fv(c,d);else if("4fv"===b)r.uniform4fv(c,d);else if("Matrix2fv"===b)r.uniformMatrix2fv(c,!1,d);else if("Matrix3fv"===b)r.uniformMatrix3fv(c,!1,d);else if("Matrix4fv"===b)r.uniformMatrix4fv(c,!1,d);else if("i"===b)r.uniform1i(c,d);else if("f"===b)r.uniform1f(c, +d);else if("v2"===b)r.uniform2f(c,d.x,d.y);else if("v3"===b)r.uniform3f(c,d.x,d.y,d.z);else if("v4"===b)r.uniform4f(c,d.x,d.y,d.z,d.w);else if("c"===b)r.uniform3f(c,d.r,d.g,d.b);else if("s"===b){a=a.properties;for(var g in a){e=a[g];var f=c[g],h=d[g];w(e,e.type,f,h)}}else if("sa"===b){a=a.properties;b=0;for(var k=d.length;bb||a.height>b){var c=b/Math.max(a.width,a.height),d=document.createElement("canvas");d.width=Math.floor(a.width*c);d.height=Math.floor(a.height*c);d.getContext("2d").drawImage(a,0,0,a.width,a.height,0,0,d.width,d.height);console.warn("THREE.WebGLRenderer: image is too big ("+a.width+"x"+a.height+ +"). Resized to "+d.width+"x"+d.height,a);return d}return a}function z(a){return THREE.Math.isPowerOfTwo(a.width)&&THREE.Math.isPowerOfTwo(a.height)}function y(a,b){var c=U.get(a);if(6===a.image.length)if(0h;h++)g[h]=!X.autoScaleCubemaps||d||e?e?a.image[h].image:a.image[h]:D(a.image[h],da.maxCubemapSize);var k=z(g[0]),l=L(a.format),m=L(a.type);x(r.TEXTURE_CUBE_MAP,a,k);for(h=0;6>h;h++)if(d)for(var n,p=g[h].mipmaps,q=0,s=p.length;qf;f++)b.__webglFramebuffer[f]=r.createFramebuffer()}else b.__webglFramebuffer=r.createFramebuffer();if(d){K.bindTexture(r.TEXTURE_CUBE_MAP,c.__webglTexture);x(r.TEXTURE_CUBE_MAP,a.texture,e);for(f= +0;6>f;f++)G(b.__webglFramebuffer[f],a,r.COLOR_ATTACHMENT0,r.TEXTURE_CUBE_MAP_POSITIVE_X+f);a.texture.generateMipmaps&&e&&r.generateMipmap(r.TEXTURE_CUBE_MAP);K.bindTexture(r.TEXTURE_CUBE_MAP,null)}else K.bindTexture(r.TEXTURE_2D,c.__webglTexture),x(r.TEXTURE_2D,a.texture,e),G(b.__webglFramebuffer,a,r.COLOR_ATTACHMENT0,r.TEXTURE_2D),a.texture.generateMipmaps&&e&&r.generateMipmap(r.TEXTURE_2D),K.bindTexture(r.TEXTURE_2D,null);if(a.depthBuffer){b=U.get(a);if(a instanceof THREE.WebGLRenderTargetCube)for(b.__webglDepthbuffer= +[],c=0;6>c;c++)r.bindFramebuffer(r.FRAMEBUFFER,b.__webglFramebuffer[c]),b.__webglDepthbuffer[c]=r.createRenderbuffer(),F(b.__webglDepthbuffer[c],a);else r.bindFramebuffer(r.FRAMEBUFFER,b.__webglFramebuffer),b.__webglDepthbuffer=r.createRenderbuffer(),F(b.__webglDepthbuffer,a);r.bindFramebuffer(r.FRAMEBUFFER,null)}}b=a instanceof THREE.WebGLRenderTargetCube;a?(c=U.get(a),c=b?c.__webglFramebuffer[a.activeCubeFace]:c.__webglFramebuffer,qa.copy(a.scissor),Aa=a.scissorTest,ka.copy(a.viewport)):(c=null, +qa.copy(ya).multiplyScalar(aa),Aa=Ba,ka.copy(la).multiplyScalar(aa));ua!==c&&(r.bindFramebuffer(r.FRAMEBUFFER,c),ua=c);K.scissor(qa);K.setScissorTest(Aa);K.viewport(ka);b&&(b=U.get(a.texture),r.framebufferTexture2D(r.FRAMEBUFFER,r.COLOR_ATTACHMENT0,r.TEXTURE_CUBE_MAP_POSITIVE_X+a.activeCubeFace,b.__webglTexture,a.activeMipMapLevel))};this.readRenderTargetPixels=function(a,b,c,d,e,g){if(!1===a instanceof THREE.WebGLRenderTarget)console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget."); +else{var f=U.get(a).__webglFramebuffer;if(f){var h=!1;f!==ua&&(r.bindFramebuffer(r.FRAMEBUFFER,f),h=!0);try{var k=a.texture;k.format!==THREE.RGBAFormat&&L(k.format)!==r.getParameter(r.IMPLEMENTATION_COLOR_READ_FORMAT)?console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format."):k.type===THREE.UnsignedByteType||L(k.type)===r.getParameter(r.IMPLEMENTATION_COLOR_READ_TYPE)||k.type===THREE.FloatType&&V.get("WEBGL_color_buffer_float")||k.type=== +THREE.HalfFloatType&&V.get("EXT_color_buffer_half_float")?r.checkFramebufferStatus(r.FRAMEBUFFER)===r.FRAMEBUFFER_COMPLETE?r.readPixels(b,c,d,e,L(k.format),L(k.type),g):console.error("THREE.WebGLRenderer.readRenderTargetPixels: readPixels from renderTarget failed. Framebuffer not complete."):console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.")}finally{h&&r.bindFramebuffer(r.FRAMEBUFFER,ua)}}}}}; +THREE.WebGLRenderTarget=function(a,b,c){this.uuid=THREE.Math.generateUUID();this.width=a;this.height=b;this.scissor=new THREE.Vector4(0,0,a,b);this.scissorTest=!1;this.viewport=new THREE.Vector4(0,0,a,b);c=c||{};void 0===c.minFilter&&(c.minFilter=THREE.LinearFilter);this.texture=new THREE.Texture(void 0,void 0,c.wrapS,c.wrapT,c.magFilter,c.minFilter,c.format,c.type,c.anisotropy);this.depthBuffer=void 0!==c.depthBuffer?c.depthBuffer:!0;this.stencilBuffer=void 0!==c.stencilBuffer?c.stencilBuffer:!0}; +THREE.WebGLRenderTarget.prototype={constructor:THREE.WebGLRenderTarget,setSize:function(a,b){if(this.width!==a||this.height!==b)this.width=a,this.height=b,this.dispose();this.viewport.set(0,0,a,b);this.scissor.set(0,0,a,b)},clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.width=a.width;this.height=a.height;this.viewport.copy(a.viewport);this.texture=a.texture.clone();this.depthBuffer=a.depthBuffer;this.stencilBuffer=a.stencilBuffer;return this},dispose:function(){this.dispatchEvent({type:"dispose"})}}; +THREE.EventDispatcher.prototype.apply(THREE.WebGLRenderTarget.prototype);THREE.WebGLRenderTargetCube=function(a,b,c){THREE.WebGLRenderTarget.call(this,a,b,c);this.activeMipMapLevel=this.activeCubeFace=0};THREE.WebGLRenderTargetCube.prototype=Object.create(THREE.WebGLRenderTarget.prototype);THREE.WebGLRenderTargetCube.prototype.constructor=THREE.WebGLRenderTargetCube; +THREE.WebGLBufferRenderer=function(a,b,c){var d;this.setMode=function(a){d=a};this.render=function(b,f){a.drawArrays(d,b,f);c.calls++;c.vertices+=f;d===a.TRIANGLES&&(c.faces+=f/3)};this.renderInstances=function(e){var f=b.get("ANGLE_instanced_arrays");if(null===f)console.error("THREE.WebGLBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.");else{var g=e.attributes.position,h=0,h=g instanceof THREE.InterleavedBufferAttribute?g.data.count: +g.count;f.drawArraysInstancedANGLE(d,0,h,e.maxInstancedCount);c.calls++;c.vertices+=h*e.maxInstancedCount;d===a.TRIANGLES&&(c.faces+=e.maxInstancedCount*h/3)}}}; +THREE.WebGLIndexedBufferRenderer=function(a,b,c){var d,e,f;this.setMode=function(a){d=a};this.setIndex=function(c){c.array instanceof Uint32Array&&b.get("OES_element_index_uint")?(e=a.UNSIGNED_INT,f=4):(e=a.UNSIGNED_SHORT,f=2)};this.render=function(b,h){a.drawElements(d,h,e,b*f);c.calls++;c.vertices+=h;d===a.TRIANGLES&&(c.faces+=h/3)};this.renderInstances=function(g,h,k){var l=b.get("ANGLE_instanced_arrays");null===l?console.error("THREE.WebGLBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays."): +(l.drawElementsInstancedANGLE(d,k,e,h*f,g.maxInstancedCount),c.calls++,c.vertices+=k*g.maxInstancedCount,d===a.TRIANGLES&&(c.faces+=g.maxInstancedCount*k/3))}}; +THREE.WebGLExtensions=function(a){var b={};this.get=function(c){if(void 0!==b[c])return b[c];var d;switch(c){case "EXT_texture_filter_anisotropic":d=a.getExtension("EXT_texture_filter_anisotropic")||a.getExtension("MOZ_EXT_texture_filter_anisotropic")||a.getExtension("WEBKIT_EXT_texture_filter_anisotropic");break;case "WEBGL_compressed_texture_s3tc":d=a.getExtension("WEBGL_compressed_texture_s3tc")||a.getExtension("MOZ_WEBGL_compressed_texture_s3tc")||a.getExtension("WEBKIT_WEBGL_compressed_texture_s3tc"); +break;case "WEBGL_compressed_texture_pvrtc":d=a.getExtension("WEBGL_compressed_texture_pvrtc")||a.getExtension("WEBKIT_WEBGL_compressed_texture_pvrtc");break;case "WEBGL_compressed_texture_etc1":d=a.getExtension("WEBGL_compressed_texture_etc1");break;default:d=a.getExtension(c)}null===d&&console.warn("THREE.WebGLRenderer: "+c+" extension not supported.");return b[c]=d}}; +THREE.WebGLCapabilities=function(a,b,c){function d(b){if("highp"===b){if(0c){var d=b;b=c;c=d}d=a[b];return void 0===d?(a[b]=[c],!0):-1===d.indexOf(c)?(d.push(c),!0):!1}var f=new THREE.WebGLGeometries(a,b,c);this.getAttributeBuffer=function(a){return a instanceof THREE.InterleavedBufferAttribute?b.get(a.data).__webglBuffer:b.get(a).__webglBuffer};this.getWireframeAttribute= +function(c){var f=b.get(c);if(void 0!==f.wireframe)return f.wireframe;var k=[],l=c.index,p=c.attributes;c=p.position;if(null!==l)for(var p={},l=l.array,n=0,m=l.length;n/g,function(a,b){var c=THREE.ShaderChunk[b];if(void 0===c)throw Error("Can not resolve #include <"+ +b+">");return k(c)})}function l(a){return a.replace(/for \( int i \= (\d+)\; i < (\d+)\; i \+\+ \) \{([\s\S]+?)(?=\})\}/g,function(a,b,c,d){a="";for(b=parseInt(b);b 0 ) {\nfloat depth = gl_FragCoord.z / gl_FragCoord.w;\nfloat fogFactor = 0.0;\nif ( fogType == 1 ) {\nfogFactor = smoothstep( fogNear, fogFar, depth );\n} else {\nconst float LOG2 = 1.442695;\nfogFactor = exp2( - fogDensity * fogDensity * depth * depth * LOG2 );\nfogFactor = 1.0 - clamp( fogFactor, 0.0, 1.0 );\n}\ngl_FragColor = mix( gl_FragColor, vec4( fogColor, gl_FragColor.w ), fogFactor );\n}\n}"].join("\n")); +x.compileShader(I);x.compileShader(O);x.attachShader(M,I);x.attachShader(M,O);x.linkProgram(M);B=M;s=x.getAttribLocation(B,"position");w=x.getAttribLocation(B,"uv");c=x.getUniformLocation(B,"uvOffset");d=x.getUniformLocation(B,"uvScale");e=x.getUniformLocation(B,"rotation");f=x.getUniformLocation(B,"scale");g=x.getUniformLocation(B,"color");h=x.getUniformLocation(B,"map");k=x.getUniformLocation(B,"opacity");l=x.getUniformLocation(B,"modelViewMatrix");p=x.getUniformLocation(B,"projectionMatrix");n= +x.getUniformLocation(B,"fogType");m=x.getUniformLocation(B,"fogDensity");q=x.getUniformLocation(B,"fogNear");u=x.getUniformLocation(B,"fogFar");v=x.getUniformLocation(B,"fogColor");t=x.getUniformLocation(B,"alphaTest");M=document.createElement("canvas");M.width=8;M.height=8;I=M.getContext("2d");I.fillStyle="white";I.fillRect(0,0,8,8);G=new THREE.Texture(M);G.needsUpdate=!0}x.useProgram(B);D.initAttributes();D.enableAttribute(s);D.enableAttribute(w);D.disableUnusedAttributes();D.disable(x.CULL_FACE); +D.enable(x.BLEND);x.bindBuffer(x.ARRAY_BUFFER,z);x.vertexAttribPointer(s,2,x.FLOAT,!1,16,0);x.vertexAttribPointer(w,2,x.FLOAT,!1,16,8);x.bindBuffer(x.ELEMENT_ARRAY_BUFFER,y);x.uniformMatrix4fv(p,!1,N.projectionMatrix.elements);D.activeTexture(x.TEXTURE0);x.uniform1i(h,0);I=M=0;(O=A.fog)?(x.uniform3f(v,O.color.r,O.color.g,O.color.b),O instanceof THREE.Fog?(x.uniform1f(q,O.near),x.uniform1f(u,O.far),x.uniform1i(n,1),I=M=1):O instanceof THREE.FogExp2&&(x.uniform1f(m,O.density),x.uniform1i(n,2),I=M=2)): +(x.uniform1i(n,0),I=M=0);for(var O=0,Q=b.length;Oc)return null;var d=[],e=[],f=[],g,h,k;if(0=l--){console.warn("THREE.ShapeUtils: Unable to triangulate polygon! in triangulate()");break}g=h;c<=g&&(g=0);h=g+1;c<=h&&(h=0);k=h+1;c<=k&&(k=0);var p;a:{var n= +p=void 0,m=void 0,q=void 0,u=void 0,v=void 0,t=void 0,s=void 0,w=void 0,n=a[e[g]].x,m=a[e[g]].y,q=a[e[h]].x,u=a[e[h]].y,v=a[e[k]].x,t=a[e[k]].y;if(Number.EPSILON>(q-n)*(t-m)-(u-m)*(v-n))p=!1;else{var E=void 0,x=void 0,D=void 0,z=void 0,y=void 0,B=void 0,G=void 0,F=void 0,H=void 0,L=void 0,H=F=G=w=s=void 0,E=v-q,x=t-u,D=n-v,z=m-t,y=q-n,B=u-m;for(p=0;p=-Number.EPSILON&& +F>=-Number.EPSILON&&G>=-Number.EPSILON)){p=!1;break a}p=!0}}if(p){d.push([a[e[g]],a[e[h]],a[e[k]]]);f.push([e[g],e[h],e[k]]);g=h;for(k=h+1;kNumber.EPSILON){if(0B||B> +y)return[];k=l*n-k*p;if(0>k||k>y)return[]}else{if(0d?[]:k===d?f?[]:[g]:a<=d?[g,h]:[g,l]}function e(a,b,c,d){var e=b.x-a.x,f=b.y-a.y;b=c.x-a.x;c=c.y-a.y;var g=d.x-a.x;d=d.y-a.y;a=e*c-f*b;e=e*d-f*g;return Math.abs(a)>Number.EPSILON?(b=g*c-d*b,0f&&(f=d);var g=a+1;g>d&&(g=0);d=e(h[a],h[f],h[g],k[b]);if(!d)return!1;d=k.length-1;f=b-1;0>f&&(f=d);g=b+1;g>d&&(g=0);return(d=e(k[b],k[f],k[g],h[a]))?!0:!1}function f(a,b){var c,e;for(c=0;cN){console.log("Infinite Loop! Holes left:"+l.length+", Probably Hole outside Shape!");break}for(p=F;ph;h++)l=k[h].x+":"+k[h].y,l=p[l],void 0!==l&&(k[h]=l);return n.concat()},isClockWise:function(a){return 0>THREE.ShapeUtils.area(a)},b2:function(){return function(a,b,c,d){var e=1-a;return e*e*b+2*(1-a)*a*c+a*a*d}}(),b3:function(){return function(a,b,c,d,e){var f= +1-a,g=1-a;return f*f*f*b+3*g*g*a*c+3*(1-a)*a*a*d+a*a*a*e}}()};THREE.Curve=function(){}; +THREE.Curve.prototype={constructor:THREE.Curve,getPoint:function(a){console.warn("THREE.Curve: Warning, getPoint() not implemented!");return null},getPointAt:function(a){a=this.getUtoTmapping(a);return this.getPoint(a)},getPoints:function(a){a||(a=5);var b,c=[];for(b=0;b<=a;b++)c.push(this.getPoint(b/a));return c},getSpacedPoints:function(a){a||(a=5);var b,c=[];for(b=0;b<=a;b++)c.push(this.getPointAt(b/a));return c},getLength:function(){var a=this.getLengths();return a[a.length-1]},getLengths:function(a){a|| +(a=this.__arcLengthDivisions?this.__arcLengthDivisions:200);if(this.cacheArcLengths&&this.cacheArcLengths.length===a+1&&!this.needsUpdate)return this.cacheArcLengths;this.needsUpdate=!1;var b=[],c,d=this.getPoint(0),e,f=0;b.push(0);for(e=1;e<=a;e++)c=this.getPoint(e/a),f+=c.distanceTo(d),b.push(f),d=c;return this.cacheArcLengths=b},updateArcLengths:function(){this.needsUpdate=!0;this.getLengths()},getUtoTmapping:function(a,b){var c=this.getLengths(),d=0,e=c.length,f;f=b?b:a*c[e-1];for(var g=0,h=e- +1,k;g<=h;)if(d=Math.floor(g+(h-g)/2),k=c[d]-f,0>k)g=d+1;else if(0b&&(b=0);1=b)return a=this.curves[d],b=1-(c[d]-b)/a.getLength(),a.getPointAt(b);d++}return null};THREE.CurvePath.prototype.getLength=function(){var a=this.getCurveLengths();return a[a.length-1]}; +THREE.CurvePath.prototype.getCurveLengths=function(){if(this.cacheLengths&&this.cacheLengths.length===this.curves.length)return this.cacheLengths;for(var a=[],b=0,c=0,d=this.curves.length;cNumber.EPSILON){if(0>l&&(g=b[f],k=-k,h=b[e],l=-l),!(a.yh.y))if(a.y===g.y){if(a.x===g.x)return!0}else{e=l*(a.x-g.x)-k*(a.y-g.y);if(0===e)return!0;0>e||(d=!d)}}else if(a.y===g.y&&(h.x<=a.x&&a.x<=g.x|| +g.x<=a.x&&a.x<=h.x))return!0}return d}var e=THREE.ShapeUtils.isClockWise,f=function(a){for(var b=[],c=new THREE.Path,d=0,e=a.length;db.length-2?b.length-1:c+1],b=b[c>b.length-3?b.length-1:c+2],c=THREE.CurveUtils.interpolate;return new THREE.Vector2(c(d.x,e.x,f.x,b.x,a),c(d.y,e.y,f.y,b.y,a))};THREE.EllipseCurve=function(a,b,c,d,e,f,g,h){this.aX=a;this.aY=b;this.xRadius=c;this.yRadius=d;this.aStartAngle=e;this.aEndAngle=f;this.aClockwise=g;this.aRotation=h||0};THREE.EllipseCurve.prototype=Object.create(THREE.Curve.prototype); +THREE.EllipseCurve.prototype.constructor=THREE.EllipseCurve; +THREE.EllipseCurve.prototype.getPoint=function(a){var b=this.aEndAngle-this.aStartAngle;0>b&&(b+=2*Math.PI);b>2*Math.PI&&(b-=2*Math.PI);b=!0===this.aClockwise?this.aEndAngle+(1-a)*(2*Math.PI-b):this.aStartAngle+a*b;a=this.aX+this.xRadius*Math.cos(b);var c=this.aY+this.yRadius*Math.sin(b);if(0!==this.aRotation){var b=Math.cos(this.aRotation),d=Math.sin(this.aRotation),e=a;a=(e-this.aX)*b-(c-this.aY)*d+this.aX;c=(e-this.aX)*d+(c-this.aY)*b+this.aY}return new THREE.Vector2(a,c)}; +THREE.ArcCurve=function(a,b,c,d,e,f){THREE.EllipseCurve.call(this,a,b,c,c,d,e,f)};THREE.ArcCurve.prototype=Object.create(THREE.EllipseCurve.prototype);THREE.ArcCurve.prototype.constructor=THREE.ArcCurve;THREE.LineCurve3=THREE.Curve.create(function(a,b){this.v1=a;this.v2=b},function(a){var b=new THREE.Vector3;b.subVectors(this.v2,this.v1);b.multiplyScalar(a);b.add(this.v1);return b}); +THREE.QuadraticBezierCurve3=THREE.Curve.create(function(a,b,c){this.v0=a;this.v1=b;this.v2=c},function(a){var b=THREE.ShapeUtils.b2;return new THREE.Vector3(b(a,this.v0.x,this.v1.x,this.v2.x),b(a,this.v0.y,this.v1.y,this.v2.y),b(a,this.v0.z,this.v1.z,this.v2.z))}); +THREE.CubicBezierCurve3=THREE.Curve.create(function(a,b,c,d){this.v0=a;this.v1=b;this.v2=c;this.v3=d},function(a){var b=THREE.ShapeUtils.b3;return new THREE.Vector3(b(a,this.v0.x,this.v1.x,this.v2.x,this.v3.x),b(a,this.v0.y,this.v1.y,this.v2.y,this.v3.y),b(a,this.v0.z,this.v1.z,this.v2.z,this.v3.z))}); +THREE.SplineCurve3=THREE.Curve.create(function(a){console.warn("THREE.SplineCurve3 will be deprecated. Please use THREE.CatmullRomCurve3");this.points=void 0==a?[]:a},function(a){var b=this.points;a*=b.length-1;var c=Math.floor(a);a-=c;var d=b[0==c?c:c-1],e=b[c],f=b[c>b.length-2?b.length-1:c+1],b=b[c>b.length-3?b.length-1:c+2],c=THREE.CurveUtils.interpolate;return new THREE.Vector3(c(d.x,e.x,f.x,b.x,a),c(d.y,e.y,f.y,b.y,a),c(d.z,e.z,f.z,b.z,a))}); +THREE.CatmullRomCurve3=function(){function a(){}var b=new THREE.Vector3,c=new a,d=new a,e=new a;a.prototype.init=function(a,b,c,d){this.c0=a;this.c1=c;this.c2=-3*a+3*b-2*c-d;this.c3=2*a-2*b+c+d};a.prototype.initNonuniformCatmullRom=function(a,b,c,d,e,p,n){a=((b-a)/e-(c-a)/(e+p)+(c-b)/p)*p;d=((c-b)/p-(d-b)/(p+n)+(d-c)/n)*p;this.init(b,c,a,d)};a.prototype.initCatmullRom=function(a,b,c,d,e){this.init(b,c,e*(c-a),e*(d-b))};a.prototype.calc=function(a){var b=a*a;return this.c0+this.c1*a+this.c2*b+this.c3* +b*a};return THREE.Curve.create(function(a){this.points=a||[];this.closed=!1},function(a){var g=this.points,h,k;k=g.length;2>k&&console.log("duh, you need at least 2 points");a*=k-(this.closed?0:1);h=Math.floor(a);a-=h;this.closed?h+=0h&&(h=1);1E-4>k&&(k=h);1E-4>m&&(m=h);c.initNonuniformCatmullRom(l.x,p.x,n.x,g.x,k,h,m);d.initNonuniformCatmullRom(l.y,p.y,n.y,g.y,k,h,m);e.initNonuniformCatmullRom(l.z,p.z,n.z,g.z,k,h,m)}else"catmullrom"===this.type&&(k=void 0!==this.tension?this.tension:.5,c.initCatmullRom(l.x,p.x,n.x,g.x, +k),d.initCatmullRom(l.y,p.y,n.y,g.y,k),e.initCatmullRom(l.z,p.z,n.z,g.z,k));return new THREE.Vector3(c.calc(a),d.calc(a),e.calc(a))})}();THREE.ClosedSplineCurve3=function(a){console.warn("THREE.ClosedSplineCurve3 has been deprecated. Please use THREE.CatmullRomCurve3.");THREE.CatmullRomCurve3.call(this,a);this.type="catmullrom";this.closed=!0};THREE.ClosedSplineCurve3.prototype=Object.create(THREE.CatmullRomCurve3.prototype); +THREE.BoxGeometry=function(a,b,c,d,e,f){THREE.Geometry.call(this);this.type="BoxGeometry";this.parameters={width:a,height:b,depth:c,widthSegments:d,heightSegments:e,depthSegments:f};this.fromBufferGeometry(new THREE.BoxBufferGeometry(a,b,c,d,e,f));this.mergeVertices()};THREE.BoxGeometry.prototype=Object.create(THREE.Geometry.prototype);THREE.BoxGeometry.prototype.constructor=THREE.BoxGeometry;THREE.CubeGeometry=THREE.BoxGeometry; +THREE.BoxBufferGeometry=function(a,b,c,d,e,f){function g(a,b,c,d,e,f,g,k,l,L,A){var N=f/l,M=g/L,I=f/2,O=g/2,Q=k/2;g=l+1;for(var P=L+1,T=f=0,J=new THREE.Vector3,C=0;Cm;m++){e[0]=n[g[m]];e[1]=n[g[(m+1)%3]];e.sort(c);var q=e.toString();void 0===f[q]?f[q]={vert1:e[0],vert2:e[1],face1:l, +face2:void 0}:f[q].face2=l}e=[];for(q in f)if(g=f[q],void 0===g.face2||h[g.face1].normal.dot(h[g.face2].normal)<=d)l=k[g.vert1],e.push(l.x),e.push(l.y),e.push(l.z),l=k[g.vert2],e.push(l.x),e.push(l.y),e.push(l.z);this.addAttribute("position",new THREE.BufferAttribute(new Float32Array(e),3))};THREE.EdgesGeometry.prototype=Object.create(THREE.BufferGeometry.prototype);THREE.EdgesGeometry.prototype.constructor=THREE.EdgesGeometry; +THREE.ExtrudeGeometry=function(a,b){"undefined"!==typeof a&&(THREE.Geometry.call(this),this.type="ExtrudeGeometry",a=Array.isArray(a)?a:[a],this.addShapeList(a,b),this.computeFaceNormals())};THREE.ExtrudeGeometry.prototype=Object.create(THREE.Geometry.prototype);THREE.ExtrudeGeometry.prototype.constructor=THREE.ExtrudeGeometry;THREE.ExtrudeGeometry.prototype.addShapeList=function(a,b){for(var c=a.length,d=0;dNumber.EPSILON){var k=Math.sqrt(h),l=Math.sqrt(f*f+g*g),h=b.x-e/k;b=b.y+d/k;f=((c.x-g/l-h)*g-(c.y+f/l-b)*f)/(d*g-e*f);c=h+d*f-a.x;a=b+e*f-a.y;d=c*c+a*a;if(2>=d)return new THREE.Vector2(c,a);d=Math.sqrt(d/2)}else a=!1,d>Number.EPSILON? +f>Number.EPSILON&&(a=!0):d<-Number.EPSILON?f<-Number.EPSILON&&(a=!0):Math.sign(e)===Math.sign(g)&&(a=!0),a?(c=-e,a=d,d=Math.sqrt(h)):(c=d,a=e,d=Math.sqrt(h/2));return new THREE.Vector2(c/d,a/d)}function e(a,b){var c,d;for(C=a.length;0<=--C;){c=C;d=C-1;0>d&&(d=a.length-1);for(var e=0,f=q+2*p,e=0;eMath.abs(b.y-c.y)?[new THREE.Vector2(b.x,1-b.z),new THREE.Vector2(c.x,1-c.z),new THREE.Vector2(d.x,1-d.z),new THREE.Vector2(e.x,1-e.z)]:[new THREE.Vector2(b.y,1-b.z),new THREE.Vector2(c.y,1-c.z),new THREE.Vector2(d.y, +1-d.z),new THREE.Vector2(e.y,1-e.z)]}};THREE.ShapeGeometry=function(a,b){THREE.Geometry.call(this);this.type="ShapeGeometry";!1===Array.isArray(a)&&(a=[a]);this.addShapeList(a,b);this.computeFaceNormals()};THREE.ShapeGeometry.prototype=Object.create(THREE.Geometry.prototype);THREE.ShapeGeometry.prototype.constructor=THREE.ShapeGeometry;THREE.ShapeGeometry.prototype.addShapeList=function(a,b){for(var c=0,d=a.length;cNumber.EPSILON&&(h.normalize(),d=Math.acos(THREE.Math.clamp(e[l-1].dot(e[l]),-1,1)),f[l].applyMatrix4(k.makeRotationAxis(h,d))),g[l].crossVectors(e[l],f[l]);if(c)for(d=Math.acos(THREE.Math.clamp(f[0].dot(f[b-1]),-1,1)),d/=b-1,0c&&1===a.x&&(a=new THREE.Vector2(a.x-1,a.y));0===b.x&&0===b.z&&(a=new THREE.Vector2(c/ +2/Math.PI+.5,a.y));return a.clone()}THREE.Geometry.call(this);this.type="PolyhedronGeometry";this.parameters={vertices:a,indices:b,radius:c,detail:d};c=c||1;d=d||0;for(var k=this,l=0,p=a.length;lq&&(.2>d&&(b[0].x+=1),.2>a&&(b[1].x+=1),.2>n&&(b[2].x+=1));l=0;for(p=this.vertices.length;ln;n++){c[0]=p[e[n]];c[1]=p[e[(n+1)%3]];c.sort(b);var m=c.toString();void 0===d[m]&&(k[2*h]=c[0],k[2*h+1]=c[1],d[m]=!0,h++)}c=new Float32Array(6*h);a=0;for(l=h;an;n++)d=f[k[2*a+n]],h=6*a+3*n,c[h+0]=d.x,c[h+1]=d.y, +c[h+2]=d.z;this.addAttribute("position",new THREE.BufferAttribute(c,3))}else if(a instanceof THREE.BufferGeometry){if(null!==a.index){l=a.index.array;f=a.attributes.position;e=a.groups;h=0;0===e.length&&a.addGroup(0,l.length);k=new Uint32Array(2*l.length);g=0;for(p=e.length;gn;n++)c[0]=l[a+n],c[1]=l[a+(n+1)%3],c.sort(b),m=c.toString(),void 0===d[m]&&(k[2*h]=c[0],k[2*h+1]=c[1],d[m]=!0,h++)}c=new Float32Array(6*h);a=0;for(l=h;a< +l;a++)for(n=0;2>n;n++)h=6*a+3*n,d=k[2*a+n],c[h+0]=f.getX(d),c[h+1]=f.getY(d),c[h+2]=f.getZ(d)}else for(f=a.attributes.position.array,h=f.length/3,k=h/3,c=new Float32Array(6*h),a=0,l=k;an;n++)h=18*a+6*n,k=9*a+3*n,c[h+0]=f[k],c[h+1]=f[k+1],c[h+2]=f[k+2],d=9*a+(n+1)%3*3,c[h+3]=f[d],c[h+4]=f[d+1],c[h+5]=f[d+2];this.addAttribute("position",new THREE.BufferAttribute(c,3))}};THREE.WireframeGeometry.prototype=Object.create(THREE.BufferGeometry.prototype); +THREE.WireframeGeometry.prototype.constructor=THREE.WireframeGeometry;THREE.AxisHelper=function(a){a=a||1;var b=new Float32Array([0,0,0,a,0,0,0,0,0,0,a,0,0,0,0,0,0,a]),c=new Float32Array([1,0,0,1,.6,0,0,1,0,.6,1,0,0,0,1,0,.6,1]);a=new THREE.BufferGeometry;a.addAttribute("position",new THREE.BufferAttribute(b,3));a.addAttribute("color",new THREE.BufferAttribute(c,3));b=new THREE.LineBasicMaterial({vertexColors:THREE.VertexColors});THREE.LineSegments.call(this,a,b)};THREE.AxisHelper.prototype=Object.create(THREE.LineSegments.prototype); +THREE.AxisHelper.prototype.constructor=THREE.AxisHelper; +THREE.ArrowHelper=function(){var a=new THREE.Geometry;a.vertices.push(new THREE.Vector3(0,0,0),new THREE.Vector3(0,1,0));var b=new THREE.CylinderGeometry(0,.5,1,5,1);b.translate(0,-.5,0);return function(c,d,e,f,g,h){THREE.Object3D.call(this);void 0===f&&(f=16776960);void 0===e&&(e=1);void 0===g&&(g=.2*e);void 0===h&&(h=.2*g);this.position.copy(d);this.line=new THREE.Line(a,new THREE.LineBasicMaterial({color:f}));this.line.matrixAutoUpdate=!1;this.add(this.line);this.cone=new THREE.Mesh(b,new THREE.MeshBasicMaterial({color:f})); +this.cone.matrixAutoUpdate=!1;this.add(this.cone);this.setDirection(c);this.setLength(e,g,h)}}();THREE.ArrowHelper.prototype=Object.create(THREE.Object3D.prototype);THREE.ArrowHelper.prototype.constructor=THREE.ArrowHelper;THREE.ArrowHelper.prototype.setDirection=function(){var a=new THREE.Vector3,b;return function(c){.99999c.y?this.quaternion.set(1,0,0,0):(a.set(c.z,0,-c.x).normalize(),b=Math.acos(c.y),this.quaternion.setFromAxisAngle(a,b))}}(); +THREE.ArrowHelper.prototype.setLength=function(a,b,c){void 0===b&&(b=.2*a);void 0===c&&(c=.2*b);this.line.scale.set(1,Math.max(0,a-b),1);this.line.updateMatrix();this.cone.scale.set(c,b,c);this.cone.position.y=a;this.cone.updateMatrix()};THREE.ArrowHelper.prototype.setColor=function(a){this.line.material.color.set(a);this.cone.material.color.set(a)}; +THREE.BoxHelper=function(a){var b=new Uint16Array([0,1,1,2,2,3,3,0,4,5,5,6,6,7,7,4,0,4,1,5,2,6,3,7]),c=new Float32Array(24),d=new THREE.BufferGeometry;d.setIndex(new THREE.BufferAttribute(b,1));d.addAttribute("position",new THREE.BufferAttribute(c,3));THREE.LineSegments.call(this,d,new THREE.LineBasicMaterial({color:16776960}));void 0!==a&&this.update(a)};THREE.BoxHelper.prototype=Object.create(THREE.LineSegments.prototype);THREE.BoxHelper.prototype.constructor=THREE.BoxHelper; +THREE.BoxHelper.prototype.update=function(){var a=new THREE.Box3;return function(b){a.setFromObject(b);if(!a.isEmpty()){b=a.min;var c=a.max,d=this.geometry.attributes.position,e=d.array;e[0]=c.x;e[1]=c.y;e[2]=c.z;e[3]=b.x;e[4]=c.y;e[5]=c.z;e[6]=b.x;e[7]=b.y;e[8]=c.z;e[9]=c.x;e[10]=b.y;e[11]=c.z;e[12]=c.x;e[13]=c.y;e[14]=b.z;e[15]=b.x;e[16]=c.y;e[17]=b.z;e[18]=b.x;e[19]=b.y;e[20]=b.z;e[21]=c.x;e[22]=b.y;e[23]=b.z;d.needsUpdate=!0;this.geometry.computeBoundingSphere()}}}(); +THREE.BoundingBoxHelper=function(a,b){var c=void 0!==b?b:8947848;this.object=a;this.box=new THREE.Box3;THREE.Mesh.call(this,new THREE.BoxGeometry(1,1,1),new THREE.MeshBasicMaterial({color:c,wireframe:!0}))};THREE.BoundingBoxHelper.prototype=Object.create(THREE.Mesh.prototype);THREE.BoundingBoxHelper.prototype.constructor=THREE.BoundingBoxHelper;THREE.BoundingBoxHelper.prototype.update=function(){this.box.setFromObject(this.object);this.box.size(this.scale);this.box.center(this.position)}; +THREE.CameraHelper=function(a){function b(a,b,d){c(a,d);c(b,d)}function c(a,b){d.vertices.push(new THREE.Vector3);d.colors.push(new THREE.Color(b));void 0===f[a]&&(f[a]=[]);f[a].push(d.vertices.length-1)}var d=new THREE.Geometry,e=new THREE.LineBasicMaterial({color:16777215,vertexColors:THREE.FaceColors}),f={};b("n1","n2",16755200);b("n2","n4",16755200);b("n4","n3",16755200);b("n3","n1",16755200);b("f1","f2",16755200);b("f2","f4",16755200);b("f4","f3",16755200);b("f3","f1",16755200);b("n1","f1",16755200); +b("n2","f2",16755200);b("n3","f3",16755200);b("n4","f4",16755200);b("p","n1",16711680);b("p","n2",16711680);b("p","n3",16711680);b("p","n4",16711680);b("u1","u2",43775);b("u2","u3",43775);b("u3","u1",43775);b("c","t",16777215);b("p","c",3355443);b("cn1","cn2",3355443);b("cn3","cn4",3355443);b("cf1","cf2",3355443);b("cf3","cf4",3355443);THREE.LineSegments.call(this,d,e);this.camera=a;this.camera.updateProjectionMatrix();this.matrix=a.matrixWorld;this.matrixAutoUpdate=!1;this.pointMap=f;this.update()}; +THREE.CameraHelper.prototype=Object.create(THREE.LineSegments.prototype);THREE.CameraHelper.prototype.constructor=THREE.CameraHelper; +THREE.CameraHelper.prototype.update=function(){function a(a,g,h,k){d.set(g,h,k).unproject(e);a=c[a];if(void 0!==a)for(g=0,h=a.length;gd;d++)c.faces[d].color=this.colors[4>d?0:1];d=new THREE.MeshBasicMaterial({vertexColors:THREE.FaceColors,wireframe:!0});this.lightSphere=new THREE.Mesh(c,d);this.add(this.lightSphere);this.update()}; +THREE.HemisphereLightHelper.prototype=Object.create(THREE.Object3D.prototype);THREE.HemisphereLightHelper.prototype.constructor=THREE.HemisphereLightHelper;THREE.HemisphereLightHelper.prototype.dispose=function(){this.lightSphere.geometry.dispose();this.lightSphere.material.dispose()}; +THREE.HemisphereLightHelper.prototype.update=function(){var a=new THREE.Vector3;return function(){this.colors[0].copy(this.light.color).multiplyScalar(this.light.intensity);this.colors[1].copy(this.light.groundColor).multiplyScalar(this.light.intensity);this.lightSphere.lookAt(a.setFromMatrixPosition(this.light.matrixWorld).negate());this.lightSphere.geometry.colorsNeedUpdate=!0}}(); +THREE.PointLightHelper=function(a,b){this.light=a;this.light.updateMatrixWorld();var c=new THREE.SphereGeometry(b,4,2),d=new THREE.MeshBasicMaterial({wireframe:!0,fog:!1});d.color.copy(this.light.color).multiplyScalar(this.light.intensity);THREE.Mesh.call(this,c,d);this.matrix=this.light.matrixWorld;this.matrixAutoUpdate=!1};THREE.PointLightHelper.prototype=Object.create(THREE.Mesh.prototype);THREE.PointLightHelper.prototype.constructor=THREE.PointLightHelper; +THREE.PointLightHelper.prototype.dispose=function(){this.geometry.dispose();this.material.dispose()};THREE.PointLightHelper.prototype.update=function(){this.material.color.copy(this.light.color).multiplyScalar(this.light.intensity)}; +THREE.SkeletonHelper=function(a){this.bones=this.getBoneList(a);for(var b=new THREE.Geometry,c=0;ch.end&&(h.end=f);c||(c=k)}}for(k in d)h=d[k],this.createAnimation(k,h.start,h.end,a);this.firstAnimation=c}; +THREE.MorphBlendMesh.prototype.setAnimationDirectionForward=function(a){if(a=this.animationsMap[a])a.direction=1,a.directionBackwards=!1};THREE.MorphBlendMesh.prototype.setAnimationDirectionBackward=function(a){if(a=this.animationsMap[a])a.direction=-1,a.directionBackwards=!0};THREE.MorphBlendMesh.prototype.setAnimationFPS=function(a,b){var c=this.animationsMap[a];c&&(c.fps=b,c.duration=(c.end-c.start)/c.fps)}; +THREE.MorphBlendMesh.prototype.setAnimationDuration=function(a,b){var c=this.animationsMap[a];c&&(c.duration=b,c.fps=(c.end-c.start)/c.duration)};THREE.MorphBlendMesh.prototype.setAnimationWeight=function(a,b){var c=this.animationsMap[a];c&&(c.weight=b)};THREE.MorphBlendMesh.prototype.setAnimationTime=function(a,b){var c=this.animationsMap[a];c&&(c.time=b)};THREE.MorphBlendMesh.prototype.getAnimationTime=function(a){var b=0;if(a=this.animationsMap[a])b=a.time;return b}; +THREE.MorphBlendMesh.prototype.getAnimationDuration=function(a){var b=-1;if(a=this.animationsMap[a])b=a.duration;return b};THREE.MorphBlendMesh.prototype.playAnimation=function(a){var b=this.animationsMap[a];b?(b.time=0,b.active=!0):console.warn("THREE.MorphBlendMesh: animation["+a+"] undefined in .playAnimation()")};THREE.MorphBlendMesh.prototype.stopAnimation=function(a){if(a=this.animationsMap[a])a.active=!1}; +THREE.MorphBlendMesh.prototype.update=function(a){for(var b=0,c=this.animationsList.length;bd.duration||0>d.time)d.direction*=-1,d.time>d.duration&&(d.time=d.duration,d.directionBackwards=!0),0>d.time&&(d.time=0,d.directionBackwards=!1)}else d.time%=d.duration,0>d.time&&(d.time+=d.duration);var f=d.start+THREE.Math.clamp(Math.floor(d.time/e),0,d.length-1),g=d.weight;f!==d.currentFrame&& +(this.morphTargetInfluences[d.lastFrame]=0,this.morphTargetInfluences[d.currentFrame]=1*g,this.morphTargetInfluences[f]=0,d.lastFrame=d.currentFrame,d.currentFrame=f);e=d.time%e/e;d.directionBackwards&&(e=1-e);d.currentFrame!==d.lastFrame?(this.morphTargetInfluences[d.currentFrame]=e*g,this.morphTargetInfluences[d.lastFrame]=(1-e)*g):this.morphTargetInfluences[d.currentFrame]=g}}}; +// tween.js - http://github.com/sole/tween.js - Licensed under the MIT License +'use strict';void 0===Date.now&&(Date.now=function(){return(new Date).valueOf()}); +var TWEEN=TWEEN||function(){var a=[];return{REVISION:"14",getAll:function(){return a},removeAll:function(){a=[]},add:function(c){a.push(c)},remove:function(c){c=a.indexOf(c);-1!==c&&a.splice(c,1)},update:function(c){if(0===a.length)return!1;for(var b=0,c=void 0!==c?c:"undefined"!==typeof window&&void 0!==window.performance&&void 0!==window.performance.now?window.performance.now():Date.now();b(a*=2)?0.5*a*a:-0.5*(--a*(a-2)-1)}},Cubic:{In:function(a){return a*a*a},Out:function(a){return--a*a*a+1},InOut:function(a){return 1>(a*=2)?0.5*a*a*a:0.5*((a-=2)*a*a+2)}},Quartic:{In:function(a){return a*a*a*a},Out:function(a){return 1- --a*a*a*a},InOut:function(a){return 1>(a*=2)?0.5*a*a*a*a:-0.5*((a-=2)*a*a*a-2)}},Quintic:{In:function(a){return a*a*a* +a*a},Out:function(a){return--a*a*a*a*a+1},InOut:function(a){return 1>(a*=2)?0.5*a*a*a*a*a:0.5*((a-=2)*a*a*a*a+2)}},Sinusoidal:{In:function(a){return 1-Math.cos(a*Math.PI/2)},Out:function(a){return Math.sin(a*Math.PI/2)},InOut:function(a){return 0.5*(1-Math.cos(Math.PI*a))}},Exponential:{In:function(a){return 0===a?0:Math.pow(1024,a-1)},Out:function(a){return 1===a?1:1-Math.pow(2,-10*a)},InOut:function(a){return 0===a?0:1===a?1:1>(a*=2)?0.5*Math.pow(1024,a-1):0.5*(-Math.pow(2,-10*(a-1))+2)}},Circular:{In:function(a){return 1- +Math.sqrt(1-a*a)},Out:function(a){return Math.sqrt(1- --a*a)},InOut:function(a){return 1>(a*=2)?-0.5*(Math.sqrt(1-a*a)-1):0.5*(Math.sqrt(1-(a-=2)*a)+1)}},Elastic:{In:function(a){var c,b=0.1;if(0===a)return 0;if(1===a)return 1;!b||1>b?(b=1,c=0.1):c=0.4*Math.asin(1/b)/(2*Math.PI);return-(b*Math.pow(2,10*(a-=1))*Math.sin((a-c)*2*Math.PI/0.4))},Out:function(a){var c,b=0.1;if(0===a)return 0;if(1===a)return 1;!b||1>b?(b=1,c=0.1):c=0.4*Math.asin(1/b)/(2*Math.PI);return b*Math.pow(2,-10*a)*Math.sin((a-c)* +2*Math.PI/0.4)+1},InOut:function(a){var c,b=0.1;if(0===a)return 0;if(1===a)return 1;!b||1>b?(b=1,c=0.1):c=0.4*Math.asin(1/b)/(2*Math.PI);return 1>(a*=2)?-0.5*b*Math.pow(2,10*(a-=1))*Math.sin((a-c)*2*Math.PI/0.4):0.5*b*Math.pow(2,-10*(a-=1))*Math.sin((a-c)*2*Math.PI/0.4)+1}},Back:{In:function(a){return a*a*(2.70158*a-1.70158)},Out:function(a){return--a*a*(2.70158*a+1.70158)+1},InOut:function(a){return 1>(a*=2)?0.5*a*a*(3.5949095*a-2.5949095):0.5*((a-=2)*a*(3.5949095*a+2.5949095)+2)}},Bounce:{In:function(a){return 1- +TWEEN.Easing.Bounce.Out(1-a)},Out:function(a){return a<1/2.75?7.5625*a*a:a<2/2.75?7.5625*(a-=1.5/2.75)*a+0.75:a<2.5/2.75?7.5625*(a-=2.25/2.75)*a+0.9375:7.5625*(a-=2.625/2.75)*a+0.984375},InOut:function(a){return 0.5>a?0.5*TWEEN.Easing.Bounce.In(2*a):0.5*TWEEN.Easing.Bounce.Out(2*a-1)+0.5}}}; +TWEEN.Interpolation={Linear:function(a,c){var b=a.length-1,d=b*c,e=Math.floor(d),g=TWEEN.Interpolation.Utils.Linear;return 0>c?g(a[0],a[1],d):1b?b:e+1],d-e)},Bezier:function(a,c){var b=0,d=a.length-1,e=Math.pow,g=TWEEN.Interpolation.Utils.Bernstein,h;for(h=0;h<=d;h++)b+=e(1-c,d-h)*e(c,h)*a[h]*g(d,h);return b},CatmullRom:function(a,c){var b=a.length-1,d=b*c,e=Math.floor(d),g=TWEEN.Interpolation.Utils.CatmullRom;return a[0]===a[b]?(0>c&&(e=Math.floor(d=b*(1+c))),g(a[(e- +1+b)%b],a[e],a[(e+1)%b],a[(e+2)%b],d-e)):0>c?a[0]-(g(a[0],a[0],a[1],a[1],-d)-a[0]):10deg it will return a delta of +1 instead of -359) + if (delta > 180) { + delta = delta - 360 + } + else if (delta < -180) { + delta = 360 + delta + } + return delta + }, + + initializeNavBall: function(){ + //initialize the three.js renderer + this.renderer = new THREE.WebGLRenderer({ + alpha: true, + antialias: true + }) + + this.renderer.setSize(1,1) + this.container.update(this.renderer.domElement) + + this.resize() + Event.observe(window, "resize", this.resize.bind(this)) + + //scene, camera, lights! + var scene = new THREE.Scene() + var camera = new THREE.PerspectiveCamera(32, 1, 0.01, 1000) + camera.position.z = 190 + + scene.add(new THREE.AmbientLight(0xaaaaaa)) + + var light1 = new THREE.DirectionalLight(0xffffff, 1) + light1.position.set(1500, 1500, 500) + + var light2 = new THREE.DirectionalLight(0xffffff, 0.5) + light2.position.set(-1500, -1500, 500) + + scene.add(light1) + scene.add(light2) + + //initialize the body geometry and materials + var navballGeometry = new THREE.SphereGeometry(this.displayRadius, 48, 48) + var navballTexture = THREE.ImageUtils.loadTexture('../assets/images/navball.png') + navballTexture.anisotropy = this.renderer.getMaxAnisotropy() + + var navballMaterial = new THREE.MeshPhongMaterial({ + map: navballTexture, + bumpMap: THREE.ImageUtils.loadTexture('../assets/images/navball-normal.png'), + bumpScale: 0.25, + shininess: 80, + }) + + this.navballMesh = new THREE.Mesh(navballGeometry, navballMaterial) + + scene.add(this.navballMesh) + + var animate = function(){ + window.setTimeout(function(){ + requestAnimationFrame(animate) + }, this.datalink.rate/60 ) //60 fps + + TWEEN.update() + + this.renderer.render(scene, camera) + }.bind(this) + + requestAnimationFrame(animate) + }, + + resize: function(){ + var width = this.container.getWidth() + var height = this.container.getHeight() + this.renderer.setSize(width, height) + }, + + initializeDatalink: function(){ + this.datalink.subscribeToData(['n.pitch', 'n.roll', 'n.heading']) + + this.datalink.addReceiverFunction(this.update.bind(this)) + }, +}) +var AltitudeTracker = Class.create({ + initialize: function(datalink, altitudeTrackerId, options){ + this.datalink = datalink + this.altitudeTrackerId = altitudeTrackerId + this.altitudeTracker = $(this.altitudeTrackerId) + this.options = Object.extend({ + maxDataPoints: 10 + }, options) + + this.altitudeData = [] + this.heightFromTerrainData = [] + + this.initializeDatalink() + }, + + update: function(data){ + this.altitudeData.push(data['v.altitude']) + if(data['v.terrainHeight'] > -1 && (data['v.heightFromTerrain'] > -1)){ + this.heightFromTerrainData.push(data['v.terrainHeight']) + } else{ + this.heightFromTerrainData.push(0) + } + + if(this.altitudeData.length >= this.options.maxDataPoints){ + this.altitudeData.shift() + } + + if(this.heightFromTerrainData.length >= this.options.maxDataPoints){ + this.heightFromTerrainData.shift() + } + + if(!this.altitudeTrackerChart){ + this.initializeChart() + } + + window.requestAnimationFrame(function(){ + this.altitudeTrackerChart.update(this.generateData()) + }.bind(this)) + }, + + initializeDatalink: function(){ + this.datalink.subscribeToData(['v.altitude', 'v.terrainHeight', 'v.heightFromTerrain']) + + this.datalink.addReceiverFunction(this.update.bind(this)) + }, + + generateData: function(){ + var labelSize = Math.max(this.altitudeData.length, this.heightFromTerrainData.length) + var labels = [] + for(var i = 0; i < labelSize-1; i++){ + labels[i] = 1 + } + + return { + labels: labels, + series: [{ + name: 'altitude', + data: this.altitudeData + }, + { + name: 'terrain', + data: this.heightFromTerrainData + }] + } + }, + + generateOptions: function(){ + return { + series: { + 'terrain' : { + showPoint: false, + showArea: true + }, + 'altitude': { + showPoint: false + } + }, + axisY: { + offset: 80, + position: 'end', + low: 0, + labelInterpolationFnc: function(value) { + return numeral(value).format('0.00a') + "m" + } + }, + axisX: { + showLabel: false + } + } + }, + + initializeChart: function(){ + var data = { + // A labels array that can contain any sort of values + labels: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri'], + // Our series array that contains series objects or in this case series data arrays + series: [ + [5, 2, 4, 2, 0] + ] + }; + + // Create a new line chart object where as first parameter we pass in a selector + // that is resolving to our chart container element. The Second parameter + // is the actual data object. + this.altitudeTrackerChart = new Chartist.Line("#" + this.altitudeTrackerId, + this.generateData(), this.generateOptions() + ) + } +}) +var CameraFeed = Class.create({ + initialize: function(datalink, options){ + this.datalink = datalink + + this.options = options || {} + this.cameraData = [] + this.selectedCameraURL = "" + this.selectedCameraName = "" + this.initializeDatalink() + this.initializeObservers() + this.initializeImageRefresh() + }, + + initializeDatalink: function(){ + setInterval(function(){ + this.datalink.getCameraList(this.updateCameraList.bind(this)) + }.bind(this), 1000); + }, + + initializeImageRefresh: function(){ + setInterval(function(){ + if(!this.hasSelectedCamera()){ return } + this.options.cameraImage.src = this.options.cameraImage.getAttribute('data-base-url') + "?" + Math.floor((Math.random() * 100) + 1) + }.bind(this), 1000); + }, + + initializeObservers: function(){ + this.options.cameraList.observe('click', function(event){ + var clickedButton = event.findElement('button'); + if (clickedButton) { + this.selectCameraAndHideList( + clickedButton.getAttribute("data-image-name"), + clickedButton.getAttribute("data-image-url") + ) + } + }.bind(this)) + + this.options.showCameraList.observe('click', this.toggleCameraList.bind(this)) + }, + + hasSelectedCamera: function(){ + return this.selectedCameraURL != "" + }, + + setSelectedCamera: function(name, image_url){ + this.selectedCameraName = name + this.selectedCameraURL = image_url + this.options.cameraName.update(this.selectedCameraName) + this.options.cameraImage.setAttribute('src', this.selectedCameraURL) + this.options.cameraImage.setAttribute('data-base-url',this.selectedCameraURL) + }, + + selectCameraAndHideList: function(name, image_url){ + this.setSelectedCamera(name, image_url) + this.hideCameraList() + }, + + hideCameraList: function(){ + this.options.cameraListContainer.addClassName('hidden') + }, + + showCameraList: function(){ + this.options.cameraListContainer.removeClassName('hidden') + }, + + toggleCameraList: function(){ + this.options.cameraListContainer.toggleClassName('hidden') + }, + + updateCameraList: function(data){ + // console.log(data) + var sortedData = data.sort(function(a,b){ + //the flight camera should always be on top + if(a.name == "TelemachusFlightCamera"){ + return -1 + } + + //otherwise, compare normally + return a.name.localeCompare(b.name); + }); + + //clear existing child nodes in camera list + while (this.options.cameraList.hasChildNodes()){ + this.options.cameraList.removeChild(this.options.cameraList.lastChild); + } + + for (var i = 0; i < sortedData.length; i++) { + var cameraObject = sortedData[i] + + if(!this.hasSelectedCamera()){ + this.setSelectedCamera(cameraObject.name, cameraObject.url) + } + + var docFragment = document.createDocumentFragment() + var li = document.createElement('li') + var selectCamera = document.createElement("button") + selectCamera.setAttribute('data-image-name', cameraObject.name) + selectCamera.setAttribute('data-image-url', cameraObject.url) + if(this.selectedCameraURL == cameraObject.url){ + selectCamera.addClassName("selected") + } + selectCamera.update(cameraObject.name) + + li.appendChild(selectCamera) + docFragment.appendChild(li) + this.options.cameraList.appendChild(docFragment) + } + + this.cameraData = sortedData + } +}) \ No newline at end of file diff --git a/public/assets/mission-wall.js b/public/assets/mission-wall.js index f67b33b..0d92936 100644 --- a/public/assets/mission-wall.js +++ b/public/assets/mission-wall.js @@ -1,50 +1,12538 @@ -Math.toDegrees=function(angleInRadians){return angleInRadians*(180/Math.PI)};Math.toRadians=function(angleInDegrees){return angleInDegrees*(Math.PI/180)};Math.crossProduct=function(x,y){[x[1]*y[2]-x[2]*y[1],x[2]*y[0]-x[0]*y[2],x[0]*y[1]-x[1]*y[0]]};Math.sign=Math.sign||function(x){x=+x;if(x===0||isNaN(x)){return x}return x>0?1:-1};Math.cosh=Math.cosh||function(x){return(Math.exp(x)+Math.exp(-x))/2};Math.sinh=Math.sinh||function(x){return(Math.exp(x)-Math.exp(-x))/2};Math.matrixAdd=Math.matrixAdd||function(){var arrays=arguments,results=[],count=arrays[0].length,L=arrays.length,sum,next=0,i;while(next-1?e(a,b,c):b.indexOf("%")>-1?f(a,b,c):b.indexOf(":")>-1?g(a,b):i(a._value,b,c)}function d(a,b){var c,d,e,f,g,i=b,j=["KB","MB","GB","TB","PB","EB","ZB","YB"],k=!1;if(b.indexOf(":")>-1)a._value=h(b);else if(b===q)a._value=0;else{for("."!==o[p].delimiters.decimal&&(b=b.replace(/\./g,"").replace(o[p].delimiters.decimal,".")),c=new RegExp("[^a-zA-Z]"+o[p].abbreviations.thousand+"(?:\\)|(\\"+o[p].currency.symbol+")?(?:\\))?)?$"),d=new RegExp("[^a-zA-Z]"+o[p].abbreviations.million+"(?:\\)|(\\"+o[p].currency.symbol+")?(?:\\))?)?$"),e=new RegExp("[^a-zA-Z]"+o[p].abbreviations.billion+"(?:\\)|(\\"+o[p].currency.symbol+")?(?:\\))?)?$"),f=new RegExp("[^a-zA-Z]"+o[p].abbreviations.trillion+"(?:\\)|(\\"+o[p].currency.symbol+")?(?:\\))?)?$"),g=0;g<=j.length&&!(k=b.indexOf(j[g])>-1?Math.pow(1024,g+1):!1);g++);a._value=(k?k:1)*(i.match(c)?Math.pow(10,3):1)*(i.match(d)?Math.pow(10,6):1)*(i.match(e)?Math.pow(10,9):1)*(i.match(f)?Math.pow(10,12):1)*(b.indexOf("%")>-1?.01:1)*((b.split("-").length+Math.min(b.split("(").length-1,b.split(")").length-1))%2?1:-1)*Number(b.replace(/[^0-9\.]+/g,"")),a._value=k?Math.ceil(a._value):a._value}return a._value}function e(a,b,c){var d,e,f=b.indexOf("$"),g=b.indexOf("("),h=b.indexOf("-"),j="";return b.indexOf(" $")>-1?(j=" ",b=b.replace(" $","")):b.indexOf("$ ")>-1?(j=" ",b=b.replace("$ ","")):b=b.replace("$",""),e=i(a._value,b,c),1>=f?e.indexOf("(")>-1||e.indexOf("-")>-1?(e=e.split(""),d=1,(g>f||h>f)&&(d=0),e.splice(d,0,o[p].currency.symbol+j),e=e.join("")):e=o[p].currency.symbol+j+e:e.indexOf(")")>-1?(e=e.split(""),e.splice(-1,0,j+o[p].currency.symbol),e=e.join("")):e=e+j+o[p].currency.symbol,e}function f(a,b,c){var d,e="",f=100*a._value;return b.indexOf(" %")>-1?(e=" ",b=b.replace(" %","")):b=b.replace("%",""),d=i(f,b,c),d.indexOf(")")>-1?(d=d.split(""),d.splice(-1,0,e+"%"),d=d.join("")):d=d+e+"%",d}function g(a){var b=Math.floor(a._value/60/60),c=Math.floor((a._value-60*b*60)/60),d=Math.round(a._value-60*b*60-60*c);return b+":"+(10>c?"0"+c:c)+":"+(10>d?"0"+d:d)}function h(a){var b=a.split(":"),c=0;return 3===b.length?(c+=60*Number(b[0])*60,c+=60*Number(b[1]),c+=Number(b[2])):2===b.length&&(c+=60*Number(b[0]),c+=Number(b[1])),Number(c)}function i(a,c,d){var e,f,g,h,i,j,k=!1,l=!1,m=!1,n="",r=!1,s=!1,t=!1,u=!1,v=!1,w="",x="",y=Math.abs(a),z=["B","KB","MB","GB","TB","PB","EB","ZB","YB"],A="",B=!1;if(0===a&&null!==q)return q;if(c.indexOf("(")>-1?(k=!0,c=c.slice(1,-1)):c.indexOf("+")>-1&&(l=!0,c=c.replace(/\+/g,"")),c.indexOf("a")>-1&&(r=c.indexOf("aK")>=0,s=c.indexOf("aM")>=0,t=c.indexOf("aB")>=0,u=c.indexOf("aT")>=0,v=r||s||t||u,c.indexOf(" a")>-1?(n=" ",c=c.replace(" a","")):c=c.replace("a",""),y>=Math.pow(10,12)&&!v||u?(n+=o[p].abbreviations.trillion,a/=Math.pow(10,12)):y=Math.pow(10,9)&&!v||t?(n+=o[p].abbreviations.billion,a/=Math.pow(10,9)):y=Math.pow(10,6)&&!v||s?(n+=o[p].abbreviations.million,a/=Math.pow(10,6)):(y=Math.pow(10,3)&&!v||r)&&(n+=o[p].abbreviations.thousand,a/=Math.pow(10,3))),c.indexOf("b")>-1)for(c.indexOf(" b")>-1?(w=" ",c=c.replace(" b","")):c=c.replace("b",""),g=0;g<=z.length;g++)if(e=Math.pow(1024,g),f=Math.pow(1024,g+1),a>=e&&f>a){w+=z[g],e>0&&(a/=e);break}return c.indexOf("o")>-1&&(c.indexOf(" o")>-1?(x=" ",c=c.replace(" o","")):c=c.replace("o",""),x+=o[p].ordinal(a)),c.indexOf("[.]")>-1&&(m=!0,c=c.replace("[.]",".")),h=a.toString().split(".")[0],i=c.split(".")[1],j=c.indexOf(","),i?(i.indexOf("[")>-1?(i=i.replace("]",""),i=i.split("["),A=b(a,i[0].length+i[1].length,d,i[1].length)):A=b(a,i.length,d),h=A.split(".")[0],A=A.split(".")[1].length?o[p].delimiters.decimal+A.split(".")[1]:"",m&&0===Number(A.slice(1))&&(A="")):h=b(a,null,d),h.indexOf("-")>-1&&(h=h.slice(1),B=!0),j>-1&&(h=h.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g,"$1"+o[p].delimiters.thousands)),0===c.indexOf(".")&&(h=""),(k&&B?"(":"")+(!k&&B?"-":"")+(!B&&l?"+":"")+h+A+(x?x:"")+(n?n:"")+(w?w:"")+(k&&B?")":"")}function j(a,b){o[a]=b}function k(a){var b=a.toString().split(".");return b.length<2?1:Math.pow(10,b[1].length)}function l(){var a=Array.prototype.slice.call(arguments);return a.reduce(function(a,b){var c=k(a),d=k(b);return c>d?c:d},-1/0)}var m,n="1.5.3",o={},p="en",q=null,r="0,0",s="undefined"!=typeof module&&module.exports;m=function(b){return m.isNumeral(b)?b=b.value():0===b||"undefined"==typeof b?b=0:Number(b)||(b=m.fn.unformat(b)),new a(Number(b))},m.version=n,m.isNumeral=function(b){return b instanceof a},m.language=function(a,b){if(!a)return p;if(a&&!b){if(!o[a])throw new Error("Unknown language : "+a);p=a}return(b||!o[a])&&j(a,b),m},m.languageData=function(a){if(!a)return o[p];if(!o[a])throw new Error("Unknown language : "+a);return o[a]},m.language("en",{delimiters:{thousands:",",decimal:"."},abbreviations:{thousand:"k",million:"m",billion:"b",trillion:"t"},ordinal:function(a){var b=a%10;return 1===~~(a%100/10)?"th":1===b?"st":2===b?"nd":3===b?"rd":"th"},currency:{symbol:"$"}}),m.zeroFormat=function(a){q="string"==typeof a?a:null},m.defaultFormat=function(a){r="string"==typeof a?a:"0.0"},"function"!=typeof Array.prototype.reduce&&(Array.prototype.reduce=function(a,b){"use strict";if(null===this||"undefined"==typeof this)throw new TypeError("Array.prototype.reduce called on null or undefined");if("function"!=typeof a)throw new TypeError(a+" is not a function");var c,d,e=this.length>>>0,f=!1;for(1c;++c)this.hasOwnProperty(c)&&(f?d=a(d,this[c],c,this):(d=this[c],f=!0));if(!f)throw new TypeError("Reduce of empty array with no initial value");return d}),m.fn=a.prototype={clone:function(){return m(this)},format:function(a,b){return c(this,a?a:r,void 0!==b?b:Math.round)},unformat:function(a){return"[object Number]"===Object.prototype.toString.call(a)?a:d(this,a?a:r)},value:function(){return this._value},valueOf:function(){return this._value},set:function(a){return this._value=Number(a),this},add:function(a){function b(a,b){return a+c*b}var c=l.call(null,this._value,a);return this._value=[this._value,a].reduce(b,0)/c,this},subtract:function(a){function b(a,b){return a-c*b}var c=l.call(null,this._value,a);return this._value=[a].reduce(b,this._value*c)/c,this},multiply:function(a){function b(a,b){var c=l(a,b);return a*c*b*c/(c*c)}return this._value=[this._value,a].reduce(b,1),this},divide:function(a){function b(a,b){var c=l(a,b);return a*c/(b*c)}return this._value=[this._value,a].reduce(b),this},difference:function(a){return Math.abs(m(this._value).subtract(a).value())}},s&&(module.exports=m),"undefined"==typeof ender&&(this.numeral=m),"function"==typeof define&&define.amd&&define([],function(){return m})}).call(this);var TimeFormatters={formatUT:function(t){var day,year;if(t==null){t=0}year=(t/(365*24*3600)|0)+1;t%=365*24*3600;day=(t/(24*3600)|0)+1;t%=24*3600;return"Year "+year+", Day "+day+", "+this.hourMinSec(t)+" UT"},formatMET:function(t){var result;if(t==null){t=0}result="T+";if(t>=365*24*3600){result+=(t/(365*24*3600)|0)+":";t%=365*24*3600;if(t<24*3600){result+="0:"}}if(t>=24*3600){result+=(t/(24*3600)|0)+":"}t%=24*3600;return result+this.hourMinSec(t)+" MET"},hourMinSec:function(t){var hour,min,sec;if(t==null){t=0}hour=t/3600|0;if(hour<10){hour="0"+hour}t%=3600;min=t/60|0;if(min<10){min="0"+min}sec=(t%60|0).toFixed();if(sec<10){sec="0"+sec}return""+hour+":"+min+":"+sec},durationString:function(t){var result;if(t==null){t=0}result=t<0?"-":"";t=Math.abs(t);if(t>=365*24*3600){result+=(t/(365*24*3600)|0)+" years ";t%=365*24*3600;if(t<24*3600){result+="0 days "}}if(t>=24*3600){result+=(t/(24*3600)|0)+" days "}t%=24*3600;return result+this.hourMinSec(t)}};var DataFormatters={distanceString:function(value){return numeral(value).format("0,0.000 a")+"m"},heightFromTerrainString:function(value){if(value<=-1){return"NA"}return numeral(value).format("0,0.000 a")+"m"},degreeString:function(value){return numeral(value).format("0.000")+"°"},velocityString:function(value){return numeral(value).format("0,0.000 a")+"m/s"},temperatureString:function(value){if(!value){return"NA"}return numeral(value).format("0,000")+"°C"},accelerationSensorString:function(value){if(value[0]=="No Sensors of the Appropriate Type"){return"NA"}return numeral(value[1][0]).format("0,000")+"G"},pressureSensorString:function(value){if(value[0]=="No Sensors of the Appropriate Type"){return"NA"}return numeral(value[1][0]).format("0,000")+"Pa"},gravitySensorString:function(value){if(value[0]=="No Sensors of the Appropriate Type"){return"NA"}return numeral(value[1][0]).format("0,000 a")+"m/s²"},newtonsString:function(value){return numeral(value).format("0,0.00")+" N"},percentageString:function(value){return numeral(value).format("0%")},tonnageString:function(value){return numeral(value).format("0,0.00")+" t"},timeString:function(value){return numeral(value).format("00:00:00")},plainNumberString:function(value){return numeral(value).format("0,0.00")}};var Prototype={Version:"1.7.2",Browser:function(){var ua=navigator.userAgent;var isOpera=Object.prototype.toString.call(window.opera)=="[object Opera]";return{IE:!!window.attachEvent&&!isOpera,Opera:isOpera,WebKit:ua.indexOf("AppleWebKit/")>-1,Gecko:ua.indexOf("Gecko")>-1&&ua.indexOf("KHTML")===-1,MobileSafari:/Apple.*Mobile/.test(ua)}}(),BrowserFeatures:{XPath:!!document.evaluate,SelectorsAPI:!!document.querySelector,ElementExtensions:function(){var constructor=window.Element||window.HTMLElement;return!!(constructor&&constructor.prototype)}(),SpecificElementExtensions:function(){if(typeof window.HTMLDivElement!=="undefined")return true;var div=document.createElement("div"),form=document.createElement("form"),isSupported=false;if(div["__proto__"]&&div["__proto__"]!==form["__proto__"]){isSupported=true}div=form=null;return isSupported}()},ScriptFragment:"]*>([\\S\\s]*?)",JSONFilter:/^\/\*-secure-([\s\S]*)\*\/\s*$/,emptyFunction:function(){},K:function(x){return x}};if(Prototype.Browser.MobileSafari)Prototype.BrowserFeatures.SpecificElementExtensions=false;var Class=function(){var IS_DONTENUM_BUGGY=function(){for(var p in{toString:1}){if(p==="toString")return false}return true}();function subclass(){}function create(){var parent=null,properties=$A(arguments);if(Object.isFunction(properties[0]))parent=properties.shift();function klass(){this.initialize.apply(this,arguments)}Object.extend(klass,Class.Methods);klass.superclass=parent;klass.subclasses=[];if(parent){subclass.prototype=parent.prototype;klass.prototype=new subclass;parent.subclasses.push(klass)}for(var i=0,length=properties.length;i0){match=source.match(pattern);if(match&&match[0].length>0){result+=source.slice(0,match.index);result+=String.interpret(replacement(match));source=source.slice(match.index+match[0].length)}else{result+=source,source=""}}return result}function sub(pattern,replacement,count){replacement=prepareReplacement(replacement);count=Object.isUndefined(count)?1:count;return this.gsub(pattern,function(match){if(--count<0)return match[0];return replacement(match)})}function scan(pattern,iterator){this.gsub(pattern,iterator);return String(this)}function truncate(length,truncation){length=length||30;truncation=Object.isUndefined(truncation)?"...":truncation;return this.length>length?this.slice(0,length-truncation.length)+truncation:String(this)}function strip(){return this.replace(/^\s+/,"").replace(/\s+$/,"")}function stripTags(){return this.replace(/<\w+(\s+("[^"]*"|'[^']*'|[^>])+)?>|<\/\w+>/gi,"")}function stripScripts(){return this.replace(new RegExp(Prototype.ScriptFragment,"img"),"")}function extractScripts(){var matchAll=new RegExp(Prototype.ScriptFragment,"img"),matchOne=new RegExp(Prototype.ScriptFragment,"im");return(this.match(matchAll)||[]).map(function(scriptTag){return(scriptTag.match(matchOne)||["",""])[1]})}function evalScripts(){return this.extractScripts().map(function(script){return eval(script)})}function escapeHTML(){return this.replace(/&/g,"&").replace(//g,">")}function unescapeHTML(){return this.stripTags().replace(/</g,"<").replace(/>/g,">").replace(/&/g,"&")}function toQueryParams(separator){var match=this.strip().match(/([^?#]*)(#.*)?$/);if(!match)return{};return match[1].split(separator||"&").inject({},function(hash,pair){if((pair=pair.split("="))[0]){var key=decodeURIComponent(pair.shift()),value=pair.length>1?pair.join("="):pair[0];if(value!=undefined){value=value.gsub("+"," ");value=decodeURIComponent(value)}if(key in hash){if(!Object.isArray(hash[key]))hash[key]=[hash[key]];hash[key].push(value)}else hash[key]=value}return hash})}function toArray(){return this.split("")}function succ(){return this.slice(0,this.length-1)+String.fromCharCode(this.charCodeAt(this.length-1)+1)}function times(count){return count<1?"":new Array(count+1).join(this)}function camelize(){return this.replace(/-+(.)?/g,function(match,chr){return chr?chr.toUpperCase():""})}function capitalize(){return this.charAt(0).toUpperCase()+this.substring(1).toLowerCase()}function underscore(){return this.replace(/::/g,"/").replace(/([A-Z]+)([A-Z][a-z])/g,"$1_$2").replace(/([a-z\d])([A-Z])/g,"$1_$2").replace(/-/g,"_").toLowerCase()}function dasherize(){return this.replace(/_/g,"-")}function inspect(useDoubleQuotes){var escapedString=this.replace(/[\x00-\x1f\\]/g,function(character){if(character in String.specialChar){return String.specialChar[character]}return"\\u00"+character.charCodeAt().toPaddedString(2,16)});if(useDoubleQuotes)return'"'+escapedString.replace(/"/g,'\\"')+'"';return"'"+escapedString.replace(/'/g,"\\'")+"'"}function unfilterJSON(filter){return this.replace(filter||Prototype.JSONFilter,"$1")}function isJSON(){var str=this;if(str.blank())return false;str=str.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,"@");str=str.replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,"]");str=str.replace(/(?:^|:|,)(?:\s*\[)+/g,"");return/^[\],:{}\s]*$/.test(str)}function evalJSON(sanitize){var json=this.unfilterJSON(),cx=/[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g;if(cx.test(json)){json=json.replace(cx,function(a){return"\\u"+("0000"+a.charCodeAt(0).toString(16)).slice(-4)})}try{if(!sanitize||json.isJSON())return eval("("+json+")")}catch(e){}throw new SyntaxError("Badly formed JSON string: "+this.inspect())}function parseJSON(){var json=this.unfilterJSON();return JSON.parse(json)}function include(pattern){return this.indexOf(pattern)>-1}function startsWith(pattern,position){position=Object.isNumber(position)?position:0;return this.lastIndexOf(pattern,position)===position}function endsWith(pattern,position){pattern=String(pattern);position=Object.isNumber(position)?position:this.length;if(position<0)position=0;if(position>this.length)position=this.length;var d=position-pattern.length;return d>=0&&this.indexOf(pattern,d)===d}function empty(){return this==""}function blank(){return/^\s*$/.test(this)}function interpolate(object,pattern){return new Template(this,pattern).evaluate(object)}return{gsub:gsub,sub:sub,scan:scan,truncate:truncate,strip:String.prototype.trim||strip,stripTags:stripTags,stripScripts:stripScripts,extractScripts:extractScripts,evalScripts:evalScripts,escapeHTML:escapeHTML,unescapeHTML:unescapeHTML,toQueryParams:toQueryParams,parseQuery:toQueryParams,toArray:toArray,succ:succ,times:times,camelize:camelize,capitalize:capitalize,underscore:underscore,dasherize:dasherize,inspect:inspect,unfilterJSON:unfilterJSON,isJSON:isJSON,evalJSON:NATIVE_JSON_PARSE_SUPPORT?parseJSON:evalJSON,include:include,startsWith:String.prototype.startsWith||startsWith,endsWith:String.prototype.endsWith||endsWith,empty:empty,blank:blank,interpolate:interpolate}}());var Template=Class.create({initialize:function(template,pattern){this.template=template.toString();this.pattern=pattern||Template.Pattern},evaluate:function(object){if(object&&Object.isFunction(object.toTemplateReplacements))object=object.toTemplateReplacements();return this.template.gsub(this.pattern,function(match){if(object==null)return match[1]+"";var before=match[1]||"";if(before=="\\")return match[2];var ctx=object,expr=match[3],pattern=/^([^.[]+|\[((?:.*?[^\\])?)\])(\.|\[|$)/;match=pattern.exec(expr);if(match==null)return before;while(match!=null){var comp=match[1].startsWith("[")?match[2].replace(/\\\\]/g,"]"):match[1];ctx=ctx[comp];if(null==ctx||""==match[3])break;expr=expr.substring("["==match[3]?match[1].length:match[0].length);match=pattern.exec(expr)}return before+String.interpret(ctx)})}});Template.Pattern=/(^|.|\r|\n)(#\{(.*?)\})/;var $break={};var Enumerable=function(){function each(iterator,context){try{this._each(iterator,context)}catch(e){if(e!=$break)throw e}return this}function eachSlice(number,iterator,context){var index=-number,slices=[],array=this.toArray();if(number<1)return array;while((index+=number)=result)result=value},this);return result}function min(iterator,context){iterator=iterator||Prototype.K;var result;this.each(function(value,index){value=iterator.call(context,value,index,this);if(result==null||valueb?1:0}).pluck("value")}function toArray(){return this.map()}function zip(){var iterator=Prototype.K,args=$A(arguments);if(Object.isFunction(args.last()))iterator=args.pop();var collections=[this].concat(args).map($A);return this.map(function(value,index){return iterator(collections.pluck(index))})}function size(){return this.toArray().length}function inspect(){return"#"}return{each:each,eachSlice:eachSlice,all:all,every:all,any:any,some:any,collect:collect,map:collect,detect:detect,findAll:findAll,select:findAll,filter:findAll,grep:grep,include:include,member:include,inGroupsOf:inGroupsOf,inject:inject,invoke:invoke,max:max,min:min,partition:partition,pluck:pluck,reject:reject,sortBy:sortBy,toArray:toArray,entries:toArray,zip:zip,size:size,inspect:inspect,find:detect}}();function $A(iterable){if(!iterable)return[];if("toArray"in Object(iterable))return iterable.toArray();var length=iterable.length||0,results=new Array(length);while(length--)results[length]=iterable[length];return results}function $w(string){if(!Object.isString(string))return[];string=string.strip();return string?string.split(/\s+/):[]}Array.from=$A;(function(){var arrayProto=Array.prototype,slice=arrayProto.slice,_each=arrayProto.forEach;function each(iterator,context){for(var i=0,length=this.length>>>0;i>>0;if(length===0)return-1;i=Number(i);if(isNaN(i)){i=0}else if(i!==0&&isFinite(i)){i=(i>0?1:-1)*Math.floor(Math.abs(i))}if(i>length)return-1;var k=i>=0?i:Math.max(length-Math.abs(i),0);for(;k>>0;if(length===0)return-1;if(!Object.isUndefined(i)){i=Number(i);if(isNaN(i)){i=0}else if(i!==0&&isFinite(i)){i=(i>0?1:-1)*Math.floor(Math.abs(i))}}else{i=length}var k=i>=0?Math.min(i,length-1):length-Math.abs(i);for(;k>=0;k--)if(k in array&&array[k]===item)return k;return-1}function concat(_){var array=[],items=slice.call(arguments,0),item,n=0;items.unshift(this);for(var i=0,length=items.length;i>>0;i>>0;i>>0;i>>0;i"}function clone(){return new Hash(this)}return{initialize:initialize,_each:_each,set:set,get:get,unset:unset,toObject:toObject,toTemplateReplacements:toObject,keys:keys,values:values,index:index,merge:merge,update:update,toQueryString:toQueryString,inspect:inspect,toJSON:toObject,clone:clone}}());Hash.from=$H;Object.extend(Number.prototype,function(){function toColorPart(){return this.toPaddedString(2,16)}function succ(){return this+1}function times(iterator,context){$R(0,this,true).each(iterator,context);return this}function toPaddedString(length,radix){var string=this.toString(radix||10);return"0".times(length-string.length)+string}function abs(){return Math.abs(this)}function round(){return Math.round(this)}function ceil(){return Math.ceil(this)}function floor(){return Math.floor(this)}return{toColorPart:toColorPart,succ:succ,times:times,toPaddedString:toPaddedString,abs:abs,round:round,ceil:ceil,floor:floor}}());function $R(start,end,exclusive){return new ObjectRange(start,end,exclusive)}var ObjectRange=Class.create(Enumerable,function(){function initialize(start,end,exclusive){this.start=start;this.end=end;this.exclusive=exclusive}function _each(iterator,context){var value=this.start,i;for(i=0;this.include(value);i++){iterator.call(context,value,i);value=value.succ()}}function include(value){if(value1&&!(readyState==4&&this._complete))this.respondToReadyState(this.transport.readyState)},setRequestHeaders:function(){var headers={"X-Requested-With":"XMLHttpRequest","X-Prototype-Version":Prototype.Version,Accept:"text/javascript, text/html, application/xml, text/xml, */*"};if(this.method=="post"){headers["Content-type"]=this.options.contentType+(this.options.encoding?"; charset="+this.options.encoding:"");if(this.transport.overrideMimeType&&(navigator.userAgent.match(/Gecko\/(\d{4})/)||[0,2005])[1]<2005)headers["Connection"]="close"}if(typeof this.options.requestHeaders=="object"){var extras=this.options.requestHeaders;if(Object.isFunction(extras.push))for(var i=0,length=extras.length;i=200&&status<300||status==304},getStatus:function(){try{if(this.transport.status===1223)return 204;return this.transport.status||0}catch(e){return 0}},respondToReadyState:function(readyState){var state=Ajax.Request.Events[readyState],response=new Ajax.Response(this);if(state=="Complete"){try{this._complete=true;(this.options["on"+response.status]||this.options["on"+(this.success()?"Success":"Failure")]||Prototype.emptyFunction)(response,response.headerJSON)}catch(e){this.dispatchException(e)}var contentType=response.getHeader("Content-type");if(this.options.evalJS=="force"||this.options.evalJS&&this.isSameOrigin()&&contentType&&contentType.match(/^\s*(text|application)\/(x-)?(java|ecma)script(;.*)?\s*$/i))this.evalResponse()}try{(this.options["on"+state]||Prototype.emptyFunction)(response,response.headerJSON);Ajax.Responders.dispatch("on"+state,this,response,response.headerJSON)}catch(e){this.dispatchException(e)}if(state=="Complete"){this.transport.onreadystatechange=Prototype.emptyFunction}},isSameOrigin:function(){var m=this.url.match(/^\s*https?:\/\/[^\/]*/);return!m||m[0]=="#{protocol}//#{domain}#{port}".interpolate({protocol:location.protocol,domain:document.domain,port:location.port?":"+location.port:""})},getHeader:function(name){try{return this.transport.getResponseHeader(name)||null}catch(e){return null}},evalResponse:function(){try{return eval((this.transport.responseText||"").unfilterJSON())}catch(e){this.dispatchException(e)}},dispatchException:function(exception){(this.options.onException||Prototype.emptyFunction)(this,exception);Ajax.Responders.dispatch("onException",this,exception)}});Ajax.Request.Events=["Uninitialized","Loading","Loaded","Interactive","Complete"];Ajax.Response=Class.create({initialize:function(request){this.request=request;var transport=this.transport=request.transport,readyState=this.readyState=transport.readyState;if(readyState>2&&!Prototype.Browser.IE||readyState==4){this.status=this.getStatus();this.statusText=this.getStatusText();this.responseText=String.interpret(transport.responseText);this.headerJSON=this._getHeaderJSON()}if(readyState==4){var xml=transport.responseXML;this.responseXML=Object.isUndefined(xml)?null:xml;this.responseJSON=this._getResponseJSON()}},status:0,statusText:"",getStatus:Ajax.Request.prototype.getStatus,getStatusText:function(){try{return this.transport.statusText||""}catch(e){return""}},getHeader:Ajax.Request.prototype.getHeader,getAllHeaders:function(){try{return this.getAllResponseHeaders()}catch(e){return null}},getResponseHeader:function(name){return this.transport.getResponseHeader(name)},getAllResponseHeaders:function(){return this.transport.getAllResponseHeaders()},_getHeaderJSON:function(){var json=this.getHeader("X-JSON");if(!json)return null;try{json=decodeURIComponent(escape(json))}catch(e){}try{return json.evalJSON(this.request.options.sanitizeJSON||!this.request.isSameOrigin())}catch(e){this.request.dispatchException(e)}},_getResponseJSON:function(){var options=this.request.options;if(!options.evalJSON||options.evalJSON!="force"&&!(this.getHeader("Content-type")||"").include("application/json")||this.responseText.blank())return null;try{return this.responseText.evalJSON(options.sanitizeJSON||!this.request.isSameOrigin())}catch(e){this.request.dispatchException(e)}}});Ajax.Updater=Class.create(Ajax.Request,{initialize:function($super,container,url,options){this.container={success:container.success||container,failure:container.failure||(container.success?null:container)};options=Object.clone(options);var onComplete=options.onComplete;options.onComplete=function(response,json){this.updateContent(response.responseText);if(Object.isFunction(onComplete))onComplete(response,json)}.bind(this);$super(url,options)},updateContent:function(responseText){var receiver=this.container[this.success()?"success":"failure"],options=this.options;if(!options.evalScripts)responseText=responseText.stripScripts();if(receiver=$(receiver)){if(options.insertion){if(Object.isString(options.insertion)){var insertion={};insertion[options.insertion]=responseText;receiver.insert(insertion)}else options.insertion(receiver,responseText)}else receiver.update(responseText)}}});Ajax.PeriodicalUpdater=Class.create(Ajax.Base,{initialize:function($super,container,url,options){$super(options);this.onComplete=this.options.onComplete;this.frequency=this.options.frequency||2;this.decay=this.options.decay||1;this.updater={};this.container=container;this.url=url;this.start()},start:function(){this.options.onComplete=this.updateComplete.bind(this);this.onTimerEvent()},stop:function(){this.updater.options.onComplete=undefined;clearTimeout(this.timer);(this.onComplete||Prototype.emptyFunction).apply(this,arguments)},updateComplete:function(response){if(this.options.decay){this.decay=response.responseText==this.lastText?this.decay*this.options.decay:1;this.lastText=response.responseText}this.timer=this.onTimerEvent.bind(this).delay(this.decay*this.frequency)},onTimerEvent:function(){this.updater=new Ajax.Updater(this.container,this.url,this.options)}});(function(GLOBAL){var UNDEFINED;var SLICE=Array.prototype.slice;var DIV=document.createElement("div");function $(element){if(arguments.length>1){for(var i=0,elements=[],length=arguments.length;i');return el.tagName.toLowerCase()==="input"&&el.name==="x"}catch(err){return false}}();var oldElement=GLOBAL.Element;function Element(tagName,attributes){attributes=attributes||{};tagName=tagName.toLowerCase();if(HAS_EXTENDED_CREATE_ELEMENT_SYNTAX&&attributes.name){tagName="<"+tagName+' name="'+attributes.name+'">';delete attributes.name;return Element.writeAttribute(document.createElement(tagName),attributes)}if(!ELEMENT_CACHE[tagName])ELEMENT_CACHE[tagName]=Element.extend(document.createElement(tagName));var node=shouldUseCreationCache(tagName,attributes)?ELEMENT_CACHE[tagName].cloneNode(false):document.createElement(tagName);return Element.writeAttribute(node,attributes)}GLOBAL.Element=Element;Object.extend(GLOBAL.Element,oldElement||{});if(oldElement)GLOBAL.Element.prototype=oldElement.prototype;Element.Methods={ByTag:{},Simulated:{}};var methods={};var INSPECT_ATTRIBUTES={id:"id",className:"class"};function inspect(element){element=$(element);var result="<"+element.tagName.toLowerCase();var attribute,value;for(var property in INSPECT_ATTRIBUTES){attribute=INSPECT_ATTRIBUTES[property];value=(element[property]||"").toString();if(value)result+=" "+attribute+"="+value.inspect(true)}return result+">"}methods.inspect=inspect;function visible(element){return $(element).style.display!=="none"}function toggle(element,bool){element=$(element);if(Object.isUndefined(bool))bool=!Element.visible(element);Element[bool?"show":"hide"](element);return element}function hide(element){element=$(element);element.style.display="none";return element}function show(element){element=$(element);element.style.display="";return element}Object.extend(methods,{visible:visible,toggle:toggle,hide:hide,show:show});function remove(element){element=$(element);element.parentNode.removeChild(element);return element}var SELECT_ELEMENT_INNERHTML_BUGGY=function(){var el=document.createElement("select"),isBuggy=true;el.innerHTML='';if(el.options&&el.options[0]){isBuggy=el.options[0].nodeName.toUpperCase()!=="OPTION"}el=null;return isBuggy}();var TABLE_ELEMENT_INNERHTML_BUGGY=function(){try{var el=document.createElement("table");if(el&&el.tBodies){el.innerHTML="test";var isBuggy=typeof el.tBodies[0]=="undefined";el=null;return isBuggy}}catch(e){return true}}();var LINK_ELEMENT_INNERHTML_BUGGY=function(){try{var el=document.createElement("div");el.innerHTML="";var isBuggy=el.childNodes.length===0;el=null;return isBuggy}catch(e){return true}}();var ANY_INNERHTML_BUGGY=SELECT_ELEMENT_INNERHTML_BUGGY||TABLE_ELEMENT_INNERHTML_BUGGY||LINK_ELEMENT_INNERHTML_BUGGY;var SCRIPT_ELEMENT_REJECTS_TEXTNODE_APPENDING=function(){var s=document.createElement("script"),isBuggy=false;try{s.appendChild(document.createTextNode(""));isBuggy=!s.firstChild||s.firstChild&&s.firstChild.nodeType!==3}catch(e){isBuggy=true}s=null;return isBuggy}();function update(element,content){element=$(element);var descendants=element.getElementsByTagName("*"),i=descendants.length;while(i--)purgeElement(descendants[i]);if(content&&content.toElement)content=content.toElement();if(Object.isElement(content))return element.update().insert(content);content=Object.toHTML(content);var tagName=element.tagName.toUpperCase();if(tagName==="SCRIPT"&&SCRIPT_ELEMENT_REJECTS_TEXTNODE_APPENDING){element.text=content;return element}if(ANY_INNERHTML_BUGGY){if(tagName in INSERTION_TRANSLATIONS.tags){while(element.firstChild)element.removeChild(element.firstChild);var nodes=getContentFromAnonymousElement(tagName,content.stripScripts());for(var i=0,node;node=nodes[i];i++)element.appendChild(node)}else if(LINK_ELEMENT_INNERHTML_BUGGY&&Object.isString(content)&&content.indexOf("-1){while(element.firstChild)element.removeChild(element.firstChild);var nodes=getContentFromAnonymousElement(tagName,content.stripScripts(),true);for(var i=0,node;node=nodes[i];i++)element.appendChild(node)}else{element.innerHTML=content.stripScripts()}}else{element.innerHTML=content.stripScripts()}content.evalScripts.bind(content).defer();return element}function replace(element,content){element=$(element);if(content&&content.toElement){content=content.toElement()}else if(!Object.isElement(content)){content=Object.toHTML(content);var range=element.ownerDocument.createRange();range.selectNode(element);content.evalScripts.bind(content).defer();content=range.createContextualFragment(content.stripScripts())}element.parentNode.replaceChild(content,element);return element}var INSERTION_TRANSLATIONS={before:function(element,node){element.parentNode.insertBefore(node,element)},top:function(element,node){element.insertBefore(node,element.firstChild)},bottom:function(element,node){element.appendChild(node)},after:function(element,node){element.parentNode.insertBefore(node,element.nextSibling)},tags:{TABLE:["","
    ",1],TBODY:["","
    ",2],TR:["","
    ",3],TD:["
    ","
    ",4],SELECT:["",1]}};var tags=INSERTION_TRANSLATIONS.tags;Object.extend(tags,{THEAD:tags.TBODY,TFOOT:tags.TBODY,TH:tags.TD});function replace_IE(element,content){element=$(element);if(content&&content.toElement)content=content.toElement();if(Object.isElement(content)){element.parentNode.replaceChild(content,element);return element}content=Object.toHTML(content);var parent=element.parentNode,tagName=parent.tagName.toUpperCase();if(tagName in INSERTION_TRANSLATIONS.tags){var nextSibling=Element.next(element);var fragments=getContentFromAnonymousElement(tagName,content.stripScripts());parent.removeChild(element);var iterator;if(nextSibling)iterator=function(node){parent.insertBefore(node,nextSibling)};else iterator=function(node){parent.appendChild(node)};fragments.each(iterator)}else{element.outerHTML=content.stripScripts()}content.evalScripts.bind(content).defer();return element}if("outerHTML"in document.documentElement)replace=replace_IE;function isContent(content){if(Object.isUndefined(content)||content===null)return false;if(Object.isString(content)||Object.isNumber(content))return true;if(Object.isElement(content))return true;if(content.toElement||content.toHTML)return true;return false}function insertContentAt(element,content,position){position=position.toLowerCase();var method=INSERTION_TRANSLATIONS[position];if(content&&content.toElement)content=content.toElement();if(Object.isElement(content)){method(element,content);return element}content=Object.toHTML(content);var tagName=(position==="before"||position==="after"?element.parentNode:element).tagName.toUpperCase();var childNodes=getContentFromAnonymousElement(tagName,content.stripScripts());if(position==="top"||position==="after")childNodes.reverse();for(var i=0,node;node=childNodes[i];i++)method(element,node);content.evalScripts.bind(content).defer()}function insert(element,insertions){element=$(element);if(isContent(insertions))insertions={bottom:insertions};for(var position in insertions)insertContentAt(element,insertions[position],position);return element}function wrap(element,wrapper,attributes){element=$(element);if(Object.isElement(wrapper)){$(wrapper).writeAttribute(attributes||{})}else if(Object.isString(wrapper)){wrapper=new Element(wrapper,attributes)}else{wrapper=new Element("div",wrapper)}if(element.parentNode)element.parentNode.replaceChild(wrapper,element);wrapper.appendChild(element);return wrapper}function cleanWhitespace(element){element=$(element);var node=element.firstChild;while(node){var nextNode=node.nextSibling;if(node.nodeType===Node.TEXT_NODE&&!/\S/.test(node.nodeValue))element.removeChild(node);node=nextNode}return element}function empty(element){return $(element).innerHTML.blank()}function getContentFromAnonymousElement(tagName,html,force){var t=INSERTION_TRANSLATIONS.tags[tagName],div=DIV;var workaround=!!t;if(!workaround&&force){workaround=true;t=["","",0]}if(workaround){div.innerHTML=" "+t[0]+html+t[1];div.removeChild(div.firstChild);for(var i=t[2];i--;)div=div.firstChild}else{div.innerHTML=html}return $A(div.childNodes)}function clone(element,deep){if(!(element=$(element)))return;var clone=element.cloneNode(deep);if(!HAS_UNIQUE_ID_PROPERTY){clone._prototypeUID=UNDEFINED;if(deep){var descendants=Element.select(clone,"*"),i=descendants.length;while(i--)descendants[i]._prototypeUID=UNDEFINED}}return Element.extend(clone)}function purgeElement(element){var uid=getUniqueElementID(element);if(uid){Element.stopObserving(element);if(!HAS_UNIQUE_ID_PROPERTY)element._prototypeUID=UNDEFINED;delete Element.Storage[uid]}}function purgeCollection(elements){var i=elements.length;while(i--)purgeElement(elements[i])}function purgeCollection_IE(elements){var i=elements.length,element,uid;while(i--){element=elements[i];uid=getUniqueElementID(element);delete Element.Storage[uid];delete Event.cache[uid]}}if(HAS_UNIQUE_ID_PROPERTY){purgeCollection=purgeCollection_IE}function purge(element){if(!(element=$(element)))return;purgeElement(element);var descendants=element.getElementsByTagName("*"),i=descendants.length;while(i--)purgeElement(descendants[i]);return null}Object.extend(methods,{remove:remove,update:update,replace:replace,insert:insert,wrap:wrap,cleanWhitespace:cleanWhitespace,empty:empty,clone:clone,purge:purge});function recursivelyCollect(element,property,maximumLength){element=$(element);maximumLength=maximumLength||-1;var elements=[];while(element=element[property]){if(element.nodeType===Node.ELEMENT_NODE)elements.push(Element.extend(element));if(elements.length===maximumLength)break}return elements}function ancestors(element){return recursivelyCollect(element,"parentNode")}function descendants(element){return Element.select(element,"*")}function firstDescendant(element){element=$(element).firstChild;while(element&&element.nodeType!==Node.ELEMENT_NODE)element=element.nextSibling;return $(element)}function immediateDescendants(element){var results=[],child=$(element).firstChild;while(child){if(child.nodeType===Node.ELEMENT_NODE)results.push(Element.extend(child));child=child.nextSibling}return results}function previousSiblings(element){return recursivelyCollect(element,"previousSibling")}function nextSiblings(element){return recursivelyCollect(element,"nextSibling")}function siblings(element){element=$(element);var previous=previousSiblings(element),next=nextSiblings(element);return previous.reverse().concat(next)}function match(element,selector){element=$(element);if(Object.isString(selector))return Prototype.Selector.match(element,selector);return selector.match(element)}function _recursivelyFind(element,property,expression,index){element=$(element),expression=expression||0,index=index||0;if(Object.isNumber(expression)){index=expression,expression=null}while(element=element[property]){if(element.nodeType!==1)continue;if(expression&&!Prototype.Selector.match(element,expression))continue;if(--index>=0)continue;return Element.extend(element)}}function up(element,expression,index){element=$(element);if(arguments.length===1)return $(element.parentNode);return _recursivelyFind(element,"parentNode",expression,index)}function down(element,expression,index){if(arguments.length===1)return firstDescendant(element);element=$(element),expression=expression||0,index=index||0;if(Object.isNumber(expression))index=expression,expression="*";var node=Prototype.Selector.select(expression,element)[index];return Element.extend(node)}function previous(element,expression,index){return _recursivelyFind(element,"previousSibling",expression,index)}function next(element,expression,index){return _recursivelyFind(element,"nextSibling",expression,index)}function select(element){element=$(element);var expressions=SLICE.call(arguments,1).join(", ");return Prototype.Selector.select(expressions,element)}function adjacent(element){element=$(element);var expressions=SLICE.call(arguments,1).join(", ");var siblings=Element.siblings(element),results=[];for(var i=0,sibling;sibling=siblings[i];i++){if(Prototype.Selector.match(sibling,expressions))results.push(sibling)}return results}function descendantOf_DOM(element,ancestor){element=$(element),ancestor=$(ancestor);while(element=element.parentNode)if(element===ancestor)return true;return false}function descendantOf_contains(element,ancestor){element=$(element),ancestor=$(ancestor);if(!ancestor.contains)return descendantOf_DOM(element,ancestor);return ancestor.contains(element)&&ancestor!==element}function descendantOf_compareDocumentPosition(element,ancestor){element=$(element),ancestor=$(ancestor);return(element.compareDocumentPosition(ancestor)&8)===8}var descendantOf;if(DIV.compareDocumentPosition){descendantOf=descendantOf_compareDocumentPosition}else if(DIV.contains){descendantOf=descendantOf_contains}else{descendantOf=descendantOf_DOM}Object.extend(methods,{recursivelyCollect:recursivelyCollect,ancestors:ancestors,descendants:descendants,firstDescendant:firstDescendant,immediateDescendants:immediateDescendants,previousSiblings:previousSiblings,nextSiblings:nextSiblings,siblings:siblings,match:match,up:up,down:down,previous:previous,next:next,select:select,adjacent:adjacent,descendantOf:descendantOf,getElementsBySelector:select,childElements:immediateDescendants});var idCounter=1;function identify(element){element=$(element);var id=Element.readAttribute(element,"id");if(id)return id;do{id="anonymous_element_"+idCounter++}while($(id));Element.writeAttribute(element,"id",id);return id}function readAttribute(element,name){return $(element).getAttribute(name)}function readAttribute_IE(element,name){element=$(element);var table=ATTRIBUTE_TRANSLATIONS.read;if(table.values[name])return table.values[name](element,name);if(table.names[name])name=table.names[name];if(name.include(":")){if(!element.attributes||!element.attributes[name])return null;return element.attributes[name].value}return element.getAttribute(name)}function readAttribute_Opera(element,name){if(name==="title")return element.title;return element.getAttribute(name)}var PROBLEMATIC_ATTRIBUTE_READING=function(){DIV.setAttribute("onclick",[]);var value=DIV.getAttribute("onclick");var isFunction=Object.isArray(value);DIV.removeAttribute("onclick");return isFunction}();if(PROBLEMATIC_ATTRIBUTE_READING){readAttribute=readAttribute_IE}else if(Prototype.Browser.Opera){readAttribute=readAttribute_Opera}function writeAttribute(element,name,value){element=$(element);var attributes={},table=ATTRIBUTE_TRANSLATIONS.write; +Math.toRadians = function(angleInDegrees){ + return angleInDegrees * (Math.PI/180) +} -if(typeof name==="object"){attributes=name}else{attributes[name]=Object.isUndefined(value)?true:value}for(var attr in attributes){name=table.names[attr]||attr;value=attributes[attr];if(table.values[attr])name=table.values[attr](element,value)||name;if(value===false||value===null)element.removeAttribute(name);else if(value===true)element.setAttribute(name,name);else element.setAttribute(name,value)}return element}var PROBLEMATIC_HAS_ATTRIBUTE_WITH_CHECKBOXES=function(){if(!HAS_EXTENDED_CREATE_ELEMENT_SYNTAX){return false}var checkbox=document.createElement('');checkbox.checked=true;var node=checkbox.getAttributeNode("checked");return!node||!node.specified}();function hasAttribute(element,attribute){attribute=ATTRIBUTE_TRANSLATIONS.has[attribute]||attribute;var node=$(element).getAttributeNode(attribute);return!!(node&&node.specified)}function hasAttribute_IE(element,attribute){if(attribute==="checked"){return element.checked}return hasAttribute(element,attribute)}GLOBAL.Element.Methods.Simulated.hasAttribute=PROBLEMATIC_HAS_ATTRIBUTE_WITH_CHECKBOXES?hasAttribute_IE:hasAttribute;function classNames(element){return new Element.ClassNames(element)}var regExpCache={};function getRegExpForClassName(className){if(regExpCache[className])return regExpCache[className];var re=new RegExp("(^|\\s+)"+className+"(\\s+|$)");regExpCache[className]=re;return re}function hasClassName(element,className){if(!(element=$(element)))return;var elementClassName=element.className;if(elementClassName.length===0)return false;if(elementClassName===className)return true;return getRegExpForClassName(className).test(elementClassName)}function addClassName(element,className){if(!(element=$(element)))return;if(!hasClassName(element,className))element.className+=(element.className?" ":"")+className;return element}function removeClassName(element,className){if(!(element=$(element)))return;element.className=element.className.replace(getRegExpForClassName(className)," ").strip();return element}function toggleClassName(element,className,bool){if(!(element=$(element)))return;if(Object.isUndefined(bool))bool=!hasClassName(element,className);var method=Element[bool?"addClassName":"removeClassName"];return method(element,className)}var ATTRIBUTE_TRANSLATIONS={};var classProp="className",forProp="for";DIV.setAttribute(classProp,"x");if(DIV.className!=="x"){DIV.setAttribute("class","x");if(DIV.className==="x")classProp="class"}var LABEL=document.createElement("label");LABEL.setAttribute(forProp,"x");if(LABEL.htmlFor!=="x"){LABEL.setAttribute("htmlFor","x");if(LABEL.htmlFor==="x")forProp="htmlFor"}LABEL=null;function _getAttr(element,attribute){return element.getAttribute(attribute)}function _getAttr2(element,attribute){return element.getAttribute(attribute,2)}function _getAttrNode(element,attribute){var node=element.getAttributeNode(attribute);return node?node.value:""}function _getFlag(element,attribute){return $(element).hasAttribute(attribute)?attribute:null}DIV.onclick=Prototype.emptyFunction;var onclickValue=DIV.getAttribute("onclick");var _getEv;if(String(onclickValue).indexOf("{")>-1){_getEv=function(element,attribute){var value=element.getAttribute(attribute);if(!value)return null;value=value.toString();value=value.split("{")[1];value=value.split("}")[0];return value.strip()}}else if(onclickValue===""){_getEv=function(element,attribute){var value=element.getAttribute(attribute);if(!value)return null;return value.strip()}}ATTRIBUTE_TRANSLATIONS.read={names:{class:classProp,className:classProp,for:forProp,htmlFor:forProp},values:{style:function(element){return element.style.cssText.toLowerCase()},title:function(element){return element.title}}};ATTRIBUTE_TRANSLATIONS.write={names:{className:"class",htmlFor:"for",cellpadding:"cellPadding",cellspacing:"cellSpacing"},values:{checked:function(element,value){element.checked=!!value},style:function(element,value){element.style.cssText=value?value:""}}};ATTRIBUTE_TRANSLATIONS.has={names:{}};Object.extend(ATTRIBUTE_TRANSLATIONS.write.names,ATTRIBUTE_TRANSLATIONS.read.names);var CAMEL_CASED_ATTRIBUTE_NAMES=$w("colSpan rowSpan vAlign dateTime "+"accessKey tabIndex encType maxLength readOnly longDesc frameBorder");for(var i=0,attr;attr=CAMEL_CASED_ATTRIBUTE_NAMES[i];i++){ATTRIBUTE_TRANSLATIONS.write.names[attr.toLowerCase()]=attr;ATTRIBUTE_TRANSLATIONS.has.names[attr.toLowerCase()]=attr}Object.extend(ATTRIBUTE_TRANSLATIONS.read.values,{href:_getAttr2,src:_getAttr2,type:_getAttr,action:_getAttrNode,disabled:_getFlag,checked:_getFlag,readonly:_getFlag,multiple:_getFlag,onload:_getEv,onunload:_getEv,onclick:_getEv,ondblclick:_getEv,onmousedown:_getEv,onmouseup:_getEv,onmouseover:_getEv,onmousemove:_getEv,onmouseout:_getEv,onfocus:_getEv,onblur:_getEv,onkeypress:_getEv,onkeydown:_getEv,onkeyup:_getEv,onsubmit:_getEv,onreset:_getEv,onselect:_getEv,onchange:_getEv});Object.extend(methods,{identify:identify,readAttribute:readAttribute,writeAttribute:writeAttribute,classNames:classNames,hasClassName:hasClassName,addClassName:addClassName,removeClassName:removeClassName,toggleClassName:toggleClassName});function normalizeStyleName(style){if(style==="float"||style==="styleFloat")return"cssFloat";return style.camelize()}function normalizeStyleName_IE(style){if(style==="float"||style==="cssFloat")return"styleFloat";return style.camelize()}function setStyle(element,styles){element=$(element);var elementStyle=element.style,match;if(Object.isString(styles)){elementStyle.cssText+=";"+styles;if(styles.include("opacity")){var opacity=styles.match(/opacity:\s*(\d?\.?\d*)/)[1];Element.setOpacity(element,opacity)}return element}for(var property in styles){if(property==="opacity"){Element.setOpacity(element,styles[property])}else{var value=styles[property];if(property==="float"||property==="cssFloat"){property=Object.isUndefined(elementStyle.styleFloat)?"cssFloat":"styleFloat"}elementStyle[property]=value}}return element}function getStyle(element,style){element=$(element);style=normalizeStyleName(style);var value=element.style[style];if(!value||value==="auto"){var css=document.defaultView.getComputedStyle(element,null);value=css?css[style]:null}if(style==="opacity")return value?parseFloat(value):1;return value==="auto"?null:value}function getStyle_Opera(element,style){switch(style){case"height":case"width":if(!Element.visible(element))return null;var dim=parseInt(getStyle(element,style),10);if(dim!==element["offset"+style.capitalize()])return dim+"px";return Element.measure(element,style);default:return getStyle(element,style)}}function getStyle_IE(element,style){element=$(element);style=normalizeStyleName_IE(style);var value=element.style[style];if(!value&&element.currentStyle){value=element.currentStyle[style]}if(style==="opacity"&&!STANDARD_CSS_OPACITY_SUPPORTED)return getOpacity_IE(element);if(value==="auto"){if((style==="width"||style==="height")&&Element.visible(element))return Element.measure(element,style)+"px";return null}return value}function stripAlphaFromFilter_IE(filter){return(filter||"").replace(/alpha\([^\)]*\)/gi,"")}function hasLayout_IE(element){if(!element.currentStyle||!element.currentStyle.hasLayout)element.style.zoom=1;return element}var STANDARD_CSS_OPACITY_SUPPORTED=function(){DIV.style.cssText="opacity:.55";return/^0.55/.test(DIV.style.opacity)}();function setOpacity(element,value){element=$(element);if(value==1||value==="")value="";else if(value<1e-5)value=0;element.style.opacity=value;return element}function setOpacity_IE(element,value){if(STANDARD_CSS_OPACITY_SUPPORTED)return setOpacity(element,value);element=hasLayout_IE($(element));var filter=Element.getStyle(element,"filter"),style=element.style;if(value==1||value===""){filter=stripAlphaFromFilter_IE(filter);if(filter)style.filter=filter;else style.removeAttribute("filter");return element}if(value<1e-5)value=0;style.filter=stripAlphaFromFilter_IE(filter)+"alpha(opacity="+value*100+")";return element}function getOpacity(element){return Element.getStyle(element,"opacity")}function getOpacity_IE(element){if(STANDARD_CSS_OPACITY_SUPPORTED)return getOpacity(element);var filter=Element.getStyle(element,"filter");if(filter.length===0)return 1;var match=(filter||"").match(/alpha\(opacity=(.*)\)/);if(match&&match[1])return parseFloat(match[1])/100;return 1}Object.extend(methods,{setStyle:setStyle,getStyle:getStyle,setOpacity:setOpacity,getOpacity:getOpacity});if("styleFloat"in DIV.style){methods.getStyle=getStyle_IE;methods.setOpacity=setOpacity_IE;methods.getOpacity=getOpacity_IE}var UID=0;GLOBAL.Element.Storage={UID:1};function getUniqueElementID(element){if(element===window)return 0;if(typeof element._prototypeUID==="undefined")element._prototypeUID=Element.Storage.UID++;return element._prototypeUID}function getUniqueElementID_IE(element){if(element===window)return 0;if(element==document)return 1;return element.uniqueID}var HAS_UNIQUE_ID_PROPERTY="uniqueID"in DIV;if(HAS_UNIQUE_ID_PROPERTY)getUniqueElementID=getUniqueElementID_IE;function getStorage(element){if(!(element=$(element)))return;var uid=getUniqueElementID(element);if(!Element.Storage[uid])Element.Storage[uid]=$H();return Element.Storage[uid]}function store(element,key,value){if(!(element=$(element)))return;var storage=getStorage(element);if(arguments.length===2){storage.update(key)}else{storage.set(key,value)}return element}function retrieve(element,key,defaultValue){if(!(element=$(element)))return;var storage=getStorage(element),value=storage.get(key);if(Object.isUndefined(value)){storage.set(key,defaultValue);value=defaultValue}return value}Object.extend(methods,{getStorage:getStorage,store:store,retrieve:retrieve});var Methods={},ByTag=Element.Methods.ByTag,F=Prototype.BrowserFeatures;if(!F.ElementExtensions&&"__proto__"in DIV){GLOBAL.HTMLElement={};GLOBAL.HTMLElement.prototype=DIV["__proto__"];F.ElementExtensions=true}function checkElementPrototypeDeficiency(tagName){if(typeof window.Element==="undefined")return false;if(!HAS_EXTENDED_CREATE_ELEMENT_SYNTAX)return false;var proto=window.Element.prototype;if(proto){var id="_"+(Math.random()+"").slice(2),el=document.createElement(tagName);proto[id]="x";var isBuggy=el[id]!=="x";delete proto[id];el=null;return isBuggy}return false}var HTMLOBJECTELEMENT_PROTOTYPE_BUGGY=checkElementPrototypeDeficiency("object");function extendElementWith(element,methods){for(var property in methods){var value=methods[property];if(Object.isFunction(value)&&!(property in element))element[property]=value.methodize()}}var EXTENDED={};function elementIsExtended(element){var uid=getUniqueElementID(element);return uid in EXTENDED}function extend(element){if(!element||elementIsExtended(element))return element;if(element.nodeType!==Node.ELEMENT_NODE||element==window)return element;var methods=Object.clone(Methods),tagName=element.tagName.toUpperCase();if(ByTag[tagName])Object.extend(methods,ByTag[tagName]);extendElementWith(element,methods);EXTENDED[getUniqueElementID(element)]=true;return element}function extend_IE8(element){if(!element||elementIsExtended(element))return element;var t=element.tagName;if(t&&/^(?:object|applet|embed)$/i.test(t)){extendElementWith(element,Element.Methods);extendElementWith(element,Element.Methods.Simulated);extendElementWith(element,Element.Methods.ByTag[t.toUpperCase()])}return element}if(F.SpecificElementExtensions){extend=HTMLOBJECTELEMENT_PROTOTYPE_BUGGY?extend_IE8:Prototype.K}function addMethodsToTagName(tagName,methods){tagName=tagName.toUpperCase();if(!ByTag[tagName])ByTag[tagName]={};Object.extend(ByTag[tagName],methods)}function mergeMethods(destination,methods,onlyIfAbsent){if(Object.isUndefined(onlyIfAbsent))onlyIfAbsent=false;for(var property in methods){var value=methods[property];if(!Object.isFunction(value))continue;if(!onlyIfAbsent||!(property in destination))destination[property]=value.methodize()}}function findDOMClass(tagName){var klass;var trans={OPTGROUP:"OptGroup",TEXTAREA:"TextArea",P:"Paragraph",FIELDSET:"FieldSet",UL:"UList",OL:"OList",DL:"DList",DIR:"Directory",H1:"Heading",H2:"Heading",H3:"Heading",H4:"Heading",H5:"Heading",H6:"Heading",Q:"Quote",INS:"Mod",DEL:"Mod",A:"Anchor",IMG:"Image",CAPTION:"TableCaption",COL:"TableCol",COLGROUP:"TableCol",THEAD:"TableSection",TFOOT:"TableSection",TBODY:"TableSection",TR:"TableRow",TH:"TableCell",TD:"TableCell",FRAMESET:"FrameSet",IFRAME:"IFrame"};if(trans[tagName])klass="HTML"+trans[tagName]+"Element";if(window[klass])return window[klass];klass="HTML"+tagName+"Element";if(window[klass])return window[klass];klass="HTML"+tagName.capitalize()+"Element";if(window[klass])return window[klass];var element=document.createElement(tagName),proto=element["__proto__"]||element.constructor.prototype;element=null;return proto}function addMethods(methods){if(arguments.length===0)addFormMethods();if(arguments.length===2){var tagName=methods;methods=arguments[1]}if(!tagName){Object.extend(Element.Methods,methods||{})}else{if(Object.isArray(tagName)){for(var i=0,tag;tag=tagName[i];i++)addMethodsToTagName(tag,methods)}else{addMethodsToTagName(tagName,methods)}}var ELEMENT_PROTOTYPE=window.HTMLElement?HTMLElement.prototype:Element.prototype;if(F.ElementExtensions){mergeMethods(ELEMENT_PROTOTYPE,Element.Methods);mergeMethods(ELEMENT_PROTOTYPE,Element.Methods.Simulated,true)}if(F.SpecificElementExtensions){for(var tag in Element.Methods.ByTag){var klass=findDOMClass(tag);if(Object.isUndefined(klass))continue;mergeMethods(klass.prototype,ByTag[tag])}}Object.extend(Element,Element.Methods);Object.extend(Element,Element.Methods.Simulated);delete Element.ByTag;delete Element.Simulated;Element.extend.refresh();ELEMENT_CACHE={}}Object.extend(GLOBAL.Element,{extend:extend,addMethods:addMethods});if(extend===Prototype.K){GLOBAL.Element.extend.refresh=Prototype.emptyFunction}else{GLOBAL.Element.extend.refresh=function(){if(Prototype.BrowserFeatures.ElementExtensions)return;Object.extend(Methods,Element.Methods);Object.extend(Methods,Element.Methods.Simulated);EXTENDED={}}}function addFormMethods(){Object.extend(Form,Form.Methods);Object.extend(Form.Element,Form.Element.Methods);Object.extend(Element.Methods.ByTag,{FORM:Object.clone(Form.Methods),INPUT:Object.clone(Form.Element.Methods),SELECT:Object.clone(Form.Element.Methods),TEXTAREA:Object.clone(Form.Element.Methods),BUTTON:Object.clone(Form.Element.Methods)})}Element.addMethods(methods);function destroyCache_IE(){DIV=null;ELEMENT_CACHE=null}if(window.attachEvent)window.attachEvent("onunload",destroyCache_IE)})(this);(function(){function toDecimal(pctString){var match=pctString.match(/^(\d+)%?$/i);if(!match)return null;return Number(match[1])/100}function getRawStyle(element,style){element=$(element);var value=element.style[style];if(!value||value==="auto"){var css=document.defaultView.getComputedStyle(element,null);value=css?css[style]:null}if(style==="opacity")return value?parseFloat(value):1;return value==="auto"?null:value}function getRawStyle_IE(element,style){var value=element.style[style];if(!value&&element.currentStyle){value=element.currentStyle[style]}return value}function getContentWidth(element,context){var boxWidth=element.offsetWidth;var bl=getPixelValue(element,"borderLeftWidth",context)||0;var br=getPixelValue(element,"borderRightWidth",context)||0;var pl=getPixelValue(element,"paddingLeft",context)||0;var pr=getPixelValue(element,"paddingRight",context)||0;return boxWidth-bl-br-pl-pr}if("currentStyle"in document.documentElement){getRawStyle=getRawStyle_IE}function getPixelValue(value,property,context){var element=null;if(Object.isElement(value)){element=value;value=getRawStyle(element,property)}if(value===null||Object.isUndefined(value)){return null}if(/^(?:-)?\d+(\.\d+)?(px)?$/i.test(value)){return window.parseFloat(value)}var isPercentage=value.include("%"),isViewport=context===document.viewport;if(/\d/.test(value)&&element&&element.runtimeStyle&&!(isPercentage&&isViewport)){var style=element.style.left,rStyle=element.runtimeStyle.left;element.runtimeStyle.left=element.currentStyle.left;element.style.left=value||0;value=element.style.pixelLeft;element.style.left=style;element.runtimeStyle.left=rStyle;return value}if(element&&isPercentage){context=context||element.parentNode;var decimal=toDecimal(value),whole=null;var isHorizontal=property.include("left")||property.include("right")||property.include("width");var isVertical=property.include("top")||property.include("bottom")||property.include("height");if(context===document.viewport){if(isHorizontal){whole=document.viewport.getWidth()}else if(isVertical){whole=document.viewport.getHeight()}}else{if(isHorizontal){whole=$(context).measure("width")}else if(isVertical){whole=$(context).measure("height")}}return whole===null?0:whole*decimal}return 0}function toCSSPixels(number){if(Object.isString(number)&&number.endsWith("px"))return number;return number+"px"}function isDisplayed(element){while(element&&element.parentNode){var display=element.getStyle("display");if(display==="none"){return false}element=$(element.parentNode)}return true}var hasLayout=Prototype.K;if("currentStyle"in document.documentElement){hasLayout=function(element){if(!element.currentStyle.hasLayout){element.style.zoom=1}return element}}function cssNameFor(key){if(key.include("border"))key=key+"-width";return key.camelize()}Element.Layout=Class.create(Hash,{initialize:function($super,element,preCompute){$super();this.element=$(element);Element.Layout.PROPERTIES.each(function(property){this._set(property,null)},this);if(preCompute){this._preComputing=true;this._begin();Element.Layout.PROPERTIES.each(this._compute,this);this._end();this._preComputing=false}},_set:function(property,value){return Hash.prototype.set.call(this,property,value)},set:function(property,value){throw"Properties of Element.Layout are read-only."},get:function($super,property){var value=$super(property);return value===null?this._compute(property):value},_begin:function(){if(this._isPrepared())return;var element=this.element;if(isDisplayed(element)){this._setPrepared(true);return}var originalStyles={position:element.style.position||"",width:element.style.width||"",visibility:element.style.visibility||"",display:element.style.display||""};element.store("prototype_original_styles",originalStyles);var position=getRawStyle(element,"position"),width=element.offsetWidth;if(width===0||width===null){element.style.display="block";width=element.offsetWidth}var context=position==="fixed"?document.viewport:element.parentNode;var tempStyles={visibility:"hidden",display:"block"};if(position!=="fixed")tempStyles.position="absolute";element.setStyle(tempStyles);var positionedWidth=element.offsetWidth,newWidth;if(width&&positionedWidth===width){newWidth=getContentWidth(element,context)}else if(position==="absolute"||position==="fixed"){newWidth=getContentWidth(element,context)}else{var parent=element.parentNode,pLayout=$(parent).getLayout();newWidth=pLayout.get("width")-this.get("margin-left")-this.get("border-left")-this.get("padding-left")-this.get("padding-right")-this.get("border-right")-this.get("margin-right")}element.setStyle({width:newWidth+"px"});this._setPrepared(true)},_end:function(){var element=this.element;var originalStyles=element.retrieve("prototype_original_styles");element.store("prototype_original_styles",null);element.setStyle(originalStyles);this._setPrepared(false)},_compute:function(property){var COMPUTATIONS=Element.Layout.COMPUTATIONS;if(!(property in COMPUTATIONS)){throw"Property not found."}return this._set(property,COMPUTATIONS[property].call(this,this.element))},_isPrepared:function(){return this.element.retrieve("prototype_element_layout_prepared",false)},_setPrepared:function(bool){return this.element.store("prototype_element_layout_prepared",bool)},toObject:function(){var args=$A(arguments);var keys=args.length===0?Element.Layout.PROPERTIES:args.join(" ").split(" ");var obj={};keys.each(function(key){if(!Element.Layout.PROPERTIES.include(key))return;var value=this.get(key);if(value!=null)obj[key]=value},this);return obj},toHash:function(){var obj=this.toObject.apply(this,arguments);return new Hash(obj)},toCSS:function(){var args=$A(arguments);var keys=args.length===0?Element.Layout.PROPERTIES:args.join(" ").split(" ");var css={};keys.each(function(key){if(!Element.Layout.PROPERTIES.include(key))return;if(Element.Layout.COMPOSITE_PROPERTIES.include(key))return;var value=this.get(key);if(value!=null)css[cssNameFor(key)]=value+"px"},this);return css},inspect:function(){return"#"}});Object.extend(Element.Layout,{PROPERTIES:$w("height width top left right bottom border-left border-right border-top border-bottom padding-left padding-right padding-top padding-bottom margin-top margin-bottom margin-left margin-right padding-box-width padding-box-height border-box-width border-box-height margin-box-width margin-box-height"),COMPOSITE_PROPERTIES:$w("padding-box-width padding-box-height margin-box-width margin-box-height border-box-width border-box-height"),COMPUTATIONS:{height:function(element){if(!this._preComputing)this._begin();var bHeight=this.get("border-box-height");if(bHeight<=0){if(!this._preComputing)this._end();return 0}var bTop=this.get("border-top"),bBottom=this.get("border-bottom");var pTop=this.get("padding-top"),pBottom=this.get("padding-bottom");if(!this._preComputing)this._end();return bHeight-bTop-bBottom-pTop-pBottom},width:function(element){if(!this._preComputing)this._begin();var bWidth=this.get("border-box-width");if(bWidth<=0){if(!this._preComputing)this._end();return 0}var bLeft=this.get("border-left"),bRight=this.get("border-right");var pLeft=this.get("padding-left"),pRight=this.get("padding-right");if(!this._preComputing)this._end();return bWidth-bLeft-bRight-pLeft-pRight},"padding-box-height":function(element){var height=this.get("height"),pTop=this.get("padding-top"),pBottom=this.get("padding-bottom");return height+pTop+pBottom},"padding-box-width":function(element){var width=this.get("width"),pLeft=this.get("padding-left"),pRight=this.get("padding-right");return width+pLeft+pRight},"border-box-height":function(element){if(!this._preComputing)this._begin();var height=element.offsetHeight;if(!this._preComputing)this._end();return height},"border-box-width":function(element){if(!this._preComputing)this._begin();var width=element.offsetWidth;if(!this._preComputing)this._end();return width},"margin-box-height":function(element){var bHeight=this.get("border-box-height"),mTop=this.get("margin-top"),mBottom=this.get("margin-bottom");if(bHeight<=0)return 0;return bHeight+mTop+mBottom},"margin-box-width":function(element){var bWidth=this.get("border-box-width"),mLeft=this.get("margin-left"),mRight=this.get("margin-right");if(bWidth<=0)return 0;return bWidth+mLeft+mRight},top:function(element){var offset=element.positionedOffset();return offset.top},bottom:function(element){var offset=element.positionedOffset(),parent=element.getOffsetParent(),pHeight=parent.measure("height");var mHeight=this.get("border-box-height");return pHeight-mHeight-offset.top},left:function(element){var offset=element.positionedOffset();return offset.left},right:function(element){var offset=element.positionedOffset(),parent=element.getOffsetParent(),pWidth=parent.measure("width");var mWidth=this.get("border-box-width");return pWidth-mWidth-offset.left},"padding-top":function(element){return getPixelValue(element,"paddingTop")},"padding-bottom":function(element){return getPixelValue(element,"paddingBottom")},"padding-left":function(element){return getPixelValue(element,"paddingLeft")},"padding-right":function(element){return getPixelValue(element,"paddingRight")},"border-top":function(element){return getPixelValue(element,"borderTopWidth")},"border-bottom":function(element){return getPixelValue(element,"borderBottomWidth")},"border-left":function(element){return getPixelValue(element,"borderLeftWidth")},"border-right":function(element){return getPixelValue(element,"borderRightWidth")},"margin-top":function(element){return getPixelValue(element,"marginTop")},"margin-bottom":function(element){return getPixelValue(element,"marginBottom")},"margin-left":function(element){return getPixelValue(element,"marginLeft")},"margin-right":function(element){return getPixelValue(element,"marginRight")}}});if("getBoundingClientRect"in document.documentElement){Object.extend(Element.Layout.COMPUTATIONS,{right:function(element){var parent=hasLayout(element.getOffsetParent());var rect=element.getBoundingClientRect(),pRect=parent.getBoundingClientRect();return(pRect.right-rect.right).round()},bottom:function(element){var parent=hasLayout(element.getOffsetParent());var rect=element.getBoundingClientRect(),pRect=parent.getBoundingClientRect();return(pRect.bottom-rect.bottom).round()}})}Element.Offset=Class.create({initialize:function(left,top){this.left=left.round();this.top=top.round();this[0]=this.left;this[1]=this.top},relativeTo:function(offset){return new Element.Offset(this.left-offset.left,this.top-offset.top)},inspect:function(){return"#".interpolate(this)},toString:function(){return"[#{left}, #{top}]".interpolate(this)},toArray:function(){return[this.left,this.top]}});function getLayout(element,preCompute){return new Element.Layout(element,preCompute)}function measure(element,property){return $(element).getLayout().get(property)}function getHeight(element){return Element.getDimensions(element).height}function getWidth(element){return Element.getDimensions(element).width}function getDimensions(element){element=$(element);var display=Element.getStyle(element,"display");if(display&&display!=="none"){return{width:element.offsetWidth,height:element.offsetHeight}}var style=element.style;var originalStyles={visibility:style.visibility,position:style.position,display:style.display};var newStyles={visibility:"hidden",display:"block"};if(originalStyles.position!=="fixed")newStyles.position="absolute";Element.setStyle(element,newStyles);var dimensions={width:element.offsetWidth,height:element.offsetHeight};Element.setStyle(element,originalStyles);return dimensions}function getOffsetParent(element){element=$(element);if(isDocument(element)||isDetached(element)||isBody(element)||isHtml(element))return $(document.body);var isInline=Element.getStyle(element,"display")==="inline";if(!isInline&&element.offsetParent)return $(element.offsetParent);while((element=element.parentNode)&&element!==document.body){if(Element.getStyle(element,"position")!=="static"){return isHtml(element)?$(document.body):$(element)}}return $(document.body)}function cumulativeOffset(element){element=$(element);var valueT=0,valueL=0;if(element.parentNode){do{valueT+=element.offsetTop||0;valueL+=element.offsetLeft||0;element=element.offsetParent}while(element)}return new Element.Offset(valueL,valueT)}function positionedOffset(element){element=$(element);var layout=element.getLayout();var valueT=0,valueL=0;do{valueT+=element.offsetTop||0;valueL+=element.offsetLeft||0;element=element.offsetParent;if(element){if(isBody(element))break;var p=Element.getStyle(element,"position");if(p!=="static")break}}while(element);valueL-=layout.get("margin-top");valueT-=layout.get("margin-left");return new Element.Offset(valueL,valueT)}function cumulativeScrollOffset(element){var valueT=0,valueL=0;do{if(element===document.body){var bodyScrollNode=document.documentElement||document.body.parentNode||document.body;valueT+=!Object.isUndefined(window.pageYOffset)?window.pageYOffset:bodyScrollNode.scrollTop||0;valueL+=!Object.isUndefined(window.pageXOffset)?window.pageXOffset:bodyScrollNode.scrollLeft||0;break}else{valueT+=element.scrollTop||0;valueL+=element.scrollLeft||0;element=element.parentNode}}while(element);return new Element.Offset(valueL,valueT)}function viewportOffset(forElement){var valueT=0,valueL=0,docBody=document.body;forElement=$(forElement);var element=forElement;do{valueT+=element.offsetTop||0;valueL+=element.offsetLeft||0;if(element.offsetParent==docBody&&Element.getStyle(element,"position")=="absolute")break}while(element=element.offsetParent);element=forElement;do{if(element!=docBody){valueT-=element.scrollTop||0;valueL-=element.scrollLeft||0}}while(element=element.parentNode);return new Element.Offset(valueL,valueT)}function absolutize(element){element=$(element);if(Element.getStyle(element,"position")==="absolute"){return element}var offsetParent=getOffsetParent(element);var eOffset=element.viewportOffset(),pOffset=offsetParent.viewportOffset();var offset=eOffset.relativeTo(pOffset);var layout=element.getLayout();element.store("prototype_absolutize_original_styles",{position:element.getStyle("position"),left:element.getStyle("left"),top:element.getStyle("top"),width:element.getStyle("width"),height:element.getStyle("height")});element.setStyle({position:"absolute",top:offset.top+"px",left:offset.left+"px",width:layout.get("width")+"px",height:layout.get("height")+"px"});return element}function relativize(element){element=$(element);if(Element.getStyle(element,"position")==="relative"){return element}var originalStyles=element.retrieve("prototype_absolutize_original_styles");if(originalStyles)element.setStyle(originalStyles);return element}function scrollTo(element){element=$(element);var pos=Element.cumulativeOffset(element);window.scrollTo(pos.left,pos.top);return element}function makePositioned(element){element=$(element);var position=Element.getStyle(element,"position"),styles={};if(position==="static"||!position){styles.position="relative";if(Prototype.Browser.Opera){styles.top=0;styles.left=0}Element.setStyle(element,styles);Element.store(element,"prototype_made_positioned",true)}return element}function undoPositioned(element){element=$(element);var storage=Element.getStorage(element),madePositioned=storage.get("prototype_made_positioned");if(madePositioned){storage.unset("prototype_made_positioned");Element.setStyle(element,{position:"",top:"",bottom:"",left:"",right:""})}return element}function makeClipping(element){element=$(element);var storage=Element.getStorage(element),madeClipping=storage.get("prototype_made_clipping");if(Object.isUndefined(madeClipping)){var overflow=Element.getStyle(element,"overflow");storage.set("prototype_made_clipping",overflow);if(overflow!=="hidden")element.style.overflow="hidden"}return element}function undoClipping(element){element=$(element);var storage=Element.getStorage(element),overflow=storage.get("prototype_made_clipping");if(!Object.isUndefined(overflow)){storage.unset("prototype_made_clipping");element.style.overflow=overflow||""}return element}function clonePosition(element,source,options){options=Object.extend({setLeft:true,setTop:true,setWidth:true,setHeight:true,offsetTop:0,offsetLeft:0},options||{});source=$(source);element=$(element);var p,delta,layout,styles={};if(options.setLeft||options.setTop){p=Element.viewportOffset(source);delta=[0,0];if(Element.getStyle(element,"position")==="absolute"){var parent=Element.getOffsetParent(element);if(parent!==document.body)delta=Element.viewportOffset(parent)}}if(options.setWidth||options.setHeight){layout=Element.getLayout(source)}if(options.setLeft)styles.left=p[0]-delta[0]+options.offsetLeft+"px";if(options.setTop)styles.top=p[1]-delta[1]+options.offsetTop+"px";if(options.setWidth)styles.width=layout.get("border-box-width")+"px";if(options.setHeight)styles.height=layout.get("border-box-height")+"px";return Element.setStyle(element,styles)}if(Prototype.Browser.IE){getOffsetParent=getOffsetParent.wrap(function(proceed,element){element=$(element);if(isDocument(element)||isDetached(element)||isBody(element)||isHtml(element))return $(document.body);var position=element.getStyle("position");if(position!=="static")return proceed(element);element.setStyle({position:"relative"});var value=proceed(element);element.setStyle({position:position});return value});positionedOffset=positionedOffset.wrap(function(proceed,element){element=$(element);if(!element.parentNode)return new Element.Offset(0,0);var position=element.getStyle("position"); +Math.crossProduct = function(x, y){ + [ + x[1]*y[2]-x[2]*y[1], + x[2]*y[0]-x[0]*y[2], + x[0]*y[1]-x[1]*y[0] + ] +} -if(position!=="static")return proceed(element);var offsetParent=element.getOffsetParent();if(offsetParent&&offsetParent.getStyle("position")==="fixed")hasLayout(offsetParent);element.setStyle({position:"relative"});var value=proceed(element);element.setStyle({position:position});return value})}else if(Prototype.Browser.Webkit){cumulativeOffset=function(element){element=$(element);var valueT=0,valueL=0;do{valueT+=element.offsetTop||0;valueL+=element.offsetLeft||0;if(element.offsetParent==document.body){if(Element.getStyle(element,"position")=="absolute")break}element=element.offsetParent}while(element);return new Element.Offset(valueL,valueT)}}Element.addMethods({getLayout:getLayout,measure:measure,getWidth:getWidth,getHeight:getHeight,getDimensions:getDimensions,getOffsetParent:getOffsetParent,cumulativeOffset:cumulativeOffset,positionedOffset:positionedOffset,cumulativeScrollOffset:cumulativeScrollOffset,viewportOffset:viewportOffset,absolutize:absolutize,relativize:relativize,scrollTo:scrollTo,makePositioned:makePositioned,undoPositioned:undoPositioned,makeClipping:makeClipping,undoClipping:undoClipping,clonePosition:clonePosition});function isBody(element){return element.nodeName.toUpperCase()==="BODY"}function isHtml(element){return element.nodeName.toUpperCase()==="HTML"}function isDocument(element){return element.nodeType===Node.DOCUMENT_NODE}function isDetached(element){return element!==document.body&&!Element.descendantOf(element,document.body)}if("getBoundingClientRect"in document.documentElement){Element.addMethods({viewportOffset:function(element){element=$(element);if(isDetached(element))return new Element.Offset(0,0);var rect=element.getBoundingClientRect(),docEl=document.documentElement;return new Element.Offset(rect.left-docEl.clientLeft,rect.top-docEl.clientTop)}})}})();(function(){var IS_OLD_OPERA=Prototype.Browser.Opera&&window.parseFloat(window.opera.version())<9.5;var ROOT=null;function getRootElement(){if(ROOT)return ROOT;ROOT=IS_OLD_OPERA?document.body:document.documentElement;return ROOT}function getDimensions(){return{width:this.getWidth(),height:this.getHeight()}}function getWidth(){return getRootElement().clientWidth}function getHeight(){return getRootElement().clientHeight}function getScrollOffsets(){var x=window.pageXOffset||document.documentElement.scrollLeft||document.body.scrollLeft;var y=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop;return new Element.Offset(x,y)}document.viewport={getDimensions:getDimensions,getWidth:getWidth,getHeight:getHeight,getScrollOffsets:getScrollOffsets}})();window.$$=function(){var expression=$A(arguments).join(", ");return Prototype.Selector.select(expression,document)};Prototype.Selector=function(){function select(){throw new Error('Method "Prototype.Selector.select" must be defined.')}function match(){throw new Error('Method "Prototype.Selector.match" must be defined.')}function find(elements,expression,index){index=index||0;var match=Prototype.Selector.match,length=elements.length,matchIndex=0,i;for(i=0;i+~]|"+whitespace+")"+whitespace+"*"),rattributeQuotes=new RegExp("="+whitespace+"*([^\\]'\"]*?)"+whitespace+"*\\]","g"),rpseudo=new RegExp(pseudos),ridentifier=new RegExp("^"+identifier+"$"),matchExpr={ID:new RegExp("^#("+characterEncoding+")"),CLASS:new RegExp("^\\.("+characterEncoding+")"),TAG:new RegExp("^("+characterEncoding.replace("w","w*")+")"),ATTR:new RegExp("^"+attributes),PSEUDO:new RegExp("^"+pseudos),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+whitespace+"*(even|odd|(([+-]|)(\\d*)n|)"+whitespace+"*(?:([+-]|)"+whitespace+"*(\\d+)|))"+whitespace+"*\\)|)","i"),bool:new RegExp("^(?:"+booleans+")$","i"),needsContext:new RegExp("^"+whitespace+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+whitespace+"*((?:-\\d)?\\d*)"+whitespace+"*\\)|)(?=[^-]|$)","i")},rinputs=/^(?:input|select|textarea|button)$/i,rheader=/^h\d$/i,rnative=/^[^{]+\{\s*\[native \w/,rquickExpr=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,rsibling=/[+~]/,rescape=/'|\\/g,runescape=new RegExp("\\\\([\\da-f]{1,6}"+whitespace+"?|("+whitespace+")|.)","ig"),funescape=function(_,escaped,escapedWhitespace){var high="0x"+escaped-65536;return high!==high||escapedWhitespace?escaped:high<0?String.fromCharCode(high+65536):String.fromCharCode(high>>10|55296,high&1023|56320)};try{push.apply(arr=slice.call(preferredDoc.childNodes),preferredDoc.childNodes);arr[preferredDoc.childNodes.length].nodeType}catch(e){push={apply:arr.length?function(target,els){push_native.apply(target,slice.call(els))}:function(target,els){var j=target.length,i=0;while(target[j++]=els[i++]){}target.length=j-1}}}function Sizzle(selector,context,results,seed){var match,elem,m,nodeType,i,groups,old,nid,newContext,newSelector;if((context?context.ownerDocument||context:preferredDoc)!==document){setDocument(context)}context=context||document;results=results||[];if(!selector||typeof selector!=="string"){return results}if((nodeType=context.nodeType)!==1&&nodeType!==9){return[]}if(documentIsHTML&&!seed){if(match=rquickExpr.exec(selector)){if(m=match[1]){if(nodeType===9){elem=context.getElementById(m);if(elem&&elem.parentNode){if(elem.id===m){results.push(elem);return results}}else{return results}}else{if(context.ownerDocument&&(elem=context.ownerDocument.getElementById(m))&&contains(context,elem)&&elem.id===m){results.push(elem);return results}}}else if(match[2]){push.apply(results,context.getElementsByTagName(selector));return results}else if((m=match[3])&&support.getElementsByClassName&&context.getElementsByClassName){push.apply(results,context.getElementsByClassName(m));return results}}if(support.qsa&&(!rbuggyQSA||!rbuggyQSA.test(selector))){nid=old=expando;newContext=context;newSelector=nodeType===9&&selector;if(nodeType===1&&context.nodeName.toLowerCase()!=="object"){groups=tokenize(selector);if(old=context.getAttribute("id")){nid=old.replace(rescape,"\\$&")}else{context.setAttribute("id",nid)}nid="[id='"+nid+"'] ";i=groups.length;while(i--){groups[i]=nid+toSelector(groups[i])}newContext=rsibling.test(selector)&&testContext(context.parentNode)||context;newSelector=groups.join(",")}if(newSelector){try{push.apply(results,newContext.querySelectorAll(newSelector));return results}catch(qsaError){}finally{if(!old){context.removeAttribute("id")}}}}}return select(selector.replace(rtrim,"$1"),context,results,seed)}function createCache(){var keys=[];function cache(key,value){if(keys.push(key+" ")>Expr.cacheLength){delete cache[keys.shift()]}return cache[key+" "]=value}return cache}function markFunction(fn){fn[expando]=true;return fn}function assert(fn){var div=document.createElement("div");try{return!!fn(div)}catch(e){return false}finally{if(div.parentNode){div.parentNode.removeChild(div)}div=null}}function addHandle(attrs,handler){var arr=attrs.split("|"),i=attrs.length;while(i--){Expr.attrHandle[arr[i]]=handler}}function siblingCheck(a,b){var cur=b&&a,diff=cur&&a.nodeType===1&&b.nodeType===1&&(~b.sourceIndex||MAX_NEGATIVE)-(~a.sourceIndex||MAX_NEGATIVE);if(diff){return diff}if(cur){while(cur=cur.nextSibling){if(cur===b){return-1}}}return a?1:-1}function createInputPseudo(type){return function(elem){var name=elem.nodeName.toLowerCase();return name==="input"&&elem.type===type}}function createButtonPseudo(type){return function(elem){var name=elem.nodeName.toLowerCase();return(name==="input"||name==="button")&&elem.type===type}}function createPositionalPseudo(fn){return markFunction(function(argument){argument=+argument;return markFunction(function(seed,matches){var j,matchIndexes=fn([],seed.length,argument),i=matchIndexes.length;while(i--){if(seed[j=matchIndexes[i]]){seed[j]=!(matches[j]=seed[j])}}})})}function testContext(context){return context&&typeof context.getElementsByTagName!==strundefined&&context}support=Sizzle.support={};isXML=Sizzle.isXML=function(elem){var documentElement=elem&&(elem.ownerDocument||elem).documentElement;return documentElement?documentElement.nodeName!=="HTML":false};setDocument=Sizzle.setDocument=function(node){var hasCompare,doc=node?node.ownerDocument||node:preferredDoc,parent=doc.defaultView;if(doc===document||doc.nodeType!==9||!doc.documentElement){return document}document=doc;docElem=doc.documentElement;documentIsHTML=!isXML(doc);if(parent&&parent!==parent.top){if(parent.addEventListener){parent.addEventListener("unload",function(){setDocument()},false)}else if(parent.attachEvent){parent.attachEvent("onunload",function(){setDocument()})}}support.attributes=assert(function(div){div.className="i";return!div.getAttribute("className")});support.getElementsByTagName=assert(function(div){div.appendChild(doc.createComment(""));return!div.getElementsByTagName("*").length});support.getElementsByClassName=rnative.test(doc.getElementsByClassName)&&assert(function(div){div.innerHTML="
    ";div.firstChild.className="i";return div.getElementsByClassName("i").length===2});support.getById=assert(function(div){docElem.appendChild(div).id=expando;return!doc.getElementsByName||!doc.getElementsByName(expando).length});if(support.getById){Expr.find["ID"]=function(id,context){if(typeof context.getElementById!==strundefined&&documentIsHTML){var m=context.getElementById(id);return m&&m.parentNode?[m]:[]}};Expr.filter["ID"]=function(id){var attrId=id.replace(runescape,funescape);return function(elem){return elem.getAttribute("id")===attrId}}}else{delete Expr.find["ID"];Expr.filter["ID"]=function(id){var attrId=id.replace(runescape,funescape);return function(elem){var node=typeof elem.getAttributeNode!==strundefined&&elem.getAttributeNode("id");return node&&node.value===attrId}}}Expr.find["TAG"]=support.getElementsByTagName?function(tag,context){if(typeof context.getElementsByTagName!==strundefined){return context.getElementsByTagName(tag)}}:function(tag,context){var elem,tmp=[],i=0,results=context.getElementsByTagName(tag);if(tag==="*"){while(elem=results[i++]){if(elem.nodeType===1){tmp.push(elem)}}return tmp}return results};Expr.find["CLASS"]=support.getElementsByClassName&&function(className,context){if(typeof context.getElementsByClassName!==strundefined&&documentIsHTML){return context.getElementsByClassName(className)}};rbuggyMatches=[];rbuggyQSA=[];if(support.qsa=rnative.test(doc.querySelectorAll)){assert(function(div){div.innerHTML="";if(div.querySelectorAll("[t^='']").length){rbuggyQSA.push("[*^$]="+whitespace+"*(?:''|\"\")")}if(!div.querySelectorAll("[selected]").length){rbuggyQSA.push("\\["+whitespace+"*(?:value|"+booleans+")")}if(!div.querySelectorAll(":checked").length){rbuggyQSA.push(":checked")}});assert(function(div){var input=doc.createElement("input");input.setAttribute("type","hidden");div.appendChild(input).setAttribute("name","D");if(div.querySelectorAll("[name=d]").length){rbuggyQSA.push("name"+whitespace+"*[*^$|!~]?=")}if(!div.querySelectorAll(":enabled").length){rbuggyQSA.push(":enabled",":disabled")}div.querySelectorAll("*,:x");rbuggyQSA.push(",.*:")})}if(support.matchesSelector=rnative.test(matches=docElem.webkitMatchesSelector||docElem.mozMatchesSelector||docElem.oMatchesSelector||docElem.msMatchesSelector)){assert(function(div){support.disconnectedMatch=matches.call(div,"div");matches.call(div,"[s!='']:x");rbuggyMatches.push("!=",pseudos)})}rbuggyQSA=rbuggyQSA.length&&new RegExp(rbuggyQSA.join("|"));rbuggyMatches=rbuggyMatches.length&&new RegExp(rbuggyMatches.join("|"));hasCompare=rnative.test(docElem.compareDocumentPosition);contains=hasCompare||rnative.test(docElem.contains)?function(a,b){var adown=a.nodeType===9?a.documentElement:a,bup=b&&b.parentNode;return a===bup||!!(bup&&bup.nodeType===1&&(adown.contains?adown.contains(bup):a.compareDocumentPosition&&a.compareDocumentPosition(bup)&16))}:function(a,b){if(b){while(b=b.parentNode){if(b===a){return true}}}return false};sortOrder=hasCompare?function(a,b){if(a===b){hasDuplicate=true;return 0}var compare=!a.compareDocumentPosition-!b.compareDocumentPosition;if(compare){return compare}compare=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1;if(compare&1||!support.sortDetached&&b.compareDocumentPosition(a)===compare){if(a===doc||a.ownerDocument===preferredDoc&&contains(preferredDoc,a)){return-1}if(b===doc||b.ownerDocument===preferredDoc&&contains(preferredDoc,b)){return 1}return sortInput?indexOf.call(sortInput,a)-indexOf.call(sortInput,b):0}return compare&4?-1:1}:function(a,b){if(a===b){hasDuplicate=true;return 0}var cur,i=0,aup=a.parentNode,bup=b.parentNode,ap=[a],bp=[b];if(!aup||!bup){return a===doc?-1:b===doc?1:aup?-1:bup?1:sortInput?indexOf.call(sortInput,a)-indexOf.call(sortInput,b):0}else if(aup===bup){return siblingCheck(a,b)}cur=a;while(cur=cur.parentNode){ap.unshift(cur)}cur=b;while(cur=cur.parentNode){bp.unshift(cur)}while(ap[i]===bp[i]){i++}return i?siblingCheck(ap[i],bp[i]):ap[i]===preferredDoc?-1:bp[i]===preferredDoc?1:0};return doc};Sizzle.matches=function(expr,elements){return Sizzle(expr,null,null,elements)};Sizzle.matchesSelector=function(elem,expr){if((elem.ownerDocument||elem)!==document){setDocument(elem)}expr=expr.replace(rattributeQuotes,"='$1']");if(support.matchesSelector&&documentIsHTML&&(!rbuggyMatches||!rbuggyMatches.test(expr))&&(!rbuggyQSA||!rbuggyQSA.test(expr))){try{var ret=matches.call(elem,expr);if(ret||support.disconnectedMatch||elem.document&&elem.document.nodeType!==11){return ret}}catch(e){}}return Sizzle(expr,document,null,[elem]).length>0};Sizzle.contains=function(context,elem){if((context.ownerDocument||context)!==document){setDocument(context)}return contains(context,elem)};Sizzle.attr=function(elem,name){if((elem.ownerDocument||elem)!==document){setDocument(elem)}var fn=Expr.attrHandle[name.toLowerCase()],val=fn&&hasOwn.call(Expr.attrHandle,name.toLowerCase())?fn(elem,name,!documentIsHTML):undefined;return val!==undefined?val:support.attributes||!documentIsHTML?elem.getAttribute(name):(val=elem.getAttributeNode(name))&&val.specified?val.value:null};Sizzle.error=function(msg){throw new Error("Syntax error, unrecognized expression: "+msg)};Sizzle.uniqueSort=function(results){var elem,duplicates=[],j=0,i=0;hasDuplicate=!support.detectDuplicates;sortInput=!support.sortStable&&results.slice(0);results.sort(sortOrder);if(hasDuplicate){while(elem=results[i++]){if(elem===results[i]){j=duplicates.push(i)}}while(j--){results.splice(duplicates[j],1)}}sortInput=null;return results};getText=Sizzle.getText=function(elem){var node,ret="",i=0,nodeType=elem.nodeType;if(!nodeType){while(node=elem[i++]){ret+=getText(node)}}else if(nodeType===1||nodeType===9||nodeType===11){if(typeof elem.textContent==="string"){return elem.textContent}else{for(elem=elem.firstChild;elem;elem=elem.nextSibling){ret+=getText(elem)}}}else if(nodeType===3||nodeType===4){return elem.nodeValue}return ret};Expr=Sizzle.selectors={cacheLength:50,createPseudo:markFunction,match:matchExpr,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:true}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:true},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(match){match[1]=match[1].replace(runescape,funescape);match[3]=(match[4]||match[5]||"").replace(runescape,funescape);if(match[2]==="~="){match[3]=" "+match[3]+" "}return match.slice(0,4)},CHILD:function(match){match[1]=match[1].toLowerCase();if(match[1].slice(0,3)==="nth"){if(!match[3]){Sizzle.error(match[0])}match[4]=+(match[4]?match[5]+(match[6]||1):2*(match[3]==="even"||match[3]==="odd"));match[5]=+(match[7]+match[8]||match[3]==="odd")}else if(match[3]){Sizzle.error(match[0])}return match},PSEUDO:function(match){var excess,unquoted=!match[5]&&match[2];if(matchExpr["CHILD"].test(match[0])){return null}if(match[3]&&match[4]!==undefined){match[2]=match[4]}else if(unquoted&&rpseudo.test(unquoted)&&(excess=tokenize(unquoted,true))&&(excess=unquoted.indexOf(")",unquoted.length-excess)-unquoted.length)){match[0]=match[0].slice(0,excess);match[2]=unquoted.slice(0,excess)}return match.slice(0,3)}},filter:{TAG:function(nodeNameSelector){var nodeName=nodeNameSelector.replace(runescape,funescape).toLowerCase();return nodeNameSelector==="*"?function(){return true}:function(elem){return elem.nodeName&&elem.nodeName.toLowerCase()===nodeName}},CLASS:function(className){var pattern=classCache[className+" "];return pattern||(pattern=new RegExp("(^|"+whitespace+")"+className+"("+whitespace+"|$)"))&&classCache(className,function(elem){return pattern.test(typeof elem.className==="string"&&elem.className||typeof elem.getAttribute!==strundefined&&elem.getAttribute("class")||"")})},ATTR:function(name,operator,check){return function(elem){var result=Sizzle.attr(elem,name);if(result==null){return operator==="!="}if(!operator){return true}result+="";return operator==="="?result===check:operator==="!="?result!==check:operator==="^="?check&&result.indexOf(check)===0:operator==="*="?check&&result.indexOf(check)>-1:operator==="$="?check&&result.slice(-check.length)===check:operator==="~="?(" "+result+" ").indexOf(check)>-1:operator==="|="?result===check||result.slice(0,check.length+1)===check+"-":false}},CHILD:function(type,what,argument,first,last){var simple=type.slice(0,3)!=="nth",forward=type.slice(-4)!=="last",ofType=what==="of-type";return first===1&&last===0?function(elem){return!!elem.parentNode}:function(elem,context,xml){var cache,outerCache,node,diff,nodeIndex,start,dir=simple!==forward?"nextSibling":"previousSibling",parent=elem.parentNode,name=ofType&&elem.nodeName.toLowerCase(),useCache=!xml&&!ofType;if(parent){if(simple){while(dir){node=elem;while(node=node[dir]){if(ofType?node.nodeName.toLowerCase()===name:node.nodeType===1){return false}}start=dir=type==="only"&&!start&&"nextSibling"}return true}start=[forward?parent.firstChild:parent.lastChild];if(forward&&useCache){outerCache=parent[expando]||(parent[expando]={});cache=outerCache[type]||[];nodeIndex=cache[0]===dirruns&&cache[1];diff=cache[0]===dirruns&&cache[2];node=nodeIndex&&parent.childNodes[nodeIndex];while(node=++nodeIndex&&node&&node[dir]||(diff=nodeIndex=0)||start.pop()){if(node.nodeType===1&&++diff&&node===elem){outerCache[type]=[dirruns,nodeIndex,diff];break}}}else if(useCache&&(cache=(elem[expando]||(elem[expando]={}))[type])&&cache[0]===dirruns){diff=cache[1]}else{while(node=++nodeIndex&&node&&node[dir]||(diff=nodeIndex=0)||start.pop()){if((ofType?node.nodeName.toLowerCase()===name:node.nodeType===1)&&++diff){if(useCache){(node[expando]||(node[expando]={}))[type]=[dirruns,diff]}if(node===elem){break}}}}diff-=last;return diff===first||diff%first===0&&diff/first>=0}}},PSEUDO:function(pseudo,argument){var args,fn=Expr.pseudos[pseudo]||Expr.setFilters[pseudo.toLowerCase()]||Sizzle.error("unsupported pseudo: "+pseudo);if(fn[expando]){return fn(argument)}if(fn.length>1){args=[pseudo,pseudo,"",argument];return Expr.setFilters.hasOwnProperty(pseudo.toLowerCase())?markFunction(function(seed,matches){var idx,matched=fn(seed,argument),i=matched.length;while(i--){idx=indexOf.call(seed,matched[i]);seed[idx]=!(matches[idx]=matched[i])}}):function(elem){return fn(elem,0,args)}}return fn}},pseudos:{not:markFunction(function(selector){var input=[],results=[],matcher=compile(selector.replace(rtrim,"$1"));return matcher[expando]?markFunction(function(seed,matches,context,xml){var elem,unmatched=matcher(seed,null,xml,[]),i=seed.length;while(i--){if(elem=unmatched[i]){seed[i]=!(matches[i]=elem)}}}):function(elem,context,xml){input[0]=elem;matcher(input,null,xml,results);return!results.pop()}}),has:markFunction(function(selector){return function(elem){return Sizzle(selector,elem).length>0}}),contains:markFunction(function(text){return function(elem){return(elem.textContent||elem.innerText||getText(elem)).indexOf(text)>-1}}),lang:markFunction(function(lang){if(!ridentifier.test(lang||"")){Sizzle.error("unsupported lang: "+lang)}lang=lang.replace(runescape,funescape).toLowerCase();return function(elem){var elemLang;do{if(elemLang=documentIsHTML?elem.lang:elem.getAttribute("xml:lang")||elem.getAttribute("lang")){elemLang=elemLang.toLowerCase();return elemLang===lang||elemLang.indexOf(lang+"-")===0}}while((elem=elem.parentNode)&&elem.nodeType===1);return false}}),target:function(elem){var hash=window.location&&window.location.hash;return hash&&hash.slice(1)===elem.id},root:function(elem){return elem===docElem},focus:function(elem){return elem===document.activeElement&&(!document.hasFocus||document.hasFocus())&&!!(elem.type||elem.href||~elem.tabIndex)},enabled:function(elem){return elem.disabled===false},disabled:function(elem){return elem.disabled===true},checked:function(elem){var nodeName=elem.nodeName.toLowerCase();return nodeName==="input"&&!!elem.checked||nodeName==="option"&&!!elem.selected},selected:function(elem){if(elem.parentNode){elem.parentNode.selectedIndex}return elem.selected===true},empty:function(elem){for(elem=elem.firstChild;elem;elem=elem.nextSibling){if(elem.nodeType<6){return false}}return true},parent:function(elem){return!Expr.pseudos["empty"](elem)},header:function(elem){return rheader.test(elem.nodeName)},input:function(elem){return rinputs.test(elem.nodeName)},button:function(elem){var name=elem.nodeName.toLowerCase();return name==="input"&&elem.type==="button"||name==="button"},text:function(elem){var attr;return elem.nodeName.toLowerCase()==="input"&&elem.type==="text"&&((attr=elem.getAttribute("type"))==null||attr.toLowerCase()==="text")},first:createPositionalPseudo(function(){return[0]}),last:createPositionalPseudo(function(matchIndexes,length){return[length-1]}),eq:createPositionalPseudo(function(matchIndexes,length,argument){return[argument<0?argument+length:argument]}),even:createPositionalPseudo(function(matchIndexes,length){var i=0;for(;i=0;){matchIndexes.push(i)}return matchIndexes}),gt:createPositionalPseudo(function(matchIndexes,length,argument){var i=argument<0?argument+length:argument;for(;++i1?function(elem,context,xml){var i=matchers.length;while(i--){if(!matchers[i](elem,context,xml)){return false}}return true}:matchers[0]}function multipleContexts(selector,contexts,results){var i=0,len=contexts.length;for(;i-1){seed[temp]=!(results[temp]=elem)}}}}else{matcherOut=condense(matcherOut===results?matcherOut.splice(preexisting,matcherOut.length):matcherOut);if(postFinder){postFinder(null,results,matcherOut,xml)}else{push.apply(results,matcherOut)}}})}function matcherFromTokens(tokens){var checkContext,matcher,j,len=tokens.length,leadingRelative=Expr.relative[tokens[0].type],implicitRelative=leadingRelative||Expr.relative[" "],i=leadingRelative?1:0,matchContext=addCombinator(function(elem){return elem===checkContext},implicitRelative,true),matchAnyContext=addCombinator(function(elem){return indexOf.call(checkContext,elem)>-1},implicitRelative,true),matchers=[function(elem,context,xml){return!leadingRelative&&(xml||context!==outermostContext)||((checkContext=context).nodeType?matchContext(elem,context,xml):matchAnyContext(elem,context,xml))}];for(;i1&&elementMatcher(matchers),i>1&&toSelector(tokens.slice(0,i-1).concat({value:tokens[i-2].type===" "?"*":""})).replace(rtrim,"$1"),matcher,i0,byElement=elementMatchers.length>0,superMatcher=function(seed,context,xml,results,outermost){var elem,j,matcher,matchedCount=0,i="0",unmatched=seed&&[],setMatched=[],contextBackup=outermostContext,elems=seed||byElement&&Expr.find["TAG"]("*",outermost),dirrunsUnique=dirruns+=contextBackup==null?1:Math.random()||.1,len=elems.length;if(outermost){outermostContext=context!==document&&context}for(;i!==len&&(elem=elems[i])!=null;i++){if(byElement&&elem){j=0;while(matcher=elementMatchers[j++]){if(matcher(elem,context,xml)){results.push(elem);break}}if(outermost){dirruns=dirrunsUnique}}if(bySet){if(elem=!matcher&&elem){matchedCount--}if(seed){unmatched.push(elem)}}}matchedCount+=i;if(bySet&&i!==matchedCount){j=0;while(matcher=setMatchers[j++]){matcher(unmatched,setMatched,context,xml)}if(seed){if(matchedCount>0){while(i--){if(!(unmatched[i]||setMatched[i])){setMatched[i]=pop.call(results)}}}setMatched=condense(setMatched)}push.apply(results,setMatched);if(outermost&&!seed&&setMatched.length>0&&matchedCount+setMatchers.length>1){Sizzle.uniqueSort(results)}}if(outermost){dirruns=dirrunsUnique;outermostContext=contextBackup}return unmatched};return bySet?markFunction(superMatcher):superMatcher}compile=Sizzle.compile=function(selector,match){var i,setMatchers=[],elementMatchers=[],cached=compilerCache[selector+" "];if(!cached){if(!match){match=tokenize(selector)}i=match.length;while(i--){cached=matcherFromTokens(match[i]);if(cached[expando]){setMatchers.push(cached)}else{elementMatchers.push(cached)}}cached=compilerCache(selector,matcherFromGroupMatchers(elementMatchers,setMatchers));cached.selector=selector}return cached};select=Sizzle.select=function(selector,context,results,seed){var i,tokens,token,type,find,compiled=typeof selector==="function"&&selector,match=!seed&&tokenize(selector=compiled.selector||selector);results=results||[];if(match.length===1){tokens=match[0]=match[0].slice(0);if(tokens.length>2&&(token=tokens[0]).type==="ID"&&support.getById&&context.nodeType===9&&documentIsHTML&&Expr.relative[tokens[1].type]){context=(Expr.find["ID"](token.matches[0].replace(runescape,funescape),context)||[])[0];if(!context){return results}else if(compiled){context=context.parentNode}selector=selector.slice(tokens.shift().value.length)}i=matchExpr["needsContext"].test(selector)?0:tokens.length;while(i--){token=tokens[i];if(Expr.relative[type=token.type]){break}if(find=Expr.find[type]){if(seed=find(token.matches[0].replace(runescape,funescape),rsibling.test(tokens[0].type)&&testContext(context.parentNode)||context)){ -tokens.splice(i,1);selector=seed.length&&toSelector(tokens);if(!selector){push.apply(results,seed);return results}break}}}}(compiled||compile(selector,match))(seed,context,!documentIsHTML,results,rsibling.test(selector)&&testContext(context.parentNode)||context);return results};support.sortStable=expando.split("").sort(sortOrder).join("")===expando;support.detectDuplicates=!!hasDuplicate;setDocument();support.sortDetached=assert(function(div1){return div1.compareDocumentPosition(document.createElement("div"))&1});if(!assert(function(div){div.innerHTML="";return div.firstChild.getAttribute("href")==="#"})){addHandle("type|href|height|width",function(elem,name,isXML){if(!isXML){return elem.getAttribute(name,name.toLowerCase()==="type"?1:2)}})}if(!support.attributes||!assert(function(div){div.innerHTML="";div.firstChild.setAttribute("value","");return div.firstChild.getAttribute("value")===""})){addHandle("value",function(elem,name,isXML){if(!isXML&&elem.nodeName.toLowerCase()==="input"){return elem.defaultValue}})}if(!assert(function(div){return div.getAttribute("disabled")==null})){addHandle(booleans,function(elem,name,isXML){var val;if(!isXML){return elem[name]===true?name.toLowerCase():(val=elem.getAttributeNode(name))&&val.specified?val.value:null}})}if(typeof define==="function"&&define.amd){define(function(){return Sizzle})}else if(typeof module!=="undefined"&&module.exports){module.exports=Sizzle}else{window.Sizzle=Sizzle}})(window);(function(engine){var extendElements=Prototype.Selector.extendElements;function select(selector,scope){return extendElements(engine(selector,scope||document))}function match(element,selector){return engine.matches(selector,[element]).length==1}Prototype.Selector.engine=engine;Prototype.Selector.select=select;Prototype.Selector.match=match})(Sizzle);window.Sizzle=Prototype._original_property;delete Prototype._original_property;var Form={reset:function(form){form=$(form);form.reset();return form},serializeElements:function(elements,options){if(typeof options!="object")options={hash:!!options};else if(Object.isUndefined(options.hash))options.hash=true;var key,value,submitted=false,submit=options.submit,accumulator,initial;if(options.hash){initial={};accumulator=function(result,key,value){if(key in result){if(!Object.isArray(result[key]))result[key]=[result[key]];result[key]=result[key].concat(value)}else result[key]=value;return result}}else{initial="";accumulator=function(result,key,values){if(!Object.isArray(values)){values=[values]}if(!values.length){return result}var encodedKey=encodeURIComponent(key).gsub(/%20/,"+");return result+(result?"&":"")+values.map(function(value){value=value.gsub(/(\r)?\n/,"\r\n");value=encodeURIComponent(value);value=value.gsub(/%20/,"+");return encodedKey+"="+value}).join("&")}}return elements.inject(initial,function(result,element){if(!element.disabled&&element.name){key=element.name;value=$(element).getValue();if(value!=null&&element.type!="file"&&(element.type!="submit"||!submitted&&submit!==false&&(!submit||key==submit)&&(submitted=true))){result=accumulator(result,key,value)}}return result})}};Form.Methods={serialize:function(form,options){return Form.serializeElements(Form.getElements(form),options)},getElements:function(form){var elements=$(form).getElementsByTagName("*");var element,results=[],serializers=Form.Element.Serializers;for(var i=0;element=elements[i];i++){if(serializers[element.tagName.toLowerCase()])results.push(Element.extend(element))}return results},getInputs:function(form,typeName,name){form=$(form);var inputs=form.getElementsByTagName("input");if(!typeName&&!name)return $A(inputs).map(Element.extend);for(var i=0,matchingInputs=[],length=inputs.length;i=0}).sortBy(function(element){return element.tabIndex}).first();return firstByIndex?firstByIndex:elements.find(function(element){return/^(?:input|select|textarea)$/i.test(element.tagName)})},focusFirstElement:function(form){form=$(form);var element=form.findFirstElement();if(element)element.activate();return form},request:function(form,options){form=$(form),options=Object.clone(options||{});var params=options.parameters,action=form.readAttribute("action")||"";if(action.blank())action=window.location.href;options.parameters=form.serialize(true);if(params){if(Object.isString(params))params=params.toQueryParams();Object.extend(options.parameters,params)}if(form.hasAttribute("method")&&!options.method)options.method=form.method;return new Ajax.Request(action,options)}};Form.Element={focus:function(element){$(element).focus();return element},select:function(element){$(element).select();return element}};Form.Element.Methods={serialize:function(element){element=$(element);if(!element.disabled&&element.name){var value=element.getValue();if(value!=undefined){var pair={};pair[element.name]=value;return Object.toQueryString(pair)}}return""},getValue:function(element){element=$(element);var method=element.tagName.toLowerCase();return Form.Element.Serializers[method](element)},setValue:function(element,value){element=$(element);var method=element.tagName.toLowerCase();Form.Element.Serializers[method](element,value);return element},clear:function(element){$(element).value="";return element},present:function(element){return $(element).value!=""},activate:function(element){element=$(element);try{element.focus();if(element.select&&(element.tagName.toLowerCase()!="input"||!/^(?:button|reset|submit)$/i.test(element.type)))element.select()}catch(e){}return element},disable:function(element){element=$(element);element.disabled=true;return element},enable:function(element){element=$(element);element.disabled=false;return element}};var Field=Form.Element;var $F=Form.Element.Methods.getValue;Form.Element.Serializers=function(){function input(element,value){switch(element.type.toLowerCase()){case"checkbox":case"radio":return inputSelector(element,value);default:return valueSelector(element,value)}}function inputSelector(element,value){if(Object.isUndefined(value))return element.checked?element.value:null;else element.checked=!!value}function valueSelector(element,value){if(Object.isUndefined(value))return element.value;else element.value=value}function select(element,value){if(Object.isUndefined(value))return(element.type==="select-one"?selectOne:selectMany)(element);var opt,currentValue,single=!Object.isArray(value);for(var i=0,length=element.length;i=0?optionValue(element.options[index]):null}function selectMany(element){var values,length=element.length;if(!length)return null;for(var i=0,values=[];i=this.offset[1]&&y=this.offset[0]&&x=this.offset[1]&&this.ycomp=this.offset[0]&&this.xcomp0})._each(iterator,context)},set:function(className){this.element.className=className},add:function(classNameToAdd){if(this.include(classNameToAdd))return;this.set($A(this).concat(classNameToAdd).join(" "))},remove:function(classNameToRemove){if(!this.include(classNameToRemove))return;this.set($A(this).without(classNameToRemove).join(" "))},toString:function(){return $A(this).join(" ")}};Object.extend(Element.ClassNames.prototype,Enumerable);(function(){window.Selector=Class.create({initialize:function(expression){this.expression=expression.strip()},findElements:function(rootElement){return Prototype.Selector.select(this.expression,rootElement)},match:function(element){return Prototype.Selector.match(element,this.expression)},toString:function(){return this.expression},inspect:function(){return"#"}});Object.extend(Selector,{matchElements:function(elements,expression){var match=Prototype.Selector.match,results=[];for(var i=0,length=elements.length;i=y;y++)if(l=Math.sin(h),m=Math.tan(h),r=m*Math.sqrt(1-t*l*l),c=Math.sin(2*h),u=i*h-s*c+e*Math.sin(4*h)-o*Math.sin(6*h),d=i-2*s*Math.cos(2*h)+4*e*Math.cos(4*h)-6*o*Math.cos(6*h),p=2*u+r*(u*u+a)-2*n*(r*u+1),_=t*c*(u*u+a-2*n*u)/(2*r),f=2*(n-u)*(r*d-2/c)-2*d,P=p/(_+f),h+=P,1e-10>=Math.abs(P))return h;return Proj4js.reportError("phi4z: No convergence"),null}function e4fn(t){var i,s;return i=1+t,s=1-t,Math.sqrt(Math.pow(i,i)*Math.pow(s,s))}var Proj4js={defaultDatum:"WGS84",transform:function(t,i,s){if(!t.readyToUse)return this.reportError("Proj4js initialization for:"+t.srsCode+" not yet complete"),s;if(!i.readyToUse)return this.reportError("Proj4js initialization for:"+i.srsCode+" not yet complete"),s;if(t.datum&&i.datum&&((t.datum.datum_type==Proj4js.common.PJD_3PARAM||t.datum.datum_type==Proj4js.common.PJD_7PARAM)&&"WGS84"!=i.datumCode||(i.datum.datum_type==Proj4js.common.PJD_3PARAM||i.datum.datum_type==Proj4js.common.PJD_7PARAM)&&"WGS84"!=t.datumCode)){var e=Proj4js.WGS84;this.transform(t,e,s),t=e}return"enu"!=t.axis&&this.adjust_axis(t,!1,s),"longlat"==t.projName?(s.x*=Proj4js.common.D2R,s.y*=Proj4js.common.D2R):(t.to_meter&&(s.x*=t.to_meter,s.y*=t.to_meter),t.inverse(s)),t.from_greenwich&&(s.x+=t.from_greenwich),s=this.datum_transform(t.datum,i.datum,s),i.from_greenwich&&(s.x-=i.from_greenwich),"longlat"==i.projName?(s.x*=Proj4js.common.R2D,s.y*=Proj4js.common.R2D):(i.forward(s),i.to_meter&&(s.x/=i.to_meter,s.y/=i.to_meter)),"enu"!=i.axis&&this.adjust_axis(i,!0,s),s},datum_transform:function(t,i,s){return t.compare_datums(i)?s:t.datum_type==Proj4js.common.PJD_NODATUM||i.datum_type==Proj4js.common.PJD_NODATUM?s:((t.es!=i.es||t.a!=i.a||t.datum_type==Proj4js.common.PJD_3PARAM||t.datum_type==Proj4js.common.PJD_7PARAM||i.datum_type==Proj4js.common.PJD_3PARAM||i.datum_type==Proj4js.common.PJD_7PARAM)&&(t.geodetic_to_geocentric(s),(t.datum_type==Proj4js.common.PJD_3PARAM||t.datum_type==Proj4js.common.PJD_7PARAM)&&t.geocentric_to_wgs84(s),(i.datum_type==Proj4js.common.PJD_3PARAM||i.datum_type==Proj4js.common.PJD_7PARAM)&&i.geocentric_from_wgs84(s),i.geocentric_to_geodetic(s)),s)},adjust_axis:function(t,i,s){for(var e,o,n=s.x,a=s.y,r=s.z||0,h=0;3>h;h++)if(!i||2!=h||void 0!==s.z)switch(0==h?(e=n,o="x"):1==h?(e=a,o="y"):(e=r,o="z"),t.axis[h]){case"e":s[o]=e;break;case"w":s[o]=-e;break;case"n":s[o]=e;break;case"s":s[o]=-e;break;case"u":void 0!==s[o]&&(s.z=e);break;case"d":void 0!==s[o]&&(s.z=-e);break;default:return alert("ERROR: unknow axis ("+t.axis[h]+") - check definition of "+t.projName),null}return s},reportError:function(){},extend:function(t,i){if(t=t||{},i)for(var s in i){var e=i[s];void 0!==e&&(t[s]=e)}return t},Class:function(){for(var t,i=function(){this.initialize.apply(this,arguments)},s={},e=0;arguments.length>e;++e)t="function"==typeof arguments[e]?arguments[e].prototype:arguments[e],Proj4js.extend(s,t);return i.prototype=s,i},bind:function(t,i){var s=Array.prototype.slice.apply(arguments,[2]);return function(){var e=s.concat(Array.prototype.slice.apply(arguments,[0])); +Math.sign = Math.sign || function(x) { + x = +x; // convert to a number + if (x === 0 || isNaN(x)) { + return x; + } + return x > 0 ? 1 : -1; +} -return t.apply(i,e)}},scriptName:"proj4js-combined.js",defsLookupService:"http://spatialreference.org/ref",libPath:null,getScriptLocation:function(){if(this.libPath)return this.libPath;for(var t=this.scriptName,i=t.length,s=document.getElementsByTagName("script"),e=0;s.length>e;e++){var o=s[e].getAttribute("src");if(o){var n=o.lastIndexOf(t);if(n>-1&&n+i==o.length){this.libPath=o.slice(0,-i);break}}}return this.libPath||""},loadScript:function(t,i,s,e){var o=document.createElement("script");o.defer=!1,o.type="text/javascript",o.id=t,o.src=t,o.onload=i,o.onerror=s,o.loadCheck=e,/MSIE/.test(navigator.userAgent)&&(o.onreadystatechange=this.checkReadyState),document.getElementsByTagName("head")[0].appendChild(o)},checkReadyState:function(){"loaded"==this.readyState&&(this.loadCheck()?this.onload():this.onerror())}};Proj4js.Proj=Proj4js.Class({readyToUse:!1,title:null,projName:null,units:null,datum:null,x0:0,y0:0,localCS:!1,queue:null,initialize:function(t,i){if(this.srsCodeInput=t,this.queue=[],i&&this.queue.push(i),t.indexOf("GEOGCS")>=0||t.indexOf("GEOCCS")>=0||t.indexOf("PROJCS")>=0||t.indexOf("LOCAL_CS")>=0)return this.parseWKT(t),this.deriveConstants(),this.loadProjCode(this.projName),void 0;if(0==t.indexOf("urn:")){var s=t.split(":");"ogc"!=s[1]&&"x-ogc"!=s[1]||"def"!=s[2]||"crs"!=s[3]||(t=s[4]+":"+s[s.length-1])}else if(0==t.indexOf("http://")){var e=t.split("#");e[0].match(/epsg.org/)?t="EPSG:"+e[1]:e[0].match(/RIG.xml/)&&(t="IGNF:"+e[1])}this.srsCode=t.toUpperCase(),0==this.srsCode.indexOf("EPSG")?(this.srsCode=this.srsCode,this.srsAuth="epsg",this.srsProjNumber=this.srsCode.substring(5)):0==this.srsCode.indexOf("IGNF")?(this.srsCode=this.srsCode,this.srsAuth="IGNF",this.srsProjNumber=this.srsCode.substring(5)):0==this.srsCode.indexOf("CRS")?(this.srsCode=this.srsCode,this.srsAuth="CRS",this.srsProjNumber=this.srsCode.substring(4)):(this.srsAuth="",this.srsProjNumber=this.srsCode),this.loadProjDefinition()},loadProjDefinition:function(){if(Proj4js.defs[this.srsCode])return this.defsLoaded(),void 0;var t=Proj4js.getScriptLocation()+"defs/"+this.srsAuth.toUpperCase()+this.srsProjNumber+".js";Proj4js.loadScript(t,Proj4js.bind(this.defsLoaded,this),Proj4js.bind(this.loadFromService,this),Proj4js.bind(this.checkDefsLoaded,this))},loadFromService:function(){var t=Proj4js.defsLookupService+"/"+this.srsAuth+"/"+this.srsProjNumber+"/proj4js/";Proj4js.loadScript(t,Proj4js.bind(this.defsLoaded,this),Proj4js.bind(this.defsFailed,this),Proj4js.bind(this.checkDefsLoaded,this))},defsLoaded:function(){this.parseDefs(),this.loadProjCode(this.projName)},checkDefsLoaded:function(){return Proj4js.defs[this.srsCode]?!0:!1},defsFailed:function(){Proj4js.reportError("failed to load projection definition for: "+this.srsCode),Proj4js.defs[this.srsCode]=Proj4js.defs.WGS84,this.defsLoaded()},loadProjCode:function(t){if(Proj4js.Proj[t])return this.initTransforms(),void 0;var i=Proj4js.getScriptLocation()+"projCode/"+t+".js";Proj4js.loadScript(i,Proj4js.bind(this.loadProjCodeSuccess,this,t),Proj4js.bind(this.loadProjCodeFailure,this,t),Proj4js.bind(this.checkCodeLoaded,this,t))},loadProjCodeSuccess:function(t){Proj4js.Proj[t].dependsOn?this.loadProjCode(Proj4js.Proj[t].dependsOn):this.initTransforms()},loadProjCodeFailure:function(t){Proj4js.reportError("failed to find projection file for: "+t)},checkCodeLoaded:function(t){return Proj4js.Proj[t]?!0:!1},initTransforms:function(){if(Proj4js.extend(this,Proj4js.Proj[this.projName]),this.init(),this.readyToUse=!0,this.queue)for(var t;t=this.queue.shift();)t.call(this,this)},wktRE:/^(\w+)\[(.*)\]$/,parseWKT:function(t){var i=t.match(this.wktRE);if(i){var s,e=i[1],o=i[2],n=o.split(",");s="TOWGS84"==e.toUpperCase()?e:n.shift(),s=s.replace(/^\"/,""),s=s.replace(/\"$/,"");for(var a=[],r=0,h="",l=0;n.length>l;++l){for(var c=n[l],m=0;c.length>m;++m)"["==c.charAt(m)&&++r,"]"==c.charAt(m)&&--r;h+=c,0===r?(a.push(h),h=""):h+=","}switch(e){case"LOCAL_CS":this.projName="identity",this.localCS=!0,this.srsCode=s;break;case"GEOGCS":this.projName="longlat",this.geocsCode=s,this.srsCode||(this.srsCode=s);break;case"PROJCS":this.srsCode=s;break;case"GEOCCS":break;case"PROJECTION":this.projName=Proj4js.wktProjections[s];break;case"DATUM":this.datumName=s;break;case"LOCAL_DATUM":this.datumCode="none";break;case"SPHEROID":this.ellps=s,this.a=parseFloat(a.shift()),this.rf=parseFloat(a.shift());break;case"PRIMEM":this.from_greenwich=parseFloat(a.shift());break;case"UNIT":this.units=s,this.unitsPerMeter=parseFloat(a.shift());break;case"PARAMETER":var u=s.toLowerCase(),d=parseFloat(a.shift());switch(u){case"false_easting":this.x0=d;break;case"false_northing":this.y0=d;break;case"scale_factor":this.k0=d;break;case"central_meridian":this.long0=d*Proj4js.common.D2R;break;case"latitude_of_origin":this.lat0=d*Proj4js.common.D2R;break;case"more_here":break;default:}break;case"TOWGS84":this.datum_params=a;break;case"AXIS":var u=s.toLowerCase(),d=a.shift();switch(d){case"EAST":d="e";break;case"WEST":d="w";break;case"NORTH":d="n";break;case"SOUTH":d="s";break;case"UP":d="u";break;case"DOWN":d="d";break;case"OTHER":default:d=" "}switch(this.axis||(this.axis="enu"),u){case"x":this.axis=d+this.axis.substr(1,2);break;case"y":this.axis=this.axis.substr(0,1)+d+this.axis.substr(2,1);break;case"z":this.axis=this.axis.substr(0,2)+d;break;default:}case"MORE_HERE":break;default:}for(var l=0;a.length>l;++l)this.parseWKT(a[l])}},parseDefs:function(){this.defData=Proj4js.defs[this.srsCode];var t,i;if(this.defData){for(var s=this.defData.split("+"),e=0;s.length>e;e++){var o=s[e].split("=");switch(t=o[0].toLowerCase(),i=o[1],t.replace(/\s/gi,"")){case"":break;case"title":this.title=i;break;case"proj":this.projName=i.replace(/\s/gi,"");break;case"units":this.units=i.replace(/\s/gi,"");break;case"datum":this.datumCode=i.replace(/\s/gi,"");break;case"nadgrids":this.nagrids=i.replace(/\s/gi,"");break;case"ellps":this.ellps=i.replace(/\s/gi,"");break;case"a":this.a=parseFloat(i);break;case"b":this.b=parseFloat(i);break;case"rf":this.rf=parseFloat(i);break;case"lat_0":this.lat0=i*Proj4js.common.D2R;break;case"lat_1":this.lat1=i*Proj4js.common.D2R;break;case"lat_2":this.lat2=i*Proj4js.common.D2R;break;case"lat_ts":this.lat_ts=i*Proj4js.common.D2R;break;case"lon_0":this.long0=i*Proj4js.common.D2R;break;case"alpha":this.alpha=parseFloat(i)*Proj4js.common.D2R;break;case"lonc":this.longc=i*Proj4js.common.D2R;break;case"x_0":this.x0=parseFloat(i);break;case"y_0":this.y0=parseFloat(i);break;case"k_0":this.k0=parseFloat(i);break;case"k":this.k0=parseFloat(i);break;case"r_a":this.R_A=!0;break;case"zone":this.zone=parseInt(i,10);break;case"south":this.utmSouth=!0;break;case"towgs84":this.datum_params=i.split(",");break;case"to_meter":this.to_meter=parseFloat(i);break;case"from_greenwich":this.from_greenwich=i*Proj4js.common.D2R;break;case"pm":i=i.replace(/\s/gi,""),this.from_greenwich=Proj4js.PrimeMeridian[i]?Proj4js.PrimeMeridian[i]:parseFloat(i),this.from_greenwich*=Proj4js.common.D2R;break;case"axis":i=i.replace(/\s/gi,"");var n="ewnsud";3==i.length&&-1!=n.indexOf(i.substr(0,1))&&-1!=n.indexOf(i.substr(1,1))&&-1!=n.indexOf(i.substr(2,1))&&(this.axis=i);break;case"no_defs":break;default:}}this.deriveConstants()}},deriveConstants:function(){if("@null"==this.nagrids&&(this.datumCode="none"),this.datumCode&&"none"!=this.datumCode){var t=Proj4js.Datum[this.datumCode];t&&(this.datum_params=t.towgs84?t.towgs84.split(","):null,this.ellps=t.ellipse,this.datumName=t.datumName?t.datumName:this.datumCode)}if(!this.a){var i=Proj4js.Ellipsoid[this.ellps]?Proj4js.Ellipsoid[this.ellps]:Proj4js.Ellipsoid.WGS84;Proj4js.extend(this,i)}this.rf&&!this.b&&(this.b=(1-1/this.rf)*this.a),(0===this.rf||Math.abs(this.a-this.b)=a;a++)if(s=t*Math.sin(n),e=this.HALF_PI-2*Math.atan(i*Math.pow((1-s)/(1+s),o))-n,n+=e,1e-10>=Math.abs(e))return n;return alert("phi2z has NoConvergence"),-9999},qsfnz:function(t,i){var s;return t>1e-7?(s=t*i,(1-t*t)*(i/(1-s*s)-.5/t*Math.log((1-s)/(1+s)))):2*i},asinz:function(t){return Math.abs(t)>1&&(t=t>1?1:-1),Math.asin(t)},e0fn:function(t){return 1-.25*t*(1+t/16*(3+1.25*t))},e1fn:function(t){return.375*t*(1+.25*t*(1+.46875*t))},e2fn:function(t){return.05859375*t*t*(1+.75*t)},e3fn:function(t){return t*t*t*(35/3072)},mlfn:function(t,i,s,e,o){return t*o-i*Math.sin(2*o)+s*Math.sin(4*o)-e*Math.sin(6*o)},srat:function(t,i){return Math.pow((1-t)/(1+t),i)},sign:function(t){return 0>t?-1:1},adjust_lon:function(t){return t=Math.abs(t)this.HALF_PI)return+Number.NaN;if(i==this.HALF_PI)return Number.POSITIVE_INFINITY;if(i==-1*this.HALF_PI)return-1*Number.POSITIVE_INFINITY;var e=t*s;return Math.log(Math.tan((this.HALF_PI+i)/2))+t*Math.log((1-e)/(1+e))/2},fL:function(t,i){return 2*Math.atan(t*Math.exp(i))-this.HALF_PI},invlatiso:function(t,i){var s=this.fL(1,i),e=0,o=0;do e=s,o=t*Math.sin(e),s=this.fL(Math.exp(t*Math.log((1+o)/(1-o))/2),i);while(Math.abs(s-e)>1e-12);return s},sinh:function(t){var i=Math.exp(t);return i=(i-1/i)/2},cosh:function(t){var i=Math.exp(t);return i=(i+1/i)/2},tanh:function(t){var i=Math.exp(t);return i=(i-1/i)/(i+1/i)},asinh:function(t){var i=t>=0?1:-1;return i*Math.log(Math.abs(t)+Math.sqrt(t*t+1))},acosh:function(t){return 2*Math.log(Math.sqrt((t+1)/2)+Math.sqrt((t-1)/2))},atanh:function(t){return Math.log((t-1)/(t+1))/2},gN:function(t,i,s){var e=i*s;return t/Math.sqrt(1-e*e)},pj_enfn:function(t){var i=[];i[0]=this.C00-t*(this.C02+t*(this.C04+t*(this.C06+t*this.C08))),i[1]=t*(this.C22-t*(this.C04+t*(this.C06+t*this.C08)));var s=t*t;return i[2]=s*(this.C44-t*(this.C46+t*this.C48)),s*=t,i[3]=s*(this.C66-t*this.C68),i[4]=s*t*this.C88,i},pj_mlfn:function(t,i,s,e){return s*=i,i*=i,e[0]*t-s*(e[1]+i*(e[2]+i*(e[3]+i*e[4])))},pj_inv_mlfn:function(t,i,s){for(var e=1/(1-i),o=t,n=Proj4js.common.MAX_ITER;n;--n){var a=Math.sin(o),r=1-i*a*a;if(r=(this.pj_mlfn(o,a,Math.cos(o),s)-t)*r*Math.sqrt(r)*e,o-=r,Math.abs(r)i;i++)t.datum_params[i]=parseFloat(t.datum_params[i]);(0!=t.datum_params[0]||0!=t.datum_params[1]||0!=t.datum_params[2])&&(this.datum_type=Proj4js.common.PJD_3PARAM),t.datum_params.length>3&&(0!=t.datum_params[3]||0!=t.datum_params[4]||0!=t.datum_params[5]||0!=t.datum_params[6])&&(this.datum_type=Proj4js.common.PJD_7PARAM,t.datum_params[3]*=Proj4js.common.SEC_TO_RAD,t.datum_params[4]*=Proj4js.common.SEC_TO_RAD,t.datum_params[5]*=Proj4js.common.SEC_TO_RAD,t.datum_params[6]=t.datum_params[6]/1e6+1)}t&&(this.a=t.a,this.b=t.b,this.es=t.es,this.ep2=t.ep2,this.datum_params=t.datum_params)},compare_datums:function(t){return this.datum_type!=t.datum_type?!1:this.a!=t.a||Math.abs(this.es-t.es)>5e-11?!1:this.datum_type==Proj4js.common.PJD_3PARAM?this.datum_params[0]==t.datum_params[0]&&this.datum_params[1]==t.datum_params[1]&&this.datum_params[2]==t.datum_params[2]:this.datum_type==Proj4js.common.PJD_7PARAM?this.datum_params[0]==t.datum_params[0]&&this.datum_params[1]==t.datum_params[1]&&this.datum_params[2]==t.datum_params[2]&&this.datum_params[3]==t.datum_params[3]&&this.datum_params[4]==t.datum_params[4]&&this.datum_params[5]==t.datum_params[5]&&this.datum_params[6]==t.datum_params[6]:this.datum_type==Proj4js.common.PJD_GRIDSHIFT||t.datum_type==Proj4js.common.PJD_GRIDSHIFT?(alert("ERROR: Grid shift transformations are not implemented."),!1):!0},geodetic_to_geocentric:function(t){var i,s,e,o,n,a,r,h=t.x,l=t.y,c=t.z?t.z:0,m=0;if(-Proj4js.common.HALF_PI>l&&l>-1.001*Proj4js.common.HALF_PI)l=-Proj4js.common.HALF_PI;else if(l>Proj4js.common.HALF_PI&&1.001*Proj4js.common.HALF_PI>l)l=Proj4js.common.HALF_PI;else if(-Proj4js.common.HALF_PI>l||l>Proj4js.common.HALF_PI)return Proj4js.reportError("geocent:lat out of range:"+l),null;return h>Proj4js.common.PI&&(h-=2*Proj4js.common.PI),n=Math.sin(l),r=Math.cos(l),a=n*n,o=this.a/Math.sqrt(1-this.es*a),i=(o+c)*r*Math.cos(h),s=(o+c)*r*Math.sin(h),e=(o*(1-this.es)+c)*n,t.x=i,t.y=s,t.z=e,m},geocentric_to_geodetic:function(t){var i,s,e,o,n,a,r,h,l,c,m,u,d,p,_,f,P,y=1e-12,g=y*y,L=30,v=t.x,j=t.y,M=t.z?t.z:0;if(d=!1,i=Math.sqrt(v*v+j*j),s=Math.sqrt(v*v+j*j+M*M),y>i/this.a){if(d=!0,_=0,y>s/this.a)return f=Proj4js.common.HALF_PI,P=-this.b,void 0}else _=Math.atan2(j,v);e=M/s,o=i/s,n=1/Math.sqrt(1-this.es*(2-this.es)*o*o),h=o*(1-this.es)*n,l=e*n,p=0;do p++,r=this.a/Math.sqrt(1-this.es*l*l),P=i*h+M*l-r*(1-this.es*l*l),a=this.es*r/(r+P),n=1/Math.sqrt(1-a*(2-a)*o*o),c=o*(1-a)*n,m=e*n,u=m*h-c*l,h=c,l=m;while(u*u>g&&L>p);return f=Math.atan(m/Math.abs(c)),t.x=_,t.y=f,t.z=P,t},geocentric_to_geodetic_noniter:function(t){var i,s,e,o,n,a,r,h,l,c,m,u,d,p,_,f,P,y=t.x,g=t.y,L=t.z?t.z:0;if(y=parseFloat(y),g=parseFloat(g),L=parseFloat(L),P=!1,0!=y)i=Math.atan2(g,y);else if(g>0)i=Proj4js.common.HALF_PI;else if(0>g)i=-Proj4js.common.HALF_PI;else if(P=!0,i=0,L>0)s=Proj4js.common.HALF_PI;else{if(!(0>L))return s=Proj4js.common.HALF_PI,e=-this.b,void 0;s=-Proj4js.common.HALF_PI}return n=y*y+g*g,o=Math.sqrt(n),a=L*Proj4js.common.AD_C,h=Math.sqrt(a*a+n),c=a/h,u=o/h,m=c*c*c,r=L+this.b*this.ep2*m,f=o-this.a*this.es*u*u*u,l=Math.sqrt(r*r+f*f),d=r/l,p=f/l,_=this.a/Math.sqrt(1-this.es*d*d),e=p>=Proj4js.common.COS_67P5?o/p-_:-Proj4js.common.COS_67P5>=p?o/-p-_:L/d+_*(this.es-1),0==P&&(s=Math.atan(d/p)),t.x=i,t.y=s,t.z=e,t},geocentric_to_wgs84:function(t){if(this.datum_type==Proj4js.common.PJD_3PARAM)t.x+=this.datum_params[0],t.y+=this.datum_params[1],t.z+=this.datum_params[2];else if(this.datum_type==Proj4js.common.PJD_7PARAM){var i=this.datum_params[0],s=this.datum_params[1],e=this.datum_params[2],o=this.datum_params[3],n=this.datum_params[4],a=this.datum_params[5],r=this.datum_params[6],h=r*(t.x-a*t.y+n*t.z)+i,l=r*(a*t.x+t.y-o*t.z)+s,c=r*(-n*t.x+o*t.y+t.z)+e;t.x=h,t.y=l,t.z=c}},geocentric_from_wgs84:function(t){if(this.datum_type==Proj4js.common.PJD_3PARAM)t.x-=this.datum_params[0],t.y-=this.datum_params[1],t.z-=this.datum_params[2];else if(this.datum_type==Proj4js.common.PJD_7PARAM){var i=this.datum_params[0],s=this.datum_params[1],e=this.datum_params[2],o=this.datum_params[3],n=this.datum_params[4],a=this.datum_params[5],r=this.datum_params[6],h=(t.x-i)/r,l=(t.y-s)/r,c=(t.z-e)/r;t.x=h+a*l-n*c,t.y=-a*h+l+o*c,t.z=n*h-o*l+c}}}),Proj4js.Point=Proj4js.Class({initialize:function(t,i,s){if("object"==typeof t)this.x=t[0],this.y=t[1],this.z=t[2]||0;else if("string"==typeof t&&i===void 0){var e=t.split(",");this.x=parseFloat(e[0]),this.y=parseFloat(e[1]),this.z=parseFloat(e[2])||0}else this.x=t,this.y=i,this.z=s||0},clone:function(){return new Proj4js.Point(this.x,this.y,this.z)},toString:function(){return"x="+this.x+",y="+this.y},toShortString:function(){return this.x+", "+this.y}}),Proj4js.PrimeMeridian={greenwich:0,lisbon:-9.131906111111,paris:2.337229166667,bogota:-74.080916666667,madrid:-3.687938888889,rome:12.452333333333,bern:7.439583333333,jakarta:106.807719444444,ferro:-17.666666666667,brussels:4.367975,stockholm:18.058277777778,athens:23.7163375,oslo:10.722916666667},Proj4js.Ellipsoid={MERIT:{a:6378137,rf:298.257,ellipseName:"MERIT 1983"},SGS85:{a:6378136,rf:298.257,ellipseName:"Soviet Geodetic System 85"},GRS80:{a:6378137,rf:298.257222101,ellipseName:"GRS 1980(IUGG, 1980)"},IAU76:{a:6378140,rf:298.257,ellipseName:"IAU 1976"},airy:{a:6377563.396,b:6356256.91,ellipseName:"Airy 1830"},"APL4.":{a:6378137,rf:298.25,ellipseName:"Appl. Physics. 1965"},NWL9D:{a:6378145,rf:298.25,ellipseName:"Naval Weapons Lab., 1965"},mod_airy:{a:6377340.189,b:6356034.446,ellipseName:"Modified Airy"},andrae:{a:6377104.43,rf:300,ellipseName:"Andrae 1876 (Den., Iclnd.)"},aust_SA:{a:6378160,rf:298.25,ellipseName:"Australian Natl & S. Amer. 1969"},GRS67:{a:6378160,rf:298.247167427,ellipseName:"GRS 67(IUGG 1967)"},bessel:{a:6377397.155,rf:299.1528128,ellipseName:"Bessel 1841"},bess_nam:{a:6377483.865,rf:299.1528128,ellipseName:"Bessel 1841 (Namibia)"},clrk66:{a:6378206.4,b:6356583.8,ellipseName:"Clarke 1866"},clrk80:{a:6378249.145,rf:293.4663,ellipseName:"Clarke 1880 mod."},CPM:{a:6375738.7,rf:334.29,ellipseName:"Comm. des Poids et Mesures 1799"},delmbr:{a:6376428,rf:311.5,ellipseName:"Delambre 1810 (Belgium)"},engelis:{a:6378136.05,rf:298.2566,ellipseName:"Engelis 1985"},evrst30:{a:6377276.345,rf:300.8017,ellipseName:"Everest 1830"},evrst48:{a:6377304.063,rf:300.8017,ellipseName:"Everest 1948"},evrst56:{a:6377301.243,rf:300.8017,ellipseName:"Everest 1956"},evrst69:{a:6377295.664,rf:300.8017,ellipseName:"Everest 1969"},evrstSS:{a:6377298.556,rf:300.8017,ellipseName:"Everest (Sabah & Sarawak)"},fschr60:{a:6378166,rf:298.3,ellipseName:"Fischer (Mercury Datum) 1960"},fschr60m:{a:6378155,rf:298.3,ellipseName:"Fischer 1960"},fschr68:{a:6378150,rf:298.3,ellipseName:"Fischer 1968"},helmert:{a:6378200,rf:298.3,ellipseName:"Helmert 1906"},hough:{a:6378270,rf:297,ellipseName:"Hough"},intl:{a:6378388,rf:297,ellipseName:"International 1909 (Hayford)"},kaula:{a:6378163,rf:298.24,ellipseName:"Kaula 1961"},lerch:{a:6378139,rf:298.257,ellipseName:"Lerch 1979"},mprts:{a:6397300,rf:191,ellipseName:"Maupertius 1738"},new_intl:{a:6378157.5,b:6356772.2,ellipseName:"New International 1967"},plessis:{a:6376523,rf:6355863,ellipseName:"Plessis 1817 (France)"},krass:{a:6378245,rf:298.3,ellipseName:"Krassovsky, 1942"},SEasia:{a:6378155,b:6356773.3205,ellipseName:"Southeast Asia"},walbeck:{a:6376896,b:6355834.8467,ellipseName:"Walbeck"},WGS60:{a:6378165,rf:298.3,ellipseName:"WGS 60"},WGS66:{a:6378145,rf:298.25,ellipseName:"WGS 66"},WGS72:{a:6378135,rf:298.26,ellipseName:"WGS 72"},WGS84:{a:6378137,rf:298.257223563,ellipseName:"WGS 84"},sphere:{a:6370997,b:6370997,ellipseName:"Normal Sphere (r=6370997)"}},Proj4js.Datum={WGS84:{towgs84:"0,0,0",ellipse:"WGS84",datumName:"WGS84"},GGRS87:{towgs84:"-199.87,74.79,246.62",ellipse:"GRS80",datumName:"Greek_Geodetic_Reference_System_1987"},NAD83:{towgs84:"0,0,0",ellipse:"GRS80",datumName:"North_American_Datum_1983"},NAD27:{nadgrids:"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat",ellipse:"clrk66",datumName:"North_American_Datum_1927"},potsdam:{towgs84:"606.0,23.0,413.0",ellipse:"bessel",datumName:"Potsdam Rauenberg 1950 DHDN"},carthage:{towgs84:"-263.0,6.0,431.0",ellipse:"clark80",datumName:"Carthage 1934 Tunisia"},hermannskogel:{towgs84:"653.0,-212.0,449.0",ellipse:"bessel",datumName:"Hermannskogel"},ire65:{towgs84:"482.530,-130.596,564.557,-1.042,-0.214,-0.631,8.15",ellipse:"mod_airy",datumName:"Ireland 1965"},nzgd49:{towgs84:"59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993",ellipse:"intl",datumName:"New Zealand Geodetic Datum 1949"},OSGB36:{towgs84:"446.448,-125.157,542.060,0.1502,0.2470,0.8421,-20.4894",ellipse:"airy",datumName:"Airy 1830"}},Proj4js.WGS84=new Proj4js.Proj("WGS84"),Proj4js.Datum.OSB36=Proj4js.Datum.OSGB36,Proj4js.wktProjections={"Lambert Tangential Conformal Conic Projection":"lcc",Mercator:"merc","Popular Visualisation Pseudo Mercator":"merc",Mercator_1SP:"merc",Transverse_Mercator:"tmerc","Transverse Mercator":"tmerc","Lambert Azimuthal Equal Area":"laea","Universal Transverse Mercator System":"utm"},Proj4js.Proj.aea={init:function(){return Math.abs(this.lat1+this.lat2)Proj4js.common.EPSLN?(this.ms1*this.ms1-this.ms2*this.ms2)/(this.qs2-this.qs1):this.con,this.c=this.ms1*this.ms1+this.ns0*this.qs1,this.rh=this.a*Math.sqrt(this.c-this.ns0*this.qs0)/this.ns0,void 0)},forward:function(t){var i=t.x,s=t.y;this.sin_phi=Math.sin(s),this.cos_phi=Math.cos(s);var e=Proj4js.common.qsfnz(this.e3,this.sin_phi,this.cos_phi),o=this.a*Math.sqrt(this.c-this.ns0*e)/this.ns0,n=this.ns0*Proj4js.common.adjust_lon(i-this.long0),a=o*Math.sin(n)+this.x0,r=this.rh-o*Math.cos(n)+this.y0;return t.x=a,t.y=r,t},inverse:function(t){var i,s,e,o,n,a;return t.x-=this.x0,t.y=this.rh-t.y+this.y0,this.ns0>=0?(i=Math.sqrt(t.x*t.x+t.y*t.y),e=1):(i=-Math.sqrt(t.x*t.x+t.y*t.y),e=-1),o=0,0!=i&&(o=Math.atan2(e*t.x,e*t.y)),e=i*this.ns0/this.a,s=(this.c-e*e)/this.ns0,this.e3>=1e-10?(e=1-.5*(1-this.es)*Math.log((1-this.e3)/(1+this.e3))/this.e3,a=Math.abs(Math.abs(e)-Math.abs(s))>1e-10?this.phi1z(this.e3,s):s>=0?.5*Proj4js.common.PI:-.5*Proj4js.common.PI):a=this.phi1z(this.e3,s),n=Proj4js.common.adjust_lon(o/this.ns0+this.long0),t.x=n,t.y=a,t},phi1z:function(t,i){var s,e,o,n,a,r=Proj4js.common.asinz(.5*i);if(Proj4js.common.EPSLN>t)return r;for(var h=t*t,l=1;25>=l;l++)if(s=Math.sin(r),e=Math.cos(r),o=t*s,n=1-o*o,a=.5*n*n/e*(i/(1-h)-s/n+.5/t*Math.log((1-o)/(1+o))),r+=a,1e-7>=Math.abs(a))return r;return Proj4js.reportError("aea:phi1z:Convergence error"),null}},Proj4js.Proj.sterea={dependsOn:"gauss",init:function(){return Proj4js.Proj.gauss.init.apply(this),this.rc?(this.sinc0=Math.sin(this.phic0),this.cosc0=Math.cos(this.phic0),this.R2=2*this.rc,this.title||(this.title="Oblique Stereographic Alternative"),void 0):(Proj4js.reportError("sterea:init:E_ERROR_0"),void 0)},forward:function(t){var i,s,e,o;return t.x=Proj4js.common.adjust_lon(t.x-this.long0),Proj4js.Proj.gauss.forward.apply(this,[t]),i=Math.sin(t.y),s=Math.cos(t.y),e=Math.cos(t.x),o=this.k0*this.R2/(1+this.sinc0*i+this.cosc0*s*e),t.x=o*s*Math.sin(t.x),t.y=o*(this.cosc0*i-this.sinc0*s*e),t.x=this.a*t.x+this.x0,t.y=this.a*t.y+this.y0,t},inverse:function(t){var i,s,e,o,n;if(t.x=(t.x-this.x0)/this.a,t.y=(t.y-this.y0)/this.a,t.x/=this.k0,t.y/=this.k0,n=Math.sqrt(t.x*t.x+t.y*t.y)){var a=2*Math.atan2(n,this.R2);i=Math.sin(a),s=Math.cos(a),o=Math.asin(s*this.sinc0+t.y*i*this.cosc0/n),e=Math.atan2(t.x*i,n*this.cosc0*s-t.y*this.sinc0*i)}else o=this.phic0,e=0;return t.x=e,t.y=o,Proj4js.Proj.gauss.inverse.apply(this,[t]),t.x=Proj4js.common.adjust_lon(t.x+this.long0),t}},Proj4js.Proj.poly={init:function(){0==this.lat0&&(this.lat0=90),this.temp=this.b/this.a,this.es=1-Math.pow(this.temp,2),this.e=Math.sqrt(this.es),this.e0=Proj4js.common.e0fn(this.es),this.e1=Proj4js.common.e1fn(this.es),this.e2=Proj4js.common.e2fn(this.es),this.e3=Proj4js.common.e3fn(this.es),this.ml0=Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,this.lat0)},forward:function(t){var i,s,e,o,n,a,r,h=t.x,l=t.y;return e=Proj4js.common.adjust_lon(h-this.long0),1e-7>=Math.abs(l)?(a=this.x0+this.a*e,r=this.y0-this.a*this.ml0):(i=Math.sin(l),s=Math.cos(l),o=Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,l),n=Proj4js.common.msfnz(this.e,i,s),e=i,a=this.x0+this.a*n*Math.sin(e)/i,r=this.y0+this.a*(o-this.ml0+n*(1-Math.cos(e))/i)),t.x=a,t.y=r,t},inverse:function(t){var i,s,e,o,n,a;if(t.x-=this.x0,t.y-=this.y0,i=this.ml0+t.y/this.a,o=0,1e-7>=Math.abs(i))n=t.x/this.a+this.long0,a=0;else{if(s=i*i+t.x/this.a*(t.x/this.a),o=phi4z(this.es,this.e0,this.e1,this.e2,this.e3,this.al,s,e,a),1!=o)return o;n=Proj4js.common.adjust_lon(Proj4js.common.asinz(t.x*e/this.a)/Math.sin(a)+this.long0)}return t.x=n,t.y=a,t}},Proj4js.Proj.equi={init:function(){this.x0||(this.x0=0),this.y0||(this.y0=0),this.lat0||(this.lat0=0),this.long0||(this.long0=0)},forward:function(t){var i=t.x,s=t.y,e=Proj4js.common.adjust_lon(i-this.long0),o=this.x0+this.a*e*Math.cos(this.lat0),n=this.y0+this.a*s;return this.t1=o,this.t2=Math.cos(this.lat0),t.x=o,t.y=n,t},inverse:function(t){t.x-=this.x0,t.y-=this.y0;var i=t.y/this.a;Math.abs(i)>Proj4js.common.HALF_PI&&Proj4js.reportError("equi:Inv:DataError");var s=Proj4js.common.adjust_lon(this.long0+t.x/(this.a*Math.cos(this.lat0)));t.x=s,t.y=i}},Proj4js.Proj.merc={init:function(){this.lat_ts&&(this.k0=this.sphere?Math.cos(this.lat_ts):Proj4js.common.msfnz(this.es,Math.sin(this.lat_ts),Math.cos(this.lat_ts)))},forward:function(t){var i=t.x,s=t.y;if(s*Proj4js.common.R2D>90&&-90>s*Proj4js.common.R2D&&i*Proj4js.common.R2D>180&&-180>i*Proj4js.common.R2D)return Proj4js.reportError("merc:forward: llInputOutOfRange: "+i+" : "+s),null;var e,o;if(Math.abs(Math.abs(s)-Proj4js.common.HALF_PI)<=Proj4js.common.EPSLN)return Proj4js.reportError("merc:forward: ll2mAtPoles"),null;if(this.sphere)e=this.x0+this.a*this.k0*Proj4js.common.adjust_lon(i-this.long0),o=this.y0+this.a*this.k0*Math.log(Math.tan(Proj4js.common.FORTPI+.5*s));else{var n=Math.sin(s),a=Proj4js.common.tsfnz(this.e,s,n);e=this.x0+this.a*this.k0*Proj4js.common.adjust_lon(i-this.long0),o=this.y0-this.a*this.k0*Math.log(a)}return t.x=e,t.y=o,t},inverse:function(t){var i,s,e=t.x-this.x0,o=t.y-this.y0;if(this.sphere)s=Proj4js.common.HALF_PI-2*Math.atan(Math.exp(-o/this.a*this.k0));else{var n=Math.exp(-o/(this.a*this.k0));if(s=Proj4js.common.phi2z(this.e,n),-9999==s)return Proj4js.reportError("merc:inverse: lat = -9999"),null}return i=Proj4js.common.adjust_lon(this.long0+e/(this.a*this.k0)),t.x=i,t.y=s,t}},Proj4js.Proj.utm={dependsOn:"tmerc",init:function(){return this.zone?(this.lat0=0,this.long0=(6*Math.abs(this.zone)-183)*Proj4js.common.D2R,this.x0=5e5,this.y0=this.utmSouth?1e7:0,this.k0=.9996,Proj4js.Proj.tmerc.init.apply(this),this.forward=Proj4js.Proj.tmerc.forward,this.inverse=Proj4js.Proj.tmerc.inverse,void 0):(Proj4js.reportError("utm:init: zone must be specified for UTM"),void 0)}},Proj4js.Proj.eqdc={init:function(){this.mode||(this.mode=0),this.temp=this.b/this.a,this.es=1-Math.pow(this.temp,2),this.e=Math.sqrt(this.es),this.e0=Proj4js.common.e0fn(this.es),this.e1=Proj4js.common.e1fn(this.es),this.e2=Proj4js.common.e2fn(this.es),this.e3=Proj4js.common.e3fn(this.es),this.sinphi=Math.sin(this.lat1),this.cosphi=Math.cos(this.lat1),this.ms1=Proj4js.common.msfnz(this.e,this.sinphi,this.cosphi),this.ml1=Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,this.lat1),0!=this.mode?(Math.abs(this.lat1+this.lat2)=Proj4js.common.EPSLN?(this.ms1-this.ms2)/(this.ml2-this.ml1):this.sinphi):this.ns=this.sinphi,this.g=this.ml1+this.ms1/this.ns,this.ml0=Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,this.lat0),this.rh=this.a*(this.g-this.ml0)},forward:function(t){var i=t.x,s=t.y,e=Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,s),o=this.a*(this.g-e),n=this.ns*Proj4js.common.adjust_lon(i-this.long0),a=this.x0+o*Math.sin(n),r=this.y0+this.rh-o*Math.cos(n);return t.x=a,t.y=r,t},inverse:function(t){t.x-=this.x0,t.y=this.rh-t.y+this.y0;var i,s;this.ns>=0?(s=Math.sqrt(t.x*t.x+t.y*t.y),i=1):(s=-Math.sqrt(t.x*t.x+t.y*t.y),i=-1);var e=0;0!=s&&(e=Math.atan2(i*t.x,i*t.y));var o=this.g-s/this.a,n=this.phi3z(o,this.e0,this.e1,this.e2,this.e3),a=Proj4js.common.adjust_lon(this.long0+e/this.ns);return t.x=a,t.y=n,t},phi3z:function(t,i,s,e,o){var n,a;n=t;for(var r=0;15>r;r++)if(a=(t+s*Math.sin(2*n)-e*Math.sin(4*n)+o*Math.sin(6*n))/i-n,n+=a,1e-10>=Math.abs(a))return n;return Proj4js.reportError("PHI3Z-CONV:Latitude failed to converge after 15 iterations"),null}},Proj4js.Proj.tmerc={init:function(){this.e0=Proj4js.common.e0fn(this.es),this.e1=Proj4js.common.e1fn(this.es),this.e2=Proj4js.common.e2fn(this.es),this.e3=Proj4js.common.e3fn(this.es),this.ml0=this.a*Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,this.lat0)},forward:function(t){var i,s,e,o=t.x,n=t.y,a=Proj4js.common.adjust_lon(o-this.long0),r=Math.sin(n),h=Math.cos(n);if(this.sphere){var l=h*Math.sin(a);if(1e-10>Math.abs(Math.abs(l)-1))return Proj4js.reportError("tmerc:forward: Point projects into infinity"),93;s=.5*this.a*this.k0*Math.log((1+l)/(1-l)),i=Math.acos(h*Math.cos(a)/Math.sqrt(1-l*l)),0>n&&(i=-i),e=this.a*this.k0*(i-this.lat0)}else{var c=h*a,m=Math.pow(c,2),u=this.ep2*Math.pow(h,2),d=Math.tan(n),p=Math.pow(d,2);i=1-this.es*Math.pow(r,2);var _=this.a/Math.sqrt(i),f=this.a*Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,n);s=this.k0*_*c*(1+m/6*(1-p+u+m/20*(5-18*p+Math.pow(p,2)+72*u-58*this.ep2)))+this.x0,e=this.k0*(f-this.ml0+_*d*m*(.5+m/24*(5-p+9*u+4*Math.pow(u,2)+m/30*(61-58*p+Math.pow(p,2)+600*u-330*this.ep2))))+this.y0}return t.x=s,t.y=e,t},inverse:function(t){var i,s,e,o,n,a,r=6;if(this.sphere){var h=Math.exp(t.x/(this.a*this.k0)),l=.5*(h-1/h),c=this.lat0+t.y/(this.a*this.k0),m=Math.cos(c);i=Math.sqrt((1-m*m)/(1+l*l)),n=Proj4js.common.asinz(i),0>c&&(n=-n),a=0==l&&0==m?this.long0:Proj4js.common.adjust_lon(Math.atan2(l,m)+this.long0)}else{var u=t.x-this.x0,d=t.y-this.y0;for(i=(this.ml0+d/this.k0)/this.a,s=i,o=0;!0&&(e=(i+this.e1*Math.sin(2*s)-this.e2*Math.sin(4*s)+this.e3*Math.sin(6*s))/this.e0-s,s+=e,!(Math.abs(e)<=Proj4js.common.EPSLN));o++)if(o>=r)return Proj4js.reportError("tmerc:inverse: Latitude failed to converge"),95;if(Math.abs(s)0||Math.abs(a)<=Proj4js.common.EPSLN)var l=this.a*n*s*Math.sin(e),c=this.y0+this.a*n*(this.cos_p14*i-this.sin_p14*s*o);else Proj4js.reportError("orthoFwdPointError");return t.x=l,t.y=c,t},inverse:function(t){var i,s,e,o,n,a,r;return t.x-=this.x0,t.y-=this.y0,i=Math.sqrt(t.x*t.x+t.y*t.y),i>this.a+1e-7&&Proj4js.reportError("orthoInvDataError"),s=Proj4js.common.asinz(i/this.a),e=Math.sin(s),o=Math.cos(s),a=this.long0,Math.abs(i)<=Proj4js.common.EPSLN&&(r=this.lat0),r=Proj4js.common.asinz(o*this.sin_p14+t.y*e*this.cos_p14/i),n=Math.abs(this.lat0)-Proj4js.common.HALF_PI,Math.abs(n)<=Proj4js.common.EPSLN&&(a=this.lat0>=0?Proj4js.common.adjust_lon(this.long0+Math.atan2(t.x,-t.y)):Proj4js.common.adjust_lon(this.long0-Math.atan2(-t.x,t.y))),n=o-this.sin_p14*Math.sin(r),t.x=a,t.y=r,t}},Proj4js.Proj.krovak={init:function(){this.a=6377397.155,this.es=.006674372230614,this.e=Math.sqrt(this.es),this.lat0||(this.lat0=.863937979737193),this.long0||(this.long0=.4334234309119251),this.k0||(this.k0=.9999),this.s45=.785398163397448,this.s90=2*this.s45,this.fi0=this.lat0,this.e2=this.es,this.e=Math.sqrt(this.e2),this.alfa=Math.sqrt(1+this.e2*Math.pow(Math.cos(this.fi0),4)/(1-this.e2)),this.uq=1.04216856380474,this.u0=Math.asin(Math.sin(this.fi0)/this.alfa),this.g=Math.pow((1+this.e*Math.sin(this.fi0))/(1-this.e*Math.sin(this.fi0)),this.alfa*this.e/2),this.k=Math.tan(this.u0/2+this.s45)/Math.pow(Math.tan(this.fi0/2+this.s45),this.alfa)*this.g,this.k1=this.k0,this.n0=this.a*Math.sqrt(1-this.e2)/(1-this.e2*Math.pow(Math.sin(this.fi0),2)),this.s0=1.37008346281555,this.n=Math.sin(this.s0),this.ro0=this.k1*this.n0/Math.tan(this.s0),this.ad=this.s90-this.uq},forward:function(t){var i,s,e,o,n,a,r,h=t.x,l=t.y,c=Proj4js.common.adjust_lon(h-this.long0);return i=Math.pow((1+this.e*Math.sin(l))/(1-this.e*Math.sin(l)),this.alfa*this.e/2),s=2*(Math.atan(this.k*Math.pow(Math.tan(l/2+this.s45),this.alfa)/i)-this.s45),e=-c*this.alfa,o=Math.asin(Math.cos(this.ad)*Math.sin(s)+Math.sin(this.ad)*Math.cos(s)*Math.cos(e)),n=Math.asin(Math.cos(s)*Math.sin(e)/Math.cos(o)),a=this.n*n,r=this.ro0*Math.pow(Math.tan(this.s0/2+this.s45),this.n)/Math.pow(Math.tan(o/2+this.s45),this.n),t.y=r*Math.cos(a)/1,t.x=r*Math.sin(a)/1,this.czech&&(t.y*=-1,t.x*=-1),t},inverse:function(t){var i,s,e,o,n,a,r,h,l=t.x;t.x=t.y,t.y=l,this.czech&&(t.y*=-1,t.x*=-1),a=Math.sqrt(t.x*t.x+t.y*t.y),n=Math.atan2(t.y,t.x),o=n/Math.sin(this.s0),e=2*(Math.atan(Math.pow(this.ro0/a,1/this.n)*Math.tan(this.s0/2+this.s45))-this.s45),i=Math.asin(Math.cos(this.ad)*Math.sin(e)-Math.sin(this.ad)*Math.cos(e)*Math.cos(o)),s=Math.asin(Math.cos(e)*Math.sin(o)/Math.cos(i)),t.x=this.long0-s/this.alfa,r=i,h=0;var c=0;do t.y=2*(Math.atan(Math.pow(this.k,-1/this.alfa)*Math.pow(Math.tan(i/2+this.s45),1/this.alfa)*Math.pow((1+this.e*Math.sin(r))/(1-this.e*Math.sin(r)),this.e/2))-this.s45),1e-10>Math.abs(r-t.y)&&(h=1),r=t.y,c+=1;while(0==h&&15>c);return c>=15?(Proj4js.reportError("PHI3Z-CONV:Latitude failed to converge after 15 iterations"),null):t}},Proj4js.Proj.somerc={init:function(){var t=this.lat0;this.lambda0=this.long0;var i=Math.sin(t),s=this.a,e=this.rf,o=1/e,n=2*o-Math.pow(o,2),a=this.e=Math.sqrt(n);this.R=this.k0*s*Math.sqrt(1-n)/(1-n*Math.pow(i,2)),this.alpha=Math.sqrt(1+n/(1-n)*Math.pow(Math.cos(t),4)),this.b0=Math.asin(i/this.alpha),this.K=Math.log(Math.tan(Math.PI/4+this.b0/2))-this.alpha*Math.log(Math.tan(Math.PI/4+t/2))+this.alpha*a/2*Math.log((1+a*i)/(1-a*i))},forward:function(t){var i=Math.log(Math.tan(Math.PI/4-t.y/2)),s=this.e/2*Math.log((1+this.e*Math.sin(t.y))/(1-this.e*Math.sin(t.y))),e=-this.alpha*(i+s)+this.K,o=2*(Math.atan(Math.exp(e))-Math.PI/4),n=this.alpha*(t.x-this.lambda0),a=Math.atan(Math.sin(n)/(Math.sin(this.b0)*Math.tan(o)+Math.cos(this.b0)*Math.cos(n))),r=Math.asin(Math.cos(this.b0)*Math.sin(o)-Math.sin(this.b0)*Math.cos(o)*Math.cos(n));return t.y=this.R/2*Math.log((1+Math.sin(r))/(1-Math.sin(r)))+this.y0,t.x=this.R*a+this.x0,t},inverse:function(t){for(var i=t.x-this.x0,s=t.y-this.y0,e=i/this.R,o=2*(Math.atan(Math.exp(s/this.R))-Math.PI/4),n=Math.asin(Math.cos(this.b0)*Math.sin(o)+Math.sin(this.b0)*Math.cos(o)*Math.cos(e)),a=Math.atan(Math.sin(e)/(Math.cos(this.b0)*Math.cos(e)-Math.sin(this.b0)*Math.tan(o))),r=this.lambda0+a/this.alpha,h=0,l=n,c=-1e3,m=0;Math.abs(l-c)>1e-7;){if(++m>20)return Proj4js.reportError("omercFwdInfinity"),void 0;h=1/this.alpha*(Math.log(Math.tan(Math.PI/4+n/2))-this.K)+this.e*Math.log(Math.tan(Math.PI/4+Math.asin(this.e*Math.sin(l))/2)),c=l,l=2*Math.atan(Math.exp(h))-Math.PI/2}return t.x=r,t.y=l,t}},Proj4js.Proj.stere={ssfn_:function(t,i,s){return i*=s,Math.tan(.5*(Proj4js.common.HALF_PI+t))*Math.pow((1-i)/(1+i),.5*s)},TOL:1e-8,NITER:8,CONV:1e-10,S_POLE:0,N_POLE:1,OBLIQ:2,EQUIT:3,init:function(){this.phits=this.lat_ts?this.lat_ts:Proj4js.common.HALF_PI;var t=Math.abs(this.lat0);if(this.mode=Math.abs(t)-Proj4js.common.HALF_PIthis.lat0?this.S_POLE:this.N_POLE:t>Proj4js.common.EPSLN?this.OBLIQ:this.EQUIT,this.phits=Math.abs(this.phits),this.es){var i;switch(this.mode){case this.N_POLE:case this.S_POLE:Math.abs(this.phits-Proj4js.common.HALF_PI)=Proj4js.common.EPSLN?Math.cos(this.phits)/Math.tan(Proj4js.common.FORTPI-.5*this.phits):2*this.k0}},forward:function(t){var i=t.x;i=Proj4js.common.adjust_lon(i-this.long0);var s,e,o=t.y;if(this.sphere){var n,a,r,h;switch(n=Math.sin(o),a=Math.cos(o),r=Math.cos(i),h=Math.sin(i),this.mode){case this.EQUIT:e=1+a*r,Proj4js.common.EPSLN>=e&&Proj4js.reportError("stere:forward:Equit"),e=this.akm1/e,s=e*a*h,e*=n;break;case this.OBLIQ:e=1+this.sinph0*n+this.cosph0*a*r,Proj4js.common.EPSLN>=e&&Proj4js.reportError("stere:forward:Obliq"),e=this.akm1/e,s=e*a*h,e*=this.cosph0*n-this.sinph0*a*r;break;case this.N_POLE:r=-r,o=-o;case this.S_POLE:Math.abs(o-Proj4js.common.HALF_PI)=l;l++)r*=n,h+=this.A[l]*r;for(var c,m,u=h,d=a,p=1,_=0,f=0,P=0,l=1;6>=l;l++)c=p*u-_*d,m=_*u+p*d,p=c,_=m,f=f+this.B_re[l]*p-this.B_im[l]*_,P=P+this.B_im[l]*p+this.B_re[l]*_;return t.x=P*this.a+this.x0,t.y=f*this.a+this.y0,t},inverse:function(t){for(var i,s,e=t.x,o=t.y,n=e-this.x0,a=o-this.y0,r=a/this.a,h=n/this.a,l=1,c=0,m=0,u=0,d=1;6>=d;d++)i=l*r-c*h,s=c*r+l*h,l=i,c=s,m=m+this.C_re[d]*l-this.C_im[d]*c,u=u+this.C_im[d]*l+this.C_re[d]*c;for(var p=0;this.iterations>p;p++){for(var _,f,P=m,y=u,g=r,L=h,d=2;6>=d;d++)_=P*m-y*u,f=y*m+P*u,P=_,y=f,g+=(d-1)*(this.B_re[d]*P-this.B_im[d]*y),L+=(d-1)*(this.B_im[d]*P+this.B_re[d]*y);P=1,y=0;for(var v=this.B_re[1],j=this.B_im[1],d=2;6>=d;d++)_=P*m-y*u,f=y*m+P*u,P=_,y=f,v+=d*(this.B_re[d]*P-this.B_im[d]*y),j+=d*(this.B_im[d]*P+this.B_re[d]*y);var M=v*v+j*j;m=(g*v+L*j)/M,u=(L*v-g*j)/M}for(var S=m,b=u,x=1,E=0,d=1;9>=d;d++)x*=S,E+=this.D[d]*x;var C=this.lat0+1e5*E*Proj4js.common.SEC_TO_RAD,w=this.long0+b;return t.x=w,t.y=C,t}},Proj4js.Proj.mill={init:function(){},forward:function(t){var i=t.x,s=t.y,e=Proj4js.common.adjust_lon(i-this.long0),o=this.x0+this.a*e,n=this.y0+1.25*this.a*Math.log(Math.tan(Proj4js.common.PI/4+s/2.5));return t.x=o,t.y=n,t},inverse:function(t){t.x-=this.x0,t.y-=this.y0;var i=Proj4js.common.adjust_lon(this.long0+t.x/this.a),s=2.5*(Math.atan(Math.exp(.8*t.y/this.a))-Proj4js.common.PI/4);return t.x=i,t.y=s,t}},Proj4js.Proj.gnom={init:function(){this.sin_p14=Math.sin(this.lat0),this.cos_p14=Math.cos(this.lat0),this.infinity_dist=1e3*this.a,this.rc=1},forward:function(t){var i,s,e,o,n,a,r,h,l=t.x,c=t.y;return e=Proj4js.common.adjust_lon(l-this.long0),i=Math.sin(c),s=Math.cos(c),o=Math.cos(e),a=this.sin_p14*i+this.cos_p14*s*o,n=1,a>0||Math.abs(a)<=Proj4js.common.EPSLN?(r=this.x0+this.a*n*s*Math.sin(e)/a,h=this.y0+this.a*n*(this.cos_p14*i-this.sin_p14*s*o)/a):(Proj4js.reportError("orthoFwdPointError"),r=this.x0+this.infinity_dist*s*Math.sin(e),h=this.y0+this.infinity_dist*(this.cos_p14*i-this.sin_p14*s*o)),t.x=r,t.y=h,t},inverse:function(t){var i,s,e,o,n,a;return t.x=(t.x-this.x0)/this.a,t.y=(t.y-this.y0)/this.a,t.x/=this.k0,t.y/=this.k0,(i=Math.sqrt(t.x*t.x+t.y*t.y))?(o=Math.atan2(i,this.rc),s=Math.sin(o),e=Math.cos(o),a=Proj4js.common.asinz(e*this.sin_p14+t.y*s*this.cos_p14/i),n=Math.atan2(t.x*s,i*this.cos_p14*e-t.y*this.sin_p14*s),n=Proj4js.common.adjust_lon(this.long0+n)):(a=this.phic0,n=0),t.x=n,t.y=a,t}},Proj4js.Proj.sinu={init:function(){this.sphere?(this.n=1,this.m=0,this.es=0,this.C_y=Math.sqrt((this.m+1)/this.n),this.C_x=this.C_y/(this.m+1)):this.en=Proj4js.common.pj_enfn(this.es)},forward:function(t){var i,s,e=t.x,o=t.y;if(e=Proj4js.common.adjust_lon(e-this.long0),this.sphere){if(this.m)for(var n=this.n*Math.sin(o),a=Proj4js.common.MAX_ITER;a;--a){var r=(this.m*o+Math.sin(o)-n)/(this.m+Math.cos(o));if(o-=r,Math.abs(r)o?(o=Math.sin(i),s=this.long0+t.x*Math.sqrt(1-this.es*o*o)/(this.a*Math.cos(i)),e=Proj4js.common.adjust_lon(s)):o-Proj4js.common.EPSLN=0?this.y0+Proj4js.common.PI*this.R*Math.tan(.5*a):this.y0+Proj4js.common.PI*this.R*-Math.tan(.5*a));var r=.5*Math.abs(Proj4js.common.PI/n-n/Proj4js.common.PI),h=r*r,l=Math.sin(a),c=Math.cos(a),m=c/(l+c-1),u=m*m,d=m*(2/l-1),p=d*d,_=Proj4js.common.PI*this.R*(r*(m-p)+Math.sqrt(h*(m-p)*(m-p)-(p+h)*(u-p)))/(p+h);return 0>n&&(_=-_),i=this.x0+_,_=Math.abs(_/(Proj4js.common.PI*this.R)),s=o>=0?this.y0+Proj4js.common.PI*this.R*Math.sqrt(1-_*_-2*r*_):this.y0-Proj4js.common.PI*this.R*Math.sqrt(1-_*_-2*r*_),t.x=i,t.y=s,t},inverse:function(t){var i,s,e,o,n,a,r,h,l,c,m,u,d;return t.x-=this.x0,t.y-=this.y0,m=Proj4js.common.PI*this.R,e=t.x/m,o=t.y/m,n=e*e+o*o,a=-Math.abs(o)*(1+n),r=a-2*o*o+e*e,h=-2*a+1+2*o*o+n*n,d=o*o/h+(2*r*r*r/h/h/h-9*a*r/h/h)/27,l=(a-r*r/3/h)/h,c=2*Math.sqrt(-l/3),m=3*d/l/c,Math.abs(m)>1&&(m=m>=0?1:-1),u=Math.acos(m)/3,s=t.y>=0?(-c*Math.cos(u+Proj4js.common.PI/3)-r/3/h)*Proj4js.common.PI:-(-c*Math.cos(u+Proj4js.common.PI/3)-r/3/h)*Proj4js.common.PI,Math.abs(e)0&&(e=2*Math.atan(o*Proj4js.common.srat(this.e*Math.sin(t.y),-.5*this.e))-Proj4js.common.HALF_PI,!(i>Math.abs(e-t.y)));--n)t.y=e;return n?(t.x=s,t.y=e,t):(Proj4js.reportError("gauss:inverse:convergence failed"),null)}},Proj4js.Proj.omerc={init:function(){this.mode||(this.mode=0),this.lon1||(this.lon1=0,this.mode=1),this.lon2||(this.lon2=0),this.lat2||(this.lat2=0);var t=this.b/this.a,i=1-Math.pow(t,2);Math.sqrt(i),this.sin_p20=Math.sin(this.lat0),this.cos_p20=Math.cos(this.lat0),this.con=1-this.es*this.sin_p20*this.sin_p20,this.com=Math.sqrt(1-i),this.bl=Math.sqrt(1+this.es*Math.pow(this.cos_p20,4)/(1-i)),this.al=this.a*this.bl*this.k0*this.com/this.con,Math.abs(this.lat0)0?this.lat0>=0?this.d+Math.sqrt(this.d*this.d-1):this.d-Math.sqrt(this.d*this.d-1):this.d,this.el=this.f*Math.pow(this.ts,this.bl)),0!=this.mode?(this.g=.5*(this.f-1/this.f),this.gama=Proj4js.common.asinz(Math.sin(this.alpha)/this.d),this.longc=this.longc-Proj4js.common.asinz(this.g*Math.tan(this.gama))/this.bl,this.con=Math.abs(this.lat0),this.con>Proj4js.common.EPSLN&&Math.abs(this.con-Proj4js.common.HALF_PI)>Proj4js.common.EPSLN?(this.singam=Math.sin(this.gama),this.cosgam=Math.cos(this.gama),this.sinaz=Math.sin(this.alpha),this.cosaz=Math.cos(this.alpha),this.u=this.lat0>=0?this.al/this.bl*Math.atan(Math.sqrt(this.d*this.d-1)/this.cosaz):-(this.al/this.bl)*Math.atan(Math.sqrt(this.d*this.d-1)/this.cosaz)):Proj4js.reportError("omerc:Init:DataError")):(this.sinphi=Math.sin(this.at1),this.ts1=Proj4js.common.tsfnz(this.e,this.lat1,this.sinphi),this.sinphi=Math.sin(this.lat2),this.ts2=Proj4js.common.tsfnz(this.e,this.lat2,this.sinphi),this.h=Math.pow(this.ts1,this.bl),this.l=Math.pow(this.ts2,this.bl),this.f=this.el/this.h,this.g=.5*(this.f-1/this.f),this.j=(this.el*this.el-this.l*this.h)/(this.el*this.el+this.l*this.h),this.p=(this.l-this.h)/(this.l+this.h),this.dlon=this.lon1-this.lon2,this.dlon<-Proj4js.common.PI&&(this.lon2=this.lon2-2*Proj4js.common.PI),this.dlon>Proj4js.common.PI&&(this.lon2=this.lon2+2*Proj4js.common.PI),this.dlon=this.lon1-this.lon2,this.longc=.5*(this.lon1+this.lon2)-Math.atan(this.j*Math.tan(.5*this.bl*this.dlon)/this.p)/this.bl,this.dlon=Proj4js.common.adjust_lon(this.lon1-this.longc),this.gama=Math.atan(Math.sin(this.bl*this.dlon)/this.g),this.alpha=Proj4js.common.asinz(this.d*Math.sin(this.gama)),Math.abs(this.lat1-this.lat2)<=Proj4js.common.EPSLN?Proj4js.reportError("omercInitDataError"):this.con=Math.abs(this.lat1),this.con<=Proj4js.common.EPSLN||Math.abs(this.con-Proj4js.common.HALF_PI)<=Proj4js.common.EPSLN?Proj4js.reportError("omercInitDataError"):Math.abs(Math.abs(this.lat0)-Proj4js.common.HALF_PI)<=Proj4js.common.EPSLN&&Proj4js.reportError("omercInitDataError"),this.singam=Math.sin(this.gam),this.cosgam=Math.cos(this.gam),this.sinaz=Math.sin(this.alpha),this.cosaz=Math.cos(this.alpha),this.u=this.lat0>=0?this.al/this.bl*Math.atan(Math.sqrt(this.d*this.d-1)/this.cosaz):-(this.al/this.bl)*Math.atan(Math.sqrt(this.d*this.d-1)/this.cosaz))},forward:function(t){var i,s,e,o,n,a,r,h,l,c,m,u=t.x,d=t.y;i=Math.sin(d),c=Proj4js.common.adjust_lon(u-this.longc),a=Math.sin(this.bl*c),Math.abs(Math.abs(d)-Proj4js.common.HALF_PI)>Proj4js.common.EPSLN?(m=Proj4js.common.tsfnz(this.e,d,i),o=this.el/Math.pow(m,this.bl),l=.5*(o-1/o),s=.5*(o+1/o),r=(l*this.singam-a*this.cosgam)/s,e=Math.cos(this.bl*c),1e-7>Math.abs(e)?n=this.al*this.bl*c:(n=this.al*Math.atan((l*this.cosgam+a*this.singam)/e)/this.bl,0>e&&(n+=Proj4js.common.PI*this.al/this.bl))):(r=d>=0?this.singam:-this.singam,n=this.al*d/this.bl),Math.abs(Math.abs(r)-1)<=Proj4js.common.EPSLN&&Proj4js.reportError("omercFwdInfinity"),h=.5*this.al*Math.log((1-r)/(1+r))/this.bl,n-=this.u;var p=this.x0+h*this.cosaz+n*this.sinaz,_=this.y0+n*this.cosaz-h*this.sinaz;return t.x=p,t.y=_,t},inverse:function(t){var i,s,e,o,n,a,r,h,l,c,m,u,d;return t.x-=this.x0,t.y-=this.y0,d=0,o=t.x*this.cosaz-t.y*this.sinaz,n=t.y*this.cosaz+t.x*this.sinaz,n+=this.u,a=Math.exp(-this.bl*o/this.al),r=.5*(a-1/a),s=.5*(a+1/a),l=Math.sin(this.bl*n/this.al),c=(l*this.cosgam+r*this.singam)/s,Math.abs(Math.abs(c)-1)<=Proj4js.common.EPSLN?(m=this.longc,u=c>=0?Proj4js.common.HALF_PI:-Proj4js.common.HALF_PI):(e=1/this.bl,h=Math.pow(this.el/Math.sqrt((1+c)/(1-c)),e),u=Proj4js.common.phi2z(this.e,h),i=this.longc-Math.atan2(r*this.cosgam-l*this.singam,e)/this.bl,m=Proj4js.common.adjust_lon(i)),t.x=m,t.y=u,t}},Proj4js.Proj.lcc={init:function(){if(this.lat2||(this.lat2=this.lat0),this.k0||(this.k0=1),Math.abs(this.lat1+this.lat2)Proj4js.common.EPSLN?Math.log(e/r)/Math.log(o/h):i,this.f0=e/(this.ns*Math.pow(o,this.ns)),this.rh=this.a*this.f0*Math.pow(l,this.ns),this.title||(this.title="Lambert Conformal Conic")},forward:function(t){var i=t.x,s=t.y;if(!(90>=s&&s>=-90&&180>=i&&i>=-180))return Proj4js.reportError("lcc:forward: llInputOutOfRange: "+i+" : "+s),null;var e,o,n=Math.abs(Math.abs(s)-Proj4js.common.HALF_PI);if(n>Proj4js.common.EPSLN)e=Proj4js.common.tsfnz(this.e,s,Math.sin(s)),o=this.a*this.f0*Math.pow(e,this.ns);else{if(n=s*this.ns,0>=n)return Proj4js.reportError("lcc:forward: No Projection"),null;o=0}var a=this.ns*Proj4js.common.adjust_lon(i-this.long0);return t.x=this.k0*o*Math.sin(a)+this.x0,t.y=this.k0*(this.rh-o*Math.cos(a))+this.y0,t},inverse:function(t){var i,s,e,o,n,a=(t.x-this.x0)/this.k0,r=this.rh-(t.y-this.y0)/this.k0;this.ns>0?(i=Math.sqrt(a*a+r*r),s=1):(i=-Math.sqrt(a*a+r*r),s=-1);var h=0;if(0!=i&&(h=Math.atan2(s*a,s*r)),0!=i||this.ns>0){if(s=1/this.ns,e=Math.pow(i/(this.a*this.f0),s),o=Proj4js.common.phi2z(this.e,e),-9999==o)return null}else o=-Proj4js.common.HALF_PI;return n=Proj4js.common.adjust_lon(h/this.ns+this.long0),t.x=n,t.y=o,t}},Proj4js.Proj.laea={S_POLE:1,N_POLE:2,EQUIT:3,OBLIQ:4,init:function(){var t=Math.abs(this.lat0);if(this.mode=Math.abs(t-Proj4js.common.HALF_PI)this.lat0?this.S_POLE:this.N_POLE:Math.abs(t)0){var i;switch(this.qp=Proj4js.common.qsfnz(this.e,1),this.mmf=.5/(1-this.es),this.apa=this.authset(this.es),this.mode){case this.N_POLE:case this.S_POLE:this.dd=1;break;case this.EQUIT:this.rq=Math.sqrt(.5*this.qp),this.dd=1/this.rq,this.xmf=1,this.ymf=.5*this.qp;break;case this.OBLIQ:this.rq=Math.sqrt(.5*this.qp),i=Math.sin(this.lat0),this.sinb1=Proj4js.common.qsfnz(this.e,i)/this.qp,this.cosb1=Math.sqrt(1-this.sinb1*this.sinb1),this.dd=Math.cos(this.lat0)/(Math.sqrt(1-this.es*i*i)*this.rq*this.cosb1),this.ymf=(this.xmf=this.rq)/this.dd,this.xmf*=this.dd}}else this.mode==this.OBLIQ&&(this.sinph0=Math.sin(this.lat0),this.cosph0=Math.cos(this.lat0))},forward:function(t){var i,s,e=t.x,o=t.y;if(e=Proj4js.common.adjust_lon(e-this.long0),this.sphere){var n,a,r;switch(r=Math.sin(o),a=Math.cos(o),n=Math.cos(e),this.mode){case this.OBLIQ:case this.EQUIT:if(s=this.mode==this.EQUIT?1+a*n:1+this.sinph0*r+this.cosph0*a*n,Proj4js.common.EPSLN>=s)return Proj4js.reportError("laea:fwd:y less than eps"),null;s=Math.sqrt(2/s),i=s*a*Math.sin(e),s*=this.mode==this.EQUIT?r:this.cosph0*r-this.sinph0*a*n;break;case this.N_POLE:n=-n;case this.S_POLE:if(Math.abs(o+this.phi0)=0?(i=(u=Math.sqrt(l))*h,s=n*(this.mode==this.S_POLE?u:-u)):i=s=0}}return t.x=this.a*i+this.x0,t.y=this.a*s+this.y0,t},inverse:function(t){t.x-=this.x0,t.y-=this.y0;var i,s,e=t.x/this.a,o=t.y/this.a;if(this.sphere){var n,a=0,r=0;if(n=Math.sqrt(e*e+o*o),s=.5*n,s>1)return Proj4js.reportError("laea:Inv:DataError"),null;switch(s=2*Math.asin(s),(this.mode==this.OBLIQ||this.mode==this.EQUIT)&&(r=Math.sin(s),a=Math.cos(s)),this.mode){case this.EQUIT:s=Math.abs(n)<=Proj4js.common.EPSLN?0:Math.asin(o*r/n),e*=r,o=a*n;break;case this.OBLIQ:s=Math.abs(n)<=Proj4js.common.EPSLN?this.phi0:Math.asin(a*this.sinph0+o*r*this.cosph0/n),e*=r*this.cosph0,o=(a-Math.sin(s)*this.sinph0)*n;break;case this.N_POLE:o=-o,s=Proj4js.common.HALF_PI-s;break;case this.S_POLE:s-=Proj4js.common.HALF_PI}i=0!=o||this.mode!=this.EQUIT&&this.mode!=this.OBLIQ?Math.atan2(e,o):0}else{var h,l,c,m,u=0;switch(this.mode){case this.EQUIT:case this.OBLIQ:if(e/=this.dd,o*=this.dd,m=Math.sqrt(e*e+o*o),Proj4js.common.EPSLN>m)return t.x=0,t.y=this.phi0,t;l=2*Math.asin(.5*m/this.rq),h=Math.cos(l),e*=l=Math.sin(l),this.mode==this.OBLIQ?(u=h*this.sinb1+o*l*this.cosb1/m,c=this.qp*u,o=m*this.cosb1*h-o*this.sinb1*l):(u=o*l/m,c=this.qp*u,o=m*h);break;case this.N_POLE:o=-o;case this.S_POLE:if(c=e*e+o*o,!c)return t.x=0,t.y=this.phi0,t;u=1-c/this.qp,this.mode==this.S_POLE&&(u=-u)}i=Math.atan2(e,o),s=this.authlat(Math.asin(u),this.apa)}return t.x=Proj4js.common.adjust_lon(this.long0+i),t.y=s,t},P00:.3333333333333333,P01:.17222222222222222,P02:.10257936507936508,P10:.06388888888888888,P11:.0664021164021164,P20:.016415012942191543,authset:function(t){var i,s=[];return s[0]=t*this.P00,i=t*t,s[0]+=i*this.P01,s[1]=i*this.P10,i*=t,s[0]+=i*this.P02,s[1]+=i*this.P11,s[2]=i*this.P20,s},authlat:function(t,i){var s=t+t;return t+i[0]*Math.sin(s)+i[1]*Math.sin(s+s)+i[2]*Math.sin(s+s+s)}},Proj4js.Proj.aeqd={init:function(){this.sin_p12=Math.sin(this.lat0),this.cos_p12=Math.cos(this.lat0)},forward:function(t){var i=t.x;t.y;var s,e=Math.sin(t.y),o=Math.cos(t.y),n=Proj4js.common.adjust_lon(i-this.long0),a=Math.cos(n),r=this.sin_p12*e+this.cos_p12*o*a;if(Math.abs(Math.abs(r)-1)r)return Proj4js.reportError("aeqd:Fwd:PointError"),void 0}else{var h=Math.acos(r);s=h/Math.sin(h)}return t.x=this.x0+this.a*s*o*Math.sin(n),t.y=this.y0+this.a*s*(this.cos_p12*e-this.sin_p12*o*a),t},inverse:function(t){t.x-=this.x0,t.y-=this.y0;var i=Math.sqrt(t.x*t.x+t.y*t.y);if(i>2*Proj4js.common.HALF_PI*this.a)return Proj4js.reportError("aeqdInvDataError"),void 0;var s,e=i/this.a,o=Math.sin(e),n=Math.cos(e),a=this.long0;if(Math.abs(i)<=Proj4js.common.EPSLN)s=this.lat0;else{s=Proj4js.common.asinz(n*this.sin_p12+t.y*o*this.cos_p12/i);var r=Math.abs(this.lat0)-Proj4js.common.HALF_PI;Math.abs(r)<=Proj4js.common.EPSLN?a=this.lat0>=0?Proj4js.common.adjust_lon(this.long0+Math.atan2(t.x,-t.y)):Proj4js.common.adjust_lon(this.long0-Math.atan2(-t.x,t.y)):(r=n-this.sin_p12*Math.sin(s),Math.abs(r)=50&&Proj4js.reportError("moll:Fwd:IterationError")}o/=2,Proj4js.common.PI/2-Math.abs(s).999999999999&&(s=.999999999999);var i=Math.asin(s),e=Proj4js.common.adjust_lon(this.long0+t.x/(.900316316158*this.a*Math.cos(i)));-Proj4js.common.PI>e&&(e=-Proj4js.common.PI),e>Proj4js.common.PI&&(e=Proj4js.common.PI),s=(2*i+Math.sin(2*i))/Proj4js.common.PI,Math.abs(s)>1&&(s=1);var o=Math.asin(s);return t.x=e,t.y=o,t}},function(t,i,s){var e,o;typeof exports!=s+""?e=exports:(o=t.L,e={},e.noConflict=function(){return t.L=o,this},t.L=e),e.version="0.5.1",e.Util={extend:function(t){var i,s,e,o,n=Array.prototype.slice.call(arguments,1);for(s=0,e=n.length;e>s;s++){o=n[s]||{};for(i in o)o.hasOwnProperty(i)&&(t[i]=o[i])}return t},bind:function(t,i){var s=arguments.length>2?Array.prototype.slice.call(arguments,2):null;return function(){return t.apply(i,s||arguments)}},stamp:function(){var t=0,i="_leaflet_id";return function(s){return s[i]=s[i]||++t,s[i]}}(),limitExecByInterval:function(t,i,e){var o,n;return function a(){var r=arguments;return o?(n=!0,s):(o=!0,setTimeout(function(){o=!1,n&&(a.apply(e,r),n=!1)},i),t.apply(e,r),s)}},falseFn:function(){return!1},formatNum:function(t,i){var s=Math.pow(10,i||5);return Math.round(t*s)/s},splitWords:function(t){return t.replace(/^\s+|\s+$/g,"").split(/\s+/)},setOptions:function(t,i){return t.options=e.extend({},t.options,i),t.options},getParamString:function(t,i){var s=[];for(var e in t)t.hasOwnProperty(e)&&s.push(e+"="+t[e]);return(i&&-1!==i.indexOf("?")?"&":"?")+s.join("&")},template:function(t,i){return t.replace(/\{ *([\w_]+) *\}/g,function(t,s){var e=i[s];if(!i.hasOwnProperty(s))throw Error("No value provided for variable "+t);return e})},isArray:function(t){return"[object Array]"===Object.prototype.toString.call(t)},emptyImageUrl:"data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs="},function(){function i(i){var s,e,o=["webkit","moz","o","ms"];for(s=0;o.length>s&&!e;s++)e=t[o[s]+i];return e}function o(i){var s=+new Date,e=Math.max(0,16-(s-n));return n=s+e,t.setTimeout(i,e)}var n=0,a=t.requestAnimationFrame||i("RequestAnimationFrame")||o,r=t.cancelAnimationFrame||i("CancelAnimationFrame")||i("CancelRequestAnimationFrame")||function(i){t.clearTimeout(i)};e.Util.requestAnimFrame=function(i,n,r,h){return i=e.bind(i,n),r&&a===o?(i(),s):a.call(t,i,h)},e.Util.cancelAnimFrame=function(i){i&&r.call(t,i)}}(),e.extend=e.Util.extend,e.bind=e.Util.bind,e.stamp=e.Util.stamp,e.setOptions=e.Util.setOptions,e.Class=function(){},e.Class.extend=function(t){var i=function(){this.initialize&&this.initialize.apply(this,arguments),this._initHooks&&this.callInitHooks()},s=function(){};s.prototype=this.prototype;var o=new s;o.constructor=i,i.prototype=o;for(var n in this)this.hasOwnProperty(n)&&"prototype"!==n&&(i[n]=this[n]);t.statics&&(e.extend(i,t.statics),delete t.statics),t.includes&&(e.Util.extend.apply(null,[o].concat(t.includes)),delete t.includes),t.options&&o.options&&(t.options=e.extend({},o.options,t.options)),e.extend(o,t),o._initHooks=[];var a=this;return o.callInitHooks=function(){if(!this._initHooksCalled){a.prototype.callInitHooks&&a.prototype.callInitHooks.call(this),this._initHooksCalled=!0;for(var t=0,i=o._initHooks.length;i>t;t++)o._initHooks[t].call(this)}},i},e.Class.include=function(t){e.extend(this.prototype,t)},e.Class.mergeOptions=function(t){e.extend(this.prototype.options,t)},e.Class.addInitHook=function(t){var i=Array.prototype.slice.call(arguments,1),s="function"==typeof t?t:function(){this[t].apply(this,i)};this.prototype._initHooks=this.prototype._initHooks||[],this.prototype._initHooks.push(s)};var n="_leaflet_events";e.Mixin={},e.Mixin.Events={addEventListener:function(t,i,s){var o,a,r,h=this[n]=this[n]||{};if("object"==typeof t){for(o in t)t.hasOwnProperty(o)&&this.addEventListener(o,t[o],i);return this}for(t=e.Util.splitWords(t),a=0,r=t.length;r>a;a++)h[t[a]]=h[t[a]]||[],h[t[a]].push({action:i,context:s||this});return this},hasEventListeners:function(t){return n in this&&t in this[n]&&this[n][t].length>0},removeEventListener:function(t,i,s){var o,a,r,h,l,c=this[n];if("object"==typeof t){for(o in t)t.hasOwnProperty(o)&&this.removeEventListener(o,t[o],i);return this}for(t=e.Util.splitWords(t),a=0,r=t.length;r>a;a++)if(this.hasEventListeners(t[a]))for(h=c[t[a]],l=h.length-1;l>=0;l--)i&&h[l].action!==i||s&&h[l].context!==s||h.splice(l,1);return this},fireEvent:function(t,i){if(!this.hasEventListeners(t))return this;for(var s=e.extend({type:t,target:this},i),o=this[n][t].slice(),a=0,r=o.length;r>a;a++)o[a].action.call(o[a].context||this,s);return this}},e.Mixin.Events.on=e.Mixin.Events.addEventListener,e.Mixin.Events.off=e.Mixin.Events.removeEventListener,e.Mixin.Events.fire=e.Mixin.Events.fireEvent,function(){var o=!!t.ActiveXObject,n=o&&!t.XMLHttpRequest,a=o&&!i.querySelector,r=navigator.userAgent.toLowerCase(),h=-1!==r.indexOf("webkit"),l=-1!==r.indexOf("chrome"),c=-1!==r.indexOf("android"),m=-1!==r.search("android [23]"),u=typeof orientation!=s+"",d=t.navigator&&t.navigator.msPointerEnabled&&t.navigator.msMaxTouchPoints,p="devicePixelRatio"in t&&t.devicePixelRatio>1||"matchMedia"in t&&t.matchMedia("(min-resolution:144dpi)")&&t.matchMedia("(min-resolution:144dpi)").matches,_=i.documentElement,f=o&&"transition"in _.style,P="WebKitCSSMatrix"in t&&"m11"in new t.WebKitCSSMatrix,y="MozPerspective"in _.style,g="OTransition"in _.style,L=!t.L_DISABLE_3D&&(f||P||y||g),v=!t.L_NO_TOUCH&&function(){var t="ontouchstart";if(d||t in _)return!0;var s=i.createElement("div"),e=!1;return s.setAttribute?(s.setAttribute(t,"return;"),"function"==typeof s[t]&&(e=!0),s.removeAttribute(t),s=null,e):!1}();e.Browser={ie:o,ie6:n,ie7:a,webkit:h,android:c,android23:m,chrome:l,ie3d:f,webkit3d:P,gecko3d:y,opera3d:g,any3d:L,mobile:u,mobileWebkit:u&&h,mobileWebkit3d:u&&P,mobileOpera:u&&t.opera,touch:v,msTouch:d,retina:p}}(),e.Point=function(t,i,s){this.x=s?Math.round(t):t,this.y=s?Math.round(i):i},e.Point.prototype={clone:function(){return new e.Point(this.x,this.y)},add:function(t){return this.clone()._add(e.point(t))},_add:function(t){return this.x+=t.x,this.y+=t.y,this},subtract:function(t){return this.clone()._subtract(e.point(t))},_subtract:function(t){return this.x-=t.x,this.y-=t.y,this},divideBy:function(t){return this.clone()._divideBy(t)},_divideBy:function(t){return this.x/=t,this.y/=t,this},multiplyBy:function(t){return this.clone()._multiplyBy(t)},_multiplyBy:function(t){return this.x*=t,this.y*=t,this},round:function(){return this.clone()._round()},_round:function(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this},floor:function(){return this.clone()._floor()},_floor:function(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this},distanceTo:function(t){t=e.point(t);var i=t.x-this.x,s=t.y-this.y;return Math.sqrt(i*i+s*s)},equals:function(t){return t.x===this.x&&t.y===this.y},toString:function(){return"Point("+e.Util.formatNum(this.x)+", "+e.Util.formatNum(this.y)+")"}},e.point=function(t,i,s){return t instanceof e.Point?t:e.Util.isArray(t)?new e.Point(t[0],t[1]):isNaN(t)?t:new e.Point(t,i,s)},e.Bounds=function(t,i){if(t)for(var s=i?[t,i]:t,e=0,o=s.length;o>e;e++)this.extend(s[e])},e.Bounds.prototype={extend:function(t){return t=e.point(t),this.min||this.max?(this.min.x=Math.min(t.x,this.min.x),this.max.x=Math.max(t.x,this.max.x),this.min.y=Math.min(t.y,this.min.y),this.max.y=Math.max(t.y,this.max.y)):(this.min=t.clone(),this.max=t.clone()),this},getCenter:function(t){return new e.Point((this.min.x+this.max.x)/2,(this.min.y+this.max.y)/2,t)},getBottomLeft:function(){return new e.Point(this.min.x,this.max.y)},getTopRight:function(){return new e.Point(this.max.x,this.min.y)},getSize:function(){return this.max.subtract(this.min)},contains:function(t){var i,s;return t="number"==typeof t[0]||t instanceof e.Point?e.point(t):e.bounds(t),t instanceof e.Bounds?(i=t.min,s=t.max):i=s=t,i.x>=this.min.x&&s.x<=this.max.x&&i.y>=this.min.y&&s.y<=this.max.y},intersects:function(t){t=e.bounds(t);var i=this.min,s=this.max,o=t.min,n=t.max,a=n.x>=i.x&&o.x<=s.x,r=n.y>=i.y&&o.y<=s.y;return a&&r},isValid:function(){return!(!this.min||!this.max)}},e.bounds=function(t,i){return!t||t instanceof e.Bounds?t:new e.Bounds(t,i)},e.Transformation=function(t,i,s,e){this._a=t,this._b=i,this._c=s,this._d=e},e.Transformation.prototype={transform:function(t,i){return this._transform(t.clone(),i)},_transform:function(t,i){return i=i||1,t.x=i*(this._a*t.x+this._b),t.y=i*(this._c*t.y+this._d),t},untransform:function(t,i){return i=i||1,new e.Point((t.x/i-this._b)/this._a,(t.y/i-this._d)/this._c)}},e.DomUtil={get:function(t){return"string"==typeof t?i.getElementById(t):t},getStyle:function(t,s){var e=t.style[s];if(!e&&t.currentStyle&&(e=t.currentStyle[s]),(!e||"auto"===e)&&i.defaultView){var o=i.defaultView.getComputedStyle(t,null);e=o?o[s]:null}return"auto"===e?null:e},getViewportOffset:function(t){var s,o=0,n=0,a=t,r=i.body,h=e.Browser.ie7;do{if(o+=a.offsetTop||0,n+=a.offsetLeft||0,o+=parseInt(e.DomUtil.getStyle(a,"borderTopWidth"),10)||0,n+=parseInt(e.DomUtil.getStyle(a,"borderLeftWidth"),10)||0,s=e.DomUtil.getStyle(a,"position"),a.offsetParent===r&&"absolute"===s)break;if("fixed"===s){o+=r.scrollTop||0,n+=r.scrollLeft||0;break}a=a.offsetParent}while(a);a=t;do{if(a===r)break;o-=a.scrollTop||0,n-=a.scrollLeft||0,e.DomUtil.documentIsLtr()||!e.Browser.webkit&&!h||(n+=a.scrollWidth-a.clientWidth,h&&"hidden"!==e.DomUtil.getStyle(a,"overflow-y")&&"hidden"!==e.DomUtil.getStyle(a,"overflow")&&(n+=17)),a=a.parentNode}while(a);return new e.Point(n,o)},documentIsLtr:function(){return e.DomUtil._docIsLtrCached||(e.DomUtil._docIsLtrCached=!0,e.DomUtil._docIsLtr="ltr"===e.DomUtil.getStyle(i.body,"direction")),e.DomUtil._docIsLtr},create:function(t,s,e){var o=i.createElement(t);return o.className=s,e&&e.appendChild(o),o},disableTextSelection:function(){i.selection&&i.selection.empty&&i.selection.empty(),this._onselectstart||(this._onselectstart=i.onselectstart||null,i.onselectstart=e.Util.falseFn)},enableTextSelection:function(){i.onselectstart===e.Util.falseFn&&(i.onselectstart=this._onselectstart,this._onselectstart=null)},hasClass:function(t,i){return t.className.length>0&&RegExp("(^|\\s)"+i+"(\\s|$)").test(t.className)},addClass:function(t,i){e.DomUtil.hasClass(t,i)||(t.className+=(t.className?" ":"")+i)},removeClass:function(t,i){function s(t,s){return s===i?"":t}t.className=t.className.replace(/(\S+)\s*/g,s).replace(/(^\s+|\s+$)/,"")},setOpacity:function(t,i){if("opacity"in t.style)t.style.opacity=i;else if("filter"in t.style){var s=!1,e="DXImageTransform.Microsoft.Alpha";try{s=t.filters.item(e)}catch(o){}i=Math.round(100*i),s?(s.Enabled=100!==i,s.Opacity=i):t.style.filter+=" progid:"+e+"(opacity="+i+")"}},testProp:function(t){for(var s=i.documentElement.style,e=0;t.length>e;e++)if(t[e]in s)return t[e];return!1},getTranslateString:function(t){var i=e.Browser.webkit3d,s="translate"+(i?"3d":"")+"(",o=(i?",0":"")+")";return s+t.x+"px,"+t.y+"px"+o},getScaleString:function(t,i){var s=e.DomUtil.getTranslateString(i.add(i.multiplyBy(-1*t))),o=" scale("+t+") ";return s+o},setPosition:function(t,i,s){t._leaflet_pos=i,!s&&e.Browser.any3d?(t.style[e.DomUtil.TRANSFORM]=e.DomUtil.getTranslateString(i),e.Browser.mobileWebkit3d&&(t.style.WebkitBackfaceVisibility="hidden")):(t.style.left=i.x+"px",t.style.top=i.y+"px")},getPosition:function(t){return t._leaflet_pos}},e.DomUtil.TRANSFORM=e.DomUtil.testProp(["transform","WebkitTransform","OTransform","MozTransform","msTransform"]),e.DomUtil.TRANSITION=e.DomUtil.testProp(["webkitTransition","transition","OTransition","MozTransition","msTransition"]),e.DomUtil.TRANSITION_END="webkitTransition"===e.DomUtil.TRANSITION||"OTransition"===e.DomUtil.TRANSITION?e.DomUtil.TRANSITION+"End":"transitionend",e.LatLng=function(t,i){var s=parseFloat(t),e=parseFloat(i);if(isNaN(s)||isNaN(e))throw Error("Invalid LatLng object: ("+t+", "+i+")");this.lat=s,this.lng=e},e.extend(e.LatLng,{DEG_TO_RAD:Math.PI/180,RAD_TO_DEG:180/Math.PI,MAX_MARGIN:1e-9}),e.LatLng.prototype={equals:function(t){if(!t)return!1;t=e.latLng(t);var i=Math.max(Math.abs(this.lat-t.lat),Math.abs(this.lng-t.lng));return e.LatLng.MAX_MARGIN>=i},toString:function(t){return"LatLng("+e.Util.formatNum(this.lat,t)+", "+e.Util.formatNum(this.lng,t)+")"},distanceTo:function(t){t=e.latLng(t);var i=6378137,s=e.LatLng.DEG_TO_RAD,o=(t.lat-this.lat)*s,n=(t.lng-this.lng)*s,a=this.lat*s,r=t.lat*s,h=Math.sin(o/2),l=Math.sin(n/2),c=h*h+l*l*Math.cos(a)*Math.cos(r);return 2*i*Math.atan2(Math.sqrt(c),Math.sqrt(1-c))},wrap:function(t,i){var s=this.lng;return t=t||-180,i=i||180,s=(s+i)%(i-t)+(t>s||s===i?i:t),new e.LatLng(this.lat,s)}},e.latLng=function(t,i){return t instanceof e.LatLng?t:e.Util.isArray(t)?new e.LatLng(t[0],t[1]):isNaN(t)?t:new e.LatLng(t,i)},e.LatLngBounds=function(t,i){if(t)for(var s=i?[t,i]:t,e=0,o=s.length;o>e;e++)this.extend(s[e])},e.LatLngBounds.prototype={extend:function(t){return t="number"==typeof t[0]||"string"==typeof t[0]||t instanceof e.LatLng?e.latLng(t):e.latLngBounds(t),t instanceof e.LatLng?this._southWest||this._northEast?(this._southWest.lat=Math.min(t.lat,this._southWest.lat),this._southWest.lng=Math.min(t.lng,this._southWest.lng),this._northEast.lat=Math.max(t.lat,this._northEast.lat),this._northEast.lng=Math.max(t.lng,this._northEast.lng)):(this._southWest=new e.LatLng(t.lat,t.lng),this._northEast=new e.LatLng(t.lat,t.lng)):t instanceof e.LatLngBounds&&(this.extend(t._southWest),this.extend(t._northEast)),this},pad:function(t){var i=this._southWest,s=this._northEast,o=Math.abs(i.lat-s.lat)*t,n=Math.abs(i.lng-s.lng)*t;return new e.LatLngBounds(new e.LatLng(i.lat-o,i.lng-n),new e.LatLng(s.lat+o,s.lng+n))},getCenter:function(){return new e.LatLng((this._southWest.lat+this._northEast.lat)/2,(this._southWest.lng+this._northEast.lng)/2)},getSouthWest:function(){return this._southWest},getNorthEast:function(){return this._northEast},getNorthWest:function(){return new e.LatLng(this._northEast.lat,this._southWest.lng)},getSouthEast:function(){return new e.LatLng(this._southWest.lat,this._northEast.lng)},contains:function(t){t="number"==typeof t[0]||t instanceof e.LatLng?e.latLng(t):e.latLngBounds(t);var i,s,o=this._southWest,n=this._northEast;return t instanceof e.LatLngBounds?(i=t.getSouthWest(),s=t.getNorthEast()):i=s=t,i.lat>=o.lat&&s.lat<=n.lat&&i.lng>=o.lng&&s.lng<=n.lng},intersects:function(t){t=e.latLngBounds(t);var i=this._southWest,s=this._northEast,o=t.getSouthWest(),n=t.getNorthEast(),a=n.lat>=i.lat&&o.lat<=s.lat,r=n.lng>=i.lng&&o.lng<=s.lng;return a&&r},toBBoxString:function(){var t=this._southWest,i=this._northEast;return[t.lng,t.lat,i.lng,i.lat].join(",")},equals:function(t){return t?(t=e.latLngBounds(t),this._southWest.equals(t.getSouthWest())&&this._northEast.equals(t.getNorthEast())):!1},isValid:function(){return!(!this._southWest||!this._northEast)}},e.latLngBounds=function(t,i){return!t||t instanceof e.LatLngBounds?t:new e.LatLngBounds(t,i)},e.Projection={},e.Projection.SphericalMercator={MAX_LATITUDE:85.0511287798,project:function(t){var i=e.LatLng.DEG_TO_RAD,s=this.MAX_LATITUDE,o=Math.max(Math.min(s,t.lat),-s),n=t.lng*i,a=o*i;return a=Math.log(Math.tan(Math.PI/4+a/2)),new e.Point(n,a)},unproject:function(t){var i=e.LatLng.RAD_TO_DEG,s=t.x*i,o=(2*Math.atan(Math.exp(t.y))-Math.PI/2)*i;return new e.LatLng(o,s)}},e.Projection.LonLat={project:function(t){return new e.Point(t.lng,t.lat)},unproject:function(t){return new e.LatLng(t.y,t.x)}},e.CRS={latLngToPoint:function(t,i){var s=this.projection.project(t),e=this.scale(i);return this.transformation._transform(s,e)},pointToLatLng:function(t,i){var s=this.scale(i),e=this.transformation.untransform(t,s);return this.projection.unproject(e)},project:function(t){return this.projection.project(t)},scale:function(t){return 256*Math.pow(2,t)}},e.CRS.Simple=e.extend({},e.CRS,{projection:e.Projection.LonLat,transformation:new e.Transformation(1,0,-1,0),scale:function(t){return Math.pow(2,t)}}),e.CRS.EPSG3857=e.extend({},e.CRS,{code:"EPSG:3857",projection:e.Projection.SphericalMercator,transformation:new e.Transformation(.5/Math.PI,.5,-.5/Math.PI,.5),project:function(t){var i=this.projection.project(t),s=6378137;return i.multiplyBy(s)}}),e.CRS.EPSG900913=e.extend({},e.CRS.EPSG3857,{code:"EPSG:900913"}),e.CRS.EPSG4326=e.extend({},e.CRS,{code:"EPSG:4326",projection:e.Projection.LonLat,transformation:new e.Transformation(1/360,.5,-1/360,.5)}),e.Map=e.Class.extend({includes:e.Mixin.Events,options:{crs:e.CRS.EPSG3857,fadeAnimation:e.DomUtil.TRANSITION&&!e.Browser.android23,trackResize:!0,markerZoomAnimation:e.DomUtil.TRANSITION&&e.Browser.any3d},initialize:function(t,i){i=e.setOptions(this,i),this._initContainer(t),this._initLayout(),this.callInitHooks(),this._initEvents(),i.maxBounds&&this.setMaxBounds(i.maxBounds),i.center&&i.zoom!==s&&this.setView(e.latLng(i.center),i.zoom,!0),this._initLayers(i.layers)},setView:function(t,i){return this._resetView(e.latLng(t),this._limitZoom(i)),this},setZoom:function(t){return this.setView(this.getCenter(),t)},zoomIn:function(t){return this.setZoom(this._zoom+(t||1))},zoomOut:function(t){return this.setZoom(this._zoom-(t||1))},fitBounds:function(t){var i=this.getBoundsZoom(t);return this.setView(e.latLngBounds(t).getCenter(),i)},fitWorld:function(){var t=new e.LatLng(-60,-170),i=new e.LatLng(85,179);return this.fitBounds(new e.LatLngBounds(t,i))},panTo:function(t){return this.setView(t,this._zoom)},panBy:function(t){return this.fire("movestart"),this._rawPanBy(e.point(t)),this.fire("move"),this.fire("moveend")},setMaxBounds:function(t){if(t=e.latLngBounds(t),this.options.maxBounds=t,!t)return this._boundsMinZoom=null,this;var i=this.getBoundsZoom(t,!0);return this._boundsMinZoom=i,this._loaded&&(i>this._zoom?this.setView(t.getCenter(),i):this.panInsideBounds(t)),this},panInsideBounds:function(t){t=e.latLngBounds(t);var i=this.getBounds(),s=this.project(i.getSouthWest()),o=this.project(i.getNorthEast()),n=this.project(t.getSouthWest()),a=this.project(t.getNorthEast()),r=0,h=0;return o.ya.x&&(r=a.x-o.x),s.y>n.y&&(h=n.y-s.y),s.x=r);return m&&i?null:i?r:r-1},getSize:function(){return(!this._size||this._sizeChanged)&&(this._size=new e.Point(this._container.clientWidth,this._container.clientHeight),this._sizeChanged=!1),this._size.clone()},getPixelBounds:function(){var t=this._getTopLeftPoint();return new e.Bounds(t,t.add(this.getSize()))},getPixelOrigin:function(){return this._initialTopLeftPoint},getPanes:function(){return this._panes},getContainer:function(){return this._container},getZoomScale:function(t){var i=this.options.crs;return i.scale(t)/i.scale(this._zoom)},getScaleZoom:function(t){return this._zoom+Math.log(t)/Math.LN2},project:function(t,i){return i=i===s?this._zoom:i,this.options.crs.latLngToPoint(e.latLng(t),i)},unproject:function(t,i){return i=i===s?this._zoom:i,this.options.crs.pointToLatLng(e.point(t),i)},layerPointToLatLng:function(t){var i=e.point(t).add(this._initialTopLeftPoint);return this.unproject(i)},latLngToLayerPoint:function(t){var i=this.project(e.latLng(t))._round();return i._subtract(this._initialTopLeftPoint)},containerPointToLayerPoint:function(t){return e.point(t).subtract(this._getMapPanePos())},layerPointToContainerPoint:function(t){return e.point(t).add(this._getMapPanePos())},containerPointToLatLng:function(t){var i=this.containerPointToLayerPoint(e.point(t));return this.layerPointToLatLng(i)},latLngToContainerPoint:function(t){return this.layerPointToContainerPoint(this.latLngToLayerPoint(e.latLng(t)))},mouseEventToContainerPoint:function(t){return e.DomEvent.getMousePosition(t,this._container)},mouseEventToLayerPoint:function(t){return this.containerPointToLayerPoint(this.mouseEventToContainerPoint(t))},mouseEventToLatLng:function(t){return this.layerPointToLatLng(this.mouseEventToLayerPoint(t))},_initContainer:function(t){var i=this._container=e.DomUtil.get(t);if(i._leaflet)throw Error("Map container is already initialized.");i._leaflet=!0},_initLayout:function(){var t=this._container;e.DomUtil.addClass(t,"leaflet-container"),e.Browser.touch&&e.DomUtil.addClass(t,"leaflet-touch"),this.options.fadeAnimation&&e.DomUtil.addClass(t,"leaflet-fade-anim");var i=e.DomUtil.getStyle(t,"position");"absolute"!==i&&"relative"!==i&&"fixed"!==i&&(t.style.position="relative"),this._initPanes(),this._initControlPos&&this._initControlPos()},_initPanes:function(){var t=this._panes={};this._mapPane=t.mapPane=this._createPane("leaflet-map-pane",this._container),this._tilePane=t.tilePane=this._createPane("leaflet-tile-pane",this._mapPane),t.objectsPane=this._createPane("leaflet-objects-pane",this._mapPane),t.shadowPane=this._createPane("leaflet-shadow-pane"),t.overlayPane=this._createPane("leaflet-overlay-pane"),t.markerPane=this._createPane("leaflet-marker-pane"),t.popupPane=this._createPane("leaflet-popup-pane");var i=" leaflet-zoom-hide";this.options.markerZoomAnimation||(e.DomUtil.addClass(t.markerPane,i),e.DomUtil.addClass(t.shadowPane,i),e.DomUtil.addClass(t.popupPane,i))},_createPane:function(t,i){return e.DomUtil.create("div",t,i||this._panes.objectsPane)},_initLayers:function(t){t=t?e.Util.isArray(t)?t:[t]:[],this._layers={},this._zoomBoundLayers={},this._tileLayersNum=0;var i,s;for(i=0,s=t.length;s>i;i++)this.addLayer(t[i])},_resetView:function(t,i,s,o){var n=this._zoom!==i;o||(this.fire("movestart"),n&&this.fire("zoomstart")),this._zoom=i,this._initialTopLeftPoint=this._getNewTopLeftPoint(t),s?this._initialTopLeftPoint._add(this._getMapPanePos()):e.DomUtil.setPosition(this._mapPane,new e.Point(0,0)),this._tileLayersToLoad=this._tileLayersNum;var a=!this._loaded;this._loaded=!0,this.fire("viewreset",{hard:!s}),this.fire("move"),(n||o)&&this.fire("zoomend"),this.fire("moveend",{hard:!s}),a&&this.fire("load")},_rawPanBy:function(t){e.DomUtil.setPosition(this._mapPane,this._getMapPanePos().subtract(t))},_updateZoomLevels:function(){var t,i=1/0,e=-1/0;for(t in this._zoomBoundLayers)if(this._zoomBoundLayers.hasOwnProperty(t)){var o=this._zoomBoundLayers[t];isNaN(o.options.minZoom)||(i=Math.min(i,o.options.minZoom)),isNaN(o.options.maxZoom)||(e=Math.max(e,o.options.maxZoom))}t===s?this._layersMaxZoom=this._layersMinZoom=s:(this._layersMaxZoom=e,this._layersMinZoom=i)},_initEvents:function(){if(e.DomEvent){e.DomEvent.on(this._container,"click",this._onMouseClick,this);var i,s,o=["dblclick","mousedown","mouseup","mouseenter","mouseleave","mousemove","contextmenu"];for(i=0,s=o.length;s>i;i++)e.DomEvent.on(this._container,o[i],this._fireMouseEvent,this);this.options.trackResize&&e.DomEvent.on(t,"resize",this._onResize,this)}},_onResize:function(){e.Util.cancelAnimFrame(this._resizeRequest),this._resizeRequest=e.Util.requestAnimFrame(this.invalidateSize,this,!1,this._container)},_onMouseClick:function(t){!this._loaded||this.dragging&&this.dragging.moved()||(this.fire("preclick"),this._fireMouseEvent(t))},_fireMouseEvent:function(t){if(this._loaded){var i=t.type;if(i="mouseenter"===i?"mouseover":"mouseleave"===i?"mouseout":i,this.hasEventListeners(i)){"contextmenu"===i&&e.DomEvent.preventDefault(t);var s=this.mouseEventToContainerPoint(t),o=this.containerPointToLayerPoint(s),n=this.layerPointToLatLng(o);this.fire(i,{latlng:n,layerPoint:o,containerPoint:s,originalEvent:t})}}},_onTileLayerLoad:function(){this._tileLayersToLoad--,this._tileLayersNum&&!this._tileLayersToLoad&&this._tileBg&&(clearTimeout(this._clearTileBgTimer),this._clearTileBgTimer=setTimeout(e.bind(this._clearTileBg,this),500))},whenReady:function(t,i){return this._loaded?t.call(i||this,this):this.on("load",t,i),this},_getMapPanePos:function(){return e.DomUtil.getPosition(this._mapPane)},_getTopLeftPoint:function(){if(!this._loaded)throw Error("Set map center and zoom first.");return this._initialTopLeftPoint.subtract(this._getMapPanePos())},_getNewTopLeftPoint:function(t,i){var s=this.getSize()._divideBy(2);return this.project(t,i)._subtract(s)._round()},_latLngToNewLayerPoint:function(t,i,s){var e=this._getNewTopLeftPoint(s,i).add(this._getMapPanePos());return this.project(t,i)._subtract(e)},_getCenterLayerPoint:function(){return this.containerPointToLayerPoint(this.getSize()._divideBy(2))},_getCenterOffset:function(t){return this.latLngToLayerPoint(t).subtract(this._getCenterLayerPoint())},_limitZoom:function(t){var i=this.getMinZoom(),s=this.getMaxZoom();return Math.max(i,Math.min(s,t))}}),e.map=function(t,i){return new e.Map(t,i)},e.Projection.Mercator={MAX_LATITUDE:85.0840591556,R_MINOR:6356752.3142,R_MAJOR:6378137,project:function(t){var i=e.LatLng.DEG_TO_RAD,s=this.MAX_LATITUDE,o=Math.max(Math.min(s,t.lat),-s),n=this.R_MAJOR,a=this.R_MINOR,r=t.lng*i*n,h=o*i,l=a/n,c=Math.sqrt(1-l*l),m=c*Math.sin(h);m=Math.pow((1-m)/(1+m),.5*c);var u=Math.tan(.5*(.5*Math.PI-h))/m;return h=-a*Math.log(u),new e.Point(r,h)},unproject:function(t){for(var i,s=e.LatLng.RAD_TO_DEG,o=this.R_MAJOR,n=this.R_MINOR,a=t.x*s/o,r=n/o,h=Math.sqrt(1-r*r),l=Math.exp(-t.y/n),c=Math.PI/2-2*Math.atan(l),m=15,u=1e-7,d=m,p=.1;Math.abs(p)>u&&--d>0;)i=h*Math.sin(c),p=Math.PI/2-2*Math.atan(l*Math.pow((1-i)/(1+i),.5*h))-c,c+=p;return new e.LatLng(c*s,a)}},e.CRS.EPSG3395=e.extend({},e.CRS,{code:"EPSG:3395",projection:e.Projection.Mercator,transformation:function(){var t=e.Projection.Mercator,i=t.R_MAJOR,s=t.R_MINOR;return new e.Transformation(.5/(Math.PI*i),.5,-.5/(Math.PI*s),.5)}()}),e.TileLayer=e.Class.extend({includes:e.Mixin.Events,options:{minZoom:0,maxZoom:18,tileSize:256,subdomains:"abc",errorTileUrl:"",attribution:"",zoomOffset:0,opacity:1,unloadInvisibleTiles:e.Browser.mobile,updateWhenIdle:e.Browser.mobile},initialize:function(t,i){i=e.setOptions(this,i),i.detectRetina&&e.Browser.retina&&i.maxZoom>0&&(i.tileSize=Math.floor(i.tileSize/2),i.zoomOffset++,i.minZoom>0&&i.minZoom--,this.options.maxZoom--),this._url=t;var s=this.options.subdomains;"string"==typeof s&&(this.options.subdomains=s.split(""))},onAdd:function(t){this._map=t,this._initContainer(),this._createTileProto(),t.on({viewreset:this._resetCallback,moveend:this._update},this),this.options.updateWhenIdle||(this._limitedUpdate=e.Util.limitExecByInterval(this._update,150,this),t.on("move",this._limitedUpdate,this)),this._reset(),this._update()},addTo:function(t){return t.addLayer(this),this},onRemove:function(t){this._container.parentNode.removeChild(this._container),t.off({viewreset:this._resetCallback,moveend:this._update},this),this.options.updateWhenIdle||t.off("move",this._limitedUpdate,this),this._container=null,this._map=null},bringToFront:function(){var t=this._map._panes.tilePane;return this._container&&(t.appendChild(this._container),this._setAutoZIndex(t,Math.max)),this},bringToBack:function(){var t=this._map._panes.tilePane;return this._container&&(t.insertBefore(this._container,t.firstChild),this._setAutoZIndex(t,Math.min)),this},getAttribution:function(){return this.options.attribution},setOpacity:function(t){return this.options.opacity=t,this._map&&this._updateOpacity(),this},setZIndex:function(t){return this.options.zIndex=t,this._updateZIndex(),this},setUrl:function(t,i){return this._url=t,i||this.redraw(),this},redraw:function(){return this._map&&(this._map._panes.tilePane.empty=!1,this._reset(!0),this._update()),this},_updateZIndex:function(){this._container&&this.options.zIndex!==s&&(this._container.style.zIndex=this.options.zIndex)},_setAutoZIndex:function(t,i){var s,e,o,n=t.children,a=-i(1/0,-1/0);for(e=0,o=n.length;o>e;e++)n[e]!==this._container&&(s=parseInt(n[e].style.zIndex,10),isNaN(s)||(a=i(a,s)));this.options.zIndex=this._container.style.zIndex=(isFinite(a)?a:0)+i(1,-1)},_updateOpacity:function(){e.DomUtil.setOpacity(this._container,this.options.opacity);var t,i=this._tiles;if(e.Browser.webkit)for(t in i)i.hasOwnProperty(t)&&(i[t].style.webkitTransform+=" translate(0,0)")},_initContainer:function(){var t=this._map._panes.tilePane;(!this._container||t.empty)&&(this._container=e.DomUtil.create("div","leaflet-layer"),this._updateZIndex(),t.appendChild(this._container),1>this.options.opacity&&this._updateOpacity())},_resetCallback:function(t){this._reset(t.hard)},_reset:function(t){var i=this._tiles;for(var s in i)i.hasOwnProperty(s)&&this.fire("tileunload",{tile:i[s]});this._tiles={},this._tilesToLoad=0,this.options.reuseTiles&&(this._unusedTiles=[]),t&&this._container&&(this._container.innerHTML=""),this._initContainer()},_update:function(){if(this._map){var t=this._map.getPixelBounds(),i=this._map.getZoom(),s=this.options.tileSize;if(!(i>this.options.maxZoom||this.options.minZoom>i)){var o=new e.Point(Math.floor(t.min.x/s),Math.floor(t.min.y/s)),n=new e.Point(Math.floor(t.max.x/s),Math.floor(t.max.y/s)),a=new e.Bounds(o,n);this._addTilesFromCenterOut(a),(this.options.unloadInvisibleTiles||this.options.reuseTiles)&&this._removeOtherTiles(a)}}},_addTilesFromCenterOut:function(t){var s,o,n,a=[],r=t.getCenter();for(s=t.min.y;t.max.y>=s;s++)for(o=t.min.x;t.max.x>=o;o++)n=new e.Point(o,s),this._tileShouldBeLoaded(n)&&a.push(n);var h=a.length;if(0!==h){a.sort(function(t,i){return t.distanceTo(r)-i.distanceTo(r)});var l=i.createDocumentFragment();for(this._tilesToLoad||this.fire("loading"),this._tilesToLoad+=h,o=0;h>o;o++)this._addTile(a[o],l);this._container.appendChild(l)}},_tileShouldBeLoaded:function(t){ -if(t.x+":"+t.y in this._tiles)return!1;if(!this.options.continuousWorld){var i=this._getWrapTileNum();if(this.options.noWrap&&(0>t.x||t.x>=i)||0>t.y||t.y>=i)return!1}return!0},_removeOtherTiles:function(t){var i,s,e,o;for(o in this._tiles)this._tiles.hasOwnProperty(o)&&(i=o.split(":"),s=parseInt(i[0],10),e=parseInt(i[1],10),(t.min.x>s||s>t.max.x||t.min.y>e||e>t.max.y)&&this._removeTile(o))},_removeTile:function(t){var i=this._tiles[t];this.fire("tileunload",{tile:i,url:i.src}),this.options.reuseTiles?(e.DomUtil.removeClass(i,"leaflet-tile-loaded"),this._unusedTiles.push(i)):i.parentNode===this._container&&this._container.removeChild(i),e.Browser.android||(i.src=e.Util.emptyImageUrl),delete this._tiles[t]},_addTile:function(t,i){var s=this._getTilePos(t),o=this._getTile();e.DomUtil.setPosition(o,s,e.Browser.chrome||e.Browser.android23),this._tiles[t.x+":"+t.y]=o,this._loadTile(o,t),o.parentNode!==this._container&&i.appendChild(o)},_getZoomForUrl:function(){var t=this.options,i=this._map.getZoom();return t.zoomReverse&&(i=t.maxZoom-i),i+t.zoomOffset},_getTilePos:function(t){var i=this._map.getPixelOrigin(),s=this.options.tileSize;return t.multiplyBy(s).subtract(i)},getTileUrl:function(t){return this._adjustTilePoint(t),e.Util.template(this._url,e.extend({s:this._getSubdomain(t),z:this._getZoomForUrl(),x:t.x,y:t.y},this.options))},_getWrapTileNum:function(){return Math.pow(2,this._getZoomForUrl())},_adjustTilePoint:function(t){var i=this._getWrapTileNum();this.options.continuousWorld||this.options.noWrap||(t.x=(t.x%i+i)%i),this.options.tms&&(t.y=i-t.y-1)},_getSubdomain:function(t){var i=(t.x+t.y)%this.options.subdomains.length;return this.options.subdomains[i]},_createTileProto:function(){var t=this._tileImg=e.DomUtil.create("img","leaflet-tile");t.style.width=t.style.height=this.options.tileSize+"px",t.galleryimg="no"},_getTile:function(){if(this.options.reuseTiles&&this._unusedTiles.length>0){var t=this._unusedTiles.pop();return this._resetTile(t),t}return this._createTile()},_resetTile:function(){},_createTile:function(){var t=this._tileImg.cloneNode(!1);return t.onselectstart=t.onmousemove=e.Util.falseFn,t},_loadTile:function(t,i){t._layer=this,t.onload=this._tileOnLoad,t.onerror=this._tileOnError,t.src=this.getTileUrl(i)},_tileLoaded:function(){this._tilesToLoad--,this._tilesToLoad||this.fire("load")},_tileOnLoad:function(){var t=this._layer;this.src!==e.Util.emptyImageUrl&&(e.DomUtil.addClass(this,"leaflet-tile-loaded"),t.fire("tileload",{tile:this,url:this.src})),t._tileLoaded()},_tileOnError:function(){var t=this._layer;t.fire("tileerror",{tile:this,url:this.src});var i=t.options.errorTileUrl;i&&(this.src=i),t._tileLoaded()}}),e.tileLayer=function(t,i){return new e.TileLayer(t,i)},e.TileLayer.WMS=e.TileLayer.extend({defaultWmsParams:{service:"WMS",request:"GetMap",version:"1.1.1",layers:"",styles:"",format:"image/jpeg",transparent:!1},initialize:function(t,i){this._url=t;var s=e.extend({},this.defaultWmsParams);s.width=s.height=i.detectRetina&&e.Browser.retina?2*this.options.tileSize:this.options.tileSize;for(var o in i)this.options.hasOwnProperty(o)||(s[o]=i[o]);this.wmsParams=s,e.setOptions(this,i)},onAdd:function(t){var i=parseFloat(this.wmsParams.version)>=1.3?"crs":"srs";this.wmsParams[i]=t.options.crs.code,e.TileLayer.prototype.onAdd.call(this,t)},getTileUrl:function(t,i){this._adjustTilePoint(t);var s=this._map,o=s.options.crs,n=this.options.tileSize,a=t.multiplyBy(n),r=a.add(new e.Point(n,n)),h=o.project(s.unproject(a,i)),l=o.project(s.unproject(r,i)),c=[h.x,l.y,l.x,h.y].join(","),m=e.Util.template(this._url,{s:this._getSubdomain(t)});return m+e.Util.getParamString(this.wmsParams,m)+"&bbox="+c},setParams:function(t,i){return e.extend(this.wmsParams,t),i||this.redraw(),this}}),e.tileLayer.wms=function(t,i){return new e.TileLayer.WMS(t,i)},e.TileLayer.Canvas=e.TileLayer.extend({options:{async:!1},initialize:function(t){e.setOptions(this,t)},redraw:function(){var t=this._tiles;for(var i in t)t.hasOwnProperty(i)&&this._redrawTile(t[i])},_redrawTile:function(t){this.drawTile(t,t._tilePoint,this._map._zoom)},_createTileProto:function(){var t=this._canvasProto=e.DomUtil.create("canvas","leaflet-tile");t.width=t.height=this.options.tileSize},_createTile:function(){var t=this._canvasProto.cloneNode(!1);return t.onselectstart=t.onmousemove=e.Util.falseFn,t},_loadTile:function(t,i){t._layer=this,t._tilePoint=i,this._redrawTile(t),this.options.async||this.tileDrawn(t)},drawTile:function(){},tileDrawn:function(t){this._tileOnLoad.call(t)}}),e.tileLayer.canvas=function(t){return new e.TileLayer.Canvas(t)},e.ImageOverlay=e.Class.extend({includes:e.Mixin.Events,options:{opacity:1},initialize:function(t,i,s){this._url=t,this._bounds=e.latLngBounds(i),e.setOptions(this,s)},onAdd:function(t){this._map=t,this._image||this._initImage(),t._panes.overlayPane.appendChild(this._image),t.on("viewreset",this._reset,this),t.options.zoomAnimation&&e.Browser.any3d&&t.on("zoomanim",this._animateZoom,this),this._reset()},onRemove:function(t){t.getPanes().overlayPane.removeChild(this._image),t.off("viewreset",this._reset,this),t.options.zoomAnimation&&t.off("zoomanim",this._animateZoom,this)},addTo:function(t){return t.addLayer(this),this},setOpacity:function(t){return this.options.opacity=t,this._updateOpacity(),this},bringToFront:function(){return this._image&&this._map._panes.overlayPane.appendChild(this._image),this},bringToBack:function(){var t=this._map._panes.overlayPane;return this._image&&t.insertBefore(this._image,t.firstChild),this},_initImage:function(){this._image=e.DomUtil.create("img","leaflet-image-layer"),this._map.options.zoomAnimation&&e.Browser.any3d?e.DomUtil.addClass(this._image,"leaflet-zoom-animated"):e.DomUtil.addClass(this._image,"leaflet-zoom-hide"),this._updateOpacity(),e.extend(this._image,{galleryimg:"no",onselectstart:e.Util.falseFn,onmousemove:e.Util.falseFn,onload:e.bind(this._onImageLoad,this),src:this._url})},_animateZoom:function(t){var i=this._map,s=this._image,o=i.getZoomScale(t.zoom),n=this._bounds.getNorthWest(),a=this._bounds.getSouthEast(),r=i._latLngToNewLayerPoint(n,t.zoom,t.center),h=i._latLngToNewLayerPoint(a,t.zoom,t.center)._subtract(r),l=r._add(h._multiplyBy(.5*(1-1/o)));s.style[e.DomUtil.TRANSFORM]=e.DomUtil.getTranslateString(l)+" scale("+o+") "},_reset:function(){var t=this._image,i=this._map.latLngToLayerPoint(this._bounds.getNorthWest()),s=this._map.latLngToLayerPoint(this._bounds.getSouthEast())._subtract(i);e.DomUtil.setPosition(t,i),t.style.width=s.x+"px",t.style.height=s.y+"px"},_onImageLoad:function(){this.fire("load")},_updateOpacity:function(){e.DomUtil.setOpacity(this._image,this.options.opacity)}}),e.imageOverlay=function(t,i,s){return new e.ImageOverlay(t,i,s)},e.Icon=e.Class.extend({options:{className:""},initialize:function(t){e.setOptions(this,t)},createIcon:function(){return this._createIcon("icon")},createShadow:function(){return this._createIcon("shadow")},_createIcon:function(t){var i=this._getIconUrl(t);if(!i){if("icon"===t)throw Error("iconUrl not set in Icon options (see the docs).");return null}var s=this._createImg(i);return this._setIconStyles(s,t),s},_setIconStyles:function(t,i){var s,o=this.options,n=e.point(o[i+"Size"]);s="shadow"===i?e.point(o.shadowAnchor||o.iconAnchor):e.point(o.iconAnchor),!s&&n&&(s=n.divideBy(2,!0)),t.className="leaflet-marker-"+i+" "+o.className,s&&(t.style.marginLeft=-s.x+"px",t.style.marginTop=-s.y+"px"),n&&(t.style.width=n.x+"px",t.style.height=n.y+"px")},_createImg:function(t){var s;return e.Browser.ie6?(s=i.createElement("div"),s.style.filter='progid:DXImageTransform.Microsoft.AlphaImageLoader(src="'+t+'")'):(s=i.createElement("img"),s.src=t),s},_getIconUrl:function(t){return e.Browser.retina&&this.options[t+"RetinaUrl"]?this.options[t+"RetinaUrl"]:this.options[t+"Url"]}}),e.icon=function(t){return new e.Icon(t)},e.Icon.Default=e.Icon.extend({options:{iconSize:new e.Point(25,41),iconAnchor:new e.Point(12,41),popupAnchor:new e.Point(1,-34),shadowSize:new e.Point(41,41)},_getIconUrl:function(t){var i=t+"Url";if(this.options[i])return this.options[i];e.Browser.retina&&"icon"===t&&(t+="@2x");var s=e.Icon.Default.imagePath;if(!s)throw Error("Couldn't autodetect L.Icon.Default.imagePath, set it manually.");return"marker-"+t+".png"}}),e.Icon.Default.imagePath=function(){var t,s,e,o,n=i.getElementsByTagName("script"),a=/\/?leaflet[\-\._]?([\w\-\._]*)\.js\??/;for(t=0,s=n.length;s>t;t++)if(e=n[t].src,o=e.match(a))return e.split(a)[0]+""}(),e.Marker=e.Class.extend({includes:e.Mixin.Events,options:{icon:new e.Icon.Default,title:"",clickable:!0,draggable:!1,zIndexOffset:0,opacity:1,riseOnHover:!1,riseOffset:250},initialize:function(t,i){e.setOptions(this,i),this._latlng=e.latLng(t)},onAdd:function(t){this._map=t,t.on("viewreset",this.update,this),this._initIcon(),this.update(),t.options.zoomAnimation&&t.options.markerZoomAnimation&&t.on("zoomanim",this._animateZoom,this)},addTo:function(t){return t.addLayer(this),this},onRemove:function(t){this._removeIcon(),this.fire("remove"),t.off({viewreset:this.update,zoomanim:this._animateZoom},this),this._map=null},getLatLng:function(){return this._latlng},setLatLng:function(t){return this._latlng=e.latLng(t),this.update(),this.fire("move",{latlng:this._latlng})},setZIndexOffset:function(t){return this.options.zIndexOffset=t,this.update(),this},setIcon:function(t){return this._map&&this._removeIcon(),this.options.icon=t,this._map&&(this._initIcon(),this.update()),this},update:function(){if(this._icon){var t=this._map.latLngToLayerPoint(this._latlng).round();this._setPos(t)}return this},_initIcon:function(){var t=this.options,i=this._map,s=i.options.zoomAnimation&&i.options.markerZoomAnimation,o=s?"leaflet-zoom-animated":"leaflet-zoom-hide",n=!1;this._icon||(this._icon=t.icon.createIcon(),t.title&&(this._icon.title=t.title),this._initInteraction(),n=1>this.options.opacity,e.DomUtil.addClass(this._icon,o),t.riseOnHover&&e.DomEvent.on(this._icon,"mouseover",this._bringToFront,this).on(this._icon,"mouseout",this._resetZIndex,this)),this._shadow||(this._shadow=t.icon.createShadow(),this._shadow&&(e.DomUtil.addClass(this._shadow,o),n=1>this.options.opacity)),n&&this._updateOpacity();var a=this._map._panes;a.markerPane.appendChild(this._icon),this._shadow&&a.shadowPane.appendChild(this._shadow)},_removeIcon:function(){var t=this._map._panes;this.options.riseOnHover&&e.DomEvent.off(this._icon,"mouseover",this._bringToFront).off(this._icon,"mouseout",this._resetZIndex),t.markerPane.removeChild(this._icon),this._shadow&&t.shadowPane.removeChild(this._shadow),this._icon=this._shadow=null},_setPos:function(t){e.DomUtil.setPosition(this._icon,t),this._shadow&&e.DomUtil.setPosition(this._shadow,t),this._zIndex=t.y+this.options.zIndexOffset,this._resetZIndex()},_updateZIndex:function(t){this._icon.style.zIndex=this._zIndex+t},_animateZoom:function(t){var i=this._map._latLngToNewLayerPoint(this._latlng,t.zoom,t.center);this._setPos(i)},_initInteraction:function(){if(this.options.clickable){var t=this._icon,i=["dblclick","mousedown","mouseover","mouseout","contextmenu"];e.DomUtil.addClass(t,"leaflet-clickable"),e.DomEvent.on(t,"click",this._onMouseClick,this);for(var s=0;i.length>s;s++)e.DomEvent.on(t,i[s],this._fireMouseEvent,this);e.Handler.MarkerDrag&&(this.dragging=new e.Handler.MarkerDrag(this),this.options.draggable&&this.dragging.enable())}},_onMouseClick:function(t){var i=this.dragging&&this.dragging.moved();(this.hasEventListeners(t.type)||i)&&e.DomEvent.stopPropagation(t),i||(this.dragging&&this.dragging._enabled||!this._map.dragging||!this._map.dragging.moved())&&this.fire(t.type,{originalEvent:t})},_fireMouseEvent:function(t){this.fire(t.type,{originalEvent:t}),"contextmenu"===t.type&&this.hasEventListeners(t.type)&&e.DomEvent.preventDefault(t),"mousedown"!==t.type&&e.DomEvent.stopPropagation(t)},setOpacity:function(t){this.options.opacity=t,this._map&&this._updateOpacity()},_updateOpacity:function(){e.DomUtil.setOpacity(this._icon,this.options.opacity),this._shadow&&e.DomUtil.setOpacity(this._shadow,this.options.opacity)},_bringToFront:function(){this._updateZIndex(this.options.riseOffset)},_resetZIndex:function(){this._updateZIndex(0)}}),e.marker=function(t,i){return new e.Marker(t,i)},e.DivIcon=e.Icon.extend({options:{iconSize:new e.Point(12,12),className:"leaflet-div-icon"},createIcon:function(){var t=i.createElement("div"),s=this.options;return s.html&&(t.innerHTML=s.html),s.bgPos&&(t.style.backgroundPosition=-s.bgPos.x+"px "+-s.bgPos.y+"px"),this._setIconStyles(t,"icon"),t},createShadow:function(){return null}}),e.divIcon=function(t){return new e.DivIcon(t)},e.Map.mergeOptions({closePopupOnClick:!0}),e.Popup=e.Class.extend({includes:e.Mixin.Events,options:{minWidth:50,maxWidth:300,maxHeight:null,autoPan:!0,closeButton:!0,offset:new e.Point(0,6),autoPanPadding:new e.Point(5,5),className:"",zoomAnimation:!0},initialize:function(t,i){e.setOptions(this,t),this._source=i,this._animated=e.Browser.any3d&&this.options.zoomAnimation},onAdd:function(t){this._map=t,this._container||this._initLayout(),this._updateContent();var i=t.options.fadeAnimation;i&&e.DomUtil.setOpacity(this._container,0),t._panes.popupPane.appendChild(this._container),t.on("viewreset",this._updatePosition,this),this._animated&&t.on("zoomanim",this._zoomAnimation,this),t.options.closePopupOnClick&&t.on("preclick",this._close,this),this._update(),i&&e.DomUtil.setOpacity(this._container,1)},addTo:function(t){return t.addLayer(this),this},openOn:function(t){return t.openPopup(this),this},onRemove:function(t){t._panes.popupPane.removeChild(this._container),e.Util.falseFn(this._container.offsetWidth),t.off({viewreset:this._updatePosition,preclick:this._close,zoomanim:this._zoomAnimation},this),t.options.fadeAnimation&&e.DomUtil.setOpacity(this._container,0),this._map=null},setLatLng:function(t){return this._latlng=e.latLng(t),this._update(),this},setContent:function(t){return this._content=t,this._update(),this},_close:function(){var t=this._map;t&&(t._popup=null,t.removeLayer(this).fire("popupclose",{popup:this}))},_initLayout:function(){var t,i="leaflet-popup",s=i+" "+this.options.className+" leaflet-zoom-"+(this._animated?"animated":"hide"),o=this._container=e.DomUtil.create("div",s);this.options.closeButton&&(t=this._closeButton=e.DomUtil.create("a",i+"-close-button",o),t.href="#close",t.innerHTML="×",e.DomEvent.on(t,"click",this._onCloseButtonClick,this));var n=this._wrapper=e.DomUtil.create("div",i+"-content-wrapper",o);e.DomEvent.disableClickPropagation(n),this._contentNode=e.DomUtil.create("div",i+"-content",n),e.DomEvent.on(this._contentNode,"mousewheel",e.DomEvent.stopPropagation),this._tipContainer=e.DomUtil.create("div",i+"-tip-container",o),this._tip=e.DomUtil.create("div",i+"-tip",this._tipContainer)},_update:function(){this._map&&(this._container.style.visibility="hidden",this._updateContent(),this._updateLayout(),this._updatePosition(),this._container.style.visibility="",this._adjustPan())},_updateContent:function(){if(this._content){if("string"==typeof this._content)this._contentNode.innerHTML=this._content;else{for(;this._contentNode.hasChildNodes();)this._contentNode.removeChild(this._contentNode.firstChild);this._contentNode.appendChild(this._content)}this.fire("contentupdate")}},_updateLayout:function(){var t=this._contentNode,i=t.style;i.width="",i.whiteSpace="nowrap";var s=t.offsetWidth;s=Math.min(s,this.options.maxWidth),s=Math.max(s,this.options.minWidth),i.width=s+1+"px",i.whiteSpace="",i.height="";var o=t.offsetHeight,n=this.options.maxHeight,a="leaflet-popup-scrolled";n&&o>n?(i.height=n+"px",e.DomUtil.addClass(t,a)):e.DomUtil.removeClass(t,a),this._containerWidth=this._container.offsetWidth},_updatePosition:function(){if(this._map){var t=this._map.latLngToLayerPoint(this._latlng),i=this._animated,s=this.options.offset;i&&e.DomUtil.setPosition(this._container,t),this._containerBottom=-s.y-(i?0:t.y),this._containerLeft=-Math.round(this._containerWidth/2)+s.x+(i?0:t.x),this._container.style.bottom=this._containerBottom+"px",this._container.style.left=this._containerLeft+"px"}},_zoomAnimation:function(t){var i=this._map._latLngToNewLayerPoint(this._latlng,t.zoom,t.center);e.DomUtil.setPosition(this._container,i)},_adjustPan:function(){if(this.options.autoPan){var t=this._map,i=this._container.offsetHeight,s=this._containerWidth,o=new e.Point(this._containerLeft,-i-this._containerBottom);this._animated&&o._add(e.DomUtil.getPosition(this._container));var n=t.layerPointToContainerPoint(o),a=this.options.autoPanPadding,r=t.getSize(),h=0,l=0;0>n.x&&(h=n.x-a.x),n.x+s>r.x&&(h=n.x+s-r.x+a.x),0>n.y&&(l=n.y-a.y),n.y+i>r.y&&(l=n.y+i-r.y+a.y),(h||l)&&t.panBy(new e.Point(h,l))}},_onCloseButtonClick:function(t){this._close(),e.DomEvent.stop(t)}}),e.popup=function(t,i){return new e.Popup(t,i)},e.Marker.include({openPopup:function(){return this._popup&&this._map&&(this._popup.setLatLng(this._latlng),this._map.openPopup(this._popup)),this},closePopup:function(){return this._popup&&this._popup._close(),this},bindPopup:function(t,i){var s=e.point(this.options.icon.options.popupAnchor)||new e.Point(0,0);return s=s.add(e.Popup.prototype.options.offset),i&&i.offset&&(s=s.add(i.offset)),i=e.extend({offset:s},i),this._popup||this.on("click",this.openPopup,this).on("remove",this.closePopup,this).on("move",this._movePopup,this),this._popup=new e.Popup(i,this).setContent(t),this},unbindPopup:function(){return this._popup&&(this._popup=null,this.off("click",this.openPopup).off("remove",this.closePopup).off("move",this._movePopup)),this},_movePopup:function(t){this._popup.setLatLng(t.latlng)}}),e.Map.include({openPopup:function(t){return this.closePopup(),this._popup=t,this.addLayer(t).fire("popupopen",{popup:this._popup})},closePopup:function(){return this._popup&&this._popup._close(),this}}),e.LayerGroup=e.Class.extend({initialize:function(t){this._layers={};var i,s;if(t)for(i=0,s=t.length;s>i;i++)this.addLayer(t[i])},addLayer:function(t){var i=e.stamp(t);return this._layers[i]=t,this._map&&this._map.addLayer(t),this},removeLayer:function(t){var i=e.stamp(t);return delete this._layers[i],this._map&&this._map.removeLayer(t),this},clearLayers:function(){return this.eachLayer(this.removeLayer,this),this},invoke:function(t){var i,s,e=Array.prototype.slice.call(arguments,1);for(i in this._layers)this._layers.hasOwnProperty(i)&&(s=this._layers[i],s[t]&&s[t].apply(s,e));return this},onAdd:function(t){this._map=t,this.eachLayer(t.addLayer,t)},onRemove:function(t){this.eachLayer(t.removeLayer,t),this._map=null},addTo:function(t){return t.addLayer(this),this},eachLayer:function(t,i){for(var s in this._layers)this._layers.hasOwnProperty(s)&&t.call(i,this._layers[s])},setZIndex:function(t){return this.invoke("setZIndex",t)}}),e.layerGroup=function(t){return new e.LayerGroup(t)},e.FeatureGroup=e.LayerGroup.extend({includes:e.Mixin.Events,statics:{EVENTS:"click dblclick mouseover mouseout mousemove contextmenu"},addLayer:function(t){return this._layers[e.stamp(t)]?this:(t.on(e.FeatureGroup.EVENTS,this._propagateEvent,this),e.LayerGroup.prototype.addLayer.call(this,t),this._popupContent&&t.bindPopup&&t.bindPopup(this._popupContent,this._popupOptions),this.fire("layeradd",{layer:t}))},removeLayer:function(t){return t.off(e.FeatureGroup.EVENTS,this._propagateEvent,this),e.LayerGroup.prototype.removeLayer.call(this,t),this._popupContent&&this.invoke("unbindPopup"),this.fire("layerremove",{layer:t})},bindPopup:function(t,i){return this._popupContent=t,this._popupOptions=i,this.invoke("bindPopup",t,i)},setStyle:function(t){return this.invoke("setStyle",t)},bringToFront:function(){return this.invoke("bringToFront")},bringToBack:function(){return this.invoke("bringToBack")},getBounds:function(){var t=new e.LatLngBounds;return this.eachLayer(function(i){t.extend(i instanceof e.Marker?i.getLatLng():i.getBounds())}),t},_propagateEvent:function(t){t.layer=t.target,t.target=this,this.fire(t.type,t)}}),e.featureGroup=function(t){return new e.FeatureGroup(t)},e.Path=e.Class.extend({includes:[e.Mixin.Events],statics:{CLIP_PADDING:e.Browser.mobile?Math.max(0,Math.min(.5,(1280/Math.max(t.innerWidth,t.innerHeight)-1)/2)):.5},options:{stroke:!0,color:"#0033ff",dashArray:null,weight:5,opacity:.5,fill:!1,fillColor:null,fillOpacity:.2,clickable:!0},initialize:function(t){e.setOptions(this,t)},onAdd:function(t){this._map=t,this._container||(this._initElements(),this._initEvents()),this.projectLatlngs(),this._updatePath(),this._container&&this._map._pathRoot.appendChild(this._container),this.fire("add"),t.on({viewreset:this.projectLatlngs,moveend:this._updatePath},this)},addTo:function(t){return t.addLayer(this),this},onRemove:function(t){t._pathRoot.removeChild(this._container),this.fire("remove"),this._map=null,e.Browser.vml&&(this._container=null,this._stroke=null,this._fill=null),t.off({viewreset:this.projectLatlngs,moveend:this._updatePath},this)},projectLatlngs:function(){},setStyle:function(t){return e.setOptions(this,t),this._container&&this._updateStyle(),this},redraw:function(){return this._map&&(this.projectLatlngs(),this._updatePath()),this}}),e.Map.include({_updatePathViewport:function(){var t=e.Path.CLIP_PADDING,i=this.getSize(),s=e.DomUtil.getPosition(this._mapPane),o=s.multiplyBy(-1)._subtract(i.multiplyBy(t)._round()),n=o.add(i.multiplyBy(1+2*t)._round());this._pathViewport=new e.Bounds(o,n)}}),e.Path.SVG_NS="http://www.w3.org/2000/svg",e.Browser.svg=!(!i.createElementNS||!i.createElementNS(e.Path.SVG_NS,"svg").createSVGRect),e.Path=e.Path.extend({statics:{SVG:e.Browser.svg},bringToFront:function(){var t=this._map._pathRoot,i=this._container;return i&&t.lastChild!==i&&t.appendChild(i),this},bringToBack:function(){var t=this._map._pathRoot,i=this._container,s=t.firstChild;return i&&s!==i&&t.insertBefore(i,s),this},getPathString:function(){},_createElement:function(t){return i.createElementNS(e.Path.SVG_NS,t)},_initElements:function(){this._map._initPathRoot(),this._initPath(),this._initStyle()},_initPath:function(){this._container=this._createElement("g"),this._path=this._createElement("path"),this._container.appendChild(this._path)},_initStyle:function(){this.options.stroke&&(this._path.setAttribute("stroke-linejoin","round"),this._path.setAttribute("stroke-linecap","round")),this.options.fill&&this._path.setAttribute("fill-rule","evenodd"),this._updateStyle()},_updateStyle:function(){this.options.stroke?(this._path.setAttribute("stroke",this.options.color),this._path.setAttribute("stroke-opacity",this.options.opacity),this._path.setAttribute("stroke-width",this.options.weight),this.options.dashArray?this._path.setAttribute("stroke-dasharray",this.options.dashArray):this._path.removeAttribute("stroke-dasharray")):this._path.setAttribute("stroke","none"),this.options.fill?(this._path.setAttribute("fill",this.options.fillColor||this.options.color),this._path.setAttribute("fill-opacity",this.options.fillOpacity)):this._path.setAttribute("fill","none")},_updatePath:function(){var t=this.getPathString();t||(t="M0 0"),this._path.setAttribute("d",t)},_initEvents:function(){if(this.options.clickable){(e.Browser.svg||!e.Browser.vml)&&this._path.setAttribute("class","leaflet-clickable"),e.DomEvent.on(this._container,"click",this._onMouseClick,this);for(var t=["dblclick","mousedown","mouseover","mouseout","mousemove","contextmenu"],i=0;t.length>i;i++)e.DomEvent.on(this._container,t[i],this._fireMouseEvent,this)}},_onMouseClick:function(t){this._map.dragging&&this._map.dragging.moved()||this._fireMouseEvent(t)},_fireMouseEvent:function(t){if(this.hasEventListeners(t.type)){var i=this._map,s=i.mouseEventToContainerPoint(t),o=i.containerPointToLayerPoint(s),n=i.layerPointToLatLng(o);this.fire(t.type,{latlng:n,layerPoint:o,containerPoint:s,originalEvent:t}),"contextmenu"===t.type&&e.DomEvent.preventDefault(t),"mousemove"!==t.type&&e.DomEvent.stopPropagation(t)}}}),e.Map.include({_initPathRoot:function(){this._pathRoot||(this._pathRoot=e.Path.prototype._createElement("svg"),this._panes.overlayPane.appendChild(this._pathRoot),this.options.zoomAnimation&&e.Browser.any3d?(this._pathRoot.setAttribute("class"," leaflet-zoom-animated"),this.on({zoomanim:this._animatePathZoom,zoomend:this._endPathZoom})):this._pathRoot.setAttribute("class"," leaflet-zoom-hide"),this.on("moveend",this._updateSvgViewport),this._updateSvgViewport())},_animatePathZoom:function(t){var i=this.getZoomScale(t.zoom),s=this._getCenterOffset(t.center)._multiplyBy(-i)._add(this._pathViewport.min);this._pathRoot.style[e.DomUtil.TRANSFORM]=e.DomUtil.getTranslateString(s)+" scale("+i+") ",this._pathZooming=!0},_endPathZoom:function(){this._pathZooming=!1},_updateSvgViewport:function(){if(!this._pathZooming){this._updatePathViewport();var t=this._pathViewport,i=t.min,s=t.max,o=s.x-i.x,n=s.y-i.y,a=this._pathRoot,r=this._panes.overlayPane;e.Browser.mobileWebkit&&r.removeChild(a),e.DomUtil.setPosition(a,i),a.setAttribute("width",o),a.setAttribute("height",n),a.setAttribute("viewBox",[i.x,i.y,o,n].join(" ")),e.Browser.mobileWebkit&&r.appendChild(a)}}}),e.Path.include({bindPopup:function(t,i){return(!this._popup||i)&&(this._popup=new e.Popup(i,this)),this._popup.setContent(t),this._popupHandlersAdded||(this.on("click",this._openPopup,this).on("remove",this.closePopup,this),this._popupHandlersAdded=!0),this},unbindPopup:function(){return this._popup&&(this._popup=null,this.off("click",this._openPopup).off("remove",this.closePopup),this._popupHandlersAdded=!1),this},openPopup:function(t){return this._popup&&(t=t||this._latlng||this._latlngs[Math.floor(this._latlngs.length/2)],this._openPopup({latlng:t})),this},closePopup:function(){return this._popup&&this._popup._close(),this},_openPopup:function(t){this._popup.setLatLng(t.latlng),this._map.openPopup(this._popup)}}),e.Browser.vml=!e.Browser.svg&&function(){try{var t=i.createElement("div");t.innerHTML='';var s=t.firstChild;return s.style.behavior="url(#default#VML)",s&&"object"==typeof s.adj}catch(e){return!1}}(),e.Path=e.Browser.svg||!e.Browser.vml?e.Path:e.Path.extend({statics:{VML:!0,CLIP_PADDING:.02},_createElement:function(){try{return i.namespaces.add("lvml","urn:schemas-microsoft-com:vml"),function(t){return i.createElement("')}}catch(t){return function(t){return i.createElement("<"+t+' xmlns="urn:schemas-microsoft.com:vml" class="lvml">')}}}(),_initPath:function(){var t=this._container=this._createElement("shape");e.DomUtil.addClass(t,"leaflet-vml-shape"),this.options.clickable&&e.DomUtil.addClass(t,"leaflet-clickable"),t.coordsize="1 1",this._path=this._createElement("path"),t.appendChild(this._path),this._map._pathRoot.appendChild(t)},_initStyle:function(){this._updateStyle()},_updateStyle:function(){var t=this._stroke,i=this._fill,s=this.options,e=this._container;e.stroked=s.stroke,e.filled=s.fill,s.stroke?(t||(t=this._stroke=this._createElement("stroke"),t.endcap="round",e.appendChild(t)),t.weight=s.weight+"px",t.color=s.color,t.opacity=s.opacity,t.dashStyle=s.dashArray?s.dashArray instanceof Array?s.dashArray.join(" "):s.dashArray.replace(/ *, */g," "):""):t&&(e.removeChild(t),this._stroke=null),s.fill?(i||(i=this._fill=this._createElement("fill"),e.appendChild(i)),i.color=s.fillColor||s.color,i.opacity=s.fillOpacity):i&&(e.removeChild(i),this._fill=null)},_updatePath:function(){var t=this._container.style;t.display="none",this._path.v=this.getPathString()+" ",t.display=""}}),e.Map.include(e.Browser.svg||!e.Browser.vml?{}:{_initPathRoot:function(){if(!this._pathRoot){var t=this._pathRoot=i.createElement("div");t.className="leaflet-vml-container",this._panes.overlayPane.appendChild(t),this.on("moveend",this._updatePathViewport),this._updatePathViewport()}}}),e.Browser.canvas=function(){return!!i.createElement("canvas").getContext}(),e.Path=e.Path.SVG&&!t.L_PREFER_CANVAS||!e.Browser.canvas?e.Path:e.Path.extend({statics:{CANVAS:!0,SVG:!1},redraw:function(){return this._map&&(this.projectLatlngs(),this._requestUpdate()),this},setStyle:function(t){return e.setOptions(this,t),this._map&&(this._updateStyle(),this._requestUpdate()),this},onRemove:function(t){t.off("viewreset",this.projectLatlngs,this).off("moveend",this._updatePath,this),this.options.clickable&&this._map.off("click",this._onClick,this),this._requestUpdate(),this._map=null},_requestUpdate:function(){this._map&&!e.Path._updateRequest&&(e.Path._updateRequest=e.Util.requestAnimFrame(this._fireMapMoveEnd,this._map))},_fireMapMoveEnd:function(){e.Path._updateRequest=null,this.fire("moveend")},_initElements:function(){this._map._initPathRoot(),this._ctx=this._map._canvasCtx},_updateStyle:function(){var t=this.options;t.stroke&&(this._ctx.lineWidth=t.weight,this._ctx.strokeStyle=t.color),t.fill&&(this._ctx.fillStyle=t.fillColor||t.color)},_drawPath:function(){var t,i,s,o,n,a;for(this._ctx.beginPath(),t=0,s=this._parts.length;s>t;t++){for(i=0,o=this._parts[t].length;o>i;i++)n=this._parts[t][i],a=(0===i?"move":"line")+"To",this._ctx[a](n.x,n.y);this instanceof e.Polygon&&this._ctx.closePath()}},_checkIfEmpty:function(){return!this._parts.length},_updatePath:function(){if(!this._checkIfEmpty()){var t=this._ctx,i=this.options;this._drawPath(),t.save(),this._updateStyle(),i.fill&&(t.globalAlpha=i.fillOpacity,t.fill()),i.stroke&&(t.globalAlpha=i.opacity,t.stroke()),t.restore()}},_initEvents:function(){this.options.clickable&&this._map.on("click",this._onClick,this)},_onClick:function(t){this._containsPoint(t.layerPoint)&&this.fire("click",{latlng:t.latlng,layerPoint:t.layerPoint,containerPoint:t.containerPoint,originalEvent:t})}}),e.Map.include(e.Path.SVG&&!t.L_PREFER_CANVAS||!e.Browser.canvas?{}:{_initPathRoot:function(){var t,s=this._pathRoot;s||(s=this._pathRoot=i.createElement("canvas"),s.style.position="absolute",t=this._canvasCtx=s.getContext("2d"),t.lineCap="round",t.lineJoin="round",this._panes.overlayPane.appendChild(s),this.options.zoomAnimation&&(this._pathRoot.className="leaflet-zoom-animated",this.on("zoomanim",this._animatePathZoom),this.on("zoomend",this._endPathZoom)),this.on("moveend",this._updateCanvasViewport),this._updateCanvasViewport())},_updateCanvasViewport:function(){if(!this._pathZooming){this._updatePathViewport();var t=this._pathViewport,i=t.min,s=t.max.subtract(i),o=this._pathRoot;e.DomUtil.setPosition(o,i),o.width=s.x,o.height=s.y,o.getContext("2d").translate(-i.x,-i.y)}}}),e.LineUtil={simplify:function(t,i){if(!i||!t.length)return t.slice();var s=i*i;return t=this._reducePoints(t,s),t=this._simplifyDP(t,s)},pointToSegmentDistance:function(t,i,s){return Math.sqrt(this._sqClosestPointOnSegment(t,i,s,!0))},closestPointOnSegment:function(t,i,s){return this._sqClosestPointOnSegment(t,i,s)},_simplifyDP:function(t,i){var e=t.length,o=typeof Uint8Array!=s+""?Uint8Array:Array,n=new o(e);n[0]=n[e-1]=1,this._simplifyDPStep(t,n,i,0,e-1);var a,r=[];for(a=0;e>a;a++)n[a]&&r.push(t[a]);return r},_simplifyDPStep:function(t,i,s,e,o){var n,a,r,h=0;for(a=e+1;o-1>=a;a++)r=this._sqClosestPointOnSegment(t[a],t[e],t[o],!0),r>h&&(n=a,h=r);h>s&&(i[n]=1,this._simplifyDPStep(t,i,s,e,n),this._simplifyDPStep(t,i,s,n,o))},_reducePoints:function(t,i){for(var s=[t[0]],e=1,o=0,n=t.length;n>e;e++)this._sqDist(t[e],t[o])>i&&(s.push(t[e]),o=e);return n-1>o&&s.push(t[n-1]),s},clipSegment:function(t,i,s,e){var o,n,a,r=e?this._lastCode:this._getBitCode(t,s),h=this._getBitCode(i,s);for(this._lastCode=h;;){if(!(r|h))return[t,i];if(r&h)return!1;o=r||h,n=this._getEdgeIntersection(t,i,o,s),a=this._getBitCode(n,s),o===r?(t=n,r=a):(i=n,h=a)}},_getEdgeIntersection:function(t,i,o,n){var a=i.x-t.x,r=i.y-t.y,h=n.min,l=n.max;return 8&o?new e.Point(t.x+a*(l.y-t.y)/r,l.y):4&o?new e.Point(t.x+a*(h.y-t.y)/r,h.y):2&o?new e.Point(l.x,t.y+r*(l.x-t.x)/a):1&o?new e.Point(h.x,t.y+r*(h.x-t.x)/a):s},_getBitCode:function(t,i){var s=0;return t.xi.max.x&&(s|=2),t.yi.max.y&&(s|=8),s},_sqDist:function(t,i){var s=i.x-t.x,e=i.y-t.y;return s*s+e*e},_sqClosestPointOnSegment:function(t,i,s,o){var n,a=i.x,r=i.y,h=s.x-a,l=s.y-r,c=h*h+l*l;return c>0&&(n=((t.x-a)*h+(t.y-r)*l)/c, -n>1?(a=s.x,r=s.y):n>0&&(a+=h*n,r+=l*n)),h=t.x-a,l=t.y-r,o?h*h+l*l:new e.Point(a,r)}},e.Polyline=e.Path.extend({initialize:function(t,i){e.Path.prototype.initialize.call(this,i),this._latlngs=this._convertLatLngs(t)},options:{smoothFactor:1,noClip:!1},projectLatlngs:function(){this._originalPoints=[];for(var t=0,i=this._latlngs.length;i>t;t++)this._originalPoints[t]=this._map.latLngToLayerPoint(this._latlngs[t])},getPathString:function(){for(var t=0,i=this._parts.length,s="";i>t;t++)s+=this._getPathPartStr(this._parts[t]);return s},getLatLngs:function(){return this._latlngs},setLatLngs:function(t){return this._latlngs=this._convertLatLngs(t),this.redraw()},addLatLng:function(t){return this._latlngs.push(e.latLng(t)),this.redraw()},spliceLatLngs:function(){var t=[].splice.apply(this._latlngs,arguments);return this._convertLatLngs(this._latlngs),this.redraw(),t},closestLayerPoint:function(t){for(var i,s,o=1/0,n=this._parts,a=null,r=0,h=n.length;h>r;r++)for(var l=n[r],c=1,m=l.length;m>c;c++){i=l[c-1],s=l[c];var u=e.LineUtil._sqClosestPointOnSegment(t,i,s,!0);o>u&&(o=u,a=e.LineUtil._sqClosestPointOnSegment(t,i,s))}return a&&(a.distance=Math.sqrt(o)),a},getBounds:function(){var t,i,s=new e.LatLngBounds,o=this.getLatLngs();for(t=0,i=o.length;i>t;t++)s.extend(o[t]);return s},_convertLatLngs:function(t){var i,s;for(i=0,s=t.length;s>i;i++){if(e.Util.isArray(t[i])&&"number"!=typeof t[i][0])return;t[i]=e.latLng(t[i])}return t},_initEvents:function(){e.Path.prototype._initEvents.call(this)},_getPathPartStr:function(t){for(var i,s=e.Path.VML,o=0,n=t.length,a="";n>o;o++)i=t[o],s&&i._round(),a+=(o?"L":"M")+i.x+" "+i.y;return a},_clipPoints:function(){var t,i,o,n=this._originalPoints,a=n.length;if(this.options.noClip)return this._parts=[n],s;this._parts=[];var r=this._parts,h=this._map._pathViewport,l=e.LineUtil;for(t=0,i=0;a-1>t;t++)o=l.clipSegment(n[t],n[t+1],h,t),o&&(r[i]=r[i]||[],r[i].push(o[0]),(o[1]!==n[t+1]||t===a-2)&&(r[i].push(o[1]),i++))},_simplifyPoints:function(){for(var t=this._parts,i=e.LineUtil,s=0,o=t.length;o>s;s++)t[s]=i.simplify(t[s],this.options.smoothFactor)},_updatePath:function(){this._map&&(this._clipPoints(),this._simplifyPoints(),e.Path.prototype._updatePath.call(this))}}),e.polyline=function(t,i){return new e.Polyline(t,i)},e.PolyUtil={},e.PolyUtil.clipPolygon=function(t,i){var s,o,n,a,r,h,l,c,m,u=[1,4,2,8],d=e.LineUtil;for(o=0,l=t.length;l>o;o++)t[o]._code=d._getBitCode(t[o],i);for(a=0;4>a;a++){for(c=u[a],s=[],o=0,l=t.length,n=l-1;l>o;n=o++)r=t[o],h=t[n],r._code&c?h._code&c||(m=d._getEdgeIntersection(h,r,c,i),m._code=d._getBitCode(m,i),s.push(m)):(h._code&c&&(m=d._getEdgeIntersection(h,r,c,i),m._code=d._getBitCode(m,i),s.push(m)),s.push(r));t=s}return t},e.Polygon=e.Polyline.extend({options:{fill:!0},initialize:function(t,i){e.Polyline.prototype.initialize.call(this,t,i),t&&e.Util.isArray(t[0])&&"number"!=typeof t[0][0]&&(this._latlngs=this._convertLatLngs(t[0]),this._holes=t.slice(1))},projectLatlngs:function(){if(e.Polyline.prototype.projectLatlngs.call(this),this._holePoints=[],this._holes){var t,i,s,o;for(t=0,s=this._holes.length;s>t;t++)for(this._holePoints[t]=[],i=0,o=this._holes[t].length;o>i;i++)this._holePoints[t][i]=this._map.latLngToLayerPoint(this._holes[t][i])}},_clipPoints:function(){var t=this._originalPoints,i=[];if(this._parts=[t].concat(this._holePoints),!this.options.noClip){for(var s=0,o=this._parts.length;o>s;s++){var n=e.PolyUtil.clipPolygon(this._parts[s],this._map._pathViewport);n.length&&i.push(n)}this._parts=i}},_getPathPartStr:function(t){var i=e.Polyline.prototype._getPathPartStr.call(this,t);return i+(e.Browser.svg?"z":"x")}}),e.polygon=function(t,i){return new e.Polygon(t,i)},function(){function t(t){return e.FeatureGroup.extend({initialize:function(t,i){this._layers={},this._options=i,this.setLatLngs(t)},setLatLngs:function(i){var s=0,e=i.length;for(this.eachLayer(function(t){e>s?t.setLatLngs(i[s++]):this.removeLayer(t)},this);e>s;)this.addLayer(new t(i[s++],this._options));return this}})}e.MultiPolyline=t(e.Polyline),e.MultiPolygon=t(e.Polygon),e.multiPolyline=function(t,i){return new e.MultiPolyline(t,i)},e.multiPolygon=function(t,i){return new e.MultiPolygon(t,i)}}(),e.Rectangle=e.Polygon.extend({initialize:function(t,i){e.Polygon.prototype.initialize.call(this,this._boundsToLatLngs(t),i)},setBounds:function(t){this.setLatLngs(this._boundsToLatLngs(t))},_boundsToLatLngs:function(t){return t=e.latLngBounds(t),[t.getSouthWest(),t.getNorthWest(),t.getNorthEast(),t.getSouthEast()]}}),e.rectangle=function(t,i){return new e.Rectangle(t,i)},e.Circle=e.Path.extend({initialize:function(t,i,s){e.Path.prototype.initialize.call(this,s),this._latlng=e.latLng(t),this._mRadius=i},options:{fill:!0},setLatLng:function(t){return this._latlng=e.latLng(t),this.redraw()},setRadius:function(t){return this._mRadius=t,this.redraw()},projectLatlngs:function(){var t=this._getLngRadius(),i=new e.LatLng(this._latlng.lat,this._latlng.lng-t),s=this._map.latLngToLayerPoint(i);this._point=this._map.latLngToLayerPoint(this._latlng),this._radius=Math.max(Math.round(this._point.x-s.x),1)},getBounds:function(){var t=this._getLngRadius(),i=360*(this._mRadius/40075017),s=this._latlng,o=new e.LatLng(s.lat-i,s.lng-t),n=new e.LatLng(s.lat+i,s.lng+t);return new e.LatLngBounds(o,n)},getLatLng:function(){return this._latlng},getPathString:function(){var t=this._point,i=this._radius;return this._checkIfEmpty()?"":e.Browser.svg?"M"+t.x+","+(t.y-i)+"A"+i+","+i+",0,1,1,"+(t.x-.1)+","+(t.y-i)+" z":(t._round(),i=Math.round(i),"AL "+t.x+","+t.y+" "+i+","+i+" 0,"+23592600)},getRadius:function(){return this._mRadius},_getLatRadius:function(){return 360*(this._mRadius/40075017)},_getLngRadius:function(){return this._getLatRadius()/Math.cos(e.LatLng.DEG_TO_RAD*this._latlng.lat)},_checkIfEmpty:function(){if(!this._map)return!1;var t=this._map._pathViewport,i=this._radius,s=this._point;return s.x-i>t.max.x||s.y-i>t.max.y||s.x+is;s++)for(l=this._parts[s],o=0,r=l.length,n=r-1;r>o;n=o++)if((i||0!==o)&&(h=e.LineUtil.pointToSegmentDistance(t,l[n],l[o]),c>=h))return!0;return!1}}:{}),e.Polygon.include(e.Path.CANVAS?{_containsPoint:function(t){var i,s,o,n,a,r,h,l,c=!1;if(e.Polyline.prototype._containsPoint.call(this,t,!0))return!0;for(n=0,h=this._parts.length;h>n;n++)for(i=this._parts[n],a=0,l=i.length,r=l-1;l>a;r=a++)s=i[a],o=i[r],s.y>t.y!=o.y>t.y&&t.x<(o.x-s.x)*(t.y-s.y)/(o.y-s.y)+s.x&&(c=!c);return c}}:{}),e.Circle.include(e.Path.CANVAS?{_drawPath:function(){var t=this._point;this._ctx.beginPath(),this._ctx.arc(t.x,t.y,this._radius,0,2*Math.PI,!1)},_containsPoint:function(t){var i=this._point,s=this.options.stroke?this.options.weight/2:0;return t.distanceTo(i)<=this._radius+s}}:{}),e.GeoJSON=e.FeatureGroup.extend({initialize:function(t,i){e.setOptions(this,i),this._layers={},t&&this.addData(t)},addData:function(t){var i,s,o=e.Util.isArray(t)?t:t.features;if(o){for(i=0,s=o.length;s>i;i++)(o[i].geometries||o[i].geometry||o[i].features)&&this.addData(o[i]);return this}var n=this.options;if(!n.filter||n.filter(t)){var a=e.GeoJSON.geometryToLayer(t,n.pointToLayer);return a.feature=t,a.defaultOptions=a.options,this.resetStyle(a),n.onEachFeature&&n.onEachFeature(t,a),this.addLayer(a)}},resetStyle:function(t){var i=this.options.style;i&&(e.Util.extend(t.options,t.defaultOptions),this._setLayerStyle(t,i))},setStyle:function(t){this.eachLayer(function(i){this._setLayerStyle(i,t)},this)},_setLayerStyle:function(t,i){"function"==typeof i&&(i=i(t.feature)),t.setStyle&&t.setStyle(i)}}),e.extend(e.GeoJSON,{geometryToLayer:function(t,i){var s,o,n,a,r,h="Feature"===t.type?t.geometry:t,l=h.coordinates,c=[];switch(h.type){case"Point":return s=this.coordsToLatLng(l),i?i(t,s):new e.Marker(s);case"MultiPoint":for(n=0,a=l.length;a>n;n++)s=this.coordsToLatLng(l[n]),r=i?i(t,s):new e.Marker(s),c.push(r);return new e.FeatureGroup(c);case"LineString":return o=this.coordsToLatLngs(l),new e.Polyline(o);case"Polygon":return o=this.coordsToLatLngs(l,1),new e.Polygon(o);case"MultiLineString":return o=this.coordsToLatLngs(l,1),new e.MultiPolyline(o);case"MultiPolygon":return o=this.coordsToLatLngs(l,2),new e.MultiPolygon(o);case"GeometryCollection":for(n=0,a=h.geometries.length;a>n;n++)r=this.geometryToLayer({geometry:h.geometries[n],type:"Feature",properties:t.properties},i),c.push(r);return new e.FeatureGroup(c);default:throw Error("Invalid GeoJSON object.")}},coordsToLatLng:function(t,i){var s=parseFloat(t[i?0:1]),o=parseFloat(t[i?1:0]);return new e.LatLng(s,o)},coordsToLatLngs:function(t,i,s){var e,o,n,a=[];for(o=0,n=t.length;n>o;o++)e=i?this.coordsToLatLngs(t[o],i-1,s):this.coordsToLatLng(t[o],s),a.push(e);return a}}),e.geoJson=function(t,i){return new e.GeoJSON(t,i)},e.DomEvent={addListener:function(t,i,o,n){var a,r,h,l=e.stamp(o),c="_leaflet_"+i+l;return t[c]?this:(a=function(i){return o.call(n||t,i||e.DomEvent._getEvent())},e.Browser.msTouch&&0===i.indexOf("touch")?this.addMsTouchListener(t,i,a,l):(e.Browser.touch&&"dblclick"===i&&this.addDoubleTapListener&&this.addDoubleTapListener(t,a,l),"addEventListener"in t?"mousewheel"===i?(t.addEventListener("DOMMouseScroll",a,!1),t.addEventListener(i,a,!1)):"mouseenter"===i||"mouseleave"===i?(r=a,h="mouseenter"===i?"mouseover":"mouseout",a=function(i){return e.DomEvent._checkMouse(t,i)?r(i):s},t.addEventListener(h,a,!1)):t.addEventListener(i,a,!1):"attachEvent"in t&&t.attachEvent("on"+i,a),t[c]=a,this))},removeListener:function(t,i,s){var o=e.stamp(s),n="_leaflet_"+i+o,a=t[n];if(a)return e.Browser.msTouch&&0===i.indexOf("touch")?this.removeMsTouchListener(t,i,o):e.Browser.touch&&"dblclick"===i&&this.removeDoubleTapListener?this.removeDoubleTapListener(t,o):"removeEventListener"in t?"mousewheel"===i?(t.removeEventListener("DOMMouseScroll",a,!1),t.removeEventListener(i,a,!1)):"mouseenter"===i||"mouseleave"===i?t.removeEventListener("mouseenter"===i?"mouseover":"mouseout",a,!1):t.removeEventListener(i,a,!1):"detachEvent"in t&&t.detachEvent("on"+i,a),t[n]=null,this},stopPropagation:function(t){return t.stopPropagation?t.stopPropagation():t.cancelBubble=!0,this},disableClickPropagation:function(t){for(var i=e.DomEvent.stopPropagation,s=e.Draggable.START.length-1;s>=0;s--)e.DomEvent.addListener(t,e.Draggable.START[s],i);return e.DomEvent.addListener(t,"click",i).addListener(t,"dblclick",i)},preventDefault:function(t){return t.preventDefault?t.preventDefault():t.returnValue=!1,this},stop:function(t){return e.DomEvent.preventDefault(t).stopPropagation(t)},getMousePosition:function(t,s){var o=i.body,n=i.documentElement,a=t.pageX?t.pageX:t.clientX+o.scrollLeft+n.scrollLeft,r=t.pageY?t.pageY:t.clientY+o.scrollTop+n.scrollTop,h=new e.Point(a,r);return s?h._subtract(e.DomUtil.getViewportOffset(s)):h},getWheelDelta:function(t){var i=0;return t.wheelDelta&&(i=t.wheelDelta/120),t.detail&&(i=-t.detail/3),i},_checkMouse:function(t,i){var s=i.relatedTarget;if(!s)return!0;try{for(;s&&s!==t;)s=s.parentNode}catch(e){return!1}return s!==t},_getEvent:function(){var i=t.event;if(!i)for(var s=arguments.callee.caller;s&&(i=s.arguments[0],!i||t.Event!==i.constructor);)s=s.caller;return i}},e.DomEvent.on=e.DomEvent.addListener,e.DomEvent.off=e.DomEvent.removeListener,e.Draggable=e.Class.extend({includes:e.Mixin.Events,statics:{START:e.Browser.touch?["touchstart","mousedown"]:["mousedown"],END:{mousedown:"mouseup",touchstart:"touchend",MSPointerDown:"touchend"},MOVE:{mousedown:"mousemove",touchstart:"touchmove",MSPointerDown:"touchmove"},TAP_TOLERANCE:15},initialize:function(t,i,s){this._element=t,this._dragStartTarget=i||t,this._longPress=s&&!e.Browser.msTouch},enable:function(){if(!this._enabled){for(var t=e.Draggable.START.length-1;t>=0;t--)e.DomEvent.on(this._dragStartTarget,e.Draggable.START[t],this._onDown,this);this._enabled=!0}},disable:function(){if(this._enabled){for(var t=e.Draggable.START.length-1;t>=0;t--)e.DomEvent.off(this._dragStartTarget,e.Draggable.START[t],this._onDown,this);this._enabled=!1,this._moved=!1}},_onDown:function(t){if(!(!e.Browser.touch&&t.shiftKey||1!==t.which&&1!==t.button&&!t.touches||(e.DomEvent.preventDefault(t),e.DomEvent.stopPropagation(t),e.Draggable._disabled))){if(this._simulateClick=!0,t.touches&&t.touches.length>1)return this._simulateClick=!1,clearTimeout(this._longPressTimeout),s;var o=t.touches&&1===t.touches.length?t.touches[0]:t,n=o.target;e.Browser.touch&&"a"===n.tagName.toLowerCase()&&e.DomUtil.addClass(n,"leaflet-active"),this._moved=!1,this._moving||(this._startPoint=new e.Point(o.clientX,o.clientY),this._startPos=this._newPos=e.DomUtil.getPosition(this._element),t.touches&&1===t.touches.length&&e.Browser.touch&&this._longPress&&(this._longPressTimeout=setTimeout(e.bind(function(){var t=this._newPos&&this._newPos.distanceTo(this._startPos)||0;e.Draggable.TAP_TOLERANCE>t&&(this._simulateClick=!1,this._onUp(),this._simulateEvent("contextmenu",o))},this),1e3)),e.DomEvent.on(i,e.Draggable.MOVE[t.type],this._onMove,this),e.DomEvent.on(i,e.Draggable.END[t.type],this._onUp,this))}},_onMove:function(t){if(!(t.touches&&t.touches.length>1)){var i=t.touches&&1===t.touches.length?t.touches[0]:t,s=new e.Point(i.clientX,i.clientY),o=s.subtract(this._startPoint);(o.x||o.y)&&(e.DomEvent.preventDefault(t),this._moved||(this.fire("dragstart"),this._moved=!0,this._startPos=e.DomUtil.getPosition(this._element).subtract(o),e.Browser.touch||(e.DomUtil.disableTextSelection(),this._setMovingCursor())),this._newPos=this._startPos.add(o),this._moving=!0,e.Util.cancelAnimFrame(this._animRequest),this._animRequest=e.Util.requestAnimFrame(this._updatePosition,this,!0,this._dragStartTarget))}},_updatePosition:function(){this.fire("predrag"),e.DomUtil.setPosition(this._element,this._newPos),this.fire("drag")},_onUp:function(t){var s;if(clearTimeout(this._longPressTimeout),this._simulateClick&&t.changedTouches){var o=t.changedTouches[0],n=o.target,a=this._newPos&&this._newPos.distanceTo(this._startPos)||0;"a"===n.tagName.toLowerCase()&&e.DomUtil.removeClass(n,"leaflet-active"),e.Draggable.TAP_TOLERANCE>a&&(s=o)}e.Browser.touch||(e.DomUtil.enableTextSelection(),this._restoreCursor());for(var r in e.Draggable.MOVE)e.Draggable.MOVE.hasOwnProperty(r)&&(e.DomEvent.off(i,e.Draggable.MOVE[r],this._onMove),e.DomEvent.off(i,e.Draggable.END[r],this._onUp));this._moved&&(e.Util.cancelAnimFrame(this._animRequest),this.fire("dragend")),this._moving=!1,s&&(this._moved=!1,this._simulateEvent("click",s))},_setMovingCursor:function(){e.DomUtil.addClass(i.body,"leaflet-dragging")},_restoreCursor:function(){e.DomUtil.removeClass(i.body,"leaflet-dragging")},_simulateEvent:function(s,e){var o=i.createEvent("MouseEvents");o.initMouseEvent(s,!0,!0,t,1,e.screenX,e.screenY,e.clientX,e.clientY,!1,!1,!1,!1,0,null),e.target.dispatchEvent(o)}}),e.Handler=e.Class.extend({initialize:function(t){this._map=t},enable:function(){this._enabled||(this._enabled=!0,this.addHooks())},disable:function(){this._enabled&&(this._enabled=!1,this.removeHooks())},enabled:function(){return!!this._enabled}}),e.Map.mergeOptions({dragging:!0,inertia:!e.Browser.android23,inertiaDeceleration:3400,inertiaMaxSpeed:1/0,inertiaThreshold:e.Browser.touch?32:18,easeLinearity:.25,longPress:!0,worldCopyJump:!1}),e.Map.Drag=e.Handler.extend({addHooks:function(){if(!this._draggable){var t=this._map;this._draggable=new e.Draggable(t._mapPane,t._container,t.options.longPress),this._draggable.on({dragstart:this._onDragStart,drag:this._onDrag,dragend:this._onDragEnd},this),t.options.worldCopyJump&&(this._draggable.on("predrag",this._onPreDrag,this),t.on("viewreset",this._onViewReset,this))}this._draggable.enable()},removeHooks:function(){this._draggable.disable()},moved:function(){return this._draggable&&this._draggable._moved},_onDragStart:function(){var t=this._map;t._panAnim&&t._panAnim.stop(),t.fire("movestart").fire("dragstart"),t.options.inertia&&(this._positions=[],this._times=[])},_onDrag:function(){if(this._map.options.inertia){var t=this._lastTime=+new Date,i=this._lastPos=this._draggable._newPos;this._positions.push(i),this._times.push(t),t-this._times[0]>200&&(this._positions.shift(),this._times.shift())}this._map.fire("move").fire("drag")},_onViewReset:function(){var t=this._map.getSize()._divideBy(2),i=this._map.latLngToLayerPoint(new e.LatLng(0,0));this._initialWorldOffset=i.subtract(t).x,this._worldWidth=this._map.project(new e.LatLng(0,180)).x},_onPreDrag:function(){var t=this._worldWidth,i=Math.round(t/2),s=this._initialWorldOffset,e=this._draggable._newPos.x,o=(e-i+s)%t+i-s,n=(e+i+s)%t-i-s,a=Math.abs(o+s)i.inertiaThreshold||!this._positions[0];if(o)t.fire("moveend");else{var n=this._lastPos.subtract(this._positions[0]),a=(this._lastTime+s-this._times[0])/1e3,r=i.easeLinearity,h=n.multiplyBy(r/a),l=h.distanceTo(new e.Point(0,0)),c=Math.min(i.inertiaMaxSpeed,l),m=h.multiplyBy(c/l),u=c/(i.inertiaDeceleration*r),d=m.multiplyBy(-u/2).round();e.Util.requestAnimFrame(function(){t.panBy(d,u,r)})}t.fire("dragend"),i.maxBounds&&e.Util.requestAnimFrame(this._panInsideMaxBounds,t,!0,t._container)},_panInsideMaxBounds:function(){this.panInsideBounds(this.options.maxBounds)}}),e.Map.addInitHook("addHandler","dragging",e.Map.Drag),e.Map.mergeOptions({doubleClickZoom:!0}),e.Map.DoubleClickZoom=e.Handler.extend({addHooks:function(){this._map.on("dblclick",this._onDoubleClick)},removeHooks:function(){this._map.off("dblclick",this._onDoubleClick)},_onDoubleClick:function(t){this.setView(t.latlng,this._zoom+1)}}),e.Map.addInitHook("addHandler","doubleClickZoom",e.Map.DoubleClickZoom),e.Map.mergeOptions({scrollWheelZoom:!0}),e.Map.ScrollWheelZoom=e.Handler.extend({addHooks:function(){e.DomEvent.on(this._map._container,"mousewheel",this._onWheelScroll,this),this._delta=0},removeHooks:function(){e.DomEvent.off(this._map._container,"mousewheel",this._onWheelScroll)},_onWheelScroll:function(t){var i=e.DomEvent.getWheelDelta(t);this._delta+=i,this._lastMousePos=this._map.mouseEventToContainerPoint(t),this._startTime||(this._startTime=+new Date);var s=Math.max(40-(+new Date-this._startTime),0);clearTimeout(this._timer),this._timer=setTimeout(e.bind(this._performZoom,this),s),e.DomEvent.preventDefault(t),e.DomEvent.stopPropagation(t)},_performZoom:function(){var t=this._map,i=this._delta,s=t.getZoom();if(i=i>0?Math.ceil(i):Math.round(i),i=Math.max(Math.min(i,4),-4),i=t._limitZoom(s+i)-s,this._delta=0,this._startTime=null,i){var e=s+i,o=this._getCenterForScrollWheelZoom(e);t.setView(o,e)}},_getCenterForScrollWheelZoom:function(t){var i=this._map,s=i.getZoomScale(t),e=i.getSize()._divideBy(2),o=this._lastMousePos._subtract(e)._multiplyBy(1-1/s),n=i._getTopLeftPoint()._add(e)._add(o);return i.unproject(n)}}),e.Map.addInitHook("addHandler","scrollWheelZoom",e.Map.ScrollWheelZoom),e.extend(e.DomEvent,{_touchstart:e.Browser.msTouch?"MSPointerDown":"touchstart",_touchend:e.Browser.msTouch?"MSPointerUp":"touchend",addDoubleTapListener:function(t,s,o){function n(t){var i;if(e.Browser.msTouch?(p.push(t.pointerId),i=p.length):i=t.touches.length,!(i>1)){var s=Date.now(),o=s-(r||s);h=t.touches?t.touches[0]:t,l=o>0&&c>=o,r=s}}function a(t){if(e.Browser.msTouch){var i=p.indexOf(t.pointerId);if(-1===i)return;p.splice(i,1)}if(l){if(e.Browser.msTouch){var o,n={};for(var a in h)o=h[a],n[a]="function"==typeof o?o.bind(h):o;h=n}h.type="dblclick",s(h),r=null}}var r,h,l=!1,c=250,m="_leaflet_",u=this._touchstart,d=this._touchend,p=[];t[m+u+o]=n,t[m+d+o]=a;var _=e.Browser.msTouch?i.documentElement:t;return t.addEventListener(u,n,!1),_.addEventListener(d,a,!1),e.Browser.msTouch&&_.addEventListener("MSPointerCancel",a,!1),this},removeDoubleTapListener:function(t,s){var o="_leaflet_";return t.removeEventListener(this._touchstart,t[o+this._touchstart+s],!1),(e.Browser.msTouch?i.documentElement:t).removeEventListener(this._touchend,t[o+this._touchend+s],!1),e.Browser.msTouch&&i.documentElement.removeEventListener("MSPointerCancel",t[o+this._touchend+s],!1),this}}),e.extend(e.DomEvent,{_msTouches:[],_msDocumentListener:!1,addMsTouchListener:function(t,i,s,e){switch(i){case"touchstart":return this.addMsTouchListenerStart(t,i,s,e);case"touchend":return this.addMsTouchListenerEnd(t,i,s,e);case"touchmove":return this.addMsTouchListenerMove(t,i,s,e);default:throw"Unknown touch event type"}},addMsTouchListenerStart:function(t,s,e,o){var n="_leaflet_",a=this._msTouches,r=function(t){for(var i=!1,s=0;a.length>s;s++)if(a[s].pointerId===t.pointerId){i=!0;break}i||a.push(t),t.touches=a.slice(),t.changedTouches=[t],e(t)};if(t[n+"touchstart"+o]=r,t.addEventListener("MSPointerDown",r,!1),!this._msDocumentListener){var h=function(t){for(var i=0;a.length>i;i++)if(a[i].pointerId===t.pointerId){a.splice(i,1);break}};i.documentElement.addEventListener("MSPointerUp",h,!1),i.documentElement.addEventListener("MSPointerCancel",h,!1),this._msDocumentListener=!0}return this},addMsTouchListenerMove:function(t,i,s,e){function o(t){if(t.pointerType!==t.MSPOINTER_TYPE_MOUSE||0!==t.buttons){for(var i=0;a.length>i;i++)if(a[i].pointerId===t.pointerId){a[i]=t;break}t.touches=a.slice(),t.changedTouches=[t],s(t)}}var n="_leaflet_",a=this._msTouches;return t[n+"touchmove"+e]=o,t.addEventListener("MSPointerMove",o,!1),this},addMsTouchListenerEnd:function(t,i,s,e){var o="_leaflet_",n=this._msTouches,a=function(t){for(var i=0;n.length>i;i++)if(n[i].pointerId===t.pointerId){n.splice(i,1);break}t.touches=n.slice(),t.changedTouches=[t],s(t)};return t[o+"touchend"+e]=a,t.addEventListener("MSPointerUp",a,!1),t.addEventListener("MSPointerCancel",a,!1),this},removeMsTouchListener:function(t,i,s){var e="_leaflet_",o=t[e+i+s];switch(i){case"touchstart":t.removeEventListener("MSPointerDown",o,!1);break;case"touchmove":t.removeEventListener("MSPointerMove",o,!1);break;case"touchend":t.removeEventListener("MSPointerUp",o,!1),t.removeEventListener("MSPointerCancel",o,!1)}return this}}),e.Map.mergeOptions({touchZoom:e.Browser.touch&&!e.Browser.android23}),e.Map.TouchZoom=e.Handler.extend({addHooks:function(){e.DomEvent.on(this._map._container,"touchstart",this._onTouchStart,this)},removeHooks:function(){e.DomEvent.off(this._map._container,"touchstart",this._onTouchStart,this)},_onTouchStart:function(t){var s=this._map;if(t.touches&&2===t.touches.length&&!s._animatingZoom&&!this._zooming){var o=s.mouseEventToLayerPoint(t.touches[0]),n=s.mouseEventToLayerPoint(t.touches[1]),a=s._getCenterLayerPoint();this._startCenter=o.add(n)._divideBy(2),this._startDist=o.distanceTo(n),this._moved=!1,this._zooming=!0,this._centerOffset=a.subtract(this._startCenter),s._panAnim&&s._panAnim.stop(),e.DomEvent.on(i,"touchmove",this._onTouchMove,this).on(i,"touchend",this._onTouchEnd,this),e.DomEvent.preventDefault(t)}},_onTouchMove:function(t){if(t.touches&&2===t.touches.length){var i=this._map,s=i.mouseEventToLayerPoint(t.touches[0]),o=i.mouseEventToLayerPoint(t.touches[1]);this._scale=s.distanceTo(o)/this._startDist,this._delta=s._add(o)._divideBy(2)._subtract(this._startCenter),1!==this._scale&&(this._moved||(e.DomUtil.addClass(i._mapPane,"leaflet-zoom-anim leaflet-touching"),i.fire("movestart").fire("zoomstart")._prepareTileBg(),this._moved=!0),e.Util.cancelAnimFrame(this._animRequest),this._animRequest=e.Util.requestAnimFrame(this._updateOnMove,this,!0,this._map._container),e.DomEvent.preventDefault(t))}},_updateOnMove:function(){var t=this._map,i=this._getScaleOrigin(),s=t.layerPointToLatLng(i);t.fire("zoomanim",{center:s,zoom:t.getScaleZoom(this._scale)}),t._tileBg.style[e.DomUtil.TRANSFORM]=e.DomUtil.getTranslateString(this._delta)+" "+e.DomUtil.getScaleString(this._scale,this._startCenter)},_onTouchEnd:function(){if(this._moved&&this._zooming){var t=this._map;this._zooming=!1,e.DomUtil.removeClass(t._mapPane,"leaflet-touching"),e.DomEvent.off(i,"touchmove",this._onTouchMove).off(i,"touchend",this._onTouchEnd);var s=this._getScaleOrigin(),o=t.layerPointToLatLng(s),n=t.getZoom(),a=t.getScaleZoom(this._scale)-n,r=a>0?Math.ceil(a):Math.floor(a),h=t._limitZoom(n+r);t.fire("zoomanim",{center:o,zoom:h}),t._runAnimation(o,h,t.getZoomScale(h)/this._scale,s,!0)}},_getScaleOrigin:function(){var t=this._centerOffset.subtract(this._delta).divideBy(this._scale);return this._startCenter.add(t)}}),e.Map.addInitHook("addHandler","touchZoom",e.Map.TouchZoom),e.Map.mergeOptions({boxZoom:!0}),e.Map.BoxZoom=e.Handler.extend({initialize:function(t){this._map=t,this._container=t._container,this._pane=t._panes.overlayPane},addHooks:function(){e.DomEvent.on(this._container,"mousedown",this._onMouseDown,this)},removeHooks:function(){e.DomEvent.off(this._container,"mousedown",this._onMouseDown)},_onMouseDown:function(t){return!t.shiftKey||1!==t.which&&1!==t.button?!1:(e.DomUtil.disableTextSelection(),this._startLayerPoint=this._map.mouseEventToLayerPoint(t),this._box=e.DomUtil.create("div","leaflet-zoom-box",this._pane),e.DomUtil.setPosition(this._box,this._startLayerPoint),this._container.style.cursor="crosshair",e.DomEvent.on(i,"mousemove",this._onMouseMove,this).on(i,"mouseup",this._onMouseUp,this).preventDefault(t),this._map.fire("boxzoomstart"),s)},_onMouseMove:function(t){var i=this._startLayerPoint,s=this._box,o=this._map.mouseEventToLayerPoint(t),n=o.subtract(i),a=new e.Point(Math.min(o.x,i.x),Math.min(o.y,i.y));e.DomUtil.setPosition(s,a),s.style.width=Math.max(0,Math.abs(n.x)-4)+"px",s.style.height=Math.max(0,Math.abs(n.y)-4)+"px"},_onMouseUp:function(t){this._pane.removeChild(this._box),this._container.style.cursor="",e.DomUtil.enableTextSelection(),e.DomEvent.off(i,"mousemove",this._onMouseMove).off(i,"mouseup",this._onMouseUp);var s=this._map,o=s.mouseEventToLayerPoint(t);if(!this._startLayerPoint.equals(o)){var n=new e.LatLngBounds(s.layerPointToLatLng(this._startLayerPoint),s.layerPointToLatLng(o));s.fitBounds(n),s.fire("boxzoomend",{boxZoomBounds:n})}}}),e.Map.addInitHook("addHandler","boxZoom",e.Map.BoxZoom),e.Map.mergeOptions({keyboard:!0,keyboardPanOffset:80,keyboardZoomOffset:1}),e.Map.Keyboard=e.Handler.extend({keyCodes:{left:[37],right:[39],down:[40],up:[38],zoomIn:[187,107,61],zoomOut:[189,109,173]},initialize:function(t){this._map=t,this._setPanOffset(t.options.keyboardPanOffset),this._setZoomOffset(t.options.keyboardZoomOffset)},addHooks:function(){var t=this._map._container;-1===t.tabIndex&&(t.tabIndex="0"),e.DomEvent.on(t,"focus",this._onFocus,this).on(t,"blur",this._onBlur,this).on(t,"mousedown",this._onMouseDown,this),this._map.on("focus",this._addHooks,this).on("blur",this._removeHooks,this)},removeHooks:function(){this._removeHooks();var t=this._map._container;e.DomEvent.off(t,"focus",this._onFocus,this).off(t,"blur",this._onBlur,this).off(t,"mousedown",this._onMouseDown,this),this._map.off("focus",this._addHooks,this).off("blur",this._removeHooks,this)},_onMouseDown:function(){this._focused||this._map._container.focus()},_onFocus:function(){this._focused=!0,this._map.fire("focus")},_onBlur:function(){this._focused=!1,this._map.fire("blur")},_setPanOffset:function(t){var i,s,e=this._panKeys={},o=this.keyCodes;for(i=0,s=o.left.length;s>i;i++)e[o.left[i]]=[-1*t,0];for(i=0,s=o.right.length;s>i;i++)e[o.right[i]]=[t,0];for(i=0,s=o.down.length;s>i;i++)e[o.down[i]]=[0,t];for(i=0,s=o.up.length;s>i;i++)e[o.up[i]]=[0,-1*t]},_setZoomOffset:function(t){var i,s,e=this._zoomKeys={},o=this.keyCodes;for(i=0,s=o.zoomIn.length;s>i;i++)e[o.zoomIn[i]]=t;for(i=0,s=o.zoomOut.length;s>i;i++)e[o.zoomOut[i]]=-t},_addHooks:function(){e.DomEvent.on(i,"keydown",this._onKeyDown,this)},_removeHooks:function(){e.DomEvent.off(i,"keydown",this._onKeyDown,this)},_onKeyDown:function(t){var i=t.keyCode,s=this._map;if(this._panKeys.hasOwnProperty(i))s.panBy(this._panKeys[i]),s.options.maxBounds&&s.panInsideBounds(s.options.maxBounds);else{if(!this._zoomKeys.hasOwnProperty(i))return;s.setZoom(s.getZoom()+this._zoomKeys[i])}e.DomEvent.stop(t)}}),e.Map.addInitHook("addHandler","keyboard",e.Map.Keyboard),e.Handler.MarkerDrag=e.Handler.extend({initialize:function(t){this._marker=t},addHooks:function(){var t=this._marker._icon;this._draggable||(this._draggable=new e.Draggable(t,t).on("dragstart",this._onDragStart,this).on("drag",this._onDrag,this).on("dragend",this._onDragEnd,this)),this._draggable.enable()},removeHooks:function(){this._draggable.disable()},moved:function(){return this._draggable&&this._draggable._moved},_onDragStart:function(){this._marker.closePopup().fire("movestart").fire("dragstart")},_onDrag:function(){var t=this._marker,i=t._shadow,s=e.DomUtil.getPosition(t._icon),o=t._map.layerPointToLatLng(s);i&&e.DomUtil.setPosition(i,s),t._latlng=o,t.fire("move",{latlng:o}).fire("drag")},_onDragEnd:function(){this._marker.fire("moveend").fire("dragend")}}),e.Handler.PolyEdit=e.Handler.extend({options:{icon:new e.DivIcon({iconSize:new e.Point(8,8),className:"leaflet-div-icon leaflet-editing-icon"})},initialize:function(t,i){this._poly=t,e.setOptions(this,i)},addHooks:function(){this._poly._map&&(this._markerGroup||this._initMarkers(),this._poly._map.addLayer(this._markerGroup))},removeHooks:function(){this._poly._map&&(this._poly._map.removeLayer(this._markerGroup),delete this._markerGroup,delete this._markers)},updateMarkers:function(){this._markerGroup.clearLayers(),this._initMarkers()},_initMarkers:function(){this._markerGroup||(this._markerGroup=new e.LayerGroup),this._markers=[];var t,i,s,o,n=this._poly._latlngs;for(t=0,s=n.length;s>t;t++)o=this._createMarker(n[t],t),o.on("click",this._onMarkerClick,this),this._markers.push(o);var a,r;for(t=0,i=s-1;s>t;i=t++)(0!==t||e.Polygon&&this._poly instanceof e.Polygon)&&(a=this._markers[i],r=this._markers[t],this._createMiddleMarker(a,r),this._updatePrevNext(a,r))},_createMarker:function(t,i){var s=new e.Marker(t,{draggable:!0,icon:this.options.icon});return s._origLatLng=t,s._index=i,s.on("drag",this._onMarkerDrag,this),s.on("dragend",this._fireEdit,this),this._markerGroup.addLayer(s),s},_fireEdit:function(){this._poly.fire("edit")},_onMarkerDrag:function(t){var i=t.target;e.extend(i._origLatLng,i._latlng),i._middleLeft&&i._middleLeft.setLatLng(this._getMiddleLatLng(i._prev,i)),i._middleRight&&i._middleRight.setLatLng(this._getMiddleLatLng(i,i._next)),this._poly.redraw()},_onMarkerClick:function(t){if(!(3>this._poly._latlngs.length)){var i=t.target,s=i._index;this._markerGroup.removeLayer(i),this._markers.splice(s,1),this._poly.spliceLatLngs(s,1),this._updateIndexes(s,-1),this._updatePrevNext(i._prev,i._next),i._middleLeft&&this._markerGroup.removeLayer(i._middleLeft),i._middleRight&&this._markerGroup.removeLayer(i._middleRight),i._prev&&i._next?this._createMiddleMarker(i._prev,i._next):i._prev?i._next||(i._prev._middleRight=null):i._next._middleLeft=null,this._poly.fire("edit")}},_updateIndexes:function(t,i){this._markerGroup.eachLayer(function(s){s._index>t&&(s._index+=i)})},_createMiddleMarker:function(t,i){var s,e,o,n=this._getMiddleLatLng(t,i),a=this._createMarker(n);a.setOpacity(.6),t._middleRight=i._middleLeft=a,e=function(){var e=i._index;a._index=e,a.off("click",s).on("click",this._onMarkerClick,this),n.lat=a.getLatLng().lat,n.lng=a.getLatLng().lng,this._poly.spliceLatLngs(e,0,n),this._markers.splice(e,0,a),a.setOpacity(1),this._updateIndexes(e,1),i._index++,this._updatePrevNext(t,a),this._updatePrevNext(a,i)},o=function(){a.off("dragstart",e,this),a.off("dragend",o,this), -this._createMiddleMarker(t,a),this._createMiddleMarker(a,i)},s=function(){e.call(this),o.call(this),this._poly.fire("edit")},a.on("click",s,this).on("dragstart",e,this).on("dragend",o,this),this._markerGroup.addLayer(a)},_updatePrevNext:function(t,i){t&&(t._next=i),i&&(i._prev=t)},_getMiddleLatLng:function(t,i){var s=this._poly._map,e=s.latLngToLayerPoint(t.getLatLng()),o=s.latLngToLayerPoint(i.getLatLng());return s.layerPointToLatLng(e._add(o)._divideBy(2))}}),e.Polyline.addInitHook(function(){e.Handler.PolyEdit&&(this.editing=new e.Handler.PolyEdit(this),this.options.editable&&this.editing.enable()),this.on("add",function(){this.editing&&this.editing.enabled()&&this.editing.addHooks()}),this.on("remove",function(){this.editing&&this.editing.enabled()&&this.editing.removeHooks()})}),e.Control=e.Class.extend({options:{position:"topright"},initialize:function(t){e.setOptions(this,t)},getPosition:function(){return this.options.position},setPosition:function(t){var i=this._map;return i&&i.removeControl(this),this.options.position=t,i&&i.addControl(this),this},addTo:function(t){this._map=t;var i=this._container=this.onAdd(t),s=this.getPosition(),o=t._controlCorners[s];return e.DomUtil.addClass(i,"leaflet-control"),-1!==s.indexOf("bottom")?o.insertBefore(i,o.firstChild):o.appendChild(i),this},removeFrom:function(t){var i=this.getPosition(),s=t._controlCorners[i];return s.removeChild(this._container),this._map=null,this.onRemove&&this.onRemove(t),this}}),e.control=function(t){return new e.Control(t)},e.Map.include({addControl:function(t){return t.addTo(this),this},removeControl:function(t){return t.removeFrom(this),this},_initControlPos:function(){function t(t,n){var a=s+t+" "+s+n;i[t+n]=e.DomUtil.create("div",a,o)}var i=this._controlCorners={},s="leaflet-",o=this._controlContainer=e.DomUtil.create("div",s+"control-container",this._container);t("top","left"),t("top","right"),t("bottom","left"),t("bottom","right")}}),e.Control.Zoom=e.Control.extend({options:{position:"topleft"},onAdd:function(t){var i="leaflet-control-zoom",s="leaflet-bar",o=s+"-part",n=e.DomUtil.create("div",i+" "+s);return this._map=t,this._zoomInButton=this._createButton("+","Zoom in",i+"-in "+o+" "+o+"-top",n,this._zoomIn,this),this._zoomOutButton=this._createButton("-","Zoom out",i+"-out "+o+" "+o+"-bottom",n,this._zoomOut,this),t.on("zoomend",this._updateDisabled,this),n},onRemove:function(t){t.off("zoomend",this._updateDisabled,this)},_zoomIn:function(t){this._map.zoomIn(t.shiftKey?3:1)},_zoomOut:function(t){this._map.zoomOut(t.shiftKey?3:1)},_createButton:function(t,i,s,o,n,a){var r=e.DomUtil.create("a",s,o);r.innerHTML=t,r.href="#",r.title=i;var h=e.DomEvent.stopPropagation;return e.DomEvent.on(r,"click",h).on(r,"mousedown",h).on(r,"dblclick",h).on(r,"click",e.DomEvent.preventDefault).on(r,"click",n,a),r},_updateDisabled:function(){var t=this._map,i="leaflet-control-zoom-disabled";e.DomUtil.removeClass(this._zoomInButton,i),e.DomUtil.removeClass(this._zoomOutButton,i),t._zoom===t.getMinZoom()&&e.DomUtil.addClass(this._zoomOutButton,i),t._zoom===t.getMaxZoom()&&e.DomUtil.addClass(this._zoomInButton,i)}}),e.Map.mergeOptions({zoomControl:!0}),e.Map.addInitHook(function(){this.options.zoomControl&&(this.zoomControl=new e.Control.Zoom,this.addControl(this.zoomControl))}),e.control.zoom=function(t){return new e.Control.Zoom(t)},e.Control.Attribution=e.Control.extend({options:{position:"bottomright",prefix:'Powered by Leaflet'},initialize:function(t){e.setOptions(this,t),this._attributions={}},onAdd:function(t){return this._container=e.DomUtil.create("div","leaflet-control-attribution"),e.DomEvent.disableClickPropagation(this._container),t.on("layeradd",this._onLayerAdd,this).on("layerremove",this._onLayerRemove,this),this._update(),this._container},onRemove:function(t){t.off("layeradd",this._onLayerAdd).off("layerremove",this._onLayerRemove)},setPrefix:function(t){return this.options.prefix=t,this._update(),this},addAttribution:function(t){return t?(this._attributions[t]||(this._attributions[t]=0),this._attributions[t]++,this._update(),this):s},removeAttribution:function(t){return t?(this._attributions[t]--,this._update(),this):s},_update:function(){if(this._map){var t=[];for(var i in this._attributions)this._attributions.hasOwnProperty(i)&&this._attributions[i]&&t.push(i);var s=[];this.options.prefix&&s.push(this.options.prefix),t.length&&s.push(t.join(", ")),this._container.innerHTML=s.join(" — ")}},_onLayerAdd:function(t){t.layer.getAttribution&&this.addAttribution(t.layer.getAttribution())},_onLayerRemove:function(t){t.layer.getAttribution&&this.removeAttribution(t.layer.getAttribution())}}),e.Map.mergeOptions({attributionControl:!0}),e.Map.addInitHook(function(){this.options.attributionControl&&(this.attributionControl=(new e.Control.Attribution).addTo(this))}),e.control.attribution=function(t){return new e.Control.Attribution(t)},e.Control.Scale=e.Control.extend({options:{position:"bottomleft",maxWidth:100,metric:!0,imperial:!0,updateWhenIdle:!1},onAdd:function(t){this._map=t;var i="leaflet-control-scale",s=e.DomUtil.create("div",i),o=this.options;return this._addScales(o,i,s),t.on(o.updateWhenIdle?"moveend":"move",this._update,this),t.whenReady(this._update,this),s},onRemove:function(t){t.off(this.options.updateWhenIdle?"moveend":"move",this._update,this)},_addScales:function(t,i,s){t.metric&&(this._mScale=e.DomUtil.create("div",i+"-line",s)),t.imperial&&(this._iScale=e.DomUtil.create("div",i+"-line",s))},_update:function(){var t=this._map.getBounds(),i=t.getCenter().lat,s=6378137*Math.PI*Math.cos(i*Math.PI/180),e=s*(t.getNorthEast().lng-t.getSouthWest().lng)/180,o=this._map.getSize(),n=this.options,a=0;o.x>0&&(a=e*(n.maxWidth/o.x)),this._updateScales(n,a)},_updateScales:function(t,i){t.metric&&i&&this._updateMetric(i),t.imperial&&i&&this._updateImperial(i)},_updateMetric:function(t){var i=this._getRoundNum(t);this._mScale.style.width=this._getScaleWidth(i/t)+"px",this._mScale.innerHTML=1e3>i?i+" m":i/1e3+" km"},_updateImperial:function(t){var i,s,e,o=3.2808399*t,n=this._iScale;o>5280?(i=o/5280,s=this._getRoundNum(i),n.style.width=this._getScaleWidth(s/i)+"px",n.innerHTML=s+" mi"):(e=this._getRoundNum(o),n.style.width=this._getScaleWidth(e/o)+"px",n.innerHTML=e+" ft")},_getScaleWidth:function(t){return Math.round(this.options.maxWidth*t)-10},_getRoundNum:function(t){var i=Math.pow(10,(Math.floor(t)+"").length-1),s=t/i;return s=s>=10?10:s>=5?5:s>=3?3:s>=2?2:1,i*s}}),e.control.scale=function(t){return new e.Control.Scale(t)},e.Control.Layers=e.Control.extend({options:{collapsed:!0,position:"topright",autoZIndex:!0},initialize:function(t,i,s){e.setOptions(this,s),this._layers={},this._lastZIndex=0,this._handlingClick=!1;for(var o in t)t.hasOwnProperty(o)&&this._addLayer(t[o],o);for(o in i)i.hasOwnProperty(o)&&this._addLayer(i[o],o,!0)},onAdd:function(t){return this._initLayout(),this._update(),t.on("layeradd",this._onLayerChange,this).on("layerremove",this._onLayerChange,this),this._container},onRemove:function(t){t.off("layeradd",this._onLayerChange).off("layerremove",this._onLayerChange)},addBaseLayer:function(t,i){return this._addLayer(t,i),this._update(),this},addOverlay:function(t,i){return this._addLayer(t,i,!0),this._update(),this},removeLayer:function(t){var i=e.stamp(t);return delete this._layers[i],this._update(),this},_initLayout:function(){var t="leaflet-control-layers",i=this._container=e.DomUtil.create("div",t);e.Browser.touch?e.DomEvent.on(i,"click",e.DomEvent.stopPropagation):(e.DomEvent.disableClickPropagation(i),e.DomEvent.on(i,"mousewheel",e.DomEvent.stopPropagation));var s=this._form=e.DomUtil.create("form",t+"-list");if(this.options.collapsed){e.DomEvent.on(i,"mouseover",this._expand,this).on(i,"mouseout",this._collapse,this);var o=this._layersLink=e.DomUtil.create("a",t+"-toggle",i);o.href="#",o.title="Layers",e.Browser.touch?e.DomEvent.on(o,"click",e.DomEvent.stopPropagation).on(o,"click",e.DomEvent.preventDefault).on(o,"click",this._expand,this):e.DomEvent.on(o,"focus",this._expand,this),this._map.on("movestart",this._collapse,this)}else this._expand();this._baseLayersList=e.DomUtil.create("div",t+"-base",s),this._separator=e.DomUtil.create("div",t+"-separator",s),this._overlaysList=e.DomUtil.create("div",t+"-overlays",s),i.appendChild(s)},_addLayer:function(t,i,s){var o=e.stamp(t);this._layers[o]={layer:t,name:i,overlay:s},this.options.autoZIndex&&t.setZIndex&&(this._lastZIndex++,t.setZIndex(this._lastZIndex))},_update:function(){if(this._container){this._baseLayersList.innerHTML="",this._overlaysList.innerHTML="";var t=!1,i=!1;for(var s in this._layers)if(this._layers.hasOwnProperty(s)){var e=this._layers[s];this._addItem(e),i=i||e.overlay,t=t||!e.overlay}this._separator.style.display=i&&t?"":"none"}},_onLayerChange:function(t){var i=e.stamp(t.layer);this._layers[i]&&!this._handlingClick&&this._update()},_createRadioElement:function(t,s){var e='t;t++)i=o[t],s=this._layers[i.layerId],i.checked&&!this._map.hasLayer(s.layer)?(this._map.addLayer(s.layer),s.overlay||(e=s.layer)):!i.checked&&this._map.hasLayer(s.layer)&&this._map.removeLayer(s.layer);e&&(this._map.setZoom(this._map.getZoom()),this._map.fire("baselayerchange",{layer:e})),this._handlingClick=!1},_expand:function(){e.DomUtil.addClass(this._container,"leaflet-control-layers-expanded")},_collapse:function(){this._container.className=this._container.className.replace(" leaflet-control-layers-expanded","")}}),e.control.layers=function(t,i,s){return new e.Control.Layers(t,i,s)},e.PosAnimation=e.Class.extend({includes:e.Mixin.Events,run:function(t,i,s,o){this.stop(),this._el=t,this._inProgress=!0,this.fire("start"),t.style[e.DomUtil.TRANSITION]="all "+(s||.25)+"s cubic-bezier(0,0,"+(o||.5)+",1)",e.DomEvent.on(t,e.DomUtil.TRANSITION_END,this._onTransitionEnd,this),e.DomUtil.setPosition(t,i),e.Util.falseFn(t.offsetWidth),this._stepTimer=setInterval(e.bind(this.fire,this,"step"),50)},stop:function(){this._inProgress&&(e.DomUtil.setPosition(this._el,this._getPos()),this._onTransitionEnd(),e.Util.falseFn(this._el.offsetWidth))},_transformRe:/(-?[\d\.]+), (-?[\d\.]+)\)/,_getPos:function(){var i,s,o,n=this._el,a=t.getComputedStyle(n);return e.Browser.any3d?(o=a[e.DomUtil.TRANSFORM].match(this._transformRe),i=parseFloat(o[1]),s=parseFloat(o[2])):(i=parseFloat(a.left),s=parseFloat(a.top)),new e.Point(i,s,!0)},_onTransitionEnd:function(){e.DomEvent.off(this._el,e.DomUtil.TRANSITION_END,this._onTransitionEnd,this),this._inProgress&&(this._inProgress=!1,this._el.style[e.DomUtil.TRANSITION]="",clearInterval(this._stepTimer),this.fire("step").fire("end"))}}),e.Map.include({setView:function(t,i,s){i=this._limitZoom(i);var e=this._zoom!==i;if(this._loaded&&!s&&this._layers){this._panAnim&&this._panAnim.stop();var o=e?this._zoomToIfClose&&this._zoomToIfClose(t,i):this._panByIfClose(t);if(o)return clearTimeout(this._sizeTimer),this}return this._resetView(t,i),this},panBy:function(t,i,s){if(t=e.point(t),!t.x&&!t.y)return this;this._panAnim||(this._panAnim=new e.PosAnimation,this._panAnim.on({step:this._onPanTransitionStep,end:this._onPanTransitionEnd},this)),this.fire("movestart"),e.DomUtil.addClass(this._mapPane,"leaflet-pan-anim");var o=e.DomUtil.getPosition(this._mapPane).subtract(t)._round();return this._panAnim.run(this._mapPane,o,i||.25,s),this},_onPanTransitionStep:function(){this.fire("move")},_onPanTransitionEnd:function(){e.DomUtil.removeClass(this._mapPane,"leaflet-pan-anim"),this.fire("moveend")},_panByIfClose:function(t){var i=this._getCenterOffset(t)._floor();return this._offsetIsWithinView(i)?(this.panBy(i),!0):!1},_offsetIsWithinView:function(t,i){var s=i||1,e=this.getSize();return Math.abs(t.x)<=e.x*s&&Math.abs(t.y)<=e.y*s}}),e.PosAnimation=e.DomUtil.TRANSITION?e.PosAnimation:e.PosAnimation.extend({run:function(t,i,s,o){this.stop(),this._el=t,this._inProgress=!0,this._duration=s||.25,this._easeOutPower=1/Math.max(o||.5,.2),this._startPos=e.DomUtil.getPosition(t),this._offset=i.subtract(this._startPos),this._startTime=+new Date,this.fire("start"),this._animate()},stop:function(){this._inProgress&&(this._step(),this._complete())},_animate:function(){this._animId=e.Util.requestAnimFrame(this._animate,this),this._step()},_step:function(){var t=+new Date-this._startTime,i=1e3*this._duration;i>t?this._runFrame(this._easeOut(t/i)):(this._runFrame(1),this._complete())},_runFrame:function(t){var i=this._startPos.add(this._offset.multiplyBy(t));e.DomUtil.setPosition(this._el,i),this.fire("step")},_complete:function(){e.Util.cancelAnimFrame(this._animId),this._inProgress=!1,this.fire("end")},_easeOut:function(t){return 1-Math.pow(1-t,this._easeOutPower)}}),e.Map.mergeOptions({zoomAnimation:e.DomUtil.TRANSITION&&!e.Browser.android23&&!e.Browser.mobileOpera}),e.DomUtil.TRANSITION&&e.Map.addInitHook(function(){e.DomEvent.on(this._mapPane,e.DomUtil.TRANSITION_END,this._catchTransitionEnd,this)}),e.Map.include(e.DomUtil.TRANSITION?{_zoomToIfClose:function(t,i){if(this._animatingZoom)return!0;if(!this.options.zoomAnimation)return!1;var s=this.getZoomScale(i),o=this._getCenterOffset(t)._divideBy(1-1/s);if(!this._offsetIsWithinView(o,1))return!1;e.DomUtil.addClass(this._mapPane,"leaflet-zoom-anim"),this.fire("movestart").fire("zoomstart"),this.fire("zoomanim",{center:t,zoom:i});var n=this._getCenterLayerPoint().add(o);return this._prepareTileBg(),this._runAnimation(t,i,s,n),!0},_catchTransitionEnd:function(){this._animatingZoom&&this._onZoomTransitionEnd()},_runAnimation:function(t,i,s,o,n){this._animateToCenter=t,this._animateToZoom=i,this._animatingZoom=!0,e.Draggable&&(e.Draggable._disabled=!0);var a=e.DomUtil.TRANSFORM,r=this._tileBg;clearTimeout(this._clearTileBgTimer),e.Util.falseFn(r.offsetWidth);var h=e.DomUtil.getScaleString(s,o),l=r.style[a];r.style[a]=n?l+" "+h:h+" "+l},_prepareTileBg:function(){var t=this._tilePane,i=this._tileBg;if(i&&this._getLoadedTilesPercentage(i)>.5&&.5>this._getLoadedTilesPercentage(t))return t.style.visibility="hidden",t.empty=!0,this._stopLoadingImages(t),s;i||(i=this._tileBg=this._createPane("leaflet-tile-pane",this._mapPane),i.style.zIndex=1),i.style[e.DomUtil.TRANSFORM]="",i.style.visibility="hidden",i.empty=!0,t.empty=!1,this._tilePane=this._panes.tilePane=i;var o=this._tileBg=t;e.DomUtil.addClass(o,"leaflet-zoom-animated"),this._stopLoadingImages(o)},_getLoadedTilesPercentage:function(t){var i,s,e=t.getElementsByTagName("img"),o=0;for(i=0,s=e.length;s>i;i++)e[i].complete&&o++;return o/s},_stopLoadingImages:function(t){var i,s,o,n=Array.prototype.slice.call(t.getElementsByTagName("img"));for(i=0,s=n.length;s>i;i++)o=n[i],o.complete||(o.onload=e.Util.falseFn,o.onerror=e.Util.falseFn,o.src=e.Util.emptyImageUrl,o.parentNode.removeChild(o))},_onZoomTransitionEnd:function(){this._restoreTileFront(),e.DomUtil.removeClass(this._mapPane,"leaflet-zoom-anim"),e.Util.falseFn(this._tileBg.offsetWidth),this._animatingZoom=!1,this._resetView(this._animateToCenter,this._animateToZoom,!0,!0),e.Draggable&&(e.Draggable._disabled=!1)},_restoreTileFront:function(){this._tilePane.innerHTML="",this._tilePane.style.visibility="",this._tilePane.style.zIndex=2,this._tileBg.style.zIndex=1},_clearTileBg:function(){this._animatingZoom||this.touchZoom._zooming||(this._tileBg.innerHTML="")}}:{}),e.Map.include({_defaultLocateOptions:{watch:!1,setView:!1,maxZoom:1/0,timeout:1e4,maximumAge:0,enableHighAccuracy:!1},locate:function(t){if(t=this._locationOptions=e.extend(this._defaultLocateOptions,t),!navigator.geolocation)return this._handleGeolocationError({code:0,message:"Geolocation not supported."}),this;var i=e.bind(this._handleGeolocationResponse,this),s=e.bind(this._handleGeolocationError,this);return t.watch?this._locationWatchId=navigator.geolocation.watchPosition(i,s,t):navigator.geolocation.getCurrentPosition(i,s,t),this},stopLocate:function(){return navigator.geolocation&&navigator.geolocation.clearWatch(this._locationWatchId),this},_handleGeolocationError:function(t){var i=t.code,s=t.message||(1===i?"permission denied":2===i?"position unavailable":"timeout");this._locationOptions.setView&&!this._loaded&&this.fitWorld(),this.fire("locationerror",{code:i,message:"Geolocation error: "+s+"."})},_handleGeolocationResponse:function(t){var i=180*t.coords.accuracy/4e7,s=2*i,o=t.coords.latitude,n=t.coords.longitude,a=new e.LatLng(o,n),r=new e.LatLng(o-i,n-s),h=new e.LatLng(o+i,n+s),l=new e.LatLngBounds(r,h),c=this._locationOptions;if(c.setView){var m=Math.min(this.getBoundsZoom(l),c.maxZoom);this.setView(a,m)}this.fire("locationfound",{latlng:a,bounds:l,accuracy:t.coords.accuracy})}})}(this,document),L.Proj={},L.Proj._isProj4Proj=function(t){return t.projName!==void 0},L.Proj.Projection=L.Class.extend({initialize:function(t,i){if(L.Proj._isProj4Proj(t))this._proj=t;else{var s=t;Proj4js.defs[s]=i,this._proj=new Proj4js.Proj(s)}},project:function(t){var i=new L.Point(t.lng,t.lat);return Proj4js.transform(Proj4js.WGS84,this._proj,i)},unproject:function(t,i){var s=Proj4js.transform(this._proj,Proj4js.WGS84,t.clone());return new L.LatLng(s.y,s.x,i)}}),L.Proj.CRS=L.Class.extend({includes:L.CRS,options:{transformation:new L.Transformation(1,0,-1,0)},initialize:function(t,i,s){var e,o,n,a;L.Proj._isProj4Proj(t)?(o=t,e=o.srsCode,a=i||{},this.projection=new L.Proj.Projection(o)):(e=t,n=i,a=s||{},this.projection=new L.Proj.Projection(e,n)),L.Util.setOptions(this,a),this.code=e,this.transformation=this.options.transformation,this.options.origin&&(this.transformation=new L.Transformation(1,-this.options.origin[0],-1,this.options.origin[1])),this.options.scales?this.scale=function(t){return this.options.scales[t]}:this.options.resolutions&&(this.scale=function(t){return 1/this.options.resolutions[t]})}}),L.Proj.CRS.TMS=L.Proj.CRS.extend({initialize:function(t,i,s,e){if(L.Proj._isProj4Proj(t)){var o=t,n=i,a=s||{};a.origin=[n[0],n[3]],L.Proj.CRS.prototype.initialize(o,a)}else{var r=t,h=i,n=s,a=e||{};a.origin=[n[0],n[3]],L.Proj.CRS.prototype.initialize(r,h,a)}this.projectedBounds=n}}),L.Proj.TileLayer={},L.Proj.TileLayer.TMS=L.TileLayer.extend({options:{tms:!0,continuousWorld:!0},initialize:function(t,i,s){if(!(i instanceof L.Proj.CRS.TMS))throw Error("CRS is not L.Proj.CRS.TMS.");L.TileLayer.prototype.initialize.call(this,t,s),this.crs=i;for(var e=this.options.minZoom;this.options.maxZoom>e;e++){var o=(this.crs.projectedBounds[3]-this.crs.projectedBounds[1])/this._projectedTileSize(e);if(Math.abs(o-Math.round(o))>.001)throw Error("Projected bounds does not match grid at zoom "+e)}},getTileUrl:function(t){var i=Math.round((this.crs.projectedBounds[3]-this.crs.projectedBounds[1])/this._projectedTileSize(this._map.getZoom()));return L.Util.template(this._url,L.Util.extend({s:this._getSubdomain(t),z:this._getZoomForUrl(),x:t.x,y:i-t.y-1},this.options))},_projectedTileSize:function(t){return this.options.tileSize/this.crs.scale(t)}}),"undefined"!=typeof module&&(module.exports=L.Proj),"undefined"!=typeof L&&L.CRS!==void 0&&(L.CRS.proj4js=function(){return function(t,i,s,e){return e=e||{},s&&(e.transformation=s),new L.Proj.CRS(t,i,e)}}()),L.Control.MousePosition=L.Control.extend({options:{position:"bottomleft",separator:" : ",emptyString:"Unavailable",lngFirst:!1,numDigits:5,lngFormatter:void 0,latFormatter:void 0},onAdd:function(t){return this._container=L.DomUtil.create("div","leaflet-control-mouseposition"),L.DomEvent.disableClickPropagation(this._container),t.on("mousemove",this._onMouseMove,this),this._container.innerHTML=this.options.emptyString,this._container},onRemove:function(t){t.off("mousemove",this._onMouseMove)},_onMouseMove:function(t){var i=L.Util.formatNum(t.latlng.lng,this.options.numDigits),s=L.Util.formatNum(t.latlng.lat,this.options.numDigits);this.options.lngFormatter&&(i=this.options.lngFormatter(i)),this.options.latFormatter&&(s=this.options.latFormatter(s));var e=this.options.lngFirst?i+this.options.separator+s:s+this.options.separator+i;this._container.innerHTML=e}}),L.Map.mergeOptions({positionControl:!1}),L.Map.addInitHook(function(){this.options.positionControl&&(this.positionControl=new L.Control.MousePosition,this.addControl(this.positionControl))}),L.control.mousePosition=function(t){return new L.Control.MousePosition(t)},function(t,i){L.KSP={},L.KSP.version="0.2.1",L.KSP.CRS={},L.KSP.CRS.EPSG4326=new L.Proj.CRS.TMS(new Proj4js.Proj("EPSG:4326"),[-180,-90,180,90],{resolutions:[.703125,.3515625,.17578125,.087890625,.0439453125,.02197265625]}),L.KSP.CelestialBody=L.Class.extend({initialize:function(t){if(!t.hasOwnProperty("id"))throw Error("must specify id");if(!t.hasOwnProperty("name"))throw Error("must specify name");if(t.hasOwnProperty("crs")){if(!(t.crs instanceof L.Proj.CRS.TMS))throw Error("crs is not an instance of L.Proj.CRS.TMS")}else this.crs=L.KSP.CRS.EPSG4326;t.hasOwnProperty("radius")||(this.radius=1),t.hasOwnProperty("thumbnail")||(this.thumbnail="body-unknown.png"),t.hasOwnProperty("baseLayers")||(this.baseLayers={}),L.Util.extend(this,t)},addTo:function(t){var i,s=t._body;if(t._body=this,t.fire("bodychangestart",{body:this,oldBody:s}),s){for(i in s.baseLayers)s.baseLayers.hasOwnProperty(i)&&t.removeLayer(s.baseLayers[i]);for(i in s.overlays)s.overlays.hasOwnProperty(i)&&t.removeLayer(s.overlays[i])}var e=this.defaultLayer||this.baseLayers.Satellite;if(e){for(i in this.baseLayers)if(this.baseLayers.hasOwnProperty(i)&&this.baseLayers[i]._type===t._baseLayerType){e=this.baseLayers[i];break}t.addLayer(e),t.fire("baselayerchange",{layer:e})}for(i in this.overlays)this.overlays.hasOwnProperty(i)&&t._overlayTypes.indexOf(this.overlays[i]._type)>=0&&(t.addLayer(this.overlays[i]),t.fire("layeradd",{layer:this.overlays[i]}));t.fire("bodychangeend",{body:this,oldBody:s})},onAdd:function(t){this.addTo(t)},removeFrom:function(t){L.KSP.CelestialBody.DUMMY.addTo(t)},onRemove:function(t){this.removeFrom(t)}}),L.KSP.celestialBody=function(t){return new L.KSP.CelestialBody(t)},L.KSP.CelestialBody.DUMMY=L.KSP.celestialBody({id:"",name:"",crs:L.KSP.CRS.EPSG4326}),L.KSP.CelestialBody.ALL_PLANETARY=[L.KSP.CelestialBody.DUMMY],L.KSP.Map=L.Map.extend({options:{crs:L.KSP.CRS.EPSG4326,continuousWorld:!0},initialize:function(t,i){this._baseLayerType=-1,this._overlayTypes=[],L.Util.setOptions(this,i),this.startTrackingLayerState(),this.on("bodychangestart",this._onBodyChangeStart).on("bodychangeend",this._onBodyChangeEnd),L.Map.prototype.initialize.call(this,t,this.options)},clampZoom:function(){var t=this.getZoom(),i=this.getMinZoom(),s=this.getMaxZoom();i>t?this.setZoom(i):t>s?this.setZoom(s):this.fire("zoomend",this)},_onBodyChangeStart:function(){this.stopTrackingLayerState()},_onBodyChangeEnd:function(){this.clampZoom(),this.startTrackingLayerState()},_onLayerStateChange:function(t){if("layeradd"===t.type)t.layer instanceof L.KSP.TileLayer?this._baseLayerType=t.layer._type:t.layer instanceof L.KSP.LayerGroup&&0>this._overlayTypes.indexOf(t.layer._type)&&this._overlayTypes.push(t.layer._type);else if(t.layer instanceof L.KSP.LayerGroup){var i,s,e=t.layer._type,o=this._overlayTypes;for(i=o.length-1;i>=0;i--)s=o[i],s===e&&o.splice(i,1)}},startTrackingLayerState:function(){this.on("layeradd",this._onLayerStateChange).on("layerremove",this._onLayerStateChange)},stopTrackingLayerState:function(){this.off("layeradd",this._onLayerStateChange).off("layerremove",this._onLayerStateChange)}}),L.KSP.map=function(t,i){return new L.KSP.Map(t,i)},L.KSP.TileLayer=L.Proj.TileLayer.TMS.extend({statics:{TYPE_SATELLITE:0,TYPE_COLORRELIEF:1,TYPE_SLOPE:2,DEFAULT_URL:"http://tiles.kerbalmaps.com/{body}/{style}/{z}/{x}/{y}.png"},options:{continuousWorld:!1,noWrap:!1,minZoom:0,maxZoom:5,attribution:"Map data © Joel Pedraza"},initialize:function(t,i,s,e){L.Util.setOptions(this,e),this._type=t,L.Proj.TileLayer.TMS.prototype.initialize.call(this,i,s,this.options)}}),L.KSP.tileLayer=function(t,i,s,e){return new L.KSP.TileLayer(t,i,s,e)},L.KSP.LayerGroup=L.LayerGroup.extend({statics:{TYPE_SPACECENTER:0,TYPE_ANOMALY:1},initialize:function(t,i){this._type=t,L.LayerGroup.prototype.initialize.call(this,i)}}),L.KSP.layerGroup=function(t,i){return new L.KSP.LayerGroup(t,i)},L.KSP.Icon={},L.KSP.Icon.SPACECENTER=new L.Icon({iconUrl:"../assets/images/markers-spacecenter.png",shadowUrl:"../assets/images/markers-shadow.png",iconSize:[30,40],shadowSize:[35,16],iconAnchor:[15,40],shadowAnchor:[10,12],popupAnchor:[0,-35]}),L.KSP.Icon.ANOMALY=new L.Icon({iconUrl:"../assets/images/markers-anomaly.png",shadowUrl:"../assets/images/markers-shadow.png",iconSize:[30,40],shadowSize:[35,16],iconAnchor:[15,40],shadowAnchor:[10,12],popupAnchor:[0,-35]}),L.KSP.Legend={},L.KSP.Legend.SLOPE={"≥ 60°":"#E19678","< 60°":"#C86464","< 30°":"#965A64","< 15°":"#645064","< 5°":"#325064","0°":"#32465A"},L.KSP.Control=L.KSP.control={},L.KSP.Control.Legend=L.Control.extend({options:{position:"bottomright"},onAdd:function(t){return this._container=L.DomUtil.create("div","leaflet-control-legend"),t.on("baselayerchange",this._onLayerChange,this),this._container},_update:function(t){if(this._container.innerHTML="",t){for(var i in t)t.hasOwnProperty(i)&&(this._container.innerHTML+=''+i+"
    ");L.DomUtil.addClass(this._container,"leaflet-control-legend-visible")}else this._container.className=this._container.className.replace(" leaflet-control-legend-visible","")},_onLayerChange:function(t){this._update(t.layer.options.legend)}}),L.Map.mergeOptions({legendControl:!0}),L.Map.addInitHook(function(){this.options.bodyControl&&(this.legendControl=new L.KSP.Control.Legend,this.addControl(this.legendControl))}),L.control.legend=function(t){return new L.KSP.Control.Legend(t)},L.KSP.Control.Scale=L.Control.Scale.extend({options:{imperial:!1},onAdd:function(t){this._radius=0,t._body&&(this._radius=t._body.radius);var i=L.Control.Scale.prototype.onAdd.call(this,t);return t.on("bodychangeend",this._onBodyChangeEnd,this),i},onRemove:function(t){L.Control.Scale.prototype.onRemove.call(this,t),t.off("bodychangeend",this._onBodyChangeEnd)},_onBodyChangeEnd:function(t){this._radius=t.body.radius,this._update()},_update:function(){var t=this._map.getBounds(),i=t.getCenter().lat,s=this._radius*Math.PI*Math.cos(i*Math.PI/180),e=s*(t.getNorthEast().lng-t.getSouthWest().lng)/180,o=this._map.getSize(),n=this.options,a=0;o.x>0&&(a=e*(n.maxWidth/o.x)),this._updateScales(n,a)}}),L.KSP.Map.mergeOptions({scaleControl:!1}),L.KSP.Map.addInitHook(function(){this.options.scaleControl&&(this.scaleControl=new L.KSP.Control.Scale,this.addControl(this.scaleControl))}),L.KSP.control.scale=function(t){return new L.KSP.Control.Scale(t)},L.KSP.Control.CelestialBody=L.Control.extend({options:{position:"topright",collapsed:!0},initialize:function(t,i){L.Util.setOptions(this,i),this._bodies=t,this._timeInMillis=(new Date).valueOf(),this._weekInMillis=6048e5},onAdd:function(){return this._initLayout(),this._update(),this._map.on("bodychangeend",this._update,this),this._container},_initLayout:function(){var t="leaflet-control-celestialbodies",s=this._container=L.DomUtil.create("div",t),e=this._bodies;if(this.options.collapsed){L.DomEvent.on(s,"mouseover",this._expand,this).on(s,"mouseout",this._collapse,this);var o=this._bodiesLink=L.DomUtil.create("a",t+"-toggle",s);o.href="#",o.title="Celestial Bodies",L.DomEvent.on(o,"focus",this._expand,this),this._map.on("movestart",this._collapse,this)}var n=this._list=L.DomUtil.create("ul",t+"-list",s);for(var a in e)if(e.hasOwnProperty(a)){var r=this._addBody(e[a],n);if(e[a].children){var h=i.createElement("ul");for(var l in e[a].children)e[a].children.hasOwnProperty(l)&&this._addBody(e[a].children[l],h);r.appendChild(h)}}},_update:function(){this._map._body&&(this._bodiesLink.style.backgroundImage='url("'+this._map._body.thumbnail+'")')},_addBody:function(t,s){var e,o=i.createElement("li"),n=i.createElement("img");if(n.src=t.thumbnail,n.alt=o.title=t.name,t.addedOn){this._timeInMillis-t.addedOnKerbal Space Center
    -0.0969 : -74.6004"),L.marker([20.5829,-146.5116],{icon:L.KSP.Icon.SPACECENTER}).bindPopup("Kerbal Space Center 2
    20.5829 : -146.5116"),L.marker([-1.5409,-71.9099],{icon:L.KSP.Icon.SPACECENTER}).bindPopup("Island Airfield
    -1.5409 : -71.9099")]),Anomalies:L.KSP.layerGroup(L.KSP.LayerGroup.TYPE_ANOMALY,[L.marker([.1023,-74.5684],{icon:L.KSP.Icon.ANOMALY}).bindPopup("0.1023 : -74.5684"),L.marker([20.6709,-146.4968],{icon:L.KSP.Icon.ANOMALY}).bindPopup("20.6709 : -146.4968"),L.marker([35.5705,-74.9773],{icon:L.KSP.Icon.ANOMALY}).bindPopup("35.5705 : -74.9773"),L.marker([-.6402,-80.7668],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-0.6402 : -80.7668"),L.marker([-28.8083,-13.4401],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-28.8083 : -13.4401"),L.marker([-6.5057,-141.6856],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-6.5057 : -141.6856"),L.marker([81.9551,-128.518],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-81.9551 : -128.518")])}}),L.KSP.CelestialBody.MUN=L.KSP.celestialBody({id:"mun",name:"Mun",crs:L.KSP.CRS.EPSG4326,radius:2e5,addedOn:13682304e5,lastUpdated:1368144e6,thumbnail:"body-mun.png",baseLayers:{Satellite:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SATELLITE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{body:"mun",style:"sat"}),"Color Relief":L.KSP.tileLayer(L.KSP.TileLayer.TYPE_COLORRELIEF,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{body:"mun",style:"color",legend:{"3150 m":"#EBEBEB","-180 m":"#232323"}}),Slope:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SLOPE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{body:"mun",style:"slope",legend:L.KSP.Legend.SLOPE})},overlays:{Anomalies:L.KSP.layerGroup(L.KSP.LayerGroup.TYPE_ANOMALY,[L.marker([-9.8314,25.9177],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-9.8314 : 25.9177"),L.marker([-82.2063,102.9305],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-82.2063 : 102.9305"),L.marker([57.6604,9.1422],{icon:L.KSP.Icon.ANOMALY}).bindPopup("57.6604 : 9.1422"),L.marker([2.4695,81.5133],{icon:L.KSP.Icon.ANOMALY}).bindPopup("2.4695 : 81.5133"),L.marker([12.4432,39.178],{icon:L.KSP.Icon.ANOMALY}).bindPopup("12.4432 : 39.1780"),L.marker([-12.4431,-140.822],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-12.4431 : -140.8220"),L.marker([.7027,22.747],{icon:L.KSP.Icon.ANOMALY}).bindPopup("0.7027 : 22.7470"),L.marker([-70.9556,-68.1378],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-70.9556,-68.1378")])}}),L.KSP.CelestialBody.MINMUS=L.KSP.celestialBody({id:"minmus",name:"Minmus",crs:L.KSP.CRS.EPSG4326,radius:6e4,addedOn:13682304e5,lastUpdated:13682304e5,thumbnail:"body-minmus.png",baseLayers:{Satellite:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SATELLITE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"sat",body:"minmus"}),"Color Relief":L.KSP.tileLayer(L.KSP.TileLayer.TYPE_COLORRELIEF,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"color",body:"minmus",legend:{"5750 m":"#414B41","2500 m":"#BEE6C3","1 m":"#96CDB4","0 m":"#87B9A5"}}),Slope:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SLOPE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"slope",body:"minmus",legend:L.KSP.Legend.SLOPE})},overlays:{Anomalies:L.KSP.layerGroup(L.KSP.LayerGroup.TYPE_ANOMALY,[L.marker([23.7768,60.0462],{icon:L.KSP.Icon.ANOMALY}).bindPopup("23.7768 : 60.0462")])}}),L.KSP.CelestialBody.DUNA=L.KSP.celestialBody({id:"duna",name:"Duna",crs:L.KSP.CRS.EPSG4326,radius:32e4,addedOn:13688352e5,lastUpdated:13688352e5,thumbnail:"body-duna.png",baseLayers:{Satellite:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SATELLITE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"sat",body:"duna"}),"Color Relief":L.KSP.tileLayer(L.KSP.TileLayer.TYPE_COLORRELIEF,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"color",body:"duna",legend:{"4800 m":"#C3A082","4000 m":"#966446","3000 m":"#733219","2000 m":"#501E14","1000 m":"#3C140F","0 m":"#280F0A"}}),Slope:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SLOPE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"slope",body:"duna",legend:L.KSP.Legend.SLOPE})},overlays:{Anomalies:L.KSP.layerGroup(L.KSP.LayerGroup.TYPE_ANOMALY,[L.marker([17.0483,-85.4717],{icon:L.KSP.Icon.ANOMALY}).bindPopup("17.0483 : -85.4717"),L.marker([-30.3525,-28.6828],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-30.3525 : -28.6828"),L.marker([-66.1344,-160.7432],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-66.1344 : -160.7432")])}}),L.KSP.CelestialBody.IKE=L.KSP.celestialBody({id:"ike",name:"Ike",crs:L.KSP.CRS.EPSG4326,radius:13e4,addedOn:13688352e5,lastUpdated:13688352e5,thumbnail:"body-ike.png",baseLayers:{Satellite:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SATELLITE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"sat",body:"ike"}),"Color Relief":L.KSP.tileLayer(L.KSP.TileLayer.TYPE_COLORRELIEF,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"color",body:"ike",legend:{"13000 m":"#828282","11000 m":"#6E6E6E","9000 m":"#5A5A5A","7000 m":"#464646","5000 m":"#323232","2500 m":"#191919","70 m":"#070707"}}),Slope:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SLOPE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"slope",body:"ike",legend:L.KSP.Legend.SLOPE})},overlays:{}}),L.KSP.CelestialBody.DRES=L.KSP.celestialBody({id:"dres",name:"Dres",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-dres.png"}),L.KSP.CelestialBody.JOOL=L.KSP.celestialBody({id:"jool",name:"Jool",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-jool.png"}),L.KSP.CelestialBody.LAYTHE=L.KSP.celestialBody({id:"laythe",name:"Laythe",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-laythe.png"}),L.KSP.CelestialBody.VALL=L.KSP.celestialBody({id:"vall",name:"Vall",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-vall.png"}),L.KSP.CelestialBody.TYLO=L.KSP.celestialBody({id:"tylo",name:"Tylo",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-tylo.png"}),L.KSP.CelestialBody.BOP=L.KSP.celestialBody({id:"bop",name:"Bop",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-bop.png"}),L.KSP.CelestialBody.POL=L.KSP.celestialBody({id:"pol",name:"Pol",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-pol.png"}),L.KSP.CelestialBody.EELOO=L.KSP.celestialBody({id:"eeloo",name:"Eeloo",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-eeloo.png"}),L.KSP.CelestialBody.KERBIN.defaultLayer=L.KSP.CelestialBody.KERBIN.baseLayers.Satellite,L.KSP.CelestialBody.MUN.defaultLayer=L.KSP.CelestialBody.MUN.baseLayers.Satellite,L.KSP.CelestialBody.MINMUS.defaultLayer=L.KSP.CelestialBody.MINMUS.baseLayers.Satellite,L.KSP.CelestialBody.EVE.children=[L.KSP.CelestialBody.GILLY],L.KSP.CelestialBody.KERBIN.children=[L.KSP.CelestialBody.MUN,L.KSP.CelestialBody.MINMUS],L.KSP.CelestialBody.DUNA.children=[L.KSP.CelestialBody.IKE],L.KSP.CelestialBody.JOOL.children=[L.KSP.CelestialBody.LAYTHE,L.KSP.CelestialBody.VALL,L.KSP.CelestialBody.TYLO,L.KSP.CelestialBody.BOP,L.KSP.CelestialBody.POL],L.KSP.CelestialBody.GILLY.parent=L.KSP.CelestialBody.EVE,L.KSP.CelestialBody.MUN.parent=L.KSP.CelestialBody.MINMUS.parent=L.KSP.CelestialBody.KERBIN,L.KSP.CelestialBody.IKE.parent=L.KSP.CelestialBody.DUNA,L.KSP.CelestialBody.LAYTHE.parent=L.KSP.CelestialBody.VALL.parent=L.KSP.CelestialBody.TYLO.parent=L.KSP.CelestialBody.BOP.parent=L.KSP.CelestialBody.POL.parent=L.KSP.CelestialBody.JOOL,L.KSP.CelestialBody.ALL_PLANETARY=[L.KSP.CelestialBody.MOHO,L.KSP.CelestialBody.EVE,L.KSP.CelestialBody.KERBIN,L.KSP.CelestialBody.DUNA,L.KSP.CelestialBody.DRES,L.KSP.CelestialBody.JOOL,L.KSP.CelestialBody.EELOO],L.KSP.Map.addInitHook(function(){this.options.layers=[L.KSP.CelestialBody.KERBIN]})}(this,document);var Settings=Class.create({initialize:function(defaultHost,defaultPort){if(!this.getHost()){this.setHost(defaultHost)}if(!this.getPort()){this.setPort(defaultPort)}},getHost:function(){return this.get("host")},getPort:function(){return this.get("port")},setHost:function(value){return this.set("host",value)},setPort:function(value){return this.set("port",value)},get:function(property){return localStorage.getItem(property)},set:function(property,value){return localStorage.setItem(property,value)}});var Telemachus=Class.create({initialize:function(host,port){this.updateConnection(host,port);this.receiverFunctions=[];this.subscribedFields={};this.orbitingBodies=this.getOrbitalBodies();this.rate=500;this.loopTimeout=setTimeout(this.poll.bind(this),this.rate)},url:function(){return"http://"+this.host+":"+this.port+"/telemachus/datalink"},updateConnection:function(host,port){this.host=host;this.port=port},addReceiverFunction:function(func){this.receiverFunctions.push(func)},subscribeToData:function(fields){for(var i=fields.length-1;i>=0;i--){var field=fields[i];this.subscribedFields[field]=field}},dispatchMessages:function(data){for(var i=this.receiverFunctions.length-1;i>=0;i--){try{this.receiverFunctions[i](data)}catch(e){console.error(e)}}},send:function(message){this.socket.send(JSON.stringify(message))},getOrbitalBodyInfo:function(name){var properties=this.orbitingBodies[name];if(properties){return Object.extend({name:name},properties)}else{return null}},notifyIfLOS:function(request){if(request.transport.status==0){document.fire("telemachus:loss-of-signal");return true}return false},prepareParams:function(params){var normalizedParams=[];Object.keys(params).forEach(function(field){var sanitizedFieldName=field.replace("[","{").replace("]","}");normalizedParams.push(sanitizedFieldName+"="+field)});return normalizedParams},convertData:function(rawData){var data={};var startBracesRegexp=/\{/g;var endBracesRegexp=/\}/g;Object.keys(rawData).forEach(function(key){var convertedFieldName=key.replace(startBracesRegexp,"[").replace(endBracesRegexp,"]");data[convertedFieldName]=rawData[key]});return data},poll:function(){var params=this.prepareParams(this.subscribedFields);var requestURL=this.url()+"?"+params.join("&");new Ajax.Request(requestURL,{method:"get",onSuccess:function(response){var rawData=JSON.parse(response.responseText);var data=this.convertData(rawData);this.dispatchMessages(data)}.bind(this),onException:this.notifyIfLOS.bind(this),onComplete:function(response){setTimeout(this.poll.bind(this),this.rate)}.bind(this)})},sendMessage:function(params,callback){new Ajax.Request(this.url(),{method:"post",postBody:JSON.stringify(params),onSuccess:function(response){var rawData=JSON.parse(response.responseText);var data=this.convertData(rawData);callback(data)}.bind(this),onException:this.notifyIfLOS.bind(this)})},getOrbitalBodies:function(){return{Sun:{id:0,referenceBodyName:null,mapBody:null,atmosphericRadius:0,color:"#FFFF00",surfaceGravity:17.1},Kerbin:{id:1,referenceBodyName:"Sun",mapBody:L.KSP.CelestialBody.KERBIN,atmosphericRadius:7e4,color:"#4a5472",surfaceGravity:9.81},Mun:{id:2,referenceBodyName:"Kerbin",mapBody:L.KSP.CelestialBody.MUN,atmosphericRadius:0,color:"#e2e0d7",surfaceGravity:1.63},Minmus:{id:3,referenceBodyName:"Kerbin",mapBody:L.KSP.CelestialBody.MINMUS,color:"#98f2c5",atmosphericRadius:0,surfaceGravity:.491},Moho:{id:4,referenceBodyName:"Sun",mapBody:L.KSP.CelestialBody.MOHO,atmosphericRadius:0,color:"#fdc39e",surfaceGravity:2.7},Eve:{id:5,referenceBodyName:"Sun",mapBody:L.KSP.CelestialBody.EVE,atmosphericRadius:9e4,color:"#c394fe",surfaceGravity:16.7},Duna:{id:6,referenceBodyName:"Sun",mapBody:L.KSP.CelestialBody.DUNA,atmosphericRadius:5e4,color:"#fc5e49",surfaceGravity:2.94},Ike:{id:7,referenceBodyName:"Duna",mapBody:L.KSP.CelestialBody.IKE,atmosphericRadius:0,color:"#e2e0d7",surfaceGravity:1.1},Jool:{id:8,referenceBodyName:"Sun",mapBody:L.KSP.CelestialBody.JOOL,atmosphericRadius:2e5,color:"#C5DCAB",surfaceGravity:7.85},Laythe:{id:9,referenceBodyName:"Jool",mapBody:L.KSP.CelestialBody.LAYTHE,atmosphericRadius:5e4,color:"#a8b4fe",surfaceGravity:7.85},Vall:{id:10,referenceBodyName:"Jool",mapBody:L.KSP.CelestialBody.VALL,atmosphericRadius:0,color:"#b0f4fe",surfaceGravity:2.31},Bop:{id:11,referenceBodyName:"Jool",mapBody:L.KSP.CelestialBody.BOP,atmosphericRadius:0,color:"#c64605",surfaceGravity:.589},Tylo:{id:12,referenceBodyName:"Jool",mapBody:L.KSP.CelestialBody.TYLO,atmosphericRadius:0,color:"#fdf7ed",surfaceGravity:7.85},Gilly:{id:13,referenceBodyName:"Eve",mapBody:L.KSP.CelestialBody.GILLY,atmosphericRadius:0,color:"#fdcbb1",surfaceGravity:.049},Pol:{id:14,referenceBodyName:"Pol",mapBody:L.KSP.CelestialBody.POL,atmosphericRadius:0,color:"#fec681",surfaceGravity:.373},Dres:{id:15,referenceBodyName:"Sun",mapBody:L.KSP.CelestialBody.DRES,atmosphericRadius:0,color:"#fef8f9",surfaceGravity:1.13},Eeloo:{id:16,referenceBodyName:"Sun",mapBody:L.KSP.CelestialBody.EELOO,atmosphericRadius:0,color:"#e5fafe",surfaceGravity:1.69}}}});var TitleBar=Class.create({initialize:function(datalink,title_bar_id){this.datalink=datalink;this.title_bar_id=title_bar_id;this.title_bar=$(this.title_bar_id);this.initializeLOSNotifier();this.initializeDatalink()},update:function(data){window.requestAnimationFrame(function(){this.title_bar.down("#world-clock").update(TimeFormatters.formatUT(data["t.universalTime"]));this.title_bar.down("#mission-time").update(TimeFormatters.formatMET(data["v.missionTime"]));this.title_bar.down("#mission-time").removeClassName("loss-of-signal")}.bind(this))},initializeLOSNotifier:function(){document.observe("telemachus:loss-of-signal",function(){window.requestAnimationFrame(function(){this.title_bar.down("#mission-time").update("⚠ LOS ⚠");this.title_bar.down("#mission-time").addClassName("loss-of-signal")}.bind(this))}.bind(this))},initializeDatalink:function(){this.datalink.subscribeToData(["t.timeWarp","t.universalTime","v.missionTime"]);this.datalink.addReceiverFunction(this.update.bind(this))}});var ButtonIndicator=Class.create({initialize:function(datalink,indicatorId,apiButtonString){this.datalink=datalink;this.indicatorId=indicatorId;this.indicator=$(this.indicatorId);this.apiButtonString=apiButtonString;this.initializeDatalink()},update:function(data){if(data[this.apiButtonString]==true){this.indicator.addClassName("on")}else{this.indicator.removeClassName("on")}},initializeDatalink:function(){this.datalink.subscribeToData([this.apiButtonString]);this.datalink.addReceiverFunction(this.update.bind(this))}});var ReadoutTable=Class.create({initialize:function(datalink,tableId,dataRows){this.datalink=datalink;this.tableId=tableId;this.table=$(this.tableId);this.dataRows=dataRows;this.initializeDatalink()},update:function(data){window.requestAnimationFrame(function(){this.dataRows.forEach(function(row){var rowId=row.label;var tableRow=this.table.down("tr[data-label='"+rowId+"']");if(!tableRow){var tableRow=new Element("tr",{"data-label":rowId});tableRow.insert(""+row.label+"");this.table.insert(tableRow)}tableRow.down("td").update(row.formatter(data[row.value]))}.bind(this))}.bind(this))},initializeDatalink:function(){var dataValues=this.dataRows.map(function(dataRow){return dataRow.value});this.datalink.subscribeToData(dataValues);this.datalink.addReceiverFunction(this.update.bind(this))}});var ResourceMonitor=Class.create({initialize:function(datalink,resourceName,options){this.datalink=datalink;this.resourceName=resourceName;this.options=Object.extend({currentStageProgressBar:null,totalProgressBar:null,valuePrefix:null},options);this.resourceStrings=this.buildResourceStrings();this.initializeDatalink()},update:function(data){window.requestAnimationFrame(function(){if(this.options.totalProgressBar){this.options.totalProgressBar.value=data[this.resourceStrings.totalAvailable];this.options.totalProgressBar.max=data[this.resourceStrings.totalMax]}if(this.options.currentStageProgressBar){this.options.currentStageProgressBar.value=data[this.resourceStrings.currentStageAvailable];this.options.currentStageProgressBar.max=data[this.resourceStrings.currentStageMax]}this.updateValue("-total-value",data[this.resourceStrings.totalAvailable]);this.updateValue("-total-max",data[this.resourceStrings.totalMax]);this.updateValue("-current-stage-value",data[this.resourceStrings.currentStageAvailable]);this.updateValue("-current-stage-max",data[this.resourceStrings.currentStageMax])}.bind(this))},updateValue:function(id,value){if($(this.options.valuePrefix+id)){if(value<0){$(this.options.valuePrefix+id).update("NA")}else{$(this.options.valuePrefix+id).update(value.toFixed(2))}}},buildResourceStrings:function(){return{totalAvailable:"r.resource["+this.resourceName+"]",totalMax:"r.resourceMax["+this.resourceName+"]",currentStageAvailable:"r.resourceCurrent["+this.resourceName+"]",currentStageMax:"r.resourceCurrentMax["+this.resourceName+"]"}},initializeDatalink:function(){this.datalink.subscribeToData([this.resourceStrings.totalAvailable,this.resourceStrings.totalMax,this.resourceStrings.currentStageAvailable,this.resourceStrings.currentStageMax]);this.datalink.addReceiverFunction(this.update.bind(this))}});var DataTable=Class.create({initialize:function(tableID,dataRows){this.tableID=tableID;this.table=$(this.tableID);this.dataRows=dataRows},update:function(){window.requestAnimationFrame(function(){this.dataRows.forEach(function(row){var rowId=row.label;var tableRow=this.table.down("tr[data-label='"+rowId+"']");if(!tableRow){var tableRow=new Element("tr",{"data-label":rowId});tableRow.insert(""+row.label+"");this.table.insert(tableRow)}tableRow.down("td").update(row.value)}.bind(this))}.bind(this))},clear:function(){window.requestAnimationFrame(function(){this.dataRows=[];this.table.innerHTML=""}.bind(this))}});var AtmosphericDensityGauge=Class.create({initialize:function(datalink,gaugeID){this.datalink=datalink;this.gaugeID=gaugeID;this.gauge=$(this.gaugeID);this.initializeDatalink();this.func=function(x){return Math.log(2*x)}},update:function(data){var max=this.func(100);var value=this.func(data["v.atmosphericPressure"]*100);if(!isFinite(value)){value=0}this.gauge.value=value;this.gauge.max=max},initializeDatalink:function(){this.datalink.subscribeToData(["v.atmosphericPressure"]);this.datalink.addReceiverFunction(this.update.bind(this))}});var ThrottleGauge=Class.create({initialize:function(datalink,gaugeID){this.datalink=datalink;this.gaugeID=gaugeID;this.gauge=$(this.gaugeID);this.initializeDatalink()},update:function(data){this.gauge.value=data["f.throttle"]*100;this.gauge.max=100},initializeDatalink:function(){this.datalink.subscribeToData(["f.throttle"]);this.datalink.addReceiverFunction(this.update.bind(this))}});!function(a,b){"function"==typeof define&&define.amd?define([],function(){return a.Chartist=b()}):"object"==typeof exports?module.exports=b():a.Chartist=b()}(this,function(){var a={version:"0.9.4"};return function(a,b,c){"use strict";c.noop=function(a){return a},c.alphaNumerate=function(a){return String.fromCharCode(97+a%26)},c.extend=function(a){a=a||{};var b=Array.prototype.slice.call(arguments,1);return b.forEach(function(b){for(var d in b)"object"!=typeof b[d]||null===b[d]||b[d]instanceof Array?a[d]=b[d]:a[d]=c.extend({},a[d],b[d])}),a},c.replaceAll=function(a,b,c){return a.replace(new RegExp(b,"g"),c)},c.stripUnit=function(a){return"string"==typeof a&&(a=a.replace(/[^0-9\+-\.]/g,"")),+a},c.ensureUnit=function(a,b){return"number"==typeof a&&(a+=b),a},c.querySelector=function(a){return a instanceof Node?a:b.querySelector(a)},c.times=function(a){return Array.apply(null,new Array(a))},c.sum=function(a,b){return a+(b?b:0)},c.mapMultiply=function(a){return function(b){return b*a}},c.mapAdd=function(a){return function(b){return b+a}},c.serialMap=function(a,b){var d=[],e=Math.max.apply(null,a.map(function(a){return a.length}));return c.times(e).forEach(function(c,e){var f=a.map(function(a){return a[e]});d[e]=b.apply(null,f)}),d},c.roundWithPrecision=function(a,b){var d=Math.pow(10,b||c.precision);return Math.round(a*d)/d},c.precision=8,c.escapingMap={"&":"&","<":"<",">":">",'"':""","'":"'"},c.serialize=function(a){return null===a||void 0===a?a:("number"==typeof a?a=""+a:"object"==typeof a&&(a=JSON.stringify({data:a})),Object.keys(c.escapingMap).reduce(function(a,b){return c.replaceAll(a,b,c.escapingMap[b])},a))},c.deserialize=function(a){if("string"!=typeof a)return a;a=Object.keys(c.escapingMap).reduce(function(a,b){return c.replaceAll(a,c.escapingMap[b],b)},a);try{a=JSON.parse(a),a=void 0!==a.data?a.data:a}catch(b){}return a},c.createSvg=function(a,b,d,e){var f;return b=b||"100%",d=d||"100%",Array.prototype.slice.call(a.querySelectorAll("svg")).filter(function(a){return a.getAttributeNS("http://www.w3.org/2000/xmlns/",c.xmlNs.prefix)}).forEach(function(b){a.removeChild(b)}),f=new c.Svg("svg").attr({width:b,height:d}).addClass(e).attr({style:"width: "+b+"; height: "+d+";"}),a.appendChild(f._node),f},c.reverseData=function(a){a.labels.reverse(),a.series.reverse();for(var b=0;bf.high&&(f.high=c),h&&ck,m=e?c.rho(j.range):0;if(e&&c.projectLength(a,1,j)>=d)j.step=1;else if(e&&m=d)j.step=m;else for(;;){if(l&&c.projectLength(a,j.step,j)<=d)j.step*=2;else{if(l||!(c.projectLength(a,j.step/2,j)>=d))break;if(j.step/=2,e&&j.step%1!==0){j.step*=2;break}}if(i++>1e3)throw new Error("Exceeded maximum number of iterations while optimizing scale step!")}for(g=j.min,h=j.max;g+j.step<=j.low;)g+=j.step;for(;h-j.step>=j.high;)h-=j.step;for(j.min=g,j.max=h,j.range=j.max-j.min,j.values=[],f=j.min;f<=j.max;f+=j.step)j.values.push(c.roundWithPrecision(f));return j},c.polarToCartesian=function(a,b,c,d){var e=(d-90)*Math.PI/180;return{x:a+c*Math.cos(e),y:b+c*Math.sin(e)}},c.createChartRect=function(a,b,d){var e=!(!b.axisX&&!b.axisY),f=e?b.axisY.offset:0,g=e?b.axisX.offset:0,h=a.width()||c.stripUnit(b.width)||0,i=a.height()||c.stripUnit(b.height)||0,j=c.normalizePadding(b.chartPadding,d);h=Math.max(h,f+j.left+j.right),i=Math.max(i,g+j.top+j.bottom);var k={padding:j,width:function(){return this.x2-this.x1},height:function(){return this.y1-this.y2}};return e?("start"===b.axisX.position?(k.y2=j.top+g,k.y1=Math.max(i-j.bottom,k.y2+1)):(k.y2=j.top,k.y1=Math.max(i-j.bottom-g,k.y2+1)),"start"===b.axisY.position?(k.x1=j.left+f,k.x2=Math.max(h-j.right,k.x1+1)):(k.x1=j.left,k.x2=Math.max(h-j.right-f,k.x1+1))):(k.x1=j.left,k.x2=Math.max(h-j.right,k.x1+1),k.y2=j.top,k.y1=Math.max(i-j.bottom,k.y2+1)),k},c.createGrid=function(a,b,d,e,f,g,h,i){var j={};j[d.units.pos+"1"]=a,j[d.units.pos+"2"]=a,j[d.counterUnits.pos+"1"]=e,j[d.counterUnits.pos+"2"]=e+f;var k=g.elem("line",j,h.join(" "));i.emit("draw",c.extend({type:"grid",axis:d,index:b,group:g,element:k},j))},c.createLabel=function(a,b,d,e,f,g,h,i,j,k,l){var m,n={};if(n[f.units.pos]=a+h[f.units.pos],n[f.counterUnits.pos]=h[f.counterUnits.pos],n[f.units.len]=b,n[f.counterUnits.len]=g-10,k){var o=''+e[d]+"";m=i.foreignObject(o,c.extend({style:"overflow: visible;"},n))}else m=i.elem("text",n,j.join(" ")).text(e[d]);l.emit("draw",c.extend({type:"label",axis:f,index:d,group:i,element:m,text:e[d]},n))},c.getSeriesOption=function(a,b,c){if(a.name&&b.series&&b.series[a.name]){var d=b.series[a.name];return d.hasOwnProperty(c)?d[c]:b[c]}return b[c]},c.optionsProvider=function(b,d,e){function f(b){var f=h;if(h=c.extend({},j),d)for(i=0;i1){var i=[];return h.forEach(function(a){i.push(g(a.pathCoordinates,a.valueData))}),c.Svg.Path.join(i)}if(a=h[0].pathCoordinates,d=h[0].valueData,a.length<=4)return c.Interpolation.none()(a,d);for(var j,k=(new c.Svg.Path).move(a[0],a[1],!1,d[0]),l=0,m=a.length;m-2*!j>l;l+=2){var n=[{x:+a[l-2],y:+a[l-1]},{x:+a[l],y:+a[l+1]},{x:+a[l+2],y:+a[l+3]},{x:+a[l+4],y:+a[l+5]}];j?l?m-4===l?n[3]={x:+a[0],y:+a[1]}:m-2===l&&(n[2]={x:+a[0],y:+a[1]},n[3]={x:+a[2],y:+a[3]}):n[0]={x:+a[m-2],y:+a[m-1]}:m-4===l?n[3]=n[2]:l||(n[0]={x:+a[l],y:+a[l+1]}),k.curve(e*(-n[0].x+6*n[1].x+n[2].x)/6+f*n[2].x,e*(-n[0].y+6*n[1].y+n[2].y)/6+f*n[2].y,e*(n[1].x+6*n[2].x-n[3].x)/6+f*n[2].x,e*(n[1].y+6*n[2].y-n[3].y)/6+f*n[2].y,n[2].x,n[2].y,!1,d[(l+2)/2])}return k}},c.Interpolation.step=function(a){var b={postpone:!0};return a=c.extend({},b,a),function(b,d){for(var e=new c.Svg.Path,f=!0,g=2;g1}).map(function(a){var b=a.pathElements[0],c=a.pathElements[a.pathElements.length-1];return a.clone(!0).position(0).remove(1).move(b.x,r).line(b.x,b.y).position(a.pathElements.length+1).line(c.x,r)}).forEach(function(h){var k=i.elem("path",{d:h.stringify()},a.classNames.area,!0).attr({values:b.normalized[g]},c.xmlNs.uri);this.eventEmitter.emit("draw",{type:"area",values:b.normalized[g],path:h.clone(),series:f,seriesIndex:g,axisX:d,axisY:e,chartRect:j,index:g,group:i,element:k})}.bind(this))}}.bind(this)),this.eventEmitter.emit("created",{bounds:e.bounds,chartRect:j,axisX:d,axisY:e,svg:this.svg,options:a})}function e(a,b,d,e){c.Line["super"].constructor.call(this,a,b,f,c.extend({},f,d),e)}var f={axisX:{offset:30,position:"end",labelOffset:{x:0,y:0},showLabel:!0,showGrid:!0,labelInterpolationFnc:c.noop,type:void 0},axisY:{offset:40,position:"start",labelOffset:{x:0,y:0},showLabel:!0,showGrid:!0,labelInterpolationFnc:c.noop,type:void 0,scaleMinSpace:20,onlyInteger:!1},width:void 0,height:void 0,showLine:!0,showPoint:!0,showArea:!1,areaBase:0,lineSmooth:!0,low:void 0,high:void 0,chartPadding:{top:15,right:15,bottom:5,left:10},fullWidth:!1,reverseData:!1,classNames:{chart:"ct-chart-line",label:"ct-label",labelGroup:"ct-labels",series:"ct-series",line:"ct-line",point:"ct-point",area:"ct-area",grid:"ct-grid",gridGroup:"ct-grids",vertical:"ct-vertical",horizontal:"ct-horizontal",start:"ct-start",end:"ct-end"}};c.Line=c.Base.extend({constructor:e,createChart:d})}(window,document,a),function(a,b,c){"use strict";function d(a){var b,d={raw:this.data,normalized:a.distributeSeries?c.getDataArray(this.data,a.reverseData,a.horizontalBars?"x":"y").map(function(a){return[a]}):c.getDataArray(this.data,a.reverseData,a.horizontalBars?"x":"y")};this.svg=c.createSvg(this.container,a.width,a.height,a.classNames.chart+(a.horizontalBars?" "+a.classNames.horizontalBars:""));var e=this.svg.elem("g").addClass(a.classNames.gridGroup),g=this.svg.elem("g"),h=this.svg.elem("g").addClass(a.classNames.labelGroup);if(a.stackBars){var i=c.serialMap(d.normalized,function(){return Array.prototype.slice.call(arguments).map(function(a){return a}).reduce(function(a,b){return{x:a.x+b.x||0,y:a.y+b.y||0}},{x:0,y:0})});b=c.getHighLow([i],c.extend({},a,{referenceValue:0}),a.horizontalBars?"x":"y")}else b=c.getHighLow(d.normalized,c.extend({},a,{referenceValue:0}),a.horizontalBars?"x":"y");b.high=+a.high||(0===a.high?0:b.high),b.low=+a.low||(0===a.low?0:b.low);var j,k,l,m,n,o=c.createChartRect(this.svg,a,f.padding);k=a.distributeSeries&&a.stackBars?d.raw.labels.slice(0,1):d.raw.labels,a.horizontalBars?(j=m=void 0===a.axisX.type?new c.AutoScaleAxis(c.Axis.units.x,d,o,c.extend({},a.axisX,{highLow:b,referenceValue:0})):a.axisX.type.call(c,c.Axis.units.x,d,o,c.extend({},a.axisX,{highLow:b,referenceValue:0})),l=n=void 0===a.axisY.type?new c.StepAxis(c.Axis.units.y,d,o,{ticks:k}):a.axisY.type.call(c,c.Axis.units.y,d,o,a.axisY)):(l=m=void 0===a.axisX.type?new c.StepAxis(c.Axis.units.x,d,o,{ticks:k}):a.axisX.type.call(c,c.Axis.units.x,d,o,a.axisX),j=n=void 0===a.axisY.type?new c.AutoScaleAxis(c.Axis.units.y,d,o,c.extend({},a.axisY,{highLow:b,referenceValue:0})):a.axisY.type.call(c,c.Axis.units.y,d,o,c.extend({},a.axisY,{highLow:b,referenceValue:0})));var p=a.horizontalBars?o.x1+j.projectValue(0):o.y1-j.projectValue(0),q=[];l.createGridAndLabels(e,h,this.supportsForeignObject,a,this.eventEmitter),j.createGridAndLabels(e,h,this.supportsForeignObject,a,this.eventEmitter),d.raw.series.forEach(function(b,e){var f,h,i=e-(d.raw.series.length-1)/2;f=a.distributeSeries&&!a.stackBars?l.axisLength/d.normalized.length/2:a.distributeSeries&&a.stackBars?l.axisLength/2:l.axisLength/d.normalized[e].length/2,h=g.elem("g"),h.attr({"series-name":b.name,meta:c.serialize(b.meta)},c.xmlNs.uri),h.addClass([a.classNames.series,b.className||a.classNames.series+"-"+c.alphaNumerate(e)].join(" ")),d.normalized[e].forEach(function(g,k){var r,s,t,u;if(u=a.distributeSeries&&!a.stackBars?e:a.distributeSeries&&a.stackBars?0:k,r=a.horizontalBars?{x:o.x1+j.projectValue(g&&g.x?g.x:0,k,d.normalized[e]),y:o.y1-l.projectValue(g&&g.y?g.y:0,u,d.normalized[e])}:{x:o.x1+l.projectValue(g&&g.x?g.x:0,u,d.normalized[e]),y:o.y1-j.projectValue(g&&g.y?g.y:0,k,d.normalized[e])},l instanceof c.StepAxis&&(l.options.stretch||(r[l.units.pos]+=f*(a.horizontalBars?-1:1)),r[l.units.pos]+=a.stackBars||a.distributeSeries?0:i*a.seriesBarDistance*(a.horizontalBars?-1:1)),t=q[k]||p,q[k]=t-(p-r[l.counterUnits.pos]),void 0!==g){var v={};v[l.units.pos+"1"]=r[l.units.pos],v[l.units.pos+"2"]=r[l.units.pos],v[l.counterUnits.pos+"1"]=a.stackBars?t:p,v[l.counterUnits.pos+"2"]=a.stackBars?q[k]:r[l.counterUnits.pos],v.x1=Math.min(Math.max(v.x1,o.x1),o.x2),v.x2=Math.min(Math.max(v.x2,o.x1),o.x2),v.y1=Math.min(Math.max(v.y1,o.y2),o.y1),v.y2=Math.min(Math.max(v.y2,o.y2),o.y1),s=h.elem("line",v,a.classNames.bar).attr({value:[g.x,g.y].filter(function(a){return a}).join(","),meta:c.getMetaData(b,k)},c.xmlNs.uri),this.eventEmitter.emit("draw",c.extend({type:"bar",value:g,index:k,meta:c.getMetaData(b,k),series:b,seriesIndex:e,axisX:m,axisY:n,chartRect:o,group:h,element:s},v))}}.bind(this))}.bind(this)),this.eventEmitter.emit("created",{bounds:j.bounds,chartRect:o,axisX:m,axisY:n,svg:this.svg,options:a})}function e(a,b,d,e){c.Bar["super"].constructor.call(this,a,b,f,c.extend({},f,d),e)}var f={axisX:{offset:30,position:"end",labelOffset:{x:0,y:0},showLabel:!0,showGrid:!0,labelInterpolationFnc:c.noop,scaleMinSpace:30,onlyInteger:!1},axisY:{offset:40,position:"start",labelOffset:{x:0,y:0},showLabel:!0,showGrid:!0,labelInterpolationFnc:c.noop,scaleMinSpace:20,onlyInteger:!1},width:void 0,height:void 0,high:void 0,low:void 0,onlyInteger:!1,chartPadding:{top:15,right:15,bottom:5,left:10},seriesBarDistance:15,stackBars:!1,horizontalBars:!1,distributeSeries:!1,reverseData:!1,classNames:{chart:"ct-chart-bar",horizontalBars:"ct-horizontal-bars",label:"ct-label",labelGroup:"ct-labels",series:"ct-series",bar:"ct-bar",grid:"ct-grid",gridGroup:"ct-grids",vertical:"ct-vertical",horizontal:"ct-horizontal",start:"ct-start",end:"ct-end"}};c.Bar=c.Base.extend({constructor:e,createChart:d})}(window,document,a),function(a,b,c){"use strict";function d(a,b,c){var d=b.x>a.x;return d&&"explode"===c||!d&&"implode"===c?"start":d&&"implode"===c||!d&&"explode"===c?"end":"middle"}function e(a){var b,e,f,h,i,j=[],k=a.startAngle,l=c.getDataArray(this.data,a.reverseData);this.svg=c.createSvg(this.container,a.width,a.height,a.donut?a.classNames.chartDonut:a.classNames.chartPie),e=c.createChartRect(this.svg,a,g.padding),f=Math.min(e.width()/2,e.height()/2),i=a.total||l.reduce(function(a,b){return a+b},0),f-=a.donut?a.donutWidth/2:0,h="outside"===a.labelPosition||a.donut?f:"center"===a.labelPosition?0:f/2,h+=a.labelOffset;var m={x:e.x1+e.width()/2,y:e.y2+e.height()/2},n=1===this.data.series.filter(function(a){return a.hasOwnProperty("value")?0!==a.value:0!==a}).length;a.showLabel&&(b=this.svg.elem("g",null,null,!0));for(var o=0;o180,0,r.x,r.y);a.donut||t.line(m.x,m.y);var u=j[o].elem("path",{d:t.stringify()},a.donut?a.classNames.sliceDonut:a.classNames.slicePie);if(u.attr({value:l[o],meta:c.serialize(p.meta)},c.xmlNs.uri),a.donut&&u.attr({style:"stroke-width: "+ +a.donutWidth+"px"}),this.eventEmitter.emit("draw",{type:"slice",value:l[o],totalDataSum:i,index:o,meta:p.meta,series:p,group:j[o],element:u,path:t.clone(),center:m,radius:f,startAngle:k,endAngle:q}),a.showLabel){var v=c.polarToCartesian(m.x,m.y,h,k+(q-k)/2),w=a.labelInterpolationFnc(this.data.labels?this.data.labels[o]:l[o],o);if(w||0===w){var x=b.elem("text",{dx:v.x,dy:v.y,"text-anchor":d(m,v,a.labelDirection)},a.classNames.label).text(""+w);this.eventEmitter.emit("draw",{type:"label",index:o,group:b,element:x,text:""+w,x:v.x,y:v.y})}}k=q}this.eventEmitter.emit("created",{chartRect:e,svg:this.svg,options:a})}function f(a,b,d,e){c.Pie["super"].constructor.call(this,a,b,g,c.extend({},g,d),e)}var g={width:void 0,height:void 0,chartPadding:5,classNames:{chartPie:"ct-chart-pie",chartDonut:"ct-chart-donut",series:"ct-series",slicePie:"ct-slice-pie",sliceDonut:"ct-slice-donut",label:"ct-label"},startAngle:0,total:void 0,donut:!1,donutWidth:60,showLabel:!0,labelOffset:0,labelPosition:"inside",labelInterpolationFnc:c.noop,labelDirection:"neutral",reverseData:!1};c.Pie=c.Base.extend({constructor:f,createChart:e,determineAnchorPosition:d})}(window,document,a),a});L.Graticule=L.GeoJSON.extend({options:{style:{color:"#333",weight:1},interval:20},initialize:function(options){L.Util.setOptions(this,options);this._layers={};if(this.options.sphere){this.addData(this._getFrame())}else{this.addData(this._getGraticule())}},_getFrame:function(){return{type:"Polygon",coordinates:[this._getMeridian(-180).concat(this._getMeridian(180).reverse())]}},_getGraticule:function(){var features=[],interval=this.options.interval;for(var lng=0;lng<=180;lng=lng+interval){features.push(this._getFeature(this._getMeridian(lng),{name:lng?lng.toString()+"° E":"Prime meridian"}));if(lng!==0){features.push(this._getFeature(this._getMeridian(-lng),{name:lng.toString()+"° W"}))}}for(var lat=0;lat<=90;lat=lat+interval){features.push(this._getFeature(this._getParallel(lat),{name:lat?lat.toString()+"° N":"Equator"}));if(lat!==0){features.push(this._getFeature(this._getParallel(-lat),{name:lat.toString()+"° S"}))}}return{type:"FeatureCollection",features:features}},_getMeridian:function(lng){lng=this._lngFix(lng);var coords=[];for(var lat=-90;lat<=90;lat++){coords.push([lng,lat])}return coords},_getParallel:function(lat){var coords=[];for(var lng=-180;lng<=180;lng++){coords.push([this._lngFix(lng),lat])}return coords},_getFeature:function(coords,prop){return{type:"Feature",geometry:{type:"LineString",coordinates:coords},properties:prop}},_lngFix:function(lng){if(lng>=180)return 179.999999;if(lng<=-180)return-179.999999;return lng}});L.graticule=function(options){return new L.Graticule(options)};var PositionMap=Class.create({initialize:function(datalink,mapId,options){this.datalink=datalink;this.mapId=mapId;this.noMapIndicatorId=mapId+"-no-map";this.previousBody="KERBIN";this.options=Object.extend({lockOnVessel:true},options);this.initializeMap();this.initializeNoMapIndicator();this.initializeDatalink()},update:function(data){window.requestAnimationFrame(function(){if(this.isMapAvailable(data)){this.showMap();this.updateBodyIfNecessary(data);this.setCoordinatesForMapObject(this.coordinates,data["v.lat"],data["v.long"]);if(this.options.lockOnVessel){this.map.panTo([data["v.lat"],data["v.long"]])}}else{this.hideMap()}}.bind(this))},updateBodyIfNecessary:function(data){var bodyName=data["v.body"].toUpperCase();if(this.previousBody!=bodyName){newBody=L.KSP.CelestialBody[bodyName];newBody.addTo(this.map);this.previousBody=bodyName}},initializeMap:function(){this.map=new L.KSP.Map(this.mapId,{layers:[L.KSP.CelestialBody[this.previousBody.toUpperCase()]],zoom:"fit",bodyControl:false,layerControl:true,scaleControl:true});this.map.fitWorld();L.graticule().addTo(this.map);var circleMarkerOptions={color:"#FD7E23",opacity:1,fillOpacity:1,radius:5};this.coordinates=L.circleMarker([0,0],circleMarkerOptions);this.coordinates.addTo(this.map)},convertCoordinatesToMap:function(latitude,longitude){return[latitude,longitude>180?longitude-360:longitude]},setCoordinatesForMapObject:function(object,latitude,longitude){var convertedCoordinates=this.convertCoordinatesToMap(latitude,longitude);object.setLatLng([convertedCoordinates[0],convertedCoordinates[1]])},isMapAvailable:function(data){return data["v.body"].toUpperCase()!="SUN"},hideMap:function(){$(this.mapId).hide();this.noMapIndicator.removeClassName("hidden")},showMap:function(){$(this.mapId).show();this.noMapIndicator.addClassName("hidden")},initializeNoMapIndicator:function(){this.noMapIndicator=$(this.noMapIndicatorId)},initializeDatalink:function(){this.datalink.subscribeToData(["v.lat","v.long","v.body"]);this.datalink.addReceiverFunction(this.update.bind(this))}});var OrbitalPositionData=Class.create({initialize:function(datalink,options){this.datalink=datalink;this.initializeDatalink();this.timeoutRate=1e3;this.mutexTimestamp=null;this.rootReferenceBody=null;this.options=Object.extend({onRecalculate:null,numberOfSegments:120},options)},isLocked:function(){this.mutexTimestamp&&this.mutexTimestamp<(Date.now()/1e3|0)+this.timeoutRate},mutexLock:function(){this.mutexTimestamp=Date.now()},mutexUnlock:function(){this.mutexTimestamp=null},recalculate:function(data){if(this.isLocked()){return}this.mutexLock();Object.extend(data,{currentUniversalTime:this.adjustUniversalTime(data["t.universalTime"]),vesselBody:data["v.body"],vesselCurrentPosition:{relativePosition:null},targetCurrentPosition:{relativePosition:null}});this.getPositionsAndRecalculate(data)},getPositionsAndRecalculate:function(positionData){var requestParams={};var referenceBody=this.datalink.getOrbitalBodyInfo(positionData["vesselBody"]);this.rootReferenceBody=referenceBody;requestParams["currentReferenceBodyRadius"]="b.radius["+referenceBody.id+"]";requestParams["currentReferenceBodyTruePosition"]="b.o.truePositionAtUT["+referenceBody.id+","+positionData["currentUniversalTime"]+"]";requestParams["vesselCurrentPositionRelativePosition"]="o.relativePositionAtUTForOrbitPatch["+0+","+positionData["currentUniversalTime"]+"]";this.buildRelativePositionRequestsForOrbitPatches(requestParams,"vesselCurrentOrbit",positionData["o.orbitPatches"],positionData["currentUniversalTime"]);this.buildRelativePositionRequestsForManeuverNodeOrbitPatches(requestParams,"vesselManeuverNodes",positionData["o.maneuverNodes"],positionData["currentUniversalTime"]);if(positionData["tar.type"]){if(positionData["tar.o.orbitPatches"]&&positionData["tar.o.orbitPatches"].length>0){this.buildRelativePositionRequestsForOrbitPatches(requestParams,"targetCurrentOrbit",positionData["tar.o.orbitPatches"],positionData["currentUniversalTime"],"tar.o");requestParams["targetCurrentPositionRelativePosition"]="tar.o.relativePositionAtUTForOrbitPatch["+0+","+positionData["currentUniversalTime"]+"]"}else{var body=this.datalink.getOrbitalBodyInfo(positionData["tar.name"]);requestParams[body.name+"[metadata]radius"]="b.radius["+body.id+"]";requestParams[body.name+"["+positionData["currentUniversalTime"]+"]TruePosition"]="b.o.truePositionAtUT["+body.id+","+positionData["currentUniversalTime"]+"]";requestParams[body.name+"[metadata]currentTruePosition"]="b.o.truePositionAtUT["+body.id+","+positionData["currentUniversalTime"]+"]"}}this.datalink.sendMessage(requestParams,function(data){positionData["currentReferenceBodyRadius"]=data["currentReferenceBodyRadius"];positionData["currentReferenceBodyTruePosition"]=data["currentReferenceBodyTruePosition"];this.buildReferenceBodyPositionData(data,positionData);this.buildReferenceBodyMetadata(data,positionData);positionData["vesselCurrentPosition"]["relativePosition"]=data["vesselCurrentPositionRelativePosition"];this.buildRelativePositionPositionDataForOrbitPatches(data,positionData,"vesselCurrentOrbit","o.orbitPatches");if(positionData["o.maneuverNodes"]){this.buildRelativePositionPositionDataForManeuverNodeOrbitPatches(data,positionData,"vesselManeuverNodes","o.maneuverNodes")}if(positionData["tar.o.orbitPatches"]){this.buildRelativePositionPositionDataForOrbitPatches(data,positionData,"targetCurrentOrbit","tar.o.orbitPatches","tar.o");positionData["targetCurrentPosition"]["relativePosition"]=data["targetCurrentPositionRelativePosition"]}this.mutexUnlock();this.options.onRecalculate&&this.options.onRecalculate(positionData)}.bind(this))},buildRelativePositionRequestsForOrbitPatches:function(requestParams,orbitPatchType,orbitPatches,currentUniversalTime,requestPrefix){requestPrefix=requestPrefix||"o";for(var i=0;iendUT){UTForInterval=endUT}requestParams[this.rootReferenceBody.name+"["+UTForInterval+"]TruePosition"]="b.o.truePositionAtUT["+this.rootReferenceBody.id+","+UTForInterval+"]";requestParams[orbitPatchType+"["+i+"]["+UTForInterval+"]RelativePosition"]=requestPrefix+".relativePositionAtUTForOrbitPatch["+i+","+UTForInterval+"]";requestParams[orbitPatch["referenceBody"]+"["+UTForInterval+"]TruePosition"]="b.o.truePositionAtUT["+referenceBody.id+","+UTForInterval+"]"}requestParams[orbitPatch["referenceBody"]+"[metadata]radius"]="b.radius["+referenceBody.id+"]";requestParams[orbitPatch["referenceBody"]+"[metadata]currentTruePosition"]="b.o.truePositionAtUT["+referenceBody.id+","+currentUniversalTime+"]"}},buildRelativePositionRequestsForManeuverNodeOrbitPatches:function(requestParams,maneuverNodeType,maneuverNodes,currentUniversalTime){var requestPrefix="o.maneuverNodes.relativePositionAtUTForManeuverNodesOrbitPatch";for(var i=0;iendUT){UTForInterval=endUT; +Math.cosh = Math.cosh || function(x) { + return (Math.exp(x) + Math.exp(-x)) / 2; +} -}var args=[i,j,UTForInterval];requestParams[this.rootReferenceBody.name+"["+UTForInterval+"]TruePosition"]="b.o.truePositionAtUT["+this.rootReferenceBody.id+","+UTForInterval+"]";requestParams[labelPrefix+"["+j+"]["+UTForInterval+"]RelativePosition"]=requestPrefix+"["+args.join(",")+"]";requestParams[orbitPatch["referenceBody"]+"["+UTForInterval+"]TruePosition"]="b.o.truePositionAtUT["+referenceBody.id+","+UTForInterval+"]"}requestParams[orbitPatch["referenceBody"]+"[metadata]radius"]="b.radius["+referenceBody.id+"]";requestParams[orbitPatch["referenceBody"]+"[metadata]currentTruePosition"]="b.o.truePositionAtUT["+referenceBody.id+","+currentUniversalTime+"]"}}},buildRelativePositionPositionDataForOrbitPatches:function(rawData,positionData,orbitPatchType,orbitPatchesKey){var relativePositionFieldRegex=new RegExp(orbitPatchType+"\\[(\\d+)\\]\\[([\\d\\.]+)\\]RelativePosition");var orbitPatches=positionData[orbitPatchesKey]=positionData[orbitPatchesKey]||{};var rawDataKeys=Object.keys(rawData);for(var i=rawDataKeys.length-1;i>=0;i--){var key=rawDataKeys[i];if(relativePositionFieldRegex.test(key)){var matchParts=relativePositionFieldRegex.exec(key);var orbitPatchIndex=parseInt(matchParts[1]);var universalTime=matchParts[2];var relativePosition=rawData[key];var orbitPatch=orbitPatches[orbitPatchIndex]=orbitPatches[orbitPatchIndex]||{};var orbitPatchPositionData=orbitPatch["positionData"]=orbitPatch["positionData"]||{};orbitPatchPositionData[universalTime]=orbitPatchPositionData[universalTime]||{};orbitPatchPositionData[universalTime]["relativePosition"]=relativePosition}}},buildRelativePositionPositionDataForManeuverNodeOrbitPatches:function(rawData,positionData,maneuverNodeType,maneuverNodesKey){var relativePositionFieldRegex=new RegExp(maneuverNodeType+"\\[(\\d+)\\]\\[(\\d+)\\]\\[([\\d\\.]+)\\]RelativePosition");var maneuverNodes=positionData[maneuverNodesKey]=positionData[maneuverNodesKey]||{};var rawDataKeys=Object.keys(rawData);for(var i=rawDataKeys.length-1;i>=0;i--){var key=rawDataKeys[i];if(relativePositionFieldRegex.test(key)){var matchParts=relativePositionFieldRegex.exec(key);var maneuverNodeIndex=parseInt(matchParts[1]);var orbitPatchIndex=parseInt(matchParts[2]);var universalTime=matchParts[3];var relativePosition=rawData[key];var orbitPatch=maneuverNodes[maneuverNodeIndex]["orbitPatches"][orbitPatchIndex]=maneuverNodes[maneuverNodeIndex]["orbitPatches"][orbitPatchIndex]||{};var orbitPatchPositionData=orbitPatch["positionData"]=orbitPatch["positionData"]||{};orbitPatchPositionData[universalTime]=orbitPatchPositionData[universalTime]||{};orbitPatchPositionData[universalTime]["relativePosition"]=relativePosition}}},buildReferenceBodyPositionData:function(rawData,positionData){var referenceBodyTruePositionRegex=new RegExp(/(\w+)\[([\d\.]+)\]TruePosition$/);var rawDataKeys=Object.keys(rawData);for(var i=rawDataKeys.length-1;i>=0;i--){var key=rawDataKeys[i];if(referenceBodyTruePositionRegex.test(key)){var matchParts=referenceBodyTruePositionRegex.exec(key);var referenceBodyName=matchParts[1];var universalTime=matchParts[2];var truePosition=rawData[key];var referenceBodies=positionData["referenceBodies"]=positionData["referenceBodies"]||{};var referenceBodyObject=referenceBodies[referenceBodyName]=referenceBodies[referenceBodyName]||{};referenceBodyObject["positionData"]=referenceBodyObject["positionData"]||{};referenceBodyObject["positionData"][universalTime]=referenceBodyObject["positionData"][universalTime]||{};referenceBodyObject["positionData"][universalTime]["truePosition"]=truePosition}}},buildReferenceBodyMetadata:function(rawData,positionData){var referenceBodyTruePositionRegex=new RegExp(/(\w+)\[metadata\](\w+)$/);var rawDataKeys=Object.keys(rawData);for(var i=rawDataKeys.length-1;i>=0;i--){var key=rawDataKeys[i];if(referenceBodyTruePositionRegex.test(key)){var matchParts=referenceBodyTruePositionRegex.exec(key);var referenceBodyName=matchParts[1];var field=matchParts[2];var data=rawData[key];var referenceBodies=positionData["referenceBodies"]=positionData["referenceBodies"]||{};var referenceBodyObject=referenceBodies[referenceBodyName]=referenceBodies[referenceBodyName]||{};referenceBodyObject[field]=data}}},adjustUniversalTime:function(ut){return ut},initializeDatalink:function(){this.datalink.subscribeToData(["o.orbitPatches","t.universalTime","v.body","tar.name","tar.type","tar.o.orbitingBody","tar.o.orbitPatches","o.maneuverNodes"]);this.datalink.addReceiverFunction(this.recalculate.bind(this))}});var GroundTrackPositionDataFormatter=Class.create({initialize:function(orbitalPositionData,datalink,options){this.datalink=datalink;this.orbitalPositionData=orbitalPositionData;this.orbitalPositionData.options.onRecalculate=this.format.bind(this);this.rootReferenceBodyName=null;this.currentUniversalTime=null;this.options=Object.extend({onFormat:null,numberOfSegments:120},options)},format:function(positionData){var formattedData={vesselCurrentCoordinates:null,targetCurrentCoordinates:null,vesselSuborbitalPaths:[],vesselOrbitalPaths:[],targetSuborbitalPaths:[],targetOrbitalPaths:[],currentUniversalTime:positionData.currentUniversalTime,referenceBodyName:positionData.vesselBody,atmosphericRadius:this.datalink.getOrbitalBodyInfo(positionData.vesselBody).atmosphericRadius};this.currentUniversalTime=positionData.currentUniversalTime;this.formatVesselCurrentCoordinates(positionData,formattedData);this.formatTargetCurrentCoordinates(positionData,formattedData);this.formatVesselOrbitalPaths(positionData,formattedData);this.formatTargetOrbitalPaths(positionData,formattedData);this.options.onFormat&&this.options.onFormat(formattedData)},formatVesselCurrentCoordinates:function(positionData,formattedData){this.rootReferenceBodyName=positionData["vesselBody"];var currentPosition=positionData["vesselCurrentPosition"]["relativePosition"];var info=this.rootReferenceBody(positionData);formattedData.vesselCurrentCoordinates=this.coordinatesFromVector(currentPosition,info.radius)},formatTargetCurrentCoordinates:function(positionData,formattedData){if(this.rootReferenceBodyName!=positionData["tar.o.orbitingBody"]){return}if(positionData["tar.type"]!="Vessel"){return}var currentPosition=positionData["targetCurrentPosition"]["relativePosition"];var info=this.rootReferenceBody(positionData);formattedData.targetCurrentCoordinates=this.coordinatesFromVector(currentPosition,info.radius)},formatVesselOrbitalPaths:function(positionData,formattedData){var parentType="currentVessel";var orbitPatches=positionData["o.orbitPatches"];var pathSet=this.formatPathSet(positionData,orbitPatches,parentType,"orbitPath");formattedData.vesselOrbitalPaths=formattedData.vesselOrbitalPaths.concat(pathSet.filter(function(x){return x.type=="orbital"}));formattedData.vesselSuborbitalPaths=formattedData.vesselSuborbitalPaths.concat(pathSet.filter(function(x){return x.type=="suborbital"}));this.formatManeuverNodes(positionData,formattedData,positionData["o.maneuverNodes"],parentType)},formatTargetOrbitalPaths:function(positionData,formattedData){if(positionData["tar.type"]!="Vessel"){return}var parentType="targetVessel";var orbitPatches=positionData["tar.o.orbitPatches"];var pathSet=this.formatPathSet(positionData,orbitPatches,parentType,"orbitPath");formattedData.targetOrbitalPaths=pathSet.filter(function(x){return x.type=="orbital"});formattedData.targetSuborbitalPaths=pathSet.filter(function(x){return x.type=="suborbital"})},formatManeuverNodes:function(positionData,formattedData,maneuverNodes,parentType){for(var i=0;iorbitalClearanceDistance){var type="orbital"}else{var type="suborbital"}if(type!=currentPathType){currentPathSet=this.buildOrbitPath({type:type,parentType:parentType,pathType:pathType,points:[],altitudes:[]});pathSets.push(currentPathSet)}currentPathSet.points.push(coordinates);currentPathSet.altitudes.push({time:sortedUniversalTimes[j],altitude:length-info.radius});currentPathType=type}}return pathSets},buildOrbitPath:function(options){return{type:options.type,pathType:options.pathType,parentType:options.parentType,points:options.points,altitudes:options.altitudes}},vectorLength:function(vector){return Math.sqrt(Math.pow(vector[0],2)+Math.pow(vector[1],2)+Math.pow(vector[2],2))},coordinatesFromVector:function(vector,radius){var x=vector[0];var y=vector[1];var z=vector[2];var lat=90-Math.acos(z/radius)*180/Math.PI;var lon=(270+Math.atan2(x,y)*180/Math.PI)%360-180;if(!isNaN(lat)&&!isNaN(lon)){return[lat,lon]}else{return[]}},sortedUniversalTimes:function(positionData){var positionDataKeys=Object.keys(positionData);return positionDataKeys.map(function(x){return parseFloat(x)}).sortBy(function(x){x}).reverse()},orbitalClearanceDistance:function(positionData){return this.rootReferenceBody(positionData).radius+this.datalink.getOrbitalBodyInfo(this.rootReferenceBodyName).atmosphericRadius},rootReferenceBody:function(positionData){return positionData.referenceBodies[this.rootReferenceBodyName]}});var GroundTrack=Class.create({initialize:function(datalink,positionDataFormatter,map_id,altitudeEstimationId){this.datalink=datalink;this.positionDataFormatter=positionDataFormatter;this.map_id=map_id;this.altitudeEstimationId=altitudeEstimationId;this.vesselColor="#F5A623";this.vesselSuborbitalColor="red";this.maneuverNodeColor="#b4f489";this.targetColor="#987cf9";this.targetSuborbitalColor="#f97292";this.initializeAltitudeEstimate();this.initializeMap();this.positionDataFormatter.options.onFormat=this.render.bind(this)},render:function(formattedData){this.renderVesselCurrentCoordinates(formattedData);this.renderTargetCurrentCoordinates(formattedData);this.renderVesselOrbitPaths(formattedData);this.renderTargetOrbitPaths(formattedData);this.updateAltitudeEstimateChart(formattedData)},renderVesselCurrentCoordinates:function(formattedData){var coordinates=formattedData.vesselCurrentCoordinates;if(!coordinates){return}this.positionMap.setCoordinatesForMapObject(this.markers.vesselCoordinates,coordinates[0],coordinates[1])},renderTargetCurrentCoordinates:function(formattedData){var coordinates=formattedData.targetCurrentCoordinates;if(!coordinates){return}this.positionMap.setCoordinatesForMapObject(this.markers.targetCoordinates,coordinates[0],coordinates[1])},renderVesselOrbitPaths:function(formattedData){this.renderOrbitPaths(this.markers.vesselOrbitalPaths,formattedData.vesselOrbitalPaths,{color:this.vesselColor});this.renderOrbitPaths(this.markers.vesselSuborbitalPaths,formattedData.vesselSuborbitalPaths,{color:this.vesselSuborbitalColor})},renderTargetOrbitPaths:function(formattedData){this.renderOrbitPaths(this.markers.targetOrbitalPaths,formattedData.targetOrbitalPaths,{color:this.targetColor});this.renderOrbitPaths(this.markers.targetSuborbitalPaths,formattedData.targetSuborbitalPaths,{color:this.targetSuborbitalColor})},renderOrbitPaths:function(markers,orbitPaths,lineOptions){for(var i=markers.length-1;i>=0;i--){markers[i].setLatLngs([])}for(var i=0;i0){var startTime=parseFloat(sortedUniversalTimes.first());var endTime=parseFloat(sortedUniversalTimes.last());var totalDelta=sortedUniversalTimes.length;var intervalPeriod=Math.floor(totalDelta/maxLabelSections)}for(var i=0;i0){var startTime=parseFloat(sortedUniversalTimes[0])}for(var i=0;ia?-1:0>16&255)/255;this.g=(a>>8&255)/255;this.b=(a&255)/255;return this},setRGB:function(a,b,c){this.r=a;this.g=b;this.b=c;return this},setHSL:function(){function a(a,c,d){0>d&&(d+=1);1d?c:d<2/3?a+6*(c-a)*(2/3-d):a}return function(b,c,d){b=THREE.Math.euclideanModulo(b,1);c=THREE.Math.clamp(c,0,1);d=THREE.Math.clamp(d,0,1);0===c?this.r=this.g=this.b=d:(c=.5>=d?d*(1+c):d+c-d*c,d=2*d-c,this.r=a(d,c,b+1/3),this.g=a(d,c,b),this.b=a(d,c,b-1/3));return this}}(),setStyle:function(a){function b(b){void 0!==b&&1>parseFloat(b)&&console.warn("THREE.Color: Alpha component of "+a+" will be ignored.")}var c;if(c=/^((?:rgb|hsl)a?)\(\s*([^\)]*)\)/.exec(a)){var d=c[2];switch(c[1]){case"rgb":case"rgba":if(c=/^(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(d))return this.r=Math.min(255,parseInt(c[1],10))/255,this.g=Math.min(255,parseInt(c[2],10))/255,this.b=Math.min(255,parseInt(c[3],10))/255,b(c[5]),this;if(c=/^(\d+)\%\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(d))return this.r=Math.min(100,parseInt(c[1],10))/100,this.g=Math.min(100,parseInt(c[2],10))/100,this.b=Math.min(100,parseInt(c[3],10))/100,b(c[5]),this;break;case"hsl":case"hsla":if(c=/^([0-9]*\.?[0-9]+)\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(d)){var d=parseFloat(c[1])/360,e=parseInt(c[2],10)/100,f=parseInt(c[3],10)/100;b(c[5]);return this.setHSL(d,e,f)}}}else if(c=/^\#([A-Fa-f0-9]+)$/.exec(a)){c=c[1];d=c.length;if(3===d)return this.r=parseInt(c.charAt(0)+c.charAt(0),16)/255,this.g=parseInt(c.charAt(1)+c.charAt(1),16)/255,this.b=parseInt(c.charAt(2)+c.charAt(2),16)/255,this;if(6===d)return this.r=parseInt(c.charAt(0)+c.charAt(1),16)/255,this.g=parseInt(c.charAt(2)+c.charAt(3),16)/255,this.b=parseInt(c.charAt(4)+c.charAt(5),16)/255,this}a&&0=h?k/(e+f):k/(2-e-f);switch(e){case b:g=(c-d)/k+(cf&&c>b?(c=2*Math.sqrt(1+c-f-b),this._w=(k-g)/c,this._x=.25*c,this._y=(a+e)/c,this._z=(d+h)/c):f>b?(c=2*Math.sqrt(1+f-c-b),this._w=(d-h)/c,this._x=(a+e)/c,this._y=.25*c,this._z=(g+k)/c):(c=2*Math.sqrt(1+b-c-f),this._w=(e-a)/c,this._x=(d+h)/c,this._y=(g+k)/c,this._z=.25*c);this.onChangeCallback();return this},setFromUnitVectors:function(){var a,b;return function(c,d){void 0===a&&(a=new THREE.Vector3);b=c.dot(d)+1;1e-6>b?(b=0,Math.abs(c.x)>Math.abs(c.z)?a.set(-c.y,c.x,0):a.set(0,-c.z,c.y)):a.crossVectors(c,d);this._x=a.x;this._y=a.y;this._z=a.z;this._w=b;this.normalize();return this}}(),inverse:function(){this.conjugate().normalize();return this},conjugate:function(){this._x*=-1;this._y*=-1;this._z*=-1;this.onChangeCallback();return this},dot:function(a){return this._x*a._x+this._y*a._y+this._z*a._z+this._w*a._w},lengthSq:function(){return this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w},length:function(){return Math.sqrt(this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w)},normalize:function(){var a=this.length();0===a?(this._z=this._y=this._x=0,this._w=1):(a=1/a,this._x*=a,this._y*=a,this._z*=a,this._w*=a);this.onChangeCallback();return this},multiply:function(a,b){return void 0!==b?(console.warn("THREE.Quaternion: .multiply() now only accepts one argument. Use .multiplyQuaternions( a, b ) instead."),this.multiplyQuaternions(a,b)):this.multiplyQuaternions(this,a)},multiplyQuaternions:function(a,b){var c=a._x,d=a._y,e=a._z,f=a._w,g=b._x,h=b._y,k=b._z,l=b._w; +Math.sinh = Math.sinh || function(x) { + return (Math.exp(x) - Math.exp(-x)) / 2; +}; -this._x=c*l+f*g+d*k-e*h;this._y=d*l+f*h+e*g-c*k;this._z=e*l+f*k+c*h-d*g;this._w=f*l-c*g-d*h-e*k;this.onChangeCallback();return this},slerp:function(a,b){if(0===b)return this;if(1===b)return this.copy(a);var c=this._x,d=this._y,e=this._z,f=this._w,g=f*a._w+c*a._x+d*a._y+e*a._z;0>g?(this._w=-a._w,this._x=-a._x,this._y=-a._y,this._z=-a._z,g=-g):this.copy(a);if(1<=g)return this._w=f,this._x=c,this._y=d,this._z=e,this;var h=Math.sqrt(1-g*g);if(.001>Math.abs(h))return this._w=.5*(f+this._w),this._x=.5*(c+this._x),this._y=.5*(d+this._y),this._z=.5*(e+this._z),this;var k=Math.atan2(h,g),g=Math.sin((1-b)*k)/h,h=Math.sin(b*k)/h;this._w=f*g+this._w*h;this._x=c*g+this._x*h;this._y=d*g+this._y*h;this._z=e*g+this._z*h;this.onChangeCallback();return this},equals:function(a){return a._x===this._x&&a._y===this._y&&a._z===this._z&&a._w===this._w},fromArray:function(a,b){void 0===b&&(b=0);this._x=a[b];this._y=a[b+1];this._z=a[b+2];this._w=a[b+3];this.onChangeCallback();return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);a[b]=this._x;a[b+1]=this._y;a[b+2]=this._z;a[b+3]=this._w;return a},onChange:function(a){this.onChangeCallback=a;return this},onChangeCallback:function(){}};Object.assign(THREE.Quaternion,{slerp:function(a,b,c,d){return c.copy(a).slerp(b,d)},slerpFlat:function(a,b,c,d,e,f,g){var h=c[d+0],k=c[d+1],l=c[d+2];c=c[d+3];d=e[f+0];var p=e[f+1],n=e[f+2];e=e[f+3];if(c!==e||h!==d||k!==p||l!==n){f=1-g;var m=h*d+k*p+l*n+c*e,q=0<=m?1:-1,u=1-m*m;u>Number.EPSILON&&(u=Math.sqrt(u),m=Math.atan2(u,m*q),f=Math.sin(f*m)/u,g=Math.sin(g*m)/u);q*=g;h=h*f+d*q;k=k*f+p*q;l=l*f+n*q;c=c*f+e*q;f===1-g&&(g=1/Math.sqrt(h*h+k*k+l*l+c*c),h*=g,k*=g,l*=g,c*=g)}a[b]=h;a[b+1]=k;a[b+2]=l;a[b+3]=c}});THREE.Vector2=function(a,b){this.x=a||0;this.y=b||0};THREE.Vector2.prototype={constructor:THREE.Vector2,get width(){return this.x},set width(a){this.x=a},get height(){return this.y},set height(a){this.y=a},set:function(a,b){this.x=a;this.y=b;return this},setScalar:function(a){this.y=this.x=a;return this},setX:function(a){this.x=a;return this},setY:function(a){this.y=a;return this},setComponent:function(a,b){switch(a){case 0:this.x=b;break;case 1:this.y=b;break;default:throw Error("index is out of range: "+a)}},getComponent:function(a){switch(a){case 0:return this.x;case 1:return this.y;default:throw Error("index is out of range: "+a)}},clone:function(){return new this.constructor(this.x,this.y)},copy:function(a){this.x=a.x;this.y=a.y;return this},add:function(a,b){if(void 0!==b)return console.warn("THREE.Vector2: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(a,b);this.x+=a.x;this.y+=a.y;return this},addScalar:function(a){this.x+=a;this.y+=a;return this},addVectors:function(a,b){this.x=a.x+b.x;this.y=a.y+b.y;return this},addScaledVector:function(a,b){this.x+=a.x*b;this.y+=a.y*b;return this},sub:function(a,b){if(void 0!==b)return console.warn("THREE.Vector2: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(a,b);this.x-=a.x;this.y-=a.y;return this},subScalar:function(a){this.x-=a;this.y-=a;return this},subVectors:function(a,b){this.x=a.x-b.x;this.y=a.y-b.y;return this},multiply:function(a){this.x*=a.x;this.y*=a.y;return this},multiplyScalar:function(a){isFinite(a)?(this.x*=a,this.y*=a):this.y=this.x=0;return this},divide:function(a){this.x/=a.x;this.y/=a.y;return this},divideScalar:function(a){return this.multiplyScalar(1/a)},min:function(a){this.x=Math.min(this.x,a.x);this.y=Math.min(this.y,a.y);return this},max:function(a){this.x=Math.max(this.x,a.x);this.y=Math.max(this.y,a.y);return this},clamp:function(a,b){this.x=Math.max(a.x,Math.min(b.x,this.x));this.y=Math.max(a.y,Math.min(b.y,this.y));return this},clampScalar:function(){var a,b;return function(c,d){void 0===a&&(a=new THREE.Vector2,b=new THREE.Vector2);a.set(c,c);b.set(d,d);return this.clamp(a,b)}}(),clampLength:function(a,b){var c=this.length();this.multiplyScalar(Math.max(a,Math.min(b,c))/c);return this},floor:function(){this.x=Math.floor(this.x);this.y=Math.floor(this.y);return this},ceil:function(){this.x=Math.ceil(this.x);this.y=Math.ceil(this.y);return this},round:function(){this.x=Math.round(this.x);this.y=Math.round(this.y);return this},roundToZero:function(){this.x=0>this.x?Math.ceil(this.x):Math.floor(this.x);this.y=0>this.y?Math.ceil(this.y):Math.floor(this.y);return this},negate:function(){this.x=-this.x;this.y=-this.y;return this},dot:function(a){return this.x*a.x+this.y*a.y},lengthSq:function(){return this.x*this.x+this.y*this.y},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y)},lengthManhattan:function(){return Math.abs(this.x)+Math.abs(this.y)},normalize:function(){return this.divideScalar(this.length())},angle:function(){var a=Math.atan2(this.y,this.x);0>a&&(a+=2*Math.PI);return a},distanceTo:function(a){return Math.sqrt(this.distanceToSquared(a))},distanceToSquared:function(a){var b=this.x-a.x;a=this.y-a.y;return b*b+a*a},setLength:function(a){return this.multiplyScalar(a/this.length())},lerp:function(a,b){this.x+=(a.x-this.x)*b;this.y+=(a.y-this.y)*b;return this},lerpVectors:function(a,b,c){this.subVectors(b,a).multiplyScalar(c).add(a);return this},equals:function(a){return a.x===this.x&&a.y===this.y},fromArray:function(a,b){void 0===b&&(b=0);this.x=a[b];this.y=a[b+1];return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);a[b]=this.x;a[b+1]=this.y;return a},fromAttribute:function(a,b,c){void 0===c&&(c=0);b=b*a.itemSize+c;this.x=a.array[b];this.y=a.array[b+1];return this},rotateAround:function(a,b){var c=Math.cos(b),d=Math.sin(b),e=this.x-a.x,f=this.y-a.y;this.x=e*c-f*d+a.x;this.y=e*d+f*c+a.y;return this}};THREE.Vector3=function(a,b,c){this.x=a||0;this.y=b||0;this.z=c||0};THREE.Vector3.prototype={constructor:THREE.Vector3,set:function(a,b,c){this.x=a;this.y=b;this.z=c;return this},setScalar:function(a){this.z=this.y=this.x=a;return this},setX:function(a){this.x=a;return this},setY:function(a){this.y=a;return this},setZ:function(a){this.z=a;return this},setComponent:function(a,b){switch(a){case 0:this.x=b;break;case 1:this.y=b;break;case 2:this.z=b;break;default:throw Error("index is out of range: "+a)}},getComponent:function(a){switch(a){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw Error("index is out of range: "+a)}},clone:function(){return new this.constructor(this.x,this.y,this.z)},copy:function(a){this.x=a.x;this.y=a.y;this.z=a.z;return this},add:function(a,b){if(void 0!==b)return console.warn("THREE.Vector3: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(a,b);this.x+=a.x;this.y+=a.y;this.z+=a.z;return this},addScalar:function(a){this.x+=a;this.y+=a;this.z+=a;return this},addVectors:function(a,b){this.x=a.x+b.x;this.y=a.y+b.y;this.z=a.z+b.z;return this},addScaledVector:function(a,b){this.x+=a.x*b;this.y+=a.y*b;this.z+=a.z*b;return this},sub:function(a,b){if(void 0!==b)return console.warn("THREE.Vector3: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(a,b);this.x-=a.x;this.y-=a.y;this.z-=a.z;return this},subScalar:function(a){this.x-=a;this.y-=a;this.z-=a;return this},subVectors:function(a,b){this.x=a.x-b.x;this.y=a.y-b.y;this.z=a.z-b.z;return this},multiply:function(a,b){if(void 0!==b)return console.warn("THREE.Vector3: .multiply() now only accepts one argument. Use .multiplyVectors( a, b ) instead."),this.multiplyVectors(a,b);this.x*=a.x;this.y*=a.y;this.z*=a.z;return this},multiplyScalar:function(a){isFinite(a)?(this.x*=a,this.y*=a,this.z*=a):this.z=this.y=this.x=0;return this},multiplyVectors:function(a,b){this.x=a.x*b.x;this.y=a.y*b.y;this.z=a.z*b.z;return this},applyEuler:function(){var a;return function(b){!1===b instanceof THREE.Euler&&console.error("THREE.Vector3: .applyEuler() now expects an Euler rotation rather than a Vector3 and order.");void 0===a&&(a=new THREE.Quaternion);this.applyQuaternion(a.setFromEuler(b));return this}}(),applyAxisAngle:function(){var a;return function(b,c){void 0===a&&(a=new THREE.Quaternion);this.applyQuaternion(a.setFromAxisAngle(b,c));return this}}(),applyMatrix3:function(a){var b=this.x,c=this.y,d=this.z;a=a.elements;this.x=a[0]*b+a[3]*c+a[6]*d;this.y=a[1]*b+a[4]*c+a[7]*d;this.z=a[2]*b+a[5]*c+a[8]*d;return this},applyMatrix4:function(a){var b=this.x,c=this.y,d=this.z;a=a.elements;this.x=a[0]*b+a[4]*c+a[8]*d+a[12];this.y=a[1]*b+a[5]*c+a[9]*d+a[13];this.z=a[2]*b+a[6]*c+a[10]*d+a[14];return this},applyProjection:function(a){var b=this.x,c=this.y,d=this.z;a=a.elements;var e=1/(a[3]*b+a[7]*c+a[11]*d+a[15]);this.x=(a[0]*b+a[4]*c+a[8]*d+a[12])*e;this.y=(a[1]*b+a[5]*c+a[9]*d+a[13])*e;this.z=(a[2]*b+a[6]*c+a[10]*d+a[14])*e;return this},applyQuaternion:function(a){var b=this.x,c=this.y,d=this.z,e=a.x,f=a.y,g=a.z;a=a.w;var h=a*b+f*d-g*c,k=a*c+g*b-e*d,l=a*d+e*c-f*b,b=-e*b-f*c-g*d;this.x=h*a+b*-e+k*-g-l*-f;this.y=k*a+b*-f+l*-e-h*-g;this.z=l*a+b*-g+h*-f-k*-e;return this},project:function(){var a;return function(b){void 0===a&&(a=new THREE.Matrix4);a.multiplyMatrices(b.projectionMatrix,a.getInverse(b.matrixWorld));return this.applyProjection(a)}}(),unproject:function(){var a;return function(b){void 0===a&&(a=new THREE.Matrix4);a.multiplyMatrices(b.matrixWorld,a.getInverse(b.projectionMatrix));return this.applyProjection(a)}}(),transformDirection:function(a){var b=this.x,c=this.y,d=this.z;a=a.elements;this.x=a[0]*b+a[4]*c+a[8]*d;this.y=a[1]*b+a[5]*c+a[9]*d;this.z=a[2]*b+a[6]*c+a[10]*d;this.normalize();return this},divide:function(a){this.x/=a.x;this.y/=a.y;this.z/=a.z;return this},divideScalar:function(a){return this.multiplyScalar(1/a)},min:function(a){this.x=Math.min(this.x,a.x);this.y=Math.min(this.y,a.y);this.z=Math.min(this.z,a.z);return this},max:function(a){this.x=Math.max(this.x,a.x);this.y=Math.max(this.y,a.y);this.z=Math.max(this.z,a.z);return this},clamp:function(a,b){this.x=Math.max(a.x,Math.min(b.x,this.x));this.y=Math.max(a.y,Math.min(b.y,this.y));this.z=Math.max(a.z,Math.min(b.z,this.z));return this},clampScalar:function(){var a,b;return function(c,d){void 0===a&&(a=new THREE.Vector3,b=new THREE.Vector3);a.set(c,c,c);b.set(d,d,d);return this.clamp(a,b)}}(),clampLength:function(a,b){var c=this.length();this.multiplyScalar(Math.max(a,Math.min(b,c))/c);return this},floor:function(){this.x=Math.floor(this.x);this.y=Math.floor(this.y);this.z=Math.floor(this.z);return this},ceil:function(){this.x=Math.ceil(this.x);this.y=Math.ceil(this.y);this.z=Math.ceil(this.z);return this},round:function(){this.x=Math.round(this.x);this.y=Math.round(this.y);this.z=Math.round(this.z);return this},roundToZero:function(){this.x=0>this.x?Math.ceil(this.x):Math.floor(this.x);this.y=0>this.y?Math.ceil(this.y):Math.floor(this.y);this.z=0>this.z?Math.ceil(this.z):Math.floor(this.z);return this},negate:function(){this.x=-this.x;this.y=-this.y;this.z=-this.z;return this},dot:function(a){return this.x*a.x+this.y*a.y+this.z*a.z},lengthSq:function(){return this.x*this.x+this.y*this.y+this.z*this.z},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)},lengthManhattan:function(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)},normalize:function(){return this.divideScalar(this.length())},setLength:function(a){return this.multiplyScalar(a/this.length())},lerp:function(a,b){this.x+=(a.x-this.x)*b;this.y+=(a.y-this.y)*b;this.z+=(a.z-this.z)*b;return this},lerpVectors:function(a,b,c){this.subVectors(b,a).multiplyScalar(c).add(a);return this},cross:function(a,b){if(void 0!==b)return console.warn("THREE.Vector3: .cross() now only accepts one argument. Use .crossVectors( a, b ) instead."),this.crossVectors(a,b);var c=this.x,d=this.y,e=this.z;this.x=d*a.z-e*a.y;this.y=e*a.x-c*a.z;this.z=c*a.y-d*a.x;return this},crossVectors:function(a,b){var c=a.x,d=a.y,e=a.z,f=b.x,g=b.y,h=b.z;this.x=d*h-e*g;this.y=e*f-c*h;this.z=c*g-d*f;return this},projectOnVector:function(){var a,b;return function(c){void 0===a&&(a=new THREE.Vector3);a.copy(c).normalize();b=this.dot(a);return this.copy(a).multiplyScalar(b)}}(),projectOnPlane:function(){var a;return function(b){void 0===a&&(a=new THREE.Vector3);a.copy(this).projectOnVector(b);return this.sub(a)}}(),reflect:function(){var a;return function(b){void 0===a&&(a=new THREE.Vector3);return this.sub(a.copy(b).multiplyScalar(2*this.dot(b)))}}(),angleTo:function(a){a=this.dot(a)/Math.sqrt(this.lengthSq()*a.lengthSq());return Math.acos(THREE.Math.clamp(a,-1,1))},distanceTo:function(a){return Math.sqrt(this.distanceToSquared(a))},distanceToSquared:function(a){var b=this.x-a.x,c=this.y-a.y;a=this.z-a.z;return b*b+c*c+a*a},setFromSpherical:function(a){var b=Math.sin(a.phi)*a.radius;this.x=b*Math.sin(a.theta);this.y=Math.cos(a.phi)*a.radius;this.z=b*Math.cos(a.theta);return this},setFromMatrixPosition:function(a){return this.setFromMatrixColumn(a,3)},setFromMatrixScale:function(a){var b=this.setFromMatrixColumn(a,0).length(),c=this.setFromMatrixColumn(a,1).length();a=this.setFromMatrixColumn(a,2).length();this.x=b;this.y=c;this.z=a;return this},setFromMatrixColumn:function(a,b){"number"===typeof a&&(console.warn("THREE.Vector3: setFromMatrixColumn now expects ( matrix, index )."),b=a=b);return this.fromArray(a.elements,4*b)},equals:function(a){return a.x===this.x&&a.y===this.y&&a.z===this.z},fromArray:function(a,b){void 0===b&&(b=0);this.x=a[b];this.y=a[b+1];this.z=a[b+2];return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);a[b]=this.x;a[b+1]=this.y;a[b+2]=this.z;return a},fromAttribute:function(a,b,c){void 0===c&&(c=0);b=b*a.itemSize+c;this.x=a.array[b];this.y=a.array[b+1];this.z=a.array[b+2];return this}};THREE.Vector4=function(a,b,c,d){this.x=a||0;this.y=b||0;this.z=c||0;this.w=void 0!==d?d:1};THREE.Vector4.prototype={constructor:THREE.Vector4,set:function(a,b,c,d){this.x=a;this.y=b;this.z=c;this.w=d;return this},setScalar:function(a){this.w=this.z=this.y=this.x=a;return this},setX:function(a){this.x=a;return this},setY:function(a){this.y=a;return this},setZ:function(a){this.z=a;return this},setW:function(a){this.w=a;return this},setComponent:function(a,b){switch(a){case 0:this.x=b;break;case 1:this.y=b;break;case 2:this.z=b;break;case 3:this.w=b;break;default:throw Error("index is out of range: "+a)}},getComponent:function(a){switch(a){case 0:return this.x;case 1:return this.y;case 2:return this.z;case 3:return this.w;default:throw Error("index is out of range: "+a)}},clone:function(){return new this.constructor(this.x,this.y,this.z,this.w)},copy:function(a){this.x=a.x;this.y=a.y;this.z=a.z;this.w=void 0!==a.w?a.w:1;return this},add:function(a,b){if(void 0!==b)return console.warn("THREE.Vector4: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(a,b);this.x+=a.x;this.y+=a.y;this.z+=a.z;this.w+=a.w;return this},addScalar:function(a){this.x+=a;this.y+=a;this.z+=a;this.w+=a;return this},addVectors:function(a,b){this.x=a.x+b.x;this.y=a.y+b.y;this.z=a.z+b.z;this.w=a.w+b.w;return this},addScaledVector:function(a,b){this.x+=a.x*b;this.y+=a.y*b;this.z+=a.z*b;this.w+=a.w*b;return this},sub:function(a,b){if(void 0!==b)return console.warn("THREE.Vector4: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(a,b);this.x-=a.x;this.y-=a.y;this.z-=a.z;this.w-=a.w;return this},subScalar:function(a){this.x-=a;this.y-=a;this.z-=a;this.w-=a;return this},subVectors:function(a,b){this.x=a.x-b.x;this.y=a.y-b.y;this.z=a.z-b.z;this.w=a.w-b.w;return this},multiplyScalar:function(a){isFinite(a)?(this.x*=a,this.y*=a,this.z*=a,this.w*=a):this.w=this.z=this.y=this.x=0;return this},applyMatrix4:function(a){var b=this.x,c=this.y,d=this.z,e=this.w;a=a.elements;this.x=a[0]*b+a[4]*c+a[8]*d+a[12]*e;this.y=a[1]*b+a[5]*c+a[9]*d+a[13]*e;this.z=a[2]*b+a[6]*c+a[10]*d+a[14]*e;this.w=a[3]*b+a[7]*c+a[11]*d+a[15]*e;return this},divideScalar:function(a){return this.multiplyScalar(1/a)},setAxisAngleFromQuaternion:function(a){this.w=2*Math.acos(a.w);var b=Math.sqrt(1-a.w*a.w);1e-4>b?(this.x=1,this.z=this.y=0):(this.x=a.x/b,this.y=a.y/b,this.z=a.z/b);return this},setAxisAngleFromRotationMatrix:function(a){var b,c,d;a=a.elements;var e=a[0];d=a[4];var f=a[8],g=a[1],h=a[5],k=a[9];c=a[2];b=a[6];var l=a[10];if(.01>Math.abs(d-g)&&.01>Math.abs(f-c)&&.01>Math.abs(k-b)){if(.1>Math.abs(d+g)&&.1>Math.abs(f+c)&&.1>Math.abs(k+b)&&.1>Math.abs(e+h+l-3))return this.set(1,0,0,0),this;a=Math.PI;e=(e+1)/2;h=(h+1)/2;l=(l+1)/2;d=(d+g)/4;f=(f+c)/4;k=(k+b)/4;e>h&&e>l?.01>e?(b=0,d=c=.707106781):(b=Math.sqrt(e),c=d/b,d=f/b):h>l?.01>h?(b=.707106781,c=0,d=.707106781):(c=Math.sqrt(h),b=d/c,d=k/c):.01>l?(c=b=.707106781,d=0):(d=Math.sqrt(l),b=f/d,c=k/d);this.set(b,c,d,a);return this}a=Math.sqrt((b-k)*(b-k)+(f-c)*(f-c)+(g-d)*(g-d));.001>Math.abs(a)&&(a=1);this.x=(b-k)/a;this.y=(f-c)/a;this.z=(g-d)/a;this.w=Math.acos((e+h+l-1)/2);return this},min:function(a){this.x=Math.min(this.x,a.x);this.y=Math.min(this.y,a.y);this.z=Math.min(this.z,a.z);this.w=Math.min(this.w,a.w);return this},max:function(a){this.x=Math.max(this.x,a.x);this.y=Math.max(this.y,a.y);this.z=Math.max(this.z,a.z);this.w=Math.max(this.w,a.w);return this},clamp:function(a,b){this.x=Math.max(a.x,Math.min(b.x,this.x));this.y=Math.max(a.y,Math.min(b.y,this.y));this.z=Math.max(a.z,Math.min(b.z,this.z));this.w=Math.max(a.w,Math.min(b.w,this.w));return this},clampScalar:function(){var a,b;return function(c,d){void 0===a&&(a=new THREE.Vector4,b=new THREE.Vector4);a.set(c,c,c,c);b.set(d,d,d,d);return this.clamp(a,b)}}(),floor:function(){this.x=Math.floor(this.x);this.y=Math.floor(this.y);this.z=Math.floor(this.z);this.w=Math.floor(this.w);return this},ceil:function(){this.x=Math.ceil(this.x);this.y=Math.ceil(this.y);this.z=Math.ceil(this.z);this.w=Math.ceil(this.w);return this},round:function(){this.x=Math.round(this.x);this.y=Math.round(this.y);this.z=Math.round(this.z);this.w=Math.round(this.w);return this},roundToZero:function(){this.x=0>this.x?Math.ceil(this.x):Math.floor(this.x);this.y=0>this.y?Math.ceil(this.y):Math.floor(this.y);this.z=0>this.z?Math.ceil(this.z):Math.floor(this.z);this.w=0>this.w?Math.ceil(this.w):Math.floor(this.w);return this},negate:function(){this.x=-this.x;this.y=-this.y;this.z=-this.z;this.w=-this.w;return this},dot:function(a){return this.x*a.x+this.y*a.y+this.z*a.z+this.w*a.w},lengthSq:function(){return this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w)},lengthManhattan:function(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)+Math.abs(this.w)},normalize:function(){return this.divideScalar(this.length())},setLength:function(a){return this.multiplyScalar(a/this.length())},lerp:function(a,b){this.x+=(a.x-this.x)*b;this.y+=(a.y-this.y)*b;this.z+=(a.z-this.z)*b;this.w+=(a.w-this.w)*b;return this},lerpVectors:function(a,b,c){this.subVectors(b,a).multiplyScalar(c).add(a);return this},equals:function(a){return a.x===this.x&&a.y===this.y&&a.z===this.z&&a.w===this.w},fromArray:function(a,b){void 0===b&&(b=0);this.x=a[b];this.y=a[b+1];this.z=a[b+2];this.w=a[b+3];return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);a[b]=this.x;a[b+1]=this.y;a[b+2]=this.z;a[b+3]=this.w;return a},fromAttribute:function(a,b,c){void 0===c&&(c=0);b=b*a.itemSize+c;this.x=a.array[b];this.y=a.array[b+1];this.z=a.array[b+2];this.w=a.array[b+3];return this}};THREE.Euler=function(a,b,c,d){this._x=a||0;this._y=b||0;this._z=c||0;this._order=d||THREE.Euler.DefaultOrder};THREE.Euler.RotationOrders="XYZ YZX ZXY XZY YXZ ZYX".split(" ");THREE.Euler.DefaultOrder="XYZ";THREE.Euler.prototype={constructor:THREE.Euler,get x(){return this._x},set x(a){this._x=a;this.onChangeCallback()},get y(){return this._y},set y(a){this._y=a;this.onChangeCallback()},get z(){return this._z},set z(a){this._z=a;this.onChangeCallback()},get order(){return this._order},set order(a){this._order=a;this.onChangeCallback()},set:function(a,b,c,d){this._x=a;this._y=b;this._z=c;this._order=d||this._order;this.onChangeCallback();return this},clone:function(){return new this.constructor(this._x,this._y,this._z,this._order)},copy:function(a){this._x=a._x;this._y=a._y;this._z=a._z;this._order=a._order;this.onChangeCallback();return this},setFromRotationMatrix:function(a,b,c){var d=THREE.Math.clamp,e=a.elements;a=e[0];var f=e[4],g=e[8],h=e[1],k=e[5],l=e[9],p=e[2],n=e[6],e=e[10];b=b||this._order;"XYZ"===b?(this._y=Math.asin(d(g,-1,1)),.99999>Math.abs(g)?(this._x=Math.atan2(-l,e),this._z=Math.atan2(-f,a)):(this._x=Math.atan2(n,k),this._z=0)):"YXZ"===b?(this._x=Math.asin(-d(l,-1,1)),.99999>Math.abs(l)?(this._y=Math.atan2(g,e),this._z=Math.atan2(h,k)):(this._y=Math.atan2(-p,a),this._z=0)):"ZXY"===b?(this._x=Math.asin(d(n,-1,1)),.99999>Math.abs(n)?(this._y=Math.atan2(-p,e),this._z=Math.atan2(-f,k)):(this._y=0,this._z=Math.atan2(h,a))):"ZYX"===b?(this._y=Math.asin(-d(p,-1,1)),.99999>Math.abs(p)?(this._x=Math.atan2(n,e),this._z=Math.atan2(h,a)):(this._x=0,this._z=Math.atan2(-f,k))):"YZX"===b?(this._z=Math.asin(d(h,-1,1)),.99999>Math.abs(h)?(this._x=Math.atan2(-l,k),this._y=Math.atan2(-p,a)):(this._x=0,this._y=Math.atan2(g,e))):"XZY"===b?(this._z=Math.asin(-d(f,-1,1)),.99999>Math.abs(f)?(this._x=Math.atan2(n,k),this._y=Math.atan2(g,a)):(this._x=Math.atan2(-l,e),this._y=0)):console.warn("THREE.Euler: .setFromRotationMatrix() given unsupported order: "+b);this._order=b;if(!1!==c)this.onChangeCallback();return this},setFromQuaternion:function(){var a;return function(b,c,d){void 0===a&&(a=new THREE.Matrix4);a.makeRotationFromQuaternion(b);this.setFromRotationMatrix(a,c,d);return this}}(),setFromVector3:function(a,b){return this.set(a.x,a.y,a.z,b||this._order)},reorder:function(){var a=new THREE.Quaternion;return function(b){a.setFromEuler(this);this.setFromQuaternion(a,b)}}(),equals:function(a){return a._x===this._x&&a._y===this._y&&a._z===this._z&&a._order===this._order},fromArray:function(a){this._x=a[0];this._y=a[1];this._z=a[2];void 0!==a[3]&&(this._order=a[3]);this.onChangeCallback();return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);a[b]=this._x;a[b+1]=this._y;a[b+2]=this._z;a[b+3]=this._order;return a},toVector3:function(a){return a?a.set(this._x,this._y,this._z):new THREE.Vector3(this._x,this._y,this._z)},onChange:function(a){this.onChangeCallback=a;return this},onChangeCallback:function(){}};THREE.Line3=function(a,b){this.start=void 0!==a?a:new THREE.Vector3;this.end=void 0!==b?b:new THREE.Vector3};THREE.Line3.prototype={constructor:THREE.Line3,set:function(a,b){this.start.copy(a);this.end.copy(b);return this},clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.start.copy(a.start);this.end.copy(a.end);return this},center:function(a){return(a||new THREE.Vector3).addVectors(this.start,this.end).multiplyScalar(.5)},delta:function(a){return(a||new THREE.Vector3).subVectors(this.end,this.start)},distanceSq:function(){return this.start.distanceToSquared(this.end)},distance:function(){return this.start.distanceTo(this.end)},at:function(a,b){var c=b||new THREE.Vector3;return this.delta(c).multiplyScalar(a).add(this.start)},closestPointToPointParameter:function(){var a=new THREE.Vector3,b=new THREE.Vector3;return function(c,d){a.subVectors(c,this.start);b.subVectors(this.end,this.start);var e=b.dot(b),e=b.dot(a)/e;d&&(e=THREE.Math.clamp(e,0,1));return e}}(),closestPointToPoint:function(a,b,c){a=this.closestPointToPointParameter(a,b);c=c||new THREE.Vector3;return this.delta(c).multiplyScalar(a).add(this.start)},applyMatrix4:function(a){this.start.applyMatrix4(a);this.end.applyMatrix4(a);return this},equals:function(a){return a.start.equals(this.start)&&a.end.equals(this.end)}};THREE.Box2=function(a,b){this.min=void 0!==a?a:new THREE.Vector2(Infinity,Infinity);this.max=void 0!==b?b:new THREE.Vector2(-Infinity,-Infinity)};THREE.Box2.prototype={constructor:THREE.Box2,set:function(a,b){this.min.copy(a);this.max.copy(b);return this},setFromPoints:function(a){this.makeEmpty();for(var b=0,c=a.length;bthis.max.x||a.ythis.max.y?!1:!0},containsBox:function(a){return this.min.x<=a.min.x&&a.max.x<=this.max.x&&this.min.y<=a.min.y&&a.max.y<=this.max.y?!0:!1},getParameter:function(a,b){return(b||new THREE.Vector2).set((a.x-this.min.x)/(this.max.x-this.min.x),(a.y-this.min.y)/(this.max.y-this.min.y))},intersectsBox:function(a){return a.max.xthis.max.x||a.max.ythis.max.y?!1:!0},clampPoint:function(a,b){return(b||new THREE.Vector2).copy(a).clamp(this.min,this.max)},distanceToPoint:function(){var a=new THREE.Vector2;return function(b){return a.copy(b).clamp(this.min,this.max).sub(b).length()}}(),intersect:function(a){this.min.max(a.min);this.max.min(a.max);return this},union:function(a){this.min.min(a.min);this.max.max(a.max);return this},translate:function(a){this.min.add(a);this.max.add(a);return this},equals:function(a){return a.min.equals(this.min)&&a.max.equals(this.max)}};THREE.Box3=function(a,b){this.min=void 0!==a?a:new THREE.Vector3(Infinity,Infinity,Infinity);this.max=void 0!==b?b:new THREE.Vector3(-Infinity,-Infinity,-Infinity)};THREE.Box3.prototype={constructor:THREE.Box3,set:function(a,b){this.min.copy(a);this.max.copy(b);return this},setFromArray:function(a){this.makeEmpty();for(var b=Infinity,c=Infinity,d=Infinity,e=-Infinity,f=-Infinity,g=-Infinity,h=0,k=a.length;he&&(e=l);p>f&&(f=p);n>g&&(g=n)}this.min.set(b,c,d);this.max.set(e,f,g)},setFromPoints:function(a){this.makeEmpty();for(var b=0,c=a.length;bthis.max.x||a.ythis.max.y||a.zthis.max.z?!1:!0},containsBox:function(a){return this.min.x<=a.min.x&&a.max.x<=this.max.x&&this.min.y<=a.min.y&&a.max.y<=this.max.y&&this.min.z<=a.min.z&&a.max.z<=this.max.z?!0:!1},getParameter:function(a,b){return(b||new THREE.Vector3).set((a.x-this.min.x)/(this.max.x-this.min.x),(a.y-this.min.y)/(this.max.y-this.min.y),(a.z-this.min.z)/(this.max.z-this.min.z))},intersectsBox:function(a){return a.max.xthis.max.x||a.max.ythis.max.y||a.max.zthis.max.z?!1:!0},intersectsSphere:function(){var a;return function(b){void 0===a&&(a=new THREE.Vector3);this.clampPoint(b.center,a);return a.distanceToSquared(b.center)<=b.radius*b.radius}}(),intersectsPlane:function(a){var b,c;0=a.constant},clampPoint:function(a,b){return(b||new THREE.Vector3).copy(a).clamp(this.min,this.max)},distanceToPoint:function(){var a=new THREE.Vector3;return function(b){return a.copy(b).clamp(this.min,this.max).sub(b).length()}}(),getBoundingSphere:function(){var a=new THREE.Vector3;return function(b){b=b||new THREE.Sphere;b.center=this.center();b.radius=.5*this.size(a).length();return b}}(),intersect:function(a){this.min.max(a.min);this.max.min(a.max);return this},union:function(a){this.min.min(a.min);this.max.max(a.max);return this},applyMatrix4:function(){var a=[new THREE.Vector3,new THREE.Vector3,new THREE.Vector3,new THREE.Vector3,new THREE.Vector3,new THREE.Vector3,new THREE.Vector3,new THREE.Vector3];return function(b){a[0].set(this.min.x,this.min.y,this.min.z).applyMatrix4(b);a[1].set(this.min.x,this.min.y,this.max.z).applyMatrix4(b);a[2].set(this.min.x,this.max.y,this.min.z).applyMatrix4(b);a[3].set(this.min.x,this.max.y,this.max.z).applyMatrix4(b);a[4].set(this.max.x,this.min.y,this.min.z).applyMatrix4(b);a[5].set(this.max.x,this.min.y,this.max.z).applyMatrix4(b);a[6].set(this.max.x,this.max.y,this.min.z).applyMatrix4(b);a[7].set(this.max.x,this.max.y,this.max.z).applyMatrix4(b);this.makeEmpty();this.setFromPoints(a);return this}}(),translate:function(a){this.min.add(a);this.max.add(a);return this},equals:function(a){return a.min.equals(this.min)&&a.max.equals(this.max)}};THREE.Matrix3=function(){this.elements=new Float32Array([1,0,0,0,1,0,0,0,1]);0this.determinant()&&(g=-g);c.x=f[12];c.y=f[13];c.z=f[14];b.elements.set(this.elements);c=1/g;var f=1/h,l=1/k;b.elements[0]*=c;b.elements[1]*=c;b.elements[2]*=c;b.elements[4]*=f;b.elements[5]*=f;b.elements[6]*=f;b.elements[8]*=l;b.elements[9]*=l;b.elements[10]*=l;d.setFromRotationMatrix(b);e.x=g;e.y=h;e.z=k;return this}}(),makeFrustum:function(a,b,c,d,e,f){var g=this.elements;g[0]=2*e/(b-a);g[4]=0;g[8]=(b+a)/(b-a);g[12]=0;g[1]=0;g[5]=2*e/(d-c);g[9]=(d+c)/(d-c);g[13]=0;g[2]=0;g[6]=0;g[10]=-(f+e)/(f-e);g[14]=-2*f*e/(f-e);g[3]=0;g[7]=0;g[11]=-1;g[15]=0;return this},makePerspective:function(a,b,c,d){a=c*Math.tan(THREE.Math.degToRad(.5*a));var e=-a;return this.makeFrustum(e*b,a*b,e,a,c,d)},makeOrthographic:function(a,b,c,d,e,f){var g=this.elements,h=1/(b-a),k=1/(c-d),l=1/(f-e);g[0]=2*h;g[4]=0;g[8]=0;g[12]=-((b+a)*h);g[1]=0;g[5]=2*k;g[9]=0;g[13]=-((c+d)*k);g[2]=0;g[6]=0;g[10]=-2*l;g[14]=-((f+e)*l);g[3]=0;g[7]=0;g[11]=0;g[15]=1;return this},equals:function(a){var b=this.elements;a=a.elements;for(var c=0;16>c;c++)if(b[c]!==a[c])return!1;return!0},fromArray:function(a){this.elements.set(a);return this},toArray:function(){var a=this.elements;return[a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8],a[9],a[10],a[11],a[12],a[13],a[14],a[15]]}};THREE.Ray=function(a,b){this.origin=void 0!==a?a:new THREE.Vector3;this.direction=void 0!==b?b:new THREE.Vector3};THREE.Ray.prototype={constructor:THREE.Ray,set:function(a,b){this.origin.copy(a);this.direction.copy(b);return this},clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.origin.copy(a.origin);this.direction.copy(a.direction);return this},at:function(a,b){return(b||new THREE.Vector3).copy(this.direction).multiplyScalar(a).add(this.origin)},lookAt:function(a){this.direction.copy(a).sub(this.origin).normalize()},recast:function(){var a=new THREE.Vector3;return function(b){this.origin.copy(this.at(b,a));return this}}(),closestPointToPoint:function(a,b){var c=b||new THREE.Vector3;c.subVectors(a,this.origin);var d=c.dot(this.direction);return 0>d?c.copy(this.origin):c.copy(this.direction).multiplyScalar(d).add(this.origin)},distanceToPoint:function(a){return Math.sqrt(this.distanceSqToPoint(a))},distanceSqToPoint:function(){var a=new THREE.Vector3;return function(b){var c=a.subVectors(b,this.origin).dot(this.direction);if(0>c)return this.origin.distanceToSquared(b);a.copy(this.direction).multiplyScalar(c).add(this.origin);return a.distanceToSquared(b)}}(),distanceSqToSegment:function(){var a=new THREE.Vector3,b=new THREE.Vector3,c=new THREE.Vector3;return function(d,e,f,g){a.copy(d).add(e).multiplyScalar(.5);b.copy(e).sub(d).normalize();c.copy(this.origin).sub(a);var h=.5*d.distanceTo(e),k=-this.direction.dot(b),l=c.dot(this.direction),p=-c.dot(b),n=c.lengthSq(),m=Math.abs(1-k*k),q;0=-q?e<=q?(h=1/m,d*=h,e*=h,k=d*(d+k*e+2*l)+e*(k*d+e+2*p)+n):(e=h,d=Math.max(0,-(k*e+l)),k=-d*d+e*(e+2*p)+n):(e=-h,d=Math.max(0,-(k*e+l)),k=-d*d+e*(e+2*p)+n):e<=-q?(d=Math.max(0,-(-k*h+l)),e=0f)return null;f=Math.sqrt(f-e);e=d-f;d+=f;return 0>e&&0>d?null:0>e?this.at(d,c):this.at(e,c)}}(),intersectsSphere:function(a){return this.distanceToPoint(a.center)<=a.radius},distanceToPlane:function(a){var b=a.normal.dot(this.direction);if(0===b)return 0===a.distanceToPoint(this.origin)?0:null;a=-(this.origin.dot(a.normal)+a.constant)/b;return 0<=a?a:null},intersectPlane:function(a,b){var c=this.distanceToPlane(a);return null===c?null:this.at(c,b)},intersectsPlane:function(a){var b=a.distanceToPoint(this.origin);return 0===b||0>a.normal.dot(this.direction)*b?!0:!1},intersectBox:function(a,b){var c,d,e,f,g;d=1/this.direction.x;f=1/this.direction.y;g=1/this.direction.z;var h=this.origin;0<=d?(c=(a.min.x-h.x)*d,d*=a.max.x-h.x):(c=(a.max.x-h.x)*d,d*=a.min.x-h.x);0<=f?(e=(a.min.y-h.y)*f,f*=a.max.y-h.y):(e=(a.max.y-h.y)*f,f*=a.min.y-h.y);if(c>f||e>d)return null;if(e>c||c!==c)c=e;if(fg||e>d)return null;if(e>c||c!==c)c=e;if(gd?null:this.at(0<=c?c:d,b)},intersectsBox:function(){var a=new THREE.Vector3;return function(b){return null!==this.intersectBox(b,a)}}(),intersectTriangle:function(){var a=new THREE.Vector3,b=new THREE.Vector3,c=new THREE.Vector3,d=new THREE.Vector3;return function(e,f,g,h,k){b.subVectors(f,e);c.subVectors(g,e);d.crossVectors(b,c);f=this.direction.dot(d);if(0f)h=-1,f=-f;else return null;a.subVectors(this.origin,e);e=h*this.direction.dot(c.crossVectors(a,c));if(0>e)return null;g=h*this.direction.dot(b.cross(a));if(0>g||e+g>f)return null;e=-h*a.dot(d);return 0>e?null:this.at(e/f,k)}}(),applyMatrix4:function(a){this.direction.add(this.origin).applyMatrix4(a);this.origin.applyMatrix4(a);this.direction.sub(this.origin);this.direction.normalize();return this},equals:function(a){return a.origin.equals(this.origin)&&a.direction.equals(this.direction)}};THREE.Sphere=function(a,b){this.center=void 0!==a?a:new THREE.Vector3;this.radius=void 0!==b?b:0};THREE.Sphere.prototype={constructor:THREE.Sphere,set:function(a,b){this.center.copy(a);this.radius=b;return this},setFromPoints:function(){var a=new THREE.Box3;return function(b,c){var d=this.center;void 0!==c?d.copy(c):a.setFromPoints(b).center(d);for(var e=0,f=0,g=b.length;f=this.radius},containsPoint:function(a){return a.distanceToSquared(this.center)<=this.radius*this.radius},distanceToPoint:function(a){return a.distanceTo(this.center)-this.radius},intersectsSphere:function(a){var b=this.radius+a.radius;return a.center.distanceToSquared(this.center)<=b*b},intersectsBox:function(a){return a.intersectsSphere(this)},intersectsPlane:function(a){return Math.abs(this.center.dot(a.normal)-a.constant)<=this.radius},clampPoint:function(a,b){var c=this.center.distanceToSquared(a),d=b||new THREE.Vector3;d.copy(a);c>this.radius*this.radius&&(d.sub(this.center).normalize(),d.multiplyScalar(this.radius).add(this.center));return d},getBoundingBox:function(a){a=a||new THREE.Box3;a.set(this.center,this.center);a.expandByScalar(this.radius);return a},applyMatrix4:function(a){this.center.applyMatrix4(a);this.radius*=a.getMaxScaleOnAxis();return this},translate:function(a){this.center.add(a);return this},equals:function(a){return a.center.equals(this.center)&&a.radius===this.radius}};THREE.Frustum=function(a,b,c,d,e,f){this.planes=[void 0!==a?a:new THREE.Plane,void 0!==b?b:new THREE.Plane,void 0!==c?c:new THREE.Plane,void 0!==d?d:new THREE.Plane,void 0!==e?e:new THREE.Plane,void 0!==f?f:new THREE.Plane]};THREE.Frustum.prototype={constructor:THREE.Frustum,set:function(a,b,c,d,e,f){var g=this.planes;g[0].copy(a);g[1].copy(b);g[2].copy(c);g[3].copy(d);g[4].copy(e);g[5].copy(f);return this},clone:function(){return(new this.constructor).copy(this)},copy:function(a){for(var b=this.planes,c=0;6>c;c++)b[c].copy(a.planes[c]);return this},setFromMatrix:function(a){var b=this.planes,c=a.elements;a=c[0];var d=c[1],e=c[2],f=c[3],g=c[4],h=c[5],k=c[6],l=c[7],p=c[8],n=c[9],m=c[10],q=c[11],u=c[12],v=c[13],t=c[14],c=c[15];b[0].setComponents(f-a,l-g,q-p,c-u).normalize();b[1].setComponents(f+a,l+g,q+p,c+u).normalize();b[2].setComponents(f+d,l+h,q+n,c+v).normalize();b[3].setComponents(f-d,l-h,q-n,c-v).normalize();b[4].setComponents(f-e,l-k,q-m,c-t).normalize();b[5].setComponents(f+e,l+k,q+m,c+t).normalize();return this},intersectsObject:function(){var a=new THREE.Sphere;return function(b){var c=b.geometry;null===c.boundingSphere&&c.computeBoundingSphere();a.copy(c.boundingSphere);a.applyMatrix4(b.matrixWorld);return this.intersectsSphere(a)}}(),intersectsSphere:function(a){var b=this.planes,c=a.center;a=-a.radius;for(var d=0;6>d;d++)if(b[d].distanceToPoint(c)e;e++){var f=d[e];a.x=0g&&0>f)return!1}return!0}}(),containsPoint:function(a){for(var b=this.planes,c=0;6>c;c++)if(0>b[c].distanceToPoint(a))return!1;return!0}};THREE.Plane=function(a,b){this.normal=void 0!==a?a:new THREE.Vector3(1,0,0);this.constant=void 0!==b?b:0};THREE.Plane.prototype={constructor:THREE.Plane,set:function(a,b){this.normal.copy(a);this.constant=b;return this},setComponents:function(a,b,c,d){this.normal.set(a,b,c);this.constant=d;return this},setFromNormalAndCoplanarPoint:function(a,b){this.normal.copy(a);this.constant=-b.dot(this.normal);return this},setFromCoplanarPoints:function(){var a=new THREE.Vector3,b=new THREE.Vector3;return function(c,d,e){d=a.subVectors(e,d).cross(b.subVectors(c,d)).normalize();this.setFromNormalAndCoplanarPoint(d,c);return this}}(),clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.normal.copy(a.normal);this.constant=a.constant;return this},normalize:function(){var a=1/this.normal.length();this.normal.multiplyScalar(a);this.constant*=a;return this},negate:function(){this.constant*=-1;this.normal.negate();return this},distanceToPoint:function(a){return this.normal.dot(a)+this.constant},distanceToSphere:function(a){return this.distanceToPoint(a.center)-a.radius},projectPoint:function(a,b){return this.orthoPoint(a,b).sub(a).negate()},orthoPoint:function(a,b){var c=this.distanceToPoint(a);return(b||new THREE.Vector3).copy(this.normal).multiplyScalar(c)},intersectLine:function(){var a=new THREE.Vector3;return function(b,c){var d=c||new THREE.Vector3,e=b.delta(a),f=this.normal.dot(e);if(0===f){if(0===this.distanceToPoint(b.start))return d.copy(b.start)}else return f=-(b.start.dot(this.normal)+this.constant)/f,0>f||1b&&0a&&0e;e++)8===e||13===e||18===e||23===e?b[e]="-":14===e?b[e]="4":(2>=c&&(c=33554432+16777216*Math.random()|0),d=c&15,c>>=4,b[e]=a[19===e?d&3|8:d]);return b.join("")}}(),clamp:function(a,b,c){return Math.max(b,Math.min(c,a))},euclideanModulo:function(a,b){return(a%b+b)%b},mapLinear:function(a,b,c,d,e){return d+(a-b)*(e-d)/(c-b)},smoothstep:function(a,b,c){if(a<=b)return 0;if(a>=c)return 1;a=(a-b)/(c-b);return a*a*(3-2*a)},smootherstep:function(a,b,c){if(a<=b)return 0;if(a>=c)return 1;a=(a-b)/(c-b);return a*a*a*(a*(6*a-15)+10)},random16:function(){console.warn("THREE.Math.random16() has been deprecated. Use Math.random() instead.");return Math.random()},randInt:function(a,b){return a+Math.floor(Math.random()*(b-a+1))},randFloat:function(a,b){return a+Math.random()*(b-a)},randFloatSpread:function(a){return a*(.5-Math.random())},degToRad:function(){var a=Math.PI/180;return function(b){return b*a}}(),radToDeg:function(){var a=180/Math.PI;return function(b){return b*a}}(),isPowerOfTwo:function(a){return 0===(a&a-1)&&0!==a},nearestPowerOfTwo:function(a){return Math.pow(2,Math.round(Math.log(a)/Math.LN2))},nextPowerOfTwo:function(a){a--;a|=a>>1;a|=a>>2;a|=a>>4;a|=a>>8;a|=a>>16;a++;return a}};THREE.Spline=function(a){function b(a,b,c,d,e,f,g){a=.5*(c-a);d=.5*(d-b);return(2*(b-c)+a+d)*g+(-3*(b-c)-2*a-d)*f+a*e+b}this.points=a;var c=[],d={x:0,y:0,z:0},e,f,g,h,k,l,p,n,m;this.initFromArray=function(a){this.points=[];for(var b=0;bthis.points.length-2?this.points.length-1:f+1;c[3]=f>this.points.length-3?this.points.length-1:f+2;l=this.points[c[0]];p=this.points[c[1]];n=this.points[c[2]];m=this.points[c[3]];h=g*g;k=g*h;d.x=b(l.x,p.x,n.x,m.x,g,h,k);d.y=b(l.y,p.y,n.y,m.y,g,h,k);d.z=b(l.z,p.z,n.z,m.z,g,h,k);return d};this.getControlPointsArray=function(){var a,b,c=this.points.length,d=[];for(a=0;a=b.x+b.y}}();THREE.Triangle.prototype={constructor:THREE.Triangle,set:function(a,b,c){this.a.copy(a);this.b.copy(b);this.c.copy(c);return this},setFromPointsAndIndices:function(a,b,c,d){this.a.copy(a[b]);this.b.copy(a[c]);this.c.copy(a[d]);return this},clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.a.copy(a.a);this.b.copy(a.b);this.c.copy(a.c);return this},area:function(){var a=new THREE.Vector3,b=new THREE.Vector3;return function(){a.subVectors(this.c,this.b);b.subVectors(this.a,this.b);return.5*a.cross(b).length()}}(),midpoint:function(a){return(a||new THREE.Vector3).addVectors(this.a,this.b).add(this.c).multiplyScalar(1/3)},normal:function(a){return THREE.Triangle.normal(this.a,this.b,this.c,a)},plane:function(a){return(a||new THREE.Plane).setFromCoplanarPoints(this.a,this.b,this.c)},barycoordFromPoint:function(a,b){return THREE.Triangle.barycoordFromPoint(a,this.a,this.b,this.c,b)},containsPoint:function(a){return THREE.Triangle.containsPoint(a,this.a,this.b,this.c)},equals:function(a){return a.a.equals(this.a)&&a.b.equals(this.b)&&a.c.equals(this.c)}};THREE.Interpolant=function(a,b,c,d){this.parameterPositions=a;this._cachedIndex=0;this.resultBuffer=void 0!==d?d:new b.constructor(c);this.sampleValues=b;this.valueSize=c};THREE.Interpolant.prototype={constructor:THREE.Interpolant,evaluate:function(a){var b=this.parameterPositions,c=this._cachedIndex,d=b[c],e=b[c-1];a:{b:{c:{d:if(!(a=e)break a;else{f=b[1];a=e)break b}d=c;c=0}}for(;c>>1,ad;d++)if(e[d]===e[(d+1)%3]){a.push(f);break}for(f=a.length-1;0<=f;f--)for(e=a[f],this.faces.splice(e,1),c=0,g=this.faceVertexUvs.length;c-1?e(a,b,c):b.indexOf("%")>-1?f(a,b,c):b.indexOf(":")>-1?g(a,b):i(a._value,b,c)}function d(a,b){var c,d,e,f,g,i=b,j=["KB","MB","GB","TB","PB","EB","ZB","YB"],k=!1;if(b.indexOf(":")>-1)a._value=h(b);else if(b===q)a._value=0;else{for("."!==o[p].delimiters.decimal&&(b=b.replace(/\./g,"").replace(o[p].delimiters.decimal,".")),c=new RegExp("[^a-zA-Z]"+o[p].abbreviations.thousand+"(?:\\)|(\\"+o[p].currency.symbol+")?(?:\\))?)?$"),d=new RegExp("[^a-zA-Z]"+o[p].abbreviations.million+"(?:\\)|(\\"+o[p].currency.symbol+")?(?:\\))?)?$"),e=new RegExp("[^a-zA-Z]"+o[p].abbreviations.billion+"(?:\\)|(\\"+o[p].currency.symbol+")?(?:\\))?)?$"),f=new RegExp("[^a-zA-Z]"+o[p].abbreviations.trillion+"(?:\\)|(\\"+o[p].currency.symbol+")?(?:\\))?)?$"),g=0;g<=j.length&&!(k=b.indexOf(j[g])>-1?Math.pow(1024,g+1):!1);g++);a._value=(k?k:1)*(i.match(c)?Math.pow(10,3):1)*(i.match(d)?Math.pow(10,6):1)*(i.match(e)?Math.pow(10,9):1)*(i.match(f)?Math.pow(10,12):1)*(b.indexOf("%")>-1?.01:1)*((b.split("-").length+Math.min(b.split("(").length-1,b.split(")").length-1))%2?1:-1)*Number(b.replace(/[^0-9\.]+/g,"")),a._value=k?Math.ceil(a._value):a._value}return a._value}function e(a,b,c){var d,e,f=b.indexOf("$"),g=b.indexOf("("),h=b.indexOf("-"),j="";return b.indexOf(" $")>-1?(j=" ",b=b.replace(" $","")):b.indexOf("$ ")>-1?(j=" ",b=b.replace("$ ","")):b=b.replace("$",""),e=i(a._value,b,c),1>=f?e.indexOf("(")>-1||e.indexOf("-")>-1?(e=e.split(""),d=1,(g>f||h>f)&&(d=0),e.splice(d,0,o[p].currency.symbol+j),e=e.join("")):e=o[p].currency.symbol+j+e:e.indexOf(")")>-1?(e=e.split(""),e.splice(-1,0,j+o[p].currency.symbol),e=e.join("")):e=e+j+o[p].currency.symbol,e}function f(a,b,c){var d,e="",f=100*a._value;return b.indexOf(" %")>-1?(e=" ",b=b.replace(" %","")):b=b.replace("%",""),d=i(f,b,c),d.indexOf(")")>-1?(d=d.split(""),d.splice(-1,0,e+"%"),d=d.join("")):d=d+e+"%",d}function g(a){var b=Math.floor(a._value/60/60),c=Math.floor((a._value-60*b*60)/60),d=Math.round(a._value-60*b*60-60*c);return b+":"+(10>c?"0"+c:c)+":"+(10>d?"0"+d:d)}function h(a){var b=a.split(":"),c=0;return 3===b.length?(c+=60*Number(b[0])*60,c+=60*Number(b[1]),c+=Number(b[2])):2===b.length&&(c+=60*Number(b[0]),c+=Number(b[1])),Number(c)}function i(a,c,d){var e,f,g,h,i,j,k=!1,l=!1,m=!1,n="",r=!1,s=!1,t=!1,u=!1,v=!1,w="",x="",y=Math.abs(a),z=["B","KB","MB","GB","TB","PB","EB","ZB","YB"],A="",B=!1;if(0===a&&null!==q)return q;if(c.indexOf("(")>-1?(k=!0,c=c.slice(1,-1)):c.indexOf("+")>-1&&(l=!0,c=c.replace(/\+/g,"")),c.indexOf("a")>-1&&(r=c.indexOf("aK")>=0,s=c.indexOf("aM")>=0,t=c.indexOf("aB")>=0,u=c.indexOf("aT")>=0,v=r||s||t||u,c.indexOf(" a")>-1?(n=" ",c=c.replace(" a","")):c=c.replace("a",""),y>=Math.pow(10,12)&&!v||u?(n+=o[p].abbreviations.trillion,a/=Math.pow(10,12)):y=Math.pow(10,9)&&!v||t?(n+=o[p].abbreviations.billion,a/=Math.pow(10,9)):y=Math.pow(10,6)&&!v||s?(n+=o[p].abbreviations.million,a/=Math.pow(10,6)):(y=Math.pow(10,3)&&!v||r)&&(n+=o[p].abbreviations.thousand,a/=Math.pow(10,3))),c.indexOf("b")>-1)for(c.indexOf(" b")>-1?(w=" ",c=c.replace(" b","")):c=c.replace("b",""),g=0;g<=z.length;g++)if(e=Math.pow(1024,g),f=Math.pow(1024,g+1),a>=e&&f>a){w+=z[g],e>0&&(a/=e);break}return c.indexOf("o")>-1&&(c.indexOf(" o")>-1?(x=" ",c=c.replace(" o","")):c=c.replace("o",""),x+=o[p].ordinal(a)),c.indexOf("[.]")>-1&&(m=!0,c=c.replace("[.]",".")),h=a.toString().split(".")[0],i=c.split(".")[1],j=c.indexOf(","),i?(i.indexOf("[")>-1?(i=i.replace("]",""),i=i.split("["),A=b(a,i[0].length+i[1].length,d,i[1].length)):A=b(a,i.length,d),h=A.split(".")[0],A=A.split(".")[1].length?o[p].delimiters.decimal+A.split(".")[1]:"",m&&0===Number(A.slice(1))&&(A="")):h=b(a,null,d),h.indexOf("-")>-1&&(h=h.slice(1),B=!0),j>-1&&(h=h.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g,"$1"+o[p].delimiters.thousands)),0===c.indexOf(".")&&(h=""),(k&&B?"(":"")+(!k&&B?"-":"")+(!B&&l?"+":"")+h+A+(x?x:"")+(n?n:"")+(w?w:"")+(k&&B?")":"")}function j(a,b){o[a]=b}function k(a){var b=a.toString().split(".");return b.length<2?1:Math.pow(10,b[1].length)}function l(){var a=Array.prototype.slice.call(arguments);return a.reduce(function(a,b){var c=k(a),d=k(b);return c>d?c:d},-1/0)}var m,n="1.5.3",o={},p="en",q=null,r="0,0",s="undefined"!=typeof module&&module.exports;m=function(b){return m.isNumeral(b)?b=b.value():0===b||"undefined"==typeof b?b=0:Number(b)||(b=m.fn.unformat(b)),new a(Number(b))},m.version=n,m.isNumeral=function(b){return b instanceof a},m.language=function(a,b){if(!a)return p;if(a&&!b){if(!o[a])throw new Error("Unknown language : "+a);p=a}return(b||!o[a])&&j(a,b),m},m.languageData=function(a){if(!a)return o[p];if(!o[a])throw new Error("Unknown language : "+a);return o[a]},m.language("en",{delimiters:{thousands:",",decimal:"."},abbreviations:{thousand:"k",million:"m",billion:"b",trillion:"t"},ordinal:function(a){var b=a%10;return 1===~~(a%100/10)?"th":1===b?"st":2===b?"nd":3===b?"rd":"th"},currency:{symbol:"$"}}),m.zeroFormat=function(a){q="string"==typeof a?a:null},m.defaultFormat=function(a){r="string"==typeof a?a:"0.0"},"function"!=typeof Array.prototype.reduce&&(Array.prototype.reduce=function(a,b){"use strict";if(null===this||"undefined"==typeof this)throw new TypeError("Array.prototype.reduce called on null or undefined");if("function"!=typeof a)throw new TypeError(a+" is not a function");var c,d,e=this.length>>>0,f=!1;for(1c;++c)this.hasOwnProperty(c)&&(f?d=a(d,this[c],c,this):(d=this[c],f=!0));if(!f)throw new TypeError("Reduce of empty array with no initial value");return d}),m.fn=a.prototype={clone:function(){return m(this)},format:function(a,b){return c(this,a?a:r,void 0!==b?b:Math.round)},unformat:function(a){return"[object Number]"===Object.prototype.toString.call(a)?a:d(this,a?a:r)},value:function(){return this._value},valueOf:function(){return this._value},set:function(a){return this._value=Number(a),this},add:function(a){function b(a,b){return a+c*b}var c=l.call(null,this._value,a);return this._value=[this._value,a].reduce(b,0)/c,this},subtract:function(a){function b(a,b){return a-c*b}var c=l.call(null,this._value,a);return this._value=[a].reduce(b,this._value*c)/c,this},multiply:function(a){function b(a,b){var c=l(a,b);return a*c*b*c/(c*c)}return this._value=[this._value,a].reduce(b,1),this},divide:function(a){function b(a,b){var c=l(a,b);return a*c/(b*c)}return this._value=[this._value,a].reduce(b),this},difference:function(a){return Math.abs(m(this._value).subtract(a).value())}},s&&(module.exports=m),"undefined"==typeof ender&&(this.numeral=m),"function"==typeof define&&define.amd&&define([],function(){return m})}).call(this); +// Extracted Richard Bunt's work in Telemachus: https://github.com/richardbunt/Telemachus/blob/master/WebPages/WebPages/src/console.js -},getAttribute:function(a){return this.attributes[a]},removeAttribute:function(a){delete this.attributes[a];return this},addGroup:function(a,b,c){this.groups.push({start:a,count:b,materialIndex:void 0!==c?c:0})},clearGroups:function(){this.groups=[]},setDrawRange:function(a,b){this.drawRange.start=a;this.drawRange.count=b},applyMatrix:function(a){var b=this.attributes.position;void 0!==b&&(a.applyToVector3Array(b.array),b.needsUpdate=!0);b=this.attributes.normal;void 0!==b&&((new THREE.Matrix3).getNormalMatrix(a).applyToVector3Array(b.array),b.needsUpdate=!0);null!==this.boundingBox&&this.computeBoundingBox();null!==this.boundingSphere&&this.computeBoundingSphere();return this},rotateX:function(){var a;return function(b){void 0===a&&(a=new THREE.Matrix4);a.makeRotationX(b);this.applyMatrix(a);return this}}(),rotateY:function(){var a;return function(b){void 0===a&&(a=new THREE.Matrix4);a.makeRotationY(b);this.applyMatrix(a);return this}}(),rotateZ:function(){var a;return function(b){void 0===a&&(a=new THREE.Matrix4);a.makeRotationZ(b);this.applyMatrix(a);return this}}(),translate:function(){var a;return function(b,c,d){void 0===a&&(a=new THREE.Matrix4);a.makeTranslation(b,c,d);this.applyMatrix(a);return this}}(),scale:function(){var a;return function(b,c,d){void 0===a&&(a=new THREE.Matrix4);a.makeScale(b,c,d);this.applyMatrix(a);return this}}(),lookAt:function(){var a;return function(b){void 0===a&&(a=new THREE.Object3D);a.lookAt(b);a.updateMatrix();this.applyMatrix(a.matrix)}}(),center:function(){this.computeBoundingBox();var a=this.boundingBox.center().negate();this.translate(a.x,a.y,a.z);return a},setFromObject:function(a){var b=a.geometry;if(a instanceof THREE.Points||a instanceof THREE.Line){a=new THREE.Float32Attribute(3*b.vertices.length,3);var c=new THREE.Float32Attribute(3*b.colors.length,3);this.addAttribute("position",a.copyVector3sArray(b.vertices));this.addAttribute("color",c.copyColorsArray(b.colors));b.lineDistances&&b.lineDistances.length===b.vertices.length&&(a=new THREE.Float32Attribute(b.lineDistances.length,1),this.addAttribute("lineDistance",a.copyArray(b.lineDistances)));null!==b.boundingSphere&&(this.boundingSphere=b.boundingSphere.clone());null!==b.boundingBox&&(this.boundingBox=b.boundingBox.clone())}else a instanceof THREE.Mesh&&b instanceof THREE.Geometry&&this.fromGeometry(b);return this},updateFromObject:function(a){var b=a.geometry;if(a instanceof THREE.Mesh){var c=b.__directGeometry;if(void 0===c)return this.fromGeometry(b);c.verticesNeedUpdate=b.verticesNeedUpdate;c.normalsNeedUpdate=b.normalsNeedUpdate;c.colorsNeedUpdate=b.colorsNeedUpdate;c.uvsNeedUpdate=b.uvsNeedUpdate;c.groupsNeedUpdate=b.groupsNeedUpdate;b.verticesNeedUpdate=!1;b.normalsNeedUpdate=!1;b.colorsNeedUpdate=!1;b.uvsNeedUpdate=!1;b.groupsNeedUpdate=!1;b=c}!0===b.verticesNeedUpdate&&(c=this.attributes.position,void 0!==c&&(c.copyVector3sArray(b.vertices),c.needsUpdate=!0),b.verticesNeedUpdate=!1);!0===b.normalsNeedUpdate&&(c=this.attributes.normal,void 0!==c&&(c.copyVector3sArray(b.normals),c.needsUpdate=!0),b.normalsNeedUpdate=!1);!0===b.colorsNeedUpdate&&(c=this.attributes.color,void 0!==c&&(c.copyColorsArray(b.colors),c.needsUpdate=!0),b.colorsNeedUpdate=!1);b.uvsNeedUpdate&&(c=this.attributes.uv,void 0!==c&&(c.copyVector2sArray(b.uvs),c.needsUpdate=!0),b.uvsNeedUpdate=!1);b.lineDistancesNeedUpdate&&(c=this.attributes.lineDistance,void 0!==c&&(c.copyArray(b.lineDistances),c.needsUpdate=!0),b.lineDistancesNeedUpdate=!1);b.groupsNeedUpdate&&(b.computeGroups(a.geometry),this.groups=b.groups,b.groupsNeedUpdate=!1);return this},fromGeometry:function(a){a.__directGeometry=(new THREE.DirectGeometry).fromGeometry(a);return this.fromDirectGeometry(a.__directGeometry)},fromDirectGeometry:function(a){var b=new Float32Array(3*a.vertices.length);this.addAttribute("position",new THREE.BufferAttribute(b,3).copyVector3sArray(a.vertices));0this.duration&&this.resetDuration();this.trim();this.optimize()};THREE.AnimationClip.prototype={constructor:THREE.AnimationClip,resetDuration:function(){for(var a=0,b=0,c=this.tracks.length;b!==c;++b)var d=this.tracks[b],a=Math.max(a,d.times[d.times.length-1]);this.duration=a},trim:function(){for(var a=0;ab||0===c)return;this._startTime=null;b*=c}b*=this._updateTimeScale(a);c=this._updateTime(b);a=this._updateWeight(a);if(0c.parameterPositions[1]&&(this.stopFading(),0===d&&(this.enabled=!1))}}return this._effectiveWeight=b},_updateTimeScale:function(a){var b=0;if(!this.paused){var b=this.timeScale,c=this._timeScaleInterpolant;if(null!==c){var d=c.evaluate(a)[0],b=b*d;a>c.parameterPositions[1]&&(this.stopWarping(),0===b?this.pause=!0:this.timeScale=b)}}return this._effectiveTimeScale=b},_updateTime:function(a){var b=this.time+a;if(0===a)return b;var c=this._clip.duration,d=this.loop,e=this._loopCount,f=!1;switch(d){case THREE.LoopOnce:-1===e&&(this.loopCount=0,this._setEndings(!0,!0,!1));if(b>=c)b=c;else if(0>b)b=0;else break;this.clampWhenFinished?this.pause=!0:this.enabled=!1;this._mixer.dispatchEvent({type:"finished",action:this,direction:0>a?-1:1});break;case THREE.LoopPingPong:f=!0;case THREE.LoopRepeat:-1===e&&(0=c||0>b){var g=Math.floor(b/c),b=b-c*g,e=e+Math.abs(g),h=this.repetitions-e;if(0>h){this.clampWhenFinished?this.paused=!0:this.enabled=!1;b=0a,this._setEndings(a,!a,f)):this._setEndings(!1,!1,f);this._loopCount=e;this._mixer.dispatchEvent({type:"loop",action:this,loopDelta:g})}if(d===THREE.LoopPingPong&&1===(e&1))return this.time=b,c-b}return this.time=b},_setEndings:function(a,b,c){var d=this._interpolantSettings;c?(d.endingStart=THREE.ZeroSlopeEnding,d.endingEnd=THREE.ZeroSlopeEnding):(d.endingStart=a?this.zeroSlopeAtStart?THREE.ZeroSlopeEnding:THREE.ZeroCurvatureEnding:THREE.WrapAroundEnding,d.endingEnd=b?this.zeroSlopeAtEnd?THREE.ZeroSlopeEnding:THREE.ZeroCurvatureEnding:THREE.WrapAroundEnding)},_scheduleFading:function(a,b,c){var d=this._mixer,e=d.time,f=this._weightInterpolant;null===f&&(this._weightInterpolant=f=d._lendControlInterpolant());d=f.parameterPositions;f=f.sampleValues;d[0]=e;f[0]=b;d[1]=e+a;f[1]=c;return this}};Object.assign(THREE.AnimationMixer.prototype,{_bindAction:function(a,b){var c=a._localRoot||this._root,d=a._clip.tracks,e=d.length,f=a._propertyBindings,g=a._interpolants,h=c.uuid,k=this._bindingsByRootAndName,l=k[h];void 0===l&&(l={},k[h]=l);for(k=0;k!==e;++k){var p=d[k],n=p.name,m=l[n];if(void 0===m){m=f[k];if(void 0!==m){null===m._cacheIndex&&(++m.referenceCount,this._addInactiveBinding(m,h,n));continue}m=new THREE.PropertyMixer(THREE.PropertyBinding.create(c,n,b&&b._propertyBindings[k].binding.parsedPath),p.ValueTypeName,p.getValueSize());++m.referenceCount;this._addInactiveBinding(m,h,n)}f[k]=m;g[k].resultBuffer=m.buffer}},_activateAction:function(a){if(!this._isActiveAction(a)){if(null===a._cacheIndex){var b=(a._localRoot||this._root).uuid,c=a._clip.name,d=this._actionsByClip[c];this._bindAction(a,d&&d.knownActions[0]);this._addInactiveAction(a,c,b)}b=a._propertyBindings;c=0;for(d=b.length;c!==d;++c){var e=b[c];0===e.useCount++&&(this._lendBinding(e),e.saveOriginalState())}this._lendAction(a)}},_deactivateAction:function(a){if(this._isActiveAction(a)){for(var b=a._propertyBindings,c=0,d=b.length;c!==d;++c){var e=b[c];0===--e.useCount&&(e.restoreOriginalState(),this._takeBackBinding(e))}this._takeBackAction(a)}},_initMemoryManager:function(){this._actions=[];this._nActiveActions=0;this._actionsByClip={};this._bindings=[];this._nActiveBindings=0;this._bindingsByRootAndName={};this._controlInterpolants=[];this._nActiveControlInterpolants=0;var a=this;this.stats={actions:{get total(){return a._actions.length},get inUse(){return a._nActiveActions}},bindings:{get total(){return a._bindings.length},get inUse(){return a._nActiveBindings}},controlInterpolants:{get total(){return a._controlInterpolants.length},get inUse(){return a._nActiveControlInterpolants}}}},_isActiveAction:function(a){a=a._cacheIndex;return null!==a&&a=c){var n=c++,m=b[n];d[m.uuid]=p;b[p]=m;d[l]=n;b[n]=k;k=0;for(l=f;k!==l;++k){var m=e[k],q=m[p];m[p]=m[n];m[n]=q}}}this.nCachedObjects_=c},uncache:function(a){for(var b=this._objects,c=b.length,d=this.nCachedObjects_,e=this._indicesByUUID,f=this._bindings,g=f.length,h=0,k=arguments.length;h!==k;++h){var l=arguments[h].uuid,p=e[l];if(void 0!==p)if(delete e[l],pb;)--f;++f;if(0!==e||f!==d)e>=f&&(f=Math.max(f,1),e=f-1),d=this.getValueSize(),this.times=THREE.AnimationUtils.arraySlice(c,e,f),this.values=THREE.AnimationUtils.arraySlice(this.values,e*d,f*d);return this},validate:function(){var a=!0,b=this.getValueSize();0!==b-Math.floor(b)&&(console.error("invalid value size in track",this),a=!1);var c=this.times,b=this.values,d=c.length;0===d&&(console.error("track is empty",this),a=!1);for(var e=null,f=0;f!==d;f++){var g=c[f];if("number"===typeof g&&isNaN(g)){console.error("time is not a valid number",this,f,g);a=!1;break}if(null!==e&&e>g){console.error("out of order keys",this,f,g,e);a=!1;break}e=g}if(void 0!==b&&THREE.AnimationUtils.isTypedArray(b))for(f=0,c=b.length;f!==c;++f)if(d=b[f],isNaN(d)){console.error("value is not a valid number",this,f,d);a=!1;break}return a},optimize:function(){ -for(var a=this.times,b=this.values,c=this.getValueSize(),d=1,e=1,f=a.length-1;e<=f;++e){var g=!1,h=a[e];if(h!==a[e+1]&&(1!==e||h!==h[0]))for(var k=e*c,l=k-c,p=k+c,h=0;h!==c;++h){var n=b[k+h];if(n!==b[l+h]||n!==b[p+h]){g=!0;break}}if(g){if(e!==d)for(a[d]=a[e],g=e*c,k=d*c,h=0;h!==c;++h)b[k+h]=b[g+h];++d}}d!==a.length&&(this.times=THREE.AnimationUtils.arraySlice(a,0,d),this.values=THREE.AnimationUtils.arraySlice(b,0,d*c));return this}};Object.assign(THREE.KeyframeTrack,{parse:function(a){if(void 0===a.type)throw Error("track type undefined, can not parse");var b=THREE.KeyframeTrack._getTrackTypeForValueTypeName(a.type);if(void 0===a.times){console.warn("legacy JSON format detected, converting");var c=[],d=[];THREE.AnimationUtils.flattenJSON(a.keys,c,d,"value");a.times=c;a.values=d}return void 0!==b.parse?b.parse(a):new b(a.name,a.times,a.values,a.interpolation)},toJSON:function(a){var b=a.constructor;if(void 0!==b.toJSON)b=b.toJSON(a);else{var b={name:a.name,times:THREE.AnimationUtils.convertArray(a.times,Array),values:THREE.AnimationUtils.convertArray(a.values,Array)},c=a.getInterpolation();c!==a.DefaultInterpolation&&(b.interpolation=c)}b.type=a.ValueTypeName;return b},_getTrackTypeForValueTypeName:function(a){switch(a.toLowerCase()){case"scalar":case"double":case"float":case"number":case"integer":return THREE.NumberKeyframeTrack;case"vector":case"vector2":case"vector3":case"vector4":return THREE.VectorKeyframeTrack;case"color":return THREE.ColorKeyframeTrack;case"quaternion":return THREE.QuaternionKeyframeTrack;case"bool":case"boolean":return THREE.BooleanKeyframeTrack;case"string":return THREE.StringKeyframeTrack}throw Error("Unsupported typeName: "+a)}});THREE.PropertyBinding=function(a,b,c){this.path=b;this.parsedPath=c||THREE.PropertyBinding.parseTrackName(b);this.node=THREE.PropertyBinding.findNode(a,this.parsedPath.nodeName)||a;this.rootNode=a};THREE.PropertyBinding.prototype={constructor:THREE.PropertyBinding,getValue:function(a,b){this.bind();this.getValue(a,b)},setValue:function(a,b){this.bind();this.setValue(a,b)},bind:function(){var a=this.node,b=this.parsedPath,c=b.objectName,d=b.propertyName,e=b.propertyIndex;a||(this.node=a=THREE.PropertyBinding.findNode(this.rootNode,b.nodeName)||this.rootNode);this.getValue=this._getValue_unavailable;this.setValue=this._setValue_unavailable;if(a){if(c){var f=b.objectIndex;switch(c){case"materials":if(!a.material){console.error(" can not bind to material as node does not have a material",this);return}if(!a.material.materials){console.error(" can not bind to material.materials as node.material does not have a materials array",this);return}a=a.material.materials;break;case"bones":if(!a.skeleton){console.error(" can not bind to bones as node does not have a skeleton",this);return}a=a.skeleton.bones;for(c=0;cd&&this._mixBufferRegion(c,a,3*b,1-d,b);for(var d=b,f=b+b;d!==f;++d)if(c[d]!==c[d+b]){e.setValue(c,a);break}},saveOriginalState:function(){var a=this.buffer,b=this.valueSize,c=3*b;this.binding.getValue(a,c);for(var d=b;d!==c;++d)a[d]=a[c+d%b];this.cumulativeWeight=0},restoreOriginalState:function(){this.binding.setValue(this.buffer,3*this.valueSize)},_select:function(a,b,c,d,e){if(.5<=d)for(d=0;d!==e;++d)a[b+d]=a[c+d]},_slerp:function(a,b,c,d,e){THREE.Quaternion.slerpFlat(a,b,a,b,a,c,d)},_lerp:function(a,b,c,d,e){for(var f=1-d,g=0;g!==e;++g){var h=b+g;a[h]=a[h]*f+a[c+g]*d}}};THREE.BooleanKeyframeTrack=function(a,b,c){THREE.KeyframeTrack.call(this,a,b,c)};THREE.BooleanKeyframeTrack.prototype=Object.assign(Object.create(THREE.KeyframeTrack.prototype),{constructor:THREE.BooleanKeyframeTrack,ValueTypeName:"bool",ValueBufferType:Array,DefaultInterpolation:THREE.IntepolateDiscrete,InterpolantFactoryMethodLinear:void 0,InterpolantFactoryMethodSmooth:void 0});THREE.NumberKeyframeTrack=function(a,b,c,d){THREE.KeyframeTrack.call(this,a,b,c,d)};THREE.NumberKeyframeTrack.prototype=Object.assign(Object.create(THREE.KeyframeTrack.prototype),{constructor:THREE.NumberKeyframeTrack,ValueTypeName:"number"});THREE.QuaternionKeyframeTrack=function(a,b,c,d){THREE.KeyframeTrack.call(this,a,b,c,d)};THREE.QuaternionKeyframeTrack.prototype=Object.assign(Object.create(THREE.KeyframeTrack.prototype),{constructor:THREE.QuaternionKeyframeTrack,ValueTypeName:"quaternion",DefaultInterpolation:THREE.InterpolateLinear,InterpolantFactoryMethodLinear:function(a){return new THREE.QuaternionLinearInterpolant(this.times,this.values,this.getValueSize(),a)},InterpolantFactoryMethodSmooth:void 0});THREE.StringKeyframeTrack=function(a,b,c,d){THREE.KeyframeTrack.call(this,a,b,c,d)};THREE.StringKeyframeTrack.prototype=Object.assign(Object.create(THREE.KeyframeTrack.prototype),{constructor:THREE.StringKeyframeTrack,ValueTypeName:"string",ValueBufferType:Array,DefaultInterpolation:THREE.IntepolateDiscrete,InterpolantFactoryMethodLinear:void 0,InterpolantFactoryMethodSmooth:void 0});THREE.VectorKeyframeTrack=function(a,b,c,d){THREE.KeyframeTrack.call(this,a,b,c,d)};THREE.VectorKeyframeTrack.prototype=Object.assign(Object.create(THREE.KeyframeTrack.prototype),{constructor:THREE.VectorKeyframeTrack,ValueTypeName:"vector"});THREE.Audio=function(a){THREE.Object3D.call(this);this.type="Audio";this.context=a.context;this.source=this.context.createBufferSource();this.source.onended=this.onEnded.bind(this);this.gain=this.context.createGain();this.gain.connect(a.getInput());this.autoplay=!1;this.startTime=0;this.playbackRate=1;this.isPlaying=!1;this.hasPlaybackControl=!0;this.sourceType="empty";this.filter=null};THREE.Audio.prototype=Object.create(THREE.Object3D.prototype);THREE.Audio.prototype.constructor=THREE.Audio;THREE.Audio.prototype.getOutput=function(){return this.gain};THREE.Audio.prototype.load=function(a){var b=new THREE.AudioBuffer(this.context);b.load(a);this.setBuffer(b);return this};THREE.Audio.prototype.setNodeSource=function(a){this.hasPlaybackControl=!1;this.sourceType="audioNode";this.source=a;this.connect();return this};THREE.Audio.prototype.setBuffer=function(a){var b=this;a.onReady(function(a){b.source.buffer=a;b.sourceType="buffer";b.autoplay&&b.play()});return this};THREE.Audio.prototype.play=function(){if(!0===this.isPlaying)console.warn("THREE.Audio: Audio is already playing.");else if(!1===this.hasPlaybackControl)console.warn("THREE.Audio: this Audio has no playback control.");else{var a=this.context.createBufferSource();a.buffer=this.source.buffer;a.loop=this.source.loop;a.onended=this.source.onended;a.start(0,this.startTime);a.playbackRate.value=this.playbackRate;this.isPlaying=!0;this.source=a;this.connect()}};THREE.Audio.prototype.pause=function(){!1===this.hasPlaybackControl?console.warn("THREE.Audio: this Audio has no playback control."):(this.source.stop(),this.startTime=this.context.currentTime)};THREE.Audio.prototype.stop=function(){!1===this.hasPlaybackControl?console.warn("THREE.Audio: this Audio has no playback control."):(this.source.stop(),this.startTime=0)};THREE.Audio.prototype.connect=function(){null!==this.filter?(this.source.connect(this.filter),this.filter.connect(this.getOutput())):this.source.connect(this.getOutput())};THREE.Audio.prototype.disconnect=function(){null!==this.filter?(this.source.disconnect(this.filter),this.filter.disconnect(this.getOutput())):this.source.disconnect(this.getOutput())};THREE.Audio.prototype.getFilter=function(){return this.filter};THREE.Audio.prototype.setFilter=function(a){void 0===a&&(a=null);!0===this.isPlaying?(this.disconnect(),this.filter=a,this.connect()):this.filter=a};THREE.Audio.prototype.setPlaybackRate=function(a){!1===this.hasPlaybackControl?console.warn("THREE.Audio: this Audio has no playback control."):(this.playbackRate=a,!0===this.isPlaying&&(this.source.playbackRate.value=this.playbackRate))};THREE.Audio.prototype.getPlaybackRate=function(){return this.playbackRate};THREE.Audio.prototype.onEnded=function(){this.isPlaying=!1};THREE.Audio.prototype.setLoop=function(a){!1===this.hasPlaybackControl?console.warn("THREE.Audio: this Audio has no playback control."):this.source.loop=a};THREE.Audio.prototype.getLoop=function(){return!1===this.hasPlaybackControl?(console.warn("THREE.Audio: this Audio has no playback control."),!1):this.source.loop};THREE.Audio.prototype.setVolume=function(a){this.gain.gain.value=a};THREE.Audio.prototype.getVolume=function(){return this.gain.gain.value};THREE.AudioAnalyser=function(a,b){this.analyser=a.context.createAnalyser();this.analyser.fftSize=void 0!==b?b:2048;this.data=new Uint8Array(this.analyser.frequencyBinCount);a.getOutput().connect(this.analyser)};THREE.AudioAnalyser.prototype={constructor:THREE.AudioAnalyser,getData:function(){this.analyser.getByteFrequencyData(this.data);return this.data}};THREE.AudioBuffer=function(a){this.context=a;this.ready=!1;this.readyCallbacks=[]};THREE.AudioBuffer.prototype.load=function(a){var b=this,c=new XMLHttpRequest;c.open("GET",a,!0);c.responseType="arraybuffer";c.onload=function(a){b.context.decodeAudioData(this.response,function(a){b.buffer=a;b.ready=!0;for(a=0;ak.opacity&&(k.transparent=!0);c.setTextures(h);return c.parse(k)}}()};THREE.Loader.Handlers={handlers:[],add:function(a,b){this.handlers.push(a,b)},get:function(a){for(var b=this.handlers,c=0,d=b.length;cg;g++)m=w[k++],s=t[2*m],m=t[2*m+1],s=new THREE.Vector2(s,m),2!==g&&c.faceVertexUvs[d][h].push(s),0!==g&&c.faceVertexUvs[d][h+1].push(s);n&&(n=3*w[k++],q.normal.set(E[n++],E[n++],E[n]),v.normal.copy(q.normal));if(u)for(d=0;4>d;d++)n=3*w[k++],u=new THREE.Vector3(E[n++],E[n++],E[n]),2!==d&&q.vertexNormals.push(u),0!==d&&v.vertexNormals.push(u);p&&(p=w[k++],p=x[p],q.color.setHex(p),v.color.setHex(p));if(b)for(d=0;4>d;d++)p=w[k++],p=x[p],2!==d&&q.vertexColors.push(new THREE.Color(p)),0!==d&&v.vertexColors.push(new THREE.Color(p));c.faces.push(q);c.faces.push(v)}else{q=new THREE.Face3;q.a=w[k++];q.b=w[k++];q.c=w[k++];h&&(h=w[k++],q.materialIndex=h);h=c.faces.length;if(d)for(d=0;dg;g++)m=w[k++],s=t[2*m],m=t[2*m+1],s=new THREE.Vector2(s,m),c.faceVertexUvs[d][h].push(s);n&&(n=3*w[k++],q.normal.set(E[n++],E[n++],E[n]));if(u)for(d=0;3>d;d++)n=3*w[k++],u=new THREE.Vector3(E[n++],E[n++],E[n]),q.vertexNormals.push(u);p&&(p=w[k++],q.color.setHex(x[p]));if(b)for(d=0;3>d;d++)p=w[k++],q.vertexColors.push(new THREE.Color(x[p]));c.faces.push(q)}})(d);(function(){var b=void 0!==a.influencesPerVertex?a.influencesPerVertex:2;if(a.skinWeights)for(var d=0,g=a.skinWeights.length;dthis.opacity&&(d.opacity=this.opacity);!0===this.transparent&&(d.transparent=this.transparent);0= 365 * 24 * 3600) { + result += (t / (365 * 24 * 3600) | 0) + ":"; + t %= 365 * 24 * 3600; + if (t < 24 * 3600) { + result += "0:"; + } + } + if (t >= 24 * 3600) { + result += (t / (24 * 3600) | 0) + ":"; + } + t %= 24 * 3600; + return result + this.hourMinSec(t) + " MET"; + }, -this.specular=new THREE.Color(1118481);this.shininess=30;this.lightMap=this.map=null;this.lightMapIntensity=1;this.aoMap=null;this.aoMapIntensity=1;this.emissive=new THREE.Color(0);this.emissiveIntensity=1;this.bumpMap=this.emissiveMap=null;this.bumpScale=1;this.normalMap=null;this.normalScale=new THREE.Vector2(1,1);this.displacementMap=null;this.displacementScale=1;this.displacementBias=0;this.envMap=this.alphaMap=this.specularMap=null;this.combine=THREE.MultiplyOperation;this.reflectivity=1;this.refractionRatio=.98;this.fog=!0;this.shading=THREE.SmoothShading;this.blending=THREE.NormalBlending;this.wireframe=!1;this.wireframeLinewidth=1;this.wireframeLinejoin=this.wireframeLinecap="round";this.vertexColors=THREE.NoColors;this.morphNormals=this.morphTargets=this.skinning=!1;this.setValues(a)};THREE.MeshPhongMaterial.prototype=Object.create(THREE.Material.prototype);THREE.MeshPhongMaterial.prototype.constructor=THREE.MeshPhongMaterial;THREE.MeshPhongMaterial.prototype.copy=function(a){THREE.Material.prototype.copy.call(this,a);this.color.copy(a.color);this.specular.copy(a.specular);this.shininess=a.shininess;this.map=a.map;this.lightMap=a.lightMap;this.lightMapIntensity=a.lightMapIntensity;this.aoMap=a.aoMap;this.aoMapIntensity=a.aoMapIntensity;this.emissive.copy(a.emissive);this.emissiveMap=a.emissiveMap;this.emissiveIntensity=a.emissiveIntensity;this.bumpMap=a.bumpMap;this.bumpScale=a.bumpScale;this.normalMap=a.normalMap;this.normalScale.copy(a.normalScale);this.displacementMap=a.displacementMap;this.displacementScale=a.displacementScale;this.displacementBias=a.displacementBias;this.specularMap=a.specularMap;this.alphaMap=a.alphaMap;this.envMap=a.envMap;this.combine=a.combine;this.reflectivity=a.reflectivity;this.refractionRatio=a.refractionRatio;this.fog=a.fog;this.shading=a.shading;this.wireframe=a.wireframe;this.wireframeLinewidth=a.wireframeLinewidth;this.wireframeLinecap=a.wireframeLinecap;this.wireframeLinejoin=a.wireframeLinejoin;this.vertexColors=a.vertexColors;this.skinning=a.skinning;this.morphTargets=a.morphTargets;this.morphNormals=a.morphNormals;return this};THREE.MeshStandardMaterial=function(a){THREE.Material.call(this);this.type="MeshStandardMaterial";this.color=new THREE.Color(16777215);this.metalness=this.roughness=.5;this.lightMap=this.map=null;this.lightMapIntensity=1;this.aoMap=null;this.aoMapIntensity=1;this.emissive=new THREE.Color(0);this.emissiveIntensity=1;this.bumpMap=this.emissiveMap=null;this.bumpScale=1;this.normalMap=null;this.normalScale=new THREE.Vector2(1,1);this.displacementMap=null;this.displacementScale=1;this.displacementBias=0;this.envMap=this.alphaMap=this.metalnessMap=this.roughnessMap=null;this.envMapIntensity=1;this.refractionRatio=.98;this.fog=!0;this.shading=THREE.SmoothShading;this.blending=THREE.NormalBlending;this.wireframe=!1;this.wireframeLinewidth=1;this.wireframeLinejoin=this.wireframeLinecap="round";this.vertexColors=THREE.NoColors;this.morphNormals=this.morphTargets=this.skinning=!1;this.setValues(a)};THREE.MeshStandardMaterial.prototype=Object.create(THREE.Material.prototype);THREE.MeshStandardMaterial.prototype.constructor=THREE.MeshStandardMaterial;THREE.MeshStandardMaterial.prototype.copy=function(a){THREE.Material.prototype.copy.call(this,a);this.color.copy(a.color);this.roughness=a.roughness;this.metalness=a.metalness;this.map=a.map;this.lightMap=a.lightMap;this.lightMapIntensity=a.lightMapIntensity;this.aoMap=a.aoMap;this.aoMapIntensity=a.aoMapIntensity;this.emissive.copy(a.emissive);this.emissiveMap=a.emissiveMap;this.emissiveIntensity=a.emissiveIntensity;this.bumpMap=a.bumpMap;this.bumpScale=a.bumpScale;this.normalMap=a.normalMap;this.normalScale.copy(a.normalScale);this.displacementMap=a.displacementMap;this.displacementScale=a.displacementScale;this.displacementBias=a.displacementBias;this.roughnessMap=a.roughnessMap;this.metalnessMap=a.metalnessMap;this.alphaMap=a.alphaMap;this.envMap=a.envMap;this.envMapIntensity=a.envMapIntensity;this.refractionRatio=a.refractionRatio;this.fog=a.fog;this.shading=a.shading;this.wireframe=a.wireframe;this.wireframeLinewidth=a.wireframeLinewidth;this.wireframeLinecap=a.wireframeLinecap;this.wireframeLinejoin=a.wireframeLinejoin;this.vertexColors=a.vertexColors;this.skinning=a.skinning;this.morphTargets=a.morphTargets;this.morphNormals=a.morphNormals;return this};THREE.MeshDepthMaterial=function(a){THREE.Material.call(this);this.type="MeshDepthMaterial";this.wireframe=this.morphTargets=!1;this.wireframeLinewidth=1;this.setValues(a)};THREE.MeshDepthMaterial.prototype=Object.create(THREE.Material.prototype);THREE.MeshDepthMaterial.prototype.constructor=THREE.MeshDepthMaterial;THREE.MeshDepthMaterial.prototype.copy=function(a){THREE.Material.prototype.copy.call(this,a);this.wireframe=a.wireframe;this.wireframeLinewidth=a.wireframeLinewidth;return this};THREE.MeshNormalMaterial=function(a){THREE.Material.call(this,a);this.type="MeshNormalMaterial";this.wireframe=!1;this.wireframeLinewidth=1;this.morphTargets=!1;this.setValues(a)};THREE.MeshNormalMaterial.prototype=Object.create(THREE.Material.prototype);THREE.MeshNormalMaterial.prototype.constructor=THREE.MeshNormalMaterial;THREE.MeshNormalMaterial.prototype.copy=function(a){THREE.Material.prototype.copy.call(this,a);this.wireframe=a.wireframe;this.wireframeLinewidth=a.wireframeLinewidth;return this};THREE.MultiMaterial=function(a){this.uuid=THREE.Math.generateUUID();this.type="MultiMaterial";this.materials=a instanceof Array?a:[];this.visible=!0};THREE.MultiMaterial.prototype={constructor:THREE.MultiMaterial,toJSON:function(a){for(var b={metadata:{version:4.2,type:"material",generator:"MaterialExporter"},uuid:this.uuid,type:this.type,materials:[]},c=this.materials,d=0,e=c.length;da.x||1a.x?0:1;break;case THREE.MirroredRepeatWrapping:1===Math.abs(Math.floor(a.x)%2)?a.x=Math.ceil(a.x)-a.x:a.x-=Math.floor(a.x)}if(0>a.y||1a.y?0:1;break;case THREE.MirroredRepeatWrapping:1===Math.abs(Math.floor(a.y)%2)?a.y=Math.ceil(a.y)-a.y:a.y-=Math.floor(a.y)}this.flipY&&(a.y=1-a.y)}}};THREE.EventDispatcher.prototype.apply(THREE.Texture.prototype);THREE.TextureIdCount=0;THREE.CanvasTexture=function(a,b,c,d,e,f,g,h,k){THREE.Texture.call(this,a,b,c,d,e,f,g,h,k);this.needsUpdate=!0};THREE.CanvasTexture.prototype=Object.create(THREE.Texture.prototype);THREE.CanvasTexture.prototype.constructor=THREE.CanvasTexture;THREE.CubeTexture=function(a,b,c,d,e,f,g,h,k){a=void 0!==a?a:[];b=void 0!==b?b:THREE.CubeReflectionMapping;THREE.Texture.call(this,a,b,c,d,e,f,g,h,k);this.flipY=!1};THREE.CubeTexture.prototype=Object.create(THREE.Texture.prototype);THREE.CubeTexture.prototype.constructor=THREE.CubeTexture;Object.defineProperty(THREE.CubeTexture.prototype,"images",{get:function(){return this.image},set:function(a){this.image=a}});THREE.CompressedTexture=function(a,b,c,d,e,f,g,h,k,l,p){THREE.Texture.call(this,null,f,g,h,k,l,d,e,p);this.image={width:b,height:c};this.mipmaps=a;this.generateMipmaps=this.flipY=!1};THREE.CompressedTexture.prototype=Object.create(THREE.Texture.prototype);THREE.CompressedTexture.prototype.constructor=THREE.CompressedTexture;THREE.DataTexture=function(a,b,c,d,e,f,g,h,k,l,p){THREE.Texture.call(this,null,f,g,h,k,l,d,e,p);this.image={data:a,width:b,height:c};this.magFilter=void 0!==k?k:THREE.NearestFilter;this.minFilter=void 0!==l?l:THREE.NearestFilter;this.generateMipmaps=this.flipY=!1};THREE.DataTexture.prototype=Object.create(THREE.Texture.prototype);THREE.DataTexture.prototype.constructor=THREE.DataTexture;THREE.VideoTexture=function(a,b,c,d,e,f,g,h,k){function l(){requestAnimationFrame(l);a.readyState===a.HAVE_ENOUGH_DATA&&(p.needsUpdate=!0)}THREE.Texture.call(this,a,b,c,d,e,f,g,h,k);this.generateMipmaps=!1;var p=this;l()};THREE.VideoTexture.prototype=Object.create(THREE.Texture.prototype);THREE.VideoTexture.prototype.constructor=THREE.VideoTexture;THREE.Group=function(){THREE.Object3D.call(this);this.type="Group"};THREE.Group.prototype=Object.create(THREE.Object3D.prototype);THREE.Group.prototype.constructor=THREE.Group;THREE.Points=function(a,b){THREE.Object3D.call(this);this.type="Points";this.geometry=void 0!==a?a:new THREE.Geometry;this.material=void 0!==b?b:new THREE.PointsMaterial({color:16777215*Math.random()})};THREE.Points.prototype=Object.create(THREE.Object3D.prototype);THREE.Points.prototype.constructor=THREE.Points;THREE.Points.prototype.raycast=function(){var a=new THREE.Matrix4,b=new THREE.Ray,c=new THREE.Sphere;return function(d,e){function f(a,c){var f=b.distanceSqToPoint(a);if(fd.far||e.push({distance:l,distanceToRay:Math.sqrt(f),point:h.clone(),index:c,face:null,object:g})}}var g=this,h=this.geometry,k=this.matrixWorld,l=d.params.Points.threshold;null===h.boundingSphere&&h.computeBoundingSphere();c.copy(h.boundingSphere);c.applyMatrix4(k);if(!1!==d.ray.intersectsSphere(c)){a.getInverse(k);b.copy(d.ray).applyMatrix4(a);var l=l/((this.scale.x+this.scale.y+this.scale.z)/3),p=l*l,l=new THREE.Vector3;if(h instanceof THREE.BufferGeometry){var n=h.index,h=h.attributes.position.array;if(null!==n)for(var m=n.array,n=0,q=m.length;nf||(p.applyMatrix4(this.matrixWorld),v=d.ray.origin.distanceTo(p),vd.far||e.push({distance:v,point:h.clone().applyMatrix4(this.matrixWorld),index:g,face:null,faceIndex:null,object:this}))}else for(g=0,u=q.length/3-1;gf||(p.applyMatrix4(this.matrixWorld),v=d.ray.origin.distanceTo(p),vd.far||e.push({distance:v,point:h.clone().applyMatrix4(this.matrixWorld),index:g,face:null,faceIndex:null,object:this}))}else if(g instanceof THREE.Geometry)for(k=g.vertices,l=k.length,g=0;gf||(p.applyMatrix4(this.matrixWorld),v=d.ray.origin.distanceTo(p),vd.far||e.push({distance:v,point:h.clone().applyMatrix4(this.matrixWorld),index:g,face:null,faceIndex:null,object:this}))}}}();THREE.Line.prototype.clone=function(){return new this.constructor(this.geometry,this.material).copy(this)};THREE.LineStrip=0;THREE.LinePieces=1;THREE.LineSegments=function(a,b){THREE.Line.call(this,a,b);this.type="LineSegments"};THREE.LineSegments.prototype=Object.create(THREE.Line.prototype);THREE.LineSegments.prototype.constructor=THREE.LineSegments;THREE.Mesh=function(a,b){THREE.Object3D.call(this);this.type="Mesh";this.geometry=void 0!==a?a:new THREE.Geometry;this.material=void 0!==b?b:new THREE.MeshBasicMaterial({color:16777215*Math.random()});this.drawMode=THREE.TrianglesDrawMode;this.updateMorphTargets()};THREE.Mesh.prototype=Object.create(THREE.Object3D.prototype);THREE.Mesh.prototype.constructor=THREE.Mesh;THREE.Mesh.prototype.setDrawMode=function(a){this.drawMode=a};THREE.Mesh.prototype.updateMorphTargets=function(){if(void 0!==this.geometry.morphTargets&&0b.far?null:{distance:c,point:s.clone(),object:a}}function c(c,d,e,f,l,p,n,s){g.fromArray(f,3*p);h.fromArray(f,3*n);k.fromArray(f,3*s);if(c=b(c,d,e,g,h,k,t))l&&(m.fromArray(l,2*p),q.fromArray(l,2*n),u.fromArray(l,2*s),c.uv=a(t,g,h,k,m,q,u)),c.face=new THREE.Face3(p,n,s,THREE.Triangle.normal(g,h,k)),c.faceIndex=p;return c}var d=new THREE.Matrix4,e=new THREE.Ray,f=new THREE.Sphere,g=new THREE.Vector3,h=new THREE.Vector3,k=new THREE.Vector3,l=new THREE.Vector3,p=new THREE.Vector3,n=new THREE.Vector3,m=new THREE.Vector2,q=new THREE.Vector2,u=new THREE.Vector2,v=new THREE.Vector3,t=new THREE.Vector3,s=new THREE.Vector3;return function(s,v){var x=this.geometry,D=this.material,z=this.matrixWorld;if(void 0!==D&&(null===x.boundingSphere&&x.computeBoundingSphere(),f.copy(x.boundingSphere),f.applyMatrix4(z),!1!==s.ray.intersectsSphere(f)&&(d.getInverse(z),e.copy(s.ray).applyMatrix4(d),null===x.boundingBox||!1!==e.intersectsBox(x.boundingBox)))){var y,B;if(x instanceof THREE.BufferGeometry){var G,F,D=x.index,z=x.attributes,x=z.position.array;void 0!==z.uv&&(y=z.uv.array);if(null!==D)for(var z=D.array,H=0,L=z.length;H=d[e].distance)d[e-1].object.visible=!1,d[e].object.visible=!0;else break;for(;ethis.scale.x*this.scale.y||c.push({distance:Math.sqrt(d),point:this.position,face:null,object:this})}}();THREE.Sprite.prototype.clone=function(){return new this.constructor(this.material).copy(this)};THREE.Particle=THREE.Sprite;THREE.LensFlare=function(a,b,c,d,e){THREE.Object3D.call(this);this.lensFlares=[];this.positionScreen=new THREE.Vector3;this.customUpdateCallback=void 0;void 0!==a&&this.add(a,b,c,d,e)};THREE.LensFlare.prototype=Object.create(THREE.Object3D.prototype);THREE.LensFlare.prototype.constructor=THREE.LensFlare;THREE.LensFlare.prototype.add=function(a,b,c,d,e,f){void 0===b&&(b=-1);void 0===c&&(c=0);void 0===f&&(f=1);void 0===e&&(e=new THREE.Color(16777215));void 0===d&&(d=THREE.NormalBlending);c=Math.min(c,Math.max(0,c));this.lensFlares.push({texture:a,size:b,distance:c,x:0,y:0,z:0,scale:1,rotation:0,opacity:f,color:e,blending:d})};THREE.LensFlare.prototype.updateLensFlares=function(){var a,b=this.lensFlares.length,c,d=2*-this.positionScreen.x,e=2*-this.positionScreen.y;for(a=0;a= 365 * 24 * 3600) { + result += (t / (365 * 24 * 3600) | 0) + " years "; + t %= 365 * 24 * 3600; + if (t < 24 * 3600) { + result += "0 days "; + } + } + if (t >= 24 * 3600) { + result += (t / (24 * 3600) | 0) + " days "; + } + t %= 24 * 3600; + return result + this.hourMinSec(t); + } +} +var DataFormatters = { + distanceString: function(value){ + return numeral(value).format('0,0.000 a') + "m" + }, -THREE.ShaderChunk.lights_template="\nGeometricContext geometry;\ngeometry.position = - vViewPosition;\ngeometry.normal = normal;\ngeometry.viewDir = normalize( vViewPosition );\nIncidentLight directLight;\n#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct )\n PointLight pointLight;\n for ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n pointLight = pointLights[ i ];\n directLight = getPointDirectLightIrradiance( pointLight, geometry );\n #ifdef USE_SHADOWMAP\n directLight.color *= all( bvec2( pointLight.shadow, directLight.visible ) ) ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ] ) : 1.0;\n #endif\n RE_Direct( directLight, geometry, material, reflectedLight );\n }\n#endif\n#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct )\n SpotLight spotLight;\n for ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n spotLight = spotLights[ i ];\n directLight = getSpotDirectLightIrradiance( spotLight, geometry );\n #ifdef USE_SHADOWMAP\n directLight.color *= all( bvec2( spotLight.shadow, directLight.visible ) ) ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n #endif\n RE_Direct( directLight, geometry, material, reflectedLight );\n }\n#endif\n#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct )\n DirectionalLight directionalLight;\n for ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n directionalLight = directionalLights[ i ];\n directLight = getDirectionalDirectLightIrradiance( directionalLight, geometry );\n #ifdef USE_SHADOWMAP\n directLight.color *= all( bvec2( directionalLight.shadow, directLight.visible ) ) ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n #endif\n RE_Direct( directLight, geometry, material, reflectedLight );\n }\n#endif\n#if defined( RE_IndirectDiffuse )\n vec3 irradiance = getAmbientLightIrradiance( ambientLightColor );\n #ifdef USE_LIGHTMAP\n vec3 lightMapIrradiance = texture2D( lightMap, vUv2 ).xyz * lightMapIntensity;\n #ifndef PHYSICALLY_CORRECT_LIGHTS\n lightMapIrradiance *= PI;\n #endif\n irradiance += lightMapIrradiance;\n #endif\n #if ( NUM_HEMI_LIGHTS > 0 )\n for ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n irradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\n }\n #endif\n #if defined( USE_ENVMAP ) && defined( STANDARD ) && defined( ENVMAP_TYPE_CUBE_UV )\n irradiance += getLightProbeIndirectIrradiance( geometry, 8 );\n #endif\n RE_IndirectDiffuse( irradiance, geometry, material, reflectedLight );\n#endif\n#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )\n vec3 radiance = getLightProbeIndirectRadiance( geometry, Material_BlinnShininessExponent( material ), 8 );\n RE_IndirectSpecular( radiance, geometry, material, reflectedLight );\n#endif\n";THREE.ShaderChunk.logdepthbuf_fragment="#if defined(USE_LOGDEPTHBUF) && defined(USE_LOGDEPTHBUF_EXT)\n gl_FragDepthEXT = log2(vFragDepth) * logDepthBufFC * 0.5;\n#endif";THREE.ShaderChunk.logdepthbuf_pars_fragment="#ifdef USE_LOGDEPTHBUF\n uniform float logDepthBufFC;\n #ifdef USE_LOGDEPTHBUF_EXT\n varying float vFragDepth;\n #endif\n#endif\n";THREE.ShaderChunk.logdepthbuf_pars_vertex="#ifdef USE_LOGDEPTHBUF\n #ifdef USE_LOGDEPTHBUF_EXT\n varying float vFragDepth;\n #endif\n uniform float logDepthBufFC;\n#endif";THREE.ShaderChunk.logdepthbuf_vertex="#ifdef USE_LOGDEPTHBUF\n gl_Position.z = log2(max( EPSILON, gl_Position.w + 1.0 )) * logDepthBufFC;\n #ifdef USE_LOGDEPTHBUF_EXT\n vFragDepth = 1.0 + gl_Position.w;\n #else\n gl_Position.z = (gl_Position.z - 1.0) * gl_Position.w;\n #endif\n#endif\n";THREE.ShaderChunk.map_fragment="#ifdef USE_MAP\n vec4 texelColor = texture2D( map, vUv );\n texelColor = mapTexelToLinear( texelColor );\n diffuseColor *= texelColor;\n#endif\n";THREE.ShaderChunk.map_pars_fragment="#ifdef USE_MAP\n uniform sampler2D map;\n#endif\n";THREE.ShaderChunk.map_particle_fragment="#ifdef USE_MAP\n vec4 mapTexel = texture2D( map, vec2( gl_PointCoord.x, 1.0 - gl_PointCoord.y ) * offsetRepeat.zw + offsetRepeat.xy );\n diffuseColor *= mapTexelToLinear( mapTexel );\n#endif\n";THREE.ShaderChunk.map_particle_pars_fragment="#ifdef USE_MAP\n uniform vec4 offsetRepeat;\n uniform sampler2D map;\n#endif\n";THREE.ShaderChunk.metalnessmap_fragment="float metalnessFactor = metalness;\n#ifdef USE_METALNESSMAP\n vec4 texelMetalness = texture2D( metalnessMap, vUv );\n metalnessFactor *= texelMetalness.r;\n#endif\n";THREE.ShaderChunk.metalnessmap_pars_fragment="#ifdef USE_METALNESSMAP\n uniform sampler2D metalnessMap;\n#endif";THREE.ShaderChunk.morphnormal_vertex="#ifdef USE_MORPHNORMALS\n objectNormal += ( morphNormal0 - normal ) * morphTargetInfluences[ 0 ];\n objectNormal += ( morphNormal1 - normal ) * morphTargetInfluences[ 1 ];\n objectNormal += ( morphNormal2 - normal ) * morphTargetInfluences[ 2 ];\n objectNormal += ( morphNormal3 - normal ) * morphTargetInfluences[ 3 ];\n#endif\n";THREE.ShaderChunk.morphtarget_pars_vertex="#ifdef USE_MORPHTARGETS\n #ifndef USE_MORPHNORMALS\n uniform float morphTargetInfluences[ 8 ];\n #else\n uniform float morphTargetInfluences[ 4 ];\n #endif\n#endif";THREE.ShaderChunk.morphtarget_vertex="#ifdef USE_MORPHTARGETS\n transformed += ( morphTarget0 - position ) * morphTargetInfluences[ 0 ];\n transformed += ( morphTarget1 - position ) * morphTargetInfluences[ 1 ];\n transformed += ( morphTarget2 - position ) * morphTargetInfluences[ 2 ];\n transformed += ( morphTarget3 - position ) * morphTargetInfluences[ 3 ];\n #ifndef USE_MORPHNORMALS\n transformed += ( morphTarget4 - position ) * morphTargetInfluences[ 4 ];\n transformed += ( morphTarget5 - position ) * morphTargetInfluences[ 5 ];\n transformed += ( morphTarget6 - position ) * morphTargetInfluences[ 6 ];\n transformed += ( morphTarget7 - position ) * morphTargetInfluences[ 7 ];\n #endif\n#endif\n";THREE.ShaderChunk.normal_fragment="#ifdef FLAT_SHADED\n vec3 fdx = vec3( dFdx( vViewPosition.x ), dFdx( vViewPosition.y ), dFdx( vViewPosition.z ) );\n vec3 fdy = vec3( dFdy( vViewPosition.x ), dFdy( vViewPosition.y ), dFdy( vViewPosition.z ) );\n vec3 normal = normalize( cross( fdx, fdy ) );\n#else\n vec3 normal = normalize( vNormal );\n #ifdef DOUBLE_SIDED\n normal = normal * ( -1.0 + 2.0 * float( gl_FrontFacing ) );\n #endif\n#endif\n#ifdef USE_NORMALMAP\n normal = perturbNormal2Arb( -vViewPosition, normal );\n#elif defined( USE_BUMPMAP )\n normal = perturbNormalArb( -vViewPosition, normal, dHdxy_fwd() );\n#endif\n";THREE.ShaderChunk.normalmap_pars_fragment="#ifdef USE_NORMALMAP\n uniform sampler2D normalMap;\n uniform vec2 normalScale;\n vec3 perturbNormal2Arb( vec3 eye_pos, vec3 surf_norm ) {\n vec3 q0 = dFdx( eye_pos.xyz );\n vec3 q1 = dFdy( eye_pos.xyz );\n vec2 st0 = dFdx( vUv.st );\n vec2 st1 = dFdy( vUv.st );\n vec3 S = normalize( q0 * st1.t - q1 * st0.t );\n vec3 T = normalize( -q0 * st1.s + q1 * st0.s );\n vec3 N = normalize( surf_norm );\n vec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n mapN.xy = normalScale * mapN.xy;\n mat3 tsn = mat3( S, T, N );\n return normalize( tsn * mapN );\n }\n#endif\n";THREE.ShaderChunk.premultiplied_alpha_fragment="#ifdef PREMULTIPLIED_ALPHA\n gl_FragColor.rgb *= gl_FragColor.a;\n#endif\n";THREE.ShaderChunk.project_vertex="#ifdef USE_SKINNING\n vec4 mvPosition = modelViewMatrix * skinned;\n#else\n vec4 mvPosition = modelViewMatrix * vec4( transformed, 1.0 );\n#endif\ngl_Position = projectionMatrix * mvPosition;\n";THREE.ShaderChunk.roughnessmap_fragment="float roughnessFactor = roughness;\n#ifdef USE_ROUGHNESSMAP\n vec4 texelRoughness = texture2D( roughnessMap, vUv );\n roughnessFactor *= texelRoughness.r;\n#endif\n";THREE.ShaderChunk.roughnessmap_pars_fragment="#ifdef USE_ROUGHNESSMAP\n uniform sampler2D roughnessMap;\n#endif";THREE.ShaderChunk.shadowmap_pars_fragment="#ifdef USE_SHADOWMAP\n #if NUM_DIR_LIGHTS > 0\n uniform sampler2D directionalShadowMap[ NUM_DIR_LIGHTS ];\n varying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHTS ];\n #endif\n #if NUM_SPOT_LIGHTS > 0\n uniform sampler2D spotShadowMap[ NUM_SPOT_LIGHTS ];\n varying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHTS ];\n #endif\n #if NUM_POINT_LIGHTS > 0\n uniform sampler2D pointShadowMap[ NUM_POINT_LIGHTS ];\n varying vec4 vPointShadowCoord[ NUM_POINT_LIGHTS ];\n #endif\n float unpackDepth( const in vec4 rgba_depth ) {\n const vec4 bit_shift = vec4( 1.0 / ( 256.0 * 256.0 * 256.0 ), 1.0 / ( 256.0 * 256.0 ), 1.0 / 256.0, 1.0 );\n return dot( rgba_depth, bit_shift );\n }\n float texture2DCompare( sampler2D depths, vec2 uv, float compare ) {\n return step( compare, unpackDepth( texture2D( depths, uv ) ) );\n }\n float texture2DShadowLerp( sampler2D depths, vec2 size, vec2 uv, float compare ) {\n const vec2 offset = vec2( 0.0, 1.0 );\n vec2 texelSize = vec2( 1.0 ) / size;\n vec2 centroidUV = floor( uv * size + 0.5 ) / size;\n float lb = texture2DCompare( depths, centroidUV + texelSize * offset.xx, compare );\n float lt = texture2DCompare( depths, centroidUV + texelSize * offset.xy, compare );\n float rb = texture2DCompare( depths, centroidUV + texelSize * offset.yx, compare );\n float rt = texture2DCompare( depths, centroidUV + texelSize * offset.yy, compare );\n vec2 f = fract( uv * size + 0.5 );\n float a = mix( lb, lt, f.y );\n float b = mix( rb, rt, f.y );\n float c = mix( a, b, f.x );\n return c;\n }\n float getShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord ) {\n shadowCoord.xyz /= shadowCoord.w;\n shadowCoord.z += shadowBias;\n bvec4 inFrustumVec = bvec4 ( shadowCoord.x >= 0.0, shadowCoord.x <= 1.0, shadowCoord.y >= 0.0, shadowCoord.y <= 1.0 );\n bool inFrustum = all( inFrustumVec );\n bvec2 frustumTestVec = bvec2( inFrustum, shadowCoord.z <= 1.0 );\n bool frustumTest = all( frustumTestVec );\n if ( frustumTest ) {\n #if defined( SHADOWMAP_TYPE_PCF )\n vec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n float dx0 = - texelSize.x * shadowRadius;\n float dy0 = - texelSize.y * shadowRadius;\n float dx1 = + texelSize.x * shadowRadius;\n float dy1 = + texelSize.y * shadowRadius;\n return (\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\n ) * ( 1.0 / 9.0 );\n #elif defined( SHADOWMAP_TYPE_PCF_SOFT )\n vec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n float dx0 = - texelSize.x * shadowRadius;\n float dy0 = - texelSize.y * shadowRadius;\n float dx1 = + texelSize.x * shadowRadius;\n float dy1 = + texelSize.y * shadowRadius;\n return (\n texture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\n texture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\n texture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\n texture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\n texture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy, shadowCoord.z ) +\n texture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\n texture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\n texture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\n texture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\n ) * ( 1.0 / 9.0 );\n #else\n return texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z );\n #endif\n }\n return 1.0;\n }\n vec2 cubeToUV( vec3 v, float texelSizeY ) {\n vec3 absV = abs( v );\n float scaleToCube = 1.0 / max( absV.x, max( absV.y, absV.z ) );\n absV *= scaleToCube;\n v *= scaleToCube * ( 1.0 - 2.0 * texelSizeY );\n vec2 planar = v.xy;\n float almostATexel = 1.5 * texelSizeY;\n float almostOne = 1.0 - almostATexel;\n if ( absV.z >= almostOne ) {\n if ( v.z > 0.0 )\n planar.x = 4.0 - v.x;\n } else if ( absV.x >= almostOne ) {\n float signX = sign( v.x );\n planar.x = v.z * signX + 2.0 * signX;\n } else if ( absV.y >= almostOne ) {\n float signY = sign( v.y );\n planar.x = v.x + 2.0 * signY + 2.0;\n planar.y = v.z * signY - 2.0;\n }\n return vec2( 0.125, 0.25 ) * planar + vec2( 0.375, 0.75 );\n }\n float getPointShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord ) {\n vec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) );\n vec3 lightToPosition = shadowCoord.xyz;\n vec3 bd3D = normalize( lightToPosition );\n float dp = ( length( lightToPosition ) - shadowBias ) / 1000.0;\n #if defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_PCF_SOFT )\n vec2 offset = vec2( - 1, 1 ) * shadowRadius * texelSize.y;\n return (\n texture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyy, texelSize.y ), dp ) +\n texture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyy, texelSize.y ), dp ) +\n texture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyx, texelSize.y ), dp ) +\n texture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyx, texelSize.y ), dp ) +\n texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ) +\n texture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxy, texelSize.y ), dp ) +\n texture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxy, texelSize.y ), dp ) +\n texture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxx, texelSize.y ), dp ) +\n texture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxx, texelSize.y ), dp )\n ) * ( 1.0 / 9.0 );\n #else\n return texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp );\n #endif\n }\n#endif\n";THREE.ShaderChunk.shadowmap_pars_vertex="#ifdef USE_SHADOWMAP\n #if NUM_DIR_LIGHTS > 0\n uniform mat4 directionalShadowMatrix[ NUM_DIR_LIGHTS ];\n varying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHTS ];\n #endif\n #if NUM_SPOT_LIGHTS > 0\n uniform mat4 spotShadowMatrix[ NUM_SPOT_LIGHTS ];\n varying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHTS ];\n #endif\n #if NUM_POINT_LIGHTS > 0\n uniform mat4 pointShadowMatrix[ NUM_POINT_LIGHTS ];\n varying vec4 vPointShadowCoord[ NUM_POINT_LIGHTS ];\n #endif\n#endif\n";THREE.ShaderChunk.shadowmap_vertex="#ifdef USE_SHADOWMAP\n #if NUM_DIR_LIGHTS > 0\n for ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n vDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * worldPosition;\n }\n #endif\n #if NUM_SPOT_LIGHTS > 0\n for ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n vSpotShadowCoord[ i ] = spotShadowMatrix[ i ] * worldPosition;\n }\n #endif\n #if NUM_POINT_LIGHTS > 0\n for ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n vPointShadowCoord[ i ] = pointShadowMatrix[ i ] * worldPosition;\n }\n #endif\n#endif\n";THREE.ShaderChunk.shadowmask_pars_fragment="float getShadowMask() {\n float shadow = 1.0;\n #ifdef USE_SHADOWMAP\n #if NUM_DIR_LIGHTS > 0\n DirectionalLight directionalLight;\n for ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n directionalLight = directionalLights[ i ];\n shadow *= bool( directionalLight.shadow ) ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n }\n #endif\n #if NUM_SPOT_LIGHTS > 0\n SpotLight spotLight;\n for ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n spotLight = spotLights[ i ];\n shadow *= bool( spotLight.shadow ) ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n }\n #endif\n #if NUM_POINT_LIGHTS > 0\n PointLight pointLight;\n for ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n pointLight = pointLights[ i ];\n shadow *= bool( pointLight.shadow ) ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ] ) : 1.0;\n }\n #endif\n #endif\n return shadow;\n}\n";THREE.ShaderChunk.skinbase_vertex="#ifdef USE_SKINNING\n mat4 boneMatX = getBoneMatrix( skinIndex.x );\n mat4 boneMatY = getBoneMatrix( skinIndex.y );\n mat4 boneMatZ = getBoneMatrix( skinIndex.z );\n mat4 boneMatW = getBoneMatrix( skinIndex.w );\n#endif";THREE.ShaderChunk.skinning_pars_vertex="#ifdef USE_SKINNING\n uniform mat4 bindMatrix;\n uniform mat4 bindMatrixInverse;\n #ifdef BONE_TEXTURE\n uniform sampler2D boneTexture;\n uniform int boneTextureWidth;\n uniform int boneTextureHeight;\n mat4 getBoneMatrix( const in float i ) {\n float j = i * 4.0;\n float x = mod( j, float( boneTextureWidth ) );\n float y = floor( j / float( boneTextureWidth ) );\n float dx = 1.0 / float( boneTextureWidth );\n float dy = 1.0 / float( boneTextureHeight );\n y = dy * ( y + 0.5 );\n vec4 v1 = texture2D( boneTexture, vec2( dx * ( x + 0.5 ), y ) );\n vec4 v2 = texture2D( boneTexture, vec2( dx * ( x + 1.5 ), y ) );\n vec4 v3 = texture2D( boneTexture, vec2( dx * ( x + 2.5 ), y ) );\n vec4 v4 = texture2D( boneTexture, vec2( dx * ( x + 3.5 ), y ) );\n mat4 bone = mat4( v1, v2, v3, v4 );\n return bone;\n }\n #else\n uniform mat4 boneGlobalMatrices[ MAX_BONES ];\n mat4 getBoneMatrix( const in float i ) {\n mat4 bone = boneGlobalMatrices[ int(i) ];\n return bone;\n }\n #endif\n#endif\n";THREE.ShaderChunk.skinning_vertex="#ifdef USE_SKINNING\n vec4 skinVertex = bindMatrix * vec4( transformed, 1.0 );\n vec4 skinned = vec4( 0.0 );\n skinned += boneMatX * skinVertex * skinWeight.x;\n skinned += boneMatY * skinVertex * skinWeight.y;\n skinned += boneMatZ * skinVertex * skinWeight.z;\n skinned += boneMatW * skinVertex * skinWeight.w;\n skinned = bindMatrixInverse * skinned;\n#endif\n";THREE.ShaderChunk.skinnormal_vertex="#ifdef USE_SKINNING\n mat4 skinMatrix = mat4( 0.0 );\n skinMatrix += skinWeight.x * boneMatX;\n skinMatrix += skinWeight.y * boneMatY;\n skinMatrix += skinWeight.z * boneMatZ;\n skinMatrix += skinWeight.w * boneMatW;\n skinMatrix = bindMatrixInverse * skinMatrix * bindMatrix;\n objectNormal = vec4( skinMatrix * vec4( objectNormal, 0.0 ) ).xyz;\n#endif\n";THREE.ShaderChunk.specularmap_fragment="float specularStrength;\n#ifdef USE_SPECULARMAP\n vec4 texelSpecular = texture2D( specularMap, vUv );\n specularStrength = texelSpecular.r;\n#else\n specularStrength = 1.0;\n#endif";THREE.ShaderChunk.specularmap_pars_fragment="#ifdef USE_SPECULARMAP\n uniform sampler2D specularMap;\n#endif";THREE.ShaderChunk.tonemapping_fragment="#if defined( TONE_MAPPING )\n gl_FragColor.rgb = toneMapping( gl_FragColor.rgb );\n#endif\n";THREE.ShaderChunk.tonemapping_pars_fragment="#define saturate(a) clamp( a, 0.0, 1.0 )\nuniform float toneMappingExposure;\nuniform float toneMappingWhitePoint;\nvec3 LinearToneMapping( vec3 color ) {\n return toneMappingExposure * color;\n}\nvec3 ReinhardToneMapping( vec3 color ) {\n color *= toneMappingExposure;\n return saturate( color / ( vec3( 1.0 ) + color ) );\n}\n#define Uncharted2Helper( x ) max( ( ( x * ( 0.15 * x + 0.10 * 0.50 ) + 0.20 * 0.02 ) / ( x * ( 0.15 * x + 0.50 ) + 0.20 * 0.30 ) ) - 0.02 / 0.30, vec3( 0.0 ) )\nvec3 Uncharted2ToneMapping( vec3 color ) {\n color *= toneMappingExposure;\n return saturate( Uncharted2Helper( color ) / Uncharted2Helper( vec3( toneMappingWhitePoint ) ) );\n}\nvec3 OptimizedCineonToneMapping( vec3 color ) {\n color *= toneMappingExposure;\n color = max( vec3( 0.0 ), color - 0.004 );\n return pow( ( color * ( 6.2 * color + 0.5 ) ) / ( color * ( 6.2 * color + 1.7 ) + 0.06 ), vec3( 2.2 ) );\n}\n";THREE.ShaderChunk.uv2_pars_fragment="#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n varying vec2 vUv2;\n#endif";THREE.ShaderChunk.uv2_pars_vertex="#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n attribute vec2 uv2;\n varying vec2 vUv2;\n#endif";THREE.ShaderChunk.uv2_vertex="#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n vUv2 = uv2;\n#endif";THREE.ShaderChunk.uv_pars_fragment="#if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP ) || defined( USE_ALPHAMAP ) || defined( USE_EMISSIVEMAP ) || defined( USE_ROUGHNESSMAP ) || defined( USE_METALNESSMAP )\n varying vec2 vUv;\n#endif";THREE.ShaderChunk.uv_pars_vertex="#if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP ) || defined( USE_ALPHAMAP ) || defined( USE_EMISSIVEMAP ) || defined( USE_ROUGHNESSMAP ) || defined( USE_METALNESSMAP )\n varying vec2 vUv;\n uniform vec4 offsetRepeat;\n#endif\n";THREE.ShaderChunk.uv_vertex="#if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP ) || defined( USE_ALPHAMAP ) || defined( USE_EMISSIVEMAP ) || defined( USE_ROUGHNESSMAP ) || defined( USE_METALNESSMAP )\n vUv = uv * offsetRepeat.zw + offsetRepeat.xy;\n#endif";THREE.ShaderChunk.worldpos_vertex="#if defined( USE_ENVMAP ) || defined( PHONG ) || defined( STANDARD ) || defined( LAMBERT ) || defined ( USE_SHADOWMAP )\n #ifdef USE_SKINNING\n vec4 worldPosition = modelMatrix * skinned;\n #else\n vec4 worldPosition = modelMatrix * vec4( transformed, 1.0 );\n #endif\n#endif\n";THREE.UniformsUtils={merge:function(a){for(var b={},c=0;cc;c++)r.deleteFramebuffer(b.__webglFramebuffer[c]),r.deleteRenderbuffer(b.__webglDepthbuffer[c]);else r.deleteFramebuffer(b.__webglFramebuffer),r.deleteRenderbuffer(b.__webglDepthbuffer);U.delete(a.texture);U.delete(a)}ia.textures--}function h(a){a=a.target;a.removeEventListener("dispose",h);k(a);U.delete(a)}function k(a){var b=U.get(a).program;a.program=void 0;void 0!==b&&oa.releaseProgram(b)}function l(a,b){return Math.abs(b[0])-Math.abs(a[0])}function p(a,b){return a.object.renderOrder!==b.object.renderOrder?a.object.renderOrder-b.object.renderOrder:a.material.id!==b.material.id?a.material.id-b.material.id:a.z!==b.z?a.z-b.z:a.id-b.id}function n(a,b){return a.object.renderOrder!==b.object.renderOrder?a.object.renderOrder-b.object.renderOrder:a.z!==b.z?b.z-a.z:a.id-b.id}function m(a,b,c,d,e){var f;c.transparent?(d=S,f=++Y):(d=C,f=++Z);f=d[f];void 0!==f?(f.id=a.id,f.object=a,f.geometry=b,f.material=c,f.z=W.z,f.group=e):(f={id:a.id,object:a,geometry:b,material:c,z:W.z,group:e},d.push(f))}function q(a,b){if(!1!==a.visible){if(a.layers.test(b.layers))if(a instanceof THREE.Light)J.push(a);else if(a instanceof THREE.Sprite)!1!==a.frustumCulled&&!0!==za.intersectsObject(a)||ja.push(a);else if(a instanceof THREE.LensFlare)ea.push(a);else if(a instanceof THREE.ImmediateRenderObject)!0===X.sortObjects&&(W.setFromMatrixPosition(a.matrixWorld),W.applyProjection(sa)),m(a,null,a.material,W.z,null);else if(a instanceof THREE.Mesh||a instanceof THREE.Line||a instanceof THREE.Points)if(a instanceof THREE.SkinnedMesh&&a.skeleton.update(),!1===a.frustumCulled||!0===za.intersectsObject(a)){var c=a.material;if(!0===c.visible){!0===X.sortObjects&&(W.setFromMatrixPosition(a.matrixWorld),W.applyProjection(sa));var d=pa.update(a);if(c instanceof THREE.MultiMaterial)for(var e=d.groups,f=c.materials,c=0,g=e.length;c=da.maxTextures&&console.warn("WebGLRenderer: trying to use "+a+" texture units while this GPU supports only "+da.maxTextures);ta+=1;return a}function w(a,b,c,d){var e;if("1i"===b)r.uniform1i(c,d);else if("1f"===b)r.uniform1f(c,d);else if("2f"===b)r.uniform2f(c,d[0],d[1]);else if("3f"===b)r.uniform3f(c,d[0],d[1],d[2]);else if("4f"===b)r.uniform4f(c,d[0],d[1],d[2],d[3]);else if("1iv"===b)r.uniform1iv(c,d);else if("3iv"===b)r.uniform3iv(c,d);else if("1fv"===b)r.uniform1fv(c,d);else if("2fv"===b)r.uniform2fv(c,d);else if("3fv"===b)r.uniform3fv(c,d);else if("4fv"===b)r.uniform4fv(c,d);else if("Matrix2fv"===b)r.uniformMatrix2fv(c,!1,d);else if("Matrix3fv"===b)r.uniformMatrix3fv(c,!1,d);else if("Matrix4fv"===b)r.uniformMatrix4fv(c,!1,d);else if("i"===b)r.uniform1i(c,d);else if("f"===b)r.uniform1f(c,d);else if("v2"===b)r.uniform2f(c,d.x,d.y);else if("v3"===b)r.uniform3f(c,d.x,d.y,d.z);else if("v4"===b)r.uniform4f(c,d.x,d.y,d.z,d.w);else if("c"===b)r.uniform3f(c,d.r,d.g,d.b);else if("s"===b){a=a.properties;for(var g in a){e=a[g];var f=c[g],h=d[g];w(e,e.type,f,h)}}else if("sa"===b){a=a.properties;b=0;for(var k=d.length;bb||a.height>b){var c=b/Math.max(a.width,a.height),d=document.createElement("canvas");d.width=Math.floor(a.width*c);d.height=Math.floor(a.height*c);d.getContext("2d").drawImage(a,0,0,a.width,a.height,0,0,d.width,d.height);console.warn("THREE.WebGLRenderer: image is too big ("+a.width+"x"+a.height+"). Resized to "+d.width+"x"+d.height,a);return d}return a}function z(a){return THREE.Math.isPowerOfTwo(a.width)&&THREE.Math.isPowerOfTwo(a.height)}function y(a,b){var c=U.get(a);if(6===a.image.length)if(0h;h++)g[h]=!X.autoScaleCubemaps||d||e?e?a.image[h].image:a.image[h]:D(a.image[h],da.maxCubemapSize);var k=z(g[0]),l=L(a.format),m=L(a.type);x(r.TEXTURE_CUBE_MAP,a,k);for(h=0;6>h;h++)if(d)for(var n,p=g[h].mipmaps,q=0,s=p.length;qf;f++)b.__webglFramebuffer[f]=r.createFramebuffer()}else b.__webglFramebuffer=r.createFramebuffer();if(d){K.bindTexture(r.TEXTURE_CUBE_MAP,c.__webglTexture);x(r.TEXTURE_CUBE_MAP,a.texture,e);for(f=0;6>f;f++)G(b.__webglFramebuffer[f],a,r.COLOR_ATTACHMENT0,r.TEXTURE_CUBE_MAP_POSITIVE_X+f);a.texture.generateMipmaps&&e&&r.generateMipmap(r.TEXTURE_CUBE_MAP);K.bindTexture(r.TEXTURE_CUBE_MAP,null)}else K.bindTexture(r.TEXTURE_2D,c.__webglTexture),x(r.TEXTURE_2D,a.texture,e),G(b.__webglFramebuffer,a,r.COLOR_ATTACHMENT0,r.TEXTURE_2D),a.texture.generateMipmaps&&e&&r.generateMipmap(r.TEXTURE_2D),K.bindTexture(r.TEXTURE_2D,null);if(a.depthBuffer){b=U.get(a);if(a instanceof THREE.WebGLRenderTargetCube)for(b.__webglDepthbuffer=[],c=0;6>c;c++)r.bindFramebuffer(r.FRAMEBUFFER,b.__webglFramebuffer[c]),b.__webglDepthbuffer[c]=r.createRenderbuffer(),F(b.__webglDepthbuffer[c],a);else r.bindFramebuffer(r.FRAMEBUFFER,b.__webglFramebuffer),b.__webglDepthbuffer=r.createRenderbuffer(),F(b.__webglDepthbuffer,a);r.bindFramebuffer(r.FRAMEBUFFER,null)}}b=a instanceof THREE.WebGLRenderTargetCube;a?(c=U.get(a),c=b?c.__webglFramebuffer[a.activeCubeFace]:c.__webglFramebuffer,qa.copy(a.scissor),Aa=a.scissorTest,ka.copy(a.viewport)):(c=null,qa.copy(ya).multiplyScalar(aa),Aa=Ba,ka.copy(la).multiplyScalar(aa));ua!==c&&(r.bindFramebuffer(r.FRAMEBUFFER,c),ua=c);K.scissor(qa);K.setScissorTest(Aa);K.viewport(ka);b&&(b=U.get(a.texture),r.framebufferTexture2D(r.FRAMEBUFFER,r.COLOR_ATTACHMENT0,r.TEXTURE_CUBE_MAP_POSITIVE_X+a.activeCubeFace,b.__webglTexture,a.activeMipMapLevel))};this.readRenderTargetPixels=function(a,b,c,d,e,g){if(!1===a instanceof THREE.WebGLRenderTarget)console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.");else{var f=U.get(a).__webglFramebuffer;if(f){var h=!1;f!==ua&&(r.bindFramebuffer(r.FRAMEBUFFER,f),h=!0);try{var k=a.texture;k.format!==THREE.RGBAFormat&&L(k.format)!==r.getParameter(r.IMPLEMENTATION_COLOR_READ_FORMAT)?console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format."):k.type===THREE.UnsignedByteType||L(k.type)===r.getParameter(r.IMPLEMENTATION_COLOR_READ_TYPE)||k.type===THREE.FloatType&&V.get("WEBGL_color_buffer_float")||k.type===THREE.HalfFloatType&&V.get("EXT_color_buffer_half_float")?r.checkFramebufferStatus(r.FRAMEBUFFER)===r.FRAMEBUFFER_COMPLETE?r.readPixels(b,c,d,e,L(k.format),L(k.type),g):console.error("THREE.WebGLRenderer.readRenderTargetPixels: readPixels from renderTarget failed. Framebuffer not complete."):console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.")}finally{h&&r.bindFramebuffer(r.FRAMEBUFFER,ua)}}}}};THREE.WebGLRenderTarget=function(a,b,c){this.uuid=THREE.Math.generateUUID();this.width=a;this.height=b;this.scissor=new THREE.Vector4(0,0,a,b);this.scissorTest=!1;this.viewport=new THREE.Vector4(0,0,a,b);c=c||{};void 0===c.minFilter&&(c.minFilter=THREE.LinearFilter);this.texture=new THREE.Texture(void 0,void 0,c.wrapS,c.wrapT,c.magFilter,c.minFilter,c.format,c.type,c.anisotropy);this.depthBuffer=void 0!==c.depthBuffer?c.depthBuffer:!0;this.stencilBuffer=void 0!==c.stencilBuffer?c.stencilBuffer:!0};THREE.WebGLRenderTarget.prototype={constructor:THREE.WebGLRenderTarget,setSize:function(a,b){if(this.width!==a||this.height!==b)this.width=a,this.height=b,this.dispose();this.viewport.set(0,0,a,b);this.scissor.set(0,0,a,b)},clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.width=a.width;this.height=a.height;this.viewport.copy(a.viewport);this.texture=a.texture.clone();this.depthBuffer=a.depthBuffer;this.stencilBuffer=a.stencilBuffer;return this},dispose:function(){this.dispatchEvent({type:"dispose"})}};THREE.EventDispatcher.prototype.apply(THREE.WebGLRenderTarget.prototype);THREE.WebGLRenderTargetCube=function(a,b,c){THREE.WebGLRenderTarget.call(this,a,b,c);this.activeMipMapLevel=this.activeCubeFace=0};THREE.WebGLRenderTargetCube.prototype=Object.create(THREE.WebGLRenderTarget.prototype);THREE.WebGLRenderTargetCube.prototype.constructor=THREE.WebGLRenderTargetCube;THREE.WebGLBufferRenderer=function(a,b,c){var d;this.setMode=function(a){d=a};this.render=function(b,f){a.drawArrays(d,b,f);c.calls++;c.vertices+=f;d===a.TRIANGLES&&(c.faces+=f/3)};this.renderInstances=function(e){var f=b.get("ANGLE_instanced_arrays");if(null===f)console.error("THREE.WebGLBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.");else{var g=e.attributes.position,h=0,h=g instanceof THREE.InterleavedBufferAttribute?g.data.count:g.count;f.drawArraysInstancedANGLE(d,0,h,e.maxInstancedCount);c.calls++;c.vertices+=h*e.maxInstancedCount;d===a.TRIANGLES&&(c.faces+=e.maxInstancedCount*h/3)}}};THREE.WebGLIndexedBufferRenderer=function(a,b,c){var d,e,f;this.setMode=function(a){d=a};this.setIndex=function(c){c.array instanceof Uint32Array&&b.get("OES_element_index_uint")?(e=a.UNSIGNED_INT,f=4):(e=a.UNSIGNED_SHORT,f=2)};this.render=function(b,h){a.drawElements(d,h,e,b*f);c.calls++;c.vertices+=h;d===a.TRIANGLES&&(c.faces+=h/3)};this.renderInstances=function(g,h,k){var l=b.get("ANGLE_instanced_arrays");null===l?console.error("THREE.WebGLBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays."):(l.drawElementsInstancedANGLE(d,k,e,h*f,g.maxInstancedCount),c.calls++,c.vertices+=k*g.maxInstancedCount,d===a.TRIANGLES&&(c.faces+=g.maxInstancedCount*k/3))}};THREE.WebGLExtensions=function(a){var b={};this.get=function(c){if(void 0!==b[c])return b[c];var d;switch(c){case"EXT_texture_filter_anisotropic":d=a.getExtension("EXT_texture_filter_anisotropic")||a.getExtension("MOZ_EXT_texture_filter_anisotropic")||a.getExtension("WEBKIT_EXT_texture_filter_anisotropic");break;case"WEBGL_compressed_texture_s3tc":d=a.getExtension("WEBGL_compressed_texture_s3tc")||a.getExtension("MOZ_WEBGL_compressed_texture_s3tc")||a.getExtension("WEBKIT_WEBGL_compressed_texture_s3tc");break;case"WEBGL_compressed_texture_pvrtc":d=a.getExtension("WEBGL_compressed_texture_pvrtc")||a.getExtension("WEBKIT_WEBGL_compressed_texture_pvrtc");break;case"WEBGL_compressed_texture_etc1":d=a.getExtension("WEBGL_compressed_texture_etc1");break;default:d=a.getExtension(c)}null===d&&console.warn("THREE.WebGLRenderer: "+c+" extension not supported.");return b[c]=d}};THREE.WebGLCapabilities=function(a,b,c){function d(b){if("highp"===b){if(0c){var d=b;b=c;c=d}d=a[b];return void 0===d?(a[b]=[c],!0):-1===d.indexOf(c)?(d.push(c),!0):!1}var f=new THREE.WebGLGeometries(a,b,c);this.getAttributeBuffer=function(a){return a instanceof THREE.InterleavedBufferAttribute?b.get(a.data).__webglBuffer:b.get(a).__webglBuffer};this.getWireframeAttribute=function(c){var f=b.get(c);if(void 0!==f.wireframe)return f.wireframe;var k=[],l=c.index,p=c.attributes;c=p.position;if(null!==l)for(var p={},l=l.array,n=0,m=l.length;n/g,function(a,b){var c=THREE.ShaderChunk[b];if(void 0===c)throw Error("Can not resolve #include <"+b+">");return k(c)})}function l(a){return a.replace(/for \( int i \= (\d+)\; i < (\d+)\; i \+\+ \) \{([\s\S]+?)(?=\})\}/g,function(a,b,c,d){a="";for(b=parseInt(b);b 0 ) {\nfloat depth = gl_FragCoord.z / gl_FragCoord.w;\nfloat fogFactor = 0.0;\nif ( fogType == 1 ) {\nfogFactor = smoothstep( fogNear, fogFar, depth );\n} else {\nconst float LOG2 = 1.442695;\nfogFactor = exp2( - fogDensity * fogDensity * depth * depth * LOG2 );\nfogFactor = 1.0 - clamp( fogFactor, 0.0, 1.0 );\n}\ngl_FragColor = mix( gl_FragColor, vec4( fogColor, gl_FragColor.w ), fogFactor );\n}\n}"].join("\n")); + velocityString: function(value){ + return numeral(value).format('0,0.000 a') + "m/s" + }, -x.compileShader(I);x.compileShader(O);x.attachShader(M,I);x.attachShader(M,O);x.linkProgram(M);B=M;s=x.getAttribLocation(B,"position");w=x.getAttribLocation(B,"uv");c=x.getUniformLocation(B,"uvOffset");d=x.getUniformLocation(B,"uvScale");e=x.getUniformLocation(B,"rotation");f=x.getUniformLocation(B,"scale");g=x.getUniformLocation(B,"color");h=x.getUniformLocation(B,"map");k=x.getUniformLocation(B,"opacity");l=x.getUniformLocation(B,"modelViewMatrix");p=x.getUniformLocation(B,"projectionMatrix");n=x.getUniformLocation(B,"fogType");m=x.getUniformLocation(B,"fogDensity");q=x.getUniformLocation(B,"fogNear");u=x.getUniformLocation(B,"fogFar");v=x.getUniformLocation(B,"fogColor");t=x.getUniformLocation(B,"alphaTest");M=document.createElement("canvas");M.width=8;M.height=8;I=M.getContext("2d");I.fillStyle="white";I.fillRect(0,0,8,8);G=new THREE.Texture(M);G.needsUpdate=!0}x.useProgram(B);D.initAttributes();D.enableAttribute(s);D.enableAttribute(w);D.disableUnusedAttributes();D.disable(x.CULL_FACE);D.enable(x.BLEND);x.bindBuffer(x.ARRAY_BUFFER,z);x.vertexAttribPointer(s,2,x.FLOAT,!1,16,0);x.vertexAttribPointer(w,2,x.FLOAT,!1,16,8);x.bindBuffer(x.ELEMENT_ARRAY_BUFFER,y);x.uniformMatrix4fv(p,!1,N.projectionMatrix.elements);D.activeTexture(x.TEXTURE0);x.uniform1i(h,0);I=M=0;(O=A.fog)?(x.uniform3f(v,O.color.r,O.color.g,O.color.b),O instanceof THREE.Fog?(x.uniform1f(q,O.near),x.uniform1f(u,O.far),x.uniform1i(n,1),I=M=1):O instanceof THREE.FogExp2&&(x.uniform1f(m,O.density),x.uniform1i(n,2),I=M=2)):(x.uniform1i(n,0),I=M=0);for(var O=0,Q=b.length;Oc)return null;var d=[],e=[],f=[],g,h,k;if(0=l--){console.warn("THREE.ShapeUtils: Unable to triangulate polygon! in triangulate()");break}g=h;c<=g&&(g=0);h=g+1;c<=h&&(h=0);k=h+1;c<=k&&(k=0);var p;a:{var n=p=void 0,m=void 0,q=void 0,u=void 0,v=void 0,t=void 0,s=void 0,w=void 0,n=a[e[g]].x,m=a[e[g]].y,q=a[e[h]].x,u=a[e[h]].y,v=a[e[k]].x,t=a[e[k]].y;if(Number.EPSILON>(q-n)*(t-m)-(u-m)*(v-n))p=!1;else{var E=void 0,x=void 0,D=void 0,z=void 0,y=void 0,B=void 0,G=void 0,F=void 0,H=void 0,L=void 0,H=F=G=w=s=void 0,E=v-q,x=t-u,D=n-v,z=m-t,y=q-n,B=u-m;for(p=0;p=-Number.EPSILON&&F>=-Number.EPSILON&&G>=-Number.EPSILON)){p=!1;break a}p=!0}}if(p){d.push([a[e[g]],a[e[h]],a[e[k]]]);f.push([e[g],e[h],e[k]]);g=h;for(k=h+1;kNumber.EPSILON){if(0B||B>y)return[];k=l*n-k*p;if(0>k||k>y)return[]}else{if(0d?[]:k===d?f?[]:[g]:a<=d?[g,h]:[g,l]}function e(a,b,c,d){var e=b.x-a.x,f=b.y-a.y;b=c.x-a.x;c=c.y-a.y;var g=d.x-a.x;d=d.y-a.y;a=e*c-f*b;e=e*d-f*g;return Math.abs(a)>Number.EPSILON?(b=g*c-d*b,0f&&(f=d);var g=a+1;g>d&&(g=0);d=e(h[a],h[f],h[g],k[b]);if(!d)return!1;d=k.length-1;f=b-1;0>f&&(f=d);g=b+1;g>d&&(g=0);return(d=e(k[b],k[f],k[g],h[a]))?!0:!1}function f(a,b){var c,e;for(c=0;cN){console.log("Infinite Loop! Holes left:"+l.length+", Probably Hole outside Shape!");break}for(p=F;ph;h++)l=k[h].x+":"+k[h].y,l=p[l],void 0!==l&&(k[h]=l);return n.concat()},isClockWise:function(a){return 0>THREE.ShapeUtils.area(a)},b2:function(){return function(a,b,c,d){var e=1-a;return e*e*b+2*(1-a)*a*c+a*a*d}}(),b3:function(){return function(a,b,c,d,e){var f=1-a,g=1-a;return f*f*f*b+3*g*g*a*c+3*(1-a)*a*a*d+a*a*a*e}}()};THREE.Curve=function(){};THREE.Curve.prototype={constructor:THREE.Curve,getPoint:function(a){console.warn("THREE.Curve: Warning, getPoint() not implemented!");return null},getPointAt:function(a){a=this.getUtoTmapping(a);return this.getPoint(a)},getPoints:function(a){a||(a=5);var b,c=[];for(b=0;b<=a;b++)c.push(this.getPoint(b/a));return c},getSpacedPoints:function(a){a||(a=5);var b,c=[];for(b=0;b<=a;b++)c.push(this.getPointAt(b/a));return c},getLength:function(){var a=this.getLengths();return a[a.length-1]},getLengths:function(a){a||(a=this.__arcLengthDivisions?this.__arcLengthDivisions:200);if(this.cacheArcLengths&&this.cacheArcLengths.length===a+1&&!this.needsUpdate)return this.cacheArcLengths;this.needsUpdate=!1;var b=[],c,d=this.getPoint(0),e,f=0;b.push(0);for(e=1;e<=a;e++)c=this.getPoint(e/a),f+=c.distanceTo(d),b.push(f),d=c;return this.cacheArcLengths=b},updateArcLengths:function(){this.needsUpdate=!0;this.getLengths()},getUtoTmapping:function(a,b){var c=this.getLengths(),d=0,e=c.length,f;f=b?b:a*c[e-1];for(var g=0,h=e-1,k;g<=h;)if(d=Math.floor(g+(h-g)/2),k=c[d]-f,0>k)g=d+1;else if(0b&&(b=0);1=b)return a=this.curves[d],b=1-(c[d]-b)/a.getLength(),a.getPointAt(b);d++}return null};THREE.CurvePath.prototype.getLength=function(){var a=this.getCurveLengths();return a[a.length-1]};THREE.CurvePath.prototype.getCurveLengths=function(){if(this.cacheLengths&&this.cacheLengths.length===this.curves.length)return this.cacheLengths;for(var a=[],b=0,c=0,d=this.curves.length;cNumber.EPSILON){if(0>l&&(g=b[f],k=-k,h=b[e],l=-l),!(a.yh.y))if(a.y===g.y){if(a.x===g.x)return!0}else{e=l*(a.x-g.x)-k*(a.y-g.y);if(0===e)return!0;0>e||(d=!d)}}else if(a.y===g.y&&(h.x<=a.x&&a.x<=g.x||g.x<=a.x&&a.x<=h.x))return!0}return d}var e=THREE.ShapeUtils.isClockWise,f=function(a){for(var b=[],c=new THREE.Path,d=0,e=a.length;db.length-2?b.length-1:c+1],b=b[c>b.length-3?b.length-1:c+2],c=THREE.CurveUtils.interpolate;return new THREE.Vector2(c(d.x,e.x,f.x,b.x,a),c(d.y,e.y,f.y,b.y,a))};THREE.EllipseCurve=function(a,b,c,d,e,f,g,h){this.aX=a;this.aY=b;this.xRadius=c;this.yRadius=d;this.aStartAngle=e;this.aEndAngle=f;this.aClockwise=g;this.aRotation=h||0};THREE.EllipseCurve.prototype=Object.create(THREE.Curve.prototype);THREE.EllipseCurve.prototype.constructor=THREE.EllipseCurve;THREE.EllipseCurve.prototype.getPoint=function(a){var b=this.aEndAngle-this.aStartAngle;0>b&&(b+=2*Math.PI);b>2*Math.PI&&(b-=2*Math.PI);b=!0===this.aClockwise?this.aEndAngle+(1-a)*(2*Math.PI-b):this.aStartAngle+a*b;a=this.aX+this.xRadius*Math.cos(b);var c=this.aY+this.yRadius*Math.sin(b);if(0!==this.aRotation){var b=Math.cos(this.aRotation),d=Math.sin(this.aRotation),e=a;a=(e-this.aX)*b-(c-this.aY)*d+this.aX;c=(e-this.aX)*d+(c-this.aY)*b+this.aY}return new THREE.Vector2(a,c)};THREE.ArcCurve=function(a,b,c,d,e,f){THREE.EllipseCurve.call(this,a,b,c,c,d,e,f)};THREE.ArcCurve.prototype=Object.create(THREE.EllipseCurve.prototype);THREE.ArcCurve.prototype.constructor=THREE.ArcCurve;THREE.LineCurve3=THREE.Curve.create(function(a,b){this.v1=a;this.v2=b},function(a){var b=new THREE.Vector3;b.subVectors(this.v2,this.v1);b.multiplyScalar(a);b.add(this.v1);return b});THREE.QuadraticBezierCurve3=THREE.Curve.create(function(a,b,c){this.v0=a;this.v1=b;this.v2=c},function(a){var b=THREE.ShapeUtils.b2;return new THREE.Vector3(b(a,this.v0.x,this.v1.x,this.v2.x),b(a,this.v0.y,this.v1.y,this.v2.y),b(a,this.v0.z,this.v1.z,this.v2.z))});THREE.CubicBezierCurve3=THREE.Curve.create(function(a,b,c,d){this.v0=a;this.v1=b;this.v2=c;this.v3=d},function(a){var b=THREE.ShapeUtils.b3;return new THREE.Vector3(b(a,this.v0.x,this.v1.x,this.v2.x,this.v3.x),b(a,this.v0.y,this.v1.y,this.v2.y,this.v3.y),b(a,this.v0.z,this.v1.z,this.v2.z,this.v3.z))});THREE.SplineCurve3=THREE.Curve.create(function(a){console.warn("THREE.SplineCurve3 will be deprecated. Please use THREE.CatmullRomCurve3");this.points=void 0==a?[]:a},function(a){var b=this.points;a*=b.length-1;var c=Math.floor(a);a-=c;var d=b[0==c?c:c-1],e=b[c],f=b[c>b.length-2?b.length-1:c+1],b=b[c>b.length-3?b.length-1:c+2],c=THREE.CurveUtils.interpolate;return new THREE.Vector3(c(d.x,e.x,f.x,b.x,a),c(d.y,e.y,f.y,b.y,a),c(d.z,e.z,f.z,b.z,a))});THREE.CatmullRomCurve3=function(){function a(){}var b=new THREE.Vector3,c=new a,d=new a,e=new a;a.prototype.init=function(a,b,c,d){this.c0=a;this.c1=c;this.c2=-3*a+3*b-2*c-d;this.c3=2*a-2*b+c+d};a.prototype.initNonuniformCatmullRom=function(a,b,c,d,e,p,n){a=((b-a)/e-(c-a)/(e+p)+(c-b)/p)*p;d=((c-b)/p-(d-b)/(p+n)+(d-c)/n)*p;this.init(b,c,a,d)};a.prototype.initCatmullRom=function(a,b,c,d,e){this.init(b,c,e*(c-a),e*(d-b))};a.prototype.calc=function(a){var b=a*a;return this.c0+this.c1*a+this.c2*b+this.c3*b*a};return THREE.Curve.create(function(a){this.points=a||[];this.closed=!1},function(a){var g=this.points,h,k;k=g.length;2>k&&console.log("duh, you need at least 2 points");a*=k-(this.closed?0:1);h=Math.floor(a);a-=h;this.closed?h+=0h&&(h=1);1e-4>k&&(k=h);1e-4>m&&(m=h);c.initNonuniformCatmullRom(l.x,p.x,n.x,g.x,k,h,m);d.initNonuniformCatmullRom(l.y,p.y,n.y,g.y,k,h,m);e.initNonuniformCatmullRom(l.z,p.z,n.z,g.z,k,h,m)}else"catmullrom"===this.type&&(k=void 0!==this.tension?this.tension:.5,c.initCatmullRom(l.x,p.x,n.x,g.x,k),d.initCatmullRom(l.y,p.y,n.y,g.y,k),e.initCatmullRom(l.z,p.z,n.z,g.z,k));return new THREE.Vector3(c.calc(a),d.calc(a),e.calc(a))})}();THREE.ClosedSplineCurve3=function(a){console.warn("THREE.ClosedSplineCurve3 has been deprecated. Please use THREE.CatmullRomCurve3.");THREE.CatmullRomCurve3.call(this,a);this.type="catmullrom";this.closed=!0};THREE.ClosedSplineCurve3.prototype=Object.create(THREE.CatmullRomCurve3.prototype);THREE.BoxGeometry=function(a,b,c,d,e,f){THREE.Geometry.call(this);this.type="BoxGeometry";this.parameters={width:a,height:b,depth:c,widthSegments:d,heightSegments:e,depthSegments:f};this.fromBufferGeometry(new THREE.BoxBufferGeometry(a,b,c,d,e,f));this.mergeVertices()};THREE.BoxGeometry.prototype=Object.create(THREE.Geometry.prototype);THREE.BoxGeometry.prototype.constructor=THREE.BoxGeometry;THREE.CubeGeometry=THREE.BoxGeometry;THREE.BoxBufferGeometry=function(a,b,c,d,e,f){function g(a,b,c,d,e,f,g,k,l,L,A){var N=f/l,M=g/L,I=f/2,O=g/2,Q=k/2;g=l+1;for(var P=L+1,T=f=0,J=new THREE.Vector3,C=0;Cm;m++){e[0]=n[g[m]];e[1]=n[g[(m+1)%3]];e.sort(c);var q=e.toString();void 0===f[q]?f[q]={vert1:e[0],vert2:e[1],face1:l,face2:void 0}:f[q].face2=l}e=[];for(q in f)if(g=f[q],void 0===g.face2||h[g.face1].normal.dot(h[g.face2].normal)<=d)l=k[g.vert1],e.push(l.x),e.push(l.y),e.push(l.z),l=k[g.vert2],e.push(l.x),e.push(l.y),e.push(l.z);this.addAttribute("position",new THREE.BufferAttribute(new Float32Array(e),3))};THREE.EdgesGeometry.prototype=Object.create(THREE.BufferGeometry.prototype);THREE.EdgesGeometry.prototype.constructor=THREE.EdgesGeometry;THREE.ExtrudeGeometry=function(a,b){"undefined"!==typeof a&&(THREE.Geometry.call(this),this.type="ExtrudeGeometry",a=Array.isArray(a)?a:[a],this.addShapeList(a,b),this.computeFaceNormals())};THREE.ExtrudeGeometry.prototype=Object.create(THREE.Geometry.prototype);THREE.ExtrudeGeometry.prototype.constructor=THREE.ExtrudeGeometry;THREE.ExtrudeGeometry.prototype.addShapeList=function(a,b){for(var c=a.length,d=0;dNumber.EPSILON){var k=Math.sqrt(h),l=Math.sqrt(f*f+g*g),h=b.x-e/k;b=b.y+d/k;f=((c.x-g/l-h)*g-(c.y+f/l-b)*f)/(d*g-e*f);c=h+d*f-a.x;a=b+e*f-a.y;d=c*c+a*a;if(2>=d)return new THREE.Vector2(c,a);d=Math.sqrt(d/2)}else a=!1,d>Number.EPSILON?f>Number.EPSILON&&(a=!0):d<-Number.EPSILON?f<-Number.EPSILON&&(a=!0):Math.sign(e)===Math.sign(g)&&(a=!0),a?(c=-e,a=d,d=Math.sqrt(h)):(c=d,a=e,d=Math.sqrt(h/2));return new THREE.Vector2(c/d,a/d)}function e(a,b){var c,d;for(C=a.length;0<=--C;){c=C;d=C-1;0>d&&(d=a.length-1);for(var e=0,f=q+2*p,e=0;eMath.abs(b.y-c.y)?[new THREE.Vector2(b.x,1-b.z),new THREE.Vector2(c.x,1-c.z),new THREE.Vector2(d.x,1-d.z),new THREE.Vector2(e.x,1-e.z)]:[new THREE.Vector2(b.y,1-b.z),new THREE.Vector2(c.y,1-c.z),new THREE.Vector2(d.y,1-d.z),new THREE.Vector2(e.y,1-e.z)]}};THREE.ShapeGeometry=function(a,b){THREE.Geometry.call(this);this.type="ShapeGeometry";!1===Array.isArray(a)&&(a=[a]);this.addShapeList(a,b);this.computeFaceNormals()};THREE.ShapeGeometry.prototype=Object.create(THREE.Geometry.prototype);THREE.ShapeGeometry.prototype.constructor=THREE.ShapeGeometry;THREE.ShapeGeometry.prototype.addShapeList=function(a,b){for(var c=0,d=a.length;cNumber.EPSILON&&(h.normalize(),d=Math.acos(THREE.Math.clamp(e[l-1].dot(e[l]),-1,1)),f[l].applyMatrix4(k.makeRotationAxis(h,d))),g[l].crossVectors(e[l],f[l]);if(c)for(d=Math.acos(THREE.Math.clamp(f[0].dot(f[b-1]),-1,1)),d/=b-1,0c&&1===a.x&&(a=new THREE.Vector2(a.x-1,a.y));0===b.x&&0===b.z&&(a=new THREE.Vector2(c/2/Math.PI+.5,a.y));return a.clone()}THREE.Geometry.call(this);this.type="PolyhedronGeometry";this.parameters={vertices:a,indices:b,radius:c,detail:d};c=c||1;d=d||0;for(var k=this,l=0,p=a.length;lq&&(.2>d&&(b[0].x+=1),.2>a&&(b[1].x+=1),.2>n&&(b[2].x+=1));l=0;for(p=this.vertices.length;ln;n++){c[0]=p[e[n]];c[1]=p[e[(n+1)%3]];c.sort(b);var m=c.toString();void 0===d[m]&&(k[2*h]=c[0],k[2*h+1]=c[1],d[m]=!0,h++)}c=new Float32Array(6*h);a=0;for(l=h;an;n++)d=f[k[2*a+n]],h=6*a+3*n,c[h+0]=d.x,c[h+1]=d.y,c[h+2]=d.z;this.addAttribute("position",new THREE.BufferAttribute(c,3))}else if(a instanceof THREE.BufferGeometry){if(null!==a.index){l=a.index.array;f=a.attributes.position;e=a.groups;h=0;0===e.length&&a.addGroup(0,l.length);k=new Uint32Array(2*l.length);g=0;for(p=e.length;gn;n++)c[0]=l[a+n],c[1]=l[a+(n+1)%3],c.sort(b),m=c.toString(),void 0===d[m]&&(k[2*h]=c[0],k[2*h+1]=c[1],d[m]=!0,h++)}c=new Float32Array(6*h);a=0;for(l=h;an;n++)h=6*a+3*n,d=k[2*a+n],c[h+0]=f.getX(d),c[h+1]=f.getY(d),c[h+2]=f.getZ(d)}else for(f=a.attributes.position.array,h=f.length/3,k=h/3,c=new Float32Array(6*h),a=0,l=k;an;n++)h=18*a+6*n,k=9*a+3*n,c[h+0]=f[k],c[h+1]=f[k+1],c[h+2]=f[k+2],d=9*a+(n+1)%3*3,c[h+3]=f[d],c[h+4]=f[d+1],c[h+5]=f[d+2];this.addAttribute("position",new THREE.BufferAttribute(c,3))}};THREE.WireframeGeometry.prototype=Object.create(THREE.BufferGeometry.prototype);THREE.WireframeGeometry.prototype.constructor=THREE.WireframeGeometry;THREE.AxisHelper=function(a){a=a||1;var b=new Float32Array([0,0,0,a,0,0,0,0,0,0,a,0,0,0,0,0,0,a]),c=new Float32Array([1,0,0,1,.6,0,0,1,0,.6,1,0,0,0,1,0,.6,1]);a=new THREE.BufferGeometry;a.addAttribute("position",new THREE.BufferAttribute(b,3));a.addAttribute("color",new THREE.BufferAttribute(c,3));b=new THREE.LineBasicMaterial({vertexColors:THREE.VertexColors});THREE.LineSegments.call(this,a,b)};THREE.AxisHelper.prototype=Object.create(THREE.LineSegments.prototype);THREE.AxisHelper.prototype.constructor=THREE.AxisHelper;THREE.ArrowHelper=function(){var a=new THREE.Geometry;a.vertices.push(new THREE.Vector3(0,0,0),new THREE.Vector3(0,1,0));var b=new THREE.CylinderGeometry(0,.5,1,5,1);b.translate(0,-.5,0);return function(c,d,e,f,g,h){THREE.Object3D.call(this);void 0===f&&(f=16776960);void 0===e&&(e=1);void 0===g&&(g=.2*e);void 0===h&&(h=.2*g);this.position.copy(d);this.line=new THREE.Line(a,new THREE.LineBasicMaterial({color:f}));this.line.matrixAutoUpdate=!1;this.add(this.line);this.cone=new THREE.Mesh(b,new THREE.MeshBasicMaterial({color:f}));this.cone.matrixAutoUpdate=!1;this.add(this.cone);this.setDirection(c);this.setLength(e,g,h)}}();THREE.ArrowHelper.prototype=Object.create(THREE.Object3D.prototype);THREE.ArrowHelper.prototype.constructor=THREE.ArrowHelper;THREE.ArrowHelper.prototype.setDirection=function(){var a=new THREE.Vector3,b;return function(c){.99999c.y?this.quaternion.set(1,0,0,0):(a.set(c.z,0,-c.x).normalize(),b=Math.acos(c.y),this.quaternion.setFromAxisAngle(a,b))}}();THREE.ArrowHelper.prototype.setLength=function(a,b,c){void 0===b&&(b=.2*a);void 0===c&&(c=.2*b);this.line.scale.set(1,Math.max(0,a-b),1);this.line.updateMatrix();this.cone.scale.set(c,b,c);this.cone.position.y=a;this.cone.updateMatrix()};THREE.ArrowHelper.prototype.setColor=function(a){this.line.material.color.set(a);this.cone.material.color.set(a)};THREE.BoxHelper=function(a){var b=new Uint16Array([0,1,1,2,2,3,3,0,4,5,5,6,6,7,7,4,0,4,1,5,2,6,3,7]),c=new Float32Array(24),d=new THREE.BufferGeometry;d.setIndex(new THREE.BufferAttribute(b,1));d.addAttribute("position",new THREE.BufferAttribute(c,3));THREE.LineSegments.call(this,d,new THREE.LineBasicMaterial({color:16776960}));void 0!==a&&this.update(a)};THREE.BoxHelper.prototype=Object.create(THREE.LineSegments.prototype);THREE.BoxHelper.prototype.constructor=THREE.BoxHelper;THREE.BoxHelper.prototype.update=function(){var a=new THREE.Box3;return function(b){a.setFromObject(b);if(!a.isEmpty()){b=a.min;var c=a.max,d=this.geometry.attributes.position,e=d.array;e[0]=c.x;e[1]=c.y;e[2]=c.z;e[3]=b.x;e[4]=c.y;e[5]=c.z;e[6]=b.x;e[7]=b.y;e[8]=c.z;e[9]=c.x;e[10]=b.y;e[11]=c.z;e[12]=c.x;e[13]=c.y;e[14]=b.z;e[15]=b.x;e[16]=c.y;e[17]=b.z;e[18]=b.x;e[19]=b.y;e[20]=b.z;e[21]=c.x;e[22]=b.y;e[23]=b.z;d.needsUpdate=!0;this.geometry.computeBoundingSphere()}}}();THREE.BoundingBoxHelper=function(a,b){var c=void 0!==b?b:8947848;this.object=a;this.box=new THREE.Box3;THREE.Mesh.call(this,new THREE.BoxGeometry(1,1,1),new THREE.MeshBasicMaterial({color:c,wireframe:!0}))};THREE.BoundingBoxHelper.prototype=Object.create(THREE.Mesh.prototype);THREE.BoundingBoxHelper.prototype.constructor=THREE.BoundingBoxHelper;THREE.BoundingBoxHelper.prototype.update=function(){this.box.setFromObject(this.object);this.box.size(this.scale);this.box.center(this.position)};THREE.CameraHelper=function(a){function b(a,b,d){c(a,d);c(b,d)}function c(a,b){d.vertices.push(new THREE.Vector3);d.colors.push(new THREE.Color(b));void 0===f[a]&&(f[a]=[]);f[a].push(d.vertices.length-1)}var d=new THREE.Geometry,e=new THREE.LineBasicMaterial({color:16777215,vertexColors:THREE.FaceColors}),f={};b("n1","n2",16755200);b("n2","n4",16755200);b("n4","n3",16755200);b("n3","n1",16755200);b("f1","f2",16755200);b("f2","f4",16755200);b("f4","f3",16755200);b("f3","f1",16755200);b("n1","f1",16755200);b("n2","f2",16755200);b("n3","f3",16755200);b("n4","f4",16755200);b("p","n1",16711680);b("p","n2",16711680);b("p","n3",16711680);b("p","n4",16711680);b("u1","u2",43775);b("u2","u3",43775);b("u3","u1",43775);b("c","t",16777215);b("p","c",3355443);b("cn1","cn2",3355443);b("cn3","cn4",3355443);b("cf1","cf2",3355443);b("cf3","cf4",3355443);THREE.LineSegments.call(this,d,e);this.camera=a;this.camera.updateProjectionMatrix();this.matrix=a.matrixWorld;this.matrixAutoUpdate=!1;this.pointMap=f;this.update()};THREE.CameraHelper.prototype=Object.create(THREE.LineSegments.prototype);THREE.CameraHelper.prototype.constructor=THREE.CameraHelper;THREE.CameraHelper.prototype.update=function(){function a(a,g,h,k){d.set(g,h,k).unproject(e);a=c[a];if(void 0!==a)for(g=0,h=a.length;gd;d++)c.faces[d].color=this.colors[4>d?0:1];d=new THREE.MeshBasicMaterial({vertexColors:THREE.FaceColors,wireframe:!0});this.lightSphere=new THREE.Mesh(c,d);this.add(this.lightSphere);this.update()};THREE.HemisphereLightHelper.prototype=Object.create(THREE.Object3D.prototype);THREE.HemisphereLightHelper.prototype.constructor=THREE.HemisphereLightHelper;THREE.HemisphereLightHelper.prototype.dispose=function(){this.lightSphere.geometry.dispose();this.lightSphere.material.dispose()};THREE.HemisphereLightHelper.prototype.update=function(){var a=new THREE.Vector3;return function(){this.colors[0].copy(this.light.color).multiplyScalar(this.light.intensity);this.colors[1].copy(this.light.groundColor).multiplyScalar(this.light.intensity);this.lightSphere.lookAt(a.setFromMatrixPosition(this.light.matrixWorld).negate());this.lightSphere.geometry.colorsNeedUpdate=!0}}();THREE.PointLightHelper=function(a,b){this.light=a;this.light.updateMatrixWorld();var c=new THREE.SphereGeometry(b,4,2),d=new THREE.MeshBasicMaterial({wireframe:!0,fog:!1});d.color.copy(this.light.color).multiplyScalar(this.light.intensity);THREE.Mesh.call(this,c,d);this.matrix=this.light.matrixWorld;this.matrixAutoUpdate=!1};THREE.PointLightHelper.prototype=Object.create(THREE.Mesh.prototype);THREE.PointLightHelper.prototype.constructor=THREE.PointLightHelper;THREE.PointLightHelper.prototype.dispose=function(){this.geometry.dispose();this.material.dispose()};THREE.PointLightHelper.prototype.update=function(){this.material.color.copy(this.light.color).multiplyScalar(this.light.intensity)};THREE.SkeletonHelper=function(a){this.bones=this.getBoneList(a);for(var b=new THREE.Geometry,c=0;ch.end&&(h.end=f);c||(c=k)}}for(k in d)h=d[k],this.createAnimation(k,h.start,h.end,a);this.firstAnimation=c};THREE.MorphBlendMesh.prototype.setAnimationDirectionForward=function(a){if(a=this.animationsMap[a])a.direction=1,a.directionBackwards=!1};THREE.MorphBlendMesh.prototype.setAnimationDirectionBackward=function(a){if(a=this.animationsMap[a])a.direction=-1,a.directionBackwards=!0};THREE.MorphBlendMesh.prototype.setAnimationFPS=function(a,b){var c=this.animationsMap[a];c&&(c.fps=b,c.duration=(c.end-c.start)/c.fps)};THREE.MorphBlendMesh.prototype.setAnimationDuration=function(a,b){var c=this.animationsMap[a];c&&(c.duration=b,c.fps=(c.end-c.start)/c.duration)};THREE.MorphBlendMesh.prototype.setAnimationWeight=function(a,b){var c=this.animationsMap[a];c&&(c.weight=b)};THREE.MorphBlendMesh.prototype.setAnimationTime=function(a,b){var c=this.animationsMap[a];c&&(c.time=b)};THREE.MorphBlendMesh.prototype.getAnimationTime=function(a){var b=0;if(a=this.animationsMap[a])b=a.time;return b};THREE.MorphBlendMesh.prototype.getAnimationDuration=function(a){var b=-1;if(a=this.animationsMap[a])b=a.duration;return b};THREE.MorphBlendMesh.prototype.playAnimation=function(a){var b=this.animationsMap[a];b?(b.time=0,b.active=!0):console.warn("THREE.MorphBlendMesh: animation["+a+"] undefined in .playAnimation()")};THREE.MorphBlendMesh.prototype.stopAnimation=function(a){if(a=this.animationsMap[a])a.active=!1};THREE.MorphBlendMesh.prototype.update=function(a){for(var b=0,c=this.animationsList.length;bd.duration||0>d.time)d.direction*=-1,d.time>d.duration&&(d.time=d.duration,d.directionBackwards=!0),0>d.time&&(d.time=0,d.directionBackwards=!1)}else d.time%=d.duration,0>d.time&&(d.time+=d.duration);var f=d.start+THREE.Math.clamp(Math.floor(d.time/e),0,d.length-1),g=d.weight;f!==d.currentFrame&&(this.morphTargetInfluences[d.lastFrame]=0,this.morphTargetInfluences[d.currentFrame]=1*g,this.morphTargetInfluences[f]=0,d.lastFrame=d.currentFrame,d.currentFrame=f);e=d.time%e/e;d.directionBackwards&&(e=1-e);d.currentFrame!==d.lastFrame?(this.morphTargetInfluences[d.currentFrame]=e*g,this.morphTargetInfluences[d.lastFrame]=(1-e)*g):this.morphTargetInfluences[d.currentFrame]=g}}};var THREEx=THREEx||{};THREEx.FullScreen=THREEx.FullScreen||{};THREEx.FullScreen.available=function(){return this._hasWebkitFullScreen||this._hasMozFullScreen};THREEx.FullScreen.activated=function(){if(this._hasWebkitFullScreen){return document.webkitIsFullScreen}else if(this._hasMozFullScreen){return document.mozFullScreen}else{console.assert(false)}};THREEx.FullScreen.request=function(element){element=element||document.body;if(this._hasWebkitFullScreen){element.webkitRequestFullScreen()}else if(this._hasMozFullScreen){element.mozRequestFullScreen()}else{console.assert(false)}};THREEx.FullScreen.cancel=function(){if(this._hasWebkitFullScreen){document.webkitCancelFullScreen()}else if(this._hasMozFullScreen){document.mozCancelFullScreen()}else{console.assert(false)}};THREEx.FullScreen._hasWebkitFullScreen="webkitCancelFullScreen"in document?true:false;THREEx.FullScreen._hasMozFullScreen="mozCancelFullScreen"in document?true:false;THREE.OrbitControls=function(object,domElement){this.object=object;this.domElement=domElement!==undefined?domElement:document;this.enabled=true;this.target=new THREE.Vector3;this.minDistance=0;this.maxDistance=Infinity;this.minZoom=0;this.maxZoom=Infinity;this.minPolarAngle=0;this.maxPolarAngle=Math.PI;this.minAzimuthAngle=-Infinity;this.maxAzimuthAngle=Infinity;this.enableDamping=false;this.dampingFactor=.25;this.enableZoom=true;this.zoomSpeed=1;this.enableRotate=true;this.rotateSpeed=1;this.enablePan=true;this.keyPanSpeed=7;this.autoRotate=false;this.autoRotateSpeed=2;this.enableKeys=true;this.keys={LEFT:37,UP:38,RIGHT:39,BOTTOM:40};this.mouseButtons={ORBIT:THREE.MOUSE.LEFT,ZOOM:THREE.MOUSE.MIDDLE, -PAN:THREE.MOUSE.RIGHT};this.target0=this.target.clone();this.position0=this.object.position.clone();this.zoom0=this.object.zoom;this.getPolarAngle=function(){return phi};this.getAzimuthalAngle=function(){return theta};this.reset=function(){scope.target.copy(scope.target0);scope.object.position.copy(scope.position0);scope.object.zoom=scope.zoom0;scope.object.updateProjectionMatrix();scope.dispatchEvent(changeEvent);scope.update();state=STATE.NONE};this.update=function(){var offset=new THREE.Vector3;var quat=(new THREE.Quaternion).setFromUnitVectors(object.up,new THREE.Vector3(0,1,0));var quatInverse=quat.clone().inverse();var lastPosition=new THREE.Vector3;var lastQuaternion=new THREE.Quaternion;return function(){var position=scope.object.position;offset.copy(position).sub(scope.target);offset.applyQuaternion(quat);spherical.setFromVector3(offset);if(scope.autoRotate&&state===STATE.NONE){rotateLeft(getAutoRotationAngle())}spherical.theta+=sphericalDelta.theta;spherical.phi+=sphericalDelta.phi;spherical.theta=Math.max(scope.minAzimuthAngle,Math.min(scope.maxAzimuthAngle,spherical.theta));spherical.phi=Math.max(scope.minPolarAngle,Math.min(scope.maxPolarAngle,spherical.phi));spherical.makeSafe();spherical.radius*=scale;spherical.radius=Math.max(scope.minDistance,Math.min(scope.maxDistance,spherical.radius));scope.target.add(panOffset);offset.setFromSpherical(spherical);offset.applyQuaternion(quatInverse);position.copy(scope.target).add(offset);scope.object.lookAt(scope.target);if(scope.enableDamping===true){sphericalDelta.theta*=1-scope.dampingFactor;sphericalDelta.phi*=1-scope.dampingFactor}else{sphericalDelta.set(0,0,0)}scale=1;panOffset.set(0,0,0);if(zoomChanged||lastPosition.distanceToSquared(scope.object.position)>EPS||8*(1-lastQuaternion.dot(scope.object.quaternion))>EPS){scope.dispatchEvent(changeEvent);lastPosition.copy(scope.object.position);lastQuaternion.copy(scope.object.quaternion);zoomChanged=false;return true}return false}}();this.dispose=function(){scope.domElement.removeEventListener("contextmenu",onContextMenu,false);scope.domElement.removeEventListener("mousedown",onMouseDown,false);scope.domElement.removeEventListener("mousewheel",onMouseWheel,false);scope.domElement.removeEventListener("MozMousePixelScroll",onMouseWheel,false);scope.domElement.removeEventListener("touchstart",onTouchStart,false);scope.domElement.removeEventListener("touchend",onTouchEnd,false);scope.domElement.removeEventListener("touchmove",onTouchMove,false);document.removeEventListener("mousemove",onMouseMove,false);document.removeEventListener("mouseup",onMouseUp,false);document.removeEventListener("mouseout",onMouseUp,false);window.removeEventListener("keydown",onKeyDown,false)};var scope=this;var changeEvent={type:"change"};var startEvent={type:"start"};var endEvent={type:"end"};var STATE={NONE:-1,ROTATE:0,DOLLY:1,PAN:2,TOUCH_ROTATE:3,TOUCH_DOLLY:4,TOUCH_PAN:5};var state=STATE.NONE;var EPS=1e-6;var spherical=new THREE.Spherical;var sphericalDelta=new THREE.Spherical;var scale=1;var panOffset=new THREE.Vector3;var zoomChanged=false;var rotateStart=new THREE.Vector2;var rotateEnd=new THREE.Vector2;var rotateDelta=new THREE.Vector2;var panStart=new THREE.Vector2;var panEnd=new THREE.Vector2;var panDelta=new THREE.Vector2;var dollyStart=new THREE.Vector2;var dollyEnd=new THREE.Vector2;var dollyDelta=new THREE.Vector2;function getAutoRotationAngle(){return 2*Math.PI/60/60*scope.autoRotateSpeed}function getZoomScale(){return Math.pow(.95,scope.zoomSpeed)}function rotateLeft(angle){sphericalDelta.theta-=angle}function rotateUp(angle){sphericalDelta.phi-=angle}var panLeft=function(){var v=new THREE.Vector3;return function panLeft(distance,objectMatrix){v.setFromMatrixColumn(objectMatrix,0);v.multiplyScalar(-distance);panOffset.add(v)}}();var panUp=function(){var v=new THREE.Vector3;return function panUp(distance,objectMatrix){v.setFromMatrixColumn(objectMatrix,1);v.multiplyScalar(distance);panOffset.add(v)}}();var pan=function(){var offset=new THREE.Vector3;return function(deltaX,deltaY){var element=scope.domElement===document?scope.domElement.body:scope.domElement;if(scope.object instanceof THREE.PerspectiveCamera){var position=scope.object.position;offset.copy(position).sub(scope.target);var targetDistance=offset.length();targetDistance*=Math.tan(scope.object.fov/2*Math.PI/180);panLeft(2*deltaX*targetDistance/element.clientHeight,scope.object.matrix);panUp(2*deltaY*targetDistance/element.clientHeight,scope.object.matrix)}else if(scope.object instanceof THREE.OrthographicCamera){panLeft(deltaX*(scope.object.right-scope.object.left)/scope.object.zoom/element.clientWidth,scope.object.matrix);panUp(deltaY*(scope.object.top-scope.object.bottom)/scope.object.zoom/element.clientHeight,scope.object.matrix)}else{console.warn("WARNING: OrbitControls.js encountered an unknown camera type - pan disabled.");scope.enablePan=false}}}();function dollyIn(dollyScale){if(scope.object instanceof THREE.PerspectiveCamera){scale/=dollyScale}else if(scope.object instanceof THREE.OrthographicCamera){scope.object.zoom=Math.max(scope.minZoom,Math.min(scope.maxZoom,scope.object.zoom*dollyScale));scope.object.updateProjectionMatrix();zoomChanged=true}else{console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.");scope.enableZoom=false}}function dollyOut(dollyScale){if(scope.object instanceof THREE.PerspectiveCamera){scale*=dollyScale}else if(scope.object instanceof THREE.OrthographicCamera){scope.object.zoom=Math.max(scope.minZoom,Math.min(scope.maxZoom,scope.object.zoom/dollyScale));scope.object.updateProjectionMatrix();zoomChanged=true}else{console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.");scope.enableZoom=false}}function handleMouseDownRotate(event){rotateStart.set(event.clientX,event.clientY)}function handleMouseDownDolly(event){dollyStart.set(event.clientX,event.clientY)}function handleMouseDownPan(event){panStart.set(event.clientX,event.clientY)}function handleMouseMoveRotate(event){rotateEnd.set(event.clientX,event.clientY);rotateDelta.subVectors(rotateEnd,rotateStart);var element=scope.domElement===document?scope.domElement.body:scope.domElement;rotateLeft(2*Math.PI*rotateDelta.x/element.clientWidth*scope.rotateSpeed);rotateUp(2*Math.PI*rotateDelta.y/element.clientHeight*scope.rotateSpeed);rotateStart.copy(rotateEnd);scope.update()}function handleMouseMoveDolly(event){dollyEnd.set(event.clientX,event.clientY);dollyDelta.subVectors(dollyEnd,dollyStart);if(dollyDelta.y>0){dollyIn(getZoomScale())}else if(dollyDelta.y<0){dollyOut(getZoomScale())}dollyStart.copy(dollyEnd);scope.update()}function handleMouseMovePan(event){panEnd.set(event.clientX,event.clientY);panDelta.subVectors(panEnd,panStart);pan(panDelta.x,panDelta.y);panStart.copy(panEnd);scope.update()}function handleMouseUp(event){}function handleMouseWheel(event){var delta=0;if(event.wheelDelta!==undefined){delta=event.wheelDelta}else if(event.detail!==undefined){delta=-event.detail}if(delta>0){dollyOut(getZoomScale())}else if(delta<0){dollyIn(getZoomScale())}scope.update()}function handleKeyDown(event){switch(event.keyCode){case scope.keys.UP:pan(0,scope.keyPanSpeed);scope.update();break;case scope.keys.BOTTOM:pan(0,-scope.keyPanSpeed);scope.update();break;case scope.keys.LEFT:pan(scope.keyPanSpeed,0);scope.update();break;case scope.keys.RIGHT:pan(-scope.keyPanSpeed,0);scope.update();break}}function handleTouchStartRotate(event){rotateStart.set(event.touches[0].pageX,event.touches[0].pageY)}function handleTouchStartDolly(event){var dx=event.touches[0].pageX-event.touches[1].pageX;var dy=event.touches[0].pageY-event.touches[1].pageY;var distance=Math.sqrt(dx*dx+dy*dy);dollyStart.set(0,distance)}function handleTouchStartPan(event){panStart.set(event.touches[0].pageX,event.touches[0].pageY)}function handleTouchMoveRotate(event){rotateEnd.set(event.touches[0].pageX,event.touches[0].pageY);rotateDelta.subVectors(rotateEnd,rotateStart);var element=scope.domElement===document?scope.domElement.body:scope.domElement;rotateLeft(2*Math.PI*rotateDelta.x/element.clientWidth*scope.rotateSpeed);rotateUp(2*Math.PI*rotateDelta.y/element.clientHeight*scope.rotateSpeed);rotateStart.copy(rotateEnd);scope.update()}function handleTouchMoveDolly(event){var dx=event.touches[0].pageX-event.touches[1].pageX;var dy=event.touches[0].pageY-event.touches[1].pageY;var distance=Math.sqrt(dx*dx+dy*dy);dollyEnd.set(0,distance);dollyDelta.subVectors(dollyEnd,dollyStart);if(dollyDelta.y>0){dollyOut(getZoomScale())}else if(dollyDelta.y<0){dollyIn(getZoomScale())}dollyStart.copy(dollyEnd);scope.update()}function handleTouchMovePan(event){panEnd.set(event.touches[0].pageX,event.touches[0].pageY);panDelta.subVectors(panEnd,panStart);pan(panDelta.x,panDelta.y);panStart.copy(panEnd);scope.update()}function handleTouchEnd(event){}function onMouseDown(event){if(scope.enabled===false)return;event.preventDefault();if(event.button===scope.mouseButtons.ORBIT){if(scope.enableRotate===false)return;handleMouseDownRotate(event);state=STATE.ROTATE}else if(event.button===scope.mouseButtons.ZOOM){if(scope.enableZoom===false)return;handleMouseDownDolly(event);state=STATE.DOLLY}else if(event.button===scope.mouseButtons.PAN){if(scope.enablePan===false)return;handleMouseDownPan(event);state=STATE.PAN}if(state!==STATE.NONE){document.addEventListener("mousemove",onMouseMove,false);document.addEventListener("mouseup",onMouseUp,false);document.addEventListener("mouseout",onMouseUp,false);scope.dispatchEvent(startEvent)}}function onMouseMove(event){if(scope.enabled===false)return;event.preventDefault();if(state===STATE.ROTATE){if(scope.enableRotate===false)return;handleMouseMoveRotate(event)}else if(state===STATE.DOLLY){if(scope.enableZoom===false)return;handleMouseMoveDolly(event)}else if(state===STATE.PAN){if(scope.enablePan===false)return;handleMouseMovePan(event)}}function onMouseUp(event){if(scope.enabled===false)return;handleMouseUp(event);document.removeEventListener("mousemove",onMouseMove,false);document.removeEventListener("mouseup",onMouseUp,false);document.removeEventListener("mouseout",onMouseUp,false);scope.dispatchEvent(endEvent);state=STATE.NONE}function onMouseWheel(event){if(scope.enabled===false||scope.enableZoom===false||state!==STATE.NONE)return;event.preventDefault();event.stopPropagation();handleMouseWheel(event);scope.dispatchEvent(startEvent);scope.dispatchEvent(endEvent)}function onKeyDown(event){if(scope.enabled===false||scope.enableKeys===false||scope.enablePan===false)return;handleKeyDown(event)}function onTouchStart(event){if(scope.enabled===false)return;switch(event.touches.length){case 1:if(scope.enableRotate===false)return;handleTouchStartRotate(event);state=STATE.TOUCH_ROTATE;break;case 2:if(scope.enableZoom===false)return;handleTouchStartDolly(event);state=STATE.TOUCH_DOLLY;break;case 3:if(scope.enablePan===false)return;handleTouchStartPan(event);state=STATE.TOUCH_PAN;break;default:state=STATE.NONE}if(state!==STATE.NONE){scope.dispatchEvent(startEvent)}}function onTouchMove(event){if(scope.enabled===false)return;event.preventDefault();event.stopPropagation();switch(event.touches.length){case 1:if(scope.enableRotate===false)return;if(state!==STATE.TOUCH_ROTATE)return;handleTouchMoveRotate(event);break;case 2:if(scope.enableZoom===false)return;if(state!==STATE.TOUCH_DOLLY)return;handleTouchMoveDolly(event);break;case 3:if(scope.enablePan===false)return;if(state!==STATE.TOUCH_PAN)return;handleTouchMovePan(event);break;default:state=STATE.NONE}}function onTouchEnd(event){if(scope.enabled===false)return;handleTouchEnd(event);scope.dispatchEvent(endEvent);state=STATE.NONE}function onContextMenu(event){event.preventDefault()}scope.domElement.addEventListener("contextmenu",onContextMenu,false);scope.domElement.addEventListener("mousedown",onMouseDown,false);scope.domElement.addEventListener("mousewheel",onMouseWheel,false);scope.domElement.addEventListener("MozMousePixelScroll",onMouseWheel,false);scope.domElement.addEventListener("touchstart",onTouchStart,false);scope.domElement.addEventListener("touchend",onTouchEnd,false);scope.domElement.addEventListener("touchmove",onTouchMove,false);window.addEventListener("keydown",onKeyDown,false);this.update()};THREE.OrbitControls.prototype=Object.create(THREE.EventDispatcher.prototype);THREE.OrbitControls.prototype.constructor=THREE.OrbitControls;Object.defineProperties(THREE.OrbitControls.prototype,{center:{get:function(){console.warn("THREE.OrbitControls: .center has been renamed to .target");return this.target}},noZoom:{get:function(){console.warn("THREE.OrbitControls: .noZoom has been deprecated. Use .enableZoom instead.");return!this.enableZoom},set:function(value){console.warn("THREE.OrbitControls: .noZoom has been deprecated. Use .enableZoom instead.");this.enableZoom=!value}},noRotate:{get:function(){console.warn("THREE.OrbitControls: .noRotate has been deprecated. Use .enableRotate instead.");return!this.enableRotate},set:function(value){console.warn("THREE.OrbitControls: .noRotate has been deprecated. Use .enableRotate instead.");this.enableRotate=!value}},noPan:{get:function(){console.warn("THREE.OrbitControls: .noPan has been deprecated. Use .enablePan instead.");return!this.enablePan},set:function(value){console.warn("THREE.OrbitControls: .noPan has been deprecated. Use .enablePan instead.");this.enablePan=!value}},noKeys:{get:function(){console.warn("THREE.OrbitControls: .noKeys has been deprecated. Use .enableKeys instead.");return!this.enableKeys},set:function(value){console.warn("THREE.OrbitControls: .noKeys has been deprecated. Use .enableKeys instead.");this.enableKeys=!value}},staticMoving:{get:function(){console.warn("THREE.OrbitControls: .staticMoving has been deprecated. Use .enableDamping instead.");return!this.constraint.enableDamping},set:function(value){console.warn("THREE.OrbitControls: .staticMoving has been deprecated. Use .enableDamping instead.");this.constraint.enableDamping=!value}},dynamicDampingFactor:{get:function(){console.warn("THREE.OrbitControls: .dynamicDampingFactor has been renamed. Use .dampingFactor instead.");return this.constraint.dampingFactor},set:function(value){console.warn("THREE.OrbitControls: .dynamicDampingFactor has been renamed. Use .dampingFactor instead.");this.constraint.dampingFactor=value}}});"use strict";void 0===Date.now&&(Date.now=function(){return(new Date).valueOf()});var TWEEN=TWEEN||function(){var a=[];return{REVISION:"14",getAll:function(){return a},removeAll:function(){a=[]},add:function(c){a.push(c)},remove:function(c){c=a.indexOf(c);-1!==c&&a.splice(c,1)},update:function(c){if(0===a.length)return!1;for(var b=0,c=void 0!==c?c:"undefined"!==typeof window&&void 0!==window.performance&&void 0!==window.performance.now?window.performance.now():Date.now();b(a*=2)?.5*a*a:-.5*(--a*(a-2)-1)}},Cubic:{In:function(a){return a*a*a},Out:function(a){return--a*a*a+1},InOut:function(a){return 1>(a*=2)?.5*a*a*a:.5*((a-=2)*a*a+2)}},Quartic:{In:function(a){return a*a*a*a},Out:function(a){return 1- --a*a*a*a},InOut:function(a){return 1>(a*=2)?.5*a*a*a*a:-.5*((a-=2)*a*a*a-2)}},Quintic:{In:function(a){return a*a*a*a*a},Out:function(a){return--a*a*a*a*a+1},InOut:function(a){return 1>(a*=2)?.5*a*a*a*a*a:.5*((a-=2)*a*a*a*a+2)}},Sinusoidal:{In:function(a){return 1-Math.cos(a*Math.PI/2)},Out:function(a){return Math.sin(a*Math.PI/2)},InOut:function(a){return.5*(1-Math.cos(Math.PI*a))}},Exponential:{In:function(a){return 0===a?0:Math.pow(1024,a-1)},Out:function(a){return 1===a?1:1-Math.pow(2,-10*a)},InOut:function(a){return 0===a?0:1===a?1:1>(a*=2)?.5*Math.pow(1024,a-1):.5*(-Math.pow(2,-10*(a-1))+2)}},Circular:{In:function(a){return 1-Math.sqrt(1-a*a)},Out:function(a){return Math.sqrt(1- --a*a)},InOut:function(a){return 1>(a*=2)?-.5*(Math.sqrt(1-a*a)-1):.5*(Math.sqrt(1-(a-=2)*a)+1)}},Elastic:{In:function(a){var c,b=.1;if(0===a)return 0;if(1===a)return 1;!b||1>b?(b=1,c=.1):c=.4*Math.asin(1/b)/(2*Math.PI);return-(b*Math.pow(2,10*(a-=1))*Math.sin((a-c)*2*Math.PI/.4))},Out:function(a){var c,b=.1;if(0===a)return 0;if(1===a)return 1;!b||1>b?(b=1,c=.1):c=.4*Math.asin(1/b)/(2*Math.PI);return b*Math.pow(2,-10*a)*Math.sin((a-c)*2*Math.PI/.4)+1},InOut:function(a){var c,b=.1;if(0===a)return 0;if(1===a)return 1;!b||1>b?(b=1,c=.1):c=.4*Math.asin(1/b)/(2*Math.PI);return 1>(a*=2)?-.5*b*Math.pow(2,10*(a-=1))*Math.sin((a-c)*2*Math.PI/.4):.5*b*Math.pow(2,-10*(a-=1))*Math.sin((a-c)*2*Math.PI/.4)+1}},Back:{In:function(a){return a*a*(2.70158*a-1.70158)},Out:function(a){return--a*a*(2.70158*a+1.70158)+1},InOut:function(a){return 1>(a*=2)?.5*a*a*(3.5949095*a-2.5949095):.5*((a-=2)*a*(3.5949095*a+2.5949095)+2)}},Bounce:{In:function(a){return 1-TWEEN.Easing.Bounce.Out(1-a)},Out:function(a){return a<1/2.75?7.5625*a*a:a<2/2.75?7.5625*(a-=1.5/2.75)*a+.75:a<2.5/2.75?7.5625*(a-=2.25/2.75)*a+.9375:7.5625*(a-=2.625/2.75)*a+.984375},InOut:function(a){return.5>a?.5*TWEEN.Easing.Bounce.In(2*a):.5*TWEEN.Easing.Bounce.Out(2*a-1)+.5}}};TWEEN.Interpolation={Linear:function(a,c){var b=a.length-1,d=b*c,e=Math.floor(d),g=TWEEN.Interpolation.Utils.Linear;return 0>c?g(a[0],a[1],d):1b?b:e+1],d-e)},Bezier:function(a,c){var b=0,d=a.length-1,e=Math.pow,g=TWEEN.Interpolation.Utils.Bernstein,h;for(h=0;h<=d;h++)b+=e(1-c,d-h)*e(c,h)*a[h]*g(d,h);return b},CatmullRom:function(a,c){var b=a.length-1,d=b*c,e=Math.floor(d),g=TWEEN.Interpolation.Utils.CatmullRom;return a[0]===a[b]?(0>c&&(e=Math.floor(d=b*(1+c))),g(a[(e-1+b)%b],a[e],a[(e+1)%b],a[(e+2)%b],d-e)):0>c?a[0]-(g(a[0],a[0],a[1],a[1],-d)-a[0]):1this.__max&&(a=this.__max);void 0!==this.__step&&0!=a%this.__step&&(a=Math.round(a/this.__step)*this.__step);return e.superclass.prototype.setValue.call(this,a)},min:function(a){this.__min=a;return this},max:function(a){this.__max=a;return this},step:function(a){this.__impliedStep=this.__step=a;this.__precision=d(a);return this}});return e}(dat.controllers.Controller,dat.utils.common);dat.controllers.NumberControllerBox=function(f,a,d){var e=function(c,b,f){function q(){var a=parseFloat(n.__input.value);d.isNaN(a)||n.setValue(a)}function l(a){var b=u-a.clientY;n.setValue(n.getValue()+b*n.__impliedStep);u=a.clientY}function r(){a.unbind(window,"mousemove",l);a.unbind(window,"mouseup",r)}this.__truncationSuspended=!1;e.superclass.call(this,c,b,f);var n=this,u;this.__input=document.createElement("input");this.__input.setAttribute("type","text");a.bind(this.__input,"change",q);a.bind(this.__input,"blur",function(){q();n.__onFinishChange&&n.__onFinishChange.call(n,n.getValue())});a.bind(this.__input,"mousedown",function(b){a.bind(window,"mousemove",l);a.bind(window,"mouseup",r);u=b.clientY});a.bind(this.__input,"keydown",function(a){13===a.keyCode&&(n.__truncationSuspended=!0,this.blur(),n.__truncationSuspended=!1)});this.updateDisplay();this.domElement.appendChild(this.__input)};e.superclass=f;d.extend(e.prototype,f.prototype,{updateDisplay:function(){var a=this.__input,b;if(this.__truncationSuspended)b=this.getValue();else{b=this.getValue();var d=Math.pow(10,this.__precision);b=Math.round(b*d)/d}a.value=b;return e.superclass.prototype.updateDisplay.call(this)}});return e}(dat.controllers.NumberController,dat.dom.dom,dat.utils.common);dat.controllers.NumberControllerSlider=function(f,a,d,e,c){function b(a,b,c,e,d){return e+(a-b)/(c-b)*(d-e)}var p=function(c,e,d,f,u){function A(c){c.preventDefault();var e=a.getOffset(k.__background),d=a.getWidth(k.__background);k.setValue(b(c.clientX,e.left,e.left+d,k.__min,k.__max));return!1}function g(){a.unbind(window,"mousemove",A);a.unbind(window,"mouseup",g);k.__onFinishChange&&k.__onFinishChange.call(k,k.getValue())}p.superclass.call(this,c,e,{min:d,max:f,step:u});var k=this;this.__background=document.createElement("div");this.__foreground=document.createElement("div");a.bind(this.__background,"mousedown",function(b){a.bind(window,"mousemove",A);a.bind(window,"mouseup",g);A(b)});a.addClass(this.__background,"slider");a.addClass(this.__foreground,"slider-fg");this.updateDisplay();this.__background.appendChild(this.__foreground);this.domElement.appendChild(this.__background)};p.superclass=f;p.useDefaultStyles=function(){d.inject(c)};e.extend(p.prototype,f.prototype,{updateDisplay:function(){var a=(this.getValue()-this.__min)/(this.__max-this.__min);this.__foreground.style.width=100*a+"%";return p.superclass.prototype.updateDisplay.call(this)}});return p}(dat.controllers.NumberController,dat.dom.dom,dat.utils.css,dat.utils.common,"/**\n * dat-gui JavaScript Controller Library\n * http://code.google.com/p/dat-gui\n *\n * Copyright 2011 Data Arts Team, Google Creative Lab\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n */\n\n.slider {\n box-shadow: inset 0 2px 4px rgba(0,0,0,0.15);\n height: 1em;\n border-radius: 1em;\n background-color: #eee;\n padding: 0 0.5em;\n overflow: hidden;\n}\n\n.slider-fg {\n padding: 1px 0 2px 0;\n background-color: #aaa;\n height: 1em;\n margin-left: -0.5em;\n padding-right: 0.5em;\n border-radius: 1em 0 0 1em;\n}\n\n.slider-fg:after {\n display: inline-block;\n border-radius: 1em;\n background-color: #fff;\n border: 1px solid #aaa;\n content: '';\n float: right;\n margin-right: -1em;\n margin-top: -1px;\n height: 0.9em;\n width: 0.9em;\n}");dat.controllers.FunctionController=function(f,a,d){var e=function(c,b,d){e.superclass.call(this,c,b);var f=this;this.__button=document.createElement("div");this.__button.innerHTML=void 0===d?"Fire":d;a.bind(this.__button,"click",function(a){a.preventDefault();f.fire();return!1});a.addClass(this.__button,"button");this.domElement.appendChild(this.__button)};e.superclass=f;d.extend(e.prototype,f.prototype,{fire:function(){this.__onChange&&this.__onChange.call(this);this.getValue().call(this.object);this.__onFinishChange&&this.__onFinishChange.call(this,this.getValue())}});return e}(dat.controllers.Controller,dat.dom.dom,dat.utils.common);dat.controllers.BooleanController=function(f,a,d){var e=function(c,b){e.superclass.call(this,c,b);var d=this;this.__prev=this.getValue();this.__checkbox=document.createElement("input");this.__checkbox.setAttribute("type","checkbox");a.bind(this.__checkbox,"change",function(){d.setValue(!d.__prev)},!1);this.domElement.appendChild(this.__checkbox);this.updateDisplay()};e.superclass=f;d.extend(e.prototype,f.prototype,{setValue:function(a){a=e.superclass.prototype.setValue.call(this,a);this.__onFinishChange&&this.__onFinishChange.call(this,this.getValue());this.__prev=this.getValue();return a},updateDisplay:function(){!0===this.getValue()?(this.__checkbox.setAttribute("checked","checked"),this.__checkbox.checked=!0):this.__checkbox.checked=!1;return e.superclass.prototype.updateDisplay.call(this)}});return e; + accelerationSensorString: function(value){ + if(value[0] == "No Sensors of the Appropriate Type"){return "NA"} + return numeral(value[1][0]).format('0,000') + "G" + }, -}(dat.controllers.Controller,dat.dom.dom,dat.utils.common);dat.color.toString=function(f){return function(a){if(1==a.a||f.isUndefined(a.a)){for(a=a.hex.toString(16);6>a.length;)a="0"+a;return"#"+a}return"rgba("+Math.round(a.r)+","+Math.round(a.g)+","+Math.round(a.b)+","+a.a+")"}}(dat.utils.common);dat.color.interpret=function(f,a){var d,e,c=[{litmus:a.isString,conversions:{THREE_CHAR_HEX:{read:function(a){a=a.match(/^#([A-F0-9])([A-F0-9])([A-F0-9])$/i);return null===a?!1:{space:"HEX",hex:parseInt("0x"+a[1].toString()+a[1].toString()+a[2].toString()+a[2].toString()+a[3].toString()+a[3].toString())}},write:f},SIX_CHAR_HEX:{read:function(a){a=a.match(/^#([A-F0-9]{6})$/i);return null===a?!1:{space:"HEX",hex:parseInt("0x"+a[1].toString())}},write:f},CSS_RGB:{read:function(a){a=a.match(/^rgb\(\s*(.+)\s*,\s*(.+)\s*,\s*(.+)\s*\)/);return null===a?!1:{space:"RGB",r:parseFloat(a[1]),g:parseFloat(a[2]),b:parseFloat(a[3])}},write:f},CSS_RGBA:{read:function(a){a=a.match(/^rgba\(\s*(.+)\s*,\s*(.+)\s*,\s*(.+)\s*\,\s*(.+)\s*\)/);return null===a?!1:{space:"RGB",r:parseFloat(a[1]),g:parseFloat(a[2]),b:parseFloat(a[3]),a:parseFloat(a[4])}},write:f}}},{litmus:a.isNumber,conversions:{HEX:{read:function(a){return{space:"HEX",hex:a,conversionName:"HEX"}},write:function(a){return a.hex}}}},{litmus:a.isArray,conversions:{RGB_ARRAY:{read:function(a){return 3!=a.length?!1:{space:"RGB",r:a[0],g:a[1],b:a[2]}},write:function(a){return[a.r,a.g,a.b]}},RGBA_ARRAY:{read:function(a){return 4!=a.length?!1:{space:"RGB",r:a[0],g:a[1],b:a[2],a:a[3]}},write:function(a){return[a.r,a.g,a.b,a.a]}}}},{litmus:a.isObject,conversions:{RGBA_OBJ:{read:function(b){return a.isNumber(b.r)&&a.isNumber(b.g)&&a.isNumber(b.b)&&a.isNumber(b.a)?{space:"RGB",r:b.r,g:b.g,b:b.b,a:b.a}:!1},write:function(a){return{r:a.r,g:a.g,b:a.b,a:a.a}}},RGB_OBJ:{read:function(b){return a.isNumber(b.r)&&a.isNumber(b.g)&&a.isNumber(b.b)?{space:"RGB",r:b.r,g:b.g,b:b.b}:!1},write:function(a){return{r:a.r,g:a.g,b:a.b}}},HSVA_OBJ:{read:function(b){return a.isNumber(b.h)&&a.isNumber(b.s)&&a.isNumber(b.v)&&a.isNumber(b.a)?{space:"HSV",h:b.h,s:b.s,v:b.v,a:b.a}:!1},write:function(a){return{h:a.h,s:a.s,v:a.v,a:a.a}}},HSV_OBJ:{read:function(b){return a.isNumber(b.h)&&a.isNumber(b.s)&&a.isNumber(b.v)?{space:"HSV",h:b.h,s:b.s,v:b.v}:!1},write:function(a){return{h:a.h,s:a.s,v:a.v}}}}}];return function(){e=!1;var b=1\n\n Here\'s the new load parameter for your GUI\'s constructor:\n\n \n\n
    \n\n Automatically save\n values to localStorage on exit.\n\n
    The values saved to localStorage will\n override those passed to dat.GUI\'s constructor. This makes it\n easier to work incrementally, but localStorage is fragile,\n and your friends may not see the same values you do.\n \n
    \n \n
    \n\n',".dg {\n /** Clear list styles */\n /* Auto-place container */\n /* Auto-placed GUI's */\n /* Line items that don't contain folders. */\n /** Folder names */\n /** Hides closed items */\n /** Controller row */\n /** Name-half (left) */\n /** Controller-half (right) */\n /** Controller placement */\n /** Shorter number boxes when slider is present. */\n /** Ensure the entire boolean and function row shows a hand */ }\n .dg ul {\n list-style: none;\n margin: 0;\n padding: 0;\n width: 100%;\n clear: both; }\n .dg.ac {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n height: 0;\n z-index: 0; }\n .dg:not(.ac) .main {\n /** Exclude mains in ac so that we don't hide close button */\n overflow: hidden; }\n .dg.main {\n -webkit-transition: opacity 0.1s linear;\n -o-transition: opacity 0.1s linear;\n -moz-transition: opacity 0.1s linear;\n transition: opacity 0.1s linear; }\n .dg.main.taller-than-window {\n overflow-y: auto; }\n .dg.main.taller-than-window .close-button {\n opacity: 1;\n /* TODO, these are style notes */\n margin-top: -1px;\n border-top: 1px solid #2c2c2c; }\n .dg.main ul.closed .close-button {\n opacity: 1 !important; }\n .dg.main:hover .close-button,\n .dg.main .close-button.drag {\n opacity: 1; }\n .dg.main .close-button {\n /*opacity: 0;*/\n -webkit-transition: opacity 0.1s linear;\n -o-transition: opacity 0.1s linear;\n -moz-transition: opacity 0.1s linear;\n transition: opacity 0.1s linear;\n border: 0;\n position: absolute;\n line-height: 19px;\n height: 20px;\n /* TODO, these are style notes */\n cursor: pointer;\n text-align: center;\n background-color: #000; }\n .dg.main .close-button:hover {\n background-color: #111; }\n .dg.a {\n float: right;\n margin-right: 15px;\n overflow-x: hidden; }\n .dg.a.has-save > ul {\n margin-top: 27px; }\n .dg.a.has-save > ul.closed {\n margin-top: 0; }\n .dg.a .save-row {\n position: fixed;\n top: 0;\n z-index: 1002; }\n .dg li {\n -webkit-transition: height 0.1s ease-out;\n -o-transition: height 0.1s ease-out;\n -moz-transition: height 0.1s ease-out;\n transition: height 0.1s ease-out; }\n .dg li:not(.folder) {\n cursor: auto;\n height: 27px;\n line-height: 27px;\n overflow: hidden;\n padding: 0 4px 0 5px; }\n .dg li.folder {\n padding: 0;\n border-left: 4px solid rgba(0, 0, 0, 0); }\n .dg li.title {\n cursor: pointer;\n margin-left: -4px; }\n .dg .closed li:not(.title),\n .dg .closed ul li,\n .dg .closed ul li > * {\n height: 0;\n overflow: hidden;\n border: 0; }\n .dg .cr {\n clear: both;\n padding-left: 3px;\n height: 27px; }\n .dg .property-name {\n cursor: default;\n float: left;\n clear: left;\n width: 40%;\n overflow: hidden;\n text-overflow: ellipsis; }\n .dg .c {\n float: left;\n width: 60%; }\n .dg .c input[type=text] {\n border: 0;\n margin-top: 4px;\n padding: 3px;\n width: 100%;\n float: right; }\n .dg .has-slider input[type=text] {\n width: 30%;\n /*display: none;*/\n margin-left: 0; }\n .dg .slider {\n float: left;\n width: 66%;\n margin-left: -5px;\n margin-right: 0;\n height: 19px;\n margin-top: 4px; }\n .dg .slider-fg {\n height: 100%; }\n .dg .c input[type=checkbox] {\n margin-top: 9px; }\n .dg .c select {\n margin-top: 5px; }\n .dg .cr.function,\n .dg .cr.function .property-name,\n .dg .cr.function *,\n .dg .cr.boolean,\n .dg .cr.boolean * {\n cursor: pointer; }\n .dg .selector {\n display: none;\n position: absolute;\n margin-left: -9px;\n margin-top: 23px;\n z-index: 10; }\n .dg .c:hover .selector,\n .dg .selector.drag {\n display: block; }\n .dg li.save-row {\n padding: 0; }\n .dg li.save-row .button {\n display: inline-block;\n padding: 0px 6px; }\n .dg.dialogue {\n background-color: #222;\n width: 460px;\n padding: 15px;\n font-size: 13px;\n line-height: 15px; }\n\n/* TODO Separate style and structure */\n#dg-new-constructor {\n padding: 10px;\n color: #222;\n font-family: Monaco, monospace;\n font-size: 10px;\n border: 0;\n resize: none;\n box-shadow: inset 1px 1px 1px #888;\n word-wrap: break-word;\n margin: 12px 0;\n display: block;\n width: 440px;\n overflow-y: scroll;\n height: 100px;\n position: relative; }\n\n#dg-local-explain {\n display: none;\n font-size: 11px;\n line-height: 17px;\n border-radius: 3px;\n background-color: #333;\n padding: 8px;\n margin-top: 10px; }\n #dg-local-explain code {\n font-size: 10px; }\n\n#dat-gui-save-locally {\n display: none; }\n\n/** Main type */\n.dg {\n color: #eee;\n font: 11px 'Lucida Grande', sans-serif;\n text-shadow: 0 -1px 0 #111;\n /** Auto place */\n /* Controller row,
  • */\n /** Controllers */ }\n .dg.main {\n /** Scrollbar */ }\n .dg.main::-webkit-scrollbar {\n width: 5px;\n background: #1a1a1a; }\n .dg.main::-webkit-scrollbar-corner {\n height: 0;\n display: none; }\n .dg.main::-webkit-scrollbar-thumb {\n border-radius: 5px;\n background: #676767; }\n .dg li:not(.folder) {\n background: #1a1a1a;\n border-bottom: 1px solid #2c2c2c; }\n .dg li.save-row {\n line-height: 25px;\n background: #dad5cb;\n border: 0; }\n .dg li.save-row select {\n margin-left: 5px;\n width: 108px; }\n .dg li.save-row .button {\n margin-left: 5px;\n margin-top: 1px;\n border-radius: 2px;\n font-size: 9px;\n line-height: 7px;\n padding: 4px 4px 5px 4px;\n background: #c5bdad;\n color: #fff;\n text-shadow: 0 1px 0 #b0a58f;\n box-shadow: 0 -1px 0 #b0a58f;\n cursor: pointer; }\n .dg li.save-row .button.gears {\n background: #c5bdad url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAANCAYAAAB/9ZQ7AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAQJJREFUeNpiYKAU/P//PwGIC/ApCABiBSAW+I8AClAcgKxQ4T9hoMAEUrxx2QSGN6+egDX+/vWT4e7N82AMYoPAx/evwWoYoSYbACX2s7KxCxzcsezDh3evFoDEBYTEEqycggWAzA9AuUSQQgeYPa9fPv6/YWm/Acx5IPb7ty/fw+QZblw67vDs8R0YHyQhgObx+yAJkBqmG5dPPDh1aPOGR/eugW0G4vlIoTIfyFcA+QekhhHJhPdQxbiAIguMBTQZrPD7108M6roWYDFQiIAAv6Aow/1bFwXgis+f2LUAynwoIaNcz8XNx3Dl7MEJUDGQpx9gtQ8YCueB+D26OECAAQDadt7e46D42QAAAABJRU5ErkJggg==) 2px 1px no-repeat;\n height: 7px;\n width: 8px; }\n .dg li.save-row .button:hover {\n background-color: #bab19e;\n box-shadow: 0 -1px 0 #b0a58f; }\n .dg li.folder {\n border-bottom: 0; }\n .dg li.title {\n padding-left: 16px;\n background: black url(data:image/gif;base64,R0lGODlhBQAFAJEAAP////Pz8////////yH5BAEAAAIALAAAAAAFAAUAAAIIlI+hKgFxoCgAOw==) 6px 10px no-repeat;\n cursor: pointer;\n border-bottom: 1px solid rgba(255, 255, 255, 0.2); }\n .dg .closed li.title {\n background-image: url(data:image/gif;base64,R0lGODlhBQAFAJEAAP////Pz8////////yH5BAEAAAIALAAAAAAFAAUAAAIIlGIWqMCbWAEAOw==); }\n .dg .cr.boolean {\n border-left: 3px solid #806787; }\n .dg .cr.function {\n border-left: 3px solid #e61d5f; }\n .dg .cr.number {\n border-left: 3px solid #2fa1d6; }\n .dg .cr.number input[type=text] {\n color: #2fa1d6; }\n .dg .cr.string {\n border-left: 3px solid #1ed36f; }\n .dg .cr.string input[type=text] {\n color: #1ed36f; }\n .dg .cr.function:hover, .dg .cr.boolean:hover {\n background: #111; }\n .dg .c input[type=text] {\n background: #303030;\n outline: none; }\n .dg .c input[type=text]:hover {\n background: #3c3c3c; }\n .dg .c input[type=text]:focus {\n background: #494949;\n color: #fff; }\n .dg .c .slider {\n background: #303030;\n cursor: ew-resize; }\n .dg .c .slider-fg {\n background: #2fa1d6; }\n .dg .c .slider:hover {\n background: #3c3c3c; }\n .dg .c .slider:hover .slider-fg {\n background: #44abda; }\n",dat.controllers.factory=function(f,a,d,e,c,b,p){return function(q,l,r,n){var u=q[l];if(p.isArray(r)||p.isObject(r))return new f(q,l,r);if(p.isNumber(u))return p.isNumber(r)&&p.isNumber(n)?new d(q,l,r,n):new a(q,l,{min:r,max:n});if(p.isString(u))return new e(q,l);if(p.isFunction(u))return new c(q,l,"");if(p.isBoolean(u))return new b(q,l)}}(dat.controllers.OptionController,dat.controllers.NumberControllerBox,dat.controllers.NumberControllerSlider,dat.controllers.StringController=function(f,a,d){var e=function(c,b){function d(){f.setValue(f.__input.value)}e.superclass.call(this,c,b);var f=this;this.__input=document.createElement("input");this.__input.setAttribute("type","text");a.bind(this.__input,"keyup",d);a.bind(this.__input,"change",d);a.bind(this.__input,"blur",function(){f.__onFinishChange&&f.__onFinishChange.call(f,f.getValue())});a.bind(this.__input,"keydown",function(a){13===a.keyCode&&this.blur()});this.updateDisplay();this.domElement.appendChild(this.__input)};e.superclass=f;d.extend(e.prototype,f.prototype,{updateDisplay:function(){a.isActive(this.__input)||(this.__input.value=this.getValue());return e.superclass.prototype.updateDisplay.call(this)}});return e}(dat.controllers.Controller,dat.dom.dom,dat.utils.common),dat.controllers.FunctionController,dat.controllers.BooleanController,dat.utils.common),dat.controllers.Controller,dat.controllers.BooleanController,dat.controllers.FunctionController,dat.controllers.NumberControllerBox,dat.controllers.NumberControllerSlider,dat.controllers.OptionController,dat.controllers.ColorController=function(f,a,d,e,c){function b(a,b,d,e){a.style.background="";c.each(l,function(c){a.style.cssText+="background: "+c+"linear-gradient("+b+", "+d+" 0%, "+e+" 100%); "})}function p(a){a.style.background="";a.style.cssText+="background: -moz-linear-gradient(top, #ff0000 0%, #ff00ff 17%, #0000ff 34%, #00ffff 50%, #00ff00 67%, #ffff00 84%, #ff0000 100%);";a.style.cssText+="background: -webkit-linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);";a.style.cssText+="background: -o-linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);";a.style.cssText+="background: -ms-linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);";a.style.cssText+="background: linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);"}var q=function(f,n){function u(b){v(b);a.bind(window,"mousemove",v);a.bind(window,"mouseup",l)}function l(){a.unbind(window,"mousemove",v);a.unbind(window,"mouseup",l)}function g(){var a=e(this.value);!1!==a?(t.__color.__state=a,t.setValue(t.__color.toOriginal())):this.value=t.__color.toString()}function k(){a.unbind(window,"mousemove",w);a.unbind(window,"mouseup",k)}function v(b){b.preventDefault();var c=a.getWidth(t.__saturation_field),d=a.getOffset(t.__saturation_field),e=(b.clientX-d.left+document.body.scrollLeft)/c;b=1-(b.clientY-d.top+document.body.scrollTop)/c;1b&&(b=0);1e&&(e=0);t.__color.v=b;t.__color.s=e;t.setValue(t.__color.toOriginal());return!1}function w(b){b.preventDefault();var c=a.getHeight(t.__hue_field),d=a.getOffset(t.__hue_field);b=1-(b.clientY-d.top+document.body.scrollTop)/c;1b&&(b=0);t.__color.h=360*b;t.setValue(t.__color.toOriginal());return!1}q.superclass.call(this,f,n);this.__color=new d(this.getValue());this.__temp=new d(0);var t=this;this.domElement=document.createElement("div");a.makeSelectable(this.domElement,!1);this.__selector=document.createElement("div");this.__selector.className="selector";this.__saturation_field=document.createElement("div");this.__saturation_field.className="saturation-field";this.__field_knob=document.createElement("div");this.__field_knob.className="field-knob";this.__field_knob_border="2px solid ";this.__hue_knob=document.createElement("div");this.__hue_knob.className="hue-knob";this.__hue_field=document.createElement("div");this.__hue_field.className="hue-field";this.__input=document.createElement("input");this.__input.type="text";this.__input_textShadow="0 1px 1px ";a.bind(this.__input,"keydown",function(a){13===a.keyCode&&g.call(this)});a.bind(this.__input,"blur",g);a.bind(this.__selector,"mousedown",function(b){a.addClass(this,"drag").bind(window,"mouseup",function(b){a.removeClass(t.__selector,"drag")})});var y=document.createElement("div");c.extend(this.__selector.style,{width:"122px",height:"102px",padding:"3px",backgroundColor:"#222",boxShadow:"0px 1px 3px rgba(0,0,0,0.3)"});c.extend(this.__field_knob.style,{position:"absolute",width:"12px",height:"12px",border:this.__field_knob_border+(.5>this.__color.v?"#fff":"#000"),boxShadow:"0px 1px 3px rgba(0,0,0,0.5)",borderRadius:"12px",zIndex:1});c.extend(this.__hue_knob.style,{position:"absolute",width:"15px",height:"2px",borderRight:"4px solid #fff",zIndex:1});c.extend(this.__saturation_field.style,{width:"100px",height:"100px",border:"1px solid #555",marginRight:"3px",display:"inline-block",cursor:"pointer"});c.extend(y.style,{width:"100%",height:"100%",background:"none"});b(y,"top","rgba(0,0,0,0)","#000");c.extend(this.__hue_field.style,{width:"15px",height:"100px",display:"inline-block",border:"1px solid #555",cursor:"ns-resize"});p(this.__hue_field);c.extend(this.__input.style,{outline:"none",textAlign:"center",color:"#fff",border:0,fontWeight:"bold",textShadow:this.__input_textShadow+"rgba(0,0,0,0.7)"});a.bind(this.__saturation_field,"mousedown",u);a.bind(this.__field_knob,"mousedown",u);a.bind(this.__hue_field,"mousedown",function(b){w(b);a.bind(window,"mousemove",w);a.bind(window,"mouseup",k)});this.__saturation_field.appendChild(y);this.__selector.appendChild(this.__field_knob);this.__selector.appendChild(this.__saturation_field);this.__selector.appendChild(this.__hue_field);this.__hue_field.appendChild(this.__hue_knob);this.domElement.appendChild(this.__input);this.domElement.appendChild(this.__selector);this.updateDisplay()};q.superclass=f;c.extend(q.prototype,f.prototype,{updateDisplay:function(){var a=e(this.getValue());if(!1!==a){var f=!1;c.each(d.COMPONENTS,function(b){if(!c.isUndefined(a[b])&&!c.isUndefined(this.__color.__state[b])&&a[b]!==this.__color.__state[b])return f=!0,{}},this);f&&c.extend(this.__color.__state,a)}c.extend(this.__temp.__state,this.__color.__state);this.__temp.a=1;var l=.5>this.__color.v||.5a&&(a+=1);return{h:360*a,s:c/b,v:b/255}},rgb_to_hex:function(a,d,e){a=this.hex_with_component(0,2,a);a=this.hex_with_component(a,1,d);return a=this.hex_with_component(a,0,e)},component_from_hex:function(a,d){return a>>8*d&255},hex_with_component:function(a,d,e){return e<<(f=8*d)|a&~(255<=0;i--){var name=referenceBodyNames[i];var info=positionData.referenceBodies[name];var type="currentPosition";if(positionData["tar.type"]=="CelestialBody"&&positionData["tar.name"]==name){type="targetBodyCurrentPosition"}var x=this.buildReferenceBody({name:name,type:type,radius:info.radius,truePosition:this.formatTruePositionVector(info.currentTruePosition),atmosphericRadius:this.datalink.getOrbitalBodyInfo(name).atmosphericRadius,color:this.datalink.getOrbitalBodyInfo(name).color});formattedData["referenceBodies"].push(x)}},formatReferenceBodyPaths:function(positionData,formattedData){referenceBodyNames=Object.keys(positionData.referenceBodies);for(var i=referenceBodyNames.length-1;i>=0;i--){var name=referenceBodyNames[i];var info=positionData.referenceBodies[name];var positionDataKeys=Object.keys(info.positionData);var sortedUniversalTimes=positionDataKeys.map(function(x){return parseFloat(x)}).reverse();var positions=[];for(var j=0;j=0;i--){var name=referenceBodyNames[i];if(name==this.rootReferenceBodyName){continue}var body=positionData.referenceBodies[name];var sortedUniversalTimes=this.sortedUniversalTimes(body.positionData);var renderPoints=[sortedUniversalTimes.first(),sortedUniversalTimes.last(),sortedUniversalTimes[59]];for(var j=0;j0){formattedData.orbitPatches=formattedData.orbitPatches.concat(this.formatOrbitPatches(formattedData,positionData,positionData["tar.o.orbitPatches"],{type:"orbitPatch",parentType:"targetVessel",parentName:positionData["tar.name"]},{linkedPatchType:"orbitPatch"}))}},formatOrbitalPatches:function(positionData,formattedData){formattedData.orbitPatches=this.formatOrbitPatches(formattedData,positionData,positionData["o.orbitPatches"],{type:"orbitPatch",parentType:"vessel",parentName:"current vessel"},{linkedPatchType:"orbitPatch"})},formatManeuverNodes:function(positionData,formattedData){for(var i=0;i=0;i--){var info=formattedData.referenceBodies[i];if(info.color){var color=info.color}else{var color=this.colors[i]}var radius=info.radius*this.referenceBodyScaleFactor;if(info.name=="Sun"){color="yellow"}if(info.type=="currentPosition"){var material=new THREE.MeshBasicMaterial({color:color,wireframe:false})}else if(info.type=="targetBodyCurrentPosition"){var material=new THREE.MeshBasicMaterial({color:this.targetColor,wireframe:false});radius=radius*1.2}else{if(info.name!="Sun"){if(info.linkedPatchType=="maneuverNode"){color=this.orbitPathColors[info.linkedPatchID]}else{color=this.orbitPathColors[info.linkedPatchID]}}var material=new THREE.MeshBasicMaterial({color:color,wireframe:true})}var sphereGeometry=new THREE.SphereGeometry(radius,20,20);var sphere=new THREE.Mesh(sphereGeometry,material);this.setPosition(sphere,info.truePosition);this.group.add(sphere);if(info.atmosphericRadius>0){var customMaterial=new THREE.ShaderMaterial({uniforms:{c:{type:"f",value:1},p:{type:"f",value:1.5},glowColor:{type:"c",value:new THREE.Color("white")},viewVector:{type:"v3",value:this.camera&&this.camera.position||sphere.position}},vertexShader:document.getElementById("vertexShader").textContent,fragmentShader:document.getElementById("fragmentShader").textContent,side:THREE.FrontSide,blending:THREE.AdditiveBlending,transparent:true});var atmoGeometry=new THREE.SphereGeometry((info.radius+info.atmosphericRadius)*this.referenceBodyScaleFactor,20,20);atmo=new THREE.Mesh(atmoGeometry,customMaterial);this.setPosition(atmo,info.truePosition);this.group.add(atmo)}}},buildVesselGeometry:function(formattedData){for(var i=formattedData.vessels.length-1;i>=0;i--){var info=formattedData.vessels[i];if(info.type=="currentVessel"){var materials=[new THREE.MeshBasicMaterial({color:"white",wireframe:false}),new THREE.MeshBasicMaterial({color:"grey",wireframe:true})]}else{var materials=[new THREE.MeshBasicMaterial({color:this.targetColor,wireframe:false}),new THREE.MeshBasicMaterial({color:"grey",wireframe:true})]}var length=this.vehicleLength;var geometry=new THREE.BoxGeometry(length,length,length);var cube=THREE.SceneUtils.createMultiMaterialObject(geometry,materials);if(info.type=="currentVessel"){this.currentVesselGeometry=cube}this.setPosition(cube,info.truePosition);this.group.add(cube)}},buildOrbitPathGeometry:function(formattedData){for(var i=formattedData.orbitPatches.length-1;i>=0;i--){var points=formattedData.orbitPatches[i].truePositions.map(function(x){return this.buildVector(x)}.bind(this));if(formattedData.orbitPatches[i].parentType=="targetVessel"){var color=this.targetColor}else{var color=this.orbitPathColors[i]}var geometry=this.buildCurveGeometryFromPoints(points);var material=new THREE.LineBasicMaterial({color:color,linewidth:3});var spline=new THREE.Line(geometry,material);this.group.add(spline)}},buildManeuverNodeGeometry:function(formattedData){for(var i=formattedData.maneuverNodes.length-1;i>=0;i--){var maneuverNode=formattedData.maneuverNodes[i];for(var j=maneuverNode.orbitPatches.length-1;j>=0;j--){var orbitPatch=maneuverNode.orbitPatches[j];var points=orbitPatch.truePositions.map(function(x){return this.buildVector(x)}.bind(this));var geometry=this.buildCurveGeometryFromPoints(points);geometry.computeBoundingBox();var dashSize=geometry.boundingBox.size().x/Math.ceil(geometry.boundingBox.size().x/this.dashedLineLength);var material=new THREE.LineDashedMaterial({color:this.orbitPathColors[j],dashSize:dashSize,gapSize:dashSize,linewidth:3});var spline=new THREE.Line(geometry,material);this.group.add(spline)}}},buildReferenceBodyOrbitPaths:function(formattedData){for(var i=formattedData.referenceBodyPaths.length-1;i>=0;i--){var points=formattedData.referenceBodyPaths[i].truePositions.map(function(x){return this.buildVector(x)}.bind(this));var material=new THREE.LineBasicMaterial({color:"white",linewidth:formattedData.referenceBodies[0].radius*.1});var geometry=this.buildCurveGeometryFromPoints(points);var spline=new THREE.Line(geometry,material);this.group.add(spline)}},buildDistancesFromRootReferenceBodyPaths:function(formattedData){var colors=["teal","magenta","purple","green","blue","red"];for(var i=formattedData.distancesFromRootReferenceBody.length-1;i>=0;i--){var points=formattedData.distancesFromRootReferenceBody[i].truePositions.map(function(x){return this.buildVector(x)}.bind(this));var material=new THREE.LineBasicMaterial({color:colors[i],linewidth:formattedData.referenceBodies[0].radius*.1});var spline=this.buildSplineWithMaterial(points,material);this.group.add(spline)}},positionCamera:function(){var boundingBox=(new THREE.Box3).setFromObject(this.group);var scaleFactor=Math.max(this.maxLengthInThreeJS/boundingBox.max.x,this.maxLengthInThreeJS/boundingBox.max.y,this.maxLengthInThreeJS/boundingBox.max.z);this.group.scale.set(scaleFactor,scaleFactor,scaleFactor);var boundingBox=(new THREE.Box3).setFromObject(this.group);var vector=this.currentVesselGeometry.position.clone();vector.multiplyScalar(scaleFactor);var axisHelper=new THREE.AxisHelper(this.vehicleLength*3*scaleFactor);axisHelper.position.set(vector.x,vector.y,vector.z);axisHelper.rotation=this.currentVesselGeometry.rotation;this.scene.add(axisHelper);var cameraX=vector.x+this.vehicleLength*this.defaultZoomFactor*scaleFactor;var cameraY=vector.y+this.vehicleLength*this.defaultZoomFactor*scaleFactor;var cameraZ=vector.z+this.vehicleLength*this.defaultZoomFactor*scaleFactor;if(!this.camera){this.camera=new THREE.PerspectiveCamera(75,window.innerWidth/window.innerHeight,.1,Number.MAX_SAFE_INTEGER)}if(!this.controls){this.controls=new THREE.OrbitControls(this.camera,this.renderer.domElement);this.controls.addEventListener("change",function(){this.renderer.render(this.scene,this.camera)}.bind(this))}if(!this.cameraSet){this.controls.target=vector;this.camera.position.set(cameraX,cameraY,cameraZ);this.camera.lookAt(vector);this.cameraSet=true}else{this.controls.target0=vector.clone();this.controls.position0=new THREE.Vector3(cameraX,cameraY,cameraZ)}this.controls.maxDistance=Math.max(Math.abs(boundingBox.min.x)+Math.abs(boundingBox.max.x),Math.abs(boundingBox.min.y)+Math.abs(boundingBox.max.y),Math.abs(boundingBox.min.z)+Math.abs(boundingBox.max.z))*2;this.controls.minDistance=this.vehicleLength*scaleFactor},resetPosition:function(){this.controls.reset()},getMiddle:function(min,max){return min+(Math.abs(min)+Math.abs(max))/2},setPosition:function(mesh,vector){var vector=this.buildVector(vector);mesh.position.x=vector.x;mesh.position.y=vector.y;mesh.position.z=vector.z},buildVector:function(vector){return new THREE.Vector3(vector[0]*this.distanceScaleFactor,vector[1]*this.distanceScaleFactor,vector[2]*this.distanceScaleFactor)},buildCurveGeometryFromPoints:function(points){var curve=new THREE.CatmullRomCurve3(points);var geometry=new THREE.Geometry;geometry.vertices=curve.getPoints(360);geometry.computeLineDistances();return geometry},render:function(formattedData){requestAnimationFrame(function(){this.buildScene();this.buildGeometry(formattedData);this.positionCamera();this.renderer.render(this.scene,this.camera);this.GUIParameters.lastUpdate=TimeFormatters.formatUT(formattedData.currentUniversalTime)}.bind(this))}});(function(root,factory){if(typeof define==="function"&&define.amd){define(factory)}else if(typeof exports==="object"){module.exports=factory()}else{root.ResizeSensor=factory()}})(this,function(){var requestAnimationFrame=window.requestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||function(fn){return window.setTimeout(fn,20)};function forEachElement(elements,callback){var elementsType=Object.prototype.toString.call(elements);var isCollectionTyped="[object Array]"===elementsType||"[object NodeList]"===elementsType||"[object HTMLCollection]"===elementsType||"undefined"!==typeof jQuery&&elements instanceof jQuery||"undefined"!==typeof Elements&&elements instanceof Elements;var i=0,j=elements.length;if(isCollectionTyped){for(;i
  • */\n /** Controllers */ }\n .dg.main {\n /** Scrollbar */ }\n .dg.main::-webkit-scrollbar {\n width: 5px;\n background: #1a1a1a; }\n .dg.main::-webkit-scrollbar-corner {\n height: 0;\n display: none; }\n .dg.main::-webkit-scrollbar-thumb {\n border-radius: 5px;\n background: #676767; }\n .dg li:not(.folder) {\n background: #1a1a1a;\n border-bottom: 1px solid #2c2c2c; }\n .dg li.save-row {\n line-height: 25px;\n background: #dad5cb;\n border: 0; }\n .dg li.save-row select {\n margin-left: 5px;\n width: 108px; }\n .dg li.save-row .button {\n margin-left: 5px;\n margin-top: 1px;\n border-radius: 2px;\n font-size: 9px;\n line-height: 7px;\n padding: 4px 4px 5px 4px;\n background: #c5bdad;\n color: #fff;\n text-shadow: 0 1px 0 #b0a58f;\n box-shadow: 0 -1px 0 #b0a58f;\n cursor: pointer; }\n .dg li.save-row .button.gears {\n background: #c5bdad url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAANCAYAAAB/9ZQ7AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAQJJREFUeNpiYKAU/P//PwGIC/ApCABiBSAW+I8AClAcgKxQ4T9hoMAEUrxx2QSGN6+egDX+/vWT4e7N82AMYoPAx/evwWoYoSYbACX2s7KxCxzcsezDh3evFoDEBYTEEqycggWAzA9AuUSQQgeYPa9fPv6/YWm/Acx5IPb7ty/fw+QZblw67vDs8R0YHyQhgObx+yAJkBqmG5dPPDh1aPOGR/eugW0G4vlIoTIfyFcA+QekhhHJhPdQxbiAIguMBTQZrPD7108M6roWYDFQiIAAv6Aow/1bFwXgis+f2LUAynwoIaNcz8XNx3Dl7MEJUDGQpx9gtQ8YCueB+D26OECAAQDadt7e46D42QAAAABJRU5ErkJggg==) 2px 1px no-repeat;\n height: 7px;\n width: 8px; }\n .dg li.save-row .button:hover {\n background-color: #bab19e;\n box-shadow: 0 -1px 0 #b0a58f; }\n .dg li.folder {\n border-bottom: 0; }\n .dg li.title {\n padding-left: 16px;\n background: black url(data:image/gif;base64,R0lGODlhBQAFAJEAAP////Pz8////////yH5BAEAAAIALAAAAAAFAAUAAAIIlI+hKgFxoCgAOw==) 6px 10px no-repeat;\n cursor: pointer;\n border-bottom: 1px solid rgba(255, 255, 255, 0.2); }\n .dg .closed li.title {\n background-image: url(data:image/gif;base64,R0lGODlhBQAFAJEAAP////Pz8////////yH5BAEAAAIALAAAAAAFAAUAAAIIlGIWqMCbWAEAOw==); }\n .dg .cr.boolean {\n border-left: 3px solid #806787; }\n .dg .cr.function {\n border-left: 3px solid #e61d5f; }\n .dg .cr.number {\n border-left: 3px solid #2fa1d6; }\n .dg .cr.number input[type=text] {\n color: #2fa1d6; }\n .dg .cr.string {\n border-left: 3px solid #1ed36f; }\n .dg .cr.string input[type=text] {\n color: #1ed36f; }\n .dg .cr.function:hover, .dg .cr.boolean:hover {\n background: #111; }\n .dg .c input[type=text] {\n background: #303030;\n outline: none; }\n .dg .c input[type=text]:hover {\n background: #3c3c3c; }\n .dg .c input[type=text]:focus {\n background: #494949;\n color: #fff; }\n .dg .c .slider {\n background: #303030;\n cursor: ew-resize; }\n .dg .c .slider-fg {\n background: #2fa1d6; }\n .dg .c .slider:hover {\n background: #3c3c3c; }\n .dg .c .slider:hover .slider-fg {\n background: #44abda; }\n", +dat.controllers.factory=function(f,a,d,e,c,b,p){return function(q,l,r,n){var u=q[l];if(p.isArray(r)||p.isObject(r))return new f(q,l,r);if(p.isNumber(u))return p.isNumber(r)&&p.isNumber(n)?new d(q,l,r,n):new a(q,l,{min:r,max:n});if(p.isString(u))return new e(q,l);if(p.isFunction(u))return new c(q,l,"");if(p.isBoolean(u))return new b(q,l)}}(dat.controllers.OptionController,dat.controllers.NumberControllerBox,dat.controllers.NumberControllerSlider,dat.controllers.StringController=function(f,a,d){var e= +function(c,b){function d(){f.setValue(f.__input.value)}e.superclass.call(this,c,b);var f=this;this.__input=document.createElement("input");this.__input.setAttribute("type","text");a.bind(this.__input,"keyup",d);a.bind(this.__input,"change",d);a.bind(this.__input,"blur",function(){f.__onFinishChange&&f.__onFinishChange.call(f,f.getValue())});a.bind(this.__input,"keydown",function(a){13===a.keyCode&&this.blur()});this.updateDisplay();this.domElement.appendChild(this.__input)};e.superclass=f;d.extend(e.prototype, +f.prototype,{updateDisplay:function(){a.isActive(this.__input)||(this.__input.value=this.getValue());return e.superclass.prototype.updateDisplay.call(this)}});return e}(dat.controllers.Controller,dat.dom.dom,dat.utils.common),dat.controllers.FunctionController,dat.controllers.BooleanController,dat.utils.common),dat.controllers.Controller,dat.controllers.BooleanController,dat.controllers.FunctionController,dat.controllers.NumberControllerBox,dat.controllers.NumberControllerSlider,dat.controllers.OptionController, +dat.controllers.ColorController=function(f,a,d,e,c){function b(a,b,d,e){a.style.background="";c.each(l,function(c){a.style.cssText+="background: "+c+"linear-gradient("+b+", "+d+" 0%, "+e+" 100%); "})}function p(a){a.style.background="";a.style.cssText+="background: -moz-linear-gradient(top, #ff0000 0%, #ff00ff 17%, #0000ff 34%, #00ffff 50%, #00ff00 67%, #ffff00 84%, #ff0000 100%);";a.style.cssText+="background: -webkit-linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);"; +a.style.cssText+="background: -o-linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);";a.style.cssText+="background: -ms-linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);";a.style.cssText+="background: linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);"}var q=function(f,n){function u(b){v(b);a.bind(window,"mousemove",v);a.bind(window, +"mouseup",l)}function l(){a.unbind(window,"mousemove",v);a.unbind(window,"mouseup",l)}function g(){var a=e(this.value);!1!==a?(t.__color.__state=a,t.setValue(t.__color.toOriginal())):this.value=t.__color.toString()}function k(){a.unbind(window,"mousemove",w);a.unbind(window,"mouseup",k)}function v(b){b.preventDefault();var c=a.getWidth(t.__saturation_field),d=a.getOffset(t.__saturation_field),e=(b.clientX-d.left+document.body.scrollLeft)/c;b=1-(b.clientY-d.top+document.body.scrollTop)/c;1 +b&&(b=0);1e&&(e=0);t.__color.v=b;t.__color.s=e;t.setValue(t.__color.toOriginal());return!1}function w(b){b.preventDefault();var c=a.getHeight(t.__hue_field),d=a.getOffset(t.__hue_field);b=1-(b.clientY-d.top+document.body.scrollTop)/c;1b&&(b=0);t.__color.h=360*b;t.setValue(t.__color.toOriginal());return!1}q.superclass.call(this,f,n);this.__color=new d(this.getValue());this.__temp=new d(0);var t=this;this.domElement=document.createElement("div");a.makeSelectable(this.domElement,!1); +this.__selector=document.createElement("div");this.__selector.className="selector";this.__saturation_field=document.createElement("div");this.__saturation_field.className="saturation-field";this.__field_knob=document.createElement("div");this.__field_knob.className="field-knob";this.__field_knob_border="2px solid ";this.__hue_knob=document.createElement("div");this.__hue_knob.className="hue-knob";this.__hue_field=document.createElement("div");this.__hue_field.className="hue-field";this.__input=document.createElement("input"); +this.__input.type="text";this.__input_textShadow="0 1px 1px ";a.bind(this.__input,"keydown",function(a){13===a.keyCode&&g.call(this)});a.bind(this.__input,"blur",g);a.bind(this.__selector,"mousedown",function(b){a.addClass(this,"drag").bind(window,"mouseup",function(b){a.removeClass(t.__selector,"drag")})});var y=document.createElement("div");c.extend(this.__selector.style,{width:"122px",height:"102px",padding:"3px",backgroundColor:"#222",boxShadow:"0px 1px 3px rgba(0,0,0,0.3)"});c.extend(this.__field_knob.style, +{position:"absolute",width:"12px",height:"12px",border:this.__field_knob_border+(.5>this.__color.v?"#fff":"#000"),boxShadow:"0px 1px 3px rgba(0,0,0,0.5)",borderRadius:"12px",zIndex:1});c.extend(this.__hue_knob.style,{position:"absolute",width:"15px",height:"2px",borderRight:"4px solid #fff",zIndex:1});c.extend(this.__saturation_field.style,{width:"100px",height:"100px",border:"1px solid #555",marginRight:"3px",display:"inline-block",cursor:"pointer"});c.extend(y.style,{width:"100%",height:"100%", +background:"none"});b(y,"top","rgba(0,0,0,0)","#000");c.extend(this.__hue_field.style,{width:"15px",height:"100px",display:"inline-block",border:"1px solid #555",cursor:"ns-resize"});p(this.__hue_field);c.extend(this.__input.style,{outline:"none",textAlign:"center",color:"#fff",border:0,fontWeight:"bold",textShadow:this.__input_textShadow+"rgba(0,0,0,0.7)"});a.bind(this.__saturation_field,"mousedown",u);a.bind(this.__field_knob,"mousedown",u);a.bind(this.__hue_field,"mousedown",function(b){w(b);a.bind(window, +"mousemove",w);a.bind(window,"mouseup",k)});this.__saturation_field.appendChild(y);this.__selector.appendChild(this.__field_knob);this.__selector.appendChild(this.__saturation_field);this.__selector.appendChild(this.__hue_field);this.__hue_field.appendChild(this.__hue_knob);this.domElement.appendChild(this.__input);this.domElement.appendChild(this.__selector);this.updateDisplay()};q.superclass=f;c.extend(q.prototype,f.prototype,{updateDisplay:function(){var a=e(this.getValue());if(!1!==a){var f=!1; +c.each(d.COMPONENTS,function(b){if(!c.isUndefined(a[b])&&!c.isUndefined(this.__color.__state[b])&&a[b]!==this.__color.__state[b])return f=!0,{}},this);f&&c.extend(this.__color.__state,a)}c.extend(this.__temp.__state,this.__color.__state);this.__temp.a=1;var l=.5>this.__color.v||.5a&&(a+=1);return{h:360*a,s:c/b,v:b/255}},rgb_to_hex:function(a,d,e){a=this.hex_with_component(0,2,a);a=this.hex_with_component(a,1,d);return a=this.hex_with_component(a,0,e)},component_from_hex:function(a,d){return a>>8*d&255},hex_with_component:function(a,d,e){return e<<(f=8*d)|a&~(255<= 0; i--) { + var name = referenceBodyNames[i] + var info = positionData.referenceBodies[name] + var type = "currentPosition" + + if(positionData["tar.type"] == "CelestialBody" && positionData["tar.name"] == name){ + type = "targetBodyCurrentPosition" + } + + var x = this.buildReferenceBody({ + name: name, + type: type, + radius: info.radius, + truePosition: this.formatTruePositionVector(info.currentTruePosition), + atmosphericRadius: this.datalink.getOrbitalBodyInfo(name).atmosphericRadius, + color: this.datalink.getOrbitalBodyInfo(name).color + }) + + formattedData["referenceBodies"].push(x) + } + }, + + formatReferenceBodyPaths: function(positionData, formattedData){ + referenceBodyNames = Object.keys(positionData.referenceBodies) + for (var i = referenceBodyNames.length - 1; i >= 0; i--) { + var name = referenceBodyNames[i] + + // if(name == this.rootReferenceBodyName){ continue; } + var info = positionData.referenceBodies[name] + var positionDataKeys = Object.keys(info.positionData) + var sortedUniversalTimes = positionDataKeys.map(function(x){return parseFloat(x)}).reverse() + + var positions = [] + + for (var j = 0; j < sortedUniversalTimes.length; j++) { + var key = sortedUniversalTimes[j].toString() + + positions.push(this.formatTruePositionVector(info.positionData[key].truePosition)) + } + + var x = this.buildReferenceBodyPath({ + referenceBodyName: name, + truePositions: positions + }) + + formattedData.referenceBodyPaths.push(x) + } + }, + + formatDistancesFromRootReferenceBody: function(positionData, formattedData){ + referenceBodyNames = Object.keys(positionData.referenceBodies) + var rootReferenceBody = positionData.referenceBodies[this.rootReferenceBodyName] + + for (var i = referenceBodyNames.length - 1; i >= 0; i--) { + var name = referenceBodyNames[i] + if(name == this.rootReferenceBodyName){ continue; } + + var body = positionData.referenceBodies[name] + var sortedUniversalTimes = this.sortedUniversalTimes(body.positionData) + + var renderPoints = [sortedUniversalTimes.first(),sortedUniversalTimes.last(), sortedUniversalTimes[59]] + + for (var j = 0; j < renderPoints.length; j++) { + var firstUniversalTime = renderPoints[j] + + var projectedPositionOfReferenceBody = this.findProjectedPositionOfReferenceBody(rootReferenceBody, body, firstUniversalTime) + + var positions = [ + rootReferenceBody.currentTruePosition, + projectedPositionOfReferenceBody + ] + + var x = this.buildDistanceFromRootReferenceBody({ + referenceBodyName: name, + truePositions: positions + }) + + formattedData.distancesFromRootReferenceBody.push(x) + } + } + }, + + formatCurrentVessel: function(positionData, formattedData){ + var currentVesselTruePosition = this.truePositionForRelativePosition( + positionData["vesselCurrentPosition"]["relativePosition"], + this.formatTruePositionVector(positionData.referenceBodies[positionData["vesselBody"]].currentTruePosition) + ) + + this.rootReferenceBodyName = positionData["vesselBody"] + + formattedData.vessels.push( + this.buildVessel({ + name: "current vessel", + type: "currentVessel", + truePosition: currentVesselTruePosition, + referenceBodyName: positionData["vesselBody"] + }) + ) + }, + + formatTargetVessel: function(positionData, formattedData){ + if(!positionData['tar.type']){ return } + if(positionData["tar.type"] == "Vessel"){ + var targetCurrentTruePosition = this.truePositionForRelativePosition( + positionData["targetCurrentPosition"]["relativePosition"], + this.formatTruePositionVector(positionData.referenceBodies[positionData["tar.o.orbitingBody"]].currentTruePosition) + ) + + formattedData.vessels.push(this.buildVessel({ + name: positionData["tar.name"], + type: "targetVessel", + truePosition: targetCurrentTruePosition, + referenceBodyName: positionData["tar.o.orbitingBody"] + })) + } + }, + + formatTargetOrbitPatches: function(positionData, formattedData){ + if(!positionData['tar.type']){ return } + if(positionData["tar.o.orbitPatches"].length > 0){ + formattedData.orbitPatches = formattedData.orbitPatches.concat(this.formatOrbitPatches( + formattedData, positionData, positionData["tar.o.orbitPatches"], { + type: "orbitPatch", + parentType: "targetVessel", + parentName: positionData["tar.name"] + },{ linkedPatchType: "orbitPatch" } + )) + } + }, + + formatOrbitalPatches: function(positionData, formattedData){ + formattedData.orbitPatches = this.formatOrbitPatches(formattedData, + positionData, positionData["o.orbitPatches"],{ + type: "orbitPatch", + parentType: "vessel", + parentName: "current vessel" + }, { linkedPatchType: "orbitPatch" } + ) + }, + + formatManeuverNodes: function(positionData, formattedData){ + for (var i = 0; i < positionData["o.maneuverNodes"].length; i++){ + var maneuverNode = positionData["o.maneuverNodes"][i] + var orbitPatches = this.formatOrbitPatches(formattedData, positionData, maneuverNode.orbitPatches, { + type: "maneuverNode", parentType: "vessel", parentName: "current vessel" + }, { linkedPatchType: "maneuverNode" }) + + for (var j = 0; j < maneuverNode.orbitPatches.length; j++) { + var orbitPatch = maneuverNode.orbitPatches[j] + if(orbitPatch.referenceBody != this.rootReferenceBodyName){ + var referenceBody = positionData.referenceBodies[orbitPatch.referenceBody] + var sortedUniversalTimes = this.sortedUniversalTimes(orbitPatch.positionData) + var middleUniversalTime = sortedUniversalTimes[Math.floor((sortedUniversalTimes.length-1)/2.0)] + + var frameOfReferenceVector = this.findProjectedPositionOfReferenceBody( + this.rootReferenceBody(positionData), referenceBody, middleUniversalTime + ) + } + } + + formattedData.maneuverNodes.push(this.buildManeuverNode({ + type: "maneuverNode", + parentType: "vessel", + parentName: "current vessel", + orbitPatches: orbitPatches + })) + } + }, + + findDistanceVectorBetweenBodiesAtTime: function(rootBody, targetBody, universalTime){ + var closestUniversalTime = this.findTruePositionClosestToRelativeTime(universalTime, rootBody.positionData) + + return [ + rootBody.positionData[closestUniversalTime].truePosition, + targetBody.positionData[universalTime].truePosition + ] + }, + + findProjectedPositionOfReferenceBody: function(rootReferenceBody, body, universalTime){ + var distancePoints = this.findDistanceVectorBetweenBodiesAtTime(rootReferenceBody, body, universalTime) + var distanceVector = Math.matrixAdd( + distancePoints[1], + Math.scaleMatrix(-1, distancePoints[0]) + ) + return distanceVector + }, + + truePositionForRelativePosition: function(relativePositionVector, frameOfReferenceVector){ + var transformedRelativePositionVector = [ + relativePositionVector[0], + relativePositionVector[2], + relativePositionVector[1], + ] + + return Math.matrixAdd(frameOfReferenceVector, transformedRelativePositionVector) + }, + + findTruePositionClosestToRelativeTime: function(universalTime, positionData){ + var positionDataKeys = Object.keys(positionData) + var sortedUniversalTimes = positionDataKeys.map(function(x){return parseFloat(x)}).sortBy(function(s) { + return s; + }) + + var closestTime = null + var closestDistance = null + + for (var i = 0; i < sortedUniversalTimes.length; i++) { + var time = sortedUniversalTimes[i] + var distance = Math.abs(universalTime - time) + + if((closestTime == null && closestDistance == null) || distance < closestDistance ){ + closestTime = time + closestDistance = distance + } + } + + return closestTime + }, + + formatOrbitPatches: function(formattedData, positionData, rawOrbitPatches, orbitPatchOptions, referenceBodyOptions){ + var formattedOrbitPatches = [] + var lastPatchesPoint = null + var firstPointInPatch = null + referenceBodyOptions = referenceBodyOptions || {} + + for (var j = 0; j < rawOrbitPatches.length; j++){ + var orbitPatch = rawOrbitPatches[j] + var referenceBody = positionData.referenceBodies[orbitPatch.referenceBody] + var sortedUniversalTimes = this.sortedUniversalTimes(orbitPatch.positionData) + var positions = [] + var distanceFromLastPatchesPoint = null + var middleUniversalTime = sortedUniversalTimes[Math.floor((sortedUniversalTimes.length-1)/2)] + + for (var k = 0; k < sortedUniversalTimes.length; k++){ + var key = sortedUniversalTimes[k].toString() + + if(orbitPatch.referenceBody == this.rootReferenceBodyName || orbitPatch.referenceBody == "Sun"){ + var frameOfReferenceVector = this.formatTruePositionVector(referenceBody.currentTruePosition) + } else{ + var frameOfReferenceVector = this.findProjectedPositionOfReferenceBody( + this.rootReferenceBody(positionData), referenceBody, sortedUniversalTimes[k] + ) + } + + var relativePositionVector = orbitPatch.positionData[key].relativePosition + + var projectedTruePosition = this.truePositionForRelativePosition( + relativePositionVector, frameOfReferenceVector + ) + + if(lastPatchesPoint != null){ + if(k == 0){ + firstPointInPatch = projectedTruePosition + distanceFromLastPatchesPoint = [ + lastPatchesPoint[0] - firstPointInPatch[0], + lastPatchesPoint[1] - firstPointInPatch[1], + lastPatchesPoint[2] - firstPointInPatch[2], + ] + } + + var projectedTruePosition = [ + projectedTruePosition[0] + distanceFromLastPatchesPoint[0], + projectedTruePosition[1] + distanceFromLastPatchesPoint[1], + projectedTruePosition[2] + distanceFromLastPatchesPoint[2], + ] + + if(middleUniversalTime == sortedUniversalTimes[k] && orbitPatch.referenceBody != this.rootReferenceBodyName){ + var positionOfReferenceBody = [ + frameOfReferenceVector[0] + distanceFromLastPatchesPoint[0], + frameOfReferenceVector[1] + distanceFromLastPatchesPoint[1], + frameOfReferenceVector[2] + distanceFromLastPatchesPoint[2], + ] + + formattedData["referenceBodies"].push(this.buildReferenceBody(Object.extend({ + name: orbitPatch.referenceBody, + type: "projected", + radius: referenceBody.radius, + truePosition: positionOfReferenceBody, + linkedPatchID: j, + atmosphericRadius: this.datalink.getOrbitalBodyInfo(orbitPatch.referenceBody).atmosphericRadius + }, referenceBodyOptions))) + } + } + + positions.push(projectedTruePosition) + } + + lastPatchesPoint = positions.last() + + formattedOrbitPatches.push(this.buildOrbitPatch(Object.extend({ + truePositions: positions + }, orbitPatchOptions))) + } + + return formattedOrbitPatches + }, + + formatTruePositionVector: function(vector){ + return vector + }, + + buildReferenceBody: function(options){ + return { + name: options.name, + type: options.type, + radius: options.radius, + truePosition: options.truePosition, + linkedPatchID: options.linkedPatchID, + linkedPatchType: options.linkedPatchType, + atmosphericRadius: options.atmosphericRadius, + color: options.color + } + }, + + buildReferenceBodyPath: function(options){ + return { + referenceBodyName: options.referenceBodyName, + truePositions: options.truePositions + } + }, + + buildVessel: function(options){ + return { + name: options.name, + type: options.type, + truePosition: options.truePosition, + referenceBodyName: options.referenceBodyName + } + }, + + buildOrbitPatch: function(options){ + return { + type: options.type, + parentType: options.parentType, + parentName: options.parentName, + truePositions: options.truePositions + } + }, + + buildManeuverNode: function(options){ + return { + type: options.type, + parentType: options.parentType, + parentName: options.parentName, + orbitPatches: options.orbitPatches + } + }, + + buildDistanceFromRootReferenceBody: function(options){ + return { + referenceBodyName: options.referenceBodyName, + truePositions: options.truePositions + } + }, + + sortedUniversalTimes: function(positionData){ + var positionDataKeys = Object.keys(positionData) + return positionDataKeys.map(function(x){return parseFloat(x)}).sortBy(function(x){ x }).reverse() + }, + + rootReferenceBody: function(positionData){ + return positionData.referenceBodies[this.rootReferenceBodyName] + } +}) +var OrbitalMap = Class.create({ + initialize: function(positionDataFormatter, datalink, containerID){ + this.container = $(containerID) + + this.GUIParameters = { + "reset": this.resetPosition.bind(this), + "fullscreen": this.toggleFullscreen.bind(this), + "lastUpdate": '00:00:00' + } + + this.buildSceneCameraAndRenderer() + this.buildGUI() + + this.distanceScaleFactor = 1 + this.referenceBodyScaleFactor = 1 + this.sunBodyScaleFactor = 1 + this.dashedLineLength = 100000 + this.maxLengthInThreeJS = 2000 + this.vehicleLength = 25000 + this.defaultZoomFactor = 40 + + this.referenceBodyGeometry = {} + + this.colors = ["#b4f489", "#f48e77", "#a4d1f2", "#99ffc6", "#fcc2e7", "#99ffc6", "#9d67e5", "#f49ab2", "#ffcc99", "#b7fca4", "#ff7cd1", "#ffc9de", "#a4f9ac", "#b6ff77", "#80e6f2", "#f9bdbb", "#e79bef", "#85f7d5", "#88c4ea", "#68a9d8"] + this.orbitPathColors = ["orange", "#b4c6f7", "#987cf9", "#6baedb", "#d0f788", "#f774dd", "#9dc3f9", "#edef70", "#f97292", "#adffb6", "#efc9ff", "#bfc0ff", "#ffe3c4", "#8eb2f9", "#83f7b7", "#8cfc8a", "#97f4b5", "#96dff7", "#ffaabe", "#eda371"] + this.targetColor = '#51ff07' + + this.datalink = datalink + this.positionDataFormatter = positionDataFormatter + this.positionDataFormatter.options.onFormat = this.render.bind(this) + }, + + buildGUI: function(){ + var gui = new dat.GUI({ autoPlace: false }); + gui.add( this.GUIParameters, 'reset' ).name('Reset'); + gui.add( this.GUIParameters, 'fullscreen' ).name('ToggleFullscreen'); + gui.add( this.GUIParameters, 'lastUpdate' ).name('Updated').listen(); + + this.container.appendChild(gui.domElement); + }, + + toggleFullscreen: function(){ + if(!THREEx.FullScreen.available()){return} + + if(THREEx.FullScreen.activated()){ + THREEx.FullScreen.cancel() + } else{ + THREEx.FullScreen.request(this.container) + this.renderer.domElement.focus() + } + }, + + resizeRenderer: function(){ + this.renderer.setSize(1, 1) + this.camera.aspect = this.container.clientWidth/this.container.clientHeight + this.camera.updateProjectionMatrix() + this.renderer.setSize(this.container.clientWidth, this.container.clientHeight) + }, + + buildSceneCameraAndRenderer: function(){ + this.renderer = new THREE.WebGLRenderer({antialias: true}) + + this.renderer.setSize( this.container.clientWidth, this.container.clientHeight ) + this.renderer.setClearColor('#3A1604') + this.container.appendChild( this.renderer.domElement ) + + new ResizeSensor(this.container, function() { + if(this.camera){ + this.resizeRenderer() + } + }.bind(this)); + }, + + buildScene: function(){ + this.scene = new THREE.Scene() + }, + + buildGeometry: function(formattedData){ + this.group = new THREE.Group() + this.scene.add(this.group) + + this.buildReferenceBodyGeometry(formattedData) + this.buildVesselGeometry(formattedData) + this.buildOrbitPathGeometry(formattedData) + this.buildManeuverNodeGeometry(formattedData) + // this.buildReferenceBodyOrbitPaths(formattedData) + // this.buildDistancesFromRootReferenceBodyPaths(formattedData) + }, + + buildReferenceBodyGeometry: function(formattedData){ + var i = 0 + for (var i = formattedData.referenceBodies.length - 1; i >= 0; i--) { + var info = formattedData.referenceBodies[i] + + //render the sun last, and separately + // if(info.name == "Sun"){ continue; } + + if(info.color){ + var color = info.color + } else { + var color = this.colors[i] + } + var radius = info.radius * this.referenceBodyScaleFactor + + if(info.name == "Sun"){ color = 'yellow' } + + if(info.type == "currentPosition"){ + var material = new THREE.MeshBasicMaterial( { color: color, 'wireframe': false } ) + } else if(info.type == "targetBodyCurrentPosition"){ + var material = new THREE.MeshBasicMaterial( { color: this.targetColor, 'wireframe': false } ) + radius = radius * 1.2 + } else{ + if(info.name != "Sun"){ + if(info.linkedPatchType == "maneuverNode"){ + color = this.orbitPathColors[info.linkedPatchID] + } else{ + color = this.orbitPathColors[info.linkedPatchID] + } + } + + var material = new THREE.MeshBasicMaterial( { color: color, 'wireframe': true } ) + } + + var sphereGeometry = new THREE.SphereGeometry(radius, 20, 20) + var sphere = new THREE.Mesh( sphereGeometry, material ) + this.setPosition(sphere, info.truePosition) + this.group.add(sphere) + + if(info.atmosphericRadius > 0){ + // Now to add the atmospheric glow + var customMaterial = new THREE.ShaderMaterial( + { + uniforms: + { + "c": { type: "f", value: 1 }, + "p": { type: "f", value: 1.5 }, + glowColor: { type: "c", value: new THREE.Color('white') }, + viewVector: { type: "v3", value: (this.camera && this.camera.position) || sphere.position } + }, + vertexShader: document.getElementById( 'vertexShader' ).textContent, + fragmentShader: document.getElementById( 'fragmentShader' ).textContent, + side: THREE.FrontSide, + blending: THREE.AdditiveBlending, + transparent: true + } ); + + var atmoGeometry = new THREE.SphereGeometry((info.radius + info.atmosphericRadius) * this.referenceBodyScaleFactor, 20, 20) + atmo = new THREE.Mesh( atmoGeometry, customMaterial ); + this.setPosition(atmo, info.truePosition) + this.group.add( atmo ); + } + } + }, + + buildVesselGeometry: function(formattedData){ + for (var i = formattedData.vessels.length - 1; i >= 0; i--) { + var info = formattedData.vessels[i] + + if(info.type == "currentVessel"){ + var materials = [ + new THREE.MeshBasicMaterial( { color: 'white', 'wireframe': false } ), + new THREE.MeshBasicMaterial( { color: 'grey', 'wireframe': true } ) + ]; + } else{ + var materials = [ + new THREE.MeshBasicMaterial( { color: this.targetColor, 'wireframe': false } ), + new THREE.MeshBasicMaterial( { color: 'grey', 'wireframe': true } ) + ]; + } + + var length = this.vehicleLength + + var geometry = new THREE.BoxGeometry( length, length, length) + var cube = THREE.SceneUtils.createMultiMaterialObject( geometry, materials ); + + if(info.type == "currentVessel"){ + this.currentVesselGeometry = cube + } + + this.setPosition(cube, info.truePosition) + this.group.add(cube) + } + }, + + buildOrbitPathGeometry: function(formattedData){ + for (var i = formattedData.orbitPatches.length - 1; i >= 0; i--) { + var points = formattedData.orbitPatches[i].truePositions.map(function(x){ return this.buildVector(x) }.bind(this)) + + if(formattedData.orbitPatches[i].parentType == "targetVessel"){ + var color = this.targetColor + } else{ + var color = this.orbitPathColors[i] + } + + var geometry = this.buildCurveGeometryFromPoints(points) + var material = new THREE.LineBasicMaterial({ + color: color, + linewidth: 3 + }) + + var spline = new THREE.Line( geometry, material ) + + this.group.add(spline) + } + }, + + buildManeuverNodeGeometry: function(formattedData){ + for (var i = formattedData.maneuverNodes.length - 1; i >= 0; i--) { + var maneuverNode = formattedData.maneuverNodes[i] + + for (var j = maneuverNode.orbitPatches.length - 1; j >= 0; j--) { + var orbitPatch = maneuverNode.orbitPatches[j] + var points = orbitPatch.truePositions.map(function(x){ return this.buildVector(x) }.bind(this)) + + var geometry = this.buildCurveGeometryFromPoints(points) + + geometry.computeBoundingBox() + var dashSize = geometry.boundingBox.size().x/Math.ceil(geometry.boundingBox.size().x/this.dashedLineLength) + + var material = new THREE.LineDashedMaterial({ + color: this.orbitPathColors[j], + dashSize: dashSize, + gapSize: dashSize, + linewidth: 3 + }) + + var spline = new THREE.Line( geometry, material ) + + this.group.add(spline) + } + } + }, + + buildReferenceBodyOrbitPaths: function(formattedData){ + for (var i = formattedData.referenceBodyPaths.length - 1; i >= 0; i--) { + var points = formattedData.referenceBodyPaths[i].truePositions.map(function(x){ return this.buildVector(x) }.bind(this)) + var material = new THREE.LineBasicMaterial( { color : 'white', linewidth: formattedData.referenceBodies[0].radius * .1 } ); + + var geometry = this.buildCurveGeometryFromPoints(points) + + var spline = new THREE.Line( geometry, material ) + + this.group.add(spline) + } + }, + + buildDistancesFromRootReferenceBodyPaths: function(formattedData){ + var colors = ['teal', 'magenta','purple', 'green', 'blue', 'red'] + + for (var i = formattedData.distancesFromRootReferenceBody.length - 1; i >= 0; i--) { + var points = formattedData.distancesFromRootReferenceBody[i].truePositions.map(function(x){ return this.buildVector(x) }.bind(this)) + var material = new THREE.LineBasicMaterial( { color : colors[i], linewidth: formattedData.referenceBodies[0].radius * .1 } ); + + var spline = this.buildSplineWithMaterial(points, material) + + this.group.add(spline) + } + }, + + positionCamera: function(){ + var boundingBox = new THREE.Box3().setFromObject(this.group) + var scaleFactor = Math.max( + (this.maxLengthInThreeJS/boundingBox.max.x), + (this.maxLengthInThreeJS/boundingBox.max.y), + (this.maxLengthInThreeJS/boundingBox.max.z) + ) + + this.group.scale.set(scaleFactor, scaleFactor, scaleFactor) + var boundingBox = new THREE.Box3().setFromObject(this.group) + + // var hex = 0xff0000; + // var bbox = new THREE.BoundingBoxHelper( this.group, hex ); + // bbox.update(); + // this.scene.add( bbox ); + + var vector = this.currentVesselGeometry.position.clone() + vector.multiplyScalar(scaleFactor) + var axisHelper = new THREE.AxisHelper(this.vehicleLength * 3 * scaleFactor); + axisHelper.position.set(vector.x, vector.y, vector.z) + axisHelper.rotation = this.currentVesselGeometry.rotation + + this.scene.add( axisHelper ); + + var cameraX = vector.x + ((this.vehicleLength * this.defaultZoomFactor) * scaleFactor) + var cameraY = vector.y + ((this.vehicleLength * this.defaultZoomFactor) * scaleFactor) + var cameraZ = vector.z + ((this.vehicleLength * this.defaultZoomFactor) * scaleFactor) + + if(!this.camera){ + this.camera = new THREE.PerspectiveCamera( 75, window.innerWidth/window.innerHeight, 0.1, Number.MAX_SAFE_INTEGER) + } + + if(!this.controls){ + this.controls = new THREE.OrbitControls( this.camera, this.renderer.domElement); + this.controls.addEventListener( 'change', function(){this.renderer.render(this.scene, this.camera)}.bind(this) ); // add this only if there is no animation loop (requestAnimationFrame) + } + + if(!this.cameraSet){ + this.controls.target = vector + this.camera.position.set(cameraX, cameraY, cameraZ) + this.camera.lookAt(vector) + // this.controls.rotate.x = -Math.PI/2 + this.cameraSet = true + } else{ + this.controls.target0 = vector.clone() + this.controls.position0 = new THREE.Vector3(cameraX, cameraY, cameraZ) + } + + this.controls.maxDistance = Math.max( + (Math.abs(boundingBox.min.x) + Math.abs(boundingBox.max.x)), + (Math.abs(boundingBox.min.y) + Math.abs(boundingBox.max.y)), + (Math.abs(boundingBox.min.z) + Math.abs(boundingBox.max.z)) + ) * 2 + this.controls.minDistance = this.vehicleLength * scaleFactor + }, + + resetPosition: function(){ + this.controls.reset() + }, + + getMiddle: function(min, max){ + return min + ((Math.abs(min) + Math.abs(max))/2.0) + }, + + setPosition: function(mesh, vector){ + var vector = this.buildVector(vector) + mesh.position.x = vector.x + mesh.position.y = vector.y + mesh.position.z = vector.z + }, + + buildVector: function(vector){ + return new THREE.Vector3( vector[0] * this.distanceScaleFactor, vector[1] * this.distanceScaleFactor, vector[2] * this.distanceScaleFactor ); + }, + + buildCurveGeometryFromPoints: function(points){ + var curve = new THREE.CatmullRomCurve3(points); + var geometry = new THREE.Geometry() + geometry.vertices = curve.getPoints( 360 ); + geometry.computeLineDistances() + return geometry + }, + + render: function (formattedData) { + requestAnimationFrame( function(){ + this.buildScene() + this.buildGeometry(formattedData) + this.positionCamera() + this.renderer.render(this.scene, this.camera) + this.GUIParameters.lastUpdate = TimeFormatters.formatUT(formattedData.currentUniversalTime) + }.bind(this)) + } +}) +/** + * Copyright Marc J. Schmidt. See the LICENSE file at the top-level + * directory of this distribution and at + * https://github.com/marcj/css-element-queries/blob/master/LICENSE. + */ +; +(function (root, factory) { + if (typeof define === "function" && define.amd) { + define(factory); + } else if (typeof exports === "object") { + module.exports = factory(); + } else { + root.ResizeSensor = factory(); + } +}(this, function () { + + // Only used for the dirty checking, so the event callback count is limted to max 1 call per fps per sensor. + // In combination with the event based resize sensor this saves cpu time, because the sensor is too fast and + // would generate too many unnecessary events. + var requestAnimationFrame = window.requestAnimationFrame || + window.mozRequestAnimationFrame || + window.webkitRequestAnimationFrame || + function (fn) { + return window.setTimeout(fn, 20); + }; + + /** + * Iterate over each of the provided element(s). + * + * @param {HTMLElement|HTMLElement[]} elements + * @param {Function} callback + */ + function forEachElement(elements, callback){ + var elementsType = Object.prototype.toString.call(elements); + var isCollectionTyped = ('[object Array]' === elementsType + || ('[object NodeList]' === elementsType) + || ('[object HTMLCollection]' === elementsType) + || ('undefined' !== typeof jQuery && elements instanceof jQuery) //jquery + || ('undefined' !== typeof Elements && elements instanceof Elements) //mootools + ); + var i = 0, j = elements.length; + if (isCollectionTyped) { + for (; i < j; i++) { + callback(elements[i]); + } + } else { + callback(elements); + } + } + + /** + * Class for dimension change detection. + * + * @param {Element|Element[]|Elements|jQuery} element + * @param {Function} callback + * + * @constructor + */ + var ResizeSensor = function(element, callback) { + /** + * + * @constructor + */ + function EventQueue() { + var q = []; + this.add = function(ev) { + q.push(ev); + }; + + var i, j; + this.call = function() { + for (i = 0, j = q.length; i < j; i++) { + q[i].call(); + } + }; + + this.remove = function(ev) { + var newQueue = []; + for(i = 0, j = q.length; i < j; i++) { + if(q[i] !== ev) newQueue.push(q[i]); + } + q = newQueue; + } + + this.length = function() { + return q.length; + } + } + + /** + * @param {HTMLElement} element + * @param {String} prop + * @returns {String|Number} + */ + function getComputedStyle(element, prop) { + if (element.currentStyle) { + return element.currentStyle[prop]; + } else if (window.getComputedStyle) { + return window.getComputedStyle(element, null).getPropertyValue(prop); + } else { + return element.style[prop]; + } + } + + /** + * + * @param {HTMLElement} element + * @param {Function} resized + */ + function attachResizeEvent(element, resized) { + if (!element.resizedAttached) { + element.resizedAttached = new EventQueue(); + element.resizedAttached.add(resized); + } else if (element.resizedAttached) { + element.resizedAttached.add(resized); + return; + } + + element.resizeSensor = document.createElement('div'); + element.resizeSensor.className = 'resize-sensor'; + var style = 'position: absolute; left: 0; top: 0; right: 0; bottom: 0; overflow: hidden; z-index: -1; visibility: hidden;'; + var styleChild = 'position: absolute; left: 0; top: 0; transition: 0s;'; + + element.resizeSensor.style.cssText = style; + element.resizeSensor.innerHTML = + '
    ' + + '
    ' + + '
    ' + + '
    ' + + '
    ' + + '
    '; + element.appendChild(element.resizeSensor); + + if (getComputedStyle(element, 'position') == 'static') { + element.style.position = 'relative'; + } + + var expand = element.resizeSensor.childNodes[0]; + var expandChild = expand.childNodes[0]; + var shrink = element.resizeSensor.childNodes[1]; + + var reset = function() { + expandChild.style.width = 100000 + 'px'; + expandChild.style.height = 100000 + 'px'; + + expand.scrollLeft = 100000; + expand.scrollTop = 100000; + + shrink.scrollLeft = 100000; + shrink.scrollTop = 100000; + }; + + reset(); + var dirty = false; + + var dirtyChecking = function() { + if (!element.resizedAttached) return; + + if (dirty) { + element.resizedAttached.call(); + dirty = false; + } + + requestAnimationFrame(dirtyChecking); + }; + + requestAnimationFrame(dirtyChecking); + var lastWidth, lastHeight; + var cachedWidth, cachedHeight; //useful to not query offsetWidth twice + + var onScroll = function() { + if ((cachedWidth = element.offsetWidth) != lastWidth || (cachedHeight = element.offsetHeight) != lastHeight) { + dirty = true; + + lastWidth = cachedWidth; + lastHeight = cachedHeight; + } + reset(); + }; + + var addEvent = function(el, name, cb) { + if (el.attachEvent) { + el.attachEvent('on' + name, cb); + } else { + el.addEventListener(name, cb); + } + }; + + addEvent(expand, 'scroll', onScroll); + addEvent(shrink, 'scroll', onScroll); + } + + forEachElement(element, function(elem){ + attachResizeEvent(elem, callback); + }); + + this.detach = function(ev) { + ResizeSensor.detach(element, ev); + }; + }; + + ResizeSensor.detach = function(element, ev) { + forEachElement(element, function(elem){ + if(elem.resizedAttached && typeof ev == "function"){ + elem.resizedAttached.remove(ev); + if(elem.resizedAttached.length()) return; + } + if (elem.resizeSensor) { + elem.removeChild(elem.resizeSensor); + delete elem.resizeSensor; + delete elem.resizedAttached; + } + }); + }; + + return ResizeSensor; + +})); + +var CameraFeed = Class.create({ + initialize: function(datalink, options){ + this.datalink = datalink + + this.options = options || {} + this.cameraData = [] + this.selectedCameraURL = "" + this.selectedCameraName = "" + this.initializeDatalink() + this.initializeObservers() + this.initializeImageRefresh() + }, + + initializeDatalink: function(){ + setInterval(function(){ + this.datalink.getCameraList(this.updateCameraList.bind(this)) + }.bind(this), 1000); + }, + + initializeImageRefresh: function(){ + setInterval(function(){ + if(!this.hasSelectedCamera()){ return } + this.options.cameraImage.src = this.options.cameraImage.getAttribute('data-base-url') + "?" + Math.floor((Math.random() * 100) + 1) + }.bind(this), 1000); + }, + + initializeObservers: function(){ + this.options.cameraList.observe('click', function(event){ + var clickedButton = event.findElement('button'); + if (clickedButton) { + this.selectCameraAndHideList( + clickedButton.getAttribute("data-image-name"), + clickedButton.getAttribute("data-image-url") + ) + } + }.bind(this)) + + this.options.showCameraList.observe('click', this.toggleCameraList.bind(this)) + }, + + hasSelectedCamera: function(){ + return this.selectedCameraURL != "" + }, + + setSelectedCamera: function(name, image_url){ + this.selectedCameraName = name + this.selectedCameraURL = image_url + this.options.cameraName.update(this.selectedCameraName) + this.options.cameraImage.setAttribute('src', this.selectedCameraURL) + this.options.cameraImage.setAttribute('data-base-url',this.selectedCameraURL) + }, + + selectCameraAndHideList: function(name, image_url){ + this.setSelectedCamera(name, image_url) + this.hideCameraList() + }, + + hideCameraList: function(){ + this.options.cameraListContainer.addClassName('hidden') + }, + + showCameraList: function(){ + this.options.cameraListContainer.removeClassName('hidden') + }, + + toggleCameraList: function(){ + this.options.cameraListContainer.toggleClassName('hidden') + }, + + updateCameraList: function(data){ + // console.log(data) + var sortedData = data.sort(function(a,b){ + //the flight camera should always be on top + if(a.name == "TelemachusFlightCamera"){ + return -1 + } + + //otherwise, compare normally + return a.name.localeCompare(b.name); + }); + + //clear existing child nodes in camera list + while (this.options.cameraList.hasChildNodes()){ + this.options.cameraList.removeChild(this.options.cameraList.lastChild); + } + + for (var i = 0; i < sortedData.length; i++) { + var cameraObject = sortedData[i] + + if(!this.hasSelectedCamera()){ + this.setSelectedCamera(cameraObject.name, cameraObject.url) + } + + var docFragment = document.createDocumentFragment() + var li = document.createElement('li') + var selectCamera = document.createElement("button") + selectCamera.setAttribute('data-image-name', cameraObject.name) + selectCamera.setAttribute('data-image-url', cameraObject.url) + if(this.selectedCameraURL == cameraObject.url){ + selectCamera.addClassName("selected") + } + selectCamera.update(cameraObject.name) + + li.appendChild(selectCamera) + docFragment.appendChild(li) + this.options.cameraList.appendChild(docFragment) + } + + this.cameraData = sortedData + } +}) \ No newline at end of file diff --git a/public/assets/navigation.js b/public/assets/navigation.js index 368203d..88573c9 100644 --- a/public/assets/navigation.js +++ b/public/assets/navigation.js @@ -1,48 +1,12384 @@ -Math.toDegrees=function(angleInRadians){return angleInRadians*(180/Math.PI)};Math.toRadians=function(angleInDegrees){return angleInDegrees*(Math.PI/180)};Math.crossProduct=function(x,y){[x[1]*y[2]-x[2]*y[1],x[2]*y[0]-x[0]*y[2],x[0]*y[1]-x[1]*y[0]]};Math.sign=Math.sign||function(x){x=+x;if(x===0||isNaN(x)){return x}return x>0?1:-1};Math.cosh=Math.cosh||function(x){return(Math.exp(x)+Math.exp(-x))/2};Math.sinh=Math.sinh||function(x){return(Math.exp(x)-Math.exp(-x))/2};Math.matrixAdd=Math.matrixAdd||function(){var arrays=arguments,results=[],count=arrays[0].length,L=arrays.length,sum,next=0,i;while(next-1?e(a,b,c):b.indexOf("%")>-1?f(a,b,c):b.indexOf(":")>-1?g(a,b):i(a._value,b,c)}function d(a,b){var c,d,e,f,g,i=b,j=["KB","MB","GB","TB","PB","EB","ZB","YB"],k=!1;if(b.indexOf(":")>-1)a._value=h(b);else if(b===q)a._value=0;else{for("."!==o[p].delimiters.decimal&&(b=b.replace(/\./g,"").replace(o[p].delimiters.decimal,".")),c=new RegExp("[^a-zA-Z]"+o[p].abbreviations.thousand+"(?:\\)|(\\"+o[p].currency.symbol+")?(?:\\))?)?$"),d=new RegExp("[^a-zA-Z]"+o[p].abbreviations.million+"(?:\\)|(\\"+o[p].currency.symbol+")?(?:\\))?)?$"),e=new RegExp("[^a-zA-Z]"+o[p].abbreviations.billion+"(?:\\)|(\\"+o[p].currency.symbol+")?(?:\\))?)?$"),f=new RegExp("[^a-zA-Z]"+o[p].abbreviations.trillion+"(?:\\)|(\\"+o[p].currency.symbol+")?(?:\\))?)?$"),g=0;g<=j.length&&!(k=b.indexOf(j[g])>-1?Math.pow(1024,g+1):!1);g++);a._value=(k?k:1)*(i.match(c)?Math.pow(10,3):1)*(i.match(d)?Math.pow(10,6):1)*(i.match(e)?Math.pow(10,9):1)*(i.match(f)?Math.pow(10,12):1)*(b.indexOf("%")>-1?.01:1)*((b.split("-").length+Math.min(b.split("(").length-1,b.split(")").length-1))%2?1:-1)*Number(b.replace(/[^0-9\.]+/g,"")),a._value=k?Math.ceil(a._value):a._value}return a._value}function e(a,b,c){var d,e,f=b.indexOf("$"),g=b.indexOf("("),h=b.indexOf("-"),j="";return b.indexOf(" $")>-1?(j=" ",b=b.replace(" $","")):b.indexOf("$ ")>-1?(j=" ",b=b.replace("$ ","")):b=b.replace("$",""),e=i(a._value,b,c),1>=f?e.indexOf("(")>-1||e.indexOf("-")>-1?(e=e.split(""),d=1,(g>f||h>f)&&(d=0),e.splice(d,0,o[p].currency.symbol+j),e=e.join("")):e=o[p].currency.symbol+j+e:e.indexOf(")")>-1?(e=e.split(""),e.splice(-1,0,j+o[p].currency.symbol),e=e.join("")):e=e+j+o[p].currency.symbol,e}function f(a,b,c){var d,e="",f=100*a._value;return b.indexOf(" %")>-1?(e=" ",b=b.replace(" %","")):b=b.replace("%",""),d=i(f,b,c),d.indexOf(")")>-1?(d=d.split(""),d.splice(-1,0,e+"%"),d=d.join("")):d=d+e+"%",d}function g(a){var b=Math.floor(a._value/60/60),c=Math.floor((a._value-60*b*60)/60),d=Math.round(a._value-60*b*60-60*c);return b+":"+(10>c?"0"+c:c)+":"+(10>d?"0"+d:d)}function h(a){var b=a.split(":"),c=0;return 3===b.length?(c+=60*Number(b[0])*60,c+=60*Number(b[1]),c+=Number(b[2])):2===b.length&&(c+=60*Number(b[0]),c+=Number(b[1])),Number(c)}function i(a,c,d){var e,f,g,h,i,j,k=!1,l=!1,m=!1,n="",r=!1,s=!1,t=!1,u=!1,v=!1,w="",x="",y=Math.abs(a),z=["B","KB","MB","GB","TB","PB","EB","ZB","YB"],A="",B=!1;if(0===a&&null!==q)return q;if(c.indexOf("(")>-1?(k=!0,c=c.slice(1,-1)):c.indexOf("+")>-1&&(l=!0,c=c.replace(/\+/g,"")),c.indexOf("a")>-1&&(r=c.indexOf("aK")>=0,s=c.indexOf("aM")>=0,t=c.indexOf("aB")>=0,u=c.indexOf("aT")>=0,v=r||s||t||u,c.indexOf(" a")>-1?(n=" ",c=c.replace(" a","")):c=c.replace("a",""),y>=Math.pow(10,12)&&!v||u?(n+=o[p].abbreviations.trillion,a/=Math.pow(10,12)):y=Math.pow(10,9)&&!v||t?(n+=o[p].abbreviations.billion,a/=Math.pow(10,9)):y=Math.pow(10,6)&&!v||s?(n+=o[p].abbreviations.million,a/=Math.pow(10,6)):(y=Math.pow(10,3)&&!v||r)&&(n+=o[p].abbreviations.thousand,a/=Math.pow(10,3))),c.indexOf("b")>-1)for(c.indexOf(" b")>-1?(w=" ",c=c.replace(" b","")):c=c.replace("b",""),g=0;g<=z.length;g++)if(e=Math.pow(1024,g),f=Math.pow(1024,g+1),a>=e&&f>a){w+=z[g],e>0&&(a/=e);break}return c.indexOf("o")>-1&&(c.indexOf(" o")>-1?(x=" ",c=c.replace(" o","")):c=c.replace("o",""),x+=o[p].ordinal(a)),c.indexOf("[.]")>-1&&(m=!0,c=c.replace("[.]",".")),h=a.toString().split(".")[0],i=c.split(".")[1],j=c.indexOf(","),i?(i.indexOf("[")>-1?(i=i.replace("]",""),i=i.split("["),A=b(a,i[0].length+i[1].length,d,i[1].length)):A=b(a,i.length,d),h=A.split(".")[0],A=A.split(".")[1].length?o[p].delimiters.decimal+A.split(".")[1]:"",m&&0===Number(A.slice(1))&&(A="")):h=b(a,null,d),h.indexOf("-")>-1&&(h=h.slice(1),B=!0),j>-1&&(h=h.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g,"$1"+o[p].delimiters.thousands)),0===c.indexOf(".")&&(h=""),(k&&B?"(":"")+(!k&&B?"-":"")+(!B&&l?"+":"")+h+A+(x?x:"")+(n?n:"")+(w?w:"")+(k&&B?")":"")}function j(a,b){o[a]=b}function k(a){var b=a.toString().split(".");return b.length<2?1:Math.pow(10,b[1].length)}function l(){var a=Array.prototype.slice.call(arguments);return a.reduce(function(a,b){var c=k(a),d=k(b);return c>d?c:d},-1/0)}var m,n="1.5.3",o={},p="en",q=null,r="0,0",s="undefined"!=typeof module&&module.exports;m=function(b){return m.isNumeral(b)?b=b.value():0===b||"undefined"==typeof b?b=0:Number(b)||(b=m.fn.unformat(b)),new a(Number(b))},m.version=n,m.isNumeral=function(b){return b instanceof a},m.language=function(a,b){if(!a)return p;if(a&&!b){if(!o[a])throw new Error("Unknown language : "+a);p=a}return(b||!o[a])&&j(a,b),m},m.languageData=function(a){if(!a)return o[p];if(!o[a])throw new Error("Unknown language : "+a);return o[a]},m.language("en",{delimiters:{thousands:",",decimal:"."},abbreviations:{thousand:"k",million:"m",billion:"b",trillion:"t"},ordinal:function(a){var b=a%10;return 1===~~(a%100/10)?"th":1===b?"st":2===b?"nd":3===b?"rd":"th"},currency:{symbol:"$"}}),m.zeroFormat=function(a){q="string"==typeof a?a:null},m.defaultFormat=function(a){r="string"==typeof a?a:"0.0"},"function"!=typeof Array.prototype.reduce&&(Array.prototype.reduce=function(a,b){"use strict";if(null===this||"undefined"==typeof this)throw new TypeError("Array.prototype.reduce called on null or undefined");if("function"!=typeof a)throw new TypeError(a+" is not a function");var c,d,e=this.length>>>0,f=!1;for(1c;++c)this.hasOwnProperty(c)&&(f?d=a(d,this[c],c,this):(d=this[c],f=!0));if(!f)throw new TypeError("Reduce of empty array with no initial value");return d}),m.fn=a.prototype={clone:function(){return m(this)},format:function(a,b){return c(this,a?a:r,void 0!==b?b:Math.round)},unformat:function(a){return"[object Number]"===Object.prototype.toString.call(a)?a:d(this,a?a:r)},value:function(){return this._value},valueOf:function(){return this._value},set:function(a){return this._value=Number(a),this},add:function(a){function b(a,b){return a+c*b}var c=l.call(null,this._value,a);return this._value=[this._value,a].reduce(b,0)/c,this},subtract:function(a){function b(a,b){return a-c*b}var c=l.call(null,this._value,a);return this._value=[a].reduce(b,this._value*c)/c,this},multiply:function(a){function b(a,b){var c=l(a,b);return a*c*b*c/(c*c)}return this._value=[this._value,a].reduce(b,1),this},divide:function(a){function b(a,b){var c=l(a,b);return a*c/(b*c)}return this._value=[this._value,a].reduce(b),this},difference:function(a){return Math.abs(m(this._value).subtract(a).value())}},s&&(module.exports=m),"undefined"==typeof ender&&(this.numeral=m),"function"==typeof define&&define.amd&&define([],function(){return m})}).call(this);var TimeFormatters={formatUT:function(t){var day,year;if(t==null){t=0}year=(t/(365*24*3600)|0)+1;t%=365*24*3600;day=(t/(24*3600)|0)+1;t%=24*3600;return"Year "+year+", Day "+day+", "+this.hourMinSec(t)+" UT"},formatMET:function(t){var result;if(t==null){t=0}result="T+";if(t>=365*24*3600){result+=(t/(365*24*3600)|0)+":";t%=365*24*3600;if(t<24*3600){result+="0:"}}if(t>=24*3600){result+=(t/(24*3600)|0)+":"}t%=24*3600;return result+this.hourMinSec(t)+" MET"},hourMinSec:function(t){var hour,min,sec;if(t==null){t=0}hour=t/3600|0;if(hour<10){hour="0"+hour}t%=3600;min=t/60|0;if(min<10){min="0"+min}sec=(t%60|0).toFixed();if(sec<10){sec="0"+sec}return""+hour+":"+min+":"+sec},durationString:function(t){var result;if(t==null){t=0}result=t<0?"-":"";t=Math.abs(t);if(t>=365*24*3600){result+=(t/(365*24*3600)|0)+" years ";t%=365*24*3600;if(t<24*3600){result+="0 days "}}if(t>=24*3600){result+=(t/(24*3600)|0)+" days "}t%=24*3600;return result+this.hourMinSec(t)}};var DataFormatters={distanceString:function(value){return numeral(value).format("0,0.000 a")+"m"},heightFromTerrainString:function(value){if(value<=-1){return"NA"}return numeral(value).format("0,0.000 a")+"m"},degreeString:function(value){return numeral(value).format("0.000")+"°"},velocityString:function(value){return numeral(value).format("0,0.000 a")+"m/s"},temperatureString:function(value){if(!value){return"NA"}return numeral(value).format("0,000")+"°C"},accelerationSensorString:function(value){if(value[0]=="No Sensors of the Appropriate Type"){return"NA"}return numeral(value[1][0]).format("0,000")+"G"},pressureSensorString:function(value){if(value[0]=="No Sensors of the Appropriate Type"){return"NA"}return numeral(value[1][0]).format("0,000")+"Pa"},gravitySensorString:function(value){if(value[0]=="No Sensors of the Appropriate Type"){return"NA"}return numeral(value[1][0]).format("0,000 a")+"m/s²"},newtonsString:function(value){return numeral(value).format("0,0.00")+" N"},percentageString:function(value){return numeral(value).format("0%")},tonnageString:function(value){return numeral(value).format("0,0.00")+" t"},timeString:function(value){return numeral(value).format("00:00:00")},plainNumberString:function(value){return numeral(value).format("0,0.00")}};var Prototype={Version:"1.7.2",Browser:function(){var ua=navigator.userAgent;var isOpera=Object.prototype.toString.call(window.opera)=="[object Opera]";return{IE:!!window.attachEvent&&!isOpera,Opera:isOpera,WebKit:ua.indexOf("AppleWebKit/")>-1,Gecko:ua.indexOf("Gecko")>-1&&ua.indexOf("KHTML")===-1,MobileSafari:/Apple.*Mobile/.test(ua)}}(),BrowserFeatures:{XPath:!!document.evaluate,SelectorsAPI:!!document.querySelector,ElementExtensions:function(){var constructor=window.Element||window.HTMLElement;return!!(constructor&&constructor.prototype)}(),SpecificElementExtensions:function(){if(typeof window.HTMLDivElement!=="undefined")return true;var div=document.createElement("div"),form=document.createElement("form"),isSupported=false;if(div["__proto__"]&&div["__proto__"]!==form["__proto__"]){isSupported=true}div=form=null;return isSupported}()},ScriptFragment:"]*>([\\S\\s]*?)",JSONFilter:/^\/\*-secure-([\s\S]*)\*\/\s*$/,emptyFunction:function(){},K:function(x){return x}};if(Prototype.Browser.MobileSafari)Prototype.BrowserFeatures.SpecificElementExtensions=false;var Class=function(){var IS_DONTENUM_BUGGY=function(){for(var p in{toString:1}){if(p==="toString")return false}return true}();function subclass(){}function create(){var parent=null,properties=$A(arguments);if(Object.isFunction(properties[0]))parent=properties.shift();function klass(){this.initialize.apply(this,arguments)}Object.extend(klass,Class.Methods);klass.superclass=parent;klass.subclasses=[];if(parent){subclass.prototype=parent.prototype;klass.prototype=new subclass;parent.subclasses.push(klass)}for(var i=0,length=properties.length;i0){match=source.match(pattern);if(match&&match[0].length>0){result+=source.slice(0,match.index);result+=String.interpret(replacement(match));source=source.slice(match.index+match[0].length)}else{result+=source,source=""}}return result}function sub(pattern,replacement,count){replacement=prepareReplacement(replacement);count=Object.isUndefined(count)?1:count;return this.gsub(pattern,function(match){if(--count<0)return match[0];return replacement(match)})}function scan(pattern,iterator){this.gsub(pattern,iterator);return String(this)}function truncate(length,truncation){length=length||30;truncation=Object.isUndefined(truncation)?"...":truncation;return this.length>length?this.slice(0,length-truncation.length)+truncation:String(this)}function strip(){return this.replace(/^\s+/,"").replace(/\s+$/,"")}function stripTags(){return this.replace(/<\w+(\s+("[^"]*"|'[^']*'|[^>])+)?>|<\/\w+>/gi,"")}function stripScripts(){return this.replace(new RegExp(Prototype.ScriptFragment,"img"),"")}function extractScripts(){var matchAll=new RegExp(Prototype.ScriptFragment,"img"),matchOne=new RegExp(Prototype.ScriptFragment,"im");return(this.match(matchAll)||[]).map(function(scriptTag){return(scriptTag.match(matchOne)||["",""])[1]})}function evalScripts(){return this.extractScripts().map(function(script){return eval(script)})}function escapeHTML(){return this.replace(/&/g,"&").replace(//g,">")}function unescapeHTML(){return this.stripTags().replace(/</g,"<").replace(/>/g,">").replace(/&/g,"&")}function toQueryParams(separator){var match=this.strip().match(/([^?#]*)(#.*)?$/);if(!match)return{};return match[1].split(separator||"&").inject({},function(hash,pair){if((pair=pair.split("="))[0]){var key=decodeURIComponent(pair.shift()),value=pair.length>1?pair.join("="):pair[0];if(value!=undefined){value=value.gsub("+"," ");value=decodeURIComponent(value)}if(key in hash){if(!Object.isArray(hash[key]))hash[key]=[hash[key]];hash[key].push(value)}else hash[key]=value}return hash})}function toArray(){return this.split("")}function succ(){return this.slice(0,this.length-1)+String.fromCharCode(this.charCodeAt(this.length-1)+1)}function times(count){return count<1?"":new Array(count+1).join(this)}function camelize(){return this.replace(/-+(.)?/g,function(match,chr){return chr?chr.toUpperCase():""})}function capitalize(){return this.charAt(0).toUpperCase()+this.substring(1).toLowerCase()}function underscore(){return this.replace(/::/g,"/").replace(/([A-Z]+)([A-Z][a-z])/g,"$1_$2").replace(/([a-z\d])([A-Z])/g,"$1_$2").replace(/-/g,"_").toLowerCase()}function dasherize(){return this.replace(/_/g,"-")}function inspect(useDoubleQuotes){var escapedString=this.replace(/[\x00-\x1f\\]/g,function(character){if(character in String.specialChar){return String.specialChar[character]}return"\\u00"+character.charCodeAt().toPaddedString(2,16)});if(useDoubleQuotes)return'"'+escapedString.replace(/"/g,'\\"')+'"';return"'"+escapedString.replace(/'/g,"\\'")+"'"}function unfilterJSON(filter){return this.replace(filter||Prototype.JSONFilter,"$1")}function isJSON(){var str=this;if(str.blank())return false;str=str.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,"@");str=str.replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,"]");str=str.replace(/(?:^|:|,)(?:\s*\[)+/g,"");return/^[\],:{}\s]*$/.test(str)}function evalJSON(sanitize){var json=this.unfilterJSON(),cx=/[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g;if(cx.test(json)){json=json.replace(cx,function(a){return"\\u"+("0000"+a.charCodeAt(0).toString(16)).slice(-4)})}try{if(!sanitize||json.isJSON())return eval("("+json+")")}catch(e){}throw new SyntaxError("Badly formed JSON string: "+this.inspect())}function parseJSON(){var json=this.unfilterJSON();return JSON.parse(json)}function include(pattern){return this.indexOf(pattern)>-1}function startsWith(pattern,position){position=Object.isNumber(position)?position:0;return this.lastIndexOf(pattern,position)===position}function endsWith(pattern,position){pattern=String(pattern);position=Object.isNumber(position)?position:this.length;if(position<0)position=0;if(position>this.length)position=this.length;var d=position-pattern.length;return d>=0&&this.indexOf(pattern,d)===d}function empty(){return this==""}function blank(){return/^\s*$/.test(this)}function interpolate(object,pattern){return new Template(this,pattern).evaluate(object)}return{gsub:gsub,sub:sub,scan:scan,truncate:truncate,strip:String.prototype.trim||strip,stripTags:stripTags,stripScripts:stripScripts,extractScripts:extractScripts,evalScripts:evalScripts,escapeHTML:escapeHTML,unescapeHTML:unescapeHTML,toQueryParams:toQueryParams,parseQuery:toQueryParams,toArray:toArray,succ:succ,times:times,camelize:camelize,capitalize:capitalize,underscore:underscore,dasherize:dasherize,inspect:inspect,unfilterJSON:unfilterJSON,isJSON:isJSON,evalJSON:NATIVE_JSON_PARSE_SUPPORT?parseJSON:evalJSON,include:include,startsWith:String.prototype.startsWith||startsWith,endsWith:String.prototype.endsWith||endsWith,empty:empty,blank:blank,interpolate:interpolate}}());var Template=Class.create({initialize:function(template,pattern){this.template=template.toString();this.pattern=pattern||Template.Pattern},evaluate:function(object){if(object&&Object.isFunction(object.toTemplateReplacements))object=object.toTemplateReplacements();return this.template.gsub(this.pattern,function(match){if(object==null)return match[1]+"";var before=match[1]||"";if(before=="\\")return match[2];var ctx=object,expr=match[3],pattern=/^([^.[]+|\[((?:.*?[^\\])?)\])(\.|\[|$)/;match=pattern.exec(expr);if(match==null)return before;while(match!=null){var comp=match[1].startsWith("[")?match[2].replace(/\\\\]/g,"]"):match[1];ctx=ctx[comp];if(null==ctx||""==match[3])break;expr=expr.substring("["==match[3]?match[1].length:match[0].length);match=pattern.exec(expr)}return before+String.interpret(ctx)})}});Template.Pattern=/(^|.|\r|\n)(#\{(.*?)\})/;var $break={};var Enumerable=function(){function each(iterator,context){try{this._each(iterator,context)}catch(e){if(e!=$break)throw e}return this}function eachSlice(number,iterator,context){var index=-number,slices=[],array=this.toArray();if(number<1)return array;while((index+=number)=result)result=value},this);return result}function min(iterator,context){iterator=iterator||Prototype.K;var result;this.each(function(value,index){value=iterator.call(context,value,index,this);if(result==null||valueb?1:0}).pluck("value")}function toArray(){return this.map()}function zip(){var iterator=Prototype.K,args=$A(arguments);if(Object.isFunction(args.last()))iterator=args.pop();var collections=[this].concat(args).map($A);return this.map(function(value,index){return iterator(collections.pluck(index))})}function size(){return this.toArray().length}function inspect(){return"#"}return{each:each,eachSlice:eachSlice,all:all,every:all,any:any,some:any,collect:collect,map:collect,detect:detect,findAll:findAll,select:findAll,filter:findAll,grep:grep,include:include,member:include,inGroupsOf:inGroupsOf,inject:inject,invoke:invoke,max:max,min:min,partition:partition,pluck:pluck,reject:reject,sortBy:sortBy,toArray:toArray,entries:toArray,zip:zip,size:size,inspect:inspect,find:detect}}();function $A(iterable){if(!iterable)return[];if("toArray"in Object(iterable))return iterable.toArray();var length=iterable.length||0,results=new Array(length);while(length--)results[length]=iterable[length];return results}function $w(string){if(!Object.isString(string))return[];string=string.strip();return string?string.split(/\s+/):[]}Array.from=$A;(function(){var arrayProto=Array.prototype,slice=arrayProto.slice,_each=arrayProto.forEach;function each(iterator,context){for(var i=0,length=this.length>>>0;i>>0;if(length===0)return-1;i=Number(i);if(isNaN(i)){i=0}else if(i!==0&&isFinite(i)){i=(i>0?1:-1)*Math.floor(Math.abs(i))}if(i>length)return-1;var k=i>=0?i:Math.max(length-Math.abs(i),0);for(;k>>0;if(length===0)return-1;if(!Object.isUndefined(i)){i=Number(i);if(isNaN(i)){i=0}else if(i!==0&&isFinite(i)){i=(i>0?1:-1)*Math.floor(Math.abs(i))}}else{i=length}var k=i>=0?Math.min(i,length-1):length-Math.abs(i);for(;k>=0;k--)if(k in array&&array[k]===item)return k;return-1}function concat(_){var array=[],items=slice.call(arguments,0),item,n=0;items.unshift(this);for(var i=0,length=items.length;i>>0;i>>0;i>>0;i>>0;i"}function clone(){return new Hash(this)}return{initialize:initialize,_each:_each,set:set,get:get,unset:unset,toObject:toObject,toTemplateReplacements:toObject,keys:keys,values:values,index:index,merge:merge,update:update,toQueryString:toQueryString,inspect:inspect,toJSON:toObject,clone:clone}}());Hash.from=$H;Object.extend(Number.prototype,function(){function toColorPart(){return this.toPaddedString(2,16)}function succ(){return this+1}function times(iterator,context){$R(0,this,true).each(iterator,context);return this}function toPaddedString(length,radix){var string=this.toString(radix||10);return"0".times(length-string.length)+string}function abs(){return Math.abs(this)}function round(){return Math.round(this)}function ceil(){return Math.ceil(this)}function floor(){return Math.floor(this)}return{toColorPart:toColorPart,succ:succ,times:times,toPaddedString:toPaddedString,abs:abs,round:round,ceil:ceil,floor:floor}}());function $R(start,end,exclusive){return new ObjectRange(start,end,exclusive)}var ObjectRange=Class.create(Enumerable,function(){function initialize(start,end,exclusive){this.start=start;this.end=end;this.exclusive=exclusive}function _each(iterator,context){var value=this.start,i;for(i=0;this.include(value);i++){iterator.call(context,value,i);value=value.succ()}}function include(value){if(value1&&!(readyState==4&&this._complete))this.respondToReadyState(this.transport.readyState)},setRequestHeaders:function(){var headers={"X-Requested-With":"XMLHttpRequest","X-Prototype-Version":Prototype.Version,Accept:"text/javascript, text/html, application/xml, text/xml, */*"};if(this.method=="post"){headers["Content-type"]=this.options.contentType+(this.options.encoding?"; charset="+this.options.encoding:"");if(this.transport.overrideMimeType&&(navigator.userAgent.match(/Gecko\/(\d{4})/)||[0,2005])[1]<2005)headers["Connection"]="close"}if(typeof this.options.requestHeaders=="object"){var extras=this.options.requestHeaders;if(Object.isFunction(extras.push))for(var i=0,length=extras.length;i=200&&status<300||status==304},getStatus:function(){try{if(this.transport.status===1223)return 204;return this.transport.status||0}catch(e){return 0}},respondToReadyState:function(readyState){var state=Ajax.Request.Events[readyState],response=new Ajax.Response(this);if(state=="Complete"){try{this._complete=true;(this.options["on"+response.status]||this.options["on"+(this.success()?"Success":"Failure")]||Prototype.emptyFunction)(response,response.headerJSON)}catch(e){this.dispatchException(e)}var contentType=response.getHeader("Content-type");if(this.options.evalJS=="force"||this.options.evalJS&&this.isSameOrigin()&&contentType&&contentType.match(/^\s*(text|application)\/(x-)?(java|ecma)script(;.*)?\s*$/i))this.evalResponse()}try{(this.options["on"+state]||Prototype.emptyFunction)(response,response.headerJSON);Ajax.Responders.dispatch("on"+state,this,response,response.headerJSON)}catch(e){this.dispatchException(e)}if(state=="Complete"){this.transport.onreadystatechange=Prototype.emptyFunction}},isSameOrigin:function(){var m=this.url.match(/^\s*https?:\/\/[^\/]*/);return!m||m[0]=="#{protocol}//#{domain}#{port}".interpolate({protocol:location.protocol,domain:document.domain,port:location.port?":"+location.port:""})},getHeader:function(name){try{return this.transport.getResponseHeader(name)||null}catch(e){return null}},evalResponse:function(){try{return eval((this.transport.responseText||"").unfilterJSON())}catch(e){this.dispatchException(e)}},dispatchException:function(exception){(this.options.onException||Prototype.emptyFunction)(this,exception);Ajax.Responders.dispatch("onException",this,exception)}});Ajax.Request.Events=["Uninitialized","Loading","Loaded","Interactive","Complete"];Ajax.Response=Class.create({initialize:function(request){this.request=request;var transport=this.transport=request.transport,readyState=this.readyState=transport.readyState;if(readyState>2&&!Prototype.Browser.IE||readyState==4){this.status=this.getStatus();this.statusText=this.getStatusText();this.responseText=String.interpret(transport.responseText);this.headerJSON=this._getHeaderJSON()}if(readyState==4){var xml=transport.responseXML;this.responseXML=Object.isUndefined(xml)?null:xml;this.responseJSON=this._getResponseJSON()}},status:0,statusText:"",getStatus:Ajax.Request.prototype.getStatus,getStatusText:function(){try{return this.transport.statusText||""}catch(e){return""}},getHeader:Ajax.Request.prototype.getHeader,getAllHeaders:function(){try{return this.getAllResponseHeaders()}catch(e){return null}},getResponseHeader:function(name){return this.transport.getResponseHeader(name)},getAllResponseHeaders:function(){return this.transport.getAllResponseHeaders()},_getHeaderJSON:function(){var json=this.getHeader("X-JSON");if(!json)return null;try{json=decodeURIComponent(escape(json))}catch(e){}try{return json.evalJSON(this.request.options.sanitizeJSON||!this.request.isSameOrigin())}catch(e){this.request.dispatchException(e)}},_getResponseJSON:function(){var options=this.request.options;if(!options.evalJSON||options.evalJSON!="force"&&!(this.getHeader("Content-type")||"").include("application/json")||this.responseText.blank())return null;try{return this.responseText.evalJSON(options.sanitizeJSON||!this.request.isSameOrigin())}catch(e){this.request.dispatchException(e)}}});Ajax.Updater=Class.create(Ajax.Request,{initialize:function($super,container,url,options){this.container={success:container.success||container,failure:container.failure||(container.success?null:container)};options=Object.clone(options);var onComplete=options.onComplete;options.onComplete=function(response,json){this.updateContent(response.responseText);if(Object.isFunction(onComplete))onComplete(response,json)}.bind(this);$super(url,options)},updateContent:function(responseText){var receiver=this.container[this.success()?"success":"failure"],options=this.options;if(!options.evalScripts)responseText=responseText.stripScripts();if(receiver=$(receiver)){if(options.insertion){if(Object.isString(options.insertion)){var insertion={};insertion[options.insertion]=responseText;receiver.insert(insertion)}else options.insertion(receiver,responseText)}else receiver.update(responseText)}}});Ajax.PeriodicalUpdater=Class.create(Ajax.Base,{initialize:function($super,container,url,options){$super(options);this.onComplete=this.options.onComplete;this.frequency=this.options.frequency||2;this.decay=this.options.decay||1;this.updater={};this.container=container;this.url=url;this.start()},start:function(){this.options.onComplete=this.updateComplete.bind(this);this.onTimerEvent()},stop:function(){this.updater.options.onComplete=undefined;clearTimeout(this.timer);(this.onComplete||Prototype.emptyFunction).apply(this,arguments)},updateComplete:function(response){if(this.options.decay){this.decay=response.responseText==this.lastText?this.decay*this.options.decay:1;this.lastText=response.responseText}this.timer=this.onTimerEvent.bind(this).delay(this.decay*this.frequency)},onTimerEvent:function(){this.updater=new Ajax.Updater(this.container,this.url,this.options)}});(function(GLOBAL){var UNDEFINED;var SLICE=Array.prototype.slice;var DIV=document.createElement("div");function $(element){if(arguments.length>1){for(var i=0,elements=[],length=arguments.length;i');return el.tagName.toLowerCase()==="input"&&el.name==="x"}catch(err){return false}}();var oldElement=GLOBAL.Element;function Element(tagName,attributes){attributes=attributes||{};tagName=tagName.toLowerCase();if(HAS_EXTENDED_CREATE_ELEMENT_SYNTAX&&attributes.name){tagName="<"+tagName+' name="'+attributes.name+'">';delete attributes.name;return Element.writeAttribute(document.createElement(tagName),attributes)}if(!ELEMENT_CACHE[tagName])ELEMENT_CACHE[tagName]=Element.extend(document.createElement(tagName));var node=shouldUseCreationCache(tagName,attributes)?ELEMENT_CACHE[tagName].cloneNode(false):document.createElement(tagName);return Element.writeAttribute(node,attributes)}GLOBAL.Element=Element;Object.extend(GLOBAL.Element,oldElement||{});if(oldElement)GLOBAL.Element.prototype=oldElement.prototype;Element.Methods={ByTag:{},Simulated:{}};var methods={};var INSPECT_ATTRIBUTES={id:"id",className:"class"};function inspect(element){element=$(element);var result="<"+element.tagName.toLowerCase();var attribute,value;for(var property in INSPECT_ATTRIBUTES){attribute=INSPECT_ATTRIBUTES[property];value=(element[property]||"").toString();if(value)result+=" "+attribute+"="+value.inspect(true)}return result+">"}methods.inspect=inspect;function visible(element){return $(element).style.display!=="none"}function toggle(element,bool){element=$(element);if(Object.isUndefined(bool))bool=!Element.visible(element);Element[bool?"show":"hide"](element);return element}function hide(element){element=$(element);element.style.display="none";return element}function show(element){element=$(element);element.style.display="";return element}Object.extend(methods,{visible:visible,toggle:toggle,hide:hide,show:show});function remove(element){element=$(element);element.parentNode.removeChild(element);return element}var SELECT_ELEMENT_INNERHTML_BUGGY=function(){var el=document.createElement("select"),isBuggy=true;el.innerHTML='';if(el.options&&el.options[0]){isBuggy=el.options[0].nodeName.toUpperCase()!=="OPTION"}el=null;return isBuggy}();var TABLE_ELEMENT_INNERHTML_BUGGY=function(){try{var el=document.createElement("table");if(el&&el.tBodies){el.innerHTML="test";var isBuggy=typeof el.tBodies[0]=="undefined";el=null;return isBuggy}}catch(e){return true}}();var LINK_ELEMENT_INNERHTML_BUGGY=function(){try{var el=document.createElement("div");el.innerHTML="";var isBuggy=el.childNodes.length===0;el=null;return isBuggy}catch(e){return true}}();var ANY_INNERHTML_BUGGY=SELECT_ELEMENT_INNERHTML_BUGGY||TABLE_ELEMENT_INNERHTML_BUGGY||LINK_ELEMENT_INNERHTML_BUGGY;var SCRIPT_ELEMENT_REJECTS_TEXTNODE_APPENDING=function(){var s=document.createElement("script"),isBuggy=false;try{s.appendChild(document.createTextNode(""));isBuggy=!s.firstChild||s.firstChild&&s.firstChild.nodeType!==3}catch(e){isBuggy=true}s=null;return isBuggy}();function update(element,content){element=$(element);var descendants=element.getElementsByTagName("*"),i=descendants.length;while(i--)purgeElement(descendants[i]);if(content&&content.toElement)content=content.toElement();if(Object.isElement(content))return element.update().insert(content);content=Object.toHTML(content);var tagName=element.tagName.toUpperCase();if(tagName==="SCRIPT"&&SCRIPT_ELEMENT_REJECTS_TEXTNODE_APPENDING){element.text=content;return element}if(ANY_INNERHTML_BUGGY){if(tagName in INSERTION_TRANSLATIONS.tags){while(element.firstChild)element.removeChild(element.firstChild);var nodes=getContentFromAnonymousElement(tagName,content.stripScripts());for(var i=0,node;node=nodes[i];i++)element.appendChild(node)}else if(LINK_ELEMENT_INNERHTML_BUGGY&&Object.isString(content)&&content.indexOf("-1){while(element.firstChild)element.removeChild(element.firstChild);var nodes=getContentFromAnonymousElement(tagName,content.stripScripts(),true);for(var i=0,node;node=nodes[i];i++)element.appendChild(node)}else{element.innerHTML=content.stripScripts()}}else{element.innerHTML=content.stripScripts()}content.evalScripts.bind(content).defer();return element}function replace(element,content){element=$(element);if(content&&content.toElement){content=content.toElement()}else if(!Object.isElement(content)){content=Object.toHTML(content);var range=element.ownerDocument.createRange();range.selectNode(element);content.evalScripts.bind(content).defer();content=range.createContextualFragment(content.stripScripts())}element.parentNode.replaceChild(content,element);return element}var INSERTION_TRANSLATIONS={before:function(element,node){element.parentNode.insertBefore(node,element)},top:function(element,node){element.insertBefore(node,element.firstChild)},bottom:function(element,node){element.appendChild(node)},after:function(element,node){element.parentNode.insertBefore(node,element.nextSibling)},tags:{TABLE:["","
    ",1],TBODY:["","
    ",2],TR:["","
    ",3],TD:["
    ","
    ",4],SELECT:["",1]}};var tags=INSERTION_TRANSLATIONS.tags;Object.extend(tags,{THEAD:tags.TBODY,TFOOT:tags.TBODY,TH:tags.TD});function replace_IE(element,content){element=$(element);if(content&&content.toElement)content=content.toElement();if(Object.isElement(content)){element.parentNode.replaceChild(content,element);return element}content=Object.toHTML(content);var parent=element.parentNode,tagName=parent.tagName.toUpperCase();if(tagName in INSERTION_TRANSLATIONS.tags){var nextSibling=Element.next(element);var fragments=getContentFromAnonymousElement(tagName,content.stripScripts());parent.removeChild(element);var iterator;if(nextSibling)iterator=function(node){parent.insertBefore(node,nextSibling)};else iterator=function(node){parent.appendChild(node)};fragments.each(iterator)}else{element.outerHTML=content.stripScripts()}content.evalScripts.bind(content).defer();return element}if("outerHTML"in document.documentElement)replace=replace_IE;function isContent(content){if(Object.isUndefined(content)||content===null)return false;if(Object.isString(content)||Object.isNumber(content))return true;if(Object.isElement(content))return true;if(content.toElement||content.toHTML)return true;return false}function insertContentAt(element,content,position){position=position.toLowerCase();var method=INSERTION_TRANSLATIONS[position];if(content&&content.toElement)content=content.toElement();if(Object.isElement(content)){method(element,content);return element}content=Object.toHTML(content);var tagName=(position==="before"||position==="after"?element.parentNode:element).tagName.toUpperCase();var childNodes=getContentFromAnonymousElement(tagName,content.stripScripts());if(position==="top"||position==="after")childNodes.reverse();for(var i=0,node;node=childNodes[i];i++)method(element,node);content.evalScripts.bind(content).defer()}function insert(element,insertions){element=$(element);if(isContent(insertions))insertions={bottom:insertions};for(var position in insertions)insertContentAt(element,insertions[position],position);return element}function wrap(element,wrapper,attributes){element=$(element);if(Object.isElement(wrapper)){$(wrapper).writeAttribute(attributes||{})}else if(Object.isString(wrapper)){wrapper=new Element(wrapper,attributes)}else{wrapper=new Element("div",wrapper)}if(element.parentNode)element.parentNode.replaceChild(wrapper,element);wrapper.appendChild(element);return wrapper}function cleanWhitespace(element){element=$(element);var node=element.firstChild;while(node){var nextNode=node.nextSibling;if(node.nodeType===Node.TEXT_NODE&&!/\S/.test(node.nodeValue))element.removeChild(node);node=nextNode}return element}function empty(element){return $(element).innerHTML.blank()}function getContentFromAnonymousElement(tagName,html,force){var t=INSERTION_TRANSLATIONS.tags[tagName],div=DIV;var workaround=!!t;if(!workaround&&force){workaround=true;t=["","",0]}if(workaround){div.innerHTML=" "+t[0]+html+t[1];div.removeChild(div.firstChild);for(var i=t[2];i--;)div=div.firstChild}else{div.innerHTML=html}return $A(div.childNodes)}function clone(element,deep){if(!(element=$(element)))return;var clone=element.cloneNode(deep);if(!HAS_UNIQUE_ID_PROPERTY){clone._prototypeUID=UNDEFINED;if(deep){var descendants=Element.select(clone,"*"),i=descendants.length;while(i--)descendants[i]._prototypeUID=UNDEFINED}}return Element.extend(clone)}function purgeElement(element){var uid=getUniqueElementID(element);if(uid){Element.stopObserving(element);if(!HAS_UNIQUE_ID_PROPERTY)element._prototypeUID=UNDEFINED;delete Element.Storage[uid]}}function purgeCollection(elements){var i=elements.length;while(i--)purgeElement(elements[i])}function purgeCollection_IE(elements){var i=elements.length,element,uid;while(i--){element=elements[i];uid=getUniqueElementID(element);delete Element.Storage[uid];delete Event.cache[uid]}}if(HAS_UNIQUE_ID_PROPERTY){purgeCollection=purgeCollection_IE}function purge(element){if(!(element=$(element)))return;purgeElement(element);var descendants=element.getElementsByTagName("*"),i=descendants.length;while(i--)purgeElement(descendants[i]);return null}Object.extend(methods,{remove:remove,update:update,replace:replace,insert:insert,wrap:wrap,cleanWhitespace:cleanWhitespace,empty:empty,clone:clone,purge:purge});function recursivelyCollect(element,property,maximumLength){element=$(element);maximumLength=maximumLength||-1;var elements=[];while(element=element[property]){if(element.nodeType===Node.ELEMENT_NODE)elements.push(Element.extend(element));if(elements.length===maximumLength)break}return elements}function ancestors(element){return recursivelyCollect(element,"parentNode")}function descendants(element){return Element.select(element,"*")}function firstDescendant(element){element=$(element).firstChild;while(element&&element.nodeType!==Node.ELEMENT_NODE)element=element.nextSibling;return $(element)}function immediateDescendants(element){var results=[],child=$(element).firstChild;while(child){if(child.nodeType===Node.ELEMENT_NODE)results.push(Element.extend(child));child=child.nextSibling}return results}function previousSiblings(element){return recursivelyCollect(element,"previousSibling")}function nextSiblings(element){return recursivelyCollect(element,"nextSibling")}function siblings(element){element=$(element);var previous=previousSiblings(element),next=nextSiblings(element);return previous.reverse().concat(next)}function match(element,selector){element=$(element);if(Object.isString(selector))return Prototype.Selector.match(element,selector);return selector.match(element)}function _recursivelyFind(element,property,expression,index){element=$(element),expression=expression||0,index=index||0;if(Object.isNumber(expression)){index=expression,expression=null}while(element=element[property]){if(element.nodeType!==1)continue;if(expression&&!Prototype.Selector.match(element,expression))continue;if(--index>=0)continue;return Element.extend(element)}}function up(element,expression,index){element=$(element);if(arguments.length===1)return $(element.parentNode);return _recursivelyFind(element,"parentNode",expression,index)}function down(element,expression,index){if(arguments.length===1)return firstDescendant(element);element=$(element),expression=expression||0,index=index||0;if(Object.isNumber(expression))index=expression,expression="*";var node=Prototype.Selector.select(expression,element)[index];return Element.extend(node)}function previous(element,expression,index){return _recursivelyFind(element,"previousSibling",expression,index)}function next(element,expression,index){return _recursivelyFind(element,"nextSibling",expression,index)}function select(element){element=$(element);var expressions=SLICE.call(arguments,1).join(", ");return Prototype.Selector.select(expressions,element)}function adjacent(element){element=$(element);var expressions=SLICE.call(arguments,1).join(", ");var siblings=Element.siblings(element),results=[];for(var i=0,sibling;sibling=siblings[i];i++){if(Prototype.Selector.match(sibling,expressions))results.push(sibling)}return results}function descendantOf_DOM(element,ancestor){element=$(element),ancestor=$(ancestor);while(element=element.parentNode)if(element===ancestor)return true;return false}function descendantOf_contains(element,ancestor){element=$(element),ancestor=$(ancestor);if(!ancestor.contains)return descendantOf_DOM(element,ancestor);return ancestor.contains(element)&&ancestor!==element}function descendantOf_compareDocumentPosition(element,ancestor){element=$(element),ancestor=$(ancestor);return(element.compareDocumentPosition(ancestor)&8)===8}var descendantOf;if(DIV.compareDocumentPosition){descendantOf=descendantOf_compareDocumentPosition}else if(DIV.contains){descendantOf=descendantOf_contains}else{descendantOf=descendantOf_DOM}Object.extend(methods,{recursivelyCollect:recursivelyCollect,ancestors:ancestors,descendants:descendants,firstDescendant:firstDescendant,immediateDescendants:immediateDescendants,previousSiblings:previousSiblings,nextSiblings:nextSiblings,siblings:siblings,match:match,up:up,down:down,previous:previous,next:next,select:select,adjacent:adjacent,descendantOf:descendantOf,getElementsBySelector:select,childElements:immediateDescendants});var idCounter=1;function identify(element){element=$(element);var id=Element.readAttribute(element,"id");if(id)return id;do{id="anonymous_element_"+idCounter++}while($(id));Element.writeAttribute(element,"id",id);return id}function readAttribute(element,name){return $(element).getAttribute(name)}function readAttribute_IE(element,name){element=$(element);var table=ATTRIBUTE_TRANSLATIONS.read;if(table.values[name])return table.values[name](element,name);if(table.names[name])name=table.names[name];if(name.include(":")){if(!element.attributes||!element.attributes[name])return null;return element.attributes[name].value}return element.getAttribute(name)}function readAttribute_Opera(element,name){if(name==="title")return element.title;return element.getAttribute(name)}var PROBLEMATIC_ATTRIBUTE_READING=function(){DIV.setAttribute("onclick",[]);var value=DIV.getAttribute("onclick");var isFunction=Object.isArray(value);DIV.removeAttribute("onclick");return isFunction}();if(PROBLEMATIC_ATTRIBUTE_READING){readAttribute=readAttribute_IE}else if(Prototype.Browser.Opera){readAttribute=readAttribute_Opera}function writeAttribute(element,name,value){element=$(element);var attributes={},table=ATTRIBUTE_TRANSLATIONS.write; +Math.toRadians = function(angleInDegrees){ + return angleInDegrees * (Math.PI/180) +} -if(typeof name==="object"){attributes=name}else{attributes[name]=Object.isUndefined(value)?true:value}for(var attr in attributes){name=table.names[attr]||attr;value=attributes[attr];if(table.values[attr])name=table.values[attr](element,value)||name;if(value===false||value===null)element.removeAttribute(name);else if(value===true)element.setAttribute(name,name);else element.setAttribute(name,value)}return element}var PROBLEMATIC_HAS_ATTRIBUTE_WITH_CHECKBOXES=function(){if(!HAS_EXTENDED_CREATE_ELEMENT_SYNTAX){return false}var checkbox=document.createElement('');checkbox.checked=true;var node=checkbox.getAttributeNode("checked");return!node||!node.specified}();function hasAttribute(element,attribute){attribute=ATTRIBUTE_TRANSLATIONS.has[attribute]||attribute;var node=$(element).getAttributeNode(attribute);return!!(node&&node.specified)}function hasAttribute_IE(element,attribute){if(attribute==="checked"){return element.checked}return hasAttribute(element,attribute)}GLOBAL.Element.Methods.Simulated.hasAttribute=PROBLEMATIC_HAS_ATTRIBUTE_WITH_CHECKBOXES?hasAttribute_IE:hasAttribute;function classNames(element){return new Element.ClassNames(element)}var regExpCache={};function getRegExpForClassName(className){if(regExpCache[className])return regExpCache[className];var re=new RegExp("(^|\\s+)"+className+"(\\s+|$)");regExpCache[className]=re;return re}function hasClassName(element,className){if(!(element=$(element)))return;var elementClassName=element.className;if(elementClassName.length===0)return false;if(elementClassName===className)return true;return getRegExpForClassName(className).test(elementClassName)}function addClassName(element,className){if(!(element=$(element)))return;if(!hasClassName(element,className))element.className+=(element.className?" ":"")+className;return element}function removeClassName(element,className){if(!(element=$(element)))return;element.className=element.className.replace(getRegExpForClassName(className)," ").strip();return element}function toggleClassName(element,className,bool){if(!(element=$(element)))return;if(Object.isUndefined(bool))bool=!hasClassName(element,className);var method=Element[bool?"addClassName":"removeClassName"];return method(element,className)}var ATTRIBUTE_TRANSLATIONS={};var classProp="className",forProp="for";DIV.setAttribute(classProp,"x");if(DIV.className!=="x"){DIV.setAttribute("class","x");if(DIV.className==="x")classProp="class"}var LABEL=document.createElement("label");LABEL.setAttribute(forProp,"x");if(LABEL.htmlFor!=="x"){LABEL.setAttribute("htmlFor","x");if(LABEL.htmlFor==="x")forProp="htmlFor"}LABEL=null;function _getAttr(element,attribute){return element.getAttribute(attribute)}function _getAttr2(element,attribute){return element.getAttribute(attribute,2)}function _getAttrNode(element,attribute){var node=element.getAttributeNode(attribute);return node?node.value:""}function _getFlag(element,attribute){return $(element).hasAttribute(attribute)?attribute:null}DIV.onclick=Prototype.emptyFunction;var onclickValue=DIV.getAttribute("onclick");var _getEv;if(String(onclickValue).indexOf("{")>-1){_getEv=function(element,attribute){var value=element.getAttribute(attribute);if(!value)return null;value=value.toString();value=value.split("{")[1];value=value.split("}")[0];return value.strip()}}else if(onclickValue===""){_getEv=function(element,attribute){var value=element.getAttribute(attribute);if(!value)return null;return value.strip()}}ATTRIBUTE_TRANSLATIONS.read={names:{class:classProp,className:classProp,for:forProp,htmlFor:forProp},values:{style:function(element){return element.style.cssText.toLowerCase()},title:function(element){return element.title}}};ATTRIBUTE_TRANSLATIONS.write={names:{className:"class",htmlFor:"for",cellpadding:"cellPadding",cellspacing:"cellSpacing"},values:{checked:function(element,value){element.checked=!!value},style:function(element,value){element.style.cssText=value?value:""}}};ATTRIBUTE_TRANSLATIONS.has={names:{}};Object.extend(ATTRIBUTE_TRANSLATIONS.write.names,ATTRIBUTE_TRANSLATIONS.read.names);var CAMEL_CASED_ATTRIBUTE_NAMES=$w("colSpan rowSpan vAlign dateTime "+"accessKey tabIndex encType maxLength readOnly longDesc frameBorder");for(var i=0,attr;attr=CAMEL_CASED_ATTRIBUTE_NAMES[i];i++){ATTRIBUTE_TRANSLATIONS.write.names[attr.toLowerCase()]=attr;ATTRIBUTE_TRANSLATIONS.has.names[attr.toLowerCase()]=attr}Object.extend(ATTRIBUTE_TRANSLATIONS.read.values,{href:_getAttr2,src:_getAttr2,type:_getAttr,action:_getAttrNode,disabled:_getFlag,checked:_getFlag,readonly:_getFlag,multiple:_getFlag,onload:_getEv,onunload:_getEv,onclick:_getEv,ondblclick:_getEv,onmousedown:_getEv,onmouseup:_getEv,onmouseover:_getEv,onmousemove:_getEv,onmouseout:_getEv,onfocus:_getEv,onblur:_getEv,onkeypress:_getEv,onkeydown:_getEv,onkeyup:_getEv,onsubmit:_getEv,onreset:_getEv,onselect:_getEv,onchange:_getEv});Object.extend(methods,{identify:identify,readAttribute:readAttribute,writeAttribute:writeAttribute,classNames:classNames,hasClassName:hasClassName,addClassName:addClassName,removeClassName:removeClassName,toggleClassName:toggleClassName});function normalizeStyleName(style){if(style==="float"||style==="styleFloat")return"cssFloat";return style.camelize()}function normalizeStyleName_IE(style){if(style==="float"||style==="cssFloat")return"styleFloat";return style.camelize()}function setStyle(element,styles){element=$(element);var elementStyle=element.style,match;if(Object.isString(styles)){elementStyle.cssText+=";"+styles;if(styles.include("opacity")){var opacity=styles.match(/opacity:\s*(\d?\.?\d*)/)[1];Element.setOpacity(element,opacity)}return element}for(var property in styles){if(property==="opacity"){Element.setOpacity(element,styles[property])}else{var value=styles[property];if(property==="float"||property==="cssFloat"){property=Object.isUndefined(elementStyle.styleFloat)?"cssFloat":"styleFloat"}elementStyle[property]=value}}return element}function getStyle(element,style){element=$(element);style=normalizeStyleName(style);var value=element.style[style];if(!value||value==="auto"){var css=document.defaultView.getComputedStyle(element,null);value=css?css[style]:null}if(style==="opacity")return value?parseFloat(value):1;return value==="auto"?null:value}function getStyle_Opera(element,style){switch(style){case"height":case"width":if(!Element.visible(element))return null;var dim=parseInt(getStyle(element,style),10);if(dim!==element["offset"+style.capitalize()])return dim+"px";return Element.measure(element,style);default:return getStyle(element,style)}}function getStyle_IE(element,style){element=$(element);style=normalizeStyleName_IE(style);var value=element.style[style];if(!value&&element.currentStyle){value=element.currentStyle[style]}if(style==="opacity"&&!STANDARD_CSS_OPACITY_SUPPORTED)return getOpacity_IE(element);if(value==="auto"){if((style==="width"||style==="height")&&Element.visible(element))return Element.measure(element,style)+"px";return null}return value}function stripAlphaFromFilter_IE(filter){return(filter||"").replace(/alpha\([^\)]*\)/gi,"")}function hasLayout_IE(element){if(!element.currentStyle||!element.currentStyle.hasLayout)element.style.zoom=1;return element}var STANDARD_CSS_OPACITY_SUPPORTED=function(){DIV.style.cssText="opacity:.55";return/^0.55/.test(DIV.style.opacity)}();function setOpacity(element,value){element=$(element);if(value==1||value==="")value="";else if(value<1e-5)value=0;element.style.opacity=value;return element}function setOpacity_IE(element,value){if(STANDARD_CSS_OPACITY_SUPPORTED)return setOpacity(element,value);element=hasLayout_IE($(element));var filter=Element.getStyle(element,"filter"),style=element.style;if(value==1||value===""){filter=stripAlphaFromFilter_IE(filter);if(filter)style.filter=filter;else style.removeAttribute("filter");return element}if(value<1e-5)value=0;style.filter=stripAlphaFromFilter_IE(filter)+"alpha(opacity="+value*100+")";return element}function getOpacity(element){return Element.getStyle(element,"opacity")}function getOpacity_IE(element){if(STANDARD_CSS_OPACITY_SUPPORTED)return getOpacity(element);var filter=Element.getStyle(element,"filter");if(filter.length===0)return 1;var match=(filter||"").match(/alpha\(opacity=(.*)\)/);if(match&&match[1])return parseFloat(match[1])/100;return 1}Object.extend(methods,{setStyle:setStyle,getStyle:getStyle,setOpacity:setOpacity,getOpacity:getOpacity});if("styleFloat"in DIV.style){methods.getStyle=getStyle_IE;methods.setOpacity=setOpacity_IE;methods.getOpacity=getOpacity_IE}var UID=0;GLOBAL.Element.Storage={UID:1};function getUniqueElementID(element){if(element===window)return 0;if(typeof element._prototypeUID==="undefined")element._prototypeUID=Element.Storage.UID++;return element._prototypeUID}function getUniqueElementID_IE(element){if(element===window)return 0;if(element==document)return 1;return element.uniqueID}var HAS_UNIQUE_ID_PROPERTY="uniqueID"in DIV;if(HAS_UNIQUE_ID_PROPERTY)getUniqueElementID=getUniqueElementID_IE;function getStorage(element){if(!(element=$(element)))return;var uid=getUniqueElementID(element);if(!Element.Storage[uid])Element.Storage[uid]=$H();return Element.Storage[uid]}function store(element,key,value){if(!(element=$(element)))return;var storage=getStorage(element);if(arguments.length===2){storage.update(key)}else{storage.set(key,value)}return element}function retrieve(element,key,defaultValue){if(!(element=$(element)))return;var storage=getStorage(element),value=storage.get(key);if(Object.isUndefined(value)){storage.set(key,defaultValue);value=defaultValue}return value}Object.extend(methods,{getStorage:getStorage,store:store,retrieve:retrieve});var Methods={},ByTag=Element.Methods.ByTag,F=Prototype.BrowserFeatures;if(!F.ElementExtensions&&"__proto__"in DIV){GLOBAL.HTMLElement={};GLOBAL.HTMLElement.prototype=DIV["__proto__"];F.ElementExtensions=true}function checkElementPrototypeDeficiency(tagName){if(typeof window.Element==="undefined")return false;if(!HAS_EXTENDED_CREATE_ELEMENT_SYNTAX)return false;var proto=window.Element.prototype;if(proto){var id="_"+(Math.random()+"").slice(2),el=document.createElement(tagName);proto[id]="x";var isBuggy=el[id]!=="x";delete proto[id];el=null;return isBuggy}return false}var HTMLOBJECTELEMENT_PROTOTYPE_BUGGY=checkElementPrototypeDeficiency("object");function extendElementWith(element,methods){for(var property in methods){var value=methods[property];if(Object.isFunction(value)&&!(property in element))element[property]=value.methodize()}}var EXTENDED={};function elementIsExtended(element){var uid=getUniqueElementID(element);return uid in EXTENDED}function extend(element){if(!element||elementIsExtended(element))return element;if(element.nodeType!==Node.ELEMENT_NODE||element==window)return element;var methods=Object.clone(Methods),tagName=element.tagName.toUpperCase();if(ByTag[tagName])Object.extend(methods,ByTag[tagName]);extendElementWith(element,methods);EXTENDED[getUniqueElementID(element)]=true;return element}function extend_IE8(element){if(!element||elementIsExtended(element))return element;var t=element.tagName;if(t&&/^(?:object|applet|embed)$/i.test(t)){extendElementWith(element,Element.Methods);extendElementWith(element,Element.Methods.Simulated);extendElementWith(element,Element.Methods.ByTag[t.toUpperCase()])}return element}if(F.SpecificElementExtensions){extend=HTMLOBJECTELEMENT_PROTOTYPE_BUGGY?extend_IE8:Prototype.K}function addMethodsToTagName(tagName,methods){tagName=tagName.toUpperCase();if(!ByTag[tagName])ByTag[tagName]={};Object.extend(ByTag[tagName],methods)}function mergeMethods(destination,methods,onlyIfAbsent){if(Object.isUndefined(onlyIfAbsent))onlyIfAbsent=false;for(var property in methods){var value=methods[property];if(!Object.isFunction(value))continue;if(!onlyIfAbsent||!(property in destination))destination[property]=value.methodize()}}function findDOMClass(tagName){var klass;var trans={OPTGROUP:"OptGroup",TEXTAREA:"TextArea",P:"Paragraph",FIELDSET:"FieldSet",UL:"UList",OL:"OList",DL:"DList",DIR:"Directory",H1:"Heading",H2:"Heading",H3:"Heading",H4:"Heading",H5:"Heading",H6:"Heading",Q:"Quote",INS:"Mod",DEL:"Mod",A:"Anchor",IMG:"Image",CAPTION:"TableCaption",COL:"TableCol",COLGROUP:"TableCol",THEAD:"TableSection",TFOOT:"TableSection",TBODY:"TableSection",TR:"TableRow",TH:"TableCell",TD:"TableCell",FRAMESET:"FrameSet",IFRAME:"IFrame"};if(trans[tagName])klass="HTML"+trans[tagName]+"Element";if(window[klass])return window[klass];klass="HTML"+tagName+"Element";if(window[klass])return window[klass];klass="HTML"+tagName.capitalize()+"Element";if(window[klass])return window[klass];var element=document.createElement(tagName),proto=element["__proto__"]||element.constructor.prototype;element=null;return proto}function addMethods(methods){if(arguments.length===0)addFormMethods();if(arguments.length===2){var tagName=methods;methods=arguments[1]}if(!tagName){Object.extend(Element.Methods,methods||{})}else{if(Object.isArray(tagName)){for(var i=0,tag;tag=tagName[i];i++)addMethodsToTagName(tag,methods)}else{addMethodsToTagName(tagName,methods)}}var ELEMENT_PROTOTYPE=window.HTMLElement?HTMLElement.prototype:Element.prototype;if(F.ElementExtensions){mergeMethods(ELEMENT_PROTOTYPE,Element.Methods);mergeMethods(ELEMENT_PROTOTYPE,Element.Methods.Simulated,true)}if(F.SpecificElementExtensions){for(var tag in Element.Methods.ByTag){var klass=findDOMClass(tag);if(Object.isUndefined(klass))continue;mergeMethods(klass.prototype,ByTag[tag])}}Object.extend(Element,Element.Methods);Object.extend(Element,Element.Methods.Simulated);delete Element.ByTag;delete Element.Simulated;Element.extend.refresh();ELEMENT_CACHE={}}Object.extend(GLOBAL.Element,{extend:extend,addMethods:addMethods});if(extend===Prototype.K){GLOBAL.Element.extend.refresh=Prototype.emptyFunction}else{GLOBAL.Element.extend.refresh=function(){if(Prototype.BrowserFeatures.ElementExtensions)return;Object.extend(Methods,Element.Methods);Object.extend(Methods,Element.Methods.Simulated);EXTENDED={}}}function addFormMethods(){Object.extend(Form,Form.Methods);Object.extend(Form.Element,Form.Element.Methods);Object.extend(Element.Methods.ByTag,{FORM:Object.clone(Form.Methods),INPUT:Object.clone(Form.Element.Methods),SELECT:Object.clone(Form.Element.Methods),TEXTAREA:Object.clone(Form.Element.Methods),BUTTON:Object.clone(Form.Element.Methods)})}Element.addMethods(methods);function destroyCache_IE(){DIV=null;ELEMENT_CACHE=null}if(window.attachEvent)window.attachEvent("onunload",destroyCache_IE)})(this);(function(){function toDecimal(pctString){var match=pctString.match(/^(\d+)%?$/i);if(!match)return null;return Number(match[1])/100}function getRawStyle(element,style){element=$(element);var value=element.style[style];if(!value||value==="auto"){var css=document.defaultView.getComputedStyle(element,null);value=css?css[style]:null}if(style==="opacity")return value?parseFloat(value):1;return value==="auto"?null:value}function getRawStyle_IE(element,style){var value=element.style[style];if(!value&&element.currentStyle){value=element.currentStyle[style]}return value}function getContentWidth(element,context){var boxWidth=element.offsetWidth;var bl=getPixelValue(element,"borderLeftWidth",context)||0;var br=getPixelValue(element,"borderRightWidth",context)||0;var pl=getPixelValue(element,"paddingLeft",context)||0;var pr=getPixelValue(element,"paddingRight",context)||0;return boxWidth-bl-br-pl-pr}if("currentStyle"in document.documentElement){getRawStyle=getRawStyle_IE}function getPixelValue(value,property,context){var element=null;if(Object.isElement(value)){element=value;value=getRawStyle(element,property)}if(value===null||Object.isUndefined(value)){return null}if(/^(?:-)?\d+(\.\d+)?(px)?$/i.test(value)){return window.parseFloat(value)}var isPercentage=value.include("%"),isViewport=context===document.viewport;if(/\d/.test(value)&&element&&element.runtimeStyle&&!(isPercentage&&isViewport)){var style=element.style.left,rStyle=element.runtimeStyle.left;element.runtimeStyle.left=element.currentStyle.left;element.style.left=value||0;value=element.style.pixelLeft;element.style.left=style;element.runtimeStyle.left=rStyle;return value}if(element&&isPercentage){context=context||element.parentNode;var decimal=toDecimal(value),whole=null;var isHorizontal=property.include("left")||property.include("right")||property.include("width");var isVertical=property.include("top")||property.include("bottom")||property.include("height");if(context===document.viewport){if(isHorizontal){whole=document.viewport.getWidth()}else if(isVertical){whole=document.viewport.getHeight()}}else{if(isHorizontal){whole=$(context).measure("width")}else if(isVertical){whole=$(context).measure("height")}}return whole===null?0:whole*decimal}return 0}function toCSSPixels(number){if(Object.isString(number)&&number.endsWith("px"))return number;return number+"px"}function isDisplayed(element){while(element&&element.parentNode){var display=element.getStyle("display");if(display==="none"){return false}element=$(element.parentNode)}return true}var hasLayout=Prototype.K;if("currentStyle"in document.documentElement){hasLayout=function(element){if(!element.currentStyle.hasLayout){element.style.zoom=1}return element}}function cssNameFor(key){if(key.include("border"))key=key+"-width";return key.camelize()}Element.Layout=Class.create(Hash,{initialize:function($super,element,preCompute){$super();this.element=$(element);Element.Layout.PROPERTIES.each(function(property){this._set(property,null)},this);if(preCompute){this._preComputing=true;this._begin();Element.Layout.PROPERTIES.each(this._compute,this);this._end();this._preComputing=false}},_set:function(property,value){return Hash.prototype.set.call(this,property,value)},set:function(property,value){throw"Properties of Element.Layout are read-only."},get:function($super,property){var value=$super(property);return value===null?this._compute(property):value},_begin:function(){if(this._isPrepared())return;var element=this.element;if(isDisplayed(element)){this._setPrepared(true);return}var originalStyles={position:element.style.position||"",width:element.style.width||"",visibility:element.style.visibility||"",display:element.style.display||""};element.store("prototype_original_styles",originalStyles);var position=getRawStyle(element,"position"),width=element.offsetWidth;if(width===0||width===null){element.style.display="block";width=element.offsetWidth}var context=position==="fixed"?document.viewport:element.parentNode;var tempStyles={visibility:"hidden",display:"block"};if(position!=="fixed")tempStyles.position="absolute";element.setStyle(tempStyles);var positionedWidth=element.offsetWidth,newWidth;if(width&&positionedWidth===width){newWidth=getContentWidth(element,context)}else if(position==="absolute"||position==="fixed"){newWidth=getContentWidth(element,context)}else{var parent=element.parentNode,pLayout=$(parent).getLayout();newWidth=pLayout.get("width")-this.get("margin-left")-this.get("border-left")-this.get("padding-left")-this.get("padding-right")-this.get("border-right")-this.get("margin-right")}element.setStyle({width:newWidth+"px"});this._setPrepared(true)},_end:function(){var element=this.element;var originalStyles=element.retrieve("prototype_original_styles");element.store("prototype_original_styles",null);element.setStyle(originalStyles);this._setPrepared(false)},_compute:function(property){var COMPUTATIONS=Element.Layout.COMPUTATIONS;if(!(property in COMPUTATIONS)){throw"Property not found."}return this._set(property,COMPUTATIONS[property].call(this,this.element))},_isPrepared:function(){return this.element.retrieve("prototype_element_layout_prepared",false)},_setPrepared:function(bool){return this.element.store("prototype_element_layout_prepared",bool)},toObject:function(){var args=$A(arguments);var keys=args.length===0?Element.Layout.PROPERTIES:args.join(" ").split(" ");var obj={};keys.each(function(key){if(!Element.Layout.PROPERTIES.include(key))return;var value=this.get(key);if(value!=null)obj[key]=value},this);return obj},toHash:function(){var obj=this.toObject.apply(this,arguments);return new Hash(obj)},toCSS:function(){var args=$A(arguments);var keys=args.length===0?Element.Layout.PROPERTIES:args.join(" ").split(" ");var css={};keys.each(function(key){if(!Element.Layout.PROPERTIES.include(key))return;if(Element.Layout.COMPOSITE_PROPERTIES.include(key))return;var value=this.get(key);if(value!=null)css[cssNameFor(key)]=value+"px"},this);return css},inspect:function(){return"#"}});Object.extend(Element.Layout,{PROPERTIES:$w("height width top left right bottom border-left border-right border-top border-bottom padding-left padding-right padding-top padding-bottom margin-top margin-bottom margin-left margin-right padding-box-width padding-box-height border-box-width border-box-height margin-box-width margin-box-height"),COMPOSITE_PROPERTIES:$w("padding-box-width padding-box-height margin-box-width margin-box-height border-box-width border-box-height"),COMPUTATIONS:{height:function(element){if(!this._preComputing)this._begin();var bHeight=this.get("border-box-height");if(bHeight<=0){if(!this._preComputing)this._end();return 0}var bTop=this.get("border-top"),bBottom=this.get("border-bottom");var pTop=this.get("padding-top"),pBottom=this.get("padding-bottom");if(!this._preComputing)this._end();return bHeight-bTop-bBottom-pTop-pBottom},width:function(element){if(!this._preComputing)this._begin();var bWidth=this.get("border-box-width");if(bWidth<=0){if(!this._preComputing)this._end();return 0}var bLeft=this.get("border-left"),bRight=this.get("border-right");var pLeft=this.get("padding-left"),pRight=this.get("padding-right");if(!this._preComputing)this._end();return bWidth-bLeft-bRight-pLeft-pRight},"padding-box-height":function(element){var height=this.get("height"),pTop=this.get("padding-top"),pBottom=this.get("padding-bottom");return height+pTop+pBottom},"padding-box-width":function(element){var width=this.get("width"),pLeft=this.get("padding-left"),pRight=this.get("padding-right");return width+pLeft+pRight},"border-box-height":function(element){if(!this._preComputing)this._begin();var height=element.offsetHeight;if(!this._preComputing)this._end();return height},"border-box-width":function(element){if(!this._preComputing)this._begin();var width=element.offsetWidth;if(!this._preComputing)this._end();return width},"margin-box-height":function(element){var bHeight=this.get("border-box-height"),mTop=this.get("margin-top"),mBottom=this.get("margin-bottom");if(bHeight<=0)return 0;return bHeight+mTop+mBottom},"margin-box-width":function(element){var bWidth=this.get("border-box-width"),mLeft=this.get("margin-left"),mRight=this.get("margin-right");if(bWidth<=0)return 0;return bWidth+mLeft+mRight},top:function(element){var offset=element.positionedOffset();return offset.top},bottom:function(element){var offset=element.positionedOffset(),parent=element.getOffsetParent(),pHeight=parent.measure("height");var mHeight=this.get("border-box-height");return pHeight-mHeight-offset.top},left:function(element){var offset=element.positionedOffset();return offset.left},right:function(element){var offset=element.positionedOffset(),parent=element.getOffsetParent(),pWidth=parent.measure("width");var mWidth=this.get("border-box-width");return pWidth-mWidth-offset.left},"padding-top":function(element){return getPixelValue(element,"paddingTop")},"padding-bottom":function(element){return getPixelValue(element,"paddingBottom")},"padding-left":function(element){return getPixelValue(element,"paddingLeft")},"padding-right":function(element){return getPixelValue(element,"paddingRight")},"border-top":function(element){return getPixelValue(element,"borderTopWidth")},"border-bottom":function(element){return getPixelValue(element,"borderBottomWidth")},"border-left":function(element){return getPixelValue(element,"borderLeftWidth")},"border-right":function(element){return getPixelValue(element,"borderRightWidth")},"margin-top":function(element){return getPixelValue(element,"marginTop")},"margin-bottom":function(element){return getPixelValue(element,"marginBottom")},"margin-left":function(element){return getPixelValue(element,"marginLeft")},"margin-right":function(element){return getPixelValue(element,"marginRight")}}});if("getBoundingClientRect"in document.documentElement){Object.extend(Element.Layout.COMPUTATIONS,{right:function(element){var parent=hasLayout(element.getOffsetParent());var rect=element.getBoundingClientRect(),pRect=parent.getBoundingClientRect();return(pRect.right-rect.right).round()},bottom:function(element){var parent=hasLayout(element.getOffsetParent());var rect=element.getBoundingClientRect(),pRect=parent.getBoundingClientRect();return(pRect.bottom-rect.bottom).round()}})}Element.Offset=Class.create({initialize:function(left,top){this.left=left.round();this.top=top.round();this[0]=this.left;this[1]=this.top},relativeTo:function(offset){return new Element.Offset(this.left-offset.left,this.top-offset.top)},inspect:function(){return"#".interpolate(this)},toString:function(){return"[#{left}, #{top}]".interpolate(this)},toArray:function(){return[this.left,this.top]}});function getLayout(element,preCompute){return new Element.Layout(element,preCompute)}function measure(element,property){return $(element).getLayout().get(property)}function getHeight(element){return Element.getDimensions(element).height}function getWidth(element){return Element.getDimensions(element).width}function getDimensions(element){element=$(element);var display=Element.getStyle(element,"display");if(display&&display!=="none"){return{width:element.offsetWidth,height:element.offsetHeight}}var style=element.style;var originalStyles={visibility:style.visibility,position:style.position,display:style.display};var newStyles={visibility:"hidden",display:"block"};if(originalStyles.position!=="fixed")newStyles.position="absolute";Element.setStyle(element,newStyles);var dimensions={width:element.offsetWidth,height:element.offsetHeight};Element.setStyle(element,originalStyles);return dimensions}function getOffsetParent(element){element=$(element);if(isDocument(element)||isDetached(element)||isBody(element)||isHtml(element))return $(document.body);var isInline=Element.getStyle(element,"display")==="inline";if(!isInline&&element.offsetParent)return $(element.offsetParent);while((element=element.parentNode)&&element!==document.body){if(Element.getStyle(element,"position")!=="static"){return isHtml(element)?$(document.body):$(element)}}return $(document.body)}function cumulativeOffset(element){element=$(element);var valueT=0,valueL=0;if(element.parentNode){do{valueT+=element.offsetTop||0;valueL+=element.offsetLeft||0;element=element.offsetParent}while(element)}return new Element.Offset(valueL,valueT)}function positionedOffset(element){element=$(element);var layout=element.getLayout();var valueT=0,valueL=0;do{valueT+=element.offsetTop||0;valueL+=element.offsetLeft||0;element=element.offsetParent;if(element){if(isBody(element))break;var p=Element.getStyle(element,"position");if(p!=="static")break}}while(element);valueL-=layout.get("margin-top");valueT-=layout.get("margin-left");return new Element.Offset(valueL,valueT)}function cumulativeScrollOffset(element){var valueT=0,valueL=0;do{if(element===document.body){var bodyScrollNode=document.documentElement||document.body.parentNode||document.body;valueT+=!Object.isUndefined(window.pageYOffset)?window.pageYOffset:bodyScrollNode.scrollTop||0;valueL+=!Object.isUndefined(window.pageXOffset)?window.pageXOffset:bodyScrollNode.scrollLeft||0;break}else{valueT+=element.scrollTop||0;valueL+=element.scrollLeft||0;element=element.parentNode}}while(element);return new Element.Offset(valueL,valueT)}function viewportOffset(forElement){var valueT=0,valueL=0,docBody=document.body;forElement=$(forElement);var element=forElement;do{valueT+=element.offsetTop||0;valueL+=element.offsetLeft||0;if(element.offsetParent==docBody&&Element.getStyle(element,"position")=="absolute")break}while(element=element.offsetParent);element=forElement;do{if(element!=docBody){valueT-=element.scrollTop||0;valueL-=element.scrollLeft||0}}while(element=element.parentNode);return new Element.Offset(valueL,valueT)}function absolutize(element){element=$(element);if(Element.getStyle(element,"position")==="absolute"){return element}var offsetParent=getOffsetParent(element);var eOffset=element.viewportOffset(),pOffset=offsetParent.viewportOffset();var offset=eOffset.relativeTo(pOffset);var layout=element.getLayout();element.store("prototype_absolutize_original_styles",{position:element.getStyle("position"),left:element.getStyle("left"),top:element.getStyle("top"),width:element.getStyle("width"),height:element.getStyle("height")});element.setStyle({position:"absolute",top:offset.top+"px",left:offset.left+"px",width:layout.get("width")+"px",height:layout.get("height")+"px"});return element}function relativize(element){element=$(element);if(Element.getStyle(element,"position")==="relative"){return element}var originalStyles=element.retrieve("prototype_absolutize_original_styles");if(originalStyles)element.setStyle(originalStyles);return element}function scrollTo(element){element=$(element);var pos=Element.cumulativeOffset(element);window.scrollTo(pos.left,pos.top);return element}function makePositioned(element){element=$(element);var position=Element.getStyle(element,"position"),styles={};if(position==="static"||!position){styles.position="relative";if(Prototype.Browser.Opera){styles.top=0;styles.left=0}Element.setStyle(element,styles);Element.store(element,"prototype_made_positioned",true)}return element}function undoPositioned(element){element=$(element);var storage=Element.getStorage(element),madePositioned=storage.get("prototype_made_positioned");if(madePositioned){storage.unset("prototype_made_positioned");Element.setStyle(element,{position:"",top:"",bottom:"",left:"",right:""})}return element}function makeClipping(element){element=$(element);var storage=Element.getStorage(element),madeClipping=storage.get("prototype_made_clipping");if(Object.isUndefined(madeClipping)){var overflow=Element.getStyle(element,"overflow");storage.set("prototype_made_clipping",overflow);if(overflow!=="hidden")element.style.overflow="hidden"}return element}function undoClipping(element){element=$(element);var storage=Element.getStorage(element),overflow=storage.get("prototype_made_clipping");if(!Object.isUndefined(overflow)){storage.unset("prototype_made_clipping");element.style.overflow=overflow||""}return element}function clonePosition(element,source,options){options=Object.extend({setLeft:true,setTop:true,setWidth:true,setHeight:true,offsetTop:0,offsetLeft:0},options||{});source=$(source);element=$(element);var p,delta,layout,styles={};if(options.setLeft||options.setTop){p=Element.viewportOffset(source);delta=[0,0];if(Element.getStyle(element,"position")==="absolute"){var parent=Element.getOffsetParent(element);if(parent!==document.body)delta=Element.viewportOffset(parent)}}if(options.setWidth||options.setHeight){layout=Element.getLayout(source)}if(options.setLeft)styles.left=p[0]-delta[0]+options.offsetLeft+"px";if(options.setTop)styles.top=p[1]-delta[1]+options.offsetTop+"px";if(options.setWidth)styles.width=layout.get("border-box-width")+"px";if(options.setHeight)styles.height=layout.get("border-box-height")+"px";return Element.setStyle(element,styles)}if(Prototype.Browser.IE){getOffsetParent=getOffsetParent.wrap(function(proceed,element){element=$(element);if(isDocument(element)||isDetached(element)||isBody(element)||isHtml(element))return $(document.body);var position=element.getStyle("position");if(position!=="static")return proceed(element);element.setStyle({position:"relative"});var value=proceed(element);element.setStyle({position:position});return value});positionedOffset=positionedOffset.wrap(function(proceed,element){element=$(element);if(!element.parentNode)return new Element.Offset(0,0);var position=element.getStyle("position"); +Math.crossProduct = function(x, y){ + [ + x[1]*y[2]-x[2]*y[1], + x[2]*y[0]-x[0]*y[2], + x[0]*y[1]-x[1]*y[0] + ] +} -if(position!=="static")return proceed(element);var offsetParent=element.getOffsetParent();if(offsetParent&&offsetParent.getStyle("position")==="fixed")hasLayout(offsetParent);element.setStyle({position:"relative"});var value=proceed(element);element.setStyle({position:position});return value})}else if(Prototype.Browser.Webkit){cumulativeOffset=function(element){element=$(element);var valueT=0,valueL=0;do{valueT+=element.offsetTop||0;valueL+=element.offsetLeft||0;if(element.offsetParent==document.body){if(Element.getStyle(element,"position")=="absolute")break}element=element.offsetParent}while(element);return new Element.Offset(valueL,valueT)}}Element.addMethods({getLayout:getLayout,measure:measure,getWidth:getWidth,getHeight:getHeight,getDimensions:getDimensions,getOffsetParent:getOffsetParent,cumulativeOffset:cumulativeOffset,positionedOffset:positionedOffset,cumulativeScrollOffset:cumulativeScrollOffset,viewportOffset:viewportOffset,absolutize:absolutize,relativize:relativize,scrollTo:scrollTo,makePositioned:makePositioned,undoPositioned:undoPositioned,makeClipping:makeClipping,undoClipping:undoClipping,clonePosition:clonePosition});function isBody(element){return element.nodeName.toUpperCase()==="BODY"}function isHtml(element){return element.nodeName.toUpperCase()==="HTML"}function isDocument(element){return element.nodeType===Node.DOCUMENT_NODE}function isDetached(element){return element!==document.body&&!Element.descendantOf(element,document.body)}if("getBoundingClientRect"in document.documentElement){Element.addMethods({viewportOffset:function(element){element=$(element);if(isDetached(element))return new Element.Offset(0,0);var rect=element.getBoundingClientRect(),docEl=document.documentElement;return new Element.Offset(rect.left-docEl.clientLeft,rect.top-docEl.clientTop)}})}})();(function(){var IS_OLD_OPERA=Prototype.Browser.Opera&&window.parseFloat(window.opera.version())<9.5;var ROOT=null;function getRootElement(){if(ROOT)return ROOT;ROOT=IS_OLD_OPERA?document.body:document.documentElement;return ROOT}function getDimensions(){return{width:this.getWidth(),height:this.getHeight()}}function getWidth(){return getRootElement().clientWidth}function getHeight(){return getRootElement().clientHeight}function getScrollOffsets(){var x=window.pageXOffset||document.documentElement.scrollLeft||document.body.scrollLeft;var y=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop;return new Element.Offset(x,y)}document.viewport={getDimensions:getDimensions,getWidth:getWidth,getHeight:getHeight,getScrollOffsets:getScrollOffsets}})();window.$$=function(){var expression=$A(arguments).join(", ");return Prototype.Selector.select(expression,document)};Prototype.Selector=function(){function select(){throw new Error('Method "Prototype.Selector.select" must be defined.')}function match(){throw new Error('Method "Prototype.Selector.match" must be defined.')}function find(elements,expression,index){index=index||0;var match=Prototype.Selector.match,length=elements.length,matchIndex=0,i;for(i=0;i+~]|"+whitespace+")"+whitespace+"*"),rattributeQuotes=new RegExp("="+whitespace+"*([^\\]'\"]*?)"+whitespace+"*\\]","g"),rpseudo=new RegExp(pseudos),ridentifier=new RegExp("^"+identifier+"$"),matchExpr={ID:new RegExp("^#("+characterEncoding+")"),CLASS:new RegExp("^\\.("+characterEncoding+")"),TAG:new RegExp("^("+characterEncoding.replace("w","w*")+")"),ATTR:new RegExp("^"+attributes),PSEUDO:new RegExp("^"+pseudos),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+whitespace+"*(even|odd|(([+-]|)(\\d*)n|)"+whitespace+"*(?:([+-]|)"+whitespace+"*(\\d+)|))"+whitespace+"*\\)|)","i"),bool:new RegExp("^(?:"+booleans+")$","i"),needsContext:new RegExp("^"+whitespace+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+whitespace+"*((?:-\\d)?\\d*)"+whitespace+"*\\)|)(?=[^-]|$)","i")},rinputs=/^(?:input|select|textarea|button)$/i,rheader=/^h\d$/i,rnative=/^[^{]+\{\s*\[native \w/,rquickExpr=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,rsibling=/[+~]/,rescape=/'|\\/g,runescape=new RegExp("\\\\([\\da-f]{1,6}"+whitespace+"?|("+whitespace+")|.)","ig"),funescape=function(_,escaped,escapedWhitespace){var high="0x"+escaped-65536;return high!==high||escapedWhitespace?escaped:high<0?String.fromCharCode(high+65536):String.fromCharCode(high>>10|55296,high&1023|56320)};try{push.apply(arr=slice.call(preferredDoc.childNodes),preferredDoc.childNodes);arr[preferredDoc.childNodes.length].nodeType}catch(e){push={apply:arr.length?function(target,els){push_native.apply(target,slice.call(els))}:function(target,els){var j=target.length,i=0;while(target[j++]=els[i++]){}target.length=j-1}}}function Sizzle(selector,context,results,seed){var match,elem,m,nodeType,i,groups,old,nid,newContext,newSelector;if((context?context.ownerDocument||context:preferredDoc)!==document){setDocument(context)}context=context||document;results=results||[];if(!selector||typeof selector!=="string"){return results}if((nodeType=context.nodeType)!==1&&nodeType!==9){return[]}if(documentIsHTML&&!seed){if(match=rquickExpr.exec(selector)){if(m=match[1]){if(nodeType===9){elem=context.getElementById(m);if(elem&&elem.parentNode){if(elem.id===m){results.push(elem);return results}}else{return results}}else{if(context.ownerDocument&&(elem=context.ownerDocument.getElementById(m))&&contains(context,elem)&&elem.id===m){results.push(elem);return results}}}else if(match[2]){push.apply(results,context.getElementsByTagName(selector));return results}else if((m=match[3])&&support.getElementsByClassName&&context.getElementsByClassName){push.apply(results,context.getElementsByClassName(m));return results}}if(support.qsa&&(!rbuggyQSA||!rbuggyQSA.test(selector))){nid=old=expando;newContext=context;newSelector=nodeType===9&&selector;if(nodeType===1&&context.nodeName.toLowerCase()!=="object"){groups=tokenize(selector);if(old=context.getAttribute("id")){nid=old.replace(rescape,"\\$&")}else{context.setAttribute("id",nid)}nid="[id='"+nid+"'] ";i=groups.length;while(i--){groups[i]=nid+toSelector(groups[i])}newContext=rsibling.test(selector)&&testContext(context.parentNode)||context;newSelector=groups.join(",")}if(newSelector){try{push.apply(results,newContext.querySelectorAll(newSelector));return results}catch(qsaError){}finally{if(!old){context.removeAttribute("id")}}}}}return select(selector.replace(rtrim,"$1"),context,results,seed)}function createCache(){var keys=[];function cache(key,value){if(keys.push(key+" ")>Expr.cacheLength){delete cache[keys.shift()]}return cache[key+" "]=value}return cache}function markFunction(fn){fn[expando]=true;return fn}function assert(fn){var div=document.createElement("div");try{return!!fn(div)}catch(e){return false}finally{if(div.parentNode){div.parentNode.removeChild(div)}div=null}}function addHandle(attrs,handler){var arr=attrs.split("|"),i=attrs.length;while(i--){Expr.attrHandle[arr[i]]=handler}}function siblingCheck(a,b){var cur=b&&a,diff=cur&&a.nodeType===1&&b.nodeType===1&&(~b.sourceIndex||MAX_NEGATIVE)-(~a.sourceIndex||MAX_NEGATIVE);if(diff){return diff}if(cur){while(cur=cur.nextSibling){if(cur===b){return-1}}}return a?1:-1}function createInputPseudo(type){return function(elem){var name=elem.nodeName.toLowerCase();return name==="input"&&elem.type===type}}function createButtonPseudo(type){return function(elem){var name=elem.nodeName.toLowerCase();return(name==="input"||name==="button")&&elem.type===type}}function createPositionalPseudo(fn){return markFunction(function(argument){argument=+argument;return markFunction(function(seed,matches){var j,matchIndexes=fn([],seed.length,argument),i=matchIndexes.length;while(i--){if(seed[j=matchIndexes[i]]){seed[j]=!(matches[j]=seed[j])}}})})}function testContext(context){return context&&typeof context.getElementsByTagName!==strundefined&&context}support=Sizzle.support={};isXML=Sizzle.isXML=function(elem){var documentElement=elem&&(elem.ownerDocument||elem).documentElement;return documentElement?documentElement.nodeName!=="HTML":false};setDocument=Sizzle.setDocument=function(node){var hasCompare,doc=node?node.ownerDocument||node:preferredDoc,parent=doc.defaultView;if(doc===document||doc.nodeType!==9||!doc.documentElement){return document}document=doc;docElem=doc.documentElement;documentIsHTML=!isXML(doc);if(parent&&parent!==parent.top){if(parent.addEventListener){parent.addEventListener("unload",function(){setDocument()},false)}else if(parent.attachEvent){parent.attachEvent("onunload",function(){setDocument()})}}support.attributes=assert(function(div){div.className="i";return!div.getAttribute("className")});support.getElementsByTagName=assert(function(div){div.appendChild(doc.createComment(""));return!div.getElementsByTagName("*").length});support.getElementsByClassName=rnative.test(doc.getElementsByClassName)&&assert(function(div){div.innerHTML="
    ";div.firstChild.className="i";return div.getElementsByClassName("i").length===2});support.getById=assert(function(div){docElem.appendChild(div).id=expando;return!doc.getElementsByName||!doc.getElementsByName(expando).length});if(support.getById){Expr.find["ID"]=function(id,context){if(typeof context.getElementById!==strundefined&&documentIsHTML){var m=context.getElementById(id);return m&&m.parentNode?[m]:[]}};Expr.filter["ID"]=function(id){var attrId=id.replace(runescape,funescape);return function(elem){return elem.getAttribute("id")===attrId}}}else{delete Expr.find["ID"];Expr.filter["ID"]=function(id){var attrId=id.replace(runescape,funescape);return function(elem){var node=typeof elem.getAttributeNode!==strundefined&&elem.getAttributeNode("id");return node&&node.value===attrId}}}Expr.find["TAG"]=support.getElementsByTagName?function(tag,context){if(typeof context.getElementsByTagName!==strundefined){return context.getElementsByTagName(tag)}}:function(tag,context){var elem,tmp=[],i=0,results=context.getElementsByTagName(tag);if(tag==="*"){while(elem=results[i++]){if(elem.nodeType===1){tmp.push(elem)}}return tmp}return results};Expr.find["CLASS"]=support.getElementsByClassName&&function(className,context){if(typeof context.getElementsByClassName!==strundefined&&documentIsHTML){return context.getElementsByClassName(className)}};rbuggyMatches=[];rbuggyQSA=[];if(support.qsa=rnative.test(doc.querySelectorAll)){assert(function(div){div.innerHTML="";if(div.querySelectorAll("[t^='']").length){rbuggyQSA.push("[*^$]="+whitespace+"*(?:''|\"\")")}if(!div.querySelectorAll("[selected]").length){rbuggyQSA.push("\\["+whitespace+"*(?:value|"+booleans+")")}if(!div.querySelectorAll(":checked").length){rbuggyQSA.push(":checked")}});assert(function(div){var input=doc.createElement("input");input.setAttribute("type","hidden");div.appendChild(input).setAttribute("name","D");if(div.querySelectorAll("[name=d]").length){rbuggyQSA.push("name"+whitespace+"*[*^$|!~]?=")}if(!div.querySelectorAll(":enabled").length){rbuggyQSA.push(":enabled",":disabled")}div.querySelectorAll("*,:x");rbuggyQSA.push(",.*:")})}if(support.matchesSelector=rnative.test(matches=docElem.webkitMatchesSelector||docElem.mozMatchesSelector||docElem.oMatchesSelector||docElem.msMatchesSelector)){assert(function(div){support.disconnectedMatch=matches.call(div,"div");matches.call(div,"[s!='']:x");rbuggyMatches.push("!=",pseudos)})}rbuggyQSA=rbuggyQSA.length&&new RegExp(rbuggyQSA.join("|"));rbuggyMatches=rbuggyMatches.length&&new RegExp(rbuggyMatches.join("|"));hasCompare=rnative.test(docElem.compareDocumentPosition);contains=hasCompare||rnative.test(docElem.contains)?function(a,b){var adown=a.nodeType===9?a.documentElement:a,bup=b&&b.parentNode;return a===bup||!!(bup&&bup.nodeType===1&&(adown.contains?adown.contains(bup):a.compareDocumentPosition&&a.compareDocumentPosition(bup)&16))}:function(a,b){if(b){while(b=b.parentNode){if(b===a){return true}}}return false};sortOrder=hasCompare?function(a,b){if(a===b){hasDuplicate=true;return 0}var compare=!a.compareDocumentPosition-!b.compareDocumentPosition;if(compare){return compare}compare=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1;if(compare&1||!support.sortDetached&&b.compareDocumentPosition(a)===compare){if(a===doc||a.ownerDocument===preferredDoc&&contains(preferredDoc,a)){return-1}if(b===doc||b.ownerDocument===preferredDoc&&contains(preferredDoc,b)){return 1}return sortInput?indexOf.call(sortInput,a)-indexOf.call(sortInput,b):0}return compare&4?-1:1}:function(a,b){if(a===b){hasDuplicate=true;return 0}var cur,i=0,aup=a.parentNode,bup=b.parentNode,ap=[a],bp=[b];if(!aup||!bup){return a===doc?-1:b===doc?1:aup?-1:bup?1:sortInput?indexOf.call(sortInput,a)-indexOf.call(sortInput,b):0}else if(aup===bup){return siblingCheck(a,b)}cur=a;while(cur=cur.parentNode){ap.unshift(cur)}cur=b;while(cur=cur.parentNode){bp.unshift(cur)}while(ap[i]===bp[i]){i++}return i?siblingCheck(ap[i],bp[i]):ap[i]===preferredDoc?-1:bp[i]===preferredDoc?1:0};return doc};Sizzle.matches=function(expr,elements){return Sizzle(expr,null,null,elements)};Sizzle.matchesSelector=function(elem,expr){if((elem.ownerDocument||elem)!==document){setDocument(elem)}expr=expr.replace(rattributeQuotes,"='$1']");if(support.matchesSelector&&documentIsHTML&&(!rbuggyMatches||!rbuggyMatches.test(expr))&&(!rbuggyQSA||!rbuggyQSA.test(expr))){try{var ret=matches.call(elem,expr);if(ret||support.disconnectedMatch||elem.document&&elem.document.nodeType!==11){return ret}}catch(e){}}return Sizzle(expr,document,null,[elem]).length>0};Sizzle.contains=function(context,elem){if((context.ownerDocument||context)!==document){setDocument(context)}return contains(context,elem)};Sizzle.attr=function(elem,name){if((elem.ownerDocument||elem)!==document){setDocument(elem)}var fn=Expr.attrHandle[name.toLowerCase()],val=fn&&hasOwn.call(Expr.attrHandle,name.toLowerCase())?fn(elem,name,!documentIsHTML):undefined;return val!==undefined?val:support.attributes||!documentIsHTML?elem.getAttribute(name):(val=elem.getAttributeNode(name))&&val.specified?val.value:null};Sizzle.error=function(msg){throw new Error("Syntax error, unrecognized expression: "+msg)};Sizzle.uniqueSort=function(results){var elem,duplicates=[],j=0,i=0;hasDuplicate=!support.detectDuplicates;sortInput=!support.sortStable&&results.slice(0);results.sort(sortOrder);if(hasDuplicate){while(elem=results[i++]){if(elem===results[i]){j=duplicates.push(i)}}while(j--){results.splice(duplicates[j],1)}}sortInput=null;return results};getText=Sizzle.getText=function(elem){var node,ret="",i=0,nodeType=elem.nodeType;if(!nodeType){while(node=elem[i++]){ret+=getText(node)}}else if(nodeType===1||nodeType===9||nodeType===11){if(typeof elem.textContent==="string"){return elem.textContent}else{for(elem=elem.firstChild;elem;elem=elem.nextSibling){ret+=getText(elem)}}}else if(nodeType===3||nodeType===4){return elem.nodeValue}return ret};Expr=Sizzle.selectors={cacheLength:50,createPseudo:markFunction,match:matchExpr,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:true}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:true},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(match){match[1]=match[1].replace(runescape,funescape);match[3]=(match[4]||match[5]||"").replace(runescape,funescape);if(match[2]==="~="){match[3]=" "+match[3]+" "}return match.slice(0,4)},CHILD:function(match){match[1]=match[1].toLowerCase();if(match[1].slice(0,3)==="nth"){if(!match[3]){Sizzle.error(match[0])}match[4]=+(match[4]?match[5]+(match[6]||1):2*(match[3]==="even"||match[3]==="odd"));match[5]=+(match[7]+match[8]||match[3]==="odd")}else if(match[3]){Sizzle.error(match[0])}return match},PSEUDO:function(match){var excess,unquoted=!match[5]&&match[2];if(matchExpr["CHILD"].test(match[0])){return null}if(match[3]&&match[4]!==undefined){match[2]=match[4]}else if(unquoted&&rpseudo.test(unquoted)&&(excess=tokenize(unquoted,true))&&(excess=unquoted.indexOf(")",unquoted.length-excess)-unquoted.length)){match[0]=match[0].slice(0,excess);match[2]=unquoted.slice(0,excess)}return match.slice(0,3)}},filter:{TAG:function(nodeNameSelector){var nodeName=nodeNameSelector.replace(runescape,funescape).toLowerCase();return nodeNameSelector==="*"?function(){return true}:function(elem){return elem.nodeName&&elem.nodeName.toLowerCase()===nodeName}},CLASS:function(className){var pattern=classCache[className+" "];return pattern||(pattern=new RegExp("(^|"+whitespace+")"+className+"("+whitespace+"|$)"))&&classCache(className,function(elem){return pattern.test(typeof elem.className==="string"&&elem.className||typeof elem.getAttribute!==strundefined&&elem.getAttribute("class")||"")})},ATTR:function(name,operator,check){return function(elem){var result=Sizzle.attr(elem,name);if(result==null){return operator==="!="}if(!operator){return true}result+="";return operator==="="?result===check:operator==="!="?result!==check:operator==="^="?check&&result.indexOf(check)===0:operator==="*="?check&&result.indexOf(check)>-1:operator==="$="?check&&result.slice(-check.length)===check:operator==="~="?(" "+result+" ").indexOf(check)>-1:operator==="|="?result===check||result.slice(0,check.length+1)===check+"-":false}},CHILD:function(type,what,argument,first,last){var simple=type.slice(0,3)!=="nth",forward=type.slice(-4)!=="last",ofType=what==="of-type";return first===1&&last===0?function(elem){return!!elem.parentNode}:function(elem,context,xml){var cache,outerCache,node,diff,nodeIndex,start,dir=simple!==forward?"nextSibling":"previousSibling",parent=elem.parentNode,name=ofType&&elem.nodeName.toLowerCase(),useCache=!xml&&!ofType;if(parent){if(simple){while(dir){node=elem;while(node=node[dir]){if(ofType?node.nodeName.toLowerCase()===name:node.nodeType===1){return false}}start=dir=type==="only"&&!start&&"nextSibling"}return true}start=[forward?parent.firstChild:parent.lastChild];if(forward&&useCache){outerCache=parent[expando]||(parent[expando]={});cache=outerCache[type]||[];nodeIndex=cache[0]===dirruns&&cache[1];diff=cache[0]===dirruns&&cache[2];node=nodeIndex&&parent.childNodes[nodeIndex];while(node=++nodeIndex&&node&&node[dir]||(diff=nodeIndex=0)||start.pop()){if(node.nodeType===1&&++diff&&node===elem){outerCache[type]=[dirruns,nodeIndex,diff];break}}}else if(useCache&&(cache=(elem[expando]||(elem[expando]={}))[type])&&cache[0]===dirruns){diff=cache[1]}else{while(node=++nodeIndex&&node&&node[dir]||(diff=nodeIndex=0)||start.pop()){if((ofType?node.nodeName.toLowerCase()===name:node.nodeType===1)&&++diff){if(useCache){(node[expando]||(node[expando]={}))[type]=[dirruns,diff]}if(node===elem){break}}}}diff-=last;return diff===first||diff%first===0&&diff/first>=0}}},PSEUDO:function(pseudo,argument){var args,fn=Expr.pseudos[pseudo]||Expr.setFilters[pseudo.toLowerCase()]||Sizzle.error("unsupported pseudo: "+pseudo);if(fn[expando]){return fn(argument)}if(fn.length>1){args=[pseudo,pseudo,"",argument];return Expr.setFilters.hasOwnProperty(pseudo.toLowerCase())?markFunction(function(seed,matches){var idx,matched=fn(seed,argument),i=matched.length;while(i--){idx=indexOf.call(seed,matched[i]);seed[idx]=!(matches[idx]=matched[i])}}):function(elem){return fn(elem,0,args)}}return fn}},pseudos:{not:markFunction(function(selector){var input=[],results=[],matcher=compile(selector.replace(rtrim,"$1"));return matcher[expando]?markFunction(function(seed,matches,context,xml){var elem,unmatched=matcher(seed,null,xml,[]),i=seed.length;while(i--){if(elem=unmatched[i]){seed[i]=!(matches[i]=elem)}}}):function(elem,context,xml){input[0]=elem;matcher(input,null,xml,results);return!results.pop()}}),has:markFunction(function(selector){return function(elem){return Sizzle(selector,elem).length>0}}),contains:markFunction(function(text){return function(elem){return(elem.textContent||elem.innerText||getText(elem)).indexOf(text)>-1}}),lang:markFunction(function(lang){if(!ridentifier.test(lang||"")){Sizzle.error("unsupported lang: "+lang)}lang=lang.replace(runescape,funescape).toLowerCase();return function(elem){var elemLang;do{if(elemLang=documentIsHTML?elem.lang:elem.getAttribute("xml:lang")||elem.getAttribute("lang")){elemLang=elemLang.toLowerCase();return elemLang===lang||elemLang.indexOf(lang+"-")===0}}while((elem=elem.parentNode)&&elem.nodeType===1);return false}}),target:function(elem){var hash=window.location&&window.location.hash;return hash&&hash.slice(1)===elem.id},root:function(elem){return elem===docElem},focus:function(elem){return elem===document.activeElement&&(!document.hasFocus||document.hasFocus())&&!!(elem.type||elem.href||~elem.tabIndex)},enabled:function(elem){return elem.disabled===false},disabled:function(elem){return elem.disabled===true},checked:function(elem){var nodeName=elem.nodeName.toLowerCase();return nodeName==="input"&&!!elem.checked||nodeName==="option"&&!!elem.selected},selected:function(elem){if(elem.parentNode){elem.parentNode.selectedIndex}return elem.selected===true},empty:function(elem){for(elem=elem.firstChild;elem;elem=elem.nextSibling){if(elem.nodeType<6){return false}}return true},parent:function(elem){return!Expr.pseudos["empty"](elem)},header:function(elem){return rheader.test(elem.nodeName)},input:function(elem){return rinputs.test(elem.nodeName)},button:function(elem){var name=elem.nodeName.toLowerCase();return name==="input"&&elem.type==="button"||name==="button"},text:function(elem){var attr;return elem.nodeName.toLowerCase()==="input"&&elem.type==="text"&&((attr=elem.getAttribute("type"))==null||attr.toLowerCase()==="text")},first:createPositionalPseudo(function(){return[0]}),last:createPositionalPseudo(function(matchIndexes,length){return[length-1]}),eq:createPositionalPseudo(function(matchIndexes,length,argument){return[argument<0?argument+length:argument]}),even:createPositionalPseudo(function(matchIndexes,length){var i=0;for(;i=0;){matchIndexes.push(i)}return matchIndexes}),gt:createPositionalPseudo(function(matchIndexes,length,argument){var i=argument<0?argument+length:argument;for(;++i1?function(elem,context,xml){var i=matchers.length;while(i--){if(!matchers[i](elem,context,xml)){return false}}return true}:matchers[0]}function multipleContexts(selector,contexts,results){var i=0,len=contexts.length;for(;i-1){seed[temp]=!(results[temp]=elem)}}}}else{matcherOut=condense(matcherOut===results?matcherOut.splice(preexisting,matcherOut.length):matcherOut);if(postFinder){postFinder(null,results,matcherOut,xml)}else{push.apply(results,matcherOut)}}})}function matcherFromTokens(tokens){var checkContext,matcher,j,len=tokens.length,leadingRelative=Expr.relative[tokens[0].type],implicitRelative=leadingRelative||Expr.relative[" "],i=leadingRelative?1:0,matchContext=addCombinator(function(elem){return elem===checkContext},implicitRelative,true),matchAnyContext=addCombinator(function(elem){return indexOf.call(checkContext,elem)>-1},implicitRelative,true),matchers=[function(elem,context,xml){return!leadingRelative&&(xml||context!==outermostContext)||((checkContext=context).nodeType?matchContext(elem,context,xml):matchAnyContext(elem,context,xml))}];for(;i1&&elementMatcher(matchers),i>1&&toSelector(tokens.slice(0,i-1).concat({value:tokens[i-2].type===" "?"*":""})).replace(rtrim,"$1"),matcher,i0,byElement=elementMatchers.length>0,superMatcher=function(seed,context,xml,results,outermost){var elem,j,matcher,matchedCount=0,i="0",unmatched=seed&&[],setMatched=[],contextBackup=outermostContext,elems=seed||byElement&&Expr.find["TAG"]("*",outermost),dirrunsUnique=dirruns+=contextBackup==null?1:Math.random()||.1,len=elems.length;if(outermost){outermostContext=context!==document&&context}for(;i!==len&&(elem=elems[i])!=null;i++){if(byElement&&elem){j=0;while(matcher=elementMatchers[j++]){if(matcher(elem,context,xml)){results.push(elem);break}}if(outermost){dirruns=dirrunsUnique}}if(bySet){if(elem=!matcher&&elem){matchedCount--}if(seed){unmatched.push(elem)}}}matchedCount+=i;if(bySet&&i!==matchedCount){j=0;while(matcher=setMatchers[j++]){matcher(unmatched,setMatched,context,xml)}if(seed){if(matchedCount>0){while(i--){if(!(unmatched[i]||setMatched[i])){setMatched[i]=pop.call(results)}}}setMatched=condense(setMatched)}push.apply(results,setMatched);if(outermost&&!seed&&setMatched.length>0&&matchedCount+setMatchers.length>1){Sizzle.uniqueSort(results)}}if(outermost){dirruns=dirrunsUnique;outermostContext=contextBackup}return unmatched};return bySet?markFunction(superMatcher):superMatcher}compile=Sizzle.compile=function(selector,match){var i,setMatchers=[],elementMatchers=[],cached=compilerCache[selector+" "];if(!cached){if(!match){match=tokenize(selector)}i=match.length;while(i--){cached=matcherFromTokens(match[i]);if(cached[expando]){setMatchers.push(cached)}else{elementMatchers.push(cached)}}cached=compilerCache(selector,matcherFromGroupMatchers(elementMatchers,setMatchers));cached.selector=selector}return cached};select=Sizzle.select=function(selector,context,results,seed){var i,tokens,token,type,find,compiled=typeof selector==="function"&&selector,match=!seed&&tokenize(selector=compiled.selector||selector);results=results||[];if(match.length===1){tokens=match[0]=match[0].slice(0);if(tokens.length>2&&(token=tokens[0]).type==="ID"&&support.getById&&context.nodeType===9&&documentIsHTML&&Expr.relative[tokens[1].type]){context=(Expr.find["ID"](token.matches[0].replace(runescape,funescape),context)||[])[0];if(!context){return results}else if(compiled){context=context.parentNode}selector=selector.slice(tokens.shift().value.length)}i=matchExpr["needsContext"].test(selector)?0:tokens.length;while(i--){token=tokens[i];if(Expr.relative[type=token.type]){break}if(find=Expr.find[type]){if(seed=find(token.matches[0].replace(runescape,funescape),rsibling.test(tokens[0].type)&&testContext(context.parentNode)||context)){ -tokens.splice(i,1);selector=seed.length&&toSelector(tokens);if(!selector){push.apply(results,seed);return results}break}}}}(compiled||compile(selector,match))(seed,context,!documentIsHTML,results,rsibling.test(selector)&&testContext(context.parentNode)||context);return results};support.sortStable=expando.split("").sort(sortOrder).join("")===expando;support.detectDuplicates=!!hasDuplicate;setDocument();support.sortDetached=assert(function(div1){return div1.compareDocumentPosition(document.createElement("div"))&1});if(!assert(function(div){div.innerHTML="";return div.firstChild.getAttribute("href")==="#"})){addHandle("type|href|height|width",function(elem,name,isXML){if(!isXML){return elem.getAttribute(name,name.toLowerCase()==="type"?1:2)}})}if(!support.attributes||!assert(function(div){div.innerHTML="";div.firstChild.setAttribute("value","");return div.firstChild.getAttribute("value")===""})){addHandle("value",function(elem,name,isXML){if(!isXML&&elem.nodeName.toLowerCase()==="input"){return elem.defaultValue}})}if(!assert(function(div){return div.getAttribute("disabled")==null})){addHandle(booleans,function(elem,name,isXML){var val;if(!isXML){return elem[name]===true?name.toLowerCase():(val=elem.getAttributeNode(name))&&val.specified?val.value:null}})}if(typeof define==="function"&&define.amd){define(function(){return Sizzle})}else if(typeof module!=="undefined"&&module.exports){module.exports=Sizzle}else{window.Sizzle=Sizzle}})(window);(function(engine){var extendElements=Prototype.Selector.extendElements;function select(selector,scope){return extendElements(engine(selector,scope||document))}function match(element,selector){return engine.matches(selector,[element]).length==1}Prototype.Selector.engine=engine;Prototype.Selector.select=select;Prototype.Selector.match=match})(Sizzle);window.Sizzle=Prototype._original_property;delete Prototype._original_property;var Form={reset:function(form){form=$(form);form.reset();return form},serializeElements:function(elements,options){if(typeof options!="object")options={hash:!!options};else if(Object.isUndefined(options.hash))options.hash=true;var key,value,submitted=false,submit=options.submit,accumulator,initial;if(options.hash){initial={};accumulator=function(result,key,value){if(key in result){if(!Object.isArray(result[key]))result[key]=[result[key]];result[key]=result[key].concat(value)}else result[key]=value;return result}}else{initial="";accumulator=function(result,key,values){if(!Object.isArray(values)){values=[values]}if(!values.length){return result}var encodedKey=encodeURIComponent(key).gsub(/%20/,"+");return result+(result?"&":"")+values.map(function(value){value=value.gsub(/(\r)?\n/,"\r\n");value=encodeURIComponent(value);value=value.gsub(/%20/,"+");return encodedKey+"="+value}).join("&")}}return elements.inject(initial,function(result,element){if(!element.disabled&&element.name){key=element.name;value=$(element).getValue();if(value!=null&&element.type!="file"&&(element.type!="submit"||!submitted&&submit!==false&&(!submit||key==submit)&&(submitted=true))){result=accumulator(result,key,value)}}return result})}};Form.Methods={serialize:function(form,options){return Form.serializeElements(Form.getElements(form),options)},getElements:function(form){var elements=$(form).getElementsByTagName("*");var element,results=[],serializers=Form.Element.Serializers;for(var i=0;element=elements[i];i++){if(serializers[element.tagName.toLowerCase()])results.push(Element.extend(element))}return results},getInputs:function(form,typeName,name){form=$(form);var inputs=form.getElementsByTagName("input");if(!typeName&&!name)return $A(inputs).map(Element.extend);for(var i=0,matchingInputs=[],length=inputs.length;i=0}).sortBy(function(element){return element.tabIndex}).first();return firstByIndex?firstByIndex:elements.find(function(element){return/^(?:input|select|textarea)$/i.test(element.tagName)})},focusFirstElement:function(form){form=$(form);var element=form.findFirstElement();if(element)element.activate();return form},request:function(form,options){form=$(form),options=Object.clone(options||{});var params=options.parameters,action=form.readAttribute("action")||"";if(action.blank())action=window.location.href;options.parameters=form.serialize(true);if(params){if(Object.isString(params))params=params.toQueryParams();Object.extend(options.parameters,params)}if(form.hasAttribute("method")&&!options.method)options.method=form.method;return new Ajax.Request(action,options)}};Form.Element={focus:function(element){$(element).focus();return element},select:function(element){$(element).select();return element}};Form.Element.Methods={serialize:function(element){element=$(element);if(!element.disabled&&element.name){var value=element.getValue();if(value!=undefined){var pair={};pair[element.name]=value;return Object.toQueryString(pair)}}return""},getValue:function(element){element=$(element);var method=element.tagName.toLowerCase();return Form.Element.Serializers[method](element)},setValue:function(element,value){element=$(element);var method=element.tagName.toLowerCase();Form.Element.Serializers[method](element,value);return element},clear:function(element){$(element).value="";return element},present:function(element){return $(element).value!=""},activate:function(element){element=$(element);try{element.focus();if(element.select&&(element.tagName.toLowerCase()!="input"||!/^(?:button|reset|submit)$/i.test(element.type)))element.select()}catch(e){}return element},disable:function(element){element=$(element);element.disabled=true;return element},enable:function(element){element=$(element);element.disabled=false;return element}};var Field=Form.Element;var $F=Form.Element.Methods.getValue;Form.Element.Serializers=function(){function input(element,value){switch(element.type.toLowerCase()){case"checkbox":case"radio":return inputSelector(element,value);default:return valueSelector(element,value)}}function inputSelector(element,value){if(Object.isUndefined(value))return element.checked?element.value:null;else element.checked=!!value}function valueSelector(element,value){if(Object.isUndefined(value))return element.value;else element.value=value}function select(element,value){if(Object.isUndefined(value))return(element.type==="select-one"?selectOne:selectMany)(element);var opt,currentValue,single=!Object.isArray(value);for(var i=0,length=element.length;i=0?optionValue(element.options[index]):null}function selectMany(element){var values,length=element.length;if(!length)return null;for(var i=0,values=[];i=this.offset[1]&&y=this.offset[0]&&x=this.offset[1]&&this.ycomp=this.offset[0]&&this.xcomp0})._each(iterator,context)},set:function(className){this.element.className=className},add:function(classNameToAdd){if(this.include(classNameToAdd))return;this.set($A(this).concat(classNameToAdd).join(" "))},remove:function(classNameToRemove){if(!this.include(classNameToRemove))return;this.set($A(this).without(classNameToRemove).join(" "))},toString:function(){return $A(this).join(" ")}};Object.extend(Element.ClassNames.prototype,Enumerable);(function(){window.Selector=Class.create({initialize:function(expression){this.expression=expression.strip()},findElements:function(rootElement){return Prototype.Selector.select(this.expression,rootElement)},match:function(element){return Prototype.Selector.match(element,this.expression)},toString:function(){return this.expression},inspect:function(){return"#"}});Object.extend(Selector,{matchElements:function(elements,expression){var match=Prototype.Selector.match,results=[];for(var i=0,length=elements.length;i=y;y++)if(l=Math.sin(h),m=Math.tan(h),r=m*Math.sqrt(1-t*l*l),c=Math.sin(2*h),u=i*h-s*c+e*Math.sin(4*h)-o*Math.sin(6*h),d=i-2*s*Math.cos(2*h)+4*e*Math.cos(4*h)-6*o*Math.cos(6*h),p=2*u+r*(u*u+a)-2*n*(r*u+1),_=t*c*(u*u+a-2*n*u)/(2*r),f=2*(n-u)*(r*d-2/c)-2*d,P=p/(_+f),h+=P,1e-10>=Math.abs(P))return h;return Proj4js.reportError("phi4z: No convergence"),null}function e4fn(t){var i,s;return i=1+t,s=1-t,Math.sqrt(Math.pow(i,i)*Math.pow(s,s))}var Proj4js={defaultDatum:"WGS84",transform:function(t,i,s){if(!t.readyToUse)return this.reportError("Proj4js initialization for:"+t.srsCode+" not yet complete"),s;if(!i.readyToUse)return this.reportError("Proj4js initialization for:"+i.srsCode+" not yet complete"),s;if(t.datum&&i.datum&&((t.datum.datum_type==Proj4js.common.PJD_3PARAM||t.datum.datum_type==Proj4js.common.PJD_7PARAM)&&"WGS84"!=i.datumCode||(i.datum.datum_type==Proj4js.common.PJD_3PARAM||i.datum.datum_type==Proj4js.common.PJD_7PARAM)&&"WGS84"!=t.datumCode)){var e=Proj4js.WGS84;this.transform(t,e,s),t=e}return"enu"!=t.axis&&this.adjust_axis(t,!1,s),"longlat"==t.projName?(s.x*=Proj4js.common.D2R,s.y*=Proj4js.common.D2R):(t.to_meter&&(s.x*=t.to_meter,s.y*=t.to_meter),t.inverse(s)),t.from_greenwich&&(s.x+=t.from_greenwich),s=this.datum_transform(t.datum,i.datum,s),i.from_greenwich&&(s.x-=i.from_greenwich),"longlat"==i.projName?(s.x*=Proj4js.common.R2D,s.y*=Proj4js.common.R2D):(i.forward(s),i.to_meter&&(s.x/=i.to_meter,s.y/=i.to_meter)),"enu"!=i.axis&&this.adjust_axis(i,!0,s),s},datum_transform:function(t,i,s){return t.compare_datums(i)?s:t.datum_type==Proj4js.common.PJD_NODATUM||i.datum_type==Proj4js.common.PJD_NODATUM?s:((t.es!=i.es||t.a!=i.a||t.datum_type==Proj4js.common.PJD_3PARAM||t.datum_type==Proj4js.common.PJD_7PARAM||i.datum_type==Proj4js.common.PJD_3PARAM||i.datum_type==Proj4js.common.PJD_7PARAM)&&(t.geodetic_to_geocentric(s),(t.datum_type==Proj4js.common.PJD_3PARAM||t.datum_type==Proj4js.common.PJD_7PARAM)&&t.geocentric_to_wgs84(s),(i.datum_type==Proj4js.common.PJD_3PARAM||i.datum_type==Proj4js.common.PJD_7PARAM)&&i.geocentric_from_wgs84(s),i.geocentric_to_geodetic(s)),s)},adjust_axis:function(t,i,s){for(var e,o,n=s.x,a=s.y,r=s.z||0,h=0;3>h;h++)if(!i||2!=h||void 0!==s.z)switch(0==h?(e=n,o="x"):1==h?(e=a,o="y"):(e=r,o="z"),t.axis[h]){case"e":s[o]=e;break;case"w":s[o]=-e;break;case"n":s[o]=e;break;case"s":s[o]=-e;break;case"u":void 0!==s[o]&&(s.z=e);break;case"d":void 0!==s[o]&&(s.z=-e);break;default:return alert("ERROR: unknow axis ("+t.axis[h]+") - check definition of "+t.projName),null}return s},reportError:function(){},extend:function(t,i){if(t=t||{},i)for(var s in i){var e=i[s];void 0!==e&&(t[s]=e)}return t},Class:function(){for(var t,i=function(){this.initialize.apply(this,arguments)},s={},e=0;arguments.length>e;++e)t="function"==typeof arguments[e]?arguments[e].prototype:arguments[e],Proj4js.extend(s,t);return i.prototype=s,i},bind:function(t,i){var s=Array.prototype.slice.apply(arguments,[2]);return function(){var e=s.concat(Array.prototype.slice.apply(arguments,[0])); +Math.sign = Math.sign || function(x) { + x = +x; // convert to a number + if (x === 0 || isNaN(x)) { + return x; + } + return x > 0 ? 1 : -1; +} -return t.apply(i,e)}},scriptName:"proj4js-combined.js",defsLookupService:"http://spatialreference.org/ref",libPath:null,getScriptLocation:function(){if(this.libPath)return this.libPath;for(var t=this.scriptName,i=t.length,s=document.getElementsByTagName("script"),e=0;s.length>e;e++){var o=s[e].getAttribute("src");if(o){var n=o.lastIndexOf(t);if(n>-1&&n+i==o.length){this.libPath=o.slice(0,-i);break}}}return this.libPath||""},loadScript:function(t,i,s,e){var o=document.createElement("script");o.defer=!1,o.type="text/javascript",o.id=t,o.src=t,o.onload=i,o.onerror=s,o.loadCheck=e,/MSIE/.test(navigator.userAgent)&&(o.onreadystatechange=this.checkReadyState),document.getElementsByTagName("head")[0].appendChild(o)},checkReadyState:function(){"loaded"==this.readyState&&(this.loadCheck()?this.onload():this.onerror())}};Proj4js.Proj=Proj4js.Class({readyToUse:!1,title:null,projName:null,units:null,datum:null,x0:0,y0:0,localCS:!1,queue:null,initialize:function(t,i){if(this.srsCodeInput=t,this.queue=[],i&&this.queue.push(i),t.indexOf("GEOGCS")>=0||t.indexOf("GEOCCS")>=0||t.indexOf("PROJCS")>=0||t.indexOf("LOCAL_CS")>=0)return this.parseWKT(t),this.deriveConstants(),this.loadProjCode(this.projName),void 0;if(0==t.indexOf("urn:")){var s=t.split(":");"ogc"!=s[1]&&"x-ogc"!=s[1]||"def"!=s[2]||"crs"!=s[3]||(t=s[4]+":"+s[s.length-1])}else if(0==t.indexOf("http://")){var e=t.split("#");e[0].match(/epsg.org/)?t="EPSG:"+e[1]:e[0].match(/RIG.xml/)&&(t="IGNF:"+e[1])}this.srsCode=t.toUpperCase(),0==this.srsCode.indexOf("EPSG")?(this.srsCode=this.srsCode,this.srsAuth="epsg",this.srsProjNumber=this.srsCode.substring(5)):0==this.srsCode.indexOf("IGNF")?(this.srsCode=this.srsCode,this.srsAuth="IGNF",this.srsProjNumber=this.srsCode.substring(5)):0==this.srsCode.indexOf("CRS")?(this.srsCode=this.srsCode,this.srsAuth="CRS",this.srsProjNumber=this.srsCode.substring(4)):(this.srsAuth="",this.srsProjNumber=this.srsCode),this.loadProjDefinition()},loadProjDefinition:function(){if(Proj4js.defs[this.srsCode])return this.defsLoaded(),void 0;var t=Proj4js.getScriptLocation()+"defs/"+this.srsAuth.toUpperCase()+this.srsProjNumber+".js";Proj4js.loadScript(t,Proj4js.bind(this.defsLoaded,this),Proj4js.bind(this.loadFromService,this),Proj4js.bind(this.checkDefsLoaded,this))},loadFromService:function(){var t=Proj4js.defsLookupService+"/"+this.srsAuth+"/"+this.srsProjNumber+"/proj4js/";Proj4js.loadScript(t,Proj4js.bind(this.defsLoaded,this),Proj4js.bind(this.defsFailed,this),Proj4js.bind(this.checkDefsLoaded,this))},defsLoaded:function(){this.parseDefs(),this.loadProjCode(this.projName)},checkDefsLoaded:function(){return Proj4js.defs[this.srsCode]?!0:!1},defsFailed:function(){Proj4js.reportError("failed to load projection definition for: "+this.srsCode),Proj4js.defs[this.srsCode]=Proj4js.defs.WGS84,this.defsLoaded()},loadProjCode:function(t){if(Proj4js.Proj[t])return this.initTransforms(),void 0;var i=Proj4js.getScriptLocation()+"projCode/"+t+".js";Proj4js.loadScript(i,Proj4js.bind(this.loadProjCodeSuccess,this,t),Proj4js.bind(this.loadProjCodeFailure,this,t),Proj4js.bind(this.checkCodeLoaded,this,t))},loadProjCodeSuccess:function(t){Proj4js.Proj[t].dependsOn?this.loadProjCode(Proj4js.Proj[t].dependsOn):this.initTransforms()},loadProjCodeFailure:function(t){Proj4js.reportError("failed to find projection file for: "+t)},checkCodeLoaded:function(t){return Proj4js.Proj[t]?!0:!1},initTransforms:function(){if(Proj4js.extend(this,Proj4js.Proj[this.projName]),this.init(),this.readyToUse=!0,this.queue)for(var t;t=this.queue.shift();)t.call(this,this)},wktRE:/^(\w+)\[(.*)\]$/,parseWKT:function(t){var i=t.match(this.wktRE);if(i){var s,e=i[1],o=i[2],n=o.split(",");s="TOWGS84"==e.toUpperCase()?e:n.shift(),s=s.replace(/^\"/,""),s=s.replace(/\"$/,"");for(var a=[],r=0,h="",l=0;n.length>l;++l){for(var c=n[l],m=0;c.length>m;++m)"["==c.charAt(m)&&++r,"]"==c.charAt(m)&&--r;h+=c,0===r?(a.push(h),h=""):h+=","}switch(e){case"LOCAL_CS":this.projName="identity",this.localCS=!0,this.srsCode=s;break;case"GEOGCS":this.projName="longlat",this.geocsCode=s,this.srsCode||(this.srsCode=s);break;case"PROJCS":this.srsCode=s;break;case"GEOCCS":break;case"PROJECTION":this.projName=Proj4js.wktProjections[s];break;case"DATUM":this.datumName=s;break;case"LOCAL_DATUM":this.datumCode="none";break;case"SPHEROID":this.ellps=s,this.a=parseFloat(a.shift()),this.rf=parseFloat(a.shift());break;case"PRIMEM":this.from_greenwich=parseFloat(a.shift());break;case"UNIT":this.units=s,this.unitsPerMeter=parseFloat(a.shift());break;case"PARAMETER":var u=s.toLowerCase(),d=parseFloat(a.shift());switch(u){case"false_easting":this.x0=d;break;case"false_northing":this.y0=d;break;case"scale_factor":this.k0=d;break;case"central_meridian":this.long0=d*Proj4js.common.D2R;break;case"latitude_of_origin":this.lat0=d*Proj4js.common.D2R;break;case"more_here":break;default:}break;case"TOWGS84":this.datum_params=a;break;case"AXIS":var u=s.toLowerCase(),d=a.shift();switch(d){case"EAST":d="e";break;case"WEST":d="w";break;case"NORTH":d="n";break;case"SOUTH":d="s";break;case"UP":d="u";break;case"DOWN":d="d";break;case"OTHER":default:d=" "}switch(this.axis||(this.axis="enu"),u){case"x":this.axis=d+this.axis.substr(1,2);break;case"y":this.axis=this.axis.substr(0,1)+d+this.axis.substr(2,1);break;case"z":this.axis=this.axis.substr(0,2)+d;break;default:}case"MORE_HERE":break;default:}for(var l=0;a.length>l;++l)this.parseWKT(a[l])}},parseDefs:function(){this.defData=Proj4js.defs[this.srsCode];var t,i;if(this.defData){for(var s=this.defData.split("+"),e=0;s.length>e;e++){var o=s[e].split("=");switch(t=o[0].toLowerCase(),i=o[1],t.replace(/\s/gi,"")){case"":break;case"title":this.title=i;break;case"proj":this.projName=i.replace(/\s/gi,"");break;case"units":this.units=i.replace(/\s/gi,"");break;case"datum":this.datumCode=i.replace(/\s/gi,"");break;case"nadgrids":this.nagrids=i.replace(/\s/gi,"");break;case"ellps":this.ellps=i.replace(/\s/gi,"");break;case"a":this.a=parseFloat(i);break;case"b":this.b=parseFloat(i);break;case"rf":this.rf=parseFloat(i);break;case"lat_0":this.lat0=i*Proj4js.common.D2R;break;case"lat_1":this.lat1=i*Proj4js.common.D2R;break;case"lat_2":this.lat2=i*Proj4js.common.D2R;break;case"lat_ts":this.lat_ts=i*Proj4js.common.D2R;break;case"lon_0":this.long0=i*Proj4js.common.D2R;break;case"alpha":this.alpha=parseFloat(i)*Proj4js.common.D2R;break;case"lonc":this.longc=i*Proj4js.common.D2R;break;case"x_0":this.x0=parseFloat(i);break;case"y_0":this.y0=parseFloat(i);break;case"k_0":this.k0=parseFloat(i);break;case"k":this.k0=parseFloat(i);break;case"r_a":this.R_A=!0;break;case"zone":this.zone=parseInt(i,10);break;case"south":this.utmSouth=!0;break;case"towgs84":this.datum_params=i.split(",");break;case"to_meter":this.to_meter=parseFloat(i);break;case"from_greenwich":this.from_greenwich=i*Proj4js.common.D2R;break;case"pm":i=i.replace(/\s/gi,""),this.from_greenwich=Proj4js.PrimeMeridian[i]?Proj4js.PrimeMeridian[i]:parseFloat(i),this.from_greenwich*=Proj4js.common.D2R;break;case"axis":i=i.replace(/\s/gi,"");var n="ewnsud";3==i.length&&-1!=n.indexOf(i.substr(0,1))&&-1!=n.indexOf(i.substr(1,1))&&-1!=n.indexOf(i.substr(2,1))&&(this.axis=i);break;case"no_defs":break;default:}}this.deriveConstants()}},deriveConstants:function(){if("@null"==this.nagrids&&(this.datumCode="none"),this.datumCode&&"none"!=this.datumCode){var t=Proj4js.Datum[this.datumCode];t&&(this.datum_params=t.towgs84?t.towgs84.split(","):null,this.ellps=t.ellipse,this.datumName=t.datumName?t.datumName:this.datumCode)}if(!this.a){var i=Proj4js.Ellipsoid[this.ellps]?Proj4js.Ellipsoid[this.ellps]:Proj4js.Ellipsoid.WGS84;Proj4js.extend(this,i)}this.rf&&!this.b&&(this.b=(1-1/this.rf)*this.a),(0===this.rf||Math.abs(this.a-this.b)=a;a++)if(s=t*Math.sin(n),e=this.HALF_PI-2*Math.atan(i*Math.pow((1-s)/(1+s),o))-n,n+=e,1e-10>=Math.abs(e))return n;return alert("phi2z has NoConvergence"),-9999},qsfnz:function(t,i){var s;return t>1e-7?(s=t*i,(1-t*t)*(i/(1-s*s)-.5/t*Math.log((1-s)/(1+s)))):2*i},asinz:function(t){return Math.abs(t)>1&&(t=t>1?1:-1),Math.asin(t)},e0fn:function(t){return 1-.25*t*(1+t/16*(3+1.25*t))},e1fn:function(t){return.375*t*(1+.25*t*(1+.46875*t))},e2fn:function(t){return.05859375*t*t*(1+.75*t)},e3fn:function(t){return t*t*t*(35/3072)},mlfn:function(t,i,s,e,o){return t*o-i*Math.sin(2*o)+s*Math.sin(4*o)-e*Math.sin(6*o)},srat:function(t,i){return Math.pow((1-t)/(1+t),i)},sign:function(t){return 0>t?-1:1},adjust_lon:function(t){return t=Math.abs(t)this.HALF_PI)return+Number.NaN;if(i==this.HALF_PI)return Number.POSITIVE_INFINITY;if(i==-1*this.HALF_PI)return-1*Number.POSITIVE_INFINITY;var e=t*s;return Math.log(Math.tan((this.HALF_PI+i)/2))+t*Math.log((1-e)/(1+e))/2},fL:function(t,i){return 2*Math.atan(t*Math.exp(i))-this.HALF_PI},invlatiso:function(t,i){var s=this.fL(1,i),e=0,o=0;do e=s,o=t*Math.sin(e),s=this.fL(Math.exp(t*Math.log((1+o)/(1-o))/2),i);while(Math.abs(s-e)>1e-12);return s},sinh:function(t){var i=Math.exp(t);return i=(i-1/i)/2},cosh:function(t){var i=Math.exp(t);return i=(i+1/i)/2},tanh:function(t){var i=Math.exp(t);return i=(i-1/i)/(i+1/i)},asinh:function(t){var i=t>=0?1:-1;return i*Math.log(Math.abs(t)+Math.sqrt(t*t+1))},acosh:function(t){return 2*Math.log(Math.sqrt((t+1)/2)+Math.sqrt((t-1)/2))},atanh:function(t){return Math.log((t-1)/(t+1))/2},gN:function(t,i,s){var e=i*s;return t/Math.sqrt(1-e*e)},pj_enfn:function(t){var i=[];i[0]=this.C00-t*(this.C02+t*(this.C04+t*(this.C06+t*this.C08))),i[1]=t*(this.C22-t*(this.C04+t*(this.C06+t*this.C08)));var s=t*t;return i[2]=s*(this.C44-t*(this.C46+t*this.C48)),s*=t,i[3]=s*(this.C66-t*this.C68),i[4]=s*t*this.C88,i},pj_mlfn:function(t,i,s,e){return s*=i,i*=i,e[0]*t-s*(e[1]+i*(e[2]+i*(e[3]+i*e[4])))},pj_inv_mlfn:function(t,i,s){for(var e=1/(1-i),o=t,n=Proj4js.common.MAX_ITER;n;--n){var a=Math.sin(o),r=1-i*a*a;if(r=(this.pj_mlfn(o,a,Math.cos(o),s)-t)*r*Math.sqrt(r)*e,o-=r,Math.abs(r)i;i++)t.datum_params[i]=parseFloat(t.datum_params[i]);(0!=t.datum_params[0]||0!=t.datum_params[1]||0!=t.datum_params[2])&&(this.datum_type=Proj4js.common.PJD_3PARAM),t.datum_params.length>3&&(0!=t.datum_params[3]||0!=t.datum_params[4]||0!=t.datum_params[5]||0!=t.datum_params[6])&&(this.datum_type=Proj4js.common.PJD_7PARAM,t.datum_params[3]*=Proj4js.common.SEC_TO_RAD,t.datum_params[4]*=Proj4js.common.SEC_TO_RAD,t.datum_params[5]*=Proj4js.common.SEC_TO_RAD,t.datum_params[6]=t.datum_params[6]/1e6+1)}t&&(this.a=t.a,this.b=t.b,this.es=t.es,this.ep2=t.ep2,this.datum_params=t.datum_params)},compare_datums:function(t){return this.datum_type!=t.datum_type?!1:this.a!=t.a||Math.abs(this.es-t.es)>5e-11?!1:this.datum_type==Proj4js.common.PJD_3PARAM?this.datum_params[0]==t.datum_params[0]&&this.datum_params[1]==t.datum_params[1]&&this.datum_params[2]==t.datum_params[2]:this.datum_type==Proj4js.common.PJD_7PARAM?this.datum_params[0]==t.datum_params[0]&&this.datum_params[1]==t.datum_params[1]&&this.datum_params[2]==t.datum_params[2]&&this.datum_params[3]==t.datum_params[3]&&this.datum_params[4]==t.datum_params[4]&&this.datum_params[5]==t.datum_params[5]&&this.datum_params[6]==t.datum_params[6]:this.datum_type==Proj4js.common.PJD_GRIDSHIFT||t.datum_type==Proj4js.common.PJD_GRIDSHIFT?(alert("ERROR: Grid shift transformations are not implemented."),!1):!0},geodetic_to_geocentric:function(t){var i,s,e,o,n,a,r,h=t.x,l=t.y,c=t.z?t.z:0,m=0;if(-Proj4js.common.HALF_PI>l&&l>-1.001*Proj4js.common.HALF_PI)l=-Proj4js.common.HALF_PI;else if(l>Proj4js.common.HALF_PI&&1.001*Proj4js.common.HALF_PI>l)l=Proj4js.common.HALF_PI;else if(-Proj4js.common.HALF_PI>l||l>Proj4js.common.HALF_PI)return Proj4js.reportError("geocent:lat out of range:"+l),null;return h>Proj4js.common.PI&&(h-=2*Proj4js.common.PI),n=Math.sin(l),r=Math.cos(l),a=n*n,o=this.a/Math.sqrt(1-this.es*a),i=(o+c)*r*Math.cos(h),s=(o+c)*r*Math.sin(h),e=(o*(1-this.es)+c)*n,t.x=i,t.y=s,t.z=e,m},geocentric_to_geodetic:function(t){var i,s,e,o,n,a,r,h,l,c,m,u,d,p,_,f,P,y=1e-12,g=y*y,L=30,v=t.x,j=t.y,M=t.z?t.z:0;if(d=!1,i=Math.sqrt(v*v+j*j),s=Math.sqrt(v*v+j*j+M*M),y>i/this.a){if(d=!0,_=0,y>s/this.a)return f=Proj4js.common.HALF_PI,P=-this.b,void 0}else _=Math.atan2(j,v);e=M/s,o=i/s,n=1/Math.sqrt(1-this.es*(2-this.es)*o*o),h=o*(1-this.es)*n,l=e*n,p=0;do p++,r=this.a/Math.sqrt(1-this.es*l*l),P=i*h+M*l-r*(1-this.es*l*l),a=this.es*r/(r+P),n=1/Math.sqrt(1-a*(2-a)*o*o),c=o*(1-a)*n,m=e*n,u=m*h-c*l,h=c,l=m;while(u*u>g&&L>p);return f=Math.atan(m/Math.abs(c)),t.x=_,t.y=f,t.z=P,t},geocentric_to_geodetic_noniter:function(t){var i,s,e,o,n,a,r,h,l,c,m,u,d,p,_,f,P,y=t.x,g=t.y,L=t.z?t.z:0;if(y=parseFloat(y),g=parseFloat(g),L=parseFloat(L),P=!1,0!=y)i=Math.atan2(g,y);else if(g>0)i=Proj4js.common.HALF_PI;else if(0>g)i=-Proj4js.common.HALF_PI;else if(P=!0,i=0,L>0)s=Proj4js.common.HALF_PI;else{if(!(0>L))return s=Proj4js.common.HALF_PI,e=-this.b,void 0;s=-Proj4js.common.HALF_PI}return n=y*y+g*g,o=Math.sqrt(n),a=L*Proj4js.common.AD_C,h=Math.sqrt(a*a+n),c=a/h,u=o/h,m=c*c*c,r=L+this.b*this.ep2*m,f=o-this.a*this.es*u*u*u,l=Math.sqrt(r*r+f*f),d=r/l,p=f/l,_=this.a/Math.sqrt(1-this.es*d*d),e=p>=Proj4js.common.COS_67P5?o/p-_:-Proj4js.common.COS_67P5>=p?o/-p-_:L/d+_*(this.es-1),0==P&&(s=Math.atan(d/p)),t.x=i,t.y=s,t.z=e,t},geocentric_to_wgs84:function(t){if(this.datum_type==Proj4js.common.PJD_3PARAM)t.x+=this.datum_params[0],t.y+=this.datum_params[1],t.z+=this.datum_params[2];else if(this.datum_type==Proj4js.common.PJD_7PARAM){var i=this.datum_params[0],s=this.datum_params[1],e=this.datum_params[2],o=this.datum_params[3],n=this.datum_params[4],a=this.datum_params[5],r=this.datum_params[6],h=r*(t.x-a*t.y+n*t.z)+i,l=r*(a*t.x+t.y-o*t.z)+s,c=r*(-n*t.x+o*t.y+t.z)+e;t.x=h,t.y=l,t.z=c}},geocentric_from_wgs84:function(t){if(this.datum_type==Proj4js.common.PJD_3PARAM)t.x-=this.datum_params[0],t.y-=this.datum_params[1],t.z-=this.datum_params[2];else if(this.datum_type==Proj4js.common.PJD_7PARAM){var i=this.datum_params[0],s=this.datum_params[1],e=this.datum_params[2],o=this.datum_params[3],n=this.datum_params[4],a=this.datum_params[5],r=this.datum_params[6],h=(t.x-i)/r,l=(t.y-s)/r,c=(t.z-e)/r;t.x=h+a*l-n*c,t.y=-a*h+l+o*c,t.z=n*h-o*l+c}}}),Proj4js.Point=Proj4js.Class({initialize:function(t,i,s){if("object"==typeof t)this.x=t[0],this.y=t[1],this.z=t[2]||0;else if("string"==typeof t&&i===void 0){var e=t.split(",");this.x=parseFloat(e[0]),this.y=parseFloat(e[1]),this.z=parseFloat(e[2])||0}else this.x=t,this.y=i,this.z=s||0},clone:function(){return new Proj4js.Point(this.x,this.y,this.z)},toString:function(){return"x="+this.x+",y="+this.y},toShortString:function(){return this.x+", "+this.y}}),Proj4js.PrimeMeridian={greenwich:0,lisbon:-9.131906111111,paris:2.337229166667,bogota:-74.080916666667,madrid:-3.687938888889,rome:12.452333333333,bern:7.439583333333,jakarta:106.807719444444,ferro:-17.666666666667,brussels:4.367975,stockholm:18.058277777778,athens:23.7163375,oslo:10.722916666667},Proj4js.Ellipsoid={MERIT:{a:6378137,rf:298.257,ellipseName:"MERIT 1983"},SGS85:{a:6378136,rf:298.257,ellipseName:"Soviet Geodetic System 85"},GRS80:{a:6378137,rf:298.257222101,ellipseName:"GRS 1980(IUGG, 1980)"},IAU76:{a:6378140,rf:298.257,ellipseName:"IAU 1976"},airy:{a:6377563.396,b:6356256.91,ellipseName:"Airy 1830"},"APL4.":{a:6378137,rf:298.25,ellipseName:"Appl. Physics. 1965"},NWL9D:{a:6378145,rf:298.25,ellipseName:"Naval Weapons Lab., 1965"},mod_airy:{a:6377340.189,b:6356034.446,ellipseName:"Modified Airy"},andrae:{a:6377104.43,rf:300,ellipseName:"Andrae 1876 (Den., Iclnd.)"},aust_SA:{a:6378160,rf:298.25,ellipseName:"Australian Natl & S. Amer. 1969"},GRS67:{a:6378160,rf:298.247167427,ellipseName:"GRS 67(IUGG 1967)"},bessel:{a:6377397.155,rf:299.1528128,ellipseName:"Bessel 1841"},bess_nam:{a:6377483.865,rf:299.1528128,ellipseName:"Bessel 1841 (Namibia)"},clrk66:{a:6378206.4,b:6356583.8,ellipseName:"Clarke 1866"},clrk80:{a:6378249.145,rf:293.4663,ellipseName:"Clarke 1880 mod."},CPM:{a:6375738.7,rf:334.29,ellipseName:"Comm. des Poids et Mesures 1799"},delmbr:{a:6376428,rf:311.5,ellipseName:"Delambre 1810 (Belgium)"},engelis:{a:6378136.05,rf:298.2566,ellipseName:"Engelis 1985"},evrst30:{a:6377276.345,rf:300.8017,ellipseName:"Everest 1830"},evrst48:{a:6377304.063,rf:300.8017,ellipseName:"Everest 1948"},evrst56:{a:6377301.243,rf:300.8017,ellipseName:"Everest 1956"},evrst69:{a:6377295.664,rf:300.8017,ellipseName:"Everest 1969"},evrstSS:{a:6377298.556,rf:300.8017,ellipseName:"Everest (Sabah & Sarawak)"},fschr60:{a:6378166,rf:298.3,ellipseName:"Fischer (Mercury Datum) 1960"},fschr60m:{a:6378155,rf:298.3,ellipseName:"Fischer 1960"},fschr68:{a:6378150,rf:298.3,ellipseName:"Fischer 1968"},helmert:{a:6378200,rf:298.3,ellipseName:"Helmert 1906"},hough:{a:6378270,rf:297,ellipseName:"Hough"},intl:{a:6378388,rf:297,ellipseName:"International 1909 (Hayford)"},kaula:{a:6378163,rf:298.24,ellipseName:"Kaula 1961"},lerch:{a:6378139,rf:298.257,ellipseName:"Lerch 1979"},mprts:{a:6397300,rf:191,ellipseName:"Maupertius 1738"},new_intl:{a:6378157.5,b:6356772.2,ellipseName:"New International 1967"},plessis:{a:6376523,rf:6355863,ellipseName:"Plessis 1817 (France)"},krass:{a:6378245,rf:298.3,ellipseName:"Krassovsky, 1942"},SEasia:{a:6378155,b:6356773.3205,ellipseName:"Southeast Asia"},walbeck:{a:6376896,b:6355834.8467,ellipseName:"Walbeck"},WGS60:{a:6378165,rf:298.3,ellipseName:"WGS 60"},WGS66:{a:6378145,rf:298.25,ellipseName:"WGS 66"},WGS72:{a:6378135,rf:298.26,ellipseName:"WGS 72"},WGS84:{a:6378137,rf:298.257223563,ellipseName:"WGS 84"},sphere:{a:6370997,b:6370997,ellipseName:"Normal Sphere (r=6370997)"}},Proj4js.Datum={WGS84:{towgs84:"0,0,0",ellipse:"WGS84",datumName:"WGS84"},GGRS87:{towgs84:"-199.87,74.79,246.62",ellipse:"GRS80",datumName:"Greek_Geodetic_Reference_System_1987"},NAD83:{towgs84:"0,0,0",ellipse:"GRS80",datumName:"North_American_Datum_1983"},NAD27:{nadgrids:"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat",ellipse:"clrk66",datumName:"North_American_Datum_1927"},potsdam:{towgs84:"606.0,23.0,413.0",ellipse:"bessel",datumName:"Potsdam Rauenberg 1950 DHDN"},carthage:{towgs84:"-263.0,6.0,431.0",ellipse:"clark80",datumName:"Carthage 1934 Tunisia"},hermannskogel:{towgs84:"653.0,-212.0,449.0",ellipse:"bessel",datumName:"Hermannskogel"},ire65:{towgs84:"482.530,-130.596,564.557,-1.042,-0.214,-0.631,8.15",ellipse:"mod_airy",datumName:"Ireland 1965"},nzgd49:{towgs84:"59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993",ellipse:"intl",datumName:"New Zealand Geodetic Datum 1949"},OSGB36:{towgs84:"446.448,-125.157,542.060,0.1502,0.2470,0.8421,-20.4894",ellipse:"airy",datumName:"Airy 1830"}},Proj4js.WGS84=new Proj4js.Proj("WGS84"),Proj4js.Datum.OSB36=Proj4js.Datum.OSGB36,Proj4js.wktProjections={"Lambert Tangential Conformal Conic Projection":"lcc",Mercator:"merc","Popular Visualisation Pseudo Mercator":"merc",Mercator_1SP:"merc",Transverse_Mercator:"tmerc","Transverse Mercator":"tmerc","Lambert Azimuthal Equal Area":"laea","Universal Transverse Mercator System":"utm"},Proj4js.Proj.aea={init:function(){return Math.abs(this.lat1+this.lat2)Proj4js.common.EPSLN?(this.ms1*this.ms1-this.ms2*this.ms2)/(this.qs2-this.qs1):this.con,this.c=this.ms1*this.ms1+this.ns0*this.qs1,this.rh=this.a*Math.sqrt(this.c-this.ns0*this.qs0)/this.ns0,void 0)},forward:function(t){var i=t.x,s=t.y;this.sin_phi=Math.sin(s),this.cos_phi=Math.cos(s);var e=Proj4js.common.qsfnz(this.e3,this.sin_phi,this.cos_phi),o=this.a*Math.sqrt(this.c-this.ns0*e)/this.ns0,n=this.ns0*Proj4js.common.adjust_lon(i-this.long0),a=o*Math.sin(n)+this.x0,r=this.rh-o*Math.cos(n)+this.y0;return t.x=a,t.y=r,t},inverse:function(t){var i,s,e,o,n,a;return t.x-=this.x0,t.y=this.rh-t.y+this.y0,this.ns0>=0?(i=Math.sqrt(t.x*t.x+t.y*t.y),e=1):(i=-Math.sqrt(t.x*t.x+t.y*t.y),e=-1),o=0,0!=i&&(o=Math.atan2(e*t.x,e*t.y)),e=i*this.ns0/this.a,s=(this.c-e*e)/this.ns0,this.e3>=1e-10?(e=1-.5*(1-this.es)*Math.log((1-this.e3)/(1+this.e3))/this.e3,a=Math.abs(Math.abs(e)-Math.abs(s))>1e-10?this.phi1z(this.e3,s):s>=0?.5*Proj4js.common.PI:-.5*Proj4js.common.PI):a=this.phi1z(this.e3,s),n=Proj4js.common.adjust_lon(o/this.ns0+this.long0),t.x=n,t.y=a,t},phi1z:function(t,i){var s,e,o,n,a,r=Proj4js.common.asinz(.5*i);if(Proj4js.common.EPSLN>t)return r;for(var h=t*t,l=1;25>=l;l++)if(s=Math.sin(r),e=Math.cos(r),o=t*s,n=1-o*o,a=.5*n*n/e*(i/(1-h)-s/n+.5/t*Math.log((1-o)/(1+o))),r+=a,1e-7>=Math.abs(a))return r;return Proj4js.reportError("aea:phi1z:Convergence error"),null}},Proj4js.Proj.sterea={dependsOn:"gauss",init:function(){return Proj4js.Proj.gauss.init.apply(this),this.rc?(this.sinc0=Math.sin(this.phic0),this.cosc0=Math.cos(this.phic0),this.R2=2*this.rc,this.title||(this.title="Oblique Stereographic Alternative"),void 0):(Proj4js.reportError("sterea:init:E_ERROR_0"),void 0)},forward:function(t){var i,s,e,o;return t.x=Proj4js.common.adjust_lon(t.x-this.long0),Proj4js.Proj.gauss.forward.apply(this,[t]),i=Math.sin(t.y),s=Math.cos(t.y),e=Math.cos(t.x),o=this.k0*this.R2/(1+this.sinc0*i+this.cosc0*s*e),t.x=o*s*Math.sin(t.x),t.y=o*(this.cosc0*i-this.sinc0*s*e),t.x=this.a*t.x+this.x0,t.y=this.a*t.y+this.y0,t},inverse:function(t){var i,s,e,o,n;if(t.x=(t.x-this.x0)/this.a,t.y=(t.y-this.y0)/this.a,t.x/=this.k0,t.y/=this.k0,n=Math.sqrt(t.x*t.x+t.y*t.y)){var a=2*Math.atan2(n,this.R2);i=Math.sin(a),s=Math.cos(a),o=Math.asin(s*this.sinc0+t.y*i*this.cosc0/n),e=Math.atan2(t.x*i,n*this.cosc0*s-t.y*this.sinc0*i)}else o=this.phic0,e=0;return t.x=e,t.y=o,Proj4js.Proj.gauss.inverse.apply(this,[t]),t.x=Proj4js.common.adjust_lon(t.x+this.long0),t}},Proj4js.Proj.poly={init:function(){0==this.lat0&&(this.lat0=90),this.temp=this.b/this.a,this.es=1-Math.pow(this.temp,2),this.e=Math.sqrt(this.es),this.e0=Proj4js.common.e0fn(this.es),this.e1=Proj4js.common.e1fn(this.es),this.e2=Proj4js.common.e2fn(this.es),this.e3=Proj4js.common.e3fn(this.es),this.ml0=Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,this.lat0)},forward:function(t){var i,s,e,o,n,a,r,h=t.x,l=t.y;return e=Proj4js.common.adjust_lon(h-this.long0),1e-7>=Math.abs(l)?(a=this.x0+this.a*e,r=this.y0-this.a*this.ml0):(i=Math.sin(l),s=Math.cos(l),o=Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,l),n=Proj4js.common.msfnz(this.e,i,s),e=i,a=this.x0+this.a*n*Math.sin(e)/i,r=this.y0+this.a*(o-this.ml0+n*(1-Math.cos(e))/i)),t.x=a,t.y=r,t},inverse:function(t){var i,s,e,o,n,a;if(t.x-=this.x0,t.y-=this.y0,i=this.ml0+t.y/this.a,o=0,1e-7>=Math.abs(i))n=t.x/this.a+this.long0,a=0;else{if(s=i*i+t.x/this.a*(t.x/this.a),o=phi4z(this.es,this.e0,this.e1,this.e2,this.e3,this.al,s,e,a),1!=o)return o;n=Proj4js.common.adjust_lon(Proj4js.common.asinz(t.x*e/this.a)/Math.sin(a)+this.long0)}return t.x=n,t.y=a,t}},Proj4js.Proj.equi={init:function(){this.x0||(this.x0=0),this.y0||(this.y0=0),this.lat0||(this.lat0=0),this.long0||(this.long0=0)},forward:function(t){var i=t.x,s=t.y,e=Proj4js.common.adjust_lon(i-this.long0),o=this.x0+this.a*e*Math.cos(this.lat0),n=this.y0+this.a*s;return this.t1=o,this.t2=Math.cos(this.lat0),t.x=o,t.y=n,t},inverse:function(t){t.x-=this.x0,t.y-=this.y0;var i=t.y/this.a;Math.abs(i)>Proj4js.common.HALF_PI&&Proj4js.reportError("equi:Inv:DataError");var s=Proj4js.common.adjust_lon(this.long0+t.x/(this.a*Math.cos(this.lat0)));t.x=s,t.y=i}},Proj4js.Proj.merc={init:function(){this.lat_ts&&(this.k0=this.sphere?Math.cos(this.lat_ts):Proj4js.common.msfnz(this.es,Math.sin(this.lat_ts),Math.cos(this.lat_ts)))},forward:function(t){var i=t.x,s=t.y;if(s*Proj4js.common.R2D>90&&-90>s*Proj4js.common.R2D&&i*Proj4js.common.R2D>180&&-180>i*Proj4js.common.R2D)return Proj4js.reportError("merc:forward: llInputOutOfRange: "+i+" : "+s),null;var e,o;if(Math.abs(Math.abs(s)-Proj4js.common.HALF_PI)<=Proj4js.common.EPSLN)return Proj4js.reportError("merc:forward: ll2mAtPoles"),null;if(this.sphere)e=this.x0+this.a*this.k0*Proj4js.common.adjust_lon(i-this.long0),o=this.y0+this.a*this.k0*Math.log(Math.tan(Proj4js.common.FORTPI+.5*s));else{var n=Math.sin(s),a=Proj4js.common.tsfnz(this.e,s,n);e=this.x0+this.a*this.k0*Proj4js.common.adjust_lon(i-this.long0),o=this.y0-this.a*this.k0*Math.log(a)}return t.x=e,t.y=o,t},inverse:function(t){var i,s,e=t.x-this.x0,o=t.y-this.y0;if(this.sphere)s=Proj4js.common.HALF_PI-2*Math.atan(Math.exp(-o/this.a*this.k0));else{var n=Math.exp(-o/(this.a*this.k0));if(s=Proj4js.common.phi2z(this.e,n),-9999==s)return Proj4js.reportError("merc:inverse: lat = -9999"),null}return i=Proj4js.common.adjust_lon(this.long0+e/(this.a*this.k0)),t.x=i,t.y=s,t}},Proj4js.Proj.utm={dependsOn:"tmerc",init:function(){return this.zone?(this.lat0=0,this.long0=(6*Math.abs(this.zone)-183)*Proj4js.common.D2R,this.x0=5e5,this.y0=this.utmSouth?1e7:0,this.k0=.9996,Proj4js.Proj.tmerc.init.apply(this),this.forward=Proj4js.Proj.tmerc.forward,this.inverse=Proj4js.Proj.tmerc.inverse,void 0):(Proj4js.reportError("utm:init: zone must be specified for UTM"),void 0)}},Proj4js.Proj.eqdc={init:function(){this.mode||(this.mode=0),this.temp=this.b/this.a,this.es=1-Math.pow(this.temp,2),this.e=Math.sqrt(this.es),this.e0=Proj4js.common.e0fn(this.es),this.e1=Proj4js.common.e1fn(this.es),this.e2=Proj4js.common.e2fn(this.es),this.e3=Proj4js.common.e3fn(this.es),this.sinphi=Math.sin(this.lat1),this.cosphi=Math.cos(this.lat1),this.ms1=Proj4js.common.msfnz(this.e,this.sinphi,this.cosphi),this.ml1=Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,this.lat1),0!=this.mode?(Math.abs(this.lat1+this.lat2)=Proj4js.common.EPSLN?(this.ms1-this.ms2)/(this.ml2-this.ml1):this.sinphi):this.ns=this.sinphi,this.g=this.ml1+this.ms1/this.ns,this.ml0=Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,this.lat0),this.rh=this.a*(this.g-this.ml0)},forward:function(t){var i=t.x,s=t.y,e=Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,s),o=this.a*(this.g-e),n=this.ns*Proj4js.common.adjust_lon(i-this.long0),a=this.x0+o*Math.sin(n),r=this.y0+this.rh-o*Math.cos(n);return t.x=a,t.y=r,t},inverse:function(t){t.x-=this.x0,t.y=this.rh-t.y+this.y0;var i,s;this.ns>=0?(s=Math.sqrt(t.x*t.x+t.y*t.y),i=1):(s=-Math.sqrt(t.x*t.x+t.y*t.y),i=-1);var e=0;0!=s&&(e=Math.atan2(i*t.x,i*t.y));var o=this.g-s/this.a,n=this.phi3z(o,this.e0,this.e1,this.e2,this.e3),a=Proj4js.common.adjust_lon(this.long0+e/this.ns);return t.x=a,t.y=n,t},phi3z:function(t,i,s,e,o){var n,a;n=t;for(var r=0;15>r;r++)if(a=(t+s*Math.sin(2*n)-e*Math.sin(4*n)+o*Math.sin(6*n))/i-n,n+=a,1e-10>=Math.abs(a))return n;return Proj4js.reportError("PHI3Z-CONV:Latitude failed to converge after 15 iterations"),null}},Proj4js.Proj.tmerc={init:function(){this.e0=Proj4js.common.e0fn(this.es),this.e1=Proj4js.common.e1fn(this.es),this.e2=Proj4js.common.e2fn(this.es),this.e3=Proj4js.common.e3fn(this.es),this.ml0=this.a*Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,this.lat0)},forward:function(t){var i,s,e,o=t.x,n=t.y,a=Proj4js.common.adjust_lon(o-this.long0),r=Math.sin(n),h=Math.cos(n);if(this.sphere){var l=h*Math.sin(a);if(1e-10>Math.abs(Math.abs(l)-1))return Proj4js.reportError("tmerc:forward: Point projects into infinity"),93;s=.5*this.a*this.k0*Math.log((1+l)/(1-l)),i=Math.acos(h*Math.cos(a)/Math.sqrt(1-l*l)),0>n&&(i=-i),e=this.a*this.k0*(i-this.lat0)}else{var c=h*a,m=Math.pow(c,2),u=this.ep2*Math.pow(h,2),d=Math.tan(n),p=Math.pow(d,2);i=1-this.es*Math.pow(r,2);var _=this.a/Math.sqrt(i),f=this.a*Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,n);s=this.k0*_*c*(1+m/6*(1-p+u+m/20*(5-18*p+Math.pow(p,2)+72*u-58*this.ep2)))+this.x0,e=this.k0*(f-this.ml0+_*d*m*(.5+m/24*(5-p+9*u+4*Math.pow(u,2)+m/30*(61-58*p+Math.pow(p,2)+600*u-330*this.ep2))))+this.y0}return t.x=s,t.y=e,t},inverse:function(t){var i,s,e,o,n,a,r=6;if(this.sphere){var h=Math.exp(t.x/(this.a*this.k0)),l=.5*(h-1/h),c=this.lat0+t.y/(this.a*this.k0),m=Math.cos(c);i=Math.sqrt((1-m*m)/(1+l*l)),n=Proj4js.common.asinz(i),0>c&&(n=-n),a=0==l&&0==m?this.long0:Proj4js.common.adjust_lon(Math.atan2(l,m)+this.long0)}else{var u=t.x-this.x0,d=t.y-this.y0;for(i=(this.ml0+d/this.k0)/this.a,s=i,o=0;!0&&(e=(i+this.e1*Math.sin(2*s)-this.e2*Math.sin(4*s)+this.e3*Math.sin(6*s))/this.e0-s,s+=e,!(Math.abs(e)<=Proj4js.common.EPSLN));o++)if(o>=r)return Proj4js.reportError("tmerc:inverse: Latitude failed to converge"),95;if(Math.abs(s)0||Math.abs(a)<=Proj4js.common.EPSLN)var l=this.a*n*s*Math.sin(e),c=this.y0+this.a*n*(this.cos_p14*i-this.sin_p14*s*o);else Proj4js.reportError("orthoFwdPointError");return t.x=l,t.y=c,t},inverse:function(t){var i,s,e,o,n,a,r;return t.x-=this.x0,t.y-=this.y0,i=Math.sqrt(t.x*t.x+t.y*t.y),i>this.a+1e-7&&Proj4js.reportError("orthoInvDataError"),s=Proj4js.common.asinz(i/this.a),e=Math.sin(s),o=Math.cos(s),a=this.long0,Math.abs(i)<=Proj4js.common.EPSLN&&(r=this.lat0),r=Proj4js.common.asinz(o*this.sin_p14+t.y*e*this.cos_p14/i),n=Math.abs(this.lat0)-Proj4js.common.HALF_PI,Math.abs(n)<=Proj4js.common.EPSLN&&(a=this.lat0>=0?Proj4js.common.adjust_lon(this.long0+Math.atan2(t.x,-t.y)):Proj4js.common.adjust_lon(this.long0-Math.atan2(-t.x,t.y))),n=o-this.sin_p14*Math.sin(r),t.x=a,t.y=r,t}},Proj4js.Proj.krovak={init:function(){this.a=6377397.155,this.es=.006674372230614,this.e=Math.sqrt(this.es),this.lat0||(this.lat0=.863937979737193),this.long0||(this.long0=.4334234309119251),this.k0||(this.k0=.9999),this.s45=.785398163397448,this.s90=2*this.s45,this.fi0=this.lat0,this.e2=this.es,this.e=Math.sqrt(this.e2),this.alfa=Math.sqrt(1+this.e2*Math.pow(Math.cos(this.fi0),4)/(1-this.e2)),this.uq=1.04216856380474,this.u0=Math.asin(Math.sin(this.fi0)/this.alfa),this.g=Math.pow((1+this.e*Math.sin(this.fi0))/(1-this.e*Math.sin(this.fi0)),this.alfa*this.e/2),this.k=Math.tan(this.u0/2+this.s45)/Math.pow(Math.tan(this.fi0/2+this.s45),this.alfa)*this.g,this.k1=this.k0,this.n0=this.a*Math.sqrt(1-this.e2)/(1-this.e2*Math.pow(Math.sin(this.fi0),2)),this.s0=1.37008346281555,this.n=Math.sin(this.s0),this.ro0=this.k1*this.n0/Math.tan(this.s0),this.ad=this.s90-this.uq},forward:function(t){var i,s,e,o,n,a,r,h=t.x,l=t.y,c=Proj4js.common.adjust_lon(h-this.long0);return i=Math.pow((1+this.e*Math.sin(l))/(1-this.e*Math.sin(l)),this.alfa*this.e/2),s=2*(Math.atan(this.k*Math.pow(Math.tan(l/2+this.s45),this.alfa)/i)-this.s45),e=-c*this.alfa,o=Math.asin(Math.cos(this.ad)*Math.sin(s)+Math.sin(this.ad)*Math.cos(s)*Math.cos(e)),n=Math.asin(Math.cos(s)*Math.sin(e)/Math.cos(o)),a=this.n*n,r=this.ro0*Math.pow(Math.tan(this.s0/2+this.s45),this.n)/Math.pow(Math.tan(o/2+this.s45),this.n),t.y=r*Math.cos(a)/1,t.x=r*Math.sin(a)/1,this.czech&&(t.y*=-1,t.x*=-1),t},inverse:function(t){var i,s,e,o,n,a,r,h,l=t.x;t.x=t.y,t.y=l,this.czech&&(t.y*=-1,t.x*=-1),a=Math.sqrt(t.x*t.x+t.y*t.y),n=Math.atan2(t.y,t.x),o=n/Math.sin(this.s0),e=2*(Math.atan(Math.pow(this.ro0/a,1/this.n)*Math.tan(this.s0/2+this.s45))-this.s45),i=Math.asin(Math.cos(this.ad)*Math.sin(e)-Math.sin(this.ad)*Math.cos(e)*Math.cos(o)),s=Math.asin(Math.cos(e)*Math.sin(o)/Math.cos(i)),t.x=this.long0-s/this.alfa,r=i,h=0;var c=0;do t.y=2*(Math.atan(Math.pow(this.k,-1/this.alfa)*Math.pow(Math.tan(i/2+this.s45),1/this.alfa)*Math.pow((1+this.e*Math.sin(r))/(1-this.e*Math.sin(r)),this.e/2))-this.s45),1e-10>Math.abs(r-t.y)&&(h=1),r=t.y,c+=1;while(0==h&&15>c);return c>=15?(Proj4js.reportError("PHI3Z-CONV:Latitude failed to converge after 15 iterations"),null):t}},Proj4js.Proj.somerc={init:function(){var t=this.lat0;this.lambda0=this.long0;var i=Math.sin(t),s=this.a,e=this.rf,o=1/e,n=2*o-Math.pow(o,2),a=this.e=Math.sqrt(n);this.R=this.k0*s*Math.sqrt(1-n)/(1-n*Math.pow(i,2)),this.alpha=Math.sqrt(1+n/(1-n)*Math.pow(Math.cos(t),4)),this.b0=Math.asin(i/this.alpha),this.K=Math.log(Math.tan(Math.PI/4+this.b0/2))-this.alpha*Math.log(Math.tan(Math.PI/4+t/2))+this.alpha*a/2*Math.log((1+a*i)/(1-a*i))},forward:function(t){var i=Math.log(Math.tan(Math.PI/4-t.y/2)),s=this.e/2*Math.log((1+this.e*Math.sin(t.y))/(1-this.e*Math.sin(t.y))),e=-this.alpha*(i+s)+this.K,o=2*(Math.atan(Math.exp(e))-Math.PI/4),n=this.alpha*(t.x-this.lambda0),a=Math.atan(Math.sin(n)/(Math.sin(this.b0)*Math.tan(o)+Math.cos(this.b0)*Math.cos(n))),r=Math.asin(Math.cos(this.b0)*Math.sin(o)-Math.sin(this.b0)*Math.cos(o)*Math.cos(n));return t.y=this.R/2*Math.log((1+Math.sin(r))/(1-Math.sin(r)))+this.y0,t.x=this.R*a+this.x0,t},inverse:function(t){for(var i=t.x-this.x0,s=t.y-this.y0,e=i/this.R,o=2*(Math.atan(Math.exp(s/this.R))-Math.PI/4),n=Math.asin(Math.cos(this.b0)*Math.sin(o)+Math.sin(this.b0)*Math.cos(o)*Math.cos(e)),a=Math.atan(Math.sin(e)/(Math.cos(this.b0)*Math.cos(e)-Math.sin(this.b0)*Math.tan(o))),r=this.lambda0+a/this.alpha,h=0,l=n,c=-1e3,m=0;Math.abs(l-c)>1e-7;){if(++m>20)return Proj4js.reportError("omercFwdInfinity"),void 0;h=1/this.alpha*(Math.log(Math.tan(Math.PI/4+n/2))-this.K)+this.e*Math.log(Math.tan(Math.PI/4+Math.asin(this.e*Math.sin(l))/2)),c=l,l=2*Math.atan(Math.exp(h))-Math.PI/2}return t.x=r,t.y=l,t}},Proj4js.Proj.stere={ssfn_:function(t,i,s){return i*=s,Math.tan(.5*(Proj4js.common.HALF_PI+t))*Math.pow((1-i)/(1+i),.5*s)},TOL:1e-8,NITER:8,CONV:1e-10,S_POLE:0,N_POLE:1,OBLIQ:2,EQUIT:3,init:function(){this.phits=this.lat_ts?this.lat_ts:Proj4js.common.HALF_PI;var t=Math.abs(this.lat0);if(this.mode=Math.abs(t)-Proj4js.common.HALF_PIthis.lat0?this.S_POLE:this.N_POLE:t>Proj4js.common.EPSLN?this.OBLIQ:this.EQUIT,this.phits=Math.abs(this.phits),this.es){var i;switch(this.mode){case this.N_POLE:case this.S_POLE:Math.abs(this.phits-Proj4js.common.HALF_PI)=Proj4js.common.EPSLN?Math.cos(this.phits)/Math.tan(Proj4js.common.FORTPI-.5*this.phits):2*this.k0}},forward:function(t){var i=t.x;i=Proj4js.common.adjust_lon(i-this.long0);var s,e,o=t.y;if(this.sphere){var n,a,r,h;switch(n=Math.sin(o),a=Math.cos(o),r=Math.cos(i),h=Math.sin(i),this.mode){case this.EQUIT:e=1+a*r,Proj4js.common.EPSLN>=e&&Proj4js.reportError("stere:forward:Equit"),e=this.akm1/e,s=e*a*h,e*=n;break;case this.OBLIQ:e=1+this.sinph0*n+this.cosph0*a*r,Proj4js.common.EPSLN>=e&&Proj4js.reportError("stere:forward:Obliq"),e=this.akm1/e,s=e*a*h,e*=this.cosph0*n-this.sinph0*a*r;break;case this.N_POLE:r=-r,o=-o;case this.S_POLE:Math.abs(o-Proj4js.common.HALF_PI)=l;l++)r*=n,h+=this.A[l]*r;for(var c,m,u=h,d=a,p=1,_=0,f=0,P=0,l=1;6>=l;l++)c=p*u-_*d,m=_*u+p*d,p=c,_=m,f=f+this.B_re[l]*p-this.B_im[l]*_,P=P+this.B_im[l]*p+this.B_re[l]*_;return t.x=P*this.a+this.x0,t.y=f*this.a+this.y0,t},inverse:function(t){for(var i,s,e=t.x,o=t.y,n=e-this.x0,a=o-this.y0,r=a/this.a,h=n/this.a,l=1,c=0,m=0,u=0,d=1;6>=d;d++)i=l*r-c*h,s=c*r+l*h,l=i,c=s,m=m+this.C_re[d]*l-this.C_im[d]*c,u=u+this.C_im[d]*l+this.C_re[d]*c;for(var p=0;this.iterations>p;p++){for(var _,f,P=m,y=u,g=r,L=h,d=2;6>=d;d++)_=P*m-y*u,f=y*m+P*u,P=_,y=f,g+=(d-1)*(this.B_re[d]*P-this.B_im[d]*y),L+=(d-1)*(this.B_im[d]*P+this.B_re[d]*y);P=1,y=0;for(var v=this.B_re[1],j=this.B_im[1],d=2;6>=d;d++)_=P*m-y*u,f=y*m+P*u,P=_,y=f,v+=d*(this.B_re[d]*P-this.B_im[d]*y),j+=d*(this.B_im[d]*P+this.B_re[d]*y);var M=v*v+j*j;m=(g*v+L*j)/M,u=(L*v-g*j)/M}for(var S=m,b=u,x=1,E=0,d=1;9>=d;d++)x*=S,E+=this.D[d]*x;var C=this.lat0+1e5*E*Proj4js.common.SEC_TO_RAD,w=this.long0+b;return t.x=w,t.y=C,t}},Proj4js.Proj.mill={init:function(){},forward:function(t){var i=t.x,s=t.y,e=Proj4js.common.adjust_lon(i-this.long0),o=this.x0+this.a*e,n=this.y0+1.25*this.a*Math.log(Math.tan(Proj4js.common.PI/4+s/2.5));return t.x=o,t.y=n,t},inverse:function(t){t.x-=this.x0,t.y-=this.y0;var i=Proj4js.common.adjust_lon(this.long0+t.x/this.a),s=2.5*(Math.atan(Math.exp(.8*t.y/this.a))-Proj4js.common.PI/4);return t.x=i,t.y=s,t}},Proj4js.Proj.gnom={init:function(){this.sin_p14=Math.sin(this.lat0),this.cos_p14=Math.cos(this.lat0),this.infinity_dist=1e3*this.a,this.rc=1},forward:function(t){var i,s,e,o,n,a,r,h,l=t.x,c=t.y;return e=Proj4js.common.adjust_lon(l-this.long0),i=Math.sin(c),s=Math.cos(c),o=Math.cos(e),a=this.sin_p14*i+this.cos_p14*s*o,n=1,a>0||Math.abs(a)<=Proj4js.common.EPSLN?(r=this.x0+this.a*n*s*Math.sin(e)/a,h=this.y0+this.a*n*(this.cos_p14*i-this.sin_p14*s*o)/a):(Proj4js.reportError("orthoFwdPointError"),r=this.x0+this.infinity_dist*s*Math.sin(e),h=this.y0+this.infinity_dist*(this.cos_p14*i-this.sin_p14*s*o)),t.x=r,t.y=h,t},inverse:function(t){var i,s,e,o,n,a;return t.x=(t.x-this.x0)/this.a,t.y=(t.y-this.y0)/this.a,t.x/=this.k0,t.y/=this.k0,(i=Math.sqrt(t.x*t.x+t.y*t.y))?(o=Math.atan2(i,this.rc),s=Math.sin(o),e=Math.cos(o),a=Proj4js.common.asinz(e*this.sin_p14+t.y*s*this.cos_p14/i),n=Math.atan2(t.x*s,i*this.cos_p14*e-t.y*this.sin_p14*s),n=Proj4js.common.adjust_lon(this.long0+n)):(a=this.phic0,n=0),t.x=n,t.y=a,t}},Proj4js.Proj.sinu={init:function(){this.sphere?(this.n=1,this.m=0,this.es=0,this.C_y=Math.sqrt((this.m+1)/this.n),this.C_x=this.C_y/(this.m+1)):this.en=Proj4js.common.pj_enfn(this.es)},forward:function(t){var i,s,e=t.x,o=t.y;if(e=Proj4js.common.adjust_lon(e-this.long0),this.sphere){if(this.m)for(var n=this.n*Math.sin(o),a=Proj4js.common.MAX_ITER;a;--a){var r=(this.m*o+Math.sin(o)-n)/(this.m+Math.cos(o));if(o-=r,Math.abs(r)o?(o=Math.sin(i),s=this.long0+t.x*Math.sqrt(1-this.es*o*o)/(this.a*Math.cos(i)),e=Proj4js.common.adjust_lon(s)):o-Proj4js.common.EPSLN=0?this.y0+Proj4js.common.PI*this.R*Math.tan(.5*a):this.y0+Proj4js.common.PI*this.R*-Math.tan(.5*a));var r=.5*Math.abs(Proj4js.common.PI/n-n/Proj4js.common.PI),h=r*r,l=Math.sin(a),c=Math.cos(a),m=c/(l+c-1),u=m*m,d=m*(2/l-1),p=d*d,_=Proj4js.common.PI*this.R*(r*(m-p)+Math.sqrt(h*(m-p)*(m-p)-(p+h)*(u-p)))/(p+h);return 0>n&&(_=-_),i=this.x0+_,_=Math.abs(_/(Proj4js.common.PI*this.R)),s=o>=0?this.y0+Proj4js.common.PI*this.R*Math.sqrt(1-_*_-2*r*_):this.y0-Proj4js.common.PI*this.R*Math.sqrt(1-_*_-2*r*_),t.x=i,t.y=s,t},inverse:function(t){var i,s,e,o,n,a,r,h,l,c,m,u,d;return t.x-=this.x0,t.y-=this.y0,m=Proj4js.common.PI*this.R,e=t.x/m,o=t.y/m,n=e*e+o*o,a=-Math.abs(o)*(1+n),r=a-2*o*o+e*e,h=-2*a+1+2*o*o+n*n,d=o*o/h+(2*r*r*r/h/h/h-9*a*r/h/h)/27,l=(a-r*r/3/h)/h,c=2*Math.sqrt(-l/3),m=3*d/l/c,Math.abs(m)>1&&(m=m>=0?1:-1),u=Math.acos(m)/3,s=t.y>=0?(-c*Math.cos(u+Proj4js.common.PI/3)-r/3/h)*Proj4js.common.PI:-(-c*Math.cos(u+Proj4js.common.PI/3)-r/3/h)*Proj4js.common.PI,Math.abs(e)0&&(e=2*Math.atan(o*Proj4js.common.srat(this.e*Math.sin(t.y),-.5*this.e))-Proj4js.common.HALF_PI,!(i>Math.abs(e-t.y)));--n)t.y=e;return n?(t.x=s,t.y=e,t):(Proj4js.reportError("gauss:inverse:convergence failed"),null)}},Proj4js.Proj.omerc={init:function(){this.mode||(this.mode=0),this.lon1||(this.lon1=0,this.mode=1),this.lon2||(this.lon2=0),this.lat2||(this.lat2=0);var t=this.b/this.a,i=1-Math.pow(t,2);Math.sqrt(i),this.sin_p20=Math.sin(this.lat0),this.cos_p20=Math.cos(this.lat0),this.con=1-this.es*this.sin_p20*this.sin_p20,this.com=Math.sqrt(1-i),this.bl=Math.sqrt(1+this.es*Math.pow(this.cos_p20,4)/(1-i)),this.al=this.a*this.bl*this.k0*this.com/this.con,Math.abs(this.lat0)0?this.lat0>=0?this.d+Math.sqrt(this.d*this.d-1):this.d-Math.sqrt(this.d*this.d-1):this.d,this.el=this.f*Math.pow(this.ts,this.bl)),0!=this.mode?(this.g=.5*(this.f-1/this.f),this.gama=Proj4js.common.asinz(Math.sin(this.alpha)/this.d),this.longc=this.longc-Proj4js.common.asinz(this.g*Math.tan(this.gama))/this.bl,this.con=Math.abs(this.lat0),this.con>Proj4js.common.EPSLN&&Math.abs(this.con-Proj4js.common.HALF_PI)>Proj4js.common.EPSLN?(this.singam=Math.sin(this.gama),this.cosgam=Math.cos(this.gama),this.sinaz=Math.sin(this.alpha),this.cosaz=Math.cos(this.alpha),this.u=this.lat0>=0?this.al/this.bl*Math.atan(Math.sqrt(this.d*this.d-1)/this.cosaz):-(this.al/this.bl)*Math.atan(Math.sqrt(this.d*this.d-1)/this.cosaz)):Proj4js.reportError("omerc:Init:DataError")):(this.sinphi=Math.sin(this.at1),this.ts1=Proj4js.common.tsfnz(this.e,this.lat1,this.sinphi),this.sinphi=Math.sin(this.lat2),this.ts2=Proj4js.common.tsfnz(this.e,this.lat2,this.sinphi),this.h=Math.pow(this.ts1,this.bl),this.l=Math.pow(this.ts2,this.bl),this.f=this.el/this.h,this.g=.5*(this.f-1/this.f),this.j=(this.el*this.el-this.l*this.h)/(this.el*this.el+this.l*this.h),this.p=(this.l-this.h)/(this.l+this.h),this.dlon=this.lon1-this.lon2,this.dlon<-Proj4js.common.PI&&(this.lon2=this.lon2-2*Proj4js.common.PI),this.dlon>Proj4js.common.PI&&(this.lon2=this.lon2+2*Proj4js.common.PI),this.dlon=this.lon1-this.lon2,this.longc=.5*(this.lon1+this.lon2)-Math.atan(this.j*Math.tan(.5*this.bl*this.dlon)/this.p)/this.bl,this.dlon=Proj4js.common.adjust_lon(this.lon1-this.longc),this.gama=Math.atan(Math.sin(this.bl*this.dlon)/this.g),this.alpha=Proj4js.common.asinz(this.d*Math.sin(this.gama)),Math.abs(this.lat1-this.lat2)<=Proj4js.common.EPSLN?Proj4js.reportError("omercInitDataError"):this.con=Math.abs(this.lat1),this.con<=Proj4js.common.EPSLN||Math.abs(this.con-Proj4js.common.HALF_PI)<=Proj4js.common.EPSLN?Proj4js.reportError("omercInitDataError"):Math.abs(Math.abs(this.lat0)-Proj4js.common.HALF_PI)<=Proj4js.common.EPSLN&&Proj4js.reportError("omercInitDataError"),this.singam=Math.sin(this.gam),this.cosgam=Math.cos(this.gam),this.sinaz=Math.sin(this.alpha),this.cosaz=Math.cos(this.alpha),this.u=this.lat0>=0?this.al/this.bl*Math.atan(Math.sqrt(this.d*this.d-1)/this.cosaz):-(this.al/this.bl)*Math.atan(Math.sqrt(this.d*this.d-1)/this.cosaz))},forward:function(t){var i,s,e,o,n,a,r,h,l,c,m,u=t.x,d=t.y;i=Math.sin(d),c=Proj4js.common.adjust_lon(u-this.longc),a=Math.sin(this.bl*c),Math.abs(Math.abs(d)-Proj4js.common.HALF_PI)>Proj4js.common.EPSLN?(m=Proj4js.common.tsfnz(this.e,d,i),o=this.el/Math.pow(m,this.bl),l=.5*(o-1/o),s=.5*(o+1/o),r=(l*this.singam-a*this.cosgam)/s,e=Math.cos(this.bl*c),1e-7>Math.abs(e)?n=this.al*this.bl*c:(n=this.al*Math.atan((l*this.cosgam+a*this.singam)/e)/this.bl,0>e&&(n+=Proj4js.common.PI*this.al/this.bl))):(r=d>=0?this.singam:-this.singam,n=this.al*d/this.bl),Math.abs(Math.abs(r)-1)<=Proj4js.common.EPSLN&&Proj4js.reportError("omercFwdInfinity"),h=.5*this.al*Math.log((1-r)/(1+r))/this.bl,n-=this.u;var p=this.x0+h*this.cosaz+n*this.sinaz,_=this.y0+n*this.cosaz-h*this.sinaz;return t.x=p,t.y=_,t},inverse:function(t){var i,s,e,o,n,a,r,h,l,c,m,u,d;return t.x-=this.x0,t.y-=this.y0,d=0,o=t.x*this.cosaz-t.y*this.sinaz,n=t.y*this.cosaz+t.x*this.sinaz,n+=this.u,a=Math.exp(-this.bl*o/this.al),r=.5*(a-1/a),s=.5*(a+1/a),l=Math.sin(this.bl*n/this.al),c=(l*this.cosgam+r*this.singam)/s,Math.abs(Math.abs(c)-1)<=Proj4js.common.EPSLN?(m=this.longc,u=c>=0?Proj4js.common.HALF_PI:-Proj4js.common.HALF_PI):(e=1/this.bl,h=Math.pow(this.el/Math.sqrt((1+c)/(1-c)),e),u=Proj4js.common.phi2z(this.e,h),i=this.longc-Math.atan2(r*this.cosgam-l*this.singam,e)/this.bl,m=Proj4js.common.adjust_lon(i)),t.x=m,t.y=u,t}},Proj4js.Proj.lcc={init:function(){if(this.lat2||(this.lat2=this.lat0),this.k0||(this.k0=1),Math.abs(this.lat1+this.lat2)Proj4js.common.EPSLN?Math.log(e/r)/Math.log(o/h):i,this.f0=e/(this.ns*Math.pow(o,this.ns)),this.rh=this.a*this.f0*Math.pow(l,this.ns),this.title||(this.title="Lambert Conformal Conic")},forward:function(t){var i=t.x,s=t.y;if(!(90>=s&&s>=-90&&180>=i&&i>=-180))return Proj4js.reportError("lcc:forward: llInputOutOfRange: "+i+" : "+s),null;var e,o,n=Math.abs(Math.abs(s)-Proj4js.common.HALF_PI);if(n>Proj4js.common.EPSLN)e=Proj4js.common.tsfnz(this.e,s,Math.sin(s)),o=this.a*this.f0*Math.pow(e,this.ns);else{if(n=s*this.ns,0>=n)return Proj4js.reportError("lcc:forward: No Projection"),null;o=0}var a=this.ns*Proj4js.common.adjust_lon(i-this.long0);return t.x=this.k0*o*Math.sin(a)+this.x0,t.y=this.k0*(this.rh-o*Math.cos(a))+this.y0,t},inverse:function(t){var i,s,e,o,n,a=(t.x-this.x0)/this.k0,r=this.rh-(t.y-this.y0)/this.k0;this.ns>0?(i=Math.sqrt(a*a+r*r),s=1):(i=-Math.sqrt(a*a+r*r),s=-1);var h=0;if(0!=i&&(h=Math.atan2(s*a,s*r)),0!=i||this.ns>0){if(s=1/this.ns,e=Math.pow(i/(this.a*this.f0),s),o=Proj4js.common.phi2z(this.e,e),-9999==o)return null}else o=-Proj4js.common.HALF_PI;return n=Proj4js.common.adjust_lon(h/this.ns+this.long0),t.x=n,t.y=o,t}},Proj4js.Proj.laea={S_POLE:1,N_POLE:2,EQUIT:3,OBLIQ:4,init:function(){var t=Math.abs(this.lat0);if(this.mode=Math.abs(t-Proj4js.common.HALF_PI)this.lat0?this.S_POLE:this.N_POLE:Math.abs(t)0){var i;switch(this.qp=Proj4js.common.qsfnz(this.e,1),this.mmf=.5/(1-this.es),this.apa=this.authset(this.es),this.mode){case this.N_POLE:case this.S_POLE:this.dd=1;break;case this.EQUIT:this.rq=Math.sqrt(.5*this.qp),this.dd=1/this.rq,this.xmf=1,this.ymf=.5*this.qp;break;case this.OBLIQ:this.rq=Math.sqrt(.5*this.qp),i=Math.sin(this.lat0),this.sinb1=Proj4js.common.qsfnz(this.e,i)/this.qp,this.cosb1=Math.sqrt(1-this.sinb1*this.sinb1),this.dd=Math.cos(this.lat0)/(Math.sqrt(1-this.es*i*i)*this.rq*this.cosb1),this.ymf=(this.xmf=this.rq)/this.dd,this.xmf*=this.dd}}else this.mode==this.OBLIQ&&(this.sinph0=Math.sin(this.lat0),this.cosph0=Math.cos(this.lat0))},forward:function(t){var i,s,e=t.x,o=t.y;if(e=Proj4js.common.adjust_lon(e-this.long0),this.sphere){var n,a,r;switch(r=Math.sin(o),a=Math.cos(o),n=Math.cos(e),this.mode){case this.OBLIQ:case this.EQUIT:if(s=this.mode==this.EQUIT?1+a*n:1+this.sinph0*r+this.cosph0*a*n,Proj4js.common.EPSLN>=s)return Proj4js.reportError("laea:fwd:y less than eps"),null;s=Math.sqrt(2/s),i=s*a*Math.sin(e),s*=this.mode==this.EQUIT?r:this.cosph0*r-this.sinph0*a*n;break;case this.N_POLE:n=-n;case this.S_POLE:if(Math.abs(o+this.phi0)=0?(i=(u=Math.sqrt(l))*h,s=n*(this.mode==this.S_POLE?u:-u)):i=s=0}}return t.x=this.a*i+this.x0,t.y=this.a*s+this.y0,t},inverse:function(t){t.x-=this.x0,t.y-=this.y0;var i,s,e=t.x/this.a,o=t.y/this.a;if(this.sphere){var n,a=0,r=0;if(n=Math.sqrt(e*e+o*o),s=.5*n,s>1)return Proj4js.reportError("laea:Inv:DataError"),null;switch(s=2*Math.asin(s),(this.mode==this.OBLIQ||this.mode==this.EQUIT)&&(r=Math.sin(s),a=Math.cos(s)),this.mode){case this.EQUIT:s=Math.abs(n)<=Proj4js.common.EPSLN?0:Math.asin(o*r/n),e*=r,o=a*n;break;case this.OBLIQ:s=Math.abs(n)<=Proj4js.common.EPSLN?this.phi0:Math.asin(a*this.sinph0+o*r*this.cosph0/n),e*=r*this.cosph0,o=(a-Math.sin(s)*this.sinph0)*n;break;case this.N_POLE:o=-o,s=Proj4js.common.HALF_PI-s;break;case this.S_POLE:s-=Proj4js.common.HALF_PI}i=0!=o||this.mode!=this.EQUIT&&this.mode!=this.OBLIQ?Math.atan2(e,o):0}else{var h,l,c,m,u=0;switch(this.mode){case this.EQUIT:case this.OBLIQ:if(e/=this.dd,o*=this.dd,m=Math.sqrt(e*e+o*o),Proj4js.common.EPSLN>m)return t.x=0,t.y=this.phi0,t;l=2*Math.asin(.5*m/this.rq),h=Math.cos(l),e*=l=Math.sin(l),this.mode==this.OBLIQ?(u=h*this.sinb1+o*l*this.cosb1/m,c=this.qp*u,o=m*this.cosb1*h-o*this.sinb1*l):(u=o*l/m,c=this.qp*u,o=m*h);break;case this.N_POLE:o=-o;case this.S_POLE:if(c=e*e+o*o,!c)return t.x=0,t.y=this.phi0,t;u=1-c/this.qp,this.mode==this.S_POLE&&(u=-u)}i=Math.atan2(e,o),s=this.authlat(Math.asin(u),this.apa)}return t.x=Proj4js.common.adjust_lon(this.long0+i),t.y=s,t},P00:.3333333333333333,P01:.17222222222222222,P02:.10257936507936508,P10:.06388888888888888,P11:.0664021164021164,P20:.016415012942191543,authset:function(t){var i,s=[];return s[0]=t*this.P00,i=t*t,s[0]+=i*this.P01,s[1]=i*this.P10,i*=t,s[0]+=i*this.P02,s[1]+=i*this.P11,s[2]=i*this.P20,s},authlat:function(t,i){var s=t+t;return t+i[0]*Math.sin(s)+i[1]*Math.sin(s+s)+i[2]*Math.sin(s+s+s)}},Proj4js.Proj.aeqd={init:function(){this.sin_p12=Math.sin(this.lat0),this.cos_p12=Math.cos(this.lat0)},forward:function(t){var i=t.x;t.y;var s,e=Math.sin(t.y),o=Math.cos(t.y),n=Proj4js.common.adjust_lon(i-this.long0),a=Math.cos(n),r=this.sin_p12*e+this.cos_p12*o*a;if(Math.abs(Math.abs(r)-1)r)return Proj4js.reportError("aeqd:Fwd:PointError"),void 0}else{var h=Math.acos(r);s=h/Math.sin(h)}return t.x=this.x0+this.a*s*o*Math.sin(n),t.y=this.y0+this.a*s*(this.cos_p12*e-this.sin_p12*o*a),t},inverse:function(t){t.x-=this.x0,t.y-=this.y0;var i=Math.sqrt(t.x*t.x+t.y*t.y);if(i>2*Proj4js.common.HALF_PI*this.a)return Proj4js.reportError("aeqdInvDataError"),void 0;var s,e=i/this.a,o=Math.sin(e),n=Math.cos(e),a=this.long0;if(Math.abs(i)<=Proj4js.common.EPSLN)s=this.lat0;else{s=Proj4js.common.asinz(n*this.sin_p12+t.y*o*this.cos_p12/i);var r=Math.abs(this.lat0)-Proj4js.common.HALF_PI;Math.abs(r)<=Proj4js.common.EPSLN?a=this.lat0>=0?Proj4js.common.adjust_lon(this.long0+Math.atan2(t.x,-t.y)):Proj4js.common.adjust_lon(this.long0-Math.atan2(-t.x,t.y)):(r=n-this.sin_p12*Math.sin(s),Math.abs(r)=50&&Proj4js.reportError("moll:Fwd:IterationError")}o/=2,Proj4js.common.PI/2-Math.abs(s).999999999999&&(s=.999999999999);var i=Math.asin(s),e=Proj4js.common.adjust_lon(this.long0+t.x/(.900316316158*this.a*Math.cos(i)));-Proj4js.common.PI>e&&(e=-Proj4js.common.PI),e>Proj4js.common.PI&&(e=Proj4js.common.PI),s=(2*i+Math.sin(2*i))/Proj4js.common.PI,Math.abs(s)>1&&(s=1);var o=Math.asin(s);return t.x=e,t.y=o,t}},function(t,i,s){var e,o;typeof exports!=s+""?e=exports:(o=t.L,e={},e.noConflict=function(){return t.L=o,this},t.L=e),e.version="0.5.1",e.Util={extend:function(t){var i,s,e,o,n=Array.prototype.slice.call(arguments,1);for(s=0,e=n.length;e>s;s++){o=n[s]||{};for(i in o)o.hasOwnProperty(i)&&(t[i]=o[i])}return t},bind:function(t,i){var s=arguments.length>2?Array.prototype.slice.call(arguments,2):null;return function(){return t.apply(i,s||arguments)}},stamp:function(){var t=0,i="_leaflet_id";return function(s){return s[i]=s[i]||++t,s[i]}}(),limitExecByInterval:function(t,i,e){var o,n;return function a(){var r=arguments;return o?(n=!0,s):(o=!0,setTimeout(function(){o=!1,n&&(a.apply(e,r),n=!1)},i),t.apply(e,r),s)}},falseFn:function(){return!1},formatNum:function(t,i){var s=Math.pow(10,i||5);return Math.round(t*s)/s},splitWords:function(t){return t.replace(/^\s+|\s+$/g,"").split(/\s+/)},setOptions:function(t,i){return t.options=e.extend({},t.options,i),t.options},getParamString:function(t,i){var s=[];for(var e in t)t.hasOwnProperty(e)&&s.push(e+"="+t[e]);return(i&&-1!==i.indexOf("?")?"&":"?")+s.join("&")},template:function(t,i){return t.replace(/\{ *([\w_]+) *\}/g,function(t,s){var e=i[s];if(!i.hasOwnProperty(s))throw Error("No value provided for variable "+t);return e})},isArray:function(t){return"[object Array]"===Object.prototype.toString.call(t)},emptyImageUrl:"data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs="},function(){function i(i){var s,e,o=["webkit","moz","o","ms"];for(s=0;o.length>s&&!e;s++)e=t[o[s]+i];return e}function o(i){var s=+new Date,e=Math.max(0,16-(s-n));return n=s+e,t.setTimeout(i,e)}var n=0,a=t.requestAnimationFrame||i("RequestAnimationFrame")||o,r=t.cancelAnimationFrame||i("CancelAnimationFrame")||i("CancelRequestAnimationFrame")||function(i){t.clearTimeout(i)};e.Util.requestAnimFrame=function(i,n,r,h){return i=e.bind(i,n),r&&a===o?(i(),s):a.call(t,i,h)},e.Util.cancelAnimFrame=function(i){i&&r.call(t,i)}}(),e.extend=e.Util.extend,e.bind=e.Util.bind,e.stamp=e.Util.stamp,e.setOptions=e.Util.setOptions,e.Class=function(){},e.Class.extend=function(t){var i=function(){this.initialize&&this.initialize.apply(this,arguments),this._initHooks&&this.callInitHooks()},s=function(){};s.prototype=this.prototype;var o=new s;o.constructor=i,i.prototype=o;for(var n in this)this.hasOwnProperty(n)&&"prototype"!==n&&(i[n]=this[n]);t.statics&&(e.extend(i,t.statics),delete t.statics),t.includes&&(e.Util.extend.apply(null,[o].concat(t.includes)),delete t.includes),t.options&&o.options&&(t.options=e.extend({},o.options,t.options)),e.extend(o,t),o._initHooks=[];var a=this;return o.callInitHooks=function(){if(!this._initHooksCalled){a.prototype.callInitHooks&&a.prototype.callInitHooks.call(this),this._initHooksCalled=!0;for(var t=0,i=o._initHooks.length;i>t;t++)o._initHooks[t].call(this)}},i},e.Class.include=function(t){e.extend(this.prototype,t)},e.Class.mergeOptions=function(t){e.extend(this.prototype.options,t)},e.Class.addInitHook=function(t){var i=Array.prototype.slice.call(arguments,1),s="function"==typeof t?t:function(){this[t].apply(this,i)};this.prototype._initHooks=this.prototype._initHooks||[],this.prototype._initHooks.push(s)};var n="_leaflet_events";e.Mixin={},e.Mixin.Events={addEventListener:function(t,i,s){var o,a,r,h=this[n]=this[n]||{};if("object"==typeof t){for(o in t)t.hasOwnProperty(o)&&this.addEventListener(o,t[o],i);return this}for(t=e.Util.splitWords(t),a=0,r=t.length;r>a;a++)h[t[a]]=h[t[a]]||[],h[t[a]].push({action:i,context:s||this});return this},hasEventListeners:function(t){return n in this&&t in this[n]&&this[n][t].length>0},removeEventListener:function(t,i,s){var o,a,r,h,l,c=this[n];if("object"==typeof t){for(o in t)t.hasOwnProperty(o)&&this.removeEventListener(o,t[o],i);return this}for(t=e.Util.splitWords(t),a=0,r=t.length;r>a;a++)if(this.hasEventListeners(t[a]))for(h=c[t[a]],l=h.length-1;l>=0;l--)i&&h[l].action!==i||s&&h[l].context!==s||h.splice(l,1);return this},fireEvent:function(t,i){if(!this.hasEventListeners(t))return this;for(var s=e.extend({type:t,target:this},i),o=this[n][t].slice(),a=0,r=o.length;r>a;a++)o[a].action.call(o[a].context||this,s);return this}},e.Mixin.Events.on=e.Mixin.Events.addEventListener,e.Mixin.Events.off=e.Mixin.Events.removeEventListener,e.Mixin.Events.fire=e.Mixin.Events.fireEvent,function(){var o=!!t.ActiveXObject,n=o&&!t.XMLHttpRequest,a=o&&!i.querySelector,r=navigator.userAgent.toLowerCase(),h=-1!==r.indexOf("webkit"),l=-1!==r.indexOf("chrome"),c=-1!==r.indexOf("android"),m=-1!==r.search("android [23]"),u=typeof orientation!=s+"",d=t.navigator&&t.navigator.msPointerEnabled&&t.navigator.msMaxTouchPoints,p="devicePixelRatio"in t&&t.devicePixelRatio>1||"matchMedia"in t&&t.matchMedia("(min-resolution:144dpi)")&&t.matchMedia("(min-resolution:144dpi)").matches,_=i.documentElement,f=o&&"transition"in _.style,P="WebKitCSSMatrix"in t&&"m11"in new t.WebKitCSSMatrix,y="MozPerspective"in _.style,g="OTransition"in _.style,L=!t.L_DISABLE_3D&&(f||P||y||g),v=!t.L_NO_TOUCH&&function(){var t="ontouchstart";if(d||t in _)return!0;var s=i.createElement("div"),e=!1;return s.setAttribute?(s.setAttribute(t,"return;"),"function"==typeof s[t]&&(e=!0),s.removeAttribute(t),s=null,e):!1}();e.Browser={ie:o,ie6:n,ie7:a,webkit:h,android:c,android23:m,chrome:l,ie3d:f,webkit3d:P,gecko3d:y,opera3d:g,any3d:L,mobile:u,mobileWebkit:u&&h,mobileWebkit3d:u&&P,mobileOpera:u&&t.opera,touch:v,msTouch:d,retina:p}}(),e.Point=function(t,i,s){this.x=s?Math.round(t):t,this.y=s?Math.round(i):i},e.Point.prototype={clone:function(){return new e.Point(this.x,this.y)},add:function(t){return this.clone()._add(e.point(t))},_add:function(t){return this.x+=t.x,this.y+=t.y,this},subtract:function(t){return this.clone()._subtract(e.point(t))},_subtract:function(t){return this.x-=t.x,this.y-=t.y,this},divideBy:function(t){return this.clone()._divideBy(t)},_divideBy:function(t){return this.x/=t,this.y/=t,this},multiplyBy:function(t){return this.clone()._multiplyBy(t)},_multiplyBy:function(t){return this.x*=t,this.y*=t,this},round:function(){return this.clone()._round()},_round:function(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this},floor:function(){return this.clone()._floor()},_floor:function(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this},distanceTo:function(t){t=e.point(t);var i=t.x-this.x,s=t.y-this.y;return Math.sqrt(i*i+s*s)},equals:function(t){return t.x===this.x&&t.y===this.y},toString:function(){return"Point("+e.Util.formatNum(this.x)+", "+e.Util.formatNum(this.y)+")"}},e.point=function(t,i,s){return t instanceof e.Point?t:e.Util.isArray(t)?new e.Point(t[0],t[1]):isNaN(t)?t:new e.Point(t,i,s)},e.Bounds=function(t,i){if(t)for(var s=i?[t,i]:t,e=0,o=s.length;o>e;e++)this.extend(s[e])},e.Bounds.prototype={extend:function(t){return t=e.point(t),this.min||this.max?(this.min.x=Math.min(t.x,this.min.x),this.max.x=Math.max(t.x,this.max.x),this.min.y=Math.min(t.y,this.min.y),this.max.y=Math.max(t.y,this.max.y)):(this.min=t.clone(),this.max=t.clone()),this},getCenter:function(t){return new e.Point((this.min.x+this.max.x)/2,(this.min.y+this.max.y)/2,t)},getBottomLeft:function(){return new e.Point(this.min.x,this.max.y)},getTopRight:function(){return new e.Point(this.max.x,this.min.y)},getSize:function(){return this.max.subtract(this.min)},contains:function(t){var i,s;return t="number"==typeof t[0]||t instanceof e.Point?e.point(t):e.bounds(t),t instanceof e.Bounds?(i=t.min,s=t.max):i=s=t,i.x>=this.min.x&&s.x<=this.max.x&&i.y>=this.min.y&&s.y<=this.max.y},intersects:function(t){t=e.bounds(t);var i=this.min,s=this.max,o=t.min,n=t.max,a=n.x>=i.x&&o.x<=s.x,r=n.y>=i.y&&o.y<=s.y;return a&&r},isValid:function(){return!(!this.min||!this.max)}},e.bounds=function(t,i){return!t||t instanceof e.Bounds?t:new e.Bounds(t,i)},e.Transformation=function(t,i,s,e){this._a=t,this._b=i,this._c=s,this._d=e},e.Transformation.prototype={transform:function(t,i){return this._transform(t.clone(),i)},_transform:function(t,i){return i=i||1,t.x=i*(this._a*t.x+this._b),t.y=i*(this._c*t.y+this._d),t},untransform:function(t,i){return i=i||1,new e.Point((t.x/i-this._b)/this._a,(t.y/i-this._d)/this._c)}},e.DomUtil={get:function(t){return"string"==typeof t?i.getElementById(t):t},getStyle:function(t,s){var e=t.style[s];if(!e&&t.currentStyle&&(e=t.currentStyle[s]),(!e||"auto"===e)&&i.defaultView){var o=i.defaultView.getComputedStyle(t,null);e=o?o[s]:null}return"auto"===e?null:e},getViewportOffset:function(t){var s,o=0,n=0,a=t,r=i.body,h=e.Browser.ie7;do{if(o+=a.offsetTop||0,n+=a.offsetLeft||0,o+=parseInt(e.DomUtil.getStyle(a,"borderTopWidth"),10)||0,n+=parseInt(e.DomUtil.getStyle(a,"borderLeftWidth"),10)||0,s=e.DomUtil.getStyle(a,"position"),a.offsetParent===r&&"absolute"===s)break;if("fixed"===s){o+=r.scrollTop||0,n+=r.scrollLeft||0;break}a=a.offsetParent}while(a);a=t;do{if(a===r)break;o-=a.scrollTop||0,n-=a.scrollLeft||0,e.DomUtil.documentIsLtr()||!e.Browser.webkit&&!h||(n+=a.scrollWidth-a.clientWidth,h&&"hidden"!==e.DomUtil.getStyle(a,"overflow-y")&&"hidden"!==e.DomUtil.getStyle(a,"overflow")&&(n+=17)),a=a.parentNode}while(a);return new e.Point(n,o)},documentIsLtr:function(){return e.DomUtil._docIsLtrCached||(e.DomUtil._docIsLtrCached=!0,e.DomUtil._docIsLtr="ltr"===e.DomUtil.getStyle(i.body,"direction")),e.DomUtil._docIsLtr},create:function(t,s,e){var o=i.createElement(t);return o.className=s,e&&e.appendChild(o),o},disableTextSelection:function(){i.selection&&i.selection.empty&&i.selection.empty(),this._onselectstart||(this._onselectstart=i.onselectstart||null,i.onselectstart=e.Util.falseFn)},enableTextSelection:function(){i.onselectstart===e.Util.falseFn&&(i.onselectstart=this._onselectstart,this._onselectstart=null)},hasClass:function(t,i){return t.className.length>0&&RegExp("(^|\\s)"+i+"(\\s|$)").test(t.className)},addClass:function(t,i){e.DomUtil.hasClass(t,i)||(t.className+=(t.className?" ":"")+i)},removeClass:function(t,i){function s(t,s){return s===i?"":t}t.className=t.className.replace(/(\S+)\s*/g,s).replace(/(^\s+|\s+$)/,"")},setOpacity:function(t,i){if("opacity"in t.style)t.style.opacity=i;else if("filter"in t.style){var s=!1,e="DXImageTransform.Microsoft.Alpha";try{s=t.filters.item(e)}catch(o){}i=Math.round(100*i),s?(s.Enabled=100!==i,s.Opacity=i):t.style.filter+=" progid:"+e+"(opacity="+i+")"}},testProp:function(t){for(var s=i.documentElement.style,e=0;t.length>e;e++)if(t[e]in s)return t[e];return!1},getTranslateString:function(t){var i=e.Browser.webkit3d,s="translate"+(i?"3d":"")+"(",o=(i?",0":"")+")";return s+t.x+"px,"+t.y+"px"+o},getScaleString:function(t,i){var s=e.DomUtil.getTranslateString(i.add(i.multiplyBy(-1*t))),o=" scale("+t+") ";return s+o},setPosition:function(t,i,s){t._leaflet_pos=i,!s&&e.Browser.any3d?(t.style[e.DomUtil.TRANSFORM]=e.DomUtil.getTranslateString(i),e.Browser.mobileWebkit3d&&(t.style.WebkitBackfaceVisibility="hidden")):(t.style.left=i.x+"px",t.style.top=i.y+"px")},getPosition:function(t){return t._leaflet_pos}},e.DomUtil.TRANSFORM=e.DomUtil.testProp(["transform","WebkitTransform","OTransform","MozTransform","msTransform"]),e.DomUtil.TRANSITION=e.DomUtil.testProp(["webkitTransition","transition","OTransition","MozTransition","msTransition"]),e.DomUtil.TRANSITION_END="webkitTransition"===e.DomUtil.TRANSITION||"OTransition"===e.DomUtil.TRANSITION?e.DomUtil.TRANSITION+"End":"transitionend",e.LatLng=function(t,i){var s=parseFloat(t),e=parseFloat(i);if(isNaN(s)||isNaN(e))throw Error("Invalid LatLng object: ("+t+", "+i+")");this.lat=s,this.lng=e},e.extend(e.LatLng,{DEG_TO_RAD:Math.PI/180,RAD_TO_DEG:180/Math.PI,MAX_MARGIN:1e-9}),e.LatLng.prototype={equals:function(t){if(!t)return!1;t=e.latLng(t);var i=Math.max(Math.abs(this.lat-t.lat),Math.abs(this.lng-t.lng));return e.LatLng.MAX_MARGIN>=i},toString:function(t){return"LatLng("+e.Util.formatNum(this.lat,t)+", "+e.Util.formatNum(this.lng,t)+")"},distanceTo:function(t){t=e.latLng(t);var i=6378137,s=e.LatLng.DEG_TO_RAD,o=(t.lat-this.lat)*s,n=(t.lng-this.lng)*s,a=this.lat*s,r=t.lat*s,h=Math.sin(o/2),l=Math.sin(n/2),c=h*h+l*l*Math.cos(a)*Math.cos(r);return 2*i*Math.atan2(Math.sqrt(c),Math.sqrt(1-c))},wrap:function(t,i){var s=this.lng;return t=t||-180,i=i||180,s=(s+i)%(i-t)+(t>s||s===i?i:t),new e.LatLng(this.lat,s)}},e.latLng=function(t,i){return t instanceof e.LatLng?t:e.Util.isArray(t)?new e.LatLng(t[0],t[1]):isNaN(t)?t:new e.LatLng(t,i)},e.LatLngBounds=function(t,i){if(t)for(var s=i?[t,i]:t,e=0,o=s.length;o>e;e++)this.extend(s[e])},e.LatLngBounds.prototype={extend:function(t){return t="number"==typeof t[0]||"string"==typeof t[0]||t instanceof e.LatLng?e.latLng(t):e.latLngBounds(t),t instanceof e.LatLng?this._southWest||this._northEast?(this._southWest.lat=Math.min(t.lat,this._southWest.lat),this._southWest.lng=Math.min(t.lng,this._southWest.lng),this._northEast.lat=Math.max(t.lat,this._northEast.lat),this._northEast.lng=Math.max(t.lng,this._northEast.lng)):(this._southWest=new e.LatLng(t.lat,t.lng),this._northEast=new e.LatLng(t.lat,t.lng)):t instanceof e.LatLngBounds&&(this.extend(t._southWest),this.extend(t._northEast)),this},pad:function(t){var i=this._southWest,s=this._northEast,o=Math.abs(i.lat-s.lat)*t,n=Math.abs(i.lng-s.lng)*t;return new e.LatLngBounds(new e.LatLng(i.lat-o,i.lng-n),new e.LatLng(s.lat+o,s.lng+n))},getCenter:function(){return new e.LatLng((this._southWest.lat+this._northEast.lat)/2,(this._southWest.lng+this._northEast.lng)/2)},getSouthWest:function(){return this._southWest},getNorthEast:function(){return this._northEast},getNorthWest:function(){return new e.LatLng(this._northEast.lat,this._southWest.lng)},getSouthEast:function(){return new e.LatLng(this._southWest.lat,this._northEast.lng)},contains:function(t){t="number"==typeof t[0]||t instanceof e.LatLng?e.latLng(t):e.latLngBounds(t);var i,s,o=this._southWest,n=this._northEast;return t instanceof e.LatLngBounds?(i=t.getSouthWest(),s=t.getNorthEast()):i=s=t,i.lat>=o.lat&&s.lat<=n.lat&&i.lng>=o.lng&&s.lng<=n.lng},intersects:function(t){t=e.latLngBounds(t);var i=this._southWest,s=this._northEast,o=t.getSouthWest(),n=t.getNorthEast(),a=n.lat>=i.lat&&o.lat<=s.lat,r=n.lng>=i.lng&&o.lng<=s.lng;return a&&r},toBBoxString:function(){var t=this._southWest,i=this._northEast;return[t.lng,t.lat,i.lng,i.lat].join(",")},equals:function(t){return t?(t=e.latLngBounds(t),this._southWest.equals(t.getSouthWest())&&this._northEast.equals(t.getNorthEast())):!1},isValid:function(){return!(!this._southWest||!this._northEast)}},e.latLngBounds=function(t,i){return!t||t instanceof e.LatLngBounds?t:new e.LatLngBounds(t,i)},e.Projection={},e.Projection.SphericalMercator={MAX_LATITUDE:85.0511287798,project:function(t){var i=e.LatLng.DEG_TO_RAD,s=this.MAX_LATITUDE,o=Math.max(Math.min(s,t.lat),-s),n=t.lng*i,a=o*i;return a=Math.log(Math.tan(Math.PI/4+a/2)),new e.Point(n,a)},unproject:function(t){var i=e.LatLng.RAD_TO_DEG,s=t.x*i,o=(2*Math.atan(Math.exp(t.y))-Math.PI/2)*i;return new e.LatLng(o,s)}},e.Projection.LonLat={project:function(t){return new e.Point(t.lng,t.lat)},unproject:function(t){return new e.LatLng(t.y,t.x)}},e.CRS={latLngToPoint:function(t,i){var s=this.projection.project(t),e=this.scale(i);return this.transformation._transform(s,e)},pointToLatLng:function(t,i){var s=this.scale(i),e=this.transformation.untransform(t,s);return this.projection.unproject(e)},project:function(t){return this.projection.project(t)},scale:function(t){return 256*Math.pow(2,t)}},e.CRS.Simple=e.extend({},e.CRS,{projection:e.Projection.LonLat,transformation:new e.Transformation(1,0,-1,0),scale:function(t){return Math.pow(2,t)}}),e.CRS.EPSG3857=e.extend({},e.CRS,{code:"EPSG:3857",projection:e.Projection.SphericalMercator,transformation:new e.Transformation(.5/Math.PI,.5,-.5/Math.PI,.5),project:function(t){var i=this.projection.project(t),s=6378137;return i.multiplyBy(s)}}),e.CRS.EPSG900913=e.extend({},e.CRS.EPSG3857,{code:"EPSG:900913"}),e.CRS.EPSG4326=e.extend({},e.CRS,{code:"EPSG:4326",projection:e.Projection.LonLat,transformation:new e.Transformation(1/360,.5,-1/360,.5)}),e.Map=e.Class.extend({includes:e.Mixin.Events,options:{crs:e.CRS.EPSG3857,fadeAnimation:e.DomUtil.TRANSITION&&!e.Browser.android23,trackResize:!0,markerZoomAnimation:e.DomUtil.TRANSITION&&e.Browser.any3d},initialize:function(t,i){i=e.setOptions(this,i),this._initContainer(t),this._initLayout(),this.callInitHooks(),this._initEvents(),i.maxBounds&&this.setMaxBounds(i.maxBounds),i.center&&i.zoom!==s&&this.setView(e.latLng(i.center),i.zoom,!0),this._initLayers(i.layers)},setView:function(t,i){return this._resetView(e.latLng(t),this._limitZoom(i)),this},setZoom:function(t){return this.setView(this.getCenter(),t)},zoomIn:function(t){return this.setZoom(this._zoom+(t||1))},zoomOut:function(t){return this.setZoom(this._zoom-(t||1))},fitBounds:function(t){var i=this.getBoundsZoom(t);return this.setView(e.latLngBounds(t).getCenter(),i)},fitWorld:function(){var t=new e.LatLng(-60,-170),i=new e.LatLng(85,179);return this.fitBounds(new e.LatLngBounds(t,i))},panTo:function(t){return this.setView(t,this._zoom)},panBy:function(t){return this.fire("movestart"),this._rawPanBy(e.point(t)),this.fire("move"),this.fire("moveend")},setMaxBounds:function(t){if(t=e.latLngBounds(t),this.options.maxBounds=t,!t)return this._boundsMinZoom=null,this;var i=this.getBoundsZoom(t,!0);return this._boundsMinZoom=i,this._loaded&&(i>this._zoom?this.setView(t.getCenter(),i):this.panInsideBounds(t)),this},panInsideBounds:function(t){t=e.latLngBounds(t);var i=this.getBounds(),s=this.project(i.getSouthWest()),o=this.project(i.getNorthEast()),n=this.project(t.getSouthWest()),a=this.project(t.getNorthEast()),r=0,h=0;return o.ya.x&&(r=a.x-o.x),s.y>n.y&&(h=n.y-s.y),s.x=r);return m&&i?null:i?r:r-1},getSize:function(){return(!this._size||this._sizeChanged)&&(this._size=new e.Point(this._container.clientWidth,this._container.clientHeight),this._sizeChanged=!1),this._size.clone()},getPixelBounds:function(){var t=this._getTopLeftPoint();return new e.Bounds(t,t.add(this.getSize()))},getPixelOrigin:function(){return this._initialTopLeftPoint},getPanes:function(){return this._panes},getContainer:function(){return this._container},getZoomScale:function(t){var i=this.options.crs;return i.scale(t)/i.scale(this._zoom)},getScaleZoom:function(t){return this._zoom+Math.log(t)/Math.LN2},project:function(t,i){return i=i===s?this._zoom:i,this.options.crs.latLngToPoint(e.latLng(t),i)},unproject:function(t,i){return i=i===s?this._zoom:i,this.options.crs.pointToLatLng(e.point(t),i)},layerPointToLatLng:function(t){var i=e.point(t).add(this._initialTopLeftPoint);return this.unproject(i)},latLngToLayerPoint:function(t){var i=this.project(e.latLng(t))._round();return i._subtract(this._initialTopLeftPoint)},containerPointToLayerPoint:function(t){return e.point(t).subtract(this._getMapPanePos())},layerPointToContainerPoint:function(t){return e.point(t).add(this._getMapPanePos())},containerPointToLatLng:function(t){var i=this.containerPointToLayerPoint(e.point(t));return this.layerPointToLatLng(i)},latLngToContainerPoint:function(t){return this.layerPointToContainerPoint(this.latLngToLayerPoint(e.latLng(t)))},mouseEventToContainerPoint:function(t){return e.DomEvent.getMousePosition(t,this._container)},mouseEventToLayerPoint:function(t){return this.containerPointToLayerPoint(this.mouseEventToContainerPoint(t))},mouseEventToLatLng:function(t){return this.layerPointToLatLng(this.mouseEventToLayerPoint(t))},_initContainer:function(t){var i=this._container=e.DomUtil.get(t);if(i._leaflet)throw Error("Map container is already initialized.");i._leaflet=!0},_initLayout:function(){var t=this._container;e.DomUtil.addClass(t,"leaflet-container"),e.Browser.touch&&e.DomUtil.addClass(t,"leaflet-touch"),this.options.fadeAnimation&&e.DomUtil.addClass(t,"leaflet-fade-anim");var i=e.DomUtil.getStyle(t,"position");"absolute"!==i&&"relative"!==i&&"fixed"!==i&&(t.style.position="relative"),this._initPanes(),this._initControlPos&&this._initControlPos()},_initPanes:function(){var t=this._panes={};this._mapPane=t.mapPane=this._createPane("leaflet-map-pane",this._container),this._tilePane=t.tilePane=this._createPane("leaflet-tile-pane",this._mapPane),t.objectsPane=this._createPane("leaflet-objects-pane",this._mapPane),t.shadowPane=this._createPane("leaflet-shadow-pane"),t.overlayPane=this._createPane("leaflet-overlay-pane"),t.markerPane=this._createPane("leaflet-marker-pane"),t.popupPane=this._createPane("leaflet-popup-pane");var i=" leaflet-zoom-hide";this.options.markerZoomAnimation||(e.DomUtil.addClass(t.markerPane,i),e.DomUtil.addClass(t.shadowPane,i),e.DomUtil.addClass(t.popupPane,i))},_createPane:function(t,i){return e.DomUtil.create("div",t,i||this._panes.objectsPane)},_initLayers:function(t){t=t?e.Util.isArray(t)?t:[t]:[],this._layers={},this._zoomBoundLayers={},this._tileLayersNum=0;var i,s;for(i=0,s=t.length;s>i;i++)this.addLayer(t[i])},_resetView:function(t,i,s,o){var n=this._zoom!==i;o||(this.fire("movestart"),n&&this.fire("zoomstart")),this._zoom=i,this._initialTopLeftPoint=this._getNewTopLeftPoint(t),s?this._initialTopLeftPoint._add(this._getMapPanePos()):e.DomUtil.setPosition(this._mapPane,new e.Point(0,0)),this._tileLayersToLoad=this._tileLayersNum;var a=!this._loaded;this._loaded=!0,this.fire("viewreset",{hard:!s}),this.fire("move"),(n||o)&&this.fire("zoomend"),this.fire("moveend",{hard:!s}),a&&this.fire("load")},_rawPanBy:function(t){e.DomUtil.setPosition(this._mapPane,this._getMapPanePos().subtract(t))},_updateZoomLevels:function(){var t,i=1/0,e=-1/0;for(t in this._zoomBoundLayers)if(this._zoomBoundLayers.hasOwnProperty(t)){var o=this._zoomBoundLayers[t];isNaN(o.options.minZoom)||(i=Math.min(i,o.options.minZoom)),isNaN(o.options.maxZoom)||(e=Math.max(e,o.options.maxZoom))}t===s?this._layersMaxZoom=this._layersMinZoom=s:(this._layersMaxZoom=e,this._layersMinZoom=i)},_initEvents:function(){if(e.DomEvent){e.DomEvent.on(this._container,"click",this._onMouseClick,this);var i,s,o=["dblclick","mousedown","mouseup","mouseenter","mouseleave","mousemove","contextmenu"];for(i=0,s=o.length;s>i;i++)e.DomEvent.on(this._container,o[i],this._fireMouseEvent,this);this.options.trackResize&&e.DomEvent.on(t,"resize",this._onResize,this)}},_onResize:function(){e.Util.cancelAnimFrame(this._resizeRequest),this._resizeRequest=e.Util.requestAnimFrame(this.invalidateSize,this,!1,this._container)},_onMouseClick:function(t){!this._loaded||this.dragging&&this.dragging.moved()||(this.fire("preclick"),this._fireMouseEvent(t))},_fireMouseEvent:function(t){if(this._loaded){var i=t.type;if(i="mouseenter"===i?"mouseover":"mouseleave"===i?"mouseout":i,this.hasEventListeners(i)){"contextmenu"===i&&e.DomEvent.preventDefault(t);var s=this.mouseEventToContainerPoint(t),o=this.containerPointToLayerPoint(s),n=this.layerPointToLatLng(o);this.fire(i,{latlng:n,layerPoint:o,containerPoint:s,originalEvent:t})}}},_onTileLayerLoad:function(){this._tileLayersToLoad--,this._tileLayersNum&&!this._tileLayersToLoad&&this._tileBg&&(clearTimeout(this._clearTileBgTimer),this._clearTileBgTimer=setTimeout(e.bind(this._clearTileBg,this),500))},whenReady:function(t,i){return this._loaded?t.call(i||this,this):this.on("load",t,i),this},_getMapPanePos:function(){return e.DomUtil.getPosition(this._mapPane)},_getTopLeftPoint:function(){if(!this._loaded)throw Error("Set map center and zoom first.");return this._initialTopLeftPoint.subtract(this._getMapPanePos())},_getNewTopLeftPoint:function(t,i){var s=this.getSize()._divideBy(2);return this.project(t,i)._subtract(s)._round()},_latLngToNewLayerPoint:function(t,i,s){var e=this._getNewTopLeftPoint(s,i).add(this._getMapPanePos());return this.project(t,i)._subtract(e)},_getCenterLayerPoint:function(){return this.containerPointToLayerPoint(this.getSize()._divideBy(2))},_getCenterOffset:function(t){return this.latLngToLayerPoint(t).subtract(this._getCenterLayerPoint())},_limitZoom:function(t){var i=this.getMinZoom(),s=this.getMaxZoom();return Math.max(i,Math.min(s,t))}}),e.map=function(t,i){return new e.Map(t,i)},e.Projection.Mercator={MAX_LATITUDE:85.0840591556,R_MINOR:6356752.3142,R_MAJOR:6378137,project:function(t){var i=e.LatLng.DEG_TO_RAD,s=this.MAX_LATITUDE,o=Math.max(Math.min(s,t.lat),-s),n=this.R_MAJOR,a=this.R_MINOR,r=t.lng*i*n,h=o*i,l=a/n,c=Math.sqrt(1-l*l),m=c*Math.sin(h);m=Math.pow((1-m)/(1+m),.5*c);var u=Math.tan(.5*(.5*Math.PI-h))/m;return h=-a*Math.log(u),new e.Point(r,h)},unproject:function(t){for(var i,s=e.LatLng.RAD_TO_DEG,o=this.R_MAJOR,n=this.R_MINOR,a=t.x*s/o,r=n/o,h=Math.sqrt(1-r*r),l=Math.exp(-t.y/n),c=Math.PI/2-2*Math.atan(l),m=15,u=1e-7,d=m,p=.1;Math.abs(p)>u&&--d>0;)i=h*Math.sin(c),p=Math.PI/2-2*Math.atan(l*Math.pow((1-i)/(1+i),.5*h))-c,c+=p;return new e.LatLng(c*s,a)}},e.CRS.EPSG3395=e.extend({},e.CRS,{code:"EPSG:3395",projection:e.Projection.Mercator,transformation:function(){var t=e.Projection.Mercator,i=t.R_MAJOR,s=t.R_MINOR;return new e.Transformation(.5/(Math.PI*i),.5,-.5/(Math.PI*s),.5)}()}),e.TileLayer=e.Class.extend({includes:e.Mixin.Events,options:{minZoom:0,maxZoom:18,tileSize:256,subdomains:"abc",errorTileUrl:"",attribution:"",zoomOffset:0,opacity:1,unloadInvisibleTiles:e.Browser.mobile,updateWhenIdle:e.Browser.mobile},initialize:function(t,i){i=e.setOptions(this,i),i.detectRetina&&e.Browser.retina&&i.maxZoom>0&&(i.tileSize=Math.floor(i.tileSize/2),i.zoomOffset++,i.minZoom>0&&i.minZoom--,this.options.maxZoom--),this._url=t;var s=this.options.subdomains;"string"==typeof s&&(this.options.subdomains=s.split(""))},onAdd:function(t){this._map=t,this._initContainer(),this._createTileProto(),t.on({viewreset:this._resetCallback,moveend:this._update},this),this.options.updateWhenIdle||(this._limitedUpdate=e.Util.limitExecByInterval(this._update,150,this),t.on("move",this._limitedUpdate,this)),this._reset(),this._update()},addTo:function(t){return t.addLayer(this),this},onRemove:function(t){this._container.parentNode.removeChild(this._container),t.off({viewreset:this._resetCallback,moveend:this._update},this),this.options.updateWhenIdle||t.off("move",this._limitedUpdate,this),this._container=null,this._map=null},bringToFront:function(){var t=this._map._panes.tilePane;return this._container&&(t.appendChild(this._container),this._setAutoZIndex(t,Math.max)),this},bringToBack:function(){var t=this._map._panes.tilePane;return this._container&&(t.insertBefore(this._container,t.firstChild),this._setAutoZIndex(t,Math.min)),this},getAttribution:function(){return this.options.attribution},setOpacity:function(t){return this.options.opacity=t,this._map&&this._updateOpacity(),this},setZIndex:function(t){return this.options.zIndex=t,this._updateZIndex(),this},setUrl:function(t,i){return this._url=t,i||this.redraw(),this},redraw:function(){return this._map&&(this._map._panes.tilePane.empty=!1,this._reset(!0),this._update()),this},_updateZIndex:function(){this._container&&this.options.zIndex!==s&&(this._container.style.zIndex=this.options.zIndex)},_setAutoZIndex:function(t,i){var s,e,o,n=t.children,a=-i(1/0,-1/0);for(e=0,o=n.length;o>e;e++)n[e]!==this._container&&(s=parseInt(n[e].style.zIndex,10),isNaN(s)||(a=i(a,s)));this.options.zIndex=this._container.style.zIndex=(isFinite(a)?a:0)+i(1,-1)},_updateOpacity:function(){e.DomUtil.setOpacity(this._container,this.options.opacity);var t,i=this._tiles;if(e.Browser.webkit)for(t in i)i.hasOwnProperty(t)&&(i[t].style.webkitTransform+=" translate(0,0)")},_initContainer:function(){var t=this._map._panes.tilePane;(!this._container||t.empty)&&(this._container=e.DomUtil.create("div","leaflet-layer"),this._updateZIndex(),t.appendChild(this._container),1>this.options.opacity&&this._updateOpacity())},_resetCallback:function(t){this._reset(t.hard)},_reset:function(t){var i=this._tiles;for(var s in i)i.hasOwnProperty(s)&&this.fire("tileunload",{tile:i[s]});this._tiles={},this._tilesToLoad=0,this.options.reuseTiles&&(this._unusedTiles=[]),t&&this._container&&(this._container.innerHTML=""),this._initContainer()},_update:function(){if(this._map){var t=this._map.getPixelBounds(),i=this._map.getZoom(),s=this.options.tileSize;if(!(i>this.options.maxZoom||this.options.minZoom>i)){var o=new e.Point(Math.floor(t.min.x/s),Math.floor(t.min.y/s)),n=new e.Point(Math.floor(t.max.x/s),Math.floor(t.max.y/s)),a=new e.Bounds(o,n);this._addTilesFromCenterOut(a),(this.options.unloadInvisibleTiles||this.options.reuseTiles)&&this._removeOtherTiles(a)}}},_addTilesFromCenterOut:function(t){var s,o,n,a=[],r=t.getCenter();for(s=t.min.y;t.max.y>=s;s++)for(o=t.min.x;t.max.x>=o;o++)n=new e.Point(o,s),this._tileShouldBeLoaded(n)&&a.push(n);var h=a.length;if(0!==h){a.sort(function(t,i){return t.distanceTo(r)-i.distanceTo(r)});var l=i.createDocumentFragment();for(this._tilesToLoad||this.fire("loading"),this._tilesToLoad+=h,o=0;h>o;o++)this._addTile(a[o],l);this._container.appendChild(l)}},_tileShouldBeLoaded:function(t){ -if(t.x+":"+t.y in this._tiles)return!1;if(!this.options.continuousWorld){var i=this._getWrapTileNum();if(this.options.noWrap&&(0>t.x||t.x>=i)||0>t.y||t.y>=i)return!1}return!0},_removeOtherTiles:function(t){var i,s,e,o;for(o in this._tiles)this._tiles.hasOwnProperty(o)&&(i=o.split(":"),s=parseInt(i[0],10),e=parseInt(i[1],10),(t.min.x>s||s>t.max.x||t.min.y>e||e>t.max.y)&&this._removeTile(o))},_removeTile:function(t){var i=this._tiles[t];this.fire("tileunload",{tile:i,url:i.src}),this.options.reuseTiles?(e.DomUtil.removeClass(i,"leaflet-tile-loaded"),this._unusedTiles.push(i)):i.parentNode===this._container&&this._container.removeChild(i),e.Browser.android||(i.src=e.Util.emptyImageUrl),delete this._tiles[t]},_addTile:function(t,i){var s=this._getTilePos(t),o=this._getTile();e.DomUtil.setPosition(o,s,e.Browser.chrome||e.Browser.android23),this._tiles[t.x+":"+t.y]=o,this._loadTile(o,t),o.parentNode!==this._container&&i.appendChild(o)},_getZoomForUrl:function(){var t=this.options,i=this._map.getZoom();return t.zoomReverse&&(i=t.maxZoom-i),i+t.zoomOffset},_getTilePos:function(t){var i=this._map.getPixelOrigin(),s=this.options.tileSize;return t.multiplyBy(s).subtract(i)},getTileUrl:function(t){return this._adjustTilePoint(t),e.Util.template(this._url,e.extend({s:this._getSubdomain(t),z:this._getZoomForUrl(),x:t.x,y:t.y},this.options))},_getWrapTileNum:function(){return Math.pow(2,this._getZoomForUrl())},_adjustTilePoint:function(t){var i=this._getWrapTileNum();this.options.continuousWorld||this.options.noWrap||(t.x=(t.x%i+i)%i),this.options.tms&&(t.y=i-t.y-1)},_getSubdomain:function(t){var i=(t.x+t.y)%this.options.subdomains.length;return this.options.subdomains[i]},_createTileProto:function(){var t=this._tileImg=e.DomUtil.create("img","leaflet-tile");t.style.width=t.style.height=this.options.tileSize+"px",t.galleryimg="no"},_getTile:function(){if(this.options.reuseTiles&&this._unusedTiles.length>0){var t=this._unusedTiles.pop();return this._resetTile(t),t}return this._createTile()},_resetTile:function(){},_createTile:function(){var t=this._tileImg.cloneNode(!1);return t.onselectstart=t.onmousemove=e.Util.falseFn,t},_loadTile:function(t,i){t._layer=this,t.onload=this._tileOnLoad,t.onerror=this._tileOnError,t.src=this.getTileUrl(i)},_tileLoaded:function(){this._tilesToLoad--,this._tilesToLoad||this.fire("load")},_tileOnLoad:function(){var t=this._layer;this.src!==e.Util.emptyImageUrl&&(e.DomUtil.addClass(this,"leaflet-tile-loaded"),t.fire("tileload",{tile:this,url:this.src})),t._tileLoaded()},_tileOnError:function(){var t=this._layer;t.fire("tileerror",{tile:this,url:this.src});var i=t.options.errorTileUrl;i&&(this.src=i),t._tileLoaded()}}),e.tileLayer=function(t,i){return new e.TileLayer(t,i)},e.TileLayer.WMS=e.TileLayer.extend({defaultWmsParams:{service:"WMS",request:"GetMap",version:"1.1.1",layers:"",styles:"",format:"image/jpeg",transparent:!1},initialize:function(t,i){this._url=t;var s=e.extend({},this.defaultWmsParams);s.width=s.height=i.detectRetina&&e.Browser.retina?2*this.options.tileSize:this.options.tileSize;for(var o in i)this.options.hasOwnProperty(o)||(s[o]=i[o]);this.wmsParams=s,e.setOptions(this,i)},onAdd:function(t){var i=parseFloat(this.wmsParams.version)>=1.3?"crs":"srs";this.wmsParams[i]=t.options.crs.code,e.TileLayer.prototype.onAdd.call(this,t)},getTileUrl:function(t,i){this._adjustTilePoint(t);var s=this._map,o=s.options.crs,n=this.options.tileSize,a=t.multiplyBy(n),r=a.add(new e.Point(n,n)),h=o.project(s.unproject(a,i)),l=o.project(s.unproject(r,i)),c=[h.x,l.y,l.x,h.y].join(","),m=e.Util.template(this._url,{s:this._getSubdomain(t)});return m+e.Util.getParamString(this.wmsParams,m)+"&bbox="+c},setParams:function(t,i){return e.extend(this.wmsParams,t),i||this.redraw(),this}}),e.tileLayer.wms=function(t,i){return new e.TileLayer.WMS(t,i)},e.TileLayer.Canvas=e.TileLayer.extend({options:{async:!1},initialize:function(t){e.setOptions(this,t)},redraw:function(){var t=this._tiles;for(var i in t)t.hasOwnProperty(i)&&this._redrawTile(t[i])},_redrawTile:function(t){this.drawTile(t,t._tilePoint,this._map._zoom)},_createTileProto:function(){var t=this._canvasProto=e.DomUtil.create("canvas","leaflet-tile");t.width=t.height=this.options.tileSize},_createTile:function(){var t=this._canvasProto.cloneNode(!1);return t.onselectstart=t.onmousemove=e.Util.falseFn,t},_loadTile:function(t,i){t._layer=this,t._tilePoint=i,this._redrawTile(t),this.options.async||this.tileDrawn(t)},drawTile:function(){},tileDrawn:function(t){this._tileOnLoad.call(t)}}),e.tileLayer.canvas=function(t){return new e.TileLayer.Canvas(t)},e.ImageOverlay=e.Class.extend({includes:e.Mixin.Events,options:{opacity:1},initialize:function(t,i,s){this._url=t,this._bounds=e.latLngBounds(i),e.setOptions(this,s)},onAdd:function(t){this._map=t,this._image||this._initImage(),t._panes.overlayPane.appendChild(this._image),t.on("viewreset",this._reset,this),t.options.zoomAnimation&&e.Browser.any3d&&t.on("zoomanim",this._animateZoom,this),this._reset()},onRemove:function(t){t.getPanes().overlayPane.removeChild(this._image),t.off("viewreset",this._reset,this),t.options.zoomAnimation&&t.off("zoomanim",this._animateZoom,this)},addTo:function(t){return t.addLayer(this),this},setOpacity:function(t){return this.options.opacity=t,this._updateOpacity(),this},bringToFront:function(){return this._image&&this._map._panes.overlayPane.appendChild(this._image),this},bringToBack:function(){var t=this._map._panes.overlayPane;return this._image&&t.insertBefore(this._image,t.firstChild),this},_initImage:function(){this._image=e.DomUtil.create("img","leaflet-image-layer"),this._map.options.zoomAnimation&&e.Browser.any3d?e.DomUtil.addClass(this._image,"leaflet-zoom-animated"):e.DomUtil.addClass(this._image,"leaflet-zoom-hide"),this._updateOpacity(),e.extend(this._image,{galleryimg:"no",onselectstart:e.Util.falseFn,onmousemove:e.Util.falseFn,onload:e.bind(this._onImageLoad,this),src:this._url})},_animateZoom:function(t){var i=this._map,s=this._image,o=i.getZoomScale(t.zoom),n=this._bounds.getNorthWest(),a=this._bounds.getSouthEast(),r=i._latLngToNewLayerPoint(n,t.zoom,t.center),h=i._latLngToNewLayerPoint(a,t.zoom,t.center)._subtract(r),l=r._add(h._multiplyBy(.5*(1-1/o)));s.style[e.DomUtil.TRANSFORM]=e.DomUtil.getTranslateString(l)+" scale("+o+") "},_reset:function(){var t=this._image,i=this._map.latLngToLayerPoint(this._bounds.getNorthWest()),s=this._map.latLngToLayerPoint(this._bounds.getSouthEast())._subtract(i);e.DomUtil.setPosition(t,i),t.style.width=s.x+"px",t.style.height=s.y+"px"},_onImageLoad:function(){this.fire("load")},_updateOpacity:function(){e.DomUtil.setOpacity(this._image,this.options.opacity)}}),e.imageOverlay=function(t,i,s){return new e.ImageOverlay(t,i,s)},e.Icon=e.Class.extend({options:{className:""},initialize:function(t){e.setOptions(this,t)},createIcon:function(){return this._createIcon("icon")},createShadow:function(){return this._createIcon("shadow")},_createIcon:function(t){var i=this._getIconUrl(t);if(!i){if("icon"===t)throw Error("iconUrl not set in Icon options (see the docs).");return null}var s=this._createImg(i);return this._setIconStyles(s,t),s},_setIconStyles:function(t,i){var s,o=this.options,n=e.point(o[i+"Size"]);s="shadow"===i?e.point(o.shadowAnchor||o.iconAnchor):e.point(o.iconAnchor),!s&&n&&(s=n.divideBy(2,!0)),t.className="leaflet-marker-"+i+" "+o.className,s&&(t.style.marginLeft=-s.x+"px",t.style.marginTop=-s.y+"px"),n&&(t.style.width=n.x+"px",t.style.height=n.y+"px")},_createImg:function(t){var s;return e.Browser.ie6?(s=i.createElement("div"),s.style.filter='progid:DXImageTransform.Microsoft.AlphaImageLoader(src="'+t+'")'):(s=i.createElement("img"),s.src=t),s},_getIconUrl:function(t){return e.Browser.retina&&this.options[t+"RetinaUrl"]?this.options[t+"RetinaUrl"]:this.options[t+"Url"]}}),e.icon=function(t){return new e.Icon(t)},e.Icon.Default=e.Icon.extend({options:{iconSize:new e.Point(25,41),iconAnchor:new e.Point(12,41),popupAnchor:new e.Point(1,-34),shadowSize:new e.Point(41,41)},_getIconUrl:function(t){var i=t+"Url";if(this.options[i])return this.options[i];e.Browser.retina&&"icon"===t&&(t+="@2x");var s=e.Icon.Default.imagePath;if(!s)throw Error("Couldn't autodetect L.Icon.Default.imagePath, set it manually.");return"marker-"+t+".png"}}),e.Icon.Default.imagePath=function(){var t,s,e,o,n=i.getElementsByTagName("script"),a=/\/?leaflet[\-\._]?([\w\-\._]*)\.js\??/;for(t=0,s=n.length;s>t;t++)if(e=n[t].src,o=e.match(a))return e.split(a)[0]+""}(),e.Marker=e.Class.extend({includes:e.Mixin.Events,options:{icon:new e.Icon.Default,title:"",clickable:!0,draggable:!1,zIndexOffset:0,opacity:1,riseOnHover:!1,riseOffset:250},initialize:function(t,i){e.setOptions(this,i),this._latlng=e.latLng(t)},onAdd:function(t){this._map=t,t.on("viewreset",this.update,this),this._initIcon(),this.update(),t.options.zoomAnimation&&t.options.markerZoomAnimation&&t.on("zoomanim",this._animateZoom,this)},addTo:function(t){return t.addLayer(this),this},onRemove:function(t){this._removeIcon(),this.fire("remove"),t.off({viewreset:this.update,zoomanim:this._animateZoom},this),this._map=null},getLatLng:function(){return this._latlng},setLatLng:function(t){return this._latlng=e.latLng(t),this.update(),this.fire("move",{latlng:this._latlng})},setZIndexOffset:function(t){return this.options.zIndexOffset=t,this.update(),this},setIcon:function(t){return this._map&&this._removeIcon(),this.options.icon=t,this._map&&(this._initIcon(),this.update()),this},update:function(){if(this._icon){var t=this._map.latLngToLayerPoint(this._latlng).round();this._setPos(t)}return this},_initIcon:function(){var t=this.options,i=this._map,s=i.options.zoomAnimation&&i.options.markerZoomAnimation,o=s?"leaflet-zoom-animated":"leaflet-zoom-hide",n=!1;this._icon||(this._icon=t.icon.createIcon(),t.title&&(this._icon.title=t.title),this._initInteraction(),n=1>this.options.opacity,e.DomUtil.addClass(this._icon,o),t.riseOnHover&&e.DomEvent.on(this._icon,"mouseover",this._bringToFront,this).on(this._icon,"mouseout",this._resetZIndex,this)),this._shadow||(this._shadow=t.icon.createShadow(),this._shadow&&(e.DomUtil.addClass(this._shadow,o),n=1>this.options.opacity)),n&&this._updateOpacity();var a=this._map._panes;a.markerPane.appendChild(this._icon),this._shadow&&a.shadowPane.appendChild(this._shadow)},_removeIcon:function(){var t=this._map._panes;this.options.riseOnHover&&e.DomEvent.off(this._icon,"mouseover",this._bringToFront).off(this._icon,"mouseout",this._resetZIndex),t.markerPane.removeChild(this._icon),this._shadow&&t.shadowPane.removeChild(this._shadow),this._icon=this._shadow=null},_setPos:function(t){e.DomUtil.setPosition(this._icon,t),this._shadow&&e.DomUtil.setPosition(this._shadow,t),this._zIndex=t.y+this.options.zIndexOffset,this._resetZIndex()},_updateZIndex:function(t){this._icon.style.zIndex=this._zIndex+t},_animateZoom:function(t){var i=this._map._latLngToNewLayerPoint(this._latlng,t.zoom,t.center);this._setPos(i)},_initInteraction:function(){if(this.options.clickable){var t=this._icon,i=["dblclick","mousedown","mouseover","mouseout","contextmenu"];e.DomUtil.addClass(t,"leaflet-clickable"),e.DomEvent.on(t,"click",this._onMouseClick,this);for(var s=0;i.length>s;s++)e.DomEvent.on(t,i[s],this._fireMouseEvent,this);e.Handler.MarkerDrag&&(this.dragging=new e.Handler.MarkerDrag(this),this.options.draggable&&this.dragging.enable())}},_onMouseClick:function(t){var i=this.dragging&&this.dragging.moved();(this.hasEventListeners(t.type)||i)&&e.DomEvent.stopPropagation(t),i||(this.dragging&&this.dragging._enabled||!this._map.dragging||!this._map.dragging.moved())&&this.fire(t.type,{originalEvent:t})},_fireMouseEvent:function(t){this.fire(t.type,{originalEvent:t}),"contextmenu"===t.type&&this.hasEventListeners(t.type)&&e.DomEvent.preventDefault(t),"mousedown"!==t.type&&e.DomEvent.stopPropagation(t)},setOpacity:function(t){this.options.opacity=t,this._map&&this._updateOpacity()},_updateOpacity:function(){e.DomUtil.setOpacity(this._icon,this.options.opacity),this._shadow&&e.DomUtil.setOpacity(this._shadow,this.options.opacity)},_bringToFront:function(){this._updateZIndex(this.options.riseOffset)},_resetZIndex:function(){this._updateZIndex(0)}}),e.marker=function(t,i){return new e.Marker(t,i)},e.DivIcon=e.Icon.extend({options:{iconSize:new e.Point(12,12),className:"leaflet-div-icon"},createIcon:function(){var t=i.createElement("div"),s=this.options;return s.html&&(t.innerHTML=s.html),s.bgPos&&(t.style.backgroundPosition=-s.bgPos.x+"px "+-s.bgPos.y+"px"),this._setIconStyles(t,"icon"),t},createShadow:function(){return null}}),e.divIcon=function(t){return new e.DivIcon(t)},e.Map.mergeOptions({closePopupOnClick:!0}),e.Popup=e.Class.extend({includes:e.Mixin.Events,options:{minWidth:50,maxWidth:300,maxHeight:null,autoPan:!0,closeButton:!0,offset:new e.Point(0,6),autoPanPadding:new e.Point(5,5),className:"",zoomAnimation:!0},initialize:function(t,i){e.setOptions(this,t),this._source=i,this._animated=e.Browser.any3d&&this.options.zoomAnimation},onAdd:function(t){this._map=t,this._container||this._initLayout(),this._updateContent();var i=t.options.fadeAnimation;i&&e.DomUtil.setOpacity(this._container,0),t._panes.popupPane.appendChild(this._container),t.on("viewreset",this._updatePosition,this),this._animated&&t.on("zoomanim",this._zoomAnimation,this),t.options.closePopupOnClick&&t.on("preclick",this._close,this),this._update(),i&&e.DomUtil.setOpacity(this._container,1)},addTo:function(t){return t.addLayer(this),this},openOn:function(t){return t.openPopup(this),this},onRemove:function(t){t._panes.popupPane.removeChild(this._container),e.Util.falseFn(this._container.offsetWidth),t.off({viewreset:this._updatePosition,preclick:this._close,zoomanim:this._zoomAnimation},this),t.options.fadeAnimation&&e.DomUtil.setOpacity(this._container,0),this._map=null},setLatLng:function(t){return this._latlng=e.latLng(t),this._update(),this},setContent:function(t){return this._content=t,this._update(),this},_close:function(){var t=this._map;t&&(t._popup=null,t.removeLayer(this).fire("popupclose",{popup:this}))},_initLayout:function(){var t,i="leaflet-popup",s=i+" "+this.options.className+" leaflet-zoom-"+(this._animated?"animated":"hide"),o=this._container=e.DomUtil.create("div",s);this.options.closeButton&&(t=this._closeButton=e.DomUtil.create("a",i+"-close-button",o),t.href="#close",t.innerHTML="×",e.DomEvent.on(t,"click",this._onCloseButtonClick,this));var n=this._wrapper=e.DomUtil.create("div",i+"-content-wrapper",o);e.DomEvent.disableClickPropagation(n),this._contentNode=e.DomUtil.create("div",i+"-content",n),e.DomEvent.on(this._contentNode,"mousewheel",e.DomEvent.stopPropagation),this._tipContainer=e.DomUtil.create("div",i+"-tip-container",o),this._tip=e.DomUtil.create("div",i+"-tip",this._tipContainer)},_update:function(){this._map&&(this._container.style.visibility="hidden",this._updateContent(),this._updateLayout(),this._updatePosition(),this._container.style.visibility="",this._adjustPan())},_updateContent:function(){if(this._content){if("string"==typeof this._content)this._contentNode.innerHTML=this._content;else{for(;this._contentNode.hasChildNodes();)this._contentNode.removeChild(this._contentNode.firstChild);this._contentNode.appendChild(this._content)}this.fire("contentupdate")}},_updateLayout:function(){var t=this._contentNode,i=t.style;i.width="",i.whiteSpace="nowrap";var s=t.offsetWidth;s=Math.min(s,this.options.maxWidth),s=Math.max(s,this.options.minWidth),i.width=s+1+"px",i.whiteSpace="",i.height="";var o=t.offsetHeight,n=this.options.maxHeight,a="leaflet-popup-scrolled";n&&o>n?(i.height=n+"px",e.DomUtil.addClass(t,a)):e.DomUtil.removeClass(t,a),this._containerWidth=this._container.offsetWidth},_updatePosition:function(){if(this._map){var t=this._map.latLngToLayerPoint(this._latlng),i=this._animated,s=this.options.offset;i&&e.DomUtil.setPosition(this._container,t),this._containerBottom=-s.y-(i?0:t.y),this._containerLeft=-Math.round(this._containerWidth/2)+s.x+(i?0:t.x),this._container.style.bottom=this._containerBottom+"px",this._container.style.left=this._containerLeft+"px"}},_zoomAnimation:function(t){var i=this._map._latLngToNewLayerPoint(this._latlng,t.zoom,t.center);e.DomUtil.setPosition(this._container,i)},_adjustPan:function(){if(this.options.autoPan){var t=this._map,i=this._container.offsetHeight,s=this._containerWidth,o=new e.Point(this._containerLeft,-i-this._containerBottom);this._animated&&o._add(e.DomUtil.getPosition(this._container));var n=t.layerPointToContainerPoint(o),a=this.options.autoPanPadding,r=t.getSize(),h=0,l=0;0>n.x&&(h=n.x-a.x),n.x+s>r.x&&(h=n.x+s-r.x+a.x),0>n.y&&(l=n.y-a.y),n.y+i>r.y&&(l=n.y+i-r.y+a.y),(h||l)&&t.panBy(new e.Point(h,l))}},_onCloseButtonClick:function(t){this._close(),e.DomEvent.stop(t)}}),e.popup=function(t,i){return new e.Popup(t,i)},e.Marker.include({openPopup:function(){return this._popup&&this._map&&(this._popup.setLatLng(this._latlng),this._map.openPopup(this._popup)),this},closePopup:function(){return this._popup&&this._popup._close(),this},bindPopup:function(t,i){var s=e.point(this.options.icon.options.popupAnchor)||new e.Point(0,0);return s=s.add(e.Popup.prototype.options.offset),i&&i.offset&&(s=s.add(i.offset)),i=e.extend({offset:s},i),this._popup||this.on("click",this.openPopup,this).on("remove",this.closePopup,this).on("move",this._movePopup,this),this._popup=new e.Popup(i,this).setContent(t),this},unbindPopup:function(){return this._popup&&(this._popup=null,this.off("click",this.openPopup).off("remove",this.closePopup).off("move",this._movePopup)),this},_movePopup:function(t){this._popup.setLatLng(t.latlng)}}),e.Map.include({openPopup:function(t){return this.closePopup(),this._popup=t,this.addLayer(t).fire("popupopen",{popup:this._popup})},closePopup:function(){return this._popup&&this._popup._close(),this}}),e.LayerGroup=e.Class.extend({initialize:function(t){this._layers={};var i,s;if(t)for(i=0,s=t.length;s>i;i++)this.addLayer(t[i])},addLayer:function(t){var i=e.stamp(t);return this._layers[i]=t,this._map&&this._map.addLayer(t),this},removeLayer:function(t){var i=e.stamp(t);return delete this._layers[i],this._map&&this._map.removeLayer(t),this},clearLayers:function(){return this.eachLayer(this.removeLayer,this),this},invoke:function(t){var i,s,e=Array.prototype.slice.call(arguments,1);for(i in this._layers)this._layers.hasOwnProperty(i)&&(s=this._layers[i],s[t]&&s[t].apply(s,e));return this},onAdd:function(t){this._map=t,this.eachLayer(t.addLayer,t)},onRemove:function(t){this.eachLayer(t.removeLayer,t),this._map=null},addTo:function(t){return t.addLayer(this),this},eachLayer:function(t,i){for(var s in this._layers)this._layers.hasOwnProperty(s)&&t.call(i,this._layers[s])},setZIndex:function(t){return this.invoke("setZIndex",t)}}),e.layerGroup=function(t){return new e.LayerGroup(t)},e.FeatureGroup=e.LayerGroup.extend({includes:e.Mixin.Events,statics:{EVENTS:"click dblclick mouseover mouseout mousemove contextmenu"},addLayer:function(t){return this._layers[e.stamp(t)]?this:(t.on(e.FeatureGroup.EVENTS,this._propagateEvent,this),e.LayerGroup.prototype.addLayer.call(this,t),this._popupContent&&t.bindPopup&&t.bindPopup(this._popupContent,this._popupOptions),this.fire("layeradd",{layer:t}))},removeLayer:function(t){return t.off(e.FeatureGroup.EVENTS,this._propagateEvent,this),e.LayerGroup.prototype.removeLayer.call(this,t),this._popupContent&&this.invoke("unbindPopup"),this.fire("layerremove",{layer:t})},bindPopup:function(t,i){return this._popupContent=t,this._popupOptions=i,this.invoke("bindPopup",t,i)},setStyle:function(t){return this.invoke("setStyle",t)},bringToFront:function(){return this.invoke("bringToFront")},bringToBack:function(){return this.invoke("bringToBack")},getBounds:function(){var t=new e.LatLngBounds;return this.eachLayer(function(i){t.extend(i instanceof e.Marker?i.getLatLng():i.getBounds())}),t},_propagateEvent:function(t){t.layer=t.target,t.target=this,this.fire(t.type,t)}}),e.featureGroup=function(t){return new e.FeatureGroup(t)},e.Path=e.Class.extend({includes:[e.Mixin.Events],statics:{CLIP_PADDING:e.Browser.mobile?Math.max(0,Math.min(.5,(1280/Math.max(t.innerWidth,t.innerHeight)-1)/2)):.5},options:{stroke:!0,color:"#0033ff",dashArray:null,weight:5,opacity:.5,fill:!1,fillColor:null,fillOpacity:.2,clickable:!0},initialize:function(t){e.setOptions(this,t)},onAdd:function(t){this._map=t,this._container||(this._initElements(),this._initEvents()),this.projectLatlngs(),this._updatePath(),this._container&&this._map._pathRoot.appendChild(this._container),this.fire("add"),t.on({viewreset:this.projectLatlngs,moveend:this._updatePath},this)},addTo:function(t){return t.addLayer(this),this},onRemove:function(t){t._pathRoot.removeChild(this._container),this.fire("remove"),this._map=null,e.Browser.vml&&(this._container=null,this._stroke=null,this._fill=null),t.off({viewreset:this.projectLatlngs,moveend:this._updatePath},this)},projectLatlngs:function(){},setStyle:function(t){return e.setOptions(this,t),this._container&&this._updateStyle(),this},redraw:function(){return this._map&&(this.projectLatlngs(),this._updatePath()),this}}),e.Map.include({_updatePathViewport:function(){var t=e.Path.CLIP_PADDING,i=this.getSize(),s=e.DomUtil.getPosition(this._mapPane),o=s.multiplyBy(-1)._subtract(i.multiplyBy(t)._round()),n=o.add(i.multiplyBy(1+2*t)._round());this._pathViewport=new e.Bounds(o,n)}}),e.Path.SVG_NS="http://www.w3.org/2000/svg",e.Browser.svg=!(!i.createElementNS||!i.createElementNS(e.Path.SVG_NS,"svg").createSVGRect),e.Path=e.Path.extend({statics:{SVG:e.Browser.svg},bringToFront:function(){var t=this._map._pathRoot,i=this._container;return i&&t.lastChild!==i&&t.appendChild(i),this},bringToBack:function(){var t=this._map._pathRoot,i=this._container,s=t.firstChild;return i&&s!==i&&t.insertBefore(i,s),this},getPathString:function(){},_createElement:function(t){return i.createElementNS(e.Path.SVG_NS,t)},_initElements:function(){this._map._initPathRoot(),this._initPath(),this._initStyle()},_initPath:function(){this._container=this._createElement("g"),this._path=this._createElement("path"),this._container.appendChild(this._path)},_initStyle:function(){this.options.stroke&&(this._path.setAttribute("stroke-linejoin","round"),this._path.setAttribute("stroke-linecap","round")),this.options.fill&&this._path.setAttribute("fill-rule","evenodd"),this._updateStyle()},_updateStyle:function(){this.options.stroke?(this._path.setAttribute("stroke",this.options.color),this._path.setAttribute("stroke-opacity",this.options.opacity),this._path.setAttribute("stroke-width",this.options.weight),this.options.dashArray?this._path.setAttribute("stroke-dasharray",this.options.dashArray):this._path.removeAttribute("stroke-dasharray")):this._path.setAttribute("stroke","none"),this.options.fill?(this._path.setAttribute("fill",this.options.fillColor||this.options.color),this._path.setAttribute("fill-opacity",this.options.fillOpacity)):this._path.setAttribute("fill","none")},_updatePath:function(){var t=this.getPathString();t||(t="M0 0"),this._path.setAttribute("d",t)},_initEvents:function(){if(this.options.clickable){(e.Browser.svg||!e.Browser.vml)&&this._path.setAttribute("class","leaflet-clickable"),e.DomEvent.on(this._container,"click",this._onMouseClick,this);for(var t=["dblclick","mousedown","mouseover","mouseout","mousemove","contextmenu"],i=0;t.length>i;i++)e.DomEvent.on(this._container,t[i],this._fireMouseEvent,this)}},_onMouseClick:function(t){this._map.dragging&&this._map.dragging.moved()||this._fireMouseEvent(t)},_fireMouseEvent:function(t){if(this.hasEventListeners(t.type)){var i=this._map,s=i.mouseEventToContainerPoint(t),o=i.containerPointToLayerPoint(s),n=i.layerPointToLatLng(o);this.fire(t.type,{latlng:n,layerPoint:o,containerPoint:s,originalEvent:t}),"contextmenu"===t.type&&e.DomEvent.preventDefault(t),"mousemove"!==t.type&&e.DomEvent.stopPropagation(t)}}}),e.Map.include({_initPathRoot:function(){this._pathRoot||(this._pathRoot=e.Path.prototype._createElement("svg"),this._panes.overlayPane.appendChild(this._pathRoot),this.options.zoomAnimation&&e.Browser.any3d?(this._pathRoot.setAttribute("class"," leaflet-zoom-animated"),this.on({zoomanim:this._animatePathZoom,zoomend:this._endPathZoom})):this._pathRoot.setAttribute("class"," leaflet-zoom-hide"),this.on("moveend",this._updateSvgViewport),this._updateSvgViewport())},_animatePathZoom:function(t){var i=this.getZoomScale(t.zoom),s=this._getCenterOffset(t.center)._multiplyBy(-i)._add(this._pathViewport.min);this._pathRoot.style[e.DomUtil.TRANSFORM]=e.DomUtil.getTranslateString(s)+" scale("+i+") ",this._pathZooming=!0},_endPathZoom:function(){this._pathZooming=!1},_updateSvgViewport:function(){if(!this._pathZooming){this._updatePathViewport();var t=this._pathViewport,i=t.min,s=t.max,o=s.x-i.x,n=s.y-i.y,a=this._pathRoot,r=this._panes.overlayPane;e.Browser.mobileWebkit&&r.removeChild(a),e.DomUtil.setPosition(a,i),a.setAttribute("width",o),a.setAttribute("height",n),a.setAttribute("viewBox",[i.x,i.y,o,n].join(" ")),e.Browser.mobileWebkit&&r.appendChild(a)}}}),e.Path.include({bindPopup:function(t,i){return(!this._popup||i)&&(this._popup=new e.Popup(i,this)),this._popup.setContent(t),this._popupHandlersAdded||(this.on("click",this._openPopup,this).on("remove",this.closePopup,this),this._popupHandlersAdded=!0),this},unbindPopup:function(){return this._popup&&(this._popup=null,this.off("click",this._openPopup).off("remove",this.closePopup),this._popupHandlersAdded=!1),this},openPopup:function(t){return this._popup&&(t=t||this._latlng||this._latlngs[Math.floor(this._latlngs.length/2)],this._openPopup({latlng:t})),this},closePopup:function(){return this._popup&&this._popup._close(),this},_openPopup:function(t){this._popup.setLatLng(t.latlng),this._map.openPopup(this._popup)}}),e.Browser.vml=!e.Browser.svg&&function(){try{var t=i.createElement("div");t.innerHTML='';var s=t.firstChild;return s.style.behavior="url(#default#VML)",s&&"object"==typeof s.adj}catch(e){return!1}}(),e.Path=e.Browser.svg||!e.Browser.vml?e.Path:e.Path.extend({statics:{VML:!0,CLIP_PADDING:.02},_createElement:function(){try{return i.namespaces.add("lvml","urn:schemas-microsoft-com:vml"),function(t){return i.createElement("')}}catch(t){return function(t){return i.createElement("<"+t+' xmlns="urn:schemas-microsoft.com:vml" class="lvml">')}}}(),_initPath:function(){var t=this._container=this._createElement("shape");e.DomUtil.addClass(t,"leaflet-vml-shape"),this.options.clickable&&e.DomUtil.addClass(t,"leaflet-clickable"),t.coordsize="1 1",this._path=this._createElement("path"),t.appendChild(this._path),this._map._pathRoot.appendChild(t)},_initStyle:function(){this._updateStyle()},_updateStyle:function(){var t=this._stroke,i=this._fill,s=this.options,e=this._container;e.stroked=s.stroke,e.filled=s.fill,s.stroke?(t||(t=this._stroke=this._createElement("stroke"),t.endcap="round",e.appendChild(t)),t.weight=s.weight+"px",t.color=s.color,t.opacity=s.opacity,t.dashStyle=s.dashArray?s.dashArray instanceof Array?s.dashArray.join(" "):s.dashArray.replace(/ *, */g," "):""):t&&(e.removeChild(t),this._stroke=null),s.fill?(i||(i=this._fill=this._createElement("fill"),e.appendChild(i)),i.color=s.fillColor||s.color,i.opacity=s.fillOpacity):i&&(e.removeChild(i),this._fill=null)},_updatePath:function(){var t=this._container.style;t.display="none",this._path.v=this.getPathString()+" ",t.display=""}}),e.Map.include(e.Browser.svg||!e.Browser.vml?{}:{_initPathRoot:function(){if(!this._pathRoot){var t=this._pathRoot=i.createElement("div");t.className="leaflet-vml-container",this._panes.overlayPane.appendChild(t),this.on("moveend",this._updatePathViewport),this._updatePathViewport()}}}),e.Browser.canvas=function(){return!!i.createElement("canvas").getContext}(),e.Path=e.Path.SVG&&!t.L_PREFER_CANVAS||!e.Browser.canvas?e.Path:e.Path.extend({statics:{CANVAS:!0,SVG:!1},redraw:function(){return this._map&&(this.projectLatlngs(),this._requestUpdate()),this},setStyle:function(t){return e.setOptions(this,t),this._map&&(this._updateStyle(),this._requestUpdate()),this},onRemove:function(t){t.off("viewreset",this.projectLatlngs,this).off("moveend",this._updatePath,this),this.options.clickable&&this._map.off("click",this._onClick,this),this._requestUpdate(),this._map=null},_requestUpdate:function(){this._map&&!e.Path._updateRequest&&(e.Path._updateRequest=e.Util.requestAnimFrame(this._fireMapMoveEnd,this._map))},_fireMapMoveEnd:function(){e.Path._updateRequest=null,this.fire("moveend")},_initElements:function(){this._map._initPathRoot(),this._ctx=this._map._canvasCtx},_updateStyle:function(){var t=this.options;t.stroke&&(this._ctx.lineWidth=t.weight,this._ctx.strokeStyle=t.color),t.fill&&(this._ctx.fillStyle=t.fillColor||t.color)},_drawPath:function(){var t,i,s,o,n,a;for(this._ctx.beginPath(),t=0,s=this._parts.length;s>t;t++){for(i=0,o=this._parts[t].length;o>i;i++)n=this._parts[t][i],a=(0===i?"move":"line")+"To",this._ctx[a](n.x,n.y);this instanceof e.Polygon&&this._ctx.closePath()}},_checkIfEmpty:function(){return!this._parts.length},_updatePath:function(){if(!this._checkIfEmpty()){var t=this._ctx,i=this.options;this._drawPath(),t.save(),this._updateStyle(),i.fill&&(t.globalAlpha=i.fillOpacity,t.fill()),i.stroke&&(t.globalAlpha=i.opacity,t.stroke()),t.restore()}},_initEvents:function(){this.options.clickable&&this._map.on("click",this._onClick,this)},_onClick:function(t){this._containsPoint(t.layerPoint)&&this.fire("click",{latlng:t.latlng,layerPoint:t.layerPoint,containerPoint:t.containerPoint,originalEvent:t})}}),e.Map.include(e.Path.SVG&&!t.L_PREFER_CANVAS||!e.Browser.canvas?{}:{_initPathRoot:function(){var t,s=this._pathRoot;s||(s=this._pathRoot=i.createElement("canvas"),s.style.position="absolute",t=this._canvasCtx=s.getContext("2d"),t.lineCap="round",t.lineJoin="round",this._panes.overlayPane.appendChild(s),this.options.zoomAnimation&&(this._pathRoot.className="leaflet-zoom-animated",this.on("zoomanim",this._animatePathZoom),this.on("zoomend",this._endPathZoom)),this.on("moveend",this._updateCanvasViewport),this._updateCanvasViewport())},_updateCanvasViewport:function(){if(!this._pathZooming){this._updatePathViewport();var t=this._pathViewport,i=t.min,s=t.max.subtract(i),o=this._pathRoot;e.DomUtil.setPosition(o,i),o.width=s.x,o.height=s.y,o.getContext("2d").translate(-i.x,-i.y)}}}),e.LineUtil={simplify:function(t,i){if(!i||!t.length)return t.slice();var s=i*i;return t=this._reducePoints(t,s),t=this._simplifyDP(t,s)},pointToSegmentDistance:function(t,i,s){return Math.sqrt(this._sqClosestPointOnSegment(t,i,s,!0))},closestPointOnSegment:function(t,i,s){return this._sqClosestPointOnSegment(t,i,s)},_simplifyDP:function(t,i){var e=t.length,o=typeof Uint8Array!=s+""?Uint8Array:Array,n=new o(e);n[0]=n[e-1]=1,this._simplifyDPStep(t,n,i,0,e-1);var a,r=[];for(a=0;e>a;a++)n[a]&&r.push(t[a]);return r},_simplifyDPStep:function(t,i,s,e,o){var n,a,r,h=0;for(a=e+1;o-1>=a;a++)r=this._sqClosestPointOnSegment(t[a],t[e],t[o],!0),r>h&&(n=a,h=r);h>s&&(i[n]=1,this._simplifyDPStep(t,i,s,e,n),this._simplifyDPStep(t,i,s,n,o))},_reducePoints:function(t,i){for(var s=[t[0]],e=1,o=0,n=t.length;n>e;e++)this._sqDist(t[e],t[o])>i&&(s.push(t[e]),o=e);return n-1>o&&s.push(t[n-1]),s},clipSegment:function(t,i,s,e){var o,n,a,r=e?this._lastCode:this._getBitCode(t,s),h=this._getBitCode(i,s);for(this._lastCode=h;;){if(!(r|h))return[t,i];if(r&h)return!1;o=r||h,n=this._getEdgeIntersection(t,i,o,s),a=this._getBitCode(n,s),o===r?(t=n,r=a):(i=n,h=a)}},_getEdgeIntersection:function(t,i,o,n){var a=i.x-t.x,r=i.y-t.y,h=n.min,l=n.max;return 8&o?new e.Point(t.x+a*(l.y-t.y)/r,l.y):4&o?new e.Point(t.x+a*(h.y-t.y)/r,h.y):2&o?new e.Point(l.x,t.y+r*(l.x-t.x)/a):1&o?new e.Point(h.x,t.y+r*(h.x-t.x)/a):s},_getBitCode:function(t,i){var s=0;return t.xi.max.x&&(s|=2),t.yi.max.y&&(s|=8),s},_sqDist:function(t,i){var s=i.x-t.x,e=i.y-t.y;return s*s+e*e},_sqClosestPointOnSegment:function(t,i,s,o){var n,a=i.x,r=i.y,h=s.x-a,l=s.y-r,c=h*h+l*l;return c>0&&(n=((t.x-a)*h+(t.y-r)*l)/c, -n>1?(a=s.x,r=s.y):n>0&&(a+=h*n,r+=l*n)),h=t.x-a,l=t.y-r,o?h*h+l*l:new e.Point(a,r)}},e.Polyline=e.Path.extend({initialize:function(t,i){e.Path.prototype.initialize.call(this,i),this._latlngs=this._convertLatLngs(t)},options:{smoothFactor:1,noClip:!1},projectLatlngs:function(){this._originalPoints=[];for(var t=0,i=this._latlngs.length;i>t;t++)this._originalPoints[t]=this._map.latLngToLayerPoint(this._latlngs[t])},getPathString:function(){for(var t=0,i=this._parts.length,s="";i>t;t++)s+=this._getPathPartStr(this._parts[t]);return s},getLatLngs:function(){return this._latlngs},setLatLngs:function(t){return this._latlngs=this._convertLatLngs(t),this.redraw()},addLatLng:function(t){return this._latlngs.push(e.latLng(t)),this.redraw()},spliceLatLngs:function(){var t=[].splice.apply(this._latlngs,arguments);return this._convertLatLngs(this._latlngs),this.redraw(),t},closestLayerPoint:function(t){for(var i,s,o=1/0,n=this._parts,a=null,r=0,h=n.length;h>r;r++)for(var l=n[r],c=1,m=l.length;m>c;c++){i=l[c-1],s=l[c];var u=e.LineUtil._sqClosestPointOnSegment(t,i,s,!0);o>u&&(o=u,a=e.LineUtil._sqClosestPointOnSegment(t,i,s))}return a&&(a.distance=Math.sqrt(o)),a},getBounds:function(){var t,i,s=new e.LatLngBounds,o=this.getLatLngs();for(t=0,i=o.length;i>t;t++)s.extend(o[t]);return s},_convertLatLngs:function(t){var i,s;for(i=0,s=t.length;s>i;i++){if(e.Util.isArray(t[i])&&"number"!=typeof t[i][0])return;t[i]=e.latLng(t[i])}return t},_initEvents:function(){e.Path.prototype._initEvents.call(this)},_getPathPartStr:function(t){for(var i,s=e.Path.VML,o=0,n=t.length,a="";n>o;o++)i=t[o],s&&i._round(),a+=(o?"L":"M")+i.x+" "+i.y;return a},_clipPoints:function(){var t,i,o,n=this._originalPoints,a=n.length;if(this.options.noClip)return this._parts=[n],s;this._parts=[];var r=this._parts,h=this._map._pathViewport,l=e.LineUtil;for(t=0,i=0;a-1>t;t++)o=l.clipSegment(n[t],n[t+1],h,t),o&&(r[i]=r[i]||[],r[i].push(o[0]),(o[1]!==n[t+1]||t===a-2)&&(r[i].push(o[1]),i++))},_simplifyPoints:function(){for(var t=this._parts,i=e.LineUtil,s=0,o=t.length;o>s;s++)t[s]=i.simplify(t[s],this.options.smoothFactor)},_updatePath:function(){this._map&&(this._clipPoints(),this._simplifyPoints(),e.Path.prototype._updatePath.call(this))}}),e.polyline=function(t,i){return new e.Polyline(t,i)},e.PolyUtil={},e.PolyUtil.clipPolygon=function(t,i){var s,o,n,a,r,h,l,c,m,u=[1,4,2,8],d=e.LineUtil;for(o=0,l=t.length;l>o;o++)t[o]._code=d._getBitCode(t[o],i);for(a=0;4>a;a++){for(c=u[a],s=[],o=0,l=t.length,n=l-1;l>o;n=o++)r=t[o],h=t[n],r._code&c?h._code&c||(m=d._getEdgeIntersection(h,r,c,i),m._code=d._getBitCode(m,i),s.push(m)):(h._code&c&&(m=d._getEdgeIntersection(h,r,c,i),m._code=d._getBitCode(m,i),s.push(m)),s.push(r));t=s}return t},e.Polygon=e.Polyline.extend({options:{fill:!0},initialize:function(t,i){e.Polyline.prototype.initialize.call(this,t,i),t&&e.Util.isArray(t[0])&&"number"!=typeof t[0][0]&&(this._latlngs=this._convertLatLngs(t[0]),this._holes=t.slice(1))},projectLatlngs:function(){if(e.Polyline.prototype.projectLatlngs.call(this),this._holePoints=[],this._holes){var t,i,s,o;for(t=0,s=this._holes.length;s>t;t++)for(this._holePoints[t]=[],i=0,o=this._holes[t].length;o>i;i++)this._holePoints[t][i]=this._map.latLngToLayerPoint(this._holes[t][i])}},_clipPoints:function(){var t=this._originalPoints,i=[];if(this._parts=[t].concat(this._holePoints),!this.options.noClip){for(var s=0,o=this._parts.length;o>s;s++){var n=e.PolyUtil.clipPolygon(this._parts[s],this._map._pathViewport);n.length&&i.push(n)}this._parts=i}},_getPathPartStr:function(t){var i=e.Polyline.prototype._getPathPartStr.call(this,t);return i+(e.Browser.svg?"z":"x")}}),e.polygon=function(t,i){return new e.Polygon(t,i)},function(){function t(t){return e.FeatureGroup.extend({initialize:function(t,i){this._layers={},this._options=i,this.setLatLngs(t)},setLatLngs:function(i){var s=0,e=i.length;for(this.eachLayer(function(t){e>s?t.setLatLngs(i[s++]):this.removeLayer(t)},this);e>s;)this.addLayer(new t(i[s++],this._options));return this}})}e.MultiPolyline=t(e.Polyline),e.MultiPolygon=t(e.Polygon),e.multiPolyline=function(t,i){return new e.MultiPolyline(t,i)},e.multiPolygon=function(t,i){return new e.MultiPolygon(t,i)}}(),e.Rectangle=e.Polygon.extend({initialize:function(t,i){e.Polygon.prototype.initialize.call(this,this._boundsToLatLngs(t),i)},setBounds:function(t){this.setLatLngs(this._boundsToLatLngs(t))},_boundsToLatLngs:function(t){return t=e.latLngBounds(t),[t.getSouthWest(),t.getNorthWest(),t.getNorthEast(),t.getSouthEast()]}}),e.rectangle=function(t,i){return new e.Rectangle(t,i)},e.Circle=e.Path.extend({initialize:function(t,i,s){e.Path.prototype.initialize.call(this,s),this._latlng=e.latLng(t),this._mRadius=i},options:{fill:!0},setLatLng:function(t){return this._latlng=e.latLng(t),this.redraw()},setRadius:function(t){return this._mRadius=t,this.redraw()},projectLatlngs:function(){var t=this._getLngRadius(),i=new e.LatLng(this._latlng.lat,this._latlng.lng-t),s=this._map.latLngToLayerPoint(i);this._point=this._map.latLngToLayerPoint(this._latlng),this._radius=Math.max(Math.round(this._point.x-s.x),1)},getBounds:function(){var t=this._getLngRadius(),i=360*(this._mRadius/40075017),s=this._latlng,o=new e.LatLng(s.lat-i,s.lng-t),n=new e.LatLng(s.lat+i,s.lng+t);return new e.LatLngBounds(o,n)},getLatLng:function(){return this._latlng},getPathString:function(){var t=this._point,i=this._radius;return this._checkIfEmpty()?"":e.Browser.svg?"M"+t.x+","+(t.y-i)+"A"+i+","+i+",0,1,1,"+(t.x-.1)+","+(t.y-i)+" z":(t._round(),i=Math.round(i),"AL "+t.x+","+t.y+" "+i+","+i+" 0,"+23592600)},getRadius:function(){return this._mRadius},_getLatRadius:function(){return 360*(this._mRadius/40075017)},_getLngRadius:function(){return this._getLatRadius()/Math.cos(e.LatLng.DEG_TO_RAD*this._latlng.lat)},_checkIfEmpty:function(){if(!this._map)return!1;var t=this._map._pathViewport,i=this._radius,s=this._point;return s.x-i>t.max.x||s.y-i>t.max.y||s.x+is;s++)for(l=this._parts[s],o=0,r=l.length,n=r-1;r>o;n=o++)if((i||0!==o)&&(h=e.LineUtil.pointToSegmentDistance(t,l[n],l[o]),c>=h))return!0;return!1}}:{}),e.Polygon.include(e.Path.CANVAS?{_containsPoint:function(t){var i,s,o,n,a,r,h,l,c=!1;if(e.Polyline.prototype._containsPoint.call(this,t,!0))return!0;for(n=0,h=this._parts.length;h>n;n++)for(i=this._parts[n],a=0,l=i.length,r=l-1;l>a;r=a++)s=i[a],o=i[r],s.y>t.y!=o.y>t.y&&t.x<(o.x-s.x)*(t.y-s.y)/(o.y-s.y)+s.x&&(c=!c);return c}}:{}),e.Circle.include(e.Path.CANVAS?{_drawPath:function(){var t=this._point;this._ctx.beginPath(),this._ctx.arc(t.x,t.y,this._radius,0,2*Math.PI,!1)},_containsPoint:function(t){var i=this._point,s=this.options.stroke?this.options.weight/2:0;return t.distanceTo(i)<=this._radius+s}}:{}),e.GeoJSON=e.FeatureGroup.extend({initialize:function(t,i){e.setOptions(this,i),this._layers={},t&&this.addData(t)},addData:function(t){var i,s,o=e.Util.isArray(t)?t:t.features;if(o){for(i=0,s=o.length;s>i;i++)(o[i].geometries||o[i].geometry||o[i].features)&&this.addData(o[i]);return this}var n=this.options;if(!n.filter||n.filter(t)){var a=e.GeoJSON.geometryToLayer(t,n.pointToLayer);return a.feature=t,a.defaultOptions=a.options,this.resetStyle(a),n.onEachFeature&&n.onEachFeature(t,a),this.addLayer(a)}},resetStyle:function(t){var i=this.options.style;i&&(e.Util.extend(t.options,t.defaultOptions),this._setLayerStyle(t,i))},setStyle:function(t){this.eachLayer(function(i){this._setLayerStyle(i,t)},this)},_setLayerStyle:function(t,i){"function"==typeof i&&(i=i(t.feature)),t.setStyle&&t.setStyle(i)}}),e.extend(e.GeoJSON,{geometryToLayer:function(t,i){var s,o,n,a,r,h="Feature"===t.type?t.geometry:t,l=h.coordinates,c=[];switch(h.type){case"Point":return s=this.coordsToLatLng(l),i?i(t,s):new e.Marker(s);case"MultiPoint":for(n=0,a=l.length;a>n;n++)s=this.coordsToLatLng(l[n]),r=i?i(t,s):new e.Marker(s),c.push(r);return new e.FeatureGroup(c);case"LineString":return o=this.coordsToLatLngs(l),new e.Polyline(o);case"Polygon":return o=this.coordsToLatLngs(l,1),new e.Polygon(o);case"MultiLineString":return o=this.coordsToLatLngs(l,1),new e.MultiPolyline(o);case"MultiPolygon":return o=this.coordsToLatLngs(l,2),new e.MultiPolygon(o);case"GeometryCollection":for(n=0,a=h.geometries.length;a>n;n++)r=this.geometryToLayer({geometry:h.geometries[n],type:"Feature",properties:t.properties},i),c.push(r);return new e.FeatureGroup(c);default:throw Error("Invalid GeoJSON object.")}},coordsToLatLng:function(t,i){var s=parseFloat(t[i?0:1]),o=parseFloat(t[i?1:0]);return new e.LatLng(s,o)},coordsToLatLngs:function(t,i,s){var e,o,n,a=[];for(o=0,n=t.length;n>o;o++)e=i?this.coordsToLatLngs(t[o],i-1,s):this.coordsToLatLng(t[o],s),a.push(e);return a}}),e.geoJson=function(t,i){return new e.GeoJSON(t,i)},e.DomEvent={addListener:function(t,i,o,n){var a,r,h,l=e.stamp(o),c="_leaflet_"+i+l;return t[c]?this:(a=function(i){return o.call(n||t,i||e.DomEvent._getEvent())},e.Browser.msTouch&&0===i.indexOf("touch")?this.addMsTouchListener(t,i,a,l):(e.Browser.touch&&"dblclick"===i&&this.addDoubleTapListener&&this.addDoubleTapListener(t,a,l),"addEventListener"in t?"mousewheel"===i?(t.addEventListener("DOMMouseScroll",a,!1),t.addEventListener(i,a,!1)):"mouseenter"===i||"mouseleave"===i?(r=a,h="mouseenter"===i?"mouseover":"mouseout",a=function(i){return e.DomEvent._checkMouse(t,i)?r(i):s},t.addEventListener(h,a,!1)):t.addEventListener(i,a,!1):"attachEvent"in t&&t.attachEvent("on"+i,a),t[c]=a,this))},removeListener:function(t,i,s){var o=e.stamp(s),n="_leaflet_"+i+o,a=t[n];if(a)return e.Browser.msTouch&&0===i.indexOf("touch")?this.removeMsTouchListener(t,i,o):e.Browser.touch&&"dblclick"===i&&this.removeDoubleTapListener?this.removeDoubleTapListener(t,o):"removeEventListener"in t?"mousewheel"===i?(t.removeEventListener("DOMMouseScroll",a,!1),t.removeEventListener(i,a,!1)):"mouseenter"===i||"mouseleave"===i?t.removeEventListener("mouseenter"===i?"mouseover":"mouseout",a,!1):t.removeEventListener(i,a,!1):"detachEvent"in t&&t.detachEvent("on"+i,a),t[n]=null,this},stopPropagation:function(t){return t.stopPropagation?t.stopPropagation():t.cancelBubble=!0,this},disableClickPropagation:function(t){for(var i=e.DomEvent.stopPropagation,s=e.Draggable.START.length-1;s>=0;s--)e.DomEvent.addListener(t,e.Draggable.START[s],i);return e.DomEvent.addListener(t,"click",i).addListener(t,"dblclick",i)},preventDefault:function(t){return t.preventDefault?t.preventDefault():t.returnValue=!1,this},stop:function(t){return e.DomEvent.preventDefault(t).stopPropagation(t)},getMousePosition:function(t,s){var o=i.body,n=i.documentElement,a=t.pageX?t.pageX:t.clientX+o.scrollLeft+n.scrollLeft,r=t.pageY?t.pageY:t.clientY+o.scrollTop+n.scrollTop,h=new e.Point(a,r);return s?h._subtract(e.DomUtil.getViewportOffset(s)):h},getWheelDelta:function(t){var i=0;return t.wheelDelta&&(i=t.wheelDelta/120),t.detail&&(i=-t.detail/3),i},_checkMouse:function(t,i){var s=i.relatedTarget;if(!s)return!0;try{for(;s&&s!==t;)s=s.parentNode}catch(e){return!1}return s!==t},_getEvent:function(){var i=t.event;if(!i)for(var s=arguments.callee.caller;s&&(i=s.arguments[0],!i||t.Event!==i.constructor);)s=s.caller;return i}},e.DomEvent.on=e.DomEvent.addListener,e.DomEvent.off=e.DomEvent.removeListener,e.Draggable=e.Class.extend({includes:e.Mixin.Events,statics:{START:e.Browser.touch?["touchstart","mousedown"]:["mousedown"],END:{mousedown:"mouseup",touchstart:"touchend",MSPointerDown:"touchend"},MOVE:{mousedown:"mousemove",touchstart:"touchmove",MSPointerDown:"touchmove"},TAP_TOLERANCE:15},initialize:function(t,i,s){this._element=t,this._dragStartTarget=i||t,this._longPress=s&&!e.Browser.msTouch},enable:function(){if(!this._enabled){for(var t=e.Draggable.START.length-1;t>=0;t--)e.DomEvent.on(this._dragStartTarget,e.Draggable.START[t],this._onDown,this);this._enabled=!0}},disable:function(){if(this._enabled){for(var t=e.Draggable.START.length-1;t>=0;t--)e.DomEvent.off(this._dragStartTarget,e.Draggable.START[t],this._onDown,this);this._enabled=!1,this._moved=!1}},_onDown:function(t){if(!(!e.Browser.touch&&t.shiftKey||1!==t.which&&1!==t.button&&!t.touches||(e.DomEvent.preventDefault(t),e.DomEvent.stopPropagation(t),e.Draggable._disabled))){if(this._simulateClick=!0,t.touches&&t.touches.length>1)return this._simulateClick=!1,clearTimeout(this._longPressTimeout),s;var o=t.touches&&1===t.touches.length?t.touches[0]:t,n=o.target;e.Browser.touch&&"a"===n.tagName.toLowerCase()&&e.DomUtil.addClass(n,"leaflet-active"),this._moved=!1,this._moving||(this._startPoint=new e.Point(o.clientX,o.clientY),this._startPos=this._newPos=e.DomUtil.getPosition(this._element),t.touches&&1===t.touches.length&&e.Browser.touch&&this._longPress&&(this._longPressTimeout=setTimeout(e.bind(function(){var t=this._newPos&&this._newPos.distanceTo(this._startPos)||0;e.Draggable.TAP_TOLERANCE>t&&(this._simulateClick=!1,this._onUp(),this._simulateEvent("contextmenu",o))},this),1e3)),e.DomEvent.on(i,e.Draggable.MOVE[t.type],this._onMove,this),e.DomEvent.on(i,e.Draggable.END[t.type],this._onUp,this))}},_onMove:function(t){if(!(t.touches&&t.touches.length>1)){var i=t.touches&&1===t.touches.length?t.touches[0]:t,s=new e.Point(i.clientX,i.clientY),o=s.subtract(this._startPoint);(o.x||o.y)&&(e.DomEvent.preventDefault(t),this._moved||(this.fire("dragstart"),this._moved=!0,this._startPos=e.DomUtil.getPosition(this._element).subtract(o),e.Browser.touch||(e.DomUtil.disableTextSelection(),this._setMovingCursor())),this._newPos=this._startPos.add(o),this._moving=!0,e.Util.cancelAnimFrame(this._animRequest),this._animRequest=e.Util.requestAnimFrame(this._updatePosition,this,!0,this._dragStartTarget))}},_updatePosition:function(){this.fire("predrag"),e.DomUtil.setPosition(this._element,this._newPos),this.fire("drag")},_onUp:function(t){var s;if(clearTimeout(this._longPressTimeout),this._simulateClick&&t.changedTouches){var o=t.changedTouches[0],n=o.target,a=this._newPos&&this._newPos.distanceTo(this._startPos)||0;"a"===n.tagName.toLowerCase()&&e.DomUtil.removeClass(n,"leaflet-active"),e.Draggable.TAP_TOLERANCE>a&&(s=o)}e.Browser.touch||(e.DomUtil.enableTextSelection(),this._restoreCursor());for(var r in e.Draggable.MOVE)e.Draggable.MOVE.hasOwnProperty(r)&&(e.DomEvent.off(i,e.Draggable.MOVE[r],this._onMove),e.DomEvent.off(i,e.Draggable.END[r],this._onUp));this._moved&&(e.Util.cancelAnimFrame(this._animRequest),this.fire("dragend")),this._moving=!1,s&&(this._moved=!1,this._simulateEvent("click",s))},_setMovingCursor:function(){e.DomUtil.addClass(i.body,"leaflet-dragging")},_restoreCursor:function(){e.DomUtil.removeClass(i.body,"leaflet-dragging")},_simulateEvent:function(s,e){var o=i.createEvent("MouseEvents");o.initMouseEvent(s,!0,!0,t,1,e.screenX,e.screenY,e.clientX,e.clientY,!1,!1,!1,!1,0,null),e.target.dispatchEvent(o)}}),e.Handler=e.Class.extend({initialize:function(t){this._map=t},enable:function(){this._enabled||(this._enabled=!0,this.addHooks())},disable:function(){this._enabled&&(this._enabled=!1,this.removeHooks())},enabled:function(){return!!this._enabled}}),e.Map.mergeOptions({dragging:!0,inertia:!e.Browser.android23,inertiaDeceleration:3400,inertiaMaxSpeed:1/0,inertiaThreshold:e.Browser.touch?32:18,easeLinearity:.25,longPress:!0,worldCopyJump:!1}),e.Map.Drag=e.Handler.extend({addHooks:function(){if(!this._draggable){var t=this._map;this._draggable=new e.Draggable(t._mapPane,t._container,t.options.longPress),this._draggable.on({dragstart:this._onDragStart,drag:this._onDrag,dragend:this._onDragEnd},this),t.options.worldCopyJump&&(this._draggable.on("predrag",this._onPreDrag,this),t.on("viewreset",this._onViewReset,this))}this._draggable.enable()},removeHooks:function(){this._draggable.disable()},moved:function(){return this._draggable&&this._draggable._moved},_onDragStart:function(){var t=this._map;t._panAnim&&t._panAnim.stop(),t.fire("movestart").fire("dragstart"),t.options.inertia&&(this._positions=[],this._times=[])},_onDrag:function(){if(this._map.options.inertia){var t=this._lastTime=+new Date,i=this._lastPos=this._draggable._newPos;this._positions.push(i),this._times.push(t),t-this._times[0]>200&&(this._positions.shift(),this._times.shift())}this._map.fire("move").fire("drag")},_onViewReset:function(){var t=this._map.getSize()._divideBy(2),i=this._map.latLngToLayerPoint(new e.LatLng(0,0));this._initialWorldOffset=i.subtract(t).x,this._worldWidth=this._map.project(new e.LatLng(0,180)).x},_onPreDrag:function(){var t=this._worldWidth,i=Math.round(t/2),s=this._initialWorldOffset,e=this._draggable._newPos.x,o=(e-i+s)%t+i-s,n=(e+i+s)%t-i-s,a=Math.abs(o+s)i.inertiaThreshold||!this._positions[0];if(o)t.fire("moveend");else{var n=this._lastPos.subtract(this._positions[0]),a=(this._lastTime+s-this._times[0])/1e3,r=i.easeLinearity,h=n.multiplyBy(r/a),l=h.distanceTo(new e.Point(0,0)),c=Math.min(i.inertiaMaxSpeed,l),m=h.multiplyBy(c/l),u=c/(i.inertiaDeceleration*r),d=m.multiplyBy(-u/2).round();e.Util.requestAnimFrame(function(){t.panBy(d,u,r)})}t.fire("dragend"),i.maxBounds&&e.Util.requestAnimFrame(this._panInsideMaxBounds,t,!0,t._container)},_panInsideMaxBounds:function(){this.panInsideBounds(this.options.maxBounds)}}),e.Map.addInitHook("addHandler","dragging",e.Map.Drag),e.Map.mergeOptions({doubleClickZoom:!0}),e.Map.DoubleClickZoom=e.Handler.extend({addHooks:function(){this._map.on("dblclick",this._onDoubleClick)},removeHooks:function(){this._map.off("dblclick",this._onDoubleClick)},_onDoubleClick:function(t){this.setView(t.latlng,this._zoom+1)}}),e.Map.addInitHook("addHandler","doubleClickZoom",e.Map.DoubleClickZoom),e.Map.mergeOptions({scrollWheelZoom:!0}),e.Map.ScrollWheelZoom=e.Handler.extend({addHooks:function(){e.DomEvent.on(this._map._container,"mousewheel",this._onWheelScroll,this),this._delta=0},removeHooks:function(){e.DomEvent.off(this._map._container,"mousewheel",this._onWheelScroll)},_onWheelScroll:function(t){var i=e.DomEvent.getWheelDelta(t);this._delta+=i,this._lastMousePos=this._map.mouseEventToContainerPoint(t),this._startTime||(this._startTime=+new Date);var s=Math.max(40-(+new Date-this._startTime),0);clearTimeout(this._timer),this._timer=setTimeout(e.bind(this._performZoom,this),s),e.DomEvent.preventDefault(t),e.DomEvent.stopPropagation(t)},_performZoom:function(){var t=this._map,i=this._delta,s=t.getZoom();if(i=i>0?Math.ceil(i):Math.round(i),i=Math.max(Math.min(i,4),-4),i=t._limitZoom(s+i)-s,this._delta=0,this._startTime=null,i){var e=s+i,o=this._getCenterForScrollWheelZoom(e);t.setView(o,e)}},_getCenterForScrollWheelZoom:function(t){var i=this._map,s=i.getZoomScale(t),e=i.getSize()._divideBy(2),o=this._lastMousePos._subtract(e)._multiplyBy(1-1/s),n=i._getTopLeftPoint()._add(e)._add(o);return i.unproject(n)}}),e.Map.addInitHook("addHandler","scrollWheelZoom",e.Map.ScrollWheelZoom),e.extend(e.DomEvent,{_touchstart:e.Browser.msTouch?"MSPointerDown":"touchstart",_touchend:e.Browser.msTouch?"MSPointerUp":"touchend",addDoubleTapListener:function(t,s,o){function n(t){var i;if(e.Browser.msTouch?(p.push(t.pointerId),i=p.length):i=t.touches.length,!(i>1)){var s=Date.now(),o=s-(r||s);h=t.touches?t.touches[0]:t,l=o>0&&c>=o,r=s}}function a(t){if(e.Browser.msTouch){var i=p.indexOf(t.pointerId);if(-1===i)return;p.splice(i,1)}if(l){if(e.Browser.msTouch){var o,n={};for(var a in h)o=h[a],n[a]="function"==typeof o?o.bind(h):o;h=n}h.type="dblclick",s(h),r=null}}var r,h,l=!1,c=250,m="_leaflet_",u=this._touchstart,d=this._touchend,p=[];t[m+u+o]=n,t[m+d+o]=a;var _=e.Browser.msTouch?i.documentElement:t;return t.addEventListener(u,n,!1),_.addEventListener(d,a,!1),e.Browser.msTouch&&_.addEventListener("MSPointerCancel",a,!1),this},removeDoubleTapListener:function(t,s){var o="_leaflet_";return t.removeEventListener(this._touchstart,t[o+this._touchstart+s],!1),(e.Browser.msTouch?i.documentElement:t).removeEventListener(this._touchend,t[o+this._touchend+s],!1),e.Browser.msTouch&&i.documentElement.removeEventListener("MSPointerCancel",t[o+this._touchend+s],!1),this}}),e.extend(e.DomEvent,{_msTouches:[],_msDocumentListener:!1,addMsTouchListener:function(t,i,s,e){switch(i){case"touchstart":return this.addMsTouchListenerStart(t,i,s,e);case"touchend":return this.addMsTouchListenerEnd(t,i,s,e);case"touchmove":return this.addMsTouchListenerMove(t,i,s,e);default:throw"Unknown touch event type"}},addMsTouchListenerStart:function(t,s,e,o){var n="_leaflet_",a=this._msTouches,r=function(t){for(var i=!1,s=0;a.length>s;s++)if(a[s].pointerId===t.pointerId){i=!0;break}i||a.push(t),t.touches=a.slice(),t.changedTouches=[t],e(t)};if(t[n+"touchstart"+o]=r,t.addEventListener("MSPointerDown",r,!1),!this._msDocumentListener){var h=function(t){for(var i=0;a.length>i;i++)if(a[i].pointerId===t.pointerId){a.splice(i,1);break}};i.documentElement.addEventListener("MSPointerUp",h,!1),i.documentElement.addEventListener("MSPointerCancel",h,!1),this._msDocumentListener=!0}return this},addMsTouchListenerMove:function(t,i,s,e){function o(t){if(t.pointerType!==t.MSPOINTER_TYPE_MOUSE||0!==t.buttons){for(var i=0;a.length>i;i++)if(a[i].pointerId===t.pointerId){a[i]=t;break}t.touches=a.slice(),t.changedTouches=[t],s(t)}}var n="_leaflet_",a=this._msTouches;return t[n+"touchmove"+e]=o,t.addEventListener("MSPointerMove",o,!1),this},addMsTouchListenerEnd:function(t,i,s,e){var o="_leaflet_",n=this._msTouches,a=function(t){for(var i=0;n.length>i;i++)if(n[i].pointerId===t.pointerId){n.splice(i,1);break}t.touches=n.slice(),t.changedTouches=[t],s(t)};return t[o+"touchend"+e]=a,t.addEventListener("MSPointerUp",a,!1),t.addEventListener("MSPointerCancel",a,!1),this},removeMsTouchListener:function(t,i,s){var e="_leaflet_",o=t[e+i+s];switch(i){case"touchstart":t.removeEventListener("MSPointerDown",o,!1);break;case"touchmove":t.removeEventListener("MSPointerMove",o,!1);break;case"touchend":t.removeEventListener("MSPointerUp",o,!1),t.removeEventListener("MSPointerCancel",o,!1)}return this}}),e.Map.mergeOptions({touchZoom:e.Browser.touch&&!e.Browser.android23}),e.Map.TouchZoom=e.Handler.extend({addHooks:function(){e.DomEvent.on(this._map._container,"touchstart",this._onTouchStart,this)},removeHooks:function(){e.DomEvent.off(this._map._container,"touchstart",this._onTouchStart,this)},_onTouchStart:function(t){var s=this._map;if(t.touches&&2===t.touches.length&&!s._animatingZoom&&!this._zooming){var o=s.mouseEventToLayerPoint(t.touches[0]),n=s.mouseEventToLayerPoint(t.touches[1]),a=s._getCenterLayerPoint();this._startCenter=o.add(n)._divideBy(2),this._startDist=o.distanceTo(n),this._moved=!1,this._zooming=!0,this._centerOffset=a.subtract(this._startCenter),s._panAnim&&s._panAnim.stop(),e.DomEvent.on(i,"touchmove",this._onTouchMove,this).on(i,"touchend",this._onTouchEnd,this),e.DomEvent.preventDefault(t)}},_onTouchMove:function(t){if(t.touches&&2===t.touches.length){var i=this._map,s=i.mouseEventToLayerPoint(t.touches[0]),o=i.mouseEventToLayerPoint(t.touches[1]);this._scale=s.distanceTo(o)/this._startDist,this._delta=s._add(o)._divideBy(2)._subtract(this._startCenter),1!==this._scale&&(this._moved||(e.DomUtil.addClass(i._mapPane,"leaflet-zoom-anim leaflet-touching"),i.fire("movestart").fire("zoomstart")._prepareTileBg(),this._moved=!0),e.Util.cancelAnimFrame(this._animRequest),this._animRequest=e.Util.requestAnimFrame(this._updateOnMove,this,!0,this._map._container),e.DomEvent.preventDefault(t))}},_updateOnMove:function(){var t=this._map,i=this._getScaleOrigin(),s=t.layerPointToLatLng(i);t.fire("zoomanim",{center:s,zoom:t.getScaleZoom(this._scale)}),t._tileBg.style[e.DomUtil.TRANSFORM]=e.DomUtil.getTranslateString(this._delta)+" "+e.DomUtil.getScaleString(this._scale,this._startCenter)},_onTouchEnd:function(){if(this._moved&&this._zooming){var t=this._map;this._zooming=!1,e.DomUtil.removeClass(t._mapPane,"leaflet-touching"),e.DomEvent.off(i,"touchmove",this._onTouchMove).off(i,"touchend",this._onTouchEnd);var s=this._getScaleOrigin(),o=t.layerPointToLatLng(s),n=t.getZoom(),a=t.getScaleZoom(this._scale)-n,r=a>0?Math.ceil(a):Math.floor(a),h=t._limitZoom(n+r);t.fire("zoomanim",{center:o,zoom:h}),t._runAnimation(o,h,t.getZoomScale(h)/this._scale,s,!0)}},_getScaleOrigin:function(){var t=this._centerOffset.subtract(this._delta).divideBy(this._scale);return this._startCenter.add(t)}}),e.Map.addInitHook("addHandler","touchZoom",e.Map.TouchZoom),e.Map.mergeOptions({boxZoom:!0}),e.Map.BoxZoom=e.Handler.extend({initialize:function(t){this._map=t,this._container=t._container,this._pane=t._panes.overlayPane},addHooks:function(){e.DomEvent.on(this._container,"mousedown",this._onMouseDown,this)},removeHooks:function(){e.DomEvent.off(this._container,"mousedown",this._onMouseDown)},_onMouseDown:function(t){return!t.shiftKey||1!==t.which&&1!==t.button?!1:(e.DomUtil.disableTextSelection(),this._startLayerPoint=this._map.mouseEventToLayerPoint(t),this._box=e.DomUtil.create("div","leaflet-zoom-box",this._pane),e.DomUtil.setPosition(this._box,this._startLayerPoint),this._container.style.cursor="crosshair",e.DomEvent.on(i,"mousemove",this._onMouseMove,this).on(i,"mouseup",this._onMouseUp,this).preventDefault(t),this._map.fire("boxzoomstart"),s)},_onMouseMove:function(t){var i=this._startLayerPoint,s=this._box,o=this._map.mouseEventToLayerPoint(t),n=o.subtract(i),a=new e.Point(Math.min(o.x,i.x),Math.min(o.y,i.y));e.DomUtil.setPosition(s,a),s.style.width=Math.max(0,Math.abs(n.x)-4)+"px",s.style.height=Math.max(0,Math.abs(n.y)-4)+"px"},_onMouseUp:function(t){this._pane.removeChild(this._box),this._container.style.cursor="",e.DomUtil.enableTextSelection(),e.DomEvent.off(i,"mousemove",this._onMouseMove).off(i,"mouseup",this._onMouseUp);var s=this._map,o=s.mouseEventToLayerPoint(t);if(!this._startLayerPoint.equals(o)){var n=new e.LatLngBounds(s.layerPointToLatLng(this._startLayerPoint),s.layerPointToLatLng(o));s.fitBounds(n),s.fire("boxzoomend",{boxZoomBounds:n})}}}),e.Map.addInitHook("addHandler","boxZoom",e.Map.BoxZoom),e.Map.mergeOptions({keyboard:!0,keyboardPanOffset:80,keyboardZoomOffset:1}),e.Map.Keyboard=e.Handler.extend({keyCodes:{left:[37],right:[39],down:[40],up:[38],zoomIn:[187,107,61],zoomOut:[189,109,173]},initialize:function(t){this._map=t,this._setPanOffset(t.options.keyboardPanOffset),this._setZoomOffset(t.options.keyboardZoomOffset)},addHooks:function(){var t=this._map._container;-1===t.tabIndex&&(t.tabIndex="0"),e.DomEvent.on(t,"focus",this._onFocus,this).on(t,"blur",this._onBlur,this).on(t,"mousedown",this._onMouseDown,this),this._map.on("focus",this._addHooks,this).on("blur",this._removeHooks,this)},removeHooks:function(){this._removeHooks();var t=this._map._container;e.DomEvent.off(t,"focus",this._onFocus,this).off(t,"blur",this._onBlur,this).off(t,"mousedown",this._onMouseDown,this),this._map.off("focus",this._addHooks,this).off("blur",this._removeHooks,this)},_onMouseDown:function(){this._focused||this._map._container.focus()},_onFocus:function(){this._focused=!0,this._map.fire("focus")},_onBlur:function(){this._focused=!1,this._map.fire("blur")},_setPanOffset:function(t){var i,s,e=this._panKeys={},o=this.keyCodes;for(i=0,s=o.left.length;s>i;i++)e[o.left[i]]=[-1*t,0];for(i=0,s=o.right.length;s>i;i++)e[o.right[i]]=[t,0];for(i=0,s=o.down.length;s>i;i++)e[o.down[i]]=[0,t];for(i=0,s=o.up.length;s>i;i++)e[o.up[i]]=[0,-1*t]},_setZoomOffset:function(t){var i,s,e=this._zoomKeys={},o=this.keyCodes;for(i=0,s=o.zoomIn.length;s>i;i++)e[o.zoomIn[i]]=t;for(i=0,s=o.zoomOut.length;s>i;i++)e[o.zoomOut[i]]=-t},_addHooks:function(){e.DomEvent.on(i,"keydown",this._onKeyDown,this)},_removeHooks:function(){e.DomEvent.off(i,"keydown",this._onKeyDown,this)},_onKeyDown:function(t){var i=t.keyCode,s=this._map;if(this._panKeys.hasOwnProperty(i))s.panBy(this._panKeys[i]),s.options.maxBounds&&s.panInsideBounds(s.options.maxBounds);else{if(!this._zoomKeys.hasOwnProperty(i))return;s.setZoom(s.getZoom()+this._zoomKeys[i])}e.DomEvent.stop(t)}}),e.Map.addInitHook("addHandler","keyboard",e.Map.Keyboard),e.Handler.MarkerDrag=e.Handler.extend({initialize:function(t){this._marker=t},addHooks:function(){var t=this._marker._icon;this._draggable||(this._draggable=new e.Draggable(t,t).on("dragstart",this._onDragStart,this).on("drag",this._onDrag,this).on("dragend",this._onDragEnd,this)),this._draggable.enable()},removeHooks:function(){this._draggable.disable()},moved:function(){return this._draggable&&this._draggable._moved},_onDragStart:function(){this._marker.closePopup().fire("movestart").fire("dragstart")},_onDrag:function(){var t=this._marker,i=t._shadow,s=e.DomUtil.getPosition(t._icon),o=t._map.layerPointToLatLng(s);i&&e.DomUtil.setPosition(i,s),t._latlng=o,t.fire("move",{latlng:o}).fire("drag")},_onDragEnd:function(){this._marker.fire("moveend").fire("dragend")}}),e.Handler.PolyEdit=e.Handler.extend({options:{icon:new e.DivIcon({iconSize:new e.Point(8,8),className:"leaflet-div-icon leaflet-editing-icon"})},initialize:function(t,i){this._poly=t,e.setOptions(this,i)},addHooks:function(){this._poly._map&&(this._markerGroup||this._initMarkers(),this._poly._map.addLayer(this._markerGroup))},removeHooks:function(){this._poly._map&&(this._poly._map.removeLayer(this._markerGroup),delete this._markerGroup,delete this._markers)},updateMarkers:function(){this._markerGroup.clearLayers(),this._initMarkers()},_initMarkers:function(){this._markerGroup||(this._markerGroup=new e.LayerGroup),this._markers=[];var t,i,s,o,n=this._poly._latlngs;for(t=0,s=n.length;s>t;t++)o=this._createMarker(n[t],t),o.on("click",this._onMarkerClick,this),this._markers.push(o);var a,r;for(t=0,i=s-1;s>t;i=t++)(0!==t||e.Polygon&&this._poly instanceof e.Polygon)&&(a=this._markers[i],r=this._markers[t],this._createMiddleMarker(a,r),this._updatePrevNext(a,r))},_createMarker:function(t,i){var s=new e.Marker(t,{draggable:!0,icon:this.options.icon});return s._origLatLng=t,s._index=i,s.on("drag",this._onMarkerDrag,this),s.on("dragend",this._fireEdit,this),this._markerGroup.addLayer(s),s},_fireEdit:function(){this._poly.fire("edit")},_onMarkerDrag:function(t){var i=t.target;e.extend(i._origLatLng,i._latlng),i._middleLeft&&i._middleLeft.setLatLng(this._getMiddleLatLng(i._prev,i)),i._middleRight&&i._middleRight.setLatLng(this._getMiddleLatLng(i,i._next)),this._poly.redraw()},_onMarkerClick:function(t){if(!(3>this._poly._latlngs.length)){var i=t.target,s=i._index;this._markerGroup.removeLayer(i),this._markers.splice(s,1),this._poly.spliceLatLngs(s,1),this._updateIndexes(s,-1),this._updatePrevNext(i._prev,i._next),i._middleLeft&&this._markerGroup.removeLayer(i._middleLeft),i._middleRight&&this._markerGroup.removeLayer(i._middleRight),i._prev&&i._next?this._createMiddleMarker(i._prev,i._next):i._prev?i._next||(i._prev._middleRight=null):i._next._middleLeft=null,this._poly.fire("edit")}},_updateIndexes:function(t,i){this._markerGroup.eachLayer(function(s){s._index>t&&(s._index+=i)})},_createMiddleMarker:function(t,i){var s,e,o,n=this._getMiddleLatLng(t,i),a=this._createMarker(n);a.setOpacity(.6),t._middleRight=i._middleLeft=a,e=function(){var e=i._index;a._index=e,a.off("click",s).on("click",this._onMarkerClick,this),n.lat=a.getLatLng().lat,n.lng=a.getLatLng().lng,this._poly.spliceLatLngs(e,0,n),this._markers.splice(e,0,a),a.setOpacity(1),this._updateIndexes(e,1),i._index++,this._updatePrevNext(t,a),this._updatePrevNext(a,i)},o=function(){a.off("dragstart",e,this),a.off("dragend",o,this), -this._createMiddleMarker(t,a),this._createMiddleMarker(a,i)},s=function(){e.call(this),o.call(this),this._poly.fire("edit")},a.on("click",s,this).on("dragstart",e,this).on("dragend",o,this),this._markerGroup.addLayer(a)},_updatePrevNext:function(t,i){t&&(t._next=i),i&&(i._prev=t)},_getMiddleLatLng:function(t,i){var s=this._poly._map,e=s.latLngToLayerPoint(t.getLatLng()),o=s.latLngToLayerPoint(i.getLatLng());return s.layerPointToLatLng(e._add(o)._divideBy(2))}}),e.Polyline.addInitHook(function(){e.Handler.PolyEdit&&(this.editing=new e.Handler.PolyEdit(this),this.options.editable&&this.editing.enable()),this.on("add",function(){this.editing&&this.editing.enabled()&&this.editing.addHooks()}),this.on("remove",function(){this.editing&&this.editing.enabled()&&this.editing.removeHooks()})}),e.Control=e.Class.extend({options:{position:"topright"},initialize:function(t){e.setOptions(this,t)},getPosition:function(){return this.options.position},setPosition:function(t){var i=this._map;return i&&i.removeControl(this),this.options.position=t,i&&i.addControl(this),this},addTo:function(t){this._map=t;var i=this._container=this.onAdd(t),s=this.getPosition(),o=t._controlCorners[s];return e.DomUtil.addClass(i,"leaflet-control"),-1!==s.indexOf("bottom")?o.insertBefore(i,o.firstChild):o.appendChild(i),this},removeFrom:function(t){var i=this.getPosition(),s=t._controlCorners[i];return s.removeChild(this._container),this._map=null,this.onRemove&&this.onRemove(t),this}}),e.control=function(t){return new e.Control(t)},e.Map.include({addControl:function(t){return t.addTo(this),this},removeControl:function(t){return t.removeFrom(this),this},_initControlPos:function(){function t(t,n){var a=s+t+" "+s+n;i[t+n]=e.DomUtil.create("div",a,o)}var i=this._controlCorners={},s="leaflet-",o=this._controlContainer=e.DomUtil.create("div",s+"control-container",this._container);t("top","left"),t("top","right"),t("bottom","left"),t("bottom","right")}}),e.Control.Zoom=e.Control.extend({options:{position:"topleft"},onAdd:function(t){var i="leaflet-control-zoom",s="leaflet-bar",o=s+"-part",n=e.DomUtil.create("div",i+" "+s);return this._map=t,this._zoomInButton=this._createButton("+","Zoom in",i+"-in "+o+" "+o+"-top",n,this._zoomIn,this),this._zoomOutButton=this._createButton("-","Zoom out",i+"-out "+o+" "+o+"-bottom",n,this._zoomOut,this),t.on("zoomend",this._updateDisabled,this),n},onRemove:function(t){t.off("zoomend",this._updateDisabled,this)},_zoomIn:function(t){this._map.zoomIn(t.shiftKey?3:1)},_zoomOut:function(t){this._map.zoomOut(t.shiftKey?3:1)},_createButton:function(t,i,s,o,n,a){var r=e.DomUtil.create("a",s,o);r.innerHTML=t,r.href="#",r.title=i;var h=e.DomEvent.stopPropagation;return e.DomEvent.on(r,"click",h).on(r,"mousedown",h).on(r,"dblclick",h).on(r,"click",e.DomEvent.preventDefault).on(r,"click",n,a),r},_updateDisabled:function(){var t=this._map,i="leaflet-control-zoom-disabled";e.DomUtil.removeClass(this._zoomInButton,i),e.DomUtil.removeClass(this._zoomOutButton,i),t._zoom===t.getMinZoom()&&e.DomUtil.addClass(this._zoomOutButton,i),t._zoom===t.getMaxZoom()&&e.DomUtil.addClass(this._zoomInButton,i)}}),e.Map.mergeOptions({zoomControl:!0}),e.Map.addInitHook(function(){this.options.zoomControl&&(this.zoomControl=new e.Control.Zoom,this.addControl(this.zoomControl))}),e.control.zoom=function(t){return new e.Control.Zoom(t)},e.Control.Attribution=e.Control.extend({options:{position:"bottomright",prefix:'Powered by Leaflet'},initialize:function(t){e.setOptions(this,t),this._attributions={}},onAdd:function(t){return this._container=e.DomUtil.create("div","leaflet-control-attribution"),e.DomEvent.disableClickPropagation(this._container),t.on("layeradd",this._onLayerAdd,this).on("layerremove",this._onLayerRemove,this),this._update(),this._container},onRemove:function(t){t.off("layeradd",this._onLayerAdd).off("layerremove",this._onLayerRemove)},setPrefix:function(t){return this.options.prefix=t,this._update(),this},addAttribution:function(t){return t?(this._attributions[t]||(this._attributions[t]=0),this._attributions[t]++,this._update(),this):s},removeAttribution:function(t){return t?(this._attributions[t]--,this._update(),this):s},_update:function(){if(this._map){var t=[];for(var i in this._attributions)this._attributions.hasOwnProperty(i)&&this._attributions[i]&&t.push(i);var s=[];this.options.prefix&&s.push(this.options.prefix),t.length&&s.push(t.join(", ")),this._container.innerHTML=s.join(" — ")}},_onLayerAdd:function(t){t.layer.getAttribution&&this.addAttribution(t.layer.getAttribution())},_onLayerRemove:function(t){t.layer.getAttribution&&this.removeAttribution(t.layer.getAttribution())}}),e.Map.mergeOptions({attributionControl:!0}),e.Map.addInitHook(function(){this.options.attributionControl&&(this.attributionControl=(new e.Control.Attribution).addTo(this))}),e.control.attribution=function(t){return new e.Control.Attribution(t)},e.Control.Scale=e.Control.extend({options:{position:"bottomleft",maxWidth:100,metric:!0,imperial:!0,updateWhenIdle:!1},onAdd:function(t){this._map=t;var i="leaflet-control-scale",s=e.DomUtil.create("div",i),o=this.options;return this._addScales(o,i,s),t.on(o.updateWhenIdle?"moveend":"move",this._update,this),t.whenReady(this._update,this),s},onRemove:function(t){t.off(this.options.updateWhenIdle?"moveend":"move",this._update,this)},_addScales:function(t,i,s){t.metric&&(this._mScale=e.DomUtil.create("div",i+"-line",s)),t.imperial&&(this._iScale=e.DomUtil.create("div",i+"-line",s))},_update:function(){var t=this._map.getBounds(),i=t.getCenter().lat,s=6378137*Math.PI*Math.cos(i*Math.PI/180),e=s*(t.getNorthEast().lng-t.getSouthWest().lng)/180,o=this._map.getSize(),n=this.options,a=0;o.x>0&&(a=e*(n.maxWidth/o.x)),this._updateScales(n,a)},_updateScales:function(t,i){t.metric&&i&&this._updateMetric(i),t.imperial&&i&&this._updateImperial(i)},_updateMetric:function(t){var i=this._getRoundNum(t);this._mScale.style.width=this._getScaleWidth(i/t)+"px",this._mScale.innerHTML=1e3>i?i+" m":i/1e3+" km"},_updateImperial:function(t){var i,s,e,o=3.2808399*t,n=this._iScale;o>5280?(i=o/5280,s=this._getRoundNum(i),n.style.width=this._getScaleWidth(s/i)+"px",n.innerHTML=s+" mi"):(e=this._getRoundNum(o),n.style.width=this._getScaleWidth(e/o)+"px",n.innerHTML=e+" ft")},_getScaleWidth:function(t){return Math.round(this.options.maxWidth*t)-10},_getRoundNum:function(t){var i=Math.pow(10,(Math.floor(t)+"").length-1),s=t/i;return s=s>=10?10:s>=5?5:s>=3?3:s>=2?2:1,i*s}}),e.control.scale=function(t){return new e.Control.Scale(t)},e.Control.Layers=e.Control.extend({options:{collapsed:!0,position:"topright",autoZIndex:!0},initialize:function(t,i,s){e.setOptions(this,s),this._layers={},this._lastZIndex=0,this._handlingClick=!1;for(var o in t)t.hasOwnProperty(o)&&this._addLayer(t[o],o);for(o in i)i.hasOwnProperty(o)&&this._addLayer(i[o],o,!0)},onAdd:function(t){return this._initLayout(),this._update(),t.on("layeradd",this._onLayerChange,this).on("layerremove",this._onLayerChange,this),this._container},onRemove:function(t){t.off("layeradd",this._onLayerChange).off("layerremove",this._onLayerChange)},addBaseLayer:function(t,i){return this._addLayer(t,i),this._update(),this},addOverlay:function(t,i){return this._addLayer(t,i,!0),this._update(),this},removeLayer:function(t){var i=e.stamp(t);return delete this._layers[i],this._update(),this},_initLayout:function(){var t="leaflet-control-layers",i=this._container=e.DomUtil.create("div",t);e.Browser.touch?e.DomEvent.on(i,"click",e.DomEvent.stopPropagation):(e.DomEvent.disableClickPropagation(i),e.DomEvent.on(i,"mousewheel",e.DomEvent.stopPropagation));var s=this._form=e.DomUtil.create("form",t+"-list");if(this.options.collapsed){e.DomEvent.on(i,"mouseover",this._expand,this).on(i,"mouseout",this._collapse,this);var o=this._layersLink=e.DomUtil.create("a",t+"-toggle",i);o.href="#",o.title="Layers",e.Browser.touch?e.DomEvent.on(o,"click",e.DomEvent.stopPropagation).on(o,"click",e.DomEvent.preventDefault).on(o,"click",this._expand,this):e.DomEvent.on(o,"focus",this._expand,this),this._map.on("movestart",this._collapse,this)}else this._expand();this._baseLayersList=e.DomUtil.create("div",t+"-base",s),this._separator=e.DomUtil.create("div",t+"-separator",s),this._overlaysList=e.DomUtil.create("div",t+"-overlays",s),i.appendChild(s)},_addLayer:function(t,i,s){var o=e.stamp(t);this._layers[o]={layer:t,name:i,overlay:s},this.options.autoZIndex&&t.setZIndex&&(this._lastZIndex++,t.setZIndex(this._lastZIndex))},_update:function(){if(this._container){this._baseLayersList.innerHTML="",this._overlaysList.innerHTML="";var t=!1,i=!1;for(var s in this._layers)if(this._layers.hasOwnProperty(s)){var e=this._layers[s];this._addItem(e),i=i||e.overlay,t=t||!e.overlay}this._separator.style.display=i&&t?"":"none"}},_onLayerChange:function(t){var i=e.stamp(t.layer);this._layers[i]&&!this._handlingClick&&this._update()},_createRadioElement:function(t,s){var e='t;t++)i=o[t],s=this._layers[i.layerId],i.checked&&!this._map.hasLayer(s.layer)?(this._map.addLayer(s.layer),s.overlay||(e=s.layer)):!i.checked&&this._map.hasLayer(s.layer)&&this._map.removeLayer(s.layer);e&&(this._map.setZoom(this._map.getZoom()),this._map.fire("baselayerchange",{layer:e})),this._handlingClick=!1},_expand:function(){e.DomUtil.addClass(this._container,"leaflet-control-layers-expanded")},_collapse:function(){this._container.className=this._container.className.replace(" leaflet-control-layers-expanded","")}}),e.control.layers=function(t,i,s){return new e.Control.Layers(t,i,s)},e.PosAnimation=e.Class.extend({includes:e.Mixin.Events,run:function(t,i,s,o){this.stop(),this._el=t,this._inProgress=!0,this.fire("start"),t.style[e.DomUtil.TRANSITION]="all "+(s||.25)+"s cubic-bezier(0,0,"+(o||.5)+",1)",e.DomEvent.on(t,e.DomUtil.TRANSITION_END,this._onTransitionEnd,this),e.DomUtil.setPosition(t,i),e.Util.falseFn(t.offsetWidth),this._stepTimer=setInterval(e.bind(this.fire,this,"step"),50)},stop:function(){this._inProgress&&(e.DomUtil.setPosition(this._el,this._getPos()),this._onTransitionEnd(),e.Util.falseFn(this._el.offsetWidth))},_transformRe:/(-?[\d\.]+), (-?[\d\.]+)\)/,_getPos:function(){var i,s,o,n=this._el,a=t.getComputedStyle(n);return e.Browser.any3d?(o=a[e.DomUtil.TRANSFORM].match(this._transformRe),i=parseFloat(o[1]),s=parseFloat(o[2])):(i=parseFloat(a.left),s=parseFloat(a.top)),new e.Point(i,s,!0)},_onTransitionEnd:function(){e.DomEvent.off(this._el,e.DomUtil.TRANSITION_END,this._onTransitionEnd,this),this._inProgress&&(this._inProgress=!1,this._el.style[e.DomUtil.TRANSITION]="",clearInterval(this._stepTimer),this.fire("step").fire("end"))}}),e.Map.include({setView:function(t,i,s){i=this._limitZoom(i);var e=this._zoom!==i;if(this._loaded&&!s&&this._layers){this._panAnim&&this._panAnim.stop();var o=e?this._zoomToIfClose&&this._zoomToIfClose(t,i):this._panByIfClose(t);if(o)return clearTimeout(this._sizeTimer),this}return this._resetView(t,i),this},panBy:function(t,i,s){if(t=e.point(t),!t.x&&!t.y)return this;this._panAnim||(this._panAnim=new e.PosAnimation,this._panAnim.on({step:this._onPanTransitionStep,end:this._onPanTransitionEnd},this)),this.fire("movestart"),e.DomUtil.addClass(this._mapPane,"leaflet-pan-anim");var o=e.DomUtil.getPosition(this._mapPane).subtract(t)._round();return this._panAnim.run(this._mapPane,o,i||.25,s),this},_onPanTransitionStep:function(){this.fire("move")},_onPanTransitionEnd:function(){e.DomUtil.removeClass(this._mapPane,"leaflet-pan-anim"),this.fire("moveend")},_panByIfClose:function(t){var i=this._getCenterOffset(t)._floor();return this._offsetIsWithinView(i)?(this.panBy(i),!0):!1},_offsetIsWithinView:function(t,i){var s=i||1,e=this.getSize();return Math.abs(t.x)<=e.x*s&&Math.abs(t.y)<=e.y*s}}),e.PosAnimation=e.DomUtil.TRANSITION?e.PosAnimation:e.PosAnimation.extend({run:function(t,i,s,o){this.stop(),this._el=t,this._inProgress=!0,this._duration=s||.25,this._easeOutPower=1/Math.max(o||.5,.2),this._startPos=e.DomUtil.getPosition(t),this._offset=i.subtract(this._startPos),this._startTime=+new Date,this.fire("start"),this._animate()},stop:function(){this._inProgress&&(this._step(),this._complete())},_animate:function(){this._animId=e.Util.requestAnimFrame(this._animate,this),this._step()},_step:function(){var t=+new Date-this._startTime,i=1e3*this._duration;i>t?this._runFrame(this._easeOut(t/i)):(this._runFrame(1),this._complete())},_runFrame:function(t){var i=this._startPos.add(this._offset.multiplyBy(t));e.DomUtil.setPosition(this._el,i),this.fire("step")},_complete:function(){e.Util.cancelAnimFrame(this._animId),this._inProgress=!1,this.fire("end")},_easeOut:function(t){return 1-Math.pow(1-t,this._easeOutPower)}}),e.Map.mergeOptions({zoomAnimation:e.DomUtil.TRANSITION&&!e.Browser.android23&&!e.Browser.mobileOpera}),e.DomUtil.TRANSITION&&e.Map.addInitHook(function(){e.DomEvent.on(this._mapPane,e.DomUtil.TRANSITION_END,this._catchTransitionEnd,this)}),e.Map.include(e.DomUtil.TRANSITION?{_zoomToIfClose:function(t,i){if(this._animatingZoom)return!0;if(!this.options.zoomAnimation)return!1;var s=this.getZoomScale(i),o=this._getCenterOffset(t)._divideBy(1-1/s);if(!this._offsetIsWithinView(o,1))return!1;e.DomUtil.addClass(this._mapPane,"leaflet-zoom-anim"),this.fire("movestart").fire("zoomstart"),this.fire("zoomanim",{center:t,zoom:i});var n=this._getCenterLayerPoint().add(o);return this._prepareTileBg(),this._runAnimation(t,i,s,n),!0},_catchTransitionEnd:function(){this._animatingZoom&&this._onZoomTransitionEnd()},_runAnimation:function(t,i,s,o,n){this._animateToCenter=t,this._animateToZoom=i,this._animatingZoom=!0,e.Draggable&&(e.Draggable._disabled=!0);var a=e.DomUtil.TRANSFORM,r=this._tileBg;clearTimeout(this._clearTileBgTimer),e.Util.falseFn(r.offsetWidth);var h=e.DomUtil.getScaleString(s,o),l=r.style[a];r.style[a]=n?l+" "+h:h+" "+l},_prepareTileBg:function(){var t=this._tilePane,i=this._tileBg;if(i&&this._getLoadedTilesPercentage(i)>.5&&.5>this._getLoadedTilesPercentage(t))return t.style.visibility="hidden",t.empty=!0,this._stopLoadingImages(t),s;i||(i=this._tileBg=this._createPane("leaflet-tile-pane",this._mapPane),i.style.zIndex=1),i.style[e.DomUtil.TRANSFORM]="",i.style.visibility="hidden",i.empty=!0,t.empty=!1,this._tilePane=this._panes.tilePane=i;var o=this._tileBg=t;e.DomUtil.addClass(o,"leaflet-zoom-animated"),this._stopLoadingImages(o)},_getLoadedTilesPercentage:function(t){var i,s,e=t.getElementsByTagName("img"),o=0;for(i=0,s=e.length;s>i;i++)e[i].complete&&o++;return o/s},_stopLoadingImages:function(t){var i,s,o,n=Array.prototype.slice.call(t.getElementsByTagName("img"));for(i=0,s=n.length;s>i;i++)o=n[i],o.complete||(o.onload=e.Util.falseFn,o.onerror=e.Util.falseFn,o.src=e.Util.emptyImageUrl,o.parentNode.removeChild(o))},_onZoomTransitionEnd:function(){this._restoreTileFront(),e.DomUtil.removeClass(this._mapPane,"leaflet-zoom-anim"),e.Util.falseFn(this._tileBg.offsetWidth),this._animatingZoom=!1,this._resetView(this._animateToCenter,this._animateToZoom,!0,!0),e.Draggable&&(e.Draggable._disabled=!1)},_restoreTileFront:function(){this._tilePane.innerHTML="",this._tilePane.style.visibility="",this._tilePane.style.zIndex=2,this._tileBg.style.zIndex=1},_clearTileBg:function(){this._animatingZoom||this.touchZoom._zooming||(this._tileBg.innerHTML="")}}:{}),e.Map.include({_defaultLocateOptions:{watch:!1,setView:!1,maxZoom:1/0,timeout:1e4,maximumAge:0,enableHighAccuracy:!1},locate:function(t){if(t=this._locationOptions=e.extend(this._defaultLocateOptions,t),!navigator.geolocation)return this._handleGeolocationError({code:0,message:"Geolocation not supported."}),this;var i=e.bind(this._handleGeolocationResponse,this),s=e.bind(this._handleGeolocationError,this);return t.watch?this._locationWatchId=navigator.geolocation.watchPosition(i,s,t):navigator.geolocation.getCurrentPosition(i,s,t),this},stopLocate:function(){return navigator.geolocation&&navigator.geolocation.clearWatch(this._locationWatchId),this},_handleGeolocationError:function(t){var i=t.code,s=t.message||(1===i?"permission denied":2===i?"position unavailable":"timeout");this._locationOptions.setView&&!this._loaded&&this.fitWorld(),this.fire("locationerror",{code:i,message:"Geolocation error: "+s+"."})},_handleGeolocationResponse:function(t){var i=180*t.coords.accuracy/4e7,s=2*i,o=t.coords.latitude,n=t.coords.longitude,a=new e.LatLng(o,n),r=new e.LatLng(o-i,n-s),h=new e.LatLng(o+i,n+s),l=new e.LatLngBounds(r,h),c=this._locationOptions;if(c.setView){var m=Math.min(this.getBoundsZoom(l),c.maxZoom);this.setView(a,m)}this.fire("locationfound",{latlng:a,bounds:l,accuracy:t.coords.accuracy})}})}(this,document),L.Proj={},L.Proj._isProj4Proj=function(t){return t.projName!==void 0},L.Proj.Projection=L.Class.extend({initialize:function(t,i){if(L.Proj._isProj4Proj(t))this._proj=t;else{var s=t;Proj4js.defs[s]=i,this._proj=new Proj4js.Proj(s)}},project:function(t){var i=new L.Point(t.lng,t.lat);return Proj4js.transform(Proj4js.WGS84,this._proj,i)},unproject:function(t,i){var s=Proj4js.transform(this._proj,Proj4js.WGS84,t.clone());return new L.LatLng(s.y,s.x,i)}}),L.Proj.CRS=L.Class.extend({includes:L.CRS,options:{transformation:new L.Transformation(1,0,-1,0)},initialize:function(t,i,s){var e,o,n,a;L.Proj._isProj4Proj(t)?(o=t,e=o.srsCode,a=i||{},this.projection=new L.Proj.Projection(o)):(e=t,n=i,a=s||{},this.projection=new L.Proj.Projection(e,n)),L.Util.setOptions(this,a),this.code=e,this.transformation=this.options.transformation,this.options.origin&&(this.transformation=new L.Transformation(1,-this.options.origin[0],-1,this.options.origin[1])),this.options.scales?this.scale=function(t){return this.options.scales[t]}:this.options.resolutions&&(this.scale=function(t){return 1/this.options.resolutions[t]})}}),L.Proj.CRS.TMS=L.Proj.CRS.extend({initialize:function(t,i,s,e){if(L.Proj._isProj4Proj(t)){var o=t,n=i,a=s||{};a.origin=[n[0],n[3]],L.Proj.CRS.prototype.initialize(o,a)}else{var r=t,h=i,n=s,a=e||{};a.origin=[n[0],n[3]],L.Proj.CRS.prototype.initialize(r,h,a)}this.projectedBounds=n}}),L.Proj.TileLayer={},L.Proj.TileLayer.TMS=L.TileLayer.extend({options:{tms:!0,continuousWorld:!0},initialize:function(t,i,s){if(!(i instanceof L.Proj.CRS.TMS))throw Error("CRS is not L.Proj.CRS.TMS.");L.TileLayer.prototype.initialize.call(this,t,s),this.crs=i;for(var e=this.options.minZoom;this.options.maxZoom>e;e++){var o=(this.crs.projectedBounds[3]-this.crs.projectedBounds[1])/this._projectedTileSize(e);if(Math.abs(o-Math.round(o))>.001)throw Error("Projected bounds does not match grid at zoom "+e)}},getTileUrl:function(t){var i=Math.round((this.crs.projectedBounds[3]-this.crs.projectedBounds[1])/this._projectedTileSize(this._map.getZoom()));return L.Util.template(this._url,L.Util.extend({s:this._getSubdomain(t),z:this._getZoomForUrl(),x:t.x,y:i-t.y-1},this.options))},_projectedTileSize:function(t){return this.options.tileSize/this.crs.scale(t)}}),"undefined"!=typeof module&&(module.exports=L.Proj),"undefined"!=typeof L&&L.CRS!==void 0&&(L.CRS.proj4js=function(){return function(t,i,s,e){return e=e||{},s&&(e.transformation=s),new L.Proj.CRS(t,i,e)}}()),L.Control.MousePosition=L.Control.extend({options:{position:"bottomleft",separator:" : ",emptyString:"Unavailable",lngFirst:!1,numDigits:5,lngFormatter:void 0,latFormatter:void 0},onAdd:function(t){return this._container=L.DomUtil.create("div","leaflet-control-mouseposition"),L.DomEvent.disableClickPropagation(this._container),t.on("mousemove",this._onMouseMove,this),this._container.innerHTML=this.options.emptyString,this._container},onRemove:function(t){t.off("mousemove",this._onMouseMove)},_onMouseMove:function(t){var i=L.Util.formatNum(t.latlng.lng,this.options.numDigits),s=L.Util.formatNum(t.latlng.lat,this.options.numDigits);this.options.lngFormatter&&(i=this.options.lngFormatter(i)),this.options.latFormatter&&(s=this.options.latFormatter(s));var e=this.options.lngFirst?i+this.options.separator+s:s+this.options.separator+i;this._container.innerHTML=e}}),L.Map.mergeOptions({positionControl:!1}),L.Map.addInitHook(function(){this.options.positionControl&&(this.positionControl=new L.Control.MousePosition,this.addControl(this.positionControl))}),L.control.mousePosition=function(t){return new L.Control.MousePosition(t)},function(t,i){L.KSP={},L.KSP.version="0.2.1",L.KSP.CRS={},L.KSP.CRS.EPSG4326=new L.Proj.CRS.TMS(new Proj4js.Proj("EPSG:4326"),[-180,-90,180,90],{resolutions:[.703125,.3515625,.17578125,.087890625,.0439453125,.02197265625]}),L.KSP.CelestialBody=L.Class.extend({initialize:function(t){if(!t.hasOwnProperty("id"))throw Error("must specify id");if(!t.hasOwnProperty("name"))throw Error("must specify name");if(t.hasOwnProperty("crs")){if(!(t.crs instanceof L.Proj.CRS.TMS))throw Error("crs is not an instance of L.Proj.CRS.TMS")}else this.crs=L.KSP.CRS.EPSG4326;t.hasOwnProperty("radius")||(this.radius=1),t.hasOwnProperty("thumbnail")||(this.thumbnail="body-unknown.png"),t.hasOwnProperty("baseLayers")||(this.baseLayers={}),L.Util.extend(this,t)},addTo:function(t){var i,s=t._body;if(t._body=this,t.fire("bodychangestart",{body:this,oldBody:s}),s){for(i in s.baseLayers)s.baseLayers.hasOwnProperty(i)&&t.removeLayer(s.baseLayers[i]);for(i in s.overlays)s.overlays.hasOwnProperty(i)&&t.removeLayer(s.overlays[i])}var e=this.defaultLayer||this.baseLayers.Satellite;if(e){for(i in this.baseLayers)if(this.baseLayers.hasOwnProperty(i)&&this.baseLayers[i]._type===t._baseLayerType){e=this.baseLayers[i];break}t.addLayer(e),t.fire("baselayerchange",{layer:e})}for(i in this.overlays)this.overlays.hasOwnProperty(i)&&t._overlayTypes.indexOf(this.overlays[i]._type)>=0&&(t.addLayer(this.overlays[i]),t.fire("layeradd",{layer:this.overlays[i]}));t.fire("bodychangeend",{body:this,oldBody:s})},onAdd:function(t){this.addTo(t)},removeFrom:function(t){L.KSP.CelestialBody.DUMMY.addTo(t)},onRemove:function(t){this.removeFrom(t)}}),L.KSP.celestialBody=function(t){return new L.KSP.CelestialBody(t)},L.KSP.CelestialBody.DUMMY=L.KSP.celestialBody({id:"",name:"",crs:L.KSP.CRS.EPSG4326}),L.KSP.CelestialBody.ALL_PLANETARY=[L.KSP.CelestialBody.DUMMY],L.KSP.Map=L.Map.extend({options:{crs:L.KSP.CRS.EPSG4326,continuousWorld:!0},initialize:function(t,i){this._baseLayerType=-1,this._overlayTypes=[],L.Util.setOptions(this,i),this.startTrackingLayerState(),this.on("bodychangestart",this._onBodyChangeStart).on("bodychangeend",this._onBodyChangeEnd),L.Map.prototype.initialize.call(this,t,this.options)},clampZoom:function(){var t=this.getZoom(),i=this.getMinZoom(),s=this.getMaxZoom();i>t?this.setZoom(i):t>s?this.setZoom(s):this.fire("zoomend",this)},_onBodyChangeStart:function(){this.stopTrackingLayerState()},_onBodyChangeEnd:function(){this.clampZoom(),this.startTrackingLayerState()},_onLayerStateChange:function(t){if("layeradd"===t.type)t.layer instanceof L.KSP.TileLayer?this._baseLayerType=t.layer._type:t.layer instanceof L.KSP.LayerGroup&&0>this._overlayTypes.indexOf(t.layer._type)&&this._overlayTypes.push(t.layer._type);else if(t.layer instanceof L.KSP.LayerGroup){var i,s,e=t.layer._type,o=this._overlayTypes;for(i=o.length-1;i>=0;i--)s=o[i],s===e&&o.splice(i,1)}},startTrackingLayerState:function(){this.on("layeradd",this._onLayerStateChange).on("layerremove",this._onLayerStateChange)},stopTrackingLayerState:function(){this.off("layeradd",this._onLayerStateChange).off("layerremove",this._onLayerStateChange)}}),L.KSP.map=function(t,i){return new L.KSP.Map(t,i)},L.KSP.TileLayer=L.Proj.TileLayer.TMS.extend({statics:{TYPE_SATELLITE:0,TYPE_COLORRELIEF:1,TYPE_SLOPE:2,DEFAULT_URL:"http://tiles.kerbalmaps.com/{body}/{style}/{z}/{x}/{y}.png"},options:{continuousWorld:!1,noWrap:!1,minZoom:0,maxZoom:5,attribution:"Map data © Joel Pedraza"},initialize:function(t,i,s,e){L.Util.setOptions(this,e),this._type=t,L.Proj.TileLayer.TMS.prototype.initialize.call(this,i,s,this.options)}}),L.KSP.tileLayer=function(t,i,s,e){return new L.KSP.TileLayer(t,i,s,e)},L.KSP.LayerGroup=L.LayerGroup.extend({statics:{TYPE_SPACECENTER:0,TYPE_ANOMALY:1},initialize:function(t,i){this._type=t,L.LayerGroup.prototype.initialize.call(this,i)}}),L.KSP.layerGroup=function(t,i){return new L.KSP.LayerGroup(t,i)},L.KSP.Icon={},L.KSP.Icon.SPACECENTER=new L.Icon({iconUrl:"../assets/images/markers-spacecenter.png",shadowUrl:"../assets/images/markers-shadow.png",iconSize:[30,40],shadowSize:[35,16],iconAnchor:[15,40],shadowAnchor:[10,12],popupAnchor:[0,-35]}),L.KSP.Icon.ANOMALY=new L.Icon({iconUrl:"../assets/images/markers-anomaly.png",shadowUrl:"../assets/images/markers-shadow.png",iconSize:[30,40],shadowSize:[35,16],iconAnchor:[15,40],shadowAnchor:[10,12],popupAnchor:[0,-35]}),L.KSP.Legend={},L.KSP.Legend.SLOPE={"≥ 60°":"#E19678","< 60°":"#C86464","< 30°":"#965A64","< 15°":"#645064","< 5°":"#325064","0°":"#32465A"},L.KSP.Control=L.KSP.control={},L.KSP.Control.Legend=L.Control.extend({options:{position:"bottomright"},onAdd:function(t){return this._container=L.DomUtil.create("div","leaflet-control-legend"),t.on("baselayerchange",this._onLayerChange,this),this._container},_update:function(t){if(this._container.innerHTML="",t){for(var i in t)t.hasOwnProperty(i)&&(this._container.innerHTML+=''+i+"
    ");L.DomUtil.addClass(this._container,"leaflet-control-legend-visible")}else this._container.className=this._container.className.replace(" leaflet-control-legend-visible","")},_onLayerChange:function(t){this._update(t.layer.options.legend)}}),L.Map.mergeOptions({legendControl:!0}),L.Map.addInitHook(function(){this.options.bodyControl&&(this.legendControl=new L.KSP.Control.Legend,this.addControl(this.legendControl))}),L.control.legend=function(t){return new L.KSP.Control.Legend(t)},L.KSP.Control.Scale=L.Control.Scale.extend({options:{imperial:!1},onAdd:function(t){this._radius=0,t._body&&(this._radius=t._body.radius);var i=L.Control.Scale.prototype.onAdd.call(this,t);return t.on("bodychangeend",this._onBodyChangeEnd,this),i},onRemove:function(t){L.Control.Scale.prototype.onRemove.call(this,t),t.off("bodychangeend",this._onBodyChangeEnd)},_onBodyChangeEnd:function(t){this._radius=t.body.radius,this._update()},_update:function(){var t=this._map.getBounds(),i=t.getCenter().lat,s=this._radius*Math.PI*Math.cos(i*Math.PI/180),e=s*(t.getNorthEast().lng-t.getSouthWest().lng)/180,o=this._map.getSize(),n=this.options,a=0;o.x>0&&(a=e*(n.maxWidth/o.x)),this._updateScales(n,a)}}),L.KSP.Map.mergeOptions({scaleControl:!1}),L.KSP.Map.addInitHook(function(){this.options.scaleControl&&(this.scaleControl=new L.KSP.Control.Scale,this.addControl(this.scaleControl))}),L.KSP.control.scale=function(t){return new L.KSP.Control.Scale(t)},L.KSP.Control.CelestialBody=L.Control.extend({options:{position:"topright",collapsed:!0},initialize:function(t,i){L.Util.setOptions(this,i),this._bodies=t,this._timeInMillis=(new Date).valueOf(),this._weekInMillis=6048e5},onAdd:function(){return this._initLayout(),this._update(),this._map.on("bodychangeend",this._update,this),this._container},_initLayout:function(){var t="leaflet-control-celestialbodies",s=this._container=L.DomUtil.create("div",t),e=this._bodies;if(this.options.collapsed){L.DomEvent.on(s,"mouseover",this._expand,this).on(s,"mouseout",this._collapse,this);var o=this._bodiesLink=L.DomUtil.create("a",t+"-toggle",s);o.href="#",o.title="Celestial Bodies",L.DomEvent.on(o,"focus",this._expand,this),this._map.on("movestart",this._collapse,this)}var n=this._list=L.DomUtil.create("ul",t+"-list",s);for(var a in e)if(e.hasOwnProperty(a)){var r=this._addBody(e[a],n);if(e[a].children){var h=i.createElement("ul");for(var l in e[a].children)e[a].children.hasOwnProperty(l)&&this._addBody(e[a].children[l],h);r.appendChild(h)}}},_update:function(){this._map._body&&(this._bodiesLink.style.backgroundImage='url("'+this._map._body.thumbnail+'")')},_addBody:function(t,s){var e,o=i.createElement("li"),n=i.createElement("img");if(n.src=t.thumbnail,n.alt=o.title=t.name,t.addedOn){this._timeInMillis-t.addedOnKerbal Space Center
    -0.0969 : -74.6004"),L.marker([20.5829,-146.5116],{icon:L.KSP.Icon.SPACECENTER}).bindPopup("Kerbal Space Center 2
    20.5829 : -146.5116"),L.marker([-1.5409,-71.9099],{icon:L.KSP.Icon.SPACECENTER}).bindPopup("Island Airfield
    -1.5409 : -71.9099")]),Anomalies:L.KSP.layerGroup(L.KSP.LayerGroup.TYPE_ANOMALY,[L.marker([.1023,-74.5684],{icon:L.KSP.Icon.ANOMALY}).bindPopup("0.1023 : -74.5684"),L.marker([20.6709,-146.4968],{icon:L.KSP.Icon.ANOMALY}).bindPopup("20.6709 : -146.4968"),L.marker([35.5705,-74.9773],{icon:L.KSP.Icon.ANOMALY}).bindPopup("35.5705 : -74.9773"),L.marker([-.6402,-80.7668],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-0.6402 : -80.7668"),L.marker([-28.8083,-13.4401],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-28.8083 : -13.4401"),L.marker([-6.5057,-141.6856],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-6.5057 : -141.6856"),L.marker([81.9551,-128.518],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-81.9551 : -128.518")])}}),L.KSP.CelestialBody.MUN=L.KSP.celestialBody({id:"mun",name:"Mun",crs:L.KSP.CRS.EPSG4326,radius:2e5,addedOn:13682304e5,lastUpdated:1368144e6,thumbnail:"body-mun.png",baseLayers:{Satellite:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SATELLITE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{body:"mun",style:"sat"}),"Color Relief":L.KSP.tileLayer(L.KSP.TileLayer.TYPE_COLORRELIEF,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{body:"mun",style:"color",legend:{"3150 m":"#EBEBEB","-180 m":"#232323"}}),Slope:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SLOPE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{body:"mun",style:"slope",legend:L.KSP.Legend.SLOPE})},overlays:{Anomalies:L.KSP.layerGroup(L.KSP.LayerGroup.TYPE_ANOMALY,[L.marker([-9.8314,25.9177],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-9.8314 : 25.9177"),L.marker([-82.2063,102.9305],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-82.2063 : 102.9305"),L.marker([57.6604,9.1422],{icon:L.KSP.Icon.ANOMALY}).bindPopup("57.6604 : 9.1422"),L.marker([2.4695,81.5133],{icon:L.KSP.Icon.ANOMALY}).bindPopup("2.4695 : 81.5133"),L.marker([12.4432,39.178],{icon:L.KSP.Icon.ANOMALY}).bindPopup("12.4432 : 39.1780"),L.marker([-12.4431,-140.822],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-12.4431 : -140.8220"),L.marker([.7027,22.747],{icon:L.KSP.Icon.ANOMALY}).bindPopup("0.7027 : 22.7470"),L.marker([-70.9556,-68.1378],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-70.9556,-68.1378")])}}),L.KSP.CelestialBody.MINMUS=L.KSP.celestialBody({id:"minmus",name:"Minmus",crs:L.KSP.CRS.EPSG4326,radius:6e4,addedOn:13682304e5,lastUpdated:13682304e5,thumbnail:"body-minmus.png",baseLayers:{Satellite:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SATELLITE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"sat",body:"minmus"}),"Color Relief":L.KSP.tileLayer(L.KSP.TileLayer.TYPE_COLORRELIEF,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"color",body:"minmus",legend:{"5750 m":"#414B41","2500 m":"#BEE6C3","1 m":"#96CDB4","0 m":"#87B9A5"}}),Slope:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SLOPE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"slope",body:"minmus",legend:L.KSP.Legend.SLOPE})},overlays:{Anomalies:L.KSP.layerGroup(L.KSP.LayerGroup.TYPE_ANOMALY,[L.marker([23.7768,60.0462],{icon:L.KSP.Icon.ANOMALY}).bindPopup("23.7768 : 60.0462")])}}),L.KSP.CelestialBody.DUNA=L.KSP.celestialBody({id:"duna",name:"Duna",crs:L.KSP.CRS.EPSG4326,radius:32e4,addedOn:13688352e5,lastUpdated:13688352e5,thumbnail:"body-duna.png",baseLayers:{Satellite:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SATELLITE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"sat",body:"duna"}),"Color Relief":L.KSP.tileLayer(L.KSP.TileLayer.TYPE_COLORRELIEF,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"color",body:"duna",legend:{"4800 m":"#C3A082","4000 m":"#966446","3000 m":"#733219","2000 m":"#501E14","1000 m":"#3C140F","0 m":"#280F0A"}}),Slope:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SLOPE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"slope",body:"duna",legend:L.KSP.Legend.SLOPE})},overlays:{Anomalies:L.KSP.layerGroup(L.KSP.LayerGroup.TYPE_ANOMALY,[L.marker([17.0483,-85.4717],{icon:L.KSP.Icon.ANOMALY}).bindPopup("17.0483 : -85.4717"),L.marker([-30.3525,-28.6828],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-30.3525 : -28.6828"),L.marker([-66.1344,-160.7432],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-66.1344 : -160.7432")])}}),L.KSP.CelestialBody.IKE=L.KSP.celestialBody({id:"ike",name:"Ike",crs:L.KSP.CRS.EPSG4326,radius:13e4,addedOn:13688352e5,lastUpdated:13688352e5,thumbnail:"body-ike.png",baseLayers:{Satellite:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SATELLITE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"sat",body:"ike"}),"Color Relief":L.KSP.tileLayer(L.KSP.TileLayer.TYPE_COLORRELIEF,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"color",body:"ike",legend:{"13000 m":"#828282","11000 m":"#6E6E6E","9000 m":"#5A5A5A","7000 m":"#464646","5000 m":"#323232","2500 m":"#191919","70 m":"#070707"}}),Slope:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SLOPE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"slope",body:"ike",legend:L.KSP.Legend.SLOPE})},overlays:{}}),L.KSP.CelestialBody.DRES=L.KSP.celestialBody({id:"dres",name:"Dres",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-dres.png"}),L.KSP.CelestialBody.JOOL=L.KSP.celestialBody({id:"jool",name:"Jool",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-jool.png"}),L.KSP.CelestialBody.LAYTHE=L.KSP.celestialBody({id:"laythe",name:"Laythe",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-laythe.png"}),L.KSP.CelestialBody.VALL=L.KSP.celestialBody({id:"vall",name:"Vall",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-vall.png"}),L.KSP.CelestialBody.TYLO=L.KSP.celestialBody({id:"tylo",name:"Tylo",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-tylo.png"}),L.KSP.CelestialBody.BOP=L.KSP.celestialBody({id:"bop",name:"Bop",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-bop.png"}),L.KSP.CelestialBody.POL=L.KSP.celestialBody({id:"pol",name:"Pol",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-pol.png"}),L.KSP.CelestialBody.EELOO=L.KSP.celestialBody({id:"eeloo",name:"Eeloo",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-eeloo.png"}),L.KSP.CelestialBody.KERBIN.defaultLayer=L.KSP.CelestialBody.KERBIN.baseLayers.Satellite,L.KSP.CelestialBody.MUN.defaultLayer=L.KSP.CelestialBody.MUN.baseLayers.Satellite,L.KSP.CelestialBody.MINMUS.defaultLayer=L.KSP.CelestialBody.MINMUS.baseLayers.Satellite,L.KSP.CelestialBody.EVE.children=[L.KSP.CelestialBody.GILLY],L.KSP.CelestialBody.KERBIN.children=[L.KSP.CelestialBody.MUN,L.KSP.CelestialBody.MINMUS],L.KSP.CelestialBody.DUNA.children=[L.KSP.CelestialBody.IKE],L.KSP.CelestialBody.JOOL.children=[L.KSP.CelestialBody.LAYTHE,L.KSP.CelestialBody.VALL,L.KSP.CelestialBody.TYLO,L.KSP.CelestialBody.BOP,L.KSP.CelestialBody.POL],L.KSP.CelestialBody.GILLY.parent=L.KSP.CelestialBody.EVE,L.KSP.CelestialBody.MUN.parent=L.KSP.CelestialBody.MINMUS.parent=L.KSP.CelestialBody.KERBIN,L.KSP.CelestialBody.IKE.parent=L.KSP.CelestialBody.DUNA,L.KSP.CelestialBody.LAYTHE.parent=L.KSP.CelestialBody.VALL.parent=L.KSP.CelestialBody.TYLO.parent=L.KSP.CelestialBody.BOP.parent=L.KSP.CelestialBody.POL.parent=L.KSP.CelestialBody.JOOL,L.KSP.CelestialBody.ALL_PLANETARY=[L.KSP.CelestialBody.MOHO,L.KSP.CelestialBody.EVE,L.KSP.CelestialBody.KERBIN,L.KSP.CelestialBody.DUNA,L.KSP.CelestialBody.DRES,L.KSP.CelestialBody.JOOL,L.KSP.CelestialBody.EELOO],L.KSP.Map.addInitHook(function(){this.options.layers=[L.KSP.CelestialBody.KERBIN]})}(this,document);var Settings=Class.create({initialize:function(defaultHost,defaultPort){if(!this.getHost()){this.setHost(defaultHost)}if(!this.getPort()){this.setPort(defaultPort)}},getHost:function(){return this.get("host")},getPort:function(){return this.get("port")},setHost:function(value){return this.set("host",value)},setPort:function(value){return this.set("port",value)},get:function(property){return localStorage.getItem(property)},set:function(property,value){return localStorage.setItem(property,value)}});var Telemachus=Class.create({initialize:function(host,port){this.updateConnection(host,port);this.receiverFunctions=[];this.subscribedFields={};this.orbitingBodies=this.getOrbitalBodies();this.rate=500;this.loopTimeout=setTimeout(this.poll.bind(this),this.rate)},url:function(){return"http://"+this.host+":"+this.port+"/telemachus/datalink"},updateConnection:function(host,port){this.host=host;this.port=port},addReceiverFunction:function(func){this.receiverFunctions.push(func)},subscribeToData:function(fields){for(var i=fields.length-1;i>=0;i--){var field=fields[i];this.subscribedFields[field]=field}},dispatchMessages:function(data){for(var i=this.receiverFunctions.length-1;i>=0;i--){try{this.receiverFunctions[i](data)}catch(e){console.error(e)}}},send:function(message){this.socket.send(JSON.stringify(message))},getOrbitalBodyInfo:function(name){var properties=this.orbitingBodies[name];if(properties){return Object.extend({name:name},properties)}else{return null}},notifyIfLOS:function(request){if(request.transport.status==0){document.fire("telemachus:loss-of-signal");return true}return false},prepareParams:function(params){var normalizedParams=[];Object.keys(params).forEach(function(field){var sanitizedFieldName=field.replace("[","{").replace("]","}");normalizedParams.push(sanitizedFieldName+"="+field)});return normalizedParams},convertData:function(rawData){var data={};var startBracesRegexp=/\{/g;var endBracesRegexp=/\}/g;Object.keys(rawData).forEach(function(key){var convertedFieldName=key.replace(startBracesRegexp,"[").replace(endBracesRegexp,"]");data[convertedFieldName]=rawData[key]});return data},poll:function(){var params=this.prepareParams(this.subscribedFields);var requestURL=this.url()+"?"+params.join("&");new Ajax.Request(requestURL,{method:"get",onSuccess:function(response){var rawData=JSON.parse(response.responseText);var data=this.convertData(rawData);this.dispatchMessages(data)}.bind(this),onException:this.notifyIfLOS.bind(this),onComplete:function(response){setTimeout(this.poll.bind(this),this.rate)}.bind(this)})},sendMessage:function(params,callback){new Ajax.Request(this.url(),{method:"post",postBody:JSON.stringify(params),onSuccess:function(response){var rawData=JSON.parse(response.responseText);var data=this.convertData(rawData);callback(data)}.bind(this),onException:this.notifyIfLOS.bind(this)})},getOrbitalBodies:function(){return{Sun:{id:0,referenceBodyName:null,mapBody:null,atmosphericRadius:0,color:"#FFFF00",surfaceGravity:17.1},Kerbin:{id:1,referenceBodyName:"Sun",mapBody:L.KSP.CelestialBody.KERBIN,atmosphericRadius:7e4,color:"#4a5472",surfaceGravity:9.81},Mun:{id:2,referenceBodyName:"Kerbin",mapBody:L.KSP.CelestialBody.MUN,atmosphericRadius:0,color:"#e2e0d7",surfaceGravity:1.63},Minmus:{id:3,referenceBodyName:"Kerbin",mapBody:L.KSP.CelestialBody.MINMUS,color:"#98f2c5",atmosphericRadius:0,surfaceGravity:.491},Moho:{id:4,referenceBodyName:"Sun",mapBody:L.KSP.CelestialBody.MOHO,atmosphericRadius:0,color:"#fdc39e",surfaceGravity:2.7},Eve:{id:5,referenceBodyName:"Sun",mapBody:L.KSP.CelestialBody.EVE,atmosphericRadius:9e4,color:"#c394fe",surfaceGravity:16.7},Duna:{id:6,referenceBodyName:"Sun",mapBody:L.KSP.CelestialBody.DUNA,atmosphericRadius:5e4,color:"#fc5e49",surfaceGravity:2.94},Ike:{id:7,referenceBodyName:"Duna",mapBody:L.KSP.CelestialBody.IKE,atmosphericRadius:0,color:"#e2e0d7",surfaceGravity:1.1},Jool:{id:8,referenceBodyName:"Sun",mapBody:L.KSP.CelestialBody.JOOL,atmosphericRadius:2e5,color:"#C5DCAB",surfaceGravity:7.85},Laythe:{id:9,referenceBodyName:"Jool",mapBody:L.KSP.CelestialBody.LAYTHE,atmosphericRadius:5e4,color:"#a8b4fe",surfaceGravity:7.85},Vall:{id:10,referenceBodyName:"Jool",mapBody:L.KSP.CelestialBody.VALL,atmosphericRadius:0,color:"#b0f4fe",surfaceGravity:2.31},Bop:{id:11,referenceBodyName:"Jool",mapBody:L.KSP.CelestialBody.BOP,atmosphericRadius:0,color:"#c64605",surfaceGravity:.589},Tylo:{id:12,referenceBodyName:"Jool",mapBody:L.KSP.CelestialBody.TYLO,atmosphericRadius:0,color:"#fdf7ed",surfaceGravity:7.85},Gilly:{id:13,referenceBodyName:"Eve",mapBody:L.KSP.CelestialBody.GILLY,atmosphericRadius:0,color:"#fdcbb1",surfaceGravity:.049},Pol:{id:14,referenceBodyName:"Pol",mapBody:L.KSP.CelestialBody.POL,atmosphericRadius:0,color:"#fec681",surfaceGravity:.373},Dres:{id:15,referenceBodyName:"Sun",mapBody:L.KSP.CelestialBody.DRES,atmosphericRadius:0,color:"#fef8f9",surfaceGravity:1.13},Eeloo:{id:16,referenceBodyName:"Sun",mapBody:L.KSP.CelestialBody.EELOO,atmosphericRadius:0,color:"#e5fafe",surfaceGravity:1.69}}}});var TitleBar=Class.create({initialize:function(datalink,title_bar_id){this.datalink=datalink;this.title_bar_id=title_bar_id;this.title_bar=$(this.title_bar_id);this.initializeLOSNotifier();this.initializeDatalink()},update:function(data){window.requestAnimationFrame(function(){this.title_bar.down("#world-clock").update(TimeFormatters.formatUT(data["t.universalTime"]));this.title_bar.down("#mission-time").update(TimeFormatters.formatMET(data["v.missionTime"]));this.title_bar.down("#mission-time").removeClassName("loss-of-signal")}.bind(this))},initializeLOSNotifier:function(){document.observe("telemachus:loss-of-signal",function(){window.requestAnimationFrame(function(){this.title_bar.down("#mission-time").update("⚠ LOS ⚠");this.title_bar.down("#mission-time").addClassName("loss-of-signal")}.bind(this))}.bind(this))},initializeDatalink:function(){this.datalink.subscribeToData(["t.timeWarp","t.universalTime","v.missionTime"]);this.datalink.addReceiverFunction(this.update.bind(this))}});var ButtonIndicator=Class.create({initialize:function(datalink,indicatorId,apiButtonString){this.datalink=datalink;this.indicatorId=indicatorId;this.indicator=$(this.indicatorId);this.apiButtonString=apiButtonString;this.initializeDatalink()},update:function(data){if(data[this.apiButtonString]==true){this.indicator.addClassName("on")}else{this.indicator.removeClassName("on")}},initializeDatalink:function(){this.datalink.subscribeToData([this.apiButtonString]);this.datalink.addReceiverFunction(this.update.bind(this))}});var ReadoutTable=Class.create({initialize:function(datalink,tableId,dataRows){this.datalink=datalink;this.tableId=tableId;this.table=$(this.tableId);this.dataRows=dataRows;this.initializeDatalink()},update:function(data){window.requestAnimationFrame(function(){this.dataRows.forEach(function(row){var rowId=row.label;var tableRow=this.table.down("tr[data-label='"+rowId+"']");if(!tableRow){var tableRow=new Element("tr",{"data-label":rowId});tableRow.insert(""+row.label+"");this.table.insert(tableRow)}tableRow.down("td").update(row.formatter(data[row.value]))}.bind(this))}.bind(this))},initializeDatalink:function(){var dataValues=this.dataRows.map(function(dataRow){return dataRow.value});this.datalink.subscribeToData(dataValues);this.datalink.addReceiverFunction(this.update.bind(this))}});var ResourceMonitor=Class.create({initialize:function(datalink,resourceName,options){this.datalink=datalink;this.resourceName=resourceName;this.options=Object.extend({currentStageProgressBar:null,totalProgressBar:null,valuePrefix:null},options);this.resourceStrings=this.buildResourceStrings();this.initializeDatalink()},update:function(data){window.requestAnimationFrame(function(){if(this.options.totalProgressBar){this.options.totalProgressBar.value=data[this.resourceStrings.totalAvailable];this.options.totalProgressBar.max=data[this.resourceStrings.totalMax]}if(this.options.currentStageProgressBar){this.options.currentStageProgressBar.value=data[this.resourceStrings.currentStageAvailable];this.options.currentStageProgressBar.max=data[this.resourceStrings.currentStageMax]}this.updateValue("-total-value",data[this.resourceStrings.totalAvailable]);this.updateValue("-total-max",data[this.resourceStrings.totalMax]);this.updateValue("-current-stage-value",data[this.resourceStrings.currentStageAvailable]);this.updateValue("-current-stage-max",data[this.resourceStrings.currentStageMax])}.bind(this))},updateValue:function(id,value){if($(this.options.valuePrefix+id)){if(value<0){$(this.options.valuePrefix+id).update("NA")}else{$(this.options.valuePrefix+id).update(value.toFixed(2))}}},buildResourceStrings:function(){return{totalAvailable:"r.resource["+this.resourceName+"]",totalMax:"r.resourceMax["+this.resourceName+"]",currentStageAvailable:"r.resourceCurrent["+this.resourceName+"]",currentStageMax:"r.resourceCurrentMax["+this.resourceName+"]"}},initializeDatalink:function(){this.datalink.subscribeToData([this.resourceStrings.totalAvailable,this.resourceStrings.totalMax,this.resourceStrings.currentStageAvailable,this.resourceStrings.currentStageMax]);this.datalink.addReceiverFunction(this.update.bind(this))}});var DataTable=Class.create({initialize:function(tableID,dataRows){this.tableID=tableID;this.table=$(this.tableID);this.dataRows=dataRows},update:function(){window.requestAnimationFrame(function(){this.dataRows.forEach(function(row){var rowId=row.label;var tableRow=this.table.down("tr[data-label='"+rowId+"']");if(!tableRow){var tableRow=new Element("tr",{"data-label":rowId});tableRow.insert(""+row.label+"");this.table.insert(tableRow)}tableRow.down("td").update(row.value)}.bind(this))}.bind(this))},clear:function(){window.requestAnimationFrame(function(){this.dataRows=[];this.table.innerHTML=""}.bind(this))}});var AtmosphericDensityGauge=Class.create({initialize:function(datalink,gaugeID){this.datalink=datalink;this.gaugeID=gaugeID;this.gauge=$(this.gaugeID);this.initializeDatalink();this.func=function(x){return Math.log(2*x)}},update:function(data){var max=this.func(100);var value=this.func(data["v.atmosphericPressure"]*100);if(!isFinite(value)){value=0}this.gauge.value=value;this.gauge.max=max},initializeDatalink:function(){this.datalink.subscribeToData(["v.atmosphericPressure"]);this.datalink.addReceiverFunction(this.update.bind(this))}});var ThrottleGauge=Class.create({initialize:function(datalink,gaugeID){this.datalink=datalink;this.gaugeID=gaugeID;this.gauge=$(this.gaugeID);this.initializeDatalink()},update:function(data){this.gauge.value=data["f.throttle"]*100;this.gauge.max=100},initializeDatalink:function(){this.datalink.subscribeToData(["f.throttle"]);this.datalink.addReceiverFunction(this.update.bind(this))}});"use strict";var THREE={REVISION:"75"};"function"===typeof define&&define.amd?define("three",THREE):"undefined"!==typeof exports&&"undefined"!==typeof module&&(module.exports=THREE);void 0===Number.EPSILON&&(Number.EPSILON=Math.pow(2,-52));void 0===Math.sign&&(Math.sign=function(a){return 0>a?-1:0>16&255)/255;this.g=(a>>8&255)/255;this.b=(a&255)/255;return this},setRGB:function(a,b,c){this.r=a;this.g=b;this.b=c;return this},setHSL:function(){function a(a,c,d){0>d&&(d+=1);1d?c:d<2/3?a+6*(c-a)*(2/3-d):a}return function(b,c,d){b=THREE.Math.euclideanModulo(b,1);c=THREE.Math.clamp(c,0,1);d=THREE.Math.clamp(d,0,1);0===c?this.r=this.g=this.b=d:(c=.5>=d?d*(1+c):d+c-d*c,d=2*d-c,this.r=a(d,c,b+1/3),this.g=a(d,c,b),this.b=a(d,c,b-1/3));return this}}(),setStyle:function(a){function b(b){void 0!==b&&1>parseFloat(b)&&console.warn("THREE.Color: Alpha component of "+a+" will be ignored.")}var c;if(c=/^((?:rgb|hsl)a?)\(\s*([^\)]*)\)/.exec(a)){var d=c[2];switch(c[1]){case"rgb":case"rgba":if(c=/^(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(d))return this.r=Math.min(255,parseInt(c[1],10))/255,this.g=Math.min(255,parseInt(c[2],10))/255,this.b=Math.min(255,parseInt(c[3],10))/255,b(c[5]),this;if(c=/^(\d+)\%\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(d))return this.r=Math.min(100,parseInt(c[1],10))/100,this.g=Math.min(100,parseInt(c[2],10))/100,this.b=Math.min(100,parseInt(c[3],10))/100,b(c[5]),this;break;case"hsl":case"hsla":if(c=/^([0-9]*\.?[0-9]+)\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(d)){var d=parseFloat(c[1])/360,e=parseInt(c[2],10)/100,f=parseInt(c[3],10)/100;b(c[5]);return this.setHSL(d,e,f)}}}else if(c=/^\#([A-Fa-f0-9]+)$/.exec(a)){c=c[1];d=c.length;if(3===d)return this.r=parseInt(c.charAt(0)+c.charAt(0),16)/255,this.g=parseInt(c.charAt(1)+c.charAt(1),16)/255,this.b=parseInt(c.charAt(2)+c.charAt(2),16)/255,this;if(6===d)return this.r=parseInt(c.charAt(0)+c.charAt(1),16)/255,this.g=parseInt(c.charAt(2)+c.charAt(3),16)/255,this.b=parseInt(c.charAt(4)+c.charAt(5),16)/255,this}a&&0=h?k/(e+f):k/(2-e-f);switch(e){case b:g=(c-d)/k+(cf&&c>b?(c=2*Math.sqrt(1+c-f-b),this._w=(k-g)/c,this._x=.25*c,this._y=(a+e)/c,this._z=(d+h)/c):f>b?(c=2*Math.sqrt(1+f-c-b),this._w=(d-h)/c,this._x=(a+e)/c,this._y=.25*c,this._z=(g+k)/c):(c=2*Math.sqrt(1+b-c-f),this._w=(e-a)/c,this._x=(d+h)/c,this._y=(g+k)/c,this._z=.25*c);this.onChangeCallback();return this},setFromUnitVectors:function(){var a,b;return function(c,d){void 0===a&&(a=new THREE.Vector3); +Math.cosh = Math.cosh || function(x) { + return (Math.exp(x) + Math.exp(-x)) / 2; +} -b=c.dot(d)+1;1e-6>b?(b=0,Math.abs(c.x)>Math.abs(c.z)?a.set(-c.y,c.x,0):a.set(0,-c.z,c.y)):a.crossVectors(c,d);this._x=a.x;this._y=a.y;this._z=a.z;this._w=b;this.normalize();return this}}(),inverse:function(){this.conjugate().normalize();return this},conjugate:function(){this._x*=-1;this._y*=-1;this._z*=-1;this.onChangeCallback();return this},dot:function(a){return this._x*a._x+this._y*a._y+this._z*a._z+this._w*a._w},lengthSq:function(){return this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w},length:function(){return Math.sqrt(this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w)},normalize:function(){var a=this.length();0===a?(this._z=this._y=this._x=0,this._w=1):(a=1/a,this._x*=a,this._y*=a,this._z*=a,this._w*=a);this.onChangeCallback();return this},multiply:function(a,b){return void 0!==b?(console.warn("THREE.Quaternion: .multiply() now only accepts one argument. Use .multiplyQuaternions( a, b ) instead."),this.multiplyQuaternions(a,b)):this.multiplyQuaternions(this,a)},multiplyQuaternions:function(a,b){var c=a._x,d=a._y,e=a._z,f=a._w,g=b._x,h=b._y,k=b._z,l=b._w;this._x=c*l+f*g+d*k-e*h;this._y=d*l+f*h+e*g-c*k;this._z=e*l+f*k+c*h-d*g;this._w=f*l-c*g-d*h-e*k;this.onChangeCallback();return this},slerp:function(a,b){if(0===b)return this;if(1===b)return this.copy(a);var c=this._x,d=this._y,e=this._z,f=this._w,g=f*a._w+c*a._x+d*a._y+e*a._z;0>g?(this._w=-a._w,this._x=-a._x,this._y=-a._y,this._z=-a._z,g=-g):this.copy(a);if(1<=g)return this._w=f,this._x=c,this._y=d,this._z=e,this;var h=Math.sqrt(1-g*g);if(.001>Math.abs(h))return this._w=.5*(f+this._w),this._x=.5*(c+this._x),this._y=.5*(d+this._y),this._z=.5*(e+this._z),this;var k=Math.atan2(h,g),g=Math.sin((1-b)*k)/h,h=Math.sin(b*k)/h;this._w=f*g+this._w*h;this._x=c*g+this._x*h;this._y=d*g+this._y*h;this._z=e*g+this._z*h;this.onChangeCallback();return this},equals:function(a){return a._x===this._x&&a._y===this._y&&a._z===this._z&&a._w===this._w},fromArray:function(a,b){void 0===b&&(b=0);this._x=a[b];this._y=a[b+1];this._z=a[b+2];this._w=a[b+3];this.onChangeCallback();return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);a[b]=this._x;a[b+1]=this._y;a[b+2]=this._z;a[b+3]=this._w;return a},onChange:function(a){this.onChangeCallback=a;return this},onChangeCallback:function(){}};Object.assign(THREE.Quaternion,{slerp:function(a,b,c,d){return c.copy(a).slerp(b,d)},slerpFlat:function(a,b,c,d,e,f,g){var h=c[d+0],k=c[d+1],l=c[d+2];c=c[d+3];d=e[f+0];var p=e[f+1],n=e[f+2];e=e[f+3];if(c!==e||h!==d||k!==p||l!==n){f=1-g;var m=h*d+k*p+l*n+c*e,q=0<=m?1:-1,u=1-m*m;u>Number.EPSILON&&(u=Math.sqrt(u),m=Math.atan2(u,m*q),f=Math.sin(f*m)/u,g=Math.sin(g*m)/u);q*=g;h=h*f+d*q;k=k*f+p*q;l=l*f+n*q;c=c*f+e*q;f===1-g&&(g=1/Math.sqrt(h*h+k*k+l*l+c*c),h*=g,k*=g,l*=g,c*=g)}a[b]=h;a[b+1]=k;a[b+2]=l;a[b+3]=c}});THREE.Vector2=function(a,b){this.x=a||0;this.y=b||0};THREE.Vector2.prototype={constructor:THREE.Vector2,get width(){return this.x},set width(a){this.x=a},get height(){return this.y},set height(a){this.y=a},set:function(a,b){this.x=a;this.y=b;return this},setScalar:function(a){this.y=this.x=a;return this},setX:function(a){this.x=a;return this},setY:function(a){this.y=a;return this},setComponent:function(a,b){switch(a){case 0:this.x=b;break;case 1:this.y=b;break;default:throw Error("index is out of range: "+a)}},getComponent:function(a){switch(a){case 0:return this.x;case 1:return this.y;default:throw Error("index is out of range: "+a)}},clone:function(){return new this.constructor(this.x,this.y)},copy:function(a){this.x=a.x;this.y=a.y;return this},add:function(a,b){if(void 0!==b)return console.warn("THREE.Vector2: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(a,b);this.x+=a.x;this.y+=a.y;return this},addScalar:function(a){this.x+=a;this.y+=a;return this},addVectors:function(a,b){this.x=a.x+b.x;this.y=a.y+b.y;return this},addScaledVector:function(a,b){this.x+=a.x*b;this.y+=a.y*b;return this},sub:function(a,b){if(void 0!==b)return console.warn("THREE.Vector2: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(a,b);this.x-=a.x;this.y-=a.y;return this},subScalar:function(a){this.x-=a;this.y-=a;return this},subVectors:function(a,b){this.x=a.x-b.x;this.y=a.y-b.y;return this},multiply:function(a){this.x*=a.x;this.y*=a.y;return this},multiplyScalar:function(a){isFinite(a)?(this.x*=a,this.y*=a):this.y=this.x=0;return this},divide:function(a){this.x/=a.x;this.y/=a.y;return this},divideScalar:function(a){return this.multiplyScalar(1/a)},min:function(a){this.x=Math.min(this.x,a.x);this.y=Math.min(this.y,a.y);return this},max:function(a){this.x=Math.max(this.x,a.x);this.y=Math.max(this.y,a.y);return this},clamp:function(a,b){this.x=Math.max(a.x,Math.min(b.x,this.x));this.y=Math.max(a.y,Math.min(b.y,this.y));return this},clampScalar:function(){var a,b;return function(c,d){void 0===a&&(a=new THREE.Vector2,b=new THREE.Vector2);a.set(c,c);b.set(d,d);return this.clamp(a,b)}}(),clampLength:function(a,b){var c=this.length();this.multiplyScalar(Math.max(a,Math.min(b,c))/c);return this},floor:function(){this.x=Math.floor(this.x);this.y=Math.floor(this.y);return this},ceil:function(){this.x=Math.ceil(this.x);this.y=Math.ceil(this.y);return this},round:function(){this.x=Math.round(this.x);this.y=Math.round(this.y);return this},roundToZero:function(){this.x=0>this.x?Math.ceil(this.x):Math.floor(this.x);this.y=0>this.y?Math.ceil(this.y):Math.floor(this.y);return this},negate:function(){this.x=-this.x;this.y=-this.y;return this},dot:function(a){return this.x*a.x+this.y*a.y},lengthSq:function(){return this.x*this.x+this.y*this.y},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y)},lengthManhattan:function(){return Math.abs(this.x)+Math.abs(this.y)},normalize:function(){return this.divideScalar(this.length())},angle:function(){var a=Math.atan2(this.y,this.x);0>a&&(a+=2*Math.PI);return a},distanceTo:function(a){return Math.sqrt(this.distanceToSquared(a))},distanceToSquared:function(a){var b=this.x-a.x;a=this.y-a.y;return b*b+a*a},setLength:function(a){return this.multiplyScalar(a/this.length())},lerp:function(a,b){this.x+=(a.x-this.x)*b;this.y+=(a.y-this.y)*b;return this},lerpVectors:function(a,b,c){this.subVectors(b,a).multiplyScalar(c).add(a);return this},equals:function(a){return a.x===this.x&&a.y===this.y},fromArray:function(a,b){void 0===b&&(b=0);this.x=a[b];this.y=a[b+1];return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);a[b]=this.x;a[b+1]=this.y;return a},fromAttribute:function(a,b,c){void 0===c&&(c=0);b=b*a.itemSize+c;this.x=a.array[b];this.y=a.array[b+1];return this},rotateAround:function(a,b){var c=Math.cos(b),d=Math.sin(b),e=this.x-a.x,f=this.y-a.y;this.x=e*c-f*d+a.x;this.y=e*d+f*c+a.y;return this}};THREE.Vector3=function(a,b,c){this.x=a||0;this.y=b||0;this.z=c||0};THREE.Vector3.prototype={constructor:THREE.Vector3,set:function(a,b,c){this.x=a;this.y=b;this.z=c;return this},setScalar:function(a){this.z=this.y=this.x=a;return this},setX:function(a){this.x=a;return this},setY:function(a){this.y=a;return this},setZ:function(a){this.z=a;return this},setComponent:function(a,b){switch(a){case 0:this.x=b;break;case 1:this.y=b;break;case 2:this.z=b;break;default:throw Error("index is out of range: "+a)}},getComponent:function(a){switch(a){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw Error("index is out of range: "+a)}},clone:function(){return new this.constructor(this.x,this.y,this.z)},copy:function(a){this.x=a.x;this.y=a.y;this.z=a.z;return this},add:function(a,b){if(void 0!==b)return console.warn("THREE.Vector3: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(a,b);this.x+=a.x;this.y+=a.y;this.z+=a.z;return this},addScalar:function(a){this.x+=a;this.y+=a;this.z+=a;return this},addVectors:function(a,b){this.x=a.x+b.x;this.y=a.y+b.y;this.z=a.z+b.z;return this},addScaledVector:function(a,b){this.x+=a.x*b;this.y+=a.y*b;this.z+=a.z*b;return this},sub:function(a,b){if(void 0!==b)return console.warn("THREE.Vector3: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(a,b);this.x-=a.x;this.y-=a.y;this.z-=a.z;return this},subScalar:function(a){this.x-=a;this.y-=a;this.z-=a;return this},subVectors:function(a,b){this.x=a.x-b.x;this.y=a.y-b.y;this.z=a.z-b.z;return this},multiply:function(a,b){if(void 0!==b)return console.warn("THREE.Vector3: .multiply() now only accepts one argument. Use .multiplyVectors( a, b ) instead."),this.multiplyVectors(a,b);this.x*=a.x;this.y*=a.y;this.z*=a.z;return this},multiplyScalar:function(a){isFinite(a)?(this.x*=a,this.y*=a,this.z*=a):this.z=this.y=this.x=0;return this},multiplyVectors:function(a,b){this.x=a.x*b.x;this.y=a.y*b.y;this.z=a.z*b.z;return this},applyEuler:function(){var a;return function(b){!1===b instanceof THREE.Euler&&console.error("THREE.Vector3: .applyEuler() now expects an Euler rotation rather than a Vector3 and order.");void 0===a&&(a=new THREE.Quaternion);this.applyQuaternion(a.setFromEuler(b));return this}}(),applyAxisAngle:function(){var a;return function(b,c){void 0===a&&(a=new THREE.Quaternion);this.applyQuaternion(a.setFromAxisAngle(b,c));return this}}(),applyMatrix3:function(a){var b=this.x,c=this.y,d=this.z;a=a.elements;this.x=a[0]*b+a[3]*c+a[6]*d;this.y=a[1]*b+a[4]*c+a[7]*d;this.z=a[2]*b+a[5]*c+a[8]*d;return this},applyMatrix4:function(a){var b=this.x,c=this.y,d=this.z;a=a.elements;this.x=a[0]*b+a[4]*c+a[8]*d+a[12];this.y=a[1]*b+a[5]*c+a[9]*d+a[13];this.z=a[2]*b+a[6]*c+a[10]*d+a[14];return this},applyProjection:function(a){var b=this.x,c=this.y,d=this.z;a=a.elements;var e=1/(a[3]*b+a[7]*c+a[11]*d+a[15]);this.x=(a[0]*b+a[4]*c+a[8]*d+a[12])*e;this.y=(a[1]*b+a[5]*c+a[9]*d+a[13])*e;this.z=(a[2]*b+a[6]*c+a[10]*d+a[14])*e;return this},applyQuaternion:function(a){var b=this.x,c=this.y,d=this.z,e=a.x,f=a.y,g=a.z;a=a.w;var h=a*b+f*d-g*c,k=a*c+g*b-e*d,l=a*d+e*c-f*b,b=-e*b-f*c-g*d;this.x=h*a+b*-e+k*-g-l*-f;this.y=k*a+b*-f+l*-e-h*-g;this.z=l*a+b*-g+h*-f-k*-e;return this},project:function(){var a;return function(b){void 0===a&&(a=new THREE.Matrix4);a.multiplyMatrices(b.projectionMatrix,a.getInverse(b.matrixWorld));return this.applyProjection(a)}}(),unproject:function(){var a;return function(b){void 0===a&&(a=new THREE.Matrix4);a.multiplyMatrices(b.matrixWorld,a.getInverse(b.projectionMatrix));return this.applyProjection(a)}}(),transformDirection:function(a){var b=this.x,c=this.y,d=this.z;a=a.elements;this.x=a[0]*b+a[4]*c+a[8]*d;this.y=a[1]*b+a[5]*c+a[9]*d;this.z=a[2]*b+a[6]*c+a[10]*d;this.normalize();return this},divide:function(a){this.x/=a.x;this.y/=a.y;this.z/=a.z;return this},divideScalar:function(a){return this.multiplyScalar(1/a)},min:function(a){this.x=Math.min(this.x,a.x);this.y=Math.min(this.y,a.y);this.z=Math.min(this.z,a.z);return this},max:function(a){this.x=Math.max(this.x,a.x);this.y=Math.max(this.y,a.y);this.z=Math.max(this.z,a.z);return this},clamp:function(a,b){this.x=Math.max(a.x,Math.min(b.x,this.x));this.y=Math.max(a.y,Math.min(b.y,this.y));this.z=Math.max(a.z,Math.min(b.z,this.z));return this},clampScalar:function(){var a,b;return function(c,d){void 0===a&&(a=new THREE.Vector3,b=new THREE.Vector3);a.set(c,c,c);b.set(d,d,d);return this.clamp(a,b)}}(),clampLength:function(a,b){var c=this.length();this.multiplyScalar(Math.max(a,Math.min(b,c))/c);return this},floor:function(){this.x=Math.floor(this.x);this.y=Math.floor(this.y);this.z=Math.floor(this.z);return this},ceil:function(){this.x=Math.ceil(this.x);this.y=Math.ceil(this.y);this.z=Math.ceil(this.z);return this},round:function(){this.x=Math.round(this.x);this.y=Math.round(this.y);this.z=Math.round(this.z);return this},roundToZero:function(){this.x=0>this.x?Math.ceil(this.x):Math.floor(this.x);this.y=0>this.y?Math.ceil(this.y):Math.floor(this.y);this.z=0>this.z?Math.ceil(this.z):Math.floor(this.z);return this},negate:function(){this.x=-this.x;this.y=-this.y;this.z=-this.z;return this},dot:function(a){return this.x*a.x+this.y*a.y+this.z*a.z},lengthSq:function(){return this.x*this.x+this.y*this.y+this.z*this.z},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)},lengthManhattan:function(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)},normalize:function(){return this.divideScalar(this.length())},setLength:function(a){return this.multiplyScalar(a/this.length())},lerp:function(a,b){this.x+=(a.x-this.x)*b;this.y+=(a.y-this.y)*b;this.z+=(a.z-this.z)*b;return this},lerpVectors:function(a,b,c){this.subVectors(b,a).multiplyScalar(c).add(a);return this},cross:function(a,b){if(void 0!==b)return console.warn("THREE.Vector3: .cross() now only accepts one argument. Use .crossVectors( a, b ) instead."),this.crossVectors(a,b);var c=this.x,d=this.y,e=this.z;this.x=d*a.z-e*a.y;this.y=e*a.x-c*a.z;this.z=c*a.y-d*a.x;return this},crossVectors:function(a,b){var c=a.x,d=a.y,e=a.z,f=b.x,g=b.y,h=b.z;this.x=d*h-e*g;this.y=e*f-c*h;this.z=c*g-d*f;return this},projectOnVector:function(){var a,b;return function(c){void 0===a&&(a=new THREE.Vector3);a.copy(c).normalize();b=this.dot(a);return this.copy(a).multiplyScalar(b)}}(),projectOnPlane:function(){var a;return function(b){void 0===a&&(a=new THREE.Vector3);a.copy(this).projectOnVector(b);return this.sub(a)}}(),reflect:function(){var a;return function(b){void 0===a&&(a=new THREE.Vector3);return this.sub(a.copy(b).multiplyScalar(2*this.dot(b)))}}(),angleTo:function(a){a=this.dot(a)/Math.sqrt(this.lengthSq()*a.lengthSq());return Math.acos(THREE.Math.clamp(a,-1,1))},distanceTo:function(a){return Math.sqrt(this.distanceToSquared(a))},distanceToSquared:function(a){var b=this.x-a.x,c=this.y-a.y;a=this.z-a.z;return b*b+c*c+a*a},setFromSpherical:function(a){var b=Math.sin(a.phi)*a.radius;this.x=b*Math.sin(a.theta);this.y=Math.cos(a.phi)*a.radius;this.z=b*Math.cos(a.theta);return this},setFromMatrixPosition:function(a){return this.setFromMatrixColumn(a,3)},setFromMatrixScale:function(a){var b=this.setFromMatrixColumn(a,0).length(),c=this.setFromMatrixColumn(a,1).length();a=this.setFromMatrixColumn(a,2).length();this.x=b;this.y=c;this.z=a;return this},setFromMatrixColumn:function(a,b){"number"===typeof a&&(console.warn("THREE.Vector3: setFromMatrixColumn now expects ( matrix, index )."),b=a=b);return this.fromArray(a.elements,4*b)},equals:function(a){return a.x===this.x&&a.y===this.y&&a.z===this.z},fromArray:function(a,b){void 0===b&&(b=0);this.x=a[b];this.y=a[b+1];this.z=a[b+2];return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);a[b]=this.x;a[b+1]=this.y;a[b+2]=this.z;return a},fromAttribute:function(a,b,c){void 0===c&&(c=0);b=b*a.itemSize+c;this.x=a.array[b];this.y=a.array[b+1];this.z=a.array[b+2];return this}};THREE.Vector4=function(a,b,c,d){this.x=a||0;this.y=b||0;this.z=c||0;this.w=void 0!==d?d:1};THREE.Vector4.prototype={constructor:THREE.Vector4,set:function(a,b,c,d){this.x=a;this.y=b;this.z=c;this.w=d;return this},setScalar:function(a){this.w=this.z=this.y=this.x=a;return this},setX:function(a){this.x=a;return this},setY:function(a){this.y=a;return this},setZ:function(a){this.z=a;return this},setW:function(a){this.w=a;return this},setComponent:function(a,b){switch(a){case 0:this.x=b;break;case 1:this.y=b;break;case 2:this.z=b;break;case 3:this.w=b;break;default:throw Error("index is out of range: "+a)}},getComponent:function(a){switch(a){case 0:return this.x;case 1:return this.y;case 2:return this.z;case 3:return this.w;default:throw Error("index is out of range: "+a)}},clone:function(){return new this.constructor(this.x,this.y,this.z,this.w)},copy:function(a){this.x=a.x;this.y=a.y;this.z=a.z;this.w=void 0!==a.w?a.w:1;return this},add:function(a,b){if(void 0!==b)return console.warn("THREE.Vector4: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(a,b);this.x+=a.x;this.y+=a.y;this.z+=a.z;this.w+=a.w;return this},addScalar:function(a){this.x+=a;this.y+=a;this.z+=a;this.w+=a;return this},addVectors:function(a,b){this.x=a.x+b.x;this.y=a.y+b.y;this.z=a.z+b.z;this.w=a.w+b.w;return this},addScaledVector:function(a,b){this.x+=a.x*b;this.y+=a.y*b;this.z+=a.z*b;this.w+=a.w*b;return this},sub:function(a,b){if(void 0!==b)return console.warn("THREE.Vector4: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(a,b);this.x-=a.x;this.y-=a.y;this.z-=a.z;this.w-=a.w;return this},subScalar:function(a){this.x-=a;this.y-=a;this.z-=a;this.w-=a;return this},subVectors:function(a,b){this.x=a.x-b.x;this.y=a.y-b.y;this.z=a.z-b.z;this.w=a.w-b.w;return this},multiplyScalar:function(a){isFinite(a)?(this.x*=a,this.y*=a,this.z*=a,this.w*=a):this.w=this.z=this.y=this.x=0;return this},applyMatrix4:function(a){var b=this.x,c=this.y,d=this.z,e=this.w;a=a.elements;this.x=a[0]*b+a[4]*c+a[8]*d+a[12]*e;this.y=a[1]*b+a[5]*c+a[9]*d+a[13]*e;this.z=a[2]*b+a[6]*c+a[10]*d+a[14]*e;this.w=a[3]*b+a[7]*c+a[11]*d+a[15]*e;return this},divideScalar:function(a){return this.multiplyScalar(1/a)},setAxisAngleFromQuaternion:function(a){this.w=2*Math.acos(a.w);var b=Math.sqrt(1-a.w*a.w);1e-4>b?(this.x=1,this.z=this.y=0):(this.x=a.x/b,this.y=a.y/b,this.z=a.z/b);return this},setAxisAngleFromRotationMatrix:function(a){var b,c,d;a=a.elements;var e=a[0];d=a[4];var f=a[8],g=a[1],h=a[5],k=a[9];c=a[2];b=a[6];var l=a[10];if(.01>Math.abs(d-g)&&.01>Math.abs(f-c)&&.01>Math.abs(k-b)){if(.1>Math.abs(d+g)&&.1>Math.abs(f+c)&&.1>Math.abs(k+b)&&.1>Math.abs(e+h+l-3))return this.set(1,0,0,0),this;a=Math.PI;e=(e+1)/2;h=(h+1)/2;l=(l+1)/2;d=(d+g)/4;f=(f+c)/4;k=(k+b)/4;e>h&&e>l?.01>e?(b=0,d=c=.707106781):(b=Math.sqrt(e),c=d/b,d=f/b):h>l?.01>h?(b=.707106781,c=0,d=.707106781):(c=Math.sqrt(h),b=d/c,d=k/c):.01>l?(c=b=.707106781,d=0):(d=Math.sqrt(l),b=f/d,c=k/d);this.set(b,c,d,a);return this}a=Math.sqrt((b-k)*(b-k)+(f-c)*(f-c)+(g-d)*(g-d));.001>Math.abs(a)&&(a=1);this.x=(b-k)/a;this.y=(f-c)/a;this.z=(g-d)/a;this.w=Math.acos((e+h+l-1)/2);return this},min:function(a){this.x=Math.min(this.x,a.x);this.y=Math.min(this.y,a.y);this.z=Math.min(this.z,a.z);this.w=Math.min(this.w,a.w);return this},max:function(a){this.x=Math.max(this.x,a.x);this.y=Math.max(this.y,a.y);this.z=Math.max(this.z,a.z);this.w=Math.max(this.w,a.w);return this},clamp:function(a,b){this.x=Math.max(a.x,Math.min(b.x,this.x));this.y=Math.max(a.y,Math.min(b.y,this.y));this.z=Math.max(a.z,Math.min(b.z,this.z));this.w=Math.max(a.w,Math.min(b.w,this.w));return this},clampScalar:function(){var a,b;return function(c,d){void 0===a&&(a=new THREE.Vector4,b=new THREE.Vector4);a.set(c,c,c,c);b.set(d,d,d,d);return this.clamp(a,b)}}(),floor:function(){this.x=Math.floor(this.x);this.y=Math.floor(this.y);this.z=Math.floor(this.z);this.w=Math.floor(this.w);return this},ceil:function(){this.x=Math.ceil(this.x);this.y=Math.ceil(this.y);this.z=Math.ceil(this.z);this.w=Math.ceil(this.w);return this},round:function(){this.x=Math.round(this.x);this.y=Math.round(this.y);this.z=Math.round(this.z);this.w=Math.round(this.w);return this},roundToZero:function(){this.x=0>this.x?Math.ceil(this.x):Math.floor(this.x);this.y=0>this.y?Math.ceil(this.y):Math.floor(this.y);this.z=0>this.z?Math.ceil(this.z):Math.floor(this.z);this.w=0>this.w?Math.ceil(this.w):Math.floor(this.w);return this},negate:function(){this.x=-this.x;this.y=-this.y;this.z=-this.z;this.w=-this.w;return this},dot:function(a){return this.x*a.x+this.y*a.y+this.z*a.z+this.w*a.w},lengthSq:function(){return this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w)},lengthManhattan:function(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)+Math.abs(this.w)},normalize:function(){return this.divideScalar(this.length())},setLength:function(a){return this.multiplyScalar(a/this.length())},lerp:function(a,b){this.x+=(a.x-this.x)*b;this.y+=(a.y-this.y)*b;this.z+=(a.z-this.z)*b;this.w+=(a.w-this.w)*b;return this},lerpVectors:function(a,b,c){this.subVectors(b,a).multiplyScalar(c).add(a);return this},equals:function(a){return a.x===this.x&&a.y===this.y&&a.z===this.z&&a.w===this.w},fromArray:function(a,b){void 0===b&&(b=0);this.x=a[b];this.y=a[b+1];this.z=a[b+2];this.w=a[b+3];return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);a[b]=this.x;a[b+1]=this.y;a[b+2]=this.z;a[b+3]=this.w;return a},fromAttribute:function(a,b,c){void 0===c&&(c=0);b=b*a.itemSize+c;this.x=a.array[b];this.y=a.array[b+1];this.z=a.array[b+2];this.w=a.array[b+3];return this}};THREE.Euler=function(a,b,c,d){this._x=a||0;this._y=b||0;this._z=c||0;this._order=d||THREE.Euler.DefaultOrder};THREE.Euler.RotationOrders="XYZ YZX ZXY XZY YXZ ZYX".split(" ");THREE.Euler.DefaultOrder="XYZ";THREE.Euler.prototype={constructor:THREE.Euler,get x(){return this._x},set x(a){this._x=a;this.onChangeCallback()},get y(){return this._y},set y(a){this._y=a;this.onChangeCallback()},get z(){return this._z},set z(a){this._z=a;this.onChangeCallback()},get order(){return this._order},set order(a){this._order=a;this.onChangeCallback()},set:function(a,b,c,d){this._x=a;this._y=b;this._z=c;this._order=d||this._order;this.onChangeCallback();return this},clone:function(){return new this.constructor(this._x,this._y,this._z,this._order)},copy:function(a){this._x=a._x;this._y=a._y;this._z=a._z;this._order=a._order;this.onChangeCallback();return this},setFromRotationMatrix:function(a,b,c){var d=THREE.Math.clamp,e=a.elements;a=e[0];var f=e[4],g=e[8],h=e[1],k=e[5],l=e[9],p=e[2],n=e[6],e=e[10];b=b||this._order;"XYZ"===b?(this._y=Math.asin(d(g,-1,1)),.99999>Math.abs(g)?(this._x=Math.atan2(-l,e),this._z=Math.atan2(-f,a)):(this._x=Math.atan2(n,k),this._z=0)):"YXZ"===b?(this._x=Math.asin(-d(l,-1,1)),.99999>Math.abs(l)?(this._y=Math.atan2(g,e),this._z=Math.atan2(h,k)):(this._y=Math.atan2(-p,a),this._z=0)):"ZXY"===b?(this._x=Math.asin(d(n,-1,1)),.99999>Math.abs(n)?(this._y=Math.atan2(-p,e),this._z=Math.atan2(-f,k)):(this._y=0,this._z=Math.atan2(h,a))):"ZYX"===b?(this._y=Math.asin(-d(p,-1,1)),.99999>Math.abs(p)?(this._x=Math.atan2(n,e),this._z=Math.atan2(h,a)):(this._x=0,this._z=Math.atan2(-f,k))):"YZX"===b?(this._z=Math.asin(d(h,-1,1)),.99999>Math.abs(h)?(this._x=Math.atan2(-l,k),this._y=Math.atan2(-p,a)):(this._x=0,this._y=Math.atan2(g,e))):"XZY"===b?(this._z=Math.asin(-d(f,-1,1)),.99999>Math.abs(f)?(this._x=Math.atan2(n,k),this._y=Math.atan2(g,a)):(this._x=Math.atan2(-l,e),this._y=0)):console.warn("THREE.Euler: .setFromRotationMatrix() given unsupported order: "+b);this._order=b;if(!1!==c)this.onChangeCallback();return this},setFromQuaternion:function(){var a;return function(b,c,d){void 0===a&&(a=new THREE.Matrix4);a.makeRotationFromQuaternion(b);this.setFromRotationMatrix(a,c,d);return this}}(),setFromVector3:function(a,b){return this.set(a.x,a.y,a.z,b||this._order)},reorder:function(){var a=new THREE.Quaternion;return function(b){a.setFromEuler(this);this.setFromQuaternion(a,b)}}(),equals:function(a){return a._x===this._x&&a._y===this._y&&a._z===this._z&&a._order===this._order},fromArray:function(a){this._x=a[0];this._y=a[1];this._z=a[2];void 0!==a[3]&&(this._order=a[3]);this.onChangeCallback();return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);a[b]=this._x;a[b+1]=this._y;a[b+2]=this._z;a[b+3]=this._order;return a},toVector3:function(a){return a?a.set(this._x,this._y,this._z):new THREE.Vector3(this._x,this._y,this._z)},onChange:function(a){this.onChangeCallback=a;return this},onChangeCallback:function(){}};THREE.Line3=function(a,b){this.start=void 0!==a?a:new THREE.Vector3;this.end=void 0!==b?b:new THREE.Vector3};THREE.Line3.prototype={constructor:THREE.Line3,set:function(a,b){this.start.copy(a);this.end.copy(b);return this},clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.start.copy(a.start);this.end.copy(a.end);return this},center:function(a){return(a||new THREE.Vector3).addVectors(this.start,this.end).multiplyScalar(.5)},delta:function(a){return(a||new THREE.Vector3).subVectors(this.end,this.start)},distanceSq:function(){return this.start.distanceToSquared(this.end)},distance:function(){return this.start.distanceTo(this.end)},at:function(a,b){var c=b||new THREE.Vector3;return this.delta(c).multiplyScalar(a).add(this.start)},closestPointToPointParameter:function(){var a=new THREE.Vector3,b=new THREE.Vector3;return function(c,d){a.subVectors(c,this.start);b.subVectors(this.end,this.start);var e=b.dot(b),e=b.dot(a)/e;d&&(e=THREE.Math.clamp(e,0,1));return e}}(),closestPointToPoint:function(a,b,c){a=this.closestPointToPointParameter(a,b);c=c||new THREE.Vector3;return this.delta(c).multiplyScalar(a).add(this.start)},applyMatrix4:function(a){this.start.applyMatrix4(a);this.end.applyMatrix4(a);return this},equals:function(a){return a.start.equals(this.start)&&a.end.equals(this.end)}};THREE.Box2=function(a,b){this.min=void 0!==a?a:new THREE.Vector2(Infinity,Infinity);this.max=void 0!==b?b:new THREE.Vector2(-Infinity,-Infinity)};THREE.Box2.prototype={constructor:THREE.Box2,set:function(a,b){this.min.copy(a);this.max.copy(b);return this},setFromPoints:function(a){this.makeEmpty();for(var b=0,c=a.length;bthis.max.x||a.ythis.max.y?!1:!0},containsBox:function(a){return this.min.x<=a.min.x&&a.max.x<=this.max.x&&this.min.y<=a.min.y&&a.max.y<=this.max.y?!0:!1},getParameter:function(a,b){return(b||new THREE.Vector2).set((a.x-this.min.x)/(this.max.x-this.min.x),(a.y-this.min.y)/(this.max.y-this.min.y))},intersectsBox:function(a){return a.max.xthis.max.x||a.max.ythis.max.y?!1:!0},clampPoint:function(a,b){return(b||new THREE.Vector2).copy(a).clamp(this.min,this.max)},distanceToPoint:function(){var a=new THREE.Vector2;return function(b){return a.copy(b).clamp(this.min,this.max).sub(b).length()}}(),intersect:function(a){this.min.max(a.min);this.max.min(a.max);return this},union:function(a){this.min.min(a.min);this.max.max(a.max);return this},translate:function(a){this.min.add(a);this.max.add(a);return this},equals:function(a){return a.min.equals(this.min)&&a.max.equals(this.max)}};THREE.Box3=function(a,b){this.min=void 0!==a?a:new THREE.Vector3(Infinity,Infinity,Infinity);this.max=void 0!==b?b:new THREE.Vector3(-Infinity,-Infinity,-Infinity)};THREE.Box3.prototype={constructor:THREE.Box3,set:function(a,b){this.min.copy(a);this.max.copy(b);return this},setFromArray:function(a){this.makeEmpty();for(var b=Infinity,c=Infinity,d=Infinity,e=-Infinity,f=-Infinity,g=-Infinity,h=0,k=a.length;he&&(e=l);p>f&&(f=p);n>g&&(g=n)}this.min.set(b,c,d);this.max.set(e,f,g)},setFromPoints:function(a){this.makeEmpty();for(var b=0,c=a.length;bthis.max.x||a.ythis.max.y||a.zthis.max.z?!1:!0},containsBox:function(a){return this.min.x<=a.min.x&&a.max.x<=this.max.x&&this.min.y<=a.min.y&&a.max.y<=this.max.y&&this.min.z<=a.min.z&&a.max.z<=this.max.z?!0:!1},getParameter:function(a,b){return(b||new THREE.Vector3).set((a.x-this.min.x)/(this.max.x-this.min.x),(a.y-this.min.y)/(this.max.y-this.min.y),(a.z-this.min.z)/(this.max.z-this.min.z))},intersectsBox:function(a){return a.max.xthis.max.x||a.max.ythis.max.y||a.max.zthis.max.z?!1:!0},intersectsSphere:function(){var a;return function(b){void 0===a&&(a=new THREE.Vector3);this.clampPoint(b.center,a);return a.distanceToSquared(b.center)<=b.radius*b.radius}}(),intersectsPlane:function(a){var b,c;0=a.constant},clampPoint:function(a,b){return(b||new THREE.Vector3).copy(a).clamp(this.min,this.max)},distanceToPoint:function(){var a=new THREE.Vector3;return function(b){return a.copy(b).clamp(this.min,this.max).sub(b).length()}}(),getBoundingSphere:function(){var a=new THREE.Vector3;return function(b){b=b||new THREE.Sphere;b.center=this.center();b.radius=.5*this.size(a).length();return b}}(),intersect:function(a){this.min.max(a.min);this.max.min(a.max);return this},union:function(a){this.min.min(a.min);this.max.max(a.max);return this},applyMatrix4:function(){var a=[new THREE.Vector3,new THREE.Vector3,new THREE.Vector3,new THREE.Vector3,new THREE.Vector3,new THREE.Vector3,new THREE.Vector3,new THREE.Vector3];return function(b){a[0].set(this.min.x,this.min.y,this.min.z).applyMatrix4(b);a[1].set(this.min.x,this.min.y,this.max.z).applyMatrix4(b);a[2].set(this.min.x,this.max.y,this.min.z).applyMatrix4(b);a[3].set(this.min.x,this.max.y,this.max.z).applyMatrix4(b);a[4].set(this.max.x,this.min.y,this.min.z).applyMatrix4(b);a[5].set(this.max.x,this.min.y,this.max.z).applyMatrix4(b);a[6].set(this.max.x,this.max.y,this.min.z).applyMatrix4(b);a[7].set(this.max.x,this.max.y,this.max.z).applyMatrix4(b);this.makeEmpty();this.setFromPoints(a);return this}}(),translate:function(a){this.min.add(a);this.max.add(a);return this},equals:function(a){return a.min.equals(this.min)&&a.max.equals(this.max)}};THREE.Matrix3=function(){this.elements=new Float32Array([1,0,0,0,1,0,0,0,1]);0this.determinant()&&(g=-g);c.x=f[12];c.y=f[13];c.z=f[14];b.elements.set(this.elements);c=1/g;var f=1/h,l=1/k;b.elements[0]*=c;b.elements[1]*=c;b.elements[2]*=c;b.elements[4]*=f;b.elements[5]*=f;b.elements[6]*=f;b.elements[8]*=l;b.elements[9]*=l;b.elements[10]*=l;d.setFromRotationMatrix(b);e.x=g;e.y=h;e.z=k;return this}}(),makeFrustum:function(a,b,c,d,e,f){var g=this.elements;g[0]=2*e/(b-a);g[4]=0;g[8]=(b+a)/(b-a);g[12]=0;g[1]=0;g[5]=2*e/(d-c);g[9]=(d+c)/(d-c);g[13]=0;g[2]=0;g[6]=0;g[10]=-(f+e)/(f-e);g[14]=-2*f*e/(f-e);g[3]=0;g[7]=0;g[11]=-1;g[15]=0;return this},makePerspective:function(a,b,c,d){a=c*Math.tan(THREE.Math.degToRad(.5*a));var e=-a;return this.makeFrustum(e*b,a*b,e,a,c,d)},makeOrthographic:function(a,b,c,d,e,f){var g=this.elements,h=1/(b-a),k=1/(c-d),l=1/(f-e);g[0]=2*h;g[4]=0;g[8]=0;g[12]=-((b+a)*h);g[1]=0;g[5]=2*k;g[9]=0;g[13]=-((c+d)*k);g[2]=0;g[6]=0;g[10]=-2*l;g[14]=-((f+e)*l);g[3]=0;g[7]=0;g[11]=0;g[15]=1;return this},equals:function(a){var b=this.elements;a=a.elements;for(var c=0;16>c;c++)if(b[c]!==a[c])return!1;return!0},fromArray:function(a){this.elements.set(a);return this},toArray:function(){var a=this.elements;return[a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8],a[9],a[10],a[11],a[12],a[13],a[14],a[15]]}};THREE.Ray=function(a,b){this.origin=void 0!==a?a:new THREE.Vector3;this.direction=void 0!==b?b:new THREE.Vector3};THREE.Ray.prototype={constructor:THREE.Ray,set:function(a,b){this.origin.copy(a);this.direction.copy(b);return this},clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.origin.copy(a.origin);this.direction.copy(a.direction);return this},at:function(a,b){return(b||new THREE.Vector3).copy(this.direction).multiplyScalar(a).add(this.origin)},lookAt:function(a){this.direction.copy(a).sub(this.origin).normalize()},recast:function(){var a=new THREE.Vector3;return function(b){this.origin.copy(this.at(b,a));return this}}(),closestPointToPoint:function(a,b){var c=b||new THREE.Vector3;c.subVectors(a,this.origin);var d=c.dot(this.direction);return 0>d?c.copy(this.origin):c.copy(this.direction).multiplyScalar(d).add(this.origin)},distanceToPoint:function(a){return Math.sqrt(this.distanceSqToPoint(a))},distanceSqToPoint:function(){var a=new THREE.Vector3;return function(b){var c=a.subVectors(b,this.origin).dot(this.direction);if(0>c)return this.origin.distanceToSquared(b);a.copy(this.direction).multiplyScalar(c).add(this.origin);return a.distanceToSquared(b)}}(),distanceSqToSegment:function(){var a=new THREE.Vector3,b=new THREE.Vector3,c=new THREE.Vector3;return function(d,e,f,g){a.copy(d).add(e).multiplyScalar(.5);b.copy(e).sub(d).normalize();c.copy(this.origin).sub(a);var h=.5*d.distanceTo(e),k=-this.direction.dot(b),l=c.dot(this.direction),p=-c.dot(b),n=c.lengthSq(),m=Math.abs(1-k*k),q;0=-q?e<=q?(h=1/m,d*=h,e*=h,k=d*(d+k*e+2*l)+e*(k*d+e+2*p)+n):(e=h,d=Math.max(0,-(k*e+l)),k=-d*d+e*(e+2*p)+n):(e=-h,d=Math.max(0,-(k*e+l)),k=-d*d+e*(e+2*p)+n):e<=-q?(d=Math.max(0,-(-k*h+l)),e=0f)return null;f=Math.sqrt(f-e);e=d-f;d+=f;return 0>e&&0>d?null:0>e?this.at(d,c):this.at(e,c)}}(),intersectsSphere:function(a){return this.distanceToPoint(a.center)<=a.radius},distanceToPlane:function(a){var b=a.normal.dot(this.direction);if(0===b)return 0===a.distanceToPoint(this.origin)?0:null;a=-(this.origin.dot(a.normal)+a.constant)/b;return 0<=a?a:null},intersectPlane:function(a,b){var c=this.distanceToPlane(a);return null===c?null:this.at(c,b)},intersectsPlane:function(a){var b=a.distanceToPoint(this.origin);return 0===b||0>a.normal.dot(this.direction)*b?!0:!1},intersectBox:function(a,b){var c,d,e,f,g;d=1/this.direction.x;f=1/this.direction.y;g=1/this.direction.z;var h=this.origin;0<=d?(c=(a.min.x-h.x)*d,d*=a.max.x-h.x):(c=(a.max.x-h.x)*d,d*=a.min.x-h.x);0<=f?(e=(a.min.y-h.y)*f,f*=a.max.y-h.y):(e=(a.max.y-h.y)*f,f*=a.min.y-h.y);if(c>f||e>d)return null;if(e>c||c!==c)c=e;if(fg||e>d)return null;if(e>c||c!==c)c=e;if(gd?null:this.at(0<=c?c:d,b)},intersectsBox:function(){var a=new THREE.Vector3;return function(b){return null!==this.intersectBox(b,a)}}(),intersectTriangle:function(){var a=new THREE.Vector3,b=new THREE.Vector3,c=new THREE.Vector3,d=new THREE.Vector3;return function(e,f,g,h,k){b.subVectors(f,e);c.subVectors(g,e);d.crossVectors(b,c);f=this.direction.dot(d);if(0f)h=-1,f=-f;else return null;a.subVectors(this.origin,e);e=h*this.direction.dot(c.crossVectors(a,c));if(0>e)return null;g=h*this.direction.dot(b.cross(a));if(0>g||e+g>f)return null;e=-h*a.dot(d);return 0>e?null:this.at(e/f,k)}}(),applyMatrix4:function(a){this.direction.add(this.origin).applyMatrix4(a);this.origin.applyMatrix4(a);this.direction.sub(this.origin);this.direction.normalize();return this},equals:function(a){return a.origin.equals(this.origin)&&a.direction.equals(this.direction)}};THREE.Sphere=function(a,b){this.center=void 0!==a?a:new THREE.Vector3;this.radius=void 0!==b?b:0};THREE.Sphere.prototype={constructor:THREE.Sphere,set:function(a,b){this.center.copy(a);this.radius=b;return this},setFromPoints:function(){var a=new THREE.Box3;return function(b,c){var d=this.center;void 0!==c?d.copy(c):a.setFromPoints(b).center(d);for(var e=0,f=0,g=b.length;f=this.radius},containsPoint:function(a){return a.distanceToSquared(this.center)<=this.radius*this.radius},distanceToPoint:function(a){return a.distanceTo(this.center)-this.radius},intersectsSphere:function(a){var b=this.radius+a.radius;return a.center.distanceToSquared(this.center)<=b*b},intersectsBox:function(a){return a.intersectsSphere(this)},intersectsPlane:function(a){return Math.abs(this.center.dot(a.normal)-a.constant)<=this.radius},clampPoint:function(a,b){var c=this.center.distanceToSquared(a),d=b||new THREE.Vector3;d.copy(a);c>this.radius*this.radius&&(d.sub(this.center).normalize(),d.multiplyScalar(this.radius).add(this.center));return d},getBoundingBox:function(a){a=a||new THREE.Box3;a.set(this.center,this.center);a.expandByScalar(this.radius);return a},applyMatrix4:function(a){this.center.applyMatrix4(a);this.radius*=a.getMaxScaleOnAxis();return this},translate:function(a){this.center.add(a);return this},equals:function(a){return a.center.equals(this.center)&&a.radius===this.radius}};THREE.Frustum=function(a,b,c,d,e,f){this.planes=[void 0!==a?a:new THREE.Plane,void 0!==b?b:new THREE.Plane,void 0!==c?c:new THREE.Plane,void 0!==d?d:new THREE.Plane,void 0!==e?e:new THREE.Plane,void 0!==f?f:new THREE.Plane]};THREE.Frustum.prototype={constructor:THREE.Frustum,set:function(a,b,c,d,e,f){var g=this.planes;g[0].copy(a);g[1].copy(b);g[2].copy(c);g[3].copy(d);g[4].copy(e);g[5].copy(f);return this},clone:function(){return(new this.constructor).copy(this)},copy:function(a){for(var b=this.planes,c=0;6>c;c++)b[c].copy(a.planes[c]);return this},setFromMatrix:function(a){var b=this.planes,c=a.elements;a=c[0];var d=c[1],e=c[2],f=c[3],g=c[4],h=c[5],k=c[6],l=c[7],p=c[8],n=c[9],m=c[10],q=c[11],u=c[12],v=c[13],t=c[14],c=c[15];b[0].setComponents(f-a,l-g,q-p,c-u).normalize();b[1].setComponents(f+a,l+g,q+p,c+u).normalize();b[2].setComponents(f+d,l+h,q+n,c+v).normalize();b[3].setComponents(f-d,l-h,q-n,c-v).normalize();b[4].setComponents(f-e,l-k,q-m,c-t).normalize();b[5].setComponents(f+e,l+k,q+m,c+t).normalize();return this},intersectsObject:function(){var a=new THREE.Sphere;return function(b){var c=b.geometry;null===c.boundingSphere&&c.computeBoundingSphere();a.copy(c.boundingSphere);a.applyMatrix4(b.matrixWorld);return this.intersectsSphere(a)}}(),intersectsSphere:function(a){var b=this.planes,c=a.center;a=-a.radius;for(var d=0;6>d;d++)if(b[d].distanceToPoint(c)e;e++){var f=d[e];a.x=0g&&0>f)return!1}return!0}}(),containsPoint:function(a){for(var b=this.planes,c=0;6>c;c++)if(0>b[c].distanceToPoint(a))return!1;return!0}};THREE.Plane=function(a,b){this.normal=void 0!==a?a:new THREE.Vector3(1,0,0);this.constant=void 0!==b?b:0};THREE.Plane.prototype={constructor:THREE.Plane,set:function(a,b){this.normal.copy(a);this.constant=b;return this},setComponents:function(a,b,c,d){this.normal.set(a,b,c);this.constant=d;return this},setFromNormalAndCoplanarPoint:function(a,b){this.normal.copy(a);this.constant=-b.dot(this.normal);return this},setFromCoplanarPoints:function(){var a=new THREE.Vector3,b=new THREE.Vector3;return function(c,d,e){d=a.subVectors(e,d).cross(b.subVectors(c,d)).normalize();this.setFromNormalAndCoplanarPoint(d,c);return this}}(),clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.normal.copy(a.normal);this.constant=a.constant;return this},normalize:function(){var a=1/this.normal.length();this.normal.multiplyScalar(a);this.constant*=a;return this},negate:function(){this.constant*=-1;this.normal.negate();return this},distanceToPoint:function(a){return this.normal.dot(a)+this.constant},distanceToSphere:function(a){return this.distanceToPoint(a.center)-a.radius},projectPoint:function(a,b){return this.orthoPoint(a,b).sub(a).negate()},orthoPoint:function(a,b){var c=this.distanceToPoint(a);return(b||new THREE.Vector3).copy(this.normal).multiplyScalar(c)},intersectLine:function(){var a=new THREE.Vector3;return function(b,c){var d=c||new THREE.Vector3,e=b.delta(a),f=this.normal.dot(e);if(0===f){if(0===this.distanceToPoint(b.start))return d.copy(b.start)}else return f=-(b.start.dot(this.normal)+this.constant)/f,0>f||1b&&0a&&0e;e++)8===e||13===e||18===e||23===e?b[e]="-":14===e?b[e]="4":(2>=c&&(c=33554432+16777216*Math.random()|0),d=c&15,c>>=4,b[e]=a[19===e?d&3|8:d]);return b.join("")}}(),clamp:function(a,b,c){return Math.max(b,Math.min(c,a))},euclideanModulo:function(a,b){return(a%b+b)%b},mapLinear:function(a,b,c,d,e){return d+(a-b)*(e-d)/(c-b)},smoothstep:function(a,b,c){if(a<=b)return 0;if(a>=c)return 1;a=(a-b)/(c-b);return a*a*(3-2*a)},smootherstep:function(a,b,c){if(a<=b)return 0;if(a>=c)return 1;a=(a-b)/(c-b);return a*a*a*(a*(6*a-15)+10)},random16:function(){console.warn("THREE.Math.random16() has been deprecated. Use Math.random() instead.");return Math.random()},randInt:function(a,b){return a+Math.floor(Math.random()*(b-a+1))},randFloat:function(a,b){return a+Math.random()*(b-a)},randFloatSpread:function(a){return a*(.5-Math.random())},degToRad:function(){var a=Math.PI/180;return function(b){return b*a}}(),radToDeg:function(){var a=180/Math.PI;return function(b){return b*a}}(),isPowerOfTwo:function(a){return 0===(a&a-1)&&0!==a},nearestPowerOfTwo:function(a){return Math.pow(2,Math.round(Math.log(a)/Math.LN2))},nextPowerOfTwo:function(a){a--;a|=a>>1;a|=a>>2;a|=a>>4;a|=a>>8;a|=a>>16;a++;return a}};THREE.Spline=function(a){function b(a,b,c,d,e,f,g){a=.5*(c-a);d=.5*(d-b);return(2*(b-c)+a+d)*g+(-3*(b-c)-2*a-d)*f+a*e+b}this.points=a;var c=[],d={x:0,y:0,z:0},e,f,g,h,k,l,p,n,m;this.initFromArray=function(a){this.points=[];for(var b=0;bthis.points.length-2?this.points.length-1:f+1;c[3]=f>this.points.length-3?this.points.length-1:f+2;l=this.points[c[0]];p=this.points[c[1]];n=this.points[c[2]];m=this.points[c[3]];h=g*g;k=g*h;d.x=b(l.x,p.x,n.x,m.x,g,h,k);d.y=b(l.y,p.y,n.y,m.y,g,h,k);d.z=b(l.z,p.z,n.z,m.z,g,h,k);return d};this.getControlPointsArray=function(){var a,b,c=this.points.length,d=[];for(a=0;a=b.x+b.y}}();THREE.Triangle.prototype={constructor:THREE.Triangle,set:function(a,b,c){this.a.copy(a);this.b.copy(b);this.c.copy(c);return this},setFromPointsAndIndices:function(a,b,c,d){this.a.copy(a[b]);this.b.copy(a[c]);this.c.copy(a[d]);return this},clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.a.copy(a.a);this.b.copy(a.b);this.c.copy(a.c);return this},area:function(){var a=new THREE.Vector3,b=new THREE.Vector3;return function(){a.subVectors(this.c,this.b);b.subVectors(this.a,this.b);return.5*a.cross(b).length()}}(),midpoint:function(a){return(a||new THREE.Vector3).addVectors(this.a,this.b).add(this.c).multiplyScalar(1/3)},normal:function(a){return THREE.Triangle.normal(this.a,this.b,this.c,a)},plane:function(a){return(a||new THREE.Plane).setFromCoplanarPoints(this.a,this.b,this.c)},barycoordFromPoint:function(a,b){return THREE.Triangle.barycoordFromPoint(a,this.a,this.b,this.c,b)},containsPoint:function(a){return THREE.Triangle.containsPoint(a,this.a,this.b,this.c)},equals:function(a){return a.a.equals(this.a)&&a.b.equals(this.b)&&a.c.equals(this.c)}};THREE.Interpolant=function(a,b,c,d){this.parameterPositions=a;this._cachedIndex=0;this.resultBuffer=void 0!==d?d:new b.constructor(c);this.sampleValues=b;this.valueSize=c};THREE.Interpolant.prototype={constructor:THREE.Interpolant,evaluate:function(a){var b=this.parameterPositions,c=this._cachedIndex,d=b[c],e=b[c-1];a:{b:{c:{d:if(!(a=e)break a;else{f=b[1];a=e)break b}d=c;c=0}}for(;c>>1,ad;d++)if(e[d]===e[(d+1)%3]){a.push(f);break}for(f=a.length-1;0<=f;f--)for(e=a[f],this.faces.splice(e,1),c=0,g=this.faceVertexUvs.length;cthis.duration&&this.resetDuration();this.trim();this.optimize()};THREE.AnimationClip.prototype={constructor:THREE.AnimationClip,resetDuration:function(){for(var a=0,b=0,c=this.tracks.length;b!==c;++b)var d=this.tracks[b],a=Math.max(a,d.times[d.times.length-1]);this.duration=a},trim:function(){for(var a=0;ab||0===c)return;this._startTime=null;b*=c}b*=this._updateTimeScale(a);c=this._updateTime(b);a=this._updateWeight(a);if(0c.parameterPositions[1]&&(this.stopFading(),0===d&&(this.enabled=!1))}}return this._effectiveWeight=b},_updateTimeScale:function(a){var b=0;if(!this.paused){var b=this.timeScale,c=this._timeScaleInterpolant;if(null!==c){var d=c.evaluate(a)[0],b=b*d;a>c.parameterPositions[1]&&(this.stopWarping(),0===b?this.pause=!0:this.timeScale=b)}}return this._effectiveTimeScale=b},_updateTime:function(a){var b=this.time+a;if(0===a)return b;var c=this._clip.duration,d=this.loop,e=this._loopCount,f=!1;switch(d){case THREE.LoopOnce:-1===e&&(this.loopCount=0,this._setEndings(!0,!0,!1));if(b>=c)b=c;else if(0>b)b=0;else break;this.clampWhenFinished?this.pause=!0:this.enabled=!1;this._mixer.dispatchEvent({type:"finished",action:this,direction:0>a?-1:1});break;case THREE.LoopPingPong:f=!0;case THREE.LoopRepeat:-1===e&&(0=c||0>b){var g=Math.floor(b/c),b=b-c*g,e=e+Math.abs(g),h=this.repetitions-e;if(0>h){this.clampWhenFinished?this.paused=!0:this.enabled=!1;b=0a,this._setEndings(a,!a,f)):this._setEndings(!1,!1,f);this._loopCount=e;this._mixer.dispatchEvent({type:"loop",action:this,loopDelta:g})}if(d===THREE.LoopPingPong&&1===(e&1))return this.time=b,c-b}return this.time=b},_setEndings:function(a,b,c){var d=this._interpolantSettings;c?(d.endingStart=THREE.ZeroSlopeEnding,d.endingEnd=THREE.ZeroSlopeEnding):(d.endingStart=a?this.zeroSlopeAtStart?THREE.ZeroSlopeEnding:THREE.ZeroCurvatureEnding:THREE.WrapAroundEnding,d.endingEnd=b?this.zeroSlopeAtEnd?THREE.ZeroSlopeEnding:THREE.ZeroCurvatureEnding:THREE.WrapAroundEnding)},_scheduleFading:function(a,b,c){var d=this._mixer,e=d.time,f=this._weightInterpolant;null===f&&(this._weightInterpolant=f=d._lendControlInterpolant());d=f.parameterPositions;f=f.sampleValues;d[0]=e;f[0]=b;d[1]=e+a;f[1]=c;return this}};Object.assign(THREE.AnimationMixer.prototype,{_bindAction:function(a,b){var c=a._localRoot||this._root,d=a._clip.tracks,e=d.length,f=a._propertyBindings,g=a._interpolants,h=c.uuid,k=this._bindingsByRootAndName,l=k[h];void 0===l&&(l={},k[h]=l);for(k=0;k!==e;++k){var p=d[k],n=p.name,m=l[n];if(void 0===m){m=f[k];if(void 0!==m){null===m._cacheIndex&&(++m.referenceCount,this._addInactiveBinding(m,h,n));continue}m=new THREE.PropertyMixer(THREE.PropertyBinding.create(c,n,b&&b._propertyBindings[k].binding.parsedPath),p.ValueTypeName,p.getValueSize());++m.referenceCount;this._addInactiveBinding(m,h,n)}f[k]=m;g[k].resultBuffer=m.buffer}},_activateAction:function(a){if(!this._isActiveAction(a)){if(null===a._cacheIndex){var b=(a._localRoot||this._root).uuid,c=a._clip.name,d=this._actionsByClip[c];this._bindAction(a,d&&d.knownActions[0]);this._addInactiveAction(a,c,b)}b=a._propertyBindings;c=0;for(d=b.length;c!==d;++c){var e=b[c];0===e.useCount++&&(this._lendBinding(e),e.saveOriginalState())}this._lendAction(a)}},_deactivateAction:function(a){if(this._isActiveAction(a)){for(var b=a._propertyBindings,c=0,d=b.length;c!==d;++c){var e=b[c];0===--e.useCount&&(e.restoreOriginalState(),this._takeBackBinding(e))}this._takeBackAction(a)}},_initMemoryManager:function(){this._actions=[];this._nActiveActions=0;this._actionsByClip={};this._bindings=[];this._nActiveBindings=0;this._bindingsByRootAndName={};this._controlInterpolants=[];this._nActiveControlInterpolants=0;var a=this;this.stats={actions:{get total(){return a._actions.length},get inUse(){return a._nActiveActions}},bindings:{get total(){return a._bindings.length},get inUse(){return a._nActiveBindings}},controlInterpolants:{get total(){return a._controlInterpolants.length},get inUse(){return a._nActiveControlInterpolants}}}},_isActiveAction:function(a){a=a._cacheIndex;return null!==a&&a=c){var n=c++,m=b[n];d[m.uuid]=p;b[p]=m;d[l]=n;b[n]=k;k=0;for(l=f;k!==l;++k){var m=e[k],q=m[p];m[p]=m[n];m[n]=q}}}this.nCachedObjects_=c},uncache:function(a){for(var b=this._objects,c=b.length,d=this.nCachedObjects_,e=this._indicesByUUID,f=this._bindings,g=f.length,h=0,k=arguments.length;h!==k;++h){var l=arguments[h].uuid,p=e[l];if(void 0!==p)if(delete e[l],pb;)--f;++f;if(0!==e||f!==d)e>=f&&(f=Math.max(f,1),e=f-1),d=this.getValueSize(),this.times=THREE.AnimationUtils.arraySlice(c,e,f),this.values=THREE.AnimationUtils.arraySlice(this.values,e*d,f*d);return this},validate:function(){var a=!0,b=this.getValueSize();0!==b-Math.floor(b)&&(console.error("invalid value size in track",this),a=!1);var c=this.times,b=this.values,d=c.length;0===d&&(console.error("track is empty",this),a=!1);for(var e=null,f=0;f!==d;f++){var g=c[f];if("number"===typeof g&&isNaN(g)){console.error("time is not a valid number",this,f,g);a=!1;break}if(null!==e&&e>g){console.error("out of order keys",this,f,g,e);a=!1;break}e=g}if(void 0!==b&&THREE.AnimationUtils.isTypedArray(b))for(f=0,c=b.length;f!==c;++f)if(d=b[f],isNaN(d)){console.error("value is not a valid number",this,f,d);a=!1;break}return a},optimize:function(){for(var a=this.times,b=this.values,c=this.getValueSize(),d=1,e=1,f=a.length-1;e<=f;++e){var g=!1,h=a[e];if(h!==a[e+1]&&(1!==e||h!==h[0]))for(var k=e*c,l=k-c,p=k+c,h=0;h!==c;++h){var n=b[k+h];if(n!==b[l+h]||n!==b[p+h]){g=!0;break}}if(g){if(e!==d)for(a[d]=a[e],g=e*c,k=d*c,h=0;h!==c;++h)b[k+h]=b[g+h];++d}}d!==a.length&&(this.times=THREE.AnimationUtils.arraySlice(a,0,d),this.values=THREE.AnimationUtils.arraySlice(b,0,d*c));return this}};Object.assign(THREE.KeyframeTrack,{parse:function(a){if(void 0===a.type)throw Error("track type undefined, can not parse");var b=THREE.KeyframeTrack._getTrackTypeForValueTypeName(a.type);if(void 0===a.times){console.warn("legacy JSON format detected, converting");var c=[],d=[];THREE.AnimationUtils.flattenJSON(a.keys,c,d,"value");a.times=c;a.values=d}return void 0!==b.parse?b.parse(a):new b(a.name,a.times,a.values,a.interpolation)},toJSON:function(a){var b=a.constructor;if(void 0!==b.toJSON)b=b.toJSON(a);else{var b={name:a.name,times:THREE.AnimationUtils.convertArray(a.times,Array),values:THREE.AnimationUtils.convertArray(a.values,Array)},c=a.getInterpolation();c!==a.DefaultInterpolation&&(b.interpolation=c)}b.type=a.ValueTypeName;return b},_getTrackTypeForValueTypeName:function(a){switch(a.toLowerCase()){case"scalar":case"double":case"float":case"number":case"integer":return THREE.NumberKeyframeTrack;case"vector":case"vector2":case"vector3":case"vector4":return THREE.VectorKeyframeTrack;case"color":return THREE.ColorKeyframeTrack;case"quaternion":return THREE.QuaternionKeyframeTrack;case"bool":case"boolean":return THREE.BooleanKeyframeTrack;case"string":return THREE.StringKeyframeTrack}throw Error("Unsupported typeName: "+a)}});THREE.PropertyBinding=function(a,b,c){this.path=b;this.parsedPath=c||THREE.PropertyBinding.parseTrackName(b);this.node=THREE.PropertyBinding.findNode(a,this.parsedPath.nodeName)||a;this.rootNode=a};THREE.PropertyBinding.prototype={constructor:THREE.PropertyBinding,getValue:function(a,b){this.bind();this.getValue(a,b)},setValue:function(a,b){this.bind();this.setValue(a,b)},bind:function(){var a=this.node,b=this.parsedPath,c=b.objectName,d=b.propertyName,e=b.propertyIndex;a||(this.node=a=THREE.PropertyBinding.findNode(this.rootNode,b.nodeName)||this.rootNode);this.getValue=this._getValue_unavailable;this.setValue=this._setValue_unavailable;if(a){if(c){var f=b.objectIndex;switch(c){case"materials":if(!a.material){console.error(" can not bind to material as node does not have a material",this);return}if(!a.material.materials){console.error(" can not bind to material.materials as node.material does not have a materials array",this);return}a=a.material.materials;break;case"bones":if(!a.skeleton){console.error(" can not bind to bones as node does not have a skeleton",this);return}a=a.skeleton.bones;for(c=0;cd&&this._mixBufferRegion(c,a,3*b,1-d,b);for(var d=b,f=b+b;d!==f;++d)if(c[d]!==c[d+b]){e.setValue(c,a);break}},saveOriginalState:function(){var a=this.buffer,b=this.valueSize,c=3*b;this.binding.getValue(a,c);for(var d=b;d!==c;++d)a[d]=a[c+d%b];this.cumulativeWeight=0},restoreOriginalState:function(){this.binding.setValue(this.buffer,3*this.valueSize)},_select:function(a,b,c,d,e){if(.5<=d)for(d=0;d!==e;++d)a[b+d]=a[c+d]},_slerp:function(a,b,c,d,e){THREE.Quaternion.slerpFlat(a,b,a,b,a,c,d)},_lerp:function(a,b,c,d,e){for(var f=1-d,g=0;g!==e;++g){var h=b+g;a[h]=a[h]*f+a[c+g]*d}}};THREE.BooleanKeyframeTrack=function(a,b,c){THREE.KeyframeTrack.call(this,a,b,c)};THREE.BooleanKeyframeTrack.prototype=Object.assign(Object.create(THREE.KeyframeTrack.prototype),{constructor:THREE.BooleanKeyframeTrack,ValueTypeName:"bool",ValueBufferType:Array,DefaultInterpolation:THREE.IntepolateDiscrete,InterpolantFactoryMethodLinear:void 0,InterpolantFactoryMethodSmooth:void 0});THREE.NumberKeyframeTrack=function(a,b,c,d){THREE.KeyframeTrack.call(this,a,b,c,d)};THREE.NumberKeyframeTrack.prototype=Object.assign(Object.create(THREE.KeyframeTrack.prototype),{constructor:THREE.NumberKeyframeTrack,ValueTypeName:"number"});THREE.QuaternionKeyframeTrack=function(a,b,c,d){THREE.KeyframeTrack.call(this,a,b,c,d)};THREE.QuaternionKeyframeTrack.prototype=Object.assign(Object.create(THREE.KeyframeTrack.prototype),{constructor:THREE.QuaternionKeyframeTrack,ValueTypeName:"quaternion",DefaultInterpolation:THREE.InterpolateLinear,InterpolantFactoryMethodLinear:function(a){return new THREE.QuaternionLinearInterpolant(this.times,this.values,this.getValueSize(),a)},InterpolantFactoryMethodSmooth:void 0});THREE.StringKeyframeTrack=function(a,b,c,d){THREE.KeyframeTrack.call(this,a,b,c,d)};THREE.StringKeyframeTrack.prototype=Object.assign(Object.create(THREE.KeyframeTrack.prototype),{constructor:THREE.StringKeyframeTrack,ValueTypeName:"string",ValueBufferType:Array,DefaultInterpolation:THREE.IntepolateDiscrete,InterpolantFactoryMethodLinear:void 0,InterpolantFactoryMethodSmooth:void 0});THREE.VectorKeyframeTrack=function(a,b,c,d){THREE.KeyframeTrack.call(this,a,b,c,d)};THREE.VectorKeyframeTrack.prototype=Object.assign(Object.create(THREE.KeyframeTrack.prototype),{constructor:THREE.VectorKeyframeTrack,ValueTypeName:"vector"});THREE.Audio=function(a){THREE.Object3D.call(this);this.type="Audio";this.context=a.context;this.source=this.context.createBufferSource();this.source.onended=this.onEnded.bind(this);this.gain=this.context.createGain();this.gain.connect(a.getInput());this.autoplay=!1;this.startTime=0;this.playbackRate=1;this.isPlaying=!1;this.hasPlaybackControl=!0;this.sourceType="empty";this.filter=null};THREE.Audio.prototype=Object.create(THREE.Object3D.prototype);THREE.Audio.prototype.constructor=THREE.Audio;THREE.Audio.prototype.getOutput=function(){return this.gain};THREE.Audio.prototype.load=function(a){var b=new THREE.AudioBuffer(this.context);b.load(a);this.setBuffer(b);return this};THREE.Audio.prototype.setNodeSource=function(a){this.hasPlaybackControl=!1;this.sourceType="audioNode";this.source=a;this.connect();return this};THREE.Audio.prototype.setBuffer=function(a){var b=this;a.onReady(function(a){b.source.buffer=a;b.sourceType="buffer";b.autoplay&&b.play()});return this};THREE.Audio.prototype.play=function(){if(!0===this.isPlaying)console.warn("THREE.Audio: Audio is already playing.");else if(!1===this.hasPlaybackControl)console.warn("THREE.Audio: this Audio has no playback control.");else{var a=this.context.createBufferSource();a.buffer=this.source.buffer;a.loop=this.source.loop;a.onended=this.source.onended;a.start(0,this.startTime);a.playbackRate.value=this.playbackRate;this.isPlaying=!0;this.source=a;this.connect()}};THREE.Audio.prototype.pause=function(){!1===this.hasPlaybackControl?console.warn("THREE.Audio: this Audio has no playback control."):(this.source.stop(),this.startTime=this.context.currentTime)};THREE.Audio.prototype.stop=function(){!1===this.hasPlaybackControl?console.warn("THREE.Audio: this Audio has no playback control."):(this.source.stop(),this.startTime=0)};THREE.Audio.prototype.connect=function(){null!==this.filter?(this.source.connect(this.filter),this.filter.connect(this.getOutput())):this.source.connect(this.getOutput())};THREE.Audio.prototype.disconnect=function(){null!==this.filter?(this.source.disconnect(this.filter),this.filter.disconnect(this.getOutput())):this.source.disconnect(this.getOutput())};THREE.Audio.prototype.getFilter=function(){return this.filter};THREE.Audio.prototype.setFilter=function(a){void 0===a&&(a=null);!0===this.isPlaying?(this.disconnect(),this.filter=a,this.connect()):this.filter=a};THREE.Audio.prototype.setPlaybackRate=function(a){!1===this.hasPlaybackControl?console.warn("THREE.Audio: this Audio has no playback control."):(this.playbackRate=a,!0===this.isPlaying&&(this.source.playbackRate.value=this.playbackRate))};THREE.Audio.prototype.getPlaybackRate=function(){return this.playbackRate};THREE.Audio.prototype.onEnded=function(){this.isPlaying=!1};THREE.Audio.prototype.setLoop=function(a){!1===this.hasPlaybackControl?console.warn("THREE.Audio: this Audio has no playback control."):this.source.loop=a};THREE.Audio.prototype.getLoop=function(){return!1===this.hasPlaybackControl?(console.warn("THREE.Audio: this Audio has no playback control."),!1):this.source.loop};THREE.Audio.prototype.setVolume=function(a){this.gain.gain.value=a};THREE.Audio.prototype.getVolume=function(){return this.gain.gain.value};THREE.AudioAnalyser=function(a,b){this.analyser=a.context.createAnalyser();this.analyser.fftSize=void 0!==b?b:2048;this.data=new Uint8Array(this.analyser.frequencyBinCount);a.getOutput().connect(this.analyser)};THREE.AudioAnalyser.prototype={constructor:THREE.AudioAnalyser,getData:function(){this.analyser.getByteFrequencyData(this.data);return this.data}};THREE.AudioBuffer=function(a){this.context=a;this.ready=!1;this.readyCallbacks=[]};THREE.AudioBuffer.prototype.load=function(a){var b=this,c=new XMLHttpRequest;c.open("GET",a,!0);c.responseType="arraybuffer";c.onload=function(a){b.context.decodeAudioData(this.response,function(a){b.buffer=a;b.ready=!0;for(a=0;a-1?e(a,b,c):b.indexOf("%")>-1?f(a,b,c):b.indexOf(":")>-1?g(a,b):i(a._value,b,c)}function d(a,b){var c,d,e,f,g,i=b,j=["KB","MB","GB","TB","PB","EB","ZB","YB"],k=!1;if(b.indexOf(":")>-1)a._value=h(b);else if(b===q)a._value=0;else{for("."!==o[p].delimiters.decimal&&(b=b.replace(/\./g,"").replace(o[p].delimiters.decimal,".")),c=new RegExp("[^a-zA-Z]"+o[p].abbreviations.thousand+"(?:\\)|(\\"+o[p].currency.symbol+")?(?:\\))?)?$"),d=new RegExp("[^a-zA-Z]"+o[p].abbreviations.million+"(?:\\)|(\\"+o[p].currency.symbol+")?(?:\\))?)?$"),e=new RegExp("[^a-zA-Z]"+o[p].abbreviations.billion+"(?:\\)|(\\"+o[p].currency.symbol+")?(?:\\))?)?$"),f=new RegExp("[^a-zA-Z]"+o[p].abbreviations.trillion+"(?:\\)|(\\"+o[p].currency.symbol+")?(?:\\))?)?$"),g=0;g<=j.length&&!(k=b.indexOf(j[g])>-1?Math.pow(1024,g+1):!1);g++);a._value=(k?k:1)*(i.match(c)?Math.pow(10,3):1)*(i.match(d)?Math.pow(10,6):1)*(i.match(e)?Math.pow(10,9):1)*(i.match(f)?Math.pow(10,12):1)*(b.indexOf("%")>-1?.01:1)*((b.split("-").length+Math.min(b.split("(").length-1,b.split(")").length-1))%2?1:-1)*Number(b.replace(/[^0-9\.]+/g,"")),a._value=k?Math.ceil(a._value):a._value}return a._value}function e(a,b,c){var d,e,f=b.indexOf("$"),g=b.indexOf("("),h=b.indexOf("-"),j="";return b.indexOf(" $")>-1?(j=" ",b=b.replace(" $","")):b.indexOf("$ ")>-1?(j=" ",b=b.replace("$ ","")):b=b.replace("$",""),e=i(a._value,b,c),1>=f?e.indexOf("(")>-1||e.indexOf("-")>-1?(e=e.split(""),d=1,(g>f||h>f)&&(d=0),e.splice(d,0,o[p].currency.symbol+j),e=e.join("")):e=o[p].currency.symbol+j+e:e.indexOf(")")>-1?(e=e.split(""),e.splice(-1,0,j+o[p].currency.symbol),e=e.join("")):e=e+j+o[p].currency.symbol,e}function f(a,b,c){var d,e="",f=100*a._value;return b.indexOf(" %")>-1?(e=" ",b=b.replace(" %","")):b=b.replace("%",""),d=i(f,b,c),d.indexOf(")")>-1?(d=d.split(""),d.splice(-1,0,e+"%"),d=d.join("")):d=d+e+"%",d}function g(a){var b=Math.floor(a._value/60/60),c=Math.floor((a._value-60*b*60)/60),d=Math.round(a._value-60*b*60-60*c);return b+":"+(10>c?"0"+c:c)+":"+(10>d?"0"+d:d)}function h(a){var b=a.split(":"),c=0;return 3===b.length?(c+=60*Number(b[0])*60,c+=60*Number(b[1]),c+=Number(b[2])):2===b.length&&(c+=60*Number(b[0]),c+=Number(b[1])),Number(c)}function i(a,c,d){var e,f,g,h,i,j,k=!1,l=!1,m=!1,n="",r=!1,s=!1,t=!1,u=!1,v=!1,w="",x="",y=Math.abs(a),z=["B","KB","MB","GB","TB","PB","EB","ZB","YB"],A="",B=!1;if(0===a&&null!==q)return q;if(c.indexOf("(")>-1?(k=!0,c=c.slice(1,-1)):c.indexOf("+")>-1&&(l=!0,c=c.replace(/\+/g,"")),c.indexOf("a")>-1&&(r=c.indexOf("aK")>=0,s=c.indexOf("aM")>=0,t=c.indexOf("aB")>=0,u=c.indexOf("aT")>=0,v=r||s||t||u,c.indexOf(" a")>-1?(n=" ",c=c.replace(" a","")):c=c.replace("a",""),y>=Math.pow(10,12)&&!v||u?(n+=o[p].abbreviations.trillion,a/=Math.pow(10,12)):y=Math.pow(10,9)&&!v||t?(n+=o[p].abbreviations.billion,a/=Math.pow(10,9)):y=Math.pow(10,6)&&!v||s?(n+=o[p].abbreviations.million,a/=Math.pow(10,6)):(y=Math.pow(10,3)&&!v||r)&&(n+=o[p].abbreviations.thousand,a/=Math.pow(10,3))),c.indexOf("b")>-1)for(c.indexOf(" b")>-1?(w=" ",c=c.replace(" b","")):c=c.replace("b",""),g=0;g<=z.length;g++)if(e=Math.pow(1024,g),f=Math.pow(1024,g+1),a>=e&&f>a){w+=z[g],e>0&&(a/=e);break}return c.indexOf("o")>-1&&(c.indexOf(" o")>-1?(x=" ",c=c.replace(" o","")):c=c.replace("o",""),x+=o[p].ordinal(a)),c.indexOf("[.]")>-1&&(m=!0,c=c.replace("[.]",".")),h=a.toString().split(".")[0],i=c.split(".")[1],j=c.indexOf(","),i?(i.indexOf("[")>-1?(i=i.replace("]",""),i=i.split("["),A=b(a,i[0].length+i[1].length,d,i[1].length)):A=b(a,i.length,d),h=A.split(".")[0],A=A.split(".")[1].length?o[p].delimiters.decimal+A.split(".")[1]:"",m&&0===Number(A.slice(1))&&(A="")):h=b(a,null,d),h.indexOf("-")>-1&&(h=h.slice(1),B=!0),j>-1&&(h=h.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g,"$1"+o[p].delimiters.thousands)),0===c.indexOf(".")&&(h=""),(k&&B?"(":"")+(!k&&B?"-":"")+(!B&&l?"+":"")+h+A+(x?x:"")+(n?n:"")+(w?w:"")+(k&&B?")":"")}function j(a,b){o[a]=b}function k(a){var b=a.toString().split(".");return b.length<2?1:Math.pow(10,b[1].length)}function l(){var a=Array.prototype.slice.call(arguments);return a.reduce(function(a,b){var c=k(a),d=k(b);return c>d?c:d},-1/0)}var m,n="1.5.3",o={},p="en",q=null,r="0,0",s="undefined"!=typeof module&&module.exports;m=function(b){return m.isNumeral(b)?b=b.value():0===b||"undefined"==typeof b?b=0:Number(b)||(b=m.fn.unformat(b)),new a(Number(b))},m.version=n,m.isNumeral=function(b){return b instanceof a},m.language=function(a,b){if(!a)return p;if(a&&!b){if(!o[a])throw new Error("Unknown language : "+a);p=a}return(b||!o[a])&&j(a,b),m},m.languageData=function(a){if(!a)return o[p];if(!o[a])throw new Error("Unknown language : "+a);return o[a]},m.language("en",{delimiters:{thousands:",",decimal:"."},abbreviations:{thousand:"k",million:"m",billion:"b",trillion:"t"},ordinal:function(a){var b=a%10;return 1===~~(a%100/10)?"th":1===b?"st":2===b?"nd":3===b?"rd":"th"},currency:{symbol:"$"}}),m.zeroFormat=function(a){q="string"==typeof a?a:null},m.defaultFormat=function(a){r="string"==typeof a?a:"0.0"},"function"!=typeof Array.prototype.reduce&&(Array.prototype.reduce=function(a,b){"use strict";if(null===this||"undefined"==typeof this)throw new TypeError("Array.prototype.reduce called on null or undefined");if("function"!=typeof a)throw new TypeError(a+" is not a function");var c,d,e=this.length>>>0,f=!1;for(1c;++c)this.hasOwnProperty(c)&&(f?d=a(d,this[c],c,this):(d=this[c],f=!0));if(!f)throw new TypeError("Reduce of empty array with no initial value");return d}),m.fn=a.prototype={clone:function(){return m(this)},format:function(a,b){return c(this,a?a:r,void 0!==b?b:Math.round)},unformat:function(a){return"[object Number]"===Object.prototype.toString.call(a)?a:d(this,a?a:r)},value:function(){return this._value},valueOf:function(){return this._value},set:function(a){return this._value=Number(a),this},add:function(a){function b(a,b){return a+c*b}var c=l.call(null,this._value,a);return this._value=[this._value,a].reduce(b,0)/c,this},subtract:function(a){function b(a,b){return a-c*b}var c=l.call(null,this._value,a);return this._value=[a].reduce(b,this._value*c)/c,this},multiply:function(a){function b(a,b){var c=l(a,b);return a*c*b*c/(c*c)}return this._value=[this._value,a].reduce(b,1),this},divide:function(a){function b(a,b){var c=l(a,b);return a*c/(b*c)}return this._value=[this._value,a].reduce(b),this},difference:function(a){return Math.abs(m(this._value).subtract(a).value())}},s&&(module.exports=m),"undefined"==typeof ender&&(this.numeral=m),"function"==typeof define&&define.amd&&define([],function(){return m})}).call(this); +// Extracted Richard Bunt's work in Telemachus: https://github.com/richardbunt/Telemachus/blob/master/WebPages/WebPages/src/console.js -break;case"mapAORepeat":case"mapAOOffset":case"mapAOWrap":case"mapAOAnisotropy":break;case"mapBump":k.bumpMap=g(p,d.mapBumpRepeat,d.mapBumpOffset,d.mapBumpWrap,d.mapBumpAnisotropy);break;case"mapBumpScale":k.bumpScale=p;break;case"mapBumpRepeat":case"mapBumpOffset":case"mapBumpWrap":case"mapBumpAnisotropy":break;case"mapNormal":k.normalMap=g(p,d.mapNormalRepeat,d.mapNormalOffset,d.mapNormalWrap,d.mapNormalAnisotropy);break;case"mapNormalFactor":k.normalScale=[p,p];break;case"mapNormalRepeat":case"mapNormalOffset":case"mapNormalWrap":case"mapNormalAnisotropy":break;case"mapSpecular":k.specularMap=g(p,d.mapSpecularRepeat,d.mapSpecularOffset,d.mapSpecularWrap,d.mapSpecularAnisotropy);break;case"mapSpecularRepeat":case"mapSpecularOffset":case"mapSpecularWrap":case"mapSpecularAnisotropy":break;case"mapAlpha":k.alphaMap=g(p,d.mapAlphaRepeat,d.mapAlphaOffset,d.mapAlphaWrap,d.mapAlphaAnisotropy);break;case"mapAlphaRepeat":case"mapAlphaOffset":case"mapAlphaWrap":case"mapAlphaAnisotropy":break;case"flipSided":k.side=THREE.BackSide;break;case"doubleSided":k.side=THREE.DoubleSide;break;case"transparency":console.warn("THREE.Loader.createMaterial: transparency has been renamed to opacity");k.opacity=p;break;case"depthTest":case"depthWrite":case"colorWrite":case"opacity":case"reflectivity":case"transparent":case"visible":case"wireframe":k[l]=p;break;case"vertexColors":!0===p&&(k.vertexColors=THREE.VertexColors);"face"===p&&(k.vertexColors=THREE.FaceColors);break;default:console.error("THREE.Loader.createMaterial: Unsupported",l,p)}}"MeshBasicMaterial"===k.type&&delete k.emissive;"MeshPhongMaterial"!==k.type&&delete k.specular;1>k.opacity&&(k.transparent=!0);c.setTextures(h);return c.parse(k)}}()};THREE.Loader.Handlers={handlers:[],add:function(a,b){this.handlers.push(a,b)},get:function(a){for(var b=this.handlers,c=0,d=b.length;cg;g++)m=w[k++],s=t[2*m],m=t[2*m+1],s=new THREE.Vector2(s,m),2!==g&&c.faceVertexUvs[d][h].push(s),0!==g&&c.faceVertexUvs[d][h+1].push(s);n&&(n=3*w[k++],q.normal.set(E[n++],E[n++],E[n]),v.normal.copy(q.normal));if(u)for(d=0;4>d;d++)n=3*w[k++],u=new THREE.Vector3(E[n++],E[n++],E[n]),2!==d&&q.vertexNormals.push(u),0!==d&&v.vertexNormals.push(u);p&&(p=w[k++],p=x[p],q.color.setHex(p),v.color.setHex(p));if(b)for(d=0;4>d;d++)p=w[k++],p=x[p],2!==d&&q.vertexColors.push(new THREE.Color(p)),0!==d&&v.vertexColors.push(new THREE.Color(p));c.faces.push(q);c.faces.push(v)}else{q=new THREE.Face3;q.a=w[k++];q.b=w[k++];q.c=w[k++];h&&(h=w[k++],q.materialIndex=h);h=c.faces.length;if(d)for(d=0;dg;g++)m=w[k++],s=t[2*m],m=t[2*m+1],s=new THREE.Vector2(s,m),c.faceVertexUvs[d][h].push(s);n&&(n=3*w[k++],q.normal.set(E[n++],E[n++],E[n]));if(u)for(d=0;3>d;d++)n=3*w[k++],u=new THREE.Vector3(E[n++],E[n++],E[n]),q.vertexNormals.push(u);p&&(p=w[k++],q.color.setHex(x[p]));if(b)for(d=0;3>d;d++)p=w[k++],q.vertexColors.push(new THREE.Color(x[p]));c.faces.push(q)}})(d);(function(){var b=void 0!==a.influencesPerVertex?a.influencesPerVertex:2;if(a.skinWeights)for(var d=0,g=a.skinWeights.length;dthis.opacity&&(d.opacity=this.opacity);!0===this.transparent&&(d.transparent=this.transparent);0a.x||1a.x?0:1;break;case THREE.MirroredRepeatWrapping:1===Math.abs(Math.floor(a.x)%2)?a.x=Math.ceil(a.x)-a.x:a.x-=Math.floor(a.x)}if(0>a.y||1a.y?0:1;break;case THREE.MirroredRepeatWrapping:1===Math.abs(Math.floor(a.y)%2)?a.y=Math.ceil(a.y)-a.y:a.y-=Math.floor(a.y)}this.flipY&&(a.y=1-a.y)}}};THREE.EventDispatcher.prototype.apply(THREE.Texture.prototype);THREE.TextureIdCount=0;THREE.CanvasTexture=function(a,b,c,d,e,f,g,h,k){THREE.Texture.call(this,a,b,c,d,e,f,g,h,k);this.needsUpdate=!0};THREE.CanvasTexture.prototype=Object.create(THREE.Texture.prototype);THREE.CanvasTexture.prototype.constructor=THREE.CanvasTexture;THREE.CubeTexture=function(a,b,c,d,e,f,g,h,k){a=void 0!==a?a:[];b=void 0!==b?b:THREE.CubeReflectionMapping;THREE.Texture.call(this,a,b,c,d,e,f,g,h,k);this.flipY=!1};THREE.CubeTexture.prototype=Object.create(THREE.Texture.prototype);THREE.CubeTexture.prototype.constructor=THREE.CubeTexture;Object.defineProperty(THREE.CubeTexture.prototype,"images",{get:function(){return this.image},set:function(a){this.image=a}});THREE.CompressedTexture=function(a,b,c,d,e,f,g,h,k,l,p){THREE.Texture.call(this,null,f,g,h,k,l,d,e,p);this.image={width:b,height:c};this.mipmaps=a;this.generateMipmaps=this.flipY=!1};THREE.CompressedTexture.prototype=Object.create(THREE.Texture.prototype);THREE.CompressedTexture.prototype.constructor=THREE.CompressedTexture;THREE.DataTexture=function(a,b,c,d,e,f,g,h,k,l,p){THREE.Texture.call(this,null,f,g,h,k,l,d,e,p);this.image={data:a,width:b,height:c};this.magFilter=void 0!==k?k:THREE.NearestFilter;this.minFilter=void 0!==l?l:THREE.NearestFilter;this.generateMipmaps=this.flipY=!1};THREE.DataTexture.prototype=Object.create(THREE.Texture.prototype);THREE.DataTexture.prototype.constructor=THREE.DataTexture;THREE.VideoTexture=function(a,b,c,d,e,f,g,h,k){function l(){requestAnimationFrame(l);a.readyState===a.HAVE_ENOUGH_DATA&&(p.needsUpdate=!0)}THREE.Texture.call(this,a,b,c,d,e,f,g,h,k);this.generateMipmaps=!1;var p=this;l()};THREE.VideoTexture.prototype=Object.create(THREE.Texture.prototype);THREE.VideoTexture.prototype.constructor=THREE.VideoTexture;THREE.Group=function(){THREE.Object3D.call(this);this.type="Group"};THREE.Group.prototype=Object.create(THREE.Object3D.prototype);THREE.Group.prototype.constructor=THREE.Group;THREE.Points=function(a,b){THREE.Object3D.call(this);this.type="Points";this.geometry=void 0!==a?a:new THREE.Geometry;this.material=void 0!==b?b:new THREE.PointsMaterial({color:16777215*Math.random()})};THREE.Points.prototype=Object.create(THREE.Object3D.prototype);THREE.Points.prototype.constructor=THREE.Points;THREE.Points.prototype.raycast=function(){var a=new THREE.Matrix4,b=new THREE.Ray,c=new THREE.Sphere;return function(d,e){function f(a,c){var f=b.distanceSqToPoint(a);if(fd.far||e.push({distance:l,distanceToRay:Math.sqrt(f),point:h.clone(),index:c,face:null,object:g})}}var g=this,h=this.geometry,k=this.matrixWorld,l=d.params.Points.threshold;null===h.boundingSphere&&h.computeBoundingSphere();c.copy(h.boundingSphere);c.applyMatrix4(k);if(!1!==d.ray.intersectsSphere(c)){a.getInverse(k);b.copy(d.ray).applyMatrix4(a);var l=l/((this.scale.x+this.scale.y+this.scale.z)/3),p=l*l,l=new THREE.Vector3;if(h instanceof THREE.BufferGeometry){var n=h.index,h=h.attributes.position.array;if(null!==n)for(var m=n.array,n=0,q=m.length;nf||(p.applyMatrix4(this.matrixWorld),v=d.ray.origin.distanceTo(p),vd.far||e.push({distance:v,point:h.clone().applyMatrix4(this.matrixWorld),index:g,face:null,faceIndex:null,object:this}))}else for(g=0,u=q.length/3-1;gf||(p.applyMatrix4(this.matrixWorld),v=d.ray.origin.distanceTo(p),vd.far||e.push({distance:v,point:h.clone().applyMatrix4(this.matrixWorld),index:g,face:null,faceIndex:null,object:this}))}else if(g instanceof THREE.Geometry)for(k=g.vertices,l=k.length,g=0;gf||(p.applyMatrix4(this.matrixWorld),v=d.ray.origin.distanceTo(p),vd.far||e.push({distance:v,point:h.clone().applyMatrix4(this.matrixWorld),index:g,face:null,faceIndex:null,object:this}))}}}();THREE.Line.prototype.clone=function(){return new this.constructor(this.geometry,this.material).copy(this)};THREE.LineStrip=0;THREE.LinePieces=1;THREE.LineSegments=function(a,b){THREE.Line.call(this,a,b);this.type="LineSegments"};THREE.LineSegments.prototype=Object.create(THREE.Line.prototype);THREE.LineSegments.prototype.constructor=THREE.LineSegments;THREE.Mesh=function(a,b){THREE.Object3D.call(this);this.type="Mesh";this.geometry=void 0!==a?a:new THREE.Geometry;this.material=void 0!==b?b:new THREE.MeshBasicMaterial({color:16777215*Math.random()});this.drawMode=THREE.TrianglesDrawMode;this.updateMorphTargets()};THREE.Mesh.prototype=Object.create(THREE.Object3D.prototype);THREE.Mesh.prototype.constructor=THREE.Mesh;THREE.Mesh.prototype.setDrawMode=function(a){this.drawMode=a};THREE.Mesh.prototype.updateMorphTargets=function(){if(void 0!==this.geometry.morphTargets&&0b.far?null:{distance:c,point:s.clone(),object:a}}function c(c,d,e,f,l,p,n,s){g.fromArray(f,3*p);h.fromArray(f,3*n);k.fromArray(f,3*s);if(c=b(c,d,e,g,h,k,t))l&&(m.fromArray(l,2*p),q.fromArray(l,2*n),u.fromArray(l,2*s),c.uv=a(t,g,h,k,m,q,u)),c.face=new THREE.Face3(p,n,s,THREE.Triangle.normal(g,h,k)),c.faceIndex=p;return c}var d=new THREE.Matrix4,e=new THREE.Ray,f=new THREE.Sphere,g=new THREE.Vector3,h=new THREE.Vector3,k=new THREE.Vector3,l=new THREE.Vector3,p=new THREE.Vector3,n=new THREE.Vector3,m=new THREE.Vector2,q=new THREE.Vector2,u=new THREE.Vector2,v=new THREE.Vector3,t=new THREE.Vector3,s=new THREE.Vector3;return function(s,v){var x=this.geometry,D=this.material,z=this.matrixWorld;if(void 0!==D&&(null===x.boundingSphere&&x.computeBoundingSphere(),f.copy(x.boundingSphere),f.applyMatrix4(z),!1!==s.ray.intersectsSphere(f)&&(d.getInverse(z),e.copy(s.ray).applyMatrix4(d),null===x.boundingBox||!1!==e.intersectsBox(x.boundingBox)))){var y,B;if(x instanceof THREE.BufferGeometry){var G,F,D=x.index,z=x.attributes,x=z.position.array;void 0!==z.uv&&(y=z.uv.array);if(null!==D)for(var z=D.array,H=0,L=z.length;H=d[e].distance)d[e-1].object.visible=!1,d[e].object.visible=!0;else break;for(;ethis.scale.x*this.scale.y||c.push({distance:Math.sqrt(d),point:this.position,face:null,object:this})}}();THREE.Sprite.prototype.clone=function(){return new this.constructor(this.material).copy(this)};THREE.Particle=THREE.Sprite;THREE.LensFlare=function(a,b,c,d,e){THREE.Object3D.call(this);this.lensFlares=[];this.positionScreen=new THREE.Vector3;this.customUpdateCallback=void 0;void 0!==a&&this.add(a,b,c,d,e)};THREE.LensFlare.prototype=Object.create(THREE.Object3D.prototype);THREE.LensFlare.prototype.constructor=THREE.LensFlare;THREE.LensFlare.prototype.add=function(a,b,c,d,e,f){void 0===b&&(b=-1);void 0===c&&(c=0);void 0===f&&(f=1);void 0===e&&(e=new THREE.Color(16777215));void 0===d&&(d=THREE.NormalBlending);c=Math.min(c,Math.max(0,c));this.lensFlares.push({texture:a,size:b,distance:c,x:0,y:0,z:0,scale:1,rotation:0,opacity:f,color:e,blending:d})};THREE.LensFlare.prototype.updateLensFlares=function(){var a,b=this.lensFlares.length,c,d=2*-this.positionScreen.x,e=2*-this.positionScreen.y;for(a=0;a= 365 * 24 * 3600) { + result += (t / (365 * 24 * 3600) | 0) + ":"; + t %= 365 * 24 * 3600; + if (t < 24 * 3600) { + result += "0:"; + } + } + if (t >= 24 * 3600) { + result += (t / (24 * 3600) | 0) + ":"; + } + t %= 24 * 3600; + return result + this.hourMinSec(t) + " MET"; + }, -THREE.ShaderChunk.alphamap_pars_fragment="#ifdef USE_ALPHAMAP\n uniform sampler2D alphaMap;\n#endif\n";THREE.ShaderChunk.alphatest_fragment="#ifdef ALPHATEST\n if ( diffuseColor.a < ALPHATEST ) discard;\n#endif\n";THREE.ShaderChunk.aomap_fragment="#ifdef USE_AOMAP\n float ambientOcclusion = ( texture2D( aoMap, vUv2 ).r - 1.0 ) * aoMapIntensity + 1.0;\n reflectedLight.indirectDiffuse *= ambientOcclusion;\n #if defined( USE_ENVMAP ) && defined( STANDARD )\n float dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n reflectedLight.indirectSpecular *= computeSpecularOcclusion( dotNV, ambientOcclusion, material.specularRoughness );\n #endif\n#endif\n";THREE.ShaderChunk.aomap_pars_fragment="#ifdef USE_AOMAP\n uniform sampler2D aoMap;\n uniform float aoMapIntensity;\n#endif";THREE.ShaderChunk.begin_vertex="\nvec3 transformed = vec3( position );\n";THREE.ShaderChunk.beginnormal_vertex="\nvec3 objectNormal = vec3( normal );\n";THREE.ShaderChunk.bsdfs="bool testLightInRange( const in float lightDistance, const in float cutoffDistance ) {\n return any( bvec2( cutoffDistance == 0.0, lightDistance < cutoffDistance ) );\n}\nfloat punctualLightIntensityToIrradianceFactor( const in float lightDistance, const in float cutoffDistance, const in float decayExponent ) {\n if( decayExponent > 0.0 ) {\n#if defined ( PHYSICALLY_CORRECT_LIGHTS )\n float distanceFalloff = 1.0 / max( pow( lightDistance, decayExponent ), 0.01 );\n float maxDistanceCutoffFactor = pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) );\n return distanceFalloff * maxDistanceCutoffFactor;\n#else\n return pow( saturate( -lightDistance / cutoffDistance + 1.0 ), decayExponent );\n#endif\n }\n return 1.0;\n}\nvec3 BRDF_Diffuse_Lambert( const in vec3 diffuseColor ) {\n return RECIPROCAL_PI * diffuseColor;\n}\nvec3 F_Schlick( const in vec3 specularColor, const in float dotLH ) {\n float fresnel = exp2( ( -5.55473 * dotLH - 6.98316 ) * dotLH );\n return ( 1.0 - specularColor ) * fresnel + specularColor;\n}\nfloat G_GGX_Smith( const in float alpha, const in float dotNL, const in float dotNV ) {\n float a2 = pow2( alpha );\n float gl = dotNL + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\n float gv = dotNV + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\n return 1.0 / ( gl * gv );\n}\nfloat D_GGX( const in float alpha, const in float dotNH ) {\n float a2 = pow2( alpha );\n float denom = pow2( dotNH ) * ( a2 - 1.0 ) + 1.0;\n return RECIPROCAL_PI * a2 / pow2( denom );\n}\nvec3 BRDF_Specular_GGX( const in IncidentLight incidentLight, const in GeometricContext geometry, const in vec3 specularColor, const in float roughness ) {\n float alpha = pow2( roughness );\n vec3 halfDir = normalize( incidentLight.direction + geometry.viewDir );\n float dotNL = saturate( dot( geometry.normal, incidentLight.direction ) );\n float dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n float dotNH = saturate( dot( geometry.normal, halfDir ) );\n float dotLH = saturate( dot( incidentLight.direction, halfDir ) );\n vec3 F = F_Schlick( specularColor, dotLH );\n float G = G_GGX_Smith( alpha, dotNL, dotNV );\n float D = D_GGX( alpha, dotNH );\n return F * ( G * D );\n}\nvec3 BRDF_Specular_GGX_Environment( const in GeometricContext geometry, const in vec3 specularColor, const in float roughness ) {\n float dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n const vec4 c0 = vec4( - 1, - 0.0275, - 0.572, 0.022 );\n const vec4 c1 = vec4( 1, 0.0425, 1.04, - 0.04 );\n vec4 r = roughness * c0 + c1;\n float a004 = min( r.x * r.x, exp2( - 9.28 * dotNV ) ) * r.x + r.y;\n vec2 AB = vec2( -1.04, 1.04 ) * a004 + r.zw;\n return specularColor * AB.x + AB.y;\n}\nfloat G_BlinnPhong_Implicit( ) {\n return 0.25;\n}\nfloat D_BlinnPhong( const in float shininess, const in float dotNH ) {\n return RECIPROCAL_PI * ( shininess * 0.5 + 1.0 ) * pow( dotNH, shininess );\n}\nvec3 BRDF_Specular_BlinnPhong( const in IncidentLight incidentLight, const in GeometricContext geometry, const in vec3 specularColor, const in float shininess ) {\n vec3 halfDir = normalize( incidentLight.direction + geometry.viewDir );\n float dotNH = saturate( dot( geometry.normal, halfDir ) );\n float dotLH = saturate( dot( incidentLight.direction, halfDir ) );\n vec3 F = F_Schlick( specularColor, dotLH );\n float G = G_BlinnPhong_Implicit( );\n float D = D_BlinnPhong( shininess, dotNH );\n return F * ( G * D );\n}\nfloat GGXRoughnessToBlinnExponent( const in float ggxRoughness ) {\n return ( 2.0 / pow2( ggxRoughness + 0.0001 ) - 2.0 );\n}\nfloat BlinnExponentToGGXRoughness( const in float blinnExponent ) {\n return sqrt( 2.0 / ( blinnExponent + 2.0 ) );\n}\n";THREE.ShaderChunk.bumpmap_pars_fragment="#ifdef USE_BUMPMAP\n uniform sampler2D bumpMap;\n uniform float bumpScale;\n vec2 dHdxy_fwd() {\n vec2 dSTdx = dFdx( vUv );\n vec2 dSTdy = dFdy( vUv );\n float Hll = bumpScale * texture2D( bumpMap, vUv ).x;\n float dBx = bumpScale * texture2D( bumpMap, vUv + dSTdx ).x - Hll;\n float dBy = bumpScale * texture2D( bumpMap, vUv + dSTdy ).x - Hll;\n return vec2( dBx, dBy );\n }\n vec3 perturbNormalArb( vec3 surf_pos, vec3 surf_norm, vec2 dHdxy ) {\n vec3 vSigmaX = dFdx( surf_pos );\n vec3 vSigmaY = dFdy( surf_pos );\n vec3 vN = surf_norm;\n vec3 R1 = cross( vSigmaY, vN );\n vec3 R2 = cross( vN, vSigmaX );\n float fDet = dot( vSigmaX, R1 );\n vec3 vGrad = sign( fDet ) * ( dHdxy.x * R1 + dHdxy.y * R2 );\n return normalize( abs( fDet ) * surf_norm - vGrad );\n }\n#endif\n";THREE.ShaderChunk.color_fragment="#ifdef USE_COLOR\n diffuseColor.rgb *= vColor;\n#endif";THREE.ShaderChunk.color_pars_fragment="#ifdef USE_COLOR\n varying vec3 vColor;\n#endif\n";THREE.ShaderChunk.color_pars_vertex="#ifdef USE_COLOR\n varying vec3 vColor;\n#endif";THREE.ShaderChunk.color_vertex="#ifdef USE_COLOR\n vColor.xyz = color.xyz;\n#endif";THREE.ShaderChunk.common="#define PI 3.14159\n#define PI2 6.28318\n#define RECIPROCAL_PI 0.31830988618\n#define RECIPROCAL_PI2 0.15915494\n#define LOG2 1.442695\n#define EPSILON 1e-6\n#define saturate(a) clamp( a, 0.0, 1.0 )\n#define whiteCompliment(a) ( 1.0 - saturate( a ) )\nfloat pow2( const in float x ) { return x*x; }\nfloat pow3( const in float x ) { return x*x*x; }\nfloat pow4( const in float x ) { float x2 = x*x; return x2*x2; }\nfloat average( const in vec3 color ) { return dot( color, vec3( 0.3333 ) ); }\nstruct IncidentLight {\n vec3 color;\n vec3 direction;\n bool visible;\n};\nstruct ReflectedLight {\n vec3 directDiffuse;\n vec3 directSpecular;\n vec3 indirectDiffuse;\n vec3 indirectSpecular;\n};\nstruct GeometricContext {\n vec3 position;\n vec3 normal;\n vec3 viewDir;\n};\nvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n return normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n}\nvec3 inverseTransformDirection( in vec3 dir, in mat4 matrix ) {\n return normalize( ( vec4( dir, 0.0 ) * matrix ).xyz );\n}\nvec3 projectOnPlane(in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\n float distance = dot( planeNormal, point - pointOnPlane );\n return - distance * planeNormal + point;\n}\nfloat sideOfPlane( in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\n return sign( dot( point - pointOnPlane, planeNormal ) );\n}\nvec3 linePlaneIntersect( in vec3 pointOnLine, in vec3 lineDirection, in vec3 pointOnPlane, in vec3 planeNormal ) {\n return lineDirection * ( dot( planeNormal, pointOnPlane - pointOnLine ) / dot( planeNormal, lineDirection ) ) + pointOnLine;\n}\n";THREE.ShaderChunk.cube_uv_reflection_fragment="#ifdef ENVMAP_TYPE_CUBE_UV\nconst float cubeUV_textureSize = 1024.0;\nint getFaceFromDirection(vec3 direction) {\n vec3 absDirection = abs(direction);\n int face = -1;\n if( absDirection.x > absDirection.z ) {\n if(absDirection.x > absDirection.y )\n face = direction.x > 0.0 ? 0 : 3;\n else\n face = direction.y > 0.0 ? 1 : 4;\n }\n else {\n if(absDirection.z > absDirection.y )\n face = direction.z > 0.0 ? 2 : 5;\n else\n face = direction.y > 0.0 ? 1 : 4;\n }\n return face;\n}\nconst float cubeUV_maxLods1 = log2(cubeUV_textureSize*0.25) - 1.0;\nconst float cubeUV_rangeClamp = exp2((6.0 - 1.0) * 2.0);\nvec2 MipLevelInfo( vec3 vec, float roughnessLevel, float roughness ) {\n float scale = exp2(cubeUV_maxLods1 - roughnessLevel);\n float dxRoughness = dFdx(roughness);\n float dyRoughness = dFdy(roughness);\n vec3 dx = dFdx( vec * scale * dxRoughness );\n vec3 dy = dFdy( vec * scale * dyRoughness );\n float d = max( dot( dx, dx ), dot( dy, dy ) );\n d = clamp(d, 1.0, cubeUV_rangeClamp);\n float mipLevel = 0.5 * log2(d);\n return vec2(floor(mipLevel), fract(mipLevel));\n}\nconst float cubeUV_maxLods2 = log2(cubeUV_textureSize*0.25) - 2.0;\nconst float cubeUV_rcpTextureSize = 1.0 / cubeUV_textureSize;\nvec2 getCubeUV(vec3 direction, float roughnessLevel, float mipLevel) {\n mipLevel = roughnessLevel > cubeUV_maxLods2 - 3.0 ? 0.0 : mipLevel;\n float a = 16.0 * cubeUV_rcpTextureSize;\n vec2 exp2_packed = exp2( vec2( roughnessLevel, mipLevel ) );\n vec2 rcp_exp2_packed = vec2( 1.0 ) / exp2_packed;\n float powScale = exp2_packed.x * exp2_packed.y;\n float scale = rcp_exp2_packed.x * rcp_exp2_packed.y * 0.25;\n float mipOffset = 0.75*(1.0 - rcp_exp2_packed.y) * rcp_exp2_packed.x;\n bool bRes = mipLevel == 0.0;\n scale = bRes && (scale < a) ? a : scale;\n vec3 r;\n vec2 offset;\n int face = getFaceFromDirection(direction);\n float rcpPowScale = 1.0 / powScale;\n if( face == 0) {\n r = vec3(direction.x, -direction.z, direction.y);\n offset = vec2(0.0+mipOffset,0.75 * rcpPowScale);\n offset.y = bRes && (offset.y < 2.0*a) ? a : offset.y;\n }\n else if( face == 1) {\n r = vec3(direction.y, direction.x, direction.z);\n offset = vec2(scale+mipOffset, 0.75 * rcpPowScale);\n offset.y = bRes && (offset.y < 2.0*a) ? a : offset.y;\n }\n else if( face == 2) {\n r = vec3(direction.z, direction.x, direction.y);\n offset = vec2(2.0*scale+mipOffset, 0.75 * rcpPowScale);\n offset.y = bRes && (offset.y < 2.0*a) ? a : offset.y;\n }\n else if( face == 3) {\n r = vec3(direction.x, direction.z, direction.y);\n offset = vec2(0.0+mipOffset,0.5 * rcpPowScale);\n offset.y = bRes && (offset.y < 2.0*a) ? 0.0 : offset.y;\n }\n else if( face == 4) {\n r = vec3(direction.y, direction.x, -direction.z);\n offset = vec2(scale+mipOffset, 0.5 * rcpPowScale);\n offset.y = bRes && (offset.y < 2.0*a) ? 0.0 : offset.y;\n }\n else {\n r = vec3(direction.z, -direction.x, direction.y);\n offset = vec2(2.0*scale+mipOffset, 0.5 * rcpPowScale);\n offset.y = bRes && (offset.y < 2.0*a) ? 0.0 : offset.y;\n }\n r = normalize(r);\n float texelOffset = 0.5 * cubeUV_rcpTextureSize;\n vec2 s = ( r.yz / abs( r.x ) + vec2( 1.0 ) ) * 0.5;\n vec2 base = offset + vec2( texelOffset );\n return base + s * ( scale - 2.0 * texelOffset );\n}\nconst float cubeUV_maxLods3 = log2(cubeUV_textureSize*0.25) - 3.0;\nvec4 textureCubeUV(vec3 reflectedDirection, float roughness ) {\n float roughnessVal = roughness* cubeUV_maxLods3;\n float r1 = floor(roughnessVal);\n float r2 = r1 + 1.0;\n float t = fract(roughnessVal);\n vec2 mipInfo = MipLevelInfo(reflectedDirection, r1, roughness);\n float s = mipInfo.y;\n float level0 = mipInfo.x;\n float level1 = level0 + 1.0;\n level1 = level1 > 5.0 ? 5.0 : level1;\n level0 += min( floor( s + 0.5 ), 5.0 );\n vec2 uv_10 = getCubeUV(reflectedDirection, r1, level0);\n vec4 color10 = envMapTexelToLinear(texture2D(envMap, uv_10));\n vec2 uv_20 = getCubeUV(reflectedDirection, r2, level0);\n vec4 color20 = envMapTexelToLinear(texture2D(envMap, uv_20));\n vec4 result = mix(color10, color20, t);\n return vec4(result.rgb, 1.0);\n}\n#endif\n";THREE.ShaderChunk.defaultnormal_vertex="#ifdef FLIP_SIDED\n objectNormal = -objectNormal;\n#endif\nvec3 transformedNormal = normalMatrix * objectNormal;\n";THREE.ShaderChunk.displacementmap_vertex="#ifdef USE_DISPLACEMENTMAP\n transformed += normal * ( texture2D( displacementMap, uv ).x * displacementScale + displacementBias );\n#endif\n";THREE.ShaderChunk.displacementmap_pars_vertex="#ifdef USE_DISPLACEMENTMAP\n uniform sampler2D displacementMap;\n uniform float displacementScale;\n uniform float displacementBias;\n#endif\n";THREE.ShaderChunk.emissivemap_fragment="#ifdef USE_EMISSIVEMAP\n vec4 emissiveColor = texture2D( emissiveMap, vUv );\n emissiveColor.rgb = emissiveMapTexelToLinear( emissiveColor ).rgb;\n totalEmissiveRadiance *= emissiveColor.rgb;\n#endif\n";THREE.ShaderChunk.emissivemap_pars_fragment="#ifdef USE_EMISSIVEMAP\n uniform sampler2D emissiveMap;\n#endif\n";THREE.ShaderChunk.encodings_pars_fragment="\nvec4 LinearToLinear( in vec4 value ) {\n return value;\n}\nvec4 GammaToLinear( in vec4 value, in float gammaFactor ) {\n return vec4( pow( value.xyz, vec3( gammaFactor ) ), value.w );\n}\nvec4 LinearToGamma( in vec4 value, in float gammaFactor ) {\n return vec4( pow( value.xyz, vec3( 1.0 / gammaFactor ) ), value.w );\n}\nvec4 sRGBToLinear( in vec4 value ) {\n return vec4( mix( pow( value.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), value.rgb * 0.0773993808, vec3( lessThanEqual( value.rgb, vec3( 0.04045 ) ) ) ), value.w );\n}\nvec4 LinearTosRGB( in vec4 value ) {\n return vec4( mix( pow( value.rgb, vec3( 0.41666 ) ) * 1.055 - vec3( 0.055 ), value.rgb * 12.92, vec3( lessThanEqual( value.rgb, vec3( 0.0031308 ) ) ) ), value.w );\n}\nvec4 RGBEToLinear( in vec4 value ) {\n return vec4( value.rgb * exp2( value.a * 255.0 - 128.0 ), 1.0 );\n}\nvec4 LinearToRGBE( in vec4 value ) {\n float maxComponent = max( max( value.r, value.g ), value.b );\n float fExp = clamp( ceil( log2( maxComponent ) ), -128.0, 127.0 );\n return vec4( value.rgb / exp2( fExp ), ( fExp + 128.0 ) / 255.0 );\n}\nvec4 RGBMToLinear( in vec4 value, in float maxRange ) {\n return vec4( value.xyz * value.w * maxRange, 1.0 );\n}\nvec4 LinearToRGBM( in vec4 value, in float maxRange ) {\n float maxRGB = max( value.x, max( value.g, value.b ) );\n float M = clamp( maxRGB / maxRange, 0.0, 1.0 );\n M = ceil( M * 255.0 ) / 255.0;\n return vec4( value.rgb / ( M * maxRange ), M );\n}\nvec4 RGBDToLinear( in vec4 value, in float maxRange ) {\n return vec4( value.rgb * ( ( maxRange / 255.0 ) / value.a ), 1.0 );\n}\nvec4 LinearToRGBD( in vec4 value, in float maxRange ) {\n float maxRGB = max( value.x, max( value.g, value.b ) );\n float D = max( maxRange / maxRGB, 1.0 );\n D = min( floor( D ) / 255.0, 1.0 );\n return vec4( value.rgb * ( D * ( 255.0 / maxRange ) ), D );\n}\nconst mat3 cLogLuvM = mat3( 0.2209, 0.3390, 0.4184, 0.1138, 0.6780, 0.7319, 0.0102, 0.1130, 0.2969 );\nvec4 LinearToLogLuv( in vec4 value ) {\n vec3 Xp_Y_XYZp = value.rgb * cLogLuvM;\n Xp_Y_XYZp = max(Xp_Y_XYZp, vec3(1e-6, 1e-6, 1e-6));\n vec4 vResult;\n vResult.xy = Xp_Y_XYZp.xy / Xp_Y_XYZp.z;\n float Le = 2.0 * log2(Xp_Y_XYZp.y) + 127.0;\n vResult.w = fract(Le);\n vResult.z = (Le - (floor(vResult.w*255.0))/255.0)/255.0;\n return vResult;\n}\nconst mat3 cLogLuvInverseM = mat3( 6.0014, -2.7008, -1.7996, -1.3320, 3.1029, -5.7721, 0.3008, -1.0882, 5.6268 );\nvec4 LogLuvToLinear( in vec4 value ) {\n float Le = value.z * 255.0 + value.w;\n vec3 Xp_Y_XYZp;\n Xp_Y_XYZp.y = exp2((Le - 127.0) / 2.0);\n Xp_Y_XYZp.z = Xp_Y_XYZp.y / value.y;\n Xp_Y_XYZp.x = value.x * Xp_Y_XYZp.z;\n vec3 vRGB = Xp_Y_XYZp.rgb * cLogLuvInverseM;\n return vec4( max(vRGB, 0.0), 1.0 );\n}\n";THREE.ShaderChunk.encodings_fragment=" gl_FragColor = linearToOutputTexel( gl_FragColor );\n";THREE.ShaderChunk.envmap_fragment="#ifdef USE_ENVMAP\n #if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\n vec3 cameraToVertex = normalize( vWorldPosition - cameraPosition );\n vec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n #ifdef ENVMAP_MODE_REFLECTION\n vec3 reflectVec = reflect( cameraToVertex, worldNormal );\n #else\n vec3 reflectVec = refract( cameraToVertex, worldNormal, refractionRatio );\n #endif\n #else\n vec3 reflectVec = vReflect;\n #endif\n #ifdef DOUBLE_SIDED\n float flipNormal = ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n #else\n float flipNormal = 1.0;\n #endif\n #ifdef ENVMAP_TYPE_CUBE\n vec4 envColor = textureCube( envMap, flipNormal * vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\n #elif defined( ENVMAP_TYPE_EQUIREC )\n vec2 sampleUV;\n sampleUV.y = saturate( flipNormal * reflectVec.y * 0.5 + 0.5 );\n sampleUV.x = atan( flipNormal * reflectVec.z, flipNormal * reflectVec.x ) * RECIPROCAL_PI2 + 0.5;\n vec4 envColor = texture2D( envMap, sampleUV );\n #elif defined( ENVMAP_TYPE_SPHERE )\n vec3 reflectView = flipNormal * normalize((viewMatrix * vec4( reflectVec, 0.0 )).xyz + vec3(0.0,0.0,1.0));\n vec4 envColor = texture2D( envMap, reflectView.xy * 0.5 + 0.5 );\n #endif\n envColor = envMapTexelToLinear( envColor );\n #ifdef ENVMAP_BLENDING_MULTIPLY\n outgoingLight = mix( outgoingLight, outgoingLight * envColor.xyz, specularStrength * reflectivity );\n #elif defined( ENVMAP_BLENDING_MIX )\n outgoingLight = mix( outgoingLight, envColor.xyz, specularStrength * reflectivity );\n #elif defined( ENVMAP_BLENDING_ADD )\n outgoingLight += envColor.xyz * specularStrength * reflectivity;\n #endif\n#endif\n";THREE.ShaderChunk.envmap_pars_fragment="#if defined( USE_ENVMAP ) || defined( STANDARD )\n uniform float reflectivity;\n uniform float envMapIntenstiy;\n#endif\n#ifdef USE_ENVMAP\n #ifdef ENVMAP_TYPE_CUBE\n uniform samplerCube envMap;\n #else\n uniform sampler2D envMap;\n #endif\n uniform float flipEnvMap;\n #if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) || defined( STANDARD )\n uniform float refractionRatio;\n #else\n varying vec3 vReflect;\n #endif\n#endif\n";THREE.ShaderChunk.envmap_pars_vertex="#if defined( USE_ENVMAP ) && ! defined( USE_BUMPMAP ) && ! defined( USE_NORMALMAP ) && ! defined( PHONG ) && ! defined( STANDARD )\n varying vec3 vReflect;\n uniform float refractionRatio;\n#endif\n";THREE.ShaderChunk.envmap_vertex="#if defined( USE_ENVMAP ) && ! defined( USE_BUMPMAP ) && ! defined( USE_NORMALMAP ) && ! defined( PHONG ) && ! defined( STANDARD )\n vec3 cameraToVertex = normalize( worldPosition.xyz - cameraPosition );\n vec3 worldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n #ifdef ENVMAP_MODE_REFLECTION\n vReflect = reflect( cameraToVertex, worldNormal );\n #else\n vReflect = refract( cameraToVertex, worldNormal, refractionRatio );\n #endif\n#endif\n";THREE.ShaderChunk.fog_fragment="#ifdef USE_FOG\n #ifdef USE_LOGDEPTHBUF_EXT\n float depth = gl_FragDepthEXT / gl_FragCoord.w;\n #else\n float depth = gl_FragCoord.z / gl_FragCoord.w;\n #endif\n #ifdef FOG_EXP2\n float fogFactor = whiteCompliment( exp2( - fogDensity * fogDensity * depth * depth * LOG2 ) );\n #else\n float fogFactor = smoothstep( fogNear, fogFar, depth );\n #endif\n gl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );\n#endif\n";THREE.ShaderChunk.fog_pars_fragment="#ifdef USE_FOG\n uniform vec3 fogColor;\n #ifdef FOG_EXP2\n uniform float fogDensity;\n #else\n uniform float fogNear;\n uniform float fogFar;\n #endif\n#endif";THREE.ShaderChunk.lightmap_fragment="#ifdef USE_LIGHTMAP\n reflectedLight.indirectDiffuse += PI * texture2D( lightMap, vUv2 ).xyz * lightMapIntensity;\n#endif\n";THREE.ShaderChunk.lightmap_pars_fragment="#ifdef USE_LIGHTMAP\n uniform sampler2D lightMap;\n uniform float lightMapIntensity;\n#endif";THREE.ShaderChunk.lights_lambert_vertex="vec3 diffuse = vec3( 1.0 );\nGeometricContext geometry;\ngeometry.position = mvPosition.xyz;\ngeometry.normal = normalize( transformedNormal );\ngeometry.viewDir = normalize( -mvPosition.xyz );\nGeometricContext backGeometry;\nbackGeometry.position = geometry.position;\nbackGeometry.normal = -geometry.normal;\nbackGeometry.viewDir = geometry.viewDir;\nvLightFront = vec3( 0.0 );\n#ifdef DOUBLE_SIDED\n vLightBack = vec3( 0.0 );\n#endif\nIncidentLight directLight;\nfloat dotNL;\nvec3 directLightColor_Diffuse;\n#if NUM_POINT_LIGHTS > 0\n for ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n directLight = getPointDirectLightIrradiance( pointLights[ i ], geometry );\n dotNL = dot( geometry.normal, directLight.direction );\n directLightColor_Diffuse = PI * directLight.color;\n vLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n #ifdef DOUBLE_SIDED\n vLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n #endif\n }\n#endif\n#if NUM_SPOT_LIGHTS > 0\n for ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n directLight = getSpotDirectLightIrradiance( spotLights[ i ], geometry );\n dotNL = dot( geometry.normal, directLight.direction );\n directLightColor_Diffuse = PI * directLight.color;\n vLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n #ifdef DOUBLE_SIDED\n vLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n #endif\n }\n#endif\n#if NUM_DIR_LIGHTS > 0\n for ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n directLight = getDirectionalDirectLightIrradiance( directionalLights[ i ], geometry );\n dotNL = dot( geometry.normal, directLight.direction );\n directLightColor_Diffuse = PI * directLight.color;\n vLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n #ifdef DOUBLE_SIDED\n vLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n #endif\n }\n#endif\n#if NUM_HEMI_LIGHTS > 0\n for ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n vLightFront += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\n #ifdef DOUBLE_SIDED\n vLightBack += getHemisphereLightIrradiance( hemisphereLights[ i ], backGeometry );\n #endif\n }\n#endif\n";THREE.ShaderChunk.lights_pars="uniform vec3 ambientLightColor;\nvec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) {\n vec3 irradiance = ambientLightColor;\n #ifndef PHYSICALLY_CORRECT_LIGHTS\n irradiance *= PI;\n #endif\n return irradiance;\n}\n#if NUM_DIR_LIGHTS > 0\n struct DirectionalLight {\n vec3 direction;\n vec3 color;\n int shadow;\n float shadowBias;\n float shadowRadius;\n vec2 shadowMapSize;\n };\n uniform DirectionalLight directionalLights[ NUM_DIR_LIGHTS ];\n IncidentLight getDirectionalDirectLightIrradiance( const in DirectionalLight directionalLight, const in GeometricContext geometry ) {\n IncidentLight directLight;\n directLight.color = directionalLight.color;\n directLight.direction = directionalLight.direction;\n directLight.visible = true;\n return directLight;\n }\n#endif\n#if NUM_POINT_LIGHTS > 0\n struct PointLight {\n vec3 position;\n vec3 color;\n float distance;\n float decay;\n int shadow;\n float shadowBias;\n float shadowRadius;\n vec2 shadowMapSize;\n };\n uniform PointLight pointLights[ NUM_POINT_LIGHTS ];\n IncidentLight getPointDirectLightIrradiance( const in PointLight pointLight, const in GeometricContext geometry ) {\n IncidentLight directLight;\n vec3 lVector = pointLight.position - geometry.position;\n directLight.direction = normalize( lVector );\n float lightDistance = length( lVector );\n if ( testLightInRange( lightDistance, pointLight.distance ) ) {\n directLight.color = pointLight.color;\n directLight.color *= punctualLightIntensityToIrradianceFactor( lightDistance, pointLight.distance, pointLight.decay );\n directLight.visible = true;\n } else {\n directLight.color = vec3( 0.0 );\n directLight.visible = false;\n }\n return directLight;\n }\n#endif\n#if NUM_SPOT_LIGHTS > 0\n struct SpotLight {\n vec3 position;\n vec3 direction;\n vec3 color;\n float distance;\n float decay;\n float coneCos;\n float penumbraCos;\n int shadow;\n float shadowBias;\n float shadowRadius;\n vec2 shadowMapSize;\n };\n uniform SpotLight spotLights[ NUM_SPOT_LIGHTS ];\n IncidentLight getSpotDirectLightIrradiance( const in SpotLight spotLight, const in GeometricContext geometry ) {\n IncidentLight directLight;\n vec3 lVector = spotLight.position - geometry.position;\n directLight.direction = normalize( lVector );\n float lightDistance = length( lVector );\n float angleCos = dot( directLight.direction, spotLight.direction );\n if ( all( bvec2( angleCos > spotLight.coneCos, testLightInRange( lightDistance, spotLight.distance ) ) ) ) {\n float spotEffect = smoothstep( spotLight.coneCos, spotLight.penumbraCos, angleCos );\n directLight.color = spotLight.color;\n directLight.color *= spotEffect * punctualLightIntensityToIrradianceFactor( lightDistance, spotLight.distance, spotLight.decay );\n directLight.visible = true;\n } else {\n directLight.color = vec3( 0.0 );\n directLight.visible = false;\n }\n return directLight;\n }\n#endif\n#if NUM_HEMI_LIGHTS > 0\n struct HemisphereLight {\n vec3 direction;\n vec3 skyColor;\n vec3 groundColor;\n };\n uniform HemisphereLight hemisphereLights[ NUM_HEMI_LIGHTS ];\n vec3 getHemisphereLightIrradiance( const in HemisphereLight hemiLight, const in GeometricContext geometry ) {\n float dotNL = dot( geometry.normal, hemiLight.direction );\n float hemiDiffuseWeight = 0.5 * dotNL + 0.5;\n vec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight );\n #ifndef PHYSICALLY_CORRECT_LIGHTS\n irradiance *= PI;\n #endif\n return irradiance;\n }\n#endif\n#if defined( USE_ENVMAP ) && defined( STANDARD )\n vec3 getLightProbeIndirectIrradiance( const in GeometricContext geometry, const in int maxMIPLevel ) {\n #ifdef DOUBLE_SIDED\n float flipNormal = ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n #else\n float flipNormal = 1.0;\n #endif\n vec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );\n #ifdef ENVMAP_TYPE_CUBE\n vec3 queryVec = flipNormal * vec3( flipEnvMap * worldNormal.x, worldNormal.yz );\n #ifdef TEXTURE_LOD_EXT\n vec4 envMapColor = textureCubeLodEXT( envMap, queryVec, float( maxMIPLevel ) );\n #else\n vec4 envMapColor = textureCube( envMap, queryVec, float( maxMIPLevel ) );\n #endif\n #elif defined( ENVMAP_TYPE_CUBE_UV )\n vec3 queryVec = flipNormal * vec3( flipEnvMap * worldNormal.x, worldNormal.yz );\n vec4 envMapColor = textureCubeUV( queryVec, 1.0 );\n #else\n vec4 envMapColor = vec4( 0.0 );\n #endif\n envMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n return PI * envMapColor.rgb * envMapIntensity;\n }\n float getSpecularMIPLevel( const in float blinnShininessExponent, const in int maxMIPLevel ) {\n float maxMIPLevelScalar = float( maxMIPLevel );\n float desiredMIPLevel = maxMIPLevelScalar - 0.79248 - 0.5 * log2( pow2( blinnShininessExponent ) + 1.0 );\n return clamp( desiredMIPLevel, 0.0, maxMIPLevelScalar );\n }\n vec3 getLightProbeIndirectRadiance( const in GeometricContext geometry, const in float blinnShininessExponent, const in int maxMIPLevel ) {\n #ifdef ENVMAP_MODE_REFLECTION\n vec3 reflectVec = reflect( -geometry.viewDir, geometry.normal );\n #else\n vec3 reflectVec = refract( -geometry.viewDir, geometry.normal, refractionRatio );\n #endif\n #ifdef DOUBLE_SIDED\n float flipNormal = ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n #else\n float flipNormal = 1.0;\n #endif\n reflectVec = inverseTransformDirection( reflectVec, viewMatrix );\n float specularMIPLevel = getSpecularMIPLevel( blinnShininessExponent, maxMIPLevel );\n #ifdef ENVMAP_TYPE_CUBE\n vec3 queryReflectVec = flipNormal * vec3( flipEnvMap * reflectVec.x, reflectVec.yz );\n #ifdef TEXTURE_LOD_EXT\n vec4 envMapColor = textureCubeLodEXT( envMap, queryReflectVec, specularMIPLevel );\n #else\n vec4 envMapColor = textureCube( envMap, queryReflectVec, specularMIPLevel );\n #endif\n #elif defined( ENVMAP_TYPE_CUBE_UV )\n vec3 queryReflectVec = flipNormal * vec3( flipEnvMap * reflectVec.x, reflectVec.yz );\n vec4 envMapColor = textureCubeUV(queryReflectVec, BlinnExponentToGGXRoughness(blinnShininessExponent));\n #elif defined( ENVMAP_TYPE_EQUIREC )\n vec2 sampleUV;\n sampleUV.y = saturate( flipNormal * reflectVec.y * 0.5 + 0.5 );\n sampleUV.x = atan( flipNormal * reflectVec.z, flipNormal * reflectVec.x ) * RECIPROCAL_PI2 + 0.5;\n #ifdef TEXTURE_LOD_EXT\n vec4 envMapColor = texture2DLodEXT( envMap, sampleUV, specularMIPLevel );\n #else\n vec4 envMapColor = texture2D( envMap, sampleUV, specularMIPLevel );\n #endif\n #elif defined( ENVMAP_TYPE_SPHERE )\n vec3 reflectView = flipNormal * normalize((viewMatrix * vec4( reflectVec, 0.0 )).xyz + vec3(0.0,0.0,1.0));\n #ifdef TEXTURE_LOD_EXT\n vec4 envMapColor = texture2DLodEXT( envMap, reflectView.xy * 0.5 + 0.5, specularMIPLevel );\n #else\n vec4 envMapColor = texture2D( envMap, reflectView.xy * 0.5 + 0.5, specularMIPLevel );\n #endif\n #endif\n envMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n return envMapColor.rgb * envMapIntensity;\n }\n#endif\n";THREE.ShaderChunk.lights_phong_fragment="BlinnPhongMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;\nmaterial.specularColor = specular;\nmaterial.specularShininess = shininess;\nmaterial.specularStrength = specularStrength;\n";THREE.ShaderChunk.lights_phong_pars_fragment="#ifdef USE_ENVMAP\n varying vec3 vWorldPosition;\n#endif\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n varying vec3 vNormal;\n#endif\nstruct BlinnPhongMaterial {\n vec3 diffuseColor;\n vec3 specularColor;\n float specularShininess;\n float specularStrength;\n};\nvoid RE_Direct_BlinnPhong( const in IncidentLight directLight, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n float dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n vec3 irradiance = dotNL * directLight.color;\n #ifndef PHYSICALLY_CORRECT_LIGHTS\n irradiance *= PI;\n #endif\n reflectedLight.directDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n reflectedLight.directSpecular += irradiance * BRDF_Specular_BlinnPhong( directLight, geometry, material.specularColor, material.specularShininess ) * material.specularStrength;\n}\nvoid RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n reflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\n#define RE_Direct RE_Direct_BlinnPhong\n#define RE_IndirectDiffuse RE_IndirectDiffuse_BlinnPhong\n#define Material_LightProbeLOD( material ) (0)\n";THREE.ShaderChunk.lights_phong_pars_vertex="#ifdef USE_ENVMAP\n varying vec3 vWorldPosition;\n#endif\n";THREE.ShaderChunk.lights_phong_vertex="#ifdef USE_ENVMAP\n vWorldPosition = worldPosition.xyz;\n#endif\n";THREE.ShaderChunk.lights_standard_fragment="StandardMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor );\nmaterial.specularRoughness = clamp( roughnessFactor, 0.04, 1.0 );\nmaterial.specularColor = mix( vec3( 0.04 ), diffuseColor.rgb, metalnessFactor );\n";THREE.ShaderChunk.lights_standard_pars_fragment="struct StandardMaterial {\n vec3 diffuseColor;\n float specularRoughness;\n vec3 specularColor;\n};\nvoid RE_Direct_Standard( const in IncidentLight directLight, const in GeometricContext geometry, const in StandardMaterial material, inout ReflectedLight reflectedLight ) {\n float dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n vec3 irradiance = dotNL * directLight.color;\n #ifndef PHYSICALLY_CORRECT_LIGHTS\n irradiance *= PI;\n #endif\n reflectedLight.directDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n reflectedLight.directSpecular += irradiance * BRDF_Specular_GGX( directLight, geometry, material.specularColor, material.specularRoughness );\n}\nvoid RE_IndirectDiffuse_Standard( const in vec3 irradiance, const in GeometricContext geometry, const in StandardMaterial material, inout ReflectedLight reflectedLight ) {\n reflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectSpecular_Standard( const in vec3 radiance, const in GeometricContext geometry, const in StandardMaterial material, inout ReflectedLight reflectedLight ) {\n reflectedLight.indirectSpecular += radiance * BRDF_Specular_GGX_Environment( geometry, material.specularColor, material.specularRoughness );\n}\n#define RE_Direct RE_Direct_Standard\n#define RE_IndirectDiffuse RE_IndirectDiffuse_Standard\n#define RE_IndirectSpecular RE_IndirectSpecular_Standard\n#define Material_BlinnShininessExponent( material ) GGXRoughnessToBlinnExponent( material.specularRoughness )\nfloat computeSpecularOcclusion( const in float dotNV, const in float ambientOcclusion, const in float roughness ) {\n return saturate( pow( dotNV + ambientOcclusion, exp2( - 16.0 * roughness - 1.0 ) ) - 1.0 + ambientOcclusion );\n}\n"; + hourMinSec: function(t) { + var hour, min, sec; + if (t == null) { + t = 0; + } + hour = (t / 3600) | 0; + if (hour < 10) { + hour = "0" + hour; + } + t %= 3600; + min = (t / 60) | 0; + if (min < 10) { + min = "0" + min; + } + sec = (t % 60 | 0).toFixed(); + if (sec < 10) { + sec = "0" + sec; + } + return "" + hour + ":" + min + ":" + sec; + }, -THREE.ShaderChunk.lights_template="\nGeometricContext geometry;\ngeometry.position = - vViewPosition;\ngeometry.normal = normal;\ngeometry.viewDir = normalize( vViewPosition );\nIncidentLight directLight;\n#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct )\n PointLight pointLight;\n for ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n pointLight = pointLights[ i ];\n directLight = getPointDirectLightIrradiance( pointLight, geometry );\n #ifdef USE_SHADOWMAP\n directLight.color *= all( bvec2( pointLight.shadow, directLight.visible ) ) ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ] ) : 1.0;\n #endif\n RE_Direct( directLight, geometry, material, reflectedLight );\n }\n#endif\n#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct )\n SpotLight spotLight;\n for ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n spotLight = spotLights[ i ];\n directLight = getSpotDirectLightIrradiance( spotLight, geometry );\n #ifdef USE_SHADOWMAP\n directLight.color *= all( bvec2( spotLight.shadow, directLight.visible ) ) ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n #endif\n RE_Direct( directLight, geometry, material, reflectedLight );\n }\n#endif\n#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct )\n DirectionalLight directionalLight;\n for ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n directionalLight = directionalLights[ i ];\n directLight = getDirectionalDirectLightIrradiance( directionalLight, geometry );\n #ifdef USE_SHADOWMAP\n directLight.color *= all( bvec2( directionalLight.shadow, directLight.visible ) ) ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n #endif\n RE_Direct( directLight, geometry, material, reflectedLight );\n }\n#endif\n#if defined( RE_IndirectDiffuse )\n vec3 irradiance = getAmbientLightIrradiance( ambientLightColor );\n #ifdef USE_LIGHTMAP\n vec3 lightMapIrradiance = texture2D( lightMap, vUv2 ).xyz * lightMapIntensity;\n #ifndef PHYSICALLY_CORRECT_LIGHTS\n lightMapIrradiance *= PI;\n #endif\n irradiance += lightMapIrradiance;\n #endif\n #if ( NUM_HEMI_LIGHTS > 0 )\n for ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n irradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\n }\n #endif\n #if defined( USE_ENVMAP ) && defined( STANDARD ) && defined( ENVMAP_TYPE_CUBE_UV )\n irradiance += getLightProbeIndirectIrradiance( geometry, 8 );\n #endif\n RE_IndirectDiffuse( irradiance, geometry, material, reflectedLight );\n#endif\n#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )\n vec3 radiance = getLightProbeIndirectRadiance( geometry, Material_BlinnShininessExponent( material ), 8 );\n RE_IndirectSpecular( radiance, geometry, material, reflectedLight );\n#endif\n";THREE.ShaderChunk.logdepthbuf_fragment="#if defined(USE_LOGDEPTHBUF) && defined(USE_LOGDEPTHBUF_EXT)\n gl_FragDepthEXT = log2(vFragDepth) * logDepthBufFC * 0.5;\n#endif";THREE.ShaderChunk.logdepthbuf_pars_fragment="#ifdef USE_LOGDEPTHBUF\n uniform float logDepthBufFC;\n #ifdef USE_LOGDEPTHBUF_EXT\n varying float vFragDepth;\n #endif\n#endif\n";THREE.ShaderChunk.logdepthbuf_pars_vertex="#ifdef USE_LOGDEPTHBUF\n #ifdef USE_LOGDEPTHBUF_EXT\n varying float vFragDepth;\n #endif\n uniform float logDepthBufFC;\n#endif";THREE.ShaderChunk.logdepthbuf_vertex="#ifdef USE_LOGDEPTHBUF\n gl_Position.z = log2(max( EPSILON, gl_Position.w + 1.0 )) * logDepthBufFC;\n #ifdef USE_LOGDEPTHBUF_EXT\n vFragDepth = 1.0 + gl_Position.w;\n #else\n gl_Position.z = (gl_Position.z - 1.0) * gl_Position.w;\n #endif\n#endif\n";THREE.ShaderChunk.map_fragment="#ifdef USE_MAP\n vec4 texelColor = texture2D( map, vUv );\n texelColor = mapTexelToLinear( texelColor );\n diffuseColor *= texelColor;\n#endif\n";THREE.ShaderChunk.map_pars_fragment="#ifdef USE_MAP\n uniform sampler2D map;\n#endif\n";THREE.ShaderChunk.map_particle_fragment="#ifdef USE_MAP\n vec4 mapTexel = texture2D( map, vec2( gl_PointCoord.x, 1.0 - gl_PointCoord.y ) * offsetRepeat.zw + offsetRepeat.xy );\n diffuseColor *= mapTexelToLinear( mapTexel );\n#endif\n";THREE.ShaderChunk.map_particle_pars_fragment="#ifdef USE_MAP\n uniform vec4 offsetRepeat;\n uniform sampler2D map;\n#endif\n";THREE.ShaderChunk.metalnessmap_fragment="float metalnessFactor = metalness;\n#ifdef USE_METALNESSMAP\n vec4 texelMetalness = texture2D( metalnessMap, vUv );\n metalnessFactor *= texelMetalness.r;\n#endif\n";THREE.ShaderChunk.metalnessmap_pars_fragment="#ifdef USE_METALNESSMAP\n uniform sampler2D metalnessMap;\n#endif";THREE.ShaderChunk.morphnormal_vertex="#ifdef USE_MORPHNORMALS\n objectNormal += ( morphNormal0 - normal ) * morphTargetInfluences[ 0 ];\n objectNormal += ( morphNormal1 - normal ) * morphTargetInfluences[ 1 ];\n objectNormal += ( morphNormal2 - normal ) * morphTargetInfluences[ 2 ];\n objectNormal += ( morphNormal3 - normal ) * morphTargetInfluences[ 3 ];\n#endif\n";THREE.ShaderChunk.morphtarget_pars_vertex="#ifdef USE_MORPHTARGETS\n #ifndef USE_MORPHNORMALS\n uniform float morphTargetInfluences[ 8 ];\n #else\n uniform float morphTargetInfluences[ 4 ];\n #endif\n#endif";THREE.ShaderChunk.morphtarget_vertex="#ifdef USE_MORPHTARGETS\n transformed += ( morphTarget0 - position ) * morphTargetInfluences[ 0 ];\n transformed += ( morphTarget1 - position ) * morphTargetInfluences[ 1 ];\n transformed += ( morphTarget2 - position ) * morphTargetInfluences[ 2 ];\n transformed += ( morphTarget3 - position ) * morphTargetInfluences[ 3 ];\n #ifndef USE_MORPHNORMALS\n transformed += ( morphTarget4 - position ) * morphTargetInfluences[ 4 ];\n transformed += ( morphTarget5 - position ) * morphTargetInfluences[ 5 ];\n transformed += ( morphTarget6 - position ) * morphTargetInfluences[ 6 ];\n transformed += ( morphTarget7 - position ) * morphTargetInfluences[ 7 ];\n #endif\n#endif\n";THREE.ShaderChunk.normal_fragment="#ifdef FLAT_SHADED\n vec3 fdx = vec3( dFdx( vViewPosition.x ), dFdx( vViewPosition.y ), dFdx( vViewPosition.z ) );\n vec3 fdy = vec3( dFdy( vViewPosition.x ), dFdy( vViewPosition.y ), dFdy( vViewPosition.z ) );\n vec3 normal = normalize( cross( fdx, fdy ) );\n#else\n vec3 normal = normalize( vNormal );\n #ifdef DOUBLE_SIDED\n normal = normal * ( -1.0 + 2.0 * float( gl_FrontFacing ) );\n #endif\n#endif\n#ifdef USE_NORMALMAP\n normal = perturbNormal2Arb( -vViewPosition, normal );\n#elif defined( USE_BUMPMAP )\n normal = perturbNormalArb( -vViewPosition, normal, dHdxy_fwd() );\n#endif\n";THREE.ShaderChunk.normalmap_pars_fragment="#ifdef USE_NORMALMAP\n uniform sampler2D normalMap;\n uniform vec2 normalScale;\n vec3 perturbNormal2Arb( vec3 eye_pos, vec3 surf_norm ) {\n vec3 q0 = dFdx( eye_pos.xyz );\n vec3 q1 = dFdy( eye_pos.xyz );\n vec2 st0 = dFdx( vUv.st );\n vec2 st1 = dFdy( vUv.st );\n vec3 S = normalize( q0 * st1.t - q1 * st0.t );\n vec3 T = normalize( -q0 * st1.s + q1 * st0.s );\n vec3 N = normalize( surf_norm );\n vec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n mapN.xy = normalScale * mapN.xy;\n mat3 tsn = mat3( S, T, N );\n return normalize( tsn * mapN );\n }\n#endif\n";THREE.ShaderChunk.premultiplied_alpha_fragment="#ifdef PREMULTIPLIED_ALPHA\n gl_FragColor.rgb *= gl_FragColor.a;\n#endif\n";THREE.ShaderChunk.project_vertex="#ifdef USE_SKINNING\n vec4 mvPosition = modelViewMatrix * skinned;\n#else\n vec4 mvPosition = modelViewMatrix * vec4( transformed, 1.0 );\n#endif\ngl_Position = projectionMatrix * mvPosition;\n";THREE.ShaderChunk.roughnessmap_fragment="float roughnessFactor = roughness;\n#ifdef USE_ROUGHNESSMAP\n vec4 texelRoughness = texture2D( roughnessMap, vUv );\n roughnessFactor *= texelRoughness.r;\n#endif\n";THREE.ShaderChunk.roughnessmap_pars_fragment="#ifdef USE_ROUGHNESSMAP\n uniform sampler2D roughnessMap;\n#endif";THREE.ShaderChunk.shadowmap_pars_fragment="#ifdef USE_SHADOWMAP\n #if NUM_DIR_LIGHTS > 0\n uniform sampler2D directionalShadowMap[ NUM_DIR_LIGHTS ];\n varying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHTS ];\n #endif\n #if NUM_SPOT_LIGHTS > 0\n uniform sampler2D spotShadowMap[ NUM_SPOT_LIGHTS ];\n varying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHTS ];\n #endif\n #if NUM_POINT_LIGHTS > 0\n uniform sampler2D pointShadowMap[ NUM_POINT_LIGHTS ];\n varying vec4 vPointShadowCoord[ NUM_POINT_LIGHTS ];\n #endif\n float unpackDepth( const in vec4 rgba_depth ) {\n const vec4 bit_shift = vec4( 1.0 / ( 256.0 * 256.0 * 256.0 ), 1.0 / ( 256.0 * 256.0 ), 1.0 / 256.0, 1.0 );\n return dot( rgba_depth, bit_shift );\n }\n float texture2DCompare( sampler2D depths, vec2 uv, float compare ) {\n return step( compare, unpackDepth( texture2D( depths, uv ) ) );\n }\n float texture2DShadowLerp( sampler2D depths, vec2 size, vec2 uv, float compare ) {\n const vec2 offset = vec2( 0.0, 1.0 );\n vec2 texelSize = vec2( 1.0 ) / size;\n vec2 centroidUV = floor( uv * size + 0.5 ) / size;\n float lb = texture2DCompare( depths, centroidUV + texelSize * offset.xx, compare );\n float lt = texture2DCompare( depths, centroidUV + texelSize * offset.xy, compare );\n float rb = texture2DCompare( depths, centroidUV + texelSize * offset.yx, compare );\n float rt = texture2DCompare( depths, centroidUV + texelSize * offset.yy, compare );\n vec2 f = fract( uv * size + 0.5 );\n float a = mix( lb, lt, f.y );\n float b = mix( rb, rt, f.y );\n float c = mix( a, b, f.x );\n return c;\n }\n float getShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord ) {\n shadowCoord.xyz /= shadowCoord.w;\n shadowCoord.z += shadowBias;\n bvec4 inFrustumVec = bvec4 ( shadowCoord.x >= 0.0, shadowCoord.x <= 1.0, shadowCoord.y >= 0.0, shadowCoord.y <= 1.0 );\n bool inFrustum = all( inFrustumVec );\n bvec2 frustumTestVec = bvec2( inFrustum, shadowCoord.z <= 1.0 );\n bool frustumTest = all( frustumTestVec );\n if ( frustumTest ) {\n #if defined( SHADOWMAP_TYPE_PCF )\n vec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n float dx0 = - texelSize.x * shadowRadius;\n float dy0 = - texelSize.y * shadowRadius;\n float dx1 = + texelSize.x * shadowRadius;\n float dy1 = + texelSize.y * shadowRadius;\n return (\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\n ) * ( 1.0 / 9.0 );\n #elif defined( SHADOWMAP_TYPE_PCF_SOFT )\n vec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n float dx0 = - texelSize.x * shadowRadius;\n float dy0 = - texelSize.y * shadowRadius;\n float dx1 = + texelSize.x * shadowRadius;\n float dy1 = + texelSize.y * shadowRadius;\n return (\n texture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\n texture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\n texture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\n texture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\n texture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy, shadowCoord.z ) +\n texture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\n texture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\n texture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\n texture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\n ) * ( 1.0 / 9.0 );\n #else\n return texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z );\n #endif\n }\n return 1.0;\n }\n vec2 cubeToUV( vec3 v, float texelSizeY ) {\n vec3 absV = abs( v );\n float scaleToCube = 1.0 / max( absV.x, max( absV.y, absV.z ) );\n absV *= scaleToCube;\n v *= scaleToCube * ( 1.0 - 2.0 * texelSizeY );\n vec2 planar = v.xy;\n float almostATexel = 1.5 * texelSizeY;\n float almostOne = 1.0 - almostATexel;\n if ( absV.z >= almostOne ) {\n if ( v.z > 0.0 )\n planar.x = 4.0 - v.x;\n } else if ( absV.x >= almostOne ) {\n float signX = sign( v.x );\n planar.x = v.z * signX + 2.0 * signX;\n } else if ( absV.y >= almostOne ) {\n float signY = sign( v.y );\n planar.x = v.x + 2.0 * signY + 2.0;\n planar.y = v.z * signY - 2.0;\n }\n return vec2( 0.125, 0.25 ) * planar + vec2( 0.375, 0.75 );\n }\n float getPointShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord ) {\n vec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) );\n vec3 lightToPosition = shadowCoord.xyz;\n vec3 bd3D = normalize( lightToPosition );\n float dp = ( length( lightToPosition ) - shadowBias ) / 1000.0;\n #if defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_PCF_SOFT )\n vec2 offset = vec2( - 1, 1 ) * shadowRadius * texelSize.y;\n return (\n texture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyy, texelSize.y ), dp ) +\n texture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyy, texelSize.y ), dp ) +\n texture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyx, texelSize.y ), dp ) +\n texture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyx, texelSize.y ), dp ) +\n texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ) +\n texture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxy, texelSize.y ), dp ) +\n texture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxy, texelSize.y ), dp ) +\n texture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxx, texelSize.y ), dp ) +\n texture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxx, texelSize.y ), dp )\n ) * ( 1.0 / 9.0 );\n #else\n return texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp );\n #endif\n }\n#endif\n";THREE.ShaderChunk.shadowmap_pars_vertex="#ifdef USE_SHADOWMAP\n #if NUM_DIR_LIGHTS > 0\n uniform mat4 directionalShadowMatrix[ NUM_DIR_LIGHTS ];\n varying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHTS ];\n #endif\n #if NUM_SPOT_LIGHTS > 0\n uniform mat4 spotShadowMatrix[ NUM_SPOT_LIGHTS ];\n varying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHTS ];\n #endif\n #if NUM_POINT_LIGHTS > 0\n uniform mat4 pointShadowMatrix[ NUM_POINT_LIGHTS ];\n varying vec4 vPointShadowCoord[ NUM_POINT_LIGHTS ];\n #endif\n#endif\n";THREE.ShaderChunk.shadowmap_vertex="#ifdef USE_SHADOWMAP\n #if NUM_DIR_LIGHTS > 0\n for ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n vDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * worldPosition;\n }\n #endif\n #if NUM_SPOT_LIGHTS > 0\n for ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n vSpotShadowCoord[ i ] = spotShadowMatrix[ i ] * worldPosition;\n }\n #endif\n #if NUM_POINT_LIGHTS > 0\n for ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n vPointShadowCoord[ i ] = pointShadowMatrix[ i ] * worldPosition;\n }\n #endif\n#endif\n";THREE.ShaderChunk.shadowmask_pars_fragment="float getShadowMask() {\n float shadow = 1.0;\n #ifdef USE_SHADOWMAP\n #if NUM_DIR_LIGHTS > 0\n DirectionalLight directionalLight;\n for ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n directionalLight = directionalLights[ i ];\n shadow *= bool( directionalLight.shadow ) ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n }\n #endif\n #if NUM_SPOT_LIGHTS > 0\n SpotLight spotLight;\n for ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n spotLight = spotLights[ i ];\n shadow *= bool( spotLight.shadow ) ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n }\n #endif\n #if NUM_POINT_LIGHTS > 0\n PointLight pointLight;\n for ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n pointLight = pointLights[ i ];\n shadow *= bool( pointLight.shadow ) ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ] ) : 1.0;\n }\n #endif\n #endif\n return shadow;\n}\n";THREE.ShaderChunk.skinbase_vertex="#ifdef USE_SKINNING\n mat4 boneMatX = getBoneMatrix( skinIndex.x );\n mat4 boneMatY = getBoneMatrix( skinIndex.y );\n mat4 boneMatZ = getBoneMatrix( skinIndex.z );\n mat4 boneMatW = getBoneMatrix( skinIndex.w );\n#endif";THREE.ShaderChunk.skinning_pars_vertex="#ifdef USE_SKINNING\n uniform mat4 bindMatrix;\n uniform mat4 bindMatrixInverse;\n #ifdef BONE_TEXTURE\n uniform sampler2D boneTexture;\n uniform int boneTextureWidth;\n uniform int boneTextureHeight;\n mat4 getBoneMatrix( const in float i ) {\n float j = i * 4.0;\n float x = mod( j, float( boneTextureWidth ) );\n float y = floor( j / float( boneTextureWidth ) );\n float dx = 1.0 / float( boneTextureWidth );\n float dy = 1.0 / float( boneTextureHeight );\n y = dy * ( y + 0.5 );\n vec4 v1 = texture2D( boneTexture, vec2( dx * ( x + 0.5 ), y ) );\n vec4 v2 = texture2D( boneTexture, vec2( dx * ( x + 1.5 ), y ) );\n vec4 v3 = texture2D( boneTexture, vec2( dx * ( x + 2.5 ), y ) );\n vec4 v4 = texture2D( boneTexture, vec2( dx * ( x + 3.5 ), y ) );\n mat4 bone = mat4( v1, v2, v3, v4 );\n return bone;\n }\n #else\n uniform mat4 boneGlobalMatrices[ MAX_BONES ];\n mat4 getBoneMatrix( const in float i ) {\n mat4 bone = boneGlobalMatrices[ int(i) ];\n return bone;\n }\n #endif\n#endif\n";THREE.ShaderChunk.skinning_vertex="#ifdef USE_SKINNING\n vec4 skinVertex = bindMatrix * vec4( transformed, 1.0 );\n vec4 skinned = vec4( 0.0 );\n skinned += boneMatX * skinVertex * skinWeight.x;\n skinned += boneMatY * skinVertex * skinWeight.y;\n skinned += boneMatZ * skinVertex * skinWeight.z;\n skinned += boneMatW * skinVertex * skinWeight.w;\n skinned = bindMatrixInverse * skinned;\n#endif\n";THREE.ShaderChunk.skinnormal_vertex="#ifdef USE_SKINNING\n mat4 skinMatrix = mat4( 0.0 );\n skinMatrix += skinWeight.x * boneMatX;\n skinMatrix += skinWeight.y * boneMatY;\n skinMatrix += skinWeight.z * boneMatZ;\n skinMatrix += skinWeight.w * boneMatW;\n skinMatrix = bindMatrixInverse * skinMatrix * bindMatrix;\n objectNormal = vec4( skinMatrix * vec4( objectNormal, 0.0 ) ).xyz;\n#endif\n";THREE.ShaderChunk.specularmap_fragment="float specularStrength;\n#ifdef USE_SPECULARMAP\n vec4 texelSpecular = texture2D( specularMap, vUv );\n specularStrength = texelSpecular.r;\n#else\n specularStrength = 1.0;\n#endif";THREE.ShaderChunk.specularmap_pars_fragment="#ifdef USE_SPECULARMAP\n uniform sampler2D specularMap;\n#endif";THREE.ShaderChunk.tonemapping_fragment="#if defined( TONE_MAPPING )\n gl_FragColor.rgb = toneMapping( gl_FragColor.rgb );\n#endif\n";THREE.ShaderChunk.tonemapping_pars_fragment="#define saturate(a) clamp( a, 0.0, 1.0 )\nuniform float toneMappingExposure;\nuniform float toneMappingWhitePoint;\nvec3 LinearToneMapping( vec3 color ) {\n return toneMappingExposure * color;\n}\nvec3 ReinhardToneMapping( vec3 color ) {\n color *= toneMappingExposure;\n return saturate( color / ( vec3( 1.0 ) + color ) );\n}\n#define Uncharted2Helper( x ) max( ( ( x * ( 0.15 * x + 0.10 * 0.50 ) + 0.20 * 0.02 ) / ( x * ( 0.15 * x + 0.50 ) + 0.20 * 0.30 ) ) - 0.02 / 0.30, vec3( 0.0 ) )\nvec3 Uncharted2ToneMapping( vec3 color ) {\n color *= toneMappingExposure;\n return saturate( Uncharted2Helper( color ) / Uncharted2Helper( vec3( toneMappingWhitePoint ) ) );\n}\nvec3 OptimizedCineonToneMapping( vec3 color ) {\n color *= toneMappingExposure;\n color = max( vec3( 0.0 ), color - 0.004 );\n return pow( ( color * ( 6.2 * color + 0.5 ) ) / ( color * ( 6.2 * color + 1.7 ) + 0.06 ), vec3( 2.2 ) );\n}\n";THREE.ShaderChunk.uv2_pars_fragment="#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n varying vec2 vUv2;\n#endif";THREE.ShaderChunk.uv2_pars_vertex="#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n attribute vec2 uv2;\n varying vec2 vUv2;\n#endif";THREE.ShaderChunk.uv2_vertex="#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n vUv2 = uv2;\n#endif";THREE.ShaderChunk.uv_pars_fragment="#if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP ) || defined( USE_ALPHAMAP ) || defined( USE_EMISSIVEMAP ) || defined( USE_ROUGHNESSMAP ) || defined( USE_METALNESSMAP )\n varying vec2 vUv;\n#endif";THREE.ShaderChunk.uv_pars_vertex="#if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP ) || defined( USE_ALPHAMAP ) || defined( USE_EMISSIVEMAP ) || defined( USE_ROUGHNESSMAP ) || defined( USE_METALNESSMAP )\n varying vec2 vUv;\n uniform vec4 offsetRepeat;\n#endif\n";THREE.ShaderChunk.uv_vertex="#if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP ) || defined( USE_ALPHAMAP ) || defined( USE_EMISSIVEMAP ) || defined( USE_ROUGHNESSMAP ) || defined( USE_METALNESSMAP )\n vUv = uv * offsetRepeat.zw + offsetRepeat.xy;\n#endif";THREE.ShaderChunk.worldpos_vertex="#if defined( USE_ENVMAP ) || defined( PHONG ) || defined( STANDARD ) || defined( LAMBERT ) || defined ( USE_SHADOWMAP )\n #ifdef USE_SKINNING\n vec4 worldPosition = modelMatrix * skinned;\n #else\n vec4 worldPosition = modelMatrix * vec4( transformed, 1.0 );\n #endif\n#endif\n";THREE.UniformsUtils={merge:function(a){for(var b={},c=0;c= 365 * 24 * 3600) { + result += (t / (365 * 24 * 3600) | 0) + " years "; + t %= 365 * 24 * 3600; + if (t < 24 * 3600) { + result += "0 days "; + } + } + if (t >= 24 * 3600) { + result += (t / (24 * 3600) | 0) + " days "; + } + t %= 24 * 3600; + return result + this.hourMinSec(t); + } +} +var DataFormatters = { + distanceString: function(value){ + return numeral(value).format('0,0.000 a') + "m" + }, -THREE.ShaderChunk.meshlambert_frag="uniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\nvarying vec3 vLightFront;\n#ifdef DOUBLE_SIDED\n varying vec3 vLightBack;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n vec4 diffuseColor = vec4( diffuse, opacity );\n ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n vec3 totalEmissiveRadiance = emissive;\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n reflectedLight.indirectDiffuse = getAmbientLightIrradiance( ambientLightColor );\n #include \n reflectedLight.indirectDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb );\n #ifdef DOUBLE_SIDED\n reflectedLight.directDiffuse = ( gl_FrontFacing ) ? vLightFront : vLightBack;\n #else\n reflectedLight.directDiffuse = vLightFront;\n #endif\n reflectedLight.directDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb ) * getShadowMask();\n #include \n vec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n #include \n gl_FragColor = vec4( outgoingLight, diffuseColor.a );\n #include \n #include \n #include \n #include \n}\n";THREE.ShaderChunk.meshlambert_vert="#define LAMBERT\nvarying vec3 vLightFront;\n#ifdef DOUBLE_SIDED\n varying vec3 vLightBack;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n}\n";THREE.ShaderChunk.meshphong_frag="#define PHONG\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform vec3 specular;\nuniform float shininess;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n vec4 diffuseColor = vec4( diffuse, opacity );\n ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n vec3 totalEmissiveRadiance = emissive;\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n vec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n #include \n gl_FragColor = vec4( outgoingLight, diffuseColor.a );\n #include \n #include \n #include \n #include \n}\n";THREE.ShaderChunk.meshphong_vert="#define PHONG\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n varying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n#ifndef FLAT_SHADED\n vNormal = normalize( transformedNormal );\n#endif\n #include \n #include \n #include \n #include \n #include \n #include \n vViewPosition = - mvPosition.xyz;\n #include \n #include \n #include \n #include \n}\n";THREE.ShaderChunk.meshstandard_frag="#define STANDARD\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float roughness;\nuniform float metalness;\nuniform float opacity;\nuniform float envMapIntensity;\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n varying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n vec4 diffuseColor = vec4( diffuse, opacity );\n ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n vec3 totalEmissiveRadiance = emissive;\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n vec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n gl_FragColor = vec4( outgoingLight, diffuseColor.a );\n #include \n #include \n #include \n #include \n}\n";THREE.ShaderChunk.meshstandard_vert="#define STANDARD\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n varying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n#ifndef FLAT_SHADED\n vNormal = normalize( transformedNormal );\n#endif\n #include \n #include \n #include \n #include \n #include \n #include \n vViewPosition = - mvPosition.xyz;\n #include \n #include \n #include \n}\n";THREE.ShaderChunk.normal_frag="uniform float opacity;\nvarying vec3 vNormal;\n#include \n#include \nvoid main() {\n gl_FragColor = vec4( 0.5 * normalize( vNormal ) + 0.5, opacity );\n #include \n}\n";THREE.ShaderChunk.normal_vert="varying vec3 vNormal;\n#include \n#include \n#include \nvoid main() {\n vNormal = normalize( normalMatrix * normal );\n #include \n #include \n #include \n #include \n}\n";THREE.ShaderChunk.points_frag="uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n vec3 outgoingLight = vec3( 0.0 );\n vec4 diffuseColor = vec4( diffuse, opacity );\n #include \n #include \n #include \n #include \n outgoingLight = diffuseColor.rgb;\n gl_FragColor = vec4( outgoingLight, diffuseColor.a );\n #include \n #include \n #include \n #include \n}\n";THREE.ShaderChunk.points_vert="uniform float size;\nuniform float scale;\n#include \n#include \n#include \n#include \nvoid main() {\n #include \n #include \n #include \n #ifdef USE_SIZEATTENUATION\n gl_PointSize = size * ( scale / - mvPosition.z );\n #else\n gl_PointSize = size;\n #endif\n #include \n #include \n #include \n}\n";THREE.ShaderLib={basic:{uniforms:THREE.UniformsUtils.merge([THREE.UniformsLib.common,THREE.UniformsLib.aomap,THREE.UniformsLib.fog]),vertexShader:THREE.ShaderChunk.meshbasic_vert,fragmentShader:THREE.ShaderChunk.meshbasic_frag},lambert:{uniforms:THREE.UniformsUtils.merge([THREE.UniformsLib.common,THREE.UniformsLib.aomap,THREE.UniformsLib.lightmap,THREE.UniformsLib.emissivemap,THREE.UniformsLib.fog,THREE.UniformsLib.lights,{emissive:{type:"c",value:new THREE.Color(0)}}]),vertexShader:THREE.ShaderChunk.meshlambert_vert,fragmentShader:THREE.ShaderChunk.meshlambert_frag},phong:{uniforms:THREE.UniformsUtils.merge([THREE.UniformsLib.common,THREE.UniformsLib.aomap,THREE.UniformsLib.lightmap,THREE.UniformsLib.emissivemap,THREE.UniformsLib.bumpmap,THREE.UniformsLib.normalmap,THREE.UniformsLib.displacementmap,THREE.UniformsLib.fog,THREE.UniformsLib.lights,{emissive:{type:"c",value:new THREE.Color(0)},specular:{type:"c",value:new THREE.Color(1118481)},shininess:{type:"f",value:30}}]),vertexShader:THREE.ShaderChunk.meshphong_vert,fragmentShader:THREE.ShaderChunk.meshphong_frag},standard:{uniforms:THREE.UniformsUtils.merge([THREE.UniformsLib.common,THREE.UniformsLib.aomap,THREE.UniformsLib.lightmap,THREE.UniformsLib.emissivemap,THREE.UniformsLib.bumpmap,THREE.UniformsLib.normalmap,THREE.UniformsLib.displacementmap,THREE.UniformsLib.roughnessmap,THREE.UniformsLib.metalnessmap,THREE.UniformsLib.fog,THREE.UniformsLib.lights,{emissive:{type:"c",value:new THREE.Color(0)},roughness:{type:"f",value:.5},metalness:{type:"f",value:0},envMapIntensity:{type:"f",value:1}}]),vertexShader:THREE.ShaderChunk.meshstandard_vert,fragmentShader:THREE.ShaderChunk.meshstandard_frag},points:{uniforms:THREE.UniformsUtils.merge([THREE.UniformsLib.points,THREE.UniformsLib.fog]),vertexShader:THREE.ShaderChunk.points_vert,fragmentShader:THREE.ShaderChunk.points_frag},dashed:{uniforms:THREE.UniformsUtils.merge([THREE.UniformsLib.common,THREE.UniformsLib.fog,{scale:{type:"f",value:1},dashSize:{type:"f",value:1},totalSize:{type:"f",value:2}}]),vertexShader:THREE.ShaderChunk.linedashed_vert,fragmentShader:THREE.ShaderChunk.linedashed_frag},depth:{uniforms:{mNear:{type:"f",value:1},mFar:{type:"f",value:2e3},opacity:{type:"f",value:1}},vertexShader:THREE.ShaderChunk.depth_vert,fragmentShader:THREE.ShaderChunk.depth_frag},normal:{uniforms:{opacity:{type:"f",value:1}},vertexShader:THREE.ShaderChunk.normal_vert,fragmentShader:THREE.ShaderChunk.normal_frag},cube:{uniforms:{tCube:{type:"t",value:null},tFlip:{type:"f",value:-1}},vertexShader:THREE.ShaderChunk.cube_vert,fragmentShader:THREE.ShaderChunk.cube_frag},equirect:{uniforms:{tEquirect:{type:"t",value:null},tFlip:{type:"f",value:-1}},vertexShader:THREE.ShaderChunk.equirect_vert,fragmentShader:THREE.ShaderChunk.equirect_frag},depthRGBA:{uniforms:{},vertexShader:THREE.ShaderChunk.depthRGBA_vert,fragmentShader:THREE.ShaderChunk.depthRGBA_frag},distanceRGBA:{uniforms:{lightPos:{type:"v3",value:new THREE.Vector3(0,0,0)}},vertexShader:THREE.ShaderChunk.distanceRGBA_vert,fragmentShader:THREE.ShaderChunk.distanceRGBA_frag}};THREE.WebGLRenderer=function(a){function b(a,b,c,d){!0===P&&(a*=d,b*=d,c*=d);K.clearColor(a,b,c,d)}function c(){K.init();K.scissor(qa.copy(ya).multiplyScalar(aa));K.viewport(ka.copy(la).multiplyScalar(aa));b(ba.r,ba.g,ba.b,ga)}function d(){ma=ha=null;na="";ra=-1;K.reset()}function e(a){a.preventDefault();d();c();U.clear()}function f(a){a=a.target;a.removeEventListener("dispose",f);a:{var b=U.get(a);if(a.image&&b.__image__webglTextureCube)r.deleteTexture(b.__image__webglTextureCube);else{if(void 0===b.__webglInit)break a;r.deleteTexture(b.__webglTexture)}U.delete(a)}ia.textures--}function g(a){a=a.target;a.removeEventListener("dispose",g);var b=U.get(a),c=U.get(a.texture);if(a&&void 0!==c.__webglTexture){r.deleteTexture(c.__webglTexture);if(a instanceof THREE.WebGLRenderTargetCube)for(c=0;6>c;c++)r.deleteFramebuffer(b.__webglFramebuffer[c]),r.deleteRenderbuffer(b.__webglDepthbuffer[c]);else r.deleteFramebuffer(b.__webglFramebuffer),r.deleteRenderbuffer(b.__webglDepthbuffer);U.delete(a.texture);U.delete(a)}ia.textures--}function h(a){a=a.target;a.removeEventListener("dispose",h);k(a);U.delete(a)}function k(a){var b=U.get(a).program;a.program=void 0;void 0!==b&&oa.releaseProgram(b)}function l(a,b){return Math.abs(b[0])-Math.abs(a[0])}function p(a,b){return a.object.renderOrder!==b.object.renderOrder?a.object.renderOrder-b.object.renderOrder:a.material.id!==b.material.id?a.material.id-b.material.id:a.z!==b.z?a.z-b.z:a.id-b.id}function n(a,b){return a.object.renderOrder!==b.object.renderOrder?a.object.renderOrder-b.object.renderOrder:a.z!==b.z?b.z-a.z:a.id-b.id}function m(a,b,c,d,e){var f;c.transparent?(d=S,f=++Y):(d=C,f=++Z);f=d[f];void 0!==f?(f.id=a.id,f.object=a,f.geometry=b,f.material=c,f.z=W.z,f.group=e):(f={id:a.id,object:a,geometry:b,material:c,z:W.z,group:e},d.push(f))}function q(a,b){if(!1!==a.visible){if(a.layers.test(b.layers))if(a instanceof THREE.Light)J.push(a);else if(a instanceof THREE.Sprite)!1!==a.frustumCulled&&!0!==za.intersectsObject(a)||ja.push(a);else if(a instanceof THREE.LensFlare)ea.push(a);else if(a instanceof THREE.ImmediateRenderObject)!0===X.sortObjects&&(W.setFromMatrixPosition(a.matrixWorld),W.applyProjection(sa)),m(a,null,a.material,W.z,null);else if(a instanceof THREE.Mesh||a instanceof THREE.Line||a instanceof THREE.Points)if(a instanceof THREE.SkinnedMesh&&a.skeleton.update(),!1===a.frustumCulled||!0===za.intersectsObject(a)){var c=a.material;if(!0===c.visible){!0===X.sortObjects&&(W.setFromMatrixPosition(a.matrixWorld),W.applyProjection(sa));var d=pa.update(a);if(c instanceof THREE.MultiMaterial)for(var e=d.groups,f=c.materials,c=0,g=e.length;c=da.maxTextures&&console.warn("WebGLRenderer: trying to use "+a+" texture units while this GPU supports only "+da.maxTextures);ta+=1;return a}function w(a,b,c,d){var e;if("1i"===b)r.uniform1i(c,d);else if("1f"===b)r.uniform1f(c,d);else if("2f"===b)r.uniform2f(c,d[0],d[1]);else if("3f"===b)r.uniform3f(c,d[0],d[1],d[2]);else if("4f"===b)r.uniform4f(c,d[0],d[1],d[2],d[3]);else if("1iv"===b)r.uniform1iv(c,d);else if("3iv"===b)r.uniform3iv(c,d);else if("1fv"===b)r.uniform1fv(c,d);else if("2fv"===b)r.uniform2fv(c,d);else if("3fv"===b)r.uniform3fv(c,d);else if("4fv"===b)r.uniform4fv(c,d);else if("Matrix2fv"===b)r.uniformMatrix2fv(c,!1,d);else if("Matrix3fv"===b)r.uniformMatrix3fv(c,!1,d);else if("Matrix4fv"===b)r.uniformMatrix4fv(c,!1,d);else if("i"===b)r.uniform1i(c,d);else if("f"===b)r.uniform1f(c,d);else if("v2"===b)r.uniform2f(c,d.x,d.y);else if("v3"===b)r.uniform3f(c,d.x,d.y,d.z);else if("v4"===b)r.uniform4f(c,d.x,d.y,d.z,d.w);else if("c"===b)r.uniform3f(c,d.r,d.g,d.b);else if("s"===b){a=a.properties;for(var g in a){e=a[g];var f=c[g],h=d[g];w(e,e.type,f,h)}}else if("sa"===b){a=a.properties;b=0;for(var k=d.length;bb||a.height>b){var c=b/Math.max(a.width,a.height),d=document.createElement("canvas");d.width=Math.floor(a.width*c);d.height=Math.floor(a.height*c);d.getContext("2d").drawImage(a,0,0,a.width,a.height,0,0,d.width,d.height);console.warn("THREE.WebGLRenderer: image is too big ("+a.width+"x"+a.height+"). Resized to "+d.width+"x"+d.height,a);return d}return a}function z(a){return THREE.Math.isPowerOfTwo(a.width)&&THREE.Math.isPowerOfTwo(a.height)}function y(a,b){var c=U.get(a);if(6===a.image.length)if(0h;h++)g[h]=!X.autoScaleCubemaps||d||e?e?a.image[h].image:a.image[h]:D(a.image[h],da.maxCubemapSize);var k=z(g[0]),l=L(a.format),m=L(a.type);x(r.TEXTURE_CUBE_MAP,a,k);for(h=0;6>h;h++)if(d)for(var n,p=g[h].mipmaps,q=0,s=p.length;qf;f++)b.__webglFramebuffer[f]=r.createFramebuffer()}else b.__webglFramebuffer=r.createFramebuffer();if(d){K.bindTexture(r.TEXTURE_CUBE_MAP,c.__webglTexture);x(r.TEXTURE_CUBE_MAP,a.texture,e);for(f=0;6>f;f++)G(b.__webglFramebuffer[f],a,r.COLOR_ATTACHMENT0,r.TEXTURE_CUBE_MAP_POSITIVE_X+f);a.texture.generateMipmaps&&e&&r.generateMipmap(r.TEXTURE_CUBE_MAP);K.bindTexture(r.TEXTURE_CUBE_MAP,null)}else K.bindTexture(r.TEXTURE_2D,c.__webglTexture),x(r.TEXTURE_2D,a.texture,e),G(b.__webglFramebuffer,a,r.COLOR_ATTACHMENT0,r.TEXTURE_2D),a.texture.generateMipmaps&&e&&r.generateMipmap(r.TEXTURE_2D),K.bindTexture(r.TEXTURE_2D,null);if(a.depthBuffer){b=U.get(a);if(a instanceof THREE.WebGLRenderTargetCube)for(b.__webglDepthbuffer=[],c=0;6>c;c++)r.bindFramebuffer(r.FRAMEBUFFER,b.__webglFramebuffer[c]),b.__webglDepthbuffer[c]=r.createRenderbuffer(),F(b.__webglDepthbuffer[c],a);else r.bindFramebuffer(r.FRAMEBUFFER,b.__webglFramebuffer),b.__webglDepthbuffer=r.createRenderbuffer(),F(b.__webglDepthbuffer,a);r.bindFramebuffer(r.FRAMEBUFFER,null)}}b=a instanceof THREE.WebGLRenderTargetCube;a?(c=U.get(a),c=b?c.__webglFramebuffer[a.activeCubeFace]:c.__webglFramebuffer,qa.copy(a.scissor),Aa=a.scissorTest,ka.copy(a.viewport)):(c=null,qa.copy(ya).multiplyScalar(aa),Aa=Ba,ka.copy(la).multiplyScalar(aa));ua!==c&&(r.bindFramebuffer(r.FRAMEBUFFER,c),ua=c);K.scissor(qa);K.setScissorTest(Aa);K.viewport(ka);b&&(b=U.get(a.texture),r.framebufferTexture2D(r.FRAMEBUFFER,r.COLOR_ATTACHMENT0,r.TEXTURE_CUBE_MAP_POSITIVE_X+a.activeCubeFace,b.__webglTexture,a.activeMipMapLevel))};this.readRenderTargetPixels=function(a,b,c,d,e,g){if(!1===a instanceof THREE.WebGLRenderTarget)console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.");else{var f=U.get(a).__webglFramebuffer;if(f){var h=!1;f!==ua&&(r.bindFramebuffer(r.FRAMEBUFFER,f),h=!0);try{var k=a.texture;k.format!==THREE.RGBAFormat&&L(k.format)!==r.getParameter(r.IMPLEMENTATION_COLOR_READ_FORMAT)?console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format."):k.type===THREE.UnsignedByteType||L(k.type)===r.getParameter(r.IMPLEMENTATION_COLOR_READ_TYPE)||k.type===THREE.FloatType&&V.get("WEBGL_color_buffer_float")||k.type===THREE.HalfFloatType&&V.get("EXT_color_buffer_half_float")?r.checkFramebufferStatus(r.FRAMEBUFFER)===r.FRAMEBUFFER_COMPLETE?r.readPixels(b,c,d,e,L(k.format),L(k.type),g):console.error("THREE.WebGLRenderer.readRenderTargetPixels: readPixels from renderTarget failed. Framebuffer not complete."):console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.")}finally{h&&r.bindFramebuffer(r.FRAMEBUFFER,ua)}}}}};THREE.WebGLRenderTarget=function(a,b,c){this.uuid=THREE.Math.generateUUID();this.width=a;this.height=b;this.scissor=new THREE.Vector4(0,0,a,b);this.scissorTest=!1;this.viewport=new THREE.Vector4(0,0,a,b);c=c||{};void 0===c.minFilter&&(c.minFilter=THREE.LinearFilter);this.texture=new THREE.Texture(void 0,void 0,c.wrapS,c.wrapT,c.magFilter,c.minFilter,c.format,c.type,c.anisotropy);this.depthBuffer=void 0!==c.depthBuffer?c.depthBuffer:!0;this.stencilBuffer=void 0!==c.stencilBuffer?c.stencilBuffer:!0};THREE.WebGLRenderTarget.prototype={constructor:THREE.WebGLRenderTarget,setSize:function(a,b){if(this.width!==a||this.height!==b)this.width=a,this.height=b,this.dispose();this.viewport.set(0,0,a,b);this.scissor.set(0,0,a,b)},clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.width=a.width;this.height=a.height;this.viewport.copy(a.viewport);this.texture=a.texture.clone();this.depthBuffer=a.depthBuffer;this.stencilBuffer=a.stencilBuffer;return this},dispose:function(){this.dispatchEvent({type:"dispose"})}};THREE.EventDispatcher.prototype.apply(THREE.WebGLRenderTarget.prototype);THREE.WebGLRenderTargetCube=function(a,b,c){THREE.WebGLRenderTarget.call(this,a,b,c);this.activeMipMapLevel=this.activeCubeFace=0};THREE.WebGLRenderTargetCube.prototype=Object.create(THREE.WebGLRenderTarget.prototype);THREE.WebGLRenderTargetCube.prototype.constructor=THREE.WebGLRenderTargetCube;THREE.WebGLBufferRenderer=function(a,b,c){var d;this.setMode=function(a){d=a};this.render=function(b,f){a.drawArrays(d,b,f);c.calls++;c.vertices+=f;d===a.TRIANGLES&&(c.faces+=f/3)};this.renderInstances=function(e){var f=b.get("ANGLE_instanced_arrays");if(null===f)console.error("THREE.WebGLBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.");else{var g=e.attributes.position,h=0,h=g instanceof THREE.InterleavedBufferAttribute?g.data.count:g.count;f.drawArraysInstancedANGLE(d,0,h,e.maxInstancedCount);c.calls++;c.vertices+=h*e.maxInstancedCount;d===a.TRIANGLES&&(c.faces+=e.maxInstancedCount*h/3)}}};THREE.WebGLIndexedBufferRenderer=function(a,b,c){var d,e,f;this.setMode=function(a){d=a};this.setIndex=function(c){c.array instanceof Uint32Array&&b.get("OES_element_index_uint")?(e=a.UNSIGNED_INT,f=4):(e=a.UNSIGNED_SHORT,f=2)};this.render=function(b,h){a.drawElements(d,h,e,b*f);c.calls++;c.vertices+=h;d===a.TRIANGLES&&(c.faces+=h/3)};this.renderInstances=function(g,h,k){var l=b.get("ANGLE_instanced_arrays");null===l?console.error("THREE.WebGLBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays."):(l.drawElementsInstancedANGLE(d,k,e,h*f,g.maxInstancedCount),c.calls++,c.vertices+=k*g.maxInstancedCount,d===a.TRIANGLES&&(c.faces+=g.maxInstancedCount*k/3))}};THREE.WebGLExtensions=function(a){var b={};this.get=function(c){if(void 0!==b[c])return b[c];var d;switch(c){case"EXT_texture_filter_anisotropic":d=a.getExtension("EXT_texture_filter_anisotropic")||a.getExtension("MOZ_EXT_texture_filter_anisotropic")||a.getExtension("WEBKIT_EXT_texture_filter_anisotropic");break;case"WEBGL_compressed_texture_s3tc":d=a.getExtension("WEBGL_compressed_texture_s3tc")||a.getExtension("MOZ_WEBGL_compressed_texture_s3tc")||a.getExtension("WEBKIT_WEBGL_compressed_texture_s3tc");break;case"WEBGL_compressed_texture_pvrtc":d=a.getExtension("WEBGL_compressed_texture_pvrtc")||a.getExtension("WEBKIT_WEBGL_compressed_texture_pvrtc");break;case"WEBGL_compressed_texture_etc1":d=a.getExtension("WEBGL_compressed_texture_etc1");break;default:d=a.getExtension(c)}null===d&&console.warn("THREE.WebGLRenderer: "+c+" extension not supported.");return b[c]=d}};THREE.WebGLCapabilities=function(a,b,c){function d(b){if("highp"===b){if(0c){var d=b;b=c;c=d}d=a[b];return void 0===d?(a[b]=[c],!0):-1===d.indexOf(c)?(d.push(c),!0):!1}var f=new THREE.WebGLGeometries(a,b,c);this.getAttributeBuffer=function(a){return a instanceof THREE.InterleavedBufferAttribute?b.get(a.data).__webglBuffer:b.get(a).__webglBuffer};this.getWireframeAttribute=function(c){var f=b.get(c);if(void 0!==f.wireframe)return f.wireframe;var k=[],l=c.index,p=c.attributes;c=p.position;if(null!==l)for(var p={},l=l.array,n=0,m=l.length;n/g,function(a,b){var c=THREE.ShaderChunk[b];if(void 0===c)throw Error("Can not resolve #include <"+b+">");return k(c)})}function l(a){return a.replace(/for \( int i \= (\d+)\; i < (\d+)\; i \+\+ \) \{([\s\S]+?)(?=\})\}/g,function(a,b,c,d){a="";for(b=parseInt(b);b 0 ) {\nfloat depth = gl_FragCoord.z / gl_FragCoord.w;\nfloat fogFactor = 0.0;\nif ( fogType == 1 ) {\nfogFactor = smoothstep( fogNear, fogFar, depth );\n} else {\nconst float LOG2 = 1.442695;\nfogFactor = exp2( - fogDensity * fogDensity * depth * depth * LOG2 );\nfogFactor = 1.0 - clamp( fogFactor, 0.0, 1.0 );\n}\ngl_FragColor = mix( gl_FragColor, vec4( fogColor, gl_FragColor.w ), fogFactor );\n}\n}"].join("\n")); + degreeString: function(value){ + return numeral(value).format('0.000') + "°" + }, -x.compileShader(I);x.compileShader(O);x.attachShader(M,I);x.attachShader(M,O);x.linkProgram(M);B=M;s=x.getAttribLocation(B,"position");w=x.getAttribLocation(B,"uv");c=x.getUniformLocation(B,"uvOffset");d=x.getUniformLocation(B,"uvScale");e=x.getUniformLocation(B,"rotation");f=x.getUniformLocation(B,"scale");g=x.getUniformLocation(B,"color");h=x.getUniformLocation(B,"map");k=x.getUniformLocation(B,"opacity");l=x.getUniformLocation(B,"modelViewMatrix");p=x.getUniformLocation(B,"projectionMatrix");n=x.getUniformLocation(B,"fogType");m=x.getUniformLocation(B,"fogDensity");q=x.getUniformLocation(B,"fogNear");u=x.getUniformLocation(B,"fogFar");v=x.getUniformLocation(B,"fogColor");t=x.getUniformLocation(B,"alphaTest");M=document.createElement("canvas");M.width=8;M.height=8;I=M.getContext("2d");I.fillStyle="white";I.fillRect(0,0,8,8);G=new THREE.Texture(M);G.needsUpdate=!0}x.useProgram(B);D.initAttributes();D.enableAttribute(s);D.enableAttribute(w);D.disableUnusedAttributes();D.disable(x.CULL_FACE);D.enable(x.BLEND);x.bindBuffer(x.ARRAY_BUFFER,z);x.vertexAttribPointer(s,2,x.FLOAT,!1,16,0);x.vertexAttribPointer(w,2,x.FLOAT,!1,16,8);x.bindBuffer(x.ELEMENT_ARRAY_BUFFER,y);x.uniformMatrix4fv(p,!1,N.projectionMatrix.elements);D.activeTexture(x.TEXTURE0);x.uniform1i(h,0);I=M=0;(O=A.fog)?(x.uniform3f(v,O.color.r,O.color.g,O.color.b),O instanceof THREE.Fog?(x.uniform1f(q,O.near),x.uniform1f(u,O.far),x.uniform1i(n,1),I=M=1):O instanceof THREE.FogExp2&&(x.uniform1f(m,O.density),x.uniform1i(n,2),I=M=2)):(x.uniform1i(n,0),I=M=0);for(var O=0,Q=b.length;Oc)return null;var d=[],e=[],f=[],g,h,k;if(0=l--){console.warn("THREE.ShapeUtils: Unable to triangulate polygon! in triangulate()");break}g=h;c<=g&&(g=0);h=g+1;c<=h&&(h=0);k=h+1;c<=k&&(k=0);var p;a:{var n=p=void 0,m=void 0,q=void 0,u=void 0,v=void 0,t=void 0,s=void 0,w=void 0,n=a[e[g]].x,m=a[e[g]].y,q=a[e[h]].x,u=a[e[h]].y,v=a[e[k]].x,t=a[e[k]].y;if(Number.EPSILON>(q-n)*(t-m)-(u-m)*(v-n))p=!1;else{var E=void 0,x=void 0,D=void 0,z=void 0,y=void 0,B=void 0,G=void 0,F=void 0,H=void 0,L=void 0,H=F=G=w=s=void 0,E=v-q,x=t-u,D=n-v,z=m-t,y=q-n,B=u-m;for(p=0;p=-Number.EPSILON&&F>=-Number.EPSILON&&G>=-Number.EPSILON)){p=!1;break a}p=!0}}if(p){d.push([a[e[g]],a[e[h]],a[e[k]]]);f.push([e[g],e[h],e[k]]);g=h;for(k=h+1;kNumber.EPSILON){if(0B||B>y)return[];k=l*n-k*p;if(0>k||k>y)return[]}else{if(0d?[]:k===d?f?[]:[g]:a<=d?[g,h]:[g,l]}function e(a,b,c,d){var e=b.x-a.x,f=b.y-a.y;b=c.x-a.x;c=c.y-a.y;var g=d.x-a.x;d=d.y-a.y;a=e*c-f*b;e=e*d-f*g;return Math.abs(a)>Number.EPSILON?(b=g*c-d*b,0f&&(f=d);var g=a+1;g>d&&(g=0);d=e(h[a],h[f],h[g],k[b]);if(!d)return!1;d=k.length-1;f=b-1;0>f&&(f=d);g=b+1;g>d&&(g=0);return(d=e(k[b],k[f],k[g],h[a]))?!0:!1}function f(a,b){var c,e;for(c=0;cN){console.log("Infinite Loop! Holes left:"+l.length+", Probably Hole outside Shape!");break}for(p=F;ph;h++)l=k[h].x+":"+k[h].y,l=p[l],void 0!==l&&(k[h]=l);return n.concat()},isClockWise:function(a){return 0>THREE.ShapeUtils.area(a)},b2:function(){return function(a,b,c,d){var e=1-a;return e*e*b+2*(1-a)*a*c+a*a*d}}(),b3:function(){return function(a,b,c,d,e){var f=1-a,g=1-a;return f*f*f*b+3*g*g*a*c+3*(1-a)*a*a*d+a*a*a*e}}()};THREE.Curve=function(){};THREE.Curve.prototype={constructor:THREE.Curve,getPoint:function(a){console.warn("THREE.Curve: Warning, getPoint() not implemented!");return null},getPointAt:function(a){a=this.getUtoTmapping(a);return this.getPoint(a)},getPoints:function(a){a||(a=5);var b,c=[];for(b=0;b<=a;b++)c.push(this.getPoint(b/a));return c},getSpacedPoints:function(a){a||(a=5);var b,c=[];for(b=0;b<=a;b++)c.push(this.getPointAt(b/a));return c},getLength:function(){var a=this.getLengths();return a[a.length-1]},getLengths:function(a){a||(a=this.__arcLengthDivisions?this.__arcLengthDivisions:200);if(this.cacheArcLengths&&this.cacheArcLengths.length===a+1&&!this.needsUpdate)return this.cacheArcLengths;this.needsUpdate=!1;var b=[],c,d=this.getPoint(0),e,f=0;b.push(0);for(e=1;e<=a;e++)c=this.getPoint(e/a),f+=c.distanceTo(d),b.push(f),d=c;return this.cacheArcLengths=b},updateArcLengths:function(){this.needsUpdate=!0;this.getLengths()},getUtoTmapping:function(a,b){var c=this.getLengths(),d=0,e=c.length,f;f=b?b:a*c[e-1];for(var g=0,h=e-1,k;g<=h;)if(d=Math.floor(g+(h-g)/2),k=c[d]-f,0>k)g=d+1;else if(0b&&(b=0);1=b)return a=this.curves[d],b=1-(c[d]-b)/a.getLength(),a.getPointAt(b);d++}return null};THREE.CurvePath.prototype.getLength=function(){var a=this.getCurveLengths();return a[a.length-1]};THREE.CurvePath.prototype.getCurveLengths=function(){if(this.cacheLengths&&this.cacheLengths.length===this.curves.length)return this.cacheLengths;for(var a=[],b=0,c=0,d=this.curves.length;cNumber.EPSILON){if(0>l&&(g=b[f],k=-k,h=b[e],l=-l),!(a.yh.y))if(a.y===g.y){if(a.x===g.x)return!0}else{e=l*(a.x-g.x)-k*(a.y-g.y);if(0===e)return!0;0>e||(d=!d)}}else if(a.y===g.y&&(h.x<=a.x&&a.x<=g.x||g.x<=a.x&&a.x<=h.x))return!0}return d}var e=THREE.ShapeUtils.isClockWise,f=function(a){for(var b=[],c=new THREE.Path,d=0,e=a.length;db.length-2?b.length-1:c+1],b=b[c>b.length-3?b.length-1:c+2],c=THREE.CurveUtils.interpolate;return new THREE.Vector2(c(d.x,e.x,f.x,b.x,a),c(d.y,e.y,f.y,b.y,a))};THREE.EllipseCurve=function(a,b,c,d,e,f,g,h){this.aX=a;this.aY=b;this.xRadius=c;this.yRadius=d;this.aStartAngle=e;this.aEndAngle=f;this.aClockwise=g;this.aRotation=h||0};THREE.EllipseCurve.prototype=Object.create(THREE.Curve.prototype);THREE.EllipseCurve.prototype.constructor=THREE.EllipseCurve;THREE.EllipseCurve.prototype.getPoint=function(a){var b=this.aEndAngle-this.aStartAngle;0>b&&(b+=2*Math.PI);b>2*Math.PI&&(b-=2*Math.PI);b=!0===this.aClockwise?this.aEndAngle+(1-a)*(2*Math.PI-b):this.aStartAngle+a*b;a=this.aX+this.xRadius*Math.cos(b);var c=this.aY+this.yRadius*Math.sin(b);if(0!==this.aRotation){var b=Math.cos(this.aRotation),d=Math.sin(this.aRotation),e=a;a=(e-this.aX)*b-(c-this.aY)*d+this.aX;c=(e-this.aX)*d+(c-this.aY)*b+this.aY}return new THREE.Vector2(a,c)};THREE.ArcCurve=function(a,b,c,d,e,f){THREE.EllipseCurve.call(this,a,b,c,c,d,e,f)};THREE.ArcCurve.prototype=Object.create(THREE.EllipseCurve.prototype);THREE.ArcCurve.prototype.constructor=THREE.ArcCurve;THREE.LineCurve3=THREE.Curve.create(function(a,b){this.v1=a;this.v2=b},function(a){var b=new THREE.Vector3;b.subVectors(this.v2,this.v1);b.multiplyScalar(a);b.add(this.v1);return b});THREE.QuadraticBezierCurve3=THREE.Curve.create(function(a,b,c){this.v0=a;this.v1=b;this.v2=c},function(a){var b=THREE.ShapeUtils.b2;return new THREE.Vector3(b(a,this.v0.x,this.v1.x,this.v2.x),b(a,this.v0.y,this.v1.y,this.v2.y),b(a,this.v0.z,this.v1.z,this.v2.z))});THREE.CubicBezierCurve3=THREE.Curve.create(function(a,b,c,d){this.v0=a;this.v1=b;this.v2=c;this.v3=d},function(a){var b=THREE.ShapeUtils.b3;return new THREE.Vector3(b(a,this.v0.x,this.v1.x,this.v2.x,this.v3.x),b(a,this.v0.y,this.v1.y,this.v2.y,this.v3.y),b(a,this.v0.z,this.v1.z,this.v2.z,this.v3.z))});THREE.SplineCurve3=THREE.Curve.create(function(a){console.warn("THREE.SplineCurve3 will be deprecated. Please use THREE.CatmullRomCurve3");this.points=void 0==a?[]:a},function(a){var b=this.points;a*=b.length-1;var c=Math.floor(a);a-=c;var d=b[0==c?c:c-1],e=b[c],f=b[c>b.length-2?b.length-1:c+1],b=b[c>b.length-3?b.length-1:c+2],c=THREE.CurveUtils.interpolate;return new THREE.Vector3(c(d.x,e.x,f.x,b.x,a),c(d.y,e.y,f.y,b.y,a),c(d.z,e.z,f.z,b.z,a))});THREE.CatmullRomCurve3=function(){function a(){}var b=new THREE.Vector3,c=new a,d=new a,e=new a;a.prototype.init=function(a,b,c,d){this.c0=a;this.c1=c;this.c2=-3*a+3*b-2*c-d;this.c3=2*a-2*b+c+d};a.prototype.initNonuniformCatmullRom=function(a,b,c,d,e,p,n){a=((b-a)/e-(c-a)/(e+p)+(c-b)/p)*p;d=((c-b)/p-(d-b)/(p+n)+(d-c)/n)*p;this.init(b,c,a,d)};a.prototype.initCatmullRom=function(a,b,c,d,e){this.init(b,c,e*(c-a),e*(d-b))};a.prototype.calc=function(a){var b=a*a;return this.c0+this.c1*a+this.c2*b+this.c3*b*a};return THREE.Curve.create(function(a){this.points=a||[];this.closed=!1},function(a){var g=this.points,h,k;k=g.length;2>k&&console.log("duh, you need at least 2 points");a*=k-(this.closed?0:1);h=Math.floor(a);a-=h;this.closed?h+=0h&&(h=1);1e-4>k&&(k=h);1e-4>m&&(m=h);c.initNonuniformCatmullRom(l.x,p.x,n.x,g.x,k,h,m);d.initNonuniformCatmullRom(l.y,p.y,n.y,g.y,k,h,m);e.initNonuniformCatmullRom(l.z,p.z,n.z,g.z,k,h,m)}else"catmullrom"===this.type&&(k=void 0!==this.tension?this.tension:.5,c.initCatmullRom(l.x,p.x,n.x,g.x,k),d.initCatmullRom(l.y,p.y,n.y,g.y,k),e.initCatmullRom(l.z,p.z,n.z,g.z,k));return new THREE.Vector3(c.calc(a),d.calc(a),e.calc(a))})}();THREE.ClosedSplineCurve3=function(a){console.warn("THREE.ClosedSplineCurve3 has been deprecated. Please use THREE.CatmullRomCurve3.");THREE.CatmullRomCurve3.call(this,a);this.type="catmullrom";this.closed=!0};THREE.ClosedSplineCurve3.prototype=Object.create(THREE.CatmullRomCurve3.prototype);THREE.BoxGeometry=function(a,b,c,d,e,f){THREE.Geometry.call(this);this.type="BoxGeometry";this.parameters={width:a,height:b,depth:c,widthSegments:d,heightSegments:e,depthSegments:f};this.fromBufferGeometry(new THREE.BoxBufferGeometry(a,b,c,d,e,f));this.mergeVertices()};THREE.BoxGeometry.prototype=Object.create(THREE.Geometry.prototype);THREE.BoxGeometry.prototype.constructor=THREE.BoxGeometry;THREE.CubeGeometry=THREE.BoxGeometry;THREE.BoxBufferGeometry=function(a,b,c,d,e,f){function g(a,b,c,d,e,f,g,k,l,L,A){var N=f/l,M=g/L,I=f/2,O=g/2,Q=k/2;g=l+1;for(var P=L+1,T=f=0,J=new THREE.Vector3,C=0;Cm;m++){e[0]=n[g[m]];e[1]=n[g[(m+1)%3]];e.sort(c);var q=e.toString();void 0===f[q]?f[q]={vert1:e[0],vert2:e[1],face1:l,face2:void 0}:f[q].face2=l}e=[];for(q in f)if(g=f[q],void 0===g.face2||h[g.face1].normal.dot(h[g.face2].normal)<=d)l=k[g.vert1],e.push(l.x),e.push(l.y),e.push(l.z),l=k[g.vert2],e.push(l.x),e.push(l.y),e.push(l.z);this.addAttribute("position",new THREE.BufferAttribute(new Float32Array(e),3))};THREE.EdgesGeometry.prototype=Object.create(THREE.BufferGeometry.prototype);THREE.EdgesGeometry.prototype.constructor=THREE.EdgesGeometry;THREE.ExtrudeGeometry=function(a,b){"undefined"!==typeof a&&(THREE.Geometry.call(this),this.type="ExtrudeGeometry",a=Array.isArray(a)?a:[a],this.addShapeList(a,b),this.computeFaceNormals())};THREE.ExtrudeGeometry.prototype=Object.create(THREE.Geometry.prototype);THREE.ExtrudeGeometry.prototype.constructor=THREE.ExtrudeGeometry;THREE.ExtrudeGeometry.prototype.addShapeList=function(a,b){for(var c=a.length,d=0;dNumber.EPSILON){var k=Math.sqrt(h),l=Math.sqrt(f*f+g*g),h=b.x-e/k;b=b.y+d/k;f=((c.x-g/l-h)*g-(c.y+f/l-b)*f)/(d*g-e*f);c=h+d*f-a.x;a=b+e*f-a.y;d=c*c+a*a;if(2>=d)return new THREE.Vector2(c,a);d=Math.sqrt(d/2)}else a=!1,d>Number.EPSILON?f>Number.EPSILON&&(a=!0):d<-Number.EPSILON?f<-Number.EPSILON&&(a=!0):Math.sign(e)===Math.sign(g)&&(a=!0),a?(c=-e,a=d,d=Math.sqrt(h)):(c=d,a=e,d=Math.sqrt(h/2));return new THREE.Vector2(c/d,a/d)}function e(a,b){var c,d;for(C=a.length;0<=--C;){c=C;d=C-1;0>d&&(d=a.length-1);for(var e=0,f=q+2*p,e=0;eMath.abs(b.y-c.y)?[new THREE.Vector2(b.x,1-b.z),new THREE.Vector2(c.x,1-c.z),new THREE.Vector2(d.x,1-d.z),new THREE.Vector2(e.x,1-e.z)]:[new THREE.Vector2(b.y,1-b.z),new THREE.Vector2(c.y,1-c.z),new THREE.Vector2(d.y,1-d.z),new THREE.Vector2(e.y,1-e.z)]}};THREE.ShapeGeometry=function(a,b){THREE.Geometry.call(this);this.type="ShapeGeometry";!1===Array.isArray(a)&&(a=[a]);this.addShapeList(a,b);this.computeFaceNormals()};THREE.ShapeGeometry.prototype=Object.create(THREE.Geometry.prototype);THREE.ShapeGeometry.prototype.constructor=THREE.ShapeGeometry;THREE.ShapeGeometry.prototype.addShapeList=function(a,b){for(var c=0,d=a.length;cNumber.EPSILON&&(h.normalize(),d=Math.acos(THREE.Math.clamp(e[l-1].dot(e[l]),-1,1)),f[l].applyMatrix4(k.makeRotationAxis(h,d))),g[l].crossVectors(e[l],f[l]);if(c)for(d=Math.acos(THREE.Math.clamp(f[0].dot(f[b-1]),-1,1)),d/=b-1,0c&&1===a.x&&(a=new THREE.Vector2(a.x-1,a.y));0===b.x&&0===b.z&&(a=new THREE.Vector2(c/2/Math.PI+.5,a.y));return a.clone()}THREE.Geometry.call(this);this.type="PolyhedronGeometry";this.parameters={vertices:a,indices:b,radius:c,detail:d};c=c||1;d=d||0;for(var k=this,l=0,p=a.length;lq&&(.2>d&&(b[0].x+=1),.2>a&&(b[1].x+=1),.2>n&&(b[2].x+=1));l=0;for(p=this.vertices.length;ln;n++){c[0]=p[e[n]];c[1]=p[e[(n+1)%3]];c.sort(b);var m=c.toString();void 0===d[m]&&(k[2*h]=c[0],k[2*h+1]=c[1],d[m]=!0,h++)}c=new Float32Array(6*h);a=0;for(l=h;an;n++)d=f[k[2*a+n]],h=6*a+3*n,c[h+0]=d.x,c[h+1]=d.y,c[h+2]=d.z;this.addAttribute("position",new THREE.BufferAttribute(c,3))}else if(a instanceof THREE.BufferGeometry){if(null!==a.index){l=a.index.array;f=a.attributes.position;e=a.groups;h=0;0===e.length&&a.addGroup(0,l.length);k=new Uint32Array(2*l.length);g=0;for(p=e.length;gn;n++)c[0]=l[a+n],c[1]=l[a+(n+1)%3],c.sort(b),m=c.toString(),void 0===d[m]&&(k[2*h]=c[0],k[2*h+1]=c[1],d[m]=!0,h++)}c=new Float32Array(6*h);a=0;for(l=h;an;n++)h=6*a+3*n,d=k[2*a+n],c[h+0]=f.getX(d),c[h+1]=f.getY(d),c[h+2]=f.getZ(d)}else for(f=a.attributes.position.array,h=f.length/3,k=h/3,c=new Float32Array(6*h),a=0,l=k;an;n++)h=18*a+6*n,k=9*a+3*n,c[h+0]=f[k],c[h+1]=f[k+1],c[h+2]=f[k+2],d=9*a+(n+1)%3*3,c[h+3]=f[d],c[h+4]=f[d+1],c[h+5]=f[d+2];this.addAttribute("position",new THREE.BufferAttribute(c,3))}};THREE.WireframeGeometry.prototype=Object.create(THREE.BufferGeometry.prototype);THREE.WireframeGeometry.prototype.constructor=THREE.WireframeGeometry;THREE.AxisHelper=function(a){a=a||1;var b=new Float32Array([0,0,0,a,0,0,0,0,0,0,a,0,0,0,0,0,0,a]),c=new Float32Array([1,0,0,1,.6,0,0,1,0,.6,1,0,0,0,1,0,.6,1]);a=new THREE.BufferGeometry;a.addAttribute("position",new THREE.BufferAttribute(b,3));a.addAttribute("color",new THREE.BufferAttribute(c,3));b=new THREE.LineBasicMaterial({vertexColors:THREE.VertexColors});THREE.LineSegments.call(this,a,b)};THREE.AxisHelper.prototype=Object.create(THREE.LineSegments.prototype);THREE.AxisHelper.prototype.constructor=THREE.AxisHelper;THREE.ArrowHelper=function(){var a=new THREE.Geometry;a.vertices.push(new THREE.Vector3(0,0,0),new THREE.Vector3(0,1,0));var b=new THREE.CylinderGeometry(0,.5,1,5,1);b.translate(0,-.5,0);return function(c,d,e,f,g,h){THREE.Object3D.call(this);void 0===f&&(f=16776960);void 0===e&&(e=1);void 0===g&&(g=.2*e);void 0===h&&(h=.2*g);this.position.copy(d);this.line=new THREE.Line(a,new THREE.LineBasicMaterial({color:f}));this.line.matrixAutoUpdate=!1;this.add(this.line);this.cone=new THREE.Mesh(b,new THREE.MeshBasicMaterial({color:f}));this.cone.matrixAutoUpdate=!1;this.add(this.cone);this.setDirection(c);this.setLength(e,g,h)}}();THREE.ArrowHelper.prototype=Object.create(THREE.Object3D.prototype);THREE.ArrowHelper.prototype.constructor=THREE.ArrowHelper;THREE.ArrowHelper.prototype.setDirection=function(){var a=new THREE.Vector3,b;return function(c){.99999c.y?this.quaternion.set(1,0,0,0):(a.set(c.z,0,-c.x).normalize(),b=Math.acos(c.y),this.quaternion.setFromAxisAngle(a,b))}}();THREE.ArrowHelper.prototype.setLength=function(a,b,c){void 0===b&&(b=.2*a);void 0===c&&(c=.2*b);this.line.scale.set(1,Math.max(0,a-b),1);this.line.updateMatrix();this.cone.scale.set(c,b,c);this.cone.position.y=a;this.cone.updateMatrix()};THREE.ArrowHelper.prototype.setColor=function(a){this.line.material.color.set(a);this.cone.material.color.set(a)};THREE.BoxHelper=function(a){var b=new Uint16Array([0,1,1,2,2,3,3,0,4,5,5,6,6,7,7,4,0,4,1,5,2,6,3,7]),c=new Float32Array(24),d=new THREE.BufferGeometry;d.setIndex(new THREE.BufferAttribute(b,1));d.addAttribute("position",new THREE.BufferAttribute(c,3));THREE.LineSegments.call(this,d,new THREE.LineBasicMaterial({color:16776960}));void 0!==a&&this.update(a)};THREE.BoxHelper.prototype=Object.create(THREE.LineSegments.prototype);THREE.BoxHelper.prototype.constructor=THREE.BoxHelper;THREE.BoxHelper.prototype.update=function(){var a=new THREE.Box3;return function(b){a.setFromObject(b);if(!a.isEmpty()){b=a.min;var c=a.max,d=this.geometry.attributes.position,e=d.array;e[0]=c.x;e[1]=c.y;e[2]=c.z;e[3]=b.x;e[4]=c.y;e[5]=c.z;e[6]=b.x;e[7]=b.y;e[8]=c.z;e[9]=c.x;e[10]=b.y;e[11]=c.z;e[12]=c.x;e[13]=c.y;e[14]=b.z;e[15]=b.x;e[16]=c.y;e[17]=b.z;e[18]=b.x;e[19]=b.y;e[20]=b.z;e[21]=c.x;e[22]=b.y;e[23]=b.z;d.needsUpdate=!0;this.geometry.computeBoundingSphere()}}}();THREE.BoundingBoxHelper=function(a,b){var c=void 0!==b?b:8947848;this.object=a;this.box=new THREE.Box3;THREE.Mesh.call(this,new THREE.BoxGeometry(1,1,1),new THREE.MeshBasicMaterial({color:c,wireframe:!0}))};THREE.BoundingBoxHelper.prototype=Object.create(THREE.Mesh.prototype);THREE.BoundingBoxHelper.prototype.constructor=THREE.BoundingBoxHelper;THREE.BoundingBoxHelper.prototype.update=function(){this.box.setFromObject(this.object);this.box.size(this.scale);this.box.center(this.position)};THREE.CameraHelper=function(a){function b(a,b,d){c(a,d);c(b,d)}function c(a,b){d.vertices.push(new THREE.Vector3);d.colors.push(new THREE.Color(b));void 0===f[a]&&(f[a]=[]);f[a].push(d.vertices.length-1)}var d=new THREE.Geometry,e=new THREE.LineBasicMaterial({color:16777215,vertexColors:THREE.FaceColors}),f={};b("n1","n2",16755200);b("n2","n4",16755200);b("n4","n3",16755200);b("n3","n1",16755200);b("f1","f2",16755200);b("f2","f4",16755200);b("f4","f3",16755200);b("f3","f1",16755200);b("n1","f1",16755200);b("n2","f2",16755200);b("n3","f3",16755200);b("n4","f4",16755200);b("p","n1",16711680);b("p","n2",16711680);b("p","n3",16711680);b("p","n4",16711680);b("u1","u2",43775);b("u2","u3",43775);b("u3","u1",43775);b("c","t",16777215);b("p","c",3355443);b("cn1","cn2",3355443);b("cn3","cn4",3355443);b("cf1","cf2",3355443);b("cf3","cf4",3355443);THREE.LineSegments.call(this,d,e);this.camera=a;this.camera.updateProjectionMatrix();this.matrix=a.matrixWorld;this.matrixAutoUpdate=!1;this.pointMap=f;this.update()};THREE.CameraHelper.prototype=Object.create(THREE.LineSegments.prototype);THREE.CameraHelper.prototype.constructor=THREE.CameraHelper;THREE.CameraHelper.prototype.update=function(){function a(a,g,h,k){d.set(g,h,k).unproject(e);a=c[a];if(void 0!==a)for(g=0,h=a.length;gd;d++)c.faces[d].color=this.colors[4>d?0:1];d=new THREE.MeshBasicMaterial({vertexColors:THREE.FaceColors,wireframe:!0});this.lightSphere=new THREE.Mesh(c,d);this.add(this.lightSphere);this.update()};THREE.HemisphereLightHelper.prototype=Object.create(THREE.Object3D.prototype);THREE.HemisphereLightHelper.prototype.constructor=THREE.HemisphereLightHelper;THREE.HemisphereLightHelper.prototype.dispose=function(){this.lightSphere.geometry.dispose();this.lightSphere.material.dispose()};THREE.HemisphereLightHelper.prototype.update=function(){var a=new THREE.Vector3;return function(){this.colors[0].copy(this.light.color).multiplyScalar(this.light.intensity);this.colors[1].copy(this.light.groundColor).multiplyScalar(this.light.intensity);this.lightSphere.lookAt(a.setFromMatrixPosition(this.light.matrixWorld).negate());this.lightSphere.geometry.colorsNeedUpdate=!0}}();THREE.PointLightHelper=function(a,b){this.light=a;this.light.updateMatrixWorld();var c=new THREE.SphereGeometry(b,4,2),d=new THREE.MeshBasicMaterial({wireframe:!0,fog:!1});d.color.copy(this.light.color).multiplyScalar(this.light.intensity);THREE.Mesh.call(this,c,d);this.matrix=this.light.matrixWorld;this.matrixAutoUpdate=!1};THREE.PointLightHelper.prototype=Object.create(THREE.Mesh.prototype);THREE.PointLightHelper.prototype.constructor=THREE.PointLightHelper;THREE.PointLightHelper.prototype.dispose=function(){this.geometry.dispose();this.material.dispose()};THREE.PointLightHelper.prototype.update=function(){this.material.color.copy(this.light.color).multiplyScalar(this.light.intensity)};THREE.SkeletonHelper=function(a){this.bones=this.getBoneList(a);for(var b=new THREE.Geometry,c=0;ch.end&&(h.end=f);c||(c=k)}}for(k in d)h=d[k],this.createAnimation(k,h.start,h.end,a);this.firstAnimation=c};THREE.MorphBlendMesh.prototype.setAnimationDirectionForward=function(a){if(a=this.animationsMap[a])a.direction=1,a.directionBackwards=!1};THREE.MorphBlendMesh.prototype.setAnimationDirectionBackward=function(a){if(a=this.animationsMap[a])a.direction=-1,a.directionBackwards=!0};THREE.MorphBlendMesh.prototype.setAnimationFPS=function(a,b){var c=this.animationsMap[a];c&&(c.fps=b,c.duration=(c.end-c.start)/c.fps)};THREE.MorphBlendMesh.prototype.setAnimationDuration=function(a,b){var c=this.animationsMap[a];c&&(c.duration=b,c.fps=(c.end-c.start)/c.duration)};THREE.MorphBlendMesh.prototype.setAnimationWeight=function(a,b){var c=this.animationsMap[a];c&&(c.weight=b)};THREE.MorphBlendMesh.prototype.setAnimationTime=function(a,b){var c=this.animationsMap[a];c&&(c.time=b)};THREE.MorphBlendMesh.prototype.getAnimationTime=function(a){var b=0;if(a=this.animationsMap[a])b=a.time;return b};THREE.MorphBlendMesh.prototype.getAnimationDuration=function(a){var b=-1;if(a=this.animationsMap[a])b=a.duration;return b};THREE.MorphBlendMesh.prototype.playAnimation=function(a){var b=this.animationsMap[a];b?(b.time=0,b.active=!0):console.warn("THREE.MorphBlendMesh: animation["+a+"] undefined in .playAnimation()")};THREE.MorphBlendMesh.prototype.stopAnimation=function(a){if(a=this.animationsMap[a])a.active=!1};THREE.MorphBlendMesh.prototype.update=function(a){for(var b=0,c=this.animationsList.length;bd.duration||0>d.time)d.direction*=-1,d.time>d.duration&&(d.time=d.duration,d.directionBackwards=!0),0>d.time&&(d.time=0,d.directionBackwards=!1)}else d.time%=d.duration,0>d.time&&(d.time+=d.duration);var f=d.start+THREE.Math.clamp(Math.floor(d.time/e),0,d.length-1),g=d.weight;f!==d.currentFrame&&(this.morphTargetInfluences[d.lastFrame]=0,this.morphTargetInfluences[d.currentFrame]=1*g,this.morphTargetInfluences[f]=0,d.lastFrame=d.currentFrame,d.currentFrame=f);e=d.time%e/e;d.directionBackwards&&(e=1-e);d.currentFrame!==d.lastFrame?(this.morphTargetInfluences[d.currentFrame]=e*g,this.morphTargetInfluences[d.lastFrame]=(1-e)*g):this.morphTargetInfluences[d.currentFrame]=g}}};var THREEx=THREEx||{};THREEx.FullScreen=THREEx.FullScreen||{};THREEx.FullScreen.available=function(){return this._hasWebkitFullScreen||this._hasMozFullScreen};THREEx.FullScreen.activated=function(){if(this._hasWebkitFullScreen){return document.webkitIsFullScreen}else if(this._hasMozFullScreen){return document.mozFullScreen}else{console.assert(false)}};THREEx.FullScreen.request=function(element){element=element||document.body;if(this._hasWebkitFullScreen){element.webkitRequestFullScreen()}else if(this._hasMozFullScreen){element.mozRequestFullScreen()}else{console.assert(false)}};THREEx.FullScreen.cancel=function(){if(this._hasWebkitFullScreen){document.webkitCancelFullScreen()}else if(this._hasMozFullScreen){document.mozCancelFullScreen()}else{console.assert(false)}};THREEx.FullScreen._hasWebkitFullScreen="webkitCancelFullScreen"in document?true:false;THREEx.FullScreen._hasMozFullScreen="mozCancelFullScreen"in document?true:false;THREE.OrbitControls=function(object,domElement){this.object=object;this.domElement=domElement!==undefined?domElement:document;this.enabled=true;this.target=new THREE.Vector3;this.minDistance=0;this.maxDistance=Infinity;this.minZoom=0;this.maxZoom=Infinity;this.minPolarAngle=0;this.maxPolarAngle=Math.PI;this.minAzimuthAngle=-Infinity;this.maxAzimuthAngle=Infinity;this.enableDamping=false;this.dampingFactor=.25;this.enableZoom=true;this.zoomSpeed=1;this.enableRotate=true;this.rotateSpeed=1;this.enablePan=true;this.keyPanSpeed=7;this.autoRotate=false;this.autoRotateSpeed=2;this.enableKeys=true;this.keys={LEFT:37,UP:38,RIGHT:39,BOTTOM:40};this.mouseButtons={ORBIT:THREE.MOUSE.LEFT,ZOOM:THREE.MOUSE.MIDDLE, -PAN:THREE.MOUSE.RIGHT};this.target0=this.target.clone();this.position0=this.object.position.clone();this.zoom0=this.object.zoom;this.getPolarAngle=function(){return phi};this.getAzimuthalAngle=function(){return theta};this.reset=function(){scope.target.copy(scope.target0);scope.object.position.copy(scope.position0);scope.object.zoom=scope.zoom0;scope.object.updateProjectionMatrix();scope.dispatchEvent(changeEvent);scope.update();state=STATE.NONE};this.update=function(){var offset=new THREE.Vector3;var quat=(new THREE.Quaternion).setFromUnitVectors(object.up,new THREE.Vector3(0,1,0));var quatInverse=quat.clone().inverse();var lastPosition=new THREE.Vector3;var lastQuaternion=new THREE.Quaternion;return function(){var position=scope.object.position;offset.copy(position).sub(scope.target);offset.applyQuaternion(quat);spherical.setFromVector3(offset);if(scope.autoRotate&&state===STATE.NONE){rotateLeft(getAutoRotationAngle())}spherical.theta+=sphericalDelta.theta;spherical.phi+=sphericalDelta.phi;spherical.theta=Math.max(scope.minAzimuthAngle,Math.min(scope.maxAzimuthAngle,spherical.theta));spherical.phi=Math.max(scope.minPolarAngle,Math.min(scope.maxPolarAngle,spherical.phi));spherical.makeSafe();spherical.radius*=scale;spherical.radius=Math.max(scope.minDistance,Math.min(scope.maxDistance,spherical.radius));scope.target.add(panOffset);offset.setFromSpherical(spherical);offset.applyQuaternion(quatInverse);position.copy(scope.target).add(offset);scope.object.lookAt(scope.target);if(scope.enableDamping===true){sphericalDelta.theta*=1-scope.dampingFactor;sphericalDelta.phi*=1-scope.dampingFactor}else{sphericalDelta.set(0,0,0)}scale=1;panOffset.set(0,0,0);if(zoomChanged||lastPosition.distanceToSquared(scope.object.position)>EPS||8*(1-lastQuaternion.dot(scope.object.quaternion))>EPS){scope.dispatchEvent(changeEvent);lastPosition.copy(scope.object.position);lastQuaternion.copy(scope.object.quaternion);zoomChanged=false;return true}return false}}();this.dispose=function(){scope.domElement.removeEventListener("contextmenu",onContextMenu,false);scope.domElement.removeEventListener("mousedown",onMouseDown,false);scope.domElement.removeEventListener("mousewheel",onMouseWheel,false);scope.domElement.removeEventListener("MozMousePixelScroll",onMouseWheel,false);scope.domElement.removeEventListener("touchstart",onTouchStart,false);scope.domElement.removeEventListener("touchend",onTouchEnd,false);scope.domElement.removeEventListener("touchmove",onTouchMove,false);document.removeEventListener("mousemove",onMouseMove,false);document.removeEventListener("mouseup",onMouseUp,false);document.removeEventListener("mouseout",onMouseUp,false);window.removeEventListener("keydown",onKeyDown,false)};var scope=this;var changeEvent={type:"change"};var startEvent={type:"start"};var endEvent={type:"end"};var STATE={NONE:-1,ROTATE:0,DOLLY:1,PAN:2,TOUCH_ROTATE:3,TOUCH_DOLLY:4,TOUCH_PAN:5};var state=STATE.NONE;var EPS=1e-6;var spherical=new THREE.Spherical;var sphericalDelta=new THREE.Spherical;var scale=1;var panOffset=new THREE.Vector3;var zoomChanged=false;var rotateStart=new THREE.Vector2;var rotateEnd=new THREE.Vector2;var rotateDelta=new THREE.Vector2;var panStart=new THREE.Vector2;var panEnd=new THREE.Vector2;var panDelta=new THREE.Vector2;var dollyStart=new THREE.Vector2;var dollyEnd=new THREE.Vector2;var dollyDelta=new THREE.Vector2;function getAutoRotationAngle(){return 2*Math.PI/60/60*scope.autoRotateSpeed}function getZoomScale(){return Math.pow(.95,scope.zoomSpeed)}function rotateLeft(angle){sphericalDelta.theta-=angle}function rotateUp(angle){sphericalDelta.phi-=angle}var panLeft=function(){var v=new THREE.Vector3;return function panLeft(distance,objectMatrix){v.setFromMatrixColumn(objectMatrix,0);v.multiplyScalar(-distance);panOffset.add(v)}}();var panUp=function(){var v=new THREE.Vector3;return function panUp(distance,objectMatrix){v.setFromMatrixColumn(objectMatrix,1);v.multiplyScalar(distance);panOffset.add(v)}}();var pan=function(){var offset=new THREE.Vector3;return function(deltaX,deltaY){var element=scope.domElement===document?scope.domElement.body:scope.domElement;if(scope.object instanceof THREE.PerspectiveCamera){var position=scope.object.position;offset.copy(position).sub(scope.target);var targetDistance=offset.length();targetDistance*=Math.tan(scope.object.fov/2*Math.PI/180);panLeft(2*deltaX*targetDistance/element.clientHeight,scope.object.matrix);panUp(2*deltaY*targetDistance/element.clientHeight,scope.object.matrix)}else if(scope.object instanceof THREE.OrthographicCamera){panLeft(deltaX*(scope.object.right-scope.object.left)/scope.object.zoom/element.clientWidth,scope.object.matrix);panUp(deltaY*(scope.object.top-scope.object.bottom)/scope.object.zoom/element.clientHeight,scope.object.matrix)}else{console.warn("WARNING: OrbitControls.js encountered an unknown camera type - pan disabled.");scope.enablePan=false}}}();function dollyIn(dollyScale){if(scope.object instanceof THREE.PerspectiveCamera){scale/=dollyScale}else if(scope.object instanceof THREE.OrthographicCamera){scope.object.zoom=Math.max(scope.minZoom,Math.min(scope.maxZoom,scope.object.zoom*dollyScale));scope.object.updateProjectionMatrix();zoomChanged=true}else{console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.");scope.enableZoom=false}}function dollyOut(dollyScale){if(scope.object instanceof THREE.PerspectiveCamera){scale*=dollyScale}else if(scope.object instanceof THREE.OrthographicCamera){scope.object.zoom=Math.max(scope.minZoom,Math.min(scope.maxZoom,scope.object.zoom/dollyScale));scope.object.updateProjectionMatrix();zoomChanged=true}else{console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.");scope.enableZoom=false}}function handleMouseDownRotate(event){rotateStart.set(event.clientX,event.clientY)}function handleMouseDownDolly(event){dollyStart.set(event.clientX,event.clientY)}function handleMouseDownPan(event){panStart.set(event.clientX,event.clientY)}function handleMouseMoveRotate(event){rotateEnd.set(event.clientX,event.clientY);rotateDelta.subVectors(rotateEnd,rotateStart);var element=scope.domElement===document?scope.domElement.body:scope.domElement;rotateLeft(2*Math.PI*rotateDelta.x/element.clientWidth*scope.rotateSpeed);rotateUp(2*Math.PI*rotateDelta.y/element.clientHeight*scope.rotateSpeed);rotateStart.copy(rotateEnd);scope.update()}function handleMouseMoveDolly(event){dollyEnd.set(event.clientX,event.clientY);dollyDelta.subVectors(dollyEnd,dollyStart);if(dollyDelta.y>0){dollyIn(getZoomScale())}else if(dollyDelta.y<0){dollyOut(getZoomScale())}dollyStart.copy(dollyEnd);scope.update()}function handleMouseMovePan(event){panEnd.set(event.clientX,event.clientY);panDelta.subVectors(panEnd,panStart);pan(panDelta.x,panDelta.y);panStart.copy(panEnd);scope.update()}function handleMouseUp(event){}function handleMouseWheel(event){var delta=0;if(event.wheelDelta!==undefined){delta=event.wheelDelta}else if(event.detail!==undefined){delta=-event.detail}if(delta>0){dollyOut(getZoomScale())}else if(delta<0){dollyIn(getZoomScale())}scope.update()}function handleKeyDown(event){switch(event.keyCode){case scope.keys.UP:pan(0,scope.keyPanSpeed);scope.update();break;case scope.keys.BOTTOM:pan(0,-scope.keyPanSpeed);scope.update();break;case scope.keys.LEFT:pan(scope.keyPanSpeed,0);scope.update();break;case scope.keys.RIGHT:pan(-scope.keyPanSpeed,0);scope.update();break}}function handleTouchStartRotate(event){rotateStart.set(event.touches[0].pageX,event.touches[0].pageY)}function handleTouchStartDolly(event){var dx=event.touches[0].pageX-event.touches[1].pageX;var dy=event.touches[0].pageY-event.touches[1].pageY;var distance=Math.sqrt(dx*dx+dy*dy);dollyStart.set(0,distance)}function handleTouchStartPan(event){panStart.set(event.touches[0].pageX,event.touches[0].pageY)}function handleTouchMoveRotate(event){rotateEnd.set(event.touches[0].pageX,event.touches[0].pageY);rotateDelta.subVectors(rotateEnd,rotateStart);var element=scope.domElement===document?scope.domElement.body:scope.domElement;rotateLeft(2*Math.PI*rotateDelta.x/element.clientWidth*scope.rotateSpeed);rotateUp(2*Math.PI*rotateDelta.y/element.clientHeight*scope.rotateSpeed);rotateStart.copy(rotateEnd);scope.update()}function handleTouchMoveDolly(event){var dx=event.touches[0].pageX-event.touches[1].pageX;var dy=event.touches[0].pageY-event.touches[1].pageY;var distance=Math.sqrt(dx*dx+dy*dy);dollyEnd.set(0,distance);dollyDelta.subVectors(dollyEnd,dollyStart);if(dollyDelta.y>0){dollyOut(getZoomScale())}else if(dollyDelta.y<0){dollyIn(getZoomScale())}dollyStart.copy(dollyEnd);scope.update()}function handleTouchMovePan(event){panEnd.set(event.touches[0].pageX,event.touches[0].pageY);panDelta.subVectors(panEnd,panStart);pan(panDelta.x,panDelta.y);panStart.copy(panEnd);scope.update()}function handleTouchEnd(event){}function onMouseDown(event){if(scope.enabled===false)return;event.preventDefault();if(event.button===scope.mouseButtons.ORBIT){if(scope.enableRotate===false)return;handleMouseDownRotate(event);state=STATE.ROTATE}else if(event.button===scope.mouseButtons.ZOOM){if(scope.enableZoom===false)return;handleMouseDownDolly(event);state=STATE.DOLLY}else if(event.button===scope.mouseButtons.PAN){if(scope.enablePan===false)return;handleMouseDownPan(event);state=STATE.PAN}if(state!==STATE.NONE){document.addEventListener("mousemove",onMouseMove,false);document.addEventListener("mouseup",onMouseUp,false);document.addEventListener("mouseout",onMouseUp,false);scope.dispatchEvent(startEvent)}}function onMouseMove(event){if(scope.enabled===false)return;event.preventDefault();if(state===STATE.ROTATE){if(scope.enableRotate===false)return;handleMouseMoveRotate(event)}else if(state===STATE.DOLLY){if(scope.enableZoom===false)return;handleMouseMoveDolly(event)}else if(state===STATE.PAN){if(scope.enablePan===false)return;handleMouseMovePan(event)}}function onMouseUp(event){if(scope.enabled===false)return;handleMouseUp(event);document.removeEventListener("mousemove",onMouseMove,false);document.removeEventListener("mouseup",onMouseUp,false);document.removeEventListener("mouseout",onMouseUp,false);scope.dispatchEvent(endEvent);state=STATE.NONE}function onMouseWheel(event){if(scope.enabled===false||scope.enableZoom===false||state!==STATE.NONE)return;event.preventDefault();event.stopPropagation();handleMouseWheel(event);scope.dispatchEvent(startEvent);scope.dispatchEvent(endEvent)}function onKeyDown(event){if(scope.enabled===false||scope.enableKeys===false||scope.enablePan===false)return;handleKeyDown(event)}function onTouchStart(event){if(scope.enabled===false)return;switch(event.touches.length){case 1:if(scope.enableRotate===false)return;handleTouchStartRotate(event);state=STATE.TOUCH_ROTATE;break;case 2:if(scope.enableZoom===false)return;handleTouchStartDolly(event);state=STATE.TOUCH_DOLLY;break;case 3:if(scope.enablePan===false)return;handleTouchStartPan(event);state=STATE.TOUCH_PAN;break;default:state=STATE.NONE}if(state!==STATE.NONE){scope.dispatchEvent(startEvent)}}function onTouchMove(event){if(scope.enabled===false)return;event.preventDefault();event.stopPropagation();switch(event.touches.length){case 1:if(scope.enableRotate===false)return;if(state!==STATE.TOUCH_ROTATE)return;handleTouchMoveRotate(event);break;case 2:if(scope.enableZoom===false)return;if(state!==STATE.TOUCH_DOLLY)return;handleTouchMoveDolly(event);break;case 3:if(scope.enablePan===false)return;if(state!==STATE.TOUCH_PAN)return;handleTouchMovePan(event);break;default:state=STATE.NONE}}function onTouchEnd(event){if(scope.enabled===false)return;handleTouchEnd(event);scope.dispatchEvent(endEvent);state=STATE.NONE}function onContextMenu(event){event.preventDefault()}scope.domElement.addEventListener("contextmenu",onContextMenu,false);scope.domElement.addEventListener("mousedown",onMouseDown,false);scope.domElement.addEventListener("mousewheel",onMouseWheel,false);scope.domElement.addEventListener("MozMousePixelScroll",onMouseWheel,false);scope.domElement.addEventListener("touchstart",onTouchStart,false);scope.domElement.addEventListener("touchend",onTouchEnd,false);scope.domElement.addEventListener("touchmove",onTouchMove,false);window.addEventListener("keydown",onKeyDown,false);this.update()};THREE.OrbitControls.prototype=Object.create(THREE.EventDispatcher.prototype);THREE.OrbitControls.prototype.constructor=THREE.OrbitControls;Object.defineProperties(THREE.OrbitControls.prototype,{center:{get:function(){console.warn("THREE.OrbitControls: .center has been renamed to .target");return this.target}},noZoom:{get:function(){console.warn("THREE.OrbitControls: .noZoom has been deprecated. Use .enableZoom instead.");return!this.enableZoom},set:function(value){console.warn("THREE.OrbitControls: .noZoom has been deprecated. Use .enableZoom instead.");this.enableZoom=!value}},noRotate:{get:function(){console.warn("THREE.OrbitControls: .noRotate has been deprecated. Use .enableRotate instead.");return!this.enableRotate},set:function(value){console.warn("THREE.OrbitControls: .noRotate has been deprecated. Use .enableRotate instead.");this.enableRotate=!value}},noPan:{get:function(){console.warn("THREE.OrbitControls: .noPan has been deprecated. Use .enablePan instead.");return!this.enablePan},set:function(value){console.warn("THREE.OrbitControls: .noPan has been deprecated. Use .enablePan instead.");this.enablePan=!value}},noKeys:{get:function(){console.warn("THREE.OrbitControls: .noKeys has been deprecated. Use .enableKeys instead.");return!this.enableKeys},set:function(value){console.warn("THREE.OrbitControls: .noKeys has been deprecated. Use .enableKeys instead.");this.enableKeys=!value}},staticMoving:{get:function(){console.warn("THREE.OrbitControls: .staticMoving has been deprecated. Use .enableDamping instead.");return!this.constraint.enableDamping},set:function(value){console.warn("THREE.OrbitControls: .staticMoving has been deprecated. Use .enableDamping instead.");this.constraint.enableDamping=!value}},dynamicDampingFactor:{get:function(){console.warn("THREE.OrbitControls: .dynamicDampingFactor has been renamed. Use .dampingFactor instead.");return this.constraint.dampingFactor},set:function(value){console.warn("THREE.OrbitControls: .dynamicDampingFactor has been renamed. Use .dampingFactor instead.");this.constraint.dampingFactor=value}}});"use strict";void 0===Date.now&&(Date.now=function(){return(new Date).valueOf()});var TWEEN=TWEEN||function(){var a=[];return{REVISION:"14",getAll:function(){return a},removeAll:function(){a=[]},add:function(c){a.push(c)},remove:function(c){c=a.indexOf(c);-1!==c&&a.splice(c,1)},update:function(c){if(0===a.length)return!1;for(var b=0,c=void 0!==c?c:"undefined"!==typeof window&&void 0!==window.performance&&void 0!==window.performance.now?window.performance.now():Date.now();b(a*=2)?.5*a*a:-.5*(--a*(a-2)-1)}},Cubic:{In:function(a){return a*a*a},Out:function(a){return--a*a*a+1},InOut:function(a){return 1>(a*=2)?.5*a*a*a:.5*((a-=2)*a*a+2)}},Quartic:{In:function(a){return a*a*a*a},Out:function(a){return 1- --a*a*a*a},InOut:function(a){return 1>(a*=2)?.5*a*a*a*a:-.5*((a-=2)*a*a*a-2)}},Quintic:{In:function(a){return a*a*a*a*a},Out:function(a){return--a*a*a*a*a+1},InOut:function(a){return 1>(a*=2)?.5*a*a*a*a*a:.5*((a-=2)*a*a*a*a+2)}},Sinusoidal:{In:function(a){return 1-Math.cos(a*Math.PI/2)},Out:function(a){return Math.sin(a*Math.PI/2)},InOut:function(a){return.5*(1-Math.cos(Math.PI*a))}},Exponential:{In:function(a){return 0===a?0:Math.pow(1024,a-1)},Out:function(a){return 1===a?1:1-Math.pow(2,-10*a)},InOut:function(a){return 0===a?0:1===a?1:1>(a*=2)?.5*Math.pow(1024,a-1):.5*(-Math.pow(2,-10*(a-1))+2)}},Circular:{In:function(a){return 1-Math.sqrt(1-a*a)},Out:function(a){return Math.sqrt(1- --a*a)},InOut:function(a){return 1>(a*=2)?-.5*(Math.sqrt(1-a*a)-1):.5*(Math.sqrt(1-(a-=2)*a)+1)}},Elastic:{In:function(a){var c,b=.1;if(0===a)return 0;if(1===a)return 1;!b||1>b?(b=1,c=.1):c=.4*Math.asin(1/b)/(2*Math.PI);return-(b*Math.pow(2,10*(a-=1))*Math.sin((a-c)*2*Math.PI/.4))},Out:function(a){var c,b=.1;if(0===a)return 0;if(1===a)return 1;!b||1>b?(b=1,c=.1):c=.4*Math.asin(1/b)/(2*Math.PI);return b*Math.pow(2,-10*a)*Math.sin((a-c)*2*Math.PI/.4)+1},InOut:function(a){var c,b=.1;if(0===a)return 0;if(1===a)return 1;!b||1>b?(b=1,c=.1):c=.4*Math.asin(1/b)/(2*Math.PI);return 1>(a*=2)?-.5*b*Math.pow(2,10*(a-=1))*Math.sin((a-c)*2*Math.PI/.4):.5*b*Math.pow(2,-10*(a-=1))*Math.sin((a-c)*2*Math.PI/.4)+1}},Back:{In:function(a){return a*a*(2.70158*a-1.70158)},Out:function(a){return--a*a*(2.70158*a+1.70158)+1},InOut:function(a){return 1>(a*=2)?.5*a*a*(3.5949095*a-2.5949095):.5*((a-=2)*a*(3.5949095*a+2.5949095)+2)}},Bounce:{In:function(a){return 1-TWEEN.Easing.Bounce.Out(1-a)},Out:function(a){return a<1/2.75?7.5625*a*a:a<2/2.75?7.5625*(a-=1.5/2.75)*a+.75:a<2.5/2.75?7.5625*(a-=2.25/2.75)*a+.9375:7.5625*(a-=2.625/2.75)*a+.984375},InOut:function(a){return.5>a?.5*TWEEN.Easing.Bounce.In(2*a):.5*TWEEN.Easing.Bounce.Out(2*a-1)+.5}}};TWEEN.Interpolation={Linear:function(a,c){var b=a.length-1,d=b*c,e=Math.floor(d),g=TWEEN.Interpolation.Utils.Linear;return 0>c?g(a[0],a[1],d):1b?b:e+1],d-e)},Bezier:function(a,c){var b=0,d=a.length-1,e=Math.pow,g=TWEEN.Interpolation.Utils.Bernstein,h;for(h=0;h<=d;h++)b+=e(1-c,d-h)*e(c,h)*a[h]*g(d,h);return b},CatmullRom:function(a,c){var b=a.length-1,d=b*c,e=Math.floor(d),g=TWEEN.Interpolation.Utils.CatmullRom;return a[0]===a[b]?(0>c&&(e=Math.floor(d=b*(1+c))),g(a[(e-1+b)%b],a[e],a[(e+1)%b],a[(e+2)%b],d-e)):0>c?a[0]-(g(a[0],a[0],a[1],a[1],-d)-a[0]):1this.__max&&(a=this.__max);void 0!==this.__step&&0!=a%this.__step&&(a=Math.round(a/this.__step)*this.__step);return e.superclass.prototype.setValue.call(this,a)},min:function(a){this.__min=a;return this},max:function(a){this.__max=a;return this},step:function(a){this.__impliedStep=this.__step=a;this.__precision=d(a);return this}});return e}(dat.controllers.Controller,dat.utils.common);dat.controllers.NumberControllerBox=function(f,a,d){var e=function(c,b,f){function q(){var a=parseFloat(n.__input.value);d.isNaN(a)||n.setValue(a)}function l(a){var b=u-a.clientY;n.setValue(n.getValue()+b*n.__impliedStep);u=a.clientY}function r(){a.unbind(window,"mousemove",l);a.unbind(window,"mouseup",r)}this.__truncationSuspended=!1;e.superclass.call(this,c,b,f);var n=this,u;this.__input=document.createElement("input");this.__input.setAttribute("type","text");a.bind(this.__input,"change",q);a.bind(this.__input,"blur",function(){q();n.__onFinishChange&&n.__onFinishChange.call(n,n.getValue())});a.bind(this.__input,"mousedown",function(b){a.bind(window,"mousemove",l);a.bind(window,"mouseup",r);u=b.clientY});a.bind(this.__input,"keydown",function(a){13===a.keyCode&&(n.__truncationSuspended=!0,this.blur(),n.__truncationSuspended=!1)});this.updateDisplay();this.domElement.appendChild(this.__input)};e.superclass=f;d.extend(e.prototype,f.prototype,{updateDisplay:function(){var a=this.__input,b;if(this.__truncationSuspended)b=this.getValue();else{b=this.getValue();var d=Math.pow(10,this.__precision);b=Math.round(b*d)/d}a.value=b;return e.superclass.prototype.updateDisplay.call(this)}});return e}(dat.controllers.NumberController,dat.dom.dom,dat.utils.common);dat.controllers.NumberControllerSlider=function(f,a,d,e,c){function b(a,b,c,e,d){return e+(a-b)/(c-b)*(d-e)}var p=function(c,e,d,f,u){function A(c){c.preventDefault();var e=a.getOffset(k.__background),d=a.getWidth(k.__background);k.setValue(b(c.clientX,e.left,e.left+d,k.__min,k.__max));return!1}function g(){a.unbind(window,"mousemove",A);a.unbind(window,"mouseup",g);k.__onFinishChange&&k.__onFinishChange.call(k,k.getValue())}p.superclass.call(this,c,e,{min:d,max:f,step:u});var k=this;this.__background=document.createElement("div");this.__foreground=document.createElement("div");a.bind(this.__background,"mousedown",function(b){a.bind(window,"mousemove",A);a.bind(window,"mouseup",g);A(b)});a.addClass(this.__background,"slider");a.addClass(this.__foreground,"slider-fg");this.updateDisplay();this.__background.appendChild(this.__foreground);this.domElement.appendChild(this.__background)};p.superclass=f;p.useDefaultStyles=function(){d.inject(c)};e.extend(p.prototype,f.prototype,{updateDisplay:function(){var a=(this.getValue()-this.__min)/(this.__max-this.__min);this.__foreground.style.width=100*a+"%";return p.superclass.prototype.updateDisplay.call(this)}});return p}(dat.controllers.NumberController,dat.dom.dom,dat.utils.css,dat.utils.common,"/**\n * dat-gui JavaScript Controller Library\n * http://code.google.com/p/dat-gui\n *\n * Copyright 2011 Data Arts Team, Google Creative Lab\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n */\n\n.slider {\n box-shadow: inset 0 2px 4px rgba(0,0,0,0.15);\n height: 1em;\n border-radius: 1em;\n background-color: #eee;\n padding: 0 0.5em;\n overflow: hidden;\n}\n\n.slider-fg {\n padding: 1px 0 2px 0;\n background-color: #aaa;\n height: 1em;\n margin-left: -0.5em;\n padding-right: 0.5em;\n border-radius: 1em 0 0 1em;\n}\n\n.slider-fg:after {\n display: inline-block;\n border-radius: 1em;\n background-color: #fff;\n border: 1px solid #aaa;\n content: '';\n float: right;\n margin-right: -1em;\n margin-top: -1px;\n height: 0.9em;\n width: 0.9em;\n}");dat.controllers.FunctionController=function(f,a,d){var e=function(c,b,d){e.superclass.call(this,c,b);var f=this;this.__button=document.createElement("div");this.__button.innerHTML=void 0===d?"Fire":d;a.bind(this.__button,"click",function(a){a.preventDefault();f.fire();return!1});a.addClass(this.__button,"button");this.domElement.appendChild(this.__button)};e.superclass=f;d.extend(e.prototype,f.prototype,{fire:function(){this.__onChange&&this.__onChange.call(this);this.getValue().call(this.object);this.__onFinishChange&&this.__onFinishChange.call(this,this.getValue())}});return e}(dat.controllers.Controller,dat.dom.dom,dat.utils.common);dat.controllers.BooleanController=function(f,a,d){var e=function(c,b){e.superclass.call(this,c,b);var d=this;this.__prev=this.getValue();this.__checkbox=document.createElement("input");this.__checkbox.setAttribute("type","checkbox");a.bind(this.__checkbox,"change",function(){d.setValue(!d.__prev)},!1);this.domElement.appendChild(this.__checkbox);this.updateDisplay()};e.superclass=f;d.extend(e.prototype,f.prototype,{setValue:function(a){a=e.superclass.prototype.setValue.call(this,a);this.__onFinishChange&&this.__onFinishChange.call(this,this.getValue());this.__prev=this.getValue();return a},updateDisplay:function(){!0===this.getValue()?(this.__checkbox.setAttribute("checked","checked"),this.__checkbox.checked=!0):this.__checkbox.checked=!1;return e.superclass.prototype.updateDisplay.call(this)}});return e; + temperatureString: function(value){ + if(!value){return "NA"} + return numeral(value).format('0,000') + "°C" + }, -}(dat.controllers.Controller,dat.dom.dom,dat.utils.common);dat.color.toString=function(f){return function(a){if(1==a.a||f.isUndefined(a.a)){for(a=a.hex.toString(16);6>a.length;)a="0"+a;return"#"+a}return"rgba("+Math.round(a.r)+","+Math.round(a.g)+","+Math.round(a.b)+","+a.a+")"}}(dat.utils.common);dat.color.interpret=function(f,a){var d,e,c=[{litmus:a.isString,conversions:{THREE_CHAR_HEX:{read:function(a){a=a.match(/^#([A-F0-9])([A-F0-9])([A-F0-9])$/i);return null===a?!1:{space:"HEX",hex:parseInt("0x"+a[1].toString()+a[1].toString()+a[2].toString()+a[2].toString()+a[3].toString()+a[3].toString())}},write:f},SIX_CHAR_HEX:{read:function(a){a=a.match(/^#([A-F0-9]{6})$/i);return null===a?!1:{space:"HEX",hex:parseInt("0x"+a[1].toString())}},write:f},CSS_RGB:{read:function(a){a=a.match(/^rgb\(\s*(.+)\s*,\s*(.+)\s*,\s*(.+)\s*\)/);return null===a?!1:{space:"RGB",r:parseFloat(a[1]),g:parseFloat(a[2]),b:parseFloat(a[3])}},write:f},CSS_RGBA:{read:function(a){a=a.match(/^rgba\(\s*(.+)\s*,\s*(.+)\s*,\s*(.+)\s*\,\s*(.+)\s*\)/);return null===a?!1:{space:"RGB",r:parseFloat(a[1]),g:parseFloat(a[2]),b:parseFloat(a[3]),a:parseFloat(a[4])}},write:f}}},{litmus:a.isNumber,conversions:{HEX:{read:function(a){return{space:"HEX",hex:a,conversionName:"HEX"}},write:function(a){return a.hex}}}},{litmus:a.isArray,conversions:{RGB_ARRAY:{read:function(a){return 3!=a.length?!1:{space:"RGB",r:a[0],g:a[1],b:a[2]}},write:function(a){return[a.r,a.g,a.b]}},RGBA_ARRAY:{read:function(a){return 4!=a.length?!1:{space:"RGB",r:a[0],g:a[1],b:a[2],a:a[3]}},write:function(a){return[a.r,a.g,a.b,a.a]}}}},{litmus:a.isObject,conversions:{RGBA_OBJ:{read:function(b){return a.isNumber(b.r)&&a.isNumber(b.g)&&a.isNumber(b.b)&&a.isNumber(b.a)?{space:"RGB",r:b.r,g:b.g,b:b.b,a:b.a}:!1},write:function(a){return{r:a.r,g:a.g,b:a.b,a:a.a}}},RGB_OBJ:{read:function(b){return a.isNumber(b.r)&&a.isNumber(b.g)&&a.isNumber(b.b)?{space:"RGB",r:b.r,g:b.g,b:b.b}:!1},write:function(a){return{r:a.r,g:a.g,b:a.b}}},HSVA_OBJ:{read:function(b){return a.isNumber(b.h)&&a.isNumber(b.s)&&a.isNumber(b.v)&&a.isNumber(b.a)?{space:"HSV",h:b.h,s:b.s,v:b.v,a:b.a}:!1},write:function(a){return{h:a.h,s:a.s,v:a.v,a:a.a}}},HSV_OBJ:{read:function(b){return a.isNumber(b.h)&&a.isNumber(b.s)&&a.isNumber(b.v)?{space:"HSV",h:b.h,s:b.s,v:b.v}:!1},write:function(a){return{h:a.h,s:a.s,v:a.v}}}}}];return function(){e=!1;var b=1\n\n Here\'s the new load parameter for your GUI\'s constructor:\n\n \n\n
    \n\n Automatically save\n values to localStorage on exit.\n\n
    The values saved to localStorage will\n override those passed to dat.GUI\'s constructor. This makes it\n easier to work incrementally, but localStorage is fragile,\n and your friends may not see the same values you do.\n \n
    \n \n
    \n\n',".dg {\n /** Clear list styles */\n /* Auto-place container */\n /* Auto-placed GUI's */\n /* Line items that don't contain folders. */\n /** Folder names */\n /** Hides closed items */\n /** Controller row */\n /** Name-half (left) */\n /** Controller-half (right) */\n /** Controller placement */\n /** Shorter number boxes when slider is present. */\n /** Ensure the entire boolean and function row shows a hand */ }\n .dg ul {\n list-style: none;\n margin: 0;\n padding: 0;\n width: 100%;\n clear: both; }\n .dg.ac {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n height: 0;\n z-index: 0; }\n .dg:not(.ac) .main {\n /** Exclude mains in ac so that we don't hide close button */\n overflow: hidden; }\n .dg.main {\n -webkit-transition: opacity 0.1s linear;\n -o-transition: opacity 0.1s linear;\n -moz-transition: opacity 0.1s linear;\n transition: opacity 0.1s linear; }\n .dg.main.taller-than-window {\n overflow-y: auto; }\n .dg.main.taller-than-window .close-button {\n opacity: 1;\n /* TODO, these are style notes */\n margin-top: -1px;\n border-top: 1px solid #2c2c2c; }\n .dg.main ul.closed .close-button {\n opacity: 1 !important; }\n .dg.main:hover .close-button,\n .dg.main .close-button.drag {\n opacity: 1; }\n .dg.main .close-button {\n /*opacity: 0;*/\n -webkit-transition: opacity 0.1s linear;\n -o-transition: opacity 0.1s linear;\n -moz-transition: opacity 0.1s linear;\n transition: opacity 0.1s linear;\n border: 0;\n position: absolute;\n line-height: 19px;\n height: 20px;\n /* TODO, these are style notes */\n cursor: pointer;\n text-align: center;\n background-color: #000; }\n .dg.main .close-button:hover {\n background-color: #111; }\n .dg.a {\n float: right;\n margin-right: 15px;\n overflow-x: hidden; }\n .dg.a.has-save > ul {\n margin-top: 27px; }\n .dg.a.has-save > ul.closed {\n margin-top: 0; }\n .dg.a .save-row {\n position: fixed;\n top: 0;\n z-index: 1002; }\n .dg li {\n -webkit-transition: height 0.1s ease-out;\n -o-transition: height 0.1s ease-out;\n -moz-transition: height 0.1s ease-out;\n transition: height 0.1s ease-out; }\n .dg li:not(.folder) {\n cursor: auto;\n height: 27px;\n line-height: 27px;\n overflow: hidden;\n padding: 0 4px 0 5px; }\n .dg li.folder {\n padding: 0;\n border-left: 4px solid rgba(0, 0, 0, 0); }\n .dg li.title {\n cursor: pointer;\n margin-left: -4px; }\n .dg .closed li:not(.title),\n .dg .closed ul li,\n .dg .closed ul li > * {\n height: 0;\n overflow: hidden;\n border: 0; }\n .dg .cr {\n clear: both;\n padding-left: 3px;\n height: 27px; }\n .dg .property-name {\n cursor: default;\n float: left;\n clear: left;\n width: 40%;\n overflow: hidden;\n text-overflow: ellipsis; }\n .dg .c {\n float: left;\n width: 60%; }\n .dg .c input[type=text] {\n border: 0;\n margin-top: 4px;\n padding: 3px;\n width: 100%;\n float: right; }\n .dg .has-slider input[type=text] {\n width: 30%;\n /*display: none;*/\n margin-left: 0; }\n .dg .slider {\n float: left;\n width: 66%;\n margin-left: -5px;\n margin-right: 0;\n height: 19px;\n margin-top: 4px; }\n .dg .slider-fg {\n height: 100%; }\n .dg .c input[type=checkbox] {\n margin-top: 9px; }\n .dg .c select {\n margin-top: 5px; }\n .dg .cr.function,\n .dg .cr.function .property-name,\n .dg .cr.function *,\n .dg .cr.boolean,\n .dg .cr.boolean * {\n cursor: pointer; }\n .dg .selector {\n display: none;\n position: absolute;\n margin-left: -9px;\n margin-top: 23px;\n z-index: 10; }\n .dg .c:hover .selector,\n .dg .selector.drag {\n display: block; }\n .dg li.save-row {\n padding: 0; }\n .dg li.save-row .button {\n display: inline-block;\n padding: 0px 6px; }\n .dg.dialogue {\n background-color: #222;\n width: 460px;\n padding: 15px;\n font-size: 13px;\n line-height: 15px; }\n\n/* TODO Separate style and structure */\n#dg-new-constructor {\n padding: 10px;\n color: #222;\n font-family: Monaco, monospace;\n font-size: 10px;\n border: 0;\n resize: none;\n box-shadow: inset 1px 1px 1px #888;\n word-wrap: break-word;\n margin: 12px 0;\n display: block;\n width: 440px;\n overflow-y: scroll;\n height: 100px;\n position: relative; }\n\n#dg-local-explain {\n display: none;\n font-size: 11px;\n line-height: 17px;\n border-radius: 3px;\n background-color: #333;\n padding: 8px;\n margin-top: 10px; }\n #dg-local-explain code {\n font-size: 10px; }\n\n#dat-gui-save-locally {\n display: none; }\n\n/** Main type */\n.dg {\n color: #eee;\n font: 11px 'Lucida Grande', sans-serif;\n text-shadow: 0 -1px 0 #111;\n /** Auto place */\n /* Controller row,
  • */\n /** Controllers */ }\n .dg.main {\n /** Scrollbar */ }\n .dg.main::-webkit-scrollbar {\n width: 5px;\n background: #1a1a1a; }\n .dg.main::-webkit-scrollbar-corner {\n height: 0;\n display: none; }\n .dg.main::-webkit-scrollbar-thumb {\n border-radius: 5px;\n background: #676767; }\n .dg li:not(.folder) {\n background: #1a1a1a;\n border-bottom: 1px solid #2c2c2c; }\n .dg li.save-row {\n line-height: 25px;\n background: #dad5cb;\n border: 0; }\n .dg li.save-row select {\n margin-left: 5px;\n width: 108px; }\n .dg li.save-row .button {\n margin-left: 5px;\n margin-top: 1px;\n border-radius: 2px;\n font-size: 9px;\n line-height: 7px;\n padding: 4px 4px 5px 4px;\n background: #c5bdad;\n color: #fff;\n text-shadow: 0 1px 0 #b0a58f;\n box-shadow: 0 -1px 0 #b0a58f;\n cursor: pointer; }\n .dg li.save-row .button.gears {\n background: #c5bdad url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAANCAYAAAB/9ZQ7AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAQJJREFUeNpiYKAU/P//PwGIC/ApCABiBSAW+I8AClAcgKxQ4T9hoMAEUrxx2QSGN6+egDX+/vWT4e7N82AMYoPAx/evwWoYoSYbACX2s7KxCxzcsezDh3evFoDEBYTEEqycggWAzA9AuUSQQgeYPa9fPv6/YWm/Acx5IPb7ty/fw+QZblw67vDs8R0YHyQhgObx+yAJkBqmG5dPPDh1aPOGR/eugW0G4vlIoTIfyFcA+QekhhHJhPdQxbiAIguMBTQZrPD7108M6roWYDFQiIAAv6Aow/1bFwXgis+f2LUAynwoIaNcz8XNx3Dl7MEJUDGQpx9gtQ8YCueB+D26OECAAQDadt7e46D42QAAAABJRU5ErkJggg==) 2px 1px no-repeat;\n height: 7px;\n width: 8px; }\n .dg li.save-row .button:hover {\n background-color: #bab19e;\n box-shadow: 0 -1px 0 #b0a58f; }\n .dg li.folder {\n border-bottom: 0; }\n .dg li.title {\n padding-left: 16px;\n background: black url(data:image/gif;base64,R0lGODlhBQAFAJEAAP////Pz8////////yH5BAEAAAIALAAAAAAFAAUAAAIIlI+hKgFxoCgAOw==) 6px 10px no-repeat;\n cursor: pointer;\n border-bottom: 1px solid rgba(255, 255, 255, 0.2); }\n .dg .closed li.title {\n background-image: url(data:image/gif;base64,R0lGODlhBQAFAJEAAP////Pz8////////yH5BAEAAAIALAAAAAAFAAUAAAIIlGIWqMCbWAEAOw==); }\n .dg .cr.boolean {\n border-left: 3px solid #806787; }\n .dg .cr.function {\n border-left: 3px solid #e61d5f; }\n .dg .cr.number {\n border-left: 3px solid #2fa1d6; }\n .dg .cr.number input[type=text] {\n color: #2fa1d6; }\n .dg .cr.string {\n border-left: 3px solid #1ed36f; }\n .dg .cr.string input[type=text] {\n color: #1ed36f; }\n .dg .cr.function:hover, .dg .cr.boolean:hover {\n background: #111; }\n .dg .c input[type=text] {\n background: #303030;\n outline: none; }\n .dg .c input[type=text]:hover {\n background: #3c3c3c; }\n .dg .c input[type=text]:focus {\n background: #494949;\n color: #fff; }\n .dg .c .slider {\n background: #303030;\n cursor: ew-resize; }\n .dg .c .slider-fg {\n background: #2fa1d6; }\n .dg .c .slider:hover {\n background: #3c3c3c; }\n .dg .c .slider:hover .slider-fg {\n background: #44abda; }\n",dat.controllers.factory=function(f,a,d,e,c,b,p){return function(q,l,r,n){var u=q[l];if(p.isArray(r)||p.isObject(r))return new f(q,l,r);if(p.isNumber(u))return p.isNumber(r)&&p.isNumber(n)?new d(q,l,r,n):new a(q,l,{min:r,max:n});if(p.isString(u))return new e(q,l);if(p.isFunction(u))return new c(q,l,"");if(p.isBoolean(u))return new b(q,l)}}(dat.controllers.OptionController,dat.controllers.NumberControllerBox,dat.controllers.NumberControllerSlider,dat.controllers.StringController=function(f,a,d){var e=function(c,b){function d(){f.setValue(f.__input.value)}e.superclass.call(this,c,b);var f=this;this.__input=document.createElement("input");this.__input.setAttribute("type","text");a.bind(this.__input,"keyup",d);a.bind(this.__input,"change",d);a.bind(this.__input,"blur",function(){f.__onFinishChange&&f.__onFinishChange.call(f,f.getValue())});a.bind(this.__input,"keydown",function(a){13===a.keyCode&&this.blur()});this.updateDisplay();this.domElement.appendChild(this.__input)};e.superclass=f;d.extend(e.prototype,f.prototype,{updateDisplay:function(){a.isActive(this.__input)||(this.__input.value=this.getValue());return e.superclass.prototype.updateDisplay.call(this)}});return e}(dat.controllers.Controller,dat.dom.dom,dat.utils.common),dat.controllers.FunctionController,dat.controllers.BooleanController,dat.utils.common),dat.controllers.Controller,dat.controllers.BooleanController,dat.controllers.FunctionController,dat.controllers.NumberControllerBox,dat.controllers.NumberControllerSlider,dat.controllers.OptionController,dat.controllers.ColorController=function(f,a,d,e,c){function b(a,b,d,e){a.style.background="";c.each(l,function(c){a.style.cssText+="background: "+c+"linear-gradient("+b+", "+d+" 0%, "+e+" 100%); "})}function p(a){a.style.background="";a.style.cssText+="background: -moz-linear-gradient(top, #ff0000 0%, #ff00ff 17%, #0000ff 34%, #00ffff 50%, #00ff00 67%, #ffff00 84%, #ff0000 100%);";a.style.cssText+="background: -webkit-linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);";a.style.cssText+="background: -o-linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);";a.style.cssText+="background: -ms-linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);";a.style.cssText+="background: linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);"}var q=function(f,n){function u(b){v(b);a.bind(window,"mousemove",v);a.bind(window,"mouseup",l)}function l(){a.unbind(window,"mousemove",v);a.unbind(window,"mouseup",l)}function g(){var a=e(this.value);!1!==a?(t.__color.__state=a,t.setValue(t.__color.toOriginal())):this.value=t.__color.toString()}function k(){a.unbind(window,"mousemove",w);a.unbind(window,"mouseup",k)}function v(b){b.preventDefault();var c=a.getWidth(t.__saturation_field),d=a.getOffset(t.__saturation_field),e=(b.clientX-d.left+document.body.scrollLeft)/c;b=1-(b.clientY-d.top+document.body.scrollTop)/c;1b&&(b=0);1e&&(e=0);t.__color.v=b;t.__color.s=e;t.setValue(t.__color.toOriginal());return!1}function w(b){b.preventDefault();var c=a.getHeight(t.__hue_field),d=a.getOffset(t.__hue_field);b=1-(b.clientY-d.top+document.body.scrollTop)/c;1b&&(b=0);t.__color.h=360*b;t.setValue(t.__color.toOriginal());return!1}q.superclass.call(this,f,n);this.__color=new d(this.getValue());this.__temp=new d(0);var t=this;this.domElement=document.createElement("div");a.makeSelectable(this.domElement,!1);this.__selector=document.createElement("div");this.__selector.className="selector";this.__saturation_field=document.createElement("div");this.__saturation_field.className="saturation-field";this.__field_knob=document.createElement("div");this.__field_knob.className="field-knob";this.__field_knob_border="2px solid ";this.__hue_knob=document.createElement("div");this.__hue_knob.className="hue-knob";this.__hue_field=document.createElement("div");this.__hue_field.className="hue-field";this.__input=document.createElement("input");this.__input.type="text";this.__input_textShadow="0 1px 1px ";a.bind(this.__input,"keydown",function(a){13===a.keyCode&&g.call(this)});a.bind(this.__input,"blur",g);a.bind(this.__selector,"mousedown",function(b){a.addClass(this,"drag").bind(window,"mouseup",function(b){a.removeClass(t.__selector,"drag")})});var y=document.createElement("div");c.extend(this.__selector.style,{width:"122px",height:"102px",padding:"3px",backgroundColor:"#222",boxShadow:"0px 1px 3px rgba(0,0,0,0.3)"});c.extend(this.__field_knob.style,{position:"absolute",width:"12px",height:"12px",border:this.__field_knob_border+(.5>this.__color.v?"#fff":"#000"),boxShadow:"0px 1px 3px rgba(0,0,0,0.5)",borderRadius:"12px",zIndex:1});c.extend(this.__hue_knob.style,{position:"absolute",width:"15px",height:"2px",borderRight:"4px solid #fff",zIndex:1});c.extend(this.__saturation_field.style,{width:"100px",height:"100px",border:"1px solid #555",marginRight:"3px",display:"inline-block",cursor:"pointer"});c.extend(y.style,{width:"100%",height:"100%",background:"none"});b(y,"top","rgba(0,0,0,0)","#000");c.extend(this.__hue_field.style,{width:"15px",height:"100px",display:"inline-block",border:"1px solid #555",cursor:"ns-resize"});p(this.__hue_field);c.extend(this.__input.style,{outline:"none",textAlign:"center",color:"#fff",border:0,fontWeight:"bold",textShadow:this.__input_textShadow+"rgba(0,0,0,0.7)"});a.bind(this.__saturation_field,"mousedown",u);a.bind(this.__field_knob,"mousedown",u);a.bind(this.__hue_field,"mousedown",function(b){w(b);a.bind(window,"mousemove",w);a.bind(window,"mouseup",k)});this.__saturation_field.appendChild(y);this.__selector.appendChild(this.__field_knob);this.__selector.appendChild(this.__saturation_field);this.__selector.appendChild(this.__hue_field);this.__hue_field.appendChild(this.__hue_knob);this.domElement.appendChild(this.__input);this.domElement.appendChild(this.__selector);this.updateDisplay()};q.superclass=f;c.extend(q.prototype,f.prototype,{updateDisplay:function(){var a=e(this.getValue());if(!1!==a){var f=!1;c.each(d.COMPONENTS,function(b){if(!c.isUndefined(a[b])&&!c.isUndefined(this.__color.__state[b])&&a[b]!==this.__color.__state[b])return f=!0,{}},this);f&&c.extend(this.__color.__state,a)}c.extend(this.__temp.__state,this.__color.__state);this.__temp.a=1;var l=.5>this.__color.v||.5a&&(a+=1);return{h:360*a,s:c/b,v:b/255}},rgb_to_hex:function(a,d,e){a=this.hex_with_component(0,2,a);a=this.hex_with_component(a,1,d);return a=this.hex_with_component(a,0,e)},component_from_hex:function(a,d){return a>>8*d&255},hex_with_component:function(a,d,e){return e<<(f=8*d)|a&~(255<0){this.buildRelativePositionRequestsForOrbitPatches(requestParams,"targetCurrentOrbit",positionData["tar.o.orbitPatches"],positionData["currentUniversalTime"],"tar.o");requestParams["targetCurrentPositionRelativePosition"]="tar.o.relativePositionAtUTForOrbitPatch["+0+","+positionData["currentUniversalTime"]+"]"}else{var body=this.datalink.getOrbitalBodyInfo(positionData["tar.name"]);requestParams[body.name+"[metadata]radius"]="b.radius["+body.id+"]";requestParams[body.name+"["+positionData["currentUniversalTime"]+"]TruePosition"]="b.o.truePositionAtUT["+body.id+","+positionData["currentUniversalTime"]+"]";requestParams[body.name+"[metadata]currentTruePosition"]="b.o.truePositionAtUT["+body.id+","+positionData["currentUniversalTime"]+"]"}}this.datalink.sendMessage(requestParams,function(data){positionData["currentReferenceBodyRadius"]=data["currentReferenceBodyRadius"];positionData["currentReferenceBodyTruePosition"]=data["currentReferenceBodyTruePosition"];this.buildReferenceBodyPositionData(data,positionData);this.buildReferenceBodyMetadata(data,positionData);positionData["vesselCurrentPosition"]["relativePosition"]=data["vesselCurrentPositionRelativePosition"];this.buildRelativePositionPositionDataForOrbitPatches(data,positionData,"vesselCurrentOrbit","o.orbitPatches");if(positionData["o.maneuverNodes"]){this.buildRelativePositionPositionDataForManeuverNodeOrbitPatches(data,positionData,"vesselManeuverNodes","o.maneuverNodes")}if(positionData["tar.o.orbitPatches"]){this.buildRelativePositionPositionDataForOrbitPatches(data,positionData,"targetCurrentOrbit","tar.o.orbitPatches","tar.o");positionData["targetCurrentPosition"]["relativePosition"]=data["targetCurrentPositionRelativePosition"]}this.mutexUnlock();this.options.onRecalculate&&this.options.onRecalculate(positionData)}.bind(this))},buildRelativePositionRequestsForOrbitPatches:function(requestParams,orbitPatchType,orbitPatches,currentUniversalTime,requestPrefix){requestPrefix=requestPrefix||"o";for(var i=0;iendUT){UTForInterval=endUT}requestParams[this.rootReferenceBody.name+"["+UTForInterval+"]TruePosition"]="b.o.truePositionAtUT["+this.rootReferenceBody.id+","+UTForInterval+"]";requestParams[orbitPatchType+"["+i+"]["+UTForInterval+"]RelativePosition"]=requestPrefix+".relativePositionAtUTForOrbitPatch["+i+","+UTForInterval+"]";requestParams[orbitPatch["referenceBody"]+"["+UTForInterval+"]TruePosition"]="b.o.truePositionAtUT["+referenceBody.id+","+UTForInterval+"]"}requestParams[orbitPatch["referenceBody"]+"[metadata]radius"]="b.radius["+referenceBody.id+"]";requestParams[orbitPatch["referenceBody"]+"[metadata]currentTruePosition"]="b.o.truePositionAtUT["+referenceBody.id+","+currentUniversalTime+"]"}},buildRelativePositionRequestsForManeuverNodeOrbitPatches:function(requestParams,maneuverNodeType,maneuverNodes,currentUniversalTime){var requestPrefix="o.maneuverNodes.relativePositionAtUTForManeuverNodesOrbitPatch";for(var i=0;iendUT){UTForInterval=endUT}var args=[i,j,UTForInterval];requestParams[this.rootReferenceBody.name+"["+UTForInterval+"]TruePosition"]="b.o.truePositionAtUT["+this.rootReferenceBody.id+","+UTForInterval+"]";requestParams[labelPrefix+"["+j+"]["+UTForInterval+"]RelativePosition"]=requestPrefix+"["+args.join(",")+"]";requestParams[orbitPatch["referenceBody"]+"["+UTForInterval+"]TruePosition"]="b.o.truePositionAtUT["+referenceBody.id+","+UTForInterval+"]"}requestParams[orbitPatch["referenceBody"]+"[metadata]radius"]="b.radius["+referenceBody.id+"]";requestParams[orbitPatch["referenceBody"]+"[metadata]currentTruePosition"]="b.o.truePositionAtUT["+referenceBody.id+","+currentUniversalTime+"]"}}},buildRelativePositionPositionDataForOrbitPatches:function(rawData,positionData,orbitPatchType,orbitPatchesKey){var relativePositionFieldRegex=new RegExp(orbitPatchType+"\\[(\\d+)\\]\\[([\\d\\.]+)\\]RelativePosition");var orbitPatches=positionData[orbitPatchesKey]=positionData[orbitPatchesKey]||{};var rawDataKeys=Object.keys(rawData);for(var i=rawDataKeys.length-1;i>=0;i--){var key=rawDataKeys[i];if(relativePositionFieldRegex.test(key)){var matchParts=relativePositionFieldRegex.exec(key);var orbitPatchIndex=parseInt(matchParts[1]);var universalTime=matchParts[2];var relativePosition=rawData[key];var orbitPatch=orbitPatches[orbitPatchIndex]=orbitPatches[orbitPatchIndex]||{};var orbitPatchPositionData=orbitPatch["positionData"]=orbitPatch["positionData"]||{};orbitPatchPositionData[universalTime]=orbitPatchPositionData[universalTime]||{};orbitPatchPositionData[universalTime]["relativePosition"]=relativePosition}}},buildRelativePositionPositionDataForManeuverNodeOrbitPatches:function(rawData,positionData,maneuverNodeType,maneuverNodesKey){var relativePositionFieldRegex=new RegExp(maneuverNodeType+"\\[(\\d+)\\]\\[(\\d+)\\]\\[([\\d\\.]+)\\]RelativePosition");var maneuverNodes=positionData[maneuverNodesKey]=positionData[maneuverNodesKey]||{};var rawDataKeys=Object.keys(rawData);for(var i=rawDataKeys.length-1;i>=0;i--){var key=rawDataKeys[i];if(relativePositionFieldRegex.test(key)){var matchParts=relativePositionFieldRegex.exec(key);var maneuverNodeIndex=parseInt(matchParts[1]);var orbitPatchIndex=parseInt(matchParts[2]);var universalTime=matchParts[3];var relativePosition=rawData[key];var orbitPatch=maneuverNodes[maneuverNodeIndex]["orbitPatches"][orbitPatchIndex]=maneuverNodes[maneuverNodeIndex]["orbitPatches"][orbitPatchIndex]||{};var orbitPatchPositionData=orbitPatch["positionData"]=orbitPatch["positionData"]||{};orbitPatchPositionData[universalTime]=orbitPatchPositionData[universalTime]||{};orbitPatchPositionData[universalTime]["relativePosition"]=relativePosition}}},buildReferenceBodyPositionData:function(rawData,positionData){var referenceBodyTruePositionRegex=new RegExp(/(\w+)\[([\d\.]+)\]TruePosition$/);var rawDataKeys=Object.keys(rawData);for(var i=rawDataKeys.length-1;i>=0;i--){var key=rawDataKeys[i];if(referenceBodyTruePositionRegex.test(key)){var matchParts=referenceBodyTruePositionRegex.exec(key);var referenceBodyName=matchParts[1];var universalTime=matchParts[2];var truePosition=rawData[key];var referenceBodies=positionData["referenceBodies"]=positionData["referenceBodies"]||{};var referenceBodyObject=referenceBodies[referenceBodyName]=referenceBodies[referenceBodyName]||{};referenceBodyObject["positionData"]=referenceBodyObject["positionData"]||{};referenceBodyObject["positionData"][universalTime]=referenceBodyObject["positionData"][universalTime]||{};referenceBodyObject["positionData"][universalTime]["truePosition"]=truePosition}}},buildReferenceBodyMetadata:function(rawData,positionData){var referenceBodyTruePositionRegex=new RegExp(/(\w+)\[metadata\](\w+)$/);var rawDataKeys=Object.keys(rawData);for(var i=rawDataKeys.length-1;i>=0;i--){var key=rawDataKeys[i];if(referenceBodyTruePositionRegex.test(key)){var matchParts=referenceBodyTruePositionRegex.exec(key);var referenceBodyName=matchParts[1];var field=matchParts[2];var data=rawData[key];var referenceBodies=positionData["referenceBodies"]=positionData["referenceBodies"]||{};var referenceBodyObject=referenceBodies[referenceBodyName]=referenceBodies[referenceBodyName]||{};referenceBodyObject[field]=data}}},adjustUniversalTime:function(ut){return ut},initializeDatalink:function(){this.datalink.subscribeToData(["o.orbitPatches","t.universalTime","v.body","tar.name","tar.type","tar.o.orbitingBody","tar.o.orbitPatches","o.maneuverNodes"]);this.datalink.addReceiverFunction(this.recalculate.bind(this))}});var PositionDataFormatter=Class.create({initialize:function(orbitalPositionData,datalink,options){this.datalink=datalink;this.orbitalPositionData=orbitalPositionData;this.orbitalPositionData.options.onRecalculate=this.format.bind(this);this.rootReferenceBodyName=null;this.options=Object.extend({onFormat:null,numberOfSegments:120},options)},format:function(positionData){var formattedData={referenceBodies:[],vessels:[],orbitPatches:[],maneuverNodes:[],referenceBodyPaths:[],distancesFromRootReferenceBody:[],currentUniversalTime:positionData.currentUniversalTime};this.formatReferenceBodies(positionData,formattedData);this.formatCurrentVessel(positionData,formattedData);this.formatTargetVessel(positionData,formattedData);this.formatOrbitalPatches(positionData,formattedData);this.formatManeuverNodes(positionData,formattedData);this.formatTargetOrbitPatches(positionData,formattedData);this.formatReferenceBodyPaths(positionData,formattedData);this.options.onFormat&&this.options.onFormat(formattedData)},formatReferenceBodies:function(positionData,formattedData){referenceBodyNames=Object.keys(positionData.referenceBodies);for(var i=referenceBodyNames.length-1;i>=0;i--){var name=referenceBodyNames[i];var info=positionData.referenceBodies[name];var type="currentPosition";if(positionData["tar.type"]=="CelestialBody"&&positionData["tar.name"]==name){type="targetBodyCurrentPosition"}var x=this.buildReferenceBody({name:name,type:type,radius:info.radius,truePosition:this.formatTruePositionVector(info.currentTruePosition),atmosphericRadius:this.datalink.getOrbitalBodyInfo(name).atmosphericRadius,color:this.datalink.getOrbitalBodyInfo(name).color});formattedData["referenceBodies"].push(x)}},formatReferenceBodyPaths:function(positionData,formattedData){referenceBodyNames=Object.keys(positionData.referenceBodies);for(var i=referenceBodyNames.length-1;i>=0;i--){var name=referenceBodyNames[i];var info=positionData.referenceBodies[name];var positionDataKeys=Object.keys(info.positionData);var sortedUniversalTimes=positionDataKeys.map(function(x){return parseFloat(x)}).reverse();var positions=[];for(var j=0;j=0;i--){var name=referenceBodyNames[i];if(name==this.rootReferenceBodyName){continue}var body=positionData.referenceBodies[name];var sortedUniversalTimes=this.sortedUniversalTimes(body.positionData);var renderPoints=[sortedUniversalTimes.first(),sortedUniversalTimes.last(),sortedUniversalTimes[59]];for(var j=0;j0){formattedData.orbitPatches=formattedData.orbitPatches.concat(this.formatOrbitPatches(formattedData,positionData,positionData["tar.o.orbitPatches"],{type:"orbitPatch",parentType:"targetVessel",parentName:positionData["tar.name"]},{linkedPatchType:"orbitPatch"}))}},formatOrbitalPatches:function(positionData,formattedData){formattedData.orbitPatches=this.formatOrbitPatches(formattedData,positionData,positionData["o.orbitPatches"],{type:"orbitPatch",parentType:"vessel",parentName:"current vessel"},{linkedPatchType:"orbitPatch"})},formatManeuverNodes:function(positionData,formattedData){for(var i=0;i=0;i--){var info=formattedData.referenceBodies[i];if(info.color){var color=info.color}else{var color=this.colors[i]}var radius=info.radius*this.referenceBodyScaleFactor;if(info.name=="Sun"){color="yellow"}if(info.type=="currentPosition"){var material=new THREE.MeshBasicMaterial({color:color,wireframe:false})}else if(info.type=="targetBodyCurrentPosition"){var material=new THREE.MeshBasicMaterial({color:this.targetColor,wireframe:false});radius=radius*1.2}else{if(info.name!="Sun"){if(info.linkedPatchType=="maneuverNode"){color=this.orbitPathColors[info.linkedPatchID]}else{color=this.orbitPathColors[info.linkedPatchID]}}var material=new THREE.MeshBasicMaterial({color:color,wireframe:true})}var sphereGeometry=new THREE.SphereGeometry(radius,20,20);var sphere=new THREE.Mesh(sphereGeometry,material);this.setPosition(sphere,info.truePosition);this.group.add(sphere);if(info.atmosphericRadius>0){var customMaterial=new THREE.ShaderMaterial({uniforms:{c:{type:"f",value:1},p:{type:"f",value:1.5},glowColor:{type:"c",value:new THREE.Color("white")},viewVector:{type:"v3",value:this.camera&&this.camera.position||sphere.position}},vertexShader:document.getElementById("vertexShader").textContent,fragmentShader:document.getElementById("fragmentShader").textContent,side:THREE.FrontSide,blending:THREE.AdditiveBlending,transparent:true});var atmoGeometry=new THREE.SphereGeometry((info.radius+info.atmosphericRadius)*this.referenceBodyScaleFactor,20,20);atmo=new THREE.Mesh(atmoGeometry,customMaterial);this.setPosition(atmo,info.truePosition);this.group.add(atmo)}}},buildVesselGeometry:function(formattedData){for(var i=formattedData.vessels.length-1;i>=0;i--){var info=formattedData.vessels[i];if(info.type=="currentVessel"){var materials=[new THREE.MeshBasicMaterial({color:"white",wireframe:false}),new THREE.MeshBasicMaterial({color:"grey",wireframe:true})]}else{var materials=[new THREE.MeshBasicMaterial({color:this.targetColor,wireframe:false}),new THREE.MeshBasicMaterial({color:"grey",wireframe:true})]}var length=this.vehicleLength;var geometry=new THREE.BoxGeometry(length,length,length);var cube=THREE.SceneUtils.createMultiMaterialObject(geometry,materials);if(info.type=="currentVessel"){this.currentVesselGeometry=cube}this.setPosition(cube,info.truePosition);this.group.add(cube)}},buildOrbitPathGeometry:function(formattedData){for(var i=formattedData.orbitPatches.length-1;i>=0;i--){var points=formattedData.orbitPatches[i].truePositions.map(function(x){return this.buildVector(x)}.bind(this));if(formattedData.orbitPatches[i].parentType=="targetVessel"){var color=this.targetColor}else{var color=this.orbitPathColors[i]}var geometry=this.buildCurveGeometryFromPoints(points);var material=new THREE.LineBasicMaterial({color:color,linewidth:3});var spline=new THREE.Line(geometry,material);this.group.add(spline)}},buildManeuverNodeGeometry:function(formattedData){for(var i=formattedData.maneuverNodes.length-1;i>=0;i--){var maneuverNode=formattedData.maneuverNodes[i];for(var j=maneuverNode.orbitPatches.length-1;j>=0;j--){ -var orbitPatch=maneuverNode.orbitPatches[j];var points=orbitPatch.truePositions.map(function(x){return this.buildVector(x)}.bind(this));var geometry=this.buildCurveGeometryFromPoints(points);geometry.computeBoundingBox();var dashSize=geometry.boundingBox.size().x/Math.ceil(geometry.boundingBox.size().x/this.dashedLineLength);var material=new THREE.LineDashedMaterial({color:this.orbitPathColors[j],dashSize:dashSize,gapSize:dashSize,linewidth:3});var spline=new THREE.Line(geometry,material);this.group.add(spline)}}},buildReferenceBodyOrbitPaths:function(formattedData){for(var i=formattedData.referenceBodyPaths.length-1;i>=0;i--){var points=formattedData.referenceBodyPaths[i].truePositions.map(function(x){return this.buildVector(x)}.bind(this));var material=new THREE.LineBasicMaterial({color:"white",linewidth:formattedData.referenceBodies[0].radius*.1});var geometry=this.buildCurveGeometryFromPoints(points);var spline=new THREE.Line(geometry,material);this.group.add(spline)}},buildDistancesFromRootReferenceBodyPaths:function(formattedData){var colors=["teal","magenta","purple","green","blue","red"];for(var i=formattedData.distancesFromRootReferenceBody.length-1;i>=0;i--){var points=formattedData.distancesFromRootReferenceBody[i].truePositions.map(function(x){return this.buildVector(x)}.bind(this));var material=new THREE.LineBasicMaterial({color:colors[i],linewidth:formattedData.referenceBodies[0].radius*.1});var spline=this.buildSplineWithMaterial(points,material);this.group.add(spline)}},positionCamera:function(){var boundingBox=(new THREE.Box3).setFromObject(this.group);var scaleFactor=Math.max(this.maxLengthInThreeJS/boundingBox.max.x,this.maxLengthInThreeJS/boundingBox.max.y,this.maxLengthInThreeJS/boundingBox.max.z);this.group.scale.set(scaleFactor,scaleFactor,scaleFactor);var boundingBox=(new THREE.Box3).setFromObject(this.group);var vector=this.currentVesselGeometry.position.clone();vector.multiplyScalar(scaleFactor);var axisHelper=new THREE.AxisHelper(this.vehicleLength*3*scaleFactor);axisHelper.position.set(vector.x,vector.y,vector.z);axisHelper.rotation=this.currentVesselGeometry.rotation;this.scene.add(axisHelper);var cameraX=vector.x+this.vehicleLength*this.defaultZoomFactor*scaleFactor;var cameraY=vector.y+this.vehicleLength*this.defaultZoomFactor*scaleFactor;var cameraZ=vector.z+this.vehicleLength*this.defaultZoomFactor*scaleFactor;if(!this.camera){this.camera=new THREE.PerspectiveCamera(75,window.innerWidth/window.innerHeight,.1,Number.MAX_SAFE_INTEGER)}if(!this.controls){this.controls=new THREE.OrbitControls(this.camera,this.renderer.domElement);this.controls.addEventListener("change",function(){this.renderer.render(this.scene,this.camera)}.bind(this))}if(!this.cameraSet){this.controls.target=vector;this.camera.position.set(cameraX,cameraY,cameraZ);this.camera.lookAt(vector);this.cameraSet=true}else{this.controls.target0=vector.clone();this.controls.position0=new THREE.Vector3(cameraX,cameraY,cameraZ)}this.controls.maxDistance=Math.max(Math.abs(boundingBox.min.x)+Math.abs(boundingBox.max.x),Math.abs(boundingBox.min.y)+Math.abs(boundingBox.max.y),Math.abs(boundingBox.min.z)+Math.abs(boundingBox.max.z))*2;this.controls.minDistance=this.vehicleLength*scaleFactor},resetPosition:function(){this.controls.reset()},getMiddle:function(min,max){return min+(Math.abs(min)+Math.abs(max))/2},setPosition:function(mesh,vector){var vector=this.buildVector(vector);mesh.position.x=vector.x;mesh.position.y=vector.y;mesh.position.z=vector.z},buildVector:function(vector){return new THREE.Vector3(vector[0]*this.distanceScaleFactor,vector[1]*this.distanceScaleFactor,vector[2]*this.distanceScaleFactor)},buildCurveGeometryFromPoints:function(points){var curve=new THREE.CatmullRomCurve3(points);var geometry=new THREE.Geometry;geometry.vertices=curve.getPoints(360);geometry.computeLineDistances();return geometry},render:function(formattedData){requestAnimationFrame(function(){this.buildScene();this.buildGeometry(formattedData);this.positionCamera();this.renderer.render(this.scene,this.camera);this.GUIParameters.lastUpdate=TimeFormatters.formatUT(formattedData.currentUniversalTime)}.bind(this))}});(function(root,factory){if(typeof define==="function"&&define.amd){define(factory)}else if(typeof exports==="object"){module.exports=factory()}else{root.ResizeSensor=factory()}})(this,function(){var requestAnimationFrame=window.requestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||function(fn){return window.setTimeout(fn,20)};function forEachElement(elements,callback){var elementsType=Object.prototype.toString.call(elements);var isCollectionTyped="[object Array]"===elementsType||"[object NodeList]"===elementsType||"[object HTMLCollection]"===elementsType||"undefined"!==typeof jQuery&&elements instanceof jQuery||"undefined"!==typeof Elements&&elements instanceof Elements;var i=0,j=elements.length;if(isCollectionTyped){for(;i
  • */\n /** Controllers */ }\n .dg.main {\n /** Scrollbar */ }\n .dg.main::-webkit-scrollbar {\n width: 5px;\n background: #1a1a1a; }\n .dg.main::-webkit-scrollbar-corner {\n height: 0;\n display: none; }\n .dg.main::-webkit-scrollbar-thumb {\n border-radius: 5px;\n background: #676767; }\n .dg li:not(.folder) {\n background: #1a1a1a;\n border-bottom: 1px solid #2c2c2c; }\n .dg li.save-row {\n line-height: 25px;\n background: #dad5cb;\n border: 0; }\n .dg li.save-row select {\n margin-left: 5px;\n width: 108px; }\n .dg li.save-row .button {\n margin-left: 5px;\n margin-top: 1px;\n border-radius: 2px;\n font-size: 9px;\n line-height: 7px;\n padding: 4px 4px 5px 4px;\n background: #c5bdad;\n color: #fff;\n text-shadow: 0 1px 0 #b0a58f;\n box-shadow: 0 -1px 0 #b0a58f;\n cursor: pointer; }\n .dg li.save-row .button.gears {\n background: #c5bdad url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAANCAYAAAB/9ZQ7AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAQJJREFUeNpiYKAU/P//PwGIC/ApCABiBSAW+I8AClAcgKxQ4T9hoMAEUrxx2QSGN6+egDX+/vWT4e7N82AMYoPAx/evwWoYoSYbACX2s7KxCxzcsezDh3evFoDEBYTEEqycggWAzA9AuUSQQgeYPa9fPv6/YWm/Acx5IPb7ty/fw+QZblw67vDs8R0YHyQhgObx+yAJkBqmG5dPPDh1aPOGR/eugW0G4vlIoTIfyFcA+QekhhHJhPdQxbiAIguMBTQZrPD7108M6roWYDFQiIAAv6Aow/1bFwXgis+f2LUAynwoIaNcz8XNx3Dl7MEJUDGQpx9gtQ8YCueB+D26OECAAQDadt7e46D42QAAAABJRU5ErkJggg==) 2px 1px no-repeat;\n height: 7px;\n width: 8px; }\n .dg li.save-row .button:hover {\n background-color: #bab19e;\n box-shadow: 0 -1px 0 #b0a58f; }\n .dg li.folder {\n border-bottom: 0; }\n .dg li.title {\n padding-left: 16px;\n background: black url(data:image/gif;base64,R0lGODlhBQAFAJEAAP////Pz8////////yH5BAEAAAIALAAAAAAFAAUAAAIIlI+hKgFxoCgAOw==) 6px 10px no-repeat;\n cursor: pointer;\n border-bottom: 1px solid rgba(255, 255, 255, 0.2); }\n .dg .closed li.title {\n background-image: url(data:image/gif;base64,R0lGODlhBQAFAJEAAP////Pz8////////yH5BAEAAAIALAAAAAAFAAUAAAIIlGIWqMCbWAEAOw==); }\n .dg .cr.boolean {\n border-left: 3px solid #806787; }\n .dg .cr.function {\n border-left: 3px solid #e61d5f; }\n .dg .cr.number {\n border-left: 3px solid #2fa1d6; }\n .dg .cr.number input[type=text] {\n color: #2fa1d6; }\n .dg .cr.string {\n border-left: 3px solid #1ed36f; }\n .dg .cr.string input[type=text] {\n color: #1ed36f; }\n .dg .cr.function:hover, .dg .cr.boolean:hover {\n background: #111; }\n .dg .c input[type=text] {\n background: #303030;\n outline: none; }\n .dg .c input[type=text]:hover {\n background: #3c3c3c; }\n .dg .c input[type=text]:focus {\n background: #494949;\n color: #fff; }\n .dg .c .slider {\n background: #303030;\n cursor: ew-resize; }\n .dg .c .slider-fg {\n background: #2fa1d6; }\n .dg .c .slider:hover {\n background: #3c3c3c; }\n .dg .c .slider:hover .slider-fg {\n background: #44abda; }\n", +dat.controllers.factory=function(f,a,d,e,c,b,p){return function(q,l,r,n){var u=q[l];if(p.isArray(r)||p.isObject(r))return new f(q,l,r);if(p.isNumber(u))return p.isNumber(r)&&p.isNumber(n)?new d(q,l,r,n):new a(q,l,{min:r,max:n});if(p.isString(u))return new e(q,l);if(p.isFunction(u))return new c(q,l,"");if(p.isBoolean(u))return new b(q,l)}}(dat.controllers.OptionController,dat.controllers.NumberControllerBox,dat.controllers.NumberControllerSlider,dat.controllers.StringController=function(f,a,d){var e= +function(c,b){function d(){f.setValue(f.__input.value)}e.superclass.call(this,c,b);var f=this;this.__input=document.createElement("input");this.__input.setAttribute("type","text");a.bind(this.__input,"keyup",d);a.bind(this.__input,"change",d);a.bind(this.__input,"blur",function(){f.__onFinishChange&&f.__onFinishChange.call(f,f.getValue())});a.bind(this.__input,"keydown",function(a){13===a.keyCode&&this.blur()});this.updateDisplay();this.domElement.appendChild(this.__input)};e.superclass=f;d.extend(e.prototype, +f.prototype,{updateDisplay:function(){a.isActive(this.__input)||(this.__input.value=this.getValue());return e.superclass.prototype.updateDisplay.call(this)}});return e}(dat.controllers.Controller,dat.dom.dom,dat.utils.common),dat.controllers.FunctionController,dat.controllers.BooleanController,dat.utils.common),dat.controllers.Controller,dat.controllers.BooleanController,dat.controllers.FunctionController,dat.controllers.NumberControllerBox,dat.controllers.NumberControllerSlider,dat.controllers.OptionController, +dat.controllers.ColorController=function(f,a,d,e,c){function b(a,b,d,e){a.style.background="";c.each(l,function(c){a.style.cssText+="background: "+c+"linear-gradient("+b+", "+d+" 0%, "+e+" 100%); "})}function p(a){a.style.background="";a.style.cssText+="background: -moz-linear-gradient(top, #ff0000 0%, #ff00ff 17%, #0000ff 34%, #00ffff 50%, #00ff00 67%, #ffff00 84%, #ff0000 100%);";a.style.cssText+="background: -webkit-linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);"; +a.style.cssText+="background: -o-linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);";a.style.cssText+="background: -ms-linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);";a.style.cssText+="background: linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);"}var q=function(f,n){function u(b){v(b);a.bind(window,"mousemove",v);a.bind(window, +"mouseup",l)}function l(){a.unbind(window,"mousemove",v);a.unbind(window,"mouseup",l)}function g(){var a=e(this.value);!1!==a?(t.__color.__state=a,t.setValue(t.__color.toOriginal())):this.value=t.__color.toString()}function k(){a.unbind(window,"mousemove",w);a.unbind(window,"mouseup",k)}function v(b){b.preventDefault();var c=a.getWidth(t.__saturation_field),d=a.getOffset(t.__saturation_field),e=(b.clientX-d.left+document.body.scrollLeft)/c;b=1-(b.clientY-d.top+document.body.scrollTop)/c;1 +b&&(b=0);1e&&(e=0);t.__color.v=b;t.__color.s=e;t.setValue(t.__color.toOriginal());return!1}function w(b){b.preventDefault();var c=a.getHeight(t.__hue_field),d=a.getOffset(t.__hue_field);b=1-(b.clientY-d.top+document.body.scrollTop)/c;1b&&(b=0);t.__color.h=360*b;t.setValue(t.__color.toOriginal());return!1}q.superclass.call(this,f,n);this.__color=new d(this.getValue());this.__temp=new d(0);var t=this;this.domElement=document.createElement("div");a.makeSelectable(this.domElement,!1); +this.__selector=document.createElement("div");this.__selector.className="selector";this.__saturation_field=document.createElement("div");this.__saturation_field.className="saturation-field";this.__field_knob=document.createElement("div");this.__field_knob.className="field-knob";this.__field_knob_border="2px solid ";this.__hue_knob=document.createElement("div");this.__hue_knob.className="hue-knob";this.__hue_field=document.createElement("div");this.__hue_field.className="hue-field";this.__input=document.createElement("input"); +this.__input.type="text";this.__input_textShadow="0 1px 1px ";a.bind(this.__input,"keydown",function(a){13===a.keyCode&&g.call(this)});a.bind(this.__input,"blur",g);a.bind(this.__selector,"mousedown",function(b){a.addClass(this,"drag").bind(window,"mouseup",function(b){a.removeClass(t.__selector,"drag")})});var y=document.createElement("div");c.extend(this.__selector.style,{width:"122px",height:"102px",padding:"3px",backgroundColor:"#222",boxShadow:"0px 1px 3px rgba(0,0,0,0.3)"});c.extend(this.__field_knob.style, +{position:"absolute",width:"12px",height:"12px",border:this.__field_knob_border+(.5>this.__color.v?"#fff":"#000"),boxShadow:"0px 1px 3px rgba(0,0,0,0.5)",borderRadius:"12px",zIndex:1});c.extend(this.__hue_knob.style,{position:"absolute",width:"15px",height:"2px",borderRight:"4px solid #fff",zIndex:1});c.extend(this.__saturation_field.style,{width:"100px",height:"100px",border:"1px solid #555",marginRight:"3px",display:"inline-block",cursor:"pointer"});c.extend(y.style,{width:"100%",height:"100%", +background:"none"});b(y,"top","rgba(0,0,0,0)","#000");c.extend(this.__hue_field.style,{width:"15px",height:"100px",display:"inline-block",border:"1px solid #555",cursor:"ns-resize"});p(this.__hue_field);c.extend(this.__input.style,{outline:"none",textAlign:"center",color:"#fff",border:0,fontWeight:"bold",textShadow:this.__input_textShadow+"rgba(0,0,0,0.7)"});a.bind(this.__saturation_field,"mousedown",u);a.bind(this.__field_knob,"mousedown",u);a.bind(this.__hue_field,"mousedown",function(b){w(b);a.bind(window, +"mousemove",w);a.bind(window,"mouseup",k)});this.__saturation_field.appendChild(y);this.__selector.appendChild(this.__field_knob);this.__selector.appendChild(this.__saturation_field);this.__selector.appendChild(this.__hue_field);this.__hue_field.appendChild(this.__hue_knob);this.domElement.appendChild(this.__input);this.domElement.appendChild(this.__selector);this.updateDisplay()};q.superclass=f;c.extend(q.prototype,f.prototype,{updateDisplay:function(){var a=e(this.getValue());if(!1!==a){var f=!1; +c.each(d.COMPONENTS,function(b){if(!c.isUndefined(a[b])&&!c.isUndefined(this.__color.__state[b])&&a[b]!==this.__color.__state[b])return f=!0,{}},this);f&&c.extend(this.__color.__state,a)}c.extend(this.__temp.__state,this.__color.__state);this.__temp.a=1;var l=.5>this.__color.v||.5a&&(a+=1);return{h:360*a,s:c/b,v:b/255}},rgb_to_hex:function(a,d,e){a=this.hex_with_component(0,2,a);a=this.hex_with_component(a,1,d);return a=this.hex_with_component(a,0,e)},component_from_hex:function(a,d){return a>>8*d&255},hex_with_component:function(a,d,e){return e<<(f=8*d)|a&~(255< 0){ + this.buildRelativePositionRequestsForOrbitPatches(requestParams, "targetCurrentOrbit", positionData['tar.o.orbitPatches'], positionData["currentUniversalTime"], 'tar.o') + requestParams["targetCurrentPositionRelativePosition"] = "tar.o.relativePositionAtUTForOrbitPatch[" + 0 +","+ positionData["currentUniversalTime"] + "]" + } else{ + var body = this.datalink.getOrbitalBodyInfo(positionData['tar.name']) + requestParams[body.name + "[metadata]radius"] = 'b.radius[' + body.id + ']' + requestParams[body.name + "["+ positionData["currentUniversalTime"] +"]TruePosition"] = 'b.o.truePositionAtUT[' + body.id + ',' + positionData["currentUniversalTime"] + ']' + requestParams[body.name + "[metadata]currentTruePosition"] = 'b.o.truePositionAtUT[' + body.id + ',' + positionData["currentUniversalTime"] + ']' + } + } + + this.datalink.sendMessage(requestParams, function(data){ + positionData["currentReferenceBodyRadius"] = data["currentReferenceBodyRadius"] + positionData["currentReferenceBodyTruePosition"] = data["currentReferenceBodyTruePosition"] + + this.buildReferenceBodyPositionData(data, positionData) + this.buildReferenceBodyMetadata(data, positionData) + + positionData["vesselCurrentPosition"]["relativePosition"] = data["vesselCurrentPositionRelativePosition"] + this.buildRelativePositionPositionDataForOrbitPatches(data, positionData, "vesselCurrentOrbit", 'o.orbitPatches') + + if(positionData['o.maneuverNodes']){ + this.buildRelativePositionPositionDataForManeuverNodeOrbitPatches(data, positionData, "vesselManeuverNodes", 'o.maneuverNodes') + } + + if(positionData['tar.o.orbitPatches']){ + this.buildRelativePositionPositionDataForOrbitPatches(data, positionData, "targetCurrentOrbit", 'tar.o.orbitPatches', 'tar.o') + positionData["targetCurrentPosition"]["relativePosition"] = data["targetCurrentPositionRelativePosition"] + } + + this.mutexUnlock() + this.options.onRecalculate && this.options.onRecalculate(positionData) + }.bind(this)) + }, + + buildRelativePositionRequestsForOrbitPatches: function(requestParams, orbitPatchType, orbitPatches, currentUniversalTime, requestPrefix){ + requestPrefix = requestPrefix || 'o' + for (var i = 0; i < orbitPatches.length; i++) { + var orbitPatch = orbitPatches[i] + + // get the start and the end universal times for the patch + var startUT = this.adjustUniversalTime(orbitPatch["startUT"]) + var endUT = this.adjustUniversalTime(orbitPatch["endUT"]) + + //ask for the true position for the current body right now and the radius + var referenceBody = this.datalink.getOrbitalBodyInfo(orbitPatch["referenceBody"]) + + var timeInterval = (endUT-startUT)/this.options.numberOfSegments + var UTForInterval = null + for(var j = 0; j < this.options.numberOfSegments; j++){ + UTForInterval = this.adjustUniversalTime(startUT + (timeInterval * j)) + if(UTForInterval > endUT){ + UTForInterval = endUT + } + + //get the true position of the root reference body at this UT as well + requestParams[this.rootReferenceBody.name + "["+ UTForInterval +"]TruePosition"] = 'b.o.truePositionAtUT[' + this.rootReferenceBody.id + ',' + UTForInterval + ']' + + requestParams[orbitPatchType + "[" + i + "][" + UTForInterval + "]RelativePosition"] = requestPrefix + ".relativePositionAtUTForOrbitPatch[" + i +","+ UTForInterval + "]" + requestParams[orbitPatch["referenceBody"] + "["+ UTForInterval +"]TruePosition"] = 'b.o.truePositionAtUT[' + referenceBody.id + ',' + UTForInterval + ']' + } + + requestParams[orbitPatch["referenceBody"] + "[metadata]radius"] = 'b.radius[' + referenceBody.id + ']' + requestParams[orbitPatch["referenceBody"] + "[metadata]currentTruePosition"] = 'b.o.truePositionAtUT[' + referenceBody.id + ',' + currentUniversalTime + ']' + } + }, + + buildRelativePositionRequestsForManeuverNodeOrbitPatches: function(requestParams, maneuverNodeType, maneuverNodes, currentUniversalTime){ + var requestPrefix = "o.maneuverNodes.relativePositionAtUTForManeuverNodesOrbitPatch" + for (var i = 0; i < maneuverNodes.length; i++) { + var maneuverNode = maneuverNodes[i] + + /* + "apistring": "o.maneuverNodes.relativePositionAtUTForManeuverNodesOrbitPatch", + "name": "For a maneuver node, The orbit patch's True Anomaly at Universal Time [int id, orbit patch index, universal time]", + "units": "DEG", + "plotable": true + */ + + var labelPrefix = maneuverNodeType + "[" + i + "]" + + for (var j = 0; j < maneuverNode['orbitPatches'].length; j++) { + var orbitPatch = maneuverNode['orbitPatches'][j] + + // get the start and the end universal times for the patch + var startUT = this.adjustUniversalTime(orbitPatch["startUT"]) + var endUT = this.adjustUniversalTime(orbitPatch["endUT"]) + var period = this.adjustUniversalTime(orbitPatch["period"]) + var endTransition = this.adjustUniversalTime(orbitPatch["patchEndTransition"]) + + //ask for the true position for the current body right now and the radius + var referenceBody = this.datalink.getOrbitalBodyInfo(orbitPatch["referenceBody"]) + var expectedUT = startUT + period + + if(expectedUT < endUT && endTransition == "MANEUVER"){ + var timeInterval = (expectedUT - startUT)/this.options.numberOfSegments + } else{ + var timeInterval = (endUT-startUT)/this.options.numberOfSegments + } + + var UTForInterval = null + for(var k = 0; k < this.options.numberOfSegments; k++){ + UTForInterval = this.adjustUniversalTime((UTForInterval || startUT) + timeInterval) + if(UTForInterval > endUT){ + UTForInterval = endUT + } + + var args = [i,j,UTForInterval] + + //get the true position of the root reference body at this UT as well + requestParams[this.rootReferenceBody.name + "["+ UTForInterval +"]TruePosition"] = 'b.o.truePositionAtUT[' + this.rootReferenceBody.id + ',' + UTForInterval + ']' + + requestParams[labelPrefix + "[" + j + "][" + UTForInterval + "]RelativePosition"] = requestPrefix + "[" + args.join(',') + "]" + requestParams[orbitPatch["referenceBody"] + "["+ UTForInterval +"]TruePosition"] = 'b.o.truePositionAtUT[' + referenceBody.id + ',' + UTForInterval + ']' + } + + requestParams[orbitPatch["referenceBody"] + "[metadata]radius"] = 'b.radius[' + referenceBody.id + ']' + requestParams[orbitPatch["referenceBody"] + "[metadata]currentTruePosition"] = 'b.o.truePositionAtUT[' + referenceBody.id + ',' + currentUniversalTime + ']' + } + }; + }, + + buildRelativePositionPositionDataForOrbitPatches: function(rawData, positionData, orbitPatchType, orbitPatchesKey){ + var relativePositionFieldRegex = new RegExp(orbitPatchType + "\\[(\\d+)\\]\\[([\\d\\.]+)\\]RelativePosition") + var orbitPatches = positionData[orbitPatchesKey] = positionData[orbitPatchesKey] || {} + + var rawDataKeys = Object.keys(rawData) + for (var i = rawDataKeys.length - 1; i >= 0; i--) { + var key = rawDataKeys[i] + if(relativePositionFieldRegex.test(key)){ + var matchParts = relativePositionFieldRegex.exec(key) + var orbitPatchIndex = parseInt(matchParts[1]) + var universalTime = matchParts[2] + var relativePosition = rawData[key] + + var orbitPatch = orbitPatches[orbitPatchIndex] = orbitPatches[orbitPatchIndex] || {} + var orbitPatchPositionData = orbitPatch["positionData"] = orbitPatch["positionData"] || {} + orbitPatchPositionData[universalTime] = orbitPatchPositionData[universalTime] || {} + orbitPatchPositionData[universalTime]["relativePosition"] = relativePosition + } + }; + }, + + buildRelativePositionPositionDataForManeuverNodeOrbitPatches: function(rawData, positionData, maneuverNodeType, maneuverNodesKey){ + var relativePositionFieldRegex = new RegExp(maneuverNodeType + "\\[(\\d+)\\]\\[(\\d+)\\]\\[([\\d\\.]+)\\]RelativePosition") + var maneuverNodes = positionData[maneuverNodesKey] = positionData[maneuverNodesKey] || {} + + var rawDataKeys = Object.keys(rawData) + for (var i = rawDataKeys.length - 1; i >= 0; i--) { + var key = rawDataKeys[i] + if(relativePositionFieldRegex.test(key)){ + var matchParts = relativePositionFieldRegex.exec(key) + var maneuverNodeIndex = parseInt(matchParts[1]) + var orbitPatchIndex = parseInt(matchParts[2]) + var universalTime = matchParts[3] + var relativePosition = rawData[key] + + var orbitPatch = maneuverNodes[maneuverNodeIndex]['orbitPatches'][orbitPatchIndex] = maneuverNodes[maneuverNodeIndex]['orbitPatches'][orbitPatchIndex] || {} + var orbitPatchPositionData = orbitPatch["positionData"] = orbitPatch["positionData"] || {} + orbitPatchPositionData[universalTime] = orbitPatchPositionData[universalTime] || {} + orbitPatchPositionData[universalTime]["relativePosition"] = relativePosition + } + }; + }, + + buildReferenceBodyPositionData: function(rawData, positionData){ + var referenceBodyTruePositionRegex = new RegExp(/(\w+)\[([\d\.]+)\]TruePosition$/) + + var rawDataKeys = Object.keys(rawData) + for (var i = rawDataKeys.length - 1; i >= 0; i--) { + var key = rawDataKeys[i] + if(referenceBodyTruePositionRegex.test(key)){ + var matchParts = referenceBodyTruePositionRegex.exec(key) + var referenceBodyName = matchParts[1] + var universalTime = matchParts[2] + var truePosition = rawData[key] + + var referenceBodies = positionData["referenceBodies"] = positionData["referenceBodies"] || {} + var referenceBodyObject = referenceBodies[referenceBodyName] = referenceBodies[referenceBodyName] || {} + referenceBodyObject["positionData"] = referenceBodyObject["positionData"] || {} + referenceBodyObject["positionData"][universalTime] = referenceBodyObject["positionData"][universalTime] || {} + referenceBodyObject["positionData"][universalTime]["truePosition"] = truePosition + } + } + }, + + buildReferenceBodyMetadata: function(rawData, positionData){ + var referenceBodyTruePositionRegex = new RegExp(/(\w+)\[metadata\](\w+)$/) + + var rawDataKeys = Object.keys(rawData) + for (var i = rawDataKeys.length - 1; i >= 0; i--) { + var key = rawDataKeys[i] + if(referenceBodyTruePositionRegex.test(key)){ + var matchParts = referenceBodyTruePositionRegex.exec(key) + var referenceBodyName = matchParts[1] + var field = matchParts[2] + var data = rawData[key] + + var referenceBodies = positionData["referenceBodies"] = positionData["referenceBodies"] || {} + var referenceBodyObject = referenceBodies[referenceBodyName] = referenceBodies[referenceBodyName] || {} + referenceBodyObject[field] = data + } + } + }, + + adjustUniversalTime: function(ut){ + return ut//.toFixed(3) + }, + + initializeDatalink: function(){ + this.datalink.subscribeToData([ + 'o.orbitPatches', 't.universalTime', 'v.body', + 'tar.name', 'tar.type', 'tar.o.orbitingBody', + 'tar.o.orbitPatches', 'o.maneuverNodes' + ]) + + this.datalink.addReceiverFunction(this.recalculate.bind(this)) + }, +}) +var PositionDataFormatter = Class.create({ + initialize: function(orbitalPositionData, datalink, options){ + this.datalink = datalink + this.orbitalPositionData = orbitalPositionData; + this.orbitalPositionData.options.onRecalculate = this.format.bind(this) + + this.rootReferenceBodyName = null + + this.options = Object.extend({ + onFormat: null, + numberOfSegments: 120 + }, options) + }, + + format: function(positionData){ + var formattedData = { + "referenceBodies": [], + "vessels": [], + "orbitPatches": [], + "maneuverNodes": [], + "referenceBodyPaths": [], + "distancesFromRootReferenceBody": [], + "currentUniversalTime": positionData.currentUniversalTime + } + + this.formatReferenceBodies(positionData, formattedData) + this.formatCurrentVessel(positionData, formattedData) + this.formatTargetVessel(positionData, formattedData) + this.formatOrbitalPatches(positionData, formattedData) + this.formatManeuverNodes(positionData, formattedData) + this.formatTargetOrbitPatches(positionData, formattedData) + this.formatReferenceBodyPaths(positionData, formattedData) + // this.formatDistancesFromRootReferenceBody(positionData, formattedData) + + this.options.onFormat && this.options.onFormat(formattedData) + }, + + formatReferenceBodies: function(positionData, formattedData){ + referenceBodyNames = Object.keys(positionData.referenceBodies) + + for (var i = referenceBodyNames.length - 1; i >= 0; i--) { + var name = referenceBodyNames[i] + var info = positionData.referenceBodies[name] + var type = "currentPosition" + + if(positionData["tar.type"] == "CelestialBody" && positionData["tar.name"] == name){ + type = "targetBodyCurrentPosition" + } + + var x = this.buildReferenceBody({ + name: name, + type: type, + radius: info.radius, + truePosition: this.formatTruePositionVector(info.currentTruePosition), + atmosphericRadius: this.datalink.getOrbitalBodyInfo(name).atmosphericRadius, + color: this.datalink.getOrbitalBodyInfo(name).color + }) + + formattedData["referenceBodies"].push(x) + } + }, + + formatReferenceBodyPaths: function(positionData, formattedData){ + referenceBodyNames = Object.keys(positionData.referenceBodies) + for (var i = referenceBodyNames.length - 1; i >= 0; i--) { + var name = referenceBodyNames[i] + + // if(name == this.rootReferenceBodyName){ continue; } + var info = positionData.referenceBodies[name] + var positionDataKeys = Object.keys(info.positionData) + var sortedUniversalTimes = positionDataKeys.map(function(x){return parseFloat(x)}).reverse() + + var positions = [] + + for (var j = 0; j < sortedUniversalTimes.length; j++) { + var key = sortedUniversalTimes[j].toString() + + positions.push(this.formatTruePositionVector(info.positionData[key].truePosition)) + } + + var x = this.buildReferenceBodyPath({ + referenceBodyName: name, + truePositions: positions + }) + + formattedData.referenceBodyPaths.push(x) + } + }, + + formatDistancesFromRootReferenceBody: function(positionData, formattedData){ + referenceBodyNames = Object.keys(positionData.referenceBodies) + var rootReferenceBody = positionData.referenceBodies[this.rootReferenceBodyName] + + for (var i = referenceBodyNames.length - 1; i >= 0; i--) { + var name = referenceBodyNames[i] + if(name == this.rootReferenceBodyName){ continue; } + + var body = positionData.referenceBodies[name] + var sortedUniversalTimes = this.sortedUniversalTimes(body.positionData) + + var renderPoints = [sortedUniversalTimes.first(),sortedUniversalTimes.last(), sortedUniversalTimes[59]] + + for (var j = 0; j < renderPoints.length; j++) { + var firstUniversalTime = renderPoints[j] + + var projectedPositionOfReferenceBody = this.findProjectedPositionOfReferenceBody(rootReferenceBody, body, firstUniversalTime) + + var positions = [ + rootReferenceBody.currentTruePosition, + projectedPositionOfReferenceBody + ] + + var x = this.buildDistanceFromRootReferenceBody({ + referenceBodyName: name, + truePositions: positions + }) + + formattedData.distancesFromRootReferenceBody.push(x) + } + } + }, + + formatCurrentVessel: function(positionData, formattedData){ + var currentVesselTruePosition = this.truePositionForRelativePosition( + positionData["vesselCurrentPosition"]["relativePosition"], + this.formatTruePositionVector(positionData.referenceBodies[positionData["vesselBody"]].currentTruePosition) + ) + + this.rootReferenceBodyName = positionData["vesselBody"] + + formattedData.vessels.push( + this.buildVessel({ + name: "current vessel", + type: "currentVessel", + truePosition: currentVesselTruePosition, + referenceBodyName: positionData["vesselBody"] + }) + ) + }, + + formatTargetVessel: function(positionData, formattedData){ + if(!positionData['tar.type']){ return } + if(positionData["tar.type"] == "Vessel"){ + var targetCurrentTruePosition = this.truePositionForRelativePosition( + positionData["targetCurrentPosition"]["relativePosition"], + this.formatTruePositionVector(positionData.referenceBodies[positionData["tar.o.orbitingBody"]].currentTruePosition) + ) + + formattedData.vessels.push(this.buildVessel({ + name: positionData["tar.name"], + type: "targetVessel", + truePosition: targetCurrentTruePosition, + referenceBodyName: positionData["tar.o.orbitingBody"] + })) + } + }, + + formatTargetOrbitPatches: function(positionData, formattedData){ + if(!positionData['tar.type']){ return } + if(positionData["tar.o.orbitPatches"].length > 0){ + formattedData.orbitPatches = formattedData.orbitPatches.concat(this.formatOrbitPatches( + formattedData, positionData, positionData["tar.o.orbitPatches"], { + type: "orbitPatch", + parentType: "targetVessel", + parentName: positionData["tar.name"] + },{ linkedPatchType: "orbitPatch" } + )) + } + }, + + formatOrbitalPatches: function(positionData, formattedData){ + formattedData.orbitPatches = this.formatOrbitPatches(formattedData, + positionData, positionData["o.orbitPatches"],{ + type: "orbitPatch", + parentType: "vessel", + parentName: "current vessel" + }, { linkedPatchType: "orbitPatch" } + ) + }, + + formatManeuverNodes: function(positionData, formattedData){ + for (var i = 0; i < positionData["o.maneuverNodes"].length; i++){ + var maneuverNode = positionData["o.maneuverNodes"][i] + var orbitPatches = this.formatOrbitPatches(formattedData, positionData, maneuverNode.orbitPatches, { + type: "maneuverNode", parentType: "vessel", parentName: "current vessel" + }, { linkedPatchType: "maneuverNode" }) + + for (var j = 0; j < maneuverNode.orbitPatches.length; j++) { + var orbitPatch = maneuverNode.orbitPatches[j] + if(orbitPatch.referenceBody != this.rootReferenceBodyName){ + var referenceBody = positionData.referenceBodies[orbitPatch.referenceBody] + var sortedUniversalTimes = this.sortedUniversalTimes(orbitPatch.positionData) + var middleUniversalTime = sortedUniversalTimes[Math.floor((sortedUniversalTimes.length-1)/2.0)] + + var frameOfReferenceVector = this.findProjectedPositionOfReferenceBody( + this.rootReferenceBody(positionData), referenceBody, middleUniversalTime + ) + } + } + + formattedData.maneuverNodes.push(this.buildManeuverNode({ + type: "maneuverNode", + parentType: "vessel", + parentName: "current vessel", + orbitPatches: orbitPatches + })) + } + }, + + findDistanceVectorBetweenBodiesAtTime: function(rootBody, targetBody, universalTime){ + var closestUniversalTime = this.findTruePositionClosestToRelativeTime(universalTime, rootBody.positionData) + + return [ + rootBody.positionData[closestUniversalTime].truePosition, + targetBody.positionData[universalTime].truePosition + ] + }, + + findProjectedPositionOfReferenceBody: function(rootReferenceBody, body, universalTime){ + var distancePoints = this.findDistanceVectorBetweenBodiesAtTime(rootReferenceBody, body, universalTime) + var distanceVector = Math.matrixAdd( + distancePoints[1], + Math.scaleMatrix(-1, distancePoints[0]) + ) + return distanceVector + }, + + truePositionForRelativePosition: function(relativePositionVector, frameOfReferenceVector){ + var transformedRelativePositionVector = [ + relativePositionVector[0], + relativePositionVector[2], + relativePositionVector[1], + ] + + return Math.matrixAdd(frameOfReferenceVector, transformedRelativePositionVector) + }, + + findTruePositionClosestToRelativeTime: function(universalTime, positionData){ + var positionDataKeys = Object.keys(positionData) + var sortedUniversalTimes = positionDataKeys.map(function(x){return parseFloat(x)}).sortBy(function(s) { + return s; + }) + + var closestTime = null + var closestDistance = null + + for (var i = 0; i < sortedUniversalTimes.length; i++) { + var time = sortedUniversalTimes[i] + var distance = Math.abs(universalTime - time) + + if((closestTime == null && closestDistance == null) || distance < closestDistance ){ + closestTime = time + closestDistance = distance + } + } + + return closestTime + }, + + formatOrbitPatches: function(formattedData, positionData, rawOrbitPatches, orbitPatchOptions, referenceBodyOptions){ + var formattedOrbitPatches = [] + var lastPatchesPoint = null + var firstPointInPatch = null + referenceBodyOptions = referenceBodyOptions || {} + + for (var j = 0; j < rawOrbitPatches.length; j++){ + var orbitPatch = rawOrbitPatches[j] + var referenceBody = positionData.referenceBodies[orbitPatch.referenceBody] + var sortedUniversalTimes = this.sortedUniversalTimes(orbitPatch.positionData) + var positions = [] + var distanceFromLastPatchesPoint = null + var middleUniversalTime = sortedUniversalTimes[Math.floor((sortedUniversalTimes.length-1)/2)] + + for (var k = 0; k < sortedUniversalTimes.length; k++){ + var key = sortedUniversalTimes[k].toString() + + if(orbitPatch.referenceBody == this.rootReferenceBodyName || orbitPatch.referenceBody == "Sun"){ + var frameOfReferenceVector = this.formatTruePositionVector(referenceBody.currentTruePosition) + } else{ + var frameOfReferenceVector = this.findProjectedPositionOfReferenceBody( + this.rootReferenceBody(positionData), referenceBody, sortedUniversalTimes[k] + ) + } + + var relativePositionVector = orbitPatch.positionData[key].relativePosition + + var projectedTruePosition = this.truePositionForRelativePosition( + relativePositionVector, frameOfReferenceVector + ) + + if(lastPatchesPoint != null){ + if(k == 0){ + firstPointInPatch = projectedTruePosition + distanceFromLastPatchesPoint = [ + lastPatchesPoint[0] - firstPointInPatch[0], + lastPatchesPoint[1] - firstPointInPatch[1], + lastPatchesPoint[2] - firstPointInPatch[2], + ] + } + + var projectedTruePosition = [ + projectedTruePosition[0] + distanceFromLastPatchesPoint[0], + projectedTruePosition[1] + distanceFromLastPatchesPoint[1], + projectedTruePosition[2] + distanceFromLastPatchesPoint[2], + ] + + if(middleUniversalTime == sortedUniversalTimes[k] && orbitPatch.referenceBody != this.rootReferenceBodyName){ + var positionOfReferenceBody = [ + frameOfReferenceVector[0] + distanceFromLastPatchesPoint[0], + frameOfReferenceVector[1] + distanceFromLastPatchesPoint[1], + frameOfReferenceVector[2] + distanceFromLastPatchesPoint[2], + ] + + formattedData["referenceBodies"].push(this.buildReferenceBody(Object.extend({ + name: orbitPatch.referenceBody, + type: "projected", + radius: referenceBody.radius, + truePosition: positionOfReferenceBody, + linkedPatchID: j, + atmosphericRadius: this.datalink.getOrbitalBodyInfo(orbitPatch.referenceBody).atmosphericRadius + }, referenceBodyOptions))) + } + } + + positions.push(projectedTruePosition) + } + + lastPatchesPoint = positions.last() + + formattedOrbitPatches.push(this.buildOrbitPatch(Object.extend({ + truePositions: positions + }, orbitPatchOptions))) + } + + return formattedOrbitPatches + }, + + formatTruePositionVector: function(vector){ + return vector + }, + + buildReferenceBody: function(options){ + return { + name: options.name, + type: options.type, + radius: options.radius, + truePosition: options.truePosition, + linkedPatchID: options.linkedPatchID, + linkedPatchType: options.linkedPatchType, + atmosphericRadius: options.atmosphericRadius, + color: options.color + } + }, + + buildReferenceBodyPath: function(options){ + return { + referenceBodyName: options.referenceBodyName, + truePositions: options.truePositions + } + }, + + buildVessel: function(options){ + return { + name: options.name, + type: options.type, + truePosition: options.truePosition, + referenceBodyName: options.referenceBodyName + } + }, + + buildOrbitPatch: function(options){ + return { + type: options.type, + parentType: options.parentType, + parentName: options.parentName, + truePositions: options.truePositions + } + }, + + buildManeuverNode: function(options){ + return { + type: options.type, + parentType: options.parentType, + parentName: options.parentName, + orbitPatches: options.orbitPatches + } + }, + + buildDistanceFromRootReferenceBody: function(options){ + return { + referenceBodyName: options.referenceBodyName, + truePositions: options.truePositions + } + }, + + sortedUniversalTimes: function(positionData){ + var positionDataKeys = Object.keys(positionData) + return positionDataKeys.map(function(x){return parseFloat(x)}).sortBy(function(x){ x }).reverse() + }, + + rootReferenceBody: function(positionData){ + return positionData.referenceBodies[this.rootReferenceBodyName] + } +}) +var OrbitalMap = Class.create({ + initialize: function(positionDataFormatter, datalink, containerID){ + this.container = $(containerID) + + this.GUIParameters = { + "reset": this.resetPosition.bind(this), + "fullscreen": this.toggleFullscreen.bind(this), + "lastUpdate": '00:00:00' + } + + this.buildSceneCameraAndRenderer() + this.buildGUI() + + this.distanceScaleFactor = 1 + this.referenceBodyScaleFactor = 1 + this.sunBodyScaleFactor = 1 + this.dashedLineLength = 100000 + this.maxLengthInThreeJS = 2000 + this.vehicleLength = 25000 + this.defaultZoomFactor = 40 + + this.referenceBodyGeometry = {} + + this.colors = ["#b4f489", "#f48e77", "#a4d1f2", "#99ffc6", "#fcc2e7", "#99ffc6", "#9d67e5", "#f49ab2", "#ffcc99", "#b7fca4", "#ff7cd1", "#ffc9de", "#a4f9ac", "#b6ff77", "#80e6f2", "#f9bdbb", "#e79bef", "#85f7d5", "#88c4ea", "#68a9d8"] + this.orbitPathColors = ["orange", "#b4c6f7", "#987cf9", "#6baedb", "#d0f788", "#f774dd", "#9dc3f9", "#edef70", "#f97292", "#adffb6", "#efc9ff", "#bfc0ff", "#ffe3c4", "#8eb2f9", "#83f7b7", "#8cfc8a", "#97f4b5", "#96dff7", "#ffaabe", "#eda371"] + this.targetColor = '#51ff07' + + this.datalink = datalink + this.positionDataFormatter = positionDataFormatter + this.positionDataFormatter.options.onFormat = this.render.bind(this) + }, + + buildGUI: function(){ + var gui = new dat.GUI({ autoPlace: false }); + gui.add( this.GUIParameters, 'reset' ).name('Reset'); + gui.add( this.GUIParameters, 'fullscreen' ).name('ToggleFullscreen'); + gui.add( this.GUIParameters, 'lastUpdate' ).name('Updated').listen(); + + this.container.appendChild(gui.domElement); + }, + + toggleFullscreen: function(){ + if(!THREEx.FullScreen.available()){return} + + if(THREEx.FullScreen.activated()){ + THREEx.FullScreen.cancel() + } else{ + THREEx.FullScreen.request(this.container) + this.renderer.domElement.focus() + } + }, + + resizeRenderer: function(){ + this.renderer.setSize(1, 1) + this.camera.aspect = this.container.clientWidth/this.container.clientHeight + this.camera.updateProjectionMatrix() + this.renderer.setSize(this.container.clientWidth, this.container.clientHeight) + }, + + buildSceneCameraAndRenderer: function(){ + this.renderer = new THREE.WebGLRenderer({antialias: true}) + + this.renderer.setSize( this.container.clientWidth, this.container.clientHeight ) + this.renderer.setClearColor('#3A1604') + this.container.appendChild( this.renderer.domElement ) + + new ResizeSensor(this.container, function() { + if(this.camera){ + this.resizeRenderer() + } + }.bind(this)); + }, + + buildScene: function(){ + this.scene = new THREE.Scene() + }, + + buildGeometry: function(formattedData){ + this.group = new THREE.Group() + this.scene.add(this.group) + + this.buildReferenceBodyGeometry(formattedData) + this.buildVesselGeometry(formattedData) + this.buildOrbitPathGeometry(formattedData) + this.buildManeuverNodeGeometry(formattedData) + // this.buildReferenceBodyOrbitPaths(formattedData) + // this.buildDistancesFromRootReferenceBodyPaths(formattedData) + }, + + buildReferenceBodyGeometry: function(formattedData){ + var i = 0 + for (var i = formattedData.referenceBodies.length - 1; i >= 0; i--) { + var info = formattedData.referenceBodies[i] + + //render the sun last, and separately + // if(info.name == "Sun"){ continue; } + + if(info.color){ + var color = info.color + } else { + var color = this.colors[i] + } + var radius = info.radius * this.referenceBodyScaleFactor + + if(info.name == "Sun"){ color = 'yellow' } + + if(info.type == "currentPosition"){ + var material = new THREE.MeshBasicMaterial( { color: color, 'wireframe': false } ) + } else if(info.type == "targetBodyCurrentPosition"){ + var material = new THREE.MeshBasicMaterial( { color: this.targetColor, 'wireframe': false } ) + radius = radius * 1.2 + } else{ + if(info.name != "Sun"){ + if(info.linkedPatchType == "maneuverNode"){ + color = this.orbitPathColors[info.linkedPatchID] + } else{ + color = this.orbitPathColors[info.linkedPatchID] + } + } + + var material = new THREE.MeshBasicMaterial( { color: color, 'wireframe': true } ) + } + + var sphereGeometry = new THREE.SphereGeometry(radius, 20, 20) + var sphere = new THREE.Mesh( sphereGeometry, material ) + this.setPosition(sphere, info.truePosition) + this.group.add(sphere) + + if(info.atmosphericRadius > 0){ + // Now to add the atmospheric glow + var customMaterial = new THREE.ShaderMaterial( + { + uniforms: + { + "c": { type: "f", value: 1 }, + "p": { type: "f", value: 1.5 }, + glowColor: { type: "c", value: new THREE.Color('white') }, + viewVector: { type: "v3", value: (this.camera && this.camera.position) || sphere.position } + }, + vertexShader: document.getElementById( 'vertexShader' ).textContent, + fragmentShader: document.getElementById( 'fragmentShader' ).textContent, + side: THREE.FrontSide, + blending: THREE.AdditiveBlending, + transparent: true + } ); + + var atmoGeometry = new THREE.SphereGeometry((info.radius + info.atmosphericRadius) * this.referenceBodyScaleFactor, 20, 20) + atmo = new THREE.Mesh( atmoGeometry, customMaterial ); + this.setPosition(atmo, info.truePosition) + this.group.add( atmo ); + } + } + }, + + buildVesselGeometry: function(formattedData){ + for (var i = formattedData.vessels.length - 1; i >= 0; i--) { + var info = formattedData.vessels[i] + + if(info.type == "currentVessel"){ + var materials = [ + new THREE.MeshBasicMaterial( { color: 'white', 'wireframe': false } ), + new THREE.MeshBasicMaterial( { color: 'grey', 'wireframe': true } ) + ]; + } else{ + var materials = [ + new THREE.MeshBasicMaterial( { color: this.targetColor, 'wireframe': false } ), + new THREE.MeshBasicMaterial( { color: 'grey', 'wireframe': true } ) + ]; + } + + var length = this.vehicleLength + + var geometry = new THREE.BoxGeometry( length, length, length) + var cube = THREE.SceneUtils.createMultiMaterialObject( geometry, materials ); + + if(info.type == "currentVessel"){ + this.currentVesselGeometry = cube + } + + this.setPosition(cube, info.truePosition) + this.group.add(cube) + } + }, + + buildOrbitPathGeometry: function(formattedData){ + for (var i = formattedData.orbitPatches.length - 1; i >= 0; i--) { + var points = formattedData.orbitPatches[i].truePositions.map(function(x){ return this.buildVector(x) }.bind(this)) + + if(formattedData.orbitPatches[i].parentType == "targetVessel"){ + var color = this.targetColor + } else{ + var color = this.orbitPathColors[i] + } + + var geometry = this.buildCurveGeometryFromPoints(points) + var material = new THREE.LineBasicMaterial({ + color: color, + linewidth: 3 + }) + + var spline = new THREE.Line( geometry, material ) + + this.group.add(spline) + } + }, + + buildManeuverNodeGeometry: function(formattedData){ + for (var i = formattedData.maneuverNodes.length - 1; i >= 0; i--) { + var maneuverNode = formattedData.maneuverNodes[i] + + for (var j = maneuverNode.orbitPatches.length - 1; j >= 0; j--) { + var orbitPatch = maneuverNode.orbitPatches[j] + var points = orbitPatch.truePositions.map(function(x){ return this.buildVector(x) }.bind(this)) + + var geometry = this.buildCurveGeometryFromPoints(points) + + geometry.computeBoundingBox() + var dashSize = geometry.boundingBox.size().x/Math.ceil(geometry.boundingBox.size().x/this.dashedLineLength) + + var material = new THREE.LineDashedMaterial({ + color: this.orbitPathColors[j], + dashSize: dashSize, + gapSize: dashSize, + linewidth: 3 + }) + + var spline = new THREE.Line( geometry, material ) + + this.group.add(spline) + } + } + }, + + buildReferenceBodyOrbitPaths: function(formattedData){ + for (var i = formattedData.referenceBodyPaths.length - 1; i >= 0; i--) { + var points = formattedData.referenceBodyPaths[i].truePositions.map(function(x){ return this.buildVector(x) }.bind(this)) + var material = new THREE.LineBasicMaterial( { color : 'white', linewidth: formattedData.referenceBodies[0].radius * .1 } ); + + var geometry = this.buildCurveGeometryFromPoints(points) + + var spline = new THREE.Line( geometry, material ) + + this.group.add(spline) + } + }, + + buildDistancesFromRootReferenceBodyPaths: function(formattedData){ + var colors = ['teal', 'magenta','purple', 'green', 'blue', 'red'] + + for (var i = formattedData.distancesFromRootReferenceBody.length - 1; i >= 0; i--) { + var points = formattedData.distancesFromRootReferenceBody[i].truePositions.map(function(x){ return this.buildVector(x) }.bind(this)) + var material = new THREE.LineBasicMaterial( { color : colors[i], linewidth: formattedData.referenceBodies[0].radius * .1 } ); + + var spline = this.buildSplineWithMaterial(points, material) + + this.group.add(spline) + } + }, + + positionCamera: function(){ + var boundingBox = new THREE.Box3().setFromObject(this.group) + var scaleFactor = Math.max( + (this.maxLengthInThreeJS/boundingBox.max.x), + (this.maxLengthInThreeJS/boundingBox.max.y), + (this.maxLengthInThreeJS/boundingBox.max.z) + ) + + this.group.scale.set(scaleFactor, scaleFactor, scaleFactor) + var boundingBox = new THREE.Box3().setFromObject(this.group) + + // var hex = 0xff0000; + // var bbox = new THREE.BoundingBoxHelper( this.group, hex ); + // bbox.update(); + // this.scene.add( bbox ); + + var vector = this.currentVesselGeometry.position.clone() + vector.multiplyScalar(scaleFactor) + var axisHelper = new THREE.AxisHelper(this.vehicleLength * 3 * scaleFactor); + axisHelper.position.set(vector.x, vector.y, vector.z) + axisHelper.rotation = this.currentVesselGeometry.rotation + + this.scene.add( axisHelper ); + + var cameraX = vector.x + ((this.vehicleLength * this.defaultZoomFactor) * scaleFactor) + var cameraY = vector.y + ((this.vehicleLength * this.defaultZoomFactor) * scaleFactor) + var cameraZ = vector.z + ((this.vehicleLength * this.defaultZoomFactor) * scaleFactor) + + if(!this.camera){ + this.camera = new THREE.PerspectiveCamera( 75, window.innerWidth/window.innerHeight, 0.1, Number.MAX_SAFE_INTEGER) + } + + if(!this.controls){ + this.controls = new THREE.OrbitControls( this.camera, this.renderer.domElement); + this.controls.addEventListener( 'change', function(){this.renderer.render(this.scene, this.camera)}.bind(this) ); // add this only if there is no animation loop (requestAnimationFrame) + } + + if(!this.cameraSet){ + this.controls.target = vector + this.camera.position.set(cameraX, cameraY, cameraZ) + this.camera.lookAt(vector) + // this.controls.rotate.x = -Math.PI/2 + this.cameraSet = true + } else{ + this.controls.target0 = vector.clone() + this.controls.position0 = new THREE.Vector3(cameraX, cameraY, cameraZ) + } + + this.controls.maxDistance = Math.max( + (Math.abs(boundingBox.min.x) + Math.abs(boundingBox.max.x)), + (Math.abs(boundingBox.min.y) + Math.abs(boundingBox.max.y)), + (Math.abs(boundingBox.min.z) + Math.abs(boundingBox.max.z)) + ) * 2 + this.controls.minDistance = this.vehicleLength * scaleFactor + }, + + resetPosition: function(){ + this.controls.reset() + }, + + getMiddle: function(min, max){ + return min + ((Math.abs(min) + Math.abs(max))/2.0) + }, + + setPosition: function(mesh, vector){ + var vector = this.buildVector(vector) + mesh.position.x = vector.x + mesh.position.y = vector.y + mesh.position.z = vector.z + }, + + buildVector: function(vector){ + return new THREE.Vector3( vector[0] * this.distanceScaleFactor, vector[1] * this.distanceScaleFactor, vector[2] * this.distanceScaleFactor ); + }, + + buildCurveGeometryFromPoints: function(points){ + var curve = new THREE.CatmullRomCurve3(points); + var geometry = new THREE.Geometry() + geometry.vertices = curve.getPoints( 360 ); + geometry.computeLineDistances() + return geometry + }, + + render: function (formattedData) { + requestAnimationFrame( function(){ + this.buildScene() + this.buildGeometry(formattedData) + this.positionCamera() + this.renderer.render(this.scene, this.camera) + this.GUIParameters.lastUpdate = TimeFormatters.formatUT(formattedData.currentUniversalTime) + }.bind(this)) + } +}) +/** + * Copyright Marc J. Schmidt. See the LICENSE file at the top-level + * directory of this distribution and at + * https://github.com/marcj/css-element-queries/blob/master/LICENSE. + */ +; +(function (root, factory) { + if (typeof define === "function" && define.amd) { + define(factory); + } else if (typeof exports === "object") { + module.exports = factory(); + } else { + root.ResizeSensor = factory(); + } +}(this, function () { + + // Only used for the dirty checking, so the event callback count is limted to max 1 call per fps per sensor. + // In combination with the event based resize sensor this saves cpu time, because the sensor is too fast and + // would generate too many unnecessary events. + var requestAnimationFrame = window.requestAnimationFrame || + window.mozRequestAnimationFrame || + window.webkitRequestAnimationFrame || + function (fn) { + return window.setTimeout(fn, 20); + }; + + /** + * Iterate over each of the provided element(s). + * + * @param {HTMLElement|HTMLElement[]} elements + * @param {Function} callback + */ + function forEachElement(elements, callback){ + var elementsType = Object.prototype.toString.call(elements); + var isCollectionTyped = ('[object Array]' === elementsType + || ('[object NodeList]' === elementsType) + || ('[object HTMLCollection]' === elementsType) + || ('undefined' !== typeof jQuery && elements instanceof jQuery) //jquery + || ('undefined' !== typeof Elements && elements instanceof Elements) //mootools + ); + var i = 0, j = elements.length; + if (isCollectionTyped) { + for (; i < j; i++) { + callback(elements[i]); + } + } else { + callback(elements); + } + } + + /** + * Class for dimension change detection. + * + * @param {Element|Element[]|Elements|jQuery} element + * @param {Function} callback + * + * @constructor + */ + var ResizeSensor = function(element, callback) { + /** + * + * @constructor + */ + function EventQueue() { + var q = []; + this.add = function(ev) { + q.push(ev); + }; + + var i, j; + this.call = function() { + for (i = 0, j = q.length; i < j; i++) { + q[i].call(); + } + }; + + this.remove = function(ev) { + var newQueue = []; + for(i = 0, j = q.length; i < j; i++) { + if(q[i] !== ev) newQueue.push(q[i]); + } + q = newQueue; + } + + this.length = function() { + return q.length; + } + } + + /** + * @param {HTMLElement} element + * @param {String} prop + * @returns {String|Number} + */ + function getComputedStyle(element, prop) { + if (element.currentStyle) { + return element.currentStyle[prop]; + } else if (window.getComputedStyle) { + return window.getComputedStyle(element, null).getPropertyValue(prop); + } else { + return element.style[prop]; + } + } + + /** + * + * @param {HTMLElement} element + * @param {Function} resized + */ + function attachResizeEvent(element, resized) { + if (!element.resizedAttached) { + element.resizedAttached = new EventQueue(); + element.resizedAttached.add(resized); + } else if (element.resizedAttached) { + element.resizedAttached.add(resized); + return; + } + + element.resizeSensor = document.createElement('div'); + element.resizeSensor.className = 'resize-sensor'; + var style = 'position: absolute; left: 0; top: 0; right: 0; bottom: 0; overflow: hidden; z-index: -1; visibility: hidden;'; + var styleChild = 'position: absolute; left: 0; top: 0; transition: 0s;'; + + element.resizeSensor.style.cssText = style; + element.resizeSensor.innerHTML = + '
    ' + + '
    ' + + '
    ' + + '
    ' + + '
    ' + + '
    '; + element.appendChild(element.resizeSensor); + + if (getComputedStyle(element, 'position') == 'static') { + element.style.position = 'relative'; + } + + var expand = element.resizeSensor.childNodes[0]; + var expandChild = expand.childNodes[0]; + var shrink = element.resizeSensor.childNodes[1]; + + var reset = function() { + expandChild.style.width = 100000 + 'px'; + expandChild.style.height = 100000 + 'px'; + + expand.scrollLeft = 100000; + expand.scrollTop = 100000; + + shrink.scrollLeft = 100000; + shrink.scrollTop = 100000; + }; + + reset(); + var dirty = false; + + var dirtyChecking = function() { + if (!element.resizedAttached) return; + + if (dirty) { + element.resizedAttached.call(); + dirty = false; + } + + requestAnimationFrame(dirtyChecking); + }; + + requestAnimationFrame(dirtyChecking); + var lastWidth, lastHeight; + var cachedWidth, cachedHeight; //useful to not query offsetWidth twice + + var onScroll = function() { + if ((cachedWidth = element.offsetWidth) != lastWidth || (cachedHeight = element.offsetHeight) != lastHeight) { + dirty = true; + + lastWidth = cachedWidth; + lastHeight = cachedHeight; + } + reset(); + }; + + var addEvent = function(el, name, cb) { + if (el.attachEvent) { + el.attachEvent('on' + name, cb); + } else { + el.addEventListener(name, cb); + } + }; + + addEvent(expand, 'scroll', onScroll); + addEvent(shrink, 'scroll', onScroll); + } + + forEachElement(element, function(elem){ + attachResizeEvent(elem, callback); + }); + + this.detach = function(ev) { + ResizeSensor.detach(element, ev); + }; + }; + + ResizeSensor.detach = function(element, ev) { + forEachElement(element, function(elem){ + if(elem.resizedAttached && typeof ev == "function"){ + elem.resizedAttached.remove(ev); + if(elem.resizedAttached.length()) return; + } + if (elem.resizeSensor) { + elem.removeChild(elem.resizeSensor); + delete elem.resizeSensor; + delete elem.resizedAttached; + } + }); + }; + + return ResizeSensor; + +})); + +var HohmannIntercept = Class.create({ + initialize: function(datalink, options){ + this.datalink = datalink + this.options = options || {} + this.targetBody = {} + this.vessel = {} + + // This is the basic math info we'll need, along with the data to get + // additional info about the target and the orbiting bodies in question + this.datalink.subscribeToData([ + 'v.altitude', 'o.ApA', 'o.PeA', 'v.orbitalVelocity', + 'tar.o.ApA', 'tar.o.PeA', 'tar.name', 'tar.o.orbitingBody', 'v.body' + ]) + + this.datalink.addReceiverFunction(this.getVesselAndTargetInfo.bind(this)) + this.datalink.addReceiverFunction(this.updateCalculations.bind(this)) + }, + + getVesselAndTargetInfo: function(data){ + if(this.isnoTarget(data)){return} + this.targetBody = this.datalink.getOrbitalBodyInfo(data['tar.name']) + this.targetBody.orbitingBody = this.datalink.getOrbitalBodyInfo(data['tar.o.orbitingBody']) + this.targetBody.periapsis = data['tar.o.ApA'] + this.vessel.orbitingBody = this.datalink.getOrbitalBodyInfo(data['v.body']) + this.vessel.periapsis = data['o.ApA'] + this.vessel.altitude = data['v.altitude'] + this.vessel.orbitalVelocity = data['v.orbitalVelocity'] + + this.datalink.subscribeToData([ + "b.o.gravParameter["+ this.vessel.orbitingBody.id +"]", + "b.radius["+ this.vessel.orbitingBody.id +"]", + "b.o.phaseAngle["+ this.targetBody.id +"]" + ]) + }, + + updateCalculations: function(data){ + if(this.isnoTarget(data)){ + this.clearData() + } else{ + this.calculateDeltaV(data) + this.calculatePhaseAngle(data) + } + + document.fire('hohmann-intercept:update') + }, + + isnoTarget:function(data){ + return data['tar.name'].toLowerCase() == "no target selected." + }, + + calculateDeltaV: function(data){ + var radiusOfBody = data["b.radius["+ this.vessel.orbitingBody.id +"]"] + var r1 = data['o.ApA'] + radiusOfBody + var r2 = data['tar.o.ApA'] + radiusOfBody + var mu = data["b.o.gravParameter["+ this.vessel.orbitingBody.id +"]"]; + + var factor1 = Math.sqrt(mu/r1) + var factor2 = Math.sqrt((2 * r2)/(r1 + r2)) + + this.deltaV = factor1 * (factor2 - 1) + + // console.log("delta V1: " + this.deltaV) + }, + + isGoForIntercept: function(){ + return ( + this.phaseAngle <= this.targetsCurrentPhaseAngle + 5 && + this.phaseAngle >= this.targetsCurrentPhaseAngle - 5 && + this.deltaV > 5 + ) + }, + + calculatePhaseAngle: function(data){ + var r1 = data['o.PeA'] + var r2 = data['tar.o.PeA'] + var radius = data["b.radius["+ this.vessel.orbitingBody.id +"]"] + var numberOfOrbits = Math.pow(0.5 * ( (r1 + r2 + (2*radius) )/((2*radius) + (2*r2)) ), 1.5) + + if(numberOfOrbits < 1){ + var fractionalPart = numberOfOrbits + } else{ + var fractionalPart = (numberOfOrbits % 1) + } + + this.sweepAngle = 360 * fractionalPart + this.phaseAngle = 180 - this.sweepAngle + + this.targetsCurrentPhaseAngle = data["b.o.phaseAngle["+ this.targetBody.id +"]"] + + // console.log("Phase Angle: " + this.phaseAngle + " targetsCurrentPhaseAngle: " + this.targetsCurrentPhaseAngle) + + if(this.isGoForIntercept()){ + // console.log("FIRE EVERYTHING") + } + }, + + clearData: function(){ + this.vessel.altitude = null + this.vessel.periapsis = null + this.vessel.orbitalVelocity = null + this.targetBody = null + this.sweepAngle = null + this.phaseAngle = null + this.targetsCurrentPhaseAngle = null + this.deltaV = null + } +}) +var NavigationOrbitInfoTable = Class.create({ + initialize: function(datalink, fieldIDs){ + this.datalink = datalink + this.fieldIDs = fieldIDs + this.fields = {} + + this.initializeFields() + this.initializeDatalink() + }, + + update: function(data){ + this.updateTable(data) + }, + + updateTable: function(data){ + window.requestAnimationFrame(function(){ + this.fields.vesselBody.update(data['v.body']) + this.fields.targetBody.update(data['v.body']) + + this.fields.vesselAltitude.update(DataFormatters.distanceString(data['v.altitude'])) + + this.fields.vesselApoapsis.update(DataFormatters.distanceString(data['o.ApA'])) + this.fields.targetApoapsis.update(DataFormatters.distanceString(data['tar.o.ApA'])) + + this.fields.vesselPeriapsis.update(DataFormatters.distanceString(data['o.PeA'])) + this.fields.targetPeriapsis.update(DataFormatters.distanceString(data['tar.o.PeA'])) + + this.fields.vesselTimeToApoapsis.update("-" + TimeFormatters.durationString(data['o.timeToAp'])) + this.fields.targetTimeToApoapsis.update("-" + TimeFormatters.durationString(data['tar.o.timeToAp'])) + + this.fields.vesselTimeToPeriapsis.update("-" + TimeFormatters.durationString(data['o.timeToPe'])) + this.fields.targetTimeToPeriapsis.update("-" + TimeFormatters.durationString(data['tar.o.timeToPe'])) + + this.fields.vesselInclination.update(DataFormatters.degreeString(data['o.inclination'])) + this.fields.targetInclination.update(DataFormatters.degreeString(data['tar.o.inclination'])) + + this.fields.vesselEccentricity.update(data['o.eccentricity'].toFixed(3)) + this.fields.targetEccentricity.update(data['tar.o.eccentricity'].toFixed(3)) + + this.fields.vesselOrbitalPeriod.update(TimeFormatters.durationString(data['o.period'])) + this.fields.targetOrbitalPeriod.update(TimeFormatters.durationString(data['tar.o.period'])) + + this.fields.vesselTrueAnomaly.update(DataFormatters.degreeString(data['o.trueAnomaly'])) + this.fields.targetTrueAnomaly.update(DataFormatters.degreeString(data['tar.o.trueAnomaly'])) + + this.fields.vesselSurfaceVelocity.update(DataFormatters.velocityString(data['v.surfaceVelocity'])) + + this.fields.vesselVerticalSpeed.update(DataFormatters.velocityString(data['v.verticalSpeed'])) + + this.fields.vesselOrbitalVelocity.update(DataFormatters.velocityString(data['v.orbitalVelocity'])) + + this.fields.vesselRelativeVelocity.update(DataFormatters.velocityString(data['o.relativeVelocity'])) + this.fields.targetRelativeVelocity.update(DataFormatters.velocityString(data['tar.o.relativeVelocity'])) + + this.fields.vesselGForce.update(data['v.geeForce'].toFixed(2)) + }.bind(this)) + }, + + initializeFields: function(){ + var fieldNames = Object.keys(this.fieldIDs) + for (var i = fieldNames.length - 1; i >= 0; i--) { + var fieldName = fieldNames[i] + this.fields[fieldName] = $(this.fieldIDs[fieldName]) + } + }, + + initializeDatalink: function(){ + this.datalink.subscribeToData([ + "v.body", + "tar.o.orbitingBody", + + "v.altitude", + //NA + + "o.ApA", + "tar.o.ApA", + + "o.PeA", + "tar.o.PeA", + + "o.timeToAp", + "tar.o.timeToAp", + + "o.timeToPe", + "tar.o.timeToPe", + + "o.inclination", + "tar.o.inclination", + + "o.eccentricity", + "tar.o.eccentricity", + + "o.period", + "tar.o.period", + + "o.trueAnomaly", + "tar.o.trueAnomaly", + + "v.surfaceVelocity", + //NA + + "v.verticalSpeed", + //NA + + "v.orbitalVelocity", + //NA + + "o.relativeVelocity", + "tar.o.relativeVelocity", + + "v.geeForce", + //NA + ]) + this.datalink.addReceiverFunction(this.update.bind(this)) + } +}) +var ManeuverNodeEditor = Class.create({ + initialize: function(datalink, options){ + this.datalink = datalink + + /* the options + control elements: + - maneuverNode + - quickIncrement + - ut + - utPlus + - utMinus + - utAp + - utPe + - ut1KPlus + - ut1KMinus + - prograde + - progradePlus + - progradeMinus + - normal + - normalPlus + - normalMinus + - radial + - radialPlus + - radialMinus + + display elements: + - deltaV + - orbitInfoTable + - noManeuverNodesMessage + + */ + this.options = options || {} + this.maneuverNodes = [] + this.currentUniversalTime = 0 + this.apoapsisTime = 0 + this.periapsisTime = 0 + + this.orbitInfoTable = new DataTable(this.options.orbitInfoTable, []) + + this.initializeUI() + this.initializeDatalink() + }, + + update: function(data){ + this.currentUniversalTime = data['t.universalTime'] + this.apoapsisTime = this.currentUniversalTime + data['o.timeToAp'] + this.periapsisTime = this.currentUniversalTime + data['o.timeToPe'] + var nodes = data['o.maneuverNodes'] + + var currentlySelectedNodeIndex = this.indexOfEditingManeuverNode() + + // Update the data structure for each node that isn't currently being edited + for (var i = 0; i < nodes.length; i++) { + var node = nodes[i] + + //don't automatically update the selected node + //that is done when the user changes values or + //manually refreshes + if(currentlySelectedNodeIndex == i){ continue } + + // replace the node's data + this.maneuverNodes[i] = node + } + + //add a select option for each new node that doesn't exist + while(this.options.maneuverNode.options.length < nodes.length){ + this.addManeuverNodeOption(this.options.maneuverNode.options.length) + } + + //remove any select options for nodes that don't exist in the data structure yet + for (var j = this.options.maneuverNode.options.length - 1; j >= nodes.length; j--) { + this.options.maneuverNode.remove(j) + }; + + //if the current node being edited is not within the bounds, pick the first + //node as the one being edited + if(nodes.length > 0 && (currentlySelectedNodeIndex < 0 || + currentlySelectedNodeIndex > nodes.length + )){ + this.selectNodeToEdit(0) + this.updateUI() + } + + window.requestAnimationFrame(function(){ + if(nodes.length <= 0){ + this.options.noManeuverNodesMessage.show() + } else{ + this.options.noManeuverNodesMessage.hide() + } + this.updateManeuverNodeSelectorUI() + }.bind(this)) + }, + + updateNodeEditorUI: function(){ + var node = this.nodeCurrentlyEditing() + if(node){ + this.options.ut.value = node["UT"] + this.options.prograde.value = node["deltaV"][2] + this.options.normal.value = node["deltaV"][1] + this.options.radial.value = node["deltaV"][0] + } else{ + // Zero out the UI if the node doesn't exist + this.options.ut.value = "" + this.options.prograde.value = "" + this.options.normal.value = "" + this.options.radial.value = "" + } + }, + + calculateDeltaV: function(deltaV){ + return Math.sqrt(Math.pow(deltaV[0],2) + + Math.pow(deltaV[1],2) + Math.pow(deltaV[2],2) + ) + }, + + updateNodeOrbitInfo: function(){ + var node = this.nodeCurrentlyEditing() + + if(node){ + var deltaVResult = this.calculateDeltaV(node["deltaV"]) + } else{ + var deltaVResult = "" + } + this.options.deltaV.update(DataFormatters.velocityString(deltaVResult)) + + this.orbitInfoTable.dataRows = this.dataRowsForOrbitInfo(node) + if(this.orbitInfoTable.dataRows.length == 0){ + this.orbitInfoTable.clear() + }else{ + this.orbitInfoTable.update() + } + }, + + dataRowsForOrbitInfo: function(node){ + if(!node){ return [] } + return [ + { + label: "Apoapsis", + value: DataFormatters.distanceString(node["ApA"]) + }, + { + label: "Periapsis", + value: DataFormatters.distanceString(node["PeA"]) + }, + { + label: "Inclination", + value: DataFormatters.degreeString(node["inclination"]) + }, + { + label: "Eccentricity", + value: DataFormatters.plainNumberString(node["eccentricity"]) + }, + { + label: "Reference Body", + value: node["referenceBody"] + }, + { + label: "Epoch", + value: DataFormatters.plainNumberString(node["epoch"]) + }, + { + label: "Argument of Periapsis", + value: DataFormatters.degreeString(node["argumentOfPeriapsis"]) + }, + { + label: "Semimajor Axis", + value: DataFormatters.distanceString(node["sma"]) + }, + { + label: "Longitude of Ascending Node", + value: DataFormatters.degreeString(node["lan"]) + }, + { + label: "Mean Anomaly at Epoch", + value: DataFormatters.degreeString(node["maae"]) + }, + { + label: "Reference Body", + value: node["referenceBody"] || "NA" + } + ] + }, + + mergeCurrentlyEditingManeuverNode: function(newNode, index){ + var currentNode = this.maneuverNodes[index] + var ut = parseFloat(this.options.ut.value) + var deltaV = [ + parseFloat(this.options.radial.value) || 0, + parseFloat(this.options.normal.value) || 0, + parseFloat(this.options.prograde.value) || 0, + ] + + this.maneuverNodes[index] = Object.extend(newNode, {"ut": ut, "deltaV": deltaV}) + return this.maneuverNodes[index] + }, + + indexOfEditingManeuverNode: function(){ + return this.options.maneuverNode.selectedIndex + }, + + nodeCurrentlyEditing: function(){ + return this.maneuverNodes[this.indexOfEditingManeuverNode()] + }, + + selectNodeToEdit: function(index){ + this.options.maneuverNode.selectedIndex = index + }, + + updateUI: function(){ + window.requestAnimationFrame(function(){ + this.updateNodeEditorUI() + this.updateNodeOrbitInfo() + this.updateManeuverNodeSelectorUI() + }.bind(this)) + }, + + updateManeuverNodeSelectorUI: function(){ + //add a new node selector for each new node that doesn't exist + var maneuverNodesCount = this.options.maneuverNode.options.length + for(var i = 0; i < maneuverNodesCount; i++){ + this.addOrUpdateManeuverNodeSelector(i) + } + + //remove any select options for nodes that don't exist in the data structure yet + for (var j = this.options.nodeSelector.children.length - 1; j >= maneuverNodesCount; j--) { + var child = this.options.nodeSelector.children[j] + this.options.nodeSelector.removeChild(child) + }; + }, + + addOrUpdateManeuverNodeSelector: function(index){ + var node = this.maneuverNodes[index] + var selector = this.options.nodeSelector.children[index] + + //remove the selector if a matching node doesn't exist + if(!node){ + if(selector){ this.options.nodeSelector.removeChild(selector) } + return + } + + if(!selector){ + var docFragment = document.createDocumentFragment(); + var selector = document.createElement('li') + var title = document.createElement("span") + var deltaV = document.createElement("span") + var arrival = document.createElement("span") + var remove = document.createElement("button") + title.addClassName("title") + deltaV.addClassName('deltav') + arrival.addClassName("arrival") + remove.addClassName("remove") + remove.update("remove") + selector.appendChild(title) + selector.appendChild(deltaV) + selector.appendChild(arrival) + selector.appendChild(remove) + docFragment.appendChild(selector) + + selector.observe('click', function(){ + this.selectNodeToEdit(index) + this.updateNodeEditorUI() + this.updateNodeOrbitInfo() + }.bind(this)) + + remove.observe("click", function(){ + this.removeManeuverNode(index) + }.bind(this)) + + this.options.nodeSelector.appendChild(docFragment) + } else{ + var title = selector.down('.title') + var deltaV = selector.down('.deltav') + var arrival = selector.down('.arrival') + } + + if(index == this.indexOfEditingManeuverNode()){ + selector.addClassName("selected") + } else{ + selector.removeClassName("selected") + } + + title.update("Node " + index) + deltaV.update("Δv: " + DataFormatters.velocityString(this.calculateDeltaV(node["deltaV"]))) + var timeToArrival = node["UT"] - this.currentUniversalTime + arrival.update((timeToArrival > 0 ? "-" : "+") + DataFormatters.timeString(Math.abs(timeToArrival))) + }, + + addManeuverNodeOption: function(index){ + var option = document.createElement("option") + option.value = index + option.text = index + this.options.maneuverNode.add(option) + }, + + addManeuverNode: function(){ + if(this.maneuverNodes.length > 0){ + var universalTime = this.maneuverNodes.last()["UT"] + 1000 + } else{ + var universalTime = this.currentUniversalTime + 1000 + } + + var nodeName = "o.addManeuverNode[" + universalTime + ",0,0,0]" + params = {} + params[nodeName] = nodeName + newIndex = this.options.maneuverNode.options.length + this.datalink.sendMessage(params, function(data){ + this.maneuverNodes[newIndex] = data[nodeName] + this.addManeuverNodeOption(newIndex) + this.selectNodeToEdit(newIndex) + this.updateUI() + }.bind(this)) + }, + + updateCurrentNode: function(){ + var index = this.indexOfEditingManeuverNode() + var ut = parseFloat(this.options.ut.value) || this.currentUniversalTime + + var prograde = parseFloat(this.options.prograde.value) || 0.00 + var normal = parseFloat(this.options.normal.value) || 0.00 + var radial = parseFloat(this.options.radial.value) || 0.00 + this.updateManeuverNode(index, ut, radial, normal, prograde) + }, + + updateManeuverNode: function(index, ut, prograde, normal, radial){ + var options = [index, ut, prograde, normal, radial] + var nodeName = "o.updateManeuverNode[" + options.join(',') + "]" + params = {} + params[nodeName] = nodeName + + this.datalink.sendMessage(params, function(data){ + this.maneuverNodes[index] = this.mergeCurrentlyEditingManeuverNode(data[nodeName], index) + this.addManeuverNodeOption(index) + this.selectNodeToEdit(index) + this.updateNodeOrbitInfo() + }.bind(this)) + }, + + removeManeuverNode: function(index){ + nodeName = "o.removeManeuverNode[" + index + "]" + params = {} + params[nodeName] = nodeName + + this.datalink.sendMessage(params, function(data){ + this.maneuverNodes.splice(index, 1) + this.selectNodeToEdit(0) + this.updateUI() + }.bind(this)) + }, + + quickIncrement: function(){ + return parseFloat(this.options.quickIncrement.value) || 0 + }, + + quickIncrementUpdateField: function(field, factor){ + this.incrementField(field, (factor * this.quickIncrement())) + }, + + incrementField: function(field, delta){ + field.value = (parseFloat(field.value) || 0) + delta + field.simulate('input') + }, + + initializeUI: function(){ + this.options.maneuverNode.observe('change', function(){ + this.updateUI() + }.bind(this)) + + var quickActions = function(field, increment, decrement){ + increment.observe('click', function(){ + this.quickIncrementUpdateField(field, +1) + }.bind(this)) + + decrement.observe('click', function(){ + this.quickIncrementUpdateField(field, -1) + }.bind(this)) + }.bind(this) + + this.options.ut.observe('input', this.updateCurrentNode.bind(this)) + this.options.prograde.observe('input', this.updateCurrentNode.bind(this)) + this.options.normal.observe('input', this.updateCurrentNode.bind(this)) + this.options.radial.observe('input', this.updateCurrentNode.bind(this)) + + quickActions(this.options.ut, this.options.utPlus, this.options.utMinus) + quickActions(this.options.prograde, this.options.progradePlus, this.options.progradeMinus) + quickActions(this.options.normal, this.options.normalPlus, this.options.normalMinus) + quickActions(this.options.radial, this.options.radialPlus, this.options.radialMinus) + + this.options.ut1KPlus.observe('click', function(){ + this.incrementField(this.options.ut, 1000) + }.bind(this)) + + this.options.ut1KMinus.observe('click', function(){ + this.incrementField(this.options.ut, -1000) + }.bind(this)) + + this.options.utAp.observe('click', function(){ + this.options.ut.value = this.apoapsisTime + this.options.ut.simulate('input') + }.bind(this)) + + this.options.utPe.observe('click', function(){ + this.options.ut.value = this.periapsisTime + this.options.ut.simulate('input') + }.bind(this)) + + this.options.addNode.observe('click', function(){ + this.addManeuverNode() + }.bind(this)) + }, + + + initializeDatalink: function(){ + this.datalink.subscribeToData(['o.maneuverNodes', 't.universalTime', 'o.timeToAp', 'o.timeToPe']) + this.datalink.addReceiverFunction(this.update.bind(this)) + } +}) \ No newline at end of file diff --git a/public/assets/staging-analysis.js b/public/assets/staging-analysis.js index 37d30f6..ad22db1 100644 --- a/public/assets/staging-analysis.js +++ b/public/assets/staging-analysis.js @@ -1,16 +1,8787 @@ -Math.toDegrees=function(angleInRadians){return angleInRadians*(180/Math.PI)};Math.toRadians=function(angleInDegrees){return angleInDegrees*(Math.PI/180)};Math.crossProduct=function(x,y){[x[1]*y[2]-x[2]*y[1],x[2]*y[0]-x[0]*y[2],x[0]*y[1]-x[1]*y[0]]};Math.sign=Math.sign||function(x){x=+x;if(x===0||isNaN(x)){return x}return x>0?1:-1};Math.cosh=Math.cosh||function(x){return(Math.exp(x)+Math.exp(-x))/2};Math.sinh=Math.sinh||function(x){return(Math.exp(x)-Math.exp(-x))/2};Math.matrixAdd=Math.matrixAdd||function(){var arrays=arguments,results=[],count=arrays[0].length,L=arrays.length,sum,next=0,i;while(next-1?e(a,b,c):b.indexOf("%")>-1?f(a,b,c):b.indexOf(":")>-1?g(a,b):i(a._value,b,c)}function d(a,b){var c,d,e,f,g,i=b,j=["KB","MB","GB","TB","PB","EB","ZB","YB"],k=!1;if(b.indexOf(":")>-1)a._value=h(b);else if(b===q)a._value=0;else{for("."!==o[p].delimiters.decimal&&(b=b.replace(/\./g,"").replace(o[p].delimiters.decimal,".")),c=new RegExp("[^a-zA-Z]"+o[p].abbreviations.thousand+"(?:\\)|(\\"+o[p].currency.symbol+")?(?:\\))?)?$"),d=new RegExp("[^a-zA-Z]"+o[p].abbreviations.million+"(?:\\)|(\\"+o[p].currency.symbol+")?(?:\\))?)?$"),e=new RegExp("[^a-zA-Z]"+o[p].abbreviations.billion+"(?:\\)|(\\"+o[p].currency.symbol+")?(?:\\))?)?$"),f=new RegExp("[^a-zA-Z]"+o[p].abbreviations.trillion+"(?:\\)|(\\"+o[p].currency.symbol+")?(?:\\))?)?$"),g=0;g<=j.length&&!(k=b.indexOf(j[g])>-1?Math.pow(1024,g+1):!1);g++);a._value=(k?k:1)*(i.match(c)?Math.pow(10,3):1)*(i.match(d)?Math.pow(10,6):1)*(i.match(e)?Math.pow(10,9):1)*(i.match(f)?Math.pow(10,12):1)*(b.indexOf("%")>-1?.01:1)*((b.split("-").length+Math.min(b.split("(").length-1,b.split(")").length-1))%2?1:-1)*Number(b.replace(/[^0-9\.]+/g,"")),a._value=k?Math.ceil(a._value):a._value}return a._value}function e(a,b,c){var d,e,f=b.indexOf("$"),g=b.indexOf("("),h=b.indexOf("-"),j="";return b.indexOf(" $")>-1?(j=" ",b=b.replace(" $","")):b.indexOf("$ ")>-1?(j=" ",b=b.replace("$ ","")):b=b.replace("$",""),e=i(a._value,b,c),1>=f?e.indexOf("(")>-1||e.indexOf("-")>-1?(e=e.split(""),d=1,(g>f||h>f)&&(d=0),e.splice(d,0,o[p].currency.symbol+j),e=e.join("")):e=o[p].currency.symbol+j+e:e.indexOf(")")>-1?(e=e.split(""),e.splice(-1,0,j+o[p].currency.symbol),e=e.join("")):e=e+j+o[p].currency.symbol,e}function f(a,b,c){var d,e="",f=100*a._value;return b.indexOf(" %")>-1?(e=" ",b=b.replace(" %","")):b=b.replace("%",""),d=i(f,b,c),d.indexOf(")")>-1?(d=d.split(""),d.splice(-1,0,e+"%"),d=d.join("")):d=d+e+"%",d}function g(a){var b=Math.floor(a._value/60/60),c=Math.floor((a._value-60*b*60)/60),d=Math.round(a._value-60*b*60-60*c);return b+":"+(10>c?"0"+c:c)+":"+(10>d?"0"+d:d)}function h(a){var b=a.split(":"),c=0;return 3===b.length?(c+=60*Number(b[0])*60,c+=60*Number(b[1]),c+=Number(b[2])):2===b.length&&(c+=60*Number(b[0]),c+=Number(b[1])),Number(c)}function i(a,c,d){var e,f,g,h,i,j,k=!1,l=!1,m=!1,n="",r=!1,s=!1,t=!1,u=!1,v=!1,w="",x="",y=Math.abs(a),z=["B","KB","MB","GB","TB","PB","EB","ZB","YB"],A="",B=!1;if(0===a&&null!==q)return q;if(c.indexOf("(")>-1?(k=!0,c=c.slice(1,-1)):c.indexOf("+")>-1&&(l=!0,c=c.replace(/\+/g,"")),c.indexOf("a")>-1&&(r=c.indexOf("aK")>=0,s=c.indexOf("aM")>=0,t=c.indexOf("aB")>=0,u=c.indexOf("aT")>=0,v=r||s||t||u,c.indexOf(" a")>-1?(n=" ",c=c.replace(" a","")):c=c.replace("a",""),y>=Math.pow(10,12)&&!v||u?(n+=o[p].abbreviations.trillion,a/=Math.pow(10,12)):y=Math.pow(10,9)&&!v||t?(n+=o[p].abbreviations.billion,a/=Math.pow(10,9)):y=Math.pow(10,6)&&!v||s?(n+=o[p].abbreviations.million,a/=Math.pow(10,6)):(y=Math.pow(10,3)&&!v||r)&&(n+=o[p].abbreviations.thousand,a/=Math.pow(10,3))),c.indexOf("b")>-1)for(c.indexOf(" b")>-1?(w=" ",c=c.replace(" b","")):c=c.replace("b",""),g=0;g<=z.length;g++)if(e=Math.pow(1024,g),f=Math.pow(1024,g+1),a>=e&&f>a){w+=z[g],e>0&&(a/=e);break}return c.indexOf("o")>-1&&(c.indexOf(" o")>-1?(x=" ",c=c.replace(" o","")):c=c.replace("o",""),x+=o[p].ordinal(a)),c.indexOf("[.]")>-1&&(m=!0,c=c.replace("[.]",".")),h=a.toString().split(".")[0],i=c.split(".")[1],j=c.indexOf(","),i?(i.indexOf("[")>-1?(i=i.replace("]",""),i=i.split("["),A=b(a,i[0].length+i[1].length,d,i[1].length)):A=b(a,i.length,d),h=A.split(".")[0],A=A.split(".")[1].length?o[p].delimiters.decimal+A.split(".")[1]:"",m&&0===Number(A.slice(1))&&(A="")):h=b(a,null,d),h.indexOf("-")>-1&&(h=h.slice(1),B=!0),j>-1&&(h=h.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g,"$1"+o[p].delimiters.thousands)),0===c.indexOf(".")&&(h=""),(k&&B?"(":"")+(!k&&B?"-":"")+(!B&&l?"+":"")+h+A+(x?x:"")+(n?n:"")+(w?w:"")+(k&&B?")":"")}function j(a,b){o[a]=b}function k(a){var b=a.toString().split(".");return b.length<2?1:Math.pow(10,b[1].length)}function l(){var a=Array.prototype.slice.call(arguments);return a.reduce(function(a,b){var c=k(a),d=k(b);return c>d?c:d},-1/0)}var m,n="1.5.3",o={},p="en",q=null,r="0,0",s="undefined"!=typeof module&&module.exports;m=function(b){return m.isNumeral(b)?b=b.value():0===b||"undefined"==typeof b?b=0:Number(b)||(b=m.fn.unformat(b)),new a(Number(b))},m.version=n,m.isNumeral=function(b){return b instanceof a},m.language=function(a,b){if(!a)return p;if(a&&!b){if(!o[a])throw new Error("Unknown language : "+a);p=a}return(b||!o[a])&&j(a,b),m},m.languageData=function(a){if(!a)return o[p];if(!o[a])throw new Error("Unknown language : "+a);return o[a]},m.language("en",{delimiters:{thousands:",",decimal:"."},abbreviations:{thousand:"k",million:"m",billion:"b",trillion:"t"},ordinal:function(a){var b=a%10;return 1===~~(a%100/10)?"th":1===b?"st":2===b?"nd":3===b?"rd":"th"},currency:{symbol:"$"}}),m.zeroFormat=function(a){q="string"==typeof a?a:null},m.defaultFormat=function(a){r="string"==typeof a?a:"0.0"},"function"!=typeof Array.prototype.reduce&&(Array.prototype.reduce=function(a,b){"use strict";if(null===this||"undefined"==typeof this)throw new TypeError("Array.prototype.reduce called on null or undefined");if("function"!=typeof a)throw new TypeError(a+" is not a function");var c,d,e=this.length>>>0,f=!1;for(1c;++c)this.hasOwnProperty(c)&&(f?d=a(d,this[c],c,this):(d=this[c],f=!0));if(!f)throw new TypeError("Reduce of empty array with no initial value");return d}),m.fn=a.prototype={clone:function(){return m(this)},format:function(a,b){return c(this,a?a:r,void 0!==b?b:Math.round)},unformat:function(a){return"[object Number]"===Object.prototype.toString.call(a)?a:d(this,a?a:r)},value:function(){return this._value},valueOf:function(){return this._value},set:function(a){return this._value=Number(a),this},add:function(a){function b(a,b){return a+c*b}var c=l.call(null,this._value,a);return this._value=[this._value,a].reduce(b,0)/c,this},subtract:function(a){function b(a,b){return a-c*b}var c=l.call(null,this._value,a);return this._value=[a].reduce(b,this._value*c)/c,this},multiply:function(a){function b(a,b){var c=l(a,b);return a*c*b*c/(c*c)}return this._value=[this._value,a].reduce(b,1),this},divide:function(a){function b(a,b){var c=l(a,b);return a*c/(b*c)}return this._value=[this._value,a].reduce(b),this},difference:function(a){return Math.abs(m(this._value).subtract(a).value())}},s&&(module.exports=m),"undefined"==typeof ender&&(this.numeral=m),"function"==typeof define&&define.amd&&define([],function(){return m})}).call(this);var TimeFormatters={formatUT:function(t){var day,year;if(t==null){t=0}year=(t/(365*24*3600)|0)+1;t%=365*24*3600;day=(t/(24*3600)|0)+1;t%=24*3600;return"Year "+year+", Day "+day+", "+this.hourMinSec(t)+" UT"},formatMET:function(t){var result;if(t==null){t=0}result="T+";if(t>=365*24*3600){result+=(t/(365*24*3600)|0)+":";t%=365*24*3600;if(t<24*3600){result+="0:"}}if(t>=24*3600){result+=(t/(24*3600)|0)+":"}t%=24*3600;return result+this.hourMinSec(t)+" MET"},hourMinSec:function(t){var hour,min,sec;if(t==null){t=0}hour=t/3600|0;if(hour<10){hour="0"+hour}t%=3600;min=t/60|0;if(min<10){min="0"+min}sec=(t%60|0).toFixed();if(sec<10){sec="0"+sec}return""+hour+":"+min+":"+sec},durationString:function(t){var result;if(t==null){t=0}result=t<0?"-":"";t=Math.abs(t);if(t>=365*24*3600){result+=(t/(365*24*3600)|0)+" years ";t%=365*24*3600;if(t<24*3600){result+="0 days "}}if(t>=24*3600){result+=(t/(24*3600)|0)+" days "}t%=24*3600;return result+this.hourMinSec(t)}};var DataFormatters={distanceString:function(value){return numeral(value).format("0,0.000 a")+"m"},heightFromTerrainString:function(value){if(value<=-1){return"NA"}return numeral(value).format("0,0.000 a")+"m"},degreeString:function(value){return numeral(value).format("0.000")+"°"},velocityString:function(value){return numeral(value).format("0,0.000 a")+"m/s"},temperatureString:function(value){if(!value){return"NA"}return numeral(value).format("0,000")+"°C"},accelerationSensorString:function(value){if(value[0]=="No Sensors of the Appropriate Type"){return"NA"}return numeral(value[1][0]).format("0,000")+"G"},pressureSensorString:function(value){if(value[0]=="No Sensors of the Appropriate Type"){return"NA"}return numeral(value[1][0]).format("0,000")+"Pa"},gravitySensorString:function(value){if(value[0]=="No Sensors of the Appropriate Type"){return"NA"}return numeral(value[1][0]).format("0,000 a")+"m/s²"},newtonsString:function(value){return numeral(value).format("0,0.00")+" N"},percentageString:function(value){return numeral(value).format("0%")},tonnageString:function(value){return numeral(value).format("0,0.00")+" t"},timeString:function(value){return numeral(value).format("00:00:00")},plainNumberString:function(value){return numeral(value).format("0,0.00")}};var Prototype={Version:"1.7.2",Browser:function(){var ua=navigator.userAgent;var isOpera=Object.prototype.toString.call(window.opera)=="[object Opera]";return{IE:!!window.attachEvent&&!isOpera,Opera:isOpera,WebKit:ua.indexOf("AppleWebKit/")>-1,Gecko:ua.indexOf("Gecko")>-1&&ua.indexOf("KHTML")===-1,MobileSafari:/Apple.*Mobile/.test(ua)}}(),BrowserFeatures:{XPath:!!document.evaluate,SelectorsAPI:!!document.querySelector,ElementExtensions:function(){var constructor=window.Element||window.HTMLElement;return!!(constructor&&constructor.prototype)}(),SpecificElementExtensions:function(){if(typeof window.HTMLDivElement!=="undefined")return true;var div=document.createElement("div"),form=document.createElement("form"),isSupported=false;if(div["__proto__"]&&div["__proto__"]!==form["__proto__"]){isSupported=true}div=form=null;return isSupported}()},ScriptFragment:"]*>([\\S\\s]*?)",JSONFilter:/^\/\*-secure-([\s\S]*)\*\/\s*$/,emptyFunction:function(){},K:function(x){return x}};if(Prototype.Browser.MobileSafari)Prototype.BrowserFeatures.SpecificElementExtensions=false;var Class=function(){var IS_DONTENUM_BUGGY=function(){for(var p in{toString:1}){if(p==="toString")return false}return true}();function subclass(){}function create(){var parent=null,properties=$A(arguments);if(Object.isFunction(properties[0]))parent=properties.shift();function klass(){this.initialize.apply(this,arguments)}Object.extend(klass,Class.Methods);klass.superclass=parent;klass.subclasses=[];if(parent){subclass.prototype=parent.prototype;klass.prototype=new subclass;parent.subclasses.push(klass)}for(var i=0,length=properties.length;i0){match=source.match(pattern);if(match&&match[0].length>0){result+=source.slice(0,match.index);result+=String.interpret(replacement(match));source=source.slice(match.index+match[0].length)}else{result+=source,source=""}}return result}function sub(pattern,replacement,count){replacement=prepareReplacement(replacement);count=Object.isUndefined(count)?1:count;return this.gsub(pattern,function(match){if(--count<0)return match[0];return replacement(match)})}function scan(pattern,iterator){this.gsub(pattern,iterator);return String(this)}function truncate(length,truncation){length=length||30;truncation=Object.isUndefined(truncation)?"...":truncation;return this.length>length?this.slice(0,length-truncation.length)+truncation:String(this)}function strip(){return this.replace(/^\s+/,"").replace(/\s+$/,"")}function stripTags(){return this.replace(/<\w+(\s+("[^"]*"|'[^']*'|[^>])+)?>|<\/\w+>/gi,"")}function stripScripts(){return this.replace(new RegExp(Prototype.ScriptFragment,"img"),"")}function extractScripts(){var matchAll=new RegExp(Prototype.ScriptFragment,"img"),matchOne=new RegExp(Prototype.ScriptFragment,"im");return(this.match(matchAll)||[]).map(function(scriptTag){return(scriptTag.match(matchOne)||["",""])[1]})}function evalScripts(){return this.extractScripts().map(function(script){return eval(script)})}function escapeHTML(){return this.replace(/&/g,"&").replace(//g,">")}function unescapeHTML(){return this.stripTags().replace(/</g,"<").replace(/>/g,">").replace(/&/g,"&")}function toQueryParams(separator){var match=this.strip().match(/([^?#]*)(#.*)?$/);if(!match)return{};return match[1].split(separator||"&").inject({},function(hash,pair){if((pair=pair.split("="))[0]){var key=decodeURIComponent(pair.shift()),value=pair.length>1?pair.join("="):pair[0];if(value!=undefined){value=value.gsub("+"," ");value=decodeURIComponent(value)}if(key in hash){if(!Object.isArray(hash[key]))hash[key]=[hash[key]];hash[key].push(value)}else hash[key]=value}return hash})}function toArray(){return this.split("")}function succ(){return this.slice(0,this.length-1)+String.fromCharCode(this.charCodeAt(this.length-1)+1)}function times(count){return count<1?"":new Array(count+1).join(this)}function camelize(){return this.replace(/-+(.)?/g,function(match,chr){return chr?chr.toUpperCase():""})}function capitalize(){return this.charAt(0).toUpperCase()+this.substring(1).toLowerCase()}function underscore(){return this.replace(/::/g,"/").replace(/([A-Z]+)([A-Z][a-z])/g,"$1_$2").replace(/([a-z\d])([A-Z])/g,"$1_$2").replace(/-/g,"_").toLowerCase()}function dasherize(){return this.replace(/_/g,"-")}function inspect(useDoubleQuotes){var escapedString=this.replace(/[\x00-\x1f\\]/g,function(character){if(character in String.specialChar){return String.specialChar[character]}return"\\u00"+character.charCodeAt().toPaddedString(2,16)});if(useDoubleQuotes)return'"'+escapedString.replace(/"/g,'\\"')+'"';return"'"+escapedString.replace(/'/g,"\\'")+"'"}function unfilterJSON(filter){return this.replace(filter||Prototype.JSONFilter,"$1")}function isJSON(){var str=this;if(str.blank())return false;str=str.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,"@");str=str.replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,"]");str=str.replace(/(?:^|:|,)(?:\s*\[)+/g,"");return/^[\],:{}\s]*$/.test(str)}function evalJSON(sanitize){var json=this.unfilterJSON(),cx=/[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g;if(cx.test(json)){json=json.replace(cx,function(a){return"\\u"+("0000"+a.charCodeAt(0).toString(16)).slice(-4)})}try{if(!sanitize||json.isJSON())return eval("("+json+")")}catch(e){}throw new SyntaxError("Badly formed JSON string: "+this.inspect())}function parseJSON(){var json=this.unfilterJSON();return JSON.parse(json)}function include(pattern){return this.indexOf(pattern)>-1}function startsWith(pattern,position){position=Object.isNumber(position)?position:0;return this.lastIndexOf(pattern,position)===position}function endsWith(pattern,position){pattern=String(pattern);position=Object.isNumber(position)?position:this.length;if(position<0)position=0;if(position>this.length)position=this.length;var d=position-pattern.length;return d>=0&&this.indexOf(pattern,d)===d}function empty(){return this==""}function blank(){return/^\s*$/.test(this)}function interpolate(object,pattern){return new Template(this,pattern).evaluate(object)}return{gsub:gsub,sub:sub,scan:scan,truncate:truncate,strip:String.prototype.trim||strip,stripTags:stripTags,stripScripts:stripScripts,extractScripts:extractScripts,evalScripts:evalScripts,escapeHTML:escapeHTML,unescapeHTML:unescapeHTML,toQueryParams:toQueryParams,parseQuery:toQueryParams,toArray:toArray,succ:succ,times:times,camelize:camelize,capitalize:capitalize,underscore:underscore,dasherize:dasherize,inspect:inspect,unfilterJSON:unfilterJSON,isJSON:isJSON,evalJSON:NATIVE_JSON_PARSE_SUPPORT?parseJSON:evalJSON,include:include,startsWith:String.prototype.startsWith||startsWith,endsWith:String.prototype.endsWith||endsWith,empty:empty,blank:blank,interpolate:interpolate}}());var Template=Class.create({initialize:function(template,pattern){this.template=template.toString();this.pattern=pattern||Template.Pattern},evaluate:function(object){if(object&&Object.isFunction(object.toTemplateReplacements))object=object.toTemplateReplacements();return this.template.gsub(this.pattern,function(match){if(object==null)return match[1]+"";var before=match[1]||"";if(before=="\\")return match[2];var ctx=object,expr=match[3],pattern=/^([^.[]+|\[((?:.*?[^\\])?)\])(\.|\[|$)/;match=pattern.exec(expr);if(match==null)return before;while(match!=null){var comp=match[1].startsWith("[")?match[2].replace(/\\\\]/g,"]"):match[1];ctx=ctx[comp];if(null==ctx||""==match[3])break;expr=expr.substring("["==match[3]?match[1].length:match[0].length);match=pattern.exec(expr)}return before+String.interpret(ctx)})}});Template.Pattern=/(^|.|\r|\n)(#\{(.*?)\})/;var $break={};var Enumerable=function(){function each(iterator,context){try{this._each(iterator,context)}catch(e){if(e!=$break)throw e}return this}function eachSlice(number,iterator,context){var index=-number,slices=[],array=this.toArray();if(number<1)return array;while((index+=number)=result)result=value},this);return result}function min(iterator,context){iterator=iterator||Prototype.K;var result;this.each(function(value,index){value=iterator.call(context,value,index,this);if(result==null||valueb?1:0}).pluck("value")}function toArray(){return this.map()}function zip(){var iterator=Prototype.K,args=$A(arguments);if(Object.isFunction(args.last()))iterator=args.pop();var collections=[this].concat(args).map($A);return this.map(function(value,index){return iterator(collections.pluck(index))})}function size(){return this.toArray().length}function inspect(){return"#"}return{each:each,eachSlice:eachSlice,all:all,every:all,any:any,some:any,collect:collect,map:collect,detect:detect,findAll:findAll,select:findAll,filter:findAll,grep:grep,include:include,member:include,inGroupsOf:inGroupsOf,inject:inject,invoke:invoke,max:max,min:min,partition:partition,pluck:pluck,reject:reject,sortBy:sortBy,toArray:toArray,entries:toArray,zip:zip,size:size,inspect:inspect,find:detect}}();function $A(iterable){if(!iterable)return[];if("toArray"in Object(iterable))return iterable.toArray();var length=iterable.length||0,results=new Array(length);while(length--)results[length]=iterable[length];return results}function $w(string){if(!Object.isString(string))return[];string=string.strip();return string?string.split(/\s+/):[]}Array.from=$A;(function(){var arrayProto=Array.prototype,slice=arrayProto.slice,_each=arrayProto.forEach;function each(iterator,context){for(var i=0,length=this.length>>>0;i>>0;if(length===0)return-1;i=Number(i);if(isNaN(i)){i=0}else if(i!==0&&isFinite(i)){i=(i>0?1:-1)*Math.floor(Math.abs(i))}if(i>length)return-1;var k=i>=0?i:Math.max(length-Math.abs(i),0);for(;k>>0;if(length===0)return-1;if(!Object.isUndefined(i)){i=Number(i);if(isNaN(i)){i=0}else if(i!==0&&isFinite(i)){i=(i>0?1:-1)*Math.floor(Math.abs(i))}}else{i=length}var k=i>=0?Math.min(i,length-1):length-Math.abs(i);for(;k>=0;k--)if(k in array&&array[k]===item)return k;return-1}function concat(_){var array=[],items=slice.call(arguments,0),item,n=0;items.unshift(this);for(var i=0,length=items.length;i>>0;i>>0;i>>0;i>>0;i"}function clone(){return new Hash(this)}return{initialize:initialize,_each:_each,set:set,get:get,unset:unset,toObject:toObject,toTemplateReplacements:toObject,keys:keys,values:values,index:index,merge:merge,update:update,toQueryString:toQueryString,inspect:inspect,toJSON:toObject,clone:clone}}());Hash.from=$H;Object.extend(Number.prototype,function(){function toColorPart(){return this.toPaddedString(2,16)}function succ(){return this+1}function times(iterator,context){$R(0,this,true).each(iterator,context);return this}function toPaddedString(length,radix){var string=this.toString(radix||10);return"0".times(length-string.length)+string}function abs(){return Math.abs(this)}function round(){return Math.round(this)}function ceil(){return Math.ceil(this)}function floor(){return Math.floor(this)}return{toColorPart:toColorPart,succ:succ,times:times,toPaddedString:toPaddedString,abs:abs,round:round,ceil:ceil,floor:floor}}());function $R(start,end,exclusive){return new ObjectRange(start,end,exclusive)}var ObjectRange=Class.create(Enumerable,function(){function initialize(start,end,exclusive){this.start=start;this.end=end;this.exclusive=exclusive}function _each(iterator,context){var value=this.start,i;for(i=0;this.include(value);i++){iterator.call(context,value,i);value=value.succ()}}function include(value){if(value1&&!(readyState==4&&this._complete))this.respondToReadyState(this.transport.readyState)},setRequestHeaders:function(){var headers={"X-Requested-With":"XMLHttpRequest","X-Prototype-Version":Prototype.Version,Accept:"text/javascript, text/html, application/xml, text/xml, */*"};if(this.method=="post"){headers["Content-type"]=this.options.contentType+(this.options.encoding?"; charset="+this.options.encoding:"");if(this.transport.overrideMimeType&&(navigator.userAgent.match(/Gecko\/(\d{4})/)||[0,2005])[1]<2005)headers["Connection"]="close"}if(typeof this.options.requestHeaders=="object"){var extras=this.options.requestHeaders;if(Object.isFunction(extras.push))for(var i=0,length=extras.length;i=200&&status<300||status==304},getStatus:function(){try{if(this.transport.status===1223)return 204;return this.transport.status||0}catch(e){return 0}},respondToReadyState:function(readyState){var state=Ajax.Request.Events[readyState],response=new Ajax.Response(this);if(state=="Complete"){try{this._complete=true;(this.options["on"+response.status]||this.options["on"+(this.success()?"Success":"Failure")]||Prototype.emptyFunction)(response,response.headerJSON)}catch(e){this.dispatchException(e)}var contentType=response.getHeader("Content-type");if(this.options.evalJS=="force"||this.options.evalJS&&this.isSameOrigin()&&contentType&&contentType.match(/^\s*(text|application)\/(x-)?(java|ecma)script(;.*)?\s*$/i))this.evalResponse()}try{(this.options["on"+state]||Prototype.emptyFunction)(response,response.headerJSON);Ajax.Responders.dispatch("on"+state,this,response,response.headerJSON)}catch(e){this.dispatchException(e)}if(state=="Complete"){this.transport.onreadystatechange=Prototype.emptyFunction}},isSameOrigin:function(){var m=this.url.match(/^\s*https?:\/\/[^\/]*/);return!m||m[0]=="#{protocol}//#{domain}#{port}".interpolate({protocol:location.protocol,domain:document.domain,port:location.port?":"+location.port:""})},getHeader:function(name){try{return this.transport.getResponseHeader(name)||null}catch(e){return null}},evalResponse:function(){try{return eval((this.transport.responseText||"").unfilterJSON())}catch(e){this.dispatchException(e)}},dispatchException:function(exception){(this.options.onException||Prototype.emptyFunction)(this,exception);Ajax.Responders.dispatch("onException",this,exception)}});Ajax.Request.Events=["Uninitialized","Loading","Loaded","Interactive","Complete"];Ajax.Response=Class.create({initialize:function(request){this.request=request;var transport=this.transport=request.transport,readyState=this.readyState=transport.readyState;if(readyState>2&&!Prototype.Browser.IE||readyState==4){this.status=this.getStatus();this.statusText=this.getStatusText();this.responseText=String.interpret(transport.responseText);this.headerJSON=this._getHeaderJSON()}if(readyState==4){var xml=transport.responseXML;this.responseXML=Object.isUndefined(xml)?null:xml;this.responseJSON=this._getResponseJSON()}},status:0,statusText:"",getStatus:Ajax.Request.prototype.getStatus,getStatusText:function(){try{return this.transport.statusText||""}catch(e){return""}},getHeader:Ajax.Request.prototype.getHeader,getAllHeaders:function(){try{return this.getAllResponseHeaders()}catch(e){return null}},getResponseHeader:function(name){return this.transport.getResponseHeader(name)},getAllResponseHeaders:function(){return this.transport.getAllResponseHeaders()},_getHeaderJSON:function(){var json=this.getHeader("X-JSON");if(!json)return null;try{json=decodeURIComponent(escape(json))}catch(e){}try{return json.evalJSON(this.request.options.sanitizeJSON||!this.request.isSameOrigin())}catch(e){this.request.dispatchException(e)}},_getResponseJSON:function(){var options=this.request.options;if(!options.evalJSON||options.evalJSON!="force"&&!(this.getHeader("Content-type")||"").include("application/json")||this.responseText.blank())return null;try{return this.responseText.evalJSON(options.sanitizeJSON||!this.request.isSameOrigin())}catch(e){this.request.dispatchException(e)}}});Ajax.Updater=Class.create(Ajax.Request,{initialize:function($super,container,url,options){this.container={success:container.success||container,failure:container.failure||(container.success?null:container)};options=Object.clone(options);var onComplete=options.onComplete;options.onComplete=function(response,json){this.updateContent(response.responseText);if(Object.isFunction(onComplete))onComplete(response,json)}.bind(this);$super(url,options)},updateContent:function(responseText){var receiver=this.container[this.success()?"success":"failure"],options=this.options;if(!options.evalScripts)responseText=responseText.stripScripts();if(receiver=$(receiver)){if(options.insertion){if(Object.isString(options.insertion)){var insertion={};insertion[options.insertion]=responseText;receiver.insert(insertion)}else options.insertion(receiver,responseText)}else receiver.update(responseText)}}});Ajax.PeriodicalUpdater=Class.create(Ajax.Base,{initialize:function($super,container,url,options){$super(options);this.onComplete=this.options.onComplete;this.frequency=this.options.frequency||2;this.decay=this.options.decay||1;this.updater={};this.container=container;this.url=url;this.start()},start:function(){this.options.onComplete=this.updateComplete.bind(this);this.onTimerEvent()},stop:function(){this.updater.options.onComplete=undefined;clearTimeout(this.timer);(this.onComplete||Prototype.emptyFunction).apply(this,arguments)},updateComplete:function(response){if(this.options.decay){this.decay=response.responseText==this.lastText?this.decay*this.options.decay:1;this.lastText=response.responseText}this.timer=this.onTimerEvent.bind(this).delay(this.decay*this.frequency)},onTimerEvent:function(){this.updater=new Ajax.Updater(this.container,this.url,this.options)}});(function(GLOBAL){var UNDEFINED;var SLICE=Array.prototype.slice;var DIV=document.createElement("div");function $(element){if(arguments.length>1){for(var i=0,elements=[],length=arguments.length;i');return el.tagName.toLowerCase()==="input"&&el.name==="x"}catch(err){return false}}();var oldElement=GLOBAL.Element;function Element(tagName,attributes){attributes=attributes||{};tagName=tagName.toLowerCase();if(HAS_EXTENDED_CREATE_ELEMENT_SYNTAX&&attributes.name){tagName="<"+tagName+' name="'+attributes.name+'">';delete attributes.name;return Element.writeAttribute(document.createElement(tagName),attributes)}if(!ELEMENT_CACHE[tagName])ELEMENT_CACHE[tagName]=Element.extend(document.createElement(tagName));var node=shouldUseCreationCache(tagName,attributes)?ELEMENT_CACHE[tagName].cloneNode(false):document.createElement(tagName);return Element.writeAttribute(node,attributes)}GLOBAL.Element=Element;Object.extend(GLOBAL.Element,oldElement||{});if(oldElement)GLOBAL.Element.prototype=oldElement.prototype;Element.Methods={ByTag:{},Simulated:{}};var methods={};var INSPECT_ATTRIBUTES={id:"id",className:"class"};function inspect(element){element=$(element);var result="<"+element.tagName.toLowerCase();var attribute,value;for(var property in INSPECT_ATTRIBUTES){attribute=INSPECT_ATTRIBUTES[property];value=(element[property]||"").toString();if(value)result+=" "+attribute+"="+value.inspect(true)}return result+">"}methods.inspect=inspect;function visible(element){return $(element).style.display!=="none"}function toggle(element,bool){element=$(element);if(Object.isUndefined(bool))bool=!Element.visible(element);Element[bool?"show":"hide"](element);return element}function hide(element){element=$(element);element.style.display="none";return element}function show(element){element=$(element);element.style.display="";return element}Object.extend(methods,{visible:visible,toggle:toggle,hide:hide,show:show});function remove(element){element=$(element);element.parentNode.removeChild(element);return element}var SELECT_ELEMENT_INNERHTML_BUGGY=function(){var el=document.createElement("select"),isBuggy=true;el.innerHTML='';if(el.options&&el.options[0]){isBuggy=el.options[0].nodeName.toUpperCase()!=="OPTION"}el=null;return isBuggy}();var TABLE_ELEMENT_INNERHTML_BUGGY=function(){try{var el=document.createElement("table");if(el&&el.tBodies){el.innerHTML="test";var isBuggy=typeof el.tBodies[0]=="undefined";el=null;return isBuggy}}catch(e){return true}}();var LINK_ELEMENT_INNERHTML_BUGGY=function(){try{var el=document.createElement("div");el.innerHTML="";var isBuggy=el.childNodes.length===0;el=null;return isBuggy}catch(e){return true}}();var ANY_INNERHTML_BUGGY=SELECT_ELEMENT_INNERHTML_BUGGY||TABLE_ELEMENT_INNERHTML_BUGGY||LINK_ELEMENT_INNERHTML_BUGGY;var SCRIPT_ELEMENT_REJECTS_TEXTNODE_APPENDING=function(){var s=document.createElement("script"),isBuggy=false;try{s.appendChild(document.createTextNode(""));isBuggy=!s.firstChild||s.firstChild&&s.firstChild.nodeType!==3}catch(e){isBuggy=true}s=null;return isBuggy}();function update(element,content){element=$(element);var descendants=element.getElementsByTagName("*"),i=descendants.length;while(i--)purgeElement(descendants[i]);if(content&&content.toElement)content=content.toElement();if(Object.isElement(content))return element.update().insert(content);content=Object.toHTML(content);var tagName=element.tagName.toUpperCase();if(tagName==="SCRIPT"&&SCRIPT_ELEMENT_REJECTS_TEXTNODE_APPENDING){element.text=content;return element}if(ANY_INNERHTML_BUGGY){if(tagName in INSERTION_TRANSLATIONS.tags){while(element.firstChild)element.removeChild(element.firstChild);var nodes=getContentFromAnonymousElement(tagName,content.stripScripts());for(var i=0,node;node=nodes[i];i++)element.appendChild(node)}else if(LINK_ELEMENT_INNERHTML_BUGGY&&Object.isString(content)&&content.indexOf("-1){while(element.firstChild)element.removeChild(element.firstChild);var nodes=getContentFromAnonymousElement(tagName,content.stripScripts(),true);for(var i=0,node;node=nodes[i];i++)element.appendChild(node)}else{element.innerHTML=content.stripScripts()}}else{element.innerHTML=content.stripScripts()}content.evalScripts.bind(content).defer();return element}function replace(element,content){element=$(element);if(content&&content.toElement){content=content.toElement()}else if(!Object.isElement(content)){content=Object.toHTML(content);var range=element.ownerDocument.createRange();range.selectNode(element);content.evalScripts.bind(content).defer();content=range.createContextualFragment(content.stripScripts())}element.parentNode.replaceChild(content,element);return element}var INSERTION_TRANSLATIONS={before:function(element,node){element.parentNode.insertBefore(node,element)},top:function(element,node){element.insertBefore(node,element.firstChild)},bottom:function(element,node){element.appendChild(node)},after:function(element,node){element.parentNode.insertBefore(node,element.nextSibling)},tags:{TABLE:["","
    ",1],TBODY:["","
    ",2],TR:["","
    ",3],TD:["
    ","
    ",4],SELECT:["",1]}};var tags=INSERTION_TRANSLATIONS.tags;Object.extend(tags,{THEAD:tags.TBODY,TFOOT:tags.TBODY,TH:tags.TD});function replace_IE(element,content){element=$(element);if(content&&content.toElement)content=content.toElement();if(Object.isElement(content)){element.parentNode.replaceChild(content,element);return element}content=Object.toHTML(content);var parent=element.parentNode,tagName=parent.tagName.toUpperCase();if(tagName in INSERTION_TRANSLATIONS.tags){var nextSibling=Element.next(element);var fragments=getContentFromAnonymousElement(tagName,content.stripScripts());parent.removeChild(element);var iterator;if(nextSibling)iterator=function(node){parent.insertBefore(node,nextSibling)};else iterator=function(node){parent.appendChild(node)};fragments.each(iterator)}else{element.outerHTML=content.stripScripts()}content.evalScripts.bind(content).defer();return element}if("outerHTML"in document.documentElement)replace=replace_IE;function isContent(content){if(Object.isUndefined(content)||content===null)return false;if(Object.isString(content)||Object.isNumber(content))return true;if(Object.isElement(content))return true;if(content.toElement||content.toHTML)return true;return false}function insertContentAt(element,content,position){position=position.toLowerCase();var method=INSERTION_TRANSLATIONS[position];if(content&&content.toElement)content=content.toElement();if(Object.isElement(content)){method(element,content);return element}content=Object.toHTML(content);var tagName=(position==="before"||position==="after"?element.parentNode:element).tagName.toUpperCase();var childNodes=getContentFromAnonymousElement(tagName,content.stripScripts());if(position==="top"||position==="after")childNodes.reverse();for(var i=0,node;node=childNodes[i];i++)method(element,node);content.evalScripts.bind(content).defer()}function insert(element,insertions){element=$(element);if(isContent(insertions))insertions={bottom:insertions};for(var position in insertions)insertContentAt(element,insertions[position],position);return element}function wrap(element,wrapper,attributes){element=$(element);if(Object.isElement(wrapper)){$(wrapper).writeAttribute(attributes||{})}else if(Object.isString(wrapper)){wrapper=new Element(wrapper,attributes)}else{wrapper=new Element("div",wrapper)}if(element.parentNode)element.parentNode.replaceChild(wrapper,element);wrapper.appendChild(element);return wrapper}function cleanWhitespace(element){element=$(element);var node=element.firstChild;while(node){var nextNode=node.nextSibling;if(node.nodeType===Node.TEXT_NODE&&!/\S/.test(node.nodeValue))element.removeChild(node);node=nextNode}return element}function empty(element){return $(element).innerHTML.blank()}function getContentFromAnonymousElement(tagName,html,force){var t=INSERTION_TRANSLATIONS.tags[tagName],div=DIV;var workaround=!!t;if(!workaround&&force){workaround=true;t=["","",0]}if(workaround){div.innerHTML=" "+t[0]+html+t[1];div.removeChild(div.firstChild);for(var i=t[2];i--;)div=div.firstChild}else{div.innerHTML=html}return $A(div.childNodes)}function clone(element,deep){if(!(element=$(element)))return;var clone=element.cloneNode(deep);if(!HAS_UNIQUE_ID_PROPERTY){clone._prototypeUID=UNDEFINED;if(deep){var descendants=Element.select(clone,"*"),i=descendants.length;while(i--)descendants[i]._prototypeUID=UNDEFINED}}return Element.extend(clone)}function purgeElement(element){var uid=getUniqueElementID(element);if(uid){Element.stopObserving(element);if(!HAS_UNIQUE_ID_PROPERTY)element._prototypeUID=UNDEFINED;delete Element.Storage[uid]}}function purgeCollection(elements){var i=elements.length;while(i--)purgeElement(elements[i])}function purgeCollection_IE(elements){var i=elements.length,element,uid;while(i--){element=elements[i];uid=getUniqueElementID(element);delete Element.Storage[uid];delete Event.cache[uid]}}if(HAS_UNIQUE_ID_PROPERTY){purgeCollection=purgeCollection_IE}function purge(element){if(!(element=$(element)))return;purgeElement(element);var descendants=element.getElementsByTagName("*"),i=descendants.length;while(i--)purgeElement(descendants[i]);return null}Object.extend(methods,{remove:remove,update:update,replace:replace,insert:insert,wrap:wrap,cleanWhitespace:cleanWhitespace,empty:empty,clone:clone,purge:purge});function recursivelyCollect(element,property,maximumLength){element=$(element);maximumLength=maximumLength||-1;var elements=[];while(element=element[property]){if(element.nodeType===Node.ELEMENT_NODE)elements.push(Element.extend(element));if(elements.length===maximumLength)break}return elements}function ancestors(element){return recursivelyCollect(element,"parentNode")}function descendants(element){return Element.select(element,"*")}function firstDescendant(element){element=$(element).firstChild;while(element&&element.nodeType!==Node.ELEMENT_NODE)element=element.nextSibling;return $(element)}function immediateDescendants(element){var results=[],child=$(element).firstChild;while(child){if(child.nodeType===Node.ELEMENT_NODE)results.push(Element.extend(child));child=child.nextSibling}return results}function previousSiblings(element){return recursivelyCollect(element,"previousSibling")}function nextSiblings(element){return recursivelyCollect(element,"nextSibling")}function siblings(element){element=$(element);var previous=previousSiblings(element),next=nextSiblings(element);return previous.reverse().concat(next)}function match(element,selector){element=$(element);if(Object.isString(selector))return Prototype.Selector.match(element,selector);return selector.match(element)}function _recursivelyFind(element,property,expression,index){element=$(element),expression=expression||0,index=index||0;if(Object.isNumber(expression)){index=expression,expression=null}while(element=element[property]){if(element.nodeType!==1)continue;if(expression&&!Prototype.Selector.match(element,expression))continue;if(--index>=0)continue;return Element.extend(element)}}function up(element,expression,index){element=$(element);if(arguments.length===1)return $(element.parentNode);return _recursivelyFind(element,"parentNode",expression,index)}function down(element,expression,index){if(arguments.length===1)return firstDescendant(element);element=$(element),expression=expression||0,index=index||0;if(Object.isNumber(expression))index=expression,expression="*";var node=Prototype.Selector.select(expression,element)[index];return Element.extend(node)}function previous(element,expression,index){return _recursivelyFind(element,"previousSibling",expression,index)}function next(element,expression,index){return _recursivelyFind(element,"nextSibling",expression,index)}function select(element){element=$(element);var expressions=SLICE.call(arguments,1).join(", ");return Prototype.Selector.select(expressions,element)}function adjacent(element){element=$(element);var expressions=SLICE.call(arguments,1).join(", ");var siblings=Element.siblings(element),results=[];for(var i=0,sibling;sibling=siblings[i];i++){if(Prototype.Selector.match(sibling,expressions))results.push(sibling)}return results}function descendantOf_DOM(element,ancestor){element=$(element),ancestor=$(ancestor);while(element=element.parentNode)if(element===ancestor)return true;return false}function descendantOf_contains(element,ancestor){element=$(element),ancestor=$(ancestor);if(!ancestor.contains)return descendantOf_DOM(element,ancestor);return ancestor.contains(element)&&ancestor!==element}function descendantOf_compareDocumentPosition(element,ancestor){element=$(element),ancestor=$(ancestor);return(element.compareDocumentPosition(ancestor)&8)===8}var descendantOf;if(DIV.compareDocumentPosition){descendantOf=descendantOf_compareDocumentPosition}else if(DIV.contains){descendantOf=descendantOf_contains}else{descendantOf=descendantOf_DOM}Object.extend(methods,{recursivelyCollect:recursivelyCollect,ancestors:ancestors,descendants:descendants,firstDescendant:firstDescendant,immediateDescendants:immediateDescendants,previousSiblings:previousSiblings,nextSiblings:nextSiblings,siblings:siblings,match:match,up:up,down:down,previous:previous,next:next,select:select,adjacent:adjacent,descendantOf:descendantOf,getElementsBySelector:select,childElements:immediateDescendants});var idCounter=1;function identify(element){element=$(element);var id=Element.readAttribute(element,"id");if(id)return id;do{id="anonymous_element_"+idCounter++}while($(id));Element.writeAttribute(element,"id",id);return id}function readAttribute(element,name){return $(element).getAttribute(name)}function readAttribute_IE(element,name){element=$(element);var table=ATTRIBUTE_TRANSLATIONS.read;if(table.values[name])return table.values[name](element,name);if(table.names[name])name=table.names[name];if(name.include(":")){if(!element.attributes||!element.attributes[name])return null;return element.attributes[name].value}return element.getAttribute(name)}function readAttribute_Opera(element,name){if(name==="title")return element.title;return element.getAttribute(name)}var PROBLEMATIC_ATTRIBUTE_READING=function(){DIV.setAttribute("onclick",[]);var value=DIV.getAttribute("onclick");var isFunction=Object.isArray(value);DIV.removeAttribute("onclick");return isFunction}();if(PROBLEMATIC_ATTRIBUTE_READING){readAttribute=readAttribute_IE}else if(Prototype.Browser.Opera){readAttribute=readAttribute_Opera}function writeAttribute(element,name,value){element=$(element);var attributes={},table=ATTRIBUTE_TRANSLATIONS.write; +Math.toRadians = function(angleInDegrees){ + return angleInDegrees * (Math.PI/180) +} -if(typeof name==="object"){attributes=name}else{attributes[name]=Object.isUndefined(value)?true:value}for(var attr in attributes){name=table.names[attr]||attr;value=attributes[attr];if(table.values[attr])name=table.values[attr](element,value)||name;if(value===false||value===null)element.removeAttribute(name);else if(value===true)element.setAttribute(name,name);else element.setAttribute(name,value)}return element}var PROBLEMATIC_HAS_ATTRIBUTE_WITH_CHECKBOXES=function(){if(!HAS_EXTENDED_CREATE_ELEMENT_SYNTAX){return false}var checkbox=document.createElement('');checkbox.checked=true;var node=checkbox.getAttributeNode("checked");return!node||!node.specified}();function hasAttribute(element,attribute){attribute=ATTRIBUTE_TRANSLATIONS.has[attribute]||attribute;var node=$(element).getAttributeNode(attribute);return!!(node&&node.specified)}function hasAttribute_IE(element,attribute){if(attribute==="checked"){return element.checked}return hasAttribute(element,attribute)}GLOBAL.Element.Methods.Simulated.hasAttribute=PROBLEMATIC_HAS_ATTRIBUTE_WITH_CHECKBOXES?hasAttribute_IE:hasAttribute;function classNames(element){return new Element.ClassNames(element)}var regExpCache={};function getRegExpForClassName(className){if(regExpCache[className])return regExpCache[className];var re=new RegExp("(^|\\s+)"+className+"(\\s+|$)");regExpCache[className]=re;return re}function hasClassName(element,className){if(!(element=$(element)))return;var elementClassName=element.className;if(elementClassName.length===0)return false;if(elementClassName===className)return true;return getRegExpForClassName(className).test(elementClassName)}function addClassName(element,className){if(!(element=$(element)))return;if(!hasClassName(element,className))element.className+=(element.className?" ":"")+className;return element}function removeClassName(element,className){if(!(element=$(element)))return;element.className=element.className.replace(getRegExpForClassName(className)," ").strip();return element}function toggleClassName(element,className,bool){if(!(element=$(element)))return;if(Object.isUndefined(bool))bool=!hasClassName(element,className);var method=Element[bool?"addClassName":"removeClassName"];return method(element,className)}var ATTRIBUTE_TRANSLATIONS={};var classProp="className",forProp="for";DIV.setAttribute(classProp,"x");if(DIV.className!=="x"){DIV.setAttribute("class","x");if(DIV.className==="x")classProp="class"}var LABEL=document.createElement("label");LABEL.setAttribute(forProp,"x");if(LABEL.htmlFor!=="x"){LABEL.setAttribute("htmlFor","x");if(LABEL.htmlFor==="x")forProp="htmlFor"}LABEL=null;function _getAttr(element,attribute){return element.getAttribute(attribute)}function _getAttr2(element,attribute){return element.getAttribute(attribute,2)}function _getAttrNode(element,attribute){var node=element.getAttributeNode(attribute);return node?node.value:""}function _getFlag(element,attribute){return $(element).hasAttribute(attribute)?attribute:null}DIV.onclick=Prototype.emptyFunction;var onclickValue=DIV.getAttribute("onclick");var _getEv;if(String(onclickValue).indexOf("{")>-1){_getEv=function(element,attribute){var value=element.getAttribute(attribute);if(!value)return null;value=value.toString();value=value.split("{")[1];value=value.split("}")[0];return value.strip()}}else if(onclickValue===""){_getEv=function(element,attribute){var value=element.getAttribute(attribute);if(!value)return null;return value.strip()}}ATTRIBUTE_TRANSLATIONS.read={names:{class:classProp,className:classProp,for:forProp,htmlFor:forProp},values:{style:function(element){return element.style.cssText.toLowerCase()},title:function(element){return element.title}}};ATTRIBUTE_TRANSLATIONS.write={names:{className:"class",htmlFor:"for",cellpadding:"cellPadding",cellspacing:"cellSpacing"},values:{checked:function(element,value){element.checked=!!value},style:function(element,value){element.style.cssText=value?value:""}}};ATTRIBUTE_TRANSLATIONS.has={names:{}};Object.extend(ATTRIBUTE_TRANSLATIONS.write.names,ATTRIBUTE_TRANSLATIONS.read.names);var CAMEL_CASED_ATTRIBUTE_NAMES=$w("colSpan rowSpan vAlign dateTime "+"accessKey tabIndex encType maxLength readOnly longDesc frameBorder");for(var i=0,attr;attr=CAMEL_CASED_ATTRIBUTE_NAMES[i];i++){ATTRIBUTE_TRANSLATIONS.write.names[attr.toLowerCase()]=attr;ATTRIBUTE_TRANSLATIONS.has.names[attr.toLowerCase()]=attr}Object.extend(ATTRIBUTE_TRANSLATIONS.read.values,{href:_getAttr2,src:_getAttr2,type:_getAttr,action:_getAttrNode,disabled:_getFlag,checked:_getFlag,readonly:_getFlag,multiple:_getFlag,onload:_getEv,onunload:_getEv,onclick:_getEv,ondblclick:_getEv,onmousedown:_getEv,onmouseup:_getEv,onmouseover:_getEv,onmousemove:_getEv,onmouseout:_getEv,onfocus:_getEv,onblur:_getEv,onkeypress:_getEv,onkeydown:_getEv,onkeyup:_getEv,onsubmit:_getEv,onreset:_getEv,onselect:_getEv,onchange:_getEv});Object.extend(methods,{identify:identify,readAttribute:readAttribute,writeAttribute:writeAttribute,classNames:classNames,hasClassName:hasClassName,addClassName:addClassName,removeClassName:removeClassName,toggleClassName:toggleClassName});function normalizeStyleName(style){if(style==="float"||style==="styleFloat")return"cssFloat";return style.camelize()}function normalizeStyleName_IE(style){if(style==="float"||style==="cssFloat")return"styleFloat";return style.camelize()}function setStyle(element,styles){element=$(element);var elementStyle=element.style,match;if(Object.isString(styles)){elementStyle.cssText+=";"+styles;if(styles.include("opacity")){var opacity=styles.match(/opacity:\s*(\d?\.?\d*)/)[1];Element.setOpacity(element,opacity)}return element}for(var property in styles){if(property==="opacity"){Element.setOpacity(element,styles[property])}else{var value=styles[property];if(property==="float"||property==="cssFloat"){property=Object.isUndefined(elementStyle.styleFloat)?"cssFloat":"styleFloat"}elementStyle[property]=value}}return element}function getStyle(element,style){element=$(element);style=normalizeStyleName(style);var value=element.style[style];if(!value||value==="auto"){var css=document.defaultView.getComputedStyle(element,null);value=css?css[style]:null}if(style==="opacity")return value?parseFloat(value):1;return value==="auto"?null:value}function getStyle_Opera(element,style){switch(style){case"height":case"width":if(!Element.visible(element))return null;var dim=parseInt(getStyle(element,style),10);if(dim!==element["offset"+style.capitalize()])return dim+"px";return Element.measure(element,style);default:return getStyle(element,style)}}function getStyle_IE(element,style){element=$(element);style=normalizeStyleName_IE(style);var value=element.style[style];if(!value&&element.currentStyle){value=element.currentStyle[style]}if(style==="opacity"&&!STANDARD_CSS_OPACITY_SUPPORTED)return getOpacity_IE(element);if(value==="auto"){if((style==="width"||style==="height")&&Element.visible(element))return Element.measure(element,style)+"px";return null}return value}function stripAlphaFromFilter_IE(filter){return(filter||"").replace(/alpha\([^\)]*\)/gi,"")}function hasLayout_IE(element){if(!element.currentStyle||!element.currentStyle.hasLayout)element.style.zoom=1;return element}var STANDARD_CSS_OPACITY_SUPPORTED=function(){DIV.style.cssText="opacity:.55";return/^0.55/.test(DIV.style.opacity)}();function setOpacity(element,value){element=$(element);if(value==1||value==="")value="";else if(value<1e-5)value=0;element.style.opacity=value;return element}function setOpacity_IE(element,value){if(STANDARD_CSS_OPACITY_SUPPORTED)return setOpacity(element,value);element=hasLayout_IE($(element));var filter=Element.getStyle(element,"filter"),style=element.style;if(value==1||value===""){filter=stripAlphaFromFilter_IE(filter);if(filter)style.filter=filter;else style.removeAttribute("filter");return element}if(value<1e-5)value=0;style.filter=stripAlphaFromFilter_IE(filter)+"alpha(opacity="+value*100+")";return element}function getOpacity(element){return Element.getStyle(element,"opacity")}function getOpacity_IE(element){if(STANDARD_CSS_OPACITY_SUPPORTED)return getOpacity(element);var filter=Element.getStyle(element,"filter");if(filter.length===0)return 1;var match=(filter||"").match(/alpha\(opacity=(.*)\)/);if(match&&match[1])return parseFloat(match[1])/100;return 1}Object.extend(methods,{setStyle:setStyle,getStyle:getStyle,setOpacity:setOpacity,getOpacity:getOpacity});if("styleFloat"in DIV.style){methods.getStyle=getStyle_IE;methods.setOpacity=setOpacity_IE;methods.getOpacity=getOpacity_IE}var UID=0;GLOBAL.Element.Storage={UID:1};function getUniqueElementID(element){if(element===window)return 0;if(typeof element._prototypeUID==="undefined")element._prototypeUID=Element.Storage.UID++;return element._prototypeUID}function getUniqueElementID_IE(element){if(element===window)return 0;if(element==document)return 1;return element.uniqueID}var HAS_UNIQUE_ID_PROPERTY="uniqueID"in DIV;if(HAS_UNIQUE_ID_PROPERTY)getUniqueElementID=getUniqueElementID_IE;function getStorage(element){if(!(element=$(element)))return;var uid=getUniqueElementID(element);if(!Element.Storage[uid])Element.Storage[uid]=$H();return Element.Storage[uid]}function store(element,key,value){if(!(element=$(element)))return;var storage=getStorage(element);if(arguments.length===2){storage.update(key)}else{storage.set(key,value)}return element}function retrieve(element,key,defaultValue){if(!(element=$(element)))return;var storage=getStorage(element),value=storage.get(key);if(Object.isUndefined(value)){storage.set(key,defaultValue);value=defaultValue}return value}Object.extend(methods,{getStorage:getStorage,store:store,retrieve:retrieve});var Methods={},ByTag=Element.Methods.ByTag,F=Prototype.BrowserFeatures;if(!F.ElementExtensions&&"__proto__"in DIV){GLOBAL.HTMLElement={};GLOBAL.HTMLElement.prototype=DIV["__proto__"];F.ElementExtensions=true}function checkElementPrototypeDeficiency(tagName){if(typeof window.Element==="undefined")return false;if(!HAS_EXTENDED_CREATE_ELEMENT_SYNTAX)return false;var proto=window.Element.prototype;if(proto){var id="_"+(Math.random()+"").slice(2),el=document.createElement(tagName);proto[id]="x";var isBuggy=el[id]!=="x";delete proto[id];el=null;return isBuggy}return false}var HTMLOBJECTELEMENT_PROTOTYPE_BUGGY=checkElementPrototypeDeficiency("object");function extendElementWith(element,methods){for(var property in methods){var value=methods[property];if(Object.isFunction(value)&&!(property in element))element[property]=value.methodize()}}var EXTENDED={};function elementIsExtended(element){var uid=getUniqueElementID(element);return uid in EXTENDED}function extend(element){if(!element||elementIsExtended(element))return element;if(element.nodeType!==Node.ELEMENT_NODE||element==window)return element;var methods=Object.clone(Methods),tagName=element.tagName.toUpperCase();if(ByTag[tagName])Object.extend(methods,ByTag[tagName]);extendElementWith(element,methods);EXTENDED[getUniqueElementID(element)]=true;return element}function extend_IE8(element){if(!element||elementIsExtended(element))return element;var t=element.tagName;if(t&&/^(?:object|applet|embed)$/i.test(t)){extendElementWith(element,Element.Methods);extendElementWith(element,Element.Methods.Simulated);extendElementWith(element,Element.Methods.ByTag[t.toUpperCase()])}return element}if(F.SpecificElementExtensions){extend=HTMLOBJECTELEMENT_PROTOTYPE_BUGGY?extend_IE8:Prototype.K}function addMethodsToTagName(tagName,methods){tagName=tagName.toUpperCase();if(!ByTag[tagName])ByTag[tagName]={};Object.extend(ByTag[tagName],methods)}function mergeMethods(destination,methods,onlyIfAbsent){if(Object.isUndefined(onlyIfAbsent))onlyIfAbsent=false;for(var property in methods){var value=methods[property];if(!Object.isFunction(value))continue;if(!onlyIfAbsent||!(property in destination))destination[property]=value.methodize()}}function findDOMClass(tagName){var klass;var trans={OPTGROUP:"OptGroup",TEXTAREA:"TextArea",P:"Paragraph",FIELDSET:"FieldSet",UL:"UList",OL:"OList",DL:"DList",DIR:"Directory",H1:"Heading",H2:"Heading",H3:"Heading",H4:"Heading",H5:"Heading",H6:"Heading",Q:"Quote",INS:"Mod",DEL:"Mod",A:"Anchor",IMG:"Image",CAPTION:"TableCaption",COL:"TableCol",COLGROUP:"TableCol",THEAD:"TableSection",TFOOT:"TableSection",TBODY:"TableSection",TR:"TableRow",TH:"TableCell",TD:"TableCell",FRAMESET:"FrameSet",IFRAME:"IFrame"};if(trans[tagName])klass="HTML"+trans[tagName]+"Element";if(window[klass])return window[klass];klass="HTML"+tagName+"Element";if(window[klass])return window[klass];klass="HTML"+tagName.capitalize()+"Element";if(window[klass])return window[klass];var element=document.createElement(tagName),proto=element["__proto__"]||element.constructor.prototype;element=null;return proto}function addMethods(methods){if(arguments.length===0)addFormMethods();if(arguments.length===2){var tagName=methods;methods=arguments[1]}if(!tagName){Object.extend(Element.Methods,methods||{})}else{if(Object.isArray(tagName)){for(var i=0,tag;tag=tagName[i];i++)addMethodsToTagName(tag,methods)}else{addMethodsToTagName(tagName,methods)}}var ELEMENT_PROTOTYPE=window.HTMLElement?HTMLElement.prototype:Element.prototype;if(F.ElementExtensions){mergeMethods(ELEMENT_PROTOTYPE,Element.Methods);mergeMethods(ELEMENT_PROTOTYPE,Element.Methods.Simulated,true)}if(F.SpecificElementExtensions){for(var tag in Element.Methods.ByTag){var klass=findDOMClass(tag);if(Object.isUndefined(klass))continue;mergeMethods(klass.prototype,ByTag[tag])}}Object.extend(Element,Element.Methods);Object.extend(Element,Element.Methods.Simulated);delete Element.ByTag;delete Element.Simulated;Element.extend.refresh();ELEMENT_CACHE={}}Object.extend(GLOBAL.Element,{extend:extend,addMethods:addMethods});if(extend===Prototype.K){GLOBAL.Element.extend.refresh=Prototype.emptyFunction}else{GLOBAL.Element.extend.refresh=function(){if(Prototype.BrowserFeatures.ElementExtensions)return;Object.extend(Methods,Element.Methods);Object.extend(Methods,Element.Methods.Simulated);EXTENDED={}}}function addFormMethods(){Object.extend(Form,Form.Methods);Object.extend(Form.Element,Form.Element.Methods);Object.extend(Element.Methods.ByTag,{FORM:Object.clone(Form.Methods),INPUT:Object.clone(Form.Element.Methods),SELECT:Object.clone(Form.Element.Methods),TEXTAREA:Object.clone(Form.Element.Methods),BUTTON:Object.clone(Form.Element.Methods)})}Element.addMethods(methods);function destroyCache_IE(){DIV=null;ELEMENT_CACHE=null}if(window.attachEvent)window.attachEvent("onunload",destroyCache_IE)})(this);(function(){function toDecimal(pctString){var match=pctString.match(/^(\d+)%?$/i);if(!match)return null;return Number(match[1])/100}function getRawStyle(element,style){element=$(element);var value=element.style[style];if(!value||value==="auto"){var css=document.defaultView.getComputedStyle(element,null);value=css?css[style]:null}if(style==="opacity")return value?parseFloat(value):1;return value==="auto"?null:value}function getRawStyle_IE(element,style){var value=element.style[style];if(!value&&element.currentStyle){value=element.currentStyle[style]}return value}function getContentWidth(element,context){var boxWidth=element.offsetWidth;var bl=getPixelValue(element,"borderLeftWidth",context)||0;var br=getPixelValue(element,"borderRightWidth",context)||0;var pl=getPixelValue(element,"paddingLeft",context)||0;var pr=getPixelValue(element,"paddingRight",context)||0;return boxWidth-bl-br-pl-pr}if("currentStyle"in document.documentElement){getRawStyle=getRawStyle_IE}function getPixelValue(value,property,context){var element=null;if(Object.isElement(value)){element=value;value=getRawStyle(element,property)}if(value===null||Object.isUndefined(value)){return null}if(/^(?:-)?\d+(\.\d+)?(px)?$/i.test(value)){return window.parseFloat(value)}var isPercentage=value.include("%"),isViewport=context===document.viewport;if(/\d/.test(value)&&element&&element.runtimeStyle&&!(isPercentage&&isViewport)){var style=element.style.left,rStyle=element.runtimeStyle.left;element.runtimeStyle.left=element.currentStyle.left;element.style.left=value||0;value=element.style.pixelLeft;element.style.left=style;element.runtimeStyle.left=rStyle;return value}if(element&&isPercentage){context=context||element.parentNode;var decimal=toDecimal(value),whole=null;var isHorizontal=property.include("left")||property.include("right")||property.include("width");var isVertical=property.include("top")||property.include("bottom")||property.include("height");if(context===document.viewport){if(isHorizontal){whole=document.viewport.getWidth()}else if(isVertical){whole=document.viewport.getHeight()}}else{if(isHorizontal){whole=$(context).measure("width")}else if(isVertical){whole=$(context).measure("height")}}return whole===null?0:whole*decimal}return 0}function toCSSPixels(number){if(Object.isString(number)&&number.endsWith("px"))return number;return number+"px"}function isDisplayed(element){while(element&&element.parentNode){var display=element.getStyle("display");if(display==="none"){return false}element=$(element.parentNode)}return true}var hasLayout=Prototype.K;if("currentStyle"in document.documentElement){hasLayout=function(element){if(!element.currentStyle.hasLayout){element.style.zoom=1}return element}}function cssNameFor(key){if(key.include("border"))key=key+"-width";return key.camelize()}Element.Layout=Class.create(Hash,{initialize:function($super,element,preCompute){$super();this.element=$(element);Element.Layout.PROPERTIES.each(function(property){this._set(property,null)},this);if(preCompute){this._preComputing=true;this._begin();Element.Layout.PROPERTIES.each(this._compute,this);this._end();this._preComputing=false}},_set:function(property,value){return Hash.prototype.set.call(this,property,value)},set:function(property,value){throw"Properties of Element.Layout are read-only."},get:function($super,property){var value=$super(property);return value===null?this._compute(property):value},_begin:function(){if(this._isPrepared())return;var element=this.element;if(isDisplayed(element)){this._setPrepared(true);return}var originalStyles={position:element.style.position||"",width:element.style.width||"",visibility:element.style.visibility||"",display:element.style.display||""};element.store("prototype_original_styles",originalStyles);var position=getRawStyle(element,"position"),width=element.offsetWidth;if(width===0||width===null){element.style.display="block";width=element.offsetWidth}var context=position==="fixed"?document.viewport:element.parentNode;var tempStyles={visibility:"hidden",display:"block"};if(position!=="fixed")tempStyles.position="absolute";element.setStyle(tempStyles);var positionedWidth=element.offsetWidth,newWidth;if(width&&positionedWidth===width){newWidth=getContentWidth(element,context)}else if(position==="absolute"||position==="fixed"){newWidth=getContentWidth(element,context)}else{var parent=element.parentNode,pLayout=$(parent).getLayout();newWidth=pLayout.get("width")-this.get("margin-left")-this.get("border-left")-this.get("padding-left")-this.get("padding-right")-this.get("border-right")-this.get("margin-right")}element.setStyle({width:newWidth+"px"});this._setPrepared(true)},_end:function(){var element=this.element;var originalStyles=element.retrieve("prototype_original_styles");element.store("prototype_original_styles",null);element.setStyle(originalStyles);this._setPrepared(false)},_compute:function(property){var COMPUTATIONS=Element.Layout.COMPUTATIONS;if(!(property in COMPUTATIONS)){throw"Property not found."}return this._set(property,COMPUTATIONS[property].call(this,this.element))},_isPrepared:function(){return this.element.retrieve("prototype_element_layout_prepared",false)},_setPrepared:function(bool){return this.element.store("prototype_element_layout_prepared",bool)},toObject:function(){var args=$A(arguments);var keys=args.length===0?Element.Layout.PROPERTIES:args.join(" ").split(" ");var obj={};keys.each(function(key){if(!Element.Layout.PROPERTIES.include(key))return;var value=this.get(key);if(value!=null)obj[key]=value},this);return obj},toHash:function(){var obj=this.toObject.apply(this,arguments);return new Hash(obj)},toCSS:function(){var args=$A(arguments);var keys=args.length===0?Element.Layout.PROPERTIES:args.join(" ").split(" ");var css={};keys.each(function(key){if(!Element.Layout.PROPERTIES.include(key))return;if(Element.Layout.COMPOSITE_PROPERTIES.include(key))return;var value=this.get(key);if(value!=null)css[cssNameFor(key)]=value+"px"},this);return css},inspect:function(){return"#"}});Object.extend(Element.Layout,{PROPERTIES:$w("height width top left right bottom border-left border-right border-top border-bottom padding-left padding-right padding-top padding-bottom margin-top margin-bottom margin-left margin-right padding-box-width padding-box-height border-box-width border-box-height margin-box-width margin-box-height"),COMPOSITE_PROPERTIES:$w("padding-box-width padding-box-height margin-box-width margin-box-height border-box-width border-box-height"),COMPUTATIONS:{height:function(element){if(!this._preComputing)this._begin();var bHeight=this.get("border-box-height");if(bHeight<=0){if(!this._preComputing)this._end();return 0}var bTop=this.get("border-top"),bBottom=this.get("border-bottom");var pTop=this.get("padding-top"),pBottom=this.get("padding-bottom");if(!this._preComputing)this._end();return bHeight-bTop-bBottom-pTop-pBottom},width:function(element){if(!this._preComputing)this._begin();var bWidth=this.get("border-box-width");if(bWidth<=0){if(!this._preComputing)this._end();return 0}var bLeft=this.get("border-left"),bRight=this.get("border-right");var pLeft=this.get("padding-left"),pRight=this.get("padding-right");if(!this._preComputing)this._end();return bWidth-bLeft-bRight-pLeft-pRight},"padding-box-height":function(element){var height=this.get("height"),pTop=this.get("padding-top"),pBottom=this.get("padding-bottom");return height+pTop+pBottom},"padding-box-width":function(element){var width=this.get("width"),pLeft=this.get("padding-left"),pRight=this.get("padding-right");return width+pLeft+pRight},"border-box-height":function(element){if(!this._preComputing)this._begin();var height=element.offsetHeight;if(!this._preComputing)this._end();return height},"border-box-width":function(element){if(!this._preComputing)this._begin();var width=element.offsetWidth;if(!this._preComputing)this._end();return width},"margin-box-height":function(element){var bHeight=this.get("border-box-height"),mTop=this.get("margin-top"),mBottom=this.get("margin-bottom");if(bHeight<=0)return 0;return bHeight+mTop+mBottom},"margin-box-width":function(element){var bWidth=this.get("border-box-width"),mLeft=this.get("margin-left"),mRight=this.get("margin-right");if(bWidth<=0)return 0;return bWidth+mLeft+mRight},top:function(element){var offset=element.positionedOffset();return offset.top},bottom:function(element){var offset=element.positionedOffset(),parent=element.getOffsetParent(),pHeight=parent.measure("height");var mHeight=this.get("border-box-height");return pHeight-mHeight-offset.top},left:function(element){var offset=element.positionedOffset();return offset.left},right:function(element){var offset=element.positionedOffset(),parent=element.getOffsetParent(),pWidth=parent.measure("width");var mWidth=this.get("border-box-width");return pWidth-mWidth-offset.left},"padding-top":function(element){return getPixelValue(element,"paddingTop")},"padding-bottom":function(element){return getPixelValue(element,"paddingBottom")},"padding-left":function(element){return getPixelValue(element,"paddingLeft")},"padding-right":function(element){return getPixelValue(element,"paddingRight")},"border-top":function(element){return getPixelValue(element,"borderTopWidth")},"border-bottom":function(element){return getPixelValue(element,"borderBottomWidth")},"border-left":function(element){return getPixelValue(element,"borderLeftWidth")},"border-right":function(element){return getPixelValue(element,"borderRightWidth")},"margin-top":function(element){return getPixelValue(element,"marginTop")},"margin-bottom":function(element){return getPixelValue(element,"marginBottom")},"margin-left":function(element){return getPixelValue(element,"marginLeft")},"margin-right":function(element){return getPixelValue(element,"marginRight")}}});if("getBoundingClientRect"in document.documentElement){Object.extend(Element.Layout.COMPUTATIONS,{right:function(element){var parent=hasLayout(element.getOffsetParent());var rect=element.getBoundingClientRect(),pRect=parent.getBoundingClientRect();return(pRect.right-rect.right).round()},bottom:function(element){var parent=hasLayout(element.getOffsetParent());var rect=element.getBoundingClientRect(),pRect=parent.getBoundingClientRect();return(pRect.bottom-rect.bottom).round()}})}Element.Offset=Class.create({initialize:function(left,top){this.left=left.round();this.top=top.round();this[0]=this.left;this[1]=this.top},relativeTo:function(offset){return new Element.Offset(this.left-offset.left,this.top-offset.top)},inspect:function(){return"#".interpolate(this)},toString:function(){return"[#{left}, #{top}]".interpolate(this)},toArray:function(){return[this.left,this.top]}});function getLayout(element,preCompute){return new Element.Layout(element,preCompute)}function measure(element,property){return $(element).getLayout().get(property)}function getHeight(element){return Element.getDimensions(element).height}function getWidth(element){return Element.getDimensions(element).width}function getDimensions(element){element=$(element);var display=Element.getStyle(element,"display");if(display&&display!=="none"){return{width:element.offsetWidth,height:element.offsetHeight}}var style=element.style;var originalStyles={visibility:style.visibility,position:style.position,display:style.display};var newStyles={visibility:"hidden",display:"block"};if(originalStyles.position!=="fixed")newStyles.position="absolute";Element.setStyle(element,newStyles);var dimensions={width:element.offsetWidth,height:element.offsetHeight};Element.setStyle(element,originalStyles);return dimensions}function getOffsetParent(element){element=$(element);if(isDocument(element)||isDetached(element)||isBody(element)||isHtml(element))return $(document.body);var isInline=Element.getStyle(element,"display")==="inline";if(!isInline&&element.offsetParent)return $(element.offsetParent);while((element=element.parentNode)&&element!==document.body){if(Element.getStyle(element,"position")!=="static"){return isHtml(element)?$(document.body):$(element)}}return $(document.body)}function cumulativeOffset(element){element=$(element);var valueT=0,valueL=0;if(element.parentNode){do{valueT+=element.offsetTop||0;valueL+=element.offsetLeft||0;element=element.offsetParent}while(element)}return new Element.Offset(valueL,valueT)}function positionedOffset(element){element=$(element);var layout=element.getLayout();var valueT=0,valueL=0;do{valueT+=element.offsetTop||0;valueL+=element.offsetLeft||0;element=element.offsetParent;if(element){if(isBody(element))break;var p=Element.getStyle(element,"position");if(p!=="static")break}}while(element);valueL-=layout.get("margin-top");valueT-=layout.get("margin-left");return new Element.Offset(valueL,valueT)}function cumulativeScrollOffset(element){var valueT=0,valueL=0;do{if(element===document.body){var bodyScrollNode=document.documentElement||document.body.parentNode||document.body;valueT+=!Object.isUndefined(window.pageYOffset)?window.pageYOffset:bodyScrollNode.scrollTop||0;valueL+=!Object.isUndefined(window.pageXOffset)?window.pageXOffset:bodyScrollNode.scrollLeft||0;break}else{valueT+=element.scrollTop||0;valueL+=element.scrollLeft||0;element=element.parentNode}}while(element);return new Element.Offset(valueL,valueT)}function viewportOffset(forElement){var valueT=0,valueL=0,docBody=document.body;forElement=$(forElement);var element=forElement;do{valueT+=element.offsetTop||0;valueL+=element.offsetLeft||0;if(element.offsetParent==docBody&&Element.getStyle(element,"position")=="absolute")break}while(element=element.offsetParent);element=forElement;do{if(element!=docBody){valueT-=element.scrollTop||0;valueL-=element.scrollLeft||0}}while(element=element.parentNode);return new Element.Offset(valueL,valueT)}function absolutize(element){element=$(element);if(Element.getStyle(element,"position")==="absolute"){return element}var offsetParent=getOffsetParent(element);var eOffset=element.viewportOffset(),pOffset=offsetParent.viewportOffset();var offset=eOffset.relativeTo(pOffset);var layout=element.getLayout();element.store("prototype_absolutize_original_styles",{position:element.getStyle("position"),left:element.getStyle("left"),top:element.getStyle("top"),width:element.getStyle("width"),height:element.getStyle("height")});element.setStyle({position:"absolute",top:offset.top+"px",left:offset.left+"px",width:layout.get("width")+"px",height:layout.get("height")+"px"});return element}function relativize(element){element=$(element);if(Element.getStyle(element,"position")==="relative"){return element}var originalStyles=element.retrieve("prototype_absolutize_original_styles");if(originalStyles)element.setStyle(originalStyles);return element}function scrollTo(element){element=$(element);var pos=Element.cumulativeOffset(element);window.scrollTo(pos.left,pos.top);return element}function makePositioned(element){element=$(element);var position=Element.getStyle(element,"position"),styles={};if(position==="static"||!position){styles.position="relative";if(Prototype.Browser.Opera){styles.top=0;styles.left=0}Element.setStyle(element,styles);Element.store(element,"prototype_made_positioned",true)}return element}function undoPositioned(element){element=$(element);var storage=Element.getStorage(element),madePositioned=storage.get("prototype_made_positioned");if(madePositioned){storage.unset("prototype_made_positioned");Element.setStyle(element,{position:"",top:"",bottom:"",left:"",right:""})}return element}function makeClipping(element){element=$(element);var storage=Element.getStorage(element),madeClipping=storage.get("prototype_made_clipping");if(Object.isUndefined(madeClipping)){var overflow=Element.getStyle(element,"overflow");storage.set("prototype_made_clipping",overflow);if(overflow!=="hidden")element.style.overflow="hidden"}return element}function undoClipping(element){element=$(element);var storage=Element.getStorage(element),overflow=storage.get("prototype_made_clipping");if(!Object.isUndefined(overflow)){storage.unset("prototype_made_clipping");element.style.overflow=overflow||""}return element}function clonePosition(element,source,options){options=Object.extend({setLeft:true,setTop:true,setWidth:true,setHeight:true,offsetTop:0,offsetLeft:0},options||{});source=$(source);element=$(element);var p,delta,layout,styles={};if(options.setLeft||options.setTop){p=Element.viewportOffset(source);delta=[0,0];if(Element.getStyle(element,"position")==="absolute"){var parent=Element.getOffsetParent(element);if(parent!==document.body)delta=Element.viewportOffset(parent)}}if(options.setWidth||options.setHeight){layout=Element.getLayout(source)}if(options.setLeft)styles.left=p[0]-delta[0]+options.offsetLeft+"px";if(options.setTop)styles.top=p[1]-delta[1]+options.offsetTop+"px";if(options.setWidth)styles.width=layout.get("border-box-width")+"px";if(options.setHeight)styles.height=layout.get("border-box-height")+"px";return Element.setStyle(element,styles)}if(Prototype.Browser.IE){getOffsetParent=getOffsetParent.wrap(function(proceed,element){element=$(element);if(isDocument(element)||isDetached(element)||isBody(element)||isHtml(element))return $(document.body);var position=element.getStyle("position");if(position!=="static")return proceed(element);element.setStyle({position:"relative"});var value=proceed(element);element.setStyle({position:position});return value});positionedOffset=positionedOffset.wrap(function(proceed,element){element=$(element);if(!element.parentNode)return new Element.Offset(0,0);var position=element.getStyle("position"); +Math.crossProduct = function(x, y){ + [ + x[1]*y[2]-x[2]*y[1], + x[2]*y[0]-x[0]*y[2], + x[0]*y[1]-x[1]*y[0] + ] +} -if(position!=="static")return proceed(element);var offsetParent=element.getOffsetParent();if(offsetParent&&offsetParent.getStyle("position")==="fixed")hasLayout(offsetParent);element.setStyle({position:"relative"});var value=proceed(element);element.setStyle({position:position});return value})}else if(Prototype.Browser.Webkit){cumulativeOffset=function(element){element=$(element);var valueT=0,valueL=0;do{valueT+=element.offsetTop||0;valueL+=element.offsetLeft||0;if(element.offsetParent==document.body){if(Element.getStyle(element,"position")=="absolute")break}element=element.offsetParent}while(element);return new Element.Offset(valueL,valueT)}}Element.addMethods({getLayout:getLayout,measure:measure,getWidth:getWidth,getHeight:getHeight,getDimensions:getDimensions,getOffsetParent:getOffsetParent,cumulativeOffset:cumulativeOffset,positionedOffset:positionedOffset,cumulativeScrollOffset:cumulativeScrollOffset,viewportOffset:viewportOffset,absolutize:absolutize,relativize:relativize,scrollTo:scrollTo,makePositioned:makePositioned,undoPositioned:undoPositioned,makeClipping:makeClipping,undoClipping:undoClipping,clonePosition:clonePosition});function isBody(element){return element.nodeName.toUpperCase()==="BODY"}function isHtml(element){return element.nodeName.toUpperCase()==="HTML"}function isDocument(element){return element.nodeType===Node.DOCUMENT_NODE}function isDetached(element){return element!==document.body&&!Element.descendantOf(element,document.body)}if("getBoundingClientRect"in document.documentElement){Element.addMethods({viewportOffset:function(element){element=$(element);if(isDetached(element))return new Element.Offset(0,0);var rect=element.getBoundingClientRect(),docEl=document.documentElement;return new Element.Offset(rect.left-docEl.clientLeft,rect.top-docEl.clientTop)}})}})();(function(){var IS_OLD_OPERA=Prototype.Browser.Opera&&window.parseFloat(window.opera.version())<9.5;var ROOT=null;function getRootElement(){if(ROOT)return ROOT;ROOT=IS_OLD_OPERA?document.body:document.documentElement;return ROOT}function getDimensions(){return{width:this.getWidth(),height:this.getHeight()}}function getWidth(){return getRootElement().clientWidth}function getHeight(){return getRootElement().clientHeight}function getScrollOffsets(){var x=window.pageXOffset||document.documentElement.scrollLeft||document.body.scrollLeft;var y=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop;return new Element.Offset(x,y)}document.viewport={getDimensions:getDimensions,getWidth:getWidth,getHeight:getHeight,getScrollOffsets:getScrollOffsets}})();window.$$=function(){var expression=$A(arguments).join(", ");return Prototype.Selector.select(expression,document)};Prototype.Selector=function(){function select(){throw new Error('Method "Prototype.Selector.select" must be defined.')}function match(){throw new Error('Method "Prototype.Selector.match" must be defined.')}function find(elements,expression,index){index=index||0;var match=Prototype.Selector.match,length=elements.length,matchIndex=0,i;for(i=0;i+~]|"+whitespace+")"+whitespace+"*"),rattributeQuotes=new RegExp("="+whitespace+"*([^\\]'\"]*?)"+whitespace+"*\\]","g"),rpseudo=new RegExp(pseudos),ridentifier=new RegExp("^"+identifier+"$"),matchExpr={ID:new RegExp("^#("+characterEncoding+")"),CLASS:new RegExp("^\\.("+characterEncoding+")"),TAG:new RegExp("^("+characterEncoding.replace("w","w*")+")"),ATTR:new RegExp("^"+attributes),PSEUDO:new RegExp("^"+pseudos),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+whitespace+"*(even|odd|(([+-]|)(\\d*)n|)"+whitespace+"*(?:([+-]|)"+whitespace+"*(\\d+)|))"+whitespace+"*\\)|)","i"),bool:new RegExp("^(?:"+booleans+")$","i"),needsContext:new RegExp("^"+whitespace+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+whitespace+"*((?:-\\d)?\\d*)"+whitespace+"*\\)|)(?=[^-]|$)","i")},rinputs=/^(?:input|select|textarea|button)$/i,rheader=/^h\d$/i,rnative=/^[^{]+\{\s*\[native \w/,rquickExpr=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,rsibling=/[+~]/,rescape=/'|\\/g,runescape=new RegExp("\\\\([\\da-f]{1,6}"+whitespace+"?|("+whitespace+")|.)","ig"),funescape=function(_,escaped,escapedWhitespace){var high="0x"+escaped-65536;return high!==high||escapedWhitespace?escaped:high<0?String.fromCharCode(high+65536):String.fromCharCode(high>>10|55296,high&1023|56320)};try{push.apply(arr=slice.call(preferredDoc.childNodes),preferredDoc.childNodes);arr[preferredDoc.childNodes.length].nodeType}catch(e){push={apply:arr.length?function(target,els){push_native.apply(target,slice.call(els))}:function(target,els){var j=target.length,i=0;while(target[j++]=els[i++]){}target.length=j-1}}}function Sizzle(selector,context,results,seed){var match,elem,m,nodeType,i,groups,old,nid,newContext,newSelector;if((context?context.ownerDocument||context:preferredDoc)!==document){setDocument(context)}context=context||document;results=results||[];if(!selector||typeof selector!=="string"){return results}if((nodeType=context.nodeType)!==1&&nodeType!==9){return[]}if(documentIsHTML&&!seed){if(match=rquickExpr.exec(selector)){if(m=match[1]){if(nodeType===9){elem=context.getElementById(m);if(elem&&elem.parentNode){if(elem.id===m){results.push(elem);return results}}else{return results}}else{if(context.ownerDocument&&(elem=context.ownerDocument.getElementById(m))&&contains(context,elem)&&elem.id===m){results.push(elem);return results}}}else if(match[2]){push.apply(results,context.getElementsByTagName(selector));return results}else if((m=match[3])&&support.getElementsByClassName&&context.getElementsByClassName){push.apply(results,context.getElementsByClassName(m));return results}}if(support.qsa&&(!rbuggyQSA||!rbuggyQSA.test(selector))){nid=old=expando;newContext=context;newSelector=nodeType===9&&selector;if(nodeType===1&&context.nodeName.toLowerCase()!=="object"){groups=tokenize(selector);if(old=context.getAttribute("id")){nid=old.replace(rescape,"\\$&")}else{context.setAttribute("id",nid)}nid="[id='"+nid+"'] ";i=groups.length;while(i--){groups[i]=nid+toSelector(groups[i])}newContext=rsibling.test(selector)&&testContext(context.parentNode)||context;newSelector=groups.join(",")}if(newSelector){try{push.apply(results,newContext.querySelectorAll(newSelector));return results}catch(qsaError){}finally{if(!old){context.removeAttribute("id")}}}}}return select(selector.replace(rtrim,"$1"),context,results,seed)}function createCache(){var keys=[];function cache(key,value){if(keys.push(key+" ")>Expr.cacheLength){delete cache[keys.shift()]}return cache[key+" "]=value}return cache}function markFunction(fn){fn[expando]=true;return fn}function assert(fn){var div=document.createElement("div");try{return!!fn(div)}catch(e){return false}finally{if(div.parentNode){div.parentNode.removeChild(div)}div=null}}function addHandle(attrs,handler){var arr=attrs.split("|"),i=attrs.length;while(i--){Expr.attrHandle[arr[i]]=handler}}function siblingCheck(a,b){var cur=b&&a,diff=cur&&a.nodeType===1&&b.nodeType===1&&(~b.sourceIndex||MAX_NEGATIVE)-(~a.sourceIndex||MAX_NEGATIVE);if(diff){return diff}if(cur){while(cur=cur.nextSibling){if(cur===b){return-1}}}return a?1:-1}function createInputPseudo(type){return function(elem){var name=elem.nodeName.toLowerCase();return name==="input"&&elem.type===type}}function createButtonPseudo(type){return function(elem){var name=elem.nodeName.toLowerCase();return(name==="input"||name==="button")&&elem.type===type}}function createPositionalPseudo(fn){return markFunction(function(argument){argument=+argument;return markFunction(function(seed,matches){var j,matchIndexes=fn([],seed.length,argument),i=matchIndexes.length;while(i--){if(seed[j=matchIndexes[i]]){seed[j]=!(matches[j]=seed[j])}}})})}function testContext(context){return context&&typeof context.getElementsByTagName!==strundefined&&context}support=Sizzle.support={};isXML=Sizzle.isXML=function(elem){var documentElement=elem&&(elem.ownerDocument||elem).documentElement;return documentElement?documentElement.nodeName!=="HTML":false};setDocument=Sizzle.setDocument=function(node){var hasCompare,doc=node?node.ownerDocument||node:preferredDoc,parent=doc.defaultView;if(doc===document||doc.nodeType!==9||!doc.documentElement){return document}document=doc;docElem=doc.documentElement;documentIsHTML=!isXML(doc);if(parent&&parent!==parent.top){if(parent.addEventListener){parent.addEventListener("unload",function(){setDocument()},false)}else if(parent.attachEvent){parent.attachEvent("onunload",function(){setDocument()})}}support.attributes=assert(function(div){div.className="i";return!div.getAttribute("className")});support.getElementsByTagName=assert(function(div){div.appendChild(doc.createComment(""));return!div.getElementsByTagName("*").length});support.getElementsByClassName=rnative.test(doc.getElementsByClassName)&&assert(function(div){div.innerHTML="
    ";div.firstChild.className="i";return div.getElementsByClassName("i").length===2});support.getById=assert(function(div){docElem.appendChild(div).id=expando;return!doc.getElementsByName||!doc.getElementsByName(expando).length});if(support.getById){Expr.find["ID"]=function(id,context){if(typeof context.getElementById!==strundefined&&documentIsHTML){var m=context.getElementById(id);return m&&m.parentNode?[m]:[]}};Expr.filter["ID"]=function(id){var attrId=id.replace(runescape,funescape);return function(elem){return elem.getAttribute("id")===attrId}}}else{delete Expr.find["ID"];Expr.filter["ID"]=function(id){var attrId=id.replace(runescape,funescape);return function(elem){var node=typeof elem.getAttributeNode!==strundefined&&elem.getAttributeNode("id");return node&&node.value===attrId}}}Expr.find["TAG"]=support.getElementsByTagName?function(tag,context){if(typeof context.getElementsByTagName!==strundefined){return context.getElementsByTagName(tag)}}:function(tag,context){var elem,tmp=[],i=0,results=context.getElementsByTagName(tag);if(tag==="*"){while(elem=results[i++]){if(elem.nodeType===1){tmp.push(elem)}}return tmp}return results};Expr.find["CLASS"]=support.getElementsByClassName&&function(className,context){if(typeof context.getElementsByClassName!==strundefined&&documentIsHTML){return context.getElementsByClassName(className)}};rbuggyMatches=[];rbuggyQSA=[];if(support.qsa=rnative.test(doc.querySelectorAll)){assert(function(div){div.innerHTML="";if(div.querySelectorAll("[t^='']").length){rbuggyQSA.push("[*^$]="+whitespace+"*(?:''|\"\")")}if(!div.querySelectorAll("[selected]").length){rbuggyQSA.push("\\["+whitespace+"*(?:value|"+booleans+")")}if(!div.querySelectorAll(":checked").length){rbuggyQSA.push(":checked")}});assert(function(div){var input=doc.createElement("input");input.setAttribute("type","hidden");div.appendChild(input).setAttribute("name","D");if(div.querySelectorAll("[name=d]").length){rbuggyQSA.push("name"+whitespace+"*[*^$|!~]?=")}if(!div.querySelectorAll(":enabled").length){rbuggyQSA.push(":enabled",":disabled")}div.querySelectorAll("*,:x");rbuggyQSA.push(",.*:")})}if(support.matchesSelector=rnative.test(matches=docElem.webkitMatchesSelector||docElem.mozMatchesSelector||docElem.oMatchesSelector||docElem.msMatchesSelector)){assert(function(div){support.disconnectedMatch=matches.call(div,"div");matches.call(div,"[s!='']:x");rbuggyMatches.push("!=",pseudos)})}rbuggyQSA=rbuggyQSA.length&&new RegExp(rbuggyQSA.join("|"));rbuggyMatches=rbuggyMatches.length&&new RegExp(rbuggyMatches.join("|"));hasCompare=rnative.test(docElem.compareDocumentPosition);contains=hasCompare||rnative.test(docElem.contains)?function(a,b){var adown=a.nodeType===9?a.documentElement:a,bup=b&&b.parentNode;return a===bup||!!(bup&&bup.nodeType===1&&(adown.contains?adown.contains(bup):a.compareDocumentPosition&&a.compareDocumentPosition(bup)&16))}:function(a,b){if(b){while(b=b.parentNode){if(b===a){return true}}}return false};sortOrder=hasCompare?function(a,b){if(a===b){hasDuplicate=true;return 0}var compare=!a.compareDocumentPosition-!b.compareDocumentPosition;if(compare){return compare}compare=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1;if(compare&1||!support.sortDetached&&b.compareDocumentPosition(a)===compare){if(a===doc||a.ownerDocument===preferredDoc&&contains(preferredDoc,a)){return-1}if(b===doc||b.ownerDocument===preferredDoc&&contains(preferredDoc,b)){return 1}return sortInput?indexOf.call(sortInput,a)-indexOf.call(sortInput,b):0}return compare&4?-1:1}:function(a,b){if(a===b){hasDuplicate=true;return 0}var cur,i=0,aup=a.parentNode,bup=b.parentNode,ap=[a],bp=[b];if(!aup||!bup){return a===doc?-1:b===doc?1:aup?-1:bup?1:sortInput?indexOf.call(sortInput,a)-indexOf.call(sortInput,b):0}else if(aup===bup){return siblingCheck(a,b)}cur=a;while(cur=cur.parentNode){ap.unshift(cur)}cur=b;while(cur=cur.parentNode){bp.unshift(cur)}while(ap[i]===bp[i]){i++}return i?siblingCheck(ap[i],bp[i]):ap[i]===preferredDoc?-1:bp[i]===preferredDoc?1:0};return doc};Sizzle.matches=function(expr,elements){return Sizzle(expr,null,null,elements)};Sizzle.matchesSelector=function(elem,expr){if((elem.ownerDocument||elem)!==document){setDocument(elem)}expr=expr.replace(rattributeQuotes,"='$1']");if(support.matchesSelector&&documentIsHTML&&(!rbuggyMatches||!rbuggyMatches.test(expr))&&(!rbuggyQSA||!rbuggyQSA.test(expr))){try{var ret=matches.call(elem,expr);if(ret||support.disconnectedMatch||elem.document&&elem.document.nodeType!==11){return ret}}catch(e){}}return Sizzle(expr,document,null,[elem]).length>0};Sizzle.contains=function(context,elem){if((context.ownerDocument||context)!==document){setDocument(context)}return contains(context,elem)};Sizzle.attr=function(elem,name){if((elem.ownerDocument||elem)!==document){setDocument(elem)}var fn=Expr.attrHandle[name.toLowerCase()],val=fn&&hasOwn.call(Expr.attrHandle,name.toLowerCase())?fn(elem,name,!documentIsHTML):undefined;return val!==undefined?val:support.attributes||!documentIsHTML?elem.getAttribute(name):(val=elem.getAttributeNode(name))&&val.specified?val.value:null};Sizzle.error=function(msg){throw new Error("Syntax error, unrecognized expression: "+msg)};Sizzle.uniqueSort=function(results){var elem,duplicates=[],j=0,i=0;hasDuplicate=!support.detectDuplicates;sortInput=!support.sortStable&&results.slice(0);results.sort(sortOrder);if(hasDuplicate){while(elem=results[i++]){if(elem===results[i]){j=duplicates.push(i)}}while(j--){results.splice(duplicates[j],1)}}sortInput=null;return results};getText=Sizzle.getText=function(elem){var node,ret="",i=0,nodeType=elem.nodeType;if(!nodeType){while(node=elem[i++]){ret+=getText(node)}}else if(nodeType===1||nodeType===9||nodeType===11){if(typeof elem.textContent==="string"){return elem.textContent}else{for(elem=elem.firstChild;elem;elem=elem.nextSibling){ret+=getText(elem)}}}else if(nodeType===3||nodeType===4){return elem.nodeValue}return ret};Expr=Sizzle.selectors={cacheLength:50,createPseudo:markFunction,match:matchExpr,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:true}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:true},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(match){match[1]=match[1].replace(runescape,funescape);match[3]=(match[4]||match[5]||"").replace(runescape,funescape);if(match[2]==="~="){match[3]=" "+match[3]+" "}return match.slice(0,4)},CHILD:function(match){match[1]=match[1].toLowerCase();if(match[1].slice(0,3)==="nth"){if(!match[3]){Sizzle.error(match[0])}match[4]=+(match[4]?match[5]+(match[6]||1):2*(match[3]==="even"||match[3]==="odd"));match[5]=+(match[7]+match[8]||match[3]==="odd")}else if(match[3]){Sizzle.error(match[0])}return match},PSEUDO:function(match){var excess,unquoted=!match[5]&&match[2];if(matchExpr["CHILD"].test(match[0])){return null}if(match[3]&&match[4]!==undefined){match[2]=match[4]}else if(unquoted&&rpseudo.test(unquoted)&&(excess=tokenize(unquoted,true))&&(excess=unquoted.indexOf(")",unquoted.length-excess)-unquoted.length)){match[0]=match[0].slice(0,excess);match[2]=unquoted.slice(0,excess)}return match.slice(0,3)}},filter:{TAG:function(nodeNameSelector){var nodeName=nodeNameSelector.replace(runescape,funescape).toLowerCase();return nodeNameSelector==="*"?function(){return true}:function(elem){return elem.nodeName&&elem.nodeName.toLowerCase()===nodeName}},CLASS:function(className){var pattern=classCache[className+" "];return pattern||(pattern=new RegExp("(^|"+whitespace+")"+className+"("+whitespace+"|$)"))&&classCache(className,function(elem){return pattern.test(typeof elem.className==="string"&&elem.className||typeof elem.getAttribute!==strundefined&&elem.getAttribute("class")||"")})},ATTR:function(name,operator,check){return function(elem){var result=Sizzle.attr(elem,name);if(result==null){return operator==="!="}if(!operator){return true}result+="";return operator==="="?result===check:operator==="!="?result!==check:operator==="^="?check&&result.indexOf(check)===0:operator==="*="?check&&result.indexOf(check)>-1:operator==="$="?check&&result.slice(-check.length)===check:operator==="~="?(" "+result+" ").indexOf(check)>-1:operator==="|="?result===check||result.slice(0,check.length+1)===check+"-":false}},CHILD:function(type,what,argument,first,last){var simple=type.slice(0,3)!=="nth",forward=type.slice(-4)!=="last",ofType=what==="of-type";return first===1&&last===0?function(elem){return!!elem.parentNode}:function(elem,context,xml){var cache,outerCache,node,diff,nodeIndex,start,dir=simple!==forward?"nextSibling":"previousSibling",parent=elem.parentNode,name=ofType&&elem.nodeName.toLowerCase(),useCache=!xml&&!ofType;if(parent){if(simple){while(dir){node=elem;while(node=node[dir]){if(ofType?node.nodeName.toLowerCase()===name:node.nodeType===1){return false}}start=dir=type==="only"&&!start&&"nextSibling"}return true}start=[forward?parent.firstChild:parent.lastChild];if(forward&&useCache){outerCache=parent[expando]||(parent[expando]={});cache=outerCache[type]||[];nodeIndex=cache[0]===dirruns&&cache[1];diff=cache[0]===dirruns&&cache[2];node=nodeIndex&&parent.childNodes[nodeIndex];while(node=++nodeIndex&&node&&node[dir]||(diff=nodeIndex=0)||start.pop()){if(node.nodeType===1&&++diff&&node===elem){outerCache[type]=[dirruns,nodeIndex,diff];break}}}else if(useCache&&(cache=(elem[expando]||(elem[expando]={}))[type])&&cache[0]===dirruns){diff=cache[1]}else{while(node=++nodeIndex&&node&&node[dir]||(diff=nodeIndex=0)||start.pop()){if((ofType?node.nodeName.toLowerCase()===name:node.nodeType===1)&&++diff){if(useCache){(node[expando]||(node[expando]={}))[type]=[dirruns,diff]}if(node===elem){break}}}}diff-=last;return diff===first||diff%first===0&&diff/first>=0}}},PSEUDO:function(pseudo,argument){var args,fn=Expr.pseudos[pseudo]||Expr.setFilters[pseudo.toLowerCase()]||Sizzle.error("unsupported pseudo: "+pseudo);if(fn[expando]){return fn(argument)}if(fn.length>1){args=[pseudo,pseudo,"",argument];return Expr.setFilters.hasOwnProperty(pseudo.toLowerCase())?markFunction(function(seed,matches){var idx,matched=fn(seed,argument),i=matched.length;while(i--){idx=indexOf.call(seed,matched[i]);seed[idx]=!(matches[idx]=matched[i])}}):function(elem){return fn(elem,0,args)}}return fn}},pseudos:{not:markFunction(function(selector){var input=[],results=[],matcher=compile(selector.replace(rtrim,"$1"));return matcher[expando]?markFunction(function(seed,matches,context,xml){var elem,unmatched=matcher(seed,null,xml,[]),i=seed.length;while(i--){if(elem=unmatched[i]){seed[i]=!(matches[i]=elem)}}}):function(elem,context,xml){input[0]=elem;matcher(input,null,xml,results);return!results.pop()}}),has:markFunction(function(selector){return function(elem){return Sizzle(selector,elem).length>0}}),contains:markFunction(function(text){return function(elem){return(elem.textContent||elem.innerText||getText(elem)).indexOf(text)>-1}}),lang:markFunction(function(lang){if(!ridentifier.test(lang||"")){Sizzle.error("unsupported lang: "+lang)}lang=lang.replace(runescape,funescape).toLowerCase();return function(elem){var elemLang;do{if(elemLang=documentIsHTML?elem.lang:elem.getAttribute("xml:lang")||elem.getAttribute("lang")){elemLang=elemLang.toLowerCase();return elemLang===lang||elemLang.indexOf(lang+"-")===0}}while((elem=elem.parentNode)&&elem.nodeType===1);return false}}),target:function(elem){var hash=window.location&&window.location.hash;return hash&&hash.slice(1)===elem.id},root:function(elem){return elem===docElem},focus:function(elem){return elem===document.activeElement&&(!document.hasFocus||document.hasFocus())&&!!(elem.type||elem.href||~elem.tabIndex)},enabled:function(elem){return elem.disabled===false},disabled:function(elem){return elem.disabled===true},checked:function(elem){var nodeName=elem.nodeName.toLowerCase();return nodeName==="input"&&!!elem.checked||nodeName==="option"&&!!elem.selected},selected:function(elem){if(elem.parentNode){elem.parentNode.selectedIndex}return elem.selected===true},empty:function(elem){for(elem=elem.firstChild;elem;elem=elem.nextSibling){if(elem.nodeType<6){return false}}return true},parent:function(elem){return!Expr.pseudos["empty"](elem)},header:function(elem){return rheader.test(elem.nodeName)},input:function(elem){return rinputs.test(elem.nodeName)},button:function(elem){var name=elem.nodeName.toLowerCase();return name==="input"&&elem.type==="button"||name==="button"},text:function(elem){var attr;return elem.nodeName.toLowerCase()==="input"&&elem.type==="text"&&((attr=elem.getAttribute("type"))==null||attr.toLowerCase()==="text")},first:createPositionalPseudo(function(){return[0]}),last:createPositionalPseudo(function(matchIndexes,length){return[length-1]}),eq:createPositionalPseudo(function(matchIndexes,length,argument){return[argument<0?argument+length:argument]}),even:createPositionalPseudo(function(matchIndexes,length){var i=0;for(;i=0;){matchIndexes.push(i)}return matchIndexes}),gt:createPositionalPseudo(function(matchIndexes,length,argument){var i=argument<0?argument+length:argument;for(;++i1?function(elem,context,xml){var i=matchers.length;while(i--){if(!matchers[i](elem,context,xml)){return false}}return true}:matchers[0]}function multipleContexts(selector,contexts,results){var i=0,len=contexts.length;for(;i-1){seed[temp]=!(results[temp]=elem)}}}}else{matcherOut=condense(matcherOut===results?matcherOut.splice(preexisting,matcherOut.length):matcherOut);if(postFinder){postFinder(null,results,matcherOut,xml)}else{push.apply(results,matcherOut)}}})}function matcherFromTokens(tokens){var checkContext,matcher,j,len=tokens.length,leadingRelative=Expr.relative[tokens[0].type],implicitRelative=leadingRelative||Expr.relative[" "],i=leadingRelative?1:0,matchContext=addCombinator(function(elem){return elem===checkContext},implicitRelative,true),matchAnyContext=addCombinator(function(elem){return indexOf.call(checkContext,elem)>-1},implicitRelative,true),matchers=[function(elem,context,xml){return!leadingRelative&&(xml||context!==outermostContext)||((checkContext=context).nodeType?matchContext(elem,context,xml):matchAnyContext(elem,context,xml))}];for(;i1&&elementMatcher(matchers),i>1&&toSelector(tokens.slice(0,i-1).concat({value:tokens[i-2].type===" "?"*":""})).replace(rtrim,"$1"),matcher,i0,byElement=elementMatchers.length>0,superMatcher=function(seed,context,xml,results,outermost){var elem,j,matcher,matchedCount=0,i="0",unmatched=seed&&[],setMatched=[],contextBackup=outermostContext,elems=seed||byElement&&Expr.find["TAG"]("*",outermost),dirrunsUnique=dirruns+=contextBackup==null?1:Math.random()||.1,len=elems.length;if(outermost){outermostContext=context!==document&&context}for(;i!==len&&(elem=elems[i])!=null;i++){if(byElement&&elem){j=0;while(matcher=elementMatchers[j++]){if(matcher(elem,context,xml)){results.push(elem);break}}if(outermost){dirruns=dirrunsUnique}}if(bySet){if(elem=!matcher&&elem){matchedCount--}if(seed){unmatched.push(elem)}}}matchedCount+=i;if(bySet&&i!==matchedCount){j=0;while(matcher=setMatchers[j++]){matcher(unmatched,setMatched,context,xml)}if(seed){if(matchedCount>0){while(i--){if(!(unmatched[i]||setMatched[i])){setMatched[i]=pop.call(results)}}}setMatched=condense(setMatched)}push.apply(results,setMatched);if(outermost&&!seed&&setMatched.length>0&&matchedCount+setMatchers.length>1){Sizzle.uniqueSort(results)}}if(outermost){dirruns=dirrunsUnique;outermostContext=contextBackup}return unmatched};return bySet?markFunction(superMatcher):superMatcher}compile=Sizzle.compile=function(selector,match){var i,setMatchers=[],elementMatchers=[],cached=compilerCache[selector+" "];if(!cached){if(!match){match=tokenize(selector)}i=match.length;while(i--){cached=matcherFromTokens(match[i]);if(cached[expando]){setMatchers.push(cached)}else{elementMatchers.push(cached)}}cached=compilerCache(selector,matcherFromGroupMatchers(elementMatchers,setMatchers));cached.selector=selector}return cached};select=Sizzle.select=function(selector,context,results,seed){var i,tokens,token,type,find,compiled=typeof selector==="function"&&selector,match=!seed&&tokenize(selector=compiled.selector||selector);results=results||[];if(match.length===1){tokens=match[0]=match[0].slice(0);if(tokens.length>2&&(token=tokens[0]).type==="ID"&&support.getById&&context.nodeType===9&&documentIsHTML&&Expr.relative[tokens[1].type]){context=(Expr.find["ID"](token.matches[0].replace(runescape,funescape),context)||[])[0];if(!context){return results}else if(compiled){context=context.parentNode}selector=selector.slice(tokens.shift().value.length)}i=matchExpr["needsContext"].test(selector)?0:tokens.length;while(i--){token=tokens[i];if(Expr.relative[type=token.type]){break}if(find=Expr.find[type]){if(seed=find(token.matches[0].replace(runescape,funescape),rsibling.test(tokens[0].type)&&testContext(context.parentNode)||context)){ -tokens.splice(i,1);selector=seed.length&&toSelector(tokens);if(!selector){push.apply(results,seed);return results}break}}}}(compiled||compile(selector,match))(seed,context,!documentIsHTML,results,rsibling.test(selector)&&testContext(context.parentNode)||context);return results};support.sortStable=expando.split("").sort(sortOrder).join("")===expando;support.detectDuplicates=!!hasDuplicate;setDocument();support.sortDetached=assert(function(div1){return div1.compareDocumentPosition(document.createElement("div"))&1});if(!assert(function(div){div.innerHTML="";return div.firstChild.getAttribute("href")==="#"})){addHandle("type|href|height|width",function(elem,name,isXML){if(!isXML){return elem.getAttribute(name,name.toLowerCase()==="type"?1:2)}})}if(!support.attributes||!assert(function(div){div.innerHTML="";div.firstChild.setAttribute("value","");return div.firstChild.getAttribute("value")===""})){addHandle("value",function(elem,name,isXML){if(!isXML&&elem.nodeName.toLowerCase()==="input"){return elem.defaultValue}})}if(!assert(function(div){return div.getAttribute("disabled")==null})){addHandle(booleans,function(elem,name,isXML){var val;if(!isXML){return elem[name]===true?name.toLowerCase():(val=elem.getAttributeNode(name))&&val.specified?val.value:null}})}if(typeof define==="function"&&define.amd){define(function(){return Sizzle})}else if(typeof module!=="undefined"&&module.exports){module.exports=Sizzle}else{window.Sizzle=Sizzle}})(window);(function(engine){var extendElements=Prototype.Selector.extendElements;function select(selector,scope){return extendElements(engine(selector,scope||document))}function match(element,selector){return engine.matches(selector,[element]).length==1}Prototype.Selector.engine=engine;Prototype.Selector.select=select;Prototype.Selector.match=match})(Sizzle);window.Sizzle=Prototype._original_property;delete Prototype._original_property;var Form={reset:function(form){form=$(form);form.reset();return form},serializeElements:function(elements,options){if(typeof options!="object")options={hash:!!options};else if(Object.isUndefined(options.hash))options.hash=true;var key,value,submitted=false,submit=options.submit,accumulator,initial;if(options.hash){initial={};accumulator=function(result,key,value){if(key in result){if(!Object.isArray(result[key]))result[key]=[result[key]];result[key]=result[key].concat(value)}else result[key]=value;return result}}else{initial="";accumulator=function(result,key,values){if(!Object.isArray(values)){values=[values]}if(!values.length){return result}var encodedKey=encodeURIComponent(key).gsub(/%20/,"+");return result+(result?"&":"")+values.map(function(value){value=value.gsub(/(\r)?\n/,"\r\n");value=encodeURIComponent(value);value=value.gsub(/%20/,"+");return encodedKey+"="+value}).join("&")}}return elements.inject(initial,function(result,element){if(!element.disabled&&element.name){key=element.name;value=$(element).getValue();if(value!=null&&element.type!="file"&&(element.type!="submit"||!submitted&&submit!==false&&(!submit||key==submit)&&(submitted=true))){result=accumulator(result,key,value)}}return result})}};Form.Methods={serialize:function(form,options){return Form.serializeElements(Form.getElements(form),options)},getElements:function(form){var elements=$(form).getElementsByTagName("*");var element,results=[],serializers=Form.Element.Serializers;for(var i=0;element=elements[i];i++){if(serializers[element.tagName.toLowerCase()])results.push(Element.extend(element))}return results},getInputs:function(form,typeName,name){form=$(form);var inputs=form.getElementsByTagName("input");if(!typeName&&!name)return $A(inputs).map(Element.extend);for(var i=0,matchingInputs=[],length=inputs.length;i=0}).sortBy(function(element){return element.tabIndex}).first();return firstByIndex?firstByIndex:elements.find(function(element){return/^(?:input|select|textarea)$/i.test(element.tagName)})},focusFirstElement:function(form){form=$(form);var element=form.findFirstElement();if(element)element.activate();return form},request:function(form,options){form=$(form),options=Object.clone(options||{});var params=options.parameters,action=form.readAttribute("action")||"";if(action.blank())action=window.location.href;options.parameters=form.serialize(true);if(params){if(Object.isString(params))params=params.toQueryParams();Object.extend(options.parameters,params)}if(form.hasAttribute("method")&&!options.method)options.method=form.method;return new Ajax.Request(action,options)}};Form.Element={focus:function(element){$(element).focus();return element},select:function(element){$(element).select();return element}};Form.Element.Methods={serialize:function(element){element=$(element);if(!element.disabled&&element.name){var value=element.getValue();if(value!=undefined){var pair={};pair[element.name]=value;return Object.toQueryString(pair)}}return""},getValue:function(element){element=$(element);var method=element.tagName.toLowerCase();return Form.Element.Serializers[method](element)},setValue:function(element,value){element=$(element);var method=element.tagName.toLowerCase();Form.Element.Serializers[method](element,value);return element},clear:function(element){$(element).value="";return element},present:function(element){return $(element).value!=""},activate:function(element){element=$(element);try{element.focus();if(element.select&&(element.tagName.toLowerCase()!="input"||!/^(?:button|reset|submit)$/i.test(element.type)))element.select()}catch(e){}return element},disable:function(element){element=$(element);element.disabled=true;return element},enable:function(element){element=$(element);element.disabled=false;return element}};var Field=Form.Element;var $F=Form.Element.Methods.getValue;Form.Element.Serializers=function(){function input(element,value){switch(element.type.toLowerCase()){case"checkbox":case"radio":return inputSelector(element,value);default:return valueSelector(element,value)}}function inputSelector(element,value){if(Object.isUndefined(value))return element.checked?element.value:null;else element.checked=!!value}function valueSelector(element,value){if(Object.isUndefined(value))return element.value;else element.value=value}function select(element,value){if(Object.isUndefined(value))return(element.type==="select-one"?selectOne:selectMany)(element);var opt,currentValue,single=!Object.isArray(value);for(var i=0,length=element.length;i=0?optionValue(element.options[index]):null}function selectMany(element){var values,length=element.length;if(!length)return null;for(var i=0,values=[];i=this.offset[1]&&y=this.offset[0]&&x=this.offset[1]&&this.ycomp=this.offset[0]&&this.xcomp0})._each(iterator,context)},set:function(className){this.element.className=className},add:function(classNameToAdd){if(this.include(classNameToAdd))return;this.set($A(this).concat(classNameToAdd).join(" "))},remove:function(classNameToRemove){if(!this.include(classNameToRemove))return;this.set($A(this).without(classNameToRemove).join(" "))},toString:function(){return $A(this).join(" ")}};Object.extend(Element.ClassNames.prototype,Enumerable);(function(){window.Selector=Class.create({initialize:function(expression){this.expression=expression.strip()},findElements:function(rootElement){return Prototype.Selector.select(this.expression,rootElement)},match:function(element){return Prototype.Selector.match(element,this.expression)},toString:function(){return this.expression},inspect:function(){return"#"}});Object.extend(Selector,{matchElements:function(elements,expression){var match=Prototype.Selector.match,results=[];for(var i=0,length=elements.length;i=y;y++)if(l=Math.sin(h),m=Math.tan(h),r=m*Math.sqrt(1-t*l*l),c=Math.sin(2*h),u=i*h-s*c+e*Math.sin(4*h)-o*Math.sin(6*h),d=i-2*s*Math.cos(2*h)+4*e*Math.cos(4*h)-6*o*Math.cos(6*h),p=2*u+r*(u*u+a)-2*n*(r*u+1),_=t*c*(u*u+a-2*n*u)/(2*r),f=2*(n-u)*(r*d-2/c)-2*d,P=p/(_+f),h+=P,1e-10>=Math.abs(P))return h;return Proj4js.reportError("phi4z: No convergence"),null}function e4fn(t){var i,s;return i=1+t,s=1-t,Math.sqrt(Math.pow(i,i)*Math.pow(s,s))}var Proj4js={defaultDatum:"WGS84",transform:function(t,i,s){if(!t.readyToUse)return this.reportError("Proj4js initialization for:"+t.srsCode+" not yet complete"),s;if(!i.readyToUse)return this.reportError("Proj4js initialization for:"+i.srsCode+" not yet complete"),s;if(t.datum&&i.datum&&((t.datum.datum_type==Proj4js.common.PJD_3PARAM||t.datum.datum_type==Proj4js.common.PJD_7PARAM)&&"WGS84"!=i.datumCode||(i.datum.datum_type==Proj4js.common.PJD_3PARAM||i.datum.datum_type==Proj4js.common.PJD_7PARAM)&&"WGS84"!=t.datumCode)){var e=Proj4js.WGS84;this.transform(t,e,s),t=e}return"enu"!=t.axis&&this.adjust_axis(t,!1,s),"longlat"==t.projName?(s.x*=Proj4js.common.D2R,s.y*=Proj4js.common.D2R):(t.to_meter&&(s.x*=t.to_meter,s.y*=t.to_meter),t.inverse(s)),t.from_greenwich&&(s.x+=t.from_greenwich),s=this.datum_transform(t.datum,i.datum,s),i.from_greenwich&&(s.x-=i.from_greenwich),"longlat"==i.projName?(s.x*=Proj4js.common.R2D,s.y*=Proj4js.common.R2D):(i.forward(s),i.to_meter&&(s.x/=i.to_meter,s.y/=i.to_meter)),"enu"!=i.axis&&this.adjust_axis(i,!0,s),s},datum_transform:function(t,i,s){return t.compare_datums(i)?s:t.datum_type==Proj4js.common.PJD_NODATUM||i.datum_type==Proj4js.common.PJD_NODATUM?s:((t.es!=i.es||t.a!=i.a||t.datum_type==Proj4js.common.PJD_3PARAM||t.datum_type==Proj4js.common.PJD_7PARAM||i.datum_type==Proj4js.common.PJD_3PARAM||i.datum_type==Proj4js.common.PJD_7PARAM)&&(t.geodetic_to_geocentric(s),(t.datum_type==Proj4js.common.PJD_3PARAM||t.datum_type==Proj4js.common.PJD_7PARAM)&&t.geocentric_to_wgs84(s),(i.datum_type==Proj4js.common.PJD_3PARAM||i.datum_type==Proj4js.common.PJD_7PARAM)&&i.geocentric_from_wgs84(s),i.geocentric_to_geodetic(s)),s)},adjust_axis:function(t,i,s){for(var e,o,n=s.x,a=s.y,r=s.z||0,h=0;3>h;h++)if(!i||2!=h||void 0!==s.z)switch(0==h?(e=n,o="x"):1==h?(e=a,o="y"):(e=r,o="z"),t.axis[h]){case"e":s[o]=e;break;case"w":s[o]=-e;break;case"n":s[o]=e;break;case"s":s[o]=-e;break;case"u":void 0!==s[o]&&(s.z=e);break;case"d":void 0!==s[o]&&(s.z=-e);break;default:return alert("ERROR: unknow axis ("+t.axis[h]+") - check definition of "+t.projName),null}return s},reportError:function(){},extend:function(t,i){if(t=t||{},i)for(var s in i){var e=i[s];void 0!==e&&(t[s]=e)}return t},Class:function(){for(var t,i=function(){this.initialize.apply(this,arguments)},s={},e=0;arguments.length>e;++e)t="function"==typeof arguments[e]?arguments[e].prototype:arguments[e],Proj4js.extend(s,t);return i.prototype=s,i},bind:function(t,i){var s=Array.prototype.slice.apply(arguments,[2]);return function(){var e=s.concat(Array.prototype.slice.apply(arguments,[0])); +Math.sign = Math.sign || function(x) { + x = +x; // convert to a number + if (x === 0 || isNaN(x)) { + return x; + } + return x > 0 ? 1 : -1; +} -return t.apply(i,e)}},scriptName:"proj4js-combined.js",defsLookupService:"http://spatialreference.org/ref",libPath:null,getScriptLocation:function(){if(this.libPath)return this.libPath;for(var t=this.scriptName,i=t.length,s=document.getElementsByTagName("script"),e=0;s.length>e;e++){var o=s[e].getAttribute("src");if(o){var n=o.lastIndexOf(t);if(n>-1&&n+i==o.length){this.libPath=o.slice(0,-i);break}}}return this.libPath||""},loadScript:function(t,i,s,e){var o=document.createElement("script");o.defer=!1,o.type="text/javascript",o.id=t,o.src=t,o.onload=i,o.onerror=s,o.loadCheck=e,/MSIE/.test(navigator.userAgent)&&(o.onreadystatechange=this.checkReadyState),document.getElementsByTagName("head")[0].appendChild(o)},checkReadyState:function(){"loaded"==this.readyState&&(this.loadCheck()?this.onload():this.onerror())}};Proj4js.Proj=Proj4js.Class({readyToUse:!1,title:null,projName:null,units:null,datum:null,x0:0,y0:0,localCS:!1,queue:null,initialize:function(t,i){if(this.srsCodeInput=t,this.queue=[],i&&this.queue.push(i),t.indexOf("GEOGCS")>=0||t.indexOf("GEOCCS")>=0||t.indexOf("PROJCS")>=0||t.indexOf("LOCAL_CS")>=0)return this.parseWKT(t),this.deriveConstants(),this.loadProjCode(this.projName),void 0;if(0==t.indexOf("urn:")){var s=t.split(":");"ogc"!=s[1]&&"x-ogc"!=s[1]||"def"!=s[2]||"crs"!=s[3]||(t=s[4]+":"+s[s.length-1])}else if(0==t.indexOf("http://")){var e=t.split("#");e[0].match(/epsg.org/)?t="EPSG:"+e[1]:e[0].match(/RIG.xml/)&&(t="IGNF:"+e[1])}this.srsCode=t.toUpperCase(),0==this.srsCode.indexOf("EPSG")?(this.srsCode=this.srsCode,this.srsAuth="epsg",this.srsProjNumber=this.srsCode.substring(5)):0==this.srsCode.indexOf("IGNF")?(this.srsCode=this.srsCode,this.srsAuth="IGNF",this.srsProjNumber=this.srsCode.substring(5)):0==this.srsCode.indexOf("CRS")?(this.srsCode=this.srsCode,this.srsAuth="CRS",this.srsProjNumber=this.srsCode.substring(4)):(this.srsAuth="",this.srsProjNumber=this.srsCode),this.loadProjDefinition()},loadProjDefinition:function(){if(Proj4js.defs[this.srsCode])return this.defsLoaded(),void 0;var t=Proj4js.getScriptLocation()+"defs/"+this.srsAuth.toUpperCase()+this.srsProjNumber+".js";Proj4js.loadScript(t,Proj4js.bind(this.defsLoaded,this),Proj4js.bind(this.loadFromService,this),Proj4js.bind(this.checkDefsLoaded,this))},loadFromService:function(){var t=Proj4js.defsLookupService+"/"+this.srsAuth+"/"+this.srsProjNumber+"/proj4js/";Proj4js.loadScript(t,Proj4js.bind(this.defsLoaded,this),Proj4js.bind(this.defsFailed,this),Proj4js.bind(this.checkDefsLoaded,this))},defsLoaded:function(){this.parseDefs(),this.loadProjCode(this.projName)},checkDefsLoaded:function(){return Proj4js.defs[this.srsCode]?!0:!1},defsFailed:function(){Proj4js.reportError("failed to load projection definition for: "+this.srsCode),Proj4js.defs[this.srsCode]=Proj4js.defs.WGS84,this.defsLoaded()},loadProjCode:function(t){if(Proj4js.Proj[t])return this.initTransforms(),void 0;var i=Proj4js.getScriptLocation()+"projCode/"+t+".js";Proj4js.loadScript(i,Proj4js.bind(this.loadProjCodeSuccess,this,t),Proj4js.bind(this.loadProjCodeFailure,this,t),Proj4js.bind(this.checkCodeLoaded,this,t))},loadProjCodeSuccess:function(t){Proj4js.Proj[t].dependsOn?this.loadProjCode(Proj4js.Proj[t].dependsOn):this.initTransforms()},loadProjCodeFailure:function(t){Proj4js.reportError("failed to find projection file for: "+t)},checkCodeLoaded:function(t){return Proj4js.Proj[t]?!0:!1},initTransforms:function(){if(Proj4js.extend(this,Proj4js.Proj[this.projName]),this.init(),this.readyToUse=!0,this.queue)for(var t;t=this.queue.shift();)t.call(this,this)},wktRE:/^(\w+)\[(.*)\]$/,parseWKT:function(t){var i=t.match(this.wktRE);if(i){var s,e=i[1],o=i[2],n=o.split(",");s="TOWGS84"==e.toUpperCase()?e:n.shift(),s=s.replace(/^\"/,""),s=s.replace(/\"$/,"");for(var a=[],r=0,h="",l=0;n.length>l;++l){for(var c=n[l],m=0;c.length>m;++m)"["==c.charAt(m)&&++r,"]"==c.charAt(m)&&--r;h+=c,0===r?(a.push(h),h=""):h+=","}switch(e){case"LOCAL_CS":this.projName="identity",this.localCS=!0,this.srsCode=s;break;case"GEOGCS":this.projName="longlat",this.geocsCode=s,this.srsCode||(this.srsCode=s);break;case"PROJCS":this.srsCode=s;break;case"GEOCCS":break;case"PROJECTION":this.projName=Proj4js.wktProjections[s];break;case"DATUM":this.datumName=s;break;case"LOCAL_DATUM":this.datumCode="none";break;case"SPHEROID":this.ellps=s,this.a=parseFloat(a.shift()),this.rf=parseFloat(a.shift());break;case"PRIMEM":this.from_greenwich=parseFloat(a.shift());break;case"UNIT":this.units=s,this.unitsPerMeter=parseFloat(a.shift());break;case"PARAMETER":var u=s.toLowerCase(),d=parseFloat(a.shift());switch(u){case"false_easting":this.x0=d;break;case"false_northing":this.y0=d;break;case"scale_factor":this.k0=d;break;case"central_meridian":this.long0=d*Proj4js.common.D2R;break;case"latitude_of_origin":this.lat0=d*Proj4js.common.D2R;break;case"more_here":break;default:}break;case"TOWGS84":this.datum_params=a;break;case"AXIS":var u=s.toLowerCase(),d=a.shift();switch(d){case"EAST":d="e";break;case"WEST":d="w";break;case"NORTH":d="n";break;case"SOUTH":d="s";break;case"UP":d="u";break;case"DOWN":d="d";break;case"OTHER":default:d=" "}switch(this.axis||(this.axis="enu"),u){case"x":this.axis=d+this.axis.substr(1,2);break;case"y":this.axis=this.axis.substr(0,1)+d+this.axis.substr(2,1);break;case"z":this.axis=this.axis.substr(0,2)+d;break;default:}case"MORE_HERE":break;default:}for(var l=0;a.length>l;++l)this.parseWKT(a[l])}},parseDefs:function(){this.defData=Proj4js.defs[this.srsCode];var t,i;if(this.defData){for(var s=this.defData.split("+"),e=0;s.length>e;e++){var o=s[e].split("=");switch(t=o[0].toLowerCase(),i=o[1],t.replace(/\s/gi,"")){case"":break;case"title":this.title=i;break;case"proj":this.projName=i.replace(/\s/gi,"");break;case"units":this.units=i.replace(/\s/gi,"");break;case"datum":this.datumCode=i.replace(/\s/gi,"");break;case"nadgrids":this.nagrids=i.replace(/\s/gi,"");break;case"ellps":this.ellps=i.replace(/\s/gi,"");break;case"a":this.a=parseFloat(i);break;case"b":this.b=parseFloat(i);break;case"rf":this.rf=parseFloat(i);break;case"lat_0":this.lat0=i*Proj4js.common.D2R;break;case"lat_1":this.lat1=i*Proj4js.common.D2R;break;case"lat_2":this.lat2=i*Proj4js.common.D2R;break;case"lat_ts":this.lat_ts=i*Proj4js.common.D2R;break;case"lon_0":this.long0=i*Proj4js.common.D2R;break;case"alpha":this.alpha=parseFloat(i)*Proj4js.common.D2R;break;case"lonc":this.longc=i*Proj4js.common.D2R;break;case"x_0":this.x0=parseFloat(i);break;case"y_0":this.y0=parseFloat(i);break;case"k_0":this.k0=parseFloat(i);break;case"k":this.k0=parseFloat(i);break;case"r_a":this.R_A=!0;break;case"zone":this.zone=parseInt(i,10);break;case"south":this.utmSouth=!0;break;case"towgs84":this.datum_params=i.split(",");break;case"to_meter":this.to_meter=parseFloat(i);break;case"from_greenwich":this.from_greenwich=i*Proj4js.common.D2R;break;case"pm":i=i.replace(/\s/gi,""),this.from_greenwich=Proj4js.PrimeMeridian[i]?Proj4js.PrimeMeridian[i]:parseFloat(i),this.from_greenwich*=Proj4js.common.D2R;break;case"axis":i=i.replace(/\s/gi,"");var n="ewnsud";3==i.length&&-1!=n.indexOf(i.substr(0,1))&&-1!=n.indexOf(i.substr(1,1))&&-1!=n.indexOf(i.substr(2,1))&&(this.axis=i);break;case"no_defs":break;default:}}this.deriveConstants()}},deriveConstants:function(){if("@null"==this.nagrids&&(this.datumCode="none"),this.datumCode&&"none"!=this.datumCode){var t=Proj4js.Datum[this.datumCode];t&&(this.datum_params=t.towgs84?t.towgs84.split(","):null,this.ellps=t.ellipse,this.datumName=t.datumName?t.datumName:this.datumCode)}if(!this.a){var i=Proj4js.Ellipsoid[this.ellps]?Proj4js.Ellipsoid[this.ellps]:Proj4js.Ellipsoid.WGS84;Proj4js.extend(this,i)}this.rf&&!this.b&&(this.b=(1-1/this.rf)*this.a),(0===this.rf||Math.abs(this.a-this.b)=a;a++)if(s=t*Math.sin(n),e=this.HALF_PI-2*Math.atan(i*Math.pow((1-s)/(1+s),o))-n,n+=e,1e-10>=Math.abs(e))return n;return alert("phi2z has NoConvergence"),-9999},qsfnz:function(t,i){var s;return t>1e-7?(s=t*i,(1-t*t)*(i/(1-s*s)-.5/t*Math.log((1-s)/(1+s)))):2*i},asinz:function(t){return Math.abs(t)>1&&(t=t>1?1:-1),Math.asin(t)},e0fn:function(t){return 1-.25*t*(1+t/16*(3+1.25*t))},e1fn:function(t){return.375*t*(1+.25*t*(1+.46875*t))},e2fn:function(t){return.05859375*t*t*(1+.75*t)},e3fn:function(t){return t*t*t*(35/3072)},mlfn:function(t,i,s,e,o){return t*o-i*Math.sin(2*o)+s*Math.sin(4*o)-e*Math.sin(6*o)},srat:function(t,i){return Math.pow((1-t)/(1+t),i)},sign:function(t){return 0>t?-1:1},adjust_lon:function(t){return t=Math.abs(t)this.HALF_PI)return+Number.NaN;if(i==this.HALF_PI)return Number.POSITIVE_INFINITY;if(i==-1*this.HALF_PI)return-1*Number.POSITIVE_INFINITY;var e=t*s;return Math.log(Math.tan((this.HALF_PI+i)/2))+t*Math.log((1-e)/(1+e))/2},fL:function(t,i){return 2*Math.atan(t*Math.exp(i))-this.HALF_PI},invlatiso:function(t,i){var s=this.fL(1,i),e=0,o=0;do e=s,o=t*Math.sin(e),s=this.fL(Math.exp(t*Math.log((1+o)/(1-o))/2),i);while(Math.abs(s-e)>1e-12);return s},sinh:function(t){var i=Math.exp(t);return i=(i-1/i)/2},cosh:function(t){var i=Math.exp(t);return i=(i+1/i)/2},tanh:function(t){var i=Math.exp(t);return i=(i-1/i)/(i+1/i)},asinh:function(t){var i=t>=0?1:-1;return i*Math.log(Math.abs(t)+Math.sqrt(t*t+1))},acosh:function(t){return 2*Math.log(Math.sqrt((t+1)/2)+Math.sqrt((t-1)/2))},atanh:function(t){return Math.log((t-1)/(t+1))/2},gN:function(t,i,s){var e=i*s;return t/Math.sqrt(1-e*e)},pj_enfn:function(t){var i=[];i[0]=this.C00-t*(this.C02+t*(this.C04+t*(this.C06+t*this.C08))),i[1]=t*(this.C22-t*(this.C04+t*(this.C06+t*this.C08)));var s=t*t;return i[2]=s*(this.C44-t*(this.C46+t*this.C48)),s*=t,i[3]=s*(this.C66-t*this.C68),i[4]=s*t*this.C88,i},pj_mlfn:function(t,i,s,e){return s*=i,i*=i,e[0]*t-s*(e[1]+i*(e[2]+i*(e[3]+i*e[4])))},pj_inv_mlfn:function(t,i,s){for(var e=1/(1-i),o=t,n=Proj4js.common.MAX_ITER;n;--n){var a=Math.sin(o),r=1-i*a*a;if(r=(this.pj_mlfn(o,a,Math.cos(o),s)-t)*r*Math.sqrt(r)*e,o-=r,Math.abs(r)i;i++)t.datum_params[i]=parseFloat(t.datum_params[i]);(0!=t.datum_params[0]||0!=t.datum_params[1]||0!=t.datum_params[2])&&(this.datum_type=Proj4js.common.PJD_3PARAM),t.datum_params.length>3&&(0!=t.datum_params[3]||0!=t.datum_params[4]||0!=t.datum_params[5]||0!=t.datum_params[6])&&(this.datum_type=Proj4js.common.PJD_7PARAM,t.datum_params[3]*=Proj4js.common.SEC_TO_RAD,t.datum_params[4]*=Proj4js.common.SEC_TO_RAD,t.datum_params[5]*=Proj4js.common.SEC_TO_RAD,t.datum_params[6]=t.datum_params[6]/1e6+1)}t&&(this.a=t.a,this.b=t.b,this.es=t.es,this.ep2=t.ep2,this.datum_params=t.datum_params)},compare_datums:function(t){return this.datum_type!=t.datum_type?!1:this.a!=t.a||Math.abs(this.es-t.es)>5e-11?!1:this.datum_type==Proj4js.common.PJD_3PARAM?this.datum_params[0]==t.datum_params[0]&&this.datum_params[1]==t.datum_params[1]&&this.datum_params[2]==t.datum_params[2]:this.datum_type==Proj4js.common.PJD_7PARAM?this.datum_params[0]==t.datum_params[0]&&this.datum_params[1]==t.datum_params[1]&&this.datum_params[2]==t.datum_params[2]&&this.datum_params[3]==t.datum_params[3]&&this.datum_params[4]==t.datum_params[4]&&this.datum_params[5]==t.datum_params[5]&&this.datum_params[6]==t.datum_params[6]:this.datum_type==Proj4js.common.PJD_GRIDSHIFT||t.datum_type==Proj4js.common.PJD_GRIDSHIFT?(alert("ERROR: Grid shift transformations are not implemented."),!1):!0},geodetic_to_geocentric:function(t){var i,s,e,o,n,a,r,h=t.x,l=t.y,c=t.z?t.z:0,m=0;if(-Proj4js.common.HALF_PI>l&&l>-1.001*Proj4js.common.HALF_PI)l=-Proj4js.common.HALF_PI;else if(l>Proj4js.common.HALF_PI&&1.001*Proj4js.common.HALF_PI>l)l=Proj4js.common.HALF_PI;else if(-Proj4js.common.HALF_PI>l||l>Proj4js.common.HALF_PI)return Proj4js.reportError("geocent:lat out of range:"+l),null;return h>Proj4js.common.PI&&(h-=2*Proj4js.common.PI),n=Math.sin(l),r=Math.cos(l),a=n*n,o=this.a/Math.sqrt(1-this.es*a),i=(o+c)*r*Math.cos(h),s=(o+c)*r*Math.sin(h),e=(o*(1-this.es)+c)*n,t.x=i,t.y=s,t.z=e,m},geocentric_to_geodetic:function(t){var i,s,e,o,n,a,r,h,l,c,m,u,d,p,_,f,P,y=1e-12,g=y*y,L=30,v=t.x,j=t.y,M=t.z?t.z:0;if(d=!1,i=Math.sqrt(v*v+j*j),s=Math.sqrt(v*v+j*j+M*M),y>i/this.a){if(d=!0,_=0,y>s/this.a)return f=Proj4js.common.HALF_PI,P=-this.b,void 0}else _=Math.atan2(j,v);e=M/s,o=i/s,n=1/Math.sqrt(1-this.es*(2-this.es)*o*o),h=o*(1-this.es)*n,l=e*n,p=0;do p++,r=this.a/Math.sqrt(1-this.es*l*l),P=i*h+M*l-r*(1-this.es*l*l),a=this.es*r/(r+P),n=1/Math.sqrt(1-a*(2-a)*o*o),c=o*(1-a)*n,m=e*n,u=m*h-c*l,h=c,l=m;while(u*u>g&&L>p);return f=Math.atan(m/Math.abs(c)),t.x=_,t.y=f,t.z=P,t},geocentric_to_geodetic_noniter:function(t){var i,s,e,o,n,a,r,h,l,c,m,u,d,p,_,f,P,y=t.x,g=t.y,L=t.z?t.z:0;if(y=parseFloat(y),g=parseFloat(g),L=parseFloat(L),P=!1,0!=y)i=Math.atan2(g,y);else if(g>0)i=Proj4js.common.HALF_PI;else if(0>g)i=-Proj4js.common.HALF_PI;else if(P=!0,i=0,L>0)s=Proj4js.common.HALF_PI;else{if(!(0>L))return s=Proj4js.common.HALF_PI,e=-this.b,void 0;s=-Proj4js.common.HALF_PI}return n=y*y+g*g,o=Math.sqrt(n),a=L*Proj4js.common.AD_C,h=Math.sqrt(a*a+n),c=a/h,u=o/h,m=c*c*c,r=L+this.b*this.ep2*m,f=o-this.a*this.es*u*u*u,l=Math.sqrt(r*r+f*f),d=r/l,p=f/l,_=this.a/Math.sqrt(1-this.es*d*d),e=p>=Proj4js.common.COS_67P5?o/p-_:-Proj4js.common.COS_67P5>=p?o/-p-_:L/d+_*(this.es-1),0==P&&(s=Math.atan(d/p)),t.x=i,t.y=s,t.z=e,t},geocentric_to_wgs84:function(t){if(this.datum_type==Proj4js.common.PJD_3PARAM)t.x+=this.datum_params[0],t.y+=this.datum_params[1],t.z+=this.datum_params[2];else if(this.datum_type==Proj4js.common.PJD_7PARAM){var i=this.datum_params[0],s=this.datum_params[1],e=this.datum_params[2],o=this.datum_params[3],n=this.datum_params[4],a=this.datum_params[5],r=this.datum_params[6],h=r*(t.x-a*t.y+n*t.z)+i,l=r*(a*t.x+t.y-o*t.z)+s,c=r*(-n*t.x+o*t.y+t.z)+e;t.x=h,t.y=l,t.z=c}},geocentric_from_wgs84:function(t){if(this.datum_type==Proj4js.common.PJD_3PARAM)t.x-=this.datum_params[0],t.y-=this.datum_params[1],t.z-=this.datum_params[2];else if(this.datum_type==Proj4js.common.PJD_7PARAM){var i=this.datum_params[0],s=this.datum_params[1],e=this.datum_params[2],o=this.datum_params[3],n=this.datum_params[4],a=this.datum_params[5],r=this.datum_params[6],h=(t.x-i)/r,l=(t.y-s)/r,c=(t.z-e)/r;t.x=h+a*l-n*c,t.y=-a*h+l+o*c,t.z=n*h-o*l+c}}}),Proj4js.Point=Proj4js.Class({initialize:function(t,i,s){if("object"==typeof t)this.x=t[0],this.y=t[1],this.z=t[2]||0;else if("string"==typeof t&&i===void 0){var e=t.split(",");this.x=parseFloat(e[0]),this.y=parseFloat(e[1]),this.z=parseFloat(e[2])||0}else this.x=t,this.y=i,this.z=s||0},clone:function(){return new Proj4js.Point(this.x,this.y,this.z)},toString:function(){return"x="+this.x+",y="+this.y},toShortString:function(){return this.x+", "+this.y}}),Proj4js.PrimeMeridian={greenwich:0,lisbon:-9.131906111111,paris:2.337229166667,bogota:-74.080916666667,madrid:-3.687938888889,rome:12.452333333333,bern:7.439583333333,jakarta:106.807719444444,ferro:-17.666666666667,brussels:4.367975,stockholm:18.058277777778,athens:23.7163375,oslo:10.722916666667},Proj4js.Ellipsoid={MERIT:{a:6378137,rf:298.257,ellipseName:"MERIT 1983"},SGS85:{a:6378136,rf:298.257,ellipseName:"Soviet Geodetic System 85"},GRS80:{a:6378137,rf:298.257222101,ellipseName:"GRS 1980(IUGG, 1980)"},IAU76:{a:6378140,rf:298.257,ellipseName:"IAU 1976"},airy:{a:6377563.396,b:6356256.91,ellipseName:"Airy 1830"},"APL4.":{a:6378137,rf:298.25,ellipseName:"Appl. Physics. 1965"},NWL9D:{a:6378145,rf:298.25,ellipseName:"Naval Weapons Lab., 1965"},mod_airy:{a:6377340.189,b:6356034.446,ellipseName:"Modified Airy"},andrae:{a:6377104.43,rf:300,ellipseName:"Andrae 1876 (Den., Iclnd.)"},aust_SA:{a:6378160,rf:298.25,ellipseName:"Australian Natl & S. Amer. 1969"},GRS67:{a:6378160,rf:298.247167427,ellipseName:"GRS 67(IUGG 1967)"},bessel:{a:6377397.155,rf:299.1528128,ellipseName:"Bessel 1841"},bess_nam:{a:6377483.865,rf:299.1528128,ellipseName:"Bessel 1841 (Namibia)"},clrk66:{a:6378206.4,b:6356583.8,ellipseName:"Clarke 1866"},clrk80:{a:6378249.145,rf:293.4663,ellipseName:"Clarke 1880 mod."},CPM:{a:6375738.7,rf:334.29,ellipseName:"Comm. des Poids et Mesures 1799"},delmbr:{a:6376428,rf:311.5,ellipseName:"Delambre 1810 (Belgium)"},engelis:{a:6378136.05,rf:298.2566,ellipseName:"Engelis 1985"},evrst30:{a:6377276.345,rf:300.8017,ellipseName:"Everest 1830"},evrst48:{a:6377304.063,rf:300.8017,ellipseName:"Everest 1948"},evrst56:{a:6377301.243,rf:300.8017,ellipseName:"Everest 1956"},evrst69:{a:6377295.664,rf:300.8017,ellipseName:"Everest 1969"},evrstSS:{a:6377298.556,rf:300.8017,ellipseName:"Everest (Sabah & Sarawak)"},fschr60:{a:6378166,rf:298.3,ellipseName:"Fischer (Mercury Datum) 1960"},fschr60m:{a:6378155,rf:298.3,ellipseName:"Fischer 1960"},fschr68:{a:6378150,rf:298.3,ellipseName:"Fischer 1968"},helmert:{a:6378200,rf:298.3,ellipseName:"Helmert 1906"},hough:{a:6378270,rf:297,ellipseName:"Hough"},intl:{a:6378388,rf:297,ellipseName:"International 1909 (Hayford)"},kaula:{a:6378163,rf:298.24,ellipseName:"Kaula 1961"},lerch:{a:6378139,rf:298.257,ellipseName:"Lerch 1979"},mprts:{a:6397300,rf:191,ellipseName:"Maupertius 1738"},new_intl:{a:6378157.5,b:6356772.2,ellipseName:"New International 1967"},plessis:{a:6376523,rf:6355863,ellipseName:"Plessis 1817 (France)"},krass:{a:6378245,rf:298.3,ellipseName:"Krassovsky, 1942"},SEasia:{a:6378155,b:6356773.3205,ellipseName:"Southeast Asia"},walbeck:{a:6376896,b:6355834.8467,ellipseName:"Walbeck"},WGS60:{a:6378165,rf:298.3,ellipseName:"WGS 60"},WGS66:{a:6378145,rf:298.25,ellipseName:"WGS 66"},WGS72:{a:6378135,rf:298.26,ellipseName:"WGS 72"},WGS84:{a:6378137,rf:298.257223563,ellipseName:"WGS 84"},sphere:{a:6370997,b:6370997,ellipseName:"Normal Sphere (r=6370997)"}},Proj4js.Datum={WGS84:{towgs84:"0,0,0",ellipse:"WGS84",datumName:"WGS84"},GGRS87:{towgs84:"-199.87,74.79,246.62",ellipse:"GRS80",datumName:"Greek_Geodetic_Reference_System_1987"},NAD83:{towgs84:"0,0,0",ellipse:"GRS80",datumName:"North_American_Datum_1983"},NAD27:{nadgrids:"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat",ellipse:"clrk66",datumName:"North_American_Datum_1927"},potsdam:{towgs84:"606.0,23.0,413.0",ellipse:"bessel",datumName:"Potsdam Rauenberg 1950 DHDN"},carthage:{towgs84:"-263.0,6.0,431.0",ellipse:"clark80",datumName:"Carthage 1934 Tunisia"},hermannskogel:{towgs84:"653.0,-212.0,449.0",ellipse:"bessel",datumName:"Hermannskogel"},ire65:{towgs84:"482.530,-130.596,564.557,-1.042,-0.214,-0.631,8.15",ellipse:"mod_airy",datumName:"Ireland 1965"},nzgd49:{towgs84:"59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993",ellipse:"intl",datumName:"New Zealand Geodetic Datum 1949"},OSGB36:{towgs84:"446.448,-125.157,542.060,0.1502,0.2470,0.8421,-20.4894",ellipse:"airy",datumName:"Airy 1830"}},Proj4js.WGS84=new Proj4js.Proj("WGS84"),Proj4js.Datum.OSB36=Proj4js.Datum.OSGB36,Proj4js.wktProjections={"Lambert Tangential Conformal Conic Projection":"lcc",Mercator:"merc","Popular Visualisation Pseudo Mercator":"merc",Mercator_1SP:"merc",Transverse_Mercator:"tmerc","Transverse Mercator":"tmerc","Lambert Azimuthal Equal Area":"laea","Universal Transverse Mercator System":"utm"},Proj4js.Proj.aea={init:function(){return Math.abs(this.lat1+this.lat2)Proj4js.common.EPSLN?(this.ms1*this.ms1-this.ms2*this.ms2)/(this.qs2-this.qs1):this.con,this.c=this.ms1*this.ms1+this.ns0*this.qs1,this.rh=this.a*Math.sqrt(this.c-this.ns0*this.qs0)/this.ns0,void 0)},forward:function(t){var i=t.x,s=t.y;this.sin_phi=Math.sin(s),this.cos_phi=Math.cos(s);var e=Proj4js.common.qsfnz(this.e3,this.sin_phi,this.cos_phi),o=this.a*Math.sqrt(this.c-this.ns0*e)/this.ns0,n=this.ns0*Proj4js.common.adjust_lon(i-this.long0),a=o*Math.sin(n)+this.x0,r=this.rh-o*Math.cos(n)+this.y0;return t.x=a,t.y=r,t},inverse:function(t){var i,s,e,o,n,a;return t.x-=this.x0,t.y=this.rh-t.y+this.y0,this.ns0>=0?(i=Math.sqrt(t.x*t.x+t.y*t.y),e=1):(i=-Math.sqrt(t.x*t.x+t.y*t.y),e=-1),o=0,0!=i&&(o=Math.atan2(e*t.x,e*t.y)),e=i*this.ns0/this.a,s=(this.c-e*e)/this.ns0,this.e3>=1e-10?(e=1-.5*(1-this.es)*Math.log((1-this.e3)/(1+this.e3))/this.e3,a=Math.abs(Math.abs(e)-Math.abs(s))>1e-10?this.phi1z(this.e3,s):s>=0?.5*Proj4js.common.PI:-.5*Proj4js.common.PI):a=this.phi1z(this.e3,s),n=Proj4js.common.adjust_lon(o/this.ns0+this.long0),t.x=n,t.y=a,t},phi1z:function(t,i){var s,e,o,n,a,r=Proj4js.common.asinz(.5*i);if(Proj4js.common.EPSLN>t)return r;for(var h=t*t,l=1;25>=l;l++)if(s=Math.sin(r),e=Math.cos(r),o=t*s,n=1-o*o,a=.5*n*n/e*(i/(1-h)-s/n+.5/t*Math.log((1-o)/(1+o))),r+=a,1e-7>=Math.abs(a))return r;return Proj4js.reportError("aea:phi1z:Convergence error"),null}},Proj4js.Proj.sterea={dependsOn:"gauss",init:function(){return Proj4js.Proj.gauss.init.apply(this),this.rc?(this.sinc0=Math.sin(this.phic0),this.cosc0=Math.cos(this.phic0),this.R2=2*this.rc,this.title||(this.title="Oblique Stereographic Alternative"),void 0):(Proj4js.reportError("sterea:init:E_ERROR_0"),void 0)},forward:function(t){var i,s,e,o;return t.x=Proj4js.common.adjust_lon(t.x-this.long0),Proj4js.Proj.gauss.forward.apply(this,[t]),i=Math.sin(t.y),s=Math.cos(t.y),e=Math.cos(t.x),o=this.k0*this.R2/(1+this.sinc0*i+this.cosc0*s*e),t.x=o*s*Math.sin(t.x),t.y=o*(this.cosc0*i-this.sinc0*s*e),t.x=this.a*t.x+this.x0,t.y=this.a*t.y+this.y0,t},inverse:function(t){var i,s,e,o,n;if(t.x=(t.x-this.x0)/this.a,t.y=(t.y-this.y0)/this.a,t.x/=this.k0,t.y/=this.k0,n=Math.sqrt(t.x*t.x+t.y*t.y)){var a=2*Math.atan2(n,this.R2);i=Math.sin(a),s=Math.cos(a),o=Math.asin(s*this.sinc0+t.y*i*this.cosc0/n),e=Math.atan2(t.x*i,n*this.cosc0*s-t.y*this.sinc0*i)}else o=this.phic0,e=0;return t.x=e,t.y=o,Proj4js.Proj.gauss.inverse.apply(this,[t]),t.x=Proj4js.common.adjust_lon(t.x+this.long0),t}},Proj4js.Proj.poly={init:function(){0==this.lat0&&(this.lat0=90),this.temp=this.b/this.a,this.es=1-Math.pow(this.temp,2),this.e=Math.sqrt(this.es),this.e0=Proj4js.common.e0fn(this.es),this.e1=Proj4js.common.e1fn(this.es),this.e2=Proj4js.common.e2fn(this.es),this.e3=Proj4js.common.e3fn(this.es),this.ml0=Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,this.lat0)},forward:function(t){var i,s,e,o,n,a,r,h=t.x,l=t.y;return e=Proj4js.common.adjust_lon(h-this.long0),1e-7>=Math.abs(l)?(a=this.x0+this.a*e,r=this.y0-this.a*this.ml0):(i=Math.sin(l),s=Math.cos(l),o=Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,l),n=Proj4js.common.msfnz(this.e,i,s),e=i,a=this.x0+this.a*n*Math.sin(e)/i,r=this.y0+this.a*(o-this.ml0+n*(1-Math.cos(e))/i)),t.x=a,t.y=r,t},inverse:function(t){var i,s,e,o,n,a;if(t.x-=this.x0,t.y-=this.y0,i=this.ml0+t.y/this.a,o=0,1e-7>=Math.abs(i))n=t.x/this.a+this.long0,a=0;else{if(s=i*i+t.x/this.a*(t.x/this.a),o=phi4z(this.es,this.e0,this.e1,this.e2,this.e3,this.al,s,e,a),1!=o)return o;n=Proj4js.common.adjust_lon(Proj4js.common.asinz(t.x*e/this.a)/Math.sin(a)+this.long0)}return t.x=n,t.y=a,t}},Proj4js.Proj.equi={init:function(){this.x0||(this.x0=0),this.y0||(this.y0=0),this.lat0||(this.lat0=0),this.long0||(this.long0=0)},forward:function(t){var i=t.x,s=t.y,e=Proj4js.common.adjust_lon(i-this.long0),o=this.x0+this.a*e*Math.cos(this.lat0),n=this.y0+this.a*s;return this.t1=o,this.t2=Math.cos(this.lat0),t.x=o,t.y=n,t},inverse:function(t){t.x-=this.x0,t.y-=this.y0;var i=t.y/this.a;Math.abs(i)>Proj4js.common.HALF_PI&&Proj4js.reportError("equi:Inv:DataError");var s=Proj4js.common.adjust_lon(this.long0+t.x/(this.a*Math.cos(this.lat0)));t.x=s,t.y=i}},Proj4js.Proj.merc={init:function(){this.lat_ts&&(this.k0=this.sphere?Math.cos(this.lat_ts):Proj4js.common.msfnz(this.es,Math.sin(this.lat_ts),Math.cos(this.lat_ts)))},forward:function(t){var i=t.x,s=t.y;if(s*Proj4js.common.R2D>90&&-90>s*Proj4js.common.R2D&&i*Proj4js.common.R2D>180&&-180>i*Proj4js.common.R2D)return Proj4js.reportError("merc:forward: llInputOutOfRange: "+i+" : "+s),null;var e,o;if(Math.abs(Math.abs(s)-Proj4js.common.HALF_PI)<=Proj4js.common.EPSLN)return Proj4js.reportError("merc:forward: ll2mAtPoles"),null;if(this.sphere)e=this.x0+this.a*this.k0*Proj4js.common.adjust_lon(i-this.long0),o=this.y0+this.a*this.k0*Math.log(Math.tan(Proj4js.common.FORTPI+.5*s));else{var n=Math.sin(s),a=Proj4js.common.tsfnz(this.e,s,n);e=this.x0+this.a*this.k0*Proj4js.common.adjust_lon(i-this.long0),o=this.y0-this.a*this.k0*Math.log(a)}return t.x=e,t.y=o,t},inverse:function(t){var i,s,e=t.x-this.x0,o=t.y-this.y0;if(this.sphere)s=Proj4js.common.HALF_PI-2*Math.atan(Math.exp(-o/this.a*this.k0));else{var n=Math.exp(-o/(this.a*this.k0));if(s=Proj4js.common.phi2z(this.e,n),-9999==s)return Proj4js.reportError("merc:inverse: lat = -9999"),null}return i=Proj4js.common.adjust_lon(this.long0+e/(this.a*this.k0)),t.x=i,t.y=s,t}},Proj4js.Proj.utm={dependsOn:"tmerc",init:function(){return this.zone?(this.lat0=0,this.long0=(6*Math.abs(this.zone)-183)*Proj4js.common.D2R,this.x0=5e5,this.y0=this.utmSouth?1e7:0,this.k0=.9996,Proj4js.Proj.tmerc.init.apply(this),this.forward=Proj4js.Proj.tmerc.forward,this.inverse=Proj4js.Proj.tmerc.inverse,void 0):(Proj4js.reportError("utm:init: zone must be specified for UTM"),void 0)}},Proj4js.Proj.eqdc={init:function(){this.mode||(this.mode=0),this.temp=this.b/this.a,this.es=1-Math.pow(this.temp,2),this.e=Math.sqrt(this.es),this.e0=Proj4js.common.e0fn(this.es),this.e1=Proj4js.common.e1fn(this.es),this.e2=Proj4js.common.e2fn(this.es),this.e3=Proj4js.common.e3fn(this.es),this.sinphi=Math.sin(this.lat1),this.cosphi=Math.cos(this.lat1),this.ms1=Proj4js.common.msfnz(this.e,this.sinphi,this.cosphi),this.ml1=Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,this.lat1),0!=this.mode?(Math.abs(this.lat1+this.lat2)=Proj4js.common.EPSLN?(this.ms1-this.ms2)/(this.ml2-this.ml1):this.sinphi):this.ns=this.sinphi,this.g=this.ml1+this.ms1/this.ns,this.ml0=Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,this.lat0),this.rh=this.a*(this.g-this.ml0)},forward:function(t){var i=t.x,s=t.y,e=Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,s),o=this.a*(this.g-e),n=this.ns*Proj4js.common.adjust_lon(i-this.long0),a=this.x0+o*Math.sin(n),r=this.y0+this.rh-o*Math.cos(n);return t.x=a,t.y=r,t},inverse:function(t){t.x-=this.x0,t.y=this.rh-t.y+this.y0;var i,s;this.ns>=0?(s=Math.sqrt(t.x*t.x+t.y*t.y),i=1):(s=-Math.sqrt(t.x*t.x+t.y*t.y),i=-1);var e=0;0!=s&&(e=Math.atan2(i*t.x,i*t.y));var o=this.g-s/this.a,n=this.phi3z(o,this.e0,this.e1,this.e2,this.e3),a=Proj4js.common.adjust_lon(this.long0+e/this.ns);return t.x=a,t.y=n,t},phi3z:function(t,i,s,e,o){var n,a;n=t;for(var r=0;15>r;r++)if(a=(t+s*Math.sin(2*n)-e*Math.sin(4*n)+o*Math.sin(6*n))/i-n,n+=a,1e-10>=Math.abs(a))return n;return Proj4js.reportError("PHI3Z-CONV:Latitude failed to converge after 15 iterations"),null}},Proj4js.Proj.tmerc={init:function(){this.e0=Proj4js.common.e0fn(this.es),this.e1=Proj4js.common.e1fn(this.es),this.e2=Proj4js.common.e2fn(this.es),this.e3=Proj4js.common.e3fn(this.es),this.ml0=this.a*Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,this.lat0)},forward:function(t){var i,s,e,o=t.x,n=t.y,a=Proj4js.common.adjust_lon(o-this.long0),r=Math.sin(n),h=Math.cos(n);if(this.sphere){var l=h*Math.sin(a);if(1e-10>Math.abs(Math.abs(l)-1))return Proj4js.reportError("tmerc:forward: Point projects into infinity"),93;s=.5*this.a*this.k0*Math.log((1+l)/(1-l)),i=Math.acos(h*Math.cos(a)/Math.sqrt(1-l*l)),0>n&&(i=-i),e=this.a*this.k0*(i-this.lat0)}else{var c=h*a,m=Math.pow(c,2),u=this.ep2*Math.pow(h,2),d=Math.tan(n),p=Math.pow(d,2);i=1-this.es*Math.pow(r,2);var _=this.a/Math.sqrt(i),f=this.a*Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,n);s=this.k0*_*c*(1+m/6*(1-p+u+m/20*(5-18*p+Math.pow(p,2)+72*u-58*this.ep2)))+this.x0,e=this.k0*(f-this.ml0+_*d*m*(.5+m/24*(5-p+9*u+4*Math.pow(u,2)+m/30*(61-58*p+Math.pow(p,2)+600*u-330*this.ep2))))+this.y0}return t.x=s,t.y=e,t},inverse:function(t){var i,s,e,o,n,a,r=6;if(this.sphere){var h=Math.exp(t.x/(this.a*this.k0)),l=.5*(h-1/h),c=this.lat0+t.y/(this.a*this.k0),m=Math.cos(c);i=Math.sqrt((1-m*m)/(1+l*l)),n=Proj4js.common.asinz(i),0>c&&(n=-n),a=0==l&&0==m?this.long0:Proj4js.common.adjust_lon(Math.atan2(l,m)+this.long0)}else{var u=t.x-this.x0,d=t.y-this.y0;for(i=(this.ml0+d/this.k0)/this.a,s=i,o=0;!0&&(e=(i+this.e1*Math.sin(2*s)-this.e2*Math.sin(4*s)+this.e3*Math.sin(6*s))/this.e0-s,s+=e,!(Math.abs(e)<=Proj4js.common.EPSLN));o++)if(o>=r)return Proj4js.reportError("tmerc:inverse: Latitude failed to converge"),95;if(Math.abs(s)0||Math.abs(a)<=Proj4js.common.EPSLN)var l=this.a*n*s*Math.sin(e),c=this.y0+this.a*n*(this.cos_p14*i-this.sin_p14*s*o);else Proj4js.reportError("orthoFwdPointError");return t.x=l,t.y=c,t},inverse:function(t){var i,s,e,o,n,a,r;return t.x-=this.x0,t.y-=this.y0,i=Math.sqrt(t.x*t.x+t.y*t.y),i>this.a+1e-7&&Proj4js.reportError("orthoInvDataError"),s=Proj4js.common.asinz(i/this.a),e=Math.sin(s),o=Math.cos(s),a=this.long0,Math.abs(i)<=Proj4js.common.EPSLN&&(r=this.lat0),r=Proj4js.common.asinz(o*this.sin_p14+t.y*e*this.cos_p14/i),n=Math.abs(this.lat0)-Proj4js.common.HALF_PI,Math.abs(n)<=Proj4js.common.EPSLN&&(a=this.lat0>=0?Proj4js.common.adjust_lon(this.long0+Math.atan2(t.x,-t.y)):Proj4js.common.adjust_lon(this.long0-Math.atan2(-t.x,t.y))),n=o-this.sin_p14*Math.sin(r),t.x=a,t.y=r,t}},Proj4js.Proj.krovak={init:function(){this.a=6377397.155,this.es=.006674372230614,this.e=Math.sqrt(this.es),this.lat0||(this.lat0=.863937979737193),this.long0||(this.long0=.4334234309119251),this.k0||(this.k0=.9999),this.s45=.785398163397448,this.s90=2*this.s45,this.fi0=this.lat0,this.e2=this.es,this.e=Math.sqrt(this.e2),this.alfa=Math.sqrt(1+this.e2*Math.pow(Math.cos(this.fi0),4)/(1-this.e2)),this.uq=1.04216856380474,this.u0=Math.asin(Math.sin(this.fi0)/this.alfa),this.g=Math.pow((1+this.e*Math.sin(this.fi0))/(1-this.e*Math.sin(this.fi0)),this.alfa*this.e/2),this.k=Math.tan(this.u0/2+this.s45)/Math.pow(Math.tan(this.fi0/2+this.s45),this.alfa)*this.g,this.k1=this.k0,this.n0=this.a*Math.sqrt(1-this.e2)/(1-this.e2*Math.pow(Math.sin(this.fi0),2)),this.s0=1.37008346281555,this.n=Math.sin(this.s0),this.ro0=this.k1*this.n0/Math.tan(this.s0),this.ad=this.s90-this.uq},forward:function(t){var i,s,e,o,n,a,r,h=t.x,l=t.y,c=Proj4js.common.adjust_lon(h-this.long0);return i=Math.pow((1+this.e*Math.sin(l))/(1-this.e*Math.sin(l)),this.alfa*this.e/2),s=2*(Math.atan(this.k*Math.pow(Math.tan(l/2+this.s45),this.alfa)/i)-this.s45),e=-c*this.alfa,o=Math.asin(Math.cos(this.ad)*Math.sin(s)+Math.sin(this.ad)*Math.cos(s)*Math.cos(e)),n=Math.asin(Math.cos(s)*Math.sin(e)/Math.cos(o)),a=this.n*n,r=this.ro0*Math.pow(Math.tan(this.s0/2+this.s45),this.n)/Math.pow(Math.tan(o/2+this.s45),this.n),t.y=r*Math.cos(a)/1,t.x=r*Math.sin(a)/1,this.czech&&(t.y*=-1,t.x*=-1),t},inverse:function(t){var i,s,e,o,n,a,r,h,l=t.x;t.x=t.y,t.y=l,this.czech&&(t.y*=-1,t.x*=-1),a=Math.sqrt(t.x*t.x+t.y*t.y),n=Math.atan2(t.y,t.x),o=n/Math.sin(this.s0),e=2*(Math.atan(Math.pow(this.ro0/a,1/this.n)*Math.tan(this.s0/2+this.s45))-this.s45),i=Math.asin(Math.cos(this.ad)*Math.sin(e)-Math.sin(this.ad)*Math.cos(e)*Math.cos(o)),s=Math.asin(Math.cos(e)*Math.sin(o)/Math.cos(i)),t.x=this.long0-s/this.alfa,r=i,h=0;var c=0;do t.y=2*(Math.atan(Math.pow(this.k,-1/this.alfa)*Math.pow(Math.tan(i/2+this.s45),1/this.alfa)*Math.pow((1+this.e*Math.sin(r))/(1-this.e*Math.sin(r)),this.e/2))-this.s45),1e-10>Math.abs(r-t.y)&&(h=1),r=t.y,c+=1;while(0==h&&15>c);return c>=15?(Proj4js.reportError("PHI3Z-CONV:Latitude failed to converge after 15 iterations"),null):t}},Proj4js.Proj.somerc={init:function(){var t=this.lat0;this.lambda0=this.long0;var i=Math.sin(t),s=this.a,e=this.rf,o=1/e,n=2*o-Math.pow(o,2),a=this.e=Math.sqrt(n);this.R=this.k0*s*Math.sqrt(1-n)/(1-n*Math.pow(i,2)),this.alpha=Math.sqrt(1+n/(1-n)*Math.pow(Math.cos(t),4)),this.b0=Math.asin(i/this.alpha),this.K=Math.log(Math.tan(Math.PI/4+this.b0/2))-this.alpha*Math.log(Math.tan(Math.PI/4+t/2))+this.alpha*a/2*Math.log((1+a*i)/(1-a*i))},forward:function(t){var i=Math.log(Math.tan(Math.PI/4-t.y/2)),s=this.e/2*Math.log((1+this.e*Math.sin(t.y))/(1-this.e*Math.sin(t.y))),e=-this.alpha*(i+s)+this.K,o=2*(Math.atan(Math.exp(e))-Math.PI/4),n=this.alpha*(t.x-this.lambda0),a=Math.atan(Math.sin(n)/(Math.sin(this.b0)*Math.tan(o)+Math.cos(this.b0)*Math.cos(n))),r=Math.asin(Math.cos(this.b0)*Math.sin(o)-Math.sin(this.b0)*Math.cos(o)*Math.cos(n));return t.y=this.R/2*Math.log((1+Math.sin(r))/(1-Math.sin(r)))+this.y0,t.x=this.R*a+this.x0,t},inverse:function(t){for(var i=t.x-this.x0,s=t.y-this.y0,e=i/this.R,o=2*(Math.atan(Math.exp(s/this.R))-Math.PI/4),n=Math.asin(Math.cos(this.b0)*Math.sin(o)+Math.sin(this.b0)*Math.cos(o)*Math.cos(e)),a=Math.atan(Math.sin(e)/(Math.cos(this.b0)*Math.cos(e)-Math.sin(this.b0)*Math.tan(o))),r=this.lambda0+a/this.alpha,h=0,l=n,c=-1e3,m=0;Math.abs(l-c)>1e-7;){if(++m>20)return Proj4js.reportError("omercFwdInfinity"),void 0;h=1/this.alpha*(Math.log(Math.tan(Math.PI/4+n/2))-this.K)+this.e*Math.log(Math.tan(Math.PI/4+Math.asin(this.e*Math.sin(l))/2)),c=l,l=2*Math.atan(Math.exp(h))-Math.PI/2}return t.x=r,t.y=l,t}},Proj4js.Proj.stere={ssfn_:function(t,i,s){return i*=s,Math.tan(.5*(Proj4js.common.HALF_PI+t))*Math.pow((1-i)/(1+i),.5*s)},TOL:1e-8,NITER:8,CONV:1e-10,S_POLE:0,N_POLE:1,OBLIQ:2,EQUIT:3,init:function(){this.phits=this.lat_ts?this.lat_ts:Proj4js.common.HALF_PI;var t=Math.abs(this.lat0);if(this.mode=Math.abs(t)-Proj4js.common.HALF_PIthis.lat0?this.S_POLE:this.N_POLE:t>Proj4js.common.EPSLN?this.OBLIQ:this.EQUIT,this.phits=Math.abs(this.phits),this.es){var i;switch(this.mode){case this.N_POLE:case this.S_POLE:Math.abs(this.phits-Proj4js.common.HALF_PI)=Proj4js.common.EPSLN?Math.cos(this.phits)/Math.tan(Proj4js.common.FORTPI-.5*this.phits):2*this.k0}},forward:function(t){var i=t.x;i=Proj4js.common.adjust_lon(i-this.long0);var s,e,o=t.y;if(this.sphere){var n,a,r,h;switch(n=Math.sin(o),a=Math.cos(o),r=Math.cos(i),h=Math.sin(i),this.mode){case this.EQUIT:e=1+a*r,Proj4js.common.EPSLN>=e&&Proj4js.reportError("stere:forward:Equit"),e=this.akm1/e,s=e*a*h,e*=n;break;case this.OBLIQ:e=1+this.sinph0*n+this.cosph0*a*r,Proj4js.common.EPSLN>=e&&Proj4js.reportError("stere:forward:Obliq"),e=this.akm1/e,s=e*a*h,e*=this.cosph0*n-this.sinph0*a*r;break;case this.N_POLE:r=-r,o=-o;case this.S_POLE:Math.abs(o-Proj4js.common.HALF_PI)=l;l++)r*=n,h+=this.A[l]*r;for(var c,m,u=h,d=a,p=1,_=0,f=0,P=0,l=1;6>=l;l++)c=p*u-_*d,m=_*u+p*d,p=c,_=m,f=f+this.B_re[l]*p-this.B_im[l]*_,P=P+this.B_im[l]*p+this.B_re[l]*_;return t.x=P*this.a+this.x0,t.y=f*this.a+this.y0,t},inverse:function(t){for(var i,s,e=t.x,o=t.y,n=e-this.x0,a=o-this.y0,r=a/this.a,h=n/this.a,l=1,c=0,m=0,u=0,d=1;6>=d;d++)i=l*r-c*h,s=c*r+l*h,l=i,c=s,m=m+this.C_re[d]*l-this.C_im[d]*c,u=u+this.C_im[d]*l+this.C_re[d]*c;for(var p=0;this.iterations>p;p++){for(var _,f,P=m,y=u,g=r,L=h,d=2;6>=d;d++)_=P*m-y*u,f=y*m+P*u,P=_,y=f,g+=(d-1)*(this.B_re[d]*P-this.B_im[d]*y),L+=(d-1)*(this.B_im[d]*P+this.B_re[d]*y);P=1,y=0;for(var v=this.B_re[1],j=this.B_im[1],d=2;6>=d;d++)_=P*m-y*u,f=y*m+P*u,P=_,y=f,v+=d*(this.B_re[d]*P-this.B_im[d]*y),j+=d*(this.B_im[d]*P+this.B_re[d]*y);var M=v*v+j*j;m=(g*v+L*j)/M,u=(L*v-g*j)/M}for(var S=m,b=u,x=1,E=0,d=1;9>=d;d++)x*=S,E+=this.D[d]*x;var C=this.lat0+1e5*E*Proj4js.common.SEC_TO_RAD,w=this.long0+b;return t.x=w,t.y=C,t}},Proj4js.Proj.mill={init:function(){},forward:function(t){var i=t.x,s=t.y,e=Proj4js.common.adjust_lon(i-this.long0),o=this.x0+this.a*e,n=this.y0+1.25*this.a*Math.log(Math.tan(Proj4js.common.PI/4+s/2.5));return t.x=o,t.y=n,t},inverse:function(t){t.x-=this.x0,t.y-=this.y0;var i=Proj4js.common.adjust_lon(this.long0+t.x/this.a),s=2.5*(Math.atan(Math.exp(.8*t.y/this.a))-Proj4js.common.PI/4);return t.x=i,t.y=s,t}},Proj4js.Proj.gnom={init:function(){this.sin_p14=Math.sin(this.lat0),this.cos_p14=Math.cos(this.lat0),this.infinity_dist=1e3*this.a,this.rc=1},forward:function(t){var i,s,e,o,n,a,r,h,l=t.x,c=t.y;return e=Proj4js.common.adjust_lon(l-this.long0),i=Math.sin(c),s=Math.cos(c),o=Math.cos(e),a=this.sin_p14*i+this.cos_p14*s*o,n=1,a>0||Math.abs(a)<=Proj4js.common.EPSLN?(r=this.x0+this.a*n*s*Math.sin(e)/a,h=this.y0+this.a*n*(this.cos_p14*i-this.sin_p14*s*o)/a):(Proj4js.reportError("orthoFwdPointError"),r=this.x0+this.infinity_dist*s*Math.sin(e),h=this.y0+this.infinity_dist*(this.cos_p14*i-this.sin_p14*s*o)),t.x=r,t.y=h,t},inverse:function(t){var i,s,e,o,n,a;return t.x=(t.x-this.x0)/this.a,t.y=(t.y-this.y0)/this.a,t.x/=this.k0,t.y/=this.k0,(i=Math.sqrt(t.x*t.x+t.y*t.y))?(o=Math.atan2(i,this.rc),s=Math.sin(o),e=Math.cos(o),a=Proj4js.common.asinz(e*this.sin_p14+t.y*s*this.cos_p14/i),n=Math.atan2(t.x*s,i*this.cos_p14*e-t.y*this.sin_p14*s),n=Proj4js.common.adjust_lon(this.long0+n)):(a=this.phic0,n=0),t.x=n,t.y=a,t}},Proj4js.Proj.sinu={init:function(){this.sphere?(this.n=1,this.m=0,this.es=0,this.C_y=Math.sqrt((this.m+1)/this.n),this.C_x=this.C_y/(this.m+1)):this.en=Proj4js.common.pj_enfn(this.es)},forward:function(t){var i,s,e=t.x,o=t.y;if(e=Proj4js.common.adjust_lon(e-this.long0),this.sphere){if(this.m)for(var n=this.n*Math.sin(o),a=Proj4js.common.MAX_ITER;a;--a){var r=(this.m*o+Math.sin(o)-n)/(this.m+Math.cos(o));if(o-=r,Math.abs(r)o?(o=Math.sin(i),s=this.long0+t.x*Math.sqrt(1-this.es*o*o)/(this.a*Math.cos(i)),e=Proj4js.common.adjust_lon(s)):o-Proj4js.common.EPSLN=0?this.y0+Proj4js.common.PI*this.R*Math.tan(.5*a):this.y0+Proj4js.common.PI*this.R*-Math.tan(.5*a));var r=.5*Math.abs(Proj4js.common.PI/n-n/Proj4js.common.PI),h=r*r,l=Math.sin(a),c=Math.cos(a),m=c/(l+c-1),u=m*m,d=m*(2/l-1),p=d*d,_=Proj4js.common.PI*this.R*(r*(m-p)+Math.sqrt(h*(m-p)*(m-p)-(p+h)*(u-p)))/(p+h);return 0>n&&(_=-_),i=this.x0+_,_=Math.abs(_/(Proj4js.common.PI*this.R)),s=o>=0?this.y0+Proj4js.common.PI*this.R*Math.sqrt(1-_*_-2*r*_):this.y0-Proj4js.common.PI*this.R*Math.sqrt(1-_*_-2*r*_),t.x=i,t.y=s,t},inverse:function(t){var i,s,e,o,n,a,r,h,l,c,m,u,d;return t.x-=this.x0,t.y-=this.y0,m=Proj4js.common.PI*this.R,e=t.x/m,o=t.y/m,n=e*e+o*o,a=-Math.abs(o)*(1+n),r=a-2*o*o+e*e,h=-2*a+1+2*o*o+n*n,d=o*o/h+(2*r*r*r/h/h/h-9*a*r/h/h)/27,l=(a-r*r/3/h)/h,c=2*Math.sqrt(-l/3),m=3*d/l/c,Math.abs(m)>1&&(m=m>=0?1:-1),u=Math.acos(m)/3,s=t.y>=0?(-c*Math.cos(u+Proj4js.common.PI/3)-r/3/h)*Proj4js.common.PI:-(-c*Math.cos(u+Proj4js.common.PI/3)-r/3/h)*Proj4js.common.PI,Math.abs(e)0&&(e=2*Math.atan(o*Proj4js.common.srat(this.e*Math.sin(t.y),-.5*this.e))-Proj4js.common.HALF_PI,!(i>Math.abs(e-t.y)));--n)t.y=e;return n?(t.x=s,t.y=e,t):(Proj4js.reportError("gauss:inverse:convergence failed"),null)}},Proj4js.Proj.omerc={init:function(){this.mode||(this.mode=0),this.lon1||(this.lon1=0,this.mode=1),this.lon2||(this.lon2=0),this.lat2||(this.lat2=0);var t=this.b/this.a,i=1-Math.pow(t,2);Math.sqrt(i),this.sin_p20=Math.sin(this.lat0),this.cos_p20=Math.cos(this.lat0),this.con=1-this.es*this.sin_p20*this.sin_p20,this.com=Math.sqrt(1-i),this.bl=Math.sqrt(1+this.es*Math.pow(this.cos_p20,4)/(1-i)),this.al=this.a*this.bl*this.k0*this.com/this.con,Math.abs(this.lat0)0?this.lat0>=0?this.d+Math.sqrt(this.d*this.d-1):this.d-Math.sqrt(this.d*this.d-1):this.d,this.el=this.f*Math.pow(this.ts,this.bl)),0!=this.mode?(this.g=.5*(this.f-1/this.f),this.gama=Proj4js.common.asinz(Math.sin(this.alpha)/this.d),this.longc=this.longc-Proj4js.common.asinz(this.g*Math.tan(this.gama))/this.bl,this.con=Math.abs(this.lat0),this.con>Proj4js.common.EPSLN&&Math.abs(this.con-Proj4js.common.HALF_PI)>Proj4js.common.EPSLN?(this.singam=Math.sin(this.gama),this.cosgam=Math.cos(this.gama),this.sinaz=Math.sin(this.alpha),this.cosaz=Math.cos(this.alpha),this.u=this.lat0>=0?this.al/this.bl*Math.atan(Math.sqrt(this.d*this.d-1)/this.cosaz):-(this.al/this.bl)*Math.atan(Math.sqrt(this.d*this.d-1)/this.cosaz)):Proj4js.reportError("omerc:Init:DataError")):(this.sinphi=Math.sin(this.at1),this.ts1=Proj4js.common.tsfnz(this.e,this.lat1,this.sinphi),this.sinphi=Math.sin(this.lat2),this.ts2=Proj4js.common.tsfnz(this.e,this.lat2,this.sinphi),this.h=Math.pow(this.ts1,this.bl),this.l=Math.pow(this.ts2,this.bl),this.f=this.el/this.h,this.g=.5*(this.f-1/this.f),this.j=(this.el*this.el-this.l*this.h)/(this.el*this.el+this.l*this.h),this.p=(this.l-this.h)/(this.l+this.h),this.dlon=this.lon1-this.lon2,this.dlon<-Proj4js.common.PI&&(this.lon2=this.lon2-2*Proj4js.common.PI),this.dlon>Proj4js.common.PI&&(this.lon2=this.lon2+2*Proj4js.common.PI),this.dlon=this.lon1-this.lon2,this.longc=.5*(this.lon1+this.lon2)-Math.atan(this.j*Math.tan(.5*this.bl*this.dlon)/this.p)/this.bl,this.dlon=Proj4js.common.adjust_lon(this.lon1-this.longc),this.gama=Math.atan(Math.sin(this.bl*this.dlon)/this.g),this.alpha=Proj4js.common.asinz(this.d*Math.sin(this.gama)),Math.abs(this.lat1-this.lat2)<=Proj4js.common.EPSLN?Proj4js.reportError("omercInitDataError"):this.con=Math.abs(this.lat1),this.con<=Proj4js.common.EPSLN||Math.abs(this.con-Proj4js.common.HALF_PI)<=Proj4js.common.EPSLN?Proj4js.reportError("omercInitDataError"):Math.abs(Math.abs(this.lat0)-Proj4js.common.HALF_PI)<=Proj4js.common.EPSLN&&Proj4js.reportError("omercInitDataError"),this.singam=Math.sin(this.gam),this.cosgam=Math.cos(this.gam),this.sinaz=Math.sin(this.alpha),this.cosaz=Math.cos(this.alpha),this.u=this.lat0>=0?this.al/this.bl*Math.atan(Math.sqrt(this.d*this.d-1)/this.cosaz):-(this.al/this.bl)*Math.atan(Math.sqrt(this.d*this.d-1)/this.cosaz))},forward:function(t){var i,s,e,o,n,a,r,h,l,c,m,u=t.x,d=t.y;i=Math.sin(d),c=Proj4js.common.adjust_lon(u-this.longc),a=Math.sin(this.bl*c),Math.abs(Math.abs(d)-Proj4js.common.HALF_PI)>Proj4js.common.EPSLN?(m=Proj4js.common.tsfnz(this.e,d,i),o=this.el/Math.pow(m,this.bl),l=.5*(o-1/o),s=.5*(o+1/o),r=(l*this.singam-a*this.cosgam)/s,e=Math.cos(this.bl*c),1e-7>Math.abs(e)?n=this.al*this.bl*c:(n=this.al*Math.atan((l*this.cosgam+a*this.singam)/e)/this.bl,0>e&&(n+=Proj4js.common.PI*this.al/this.bl))):(r=d>=0?this.singam:-this.singam,n=this.al*d/this.bl),Math.abs(Math.abs(r)-1)<=Proj4js.common.EPSLN&&Proj4js.reportError("omercFwdInfinity"),h=.5*this.al*Math.log((1-r)/(1+r))/this.bl,n-=this.u;var p=this.x0+h*this.cosaz+n*this.sinaz,_=this.y0+n*this.cosaz-h*this.sinaz;return t.x=p,t.y=_,t},inverse:function(t){var i,s,e,o,n,a,r,h,l,c,m,u,d;return t.x-=this.x0,t.y-=this.y0,d=0,o=t.x*this.cosaz-t.y*this.sinaz,n=t.y*this.cosaz+t.x*this.sinaz,n+=this.u,a=Math.exp(-this.bl*o/this.al),r=.5*(a-1/a),s=.5*(a+1/a),l=Math.sin(this.bl*n/this.al),c=(l*this.cosgam+r*this.singam)/s,Math.abs(Math.abs(c)-1)<=Proj4js.common.EPSLN?(m=this.longc,u=c>=0?Proj4js.common.HALF_PI:-Proj4js.common.HALF_PI):(e=1/this.bl,h=Math.pow(this.el/Math.sqrt((1+c)/(1-c)),e),u=Proj4js.common.phi2z(this.e,h),i=this.longc-Math.atan2(r*this.cosgam-l*this.singam,e)/this.bl,m=Proj4js.common.adjust_lon(i)),t.x=m,t.y=u,t}},Proj4js.Proj.lcc={init:function(){if(this.lat2||(this.lat2=this.lat0),this.k0||(this.k0=1),Math.abs(this.lat1+this.lat2)Proj4js.common.EPSLN?Math.log(e/r)/Math.log(o/h):i,this.f0=e/(this.ns*Math.pow(o,this.ns)),this.rh=this.a*this.f0*Math.pow(l,this.ns),this.title||(this.title="Lambert Conformal Conic")},forward:function(t){var i=t.x,s=t.y;if(!(90>=s&&s>=-90&&180>=i&&i>=-180))return Proj4js.reportError("lcc:forward: llInputOutOfRange: "+i+" : "+s),null;var e,o,n=Math.abs(Math.abs(s)-Proj4js.common.HALF_PI);if(n>Proj4js.common.EPSLN)e=Proj4js.common.tsfnz(this.e,s,Math.sin(s)),o=this.a*this.f0*Math.pow(e,this.ns);else{if(n=s*this.ns,0>=n)return Proj4js.reportError("lcc:forward: No Projection"),null;o=0}var a=this.ns*Proj4js.common.adjust_lon(i-this.long0);return t.x=this.k0*o*Math.sin(a)+this.x0,t.y=this.k0*(this.rh-o*Math.cos(a))+this.y0,t},inverse:function(t){var i,s,e,o,n,a=(t.x-this.x0)/this.k0,r=this.rh-(t.y-this.y0)/this.k0;this.ns>0?(i=Math.sqrt(a*a+r*r),s=1):(i=-Math.sqrt(a*a+r*r),s=-1);var h=0;if(0!=i&&(h=Math.atan2(s*a,s*r)),0!=i||this.ns>0){if(s=1/this.ns,e=Math.pow(i/(this.a*this.f0),s),o=Proj4js.common.phi2z(this.e,e),-9999==o)return null}else o=-Proj4js.common.HALF_PI;return n=Proj4js.common.adjust_lon(h/this.ns+this.long0),t.x=n,t.y=o,t}},Proj4js.Proj.laea={S_POLE:1,N_POLE:2,EQUIT:3,OBLIQ:4,init:function(){var t=Math.abs(this.lat0);if(this.mode=Math.abs(t-Proj4js.common.HALF_PI)this.lat0?this.S_POLE:this.N_POLE:Math.abs(t)0){var i;switch(this.qp=Proj4js.common.qsfnz(this.e,1),this.mmf=.5/(1-this.es),this.apa=this.authset(this.es),this.mode){case this.N_POLE:case this.S_POLE:this.dd=1;break;case this.EQUIT:this.rq=Math.sqrt(.5*this.qp),this.dd=1/this.rq,this.xmf=1,this.ymf=.5*this.qp;break;case this.OBLIQ:this.rq=Math.sqrt(.5*this.qp),i=Math.sin(this.lat0),this.sinb1=Proj4js.common.qsfnz(this.e,i)/this.qp,this.cosb1=Math.sqrt(1-this.sinb1*this.sinb1),this.dd=Math.cos(this.lat0)/(Math.sqrt(1-this.es*i*i)*this.rq*this.cosb1),this.ymf=(this.xmf=this.rq)/this.dd,this.xmf*=this.dd}}else this.mode==this.OBLIQ&&(this.sinph0=Math.sin(this.lat0),this.cosph0=Math.cos(this.lat0))},forward:function(t){var i,s,e=t.x,o=t.y;if(e=Proj4js.common.adjust_lon(e-this.long0),this.sphere){var n,a,r;switch(r=Math.sin(o),a=Math.cos(o),n=Math.cos(e),this.mode){case this.OBLIQ:case this.EQUIT:if(s=this.mode==this.EQUIT?1+a*n:1+this.sinph0*r+this.cosph0*a*n,Proj4js.common.EPSLN>=s)return Proj4js.reportError("laea:fwd:y less than eps"),null;s=Math.sqrt(2/s),i=s*a*Math.sin(e),s*=this.mode==this.EQUIT?r:this.cosph0*r-this.sinph0*a*n;break;case this.N_POLE:n=-n;case this.S_POLE:if(Math.abs(o+this.phi0)=0?(i=(u=Math.sqrt(l))*h,s=n*(this.mode==this.S_POLE?u:-u)):i=s=0}}return t.x=this.a*i+this.x0,t.y=this.a*s+this.y0,t},inverse:function(t){t.x-=this.x0,t.y-=this.y0;var i,s,e=t.x/this.a,o=t.y/this.a;if(this.sphere){var n,a=0,r=0;if(n=Math.sqrt(e*e+o*o),s=.5*n,s>1)return Proj4js.reportError("laea:Inv:DataError"),null;switch(s=2*Math.asin(s),(this.mode==this.OBLIQ||this.mode==this.EQUIT)&&(r=Math.sin(s),a=Math.cos(s)),this.mode){case this.EQUIT:s=Math.abs(n)<=Proj4js.common.EPSLN?0:Math.asin(o*r/n),e*=r,o=a*n;break;case this.OBLIQ:s=Math.abs(n)<=Proj4js.common.EPSLN?this.phi0:Math.asin(a*this.sinph0+o*r*this.cosph0/n),e*=r*this.cosph0,o=(a-Math.sin(s)*this.sinph0)*n;break;case this.N_POLE:o=-o,s=Proj4js.common.HALF_PI-s;break;case this.S_POLE:s-=Proj4js.common.HALF_PI}i=0!=o||this.mode!=this.EQUIT&&this.mode!=this.OBLIQ?Math.atan2(e,o):0}else{var h,l,c,m,u=0;switch(this.mode){case this.EQUIT:case this.OBLIQ:if(e/=this.dd,o*=this.dd,m=Math.sqrt(e*e+o*o),Proj4js.common.EPSLN>m)return t.x=0,t.y=this.phi0,t;l=2*Math.asin(.5*m/this.rq),h=Math.cos(l),e*=l=Math.sin(l),this.mode==this.OBLIQ?(u=h*this.sinb1+o*l*this.cosb1/m,c=this.qp*u,o=m*this.cosb1*h-o*this.sinb1*l):(u=o*l/m,c=this.qp*u,o=m*h);break;case this.N_POLE:o=-o;case this.S_POLE:if(c=e*e+o*o,!c)return t.x=0,t.y=this.phi0,t;u=1-c/this.qp,this.mode==this.S_POLE&&(u=-u)}i=Math.atan2(e,o),s=this.authlat(Math.asin(u),this.apa)}return t.x=Proj4js.common.adjust_lon(this.long0+i),t.y=s,t},P00:.3333333333333333,P01:.17222222222222222,P02:.10257936507936508,P10:.06388888888888888,P11:.0664021164021164,P20:.016415012942191543,authset:function(t){var i,s=[];return s[0]=t*this.P00,i=t*t,s[0]+=i*this.P01,s[1]=i*this.P10,i*=t,s[0]+=i*this.P02,s[1]+=i*this.P11,s[2]=i*this.P20,s},authlat:function(t,i){var s=t+t;return t+i[0]*Math.sin(s)+i[1]*Math.sin(s+s)+i[2]*Math.sin(s+s+s)}},Proj4js.Proj.aeqd={init:function(){this.sin_p12=Math.sin(this.lat0),this.cos_p12=Math.cos(this.lat0)},forward:function(t){var i=t.x;t.y;var s,e=Math.sin(t.y),o=Math.cos(t.y),n=Proj4js.common.adjust_lon(i-this.long0),a=Math.cos(n),r=this.sin_p12*e+this.cos_p12*o*a;if(Math.abs(Math.abs(r)-1)r)return Proj4js.reportError("aeqd:Fwd:PointError"),void 0}else{var h=Math.acos(r);s=h/Math.sin(h)}return t.x=this.x0+this.a*s*o*Math.sin(n),t.y=this.y0+this.a*s*(this.cos_p12*e-this.sin_p12*o*a),t},inverse:function(t){t.x-=this.x0,t.y-=this.y0;var i=Math.sqrt(t.x*t.x+t.y*t.y);if(i>2*Proj4js.common.HALF_PI*this.a)return Proj4js.reportError("aeqdInvDataError"),void 0;var s,e=i/this.a,o=Math.sin(e),n=Math.cos(e),a=this.long0;if(Math.abs(i)<=Proj4js.common.EPSLN)s=this.lat0;else{s=Proj4js.common.asinz(n*this.sin_p12+t.y*o*this.cos_p12/i);var r=Math.abs(this.lat0)-Proj4js.common.HALF_PI;Math.abs(r)<=Proj4js.common.EPSLN?a=this.lat0>=0?Proj4js.common.adjust_lon(this.long0+Math.atan2(t.x,-t.y)):Proj4js.common.adjust_lon(this.long0-Math.atan2(-t.x,t.y)):(r=n-this.sin_p12*Math.sin(s),Math.abs(r)=50&&Proj4js.reportError("moll:Fwd:IterationError")}o/=2,Proj4js.common.PI/2-Math.abs(s).999999999999&&(s=.999999999999);var i=Math.asin(s),e=Proj4js.common.adjust_lon(this.long0+t.x/(.900316316158*this.a*Math.cos(i)));-Proj4js.common.PI>e&&(e=-Proj4js.common.PI),e>Proj4js.common.PI&&(e=Proj4js.common.PI),s=(2*i+Math.sin(2*i))/Proj4js.common.PI,Math.abs(s)>1&&(s=1);var o=Math.asin(s);return t.x=e,t.y=o,t}},function(t,i,s){var e,o;typeof exports!=s+""?e=exports:(o=t.L,e={},e.noConflict=function(){return t.L=o,this},t.L=e),e.version="0.5.1",e.Util={extend:function(t){var i,s,e,o,n=Array.prototype.slice.call(arguments,1);for(s=0,e=n.length;e>s;s++){o=n[s]||{};for(i in o)o.hasOwnProperty(i)&&(t[i]=o[i])}return t},bind:function(t,i){var s=arguments.length>2?Array.prototype.slice.call(arguments,2):null;return function(){return t.apply(i,s||arguments)}},stamp:function(){var t=0,i="_leaflet_id";return function(s){return s[i]=s[i]||++t,s[i]}}(),limitExecByInterval:function(t,i,e){var o,n;return function a(){var r=arguments;return o?(n=!0,s):(o=!0,setTimeout(function(){o=!1,n&&(a.apply(e,r),n=!1)},i),t.apply(e,r),s)}},falseFn:function(){return!1},formatNum:function(t,i){var s=Math.pow(10,i||5);return Math.round(t*s)/s},splitWords:function(t){return t.replace(/^\s+|\s+$/g,"").split(/\s+/)},setOptions:function(t,i){return t.options=e.extend({},t.options,i),t.options},getParamString:function(t,i){var s=[];for(var e in t)t.hasOwnProperty(e)&&s.push(e+"="+t[e]);return(i&&-1!==i.indexOf("?")?"&":"?")+s.join("&")},template:function(t,i){return t.replace(/\{ *([\w_]+) *\}/g,function(t,s){var e=i[s];if(!i.hasOwnProperty(s))throw Error("No value provided for variable "+t);return e})},isArray:function(t){return"[object Array]"===Object.prototype.toString.call(t)},emptyImageUrl:"data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs="},function(){function i(i){var s,e,o=["webkit","moz","o","ms"];for(s=0;o.length>s&&!e;s++)e=t[o[s]+i];return e}function o(i){var s=+new Date,e=Math.max(0,16-(s-n));return n=s+e,t.setTimeout(i,e)}var n=0,a=t.requestAnimationFrame||i("RequestAnimationFrame")||o,r=t.cancelAnimationFrame||i("CancelAnimationFrame")||i("CancelRequestAnimationFrame")||function(i){t.clearTimeout(i)};e.Util.requestAnimFrame=function(i,n,r,h){return i=e.bind(i,n),r&&a===o?(i(),s):a.call(t,i,h)},e.Util.cancelAnimFrame=function(i){i&&r.call(t,i)}}(),e.extend=e.Util.extend,e.bind=e.Util.bind,e.stamp=e.Util.stamp,e.setOptions=e.Util.setOptions,e.Class=function(){},e.Class.extend=function(t){var i=function(){this.initialize&&this.initialize.apply(this,arguments),this._initHooks&&this.callInitHooks()},s=function(){};s.prototype=this.prototype;var o=new s;o.constructor=i,i.prototype=o;for(var n in this)this.hasOwnProperty(n)&&"prototype"!==n&&(i[n]=this[n]);t.statics&&(e.extend(i,t.statics),delete t.statics),t.includes&&(e.Util.extend.apply(null,[o].concat(t.includes)),delete t.includes),t.options&&o.options&&(t.options=e.extend({},o.options,t.options)),e.extend(o,t),o._initHooks=[];var a=this;return o.callInitHooks=function(){if(!this._initHooksCalled){a.prototype.callInitHooks&&a.prototype.callInitHooks.call(this),this._initHooksCalled=!0;for(var t=0,i=o._initHooks.length;i>t;t++)o._initHooks[t].call(this)}},i},e.Class.include=function(t){e.extend(this.prototype,t)},e.Class.mergeOptions=function(t){e.extend(this.prototype.options,t)},e.Class.addInitHook=function(t){var i=Array.prototype.slice.call(arguments,1),s="function"==typeof t?t:function(){this[t].apply(this,i)};this.prototype._initHooks=this.prototype._initHooks||[],this.prototype._initHooks.push(s)};var n="_leaflet_events";e.Mixin={},e.Mixin.Events={addEventListener:function(t,i,s){var o,a,r,h=this[n]=this[n]||{};if("object"==typeof t){for(o in t)t.hasOwnProperty(o)&&this.addEventListener(o,t[o],i);return this}for(t=e.Util.splitWords(t),a=0,r=t.length;r>a;a++)h[t[a]]=h[t[a]]||[],h[t[a]].push({action:i,context:s||this});return this},hasEventListeners:function(t){return n in this&&t in this[n]&&this[n][t].length>0},removeEventListener:function(t,i,s){var o,a,r,h,l,c=this[n];if("object"==typeof t){for(o in t)t.hasOwnProperty(o)&&this.removeEventListener(o,t[o],i);return this}for(t=e.Util.splitWords(t),a=0,r=t.length;r>a;a++)if(this.hasEventListeners(t[a]))for(h=c[t[a]],l=h.length-1;l>=0;l--)i&&h[l].action!==i||s&&h[l].context!==s||h.splice(l,1);return this},fireEvent:function(t,i){if(!this.hasEventListeners(t))return this;for(var s=e.extend({type:t,target:this},i),o=this[n][t].slice(),a=0,r=o.length;r>a;a++)o[a].action.call(o[a].context||this,s);return this}},e.Mixin.Events.on=e.Mixin.Events.addEventListener,e.Mixin.Events.off=e.Mixin.Events.removeEventListener,e.Mixin.Events.fire=e.Mixin.Events.fireEvent,function(){var o=!!t.ActiveXObject,n=o&&!t.XMLHttpRequest,a=o&&!i.querySelector,r=navigator.userAgent.toLowerCase(),h=-1!==r.indexOf("webkit"),l=-1!==r.indexOf("chrome"),c=-1!==r.indexOf("android"),m=-1!==r.search("android [23]"),u=typeof orientation!=s+"",d=t.navigator&&t.navigator.msPointerEnabled&&t.navigator.msMaxTouchPoints,p="devicePixelRatio"in t&&t.devicePixelRatio>1||"matchMedia"in t&&t.matchMedia("(min-resolution:144dpi)")&&t.matchMedia("(min-resolution:144dpi)").matches,_=i.documentElement,f=o&&"transition"in _.style,P="WebKitCSSMatrix"in t&&"m11"in new t.WebKitCSSMatrix,y="MozPerspective"in _.style,g="OTransition"in _.style,L=!t.L_DISABLE_3D&&(f||P||y||g),v=!t.L_NO_TOUCH&&function(){var t="ontouchstart";if(d||t in _)return!0;var s=i.createElement("div"),e=!1;return s.setAttribute?(s.setAttribute(t,"return;"),"function"==typeof s[t]&&(e=!0),s.removeAttribute(t),s=null,e):!1}();e.Browser={ie:o,ie6:n,ie7:a,webkit:h,android:c,android23:m,chrome:l,ie3d:f,webkit3d:P,gecko3d:y,opera3d:g,any3d:L,mobile:u,mobileWebkit:u&&h,mobileWebkit3d:u&&P,mobileOpera:u&&t.opera,touch:v,msTouch:d,retina:p}}(),e.Point=function(t,i,s){this.x=s?Math.round(t):t,this.y=s?Math.round(i):i},e.Point.prototype={clone:function(){return new e.Point(this.x,this.y)},add:function(t){return this.clone()._add(e.point(t))},_add:function(t){return this.x+=t.x,this.y+=t.y,this},subtract:function(t){return this.clone()._subtract(e.point(t))},_subtract:function(t){return this.x-=t.x,this.y-=t.y,this},divideBy:function(t){return this.clone()._divideBy(t)},_divideBy:function(t){return this.x/=t,this.y/=t,this},multiplyBy:function(t){return this.clone()._multiplyBy(t)},_multiplyBy:function(t){return this.x*=t,this.y*=t,this},round:function(){return this.clone()._round()},_round:function(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this},floor:function(){return this.clone()._floor()},_floor:function(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this},distanceTo:function(t){t=e.point(t);var i=t.x-this.x,s=t.y-this.y;return Math.sqrt(i*i+s*s)},equals:function(t){return t.x===this.x&&t.y===this.y},toString:function(){return"Point("+e.Util.formatNum(this.x)+", "+e.Util.formatNum(this.y)+")"}},e.point=function(t,i,s){return t instanceof e.Point?t:e.Util.isArray(t)?new e.Point(t[0],t[1]):isNaN(t)?t:new e.Point(t,i,s)},e.Bounds=function(t,i){if(t)for(var s=i?[t,i]:t,e=0,o=s.length;o>e;e++)this.extend(s[e])},e.Bounds.prototype={extend:function(t){return t=e.point(t),this.min||this.max?(this.min.x=Math.min(t.x,this.min.x),this.max.x=Math.max(t.x,this.max.x),this.min.y=Math.min(t.y,this.min.y),this.max.y=Math.max(t.y,this.max.y)):(this.min=t.clone(),this.max=t.clone()),this},getCenter:function(t){return new e.Point((this.min.x+this.max.x)/2,(this.min.y+this.max.y)/2,t)},getBottomLeft:function(){return new e.Point(this.min.x,this.max.y)},getTopRight:function(){return new e.Point(this.max.x,this.min.y)},getSize:function(){return this.max.subtract(this.min)},contains:function(t){var i,s;return t="number"==typeof t[0]||t instanceof e.Point?e.point(t):e.bounds(t),t instanceof e.Bounds?(i=t.min,s=t.max):i=s=t,i.x>=this.min.x&&s.x<=this.max.x&&i.y>=this.min.y&&s.y<=this.max.y},intersects:function(t){t=e.bounds(t);var i=this.min,s=this.max,o=t.min,n=t.max,a=n.x>=i.x&&o.x<=s.x,r=n.y>=i.y&&o.y<=s.y;return a&&r},isValid:function(){return!(!this.min||!this.max)}},e.bounds=function(t,i){return!t||t instanceof e.Bounds?t:new e.Bounds(t,i)},e.Transformation=function(t,i,s,e){this._a=t,this._b=i,this._c=s,this._d=e},e.Transformation.prototype={transform:function(t,i){return this._transform(t.clone(),i)},_transform:function(t,i){return i=i||1,t.x=i*(this._a*t.x+this._b),t.y=i*(this._c*t.y+this._d),t},untransform:function(t,i){return i=i||1,new e.Point((t.x/i-this._b)/this._a,(t.y/i-this._d)/this._c)}},e.DomUtil={get:function(t){return"string"==typeof t?i.getElementById(t):t},getStyle:function(t,s){var e=t.style[s];if(!e&&t.currentStyle&&(e=t.currentStyle[s]),(!e||"auto"===e)&&i.defaultView){var o=i.defaultView.getComputedStyle(t,null);e=o?o[s]:null}return"auto"===e?null:e},getViewportOffset:function(t){var s,o=0,n=0,a=t,r=i.body,h=e.Browser.ie7;do{if(o+=a.offsetTop||0,n+=a.offsetLeft||0,o+=parseInt(e.DomUtil.getStyle(a,"borderTopWidth"),10)||0,n+=parseInt(e.DomUtil.getStyle(a,"borderLeftWidth"),10)||0,s=e.DomUtil.getStyle(a,"position"),a.offsetParent===r&&"absolute"===s)break;if("fixed"===s){o+=r.scrollTop||0,n+=r.scrollLeft||0;break}a=a.offsetParent}while(a);a=t;do{if(a===r)break;o-=a.scrollTop||0,n-=a.scrollLeft||0,e.DomUtil.documentIsLtr()||!e.Browser.webkit&&!h||(n+=a.scrollWidth-a.clientWidth,h&&"hidden"!==e.DomUtil.getStyle(a,"overflow-y")&&"hidden"!==e.DomUtil.getStyle(a,"overflow")&&(n+=17)),a=a.parentNode}while(a);return new e.Point(n,o)},documentIsLtr:function(){return e.DomUtil._docIsLtrCached||(e.DomUtil._docIsLtrCached=!0,e.DomUtil._docIsLtr="ltr"===e.DomUtil.getStyle(i.body,"direction")),e.DomUtil._docIsLtr},create:function(t,s,e){var o=i.createElement(t);return o.className=s,e&&e.appendChild(o),o},disableTextSelection:function(){i.selection&&i.selection.empty&&i.selection.empty(),this._onselectstart||(this._onselectstart=i.onselectstart||null,i.onselectstart=e.Util.falseFn)},enableTextSelection:function(){i.onselectstart===e.Util.falseFn&&(i.onselectstart=this._onselectstart,this._onselectstart=null)},hasClass:function(t,i){return t.className.length>0&&RegExp("(^|\\s)"+i+"(\\s|$)").test(t.className)},addClass:function(t,i){e.DomUtil.hasClass(t,i)||(t.className+=(t.className?" ":"")+i)},removeClass:function(t,i){function s(t,s){return s===i?"":t}t.className=t.className.replace(/(\S+)\s*/g,s).replace(/(^\s+|\s+$)/,"")},setOpacity:function(t,i){if("opacity"in t.style)t.style.opacity=i;else if("filter"in t.style){var s=!1,e="DXImageTransform.Microsoft.Alpha";try{s=t.filters.item(e)}catch(o){}i=Math.round(100*i),s?(s.Enabled=100!==i,s.Opacity=i):t.style.filter+=" progid:"+e+"(opacity="+i+")"}},testProp:function(t){for(var s=i.documentElement.style,e=0;t.length>e;e++)if(t[e]in s)return t[e];return!1},getTranslateString:function(t){var i=e.Browser.webkit3d,s="translate"+(i?"3d":"")+"(",o=(i?",0":"")+")";return s+t.x+"px,"+t.y+"px"+o},getScaleString:function(t,i){var s=e.DomUtil.getTranslateString(i.add(i.multiplyBy(-1*t))),o=" scale("+t+") ";return s+o},setPosition:function(t,i,s){t._leaflet_pos=i,!s&&e.Browser.any3d?(t.style[e.DomUtil.TRANSFORM]=e.DomUtil.getTranslateString(i),e.Browser.mobileWebkit3d&&(t.style.WebkitBackfaceVisibility="hidden")):(t.style.left=i.x+"px",t.style.top=i.y+"px")},getPosition:function(t){return t._leaflet_pos}},e.DomUtil.TRANSFORM=e.DomUtil.testProp(["transform","WebkitTransform","OTransform","MozTransform","msTransform"]),e.DomUtil.TRANSITION=e.DomUtil.testProp(["webkitTransition","transition","OTransition","MozTransition","msTransition"]),e.DomUtil.TRANSITION_END="webkitTransition"===e.DomUtil.TRANSITION||"OTransition"===e.DomUtil.TRANSITION?e.DomUtil.TRANSITION+"End":"transitionend",e.LatLng=function(t,i){var s=parseFloat(t),e=parseFloat(i);if(isNaN(s)||isNaN(e))throw Error("Invalid LatLng object: ("+t+", "+i+")");this.lat=s,this.lng=e},e.extend(e.LatLng,{DEG_TO_RAD:Math.PI/180,RAD_TO_DEG:180/Math.PI,MAX_MARGIN:1e-9}),e.LatLng.prototype={equals:function(t){if(!t)return!1;t=e.latLng(t);var i=Math.max(Math.abs(this.lat-t.lat),Math.abs(this.lng-t.lng));return e.LatLng.MAX_MARGIN>=i},toString:function(t){return"LatLng("+e.Util.formatNum(this.lat,t)+", "+e.Util.formatNum(this.lng,t)+")"},distanceTo:function(t){t=e.latLng(t);var i=6378137,s=e.LatLng.DEG_TO_RAD,o=(t.lat-this.lat)*s,n=(t.lng-this.lng)*s,a=this.lat*s,r=t.lat*s,h=Math.sin(o/2),l=Math.sin(n/2),c=h*h+l*l*Math.cos(a)*Math.cos(r);return 2*i*Math.atan2(Math.sqrt(c),Math.sqrt(1-c))},wrap:function(t,i){var s=this.lng;return t=t||-180,i=i||180,s=(s+i)%(i-t)+(t>s||s===i?i:t),new e.LatLng(this.lat,s)}},e.latLng=function(t,i){return t instanceof e.LatLng?t:e.Util.isArray(t)?new e.LatLng(t[0],t[1]):isNaN(t)?t:new e.LatLng(t,i)},e.LatLngBounds=function(t,i){if(t)for(var s=i?[t,i]:t,e=0,o=s.length;o>e;e++)this.extend(s[e])},e.LatLngBounds.prototype={extend:function(t){return t="number"==typeof t[0]||"string"==typeof t[0]||t instanceof e.LatLng?e.latLng(t):e.latLngBounds(t),t instanceof e.LatLng?this._southWest||this._northEast?(this._southWest.lat=Math.min(t.lat,this._southWest.lat),this._southWest.lng=Math.min(t.lng,this._southWest.lng),this._northEast.lat=Math.max(t.lat,this._northEast.lat),this._northEast.lng=Math.max(t.lng,this._northEast.lng)):(this._southWest=new e.LatLng(t.lat,t.lng),this._northEast=new e.LatLng(t.lat,t.lng)):t instanceof e.LatLngBounds&&(this.extend(t._southWest),this.extend(t._northEast)),this},pad:function(t){var i=this._southWest,s=this._northEast,o=Math.abs(i.lat-s.lat)*t,n=Math.abs(i.lng-s.lng)*t;return new e.LatLngBounds(new e.LatLng(i.lat-o,i.lng-n),new e.LatLng(s.lat+o,s.lng+n))},getCenter:function(){return new e.LatLng((this._southWest.lat+this._northEast.lat)/2,(this._southWest.lng+this._northEast.lng)/2)},getSouthWest:function(){return this._southWest},getNorthEast:function(){return this._northEast},getNorthWest:function(){return new e.LatLng(this._northEast.lat,this._southWest.lng)},getSouthEast:function(){return new e.LatLng(this._southWest.lat,this._northEast.lng)},contains:function(t){t="number"==typeof t[0]||t instanceof e.LatLng?e.latLng(t):e.latLngBounds(t);var i,s,o=this._southWest,n=this._northEast;return t instanceof e.LatLngBounds?(i=t.getSouthWest(),s=t.getNorthEast()):i=s=t,i.lat>=o.lat&&s.lat<=n.lat&&i.lng>=o.lng&&s.lng<=n.lng},intersects:function(t){t=e.latLngBounds(t);var i=this._southWest,s=this._northEast,o=t.getSouthWest(),n=t.getNorthEast(),a=n.lat>=i.lat&&o.lat<=s.lat,r=n.lng>=i.lng&&o.lng<=s.lng;return a&&r},toBBoxString:function(){var t=this._southWest,i=this._northEast;return[t.lng,t.lat,i.lng,i.lat].join(",")},equals:function(t){return t?(t=e.latLngBounds(t),this._southWest.equals(t.getSouthWest())&&this._northEast.equals(t.getNorthEast())):!1},isValid:function(){return!(!this._southWest||!this._northEast)}},e.latLngBounds=function(t,i){return!t||t instanceof e.LatLngBounds?t:new e.LatLngBounds(t,i)},e.Projection={},e.Projection.SphericalMercator={MAX_LATITUDE:85.0511287798,project:function(t){var i=e.LatLng.DEG_TO_RAD,s=this.MAX_LATITUDE,o=Math.max(Math.min(s,t.lat),-s),n=t.lng*i,a=o*i;return a=Math.log(Math.tan(Math.PI/4+a/2)),new e.Point(n,a)},unproject:function(t){var i=e.LatLng.RAD_TO_DEG,s=t.x*i,o=(2*Math.atan(Math.exp(t.y))-Math.PI/2)*i;return new e.LatLng(o,s)}},e.Projection.LonLat={project:function(t){return new e.Point(t.lng,t.lat)},unproject:function(t){return new e.LatLng(t.y,t.x)}},e.CRS={latLngToPoint:function(t,i){var s=this.projection.project(t),e=this.scale(i);return this.transformation._transform(s,e)},pointToLatLng:function(t,i){var s=this.scale(i),e=this.transformation.untransform(t,s);return this.projection.unproject(e)},project:function(t){return this.projection.project(t)},scale:function(t){return 256*Math.pow(2,t)}},e.CRS.Simple=e.extend({},e.CRS,{projection:e.Projection.LonLat,transformation:new e.Transformation(1,0,-1,0),scale:function(t){return Math.pow(2,t)}}),e.CRS.EPSG3857=e.extend({},e.CRS,{code:"EPSG:3857",projection:e.Projection.SphericalMercator,transformation:new e.Transformation(.5/Math.PI,.5,-.5/Math.PI,.5),project:function(t){var i=this.projection.project(t),s=6378137;return i.multiplyBy(s)}}),e.CRS.EPSG900913=e.extend({},e.CRS.EPSG3857,{code:"EPSG:900913"}),e.CRS.EPSG4326=e.extend({},e.CRS,{code:"EPSG:4326",projection:e.Projection.LonLat,transformation:new e.Transformation(1/360,.5,-1/360,.5)}),e.Map=e.Class.extend({includes:e.Mixin.Events,options:{crs:e.CRS.EPSG3857,fadeAnimation:e.DomUtil.TRANSITION&&!e.Browser.android23,trackResize:!0,markerZoomAnimation:e.DomUtil.TRANSITION&&e.Browser.any3d},initialize:function(t,i){i=e.setOptions(this,i),this._initContainer(t),this._initLayout(),this.callInitHooks(),this._initEvents(),i.maxBounds&&this.setMaxBounds(i.maxBounds),i.center&&i.zoom!==s&&this.setView(e.latLng(i.center),i.zoom,!0),this._initLayers(i.layers)},setView:function(t,i){return this._resetView(e.latLng(t),this._limitZoom(i)),this},setZoom:function(t){return this.setView(this.getCenter(),t)},zoomIn:function(t){return this.setZoom(this._zoom+(t||1))},zoomOut:function(t){return this.setZoom(this._zoom-(t||1))},fitBounds:function(t){var i=this.getBoundsZoom(t);return this.setView(e.latLngBounds(t).getCenter(),i)},fitWorld:function(){var t=new e.LatLng(-60,-170),i=new e.LatLng(85,179);return this.fitBounds(new e.LatLngBounds(t,i))},panTo:function(t){return this.setView(t,this._zoom)},panBy:function(t){return this.fire("movestart"),this._rawPanBy(e.point(t)),this.fire("move"),this.fire("moveend")},setMaxBounds:function(t){if(t=e.latLngBounds(t),this.options.maxBounds=t,!t)return this._boundsMinZoom=null,this;var i=this.getBoundsZoom(t,!0);return this._boundsMinZoom=i,this._loaded&&(i>this._zoom?this.setView(t.getCenter(),i):this.panInsideBounds(t)),this},panInsideBounds:function(t){t=e.latLngBounds(t);var i=this.getBounds(),s=this.project(i.getSouthWest()),o=this.project(i.getNorthEast()),n=this.project(t.getSouthWest()),a=this.project(t.getNorthEast()),r=0,h=0;return o.ya.x&&(r=a.x-o.x),s.y>n.y&&(h=n.y-s.y),s.x=r);return m&&i?null:i?r:r-1},getSize:function(){return(!this._size||this._sizeChanged)&&(this._size=new e.Point(this._container.clientWidth,this._container.clientHeight),this._sizeChanged=!1),this._size.clone()},getPixelBounds:function(){var t=this._getTopLeftPoint();return new e.Bounds(t,t.add(this.getSize()))},getPixelOrigin:function(){return this._initialTopLeftPoint},getPanes:function(){return this._panes},getContainer:function(){return this._container},getZoomScale:function(t){var i=this.options.crs;return i.scale(t)/i.scale(this._zoom)},getScaleZoom:function(t){return this._zoom+Math.log(t)/Math.LN2},project:function(t,i){return i=i===s?this._zoom:i,this.options.crs.latLngToPoint(e.latLng(t),i)},unproject:function(t,i){return i=i===s?this._zoom:i,this.options.crs.pointToLatLng(e.point(t),i)},layerPointToLatLng:function(t){var i=e.point(t).add(this._initialTopLeftPoint);return this.unproject(i)},latLngToLayerPoint:function(t){var i=this.project(e.latLng(t))._round();return i._subtract(this._initialTopLeftPoint)},containerPointToLayerPoint:function(t){return e.point(t).subtract(this._getMapPanePos())},layerPointToContainerPoint:function(t){return e.point(t).add(this._getMapPanePos())},containerPointToLatLng:function(t){var i=this.containerPointToLayerPoint(e.point(t));return this.layerPointToLatLng(i)},latLngToContainerPoint:function(t){return this.layerPointToContainerPoint(this.latLngToLayerPoint(e.latLng(t)))},mouseEventToContainerPoint:function(t){return e.DomEvent.getMousePosition(t,this._container)},mouseEventToLayerPoint:function(t){return this.containerPointToLayerPoint(this.mouseEventToContainerPoint(t))},mouseEventToLatLng:function(t){return this.layerPointToLatLng(this.mouseEventToLayerPoint(t))},_initContainer:function(t){var i=this._container=e.DomUtil.get(t);if(i._leaflet)throw Error("Map container is already initialized.");i._leaflet=!0},_initLayout:function(){var t=this._container;e.DomUtil.addClass(t,"leaflet-container"),e.Browser.touch&&e.DomUtil.addClass(t,"leaflet-touch"),this.options.fadeAnimation&&e.DomUtil.addClass(t,"leaflet-fade-anim");var i=e.DomUtil.getStyle(t,"position");"absolute"!==i&&"relative"!==i&&"fixed"!==i&&(t.style.position="relative"),this._initPanes(),this._initControlPos&&this._initControlPos()},_initPanes:function(){var t=this._panes={};this._mapPane=t.mapPane=this._createPane("leaflet-map-pane",this._container),this._tilePane=t.tilePane=this._createPane("leaflet-tile-pane",this._mapPane),t.objectsPane=this._createPane("leaflet-objects-pane",this._mapPane),t.shadowPane=this._createPane("leaflet-shadow-pane"),t.overlayPane=this._createPane("leaflet-overlay-pane"),t.markerPane=this._createPane("leaflet-marker-pane"),t.popupPane=this._createPane("leaflet-popup-pane");var i=" leaflet-zoom-hide";this.options.markerZoomAnimation||(e.DomUtil.addClass(t.markerPane,i),e.DomUtil.addClass(t.shadowPane,i),e.DomUtil.addClass(t.popupPane,i))},_createPane:function(t,i){return e.DomUtil.create("div",t,i||this._panes.objectsPane)},_initLayers:function(t){t=t?e.Util.isArray(t)?t:[t]:[],this._layers={},this._zoomBoundLayers={},this._tileLayersNum=0;var i,s;for(i=0,s=t.length;s>i;i++)this.addLayer(t[i])},_resetView:function(t,i,s,o){var n=this._zoom!==i;o||(this.fire("movestart"),n&&this.fire("zoomstart")),this._zoom=i,this._initialTopLeftPoint=this._getNewTopLeftPoint(t),s?this._initialTopLeftPoint._add(this._getMapPanePos()):e.DomUtil.setPosition(this._mapPane,new e.Point(0,0)),this._tileLayersToLoad=this._tileLayersNum;var a=!this._loaded;this._loaded=!0,this.fire("viewreset",{hard:!s}),this.fire("move"),(n||o)&&this.fire("zoomend"),this.fire("moveend",{hard:!s}),a&&this.fire("load")},_rawPanBy:function(t){e.DomUtil.setPosition(this._mapPane,this._getMapPanePos().subtract(t))},_updateZoomLevels:function(){var t,i=1/0,e=-1/0;for(t in this._zoomBoundLayers)if(this._zoomBoundLayers.hasOwnProperty(t)){var o=this._zoomBoundLayers[t];isNaN(o.options.minZoom)||(i=Math.min(i,o.options.minZoom)),isNaN(o.options.maxZoom)||(e=Math.max(e,o.options.maxZoom))}t===s?this._layersMaxZoom=this._layersMinZoom=s:(this._layersMaxZoom=e,this._layersMinZoom=i)},_initEvents:function(){if(e.DomEvent){e.DomEvent.on(this._container,"click",this._onMouseClick,this);var i,s,o=["dblclick","mousedown","mouseup","mouseenter","mouseleave","mousemove","contextmenu"];for(i=0,s=o.length;s>i;i++)e.DomEvent.on(this._container,o[i],this._fireMouseEvent,this);this.options.trackResize&&e.DomEvent.on(t,"resize",this._onResize,this)}},_onResize:function(){e.Util.cancelAnimFrame(this._resizeRequest),this._resizeRequest=e.Util.requestAnimFrame(this.invalidateSize,this,!1,this._container)},_onMouseClick:function(t){!this._loaded||this.dragging&&this.dragging.moved()||(this.fire("preclick"),this._fireMouseEvent(t))},_fireMouseEvent:function(t){if(this._loaded){var i=t.type;if(i="mouseenter"===i?"mouseover":"mouseleave"===i?"mouseout":i,this.hasEventListeners(i)){"contextmenu"===i&&e.DomEvent.preventDefault(t);var s=this.mouseEventToContainerPoint(t),o=this.containerPointToLayerPoint(s),n=this.layerPointToLatLng(o);this.fire(i,{latlng:n,layerPoint:o,containerPoint:s,originalEvent:t})}}},_onTileLayerLoad:function(){this._tileLayersToLoad--,this._tileLayersNum&&!this._tileLayersToLoad&&this._tileBg&&(clearTimeout(this._clearTileBgTimer),this._clearTileBgTimer=setTimeout(e.bind(this._clearTileBg,this),500))},whenReady:function(t,i){return this._loaded?t.call(i||this,this):this.on("load",t,i),this},_getMapPanePos:function(){return e.DomUtil.getPosition(this._mapPane)},_getTopLeftPoint:function(){if(!this._loaded)throw Error("Set map center and zoom first.");return this._initialTopLeftPoint.subtract(this._getMapPanePos())},_getNewTopLeftPoint:function(t,i){var s=this.getSize()._divideBy(2);return this.project(t,i)._subtract(s)._round()},_latLngToNewLayerPoint:function(t,i,s){var e=this._getNewTopLeftPoint(s,i).add(this._getMapPanePos());return this.project(t,i)._subtract(e)},_getCenterLayerPoint:function(){return this.containerPointToLayerPoint(this.getSize()._divideBy(2))},_getCenterOffset:function(t){return this.latLngToLayerPoint(t).subtract(this._getCenterLayerPoint())},_limitZoom:function(t){var i=this.getMinZoom(),s=this.getMaxZoom();return Math.max(i,Math.min(s,t))}}),e.map=function(t,i){return new e.Map(t,i)},e.Projection.Mercator={MAX_LATITUDE:85.0840591556,R_MINOR:6356752.3142,R_MAJOR:6378137,project:function(t){var i=e.LatLng.DEG_TO_RAD,s=this.MAX_LATITUDE,o=Math.max(Math.min(s,t.lat),-s),n=this.R_MAJOR,a=this.R_MINOR,r=t.lng*i*n,h=o*i,l=a/n,c=Math.sqrt(1-l*l),m=c*Math.sin(h);m=Math.pow((1-m)/(1+m),.5*c);var u=Math.tan(.5*(.5*Math.PI-h))/m;return h=-a*Math.log(u),new e.Point(r,h)},unproject:function(t){for(var i,s=e.LatLng.RAD_TO_DEG,o=this.R_MAJOR,n=this.R_MINOR,a=t.x*s/o,r=n/o,h=Math.sqrt(1-r*r),l=Math.exp(-t.y/n),c=Math.PI/2-2*Math.atan(l),m=15,u=1e-7,d=m,p=.1;Math.abs(p)>u&&--d>0;)i=h*Math.sin(c),p=Math.PI/2-2*Math.atan(l*Math.pow((1-i)/(1+i),.5*h))-c,c+=p;return new e.LatLng(c*s,a)}},e.CRS.EPSG3395=e.extend({},e.CRS,{code:"EPSG:3395",projection:e.Projection.Mercator,transformation:function(){var t=e.Projection.Mercator,i=t.R_MAJOR,s=t.R_MINOR;return new e.Transformation(.5/(Math.PI*i),.5,-.5/(Math.PI*s),.5)}()}),e.TileLayer=e.Class.extend({includes:e.Mixin.Events,options:{minZoom:0,maxZoom:18,tileSize:256,subdomains:"abc",errorTileUrl:"",attribution:"",zoomOffset:0,opacity:1,unloadInvisibleTiles:e.Browser.mobile,updateWhenIdle:e.Browser.mobile},initialize:function(t,i){i=e.setOptions(this,i),i.detectRetina&&e.Browser.retina&&i.maxZoom>0&&(i.tileSize=Math.floor(i.tileSize/2),i.zoomOffset++,i.minZoom>0&&i.minZoom--,this.options.maxZoom--),this._url=t;var s=this.options.subdomains;"string"==typeof s&&(this.options.subdomains=s.split(""))},onAdd:function(t){this._map=t,this._initContainer(),this._createTileProto(),t.on({viewreset:this._resetCallback,moveend:this._update},this),this.options.updateWhenIdle||(this._limitedUpdate=e.Util.limitExecByInterval(this._update,150,this),t.on("move",this._limitedUpdate,this)),this._reset(),this._update()},addTo:function(t){return t.addLayer(this),this},onRemove:function(t){this._container.parentNode.removeChild(this._container),t.off({viewreset:this._resetCallback,moveend:this._update},this),this.options.updateWhenIdle||t.off("move",this._limitedUpdate,this),this._container=null,this._map=null},bringToFront:function(){var t=this._map._panes.tilePane;return this._container&&(t.appendChild(this._container),this._setAutoZIndex(t,Math.max)),this},bringToBack:function(){var t=this._map._panes.tilePane;return this._container&&(t.insertBefore(this._container,t.firstChild),this._setAutoZIndex(t,Math.min)),this},getAttribution:function(){return this.options.attribution},setOpacity:function(t){return this.options.opacity=t,this._map&&this._updateOpacity(),this},setZIndex:function(t){return this.options.zIndex=t,this._updateZIndex(),this},setUrl:function(t,i){return this._url=t,i||this.redraw(),this},redraw:function(){return this._map&&(this._map._panes.tilePane.empty=!1,this._reset(!0),this._update()),this},_updateZIndex:function(){this._container&&this.options.zIndex!==s&&(this._container.style.zIndex=this.options.zIndex)},_setAutoZIndex:function(t,i){var s,e,o,n=t.children,a=-i(1/0,-1/0);for(e=0,o=n.length;o>e;e++)n[e]!==this._container&&(s=parseInt(n[e].style.zIndex,10),isNaN(s)||(a=i(a,s)));this.options.zIndex=this._container.style.zIndex=(isFinite(a)?a:0)+i(1,-1)},_updateOpacity:function(){e.DomUtil.setOpacity(this._container,this.options.opacity);var t,i=this._tiles;if(e.Browser.webkit)for(t in i)i.hasOwnProperty(t)&&(i[t].style.webkitTransform+=" translate(0,0)")},_initContainer:function(){var t=this._map._panes.tilePane;(!this._container||t.empty)&&(this._container=e.DomUtil.create("div","leaflet-layer"),this._updateZIndex(),t.appendChild(this._container),1>this.options.opacity&&this._updateOpacity())},_resetCallback:function(t){this._reset(t.hard)},_reset:function(t){var i=this._tiles;for(var s in i)i.hasOwnProperty(s)&&this.fire("tileunload",{tile:i[s]});this._tiles={},this._tilesToLoad=0,this.options.reuseTiles&&(this._unusedTiles=[]),t&&this._container&&(this._container.innerHTML=""),this._initContainer()},_update:function(){if(this._map){var t=this._map.getPixelBounds(),i=this._map.getZoom(),s=this.options.tileSize;if(!(i>this.options.maxZoom||this.options.minZoom>i)){var o=new e.Point(Math.floor(t.min.x/s),Math.floor(t.min.y/s)),n=new e.Point(Math.floor(t.max.x/s),Math.floor(t.max.y/s)),a=new e.Bounds(o,n);this._addTilesFromCenterOut(a),(this.options.unloadInvisibleTiles||this.options.reuseTiles)&&this._removeOtherTiles(a)}}},_addTilesFromCenterOut:function(t){var s,o,n,a=[],r=t.getCenter();for(s=t.min.y;t.max.y>=s;s++)for(o=t.min.x;t.max.x>=o;o++)n=new e.Point(o,s),this._tileShouldBeLoaded(n)&&a.push(n);var h=a.length;if(0!==h){a.sort(function(t,i){return t.distanceTo(r)-i.distanceTo(r)});var l=i.createDocumentFragment();for(this._tilesToLoad||this.fire("loading"),this._tilesToLoad+=h,o=0;h>o;o++)this._addTile(a[o],l);this._container.appendChild(l)}},_tileShouldBeLoaded:function(t){ -if(t.x+":"+t.y in this._tiles)return!1;if(!this.options.continuousWorld){var i=this._getWrapTileNum();if(this.options.noWrap&&(0>t.x||t.x>=i)||0>t.y||t.y>=i)return!1}return!0},_removeOtherTiles:function(t){var i,s,e,o;for(o in this._tiles)this._tiles.hasOwnProperty(o)&&(i=o.split(":"),s=parseInt(i[0],10),e=parseInt(i[1],10),(t.min.x>s||s>t.max.x||t.min.y>e||e>t.max.y)&&this._removeTile(o))},_removeTile:function(t){var i=this._tiles[t];this.fire("tileunload",{tile:i,url:i.src}),this.options.reuseTiles?(e.DomUtil.removeClass(i,"leaflet-tile-loaded"),this._unusedTiles.push(i)):i.parentNode===this._container&&this._container.removeChild(i),e.Browser.android||(i.src=e.Util.emptyImageUrl),delete this._tiles[t]},_addTile:function(t,i){var s=this._getTilePos(t),o=this._getTile();e.DomUtil.setPosition(o,s,e.Browser.chrome||e.Browser.android23),this._tiles[t.x+":"+t.y]=o,this._loadTile(o,t),o.parentNode!==this._container&&i.appendChild(o)},_getZoomForUrl:function(){var t=this.options,i=this._map.getZoom();return t.zoomReverse&&(i=t.maxZoom-i),i+t.zoomOffset},_getTilePos:function(t){var i=this._map.getPixelOrigin(),s=this.options.tileSize;return t.multiplyBy(s).subtract(i)},getTileUrl:function(t){return this._adjustTilePoint(t),e.Util.template(this._url,e.extend({s:this._getSubdomain(t),z:this._getZoomForUrl(),x:t.x,y:t.y},this.options))},_getWrapTileNum:function(){return Math.pow(2,this._getZoomForUrl())},_adjustTilePoint:function(t){var i=this._getWrapTileNum();this.options.continuousWorld||this.options.noWrap||(t.x=(t.x%i+i)%i),this.options.tms&&(t.y=i-t.y-1)},_getSubdomain:function(t){var i=(t.x+t.y)%this.options.subdomains.length;return this.options.subdomains[i]},_createTileProto:function(){var t=this._tileImg=e.DomUtil.create("img","leaflet-tile");t.style.width=t.style.height=this.options.tileSize+"px",t.galleryimg="no"},_getTile:function(){if(this.options.reuseTiles&&this._unusedTiles.length>0){var t=this._unusedTiles.pop();return this._resetTile(t),t}return this._createTile()},_resetTile:function(){},_createTile:function(){var t=this._tileImg.cloneNode(!1);return t.onselectstart=t.onmousemove=e.Util.falseFn,t},_loadTile:function(t,i){t._layer=this,t.onload=this._tileOnLoad,t.onerror=this._tileOnError,t.src=this.getTileUrl(i)},_tileLoaded:function(){this._tilesToLoad--,this._tilesToLoad||this.fire("load")},_tileOnLoad:function(){var t=this._layer;this.src!==e.Util.emptyImageUrl&&(e.DomUtil.addClass(this,"leaflet-tile-loaded"),t.fire("tileload",{tile:this,url:this.src})),t._tileLoaded()},_tileOnError:function(){var t=this._layer;t.fire("tileerror",{tile:this,url:this.src});var i=t.options.errorTileUrl;i&&(this.src=i),t._tileLoaded()}}),e.tileLayer=function(t,i){return new e.TileLayer(t,i)},e.TileLayer.WMS=e.TileLayer.extend({defaultWmsParams:{service:"WMS",request:"GetMap",version:"1.1.1",layers:"",styles:"",format:"image/jpeg",transparent:!1},initialize:function(t,i){this._url=t;var s=e.extend({},this.defaultWmsParams);s.width=s.height=i.detectRetina&&e.Browser.retina?2*this.options.tileSize:this.options.tileSize;for(var o in i)this.options.hasOwnProperty(o)||(s[o]=i[o]);this.wmsParams=s,e.setOptions(this,i)},onAdd:function(t){var i=parseFloat(this.wmsParams.version)>=1.3?"crs":"srs";this.wmsParams[i]=t.options.crs.code,e.TileLayer.prototype.onAdd.call(this,t)},getTileUrl:function(t,i){this._adjustTilePoint(t);var s=this._map,o=s.options.crs,n=this.options.tileSize,a=t.multiplyBy(n),r=a.add(new e.Point(n,n)),h=o.project(s.unproject(a,i)),l=o.project(s.unproject(r,i)),c=[h.x,l.y,l.x,h.y].join(","),m=e.Util.template(this._url,{s:this._getSubdomain(t)});return m+e.Util.getParamString(this.wmsParams,m)+"&bbox="+c},setParams:function(t,i){return e.extend(this.wmsParams,t),i||this.redraw(),this}}),e.tileLayer.wms=function(t,i){return new e.TileLayer.WMS(t,i)},e.TileLayer.Canvas=e.TileLayer.extend({options:{async:!1},initialize:function(t){e.setOptions(this,t)},redraw:function(){var t=this._tiles;for(var i in t)t.hasOwnProperty(i)&&this._redrawTile(t[i])},_redrawTile:function(t){this.drawTile(t,t._tilePoint,this._map._zoom)},_createTileProto:function(){var t=this._canvasProto=e.DomUtil.create("canvas","leaflet-tile");t.width=t.height=this.options.tileSize},_createTile:function(){var t=this._canvasProto.cloneNode(!1);return t.onselectstart=t.onmousemove=e.Util.falseFn,t},_loadTile:function(t,i){t._layer=this,t._tilePoint=i,this._redrawTile(t),this.options.async||this.tileDrawn(t)},drawTile:function(){},tileDrawn:function(t){this._tileOnLoad.call(t)}}),e.tileLayer.canvas=function(t){return new e.TileLayer.Canvas(t)},e.ImageOverlay=e.Class.extend({includes:e.Mixin.Events,options:{opacity:1},initialize:function(t,i,s){this._url=t,this._bounds=e.latLngBounds(i),e.setOptions(this,s)},onAdd:function(t){this._map=t,this._image||this._initImage(),t._panes.overlayPane.appendChild(this._image),t.on("viewreset",this._reset,this),t.options.zoomAnimation&&e.Browser.any3d&&t.on("zoomanim",this._animateZoom,this),this._reset()},onRemove:function(t){t.getPanes().overlayPane.removeChild(this._image),t.off("viewreset",this._reset,this),t.options.zoomAnimation&&t.off("zoomanim",this._animateZoom,this)},addTo:function(t){return t.addLayer(this),this},setOpacity:function(t){return this.options.opacity=t,this._updateOpacity(),this},bringToFront:function(){return this._image&&this._map._panes.overlayPane.appendChild(this._image),this},bringToBack:function(){var t=this._map._panes.overlayPane;return this._image&&t.insertBefore(this._image,t.firstChild),this},_initImage:function(){this._image=e.DomUtil.create("img","leaflet-image-layer"),this._map.options.zoomAnimation&&e.Browser.any3d?e.DomUtil.addClass(this._image,"leaflet-zoom-animated"):e.DomUtil.addClass(this._image,"leaflet-zoom-hide"),this._updateOpacity(),e.extend(this._image,{galleryimg:"no",onselectstart:e.Util.falseFn,onmousemove:e.Util.falseFn,onload:e.bind(this._onImageLoad,this),src:this._url})},_animateZoom:function(t){var i=this._map,s=this._image,o=i.getZoomScale(t.zoom),n=this._bounds.getNorthWest(),a=this._bounds.getSouthEast(),r=i._latLngToNewLayerPoint(n,t.zoom,t.center),h=i._latLngToNewLayerPoint(a,t.zoom,t.center)._subtract(r),l=r._add(h._multiplyBy(.5*(1-1/o)));s.style[e.DomUtil.TRANSFORM]=e.DomUtil.getTranslateString(l)+" scale("+o+") "},_reset:function(){var t=this._image,i=this._map.latLngToLayerPoint(this._bounds.getNorthWest()),s=this._map.latLngToLayerPoint(this._bounds.getSouthEast())._subtract(i);e.DomUtil.setPosition(t,i),t.style.width=s.x+"px",t.style.height=s.y+"px"},_onImageLoad:function(){this.fire("load")},_updateOpacity:function(){e.DomUtil.setOpacity(this._image,this.options.opacity)}}),e.imageOverlay=function(t,i,s){return new e.ImageOverlay(t,i,s)},e.Icon=e.Class.extend({options:{className:""},initialize:function(t){e.setOptions(this,t)},createIcon:function(){return this._createIcon("icon")},createShadow:function(){return this._createIcon("shadow")},_createIcon:function(t){var i=this._getIconUrl(t);if(!i){if("icon"===t)throw Error("iconUrl not set in Icon options (see the docs).");return null}var s=this._createImg(i);return this._setIconStyles(s,t),s},_setIconStyles:function(t,i){var s,o=this.options,n=e.point(o[i+"Size"]);s="shadow"===i?e.point(o.shadowAnchor||o.iconAnchor):e.point(o.iconAnchor),!s&&n&&(s=n.divideBy(2,!0)),t.className="leaflet-marker-"+i+" "+o.className,s&&(t.style.marginLeft=-s.x+"px",t.style.marginTop=-s.y+"px"),n&&(t.style.width=n.x+"px",t.style.height=n.y+"px")},_createImg:function(t){var s;return e.Browser.ie6?(s=i.createElement("div"),s.style.filter='progid:DXImageTransform.Microsoft.AlphaImageLoader(src="'+t+'")'):(s=i.createElement("img"),s.src=t),s},_getIconUrl:function(t){return e.Browser.retina&&this.options[t+"RetinaUrl"]?this.options[t+"RetinaUrl"]:this.options[t+"Url"]}}),e.icon=function(t){return new e.Icon(t)},e.Icon.Default=e.Icon.extend({options:{iconSize:new e.Point(25,41),iconAnchor:new e.Point(12,41),popupAnchor:new e.Point(1,-34),shadowSize:new e.Point(41,41)},_getIconUrl:function(t){var i=t+"Url";if(this.options[i])return this.options[i];e.Browser.retina&&"icon"===t&&(t+="@2x");var s=e.Icon.Default.imagePath;if(!s)throw Error("Couldn't autodetect L.Icon.Default.imagePath, set it manually.");return"marker-"+t+".png"}}),e.Icon.Default.imagePath=function(){var t,s,e,o,n=i.getElementsByTagName("script"),a=/\/?leaflet[\-\._]?([\w\-\._]*)\.js\??/;for(t=0,s=n.length;s>t;t++)if(e=n[t].src,o=e.match(a))return e.split(a)[0]+""}(),e.Marker=e.Class.extend({includes:e.Mixin.Events,options:{icon:new e.Icon.Default,title:"",clickable:!0,draggable:!1,zIndexOffset:0,opacity:1,riseOnHover:!1,riseOffset:250},initialize:function(t,i){e.setOptions(this,i),this._latlng=e.latLng(t)},onAdd:function(t){this._map=t,t.on("viewreset",this.update,this),this._initIcon(),this.update(),t.options.zoomAnimation&&t.options.markerZoomAnimation&&t.on("zoomanim",this._animateZoom,this)},addTo:function(t){return t.addLayer(this),this},onRemove:function(t){this._removeIcon(),this.fire("remove"),t.off({viewreset:this.update,zoomanim:this._animateZoom},this),this._map=null},getLatLng:function(){return this._latlng},setLatLng:function(t){return this._latlng=e.latLng(t),this.update(),this.fire("move",{latlng:this._latlng})},setZIndexOffset:function(t){return this.options.zIndexOffset=t,this.update(),this},setIcon:function(t){return this._map&&this._removeIcon(),this.options.icon=t,this._map&&(this._initIcon(),this.update()),this},update:function(){if(this._icon){var t=this._map.latLngToLayerPoint(this._latlng).round();this._setPos(t)}return this},_initIcon:function(){var t=this.options,i=this._map,s=i.options.zoomAnimation&&i.options.markerZoomAnimation,o=s?"leaflet-zoom-animated":"leaflet-zoom-hide",n=!1;this._icon||(this._icon=t.icon.createIcon(),t.title&&(this._icon.title=t.title),this._initInteraction(),n=1>this.options.opacity,e.DomUtil.addClass(this._icon,o),t.riseOnHover&&e.DomEvent.on(this._icon,"mouseover",this._bringToFront,this).on(this._icon,"mouseout",this._resetZIndex,this)),this._shadow||(this._shadow=t.icon.createShadow(),this._shadow&&(e.DomUtil.addClass(this._shadow,o),n=1>this.options.opacity)),n&&this._updateOpacity();var a=this._map._panes;a.markerPane.appendChild(this._icon),this._shadow&&a.shadowPane.appendChild(this._shadow)},_removeIcon:function(){var t=this._map._panes;this.options.riseOnHover&&e.DomEvent.off(this._icon,"mouseover",this._bringToFront).off(this._icon,"mouseout",this._resetZIndex),t.markerPane.removeChild(this._icon),this._shadow&&t.shadowPane.removeChild(this._shadow),this._icon=this._shadow=null},_setPos:function(t){e.DomUtil.setPosition(this._icon,t),this._shadow&&e.DomUtil.setPosition(this._shadow,t),this._zIndex=t.y+this.options.zIndexOffset,this._resetZIndex()},_updateZIndex:function(t){this._icon.style.zIndex=this._zIndex+t},_animateZoom:function(t){var i=this._map._latLngToNewLayerPoint(this._latlng,t.zoom,t.center);this._setPos(i)},_initInteraction:function(){if(this.options.clickable){var t=this._icon,i=["dblclick","mousedown","mouseover","mouseout","contextmenu"];e.DomUtil.addClass(t,"leaflet-clickable"),e.DomEvent.on(t,"click",this._onMouseClick,this);for(var s=0;i.length>s;s++)e.DomEvent.on(t,i[s],this._fireMouseEvent,this);e.Handler.MarkerDrag&&(this.dragging=new e.Handler.MarkerDrag(this),this.options.draggable&&this.dragging.enable())}},_onMouseClick:function(t){var i=this.dragging&&this.dragging.moved();(this.hasEventListeners(t.type)||i)&&e.DomEvent.stopPropagation(t),i||(this.dragging&&this.dragging._enabled||!this._map.dragging||!this._map.dragging.moved())&&this.fire(t.type,{originalEvent:t})},_fireMouseEvent:function(t){this.fire(t.type,{originalEvent:t}),"contextmenu"===t.type&&this.hasEventListeners(t.type)&&e.DomEvent.preventDefault(t),"mousedown"!==t.type&&e.DomEvent.stopPropagation(t)},setOpacity:function(t){this.options.opacity=t,this._map&&this._updateOpacity()},_updateOpacity:function(){e.DomUtil.setOpacity(this._icon,this.options.opacity),this._shadow&&e.DomUtil.setOpacity(this._shadow,this.options.opacity)},_bringToFront:function(){this._updateZIndex(this.options.riseOffset)},_resetZIndex:function(){this._updateZIndex(0)}}),e.marker=function(t,i){return new e.Marker(t,i)},e.DivIcon=e.Icon.extend({options:{iconSize:new e.Point(12,12),className:"leaflet-div-icon"},createIcon:function(){var t=i.createElement("div"),s=this.options;return s.html&&(t.innerHTML=s.html),s.bgPos&&(t.style.backgroundPosition=-s.bgPos.x+"px "+-s.bgPos.y+"px"),this._setIconStyles(t,"icon"),t},createShadow:function(){return null}}),e.divIcon=function(t){return new e.DivIcon(t)},e.Map.mergeOptions({closePopupOnClick:!0}),e.Popup=e.Class.extend({includes:e.Mixin.Events,options:{minWidth:50,maxWidth:300,maxHeight:null,autoPan:!0,closeButton:!0,offset:new e.Point(0,6),autoPanPadding:new e.Point(5,5),className:"",zoomAnimation:!0},initialize:function(t,i){e.setOptions(this,t),this._source=i,this._animated=e.Browser.any3d&&this.options.zoomAnimation},onAdd:function(t){this._map=t,this._container||this._initLayout(),this._updateContent();var i=t.options.fadeAnimation;i&&e.DomUtil.setOpacity(this._container,0),t._panes.popupPane.appendChild(this._container),t.on("viewreset",this._updatePosition,this),this._animated&&t.on("zoomanim",this._zoomAnimation,this),t.options.closePopupOnClick&&t.on("preclick",this._close,this),this._update(),i&&e.DomUtil.setOpacity(this._container,1)},addTo:function(t){return t.addLayer(this),this},openOn:function(t){return t.openPopup(this),this},onRemove:function(t){t._panes.popupPane.removeChild(this._container),e.Util.falseFn(this._container.offsetWidth),t.off({viewreset:this._updatePosition,preclick:this._close,zoomanim:this._zoomAnimation},this),t.options.fadeAnimation&&e.DomUtil.setOpacity(this._container,0),this._map=null},setLatLng:function(t){return this._latlng=e.latLng(t),this._update(),this},setContent:function(t){return this._content=t,this._update(),this},_close:function(){var t=this._map;t&&(t._popup=null,t.removeLayer(this).fire("popupclose",{popup:this}))},_initLayout:function(){var t,i="leaflet-popup",s=i+" "+this.options.className+" leaflet-zoom-"+(this._animated?"animated":"hide"),o=this._container=e.DomUtil.create("div",s);this.options.closeButton&&(t=this._closeButton=e.DomUtil.create("a",i+"-close-button",o),t.href="#close",t.innerHTML="×",e.DomEvent.on(t,"click",this._onCloseButtonClick,this));var n=this._wrapper=e.DomUtil.create("div",i+"-content-wrapper",o);e.DomEvent.disableClickPropagation(n),this._contentNode=e.DomUtil.create("div",i+"-content",n),e.DomEvent.on(this._contentNode,"mousewheel",e.DomEvent.stopPropagation),this._tipContainer=e.DomUtil.create("div",i+"-tip-container",o),this._tip=e.DomUtil.create("div",i+"-tip",this._tipContainer)},_update:function(){this._map&&(this._container.style.visibility="hidden",this._updateContent(),this._updateLayout(),this._updatePosition(),this._container.style.visibility="",this._adjustPan())},_updateContent:function(){if(this._content){if("string"==typeof this._content)this._contentNode.innerHTML=this._content;else{for(;this._contentNode.hasChildNodes();)this._contentNode.removeChild(this._contentNode.firstChild);this._contentNode.appendChild(this._content)}this.fire("contentupdate")}},_updateLayout:function(){var t=this._contentNode,i=t.style;i.width="",i.whiteSpace="nowrap";var s=t.offsetWidth;s=Math.min(s,this.options.maxWidth),s=Math.max(s,this.options.minWidth),i.width=s+1+"px",i.whiteSpace="",i.height="";var o=t.offsetHeight,n=this.options.maxHeight,a="leaflet-popup-scrolled";n&&o>n?(i.height=n+"px",e.DomUtil.addClass(t,a)):e.DomUtil.removeClass(t,a),this._containerWidth=this._container.offsetWidth},_updatePosition:function(){if(this._map){var t=this._map.latLngToLayerPoint(this._latlng),i=this._animated,s=this.options.offset;i&&e.DomUtil.setPosition(this._container,t),this._containerBottom=-s.y-(i?0:t.y),this._containerLeft=-Math.round(this._containerWidth/2)+s.x+(i?0:t.x),this._container.style.bottom=this._containerBottom+"px",this._container.style.left=this._containerLeft+"px"}},_zoomAnimation:function(t){var i=this._map._latLngToNewLayerPoint(this._latlng,t.zoom,t.center);e.DomUtil.setPosition(this._container,i)},_adjustPan:function(){if(this.options.autoPan){var t=this._map,i=this._container.offsetHeight,s=this._containerWidth,o=new e.Point(this._containerLeft,-i-this._containerBottom);this._animated&&o._add(e.DomUtil.getPosition(this._container));var n=t.layerPointToContainerPoint(o),a=this.options.autoPanPadding,r=t.getSize(),h=0,l=0;0>n.x&&(h=n.x-a.x),n.x+s>r.x&&(h=n.x+s-r.x+a.x),0>n.y&&(l=n.y-a.y),n.y+i>r.y&&(l=n.y+i-r.y+a.y),(h||l)&&t.panBy(new e.Point(h,l))}},_onCloseButtonClick:function(t){this._close(),e.DomEvent.stop(t)}}),e.popup=function(t,i){return new e.Popup(t,i)},e.Marker.include({openPopup:function(){return this._popup&&this._map&&(this._popup.setLatLng(this._latlng),this._map.openPopup(this._popup)),this},closePopup:function(){return this._popup&&this._popup._close(),this},bindPopup:function(t,i){var s=e.point(this.options.icon.options.popupAnchor)||new e.Point(0,0);return s=s.add(e.Popup.prototype.options.offset),i&&i.offset&&(s=s.add(i.offset)),i=e.extend({offset:s},i),this._popup||this.on("click",this.openPopup,this).on("remove",this.closePopup,this).on("move",this._movePopup,this),this._popup=new e.Popup(i,this).setContent(t),this},unbindPopup:function(){return this._popup&&(this._popup=null,this.off("click",this.openPopup).off("remove",this.closePopup).off("move",this._movePopup)),this},_movePopup:function(t){this._popup.setLatLng(t.latlng)}}),e.Map.include({openPopup:function(t){return this.closePopup(),this._popup=t,this.addLayer(t).fire("popupopen",{popup:this._popup})},closePopup:function(){return this._popup&&this._popup._close(),this}}),e.LayerGroup=e.Class.extend({initialize:function(t){this._layers={};var i,s;if(t)for(i=0,s=t.length;s>i;i++)this.addLayer(t[i])},addLayer:function(t){var i=e.stamp(t);return this._layers[i]=t,this._map&&this._map.addLayer(t),this},removeLayer:function(t){var i=e.stamp(t);return delete this._layers[i],this._map&&this._map.removeLayer(t),this},clearLayers:function(){return this.eachLayer(this.removeLayer,this),this},invoke:function(t){var i,s,e=Array.prototype.slice.call(arguments,1);for(i in this._layers)this._layers.hasOwnProperty(i)&&(s=this._layers[i],s[t]&&s[t].apply(s,e));return this},onAdd:function(t){this._map=t,this.eachLayer(t.addLayer,t)},onRemove:function(t){this.eachLayer(t.removeLayer,t),this._map=null},addTo:function(t){return t.addLayer(this),this},eachLayer:function(t,i){for(var s in this._layers)this._layers.hasOwnProperty(s)&&t.call(i,this._layers[s])},setZIndex:function(t){return this.invoke("setZIndex",t)}}),e.layerGroup=function(t){return new e.LayerGroup(t)},e.FeatureGroup=e.LayerGroup.extend({includes:e.Mixin.Events,statics:{EVENTS:"click dblclick mouseover mouseout mousemove contextmenu"},addLayer:function(t){return this._layers[e.stamp(t)]?this:(t.on(e.FeatureGroup.EVENTS,this._propagateEvent,this),e.LayerGroup.prototype.addLayer.call(this,t),this._popupContent&&t.bindPopup&&t.bindPopup(this._popupContent,this._popupOptions),this.fire("layeradd",{layer:t}))},removeLayer:function(t){return t.off(e.FeatureGroup.EVENTS,this._propagateEvent,this),e.LayerGroup.prototype.removeLayer.call(this,t),this._popupContent&&this.invoke("unbindPopup"),this.fire("layerremove",{layer:t})},bindPopup:function(t,i){return this._popupContent=t,this._popupOptions=i,this.invoke("bindPopup",t,i)},setStyle:function(t){return this.invoke("setStyle",t)},bringToFront:function(){return this.invoke("bringToFront")},bringToBack:function(){return this.invoke("bringToBack")},getBounds:function(){var t=new e.LatLngBounds;return this.eachLayer(function(i){t.extend(i instanceof e.Marker?i.getLatLng():i.getBounds())}),t},_propagateEvent:function(t){t.layer=t.target,t.target=this,this.fire(t.type,t)}}),e.featureGroup=function(t){return new e.FeatureGroup(t)},e.Path=e.Class.extend({includes:[e.Mixin.Events],statics:{CLIP_PADDING:e.Browser.mobile?Math.max(0,Math.min(.5,(1280/Math.max(t.innerWidth,t.innerHeight)-1)/2)):.5},options:{stroke:!0,color:"#0033ff",dashArray:null,weight:5,opacity:.5,fill:!1,fillColor:null,fillOpacity:.2,clickable:!0},initialize:function(t){e.setOptions(this,t)},onAdd:function(t){this._map=t,this._container||(this._initElements(),this._initEvents()),this.projectLatlngs(),this._updatePath(),this._container&&this._map._pathRoot.appendChild(this._container),this.fire("add"),t.on({viewreset:this.projectLatlngs,moveend:this._updatePath},this)},addTo:function(t){return t.addLayer(this),this},onRemove:function(t){t._pathRoot.removeChild(this._container),this.fire("remove"),this._map=null,e.Browser.vml&&(this._container=null,this._stroke=null,this._fill=null),t.off({viewreset:this.projectLatlngs,moveend:this._updatePath},this)},projectLatlngs:function(){},setStyle:function(t){return e.setOptions(this,t),this._container&&this._updateStyle(),this},redraw:function(){return this._map&&(this.projectLatlngs(),this._updatePath()),this}}),e.Map.include({_updatePathViewport:function(){var t=e.Path.CLIP_PADDING,i=this.getSize(),s=e.DomUtil.getPosition(this._mapPane),o=s.multiplyBy(-1)._subtract(i.multiplyBy(t)._round()),n=o.add(i.multiplyBy(1+2*t)._round());this._pathViewport=new e.Bounds(o,n)}}),e.Path.SVG_NS="http://www.w3.org/2000/svg",e.Browser.svg=!(!i.createElementNS||!i.createElementNS(e.Path.SVG_NS,"svg").createSVGRect),e.Path=e.Path.extend({statics:{SVG:e.Browser.svg},bringToFront:function(){var t=this._map._pathRoot,i=this._container;return i&&t.lastChild!==i&&t.appendChild(i),this},bringToBack:function(){var t=this._map._pathRoot,i=this._container,s=t.firstChild;return i&&s!==i&&t.insertBefore(i,s),this},getPathString:function(){},_createElement:function(t){return i.createElementNS(e.Path.SVG_NS,t)},_initElements:function(){this._map._initPathRoot(),this._initPath(),this._initStyle()},_initPath:function(){this._container=this._createElement("g"),this._path=this._createElement("path"),this._container.appendChild(this._path)},_initStyle:function(){this.options.stroke&&(this._path.setAttribute("stroke-linejoin","round"),this._path.setAttribute("stroke-linecap","round")),this.options.fill&&this._path.setAttribute("fill-rule","evenodd"),this._updateStyle()},_updateStyle:function(){this.options.stroke?(this._path.setAttribute("stroke",this.options.color),this._path.setAttribute("stroke-opacity",this.options.opacity),this._path.setAttribute("stroke-width",this.options.weight),this.options.dashArray?this._path.setAttribute("stroke-dasharray",this.options.dashArray):this._path.removeAttribute("stroke-dasharray")):this._path.setAttribute("stroke","none"),this.options.fill?(this._path.setAttribute("fill",this.options.fillColor||this.options.color),this._path.setAttribute("fill-opacity",this.options.fillOpacity)):this._path.setAttribute("fill","none")},_updatePath:function(){var t=this.getPathString();t||(t="M0 0"),this._path.setAttribute("d",t)},_initEvents:function(){if(this.options.clickable){(e.Browser.svg||!e.Browser.vml)&&this._path.setAttribute("class","leaflet-clickable"),e.DomEvent.on(this._container,"click",this._onMouseClick,this);for(var t=["dblclick","mousedown","mouseover","mouseout","mousemove","contextmenu"],i=0;t.length>i;i++)e.DomEvent.on(this._container,t[i],this._fireMouseEvent,this)}},_onMouseClick:function(t){this._map.dragging&&this._map.dragging.moved()||this._fireMouseEvent(t)},_fireMouseEvent:function(t){if(this.hasEventListeners(t.type)){var i=this._map,s=i.mouseEventToContainerPoint(t),o=i.containerPointToLayerPoint(s),n=i.layerPointToLatLng(o);this.fire(t.type,{latlng:n,layerPoint:o,containerPoint:s,originalEvent:t}),"contextmenu"===t.type&&e.DomEvent.preventDefault(t),"mousemove"!==t.type&&e.DomEvent.stopPropagation(t)}}}),e.Map.include({_initPathRoot:function(){this._pathRoot||(this._pathRoot=e.Path.prototype._createElement("svg"),this._panes.overlayPane.appendChild(this._pathRoot),this.options.zoomAnimation&&e.Browser.any3d?(this._pathRoot.setAttribute("class"," leaflet-zoom-animated"),this.on({zoomanim:this._animatePathZoom,zoomend:this._endPathZoom})):this._pathRoot.setAttribute("class"," leaflet-zoom-hide"),this.on("moveend",this._updateSvgViewport),this._updateSvgViewport())},_animatePathZoom:function(t){var i=this.getZoomScale(t.zoom),s=this._getCenterOffset(t.center)._multiplyBy(-i)._add(this._pathViewport.min);this._pathRoot.style[e.DomUtil.TRANSFORM]=e.DomUtil.getTranslateString(s)+" scale("+i+") ",this._pathZooming=!0},_endPathZoom:function(){this._pathZooming=!1},_updateSvgViewport:function(){if(!this._pathZooming){this._updatePathViewport();var t=this._pathViewport,i=t.min,s=t.max,o=s.x-i.x,n=s.y-i.y,a=this._pathRoot,r=this._panes.overlayPane;e.Browser.mobileWebkit&&r.removeChild(a),e.DomUtil.setPosition(a,i),a.setAttribute("width",o),a.setAttribute("height",n),a.setAttribute("viewBox",[i.x,i.y,o,n].join(" ")),e.Browser.mobileWebkit&&r.appendChild(a)}}}),e.Path.include({bindPopup:function(t,i){return(!this._popup||i)&&(this._popup=new e.Popup(i,this)),this._popup.setContent(t),this._popupHandlersAdded||(this.on("click",this._openPopup,this).on("remove",this.closePopup,this),this._popupHandlersAdded=!0),this},unbindPopup:function(){return this._popup&&(this._popup=null,this.off("click",this._openPopup).off("remove",this.closePopup),this._popupHandlersAdded=!1),this},openPopup:function(t){return this._popup&&(t=t||this._latlng||this._latlngs[Math.floor(this._latlngs.length/2)],this._openPopup({latlng:t})),this},closePopup:function(){return this._popup&&this._popup._close(),this},_openPopup:function(t){this._popup.setLatLng(t.latlng),this._map.openPopup(this._popup)}}),e.Browser.vml=!e.Browser.svg&&function(){try{var t=i.createElement("div");t.innerHTML='';var s=t.firstChild;return s.style.behavior="url(#default#VML)",s&&"object"==typeof s.adj}catch(e){return!1}}(),e.Path=e.Browser.svg||!e.Browser.vml?e.Path:e.Path.extend({statics:{VML:!0,CLIP_PADDING:.02},_createElement:function(){try{return i.namespaces.add("lvml","urn:schemas-microsoft-com:vml"),function(t){return i.createElement("')}}catch(t){return function(t){return i.createElement("<"+t+' xmlns="urn:schemas-microsoft.com:vml" class="lvml">')}}}(),_initPath:function(){var t=this._container=this._createElement("shape");e.DomUtil.addClass(t,"leaflet-vml-shape"),this.options.clickable&&e.DomUtil.addClass(t,"leaflet-clickable"),t.coordsize="1 1",this._path=this._createElement("path"),t.appendChild(this._path),this._map._pathRoot.appendChild(t)},_initStyle:function(){this._updateStyle()},_updateStyle:function(){var t=this._stroke,i=this._fill,s=this.options,e=this._container;e.stroked=s.stroke,e.filled=s.fill,s.stroke?(t||(t=this._stroke=this._createElement("stroke"),t.endcap="round",e.appendChild(t)),t.weight=s.weight+"px",t.color=s.color,t.opacity=s.opacity,t.dashStyle=s.dashArray?s.dashArray instanceof Array?s.dashArray.join(" "):s.dashArray.replace(/ *, */g," "):""):t&&(e.removeChild(t),this._stroke=null),s.fill?(i||(i=this._fill=this._createElement("fill"),e.appendChild(i)),i.color=s.fillColor||s.color,i.opacity=s.fillOpacity):i&&(e.removeChild(i),this._fill=null)},_updatePath:function(){var t=this._container.style;t.display="none",this._path.v=this.getPathString()+" ",t.display=""}}),e.Map.include(e.Browser.svg||!e.Browser.vml?{}:{_initPathRoot:function(){if(!this._pathRoot){var t=this._pathRoot=i.createElement("div");t.className="leaflet-vml-container",this._panes.overlayPane.appendChild(t),this.on("moveend",this._updatePathViewport),this._updatePathViewport()}}}),e.Browser.canvas=function(){return!!i.createElement("canvas").getContext}(),e.Path=e.Path.SVG&&!t.L_PREFER_CANVAS||!e.Browser.canvas?e.Path:e.Path.extend({statics:{CANVAS:!0,SVG:!1},redraw:function(){return this._map&&(this.projectLatlngs(),this._requestUpdate()),this},setStyle:function(t){return e.setOptions(this,t),this._map&&(this._updateStyle(),this._requestUpdate()),this},onRemove:function(t){t.off("viewreset",this.projectLatlngs,this).off("moveend",this._updatePath,this),this.options.clickable&&this._map.off("click",this._onClick,this),this._requestUpdate(),this._map=null},_requestUpdate:function(){this._map&&!e.Path._updateRequest&&(e.Path._updateRequest=e.Util.requestAnimFrame(this._fireMapMoveEnd,this._map))},_fireMapMoveEnd:function(){e.Path._updateRequest=null,this.fire("moveend")},_initElements:function(){this._map._initPathRoot(),this._ctx=this._map._canvasCtx},_updateStyle:function(){var t=this.options;t.stroke&&(this._ctx.lineWidth=t.weight,this._ctx.strokeStyle=t.color),t.fill&&(this._ctx.fillStyle=t.fillColor||t.color)},_drawPath:function(){var t,i,s,o,n,a;for(this._ctx.beginPath(),t=0,s=this._parts.length;s>t;t++){for(i=0,o=this._parts[t].length;o>i;i++)n=this._parts[t][i],a=(0===i?"move":"line")+"To",this._ctx[a](n.x,n.y);this instanceof e.Polygon&&this._ctx.closePath()}},_checkIfEmpty:function(){return!this._parts.length},_updatePath:function(){if(!this._checkIfEmpty()){var t=this._ctx,i=this.options;this._drawPath(),t.save(),this._updateStyle(),i.fill&&(t.globalAlpha=i.fillOpacity,t.fill()),i.stroke&&(t.globalAlpha=i.opacity,t.stroke()),t.restore()}},_initEvents:function(){this.options.clickable&&this._map.on("click",this._onClick,this)},_onClick:function(t){this._containsPoint(t.layerPoint)&&this.fire("click",{latlng:t.latlng,layerPoint:t.layerPoint,containerPoint:t.containerPoint,originalEvent:t})}}),e.Map.include(e.Path.SVG&&!t.L_PREFER_CANVAS||!e.Browser.canvas?{}:{_initPathRoot:function(){var t,s=this._pathRoot;s||(s=this._pathRoot=i.createElement("canvas"),s.style.position="absolute",t=this._canvasCtx=s.getContext("2d"),t.lineCap="round",t.lineJoin="round",this._panes.overlayPane.appendChild(s),this.options.zoomAnimation&&(this._pathRoot.className="leaflet-zoom-animated",this.on("zoomanim",this._animatePathZoom),this.on("zoomend",this._endPathZoom)),this.on("moveend",this._updateCanvasViewport),this._updateCanvasViewport())},_updateCanvasViewport:function(){if(!this._pathZooming){this._updatePathViewport();var t=this._pathViewport,i=t.min,s=t.max.subtract(i),o=this._pathRoot;e.DomUtil.setPosition(o,i),o.width=s.x,o.height=s.y,o.getContext("2d").translate(-i.x,-i.y)}}}),e.LineUtil={simplify:function(t,i){if(!i||!t.length)return t.slice();var s=i*i;return t=this._reducePoints(t,s),t=this._simplifyDP(t,s)},pointToSegmentDistance:function(t,i,s){return Math.sqrt(this._sqClosestPointOnSegment(t,i,s,!0))},closestPointOnSegment:function(t,i,s){return this._sqClosestPointOnSegment(t,i,s)},_simplifyDP:function(t,i){var e=t.length,o=typeof Uint8Array!=s+""?Uint8Array:Array,n=new o(e);n[0]=n[e-1]=1,this._simplifyDPStep(t,n,i,0,e-1);var a,r=[];for(a=0;e>a;a++)n[a]&&r.push(t[a]);return r},_simplifyDPStep:function(t,i,s,e,o){var n,a,r,h=0;for(a=e+1;o-1>=a;a++)r=this._sqClosestPointOnSegment(t[a],t[e],t[o],!0),r>h&&(n=a,h=r);h>s&&(i[n]=1,this._simplifyDPStep(t,i,s,e,n),this._simplifyDPStep(t,i,s,n,o))},_reducePoints:function(t,i){for(var s=[t[0]],e=1,o=0,n=t.length;n>e;e++)this._sqDist(t[e],t[o])>i&&(s.push(t[e]),o=e);return n-1>o&&s.push(t[n-1]),s},clipSegment:function(t,i,s,e){var o,n,a,r=e?this._lastCode:this._getBitCode(t,s),h=this._getBitCode(i,s);for(this._lastCode=h;;){if(!(r|h))return[t,i];if(r&h)return!1;o=r||h,n=this._getEdgeIntersection(t,i,o,s),a=this._getBitCode(n,s),o===r?(t=n,r=a):(i=n,h=a)}},_getEdgeIntersection:function(t,i,o,n){var a=i.x-t.x,r=i.y-t.y,h=n.min,l=n.max;return 8&o?new e.Point(t.x+a*(l.y-t.y)/r,l.y):4&o?new e.Point(t.x+a*(h.y-t.y)/r,h.y):2&o?new e.Point(l.x,t.y+r*(l.x-t.x)/a):1&o?new e.Point(h.x,t.y+r*(h.x-t.x)/a):s},_getBitCode:function(t,i){var s=0;return t.xi.max.x&&(s|=2),t.yi.max.y&&(s|=8),s},_sqDist:function(t,i){var s=i.x-t.x,e=i.y-t.y;return s*s+e*e},_sqClosestPointOnSegment:function(t,i,s,o){var n,a=i.x,r=i.y,h=s.x-a,l=s.y-r,c=h*h+l*l;return c>0&&(n=((t.x-a)*h+(t.y-r)*l)/c, -n>1?(a=s.x,r=s.y):n>0&&(a+=h*n,r+=l*n)),h=t.x-a,l=t.y-r,o?h*h+l*l:new e.Point(a,r)}},e.Polyline=e.Path.extend({initialize:function(t,i){e.Path.prototype.initialize.call(this,i),this._latlngs=this._convertLatLngs(t)},options:{smoothFactor:1,noClip:!1},projectLatlngs:function(){this._originalPoints=[];for(var t=0,i=this._latlngs.length;i>t;t++)this._originalPoints[t]=this._map.latLngToLayerPoint(this._latlngs[t])},getPathString:function(){for(var t=0,i=this._parts.length,s="";i>t;t++)s+=this._getPathPartStr(this._parts[t]);return s},getLatLngs:function(){return this._latlngs},setLatLngs:function(t){return this._latlngs=this._convertLatLngs(t),this.redraw()},addLatLng:function(t){return this._latlngs.push(e.latLng(t)),this.redraw()},spliceLatLngs:function(){var t=[].splice.apply(this._latlngs,arguments);return this._convertLatLngs(this._latlngs),this.redraw(),t},closestLayerPoint:function(t){for(var i,s,o=1/0,n=this._parts,a=null,r=0,h=n.length;h>r;r++)for(var l=n[r],c=1,m=l.length;m>c;c++){i=l[c-1],s=l[c];var u=e.LineUtil._sqClosestPointOnSegment(t,i,s,!0);o>u&&(o=u,a=e.LineUtil._sqClosestPointOnSegment(t,i,s))}return a&&(a.distance=Math.sqrt(o)),a},getBounds:function(){var t,i,s=new e.LatLngBounds,o=this.getLatLngs();for(t=0,i=o.length;i>t;t++)s.extend(o[t]);return s},_convertLatLngs:function(t){var i,s;for(i=0,s=t.length;s>i;i++){if(e.Util.isArray(t[i])&&"number"!=typeof t[i][0])return;t[i]=e.latLng(t[i])}return t},_initEvents:function(){e.Path.prototype._initEvents.call(this)},_getPathPartStr:function(t){for(var i,s=e.Path.VML,o=0,n=t.length,a="";n>o;o++)i=t[o],s&&i._round(),a+=(o?"L":"M")+i.x+" "+i.y;return a},_clipPoints:function(){var t,i,o,n=this._originalPoints,a=n.length;if(this.options.noClip)return this._parts=[n],s;this._parts=[];var r=this._parts,h=this._map._pathViewport,l=e.LineUtil;for(t=0,i=0;a-1>t;t++)o=l.clipSegment(n[t],n[t+1],h,t),o&&(r[i]=r[i]||[],r[i].push(o[0]),(o[1]!==n[t+1]||t===a-2)&&(r[i].push(o[1]),i++))},_simplifyPoints:function(){for(var t=this._parts,i=e.LineUtil,s=0,o=t.length;o>s;s++)t[s]=i.simplify(t[s],this.options.smoothFactor)},_updatePath:function(){this._map&&(this._clipPoints(),this._simplifyPoints(),e.Path.prototype._updatePath.call(this))}}),e.polyline=function(t,i){return new e.Polyline(t,i)},e.PolyUtil={},e.PolyUtil.clipPolygon=function(t,i){var s,o,n,a,r,h,l,c,m,u=[1,4,2,8],d=e.LineUtil;for(o=0,l=t.length;l>o;o++)t[o]._code=d._getBitCode(t[o],i);for(a=0;4>a;a++){for(c=u[a],s=[],o=0,l=t.length,n=l-1;l>o;n=o++)r=t[o],h=t[n],r._code&c?h._code&c||(m=d._getEdgeIntersection(h,r,c,i),m._code=d._getBitCode(m,i),s.push(m)):(h._code&c&&(m=d._getEdgeIntersection(h,r,c,i),m._code=d._getBitCode(m,i),s.push(m)),s.push(r));t=s}return t},e.Polygon=e.Polyline.extend({options:{fill:!0},initialize:function(t,i){e.Polyline.prototype.initialize.call(this,t,i),t&&e.Util.isArray(t[0])&&"number"!=typeof t[0][0]&&(this._latlngs=this._convertLatLngs(t[0]),this._holes=t.slice(1))},projectLatlngs:function(){if(e.Polyline.prototype.projectLatlngs.call(this),this._holePoints=[],this._holes){var t,i,s,o;for(t=0,s=this._holes.length;s>t;t++)for(this._holePoints[t]=[],i=0,o=this._holes[t].length;o>i;i++)this._holePoints[t][i]=this._map.latLngToLayerPoint(this._holes[t][i])}},_clipPoints:function(){var t=this._originalPoints,i=[];if(this._parts=[t].concat(this._holePoints),!this.options.noClip){for(var s=0,o=this._parts.length;o>s;s++){var n=e.PolyUtil.clipPolygon(this._parts[s],this._map._pathViewport);n.length&&i.push(n)}this._parts=i}},_getPathPartStr:function(t){var i=e.Polyline.prototype._getPathPartStr.call(this,t);return i+(e.Browser.svg?"z":"x")}}),e.polygon=function(t,i){return new e.Polygon(t,i)},function(){function t(t){return e.FeatureGroup.extend({initialize:function(t,i){this._layers={},this._options=i,this.setLatLngs(t)},setLatLngs:function(i){var s=0,e=i.length;for(this.eachLayer(function(t){e>s?t.setLatLngs(i[s++]):this.removeLayer(t)},this);e>s;)this.addLayer(new t(i[s++],this._options));return this}})}e.MultiPolyline=t(e.Polyline),e.MultiPolygon=t(e.Polygon),e.multiPolyline=function(t,i){return new e.MultiPolyline(t,i)},e.multiPolygon=function(t,i){return new e.MultiPolygon(t,i)}}(),e.Rectangle=e.Polygon.extend({initialize:function(t,i){e.Polygon.prototype.initialize.call(this,this._boundsToLatLngs(t),i)},setBounds:function(t){this.setLatLngs(this._boundsToLatLngs(t))},_boundsToLatLngs:function(t){return t=e.latLngBounds(t),[t.getSouthWest(),t.getNorthWest(),t.getNorthEast(),t.getSouthEast()]}}),e.rectangle=function(t,i){return new e.Rectangle(t,i)},e.Circle=e.Path.extend({initialize:function(t,i,s){e.Path.prototype.initialize.call(this,s),this._latlng=e.latLng(t),this._mRadius=i},options:{fill:!0},setLatLng:function(t){return this._latlng=e.latLng(t),this.redraw()},setRadius:function(t){return this._mRadius=t,this.redraw()},projectLatlngs:function(){var t=this._getLngRadius(),i=new e.LatLng(this._latlng.lat,this._latlng.lng-t),s=this._map.latLngToLayerPoint(i);this._point=this._map.latLngToLayerPoint(this._latlng),this._radius=Math.max(Math.round(this._point.x-s.x),1)},getBounds:function(){var t=this._getLngRadius(),i=360*(this._mRadius/40075017),s=this._latlng,o=new e.LatLng(s.lat-i,s.lng-t),n=new e.LatLng(s.lat+i,s.lng+t);return new e.LatLngBounds(o,n)},getLatLng:function(){return this._latlng},getPathString:function(){var t=this._point,i=this._radius;return this._checkIfEmpty()?"":e.Browser.svg?"M"+t.x+","+(t.y-i)+"A"+i+","+i+",0,1,1,"+(t.x-.1)+","+(t.y-i)+" z":(t._round(),i=Math.round(i),"AL "+t.x+","+t.y+" "+i+","+i+" 0,"+23592600)},getRadius:function(){return this._mRadius},_getLatRadius:function(){return 360*(this._mRadius/40075017)},_getLngRadius:function(){return this._getLatRadius()/Math.cos(e.LatLng.DEG_TO_RAD*this._latlng.lat)},_checkIfEmpty:function(){if(!this._map)return!1;var t=this._map._pathViewport,i=this._radius,s=this._point;return s.x-i>t.max.x||s.y-i>t.max.y||s.x+is;s++)for(l=this._parts[s],o=0,r=l.length,n=r-1;r>o;n=o++)if((i||0!==o)&&(h=e.LineUtil.pointToSegmentDistance(t,l[n],l[o]),c>=h))return!0;return!1}}:{}),e.Polygon.include(e.Path.CANVAS?{_containsPoint:function(t){var i,s,o,n,a,r,h,l,c=!1;if(e.Polyline.prototype._containsPoint.call(this,t,!0))return!0;for(n=0,h=this._parts.length;h>n;n++)for(i=this._parts[n],a=0,l=i.length,r=l-1;l>a;r=a++)s=i[a],o=i[r],s.y>t.y!=o.y>t.y&&t.x<(o.x-s.x)*(t.y-s.y)/(o.y-s.y)+s.x&&(c=!c);return c}}:{}),e.Circle.include(e.Path.CANVAS?{_drawPath:function(){var t=this._point;this._ctx.beginPath(),this._ctx.arc(t.x,t.y,this._radius,0,2*Math.PI,!1)},_containsPoint:function(t){var i=this._point,s=this.options.stroke?this.options.weight/2:0;return t.distanceTo(i)<=this._radius+s}}:{}),e.GeoJSON=e.FeatureGroup.extend({initialize:function(t,i){e.setOptions(this,i),this._layers={},t&&this.addData(t)},addData:function(t){var i,s,o=e.Util.isArray(t)?t:t.features;if(o){for(i=0,s=o.length;s>i;i++)(o[i].geometries||o[i].geometry||o[i].features)&&this.addData(o[i]);return this}var n=this.options;if(!n.filter||n.filter(t)){var a=e.GeoJSON.geometryToLayer(t,n.pointToLayer);return a.feature=t,a.defaultOptions=a.options,this.resetStyle(a),n.onEachFeature&&n.onEachFeature(t,a),this.addLayer(a)}},resetStyle:function(t){var i=this.options.style;i&&(e.Util.extend(t.options,t.defaultOptions),this._setLayerStyle(t,i))},setStyle:function(t){this.eachLayer(function(i){this._setLayerStyle(i,t)},this)},_setLayerStyle:function(t,i){"function"==typeof i&&(i=i(t.feature)),t.setStyle&&t.setStyle(i)}}),e.extend(e.GeoJSON,{geometryToLayer:function(t,i){var s,o,n,a,r,h="Feature"===t.type?t.geometry:t,l=h.coordinates,c=[];switch(h.type){case"Point":return s=this.coordsToLatLng(l),i?i(t,s):new e.Marker(s);case"MultiPoint":for(n=0,a=l.length;a>n;n++)s=this.coordsToLatLng(l[n]),r=i?i(t,s):new e.Marker(s),c.push(r);return new e.FeatureGroup(c);case"LineString":return o=this.coordsToLatLngs(l),new e.Polyline(o);case"Polygon":return o=this.coordsToLatLngs(l,1),new e.Polygon(o);case"MultiLineString":return o=this.coordsToLatLngs(l,1),new e.MultiPolyline(o);case"MultiPolygon":return o=this.coordsToLatLngs(l,2),new e.MultiPolygon(o);case"GeometryCollection":for(n=0,a=h.geometries.length;a>n;n++)r=this.geometryToLayer({geometry:h.geometries[n],type:"Feature",properties:t.properties},i),c.push(r);return new e.FeatureGroup(c);default:throw Error("Invalid GeoJSON object.")}},coordsToLatLng:function(t,i){var s=parseFloat(t[i?0:1]),o=parseFloat(t[i?1:0]);return new e.LatLng(s,o)},coordsToLatLngs:function(t,i,s){var e,o,n,a=[];for(o=0,n=t.length;n>o;o++)e=i?this.coordsToLatLngs(t[o],i-1,s):this.coordsToLatLng(t[o],s),a.push(e);return a}}),e.geoJson=function(t,i){return new e.GeoJSON(t,i)},e.DomEvent={addListener:function(t,i,o,n){var a,r,h,l=e.stamp(o),c="_leaflet_"+i+l;return t[c]?this:(a=function(i){return o.call(n||t,i||e.DomEvent._getEvent())},e.Browser.msTouch&&0===i.indexOf("touch")?this.addMsTouchListener(t,i,a,l):(e.Browser.touch&&"dblclick"===i&&this.addDoubleTapListener&&this.addDoubleTapListener(t,a,l),"addEventListener"in t?"mousewheel"===i?(t.addEventListener("DOMMouseScroll",a,!1),t.addEventListener(i,a,!1)):"mouseenter"===i||"mouseleave"===i?(r=a,h="mouseenter"===i?"mouseover":"mouseout",a=function(i){return e.DomEvent._checkMouse(t,i)?r(i):s},t.addEventListener(h,a,!1)):t.addEventListener(i,a,!1):"attachEvent"in t&&t.attachEvent("on"+i,a),t[c]=a,this))},removeListener:function(t,i,s){var o=e.stamp(s),n="_leaflet_"+i+o,a=t[n];if(a)return e.Browser.msTouch&&0===i.indexOf("touch")?this.removeMsTouchListener(t,i,o):e.Browser.touch&&"dblclick"===i&&this.removeDoubleTapListener?this.removeDoubleTapListener(t,o):"removeEventListener"in t?"mousewheel"===i?(t.removeEventListener("DOMMouseScroll",a,!1),t.removeEventListener(i,a,!1)):"mouseenter"===i||"mouseleave"===i?t.removeEventListener("mouseenter"===i?"mouseover":"mouseout",a,!1):t.removeEventListener(i,a,!1):"detachEvent"in t&&t.detachEvent("on"+i,a),t[n]=null,this},stopPropagation:function(t){return t.stopPropagation?t.stopPropagation():t.cancelBubble=!0,this},disableClickPropagation:function(t){for(var i=e.DomEvent.stopPropagation,s=e.Draggable.START.length-1;s>=0;s--)e.DomEvent.addListener(t,e.Draggable.START[s],i);return e.DomEvent.addListener(t,"click",i).addListener(t,"dblclick",i)},preventDefault:function(t){return t.preventDefault?t.preventDefault():t.returnValue=!1,this},stop:function(t){return e.DomEvent.preventDefault(t).stopPropagation(t)},getMousePosition:function(t,s){var o=i.body,n=i.documentElement,a=t.pageX?t.pageX:t.clientX+o.scrollLeft+n.scrollLeft,r=t.pageY?t.pageY:t.clientY+o.scrollTop+n.scrollTop,h=new e.Point(a,r);return s?h._subtract(e.DomUtil.getViewportOffset(s)):h},getWheelDelta:function(t){var i=0;return t.wheelDelta&&(i=t.wheelDelta/120),t.detail&&(i=-t.detail/3),i},_checkMouse:function(t,i){var s=i.relatedTarget;if(!s)return!0;try{for(;s&&s!==t;)s=s.parentNode}catch(e){return!1}return s!==t},_getEvent:function(){var i=t.event;if(!i)for(var s=arguments.callee.caller;s&&(i=s.arguments[0],!i||t.Event!==i.constructor);)s=s.caller;return i}},e.DomEvent.on=e.DomEvent.addListener,e.DomEvent.off=e.DomEvent.removeListener,e.Draggable=e.Class.extend({includes:e.Mixin.Events,statics:{START:e.Browser.touch?["touchstart","mousedown"]:["mousedown"],END:{mousedown:"mouseup",touchstart:"touchend",MSPointerDown:"touchend"},MOVE:{mousedown:"mousemove",touchstart:"touchmove",MSPointerDown:"touchmove"},TAP_TOLERANCE:15},initialize:function(t,i,s){this._element=t,this._dragStartTarget=i||t,this._longPress=s&&!e.Browser.msTouch},enable:function(){if(!this._enabled){for(var t=e.Draggable.START.length-1;t>=0;t--)e.DomEvent.on(this._dragStartTarget,e.Draggable.START[t],this._onDown,this);this._enabled=!0}},disable:function(){if(this._enabled){for(var t=e.Draggable.START.length-1;t>=0;t--)e.DomEvent.off(this._dragStartTarget,e.Draggable.START[t],this._onDown,this);this._enabled=!1,this._moved=!1}},_onDown:function(t){if(!(!e.Browser.touch&&t.shiftKey||1!==t.which&&1!==t.button&&!t.touches||(e.DomEvent.preventDefault(t),e.DomEvent.stopPropagation(t),e.Draggable._disabled))){if(this._simulateClick=!0,t.touches&&t.touches.length>1)return this._simulateClick=!1,clearTimeout(this._longPressTimeout),s;var o=t.touches&&1===t.touches.length?t.touches[0]:t,n=o.target;e.Browser.touch&&"a"===n.tagName.toLowerCase()&&e.DomUtil.addClass(n,"leaflet-active"),this._moved=!1,this._moving||(this._startPoint=new e.Point(o.clientX,o.clientY),this._startPos=this._newPos=e.DomUtil.getPosition(this._element),t.touches&&1===t.touches.length&&e.Browser.touch&&this._longPress&&(this._longPressTimeout=setTimeout(e.bind(function(){var t=this._newPos&&this._newPos.distanceTo(this._startPos)||0;e.Draggable.TAP_TOLERANCE>t&&(this._simulateClick=!1,this._onUp(),this._simulateEvent("contextmenu",o))},this),1e3)),e.DomEvent.on(i,e.Draggable.MOVE[t.type],this._onMove,this),e.DomEvent.on(i,e.Draggable.END[t.type],this._onUp,this))}},_onMove:function(t){if(!(t.touches&&t.touches.length>1)){var i=t.touches&&1===t.touches.length?t.touches[0]:t,s=new e.Point(i.clientX,i.clientY),o=s.subtract(this._startPoint);(o.x||o.y)&&(e.DomEvent.preventDefault(t),this._moved||(this.fire("dragstart"),this._moved=!0,this._startPos=e.DomUtil.getPosition(this._element).subtract(o),e.Browser.touch||(e.DomUtil.disableTextSelection(),this._setMovingCursor())),this._newPos=this._startPos.add(o),this._moving=!0,e.Util.cancelAnimFrame(this._animRequest),this._animRequest=e.Util.requestAnimFrame(this._updatePosition,this,!0,this._dragStartTarget))}},_updatePosition:function(){this.fire("predrag"),e.DomUtil.setPosition(this._element,this._newPos),this.fire("drag")},_onUp:function(t){var s;if(clearTimeout(this._longPressTimeout),this._simulateClick&&t.changedTouches){var o=t.changedTouches[0],n=o.target,a=this._newPos&&this._newPos.distanceTo(this._startPos)||0;"a"===n.tagName.toLowerCase()&&e.DomUtil.removeClass(n,"leaflet-active"),e.Draggable.TAP_TOLERANCE>a&&(s=o)}e.Browser.touch||(e.DomUtil.enableTextSelection(),this._restoreCursor());for(var r in e.Draggable.MOVE)e.Draggable.MOVE.hasOwnProperty(r)&&(e.DomEvent.off(i,e.Draggable.MOVE[r],this._onMove),e.DomEvent.off(i,e.Draggable.END[r],this._onUp));this._moved&&(e.Util.cancelAnimFrame(this._animRequest),this.fire("dragend")),this._moving=!1,s&&(this._moved=!1,this._simulateEvent("click",s))},_setMovingCursor:function(){e.DomUtil.addClass(i.body,"leaflet-dragging")},_restoreCursor:function(){e.DomUtil.removeClass(i.body,"leaflet-dragging")},_simulateEvent:function(s,e){var o=i.createEvent("MouseEvents");o.initMouseEvent(s,!0,!0,t,1,e.screenX,e.screenY,e.clientX,e.clientY,!1,!1,!1,!1,0,null),e.target.dispatchEvent(o)}}),e.Handler=e.Class.extend({initialize:function(t){this._map=t},enable:function(){this._enabled||(this._enabled=!0,this.addHooks())},disable:function(){this._enabled&&(this._enabled=!1,this.removeHooks())},enabled:function(){return!!this._enabled}}),e.Map.mergeOptions({dragging:!0,inertia:!e.Browser.android23,inertiaDeceleration:3400,inertiaMaxSpeed:1/0,inertiaThreshold:e.Browser.touch?32:18,easeLinearity:.25,longPress:!0,worldCopyJump:!1}),e.Map.Drag=e.Handler.extend({addHooks:function(){if(!this._draggable){var t=this._map;this._draggable=new e.Draggable(t._mapPane,t._container,t.options.longPress),this._draggable.on({dragstart:this._onDragStart,drag:this._onDrag,dragend:this._onDragEnd},this),t.options.worldCopyJump&&(this._draggable.on("predrag",this._onPreDrag,this),t.on("viewreset",this._onViewReset,this))}this._draggable.enable()},removeHooks:function(){this._draggable.disable()},moved:function(){return this._draggable&&this._draggable._moved},_onDragStart:function(){var t=this._map;t._panAnim&&t._panAnim.stop(),t.fire("movestart").fire("dragstart"),t.options.inertia&&(this._positions=[],this._times=[])},_onDrag:function(){if(this._map.options.inertia){var t=this._lastTime=+new Date,i=this._lastPos=this._draggable._newPos;this._positions.push(i),this._times.push(t),t-this._times[0]>200&&(this._positions.shift(),this._times.shift())}this._map.fire("move").fire("drag")},_onViewReset:function(){var t=this._map.getSize()._divideBy(2),i=this._map.latLngToLayerPoint(new e.LatLng(0,0));this._initialWorldOffset=i.subtract(t).x,this._worldWidth=this._map.project(new e.LatLng(0,180)).x},_onPreDrag:function(){var t=this._worldWidth,i=Math.round(t/2),s=this._initialWorldOffset,e=this._draggable._newPos.x,o=(e-i+s)%t+i-s,n=(e+i+s)%t-i-s,a=Math.abs(o+s)i.inertiaThreshold||!this._positions[0];if(o)t.fire("moveend");else{var n=this._lastPos.subtract(this._positions[0]),a=(this._lastTime+s-this._times[0])/1e3,r=i.easeLinearity,h=n.multiplyBy(r/a),l=h.distanceTo(new e.Point(0,0)),c=Math.min(i.inertiaMaxSpeed,l),m=h.multiplyBy(c/l),u=c/(i.inertiaDeceleration*r),d=m.multiplyBy(-u/2).round();e.Util.requestAnimFrame(function(){t.panBy(d,u,r)})}t.fire("dragend"),i.maxBounds&&e.Util.requestAnimFrame(this._panInsideMaxBounds,t,!0,t._container)},_panInsideMaxBounds:function(){this.panInsideBounds(this.options.maxBounds)}}),e.Map.addInitHook("addHandler","dragging",e.Map.Drag),e.Map.mergeOptions({doubleClickZoom:!0}),e.Map.DoubleClickZoom=e.Handler.extend({addHooks:function(){this._map.on("dblclick",this._onDoubleClick)},removeHooks:function(){this._map.off("dblclick",this._onDoubleClick)},_onDoubleClick:function(t){this.setView(t.latlng,this._zoom+1)}}),e.Map.addInitHook("addHandler","doubleClickZoom",e.Map.DoubleClickZoom),e.Map.mergeOptions({scrollWheelZoom:!0}),e.Map.ScrollWheelZoom=e.Handler.extend({addHooks:function(){e.DomEvent.on(this._map._container,"mousewheel",this._onWheelScroll,this),this._delta=0},removeHooks:function(){e.DomEvent.off(this._map._container,"mousewheel",this._onWheelScroll)},_onWheelScroll:function(t){var i=e.DomEvent.getWheelDelta(t);this._delta+=i,this._lastMousePos=this._map.mouseEventToContainerPoint(t),this._startTime||(this._startTime=+new Date);var s=Math.max(40-(+new Date-this._startTime),0);clearTimeout(this._timer),this._timer=setTimeout(e.bind(this._performZoom,this),s),e.DomEvent.preventDefault(t),e.DomEvent.stopPropagation(t)},_performZoom:function(){var t=this._map,i=this._delta,s=t.getZoom();if(i=i>0?Math.ceil(i):Math.round(i),i=Math.max(Math.min(i,4),-4),i=t._limitZoom(s+i)-s,this._delta=0,this._startTime=null,i){var e=s+i,o=this._getCenterForScrollWheelZoom(e);t.setView(o,e)}},_getCenterForScrollWheelZoom:function(t){var i=this._map,s=i.getZoomScale(t),e=i.getSize()._divideBy(2),o=this._lastMousePos._subtract(e)._multiplyBy(1-1/s),n=i._getTopLeftPoint()._add(e)._add(o);return i.unproject(n)}}),e.Map.addInitHook("addHandler","scrollWheelZoom",e.Map.ScrollWheelZoom),e.extend(e.DomEvent,{_touchstart:e.Browser.msTouch?"MSPointerDown":"touchstart",_touchend:e.Browser.msTouch?"MSPointerUp":"touchend",addDoubleTapListener:function(t,s,o){function n(t){var i;if(e.Browser.msTouch?(p.push(t.pointerId),i=p.length):i=t.touches.length,!(i>1)){var s=Date.now(),o=s-(r||s);h=t.touches?t.touches[0]:t,l=o>0&&c>=o,r=s}}function a(t){if(e.Browser.msTouch){var i=p.indexOf(t.pointerId);if(-1===i)return;p.splice(i,1)}if(l){if(e.Browser.msTouch){var o,n={};for(var a in h)o=h[a],n[a]="function"==typeof o?o.bind(h):o;h=n}h.type="dblclick",s(h),r=null}}var r,h,l=!1,c=250,m="_leaflet_",u=this._touchstart,d=this._touchend,p=[];t[m+u+o]=n,t[m+d+o]=a;var _=e.Browser.msTouch?i.documentElement:t;return t.addEventListener(u,n,!1),_.addEventListener(d,a,!1),e.Browser.msTouch&&_.addEventListener("MSPointerCancel",a,!1),this},removeDoubleTapListener:function(t,s){var o="_leaflet_";return t.removeEventListener(this._touchstart,t[o+this._touchstart+s],!1),(e.Browser.msTouch?i.documentElement:t).removeEventListener(this._touchend,t[o+this._touchend+s],!1),e.Browser.msTouch&&i.documentElement.removeEventListener("MSPointerCancel",t[o+this._touchend+s],!1),this}}),e.extend(e.DomEvent,{_msTouches:[],_msDocumentListener:!1,addMsTouchListener:function(t,i,s,e){switch(i){case"touchstart":return this.addMsTouchListenerStart(t,i,s,e);case"touchend":return this.addMsTouchListenerEnd(t,i,s,e);case"touchmove":return this.addMsTouchListenerMove(t,i,s,e);default:throw"Unknown touch event type"}},addMsTouchListenerStart:function(t,s,e,o){var n="_leaflet_",a=this._msTouches,r=function(t){for(var i=!1,s=0;a.length>s;s++)if(a[s].pointerId===t.pointerId){i=!0;break}i||a.push(t),t.touches=a.slice(),t.changedTouches=[t],e(t)};if(t[n+"touchstart"+o]=r,t.addEventListener("MSPointerDown",r,!1),!this._msDocumentListener){var h=function(t){for(var i=0;a.length>i;i++)if(a[i].pointerId===t.pointerId){a.splice(i,1);break}};i.documentElement.addEventListener("MSPointerUp",h,!1),i.documentElement.addEventListener("MSPointerCancel",h,!1),this._msDocumentListener=!0}return this},addMsTouchListenerMove:function(t,i,s,e){function o(t){if(t.pointerType!==t.MSPOINTER_TYPE_MOUSE||0!==t.buttons){for(var i=0;a.length>i;i++)if(a[i].pointerId===t.pointerId){a[i]=t;break}t.touches=a.slice(),t.changedTouches=[t],s(t)}}var n="_leaflet_",a=this._msTouches;return t[n+"touchmove"+e]=o,t.addEventListener("MSPointerMove",o,!1),this},addMsTouchListenerEnd:function(t,i,s,e){var o="_leaflet_",n=this._msTouches,a=function(t){for(var i=0;n.length>i;i++)if(n[i].pointerId===t.pointerId){n.splice(i,1);break}t.touches=n.slice(),t.changedTouches=[t],s(t)};return t[o+"touchend"+e]=a,t.addEventListener("MSPointerUp",a,!1),t.addEventListener("MSPointerCancel",a,!1),this},removeMsTouchListener:function(t,i,s){var e="_leaflet_",o=t[e+i+s];switch(i){case"touchstart":t.removeEventListener("MSPointerDown",o,!1);break;case"touchmove":t.removeEventListener("MSPointerMove",o,!1);break;case"touchend":t.removeEventListener("MSPointerUp",o,!1),t.removeEventListener("MSPointerCancel",o,!1)}return this}}),e.Map.mergeOptions({touchZoom:e.Browser.touch&&!e.Browser.android23}),e.Map.TouchZoom=e.Handler.extend({addHooks:function(){e.DomEvent.on(this._map._container,"touchstart",this._onTouchStart,this)},removeHooks:function(){e.DomEvent.off(this._map._container,"touchstart",this._onTouchStart,this)},_onTouchStart:function(t){var s=this._map;if(t.touches&&2===t.touches.length&&!s._animatingZoom&&!this._zooming){var o=s.mouseEventToLayerPoint(t.touches[0]),n=s.mouseEventToLayerPoint(t.touches[1]),a=s._getCenterLayerPoint();this._startCenter=o.add(n)._divideBy(2),this._startDist=o.distanceTo(n),this._moved=!1,this._zooming=!0,this._centerOffset=a.subtract(this._startCenter),s._panAnim&&s._panAnim.stop(),e.DomEvent.on(i,"touchmove",this._onTouchMove,this).on(i,"touchend",this._onTouchEnd,this),e.DomEvent.preventDefault(t)}},_onTouchMove:function(t){if(t.touches&&2===t.touches.length){var i=this._map,s=i.mouseEventToLayerPoint(t.touches[0]),o=i.mouseEventToLayerPoint(t.touches[1]);this._scale=s.distanceTo(o)/this._startDist,this._delta=s._add(o)._divideBy(2)._subtract(this._startCenter),1!==this._scale&&(this._moved||(e.DomUtil.addClass(i._mapPane,"leaflet-zoom-anim leaflet-touching"),i.fire("movestart").fire("zoomstart")._prepareTileBg(),this._moved=!0),e.Util.cancelAnimFrame(this._animRequest),this._animRequest=e.Util.requestAnimFrame(this._updateOnMove,this,!0,this._map._container),e.DomEvent.preventDefault(t))}},_updateOnMove:function(){var t=this._map,i=this._getScaleOrigin(),s=t.layerPointToLatLng(i);t.fire("zoomanim",{center:s,zoom:t.getScaleZoom(this._scale)}),t._tileBg.style[e.DomUtil.TRANSFORM]=e.DomUtil.getTranslateString(this._delta)+" "+e.DomUtil.getScaleString(this._scale,this._startCenter)},_onTouchEnd:function(){if(this._moved&&this._zooming){var t=this._map;this._zooming=!1,e.DomUtil.removeClass(t._mapPane,"leaflet-touching"),e.DomEvent.off(i,"touchmove",this._onTouchMove).off(i,"touchend",this._onTouchEnd);var s=this._getScaleOrigin(),o=t.layerPointToLatLng(s),n=t.getZoom(),a=t.getScaleZoom(this._scale)-n,r=a>0?Math.ceil(a):Math.floor(a),h=t._limitZoom(n+r);t.fire("zoomanim",{center:o,zoom:h}),t._runAnimation(o,h,t.getZoomScale(h)/this._scale,s,!0)}},_getScaleOrigin:function(){var t=this._centerOffset.subtract(this._delta).divideBy(this._scale);return this._startCenter.add(t)}}),e.Map.addInitHook("addHandler","touchZoom",e.Map.TouchZoom),e.Map.mergeOptions({boxZoom:!0}),e.Map.BoxZoom=e.Handler.extend({initialize:function(t){this._map=t,this._container=t._container,this._pane=t._panes.overlayPane},addHooks:function(){e.DomEvent.on(this._container,"mousedown",this._onMouseDown,this)},removeHooks:function(){e.DomEvent.off(this._container,"mousedown",this._onMouseDown)},_onMouseDown:function(t){return!t.shiftKey||1!==t.which&&1!==t.button?!1:(e.DomUtil.disableTextSelection(),this._startLayerPoint=this._map.mouseEventToLayerPoint(t),this._box=e.DomUtil.create("div","leaflet-zoom-box",this._pane),e.DomUtil.setPosition(this._box,this._startLayerPoint),this._container.style.cursor="crosshair",e.DomEvent.on(i,"mousemove",this._onMouseMove,this).on(i,"mouseup",this._onMouseUp,this).preventDefault(t),this._map.fire("boxzoomstart"),s)},_onMouseMove:function(t){var i=this._startLayerPoint,s=this._box,o=this._map.mouseEventToLayerPoint(t),n=o.subtract(i),a=new e.Point(Math.min(o.x,i.x),Math.min(o.y,i.y));e.DomUtil.setPosition(s,a),s.style.width=Math.max(0,Math.abs(n.x)-4)+"px",s.style.height=Math.max(0,Math.abs(n.y)-4)+"px"},_onMouseUp:function(t){this._pane.removeChild(this._box),this._container.style.cursor="",e.DomUtil.enableTextSelection(),e.DomEvent.off(i,"mousemove",this._onMouseMove).off(i,"mouseup",this._onMouseUp);var s=this._map,o=s.mouseEventToLayerPoint(t);if(!this._startLayerPoint.equals(o)){var n=new e.LatLngBounds(s.layerPointToLatLng(this._startLayerPoint),s.layerPointToLatLng(o));s.fitBounds(n),s.fire("boxzoomend",{boxZoomBounds:n})}}}),e.Map.addInitHook("addHandler","boxZoom",e.Map.BoxZoom),e.Map.mergeOptions({keyboard:!0,keyboardPanOffset:80,keyboardZoomOffset:1}),e.Map.Keyboard=e.Handler.extend({keyCodes:{left:[37],right:[39],down:[40],up:[38],zoomIn:[187,107,61],zoomOut:[189,109,173]},initialize:function(t){this._map=t,this._setPanOffset(t.options.keyboardPanOffset),this._setZoomOffset(t.options.keyboardZoomOffset)},addHooks:function(){var t=this._map._container;-1===t.tabIndex&&(t.tabIndex="0"),e.DomEvent.on(t,"focus",this._onFocus,this).on(t,"blur",this._onBlur,this).on(t,"mousedown",this._onMouseDown,this),this._map.on("focus",this._addHooks,this).on("blur",this._removeHooks,this)},removeHooks:function(){this._removeHooks();var t=this._map._container;e.DomEvent.off(t,"focus",this._onFocus,this).off(t,"blur",this._onBlur,this).off(t,"mousedown",this._onMouseDown,this),this._map.off("focus",this._addHooks,this).off("blur",this._removeHooks,this)},_onMouseDown:function(){this._focused||this._map._container.focus()},_onFocus:function(){this._focused=!0,this._map.fire("focus")},_onBlur:function(){this._focused=!1,this._map.fire("blur")},_setPanOffset:function(t){var i,s,e=this._panKeys={},o=this.keyCodes;for(i=0,s=o.left.length;s>i;i++)e[o.left[i]]=[-1*t,0];for(i=0,s=o.right.length;s>i;i++)e[o.right[i]]=[t,0];for(i=0,s=o.down.length;s>i;i++)e[o.down[i]]=[0,t];for(i=0,s=o.up.length;s>i;i++)e[o.up[i]]=[0,-1*t]},_setZoomOffset:function(t){var i,s,e=this._zoomKeys={},o=this.keyCodes;for(i=0,s=o.zoomIn.length;s>i;i++)e[o.zoomIn[i]]=t;for(i=0,s=o.zoomOut.length;s>i;i++)e[o.zoomOut[i]]=-t},_addHooks:function(){e.DomEvent.on(i,"keydown",this._onKeyDown,this)},_removeHooks:function(){e.DomEvent.off(i,"keydown",this._onKeyDown,this)},_onKeyDown:function(t){var i=t.keyCode,s=this._map;if(this._panKeys.hasOwnProperty(i))s.panBy(this._panKeys[i]),s.options.maxBounds&&s.panInsideBounds(s.options.maxBounds);else{if(!this._zoomKeys.hasOwnProperty(i))return;s.setZoom(s.getZoom()+this._zoomKeys[i])}e.DomEvent.stop(t)}}),e.Map.addInitHook("addHandler","keyboard",e.Map.Keyboard),e.Handler.MarkerDrag=e.Handler.extend({initialize:function(t){this._marker=t},addHooks:function(){var t=this._marker._icon;this._draggable||(this._draggable=new e.Draggable(t,t).on("dragstart",this._onDragStart,this).on("drag",this._onDrag,this).on("dragend",this._onDragEnd,this)),this._draggable.enable()},removeHooks:function(){this._draggable.disable()},moved:function(){return this._draggable&&this._draggable._moved},_onDragStart:function(){this._marker.closePopup().fire("movestart").fire("dragstart")},_onDrag:function(){var t=this._marker,i=t._shadow,s=e.DomUtil.getPosition(t._icon),o=t._map.layerPointToLatLng(s);i&&e.DomUtil.setPosition(i,s),t._latlng=o,t.fire("move",{latlng:o}).fire("drag")},_onDragEnd:function(){this._marker.fire("moveend").fire("dragend")}}),e.Handler.PolyEdit=e.Handler.extend({options:{icon:new e.DivIcon({iconSize:new e.Point(8,8),className:"leaflet-div-icon leaflet-editing-icon"})},initialize:function(t,i){this._poly=t,e.setOptions(this,i)},addHooks:function(){this._poly._map&&(this._markerGroup||this._initMarkers(),this._poly._map.addLayer(this._markerGroup))},removeHooks:function(){this._poly._map&&(this._poly._map.removeLayer(this._markerGroup),delete this._markerGroup,delete this._markers)},updateMarkers:function(){this._markerGroup.clearLayers(),this._initMarkers()},_initMarkers:function(){this._markerGroup||(this._markerGroup=new e.LayerGroup),this._markers=[];var t,i,s,o,n=this._poly._latlngs;for(t=0,s=n.length;s>t;t++)o=this._createMarker(n[t],t),o.on("click",this._onMarkerClick,this),this._markers.push(o);var a,r;for(t=0,i=s-1;s>t;i=t++)(0!==t||e.Polygon&&this._poly instanceof e.Polygon)&&(a=this._markers[i],r=this._markers[t],this._createMiddleMarker(a,r),this._updatePrevNext(a,r))},_createMarker:function(t,i){var s=new e.Marker(t,{draggable:!0,icon:this.options.icon});return s._origLatLng=t,s._index=i,s.on("drag",this._onMarkerDrag,this),s.on("dragend",this._fireEdit,this),this._markerGroup.addLayer(s),s},_fireEdit:function(){this._poly.fire("edit")},_onMarkerDrag:function(t){var i=t.target;e.extend(i._origLatLng,i._latlng),i._middleLeft&&i._middleLeft.setLatLng(this._getMiddleLatLng(i._prev,i)),i._middleRight&&i._middleRight.setLatLng(this._getMiddleLatLng(i,i._next)),this._poly.redraw()},_onMarkerClick:function(t){if(!(3>this._poly._latlngs.length)){var i=t.target,s=i._index;this._markerGroup.removeLayer(i),this._markers.splice(s,1),this._poly.spliceLatLngs(s,1),this._updateIndexes(s,-1),this._updatePrevNext(i._prev,i._next),i._middleLeft&&this._markerGroup.removeLayer(i._middleLeft),i._middleRight&&this._markerGroup.removeLayer(i._middleRight),i._prev&&i._next?this._createMiddleMarker(i._prev,i._next):i._prev?i._next||(i._prev._middleRight=null):i._next._middleLeft=null,this._poly.fire("edit")}},_updateIndexes:function(t,i){this._markerGroup.eachLayer(function(s){s._index>t&&(s._index+=i)})},_createMiddleMarker:function(t,i){var s,e,o,n=this._getMiddleLatLng(t,i),a=this._createMarker(n);a.setOpacity(.6),t._middleRight=i._middleLeft=a,e=function(){var e=i._index;a._index=e,a.off("click",s).on("click",this._onMarkerClick,this),n.lat=a.getLatLng().lat,n.lng=a.getLatLng().lng,this._poly.spliceLatLngs(e,0,n),this._markers.splice(e,0,a),a.setOpacity(1),this._updateIndexes(e,1),i._index++,this._updatePrevNext(t,a),this._updatePrevNext(a,i)},o=function(){a.off("dragstart",e,this),a.off("dragend",o,this), -this._createMiddleMarker(t,a),this._createMiddleMarker(a,i)},s=function(){e.call(this),o.call(this),this._poly.fire("edit")},a.on("click",s,this).on("dragstart",e,this).on("dragend",o,this),this._markerGroup.addLayer(a)},_updatePrevNext:function(t,i){t&&(t._next=i),i&&(i._prev=t)},_getMiddleLatLng:function(t,i){var s=this._poly._map,e=s.latLngToLayerPoint(t.getLatLng()),o=s.latLngToLayerPoint(i.getLatLng());return s.layerPointToLatLng(e._add(o)._divideBy(2))}}),e.Polyline.addInitHook(function(){e.Handler.PolyEdit&&(this.editing=new e.Handler.PolyEdit(this),this.options.editable&&this.editing.enable()),this.on("add",function(){this.editing&&this.editing.enabled()&&this.editing.addHooks()}),this.on("remove",function(){this.editing&&this.editing.enabled()&&this.editing.removeHooks()})}),e.Control=e.Class.extend({options:{position:"topright"},initialize:function(t){e.setOptions(this,t)},getPosition:function(){return this.options.position},setPosition:function(t){var i=this._map;return i&&i.removeControl(this),this.options.position=t,i&&i.addControl(this),this},addTo:function(t){this._map=t;var i=this._container=this.onAdd(t),s=this.getPosition(),o=t._controlCorners[s];return e.DomUtil.addClass(i,"leaflet-control"),-1!==s.indexOf("bottom")?o.insertBefore(i,o.firstChild):o.appendChild(i),this},removeFrom:function(t){var i=this.getPosition(),s=t._controlCorners[i];return s.removeChild(this._container),this._map=null,this.onRemove&&this.onRemove(t),this}}),e.control=function(t){return new e.Control(t)},e.Map.include({addControl:function(t){return t.addTo(this),this},removeControl:function(t){return t.removeFrom(this),this},_initControlPos:function(){function t(t,n){var a=s+t+" "+s+n;i[t+n]=e.DomUtil.create("div",a,o)}var i=this._controlCorners={},s="leaflet-",o=this._controlContainer=e.DomUtil.create("div",s+"control-container",this._container);t("top","left"),t("top","right"),t("bottom","left"),t("bottom","right")}}),e.Control.Zoom=e.Control.extend({options:{position:"topleft"},onAdd:function(t){var i="leaflet-control-zoom",s="leaflet-bar",o=s+"-part",n=e.DomUtil.create("div",i+" "+s);return this._map=t,this._zoomInButton=this._createButton("+","Zoom in",i+"-in "+o+" "+o+"-top",n,this._zoomIn,this),this._zoomOutButton=this._createButton("-","Zoom out",i+"-out "+o+" "+o+"-bottom",n,this._zoomOut,this),t.on("zoomend",this._updateDisabled,this),n},onRemove:function(t){t.off("zoomend",this._updateDisabled,this)},_zoomIn:function(t){this._map.zoomIn(t.shiftKey?3:1)},_zoomOut:function(t){this._map.zoomOut(t.shiftKey?3:1)},_createButton:function(t,i,s,o,n,a){var r=e.DomUtil.create("a",s,o);r.innerHTML=t,r.href="#",r.title=i;var h=e.DomEvent.stopPropagation;return e.DomEvent.on(r,"click",h).on(r,"mousedown",h).on(r,"dblclick",h).on(r,"click",e.DomEvent.preventDefault).on(r,"click",n,a),r},_updateDisabled:function(){var t=this._map,i="leaflet-control-zoom-disabled";e.DomUtil.removeClass(this._zoomInButton,i),e.DomUtil.removeClass(this._zoomOutButton,i),t._zoom===t.getMinZoom()&&e.DomUtil.addClass(this._zoomOutButton,i),t._zoom===t.getMaxZoom()&&e.DomUtil.addClass(this._zoomInButton,i)}}),e.Map.mergeOptions({zoomControl:!0}),e.Map.addInitHook(function(){this.options.zoomControl&&(this.zoomControl=new e.Control.Zoom,this.addControl(this.zoomControl))}),e.control.zoom=function(t){return new e.Control.Zoom(t)},e.Control.Attribution=e.Control.extend({options:{position:"bottomright",prefix:'Powered by Leaflet'},initialize:function(t){e.setOptions(this,t),this._attributions={}},onAdd:function(t){return this._container=e.DomUtil.create("div","leaflet-control-attribution"),e.DomEvent.disableClickPropagation(this._container),t.on("layeradd",this._onLayerAdd,this).on("layerremove",this._onLayerRemove,this),this._update(),this._container},onRemove:function(t){t.off("layeradd",this._onLayerAdd).off("layerremove",this._onLayerRemove)},setPrefix:function(t){return this.options.prefix=t,this._update(),this},addAttribution:function(t){return t?(this._attributions[t]||(this._attributions[t]=0),this._attributions[t]++,this._update(),this):s},removeAttribution:function(t){return t?(this._attributions[t]--,this._update(),this):s},_update:function(){if(this._map){var t=[];for(var i in this._attributions)this._attributions.hasOwnProperty(i)&&this._attributions[i]&&t.push(i);var s=[];this.options.prefix&&s.push(this.options.prefix),t.length&&s.push(t.join(", ")),this._container.innerHTML=s.join(" — ")}},_onLayerAdd:function(t){t.layer.getAttribution&&this.addAttribution(t.layer.getAttribution())},_onLayerRemove:function(t){t.layer.getAttribution&&this.removeAttribution(t.layer.getAttribution())}}),e.Map.mergeOptions({attributionControl:!0}),e.Map.addInitHook(function(){this.options.attributionControl&&(this.attributionControl=(new e.Control.Attribution).addTo(this))}),e.control.attribution=function(t){return new e.Control.Attribution(t)},e.Control.Scale=e.Control.extend({options:{position:"bottomleft",maxWidth:100,metric:!0,imperial:!0,updateWhenIdle:!1},onAdd:function(t){this._map=t;var i="leaflet-control-scale",s=e.DomUtil.create("div",i),o=this.options;return this._addScales(o,i,s),t.on(o.updateWhenIdle?"moveend":"move",this._update,this),t.whenReady(this._update,this),s},onRemove:function(t){t.off(this.options.updateWhenIdle?"moveend":"move",this._update,this)},_addScales:function(t,i,s){t.metric&&(this._mScale=e.DomUtil.create("div",i+"-line",s)),t.imperial&&(this._iScale=e.DomUtil.create("div",i+"-line",s))},_update:function(){var t=this._map.getBounds(),i=t.getCenter().lat,s=6378137*Math.PI*Math.cos(i*Math.PI/180),e=s*(t.getNorthEast().lng-t.getSouthWest().lng)/180,o=this._map.getSize(),n=this.options,a=0;o.x>0&&(a=e*(n.maxWidth/o.x)),this._updateScales(n,a)},_updateScales:function(t,i){t.metric&&i&&this._updateMetric(i),t.imperial&&i&&this._updateImperial(i)},_updateMetric:function(t){var i=this._getRoundNum(t);this._mScale.style.width=this._getScaleWidth(i/t)+"px",this._mScale.innerHTML=1e3>i?i+" m":i/1e3+" km"},_updateImperial:function(t){var i,s,e,o=3.2808399*t,n=this._iScale;o>5280?(i=o/5280,s=this._getRoundNum(i),n.style.width=this._getScaleWidth(s/i)+"px",n.innerHTML=s+" mi"):(e=this._getRoundNum(o),n.style.width=this._getScaleWidth(e/o)+"px",n.innerHTML=e+" ft")},_getScaleWidth:function(t){return Math.round(this.options.maxWidth*t)-10},_getRoundNum:function(t){var i=Math.pow(10,(Math.floor(t)+"").length-1),s=t/i;return s=s>=10?10:s>=5?5:s>=3?3:s>=2?2:1,i*s}}),e.control.scale=function(t){return new e.Control.Scale(t)},e.Control.Layers=e.Control.extend({options:{collapsed:!0,position:"topright",autoZIndex:!0},initialize:function(t,i,s){e.setOptions(this,s),this._layers={},this._lastZIndex=0,this._handlingClick=!1;for(var o in t)t.hasOwnProperty(o)&&this._addLayer(t[o],o);for(o in i)i.hasOwnProperty(o)&&this._addLayer(i[o],o,!0)},onAdd:function(t){return this._initLayout(),this._update(),t.on("layeradd",this._onLayerChange,this).on("layerremove",this._onLayerChange,this),this._container},onRemove:function(t){t.off("layeradd",this._onLayerChange).off("layerremove",this._onLayerChange)},addBaseLayer:function(t,i){return this._addLayer(t,i),this._update(),this},addOverlay:function(t,i){return this._addLayer(t,i,!0),this._update(),this},removeLayer:function(t){var i=e.stamp(t);return delete this._layers[i],this._update(),this},_initLayout:function(){var t="leaflet-control-layers",i=this._container=e.DomUtil.create("div",t);e.Browser.touch?e.DomEvent.on(i,"click",e.DomEvent.stopPropagation):(e.DomEvent.disableClickPropagation(i),e.DomEvent.on(i,"mousewheel",e.DomEvent.stopPropagation));var s=this._form=e.DomUtil.create("form",t+"-list");if(this.options.collapsed){e.DomEvent.on(i,"mouseover",this._expand,this).on(i,"mouseout",this._collapse,this);var o=this._layersLink=e.DomUtil.create("a",t+"-toggle",i);o.href="#",o.title="Layers",e.Browser.touch?e.DomEvent.on(o,"click",e.DomEvent.stopPropagation).on(o,"click",e.DomEvent.preventDefault).on(o,"click",this._expand,this):e.DomEvent.on(o,"focus",this._expand,this),this._map.on("movestart",this._collapse,this)}else this._expand();this._baseLayersList=e.DomUtil.create("div",t+"-base",s),this._separator=e.DomUtil.create("div",t+"-separator",s),this._overlaysList=e.DomUtil.create("div",t+"-overlays",s),i.appendChild(s)},_addLayer:function(t,i,s){var o=e.stamp(t);this._layers[o]={layer:t,name:i,overlay:s},this.options.autoZIndex&&t.setZIndex&&(this._lastZIndex++,t.setZIndex(this._lastZIndex))},_update:function(){if(this._container){this._baseLayersList.innerHTML="",this._overlaysList.innerHTML="";var t=!1,i=!1;for(var s in this._layers)if(this._layers.hasOwnProperty(s)){var e=this._layers[s];this._addItem(e),i=i||e.overlay,t=t||!e.overlay}this._separator.style.display=i&&t?"":"none"}},_onLayerChange:function(t){var i=e.stamp(t.layer);this._layers[i]&&!this._handlingClick&&this._update()},_createRadioElement:function(t,s){var e='t;t++)i=o[t],s=this._layers[i.layerId],i.checked&&!this._map.hasLayer(s.layer)?(this._map.addLayer(s.layer),s.overlay||(e=s.layer)):!i.checked&&this._map.hasLayer(s.layer)&&this._map.removeLayer(s.layer);e&&(this._map.setZoom(this._map.getZoom()),this._map.fire("baselayerchange",{layer:e})),this._handlingClick=!1},_expand:function(){e.DomUtil.addClass(this._container,"leaflet-control-layers-expanded")},_collapse:function(){this._container.className=this._container.className.replace(" leaflet-control-layers-expanded","")}}),e.control.layers=function(t,i,s){return new e.Control.Layers(t,i,s)},e.PosAnimation=e.Class.extend({includes:e.Mixin.Events,run:function(t,i,s,o){this.stop(),this._el=t,this._inProgress=!0,this.fire("start"),t.style[e.DomUtil.TRANSITION]="all "+(s||.25)+"s cubic-bezier(0,0,"+(o||.5)+",1)",e.DomEvent.on(t,e.DomUtil.TRANSITION_END,this._onTransitionEnd,this),e.DomUtil.setPosition(t,i),e.Util.falseFn(t.offsetWidth),this._stepTimer=setInterval(e.bind(this.fire,this,"step"),50)},stop:function(){this._inProgress&&(e.DomUtil.setPosition(this._el,this._getPos()),this._onTransitionEnd(),e.Util.falseFn(this._el.offsetWidth))},_transformRe:/(-?[\d\.]+), (-?[\d\.]+)\)/,_getPos:function(){var i,s,o,n=this._el,a=t.getComputedStyle(n);return e.Browser.any3d?(o=a[e.DomUtil.TRANSFORM].match(this._transformRe),i=parseFloat(o[1]),s=parseFloat(o[2])):(i=parseFloat(a.left),s=parseFloat(a.top)),new e.Point(i,s,!0)},_onTransitionEnd:function(){e.DomEvent.off(this._el,e.DomUtil.TRANSITION_END,this._onTransitionEnd,this),this._inProgress&&(this._inProgress=!1,this._el.style[e.DomUtil.TRANSITION]="",clearInterval(this._stepTimer),this.fire("step").fire("end"))}}),e.Map.include({setView:function(t,i,s){i=this._limitZoom(i);var e=this._zoom!==i;if(this._loaded&&!s&&this._layers){this._panAnim&&this._panAnim.stop();var o=e?this._zoomToIfClose&&this._zoomToIfClose(t,i):this._panByIfClose(t);if(o)return clearTimeout(this._sizeTimer),this}return this._resetView(t,i),this},panBy:function(t,i,s){if(t=e.point(t),!t.x&&!t.y)return this;this._panAnim||(this._panAnim=new e.PosAnimation,this._panAnim.on({step:this._onPanTransitionStep,end:this._onPanTransitionEnd},this)),this.fire("movestart"),e.DomUtil.addClass(this._mapPane,"leaflet-pan-anim");var o=e.DomUtil.getPosition(this._mapPane).subtract(t)._round();return this._panAnim.run(this._mapPane,o,i||.25,s),this},_onPanTransitionStep:function(){this.fire("move")},_onPanTransitionEnd:function(){e.DomUtil.removeClass(this._mapPane,"leaflet-pan-anim"),this.fire("moveend")},_panByIfClose:function(t){var i=this._getCenterOffset(t)._floor();return this._offsetIsWithinView(i)?(this.panBy(i),!0):!1},_offsetIsWithinView:function(t,i){var s=i||1,e=this.getSize();return Math.abs(t.x)<=e.x*s&&Math.abs(t.y)<=e.y*s}}),e.PosAnimation=e.DomUtil.TRANSITION?e.PosAnimation:e.PosAnimation.extend({run:function(t,i,s,o){this.stop(),this._el=t,this._inProgress=!0,this._duration=s||.25,this._easeOutPower=1/Math.max(o||.5,.2),this._startPos=e.DomUtil.getPosition(t),this._offset=i.subtract(this._startPos),this._startTime=+new Date,this.fire("start"),this._animate()},stop:function(){this._inProgress&&(this._step(),this._complete())},_animate:function(){this._animId=e.Util.requestAnimFrame(this._animate,this),this._step()},_step:function(){var t=+new Date-this._startTime,i=1e3*this._duration;i>t?this._runFrame(this._easeOut(t/i)):(this._runFrame(1),this._complete())},_runFrame:function(t){var i=this._startPos.add(this._offset.multiplyBy(t));e.DomUtil.setPosition(this._el,i),this.fire("step")},_complete:function(){e.Util.cancelAnimFrame(this._animId),this._inProgress=!1,this.fire("end")},_easeOut:function(t){return 1-Math.pow(1-t,this._easeOutPower)}}),e.Map.mergeOptions({zoomAnimation:e.DomUtil.TRANSITION&&!e.Browser.android23&&!e.Browser.mobileOpera}),e.DomUtil.TRANSITION&&e.Map.addInitHook(function(){e.DomEvent.on(this._mapPane,e.DomUtil.TRANSITION_END,this._catchTransitionEnd,this)}),e.Map.include(e.DomUtil.TRANSITION?{_zoomToIfClose:function(t,i){if(this._animatingZoom)return!0;if(!this.options.zoomAnimation)return!1;var s=this.getZoomScale(i),o=this._getCenterOffset(t)._divideBy(1-1/s);if(!this._offsetIsWithinView(o,1))return!1;e.DomUtil.addClass(this._mapPane,"leaflet-zoom-anim"),this.fire("movestart").fire("zoomstart"),this.fire("zoomanim",{center:t,zoom:i});var n=this._getCenterLayerPoint().add(o);return this._prepareTileBg(),this._runAnimation(t,i,s,n),!0},_catchTransitionEnd:function(){this._animatingZoom&&this._onZoomTransitionEnd()},_runAnimation:function(t,i,s,o,n){this._animateToCenter=t,this._animateToZoom=i,this._animatingZoom=!0,e.Draggable&&(e.Draggable._disabled=!0);var a=e.DomUtil.TRANSFORM,r=this._tileBg;clearTimeout(this._clearTileBgTimer),e.Util.falseFn(r.offsetWidth);var h=e.DomUtil.getScaleString(s,o),l=r.style[a];r.style[a]=n?l+" "+h:h+" "+l},_prepareTileBg:function(){var t=this._tilePane,i=this._tileBg;if(i&&this._getLoadedTilesPercentage(i)>.5&&.5>this._getLoadedTilesPercentage(t))return t.style.visibility="hidden",t.empty=!0,this._stopLoadingImages(t),s;i||(i=this._tileBg=this._createPane("leaflet-tile-pane",this._mapPane),i.style.zIndex=1),i.style[e.DomUtil.TRANSFORM]="",i.style.visibility="hidden",i.empty=!0,t.empty=!1,this._tilePane=this._panes.tilePane=i;var o=this._tileBg=t;e.DomUtil.addClass(o,"leaflet-zoom-animated"),this._stopLoadingImages(o)},_getLoadedTilesPercentage:function(t){var i,s,e=t.getElementsByTagName("img"),o=0;for(i=0,s=e.length;s>i;i++)e[i].complete&&o++;return o/s},_stopLoadingImages:function(t){var i,s,o,n=Array.prototype.slice.call(t.getElementsByTagName("img"));for(i=0,s=n.length;s>i;i++)o=n[i],o.complete||(o.onload=e.Util.falseFn,o.onerror=e.Util.falseFn,o.src=e.Util.emptyImageUrl,o.parentNode.removeChild(o))},_onZoomTransitionEnd:function(){this._restoreTileFront(),e.DomUtil.removeClass(this._mapPane,"leaflet-zoom-anim"),e.Util.falseFn(this._tileBg.offsetWidth),this._animatingZoom=!1,this._resetView(this._animateToCenter,this._animateToZoom,!0,!0),e.Draggable&&(e.Draggable._disabled=!1)},_restoreTileFront:function(){this._tilePane.innerHTML="",this._tilePane.style.visibility="",this._tilePane.style.zIndex=2,this._tileBg.style.zIndex=1},_clearTileBg:function(){this._animatingZoom||this.touchZoom._zooming||(this._tileBg.innerHTML="")}}:{}),e.Map.include({_defaultLocateOptions:{watch:!1,setView:!1,maxZoom:1/0,timeout:1e4,maximumAge:0,enableHighAccuracy:!1},locate:function(t){if(t=this._locationOptions=e.extend(this._defaultLocateOptions,t),!navigator.geolocation)return this._handleGeolocationError({code:0,message:"Geolocation not supported."}),this;var i=e.bind(this._handleGeolocationResponse,this),s=e.bind(this._handleGeolocationError,this);return t.watch?this._locationWatchId=navigator.geolocation.watchPosition(i,s,t):navigator.geolocation.getCurrentPosition(i,s,t),this},stopLocate:function(){return navigator.geolocation&&navigator.geolocation.clearWatch(this._locationWatchId),this},_handleGeolocationError:function(t){var i=t.code,s=t.message||(1===i?"permission denied":2===i?"position unavailable":"timeout");this._locationOptions.setView&&!this._loaded&&this.fitWorld(),this.fire("locationerror",{code:i,message:"Geolocation error: "+s+"."})},_handleGeolocationResponse:function(t){var i=180*t.coords.accuracy/4e7,s=2*i,o=t.coords.latitude,n=t.coords.longitude,a=new e.LatLng(o,n),r=new e.LatLng(o-i,n-s),h=new e.LatLng(o+i,n+s),l=new e.LatLngBounds(r,h),c=this._locationOptions;if(c.setView){var m=Math.min(this.getBoundsZoom(l),c.maxZoom);this.setView(a,m)}this.fire("locationfound",{latlng:a,bounds:l,accuracy:t.coords.accuracy})}})}(this,document),L.Proj={},L.Proj._isProj4Proj=function(t){return t.projName!==void 0},L.Proj.Projection=L.Class.extend({initialize:function(t,i){if(L.Proj._isProj4Proj(t))this._proj=t;else{var s=t;Proj4js.defs[s]=i,this._proj=new Proj4js.Proj(s)}},project:function(t){var i=new L.Point(t.lng,t.lat);return Proj4js.transform(Proj4js.WGS84,this._proj,i)},unproject:function(t,i){var s=Proj4js.transform(this._proj,Proj4js.WGS84,t.clone());return new L.LatLng(s.y,s.x,i)}}),L.Proj.CRS=L.Class.extend({includes:L.CRS,options:{transformation:new L.Transformation(1,0,-1,0)},initialize:function(t,i,s){var e,o,n,a;L.Proj._isProj4Proj(t)?(o=t,e=o.srsCode,a=i||{},this.projection=new L.Proj.Projection(o)):(e=t,n=i,a=s||{},this.projection=new L.Proj.Projection(e,n)),L.Util.setOptions(this,a),this.code=e,this.transformation=this.options.transformation,this.options.origin&&(this.transformation=new L.Transformation(1,-this.options.origin[0],-1,this.options.origin[1])),this.options.scales?this.scale=function(t){return this.options.scales[t]}:this.options.resolutions&&(this.scale=function(t){return 1/this.options.resolutions[t]})}}),L.Proj.CRS.TMS=L.Proj.CRS.extend({initialize:function(t,i,s,e){if(L.Proj._isProj4Proj(t)){var o=t,n=i,a=s||{};a.origin=[n[0],n[3]],L.Proj.CRS.prototype.initialize(o,a)}else{var r=t,h=i,n=s,a=e||{};a.origin=[n[0],n[3]],L.Proj.CRS.prototype.initialize(r,h,a)}this.projectedBounds=n}}),L.Proj.TileLayer={},L.Proj.TileLayer.TMS=L.TileLayer.extend({options:{tms:!0,continuousWorld:!0},initialize:function(t,i,s){if(!(i instanceof L.Proj.CRS.TMS))throw Error("CRS is not L.Proj.CRS.TMS.");L.TileLayer.prototype.initialize.call(this,t,s),this.crs=i;for(var e=this.options.minZoom;this.options.maxZoom>e;e++){var o=(this.crs.projectedBounds[3]-this.crs.projectedBounds[1])/this._projectedTileSize(e);if(Math.abs(o-Math.round(o))>.001)throw Error("Projected bounds does not match grid at zoom "+e)}},getTileUrl:function(t){var i=Math.round((this.crs.projectedBounds[3]-this.crs.projectedBounds[1])/this._projectedTileSize(this._map.getZoom()));return L.Util.template(this._url,L.Util.extend({s:this._getSubdomain(t),z:this._getZoomForUrl(),x:t.x,y:i-t.y-1},this.options))},_projectedTileSize:function(t){return this.options.tileSize/this.crs.scale(t)}}),"undefined"!=typeof module&&(module.exports=L.Proj),"undefined"!=typeof L&&L.CRS!==void 0&&(L.CRS.proj4js=function(){return function(t,i,s,e){return e=e||{},s&&(e.transformation=s),new L.Proj.CRS(t,i,e)}}()),L.Control.MousePosition=L.Control.extend({options:{position:"bottomleft",separator:" : ",emptyString:"Unavailable",lngFirst:!1,numDigits:5,lngFormatter:void 0,latFormatter:void 0},onAdd:function(t){return this._container=L.DomUtil.create("div","leaflet-control-mouseposition"),L.DomEvent.disableClickPropagation(this._container),t.on("mousemove",this._onMouseMove,this),this._container.innerHTML=this.options.emptyString,this._container},onRemove:function(t){t.off("mousemove",this._onMouseMove)},_onMouseMove:function(t){var i=L.Util.formatNum(t.latlng.lng,this.options.numDigits),s=L.Util.formatNum(t.latlng.lat,this.options.numDigits);this.options.lngFormatter&&(i=this.options.lngFormatter(i)),this.options.latFormatter&&(s=this.options.latFormatter(s));var e=this.options.lngFirst?i+this.options.separator+s:s+this.options.separator+i;this._container.innerHTML=e}}),L.Map.mergeOptions({positionControl:!1}),L.Map.addInitHook(function(){this.options.positionControl&&(this.positionControl=new L.Control.MousePosition,this.addControl(this.positionControl))}),L.control.mousePosition=function(t){return new L.Control.MousePosition(t)},function(t,i){L.KSP={},L.KSP.version="0.2.1",L.KSP.CRS={},L.KSP.CRS.EPSG4326=new L.Proj.CRS.TMS(new Proj4js.Proj("EPSG:4326"),[-180,-90,180,90],{resolutions:[.703125,.3515625,.17578125,.087890625,.0439453125,.02197265625]}),L.KSP.CelestialBody=L.Class.extend({initialize:function(t){if(!t.hasOwnProperty("id"))throw Error("must specify id");if(!t.hasOwnProperty("name"))throw Error("must specify name");if(t.hasOwnProperty("crs")){if(!(t.crs instanceof L.Proj.CRS.TMS))throw Error("crs is not an instance of L.Proj.CRS.TMS")}else this.crs=L.KSP.CRS.EPSG4326;t.hasOwnProperty("radius")||(this.radius=1),t.hasOwnProperty("thumbnail")||(this.thumbnail="body-unknown.png"),t.hasOwnProperty("baseLayers")||(this.baseLayers={}),L.Util.extend(this,t)},addTo:function(t){var i,s=t._body;if(t._body=this,t.fire("bodychangestart",{body:this,oldBody:s}),s){for(i in s.baseLayers)s.baseLayers.hasOwnProperty(i)&&t.removeLayer(s.baseLayers[i]);for(i in s.overlays)s.overlays.hasOwnProperty(i)&&t.removeLayer(s.overlays[i])}var e=this.defaultLayer||this.baseLayers.Satellite;if(e){for(i in this.baseLayers)if(this.baseLayers.hasOwnProperty(i)&&this.baseLayers[i]._type===t._baseLayerType){e=this.baseLayers[i];break}t.addLayer(e),t.fire("baselayerchange",{layer:e})}for(i in this.overlays)this.overlays.hasOwnProperty(i)&&t._overlayTypes.indexOf(this.overlays[i]._type)>=0&&(t.addLayer(this.overlays[i]),t.fire("layeradd",{layer:this.overlays[i]}));t.fire("bodychangeend",{body:this,oldBody:s})},onAdd:function(t){this.addTo(t)},removeFrom:function(t){L.KSP.CelestialBody.DUMMY.addTo(t)},onRemove:function(t){this.removeFrom(t)}}),L.KSP.celestialBody=function(t){return new L.KSP.CelestialBody(t)},L.KSP.CelestialBody.DUMMY=L.KSP.celestialBody({id:"",name:"",crs:L.KSP.CRS.EPSG4326}),L.KSP.CelestialBody.ALL_PLANETARY=[L.KSP.CelestialBody.DUMMY],L.KSP.Map=L.Map.extend({options:{crs:L.KSP.CRS.EPSG4326,continuousWorld:!0},initialize:function(t,i){this._baseLayerType=-1,this._overlayTypes=[],L.Util.setOptions(this,i),this.startTrackingLayerState(),this.on("bodychangestart",this._onBodyChangeStart).on("bodychangeend",this._onBodyChangeEnd),L.Map.prototype.initialize.call(this,t,this.options)},clampZoom:function(){var t=this.getZoom(),i=this.getMinZoom(),s=this.getMaxZoom();i>t?this.setZoom(i):t>s?this.setZoom(s):this.fire("zoomend",this)},_onBodyChangeStart:function(){this.stopTrackingLayerState()},_onBodyChangeEnd:function(){this.clampZoom(),this.startTrackingLayerState()},_onLayerStateChange:function(t){if("layeradd"===t.type)t.layer instanceof L.KSP.TileLayer?this._baseLayerType=t.layer._type:t.layer instanceof L.KSP.LayerGroup&&0>this._overlayTypes.indexOf(t.layer._type)&&this._overlayTypes.push(t.layer._type);else if(t.layer instanceof L.KSP.LayerGroup){var i,s,e=t.layer._type,o=this._overlayTypes;for(i=o.length-1;i>=0;i--)s=o[i],s===e&&o.splice(i,1)}},startTrackingLayerState:function(){this.on("layeradd",this._onLayerStateChange).on("layerremove",this._onLayerStateChange)},stopTrackingLayerState:function(){this.off("layeradd",this._onLayerStateChange).off("layerremove",this._onLayerStateChange)}}),L.KSP.map=function(t,i){return new L.KSP.Map(t,i)},L.KSP.TileLayer=L.Proj.TileLayer.TMS.extend({statics:{TYPE_SATELLITE:0,TYPE_COLORRELIEF:1,TYPE_SLOPE:2,DEFAULT_URL:"http://tiles.kerbalmaps.com/{body}/{style}/{z}/{x}/{y}.png"},options:{continuousWorld:!1,noWrap:!1,minZoom:0,maxZoom:5,attribution:"Map data © Joel Pedraza"},initialize:function(t,i,s,e){L.Util.setOptions(this,e),this._type=t,L.Proj.TileLayer.TMS.prototype.initialize.call(this,i,s,this.options)}}),L.KSP.tileLayer=function(t,i,s,e){return new L.KSP.TileLayer(t,i,s,e)},L.KSP.LayerGroup=L.LayerGroup.extend({statics:{TYPE_SPACECENTER:0,TYPE_ANOMALY:1},initialize:function(t,i){this._type=t,L.LayerGroup.prototype.initialize.call(this,i)}}),L.KSP.layerGroup=function(t,i){return new L.KSP.LayerGroup(t,i)},L.KSP.Icon={},L.KSP.Icon.SPACECENTER=new L.Icon({iconUrl:"../assets/images/markers-spacecenter.png",shadowUrl:"../assets/images/markers-shadow.png",iconSize:[30,40],shadowSize:[35,16],iconAnchor:[15,40],shadowAnchor:[10,12],popupAnchor:[0,-35]}),L.KSP.Icon.ANOMALY=new L.Icon({iconUrl:"../assets/images/markers-anomaly.png",shadowUrl:"../assets/images/markers-shadow.png",iconSize:[30,40],shadowSize:[35,16],iconAnchor:[15,40],shadowAnchor:[10,12],popupAnchor:[0,-35]}),L.KSP.Legend={},L.KSP.Legend.SLOPE={"≥ 60°":"#E19678","< 60°":"#C86464","< 30°":"#965A64","< 15°":"#645064","< 5°":"#325064","0°":"#32465A"},L.KSP.Control=L.KSP.control={},L.KSP.Control.Legend=L.Control.extend({options:{position:"bottomright"},onAdd:function(t){return this._container=L.DomUtil.create("div","leaflet-control-legend"),t.on("baselayerchange",this._onLayerChange,this),this._container},_update:function(t){if(this._container.innerHTML="",t){for(var i in t)t.hasOwnProperty(i)&&(this._container.innerHTML+=''+i+"
    ");L.DomUtil.addClass(this._container,"leaflet-control-legend-visible")}else this._container.className=this._container.className.replace(" leaflet-control-legend-visible","")},_onLayerChange:function(t){this._update(t.layer.options.legend)}}),L.Map.mergeOptions({legendControl:!0}),L.Map.addInitHook(function(){this.options.bodyControl&&(this.legendControl=new L.KSP.Control.Legend,this.addControl(this.legendControl))}),L.control.legend=function(t){return new L.KSP.Control.Legend(t)},L.KSP.Control.Scale=L.Control.Scale.extend({options:{imperial:!1},onAdd:function(t){this._radius=0,t._body&&(this._radius=t._body.radius);var i=L.Control.Scale.prototype.onAdd.call(this,t);return t.on("bodychangeend",this._onBodyChangeEnd,this),i},onRemove:function(t){L.Control.Scale.prototype.onRemove.call(this,t),t.off("bodychangeend",this._onBodyChangeEnd)},_onBodyChangeEnd:function(t){this._radius=t.body.radius,this._update()},_update:function(){var t=this._map.getBounds(),i=t.getCenter().lat,s=this._radius*Math.PI*Math.cos(i*Math.PI/180),e=s*(t.getNorthEast().lng-t.getSouthWest().lng)/180,o=this._map.getSize(),n=this.options,a=0;o.x>0&&(a=e*(n.maxWidth/o.x)),this._updateScales(n,a)}}),L.KSP.Map.mergeOptions({scaleControl:!1}),L.KSP.Map.addInitHook(function(){this.options.scaleControl&&(this.scaleControl=new L.KSP.Control.Scale,this.addControl(this.scaleControl))}),L.KSP.control.scale=function(t){return new L.KSP.Control.Scale(t)},L.KSP.Control.CelestialBody=L.Control.extend({options:{position:"topright",collapsed:!0},initialize:function(t,i){L.Util.setOptions(this,i),this._bodies=t,this._timeInMillis=(new Date).valueOf(),this._weekInMillis=6048e5},onAdd:function(){return this._initLayout(),this._update(),this._map.on("bodychangeend",this._update,this),this._container},_initLayout:function(){var t="leaflet-control-celestialbodies",s=this._container=L.DomUtil.create("div",t),e=this._bodies;if(this.options.collapsed){L.DomEvent.on(s,"mouseover",this._expand,this).on(s,"mouseout",this._collapse,this);var o=this._bodiesLink=L.DomUtil.create("a",t+"-toggle",s);o.href="#",o.title="Celestial Bodies",L.DomEvent.on(o,"focus",this._expand,this),this._map.on("movestart",this._collapse,this)}var n=this._list=L.DomUtil.create("ul",t+"-list",s);for(var a in e)if(e.hasOwnProperty(a)){var r=this._addBody(e[a],n);if(e[a].children){var h=i.createElement("ul");for(var l in e[a].children)e[a].children.hasOwnProperty(l)&&this._addBody(e[a].children[l],h);r.appendChild(h)}}},_update:function(){this._map._body&&(this._bodiesLink.style.backgroundImage='url("'+this._map._body.thumbnail+'")')},_addBody:function(t,s){var e,o=i.createElement("li"),n=i.createElement("img");if(n.src=t.thumbnail,n.alt=o.title=t.name,t.addedOn){this._timeInMillis-t.addedOnKerbal Space Center
    -0.0969 : -74.6004"),L.marker([20.5829,-146.5116],{icon:L.KSP.Icon.SPACECENTER}).bindPopup("Kerbal Space Center 2
    20.5829 : -146.5116"),L.marker([-1.5409,-71.9099],{icon:L.KSP.Icon.SPACECENTER}).bindPopup("Island Airfield
    -1.5409 : -71.9099")]),Anomalies:L.KSP.layerGroup(L.KSP.LayerGroup.TYPE_ANOMALY,[L.marker([.1023,-74.5684],{icon:L.KSP.Icon.ANOMALY}).bindPopup("0.1023 : -74.5684"),L.marker([20.6709,-146.4968],{icon:L.KSP.Icon.ANOMALY}).bindPopup("20.6709 : -146.4968"),L.marker([35.5705,-74.9773],{icon:L.KSP.Icon.ANOMALY}).bindPopup("35.5705 : -74.9773"),L.marker([-.6402,-80.7668],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-0.6402 : -80.7668"),L.marker([-28.8083,-13.4401],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-28.8083 : -13.4401"),L.marker([-6.5057,-141.6856],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-6.5057 : -141.6856"),L.marker([81.9551,-128.518],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-81.9551 : -128.518")])}}),L.KSP.CelestialBody.MUN=L.KSP.celestialBody({id:"mun",name:"Mun",crs:L.KSP.CRS.EPSG4326,radius:2e5,addedOn:13682304e5,lastUpdated:1368144e6,thumbnail:"body-mun.png",baseLayers:{Satellite:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SATELLITE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{body:"mun",style:"sat"}),"Color Relief":L.KSP.tileLayer(L.KSP.TileLayer.TYPE_COLORRELIEF,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{body:"mun",style:"color",legend:{"3150 m":"#EBEBEB","-180 m":"#232323"}}),Slope:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SLOPE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{body:"mun",style:"slope",legend:L.KSP.Legend.SLOPE})},overlays:{Anomalies:L.KSP.layerGroup(L.KSP.LayerGroup.TYPE_ANOMALY,[L.marker([-9.8314,25.9177],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-9.8314 : 25.9177"),L.marker([-82.2063,102.9305],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-82.2063 : 102.9305"),L.marker([57.6604,9.1422],{icon:L.KSP.Icon.ANOMALY}).bindPopup("57.6604 : 9.1422"),L.marker([2.4695,81.5133],{icon:L.KSP.Icon.ANOMALY}).bindPopup("2.4695 : 81.5133"),L.marker([12.4432,39.178],{icon:L.KSP.Icon.ANOMALY}).bindPopup("12.4432 : 39.1780"),L.marker([-12.4431,-140.822],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-12.4431 : -140.8220"),L.marker([.7027,22.747],{icon:L.KSP.Icon.ANOMALY}).bindPopup("0.7027 : 22.7470"),L.marker([-70.9556,-68.1378],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-70.9556,-68.1378")])}}),L.KSP.CelestialBody.MINMUS=L.KSP.celestialBody({id:"minmus",name:"Minmus",crs:L.KSP.CRS.EPSG4326,radius:6e4,addedOn:13682304e5,lastUpdated:13682304e5,thumbnail:"body-minmus.png",baseLayers:{Satellite:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SATELLITE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"sat",body:"minmus"}),"Color Relief":L.KSP.tileLayer(L.KSP.TileLayer.TYPE_COLORRELIEF,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"color",body:"minmus",legend:{"5750 m":"#414B41","2500 m":"#BEE6C3","1 m":"#96CDB4","0 m":"#87B9A5"}}),Slope:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SLOPE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"slope",body:"minmus",legend:L.KSP.Legend.SLOPE})},overlays:{Anomalies:L.KSP.layerGroup(L.KSP.LayerGroup.TYPE_ANOMALY,[L.marker([23.7768,60.0462],{icon:L.KSP.Icon.ANOMALY}).bindPopup("23.7768 : 60.0462")])}}),L.KSP.CelestialBody.DUNA=L.KSP.celestialBody({id:"duna",name:"Duna",crs:L.KSP.CRS.EPSG4326,radius:32e4,addedOn:13688352e5,lastUpdated:13688352e5,thumbnail:"body-duna.png",baseLayers:{Satellite:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SATELLITE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"sat",body:"duna"}),"Color Relief":L.KSP.tileLayer(L.KSP.TileLayer.TYPE_COLORRELIEF,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"color",body:"duna",legend:{"4800 m":"#C3A082","4000 m":"#966446","3000 m":"#733219","2000 m":"#501E14","1000 m":"#3C140F","0 m":"#280F0A"}}),Slope:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SLOPE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"slope",body:"duna",legend:L.KSP.Legend.SLOPE})},overlays:{Anomalies:L.KSP.layerGroup(L.KSP.LayerGroup.TYPE_ANOMALY,[L.marker([17.0483,-85.4717],{icon:L.KSP.Icon.ANOMALY}).bindPopup("17.0483 : -85.4717"),L.marker([-30.3525,-28.6828],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-30.3525 : -28.6828"),L.marker([-66.1344,-160.7432],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-66.1344 : -160.7432")])}}),L.KSP.CelestialBody.IKE=L.KSP.celestialBody({id:"ike",name:"Ike",crs:L.KSP.CRS.EPSG4326,radius:13e4,addedOn:13688352e5,lastUpdated:13688352e5,thumbnail:"body-ike.png",baseLayers:{Satellite:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SATELLITE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"sat",body:"ike"}),"Color Relief":L.KSP.tileLayer(L.KSP.TileLayer.TYPE_COLORRELIEF,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"color",body:"ike",legend:{"13000 m":"#828282","11000 m":"#6E6E6E","9000 m":"#5A5A5A","7000 m":"#464646","5000 m":"#323232","2500 m":"#191919","70 m":"#070707"}}),Slope:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SLOPE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"slope",body:"ike",legend:L.KSP.Legend.SLOPE})},overlays:{}}),L.KSP.CelestialBody.DRES=L.KSP.celestialBody({id:"dres",name:"Dres",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-dres.png"}),L.KSP.CelestialBody.JOOL=L.KSP.celestialBody({id:"jool",name:"Jool",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-jool.png"}),L.KSP.CelestialBody.LAYTHE=L.KSP.celestialBody({id:"laythe",name:"Laythe",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-laythe.png"}),L.KSP.CelestialBody.VALL=L.KSP.celestialBody({id:"vall",name:"Vall",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-vall.png"}),L.KSP.CelestialBody.TYLO=L.KSP.celestialBody({id:"tylo",name:"Tylo",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-tylo.png"}),L.KSP.CelestialBody.BOP=L.KSP.celestialBody({id:"bop",name:"Bop",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-bop.png"}),L.KSP.CelestialBody.POL=L.KSP.celestialBody({id:"pol",name:"Pol",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-pol.png"}),L.KSP.CelestialBody.EELOO=L.KSP.celestialBody({id:"eeloo",name:"Eeloo",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-eeloo.png"}),L.KSP.CelestialBody.KERBIN.defaultLayer=L.KSP.CelestialBody.KERBIN.baseLayers.Satellite,L.KSP.CelestialBody.MUN.defaultLayer=L.KSP.CelestialBody.MUN.baseLayers.Satellite,L.KSP.CelestialBody.MINMUS.defaultLayer=L.KSP.CelestialBody.MINMUS.baseLayers.Satellite,L.KSP.CelestialBody.EVE.children=[L.KSP.CelestialBody.GILLY],L.KSP.CelestialBody.KERBIN.children=[L.KSP.CelestialBody.MUN,L.KSP.CelestialBody.MINMUS],L.KSP.CelestialBody.DUNA.children=[L.KSP.CelestialBody.IKE],L.KSP.CelestialBody.JOOL.children=[L.KSP.CelestialBody.LAYTHE,L.KSP.CelestialBody.VALL,L.KSP.CelestialBody.TYLO,L.KSP.CelestialBody.BOP,L.KSP.CelestialBody.POL],L.KSP.CelestialBody.GILLY.parent=L.KSP.CelestialBody.EVE,L.KSP.CelestialBody.MUN.parent=L.KSP.CelestialBody.MINMUS.parent=L.KSP.CelestialBody.KERBIN,L.KSP.CelestialBody.IKE.parent=L.KSP.CelestialBody.DUNA,L.KSP.CelestialBody.LAYTHE.parent=L.KSP.CelestialBody.VALL.parent=L.KSP.CelestialBody.TYLO.parent=L.KSP.CelestialBody.BOP.parent=L.KSP.CelestialBody.POL.parent=L.KSP.CelestialBody.JOOL,L.KSP.CelestialBody.ALL_PLANETARY=[L.KSP.CelestialBody.MOHO,L.KSP.CelestialBody.EVE,L.KSP.CelestialBody.KERBIN,L.KSP.CelestialBody.DUNA,L.KSP.CelestialBody.DRES,L.KSP.CelestialBody.JOOL,L.KSP.CelestialBody.EELOO],L.KSP.Map.addInitHook(function(){this.options.layers=[L.KSP.CelestialBody.KERBIN]})}(this,document);var Settings=Class.create({initialize:function(defaultHost,defaultPort){if(!this.getHost()){this.setHost(defaultHost)}if(!this.getPort()){this.setPort(defaultPort)}},getHost:function(){return this.get("host")},getPort:function(){return this.get("port")},setHost:function(value){return this.set("host",value)},setPort:function(value){return this.set("port",value)},get:function(property){return localStorage.getItem(property)},set:function(property,value){return localStorage.setItem(property,value)}});var Telemachus=Class.create({initialize:function(host,port){this.updateConnection(host,port);this.receiverFunctions=[];this.subscribedFields={};this.orbitingBodies=this.getOrbitalBodies();this.rate=500;this.loopTimeout=setTimeout(this.poll.bind(this),this.rate)},url:function(){return"http://"+this.host+":"+this.port+"/telemachus/datalink"},updateConnection:function(host,port){this.host=host;this.port=port},addReceiverFunction:function(func){this.receiverFunctions.push(func)},subscribeToData:function(fields){for(var i=fields.length-1;i>=0;i--){var field=fields[i];this.subscribedFields[field]=field}},dispatchMessages:function(data){for(var i=this.receiverFunctions.length-1;i>=0;i--){try{this.receiverFunctions[i](data)}catch(e){console.error(e)}}},send:function(message){this.socket.send(JSON.stringify(message))},getOrbitalBodyInfo:function(name){var properties=this.orbitingBodies[name];if(properties){return Object.extend({name:name},properties)}else{return null}},notifyIfLOS:function(request){if(request.transport.status==0){document.fire("telemachus:loss-of-signal");return true}return false},prepareParams:function(params){var normalizedParams=[];Object.keys(params).forEach(function(field){var sanitizedFieldName=field.replace("[","{").replace("]","}");normalizedParams.push(sanitizedFieldName+"="+field)});return normalizedParams},convertData:function(rawData){var data={};var startBracesRegexp=/\{/g;var endBracesRegexp=/\}/g;Object.keys(rawData).forEach(function(key){var convertedFieldName=key.replace(startBracesRegexp,"[").replace(endBracesRegexp,"]");data[convertedFieldName]=rawData[key]});return data},poll:function(){var params=this.prepareParams(this.subscribedFields);var requestURL=this.url()+"?"+params.join("&");new Ajax.Request(requestURL,{method:"get",onSuccess:function(response){var rawData=JSON.parse(response.responseText);var data=this.convertData(rawData);this.dispatchMessages(data)}.bind(this),onException:this.notifyIfLOS.bind(this),onComplete:function(response){setTimeout(this.poll.bind(this),this.rate)}.bind(this)})},sendMessage:function(params,callback){new Ajax.Request(this.url(),{method:"post",postBody:JSON.stringify(params),onSuccess:function(response){var rawData=JSON.parse(response.responseText);var data=this.convertData(rawData);callback(data)}.bind(this),onException:this.notifyIfLOS.bind(this)})},getOrbitalBodies:function(){return{Sun:{id:0,referenceBodyName:null,mapBody:null,atmosphericRadius:0,color:"#FFFF00",surfaceGravity:17.1},Kerbin:{id:1,referenceBodyName:"Sun",mapBody:L.KSP.CelestialBody.KERBIN,atmosphericRadius:7e4,color:"#4a5472",surfaceGravity:9.81},Mun:{id:2,referenceBodyName:"Kerbin",mapBody:L.KSP.CelestialBody.MUN,atmosphericRadius:0,color:"#e2e0d7",surfaceGravity:1.63},Minmus:{id:3,referenceBodyName:"Kerbin",mapBody:L.KSP.CelestialBody.MINMUS,color:"#98f2c5",atmosphericRadius:0,surfaceGravity:.491},Moho:{id:4,referenceBodyName:"Sun",mapBody:L.KSP.CelestialBody.MOHO,atmosphericRadius:0,color:"#fdc39e",surfaceGravity:2.7},Eve:{id:5,referenceBodyName:"Sun",mapBody:L.KSP.CelestialBody.EVE,atmosphericRadius:9e4,color:"#c394fe",surfaceGravity:16.7},Duna:{id:6,referenceBodyName:"Sun",mapBody:L.KSP.CelestialBody.DUNA,atmosphericRadius:5e4,color:"#fc5e49",surfaceGravity:2.94},Ike:{id:7,referenceBodyName:"Duna",mapBody:L.KSP.CelestialBody.IKE,atmosphericRadius:0,color:"#e2e0d7",surfaceGravity:1.1},Jool:{id:8,referenceBodyName:"Sun",mapBody:L.KSP.CelestialBody.JOOL,atmosphericRadius:2e5,color:"#C5DCAB",surfaceGravity:7.85},Laythe:{id:9,referenceBodyName:"Jool",mapBody:L.KSP.CelestialBody.LAYTHE,atmosphericRadius:5e4,color:"#a8b4fe",surfaceGravity:7.85},Vall:{id:10,referenceBodyName:"Jool",mapBody:L.KSP.CelestialBody.VALL,atmosphericRadius:0,color:"#b0f4fe",surfaceGravity:2.31},Bop:{id:11,referenceBodyName:"Jool",mapBody:L.KSP.CelestialBody.BOP,atmosphericRadius:0,color:"#c64605",surfaceGravity:.589},Tylo:{id:12,referenceBodyName:"Jool",mapBody:L.KSP.CelestialBody.TYLO,atmosphericRadius:0,color:"#fdf7ed",surfaceGravity:7.85},Gilly:{id:13,referenceBodyName:"Eve",mapBody:L.KSP.CelestialBody.GILLY,atmosphericRadius:0,color:"#fdcbb1",surfaceGravity:.049},Pol:{id:14,referenceBodyName:"Pol",mapBody:L.KSP.CelestialBody.POL,atmosphericRadius:0,color:"#fec681",surfaceGravity:.373},Dres:{id:15,referenceBodyName:"Sun",mapBody:L.KSP.CelestialBody.DRES,atmosphericRadius:0,color:"#fef8f9",surfaceGravity:1.13},Eeloo:{id:16,referenceBodyName:"Sun",mapBody:L.KSP.CelestialBody.EELOO,atmosphericRadius:0,color:"#e5fafe",surfaceGravity:1.69}}}});var TitleBar=Class.create({initialize:function(datalink,title_bar_id){this.datalink=datalink;this.title_bar_id=title_bar_id;this.title_bar=$(this.title_bar_id);this.initializeLOSNotifier();this.initializeDatalink()},update:function(data){window.requestAnimationFrame(function(){this.title_bar.down("#world-clock").update(TimeFormatters.formatUT(data["t.universalTime"]));this.title_bar.down("#mission-time").update(TimeFormatters.formatMET(data["v.missionTime"]));this.title_bar.down("#mission-time").removeClassName("loss-of-signal")}.bind(this))},initializeLOSNotifier:function(){document.observe("telemachus:loss-of-signal",function(){window.requestAnimationFrame(function(){this.title_bar.down("#mission-time").update("⚠ LOS ⚠");this.title_bar.down("#mission-time").addClassName("loss-of-signal")}.bind(this))}.bind(this))},initializeDatalink:function(){this.datalink.subscribeToData(["t.timeWarp","t.universalTime","v.missionTime"]);this.datalink.addReceiverFunction(this.update.bind(this))}});var ButtonIndicator=Class.create({initialize:function(datalink,indicatorId,apiButtonString){this.datalink=datalink;this.indicatorId=indicatorId;this.indicator=$(this.indicatorId);this.apiButtonString=apiButtonString;this.initializeDatalink()},update:function(data){if(data[this.apiButtonString]==true){this.indicator.addClassName("on")}else{this.indicator.removeClassName("on")}},initializeDatalink:function(){this.datalink.subscribeToData([this.apiButtonString]);this.datalink.addReceiverFunction(this.update.bind(this))}});var ReadoutTable=Class.create({initialize:function(datalink,tableId,dataRows){this.datalink=datalink;this.tableId=tableId;this.table=$(this.tableId);this.dataRows=dataRows;this.initializeDatalink()},update:function(data){window.requestAnimationFrame(function(){this.dataRows.forEach(function(row){var rowId=row.label;var tableRow=this.table.down("tr[data-label='"+rowId+"']");if(!tableRow){var tableRow=new Element("tr",{"data-label":rowId});tableRow.insert(""+row.label+"");this.table.insert(tableRow)}tableRow.down("td").update(row.formatter(data[row.value]))}.bind(this))}.bind(this))},initializeDatalink:function(){var dataValues=this.dataRows.map(function(dataRow){return dataRow.value});this.datalink.subscribeToData(dataValues);this.datalink.addReceiverFunction(this.update.bind(this))}});var ResourceMonitor=Class.create({initialize:function(datalink,resourceName,options){this.datalink=datalink;this.resourceName=resourceName;this.options=Object.extend({currentStageProgressBar:null,totalProgressBar:null,valuePrefix:null},options);this.resourceStrings=this.buildResourceStrings();this.initializeDatalink()},update:function(data){window.requestAnimationFrame(function(){if(this.options.totalProgressBar){this.options.totalProgressBar.value=data[this.resourceStrings.totalAvailable];this.options.totalProgressBar.max=data[this.resourceStrings.totalMax]}if(this.options.currentStageProgressBar){this.options.currentStageProgressBar.value=data[this.resourceStrings.currentStageAvailable];this.options.currentStageProgressBar.max=data[this.resourceStrings.currentStageMax]}this.updateValue("-total-value",data[this.resourceStrings.totalAvailable]);this.updateValue("-total-max",data[this.resourceStrings.totalMax]);this.updateValue("-current-stage-value",data[this.resourceStrings.currentStageAvailable]);this.updateValue("-current-stage-max",data[this.resourceStrings.currentStageMax])}.bind(this))},updateValue:function(id,value){if($(this.options.valuePrefix+id)){if(value<0){$(this.options.valuePrefix+id).update("NA")}else{$(this.options.valuePrefix+id).update(value.toFixed(2))}}},buildResourceStrings:function(){return{totalAvailable:"r.resource["+this.resourceName+"]",totalMax:"r.resourceMax["+this.resourceName+"]",currentStageAvailable:"r.resourceCurrent["+this.resourceName+"]",currentStageMax:"r.resourceCurrentMax["+this.resourceName+"]"}},initializeDatalink:function(){this.datalink.subscribeToData([this.resourceStrings.totalAvailable,this.resourceStrings.totalMax,this.resourceStrings.currentStageAvailable,this.resourceStrings.currentStageMax]);this.datalink.addReceiverFunction(this.update.bind(this))}});var DataTable=Class.create({initialize:function(tableID,dataRows){this.tableID=tableID;this.table=$(this.tableID);this.dataRows=dataRows},update:function(){window.requestAnimationFrame(function(){this.dataRows.forEach(function(row){var rowId=row.label;var tableRow=this.table.down("tr[data-label='"+rowId+"']");if(!tableRow){var tableRow=new Element("tr",{"data-label":rowId});tableRow.insert(""+row.label+"");this.table.insert(tableRow)}tableRow.down("td").update(row.value)}.bind(this))}.bind(this))},clear:function(){window.requestAnimationFrame(function(){this.dataRows=[];this.table.innerHTML=""}.bind(this))}});var AtmosphericDensityGauge=Class.create({initialize:function(datalink,gaugeID){this.datalink=datalink;this.gaugeID=gaugeID;this.gauge=$(this.gaugeID);this.initializeDatalink();this.func=function(x){return Math.log(2*x)}},update:function(data){var max=this.func(100);var value=this.func(data["v.atmosphericPressure"]*100);if(!isFinite(value)){value=0}this.gauge.value=value;this.gauge.max=max},initializeDatalink:function(){this.datalink.subscribeToData(["v.atmosphericPressure"]);this.datalink.addReceiverFunction(this.update.bind(this))}});var ThrottleGauge=Class.create({initialize:function(datalink,gaugeID){this.datalink=datalink;this.gaugeID=gaugeID;this.gauge=$(this.gaugeID);this.initializeDatalink()},update:function(data){this.gauge.value=data["f.throttle"]*100;this.gauge.max=100},initializeDatalink:function(){this.datalink.subscribeToData(["f.throttle"]);this.datalink.addReceiverFunction(this.update.bind(this))}});var OrbitalMath={partsOfUniversalDateTime:function(time){var parts={};if(time==null){time=0}parts.year=(time/(365*24*3600)|0)+1;time%=365*24*3600;parts.day=(time/(24*3600)|0)+1;time%=24*3600;parts.universalTime=time;parts.hour=time/3600|0;time%=3600;parts.minutes=time/60|0;parts.seconds=(time%60|0).toFixed();return parts},calculateGMSTInDegrees:function(universalDateTime){var timeParts=partsOfUniversalDateTime(universalDateTime);var G=6.697374558;var dayFactor=.06570982441908;var timeFactor=1.00273790935;return G+dayFactor*timeParts.day+timeFactor*timeParts.hour},eccentricAnomalyFromTrueAnomalyAndEcentricity:function(trueAnomaly,eccentricity){return 2*Math.atan(Math.sqrt((1-eccentricity)/(1+eccentricity))*Math.tan(trueAnomaly/2))},meanMotionFromGravitationalParametersAndSemimajorAxis:function(gravitationalParameter,semiMajorAxis,orbitalPeriod){return Math.sqrt(gravitationalParameter/Math.pow(semiMajorAxis,3))},meanAnomalyFromEccentricAnomalyAndEccentricity:function(eccentricAnomaly,eccentricity){return eccentricAnomaly-eccentricity*Math.sin(eccentricAnomaly)},meanAnomalyAtTimeAndMeanMotion:function(meanMotion,startTime,endTime,originalMeanAnomaly){var deltaT=endTime-startTime;return originalMeanAnomaly+meanMotion*deltaT},estimateEccentricAnomalyFromMeanAnomalyAndEccentricity:function(meanAnomaly,eccentricity){var error=100;var eccentricAnomaly1=meanAnomaly;while(error>1e-11){var newEccentricAnomaly=meanAnomaly+eccentricity*Math.sin(eccentricAnomaly1);error=Math.abs(newEccentricAnomaly-eccentricAnomaly1);eccentricAnomaly1=newEccentricAnomaly}return eccentricAnomaly1},trueAnomalyFromEccentricAnomalyAndEccentricity:function(eccentricAnomaly,eccentricity,meanAnomaly){var x=Math.sqrt(1-eccentricity)*Math.cos(eccentricAnomaly/2);var y=Math.sqrt(1+eccentricity)*Math.sin(eccentricAnomaly/2);return 2*Math.atan2(y,x)},findSemiLatusRectum:function(semiMajorAxis,eccentricity){var apoapsis=320565.458678732;var periapsis=102454.341836878;return 2*apoapsis*periapsis/(apoapsis+periapsis)},findPolarEquationOfConic:function(semiMajorAxis,eccentricity,trueAnomaly){var p=this.findSemiLatusRectum(semiMajorAxis,eccentricity);return p/(1+eccentricity*Math.cos(trueAnomaly))},positionVectorInPQWFrame:function(semiMajorAxis,eccentricity,trueAnomaly){var r=this.findPolarEquationOfConic(semiMajorAxis,eccentricity,trueAnomaly);var vector={};vector.p=r*Math.cos(trueAnomaly);vector.q=r*Math.sin(trueAnomaly);vector.w=0;return vector},velocityVectorInPQWFrame:function(semiMajorAxis,eccentricity,trueAnomaly,gravitationalParameter){var p=findSemiLatusRectum(semiMajorAxis,eccentricity);var factor=Math.sqrt(gravitationalParameter/p);var vector={};vector.p=-Math.sin(trueAnomaly);vector.q=eccentricity+Math.cos(trueAnomaly);vector.w=0;return vector},transformVector:function(matrix,vector){var vectorKeys=Object.keys(vector);var newVector={};for(var i=0;i0?1:-1;var theta=Math.atan(vector.j/vector.i);return theta-GMSTInRadians-angularVelocityOfPlanet*deltaT},TWR:function(thrust,totalMass,surfaceGravity){return thrust/(totalMass*surfaceGravity)},MaxTWR:function(maxAcceleration,surfaceGravity){return maxAcceleration/surfaceGravity},secondsToUseFuelAtCurrentThrust:function(massOfFuel,thrust,isp){if(thrust<=0||isp<=0){return-1}return massOfFuel/(thrust/isp*(1/9.81))},weightOfFuelUsedDuringBurn:function(thrust,isp,deltaT){return thrust/isp*(1/9.81)*deltaT},deltaVForBurn:function(thrust,startMass,endMass,deltaT){if(deltaT>0&&startMass>endMass&&startMass>0&&endMass>0){return thrust*deltaT/(startMass-endMass)*Math.log(startMass/endMass)}else{return 0}}};var CurrentStageBurnInfo=Class.create({initialize:function(datalink,atmoTableID,vacuumTableID){this.datalink=datalink;this.atmoTableID=atmoTableID;this.vacuumTableID=vacuumTableID;this.atmoDataTable=new DataTable(this.atmoTableID,[]);this.vacuumDataTable=new DataTable(this.vacuumTableID,[]);this.currentStageAtmo=null;this.currentStageVacuum=null;this.currentBody=null;this.initializeDatalink()},update:function(data){if(!data["mj.stagingInfo"]){return}if(this.currentBody==null||this.currentBody.name!=data["v.body"]){this.currentBody=this.datalink.getOrbitalBodyInfo(data["v.body"])}if(data["mj.stagingInfo"]["atmo"]){this.currentStageAtmo=this.calculateStageInfo(data["mj.stagingInfo"]["atmo"].last(),data)}if(data["mj.stagingInfo"]["vacuum"]){this.currentStageVacuum=this.calculateStageInfo(data["mj.stagingInfo"]["vacuum"].last(),data)}this.atmoDataTable.dataRows=this.dataRowsForStage(this.currentStageAtmo,data);this.vacuumDataTable.dataRows=this.dataRowsForStage(this.currentStageVacuum,data);this.atmoDataTable.update();this.vacuumDataTable.update()},subscribeToBodyData:function(data){this.currentBody=this.datalink.getOrbitalBodyInfo(data["v.body"]);this.datalink.subscribeToData(["b.o.gravParameter["+this.currentBody.id+"]"])},calculateStageInfo:function(stage,data){stage["currentThrust"]=stage["startThrust"]*data["f.throttle"];stage["currentTWR"]=OrbitalMath.TWR(stage["currentThrust"],stage["startMass"],this.currentBody.surfaceGravity);stage["timeUntilEmpty"]=OrbitalMath.secondsToUseFuelAtCurrentThrust(stage["resourceMass"],stage["currentThrust"],stage["isp"]);return stage},dataRowsForStage:function(stage,data){var timeUntilEmpty=stage["timeUntilEmpty"]<=0?"NA":DataFormatters.timeString(stage["timeUntilEmpty"]);return[{label:"Current Thrust",value:DataFormatters.newtonsString(stage["currentThrust"])+" ("+DataFormatters.percentageString(data["f.throttle"])+")"},{label:"TWR",value:DataFormatters.plainNumberString(stage["currentTWR"])},{label:"Remaining Fuel",value:DataFormatters.tonnageString(stage["resourceMass"])},{label:"Time until empty",value:timeUntilEmpty}]},initializeDatalink:function(){this.datalink.subscribeToData(["mj.stagingInfo","f.throttle","v.body"]);this.datalink.addReceiverFunction(this.update.bind(this))}});var StagingInfoTable=Class.create({initialize:function(datalink,stagingInfoTableID){this.datalink=datalink;this.stagingInfoTableID=stagingInfoTableID;this.stagingInfoTable=$(this.stagingInfoTableID);this.stagingInfoTableHeader=null;this.stagingInfoTableBody=null;this.currentBody=null;this.initializeTable();this.initializeDatalink()},update:function(data){if(!data["mj.stagingInfo"]){this.stagingInfoTableBody.update("");return}if(this.currentBody==null||this.currentBody.name!=data["v.body"]){this.currentBody=this.datalink.getOrbitalBodyInfo(data["v.body"])}var stagingInfo=data["mj.stagingInfo"];var stages=stagingInfo["atmo"].length;if(stages<=0){return}var documentFragment=document.createDocumentFragment();for(var i=0;i-1?e(a,b,c):b.indexOf("%")>-1?f(a,b,c):b.indexOf(":")>-1?g(a,b):i(a._value,b,c)}function d(a,b){var c,d,e,f,g,i=b,j=["KB","MB","GB","TB","PB","EB","ZB","YB"],k=!1;if(b.indexOf(":")>-1)a._value=h(b);else if(b===q)a._value=0;else{for("."!==o[p].delimiters.decimal&&(b=b.replace(/\./g,"").replace(o[p].delimiters.decimal,".")),c=new RegExp("[^a-zA-Z]"+o[p].abbreviations.thousand+"(?:\\)|(\\"+o[p].currency.symbol+")?(?:\\))?)?$"),d=new RegExp("[^a-zA-Z]"+o[p].abbreviations.million+"(?:\\)|(\\"+o[p].currency.symbol+")?(?:\\))?)?$"),e=new RegExp("[^a-zA-Z]"+o[p].abbreviations.billion+"(?:\\)|(\\"+o[p].currency.symbol+")?(?:\\))?)?$"),f=new RegExp("[^a-zA-Z]"+o[p].abbreviations.trillion+"(?:\\)|(\\"+o[p].currency.symbol+")?(?:\\))?)?$"),g=0;g<=j.length&&!(k=b.indexOf(j[g])>-1?Math.pow(1024,g+1):!1);g++);a._value=(k?k:1)*(i.match(c)?Math.pow(10,3):1)*(i.match(d)?Math.pow(10,6):1)*(i.match(e)?Math.pow(10,9):1)*(i.match(f)?Math.pow(10,12):1)*(b.indexOf("%")>-1?.01:1)*((b.split("-").length+Math.min(b.split("(").length-1,b.split(")").length-1))%2?1:-1)*Number(b.replace(/[^0-9\.]+/g,"")),a._value=k?Math.ceil(a._value):a._value}return a._value}function e(a,b,c){var d,e,f=b.indexOf("$"),g=b.indexOf("("),h=b.indexOf("-"),j="";return b.indexOf(" $")>-1?(j=" ",b=b.replace(" $","")):b.indexOf("$ ")>-1?(j=" ",b=b.replace("$ ","")):b=b.replace("$",""),e=i(a._value,b,c),1>=f?e.indexOf("(")>-1||e.indexOf("-")>-1?(e=e.split(""),d=1,(g>f||h>f)&&(d=0),e.splice(d,0,o[p].currency.symbol+j),e=e.join("")):e=o[p].currency.symbol+j+e:e.indexOf(")")>-1?(e=e.split(""),e.splice(-1,0,j+o[p].currency.symbol),e=e.join("")):e=e+j+o[p].currency.symbol,e}function f(a,b,c){var d,e="",f=100*a._value;return b.indexOf(" %")>-1?(e=" ",b=b.replace(" %","")):b=b.replace("%",""),d=i(f,b,c),d.indexOf(")")>-1?(d=d.split(""),d.splice(-1,0,e+"%"),d=d.join("")):d=d+e+"%",d}function g(a){var b=Math.floor(a._value/60/60),c=Math.floor((a._value-60*b*60)/60),d=Math.round(a._value-60*b*60-60*c);return b+":"+(10>c?"0"+c:c)+":"+(10>d?"0"+d:d)}function h(a){var b=a.split(":"),c=0;return 3===b.length?(c+=60*Number(b[0])*60,c+=60*Number(b[1]),c+=Number(b[2])):2===b.length&&(c+=60*Number(b[0]),c+=Number(b[1])),Number(c)}function i(a,c,d){var e,f,g,h,i,j,k=!1,l=!1,m=!1,n="",r=!1,s=!1,t=!1,u=!1,v=!1,w="",x="",y=Math.abs(a),z=["B","KB","MB","GB","TB","PB","EB","ZB","YB"],A="",B=!1;if(0===a&&null!==q)return q;if(c.indexOf("(")>-1?(k=!0,c=c.slice(1,-1)):c.indexOf("+")>-1&&(l=!0,c=c.replace(/\+/g,"")),c.indexOf("a")>-1&&(r=c.indexOf("aK")>=0,s=c.indexOf("aM")>=0,t=c.indexOf("aB")>=0,u=c.indexOf("aT")>=0,v=r||s||t||u,c.indexOf(" a")>-1?(n=" ",c=c.replace(" a","")):c=c.replace("a",""),y>=Math.pow(10,12)&&!v||u?(n+=o[p].abbreviations.trillion,a/=Math.pow(10,12)):y=Math.pow(10,9)&&!v||t?(n+=o[p].abbreviations.billion,a/=Math.pow(10,9)):y=Math.pow(10,6)&&!v||s?(n+=o[p].abbreviations.million,a/=Math.pow(10,6)):(y=Math.pow(10,3)&&!v||r)&&(n+=o[p].abbreviations.thousand,a/=Math.pow(10,3))),c.indexOf("b")>-1)for(c.indexOf(" b")>-1?(w=" ",c=c.replace(" b","")):c=c.replace("b",""),g=0;g<=z.length;g++)if(e=Math.pow(1024,g),f=Math.pow(1024,g+1),a>=e&&f>a){w+=z[g],e>0&&(a/=e);break}return c.indexOf("o")>-1&&(c.indexOf(" o")>-1?(x=" ",c=c.replace(" o","")):c=c.replace("o",""),x+=o[p].ordinal(a)),c.indexOf("[.]")>-1&&(m=!0,c=c.replace("[.]",".")),h=a.toString().split(".")[0],i=c.split(".")[1],j=c.indexOf(","),i?(i.indexOf("[")>-1?(i=i.replace("]",""),i=i.split("["),A=b(a,i[0].length+i[1].length,d,i[1].length)):A=b(a,i.length,d),h=A.split(".")[0],A=A.split(".")[1].length?o[p].delimiters.decimal+A.split(".")[1]:"",m&&0===Number(A.slice(1))&&(A="")):h=b(a,null,d),h.indexOf("-")>-1&&(h=h.slice(1),B=!0),j>-1&&(h=h.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g,"$1"+o[p].delimiters.thousands)),0===c.indexOf(".")&&(h=""),(k&&B?"(":"")+(!k&&B?"-":"")+(!B&&l?"+":"")+h+A+(x?x:"")+(n?n:"")+(w?w:"")+(k&&B?")":"")}function j(a,b){o[a]=b}function k(a){var b=a.toString().split(".");return b.length<2?1:Math.pow(10,b[1].length)}function l(){var a=Array.prototype.slice.call(arguments);return a.reduce(function(a,b){var c=k(a),d=k(b);return c>d?c:d},-1/0)}var m,n="1.5.3",o={},p="en",q=null,r="0,0",s="undefined"!=typeof module&&module.exports;m=function(b){return m.isNumeral(b)?b=b.value():0===b||"undefined"==typeof b?b=0:Number(b)||(b=m.fn.unformat(b)),new a(Number(b))},m.version=n,m.isNumeral=function(b){return b instanceof a},m.language=function(a,b){if(!a)return p;if(a&&!b){if(!o[a])throw new Error("Unknown language : "+a);p=a}return(b||!o[a])&&j(a,b),m},m.languageData=function(a){if(!a)return o[p];if(!o[a])throw new Error("Unknown language : "+a);return o[a]},m.language("en",{delimiters:{thousands:",",decimal:"."},abbreviations:{thousand:"k",million:"m",billion:"b",trillion:"t"},ordinal:function(a){var b=a%10;return 1===~~(a%100/10)?"th":1===b?"st":2===b?"nd":3===b?"rd":"th"},currency:{symbol:"$"}}),m.zeroFormat=function(a){q="string"==typeof a?a:null},m.defaultFormat=function(a){r="string"==typeof a?a:"0.0"},"function"!=typeof Array.prototype.reduce&&(Array.prototype.reduce=function(a,b){"use strict";if(null===this||"undefined"==typeof this)throw new TypeError("Array.prototype.reduce called on null or undefined");if("function"!=typeof a)throw new TypeError(a+" is not a function");var c,d,e=this.length>>>0,f=!1;for(1c;++c)this.hasOwnProperty(c)&&(f?d=a(d,this[c],c,this):(d=this[c],f=!0));if(!f)throw new TypeError("Reduce of empty array with no initial value");return d}),m.fn=a.prototype={clone:function(){return m(this)},format:function(a,b){return c(this,a?a:r,void 0!==b?b:Math.round)},unformat:function(a){return"[object Number]"===Object.prototype.toString.call(a)?a:d(this,a?a:r)},value:function(){return this._value},valueOf:function(){return this._value},set:function(a){return this._value=Number(a),this},add:function(a){function b(a,b){return a+c*b}var c=l.call(null,this._value,a);return this._value=[this._value,a].reduce(b,0)/c,this},subtract:function(a){function b(a,b){return a-c*b}var c=l.call(null,this._value,a);return this._value=[a].reduce(b,this._value*c)/c,this},multiply:function(a){function b(a,b){var c=l(a,b);return a*c*b*c/(c*c)}return this._value=[this._value,a].reduce(b,1),this},divide:function(a){function b(a,b){var c=l(a,b);return a*c/(b*c)}return this._value=[this._value,a].reduce(b),this},difference:function(a){return Math.abs(m(this._value).subtract(a).value())}},s&&(module.exports=m),"undefined"==typeof ender&&(this.numeral=m),"function"==typeof define&&define.amd&&define([],function(){return m})}).call(this); +// Extracted Richard Bunt's work in Telemachus: https://github.com/richardbunt/Telemachus/blob/master/WebPages/WebPages/src/console.js + +var TimeFormatters = { + formatUT: function(t){ + var day, year; + if (t == null) { + t = 0; + } + year = ((t / (365 * 24 * 3600)) | 0) + 1; + t %= 365 * 24 * 3600; + day = ((t / (24 * 3600)) | 0) + 1; + t %= 24 * 3600; + return "Year " + year + ", Day " + day + ", " + (this.hourMinSec(t)) + " UT"; + }, + + formatMET: function(t){ + var result; + if (t == null) { + t = 0; + } + result = "T+"; + if (t >= 365 * 24 * 3600) { + result += (t / (365 * 24 * 3600) | 0) + ":"; + t %= 365 * 24 * 3600; + if (t < 24 * 3600) { + result += "0:"; + } + } + if (t >= 24 * 3600) { + result += (t / (24 * 3600) | 0) + ":"; + } + t %= 24 * 3600; + return result + this.hourMinSec(t) + " MET"; + }, + + hourMinSec: function(t) { + var hour, min, sec; + if (t == null) { + t = 0; + } + hour = (t / 3600) | 0; + if (hour < 10) { + hour = "0" + hour; + } + t %= 3600; + min = (t / 60) | 0; + if (min < 10) { + min = "0" + min; + } + sec = (t % 60 | 0).toFixed(); + if (sec < 10) { + sec = "0" + sec; + } + return "" + hour + ":" + min + ":" + sec; + }, + + durationString: function(t) { + var result; + if (t == null) { + t = 0; + } + result = t < 0 ? "-" : ""; + t = Math.abs(t); + if (t >= 365 * 24 * 3600) { + result += (t / (365 * 24 * 3600) | 0) + " years "; + t %= 365 * 24 * 3600; + if (t < 24 * 3600) { + result += "0 days "; + } + } + if (t >= 24 * 3600) { + result += (t / (24 * 3600) | 0) + " days "; + } + t %= 24 * 3600; + return result + this.hourMinSec(t); + } +} +var DataFormatters = { + distanceString: function(value){ + return numeral(value).format('0,0.000 a') + "m" + }, + + heightFromTerrainString: function(value){ + if(value <= -1 ){ return "NA" } + return numeral(value).format('0,0.000 a') + "m" + }, + + degreeString: function(value){ + return numeral(value).format('0.000') + "°" + }, + + velocityString: function(value){ + return numeral(value).format('0,0.000 a') + "m/s" + }, + + temperatureString: function(value){ + if(!value){return "NA"} + return numeral(value).format('0,000') + "°C" + }, + + accelerationSensorString: function(value){ + if(value[0] == "No Sensors of the Appropriate Type"){return "NA"} + return numeral(value[1][0]).format('0,000') + "G" + }, + + pressureSensorString: function(value){ + if(value[0] == "No Sensors of the Appropriate Type"){return "NA"} + return numeral(value[1][0]).format('0,000') + "Pa" + }, + + gravitySensorString: function(value){ + if(value[0] == "No Sensors of the Appropriate Type"){return "NA"} + return numeral(value[1][0]).format('0,000 a') + "m/s²" + }, + + newtonsString: function(value){ + return numeral(value).format('0,0.00') + " N" + }, + + percentageString: function(value){ + return numeral(value).format("0%") + }, + + tonnageString: function(value){ + return numeral(value).format("0,0.00") + " t" + }, + + timeString: function(value){ + return numeral(value).format('00:00:00') + }, + + plainNumberString: function(value){ + return numeral(value).format("0,0.00") + } +} +/* Prototype JavaScript framework, version 1.7.2 + * (c) 2005-2010 Sam Stephenson + * + * Prototype is freely distributable under the terms of an MIT-style license. + * For details, see the Prototype web site: http://www.prototypejs.org/ + * + *--------------------------------------------------------------------------*/ + +var Prototype = { + + Version: '1.7.2', + + Browser: (function(){ + var ua = navigator.userAgent; + var isOpera = Object.prototype.toString.call(window.opera) == '[object Opera]'; + return { + IE: !!window.attachEvent && !isOpera, + Opera: isOpera, + WebKit: ua.indexOf('AppleWebKit/') > -1, + Gecko: ua.indexOf('Gecko') > -1 && ua.indexOf('KHTML') === -1, + MobileSafari: /Apple.*Mobile/.test(ua) + } + })(), + + BrowserFeatures: { + XPath: !!document.evaluate, + + SelectorsAPI: !!document.querySelector, + + ElementExtensions: (function() { + var constructor = window.Element || window.HTMLElement; + return !!(constructor && constructor.prototype); + })(), + SpecificElementExtensions: (function() { + if (typeof window.HTMLDivElement !== 'undefined') + return true; + + var div = document.createElement('div'), + form = document.createElement('form'), + isSupported = false; + + if (div['__proto__'] && (div['__proto__'] !== form['__proto__'])) { + isSupported = true; + } + + div = form = null; + + return isSupported; + })() + }, + + ScriptFragment: ']*>([\\S\\s]*?)<\/script\\s*>', + JSONFilter: /^\/\*-secure-([\s\S]*)\*\/\s*$/, + + emptyFunction: function() { }, + + K: function(x) { return x } +}; + +if (Prototype.Browser.MobileSafari) + Prototype.BrowserFeatures.SpecificElementExtensions = false; +/* Based on Alex Arnell's inheritance implementation. */ + +var Class = (function() { + + var IS_DONTENUM_BUGGY = (function(){ + for (var p in { toString: 1 }) { + if (p === 'toString') return false; + } + return true; + })(); + + function subclass() {}; + function create() { + var parent = null, properties = $A(arguments); + if (Object.isFunction(properties[0])) + parent = properties.shift(); + + function klass() { + this.initialize.apply(this, arguments); + } + + Object.extend(klass, Class.Methods); + klass.superclass = parent; + klass.subclasses = []; + + if (parent) { + subclass.prototype = parent.prototype; + klass.prototype = new subclass; + parent.subclasses.push(klass); + } + + for (var i = 0, length = properties.length; i < length; i++) + klass.addMethods(properties[i]); + + if (!klass.prototype.initialize) + klass.prototype.initialize = Prototype.emptyFunction; + + klass.prototype.constructor = klass; + return klass; + } + + function addMethods(source) { + var ancestor = this.superclass && this.superclass.prototype, + properties = Object.keys(source); + + if (IS_DONTENUM_BUGGY) { + if (source.toString != Object.prototype.toString) + properties.push("toString"); + if (source.valueOf != Object.prototype.valueOf) + properties.push("valueOf"); + } + + for (var i = 0, length = properties.length; i < length; i++) { + var property = properties[i], value = source[property]; + if (ancestor && Object.isFunction(value) && + value.argumentNames()[0] == "$super") { + var method = value; + value = (function(m) { + return function() { return ancestor[m].apply(this, arguments); }; + })(property).wrap(method); + + value.valueOf = (function(method) { + return function() { return method.valueOf.call(method); }; + })(method); + + value.toString = (function(method) { + return function() { return method.toString.call(method); }; + })(method); + } + this.prototype[property] = value; + } + + return this; + } + + return { + create: create, + Methods: { + addMethods: addMethods + } + }; +})(); +(function() { + + var _toString = Object.prototype.toString, + _hasOwnProperty = Object.prototype.hasOwnProperty, + NULL_TYPE = 'Null', + UNDEFINED_TYPE = 'Undefined', + BOOLEAN_TYPE = 'Boolean', + NUMBER_TYPE = 'Number', + STRING_TYPE = 'String', + OBJECT_TYPE = 'Object', + FUNCTION_CLASS = '[object Function]', + BOOLEAN_CLASS = '[object Boolean]', + NUMBER_CLASS = '[object Number]', + STRING_CLASS = '[object String]', + ARRAY_CLASS = '[object Array]', + DATE_CLASS = '[object Date]', + NATIVE_JSON_STRINGIFY_SUPPORT = window.JSON && + typeof JSON.stringify === 'function' && + JSON.stringify(0) === '0' && + typeof JSON.stringify(Prototype.K) === 'undefined'; + + + + var DONT_ENUMS = ['toString', 'toLocaleString', 'valueOf', + 'hasOwnProperty', 'isPrototypeOf', 'propertyIsEnumerable', 'constructor']; + + var IS_DONTENUM_BUGGY = (function(){ + for (var p in { toString: 1 }) { + if (p === 'toString') return false; + } + return true; + })(); + + function Type(o) { + switch(o) { + case null: return NULL_TYPE; + case (void 0): return UNDEFINED_TYPE; + } + var type = typeof o; + switch(type) { + case 'boolean': return BOOLEAN_TYPE; + case 'number': return NUMBER_TYPE; + case 'string': return STRING_TYPE; + } + return OBJECT_TYPE; + } + + function extend(destination, source) { + for (var property in source) + destination[property] = source[property]; + return destination; + } + + function inspect(object) { + try { + if (isUndefined(object)) return 'undefined'; + if (object === null) return 'null'; + return object.inspect ? object.inspect() : String(object); + } catch (e) { + if (e instanceof RangeError) return '...'; + throw e; + } + } + + function toJSON(value) { + return Str('', { '': value }, []); + } + + function Str(key, holder, stack) { + var value = holder[key]; + if (Type(value) === OBJECT_TYPE && typeof value.toJSON === 'function') { + value = value.toJSON(key); + } + + var _class = _toString.call(value); + + switch (_class) { + case NUMBER_CLASS: + case BOOLEAN_CLASS: + case STRING_CLASS: + value = value.valueOf(); + } + + switch (value) { + case null: return 'null'; + case true: return 'true'; + case false: return 'false'; + } + + var type = typeof value; + switch (type) { + case 'string': + return value.inspect(true); + case 'number': + return isFinite(value) ? String(value) : 'null'; + case 'object': + + for (var i = 0, length = stack.length; i < length; i++) { + if (stack[i] === value) { + throw new TypeError("Cyclic reference to '" + value + "' in object"); + } + } + stack.push(value); + + var partial = []; + if (_class === ARRAY_CLASS) { + for (var i = 0, length = value.length; i < length; i++) { + var str = Str(i, value, stack); + partial.push(typeof str === 'undefined' ? 'null' : str); + } + partial = '[' + partial.join(',') + ']'; + } else { + var keys = Object.keys(value); + for (var i = 0, length = keys.length; i < length; i++) { + var key = keys[i], str = Str(key, value, stack); + if (typeof str !== "undefined") { + partial.push(key.inspect(true)+ ':' + str); + } + } + partial = '{' + partial.join(',') + '}'; + } + stack.pop(); + return partial; + } + } + + function stringify(object) { + return JSON.stringify(object); + } + + function toQueryString(object) { + return $H(object).toQueryString(); + } + + function toHTML(object) { + return object && object.toHTML ? object.toHTML() : String.interpret(object); + } + + function keys(object) { + if (Type(object) !== OBJECT_TYPE) { throw new TypeError(); } + var results = []; + for (var property in object) { + if (_hasOwnProperty.call(object, property)) + results.push(property); + } + + if (IS_DONTENUM_BUGGY) { + for (var i = 0; property = DONT_ENUMS[i]; i++) { + if (_hasOwnProperty.call(object, property)) + results.push(property); + } + } + + return results; + } + + function values(object) { + var results = []; + for (var property in object) + results.push(object[property]); + return results; + } + + function clone(object) { + return extend({ }, object); + } + + function isElement(object) { + return !!(object && object.nodeType == 1); + } + + function isArray(object) { + return _toString.call(object) === ARRAY_CLASS; + } + + var hasNativeIsArray = (typeof Array.isArray == 'function') + && Array.isArray([]) && !Array.isArray({}); + + if (hasNativeIsArray) { + isArray = Array.isArray; + } + + function isHash(object) { + return object instanceof Hash; + } + + function isFunction(object) { + return _toString.call(object) === FUNCTION_CLASS; + } + + function isString(object) { + return _toString.call(object) === STRING_CLASS; + } + + function isNumber(object) { + return _toString.call(object) === NUMBER_CLASS; + } + + function isDate(object) { + return _toString.call(object) === DATE_CLASS; + } + + function isUndefined(object) { + return typeof object === "undefined"; + } + + extend(Object, { + extend: extend, + inspect: inspect, + toJSON: NATIVE_JSON_STRINGIFY_SUPPORT ? stringify : toJSON, + toQueryString: toQueryString, + toHTML: toHTML, + keys: Object.keys || keys, + values: values, + clone: clone, + isElement: isElement, + isArray: isArray, + isHash: isHash, + isFunction: isFunction, + isString: isString, + isNumber: isNumber, + isDate: isDate, + isUndefined: isUndefined + }); +})(); +Object.extend(Function.prototype, (function() { + var slice = Array.prototype.slice; + + function update(array, args) { + var arrayLength = array.length, length = args.length; + while (length--) array[arrayLength + length] = args[length]; + return array; + } + + function merge(array, args) { + array = slice.call(array, 0); + return update(array, args); + } + + function argumentNames() { + var names = this.toString().match(/^[\s\(]*function[^(]*\(([^)]*)\)/)[1] + .replace(/\/\/.*?[\r\n]|\/\*(?:.|[\r\n])*?\*\//g, '') + .replace(/\s+/g, '').split(','); + return names.length == 1 && !names[0] ? [] : names; + } + + + function bind(context) { + if (arguments.length < 2 && Object.isUndefined(arguments[0])) + return this; + + if (!Object.isFunction(this)) + throw new TypeError("The object is not callable."); + + var nop = function() {}; + var __method = this, args = slice.call(arguments, 1); + + var bound = function() { + var a = merge(args, arguments); + var c = this instanceof bound ? this : context; + return __method.apply(c, a); + }; + + nop.prototype = this.prototype; + bound.prototype = new nop(); + + return bound; + } + + function bindAsEventListener(context) { + var __method = this, args = slice.call(arguments, 1); + return function(event) { + var a = update([event || window.event], args); + return __method.apply(context, a); + } + } + + function curry() { + if (!arguments.length) return this; + var __method = this, args = slice.call(arguments, 0); + return function() { + var a = merge(args, arguments); + return __method.apply(this, a); + } + } + + function delay(timeout) { + var __method = this, args = slice.call(arguments, 1); + timeout = timeout * 1000; + return window.setTimeout(function() { + return __method.apply(__method, args); + }, timeout); + } + + function defer() { + var args = update([0.01], arguments); + return this.delay.apply(this, args); + } + + function wrap(wrapper) { + var __method = this; + return function() { + var a = update([__method.bind(this)], arguments); + return wrapper.apply(this, a); + } + } + + function methodize() { + if (this._methodized) return this._methodized; + var __method = this; + return this._methodized = function() { + var a = update([this], arguments); + return __method.apply(null, a); + }; + } + + var extensions = { + argumentNames: argumentNames, + bindAsEventListener: bindAsEventListener, + curry: curry, + delay: delay, + defer: defer, + wrap: wrap, + methodize: methodize + }; + + if (!Function.prototype.bind) + extensions.bind = bind; + + return extensions; +})()); + + + +(function(proto) { + + + function toISOString() { + return this.getUTCFullYear() + '-' + + (this.getUTCMonth() + 1).toPaddedString(2) + '-' + + this.getUTCDate().toPaddedString(2) + 'T' + + this.getUTCHours().toPaddedString(2) + ':' + + this.getUTCMinutes().toPaddedString(2) + ':' + + this.getUTCSeconds().toPaddedString(2) + 'Z'; + } + + + function toJSON() { + return this.toISOString(); + } + + if (!proto.toISOString) proto.toISOString = toISOString; + if (!proto.toJSON) proto.toJSON = toJSON; + +})(Date.prototype); + + +RegExp.prototype.match = RegExp.prototype.test; + +RegExp.escape = function(str) { + return String(str).replace(/([.*+?^=!:${}()|[\]\/\\])/g, '\\$1'); +}; +var PeriodicalExecuter = Class.create({ + initialize: function(callback, frequency) { + this.callback = callback; + this.frequency = frequency; + this.currentlyExecuting = false; + + this.registerCallback(); + }, + + registerCallback: function() { + this.timer = setInterval(this.onTimerEvent.bind(this), this.frequency * 1000); + }, + + execute: function() { + this.callback(this); + }, + + stop: function() { + if (!this.timer) return; + clearInterval(this.timer); + this.timer = null; + }, + + onTimerEvent: function() { + if (!this.currentlyExecuting) { + try { + this.currentlyExecuting = true; + this.execute(); + this.currentlyExecuting = false; + } catch(e) { + this.currentlyExecuting = false; + throw e; + } + } + } +}); +Object.extend(String, { + interpret: function(value) { + return value == null ? '' : String(value); + }, + specialChar: { + '\b': '\\b', + '\t': '\\t', + '\n': '\\n', + '\f': '\\f', + '\r': '\\r', + '\\': '\\\\' + } +}); + +Object.extend(String.prototype, (function() { + var NATIVE_JSON_PARSE_SUPPORT = window.JSON && + typeof JSON.parse === 'function' && + JSON.parse('{"test": true}').test; + + function prepareReplacement(replacement) { + if (Object.isFunction(replacement)) return replacement; + var template = new Template(replacement); + return function(match) { return template.evaluate(match) }; + } + + function isNonEmptyRegExp(regexp) { + return regexp.source && regexp.source !== '(?:)'; + } + + + function gsub(pattern, replacement) { + var result = '', source = this, match; + replacement = prepareReplacement(replacement); + + if (Object.isString(pattern)) + pattern = RegExp.escape(pattern); + + if (!(pattern.length || isNonEmptyRegExp(pattern))) { + replacement = replacement(''); + return replacement + source.split('').join(replacement) + replacement; + } + + while (source.length > 0) { + match = source.match(pattern) + if (match && match[0].length > 0) { + result += source.slice(0, match.index); + result += String.interpret(replacement(match)); + source = source.slice(match.index + match[0].length); + } else { + result += source, source = ''; + } + } + return result; + } + + function sub(pattern, replacement, count) { + replacement = prepareReplacement(replacement); + count = Object.isUndefined(count) ? 1 : count; + + return this.gsub(pattern, function(match) { + if (--count < 0) return match[0]; + return replacement(match); + }); + } + + function scan(pattern, iterator) { + this.gsub(pattern, iterator); + return String(this); + } + + function truncate(length, truncation) { + length = length || 30; + truncation = Object.isUndefined(truncation) ? '...' : truncation; + return this.length > length ? + this.slice(0, length - truncation.length) + truncation : String(this); + } + + function strip() { + return this.replace(/^\s+/, '').replace(/\s+$/, ''); + } + + function stripTags() { + return this.replace(/<\w+(\s+("[^"]*"|'[^']*'|[^>])+)?>|<\/\w+>/gi, ''); + } + + function stripScripts() { + return this.replace(new RegExp(Prototype.ScriptFragment, 'img'), ''); + } + + function extractScripts() { + var matchAll = new RegExp(Prototype.ScriptFragment, 'img'), + matchOne = new RegExp(Prototype.ScriptFragment, 'im'); + return (this.match(matchAll) || []).map(function(scriptTag) { + return (scriptTag.match(matchOne) || ['', ''])[1]; + }); + } + + function evalScripts() { + return this.extractScripts().map(function(script) { return eval(script); }); + } + + function escapeHTML() { + return this.replace(/&/g,'&').replace(//g,'>'); + } + + function unescapeHTML() { + return this.stripTags().replace(/</g,'<').replace(/>/g,'>').replace(/&/g,'&'); + } + + + function toQueryParams(separator) { + var match = this.strip().match(/([^?#]*)(#.*)?$/); + if (!match) return { }; + + return match[1].split(separator || '&').inject({ }, function(hash, pair) { + if ((pair = pair.split('='))[0]) { + var key = decodeURIComponent(pair.shift()), + value = pair.length > 1 ? pair.join('=') : pair[0]; + + if (value != undefined) { + value = value.gsub('+', ' '); + value = decodeURIComponent(value); + } + + if (key in hash) { + if (!Object.isArray(hash[key])) hash[key] = [hash[key]]; + hash[key].push(value); + } + else hash[key] = value; + } + return hash; + }); + } + + function toArray() { + return this.split(''); + } + + function succ() { + return this.slice(0, this.length - 1) + + String.fromCharCode(this.charCodeAt(this.length - 1) + 1); + } + + function times(count) { + return count < 1 ? '' : new Array(count + 1).join(this); + } + + function camelize() { + return this.replace(/-+(.)?/g, function(match, chr) { + return chr ? chr.toUpperCase() : ''; + }); + } + + function capitalize() { + return this.charAt(0).toUpperCase() + this.substring(1).toLowerCase(); + } + + function underscore() { + return this.replace(/::/g, '/') + .replace(/([A-Z]+)([A-Z][a-z])/g, '$1_$2') + .replace(/([a-z\d])([A-Z])/g, '$1_$2') + .replace(/-/g, '_') + .toLowerCase(); + } + + function dasherize() { + return this.replace(/_/g, '-'); + } + + function inspect(useDoubleQuotes) { + var escapedString = this.replace(/[\x00-\x1f\\]/g, function(character) { + if (character in String.specialChar) { + return String.specialChar[character]; + } + return '\\u00' + character.charCodeAt().toPaddedString(2, 16); + }); + if (useDoubleQuotes) return '"' + escapedString.replace(/"/g, '\\"') + '"'; + return "'" + escapedString.replace(/'/g, '\\\'') + "'"; + } + + function unfilterJSON(filter) { + return this.replace(filter || Prototype.JSONFilter, '$1'); + } + + function isJSON() { + var str = this; + if (str.blank()) return false; + str = str.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@'); + str = str.replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']'); + str = str.replace(/(?:^|:|,)(?:\s*\[)+/g, ''); + return (/^[\],:{}\s]*$/).test(str); + } + + function evalJSON(sanitize) { + var json = this.unfilterJSON(), + cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g; + if (cx.test(json)) { + json = json.replace(cx, function (a) { + return '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4); + }); + } + try { + if (!sanitize || json.isJSON()) return eval('(' + json + ')'); + } catch (e) { } + throw new SyntaxError('Badly formed JSON string: ' + this.inspect()); + } + + function parseJSON() { + var json = this.unfilterJSON(); + return JSON.parse(json); + } + + function include(pattern) { + return this.indexOf(pattern) > -1; + } + + function startsWith(pattern, position) { + position = Object.isNumber(position) ? position : 0; + return this.lastIndexOf(pattern, position) === position; + } + + function endsWith(pattern, position) { + pattern = String(pattern); + position = Object.isNumber(position) ? position : this.length; + if (position < 0) position = 0; + if (position > this.length) position = this.length; + var d = position - pattern.length; + return d >= 0 && this.indexOf(pattern, d) === d; + } + + function empty() { + return this == ''; + } + + function blank() { + return /^\s*$/.test(this); + } + + function interpolate(object, pattern) { + return new Template(this, pattern).evaluate(object); + } + + return { + gsub: gsub, + sub: sub, + scan: scan, + truncate: truncate, + strip: String.prototype.trim || strip, + stripTags: stripTags, + stripScripts: stripScripts, + extractScripts: extractScripts, + evalScripts: evalScripts, + escapeHTML: escapeHTML, + unescapeHTML: unescapeHTML, + toQueryParams: toQueryParams, + parseQuery: toQueryParams, + toArray: toArray, + succ: succ, + times: times, + camelize: camelize, + capitalize: capitalize, + underscore: underscore, + dasherize: dasherize, + inspect: inspect, + unfilterJSON: unfilterJSON, + isJSON: isJSON, + evalJSON: NATIVE_JSON_PARSE_SUPPORT ? parseJSON : evalJSON, + include: include, + startsWith: String.prototype.startsWith || startsWith, + endsWith: String.prototype.endsWith || endsWith, + empty: empty, + blank: blank, + interpolate: interpolate + }; +})()); + +var Template = Class.create({ + initialize: function(template, pattern) { + this.template = template.toString(); + this.pattern = pattern || Template.Pattern; + }, + + evaluate: function(object) { + if (object && Object.isFunction(object.toTemplateReplacements)) + object = object.toTemplateReplacements(); + + return this.template.gsub(this.pattern, function(match) { + if (object == null) return (match[1] + ''); + + var before = match[1] || ''; + if (before == '\\') return match[2]; + + var ctx = object, expr = match[3], + pattern = /^([^.[]+|\[((?:.*?[^\\])?)\])(\.|\[|$)/; + + match = pattern.exec(expr); + if (match == null) return before; + + while (match != null) { + var comp = match[1].startsWith('[') ? match[2].replace(/\\\\]/g, ']') : match[1]; + ctx = ctx[comp]; + if (null == ctx || '' == match[3]) break; + expr = expr.substring('[' == match[3] ? match[1].length : match[0].length); + match = pattern.exec(expr); + } + + return before + String.interpret(ctx); + }); + } +}); +Template.Pattern = /(^|.|\r|\n)(#\{(.*?)\})/; + +var $break = { }; + +var Enumerable = (function() { + function each(iterator, context) { + try { + this._each(iterator, context); + } catch (e) { + if (e != $break) throw e; + } + return this; + } + + function eachSlice(number, iterator, context) { + var index = -number, slices = [], array = this.toArray(); + if (number < 1) return array; + while ((index += number) < array.length) + slices.push(array.slice(index, index+number)); + return slices.collect(iterator, context); + } + + function all(iterator, context) { + iterator = iterator || Prototype.K; + var result = true; + this.each(function(value, index) { + result = result && !!iterator.call(context, value, index, this); + if (!result) throw $break; + }, this); + return result; + } + + function any(iterator, context) { + iterator = iterator || Prototype.K; + var result = false; + this.each(function(value, index) { + if (result = !!iterator.call(context, value, index, this)) + throw $break; + }, this); + return result; + } + + function collect(iterator, context) { + iterator = iterator || Prototype.K; + var results = []; + this.each(function(value, index) { + results.push(iterator.call(context, value, index, this)); + }, this); + return results; + } + + function detect(iterator, context) { + var result; + this.each(function(value, index) { + if (iterator.call(context, value, index, this)) { + result = value; + throw $break; + } + }, this); + return result; + } + + function findAll(iterator, context) { + var results = []; + this.each(function(value, index) { + if (iterator.call(context, value, index, this)) + results.push(value); + }, this); + return results; + } + + function grep(filter, iterator, context) { + iterator = iterator || Prototype.K; + var results = []; + + if (Object.isString(filter)) + filter = new RegExp(RegExp.escape(filter)); + + this.each(function(value, index) { + if (filter.match(value)) + results.push(iterator.call(context, value, index, this)); + }, this); + return results; + } + + function include(object) { + if (Object.isFunction(this.indexOf) && this.indexOf(object) != -1) + return true; + + var found = false; + this.each(function(value) { + if (value == object) { + found = true; + throw $break; + } + }); + return found; + } + + function inGroupsOf(number, fillWith) { + fillWith = Object.isUndefined(fillWith) ? null : fillWith; + return this.eachSlice(number, function(slice) { + while(slice.length < number) slice.push(fillWith); + return slice; + }); + } + + function inject(memo, iterator, context) { + this.each(function(value, index) { + memo = iterator.call(context, memo, value, index, this); + }, this); + return memo; + } + + function invoke(method) { + var args = $A(arguments).slice(1); + return this.map(function(value) { + return value[method].apply(value, args); + }); + } + + function max(iterator, context) { + iterator = iterator || Prototype.K; + var result; + this.each(function(value, index) { + value = iterator.call(context, value, index, this); + if (result == null || value >= result) + result = value; + }, this); + return result; + } + + function min(iterator, context) { + iterator = iterator || Prototype.K; + var result; + this.each(function(value, index) { + value = iterator.call(context, value, index, this); + if (result == null || value < result) + result = value; + }, this); + return result; + } + + function partition(iterator, context) { + iterator = iterator || Prototype.K; + var trues = [], falses = []; + this.each(function(value, index) { + (iterator.call(context, value, index, this) ? + trues : falses).push(value); + }, this); + return [trues, falses]; + } + + function pluck(property) { + var results = []; + this.each(function(value) { + results.push(value[property]); + }); + return results; + } + + function reject(iterator, context) { + var results = []; + this.each(function(value, index) { + if (!iterator.call(context, value, index, this)) + results.push(value); + }, this); + return results; + } + + function sortBy(iterator, context) { + return this.map(function(value, index) { + return { + value: value, + criteria: iterator.call(context, value, index, this) + }; + }, this).sort(function(left, right) { + var a = left.criteria, b = right.criteria; + return a < b ? -1 : a > b ? 1 : 0; + }).pluck('value'); + } + + function toArray() { + return this.map(); + } + + function zip() { + var iterator = Prototype.K, args = $A(arguments); + if (Object.isFunction(args.last())) + iterator = args.pop(); + + var collections = [this].concat(args).map($A); + return this.map(function(value, index) { + return iterator(collections.pluck(index)); + }); + } + + function size() { + return this.toArray().length; + } + + function inspect() { + return '#'; + } + + + + + + + + + + return { + each: each, + eachSlice: eachSlice, + all: all, + every: all, + any: any, + some: any, + collect: collect, + map: collect, + detect: detect, + findAll: findAll, + select: findAll, + filter: findAll, + grep: grep, + include: include, + member: include, + inGroupsOf: inGroupsOf, + inject: inject, + invoke: invoke, + max: max, + min: min, + partition: partition, + pluck: pluck, + reject: reject, + sortBy: sortBy, + toArray: toArray, + entries: toArray, + zip: zip, + size: size, + inspect: inspect, + find: detect + }; +})(); + +function $A(iterable) { + if (!iterable) return []; + if ('toArray' in Object(iterable)) return iterable.toArray(); + var length = iterable.length || 0, results = new Array(length); + while (length--) results[length] = iterable[length]; + return results; +} + + +function $w(string) { + if (!Object.isString(string)) return []; + string = string.strip(); + return string ? string.split(/\s+/) : []; +} + +Array.from = $A; + + +(function() { + var arrayProto = Array.prototype, + slice = arrayProto.slice, + _each = arrayProto.forEach; // use native browser JS 1.6 implementation if available + + function each(iterator, context) { + for (var i = 0, length = this.length >>> 0; i < length; i++) { + if (i in this) iterator.call(context, this[i], i, this); + } + } + if (!_each) _each = each; + + function clear() { + this.length = 0; + return this; + } + + function first() { + return this[0]; + } + + function last() { + return this[this.length - 1]; + } + + function compact() { + return this.select(function(value) { + return value != null; + }); + } + + function flatten() { + return this.inject([], function(array, value) { + if (Object.isArray(value)) + return array.concat(value.flatten()); + array.push(value); + return array; + }); + } + + function without() { + var values = slice.call(arguments, 0); + return this.select(function(value) { + return !values.include(value); + }); + } + + function reverse(inline) { + return (inline === false ? this.toArray() : this)._reverse(); + } + + function uniq(sorted) { + return this.inject([], function(array, value, index) { + if (0 == index || (sorted ? array.last() != value : !array.include(value))) + array.push(value); + return array; + }); + } + + function intersect(array) { + return this.uniq().findAll(function(item) { + return array.indexOf(item) !== -1; + }); + } + + + function clone() { + return slice.call(this, 0); + } + + function size() { + return this.length; + } + + function inspect() { + return '[' + this.map(Object.inspect).join(', ') + ']'; + } + + function indexOf(item, i) { + if (this == null) throw new TypeError(); + + var array = Object(this), length = array.length >>> 0; + if (length === 0) return -1; + + i = Number(i); + if (isNaN(i)) { + i = 0; + } else if (i !== 0 && isFinite(i)) { + i = (i > 0 ? 1 : -1) * Math.floor(Math.abs(i)); + } + + if (i > length) return -1; + + var k = i >= 0 ? i : Math.max(length - Math.abs(i), 0); + for (; k < length; k++) + if (k in array && array[k] === item) return k; + return -1; + } + + + function lastIndexOf(item, i) { + if (this == null) throw new TypeError(); + + var array = Object(this), length = array.length >>> 0; + if (length === 0) return -1; + + if (!Object.isUndefined(i)) { + i = Number(i); + if (isNaN(i)) { + i = 0; + } else if (i !== 0 && isFinite(i)) { + i = (i > 0 ? 1 : -1) * Math.floor(Math.abs(i)); + } + } else { + i = length; + } + + var k = i >= 0 ? Math.min(i, length - 1) : + length - Math.abs(i); + + for (; k >= 0; k--) + if (k in array && array[k] === item) return k; + return -1; + } + + function concat(_) { + var array = [], items = slice.call(arguments, 0), item, n = 0; + items.unshift(this); + for (var i = 0, length = items.length; i < length; i++) { + item = items[i]; + if (Object.isArray(item) && !('callee' in item)) { + for (var j = 0, arrayLength = item.length; j < arrayLength; j++) { + if (j in item) array[n] = item[j]; + n++; + } + } else { + array[n++] = item; + } + } + array.length = n; + return array; + } + + + function wrapNative(method) { + return function() { + if (arguments.length === 0) { + return method.call(this, Prototype.K); + } else if (arguments[0] === undefined) { + var args = slice.call(arguments, 1); + args.unshift(Prototype.K); + return method.apply(this, args); + } else { + return method.apply(this, arguments); + } + }; + } + + + function map(iterator) { + if (this == null) throw new TypeError(); + iterator = iterator || Prototype.K; + + var object = Object(this); + var results = [], context = arguments[1], n = 0; + + for (var i = 0, length = object.length >>> 0; i < length; i++) { + if (i in object) { + results[n] = iterator.call(context, object[i], i, object); + } + n++; + } + results.length = n; + return results; + } + + if (arrayProto.map) { + map = wrapNative(Array.prototype.map); + } + + function filter(iterator) { + if (this == null || !Object.isFunction(iterator)) + throw new TypeError(); + + var object = Object(this); + var results = [], context = arguments[1], value; + + for (var i = 0, length = object.length >>> 0; i < length; i++) { + if (i in object) { + value = object[i]; + if (iterator.call(context, value, i, object)) { + results.push(value); + } + } + } + return results; + } + + if (arrayProto.filter) { + filter = Array.prototype.filter; + } + + function some(iterator) { + if (this == null) throw new TypeError(); + iterator = iterator || Prototype.K; + var context = arguments[1]; + + var object = Object(this); + for (var i = 0, length = object.length >>> 0; i < length; i++) { + if (i in object && iterator.call(context, object[i], i, object)) { + return true; + } + } + + return false; + } + + if (arrayProto.some) { + var some = wrapNative(Array.prototype.some); + } + + + function every(iterator) { + if (this == null) throw new TypeError(); + iterator = iterator || Prototype.K; + var context = arguments[1]; + + var object = Object(this); + for (var i = 0, length = object.length >>> 0; i < length; i++) { + if (i in object && !iterator.call(context, object[i], i, object)) { + return false; + } + } + + return true; + } + + if (arrayProto.every) { + var every = wrapNative(Array.prototype.every); + } + + var _reduce = arrayProto.reduce; + function inject(memo, iterator) { + iterator = iterator || Prototype.K; + var context = arguments[2]; + return _reduce.call(this, iterator.bind(context), memo); + } + + if (!arrayProto.reduce) { + var inject = Enumerable.inject; + } + + Object.extend(arrayProto, Enumerable); + + if (!arrayProto._reverse) + arrayProto._reverse = arrayProto.reverse; + + Object.extend(arrayProto, { + _each: _each, + + map: map, + collect: map, + select: filter, + filter: filter, + findAll: filter, + some: some, + any: some, + every: every, + all: every, + inject: inject, + + clear: clear, + first: first, + last: last, + compact: compact, + flatten: flatten, + without: without, + reverse: reverse, + uniq: uniq, + intersect: intersect, + clone: clone, + toArray: clone, + size: size, + inspect: inspect + }); + + var CONCAT_ARGUMENTS_BUGGY = (function() { + return [].concat(arguments)[0][0] !== 1; + })(1,2); + + if (CONCAT_ARGUMENTS_BUGGY) arrayProto.concat = concat; + + if (!arrayProto.indexOf) arrayProto.indexOf = indexOf; + if (!arrayProto.lastIndexOf) arrayProto.lastIndexOf = lastIndexOf; +})(); +function $H(object) { + return new Hash(object); +}; + +var Hash = Class.create(Enumerable, (function() { + function initialize(object) { + this._object = Object.isHash(object) ? object.toObject() : Object.clone(object); + } + + + function _each(iterator, context) { + var i = 0; + for (var key in this._object) { + var value = this._object[key], pair = [key, value]; + pair.key = key; + pair.value = value; + iterator.call(context, pair, i); + i++; + } + } + + function set(key, value) { + return this._object[key] = value; + } + + function get(key) { + if (this._object[key] !== Object.prototype[key]) + return this._object[key]; + } + + function unset(key) { + var value = this._object[key]; + delete this._object[key]; + return value; + } + + function toObject() { + return Object.clone(this._object); + } + + + + function keys() { + return this.pluck('key'); + } + + function values() { + return this.pluck('value'); + } + + function index(value) { + var match = this.detect(function(pair) { + return pair.value === value; + }); + return match && match.key; + } + + function merge(object) { + return this.clone().update(object); + } + + function update(object) { + return new Hash(object).inject(this, function(result, pair) { + result.set(pair.key, pair.value); + return result; + }); + } + + function toQueryPair(key, value) { + if (Object.isUndefined(value)) return key; + + value = String.interpret(value); + + value = value.gsub(/(\r)?\n/, '\r\n'); + value = encodeURIComponent(value); + value = value.gsub(/%20/, '+'); + return key + '=' + value; + } + + function toQueryString() { + return this.inject([], function(results, pair) { + var key = encodeURIComponent(pair.key), values = pair.value; + + if (values && typeof values == 'object') { + if (Object.isArray(values)) { + var queryValues = []; + for (var i = 0, len = values.length, value; i < len; i++) { + value = values[i]; + queryValues.push(toQueryPair(key, value)); + } + return results.concat(queryValues); + } + } else results.push(toQueryPair(key, values)); + return results; + }).join('&'); + } + + function inspect() { + return '#'; + } + + function clone() { + return new Hash(this); + } + + return { + initialize: initialize, + _each: _each, + set: set, + get: get, + unset: unset, + toObject: toObject, + toTemplateReplacements: toObject, + keys: keys, + values: values, + index: index, + merge: merge, + update: update, + toQueryString: toQueryString, + inspect: inspect, + toJSON: toObject, + clone: clone + }; +})()); + +Hash.from = $H; +Object.extend(Number.prototype, (function() { + function toColorPart() { + return this.toPaddedString(2, 16); + } + + function succ() { + return this + 1; + } + + function times(iterator, context) { + $R(0, this, true).each(iterator, context); + return this; + } + + function toPaddedString(length, radix) { + var string = this.toString(radix || 10); + return '0'.times(length - string.length) + string; + } + + function abs() { + return Math.abs(this); + } + + function round() { + return Math.round(this); + } + + function ceil() { + return Math.ceil(this); + } + + function floor() { + return Math.floor(this); + } + + return { + toColorPart: toColorPart, + succ: succ, + times: times, + toPaddedString: toPaddedString, + abs: abs, + round: round, + ceil: ceil, + floor: floor + }; +})()); + +function $R(start, end, exclusive) { + return new ObjectRange(start, end, exclusive); +} + +var ObjectRange = Class.create(Enumerable, (function() { + function initialize(start, end, exclusive) { + this.start = start; + this.end = end; + this.exclusive = exclusive; + } + + function _each(iterator, context) { + var value = this.start, i; + for (i = 0; this.include(value); i++) { + iterator.call(context, value, i); + value = value.succ(); + } + } + + function include(value) { + if (value < this.start) + return false; + if (this.exclusive) + return value < this.end; + return value <= this.end; + } + + return { + initialize: initialize, + _each: _each, + include: include + }; +})()); + + + +var Abstract = { }; + + +var Try = { + these: function() { + var returnValue; + + for (var i = 0, length = arguments.length; i < length; i++) { + var lambda = arguments[i]; + try { + returnValue = lambda(); + break; + } catch (e) { } + } + + return returnValue; + } +}; + +var Ajax = { + getTransport: function() { + return Try.these( + function() {return new XMLHttpRequest()}, + function() {return new ActiveXObject('Msxml2.XMLHTTP')}, + function() {return new ActiveXObject('Microsoft.XMLHTTP')} + ) || false; + }, + + activeRequestCount: 0 +}; + +Ajax.Responders = { + responders: [], + + _each: function(iterator, context) { + this.responders._each(iterator, context); + }, + + register: function(responder) { + if (!this.include(responder)) + this.responders.push(responder); + }, + + unregister: function(responder) { + this.responders = this.responders.without(responder); + }, + + dispatch: function(callback, request, transport, json) { + this.each(function(responder) { + if (Object.isFunction(responder[callback])) { + try { + responder[callback].apply(responder, [request, transport, json]); + } catch (e) { } + } + }); + } +}; + +Object.extend(Ajax.Responders, Enumerable); + +Ajax.Responders.register({ + onCreate: function() { Ajax.activeRequestCount++ }, + onComplete: function() { Ajax.activeRequestCount-- } +}); +Ajax.Base = Class.create({ + initialize: function(options) { + this.options = { + method: 'post', + asynchronous: true, + contentType: 'application/x-www-form-urlencoded', + encoding: 'UTF-8', + parameters: '', + evalJSON: true, + evalJS: true + }; + Object.extend(this.options, options || { }); + + this.options.method = this.options.method.toLowerCase(); + + if (Object.isHash(this.options.parameters)) + this.options.parameters = this.options.parameters.toObject(); + } +}); +Ajax.Request = Class.create(Ajax.Base, { + _complete: false, + + initialize: function($super, url, options) { + $super(options); + this.transport = Ajax.getTransport(); + this.request(url); + }, + + request: function(url) { + this.url = url; + this.method = this.options.method; + var params = Object.isString(this.options.parameters) ? + this.options.parameters : + Object.toQueryString(this.options.parameters); + + if (!['get', 'post'].include(this.method)) { + params += (params ? '&' : '') + "_method=" + this.method; + this.method = 'post'; + } + + if (params && this.method === 'get') { + this.url += (this.url.include('?') ? '&' : '?') + params; + } + + this.parameters = params.toQueryParams(); + + try { + var response = new Ajax.Response(this); + if (this.options.onCreate) this.options.onCreate(response); + Ajax.Responders.dispatch('onCreate', this, response); + + this.transport.open(this.method.toUpperCase(), this.url, + this.options.asynchronous); + + if (this.options.asynchronous) this.respondToReadyState.bind(this).defer(1); + + this.transport.onreadystatechange = this.onStateChange.bind(this); + this.setRequestHeaders(); + + this.body = this.method == 'post' ? (this.options.postBody || params) : null; + this.transport.send(this.body); + + /* Force Firefox to handle ready state 4 for synchronous requests */ + if (!this.options.asynchronous && this.transport.overrideMimeType) + this.onStateChange(); + + } + catch (e) { + this.dispatchException(e); + } + }, + + onStateChange: function() { + var readyState = this.transport.readyState; + if (readyState > 1 && !((readyState == 4) && this._complete)) + this.respondToReadyState(this.transport.readyState); + }, + + setRequestHeaders: function() { + var headers = { + 'X-Requested-With': 'XMLHttpRequest', + 'X-Prototype-Version': Prototype.Version, + 'Accept': 'text/javascript, text/html, application/xml, text/xml, */*' + }; + + if (this.method == 'post') { + headers['Content-type'] = this.options.contentType + + (this.options.encoding ? '; charset=' + this.options.encoding : ''); + + /* Force "Connection: close" for older Mozilla browsers to work + * around a bug where XMLHttpRequest sends an incorrect + * Content-length header. See Mozilla Bugzilla #246651. + */ + if (this.transport.overrideMimeType && + (navigator.userAgent.match(/Gecko\/(\d{4})/) || [0,2005])[1] < 2005) + headers['Connection'] = 'close'; + } + + if (typeof this.options.requestHeaders == 'object') { + var extras = this.options.requestHeaders; + + if (Object.isFunction(extras.push)) + for (var i = 0, length = extras.length; i < length; i += 2) + headers[extras[i]] = extras[i+1]; + else + $H(extras).each(function(pair) { headers[pair.key] = pair.value }); + } + + for (var name in headers) + if (headers[name] != null) + this.transport.setRequestHeader(name, headers[name]); + }, + + success: function() { + var status = this.getStatus(); + return !status || (status >= 200 && status < 300) || status == 304; + }, + + getStatus: function() { + try { + if (this.transport.status === 1223) return 204; + return this.transport.status || 0; + } catch (e) { return 0 } + }, + + respondToReadyState: function(readyState) { + var state = Ajax.Request.Events[readyState], response = new Ajax.Response(this); + + if (state == 'Complete') { + try { + this._complete = true; + (this.options['on' + response.status] + || this.options['on' + (this.success() ? 'Success' : 'Failure')] + || Prototype.emptyFunction)(response, response.headerJSON); + } catch (e) { + this.dispatchException(e); + } + + var contentType = response.getHeader('Content-type'); + if (this.options.evalJS == 'force' + || (this.options.evalJS && this.isSameOrigin() && contentType + && contentType.match(/^\s*(text|application)\/(x-)?(java|ecma)script(;.*)?\s*$/i))) + this.evalResponse(); + } + + try { + (this.options['on' + state] || Prototype.emptyFunction)(response, response.headerJSON); + Ajax.Responders.dispatch('on' + state, this, response, response.headerJSON); + } catch (e) { + this.dispatchException(e); + } + + if (state == 'Complete') { + this.transport.onreadystatechange = Prototype.emptyFunction; + } + }, + + isSameOrigin: function() { + var m = this.url.match(/^\s*https?:\/\/[^\/]*/); + return !m || (m[0] == '#{protocol}//#{domain}#{port}'.interpolate({ + protocol: location.protocol, + domain: document.domain, + port: location.port ? ':' + location.port : '' + })); + }, + + getHeader: function(name) { + try { + return this.transport.getResponseHeader(name) || null; + } catch (e) { return null; } + }, + + evalResponse: function() { + try { + return eval((this.transport.responseText || '').unfilterJSON()); + } catch (e) { + this.dispatchException(e); + } + }, + + dispatchException: function(exception) { + (this.options.onException || Prototype.emptyFunction)(this, exception); + Ajax.Responders.dispatch('onException', this, exception); + } +}); + +Ajax.Request.Events = + ['Uninitialized', 'Loading', 'Loaded', 'Interactive', 'Complete']; + + + + + + + + +Ajax.Response = Class.create({ + initialize: function(request){ + this.request = request; + var transport = this.transport = request.transport, + readyState = this.readyState = transport.readyState; + + if ((readyState > 2 && !Prototype.Browser.IE) || readyState == 4) { + this.status = this.getStatus(); + this.statusText = this.getStatusText(); + this.responseText = String.interpret(transport.responseText); + this.headerJSON = this._getHeaderJSON(); + } + + if (readyState == 4) { + var xml = transport.responseXML; + this.responseXML = Object.isUndefined(xml) ? null : xml; + this.responseJSON = this._getResponseJSON(); + } + }, + + status: 0, + + statusText: '', + + getStatus: Ajax.Request.prototype.getStatus, + + getStatusText: function() { + try { + return this.transport.statusText || ''; + } catch (e) { return '' } + }, + + getHeader: Ajax.Request.prototype.getHeader, + + getAllHeaders: function() { + try { + return this.getAllResponseHeaders(); + } catch (e) { return null } + }, + + getResponseHeader: function(name) { + return this.transport.getResponseHeader(name); + }, + + getAllResponseHeaders: function() { + return this.transport.getAllResponseHeaders(); + }, + + _getHeaderJSON: function() { + var json = this.getHeader('X-JSON'); + if (!json) return null; + + try { + json = decodeURIComponent(escape(json)); + } catch(e) { + } + + try { + return json.evalJSON(this.request.options.sanitizeJSON || + !this.request.isSameOrigin()); + } catch (e) { + this.request.dispatchException(e); + } + }, + + _getResponseJSON: function() { + var options = this.request.options; + if (!options.evalJSON || (options.evalJSON != 'force' && + !(this.getHeader('Content-type') || '').include('application/json')) || + this.responseText.blank()) + return null; + try { + return this.responseText.evalJSON(options.sanitizeJSON || + !this.request.isSameOrigin()); + } catch (e) { + this.request.dispatchException(e); + } + } +}); + +Ajax.Updater = Class.create(Ajax.Request, { + initialize: function($super, container, url, options) { + this.container = { + success: (container.success || container), + failure: (container.failure || (container.success ? null : container)) + }; + + options = Object.clone(options); + var onComplete = options.onComplete; + options.onComplete = (function(response, json) { + this.updateContent(response.responseText); + if (Object.isFunction(onComplete)) onComplete(response, json); + }).bind(this); + + $super(url, options); + }, + + updateContent: function(responseText) { + var receiver = this.container[this.success() ? 'success' : 'failure'], + options = this.options; + + if (!options.evalScripts) responseText = responseText.stripScripts(); + + if (receiver = $(receiver)) { + if (options.insertion) { + if (Object.isString(options.insertion)) { + var insertion = { }; insertion[options.insertion] = responseText; + receiver.insert(insertion); + } + else options.insertion(receiver, responseText); + } + else receiver.update(responseText); + } + } +}); + +Ajax.PeriodicalUpdater = Class.create(Ajax.Base, { + initialize: function($super, container, url, options) { + $super(options); + this.onComplete = this.options.onComplete; + + this.frequency = (this.options.frequency || 2); + this.decay = (this.options.decay || 1); + + this.updater = { }; + this.container = container; + this.url = url; + + this.start(); + }, + + start: function() { + this.options.onComplete = this.updateComplete.bind(this); + this.onTimerEvent(); + }, + + stop: function() { + this.updater.options.onComplete = undefined; + clearTimeout(this.timer); + (this.onComplete || Prototype.emptyFunction).apply(this, arguments); + }, + + updateComplete: function(response) { + if (this.options.decay) { + this.decay = (response.responseText == this.lastText ? + this.decay * this.options.decay : 1); + + this.lastText = response.responseText; + } + this.timer = this.onTimerEvent.bind(this).delay(this.decay * this.frequency); + }, + + onTimerEvent: function() { + this.updater = new Ajax.Updater(this.container, this.url, this.options); + } +}); + +(function(GLOBAL) { + + var UNDEFINED; + var SLICE = Array.prototype.slice; + + var DIV = document.createElement('div'); + + + function $(element) { + if (arguments.length > 1) { + for (var i = 0, elements = [], length = arguments.length; i < length; i++) + elements.push($(arguments[i])); + return elements; + } + + if (Object.isString(element)) + element = document.getElementById(element); + return Element.extend(element); + } + + GLOBAL.$ = $; + + + if (!GLOBAL.Node) GLOBAL.Node = {}; + + if (!GLOBAL.Node.ELEMENT_NODE) { + Object.extend(GLOBAL.Node, { + ELEMENT_NODE: 1, + ATTRIBUTE_NODE: 2, + TEXT_NODE: 3, + CDATA_SECTION_NODE: 4, + ENTITY_REFERENCE_NODE: 5, + ENTITY_NODE: 6, + PROCESSING_INSTRUCTION_NODE: 7, + COMMENT_NODE: 8, + DOCUMENT_NODE: 9, + DOCUMENT_TYPE_NODE: 10, + DOCUMENT_FRAGMENT_NODE: 11, + NOTATION_NODE: 12 + }); + } + + var ELEMENT_CACHE = {}; + + function shouldUseCreationCache(tagName, attributes) { + if (tagName === 'select') return false; + if ('type' in attributes) return false; + return true; + } + + var HAS_EXTENDED_CREATE_ELEMENT_SYNTAX = (function(){ + try { + var el = document.createElement(''); + return el.tagName.toLowerCase() === 'input' && el.name === 'x'; + } + catch(err) { + return false; + } + })(); + + + var oldElement = GLOBAL.Element; + function Element(tagName, attributes) { + attributes = attributes || {}; + tagName = tagName.toLowerCase(); + + if (HAS_EXTENDED_CREATE_ELEMENT_SYNTAX && attributes.name) { + tagName = '<' + tagName + ' name="' + attributes.name + '">'; + delete attributes.name; + return Element.writeAttribute(document.createElement(tagName), attributes); + } + + if (!ELEMENT_CACHE[tagName]) + ELEMENT_CACHE[tagName] = Element.extend(document.createElement(tagName)); + + var node = shouldUseCreationCache(tagName, attributes) ? + ELEMENT_CACHE[tagName].cloneNode(false) : document.createElement(tagName); + + return Element.writeAttribute(node, attributes); + } + + GLOBAL.Element = Element; + + Object.extend(GLOBAL.Element, oldElement || {}); + if (oldElement) GLOBAL.Element.prototype = oldElement.prototype; + + Element.Methods = { ByTag: {}, Simulated: {} }; + + var methods = {}; + + var INSPECT_ATTRIBUTES = { id: 'id', className: 'class' }; + function inspect(element) { + element = $(element); + var result = '<' + element.tagName.toLowerCase(); + + var attribute, value; + for (var property in INSPECT_ATTRIBUTES) { + attribute = INSPECT_ATTRIBUTES[property]; + value = (element[property] || '').toString(); + if (value) result += ' ' + attribute + '=' + value.inspect(true); + } + + return result + '>'; + } + + methods.inspect = inspect; + + + function visible(element) { + return $(element).style.display !== 'none'; + } + + function toggle(element, bool) { + element = $(element); + if (Object.isUndefined(bool)) + bool = !Element.visible(element); + Element[bool ? 'show' : 'hide'](element); + + return element; + } + + function hide(element) { + element = $(element); + element.style.display = 'none'; + return element; + } + + function show(element) { + element = $(element); + element.style.display = ''; + return element; + } + + + Object.extend(methods, { + visible: visible, + toggle: toggle, + hide: hide, + show: show + }); + + + function remove(element) { + element = $(element); + element.parentNode.removeChild(element); + return element; + } + + var SELECT_ELEMENT_INNERHTML_BUGGY = (function(){ + var el = document.createElement("select"), + isBuggy = true; + el.innerHTML = ""; + if (el.options && el.options[0]) { + isBuggy = el.options[0].nodeName.toUpperCase() !== "OPTION"; + } + el = null; + return isBuggy; + })(); + + var TABLE_ELEMENT_INNERHTML_BUGGY = (function(){ + try { + var el = document.createElement("table"); + if (el && el.tBodies) { + el.innerHTML = "test"; + var isBuggy = typeof el.tBodies[0] == "undefined"; + el = null; + return isBuggy; + } + } catch (e) { + return true; + } + })(); + + var LINK_ELEMENT_INNERHTML_BUGGY = (function() { + try { + var el = document.createElement('div'); + el.innerHTML = ""; + var isBuggy = (el.childNodes.length === 0); + el = null; + return isBuggy; + } catch(e) { + return true; + } + })(); + + var ANY_INNERHTML_BUGGY = SELECT_ELEMENT_INNERHTML_BUGGY || + TABLE_ELEMENT_INNERHTML_BUGGY || LINK_ELEMENT_INNERHTML_BUGGY; + + var SCRIPT_ELEMENT_REJECTS_TEXTNODE_APPENDING = (function () { + var s = document.createElement("script"), + isBuggy = false; + try { + s.appendChild(document.createTextNode("")); + isBuggy = !s.firstChild || + s.firstChild && s.firstChild.nodeType !== 3; + } catch (e) { + isBuggy = true; + } + s = null; + return isBuggy; + })(); + + function update(element, content) { + element = $(element); + + var descendants = element.getElementsByTagName('*'), + i = descendants.length; + while (i--) purgeElement(descendants[i]); + + if (content && content.toElement) + content = content.toElement(); + + if (Object.isElement(content)) + return element.update().insert(content); + + + content = Object.toHTML(content); + var tagName = element.tagName.toUpperCase(); + + if (tagName === 'SCRIPT' && SCRIPT_ELEMENT_REJECTS_TEXTNODE_APPENDING) { + element.text = content; + return element; + } + + if (ANY_INNERHTML_BUGGY) { + if (tagName in INSERTION_TRANSLATIONS.tags) { + while (element.firstChild) + element.removeChild(element.firstChild); + + var nodes = getContentFromAnonymousElement(tagName, content.stripScripts()); + for (var i = 0, node; node = nodes[i]; i++) + element.appendChild(node); + + } else if (LINK_ELEMENT_INNERHTML_BUGGY && Object.isString(content) && content.indexOf(' -1) { + while (element.firstChild) + element.removeChild(element.firstChild); + + var nodes = getContentFromAnonymousElement(tagName, + content.stripScripts(), true); + + for (var i = 0, node; node = nodes[i]; i++) + element.appendChild(node); + } else { + element.innerHTML = content.stripScripts(); + } + } else { + element.innerHTML = content.stripScripts(); + } + + content.evalScripts.bind(content).defer(); + return element; + } + + function replace(element, content) { + element = $(element); + + if (content && content.toElement) { + content = content.toElement(); + } else if (!Object.isElement(content)) { + content = Object.toHTML(content); + var range = element.ownerDocument.createRange(); + range.selectNode(element); + content.evalScripts.bind(content).defer(); + content = range.createContextualFragment(content.stripScripts()); + } + + element.parentNode.replaceChild(content, element); + return element; + } + + var INSERTION_TRANSLATIONS = { + before: function(element, node) { + element.parentNode.insertBefore(node, element); + }, + top: function(element, node) { + element.insertBefore(node, element.firstChild); + }, + bottom: function(element, node) { + element.appendChild(node); + }, + after: function(element, node) { + element.parentNode.insertBefore(node, element.nextSibling); + }, + + tags: { + TABLE: ['', '
    ', 1], + TBODY: ['', '
    ', 2], + TR: ['', '
    ', 3], + TD: ['
    ', '
    ', 4], + SELECT: ['', 1] + } + }; + + var tags = INSERTION_TRANSLATIONS.tags; + + Object.extend(tags, { + THEAD: tags.TBODY, + TFOOT: tags.TBODY, + TH: tags.TD + }); + + function replace_IE(element, content) { + element = $(element); + if (content && content.toElement) + content = content.toElement(); + if (Object.isElement(content)) { + element.parentNode.replaceChild(content, element); + return element; + } + + content = Object.toHTML(content); + var parent = element.parentNode, tagName = parent.tagName.toUpperCase(); + + if (tagName in INSERTION_TRANSLATIONS.tags) { + var nextSibling = Element.next(element); + var fragments = getContentFromAnonymousElement( + tagName, content.stripScripts()); + + parent.removeChild(element); + + var iterator; + if (nextSibling) + iterator = function(node) { parent.insertBefore(node, nextSibling) }; + else + iterator = function(node) { parent.appendChild(node); } + + fragments.each(iterator); + } else { + element.outerHTML = content.stripScripts(); + } + + content.evalScripts.bind(content).defer(); + return element; + } + + if ('outerHTML' in document.documentElement) + replace = replace_IE; + + function isContent(content) { + if (Object.isUndefined(content) || content === null) return false; + + if (Object.isString(content) || Object.isNumber(content)) return true; + if (Object.isElement(content)) return true; + if (content.toElement || content.toHTML) return true; + + return false; + } + + function insertContentAt(element, content, position) { + position = position.toLowerCase(); + var method = INSERTION_TRANSLATIONS[position]; + + if (content && content.toElement) content = content.toElement(); + if (Object.isElement(content)) { + method(element, content); + return element; + } + + content = Object.toHTML(content); + var tagName = ((position === 'before' || position === 'after') ? + element.parentNode : element).tagName.toUpperCase(); + + var childNodes = getContentFromAnonymousElement(tagName, content.stripScripts()); + + if (position === 'top' || position === 'after') childNodes.reverse(); + + for (var i = 0, node; node = childNodes[i]; i++) + method(element, node); + + content.evalScripts.bind(content).defer(); + } + + function insert(element, insertions) { + element = $(element); + + if (isContent(insertions)) + insertions = { bottom: insertions }; + + for (var position in insertions) + insertContentAt(element, insertions[position], position); + + return element; + } + + function wrap(element, wrapper, attributes) { + element = $(element); + + if (Object.isElement(wrapper)) { + $(wrapper).writeAttribute(attributes || {}); + } else if (Object.isString(wrapper)) { + wrapper = new Element(wrapper, attributes); + } else { + wrapper = new Element('div', wrapper); + } + + if (element.parentNode) + element.parentNode.replaceChild(wrapper, element); + + wrapper.appendChild(element); + + return wrapper; + } + + function cleanWhitespace(element) { + element = $(element); + var node = element.firstChild; + + while (node) { + var nextNode = node.nextSibling; + if (node.nodeType === Node.TEXT_NODE && !/\S/.test(node.nodeValue)) + element.removeChild(node); + node = nextNode; + } + return element; + } + + function empty(element) { + return $(element).innerHTML.blank(); + } + + function getContentFromAnonymousElement(tagName, html, force) { + var t = INSERTION_TRANSLATIONS.tags[tagName], div = DIV; + + var workaround = !!t; + if (!workaround && force) { + workaround = true; + t = ['', '', 0]; + } + + if (workaround) { + div.innerHTML = ' ' + t[0] + html + t[1]; + div.removeChild(div.firstChild); + for (var i = t[2]; i--; ) + div = div.firstChild; + } else { + div.innerHTML = html; + } + + return $A(div.childNodes); + } + + function clone(element, deep) { + if (!(element = $(element))) return; + var clone = element.cloneNode(deep); + if (!HAS_UNIQUE_ID_PROPERTY) { + clone._prototypeUID = UNDEFINED; + if (deep) { + var descendants = Element.select(clone, '*'), + i = descendants.length; + while (i--) + descendants[i]._prototypeUID = UNDEFINED; + } + } + return Element.extend(clone); + } + + function purgeElement(element) { + var uid = getUniqueElementID(element); + if (uid) { + Element.stopObserving(element); + if (!HAS_UNIQUE_ID_PROPERTY) + element._prototypeUID = UNDEFINED; + delete Element.Storage[uid]; + } + } + + function purgeCollection(elements) { + var i = elements.length; + while (i--) + purgeElement(elements[i]); + } + + function purgeCollection_IE(elements) { + var i = elements.length, element, uid; + while (i--) { + element = elements[i]; + uid = getUniqueElementID(element); + delete Element.Storage[uid]; + delete Event.cache[uid]; + } + } + + if (HAS_UNIQUE_ID_PROPERTY) { + purgeCollection = purgeCollection_IE; + } + + + function purge(element) { + if (!(element = $(element))) return; + purgeElement(element); + + var descendants = element.getElementsByTagName('*'), + i = descendants.length; + + while (i--) purgeElement(descendants[i]); + + return null; + } + + Object.extend(methods, { + remove: remove, + update: update, + replace: replace, + insert: insert, + wrap: wrap, + cleanWhitespace: cleanWhitespace, + empty: empty, + clone: clone, + purge: purge + }); + + + + function recursivelyCollect(element, property, maximumLength) { + element = $(element); + maximumLength = maximumLength || -1; + var elements = []; + + while (element = element[property]) { + if (element.nodeType === Node.ELEMENT_NODE) + elements.push(Element.extend(element)); + + if (elements.length === maximumLength) break; + } + + return elements; + } + + + function ancestors(element) { + return recursivelyCollect(element, 'parentNode'); + } + + function descendants(element) { + return Element.select(element, '*'); + } + + function firstDescendant(element) { + element = $(element).firstChild; + while (element && element.nodeType !== Node.ELEMENT_NODE) + element = element.nextSibling; + + return $(element); + } + + function immediateDescendants(element) { + var results = [], child = $(element).firstChild; + + while (child) { + if (child.nodeType === Node.ELEMENT_NODE) + results.push(Element.extend(child)); + + child = child.nextSibling; + } + + return results; + } + + function previousSiblings(element) { + return recursivelyCollect(element, 'previousSibling'); + } + + function nextSiblings(element) { + return recursivelyCollect(element, 'nextSibling'); + } + + function siblings(element) { + element = $(element); + var previous = previousSiblings(element), + next = nextSiblings(element); + return previous.reverse().concat(next); + } + + function match(element, selector) { + element = $(element); + + if (Object.isString(selector)) + return Prototype.Selector.match(element, selector); + + return selector.match(element); + } + + + function _recursivelyFind(element, property, expression, index) { + element = $(element), expression = expression || 0, index = index || 0; + if (Object.isNumber(expression)) { + index = expression, expression = null; + } + + while (element = element[property]) { + if (element.nodeType !== 1) continue; + if (expression && !Prototype.Selector.match(element, expression)) + continue; + if (--index >= 0) continue; + + return Element.extend(element); + } + } + + + function up(element, expression, index) { + element = $(element); + + if (arguments.length === 1) return $(element.parentNode); + return _recursivelyFind(element, 'parentNode', expression, index); + } + + function down(element, expression, index) { + if (arguments.length === 1) return firstDescendant(element); + element = $(element), expression = expression || 0, index = index || 0; + + if (Object.isNumber(expression)) + index = expression, expression = '*'; + + var node = Prototype.Selector.select(expression, element)[index]; + return Element.extend(node); + } + + function previous(element, expression, index) { + return _recursivelyFind(element, 'previousSibling', expression, index); + } + + function next(element, expression, index) { + return _recursivelyFind(element, 'nextSibling', expression, index); + } + + function select(element) { + element = $(element); + var expressions = SLICE.call(arguments, 1).join(', '); + return Prototype.Selector.select(expressions, element); + } + + function adjacent(element) { + element = $(element); + var expressions = SLICE.call(arguments, 1).join(', '); + var siblings = Element.siblings(element), results = []; + for (var i = 0, sibling; sibling = siblings[i]; i++) { + if (Prototype.Selector.match(sibling, expressions)) + results.push(sibling); + } + + return results; + } + + function descendantOf_DOM(element, ancestor) { + element = $(element), ancestor = $(ancestor); + while (element = element.parentNode) + if (element === ancestor) return true; + return false; + } + + function descendantOf_contains(element, ancestor) { + element = $(element), ancestor = $(ancestor); + if (!ancestor.contains) return descendantOf_DOM(element, ancestor); + return ancestor.contains(element) && ancestor !== element; + } + + function descendantOf_compareDocumentPosition(element, ancestor) { + element = $(element), ancestor = $(ancestor); + return (element.compareDocumentPosition(ancestor) & 8) === 8; + } + + var descendantOf; + if (DIV.compareDocumentPosition) { + descendantOf = descendantOf_compareDocumentPosition; + } else if (DIV.contains) { + descendantOf = descendantOf_contains; + } else { + descendantOf = descendantOf_DOM; + } + + + Object.extend(methods, { + recursivelyCollect: recursivelyCollect, + ancestors: ancestors, + descendants: descendants, + firstDescendant: firstDescendant, + immediateDescendants: immediateDescendants, + previousSiblings: previousSiblings, + nextSiblings: nextSiblings, + siblings: siblings, + match: match, + up: up, + down: down, + previous: previous, + next: next, + select: select, + adjacent: adjacent, + descendantOf: descendantOf, + + getElementsBySelector: select, + + childElements: immediateDescendants + }); + + + var idCounter = 1; + function identify(element) { + element = $(element); + var id = Element.readAttribute(element, 'id'); + if (id) return id; + + do { id = 'anonymous_element_' + idCounter++ } while ($(id)); + + Element.writeAttribute(element, 'id', id); + return id; + } + + + function readAttribute(element, name) { + return $(element).getAttribute(name); + } + + function readAttribute_IE(element, name) { + element = $(element); + + var table = ATTRIBUTE_TRANSLATIONS.read; + if (table.values[name]) + return table.values[name](element, name); + + if (table.names[name]) name = table.names[name]; + + if (name.include(':')) { + if (!element.attributes || !element.attributes[name]) return null; + return element.attributes[name].value; + } + + return element.getAttribute(name); + } + + function readAttribute_Opera(element, name) { + if (name === 'title') return element.title; + return element.getAttribute(name); + } + + var PROBLEMATIC_ATTRIBUTE_READING = (function() { + DIV.setAttribute('onclick', []); + var value = DIV.getAttribute('onclick'); + var isFunction = Object.isArray(value); + DIV.removeAttribute('onclick'); + return isFunction; + })(); + + if (PROBLEMATIC_ATTRIBUTE_READING) { + readAttribute = readAttribute_IE; + } else if (Prototype.Browser.Opera) { + readAttribute = readAttribute_Opera; + } + + + function writeAttribute(element, name, value) { + element = $(element); + var attributes = {}, table = ATTRIBUTE_TRANSLATIONS.write; + + if (typeof name === 'object') { + attributes = name; + } else { + attributes[name] = Object.isUndefined(value) ? true : value; + } + + for (var attr in attributes) { + name = table.names[attr] || attr; + value = attributes[attr]; + if (table.values[attr]) + name = table.values[attr](element, value) || name; + if (value === false || value === null) + element.removeAttribute(name); + else if (value === true) + element.setAttribute(name, name); + else element.setAttribute(name, value); + } + + return element; + } + + var PROBLEMATIC_HAS_ATTRIBUTE_WITH_CHECKBOXES = (function () { + if (!HAS_EXTENDED_CREATE_ELEMENT_SYNTAX) { + return false; + } + var checkbox = document.createElement(''); + checkbox.checked = true; + var node = checkbox.getAttributeNode('checked'); + return !node || !node.specified; + })(); + + function hasAttribute(element, attribute) { + attribute = ATTRIBUTE_TRANSLATIONS.has[attribute] || attribute; + var node = $(element).getAttributeNode(attribute); + return !!(node && node.specified); + } + + function hasAttribute_IE(element, attribute) { + if (attribute === 'checked') { + return element.checked; + } + return hasAttribute(element, attribute); + } + + GLOBAL.Element.Methods.Simulated.hasAttribute = + PROBLEMATIC_HAS_ATTRIBUTE_WITH_CHECKBOXES ? + hasAttribute_IE : hasAttribute; + + function classNames(element) { + return new Element.ClassNames(element); + } + + var regExpCache = {}; + function getRegExpForClassName(className) { + if (regExpCache[className]) return regExpCache[className]; + + var re = new RegExp("(^|\\s+)" + className + "(\\s+|$)"); + regExpCache[className] = re; + return re; + } + + function hasClassName(element, className) { + if (!(element = $(element))) return; + + var elementClassName = element.className; + + if (elementClassName.length === 0) return false; + if (elementClassName === className) return true; + + return getRegExpForClassName(className).test(elementClassName); + } + + function addClassName(element, className) { + if (!(element = $(element))) return; + + if (!hasClassName(element, className)) + element.className += (element.className ? ' ' : '') + className; + + return element; + } + + function removeClassName(element, className) { + if (!(element = $(element))) return; + + element.className = element.className.replace( + getRegExpForClassName(className), ' ').strip(); + + return element; + } + + function toggleClassName(element, className, bool) { + if (!(element = $(element))) return; + + if (Object.isUndefined(bool)) + bool = !hasClassName(element, className); + + var method = Element[bool ? 'addClassName' : 'removeClassName']; + return method(element, className); + } + + var ATTRIBUTE_TRANSLATIONS = {}; + + var classProp = 'className', forProp = 'for'; + + DIV.setAttribute(classProp, 'x'); + if (DIV.className !== 'x') { + DIV.setAttribute('class', 'x'); + if (DIV.className === 'x') + classProp = 'class'; + } + + var LABEL = document.createElement('label'); + LABEL.setAttribute(forProp, 'x'); + if (LABEL.htmlFor !== 'x') { + LABEL.setAttribute('htmlFor', 'x'); + if (LABEL.htmlFor === 'x') + forProp = 'htmlFor'; + } + LABEL = null; + + function _getAttr(element, attribute) { + return element.getAttribute(attribute); + } + + function _getAttr2(element, attribute) { + return element.getAttribute(attribute, 2); + } + + function _getAttrNode(element, attribute) { + var node = element.getAttributeNode(attribute); + return node ? node.value : ''; + } + + function _getFlag(element, attribute) { + return $(element).hasAttribute(attribute) ? attribute : null; + } + + DIV.onclick = Prototype.emptyFunction; + var onclickValue = DIV.getAttribute('onclick'); + + var _getEv; + + if (String(onclickValue).indexOf('{') > -1) { + _getEv = function(element, attribute) { + var value = element.getAttribute(attribute); + if (!value) return null; + value = value.toString(); + value = value.split('{')[1]; + value = value.split('}')[0]; + return value.strip(); + }; + } + else if (onclickValue === '') { + _getEv = function(element, attribute) { + var value = element.getAttribute(attribute); + if (!value) return null; + return value.strip(); + }; + } + + ATTRIBUTE_TRANSLATIONS.read = { + names: { + 'class': classProp, + 'className': classProp, + 'for': forProp, + 'htmlFor': forProp + }, + + values: { + style: function(element) { + return element.style.cssText.toLowerCase(); + }, + title: function(element) { + return element.title; + } + } + }; + + ATTRIBUTE_TRANSLATIONS.write = { + names: { + className: 'class', + htmlFor: 'for', + cellpadding: 'cellPadding', + cellspacing: 'cellSpacing' + }, + + values: { + checked: function(element, value) { + element.checked = !!value; + }, + + style: function(element, value) { + element.style.cssText = value ? value : ''; + } + } + }; + + ATTRIBUTE_TRANSLATIONS.has = { names: {} }; + + Object.extend(ATTRIBUTE_TRANSLATIONS.write.names, + ATTRIBUTE_TRANSLATIONS.read.names); + + var CAMEL_CASED_ATTRIBUTE_NAMES = $w('colSpan rowSpan vAlign dateTime ' + + 'accessKey tabIndex encType maxLength readOnly longDesc frameBorder'); + + for (var i = 0, attr; attr = CAMEL_CASED_ATTRIBUTE_NAMES[i]; i++) { + ATTRIBUTE_TRANSLATIONS.write.names[attr.toLowerCase()] = attr; + ATTRIBUTE_TRANSLATIONS.has.names[attr.toLowerCase()] = attr; + } + + Object.extend(ATTRIBUTE_TRANSLATIONS.read.values, { + href: _getAttr2, + src: _getAttr2, + type: _getAttr, + action: _getAttrNode, + disabled: _getFlag, + checked: _getFlag, + readonly: _getFlag, + multiple: _getFlag, + onload: _getEv, + onunload: _getEv, + onclick: _getEv, + ondblclick: _getEv, + onmousedown: _getEv, + onmouseup: _getEv, + onmouseover: _getEv, + onmousemove: _getEv, + onmouseout: _getEv, + onfocus: _getEv, + onblur: _getEv, + onkeypress: _getEv, + onkeydown: _getEv, + onkeyup: _getEv, + onsubmit: _getEv, + onreset: _getEv, + onselect: _getEv, + onchange: _getEv + }); + + + Object.extend(methods, { + identify: identify, + readAttribute: readAttribute, + writeAttribute: writeAttribute, + classNames: classNames, + hasClassName: hasClassName, + addClassName: addClassName, + removeClassName: removeClassName, + toggleClassName: toggleClassName + }); + + + function normalizeStyleName(style) { + if (style === 'float' || style === 'styleFloat') + return 'cssFloat'; + return style.camelize(); + } + + function normalizeStyleName_IE(style) { + if (style === 'float' || style === 'cssFloat') + return 'styleFloat'; + return style.camelize(); + } + + function setStyle(element, styles) { + element = $(element); + var elementStyle = element.style, match; + + if (Object.isString(styles)) { + elementStyle.cssText += ';' + styles; + if (styles.include('opacity')) { + var opacity = styles.match(/opacity:\s*(\d?\.?\d*)/)[1]; + Element.setOpacity(element, opacity); + } + return element; + } + + for (var property in styles) { + if (property === 'opacity') { + Element.setOpacity(element, styles[property]); + } else { + var value = styles[property]; + if (property === 'float' || property === 'cssFloat') { + property = Object.isUndefined(elementStyle.styleFloat) ? + 'cssFloat' : 'styleFloat'; + } + elementStyle[property] = value; + } + } + + return element; + } + + + function getStyle(element, style) { + element = $(element); + style = normalizeStyleName(style); + + var value = element.style[style]; + if (!value || value === 'auto') { + var css = document.defaultView.getComputedStyle(element, null); + value = css ? css[style] : null; + } + + if (style === 'opacity') return value ? parseFloat(value) : 1.0; + return value === 'auto' ? null : value; + } + + function getStyle_Opera(element, style) { + switch (style) { + case 'height': case 'width': + if (!Element.visible(element)) return null; + + var dim = parseInt(getStyle(element, style), 10); + + if (dim !== element['offset' + style.capitalize()]) + return dim + 'px'; + + return Element.measure(element, style); + + default: return getStyle(element, style); + } + } + + function getStyle_IE(element, style) { + element = $(element); + style = normalizeStyleName_IE(style); + + var value = element.style[style]; + if (!value && element.currentStyle) { + value = element.currentStyle[style]; + } + + if (style === 'opacity' && !STANDARD_CSS_OPACITY_SUPPORTED) + return getOpacity_IE(element); + + if (value === 'auto') { + if ((style === 'width' || style === 'height') && Element.visible(element)) + return Element.measure(element, style) + 'px'; + return null; + } + + return value; + } + + function stripAlphaFromFilter_IE(filter) { + return (filter || '').replace(/alpha\([^\)]*\)/gi, ''); + } + + function hasLayout_IE(element) { + if (!element.currentStyle || !element.currentStyle.hasLayout) + element.style.zoom = 1; + return element; + } + + var STANDARD_CSS_OPACITY_SUPPORTED = (function() { + DIV.style.cssText = "opacity:.55"; + return /^0.55/.test(DIV.style.opacity); + })(); + + function setOpacity(element, value) { + element = $(element); + if (value == 1 || value === '') value = ''; + else if (value < 0.00001) value = 0; + element.style.opacity = value; + return element; + } + + function setOpacity_IE(element, value) { + if (STANDARD_CSS_OPACITY_SUPPORTED) + return setOpacity(element, value); + + element = hasLayout_IE($(element)); + var filter = Element.getStyle(element, 'filter'), + style = element.style; + + if (value == 1 || value === '') { + filter = stripAlphaFromFilter_IE(filter); + if (filter) style.filter = filter; + else style.removeAttribute('filter'); + return element; + } + + if (value < 0.00001) value = 0; + + style.filter = stripAlphaFromFilter_IE(filter) + + 'alpha(opacity=' + (value * 100) + ')'; + + return element; + } + + + function getOpacity(element) { + return Element.getStyle(element, 'opacity'); + } + + function getOpacity_IE(element) { + if (STANDARD_CSS_OPACITY_SUPPORTED) + return getOpacity(element); + + var filter = Element.getStyle(element, 'filter'); + if (filter.length === 0) return 1.0; + var match = (filter || '').match(/alpha\(opacity=(.*)\)/); + if (match && match[1]) return parseFloat(match[1]) / 100; + return 1.0; + } + + + Object.extend(methods, { + setStyle: setStyle, + getStyle: getStyle, + setOpacity: setOpacity, + getOpacity: getOpacity + }); + + if ('styleFloat' in DIV.style) { + methods.getStyle = getStyle_IE; + methods.setOpacity = setOpacity_IE; + methods.getOpacity = getOpacity_IE; + } + + var UID = 0; + + GLOBAL.Element.Storage = { UID: 1 }; + + function getUniqueElementID(element) { + if (element === window) return 0; + + if (typeof element._prototypeUID === 'undefined') + element._prototypeUID = Element.Storage.UID++; + return element._prototypeUID; + } + + function getUniqueElementID_IE(element) { + if (element === window) return 0; + if (element == document) return 1; + return element.uniqueID; + } + + var HAS_UNIQUE_ID_PROPERTY = ('uniqueID' in DIV); + if (HAS_UNIQUE_ID_PROPERTY) + getUniqueElementID = getUniqueElementID_IE; + + function getStorage(element) { + if (!(element = $(element))) return; + + var uid = getUniqueElementID(element); + + if (!Element.Storage[uid]) + Element.Storage[uid] = $H(); + + return Element.Storage[uid]; + } + + function store(element, key, value) { + if (!(element = $(element))) return; + var storage = getStorage(element); + if (arguments.length === 2) { + storage.update(key); + } else { + storage.set(key, value); + } + return element; + } + + function retrieve(element, key, defaultValue) { + if (!(element = $(element))) return; + var storage = getStorage(element), value = storage.get(key); + + if (Object.isUndefined(value)) { + storage.set(key, defaultValue); + value = defaultValue; + } + + return value; + } + + + Object.extend(methods, { + getStorage: getStorage, + store: store, + retrieve: retrieve + }); + + + var Methods = {}, ByTag = Element.Methods.ByTag, + F = Prototype.BrowserFeatures; + + if (!F.ElementExtensions && ('__proto__' in DIV)) { + GLOBAL.HTMLElement = {}; + GLOBAL.HTMLElement.prototype = DIV['__proto__']; + F.ElementExtensions = true; + } + + function checkElementPrototypeDeficiency(tagName) { + if (typeof window.Element === 'undefined') return false; + if (!HAS_EXTENDED_CREATE_ELEMENT_SYNTAX) return false; + var proto = window.Element.prototype; + if (proto) { + var id = '_' + (Math.random() + '').slice(2), + el = document.createElement(tagName); + proto[id] = 'x'; + var isBuggy = (el[id] !== 'x'); + delete proto[id]; + el = null; + return isBuggy; + } + + return false; + } + + var HTMLOBJECTELEMENT_PROTOTYPE_BUGGY = + checkElementPrototypeDeficiency('object'); + + function extendElementWith(element, methods) { + for (var property in methods) { + var value = methods[property]; + if (Object.isFunction(value) && !(property in element)) + element[property] = value.methodize(); + } + } + + var EXTENDED = {}; + function elementIsExtended(element) { + var uid = getUniqueElementID(element); + return (uid in EXTENDED); + } + + function extend(element) { + if (!element || elementIsExtended(element)) return element; + if (element.nodeType !== Node.ELEMENT_NODE || element == window) + return element; + + var methods = Object.clone(Methods), + tagName = element.tagName.toUpperCase(); + + if (ByTag[tagName]) Object.extend(methods, ByTag[tagName]); + + extendElementWith(element, methods); + EXTENDED[getUniqueElementID(element)] = true; + return element; + } + + function extend_IE8(element) { + if (!element || elementIsExtended(element)) return element; + + var t = element.tagName; + if (t && (/^(?:object|applet|embed)$/i.test(t))) { + extendElementWith(element, Element.Methods); + extendElementWith(element, Element.Methods.Simulated); + extendElementWith(element, Element.Methods.ByTag[t.toUpperCase()]); + } + + return element; + } + + if (F.SpecificElementExtensions) { + extend = HTMLOBJECTELEMENT_PROTOTYPE_BUGGY ? extend_IE8 : Prototype.K; + } + + function addMethodsToTagName(tagName, methods) { + tagName = tagName.toUpperCase(); + if (!ByTag[tagName]) ByTag[tagName] = {}; + Object.extend(ByTag[tagName], methods); + } + + function mergeMethods(destination, methods, onlyIfAbsent) { + if (Object.isUndefined(onlyIfAbsent)) onlyIfAbsent = false; + for (var property in methods) { + var value = methods[property]; + if (!Object.isFunction(value)) continue; + if (!onlyIfAbsent || !(property in destination)) + destination[property] = value.methodize(); + } + } + + function findDOMClass(tagName) { + var klass; + var trans = { + "OPTGROUP": "OptGroup", "TEXTAREA": "TextArea", "P": "Paragraph", + "FIELDSET": "FieldSet", "UL": "UList", "OL": "OList", "DL": "DList", + "DIR": "Directory", "H1": "Heading", "H2": "Heading", "H3": "Heading", + "H4": "Heading", "H5": "Heading", "H6": "Heading", "Q": "Quote", + "INS": "Mod", "DEL": "Mod", "A": "Anchor", "IMG": "Image", "CAPTION": + "TableCaption", "COL": "TableCol", "COLGROUP": "TableCol", "THEAD": + "TableSection", "TFOOT": "TableSection", "TBODY": "TableSection", "TR": + "TableRow", "TH": "TableCell", "TD": "TableCell", "FRAMESET": + "FrameSet", "IFRAME": "IFrame" + }; + if (trans[tagName]) klass = 'HTML' + trans[tagName] + 'Element'; + if (window[klass]) return window[klass]; + klass = 'HTML' + tagName + 'Element'; + if (window[klass]) return window[klass]; + klass = 'HTML' + tagName.capitalize() + 'Element'; + if (window[klass]) return window[klass]; + + var element = document.createElement(tagName), + proto = element['__proto__'] || element.constructor.prototype; + + element = null; + return proto; + } + + function addMethods(methods) { + if (arguments.length === 0) addFormMethods(); + + if (arguments.length === 2) { + var tagName = methods; + methods = arguments[1]; + } + + if (!tagName) { + Object.extend(Element.Methods, methods || {}); + } else { + if (Object.isArray(tagName)) { + for (var i = 0, tag; tag = tagName[i]; i++) + addMethodsToTagName(tag, methods); + } else { + addMethodsToTagName(tagName, methods); + } + } + + var ELEMENT_PROTOTYPE = window.HTMLElement ? HTMLElement.prototype : + Element.prototype; + + if (F.ElementExtensions) { + mergeMethods(ELEMENT_PROTOTYPE, Element.Methods); + mergeMethods(ELEMENT_PROTOTYPE, Element.Methods.Simulated, true); + } + + if (F.SpecificElementExtensions) { + for (var tag in Element.Methods.ByTag) { + var klass = findDOMClass(tag); + if (Object.isUndefined(klass)) continue; + mergeMethods(klass.prototype, ByTag[tag]); + } + } + + Object.extend(Element, Element.Methods); + Object.extend(Element, Element.Methods.Simulated); + delete Element.ByTag; + delete Element.Simulated; + + Element.extend.refresh(); + + ELEMENT_CACHE = {}; + } + + Object.extend(GLOBAL.Element, { + extend: extend, + addMethods: addMethods + }); + + if (extend === Prototype.K) { + GLOBAL.Element.extend.refresh = Prototype.emptyFunction; + } else { + GLOBAL.Element.extend.refresh = function() { + if (Prototype.BrowserFeatures.ElementExtensions) return; + Object.extend(Methods, Element.Methods); + Object.extend(Methods, Element.Methods.Simulated); + + EXTENDED = {}; + }; + } + + function addFormMethods() { + Object.extend(Form, Form.Methods); + Object.extend(Form.Element, Form.Element.Methods); + Object.extend(Element.Methods.ByTag, { + "FORM": Object.clone(Form.Methods), + "INPUT": Object.clone(Form.Element.Methods), + "SELECT": Object.clone(Form.Element.Methods), + "TEXTAREA": Object.clone(Form.Element.Methods), + "BUTTON": Object.clone(Form.Element.Methods) + }); + } + + Element.addMethods(methods); + + function destroyCache_IE() { + DIV = null; + ELEMENT_CACHE = null; + } + + if (window.attachEvent) + window.attachEvent('onunload', destroyCache_IE); + +})(this); +(function() { + + function toDecimal(pctString) { + var match = pctString.match(/^(\d+)%?$/i); + if (!match) return null; + return (Number(match[1]) / 100); + } + + function getRawStyle(element, style) { + element = $(element); + + var value = element.style[style]; + if (!value || value === 'auto') { + var css = document.defaultView.getComputedStyle(element, null); + value = css ? css[style] : null; + } + + if (style === 'opacity') return value ? parseFloat(value) : 1.0; + return value === 'auto' ? null : value; + } + + function getRawStyle_IE(element, style) { + var value = element.style[style]; + if (!value && element.currentStyle) { + value = element.currentStyle[style]; + } + return value; + } + + function getContentWidth(element, context) { + var boxWidth = element.offsetWidth; + + var bl = getPixelValue(element, 'borderLeftWidth', context) || 0; + var br = getPixelValue(element, 'borderRightWidth', context) || 0; + var pl = getPixelValue(element, 'paddingLeft', context) || 0; + var pr = getPixelValue(element, 'paddingRight', context) || 0; + + return boxWidth - bl - br - pl - pr; + } + + if ('currentStyle' in document.documentElement) { + getRawStyle = getRawStyle_IE; + } + + + function getPixelValue(value, property, context) { + var element = null; + if (Object.isElement(value)) { + element = value; + value = getRawStyle(element, property); + } + + if (value === null || Object.isUndefined(value)) { + return null; + } + + if ((/^(?:-)?\d+(\.\d+)?(px)?$/i).test(value)) { + return window.parseFloat(value); + } + + var isPercentage = value.include('%'), isViewport = (context === document.viewport); + + if (/\d/.test(value) && element && element.runtimeStyle && !(isPercentage && isViewport)) { + var style = element.style.left, rStyle = element.runtimeStyle.left; + element.runtimeStyle.left = element.currentStyle.left; + element.style.left = value || 0; + value = element.style.pixelLeft; + element.style.left = style; + element.runtimeStyle.left = rStyle; + + return value; + } + + if (element && isPercentage) { + context = context || element.parentNode; + var decimal = toDecimal(value), whole = null; + + var isHorizontal = property.include('left') || property.include('right') || + property.include('width'); + + var isVertical = property.include('top') || property.include('bottom') || + property.include('height'); + + if (context === document.viewport) { + if (isHorizontal) { + whole = document.viewport.getWidth(); + } else if (isVertical) { + whole = document.viewport.getHeight(); + } + } else { + if (isHorizontal) { + whole = $(context).measure('width'); + } else if (isVertical) { + whole = $(context).measure('height'); + } + } + + return (whole === null) ? 0 : whole * decimal; + } + + return 0; + } + + function toCSSPixels(number) { + if (Object.isString(number) && number.endsWith('px')) + return number; + return number + 'px'; + } + + function isDisplayed(element) { + while (element && element.parentNode) { + var display = element.getStyle('display'); + if (display === 'none') { + return false; + } + element = $(element.parentNode); + } + return true; + } + + var hasLayout = Prototype.K; + if ('currentStyle' in document.documentElement) { + hasLayout = function(element) { + if (!element.currentStyle.hasLayout) { + element.style.zoom = 1; + } + return element; + }; + } + + function cssNameFor(key) { + if (key.include('border')) key = key + '-width'; + return key.camelize(); + } + + Element.Layout = Class.create(Hash, { + initialize: function($super, element, preCompute) { + $super(); + this.element = $(element); + + Element.Layout.PROPERTIES.each( function(property) { + this._set(property, null); + }, this); + + if (preCompute) { + this._preComputing = true; + this._begin(); + Element.Layout.PROPERTIES.each( this._compute, this ); + this._end(); + this._preComputing = false; + } + }, + + _set: function(property, value) { + return Hash.prototype.set.call(this, property, value); + }, + + set: function(property, value) { + throw "Properties of Element.Layout are read-only."; + }, + + get: function($super, property) { + var value = $super(property); + return value === null ? this._compute(property) : value; + }, + + _begin: function() { + if (this._isPrepared()) return; + + var element = this.element; + if (isDisplayed(element)) { + this._setPrepared(true); + return; + } + + + var originalStyles = { + position: element.style.position || '', + width: element.style.width || '', + visibility: element.style.visibility || '', + display: element.style.display || '' + }; + + element.store('prototype_original_styles', originalStyles); + + var position = getRawStyle(element, 'position'), width = element.offsetWidth; + + if (width === 0 || width === null) { + element.style.display = 'block'; + width = element.offsetWidth; + } + + var context = (position === 'fixed') ? document.viewport : + element.parentNode; + + var tempStyles = { + visibility: 'hidden', + display: 'block' + }; + + if (position !== 'fixed') tempStyles.position = 'absolute'; + + element.setStyle(tempStyles); + + var positionedWidth = element.offsetWidth, newWidth; + if (width && (positionedWidth === width)) { + newWidth = getContentWidth(element, context); + } else if (position === 'absolute' || position === 'fixed') { + newWidth = getContentWidth(element, context); + } else { + var parent = element.parentNode, pLayout = $(parent).getLayout(); + + newWidth = pLayout.get('width') - + this.get('margin-left') - + this.get('border-left') - + this.get('padding-left') - + this.get('padding-right') - + this.get('border-right') - + this.get('margin-right'); + } + + element.setStyle({ width: newWidth + 'px' }); + + this._setPrepared(true); + }, + + _end: function() { + var element = this.element; + var originalStyles = element.retrieve('prototype_original_styles'); + element.store('prototype_original_styles', null); + element.setStyle(originalStyles); + this._setPrepared(false); + }, + + _compute: function(property) { + var COMPUTATIONS = Element.Layout.COMPUTATIONS; + if (!(property in COMPUTATIONS)) { + throw "Property not found."; + } + + return this._set(property, COMPUTATIONS[property].call(this, this.element)); + }, + + _isPrepared: function() { + return this.element.retrieve('prototype_element_layout_prepared', false); + }, + + _setPrepared: function(bool) { + return this.element.store('prototype_element_layout_prepared', bool); + }, + + toObject: function() { + var args = $A(arguments); + var keys = (args.length === 0) ? Element.Layout.PROPERTIES : + args.join(' ').split(' '); + var obj = {}; + keys.each( function(key) { + if (!Element.Layout.PROPERTIES.include(key)) return; + var value = this.get(key); + if (value != null) obj[key] = value; + }, this); + return obj; + }, + + toHash: function() { + var obj = this.toObject.apply(this, arguments); + return new Hash(obj); + }, + + toCSS: function() { + var args = $A(arguments); + var keys = (args.length === 0) ? Element.Layout.PROPERTIES : + args.join(' ').split(' '); + var css = {}; + + keys.each( function(key) { + if (!Element.Layout.PROPERTIES.include(key)) return; + if (Element.Layout.COMPOSITE_PROPERTIES.include(key)) return; + + var value = this.get(key); + if (value != null) css[cssNameFor(key)] = value + 'px'; + }, this); + return css; + }, + + inspect: function() { + return "#"; + } + }); + + Object.extend(Element.Layout, { + PROPERTIES: $w('height width top left right bottom border-left border-right border-top border-bottom padding-left padding-right padding-top padding-bottom margin-top margin-bottom margin-left margin-right padding-box-width padding-box-height border-box-width border-box-height margin-box-width margin-box-height'), + + COMPOSITE_PROPERTIES: $w('padding-box-width padding-box-height margin-box-width margin-box-height border-box-width border-box-height'), + + COMPUTATIONS: { + 'height': function(element) { + if (!this._preComputing) this._begin(); + + var bHeight = this.get('border-box-height'); + if (bHeight <= 0) { + if (!this._preComputing) this._end(); + return 0; + } + + var bTop = this.get('border-top'), + bBottom = this.get('border-bottom'); + + var pTop = this.get('padding-top'), + pBottom = this.get('padding-bottom'); + + if (!this._preComputing) this._end(); + + return bHeight - bTop - bBottom - pTop - pBottom; + }, + + 'width': function(element) { + if (!this._preComputing) this._begin(); + + var bWidth = this.get('border-box-width'); + if (bWidth <= 0) { + if (!this._preComputing) this._end(); + return 0; + } + + var bLeft = this.get('border-left'), + bRight = this.get('border-right'); + + var pLeft = this.get('padding-left'), + pRight = this.get('padding-right'); + + if (!this._preComputing) this._end(); + return bWidth - bLeft - bRight - pLeft - pRight; + }, + + 'padding-box-height': function(element) { + var height = this.get('height'), + pTop = this.get('padding-top'), + pBottom = this.get('padding-bottom'); + + return height + pTop + pBottom; + }, + + 'padding-box-width': function(element) { + var width = this.get('width'), + pLeft = this.get('padding-left'), + pRight = this.get('padding-right'); + + return width + pLeft + pRight; + }, + + 'border-box-height': function(element) { + if (!this._preComputing) this._begin(); + var height = element.offsetHeight; + if (!this._preComputing) this._end(); + return height; + }, + + 'border-box-width': function(element) { + if (!this._preComputing) this._begin(); + var width = element.offsetWidth; + if (!this._preComputing) this._end(); + return width; + }, + + 'margin-box-height': function(element) { + var bHeight = this.get('border-box-height'), + mTop = this.get('margin-top'), + mBottom = this.get('margin-bottom'); + + if (bHeight <= 0) return 0; + + return bHeight + mTop + mBottom; + }, + + 'margin-box-width': function(element) { + var bWidth = this.get('border-box-width'), + mLeft = this.get('margin-left'), + mRight = this.get('margin-right'); + + if (bWidth <= 0) return 0; + + return bWidth + mLeft + mRight; + }, + + 'top': function(element) { + var offset = element.positionedOffset(); + return offset.top; + }, + + 'bottom': function(element) { + var offset = element.positionedOffset(), + parent = element.getOffsetParent(), + pHeight = parent.measure('height'); + + var mHeight = this.get('border-box-height'); + + return pHeight - mHeight - offset.top; + }, + + 'left': function(element) { + var offset = element.positionedOffset(); + return offset.left; + }, + + 'right': function(element) { + var offset = element.positionedOffset(), + parent = element.getOffsetParent(), + pWidth = parent.measure('width'); + + var mWidth = this.get('border-box-width'); + + return pWidth - mWidth - offset.left; + }, + + 'padding-top': function(element) { + return getPixelValue(element, 'paddingTop'); + }, + + 'padding-bottom': function(element) { + return getPixelValue(element, 'paddingBottom'); + }, + + 'padding-left': function(element) { + return getPixelValue(element, 'paddingLeft'); + }, + + 'padding-right': function(element) { + return getPixelValue(element, 'paddingRight'); + }, + + 'border-top': function(element) { + return getPixelValue(element, 'borderTopWidth'); + }, + + 'border-bottom': function(element) { + return getPixelValue(element, 'borderBottomWidth'); + }, + + 'border-left': function(element) { + return getPixelValue(element, 'borderLeftWidth'); + }, + + 'border-right': function(element) { + return getPixelValue(element, 'borderRightWidth'); + }, + + 'margin-top': function(element) { + return getPixelValue(element, 'marginTop'); + }, + + 'margin-bottom': function(element) { + return getPixelValue(element, 'marginBottom'); + }, + + 'margin-left': function(element) { + return getPixelValue(element, 'marginLeft'); + }, + + 'margin-right': function(element) { + return getPixelValue(element, 'marginRight'); + } + } + }); + + if ('getBoundingClientRect' in document.documentElement) { + Object.extend(Element.Layout.COMPUTATIONS, { + 'right': function(element) { + var parent = hasLayout(element.getOffsetParent()); + var rect = element.getBoundingClientRect(), + pRect = parent.getBoundingClientRect(); + + return (pRect.right - rect.right).round(); + }, + + 'bottom': function(element) { + var parent = hasLayout(element.getOffsetParent()); + var rect = element.getBoundingClientRect(), + pRect = parent.getBoundingClientRect(); + + return (pRect.bottom - rect.bottom).round(); + } + }); + } + + Element.Offset = Class.create({ + initialize: function(left, top) { + this.left = left.round(); + this.top = top.round(); + + this[0] = this.left; + this[1] = this.top; + }, + + relativeTo: function(offset) { + return new Element.Offset( + this.left - offset.left, + this.top - offset.top + ); + }, + + inspect: function() { + return "#".interpolate(this); + }, + + toString: function() { + return "[#{left}, #{top}]".interpolate(this); + }, + + toArray: function() { + return [this.left, this.top]; + } + }); + + function getLayout(element, preCompute) { + return new Element.Layout(element, preCompute); + } + + function measure(element, property) { + return $(element).getLayout().get(property); + } + + function getHeight(element) { + return Element.getDimensions(element).height; + } + + function getWidth(element) { + return Element.getDimensions(element).width; + } + + function getDimensions(element) { + element = $(element); + var display = Element.getStyle(element, 'display'); + + if (display && display !== 'none') { + return { width: element.offsetWidth, height: element.offsetHeight }; + } + + var style = element.style; + var originalStyles = { + visibility: style.visibility, + position: style.position, + display: style.display + }; + + var newStyles = { + visibility: 'hidden', + display: 'block' + }; + + if (originalStyles.position !== 'fixed') + newStyles.position = 'absolute'; + + Element.setStyle(element, newStyles); + + var dimensions = { + width: element.offsetWidth, + height: element.offsetHeight + }; + + Element.setStyle(element, originalStyles); + + return dimensions; + } + + function getOffsetParent(element) { + element = $(element); + + if (isDocument(element) || isDetached(element) || isBody(element) || isHtml(element)) + return $(document.body); + + var isInline = (Element.getStyle(element, 'display') === 'inline'); + if (!isInline && element.offsetParent) return $(element.offsetParent); + + while ((element = element.parentNode) && element !== document.body) { + if (Element.getStyle(element, 'position') !== 'static') { + return isHtml(element) ? $(document.body) : $(element); + } + } + + return $(document.body); + } + + + function cumulativeOffset(element) { + element = $(element); + var valueT = 0, valueL = 0; + if (element.parentNode) { + do { + valueT += element.offsetTop || 0; + valueL += element.offsetLeft || 0; + element = element.offsetParent; + } while (element); + } + return new Element.Offset(valueL, valueT); + } + + function positionedOffset(element) { + element = $(element); + + var layout = element.getLayout(); + + var valueT = 0, valueL = 0; + do { + valueT += element.offsetTop || 0; + valueL += element.offsetLeft || 0; + element = element.offsetParent; + if (element) { + if (isBody(element)) break; + var p = Element.getStyle(element, 'position'); + if (p !== 'static') break; + } + } while (element); + + valueL -= layout.get('margin-top'); + valueT -= layout.get('margin-left'); + + return new Element.Offset(valueL, valueT); + } + + function cumulativeScrollOffset(element) { + var valueT = 0, valueL = 0; + do { + if (element === document.body) { + var bodyScrollNode = document.documentElement || document.body.parentNode || document.body; + valueT += !Object.isUndefined(window.pageYOffset) ? window.pageYOffset : bodyScrollNode.scrollTop || 0; + valueL += !Object.isUndefined(window.pageXOffset) ? window.pageXOffset : bodyScrollNode.scrollLeft || 0; + break; + } else { + valueT += element.scrollTop || 0; + valueL += element.scrollLeft || 0; + element = element.parentNode; + } + } while (element); + return new Element.Offset(valueL, valueT); + } + + function viewportOffset(forElement) { + var valueT = 0, valueL = 0, docBody = document.body; + + forElement = $(forElement); + var element = forElement; + do { + valueT += element.offsetTop || 0; + valueL += element.offsetLeft || 0; + if (element.offsetParent == docBody && + Element.getStyle(element, 'position') == 'absolute') break; + } while (element = element.offsetParent); + + element = forElement; + do { + if (element != docBody) { + valueT -= element.scrollTop || 0; + valueL -= element.scrollLeft || 0; + } + } while (element = element.parentNode); + return new Element.Offset(valueL, valueT); + } + + function absolutize(element) { + element = $(element); + + if (Element.getStyle(element, 'position') === 'absolute') { + return element; + } + + var offsetParent = getOffsetParent(element); + var eOffset = element.viewportOffset(), + pOffset = offsetParent.viewportOffset(); + + var offset = eOffset.relativeTo(pOffset); + var layout = element.getLayout(); + + element.store('prototype_absolutize_original_styles', { + position: element.getStyle('position'), + left: element.getStyle('left'), + top: element.getStyle('top'), + width: element.getStyle('width'), + height: element.getStyle('height') + }); + + element.setStyle({ + position: 'absolute', + top: offset.top + 'px', + left: offset.left + 'px', + width: layout.get('width') + 'px', + height: layout.get('height') + 'px' + }); + + return element; + } + + function relativize(element) { + element = $(element); + if (Element.getStyle(element, 'position') === 'relative') { + return element; + } + + var originalStyles = + element.retrieve('prototype_absolutize_original_styles'); + + if (originalStyles) element.setStyle(originalStyles); + return element; + } + + + function scrollTo(element) { + element = $(element); + var pos = Element.cumulativeOffset(element); + window.scrollTo(pos.left, pos.top); + return element; + } + + + function makePositioned(element) { + element = $(element); + var position = Element.getStyle(element, 'position'), styles = {}; + if (position === 'static' || !position) { + styles.position = 'relative'; + if (Prototype.Browser.Opera) { + styles.top = 0; + styles.left = 0; + } + Element.setStyle(element, styles); + Element.store(element, 'prototype_made_positioned', true); + } + return element; + } + + function undoPositioned(element) { + element = $(element); + var storage = Element.getStorage(element), + madePositioned = storage.get('prototype_made_positioned'); + + if (madePositioned) { + storage.unset('prototype_made_positioned'); + Element.setStyle(element, { + position: '', + top: '', + bottom: '', + left: '', + right: '' + }); + } + return element; + } + + function makeClipping(element) { + element = $(element); + + var storage = Element.getStorage(element), + madeClipping = storage.get('prototype_made_clipping'); + + if (Object.isUndefined(madeClipping)) { + var overflow = Element.getStyle(element, 'overflow'); + storage.set('prototype_made_clipping', overflow); + if (overflow !== 'hidden') + element.style.overflow = 'hidden'; + } + + return element; + } + + function undoClipping(element) { + element = $(element); + var storage = Element.getStorage(element), + overflow = storage.get('prototype_made_clipping'); + + if (!Object.isUndefined(overflow)) { + storage.unset('prototype_made_clipping'); + element.style.overflow = overflow || ''; + } + + return element; + } + + function clonePosition(element, source, options) { + options = Object.extend({ + setLeft: true, + setTop: true, + setWidth: true, + setHeight: true, + offsetTop: 0, + offsetLeft: 0 + }, options || {}); + + source = $(source); + element = $(element); + var p, delta, layout, styles = {}; + + if (options.setLeft || options.setTop) { + p = Element.viewportOffset(source); + delta = [0, 0]; + if (Element.getStyle(element, 'position') === 'absolute') { + var parent = Element.getOffsetParent(element); + if (parent !== document.body) delta = Element.viewportOffset(parent); + } + } + + if (options.setWidth || options.setHeight) { + layout = Element.getLayout(source); + } + + if (options.setLeft) + styles.left = (p[0] - delta[0] + options.offsetLeft) + 'px'; + if (options.setTop) + styles.top = (p[1] - delta[1] + options.offsetTop) + 'px'; + + if (options.setWidth) + styles.width = layout.get('border-box-width') + 'px'; + if (options.setHeight) + styles.height = layout.get('border-box-height') + 'px'; + + return Element.setStyle(element, styles); + } + + + if (Prototype.Browser.IE) { + getOffsetParent = getOffsetParent.wrap( + function(proceed, element) { + element = $(element); + + if (isDocument(element) || isDetached(element) || isBody(element) || isHtml(element)) + return $(document.body); + + var position = element.getStyle('position'); + if (position !== 'static') return proceed(element); + + element.setStyle({ position: 'relative' }); + var value = proceed(element); + element.setStyle({ position: position }); + return value; + } + ); + + positionedOffset = positionedOffset.wrap(function(proceed, element) { + element = $(element); + if (!element.parentNode) return new Element.Offset(0, 0); + var position = element.getStyle('position'); + if (position !== 'static') return proceed(element); + + var offsetParent = element.getOffsetParent(); + if (offsetParent && offsetParent.getStyle('position') === 'fixed') + hasLayout(offsetParent); + + element.setStyle({ position: 'relative' }); + var value = proceed(element); + element.setStyle({ position: position }); + return value; + }); + } else if (Prototype.Browser.Webkit) { + cumulativeOffset = function(element) { + element = $(element); + var valueT = 0, valueL = 0; + do { + valueT += element.offsetTop || 0; + valueL += element.offsetLeft || 0; + if (element.offsetParent == document.body) { + if (Element.getStyle(element, 'position') == 'absolute') break; + } + + element = element.offsetParent; + } while (element); + + return new Element.Offset(valueL, valueT); + }; + } + + + Element.addMethods({ + getLayout: getLayout, + measure: measure, + getWidth: getWidth, + getHeight: getHeight, + getDimensions: getDimensions, + getOffsetParent: getOffsetParent, + cumulativeOffset: cumulativeOffset, + positionedOffset: positionedOffset, + cumulativeScrollOffset: cumulativeScrollOffset, + viewportOffset: viewportOffset, + absolutize: absolutize, + relativize: relativize, + scrollTo: scrollTo, + makePositioned: makePositioned, + undoPositioned: undoPositioned, + makeClipping: makeClipping, + undoClipping: undoClipping, + clonePosition: clonePosition + }); + + function isBody(element) { + return element.nodeName.toUpperCase() === 'BODY'; + } + + function isHtml(element) { + return element.nodeName.toUpperCase() === 'HTML'; + } + + function isDocument(element) { + return element.nodeType === Node.DOCUMENT_NODE; + } + + function isDetached(element) { + return element !== document.body && + !Element.descendantOf(element, document.body); + } + + if ('getBoundingClientRect' in document.documentElement) { + Element.addMethods({ + viewportOffset: function(element) { + element = $(element); + if (isDetached(element)) return new Element.Offset(0, 0); + + var rect = element.getBoundingClientRect(), + docEl = document.documentElement; + return new Element.Offset(rect.left - docEl.clientLeft, + rect.top - docEl.clientTop); + } + }); + } + + +})(); + +(function() { + + var IS_OLD_OPERA = Prototype.Browser.Opera && + (window.parseFloat(window.opera.version()) < 9.5); + var ROOT = null; + function getRootElement() { + if (ROOT) return ROOT; + ROOT = IS_OLD_OPERA ? document.body : document.documentElement; + return ROOT; + } + + function getDimensions() { + return { width: this.getWidth(), height: this.getHeight() }; + } + + function getWidth() { + return getRootElement().clientWidth; + } + + function getHeight() { + return getRootElement().clientHeight; + } + + function getScrollOffsets() { + var x = window.pageXOffset || document.documentElement.scrollLeft || + document.body.scrollLeft; + var y = window.pageYOffset || document.documentElement.scrollTop || + document.body.scrollTop; + + return new Element.Offset(x, y); + } + + document.viewport = { + getDimensions: getDimensions, + getWidth: getWidth, + getHeight: getHeight, + getScrollOffsets: getScrollOffsets + }; + +})(); +window.$$ = function() { + var expression = $A(arguments).join(', '); + return Prototype.Selector.select(expression, document); +}; + +Prototype.Selector = (function() { + + function select() { + throw new Error('Method "Prototype.Selector.select" must be defined.'); + } + + function match() { + throw new Error('Method "Prototype.Selector.match" must be defined.'); + } + + function find(elements, expression, index) { + index = index || 0; + var match = Prototype.Selector.match, length = elements.length, matchIndex = 0, i; + + for (i = 0; i < length; i++) { + if (match(elements[i], expression) && index == matchIndex++) { + return Element.extend(elements[i]); + } + } + } + + function extendElements(elements) { + for (var i = 0, length = elements.length; i < length; i++) { + Element.extend(elements[i]); + } + return elements; + } + + + var K = Prototype.K; + + return { + select: select, + match: match, + find: find, + extendElements: (Element.extend === K) ? K : extendElements, + extendElement: Element.extend + }; +})(); +Prototype._original_property = window.Sizzle; +/*! + * Sizzle CSS Selector Engine v@VERSION + * http://sizzlejs.com/ + * + * Copyright 2013 jQuery Foundation, Inc. and other contributors + * Released under the MIT license + * http://jquery.org/license + * + * Date: @DATE + */ +(function( window ) { + +var i, + support, + Expr, + getText, + isXML, + compile, + select, + outermostContext, + sortInput, + hasDuplicate, + + setDocument, + document, + docElem, + documentIsHTML, + rbuggyQSA, + rbuggyMatches, + matches, + contains, + + expando = "sizzle" + -(new Date()), + preferredDoc = window.document, + dirruns = 0, + done = 0, + classCache = createCache(), + tokenCache = createCache(), + compilerCache = createCache(), + sortOrder = function( a, b ) { + if ( a === b ) { + hasDuplicate = true; + } + return 0; + }, + + strundefined = typeof undefined, + MAX_NEGATIVE = 1 << 31, + + hasOwn = ({}).hasOwnProperty, + arr = [], + pop = arr.pop, + push_native = arr.push, + push = arr.push, + slice = arr.slice, + indexOf = arr.indexOf || function( elem ) { + var i = 0, + len = this.length; + for ( ; i < len; i++ ) { + if ( this[i] === elem ) { + return i; + } + } + return -1; + }, + + booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped", + + + whitespace = "[\\x20\\t\\r\\n\\f]", + characterEncoding = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+", + + identifier = characterEncoding.replace( "w", "w#" ), + + attributes = "\\[" + whitespace + "*(" + characterEncoding + ")" + whitespace + + "*(?:([*^$|!~]?=)" + whitespace + "*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|(" + identifier + ")|)|)" + whitespace + "*\\]", + + pseudos = ":(" + characterEncoding + ")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|" + attributes.replace( 3, 8 ) + ")*)|.*)\\)|)", + + rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ), + + rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), + rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ), + + rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]", "g" ), + + rpseudo = new RegExp( pseudos ), + ridentifier = new RegExp( "^" + identifier + "$" ), + + matchExpr = { + "ID": new RegExp( "^#(" + characterEncoding + ")" ), + "CLASS": new RegExp( "^\\.(" + characterEncoding + ")" ), + "TAG": new RegExp( "^(" + characterEncoding.replace( "w", "w*" ) + ")" ), + "ATTR": new RegExp( "^" + attributes ), + "PSEUDO": new RegExp( "^" + pseudos ), + "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace + + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace + + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), + "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), + "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + + whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) + }, + + rinputs = /^(?:input|select|textarea|button)$/i, + rheader = /^h\d$/i, + + rnative = /^[^{]+\{\s*\[native \w/, + + rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, + + rsibling = /[+~]/, + rescape = /'|\\/g, + + runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ), + funescape = function( _, escaped, escapedWhitespace ) { + var high = "0x" + escaped - 0x10000; + return high !== high || escapedWhitespace ? + escaped : + high < 0 ? + String.fromCharCode( high + 0x10000 ) : + String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); + }; + +try { + push.apply( + (arr = slice.call( preferredDoc.childNodes )), + preferredDoc.childNodes + ); + arr[ preferredDoc.childNodes.length ].nodeType; +} catch ( e ) { + push = { apply: arr.length ? + + function( target, els ) { + push_native.apply( target, slice.call(els) ); + } : + + function( target, els ) { + var j = target.length, + i = 0; + while ( (target[j++] = els[i++]) ) {} + target.length = j - 1; + } + }; +} + +function Sizzle( selector, context, results, seed ) { + var match, elem, m, nodeType, + i, groups, old, nid, newContext, newSelector; + + if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) { + setDocument( context ); + } + + context = context || document; + results = results || []; + + if ( !selector || typeof selector !== "string" ) { + return results; + } + + if ( (nodeType = context.nodeType) !== 1 && nodeType !== 9 ) { + return []; + } + + if ( documentIsHTML && !seed ) { + + if ( (match = rquickExpr.exec( selector )) ) { + if ( (m = match[1]) ) { + if ( nodeType === 9 ) { + elem = context.getElementById( m ); + if ( elem && elem.parentNode ) { + if ( elem.id === m ) { + results.push( elem ); + return results; + } + } else { + return results; + } + } else { + if ( context.ownerDocument && (elem = context.ownerDocument.getElementById( m )) && + contains( context, elem ) && elem.id === m ) { + results.push( elem ); + return results; + } + } + + } else if ( match[2] ) { + push.apply( results, context.getElementsByTagName( selector ) ); + return results; + + } else if ( (m = match[3]) && support.getElementsByClassName && context.getElementsByClassName ) { + push.apply( results, context.getElementsByClassName( m ) ); + return results; + } + } + + if ( support.qsa && (!rbuggyQSA || !rbuggyQSA.test( selector )) ) { + nid = old = expando; + newContext = context; + newSelector = nodeType === 9 && selector; + + if ( nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) { + groups = tokenize( selector ); + + if ( (old = context.getAttribute("id")) ) { + nid = old.replace( rescape, "\\$&" ); + } else { + context.setAttribute( "id", nid ); + } + nid = "[id='" + nid + "'] "; + + i = groups.length; + while ( i-- ) { + groups[i] = nid + toSelector( groups[i] ); + } + newContext = rsibling.test( selector ) && testContext( context.parentNode ) || context; + newSelector = groups.join(","); + } + + if ( newSelector ) { + try { + push.apply( results, + newContext.querySelectorAll( newSelector ) + ); + return results; + } catch(qsaError) { + } finally { + if ( !old ) { + context.removeAttribute("id"); + } + } + } + } + } + + return select( selector.replace( rtrim, "$1" ), context, results, seed ); +} + +/** + * Create key-value caches of limited size + * @returns {Function(string, Object)} Returns the Object data after storing it on itself with + * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) + * deleting the oldest entry + */ +function createCache() { + var keys = []; + + function cache( key, value ) { + if ( keys.push( key + " " ) > Expr.cacheLength ) { + delete cache[ keys.shift() ]; + } + return (cache[ key + " " ] = value); + } + return cache; +} + +/** + * Mark a function for special use by Sizzle + * @param {Function} fn The function to mark + */ +function markFunction( fn ) { + fn[ expando ] = true; + return fn; +} + +/** + * Support testing using an element + * @param {Function} fn Passed the created div and expects a boolean result + */ +function assert( fn ) { + var div = document.createElement("div"); + + try { + return !!fn( div ); + } catch (e) { + return false; + } finally { + if ( div.parentNode ) { + div.parentNode.removeChild( div ); + } + div = null; + } +} + +/** + * Adds the same handler for all of the specified attrs + * @param {String} attrs Pipe-separated list of attributes + * @param {Function} handler The method that will be applied + */ +function addHandle( attrs, handler ) { + var arr = attrs.split("|"), + i = attrs.length; + + while ( i-- ) { + Expr.attrHandle[ arr[i] ] = handler; + } +} + +/** + * Checks document order of two siblings + * @param {Element} a + * @param {Element} b + * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b + */ +function siblingCheck( a, b ) { + var cur = b && a, + diff = cur && a.nodeType === 1 && b.nodeType === 1 && + ( ~b.sourceIndex || MAX_NEGATIVE ) - + ( ~a.sourceIndex || MAX_NEGATIVE ); + + if ( diff ) { + return diff; + } + + if ( cur ) { + while ( (cur = cur.nextSibling) ) { + if ( cur === b ) { + return -1; + } + } + } + + return a ? 1 : -1; +} + +/** + * Returns a function to use in pseudos for input types + * @param {String} type + */ +function createInputPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for buttons + * @param {String} type + */ +function createButtonPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return (name === "input" || name === "button") && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for positionals + * @param {Function} fn + */ +function createPositionalPseudo( fn ) { + return markFunction(function( argument ) { + argument = +argument; + return markFunction(function( seed, matches ) { + var j, + matchIndexes = fn( [], seed.length, argument ), + i = matchIndexes.length; + + while ( i-- ) { + if ( seed[ (j = matchIndexes[i]) ] ) { + seed[j] = !(matches[j] = seed[j]); + } + } + }); + }); +} + +/** + * Checks a node for validity as a Sizzle context + * @param {Element|Object=} context + * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value + */ +function testContext( context ) { + return context && typeof context.getElementsByTagName !== strundefined && context; +} + +support = Sizzle.support = {}; + +/** + * Detects XML nodes + * @param {Element|Object} elem An element or a document + * @returns {Boolean} True iff elem is a non-HTML XML node + */ +isXML = Sizzle.isXML = function( elem ) { + var documentElement = elem && (elem.ownerDocument || elem).documentElement; + return documentElement ? documentElement.nodeName !== "HTML" : false; +}; + +/** + * Sets document-related variables once based on the current document + * @param {Element|Object} [doc] An element or document object to use to set the document + * @returns {Object} Returns the current document + */ +setDocument = Sizzle.setDocument = function( node ) { + var hasCompare, + doc = node ? node.ownerDocument || node : preferredDoc, + parent = doc.defaultView; + + if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) { + return document; + } + + document = doc; + docElem = doc.documentElement; + + documentIsHTML = !isXML( doc ); + + if ( parent && parent !== parent.top ) { + if ( parent.addEventListener ) { + parent.addEventListener( "unload", function() { + setDocument(); + }, false ); + } else if ( parent.attachEvent ) { + parent.attachEvent( "onunload", function() { + setDocument(); + }); + } + } + + /* Attributes + ---------------------------------------------------------------------- */ + + support.attributes = assert(function( div ) { + div.className = "i"; + return !div.getAttribute("className"); + }); + + /* getElement(s)By* + ---------------------------------------------------------------------- */ + + support.getElementsByTagName = assert(function( div ) { + div.appendChild( doc.createComment("") ); + return !div.getElementsByTagName("*").length; + }); + + support.getElementsByClassName = rnative.test( doc.getElementsByClassName ) && assert(function( div ) { + div.innerHTML = "
    "; + + div.firstChild.className = "i"; + return div.getElementsByClassName("i").length === 2; + }); + + support.getById = assert(function( div ) { + docElem.appendChild( div ).id = expando; + return !doc.getElementsByName || !doc.getElementsByName( expando ).length; + }); + + if ( support.getById ) { + Expr.find["ID"] = function( id, context ) { + if ( typeof context.getElementById !== strundefined && documentIsHTML ) { + var m = context.getElementById( id ); + return m && m.parentNode ? [m] : []; + } + }; + Expr.filter["ID"] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + return elem.getAttribute("id") === attrId; + }; + }; + } else { + delete Expr.find["ID"]; + + Expr.filter["ID"] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + var node = typeof elem.getAttributeNode !== strundefined && elem.getAttributeNode("id"); + return node && node.value === attrId; + }; + }; + } + + Expr.find["TAG"] = support.getElementsByTagName ? + function( tag, context ) { + if ( typeof context.getElementsByTagName !== strundefined ) { + return context.getElementsByTagName( tag ); + } + } : + function( tag, context ) { + var elem, + tmp = [], + i = 0, + results = context.getElementsByTagName( tag ); + + if ( tag === "*" ) { + while ( (elem = results[i++]) ) { + if ( elem.nodeType === 1 ) { + tmp.push( elem ); + } + } + + return tmp; + } + return results; + }; + + Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) { + if ( typeof context.getElementsByClassName !== strundefined && documentIsHTML ) { + return context.getElementsByClassName( className ); + } + }; + + /* QSA/matchesSelector + ---------------------------------------------------------------------- */ + + + rbuggyMatches = []; + + rbuggyQSA = []; + + if ( (support.qsa = rnative.test( doc.querySelectorAll )) ) { + assert(function( div ) { + div.innerHTML = ""; + + if ( div.querySelectorAll("[t^='']").length ) { + rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); + } + + if ( !div.querySelectorAll("[selected]").length ) { + rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); + } + + if ( !div.querySelectorAll(":checked").length ) { + rbuggyQSA.push(":checked"); + } + }); + + assert(function( div ) { + var input = doc.createElement("input"); + input.setAttribute( "type", "hidden" ); + div.appendChild( input ).setAttribute( "name", "D" ); + + if ( div.querySelectorAll("[name=d]").length ) { + rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" ); + } + + if ( !div.querySelectorAll(":enabled").length ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + div.querySelectorAll("*,:x"); + rbuggyQSA.push(",.*:"); + }); + } + + if ( (support.matchesSelector = rnative.test( (matches = docElem.webkitMatchesSelector || + docElem.mozMatchesSelector || + docElem.oMatchesSelector || + docElem.msMatchesSelector) )) ) { + + assert(function( div ) { + support.disconnectedMatch = matches.call( div, "div" ); + + matches.call( div, "[s!='']:x" ); + rbuggyMatches.push( "!=", pseudos ); + }); + } + + rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") ); + rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") ); + + /* Contains + ---------------------------------------------------------------------- */ + hasCompare = rnative.test( docElem.compareDocumentPosition ); + + contains = hasCompare || rnative.test( docElem.contains ) ? + function( a, b ) { + var adown = a.nodeType === 9 ? a.documentElement : a, + bup = b && b.parentNode; + return a === bup || !!( bup && bup.nodeType === 1 && ( + adown.contains ? + adown.contains( bup ) : + a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 + )); + } : + function( a, b ) { + if ( b ) { + while ( (b = b.parentNode) ) { + if ( b === a ) { + return true; + } + } + } + return false; + }; + + /* Sorting + ---------------------------------------------------------------------- */ + + sortOrder = hasCompare ? + function( a, b ) { + + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; + if ( compare ) { + return compare; + } + + compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ? + a.compareDocumentPosition( b ) : + + 1; + + if ( compare & 1 || + (!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) { + + if ( a === doc || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) { + return -1; + } + if ( b === doc || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) { + return 1; + } + + return sortInput ? + ( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) : + 0; + } + + return compare & 4 ? -1 : 1; + } : + function( a, b ) { + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + var cur, + i = 0, + aup = a.parentNode, + bup = b.parentNode, + ap = [ a ], + bp = [ b ]; + + if ( !aup || !bup ) { + return a === doc ? -1 : + b === doc ? 1 : + aup ? -1 : + bup ? 1 : + sortInput ? + ( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) : + 0; + + } else if ( aup === bup ) { + return siblingCheck( a, b ); + } + + cur = a; + while ( (cur = cur.parentNode) ) { + ap.unshift( cur ); + } + cur = b; + while ( (cur = cur.parentNode) ) { + bp.unshift( cur ); + } + + while ( ap[i] === bp[i] ) { + i++; + } + + return i ? + siblingCheck( ap[i], bp[i] ) : + + ap[i] === preferredDoc ? -1 : + bp[i] === preferredDoc ? 1 : + 0; + }; + + return doc; +}; + +Sizzle.matches = function( expr, elements ) { + return Sizzle( expr, null, null, elements ); +}; + +Sizzle.matchesSelector = function( elem, expr ) { + if ( ( elem.ownerDocument || elem ) !== document ) { + setDocument( elem ); + } + + expr = expr.replace( rattributeQuotes, "='$1']" ); + + if ( support.matchesSelector && documentIsHTML && + ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) && + ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { + + try { + var ret = matches.call( elem, expr ); + + if ( ret || support.disconnectedMatch || + elem.document && elem.document.nodeType !== 11 ) { + return ret; + } + } catch(e) {} + } + + return Sizzle( expr, document, null, [elem] ).length > 0; +}; + +Sizzle.contains = function( context, elem ) { + if ( ( context.ownerDocument || context ) !== document ) { + setDocument( context ); + } + return contains( context, elem ); +}; + +Sizzle.attr = function( elem, name ) { + if ( ( elem.ownerDocument || elem ) !== document ) { + setDocument( elem ); + } + + var fn = Expr.attrHandle[ name.toLowerCase() ], + val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? + fn( elem, name, !documentIsHTML ) : + undefined; + + return val !== undefined ? + val : + support.attributes || !documentIsHTML ? + elem.getAttribute( name ) : + (val = elem.getAttributeNode(name)) && val.specified ? + val.value : + null; +}; + +Sizzle.error = function( msg ) { + throw new Error( "Syntax error, unrecognized expression: " + msg ); +}; + +/** + * Document sorting and removing duplicates + * @param {ArrayLike} results + */ +Sizzle.uniqueSort = function( results ) { + var elem, + duplicates = [], + j = 0, + i = 0; + + hasDuplicate = !support.detectDuplicates; + sortInput = !support.sortStable && results.slice( 0 ); + results.sort( sortOrder ); + + if ( hasDuplicate ) { + while ( (elem = results[i++]) ) { + if ( elem === results[ i ] ) { + j = duplicates.push( i ); + } + } + while ( j-- ) { + results.splice( duplicates[ j ], 1 ); + } + } + + sortInput = null; + + return results; +}; + +/** + * Utility function for retrieving the text value of an array of DOM nodes + * @param {Array|Element} elem + */ +getText = Sizzle.getText = function( elem ) { + var node, + ret = "", + i = 0, + nodeType = elem.nodeType; + + if ( !nodeType ) { + while ( (node = elem[i++]) ) { + ret += getText( node ); + } + } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { + if ( typeof elem.textContent === "string" ) { + return elem.textContent; + } else { + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + ret += getText( elem ); + } + } + } else if ( nodeType === 3 || nodeType === 4 ) { + return elem.nodeValue; + } + + return ret; +}; + +Expr = Sizzle.selectors = { + + cacheLength: 50, + + createPseudo: markFunction, + + match: matchExpr, + + attrHandle: {}, + + find: {}, + + relative: { + ">": { dir: "parentNode", first: true }, + " ": { dir: "parentNode" }, + "+": { dir: "previousSibling", first: true }, + "~": { dir: "previousSibling" } + }, + + preFilter: { + "ATTR": function( match ) { + match[1] = match[1].replace( runescape, funescape ); + + match[3] = ( match[4] || match[5] || "" ).replace( runescape, funescape ); + + if ( match[2] === "~=" ) { + match[3] = " " + match[3] + " "; + } + + return match.slice( 0, 4 ); + }, + + "CHILD": function( match ) { + /* matches from matchExpr["CHILD"] + 1 type (only|nth|...) + 2 what (child|of-type) + 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) + 4 xn-component of xn+y argument ([+-]?\d*n|) + 5 sign of xn-component + 6 x of xn-component + 7 sign of y-component + 8 y of y-component + */ + match[1] = match[1].toLowerCase(); + + if ( match[1].slice( 0, 3 ) === "nth" ) { + if ( !match[3] ) { + Sizzle.error( match[0] ); + } + + match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) ); + match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" ); + + } else if ( match[3] ) { + Sizzle.error( match[0] ); + } + + return match; + }, + + "PSEUDO": function( match ) { + var excess, + unquoted = !match[5] && match[2]; + + if ( matchExpr["CHILD"].test( match[0] ) ) { + return null; + } + + if ( match[3] && match[4] !== undefined ) { + match[2] = match[4]; + + } else if ( unquoted && rpseudo.test( unquoted ) && + (excess = tokenize( unquoted, true )) && + (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) { + + match[0] = match[0].slice( 0, excess ); + match[2] = unquoted.slice( 0, excess ); + } + + return match.slice( 0, 3 ); + } + }, + + filter: { + + "TAG": function( nodeNameSelector ) { + var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); + return nodeNameSelector === "*" ? + function() { return true; } : + function( elem ) { + return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; + }; + }, + + "CLASS": function( className ) { + var pattern = classCache[ className + " " ]; + + return pattern || + (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) && + classCache( className, function( elem ) { + return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== strundefined && elem.getAttribute("class") || "" ); + }); + }, + + "ATTR": function( name, operator, check ) { + return function( elem ) { + var result = Sizzle.attr( elem, name ); + + if ( result == null ) { + return operator === "!="; + } + if ( !operator ) { + return true; + } + + result += ""; + + return operator === "=" ? result === check : + operator === "!=" ? result !== check : + operator === "^=" ? check && result.indexOf( check ) === 0 : + operator === "*=" ? check && result.indexOf( check ) > -1 : + operator === "$=" ? check && result.slice( -check.length ) === check : + operator === "~=" ? ( " " + result + " " ).indexOf( check ) > -1 : + operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : + false; + }; + }, + + "CHILD": function( type, what, argument, first, last ) { + var simple = type.slice( 0, 3 ) !== "nth", + forward = type.slice( -4 ) !== "last", + ofType = what === "of-type"; + + return first === 1 && last === 0 ? + + function( elem ) { + return !!elem.parentNode; + } : + + function( elem, context, xml ) { + var cache, outerCache, node, diff, nodeIndex, start, + dir = simple !== forward ? "nextSibling" : "previousSibling", + parent = elem.parentNode, + name = ofType && elem.nodeName.toLowerCase(), + useCache = !xml && !ofType; + + if ( parent ) { + + if ( simple ) { + while ( dir ) { + node = elem; + while ( (node = node[ dir ]) ) { + if ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) { + return false; + } + } + start = dir = type === "only" && !start && "nextSibling"; + } + return true; + } + + start = [ forward ? parent.firstChild : parent.lastChild ]; + + if ( forward && useCache ) { + outerCache = parent[ expando ] || (parent[ expando ] = {}); + cache = outerCache[ type ] || []; + nodeIndex = cache[0] === dirruns && cache[1]; + diff = cache[0] === dirruns && cache[2]; + node = nodeIndex && parent.childNodes[ nodeIndex ]; + + while ( (node = ++nodeIndex && node && node[ dir ] || + + (diff = nodeIndex = 0) || start.pop()) ) { + + if ( node.nodeType === 1 && ++diff && node === elem ) { + outerCache[ type ] = [ dirruns, nodeIndex, diff ]; + break; + } + } + + } else if ( useCache && (cache = (elem[ expando ] || (elem[ expando ] = {}))[ type ]) && cache[0] === dirruns ) { + diff = cache[1]; + + } else { + while ( (node = ++nodeIndex && node && node[ dir ] || + (diff = nodeIndex = 0) || start.pop()) ) { + + if ( ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) && ++diff ) { + if ( useCache ) { + (node[ expando ] || (node[ expando ] = {}))[ type ] = [ dirruns, diff ]; + } + + if ( node === elem ) { + break; + } + } + } + } + + diff -= last; + return diff === first || ( diff % first === 0 && diff / first >= 0 ); + } + }; + }, + + "PSEUDO": function( pseudo, argument ) { + var args, + fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || + Sizzle.error( "unsupported pseudo: " + pseudo ); + + if ( fn[ expando ] ) { + return fn( argument ); + } + + if ( fn.length > 1 ) { + args = [ pseudo, pseudo, "", argument ]; + return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? + markFunction(function( seed, matches ) { + var idx, + matched = fn( seed, argument ), + i = matched.length; + while ( i-- ) { + idx = indexOf.call( seed, matched[i] ); + seed[ idx ] = !( matches[ idx ] = matched[i] ); + } + }) : + function( elem ) { + return fn( elem, 0, args ); + }; + } + + return fn; + } + }, + + pseudos: { + "not": markFunction(function( selector ) { + var input = [], + results = [], + matcher = compile( selector.replace( rtrim, "$1" ) ); + + return matcher[ expando ] ? + markFunction(function( seed, matches, context, xml ) { + var elem, + unmatched = matcher( seed, null, xml, [] ), + i = seed.length; + + while ( i-- ) { + if ( (elem = unmatched[i]) ) { + seed[i] = !(matches[i] = elem); + } + } + }) : + function( elem, context, xml ) { + input[0] = elem; + matcher( input, null, xml, results ); + return !results.pop(); + }; + }), + + "has": markFunction(function( selector ) { + return function( elem ) { + return Sizzle( selector, elem ).length > 0; + }; + }), + + "contains": markFunction(function( text ) { + return function( elem ) { + return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1; + }; + }), + + "lang": markFunction( function( lang ) { + if ( !ridentifier.test(lang || "") ) { + Sizzle.error( "unsupported lang: " + lang ); + } + lang = lang.replace( runescape, funescape ).toLowerCase(); + return function( elem ) { + var elemLang; + do { + if ( (elemLang = documentIsHTML ? + elem.lang : + elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) { + + elemLang = elemLang.toLowerCase(); + return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; + } + } while ( (elem = elem.parentNode) && elem.nodeType === 1 ); + return false; + }; + }), + + "target": function( elem ) { + var hash = window.location && window.location.hash; + return hash && hash.slice( 1 ) === elem.id; + }, + + "root": function( elem ) { + return elem === docElem; + }, + + "focus": function( elem ) { + return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex); + }, + + "enabled": function( elem ) { + return elem.disabled === false; + }, + + "disabled": function( elem ) { + return elem.disabled === true; + }, + + "checked": function( elem ) { + var nodeName = elem.nodeName.toLowerCase(); + return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected); + }, + + "selected": function( elem ) { + if ( elem.parentNode ) { + elem.parentNode.selectedIndex; + } + + return elem.selected === true; + }, + + "empty": function( elem ) { + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + if ( elem.nodeType < 6 ) { + return false; + } + } + return true; + }, + + "parent": function( elem ) { + return !Expr.pseudos["empty"]( elem ); + }, + + "header": function( elem ) { + return rheader.test( elem.nodeName ); + }, + + "input": function( elem ) { + return rinputs.test( elem.nodeName ); + }, + + "button": function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === "button" || name === "button"; + }, + + "text": function( elem ) { + var attr; + return elem.nodeName.toLowerCase() === "input" && + elem.type === "text" && + + ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" ); + }, + + "first": createPositionalPseudo(function() { + return [ 0 ]; + }), + + "last": createPositionalPseudo(function( matchIndexes, length ) { + return [ length - 1 ]; + }), + + "eq": createPositionalPseudo(function( matchIndexes, length, argument ) { + return [ argument < 0 ? argument + length : argument ]; + }), + + "even": createPositionalPseudo(function( matchIndexes, length ) { + var i = 0; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "odd": createPositionalPseudo(function( matchIndexes, length ) { + var i = 1; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "lt": createPositionalPseudo(function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; --i >= 0; ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "gt": createPositionalPseudo(function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; ++i < length; ) { + matchIndexes.push( i ); + } + return matchIndexes; + }) + } +}; + +Expr.pseudos["nth"] = Expr.pseudos["eq"]; + +for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { + Expr.pseudos[ i ] = createInputPseudo( i ); +} +for ( i in { submit: true, reset: true } ) { + Expr.pseudos[ i ] = createButtonPseudo( i ); +} + +function setFilters() {} +setFilters.prototype = Expr.filters = Expr.pseudos; +Expr.setFilters = new setFilters(); + +function tokenize( selector, parseOnly ) { + var matched, match, tokens, type, + soFar, groups, preFilters, + cached = tokenCache[ selector + " " ]; + + if ( cached ) { + return parseOnly ? 0 : cached.slice( 0 ); + } + + soFar = selector; + groups = []; + preFilters = Expr.preFilter; + + while ( soFar ) { + + if ( !matched || (match = rcomma.exec( soFar )) ) { + if ( match ) { + soFar = soFar.slice( match[0].length ) || soFar; + } + groups.push( (tokens = []) ); + } + + matched = false; + + if ( (match = rcombinators.exec( soFar )) ) { + matched = match.shift(); + tokens.push({ + value: matched, + type: match[0].replace( rtrim, " " ) + }); + soFar = soFar.slice( matched.length ); + } + + for ( type in Expr.filter ) { + if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] || + (match = preFilters[ type ]( match ))) ) { + matched = match.shift(); + tokens.push({ + value: matched, + type: type, + matches: match + }); + soFar = soFar.slice( matched.length ); + } + } + + if ( !matched ) { + break; + } + } + + return parseOnly ? + soFar.length : + soFar ? + Sizzle.error( selector ) : + tokenCache( selector, groups ).slice( 0 ); +} + +function toSelector( tokens ) { + var i = 0, + len = tokens.length, + selector = ""; + for ( ; i < len; i++ ) { + selector += tokens[i].value; + } + return selector; +} + +function addCombinator( matcher, combinator, base ) { + var dir = combinator.dir, + checkNonElements = base && dir === "parentNode", + doneName = done++; + + return combinator.first ? + function( elem, context, xml ) { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + return matcher( elem, context, xml ); + } + } + } : + + function( elem, context, xml ) { + var oldCache, outerCache, + newCache = [ dirruns, doneName ]; + + if ( xml ) { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + if ( matcher( elem, context, xml ) ) { + return true; + } + } + } + } else { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + outerCache = elem[ expando ] || (elem[ expando ] = {}); + if ( (oldCache = outerCache[ dir ]) && + oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { + + return (newCache[ 2 ] = oldCache[ 2 ]); + } else { + outerCache[ dir ] = newCache; + + if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) { + return true; + } + } + } + } + } + }; +} + +function elementMatcher( matchers ) { + return matchers.length > 1 ? + function( elem, context, xml ) { + var i = matchers.length; + while ( i-- ) { + if ( !matchers[i]( elem, context, xml ) ) { + return false; + } + } + return true; + } : + matchers[0]; +} + +function multipleContexts( selector, contexts, results ) { + var i = 0, + len = contexts.length; + for ( ; i < len; i++ ) { + Sizzle( selector, contexts[i], results ); + } + return results; +} + +function condense( unmatched, map, filter, context, xml ) { + var elem, + newUnmatched = [], + i = 0, + len = unmatched.length, + mapped = map != null; + + for ( ; i < len; i++ ) { + if ( (elem = unmatched[i]) ) { + if ( !filter || filter( elem, context, xml ) ) { + newUnmatched.push( elem ); + if ( mapped ) { + map.push( i ); + } + } + } + } + + return newUnmatched; +} + +function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { + if ( postFilter && !postFilter[ expando ] ) { + postFilter = setMatcher( postFilter ); + } + if ( postFinder && !postFinder[ expando ] ) { + postFinder = setMatcher( postFinder, postSelector ); + } + return markFunction(function( seed, results, context, xml ) { + var temp, i, elem, + preMap = [], + postMap = [], + preexisting = results.length, + + elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ), + + matcherIn = preFilter && ( seed || !selector ) ? + condense( elems, preMap, preFilter, context, xml ) : + elems, + + matcherOut = matcher ? + postFinder || ( seed ? preFilter : preexisting || postFilter ) ? + + [] : + + results : + matcherIn; + + if ( matcher ) { + matcher( matcherIn, matcherOut, context, xml ); + } + + if ( postFilter ) { + temp = condense( matcherOut, postMap ); + postFilter( temp, [], context, xml ); + + i = temp.length; + while ( i-- ) { + if ( (elem = temp[i]) ) { + matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem); + } + } + } + + if ( seed ) { + if ( postFinder || preFilter ) { + if ( postFinder ) { + temp = []; + i = matcherOut.length; + while ( i-- ) { + if ( (elem = matcherOut[i]) ) { + temp.push( (matcherIn[i] = elem) ); + } + } + postFinder( null, (matcherOut = []), temp, xml ); + } + + i = matcherOut.length; + while ( i-- ) { + if ( (elem = matcherOut[i]) && + (temp = postFinder ? indexOf.call( seed, elem ) : preMap[i]) > -1 ) { + + seed[temp] = !(results[temp] = elem); + } + } + } + + } else { + matcherOut = condense( + matcherOut === results ? + matcherOut.splice( preexisting, matcherOut.length ) : + matcherOut + ); + if ( postFinder ) { + postFinder( null, results, matcherOut, xml ); + } else { + push.apply( results, matcherOut ); + } + } + }); +} + +function matcherFromTokens( tokens ) { + var checkContext, matcher, j, + len = tokens.length, + leadingRelative = Expr.relative[ tokens[0].type ], + implicitRelative = leadingRelative || Expr.relative[" "], + i = leadingRelative ? 1 : 0, + + matchContext = addCombinator( function( elem ) { + return elem === checkContext; + }, implicitRelative, true ), + matchAnyContext = addCombinator( function( elem ) { + return indexOf.call( checkContext, elem ) > -1; + }, implicitRelative, true ), + matchers = [ function( elem, context, xml ) { + return ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( + (checkContext = context).nodeType ? + matchContext( elem, context, xml ) : + matchAnyContext( elem, context, xml ) ); + } ]; + + for ( ; i < len; i++ ) { + if ( (matcher = Expr.relative[ tokens[i].type ]) ) { + matchers = [ addCombinator(elementMatcher( matchers ), matcher) ]; + } else { + matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches ); + + if ( matcher[ expando ] ) { + j = ++i; + for ( ; j < len; j++ ) { + if ( Expr.relative[ tokens[j].type ] ) { + break; + } + } + return setMatcher( + i > 1 && elementMatcher( matchers ), + i > 1 && toSelector( + tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" }) + ).replace( rtrim, "$1" ), + matcher, + i < j && matcherFromTokens( tokens.slice( i, j ) ), + j < len && matcherFromTokens( (tokens = tokens.slice( j )) ), + j < len && toSelector( tokens ) + ); + } + matchers.push( matcher ); + } + } + + return elementMatcher( matchers ); +} + +function matcherFromGroupMatchers( elementMatchers, setMatchers ) { + var bySet = setMatchers.length > 0, + byElement = elementMatchers.length > 0, + superMatcher = function( seed, context, xml, results, outermost ) { + var elem, j, matcher, + matchedCount = 0, + i = "0", + unmatched = seed && [], + setMatched = [], + contextBackup = outermostContext, + elems = seed || byElement && Expr.find["TAG"]( "*", outermost ), + dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1), + len = elems.length; + + if ( outermost ) { + outermostContext = context !== document && context; + } + + for ( ; i !== len && (elem = elems[i]) != null; i++ ) { + if ( byElement && elem ) { + j = 0; + while ( (matcher = elementMatchers[j++]) ) { + if ( matcher( elem, context, xml ) ) { + results.push( elem ); + break; + } + } + if ( outermost ) { + dirruns = dirrunsUnique; + } + } + + if ( bySet ) { + if ( (elem = !matcher && elem) ) { + matchedCount--; + } + + if ( seed ) { + unmatched.push( elem ); + } + } + } + + matchedCount += i; + if ( bySet && i !== matchedCount ) { + j = 0; + while ( (matcher = setMatchers[j++]) ) { + matcher( unmatched, setMatched, context, xml ); + } + + if ( seed ) { + if ( matchedCount > 0 ) { + while ( i-- ) { + if ( !(unmatched[i] || setMatched[i]) ) { + setMatched[i] = pop.call( results ); + } + } + } + + setMatched = condense( setMatched ); + } + + push.apply( results, setMatched ); + + if ( outermost && !seed && setMatched.length > 0 && + ( matchedCount + setMatchers.length ) > 1 ) { + + Sizzle.uniqueSort( results ); + } + } + + if ( outermost ) { + dirruns = dirrunsUnique; + outermostContext = contextBackup; + } + + return unmatched; + }; + + return bySet ? + markFunction( superMatcher ) : + superMatcher; +} + +compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) { + var i, + setMatchers = [], + elementMatchers = [], + cached = compilerCache[ selector + " " ]; + + if ( !cached ) { + if ( !match ) { + match = tokenize( selector ); + } + i = match.length; + while ( i-- ) { + cached = matcherFromTokens( match[i] ); + if ( cached[ expando ] ) { + setMatchers.push( cached ); + } else { + elementMatchers.push( cached ); + } + } + + cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) ); + + cached.selector = selector; + } + return cached; +}; + +/** + * A low-level selection function that works with Sizzle's compiled + * selector functions + * @param {String|Function} selector A selector or a pre-compiled + * selector function built with Sizzle.compile + * @param {Element} context + * @param {Array} [results] + * @param {Array} [seed] A set of elements to match against + */ +select = Sizzle.select = function( selector, context, results, seed ) { + var i, tokens, token, type, find, + compiled = typeof selector === "function" && selector, + match = !seed && tokenize( (selector = compiled.selector || selector) ); + + results = results || []; + + if ( match.length === 1 ) { + + tokens = match[0] = match[0].slice( 0 ); + if ( tokens.length > 2 && (token = tokens[0]).type === "ID" && + support.getById && context.nodeType === 9 && documentIsHTML && + Expr.relative[ tokens[1].type ] ) { + + context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0]; + if ( !context ) { + return results; + + } else if ( compiled ) { + context = context.parentNode; + } + + selector = selector.slice( tokens.shift().value.length ); + } + + i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length; + while ( i-- ) { + token = tokens[i]; + + if ( Expr.relative[ (type = token.type) ] ) { + break; + } + if ( (find = Expr.find[ type ]) ) { + if ( (seed = find( + token.matches[0].replace( runescape, funescape ), + rsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context + )) ) { + + tokens.splice( i, 1 ); + selector = seed.length && toSelector( tokens ); + if ( !selector ) { + push.apply( results, seed ); + return results; + } + + break; + } + } + } + } + + ( compiled || compile( selector, match ) )( + seed, + context, + !documentIsHTML, + results, + rsibling.test( selector ) && testContext( context.parentNode ) || context + ); + return results; +}; + + +support.sortStable = expando.split("").sort( sortOrder ).join("") === expando; + +support.detectDuplicates = !!hasDuplicate; + +setDocument(); + +support.sortDetached = assert(function( div1 ) { + return div1.compareDocumentPosition( document.createElement("div") ) & 1; +}); + +if ( !assert(function( div ) { + div.innerHTML = ""; + return div.firstChild.getAttribute("href") === "#" ; +}) ) { + addHandle( "type|href|height|width", function( elem, name, isXML ) { + if ( !isXML ) { + return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 ); + } + }); +} + +if ( !support.attributes || !assert(function( div ) { + div.innerHTML = ""; + div.firstChild.setAttribute( "value", "" ); + return div.firstChild.getAttribute( "value" ) === ""; +}) ) { + addHandle( "value", function( elem, name, isXML ) { + if ( !isXML && elem.nodeName.toLowerCase() === "input" ) { + return elem.defaultValue; + } + }); +} + +if ( !assert(function( div ) { + return div.getAttribute("disabled") == null; +}) ) { + addHandle( booleans, function( elem, name, isXML ) { + var val; + if ( !isXML ) { + return elem[ name ] === true ? name.toLowerCase() : + (val = elem.getAttributeNode( name )) && val.specified ? + val.value : + null; + } + }); +} + +if ( typeof define === "function" && define.amd ) { + define(function() { return Sizzle; }); +} else if ( typeof module !== "undefined" && module.exports ) { + module.exports = Sizzle; +} else { + window.Sizzle = Sizzle; +} + +})( window ); + +;(function(engine) { + var extendElements = Prototype.Selector.extendElements; + + function select(selector, scope) { + return extendElements(engine(selector, scope || document)); + } + + function match(element, selector) { + return engine.matches(selector, [element]).length == 1; + } + + Prototype.Selector.engine = engine; + Prototype.Selector.select = select; + Prototype.Selector.match = match; +})(Sizzle); + +window.Sizzle = Prototype._original_property; +delete Prototype._original_property; + +var Form = { + reset: function(form) { + form = $(form); + form.reset(); + return form; + }, + + serializeElements: function(elements, options) { + if (typeof options != 'object') options = { hash: !!options }; + else if (Object.isUndefined(options.hash)) options.hash = true; + var key, value, submitted = false, submit = options.submit, accumulator, initial; + + if (options.hash) { + initial = {}; + accumulator = function(result, key, value) { + if (key in result) { + if (!Object.isArray(result[key])) result[key] = [result[key]]; + result[key] = result[key].concat(value); + } else result[key] = value; + return result; + }; + } else { + initial = ''; + accumulator = function(result, key, values) { + if (!Object.isArray(values)) {values = [values];} + if (!values.length) {return result;} + var encodedKey = encodeURIComponent(key).gsub(/%20/, '+'); + return result + (result ? "&" : "") + values.map(function (value) { + value = value.gsub(/(\r)?\n/, '\r\n'); + value = encodeURIComponent(value); + value = value.gsub(/%20/, '+'); + return encodedKey + "=" + value; + }).join("&"); + }; + } + + return elements.inject(initial, function(result, element) { + if (!element.disabled && element.name) { + key = element.name; value = $(element).getValue(); + if (value != null && element.type != 'file' && (element.type != 'submit' || (!submitted && + submit !== false && (!submit || key == submit) && (submitted = true)))) { + result = accumulator(result, key, value); + } + } + return result; + }); + } +}; + +Form.Methods = { + serialize: function(form, options) { + return Form.serializeElements(Form.getElements(form), options); + }, + + + getElements: function(form) { + var elements = $(form).getElementsByTagName('*'); + var element, results = [], serializers = Form.Element.Serializers; + + for (var i = 0; element = elements[i]; i++) { + if (serializers[element.tagName.toLowerCase()]) + results.push(Element.extend(element)); + } + return results; + }, + + getInputs: function(form, typeName, name) { + form = $(form); + var inputs = form.getElementsByTagName('input'); + + if (!typeName && !name) return $A(inputs).map(Element.extend); + + for (var i = 0, matchingInputs = [], length = inputs.length; i < length; i++) { + var input = inputs[i]; + if ((typeName && input.type != typeName) || (name && input.name != name)) + continue; + matchingInputs.push(Element.extend(input)); + } + + return matchingInputs; + }, + + disable: function(form) { + form = $(form); + Form.getElements(form).invoke('disable'); + return form; + }, + + enable: function(form) { + form = $(form); + Form.getElements(form).invoke('enable'); + return form; + }, + + findFirstElement: function(form) { + var elements = $(form).getElements().findAll(function(element) { + return 'hidden' != element.type && !element.disabled; + }); + var firstByIndex = elements.findAll(function(element) { + return element.hasAttribute('tabIndex') && element.tabIndex >= 0; + }).sortBy(function(element) { return element.tabIndex }).first(); + + return firstByIndex ? firstByIndex : elements.find(function(element) { + return /^(?:input|select|textarea)$/i.test(element.tagName); + }); + }, + + focusFirstElement: function(form) { + form = $(form); + var element = form.findFirstElement(); + if (element) element.activate(); + return form; + }, + + request: function(form, options) { + form = $(form), options = Object.clone(options || { }); + + var params = options.parameters, action = form.readAttribute('action') || ''; + if (action.blank()) action = window.location.href; + options.parameters = form.serialize(true); + + if (params) { + if (Object.isString(params)) params = params.toQueryParams(); + Object.extend(options.parameters, params); + } + + if (form.hasAttribute('method') && !options.method) + options.method = form.method; + + return new Ajax.Request(action, options); + } +}; + +/*--------------------------------------------------------------------------*/ + + +Form.Element = { + focus: function(element) { + $(element).focus(); + return element; + }, + + select: function(element) { + $(element).select(); + return element; + } +}; + +Form.Element.Methods = { + + serialize: function(element) { + element = $(element); + if (!element.disabled && element.name) { + var value = element.getValue(); + if (value != undefined) { + var pair = { }; + pair[element.name] = value; + return Object.toQueryString(pair); + } + } + return ''; + }, + + getValue: function(element) { + element = $(element); + var method = element.tagName.toLowerCase(); + return Form.Element.Serializers[method](element); + }, + + setValue: function(element, value) { + element = $(element); + var method = element.tagName.toLowerCase(); + Form.Element.Serializers[method](element, value); + return element; + }, + + clear: function(element) { + $(element).value = ''; + return element; + }, + + present: function(element) { + return $(element).value != ''; + }, + + activate: function(element) { + element = $(element); + try { + element.focus(); + if (element.select && (element.tagName.toLowerCase() != 'input' || + !(/^(?:button|reset|submit)$/i.test(element.type)))) + element.select(); + } catch (e) { } + return element; + }, + + disable: function(element) { + element = $(element); + element.disabled = true; + return element; + }, + + enable: function(element) { + element = $(element); + element.disabled = false; + return element; + } +}; + +/*--------------------------------------------------------------------------*/ + +var Field = Form.Element; + +var $F = Form.Element.Methods.getValue; + +/*--------------------------------------------------------------------------*/ + +Form.Element.Serializers = (function() { + function input(element, value) { + switch (element.type.toLowerCase()) { + case 'checkbox': + case 'radio': + return inputSelector(element, value); + default: + return valueSelector(element, value); + } + } + + function inputSelector(element, value) { + if (Object.isUndefined(value)) + return element.checked ? element.value : null; + else element.checked = !!value; + } + + function valueSelector(element, value) { + if (Object.isUndefined(value)) return element.value; + else element.value = value; + } + + function select(element, value) { + if (Object.isUndefined(value)) + return (element.type === 'select-one' ? selectOne : selectMany)(element); + + var opt, currentValue, single = !Object.isArray(value); + for (var i = 0, length = element.length; i < length; i++) { + opt = element.options[i]; + currentValue = this.optionValue(opt); + if (single) { + if (currentValue == value) { + opt.selected = true; + return; + } + } + else opt.selected = value.include(currentValue); + } + } + + function selectOne(element) { + var index = element.selectedIndex; + return index >= 0 ? optionValue(element.options[index]) : null; + } + + function selectMany(element) { + var values, length = element.length; + if (!length) return null; + + for (var i = 0, values = []; i < length; i++) { + var opt = element.options[i]; + if (opt.selected) values.push(optionValue(opt)); + } + return values; + } + + function optionValue(opt) { + return Element.hasAttribute(opt, 'value') ? opt.value : opt.text; + } + + return { + input: input, + inputSelector: inputSelector, + textarea: valueSelector, + select: select, + selectOne: selectOne, + selectMany: selectMany, + optionValue: optionValue, + button: valueSelector + }; +})(); + +/*--------------------------------------------------------------------------*/ + + +Abstract.TimedObserver = Class.create(PeriodicalExecuter, { + initialize: function($super, element, frequency, callback) { + $super(callback, frequency); + this.element = $(element); + this.lastValue = this.getValue(); + }, + + execute: function() { + var value = this.getValue(); + if (Object.isString(this.lastValue) && Object.isString(value) ? + this.lastValue != value : String(this.lastValue) != String(value)) { + this.callback(this.element, value); + this.lastValue = value; + } + } +}); + +Form.Element.Observer = Class.create(Abstract.TimedObserver, { + getValue: function() { + return Form.Element.getValue(this.element); + } +}); + +Form.Observer = Class.create(Abstract.TimedObserver, { + getValue: function() { + return Form.serialize(this.element); + } +}); + +/*--------------------------------------------------------------------------*/ + +Abstract.EventObserver = Class.create({ + initialize: function(element, callback) { + this.element = $(element); + this.callback = callback; + + this.lastValue = this.getValue(); + if (this.element.tagName.toLowerCase() == 'form') + this.registerFormCallbacks(); + else + this.registerCallback(this.element); + }, + + onElementEvent: function() { + var value = this.getValue(); + if (this.lastValue != value) { + this.callback(this.element, value); + this.lastValue = value; + } + }, + + registerFormCallbacks: function() { + Form.getElements(this.element).each(this.registerCallback, this); + }, + + registerCallback: function(element) { + if (element.type) { + switch (element.type.toLowerCase()) { + case 'checkbox': + case 'radio': + Event.observe(element, 'click', this.onElementEvent.bind(this)); + break; + default: + Event.observe(element, 'change', this.onElementEvent.bind(this)); + break; + } + } + } +}); + +Form.Element.EventObserver = Class.create(Abstract.EventObserver, { + getValue: function() { + return Form.Element.getValue(this.element); + } +}); + +Form.EventObserver = Class.create(Abstract.EventObserver, { + getValue: function() { + return Form.serialize(this.element); + } +}); +(function(GLOBAL) { + var DIV = document.createElement('div'); + var docEl = document.documentElement; + var MOUSEENTER_MOUSELEAVE_EVENTS_SUPPORTED = 'onmouseenter' in docEl + && 'onmouseleave' in docEl; + + var Event = { + KEY_BACKSPACE: 8, + KEY_TAB: 9, + KEY_RETURN: 13, + KEY_ESC: 27, + KEY_LEFT: 37, + KEY_UP: 38, + KEY_RIGHT: 39, + KEY_DOWN: 40, + KEY_DELETE: 46, + KEY_HOME: 36, + KEY_END: 35, + KEY_PAGEUP: 33, + KEY_PAGEDOWN: 34, + KEY_INSERT: 45 + }; + + + var isIELegacyEvent = function(event) { return false; }; + + if (window.attachEvent) { + if (window.addEventListener) { + isIELegacyEvent = function(event) { + return !(event instanceof window.Event); + }; + } else { + isIELegacyEvent = function(event) { return true; }; + } + } + + var _isButton; + + function _isButtonForDOMEvents(event, code) { + return event.which ? (event.which === code + 1) : (event.button === code); + } + + var legacyButtonMap = { 0: 1, 1: 4, 2: 2 }; + function _isButtonForLegacyEvents(event, code) { + return event.button === legacyButtonMap[code]; + } + + function _isButtonForWebKit(event, code) { + switch (code) { + case 0: return event.which == 1 && !event.metaKey; + case 1: return event.which == 2 || (event.which == 1 && event.metaKey); + case 2: return event.which == 3; + default: return false; + } + } + + if (window.attachEvent) { + if (!window.addEventListener) { + _isButton = _isButtonForLegacyEvents; + } else { + _isButton = function(event, code) { + return isIELegacyEvent(event) ? _isButtonForLegacyEvents(event, code) : + _isButtonForDOMEvents(event, code); + } + } + } else if (Prototype.Browser.WebKit) { + _isButton = _isButtonForWebKit; + } else { + _isButton = _isButtonForDOMEvents; + } + + function isLeftClick(event) { return _isButton(event, 0) } + + function isMiddleClick(event) { return _isButton(event, 1) } + + function isRightClick(event) { return _isButton(event, 2) } + + function element(event) { + return Element.extend(_element(event)); + } + + function _element(event) { + event = Event.extend(event); + + var node = event.target, type = event.type, + currentTarget = event.currentTarget; + + if (currentTarget && currentTarget.tagName) { + if (type === 'load' || type === 'error' || + (type === 'click' && currentTarget.tagName.toLowerCase() === 'input' + && currentTarget.type === 'radio')) + node = currentTarget; + } + + return node.nodeType == Node.TEXT_NODE ? node.parentNode : node; + } + + function findElement(event, expression) { + var element = _element(event), selector = Prototype.Selector; + if (!expression) return Element.extend(element); + while (element) { + if (Object.isElement(element) && selector.match(element, expression)) + return Element.extend(element); + element = element.parentNode; + } + } + + function pointer(event) { + return { x: pointerX(event), y: pointerY(event) }; + } + + function pointerX(event) { + var docElement = document.documentElement, + body = document.body || { scrollLeft: 0 }; + + return event.pageX || (event.clientX + + (docElement.scrollLeft || body.scrollLeft) - + (docElement.clientLeft || 0)); + } + + function pointerY(event) { + var docElement = document.documentElement, + body = document.body || { scrollTop: 0 }; + + return event.pageY || (event.clientY + + (docElement.scrollTop || body.scrollTop) - + (docElement.clientTop || 0)); + } + + + function stop(event) { + Event.extend(event); + event.preventDefault(); + event.stopPropagation(); + + event.stopped = true; + } + + + Event.Methods = { + isLeftClick: isLeftClick, + isMiddleClick: isMiddleClick, + isRightClick: isRightClick, + + element: element, + findElement: findElement, + + pointer: pointer, + pointerX: pointerX, + pointerY: pointerY, + + stop: stop + }; + + var methods = Object.keys(Event.Methods).inject({ }, function(m, name) { + m[name] = Event.Methods[name].methodize(); + return m; + }); + + if (window.attachEvent) { + function _relatedTarget(event) { + var element; + switch (event.type) { + case 'mouseover': + case 'mouseenter': + element = event.fromElement; + break; + case 'mouseout': + case 'mouseleave': + element = event.toElement; + break; + default: + return null; + } + return Element.extend(element); + } + + var additionalMethods = { + stopPropagation: function() { this.cancelBubble = true }, + preventDefault: function() { this.returnValue = false }, + inspect: function() { return '[object Event]' } + }; + + Event.extend = function(event, element) { + if (!event) return false; + + if (!isIELegacyEvent(event)) return event; + + if (event._extendedByPrototype) return event; + event._extendedByPrototype = Prototype.emptyFunction; + + var pointer = Event.pointer(event); + + Object.extend(event, { + target: event.srcElement || element, + relatedTarget: _relatedTarget(event), + pageX: pointer.x, + pageY: pointer.y + }); + + Object.extend(event, methods); + Object.extend(event, additionalMethods); + + return event; + }; + } else { + Event.extend = Prototype.K; + } + + if (window.addEventListener) { + Event.prototype = window.Event.prototype || document.createEvent('HTMLEvents').__proto__; + Object.extend(Event.prototype, methods); + } + + var EVENT_TRANSLATIONS = { + mouseenter: 'mouseover', + mouseleave: 'mouseout' + }; + + function getDOMEventName(eventName) { + return EVENT_TRANSLATIONS[eventName] || eventName; + } + + if (MOUSEENTER_MOUSELEAVE_EVENTS_SUPPORTED) + getDOMEventName = Prototype.K; + + function getUniqueElementID(element) { + if (element === window) return 0; + + if (typeof element._prototypeUID === 'undefined') + element._prototypeUID = Element.Storage.UID++; + return element._prototypeUID; + } + + function getUniqueElementID_IE(element) { + if (element === window) return 0; + if (element == document) return 1; + return element.uniqueID; + } + + if ('uniqueID' in DIV) + getUniqueElementID = getUniqueElementID_IE; + + function isCustomEvent(eventName) { + return eventName.include(':'); + } + + Event._isCustomEvent = isCustomEvent; + + function getRegistryForElement(element, uid) { + var CACHE = GLOBAL.Event.cache; + if (Object.isUndefined(uid)) + uid = getUniqueElementID(element); + if (!CACHE[uid]) CACHE[uid] = { element: element }; + return CACHE[uid]; + } + + function destroyRegistryForElement(element, uid) { + if (Object.isUndefined(uid)) + uid = getUniqueElementID(element); + delete GLOBAL.Event.cache[uid]; + } + + + function register(element, eventName, handler) { + var registry = getRegistryForElement(element); + if (!registry[eventName]) registry[eventName] = []; + var entries = registry[eventName]; + + var i = entries.length; + while (i--) + if (entries[i].handler === handler) return null; + + var uid = getUniqueElementID(element); + var responder = GLOBAL.Event._createResponder(uid, eventName, handler); + var entry = { + responder: responder, + handler: handler + }; + + entries.push(entry); + return entry; + } + + function unregister(element, eventName, handler) { + var registry = getRegistryForElement(element); + var entries = registry[eventName]; + if (!entries) return; + + var i = entries.length, entry; + while (i--) { + if (entries[i].handler === handler) { + entry = entries[i]; + break; + } + } + + if (!entry) return; + + var index = entries.indexOf(entry); + entries.splice(index, 1); + + return entry; + } + + + function observe(element, eventName, handler) { + element = $(element); + var entry = register(element, eventName, handler); + + if (entry === null) return element; + + var responder = entry.responder; + if (isCustomEvent(eventName)) + observeCustomEvent(element, eventName, responder); + else + observeStandardEvent(element, eventName, responder); + + return element; + } + + function observeStandardEvent(element, eventName, responder) { + var actualEventName = getDOMEventName(eventName); + if (element.addEventListener) { + element.addEventListener(actualEventName, responder, false); + } else { + element.attachEvent('on' + actualEventName, responder); + } + } + + function observeCustomEvent(element, eventName, responder) { + if (element.addEventListener) { + element.addEventListener('dataavailable', responder, false); + } else { + element.attachEvent('ondataavailable', responder); + element.attachEvent('onlosecapture', responder); + } + } + + function stopObserving(element, eventName, handler) { + element = $(element); + var handlerGiven = !Object.isUndefined(handler), + eventNameGiven = !Object.isUndefined(eventName); + + if (!eventNameGiven && !handlerGiven) { + stopObservingElement(element); + return element; + } + + if (!handlerGiven) { + stopObservingEventName(element, eventName); + return element; + } + + var entry = unregister(element, eventName, handler); + + if (!entry) return element; + removeEvent(element, eventName, entry.responder); + return element; + } + + function stopObservingStandardEvent(element, eventName, responder) { + var actualEventName = getDOMEventName(eventName); + if (element.removeEventListener) { + element.removeEventListener(actualEventName, responder, false); + } else { + element.detachEvent('on' + actualEventName, responder); + } + } + + function stopObservingCustomEvent(element, eventName, responder) { + if (element.removeEventListener) { + element.removeEventListener('dataavailable', responder, false); + } else { + element.detachEvent('ondataavailable', responder); + element.detachEvent('onlosecapture', responder); + } + } + + + + function stopObservingElement(element) { + var uid = getUniqueElementID(element), registry = GLOBAL.Event.cache[uid]; + if (!registry) return; + + destroyRegistryForElement(element, uid); + + var entries, i; + for (var eventName in registry) { + if (eventName === 'element') continue; + + entries = registry[eventName]; + i = entries.length; + while (i--) + removeEvent(element, eventName, entries[i].responder); + } + } + + function stopObservingEventName(element, eventName) { + var registry = getRegistryForElement(element); + var entries = registry[eventName]; + if (!entries) return; + delete registry[eventName]; + + var i = entries.length; + while (i--) + removeEvent(element, eventName, entries[i].responder); + } + + + function removeEvent(element, eventName, handler) { + if (isCustomEvent(eventName)) + stopObservingCustomEvent(element, eventName, handler); + else + stopObservingStandardEvent(element, eventName, handler); + } + + + + function getFireTarget(element) { + if (element !== document) return element; + if (document.createEvent && !element.dispatchEvent) + return document.documentElement; + return element; + } + + function fire(element, eventName, memo, bubble) { + element = getFireTarget($(element)); + if (Object.isUndefined(bubble)) bubble = true; + memo = memo || {}; + + var event = fireEvent(element, eventName, memo, bubble); + return Event.extend(event); + } + + function fireEvent_DOM(element, eventName, memo, bubble) { + var event = document.createEvent('HTMLEvents'); + event.initEvent('dataavailable', bubble, true); + + event.eventName = eventName; + event.memo = memo; + + element.dispatchEvent(event); + return event; + } + + function fireEvent_IE(element, eventName, memo, bubble) { + var event = document.createEventObject(); + event.eventType = bubble ? 'ondataavailable' : 'onlosecapture'; + + event.eventName = eventName; + event.memo = memo; + + element.fireEvent(event.eventType, event); + return event; + } + + var fireEvent = document.createEvent ? fireEvent_DOM : fireEvent_IE; + + + + Event.Handler = Class.create({ + initialize: function(element, eventName, selector, callback) { + this.element = $(element); + this.eventName = eventName; + this.selector = selector; + this.callback = callback; + this.handler = this.handleEvent.bind(this); + }, + + + start: function() { + Event.observe(this.element, this.eventName, this.handler); + return this; + }, + + stop: function() { + Event.stopObserving(this.element, this.eventName, this.handler); + return this; + }, + + handleEvent: function(event) { + var element = Event.findElement(event, this.selector); + if (element) this.callback.call(this.element, event, element); + } + }); + + function on(element, eventName, selector, callback) { + element = $(element); + if (Object.isFunction(selector) && Object.isUndefined(callback)) { + callback = selector, selector = null; + } + + return new Event.Handler(element, eventName, selector, callback).start(); + } + + Object.extend(Event, Event.Methods); + + Object.extend(Event, { + fire: fire, + observe: observe, + stopObserving: stopObserving, + on: on + }); + + Element.addMethods({ + fire: fire, + + observe: observe, + + stopObserving: stopObserving, + + on: on + }); + + Object.extend(document, { + fire: fire.methodize(), + + observe: observe.methodize(), + + stopObserving: stopObserving.methodize(), + + on: on.methodize(), + + loaded: false + }); + + if (GLOBAL.Event) Object.extend(window.Event, Event); + else GLOBAL.Event = Event; + + GLOBAL.Event.cache = {}; + + function destroyCache_IE() { + GLOBAL.Event.cache = null; + } + + if (window.attachEvent) + window.attachEvent('onunload', destroyCache_IE); + + DIV = null; + docEl = null; +})(this); + +(function(GLOBAL) { + /* Code for creating leak-free event responders is based on work by + John-David Dalton. */ + + var docEl = document.documentElement; + var MOUSEENTER_MOUSELEAVE_EVENTS_SUPPORTED = 'onmouseenter' in docEl + && 'onmouseleave' in docEl; + + function isSimulatedMouseEnterLeaveEvent(eventName) { + return !MOUSEENTER_MOUSELEAVE_EVENTS_SUPPORTED && + (eventName === 'mouseenter' || eventName === 'mouseleave'); + } + + function createResponder(uid, eventName, handler) { + if (Event._isCustomEvent(eventName)) + return createResponderForCustomEvent(uid, eventName, handler); + if (isSimulatedMouseEnterLeaveEvent(eventName)) + return createMouseEnterLeaveResponder(uid, eventName, handler); + + return function(event) { + if (!Event.cache) return; + + var element = Event.cache[uid].element; + Event.extend(event, element); + handler.call(element, event); + }; + } + + function createResponderForCustomEvent(uid, eventName, handler) { + return function(event) { + var element = Event.cache[uid].element; + + if (Object.isUndefined(event.eventName)) + return false; + + if (event.eventName !== eventName) + return false; + + Event.extend(event, element); + handler.call(element, event); + }; + } + + function createMouseEnterLeaveResponder(uid, eventName, handler) { + return function(event) { + var element = Event.cache[uid].element; + + Event.extend(event, element); + var parent = event.relatedTarget; + + while (parent && parent !== element) { + try { parent = parent.parentNode; } + catch(e) { parent = element; } + } + + if (parent === element) return; + handler.call(element, event); + } + } + + GLOBAL.Event._createResponder = createResponder; + docEl = null; +})(this); + +(function(GLOBAL) { + /* Support for the DOMContentLoaded event is based on work by Dan Webb, + Matthias Miller, Dean Edwards, John Resig, and Diego Perini. */ + + var TIMER; + + function fireContentLoadedEvent() { + if (document.loaded) return; + if (TIMER) window.clearTimeout(TIMER); + document.loaded = true; + document.fire('dom:loaded'); + } + + function checkReadyState() { + if (document.readyState === 'complete') { + document.detachEvent('onreadystatechange', checkReadyState); + fireContentLoadedEvent(); + } + } + + function pollDoScroll() { + try { + document.documentElement.doScroll('left'); + } catch (e) { + TIMER = pollDoScroll.defer(); + return; + } + + fireContentLoadedEvent(); + } + + + if (document.readyState === 'complete') { + fireContentLoadedEvent(); + return; + } + + if (document.addEventListener) { + document.addEventListener('DOMContentLoaded', fireContentLoadedEvent, false); + } else { + document.attachEvent('onreadystatechange', checkReadyState); + if (window == top) TIMER = pollDoScroll.defer(); + } + + Event.observe(window, 'load', fireContentLoadedEvent); +})(this); + + +Element.addMethods(); +/*------------------------------- DEPRECATED -------------------------------*/ + +Hash.toQueryString = Object.toQueryString; + +var Toggle = { display: Element.toggle }; + +Element.Methods.childOf = Element.Methods.descendantOf; + +var Insertion = { + Before: function(element, content) { + return Element.insert(element, {before:content}); + }, + + Top: function(element, content) { + return Element.insert(element, {top:content}); + }, + + Bottom: function(element, content) { + return Element.insert(element, {bottom:content}); + }, + + After: function(element, content) { + return Element.insert(element, {after:content}); + } +}; + +var $continue = new Error('"throw $continue" is deprecated, use "return" instead'); + +var Position = { + includeScrollOffsets: false, + + prepare: function() { + this.deltaX = window.pageXOffset + || document.documentElement.scrollLeft + || document.body.scrollLeft + || 0; + this.deltaY = window.pageYOffset + || document.documentElement.scrollTop + || document.body.scrollTop + || 0; + }, + + within: function(element, x, y) { + if (this.includeScrollOffsets) + return this.withinIncludingScrolloffsets(element, x, y); + this.xcomp = x; + this.ycomp = y; + this.offset = Element.cumulativeOffset(element); + + return (y >= this.offset[1] && + y < this.offset[1] + element.offsetHeight && + x >= this.offset[0] && + x < this.offset[0] + element.offsetWidth); + }, + + withinIncludingScrolloffsets: function(element, x, y) { + var offsetcache = Element.cumulativeScrollOffset(element); + + this.xcomp = x + offsetcache[0] - this.deltaX; + this.ycomp = y + offsetcache[1] - this.deltaY; + this.offset = Element.cumulativeOffset(element); + + return (this.ycomp >= this.offset[1] && + this.ycomp < this.offset[1] + element.offsetHeight && + this.xcomp >= this.offset[0] && + this.xcomp < this.offset[0] + element.offsetWidth); + }, + + overlap: function(mode, element) { + if (!mode) return 0; + if (mode == 'vertical') + return ((this.offset[1] + element.offsetHeight) - this.ycomp) / + element.offsetHeight; + if (mode == 'horizontal') + return ((this.offset[0] + element.offsetWidth) - this.xcomp) / + element.offsetWidth; + }, + + + cumulativeOffset: Element.Methods.cumulativeOffset, + + positionedOffset: Element.Methods.positionedOffset, + + absolutize: function(element) { + Position.prepare(); + return Element.absolutize(element); + }, + + relativize: function(element) { + Position.prepare(); + return Element.relativize(element); + }, + + realOffset: Element.Methods.cumulativeScrollOffset, + + offsetParent: Element.Methods.getOffsetParent, + + page: Element.Methods.viewportOffset, + + clone: function(source, target, options) { + options = options || { }; + return Element.clonePosition(target, source, options); + } +}; + +/*--------------------------------------------------------------------------*/ + +if (!document.getElementsByClassName) document.getElementsByClassName = function(instanceMethods){ + function iter(name) { + return name.blank() ? null : "[contains(concat(' ', @class, ' '), ' " + name + " ')]"; + } + + instanceMethods.getElementsByClassName = Prototype.BrowserFeatures.XPath ? + function(element, className) { + className = className.toString().strip(); + var cond = /\s/.test(className) ? $w(className).map(iter).join('') : iter(className); + return cond ? document._getElementsByXPath('.//*' + cond, element) : []; + } : function(element, className) { + className = className.toString().strip(); + var elements = [], classNames = (/\s/.test(className) ? $w(className) : null); + if (!classNames && !className) return elements; + + var nodes = $(element).getElementsByTagName('*'); + className = ' ' + className + ' '; + + for (var i = 0, child, cn; child = nodes[i]; i++) { + if (child.className && (cn = ' ' + child.className + ' ') && (cn.include(className) || + (classNames && classNames.all(function(name) { + return !name.toString().blank() && cn.include(' ' + name + ' '); + })))) + elements.push(Element.extend(child)); + } + return elements; + }; + + return function(className, parentElement) { + return $(parentElement || document.body).getElementsByClassName(className); + }; +}(Element.Methods); + +/*--------------------------------------------------------------------------*/ + +Element.ClassNames = Class.create(); +Element.ClassNames.prototype = { + initialize: function(element) { + this.element = $(element); + }, + + _each: function(iterator, context) { + this.element.className.split(/\s+/).select(function(name) { + return name.length > 0; + })._each(iterator, context); + }, + + set: function(className) { + this.element.className = className; + }, + + add: function(classNameToAdd) { + if (this.include(classNameToAdd)) return; + this.set($A(this).concat(classNameToAdd).join(' ')); + }, + + remove: function(classNameToRemove) { + if (!this.include(classNameToRemove)) return; + this.set($A(this).without(classNameToRemove).join(' ')); + }, + + toString: function() { + return $A(this).join(' '); + } +}; + +Object.extend(Element.ClassNames.prototype, Enumerable); + +/*--------------------------------------------------------------------------*/ + +(function() { + window.Selector = Class.create({ + initialize: function(expression) { + this.expression = expression.strip(); + }, + + findElements: function(rootElement) { + return Prototype.Selector.select(this.expression, rootElement); + }, + + match: function(element) { + return Prototype.Selector.match(element, this.expression); + }, + + toString: function() { + return this.expression; + }, + + inspect: function() { + return "#"; + } + }); + + Object.extend(Selector, { + matchElements: function(elements, expression) { + var match = Prototype.Selector.match, + results = []; + + for (var i = 0, length = elements.length; i < length; i++) { + var element = elements[i]; + if (match(element, expression)) { + results.push(Element.extend(element)); + } + } + return results; + }, + + findElement: function(elements, expression, index) { + index = index || 0; + var matchIndex = 0, element; + for (var i = 0, length = elements.length; i < length; i++) { + element = elements[i]; + if (Prototype.Selector.match(element, expression) && index === matchIndex++) { + return Element.extend(element); + } + } + }, + + findChildElements: function(element, expressions) { + var selector = expressions.toArray().join(', '); + return Prototype.Selector.select(selector, element || document); + } + }); +})(); + +/** + * Event.simulate(@element, eventName[, options]) -> Element + * + * - @element: element to fire event on + * - eventName: name of event to fire (only MouseEvents and HTMLEvents interfaces are supported) + * - options: optional object to fine-tune event properties - pointerX, pointerY, ctrlKey, etc. + * + * $('foo').simulate('click'); // => fires "click" event on an element with id=foo + * + **/ +(function(){ + + var eventMatchers = { + 'HTMLEvents': /^(?:load|unload|abort|error|select|change|submit|reset|focus|blur|resize|scroll|input)$/, + 'MouseEvents': /^(?:click|mouse(?:down|up|over|move|out))$/ + } + var defaultOptions = { + pointerX: 0, + pointerY: 0, + button: 0, + ctrlKey: false, + altKey: false, + shiftKey: false, + metaKey: false, + bubbles: true, + cancelable: true + } + + Event.simulate = function(element, eventName) { + var options = Object.extend(defaultOptions, arguments[2] || { }); + var oEvent, eventType = null; + + element = $(element); + + for (var name in eventMatchers) { + if (eventMatchers[name].test(eventName)) { eventType = name; break; } + } + + if (!eventType) + throw new SyntaxError('Only HTMLEvents and MouseEvents interfaces are supported'); + + if (document.createEvent) { + oEvent = document.createEvent(eventType); + if (eventType == 'HTMLEvents') { + oEvent.initEvent(eventName, options.bubbles, options.cancelable); + } + else { + oEvent.initMouseEvent(eventName, options.bubbles, options.cancelable, document.defaultView, + options.button, options.pointerX, options.pointerY, options.pointerX, options.pointerY, + options.ctrlKey, options.altKey, options.shiftKey, options.metaKey, options.button, element); + } + element.dispatchEvent(oEvent); + } + else { + options.clientX = options.pointerX; + options.clientY = options.pointerY; + oEvent = Object.extend(document.createEventObject(), options); + element.fireEvent('on' + eventName, oEvent); + } + return element; + } + + Element.addMethods({ simulate: Event.simulate }); +})() +function phi4z(t,i,s,e,o,n,a,r,h){var l,c,m,u,d,p,_,f,P,y;for(h=n,y=1;15>=y;y++)if(l=Math.sin(h),m=Math.tan(h),r=m*Math.sqrt(1-t*l*l),c=Math.sin(2*h),u=i*h-s*c+e*Math.sin(4*h)-o*Math.sin(6*h),d=i-2*s*Math.cos(2*h)+4*e*Math.cos(4*h)-6*o*Math.cos(6*h),p=2*u+r*(u*u+a)-2*n*(r*u+1),_=t*c*(u*u+a-2*n*u)/(2*r),f=2*(n-u)*(r*d-2/c)-2*d,P=p/(_+f),h+=P,1e-10>=Math.abs(P))return h;return Proj4js.reportError("phi4z: No convergence"),null}function e4fn(t){var i,s;return i=1+t,s=1-t,Math.sqrt(Math.pow(i,i)*Math.pow(s,s))}var Proj4js={defaultDatum:"WGS84",transform:function(t,i,s){if(!t.readyToUse)return this.reportError("Proj4js initialization for:"+t.srsCode+" not yet complete"),s;if(!i.readyToUse)return this.reportError("Proj4js initialization for:"+i.srsCode+" not yet complete"),s;if(t.datum&&i.datum&&((t.datum.datum_type==Proj4js.common.PJD_3PARAM||t.datum.datum_type==Proj4js.common.PJD_7PARAM)&&"WGS84"!=i.datumCode||(i.datum.datum_type==Proj4js.common.PJD_3PARAM||i.datum.datum_type==Proj4js.common.PJD_7PARAM)&&"WGS84"!=t.datumCode)){var e=Proj4js.WGS84;this.transform(t,e,s),t=e}return"enu"!=t.axis&&this.adjust_axis(t,!1,s),"longlat"==t.projName?(s.x*=Proj4js.common.D2R,s.y*=Proj4js.common.D2R):(t.to_meter&&(s.x*=t.to_meter,s.y*=t.to_meter),t.inverse(s)),t.from_greenwich&&(s.x+=t.from_greenwich),s=this.datum_transform(t.datum,i.datum,s),i.from_greenwich&&(s.x-=i.from_greenwich),"longlat"==i.projName?(s.x*=Proj4js.common.R2D,s.y*=Proj4js.common.R2D):(i.forward(s),i.to_meter&&(s.x/=i.to_meter,s.y/=i.to_meter)),"enu"!=i.axis&&this.adjust_axis(i,!0,s),s},datum_transform:function(t,i,s){return t.compare_datums(i)?s:t.datum_type==Proj4js.common.PJD_NODATUM||i.datum_type==Proj4js.common.PJD_NODATUM?s:((t.es!=i.es||t.a!=i.a||t.datum_type==Proj4js.common.PJD_3PARAM||t.datum_type==Proj4js.common.PJD_7PARAM||i.datum_type==Proj4js.common.PJD_3PARAM||i.datum_type==Proj4js.common.PJD_7PARAM)&&(t.geodetic_to_geocentric(s),(t.datum_type==Proj4js.common.PJD_3PARAM||t.datum_type==Proj4js.common.PJD_7PARAM)&&t.geocentric_to_wgs84(s),(i.datum_type==Proj4js.common.PJD_3PARAM||i.datum_type==Proj4js.common.PJD_7PARAM)&&i.geocentric_from_wgs84(s),i.geocentric_to_geodetic(s)),s)},adjust_axis:function(t,i,s){for(var e,o,n=s.x,a=s.y,r=s.z||0,h=0;3>h;h++)if(!i||2!=h||void 0!==s.z)switch(0==h?(e=n,o="x"):1==h?(e=a,o="y"):(e=r,o="z"),t.axis[h]){case"e":s[o]=e;break;case"w":s[o]=-e;break;case"n":s[o]=e;break;case"s":s[o]=-e;break;case"u":void 0!==s[o]&&(s.z=e);break;case"d":void 0!==s[o]&&(s.z=-e);break;default:return alert("ERROR: unknow axis ("+t.axis[h]+") - check definition of "+t.projName),null}return s},reportError:function(){},extend:function(t,i){if(t=t||{},i)for(var s in i){var e=i[s];void 0!==e&&(t[s]=e)}return t},Class:function(){for(var t,i=function(){this.initialize.apply(this,arguments)},s={},e=0;arguments.length>e;++e)t="function"==typeof arguments[e]?arguments[e].prototype:arguments[e],Proj4js.extend(s,t);return i.prototype=s,i},bind:function(t,i){var s=Array.prototype.slice.apply(arguments,[2]);return function(){var e=s.concat(Array.prototype.slice.apply(arguments,[0]));return t.apply(i,e)}},scriptName:"proj4js-combined.js",defsLookupService:"http://spatialreference.org/ref",libPath:null,getScriptLocation:function(){if(this.libPath)return this.libPath;for(var t=this.scriptName,i=t.length,s=document.getElementsByTagName("script"),e=0;s.length>e;e++){var o=s[e].getAttribute("src");if(o){var n=o.lastIndexOf(t);if(n>-1&&n+i==o.length){this.libPath=o.slice(0,-i);break}}}return this.libPath||""},loadScript:function(t,i,s,e){var o=document.createElement("script");o.defer=!1,o.type="text/javascript",o.id=t,o.src=t,o.onload=i,o.onerror=s,o.loadCheck=e,/MSIE/.test(navigator.userAgent)&&(o.onreadystatechange=this.checkReadyState),document.getElementsByTagName("head")[0].appendChild(o)},checkReadyState:function(){"loaded"==this.readyState&&(this.loadCheck()?this.onload():this.onerror())}};Proj4js.Proj=Proj4js.Class({readyToUse:!1,title:null,projName:null,units:null,datum:null,x0:0,y0:0,localCS:!1,queue:null,initialize:function(t,i){if(this.srsCodeInput=t,this.queue=[],i&&this.queue.push(i),t.indexOf("GEOGCS")>=0||t.indexOf("GEOCCS")>=0||t.indexOf("PROJCS")>=0||t.indexOf("LOCAL_CS")>=0)return this.parseWKT(t),this.deriveConstants(),this.loadProjCode(this.projName),void 0;if(0==t.indexOf("urn:")){var s=t.split(":");"ogc"!=s[1]&&"x-ogc"!=s[1]||"def"!=s[2]||"crs"!=s[3]||(t=s[4]+":"+s[s.length-1])}else if(0==t.indexOf("http://")){var e=t.split("#");e[0].match(/epsg.org/)?t="EPSG:"+e[1]:e[0].match(/RIG.xml/)&&(t="IGNF:"+e[1])}this.srsCode=t.toUpperCase(),0==this.srsCode.indexOf("EPSG")?(this.srsCode=this.srsCode,this.srsAuth="epsg",this.srsProjNumber=this.srsCode.substring(5)):0==this.srsCode.indexOf("IGNF")?(this.srsCode=this.srsCode,this.srsAuth="IGNF",this.srsProjNumber=this.srsCode.substring(5)):0==this.srsCode.indexOf("CRS")?(this.srsCode=this.srsCode,this.srsAuth="CRS",this.srsProjNumber=this.srsCode.substring(4)):(this.srsAuth="",this.srsProjNumber=this.srsCode),this.loadProjDefinition()},loadProjDefinition:function(){if(Proj4js.defs[this.srsCode])return this.defsLoaded(),void 0;var t=Proj4js.getScriptLocation()+"defs/"+this.srsAuth.toUpperCase()+this.srsProjNumber+".js";Proj4js.loadScript(t,Proj4js.bind(this.defsLoaded,this),Proj4js.bind(this.loadFromService,this),Proj4js.bind(this.checkDefsLoaded,this))},loadFromService:function(){var t=Proj4js.defsLookupService+"/"+this.srsAuth+"/"+this.srsProjNumber+"/proj4js/";Proj4js.loadScript(t,Proj4js.bind(this.defsLoaded,this),Proj4js.bind(this.defsFailed,this),Proj4js.bind(this.checkDefsLoaded,this))},defsLoaded:function(){this.parseDefs(),this.loadProjCode(this.projName)},checkDefsLoaded:function(){return Proj4js.defs[this.srsCode]?!0:!1},defsFailed:function(){Proj4js.reportError("failed to load projection definition for: "+this.srsCode),Proj4js.defs[this.srsCode]=Proj4js.defs.WGS84,this.defsLoaded()},loadProjCode:function(t){if(Proj4js.Proj[t])return this.initTransforms(),void 0;var i=Proj4js.getScriptLocation()+"projCode/"+t+".js";Proj4js.loadScript(i,Proj4js.bind(this.loadProjCodeSuccess,this,t),Proj4js.bind(this.loadProjCodeFailure,this,t),Proj4js.bind(this.checkCodeLoaded,this,t))},loadProjCodeSuccess:function(t){Proj4js.Proj[t].dependsOn?this.loadProjCode(Proj4js.Proj[t].dependsOn):this.initTransforms()},loadProjCodeFailure:function(t){Proj4js.reportError("failed to find projection file for: "+t)},checkCodeLoaded:function(t){return Proj4js.Proj[t]?!0:!1},initTransforms:function(){if(Proj4js.extend(this,Proj4js.Proj[this.projName]),this.init(),this.readyToUse=!0,this.queue)for(var t;t=this.queue.shift();)t.call(this,this)},wktRE:/^(\w+)\[(.*)\]$/,parseWKT:function(t){var i=t.match(this.wktRE);if(i){var s,e=i[1],o=i[2],n=o.split(",");s="TOWGS84"==e.toUpperCase()?e:n.shift(),s=s.replace(/^\"/,""),s=s.replace(/\"$/,"");for(var a=[],r=0,h="",l=0;n.length>l;++l){for(var c=n[l],m=0;c.length>m;++m)"["==c.charAt(m)&&++r,"]"==c.charAt(m)&&--r;h+=c,0===r?(a.push(h),h=""):h+=","}switch(e){case"LOCAL_CS":this.projName="identity",this.localCS=!0,this.srsCode=s;break;case"GEOGCS":this.projName="longlat",this.geocsCode=s,this.srsCode||(this.srsCode=s);break;case"PROJCS":this.srsCode=s;break;case"GEOCCS":break;case"PROJECTION":this.projName=Proj4js.wktProjections[s];break;case"DATUM":this.datumName=s;break;case"LOCAL_DATUM":this.datumCode="none";break;case"SPHEROID":this.ellps=s,this.a=parseFloat(a.shift()),this.rf=parseFloat(a.shift());break;case"PRIMEM":this.from_greenwich=parseFloat(a.shift());break;case"UNIT":this.units=s,this.unitsPerMeter=parseFloat(a.shift());break;case"PARAMETER":var u=s.toLowerCase(),d=parseFloat(a.shift());switch(u){case"false_easting":this.x0=d;break;case"false_northing":this.y0=d;break;case"scale_factor":this.k0=d;break;case"central_meridian":this.long0=d*Proj4js.common.D2R;break;case"latitude_of_origin":this.lat0=d*Proj4js.common.D2R;break;case"more_here":break;default:}break;case"TOWGS84":this.datum_params=a;break;case"AXIS":var u=s.toLowerCase(),d=a.shift();switch(d){case"EAST":d="e";break;case"WEST":d="w";break;case"NORTH":d="n";break;case"SOUTH":d="s";break;case"UP":d="u";break;case"DOWN":d="d";break;case"OTHER":default:d=" "}switch(this.axis||(this.axis="enu"),u){case"x":this.axis=d+this.axis.substr(1,2);break;case"y":this.axis=this.axis.substr(0,1)+d+this.axis.substr(2,1);break;case"z":this.axis=this.axis.substr(0,2)+d;break;default:}case"MORE_HERE":break;default:}for(var l=0;a.length>l;++l)this.parseWKT(a[l])}},parseDefs:function(){this.defData=Proj4js.defs[this.srsCode];var t,i;if(this.defData){for(var s=this.defData.split("+"),e=0;s.length>e;e++){var o=s[e].split("=");switch(t=o[0].toLowerCase(),i=o[1],t.replace(/\s/gi,"")){case"":break;case"title":this.title=i;break;case"proj":this.projName=i.replace(/\s/gi,"");break;case"units":this.units=i.replace(/\s/gi,"");break;case"datum":this.datumCode=i.replace(/\s/gi,"");break;case"nadgrids":this.nagrids=i.replace(/\s/gi,"");break;case"ellps":this.ellps=i.replace(/\s/gi,"");break;case"a":this.a=parseFloat(i);break;case"b":this.b=parseFloat(i);break;case"rf":this.rf=parseFloat(i);break;case"lat_0":this.lat0=i*Proj4js.common.D2R;break;case"lat_1":this.lat1=i*Proj4js.common.D2R;break;case"lat_2":this.lat2=i*Proj4js.common.D2R;break;case"lat_ts":this.lat_ts=i*Proj4js.common.D2R;break;case"lon_0":this.long0=i*Proj4js.common.D2R;break;case"alpha":this.alpha=parseFloat(i)*Proj4js.common.D2R;break;case"lonc":this.longc=i*Proj4js.common.D2R;break;case"x_0":this.x0=parseFloat(i);break;case"y_0":this.y0=parseFloat(i);break;case"k_0":this.k0=parseFloat(i);break;case"k":this.k0=parseFloat(i);break;case"r_a":this.R_A=!0;break;case"zone":this.zone=parseInt(i,10);break;case"south":this.utmSouth=!0;break;case"towgs84":this.datum_params=i.split(",");break;case"to_meter":this.to_meter=parseFloat(i);break;case"from_greenwich":this.from_greenwich=i*Proj4js.common.D2R;break;case"pm":i=i.replace(/\s/gi,""),this.from_greenwich=Proj4js.PrimeMeridian[i]?Proj4js.PrimeMeridian[i]:parseFloat(i),this.from_greenwich*=Proj4js.common.D2R;break;case"axis":i=i.replace(/\s/gi,"");var n="ewnsud";3==i.length&&-1!=n.indexOf(i.substr(0,1))&&-1!=n.indexOf(i.substr(1,1))&&-1!=n.indexOf(i.substr(2,1))&&(this.axis=i);break;case"no_defs":break;default:}}this.deriveConstants()}},deriveConstants:function(){if("@null"==this.nagrids&&(this.datumCode="none"),this.datumCode&&"none"!=this.datumCode){var t=Proj4js.Datum[this.datumCode];t&&(this.datum_params=t.towgs84?t.towgs84.split(","):null,this.ellps=t.ellipse,this.datumName=t.datumName?t.datumName:this.datumCode)}if(!this.a){var i=Proj4js.Ellipsoid[this.ellps]?Proj4js.Ellipsoid[this.ellps]:Proj4js.Ellipsoid.WGS84;Proj4js.extend(this,i)}this.rf&&!this.b&&(this.b=(1-1/this.rf)*this.a),(0===this.rf||Math.abs(this.a-this.b)=a;a++)if(s=t*Math.sin(n),e=this.HALF_PI-2*Math.atan(i*Math.pow((1-s)/(1+s),o))-n,n+=e,1e-10>=Math.abs(e))return n;return alert("phi2z has NoConvergence"),-9999},qsfnz:function(t,i){var s;return t>1e-7?(s=t*i,(1-t*t)*(i/(1-s*s)-.5/t*Math.log((1-s)/(1+s)))):2*i},asinz:function(t){return Math.abs(t)>1&&(t=t>1?1:-1),Math.asin(t)},e0fn:function(t){return 1-.25*t*(1+t/16*(3+1.25*t))},e1fn:function(t){return.375*t*(1+.25*t*(1+.46875*t))},e2fn:function(t){return.05859375*t*t*(1+.75*t)},e3fn:function(t){return t*t*t*(35/3072)},mlfn:function(t,i,s,e,o){return t*o-i*Math.sin(2*o)+s*Math.sin(4*o)-e*Math.sin(6*o)},srat:function(t,i){return Math.pow((1-t)/(1+t),i)},sign:function(t){return 0>t?-1:1},adjust_lon:function(t){return t=Math.abs(t)this.HALF_PI)return+Number.NaN;if(i==this.HALF_PI)return Number.POSITIVE_INFINITY;if(i==-1*this.HALF_PI)return-1*Number.POSITIVE_INFINITY;var e=t*s;return Math.log(Math.tan((this.HALF_PI+i)/2))+t*Math.log((1-e)/(1+e))/2},fL:function(t,i){return 2*Math.atan(t*Math.exp(i))-this.HALF_PI},invlatiso:function(t,i){var s=this.fL(1,i),e=0,o=0;do e=s,o=t*Math.sin(e),s=this.fL(Math.exp(t*Math.log((1+o)/(1-o))/2),i);while(Math.abs(s-e)>1e-12);return s},sinh:function(t){var i=Math.exp(t);return i=(i-1/i)/2},cosh:function(t){var i=Math.exp(t);return i=(i+1/i)/2},tanh:function(t){var i=Math.exp(t);return i=(i-1/i)/(i+1/i)},asinh:function(t){var i=t>=0?1:-1;return i*Math.log(Math.abs(t)+Math.sqrt(t*t+1))},acosh:function(t){return 2*Math.log(Math.sqrt((t+1)/2)+Math.sqrt((t-1)/2))},atanh:function(t){return Math.log((t-1)/(t+1))/2},gN:function(t,i,s){var e=i*s;return t/Math.sqrt(1-e*e)},pj_enfn:function(t){var i=[];i[0]=this.C00-t*(this.C02+t*(this.C04+t*(this.C06+t*this.C08))),i[1]=t*(this.C22-t*(this.C04+t*(this.C06+t*this.C08)));var s=t*t;return i[2]=s*(this.C44-t*(this.C46+t*this.C48)),s*=t,i[3]=s*(this.C66-t*this.C68),i[4]=s*t*this.C88,i},pj_mlfn:function(t,i,s,e){return s*=i,i*=i,e[0]*t-s*(e[1]+i*(e[2]+i*(e[3]+i*e[4])))},pj_inv_mlfn:function(t,i,s){for(var e=1/(1-i),o=t,n=Proj4js.common.MAX_ITER;n;--n){var a=Math.sin(o),r=1-i*a*a;if(r=(this.pj_mlfn(o,a,Math.cos(o),s)-t)*r*Math.sqrt(r)*e,o-=r,Math.abs(r)i;i++)t.datum_params[i]=parseFloat(t.datum_params[i]);(0!=t.datum_params[0]||0!=t.datum_params[1]||0!=t.datum_params[2])&&(this.datum_type=Proj4js.common.PJD_3PARAM),t.datum_params.length>3&&(0!=t.datum_params[3]||0!=t.datum_params[4]||0!=t.datum_params[5]||0!=t.datum_params[6])&&(this.datum_type=Proj4js.common.PJD_7PARAM,t.datum_params[3]*=Proj4js.common.SEC_TO_RAD,t.datum_params[4]*=Proj4js.common.SEC_TO_RAD,t.datum_params[5]*=Proj4js.common.SEC_TO_RAD,t.datum_params[6]=t.datum_params[6]/1e6+1)}t&&(this.a=t.a,this.b=t.b,this.es=t.es,this.ep2=t.ep2,this.datum_params=t.datum_params)},compare_datums:function(t){return this.datum_type!=t.datum_type?!1:this.a!=t.a||Math.abs(this.es-t.es)>5e-11?!1:this.datum_type==Proj4js.common.PJD_3PARAM?this.datum_params[0]==t.datum_params[0]&&this.datum_params[1]==t.datum_params[1]&&this.datum_params[2]==t.datum_params[2]:this.datum_type==Proj4js.common.PJD_7PARAM?this.datum_params[0]==t.datum_params[0]&&this.datum_params[1]==t.datum_params[1]&&this.datum_params[2]==t.datum_params[2]&&this.datum_params[3]==t.datum_params[3]&&this.datum_params[4]==t.datum_params[4]&&this.datum_params[5]==t.datum_params[5]&&this.datum_params[6]==t.datum_params[6]:this.datum_type==Proj4js.common.PJD_GRIDSHIFT||t.datum_type==Proj4js.common.PJD_GRIDSHIFT?(alert("ERROR: Grid shift transformations are not implemented."),!1):!0},geodetic_to_geocentric:function(t){var i,s,e,o,n,a,r,h=t.x,l=t.y,c=t.z?t.z:0,m=0;if(-Proj4js.common.HALF_PI>l&&l>-1.001*Proj4js.common.HALF_PI)l=-Proj4js.common.HALF_PI;else if(l>Proj4js.common.HALF_PI&&1.001*Proj4js.common.HALF_PI>l)l=Proj4js.common.HALF_PI;else if(-Proj4js.common.HALF_PI>l||l>Proj4js.common.HALF_PI)return Proj4js.reportError("geocent:lat out of range:"+l),null;return h>Proj4js.common.PI&&(h-=2*Proj4js.common.PI),n=Math.sin(l),r=Math.cos(l),a=n*n,o=this.a/Math.sqrt(1-this.es*a),i=(o+c)*r*Math.cos(h),s=(o+c)*r*Math.sin(h),e=(o*(1-this.es)+c)*n,t.x=i,t.y=s,t.z=e,m},geocentric_to_geodetic:function(t){var i,s,e,o,n,a,r,h,l,c,m,u,d,p,_,f,P,y=1e-12,g=y*y,L=30,v=t.x,j=t.y,M=t.z?t.z:0;if(d=!1,i=Math.sqrt(v*v+j*j),s=Math.sqrt(v*v+j*j+M*M),y>i/this.a){if(d=!0,_=0,y>s/this.a)return f=Proj4js.common.HALF_PI,P=-this.b,void 0}else _=Math.atan2(j,v);e=M/s,o=i/s,n=1/Math.sqrt(1-this.es*(2-this.es)*o*o),h=o*(1-this.es)*n,l=e*n,p=0;do p++,r=this.a/Math.sqrt(1-this.es*l*l),P=i*h+M*l-r*(1-this.es*l*l),a=this.es*r/(r+P),n=1/Math.sqrt(1-a*(2-a)*o*o),c=o*(1-a)*n,m=e*n,u=m*h-c*l,h=c,l=m;while(u*u>g&&L>p);return f=Math.atan(m/Math.abs(c)),t.x=_,t.y=f,t.z=P,t},geocentric_to_geodetic_noniter:function(t){var i,s,e,o,n,a,r,h,l,c,m,u,d,p,_,f,P,y=t.x,g=t.y,L=t.z?t.z:0;if(y=parseFloat(y),g=parseFloat(g),L=parseFloat(L),P=!1,0!=y)i=Math.atan2(g,y);else if(g>0)i=Proj4js.common.HALF_PI;else if(0>g)i=-Proj4js.common.HALF_PI;else if(P=!0,i=0,L>0)s=Proj4js.common.HALF_PI;else{if(!(0>L))return s=Proj4js.common.HALF_PI,e=-this.b,void 0;s=-Proj4js.common.HALF_PI}return n=y*y+g*g,o=Math.sqrt(n),a=L*Proj4js.common.AD_C,h=Math.sqrt(a*a+n),c=a/h,u=o/h,m=c*c*c,r=L+this.b*this.ep2*m,f=o-this.a*this.es*u*u*u,l=Math.sqrt(r*r+f*f),d=r/l,p=f/l,_=this.a/Math.sqrt(1-this.es*d*d),e=p>=Proj4js.common.COS_67P5?o/p-_:-Proj4js.common.COS_67P5>=p?o/-p-_:L/d+_*(this.es-1),0==P&&(s=Math.atan(d/p)),t.x=i,t.y=s,t.z=e,t},geocentric_to_wgs84:function(t){if(this.datum_type==Proj4js.common.PJD_3PARAM)t.x+=this.datum_params[0],t.y+=this.datum_params[1],t.z+=this.datum_params[2];else if(this.datum_type==Proj4js.common.PJD_7PARAM){var i=this.datum_params[0],s=this.datum_params[1],e=this.datum_params[2],o=this.datum_params[3],n=this.datum_params[4],a=this.datum_params[5],r=this.datum_params[6],h=r*(t.x-a*t.y+n*t.z)+i,l=r*(a*t.x+t.y-o*t.z)+s,c=r*(-n*t.x+o*t.y+t.z)+e;t.x=h,t.y=l,t.z=c}},geocentric_from_wgs84:function(t){if(this.datum_type==Proj4js.common.PJD_3PARAM)t.x-=this.datum_params[0],t.y-=this.datum_params[1],t.z-=this.datum_params[2];else if(this.datum_type==Proj4js.common.PJD_7PARAM){var i=this.datum_params[0],s=this.datum_params[1],e=this.datum_params[2],o=this.datum_params[3],n=this.datum_params[4],a=this.datum_params[5],r=this.datum_params[6],h=(t.x-i)/r,l=(t.y-s)/r,c=(t.z-e)/r;t.x=h+a*l-n*c,t.y=-a*h+l+o*c,t.z=n*h-o*l+c}}}),Proj4js.Point=Proj4js.Class({initialize:function(t,i,s){if("object"==typeof t)this.x=t[0],this.y=t[1],this.z=t[2]||0;else if("string"==typeof t&&i===void 0){var e=t.split(",");this.x=parseFloat(e[0]),this.y=parseFloat(e[1]),this.z=parseFloat(e[2])||0}else this.x=t,this.y=i,this.z=s||0},clone:function(){return new Proj4js.Point(this.x,this.y,this.z)},toString:function(){return"x="+this.x+",y="+this.y},toShortString:function(){return this.x+", "+this.y}}),Proj4js.PrimeMeridian={greenwich:0,lisbon:-9.131906111111,paris:2.337229166667,bogota:-74.080916666667,madrid:-3.687938888889,rome:12.452333333333,bern:7.439583333333,jakarta:106.807719444444,ferro:-17.666666666667,brussels:4.367975,stockholm:18.058277777778,athens:23.7163375,oslo:10.722916666667},Proj4js.Ellipsoid={MERIT:{a:6378137,rf:298.257,ellipseName:"MERIT 1983"},SGS85:{a:6378136,rf:298.257,ellipseName:"Soviet Geodetic System 85"},GRS80:{a:6378137,rf:298.257222101,ellipseName:"GRS 1980(IUGG, 1980)"},IAU76:{a:6378140,rf:298.257,ellipseName:"IAU 1976"},airy:{a:6377563.396,b:6356256.91,ellipseName:"Airy 1830"},"APL4.":{a:6378137,rf:298.25,ellipseName:"Appl. Physics. 1965"},NWL9D:{a:6378145,rf:298.25,ellipseName:"Naval Weapons Lab., 1965"},mod_airy:{a:6377340.189,b:6356034.446,ellipseName:"Modified Airy"},andrae:{a:6377104.43,rf:300,ellipseName:"Andrae 1876 (Den., Iclnd.)"},aust_SA:{a:6378160,rf:298.25,ellipseName:"Australian Natl & S. Amer. 1969"},GRS67:{a:6378160,rf:298.247167427,ellipseName:"GRS 67(IUGG 1967)"},bessel:{a:6377397.155,rf:299.1528128,ellipseName:"Bessel 1841"},bess_nam:{a:6377483.865,rf:299.1528128,ellipseName:"Bessel 1841 (Namibia)"},clrk66:{a:6378206.4,b:6356583.8,ellipseName:"Clarke 1866"},clrk80:{a:6378249.145,rf:293.4663,ellipseName:"Clarke 1880 mod."},CPM:{a:6375738.7,rf:334.29,ellipseName:"Comm. des Poids et Mesures 1799"},delmbr:{a:6376428,rf:311.5,ellipseName:"Delambre 1810 (Belgium)"},engelis:{a:6378136.05,rf:298.2566,ellipseName:"Engelis 1985"},evrst30:{a:6377276.345,rf:300.8017,ellipseName:"Everest 1830"},evrst48:{a:6377304.063,rf:300.8017,ellipseName:"Everest 1948"},evrst56:{a:6377301.243,rf:300.8017,ellipseName:"Everest 1956"},evrst69:{a:6377295.664,rf:300.8017,ellipseName:"Everest 1969"},evrstSS:{a:6377298.556,rf:300.8017,ellipseName:"Everest (Sabah & Sarawak)"},fschr60:{a:6378166,rf:298.3,ellipseName:"Fischer (Mercury Datum) 1960"},fschr60m:{a:6378155,rf:298.3,ellipseName:"Fischer 1960"},fschr68:{a:6378150,rf:298.3,ellipseName:"Fischer 1968"},helmert:{a:6378200,rf:298.3,ellipseName:"Helmert 1906"},hough:{a:6378270,rf:297,ellipseName:"Hough"},intl:{a:6378388,rf:297,ellipseName:"International 1909 (Hayford)"},kaula:{a:6378163,rf:298.24,ellipseName:"Kaula 1961"},lerch:{a:6378139,rf:298.257,ellipseName:"Lerch 1979"},mprts:{a:6397300,rf:191,ellipseName:"Maupertius 1738"},new_intl:{a:6378157.5,b:6356772.2,ellipseName:"New International 1967"},plessis:{a:6376523,rf:6355863,ellipseName:"Plessis 1817 (France)"},krass:{a:6378245,rf:298.3,ellipseName:"Krassovsky, 1942"},SEasia:{a:6378155,b:6356773.3205,ellipseName:"Southeast Asia"},walbeck:{a:6376896,b:6355834.8467,ellipseName:"Walbeck"},WGS60:{a:6378165,rf:298.3,ellipseName:"WGS 60"},WGS66:{a:6378145,rf:298.25,ellipseName:"WGS 66"},WGS72:{a:6378135,rf:298.26,ellipseName:"WGS 72"},WGS84:{a:6378137,rf:298.257223563,ellipseName:"WGS 84"},sphere:{a:6370997,b:6370997,ellipseName:"Normal Sphere (r=6370997)"}},Proj4js.Datum={WGS84:{towgs84:"0,0,0",ellipse:"WGS84",datumName:"WGS84"},GGRS87:{towgs84:"-199.87,74.79,246.62",ellipse:"GRS80",datumName:"Greek_Geodetic_Reference_System_1987"},NAD83:{towgs84:"0,0,0",ellipse:"GRS80",datumName:"North_American_Datum_1983"},NAD27:{nadgrids:"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat",ellipse:"clrk66",datumName:"North_American_Datum_1927"},potsdam:{towgs84:"606.0,23.0,413.0",ellipse:"bessel",datumName:"Potsdam Rauenberg 1950 DHDN"},carthage:{towgs84:"-263.0,6.0,431.0",ellipse:"clark80",datumName:"Carthage 1934 Tunisia"},hermannskogel:{towgs84:"653.0,-212.0,449.0",ellipse:"bessel",datumName:"Hermannskogel"},ire65:{towgs84:"482.530,-130.596,564.557,-1.042,-0.214,-0.631,8.15",ellipse:"mod_airy",datumName:"Ireland 1965"},nzgd49:{towgs84:"59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993",ellipse:"intl",datumName:"New Zealand Geodetic Datum 1949"},OSGB36:{towgs84:"446.448,-125.157,542.060,0.1502,0.2470,0.8421,-20.4894",ellipse:"airy",datumName:"Airy 1830"}},Proj4js.WGS84=new Proj4js.Proj("WGS84"),Proj4js.Datum.OSB36=Proj4js.Datum.OSGB36,Proj4js.wktProjections={"Lambert Tangential Conformal Conic Projection":"lcc",Mercator:"merc","Popular Visualisation Pseudo Mercator":"merc",Mercator_1SP:"merc",Transverse_Mercator:"tmerc","Transverse Mercator":"tmerc","Lambert Azimuthal Equal Area":"laea","Universal Transverse Mercator System":"utm"},Proj4js.Proj.aea={init:function(){return Math.abs(this.lat1+this.lat2)Proj4js.common.EPSLN?(this.ms1*this.ms1-this.ms2*this.ms2)/(this.qs2-this.qs1):this.con,this.c=this.ms1*this.ms1+this.ns0*this.qs1,this.rh=this.a*Math.sqrt(this.c-this.ns0*this.qs0)/this.ns0,void 0)},forward:function(t){var i=t.x,s=t.y;this.sin_phi=Math.sin(s),this.cos_phi=Math.cos(s);var e=Proj4js.common.qsfnz(this.e3,this.sin_phi,this.cos_phi),o=this.a*Math.sqrt(this.c-this.ns0*e)/this.ns0,n=this.ns0*Proj4js.common.adjust_lon(i-this.long0),a=o*Math.sin(n)+this.x0,r=this.rh-o*Math.cos(n)+this.y0;return t.x=a,t.y=r,t},inverse:function(t){var i,s,e,o,n,a;return t.x-=this.x0,t.y=this.rh-t.y+this.y0,this.ns0>=0?(i=Math.sqrt(t.x*t.x+t.y*t.y),e=1):(i=-Math.sqrt(t.x*t.x+t.y*t.y),e=-1),o=0,0!=i&&(o=Math.atan2(e*t.x,e*t.y)),e=i*this.ns0/this.a,s=(this.c-e*e)/this.ns0,this.e3>=1e-10?(e=1-.5*(1-this.es)*Math.log((1-this.e3)/(1+this.e3))/this.e3,a=Math.abs(Math.abs(e)-Math.abs(s))>1e-10?this.phi1z(this.e3,s):s>=0?.5*Proj4js.common.PI:-.5*Proj4js.common.PI):a=this.phi1z(this.e3,s),n=Proj4js.common.adjust_lon(o/this.ns0+this.long0),t.x=n,t.y=a,t},phi1z:function(t,i){var s,e,o,n,a,r=Proj4js.common.asinz(.5*i);if(Proj4js.common.EPSLN>t)return r;for(var h=t*t,l=1;25>=l;l++)if(s=Math.sin(r),e=Math.cos(r),o=t*s,n=1-o*o,a=.5*n*n/e*(i/(1-h)-s/n+.5/t*Math.log((1-o)/(1+o))),r+=a,1e-7>=Math.abs(a))return r;return Proj4js.reportError("aea:phi1z:Convergence error"),null}},Proj4js.Proj.sterea={dependsOn:"gauss",init:function(){return Proj4js.Proj.gauss.init.apply(this),this.rc?(this.sinc0=Math.sin(this.phic0),this.cosc0=Math.cos(this.phic0),this.R2=2*this.rc,this.title||(this.title="Oblique Stereographic Alternative"),void 0):(Proj4js.reportError("sterea:init:E_ERROR_0"),void 0)},forward:function(t){var i,s,e,o;return t.x=Proj4js.common.adjust_lon(t.x-this.long0),Proj4js.Proj.gauss.forward.apply(this,[t]),i=Math.sin(t.y),s=Math.cos(t.y),e=Math.cos(t.x),o=this.k0*this.R2/(1+this.sinc0*i+this.cosc0*s*e),t.x=o*s*Math.sin(t.x),t.y=o*(this.cosc0*i-this.sinc0*s*e),t.x=this.a*t.x+this.x0,t.y=this.a*t.y+this.y0,t},inverse:function(t){var i,s,e,o,n;if(t.x=(t.x-this.x0)/this.a,t.y=(t.y-this.y0)/this.a,t.x/=this.k0,t.y/=this.k0,n=Math.sqrt(t.x*t.x+t.y*t.y)){var a=2*Math.atan2(n,this.R2);i=Math.sin(a),s=Math.cos(a),o=Math.asin(s*this.sinc0+t.y*i*this.cosc0/n),e=Math.atan2(t.x*i,n*this.cosc0*s-t.y*this.sinc0*i)}else o=this.phic0,e=0;return t.x=e,t.y=o,Proj4js.Proj.gauss.inverse.apply(this,[t]),t.x=Proj4js.common.adjust_lon(t.x+this.long0),t}},Proj4js.Proj.poly={init:function(){0==this.lat0&&(this.lat0=90),this.temp=this.b/this.a,this.es=1-Math.pow(this.temp,2),this.e=Math.sqrt(this.es),this.e0=Proj4js.common.e0fn(this.es),this.e1=Proj4js.common.e1fn(this.es),this.e2=Proj4js.common.e2fn(this.es),this.e3=Proj4js.common.e3fn(this.es),this.ml0=Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,this.lat0)},forward:function(t){var i,s,e,o,n,a,r,h=t.x,l=t.y;return e=Proj4js.common.adjust_lon(h-this.long0),1e-7>=Math.abs(l)?(a=this.x0+this.a*e,r=this.y0-this.a*this.ml0):(i=Math.sin(l),s=Math.cos(l),o=Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,l),n=Proj4js.common.msfnz(this.e,i,s),e=i,a=this.x0+this.a*n*Math.sin(e)/i,r=this.y0+this.a*(o-this.ml0+n*(1-Math.cos(e))/i)),t.x=a,t.y=r,t},inverse:function(t){var i,s,e,o,n,a;if(t.x-=this.x0,t.y-=this.y0,i=this.ml0+t.y/this.a,o=0,1e-7>=Math.abs(i))n=t.x/this.a+this.long0,a=0;else{if(s=i*i+t.x/this.a*(t.x/this.a),o=phi4z(this.es,this.e0,this.e1,this.e2,this.e3,this.al,s,e,a),1!=o)return o;n=Proj4js.common.adjust_lon(Proj4js.common.asinz(t.x*e/this.a)/Math.sin(a)+this.long0)}return t.x=n,t.y=a,t}},Proj4js.Proj.equi={init:function(){this.x0||(this.x0=0),this.y0||(this.y0=0),this.lat0||(this.lat0=0),this.long0||(this.long0=0)},forward:function(t){var i=t.x,s=t.y,e=Proj4js.common.adjust_lon(i-this.long0),o=this.x0+this.a*e*Math.cos(this.lat0),n=this.y0+this.a*s;return this.t1=o,this.t2=Math.cos(this.lat0),t.x=o,t.y=n,t},inverse:function(t){t.x-=this.x0,t.y-=this.y0;var i=t.y/this.a;Math.abs(i)>Proj4js.common.HALF_PI&&Proj4js.reportError("equi:Inv:DataError");var s=Proj4js.common.adjust_lon(this.long0+t.x/(this.a*Math.cos(this.lat0)));t.x=s,t.y=i}},Proj4js.Proj.merc={init:function(){this.lat_ts&&(this.k0=this.sphere?Math.cos(this.lat_ts):Proj4js.common.msfnz(this.es,Math.sin(this.lat_ts),Math.cos(this.lat_ts)))},forward:function(t){var i=t.x,s=t.y;if(s*Proj4js.common.R2D>90&&-90>s*Proj4js.common.R2D&&i*Proj4js.common.R2D>180&&-180>i*Proj4js.common.R2D)return Proj4js.reportError("merc:forward: llInputOutOfRange: "+i+" : "+s),null;var e,o;if(Math.abs(Math.abs(s)-Proj4js.common.HALF_PI)<=Proj4js.common.EPSLN)return Proj4js.reportError("merc:forward: ll2mAtPoles"),null;if(this.sphere)e=this.x0+this.a*this.k0*Proj4js.common.adjust_lon(i-this.long0),o=this.y0+this.a*this.k0*Math.log(Math.tan(Proj4js.common.FORTPI+.5*s));else{var n=Math.sin(s),a=Proj4js.common.tsfnz(this.e,s,n);e=this.x0+this.a*this.k0*Proj4js.common.adjust_lon(i-this.long0),o=this.y0-this.a*this.k0*Math.log(a)}return t.x=e,t.y=o,t},inverse:function(t){var i,s,e=t.x-this.x0,o=t.y-this.y0;if(this.sphere)s=Proj4js.common.HALF_PI-2*Math.atan(Math.exp(-o/this.a*this.k0));else{var n=Math.exp(-o/(this.a*this.k0));if(s=Proj4js.common.phi2z(this.e,n),-9999==s)return Proj4js.reportError("merc:inverse: lat = -9999"),null}return i=Proj4js.common.adjust_lon(this.long0+e/(this.a*this.k0)),t.x=i,t.y=s,t}},Proj4js.Proj.utm={dependsOn:"tmerc",init:function(){return this.zone?(this.lat0=0,this.long0=(6*Math.abs(this.zone)-183)*Proj4js.common.D2R,this.x0=5e5,this.y0=this.utmSouth?1e7:0,this.k0=.9996,Proj4js.Proj.tmerc.init.apply(this),this.forward=Proj4js.Proj.tmerc.forward,this.inverse=Proj4js.Proj.tmerc.inverse,void 0):(Proj4js.reportError("utm:init: zone must be specified for UTM"),void 0)}},Proj4js.Proj.eqdc={init:function(){this.mode||(this.mode=0),this.temp=this.b/this.a,this.es=1-Math.pow(this.temp,2),this.e=Math.sqrt(this.es),this.e0=Proj4js.common.e0fn(this.es),this.e1=Proj4js.common.e1fn(this.es),this.e2=Proj4js.common.e2fn(this.es),this.e3=Proj4js.common.e3fn(this.es),this.sinphi=Math.sin(this.lat1),this.cosphi=Math.cos(this.lat1),this.ms1=Proj4js.common.msfnz(this.e,this.sinphi,this.cosphi),this.ml1=Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,this.lat1),0!=this.mode?(Math.abs(this.lat1+this.lat2)=Proj4js.common.EPSLN?(this.ms1-this.ms2)/(this.ml2-this.ml1):this.sinphi):this.ns=this.sinphi,this.g=this.ml1+this.ms1/this.ns,this.ml0=Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,this.lat0),this.rh=this.a*(this.g-this.ml0) +},forward:function(t){var i=t.x,s=t.y,e=Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,s),o=this.a*(this.g-e),n=this.ns*Proj4js.common.adjust_lon(i-this.long0),a=this.x0+o*Math.sin(n),r=this.y0+this.rh-o*Math.cos(n);return t.x=a,t.y=r,t},inverse:function(t){t.x-=this.x0,t.y=this.rh-t.y+this.y0;var i,s;this.ns>=0?(s=Math.sqrt(t.x*t.x+t.y*t.y),i=1):(s=-Math.sqrt(t.x*t.x+t.y*t.y),i=-1);var e=0;0!=s&&(e=Math.atan2(i*t.x,i*t.y));var o=this.g-s/this.a,n=this.phi3z(o,this.e0,this.e1,this.e2,this.e3),a=Proj4js.common.adjust_lon(this.long0+e/this.ns);return t.x=a,t.y=n,t},phi3z:function(t,i,s,e,o){var n,a;n=t;for(var r=0;15>r;r++)if(a=(t+s*Math.sin(2*n)-e*Math.sin(4*n)+o*Math.sin(6*n))/i-n,n+=a,1e-10>=Math.abs(a))return n;return Proj4js.reportError("PHI3Z-CONV:Latitude failed to converge after 15 iterations"),null}},Proj4js.Proj.tmerc={init:function(){this.e0=Proj4js.common.e0fn(this.es),this.e1=Proj4js.common.e1fn(this.es),this.e2=Proj4js.common.e2fn(this.es),this.e3=Proj4js.common.e3fn(this.es),this.ml0=this.a*Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,this.lat0)},forward:function(t){var i,s,e,o=t.x,n=t.y,a=Proj4js.common.adjust_lon(o-this.long0),r=Math.sin(n),h=Math.cos(n);if(this.sphere){var l=h*Math.sin(a);if(1e-10>Math.abs(Math.abs(l)-1))return Proj4js.reportError("tmerc:forward: Point projects into infinity"),93;s=.5*this.a*this.k0*Math.log((1+l)/(1-l)),i=Math.acos(h*Math.cos(a)/Math.sqrt(1-l*l)),0>n&&(i=-i),e=this.a*this.k0*(i-this.lat0)}else{var c=h*a,m=Math.pow(c,2),u=this.ep2*Math.pow(h,2),d=Math.tan(n),p=Math.pow(d,2);i=1-this.es*Math.pow(r,2);var _=this.a/Math.sqrt(i),f=this.a*Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,n);s=this.k0*_*c*(1+m/6*(1-p+u+m/20*(5-18*p+Math.pow(p,2)+72*u-58*this.ep2)))+this.x0,e=this.k0*(f-this.ml0+_*d*m*(.5+m/24*(5-p+9*u+4*Math.pow(u,2)+m/30*(61-58*p+Math.pow(p,2)+600*u-330*this.ep2))))+this.y0}return t.x=s,t.y=e,t},inverse:function(t){var i,s,e,o,n,a,r=6;if(this.sphere){var h=Math.exp(t.x/(this.a*this.k0)),l=.5*(h-1/h),c=this.lat0+t.y/(this.a*this.k0),m=Math.cos(c);i=Math.sqrt((1-m*m)/(1+l*l)),n=Proj4js.common.asinz(i),0>c&&(n=-n),a=0==l&&0==m?this.long0:Proj4js.common.adjust_lon(Math.atan2(l,m)+this.long0)}else{var u=t.x-this.x0,d=t.y-this.y0;for(i=(this.ml0+d/this.k0)/this.a,s=i,o=0;!0&&(e=(i+this.e1*Math.sin(2*s)-this.e2*Math.sin(4*s)+this.e3*Math.sin(6*s))/this.e0-s,s+=e,!(Math.abs(e)<=Proj4js.common.EPSLN));o++)if(o>=r)return Proj4js.reportError("tmerc:inverse: Latitude failed to converge"),95;if(Math.abs(s)0||Math.abs(a)<=Proj4js.common.EPSLN)var l=this.a*n*s*Math.sin(e),c=this.y0+this.a*n*(this.cos_p14*i-this.sin_p14*s*o);else Proj4js.reportError("orthoFwdPointError");return t.x=l,t.y=c,t},inverse:function(t){var i,s,e,o,n,a,r;return t.x-=this.x0,t.y-=this.y0,i=Math.sqrt(t.x*t.x+t.y*t.y),i>this.a+1e-7&&Proj4js.reportError("orthoInvDataError"),s=Proj4js.common.asinz(i/this.a),e=Math.sin(s),o=Math.cos(s),a=this.long0,Math.abs(i)<=Proj4js.common.EPSLN&&(r=this.lat0),r=Proj4js.common.asinz(o*this.sin_p14+t.y*e*this.cos_p14/i),n=Math.abs(this.lat0)-Proj4js.common.HALF_PI,Math.abs(n)<=Proj4js.common.EPSLN&&(a=this.lat0>=0?Proj4js.common.adjust_lon(this.long0+Math.atan2(t.x,-t.y)):Proj4js.common.adjust_lon(this.long0-Math.atan2(-t.x,t.y))),n=o-this.sin_p14*Math.sin(r),t.x=a,t.y=r,t}},Proj4js.Proj.krovak={init:function(){this.a=6377397.155,this.es=.006674372230614,this.e=Math.sqrt(this.es),this.lat0||(this.lat0=.863937979737193),this.long0||(this.long0=.4334234309119251),this.k0||(this.k0=.9999),this.s45=.785398163397448,this.s90=2*this.s45,this.fi0=this.lat0,this.e2=this.es,this.e=Math.sqrt(this.e2),this.alfa=Math.sqrt(1+this.e2*Math.pow(Math.cos(this.fi0),4)/(1-this.e2)),this.uq=1.04216856380474,this.u0=Math.asin(Math.sin(this.fi0)/this.alfa),this.g=Math.pow((1+this.e*Math.sin(this.fi0))/(1-this.e*Math.sin(this.fi0)),this.alfa*this.e/2),this.k=Math.tan(this.u0/2+this.s45)/Math.pow(Math.tan(this.fi0/2+this.s45),this.alfa)*this.g,this.k1=this.k0,this.n0=this.a*Math.sqrt(1-this.e2)/(1-this.e2*Math.pow(Math.sin(this.fi0),2)),this.s0=1.37008346281555,this.n=Math.sin(this.s0),this.ro0=this.k1*this.n0/Math.tan(this.s0),this.ad=this.s90-this.uq},forward:function(t){var i,s,e,o,n,a,r,h=t.x,l=t.y,c=Proj4js.common.adjust_lon(h-this.long0);return i=Math.pow((1+this.e*Math.sin(l))/(1-this.e*Math.sin(l)),this.alfa*this.e/2),s=2*(Math.atan(this.k*Math.pow(Math.tan(l/2+this.s45),this.alfa)/i)-this.s45),e=-c*this.alfa,o=Math.asin(Math.cos(this.ad)*Math.sin(s)+Math.sin(this.ad)*Math.cos(s)*Math.cos(e)),n=Math.asin(Math.cos(s)*Math.sin(e)/Math.cos(o)),a=this.n*n,r=this.ro0*Math.pow(Math.tan(this.s0/2+this.s45),this.n)/Math.pow(Math.tan(o/2+this.s45),this.n),t.y=r*Math.cos(a)/1,t.x=r*Math.sin(a)/1,this.czech&&(t.y*=-1,t.x*=-1),t},inverse:function(t){var i,s,e,o,n,a,r,h,l=t.x;t.x=t.y,t.y=l,this.czech&&(t.y*=-1,t.x*=-1),a=Math.sqrt(t.x*t.x+t.y*t.y),n=Math.atan2(t.y,t.x),o=n/Math.sin(this.s0),e=2*(Math.atan(Math.pow(this.ro0/a,1/this.n)*Math.tan(this.s0/2+this.s45))-this.s45),i=Math.asin(Math.cos(this.ad)*Math.sin(e)-Math.sin(this.ad)*Math.cos(e)*Math.cos(o)),s=Math.asin(Math.cos(e)*Math.sin(o)/Math.cos(i)),t.x=this.long0-s/this.alfa,r=i,h=0;var c=0;do t.y=2*(Math.atan(Math.pow(this.k,-1/this.alfa)*Math.pow(Math.tan(i/2+this.s45),1/this.alfa)*Math.pow((1+this.e*Math.sin(r))/(1-this.e*Math.sin(r)),this.e/2))-this.s45),1e-10>Math.abs(r-t.y)&&(h=1),r=t.y,c+=1;while(0==h&&15>c);return c>=15?(Proj4js.reportError("PHI3Z-CONV:Latitude failed to converge after 15 iterations"),null):t}},Proj4js.Proj.somerc={init:function(){var t=this.lat0;this.lambda0=this.long0;var i=Math.sin(t),s=this.a,e=this.rf,o=1/e,n=2*o-Math.pow(o,2),a=this.e=Math.sqrt(n);this.R=this.k0*s*Math.sqrt(1-n)/(1-n*Math.pow(i,2)),this.alpha=Math.sqrt(1+n/(1-n)*Math.pow(Math.cos(t),4)),this.b0=Math.asin(i/this.alpha),this.K=Math.log(Math.tan(Math.PI/4+this.b0/2))-this.alpha*Math.log(Math.tan(Math.PI/4+t/2))+this.alpha*a/2*Math.log((1+a*i)/(1-a*i))},forward:function(t){var i=Math.log(Math.tan(Math.PI/4-t.y/2)),s=this.e/2*Math.log((1+this.e*Math.sin(t.y))/(1-this.e*Math.sin(t.y))),e=-this.alpha*(i+s)+this.K,o=2*(Math.atan(Math.exp(e))-Math.PI/4),n=this.alpha*(t.x-this.lambda0),a=Math.atan(Math.sin(n)/(Math.sin(this.b0)*Math.tan(o)+Math.cos(this.b0)*Math.cos(n))),r=Math.asin(Math.cos(this.b0)*Math.sin(o)-Math.sin(this.b0)*Math.cos(o)*Math.cos(n));return t.y=this.R/2*Math.log((1+Math.sin(r))/(1-Math.sin(r)))+this.y0,t.x=this.R*a+this.x0,t},inverse:function(t){for(var i=t.x-this.x0,s=t.y-this.y0,e=i/this.R,o=2*(Math.atan(Math.exp(s/this.R))-Math.PI/4),n=Math.asin(Math.cos(this.b0)*Math.sin(o)+Math.sin(this.b0)*Math.cos(o)*Math.cos(e)),a=Math.atan(Math.sin(e)/(Math.cos(this.b0)*Math.cos(e)-Math.sin(this.b0)*Math.tan(o))),r=this.lambda0+a/this.alpha,h=0,l=n,c=-1e3,m=0;Math.abs(l-c)>1e-7;){if(++m>20)return Proj4js.reportError("omercFwdInfinity"),void 0;h=1/this.alpha*(Math.log(Math.tan(Math.PI/4+n/2))-this.K)+this.e*Math.log(Math.tan(Math.PI/4+Math.asin(this.e*Math.sin(l))/2)),c=l,l=2*Math.atan(Math.exp(h))-Math.PI/2}return t.x=r,t.y=l,t}},Proj4js.Proj.stere={ssfn_:function(t,i,s){return i*=s,Math.tan(.5*(Proj4js.common.HALF_PI+t))*Math.pow((1-i)/(1+i),.5*s)},TOL:1e-8,NITER:8,CONV:1e-10,S_POLE:0,N_POLE:1,OBLIQ:2,EQUIT:3,init:function(){this.phits=this.lat_ts?this.lat_ts:Proj4js.common.HALF_PI;var t=Math.abs(this.lat0);if(this.mode=Math.abs(t)-Proj4js.common.HALF_PIthis.lat0?this.S_POLE:this.N_POLE:t>Proj4js.common.EPSLN?this.OBLIQ:this.EQUIT,this.phits=Math.abs(this.phits),this.es){var i;switch(this.mode){case this.N_POLE:case this.S_POLE:Math.abs(this.phits-Proj4js.common.HALF_PI)=Proj4js.common.EPSLN?Math.cos(this.phits)/Math.tan(Proj4js.common.FORTPI-.5*this.phits):2*this.k0}},forward:function(t){var i=t.x;i=Proj4js.common.adjust_lon(i-this.long0);var s,e,o=t.y;if(this.sphere){var n,a,r,h;switch(n=Math.sin(o),a=Math.cos(o),r=Math.cos(i),h=Math.sin(i),this.mode){case this.EQUIT:e=1+a*r,Proj4js.common.EPSLN>=e&&Proj4js.reportError("stere:forward:Equit"),e=this.akm1/e,s=e*a*h,e*=n;break;case this.OBLIQ:e=1+this.sinph0*n+this.cosph0*a*r,Proj4js.common.EPSLN>=e&&Proj4js.reportError("stere:forward:Obliq"),e=this.akm1/e,s=e*a*h,e*=this.cosph0*n-this.sinph0*a*r;break;case this.N_POLE:r=-r,o=-o;case this.S_POLE:Math.abs(o-Proj4js.common.HALF_PI)=l;l++)r*=n,h+=this.A[l]*r;for(var c,m,u=h,d=a,p=1,_=0,f=0,P=0,l=1;6>=l;l++)c=p*u-_*d,m=_*u+p*d,p=c,_=m,f=f+this.B_re[l]*p-this.B_im[l]*_,P=P+this.B_im[l]*p+this.B_re[l]*_;return t.x=P*this.a+this.x0,t.y=f*this.a+this.y0,t},inverse:function(t){for(var i,s,e=t.x,o=t.y,n=e-this.x0,a=o-this.y0,r=a/this.a,h=n/this.a,l=1,c=0,m=0,u=0,d=1;6>=d;d++)i=l*r-c*h,s=c*r+l*h,l=i,c=s,m=m+this.C_re[d]*l-this.C_im[d]*c,u=u+this.C_im[d]*l+this.C_re[d]*c;for(var p=0;this.iterations>p;p++){for(var _,f,P=m,y=u,g=r,L=h,d=2;6>=d;d++)_=P*m-y*u,f=y*m+P*u,P=_,y=f,g+=(d-1)*(this.B_re[d]*P-this.B_im[d]*y),L+=(d-1)*(this.B_im[d]*P+this.B_re[d]*y);P=1,y=0;for(var v=this.B_re[1],j=this.B_im[1],d=2;6>=d;d++)_=P*m-y*u,f=y*m+P*u,P=_,y=f,v+=d*(this.B_re[d]*P-this.B_im[d]*y),j+=d*(this.B_im[d]*P+this.B_re[d]*y);var M=v*v+j*j;m=(g*v+L*j)/M,u=(L*v-g*j)/M}for(var S=m,b=u,x=1,E=0,d=1;9>=d;d++)x*=S,E+=this.D[d]*x;var C=this.lat0+1e5*E*Proj4js.common.SEC_TO_RAD,w=this.long0+b;return t.x=w,t.y=C,t}},Proj4js.Proj.mill={init:function(){},forward:function(t){var i=t.x,s=t.y,e=Proj4js.common.adjust_lon(i-this.long0),o=this.x0+this.a*e,n=this.y0+1.25*this.a*Math.log(Math.tan(Proj4js.common.PI/4+s/2.5));return t.x=o,t.y=n,t},inverse:function(t){t.x-=this.x0,t.y-=this.y0;var i=Proj4js.common.adjust_lon(this.long0+t.x/this.a),s=2.5*(Math.atan(Math.exp(.8*t.y/this.a))-Proj4js.common.PI/4);return t.x=i,t.y=s,t}},Proj4js.Proj.gnom={init:function(){this.sin_p14=Math.sin(this.lat0),this.cos_p14=Math.cos(this.lat0),this.infinity_dist=1e3*this.a,this.rc=1},forward:function(t){var i,s,e,o,n,a,r,h,l=t.x,c=t.y;return e=Proj4js.common.adjust_lon(l-this.long0),i=Math.sin(c),s=Math.cos(c),o=Math.cos(e),a=this.sin_p14*i+this.cos_p14*s*o,n=1,a>0||Math.abs(a)<=Proj4js.common.EPSLN?(r=this.x0+this.a*n*s*Math.sin(e)/a,h=this.y0+this.a*n*(this.cos_p14*i-this.sin_p14*s*o)/a):(Proj4js.reportError("orthoFwdPointError"),r=this.x0+this.infinity_dist*s*Math.sin(e),h=this.y0+this.infinity_dist*(this.cos_p14*i-this.sin_p14*s*o)),t.x=r,t.y=h,t},inverse:function(t){var i,s,e,o,n,a;return t.x=(t.x-this.x0)/this.a,t.y=(t.y-this.y0)/this.a,t.x/=this.k0,t.y/=this.k0,(i=Math.sqrt(t.x*t.x+t.y*t.y))?(o=Math.atan2(i,this.rc),s=Math.sin(o),e=Math.cos(o),a=Proj4js.common.asinz(e*this.sin_p14+t.y*s*this.cos_p14/i),n=Math.atan2(t.x*s,i*this.cos_p14*e-t.y*this.sin_p14*s),n=Proj4js.common.adjust_lon(this.long0+n)):(a=this.phic0,n=0),t.x=n,t.y=a,t}},Proj4js.Proj.sinu={init:function(){this.sphere?(this.n=1,this.m=0,this.es=0,this.C_y=Math.sqrt((this.m+1)/this.n),this.C_x=this.C_y/(this.m+1)):this.en=Proj4js.common.pj_enfn(this.es)},forward:function(t){var i,s,e=t.x,o=t.y;if(e=Proj4js.common.adjust_lon(e-this.long0),this.sphere){if(this.m)for(var n=this.n*Math.sin(o),a=Proj4js.common.MAX_ITER;a;--a){var r=(this.m*o+Math.sin(o)-n)/(this.m+Math.cos(o));if(o-=r,Math.abs(r)o?(o=Math.sin(i),s=this.long0+t.x*Math.sqrt(1-this.es*o*o)/(this.a*Math.cos(i)),e=Proj4js.common.adjust_lon(s)):o-Proj4js.common.EPSLN=0?this.y0+Proj4js.common.PI*this.R*Math.tan(.5*a):this.y0+Proj4js.common.PI*this.R*-Math.tan(.5*a));var r=.5*Math.abs(Proj4js.common.PI/n-n/Proj4js.common.PI),h=r*r,l=Math.sin(a),c=Math.cos(a),m=c/(l+c-1),u=m*m,d=m*(2/l-1),p=d*d,_=Proj4js.common.PI*this.R*(r*(m-p)+Math.sqrt(h*(m-p)*(m-p)-(p+h)*(u-p)))/(p+h);return 0>n&&(_=-_),i=this.x0+_,_=Math.abs(_/(Proj4js.common.PI*this.R)),s=o>=0?this.y0+Proj4js.common.PI*this.R*Math.sqrt(1-_*_-2*r*_):this.y0-Proj4js.common.PI*this.R*Math.sqrt(1-_*_-2*r*_),t.x=i,t.y=s,t},inverse:function(t){var i,s,e,o,n,a,r,h,l,c,m,u,d;return t.x-=this.x0,t.y-=this.y0,m=Proj4js.common.PI*this.R,e=t.x/m,o=t.y/m,n=e*e+o*o,a=-Math.abs(o)*(1+n),r=a-2*o*o+e*e,h=-2*a+1+2*o*o+n*n,d=o*o/h+(2*r*r*r/h/h/h-9*a*r/h/h)/27,l=(a-r*r/3/h)/h,c=2*Math.sqrt(-l/3),m=3*d/l/c,Math.abs(m)>1&&(m=m>=0?1:-1),u=Math.acos(m)/3,s=t.y>=0?(-c*Math.cos(u+Proj4js.common.PI/3)-r/3/h)*Proj4js.common.PI:-(-c*Math.cos(u+Proj4js.common.PI/3)-r/3/h)*Proj4js.common.PI,Math.abs(e)0&&(e=2*Math.atan(o*Proj4js.common.srat(this.e*Math.sin(t.y),-.5*this.e))-Proj4js.common.HALF_PI,!(i>Math.abs(e-t.y)));--n)t.y=e;return n?(t.x=s,t.y=e,t):(Proj4js.reportError("gauss:inverse:convergence failed"),null)}},Proj4js.Proj.omerc={init:function(){this.mode||(this.mode=0),this.lon1||(this.lon1=0,this.mode=1),this.lon2||(this.lon2=0),this.lat2||(this.lat2=0);var t=this.b/this.a,i=1-Math.pow(t,2);Math.sqrt(i),this.sin_p20=Math.sin(this.lat0),this.cos_p20=Math.cos(this.lat0),this.con=1-this.es*this.sin_p20*this.sin_p20,this.com=Math.sqrt(1-i),this.bl=Math.sqrt(1+this.es*Math.pow(this.cos_p20,4)/(1-i)),this.al=this.a*this.bl*this.k0*this.com/this.con,Math.abs(this.lat0)0?this.lat0>=0?this.d+Math.sqrt(this.d*this.d-1):this.d-Math.sqrt(this.d*this.d-1):this.d,this.el=this.f*Math.pow(this.ts,this.bl)),0!=this.mode?(this.g=.5*(this.f-1/this.f),this.gama=Proj4js.common.asinz(Math.sin(this.alpha)/this.d),this.longc=this.longc-Proj4js.common.asinz(this.g*Math.tan(this.gama))/this.bl,this.con=Math.abs(this.lat0),this.con>Proj4js.common.EPSLN&&Math.abs(this.con-Proj4js.common.HALF_PI)>Proj4js.common.EPSLN?(this.singam=Math.sin(this.gama),this.cosgam=Math.cos(this.gama),this.sinaz=Math.sin(this.alpha),this.cosaz=Math.cos(this.alpha),this.u=this.lat0>=0?this.al/this.bl*Math.atan(Math.sqrt(this.d*this.d-1)/this.cosaz):-(this.al/this.bl)*Math.atan(Math.sqrt(this.d*this.d-1)/this.cosaz)):Proj4js.reportError("omerc:Init:DataError")):(this.sinphi=Math.sin(this.at1),this.ts1=Proj4js.common.tsfnz(this.e,this.lat1,this.sinphi),this.sinphi=Math.sin(this.lat2),this.ts2=Proj4js.common.tsfnz(this.e,this.lat2,this.sinphi),this.h=Math.pow(this.ts1,this.bl),this.l=Math.pow(this.ts2,this.bl),this.f=this.el/this.h,this.g=.5*(this.f-1/this.f),this.j=(this.el*this.el-this.l*this.h)/(this.el*this.el+this.l*this.h),this.p=(this.l-this.h)/(this.l+this.h),this.dlon=this.lon1-this.lon2,this.dlon<-Proj4js.common.PI&&(this.lon2=this.lon2-2*Proj4js.common.PI),this.dlon>Proj4js.common.PI&&(this.lon2=this.lon2+2*Proj4js.common.PI),this.dlon=this.lon1-this.lon2,this.longc=.5*(this.lon1+this.lon2)-Math.atan(this.j*Math.tan(.5*this.bl*this.dlon)/this.p)/this.bl,this.dlon=Proj4js.common.adjust_lon(this.lon1-this.longc),this.gama=Math.atan(Math.sin(this.bl*this.dlon)/this.g),this.alpha=Proj4js.common.asinz(this.d*Math.sin(this.gama)),Math.abs(this.lat1-this.lat2)<=Proj4js.common.EPSLN?Proj4js.reportError("omercInitDataError"):this.con=Math.abs(this.lat1),this.con<=Proj4js.common.EPSLN||Math.abs(this.con-Proj4js.common.HALF_PI)<=Proj4js.common.EPSLN?Proj4js.reportError("omercInitDataError"):Math.abs(Math.abs(this.lat0)-Proj4js.common.HALF_PI)<=Proj4js.common.EPSLN&&Proj4js.reportError("omercInitDataError"),this.singam=Math.sin(this.gam),this.cosgam=Math.cos(this.gam),this.sinaz=Math.sin(this.alpha),this.cosaz=Math.cos(this.alpha),this.u=this.lat0>=0?this.al/this.bl*Math.atan(Math.sqrt(this.d*this.d-1)/this.cosaz):-(this.al/this.bl)*Math.atan(Math.sqrt(this.d*this.d-1)/this.cosaz))},forward:function(t){var i,s,e,o,n,a,r,h,l,c,m,u=t.x,d=t.y;i=Math.sin(d),c=Proj4js.common.adjust_lon(u-this.longc),a=Math.sin(this.bl*c),Math.abs(Math.abs(d)-Proj4js.common.HALF_PI)>Proj4js.common.EPSLN?(m=Proj4js.common.tsfnz(this.e,d,i),o=this.el/Math.pow(m,this.bl),l=.5*(o-1/o),s=.5*(o+1/o),r=(l*this.singam-a*this.cosgam)/s,e=Math.cos(this.bl*c),1e-7>Math.abs(e)?n=this.al*this.bl*c:(n=this.al*Math.atan((l*this.cosgam+a*this.singam)/e)/this.bl,0>e&&(n+=Proj4js.common.PI*this.al/this.bl))):(r=d>=0?this.singam:-this.singam,n=this.al*d/this.bl),Math.abs(Math.abs(r)-1)<=Proj4js.common.EPSLN&&Proj4js.reportError("omercFwdInfinity"),h=.5*this.al*Math.log((1-r)/(1+r))/this.bl,n-=this.u;var p=this.x0+h*this.cosaz+n*this.sinaz,_=this.y0+n*this.cosaz-h*this.sinaz;return t.x=p,t.y=_,t},inverse:function(t){var i,s,e,o,n,a,r,h,l,c,m,u,d;return t.x-=this.x0,t.y-=this.y0,d=0,o=t.x*this.cosaz-t.y*this.sinaz,n=t.y*this.cosaz+t.x*this.sinaz,n+=this.u,a=Math.exp(-this.bl*o/this.al),r=.5*(a-1/a),s=.5*(a+1/a),l=Math.sin(this.bl*n/this.al),c=(l*this.cosgam+r*this.singam)/s,Math.abs(Math.abs(c)-1)<=Proj4js.common.EPSLN?(m=this.longc,u=c>=0?Proj4js.common.HALF_PI:-Proj4js.common.HALF_PI):(e=1/this.bl,h=Math.pow(this.el/Math.sqrt((1+c)/(1-c)),e),u=Proj4js.common.phi2z(this.e,h),i=this.longc-Math.atan2(r*this.cosgam-l*this.singam,e)/this.bl,m=Proj4js.common.adjust_lon(i)),t.x=m,t.y=u,t}},Proj4js.Proj.lcc={init:function(){if(this.lat2||(this.lat2=this.lat0),this.k0||(this.k0=1),Math.abs(this.lat1+this.lat2)Proj4js.common.EPSLN?Math.log(e/r)/Math.log(o/h):i,this.f0=e/(this.ns*Math.pow(o,this.ns)),this.rh=this.a*this.f0*Math.pow(l,this.ns),this.title||(this.title="Lambert Conformal Conic")},forward:function(t){var i=t.x,s=t.y;if(!(90>=s&&s>=-90&&180>=i&&i>=-180))return Proj4js.reportError("lcc:forward: llInputOutOfRange: "+i+" : "+s),null;var e,o,n=Math.abs(Math.abs(s)-Proj4js.common.HALF_PI);if(n>Proj4js.common.EPSLN)e=Proj4js.common.tsfnz(this.e,s,Math.sin(s)),o=this.a*this.f0*Math.pow(e,this.ns);else{if(n=s*this.ns,0>=n)return Proj4js.reportError("lcc:forward: No Projection"),null;o=0}var a=this.ns*Proj4js.common.adjust_lon(i-this.long0);return t.x=this.k0*o*Math.sin(a)+this.x0,t.y=this.k0*(this.rh-o*Math.cos(a))+this.y0,t},inverse:function(t){var i,s,e,o,n,a=(t.x-this.x0)/this.k0,r=this.rh-(t.y-this.y0)/this.k0;this.ns>0?(i=Math.sqrt(a*a+r*r),s=1):(i=-Math.sqrt(a*a+r*r),s=-1);var h=0;if(0!=i&&(h=Math.atan2(s*a,s*r)),0!=i||this.ns>0){if(s=1/this.ns,e=Math.pow(i/(this.a*this.f0),s),o=Proj4js.common.phi2z(this.e,e),-9999==o)return null}else o=-Proj4js.common.HALF_PI;return n=Proj4js.common.adjust_lon(h/this.ns+this.long0),t.x=n,t.y=o,t}},Proj4js.Proj.laea={S_POLE:1,N_POLE:2,EQUIT:3,OBLIQ:4,init:function(){var t=Math.abs(this.lat0);if(this.mode=Math.abs(t-Proj4js.common.HALF_PI)this.lat0?this.S_POLE:this.N_POLE:Math.abs(t)0){var i;switch(this.qp=Proj4js.common.qsfnz(this.e,1),this.mmf=.5/(1-this.es),this.apa=this.authset(this.es),this.mode){case this.N_POLE:case this.S_POLE:this.dd=1;break;case this.EQUIT:this.rq=Math.sqrt(.5*this.qp),this.dd=1/this.rq,this.xmf=1,this.ymf=.5*this.qp;break;case this.OBLIQ:this.rq=Math.sqrt(.5*this.qp),i=Math.sin(this.lat0),this.sinb1=Proj4js.common.qsfnz(this.e,i)/this.qp,this.cosb1=Math.sqrt(1-this.sinb1*this.sinb1),this.dd=Math.cos(this.lat0)/(Math.sqrt(1-this.es*i*i)*this.rq*this.cosb1),this.ymf=(this.xmf=this.rq)/this.dd,this.xmf*=this.dd}}else this.mode==this.OBLIQ&&(this.sinph0=Math.sin(this.lat0),this.cosph0=Math.cos(this.lat0))},forward:function(t){var i,s,e=t.x,o=t.y;if(e=Proj4js.common.adjust_lon(e-this.long0),this.sphere){var n,a,r;switch(r=Math.sin(o),a=Math.cos(o),n=Math.cos(e),this.mode){case this.OBLIQ:case this.EQUIT:if(s=this.mode==this.EQUIT?1+a*n:1+this.sinph0*r+this.cosph0*a*n,Proj4js.common.EPSLN>=s)return Proj4js.reportError("laea:fwd:y less than eps"),null;s=Math.sqrt(2/s),i=s*a*Math.sin(e),s*=this.mode==this.EQUIT?r:this.cosph0*r-this.sinph0*a*n;break;case this.N_POLE:n=-n;case this.S_POLE:if(Math.abs(o+this.phi0)=0?(i=(u=Math.sqrt(l))*h,s=n*(this.mode==this.S_POLE?u:-u)):i=s=0}}return t.x=this.a*i+this.x0,t.y=this.a*s+this.y0,t},inverse:function(t){t.x-=this.x0,t.y-=this.y0;var i,s,e=t.x/this.a,o=t.y/this.a;if(this.sphere){var n,a=0,r=0;if(n=Math.sqrt(e*e+o*o),s=.5*n,s>1)return Proj4js.reportError("laea:Inv:DataError"),null; +switch(s=2*Math.asin(s),(this.mode==this.OBLIQ||this.mode==this.EQUIT)&&(r=Math.sin(s),a=Math.cos(s)),this.mode){case this.EQUIT:s=Math.abs(n)<=Proj4js.common.EPSLN?0:Math.asin(o*r/n),e*=r,o=a*n;break;case this.OBLIQ:s=Math.abs(n)<=Proj4js.common.EPSLN?this.phi0:Math.asin(a*this.sinph0+o*r*this.cosph0/n),e*=r*this.cosph0,o=(a-Math.sin(s)*this.sinph0)*n;break;case this.N_POLE:o=-o,s=Proj4js.common.HALF_PI-s;break;case this.S_POLE:s-=Proj4js.common.HALF_PI}i=0!=o||this.mode!=this.EQUIT&&this.mode!=this.OBLIQ?Math.atan2(e,o):0}else{var h,l,c,m,u=0;switch(this.mode){case this.EQUIT:case this.OBLIQ:if(e/=this.dd,o*=this.dd,m=Math.sqrt(e*e+o*o),Proj4js.common.EPSLN>m)return t.x=0,t.y=this.phi0,t;l=2*Math.asin(.5*m/this.rq),h=Math.cos(l),e*=l=Math.sin(l),this.mode==this.OBLIQ?(u=h*this.sinb1+o*l*this.cosb1/m,c=this.qp*u,o=m*this.cosb1*h-o*this.sinb1*l):(u=o*l/m,c=this.qp*u,o=m*h);break;case this.N_POLE:o=-o;case this.S_POLE:if(c=e*e+o*o,!c)return t.x=0,t.y=this.phi0,t;u=1-c/this.qp,this.mode==this.S_POLE&&(u=-u)}i=Math.atan2(e,o),s=this.authlat(Math.asin(u),this.apa)}return t.x=Proj4js.common.adjust_lon(this.long0+i),t.y=s,t},P00:.3333333333333333,P01:.17222222222222222,P02:.10257936507936508,P10:.06388888888888888,P11:.0664021164021164,P20:.016415012942191543,authset:function(t){var i,s=[];return s[0]=t*this.P00,i=t*t,s[0]+=i*this.P01,s[1]=i*this.P10,i*=t,s[0]+=i*this.P02,s[1]+=i*this.P11,s[2]=i*this.P20,s},authlat:function(t,i){var s=t+t;return t+i[0]*Math.sin(s)+i[1]*Math.sin(s+s)+i[2]*Math.sin(s+s+s)}},Proj4js.Proj.aeqd={init:function(){this.sin_p12=Math.sin(this.lat0),this.cos_p12=Math.cos(this.lat0)},forward:function(t){var i=t.x;t.y;var s,e=Math.sin(t.y),o=Math.cos(t.y),n=Proj4js.common.adjust_lon(i-this.long0),a=Math.cos(n),r=this.sin_p12*e+this.cos_p12*o*a;if(Math.abs(Math.abs(r)-1)r)return Proj4js.reportError("aeqd:Fwd:PointError"),void 0}else{var h=Math.acos(r);s=h/Math.sin(h)}return t.x=this.x0+this.a*s*o*Math.sin(n),t.y=this.y0+this.a*s*(this.cos_p12*e-this.sin_p12*o*a),t},inverse:function(t){t.x-=this.x0,t.y-=this.y0;var i=Math.sqrt(t.x*t.x+t.y*t.y);if(i>2*Proj4js.common.HALF_PI*this.a)return Proj4js.reportError("aeqdInvDataError"),void 0;var s,e=i/this.a,o=Math.sin(e),n=Math.cos(e),a=this.long0;if(Math.abs(i)<=Proj4js.common.EPSLN)s=this.lat0;else{s=Proj4js.common.asinz(n*this.sin_p12+t.y*o*this.cos_p12/i);var r=Math.abs(this.lat0)-Proj4js.common.HALF_PI;Math.abs(r)<=Proj4js.common.EPSLN?a=this.lat0>=0?Proj4js.common.adjust_lon(this.long0+Math.atan2(t.x,-t.y)):Proj4js.common.adjust_lon(this.long0-Math.atan2(-t.x,t.y)):(r=n-this.sin_p12*Math.sin(s),Math.abs(r)=50&&Proj4js.reportError("moll:Fwd:IterationError")}o/=2,Proj4js.common.PI/2-Math.abs(s).999999999999&&(s=.999999999999);var i=Math.asin(s),e=Proj4js.common.adjust_lon(this.long0+t.x/(.900316316158*this.a*Math.cos(i)));-Proj4js.common.PI>e&&(e=-Proj4js.common.PI),e>Proj4js.common.PI&&(e=Proj4js.common.PI),s=(2*i+Math.sin(2*i))/Proj4js.common.PI,Math.abs(s)>1&&(s=1);var o=Math.asin(s);return t.x=e,t.y=o,t}},function(t,i,s){var e,o;typeof exports!=s+""?e=exports:(o=t.L,e={},e.noConflict=function(){return t.L=o,this},t.L=e),e.version="0.5.1",e.Util={extend:function(t){var i,s,e,o,n=Array.prototype.slice.call(arguments,1);for(s=0,e=n.length;e>s;s++){o=n[s]||{};for(i in o)o.hasOwnProperty(i)&&(t[i]=o[i])}return t},bind:function(t,i){var s=arguments.length>2?Array.prototype.slice.call(arguments,2):null;return function(){return t.apply(i,s||arguments)}},stamp:function(){var t=0,i="_leaflet_id";return function(s){return s[i]=s[i]||++t,s[i]}}(),limitExecByInterval:function(t,i,e){var o,n;return function a(){var r=arguments;return o?(n=!0,s):(o=!0,setTimeout(function(){o=!1,n&&(a.apply(e,r),n=!1)},i),t.apply(e,r),s)}},falseFn:function(){return!1},formatNum:function(t,i){var s=Math.pow(10,i||5);return Math.round(t*s)/s},splitWords:function(t){return t.replace(/^\s+|\s+$/g,"").split(/\s+/)},setOptions:function(t,i){return t.options=e.extend({},t.options,i),t.options},getParamString:function(t,i){var s=[];for(var e in t)t.hasOwnProperty(e)&&s.push(e+"="+t[e]);return(i&&-1!==i.indexOf("?")?"&":"?")+s.join("&")},template:function(t,i){return t.replace(/\{ *([\w_]+) *\}/g,function(t,s){var e=i[s];if(!i.hasOwnProperty(s))throw Error("No value provided for variable "+t);return e})},isArray:function(t){return"[object Array]"===Object.prototype.toString.call(t)},emptyImageUrl:"data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs="},function(){function i(i){var s,e,o=["webkit","moz","o","ms"];for(s=0;o.length>s&&!e;s++)e=t[o[s]+i];return e}function o(i){var s=+new Date,e=Math.max(0,16-(s-n));return n=s+e,t.setTimeout(i,e)}var n=0,a=t.requestAnimationFrame||i("RequestAnimationFrame")||o,r=t.cancelAnimationFrame||i("CancelAnimationFrame")||i("CancelRequestAnimationFrame")||function(i){t.clearTimeout(i)};e.Util.requestAnimFrame=function(i,n,r,h){return i=e.bind(i,n),r&&a===o?(i(),s):a.call(t,i,h)},e.Util.cancelAnimFrame=function(i){i&&r.call(t,i)}}(),e.extend=e.Util.extend,e.bind=e.Util.bind,e.stamp=e.Util.stamp,e.setOptions=e.Util.setOptions,e.Class=function(){},e.Class.extend=function(t){var i=function(){this.initialize&&this.initialize.apply(this,arguments),this._initHooks&&this.callInitHooks()},s=function(){};s.prototype=this.prototype;var o=new s;o.constructor=i,i.prototype=o;for(var n in this)this.hasOwnProperty(n)&&"prototype"!==n&&(i[n]=this[n]);t.statics&&(e.extend(i,t.statics),delete t.statics),t.includes&&(e.Util.extend.apply(null,[o].concat(t.includes)),delete t.includes),t.options&&o.options&&(t.options=e.extend({},o.options,t.options)),e.extend(o,t),o._initHooks=[];var a=this;return o.callInitHooks=function(){if(!this._initHooksCalled){a.prototype.callInitHooks&&a.prototype.callInitHooks.call(this),this._initHooksCalled=!0;for(var t=0,i=o._initHooks.length;i>t;t++)o._initHooks[t].call(this)}},i},e.Class.include=function(t){e.extend(this.prototype,t)},e.Class.mergeOptions=function(t){e.extend(this.prototype.options,t)},e.Class.addInitHook=function(t){var i=Array.prototype.slice.call(arguments,1),s="function"==typeof t?t:function(){this[t].apply(this,i)};this.prototype._initHooks=this.prototype._initHooks||[],this.prototype._initHooks.push(s)};var n="_leaflet_events";e.Mixin={},e.Mixin.Events={addEventListener:function(t,i,s){var o,a,r,h=this[n]=this[n]||{};if("object"==typeof t){for(o in t)t.hasOwnProperty(o)&&this.addEventListener(o,t[o],i);return this}for(t=e.Util.splitWords(t),a=0,r=t.length;r>a;a++)h[t[a]]=h[t[a]]||[],h[t[a]].push({action:i,context:s||this});return this},hasEventListeners:function(t){return n in this&&t in this[n]&&this[n][t].length>0},removeEventListener:function(t,i,s){var o,a,r,h,l,c=this[n];if("object"==typeof t){for(o in t)t.hasOwnProperty(o)&&this.removeEventListener(o,t[o],i);return this}for(t=e.Util.splitWords(t),a=0,r=t.length;r>a;a++)if(this.hasEventListeners(t[a]))for(h=c[t[a]],l=h.length-1;l>=0;l--)i&&h[l].action!==i||s&&h[l].context!==s||h.splice(l,1);return this},fireEvent:function(t,i){if(!this.hasEventListeners(t))return this;for(var s=e.extend({type:t,target:this},i),o=this[n][t].slice(),a=0,r=o.length;r>a;a++)o[a].action.call(o[a].context||this,s);return this}},e.Mixin.Events.on=e.Mixin.Events.addEventListener,e.Mixin.Events.off=e.Mixin.Events.removeEventListener,e.Mixin.Events.fire=e.Mixin.Events.fireEvent,function(){var o=!!t.ActiveXObject,n=o&&!t.XMLHttpRequest,a=o&&!i.querySelector,r=navigator.userAgent.toLowerCase(),h=-1!==r.indexOf("webkit"),l=-1!==r.indexOf("chrome"),c=-1!==r.indexOf("android"),m=-1!==r.search("android [23]"),u=typeof orientation!=s+"",d=t.navigator&&t.navigator.msPointerEnabled&&t.navigator.msMaxTouchPoints,p="devicePixelRatio"in t&&t.devicePixelRatio>1||"matchMedia"in t&&t.matchMedia("(min-resolution:144dpi)")&&t.matchMedia("(min-resolution:144dpi)").matches,_=i.documentElement,f=o&&"transition"in _.style,P="WebKitCSSMatrix"in t&&"m11"in new t.WebKitCSSMatrix,y="MozPerspective"in _.style,g="OTransition"in _.style,L=!t.L_DISABLE_3D&&(f||P||y||g),v=!t.L_NO_TOUCH&&function(){var t="ontouchstart";if(d||t in _)return!0;var s=i.createElement("div"),e=!1;return s.setAttribute?(s.setAttribute(t,"return;"),"function"==typeof s[t]&&(e=!0),s.removeAttribute(t),s=null,e):!1}();e.Browser={ie:o,ie6:n,ie7:a,webkit:h,android:c,android23:m,chrome:l,ie3d:f,webkit3d:P,gecko3d:y,opera3d:g,any3d:L,mobile:u,mobileWebkit:u&&h,mobileWebkit3d:u&&P,mobileOpera:u&&t.opera,touch:v,msTouch:d,retina:p}}(),e.Point=function(t,i,s){this.x=s?Math.round(t):t,this.y=s?Math.round(i):i},e.Point.prototype={clone:function(){return new e.Point(this.x,this.y)},add:function(t){return this.clone()._add(e.point(t))},_add:function(t){return this.x+=t.x,this.y+=t.y,this},subtract:function(t){return this.clone()._subtract(e.point(t))},_subtract:function(t){return this.x-=t.x,this.y-=t.y,this},divideBy:function(t){return this.clone()._divideBy(t)},_divideBy:function(t){return this.x/=t,this.y/=t,this},multiplyBy:function(t){return this.clone()._multiplyBy(t)},_multiplyBy:function(t){return this.x*=t,this.y*=t,this},round:function(){return this.clone()._round()},_round:function(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this},floor:function(){return this.clone()._floor()},_floor:function(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this},distanceTo:function(t){t=e.point(t);var i=t.x-this.x,s=t.y-this.y;return Math.sqrt(i*i+s*s)},equals:function(t){return t.x===this.x&&t.y===this.y},toString:function(){return"Point("+e.Util.formatNum(this.x)+", "+e.Util.formatNum(this.y)+")"}},e.point=function(t,i,s){return t instanceof e.Point?t:e.Util.isArray(t)?new e.Point(t[0],t[1]):isNaN(t)?t:new e.Point(t,i,s)},e.Bounds=function(t,i){if(t)for(var s=i?[t,i]:t,e=0,o=s.length;o>e;e++)this.extend(s[e])},e.Bounds.prototype={extend:function(t){return t=e.point(t),this.min||this.max?(this.min.x=Math.min(t.x,this.min.x),this.max.x=Math.max(t.x,this.max.x),this.min.y=Math.min(t.y,this.min.y),this.max.y=Math.max(t.y,this.max.y)):(this.min=t.clone(),this.max=t.clone()),this},getCenter:function(t){return new e.Point((this.min.x+this.max.x)/2,(this.min.y+this.max.y)/2,t)},getBottomLeft:function(){return new e.Point(this.min.x,this.max.y)},getTopRight:function(){return new e.Point(this.max.x,this.min.y)},getSize:function(){return this.max.subtract(this.min)},contains:function(t){var i,s;return t="number"==typeof t[0]||t instanceof e.Point?e.point(t):e.bounds(t),t instanceof e.Bounds?(i=t.min,s=t.max):i=s=t,i.x>=this.min.x&&s.x<=this.max.x&&i.y>=this.min.y&&s.y<=this.max.y},intersects:function(t){t=e.bounds(t);var i=this.min,s=this.max,o=t.min,n=t.max,a=n.x>=i.x&&o.x<=s.x,r=n.y>=i.y&&o.y<=s.y;return a&&r},isValid:function(){return!(!this.min||!this.max)}},e.bounds=function(t,i){return!t||t instanceof e.Bounds?t:new e.Bounds(t,i)},e.Transformation=function(t,i,s,e){this._a=t,this._b=i,this._c=s,this._d=e},e.Transformation.prototype={transform:function(t,i){return this._transform(t.clone(),i)},_transform:function(t,i){return i=i||1,t.x=i*(this._a*t.x+this._b),t.y=i*(this._c*t.y+this._d),t},untransform:function(t,i){return i=i||1,new e.Point((t.x/i-this._b)/this._a,(t.y/i-this._d)/this._c)}},e.DomUtil={get:function(t){return"string"==typeof t?i.getElementById(t):t},getStyle:function(t,s){var e=t.style[s];if(!e&&t.currentStyle&&(e=t.currentStyle[s]),(!e||"auto"===e)&&i.defaultView){var o=i.defaultView.getComputedStyle(t,null);e=o?o[s]:null}return"auto"===e?null:e},getViewportOffset:function(t){var s,o=0,n=0,a=t,r=i.body,h=e.Browser.ie7;do{if(o+=a.offsetTop||0,n+=a.offsetLeft||0,o+=parseInt(e.DomUtil.getStyle(a,"borderTopWidth"),10)||0,n+=parseInt(e.DomUtil.getStyle(a,"borderLeftWidth"),10)||0,s=e.DomUtil.getStyle(a,"position"),a.offsetParent===r&&"absolute"===s)break;if("fixed"===s){o+=r.scrollTop||0,n+=r.scrollLeft||0;break}a=a.offsetParent}while(a);a=t;do{if(a===r)break;o-=a.scrollTop||0,n-=a.scrollLeft||0,e.DomUtil.documentIsLtr()||!e.Browser.webkit&&!h||(n+=a.scrollWidth-a.clientWidth,h&&"hidden"!==e.DomUtil.getStyle(a,"overflow-y")&&"hidden"!==e.DomUtil.getStyle(a,"overflow")&&(n+=17)),a=a.parentNode}while(a);return new e.Point(n,o)},documentIsLtr:function(){return e.DomUtil._docIsLtrCached||(e.DomUtil._docIsLtrCached=!0,e.DomUtil._docIsLtr="ltr"===e.DomUtil.getStyle(i.body,"direction")),e.DomUtil._docIsLtr},create:function(t,s,e){var o=i.createElement(t);return o.className=s,e&&e.appendChild(o),o},disableTextSelection:function(){i.selection&&i.selection.empty&&i.selection.empty(),this._onselectstart||(this._onselectstart=i.onselectstart||null,i.onselectstart=e.Util.falseFn)},enableTextSelection:function(){i.onselectstart===e.Util.falseFn&&(i.onselectstart=this._onselectstart,this._onselectstart=null)},hasClass:function(t,i){return t.className.length>0&&RegExp("(^|\\s)"+i+"(\\s|$)").test(t.className)},addClass:function(t,i){e.DomUtil.hasClass(t,i)||(t.className+=(t.className?" ":"")+i)},removeClass:function(t,i){function s(t,s){return s===i?"":t}t.className=t.className.replace(/(\S+)\s*/g,s).replace(/(^\s+|\s+$)/,"")},setOpacity:function(t,i){if("opacity"in t.style)t.style.opacity=i;else if("filter"in t.style){var s=!1,e="DXImageTransform.Microsoft.Alpha";try{s=t.filters.item(e)}catch(o){}i=Math.round(100*i),s?(s.Enabled=100!==i,s.Opacity=i):t.style.filter+=" progid:"+e+"(opacity="+i+")"}},testProp:function(t){for(var s=i.documentElement.style,e=0;t.length>e;e++)if(t[e]in s)return t[e];return!1},getTranslateString:function(t){var i=e.Browser.webkit3d,s="translate"+(i?"3d":"")+"(",o=(i?",0":"")+")";return s+t.x+"px,"+t.y+"px"+o},getScaleString:function(t,i){var s=e.DomUtil.getTranslateString(i.add(i.multiplyBy(-1*t))),o=" scale("+t+") ";return s+o},setPosition:function(t,i,s){t._leaflet_pos=i,!s&&e.Browser.any3d?(t.style[e.DomUtil.TRANSFORM]=e.DomUtil.getTranslateString(i),e.Browser.mobileWebkit3d&&(t.style.WebkitBackfaceVisibility="hidden")):(t.style.left=i.x+"px",t.style.top=i.y+"px")},getPosition:function(t){return t._leaflet_pos}},e.DomUtil.TRANSFORM=e.DomUtil.testProp(["transform","WebkitTransform","OTransform","MozTransform","msTransform"]),e.DomUtil.TRANSITION=e.DomUtil.testProp(["webkitTransition","transition","OTransition","MozTransition","msTransition"]),e.DomUtil.TRANSITION_END="webkitTransition"===e.DomUtil.TRANSITION||"OTransition"===e.DomUtil.TRANSITION?e.DomUtil.TRANSITION+"End":"transitionend",e.LatLng=function(t,i){var s=parseFloat(t),e=parseFloat(i);if(isNaN(s)||isNaN(e))throw Error("Invalid LatLng object: ("+t+", "+i+")");this.lat=s,this.lng=e},e.extend(e.LatLng,{DEG_TO_RAD:Math.PI/180,RAD_TO_DEG:180/Math.PI,MAX_MARGIN:1e-9}),e.LatLng.prototype={equals:function(t){if(!t)return!1;t=e.latLng(t);var i=Math.max(Math.abs(this.lat-t.lat),Math.abs(this.lng-t.lng));return e.LatLng.MAX_MARGIN>=i},toString:function(t){return"LatLng("+e.Util.formatNum(this.lat,t)+", "+e.Util.formatNum(this.lng,t)+")"},distanceTo:function(t){t=e.latLng(t);var i=6378137,s=e.LatLng.DEG_TO_RAD,o=(t.lat-this.lat)*s,n=(t.lng-this.lng)*s,a=this.lat*s,r=t.lat*s,h=Math.sin(o/2),l=Math.sin(n/2),c=h*h+l*l*Math.cos(a)*Math.cos(r);return 2*i*Math.atan2(Math.sqrt(c),Math.sqrt(1-c))},wrap:function(t,i){var s=this.lng;return t=t||-180,i=i||180,s=(s+i)%(i-t)+(t>s||s===i?i:t),new e.LatLng(this.lat,s)}},e.latLng=function(t,i){return t instanceof e.LatLng?t:e.Util.isArray(t)?new e.LatLng(t[0],t[1]):isNaN(t)?t:new e.LatLng(t,i)},e.LatLngBounds=function(t,i){if(t)for(var s=i?[t,i]:t,e=0,o=s.length;o>e;e++)this.extend(s[e])},e.LatLngBounds.prototype={extend:function(t){return t="number"==typeof t[0]||"string"==typeof t[0]||t instanceof e.LatLng?e.latLng(t):e.latLngBounds(t),t instanceof e.LatLng?this._southWest||this._northEast?(this._southWest.lat=Math.min(t.lat,this._southWest.lat),this._southWest.lng=Math.min(t.lng,this._southWest.lng),this._northEast.lat=Math.max(t.lat,this._northEast.lat),this._northEast.lng=Math.max(t.lng,this._northEast.lng)):(this._southWest=new e.LatLng(t.lat,t.lng),this._northEast=new e.LatLng(t.lat,t.lng)):t instanceof e.LatLngBounds&&(this.extend(t._southWest),this.extend(t._northEast)),this},pad:function(t){var i=this._southWest,s=this._northEast,o=Math.abs(i.lat-s.lat)*t,n=Math.abs(i.lng-s.lng)*t;return new e.LatLngBounds(new e.LatLng(i.lat-o,i.lng-n),new e.LatLng(s.lat+o,s.lng+n))},getCenter:function(){return new e.LatLng((this._southWest.lat+this._northEast.lat)/2,(this._southWest.lng+this._northEast.lng)/2)},getSouthWest:function(){return this._southWest},getNorthEast:function(){return this._northEast},getNorthWest:function(){return new e.LatLng(this._northEast.lat,this._southWest.lng)},getSouthEast:function(){return new e.LatLng(this._southWest.lat,this._northEast.lng)},contains:function(t){t="number"==typeof t[0]||t instanceof e.LatLng?e.latLng(t):e.latLngBounds(t);var i,s,o=this._southWest,n=this._northEast;return t instanceof e.LatLngBounds?(i=t.getSouthWest(),s=t.getNorthEast()):i=s=t,i.lat>=o.lat&&s.lat<=n.lat&&i.lng>=o.lng&&s.lng<=n.lng},intersects:function(t){t=e.latLngBounds(t);var i=this._southWest,s=this._northEast,o=t.getSouthWest(),n=t.getNorthEast(),a=n.lat>=i.lat&&o.lat<=s.lat,r=n.lng>=i.lng&&o.lng<=s.lng;return a&&r},toBBoxString:function(){var t=this._southWest,i=this._northEast;return[t.lng,t.lat,i.lng,i.lat].join(",")},equals:function(t){return t?(t=e.latLngBounds(t),this._southWest.equals(t.getSouthWest())&&this._northEast.equals(t.getNorthEast())):!1},isValid:function(){return!(!this._southWest||!this._northEast)}},e.latLngBounds=function(t,i){return!t||t instanceof e.LatLngBounds?t:new e.LatLngBounds(t,i)},e.Projection={},e.Projection.SphericalMercator={MAX_LATITUDE:85.0511287798,project:function(t){var i=e.LatLng.DEG_TO_RAD,s=this.MAX_LATITUDE,o=Math.max(Math.min(s,t.lat),-s),n=t.lng*i,a=o*i;return a=Math.log(Math.tan(Math.PI/4+a/2)),new e.Point(n,a)},unproject:function(t){var i=e.LatLng.RAD_TO_DEG,s=t.x*i,o=(2*Math.atan(Math.exp(t.y))-Math.PI/2)*i;return new e.LatLng(o,s)}},e.Projection.LonLat={project:function(t){return new e.Point(t.lng,t.lat)},unproject:function(t){return new e.LatLng(t.y,t.x)}},e.CRS={latLngToPoint:function(t,i){var s=this.projection.project(t),e=this.scale(i);return this.transformation._transform(s,e)},pointToLatLng:function(t,i){var s=this.scale(i),e=this.transformation.untransform(t,s);return this.projection.unproject(e)},project:function(t){return this.projection.project(t)},scale:function(t){return 256*Math.pow(2,t)}},e.CRS.Simple=e.extend({},e.CRS,{projection:e.Projection.LonLat,transformation:new e.Transformation(1,0,-1,0),scale:function(t){return Math.pow(2,t)}}),e.CRS.EPSG3857=e.extend({},e.CRS,{code:"EPSG:3857",projection:e.Projection.SphericalMercator,transformation:new e.Transformation(.5/Math.PI,.5,-.5/Math.PI,.5),project:function(t){var i=this.projection.project(t),s=6378137;return i.multiplyBy(s)}}),e.CRS.EPSG900913=e.extend({},e.CRS.EPSG3857,{code:"EPSG:900913"}),e.CRS.EPSG4326=e.extend({},e.CRS,{code:"EPSG:4326",projection:e.Projection.LonLat,transformation:new e.Transformation(1/360,.5,-1/360,.5)}),e.Map=e.Class.extend({includes:e.Mixin.Events,options:{crs:e.CRS.EPSG3857,fadeAnimation:e.DomUtil.TRANSITION&&!e.Browser.android23,trackResize:!0,markerZoomAnimation:e.DomUtil.TRANSITION&&e.Browser.any3d},initialize:function(t,i){i=e.setOptions(this,i),this._initContainer(t),this._initLayout(),this.callInitHooks(),this._initEvents(),i.maxBounds&&this.setMaxBounds(i.maxBounds),i.center&&i.zoom!==s&&this.setView(e.latLng(i.center),i.zoom,!0),this._initLayers(i.layers)},setView:function(t,i){return this._resetView(e.latLng(t),this._limitZoom(i)),this},setZoom:function(t){return this.setView(this.getCenter(),t)},zoomIn:function(t){return this.setZoom(this._zoom+(t||1))},zoomOut:function(t){return this.setZoom(this._zoom-(t||1))},fitBounds:function(t){var i=this.getBoundsZoom(t);return this.setView(e.latLngBounds(t).getCenter(),i)},fitWorld:function(){var t=new e.LatLng(-60,-170),i=new e.LatLng(85,179);return this.fitBounds(new e.LatLngBounds(t,i))},panTo:function(t){return this.setView(t,this._zoom)},panBy:function(t){return this.fire("movestart"),this._rawPanBy(e.point(t)),this.fire("move"),this.fire("moveend")},setMaxBounds:function(t){if(t=e.latLngBounds(t),this.options.maxBounds=t,!t)return this._boundsMinZoom=null,this;var i=this.getBoundsZoom(t,!0);return this._boundsMinZoom=i,this._loaded&&(i>this._zoom?this.setView(t.getCenter(),i):this.panInsideBounds(t)),this},panInsideBounds:function(t){t=e.latLngBounds(t);var i=this.getBounds(),s=this.project(i.getSouthWest()),o=this.project(i.getNorthEast()),n=this.project(t.getSouthWest()),a=this.project(t.getNorthEast()),r=0,h=0;return o.ya.x&&(r=a.x-o.x),s.y>n.y&&(h=n.y-s.y),s.x=r);return m&&i?null:i?r:r-1},getSize:function(){return(!this._size||this._sizeChanged)&&(this._size=new e.Point(this._container.clientWidth,this._container.clientHeight),this._sizeChanged=!1),this._size.clone()},getPixelBounds:function(){var t=this._getTopLeftPoint();return new e.Bounds(t,t.add(this.getSize()))},getPixelOrigin:function(){return this._initialTopLeftPoint},getPanes:function(){return this._panes},getContainer:function(){return this._container},getZoomScale:function(t){var i=this.options.crs;return i.scale(t)/i.scale(this._zoom)},getScaleZoom:function(t){return this._zoom+Math.log(t)/Math.LN2},project:function(t,i){return i=i===s?this._zoom:i,this.options.crs.latLngToPoint(e.latLng(t),i)},unproject:function(t,i){return i=i===s?this._zoom:i,this.options.crs.pointToLatLng(e.point(t),i)},layerPointToLatLng:function(t){var i=e.point(t).add(this._initialTopLeftPoint);return this.unproject(i)},latLngToLayerPoint:function(t){var i=this.project(e.latLng(t))._round();return i._subtract(this._initialTopLeftPoint)},containerPointToLayerPoint:function(t){return e.point(t).subtract(this._getMapPanePos())},layerPointToContainerPoint:function(t){return e.point(t).add(this._getMapPanePos())},containerPointToLatLng:function(t){var i=this.containerPointToLayerPoint(e.point(t));return this.layerPointToLatLng(i)},latLngToContainerPoint:function(t){return this.layerPointToContainerPoint(this.latLngToLayerPoint(e.latLng(t)))},mouseEventToContainerPoint:function(t){return e.DomEvent.getMousePosition(t,this._container)},mouseEventToLayerPoint:function(t){return this.containerPointToLayerPoint(this.mouseEventToContainerPoint(t))},mouseEventToLatLng:function(t){return this.layerPointToLatLng(this.mouseEventToLayerPoint(t))},_initContainer:function(t){var i=this._container=e.DomUtil.get(t);if(i._leaflet)throw Error("Map container is already initialized.");i._leaflet=!0},_initLayout:function(){var t=this._container;e.DomUtil.addClass(t,"leaflet-container"),e.Browser.touch&&e.DomUtil.addClass(t,"leaflet-touch"),this.options.fadeAnimation&&e.DomUtil.addClass(t,"leaflet-fade-anim");var i=e.DomUtil.getStyle(t,"position");"absolute"!==i&&"relative"!==i&&"fixed"!==i&&(t.style.position="relative"),this._initPanes(),this._initControlPos&&this._initControlPos()},_initPanes:function(){var t=this._panes={};this._mapPane=t.mapPane=this._createPane("leaflet-map-pane",this._container),this._tilePane=t.tilePane=this._createPane("leaflet-tile-pane",this._mapPane),t.objectsPane=this._createPane("leaflet-objects-pane",this._mapPane),t.shadowPane=this._createPane("leaflet-shadow-pane"),t.overlayPane=this._createPane("leaflet-overlay-pane"),t.markerPane=this._createPane("leaflet-marker-pane"),t.popupPane=this._createPane("leaflet-popup-pane");var i=" leaflet-zoom-hide";this.options.markerZoomAnimation||(e.DomUtil.addClass(t.markerPane,i),e.DomUtil.addClass(t.shadowPane,i),e.DomUtil.addClass(t.popupPane,i))},_createPane:function(t,i){return e.DomUtil.create("div",t,i||this._panes.objectsPane)},_initLayers:function(t){t=t?e.Util.isArray(t)?t:[t]:[],this._layers={},this._zoomBoundLayers={},this._tileLayersNum=0;var i,s;for(i=0,s=t.length;s>i;i++)this.addLayer(t[i])},_resetView:function(t,i,s,o){var n=this._zoom!==i;o||(this.fire("movestart"),n&&this.fire("zoomstart")),this._zoom=i,this._initialTopLeftPoint=this._getNewTopLeftPoint(t),s?this._initialTopLeftPoint._add(this._getMapPanePos()):e.DomUtil.setPosition(this._mapPane,new e.Point(0,0)),this._tileLayersToLoad=this._tileLayersNum;var a=!this._loaded;this._loaded=!0,this.fire("viewreset",{hard:!s}),this.fire("move"),(n||o)&&this.fire("zoomend"),this.fire("moveend",{hard:!s}),a&&this.fire("load")},_rawPanBy:function(t){e.DomUtil.setPosition(this._mapPane,this._getMapPanePos().subtract(t))},_updateZoomLevels:function(){var t,i=1/0,e=-1/0;for(t in this._zoomBoundLayers)if(this._zoomBoundLayers.hasOwnProperty(t)){var o=this._zoomBoundLayers[t];isNaN(o.options.minZoom)||(i=Math.min(i,o.options.minZoom)),isNaN(o.options.maxZoom)||(e=Math.max(e,o.options.maxZoom))}t===s?this._layersMaxZoom=this._layersMinZoom=s:(this._layersMaxZoom=e,this._layersMinZoom=i)},_initEvents:function(){if(e.DomEvent){e.DomEvent.on(this._container,"click",this._onMouseClick,this);var i,s,o=["dblclick","mousedown","mouseup","mouseenter","mouseleave","mousemove","contextmenu"];for(i=0,s=o.length;s>i;i++)e.DomEvent.on(this._container,o[i],this._fireMouseEvent,this);this.options.trackResize&&e.DomEvent.on(t,"resize",this._onResize,this)}},_onResize:function(){e.Util.cancelAnimFrame(this._resizeRequest),this._resizeRequest=e.Util.requestAnimFrame(this.invalidateSize,this,!1,this._container)},_onMouseClick:function(t){!this._loaded||this.dragging&&this.dragging.moved()||(this.fire("preclick"),this._fireMouseEvent(t))},_fireMouseEvent:function(t){if(this._loaded){var i=t.type;if(i="mouseenter"===i?"mouseover":"mouseleave"===i?"mouseout":i,this.hasEventListeners(i)){"contextmenu"===i&&e.DomEvent.preventDefault(t);var s=this.mouseEventToContainerPoint(t),o=this.containerPointToLayerPoint(s),n=this.layerPointToLatLng(o);this.fire(i,{latlng:n,layerPoint:o,containerPoint:s,originalEvent:t})}}},_onTileLayerLoad:function(){this._tileLayersToLoad--,this._tileLayersNum&&!this._tileLayersToLoad&&this._tileBg&&(clearTimeout(this._clearTileBgTimer),this._clearTileBgTimer=setTimeout(e.bind(this._clearTileBg,this),500))},whenReady:function(t,i){return this._loaded?t.call(i||this,this):this.on("load",t,i),this},_getMapPanePos:function(){return e.DomUtil.getPosition(this._mapPane)},_getTopLeftPoint:function(){if(!this._loaded)throw Error("Set map center and zoom first.");return this._initialTopLeftPoint.subtract(this._getMapPanePos())},_getNewTopLeftPoint:function(t,i){var s=this.getSize()._divideBy(2);return this.project(t,i)._subtract(s)._round()},_latLngToNewLayerPoint:function(t,i,s){var e=this._getNewTopLeftPoint(s,i).add(this._getMapPanePos());return this.project(t,i)._subtract(e)},_getCenterLayerPoint:function(){return this.containerPointToLayerPoint(this.getSize()._divideBy(2))},_getCenterOffset:function(t){return this.latLngToLayerPoint(t).subtract(this._getCenterLayerPoint())},_limitZoom:function(t){var i=this.getMinZoom(),s=this.getMaxZoom();return Math.max(i,Math.min(s,t))}}),e.map=function(t,i){return new e.Map(t,i)},e.Projection.Mercator={MAX_LATITUDE:85.0840591556,R_MINOR:6356752.3142,R_MAJOR:6378137,project:function(t){var i=e.LatLng.DEG_TO_RAD,s=this.MAX_LATITUDE,o=Math.max(Math.min(s,t.lat),-s),n=this.R_MAJOR,a=this.R_MINOR,r=t.lng*i*n,h=o*i,l=a/n,c=Math.sqrt(1-l*l),m=c*Math.sin(h);m=Math.pow((1-m)/(1+m),.5*c);var u=Math.tan(.5*(.5*Math.PI-h))/m;return h=-a*Math.log(u),new e.Point(r,h)},unproject:function(t){for(var i,s=e.LatLng.RAD_TO_DEG,o=this.R_MAJOR,n=this.R_MINOR,a=t.x*s/o,r=n/o,h=Math.sqrt(1-r*r),l=Math.exp(-t.y/n),c=Math.PI/2-2*Math.atan(l),m=15,u=1e-7,d=m,p=.1;Math.abs(p)>u&&--d>0;)i=h*Math.sin(c),p=Math.PI/2-2*Math.atan(l*Math.pow((1-i)/(1+i),.5*h))-c,c+=p;return new e.LatLng(c*s,a)}},e.CRS.EPSG3395=e.extend({},e.CRS,{code:"EPSG:3395",projection:e.Projection.Mercator,transformation:function(){var t=e.Projection.Mercator,i=t.R_MAJOR,s=t.R_MINOR;return new e.Transformation(.5/(Math.PI*i),.5,-.5/(Math.PI*s),.5)}()}),e.TileLayer=e.Class.extend({includes:e.Mixin.Events,options:{minZoom:0,maxZoom:18,tileSize:256,subdomains:"abc",errorTileUrl:"",attribution:"",zoomOffset:0,opacity:1,unloadInvisibleTiles:e.Browser.mobile,updateWhenIdle:e.Browser.mobile},initialize:function(t,i){i=e.setOptions(this,i),i.detectRetina&&e.Browser.retina&&i.maxZoom>0&&(i.tileSize=Math.floor(i.tileSize/2),i.zoomOffset++,i.minZoom>0&&i.minZoom--,this.options.maxZoom--),this._url=t;var s=this.options.subdomains;"string"==typeof s&&(this.options.subdomains=s.split(""))},onAdd:function(t){this._map=t,this._initContainer(),this._createTileProto(),t.on({viewreset:this._resetCallback,moveend:this._update},this),this.options.updateWhenIdle||(this._limitedUpdate=e.Util.limitExecByInterval(this._update,150,this),t.on("move",this._limitedUpdate,this)),this._reset(),this._update()},addTo:function(t){return t.addLayer(this),this},onRemove:function(t){this._container.parentNode.removeChild(this._container),t.off({viewreset:this._resetCallback,moveend:this._update},this),this.options.updateWhenIdle||t.off("move",this._limitedUpdate,this),this._container=null,this._map=null +},bringToFront:function(){var t=this._map._panes.tilePane;return this._container&&(t.appendChild(this._container),this._setAutoZIndex(t,Math.max)),this},bringToBack:function(){var t=this._map._panes.tilePane;return this._container&&(t.insertBefore(this._container,t.firstChild),this._setAutoZIndex(t,Math.min)),this},getAttribution:function(){return this.options.attribution},setOpacity:function(t){return this.options.opacity=t,this._map&&this._updateOpacity(),this},setZIndex:function(t){return this.options.zIndex=t,this._updateZIndex(),this},setUrl:function(t,i){return this._url=t,i||this.redraw(),this},redraw:function(){return this._map&&(this._map._panes.tilePane.empty=!1,this._reset(!0),this._update()),this},_updateZIndex:function(){this._container&&this.options.zIndex!==s&&(this._container.style.zIndex=this.options.zIndex)},_setAutoZIndex:function(t,i){var s,e,o,n=t.children,a=-i(1/0,-1/0);for(e=0,o=n.length;o>e;e++)n[e]!==this._container&&(s=parseInt(n[e].style.zIndex,10),isNaN(s)||(a=i(a,s)));this.options.zIndex=this._container.style.zIndex=(isFinite(a)?a:0)+i(1,-1)},_updateOpacity:function(){e.DomUtil.setOpacity(this._container,this.options.opacity);var t,i=this._tiles;if(e.Browser.webkit)for(t in i)i.hasOwnProperty(t)&&(i[t].style.webkitTransform+=" translate(0,0)")},_initContainer:function(){var t=this._map._panes.tilePane;(!this._container||t.empty)&&(this._container=e.DomUtil.create("div","leaflet-layer"),this._updateZIndex(),t.appendChild(this._container),1>this.options.opacity&&this._updateOpacity())},_resetCallback:function(t){this._reset(t.hard)},_reset:function(t){var i=this._tiles;for(var s in i)i.hasOwnProperty(s)&&this.fire("tileunload",{tile:i[s]});this._tiles={},this._tilesToLoad=0,this.options.reuseTiles&&(this._unusedTiles=[]),t&&this._container&&(this._container.innerHTML=""),this._initContainer()},_update:function(){if(this._map){var t=this._map.getPixelBounds(),i=this._map.getZoom(),s=this.options.tileSize;if(!(i>this.options.maxZoom||this.options.minZoom>i)){var o=new e.Point(Math.floor(t.min.x/s),Math.floor(t.min.y/s)),n=new e.Point(Math.floor(t.max.x/s),Math.floor(t.max.y/s)),a=new e.Bounds(o,n);this._addTilesFromCenterOut(a),(this.options.unloadInvisibleTiles||this.options.reuseTiles)&&this._removeOtherTiles(a)}}},_addTilesFromCenterOut:function(t){var s,o,n,a=[],r=t.getCenter();for(s=t.min.y;t.max.y>=s;s++)for(o=t.min.x;t.max.x>=o;o++)n=new e.Point(o,s),this._tileShouldBeLoaded(n)&&a.push(n);var h=a.length;if(0!==h){a.sort(function(t,i){return t.distanceTo(r)-i.distanceTo(r)});var l=i.createDocumentFragment();for(this._tilesToLoad||this.fire("loading"),this._tilesToLoad+=h,o=0;h>o;o++)this._addTile(a[o],l);this._container.appendChild(l)}},_tileShouldBeLoaded:function(t){if(t.x+":"+t.y in this._tiles)return!1;if(!this.options.continuousWorld){var i=this._getWrapTileNum();if(this.options.noWrap&&(0>t.x||t.x>=i)||0>t.y||t.y>=i)return!1}return!0},_removeOtherTiles:function(t){var i,s,e,o;for(o in this._tiles)this._tiles.hasOwnProperty(o)&&(i=o.split(":"),s=parseInt(i[0],10),e=parseInt(i[1],10),(t.min.x>s||s>t.max.x||t.min.y>e||e>t.max.y)&&this._removeTile(o))},_removeTile:function(t){var i=this._tiles[t];this.fire("tileunload",{tile:i,url:i.src}),this.options.reuseTiles?(e.DomUtil.removeClass(i,"leaflet-tile-loaded"),this._unusedTiles.push(i)):i.parentNode===this._container&&this._container.removeChild(i),e.Browser.android||(i.src=e.Util.emptyImageUrl),delete this._tiles[t]},_addTile:function(t,i){var s=this._getTilePos(t),o=this._getTile();e.DomUtil.setPosition(o,s,e.Browser.chrome||e.Browser.android23),this._tiles[t.x+":"+t.y]=o,this._loadTile(o,t),o.parentNode!==this._container&&i.appendChild(o)},_getZoomForUrl:function(){var t=this.options,i=this._map.getZoom();return t.zoomReverse&&(i=t.maxZoom-i),i+t.zoomOffset},_getTilePos:function(t){var i=this._map.getPixelOrigin(),s=this.options.tileSize;return t.multiplyBy(s).subtract(i)},getTileUrl:function(t){return this._adjustTilePoint(t),e.Util.template(this._url,e.extend({s:this._getSubdomain(t),z:this._getZoomForUrl(),x:t.x,y:t.y},this.options))},_getWrapTileNum:function(){return Math.pow(2,this._getZoomForUrl())},_adjustTilePoint:function(t){var i=this._getWrapTileNum();this.options.continuousWorld||this.options.noWrap||(t.x=(t.x%i+i)%i),this.options.tms&&(t.y=i-t.y-1)},_getSubdomain:function(t){var i=(t.x+t.y)%this.options.subdomains.length;return this.options.subdomains[i]},_createTileProto:function(){var t=this._tileImg=e.DomUtil.create("img","leaflet-tile");t.style.width=t.style.height=this.options.tileSize+"px",t.galleryimg="no"},_getTile:function(){if(this.options.reuseTiles&&this._unusedTiles.length>0){var t=this._unusedTiles.pop();return this._resetTile(t),t}return this._createTile()},_resetTile:function(){},_createTile:function(){var t=this._tileImg.cloneNode(!1);return t.onselectstart=t.onmousemove=e.Util.falseFn,t},_loadTile:function(t,i){t._layer=this,t.onload=this._tileOnLoad,t.onerror=this._tileOnError,t.src=this.getTileUrl(i)},_tileLoaded:function(){this._tilesToLoad--,this._tilesToLoad||this.fire("load")},_tileOnLoad:function(){var t=this._layer;this.src!==e.Util.emptyImageUrl&&(e.DomUtil.addClass(this,"leaflet-tile-loaded"),t.fire("tileload",{tile:this,url:this.src})),t._tileLoaded()},_tileOnError:function(){var t=this._layer;t.fire("tileerror",{tile:this,url:this.src});var i=t.options.errorTileUrl;i&&(this.src=i),t._tileLoaded()}}),e.tileLayer=function(t,i){return new e.TileLayer(t,i)},e.TileLayer.WMS=e.TileLayer.extend({defaultWmsParams:{service:"WMS",request:"GetMap",version:"1.1.1",layers:"",styles:"",format:"image/jpeg",transparent:!1},initialize:function(t,i){this._url=t;var s=e.extend({},this.defaultWmsParams);s.width=s.height=i.detectRetina&&e.Browser.retina?2*this.options.tileSize:this.options.tileSize;for(var o in i)this.options.hasOwnProperty(o)||(s[o]=i[o]);this.wmsParams=s,e.setOptions(this,i)},onAdd:function(t){var i=parseFloat(this.wmsParams.version)>=1.3?"crs":"srs";this.wmsParams[i]=t.options.crs.code,e.TileLayer.prototype.onAdd.call(this,t)},getTileUrl:function(t,i){this._adjustTilePoint(t);var s=this._map,o=s.options.crs,n=this.options.tileSize,a=t.multiplyBy(n),r=a.add(new e.Point(n,n)),h=o.project(s.unproject(a,i)),l=o.project(s.unproject(r,i)),c=[h.x,l.y,l.x,h.y].join(","),m=e.Util.template(this._url,{s:this._getSubdomain(t)});return m+e.Util.getParamString(this.wmsParams,m)+"&bbox="+c},setParams:function(t,i){return e.extend(this.wmsParams,t),i||this.redraw(),this}}),e.tileLayer.wms=function(t,i){return new e.TileLayer.WMS(t,i)},e.TileLayer.Canvas=e.TileLayer.extend({options:{async:!1},initialize:function(t){e.setOptions(this,t)},redraw:function(){var t=this._tiles;for(var i in t)t.hasOwnProperty(i)&&this._redrawTile(t[i])},_redrawTile:function(t){this.drawTile(t,t._tilePoint,this._map._zoom)},_createTileProto:function(){var t=this._canvasProto=e.DomUtil.create("canvas","leaflet-tile");t.width=t.height=this.options.tileSize},_createTile:function(){var t=this._canvasProto.cloneNode(!1);return t.onselectstart=t.onmousemove=e.Util.falseFn,t},_loadTile:function(t,i){t._layer=this,t._tilePoint=i,this._redrawTile(t),this.options.async||this.tileDrawn(t)},drawTile:function(){},tileDrawn:function(t){this._tileOnLoad.call(t)}}),e.tileLayer.canvas=function(t){return new e.TileLayer.Canvas(t)},e.ImageOverlay=e.Class.extend({includes:e.Mixin.Events,options:{opacity:1},initialize:function(t,i,s){this._url=t,this._bounds=e.latLngBounds(i),e.setOptions(this,s)},onAdd:function(t){this._map=t,this._image||this._initImage(),t._panes.overlayPane.appendChild(this._image),t.on("viewreset",this._reset,this),t.options.zoomAnimation&&e.Browser.any3d&&t.on("zoomanim",this._animateZoom,this),this._reset()},onRemove:function(t){t.getPanes().overlayPane.removeChild(this._image),t.off("viewreset",this._reset,this),t.options.zoomAnimation&&t.off("zoomanim",this._animateZoom,this)},addTo:function(t){return t.addLayer(this),this},setOpacity:function(t){return this.options.opacity=t,this._updateOpacity(),this},bringToFront:function(){return this._image&&this._map._panes.overlayPane.appendChild(this._image),this},bringToBack:function(){var t=this._map._panes.overlayPane;return this._image&&t.insertBefore(this._image,t.firstChild),this},_initImage:function(){this._image=e.DomUtil.create("img","leaflet-image-layer"),this._map.options.zoomAnimation&&e.Browser.any3d?e.DomUtil.addClass(this._image,"leaflet-zoom-animated"):e.DomUtil.addClass(this._image,"leaflet-zoom-hide"),this._updateOpacity(),e.extend(this._image,{galleryimg:"no",onselectstart:e.Util.falseFn,onmousemove:e.Util.falseFn,onload:e.bind(this._onImageLoad,this),src:this._url})},_animateZoom:function(t){var i=this._map,s=this._image,o=i.getZoomScale(t.zoom),n=this._bounds.getNorthWest(),a=this._bounds.getSouthEast(),r=i._latLngToNewLayerPoint(n,t.zoom,t.center),h=i._latLngToNewLayerPoint(a,t.zoom,t.center)._subtract(r),l=r._add(h._multiplyBy(.5*(1-1/o)));s.style[e.DomUtil.TRANSFORM]=e.DomUtil.getTranslateString(l)+" scale("+o+") "},_reset:function(){var t=this._image,i=this._map.latLngToLayerPoint(this._bounds.getNorthWest()),s=this._map.latLngToLayerPoint(this._bounds.getSouthEast())._subtract(i);e.DomUtil.setPosition(t,i),t.style.width=s.x+"px",t.style.height=s.y+"px"},_onImageLoad:function(){this.fire("load")},_updateOpacity:function(){e.DomUtil.setOpacity(this._image,this.options.opacity)}}),e.imageOverlay=function(t,i,s){return new e.ImageOverlay(t,i,s)},e.Icon=e.Class.extend({options:{className:""},initialize:function(t){e.setOptions(this,t)},createIcon:function(){return this._createIcon("icon")},createShadow:function(){return this._createIcon("shadow")},_createIcon:function(t){var i=this._getIconUrl(t);if(!i){if("icon"===t)throw Error("iconUrl not set in Icon options (see the docs).");return null}var s=this._createImg(i);return this._setIconStyles(s,t),s},_setIconStyles:function(t,i){var s,o=this.options,n=e.point(o[i+"Size"]);s="shadow"===i?e.point(o.shadowAnchor||o.iconAnchor):e.point(o.iconAnchor),!s&&n&&(s=n.divideBy(2,!0)),t.className="leaflet-marker-"+i+" "+o.className,s&&(t.style.marginLeft=-s.x+"px",t.style.marginTop=-s.y+"px"),n&&(t.style.width=n.x+"px",t.style.height=n.y+"px")},_createImg:function(t){var s;return e.Browser.ie6?(s=i.createElement("div"),s.style.filter='progid:DXImageTransform.Microsoft.AlphaImageLoader(src="'+t+'")'):(s=i.createElement("img"),s.src=t),s},_getIconUrl:function(t){return e.Browser.retina&&this.options[t+"RetinaUrl"]?this.options[t+"RetinaUrl"]:this.options[t+"Url"]}}),e.icon=function(t){return new e.Icon(t)},e.Icon.Default=e.Icon.extend({options:{iconSize:new e.Point(25,41),iconAnchor:new e.Point(12,41),popupAnchor:new e.Point(1,-34),shadowSize:new e.Point(41,41)},_getIconUrl:function(t){var i=t+"Url";if(this.options[i])return this.options[i];e.Browser.retina&&"icon"===t&&(t+="@2x");var s=e.Icon.Default.imagePath;if(!s)throw Error("Couldn't autodetect L.Icon.Default.imagePath, set it manually.");return "marker-"+t+".png"}}),e.Icon.Default.imagePath=function(){var t,s,e,o,n=i.getElementsByTagName("script"),a=/\/?leaflet[\-\._]?([\w\-\._]*)\.js\??/;for(t=0,s=n.length;s>t;t++)if(e=n[t].src,o=e.match(a))return e.split(a)[0]+""}(),e.Marker=e.Class.extend({includes:e.Mixin.Events,options:{icon:new e.Icon.Default,title:"",clickable:!0,draggable:!1,zIndexOffset:0,opacity:1,riseOnHover:!1,riseOffset:250},initialize:function(t,i){e.setOptions(this,i),this._latlng=e.latLng(t)},onAdd:function(t){this._map=t,t.on("viewreset",this.update,this),this._initIcon(),this.update(),t.options.zoomAnimation&&t.options.markerZoomAnimation&&t.on("zoomanim",this._animateZoom,this)},addTo:function(t){return t.addLayer(this),this},onRemove:function(t){this._removeIcon(),this.fire("remove"),t.off({viewreset:this.update,zoomanim:this._animateZoom},this),this._map=null},getLatLng:function(){return this._latlng},setLatLng:function(t){return this._latlng=e.latLng(t),this.update(),this.fire("move",{latlng:this._latlng})},setZIndexOffset:function(t){return this.options.zIndexOffset=t,this.update(),this},setIcon:function(t){return this._map&&this._removeIcon(),this.options.icon=t,this._map&&(this._initIcon(),this.update()),this},update:function(){if(this._icon){var t=this._map.latLngToLayerPoint(this._latlng).round();this._setPos(t)}return this},_initIcon:function(){var t=this.options,i=this._map,s=i.options.zoomAnimation&&i.options.markerZoomAnimation,o=s?"leaflet-zoom-animated":"leaflet-zoom-hide",n=!1;this._icon||(this._icon=t.icon.createIcon(),t.title&&(this._icon.title=t.title),this._initInteraction(),n=1>this.options.opacity,e.DomUtil.addClass(this._icon,o),t.riseOnHover&&e.DomEvent.on(this._icon,"mouseover",this._bringToFront,this).on(this._icon,"mouseout",this._resetZIndex,this)),this._shadow||(this._shadow=t.icon.createShadow(),this._shadow&&(e.DomUtil.addClass(this._shadow,o),n=1>this.options.opacity)),n&&this._updateOpacity();var a=this._map._panes;a.markerPane.appendChild(this._icon),this._shadow&&a.shadowPane.appendChild(this._shadow)},_removeIcon:function(){var t=this._map._panes;this.options.riseOnHover&&e.DomEvent.off(this._icon,"mouseover",this._bringToFront).off(this._icon,"mouseout",this._resetZIndex),t.markerPane.removeChild(this._icon),this._shadow&&t.shadowPane.removeChild(this._shadow),this._icon=this._shadow=null},_setPos:function(t){e.DomUtil.setPosition(this._icon,t),this._shadow&&e.DomUtil.setPosition(this._shadow,t),this._zIndex=t.y+this.options.zIndexOffset,this._resetZIndex()},_updateZIndex:function(t){this._icon.style.zIndex=this._zIndex+t},_animateZoom:function(t){var i=this._map._latLngToNewLayerPoint(this._latlng,t.zoom,t.center);this._setPos(i)},_initInteraction:function(){if(this.options.clickable){var t=this._icon,i=["dblclick","mousedown","mouseover","mouseout","contextmenu"];e.DomUtil.addClass(t,"leaflet-clickable"),e.DomEvent.on(t,"click",this._onMouseClick,this);for(var s=0;i.length>s;s++)e.DomEvent.on(t,i[s],this._fireMouseEvent,this);e.Handler.MarkerDrag&&(this.dragging=new e.Handler.MarkerDrag(this),this.options.draggable&&this.dragging.enable())}},_onMouseClick:function(t){var i=this.dragging&&this.dragging.moved();(this.hasEventListeners(t.type)||i)&&e.DomEvent.stopPropagation(t),i||(this.dragging&&this.dragging._enabled||!this._map.dragging||!this._map.dragging.moved())&&this.fire(t.type,{originalEvent:t})},_fireMouseEvent:function(t){this.fire(t.type,{originalEvent:t}),"contextmenu"===t.type&&this.hasEventListeners(t.type)&&e.DomEvent.preventDefault(t),"mousedown"!==t.type&&e.DomEvent.stopPropagation(t)},setOpacity:function(t){this.options.opacity=t,this._map&&this._updateOpacity()},_updateOpacity:function(){e.DomUtil.setOpacity(this._icon,this.options.opacity),this._shadow&&e.DomUtil.setOpacity(this._shadow,this.options.opacity)},_bringToFront:function(){this._updateZIndex(this.options.riseOffset)},_resetZIndex:function(){this._updateZIndex(0)}}),e.marker=function(t,i){return new e.Marker(t,i)},e.DivIcon=e.Icon.extend({options:{iconSize:new e.Point(12,12),className:"leaflet-div-icon"},createIcon:function(){var t=i.createElement("div"),s=this.options;return s.html&&(t.innerHTML=s.html),s.bgPos&&(t.style.backgroundPosition=-s.bgPos.x+"px "+-s.bgPos.y+"px"),this._setIconStyles(t,"icon"),t},createShadow:function(){return null}}),e.divIcon=function(t){return new e.DivIcon(t)},e.Map.mergeOptions({closePopupOnClick:!0}),e.Popup=e.Class.extend({includes:e.Mixin.Events,options:{minWidth:50,maxWidth:300,maxHeight:null,autoPan:!0,closeButton:!0,offset:new e.Point(0,6),autoPanPadding:new e.Point(5,5),className:"",zoomAnimation:!0},initialize:function(t,i){e.setOptions(this,t),this._source=i,this._animated=e.Browser.any3d&&this.options.zoomAnimation},onAdd:function(t){this._map=t,this._container||this._initLayout(),this._updateContent();var i=t.options.fadeAnimation;i&&e.DomUtil.setOpacity(this._container,0),t._panes.popupPane.appendChild(this._container),t.on("viewreset",this._updatePosition,this),this._animated&&t.on("zoomanim",this._zoomAnimation,this),t.options.closePopupOnClick&&t.on("preclick",this._close,this),this._update(),i&&e.DomUtil.setOpacity(this._container,1)},addTo:function(t){return t.addLayer(this),this},openOn:function(t){return t.openPopup(this),this},onRemove:function(t){t._panes.popupPane.removeChild(this._container),e.Util.falseFn(this._container.offsetWidth),t.off({viewreset:this._updatePosition,preclick:this._close,zoomanim:this._zoomAnimation},this),t.options.fadeAnimation&&e.DomUtil.setOpacity(this._container,0),this._map=null},setLatLng:function(t){return this._latlng=e.latLng(t),this._update(),this},setContent:function(t){return this._content=t,this._update(),this},_close:function(){var t=this._map;t&&(t._popup=null,t.removeLayer(this).fire("popupclose",{popup:this}))},_initLayout:function(){var t,i="leaflet-popup",s=i+" "+this.options.className+" leaflet-zoom-"+(this._animated?"animated":"hide"),o=this._container=e.DomUtil.create("div",s);this.options.closeButton&&(t=this._closeButton=e.DomUtil.create("a",i+"-close-button",o),t.href="#close",t.innerHTML="×",e.DomEvent.on(t,"click",this._onCloseButtonClick,this));var n=this._wrapper=e.DomUtil.create("div",i+"-content-wrapper",o);e.DomEvent.disableClickPropagation(n),this._contentNode=e.DomUtil.create("div",i+"-content",n),e.DomEvent.on(this._contentNode,"mousewheel",e.DomEvent.stopPropagation),this._tipContainer=e.DomUtil.create("div",i+"-tip-container",o),this._tip=e.DomUtil.create("div",i+"-tip",this._tipContainer)},_update:function(){this._map&&(this._container.style.visibility="hidden",this._updateContent(),this._updateLayout(),this._updatePosition(),this._container.style.visibility="",this._adjustPan())},_updateContent:function(){if(this._content){if("string"==typeof this._content)this._contentNode.innerHTML=this._content;else{for(;this._contentNode.hasChildNodes();)this._contentNode.removeChild(this._contentNode.firstChild);this._contentNode.appendChild(this._content)}this.fire("contentupdate")}},_updateLayout:function(){var t=this._contentNode,i=t.style;i.width="",i.whiteSpace="nowrap";var s=t.offsetWidth;s=Math.min(s,this.options.maxWidth),s=Math.max(s,this.options.minWidth),i.width=s+1+"px",i.whiteSpace="",i.height="";var o=t.offsetHeight,n=this.options.maxHeight,a="leaflet-popup-scrolled";n&&o>n?(i.height=n+"px",e.DomUtil.addClass(t,a)):e.DomUtil.removeClass(t,a),this._containerWidth=this._container.offsetWidth},_updatePosition:function(){if(this._map){var t=this._map.latLngToLayerPoint(this._latlng),i=this._animated,s=this.options.offset;i&&e.DomUtil.setPosition(this._container,t),this._containerBottom=-s.y-(i?0:t.y),this._containerLeft=-Math.round(this._containerWidth/2)+s.x+(i?0:t.x),this._container.style.bottom=this._containerBottom+"px",this._container.style.left=this._containerLeft+"px"}},_zoomAnimation:function(t){var i=this._map._latLngToNewLayerPoint(this._latlng,t.zoom,t.center);e.DomUtil.setPosition(this._container,i)},_adjustPan:function(){if(this.options.autoPan){var t=this._map,i=this._container.offsetHeight,s=this._containerWidth,o=new e.Point(this._containerLeft,-i-this._containerBottom);this._animated&&o._add(e.DomUtil.getPosition(this._container));var n=t.layerPointToContainerPoint(o),a=this.options.autoPanPadding,r=t.getSize(),h=0,l=0;0>n.x&&(h=n.x-a.x),n.x+s>r.x&&(h=n.x+s-r.x+a.x),0>n.y&&(l=n.y-a.y),n.y+i>r.y&&(l=n.y+i-r.y+a.y),(h||l)&&t.panBy(new e.Point(h,l))}},_onCloseButtonClick:function(t){this._close(),e.DomEvent.stop(t)}}),e.popup=function(t,i){return new e.Popup(t,i)},e.Marker.include({openPopup:function(){return this._popup&&this._map&&(this._popup.setLatLng(this._latlng),this._map.openPopup(this._popup)),this},closePopup:function(){return this._popup&&this._popup._close(),this},bindPopup:function(t,i){var s=e.point(this.options.icon.options.popupAnchor)||new e.Point(0,0);return s=s.add(e.Popup.prototype.options.offset),i&&i.offset&&(s=s.add(i.offset)),i=e.extend({offset:s},i),this._popup||this.on("click",this.openPopup,this).on("remove",this.closePopup,this).on("move",this._movePopup,this),this._popup=new e.Popup(i,this).setContent(t),this},unbindPopup:function(){return this._popup&&(this._popup=null,this.off("click",this.openPopup).off("remove",this.closePopup).off("move",this._movePopup)),this},_movePopup:function(t){this._popup.setLatLng(t.latlng)}}),e.Map.include({openPopup:function(t){return this.closePopup(),this._popup=t,this.addLayer(t).fire("popupopen",{popup:this._popup})},closePopup:function(){return this._popup&&this._popup._close(),this}}),e.LayerGroup=e.Class.extend({initialize:function(t){this._layers={};var i,s;if(t)for(i=0,s=t.length;s>i;i++)this.addLayer(t[i])},addLayer:function(t){var i=e.stamp(t);return this._layers[i]=t,this._map&&this._map.addLayer(t),this},removeLayer:function(t){var i=e.stamp(t);return delete this._layers[i],this._map&&this._map.removeLayer(t),this},clearLayers:function(){return this.eachLayer(this.removeLayer,this),this},invoke:function(t){var i,s,e=Array.prototype.slice.call(arguments,1);for(i in this._layers)this._layers.hasOwnProperty(i)&&(s=this._layers[i],s[t]&&s[t].apply(s,e));return this},onAdd:function(t){this._map=t,this.eachLayer(t.addLayer,t)},onRemove:function(t){this.eachLayer(t.removeLayer,t),this._map=null},addTo:function(t){return t.addLayer(this),this},eachLayer:function(t,i){for(var s in this._layers)this._layers.hasOwnProperty(s)&&t.call(i,this._layers[s])},setZIndex:function(t){return this.invoke("setZIndex",t)}}),e.layerGroup=function(t){return new e.LayerGroup(t)},e.FeatureGroup=e.LayerGroup.extend({includes:e.Mixin.Events,statics:{EVENTS:"click dblclick mouseover mouseout mousemove contextmenu"},addLayer:function(t){return this._layers[e.stamp(t)]?this:(t.on(e.FeatureGroup.EVENTS,this._propagateEvent,this),e.LayerGroup.prototype.addLayer.call(this,t),this._popupContent&&t.bindPopup&&t.bindPopup(this._popupContent,this._popupOptions),this.fire("layeradd",{layer:t}))},removeLayer:function(t){return t.off(e.FeatureGroup.EVENTS,this._propagateEvent,this),e.LayerGroup.prototype.removeLayer.call(this,t),this._popupContent&&this.invoke("unbindPopup"),this.fire("layerremove",{layer:t})},bindPopup:function(t,i){return this._popupContent=t,this._popupOptions=i,this.invoke("bindPopup",t,i)},setStyle:function(t){return this.invoke("setStyle",t)},bringToFront:function(){return this.invoke("bringToFront")},bringToBack:function(){return this.invoke("bringToBack")},getBounds:function(){var t=new e.LatLngBounds;return this.eachLayer(function(i){t.extend(i instanceof e.Marker?i.getLatLng():i.getBounds())}),t},_propagateEvent:function(t){t.layer=t.target,t.target=this,this.fire(t.type,t)}}),e.featureGroup=function(t){return new e.FeatureGroup(t)},e.Path=e.Class.extend({includes:[e.Mixin.Events],statics:{CLIP_PADDING:e.Browser.mobile?Math.max(0,Math.min(.5,(1280/Math.max(t.innerWidth,t.innerHeight)-1)/2)):.5},options:{stroke:!0,color:"#0033ff",dashArray:null,weight:5,opacity:.5,fill:!1,fillColor:null,fillOpacity:.2,clickable:!0},initialize:function(t){e.setOptions(this,t)},onAdd:function(t){this._map=t,this._container||(this._initElements(),this._initEvents()),this.projectLatlngs(),this._updatePath(),this._container&&this._map._pathRoot.appendChild(this._container),this.fire("add"),t.on({viewreset:this.projectLatlngs,moveend:this._updatePath},this)},addTo:function(t){return t.addLayer(this),this},onRemove:function(t){t._pathRoot.removeChild(this._container),this.fire("remove"),this._map=null,e.Browser.vml&&(this._container=null,this._stroke=null,this._fill=null),t.off({viewreset:this.projectLatlngs,moveend:this._updatePath},this)},projectLatlngs:function(){},setStyle:function(t){return e.setOptions(this,t),this._container&&this._updateStyle(),this},redraw:function(){return this._map&&(this.projectLatlngs(),this._updatePath()),this}}),e.Map.include({_updatePathViewport:function(){var t=e.Path.CLIP_PADDING,i=this.getSize(),s=e.DomUtil.getPosition(this._mapPane),o=s.multiplyBy(-1)._subtract(i.multiplyBy(t)._round()),n=o.add(i.multiplyBy(1+2*t)._round());this._pathViewport=new e.Bounds(o,n)}}),e.Path.SVG_NS="http://www.w3.org/2000/svg",e.Browser.svg=!(!i.createElementNS||!i.createElementNS(e.Path.SVG_NS,"svg").createSVGRect),e.Path=e.Path.extend({statics:{SVG:e.Browser.svg},bringToFront:function(){var t=this._map._pathRoot,i=this._container;return i&&t.lastChild!==i&&t.appendChild(i),this},bringToBack:function(){var t=this._map._pathRoot,i=this._container,s=t.firstChild;return i&&s!==i&&t.insertBefore(i,s),this},getPathString:function(){},_createElement:function(t){return i.createElementNS(e.Path.SVG_NS,t)},_initElements:function(){this._map._initPathRoot(),this._initPath(),this._initStyle()},_initPath:function(){this._container=this._createElement("g"),this._path=this._createElement("path"),this._container.appendChild(this._path)},_initStyle:function(){this.options.stroke&&(this._path.setAttribute("stroke-linejoin","round"),this._path.setAttribute("stroke-linecap","round")),this.options.fill&&this._path.setAttribute("fill-rule","evenodd"),this._updateStyle()},_updateStyle:function(){this.options.stroke?(this._path.setAttribute("stroke",this.options.color),this._path.setAttribute("stroke-opacity",this.options.opacity),this._path.setAttribute("stroke-width",this.options.weight),this.options.dashArray?this._path.setAttribute("stroke-dasharray",this.options.dashArray):this._path.removeAttribute("stroke-dasharray")):this._path.setAttribute("stroke","none"),this.options.fill?(this._path.setAttribute("fill",this.options.fillColor||this.options.color),this._path.setAttribute("fill-opacity",this.options.fillOpacity)):this._path.setAttribute("fill","none")},_updatePath:function(){var t=this.getPathString();t||(t="M0 0"),this._path.setAttribute("d",t)},_initEvents:function(){if(this.options.clickable){(e.Browser.svg||!e.Browser.vml)&&this._path.setAttribute("class","leaflet-clickable"),e.DomEvent.on(this._container,"click",this._onMouseClick,this);for(var t=["dblclick","mousedown","mouseover","mouseout","mousemove","contextmenu"],i=0;t.length>i;i++)e.DomEvent.on(this._container,t[i],this._fireMouseEvent,this)}},_onMouseClick:function(t){this._map.dragging&&this._map.dragging.moved()||this._fireMouseEvent(t)},_fireMouseEvent:function(t){if(this.hasEventListeners(t.type)){var i=this._map,s=i.mouseEventToContainerPoint(t),o=i.containerPointToLayerPoint(s),n=i.layerPointToLatLng(o);this.fire(t.type,{latlng:n,layerPoint:o,containerPoint:s,originalEvent:t}),"contextmenu"===t.type&&e.DomEvent.preventDefault(t),"mousemove"!==t.type&&e.DomEvent.stopPropagation(t)}}}),e.Map.include({_initPathRoot:function(){this._pathRoot||(this._pathRoot=e.Path.prototype._createElement("svg"),this._panes.overlayPane.appendChild(this._pathRoot),this.options.zoomAnimation&&e.Browser.any3d?(this._pathRoot.setAttribute("class"," leaflet-zoom-animated"),this.on({zoomanim:this._animatePathZoom,zoomend:this._endPathZoom})):this._pathRoot.setAttribute("class"," leaflet-zoom-hide"),this.on("moveend",this._updateSvgViewport),this._updateSvgViewport())},_animatePathZoom:function(t){var i=this.getZoomScale(t.zoom),s=this._getCenterOffset(t.center)._multiplyBy(-i)._add(this._pathViewport.min);this._pathRoot.style[e.DomUtil.TRANSFORM]=e.DomUtil.getTranslateString(s)+" scale("+i+") ",this._pathZooming=!0},_endPathZoom:function(){this._pathZooming=!1},_updateSvgViewport:function(){if(!this._pathZooming){this._updatePathViewport();var t=this._pathViewport,i=t.min,s=t.max,o=s.x-i.x,n=s.y-i.y,a=this._pathRoot,r=this._panes.overlayPane;e.Browser.mobileWebkit&&r.removeChild(a),e.DomUtil.setPosition(a,i),a.setAttribute("width",o),a.setAttribute("height",n),a.setAttribute("viewBox",[i.x,i.y,o,n].join(" ")),e.Browser.mobileWebkit&&r.appendChild(a)}}}),e.Path.include({bindPopup:function(t,i){return(!this._popup||i)&&(this._popup=new e.Popup(i,this)),this._popup.setContent(t),this._popupHandlersAdded||(this.on("click",this._openPopup,this).on("remove",this.closePopup,this),this._popupHandlersAdded=!0),this},unbindPopup:function(){return this._popup&&(this._popup=null,this.off("click",this._openPopup).off("remove",this.closePopup),this._popupHandlersAdded=!1),this},openPopup:function(t){return this._popup&&(t=t||this._latlng||this._latlngs[Math.floor(this._latlngs.length/2)],this._openPopup({latlng:t})),this},closePopup:function(){return this._popup&&this._popup._close(),this},_openPopup:function(t){this._popup.setLatLng(t.latlng),this._map.openPopup(this._popup)}}),e.Browser.vml=!e.Browser.svg&&function(){try{var t=i.createElement("div");t.innerHTML='';var s=t.firstChild;return s.style.behavior="url(#default#VML)",s&&"object"==typeof s.adj}catch(e){return!1}}(),e.Path=e.Browser.svg||!e.Browser.vml?e.Path:e.Path.extend({statics:{VML:!0,CLIP_PADDING:.02},_createElement:function(){try{return i.namespaces.add("lvml","urn:schemas-microsoft-com:vml"),function(t){return i.createElement("')}}catch(t){return function(t){return i.createElement("<"+t+' xmlns="urn:schemas-microsoft.com:vml" class="lvml">')}}}(),_initPath:function(){var t=this._container=this._createElement("shape");e.DomUtil.addClass(t,"leaflet-vml-shape"),this.options.clickable&&e.DomUtil.addClass(t,"leaflet-clickable"),t.coordsize="1 1",this._path=this._createElement("path"),t.appendChild(this._path),this._map._pathRoot.appendChild(t)},_initStyle:function(){this._updateStyle()},_updateStyle:function(){var t=this._stroke,i=this._fill,s=this.options,e=this._container;e.stroked=s.stroke,e.filled=s.fill,s.stroke?(t||(t=this._stroke=this._createElement("stroke"),t.endcap="round",e.appendChild(t)),t.weight=s.weight+"px",t.color=s.color,t.opacity=s.opacity,t.dashStyle=s.dashArray?s.dashArray instanceof Array?s.dashArray.join(" "):s.dashArray.replace(/ *, */g," "):""):t&&(e.removeChild(t),this._stroke=null),s.fill?(i||(i=this._fill=this._createElement("fill"),e.appendChild(i)),i.color=s.fillColor||s.color,i.opacity=s.fillOpacity):i&&(e.removeChild(i),this._fill=null)},_updatePath:function(){var t=this._container.style;t.display="none",this._path.v=this.getPathString()+" ",t.display=""}}),e.Map.include(e.Browser.svg||!e.Browser.vml?{}:{_initPathRoot:function(){if(!this._pathRoot){var t=this._pathRoot=i.createElement("div");t.className="leaflet-vml-container",this._panes.overlayPane.appendChild(t),this.on("moveend",this._updatePathViewport),this._updatePathViewport()}}}),e.Browser.canvas=function(){return!!i.createElement("canvas").getContext}(),e.Path=e.Path.SVG&&!t.L_PREFER_CANVAS||!e.Browser.canvas?e.Path:e.Path.extend({statics:{CANVAS:!0,SVG:!1},redraw:function(){return this._map&&(this.projectLatlngs(),this._requestUpdate()),this},setStyle:function(t){return e.setOptions(this,t),this._map&&(this._updateStyle(),this._requestUpdate()),this},onRemove:function(t){t.off("viewreset",this.projectLatlngs,this).off("moveend",this._updatePath,this),this.options.clickable&&this._map.off("click",this._onClick,this),this._requestUpdate(),this._map=null},_requestUpdate:function(){this._map&&!e.Path._updateRequest&&(e.Path._updateRequest=e.Util.requestAnimFrame(this._fireMapMoveEnd,this._map))},_fireMapMoveEnd:function(){e.Path._updateRequest=null,this.fire("moveend")},_initElements:function(){this._map._initPathRoot(),this._ctx=this._map._canvasCtx},_updateStyle:function(){var t=this.options;t.stroke&&(this._ctx.lineWidth=t.weight,this._ctx.strokeStyle=t.color),t.fill&&(this._ctx.fillStyle=t.fillColor||t.color)},_drawPath:function(){var t,i,s,o,n,a;for(this._ctx.beginPath(),t=0,s=this._parts.length;s>t;t++){for(i=0,o=this._parts[t].length;o>i;i++)n=this._parts[t][i],a=(0===i?"move":"line")+"To",this._ctx[a](n.x,n.y);this instanceof e.Polygon&&this._ctx.closePath()}},_checkIfEmpty:function(){return!this._parts.length},_updatePath:function(){if(!this._checkIfEmpty()){var t=this._ctx,i=this.options;this._drawPath(),t.save(),this._updateStyle(),i.fill&&(t.globalAlpha=i.fillOpacity,t.fill()),i.stroke&&(t.globalAlpha=i.opacity,t.stroke()),t.restore() +}},_initEvents:function(){this.options.clickable&&this._map.on("click",this._onClick,this)},_onClick:function(t){this._containsPoint(t.layerPoint)&&this.fire("click",{latlng:t.latlng,layerPoint:t.layerPoint,containerPoint:t.containerPoint,originalEvent:t})}}),e.Map.include(e.Path.SVG&&!t.L_PREFER_CANVAS||!e.Browser.canvas?{}:{_initPathRoot:function(){var t,s=this._pathRoot;s||(s=this._pathRoot=i.createElement("canvas"),s.style.position="absolute",t=this._canvasCtx=s.getContext("2d"),t.lineCap="round",t.lineJoin="round",this._panes.overlayPane.appendChild(s),this.options.zoomAnimation&&(this._pathRoot.className="leaflet-zoom-animated",this.on("zoomanim",this._animatePathZoom),this.on("zoomend",this._endPathZoom)),this.on("moveend",this._updateCanvasViewport),this._updateCanvasViewport())},_updateCanvasViewport:function(){if(!this._pathZooming){this._updatePathViewport();var t=this._pathViewport,i=t.min,s=t.max.subtract(i),o=this._pathRoot;e.DomUtil.setPosition(o,i),o.width=s.x,o.height=s.y,o.getContext("2d").translate(-i.x,-i.y)}}}),e.LineUtil={simplify:function(t,i){if(!i||!t.length)return t.slice();var s=i*i;return t=this._reducePoints(t,s),t=this._simplifyDP(t,s)},pointToSegmentDistance:function(t,i,s){return Math.sqrt(this._sqClosestPointOnSegment(t,i,s,!0))},closestPointOnSegment:function(t,i,s){return this._sqClosestPointOnSegment(t,i,s)},_simplifyDP:function(t,i){var e=t.length,o=typeof Uint8Array!=s+""?Uint8Array:Array,n=new o(e);n[0]=n[e-1]=1,this._simplifyDPStep(t,n,i,0,e-1);var a,r=[];for(a=0;e>a;a++)n[a]&&r.push(t[a]);return r},_simplifyDPStep:function(t,i,s,e,o){var n,a,r,h=0;for(a=e+1;o-1>=a;a++)r=this._sqClosestPointOnSegment(t[a],t[e],t[o],!0),r>h&&(n=a,h=r);h>s&&(i[n]=1,this._simplifyDPStep(t,i,s,e,n),this._simplifyDPStep(t,i,s,n,o))},_reducePoints:function(t,i){for(var s=[t[0]],e=1,o=0,n=t.length;n>e;e++)this._sqDist(t[e],t[o])>i&&(s.push(t[e]),o=e);return n-1>o&&s.push(t[n-1]),s},clipSegment:function(t,i,s,e){var o,n,a,r=e?this._lastCode:this._getBitCode(t,s),h=this._getBitCode(i,s);for(this._lastCode=h;;){if(!(r|h))return[t,i];if(r&h)return!1;o=r||h,n=this._getEdgeIntersection(t,i,o,s),a=this._getBitCode(n,s),o===r?(t=n,r=a):(i=n,h=a)}},_getEdgeIntersection:function(t,i,o,n){var a=i.x-t.x,r=i.y-t.y,h=n.min,l=n.max;return 8&o?new e.Point(t.x+a*(l.y-t.y)/r,l.y):4&o?new e.Point(t.x+a*(h.y-t.y)/r,h.y):2&o?new e.Point(l.x,t.y+r*(l.x-t.x)/a):1&o?new e.Point(h.x,t.y+r*(h.x-t.x)/a):s},_getBitCode:function(t,i){var s=0;return t.xi.max.x&&(s|=2),t.yi.max.y&&(s|=8),s},_sqDist:function(t,i){var s=i.x-t.x,e=i.y-t.y;return s*s+e*e},_sqClosestPointOnSegment:function(t,i,s,o){var n,a=i.x,r=i.y,h=s.x-a,l=s.y-r,c=h*h+l*l;return c>0&&(n=((t.x-a)*h+(t.y-r)*l)/c,n>1?(a=s.x,r=s.y):n>0&&(a+=h*n,r+=l*n)),h=t.x-a,l=t.y-r,o?h*h+l*l:new e.Point(a,r)}},e.Polyline=e.Path.extend({initialize:function(t,i){e.Path.prototype.initialize.call(this,i),this._latlngs=this._convertLatLngs(t)},options:{smoothFactor:1,noClip:!1},projectLatlngs:function(){this._originalPoints=[];for(var t=0,i=this._latlngs.length;i>t;t++)this._originalPoints[t]=this._map.latLngToLayerPoint(this._latlngs[t])},getPathString:function(){for(var t=0,i=this._parts.length,s="";i>t;t++)s+=this._getPathPartStr(this._parts[t]);return s},getLatLngs:function(){return this._latlngs},setLatLngs:function(t){return this._latlngs=this._convertLatLngs(t),this.redraw()},addLatLng:function(t){return this._latlngs.push(e.latLng(t)),this.redraw()},spliceLatLngs:function(){var t=[].splice.apply(this._latlngs,arguments);return this._convertLatLngs(this._latlngs),this.redraw(),t},closestLayerPoint:function(t){for(var i,s,o=1/0,n=this._parts,a=null,r=0,h=n.length;h>r;r++)for(var l=n[r],c=1,m=l.length;m>c;c++){i=l[c-1],s=l[c];var u=e.LineUtil._sqClosestPointOnSegment(t,i,s,!0);o>u&&(o=u,a=e.LineUtil._sqClosestPointOnSegment(t,i,s))}return a&&(a.distance=Math.sqrt(o)),a},getBounds:function(){var t,i,s=new e.LatLngBounds,o=this.getLatLngs();for(t=0,i=o.length;i>t;t++)s.extend(o[t]);return s},_convertLatLngs:function(t){var i,s;for(i=0,s=t.length;s>i;i++){if(e.Util.isArray(t[i])&&"number"!=typeof t[i][0])return;t[i]=e.latLng(t[i])}return t},_initEvents:function(){e.Path.prototype._initEvents.call(this)},_getPathPartStr:function(t){for(var i,s=e.Path.VML,o=0,n=t.length,a="";n>o;o++)i=t[o],s&&i._round(),a+=(o?"L":"M")+i.x+" "+i.y;return a},_clipPoints:function(){var t,i,o,n=this._originalPoints,a=n.length;if(this.options.noClip)return this._parts=[n],s;this._parts=[];var r=this._parts,h=this._map._pathViewport,l=e.LineUtil;for(t=0,i=0;a-1>t;t++)o=l.clipSegment(n[t],n[t+1],h,t),o&&(r[i]=r[i]||[],r[i].push(o[0]),(o[1]!==n[t+1]||t===a-2)&&(r[i].push(o[1]),i++))},_simplifyPoints:function(){for(var t=this._parts,i=e.LineUtil,s=0,o=t.length;o>s;s++)t[s]=i.simplify(t[s],this.options.smoothFactor)},_updatePath:function(){this._map&&(this._clipPoints(),this._simplifyPoints(),e.Path.prototype._updatePath.call(this))}}),e.polyline=function(t,i){return new e.Polyline(t,i)},e.PolyUtil={},e.PolyUtil.clipPolygon=function(t,i){var s,o,n,a,r,h,l,c,m,u=[1,4,2,8],d=e.LineUtil;for(o=0,l=t.length;l>o;o++)t[o]._code=d._getBitCode(t[o],i);for(a=0;4>a;a++){for(c=u[a],s=[],o=0,l=t.length,n=l-1;l>o;n=o++)r=t[o],h=t[n],r._code&c?h._code&c||(m=d._getEdgeIntersection(h,r,c,i),m._code=d._getBitCode(m,i),s.push(m)):(h._code&c&&(m=d._getEdgeIntersection(h,r,c,i),m._code=d._getBitCode(m,i),s.push(m)),s.push(r));t=s}return t},e.Polygon=e.Polyline.extend({options:{fill:!0},initialize:function(t,i){e.Polyline.prototype.initialize.call(this,t,i),t&&e.Util.isArray(t[0])&&"number"!=typeof t[0][0]&&(this._latlngs=this._convertLatLngs(t[0]),this._holes=t.slice(1))},projectLatlngs:function(){if(e.Polyline.prototype.projectLatlngs.call(this),this._holePoints=[],this._holes){var t,i,s,o;for(t=0,s=this._holes.length;s>t;t++)for(this._holePoints[t]=[],i=0,o=this._holes[t].length;o>i;i++)this._holePoints[t][i]=this._map.latLngToLayerPoint(this._holes[t][i])}},_clipPoints:function(){var t=this._originalPoints,i=[];if(this._parts=[t].concat(this._holePoints),!this.options.noClip){for(var s=0,o=this._parts.length;o>s;s++){var n=e.PolyUtil.clipPolygon(this._parts[s],this._map._pathViewport);n.length&&i.push(n)}this._parts=i}},_getPathPartStr:function(t){var i=e.Polyline.prototype._getPathPartStr.call(this,t);return i+(e.Browser.svg?"z":"x")}}),e.polygon=function(t,i){return new e.Polygon(t,i)},function(){function t(t){return e.FeatureGroup.extend({initialize:function(t,i){this._layers={},this._options=i,this.setLatLngs(t)},setLatLngs:function(i){var s=0,e=i.length;for(this.eachLayer(function(t){e>s?t.setLatLngs(i[s++]):this.removeLayer(t)},this);e>s;)this.addLayer(new t(i[s++],this._options));return this}})}e.MultiPolyline=t(e.Polyline),e.MultiPolygon=t(e.Polygon),e.multiPolyline=function(t,i){return new e.MultiPolyline(t,i)},e.multiPolygon=function(t,i){return new e.MultiPolygon(t,i)}}(),e.Rectangle=e.Polygon.extend({initialize:function(t,i){e.Polygon.prototype.initialize.call(this,this._boundsToLatLngs(t),i)},setBounds:function(t){this.setLatLngs(this._boundsToLatLngs(t))},_boundsToLatLngs:function(t){return t=e.latLngBounds(t),[t.getSouthWest(),t.getNorthWest(),t.getNorthEast(),t.getSouthEast()]}}),e.rectangle=function(t,i){return new e.Rectangle(t,i)},e.Circle=e.Path.extend({initialize:function(t,i,s){e.Path.prototype.initialize.call(this,s),this._latlng=e.latLng(t),this._mRadius=i},options:{fill:!0},setLatLng:function(t){return this._latlng=e.latLng(t),this.redraw()},setRadius:function(t){return this._mRadius=t,this.redraw()},projectLatlngs:function(){var t=this._getLngRadius(),i=new e.LatLng(this._latlng.lat,this._latlng.lng-t),s=this._map.latLngToLayerPoint(i);this._point=this._map.latLngToLayerPoint(this._latlng),this._radius=Math.max(Math.round(this._point.x-s.x),1)},getBounds:function(){var t=this._getLngRadius(),i=360*(this._mRadius/40075017),s=this._latlng,o=new e.LatLng(s.lat-i,s.lng-t),n=new e.LatLng(s.lat+i,s.lng+t);return new e.LatLngBounds(o,n)},getLatLng:function(){return this._latlng},getPathString:function(){var t=this._point,i=this._radius;return this._checkIfEmpty()?"":e.Browser.svg?"M"+t.x+","+(t.y-i)+"A"+i+","+i+",0,1,1,"+(t.x-.1)+","+(t.y-i)+" z":(t._round(),i=Math.round(i),"AL "+t.x+","+t.y+" "+i+","+i+" 0,"+23592600)},getRadius:function(){return this._mRadius},_getLatRadius:function(){return 360*(this._mRadius/40075017)},_getLngRadius:function(){return this._getLatRadius()/Math.cos(e.LatLng.DEG_TO_RAD*this._latlng.lat)},_checkIfEmpty:function(){if(!this._map)return!1;var t=this._map._pathViewport,i=this._radius,s=this._point;return s.x-i>t.max.x||s.y-i>t.max.y||s.x+is;s++)for(l=this._parts[s],o=0,r=l.length,n=r-1;r>o;n=o++)if((i||0!==o)&&(h=e.LineUtil.pointToSegmentDistance(t,l[n],l[o]),c>=h))return!0;return!1}}:{}),e.Polygon.include(e.Path.CANVAS?{_containsPoint:function(t){var i,s,o,n,a,r,h,l,c=!1;if(e.Polyline.prototype._containsPoint.call(this,t,!0))return!0;for(n=0,h=this._parts.length;h>n;n++)for(i=this._parts[n],a=0,l=i.length,r=l-1;l>a;r=a++)s=i[a],o=i[r],s.y>t.y!=o.y>t.y&&t.x<(o.x-s.x)*(t.y-s.y)/(o.y-s.y)+s.x&&(c=!c);return c}}:{}),e.Circle.include(e.Path.CANVAS?{_drawPath:function(){var t=this._point;this._ctx.beginPath(),this._ctx.arc(t.x,t.y,this._radius,0,2*Math.PI,!1)},_containsPoint:function(t){var i=this._point,s=this.options.stroke?this.options.weight/2:0;return t.distanceTo(i)<=this._radius+s}}:{}),e.GeoJSON=e.FeatureGroup.extend({initialize:function(t,i){e.setOptions(this,i),this._layers={},t&&this.addData(t)},addData:function(t){var i,s,o=e.Util.isArray(t)?t:t.features;if(o){for(i=0,s=o.length;s>i;i++)(o[i].geometries||o[i].geometry||o[i].features)&&this.addData(o[i]);return this}var n=this.options;if(!n.filter||n.filter(t)){var a=e.GeoJSON.geometryToLayer(t,n.pointToLayer);return a.feature=t,a.defaultOptions=a.options,this.resetStyle(a),n.onEachFeature&&n.onEachFeature(t,a),this.addLayer(a)}},resetStyle:function(t){var i=this.options.style;i&&(e.Util.extend(t.options,t.defaultOptions),this._setLayerStyle(t,i))},setStyle:function(t){this.eachLayer(function(i){this._setLayerStyle(i,t)},this)},_setLayerStyle:function(t,i){"function"==typeof i&&(i=i(t.feature)),t.setStyle&&t.setStyle(i)}}),e.extend(e.GeoJSON,{geometryToLayer:function(t,i){var s,o,n,a,r,h="Feature"===t.type?t.geometry:t,l=h.coordinates,c=[];switch(h.type){case"Point":return s=this.coordsToLatLng(l),i?i(t,s):new e.Marker(s);case"MultiPoint":for(n=0,a=l.length;a>n;n++)s=this.coordsToLatLng(l[n]),r=i?i(t,s):new e.Marker(s),c.push(r);return new e.FeatureGroup(c);case"LineString":return o=this.coordsToLatLngs(l),new e.Polyline(o);case"Polygon":return o=this.coordsToLatLngs(l,1),new e.Polygon(o);case"MultiLineString":return o=this.coordsToLatLngs(l,1),new e.MultiPolyline(o);case"MultiPolygon":return o=this.coordsToLatLngs(l,2),new e.MultiPolygon(o);case"GeometryCollection":for(n=0,a=h.geometries.length;a>n;n++)r=this.geometryToLayer({geometry:h.geometries[n],type:"Feature",properties:t.properties},i),c.push(r);return new e.FeatureGroup(c);default:throw Error("Invalid GeoJSON object.")}},coordsToLatLng:function(t,i){var s=parseFloat(t[i?0:1]),o=parseFloat(t[i?1:0]);return new e.LatLng(s,o)},coordsToLatLngs:function(t,i,s){var e,o,n,a=[];for(o=0,n=t.length;n>o;o++)e=i?this.coordsToLatLngs(t[o],i-1,s):this.coordsToLatLng(t[o],s),a.push(e);return a}}),e.geoJson=function(t,i){return new e.GeoJSON(t,i)},e.DomEvent={addListener:function(t,i,o,n){var a,r,h,l=e.stamp(o),c="_leaflet_"+i+l;return t[c]?this:(a=function(i){return o.call(n||t,i||e.DomEvent._getEvent())},e.Browser.msTouch&&0===i.indexOf("touch")?this.addMsTouchListener(t,i,a,l):(e.Browser.touch&&"dblclick"===i&&this.addDoubleTapListener&&this.addDoubleTapListener(t,a,l),"addEventListener"in t?"mousewheel"===i?(t.addEventListener("DOMMouseScroll",a,!1),t.addEventListener(i,a,!1)):"mouseenter"===i||"mouseleave"===i?(r=a,h="mouseenter"===i?"mouseover":"mouseout",a=function(i){return e.DomEvent._checkMouse(t,i)?r(i):s},t.addEventListener(h,a,!1)):t.addEventListener(i,a,!1):"attachEvent"in t&&t.attachEvent("on"+i,a),t[c]=a,this))},removeListener:function(t,i,s){var o=e.stamp(s),n="_leaflet_"+i+o,a=t[n];if(a)return e.Browser.msTouch&&0===i.indexOf("touch")?this.removeMsTouchListener(t,i,o):e.Browser.touch&&"dblclick"===i&&this.removeDoubleTapListener?this.removeDoubleTapListener(t,o):"removeEventListener"in t?"mousewheel"===i?(t.removeEventListener("DOMMouseScroll",a,!1),t.removeEventListener(i,a,!1)):"mouseenter"===i||"mouseleave"===i?t.removeEventListener("mouseenter"===i?"mouseover":"mouseout",a,!1):t.removeEventListener(i,a,!1):"detachEvent"in t&&t.detachEvent("on"+i,a),t[n]=null,this},stopPropagation:function(t){return t.stopPropagation?t.stopPropagation():t.cancelBubble=!0,this},disableClickPropagation:function(t){for(var i=e.DomEvent.stopPropagation,s=e.Draggable.START.length-1;s>=0;s--)e.DomEvent.addListener(t,e.Draggable.START[s],i);return e.DomEvent.addListener(t,"click",i).addListener(t,"dblclick",i)},preventDefault:function(t){return t.preventDefault?t.preventDefault():t.returnValue=!1,this},stop:function(t){return e.DomEvent.preventDefault(t).stopPropagation(t)},getMousePosition:function(t,s){var o=i.body,n=i.documentElement,a=t.pageX?t.pageX:t.clientX+o.scrollLeft+n.scrollLeft,r=t.pageY?t.pageY:t.clientY+o.scrollTop+n.scrollTop,h=new e.Point(a,r);return s?h._subtract(e.DomUtil.getViewportOffset(s)):h},getWheelDelta:function(t){var i=0;return t.wheelDelta&&(i=t.wheelDelta/120),t.detail&&(i=-t.detail/3),i},_checkMouse:function(t,i){var s=i.relatedTarget;if(!s)return!0;try{for(;s&&s!==t;)s=s.parentNode}catch(e){return!1}return s!==t},_getEvent:function(){var i=t.event;if(!i)for(var s=arguments.callee.caller;s&&(i=s.arguments[0],!i||t.Event!==i.constructor);)s=s.caller;return i}},e.DomEvent.on=e.DomEvent.addListener,e.DomEvent.off=e.DomEvent.removeListener,e.Draggable=e.Class.extend({includes:e.Mixin.Events,statics:{START:e.Browser.touch?["touchstart","mousedown"]:["mousedown"],END:{mousedown:"mouseup",touchstart:"touchend",MSPointerDown:"touchend"},MOVE:{mousedown:"mousemove",touchstart:"touchmove",MSPointerDown:"touchmove"},TAP_TOLERANCE:15},initialize:function(t,i,s){this._element=t,this._dragStartTarget=i||t,this._longPress=s&&!e.Browser.msTouch},enable:function(){if(!this._enabled){for(var t=e.Draggable.START.length-1;t>=0;t--)e.DomEvent.on(this._dragStartTarget,e.Draggable.START[t],this._onDown,this);this._enabled=!0}},disable:function(){if(this._enabled){for(var t=e.Draggable.START.length-1;t>=0;t--)e.DomEvent.off(this._dragStartTarget,e.Draggable.START[t],this._onDown,this);this._enabled=!1,this._moved=!1}},_onDown:function(t){if(!(!e.Browser.touch&&t.shiftKey||1!==t.which&&1!==t.button&&!t.touches||(e.DomEvent.preventDefault(t),e.DomEvent.stopPropagation(t),e.Draggable._disabled))){if(this._simulateClick=!0,t.touches&&t.touches.length>1)return this._simulateClick=!1,clearTimeout(this._longPressTimeout),s;var o=t.touches&&1===t.touches.length?t.touches[0]:t,n=o.target;e.Browser.touch&&"a"===n.tagName.toLowerCase()&&e.DomUtil.addClass(n,"leaflet-active"),this._moved=!1,this._moving||(this._startPoint=new e.Point(o.clientX,o.clientY),this._startPos=this._newPos=e.DomUtil.getPosition(this._element),t.touches&&1===t.touches.length&&e.Browser.touch&&this._longPress&&(this._longPressTimeout=setTimeout(e.bind(function(){var t=this._newPos&&this._newPos.distanceTo(this._startPos)||0;e.Draggable.TAP_TOLERANCE>t&&(this._simulateClick=!1,this._onUp(),this._simulateEvent("contextmenu",o))},this),1e3)),e.DomEvent.on(i,e.Draggable.MOVE[t.type],this._onMove,this),e.DomEvent.on(i,e.Draggable.END[t.type],this._onUp,this))}},_onMove:function(t){if(!(t.touches&&t.touches.length>1)){var i=t.touches&&1===t.touches.length?t.touches[0]:t,s=new e.Point(i.clientX,i.clientY),o=s.subtract(this._startPoint);(o.x||o.y)&&(e.DomEvent.preventDefault(t),this._moved||(this.fire("dragstart"),this._moved=!0,this._startPos=e.DomUtil.getPosition(this._element).subtract(o),e.Browser.touch||(e.DomUtil.disableTextSelection(),this._setMovingCursor())),this._newPos=this._startPos.add(o),this._moving=!0,e.Util.cancelAnimFrame(this._animRequest),this._animRequest=e.Util.requestAnimFrame(this._updatePosition,this,!0,this._dragStartTarget))}},_updatePosition:function(){this.fire("predrag"),e.DomUtil.setPosition(this._element,this._newPos),this.fire("drag")},_onUp:function(t){var s;if(clearTimeout(this._longPressTimeout),this._simulateClick&&t.changedTouches){var o=t.changedTouches[0],n=o.target,a=this._newPos&&this._newPos.distanceTo(this._startPos)||0;"a"===n.tagName.toLowerCase()&&e.DomUtil.removeClass(n,"leaflet-active"),e.Draggable.TAP_TOLERANCE>a&&(s=o)}e.Browser.touch||(e.DomUtil.enableTextSelection(),this._restoreCursor());for(var r in e.Draggable.MOVE)e.Draggable.MOVE.hasOwnProperty(r)&&(e.DomEvent.off(i,e.Draggable.MOVE[r],this._onMove),e.DomEvent.off(i,e.Draggable.END[r],this._onUp));this._moved&&(e.Util.cancelAnimFrame(this._animRequest),this.fire("dragend")),this._moving=!1,s&&(this._moved=!1,this._simulateEvent("click",s))},_setMovingCursor:function(){e.DomUtil.addClass(i.body,"leaflet-dragging")},_restoreCursor:function(){e.DomUtil.removeClass(i.body,"leaflet-dragging")},_simulateEvent:function(s,e){var o=i.createEvent("MouseEvents");o.initMouseEvent(s,!0,!0,t,1,e.screenX,e.screenY,e.clientX,e.clientY,!1,!1,!1,!1,0,null),e.target.dispatchEvent(o)}}),e.Handler=e.Class.extend({initialize:function(t){this._map=t},enable:function(){this._enabled||(this._enabled=!0,this.addHooks())},disable:function(){this._enabled&&(this._enabled=!1,this.removeHooks())},enabled:function(){return!!this._enabled}}),e.Map.mergeOptions({dragging:!0,inertia:!e.Browser.android23,inertiaDeceleration:3400,inertiaMaxSpeed:1/0,inertiaThreshold:e.Browser.touch?32:18,easeLinearity:.25,longPress:!0,worldCopyJump:!1}),e.Map.Drag=e.Handler.extend({addHooks:function(){if(!this._draggable){var t=this._map;this._draggable=new e.Draggable(t._mapPane,t._container,t.options.longPress),this._draggable.on({dragstart:this._onDragStart,drag:this._onDrag,dragend:this._onDragEnd},this),t.options.worldCopyJump&&(this._draggable.on("predrag",this._onPreDrag,this),t.on("viewreset",this._onViewReset,this))}this._draggable.enable()},removeHooks:function(){this._draggable.disable()},moved:function(){return this._draggable&&this._draggable._moved},_onDragStart:function(){var t=this._map;t._panAnim&&t._panAnim.stop(),t.fire("movestart").fire("dragstart"),t.options.inertia&&(this._positions=[],this._times=[])},_onDrag:function(){if(this._map.options.inertia){var t=this._lastTime=+new Date,i=this._lastPos=this._draggable._newPos;this._positions.push(i),this._times.push(t),t-this._times[0]>200&&(this._positions.shift(),this._times.shift())}this._map.fire("move").fire("drag")},_onViewReset:function(){var t=this._map.getSize()._divideBy(2),i=this._map.latLngToLayerPoint(new e.LatLng(0,0));this._initialWorldOffset=i.subtract(t).x,this._worldWidth=this._map.project(new e.LatLng(0,180)).x},_onPreDrag:function(){var t=this._worldWidth,i=Math.round(t/2),s=this._initialWorldOffset,e=this._draggable._newPos.x,o=(e-i+s)%t+i-s,n=(e+i+s)%t-i-s,a=Math.abs(o+s)i.inertiaThreshold||!this._positions[0];if(o)t.fire("moveend");else{var n=this._lastPos.subtract(this._positions[0]),a=(this._lastTime+s-this._times[0])/1e3,r=i.easeLinearity,h=n.multiplyBy(r/a),l=h.distanceTo(new e.Point(0,0)),c=Math.min(i.inertiaMaxSpeed,l),m=h.multiplyBy(c/l),u=c/(i.inertiaDeceleration*r),d=m.multiplyBy(-u/2).round();e.Util.requestAnimFrame(function(){t.panBy(d,u,r)})}t.fire("dragend"),i.maxBounds&&e.Util.requestAnimFrame(this._panInsideMaxBounds,t,!0,t._container)},_panInsideMaxBounds:function(){this.panInsideBounds(this.options.maxBounds)}}),e.Map.addInitHook("addHandler","dragging",e.Map.Drag),e.Map.mergeOptions({doubleClickZoom:!0}),e.Map.DoubleClickZoom=e.Handler.extend({addHooks:function(){this._map.on("dblclick",this._onDoubleClick)},removeHooks:function(){this._map.off("dblclick",this._onDoubleClick)},_onDoubleClick:function(t){this.setView(t.latlng,this._zoom+1)}}),e.Map.addInitHook("addHandler","doubleClickZoom",e.Map.DoubleClickZoom),e.Map.mergeOptions({scrollWheelZoom:!0}),e.Map.ScrollWheelZoom=e.Handler.extend({addHooks:function(){e.DomEvent.on(this._map._container,"mousewheel",this._onWheelScroll,this),this._delta=0},removeHooks:function(){e.DomEvent.off(this._map._container,"mousewheel",this._onWheelScroll)},_onWheelScroll:function(t){var i=e.DomEvent.getWheelDelta(t);this._delta+=i,this._lastMousePos=this._map.mouseEventToContainerPoint(t),this._startTime||(this._startTime=+new Date);var s=Math.max(40-(+new Date-this._startTime),0);clearTimeout(this._timer),this._timer=setTimeout(e.bind(this._performZoom,this),s),e.DomEvent.preventDefault(t),e.DomEvent.stopPropagation(t)},_performZoom:function(){var t=this._map,i=this._delta,s=t.getZoom();if(i=i>0?Math.ceil(i):Math.round(i),i=Math.max(Math.min(i,4),-4),i=t._limitZoom(s+i)-s,this._delta=0,this._startTime=null,i){var e=s+i,o=this._getCenterForScrollWheelZoom(e);t.setView(o,e)}},_getCenterForScrollWheelZoom:function(t){var i=this._map,s=i.getZoomScale(t),e=i.getSize()._divideBy(2),o=this._lastMousePos._subtract(e)._multiplyBy(1-1/s),n=i._getTopLeftPoint()._add(e)._add(o);return i.unproject(n)}}),e.Map.addInitHook("addHandler","scrollWheelZoom",e.Map.ScrollWheelZoom),e.extend(e.DomEvent,{_touchstart:e.Browser.msTouch?"MSPointerDown":"touchstart",_touchend:e.Browser.msTouch?"MSPointerUp":"touchend",addDoubleTapListener:function(t,s,o){function n(t){var i;if(e.Browser.msTouch?(p.push(t.pointerId),i=p.length):i=t.touches.length,!(i>1)){var s=Date.now(),o=s-(r||s);h=t.touches?t.touches[0]:t,l=o>0&&c>=o,r=s}}function a(t){if(e.Browser.msTouch){var i=p.indexOf(t.pointerId);if(-1===i)return;p.splice(i,1)}if(l){if(e.Browser.msTouch){var o,n={};for(var a in h)o=h[a],n[a]="function"==typeof o?o.bind(h):o;h=n}h.type="dblclick",s(h),r=null}}var r,h,l=!1,c=250,m="_leaflet_",u=this._touchstart,d=this._touchend,p=[];t[m+u+o]=n,t[m+d+o]=a;var _=e.Browser.msTouch?i.documentElement:t;return t.addEventListener(u,n,!1),_.addEventListener(d,a,!1),e.Browser.msTouch&&_.addEventListener("MSPointerCancel",a,!1),this},removeDoubleTapListener:function(t,s){var o="_leaflet_";return t.removeEventListener(this._touchstart,t[o+this._touchstart+s],!1),(e.Browser.msTouch?i.documentElement:t).removeEventListener(this._touchend,t[o+this._touchend+s],!1),e.Browser.msTouch&&i.documentElement.removeEventListener("MSPointerCancel",t[o+this._touchend+s],!1),this}}),e.extend(e.DomEvent,{_msTouches:[],_msDocumentListener:!1,addMsTouchListener:function(t,i,s,e){switch(i){case"touchstart":return this.addMsTouchListenerStart(t,i,s,e);case"touchend":return this.addMsTouchListenerEnd(t,i,s,e);case"touchmove":return this.addMsTouchListenerMove(t,i,s,e);default:throw"Unknown touch event type"}},addMsTouchListenerStart:function(t,s,e,o){var n="_leaflet_",a=this._msTouches,r=function(t){for(var i=!1,s=0;a.length>s;s++)if(a[s].pointerId===t.pointerId){i=!0;break}i||a.push(t),t.touches=a.slice(),t.changedTouches=[t],e(t)};if(t[n+"touchstart"+o]=r,t.addEventListener("MSPointerDown",r,!1),!this._msDocumentListener){var h=function(t){for(var i=0;a.length>i;i++)if(a[i].pointerId===t.pointerId){a.splice(i,1);break}};i.documentElement.addEventListener("MSPointerUp",h,!1),i.documentElement.addEventListener("MSPointerCancel",h,!1),this._msDocumentListener=!0}return this},addMsTouchListenerMove:function(t,i,s,e){function o(t){if(t.pointerType!==t.MSPOINTER_TYPE_MOUSE||0!==t.buttons){for(var i=0;a.length>i;i++)if(a[i].pointerId===t.pointerId){a[i]=t;break}t.touches=a.slice(),t.changedTouches=[t],s(t)}}var n="_leaflet_",a=this._msTouches;return t[n+"touchmove"+e]=o,t.addEventListener("MSPointerMove",o,!1),this},addMsTouchListenerEnd:function(t,i,s,e){var o="_leaflet_",n=this._msTouches,a=function(t){for(var i=0;n.length>i;i++)if(n[i].pointerId===t.pointerId){n.splice(i,1);break}t.touches=n.slice(),t.changedTouches=[t],s(t)};return t[o+"touchend"+e]=a,t.addEventListener("MSPointerUp",a,!1),t.addEventListener("MSPointerCancel",a,!1),this},removeMsTouchListener:function(t,i,s){var e="_leaflet_",o=t[e+i+s];switch(i){case"touchstart":t.removeEventListener("MSPointerDown",o,!1);break;case"touchmove":t.removeEventListener("MSPointerMove",o,!1);break;case"touchend":t.removeEventListener("MSPointerUp",o,!1),t.removeEventListener("MSPointerCancel",o,!1)}return this}}),e.Map.mergeOptions({touchZoom:e.Browser.touch&&!e.Browser.android23}),e.Map.TouchZoom=e.Handler.extend({addHooks:function(){e.DomEvent.on(this._map._container,"touchstart",this._onTouchStart,this)},removeHooks:function(){e.DomEvent.off(this._map._container,"touchstart",this._onTouchStart,this)},_onTouchStart:function(t){var s=this._map;if(t.touches&&2===t.touches.length&&!s._animatingZoom&&!this._zooming){var o=s.mouseEventToLayerPoint(t.touches[0]),n=s.mouseEventToLayerPoint(t.touches[1]),a=s._getCenterLayerPoint();this._startCenter=o.add(n)._divideBy(2),this._startDist=o.distanceTo(n),this._moved=!1,this._zooming=!0,this._centerOffset=a.subtract(this._startCenter),s._panAnim&&s._panAnim.stop(),e.DomEvent.on(i,"touchmove",this._onTouchMove,this).on(i,"touchend",this._onTouchEnd,this),e.DomEvent.preventDefault(t)}},_onTouchMove:function(t){if(t.touches&&2===t.touches.length){var i=this._map,s=i.mouseEventToLayerPoint(t.touches[0]),o=i.mouseEventToLayerPoint(t.touches[1]);this._scale=s.distanceTo(o)/this._startDist,this._delta=s._add(o)._divideBy(2)._subtract(this._startCenter),1!==this._scale&&(this._moved||(e.DomUtil.addClass(i._mapPane,"leaflet-zoom-anim leaflet-touching"),i.fire("movestart").fire("zoomstart")._prepareTileBg(),this._moved=!0),e.Util.cancelAnimFrame(this._animRequest),this._animRequest=e.Util.requestAnimFrame(this._updateOnMove,this,!0,this._map._container),e.DomEvent.preventDefault(t))}},_updateOnMove:function(){var t=this._map,i=this._getScaleOrigin(),s=t.layerPointToLatLng(i);t.fire("zoomanim",{center:s,zoom:t.getScaleZoom(this._scale)}),t._tileBg.style[e.DomUtil.TRANSFORM]=e.DomUtil.getTranslateString(this._delta)+" "+e.DomUtil.getScaleString(this._scale,this._startCenter)},_onTouchEnd:function(){if(this._moved&&this._zooming){var t=this._map;this._zooming=!1,e.DomUtil.removeClass(t._mapPane,"leaflet-touching"),e.DomEvent.off(i,"touchmove",this._onTouchMove).off(i,"touchend",this._onTouchEnd);var s=this._getScaleOrigin(),o=t.layerPointToLatLng(s),n=t.getZoom(),a=t.getScaleZoom(this._scale)-n,r=a>0?Math.ceil(a):Math.floor(a),h=t._limitZoom(n+r);t.fire("zoomanim",{center:o,zoom:h}),t._runAnimation(o,h,t.getZoomScale(h)/this._scale,s,!0)}},_getScaleOrigin:function(){var t=this._centerOffset.subtract(this._delta).divideBy(this._scale);return this._startCenter.add(t)}}),e.Map.addInitHook("addHandler","touchZoom",e.Map.TouchZoom),e.Map.mergeOptions({boxZoom:!0}),e.Map.BoxZoom=e.Handler.extend({initialize:function(t){this._map=t,this._container=t._container,this._pane=t._panes.overlayPane},addHooks:function(){e.DomEvent.on(this._container,"mousedown",this._onMouseDown,this)},removeHooks:function(){e.DomEvent.off(this._container,"mousedown",this._onMouseDown)},_onMouseDown:function(t){return!t.shiftKey||1!==t.which&&1!==t.button?!1:(e.DomUtil.disableTextSelection(),this._startLayerPoint=this._map.mouseEventToLayerPoint(t),this._box=e.DomUtil.create("div","leaflet-zoom-box",this._pane),e.DomUtil.setPosition(this._box,this._startLayerPoint),this._container.style.cursor="crosshair",e.DomEvent.on(i,"mousemove",this._onMouseMove,this).on(i,"mouseup",this._onMouseUp,this).preventDefault(t),this._map.fire("boxzoomstart"),s)},_onMouseMove:function(t){var i=this._startLayerPoint,s=this._box,o=this._map.mouseEventToLayerPoint(t),n=o.subtract(i),a=new e.Point(Math.min(o.x,i.x),Math.min(o.y,i.y));e.DomUtil.setPosition(s,a),s.style.width=Math.max(0,Math.abs(n.x)-4)+"px",s.style.height=Math.max(0,Math.abs(n.y)-4)+"px"},_onMouseUp:function(t){this._pane.removeChild(this._box),this._container.style.cursor="",e.DomUtil.enableTextSelection(),e.DomEvent.off(i,"mousemove",this._onMouseMove).off(i,"mouseup",this._onMouseUp);var s=this._map,o=s.mouseEventToLayerPoint(t);if(!this._startLayerPoint.equals(o)){var n=new e.LatLngBounds(s.layerPointToLatLng(this._startLayerPoint),s.layerPointToLatLng(o));s.fitBounds(n),s.fire("boxzoomend",{boxZoomBounds:n})}}}),e.Map.addInitHook("addHandler","boxZoom",e.Map.BoxZoom),e.Map.mergeOptions({keyboard:!0,keyboardPanOffset:80,keyboardZoomOffset:1}),e.Map.Keyboard=e.Handler.extend({keyCodes:{left:[37],right:[39],down:[40],up:[38],zoomIn:[187,107,61],zoomOut:[189,109,173]},initialize:function(t){this._map=t,this._setPanOffset(t.options.keyboardPanOffset),this._setZoomOffset(t.options.keyboardZoomOffset)},addHooks:function(){var t=this._map._container;-1===t.tabIndex&&(t.tabIndex="0"),e.DomEvent.on(t,"focus",this._onFocus,this).on(t,"blur",this._onBlur,this).on(t,"mousedown",this._onMouseDown,this),this._map.on("focus",this._addHooks,this).on("blur",this._removeHooks,this)},removeHooks:function(){this._removeHooks();var t=this._map._container;e.DomEvent.off(t,"focus",this._onFocus,this).off(t,"blur",this._onBlur,this).off(t,"mousedown",this._onMouseDown,this),this._map.off("focus",this._addHooks,this).off("blur",this._removeHooks,this)},_onMouseDown:function(){this._focused||this._map._container.focus()},_onFocus:function(){this._focused=!0,this._map.fire("focus")},_onBlur:function(){this._focused=!1,this._map.fire("blur")},_setPanOffset:function(t){var i,s,e=this._panKeys={},o=this.keyCodes;for(i=0,s=o.left.length;s>i;i++)e[o.left[i]]=[-1*t,0];for(i=0,s=o.right.length;s>i;i++)e[o.right[i]]=[t,0];for(i=0,s=o.down.length;s>i;i++)e[o.down[i]]=[0,t];for(i=0,s=o.up.length;s>i;i++)e[o.up[i]]=[0,-1*t]},_setZoomOffset:function(t){var i,s,e=this._zoomKeys={},o=this.keyCodes;for(i=0,s=o.zoomIn.length;s>i;i++)e[o.zoomIn[i]]=t;for(i=0,s=o.zoomOut.length;s>i;i++)e[o.zoomOut[i]]=-t},_addHooks:function(){e.DomEvent.on(i,"keydown",this._onKeyDown,this)},_removeHooks:function(){e.DomEvent.off(i,"keydown",this._onKeyDown,this)},_onKeyDown:function(t){var i=t.keyCode,s=this._map;if(this._panKeys.hasOwnProperty(i))s.panBy(this._panKeys[i]),s.options.maxBounds&&s.panInsideBounds(s.options.maxBounds);else{if(!this._zoomKeys.hasOwnProperty(i))return;s.setZoom(s.getZoom()+this._zoomKeys[i])}e.DomEvent.stop(t)}}),e.Map.addInitHook("addHandler","keyboard",e.Map.Keyboard),e.Handler.MarkerDrag=e.Handler.extend({initialize:function(t){this._marker=t},addHooks:function(){var t=this._marker._icon;this._draggable||(this._draggable=new e.Draggable(t,t).on("dragstart",this._onDragStart,this).on("drag",this._onDrag,this).on("dragend",this._onDragEnd,this)),this._draggable.enable()},removeHooks:function(){this._draggable.disable()},moved:function(){return this._draggable&&this._draggable._moved},_onDragStart:function(){this._marker.closePopup().fire("movestart").fire("dragstart")},_onDrag:function(){var t=this._marker,i=t._shadow,s=e.DomUtil.getPosition(t._icon),o=t._map.layerPointToLatLng(s);i&&e.DomUtil.setPosition(i,s),t._latlng=o,t.fire("move",{latlng:o}).fire("drag") +},_onDragEnd:function(){this._marker.fire("moveend").fire("dragend")}}),e.Handler.PolyEdit=e.Handler.extend({options:{icon:new e.DivIcon({iconSize:new e.Point(8,8),className:"leaflet-div-icon leaflet-editing-icon"})},initialize:function(t,i){this._poly=t,e.setOptions(this,i)},addHooks:function(){this._poly._map&&(this._markerGroup||this._initMarkers(),this._poly._map.addLayer(this._markerGroup))},removeHooks:function(){this._poly._map&&(this._poly._map.removeLayer(this._markerGroup),delete this._markerGroup,delete this._markers)},updateMarkers:function(){this._markerGroup.clearLayers(),this._initMarkers()},_initMarkers:function(){this._markerGroup||(this._markerGroup=new e.LayerGroup),this._markers=[];var t,i,s,o,n=this._poly._latlngs;for(t=0,s=n.length;s>t;t++)o=this._createMarker(n[t],t),o.on("click",this._onMarkerClick,this),this._markers.push(o);var a,r;for(t=0,i=s-1;s>t;i=t++)(0!==t||e.Polygon&&this._poly instanceof e.Polygon)&&(a=this._markers[i],r=this._markers[t],this._createMiddleMarker(a,r),this._updatePrevNext(a,r))},_createMarker:function(t,i){var s=new e.Marker(t,{draggable:!0,icon:this.options.icon});return s._origLatLng=t,s._index=i,s.on("drag",this._onMarkerDrag,this),s.on("dragend",this._fireEdit,this),this._markerGroup.addLayer(s),s},_fireEdit:function(){this._poly.fire("edit")},_onMarkerDrag:function(t){var i=t.target;e.extend(i._origLatLng,i._latlng),i._middleLeft&&i._middleLeft.setLatLng(this._getMiddleLatLng(i._prev,i)),i._middleRight&&i._middleRight.setLatLng(this._getMiddleLatLng(i,i._next)),this._poly.redraw()},_onMarkerClick:function(t){if(!(3>this._poly._latlngs.length)){var i=t.target,s=i._index;this._markerGroup.removeLayer(i),this._markers.splice(s,1),this._poly.spliceLatLngs(s,1),this._updateIndexes(s,-1),this._updatePrevNext(i._prev,i._next),i._middleLeft&&this._markerGroup.removeLayer(i._middleLeft),i._middleRight&&this._markerGroup.removeLayer(i._middleRight),i._prev&&i._next?this._createMiddleMarker(i._prev,i._next):i._prev?i._next||(i._prev._middleRight=null):i._next._middleLeft=null,this._poly.fire("edit")}},_updateIndexes:function(t,i){this._markerGroup.eachLayer(function(s){s._index>t&&(s._index+=i)})},_createMiddleMarker:function(t,i){var s,e,o,n=this._getMiddleLatLng(t,i),a=this._createMarker(n);a.setOpacity(.6),t._middleRight=i._middleLeft=a,e=function(){var e=i._index;a._index=e,a.off("click",s).on("click",this._onMarkerClick,this),n.lat=a.getLatLng().lat,n.lng=a.getLatLng().lng,this._poly.spliceLatLngs(e,0,n),this._markers.splice(e,0,a),a.setOpacity(1),this._updateIndexes(e,1),i._index++,this._updatePrevNext(t,a),this._updatePrevNext(a,i)},o=function(){a.off("dragstart",e,this),a.off("dragend",o,this),this._createMiddleMarker(t,a),this._createMiddleMarker(a,i)},s=function(){e.call(this),o.call(this),this._poly.fire("edit")},a.on("click",s,this).on("dragstart",e,this).on("dragend",o,this),this._markerGroup.addLayer(a)},_updatePrevNext:function(t,i){t&&(t._next=i),i&&(i._prev=t)},_getMiddleLatLng:function(t,i){var s=this._poly._map,e=s.latLngToLayerPoint(t.getLatLng()),o=s.latLngToLayerPoint(i.getLatLng());return s.layerPointToLatLng(e._add(o)._divideBy(2))}}),e.Polyline.addInitHook(function(){e.Handler.PolyEdit&&(this.editing=new e.Handler.PolyEdit(this),this.options.editable&&this.editing.enable()),this.on("add",function(){this.editing&&this.editing.enabled()&&this.editing.addHooks()}),this.on("remove",function(){this.editing&&this.editing.enabled()&&this.editing.removeHooks()})}),e.Control=e.Class.extend({options:{position:"topright"},initialize:function(t){e.setOptions(this,t)},getPosition:function(){return this.options.position},setPosition:function(t){var i=this._map;return i&&i.removeControl(this),this.options.position=t,i&&i.addControl(this),this},addTo:function(t){this._map=t;var i=this._container=this.onAdd(t),s=this.getPosition(),o=t._controlCorners[s];return e.DomUtil.addClass(i,"leaflet-control"),-1!==s.indexOf("bottom")?o.insertBefore(i,o.firstChild):o.appendChild(i),this},removeFrom:function(t){var i=this.getPosition(),s=t._controlCorners[i];return s.removeChild(this._container),this._map=null,this.onRemove&&this.onRemove(t),this}}),e.control=function(t){return new e.Control(t)},e.Map.include({addControl:function(t){return t.addTo(this),this},removeControl:function(t){return t.removeFrom(this),this},_initControlPos:function(){function t(t,n){var a=s+t+" "+s+n;i[t+n]=e.DomUtil.create("div",a,o)}var i=this._controlCorners={},s="leaflet-",o=this._controlContainer=e.DomUtil.create("div",s+"control-container",this._container);t("top","left"),t("top","right"),t("bottom","left"),t("bottom","right")}}),e.Control.Zoom=e.Control.extend({options:{position:"topleft"},onAdd:function(t){var i="leaflet-control-zoom",s="leaflet-bar",o=s+"-part",n=e.DomUtil.create("div",i+" "+s);return this._map=t,this._zoomInButton=this._createButton("+","Zoom in",i+"-in "+o+" "+o+"-top",n,this._zoomIn,this),this._zoomOutButton=this._createButton("-","Zoom out",i+"-out "+o+" "+o+"-bottom",n,this._zoomOut,this),t.on("zoomend",this._updateDisabled,this),n},onRemove:function(t){t.off("zoomend",this._updateDisabled,this)},_zoomIn:function(t){this._map.zoomIn(t.shiftKey?3:1)},_zoomOut:function(t){this._map.zoomOut(t.shiftKey?3:1)},_createButton:function(t,i,s,o,n,a){var r=e.DomUtil.create("a",s,o);r.innerHTML=t,r.href="#",r.title=i;var h=e.DomEvent.stopPropagation;return e.DomEvent.on(r,"click",h).on(r,"mousedown",h).on(r,"dblclick",h).on(r,"click",e.DomEvent.preventDefault).on(r,"click",n,a),r},_updateDisabled:function(){var t=this._map,i="leaflet-control-zoom-disabled";e.DomUtil.removeClass(this._zoomInButton,i),e.DomUtil.removeClass(this._zoomOutButton,i),t._zoom===t.getMinZoom()&&e.DomUtil.addClass(this._zoomOutButton,i),t._zoom===t.getMaxZoom()&&e.DomUtil.addClass(this._zoomInButton,i)}}),e.Map.mergeOptions({zoomControl:!0}),e.Map.addInitHook(function(){this.options.zoomControl&&(this.zoomControl=new e.Control.Zoom,this.addControl(this.zoomControl))}),e.control.zoom=function(t){return new e.Control.Zoom(t)},e.Control.Attribution=e.Control.extend({options:{position:"bottomright",prefix:'Powered by Leaflet'},initialize:function(t){e.setOptions(this,t),this._attributions={}},onAdd:function(t){return this._container=e.DomUtil.create("div","leaflet-control-attribution"),e.DomEvent.disableClickPropagation(this._container),t.on("layeradd",this._onLayerAdd,this).on("layerremove",this._onLayerRemove,this),this._update(),this._container},onRemove:function(t){t.off("layeradd",this._onLayerAdd).off("layerremove",this._onLayerRemove)},setPrefix:function(t){return this.options.prefix=t,this._update(),this},addAttribution:function(t){return t?(this._attributions[t]||(this._attributions[t]=0),this._attributions[t]++,this._update(),this):s},removeAttribution:function(t){return t?(this._attributions[t]--,this._update(),this):s},_update:function(){if(this._map){var t=[];for(var i in this._attributions)this._attributions.hasOwnProperty(i)&&this._attributions[i]&&t.push(i);var s=[];this.options.prefix&&s.push(this.options.prefix),t.length&&s.push(t.join(", ")),this._container.innerHTML=s.join(" — ")}},_onLayerAdd:function(t){t.layer.getAttribution&&this.addAttribution(t.layer.getAttribution())},_onLayerRemove:function(t){t.layer.getAttribution&&this.removeAttribution(t.layer.getAttribution())}}),e.Map.mergeOptions({attributionControl:!0}),e.Map.addInitHook(function(){this.options.attributionControl&&(this.attributionControl=(new e.Control.Attribution).addTo(this))}),e.control.attribution=function(t){return new e.Control.Attribution(t)},e.Control.Scale=e.Control.extend({options:{position:"bottomleft",maxWidth:100,metric:!0,imperial:!0,updateWhenIdle:!1},onAdd:function(t){this._map=t;var i="leaflet-control-scale",s=e.DomUtil.create("div",i),o=this.options;return this._addScales(o,i,s),t.on(o.updateWhenIdle?"moveend":"move",this._update,this),t.whenReady(this._update,this),s},onRemove:function(t){t.off(this.options.updateWhenIdle?"moveend":"move",this._update,this)},_addScales:function(t,i,s){t.metric&&(this._mScale=e.DomUtil.create("div",i+"-line",s)),t.imperial&&(this._iScale=e.DomUtil.create("div",i+"-line",s))},_update:function(){var t=this._map.getBounds(),i=t.getCenter().lat,s=6378137*Math.PI*Math.cos(i*Math.PI/180),e=s*(t.getNorthEast().lng-t.getSouthWest().lng)/180,o=this._map.getSize(),n=this.options,a=0;o.x>0&&(a=e*(n.maxWidth/o.x)),this._updateScales(n,a)},_updateScales:function(t,i){t.metric&&i&&this._updateMetric(i),t.imperial&&i&&this._updateImperial(i)},_updateMetric:function(t){var i=this._getRoundNum(t);this._mScale.style.width=this._getScaleWidth(i/t)+"px",this._mScale.innerHTML=1e3>i?i+" m":i/1e3+" km"},_updateImperial:function(t){var i,s,e,o=3.2808399*t,n=this._iScale;o>5280?(i=o/5280,s=this._getRoundNum(i),n.style.width=this._getScaleWidth(s/i)+"px",n.innerHTML=s+" mi"):(e=this._getRoundNum(o),n.style.width=this._getScaleWidth(e/o)+"px",n.innerHTML=e+" ft")},_getScaleWidth:function(t){return Math.round(this.options.maxWidth*t)-10},_getRoundNum:function(t){var i=Math.pow(10,(Math.floor(t)+"").length-1),s=t/i;return s=s>=10?10:s>=5?5:s>=3?3:s>=2?2:1,i*s}}),e.control.scale=function(t){return new e.Control.Scale(t)},e.Control.Layers=e.Control.extend({options:{collapsed:!0,position:"topright",autoZIndex:!0},initialize:function(t,i,s){e.setOptions(this,s),this._layers={},this._lastZIndex=0,this._handlingClick=!1;for(var o in t)t.hasOwnProperty(o)&&this._addLayer(t[o],o);for(o in i)i.hasOwnProperty(o)&&this._addLayer(i[o],o,!0)},onAdd:function(t){return this._initLayout(),this._update(),t.on("layeradd",this._onLayerChange,this).on("layerremove",this._onLayerChange,this),this._container},onRemove:function(t){t.off("layeradd",this._onLayerChange).off("layerremove",this._onLayerChange)},addBaseLayer:function(t,i){return this._addLayer(t,i),this._update(),this},addOverlay:function(t,i){return this._addLayer(t,i,!0),this._update(),this},removeLayer:function(t){var i=e.stamp(t);return delete this._layers[i],this._update(),this},_initLayout:function(){var t="leaflet-control-layers",i=this._container=e.DomUtil.create("div",t);e.Browser.touch?e.DomEvent.on(i,"click",e.DomEvent.stopPropagation):(e.DomEvent.disableClickPropagation(i),e.DomEvent.on(i,"mousewheel",e.DomEvent.stopPropagation));var s=this._form=e.DomUtil.create("form",t+"-list");if(this.options.collapsed){e.DomEvent.on(i,"mouseover",this._expand,this).on(i,"mouseout",this._collapse,this);var o=this._layersLink=e.DomUtil.create("a",t+"-toggle",i);o.href="#",o.title="Layers",e.Browser.touch?e.DomEvent.on(o,"click",e.DomEvent.stopPropagation).on(o,"click",e.DomEvent.preventDefault).on(o,"click",this._expand,this):e.DomEvent.on(o,"focus",this._expand,this),this._map.on("movestart",this._collapse,this)}else this._expand();this._baseLayersList=e.DomUtil.create("div",t+"-base",s),this._separator=e.DomUtil.create("div",t+"-separator",s),this._overlaysList=e.DomUtil.create("div",t+"-overlays",s),i.appendChild(s)},_addLayer:function(t,i,s){var o=e.stamp(t);this._layers[o]={layer:t,name:i,overlay:s},this.options.autoZIndex&&t.setZIndex&&(this._lastZIndex++,t.setZIndex(this._lastZIndex))},_update:function(){if(this._container){this._baseLayersList.innerHTML="",this._overlaysList.innerHTML="";var t=!1,i=!1;for(var s in this._layers)if(this._layers.hasOwnProperty(s)){var e=this._layers[s];this._addItem(e),i=i||e.overlay,t=t||!e.overlay}this._separator.style.display=i&&t?"":"none"}},_onLayerChange:function(t){var i=e.stamp(t.layer);this._layers[i]&&!this._handlingClick&&this._update()},_createRadioElement:function(t,s){var e='t;t++)i=o[t],s=this._layers[i.layerId],i.checked&&!this._map.hasLayer(s.layer)?(this._map.addLayer(s.layer),s.overlay||(e=s.layer)):!i.checked&&this._map.hasLayer(s.layer)&&this._map.removeLayer(s.layer);e&&(this._map.setZoom(this._map.getZoom()),this._map.fire("baselayerchange",{layer:e})),this._handlingClick=!1},_expand:function(){e.DomUtil.addClass(this._container,"leaflet-control-layers-expanded")},_collapse:function(){this._container.className=this._container.className.replace(" leaflet-control-layers-expanded","")}}),e.control.layers=function(t,i,s){return new e.Control.Layers(t,i,s)},e.PosAnimation=e.Class.extend({includes:e.Mixin.Events,run:function(t,i,s,o){this.stop(),this._el=t,this._inProgress=!0,this.fire("start"),t.style[e.DomUtil.TRANSITION]="all "+(s||.25)+"s cubic-bezier(0,0,"+(o||.5)+",1)",e.DomEvent.on(t,e.DomUtil.TRANSITION_END,this._onTransitionEnd,this),e.DomUtil.setPosition(t,i),e.Util.falseFn(t.offsetWidth),this._stepTimer=setInterval(e.bind(this.fire,this,"step"),50)},stop:function(){this._inProgress&&(e.DomUtil.setPosition(this._el,this._getPos()),this._onTransitionEnd(),e.Util.falseFn(this._el.offsetWidth))},_transformRe:/(-?[\d\.]+), (-?[\d\.]+)\)/,_getPos:function(){var i,s,o,n=this._el,a=t.getComputedStyle(n);return e.Browser.any3d?(o=a[e.DomUtil.TRANSFORM].match(this._transformRe),i=parseFloat(o[1]),s=parseFloat(o[2])):(i=parseFloat(a.left),s=parseFloat(a.top)),new e.Point(i,s,!0)},_onTransitionEnd:function(){e.DomEvent.off(this._el,e.DomUtil.TRANSITION_END,this._onTransitionEnd,this),this._inProgress&&(this._inProgress=!1,this._el.style[e.DomUtil.TRANSITION]="",clearInterval(this._stepTimer),this.fire("step").fire("end"))}}),e.Map.include({setView:function(t,i,s){i=this._limitZoom(i);var e=this._zoom!==i;if(this._loaded&&!s&&this._layers){this._panAnim&&this._panAnim.stop();var o=e?this._zoomToIfClose&&this._zoomToIfClose(t,i):this._panByIfClose(t);if(o)return clearTimeout(this._sizeTimer),this}return this._resetView(t,i),this},panBy:function(t,i,s){if(t=e.point(t),!t.x&&!t.y)return this;this._panAnim||(this._panAnim=new e.PosAnimation,this._panAnim.on({step:this._onPanTransitionStep,end:this._onPanTransitionEnd},this)),this.fire("movestart"),e.DomUtil.addClass(this._mapPane,"leaflet-pan-anim");var o=e.DomUtil.getPosition(this._mapPane).subtract(t)._round();return this._panAnim.run(this._mapPane,o,i||.25,s),this},_onPanTransitionStep:function(){this.fire("move")},_onPanTransitionEnd:function(){e.DomUtil.removeClass(this._mapPane,"leaflet-pan-anim"),this.fire("moveend")},_panByIfClose:function(t){var i=this._getCenterOffset(t)._floor();return this._offsetIsWithinView(i)?(this.panBy(i),!0):!1},_offsetIsWithinView:function(t,i){var s=i||1,e=this.getSize();return Math.abs(t.x)<=e.x*s&&Math.abs(t.y)<=e.y*s}}),e.PosAnimation=e.DomUtil.TRANSITION?e.PosAnimation:e.PosAnimation.extend({run:function(t,i,s,o){this.stop(),this._el=t,this._inProgress=!0,this._duration=s||.25,this._easeOutPower=1/Math.max(o||.5,.2),this._startPos=e.DomUtil.getPosition(t),this._offset=i.subtract(this._startPos),this._startTime=+new Date,this.fire("start"),this._animate()},stop:function(){this._inProgress&&(this._step(),this._complete())},_animate:function(){this._animId=e.Util.requestAnimFrame(this._animate,this),this._step()},_step:function(){var t=+new Date-this._startTime,i=1e3*this._duration;i>t?this._runFrame(this._easeOut(t/i)):(this._runFrame(1),this._complete())},_runFrame:function(t){var i=this._startPos.add(this._offset.multiplyBy(t));e.DomUtil.setPosition(this._el,i),this.fire("step")},_complete:function(){e.Util.cancelAnimFrame(this._animId),this._inProgress=!1,this.fire("end")},_easeOut:function(t){return 1-Math.pow(1-t,this._easeOutPower)}}),e.Map.mergeOptions({zoomAnimation:e.DomUtil.TRANSITION&&!e.Browser.android23&&!e.Browser.mobileOpera}),e.DomUtil.TRANSITION&&e.Map.addInitHook(function(){e.DomEvent.on(this._mapPane,e.DomUtil.TRANSITION_END,this._catchTransitionEnd,this)}),e.Map.include(e.DomUtil.TRANSITION?{_zoomToIfClose:function(t,i){if(this._animatingZoom)return!0;if(!this.options.zoomAnimation)return!1;var s=this.getZoomScale(i),o=this._getCenterOffset(t)._divideBy(1-1/s);if(!this._offsetIsWithinView(o,1))return!1;e.DomUtil.addClass(this._mapPane,"leaflet-zoom-anim"),this.fire("movestart").fire("zoomstart"),this.fire("zoomanim",{center:t,zoom:i});var n=this._getCenterLayerPoint().add(o);return this._prepareTileBg(),this._runAnimation(t,i,s,n),!0},_catchTransitionEnd:function(){this._animatingZoom&&this._onZoomTransitionEnd()},_runAnimation:function(t,i,s,o,n){this._animateToCenter=t,this._animateToZoom=i,this._animatingZoom=!0,e.Draggable&&(e.Draggable._disabled=!0);var a=e.DomUtil.TRANSFORM,r=this._tileBg;clearTimeout(this._clearTileBgTimer),e.Util.falseFn(r.offsetWidth);var h=e.DomUtil.getScaleString(s,o),l=r.style[a];r.style[a]=n?l+" "+h:h+" "+l},_prepareTileBg:function(){var t=this._tilePane,i=this._tileBg;if(i&&this._getLoadedTilesPercentage(i)>.5&&.5>this._getLoadedTilesPercentage(t))return t.style.visibility="hidden",t.empty=!0,this._stopLoadingImages(t),s;i||(i=this._tileBg=this._createPane("leaflet-tile-pane",this._mapPane),i.style.zIndex=1),i.style[e.DomUtil.TRANSFORM]="",i.style.visibility="hidden",i.empty=!0,t.empty=!1,this._tilePane=this._panes.tilePane=i;var o=this._tileBg=t;e.DomUtil.addClass(o,"leaflet-zoom-animated"),this._stopLoadingImages(o)},_getLoadedTilesPercentage:function(t){var i,s,e=t.getElementsByTagName("img"),o=0;for(i=0,s=e.length;s>i;i++)e[i].complete&&o++;return o/s},_stopLoadingImages:function(t){var i,s,o,n=Array.prototype.slice.call(t.getElementsByTagName("img"));for(i=0,s=n.length;s>i;i++)o=n[i],o.complete||(o.onload=e.Util.falseFn,o.onerror=e.Util.falseFn,o.src=e.Util.emptyImageUrl,o.parentNode.removeChild(o))},_onZoomTransitionEnd:function(){this._restoreTileFront(),e.DomUtil.removeClass(this._mapPane,"leaflet-zoom-anim"),e.Util.falseFn(this._tileBg.offsetWidth),this._animatingZoom=!1,this._resetView(this._animateToCenter,this._animateToZoom,!0,!0),e.Draggable&&(e.Draggable._disabled=!1)},_restoreTileFront:function(){this._tilePane.innerHTML="",this._tilePane.style.visibility="",this._tilePane.style.zIndex=2,this._tileBg.style.zIndex=1},_clearTileBg:function(){this._animatingZoom||this.touchZoom._zooming||(this._tileBg.innerHTML="")}}:{}),e.Map.include({_defaultLocateOptions:{watch:!1,setView:!1,maxZoom:1/0,timeout:1e4,maximumAge:0,enableHighAccuracy:!1},locate:function(t){if(t=this._locationOptions=e.extend(this._defaultLocateOptions,t),!navigator.geolocation)return this._handleGeolocationError({code:0,message:"Geolocation not supported."}),this;var i=e.bind(this._handleGeolocationResponse,this),s=e.bind(this._handleGeolocationError,this);return t.watch?this._locationWatchId=navigator.geolocation.watchPosition(i,s,t):navigator.geolocation.getCurrentPosition(i,s,t),this},stopLocate:function(){return navigator.geolocation&&navigator.geolocation.clearWatch(this._locationWatchId),this},_handleGeolocationError:function(t){var i=t.code,s=t.message||(1===i?"permission denied":2===i?"position unavailable":"timeout");this._locationOptions.setView&&!this._loaded&&this.fitWorld(),this.fire("locationerror",{code:i,message:"Geolocation error: "+s+"."})},_handleGeolocationResponse:function(t){var i=180*t.coords.accuracy/4e7,s=2*i,o=t.coords.latitude,n=t.coords.longitude,a=new e.LatLng(o,n),r=new e.LatLng(o-i,n-s),h=new e.LatLng(o+i,n+s),l=new e.LatLngBounds(r,h),c=this._locationOptions;if(c.setView){var m=Math.min(this.getBoundsZoom(l),c.maxZoom);this.setView(a,m)}this.fire("locationfound",{latlng:a,bounds:l,accuracy:t.coords.accuracy})}})}(this,document),L.Proj={},L.Proj._isProj4Proj=function(t){return t.projName!==void 0},L.Proj.Projection=L.Class.extend({initialize:function(t,i){if(L.Proj._isProj4Proj(t))this._proj=t;else{var s=t;Proj4js.defs[s]=i,this._proj=new Proj4js.Proj(s)}},project:function(t){var i=new L.Point(t.lng,t.lat);return Proj4js.transform(Proj4js.WGS84,this._proj,i)},unproject:function(t,i){var s=Proj4js.transform(this._proj,Proj4js.WGS84,t.clone());return new L.LatLng(s.y,s.x,i)}}),L.Proj.CRS=L.Class.extend({includes:L.CRS,options:{transformation:new L.Transformation(1,0,-1,0)},initialize:function(t,i,s){var e,o,n,a;L.Proj._isProj4Proj(t)?(o=t,e=o.srsCode,a=i||{},this.projection=new L.Proj.Projection(o)):(e=t,n=i,a=s||{},this.projection=new L.Proj.Projection(e,n)),L.Util.setOptions(this,a),this.code=e,this.transformation=this.options.transformation,this.options.origin&&(this.transformation=new L.Transformation(1,-this.options.origin[0],-1,this.options.origin[1])),this.options.scales?this.scale=function(t){return this.options.scales[t]}:this.options.resolutions&&(this.scale=function(t){return 1/this.options.resolutions[t]})}}),L.Proj.CRS.TMS=L.Proj.CRS.extend({initialize:function(t,i,s,e){if(L.Proj._isProj4Proj(t)){var o=t,n=i,a=s||{};a.origin=[n[0],n[3]],L.Proj.CRS.prototype.initialize(o,a)}else{var r=t,h=i,n=s,a=e||{};a.origin=[n[0],n[3]],L.Proj.CRS.prototype.initialize(r,h,a)}this.projectedBounds=n}}),L.Proj.TileLayer={},L.Proj.TileLayer.TMS=L.TileLayer.extend({options:{tms:!0,continuousWorld:!0},initialize:function(t,i,s){if(!(i instanceof L.Proj.CRS.TMS))throw Error("CRS is not L.Proj.CRS.TMS.");L.TileLayer.prototype.initialize.call(this,t,s),this.crs=i;for(var e=this.options.minZoom;this.options.maxZoom>e;e++){var o=(this.crs.projectedBounds[3]-this.crs.projectedBounds[1])/this._projectedTileSize(e);if(Math.abs(o-Math.round(o))>.001)throw Error("Projected bounds does not match grid at zoom "+e)}},getTileUrl:function(t){var i=Math.round((this.crs.projectedBounds[3]-this.crs.projectedBounds[1])/this._projectedTileSize(this._map.getZoom()));return L.Util.template(this._url,L.Util.extend({s:this._getSubdomain(t),z:this._getZoomForUrl(),x:t.x,y:i-t.y-1},this.options))},_projectedTileSize:function(t){return this.options.tileSize/this.crs.scale(t)}}),"undefined"!=typeof module&&(module.exports=L.Proj),"undefined"!=typeof L&&L.CRS!==void 0&&(L.CRS.proj4js=function(){return function(t,i,s,e){return e=e||{},s&&(e.transformation=s),new L.Proj.CRS(t,i,e)}}()),L.Control.MousePosition=L.Control.extend({options:{position:"bottomleft",separator:" : ",emptyString:"Unavailable",lngFirst:!1,numDigits:5,lngFormatter:void 0,latFormatter:void 0},onAdd:function(t){return this._container=L.DomUtil.create("div","leaflet-control-mouseposition"),L.DomEvent.disableClickPropagation(this._container),t.on("mousemove",this._onMouseMove,this),this._container.innerHTML=this.options.emptyString,this._container},onRemove:function(t){t.off("mousemove",this._onMouseMove)},_onMouseMove:function(t){var i=L.Util.formatNum(t.latlng.lng,this.options.numDigits),s=L.Util.formatNum(t.latlng.lat,this.options.numDigits);this.options.lngFormatter&&(i=this.options.lngFormatter(i)),this.options.latFormatter&&(s=this.options.latFormatter(s));var e=this.options.lngFirst?i+this.options.separator+s:s+this.options.separator+i;this._container.innerHTML=e}}),L.Map.mergeOptions({positionControl:!1}),L.Map.addInitHook(function(){this.options.positionControl&&(this.positionControl=new L.Control.MousePosition,this.addControl(this.positionControl))}),L.control.mousePosition=function(t){return new L.Control.MousePosition(t)},function(t,i){L.KSP={},L.KSP.version="0.2.1",L.KSP.CRS={},L.KSP.CRS.EPSG4326=new L.Proj.CRS.TMS(new Proj4js.Proj("EPSG:4326"),[-180,-90,180,90],{resolutions:[.703125,.3515625,.17578125,.087890625,.0439453125,.02197265625]}),L.KSP.CelestialBody=L.Class.extend({initialize:function(t){if(!t.hasOwnProperty("id"))throw Error("must specify id");if(!t.hasOwnProperty("name"))throw Error("must specify name");if(t.hasOwnProperty("crs")){if(!(t.crs instanceof L.Proj.CRS.TMS))throw Error("crs is not an instance of L.Proj.CRS.TMS")}else this.crs=L.KSP.CRS.EPSG4326;t.hasOwnProperty("radius")||(this.radius=1),t.hasOwnProperty("thumbnail")||(this.thumbnail="body-unknown.png"),t.hasOwnProperty("baseLayers")||(this.baseLayers={}),L.Util.extend(this,t)},addTo:function(t){var i,s=t._body;if(t._body=this,t.fire("bodychangestart",{body:this,oldBody:s}),s){for(i in s.baseLayers)s.baseLayers.hasOwnProperty(i)&&t.removeLayer(s.baseLayers[i]);for(i in s.overlays)s.overlays.hasOwnProperty(i)&&t.removeLayer(s.overlays[i])}var e=this.defaultLayer||this.baseLayers.Satellite;if(e){for(i in this.baseLayers)if(this.baseLayers.hasOwnProperty(i)&&this.baseLayers[i]._type===t._baseLayerType){e=this.baseLayers[i];break}t.addLayer(e),t.fire("baselayerchange",{layer:e})}for(i in this.overlays)this.overlays.hasOwnProperty(i)&&t._overlayTypes.indexOf(this.overlays[i]._type)>=0&&(t.addLayer(this.overlays[i]),t.fire("layeradd",{layer:this.overlays[i]}));t.fire("bodychangeend",{body:this,oldBody:s})},onAdd:function(t){this.addTo(t)},removeFrom:function(t){L.KSP.CelestialBody.DUMMY.addTo(t)},onRemove:function(t){this.removeFrom(t)}}),L.KSP.celestialBody=function(t){return new L.KSP.CelestialBody(t)},L.KSP.CelestialBody.DUMMY=L.KSP.celestialBody({id:"",name:"",crs:L.KSP.CRS.EPSG4326}),L.KSP.CelestialBody.ALL_PLANETARY=[L.KSP.CelestialBody.DUMMY],L.KSP.Map=L.Map.extend({options:{crs:L.KSP.CRS.EPSG4326,continuousWorld:!0},initialize:function(t,i){this._baseLayerType=-1,this._overlayTypes=[],L.Util.setOptions(this,i),this.startTrackingLayerState(),this.on("bodychangestart",this._onBodyChangeStart).on("bodychangeend",this._onBodyChangeEnd),L.Map.prototype.initialize.call(this,t,this.options)},clampZoom:function(){var t=this.getZoom(),i=this.getMinZoom(),s=this.getMaxZoom();i>t?this.setZoom(i):t>s?this.setZoom(s):this.fire("zoomend",this)},_onBodyChangeStart:function(){this.stopTrackingLayerState()},_onBodyChangeEnd:function(){this.clampZoom(),this.startTrackingLayerState()},_onLayerStateChange:function(t){if("layeradd"===t.type)t.layer instanceof L.KSP.TileLayer?this._baseLayerType=t.layer._type:t.layer instanceof L.KSP.LayerGroup&&0>this._overlayTypes.indexOf(t.layer._type)&&this._overlayTypes.push(t.layer._type);else if(t.layer instanceof L.KSP.LayerGroup){var i,s,e=t.layer._type,o=this._overlayTypes;for(i=o.length-1;i>=0;i--)s=o[i],s===e&&o.splice(i,1)}},startTrackingLayerState:function(){this.on("layeradd",this._onLayerStateChange).on("layerremove",this._onLayerStateChange)},stopTrackingLayerState:function(){this.off("layeradd",this._onLayerStateChange).off("layerremove",this._onLayerStateChange)}}),L.KSP.map=function(t,i){return new L.KSP.Map(t,i)},L.KSP.TileLayer=L.Proj.TileLayer.TMS.extend({statics:{TYPE_SATELLITE:0,TYPE_COLORRELIEF:1,TYPE_SLOPE:2,DEFAULT_URL:"http://tiles.kerbalmaps.com/{body}/{style}/{z}/{x}/{y}.png"},options:{continuousWorld:!1,noWrap:!1,minZoom:0,maxZoom:5,attribution:"Map data © Joel Pedraza"},initialize:function(t,i,s,e){L.Util.setOptions(this,e),this._type=t,L.Proj.TileLayer.TMS.prototype.initialize.call(this,i,s,this.options)}}),L.KSP.tileLayer=function(t,i,s,e){return new L.KSP.TileLayer(t,i,s,e)},L.KSP.LayerGroup=L.LayerGroup.extend({statics:{TYPE_SPACECENTER:0,TYPE_ANOMALY:1},initialize:function(t,i){this._type=t,L.LayerGroup.prototype.initialize.call(this,i)}}),L.KSP.layerGroup=function(t,i){return new L.KSP.LayerGroup(t,i)},L.KSP.Icon={},L.KSP.Icon.SPACECENTER=new L.Icon({iconUrl:"../assets/images/markers-spacecenter.png",shadowUrl:"../assets/images/markers-shadow.png",iconSize:[30,40],shadowSize:[35,16],iconAnchor:[15,40],shadowAnchor:[10,12],popupAnchor:[0,-35]}),L.KSP.Icon.ANOMALY=new L.Icon({iconUrl:"../assets/images/markers-anomaly.png",shadowUrl:"../assets/images/markers-shadow.png",iconSize:[30,40],shadowSize:[35,16],iconAnchor:[15,40],shadowAnchor:[10,12],popupAnchor:[0,-35]}),L.KSP.Legend={},L.KSP.Legend.SLOPE={"≥ 60°":"#E19678","< 60°":"#C86464","< 30°":"#965A64","< 15°":"#645064","< 5°":"#325064","0°":"#32465A"},L.KSP.Control=L.KSP.control={},L.KSP.Control.Legend=L.Control.extend({options:{position:"bottomright"},onAdd:function(t){return this._container=L.DomUtil.create("div","leaflet-control-legend"),t.on("baselayerchange",this._onLayerChange,this),this._container},_update:function(t){if(this._container.innerHTML="",t){for(var i in t)t.hasOwnProperty(i)&&(this._container.innerHTML+=''+i+"
    ");L.DomUtil.addClass(this._container,"leaflet-control-legend-visible")}else this._container.className=this._container.className.replace(" leaflet-control-legend-visible","")},_onLayerChange:function(t){this._update(t.layer.options.legend)}}),L.Map.mergeOptions({legendControl:!0}),L.Map.addInitHook(function(){this.options.bodyControl&&(this.legendControl=new L.KSP.Control.Legend,this.addControl(this.legendControl))}),L.control.legend=function(t){return new L.KSP.Control.Legend(t)},L.KSP.Control.Scale=L.Control.Scale.extend({options:{imperial:!1},onAdd:function(t){this._radius=0,t._body&&(this._radius=t._body.radius);var i=L.Control.Scale.prototype.onAdd.call(this,t);return t.on("bodychangeend",this._onBodyChangeEnd,this),i},onRemove:function(t){L.Control.Scale.prototype.onRemove.call(this,t),t.off("bodychangeend",this._onBodyChangeEnd)},_onBodyChangeEnd:function(t){this._radius=t.body.radius,this._update()},_update:function(){var t=this._map.getBounds(),i=t.getCenter().lat,s=this._radius*Math.PI*Math.cos(i*Math.PI/180),e=s*(t.getNorthEast().lng-t.getSouthWest().lng)/180,o=this._map.getSize(),n=this.options,a=0;o.x>0&&(a=e*(n.maxWidth/o.x)),this._updateScales(n,a)}}),L.KSP.Map.mergeOptions({scaleControl:!1}),L.KSP.Map.addInitHook(function(){this.options.scaleControl&&(this.scaleControl=new L.KSP.Control.Scale,this.addControl(this.scaleControl))}),L.KSP.control.scale=function(t){return new L.KSP.Control.Scale(t)},L.KSP.Control.CelestialBody=L.Control.extend({options:{position:"topright",collapsed:!0},initialize:function(t,i){L.Util.setOptions(this,i),this._bodies=t,this._timeInMillis=(new Date).valueOf(),this._weekInMillis=6048e5},onAdd:function(){return this._initLayout(),this._update(),this._map.on("bodychangeend",this._update,this),this._container},_initLayout:function(){var t="leaflet-control-celestialbodies",s=this._container=L.DomUtil.create("div",t),e=this._bodies;if(this.options.collapsed){L.DomEvent.on(s,"mouseover",this._expand,this).on(s,"mouseout",this._collapse,this);var o=this._bodiesLink=L.DomUtil.create("a",t+"-toggle",s);o.href="#",o.title="Celestial Bodies",L.DomEvent.on(o,"focus",this._expand,this),this._map.on("movestart",this._collapse,this)}var n=this._list=L.DomUtil.create("ul",t+"-list",s);for(var a in e)if(e.hasOwnProperty(a)){var r=this._addBody(e[a],n);if(e[a].children){var h=i.createElement("ul");for(var l in e[a].children)e[a].children.hasOwnProperty(l)&&this._addBody(e[a].children[l],h);r.appendChild(h)}}},_update:function(){this._map._body&&(this._bodiesLink.style.backgroundImage='url("'+this._map._body.thumbnail+'")')},_addBody:function(t,s){var e,o=i.createElement("li"),n=i.createElement("img");if(n.src=t.thumbnail,n.alt=o.title=t.name,t.addedOn){this._timeInMillis-t.addedOnKerbal Space Center
    -0.0969 : -74.6004"),L.marker([20.5829,-146.5116],{icon:L.KSP.Icon.SPACECENTER}).bindPopup("Kerbal Space Center 2
    20.5829 : -146.5116"),L.marker([-1.5409,-71.9099],{icon:L.KSP.Icon.SPACECENTER}).bindPopup("Island Airfield
    -1.5409 : -71.9099")]),Anomalies:L.KSP.layerGroup(L.KSP.LayerGroup.TYPE_ANOMALY,[L.marker([.1023,-74.5684],{icon:L.KSP.Icon.ANOMALY}).bindPopup("0.1023 : -74.5684"),L.marker([20.6709,-146.4968],{icon:L.KSP.Icon.ANOMALY}).bindPopup("20.6709 : -146.4968"),L.marker([35.5705,-74.9773],{icon:L.KSP.Icon.ANOMALY}).bindPopup("35.5705 : -74.9773"),L.marker([-.6402,-80.7668],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-0.6402 : -80.7668"),L.marker([-28.8083,-13.4401],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-28.8083 : -13.4401"),L.marker([-6.5057,-141.6856],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-6.5057 : -141.6856"),L.marker([81.9551,-128.518],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-81.9551 : -128.518")])}}),L.KSP.CelestialBody.MUN=L.KSP.celestialBody({id:"mun",name:"Mun",crs:L.KSP.CRS.EPSG4326,radius:2e5,addedOn:13682304e5,lastUpdated:1368144e6,thumbnail:"body-mun.png",baseLayers:{Satellite:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SATELLITE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{body:"mun",style:"sat"}),"Color Relief":L.KSP.tileLayer(L.KSP.TileLayer.TYPE_COLORRELIEF,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{body:"mun",style:"color",legend:{"3150 m":"#EBEBEB","-180 m":"#232323"}}),Slope:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SLOPE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{body:"mun",style:"slope",legend:L.KSP.Legend.SLOPE})},overlays:{Anomalies:L.KSP.layerGroup(L.KSP.LayerGroup.TYPE_ANOMALY,[L.marker([-9.8314,25.9177],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-9.8314 : 25.9177"),L.marker([-82.2063,102.9305],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-82.2063 : 102.9305"),L.marker([57.6604,9.1422],{icon:L.KSP.Icon.ANOMALY}).bindPopup("57.6604 : 9.1422"),L.marker([2.4695,81.5133],{icon:L.KSP.Icon.ANOMALY}).bindPopup("2.4695 : 81.5133"),L.marker([12.4432,39.178],{icon:L.KSP.Icon.ANOMALY}).bindPopup("12.4432 : 39.1780"),L.marker([-12.4431,-140.822],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-12.4431 : -140.8220"),L.marker([.7027,22.747],{icon:L.KSP.Icon.ANOMALY}).bindPopup("0.7027 : 22.7470"),L.marker([-70.9556,-68.1378],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-70.9556,-68.1378")])}}),L.KSP.CelestialBody.MINMUS=L.KSP.celestialBody({id:"minmus",name:"Minmus",crs:L.KSP.CRS.EPSG4326,radius:6e4,addedOn:13682304e5,lastUpdated:13682304e5,thumbnail:"body-minmus.png",baseLayers:{Satellite:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SATELLITE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"sat",body:"minmus"}),"Color Relief":L.KSP.tileLayer(L.KSP.TileLayer.TYPE_COLORRELIEF,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"color",body:"minmus",legend:{"5750 m":"#414B41","2500 m":"#BEE6C3","1 m":"#96CDB4","0 m":"#87B9A5"}}),Slope:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SLOPE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"slope",body:"minmus",legend:L.KSP.Legend.SLOPE})},overlays:{Anomalies:L.KSP.layerGroup(L.KSP.LayerGroup.TYPE_ANOMALY,[L.marker([23.7768,60.0462],{icon:L.KSP.Icon.ANOMALY}).bindPopup("23.7768 : 60.0462")])}}),L.KSP.CelestialBody.DUNA=L.KSP.celestialBody({id:"duna",name:"Duna",crs:L.KSP.CRS.EPSG4326,radius:32e4,addedOn:13688352e5,lastUpdated:13688352e5,thumbnail:"body-duna.png",baseLayers:{Satellite:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SATELLITE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"sat",body:"duna"}),"Color Relief":L.KSP.tileLayer(L.KSP.TileLayer.TYPE_COLORRELIEF,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"color",body:"duna",legend:{"4800 m":"#C3A082","4000 m":"#966446","3000 m":"#733219","2000 m":"#501E14","1000 m":"#3C140F","0 m":"#280F0A"}}),Slope:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SLOPE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"slope",body:"duna",legend:L.KSP.Legend.SLOPE})},overlays:{Anomalies:L.KSP.layerGroup(L.KSP.LayerGroup.TYPE_ANOMALY,[L.marker([17.0483,-85.4717],{icon:L.KSP.Icon.ANOMALY}).bindPopup("17.0483 : -85.4717"),L.marker([-30.3525,-28.6828],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-30.3525 : -28.6828"),L.marker([-66.1344,-160.7432],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-66.1344 : -160.7432")])}}),L.KSP.CelestialBody.IKE=L.KSP.celestialBody({id:"ike",name:"Ike",crs:L.KSP.CRS.EPSG4326,radius:13e4,addedOn:13688352e5,lastUpdated:13688352e5,thumbnail:"body-ike.png",baseLayers:{Satellite:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SATELLITE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"sat",body:"ike"}),"Color Relief":L.KSP.tileLayer(L.KSP.TileLayer.TYPE_COLORRELIEF,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"color",body:"ike",legend:{"13000 m":"#828282","11000 m":"#6E6E6E","9000 m":"#5A5A5A","7000 m":"#464646","5000 m":"#323232","2500 m":"#191919","70 m":"#070707"}}),Slope:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SLOPE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"slope",body:"ike",legend:L.KSP.Legend.SLOPE})},overlays:{}}),L.KSP.CelestialBody.DRES=L.KSP.celestialBody({id:"dres",name:"Dres",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-dres.png"}),L.KSP.CelestialBody.JOOL=L.KSP.celestialBody({id:"jool",name:"Jool",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-jool.png"}),L.KSP.CelestialBody.LAYTHE=L.KSP.celestialBody({id:"laythe",name:"Laythe",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-laythe.png"}),L.KSP.CelestialBody.VALL=L.KSP.celestialBody({id:"vall",name:"Vall",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-vall.png"}),L.KSP.CelestialBody.TYLO=L.KSP.celestialBody({id:"tylo",name:"Tylo",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-tylo.png"}),L.KSP.CelestialBody.BOP=L.KSP.celestialBody({id:"bop",name:"Bop",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-bop.png"}),L.KSP.CelestialBody.POL=L.KSP.celestialBody({id:"pol",name:"Pol",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-pol.png"}),L.KSP.CelestialBody.EELOO=L.KSP.celestialBody({id:"eeloo",name:"Eeloo",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-eeloo.png"}),L.KSP.CelestialBody.KERBIN.defaultLayer=L.KSP.CelestialBody.KERBIN.baseLayers.Satellite,L.KSP.CelestialBody.MUN.defaultLayer=L.KSP.CelestialBody.MUN.baseLayers.Satellite,L.KSP.CelestialBody.MINMUS.defaultLayer=L.KSP.CelestialBody.MINMUS.baseLayers.Satellite,L.KSP.CelestialBody.EVE.children=[L.KSP.CelestialBody.GILLY],L.KSP.CelestialBody.KERBIN.children=[L.KSP.CelestialBody.MUN,L.KSP.CelestialBody.MINMUS],L.KSP.CelestialBody.DUNA.children=[L.KSP.CelestialBody.IKE],L.KSP.CelestialBody.JOOL.children=[L.KSP.CelestialBody.LAYTHE,L.KSP.CelestialBody.VALL,L.KSP.CelestialBody.TYLO,L.KSP.CelestialBody.BOP,L.KSP.CelestialBody.POL],L.KSP.CelestialBody.GILLY.parent=L.KSP.CelestialBody.EVE,L.KSP.CelestialBody.MUN.parent=L.KSP.CelestialBody.MINMUS.parent=L.KSP.CelestialBody.KERBIN,L.KSP.CelestialBody.IKE.parent=L.KSP.CelestialBody.DUNA,L.KSP.CelestialBody.LAYTHE.parent=L.KSP.CelestialBody.VALL.parent=L.KSP.CelestialBody.TYLO.parent=L.KSP.CelestialBody.BOP.parent=L.KSP.CelestialBody.POL.parent=L.KSP.CelestialBody.JOOL,L.KSP.CelestialBody.ALL_PLANETARY=[L.KSP.CelestialBody.MOHO,L.KSP.CelestialBody.EVE,L.KSP.CelestialBody.KERBIN,L.KSP.CelestialBody.DUNA,L.KSP.CelestialBody.DRES,L.KSP.CelestialBody.JOOL,L.KSP.CelestialBody.EELOO],L.KSP.Map.addInitHook(function(){this.options.layers=[L.KSP.CelestialBody.KERBIN]})}(this,document); +var Settings = Class.create({ + initialize: function(defaultHost, defaultPort){ + if(!this.getHost()){ this.setHost(defaultHost)} + if(!this.getPort()){ this.setPort(defaultPort)} + }, + + getHost: function(){ + return this.get('host') + }, + + getPort: function(){ + return this.get('port') + }, + + setHost: function(value){ + return this.set('host', value) + }, + + setPort: function(value){ + return this.set('port', value) + }, + + get: function(property){ + return localStorage.getItem(property) + }, + + set: function(property, value){ + return localStorage.setItem(property, value) + } +}) +var Telemachus = Class.create({ + initialize: function(host, port){ + this.updateConnection(host, port) + this.receiverFunctions = [] + this.subscribedFields = {} + this.orbitingBodies = this.getOrbitalBodies() + this.rate = 500 + + this.loopTimeout = setTimeout(this.poll.bind(this), this.rate) + }, + + url: function(){ + return "http://" + this.host + ":" + this.port + "/telemachus/datalink" + }, + + updateConnection: function(host, port){ + this.host = host + this.port = port + }, + + addReceiverFunction: function(func){ + this.receiverFunctions.push(func) + }, + + subscribeToData: function(fields){ + for (var i = fields.length - 1; i >= 0; i--) { + var field = fields[i] + this.subscribedFields[field] = field + }; + }, + + dispatchMessages: function(data){ + for (var i = this.receiverFunctions.length - 1; i >= 0; i--) { + try{ + this.receiverFunctions[i](data) + } catch(e){ + console.error(e) + } + }; + }, + + send: function(message){ + this.socket.send(JSON.stringify(message)) + }, + + getOrbitalBodyInfo: function(name){ + var properties = this.orbitingBodies[name] + + if(properties){ + return Object.extend({name: name}, properties) + } else{ + return null + } + }, + + notifyIfLOS: function(request){ + if(request.transport.status == 0){ + document.fire('telemachus:loss-of-signal') + return true + } + return false + }, + + prepareParams: function(params){ + var normalizedParams = [] + Object.keys(params).forEach(function(field){ + var sanitizedFieldName = field.replace("[", "{").replace("]","}") + normalizedParams.push(sanitizedFieldName + "=" + field) + }) + return normalizedParams + }, + + convertData: function(rawData){ + var data = {} + var startBracesRegexp = /\{/g + var endBracesRegexp = /\}/g + + Object.keys(rawData).forEach(function(key){ + var convertedFieldName = key.replace(startBracesRegexp, "[").replace(endBracesRegexp, "]") + data[convertedFieldName] = rawData[key] + }) + + return data + }, + + poll: function(){ + var params = this.prepareParams(this.subscribedFields) + var requestURL = this.url() + "?" + params.join("&") + + new Ajax.Request(requestURL, { + method: "get", + onSuccess: function(response){ + var rawData = JSON.parse(response.responseText) + var data = this.convertData(rawData) + + this.dispatchMessages(data) + }.bind(this), + onException: this.notifyIfLOS.bind(this), + onComplete: function(response){ + setTimeout(this.poll.bind(this),this.rate); + }.bind(this) + }) + }, + + sendMessage: function(params, callback){ + new Ajax.Request(this.url(), { + method: "post", + postBody: JSON.stringify(params), + // parameters: params, + onSuccess: function(response){ + var rawData = JSON.parse(response.responseText) + var data = this.convertData(rawData) + callback(data) + }.bind(this), + onException: this.notifyIfLOS.bind(this) + }) + }, + + cameraURL: function(){ + return "http://" + this.host + ":" + this.port + "/telemachus/cameras" + }, + + getCameraList: function(callback){ + new Ajax.Request(this.cameraURL(), { + method: "get", + // parameters: params, + onSuccess: function(response){ + var data = JSON.parse(response.responseText) + callback(data) + }.bind(this), + onException: this.notifyIfLOS.bind(this) + }) + }, + + getOrbitalBodies: function(){ + return { + "Sun" : { + id: 0, + referenceBodyName: null, + mapBody: null, + atmosphericRadius: 0, + color: '#FFFF00', + surfaceGravity: 17.1 //m/s^2, + }, + "Kerbin" : { + id: 1, + referenceBodyName: "Sun", + mapBody: L.KSP.CelestialBody.KERBIN, + atmosphericRadius: 70000, + color: '#4a5472', + surfaceGravity: 9.81 //m/s^2 + }, + "Mun" : { + id: 2, + referenceBodyName: "Kerbin", + mapBody: L.KSP.CelestialBody.MUN, + atmosphericRadius: 0, + color: '#e2e0d7', + surfaceGravity: 1.63 //m/s^2 + }, + "Minmus" : { + id: 3, + referenceBodyName: "Kerbin", + mapBody: L.KSP.CelestialBody.MINMUS, + color: '#98f2c5', + atmosphericRadius: 0, + surfaceGravity: 0.491 //m/s^2 + }, + "Moho" : { + id: 4, + referenceBodyName: "Sun", + mapBody: L.KSP.CelestialBody.MOHO, + atmosphericRadius: 0, + color: '#fdc39e', + surfaceGravity: 2.70 //m/s^2 + }, + "Eve" : { + id: 5, + referenceBodyName: "Sun", + mapBody: L.KSP.CelestialBody.EVE, + atmosphericRadius: 90000, + color: '#c394fe', + surfaceGravity: 16.7 //m/s^2 + }, + "Duna" : { + id: 6, + referenceBodyName: "Sun", + mapBody: L.KSP.CelestialBody.DUNA, + atmosphericRadius: 50000, + color: '#fc5e49', + surfaceGravity: 2.94 //m/s^2 + }, + "Ike" : { + id: 7, + referenceBodyName: "Duna", + mapBody: L.KSP.CelestialBody.IKE, + atmosphericRadius: 0, + color: '#e2e0d7', + surfaceGravity: 1.10 //m/s^2 + }, + "Jool" : { + id: 8, + referenceBodyName: "Sun", + mapBody: L.KSP.CelestialBody.JOOL, + atmosphericRadius: 200000, + color: '#C5DCAB', + surfaceGravity: 7.85 //m/s^2 + }, + "Laythe" : { + id: 9, + referenceBodyName: "Jool", + mapBody: L.KSP.CelestialBody.LAYTHE, + atmosphericRadius: 50000, + color: '#a8b4fe', + surfaceGravity: 7.85 //m/s^2 + }, + "Vall" : { + id: 10, + referenceBodyName: "Jool", + mapBody: L.KSP.CelestialBody.VALL, + atmosphericRadius: 0, + color: '#b0f4fe', + surfaceGravity: 2.31 //m/s^2 + }, + "Bop" : { + id: 11, + referenceBodyName: "Jool", + mapBody: L.KSP.CelestialBody.BOP, + atmosphericRadius: 0, + color: '#c64605', + surfaceGravity: 0.589 //m/s^2 + }, + "Tylo" : { + id: 12, + referenceBodyName: "Jool", + mapBody: L.KSP.CelestialBody.TYLO, + atmosphericRadius: 0, + color: '#fdf7ed', + surfaceGravity: 7.85 //m/s^2 + }, + "Gilly" : { + id: 13, + referenceBodyName: "Eve", + mapBody: L.KSP.CelestialBody.GILLY, + atmosphericRadius: 0, + color: '#fdcbb1', + surfaceGravity: 0.049 //m/s^2 + }, + "Pol" : { + id: 14, + referenceBodyName: "Pol", + mapBody: L.KSP.CelestialBody.POL, + atmosphericRadius: 0, + color: '#fec681', + surfaceGravity: 0.373 //m/s^2 + }, + "Dres" : { + id: 15, + referenceBodyName: "Sun", + mapBody: L.KSP.CelestialBody.DRES, + atmosphericRadius: 0, + color: '#fef8f9', + surfaceGravity: 1.13 //m/s^2 + }, + "Eeloo" : { + id: 16, + referenceBodyName: "Sun", + mapBody: L.KSP.CelestialBody.EELOO, + atmosphericRadius: 0, + color: '#e5fafe', + surfaceGravity: 1.69 //m/s^2 + } + } + } +}) +var TitleBar = Class.create({ + initialize: function(datalink, title_bar_id){ + this.datalink = datalink + this.title_bar_id = title_bar_id + this.title_bar = $(this.title_bar_id) + this.initializeLOSNotifier() + this.initializeDatalink() + }, + + update: function(data){ + window.requestAnimationFrame(function(){ + this.title_bar.down("#world-clock").update(TimeFormatters.formatUT(data["t.universalTime"])) + this.title_bar.down("#mission-time").update(TimeFormatters.formatMET(data["v.missionTime"])) + + this.title_bar.down("#mission-time").removeClassName("loss-of-signal") + }.bind(this)) + }, + + initializeLOSNotifier:function(){ + document.observe('telemachus:loss-of-signal', function(){ + window.requestAnimationFrame(function(){ + this.title_bar.down("#mission-time").update("⚠ LOS ⚠") + this.title_bar.down("#mission-time").addClassName("loss-of-signal") + }.bind(this)) + }.bind(this)) + }, + + initializeDatalink: function(){ + this.datalink.subscribeToData([ + 't.timeWarp', 't.universalTime', 'v.missionTime' + ]) + + this.datalink.addReceiverFunction(this.update.bind(this)) + }, +}) +var ButtonIndicator = Class.create({ + initialize: function(datalink, indicatorId, apiButtonString){ + this.datalink = datalink + this.indicatorId = indicatorId + this.indicator = $(this.indicatorId) + this.apiButtonString = apiButtonString + this.initializeDatalink() + }, + + update: function(data){ + if(data[this.apiButtonString] == true){ + this.indicator.addClassName("on") + } else{ + this.indicator.removeClassName("on") + } + }, + + initializeDatalink: function(){ + this.datalink.subscribeToData([this.apiButtonString]) + + this.datalink.addReceiverFunction(this.update.bind(this)) + }, +}) +var ReadoutTable = Class.create({ + initialize: function(datalink, tableId, dataRows){ + this.datalink = datalink + this.tableId = tableId + this.table = $(this.tableId) + this.dataRows = dataRows + this.initializeDatalink() + }, + + update: function(data){ + window.requestAnimationFrame(function(){ + this.dataRows.forEach(function(row){ + var rowId = row.label + var tableRow = this.table.down("tr[data-label='"+ rowId +"']") + + if(!tableRow){ + var tableRow = new Element("tr", { + "data-label" : rowId + }) + + tableRow.insert("" + row.label + "") + this.table.insert(tableRow) + } + + tableRow.down("td").update(row.formatter(data[row.value])) + }.bind(this)) + }.bind(this)) + }, + + initializeDatalink: function(){ + var dataValues = this.dataRows.map(function(dataRow){ + return dataRow.value + }) + + this.datalink.subscribeToData(dataValues) + + this.datalink.addReceiverFunction(this.update.bind(this)) + }, +}) +var ResourceMonitor = Class.create({ + initialize: function(datalink, resourceName, options){ + this.datalink = datalink + this.resourceName = resourceName + this.options = Object.extend({ + currentStageProgressBar: null, + totalProgressBar: null, + valuePrefix: null + }, options) + + this.resourceStrings = this.buildResourceStrings() + + this.initializeDatalink() + }, + + update: function(data){ + window.requestAnimationFrame(function(){ + if(this.options.totalProgressBar){ + this.options.totalProgressBar.value = data[this.resourceStrings.totalAvailable] + this.options.totalProgressBar.max = data[this.resourceStrings.totalMax] + } + + if(this.options.currentStageProgressBar){ + this.options.currentStageProgressBar.value = data[this.resourceStrings.currentStageAvailable] + this.options.currentStageProgressBar.max = data[this.resourceStrings.currentStageMax] + } + + this.updateValue("-total-value", data[this.resourceStrings.totalAvailable]) + this.updateValue("-total-max", data[this.resourceStrings.totalMax]) + + this.updateValue("-current-stage-value", data[this.resourceStrings.currentStageAvailable]) + this.updateValue("-current-stage-max", data[this.resourceStrings.currentStageMax]) + }.bind(this)) + }, + + updateValue: function(id, value){ + if($(this.options.valuePrefix + id)){ + if(value < 0){ + $(this.options.valuePrefix + id).update("NA") + } else{ + $(this.options.valuePrefix + id).update(value.toFixed(2)) + } + } + }, + + buildResourceStrings: function(){ + return { + totalAvailable: "r.resource["+ this.resourceName +"]", + totalMax: "r.resourceMax["+ this.resourceName +"]", + currentStageAvailable: "r.resourceCurrent["+ this.resourceName +"]", + currentStageMax: "r.resourceCurrentMax["+ this.resourceName +"]", + } + }, + + initializeDatalink: function(){ + this.datalink.subscribeToData([ + this.resourceStrings.totalAvailable, + this.resourceStrings.totalMax, + this.resourceStrings.currentStageAvailable, + this.resourceStrings.currentStageMax + ]) + + this.datalink.addReceiverFunction(this.update.bind(this)) + }, +}) +var DataTable = Class.create({ + initialize: function(tableID, dataRows){ + this.tableID = tableID + this.table = $(this.tableID) + this.dataRows = dataRows + }, + + update: function(){ + window.requestAnimationFrame(function(){ + this.dataRows.forEach(function(row){ + var rowId = row.label + var tableRow = this.table.down("tr[data-label='"+ rowId +"']") + + if(!tableRow){ + var tableRow = new Element("tr", { + "data-label" : rowId + }) + + tableRow.insert("" + row.label + "") + this.table.insert(tableRow) + } + + tableRow.down("td").update(row.value) + }.bind(this)) + }.bind(this)) + }, + + clear: function(){ + window.requestAnimationFrame(function(){ + this.dataRows = [] + this.table.innerHTML = "" + }.bind(this)) + } +}) +var AtmosphericDensityGauge = Class.create({ + initialize: function(datalink, gaugeID){ + this.datalink = datalink + this.gaugeID = gaugeID + this.gauge = $(this.gaugeID) + this.initializeDatalink() + this.func = function(x){return Math.log(2.0 * x)} + }, + + update: function(data){ + var max = this.func(100) + var value = this.func(data['v.atmosphericPressure'] * 100) + if(!isFinite(value)){ value = 0 } + + this.gauge.value = value + this.gauge.max = max + }, + + initializeDatalink: function(){ + this.datalink.subscribeToData(['v.atmosphericPressure']) + + this.datalink.addReceiverFunction(this.update.bind(this)) + }, +}) +var ThrottleGauge = Class.create({ + initialize: function(datalink, gaugeID){ + this.datalink = datalink + this.gaugeID = gaugeID + this.gauge = $(this.gaugeID) + this.initializeDatalink() + }, + + update: function(data){ + this.gauge.value = data['f.throttle'] * 100 + this.gauge.max = 100 + }, + + initializeDatalink: function(){ + this.datalink.subscribeToData(['f.throttle']) + + this.datalink.addReceiverFunction(this.update.bind(this)) + }, +}) +var OrbitalMath = { + partsOfUniversalDateTime: function(time){ + var parts = {} + if (time == null) { + time = 0; + } + parts.year = ((time / (365 * 24 * 3600)) | 0) + 1; + time %= 365 * 24 * 3600; + parts.day = ((time / (24 * 3600)) | 0) + 1; + time %= 24 * 3600; + parts.universalTime = time + + parts.hour = (time / 3600) | 0; + time %= 3600; + parts.minutes = (time / 60) | 0; + parts.seconds = (time % 60 | 0).toFixed(); + + return parts + }, + + calculateGMSTInDegrees: function(universalDateTime){ + var timeParts = partsOfUniversalDateTime(universalDateTime) + var G = 6.697374558 + var dayFactor = 0.06570982441908 + var timeFactor = 1.00273790935 + return G + (dayFactor * timeParts.day) + (timeFactor * timeParts.hour) + }, + + eccentricAnomalyFromTrueAnomalyAndEcentricity: function(trueAnomaly, eccentricity){ + return 2 * Math.atan(Math.sqrt((1-eccentricity)/(1+eccentricity)) * Math.tan(trueAnomaly/2)) + }, + + meanMotionFromGravitationalParametersAndSemimajorAxis: function(gravitationalParameter, semiMajorAxis, orbitalPeriod){ + // console.log("mu : " + gravitationalParameter + " SMA : " + semiMajorAxis) + // return orbitalPeriod * Math.sqrt(gravitationalParameter/(4 * Math.pow(Math.PI, 2) * Math.pow(semiMajorAxis, 3))) + return Math.sqrt(gravitationalParameter/Math.pow(semiMajorAxis, 3)) + }, + + meanAnomalyFromEccentricAnomalyAndEccentricity: function(eccentricAnomaly, eccentricity){ + return eccentricAnomaly - eccentricity * Math.sin(eccentricAnomaly) + }, + + meanAnomalyAtTimeAndMeanMotion: function(meanMotion, startTime, endTime, originalMeanAnomaly){ + var deltaT = endTime - startTime + return originalMeanAnomaly + meanMotion * deltaT + }, + + estimateEccentricAnomalyFromMeanAnomalyAndEccentricity: function(meanAnomaly, eccentricity){ + var error = 100 + var eccentricAnomaly1 = meanAnomaly + + while(error > 0.00000000001){ + var newEccentricAnomaly = meanAnomaly + (eccentricity * Math.sin(eccentricAnomaly1)) + error = Math.abs(newEccentricAnomaly - eccentricAnomaly1) + eccentricAnomaly1 = newEccentricAnomaly + } + return eccentricAnomaly1 + }, + + trueAnomalyFromEccentricAnomalyAndEccentricity: function(eccentricAnomaly, eccentricity, meanAnomaly){ + // var factor1 = Math.sqrt(1.0 - Math.pow(eccentricity, 2)) * Math.sin(eccentricAnomaly) + // var factor2 = 1 - eccentricity * Math.cos(eccentricAnomaly) + + // if(longitudeOfAscendingNodeInDegrees > 90 && longitudeOfAscendingNodeInDegrees <= 360){ + // var inversion = Math.toRadians(360) + // } else{ + // var inversion = 0 + // } + + var x = Math.sqrt(1 - eccentricity) * Math.cos(eccentricAnomaly/2) + var y = Math.sqrt(1 + eccentricity) * Math.sin(eccentricAnomaly/2) + + return 2 * Math.atan2(y,x) + + // return Math.asin(factor1/factor2) + }, + + findSemiLatusRectum: function(semiMajorAxis, eccentricity){ + // var x = semiMajorAxis * (1 - Math.pow(eccentricity, 2)) + // console.log("semi latus rectum: " + x) + + var apoapsis = 320565.458678732 + var periapsis = 102454.341836878 + + return (2 * apoapsis * periapsis ) / (apoapsis + periapsis) + // return x + }, + + findPolarEquationOfConic: function(semiMajorAxis, eccentricity, trueAnomaly){ + var p = this.findSemiLatusRectum(semiMajorAxis, eccentricity) + // console.log("p: " + p) + // console.log("factor: " + (1 + eccentricity * Math.cos(trueAnomaly))) + return p/(1 + eccentricity * Math.cos(trueAnomaly)) + }, + + positionVectorInPQWFrame: function(semiMajorAxis, eccentricity, trueAnomaly){ + var r = this.findPolarEquationOfConic(semiMajorAxis, eccentricity, trueAnomaly) + var vector = {} + vector.p = r * Math.cos(trueAnomaly) + vector.q = r * Math.sin(trueAnomaly) + vector.w = 0 + // console.log("trueAnomaly: " + trueAnomaly) + // console.log("r: " + r) + // console.log(JSON.stringify(vector)) + return vector + }, + + velocityVectorInPQWFrame: function(semiMajorAxis, eccentricity, trueAnomaly, gravitationalParameter){ + var p = findSemiLatusRectum(semiMajorAxis, eccentricity) + var factor = Math.sqrt(gravitationalParameter/p) + var vector = {} + vector.p = -Math.sin(trueAnomaly) + vector.q = eccentricity + Math.cos(trueAnomaly) + vector.w = 0 + return vector + }, + + transformVector: function(matrix, vector){ + var vectorKeys = Object.keys(vector) + var newVector = {} + //iterate through the rows of the matrix + for (var i = 0; i < matrix.length; i++) { + var row = matrix[i] + var derivativeVector = vectorKeys[i] + //iterate through the columns + for (var j = 0; j < vectorKeys.length; j++) { + var currentKey = vectorKeys[j] + if(!newVector[derivativeVector]){ newVector[derivativeVector] = 0 } + newVector[derivativeVector] += vector[currentKey] * row[j] + } + } + return newVector + }, + + // Thank god for: https://en.wikipedia.org/wiki/Perifocal_coordinate_system + transformPositionPQWVectorToIJKFrame: function(vector, inclination, longitudeOfAscendingNode, argumentOfPeriapsis){ + var vectorIJK = {} + var omega = longitudeOfAscendingNode + var w = argumentOfPeriapsis + var i = inclination + + //Column, row order. First level is columns, each column has N rows + var transformationMatrix = [ + [ + // 1 1 + Math.cos(omega) * Math.cos(w) - Math.sin(omega) * Math.sin(w) * Math.cos(i), + // 1 2 + -Math.cos(omega) * Math.sin(w) - Math.sin(omega)* Math.cos(w) * Math.cos(i), + // 1 2 + Math.sin(omega) * Math.sin(i) + ], + [ + // 2 1 + Math.sin(omega) * Math.cos(w) + Math.cos(omega) * Math.sin(w) * Math.cos(i), + // 2 2 + -Math.sin(omega) * Math.sin(w) + Math.cos(omega) * Math.cos(w) * Math.cos(i), + // 2 3 + -Math.cos(omega) * Math.sin(i), + ], + [ + // 3 1 + Math.sin(w) * Math.sin(i), + // 3 2 + Math.cos(w) * Math.sin(i), + // 3 3 + Math.cos(i) + ] + ] + + var transformedPQW = this.transformVector(transformationMatrix, vector) + vectorIJK.i = transformedPQW.p + vectorIJK.j = transformedPQW.q + vectorIJK.k = transformedPQW.w + + return vectorIJK + }, + + findLatitudeOfPositionUnitVector: function(vector){ + var x = Math.sqrt(Math.pow(vector.i, 2) + Math.pow(vector.j, 2)) + var z = vector.k + + return Math.atan(z/x) + }, + + angularFrequencyOfBody: function(period){ + return (2 * Math.PI)/period + }, + + calculateGMSTInRadiansForOrigin: function(vector, longitude){ + var theta = Math.atan(vector.j/vector.i) + return theta - longitude + }, + + findLongitudeOfPositonUnitVector: function(vector, angularVelocityOfPlanet, startTime, endTime, GMSTInRadians){ + var deltaT = endTime - startTime + var quadrant = vector.j > 0 ? 1 : -1 + var theta = Math.atan(vector.j/vector.i) + return theta - GMSTInRadians - (angularVelocityOfPlanet * deltaT) + }, + + TWR: function(thrust, totalMass, surfaceGravity){ + return (thrust)/(totalMass * surfaceGravity) + }, + + MaxTWR: function(maxAcceleration, surfaceGravity){ + return maxAcceleration/surfaceGravity + }, + + secondsToUseFuelAtCurrentThrust: function(massOfFuel, thrust, isp){ + if(thrust <= 0 || isp <= 0){ return -1} + return (massOfFuel)/((thrust/isp) * (1/9.81)) + }, + + // returns in tons + weightOfFuelUsedDuringBurn: function(thrust, isp, deltaT){ + return (thrust/isp) * (1/9.81) * deltaT; + }, + + deltaVForBurn: function(thrust, startMass, endMass, deltaT){ + if(deltaT > 0 && startMass > endMass && startMass > 0 && endMass > 0){ + return thrust * deltaT / (startMass - endMass) * Math.log(startMass/endMass) + } else { + return 0.0 + } + } +} +var CurrentStageBurnInfo = Class.create({ + initialize: function(datalink, atmoTableID, vacuumTableID){ + this.datalink = datalink + this.atmoTableID = atmoTableID + this.vacuumTableID = vacuumTableID + + this.atmoDataTable = new DataTable(this.atmoTableID, []) + this.vacuumDataTable = new DataTable(this.vacuumTableID, []) + + this.currentStageAtmo = null + this.currentStageVacuum = null + this.currentBody = null + this.initializeDatalink() + }, + + update: function(data){ + // don't do anything if we don't have any staging info + if(!data['mj.stagingInfo']){return } + + //update the body as necessary + if(this.currentBody == null || this.currentBody.name != data['v.body']){ + this.currentBody = this.datalink.getOrbitalBodyInfo(data['v.body']) + } + + // Calculate the info for the current stage in Atmo + if(data['mj.stagingInfo']["atmo"]){ + //The current stage is always the last stage + this.currentStageAtmo = this.calculateStageInfo( + data['mj.stagingInfo']['atmo'].last(), data + ) + } + + // Calculate the info for the current stage in a Vaccuum + if(data['mj.stagingInfo']["vacuum"]){ + //The current stage is always the last stage + this.currentStageVacuum = this.calculateStageInfo( + data['mj.stagingInfo']['vacuum'].last(), data + ) + } + + // Now update the tables + this.atmoDataTable.dataRows = this.dataRowsForStage( + this.currentStageAtmo, data + ) + + this.vacuumDataTable.dataRows = this.dataRowsForStage( + this.currentStageVacuum, data + ) + + this.atmoDataTable.update() + this.vacuumDataTable.update() + }, + + subscribeToBodyData: function(data){ + this.currentBody = this.datalink.getOrbitalBodyInfo(data['v.body']) + this.datalink.subscribeToData([ + 'b.o.gravParameter[' + this.currentBody.id + ']' + ]) + }, + + calculateStageInfo: function(stage, data){ + stage["currentThrust"] = stage["startThrust"] * data['f.throttle'] + stage["currentTWR"] = OrbitalMath.TWR(stage["currentThrust"], + stage["startMass"], this.currentBody.surfaceGravity + ) + + stage["timeUntilEmpty"] = OrbitalMath.secondsToUseFuelAtCurrentThrust( + stage["resourceMass"], stage["currentThrust"], stage["isp"] + ) + + return stage + }, + + dataRowsForStage: function(stage, data){ + var timeUntilEmpty = stage["timeUntilEmpty"] <= 0 ? "NA" : DataFormatters.timeString(stage["timeUntilEmpty"]) + return [ + { + label: "Current Thrust", + value: DataFormatters.newtonsString(stage["currentThrust"]) + " (" + DataFormatters.percentageString(data['f.throttle']) + ")" + }, + { + label: "TWR", + value: DataFormatters.plainNumberString(stage["currentTWR"]) + }, + { + label: "Remaining Fuel", + value: DataFormatters.tonnageString(stage["resourceMass"]) + }, + { + label: "Time until empty", + value: timeUntilEmpty + } + ] + }, + + initializeDatalink: function(){ + this.datalink.subscribeToData(['mj.stagingInfo', 'f.throttle', 'v.body']) + + this.datalink.addReceiverFunction(this.update.bind(this)) + }, +}) +var StagingInfoTable = Class.create({ + initialize: function(datalink, stagingInfoTableID){ + this.datalink = datalink + this.stagingInfoTableID = stagingInfoTableID + + this.stagingInfoTable = $(this.stagingInfoTableID) + this.stagingInfoTableHeader = null + this.stagingInfoTableBody = null + + this.currentBody = null + + this.initializeTable() + this.initializeDatalink() + }, + + update: function(data){ + if(!data['mj.stagingInfo']){ + this.stagingInfoTableBody.update("") + return + } + + //update the body as necessary + if(this.currentBody == null || this.currentBody.name != data['v.body']){ + this.currentBody = this.datalink.getOrbitalBodyInfo(data['v.body']) + } + + var stagingInfo = data['mj.stagingInfo'] + var stages = stagingInfo['atmo'].length + if(stages <= 0){ return } + + var documentFragment = document.createDocumentFragment() + for (var i = 0; i < stages; i++) { + var stageAtmo = stagingInfo["atmo"][i] + var stageVacuum = stagingInfo["vacuum"][i] + + var row = document.createElement("tr") + + var thrust = Math.min(stageAtmo["startThrust"], + stageVacuum["startThrust"] + ) + + var TWR = OrbitalMath.TWR(thrust, stageAtmo["startMass"], + this.currentBody.surfaceGravity + ) + + if(isNaN(TWR)){ TWR = 0.00 } + + var maxAccel = Math.min(stageAtmo["maxAccel"],stageVacuum["maxAccel"]) + + var MaxTWR = OrbitalMath.MaxTWR(maxAccel, + this.currentBody.surfaceGravity + ) + + if(isNaN(MaxTWR)){ MaxTWR = 0.00 } + + var ISP = Math.min(stageAtmo["isp"],stageVacuum["isp"]) + + var atmoDeltaV = stageAtmo["deltaV"] + var vacuumDeltaV = stageVacuum["deltaV"] + + var time = Math.min(stageAtmo["deltaTime"],stageVacuum["deltaTime"]) + + this.addColumnToRow(row, i) //stage + //start mass + this.addColumnToRow(row, DataFormatters.tonnageString(stageAtmo["startMass"])) + //end mass + this.addColumnToRow(row, DataFormatters.tonnageString(stageAtmo["endMass"])) + + //staged mass + this.addColumnToRow(row, DataFormatters.tonnageString(stageAtmo["stagedMass"])) + + //burned mass + this.addColumnToRow(row, DataFormatters.tonnageString(stageAtmo["resourceMass"])) + + //TWR + this.addColumnToRow(row, DataFormatters.plainNumberString(TWR)) + + //Max TWR + this.addColumnToRow(row, DataFormatters.plainNumberString(MaxTWR)) + + //ISP + this.addColumnToRow(row, DataFormatters.plainNumberString(ISP)) + + //atmo delta v + this.addColumnToRow(row, DataFormatters.velocityString(atmoDeltaV)) + + //vacuum delta v + this.addColumnToRow(row, DataFormatters.velocityString(vacuumDeltaV)) + + // time + this.addColumnToRow(row, DataFormatters.timeString(time)) + + documentFragment.appendChild(row) + } + + window.requestAnimationFrame(function(){ + this.stagingInfoTableBody.innerHTML = "" + this.stagingInfoTableBody.appendChild(documentFragment) + }.bind(this)) + }, + + addColumnToRow: function(row, columnValue){ + row.appendChild(document.createElement("td").update(columnValue)) + }, + + initializeTable: function(){ + var documentFragment = document.createDocumentFragment() + this.stagingInfoTableHeader = document.createElement("thead") + var headerRow = this.stagingInfoTableHeader.appendChild(document.createElement("tr")) + + var columns = ["Stage", "Start Mass", "End Mass", "Staged Mass", + "Burned Mass", "TWR", "Max TWR", "ISP", "Atmo ΔV", "Vac ΔV", + "Time" + ] + + for (var i = 0; i < columns.length; i++) { + var name = columns[i] + var element = document.createElement("th") + element.update(name) + headerRow.appendChild(element) + }; + + this.stagingInfoTableBody = document.createElement("tbody") + + documentFragment.appendChild(this.stagingInfoTableHeader) + documentFragment.appendChild(this.stagingInfoTableBody) + + this.stagingInfoTable.appendChild(documentFragment) + }, + + initializeDatalink: function(){ + this.datalink.subscribeToData(['mj.stagingInfo', 'v.body']) + + this.datalink.addReceiverFunction(this.update.bind(this)) + }, +}) \ No newline at end of file diff --git a/public/assets/stylesheets/application.css b/public/assets/stylesheets/application.css index 651dc75..83a7ff8 100644 --- a/public/assets/stylesheets/application.css +++ b/public/assets/stylesheets/application.css @@ -265,6 +265,10 @@ h1{ text-align: center; } +.gauge .readout-display h2{ + text-shadow: none; +} + .readout-display input, .readout-display button, .readout-display select{ border: 2px solid #FD7E23; background-color: #3A1604; diff --git a/public/assets/stylesheets/ascension.css b/public/assets/stylesheets/ascension.css index 30df3c9..1ac8d1c 100644 --- a/public/assets/stylesheets/ascension.css +++ b/public/assets/stylesheets/ascension.css @@ -69,3 +69,19 @@ text-align: right; } +.camera{ + height: 250px; + width: 300px; + margin-left: 10px; + margin-right: 10px; +} + +.camera .readout-display{ + min-height: 200px; + min-width: 200px; +} + +.camera .camera-image-wrapper, #camera-image{ + width: 160px; + height: 160px; +} \ No newline at end of file diff --git a/public/assets/stylesheets/camera.css b/public/assets/stylesheets/camera.css new file mode 100644 index 0000000..373feea --- /dev/null +++ b/public/assets/stylesheets/camera.css @@ -0,0 +1,15 @@ +.camera{ + height: 600px; + width: 600px; + margin: auto; +} + +.camera .readout-display{ + min-height: 500px; + min-width: 500px; +} + +.camera .camera-image-wrapper, #camera-image{ + width: 500px; + height: 500px; +} \ No newline at end of file diff --git a/public/assets/stylesheets/camera_module.css b/public/assets/stylesheets/camera_module.css new file mode 100644 index 0000000..f462442 --- /dev/null +++ b/public/assets/stylesheets/camera_module.css @@ -0,0 +1,152 @@ + +.camera .camera-list-button-wrapper{ + text-align: right; +} + +.camera button#show-camera-list{ + margin-top: 5px; + padding: 3px; + + font-family: 'AeroMatics Display Bold'; + font-size: 17px; + + cursor: pointer; + border: 0px solid #000000; + /*color: hsl(0,0%,90%);*/ + + color: hsla(0,0%,20%,1); + text-shadow: hsla(0,0%,40%,.5) 0 -1px 0, hsla(0,0%,100%,.6) 0 1px 1px; + + /*background: #4A4A4A;*/ + border: 3px solid #4A4A4A; + box-shadow: 0px 2px 4px 0px rgba(0,0,0,0.50); + border-radius: 3px; +} + +.camera .readout-display{ + min-width: 300px; + min-height: 300px; + position: relative; + overflow: hidden; +} + +.camera .readout-display h2{ + margin-bottom: 5px; + margin-top: 0px; +} + +.camera .readout-display ul{ + list-style: none; + padding: 0px; + margin-top: 0px; + margin-bottom: 0px; +} + +.camera .readout-display ul li{ + margin-bottom: 5px; +} + +.camera .readout-display ul button{ + width: 100%; + cursor: pointer; + font-weight: bold; +} + +.camera .readout-display ul button.selected, .camera .readout-display ul button:active{ + color: #642607; + background-color: #FD7E23; +} + +.camera .camera-selector{ + height: 100%; + overflow-y: scroll; +} + +.camera .camera-display { + text-align: center; +} + +.camera .camera-image-wrapper{ + display: inline-block; + width: 300px; + height: 300px; + border: 2px solid #FD7E23; + border-radius: 3px; +} + +.camera .camera-selector{ + background-color: #3A1604; + position: absolute; + right: 0; + left: 0; + margin-left: 5px; + margin-right: 5px; + z-index: 3; + + transform: translateY(0%); + + -webkit-transition: all 600ms cubic-bezier(0.785, 0.135, 0.15, 0.86); + transition: all 600ms cubic-bezier(0.785, 0.135, 0.15, 0.86); +} + +.camera .camera-selector.hidden{ + display: inherit; + transform: translateY(110%); + -webkit-transform: translateY(110%); +} + +.scanlines { + position: relative; + overflow: hidden; +} +.scanlines:before, .scanlines:after { + display: block; + pointer-events: none; + content: ''; + position: absolute; +} +.scanlines:before { + width: 100%; + height: 2px; + z-index: 1; + background: rgba(0, 0, 0, 0.3); + opacity: 0.75; + -webkit-animation: scanline 6s linear infinite; + animation: scanline 6s linear infinite; +} +.scanlines:after { + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1; + background: -webkit-linear-gradient(top, transparent 50%, rgba(0, 0, 0, 0.3) 51%); + background: linear-gradient(to bottom, transparent 50%, rgba(0, 0, 0, 0.3) 51%); + background-size: 100% 4px; + -webkit-animation: none; + animation: none; +} + +/* ANIMATE UNIQUE SCANLINE */ +@-webkit-keyframes scanline { + 0% { + -webkit-transform: translate3d(0, 200000%, 0); + transform: translate3d(0, 200000%, 0); + } +} +@keyframes scanline { + 0% { + -webkit-transform: translate3d(0, 200000%, 0); + transform: translate3d(0, 200000%, 0); + } +} +@-webkit-keyframes scanlines { + 0% { + background-position: 0 50%; + } +} +@keyframes scanlines { + 0% { + background-position: 0 50%; + } +} \ No newline at end of file diff --git a/public/assets/stylesheets/docking.css b/public/assets/stylesheets/docking.css index 8f51c51..72a4273 100644 --- a/public/assets/stylesheets/docking.css +++ b/public/assets/stylesheets/docking.css @@ -91,4 +91,8 @@ html, body, #content{ #docking-info{ margin-left: 5px; margin-right: 5px; +} + +#camera{ + margin-left: 5px; } \ No newline at end of file diff --git a/public/assets/stylesheets/landing.css b/public/assets/stylesheets/landing.css index b542fcc..3888e86 100644 --- a/public/assets/stylesheets/landing.css +++ b/public/assets/stylesheets/landing.css @@ -1,4 +1,4 @@ -#top-panel{ +#top-panel, #bottom-panel{ display: -webkit-box; /* OLD - iOS 6-, Safari 3.1-6 */ display: -moz-box; /* OLD - Firefox 19- (buggy but mostly works) */ display:-webkit-flex; @@ -10,6 +10,9 @@ justify-content: space-around; } +#bottom-panel div:last-child{ + flex-grow: 2; +} #gt-map-container{ margin-right: auto; @@ -75,4 +78,21 @@ #ablator-readout progress{ width: 100%; +} + +.camera{ + height: 300px; + width: 300px; + margin-left: 10px; + margin-right: 10px; +} + +.camera .readout-display{ + min-height: 200px; + min-width: 200px; +} + +.camera .camera-image-wrapper, #camera-image{ + width: 200px; + height: 200px; } \ No newline at end of file diff --git a/public/assets/stylesheets/mission-wall.css b/public/assets/stylesheets/mission-wall.css index 1caa77e..fc94576 100644 --- a/public/assets/stylesheets/mission-wall.css +++ b/public/assets/stylesheets/mission-wall.css @@ -40,7 +40,7 @@ transform-origin: left; } -#ground-track-wrapper{ +#ground-track-wrapper, #map-and-camera-wrapper{ margin-bottom: 10px; display: -webkit-box; /* OLD - iOS 6-, Safari 3.1-6 */ @@ -54,9 +54,17 @@ } -#orbital-map-container{ - width:50%; - flex-grow: 1; +#orbital-map-and-camera-container-test{ + display: -webkit-box; /* OLD - iOS 6-, Safari 3.1-6 */ + display: -moz-box; /* OLD - Firefox 19- (buggy but mostly works) */ + display:-webkit-flex; + display:-webkit-flexbox; + display:-ms-flex; + display: flex; + -webkit-flex-direction: row; + flex-direction: row; + + flex: 1; position: relative; } @@ -68,6 +76,8 @@ #orbital-map-container{ display: flex; flex-direction: column; + flex: 1 1 auto; + max-width: 50%; } #orbital-map{ @@ -84,4 +94,21 @@ #orbital-map-container .dg.main input{ font-family: sans-serif; +} + +.camera{ + height: 250px; + width: 300px; + margin-left: 10px; + margin-right: 10px; +} + +.camera .readout-display{ + min-height: 200px; + min-width: 200px; +} + +.camera .camera-image-wrapper, #camera-image{ + width: 150px; + height: 150px; } \ No newline at end of file diff --git a/public/assets/stylesheets/vessel-overview.css b/public/assets/stylesheets/vessel-overview.css index 3a54c7e..e03e963 100644 --- a/public/assets/stylesheets/vessel-overview.css +++ b/public/assets/stylesheets/vessel-overview.css @@ -120,6 +120,24 @@ width: 100%; } -#orbital-data{ +#orbital-data-and-buttons{ margin-left: auto; } + + +.camera{ + height: 250px; + width: 300px; + margin-left: 10px; + margin-right: 10px; +} + +.camera .readout-display{ + min-height: 200px; + min-width: 200px; +} + +.camera .camera-image-wrapper, #camera-image{ + width: 160px; + height: 160px; +} \ No newline at end of file diff --git a/public/assets/sysops.js b/public/assets/sysops.js index 9942ecc..cf94a0c 100644 --- a/public/assets/sysops.js +++ b/public/assets/sysops.js @@ -1,16 +1,8655 @@ -Math.toDegrees=function(angleInRadians){return angleInRadians*(180/Math.PI)};Math.toRadians=function(angleInDegrees){return angleInDegrees*(Math.PI/180)};Math.crossProduct=function(x,y){[x[1]*y[2]-x[2]*y[1],x[2]*y[0]-x[0]*y[2],x[0]*y[1]-x[1]*y[0]]};Math.sign=Math.sign||function(x){x=+x;if(x===0||isNaN(x)){return x}return x>0?1:-1};Math.cosh=Math.cosh||function(x){return(Math.exp(x)+Math.exp(-x))/2};Math.sinh=Math.sinh||function(x){return(Math.exp(x)-Math.exp(-x))/2};Math.matrixAdd=Math.matrixAdd||function(){var arrays=arguments,results=[],count=arrays[0].length,L=arrays.length,sum,next=0,i;while(next-1?e(a,b,c):b.indexOf("%")>-1?f(a,b,c):b.indexOf(":")>-1?g(a,b):i(a._value,b,c)}function d(a,b){var c,d,e,f,g,i=b,j=["KB","MB","GB","TB","PB","EB","ZB","YB"],k=!1;if(b.indexOf(":")>-1)a._value=h(b);else if(b===q)a._value=0;else{for("."!==o[p].delimiters.decimal&&(b=b.replace(/\./g,"").replace(o[p].delimiters.decimal,".")),c=new RegExp("[^a-zA-Z]"+o[p].abbreviations.thousand+"(?:\\)|(\\"+o[p].currency.symbol+")?(?:\\))?)?$"),d=new RegExp("[^a-zA-Z]"+o[p].abbreviations.million+"(?:\\)|(\\"+o[p].currency.symbol+")?(?:\\))?)?$"),e=new RegExp("[^a-zA-Z]"+o[p].abbreviations.billion+"(?:\\)|(\\"+o[p].currency.symbol+")?(?:\\))?)?$"),f=new RegExp("[^a-zA-Z]"+o[p].abbreviations.trillion+"(?:\\)|(\\"+o[p].currency.symbol+")?(?:\\))?)?$"),g=0;g<=j.length&&!(k=b.indexOf(j[g])>-1?Math.pow(1024,g+1):!1);g++);a._value=(k?k:1)*(i.match(c)?Math.pow(10,3):1)*(i.match(d)?Math.pow(10,6):1)*(i.match(e)?Math.pow(10,9):1)*(i.match(f)?Math.pow(10,12):1)*(b.indexOf("%")>-1?.01:1)*((b.split("-").length+Math.min(b.split("(").length-1,b.split(")").length-1))%2?1:-1)*Number(b.replace(/[^0-9\.]+/g,"")),a._value=k?Math.ceil(a._value):a._value}return a._value}function e(a,b,c){var d,e,f=b.indexOf("$"),g=b.indexOf("("),h=b.indexOf("-"),j="";return b.indexOf(" $")>-1?(j=" ",b=b.replace(" $","")):b.indexOf("$ ")>-1?(j=" ",b=b.replace("$ ","")):b=b.replace("$",""),e=i(a._value,b,c),1>=f?e.indexOf("(")>-1||e.indexOf("-")>-1?(e=e.split(""),d=1,(g>f||h>f)&&(d=0),e.splice(d,0,o[p].currency.symbol+j),e=e.join("")):e=o[p].currency.symbol+j+e:e.indexOf(")")>-1?(e=e.split(""),e.splice(-1,0,j+o[p].currency.symbol),e=e.join("")):e=e+j+o[p].currency.symbol,e}function f(a,b,c){var d,e="",f=100*a._value;return b.indexOf(" %")>-1?(e=" ",b=b.replace(" %","")):b=b.replace("%",""),d=i(f,b,c),d.indexOf(")")>-1?(d=d.split(""),d.splice(-1,0,e+"%"),d=d.join("")):d=d+e+"%",d}function g(a){var b=Math.floor(a._value/60/60),c=Math.floor((a._value-60*b*60)/60),d=Math.round(a._value-60*b*60-60*c);return b+":"+(10>c?"0"+c:c)+":"+(10>d?"0"+d:d)}function h(a){var b=a.split(":"),c=0;return 3===b.length?(c+=60*Number(b[0])*60,c+=60*Number(b[1]),c+=Number(b[2])):2===b.length&&(c+=60*Number(b[0]),c+=Number(b[1])),Number(c)}function i(a,c,d){var e,f,g,h,i,j,k=!1,l=!1,m=!1,n="",r=!1,s=!1,t=!1,u=!1,v=!1,w="",x="",y=Math.abs(a),z=["B","KB","MB","GB","TB","PB","EB","ZB","YB"],A="",B=!1;if(0===a&&null!==q)return q;if(c.indexOf("(")>-1?(k=!0,c=c.slice(1,-1)):c.indexOf("+")>-1&&(l=!0,c=c.replace(/\+/g,"")),c.indexOf("a")>-1&&(r=c.indexOf("aK")>=0,s=c.indexOf("aM")>=0,t=c.indexOf("aB")>=0,u=c.indexOf("aT")>=0,v=r||s||t||u,c.indexOf(" a")>-1?(n=" ",c=c.replace(" a","")):c=c.replace("a",""),y>=Math.pow(10,12)&&!v||u?(n+=o[p].abbreviations.trillion,a/=Math.pow(10,12)):y=Math.pow(10,9)&&!v||t?(n+=o[p].abbreviations.billion,a/=Math.pow(10,9)):y=Math.pow(10,6)&&!v||s?(n+=o[p].abbreviations.million,a/=Math.pow(10,6)):(y=Math.pow(10,3)&&!v||r)&&(n+=o[p].abbreviations.thousand,a/=Math.pow(10,3))),c.indexOf("b")>-1)for(c.indexOf(" b")>-1?(w=" ",c=c.replace(" b","")):c=c.replace("b",""),g=0;g<=z.length;g++)if(e=Math.pow(1024,g),f=Math.pow(1024,g+1),a>=e&&f>a){w+=z[g],e>0&&(a/=e);break}return c.indexOf("o")>-1&&(c.indexOf(" o")>-1?(x=" ",c=c.replace(" o","")):c=c.replace("o",""),x+=o[p].ordinal(a)),c.indexOf("[.]")>-1&&(m=!0,c=c.replace("[.]",".")),h=a.toString().split(".")[0],i=c.split(".")[1],j=c.indexOf(","),i?(i.indexOf("[")>-1?(i=i.replace("]",""),i=i.split("["),A=b(a,i[0].length+i[1].length,d,i[1].length)):A=b(a,i.length,d),h=A.split(".")[0],A=A.split(".")[1].length?o[p].delimiters.decimal+A.split(".")[1]:"",m&&0===Number(A.slice(1))&&(A="")):h=b(a,null,d),h.indexOf("-")>-1&&(h=h.slice(1),B=!0),j>-1&&(h=h.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g,"$1"+o[p].delimiters.thousands)),0===c.indexOf(".")&&(h=""),(k&&B?"(":"")+(!k&&B?"-":"")+(!B&&l?"+":"")+h+A+(x?x:"")+(n?n:"")+(w?w:"")+(k&&B?")":"")}function j(a,b){o[a]=b}function k(a){var b=a.toString().split(".");return b.length<2?1:Math.pow(10,b[1].length)}function l(){var a=Array.prototype.slice.call(arguments);return a.reduce(function(a,b){var c=k(a),d=k(b);return c>d?c:d},-1/0)}var m,n="1.5.3",o={},p="en",q=null,r="0,0",s="undefined"!=typeof module&&module.exports;m=function(b){return m.isNumeral(b)?b=b.value():0===b||"undefined"==typeof b?b=0:Number(b)||(b=m.fn.unformat(b)),new a(Number(b))},m.version=n,m.isNumeral=function(b){return b instanceof a},m.language=function(a,b){if(!a)return p;if(a&&!b){if(!o[a])throw new Error("Unknown language : "+a);p=a}return(b||!o[a])&&j(a,b),m},m.languageData=function(a){if(!a)return o[p];if(!o[a])throw new Error("Unknown language : "+a);return o[a]},m.language("en",{delimiters:{thousands:",",decimal:"."},abbreviations:{thousand:"k",million:"m",billion:"b",trillion:"t"},ordinal:function(a){var b=a%10;return 1===~~(a%100/10)?"th":1===b?"st":2===b?"nd":3===b?"rd":"th"},currency:{symbol:"$"}}),m.zeroFormat=function(a){q="string"==typeof a?a:null},m.defaultFormat=function(a){r="string"==typeof a?a:"0.0"},"function"!=typeof Array.prototype.reduce&&(Array.prototype.reduce=function(a,b){"use strict";if(null===this||"undefined"==typeof this)throw new TypeError("Array.prototype.reduce called on null or undefined");if("function"!=typeof a)throw new TypeError(a+" is not a function");var c,d,e=this.length>>>0,f=!1;for(1c;++c)this.hasOwnProperty(c)&&(f?d=a(d,this[c],c,this):(d=this[c],f=!0));if(!f)throw new TypeError("Reduce of empty array with no initial value");return d}),m.fn=a.prototype={clone:function(){return m(this)},format:function(a,b){return c(this,a?a:r,void 0!==b?b:Math.round)},unformat:function(a){return"[object Number]"===Object.prototype.toString.call(a)?a:d(this,a?a:r)},value:function(){return this._value},valueOf:function(){return this._value},set:function(a){return this._value=Number(a),this},add:function(a){function b(a,b){return a+c*b}var c=l.call(null,this._value,a);return this._value=[this._value,a].reduce(b,0)/c,this},subtract:function(a){function b(a,b){return a-c*b}var c=l.call(null,this._value,a);return this._value=[a].reduce(b,this._value*c)/c,this},multiply:function(a){function b(a,b){var c=l(a,b);return a*c*b*c/(c*c)}return this._value=[this._value,a].reduce(b,1),this},divide:function(a){function b(a,b){var c=l(a,b);return a*c/(b*c)}return this._value=[this._value,a].reduce(b),this},difference:function(a){return Math.abs(m(this._value).subtract(a).value())}},s&&(module.exports=m),"undefined"==typeof ender&&(this.numeral=m),"function"==typeof define&&define.amd&&define([],function(){return m})}).call(this);var TimeFormatters={formatUT:function(t){var day,year;if(t==null){t=0}year=(t/(365*24*3600)|0)+1;t%=365*24*3600;day=(t/(24*3600)|0)+1;t%=24*3600;return"Year "+year+", Day "+day+", "+this.hourMinSec(t)+" UT"},formatMET:function(t){var result;if(t==null){t=0}result="T+";if(t>=365*24*3600){result+=(t/(365*24*3600)|0)+":";t%=365*24*3600;if(t<24*3600){result+="0:"}}if(t>=24*3600){result+=(t/(24*3600)|0)+":"}t%=24*3600;return result+this.hourMinSec(t)+" MET"},hourMinSec:function(t){var hour,min,sec;if(t==null){t=0}hour=t/3600|0;if(hour<10){hour="0"+hour}t%=3600;min=t/60|0;if(min<10){min="0"+min}sec=(t%60|0).toFixed();if(sec<10){sec="0"+sec}return""+hour+":"+min+":"+sec},durationString:function(t){var result;if(t==null){t=0}result=t<0?"-":"";t=Math.abs(t);if(t>=365*24*3600){result+=(t/(365*24*3600)|0)+" years ";t%=365*24*3600;if(t<24*3600){result+="0 days "}}if(t>=24*3600){result+=(t/(24*3600)|0)+" days "}t%=24*3600;return result+this.hourMinSec(t)}};var DataFormatters={distanceString:function(value){return numeral(value).format("0,0.000 a")+"m"},heightFromTerrainString:function(value){if(value<=-1){return"NA"}return numeral(value).format("0,0.000 a")+"m"},degreeString:function(value){return numeral(value).format("0.000")+"°"},velocityString:function(value){return numeral(value).format("0,0.000 a")+"m/s"},temperatureString:function(value){if(!value){return"NA"}return numeral(value).format("0,000")+"°C"},accelerationSensorString:function(value){if(value[0]=="No Sensors of the Appropriate Type"){return"NA"}return numeral(value[1][0]).format("0,000")+"G"},pressureSensorString:function(value){if(value[0]=="No Sensors of the Appropriate Type"){return"NA"}return numeral(value[1][0]).format("0,000")+"Pa"},gravitySensorString:function(value){if(value[0]=="No Sensors of the Appropriate Type"){return"NA"}return numeral(value[1][0]).format("0,000 a")+"m/s²"},newtonsString:function(value){return numeral(value).format("0,0.00")+" N"},percentageString:function(value){return numeral(value).format("0%")},tonnageString:function(value){return numeral(value).format("0,0.00")+" t"},timeString:function(value){return numeral(value).format("00:00:00")},plainNumberString:function(value){return numeral(value).format("0,0.00")}};var Prototype={Version:"1.7.2",Browser:function(){var ua=navigator.userAgent;var isOpera=Object.prototype.toString.call(window.opera)=="[object Opera]";return{IE:!!window.attachEvent&&!isOpera,Opera:isOpera,WebKit:ua.indexOf("AppleWebKit/")>-1,Gecko:ua.indexOf("Gecko")>-1&&ua.indexOf("KHTML")===-1,MobileSafari:/Apple.*Mobile/.test(ua)}}(),BrowserFeatures:{XPath:!!document.evaluate,SelectorsAPI:!!document.querySelector,ElementExtensions:function(){var constructor=window.Element||window.HTMLElement;return!!(constructor&&constructor.prototype)}(),SpecificElementExtensions:function(){if(typeof window.HTMLDivElement!=="undefined")return true;var div=document.createElement("div"),form=document.createElement("form"),isSupported=false;if(div["__proto__"]&&div["__proto__"]!==form["__proto__"]){isSupported=true}div=form=null;return isSupported}()},ScriptFragment:"]*>([\\S\\s]*?)",JSONFilter:/^\/\*-secure-([\s\S]*)\*\/\s*$/,emptyFunction:function(){},K:function(x){return x}};if(Prototype.Browser.MobileSafari)Prototype.BrowserFeatures.SpecificElementExtensions=false;var Class=function(){var IS_DONTENUM_BUGGY=function(){for(var p in{toString:1}){if(p==="toString")return false}return true}();function subclass(){}function create(){var parent=null,properties=$A(arguments);if(Object.isFunction(properties[0]))parent=properties.shift();function klass(){this.initialize.apply(this,arguments)}Object.extend(klass,Class.Methods);klass.superclass=parent;klass.subclasses=[];if(parent){subclass.prototype=parent.prototype;klass.prototype=new subclass;parent.subclasses.push(klass)}for(var i=0,length=properties.length;i0){match=source.match(pattern);if(match&&match[0].length>0){result+=source.slice(0,match.index);result+=String.interpret(replacement(match));source=source.slice(match.index+match[0].length)}else{result+=source,source=""}}return result}function sub(pattern,replacement,count){replacement=prepareReplacement(replacement);count=Object.isUndefined(count)?1:count;return this.gsub(pattern,function(match){if(--count<0)return match[0];return replacement(match)})}function scan(pattern,iterator){this.gsub(pattern,iterator);return String(this)}function truncate(length,truncation){length=length||30;truncation=Object.isUndefined(truncation)?"...":truncation;return this.length>length?this.slice(0,length-truncation.length)+truncation:String(this)}function strip(){return this.replace(/^\s+/,"").replace(/\s+$/,"")}function stripTags(){return this.replace(/<\w+(\s+("[^"]*"|'[^']*'|[^>])+)?>|<\/\w+>/gi,"")}function stripScripts(){return this.replace(new RegExp(Prototype.ScriptFragment,"img"),"")}function extractScripts(){var matchAll=new RegExp(Prototype.ScriptFragment,"img"),matchOne=new RegExp(Prototype.ScriptFragment,"im");return(this.match(matchAll)||[]).map(function(scriptTag){return(scriptTag.match(matchOne)||["",""])[1]})}function evalScripts(){return this.extractScripts().map(function(script){return eval(script)})}function escapeHTML(){return this.replace(/&/g,"&").replace(//g,">")}function unescapeHTML(){return this.stripTags().replace(/</g,"<").replace(/>/g,">").replace(/&/g,"&")}function toQueryParams(separator){var match=this.strip().match(/([^?#]*)(#.*)?$/);if(!match)return{};return match[1].split(separator||"&").inject({},function(hash,pair){if((pair=pair.split("="))[0]){var key=decodeURIComponent(pair.shift()),value=pair.length>1?pair.join("="):pair[0];if(value!=undefined){value=value.gsub("+"," ");value=decodeURIComponent(value)}if(key in hash){if(!Object.isArray(hash[key]))hash[key]=[hash[key]];hash[key].push(value)}else hash[key]=value}return hash})}function toArray(){return this.split("")}function succ(){return this.slice(0,this.length-1)+String.fromCharCode(this.charCodeAt(this.length-1)+1)}function times(count){return count<1?"":new Array(count+1).join(this)}function camelize(){return this.replace(/-+(.)?/g,function(match,chr){return chr?chr.toUpperCase():""})}function capitalize(){return this.charAt(0).toUpperCase()+this.substring(1).toLowerCase()}function underscore(){return this.replace(/::/g,"/").replace(/([A-Z]+)([A-Z][a-z])/g,"$1_$2").replace(/([a-z\d])([A-Z])/g,"$1_$2").replace(/-/g,"_").toLowerCase()}function dasherize(){return this.replace(/_/g,"-")}function inspect(useDoubleQuotes){var escapedString=this.replace(/[\x00-\x1f\\]/g,function(character){if(character in String.specialChar){return String.specialChar[character]}return"\\u00"+character.charCodeAt().toPaddedString(2,16)});if(useDoubleQuotes)return'"'+escapedString.replace(/"/g,'\\"')+'"';return"'"+escapedString.replace(/'/g,"\\'")+"'"}function unfilterJSON(filter){return this.replace(filter||Prototype.JSONFilter,"$1")}function isJSON(){var str=this;if(str.blank())return false;str=str.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,"@");str=str.replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,"]");str=str.replace(/(?:^|:|,)(?:\s*\[)+/g,"");return/^[\],:{}\s]*$/.test(str)}function evalJSON(sanitize){var json=this.unfilterJSON(),cx=/[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g;if(cx.test(json)){json=json.replace(cx,function(a){return"\\u"+("0000"+a.charCodeAt(0).toString(16)).slice(-4)})}try{if(!sanitize||json.isJSON())return eval("("+json+")")}catch(e){}throw new SyntaxError("Badly formed JSON string: "+this.inspect())}function parseJSON(){var json=this.unfilterJSON();return JSON.parse(json)}function include(pattern){return this.indexOf(pattern)>-1}function startsWith(pattern,position){position=Object.isNumber(position)?position:0;return this.lastIndexOf(pattern,position)===position}function endsWith(pattern,position){pattern=String(pattern);position=Object.isNumber(position)?position:this.length;if(position<0)position=0;if(position>this.length)position=this.length;var d=position-pattern.length;return d>=0&&this.indexOf(pattern,d)===d}function empty(){return this==""}function blank(){return/^\s*$/.test(this)}function interpolate(object,pattern){return new Template(this,pattern).evaluate(object)}return{gsub:gsub,sub:sub,scan:scan,truncate:truncate,strip:String.prototype.trim||strip,stripTags:stripTags,stripScripts:stripScripts,extractScripts:extractScripts,evalScripts:evalScripts,escapeHTML:escapeHTML,unescapeHTML:unescapeHTML,toQueryParams:toQueryParams,parseQuery:toQueryParams,toArray:toArray,succ:succ,times:times,camelize:camelize,capitalize:capitalize,underscore:underscore,dasherize:dasherize,inspect:inspect,unfilterJSON:unfilterJSON,isJSON:isJSON,evalJSON:NATIVE_JSON_PARSE_SUPPORT?parseJSON:evalJSON,include:include,startsWith:String.prototype.startsWith||startsWith,endsWith:String.prototype.endsWith||endsWith,empty:empty,blank:blank,interpolate:interpolate}}());var Template=Class.create({initialize:function(template,pattern){this.template=template.toString();this.pattern=pattern||Template.Pattern},evaluate:function(object){if(object&&Object.isFunction(object.toTemplateReplacements))object=object.toTemplateReplacements();return this.template.gsub(this.pattern,function(match){if(object==null)return match[1]+"";var before=match[1]||"";if(before=="\\")return match[2];var ctx=object,expr=match[3],pattern=/^([^.[]+|\[((?:.*?[^\\])?)\])(\.|\[|$)/;match=pattern.exec(expr);if(match==null)return before;while(match!=null){var comp=match[1].startsWith("[")?match[2].replace(/\\\\]/g,"]"):match[1];ctx=ctx[comp];if(null==ctx||""==match[3])break;expr=expr.substring("["==match[3]?match[1].length:match[0].length);match=pattern.exec(expr)}return before+String.interpret(ctx)})}});Template.Pattern=/(^|.|\r|\n)(#\{(.*?)\})/;var $break={};var Enumerable=function(){function each(iterator,context){try{this._each(iterator,context)}catch(e){if(e!=$break)throw e}return this}function eachSlice(number,iterator,context){var index=-number,slices=[],array=this.toArray();if(number<1)return array;while((index+=number)=result)result=value},this);return result}function min(iterator,context){iterator=iterator||Prototype.K;var result;this.each(function(value,index){value=iterator.call(context,value,index,this);if(result==null||valueb?1:0}).pluck("value")}function toArray(){return this.map()}function zip(){var iterator=Prototype.K,args=$A(arguments);if(Object.isFunction(args.last()))iterator=args.pop();var collections=[this].concat(args).map($A);return this.map(function(value,index){return iterator(collections.pluck(index))})}function size(){return this.toArray().length}function inspect(){return"#"}return{each:each,eachSlice:eachSlice,all:all,every:all,any:any,some:any,collect:collect,map:collect,detect:detect,findAll:findAll,select:findAll,filter:findAll,grep:grep,include:include,member:include,inGroupsOf:inGroupsOf,inject:inject,invoke:invoke,max:max,min:min,partition:partition,pluck:pluck,reject:reject,sortBy:sortBy,toArray:toArray,entries:toArray,zip:zip,size:size,inspect:inspect,find:detect}}();function $A(iterable){if(!iterable)return[];if("toArray"in Object(iterable))return iterable.toArray();var length=iterable.length||0,results=new Array(length);while(length--)results[length]=iterable[length];return results}function $w(string){if(!Object.isString(string))return[];string=string.strip();return string?string.split(/\s+/):[]}Array.from=$A;(function(){var arrayProto=Array.prototype,slice=arrayProto.slice,_each=arrayProto.forEach;function each(iterator,context){for(var i=0,length=this.length>>>0;i>>0;if(length===0)return-1;i=Number(i);if(isNaN(i)){i=0}else if(i!==0&&isFinite(i)){i=(i>0?1:-1)*Math.floor(Math.abs(i))}if(i>length)return-1;var k=i>=0?i:Math.max(length-Math.abs(i),0);for(;k>>0;if(length===0)return-1;if(!Object.isUndefined(i)){i=Number(i);if(isNaN(i)){i=0}else if(i!==0&&isFinite(i)){i=(i>0?1:-1)*Math.floor(Math.abs(i))}}else{i=length}var k=i>=0?Math.min(i,length-1):length-Math.abs(i);for(;k>=0;k--)if(k in array&&array[k]===item)return k;return-1}function concat(_){var array=[],items=slice.call(arguments,0),item,n=0;items.unshift(this);for(var i=0,length=items.length;i>>0;i>>0;i>>0;i>>0;i"}function clone(){return new Hash(this)}return{initialize:initialize,_each:_each,set:set,get:get,unset:unset,toObject:toObject,toTemplateReplacements:toObject,keys:keys,values:values,index:index,merge:merge,update:update,toQueryString:toQueryString,inspect:inspect,toJSON:toObject,clone:clone}}());Hash.from=$H;Object.extend(Number.prototype,function(){function toColorPart(){return this.toPaddedString(2,16)}function succ(){return this+1}function times(iterator,context){$R(0,this,true).each(iterator,context);return this}function toPaddedString(length,radix){var string=this.toString(radix||10);return"0".times(length-string.length)+string}function abs(){return Math.abs(this)}function round(){return Math.round(this)}function ceil(){return Math.ceil(this)}function floor(){return Math.floor(this)}return{toColorPart:toColorPart,succ:succ,times:times,toPaddedString:toPaddedString,abs:abs,round:round,ceil:ceil,floor:floor}}());function $R(start,end,exclusive){return new ObjectRange(start,end,exclusive)}var ObjectRange=Class.create(Enumerable,function(){function initialize(start,end,exclusive){this.start=start;this.end=end;this.exclusive=exclusive}function _each(iterator,context){var value=this.start,i;for(i=0;this.include(value);i++){iterator.call(context,value,i);value=value.succ()}}function include(value){if(value1&&!(readyState==4&&this._complete))this.respondToReadyState(this.transport.readyState)},setRequestHeaders:function(){var headers={"X-Requested-With":"XMLHttpRequest","X-Prototype-Version":Prototype.Version,Accept:"text/javascript, text/html, application/xml, text/xml, */*"};if(this.method=="post"){headers["Content-type"]=this.options.contentType+(this.options.encoding?"; charset="+this.options.encoding:"");if(this.transport.overrideMimeType&&(navigator.userAgent.match(/Gecko\/(\d{4})/)||[0,2005])[1]<2005)headers["Connection"]="close"}if(typeof this.options.requestHeaders=="object"){var extras=this.options.requestHeaders;if(Object.isFunction(extras.push))for(var i=0,length=extras.length;i=200&&status<300||status==304},getStatus:function(){try{if(this.transport.status===1223)return 204;return this.transport.status||0}catch(e){return 0}},respondToReadyState:function(readyState){var state=Ajax.Request.Events[readyState],response=new Ajax.Response(this);if(state=="Complete"){try{this._complete=true;(this.options["on"+response.status]||this.options["on"+(this.success()?"Success":"Failure")]||Prototype.emptyFunction)(response,response.headerJSON)}catch(e){this.dispatchException(e)}var contentType=response.getHeader("Content-type");if(this.options.evalJS=="force"||this.options.evalJS&&this.isSameOrigin()&&contentType&&contentType.match(/^\s*(text|application)\/(x-)?(java|ecma)script(;.*)?\s*$/i))this.evalResponse()}try{(this.options["on"+state]||Prototype.emptyFunction)(response,response.headerJSON);Ajax.Responders.dispatch("on"+state,this,response,response.headerJSON)}catch(e){this.dispatchException(e)}if(state=="Complete"){this.transport.onreadystatechange=Prototype.emptyFunction}},isSameOrigin:function(){var m=this.url.match(/^\s*https?:\/\/[^\/]*/);return!m||m[0]=="#{protocol}//#{domain}#{port}".interpolate({protocol:location.protocol,domain:document.domain,port:location.port?":"+location.port:""})},getHeader:function(name){try{return this.transport.getResponseHeader(name)||null}catch(e){return null}},evalResponse:function(){try{return eval((this.transport.responseText||"").unfilterJSON())}catch(e){this.dispatchException(e)}},dispatchException:function(exception){(this.options.onException||Prototype.emptyFunction)(this,exception);Ajax.Responders.dispatch("onException",this,exception)}});Ajax.Request.Events=["Uninitialized","Loading","Loaded","Interactive","Complete"];Ajax.Response=Class.create({initialize:function(request){this.request=request;var transport=this.transport=request.transport,readyState=this.readyState=transport.readyState;if(readyState>2&&!Prototype.Browser.IE||readyState==4){this.status=this.getStatus();this.statusText=this.getStatusText();this.responseText=String.interpret(transport.responseText);this.headerJSON=this._getHeaderJSON()}if(readyState==4){var xml=transport.responseXML;this.responseXML=Object.isUndefined(xml)?null:xml;this.responseJSON=this._getResponseJSON()}},status:0,statusText:"",getStatus:Ajax.Request.prototype.getStatus,getStatusText:function(){try{return this.transport.statusText||""}catch(e){return""}},getHeader:Ajax.Request.prototype.getHeader,getAllHeaders:function(){try{return this.getAllResponseHeaders()}catch(e){return null}},getResponseHeader:function(name){return this.transport.getResponseHeader(name)},getAllResponseHeaders:function(){return this.transport.getAllResponseHeaders()},_getHeaderJSON:function(){var json=this.getHeader("X-JSON");if(!json)return null;try{json=decodeURIComponent(escape(json))}catch(e){}try{return json.evalJSON(this.request.options.sanitizeJSON||!this.request.isSameOrigin())}catch(e){this.request.dispatchException(e)}},_getResponseJSON:function(){var options=this.request.options;if(!options.evalJSON||options.evalJSON!="force"&&!(this.getHeader("Content-type")||"").include("application/json")||this.responseText.blank())return null;try{return this.responseText.evalJSON(options.sanitizeJSON||!this.request.isSameOrigin())}catch(e){this.request.dispatchException(e)}}});Ajax.Updater=Class.create(Ajax.Request,{initialize:function($super,container,url,options){this.container={success:container.success||container,failure:container.failure||(container.success?null:container)};options=Object.clone(options);var onComplete=options.onComplete;options.onComplete=function(response,json){this.updateContent(response.responseText);if(Object.isFunction(onComplete))onComplete(response,json)}.bind(this);$super(url,options)},updateContent:function(responseText){var receiver=this.container[this.success()?"success":"failure"],options=this.options;if(!options.evalScripts)responseText=responseText.stripScripts();if(receiver=$(receiver)){if(options.insertion){if(Object.isString(options.insertion)){var insertion={};insertion[options.insertion]=responseText;receiver.insert(insertion)}else options.insertion(receiver,responseText)}else receiver.update(responseText)}}});Ajax.PeriodicalUpdater=Class.create(Ajax.Base,{initialize:function($super,container,url,options){$super(options);this.onComplete=this.options.onComplete;this.frequency=this.options.frequency||2;this.decay=this.options.decay||1;this.updater={};this.container=container;this.url=url;this.start()},start:function(){this.options.onComplete=this.updateComplete.bind(this);this.onTimerEvent()},stop:function(){this.updater.options.onComplete=undefined;clearTimeout(this.timer);(this.onComplete||Prototype.emptyFunction).apply(this,arguments)},updateComplete:function(response){if(this.options.decay){this.decay=response.responseText==this.lastText?this.decay*this.options.decay:1;this.lastText=response.responseText}this.timer=this.onTimerEvent.bind(this).delay(this.decay*this.frequency)},onTimerEvent:function(){this.updater=new Ajax.Updater(this.container,this.url,this.options)}});(function(GLOBAL){var UNDEFINED;var SLICE=Array.prototype.slice;var DIV=document.createElement("div");function $(element){if(arguments.length>1){for(var i=0,elements=[],length=arguments.length;i');return el.tagName.toLowerCase()==="input"&&el.name==="x"}catch(err){return false}}();var oldElement=GLOBAL.Element;function Element(tagName,attributes){attributes=attributes||{};tagName=tagName.toLowerCase();if(HAS_EXTENDED_CREATE_ELEMENT_SYNTAX&&attributes.name){tagName="<"+tagName+' name="'+attributes.name+'">';delete attributes.name;return Element.writeAttribute(document.createElement(tagName),attributes)}if(!ELEMENT_CACHE[tagName])ELEMENT_CACHE[tagName]=Element.extend(document.createElement(tagName));var node=shouldUseCreationCache(tagName,attributes)?ELEMENT_CACHE[tagName].cloneNode(false):document.createElement(tagName);return Element.writeAttribute(node,attributes)}GLOBAL.Element=Element;Object.extend(GLOBAL.Element,oldElement||{});if(oldElement)GLOBAL.Element.prototype=oldElement.prototype;Element.Methods={ByTag:{},Simulated:{}};var methods={};var INSPECT_ATTRIBUTES={id:"id",className:"class"};function inspect(element){element=$(element);var result="<"+element.tagName.toLowerCase();var attribute,value;for(var property in INSPECT_ATTRIBUTES){attribute=INSPECT_ATTRIBUTES[property];value=(element[property]||"").toString();if(value)result+=" "+attribute+"="+value.inspect(true)}return result+">"}methods.inspect=inspect;function visible(element){return $(element).style.display!=="none"}function toggle(element,bool){element=$(element);if(Object.isUndefined(bool))bool=!Element.visible(element);Element[bool?"show":"hide"](element);return element}function hide(element){element=$(element);element.style.display="none";return element}function show(element){element=$(element);element.style.display="";return element}Object.extend(methods,{visible:visible,toggle:toggle,hide:hide,show:show});function remove(element){element=$(element);element.parentNode.removeChild(element);return element}var SELECT_ELEMENT_INNERHTML_BUGGY=function(){var el=document.createElement("select"),isBuggy=true;el.innerHTML='';if(el.options&&el.options[0]){isBuggy=el.options[0].nodeName.toUpperCase()!=="OPTION"}el=null;return isBuggy}();var TABLE_ELEMENT_INNERHTML_BUGGY=function(){try{var el=document.createElement("table");if(el&&el.tBodies){el.innerHTML="test";var isBuggy=typeof el.tBodies[0]=="undefined";el=null;return isBuggy}}catch(e){return true}}();var LINK_ELEMENT_INNERHTML_BUGGY=function(){try{var el=document.createElement("div");el.innerHTML="";var isBuggy=el.childNodes.length===0;el=null;return isBuggy}catch(e){return true}}();var ANY_INNERHTML_BUGGY=SELECT_ELEMENT_INNERHTML_BUGGY||TABLE_ELEMENT_INNERHTML_BUGGY||LINK_ELEMENT_INNERHTML_BUGGY;var SCRIPT_ELEMENT_REJECTS_TEXTNODE_APPENDING=function(){var s=document.createElement("script"),isBuggy=false;try{s.appendChild(document.createTextNode(""));isBuggy=!s.firstChild||s.firstChild&&s.firstChild.nodeType!==3}catch(e){isBuggy=true}s=null;return isBuggy}();function update(element,content){element=$(element);var descendants=element.getElementsByTagName("*"),i=descendants.length;while(i--)purgeElement(descendants[i]);if(content&&content.toElement)content=content.toElement();if(Object.isElement(content))return element.update().insert(content);content=Object.toHTML(content);var tagName=element.tagName.toUpperCase();if(tagName==="SCRIPT"&&SCRIPT_ELEMENT_REJECTS_TEXTNODE_APPENDING){element.text=content;return element}if(ANY_INNERHTML_BUGGY){if(tagName in INSERTION_TRANSLATIONS.tags){while(element.firstChild)element.removeChild(element.firstChild);var nodes=getContentFromAnonymousElement(tagName,content.stripScripts());for(var i=0,node;node=nodes[i];i++)element.appendChild(node)}else if(LINK_ELEMENT_INNERHTML_BUGGY&&Object.isString(content)&&content.indexOf("-1){while(element.firstChild)element.removeChild(element.firstChild);var nodes=getContentFromAnonymousElement(tagName,content.stripScripts(),true);for(var i=0,node;node=nodes[i];i++)element.appendChild(node)}else{element.innerHTML=content.stripScripts()}}else{element.innerHTML=content.stripScripts()}content.evalScripts.bind(content).defer();return element}function replace(element,content){element=$(element);if(content&&content.toElement){content=content.toElement()}else if(!Object.isElement(content)){content=Object.toHTML(content);var range=element.ownerDocument.createRange();range.selectNode(element);content.evalScripts.bind(content).defer();content=range.createContextualFragment(content.stripScripts())}element.parentNode.replaceChild(content,element);return element}var INSERTION_TRANSLATIONS={before:function(element,node){element.parentNode.insertBefore(node,element)},top:function(element,node){element.insertBefore(node,element.firstChild)},bottom:function(element,node){element.appendChild(node)},after:function(element,node){element.parentNode.insertBefore(node,element.nextSibling)},tags:{TABLE:["","
    ",1],TBODY:["","
    ",2],TR:["","
    ",3],TD:["
    ","
    ",4],SELECT:["",1]}};var tags=INSERTION_TRANSLATIONS.tags;Object.extend(tags,{THEAD:tags.TBODY,TFOOT:tags.TBODY,TH:tags.TD});function replace_IE(element,content){element=$(element);if(content&&content.toElement)content=content.toElement();if(Object.isElement(content)){element.parentNode.replaceChild(content,element);return element}content=Object.toHTML(content);var parent=element.parentNode,tagName=parent.tagName.toUpperCase();if(tagName in INSERTION_TRANSLATIONS.tags){var nextSibling=Element.next(element);var fragments=getContentFromAnonymousElement(tagName,content.stripScripts());parent.removeChild(element);var iterator;if(nextSibling)iterator=function(node){parent.insertBefore(node,nextSibling)};else iterator=function(node){parent.appendChild(node)};fragments.each(iterator)}else{element.outerHTML=content.stripScripts()}content.evalScripts.bind(content).defer();return element}if("outerHTML"in document.documentElement)replace=replace_IE;function isContent(content){if(Object.isUndefined(content)||content===null)return false;if(Object.isString(content)||Object.isNumber(content))return true;if(Object.isElement(content))return true;if(content.toElement||content.toHTML)return true;return false}function insertContentAt(element,content,position){position=position.toLowerCase();var method=INSERTION_TRANSLATIONS[position];if(content&&content.toElement)content=content.toElement();if(Object.isElement(content)){method(element,content);return element}content=Object.toHTML(content);var tagName=(position==="before"||position==="after"?element.parentNode:element).tagName.toUpperCase();var childNodes=getContentFromAnonymousElement(tagName,content.stripScripts());if(position==="top"||position==="after")childNodes.reverse();for(var i=0,node;node=childNodes[i];i++)method(element,node);content.evalScripts.bind(content).defer()}function insert(element,insertions){element=$(element);if(isContent(insertions))insertions={bottom:insertions};for(var position in insertions)insertContentAt(element,insertions[position],position);return element}function wrap(element,wrapper,attributes){element=$(element);if(Object.isElement(wrapper)){$(wrapper).writeAttribute(attributes||{})}else if(Object.isString(wrapper)){wrapper=new Element(wrapper,attributes)}else{wrapper=new Element("div",wrapper)}if(element.parentNode)element.parentNode.replaceChild(wrapper,element);wrapper.appendChild(element);return wrapper}function cleanWhitespace(element){element=$(element);var node=element.firstChild;while(node){var nextNode=node.nextSibling;if(node.nodeType===Node.TEXT_NODE&&!/\S/.test(node.nodeValue))element.removeChild(node);node=nextNode}return element}function empty(element){return $(element).innerHTML.blank()}function getContentFromAnonymousElement(tagName,html,force){var t=INSERTION_TRANSLATIONS.tags[tagName],div=DIV;var workaround=!!t;if(!workaround&&force){workaround=true;t=["","",0]}if(workaround){div.innerHTML=" "+t[0]+html+t[1];div.removeChild(div.firstChild);for(var i=t[2];i--;)div=div.firstChild}else{div.innerHTML=html}return $A(div.childNodes)}function clone(element,deep){if(!(element=$(element)))return;var clone=element.cloneNode(deep);if(!HAS_UNIQUE_ID_PROPERTY){clone._prototypeUID=UNDEFINED;if(deep){var descendants=Element.select(clone,"*"),i=descendants.length;while(i--)descendants[i]._prototypeUID=UNDEFINED}}return Element.extend(clone)}function purgeElement(element){var uid=getUniqueElementID(element);if(uid){Element.stopObserving(element);if(!HAS_UNIQUE_ID_PROPERTY)element._prototypeUID=UNDEFINED;delete Element.Storage[uid]}}function purgeCollection(elements){var i=elements.length;while(i--)purgeElement(elements[i])}function purgeCollection_IE(elements){var i=elements.length,element,uid;while(i--){element=elements[i];uid=getUniqueElementID(element);delete Element.Storage[uid];delete Event.cache[uid]}}if(HAS_UNIQUE_ID_PROPERTY){purgeCollection=purgeCollection_IE}function purge(element){if(!(element=$(element)))return;purgeElement(element);var descendants=element.getElementsByTagName("*"),i=descendants.length;while(i--)purgeElement(descendants[i]);return null}Object.extend(methods,{remove:remove,update:update,replace:replace,insert:insert,wrap:wrap,cleanWhitespace:cleanWhitespace,empty:empty,clone:clone,purge:purge});function recursivelyCollect(element,property,maximumLength){element=$(element);maximumLength=maximumLength||-1;var elements=[];while(element=element[property]){if(element.nodeType===Node.ELEMENT_NODE)elements.push(Element.extend(element));if(elements.length===maximumLength)break}return elements}function ancestors(element){return recursivelyCollect(element,"parentNode")}function descendants(element){return Element.select(element,"*")}function firstDescendant(element){element=$(element).firstChild;while(element&&element.nodeType!==Node.ELEMENT_NODE)element=element.nextSibling;return $(element)}function immediateDescendants(element){var results=[],child=$(element).firstChild;while(child){if(child.nodeType===Node.ELEMENT_NODE)results.push(Element.extend(child));child=child.nextSibling}return results}function previousSiblings(element){return recursivelyCollect(element,"previousSibling")}function nextSiblings(element){return recursivelyCollect(element,"nextSibling")}function siblings(element){element=$(element);var previous=previousSiblings(element),next=nextSiblings(element);return previous.reverse().concat(next)}function match(element,selector){element=$(element);if(Object.isString(selector))return Prototype.Selector.match(element,selector);return selector.match(element)}function _recursivelyFind(element,property,expression,index){element=$(element),expression=expression||0,index=index||0;if(Object.isNumber(expression)){index=expression,expression=null}while(element=element[property]){if(element.nodeType!==1)continue;if(expression&&!Prototype.Selector.match(element,expression))continue;if(--index>=0)continue;return Element.extend(element)}}function up(element,expression,index){element=$(element);if(arguments.length===1)return $(element.parentNode);return _recursivelyFind(element,"parentNode",expression,index)}function down(element,expression,index){if(arguments.length===1)return firstDescendant(element);element=$(element),expression=expression||0,index=index||0;if(Object.isNumber(expression))index=expression,expression="*";var node=Prototype.Selector.select(expression,element)[index];return Element.extend(node)}function previous(element,expression,index){return _recursivelyFind(element,"previousSibling",expression,index)}function next(element,expression,index){return _recursivelyFind(element,"nextSibling",expression,index)}function select(element){element=$(element);var expressions=SLICE.call(arguments,1).join(", ");return Prototype.Selector.select(expressions,element)}function adjacent(element){element=$(element);var expressions=SLICE.call(arguments,1).join(", ");var siblings=Element.siblings(element),results=[];for(var i=0,sibling;sibling=siblings[i];i++){if(Prototype.Selector.match(sibling,expressions))results.push(sibling)}return results}function descendantOf_DOM(element,ancestor){element=$(element),ancestor=$(ancestor);while(element=element.parentNode)if(element===ancestor)return true;return false}function descendantOf_contains(element,ancestor){element=$(element),ancestor=$(ancestor);if(!ancestor.contains)return descendantOf_DOM(element,ancestor);return ancestor.contains(element)&&ancestor!==element}function descendantOf_compareDocumentPosition(element,ancestor){element=$(element),ancestor=$(ancestor);return(element.compareDocumentPosition(ancestor)&8)===8}var descendantOf;if(DIV.compareDocumentPosition){descendantOf=descendantOf_compareDocumentPosition}else if(DIV.contains){descendantOf=descendantOf_contains}else{descendantOf=descendantOf_DOM}Object.extend(methods,{recursivelyCollect:recursivelyCollect,ancestors:ancestors,descendants:descendants,firstDescendant:firstDescendant,immediateDescendants:immediateDescendants,previousSiblings:previousSiblings,nextSiblings:nextSiblings,siblings:siblings,match:match,up:up,down:down,previous:previous,next:next,select:select,adjacent:adjacent,descendantOf:descendantOf,getElementsBySelector:select,childElements:immediateDescendants});var idCounter=1;function identify(element){element=$(element);var id=Element.readAttribute(element,"id");if(id)return id;do{id="anonymous_element_"+idCounter++}while($(id));Element.writeAttribute(element,"id",id);return id}function readAttribute(element,name){return $(element).getAttribute(name)}function readAttribute_IE(element,name){element=$(element);var table=ATTRIBUTE_TRANSLATIONS.read;if(table.values[name])return table.values[name](element,name);if(table.names[name])name=table.names[name];if(name.include(":")){if(!element.attributes||!element.attributes[name])return null;return element.attributes[name].value}return element.getAttribute(name)}function readAttribute_Opera(element,name){if(name==="title")return element.title;return element.getAttribute(name)}var PROBLEMATIC_ATTRIBUTE_READING=function(){DIV.setAttribute("onclick",[]);var value=DIV.getAttribute("onclick");var isFunction=Object.isArray(value);DIV.removeAttribute("onclick");return isFunction}();if(PROBLEMATIC_ATTRIBUTE_READING){readAttribute=readAttribute_IE}else if(Prototype.Browser.Opera){readAttribute=readAttribute_Opera}function writeAttribute(element,name,value){element=$(element);var attributes={},table=ATTRIBUTE_TRANSLATIONS.write; +Math.toRadians = function(angleInDegrees){ + return angleInDegrees * (Math.PI/180) +} -if(typeof name==="object"){attributes=name}else{attributes[name]=Object.isUndefined(value)?true:value}for(var attr in attributes){name=table.names[attr]||attr;value=attributes[attr];if(table.values[attr])name=table.values[attr](element,value)||name;if(value===false||value===null)element.removeAttribute(name);else if(value===true)element.setAttribute(name,name);else element.setAttribute(name,value)}return element}var PROBLEMATIC_HAS_ATTRIBUTE_WITH_CHECKBOXES=function(){if(!HAS_EXTENDED_CREATE_ELEMENT_SYNTAX){return false}var checkbox=document.createElement('');checkbox.checked=true;var node=checkbox.getAttributeNode("checked");return!node||!node.specified}();function hasAttribute(element,attribute){attribute=ATTRIBUTE_TRANSLATIONS.has[attribute]||attribute;var node=$(element).getAttributeNode(attribute);return!!(node&&node.specified)}function hasAttribute_IE(element,attribute){if(attribute==="checked"){return element.checked}return hasAttribute(element,attribute)}GLOBAL.Element.Methods.Simulated.hasAttribute=PROBLEMATIC_HAS_ATTRIBUTE_WITH_CHECKBOXES?hasAttribute_IE:hasAttribute;function classNames(element){return new Element.ClassNames(element)}var regExpCache={};function getRegExpForClassName(className){if(regExpCache[className])return regExpCache[className];var re=new RegExp("(^|\\s+)"+className+"(\\s+|$)");regExpCache[className]=re;return re}function hasClassName(element,className){if(!(element=$(element)))return;var elementClassName=element.className;if(elementClassName.length===0)return false;if(elementClassName===className)return true;return getRegExpForClassName(className).test(elementClassName)}function addClassName(element,className){if(!(element=$(element)))return;if(!hasClassName(element,className))element.className+=(element.className?" ":"")+className;return element}function removeClassName(element,className){if(!(element=$(element)))return;element.className=element.className.replace(getRegExpForClassName(className)," ").strip();return element}function toggleClassName(element,className,bool){if(!(element=$(element)))return;if(Object.isUndefined(bool))bool=!hasClassName(element,className);var method=Element[bool?"addClassName":"removeClassName"];return method(element,className)}var ATTRIBUTE_TRANSLATIONS={};var classProp="className",forProp="for";DIV.setAttribute(classProp,"x");if(DIV.className!=="x"){DIV.setAttribute("class","x");if(DIV.className==="x")classProp="class"}var LABEL=document.createElement("label");LABEL.setAttribute(forProp,"x");if(LABEL.htmlFor!=="x"){LABEL.setAttribute("htmlFor","x");if(LABEL.htmlFor==="x")forProp="htmlFor"}LABEL=null;function _getAttr(element,attribute){return element.getAttribute(attribute)}function _getAttr2(element,attribute){return element.getAttribute(attribute,2)}function _getAttrNode(element,attribute){var node=element.getAttributeNode(attribute);return node?node.value:""}function _getFlag(element,attribute){return $(element).hasAttribute(attribute)?attribute:null}DIV.onclick=Prototype.emptyFunction;var onclickValue=DIV.getAttribute("onclick");var _getEv;if(String(onclickValue).indexOf("{")>-1){_getEv=function(element,attribute){var value=element.getAttribute(attribute);if(!value)return null;value=value.toString();value=value.split("{")[1];value=value.split("}")[0];return value.strip()}}else if(onclickValue===""){_getEv=function(element,attribute){var value=element.getAttribute(attribute);if(!value)return null;return value.strip()}}ATTRIBUTE_TRANSLATIONS.read={names:{class:classProp,className:classProp,for:forProp,htmlFor:forProp},values:{style:function(element){return element.style.cssText.toLowerCase()},title:function(element){return element.title}}};ATTRIBUTE_TRANSLATIONS.write={names:{className:"class",htmlFor:"for",cellpadding:"cellPadding",cellspacing:"cellSpacing"},values:{checked:function(element,value){element.checked=!!value},style:function(element,value){element.style.cssText=value?value:""}}};ATTRIBUTE_TRANSLATIONS.has={names:{}};Object.extend(ATTRIBUTE_TRANSLATIONS.write.names,ATTRIBUTE_TRANSLATIONS.read.names);var CAMEL_CASED_ATTRIBUTE_NAMES=$w("colSpan rowSpan vAlign dateTime "+"accessKey tabIndex encType maxLength readOnly longDesc frameBorder");for(var i=0,attr;attr=CAMEL_CASED_ATTRIBUTE_NAMES[i];i++){ATTRIBUTE_TRANSLATIONS.write.names[attr.toLowerCase()]=attr;ATTRIBUTE_TRANSLATIONS.has.names[attr.toLowerCase()]=attr}Object.extend(ATTRIBUTE_TRANSLATIONS.read.values,{href:_getAttr2,src:_getAttr2,type:_getAttr,action:_getAttrNode,disabled:_getFlag,checked:_getFlag,readonly:_getFlag,multiple:_getFlag,onload:_getEv,onunload:_getEv,onclick:_getEv,ondblclick:_getEv,onmousedown:_getEv,onmouseup:_getEv,onmouseover:_getEv,onmousemove:_getEv,onmouseout:_getEv,onfocus:_getEv,onblur:_getEv,onkeypress:_getEv,onkeydown:_getEv,onkeyup:_getEv,onsubmit:_getEv,onreset:_getEv,onselect:_getEv,onchange:_getEv});Object.extend(methods,{identify:identify,readAttribute:readAttribute,writeAttribute:writeAttribute,classNames:classNames,hasClassName:hasClassName,addClassName:addClassName,removeClassName:removeClassName,toggleClassName:toggleClassName});function normalizeStyleName(style){if(style==="float"||style==="styleFloat")return"cssFloat";return style.camelize()}function normalizeStyleName_IE(style){if(style==="float"||style==="cssFloat")return"styleFloat";return style.camelize()}function setStyle(element,styles){element=$(element);var elementStyle=element.style,match;if(Object.isString(styles)){elementStyle.cssText+=";"+styles;if(styles.include("opacity")){var opacity=styles.match(/opacity:\s*(\d?\.?\d*)/)[1];Element.setOpacity(element,opacity)}return element}for(var property in styles){if(property==="opacity"){Element.setOpacity(element,styles[property])}else{var value=styles[property];if(property==="float"||property==="cssFloat"){property=Object.isUndefined(elementStyle.styleFloat)?"cssFloat":"styleFloat"}elementStyle[property]=value}}return element}function getStyle(element,style){element=$(element);style=normalizeStyleName(style);var value=element.style[style];if(!value||value==="auto"){var css=document.defaultView.getComputedStyle(element,null);value=css?css[style]:null}if(style==="opacity")return value?parseFloat(value):1;return value==="auto"?null:value}function getStyle_Opera(element,style){switch(style){case"height":case"width":if(!Element.visible(element))return null;var dim=parseInt(getStyle(element,style),10);if(dim!==element["offset"+style.capitalize()])return dim+"px";return Element.measure(element,style);default:return getStyle(element,style)}}function getStyle_IE(element,style){element=$(element);style=normalizeStyleName_IE(style);var value=element.style[style];if(!value&&element.currentStyle){value=element.currentStyle[style]}if(style==="opacity"&&!STANDARD_CSS_OPACITY_SUPPORTED)return getOpacity_IE(element);if(value==="auto"){if((style==="width"||style==="height")&&Element.visible(element))return Element.measure(element,style)+"px";return null}return value}function stripAlphaFromFilter_IE(filter){return(filter||"").replace(/alpha\([^\)]*\)/gi,"")}function hasLayout_IE(element){if(!element.currentStyle||!element.currentStyle.hasLayout)element.style.zoom=1;return element}var STANDARD_CSS_OPACITY_SUPPORTED=function(){DIV.style.cssText="opacity:.55";return/^0.55/.test(DIV.style.opacity)}();function setOpacity(element,value){element=$(element);if(value==1||value==="")value="";else if(value<1e-5)value=0;element.style.opacity=value;return element}function setOpacity_IE(element,value){if(STANDARD_CSS_OPACITY_SUPPORTED)return setOpacity(element,value);element=hasLayout_IE($(element));var filter=Element.getStyle(element,"filter"),style=element.style;if(value==1||value===""){filter=stripAlphaFromFilter_IE(filter);if(filter)style.filter=filter;else style.removeAttribute("filter");return element}if(value<1e-5)value=0;style.filter=stripAlphaFromFilter_IE(filter)+"alpha(opacity="+value*100+")";return element}function getOpacity(element){return Element.getStyle(element,"opacity")}function getOpacity_IE(element){if(STANDARD_CSS_OPACITY_SUPPORTED)return getOpacity(element);var filter=Element.getStyle(element,"filter");if(filter.length===0)return 1;var match=(filter||"").match(/alpha\(opacity=(.*)\)/);if(match&&match[1])return parseFloat(match[1])/100;return 1}Object.extend(methods,{setStyle:setStyle,getStyle:getStyle,setOpacity:setOpacity,getOpacity:getOpacity});if("styleFloat"in DIV.style){methods.getStyle=getStyle_IE;methods.setOpacity=setOpacity_IE;methods.getOpacity=getOpacity_IE}var UID=0;GLOBAL.Element.Storage={UID:1};function getUniqueElementID(element){if(element===window)return 0;if(typeof element._prototypeUID==="undefined")element._prototypeUID=Element.Storage.UID++;return element._prototypeUID}function getUniqueElementID_IE(element){if(element===window)return 0;if(element==document)return 1;return element.uniqueID}var HAS_UNIQUE_ID_PROPERTY="uniqueID"in DIV;if(HAS_UNIQUE_ID_PROPERTY)getUniqueElementID=getUniqueElementID_IE;function getStorage(element){if(!(element=$(element)))return;var uid=getUniqueElementID(element);if(!Element.Storage[uid])Element.Storage[uid]=$H();return Element.Storage[uid]}function store(element,key,value){if(!(element=$(element)))return;var storage=getStorage(element);if(arguments.length===2){storage.update(key)}else{storage.set(key,value)}return element}function retrieve(element,key,defaultValue){if(!(element=$(element)))return;var storage=getStorage(element),value=storage.get(key);if(Object.isUndefined(value)){storage.set(key,defaultValue);value=defaultValue}return value}Object.extend(methods,{getStorage:getStorage,store:store,retrieve:retrieve});var Methods={},ByTag=Element.Methods.ByTag,F=Prototype.BrowserFeatures;if(!F.ElementExtensions&&"__proto__"in DIV){GLOBAL.HTMLElement={};GLOBAL.HTMLElement.prototype=DIV["__proto__"];F.ElementExtensions=true}function checkElementPrototypeDeficiency(tagName){if(typeof window.Element==="undefined")return false;if(!HAS_EXTENDED_CREATE_ELEMENT_SYNTAX)return false;var proto=window.Element.prototype;if(proto){var id="_"+(Math.random()+"").slice(2),el=document.createElement(tagName);proto[id]="x";var isBuggy=el[id]!=="x";delete proto[id];el=null;return isBuggy}return false}var HTMLOBJECTELEMENT_PROTOTYPE_BUGGY=checkElementPrototypeDeficiency("object");function extendElementWith(element,methods){for(var property in methods){var value=methods[property];if(Object.isFunction(value)&&!(property in element))element[property]=value.methodize()}}var EXTENDED={};function elementIsExtended(element){var uid=getUniqueElementID(element);return uid in EXTENDED}function extend(element){if(!element||elementIsExtended(element))return element;if(element.nodeType!==Node.ELEMENT_NODE||element==window)return element;var methods=Object.clone(Methods),tagName=element.tagName.toUpperCase();if(ByTag[tagName])Object.extend(methods,ByTag[tagName]);extendElementWith(element,methods);EXTENDED[getUniqueElementID(element)]=true;return element}function extend_IE8(element){if(!element||elementIsExtended(element))return element;var t=element.tagName;if(t&&/^(?:object|applet|embed)$/i.test(t)){extendElementWith(element,Element.Methods);extendElementWith(element,Element.Methods.Simulated);extendElementWith(element,Element.Methods.ByTag[t.toUpperCase()])}return element}if(F.SpecificElementExtensions){extend=HTMLOBJECTELEMENT_PROTOTYPE_BUGGY?extend_IE8:Prototype.K}function addMethodsToTagName(tagName,methods){tagName=tagName.toUpperCase();if(!ByTag[tagName])ByTag[tagName]={};Object.extend(ByTag[tagName],methods)}function mergeMethods(destination,methods,onlyIfAbsent){if(Object.isUndefined(onlyIfAbsent))onlyIfAbsent=false;for(var property in methods){var value=methods[property];if(!Object.isFunction(value))continue;if(!onlyIfAbsent||!(property in destination))destination[property]=value.methodize()}}function findDOMClass(tagName){var klass;var trans={OPTGROUP:"OptGroup",TEXTAREA:"TextArea",P:"Paragraph",FIELDSET:"FieldSet",UL:"UList",OL:"OList",DL:"DList",DIR:"Directory",H1:"Heading",H2:"Heading",H3:"Heading",H4:"Heading",H5:"Heading",H6:"Heading",Q:"Quote",INS:"Mod",DEL:"Mod",A:"Anchor",IMG:"Image",CAPTION:"TableCaption",COL:"TableCol",COLGROUP:"TableCol",THEAD:"TableSection",TFOOT:"TableSection",TBODY:"TableSection",TR:"TableRow",TH:"TableCell",TD:"TableCell",FRAMESET:"FrameSet",IFRAME:"IFrame"};if(trans[tagName])klass="HTML"+trans[tagName]+"Element";if(window[klass])return window[klass];klass="HTML"+tagName+"Element";if(window[klass])return window[klass];klass="HTML"+tagName.capitalize()+"Element";if(window[klass])return window[klass];var element=document.createElement(tagName),proto=element["__proto__"]||element.constructor.prototype;element=null;return proto}function addMethods(methods){if(arguments.length===0)addFormMethods();if(arguments.length===2){var tagName=methods;methods=arguments[1]}if(!tagName){Object.extend(Element.Methods,methods||{})}else{if(Object.isArray(tagName)){for(var i=0,tag;tag=tagName[i];i++)addMethodsToTagName(tag,methods)}else{addMethodsToTagName(tagName,methods)}}var ELEMENT_PROTOTYPE=window.HTMLElement?HTMLElement.prototype:Element.prototype;if(F.ElementExtensions){mergeMethods(ELEMENT_PROTOTYPE,Element.Methods);mergeMethods(ELEMENT_PROTOTYPE,Element.Methods.Simulated,true)}if(F.SpecificElementExtensions){for(var tag in Element.Methods.ByTag){var klass=findDOMClass(tag);if(Object.isUndefined(klass))continue;mergeMethods(klass.prototype,ByTag[tag])}}Object.extend(Element,Element.Methods);Object.extend(Element,Element.Methods.Simulated);delete Element.ByTag;delete Element.Simulated;Element.extend.refresh();ELEMENT_CACHE={}}Object.extend(GLOBAL.Element,{extend:extend,addMethods:addMethods});if(extend===Prototype.K){GLOBAL.Element.extend.refresh=Prototype.emptyFunction}else{GLOBAL.Element.extend.refresh=function(){if(Prototype.BrowserFeatures.ElementExtensions)return;Object.extend(Methods,Element.Methods);Object.extend(Methods,Element.Methods.Simulated);EXTENDED={}}}function addFormMethods(){Object.extend(Form,Form.Methods);Object.extend(Form.Element,Form.Element.Methods);Object.extend(Element.Methods.ByTag,{FORM:Object.clone(Form.Methods),INPUT:Object.clone(Form.Element.Methods),SELECT:Object.clone(Form.Element.Methods),TEXTAREA:Object.clone(Form.Element.Methods),BUTTON:Object.clone(Form.Element.Methods)})}Element.addMethods(methods);function destroyCache_IE(){DIV=null;ELEMENT_CACHE=null}if(window.attachEvent)window.attachEvent("onunload",destroyCache_IE)})(this);(function(){function toDecimal(pctString){var match=pctString.match(/^(\d+)%?$/i);if(!match)return null;return Number(match[1])/100}function getRawStyle(element,style){element=$(element);var value=element.style[style];if(!value||value==="auto"){var css=document.defaultView.getComputedStyle(element,null);value=css?css[style]:null}if(style==="opacity")return value?parseFloat(value):1;return value==="auto"?null:value}function getRawStyle_IE(element,style){var value=element.style[style];if(!value&&element.currentStyle){value=element.currentStyle[style]}return value}function getContentWidth(element,context){var boxWidth=element.offsetWidth;var bl=getPixelValue(element,"borderLeftWidth",context)||0;var br=getPixelValue(element,"borderRightWidth",context)||0;var pl=getPixelValue(element,"paddingLeft",context)||0;var pr=getPixelValue(element,"paddingRight",context)||0;return boxWidth-bl-br-pl-pr}if("currentStyle"in document.documentElement){getRawStyle=getRawStyle_IE}function getPixelValue(value,property,context){var element=null;if(Object.isElement(value)){element=value;value=getRawStyle(element,property)}if(value===null||Object.isUndefined(value)){return null}if(/^(?:-)?\d+(\.\d+)?(px)?$/i.test(value)){return window.parseFloat(value)}var isPercentage=value.include("%"),isViewport=context===document.viewport;if(/\d/.test(value)&&element&&element.runtimeStyle&&!(isPercentage&&isViewport)){var style=element.style.left,rStyle=element.runtimeStyle.left;element.runtimeStyle.left=element.currentStyle.left;element.style.left=value||0;value=element.style.pixelLeft;element.style.left=style;element.runtimeStyle.left=rStyle;return value}if(element&&isPercentage){context=context||element.parentNode;var decimal=toDecimal(value),whole=null;var isHorizontal=property.include("left")||property.include("right")||property.include("width");var isVertical=property.include("top")||property.include("bottom")||property.include("height");if(context===document.viewport){if(isHorizontal){whole=document.viewport.getWidth()}else if(isVertical){whole=document.viewport.getHeight()}}else{if(isHorizontal){whole=$(context).measure("width")}else if(isVertical){whole=$(context).measure("height")}}return whole===null?0:whole*decimal}return 0}function toCSSPixels(number){if(Object.isString(number)&&number.endsWith("px"))return number;return number+"px"}function isDisplayed(element){while(element&&element.parentNode){var display=element.getStyle("display");if(display==="none"){return false}element=$(element.parentNode)}return true}var hasLayout=Prototype.K;if("currentStyle"in document.documentElement){hasLayout=function(element){if(!element.currentStyle.hasLayout){element.style.zoom=1}return element}}function cssNameFor(key){if(key.include("border"))key=key+"-width";return key.camelize()}Element.Layout=Class.create(Hash,{initialize:function($super,element,preCompute){$super();this.element=$(element);Element.Layout.PROPERTIES.each(function(property){this._set(property,null)},this);if(preCompute){this._preComputing=true;this._begin();Element.Layout.PROPERTIES.each(this._compute,this);this._end();this._preComputing=false}},_set:function(property,value){return Hash.prototype.set.call(this,property,value)},set:function(property,value){throw"Properties of Element.Layout are read-only."},get:function($super,property){var value=$super(property);return value===null?this._compute(property):value},_begin:function(){if(this._isPrepared())return;var element=this.element;if(isDisplayed(element)){this._setPrepared(true);return}var originalStyles={position:element.style.position||"",width:element.style.width||"",visibility:element.style.visibility||"",display:element.style.display||""};element.store("prototype_original_styles",originalStyles);var position=getRawStyle(element,"position"),width=element.offsetWidth;if(width===0||width===null){element.style.display="block";width=element.offsetWidth}var context=position==="fixed"?document.viewport:element.parentNode;var tempStyles={visibility:"hidden",display:"block"};if(position!=="fixed")tempStyles.position="absolute";element.setStyle(tempStyles);var positionedWidth=element.offsetWidth,newWidth;if(width&&positionedWidth===width){newWidth=getContentWidth(element,context)}else if(position==="absolute"||position==="fixed"){newWidth=getContentWidth(element,context)}else{var parent=element.parentNode,pLayout=$(parent).getLayout();newWidth=pLayout.get("width")-this.get("margin-left")-this.get("border-left")-this.get("padding-left")-this.get("padding-right")-this.get("border-right")-this.get("margin-right")}element.setStyle({width:newWidth+"px"});this._setPrepared(true)},_end:function(){var element=this.element;var originalStyles=element.retrieve("prototype_original_styles");element.store("prototype_original_styles",null);element.setStyle(originalStyles);this._setPrepared(false)},_compute:function(property){var COMPUTATIONS=Element.Layout.COMPUTATIONS;if(!(property in COMPUTATIONS)){throw"Property not found."}return this._set(property,COMPUTATIONS[property].call(this,this.element))},_isPrepared:function(){return this.element.retrieve("prototype_element_layout_prepared",false)},_setPrepared:function(bool){return this.element.store("prototype_element_layout_prepared",bool)},toObject:function(){var args=$A(arguments);var keys=args.length===0?Element.Layout.PROPERTIES:args.join(" ").split(" ");var obj={};keys.each(function(key){if(!Element.Layout.PROPERTIES.include(key))return;var value=this.get(key);if(value!=null)obj[key]=value},this);return obj},toHash:function(){var obj=this.toObject.apply(this,arguments);return new Hash(obj)},toCSS:function(){var args=$A(arguments);var keys=args.length===0?Element.Layout.PROPERTIES:args.join(" ").split(" ");var css={};keys.each(function(key){if(!Element.Layout.PROPERTIES.include(key))return;if(Element.Layout.COMPOSITE_PROPERTIES.include(key))return;var value=this.get(key);if(value!=null)css[cssNameFor(key)]=value+"px"},this);return css},inspect:function(){return"#"}});Object.extend(Element.Layout,{PROPERTIES:$w("height width top left right bottom border-left border-right border-top border-bottom padding-left padding-right padding-top padding-bottom margin-top margin-bottom margin-left margin-right padding-box-width padding-box-height border-box-width border-box-height margin-box-width margin-box-height"),COMPOSITE_PROPERTIES:$w("padding-box-width padding-box-height margin-box-width margin-box-height border-box-width border-box-height"),COMPUTATIONS:{height:function(element){if(!this._preComputing)this._begin();var bHeight=this.get("border-box-height");if(bHeight<=0){if(!this._preComputing)this._end();return 0}var bTop=this.get("border-top"),bBottom=this.get("border-bottom");var pTop=this.get("padding-top"),pBottom=this.get("padding-bottom");if(!this._preComputing)this._end();return bHeight-bTop-bBottom-pTop-pBottom},width:function(element){if(!this._preComputing)this._begin();var bWidth=this.get("border-box-width");if(bWidth<=0){if(!this._preComputing)this._end();return 0}var bLeft=this.get("border-left"),bRight=this.get("border-right");var pLeft=this.get("padding-left"),pRight=this.get("padding-right");if(!this._preComputing)this._end();return bWidth-bLeft-bRight-pLeft-pRight},"padding-box-height":function(element){var height=this.get("height"),pTop=this.get("padding-top"),pBottom=this.get("padding-bottom");return height+pTop+pBottom},"padding-box-width":function(element){var width=this.get("width"),pLeft=this.get("padding-left"),pRight=this.get("padding-right");return width+pLeft+pRight},"border-box-height":function(element){if(!this._preComputing)this._begin();var height=element.offsetHeight;if(!this._preComputing)this._end();return height},"border-box-width":function(element){if(!this._preComputing)this._begin();var width=element.offsetWidth;if(!this._preComputing)this._end();return width},"margin-box-height":function(element){var bHeight=this.get("border-box-height"),mTop=this.get("margin-top"),mBottom=this.get("margin-bottom");if(bHeight<=0)return 0;return bHeight+mTop+mBottom},"margin-box-width":function(element){var bWidth=this.get("border-box-width"),mLeft=this.get("margin-left"),mRight=this.get("margin-right");if(bWidth<=0)return 0;return bWidth+mLeft+mRight},top:function(element){var offset=element.positionedOffset();return offset.top},bottom:function(element){var offset=element.positionedOffset(),parent=element.getOffsetParent(),pHeight=parent.measure("height");var mHeight=this.get("border-box-height");return pHeight-mHeight-offset.top},left:function(element){var offset=element.positionedOffset();return offset.left},right:function(element){var offset=element.positionedOffset(),parent=element.getOffsetParent(),pWidth=parent.measure("width");var mWidth=this.get("border-box-width");return pWidth-mWidth-offset.left},"padding-top":function(element){return getPixelValue(element,"paddingTop")},"padding-bottom":function(element){return getPixelValue(element,"paddingBottom")},"padding-left":function(element){return getPixelValue(element,"paddingLeft")},"padding-right":function(element){return getPixelValue(element,"paddingRight")},"border-top":function(element){return getPixelValue(element,"borderTopWidth")},"border-bottom":function(element){return getPixelValue(element,"borderBottomWidth")},"border-left":function(element){return getPixelValue(element,"borderLeftWidth")},"border-right":function(element){return getPixelValue(element,"borderRightWidth")},"margin-top":function(element){return getPixelValue(element,"marginTop")},"margin-bottom":function(element){return getPixelValue(element,"marginBottom")},"margin-left":function(element){return getPixelValue(element,"marginLeft")},"margin-right":function(element){return getPixelValue(element,"marginRight")}}});if("getBoundingClientRect"in document.documentElement){Object.extend(Element.Layout.COMPUTATIONS,{right:function(element){var parent=hasLayout(element.getOffsetParent());var rect=element.getBoundingClientRect(),pRect=parent.getBoundingClientRect();return(pRect.right-rect.right).round()},bottom:function(element){var parent=hasLayout(element.getOffsetParent());var rect=element.getBoundingClientRect(),pRect=parent.getBoundingClientRect();return(pRect.bottom-rect.bottom).round()}})}Element.Offset=Class.create({initialize:function(left,top){this.left=left.round();this.top=top.round();this[0]=this.left;this[1]=this.top},relativeTo:function(offset){return new Element.Offset(this.left-offset.left,this.top-offset.top)},inspect:function(){return"#".interpolate(this)},toString:function(){return"[#{left}, #{top}]".interpolate(this)},toArray:function(){return[this.left,this.top]}});function getLayout(element,preCompute){return new Element.Layout(element,preCompute)}function measure(element,property){return $(element).getLayout().get(property)}function getHeight(element){return Element.getDimensions(element).height}function getWidth(element){return Element.getDimensions(element).width}function getDimensions(element){element=$(element);var display=Element.getStyle(element,"display");if(display&&display!=="none"){return{width:element.offsetWidth,height:element.offsetHeight}}var style=element.style;var originalStyles={visibility:style.visibility,position:style.position,display:style.display};var newStyles={visibility:"hidden",display:"block"};if(originalStyles.position!=="fixed")newStyles.position="absolute";Element.setStyle(element,newStyles);var dimensions={width:element.offsetWidth,height:element.offsetHeight};Element.setStyle(element,originalStyles);return dimensions}function getOffsetParent(element){element=$(element);if(isDocument(element)||isDetached(element)||isBody(element)||isHtml(element))return $(document.body);var isInline=Element.getStyle(element,"display")==="inline";if(!isInline&&element.offsetParent)return $(element.offsetParent);while((element=element.parentNode)&&element!==document.body){if(Element.getStyle(element,"position")!=="static"){return isHtml(element)?$(document.body):$(element)}}return $(document.body)}function cumulativeOffset(element){element=$(element);var valueT=0,valueL=0;if(element.parentNode){do{valueT+=element.offsetTop||0;valueL+=element.offsetLeft||0;element=element.offsetParent}while(element)}return new Element.Offset(valueL,valueT)}function positionedOffset(element){element=$(element);var layout=element.getLayout();var valueT=0,valueL=0;do{valueT+=element.offsetTop||0;valueL+=element.offsetLeft||0;element=element.offsetParent;if(element){if(isBody(element))break;var p=Element.getStyle(element,"position");if(p!=="static")break}}while(element);valueL-=layout.get("margin-top");valueT-=layout.get("margin-left");return new Element.Offset(valueL,valueT)}function cumulativeScrollOffset(element){var valueT=0,valueL=0;do{if(element===document.body){var bodyScrollNode=document.documentElement||document.body.parentNode||document.body;valueT+=!Object.isUndefined(window.pageYOffset)?window.pageYOffset:bodyScrollNode.scrollTop||0;valueL+=!Object.isUndefined(window.pageXOffset)?window.pageXOffset:bodyScrollNode.scrollLeft||0;break}else{valueT+=element.scrollTop||0;valueL+=element.scrollLeft||0;element=element.parentNode}}while(element);return new Element.Offset(valueL,valueT)}function viewportOffset(forElement){var valueT=0,valueL=0,docBody=document.body;forElement=$(forElement);var element=forElement;do{valueT+=element.offsetTop||0;valueL+=element.offsetLeft||0;if(element.offsetParent==docBody&&Element.getStyle(element,"position")=="absolute")break}while(element=element.offsetParent);element=forElement;do{if(element!=docBody){valueT-=element.scrollTop||0;valueL-=element.scrollLeft||0}}while(element=element.parentNode);return new Element.Offset(valueL,valueT)}function absolutize(element){element=$(element);if(Element.getStyle(element,"position")==="absolute"){return element}var offsetParent=getOffsetParent(element);var eOffset=element.viewportOffset(),pOffset=offsetParent.viewportOffset();var offset=eOffset.relativeTo(pOffset);var layout=element.getLayout();element.store("prototype_absolutize_original_styles",{position:element.getStyle("position"),left:element.getStyle("left"),top:element.getStyle("top"),width:element.getStyle("width"),height:element.getStyle("height")});element.setStyle({position:"absolute",top:offset.top+"px",left:offset.left+"px",width:layout.get("width")+"px",height:layout.get("height")+"px"});return element}function relativize(element){element=$(element);if(Element.getStyle(element,"position")==="relative"){return element}var originalStyles=element.retrieve("prototype_absolutize_original_styles");if(originalStyles)element.setStyle(originalStyles);return element}function scrollTo(element){element=$(element);var pos=Element.cumulativeOffset(element);window.scrollTo(pos.left,pos.top);return element}function makePositioned(element){element=$(element);var position=Element.getStyle(element,"position"),styles={};if(position==="static"||!position){styles.position="relative";if(Prototype.Browser.Opera){styles.top=0;styles.left=0}Element.setStyle(element,styles);Element.store(element,"prototype_made_positioned",true)}return element}function undoPositioned(element){element=$(element);var storage=Element.getStorage(element),madePositioned=storage.get("prototype_made_positioned");if(madePositioned){storage.unset("prototype_made_positioned");Element.setStyle(element,{position:"",top:"",bottom:"",left:"",right:""})}return element}function makeClipping(element){element=$(element);var storage=Element.getStorage(element),madeClipping=storage.get("prototype_made_clipping");if(Object.isUndefined(madeClipping)){var overflow=Element.getStyle(element,"overflow");storage.set("prototype_made_clipping",overflow);if(overflow!=="hidden")element.style.overflow="hidden"}return element}function undoClipping(element){element=$(element);var storage=Element.getStorage(element),overflow=storage.get("prototype_made_clipping");if(!Object.isUndefined(overflow)){storage.unset("prototype_made_clipping");element.style.overflow=overflow||""}return element}function clonePosition(element,source,options){options=Object.extend({setLeft:true,setTop:true,setWidth:true,setHeight:true,offsetTop:0,offsetLeft:0},options||{});source=$(source);element=$(element);var p,delta,layout,styles={};if(options.setLeft||options.setTop){p=Element.viewportOffset(source);delta=[0,0];if(Element.getStyle(element,"position")==="absolute"){var parent=Element.getOffsetParent(element);if(parent!==document.body)delta=Element.viewportOffset(parent)}}if(options.setWidth||options.setHeight){layout=Element.getLayout(source)}if(options.setLeft)styles.left=p[0]-delta[0]+options.offsetLeft+"px";if(options.setTop)styles.top=p[1]-delta[1]+options.offsetTop+"px";if(options.setWidth)styles.width=layout.get("border-box-width")+"px";if(options.setHeight)styles.height=layout.get("border-box-height")+"px";return Element.setStyle(element,styles)}if(Prototype.Browser.IE){getOffsetParent=getOffsetParent.wrap(function(proceed,element){element=$(element);if(isDocument(element)||isDetached(element)||isBody(element)||isHtml(element))return $(document.body);var position=element.getStyle("position");if(position!=="static")return proceed(element);element.setStyle({position:"relative"});var value=proceed(element);element.setStyle({position:position});return value});positionedOffset=positionedOffset.wrap(function(proceed,element){element=$(element);if(!element.parentNode)return new Element.Offset(0,0);var position=element.getStyle("position"); +Math.crossProduct = function(x, y){ + [ + x[1]*y[2]-x[2]*y[1], + x[2]*y[0]-x[0]*y[2], + x[0]*y[1]-x[1]*y[0] + ] +} -if(position!=="static")return proceed(element);var offsetParent=element.getOffsetParent();if(offsetParent&&offsetParent.getStyle("position")==="fixed")hasLayout(offsetParent);element.setStyle({position:"relative"});var value=proceed(element);element.setStyle({position:position});return value})}else if(Prototype.Browser.Webkit){cumulativeOffset=function(element){element=$(element);var valueT=0,valueL=0;do{valueT+=element.offsetTop||0;valueL+=element.offsetLeft||0;if(element.offsetParent==document.body){if(Element.getStyle(element,"position")=="absolute")break}element=element.offsetParent}while(element);return new Element.Offset(valueL,valueT)}}Element.addMethods({getLayout:getLayout,measure:measure,getWidth:getWidth,getHeight:getHeight,getDimensions:getDimensions,getOffsetParent:getOffsetParent,cumulativeOffset:cumulativeOffset,positionedOffset:positionedOffset,cumulativeScrollOffset:cumulativeScrollOffset,viewportOffset:viewportOffset,absolutize:absolutize,relativize:relativize,scrollTo:scrollTo,makePositioned:makePositioned,undoPositioned:undoPositioned,makeClipping:makeClipping,undoClipping:undoClipping,clonePosition:clonePosition});function isBody(element){return element.nodeName.toUpperCase()==="BODY"}function isHtml(element){return element.nodeName.toUpperCase()==="HTML"}function isDocument(element){return element.nodeType===Node.DOCUMENT_NODE}function isDetached(element){return element!==document.body&&!Element.descendantOf(element,document.body)}if("getBoundingClientRect"in document.documentElement){Element.addMethods({viewportOffset:function(element){element=$(element);if(isDetached(element))return new Element.Offset(0,0);var rect=element.getBoundingClientRect(),docEl=document.documentElement;return new Element.Offset(rect.left-docEl.clientLeft,rect.top-docEl.clientTop)}})}})();(function(){var IS_OLD_OPERA=Prototype.Browser.Opera&&window.parseFloat(window.opera.version())<9.5;var ROOT=null;function getRootElement(){if(ROOT)return ROOT;ROOT=IS_OLD_OPERA?document.body:document.documentElement;return ROOT}function getDimensions(){return{width:this.getWidth(),height:this.getHeight()}}function getWidth(){return getRootElement().clientWidth}function getHeight(){return getRootElement().clientHeight}function getScrollOffsets(){var x=window.pageXOffset||document.documentElement.scrollLeft||document.body.scrollLeft;var y=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop;return new Element.Offset(x,y)}document.viewport={getDimensions:getDimensions,getWidth:getWidth,getHeight:getHeight,getScrollOffsets:getScrollOffsets}})();window.$$=function(){var expression=$A(arguments).join(", ");return Prototype.Selector.select(expression,document)};Prototype.Selector=function(){function select(){throw new Error('Method "Prototype.Selector.select" must be defined.')}function match(){throw new Error('Method "Prototype.Selector.match" must be defined.')}function find(elements,expression,index){index=index||0;var match=Prototype.Selector.match,length=elements.length,matchIndex=0,i;for(i=0;i+~]|"+whitespace+")"+whitespace+"*"),rattributeQuotes=new RegExp("="+whitespace+"*([^\\]'\"]*?)"+whitespace+"*\\]","g"),rpseudo=new RegExp(pseudos),ridentifier=new RegExp("^"+identifier+"$"),matchExpr={ID:new RegExp("^#("+characterEncoding+")"),CLASS:new RegExp("^\\.("+characterEncoding+")"),TAG:new RegExp("^("+characterEncoding.replace("w","w*")+")"),ATTR:new RegExp("^"+attributes),PSEUDO:new RegExp("^"+pseudos),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+whitespace+"*(even|odd|(([+-]|)(\\d*)n|)"+whitespace+"*(?:([+-]|)"+whitespace+"*(\\d+)|))"+whitespace+"*\\)|)","i"),bool:new RegExp("^(?:"+booleans+")$","i"),needsContext:new RegExp("^"+whitespace+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+whitespace+"*((?:-\\d)?\\d*)"+whitespace+"*\\)|)(?=[^-]|$)","i")},rinputs=/^(?:input|select|textarea|button)$/i,rheader=/^h\d$/i,rnative=/^[^{]+\{\s*\[native \w/,rquickExpr=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,rsibling=/[+~]/,rescape=/'|\\/g,runescape=new RegExp("\\\\([\\da-f]{1,6}"+whitespace+"?|("+whitespace+")|.)","ig"),funescape=function(_,escaped,escapedWhitespace){var high="0x"+escaped-65536;return high!==high||escapedWhitespace?escaped:high<0?String.fromCharCode(high+65536):String.fromCharCode(high>>10|55296,high&1023|56320)};try{push.apply(arr=slice.call(preferredDoc.childNodes),preferredDoc.childNodes);arr[preferredDoc.childNodes.length].nodeType}catch(e){push={apply:arr.length?function(target,els){push_native.apply(target,slice.call(els))}:function(target,els){var j=target.length,i=0;while(target[j++]=els[i++]){}target.length=j-1}}}function Sizzle(selector,context,results,seed){var match,elem,m,nodeType,i,groups,old,nid,newContext,newSelector;if((context?context.ownerDocument||context:preferredDoc)!==document){setDocument(context)}context=context||document;results=results||[];if(!selector||typeof selector!=="string"){return results}if((nodeType=context.nodeType)!==1&&nodeType!==9){return[]}if(documentIsHTML&&!seed){if(match=rquickExpr.exec(selector)){if(m=match[1]){if(nodeType===9){elem=context.getElementById(m);if(elem&&elem.parentNode){if(elem.id===m){results.push(elem);return results}}else{return results}}else{if(context.ownerDocument&&(elem=context.ownerDocument.getElementById(m))&&contains(context,elem)&&elem.id===m){results.push(elem);return results}}}else if(match[2]){push.apply(results,context.getElementsByTagName(selector));return results}else if((m=match[3])&&support.getElementsByClassName&&context.getElementsByClassName){push.apply(results,context.getElementsByClassName(m));return results}}if(support.qsa&&(!rbuggyQSA||!rbuggyQSA.test(selector))){nid=old=expando;newContext=context;newSelector=nodeType===9&&selector;if(nodeType===1&&context.nodeName.toLowerCase()!=="object"){groups=tokenize(selector);if(old=context.getAttribute("id")){nid=old.replace(rescape,"\\$&")}else{context.setAttribute("id",nid)}nid="[id='"+nid+"'] ";i=groups.length;while(i--){groups[i]=nid+toSelector(groups[i])}newContext=rsibling.test(selector)&&testContext(context.parentNode)||context;newSelector=groups.join(",")}if(newSelector){try{push.apply(results,newContext.querySelectorAll(newSelector));return results}catch(qsaError){}finally{if(!old){context.removeAttribute("id")}}}}}return select(selector.replace(rtrim,"$1"),context,results,seed)}function createCache(){var keys=[];function cache(key,value){if(keys.push(key+" ")>Expr.cacheLength){delete cache[keys.shift()]}return cache[key+" "]=value}return cache}function markFunction(fn){fn[expando]=true;return fn}function assert(fn){var div=document.createElement("div");try{return!!fn(div)}catch(e){return false}finally{if(div.parentNode){div.parentNode.removeChild(div)}div=null}}function addHandle(attrs,handler){var arr=attrs.split("|"),i=attrs.length;while(i--){Expr.attrHandle[arr[i]]=handler}}function siblingCheck(a,b){var cur=b&&a,diff=cur&&a.nodeType===1&&b.nodeType===1&&(~b.sourceIndex||MAX_NEGATIVE)-(~a.sourceIndex||MAX_NEGATIVE);if(diff){return diff}if(cur){while(cur=cur.nextSibling){if(cur===b){return-1}}}return a?1:-1}function createInputPseudo(type){return function(elem){var name=elem.nodeName.toLowerCase();return name==="input"&&elem.type===type}}function createButtonPseudo(type){return function(elem){var name=elem.nodeName.toLowerCase();return(name==="input"||name==="button")&&elem.type===type}}function createPositionalPseudo(fn){return markFunction(function(argument){argument=+argument;return markFunction(function(seed,matches){var j,matchIndexes=fn([],seed.length,argument),i=matchIndexes.length;while(i--){if(seed[j=matchIndexes[i]]){seed[j]=!(matches[j]=seed[j])}}})})}function testContext(context){return context&&typeof context.getElementsByTagName!==strundefined&&context}support=Sizzle.support={};isXML=Sizzle.isXML=function(elem){var documentElement=elem&&(elem.ownerDocument||elem).documentElement;return documentElement?documentElement.nodeName!=="HTML":false};setDocument=Sizzle.setDocument=function(node){var hasCompare,doc=node?node.ownerDocument||node:preferredDoc,parent=doc.defaultView;if(doc===document||doc.nodeType!==9||!doc.documentElement){return document}document=doc;docElem=doc.documentElement;documentIsHTML=!isXML(doc);if(parent&&parent!==parent.top){if(parent.addEventListener){parent.addEventListener("unload",function(){setDocument()},false)}else if(parent.attachEvent){parent.attachEvent("onunload",function(){setDocument()})}}support.attributes=assert(function(div){div.className="i";return!div.getAttribute("className")});support.getElementsByTagName=assert(function(div){div.appendChild(doc.createComment(""));return!div.getElementsByTagName("*").length});support.getElementsByClassName=rnative.test(doc.getElementsByClassName)&&assert(function(div){div.innerHTML="
    ";div.firstChild.className="i";return div.getElementsByClassName("i").length===2});support.getById=assert(function(div){docElem.appendChild(div).id=expando;return!doc.getElementsByName||!doc.getElementsByName(expando).length});if(support.getById){Expr.find["ID"]=function(id,context){if(typeof context.getElementById!==strundefined&&documentIsHTML){var m=context.getElementById(id);return m&&m.parentNode?[m]:[]}};Expr.filter["ID"]=function(id){var attrId=id.replace(runescape,funescape);return function(elem){return elem.getAttribute("id")===attrId}}}else{delete Expr.find["ID"];Expr.filter["ID"]=function(id){var attrId=id.replace(runescape,funescape);return function(elem){var node=typeof elem.getAttributeNode!==strundefined&&elem.getAttributeNode("id");return node&&node.value===attrId}}}Expr.find["TAG"]=support.getElementsByTagName?function(tag,context){if(typeof context.getElementsByTagName!==strundefined){return context.getElementsByTagName(tag)}}:function(tag,context){var elem,tmp=[],i=0,results=context.getElementsByTagName(tag);if(tag==="*"){while(elem=results[i++]){if(elem.nodeType===1){tmp.push(elem)}}return tmp}return results};Expr.find["CLASS"]=support.getElementsByClassName&&function(className,context){if(typeof context.getElementsByClassName!==strundefined&&documentIsHTML){return context.getElementsByClassName(className)}};rbuggyMatches=[];rbuggyQSA=[];if(support.qsa=rnative.test(doc.querySelectorAll)){assert(function(div){div.innerHTML="";if(div.querySelectorAll("[t^='']").length){rbuggyQSA.push("[*^$]="+whitespace+"*(?:''|\"\")")}if(!div.querySelectorAll("[selected]").length){rbuggyQSA.push("\\["+whitespace+"*(?:value|"+booleans+")")}if(!div.querySelectorAll(":checked").length){rbuggyQSA.push(":checked")}});assert(function(div){var input=doc.createElement("input");input.setAttribute("type","hidden");div.appendChild(input).setAttribute("name","D");if(div.querySelectorAll("[name=d]").length){rbuggyQSA.push("name"+whitespace+"*[*^$|!~]?=")}if(!div.querySelectorAll(":enabled").length){rbuggyQSA.push(":enabled",":disabled")}div.querySelectorAll("*,:x");rbuggyQSA.push(",.*:")})}if(support.matchesSelector=rnative.test(matches=docElem.webkitMatchesSelector||docElem.mozMatchesSelector||docElem.oMatchesSelector||docElem.msMatchesSelector)){assert(function(div){support.disconnectedMatch=matches.call(div,"div");matches.call(div,"[s!='']:x");rbuggyMatches.push("!=",pseudos)})}rbuggyQSA=rbuggyQSA.length&&new RegExp(rbuggyQSA.join("|"));rbuggyMatches=rbuggyMatches.length&&new RegExp(rbuggyMatches.join("|"));hasCompare=rnative.test(docElem.compareDocumentPosition);contains=hasCompare||rnative.test(docElem.contains)?function(a,b){var adown=a.nodeType===9?a.documentElement:a,bup=b&&b.parentNode;return a===bup||!!(bup&&bup.nodeType===1&&(adown.contains?adown.contains(bup):a.compareDocumentPosition&&a.compareDocumentPosition(bup)&16))}:function(a,b){if(b){while(b=b.parentNode){if(b===a){return true}}}return false};sortOrder=hasCompare?function(a,b){if(a===b){hasDuplicate=true;return 0}var compare=!a.compareDocumentPosition-!b.compareDocumentPosition;if(compare){return compare}compare=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1;if(compare&1||!support.sortDetached&&b.compareDocumentPosition(a)===compare){if(a===doc||a.ownerDocument===preferredDoc&&contains(preferredDoc,a)){return-1}if(b===doc||b.ownerDocument===preferredDoc&&contains(preferredDoc,b)){return 1}return sortInput?indexOf.call(sortInput,a)-indexOf.call(sortInput,b):0}return compare&4?-1:1}:function(a,b){if(a===b){hasDuplicate=true;return 0}var cur,i=0,aup=a.parentNode,bup=b.parentNode,ap=[a],bp=[b];if(!aup||!bup){return a===doc?-1:b===doc?1:aup?-1:bup?1:sortInput?indexOf.call(sortInput,a)-indexOf.call(sortInput,b):0}else if(aup===bup){return siblingCheck(a,b)}cur=a;while(cur=cur.parentNode){ap.unshift(cur)}cur=b;while(cur=cur.parentNode){bp.unshift(cur)}while(ap[i]===bp[i]){i++}return i?siblingCheck(ap[i],bp[i]):ap[i]===preferredDoc?-1:bp[i]===preferredDoc?1:0};return doc};Sizzle.matches=function(expr,elements){return Sizzle(expr,null,null,elements)};Sizzle.matchesSelector=function(elem,expr){if((elem.ownerDocument||elem)!==document){setDocument(elem)}expr=expr.replace(rattributeQuotes,"='$1']");if(support.matchesSelector&&documentIsHTML&&(!rbuggyMatches||!rbuggyMatches.test(expr))&&(!rbuggyQSA||!rbuggyQSA.test(expr))){try{var ret=matches.call(elem,expr);if(ret||support.disconnectedMatch||elem.document&&elem.document.nodeType!==11){return ret}}catch(e){}}return Sizzle(expr,document,null,[elem]).length>0};Sizzle.contains=function(context,elem){if((context.ownerDocument||context)!==document){setDocument(context)}return contains(context,elem)};Sizzle.attr=function(elem,name){if((elem.ownerDocument||elem)!==document){setDocument(elem)}var fn=Expr.attrHandle[name.toLowerCase()],val=fn&&hasOwn.call(Expr.attrHandle,name.toLowerCase())?fn(elem,name,!documentIsHTML):undefined;return val!==undefined?val:support.attributes||!documentIsHTML?elem.getAttribute(name):(val=elem.getAttributeNode(name))&&val.specified?val.value:null};Sizzle.error=function(msg){throw new Error("Syntax error, unrecognized expression: "+msg)};Sizzle.uniqueSort=function(results){var elem,duplicates=[],j=0,i=0;hasDuplicate=!support.detectDuplicates;sortInput=!support.sortStable&&results.slice(0);results.sort(sortOrder);if(hasDuplicate){while(elem=results[i++]){if(elem===results[i]){j=duplicates.push(i)}}while(j--){results.splice(duplicates[j],1)}}sortInput=null;return results};getText=Sizzle.getText=function(elem){var node,ret="",i=0,nodeType=elem.nodeType;if(!nodeType){while(node=elem[i++]){ret+=getText(node)}}else if(nodeType===1||nodeType===9||nodeType===11){if(typeof elem.textContent==="string"){return elem.textContent}else{for(elem=elem.firstChild;elem;elem=elem.nextSibling){ret+=getText(elem)}}}else if(nodeType===3||nodeType===4){return elem.nodeValue}return ret};Expr=Sizzle.selectors={cacheLength:50,createPseudo:markFunction,match:matchExpr,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:true}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:true},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(match){match[1]=match[1].replace(runescape,funescape);match[3]=(match[4]||match[5]||"").replace(runescape,funescape);if(match[2]==="~="){match[3]=" "+match[3]+" "}return match.slice(0,4)},CHILD:function(match){match[1]=match[1].toLowerCase();if(match[1].slice(0,3)==="nth"){if(!match[3]){Sizzle.error(match[0])}match[4]=+(match[4]?match[5]+(match[6]||1):2*(match[3]==="even"||match[3]==="odd"));match[5]=+(match[7]+match[8]||match[3]==="odd")}else if(match[3]){Sizzle.error(match[0])}return match},PSEUDO:function(match){var excess,unquoted=!match[5]&&match[2];if(matchExpr["CHILD"].test(match[0])){return null}if(match[3]&&match[4]!==undefined){match[2]=match[4]}else if(unquoted&&rpseudo.test(unquoted)&&(excess=tokenize(unquoted,true))&&(excess=unquoted.indexOf(")",unquoted.length-excess)-unquoted.length)){match[0]=match[0].slice(0,excess);match[2]=unquoted.slice(0,excess)}return match.slice(0,3)}},filter:{TAG:function(nodeNameSelector){var nodeName=nodeNameSelector.replace(runescape,funescape).toLowerCase();return nodeNameSelector==="*"?function(){return true}:function(elem){return elem.nodeName&&elem.nodeName.toLowerCase()===nodeName}},CLASS:function(className){var pattern=classCache[className+" "];return pattern||(pattern=new RegExp("(^|"+whitespace+")"+className+"("+whitespace+"|$)"))&&classCache(className,function(elem){return pattern.test(typeof elem.className==="string"&&elem.className||typeof elem.getAttribute!==strundefined&&elem.getAttribute("class")||"")})},ATTR:function(name,operator,check){return function(elem){var result=Sizzle.attr(elem,name);if(result==null){return operator==="!="}if(!operator){return true}result+="";return operator==="="?result===check:operator==="!="?result!==check:operator==="^="?check&&result.indexOf(check)===0:operator==="*="?check&&result.indexOf(check)>-1:operator==="$="?check&&result.slice(-check.length)===check:operator==="~="?(" "+result+" ").indexOf(check)>-1:operator==="|="?result===check||result.slice(0,check.length+1)===check+"-":false}},CHILD:function(type,what,argument,first,last){var simple=type.slice(0,3)!=="nth",forward=type.slice(-4)!=="last",ofType=what==="of-type";return first===1&&last===0?function(elem){return!!elem.parentNode}:function(elem,context,xml){var cache,outerCache,node,diff,nodeIndex,start,dir=simple!==forward?"nextSibling":"previousSibling",parent=elem.parentNode,name=ofType&&elem.nodeName.toLowerCase(),useCache=!xml&&!ofType;if(parent){if(simple){while(dir){node=elem;while(node=node[dir]){if(ofType?node.nodeName.toLowerCase()===name:node.nodeType===1){return false}}start=dir=type==="only"&&!start&&"nextSibling"}return true}start=[forward?parent.firstChild:parent.lastChild];if(forward&&useCache){outerCache=parent[expando]||(parent[expando]={});cache=outerCache[type]||[];nodeIndex=cache[0]===dirruns&&cache[1];diff=cache[0]===dirruns&&cache[2];node=nodeIndex&&parent.childNodes[nodeIndex];while(node=++nodeIndex&&node&&node[dir]||(diff=nodeIndex=0)||start.pop()){if(node.nodeType===1&&++diff&&node===elem){outerCache[type]=[dirruns,nodeIndex,diff];break}}}else if(useCache&&(cache=(elem[expando]||(elem[expando]={}))[type])&&cache[0]===dirruns){diff=cache[1]}else{while(node=++nodeIndex&&node&&node[dir]||(diff=nodeIndex=0)||start.pop()){if((ofType?node.nodeName.toLowerCase()===name:node.nodeType===1)&&++diff){if(useCache){(node[expando]||(node[expando]={}))[type]=[dirruns,diff]}if(node===elem){break}}}}diff-=last;return diff===first||diff%first===0&&diff/first>=0}}},PSEUDO:function(pseudo,argument){var args,fn=Expr.pseudos[pseudo]||Expr.setFilters[pseudo.toLowerCase()]||Sizzle.error("unsupported pseudo: "+pseudo);if(fn[expando]){return fn(argument)}if(fn.length>1){args=[pseudo,pseudo,"",argument];return Expr.setFilters.hasOwnProperty(pseudo.toLowerCase())?markFunction(function(seed,matches){var idx,matched=fn(seed,argument),i=matched.length;while(i--){idx=indexOf.call(seed,matched[i]);seed[idx]=!(matches[idx]=matched[i])}}):function(elem){return fn(elem,0,args)}}return fn}},pseudos:{not:markFunction(function(selector){var input=[],results=[],matcher=compile(selector.replace(rtrim,"$1"));return matcher[expando]?markFunction(function(seed,matches,context,xml){var elem,unmatched=matcher(seed,null,xml,[]),i=seed.length;while(i--){if(elem=unmatched[i]){seed[i]=!(matches[i]=elem)}}}):function(elem,context,xml){input[0]=elem;matcher(input,null,xml,results);return!results.pop()}}),has:markFunction(function(selector){return function(elem){return Sizzle(selector,elem).length>0}}),contains:markFunction(function(text){return function(elem){return(elem.textContent||elem.innerText||getText(elem)).indexOf(text)>-1}}),lang:markFunction(function(lang){if(!ridentifier.test(lang||"")){Sizzle.error("unsupported lang: "+lang)}lang=lang.replace(runescape,funescape).toLowerCase();return function(elem){var elemLang;do{if(elemLang=documentIsHTML?elem.lang:elem.getAttribute("xml:lang")||elem.getAttribute("lang")){elemLang=elemLang.toLowerCase();return elemLang===lang||elemLang.indexOf(lang+"-")===0}}while((elem=elem.parentNode)&&elem.nodeType===1);return false}}),target:function(elem){var hash=window.location&&window.location.hash;return hash&&hash.slice(1)===elem.id},root:function(elem){return elem===docElem},focus:function(elem){return elem===document.activeElement&&(!document.hasFocus||document.hasFocus())&&!!(elem.type||elem.href||~elem.tabIndex)},enabled:function(elem){return elem.disabled===false},disabled:function(elem){return elem.disabled===true},checked:function(elem){var nodeName=elem.nodeName.toLowerCase();return nodeName==="input"&&!!elem.checked||nodeName==="option"&&!!elem.selected},selected:function(elem){if(elem.parentNode){elem.parentNode.selectedIndex}return elem.selected===true},empty:function(elem){for(elem=elem.firstChild;elem;elem=elem.nextSibling){if(elem.nodeType<6){return false}}return true},parent:function(elem){return!Expr.pseudos["empty"](elem)},header:function(elem){return rheader.test(elem.nodeName)},input:function(elem){return rinputs.test(elem.nodeName)},button:function(elem){var name=elem.nodeName.toLowerCase();return name==="input"&&elem.type==="button"||name==="button"},text:function(elem){var attr;return elem.nodeName.toLowerCase()==="input"&&elem.type==="text"&&((attr=elem.getAttribute("type"))==null||attr.toLowerCase()==="text")},first:createPositionalPseudo(function(){return[0]}),last:createPositionalPseudo(function(matchIndexes,length){return[length-1]}),eq:createPositionalPseudo(function(matchIndexes,length,argument){return[argument<0?argument+length:argument]}),even:createPositionalPseudo(function(matchIndexes,length){var i=0;for(;i=0;){matchIndexes.push(i)}return matchIndexes}),gt:createPositionalPseudo(function(matchIndexes,length,argument){var i=argument<0?argument+length:argument;for(;++i1?function(elem,context,xml){var i=matchers.length;while(i--){if(!matchers[i](elem,context,xml)){return false}}return true}:matchers[0]}function multipleContexts(selector,contexts,results){var i=0,len=contexts.length;for(;i-1){seed[temp]=!(results[temp]=elem)}}}}else{matcherOut=condense(matcherOut===results?matcherOut.splice(preexisting,matcherOut.length):matcherOut);if(postFinder){postFinder(null,results,matcherOut,xml)}else{push.apply(results,matcherOut)}}})}function matcherFromTokens(tokens){var checkContext,matcher,j,len=tokens.length,leadingRelative=Expr.relative[tokens[0].type],implicitRelative=leadingRelative||Expr.relative[" "],i=leadingRelative?1:0,matchContext=addCombinator(function(elem){return elem===checkContext},implicitRelative,true),matchAnyContext=addCombinator(function(elem){return indexOf.call(checkContext,elem)>-1},implicitRelative,true),matchers=[function(elem,context,xml){return!leadingRelative&&(xml||context!==outermostContext)||((checkContext=context).nodeType?matchContext(elem,context,xml):matchAnyContext(elem,context,xml))}];for(;i1&&elementMatcher(matchers),i>1&&toSelector(tokens.slice(0,i-1).concat({value:tokens[i-2].type===" "?"*":""})).replace(rtrim,"$1"),matcher,i0,byElement=elementMatchers.length>0,superMatcher=function(seed,context,xml,results,outermost){var elem,j,matcher,matchedCount=0,i="0",unmatched=seed&&[],setMatched=[],contextBackup=outermostContext,elems=seed||byElement&&Expr.find["TAG"]("*",outermost),dirrunsUnique=dirruns+=contextBackup==null?1:Math.random()||.1,len=elems.length;if(outermost){outermostContext=context!==document&&context}for(;i!==len&&(elem=elems[i])!=null;i++){if(byElement&&elem){j=0;while(matcher=elementMatchers[j++]){if(matcher(elem,context,xml)){results.push(elem);break}}if(outermost){dirruns=dirrunsUnique}}if(bySet){if(elem=!matcher&&elem){matchedCount--}if(seed){unmatched.push(elem)}}}matchedCount+=i;if(bySet&&i!==matchedCount){j=0;while(matcher=setMatchers[j++]){matcher(unmatched,setMatched,context,xml)}if(seed){if(matchedCount>0){while(i--){if(!(unmatched[i]||setMatched[i])){setMatched[i]=pop.call(results)}}}setMatched=condense(setMatched)}push.apply(results,setMatched);if(outermost&&!seed&&setMatched.length>0&&matchedCount+setMatchers.length>1){Sizzle.uniqueSort(results)}}if(outermost){dirruns=dirrunsUnique;outermostContext=contextBackup}return unmatched};return bySet?markFunction(superMatcher):superMatcher}compile=Sizzle.compile=function(selector,match){var i,setMatchers=[],elementMatchers=[],cached=compilerCache[selector+" "];if(!cached){if(!match){match=tokenize(selector)}i=match.length;while(i--){cached=matcherFromTokens(match[i]);if(cached[expando]){setMatchers.push(cached)}else{elementMatchers.push(cached)}}cached=compilerCache(selector,matcherFromGroupMatchers(elementMatchers,setMatchers));cached.selector=selector}return cached};select=Sizzle.select=function(selector,context,results,seed){var i,tokens,token,type,find,compiled=typeof selector==="function"&&selector,match=!seed&&tokenize(selector=compiled.selector||selector);results=results||[];if(match.length===1){tokens=match[0]=match[0].slice(0);if(tokens.length>2&&(token=tokens[0]).type==="ID"&&support.getById&&context.nodeType===9&&documentIsHTML&&Expr.relative[tokens[1].type]){context=(Expr.find["ID"](token.matches[0].replace(runescape,funescape),context)||[])[0];if(!context){return results}else if(compiled){context=context.parentNode}selector=selector.slice(tokens.shift().value.length)}i=matchExpr["needsContext"].test(selector)?0:tokens.length;while(i--){token=tokens[i];if(Expr.relative[type=token.type]){break}if(find=Expr.find[type]){if(seed=find(token.matches[0].replace(runescape,funescape),rsibling.test(tokens[0].type)&&testContext(context.parentNode)||context)){ -tokens.splice(i,1);selector=seed.length&&toSelector(tokens);if(!selector){push.apply(results,seed);return results}break}}}}(compiled||compile(selector,match))(seed,context,!documentIsHTML,results,rsibling.test(selector)&&testContext(context.parentNode)||context);return results};support.sortStable=expando.split("").sort(sortOrder).join("")===expando;support.detectDuplicates=!!hasDuplicate;setDocument();support.sortDetached=assert(function(div1){return div1.compareDocumentPosition(document.createElement("div"))&1});if(!assert(function(div){div.innerHTML="";return div.firstChild.getAttribute("href")==="#"})){addHandle("type|href|height|width",function(elem,name,isXML){if(!isXML){return elem.getAttribute(name,name.toLowerCase()==="type"?1:2)}})}if(!support.attributes||!assert(function(div){div.innerHTML="";div.firstChild.setAttribute("value","");return div.firstChild.getAttribute("value")===""})){addHandle("value",function(elem,name,isXML){if(!isXML&&elem.nodeName.toLowerCase()==="input"){return elem.defaultValue}})}if(!assert(function(div){return div.getAttribute("disabled")==null})){addHandle(booleans,function(elem,name,isXML){var val;if(!isXML){return elem[name]===true?name.toLowerCase():(val=elem.getAttributeNode(name))&&val.specified?val.value:null}})}if(typeof define==="function"&&define.amd){define(function(){return Sizzle})}else if(typeof module!=="undefined"&&module.exports){module.exports=Sizzle}else{window.Sizzle=Sizzle}})(window);(function(engine){var extendElements=Prototype.Selector.extendElements;function select(selector,scope){return extendElements(engine(selector,scope||document))}function match(element,selector){return engine.matches(selector,[element]).length==1}Prototype.Selector.engine=engine;Prototype.Selector.select=select;Prototype.Selector.match=match})(Sizzle);window.Sizzle=Prototype._original_property;delete Prototype._original_property;var Form={reset:function(form){form=$(form);form.reset();return form},serializeElements:function(elements,options){if(typeof options!="object")options={hash:!!options};else if(Object.isUndefined(options.hash))options.hash=true;var key,value,submitted=false,submit=options.submit,accumulator,initial;if(options.hash){initial={};accumulator=function(result,key,value){if(key in result){if(!Object.isArray(result[key]))result[key]=[result[key]];result[key]=result[key].concat(value)}else result[key]=value;return result}}else{initial="";accumulator=function(result,key,values){if(!Object.isArray(values)){values=[values]}if(!values.length){return result}var encodedKey=encodeURIComponent(key).gsub(/%20/,"+");return result+(result?"&":"")+values.map(function(value){value=value.gsub(/(\r)?\n/,"\r\n");value=encodeURIComponent(value);value=value.gsub(/%20/,"+");return encodedKey+"="+value}).join("&")}}return elements.inject(initial,function(result,element){if(!element.disabled&&element.name){key=element.name;value=$(element).getValue();if(value!=null&&element.type!="file"&&(element.type!="submit"||!submitted&&submit!==false&&(!submit||key==submit)&&(submitted=true))){result=accumulator(result,key,value)}}return result})}};Form.Methods={serialize:function(form,options){return Form.serializeElements(Form.getElements(form),options)},getElements:function(form){var elements=$(form).getElementsByTagName("*");var element,results=[],serializers=Form.Element.Serializers;for(var i=0;element=elements[i];i++){if(serializers[element.tagName.toLowerCase()])results.push(Element.extend(element))}return results},getInputs:function(form,typeName,name){form=$(form);var inputs=form.getElementsByTagName("input");if(!typeName&&!name)return $A(inputs).map(Element.extend);for(var i=0,matchingInputs=[],length=inputs.length;i=0}).sortBy(function(element){return element.tabIndex}).first();return firstByIndex?firstByIndex:elements.find(function(element){return/^(?:input|select|textarea)$/i.test(element.tagName)})},focusFirstElement:function(form){form=$(form);var element=form.findFirstElement();if(element)element.activate();return form},request:function(form,options){form=$(form),options=Object.clone(options||{});var params=options.parameters,action=form.readAttribute("action")||"";if(action.blank())action=window.location.href;options.parameters=form.serialize(true);if(params){if(Object.isString(params))params=params.toQueryParams();Object.extend(options.parameters,params)}if(form.hasAttribute("method")&&!options.method)options.method=form.method;return new Ajax.Request(action,options)}};Form.Element={focus:function(element){$(element).focus();return element},select:function(element){$(element).select();return element}};Form.Element.Methods={serialize:function(element){element=$(element);if(!element.disabled&&element.name){var value=element.getValue();if(value!=undefined){var pair={};pair[element.name]=value;return Object.toQueryString(pair)}}return""},getValue:function(element){element=$(element);var method=element.tagName.toLowerCase();return Form.Element.Serializers[method](element)},setValue:function(element,value){element=$(element);var method=element.tagName.toLowerCase();Form.Element.Serializers[method](element,value);return element},clear:function(element){$(element).value="";return element},present:function(element){return $(element).value!=""},activate:function(element){element=$(element);try{element.focus();if(element.select&&(element.tagName.toLowerCase()!="input"||!/^(?:button|reset|submit)$/i.test(element.type)))element.select()}catch(e){}return element},disable:function(element){element=$(element);element.disabled=true;return element},enable:function(element){element=$(element);element.disabled=false;return element}};var Field=Form.Element;var $F=Form.Element.Methods.getValue;Form.Element.Serializers=function(){function input(element,value){switch(element.type.toLowerCase()){case"checkbox":case"radio":return inputSelector(element,value);default:return valueSelector(element,value)}}function inputSelector(element,value){if(Object.isUndefined(value))return element.checked?element.value:null;else element.checked=!!value}function valueSelector(element,value){if(Object.isUndefined(value))return element.value;else element.value=value}function select(element,value){if(Object.isUndefined(value))return(element.type==="select-one"?selectOne:selectMany)(element);var opt,currentValue,single=!Object.isArray(value);for(var i=0,length=element.length;i=0?optionValue(element.options[index]):null}function selectMany(element){var values,length=element.length;if(!length)return null;for(var i=0,values=[];i=this.offset[1]&&y=this.offset[0]&&x=this.offset[1]&&this.ycomp=this.offset[0]&&this.xcomp0})._each(iterator,context)},set:function(className){this.element.className=className},add:function(classNameToAdd){if(this.include(classNameToAdd))return;this.set($A(this).concat(classNameToAdd).join(" "))},remove:function(classNameToRemove){if(!this.include(classNameToRemove))return;this.set($A(this).without(classNameToRemove).join(" "))},toString:function(){return $A(this).join(" ")}};Object.extend(Element.ClassNames.prototype,Enumerable);(function(){window.Selector=Class.create({initialize:function(expression){this.expression=expression.strip()},findElements:function(rootElement){return Prototype.Selector.select(this.expression,rootElement)},match:function(element){return Prototype.Selector.match(element,this.expression)},toString:function(){return this.expression},inspect:function(){return"#"}});Object.extend(Selector,{matchElements:function(elements,expression){var match=Prototype.Selector.match,results=[];for(var i=0,length=elements.length;i=y;y++)if(l=Math.sin(h),m=Math.tan(h),r=m*Math.sqrt(1-t*l*l),c=Math.sin(2*h),u=i*h-s*c+e*Math.sin(4*h)-o*Math.sin(6*h),d=i-2*s*Math.cos(2*h)+4*e*Math.cos(4*h)-6*o*Math.cos(6*h),p=2*u+r*(u*u+a)-2*n*(r*u+1),_=t*c*(u*u+a-2*n*u)/(2*r),f=2*(n-u)*(r*d-2/c)-2*d,P=p/(_+f),h+=P,1e-10>=Math.abs(P))return h;return Proj4js.reportError("phi4z: No convergence"),null}function e4fn(t){var i,s;return i=1+t,s=1-t,Math.sqrt(Math.pow(i,i)*Math.pow(s,s))}var Proj4js={defaultDatum:"WGS84",transform:function(t,i,s){if(!t.readyToUse)return this.reportError("Proj4js initialization for:"+t.srsCode+" not yet complete"),s;if(!i.readyToUse)return this.reportError("Proj4js initialization for:"+i.srsCode+" not yet complete"),s;if(t.datum&&i.datum&&((t.datum.datum_type==Proj4js.common.PJD_3PARAM||t.datum.datum_type==Proj4js.common.PJD_7PARAM)&&"WGS84"!=i.datumCode||(i.datum.datum_type==Proj4js.common.PJD_3PARAM||i.datum.datum_type==Proj4js.common.PJD_7PARAM)&&"WGS84"!=t.datumCode)){var e=Proj4js.WGS84;this.transform(t,e,s),t=e}return"enu"!=t.axis&&this.adjust_axis(t,!1,s),"longlat"==t.projName?(s.x*=Proj4js.common.D2R,s.y*=Proj4js.common.D2R):(t.to_meter&&(s.x*=t.to_meter,s.y*=t.to_meter),t.inverse(s)),t.from_greenwich&&(s.x+=t.from_greenwich),s=this.datum_transform(t.datum,i.datum,s),i.from_greenwich&&(s.x-=i.from_greenwich),"longlat"==i.projName?(s.x*=Proj4js.common.R2D,s.y*=Proj4js.common.R2D):(i.forward(s),i.to_meter&&(s.x/=i.to_meter,s.y/=i.to_meter)),"enu"!=i.axis&&this.adjust_axis(i,!0,s),s},datum_transform:function(t,i,s){return t.compare_datums(i)?s:t.datum_type==Proj4js.common.PJD_NODATUM||i.datum_type==Proj4js.common.PJD_NODATUM?s:((t.es!=i.es||t.a!=i.a||t.datum_type==Proj4js.common.PJD_3PARAM||t.datum_type==Proj4js.common.PJD_7PARAM||i.datum_type==Proj4js.common.PJD_3PARAM||i.datum_type==Proj4js.common.PJD_7PARAM)&&(t.geodetic_to_geocentric(s),(t.datum_type==Proj4js.common.PJD_3PARAM||t.datum_type==Proj4js.common.PJD_7PARAM)&&t.geocentric_to_wgs84(s),(i.datum_type==Proj4js.common.PJD_3PARAM||i.datum_type==Proj4js.common.PJD_7PARAM)&&i.geocentric_from_wgs84(s),i.geocentric_to_geodetic(s)),s)},adjust_axis:function(t,i,s){for(var e,o,n=s.x,a=s.y,r=s.z||0,h=0;3>h;h++)if(!i||2!=h||void 0!==s.z)switch(0==h?(e=n,o="x"):1==h?(e=a,o="y"):(e=r,o="z"),t.axis[h]){case"e":s[o]=e;break;case"w":s[o]=-e;break;case"n":s[o]=e;break;case"s":s[o]=-e;break;case"u":void 0!==s[o]&&(s.z=e);break;case"d":void 0!==s[o]&&(s.z=-e);break;default:return alert("ERROR: unknow axis ("+t.axis[h]+") - check definition of "+t.projName),null}return s},reportError:function(){},extend:function(t,i){if(t=t||{},i)for(var s in i){var e=i[s];void 0!==e&&(t[s]=e)}return t},Class:function(){for(var t,i=function(){this.initialize.apply(this,arguments)},s={},e=0;arguments.length>e;++e)t="function"==typeof arguments[e]?arguments[e].prototype:arguments[e],Proj4js.extend(s,t);return i.prototype=s,i},bind:function(t,i){var s=Array.prototype.slice.apply(arguments,[2]);return function(){var e=s.concat(Array.prototype.slice.apply(arguments,[0])); +Math.sign = Math.sign || function(x) { + x = +x; // convert to a number + if (x === 0 || isNaN(x)) { + return x; + } + return x > 0 ? 1 : -1; +} -return t.apply(i,e)}},scriptName:"proj4js-combined.js",defsLookupService:"http://spatialreference.org/ref",libPath:null,getScriptLocation:function(){if(this.libPath)return this.libPath;for(var t=this.scriptName,i=t.length,s=document.getElementsByTagName("script"),e=0;s.length>e;e++){var o=s[e].getAttribute("src");if(o){var n=o.lastIndexOf(t);if(n>-1&&n+i==o.length){this.libPath=o.slice(0,-i);break}}}return this.libPath||""},loadScript:function(t,i,s,e){var o=document.createElement("script");o.defer=!1,o.type="text/javascript",o.id=t,o.src=t,o.onload=i,o.onerror=s,o.loadCheck=e,/MSIE/.test(navigator.userAgent)&&(o.onreadystatechange=this.checkReadyState),document.getElementsByTagName("head")[0].appendChild(o)},checkReadyState:function(){"loaded"==this.readyState&&(this.loadCheck()?this.onload():this.onerror())}};Proj4js.Proj=Proj4js.Class({readyToUse:!1,title:null,projName:null,units:null,datum:null,x0:0,y0:0,localCS:!1,queue:null,initialize:function(t,i){if(this.srsCodeInput=t,this.queue=[],i&&this.queue.push(i),t.indexOf("GEOGCS")>=0||t.indexOf("GEOCCS")>=0||t.indexOf("PROJCS")>=0||t.indexOf("LOCAL_CS")>=0)return this.parseWKT(t),this.deriveConstants(),this.loadProjCode(this.projName),void 0;if(0==t.indexOf("urn:")){var s=t.split(":");"ogc"!=s[1]&&"x-ogc"!=s[1]||"def"!=s[2]||"crs"!=s[3]||(t=s[4]+":"+s[s.length-1])}else if(0==t.indexOf("http://")){var e=t.split("#");e[0].match(/epsg.org/)?t="EPSG:"+e[1]:e[0].match(/RIG.xml/)&&(t="IGNF:"+e[1])}this.srsCode=t.toUpperCase(),0==this.srsCode.indexOf("EPSG")?(this.srsCode=this.srsCode,this.srsAuth="epsg",this.srsProjNumber=this.srsCode.substring(5)):0==this.srsCode.indexOf("IGNF")?(this.srsCode=this.srsCode,this.srsAuth="IGNF",this.srsProjNumber=this.srsCode.substring(5)):0==this.srsCode.indexOf("CRS")?(this.srsCode=this.srsCode,this.srsAuth="CRS",this.srsProjNumber=this.srsCode.substring(4)):(this.srsAuth="",this.srsProjNumber=this.srsCode),this.loadProjDefinition()},loadProjDefinition:function(){if(Proj4js.defs[this.srsCode])return this.defsLoaded(),void 0;var t=Proj4js.getScriptLocation()+"defs/"+this.srsAuth.toUpperCase()+this.srsProjNumber+".js";Proj4js.loadScript(t,Proj4js.bind(this.defsLoaded,this),Proj4js.bind(this.loadFromService,this),Proj4js.bind(this.checkDefsLoaded,this))},loadFromService:function(){var t=Proj4js.defsLookupService+"/"+this.srsAuth+"/"+this.srsProjNumber+"/proj4js/";Proj4js.loadScript(t,Proj4js.bind(this.defsLoaded,this),Proj4js.bind(this.defsFailed,this),Proj4js.bind(this.checkDefsLoaded,this))},defsLoaded:function(){this.parseDefs(),this.loadProjCode(this.projName)},checkDefsLoaded:function(){return Proj4js.defs[this.srsCode]?!0:!1},defsFailed:function(){Proj4js.reportError("failed to load projection definition for: "+this.srsCode),Proj4js.defs[this.srsCode]=Proj4js.defs.WGS84,this.defsLoaded()},loadProjCode:function(t){if(Proj4js.Proj[t])return this.initTransforms(),void 0;var i=Proj4js.getScriptLocation()+"projCode/"+t+".js";Proj4js.loadScript(i,Proj4js.bind(this.loadProjCodeSuccess,this,t),Proj4js.bind(this.loadProjCodeFailure,this,t),Proj4js.bind(this.checkCodeLoaded,this,t))},loadProjCodeSuccess:function(t){Proj4js.Proj[t].dependsOn?this.loadProjCode(Proj4js.Proj[t].dependsOn):this.initTransforms()},loadProjCodeFailure:function(t){Proj4js.reportError("failed to find projection file for: "+t)},checkCodeLoaded:function(t){return Proj4js.Proj[t]?!0:!1},initTransforms:function(){if(Proj4js.extend(this,Proj4js.Proj[this.projName]),this.init(),this.readyToUse=!0,this.queue)for(var t;t=this.queue.shift();)t.call(this,this)},wktRE:/^(\w+)\[(.*)\]$/,parseWKT:function(t){var i=t.match(this.wktRE);if(i){var s,e=i[1],o=i[2],n=o.split(",");s="TOWGS84"==e.toUpperCase()?e:n.shift(),s=s.replace(/^\"/,""),s=s.replace(/\"$/,"");for(var a=[],r=0,h="",l=0;n.length>l;++l){for(var c=n[l],m=0;c.length>m;++m)"["==c.charAt(m)&&++r,"]"==c.charAt(m)&&--r;h+=c,0===r?(a.push(h),h=""):h+=","}switch(e){case"LOCAL_CS":this.projName="identity",this.localCS=!0,this.srsCode=s;break;case"GEOGCS":this.projName="longlat",this.geocsCode=s,this.srsCode||(this.srsCode=s);break;case"PROJCS":this.srsCode=s;break;case"GEOCCS":break;case"PROJECTION":this.projName=Proj4js.wktProjections[s];break;case"DATUM":this.datumName=s;break;case"LOCAL_DATUM":this.datumCode="none";break;case"SPHEROID":this.ellps=s,this.a=parseFloat(a.shift()),this.rf=parseFloat(a.shift());break;case"PRIMEM":this.from_greenwich=parseFloat(a.shift());break;case"UNIT":this.units=s,this.unitsPerMeter=parseFloat(a.shift());break;case"PARAMETER":var u=s.toLowerCase(),d=parseFloat(a.shift());switch(u){case"false_easting":this.x0=d;break;case"false_northing":this.y0=d;break;case"scale_factor":this.k0=d;break;case"central_meridian":this.long0=d*Proj4js.common.D2R;break;case"latitude_of_origin":this.lat0=d*Proj4js.common.D2R;break;case"more_here":break;default:}break;case"TOWGS84":this.datum_params=a;break;case"AXIS":var u=s.toLowerCase(),d=a.shift();switch(d){case"EAST":d="e";break;case"WEST":d="w";break;case"NORTH":d="n";break;case"SOUTH":d="s";break;case"UP":d="u";break;case"DOWN":d="d";break;case"OTHER":default:d=" "}switch(this.axis||(this.axis="enu"),u){case"x":this.axis=d+this.axis.substr(1,2);break;case"y":this.axis=this.axis.substr(0,1)+d+this.axis.substr(2,1);break;case"z":this.axis=this.axis.substr(0,2)+d;break;default:}case"MORE_HERE":break;default:}for(var l=0;a.length>l;++l)this.parseWKT(a[l])}},parseDefs:function(){this.defData=Proj4js.defs[this.srsCode];var t,i;if(this.defData){for(var s=this.defData.split("+"),e=0;s.length>e;e++){var o=s[e].split("=");switch(t=o[0].toLowerCase(),i=o[1],t.replace(/\s/gi,"")){case"":break;case"title":this.title=i;break;case"proj":this.projName=i.replace(/\s/gi,"");break;case"units":this.units=i.replace(/\s/gi,"");break;case"datum":this.datumCode=i.replace(/\s/gi,"");break;case"nadgrids":this.nagrids=i.replace(/\s/gi,"");break;case"ellps":this.ellps=i.replace(/\s/gi,"");break;case"a":this.a=parseFloat(i);break;case"b":this.b=parseFloat(i);break;case"rf":this.rf=parseFloat(i);break;case"lat_0":this.lat0=i*Proj4js.common.D2R;break;case"lat_1":this.lat1=i*Proj4js.common.D2R;break;case"lat_2":this.lat2=i*Proj4js.common.D2R;break;case"lat_ts":this.lat_ts=i*Proj4js.common.D2R;break;case"lon_0":this.long0=i*Proj4js.common.D2R;break;case"alpha":this.alpha=parseFloat(i)*Proj4js.common.D2R;break;case"lonc":this.longc=i*Proj4js.common.D2R;break;case"x_0":this.x0=parseFloat(i);break;case"y_0":this.y0=parseFloat(i);break;case"k_0":this.k0=parseFloat(i);break;case"k":this.k0=parseFloat(i);break;case"r_a":this.R_A=!0;break;case"zone":this.zone=parseInt(i,10);break;case"south":this.utmSouth=!0;break;case"towgs84":this.datum_params=i.split(",");break;case"to_meter":this.to_meter=parseFloat(i);break;case"from_greenwich":this.from_greenwich=i*Proj4js.common.D2R;break;case"pm":i=i.replace(/\s/gi,""),this.from_greenwich=Proj4js.PrimeMeridian[i]?Proj4js.PrimeMeridian[i]:parseFloat(i),this.from_greenwich*=Proj4js.common.D2R;break;case"axis":i=i.replace(/\s/gi,"");var n="ewnsud";3==i.length&&-1!=n.indexOf(i.substr(0,1))&&-1!=n.indexOf(i.substr(1,1))&&-1!=n.indexOf(i.substr(2,1))&&(this.axis=i);break;case"no_defs":break;default:}}this.deriveConstants()}},deriveConstants:function(){if("@null"==this.nagrids&&(this.datumCode="none"),this.datumCode&&"none"!=this.datumCode){var t=Proj4js.Datum[this.datumCode];t&&(this.datum_params=t.towgs84?t.towgs84.split(","):null,this.ellps=t.ellipse,this.datumName=t.datumName?t.datumName:this.datumCode)}if(!this.a){var i=Proj4js.Ellipsoid[this.ellps]?Proj4js.Ellipsoid[this.ellps]:Proj4js.Ellipsoid.WGS84;Proj4js.extend(this,i)}this.rf&&!this.b&&(this.b=(1-1/this.rf)*this.a),(0===this.rf||Math.abs(this.a-this.b)=a;a++)if(s=t*Math.sin(n),e=this.HALF_PI-2*Math.atan(i*Math.pow((1-s)/(1+s),o))-n,n+=e,1e-10>=Math.abs(e))return n;return alert("phi2z has NoConvergence"),-9999},qsfnz:function(t,i){var s;return t>1e-7?(s=t*i,(1-t*t)*(i/(1-s*s)-.5/t*Math.log((1-s)/(1+s)))):2*i},asinz:function(t){return Math.abs(t)>1&&(t=t>1?1:-1),Math.asin(t)},e0fn:function(t){return 1-.25*t*(1+t/16*(3+1.25*t))},e1fn:function(t){return.375*t*(1+.25*t*(1+.46875*t))},e2fn:function(t){return.05859375*t*t*(1+.75*t)},e3fn:function(t){return t*t*t*(35/3072)},mlfn:function(t,i,s,e,o){return t*o-i*Math.sin(2*o)+s*Math.sin(4*o)-e*Math.sin(6*o)},srat:function(t,i){return Math.pow((1-t)/(1+t),i)},sign:function(t){return 0>t?-1:1},adjust_lon:function(t){return t=Math.abs(t)this.HALF_PI)return+Number.NaN;if(i==this.HALF_PI)return Number.POSITIVE_INFINITY;if(i==-1*this.HALF_PI)return-1*Number.POSITIVE_INFINITY;var e=t*s;return Math.log(Math.tan((this.HALF_PI+i)/2))+t*Math.log((1-e)/(1+e))/2},fL:function(t,i){return 2*Math.atan(t*Math.exp(i))-this.HALF_PI},invlatiso:function(t,i){var s=this.fL(1,i),e=0,o=0;do e=s,o=t*Math.sin(e),s=this.fL(Math.exp(t*Math.log((1+o)/(1-o))/2),i);while(Math.abs(s-e)>1e-12);return s},sinh:function(t){var i=Math.exp(t);return i=(i-1/i)/2},cosh:function(t){var i=Math.exp(t);return i=(i+1/i)/2},tanh:function(t){var i=Math.exp(t);return i=(i-1/i)/(i+1/i)},asinh:function(t){var i=t>=0?1:-1;return i*Math.log(Math.abs(t)+Math.sqrt(t*t+1))},acosh:function(t){return 2*Math.log(Math.sqrt((t+1)/2)+Math.sqrt((t-1)/2))},atanh:function(t){return Math.log((t-1)/(t+1))/2},gN:function(t,i,s){var e=i*s;return t/Math.sqrt(1-e*e)},pj_enfn:function(t){var i=[];i[0]=this.C00-t*(this.C02+t*(this.C04+t*(this.C06+t*this.C08))),i[1]=t*(this.C22-t*(this.C04+t*(this.C06+t*this.C08)));var s=t*t;return i[2]=s*(this.C44-t*(this.C46+t*this.C48)),s*=t,i[3]=s*(this.C66-t*this.C68),i[4]=s*t*this.C88,i},pj_mlfn:function(t,i,s,e){return s*=i,i*=i,e[0]*t-s*(e[1]+i*(e[2]+i*(e[3]+i*e[4])))},pj_inv_mlfn:function(t,i,s){for(var e=1/(1-i),o=t,n=Proj4js.common.MAX_ITER;n;--n){var a=Math.sin(o),r=1-i*a*a;if(r=(this.pj_mlfn(o,a,Math.cos(o),s)-t)*r*Math.sqrt(r)*e,o-=r,Math.abs(r)i;i++)t.datum_params[i]=parseFloat(t.datum_params[i]);(0!=t.datum_params[0]||0!=t.datum_params[1]||0!=t.datum_params[2])&&(this.datum_type=Proj4js.common.PJD_3PARAM),t.datum_params.length>3&&(0!=t.datum_params[3]||0!=t.datum_params[4]||0!=t.datum_params[5]||0!=t.datum_params[6])&&(this.datum_type=Proj4js.common.PJD_7PARAM,t.datum_params[3]*=Proj4js.common.SEC_TO_RAD,t.datum_params[4]*=Proj4js.common.SEC_TO_RAD,t.datum_params[5]*=Proj4js.common.SEC_TO_RAD,t.datum_params[6]=t.datum_params[6]/1e6+1)}t&&(this.a=t.a,this.b=t.b,this.es=t.es,this.ep2=t.ep2,this.datum_params=t.datum_params)},compare_datums:function(t){return this.datum_type!=t.datum_type?!1:this.a!=t.a||Math.abs(this.es-t.es)>5e-11?!1:this.datum_type==Proj4js.common.PJD_3PARAM?this.datum_params[0]==t.datum_params[0]&&this.datum_params[1]==t.datum_params[1]&&this.datum_params[2]==t.datum_params[2]:this.datum_type==Proj4js.common.PJD_7PARAM?this.datum_params[0]==t.datum_params[0]&&this.datum_params[1]==t.datum_params[1]&&this.datum_params[2]==t.datum_params[2]&&this.datum_params[3]==t.datum_params[3]&&this.datum_params[4]==t.datum_params[4]&&this.datum_params[5]==t.datum_params[5]&&this.datum_params[6]==t.datum_params[6]:this.datum_type==Proj4js.common.PJD_GRIDSHIFT||t.datum_type==Proj4js.common.PJD_GRIDSHIFT?(alert("ERROR: Grid shift transformations are not implemented."),!1):!0},geodetic_to_geocentric:function(t){var i,s,e,o,n,a,r,h=t.x,l=t.y,c=t.z?t.z:0,m=0;if(-Proj4js.common.HALF_PI>l&&l>-1.001*Proj4js.common.HALF_PI)l=-Proj4js.common.HALF_PI;else if(l>Proj4js.common.HALF_PI&&1.001*Proj4js.common.HALF_PI>l)l=Proj4js.common.HALF_PI;else if(-Proj4js.common.HALF_PI>l||l>Proj4js.common.HALF_PI)return Proj4js.reportError("geocent:lat out of range:"+l),null;return h>Proj4js.common.PI&&(h-=2*Proj4js.common.PI),n=Math.sin(l),r=Math.cos(l),a=n*n,o=this.a/Math.sqrt(1-this.es*a),i=(o+c)*r*Math.cos(h),s=(o+c)*r*Math.sin(h),e=(o*(1-this.es)+c)*n,t.x=i,t.y=s,t.z=e,m},geocentric_to_geodetic:function(t){var i,s,e,o,n,a,r,h,l,c,m,u,d,p,_,f,P,y=1e-12,g=y*y,L=30,v=t.x,j=t.y,M=t.z?t.z:0;if(d=!1,i=Math.sqrt(v*v+j*j),s=Math.sqrt(v*v+j*j+M*M),y>i/this.a){if(d=!0,_=0,y>s/this.a)return f=Proj4js.common.HALF_PI,P=-this.b,void 0}else _=Math.atan2(j,v);e=M/s,o=i/s,n=1/Math.sqrt(1-this.es*(2-this.es)*o*o),h=o*(1-this.es)*n,l=e*n,p=0;do p++,r=this.a/Math.sqrt(1-this.es*l*l),P=i*h+M*l-r*(1-this.es*l*l),a=this.es*r/(r+P),n=1/Math.sqrt(1-a*(2-a)*o*o),c=o*(1-a)*n,m=e*n,u=m*h-c*l,h=c,l=m;while(u*u>g&&L>p);return f=Math.atan(m/Math.abs(c)),t.x=_,t.y=f,t.z=P,t},geocentric_to_geodetic_noniter:function(t){var i,s,e,o,n,a,r,h,l,c,m,u,d,p,_,f,P,y=t.x,g=t.y,L=t.z?t.z:0;if(y=parseFloat(y),g=parseFloat(g),L=parseFloat(L),P=!1,0!=y)i=Math.atan2(g,y);else if(g>0)i=Proj4js.common.HALF_PI;else if(0>g)i=-Proj4js.common.HALF_PI;else if(P=!0,i=0,L>0)s=Proj4js.common.HALF_PI;else{if(!(0>L))return s=Proj4js.common.HALF_PI,e=-this.b,void 0;s=-Proj4js.common.HALF_PI}return n=y*y+g*g,o=Math.sqrt(n),a=L*Proj4js.common.AD_C,h=Math.sqrt(a*a+n),c=a/h,u=o/h,m=c*c*c,r=L+this.b*this.ep2*m,f=o-this.a*this.es*u*u*u,l=Math.sqrt(r*r+f*f),d=r/l,p=f/l,_=this.a/Math.sqrt(1-this.es*d*d),e=p>=Proj4js.common.COS_67P5?o/p-_:-Proj4js.common.COS_67P5>=p?o/-p-_:L/d+_*(this.es-1),0==P&&(s=Math.atan(d/p)),t.x=i,t.y=s,t.z=e,t},geocentric_to_wgs84:function(t){if(this.datum_type==Proj4js.common.PJD_3PARAM)t.x+=this.datum_params[0],t.y+=this.datum_params[1],t.z+=this.datum_params[2];else if(this.datum_type==Proj4js.common.PJD_7PARAM){var i=this.datum_params[0],s=this.datum_params[1],e=this.datum_params[2],o=this.datum_params[3],n=this.datum_params[4],a=this.datum_params[5],r=this.datum_params[6],h=r*(t.x-a*t.y+n*t.z)+i,l=r*(a*t.x+t.y-o*t.z)+s,c=r*(-n*t.x+o*t.y+t.z)+e;t.x=h,t.y=l,t.z=c}},geocentric_from_wgs84:function(t){if(this.datum_type==Proj4js.common.PJD_3PARAM)t.x-=this.datum_params[0],t.y-=this.datum_params[1],t.z-=this.datum_params[2];else if(this.datum_type==Proj4js.common.PJD_7PARAM){var i=this.datum_params[0],s=this.datum_params[1],e=this.datum_params[2],o=this.datum_params[3],n=this.datum_params[4],a=this.datum_params[5],r=this.datum_params[6],h=(t.x-i)/r,l=(t.y-s)/r,c=(t.z-e)/r;t.x=h+a*l-n*c,t.y=-a*h+l+o*c,t.z=n*h-o*l+c}}}),Proj4js.Point=Proj4js.Class({initialize:function(t,i,s){if("object"==typeof t)this.x=t[0],this.y=t[1],this.z=t[2]||0;else if("string"==typeof t&&i===void 0){var e=t.split(",");this.x=parseFloat(e[0]),this.y=parseFloat(e[1]),this.z=parseFloat(e[2])||0}else this.x=t,this.y=i,this.z=s||0},clone:function(){return new Proj4js.Point(this.x,this.y,this.z)},toString:function(){return"x="+this.x+",y="+this.y},toShortString:function(){return this.x+", "+this.y}}),Proj4js.PrimeMeridian={greenwich:0,lisbon:-9.131906111111,paris:2.337229166667,bogota:-74.080916666667,madrid:-3.687938888889,rome:12.452333333333,bern:7.439583333333,jakarta:106.807719444444,ferro:-17.666666666667,brussels:4.367975,stockholm:18.058277777778,athens:23.7163375,oslo:10.722916666667},Proj4js.Ellipsoid={MERIT:{a:6378137,rf:298.257,ellipseName:"MERIT 1983"},SGS85:{a:6378136,rf:298.257,ellipseName:"Soviet Geodetic System 85"},GRS80:{a:6378137,rf:298.257222101,ellipseName:"GRS 1980(IUGG, 1980)"},IAU76:{a:6378140,rf:298.257,ellipseName:"IAU 1976"},airy:{a:6377563.396,b:6356256.91,ellipseName:"Airy 1830"},"APL4.":{a:6378137,rf:298.25,ellipseName:"Appl. Physics. 1965"},NWL9D:{a:6378145,rf:298.25,ellipseName:"Naval Weapons Lab., 1965"},mod_airy:{a:6377340.189,b:6356034.446,ellipseName:"Modified Airy"},andrae:{a:6377104.43,rf:300,ellipseName:"Andrae 1876 (Den., Iclnd.)"},aust_SA:{a:6378160,rf:298.25,ellipseName:"Australian Natl & S. Amer. 1969"},GRS67:{a:6378160,rf:298.247167427,ellipseName:"GRS 67(IUGG 1967)"},bessel:{a:6377397.155,rf:299.1528128,ellipseName:"Bessel 1841"},bess_nam:{a:6377483.865,rf:299.1528128,ellipseName:"Bessel 1841 (Namibia)"},clrk66:{a:6378206.4,b:6356583.8,ellipseName:"Clarke 1866"},clrk80:{a:6378249.145,rf:293.4663,ellipseName:"Clarke 1880 mod."},CPM:{a:6375738.7,rf:334.29,ellipseName:"Comm. des Poids et Mesures 1799"},delmbr:{a:6376428,rf:311.5,ellipseName:"Delambre 1810 (Belgium)"},engelis:{a:6378136.05,rf:298.2566,ellipseName:"Engelis 1985"},evrst30:{a:6377276.345,rf:300.8017,ellipseName:"Everest 1830"},evrst48:{a:6377304.063,rf:300.8017,ellipseName:"Everest 1948"},evrst56:{a:6377301.243,rf:300.8017,ellipseName:"Everest 1956"},evrst69:{a:6377295.664,rf:300.8017,ellipseName:"Everest 1969"},evrstSS:{a:6377298.556,rf:300.8017,ellipseName:"Everest (Sabah & Sarawak)"},fschr60:{a:6378166,rf:298.3,ellipseName:"Fischer (Mercury Datum) 1960"},fschr60m:{a:6378155,rf:298.3,ellipseName:"Fischer 1960"},fschr68:{a:6378150,rf:298.3,ellipseName:"Fischer 1968"},helmert:{a:6378200,rf:298.3,ellipseName:"Helmert 1906"},hough:{a:6378270,rf:297,ellipseName:"Hough"},intl:{a:6378388,rf:297,ellipseName:"International 1909 (Hayford)"},kaula:{a:6378163,rf:298.24,ellipseName:"Kaula 1961"},lerch:{a:6378139,rf:298.257,ellipseName:"Lerch 1979"},mprts:{a:6397300,rf:191,ellipseName:"Maupertius 1738"},new_intl:{a:6378157.5,b:6356772.2,ellipseName:"New International 1967"},plessis:{a:6376523,rf:6355863,ellipseName:"Plessis 1817 (France)"},krass:{a:6378245,rf:298.3,ellipseName:"Krassovsky, 1942"},SEasia:{a:6378155,b:6356773.3205,ellipseName:"Southeast Asia"},walbeck:{a:6376896,b:6355834.8467,ellipseName:"Walbeck"},WGS60:{a:6378165,rf:298.3,ellipseName:"WGS 60"},WGS66:{a:6378145,rf:298.25,ellipseName:"WGS 66"},WGS72:{a:6378135,rf:298.26,ellipseName:"WGS 72"},WGS84:{a:6378137,rf:298.257223563,ellipseName:"WGS 84"},sphere:{a:6370997,b:6370997,ellipseName:"Normal Sphere (r=6370997)"}},Proj4js.Datum={WGS84:{towgs84:"0,0,0",ellipse:"WGS84",datumName:"WGS84"},GGRS87:{towgs84:"-199.87,74.79,246.62",ellipse:"GRS80",datumName:"Greek_Geodetic_Reference_System_1987"},NAD83:{towgs84:"0,0,0",ellipse:"GRS80",datumName:"North_American_Datum_1983"},NAD27:{nadgrids:"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat",ellipse:"clrk66",datumName:"North_American_Datum_1927"},potsdam:{towgs84:"606.0,23.0,413.0",ellipse:"bessel",datumName:"Potsdam Rauenberg 1950 DHDN"},carthage:{towgs84:"-263.0,6.0,431.0",ellipse:"clark80",datumName:"Carthage 1934 Tunisia"},hermannskogel:{towgs84:"653.0,-212.0,449.0",ellipse:"bessel",datumName:"Hermannskogel"},ire65:{towgs84:"482.530,-130.596,564.557,-1.042,-0.214,-0.631,8.15",ellipse:"mod_airy",datumName:"Ireland 1965"},nzgd49:{towgs84:"59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993",ellipse:"intl",datumName:"New Zealand Geodetic Datum 1949"},OSGB36:{towgs84:"446.448,-125.157,542.060,0.1502,0.2470,0.8421,-20.4894",ellipse:"airy",datumName:"Airy 1830"}},Proj4js.WGS84=new Proj4js.Proj("WGS84"),Proj4js.Datum.OSB36=Proj4js.Datum.OSGB36,Proj4js.wktProjections={"Lambert Tangential Conformal Conic Projection":"lcc",Mercator:"merc","Popular Visualisation Pseudo Mercator":"merc",Mercator_1SP:"merc",Transverse_Mercator:"tmerc","Transverse Mercator":"tmerc","Lambert Azimuthal Equal Area":"laea","Universal Transverse Mercator System":"utm"},Proj4js.Proj.aea={init:function(){return Math.abs(this.lat1+this.lat2)Proj4js.common.EPSLN?(this.ms1*this.ms1-this.ms2*this.ms2)/(this.qs2-this.qs1):this.con,this.c=this.ms1*this.ms1+this.ns0*this.qs1,this.rh=this.a*Math.sqrt(this.c-this.ns0*this.qs0)/this.ns0,void 0)},forward:function(t){var i=t.x,s=t.y;this.sin_phi=Math.sin(s),this.cos_phi=Math.cos(s);var e=Proj4js.common.qsfnz(this.e3,this.sin_phi,this.cos_phi),o=this.a*Math.sqrt(this.c-this.ns0*e)/this.ns0,n=this.ns0*Proj4js.common.adjust_lon(i-this.long0),a=o*Math.sin(n)+this.x0,r=this.rh-o*Math.cos(n)+this.y0;return t.x=a,t.y=r,t},inverse:function(t){var i,s,e,o,n,a;return t.x-=this.x0,t.y=this.rh-t.y+this.y0,this.ns0>=0?(i=Math.sqrt(t.x*t.x+t.y*t.y),e=1):(i=-Math.sqrt(t.x*t.x+t.y*t.y),e=-1),o=0,0!=i&&(o=Math.atan2(e*t.x,e*t.y)),e=i*this.ns0/this.a,s=(this.c-e*e)/this.ns0,this.e3>=1e-10?(e=1-.5*(1-this.es)*Math.log((1-this.e3)/(1+this.e3))/this.e3,a=Math.abs(Math.abs(e)-Math.abs(s))>1e-10?this.phi1z(this.e3,s):s>=0?.5*Proj4js.common.PI:-.5*Proj4js.common.PI):a=this.phi1z(this.e3,s),n=Proj4js.common.adjust_lon(o/this.ns0+this.long0),t.x=n,t.y=a,t},phi1z:function(t,i){var s,e,o,n,a,r=Proj4js.common.asinz(.5*i);if(Proj4js.common.EPSLN>t)return r;for(var h=t*t,l=1;25>=l;l++)if(s=Math.sin(r),e=Math.cos(r),o=t*s,n=1-o*o,a=.5*n*n/e*(i/(1-h)-s/n+.5/t*Math.log((1-o)/(1+o))),r+=a,1e-7>=Math.abs(a))return r;return Proj4js.reportError("aea:phi1z:Convergence error"),null}},Proj4js.Proj.sterea={dependsOn:"gauss",init:function(){return Proj4js.Proj.gauss.init.apply(this),this.rc?(this.sinc0=Math.sin(this.phic0),this.cosc0=Math.cos(this.phic0),this.R2=2*this.rc,this.title||(this.title="Oblique Stereographic Alternative"),void 0):(Proj4js.reportError("sterea:init:E_ERROR_0"),void 0)},forward:function(t){var i,s,e,o;return t.x=Proj4js.common.adjust_lon(t.x-this.long0),Proj4js.Proj.gauss.forward.apply(this,[t]),i=Math.sin(t.y),s=Math.cos(t.y),e=Math.cos(t.x),o=this.k0*this.R2/(1+this.sinc0*i+this.cosc0*s*e),t.x=o*s*Math.sin(t.x),t.y=o*(this.cosc0*i-this.sinc0*s*e),t.x=this.a*t.x+this.x0,t.y=this.a*t.y+this.y0,t},inverse:function(t){var i,s,e,o,n;if(t.x=(t.x-this.x0)/this.a,t.y=(t.y-this.y0)/this.a,t.x/=this.k0,t.y/=this.k0,n=Math.sqrt(t.x*t.x+t.y*t.y)){var a=2*Math.atan2(n,this.R2);i=Math.sin(a),s=Math.cos(a),o=Math.asin(s*this.sinc0+t.y*i*this.cosc0/n),e=Math.atan2(t.x*i,n*this.cosc0*s-t.y*this.sinc0*i)}else o=this.phic0,e=0;return t.x=e,t.y=o,Proj4js.Proj.gauss.inverse.apply(this,[t]),t.x=Proj4js.common.adjust_lon(t.x+this.long0),t}},Proj4js.Proj.poly={init:function(){0==this.lat0&&(this.lat0=90),this.temp=this.b/this.a,this.es=1-Math.pow(this.temp,2),this.e=Math.sqrt(this.es),this.e0=Proj4js.common.e0fn(this.es),this.e1=Proj4js.common.e1fn(this.es),this.e2=Proj4js.common.e2fn(this.es),this.e3=Proj4js.common.e3fn(this.es),this.ml0=Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,this.lat0)},forward:function(t){var i,s,e,o,n,a,r,h=t.x,l=t.y;return e=Proj4js.common.adjust_lon(h-this.long0),1e-7>=Math.abs(l)?(a=this.x0+this.a*e,r=this.y0-this.a*this.ml0):(i=Math.sin(l),s=Math.cos(l),o=Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,l),n=Proj4js.common.msfnz(this.e,i,s),e=i,a=this.x0+this.a*n*Math.sin(e)/i,r=this.y0+this.a*(o-this.ml0+n*(1-Math.cos(e))/i)),t.x=a,t.y=r,t},inverse:function(t){var i,s,e,o,n,a;if(t.x-=this.x0,t.y-=this.y0,i=this.ml0+t.y/this.a,o=0,1e-7>=Math.abs(i))n=t.x/this.a+this.long0,a=0;else{if(s=i*i+t.x/this.a*(t.x/this.a),o=phi4z(this.es,this.e0,this.e1,this.e2,this.e3,this.al,s,e,a),1!=o)return o;n=Proj4js.common.adjust_lon(Proj4js.common.asinz(t.x*e/this.a)/Math.sin(a)+this.long0)}return t.x=n,t.y=a,t}},Proj4js.Proj.equi={init:function(){this.x0||(this.x0=0),this.y0||(this.y0=0),this.lat0||(this.lat0=0),this.long0||(this.long0=0)},forward:function(t){var i=t.x,s=t.y,e=Proj4js.common.adjust_lon(i-this.long0),o=this.x0+this.a*e*Math.cos(this.lat0),n=this.y0+this.a*s;return this.t1=o,this.t2=Math.cos(this.lat0),t.x=o,t.y=n,t},inverse:function(t){t.x-=this.x0,t.y-=this.y0;var i=t.y/this.a;Math.abs(i)>Proj4js.common.HALF_PI&&Proj4js.reportError("equi:Inv:DataError");var s=Proj4js.common.adjust_lon(this.long0+t.x/(this.a*Math.cos(this.lat0)));t.x=s,t.y=i}},Proj4js.Proj.merc={init:function(){this.lat_ts&&(this.k0=this.sphere?Math.cos(this.lat_ts):Proj4js.common.msfnz(this.es,Math.sin(this.lat_ts),Math.cos(this.lat_ts)))},forward:function(t){var i=t.x,s=t.y;if(s*Proj4js.common.R2D>90&&-90>s*Proj4js.common.R2D&&i*Proj4js.common.R2D>180&&-180>i*Proj4js.common.R2D)return Proj4js.reportError("merc:forward: llInputOutOfRange: "+i+" : "+s),null;var e,o;if(Math.abs(Math.abs(s)-Proj4js.common.HALF_PI)<=Proj4js.common.EPSLN)return Proj4js.reportError("merc:forward: ll2mAtPoles"),null;if(this.sphere)e=this.x0+this.a*this.k0*Proj4js.common.adjust_lon(i-this.long0),o=this.y0+this.a*this.k0*Math.log(Math.tan(Proj4js.common.FORTPI+.5*s));else{var n=Math.sin(s),a=Proj4js.common.tsfnz(this.e,s,n);e=this.x0+this.a*this.k0*Proj4js.common.adjust_lon(i-this.long0),o=this.y0-this.a*this.k0*Math.log(a)}return t.x=e,t.y=o,t},inverse:function(t){var i,s,e=t.x-this.x0,o=t.y-this.y0;if(this.sphere)s=Proj4js.common.HALF_PI-2*Math.atan(Math.exp(-o/this.a*this.k0));else{var n=Math.exp(-o/(this.a*this.k0));if(s=Proj4js.common.phi2z(this.e,n),-9999==s)return Proj4js.reportError("merc:inverse: lat = -9999"),null}return i=Proj4js.common.adjust_lon(this.long0+e/(this.a*this.k0)),t.x=i,t.y=s,t}},Proj4js.Proj.utm={dependsOn:"tmerc",init:function(){return this.zone?(this.lat0=0,this.long0=(6*Math.abs(this.zone)-183)*Proj4js.common.D2R,this.x0=5e5,this.y0=this.utmSouth?1e7:0,this.k0=.9996,Proj4js.Proj.tmerc.init.apply(this),this.forward=Proj4js.Proj.tmerc.forward,this.inverse=Proj4js.Proj.tmerc.inverse,void 0):(Proj4js.reportError("utm:init: zone must be specified for UTM"),void 0)}},Proj4js.Proj.eqdc={init:function(){this.mode||(this.mode=0),this.temp=this.b/this.a,this.es=1-Math.pow(this.temp,2),this.e=Math.sqrt(this.es),this.e0=Proj4js.common.e0fn(this.es),this.e1=Proj4js.common.e1fn(this.es),this.e2=Proj4js.common.e2fn(this.es),this.e3=Proj4js.common.e3fn(this.es),this.sinphi=Math.sin(this.lat1),this.cosphi=Math.cos(this.lat1),this.ms1=Proj4js.common.msfnz(this.e,this.sinphi,this.cosphi),this.ml1=Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,this.lat1),0!=this.mode?(Math.abs(this.lat1+this.lat2)=Proj4js.common.EPSLN?(this.ms1-this.ms2)/(this.ml2-this.ml1):this.sinphi):this.ns=this.sinphi,this.g=this.ml1+this.ms1/this.ns,this.ml0=Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,this.lat0),this.rh=this.a*(this.g-this.ml0)},forward:function(t){var i=t.x,s=t.y,e=Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,s),o=this.a*(this.g-e),n=this.ns*Proj4js.common.adjust_lon(i-this.long0),a=this.x0+o*Math.sin(n),r=this.y0+this.rh-o*Math.cos(n);return t.x=a,t.y=r,t},inverse:function(t){t.x-=this.x0,t.y=this.rh-t.y+this.y0;var i,s;this.ns>=0?(s=Math.sqrt(t.x*t.x+t.y*t.y),i=1):(s=-Math.sqrt(t.x*t.x+t.y*t.y),i=-1);var e=0;0!=s&&(e=Math.atan2(i*t.x,i*t.y));var o=this.g-s/this.a,n=this.phi3z(o,this.e0,this.e1,this.e2,this.e3),a=Proj4js.common.adjust_lon(this.long0+e/this.ns);return t.x=a,t.y=n,t},phi3z:function(t,i,s,e,o){var n,a;n=t;for(var r=0;15>r;r++)if(a=(t+s*Math.sin(2*n)-e*Math.sin(4*n)+o*Math.sin(6*n))/i-n,n+=a,1e-10>=Math.abs(a))return n;return Proj4js.reportError("PHI3Z-CONV:Latitude failed to converge after 15 iterations"),null}},Proj4js.Proj.tmerc={init:function(){this.e0=Proj4js.common.e0fn(this.es),this.e1=Proj4js.common.e1fn(this.es),this.e2=Proj4js.common.e2fn(this.es),this.e3=Proj4js.common.e3fn(this.es),this.ml0=this.a*Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,this.lat0)},forward:function(t){var i,s,e,o=t.x,n=t.y,a=Proj4js.common.adjust_lon(o-this.long0),r=Math.sin(n),h=Math.cos(n);if(this.sphere){var l=h*Math.sin(a);if(1e-10>Math.abs(Math.abs(l)-1))return Proj4js.reportError("tmerc:forward: Point projects into infinity"),93;s=.5*this.a*this.k0*Math.log((1+l)/(1-l)),i=Math.acos(h*Math.cos(a)/Math.sqrt(1-l*l)),0>n&&(i=-i),e=this.a*this.k0*(i-this.lat0)}else{var c=h*a,m=Math.pow(c,2),u=this.ep2*Math.pow(h,2),d=Math.tan(n),p=Math.pow(d,2);i=1-this.es*Math.pow(r,2);var _=this.a/Math.sqrt(i),f=this.a*Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,n);s=this.k0*_*c*(1+m/6*(1-p+u+m/20*(5-18*p+Math.pow(p,2)+72*u-58*this.ep2)))+this.x0,e=this.k0*(f-this.ml0+_*d*m*(.5+m/24*(5-p+9*u+4*Math.pow(u,2)+m/30*(61-58*p+Math.pow(p,2)+600*u-330*this.ep2))))+this.y0}return t.x=s,t.y=e,t},inverse:function(t){var i,s,e,o,n,a,r=6;if(this.sphere){var h=Math.exp(t.x/(this.a*this.k0)),l=.5*(h-1/h),c=this.lat0+t.y/(this.a*this.k0),m=Math.cos(c);i=Math.sqrt((1-m*m)/(1+l*l)),n=Proj4js.common.asinz(i),0>c&&(n=-n),a=0==l&&0==m?this.long0:Proj4js.common.adjust_lon(Math.atan2(l,m)+this.long0)}else{var u=t.x-this.x0,d=t.y-this.y0;for(i=(this.ml0+d/this.k0)/this.a,s=i,o=0;!0&&(e=(i+this.e1*Math.sin(2*s)-this.e2*Math.sin(4*s)+this.e3*Math.sin(6*s))/this.e0-s,s+=e,!(Math.abs(e)<=Proj4js.common.EPSLN));o++)if(o>=r)return Proj4js.reportError("tmerc:inverse: Latitude failed to converge"),95;if(Math.abs(s)0||Math.abs(a)<=Proj4js.common.EPSLN)var l=this.a*n*s*Math.sin(e),c=this.y0+this.a*n*(this.cos_p14*i-this.sin_p14*s*o);else Proj4js.reportError("orthoFwdPointError");return t.x=l,t.y=c,t},inverse:function(t){var i,s,e,o,n,a,r;return t.x-=this.x0,t.y-=this.y0,i=Math.sqrt(t.x*t.x+t.y*t.y),i>this.a+1e-7&&Proj4js.reportError("orthoInvDataError"),s=Proj4js.common.asinz(i/this.a),e=Math.sin(s),o=Math.cos(s),a=this.long0,Math.abs(i)<=Proj4js.common.EPSLN&&(r=this.lat0),r=Proj4js.common.asinz(o*this.sin_p14+t.y*e*this.cos_p14/i),n=Math.abs(this.lat0)-Proj4js.common.HALF_PI,Math.abs(n)<=Proj4js.common.EPSLN&&(a=this.lat0>=0?Proj4js.common.adjust_lon(this.long0+Math.atan2(t.x,-t.y)):Proj4js.common.adjust_lon(this.long0-Math.atan2(-t.x,t.y))),n=o-this.sin_p14*Math.sin(r),t.x=a,t.y=r,t}},Proj4js.Proj.krovak={init:function(){this.a=6377397.155,this.es=.006674372230614,this.e=Math.sqrt(this.es),this.lat0||(this.lat0=.863937979737193),this.long0||(this.long0=.4334234309119251),this.k0||(this.k0=.9999),this.s45=.785398163397448,this.s90=2*this.s45,this.fi0=this.lat0,this.e2=this.es,this.e=Math.sqrt(this.e2),this.alfa=Math.sqrt(1+this.e2*Math.pow(Math.cos(this.fi0),4)/(1-this.e2)),this.uq=1.04216856380474,this.u0=Math.asin(Math.sin(this.fi0)/this.alfa),this.g=Math.pow((1+this.e*Math.sin(this.fi0))/(1-this.e*Math.sin(this.fi0)),this.alfa*this.e/2),this.k=Math.tan(this.u0/2+this.s45)/Math.pow(Math.tan(this.fi0/2+this.s45),this.alfa)*this.g,this.k1=this.k0,this.n0=this.a*Math.sqrt(1-this.e2)/(1-this.e2*Math.pow(Math.sin(this.fi0),2)),this.s0=1.37008346281555,this.n=Math.sin(this.s0),this.ro0=this.k1*this.n0/Math.tan(this.s0),this.ad=this.s90-this.uq},forward:function(t){var i,s,e,o,n,a,r,h=t.x,l=t.y,c=Proj4js.common.adjust_lon(h-this.long0);return i=Math.pow((1+this.e*Math.sin(l))/(1-this.e*Math.sin(l)),this.alfa*this.e/2),s=2*(Math.atan(this.k*Math.pow(Math.tan(l/2+this.s45),this.alfa)/i)-this.s45),e=-c*this.alfa,o=Math.asin(Math.cos(this.ad)*Math.sin(s)+Math.sin(this.ad)*Math.cos(s)*Math.cos(e)),n=Math.asin(Math.cos(s)*Math.sin(e)/Math.cos(o)),a=this.n*n,r=this.ro0*Math.pow(Math.tan(this.s0/2+this.s45),this.n)/Math.pow(Math.tan(o/2+this.s45),this.n),t.y=r*Math.cos(a)/1,t.x=r*Math.sin(a)/1,this.czech&&(t.y*=-1,t.x*=-1),t},inverse:function(t){var i,s,e,o,n,a,r,h,l=t.x;t.x=t.y,t.y=l,this.czech&&(t.y*=-1,t.x*=-1),a=Math.sqrt(t.x*t.x+t.y*t.y),n=Math.atan2(t.y,t.x),o=n/Math.sin(this.s0),e=2*(Math.atan(Math.pow(this.ro0/a,1/this.n)*Math.tan(this.s0/2+this.s45))-this.s45),i=Math.asin(Math.cos(this.ad)*Math.sin(e)-Math.sin(this.ad)*Math.cos(e)*Math.cos(o)),s=Math.asin(Math.cos(e)*Math.sin(o)/Math.cos(i)),t.x=this.long0-s/this.alfa,r=i,h=0;var c=0;do t.y=2*(Math.atan(Math.pow(this.k,-1/this.alfa)*Math.pow(Math.tan(i/2+this.s45),1/this.alfa)*Math.pow((1+this.e*Math.sin(r))/(1-this.e*Math.sin(r)),this.e/2))-this.s45),1e-10>Math.abs(r-t.y)&&(h=1),r=t.y,c+=1;while(0==h&&15>c);return c>=15?(Proj4js.reportError("PHI3Z-CONV:Latitude failed to converge after 15 iterations"),null):t}},Proj4js.Proj.somerc={init:function(){var t=this.lat0;this.lambda0=this.long0;var i=Math.sin(t),s=this.a,e=this.rf,o=1/e,n=2*o-Math.pow(o,2),a=this.e=Math.sqrt(n);this.R=this.k0*s*Math.sqrt(1-n)/(1-n*Math.pow(i,2)),this.alpha=Math.sqrt(1+n/(1-n)*Math.pow(Math.cos(t),4)),this.b0=Math.asin(i/this.alpha),this.K=Math.log(Math.tan(Math.PI/4+this.b0/2))-this.alpha*Math.log(Math.tan(Math.PI/4+t/2))+this.alpha*a/2*Math.log((1+a*i)/(1-a*i))},forward:function(t){var i=Math.log(Math.tan(Math.PI/4-t.y/2)),s=this.e/2*Math.log((1+this.e*Math.sin(t.y))/(1-this.e*Math.sin(t.y))),e=-this.alpha*(i+s)+this.K,o=2*(Math.atan(Math.exp(e))-Math.PI/4),n=this.alpha*(t.x-this.lambda0),a=Math.atan(Math.sin(n)/(Math.sin(this.b0)*Math.tan(o)+Math.cos(this.b0)*Math.cos(n))),r=Math.asin(Math.cos(this.b0)*Math.sin(o)-Math.sin(this.b0)*Math.cos(o)*Math.cos(n));return t.y=this.R/2*Math.log((1+Math.sin(r))/(1-Math.sin(r)))+this.y0,t.x=this.R*a+this.x0,t},inverse:function(t){for(var i=t.x-this.x0,s=t.y-this.y0,e=i/this.R,o=2*(Math.atan(Math.exp(s/this.R))-Math.PI/4),n=Math.asin(Math.cos(this.b0)*Math.sin(o)+Math.sin(this.b0)*Math.cos(o)*Math.cos(e)),a=Math.atan(Math.sin(e)/(Math.cos(this.b0)*Math.cos(e)-Math.sin(this.b0)*Math.tan(o))),r=this.lambda0+a/this.alpha,h=0,l=n,c=-1e3,m=0;Math.abs(l-c)>1e-7;){if(++m>20)return Proj4js.reportError("omercFwdInfinity"),void 0;h=1/this.alpha*(Math.log(Math.tan(Math.PI/4+n/2))-this.K)+this.e*Math.log(Math.tan(Math.PI/4+Math.asin(this.e*Math.sin(l))/2)),c=l,l=2*Math.atan(Math.exp(h))-Math.PI/2}return t.x=r,t.y=l,t}},Proj4js.Proj.stere={ssfn_:function(t,i,s){return i*=s,Math.tan(.5*(Proj4js.common.HALF_PI+t))*Math.pow((1-i)/(1+i),.5*s)},TOL:1e-8,NITER:8,CONV:1e-10,S_POLE:0,N_POLE:1,OBLIQ:2,EQUIT:3,init:function(){this.phits=this.lat_ts?this.lat_ts:Proj4js.common.HALF_PI;var t=Math.abs(this.lat0);if(this.mode=Math.abs(t)-Proj4js.common.HALF_PIthis.lat0?this.S_POLE:this.N_POLE:t>Proj4js.common.EPSLN?this.OBLIQ:this.EQUIT,this.phits=Math.abs(this.phits),this.es){var i;switch(this.mode){case this.N_POLE:case this.S_POLE:Math.abs(this.phits-Proj4js.common.HALF_PI)=Proj4js.common.EPSLN?Math.cos(this.phits)/Math.tan(Proj4js.common.FORTPI-.5*this.phits):2*this.k0}},forward:function(t){var i=t.x;i=Proj4js.common.adjust_lon(i-this.long0);var s,e,o=t.y;if(this.sphere){var n,a,r,h;switch(n=Math.sin(o),a=Math.cos(o),r=Math.cos(i),h=Math.sin(i),this.mode){case this.EQUIT:e=1+a*r,Proj4js.common.EPSLN>=e&&Proj4js.reportError("stere:forward:Equit"),e=this.akm1/e,s=e*a*h,e*=n;break;case this.OBLIQ:e=1+this.sinph0*n+this.cosph0*a*r,Proj4js.common.EPSLN>=e&&Proj4js.reportError("stere:forward:Obliq"),e=this.akm1/e,s=e*a*h,e*=this.cosph0*n-this.sinph0*a*r;break;case this.N_POLE:r=-r,o=-o;case this.S_POLE:Math.abs(o-Proj4js.common.HALF_PI)=l;l++)r*=n,h+=this.A[l]*r;for(var c,m,u=h,d=a,p=1,_=0,f=0,P=0,l=1;6>=l;l++)c=p*u-_*d,m=_*u+p*d,p=c,_=m,f=f+this.B_re[l]*p-this.B_im[l]*_,P=P+this.B_im[l]*p+this.B_re[l]*_;return t.x=P*this.a+this.x0,t.y=f*this.a+this.y0,t},inverse:function(t){for(var i,s,e=t.x,o=t.y,n=e-this.x0,a=o-this.y0,r=a/this.a,h=n/this.a,l=1,c=0,m=0,u=0,d=1;6>=d;d++)i=l*r-c*h,s=c*r+l*h,l=i,c=s,m=m+this.C_re[d]*l-this.C_im[d]*c,u=u+this.C_im[d]*l+this.C_re[d]*c;for(var p=0;this.iterations>p;p++){for(var _,f,P=m,y=u,g=r,L=h,d=2;6>=d;d++)_=P*m-y*u,f=y*m+P*u,P=_,y=f,g+=(d-1)*(this.B_re[d]*P-this.B_im[d]*y),L+=(d-1)*(this.B_im[d]*P+this.B_re[d]*y);P=1,y=0;for(var v=this.B_re[1],j=this.B_im[1],d=2;6>=d;d++)_=P*m-y*u,f=y*m+P*u,P=_,y=f,v+=d*(this.B_re[d]*P-this.B_im[d]*y),j+=d*(this.B_im[d]*P+this.B_re[d]*y);var M=v*v+j*j;m=(g*v+L*j)/M,u=(L*v-g*j)/M}for(var S=m,b=u,x=1,E=0,d=1;9>=d;d++)x*=S,E+=this.D[d]*x;var C=this.lat0+1e5*E*Proj4js.common.SEC_TO_RAD,w=this.long0+b;return t.x=w,t.y=C,t}},Proj4js.Proj.mill={init:function(){},forward:function(t){var i=t.x,s=t.y,e=Proj4js.common.adjust_lon(i-this.long0),o=this.x0+this.a*e,n=this.y0+1.25*this.a*Math.log(Math.tan(Proj4js.common.PI/4+s/2.5));return t.x=o,t.y=n,t},inverse:function(t){t.x-=this.x0,t.y-=this.y0;var i=Proj4js.common.adjust_lon(this.long0+t.x/this.a),s=2.5*(Math.atan(Math.exp(.8*t.y/this.a))-Proj4js.common.PI/4);return t.x=i,t.y=s,t}},Proj4js.Proj.gnom={init:function(){this.sin_p14=Math.sin(this.lat0),this.cos_p14=Math.cos(this.lat0),this.infinity_dist=1e3*this.a,this.rc=1},forward:function(t){var i,s,e,o,n,a,r,h,l=t.x,c=t.y;return e=Proj4js.common.adjust_lon(l-this.long0),i=Math.sin(c),s=Math.cos(c),o=Math.cos(e),a=this.sin_p14*i+this.cos_p14*s*o,n=1,a>0||Math.abs(a)<=Proj4js.common.EPSLN?(r=this.x0+this.a*n*s*Math.sin(e)/a,h=this.y0+this.a*n*(this.cos_p14*i-this.sin_p14*s*o)/a):(Proj4js.reportError("orthoFwdPointError"),r=this.x0+this.infinity_dist*s*Math.sin(e),h=this.y0+this.infinity_dist*(this.cos_p14*i-this.sin_p14*s*o)),t.x=r,t.y=h,t},inverse:function(t){var i,s,e,o,n,a;return t.x=(t.x-this.x0)/this.a,t.y=(t.y-this.y0)/this.a,t.x/=this.k0,t.y/=this.k0,(i=Math.sqrt(t.x*t.x+t.y*t.y))?(o=Math.atan2(i,this.rc),s=Math.sin(o),e=Math.cos(o),a=Proj4js.common.asinz(e*this.sin_p14+t.y*s*this.cos_p14/i),n=Math.atan2(t.x*s,i*this.cos_p14*e-t.y*this.sin_p14*s),n=Proj4js.common.adjust_lon(this.long0+n)):(a=this.phic0,n=0),t.x=n,t.y=a,t}},Proj4js.Proj.sinu={init:function(){this.sphere?(this.n=1,this.m=0,this.es=0,this.C_y=Math.sqrt((this.m+1)/this.n),this.C_x=this.C_y/(this.m+1)):this.en=Proj4js.common.pj_enfn(this.es)},forward:function(t){var i,s,e=t.x,o=t.y;if(e=Proj4js.common.adjust_lon(e-this.long0),this.sphere){if(this.m)for(var n=this.n*Math.sin(o),a=Proj4js.common.MAX_ITER;a;--a){var r=(this.m*o+Math.sin(o)-n)/(this.m+Math.cos(o));if(o-=r,Math.abs(r)o?(o=Math.sin(i),s=this.long0+t.x*Math.sqrt(1-this.es*o*o)/(this.a*Math.cos(i)),e=Proj4js.common.adjust_lon(s)):o-Proj4js.common.EPSLN=0?this.y0+Proj4js.common.PI*this.R*Math.tan(.5*a):this.y0+Proj4js.common.PI*this.R*-Math.tan(.5*a));var r=.5*Math.abs(Proj4js.common.PI/n-n/Proj4js.common.PI),h=r*r,l=Math.sin(a),c=Math.cos(a),m=c/(l+c-1),u=m*m,d=m*(2/l-1),p=d*d,_=Proj4js.common.PI*this.R*(r*(m-p)+Math.sqrt(h*(m-p)*(m-p)-(p+h)*(u-p)))/(p+h);return 0>n&&(_=-_),i=this.x0+_,_=Math.abs(_/(Proj4js.common.PI*this.R)),s=o>=0?this.y0+Proj4js.common.PI*this.R*Math.sqrt(1-_*_-2*r*_):this.y0-Proj4js.common.PI*this.R*Math.sqrt(1-_*_-2*r*_),t.x=i,t.y=s,t},inverse:function(t){var i,s,e,o,n,a,r,h,l,c,m,u,d;return t.x-=this.x0,t.y-=this.y0,m=Proj4js.common.PI*this.R,e=t.x/m,o=t.y/m,n=e*e+o*o,a=-Math.abs(o)*(1+n),r=a-2*o*o+e*e,h=-2*a+1+2*o*o+n*n,d=o*o/h+(2*r*r*r/h/h/h-9*a*r/h/h)/27,l=(a-r*r/3/h)/h,c=2*Math.sqrt(-l/3),m=3*d/l/c,Math.abs(m)>1&&(m=m>=0?1:-1),u=Math.acos(m)/3,s=t.y>=0?(-c*Math.cos(u+Proj4js.common.PI/3)-r/3/h)*Proj4js.common.PI:-(-c*Math.cos(u+Proj4js.common.PI/3)-r/3/h)*Proj4js.common.PI,Math.abs(e)0&&(e=2*Math.atan(o*Proj4js.common.srat(this.e*Math.sin(t.y),-.5*this.e))-Proj4js.common.HALF_PI,!(i>Math.abs(e-t.y)));--n)t.y=e;return n?(t.x=s,t.y=e,t):(Proj4js.reportError("gauss:inverse:convergence failed"),null)}},Proj4js.Proj.omerc={init:function(){this.mode||(this.mode=0),this.lon1||(this.lon1=0,this.mode=1),this.lon2||(this.lon2=0),this.lat2||(this.lat2=0);var t=this.b/this.a,i=1-Math.pow(t,2);Math.sqrt(i),this.sin_p20=Math.sin(this.lat0),this.cos_p20=Math.cos(this.lat0),this.con=1-this.es*this.sin_p20*this.sin_p20,this.com=Math.sqrt(1-i),this.bl=Math.sqrt(1+this.es*Math.pow(this.cos_p20,4)/(1-i)),this.al=this.a*this.bl*this.k0*this.com/this.con,Math.abs(this.lat0)0?this.lat0>=0?this.d+Math.sqrt(this.d*this.d-1):this.d-Math.sqrt(this.d*this.d-1):this.d,this.el=this.f*Math.pow(this.ts,this.bl)),0!=this.mode?(this.g=.5*(this.f-1/this.f),this.gama=Proj4js.common.asinz(Math.sin(this.alpha)/this.d),this.longc=this.longc-Proj4js.common.asinz(this.g*Math.tan(this.gama))/this.bl,this.con=Math.abs(this.lat0),this.con>Proj4js.common.EPSLN&&Math.abs(this.con-Proj4js.common.HALF_PI)>Proj4js.common.EPSLN?(this.singam=Math.sin(this.gama),this.cosgam=Math.cos(this.gama),this.sinaz=Math.sin(this.alpha),this.cosaz=Math.cos(this.alpha),this.u=this.lat0>=0?this.al/this.bl*Math.atan(Math.sqrt(this.d*this.d-1)/this.cosaz):-(this.al/this.bl)*Math.atan(Math.sqrt(this.d*this.d-1)/this.cosaz)):Proj4js.reportError("omerc:Init:DataError")):(this.sinphi=Math.sin(this.at1),this.ts1=Proj4js.common.tsfnz(this.e,this.lat1,this.sinphi),this.sinphi=Math.sin(this.lat2),this.ts2=Proj4js.common.tsfnz(this.e,this.lat2,this.sinphi),this.h=Math.pow(this.ts1,this.bl),this.l=Math.pow(this.ts2,this.bl),this.f=this.el/this.h,this.g=.5*(this.f-1/this.f),this.j=(this.el*this.el-this.l*this.h)/(this.el*this.el+this.l*this.h),this.p=(this.l-this.h)/(this.l+this.h),this.dlon=this.lon1-this.lon2,this.dlon<-Proj4js.common.PI&&(this.lon2=this.lon2-2*Proj4js.common.PI),this.dlon>Proj4js.common.PI&&(this.lon2=this.lon2+2*Proj4js.common.PI),this.dlon=this.lon1-this.lon2,this.longc=.5*(this.lon1+this.lon2)-Math.atan(this.j*Math.tan(.5*this.bl*this.dlon)/this.p)/this.bl,this.dlon=Proj4js.common.adjust_lon(this.lon1-this.longc),this.gama=Math.atan(Math.sin(this.bl*this.dlon)/this.g),this.alpha=Proj4js.common.asinz(this.d*Math.sin(this.gama)),Math.abs(this.lat1-this.lat2)<=Proj4js.common.EPSLN?Proj4js.reportError("omercInitDataError"):this.con=Math.abs(this.lat1),this.con<=Proj4js.common.EPSLN||Math.abs(this.con-Proj4js.common.HALF_PI)<=Proj4js.common.EPSLN?Proj4js.reportError("omercInitDataError"):Math.abs(Math.abs(this.lat0)-Proj4js.common.HALF_PI)<=Proj4js.common.EPSLN&&Proj4js.reportError("omercInitDataError"),this.singam=Math.sin(this.gam),this.cosgam=Math.cos(this.gam),this.sinaz=Math.sin(this.alpha),this.cosaz=Math.cos(this.alpha),this.u=this.lat0>=0?this.al/this.bl*Math.atan(Math.sqrt(this.d*this.d-1)/this.cosaz):-(this.al/this.bl)*Math.atan(Math.sqrt(this.d*this.d-1)/this.cosaz))},forward:function(t){var i,s,e,o,n,a,r,h,l,c,m,u=t.x,d=t.y;i=Math.sin(d),c=Proj4js.common.adjust_lon(u-this.longc),a=Math.sin(this.bl*c),Math.abs(Math.abs(d)-Proj4js.common.HALF_PI)>Proj4js.common.EPSLN?(m=Proj4js.common.tsfnz(this.e,d,i),o=this.el/Math.pow(m,this.bl),l=.5*(o-1/o),s=.5*(o+1/o),r=(l*this.singam-a*this.cosgam)/s,e=Math.cos(this.bl*c),1e-7>Math.abs(e)?n=this.al*this.bl*c:(n=this.al*Math.atan((l*this.cosgam+a*this.singam)/e)/this.bl,0>e&&(n+=Proj4js.common.PI*this.al/this.bl))):(r=d>=0?this.singam:-this.singam,n=this.al*d/this.bl),Math.abs(Math.abs(r)-1)<=Proj4js.common.EPSLN&&Proj4js.reportError("omercFwdInfinity"),h=.5*this.al*Math.log((1-r)/(1+r))/this.bl,n-=this.u;var p=this.x0+h*this.cosaz+n*this.sinaz,_=this.y0+n*this.cosaz-h*this.sinaz;return t.x=p,t.y=_,t},inverse:function(t){var i,s,e,o,n,a,r,h,l,c,m,u,d;return t.x-=this.x0,t.y-=this.y0,d=0,o=t.x*this.cosaz-t.y*this.sinaz,n=t.y*this.cosaz+t.x*this.sinaz,n+=this.u,a=Math.exp(-this.bl*o/this.al),r=.5*(a-1/a),s=.5*(a+1/a),l=Math.sin(this.bl*n/this.al),c=(l*this.cosgam+r*this.singam)/s,Math.abs(Math.abs(c)-1)<=Proj4js.common.EPSLN?(m=this.longc,u=c>=0?Proj4js.common.HALF_PI:-Proj4js.common.HALF_PI):(e=1/this.bl,h=Math.pow(this.el/Math.sqrt((1+c)/(1-c)),e),u=Proj4js.common.phi2z(this.e,h),i=this.longc-Math.atan2(r*this.cosgam-l*this.singam,e)/this.bl,m=Proj4js.common.adjust_lon(i)),t.x=m,t.y=u,t}},Proj4js.Proj.lcc={init:function(){if(this.lat2||(this.lat2=this.lat0),this.k0||(this.k0=1),Math.abs(this.lat1+this.lat2)Proj4js.common.EPSLN?Math.log(e/r)/Math.log(o/h):i,this.f0=e/(this.ns*Math.pow(o,this.ns)),this.rh=this.a*this.f0*Math.pow(l,this.ns),this.title||(this.title="Lambert Conformal Conic")},forward:function(t){var i=t.x,s=t.y;if(!(90>=s&&s>=-90&&180>=i&&i>=-180))return Proj4js.reportError("lcc:forward: llInputOutOfRange: "+i+" : "+s),null;var e,o,n=Math.abs(Math.abs(s)-Proj4js.common.HALF_PI);if(n>Proj4js.common.EPSLN)e=Proj4js.common.tsfnz(this.e,s,Math.sin(s)),o=this.a*this.f0*Math.pow(e,this.ns);else{if(n=s*this.ns,0>=n)return Proj4js.reportError("lcc:forward: No Projection"),null;o=0}var a=this.ns*Proj4js.common.adjust_lon(i-this.long0);return t.x=this.k0*o*Math.sin(a)+this.x0,t.y=this.k0*(this.rh-o*Math.cos(a))+this.y0,t},inverse:function(t){var i,s,e,o,n,a=(t.x-this.x0)/this.k0,r=this.rh-(t.y-this.y0)/this.k0;this.ns>0?(i=Math.sqrt(a*a+r*r),s=1):(i=-Math.sqrt(a*a+r*r),s=-1);var h=0;if(0!=i&&(h=Math.atan2(s*a,s*r)),0!=i||this.ns>0){if(s=1/this.ns,e=Math.pow(i/(this.a*this.f0),s),o=Proj4js.common.phi2z(this.e,e),-9999==o)return null}else o=-Proj4js.common.HALF_PI;return n=Proj4js.common.adjust_lon(h/this.ns+this.long0),t.x=n,t.y=o,t}},Proj4js.Proj.laea={S_POLE:1,N_POLE:2,EQUIT:3,OBLIQ:4,init:function(){var t=Math.abs(this.lat0);if(this.mode=Math.abs(t-Proj4js.common.HALF_PI)this.lat0?this.S_POLE:this.N_POLE:Math.abs(t)0){var i;switch(this.qp=Proj4js.common.qsfnz(this.e,1),this.mmf=.5/(1-this.es),this.apa=this.authset(this.es),this.mode){case this.N_POLE:case this.S_POLE:this.dd=1;break;case this.EQUIT:this.rq=Math.sqrt(.5*this.qp),this.dd=1/this.rq,this.xmf=1,this.ymf=.5*this.qp;break;case this.OBLIQ:this.rq=Math.sqrt(.5*this.qp),i=Math.sin(this.lat0),this.sinb1=Proj4js.common.qsfnz(this.e,i)/this.qp,this.cosb1=Math.sqrt(1-this.sinb1*this.sinb1),this.dd=Math.cos(this.lat0)/(Math.sqrt(1-this.es*i*i)*this.rq*this.cosb1),this.ymf=(this.xmf=this.rq)/this.dd,this.xmf*=this.dd}}else this.mode==this.OBLIQ&&(this.sinph0=Math.sin(this.lat0),this.cosph0=Math.cos(this.lat0))},forward:function(t){var i,s,e=t.x,o=t.y;if(e=Proj4js.common.adjust_lon(e-this.long0),this.sphere){var n,a,r;switch(r=Math.sin(o),a=Math.cos(o),n=Math.cos(e),this.mode){case this.OBLIQ:case this.EQUIT:if(s=this.mode==this.EQUIT?1+a*n:1+this.sinph0*r+this.cosph0*a*n,Proj4js.common.EPSLN>=s)return Proj4js.reportError("laea:fwd:y less than eps"),null;s=Math.sqrt(2/s),i=s*a*Math.sin(e),s*=this.mode==this.EQUIT?r:this.cosph0*r-this.sinph0*a*n;break;case this.N_POLE:n=-n;case this.S_POLE:if(Math.abs(o+this.phi0)=0?(i=(u=Math.sqrt(l))*h,s=n*(this.mode==this.S_POLE?u:-u)):i=s=0}}return t.x=this.a*i+this.x0,t.y=this.a*s+this.y0,t},inverse:function(t){t.x-=this.x0,t.y-=this.y0;var i,s,e=t.x/this.a,o=t.y/this.a;if(this.sphere){var n,a=0,r=0;if(n=Math.sqrt(e*e+o*o),s=.5*n,s>1)return Proj4js.reportError("laea:Inv:DataError"),null;switch(s=2*Math.asin(s),(this.mode==this.OBLIQ||this.mode==this.EQUIT)&&(r=Math.sin(s),a=Math.cos(s)),this.mode){case this.EQUIT:s=Math.abs(n)<=Proj4js.common.EPSLN?0:Math.asin(o*r/n),e*=r,o=a*n;break;case this.OBLIQ:s=Math.abs(n)<=Proj4js.common.EPSLN?this.phi0:Math.asin(a*this.sinph0+o*r*this.cosph0/n),e*=r*this.cosph0,o=(a-Math.sin(s)*this.sinph0)*n;break;case this.N_POLE:o=-o,s=Proj4js.common.HALF_PI-s;break;case this.S_POLE:s-=Proj4js.common.HALF_PI}i=0!=o||this.mode!=this.EQUIT&&this.mode!=this.OBLIQ?Math.atan2(e,o):0}else{var h,l,c,m,u=0;switch(this.mode){case this.EQUIT:case this.OBLIQ:if(e/=this.dd,o*=this.dd,m=Math.sqrt(e*e+o*o),Proj4js.common.EPSLN>m)return t.x=0,t.y=this.phi0,t;l=2*Math.asin(.5*m/this.rq),h=Math.cos(l),e*=l=Math.sin(l),this.mode==this.OBLIQ?(u=h*this.sinb1+o*l*this.cosb1/m,c=this.qp*u,o=m*this.cosb1*h-o*this.sinb1*l):(u=o*l/m,c=this.qp*u,o=m*h);break;case this.N_POLE:o=-o;case this.S_POLE:if(c=e*e+o*o,!c)return t.x=0,t.y=this.phi0,t;u=1-c/this.qp,this.mode==this.S_POLE&&(u=-u)}i=Math.atan2(e,o),s=this.authlat(Math.asin(u),this.apa)}return t.x=Proj4js.common.adjust_lon(this.long0+i),t.y=s,t},P00:.3333333333333333,P01:.17222222222222222,P02:.10257936507936508,P10:.06388888888888888,P11:.0664021164021164,P20:.016415012942191543,authset:function(t){var i,s=[];return s[0]=t*this.P00,i=t*t,s[0]+=i*this.P01,s[1]=i*this.P10,i*=t,s[0]+=i*this.P02,s[1]+=i*this.P11,s[2]=i*this.P20,s},authlat:function(t,i){var s=t+t;return t+i[0]*Math.sin(s)+i[1]*Math.sin(s+s)+i[2]*Math.sin(s+s+s)}},Proj4js.Proj.aeqd={init:function(){this.sin_p12=Math.sin(this.lat0),this.cos_p12=Math.cos(this.lat0)},forward:function(t){var i=t.x;t.y;var s,e=Math.sin(t.y),o=Math.cos(t.y),n=Proj4js.common.adjust_lon(i-this.long0),a=Math.cos(n),r=this.sin_p12*e+this.cos_p12*o*a;if(Math.abs(Math.abs(r)-1)r)return Proj4js.reportError("aeqd:Fwd:PointError"),void 0}else{var h=Math.acos(r);s=h/Math.sin(h)}return t.x=this.x0+this.a*s*o*Math.sin(n),t.y=this.y0+this.a*s*(this.cos_p12*e-this.sin_p12*o*a),t},inverse:function(t){t.x-=this.x0,t.y-=this.y0;var i=Math.sqrt(t.x*t.x+t.y*t.y);if(i>2*Proj4js.common.HALF_PI*this.a)return Proj4js.reportError("aeqdInvDataError"),void 0;var s,e=i/this.a,o=Math.sin(e),n=Math.cos(e),a=this.long0;if(Math.abs(i)<=Proj4js.common.EPSLN)s=this.lat0;else{s=Proj4js.common.asinz(n*this.sin_p12+t.y*o*this.cos_p12/i);var r=Math.abs(this.lat0)-Proj4js.common.HALF_PI;Math.abs(r)<=Proj4js.common.EPSLN?a=this.lat0>=0?Proj4js.common.adjust_lon(this.long0+Math.atan2(t.x,-t.y)):Proj4js.common.adjust_lon(this.long0-Math.atan2(-t.x,t.y)):(r=n-this.sin_p12*Math.sin(s),Math.abs(r)=50&&Proj4js.reportError("moll:Fwd:IterationError")}o/=2,Proj4js.common.PI/2-Math.abs(s).999999999999&&(s=.999999999999);var i=Math.asin(s),e=Proj4js.common.adjust_lon(this.long0+t.x/(.900316316158*this.a*Math.cos(i)));-Proj4js.common.PI>e&&(e=-Proj4js.common.PI),e>Proj4js.common.PI&&(e=Proj4js.common.PI),s=(2*i+Math.sin(2*i))/Proj4js.common.PI,Math.abs(s)>1&&(s=1);var o=Math.asin(s);return t.x=e,t.y=o,t}},function(t,i,s){var e,o;typeof exports!=s+""?e=exports:(o=t.L,e={},e.noConflict=function(){return t.L=o,this},t.L=e),e.version="0.5.1",e.Util={extend:function(t){var i,s,e,o,n=Array.prototype.slice.call(arguments,1);for(s=0,e=n.length;e>s;s++){o=n[s]||{};for(i in o)o.hasOwnProperty(i)&&(t[i]=o[i])}return t},bind:function(t,i){var s=arguments.length>2?Array.prototype.slice.call(arguments,2):null;return function(){return t.apply(i,s||arguments)}},stamp:function(){var t=0,i="_leaflet_id";return function(s){return s[i]=s[i]||++t,s[i]}}(),limitExecByInterval:function(t,i,e){var o,n;return function a(){var r=arguments;return o?(n=!0,s):(o=!0,setTimeout(function(){o=!1,n&&(a.apply(e,r),n=!1)},i),t.apply(e,r),s)}},falseFn:function(){return!1},formatNum:function(t,i){var s=Math.pow(10,i||5);return Math.round(t*s)/s},splitWords:function(t){return t.replace(/^\s+|\s+$/g,"").split(/\s+/)},setOptions:function(t,i){return t.options=e.extend({},t.options,i),t.options},getParamString:function(t,i){var s=[];for(var e in t)t.hasOwnProperty(e)&&s.push(e+"="+t[e]);return(i&&-1!==i.indexOf("?")?"&":"?")+s.join("&")},template:function(t,i){return t.replace(/\{ *([\w_]+) *\}/g,function(t,s){var e=i[s];if(!i.hasOwnProperty(s))throw Error("No value provided for variable "+t);return e})},isArray:function(t){return"[object Array]"===Object.prototype.toString.call(t)},emptyImageUrl:"data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs="},function(){function i(i){var s,e,o=["webkit","moz","o","ms"];for(s=0;o.length>s&&!e;s++)e=t[o[s]+i];return e}function o(i){var s=+new Date,e=Math.max(0,16-(s-n));return n=s+e,t.setTimeout(i,e)}var n=0,a=t.requestAnimationFrame||i("RequestAnimationFrame")||o,r=t.cancelAnimationFrame||i("CancelAnimationFrame")||i("CancelRequestAnimationFrame")||function(i){t.clearTimeout(i)};e.Util.requestAnimFrame=function(i,n,r,h){return i=e.bind(i,n),r&&a===o?(i(),s):a.call(t,i,h)},e.Util.cancelAnimFrame=function(i){i&&r.call(t,i)}}(),e.extend=e.Util.extend,e.bind=e.Util.bind,e.stamp=e.Util.stamp,e.setOptions=e.Util.setOptions,e.Class=function(){},e.Class.extend=function(t){var i=function(){this.initialize&&this.initialize.apply(this,arguments),this._initHooks&&this.callInitHooks()},s=function(){};s.prototype=this.prototype;var o=new s;o.constructor=i,i.prototype=o;for(var n in this)this.hasOwnProperty(n)&&"prototype"!==n&&(i[n]=this[n]);t.statics&&(e.extend(i,t.statics),delete t.statics),t.includes&&(e.Util.extend.apply(null,[o].concat(t.includes)),delete t.includes),t.options&&o.options&&(t.options=e.extend({},o.options,t.options)),e.extend(o,t),o._initHooks=[];var a=this;return o.callInitHooks=function(){if(!this._initHooksCalled){a.prototype.callInitHooks&&a.prototype.callInitHooks.call(this),this._initHooksCalled=!0;for(var t=0,i=o._initHooks.length;i>t;t++)o._initHooks[t].call(this)}},i},e.Class.include=function(t){e.extend(this.prototype,t)},e.Class.mergeOptions=function(t){e.extend(this.prototype.options,t)},e.Class.addInitHook=function(t){var i=Array.prototype.slice.call(arguments,1),s="function"==typeof t?t:function(){this[t].apply(this,i)};this.prototype._initHooks=this.prototype._initHooks||[],this.prototype._initHooks.push(s)};var n="_leaflet_events";e.Mixin={},e.Mixin.Events={addEventListener:function(t,i,s){var o,a,r,h=this[n]=this[n]||{};if("object"==typeof t){for(o in t)t.hasOwnProperty(o)&&this.addEventListener(o,t[o],i);return this}for(t=e.Util.splitWords(t),a=0,r=t.length;r>a;a++)h[t[a]]=h[t[a]]||[],h[t[a]].push({action:i,context:s||this});return this},hasEventListeners:function(t){return n in this&&t in this[n]&&this[n][t].length>0},removeEventListener:function(t,i,s){var o,a,r,h,l,c=this[n];if("object"==typeof t){for(o in t)t.hasOwnProperty(o)&&this.removeEventListener(o,t[o],i);return this}for(t=e.Util.splitWords(t),a=0,r=t.length;r>a;a++)if(this.hasEventListeners(t[a]))for(h=c[t[a]],l=h.length-1;l>=0;l--)i&&h[l].action!==i||s&&h[l].context!==s||h.splice(l,1);return this},fireEvent:function(t,i){if(!this.hasEventListeners(t))return this;for(var s=e.extend({type:t,target:this},i),o=this[n][t].slice(),a=0,r=o.length;r>a;a++)o[a].action.call(o[a].context||this,s);return this}},e.Mixin.Events.on=e.Mixin.Events.addEventListener,e.Mixin.Events.off=e.Mixin.Events.removeEventListener,e.Mixin.Events.fire=e.Mixin.Events.fireEvent,function(){var o=!!t.ActiveXObject,n=o&&!t.XMLHttpRequest,a=o&&!i.querySelector,r=navigator.userAgent.toLowerCase(),h=-1!==r.indexOf("webkit"),l=-1!==r.indexOf("chrome"),c=-1!==r.indexOf("android"),m=-1!==r.search("android [23]"),u=typeof orientation!=s+"",d=t.navigator&&t.navigator.msPointerEnabled&&t.navigator.msMaxTouchPoints,p="devicePixelRatio"in t&&t.devicePixelRatio>1||"matchMedia"in t&&t.matchMedia("(min-resolution:144dpi)")&&t.matchMedia("(min-resolution:144dpi)").matches,_=i.documentElement,f=o&&"transition"in _.style,P="WebKitCSSMatrix"in t&&"m11"in new t.WebKitCSSMatrix,y="MozPerspective"in _.style,g="OTransition"in _.style,L=!t.L_DISABLE_3D&&(f||P||y||g),v=!t.L_NO_TOUCH&&function(){var t="ontouchstart";if(d||t in _)return!0;var s=i.createElement("div"),e=!1;return s.setAttribute?(s.setAttribute(t,"return;"),"function"==typeof s[t]&&(e=!0),s.removeAttribute(t),s=null,e):!1}();e.Browser={ie:o,ie6:n,ie7:a,webkit:h,android:c,android23:m,chrome:l,ie3d:f,webkit3d:P,gecko3d:y,opera3d:g,any3d:L,mobile:u,mobileWebkit:u&&h,mobileWebkit3d:u&&P,mobileOpera:u&&t.opera,touch:v,msTouch:d,retina:p}}(),e.Point=function(t,i,s){this.x=s?Math.round(t):t,this.y=s?Math.round(i):i},e.Point.prototype={clone:function(){return new e.Point(this.x,this.y)},add:function(t){return this.clone()._add(e.point(t))},_add:function(t){return this.x+=t.x,this.y+=t.y,this},subtract:function(t){return this.clone()._subtract(e.point(t))},_subtract:function(t){return this.x-=t.x,this.y-=t.y,this},divideBy:function(t){return this.clone()._divideBy(t)},_divideBy:function(t){return this.x/=t,this.y/=t,this},multiplyBy:function(t){return this.clone()._multiplyBy(t)},_multiplyBy:function(t){return this.x*=t,this.y*=t,this},round:function(){return this.clone()._round()},_round:function(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this},floor:function(){return this.clone()._floor()},_floor:function(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this},distanceTo:function(t){t=e.point(t);var i=t.x-this.x,s=t.y-this.y;return Math.sqrt(i*i+s*s)},equals:function(t){return t.x===this.x&&t.y===this.y},toString:function(){return"Point("+e.Util.formatNum(this.x)+", "+e.Util.formatNum(this.y)+")"}},e.point=function(t,i,s){return t instanceof e.Point?t:e.Util.isArray(t)?new e.Point(t[0],t[1]):isNaN(t)?t:new e.Point(t,i,s)},e.Bounds=function(t,i){if(t)for(var s=i?[t,i]:t,e=0,o=s.length;o>e;e++)this.extend(s[e])},e.Bounds.prototype={extend:function(t){return t=e.point(t),this.min||this.max?(this.min.x=Math.min(t.x,this.min.x),this.max.x=Math.max(t.x,this.max.x),this.min.y=Math.min(t.y,this.min.y),this.max.y=Math.max(t.y,this.max.y)):(this.min=t.clone(),this.max=t.clone()),this},getCenter:function(t){return new e.Point((this.min.x+this.max.x)/2,(this.min.y+this.max.y)/2,t)},getBottomLeft:function(){return new e.Point(this.min.x,this.max.y)},getTopRight:function(){return new e.Point(this.max.x,this.min.y)},getSize:function(){return this.max.subtract(this.min)},contains:function(t){var i,s;return t="number"==typeof t[0]||t instanceof e.Point?e.point(t):e.bounds(t),t instanceof e.Bounds?(i=t.min,s=t.max):i=s=t,i.x>=this.min.x&&s.x<=this.max.x&&i.y>=this.min.y&&s.y<=this.max.y},intersects:function(t){t=e.bounds(t);var i=this.min,s=this.max,o=t.min,n=t.max,a=n.x>=i.x&&o.x<=s.x,r=n.y>=i.y&&o.y<=s.y;return a&&r},isValid:function(){return!(!this.min||!this.max)}},e.bounds=function(t,i){return!t||t instanceof e.Bounds?t:new e.Bounds(t,i)},e.Transformation=function(t,i,s,e){this._a=t,this._b=i,this._c=s,this._d=e},e.Transformation.prototype={transform:function(t,i){return this._transform(t.clone(),i)},_transform:function(t,i){return i=i||1,t.x=i*(this._a*t.x+this._b),t.y=i*(this._c*t.y+this._d),t},untransform:function(t,i){return i=i||1,new e.Point((t.x/i-this._b)/this._a,(t.y/i-this._d)/this._c)}},e.DomUtil={get:function(t){return"string"==typeof t?i.getElementById(t):t},getStyle:function(t,s){var e=t.style[s];if(!e&&t.currentStyle&&(e=t.currentStyle[s]),(!e||"auto"===e)&&i.defaultView){var o=i.defaultView.getComputedStyle(t,null);e=o?o[s]:null}return"auto"===e?null:e},getViewportOffset:function(t){var s,o=0,n=0,a=t,r=i.body,h=e.Browser.ie7;do{if(o+=a.offsetTop||0,n+=a.offsetLeft||0,o+=parseInt(e.DomUtil.getStyle(a,"borderTopWidth"),10)||0,n+=parseInt(e.DomUtil.getStyle(a,"borderLeftWidth"),10)||0,s=e.DomUtil.getStyle(a,"position"),a.offsetParent===r&&"absolute"===s)break;if("fixed"===s){o+=r.scrollTop||0,n+=r.scrollLeft||0;break}a=a.offsetParent}while(a);a=t;do{if(a===r)break;o-=a.scrollTop||0,n-=a.scrollLeft||0,e.DomUtil.documentIsLtr()||!e.Browser.webkit&&!h||(n+=a.scrollWidth-a.clientWidth,h&&"hidden"!==e.DomUtil.getStyle(a,"overflow-y")&&"hidden"!==e.DomUtil.getStyle(a,"overflow")&&(n+=17)),a=a.parentNode}while(a);return new e.Point(n,o)},documentIsLtr:function(){return e.DomUtil._docIsLtrCached||(e.DomUtil._docIsLtrCached=!0,e.DomUtil._docIsLtr="ltr"===e.DomUtil.getStyle(i.body,"direction")),e.DomUtil._docIsLtr},create:function(t,s,e){var o=i.createElement(t);return o.className=s,e&&e.appendChild(o),o},disableTextSelection:function(){i.selection&&i.selection.empty&&i.selection.empty(),this._onselectstart||(this._onselectstart=i.onselectstart||null,i.onselectstart=e.Util.falseFn)},enableTextSelection:function(){i.onselectstart===e.Util.falseFn&&(i.onselectstart=this._onselectstart,this._onselectstart=null)},hasClass:function(t,i){return t.className.length>0&&RegExp("(^|\\s)"+i+"(\\s|$)").test(t.className)},addClass:function(t,i){e.DomUtil.hasClass(t,i)||(t.className+=(t.className?" ":"")+i)},removeClass:function(t,i){function s(t,s){return s===i?"":t}t.className=t.className.replace(/(\S+)\s*/g,s).replace(/(^\s+|\s+$)/,"")},setOpacity:function(t,i){if("opacity"in t.style)t.style.opacity=i;else if("filter"in t.style){var s=!1,e="DXImageTransform.Microsoft.Alpha";try{s=t.filters.item(e)}catch(o){}i=Math.round(100*i),s?(s.Enabled=100!==i,s.Opacity=i):t.style.filter+=" progid:"+e+"(opacity="+i+")"}},testProp:function(t){for(var s=i.documentElement.style,e=0;t.length>e;e++)if(t[e]in s)return t[e];return!1},getTranslateString:function(t){var i=e.Browser.webkit3d,s="translate"+(i?"3d":"")+"(",o=(i?",0":"")+")";return s+t.x+"px,"+t.y+"px"+o},getScaleString:function(t,i){var s=e.DomUtil.getTranslateString(i.add(i.multiplyBy(-1*t))),o=" scale("+t+") ";return s+o},setPosition:function(t,i,s){t._leaflet_pos=i,!s&&e.Browser.any3d?(t.style[e.DomUtil.TRANSFORM]=e.DomUtil.getTranslateString(i),e.Browser.mobileWebkit3d&&(t.style.WebkitBackfaceVisibility="hidden")):(t.style.left=i.x+"px",t.style.top=i.y+"px")},getPosition:function(t){return t._leaflet_pos}},e.DomUtil.TRANSFORM=e.DomUtil.testProp(["transform","WebkitTransform","OTransform","MozTransform","msTransform"]),e.DomUtil.TRANSITION=e.DomUtil.testProp(["webkitTransition","transition","OTransition","MozTransition","msTransition"]),e.DomUtil.TRANSITION_END="webkitTransition"===e.DomUtil.TRANSITION||"OTransition"===e.DomUtil.TRANSITION?e.DomUtil.TRANSITION+"End":"transitionend",e.LatLng=function(t,i){var s=parseFloat(t),e=parseFloat(i);if(isNaN(s)||isNaN(e))throw Error("Invalid LatLng object: ("+t+", "+i+")");this.lat=s,this.lng=e},e.extend(e.LatLng,{DEG_TO_RAD:Math.PI/180,RAD_TO_DEG:180/Math.PI,MAX_MARGIN:1e-9}),e.LatLng.prototype={equals:function(t){if(!t)return!1;t=e.latLng(t);var i=Math.max(Math.abs(this.lat-t.lat),Math.abs(this.lng-t.lng));return e.LatLng.MAX_MARGIN>=i},toString:function(t){return"LatLng("+e.Util.formatNum(this.lat,t)+", "+e.Util.formatNum(this.lng,t)+")"},distanceTo:function(t){t=e.latLng(t);var i=6378137,s=e.LatLng.DEG_TO_RAD,o=(t.lat-this.lat)*s,n=(t.lng-this.lng)*s,a=this.lat*s,r=t.lat*s,h=Math.sin(o/2),l=Math.sin(n/2),c=h*h+l*l*Math.cos(a)*Math.cos(r);return 2*i*Math.atan2(Math.sqrt(c),Math.sqrt(1-c))},wrap:function(t,i){var s=this.lng;return t=t||-180,i=i||180,s=(s+i)%(i-t)+(t>s||s===i?i:t),new e.LatLng(this.lat,s)}},e.latLng=function(t,i){return t instanceof e.LatLng?t:e.Util.isArray(t)?new e.LatLng(t[0],t[1]):isNaN(t)?t:new e.LatLng(t,i)},e.LatLngBounds=function(t,i){if(t)for(var s=i?[t,i]:t,e=0,o=s.length;o>e;e++)this.extend(s[e])},e.LatLngBounds.prototype={extend:function(t){return t="number"==typeof t[0]||"string"==typeof t[0]||t instanceof e.LatLng?e.latLng(t):e.latLngBounds(t),t instanceof e.LatLng?this._southWest||this._northEast?(this._southWest.lat=Math.min(t.lat,this._southWest.lat),this._southWest.lng=Math.min(t.lng,this._southWest.lng),this._northEast.lat=Math.max(t.lat,this._northEast.lat),this._northEast.lng=Math.max(t.lng,this._northEast.lng)):(this._southWest=new e.LatLng(t.lat,t.lng),this._northEast=new e.LatLng(t.lat,t.lng)):t instanceof e.LatLngBounds&&(this.extend(t._southWest),this.extend(t._northEast)),this},pad:function(t){var i=this._southWest,s=this._northEast,o=Math.abs(i.lat-s.lat)*t,n=Math.abs(i.lng-s.lng)*t;return new e.LatLngBounds(new e.LatLng(i.lat-o,i.lng-n),new e.LatLng(s.lat+o,s.lng+n))},getCenter:function(){return new e.LatLng((this._southWest.lat+this._northEast.lat)/2,(this._southWest.lng+this._northEast.lng)/2)},getSouthWest:function(){return this._southWest},getNorthEast:function(){return this._northEast},getNorthWest:function(){return new e.LatLng(this._northEast.lat,this._southWest.lng)},getSouthEast:function(){return new e.LatLng(this._southWest.lat,this._northEast.lng)},contains:function(t){t="number"==typeof t[0]||t instanceof e.LatLng?e.latLng(t):e.latLngBounds(t);var i,s,o=this._southWest,n=this._northEast;return t instanceof e.LatLngBounds?(i=t.getSouthWest(),s=t.getNorthEast()):i=s=t,i.lat>=o.lat&&s.lat<=n.lat&&i.lng>=o.lng&&s.lng<=n.lng},intersects:function(t){t=e.latLngBounds(t);var i=this._southWest,s=this._northEast,o=t.getSouthWest(),n=t.getNorthEast(),a=n.lat>=i.lat&&o.lat<=s.lat,r=n.lng>=i.lng&&o.lng<=s.lng;return a&&r},toBBoxString:function(){var t=this._southWest,i=this._northEast;return[t.lng,t.lat,i.lng,i.lat].join(",")},equals:function(t){return t?(t=e.latLngBounds(t),this._southWest.equals(t.getSouthWest())&&this._northEast.equals(t.getNorthEast())):!1},isValid:function(){return!(!this._southWest||!this._northEast)}},e.latLngBounds=function(t,i){return!t||t instanceof e.LatLngBounds?t:new e.LatLngBounds(t,i)},e.Projection={},e.Projection.SphericalMercator={MAX_LATITUDE:85.0511287798,project:function(t){var i=e.LatLng.DEG_TO_RAD,s=this.MAX_LATITUDE,o=Math.max(Math.min(s,t.lat),-s),n=t.lng*i,a=o*i;return a=Math.log(Math.tan(Math.PI/4+a/2)),new e.Point(n,a)},unproject:function(t){var i=e.LatLng.RAD_TO_DEG,s=t.x*i,o=(2*Math.atan(Math.exp(t.y))-Math.PI/2)*i;return new e.LatLng(o,s)}},e.Projection.LonLat={project:function(t){return new e.Point(t.lng,t.lat)},unproject:function(t){return new e.LatLng(t.y,t.x)}},e.CRS={latLngToPoint:function(t,i){var s=this.projection.project(t),e=this.scale(i);return this.transformation._transform(s,e)},pointToLatLng:function(t,i){var s=this.scale(i),e=this.transformation.untransform(t,s);return this.projection.unproject(e)},project:function(t){return this.projection.project(t)},scale:function(t){return 256*Math.pow(2,t)}},e.CRS.Simple=e.extend({},e.CRS,{projection:e.Projection.LonLat,transformation:new e.Transformation(1,0,-1,0),scale:function(t){return Math.pow(2,t)}}),e.CRS.EPSG3857=e.extend({},e.CRS,{code:"EPSG:3857",projection:e.Projection.SphericalMercator,transformation:new e.Transformation(.5/Math.PI,.5,-.5/Math.PI,.5),project:function(t){var i=this.projection.project(t),s=6378137;return i.multiplyBy(s)}}),e.CRS.EPSG900913=e.extend({},e.CRS.EPSG3857,{code:"EPSG:900913"}),e.CRS.EPSG4326=e.extend({},e.CRS,{code:"EPSG:4326",projection:e.Projection.LonLat,transformation:new e.Transformation(1/360,.5,-1/360,.5)}),e.Map=e.Class.extend({includes:e.Mixin.Events,options:{crs:e.CRS.EPSG3857,fadeAnimation:e.DomUtil.TRANSITION&&!e.Browser.android23,trackResize:!0,markerZoomAnimation:e.DomUtil.TRANSITION&&e.Browser.any3d},initialize:function(t,i){i=e.setOptions(this,i),this._initContainer(t),this._initLayout(),this.callInitHooks(),this._initEvents(),i.maxBounds&&this.setMaxBounds(i.maxBounds),i.center&&i.zoom!==s&&this.setView(e.latLng(i.center),i.zoom,!0),this._initLayers(i.layers)},setView:function(t,i){return this._resetView(e.latLng(t),this._limitZoom(i)),this},setZoom:function(t){return this.setView(this.getCenter(),t)},zoomIn:function(t){return this.setZoom(this._zoom+(t||1))},zoomOut:function(t){return this.setZoom(this._zoom-(t||1))},fitBounds:function(t){var i=this.getBoundsZoom(t);return this.setView(e.latLngBounds(t).getCenter(),i)},fitWorld:function(){var t=new e.LatLng(-60,-170),i=new e.LatLng(85,179);return this.fitBounds(new e.LatLngBounds(t,i))},panTo:function(t){return this.setView(t,this._zoom)},panBy:function(t){return this.fire("movestart"),this._rawPanBy(e.point(t)),this.fire("move"),this.fire("moveend")},setMaxBounds:function(t){if(t=e.latLngBounds(t),this.options.maxBounds=t,!t)return this._boundsMinZoom=null,this;var i=this.getBoundsZoom(t,!0);return this._boundsMinZoom=i,this._loaded&&(i>this._zoom?this.setView(t.getCenter(),i):this.panInsideBounds(t)),this},panInsideBounds:function(t){t=e.latLngBounds(t);var i=this.getBounds(),s=this.project(i.getSouthWest()),o=this.project(i.getNorthEast()),n=this.project(t.getSouthWest()),a=this.project(t.getNorthEast()),r=0,h=0;return o.ya.x&&(r=a.x-o.x),s.y>n.y&&(h=n.y-s.y),s.x=r);return m&&i?null:i?r:r-1},getSize:function(){return(!this._size||this._sizeChanged)&&(this._size=new e.Point(this._container.clientWidth,this._container.clientHeight),this._sizeChanged=!1),this._size.clone()},getPixelBounds:function(){var t=this._getTopLeftPoint();return new e.Bounds(t,t.add(this.getSize()))},getPixelOrigin:function(){return this._initialTopLeftPoint},getPanes:function(){return this._panes},getContainer:function(){return this._container},getZoomScale:function(t){var i=this.options.crs;return i.scale(t)/i.scale(this._zoom)},getScaleZoom:function(t){return this._zoom+Math.log(t)/Math.LN2},project:function(t,i){return i=i===s?this._zoom:i,this.options.crs.latLngToPoint(e.latLng(t),i)},unproject:function(t,i){return i=i===s?this._zoom:i,this.options.crs.pointToLatLng(e.point(t),i)},layerPointToLatLng:function(t){var i=e.point(t).add(this._initialTopLeftPoint);return this.unproject(i)},latLngToLayerPoint:function(t){var i=this.project(e.latLng(t))._round();return i._subtract(this._initialTopLeftPoint)},containerPointToLayerPoint:function(t){return e.point(t).subtract(this._getMapPanePos())},layerPointToContainerPoint:function(t){return e.point(t).add(this._getMapPanePos())},containerPointToLatLng:function(t){var i=this.containerPointToLayerPoint(e.point(t));return this.layerPointToLatLng(i)},latLngToContainerPoint:function(t){return this.layerPointToContainerPoint(this.latLngToLayerPoint(e.latLng(t)))},mouseEventToContainerPoint:function(t){return e.DomEvent.getMousePosition(t,this._container)},mouseEventToLayerPoint:function(t){return this.containerPointToLayerPoint(this.mouseEventToContainerPoint(t))},mouseEventToLatLng:function(t){return this.layerPointToLatLng(this.mouseEventToLayerPoint(t))},_initContainer:function(t){var i=this._container=e.DomUtil.get(t);if(i._leaflet)throw Error("Map container is already initialized.");i._leaflet=!0},_initLayout:function(){var t=this._container;e.DomUtil.addClass(t,"leaflet-container"),e.Browser.touch&&e.DomUtil.addClass(t,"leaflet-touch"),this.options.fadeAnimation&&e.DomUtil.addClass(t,"leaflet-fade-anim");var i=e.DomUtil.getStyle(t,"position");"absolute"!==i&&"relative"!==i&&"fixed"!==i&&(t.style.position="relative"),this._initPanes(),this._initControlPos&&this._initControlPos()},_initPanes:function(){var t=this._panes={};this._mapPane=t.mapPane=this._createPane("leaflet-map-pane",this._container),this._tilePane=t.tilePane=this._createPane("leaflet-tile-pane",this._mapPane),t.objectsPane=this._createPane("leaflet-objects-pane",this._mapPane),t.shadowPane=this._createPane("leaflet-shadow-pane"),t.overlayPane=this._createPane("leaflet-overlay-pane"),t.markerPane=this._createPane("leaflet-marker-pane"),t.popupPane=this._createPane("leaflet-popup-pane");var i=" leaflet-zoom-hide";this.options.markerZoomAnimation||(e.DomUtil.addClass(t.markerPane,i),e.DomUtil.addClass(t.shadowPane,i),e.DomUtil.addClass(t.popupPane,i))},_createPane:function(t,i){return e.DomUtil.create("div",t,i||this._panes.objectsPane)},_initLayers:function(t){t=t?e.Util.isArray(t)?t:[t]:[],this._layers={},this._zoomBoundLayers={},this._tileLayersNum=0;var i,s;for(i=0,s=t.length;s>i;i++)this.addLayer(t[i])},_resetView:function(t,i,s,o){var n=this._zoom!==i;o||(this.fire("movestart"),n&&this.fire("zoomstart")),this._zoom=i,this._initialTopLeftPoint=this._getNewTopLeftPoint(t),s?this._initialTopLeftPoint._add(this._getMapPanePos()):e.DomUtil.setPosition(this._mapPane,new e.Point(0,0)),this._tileLayersToLoad=this._tileLayersNum;var a=!this._loaded;this._loaded=!0,this.fire("viewreset",{hard:!s}),this.fire("move"),(n||o)&&this.fire("zoomend"),this.fire("moveend",{hard:!s}),a&&this.fire("load")},_rawPanBy:function(t){e.DomUtil.setPosition(this._mapPane,this._getMapPanePos().subtract(t))},_updateZoomLevels:function(){var t,i=1/0,e=-1/0;for(t in this._zoomBoundLayers)if(this._zoomBoundLayers.hasOwnProperty(t)){var o=this._zoomBoundLayers[t];isNaN(o.options.minZoom)||(i=Math.min(i,o.options.minZoom)),isNaN(o.options.maxZoom)||(e=Math.max(e,o.options.maxZoom))}t===s?this._layersMaxZoom=this._layersMinZoom=s:(this._layersMaxZoom=e,this._layersMinZoom=i)},_initEvents:function(){if(e.DomEvent){e.DomEvent.on(this._container,"click",this._onMouseClick,this);var i,s,o=["dblclick","mousedown","mouseup","mouseenter","mouseleave","mousemove","contextmenu"];for(i=0,s=o.length;s>i;i++)e.DomEvent.on(this._container,o[i],this._fireMouseEvent,this);this.options.trackResize&&e.DomEvent.on(t,"resize",this._onResize,this)}},_onResize:function(){e.Util.cancelAnimFrame(this._resizeRequest),this._resizeRequest=e.Util.requestAnimFrame(this.invalidateSize,this,!1,this._container)},_onMouseClick:function(t){!this._loaded||this.dragging&&this.dragging.moved()||(this.fire("preclick"),this._fireMouseEvent(t))},_fireMouseEvent:function(t){if(this._loaded){var i=t.type;if(i="mouseenter"===i?"mouseover":"mouseleave"===i?"mouseout":i,this.hasEventListeners(i)){"contextmenu"===i&&e.DomEvent.preventDefault(t);var s=this.mouseEventToContainerPoint(t),o=this.containerPointToLayerPoint(s),n=this.layerPointToLatLng(o);this.fire(i,{latlng:n,layerPoint:o,containerPoint:s,originalEvent:t})}}},_onTileLayerLoad:function(){this._tileLayersToLoad--,this._tileLayersNum&&!this._tileLayersToLoad&&this._tileBg&&(clearTimeout(this._clearTileBgTimer),this._clearTileBgTimer=setTimeout(e.bind(this._clearTileBg,this),500))},whenReady:function(t,i){return this._loaded?t.call(i||this,this):this.on("load",t,i),this},_getMapPanePos:function(){return e.DomUtil.getPosition(this._mapPane)},_getTopLeftPoint:function(){if(!this._loaded)throw Error("Set map center and zoom first.");return this._initialTopLeftPoint.subtract(this._getMapPanePos())},_getNewTopLeftPoint:function(t,i){var s=this.getSize()._divideBy(2);return this.project(t,i)._subtract(s)._round()},_latLngToNewLayerPoint:function(t,i,s){var e=this._getNewTopLeftPoint(s,i).add(this._getMapPanePos());return this.project(t,i)._subtract(e)},_getCenterLayerPoint:function(){return this.containerPointToLayerPoint(this.getSize()._divideBy(2))},_getCenterOffset:function(t){return this.latLngToLayerPoint(t).subtract(this._getCenterLayerPoint())},_limitZoom:function(t){var i=this.getMinZoom(),s=this.getMaxZoom();return Math.max(i,Math.min(s,t))}}),e.map=function(t,i){return new e.Map(t,i)},e.Projection.Mercator={MAX_LATITUDE:85.0840591556,R_MINOR:6356752.3142,R_MAJOR:6378137,project:function(t){var i=e.LatLng.DEG_TO_RAD,s=this.MAX_LATITUDE,o=Math.max(Math.min(s,t.lat),-s),n=this.R_MAJOR,a=this.R_MINOR,r=t.lng*i*n,h=o*i,l=a/n,c=Math.sqrt(1-l*l),m=c*Math.sin(h);m=Math.pow((1-m)/(1+m),.5*c);var u=Math.tan(.5*(.5*Math.PI-h))/m;return h=-a*Math.log(u),new e.Point(r,h)},unproject:function(t){for(var i,s=e.LatLng.RAD_TO_DEG,o=this.R_MAJOR,n=this.R_MINOR,a=t.x*s/o,r=n/o,h=Math.sqrt(1-r*r),l=Math.exp(-t.y/n),c=Math.PI/2-2*Math.atan(l),m=15,u=1e-7,d=m,p=.1;Math.abs(p)>u&&--d>0;)i=h*Math.sin(c),p=Math.PI/2-2*Math.atan(l*Math.pow((1-i)/(1+i),.5*h))-c,c+=p;return new e.LatLng(c*s,a)}},e.CRS.EPSG3395=e.extend({},e.CRS,{code:"EPSG:3395",projection:e.Projection.Mercator,transformation:function(){var t=e.Projection.Mercator,i=t.R_MAJOR,s=t.R_MINOR;return new e.Transformation(.5/(Math.PI*i),.5,-.5/(Math.PI*s),.5)}()}),e.TileLayer=e.Class.extend({includes:e.Mixin.Events,options:{minZoom:0,maxZoom:18,tileSize:256,subdomains:"abc",errorTileUrl:"",attribution:"",zoomOffset:0,opacity:1,unloadInvisibleTiles:e.Browser.mobile,updateWhenIdle:e.Browser.mobile},initialize:function(t,i){i=e.setOptions(this,i),i.detectRetina&&e.Browser.retina&&i.maxZoom>0&&(i.tileSize=Math.floor(i.tileSize/2),i.zoomOffset++,i.minZoom>0&&i.minZoom--,this.options.maxZoom--),this._url=t;var s=this.options.subdomains;"string"==typeof s&&(this.options.subdomains=s.split(""))},onAdd:function(t){this._map=t,this._initContainer(),this._createTileProto(),t.on({viewreset:this._resetCallback,moveend:this._update},this),this.options.updateWhenIdle||(this._limitedUpdate=e.Util.limitExecByInterval(this._update,150,this),t.on("move",this._limitedUpdate,this)),this._reset(),this._update()},addTo:function(t){return t.addLayer(this),this},onRemove:function(t){this._container.parentNode.removeChild(this._container),t.off({viewreset:this._resetCallback,moveend:this._update},this),this.options.updateWhenIdle||t.off("move",this._limitedUpdate,this),this._container=null,this._map=null},bringToFront:function(){var t=this._map._panes.tilePane;return this._container&&(t.appendChild(this._container),this._setAutoZIndex(t,Math.max)),this},bringToBack:function(){var t=this._map._panes.tilePane;return this._container&&(t.insertBefore(this._container,t.firstChild),this._setAutoZIndex(t,Math.min)),this},getAttribution:function(){return this.options.attribution},setOpacity:function(t){return this.options.opacity=t,this._map&&this._updateOpacity(),this},setZIndex:function(t){return this.options.zIndex=t,this._updateZIndex(),this},setUrl:function(t,i){return this._url=t,i||this.redraw(),this},redraw:function(){return this._map&&(this._map._panes.tilePane.empty=!1,this._reset(!0),this._update()),this},_updateZIndex:function(){this._container&&this.options.zIndex!==s&&(this._container.style.zIndex=this.options.zIndex)},_setAutoZIndex:function(t,i){var s,e,o,n=t.children,a=-i(1/0,-1/0);for(e=0,o=n.length;o>e;e++)n[e]!==this._container&&(s=parseInt(n[e].style.zIndex,10),isNaN(s)||(a=i(a,s)));this.options.zIndex=this._container.style.zIndex=(isFinite(a)?a:0)+i(1,-1)},_updateOpacity:function(){e.DomUtil.setOpacity(this._container,this.options.opacity);var t,i=this._tiles;if(e.Browser.webkit)for(t in i)i.hasOwnProperty(t)&&(i[t].style.webkitTransform+=" translate(0,0)")},_initContainer:function(){var t=this._map._panes.tilePane;(!this._container||t.empty)&&(this._container=e.DomUtil.create("div","leaflet-layer"),this._updateZIndex(),t.appendChild(this._container),1>this.options.opacity&&this._updateOpacity())},_resetCallback:function(t){this._reset(t.hard)},_reset:function(t){var i=this._tiles;for(var s in i)i.hasOwnProperty(s)&&this.fire("tileunload",{tile:i[s]});this._tiles={},this._tilesToLoad=0,this.options.reuseTiles&&(this._unusedTiles=[]),t&&this._container&&(this._container.innerHTML=""),this._initContainer()},_update:function(){if(this._map){var t=this._map.getPixelBounds(),i=this._map.getZoom(),s=this.options.tileSize;if(!(i>this.options.maxZoom||this.options.minZoom>i)){var o=new e.Point(Math.floor(t.min.x/s),Math.floor(t.min.y/s)),n=new e.Point(Math.floor(t.max.x/s),Math.floor(t.max.y/s)),a=new e.Bounds(o,n);this._addTilesFromCenterOut(a),(this.options.unloadInvisibleTiles||this.options.reuseTiles)&&this._removeOtherTiles(a)}}},_addTilesFromCenterOut:function(t){var s,o,n,a=[],r=t.getCenter();for(s=t.min.y;t.max.y>=s;s++)for(o=t.min.x;t.max.x>=o;o++)n=new e.Point(o,s),this._tileShouldBeLoaded(n)&&a.push(n);var h=a.length;if(0!==h){a.sort(function(t,i){return t.distanceTo(r)-i.distanceTo(r)});var l=i.createDocumentFragment();for(this._tilesToLoad||this.fire("loading"),this._tilesToLoad+=h,o=0;h>o;o++)this._addTile(a[o],l);this._container.appendChild(l)}},_tileShouldBeLoaded:function(t){ -if(t.x+":"+t.y in this._tiles)return!1;if(!this.options.continuousWorld){var i=this._getWrapTileNum();if(this.options.noWrap&&(0>t.x||t.x>=i)||0>t.y||t.y>=i)return!1}return!0},_removeOtherTiles:function(t){var i,s,e,o;for(o in this._tiles)this._tiles.hasOwnProperty(o)&&(i=o.split(":"),s=parseInt(i[0],10),e=parseInt(i[1],10),(t.min.x>s||s>t.max.x||t.min.y>e||e>t.max.y)&&this._removeTile(o))},_removeTile:function(t){var i=this._tiles[t];this.fire("tileunload",{tile:i,url:i.src}),this.options.reuseTiles?(e.DomUtil.removeClass(i,"leaflet-tile-loaded"),this._unusedTiles.push(i)):i.parentNode===this._container&&this._container.removeChild(i),e.Browser.android||(i.src=e.Util.emptyImageUrl),delete this._tiles[t]},_addTile:function(t,i){var s=this._getTilePos(t),o=this._getTile();e.DomUtil.setPosition(o,s,e.Browser.chrome||e.Browser.android23),this._tiles[t.x+":"+t.y]=o,this._loadTile(o,t),o.parentNode!==this._container&&i.appendChild(o)},_getZoomForUrl:function(){var t=this.options,i=this._map.getZoom();return t.zoomReverse&&(i=t.maxZoom-i),i+t.zoomOffset},_getTilePos:function(t){var i=this._map.getPixelOrigin(),s=this.options.tileSize;return t.multiplyBy(s).subtract(i)},getTileUrl:function(t){return this._adjustTilePoint(t),e.Util.template(this._url,e.extend({s:this._getSubdomain(t),z:this._getZoomForUrl(),x:t.x,y:t.y},this.options))},_getWrapTileNum:function(){return Math.pow(2,this._getZoomForUrl())},_adjustTilePoint:function(t){var i=this._getWrapTileNum();this.options.continuousWorld||this.options.noWrap||(t.x=(t.x%i+i)%i),this.options.tms&&(t.y=i-t.y-1)},_getSubdomain:function(t){var i=(t.x+t.y)%this.options.subdomains.length;return this.options.subdomains[i]},_createTileProto:function(){var t=this._tileImg=e.DomUtil.create("img","leaflet-tile");t.style.width=t.style.height=this.options.tileSize+"px",t.galleryimg="no"},_getTile:function(){if(this.options.reuseTiles&&this._unusedTiles.length>0){var t=this._unusedTiles.pop();return this._resetTile(t),t}return this._createTile()},_resetTile:function(){},_createTile:function(){var t=this._tileImg.cloneNode(!1);return t.onselectstart=t.onmousemove=e.Util.falseFn,t},_loadTile:function(t,i){t._layer=this,t.onload=this._tileOnLoad,t.onerror=this._tileOnError,t.src=this.getTileUrl(i)},_tileLoaded:function(){this._tilesToLoad--,this._tilesToLoad||this.fire("load")},_tileOnLoad:function(){var t=this._layer;this.src!==e.Util.emptyImageUrl&&(e.DomUtil.addClass(this,"leaflet-tile-loaded"),t.fire("tileload",{tile:this,url:this.src})),t._tileLoaded()},_tileOnError:function(){var t=this._layer;t.fire("tileerror",{tile:this,url:this.src});var i=t.options.errorTileUrl;i&&(this.src=i),t._tileLoaded()}}),e.tileLayer=function(t,i){return new e.TileLayer(t,i)},e.TileLayer.WMS=e.TileLayer.extend({defaultWmsParams:{service:"WMS",request:"GetMap",version:"1.1.1",layers:"",styles:"",format:"image/jpeg",transparent:!1},initialize:function(t,i){this._url=t;var s=e.extend({},this.defaultWmsParams);s.width=s.height=i.detectRetina&&e.Browser.retina?2*this.options.tileSize:this.options.tileSize;for(var o in i)this.options.hasOwnProperty(o)||(s[o]=i[o]);this.wmsParams=s,e.setOptions(this,i)},onAdd:function(t){var i=parseFloat(this.wmsParams.version)>=1.3?"crs":"srs";this.wmsParams[i]=t.options.crs.code,e.TileLayer.prototype.onAdd.call(this,t)},getTileUrl:function(t,i){this._adjustTilePoint(t);var s=this._map,o=s.options.crs,n=this.options.tileSize,a=t.multiplyBy(n),r=a.add(new e.Point(n,n)),h=o.project(s.unproject(a,i)),l=o.project(s.unproject(r,i)),c=[h.x,l.y,l.x,h.y].join(","),m=e.Util.template(this._url,{s:this._getSubdomain(t)});return m+e.Util.getParamString(this.wmsParams,m)+"&bbox="+c},setParams:function(t,i){return e.extend(this.wmsParams,t),i||this.redraw(),this}}),e.tileLayer.wms=function(t,i){return new e.TileLayer.WMS(t,i)},e.TileLayer.Canvas=e.TileLayer.extend({options:{async:!1},initialize:function(t){e.setOptions(this,t)},redraw:function(){var t=this._tiles;for(var i in t)t.hasOwnProperty(i)&&this._redrawTile(t[i])},_redrawTile:function(t){this.drawTile(t,t._tilePoint,this._map._zoom)},_createTileProto:function(){var t=this._canvasProto=e.DomUtil.create("canvas","leaflet-tile");t.width=t.height=this.options.tileSize},_createTile:function(){var t=this._canvasProto.cloneNode(!1);return t.onselectstart=t.onmousemove=e.Util.falseFn,t},_loadTile:function(t,i){t._layer=this,t._tilePoint=i,this._redrawTile(t),this.options.async||this.tileDrawn(t)},drawTile:function(){},tileDrawn:function(t){this._tileOnLoad.call(t)}}),e.tileLayer.canvas=function(t){return new e.TileLayer.Canvas(t)},e.ImageOverlay=e.Class.extend({includes:e.Mixin.Events,options:{opacity:1},initialize:function(t,i,s){this._url=t,this._bounds=e.latLngBounds(i),e.setOptions(this,s)},onAdd:function(t){this._map=t,this._image||this._initImage(),t._panes.overlayPane.appendChild(this._image),t.on("viewreset",this._reset,this),t.options.zoomAnimation&&e.Browser.any3d&&t.on("zoomanim",this._animateZoom,this),this._reset()},onRemove:function(t){t.getPanes().overlayPane.removeChild(this._image),t.off("viewreset",this._reset,this),t.options.zoomAnimation&&t.off("zoomanim",this._animateZoom,this)},addTo:function(t){return t.addLayer(this),this},setOpacity:function(t){return this.options.opacity=t,this._updateOpacity(),this},bringToFront:function(){return this._image&&this._map._panes.overlayPane.appendChild(this._image),this},bringToBack:function(){var t=this._map._panes.overlayPane;return this._image&&t.insertBefore(this._image,t.firstChild),this},_initImage:function(){this._image=e.DomUtil.create("img","leaflet-image-layer"),this._map.options.zoomAnimation&&e.Browser.any3d?e.DomUtil.addClass(this._image,"leaflet-zoom-animated"):e.DomUtil.addClass(this._image,"leaflet-zoom-hide"),this._updateOpacity(),e.extend(this._image,{galleryimg:"no",onselectstart:e.Util.falseFn,onmousemove:e.Util.falseFn,onload:e.bind(this._onImageLoad,this),src:this._url})},_animateZoom:function(t){var i=this._map,s=this._image,o=i.getZoomScale(t.zoom),n=this._bounds.getNorthWest(),a=this._bounds.getSouthEast(),r=i._latLngToNewLayerPoint(n,t.zoom,t.center),h=i._latLngToNewLayerPoint(a,t.zoom,t.center)._subtract(r),l=r._add(h._multiplyBy(.5*(1-1/o)));s.style[e.DomUtil.TRANSFORM]=e.DomUtil.getTranslateString(l)+" scale("+o+") "},_reset:function(){var t=this._image,i=this._map.latLngToLayerPoint(this._bounds.getNorthWest()),s=this._map.latLngToLayerPoint(this._bounds.getSouthEast())._subtract(i);e.DomUtil.setPosition(t,i),t.style.width=s.x+"px",t.style.height=s.y+"px"},_onImageLoad:function(){this.fire("load")},_updateOpacity:function(){e.DomUtil.setOpacity(this._image,this.options.opacity)}}),e.imageOverlay=function(t,i,s){return new e.ImageOverlay(t,i,s)},e.Icon=e.Class.extend({options:{className:""},initialize:function(t){e.setOptions(this,t)},createIcon:function(){return this._createIcon("icon")},createShadow:function(){return this._createIcon("shadow")},_createIcon:function(t){var i=this._getIconUrl(t);if(!i){if("icon"===t)throw Error("iconUrl not set in Icon options (see the docs).");return null}var s=this._createImg(i);return this._setIconStyles(s,t),s},_setIconStyles:function(t,i){var s,o=this.options,n=e.point(o[i+"Size"]);s="shadow"===i?e.point(o.shadowAnchor||o.iconAnchor):e.point(o.iconAnchor),!s&&n&&(s=n.divideBy(2,!0)),t.className="leaflet-marker-"+i+" "+o.className,s&&(t.style.marginLeft=-s.x+"px",t.style.marginTop=-s.y+"px"),n&&(t.style.width=n.x+"px",t.style.height=n.y+"px")},_createImg:function(t){var s;return e.Browser.ie6?(s=i.createElement("div"),s.style.filter='progid:DXImageTransform.Microsoft.AlphaImageLoader(src="'+t+'")'):(s=i.createElement("img"),s.src=t),s},_getIconUrl:function(t){return e.Browser.retina&&this.options[t+"RetinaUrl"]?this.options[t+"RetinaUrl"]:this.options[t+"Url"]}}),e.icon=function(t){return new e.Icon(t)},e.Icon.Default=e.Icon.extend({options:{iconSize:new e.Point(25,41),iconAnchor:new e.Point(12,41),popupAnchor:new e.Point(1,-34),shadowSize:new e.Point(41,41)},_getIconUrl:function(t){var i=t+"Url";if(this.options[i])return this.options[i];e.Browser.retina&&"icon"===t&&(t+="@2x");var s=e.Icon.Default.imagePath;if(!s)throw Error("Couldn't autodetect L.Icon.Default.imagePath, set it manually.");return"marker-"+t+".png"}}),e.Icon.Default.imagePath=function(){var t,s,e,o,n=i.getElementsByTagName("script"),a=/\/?leaflet[\-\._]?([\w\-\._]*)\.js\??/;for(t=0,s=n.length;s>t;t++)if(e=n[t].src,o=e.match(a))return e.split(a)[0]+""}(),e.Marker=e.Class.extend({includes:e.Mixin.Events,options:{icon:new e.Icon.Default,title:"",clickable:!0,draggable:!1,zIndexOffset:0,opacity:1,riseOnHover:!1,riseOffset:250},initialize:function(t,i){e.setOptions(this,i),this._latlng=e.latLng(t)},onAdd:function(t){this._map=t,t.on("viewreset",this.update,this),this._initIcon(),this.update(),t.options.zoomAnimation&&t.options.markerZoomAnimation&&t.on("zoomanim",this._animateZoom,this)},addTo:function(t){return t.addLayer(this),this},onRemove:function(t){this._removeIcon(),this.fire("remove"),t.off({viewreset:this.update,zoomanim:this._animateZoom},this),this._map=null},getLatLng:function(){return this._latlng},setLatLng:function(t){return this._latlng=e.latLng(t),this.update(),this.fire("move",{latlng:this._latlng})},setZIndexOffset:function(t){return this.options.zIndexOffset=t,this.update(),this},setIcon:function(t){return this._map&&this._removeIcon(),this.options.icon=t,this._map&&(this._initIcon(),this.update()),this},update:function(){if(this._icon){var t=this._map.latLngToLayerPoint(this._latlng).round();this._setPos(t)}return this},_initIcon:function(){var t=this.options,i=this._map,s=i.options.zoomAnimation&&i.options.markerZoomAnimation,o=s?"leaflet-zoom-animated":"leaflet-zoom-hide",n=!1;this._icon||(this._icon=t.icon.createIcon(),t.title&&(this._icon.title=t.title),this._initInteraction(),n=1>this.options.opacity,e.DomUtil.addClass(this._icon,o),t.riseOnHover&&e.DomEvent.on(this._icon,"mouseover",this._bringToFront,this).on(this._icon,"mouseout",this._resetZIndex,this)),this._shadow||(this._shadow=t.icon.createShadow(),this._shadow&&(e.DomUtil.addClass(this._shadow,o),n=1>this.options.opacity)),n&&this._updateOpacity();var a=this._map._panes;a.markerPane.appendChild(this._icon),this._shadow&&a.shadowPane.appendChild(this._shadow)},_removeIcon:function(){var t=this._map._panes;this.options.riseOnHover&&e.DomEvent.off(this._icon,"mouseover",this._bringToFront).off(this._icon,"mouseout",this._resetZIndex),t.markerPane.removeChild(this._icon),this._shadow&&t.shadowPane.removeChild(this._shadow),this._icon=this._shadow=null},_setPos:function(t){e.DomUtil.setPosition(this._icon,t),this._shadow&&e.DomUtil.setPosition(this._shadow,t),this._zIndex=t.y+this.options.zIndexOffset,this._resetZIndex()},_updateZIndex:function(t){this._icon.style.zIndex=this._zIndex+t},_animateZoom:function(t){var i=this._map._latLngToNewLayerPoint(this._latlng,t.zoom,t.center);this._setPos(i)},_initInteraction:function(){if(this.options.clickable){var t=this._icon,i=["dblclick","mousedown","mouseover","mouseout","contextmenu"];e.DomUtil.addClass(t,"leaflet-clickable"),e.DomEvent.on(t,"click",this._onMouseClick,this);for(var s=0;i.length>s;s++)e.DomEvent.on(t,i[s],this._fireMouseEvent,this);e.Handler.MarkerDrag&&(this.dragging=new e.Handler.MarkerDrag(this),this.options.draggable&&this.dragging.enable())}},_onMouseClick:function(t){var i=this.dragging&&this.dragging.moved();(this.hasEventListeners(t.type)||i)&&e.DomEvent.stopPropagation(t),i||(this.dragging&&this.dragging._enabled||!this._map.dragging||!this._map.dragging.moved())&&this.fire(t.type,{originalEvent:t})},_fireMouseEvent:function(t){this.fire(t.type,{originalEvent:t}),"contextmenu"===t.type&&this.hasEventListeners(t.type)&&e.DomEvent.preventDefault(t),"mousedown"!==t.type&&e.DomEvent.stopPropagation(t)},setOpacity:function(t){this.options.opacity=t,this._map&&this._updateOpacity()},_updateOpacity:function(){e.DomUtil.setOpacity(this._icon,this.options.opacity),this._shadow&&e.DomUtil.setOpacity(this._shadow,this.options.opacity)},_bringToFront:function(){this._updateZIndex(this.options.riseOffset)},_resetZIndex:function(){this._updateZIndex(0)}}),e.marker=function(t,i){return new e.Marker(t,i)},e.DivIcon=e.Icon.extend({options:{iconSize:new e.Point(12,12),className:"leaflet-div-icon"},createIcon:function(){var t=i.createElement("div"),s=this.options;return s.html&&(t.innerHTML=s.html),s.bgPos&&(t.style.backgroundPosition=-s.bgPos.x+"px "+-s.bgPos.y+"px"),this._setIconStyles(t,"icon"),t},createShadow:function(){return null}}),e.divIcon=function(t){return new e.DivIcon(t)},e.Map.mergeOptions({closePopupOnClick:!0}),e.Popup=e.Class.extend({includes:e.Mixin.Events,options:{minWidth:50,maxWidth:300,maxHeight:null,autoPan:!0,closeButton:!0,offset:new e.Point(0,6),autoPanPadding:new e.Point(5,5),className:"",zoomAnimation:!0},initialize:function(t,i){e.setOptions(this,t),this._source=i,this._animated=e.Browser.any3d&&this.options.zoomAnimation},onAdd:function(t){this._map=t,this._container||this._initLayout(),this._updateContent();var i=t.options.fadeAnimation;i&&e.DomUtil.setOpacity(this._container,0),t._panes.popupPane.appendChild(this._container),t.on("viewreset",this._updatePosition,this),this._animated&&t.on("zoomanim",this._zoomAnimation,this),t.options.closePopupOnClick&&t.on("preclick",this._close,this),this._update(),i&&e.DomUtil.setOpacity(this._container,1)},addTo:function(t){return t.addLayer(this),this},openOn:function(t){return t.openPopup(this),this},onRemove:function(t){t._panes.popupPane.removeChild(this._container),e.Util.falseFn(this._container.offsetWidth),t.off({viewreset:this._updatePosition,preclick:this._close,zoomanim:this._zoomAnimation},this),t.options.fadeAnimation&&e.DomUtil.setOpacity(this._container,0),this._map=null},setLatLng:function(t){return this._latlng=e.latLng(t),this._update(),this},setContent:function(t){return this._content=t,this._update(),this},_close:function(){var t=this._map;t&&(t._popup=null,t.removeLayer(this).fire("popupclose",{popup:this}))},_initLayout:function(){var t,i="leaflet-popup",s=i+" "+this.options.className+" leaflet-zoom-"+(this._animated?"animated":"hide"),o=this._container=e.DomUtil.create("div",s);this.options.closeButton&&(t=this._closeButton=e.DomUtil.create("a",i+"-close-button",o),t.href="#close",t.innerHTML="×",e.DomEvent.on(t,"click",this._onCloseButtonClick,this));var n=this._wrapper=e.DomUtil.create("div",i+"-content-wrapper",o);e.DomEvent.disableClickPropagation(n),this._contentNode=e.DomUtil.create("div",i+"-content",n),e.DomEvent.on(this._contentNode,"mousewheel",e.DomEvent.stopPropagation),this._tipContainer=e.DomUtil.create("div",i+"-tip-container",o),this._tip=e.DomUtil.create("div",i+"-tip",this._tipContainer)},_update:function(){this._map&&(this._container.style.visibility="hidden",this._updateContent(),this._updateLayout(),this._updatePosition(),this._container.style.visibility="",this._adjustPan())},_updateContent:function(){if(this._content){if("string"==typeof this._content)this._contentNode.innerHTML=this._content;else{for(;this._contentNode.hasChildNodes();)this._contentNode.removeChild(this._contentNode.firstChild);this._contentNode.appendChild(this._content)}this.fire("contentupdate")}},_updateLayout:function(){var t=this._contentNode,i=t.style;i.width="",i.whiteSpace="nowrap";var s=t.offsetWidth;s=Math.min(s,this.options.maxWidth),s=Math.max(s,this.options.minWidth),i.width=s+1+"px",i.whiteSpace="",i.height="";var o=t.offsetHeight,n=this.options.maxHeight,a="leaflet-popup-scrolled";n&&o>n?(i.height=n+"px",e.DomUtil.addClass(t,a)):e.DomUtil.removeClass(t,a),this._containerWidth=this._container.offsetWidth},_updatePosition:function(){if(this._map){var t=this._map.latLngToLayerPoint(this._latlng),i=this._animated,s=this.options.offset;i&&e.DomUtil.setPosition(this._container,t),this._containerBottom=-s.y-(i?0:t.y),this._containerLeft=-Math.round(this._containerWidth/2)+s.x+(i?0:t.x),this._container.style.bottom=this._containerBottom+"px",this._container.style.left=this._containerLeft+"px"}},_zoomAnimation:function(t){var i=this._map._latLngToNewLayerPoint(this._latlng,t.zoom,t.center);e.DomUtil.setPosition(this._container,i)},_adjustPan:function(){if(this.options.autoPan){var t=this._map,i=this._container.offsetHeight,s=this._containerWidth,o=new e.Point(this._containerLeft,-i-this._containerBottom);this._animated&&o._add(e.DomUtil.getPosition(this._container));var n=t.layerPointToContainerPoint(o),a=this.options.autoPanPadding,r=t.getSize(),h=0,l=0;0>n.x&&(h=n.x-a.x),n.x+s>r.x&&(h=n.x+s-r.x+a.x),0>n.y&&(l=n.y-a.y),n.y+i>r.y&&(l=n.y+i-r.y+a.y),(h||l)&&t.panBy(new e.Point(h,l))}},_onCloseButtonClick:function(t){this._close(),e.DomEvent.stop(t)}}),e.popup=function(t,i){return new e.Popup(t,i)},e.Marker.include({openPopup:function(){return this._popup&&this._map&&(this._popup.setLatLng(this._latlng),this._map.openPopup(this._popup)),this},closePopup:function(){return this._popup&&this._popup._close(),this},bindPopup:function(t,i){var s=e.point(this.options.icon.options.popupAnchor)||new e.Point(0,0);return s=s.add(e.Popup.prototype.options.offset),i&&i.offset&&(s=s.add(i.offset)),i=e.extend({offset:s},i),this._popup||this.on("click",this.openPopup,this).on("remove",this.closePopup,this).on("move",this._movePopup,this),this._popup=new e.Popup(i,this).setContent(t),this},unbindPopup:function(){return this._popup&&(this._popup=null,this.off("click",this.openPopup).off("remove",this.closePopup).off("move",this._movePopup)),this},_movePopup:function(t){this._popup.setLatLng(t.latlng)}}),e.Map.include({openPopup:function(t){return this.closePopup(),this._popup=t,this.addLayer(t).fire("popupopen",{popup:this._popup})},closePopup:function(){return this._popup&&this._popup._close(),this}}),e.LayerGroup=e.Class.extend({initialize:function(t){this._layers={};var i,s;if(t)for(i=0,s=t.length;s>i;i++)this.addLayer(t[i])},addLayer:function(t){var i=e.stamp(t);return this._layers[i]=t,this._map&&this._map.addLayer(t),this},removeLayer:function(t){var i=e.stamp(t);return delete this._layers[i],this._map&&this._map.removeLayer(t),this},clearLayers:function(){return this.eachLayer(this.removeLayer,this),this},invoke:function(t){var i,s,e=Array.prototype.slice.call(arguments,1);for(i in this._layers)this._layers.hasOwnProperty(i)&&(s=this._layers[i],s[t]&&s[t].apply(s,e));return this},onAdd:function(t){this._map=t,this.eachLayer(t.addLayer,t)},onRemove:function(t){this.eachLayer(t.removeLayer,t),this._map=null},addTo:function(t){return t.addLayer(this),this},eachLayer:function(t,i){for(var s in this._layers)this._layers.hasOwnProperty(s)&&t.call(i,this._layers[s])},setZIndex:function(t){return this.invoke("setZIndex",t)}}),e.layerGroup=function(t){return new e.LayerGroup(t)},e.FeatureGroup=e.LayerGroup.extend({includes:e.Mixin.Events,statics:{EVENTS:"click dblclick mouseover mouseout mousemove contextmenu"},addLayer:function(t){return this._layers[e.stamp(t)]?this:(t.on(e.FeatureGroup.EVENTS,this._propagateEvent,this),e.LayerGroup.prototype.addLayer.call(this,t),this._popupContent&&t.bindPopup&&t.bindPopup(this._popupContent,this._popupOptions),this.fire("layeradd",{layer:t}))},removeLayer:function(t){return t.off(e.FeatureGroup.EVENTS,this._propagateEvent,this),e.LayerGroup.prototype.removeLayer.call(this,t),this._popupContent&&this.invoke("unbindPopup"),this.fire("layerremove",{layer:t})},bindPopup:function(t,i){return this._popupContent=t,this._popupOptions=i,this.invoke("bindPopup",t,i)},setStyle:function(t){return this.invoke("setStyle",t)},bringToFront:function(){return this.invoke("bringToFront")},bringToBack:function(){return this.invoke("bringToBack")},getBounds:function(){var t=new e.LatLngBounds;return this.eachLayer(function(i){t.extend(i instanceof e.Marker?i.getLatLng():i.getBounds())}),t},_propagateEvent:function(t){t.layer=t.target,t.target=this,this.fire(t.type,t)}}),e.featureGroup=function(t){return new e.FeatureGroup(t)},e.Path=e.Class.extend({includes:[e.Mixin.Events],statics:{CLIP_PADDING:e.Browser.mobile?Math.max(0,Math.min(.5,(1280/Math.max(t.innerWidth,t.innerHeight)-1)/2)):.5},options:{stroke:!0,color:"#0033ff",dashArray:null,weight:5,opacity:.5,fill:!1,fillColor:null,fillOpacity:.2,clickable:!0},initialize:function(t){e.setOptions(this,t)},onAdd:function(t){this._map=t,this._container||(this._initElements(),this._initEvents()),this.projectLatlngs(),this._updatePath(),this._container&&this._map._pathRoot.appendChild(this._container),this.fire("add"),t.on({viewreset:this.projectLatlngs,moveend:this._updatePath},this)},addTo:function(t){return t.addLayer(this),this},onRemove:function(t){t._pathRoot.removeChild(this._container),this.fire("remove"),this._map=null,e.Browser.vml&&(this._container=null,this._stroke=null,this._fill=null),t.off({viewreset:this.projectLatlngs,moveend:this._updatePath},this)},projectLatlngs:function(){},setStyle:function(t){return e.setOptions(this,t),this._container&&this._updateStyle(),this},redraw:function(){return this._map&&(this.projectLatlngs(),this._updatePath()),this}}),e.Map.include({_updatePathViewport:function(){var t=e.Path.CLIP_PADDING,i=this.getSize(),s=e.DomUtil.getPosition(this._mapPane),o=s.multiplyBy(-1)._subtract(i.multiplyBy(t)._round()),n=o.add(i.multiplyBy(1+2*t)._round());this._pathViewport=new e.Bounds(o,n)}}),e.Path.SVG_NS="http://www.w3.org/2000/svg",e.Browser.svg=!(!i.createElementNS||!i.createElementNS(e.Path.SVG_NS,"svg").createSVGRect),e.Path=e.Path.extend({statics:{SVG:e.Browser.svg},bringToFront:function(){var t=this._map._pathRoot,i=this._container;return i&&t.lastChild!==i&&t.appendChild(i),this},bringToBack:function(){var t=this._map._pathRoot,i=this._container,s=t.firstChild;return i&&s!==i&&t.insertBefore(i,s),this},getPathString:function(){},_createElement:function(t){return i.createElementNS(e.Path.SVG_NS,t)},_initElements:function(){this._map._initPathRoot(),this._initPath(),this._initStyle()},_initPath:function(){this._container=this._createElement("g"),this._path=this._createElement("path"),this._container.appendChild(this._path)},_initStyle:function(){this.options.stroke&&(this._path.setAttribute("stroke-linejoin","round"),this._path.setAttribute("stroke-linecap","round")),this.options.fill&&this._path.setAttribute("fill-rule","evenodd"),this._updateStyle()},_updateStyle:function(){this.options.stroke?(this._path.setAttribute("stroke",this.options.color),this._path.setAttribute("stroke-opacity",this.options.opacity),this._path.setAttribute("stroke-width",this.options.weight),this.options.dashArray?this._path.setAttribute("stroke-dasharray",this.options.dashArray):this._path.removeAttribute("stroke-dasharray")):this._path.setAttribute("stroke","none"),this.options.fill?(this._path.setAttribute("fill",this.options.fillColor||this.options.color),this._path.setAttribute("fill-opacity",this.options.fillOpacity)):this._path.setAttribute("fill","none")},_updatePath:function(){var t=this.getPathString();t||(t="M0 0"),this._path.setAttribute("d",t)},_initEvents:function(){if(this.options.clickable){(e.Browser.svg||!e.Browser.vml)&&this._path.setAttribute("class","leaflet-clickable"),e.DomEvent.on(this._container,"click",this._onMouseClick,this);for(var t=["dblclick","mousedown","mouseover","mouseout","mousemove","contextmenu"],i=0;t.length>i;i++)e.DomEvent.on(this._container,t[i],this._fireMouseEvent,this)}},_onMouseClick:function(t){this._map.dragging&&this._map.dragging.moved()||this._fireMouseEvent(t)},_fireMouseEvent:function(t){if(this.hasEventListeners(t.type)){var i=this._map,s=i.mouseEventToContainerPoint(t),o=i.containerPointToLayerPoint(s),n=i.layerPointToLatLng(o);this.fire(t.type,{latlng:n,layerPoint:o,containerPoint:s,originalEvent:t}),"contextmenu"===t.type&&e.DomEvent.preventDefault(t),"mousemove"!==t.type&&e.DomEvent.stopPropagation(t)}}}),e.Map.include({_initPathRoot:function(){this._pathRoot||(this._pathRoot=e.Path.prototype._createElement("svg"),this._panes.overlayPane.appendChild(this._pathRoot),this.options.zoomAnimation&&e.Browser.any3d?(this._pathRoot.setAttribute("class"," leaflet-zoom-animated"),this.on({zoomanim:this._animatePathZoom,zoomend:this._endPathZoom})):this._pathRoot.setAttribute("class"," leaflet-zoom-hide"),this.on("moveend",this._updateSvgViewport),this._updateSvgViewport())},_animatePathZoom:function(t){var i=this.getZoomScale(t.zoom),s=this._getCenterOffset(t.center)._multiplyBy(-i)._add(this._pathViewport.min);this._pathRoot.style[e.DomUtil.TRANSFORM]=e.DomUtil.getTranslateString(s)+" scale("+i+") ",this._pathZooming=!0},_endPathZoom:function(){this._pathZooming=!1},_updateSvgViewport:function(){if(!this._pathZooming){this._updatePathViewport();var t=this._pathViewport,i=t.min,s=t.max,o=s.x-i.x,n=s.y-i.y,a=this._pathRoot,r=this._panes.overlayPane;e.Browser.mobileWebkit&&r.removeChild(a),e.DomUtil.setPosition(a,i),a.setAttribute("width",o),a.setAttribute("height",n),a.setAttribute("viewBox",[i.x,i.y,o,n].join(" ")),e.Browser.mobileWebkit&&r.appendChild(a)}}}),e.Path.include({bindPopup:function(t,i){return(!this._popup||i)&&(this._popup=new e.Popup(i,this)),this._popup.setContent(t),this._popupHandlersAdded||(this.on("click",this._openPopup,this).on("remove",this.closePopup,this),this._popupHandlersAdded=!0),this},unbindPopup:function(){return this._popup&&(this._popup=null,this.off("click",this._openPopup).off("remove",this.closePopup),this._popupHandlersAdded=!1),this},openPopup:function(t){return this._popup&&(t=t||this._latlng||this._latlngs[Math.floor(this._latlngs.length/2)],this._openPopup({latlng:t})),this},closePopup:function(){return this._popup&&this._popup._close(),this},_openPopup:function(t){this._popup.setLatLng(t.latlng),this._map.openPopup(this._popup)}}),e.Browser.vml=!e.Browser.svg&&function(){try{var t=i.createElement("div");t.innerHTML='';var s=t.firstChild;return s.style.behavior="url(#default#VML)",s&&"object"==typeof s.adj}catch(e){return!1}}(),e.Path=e.Browser.svg||!e.Browser.vml?e.Path:e.Path.extend({statics:{VML:!0,CLIP_PADDING:.02},_createElement:function(){try{return i.namespaces.add("lvml","urn:schemas-microsoft-com:vml"),function(t){return i.createElement("')}}catch(t){return function(t){return i.createElement("<"+t+' xmlns="urn:schemas-microsoft.com:vml" class="lvml">')}}}(),_initPath:function(){var t=this._container=this._createElement("shape");e.DomUtil.addClass(t,"leaflet-vml-shape"),this.options.clickable&&e.DomUtil.addClass(t,"leaflet-clickable"),t.coordsize="1 1",this._path=this._createElement("path"),t.appendChild(this._path),this._map._pathRoot.appendChild(t)},_initStyle:function(){this._updateStyle()},_updateStyle:function(){var t=this._stroke,i=this._fill,s=this.options,e=this._container;e.stroked=s.stroke,e.filled=s.fill,s.stroke?(t||(t=this._stroke=this._createElement("stroke"),t.endcap="round",e.appendChild(t)),t.weight=s.weight+"px",t.color=s.color,t.opacity=s.opacity,t.dashStyle=s.dashArray?s.dashArray instanceof Array?s.dashArray.join(" "):s.dashArray.replace(/ *, */g," "):""):t&&(e.removeChild(t),this._stroke=null),s.fill?(i||(i=this._fill=this._createElement("fill"),e.appendChild(i)),i.color=s.fillColor||s.color,i.opacity=s.fillOpacity):i&&(e.removeChild(i),this._fill=null)},_updatePath:function(){var t=this._container.style;t.display="none",this._path.v=this.getPathString()+" ",t.display=""}}),e.Map.include(e.Browser.svg||!e.Browser.vml?{}:{_initPathRoot:function(){if(!this._pathRoot){var t=this._pathRoot=i.createElement("div");t.className="leaflet-vml-container",this._panes.overlayPane.appendChild(t),this.on("moveend",this._updatePathViewport),this._updatePathViewport()}}}),e.Browser.canvas=function(){return!!i.createElement("canvas").getContext}(),e.Path=e.Path.SVG&&!t.L_PREFER_CANVAS||!e.Browser.canvas?e.Path:e.Path.extend({statics:{CANVAS:!0,SVG:!1},redraw:function(){return this._map&&(this.projectLatlngs(),this._requestUpdate()),this},setStyle:function(t){return e.setOptions(this,t),this._map&&(this._updateStyle(),this._requestUpdate()),this},onRemove:function(t){t.off("viewreset",this.projectLatlngs,this).off("moveend",this._updatePath,this),this.options.clickable&&this._map.off("click",this._onClick,this),this._requestUpdate(),this._map=null},_requestUpdate:function(){this._map&&!e.Path._updateRequest&&(e.Path._updateRequest=e.Util.requestAnimFrame(this._fireMapMoveEnd,this._map))},_fireMapMoveEnd:function(){e.Path._updateRequest=null,this.fire("moveend")},_initElements:function(){this._map._initPathRoot(),this._ctx=this._map._canvasCtx},_updateStyle:function(){var t=this.options;t.stroke&&(this._ctx.lineWidth=t.weight,this._ctx.strokeStyle=t.color),t.fill&&(this._ctx.fillStyle=t.fillColor||t.color)},_drawPath:function(){var t,i,s,o,n,a;for(this._ctx.beginPath(),t=0,s=this._parts.length;s>t;t++){for(i=0,o=this._parts[t].length;o>i;i++)n=this._parts[t][i],a=(0===i?"move":"line")+"To",this._ctx[a](n.x,n.y);this instanceof e.Polygon&&this._ctx.closePath()}},_checkIfEmpty:function(){return!this._parts.length},_updatePath:function(){if(!this._checkIfEmpty()){var t=this._ctx,i=this.options;this._drawPath(),t.save(),this._updateStyle(),i.fill&&(t.globalAlpha=i.fillOpacity,t.fill()),i.stroke&&(t.globalAlpha=i.opacity,t.stroke()),t.restore()}},_initEvents:function(){this.options.clickable&&this._map.on("click",this._onClick,this)},_onClick:function(t){this._containsPoint(t.layerPoint)&&this.fire("click",{latlng:t.latlng,layerPoint:t.layerPoint,containerPoint:t.containerPoint,originalEvent:t})}}),e.Map.include(e.Path.SVG&&!t.L_PREFER_CANVAS||!e.Browser.canvas?{}:{_initPathRoot:function(){var t,s=this._pathRoot;s||(s=this._pathRoot=i.createElement("canvas"),s.style.position="absolute",t=this._canvasCtx=s.getContext("2d"),t.lineCap="round",t.lineJoin="round",this._panes.overlayPane.appendChild(s),this.options.zoomAnimation&&(this._pathRoot.className="leaflet-zoom-animated",this.on("zoomanim",this._animatePathZoom),this.on("zoomend",this._endPathZoom)),this.on("moveend",this._updateCanvasViewport),this._updateCanvasViewport())},_updateCanvasViewport:function(){if(!this._pathZooming){this._updatePathViewport();var t=this._pathViewport,i=t.min,s=t.max.subtract(i),o=this._pathRoot;e.DomUtil.setPosition(o,i),o.width=s.x,o.height=s.y,o.getContext("2d").translate(-i.x,-i.y)}}}),e.LineUtil={simplify:function(t,i){if(!i||!t.length)return t.slice();var s=i*i;return t=this._reducePoints(t,s),t=this._simplifyDP(t,s)},pointToSegmentDistance:function(t,i,s){return Math.sqrt(this._sqClosestPointOnSegment(t,i,s,!0))},closestPointOnSegment:function(t,i,s){return this._sqClosestPointOnSegment(t,i,s)},_simplifyDP:function(t,i){var e=t.length,o=typeof Uint8Array!=s+""?Uint8Array:Array,n=new o(e);n[0]=n[e-1]=1,this._simplifyDPStep(t,n,i,0,e-1);var a,r=[];for(a=0;e>a;a++)n[a]&&r.push(t[a]);return r},_simplifyDPStep:function(t,i,s,e,o){var n,a,r,h=0;for(a=e+1;o-1>=a;a++)r=this._sqClosestPointOnSegment(t[a],t[e],t[o],!0),r>h&&(n=a,h=r);h>s&&(i[n]=1,this._simplifyDPStep(t,i,s,e,n),this._simplifyDPStep(t,i,s,n,o))},_reducePoints:function(t,i){for(var s=[t[0]],e=1,o=0,n=t.length;n>e;e++)this._sqDist(t[e],t[o])>i&&(s.push(t[e]),o=e);return n-1>o&&s.push(t[n-1]),s},clipSegment:function(t,i,s,e){var o,n,a,r=e?this._lastCode:this._getBitCode(t,s),h=this._getBitCode(i,s);for(this._lastCode=h;;){if(!(r|h))return[t,i];if(r&h)return!1;o=r||h,n=this._getEdgeIntersection(t,i,o,s),a=this._getBitCode(n,s),o===r?(t=n,r=a):(i=n,h=a)}},_getEdgeIntersection:function(t,i,o,n){var a=i.x-t.x,r=i.y-t.y,h=n.min,l=n.max;return 8&o?new e.Point(t.x+a*(l.y-t.y)/r,l.y):4&o?new e.Point(t.x+a*(h.y-t.y)/r,h.y):2&o?new e.Point(l.x,t.y+r*(l.x-t.x)/a):1&o?new e.Point(h.x,t.y+r*(h.x-t.x)/a):s},_getBitCode:function(t,i){var s=0;return t.xi.max.x&&(s|=2),t.yi.max.y&&(s|=8),s},_sqDist:function(t,i){var s=i.x-t.x,e=i.y-t.y;return s*s+e*e},_sqClosestPointOnSegment:function(t,i,s,o){var n,a=i.x,r=i.y,h=s.x-a,l=s.y-r,c=h*h+l*l;return c>0&&(n=((t.x-a)*h+(t.y-r)*l)/c, -n>1?(a=s.x,r=s.y):n>0&&(a+=h*n,r+=l*n)),h=t.x-a,l=t.y-r,o?h*h+l*l:new e.Point(a,r)}},e.Polyline=e.Path.extend({initialize:function(t,i){e.Path.prototype.initialize.call(this,i),this._latlngs=this._convertLatLngs(t)},options:{smoothFactor:1,noClip:!1},projectLatlngs:function(){this._originalPoints=[];for(var t=0,i=this._latlngs.length;i>t;t++)this._originalPoints[t]=this._map.latLngToLayerPoint(this._latlngs[t])},getPathString:function(){for(var t=0,i=this._parts.length,s="";i>t;t++)s+=this._getPathPartStr(this._parts[t]);return s},getLatLngs:function(){return this._latlngs},setLatLngs:function(t){return this._latlngs=this._convertLatLngs(t),this.redraw()},addLatLng:function(t){return this._latlngs.push(e.latLng(t)),this.redraw()},spliceLatLngs:function(){var t=[].splice.apply(this._latlngs,arguments);return this._convertLatLngs(this._latlngs),this.redraw(),t},closestLayerPoint:function(t){for(var i,s,o=1/0,n=this._parts,a=null,r=0,h=n.length;h>r;r++)for(var l=n[r],c=1,m=l.length;m>c;c++){i=l[c-1],s=l[c];var u=e.LineUtil._sqClosestPointOnSegment(t,i,s,!0);o>u&&(o=u,a=e.LineUtil._sqClosestPointOnSegment(t,i,s))}return a&&(a.distance=Math.sqrt(o)),a},getBounds:function(){var t,i,s=new e.LatLngBounds,o=this.getLatLngs();for(t=0,i=o.length;i>t;t++)s.extend(o[t]);return s},_convertLatLngs:function(t){var i,s;for(i=0,s=t.length;s>i;i++){if(e.Util.isArray(t[i])&&"number"!=typeof t[i][0])return;t[i]=e.latLng(t[i])}return t},_initEvents:function(){e.Path.prototype._initEvents.call(this)},_getPathPartStr:function(t){for(var i,s=e.Path.VML,o=0,n=t.length,a="";n>o;o++)i=t[o],s&&i._round(),a+=(o?"L":"M")+i.x+" "+i.y;return a},_clipPoints:function(){var t,i,o,n=this._originalPoints,a=n.length;if(this.options.noClip)return this._parts=[n],s;this._parts=[];var r=this._parts,h=this._map._pathViewport,l=e.LineUtil;for(t=0,i=0;a-1>t;t++)o=l.clipSegment(n[t],n[t+1],h,t),o&&(r[i]=r[i]||[],r[i].push(o[0]),(o[1]!==n[t+1]||t===a-2)&&(r[i].push(o[1]),i++))},_simplifyPoints:function(){for(var t=this._parts,i=e.LineUtil,s=0,o=t.length;o>s;s++)t[s]=i.simplify(t[s],this.options.smoothFactor)},_updatePath:function(){this._map&&(this._clipPoints(),this._simplifyPoints(),e.Path.prototype._updatePath.call(this))}}),e.polyline=function(t,i){return new e.Polyline(t,i)},e.PolyUtil={},e.PolyUtil.clipPolygon=function(t,i){var s,o,n,a,r,h,l,c,m,u=[1,4,2,8],d=e.LineUtil;for(o=0,l=t.length;l>o;o++)t[o]._code=d._getBitCode(t[o],i);for(a=0;4>a;a++){for(c=u[a],s=[],o=0,l=t.length,n=l-1;l>o;n=o++)r=t[o],h=t[n],r._code&c?h._code&c||(m=d._getEdgeIntersection(h,r,c,i),m._code=d._getBitCode(m,i),s.push(m)):(h._code&c&&(m=d._getEdgeIntersection(h,r,c,i),m._code=d._getBitCode(m,i),s.push(m)),s.push(r));t=s}return t},e.Polygon=e.Polyline.extend({options:{fill:!0},initialize:function(t,i){e.Polyline.prototype.initialize.call(this,t,i),t&&e.Util.isArray(t[0])&&"number"!=typeof t[0][0]&&(this._latlngs=this._convertLatLngs(t[0]),this._holes=t.slice(1))},projectLatlngs:function(){if(e.Polyline.prototype.projectLatlngs.call(this),this._holePoints=[],this._holes){var t,i,s,o;for(t=0,s=this._holes.length;s>t;t++)for(this._holePoints[t]=[],i=0,o=this._holes[t].length;o>i;i++)this._holePoints[t][i]=this._map.latLngToLayerPoint(this._holes[t][i])}},_clipPoints:function(){var t=this._originalPoints,i=[];if(this._parts=[t].concat(this._holePoints),!this.options.noClip){for(var s=0,o=this._parts.length;o>s;s++){var n=e.PolyUtil.clipPolygon(this._parts[s],this._map._pathViewport);n.length&&i.push(n)}this._parts=i}},_getPathPartStr:function(t){var i=e.Polyline.prototype._getPathPartStr.call(this,t);return i+(e.Browser.svg?"z":"x")}}),e.polygon=function(t,i){return new e.Polygon(t,i)},function(){function t(t){return e.FeatureGroup.extend({initialize:function(t,i){this._layers={},this._options=i,this.setLatLngs(t)},setLatLngs:function(i){var s=0,e=i.length;for(this.eachLayer(function(t){e>s?t.setLatLngs(i[s++]):this.removeLayer(t)},this);e>s;)this.addLayer(new t(i[s++],this._options));return this}})}e.MultiPolyline=t(e.Polyline),e.MultiPolygon=t(e.Polygon),e.multiPolyline=function(t,i){return new e.MultiPolyline(t,i)},e.multiPolygon=function(t,i){return new e.MultiPolygon(t,i)}}(),e.Rectangle=e.Polygon.extend({initialize:function(t,i){e.Polygon.prototype.initialize.call(this,this._boundsToLatLngs(t),i)},setBounds:function(t){this.setLatLngs(this._boundsToLatLngs(t))},_boundsToLatLngs:function(t){return t=e.latLngBounds(t),[t.getSouthWest(),t.getNorthWest(),t.getNorthEast(),t.getSouthEast()]}}),e.rectangle=function(t,i){return new e.Rectangle(t,i)},e.Circle=e.Path.extend({initialize:function(t,i,s){e.Path.prototype.initialize.call(this,s),this._latlng=e.latLng(t),this._mRadius=i},options:{fill:!0},setLatLng:function(t){return this._latlng=e.latLng(t),this.redraw()},setRadius:function(t){return this._mRadius=t,this.redraw()},projectLatlngs:function(){var t=this._getLngRadius(),i=new e.LatLng(this._latlng.lat,this._latlng.lng-t),s=this._map.latLngToLayerPoint(i);this._point=this._map.latLngToLayerPoint(this._latlng),this._radius=Math.max(Math.round(this._point.x-s.x),1)},getBounds:function(){var t=this._getLngRadius(),i=360*(this._mRadius/40075017),s=this._latlng,o=new e.LatLng(s.lat-i,s.lng-t),n=new e.LatLng(s.lat+i,s.lng+t);return new e.LatLngBounds(o,n)},getLatLng:function(){return this._latlng},getPathString:function(){var t=this._point,i=this._radius;return this._checkIfEmpty()?"":e.Browser.svg?"M"+t.x+","+(t.y-i)+"A"+i+","+i+",0,1,1,"+(t.x-.1)+","+(t.y-i)+" z":(t._round(),i=Math.round(i),"AL "+t.x+","+t.y+" "+i+","+i+" 0,"+23592600)},getRadius:function(){return this._mRadius},_getLatRadius:function(){return 360*(this._mRadius/40075017)},_getLngRadius:function(){return this._getLatRadius()/Math.cos(e.LatLng.DEG_TO_RAD*this._latlng.lat)},_checkIfEmpty:function(){if(!this._map)return!1;var t=this._map._pathViewport,i=this._radius,s=this._point;return s.x-i>t.max.x||s.y-i>t.max.y||s.x+is;s++)for(l=this._parts[s],o=0,r=l.length,n=r-1;r>o;n=o++)if((i||0!==o)&&(h=e.LineUtil.pointToSegmentDistance(t,l[n],l[o]),c>=h))return!0;return!1}}:{}),e.Polygon.include(e.Path.CANVAS?{_containsPoint:function(t){var i,s,o,n,a,r,h,l,c=!1;if(e.Polyline.prototype._containsPoint.call(this,t,!0))return!0;for(n=0,h=this._parts.length;h>n;n++)for(i=this._parts[n],a=0,l=i.length,r=l-1;l>a;r=a++)s=i[a],o=i[r],s.y>t.y!=o.y>t.y&&t.x<(o.x-s.x)*(t.y-s.y)/(o.y-s.y)+s.x&&(c=!c);return c}}:{}),e.Circle.include(e.Path.CANVAS?{_drawPath:function(){var t=this._point;this._ctx.beginPath(),this._ctx.arc(t.x,t.y,this._radius,0,2*Math.PI,!1)},_containsPoint:function(t){var i=this._point,s=this.options.stroke?this.options.weight/2:0;return t.distanceTo(i)<=this._radius+s}}:{}),e.GeoJSON=e.FeatureGroup.extend({initialize:function(t,i){e.setOptions(this,i),this._layers={},t&&this.addData(t)},addData:function(t){var i,s,o=e.Util.isArray(t)?t:t.features;if(o){for(i=0,s=o.length;s>i;i++)(o[i].geometries||o[i].geometry||o[i].features)&&this.addData(o[i]);return this}var n=this.options;if(!n.filter||n.filter(t)){var a=e.GeoJSON.geometryToLayer(t,n.pointToLayer);return a.feature=t,a.defaultOptions=a.options,this.resetStyle(a),n.onEachFeature&&n.onEachFeature(t,a),this.addLayer(a)}},resetStyle:function(t){var i=this.options.style;i&&(e.Util.extend(t.options,t.defaultOptions),this._setLayerStyle(t,i))},setStyle:function(t){this.eachLayer(function(i){this._setLayerStyle(i,t)},this)},_setLayerStyle:function(t,i){"function"==typeof i&&(i=i(t.feature)),t.setStyle&&t.setStyle(i)}}),e.extend(e.GeoJSON,{geometryToLayer:function(t,i){var s,o,n,a,r,h="Feature"===t.type?t.geometry:t,l=h.coordinates,c=[];switch(h.type){case"Point":return s=this.coordsToLatLng(l),i?i(t,s):new e.Marker(s);case"MultiPoint":for(n=0,a=l.length;a>n;n++)s=this.coordsToLatLng(l[n]),r=i?i(t,s):new e.Marker(s),c.push(r);return new e.FeatureGroup(c);case"LineString":return o=this.coordsToLatLngs(l),new e.Polyline(o);case"Polygon":return o=this.coordsToLatLngs(l,1),new e.Polygon(o);case"MultiLineString":return o=this.coordsToLatLngs(l,1),new e.MultiPolyline(o);case"MultiPolygon":return o=this.coordsToLatLngs(l,2),new e.MultiPolygon(o);case"GeometryCollection":for(n=0,a=h.geometries.length;a>n;n++)r=this.geometryToLayer({geometry:h.geometries[n],type:"Feature",properties:t.properties},i),c.push(r);return new e.FeatureGroup(c);default:throw Error("Invalid GeoJSON object.")}},coordsToLatLng:function(t,i){var s=parseFloat(t[i?0:1]),o=parseFloat(t[i?1:0]);return new e.LatLng(s,o)},coordsToLatLngs:function(t,i,s){var e,o,n,a=[];for(o=0,n=t.length;n>o;o++)e=i?this.coordsToLatLngs(t[o],i-1,s):this.coordsToLatLng(t[o],s),a.push(e);return a}}),e.geoJson=function(t,i){return new e.GeoJSON(t,i)},e.DomEvent={addListener:function(t,i,o,n){var a,r,h,l=e.stamp(o),c="_leaflet_"+i+l;return t[c]?this:(a=function(i){return o.call(n||t,i||e.DomEvent._getEvent())},e.Browser.msTouch&&0===i.indexOf("touch")?this.addMsTouchListener(t,i,a,l):(e.Browser.touch&&"dblclick"===i&&this.addDoubleTapListener&&this.addDoubleTapListener(t,a,l),"addEventListener"in t?"mousewheel"===i?(t.addEventListener("DOMMouseScroll",a,!1),t.addEventListener(i,a,!1)):"mouseenter"===i||"mouseleave"===i?(r=a,h="mouseenter"===i?"mouseover":"mouseout",a=function(i){return e.DomEvent._checkMouse(t,i)?r(i):s},t.addEventListener(h,a,!1)):t.addEventListener(i,a,!1):"attachEvent"in t&&t.attachEvent("on"+i,a),t[c]=a,this))},removeListener:function(t,i,s){var o=e.stamp(s),n="_leaflet_"+i+o,a=t[n];if(a)return e.Browser.msTouch&&0===i.indexOf("touch")?this.removeMsTouchListener(t,i,o):e.Browser.touch&&"dblclick"===i&&this.removeDoubleTapListener?this.removeDoubleTapListener(t,o):"removeEventListener"in t?"mousewheel"===i?(t.removeEventListener("DOMMouseScroll",a,!1),t.removeEventListener(i,a,!1)):"mouseenter"===i||"mouseleave"===i?t.removeEventListener("mouseenter"===i?"mouseover":"mouseout",a,!1):t.removeEventListener(i,a,!1):"detachEvent"in t&&t.detachEvent("on"+i,a),t[n]=null,this},stopPropagation:function(t){return t.stopPropagation?t.stopPropagation():t.cancelBubble=!0,this},disableClickPropagation:function(t){for(var i=e.DomEvent.stopPropagation,s=e.Draggable.START.length-1;s>=0;s--)e.DomEvent.addListener(t,e.Draggable.START[s],i);return e.DomEvent.addListener(t,"click",i).addListener(t,"dblclick",i)},preventDefault:function(t){return t.preventDefault?t.preventDefault():t.returnValue=!1,this},stop:function(t){return e.DomEvent.preventDefault(t).stopPropagation(t)},getMousePosition:function(t,s){var o=i.body,n=i.documentElement,a=t.pageX?t.pageX:t.clientX+o.scrollLeft+n.scrollLeft,r=t.pageY?t.pageY:t.clientY+o.scrollTop+n.scrollTop,h=new e.Point(a,r);return s?h._subtract(e.DomUtil.getViewportOffset(s)):h},getWheelDelta:function(t){var i=0;return t.wheelDelta&&(i=t.wheelDelta/120),t.detail&&(i=-t.detail/3),i},_checkMouse:function(t,i){var s=i.relatedTarget;if(!s)return!0;try{for(;s&&s!==t;)s=s.parentNode}catch(e){return!1}return s!==t},_getEvent:function(){var i=t.event;if(!i)for(var s=arguments.callee.caller;s&&(i=s.arguments[0],!i||t.Event!==i.constructor);)s=s.caller;return i}},e.DomEvent.on=e.DomEvent.addListener,e.DomEvent.off=e.DomEvent.removeListener,e.Draggable=e.Class.extend({includes:e.Mixin.Events,statics:{START:e.Browser.touch?["touchstart","mousedown"]:["mousedown"],END:{mousedown:"mouseup",touchstart:"touchend",MSPointerDown:"touchend"},MOVE:{mousedown:"mousemove",touchstart:"touchmove",MSPointerDown:"touchmove"},TAP_TOLERANCE:15},initialize:function(t,i,s){this._element=t,this._dragStartTarget=i||t,this._longPress=s&&!e.Browser.msTouch},enable:function(){if(!this._enabled){for(var t=e.Draggable.START.length-1;t>=0;t--)e.DomEvent.on(this._dragStartTarget,e.Draggable.START[t],this._onDown,this);this._enabled=!0}},disable:function(){if(this._enabled){for(var t=e.Draggable.START.length-1;t>=0;t--)e.DomEvent.off(this._dragStartTarget,e.Draggable.START[t],this._onDown,this);this._enabled=!1,this._moved=!1}},_onDown:function(t){if(!(!e.Browser.touch&&t.shiftKey||1!==t.which&&1!==t.button&&!t.touches||(e.DomEvent.preventDefault(t),e.DomEvent.stopPropagation(t),e.Draggable._disabled))){if(this._simulateClick=!0,t.touches&&t.touches.length>1)return this._simulateClick=!1,clearTimeout(this._longPressTimeout),s;var o=t.touches&&1===t.touches.length?t.touches[0]:t,n=o.target;e.Browser.touch&&"a"===n.tagName.toLowerCase()&&e.DomUtil.addClass(n,"leaflet-active"),this._moved=!1,this._moving||(this._startPoint=new e.Point(o.clientX,o.clientY),this._startPos=this._newPos=e.DomUtil.getPosition(this._element),t.touches&&1===t.touches.length&&e.Browser.touch&&this._longPress&&(this._longPressTimeout=setTimeout(e.bind(function(){var t=this._newPos&&this._newPos.distanceTo(this._startPos)||0;e.Draggable.TAP_TOLERANCE>t&&(this._simulateClick=!1,this._onUp(),this._simulateEvent("contextmenu",o))},this),1e3)),e.DomEvent.on(i,e.Draggable.MOVE[t.type],this._onMove,this),e.DomEvent.on(i,e.Draggable.END[t.type],this._onUp,this))}},_onMove:function(t){if(!(t.touches&&t.touches.length>1)){var i=t.touches&&1===t.touches.length?t.touches[0]:t,s=new e.Point(i.clientX,i.clientY),o=s.subtract(this._startPoint);(o.x||o.y)&&(e.DomEvent.preventDefault(t),this._moved||(this.fire("dragstart"),this._moved=!0,this._startPos=e.DomUtil.getPosition(this._element).subtract(o),e.Browser.touch||(e.DomUtil.disableTextSelection(),this._setMovingCursor())),this._newPos=this._startPos.add(o),this._moving=!0,e.Util.cancelAnimFrame(this._animRequest),this._animRequest=e.Util.requestAnimFrame(this._updatePosition,this,!0,this._dragStartTarget))}},_updatePosition:function(){this.fire("predrag"),e.DomUtil.setPosition(this._element,this._newPos),this.fire("drag")},_onUp:function(t){var s;if(clearTimeout(this._longPressTimeout),this._simulateClick&&t.changedTouches){var o=t.changedTouches[0],n=o.target,a=this._newPos&&this._newPos.distanceTo(this._startPos)||0;"a"===n.tagName.toLowerCase()&&e.DomUtil.removeClass(n,"leaflet-active"),e.Draggable.TAP_TOLERANCE>a&&(s=o)}e.Browser.touch||(e.DomUtil.enableTextSelection(),this._restoreCursor());for(var r in e.Draggable.MOVE)e.Draggable.MOVE.hasOwnProperty(r)&&(e.DomEvent.off(i,e.Draggable.MOVE[r],this._onMove),e.DomEvent.off(i,e.Draggable.END[r],this._onUp));this._moved&&(e.Util.cancelAnimFrame(this._animRequest),this.fire("dragend")),this._moving=!1,s&&(this._moved=!1,this._simulateEvent("click",s))},_setMovingCursor:function(){e.DomUtil.addClass(i.body,"leaflet-dragging")},_restoreCursor:function(){e.DomUtil.removeClass(i.body,"leaflet-dragging")},_simulateEvent:function(s,e){var o=i.createEvent("MouseEvents");o.initMouseEvent(s,!0,!0,t,1,e.screenX,e.screenY,e.clientX,e.clientY,!1,!1,!1,!1,0,null),e.target.dispatchEvent(o)}}),e.Handler=e.Class.extend({initialize:function(t){this._map=t},enable:function(){this._enabled||(this._enabled=!0,this.addHooks())},disable:function(){this._enabled&&(this._enabled=!1,this.removeHooks())},enabled:function(){return!!this._enabled}}),e.Map.mergeOptions({dragging:!0,inertia:!e.Browser.android23,inertiaDeceleration:3400,inertiaMaxSpeed:1/0,inertiaThreshold:e.Browser.touch?32:18,easeLinearity:.25,longPress:!0,worldCopyJump:!1}),e.Map.Drag=e.Handler.extend({addHooks:function(){if(!this._draggable){var t=this._map;this._draggable=new e.Draggable(t._mapPane,t._container,t.options.longPress),this._draggable.on({dragstart:this._onDragStart,drag:this._onDrag,dragend:this._onDragEnd},this),t.options.worldCopyJump&&(this._draggable.on("predrag",this._onPreDrag,this),t.on("viewreset",this._onViewReset,this))}this._draggable.enable()},removeHooks:function(){this._draggable.disable()},moved:function(){return this._draggable&&this._draggable._moved},_onDragStart:function(){var t=this._map;t._panAnim&&t._panAnim.stop(),t.fire("movestart").fire("dragstart"),t.options.inertia&&(this._positions=[],this._times=[])},_onDrag:function(){if(this._map.options.inertia){var t=this._lastTime=+new Date,i=this._lastPos=this._draggable._newPos;this._positions.push(i),this._times.push(t),t-this._times[0]>200&&(this._positions.shift(),this._times.shift())}this._map.fire("move").fire("drag")},_onViewReset:function(){var t=this._map.getSize()._divideBy(2),i=this._map.latLngToLayerPoint(new e.LatLng(0,0));this._initialWorldOffset=i.subtract(t).x,this._worldWidth=this._map.project(new e.LatLng(0,180)).x},_onPreDrag:function(){var t=this._worldWidth,i=Math.round(t/2),s=this._initialWorldOffset,e=this._draggable._newPos.x,o=(e-i+s)%t+i-s,n=(e+i+s)%t-i-s,a=Math.abs(o+s)i.inertiaThreshold||!this._positions[0];if(o)t.fire("moveend");else{var n=this._lastPos.subtract(this._positions[0]),a=(this._lastTime+s-this._times[0])/1e3,r=i.easeLinearity,h=n.multiplyBy(r/a),l=h.distanceTo(new e.Point(0,0)),c=Math.min(i.inertiaMaxSpeed,l),m=h.multiplyBy(c/l),u=c/(i.inertiaDeceleration*r),d=m.multiplyBy(-u/2).round();e.Util.requestAnimFrame(function(){t.panBy(d,u,r)})}t.fire("dragend"),i.maxBounds&&e.Util.requestAnimFrame(this._panInsideMaxBounds,t,!0,t._container)},_panInsideMaxBounds:function(){this.panInsideBounds(this.options.maxBounds)}}),e.Map.addInitHook("addHandler","dragging",e.Map.Drag),e.Map.mergeOptions({doubleClickZoom:!0}),e.Map.DoubleClickZoom=e.Handler.extend({addHooks:function(){this._map.on("dblclick",this._onDoubleClick)},removeHooks:function(){this._map.off("dblclick",this._onDoubleClick)},_onDoubleClick:function(t){this.setView(t.latlng,this._zoom+1)}}),e.Map.addInitHook("addHandler","doubleClickZoom",e.Map.DoubleClickZoom),e.Map.mergeOptions({scrollWheelZoom:!0}),e.Map.ScrollWheelZoom=e.Handler.extend({addHooks:function(){e.DomEvent.on(this._map._container,"mousewheel",this._onWheelScroll,this),this._delta=0},removeHooks:function(){e.DomEvent.off(this._map._container,"mousewheel",this._onWheelScroll)},_onWheelScroll:function(t){var i=e.DomEvent.getWheelDelta(t);this._delta+=i,this._lastMousePos=this._map.mouseEventToContainerPoint(t),this._startTime||(this._startTime=+new Date);var s=Math.max(40-(+new Date-this._startTime),0);clearTimeout(this._timer),this._timer=setTimeout(e.bind(this._performZoom,this),s),e.DomEvent.preventDefault(t),e.DomEvent.stopPropagation(t)},_performZoom:function(){var t=this._map,i=this._delta,s=t.getZoom();if(i=i>0?Math.ceil(i):Math.round(i),i=Math.max(Math.min(i,4),-4),i=t._limitZoom(s+i)-s,this._delta=0,this._startTime=null,i){var e=s+i,o=this._getCenterForScrollWheelZoom(e);t.setView(o,e)}},_getCenterForScrollWheelZoom:function(t){var i=this._map,s=i.getZoomScale(t),e=i.getSize()._divideBy(2),o=this._lastMousePos._subtract(e)._multiplyBy(1-1/s),n=i._getTopLeftPoint()._add(e)._add(o);return i.unproject(n)}}),e.Map.addInitHook("addHandler","scrollWheelZoom",e.Map.ScrollWheelZoom),e.extend(e.DomEvent,{_touchstart:e.Browser.msTouch?"MSPointerDown":"touchstart",_touchend:e.Browser.msTouch?"MSPointerUp":"touchend",addDoubleTapListener:function(t,s,o){function n(t){var i;if(e.Browser.msTouch?(p.push(t.pointerId),i=p.length):i=t.touches.length,!(i>1)){var s=Date.now(),o=s-(r||s);h=t.touches?t.touches[0]:t,l=o>0&&c>=o,r=s}}function a(t){if(e.Browser.msTouch){var i=p.indexOf(t.pointerId);if(-1===i)return;p.splice(i,1)}if(l){if(e.Browser.msTouch){var o,n={};for(var a in h)o=h[a],n[a]="function"==typeof o?o.bind(h):o;h=n}h.type="dblclick",s(h),r=null}}var r,h,l=!1,c=250,m="_leaflet_",u=this._touchstart,d=this._touchend,p=[];t[m+u+o]=n,t[m+d+o]=a;var _=e.Browser.msTouch?i.documentElement:t;return t.addEventListener(u,n,!1),_.addEventListener(d,a,!1),e.Browser.msTouch&&_.addEventListener("MSPointerCancel",a,!1),this},removeDoubleTapListener:function(t,s){var o="_leaflet_";return t.removeEventListener(this._touchstart,t[o+this._touchstart+s],!1),(e.Browser.msTouch?i.documentElement:t).removeEventListener(this._touchend,t[o+this._touchend+s],!1),e.Browser.msTouch&&i.documentElement.removeEventListener("MSPointerCancel",t[o+this._touchend+s],!1),this}}),e.extend(e.DomEvent,{_msTouches:[],_msDocumentListener:!1,addMsTouchListener:function(t,i,s,e){switch(i){case"touchstart":return this.addMsTouchListenerStart(t,i,s,e);case"touchend":return this.addMsTouchListenerEnd(t,i,s,e);case"touchmove":return this.addMsTouchListenerMove(t,i,s,e);default:throw"Unknown touch event type"}},addMsTouchListenerStart:function(t,s,e,o){var n="_leaflet_",a=this._msTouches,r=function(t){for(var i=!1,s=0;a.length>s;s++)if(a[s].pointerId===t.pointerId){i=!0;break}i||a.push(t),t.touches=a.slice(),t.changedTouches=[t],e(t)};if(t[n+"touchstart"+o]=r,t.addEventListener("MSPointerDown",r,!1),!this._msDocumentListener){var h=function(t){for(var i=0;a.length>i;i++)if(a[i].pointerId===t.pointerId){a.splice(i,1);break}};i.documentElement.addEventListener("MSPointerUp",h,!1),i.documentElement.addEventListener("MSPointerCancel",h,!1),this._msDocumentListener=!0}return this},addMsTouchListenerMove:function(t,i,s,e){function o(t){if(t.pointerType!==t.MSPOINTER_TYPE_MOUSE||0!==t.buttons){for(var i=0;a.length>i;i++)if(a[i].pointerId===t.pointerId){a[i]=t;break}t.touches=a.slice(),t.changedTouches=[t],s(t)}}var n="_leaflet_",a=this._msTouches;return t[n+"touchmove"+e]=o,t.addEventListener("MSPointerMove",o,!1),this},addMsTouchListenerEnd:function(t,i,s,e){var o="_leaflet_",n=this._msTouches,a=function(t){for(var i=0;n.length>i;i++)if(n[i].pointerId===t.pointerId){n.splice(i,1);break}t.touches=n.slice(),t.changedTouches=[t],s(t)};return t[o+"touchend"+e]=a,t.addEventListener("MSPointerUp",a,!1),t.addEventListener("MSPointerCancel",a,!1),this},removeMsTouchListener:function(t,i,s){var e="_leaflet_",o=t[e+i+s];switch(i){case"touchstart":t.removeEventListener("MSPointerDown",o,!1);break;case"touchmove":t.removeEventListener("MSPointerMove",o,!1);break;case"touchend":t.removeEventListener("MSPointerUp",o,!1),t.removeEventListener("MSPointerCancel",o,!1)}return this}}),e.Map.mergeOptions({touchZoom:e.Browser.touch&&!e.Browser.android23}),e.Map.TouchZoom=e.Handler.extend({addHooks:function(){e.DomEvent.on(this._map._container,"touchstart",this._onTouchStart,this)},removeHooks:function(){e.DomEvent.off(this._map._container,"touchstart",this._onTouchStart,this)},_onTouchStart:function(t){var s=this._map;if(t.touches&&2===t.touches.length&&!s._animatingZoom&&!this._zooming){var o=s.mouseEventToLayerPoint(t.touches[0]),n=s.mouseEventToLayerPoint(t.touches[1]),a=s._getCenterLayerPoint();this._startCenter=o.add(n)._divideBy(2),this._startDist=o.distanceTo(n),this._moved=!1,this._zooming=!0,this._centerOffset=a.subtract(this._startCenter),s._panAnim&&s._panAnim.stop(),e.DomEvent.on(i,"touchmove",this._onTouchMove,this).on(i,"touchend",this._onTouchEnd,this),e.DomEvent.preventDefault(t)}},_onTouchMove:function(t){if(t.touches&&2===t.touches.length){var i=this._map,s=i.mouseEventToLayerPoint(t.touches[0]),o=i.mouseEventToLayerPoint(t.touches[1]);this._scale=s.distanceTo(o)/this._startDist,this._delta=s._add(o)._divideBy(2)._subtract(this._startCenter),1!==this._scale&&(this._moved||(e.DomUtil.addClass(i._mapPane,"leaflet-zoom-anim leaflet-touching"),i.fire("movestart").fire("zoomstart")._prepareTileBg(),this._moved=!0),e.Util.cancelAnimFrame(this._animRequest),this._animRequest=e.Util.requestAnimFrame(this._updateOnMove,this,!0,this._map._container),e.DomEvent.preventDefault(t))}},_updateOnMove:function(){var t=this._map,i=this._getScaleOrigin(),s=t.layerPointToLatLng(i);t.fire("zoomanim",{center:s,zoom:t.getScaleZoom(this._scale)}),t._tileBg.style[e.DomUtil.TRANSFORM]=e.DomUtil.getTranslateString(this._delta)+" "+e.DomUtil.getScaleString(this._scale,this._startCenter)},_onTouchEnd:function(){if(this._moved&&this._zooming){var t=this._map;this._zooming=!1,e.DomUtil.removeClass(t._mapPane,"leaflet-touching"),e.DomEvent.off(i,"touchmove",this._onTouchMove).off(i,"touchend",this._onTouchEnd);var s=this._getScaleOrigin(),o=t.layerPointToLatLng(s),n=t.getZoom(),a=t.getScaleZoom(this._scale)-n,r=a>0?Math.ceil(a):Math.floor(a),h=t._limitZoom(n+r);t.fire("zoomanim",{center:o,zoom:h}),t._runAnimation(o,h,t.getZoomScale(h)/this._scale,s,!0)}},_getScaleOrigin:function(){var t=this._centerOffset.subtract(this._delta).divideBy(this._scale);return this._startCenter.add(t)}}),e.Map.addInitHook("addHandler","touchZoom",e.Map.TouchZoom),e.Map.mergeOptions({boxZoom:!0}),e.Map.BoxZoom=e.Handler.extend({initialize:function(t){this._map=t,this._container=t._container,this._pane=t._panes.overlayPane},addHooks:function(){e.DomEvent.on(this._container,"mousedown",this._onMouseDown,this)},removeHooks:function(){e.DomEvent.off(this._container,"mousedown",this._onMouseDown)},_onMouseDown:function(t){return!t.shiftKey||1!==t.which&&1!==t.button?!1:(e.DomUtil.disableTextSelection(),this._startLayerPoint=this._map.mouseEventToLayerPoint(t),this._box=e.DomUtil.create("div","leaflet-zoom-box",this._pane),e.DomUtil.setPosition(this._box,this._startLayerPoint),this._container.style.cursor="crosshair",e.DomEvent.on(i,"mousemove",this._onMouseMove,this).on(i,"mouseup",this._onMouseUp,this).preventDefault(t),this._map.fire("boxzoomstart"),s)},_onMouseMove:function(t){var i=this._startLayerPoint,s=this._box,o=this._map.mouseEventToLayerPoint(t),n=o.subtract(i),a=new e.Point(Math.min(o.x,i.x),Math.min(o.y,i.y));e.DomUtil.setPosition(s,a),s.style.width=Math.max(0,Math.abs(n.x)-4)+"px",s.style.height=Math.max(0,Math.abs(n.y)-4)+"px"},_onMouseUp:function(t){this._pane.removeChild(this._box),this._container.style.cursor="",e.DomUtil.enableTextSelection(),e.DomEvent.off(i,"mousemove",this._onMouseMove).off(i,"mouseup",this._onMouseUp);var s=this._map,o=s.mouseEventToLayerPoint(t);if(!this._startLayerPoint.equals(o)){var n=new e.LatLngBounds(s.layerPointToLatLng(this._startLayerPoint),s.layerPointToLatLng(o));s.fitBounds(n),s.fire("boxzoomend",{boxZoomBounds:n})}}}),e.Map.addInitHook("addHandler","boxZoom",e.Map.BoxZoom),e.Map.mergeOptions({keyboard:!0,keyboardPanOffset:80,keyboardZoomOffset:1}),e.Map.Keyboard=e.Handler.extend({keyCodes:{left:[37],right:[39],down:[40],up:[38],zoomIn:[187,107,61],zoomOut:[189,109,173]},initialize:function(t){this._map=t,this._setPanOffset(t.options.keyboardPanOffset),this._setZoomOffset(t.options.keyboardZoomOffset)},addHooks:function(){var t=this._map._container;-1===t.tabIndex&&(t.tabIndex="0"),e.DomEvent.on(t,"focus",this._onFocus,this).on(t,"blur",this._onBlur,this).on(t,"mousedown",this._onMouseDown,this),this._map.on("focus",this._addHooks,this).on("blur",this._removeHooks,this)},removeHooks:function(){this._removeHooks();var t=this._map._container;e.DomEvent.off(t,"focus",this._onFocus,this).off(t,"blur",this._onBlur,this).off(t,"mousedown",this._onMouseDown,this),this._map.off("focus",this._addHooks,this).off("blur",this._removeHooks,this)},_onMouseDown:function(){this._focused||this._map._container.focus()},_onFocus:function(){this._focused=!0,this._map.fire("focus")},_onBlur:function(){this._focused=!1,this._map.fire("blur")},_setPanOffset:function(t){var i,s,e=this._panKeys={},o=this.keyCodes;for(i=0,s=o.left.length;s>i;i++)e[o.left[i]]=[-1*t,0];for(i=0,s=o.right.length;s>i;i++)e[o.right[i]]=[t,0];for(i=0,s=o.down.length;s>i;i++)e[o.down[i]]=[0,t];for(i=0,s=o.up.length;s>i;i++)e[o.up[i]]=[0,-1*t]},_setZoomOffset:function(t){var i,s,e=this._zoomKeys={},o=this.keyCodes;for(i=0,s=o.zoomIn.length;s>i;i++)e[o.zoomIn[i]]=t;for(i=0,s=o.zoomOut.length;s>i;i++)e[o.zoomOut[i]]=-t},_addHooks:function(){e.DomEvent.on(i,"keydown",this._onKeyDown,this)},_removeHooks:function(){e.DomEvent.off(i,"keydown",this._onKeyDown,this)},_onKeyDown:function(t){var i=t.keyCode,s=this._map;if(this._panKeys.hasOwnProperty(i))s.panBy(this._panKeys[i]),s.options.maxBounds&&s.panInsideBounds(s.options.maxBounds);else{if(!this._zoomKeys.hasOwnProperty(i))return;s.setZoom(s.getZoom()+this._zoomKeys[i])}e.DomEvent.stop(t)}}),e.Map.addInitHook("addHandler","keyboard",e.Map.Keyboard),e.Handler.MarkerDrag=e.Handler.extend({initialize:function(t){this._marker=t},addHooks:function(){var t=this._marker._icon;this._draggable||(this._draggable=new e.Draggable(t,t).on("dragstart",this._onDragStart,this).on("drag",this._onDrag,this).on("dragend",this._onDragEnd,this)),this._draggable.enable()},removeHooks:function(){this._draggable.disable()},moved:function(){return this._draggable&&this._draggable._moved},_onDragStart:function(){this._marker.closePopup().fire("movestart").fire("dragstart")},_onDrag:function(){var t=this._marker,i=t._shadow,s=e.DomUtil.getPosition(t._icon),o=t._map.layerPointToLatLng(s);i&&e.DomUtil.setPosition(i,s),t._latlng=o,t.fire("move",{latlng:o}).fire("drag")},_onDragEnd:function(){this._marker.fire("moveend").fire("dragend")}}),e.Handler.PolyEdit=e.Handler.extend({options:{icon:new e.DivIcon({iconSize:new e.Point(8,8),className:"leaflet-div-icon leaflet-editing-icon"})},initialize:function(t,i){this._poly=t,e.setOptions(this,i)},addHooks:function(){this._poly._map&&(this._markerGroup||this._initMarkers(),this._poly._map.addLayer(this._markerGroup))},removeHooks:function(){this._poly._map&&(this._poly._map.removeLayer(this._markerGroup),delete this._markerGroup,delete this._markers)},updateMarkers:function(){this._markerGroup.clearLayers(),this._initMarkers()},_initMarkers:function(){this._markerGroup||(this._markerGroup=new e.LayerGroup),this._markers=[];var t,i,s,o,n=this._poly._latlngs;for(t=0,s=n.length;s>t;t++)o=this._createMarker(n[t],t),o.on("click",this._onMarkerClick,this),this._markers.push(o);var a,r;for(t=0,i=s-1;s>t;i=t++)(0!==t||e.Polygon&&this._poly instanceof e.Polygon)&&(a=this._markers[i],r=this._markers[t],this._createMiddleMarker(a,r),this._updatePrevNext(a,r))},_createMarker:function(t,i){var s=new e.Marker(t,{draggable:!0,icon:this.options.icon});return s._origLatLng=t,s._index=i,s.on("drag",this._onMarkerDrag,this),s.on("dragend",this._fireEdit,this),this._markerGroup.addLayer(s),s},_fireEdit:function(){this._poly.fire("edit")},_onMarkerDrag:function(t){var i=t.target;e.extend(i._origLatLng,i._latlng),i._middleLeft&&i._middleLeft.setLatLng(this._getMiddleLatLng(i._prev,i)),i._middleRight&&i._middleRight.setLatLng(this._getMiddleLatLng(i,i._next)),this._poly.redraw()},_onMarkerClick:function(t){if(!(3>this._poly._latlngs.length)){var i=t.target,s=i._index;this._markerGroup.removeLayer(i),this._markers.splice(s,1),this._poly.spliceLatLngs(s,1),this._updateIndexes(s,-1),this._updatePrevNext(i._prev,i._next),i._middleLeft&&this._markerGroup.removeLayer(i._middleLeft),i._middleRight&&this._markerGroup.removeLayer(i._middleRight),i._prev&&i._next?this._createMiddleMarker(i._prev,i._next):i._prev?i._next||(i._prev._middleRight=null):i._next._middleLeft=null,this._poly.fire("edit")}},_updateIndexes:function(t,i){this._markerGroup.eachLayer(function(s){s._index>t&&(s._index+=i)})},_createMiddleMarker:function(t,i){var s,e,o,n=this._getMiddleLatLng(t,i),a=this._createMarker(n);a.setOpacity(.6),t._middleRight=i._middleLeft=a,e=function(){var e=i._index;a._index=e,a.off("click",s).on("click",this._onMarkerClick,this),n.lat=a.getLatLng().lat,n.lng=a.getLatLng().lng,this._poly.spliceLatLngs(e,0,n),this._markers.splice(e,0,a),a.setOpacity(1),this._updateIndexes(e,1),i._index++,this._updatePrevNext(t,a),this._updatePrevNext(a,i)},o=function(){a.off("dragstart",e,this),a.off("dragend",o,this), -this._createMiddleMarker(t,a),this._createMiddleMarker(a,i)},s=function(){e.call(this),o.call(this),this._poly.fire("edit")},a.on("click",s,this).on("dragstart",e,this).on("dragend",o,this),this._markerGroup.addLayer(a)},_updatePrevNext:function(t,i){t&&(t._next=i),i&&(i._prev=t)},_getMiddleLatLng:function(t,i){var s=this._poly._map,e=s.latLngToLayerPoint(t.getLatLng()),o=s.latLngToLayerPoint(i.getLatLng());return s.layerPointToLatLng(e._add(o)._divideBy(2))}}),e.Polyline.addInitHook(function(){e.Handler.PolyEdit&&(this.editing=new e.Handler.PolyEdit(this),this.options.editable&&this.editing.enable()),this.on("add",function(){this.editing&&this.editing.enabled()&&this.editing.addHooks()}),this.on("remove",function(){this.editing&&this.editing.enabled()&&this.editing.removeHooks()})}),e.Control=e.Class.extend({options:{position:"topright"},initialize:function(t){e.setOptions(this,t)},getPosition:function(){return this.options.position},setPosition:function(t){var i=this._map;return i&&i.removeControl(this),this.options.position=t,i&&i.addControl(this),this},addTo:function(t){this._map=t;var i=this._container=this.onAdd(t),s=this.getPosition(),o=t._controlCorners[s];return e.DomUtil.addClass(i,"leaflet-control"),-1!==s.indexOf("bottom")?o.insertBefore(i,o.firstChild):o.appendChild(i),this},removeFrom:function(t){var i=this.getPosition(),s=t._controlCorners[i];return s.removeChild(this._container),this._map=null,this.onRemove&&this.onRemove(t),this}}),e.control=function(t){return new e.Control(t)},e.Map.include({addControl:function(t){return t.addTo(this),this},removeControl:function(t){return t.removeFrom(this),this},_initControlPos:function(){function t(t,n){var a=s+t+" "+s+n;i[t+n]=e.DomUtil.create("div",a,o)}var i=this._controlCorners={},s="leaflet-",o=this._controlContainer=e.DomUtil.create("div",s+"control-container",this._container);t("top","left"),t("top","right"),t("bottom","left"),t("bottom","right")}}),e.Control.Zoom=e.Control.extend({options:{position:"topleft"},onAdd:function(t){var i="leaflet-control-zoom",s="leaflet-bar",o=s+"-part",n=e.DomUtil.create("div",i+" "+s);return this._map=t,this._zoomInButton=this._createButton("+","Zoom in",i+"-in "+o+" "+o+"-top",n,this._zoomIn,this),this._zoomOutButton=this._createButton("-","Zoom out",i+"-out "+o+" "+o+"-bottom",n,this._zoomOut,this),t.on("zoomend",this._updateDisabled,this),n},onRemove:function(t){t.off("zoomend",this._updateDisabled,this)},_zoomIn:function(t){this._map.zoomIn(t.shiftKey?3:1)},_zoomOut:function(t){this._map.zoomOut(t.shiftKey?3:1)},_createButton:function(t,i,s,o,n,a){var r=e.DomUtil.create("a",s,o);r.innerHTML=t,r.href="#",r.title=i;var h=e.DomEvent.stopPropagation;return e.DomEvent.on(r,"click",h).on(r,"mousedown",h).on(r,"dblclick",h).on(r,"click",e.DomEvent.preventDefault).on(r,"click",n,a),r},_updateDisabled:function(){var t=this._map,i="leaflet-control-zoom-disabled";e.DomUtil.removeClass(this._zoomInButton,i),e.DomUtil.removeClass(this._zoomOutButton,i),t._zoom===t.getMinZoom()&&e.DomUtil.addClass(this._zoomOutButton,i),t._zoom===t.getMaxZoom()&&e.DomUtil.addClass(this._zoomInButton,i)}}),e.Map.mergeOptions({zoomControl:!0}),e.Map.addInitHook(function(){this.options.zoomControl&&(this.zoomControl=new e.Control.Zoom,this.addControl(this.zoomControl))}),e.control.zoom=function(t){return new e.Control.Zoom(t)},e.Control.Attribution=e.Control.extend({options:{position:"bottomright",prefix:'Powered by Leaflet'},initialize:function(t){e.setOptions(this,t),this._attributions={}},onAdd:function(t){return this._container=e.DomUtil.create("div","leaflet-control-attribution"),e.DomEvent.disableClickPropagation(this._container),t.on("layeradd",this._onLayerAdd,this).on("layerremove",this._onLayerRemove,this),this._update(),this._container},onRemove:function(t){t.off("layeradd",this._onLayerAdd).off("layerremove",this._onLayerRemove)},setPrefix:function(t){return this.options.prefix=t,this._update(),this},addAttribution:function(t){return t?(this._attributions[t]||(this._attributions[t]=0),this._attributions[t]++,this._update(),this):s},removeAttribution:function(t){return t?(this._attributions[t]--,this._update(),this):s},_update:function(){if(this._map){var t=[];for(var i in this._attributions)this._attributions.hasOwnProperty(i)&&this._attributions[i]&&t.push(i);var s=[];this.options.prefix&&s.push(this.options.prefix),t.length&&s.push(t.join(", ")),this._container.innerHTML=s.join(" — ")}},_onLayerAdd:function(t){t.layer.getAttribution&&this.addAttribution(t.layer.getAttribution())},_onLayerRemove:function(t){t.layer.getAttribution&&this.removeAttribution(t.layer.getAttribution())}}),e.Map.mergeOptions({attributionControl:!0}),e.Map.addInitHook(function(){this.options.attributionControl&&(this.attributionControl=(new e.Control.Attribution).addTo(this))}),e.control.attribution=function(t){return new e.Control.Attribution(t)},e.Control.Scale=e.Control.extend({options:{position:"bottomleft",maxWidth:100,metric:!0,imperial:!0,updateWhenIdle:!1},onAdd:function(t){this._map=t;var i="leaflet-control-scale",s=e.DomUtil.create("div",i),o=this.options;return this._addScales(o,i,s),t.on(o.updateWhenIdle?"moveend":"move",this._update,this),t.whenReady(this._update,this),s},onRemove:function(t){t.off(this.options.updateWhenIdle?"moveend":"move",this._update,this)},_addScales:function(t,i,s){t.metric&&(this._mScale=e.DomUtil.create("div",i+"-line",s)),t.imperial&&(this._iScale=e.DomUtil.create("div",i+"-line",s))},_update:function(){var t=this._map.getBounds(),i=t.getCenter().lat,s=6378137*Math.PI*Math.cos(i*Math.PI/180),e=s*(t.getNorthEast().lng-t.getSouthWest().lng)/180,o=this._map.getSize(),n=this.options,a=0;o.x>0&&(a=e*(n.maxWidth/o.x)),this._updateScales(n,a)},_updateScales:function(t,i){t.metric&&i&&this._updateMetric(i),t.imperial&&i&&this._updateImperial(i)},_updateMetric:function(t){var i=this._getRoundNum(t);this._mScale.style.width=this._getScaleWidth(i/t)+"px",this._mScale.innerHTML=1e3>i?i+" m":i/1e3+" km"},_updateImperial:function(t){var i,s,e,o=3.2808399*t,n=this._iScale;o>5280?(i=o/5280,s=this._getRoundNum(i),n.style.width=this._getScaleWidth(s/i)+"px",n.innerHTML=s+" mi"):(e=this._getRoundNum(o),n.style.width=this._getScaleWidth(e/o)+"px",n.innerHTML=e+" ft")},_getScaleWidth:function(t){return Math.round(this.options.maxWidth*t)-10},_getRoundNum:function(t){var i=Math.pow(10,(Math.floor(t)+"").length-1),s=t/i;return s=s>=10?10:s>=5?5:s>=3?3:s>=2?2:1,i*s}}),e.control.scale=function(t){return new e.Control.Scale(t)},e.Control.Layers=e.Control.extend({options:{collapsed:!0,position:"topright",autoZIndex:!0},initialize:function(t,i,s){e.setOptions(this,s),this._layers={},this._lastZIndex=0,this._handlingClick=!1;for(var o in t)t.hasOwnProperty(o)&&this._addLayer(t[o],o);for(o in i)i.hasOwnProperty(o)&&this._addLayer(i[o],o,!0)},onAdd:function(t){return this._initLayout(),this._update(),t.on("layeradd",this._onLayerChange,this).on("layerremove",this._onLayerChange,this),this._container},onRemove:function(t){t.off("layeradd",this._onLayerChange).off("layerremove",this._onLayerChange)},addBaseLayer:function(t,i){return this._addLayer(t,i),this._update(),this},addOverlay:function(t,i){return this._addLayer(t,i,!0),this._update(),this},removeLayer:function(t){var i=e.stamp(t);return delete this._layers[i],this._update(),this},_initLayout:function(){var t="leaflet-control-layers",i=this._container=e.DomUtil.create("div",t);e.Browser.touch?e.DomEvent.on(i,"click",e.DomEvent.stopPropagation):(e.DomEvent.disableClickPropagation(i),e.DomEvent.on(i,"mousewheel",e.DomEvent.stopPropagation));var s=this._form=e.DomUtil.create("form",t+"-list");if(this.options.collapsed){e.DomEvent.on(i,"mouseover",this._expand,this).on(i,"mouseout",this._collapse,this);var o=this._layersLink=e.DomUtil.create("a",t+"-toggle",i);o.href="#",o.title="Layers",e.Browser.touch?e.DomEvent.on(o,"click",e.DomEvent.stopPropagation).on(o,"click",e.DomEvent.preventDefault).on(o,"click",this._expand,this):e.DomEvent.on(o,"focus",this._expand,this),this._map.on("movestart",this._collapse,this)}else this._expand();this._baseLayersList=e.DomUtil.create("div",t+"-base",s),this._separator=e.DomUtil.create("div",t+"-separator",s),this._overlaysList=e.DomUtil.create("div",t+"-overlays",s),i.appendChild(s)},_addLayer:function(t,i,s){var o=e.stamp(t);this._layers[o]={layer:t,name:i,overlay:s},this.options.autoZIndex&&t.setZIndex&&(this._lastZIndex++,t.setZIndex(this._lastZIndex))},_update:function(){if(this._container){this._baseLayersList.innerHTML="",this._overlaysList.innerHTML="";var t=!1,i=!1;for(var s in this._layers)if(this._layers.hasOwnProperty(s)){var e=this._layers[s];this._addItem(e),i=i||e.overlay,t=t||!e.overlay}this._separator.style.display=i&&t?"":"none"}},_onLayerChange:function(t){var i=e.stamp(t.layer);this._layers[i]&&!this._handlingClick&&this._update()},_createRadioElement:function(t,s){var e='t;t++)i=o[t],s=this._layers[i.layerId],i.checked&&!this._map.hasLayer(s.layer)?(this._map.addLayer(s.layer),s.overlay||(e=s.layer)):!i.checked&&this._map.hasLayer(s.layer)&&this._map.removeLayer(s.layer);e&&(this._map.setZoom(this._map.getZoom()),this._map.fire("baselayerchange",{layer:e})),this._handlingClick=!1},_expand:function(){e.DomUtil.addClass(this._container,"leaflet-control-layers-expanded")},_collapse:function(){this._container.className=this._container.className.replace(" leaflet-control-layers-expanded","")}}),e.control.layers=function(t,i,s){return new e.Control.Layers(t,i,s)},e.PosAnimation=e.Class.extend({includes:e.Mixin.Events,run:function(t,i,s,o){this.stop(),this._el=t,this._inProgress=!0,this.fire("start"),t.style[e.DomUtil.TRANSITION]="all "+(s||.25)+"s cubic-bezier(0,0,"+(o||.5)+",1)",e.DomEvent.on(t,e.DomUtil.TRANSITION_END,this._onTransitionEnd,this),e.DomUtil.setPosition(t,i),e.Util.falseFn(t.offsetWidth),this._stepTimer=setInterval(e.bind(this.fire,this,"step"),50)},stop:function(){this._inProgress&&(e.DomUtil.setPosition(this._el,this._getPos()),this._onTransitionEnd(),e.Util.falseFn(this._el.offsetWidth))},_transformRe:/(-?[\d\.]+), (-?[\d\.]+)\)/,_getPos:function(){var i,s,o,n=this._el,a=t.getComputedStyle(n);return e.Browser.any3d?(o=a[e.DomUtil.TRANSFORM].match(this._transformRe),i=parseFloat(o[1]),s=parseFloat(o[2])):(i=parseFloat(a.left),s=parseFloat(a.top)),new e.Point(i,s,!0)},_onTransitionEnd:function(){e.DomEvent.off(this._el,e.DomUtil.TRANSITION_END,this._onTransitionEnd,this),this._inProgress&&(this._inProgress=!1,this._el.style[e.DomUtil.TRANSITION]="",clearInterval(this._stepTimer),this.fire("step").fire("end"))}}),e.Map.include({setView:function(t,i,s){i=this._limitZoom(i);var e=this._zoom!==i;if(this._loaded&&!s&&this._layers){this._panAnim&&this._panAnim.stop();var o=e?this._zoomToIfClose&&this._zoomToIfClose(t,i):this._panByIfClose(t);if(o)return clearTimeout(this._sizeTimer),this}return this._resetView(t,i),this},panBy:function(t,i,s){if(t=e.point(t),!t.x&&!t.y)return this;this._panAnim||(this._panAnim=new e.PosAnimation,this._panAnim.on({step:this._onPanTransitionStep,end:this._onPanTransitionEnd},this)),this.fire("movestart"),e.DomUtil.addClass(this._mapPane,"leaflet-pan-anim");var o=e.DomUtil.getPosition(this._mapPane).subtract(t)._round();return this._panAnim.run(this._mapPane,o,i||.25,s),this},_onPanTransitionStep:function(){this.fire("move")},_onPanTransitionEnd:function(){e.DomUtil.removeClass(this._mapPane,"leaflet-pan-anim"),this.fire("moveend")},_panByIfClose:function(t){var i=this._getCenterOffset(t)._floor();return this._offsetIsWithinView(i)?(this.panBy(i),!0):!1},_offsetIsWithinView:function(t,i){var s=i||1,e=this.getSize();return Math.abs(t.x)<=e.x*s&&Math.abs(t.y)<=e.y*s}}),e.PosAnimation=e.DomUtil.TRANSITION?e.PosAnimation:e.PosAnimation.extend({run:function(t,i,s,o){this.stop(),this._el=t,this._inProgress=!0,this._duration=s||.25,this._easeOutPower=1/Math.max(o||.5,.2),this._startPos=e.DomUtil.getPosition(t),this._offset=i.subtract(this._startPos),this._startTime=+new Date,this.fire("start"),this._animate()},stop:function(){this._inProgress&&(this._step(),this._complete())},_animate:function(){this._animId=e.Util.requestAnimFrame(this._animate,this),this._step()},_step:function(){var t=+new Date-this._startTime,i=1e3*this._duration;i>t?this._runFrame(this._easeOut(t/i)):(this._runFrame(1),this._complete())},_runFrame:function(t){var i=this._startPos.add(this._offset.multiplyBy(t));e.DomUtil.setPosition(this._el,i),this.fire("step")},_complete:function(){e.Util.cancelAnimFrame(this._animId),this._inProgress=!1,this.fire("end")},_easeOut:function(t){return 1-Math.pow(1-t,this._easeOutPower)}}),e.Map.mergeOptions({zoomAnimation:e.DomUtil.TRANSITION&&!e.Browser.android23&&!e.Browser.mobileOpera}),e.DomUtil.TRANSITION&&e.Map.addInitHook(function(){e.DomEvent.on(this._mapPane,e.DomUtil.TRANSITION_END,this._catchTransitionEnd,this)}),e.Map.include(e.DomUtil.TRANSITION?{_zoomToIfClose:function(t,i){if(this._animatingZoom)return!0;if(!this.options.zoomAnimation)return!1;var s=this.getZoomScale(i),o=this._getCenterOffset(t)._divideBy(1-1/s);if(!this._offsetIsWithinView(o,1))return!1;e.DomUtil.addClass(this._mapPane,"leaflet-zoom-anim"),this.fire("movestart").fire("zoomstart"),this.fire("zoomanim",{center:t,zoom:i});var n=this._getCenterLayerPoint().add(o);return this._prepareTileBg(),this._runAnimation(t,i,s,n),!0},_catchTransitionEnd:function(){this._animatingZoom&&this._onZoomTransitionEnd()},_runAnimation:function(t,i,s,o,n){this._animateToCenter=t,this._animateToZoom=i,this._animatingZoom=!0,e.Draggable&&(e.Draggable._disabled=!0);var a=e.DomUtil.TRANSFORM,r=this._tileBg;clearTimeout(this._clearTileBgTimer),e.Util.falseFn(r.offsetWidth);var h=e.DomUtil.getScaleString(s,o),l=r.style[a];r.style[a]=n?l+" "+h:h+" "+l},_prepareTileBg:function(){var t=this._tilePane,i=this._tileBg;if(i&&this._getLoadedTilesPercentage(i)>.5&&.5>this._getLoadedTilesPercentage(t))return t.style.visibility="hidden",t.empty=!0,this._stopLoadingImages(t),s;i||(i=this._tileBg=this._createPane("leaflet-tile-pane",this._mapPane),i.style.zIndex=1),i.style[e.DomUtil.TRANSFORM]="",i.style.visibility="hidden",i.empty=!0,t.empty=!1,this._tilePane=this._panes.tilePane=i;var o=this._tileBg=t;e.DomUtil.addClass(o,"leaflet-zoom-animated"),this._stopLoadingImages(o)},_getLoadedTilesPercentage:function(t){var i,s,e=t.getElementsByTagName("img"),o=0;for(i=0,s=e.length;s>i;i++)e[i].complete&&o++;return o/s},_stopLoadingImages:function(t){var i,s,o,n=Array.prototype.slice.call(t.getElementsByTagName("img"));for(i=0,s=n.length;s>i;i++)o=n[i],o.complete||(o.onload=e.Util.falseFn,o.onerror=e.Util.falseFn,o.src=e.Util.emptyImageUrl,o.parentNode.removeChild(o))},_onZoomTransitionEnd:function(){this._restoreTileFront(),e.DomUtil.removeClass(this._mapPane,"leaflet-zoom-anim"),e.Util.falseFn(this._tileBg.offsetWidth),this._animatingZoom=!1,this._resetView(this._animateToCenter,this._animateToZoom,!0,!0),e.Draggable&&(e.Draggable._disabled=!1)},_restoreTileFront:function(){this._tilePane.innerHTML="",this._tilePane.style.visibility="",this._tilePane.style.zIndex=2,this._tileBg.style.zIndex=1},_clearTileBg:function(){this._animatingZoom||this.touchZoom._zooming||(this._tileBg.innerHTML="")}}:{}),e.Map.include({_defaultLocateOptions:{watch:!1,setView:!1,maxZoom:1/0,timeout:1e4,maximumAge:0,enableHighAccuracy:!1},locate:function(t){if(t=this._locationOptions=e.extend(this._defaultLocateOptions,t),!navigator.geolocation)return this._handleGeolocationError({code:0,message:"Geolocation not supported."}),this;var i=e.bind(this._handleGeolocationResponse,this),s=e.bind(this._handleGeolocationError,this);return t.watch?this._locationWatchId=navigator.geolocation.watchPosition(i,s,t):navigator.geolocation.getCurrentPosition(i,s,t),this},stopLocate:function(){return navigator.geolocation&&navigator.geolocation.clearWatch(this._locationWatchId),this},_handleGeolocationError:function(t){var i=t.code,s=t.message||(1===i?"permission denied":2===i?"position unavailable":"timeout");this._locationOptions.setView&&!this._loaded&&this.fitWorld(),this.fire("locationerror",{code:i,message:"Geolocation error: "+s+"."})},_handleGeolocationResponse:function(t){var i=180*t.coords.accuracy/4e7,s=2*i,o=t.coords.latitude,n=t.coords.longitude,a=new e.LatLng(o,n),r=new e.LatLng(o-i,n-s),h=new e.LatLng(o+i,n+s),l=new e.LatLngBounds(r,h),c=this._locationOptions;if(c.setView){var m=Math.min(this.getBoundsZoom(l),c.maxZoom);this.setView(a,m)}this.fire("locationfound",{latlng:a,bounds:l,accuracy:t.coords.accuracy})}})}(this,document),L.Proj={},L.Proj._isProj4Proj=function(t){return t.projName!==void 0},L.Proj.Projection=L.Class.extend({initialize:function(t,i){if(L.Proj._isProj4Proj(t))this._proj=t;else{var s=t;Proj4js.defs[s]=i,this._proj=new Proj4js.Proj(s)}},project:function(t){var i=new L.Point(t.lng,t.lat);return Proj4js.transform(Proj4js.WGS84,this._proj,i)},unproject:function(t,i){var s=Proj4js.transform(this._proj,Proj4js.WGS84,t.clone());return new L.LatLng(s.y,s.x,i)}}),L.Proj.CRS=L.Class.extend({includes:L.CRS,options:{transformation:new L.Transformation(1,0,-1,0)},initialize:function(t,i,s){var e,o,n,a;L.Proj._isProj4Proj(t)?(o=t,e=o.srsCode,a=i||{},this.projection=new L.Proj.Projection(o)):(e=t,n=i,a=s||{},this.projection=new L.Proj.Projection(e,n)),L.Util.setOptions(this,a),this.code=e,this.transformation=this.options.transformation,this.options.origin&&(this.transformation=new L.Transformation(1,-this.options.origin[0],-1,this.options.origin[1])),this.options.scales?this.scale=function(t){return this.options.scales[t]}:this.options.resolutions&&(this.scale=function(t){return 1/this.options.resolutions[t]})}}),L.Proj.CRS.TMS=L.Proj.CRS.extend({initialize:function(t,i,s,e){if(L.Proj._isProj4Proj(t)){var o=t,n=i,a=s||{};a.origin=[n[0],n[3]],L.Proj.CRS.prototype.initialize(o,a)}else{var r=t,h=i,n=s,a=e||{};a.origin=[n[0],n[3]],L.Proj.CRS.prototype.initialize(r,h,a)}this.projectedBounds=n}}),L.Proj.TileLayer={},L.Proj.TileLayer.TMS=L.TileLayer.extend({options:{tms:!0,continuousWorld:!0},initialize:function(t,i,s){if(!(i instanceof L.Proj.CRS.TMS))throw Error("CRS is not L.Proj.CRS.TMS.");L.TileLayer.prototype.initialize.call(this,t,s),this.crs=i;for(var e=this.options.minZoom;this.options.maxZoom>e;e++){var o=(this.crs.projectedBounds[3]-this.crs.projectedBounds[1])/this._projectedTileSize(e);if(Math.abs(o-Math.round(o))>.001)throw Error("Projected bounds does not match grid at zoom "+e)}},getTileUrl:function(t){var i=Math.round((this.crs.projectedBounds[3]-this.crs.projectedBounds[1])/this._projectedTileSize(this._map.getZoom()));return L.Util.template(this._url,L.Util.extend({s:this._getSubdomain(t),z:this._getZoomForUrl(),x:t.x,y:i-t.y-1},this.options))},_projectedTileSize:function(t){return this.options.tileSize/this.crs.scale(t)}}),"undefined"!=typeof module&&(module.exports=L.Proj),"undefined"!=typeof L&&L.CRS!==void 0&&(L.CRS.proj4js=function(){return function(t,i,s,e){return e=e||{},s&&(e.transformation=s),new L.Proj.CRS(t,i,e)}}()),L.Control.MousePosition=L.Control.extend({options:{position:"bottomleft",separator:" : ",emptyString:"Unavailable",lngFirst:!1,numDigits:5,lngFormatter:void 0,latFormatter:void 0},onAdd:function(t){return this._container=L.DomUtil.create("div","leaflet-control-mouseposition"),L.DomEvent.disableClickPropagation(this._container),t.on("mousemove",this._onMouseMove,this),this._container.innerHTML=this.options.emptyString,this._container},onRemove:function(t){t.off("mousemove",this._onMouseMove)},_onMouseMove:function(t){var i=L.Util.formatNum(t.latlng.lng,this.options.numDigits),s=L.Util.formatNum(t.latlng.lat,this.options.numDigits);this.options.lngFormatter&&(i=this.options.lngFormatter(i)),this.options.latFormatter&&(s=this.options.latFormatter(s));var e=this.options.lngFirst?i+this.options.separator+s:s+this.options.separator+i;this._container.innerHTML=e}}),L.Map.mergeOptions({positionControl:!1}),L.Map.addInitHook(function(){this.options.positionControl&&(this.positionControl=new L.Control.MousePosition,this.addControl(this.positionControl))}),L.control.mousePosition=function(t){return new L.Control.MousePosition(t)},function(t,i){L.KSP={},L.KSP.version="0.2.1",L.KSP.CRS={},L.KSP.CRS.EPSG4326=new L.Proj.CRS.TMS(new Proj4js.Proj("EPSG:4326"),[-180,-90,180,90],{resolutions:[.703125,.3515625,.17578125,.087890625,.0439453125,.02197265625]}),L.KSP.CelestialBody=L.Class.extend({initialize:function(t){if(!t.hasOwnProperty("id"))throw Error("must specify id");if(!t.hasOwnProperty("name"))throw Error("must specify name");if(t.hasOwnProperty("crs")){if(!(t.crs instanceof L.Proj.CRS.TMS))throw Error("crs is not an instance of L.Proj.CRS.TMS")}else this.crs=L.KSP.CRS.EPSG4326;t.hasOwnProperty("radius")||(this.radius=1),t.hasOwnProperty("thumbnail")||(this.thumbnail="body-unknown.png"),t.hasOwnProperty("baseLayers")||(this.baseLayers={}),L.Util.extend(this,t)},addTo:function(t){var i,s=t._body;if(t._body=this,t.fire("bodychangestart",{body:this,oldBody:s}),s){for(i in s.baseLayers)s.baseLayers.hasOwnProperty(i)&&t.removeLayer(s.baseLayers[i]);for(i in s.overlays)s.overlays.hasOwnProperty(i)&&t.removeLayer(s.overlays[i])}var e=this.defaultLayer||this.baseLayers.Satellite;if(e){for(i in this.baseLayers)if(this.baseLayers.hasOwnProperty(i)&&this.baseLayers[i]._type===t._baseLayerType){e=this.baseLayers[i];break}t.addLayer(e),t.fire("baselayerchange",{layer:e})}for(i in this.overlays)this.overlays.hasOwnProperty(i)&&t._overlayTypes.indexOf(this.overlays[i]._type)>=0&&(t.addLayer(this.overlays[i]),t.fire("layeradd",{layer:this.overlays[i]}));t.fire("bodychangeend",{body:this,oldBody:s})},onAdd:function(t){this.addTo(t)},removeFrom:function(t){L.KSP.CelestialBody.DUMMY.addTo(t)},onRemove:function(t){this.removeFrom(t)}}),L.KSP.celestialBody=function(t){return new L.KSP.CelestialBody(t)},L.KSP.CelestialBody.DUMMY=L.KSP.celestialBody({id:"",name:"",crs:L.KSP.CRS.EPSG4326}),L.KSP.CelestialBody.ALL_PLANETARY=[L.KSP.CelestialBody.DUMMY],L.KSP.Map=L.Map.extend({options:{crs:L.KSP.CRS.EPSG4326,continuousWorld:!0},initialize:function(t,i){this._baseLayerType=-1,this._overlayTypes=[],L.Util.setOptions(this,i),this.startTrackingLayerState(),this.on("bodychangestart",this._onBodyChangeStart).on("bodychangeend",this._onBodyChangeEnd),L.Map.prototype.initialize.call(this,t,this.options)},clampZoom:function(){var t=this.getZoom(),i=this.getMinZoom(),s=this.getMaxZoom();i>t?this.setZoom(i):t>s?this.setZoom(s):this.fire("zoomend",this)},_onBodyChangeStart:function(){this.stopTrackingLayerState()},_onBodyChangeEnd:function(){this.clampZoom(),this.startTrackingLayerState()},_onLayerStateChange:function(t){if("layeradd"===t.type)t.layer instanceof L.KSP.TileLayer?this._baseLayerType=t.layer._type:t.layer instanceof L.KSP.LayerGroup&&0>this._overlayTypes.indexOf(t.layer._type)&&this._overlayTypes.push(t.layer._type);else if(t.layer instanceof L.KSP.LayerGroup){var i,s,e=t.layer._type,o=this._overlayTypes;for(i=o.length-1;i>=0;i--)s=o[i],s===e&&o.splice(i,1)}},startTrackingLayerState:function(){this.on("layeradd",this._onLayerStateChange).on("layerremove",this._onLayerStateChange)},stopTrackingLayerState:function(){this.off("layeradd",this._onLayerStateChange).off("layerremove",this._onLayerStateChange)}}),L.KSP.map=function(t,i){return new L.KSP.Map(t,i)},L.KSP.TileLayer=L.Proj.TileLayer.TMS.extend({statics:{TYPE_SATELLITE:0,TYPE_COLORRELIEF:1,TYPE_SLOPE:2,DEFAULT_URL:"http://tiles.kerbalmaps.com/{body}/{style}/{z}/{x}/{y}.png"},options:{continuousWorld:!1,noWrap:!1,minZoom:0,maxZoom:5,attribution:"Map data © Joel Pedraza"},initialize:function(t,i,s,e){L.Util.setOptions(this,e),this._type=t,L.Proj.TileLayer.TMS.prototype.initialize.call(this,i,s,this.options)}}),L.KSP.tileLayer=function(t,i,s,e){return new L.KSP.TileLayer(t,i,s,e)},L.KSP.LayerGroup=L.LayerGroup.extend({statics:{TYPE_SPACECENTER:0,TYPE_ANOMALY:1},initialize:function(t,i){this._type=t,L.LayerGroup.prototype.initialize.call(this,i)}}),L.KSP.layerGroup=function(t,i){return new L.KSP.LayerGroup(t,i)},L.KSP.Icon={},L.KSP.Icon.SPACECENTER=new L.Icon({iconUrl:"../assets/images/markers-spacecenter.png",shadowUrl:"../assets/images/markers-shadow.png",iconSize:[30,40],shadowSize:[35,16],iconAnchor:[15,40],shadowAnchor:[10,12],popupAnchor:[0,-35]}),L.KSP.Icon.ANOMALY=new L.Icon({iconUrl:"../assets/images/markers-anomaly.png",shadowUrl:"../assets/images/markers-shadow.png",iconSize:[30,40],shadowSize:[35,16],iconAnchor:[15,40],shadowAnchor:[10,12],popupAnchor:[0,-35]}),L.KSP.Legend={},L.KSP.Legend.SLOPE={"≥ 60°":"#E19678","< 60°":"#C86464","< 30°":"#965A64","< 15°":"#645064","< 5°":"#325064","0°":"#32465A"},L.KSP.Control=L.KSP.control={},L.KSP.Control.Legend=L.Control.extend({options:{position:"bottomright"},onAdd:function(t){return this._container=L.DomUtil.create("div","leaflet-control-legend"),t.on("baselayerchange",this._onLayerChange,this),this._container},_update:function(t){if(this._container.innerHTML="",t){for(var i in t)t.hasOwnProperty(i)&&(this._container.innerHTML+=''+i+"
    ");L.DomUtil.addClass(this._container,"leaflet-control-legend-visible")}else this._container.className=this._container.className.replace(" leaflet-control-legend-visible","")},_onLayerChange:function(t){this._update(t.layer.options.legend)}}),L.Map.mergeOptions({legendControl:!0}),L.Map.addInitHook(function(){this.options.bodyControl&&(this.legendControl=new L.KSP.Control.Legend,this.addControl(this.legendControl))}),L.control.legend=function(t){return new L.KSP.Control.Legend(t)},L.KSP.Control.Scale=L.Control.Scale.extend({options:{imperial:!1},onAdd:function(t){this._radius=0,t._body&&(this._radius=t._body.radius);var i=L.Control.Scale.prototype.onAdd.call(this,t);return t.on("bodychangeend",this._onBodyChangeEnd,this),i},onRemove:function(t){L.Control.Scale.prototype.onRemove.call(this,t),t.off("bodychangeend",this._onBodyChangeEnd)},_onBodyChangeEnd:function(t){this._radius=t.body.radius,this._update()},_update:function(){var t=this._map.getBounds(),i=t.getCenter().lat,s=this._radius*Math.PI*Math.cos(i*Math.PI/180),e=s*(t.getNorthEast().lng-t.getSouthWest().lng)/180,o=this._map.getSize(),n=this.options,a=0;o.x>0&&(a=e*(n.maxWidth/o.x)),this._updateScales(n,a)}}),L.KSP.Map.mergeOptions({scaleControl:!1}),L.KSP.Map.addInitHook(function(){this.options.scaleControl&&(this.scaleControl=new L.KSP.Control.Scale,this.addControl(this.scaleControl))}),L.KSP.control.scale=function(t){return new L.KSP.Control.Scale(t)},L.KSP.Control.CelestialBody=L.Control.extend({options:{position:"topright",collapsed:!0},initialize:function(t,i){L.Util.setOptions(this,i),this._bodies=t,this._timeInMillis=(new Date).valueOf(),this._weekInMillis=6048e5},onAdd:function(){return this._initLayout(),this._update(),this._map.on("bodychangeend",this._update,this),this._container},_initLayout:function(){var t="leaflet-control-celestialbodies",s=this._container=L.DomUtil.create("div",t),e=this._bodies;if(this.options.collapsed){L.DomEvent.on(s,"mouseover",this._expand,this).on(s,"mouseout",this._collapse,this);var o=this._bodiesLink=L.DomUtil.create("a",t+"-toggle",s);o.href="#",o.title="Celestial Bodies",L.DomEvent.on(o,"focus",this._expand,this),this._map.on("movestart",this._collapse,this)}var n=this._list=L.DomUtil.create("ul",t+"-list",s);for(var a in e)if(e.hasOwnProperty(a)){var r=this._addBody(e[a],n);if(e[a].children){var h=i.createElement("ul");for(var l in e[a].children)e[a].children.hasOwnProperty(l)&&this._addBody(e[a].children[l],h);r.appendChild(h)}}},_update:function(){this._map._body&&(this._bodiesLink.style.backgroundImage='url("'+this._map._body.thumbnail+'")')},_addBody:function(t,s){var e,o=i.createElement("li"),n=i.createElement("img");if(n.src=t.thumbnail,n.alt=o.title=t.name,t.addedOn){this._timeInMillis-t.addedOnKerbal Space Center
    -0.0969 : -74.6004"),L.marker([20.5829,-146.5116],{icon:L.KSP.Icon.SPACECENTER}).bindPopup("Kerbal Space Center 2
    20.5829 : -146.5116"),L.marker([-1.5409,-71.9099],{icon:L.KSP.Icon.SPACECENTER}).bindPopup("Island Airfield
    -1.5409 : -71.9099")]),Anomalies:L.KSP.layerGroup(L.KSP.LayerGroup.TYPE_ANOMALY,[L.marker([.1023,-74.5684],{icon:L.KSP.Icon.ANOMALY}).bindPopup("0.1023 : -74.5684"),L.marker([20.6709,-146.4968],{icon:L.KSP.Icon.ANOMALY}).bindPopup("20.6709 : -146.4968"),L.marker([35.5705,-74.9773],{icon:L.KSP.Icon.ANOMALY}).bindPopup("35.5705 : -74.9773"),L.marker([-.6402,-80.7668],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-0.6402 : -80.7668"),L.marker([-28.8083,-13.4401],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-28.8083 : -13.4401"),L.marker([-6.5057,-141.6856],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-6.5057 : -141.6856"),L.marker([81.9551,-128.518],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-81.9551 : -128.518")])}}),L.KSP.CelestialBody.MUN=L.KSP.celestialBody({id:"mun",name:"Mun",crs:L.KSP.CRS.EPSG4326,radius:2e5,addedOn:13682304e5,lastUpdated:1368144e6,thumbnail:"body-mun.png",baseLayers:{Satellite:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SATELLITE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{body:"mun",style:"sat"}),"Color Relief":L.KSP.tileLayer(L.KSP.TileLayer.TYPE_COLORRELIEF,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{body:"mun",style:"color",legend:{"3150 m":"#EBEBEB","-180 m":"#232323"}}),Slope:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SLOPE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{body:"mun",style:"slope",legend:L.KSP.Legend.SLOPE})},overlays:{Anomalies:L.KSP.layerGroup(L.KSP.LayerGroup.TYPE_ANOMALY,[L.marker([-9.8314,25.9177],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-9.8314 : 25.9177"),L.marker([-82.2063,102.9305],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-82.2063 : 102.9305"),L.marker([57.6604,9.1422],{icon:L.KSP.Icon.ANOMALY}).bindPopup("57.6604 : 9.1422"),L.marker([2.4695,81.5133],{icon:L.KSP.Icon.ANOMALY}).bindPopup("2.4695 : 81.5133"),L.marker([12.4432,39.178],{icon:L.KSP.Icon.ANOMALY}).bindPopup("12.4432 : 39.1780"),L.marker([-12.4431,-140.822],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-12.4431 : -140.8220"),L.marker([.7027,22.747],{icon:L.KSP.Icon.ANOMALY}).bindPopup("0.7027 : 22.7470"),L.marker([-70.9556,-68.1378],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-70.9556,-68.1378")])}}),L.KSP.CelestialBody.MINMUS=L.KSP.celestialBody({id:"minmus",name:"Minmus",crs:L.KSP.CRS.EPSG4326,radius:6e4,addedOn:13682304e5,lastUpdated:13682304e5,thumbnail:"body-minmus.png",baseLayers:{Satellite:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SATELLITE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"sat",body:"minmus"}),"Color Relief":L.KSP.tileLayer(L.KSP.TileLayer.TYPE_COLORRELIEF,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"color",body:"minmus",legend:{"5750 m":"#414B41","2500 m":"#BEE6C3","1 m":"#96CDB4","0 m":"#87B9A5"}}),Slope:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SLOPE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"slope",body:"minmus",legend:L.KSP.Legend.SLOPE})},overlays:{Anomalies:L.KSP.layerGroup(L.KSP.LayerGroup.TYPE_ANOMALY,[L.marker([23.7768,60.0462],{icon:L.KSP.Icon.ANOMALY}).bindPopup("23.7768 : 60.0462")])}}),L.KSP.CelestialBody.DUNA=L.KSP.celestialBody({id:"duna",name:"Duna",crs:L.KSP.CRS.EPSG4326,radius:32e4,addedOn:13688352e5,lastUpdated:13688352e5,thumbnail:"body-duna.png",baseLayers:{Satellite:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SATELLITE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"sat",body:"duna"}),"Color Relief":L.KSP.tileLayer(L.KSP.TileLayer.TYPE_COLORRELIEF,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"color",body:"duna",legend:{"4800 m":"#C3A082","4000 m":"#966446","3000 m":"#733219","2000 m":"#501E14","1000 m":"#3C140F","0 m":"#280F0A"}}),Slope:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SLOPE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"slope",body:"duna",legend:L.KSP.Legend.SLOPE})},overlays:{Anomalies:L.KSP.layerGroup(L.KSP.LayerGroup.TYPE_ANOMALY,[L.marker([17.0483,-85.4717],{icon:L.KSP.Icon.ANOMALY}).bindPopup("17.0483 : -85.4717"),L.marker([-30.3525,-28.6828],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-30.3525 : -28.6828"),L.marker([-66.1344,-160.7432],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-66.1344 : -160.7432")])}}),L.KSP.CelestialBody.IKE=L.KSP.celestialBody({id:"ike",name:"Ike",crs:L.KSP.CRS.EPSG4326,radius:13e4,addedOn:13688352e5,lastUpdated:13688352e5,thumbnail:"body-ike.png",baseLayers:{Satellite:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SATELLITE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"sat",body:"ike"}),"Color Relief":L.KSP.tileLayer(L.KSP.TileLayer.TYPE_COLORRELIEF,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"color",body:"ike",legend:{"13000 m":"#828282","11000 m":"#6E6E6E","9000 m":"#5A5A5A","7000 m":"#464646","5000 m":"#323232","2500 m":"#191919","70 m":"#070707"}}),Slope:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SLOPE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"slope",body:"ike",legend:L.KSP.Legend.SLOPE})},overlays:{}}),L.KSP.CelestialBody.DRES=L.KSP.celestialBody({id:"dres",name:"Dres",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-dres.png"}),L.KSP.CelestialBody.JOOL=L.KSP.celestialBody({id:"jool",name:"Jool",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-jool.png"}),L.KSP.CelestialBody.LAYTHE=L.KSP.celestialBody({id:"laythe",name:"Laythe",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-laythe.png"}),L.KSP.CelestialBody.VALL=L.KSP.celestialBody({id:"vall",name:"Vall",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-vall.png"}),L.KSP.CelestialBody.TYLO=L.KSP.celestialBody({id:"tylo",name:"Tylo",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-tylo.png"}),L.KSP.CelestialBody.BOP=L.KSP.celestialBody({id:"bop",name:"Bop",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-bop.png"}),L.KSP.CelestialBody.POL=L.KSP.celestialBody({id:"pol",name:"Pol",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-pol.png"}),L.KSP.CelestialBody.EELOO=L.KSP.celestialBody({id:"eeloo",name:"Eeloo",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-eeloo.png"}),L.KSP.CelestialBody.KERBIN.defaultLayer=L.KSP.CelestialBody.KERBIN.baseLayers.Satellite,L.KSP.CelestialBody.MUN.defaultLayer=L.KSP.CelestialBody.MUN.baseLayers.Satellite,L.KSP.CelestialBody.MINMUS.defaultLayer=L.KSP.CelestialBody.MINMUS.baseLayers.Satellite,L.KSP.CelestialBody.EVE.children=[L.KSP.CelestialBody.GILLY],L.KSP.CelestialBody.KERBIN.children=[L.KSP.CelestialBody.MUN,L.KSP.CelestialBody.MINMUS],L.KSP.CelestialBody.DUNA.children=[L.KSP.CelestialBody.IKE],L.KSP.CelestialBody.JOOL.children=[L.KSP.CelestialBody.LAYTHE,L.KSP.CelestialBody.VALL,L.KSP.CelestialBody.TYLO,L.KSP.CelestialBody.BOP,L.KSP.CelestialBody.POL],L.KSP.CelestialBody.GILLY.parent=L.KSP.CelestialBody.EVE,L.KSP.CelestialBody.MUN.parent=L.KSP.CelestialBody.MINMUS.parent=L.KSP.CelestialBody.KERBIN,L.KSP.CelestialBody.IKE.parent=L.KSP.CelestialBody.DUNA,L.KSP.CelestialBody.LAYTHE.parent=L.KSP.CelestialBody.VALL.parent=L.KSP.CelestialBody.TYLO.parent=L.KSP.CelestialBody.BOP.parent=L.KSP.CelestialBody.POL.parent=L.KSP.CelestialBody.JOOL,L.KSP.CelestialBody.ALL_PLANETARY=[L.KSP.CelestialBody.MOHO,L.KSP.CelestialBody.EVE,L.KSP.CelestialBody.KERBIN,L.KSP.CelestialBody.DUNA,L.KSP.CelestialBody.DRES,L.KSP.CelestialBody.JOOL,L.KSP.CelestialBody.EELOO],L.KSP.Map.addInitHook(function(){this.options.layers=[L.KSP.CelestialBody.KERBIN]})}(this,document);var Settings=Class.create({initialize:function(defaultHost,defaultPort){if(!this.getHost()){this.setHost(defaultHost)}if(!this.getPort()){this.setPort(defaultPort)}},getHost:function(){return this.get("host")},getPort:function(){return this.get("port")},setHost:function(value){return this.set("host",value)},setPort:function(value){return this.set("port",value)},get:function(property){return localStorage.getItem(property)},set:function(property,value){return localStorage.setItem(property,value)}});var Telemachus=Class.create({initialize:function(host,port){this.updateConnection(host,port);this.receiverFunctions=[];this.subscribedFields={};this.orbitingBodies=this.getOrbitalBodies();this.rate=500;this.loopTimeout=setTimeout(this.poll.bind(this),this.rate)},url:function(){return"http://"+this.host+":"+this.port+"/telemachus/datalink"},updateConnection:function(host,port){this.host=host;this.port=port},addReceiverFunction:function(func){this.receiverFunctions.push(func)},subscribeToData:function(fields){for(var i=fields.length-1;i>=0;i--){var field=fields[i];this.subscribedFields[field]=field}},dispatchMessages:function(data){for(var i=this.receiverFunctions.length-1;i>=0;i--){try{this.receiverFunctions[i](data)}catch(e){console.error(e)}}},send:function(message){this.socket.send(JSON.stringify(message))},getOrbitalBodyInfo:function(name){var properties=this.orbitingBodies[name];if(properties){return Object.extend({name:name},properties)}else{return null}},notifyIfLOS:function(request){if(request.transport.status==0){document.fire("telemachus:loss-of-signal");return true}return false},prepareParams:function(params){var normalizedParams=[];Object.keys(params).forEach(function(field){var sanitizedFieldName=field.replace("[","{").replace("]","}");normalizedParams.push(sanitizedFieldName+"="+field)});return normalizedParams},convertData:function(rawData){var data={};var startBracesRegexp=/\{/g;var endBracesRegexp=/\}/g;Object.keys(rawData).forEach(function(key){var convertedFieldName=key.replace(startBracesRegexp,"[").replace(endBracesRegexp,"]");data[convertedFieldName]=rawData[key]});return data},poll:function(){var params=this.prepareParams(this.subscribedFields);var requestURL=this.url()+"?"+params.join("&");new Ajax.Request(requestURL,{method:"get",onSuccess:function(response){var rawData=JSON.parse(response.responseText);var data=this.convertData(rawData);this.dispatchMessages(data)}.bind(this),onException:this.notifyIfLOS.bind(this),onComplete:function(response){setTimeout(this.poll.bind(this),this.rate)}.bind(this)})},sendMessage:function(params,callback){new Ajax.Request(this.url(),{method:"post",postBody:JSON.stringify(params),onSuccess:function(response){var rawData=JSON.parse(response.responseText);var data=this.convertData(rawData);callback(data)}.bind(this),onException:this.notifyIfLOS.bind(this)})},getOrbitalBodies:function(){return{Sun:{id:0,referenceBodyName:null,mapBody:null,atmosphericRadius:0,color:"#FFFF00",surfaceGravity:17.1},Kerbin:{id:1,referenceBodyName:"Sun",mapBody:L.KSP.CelestialBody.KERBIN,atmosphericRadius:7e4,color:"#4a5472",surfaceGravity:9.81},Mun:{id:2,referenceBodyName:"Kerbin",mapBody:L.KSP.CelestialBody.MUN,atmosphericRadius:0,color:"#e2e0d7",surfaceGravity:1.63},Minmus:{id:3,referenceBodyName:"Kerbin",mapBody:L.KSP.CelestialBody.MINMUS,color:"#98f2c5",atmosphericRadius:0,surfaceGravity:.491},Moho:{id:4,referenceBodyName:"Sun",mapBody:L.KSP.CelestialBody.MOHO,atmosphericRadius:0,color:"#fdc39e",surfaceGravity:2.7},Eve:{id:5,referenceBodyName:"Sun",mapBody:L.KSP.CelestialBody.EVE,atmosphericRadius:9e4,color:"#c394fe",surfaceGravity:16.7},Duna:{id:6,referenceBodyName:"Sun",mapBody:L.KSP.CelestialBody.DUNA,atmosphericRadius:5e4,color:"#fc5e49",surfaceGravity:2.94},Ike:{id:7,referenceBodyName:"Duna",mapBody:L.KSP.CelestialBody.IKE,atmosphericRadius:0,color:"#e2e0d7",surfaceGravity:1.1},Jool:{id:8,referenceBodyName:"Sun",mapBody:L.KSP.CelestialBody.JOOL,atmosphericRadius:2e5,color:"#C5DCAB",surfaceGravity:7.85},Laythe:{id:9,referenceBodyName:"Jool",mapBody:L.KSP.CelestialBody.LAYTHE,atmosphericRadius:5e4,color:"#a8b4fe",surfaceGravity:7.85},Vall:{id:10,referenceBodyName:"Jool",mapBody:L.KSP.CelestialBody.VALL,atmosphericRadius:0,color:"#b0f4fe",surfaceGravity:2.31},Bop:{id:11,referenceBodyName:"Jool",mapBody:L.KSP.CelestialBody.BOP,atmosphericRadius:0,color:"#c64605",surfaceGravity:.589},Tylo:{id:12,referenceBodyName:"Jool",mapBody:L.KSP.CelestialBody.TYLO,atmosphericRadius:0,color:"#fdf7ed",surfaceGravity:7.85},Gilly:{id:13,referenceBodyName:"Eve",mapBody:L.KSP.CelestialBody.GILLY,atmosphericRadius:0,color:"#fdcbb1",surfaceGravity:.049},Pol:{id:14,referenceBodyName:"Pol",mapBody:L.KSP.CelestialBody.POL,atmosphericRadius:0,color:"#fec681",surfaceGravity:.373},Dres:{id:15,referenceBodyName:"Sun",mapBody:L.KSP.CelestialBody.DRES,atmosphericRadius:0,color:"#fef8f9",surfaceGravity:1.13},Eeloo:{id:16,referenceBodyName:"Sun",mapBody:L.KSP.CelestialBody.EELOO,atmosphericRadius:0,color:"#e5fafe",surfaceGravity:1.69}}}});var TitleBar=Class.create({initialize:function(datalink,title_bar_id){this.datalink=datalink;this.title_bar_id=title_bar_id;this.title_bar=$(this.title_bar_id);this.initializeLOSNotifier();this.initializeDatalink()},update:function(data){window.requestAnimationFrame(function(){this.title_bar.down("#world-clock").update(TimeFormatters.formatUT(data["t.universalTime"]));this.title_bar.down("#mission-time").update(TimeFormatters.formatMET(data["v.missionTime"]));this.title_bar.down("#mission-time").removeClassName("loss-of-signal")}.bind(this))},initializeLOSNotifier:function(){document.observe("telemachus:loss-of-signal",function(){window.requestAnimationFrame(function(){this.title_bar.down("#mission-time").update("⚠ LOS ⚠");this.title_bar.down("#mission-time").addClassName("loss-of-signal")}.bind(this))}.bind(this))},initializeDatalink:function(){this.datalink.subscribeToData(["t.timeWarp","t.universalTime","v.missionTime"]);this.datalink.addReceiverFunction(this.update.bind(this))}});var ButtonIndicator=Class.create({initialize:function(datalink,indicatorId,apiButtonString){this.datalink=datalink;this.indicatorId=indicatorId;this.indicator=$(this.indicatorId);this.apiButtonString=apiButtonString;this.initializeDatalink()},update:function(data){if(data[this.apiButtonString]==true){this.indicator.addClassName("on")}else{this.indicator.removeClassName("on")}},initializeDatalink:function(){this.datalink.subscribeToData([this.apiButtonString]);this.datalink.addReceiverFunction(this.update.bind(this))}});var ReadoutTable=Class.create({initialize:function(datalink,tableId,dataRows){this.datalink=datalink;this.tableId=tableId;this.table=$(this.tableId);this.dataRows=dataRows;this.initializeDatalink()},update:function(data){window.requestAnimationFrame(function(){this.dataRows.forEach(function(row){var rowId=row.label;var tableRow=this.table.down("tr[data-label='"+rowId+"']");if(!tableRow){var tableRow=new Element("tr",{"data-label":rowId});tableRow.insert(""+row.label+"");this.table.insert(tableRow)}tableRow.down("td").update(row.formatter(data[row.value]))}.bind(this))}.bind(this))},initializeDatalink:function(){var dataValues=this.dataRows.map(function(dataRow){return dataRow.value});this.datalink.subscribeToData(dataValues);this.datalink.addReceiverFunction(this.update.bind(this))}});var ResourceMonitor=Class.create({initialize:function(datalink,resourceName,options){this.datalink=datalink;this.resourceName=resourceName;this.options=Object.extend({currentStageProgressBar:null,totalProgressBar:null,valuePrefix:null},options);this.resourceStrings=this.buildResourceStrings();this.initializeDatalink()},update:function(data){window.requestAnimationFrame(function(){if(this.options.totalProgressBar){this.options.totalProgressBar.value=data[this.resourceStrings.totalAvailable];this.options.totalProgressBar.max=data[this.resourceStrings.totalMax]}if(this.options.currentStageProgressBar){this.options.currentStageProgressBar.value=data[this.resourceStrings.currentStageAvailable];this.options.currentStageProgressBar.max=data[this.resourceStrings.currentStageMax]}this.updateValue("-total-value",data[this.resourceStrings.totalAvailable]);this.updateValue("-total-max",data[this.resourceStrings.totalMax]);this.updateValue("-current-stage-value",data[this.resourceStrings.currentStageAvailable]);this.updateValue("-current-stage-max",data[this.resourceStrings.currentStageMax])}.bind(this))},updateValue:function(id,value){if($(this.options.valuePrefix+id)){if(value<0){$(this.options.valuePrefix+id).update("NA")}else{$(this.options.valuePrefix+id).update(value.toFixed(2))}}},buildResourceStrings:function(){return{totalAvailable:"r.resource["+this.resourceName+"]",totalMax:"r.resourceMax["+this.resourceName+"]",currentStageAvailable:"r.resourceCurrent["+this.resourceName+"]",currentStageMax:"r.resourceCurrentMax["+this.resourceName+"]"}},initializeDatalink:function(){this.datalink.subscribeToData([this.resourceStrings.totalAvailable,this.resourceStrings.totalMax,this.resourceStrings.currentStageAvailable,this.resourceStrings.currentStageMax]);this.datalink.addReceiverFunction(this.update.bind(this))}});var DataTable=Class.create({initialize:function(tableID,dataRows){this.tableID=tableID;this.table=$(this.tableID);this.dataRows=dataRows},update:function(){window.requestAnimationFrame(function(){this.dataRows.forEach(function(row){var rowId=row.label;var tableRow=this.table.down("tr[data-label='"+rowId+"']");if(!tableRow){var tableRow=new Element("tr",{"data-label":rowId});tableRow.insert(""+row.label+"");this.table.insert(tableRow)}tableRow.down("td").update(row.value)}.bind(this))}.bind(this))},clear:function(){window.requestAnimationFrame(function(){this.dataRows=[];this.table.innerHTML=""}.bind(this))}});var AtmosphericDensityGauge=Class.create({initialize:function(datalink,gaugeID){this.datalink=datalink;this.gaugeID=gaugeID;this.gauge=$(this.gaugeID);this.initializeDatalink();this.func=function(x){return Math.log(2*x)}},update:function(data){var max=this.func(100);var value=this.func(data["v.atmosphericPressure"]*100);if(!isFinite(value)){value=0}this.gauge.value=value;this.gauge.max=max},initializeDatalink:function(){this.datalink.subscribeToData(["v.atmosphericPressure"]);this.datalink.addReceiverFunction(this.update.bind(this))}});var ThrottleGauge=Class.create({initialize:function(datalink,gaugeID){this.datalink=datalink;this.gaugeID=gaugeID;this.gauge=$(this.gaugeID);this.initializeDatalink()},update:function(data){this.gauge.value=data["f.throttle"]*100;this.gauge.max=100},initializeDatalink:function(){this.datalink.subscribeToData(["f.throttle"]);this.datalink.addReceiverFunction(this.update.bind(this))}});L.Graticule=L.GeoJSON.extend({options:{style:{color:"#333",weight:1},interval:20},initialize:function(options){L.Util.setOptions(this,options);this._layers={};if(this.options.sphere){this.addData(this._getFrame())}else{this.addData(this._getGraticule())}},_getFrame:function(){return{type:"Polygon",coordinates:[this._getMeridian(-180).concat(this._getMeridian(180).reverse())]}},_getGraticule:function(){var features=[],interval=this.options.interval;for(var lng=0;lng<=180;lng=lng+interval){features.push(this._getFeature(this._getMeridian(lng),{name:lng?lng.toString()+"° E":"Prime meridian"}));if(lng!==0){features.push(this._getFeature(this._getMeridian(-lng),{name:lng.toString()+"° W"}))}}for(var lat=0;lat<=90;lat=lat+interval){features.push(this._getFeature(this._getParallel(lat),{name:lat?lat.toString()+"° N":"Equator"}));if(lat!==0){features.push(this._getFeature(this._getParallel(-lat),{name:lat.toString()+"° S"}))}}return{type:"FeatureCollection",features:features}},_getMeridian:function(lng){lng=this._lngFix(lng);var coords=[];for(var lat=-90;lat<=90;lat++){coords.push([lng,lat])}return coords},_getParallel:function(lat){var coords=[];for(var lng=-180;lng<=180;lng++){coords.push([this._lngFix(lng),lat])}return coords},_getFeature:function(coords,prop){return{type:"Feature",geometry:{type:"LineString",coordinates:coords},properties:prop}},_lngFix:function(lng){if(lng>=180)return 179.999999;if(lng<=-180)return-179.999999;return lng}});L.graticule=function(options){return new L.Graticule(options)};var PositionMap=Class.create({initialize:function(datalink,mapId,options){this.datalink=datalink;this.mapId=mapId;this.noMapIndicatorId=mapId+"-no-map";this.previousBody="KERBIN";this.options=Object.extend({lockOnVessel:true},options);this.initializeMap();this.initializeNoMapIndicator();this.initializeDatalink()},update:function(data){window.requestAnimationFrame(function(){if(this.isMapAvailable(data)){this.showMap();this.updateBodyIfNecessary(data);this.setCoordinatesForMapObject(this.coordinates,data["v.lat"],data["v.long"]);if(this.options.lockOnVessel){this.map.panTo([data["v.lat"],data["v.long"]])}}else{this.hideMap()}}.bind(this))},updateBodyIfNecessary:function(data){var bodyName=data["v.body"].toUpperCase();if(this.previousBody!=bodyName){newBody=L.KSP.CelestialBody[bodyName];newBody.addTo(this.map);this.previousBody=bodyName}},initializeMap:function(){this.map=new L.KSP.Map(this.mapId,{layers:[L.KSP.CelestialBody[this.previousBody.toUpperCase()]],zoom:"fit",bodyControl:false,layerControl:true,scaleControl:true});this.map.fitWorld();L.graticule().addTo(this.map);var circleMarkerOptions={color:"#FD7E23",opacity:1,fillOpacity:1,radius:5};this.coordinates=L.circleMarker([0,0],circleMarkerOptions);this.coordinates.addTo(this.map)},convertCoordinatesToMap:function(latitude,longitude){return[latitude,longitude>180?longitude-360:longitude]},setCoordinatesForMapObject:function(object,latitude,longitude){var convertedCoordinates=this.convertCoordinatesToMap(latitude,longitude);object.setLatLng([convertedCoordinates[0],convertedCoordinates[1]])},isMapAvailable:function(data){return data["v.body"].toUpperCase()!="SUN"},hideMap:function(){$(this.mapId).hide();this.noMapIndicator.removeClassName("hidden")},showMap:function(){$(this.mapId).show();this.noMapIndicator.addClassName("hidden")},initializeNoMapIndicator:function(){this.noMapIndicator=$(this.noMapIndicatorId)},initializeDatalink:function(){this.datalink.subscribeToData(["v.lat","v.long","v.body"]);this.datalink.addReceiverFunction(this.update.bind(this))}});var OrbitingBodyInfoTable=Class.create({initialize:function(datalink,tableId,options){this.datalink=datalink;this.tableId=tableId;this.currentBody=null;this.currentBodyId=null;this.initializeTable();this.initializeDatalink()},update:function(data){if(this.bodyChanged(data)){this.updateReadoutTableRows(data)}},propertyForBody:function(property){return"b."+property+"["+this.currentBodyId+"]"},updateReadoutTableRows:function(data){this.currentBody=data["v.body"];this.currentBodyId=this.datalink.getOrbitalBodyInfo(this.currentBody).id;var newTableRows=[{label:"Name",value:this.propertyForBody("name"),formatter:function(value){return value}},{label:"Radius",value:this.propertyForBody("radius"),formatter:function(value){return DataFormatters.distanceString(value)}},{label:"Atmosphere Contains O2?",value:this.propertyForBody("atmosphereContainsOxygen"),formatter:function(value){return value}},{label:"Sphere of Influence",value:this.propertyForBody("soi"),formatter:function(value){return value}},{label:"Max Atmospheric Density",value:this.propertyForBody("maxAtmosphere"),formatter:function(value){return value}},{label:"Tidally Locked?",value:this.propertyForBody("tidallyLocked"),formatter:function(value){return value}},{label:"GravitationalParameter",value:this.propertyForBody("o.gravParameter"),formatter:function(value){return value}},{label:"Body's Relative Velocity",value:this.propertyForBody("o.relativeVelocity"),formatter:function(value){return DataFormatters.velocityString(value)}},{label:"Apoapsis",value:this.propertyForBody("o.ApA"),formatter:function(value){return DataFormatters.distanceString(value)}},{label:"Periapsis",value:this.propertyForBody("o.PeA"),formatter:function(value){return DataFormatters.distanceString(value)}},{label:"Time to Apoapsis",value:this.propertyForBody("o.timeToAp"),formatter:function(value){return"-"+TimeFormatters.durationString(value)}},{label:"Time to Periapsis",value:this.propertyForBody("o.timeToPe"),formatter:function(value){return"-"+TimeFormatters.durationString(value)}},{label:"Inclination",value:this.propertyForBody("o.inclination"),formatter:function(value){return DataFormatters.degreeString(value)}},{label:"Eccentricity",value:this.propertyForBody("o.eccentricity"),formatter:function(value){return value.toFixed(3)}},{label:"Orbital Period",value:this.propertyForBody("o.period"),formatter:function(value){return TimeFormatters.durationString(value)}},{label:"True Anomaly",value:this.propertyForBody("o.trueAnomaly"),formatter:function(value){return DataFormatters.degreeString(value)}}];var fieldsToSubscribeTo=newTableRows.map(function(newTableRow){return newTableRow.value});this.datalink.subscribeToData(fieldsToSubscribeTo);this.table.dataRows=newTableRows},bodyChanged:function(data){return this.currentBody!=data["v.body"]},initializeTable:function(){this.table=new ReadoutTable(datalink,this.tableId,[])},initializeDatalink:function(){this.datalink.subscribeToData(["v.body"]);this.datalink.addReceiverFunction(this.update.bind(this))}}); \ No newline at end of file +Math.cosh = Math.cosh || function(x) { + return (Math.exp(x) + Math.exp(-x)) / 2; +} + +Math.sinh = Math.sinh || function(x) { + return (Math.exp(x) - Math.exp(-x)) / 2; +}; + +Math.matrixAdd = Math.matrixAdd || function(){ + var arrays= arguments, results= [], + count= arrays[0].length, L= arrays.length, + sum, next= 0, i; + while(next-1?e(a,b,c):b.indexOf("%")>-1?f(a,b,c):b.indexOf(":")>-1?g(a,b):i(a._value,b,c)}function d(a,b){var c,d,e,f,g,i=b,j=["KB","MB","GB","TB","PB","EB","ZB","YB"],k=!1;if(b.indexOf(":")>-1)a._value=h(b);else if(b===q)a._value=0;else{for("."!==o[p].delimiters.decimal&&(b=b.replace(/\./g,"").replace(o[p].delimiters.decimal,".")),c=new RegExp("[^a-zA-Z]"+o[p].abbreviations.thousand+"(?:\\)|(\\"+o[p].currency.symbol+")?(?:\\))?)?$"),d=new RegExp("[^a-zA-Z]"+o[p].abbreviations.million+"(?:\\)|(\\"+o[p].currency.symbol+")?(?:\\))?)?$"),e=new RegExp("[^a-zA-Z]"+o[p].abbreviations.billion+"(?:\\)|(\\"+o[p].currency.symbol+")?(?:\\))?)?$"),f=new RegExp("[^a-zA-Z]"+o[p].abbreviations.trillion+"(?:\\)|(\\"+o[p].currency.symbol+")?(?:\\))?)?$"),g=0;g<=j.length&&!(k=b.indexOf(j[g])>-1?Math.pow(1024,g+1):!1);g++);a._value=(k?k:1)*(i.match(c)?Math.pow(10,3):1)*(i.match(d)?Math.pow(10,6):1)*(i.match(e)?Math.pow(10,9):1)*(i.match(f)?Math.pow(10,12):1)*(b.indexOf("%")>-1?.01:1)*((b.split("-").length+Math.min(b.split("(").length-1,b.split(")").length-1))%2?1:-1)*Number(b.replace(/[^0-9\.]+/g,"")),a._value=k?Math.ceil(a._value):a._value}return a._value}function e(a,b,c){var d,e,f=b.indexOf("$"),g=b.indexOf("("),h=b.indexOf("-"),j="";return b.indexOf(" $")>-1?(j=" ",b=b.replace(" $","")):b.indexOf("$ ")>-1?(j=" ",b=b.replace("$ ","")):b=b.replace("$",""),e=i(a._value,b,c),1>=f?e.indexOf("(")>-1||e.indexOf("-")>-1?(e=e.split(""),d=1,(g>f||h>f)&&(d=0),e.splice(d,0,o[p].currency.symbol+j),e=e.join("")):e=o[p].currency.symbol+j+e:e.indexOf(")")>-1?(e=e.split(""),e.splice(-1,0,j+o[p].currency.symbol),e=e.join("")):e=e+j+o[p].currency.symbol,e}function f(a,b,c){var d,e="",f=100*a._value;return b.indexOf(" %")>-1?(e=" ",b=b.replace(" %","")):b=b.replace("%",""),d=i(f,b,c),d.indexOf(")")>-1?(d=d.split(""),d.splice(-1,0,e+"%"),d=d.join("")):d=d+e+"%",d}function g(a){var b=Math.floor(a._value/60/60),c=Math.floor((a._value-60*b*60)/60),d=Math.round(a._value-60*b*60-60*c);return b+":"+(10>c?"0"+c:c)+":"+(10>d?"0"+d:d)}function h(a){var b=a.split(":"),c=0;return 3===b.length?(c+=60*Number(b[0])*60,c+=60*Number(b[1]),c+=Number(b[2])):2===b.length&&(c+=60*Number(b[0]),c+=Number(b[1])),Number(c)}function i(a,c,d){var e,f,g,h,i,j,k=!1,l=!1,m=!1,n="",r=!1,s=!1,t=!1,u=!1,v=!1,w="",x="",y=Math.abs(a),z=["B","KB","MB","GB","TB","PB","EB","ZB","YB"],A="",B=!1;if(0===a&&null!==q)return q;if(c.indexOf("(")>-1?(k=!0,c=c.slice(1,-1)):c.indexOf("+")>-1&&(l=!0,c=c.replace(/\+/g,"")),c.indexOf("a")>-1&&(r=c.indexOf("aK")>=0,s=c.indexOf("aM")>=0,t=c.indexOf("aB")>=0,u=c.indexOf("aT")>=0,v=r||s||t||u,c.indexOf(" a")>-1?(n=" ",c=c.replace(" a","")):c=c.replace("a",""),y>=Math.pow(10,12)&&!v||u?(n+=o[p].abbreviations.trillion,a/=Math.pow(10,12)):y=Math.pow(10,9)&&!v||t?(n+=o[p].abbreviations.billion,a/=Math.pow(10,9)):y=Math.pow(10,6)&&!v||s?(n+=o[p].abbreviations.million,a/=Math.pow(10,6)):(y=Math.pow(10,3)&&!v||r)&&(n+=o[p].abbreviations.thousand,a/=Math.pow(10,3))),c.indexOf("b")>-1)for(c.indexOf(" b")>-1?(w=" ",c=c.replace(" b","")):c=c.replace("b",""),g=0;g<=z.length;g++)if(e=Math.pow(1024,g),f=Math.pow(1024,g+1),a>=e&&f>a){w+=z[g],e>0&&(a/=e);break}return c.indexOf("o")>-1&&(c.indexOf(" o")>-1?(x=" ",c=c.replace(" o","")):c=c.replace("o",""),x+=o[p].ordinal(a)),c.indexOf("[.]")>-1&&(m=!0,c=c.replace("[.]",".")),h=a.toString().split(".")[0],i=c.split(".")[1],j=c.indexOf(","),i?(i.indexOf("[")>-1?(i=i.replace("]",""),i=i.split("["),A=b(a,i[0].length+i[1].length,d,i[1].length)):A=b(a,i.length,d),h=A.split(".")[0],A=A.split(".")[1].length?o[p].delimiters.decimal+A.split(".")[1]:"",m&&0===Number(A.slice(1))&&(A="")):h=b(a,null,d),h.indexOf("-")>-1&&(h=h.slice(1),B=!0),j>-1&&(h=h.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g,"$1"+o[p].delimiters.thousands)),0===c.indexOf(".")&&(h=""),(k&&B?"(":"")+(!k&&B?"-":"")+(!B&&l?"+":"")+h+A+(x?x:"")+(n?n:"")+(w?w:"")+(k&&B?")":"")}function j(a,b){o[a]=b}function k(a){var b=a.toString().split(".");return b.length<2?1:Math.pow(10,b[1].length)}function l(){var a=Array.prototype.slice.call(arguments);return a.reduce(function(a,b){var c=k(a),d=k(b);return c>d?c:d},-1/0)}var m,n="1.5.3",o={},p="en",q=null,r="0,0",s="undefined"!=typeof module&&module.exports;m=function(b){return m.isNumeral(b)?b=b.value():0===b||"undefined"==typeof b?b=0:Number(b)||(b=m.fn.unformat(b)),new a(Number(b))},m.version=n,m.isNumeral=function(b){return b instanceof a},m.language=function(a,b){if(!a)return p;if(a&&!b){if(!o[a])throw new Error("Unknown language : "+a);p=a}return(b||!o[a])&&j(a,b),m},m.languageData=function(a){if(!a)return o[p];if(!o[a])throw new Error("Unknown language : "+a);return o[a]},m.language("en",{delimiters:{thousands:",",decimal:"."},abbreviations:{thousand:"k",million:"m",billion:"b",trillion:"t"},ordinal:function(a){var b=a%10;return 1===~~(a%100/10)?"th":1===b?"st":2===b?"nd":3===b?"rd":"th"},currency:{symbol:"$"}}),m.zeroFormat=function(a){q="string"==typeof a?a:null},m.defaultFormat=function(a){r="string"==typeof a?a:"0.0"},"function"!=typeof Array.prototype.reduce&&(Array.prototype.reduce=function(a,b){"use strict";if(null===this||"undefined"==typeof this)throw new TypeError("Array.prototype.reduce called on null or undefined");if("function"!=typeof a)throw new TypeError(a+" is not a function");var c,d,e=this.length>>>0,f=!1;for(1c;++c)this.hasOwnProperty(c)&&(f?d=a(d,this[c],c,this):(d=this[c],f=!0));if(!f)throw new TypeError("Reduce of empty array with no initial value");return d}),m.fn=a.prototype={clone:function(){return m(this)},format:function(a,b){return c(this,a?a:r,void 0!==b?b:Math.round)},unformat:function(a){return"[object Number]"===Object.prototype.toString.call(a)?a:d(this,a?a:r)},value:function(){return this._value},valueOf:function(){return this._value},set:function(a){return this._value=Number(a),this},add:function(a){function b(a,b){return a+c*b}var c=l.call(null,this._value,a);return this._value=[this._value,a].reduce(b,0)/c,this},subtract:function(a){function b(a,b){return a-c*b}var c=l.call(null,this._value,a);return this._value=[a].reduce(b,this._value*c)/c,this},multiply:function(a){function b(a,b){var c=l(a,b);return a*c*b*c/(c*c)}return this._value=[this._value,a].reduce(b,1),this},divide:function(a){function b(a,b){var c=l(a,b);return a*c/(b*c)}return this._value=[this._value,a].reduce(b),this},difference:function(a){return Math.abs(m(this._value).subtract(a).value())}},s&&(module.exports=m),"undefined"==typeof ender&&(this.numeral=m),"function"==typeof define&&define.amd&&define([],function(){return m})}).call(this); +// Extracted Richard Bunt's work in Telemachus: https://github.com/richardbunt/Telemachus/blob/master/WebPages/WebPages/src/console.js + +var TimeFormatters = { + formatUT: function(t){ + var day, year; + if (t == null) { + t = 0; + } + year = ((t / (365 * 24 * 3600)) | 0) + 1; + t %= 365 * 24 * 3600; + day = ((t / (24 * 3600)) | 0) + 1; + t %= 24 * 3600; + return "Year " + year + ", Day " + day + ", " + (this.hourMinSec(t)) + " UT"; + }, + + formatMET: function(t){ + var result; + if (t == null) { + t = 0; + } + result = "T+"; + if (t >= 365 * 24 * 3600) { + result += (t / (365 * 24 * 3600) | 0) + ":"; + t %= 365 * 24 * 3600; + if (t < 24 * 3600) { + result += "0:"; + } + } + if (t >= 24 * 3600) { + result += (t / (24 * 3600) | 0) + ":"; + } + t %= 24 * 3600; + return result + this.hourMinSec(t) + " MET"; + }, + + hourMinSec: function(t) { + var hour, min, sec; + if (t == null) { + t = 0; + } + hour = (t / 3600) | 0; + if (hour < 10) { + hour = "0" + hour; + } + t %= 3600; + min = (t / 60) | 0; + if (min < 10) { + min = "0" + min; + } + sec = (t % 60 | 0).toFixed(); + if (sec < 10) { + sec = "0" + sec; + } + return "" + hour + ":" + min + ":" + sec; + }, + + durationString: function(t) { + var result; + if (t == null) { + t = 0; + } + result = t < 0 ? "-" : ""; + t = Math.abs(t); + if (t >= 365 * 24 * 3600) { + result += (t / (365 * 24 * 3600) | 0) + " years "; + t %= 365 * 24 * 3600; + if (t < 24 * 3600) { + result += "0 days "; + } + } + if (t >= 24 * 3600) { + result += (t / (24 * 3600) | 0) + " days "; + } + t %= 24 * 3600; + return result + this.hourMinSec(t); + } +} +var DataFormatters = { + distanceString: function(value){ + return numeral(value).format('0,0.000 a') + "m" + }, + + heightFromTerrainString: function(value){ + if(value <= -1 ){ return "NA" } + return numeral(value).format('0,0.000 a') + "m" + }, + + degreeString: function(value){ + return numeral(value).format('0.000') + "°" + }, + + velocityString: function(value){ + return numeral(value).format('0,0.000 a') + "m/s" + }, + + temperatureString: function(value){ + if(!value){return "NA"} + return numeral(value).format('0,000') + "°C" + }, + + accelerationSensorString: function(value){ + if(value[0] == "No Sensors of the Appropriate Type"){return "NA"} + return numeral(value[1][0]).format('0,000') + "G" + }, + + pressureSensorString: function(value){ + if(value[0] == "No Sensors of the Appropriate Type"){return "NA"} + return numeral(value[1][0]).format('0,000') + "Pa" + }, + + gravitySensorString: function(value){ + if(value[0] == "No Sensors of the Appropriate Type"){return "NA"} + return numeral(value[1][0]).format('0,000 a') + "m/s²" + }, + + newtonsString: function(value){ + return numeral(value).format('0,0.00') + " N" + }, + + percentageString: function(value){ + return numeral(value).format("0%") + }, + + tonnageString: function(value){ + return numeral(value).format("0,0.00") + " t" + }, + + timeString: function(value){ + return numeral(value).format('00:00:00') + }, + + plainNumberString: function(value){ + return numeral(value).format("0,0.00") + } +} +/* Prototype JavaScript framework, version 1.7.2 + * (c) 2005-2010 Sam Stephenson + * + * Prototype is freely distributable under the terms of an MIT-style license. + * For details, see the Prototype web site: http://www.prototypejs.org/ + * + *--------------------------------------------------------------------------*/ + +var Prototype = { + + Version: '1.7.2', + + Browser: (function(){ + var ua = navigator.userAgent; + var isOpera = Object.prototype.toString.call(window.opera) == '[object Opera]'; + return { + IE: !!window.attachEvent && !isOpera, + Opera: isOpera, + WebKit: ua.indexOf('AppleWebKit/') > -1, + Gecko: ua.indexOf('Gecko') > -1 && ua.indexOf('KHTML') === -1, + MobileSafari: /Apple.*Mobile/.test(ua) + } + })(), + + BrowserFeatures: { + XPath: !!document.evaluate, + + SelectorsAPI: !!document.querySelector, + + ElementExtensions: (function() { + var constructor = window.Element || window.HTMLElement; + return !!(constructor && constructor.prototype); + })(), + SpecificElementExtensions: (function() { + if (typeof window.HTMLDivElement !== 'undefined') + return true; + + var div = document.createElement('div'), + form = document.createElement('form'), + isSupported = false; + + if (div['__proto__'] && (div['__proto__'] !== form['__proto__'])) { + isSupported = true; + } + + div = form = null; + + return isSupported; + })() + }, + + ScriptFragment: ']*>([\\S\\s]*?)<\/script\\s*>', + JSONFilter: /^\/\*-secure-([\s\S]*)\*\/\s*$/, + + emptyFunction: function() { }, + + K: function(x) { return x } +}; + +if (Prototype.Browser.MobileSafari) + Prototype.BrowserFeatures.SpecificElementExtensions = false; +/* Based on Alex Arnell's inheritance implementation. */ + +var Class = (function() { + + var IS_DONTENUM_BUGGY = (function(){ + for (var p in { toString: 1 }) { + if (p === 'toString') return false; + } + return true; + })(); + + function subclass() {}; + function create() { + var parent = null, properties = $A(arguments); + if (Object.isFunction(properties[0])) + parent = properties.shift(); + + function klass() { + this.initialize.apply(this, arguments); + } + + Object.extend(klass, Class.Methods); + klass.superclass = parent; + klass.subclasses = []; + + if (parent) { + subclass.prototype = parent.prototype; + klass.prototype = new subclass; + parent.subclasses.push(klass); + } + + for (var i = 0, length = properties.length; i < length; i++) + klass.addMethods(properties[i]); + + if (!klass.prototype.initialize) + klass.prototype.initialize = Prototype.emptyFunction; + + klass.prototype.constructor = klass; + return klass; + } + + function addMethods(source) { + var ancestor = this.superclass && this.superclass.prototype, + properties = Object.keys(source); + + if (IS_DONTENUM_BUGGY) { + if (source.toString != Object.prototype.toString) + properties.push("toString"); + if (source.valueOf != Object.prototype.valueOf) + properties.push("valueOf"); + } + + for (var i = 0, length = properties.length; i < length; i++) { + var property = properties[i], value = source[property]; + if (ancestor && Object.isFunction(value) && + value.argumentNames()[0] == "$super") { + var method = value; + value = (function(m) { + return function() { return ancestor[m].apply(this, arguments); }; + })(property).wrap(method); + + value.valueOf = (function(method) { + return function() { return method.valueOf.call(method); }; + })(method); + + value.toString = (function(method) { + return function() { return method.toString.call(method); }; + })(method); + } + this.prototype[property] = value; + } + + return this; + } + + return { + create: create, + Methods: { + addMethods: addMethods + } + }; +})(); +(function() { + + var _toString = Object.prototype.toString, + _hasOwnProperty = Object.prototype.hasOwnProperty, + NULL_TYPE = 'Null', + UNDEFINED_TYPE = 'Undefined', + BOOLEAN_TYPE = 'Boolean', + NUMBER_TYPE = 'Number', + STRING_TYPE = 'String', + OBJECT_TYPE = 'Object', + FUNCTION_CLASS = '[object Function]', + BOOLEAN_CLASS = '[object Boolean]', + NUMBER_CLASS = '[object Number]', + STRING_CLASS = '[object String]', + ARRAY_CLASS = '[object Array]', + DATE_CLASS = '[object Date]', + NATIVE_JSON_STRINGIFY_SUPPORT = window.JSON && + typeof JSON.stringify === 'function' && + JSON.stringify(0) === '0' && + typeof JSON.stringify(Prototype.K) === 'undefined'; + + + + var DONT_ENUMS = ['toString', 'toLocaleString', 'valueOf', + 'hasOwnProperty', 'isPrototypeOf', 'propertyIsEnumerable', 'constructor']; + + var IS_DONTENUM_BUGGY = (function(){ + for (var p in { toString: 1 }) { + if (p === 'toString') return false; + } + return true; + })(); + + function Type(o) { + switch(o) { + case null: return NULL_TYPE; + case (void 0): return UNDEFINED_TYPE; + } + var type = typeof o; + switch(type) { + case 'boolean': return BOOLEAN_TYPE; + case 'number': return NUMBER_TYPE; + case 'string': return STRING_TYPE; + } + return OBJECT_TYPE; + } + + function extend(destination, source) { + for (var property in source) + destination[property] = source[property]; + return destination; + } + + function inspect(object) { + try { + if (isUndefined(object)) return 'undefined'; + if (object === null) return 'null'; + return object.inspect ? object.inspect() : String(object); + } catch (e) { + if (e instanceof RangeError) return '...'; + throw e; + } + } + + function toJSON(value) { + return Str('', { '': value }, []); + } + + function Str(key, holder, stack) { + var value = holder[key]; + if (Type(value) === OBJECT_TYPE && typeof value.toJSON === 'function') { + value = value.toJSON(key); + } + + var _class = _toString.call(value); + + switch (_class) { + case NUMBER_CLASS: + case BOOLEAN_CLASS: + case STRING_CLASS: + value = value.valueOf(); + } + + switch (value) { + case null: return 'null'; + case true: return 'true'; + case false: return 'false'; + } + + var type = typeof value; + switch (type) { + case 'string': + return value.inspect(true); + case 'number': + return isFinite(value) ? String(value) : 'null'; + case 'object': + + for (var i = 0, length = stack.length; i < length; i++) { + if (stack[i] === value) { + throw new TypeError("Cyclic reference to '" + value + "' in object"); + } + } + stack.push(value); + + var partial = []; + if (_class === ARRAY_CLASS) { + for (var i = 0, length = value.length; i < length; i++) { + var str = Str(i, value, stack); + partial.push(typeof str === 'undefined' ? 'null' : str); + } + partial = '[' + partial.join(',') + ']'; + } else { + var keys = Object.keys(value); + for (var i = 0, length = keys.length; i < length; i++) { + var key = keys[i], str = Str(key, value, stack); + if (typeof str !== "undefined") { + partial.push(key.inspect(true)+ ':' + str); + } + } + partial = '{' + partial.join(',') + '}'; + } + stack.pop(); + return partial; + } + } + + function stringify(object) { + return JSON.stringify(object); + } + + function toQueryString(object) { + return $H(object).toQueryString(); + } + + function toHTML(object) { + return object && object.toHTML ? object.toHTML() : String.interpret(object); + } + + function keys(object) { + if (Type(object) !== OBJECT_TYPE) { throw new TypeError(); } + var results = []; + for (var property in object) { + if (_hasOwnProperty.call(object, property)) + results.push(property); + } + + if (IS_DONTENUM_BUGGY) { + for (var i = 0; property = DONT_ENUMS[i]; i++) { + if (_hasOwnProperty.call(object, property)) + results.push(property); + } + } + + return results; + } + + function values(object) { + var results = []; + for (var property in object) + results.push(object[property]); + return results; + } + + function clone(object) { + return extend({ }, object); + } + + function isElement(object) { + return !!(object && object.nodeType == 1); + } + + function isArray(object) { + return _toString.call(object) === ARRAY_CLASS; + } + + var hasNativeIsArray = (typeof Array.isArray == 'function') + && Array.isArray([]) && !Array.isArray({}); + + if (hasNativeIsArray) { + isArray = Array.isArray; + } + + function isHash(object) { + return object instanceof Hash; + } + + function isFunction(object) { + return _toString.call(object) === FUNCTION_CLASS; + } + + function isString(object) { + return _toString.call(object) === STRING_CLASS; + } + + function isNumber(object) { + return _toString.call(object) === NUMBER_CLASS; + } + + function isDate(object) { + return _toString.call(object) === DATE_CLASS; + } + + function isUndefined(object) { + return typeof object === "undefined"; + } + + extend(Object, { + extend: extend, + inspect: inspect, + toJSON: NATIVE_JSON_STRINGIFY_SUPPORT ? stringify : toJSON, + toQueryString: toQueryString, + toHTML: toHTML, + keys: Object.keys || keys, + values: values, + clone: clone, + isElement: isElement, + isArray: isArray, + isHash: isHash, + isFunction: isFunction, + isString: isString, + isNumber: isNumber, + isDate: isDate, + isUndefined: isUndefined + }); +})(); +Object.extend(Function.prototype, (function() { + var slice = Array.prototype.slice; + + function update(array, args) { + var arrayLength = array.length, length = args.length; + while (length--) array[arrayLength + length] = args[length]; + return array; + } + + function merge(array, args) { + array = slice.call(array, 0); + return update(array, args); + } + + function argumentNames() { + var names = this.toString().match(/^[\s\(]*function[^(]*\(([^)]*)\)/)[1] + .replace(/\/\/.*?[\r\n]|\/\*(?:.|[\r\n])*?\*\//g, '') + .replace(/\s+/g, '').split(','); + return names.length == 1 && !names[0] ? [] : names; + } + + + function bind(context) { + if (arguments.length < 2 && Object.isUndefined(arguments[0])) + return this; + + if (!Object.isFunction(this)) + throw new TypeError("The object is not callable."); + + var nop = function() {}; + var __method = this, args = slice.call(arguments, 1); + + var bound = function() { + var a = merge(args, arguments); + var c = this instanceof bound ? this : context; + return __method.apply(c, a); + }; + + nop.prototype = this.prototype; + bound.prototype = new nop(); + + return bound; + } + + function bindAsEventListener(context) { + var __method = this, args = slice.call(arguments, 1); + return function(event) { + var a = update([event || window.event], args); + return __method.apply(context, a); + } + } + + function curry() { + if (!arguments.length) return this; + var __method = this, args = slice.call(arguments, 0); + return function() { + var a = merge(args, arguments); + return __method.apply(this, a); + } + } + + function delay(timeout) { + var __method = this, args = slice.call(arguments, 1); + timeout = timeout * 1000; + return window.setTimeout(function() { + return __method.apply(__method, args); + }, timeout); + } + + function defer() { + var args = update([0.01], arguments); + return this.delay.apply(this, args); + } + + function wrap(wrapper) { + var __method = this; + return function() { + var a = update([__method.bind(this)], arguments); + return wrapper.apply(this, a); + } + } + + function methodize() { + if (this._methodized) return this._methodized; + var __method = this; + return this._methodized = function() { + var a = update([this], arguments); + return __method.apply(null, a); + }; + } + + var extensions = { + argumentNames: argumentNames, + bindAsEventListener: bindAsEventListener, + curry: curry, + delay: delay, + defer: defer, + wrap: wrap, + methodize: methodize + }; + + if (!Function.prototype.bind) + extensions.bind = bind; + + return extensions; +})()); + + + +(function(proto) { + + + function toISOString() { + return this.getUTCFullYear() + '-' + + (this.getUTCMonth() + 1).toPaddedString(2) + '-' + + this.getUTCDate().toPaddedString(2) + 'T' + + this.getUTCHours().toPaddedString(2) + ':' + + this.getUTCMinutes().toPaddedString(2) + ':' + + this.getUTCSeconds().toPaddedString(2) + 'Z'; + } + + + function toJSON() { + return this.toISOString(); + } + + if (!proto.toISOString) proto.toISOString = toISOString; + if (!proto.toJSON) proto.toJSON = toJSON; + +})(Date.prototype); + + +RegExp.prototype.match = RegExp.prototype.test; + +RegExp.escape = function(str) { + return String(str).replace(/([.*+?^=!:${}()|[\]\/\\])/g, '\\$1'); +}; +var PeriodicalExecuter = Class.create({ + initialize: function(callback, frequency) { + this.callback = callback; + this.frequency = frequency; + this.currentlyExecuting = false; + + this.registerCallback(); + }, + + registerCallback: function() { + this.timer = setInterval(this.onTimerEvent.bind(this), this.frequency * 1000); + }, + + execute: function() { + this.callback(this); + }, + + stop: function() { + if (!this.timer) return; + clearInterval(this.timer); + this.timer = null; + }, + + onTimerEvent: function() { + if (!this.currentlyExecuting) { + try { + this.currentlyExecuting = true; + this.execute(); + this.currentlyExecuting = false; + } catch(e) { + this.currentlyExecuting = false; + throw e; + } + } + } +}); +Object.extend(String, { + interpret: function(value) { + return value == null ? '' : String(value); + }, + specialChar: { + '\b': '\\b', + '\t': '\\t', + '\n': '\\n', + '\f': '\\f', + '\r': '\\r', + '\\': '\\\\' + } +}); + +Object.extend(String.prototype, (function() { + var NATIVE_JSON_PARSE_SUPPORT = window.JSON && + typeof JSON.parse === 'function' && + JSON.parse('{"test": true}').test; + + function prepareReplacement(replacement) { + if (Object.isFunction(replacement)) return replacement; + var template = new Template(replacement); + return function(match) { return template.evaluate(match) }; + } + + function isNonEmptyRegExp(regexp) { + return regexp.source && regexp.source !== '(?:)'; + } + + + function gsub(pattern, replacement) { + var result = '', source = this, match; + replacement = prepareReplacement(replacement); + + if (Object.isString(pattern)) + pattern = RegExp.escape(pattern); + + if (!(pattern.length || isNonEmptyRegExp(pattern))) { + replacement = replacement(''); + return replacement + source.split('').join(replacement) + replacement; + } + + while (source.length > 0) { + match = source.match(pattern) + if (match && match[0].length > 0) { + result += source.slice(0, match.index); + result += String.interpret(replacement(match)); + source = source.slice(match.index + match[0].length); + } else { + result += source, source = ''; + } + } + return result; + } + + function sub(pattern, replacement, count) { + replacement = prepareReplacement(replacement); + count = Object.isUndefined(count) ? 1 : count; + + return this.gsub(pattern, function(match) { + if (--count < 0) return match[0]; + return replacement(match); + }); + } + + function scan(pattern, iterator) { + this.gsub(pattern, iterator); + return String(this); + } + + function truncate(length, truncation) { + length = length || 30; + truncation = Object.isUndefined(truncation) ? '...' : truncation; + return this.length > length ? + this.slice(0, length - truncation.length) + truncation : String(this); + } + + function strip() { + return this.replace(/^\s+/, '').replace(/\s+$/, ''); + } + + function stripTags() { + return this.replace(/<\w+(\s+("[^"]*"|'[^']*'|[^>])+)?>|<\/\w+>/gi, ''); + } + + function stripScripts() { + return this.replace(new RegExp(Prototype.ScriptFragment, 'img'), ''); + } + + function extractScripts() { + var matchAll = new RegExp(Prototype.ScriptFragment, 'img'), + matchOne = new RegExp(Prototype.ScriptFragment, 'im'); + return (this.match(matchAll) || []).map(function(scriptTag) { + return (scriptTag.match(matchOne) || ['', ''])[1]; + }); + } + + function evalScripts() { + return this.extractScripts().map(function(script) { return eval(script); }); + } + + function escapeHTML() { + return this.replace(/&/g,'&').replace(//g,'>'); + } + + function unescapeHTML() { + return this.stripTags().replace(/</g,'<').replace(/>/g,'>').replace(/&/g,'&'); + } + + + function toQueryParams(separator) { + var match = this.strip().match(/([^?#]*)(#.*)?$/); + if (!match) return { }; + + return match[1].split(separator || '&').inject({ }, function(hash, pair) { + if ((pair = pair.split('='))[0]) { + var key = decodeURIComponent(pair.shift()), + value = pair.length > 1 ? pair.join('=') : pair[0]; + + if (value != undefined) { + value = value.gsub('+', ' '); + value = decodeURIComponent(value); + } + + if (key in hash) { + if (!Object.isArray(hash[key])) hash[key] = [hash[key]]; + hash[key].push(value); + } + else hash[key] = value; + } + return hash; + }); + } + + function toArray() { + return this.split(''); + } + + function succ() { + return this.slice(0, this.length - 1) + + String.fromCharCode(this.charCodeAt(this.length - 1) + 1); + } + + function times(count) { + return count < 1 ? '' : new Array(count + 1).join(this); + } + + function camelize() { + return this.replace(/-+(.)?/g, function(match, chr) { + return chr ? chr.toUpperCase() : ''; + }); + } + + function capitalize() { + return this.charAt(0).toUpperCase() + this.substring(1).toLowerCase(); + } + + function underscore() { + return this.replace(/::/g, '/') + .replace(/([A-Z]+)([A-Z][a-z])/g, '$1_$2') + .replace(/([a-z\d])([A-Z])/g, '$1_$2') + .replace(/-/g, '_') + .toLowerCase(); + } + + function dasherize() { + return this.replace(/_/g, '-'); + } + + function inspect(useDoubleQuotes) { + var escapedString = this.replace(/[\x00-\x1f\\]/g, function(character) { + if (character in String.specialChar) { + return String.specialChar[character]; + } + return '\\u00' + character.charCodeAt().toPaddedString(2, 16); + }); + if (useDoubleQuotes) return '"' + escapedString.replace(/"/g, '\\"') + '"'; + return "'" + escapedString.replace(/'/g, '\\\'') + "'"; + } + + function unfilterJSON(filter) { + return this.replace(filter || Prototype.JSONFilter, '$1'); + } + + function isJSON() { + var str = this; + if (str.blank()) return false; + str = str.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@'); + str = str.replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']'); + str = str.replace(/(?:^|:|,)(?:\s*\[)+/g, ''); + return (/^[\],:{}\s]*$/).test(str); + } + + function evalJSON(sanitize) { + var json = this.unfilterJSON(), + cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g; + if (cx.test(json)) { + json = json.replace(cx, function (a) { + return '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4); + }); + } + try { + if (!sanitize || json.isJSON()) return eval('(' + json + ')'); + } catch (e) { } + throw new SyntaxError('Badly formed JSON string: ' + this.inspect()); + } + + function parseJSON() { + var json = this.unfilterJSON(); + return JSON.parse(json); + } + + function include(pattern) { + return this.indexOf(pattern) > -1; + } + + function startsWith(pattern, position) { + position = Object.isNumber(position) ? position : 0; + return this.lastIndexOf(pattern, position) === position; + } + + function endsWith(pattern, position) { + pattern = String(pattern); + position = Object.isNumber(position) ? position : this.length; + if (position < 0) position = 0; + if (position > this.length) position = this.length; + var d = position - pattern.length; + return d >= 0 && this.indexOf(pattern, d) === d; + } + + function empty() { + return this == ''; + } + + function blank() { + return /^\s*$/.test(this); + } + + function interpolate(object, pattern) { + return new Template(this, pattern).evaluate(object); + } + + return { + gsub: gsub, + sub: sub, + scan: scan, + truncate: truncate, + strip: String.prototype.trim || strip, + stripTags: stripTags, + stripScripts: stripScripts, + extractScripts: extractScripts, + evalScripts: evalScripts, + escapeHTML: escapeHTML, + unescapeHTML: unescapeHTML, + toQueryParams: toQueryParams, + parseQuery: toQueryParams, + toArray: toArray, + succ: succ, + times: times, + camelize: camelize, + capitalize: capitalize, + underscore: underscore, + dasherize: dasherize, + inspect: inspect, + unfilterJSON: unfilterJSON, + isJSON: isJSON, + evalJSON: NATIVE_JSON_PARSE_SUPPORT ? parseJSON : evalJSON, + include: include, + startsWith: String.prototype.startsWith || startsWith, + endsWith: String.prototype.endsWith || endsWith, + empty: empty, + blank: blank, + interpolate: interpolate + }; +})()); + +var Template = Class.create({ + initialize: function(template, pattern) { + this.template = template.toString(); + this.pattern = pattern || Template.Pattern; + }, + + evaluate: function(object) { + if (object && Object.isFunction(object.toTemplateReplacements)) + object = object.toTemplateReplacements(); + + return this.template.gsub(this.pattern, function(match) { + if (object == null) return (match[1] + ''); + + var before = match[1] || ''; + if (before == '\\') return match[2]; + + var ctx = object, expr = match[3], + pattern = /^([^.[]+|\[((?:.*?[^\\])?)\])(\.|\[|$)/; + + match = pattern.exec(expr); + if (match == null) return before; + + while (match != null) { + var comp = match[1].startsWith('[') ? match[2].replace(/\\\\]/g, ']') : match[1]; + ctx = ctx[comp]; + if (null == ctx || '' == match[3]) break; + expr = expr.substring('[' == match[3] ? match[1].length : match[0].length); + match = pattern.exec(expr); + } + + return before + String.interpret(ctx); + }); + } +}); +Template.Pattern = /(^|.|\r|\n)(#\{(.*?)\})/; + +var $break = { }; + +var Enumerable = (function() { + function each(iterator, context) { + try { + this._each(iterator, context); + } catch (e) { + if (e != $break) throw e; + } + return this; + } + + function eachSlice(number, iterator, context) { + var index = -number, slices = [], array = this.toArray(); + if (number < 1) return array; + while ((index += number) < array.length) + slices.push(array.slice(index, index+number)); + return slices.collect(iterator, context); + } + + function all(iterator, context) { + iterator = iterator || Prototype.K; + var result = true; + this.each(function(value, index) { + result = result && !!iterator.call(context, value, index, this); + if (!result) throw $break; + }, this); + return result; + } + + function any(iterator, context) { + iterator = iterator || Prototype.K; + var result = false; + this.each(function(value, index) { + if (result = !!iterator.call(context, value, index, this)) + throw $break; + }, this); + return result; + } + + function collect(iterator, context) { + iterator = iterator || Prototype.K; + var results = []; + this.each(function(value, index) { + results.push(iterator.call(context, value, index, this)); + }, this); + return results; + } + + function detect(iterator, context) { + var result; + this.each(function(value, index) { + if (iterator.call(context, value, index, this)) { + result = value; + throw $break; + } + }, this); + return result; + } + + function findAll(iterator, context) { + var results = []; + this.each(function(value, index) { + if (iterator.call(context, value, index, this)) + results.push(value); + }, this); + return results; + } + + function grep(filter, iterator, context) { + iterator = iterator || Prototype.K; + var results = []; + + if (Object.isString(filter)) + filter = new RegExp(RegExp.escape(filter)); + + this.each(function(value, index) { + if (filter.match(value)) + results.push(iterator.call(context, value, index, this)); + }, this); + return results; + } + + function include(object) { + if (Object.isFunction(this.indexOf) && this.indexOf(object) != -1) + return true; + + var found = false; + this.each(function(value) { + if (value == object) { + found = true; + throw $break; + } + }); + return found; + } + + function inGroupsOf(number, fillWith) { + fillWith = Object.isUndefined(fillWith) ? null : fillWith; + return this.eachSlice(number, function(slice) { + while(slice.length < number) slice.push(fillWith); + return slice; + }); + } + + function inject(memo, iterator, context) { + this.each(function(value, index) { + memo = iterator.call(context, memo, value, index, this); + }, this); + return memo; + } + + function invoke(method) { + var args = $A(arguments).slice(1); + return this.map(function(value) { + return value[method].apply(value, args); + }); + } + + function max(iterator, context) { + iterator = iterator || Prototype.K; + var result; + this.each(function(value, index) { + value = iterator.call(context, value, index, this); + if (result == null || value >= result) + result = value; + }, this); + return result; + } + + function min(iterator, context) { + iterator = iterator || Prototype.K; + var result; + this.each(function(value, index) { + value = iterator.call(context, value, index, this); + if (result == null || value < result) + result = value; + }, this); + return result; + } + + function partition(iterator, context) { + iterator = iterator || Prototype.K; + var trues = [], falses = []; + this.each(function(value, index) { + (iterator.call(context, value, index, this) ? + trues : falses).push(value); + }, this); + return [trues, falses]; + } + + function pluck(property) { + var results = []; + this.each(function(value) { + results.push(value[property]); + }); + return results; + } + + function reject(iterator, context) { + var results = []; + this.each(function(value, index) { + if (!iterator.call(context, value, index, this)) + results.push(value); + }, this); + return results; + } + + function sortBy(iterator, context) { + return this.map(function(value, index) { + return { + value: value, + criteria: iterator.call(context, value, index, this) + }; + }, this).sort(function(left, right) { + var a = left.criteria, b = right.criteria; + return a < b ? -1 : a > b ? 1 : 0; + }).pluck('value'); + } + + function toArray() { + return this.map(); + } + + function zip() { + var iterator = Prototype.K, args = $A(arguments); + if (Object.isFunction(args.last())) + iterator = args.pop(); + + var collections = [this].concat(args).map($A); + return this.map(function(value, index) { + return iterator(collections.pluck(index)); + }); + } + + function size() { + return this.toArray().length; + } + + function inspect() { + return '#'; + } + + + + + + + + + + return { + each: each, + eachSlice: eachSlice, + all: all, + every: all, + any: any, + some: any, + collect: collect, + map: collect, + detect: detect, + findAll: findAll, + select: findAll, + filter: findAll, + grep: grep, + include: include, + member: include, + inGroupsOf: inGroupsOf, + inject: inject, + invoke: invoke, + max: max, + min: min, + partition: partition, + pluck: pluck, + reject: reject, + sortBy: sortBy, + toArray: toArray, + entries: toArray, + zip: zip, + size: size, + inspect: inspect, + find: detect + }; +})(); + +function $A(iterable) { + if (!iterable) return []; + if ('toArray' in Object(iterable)) return iterable.toArray(); + var length = iterable.length || 0, results = new Array(length); + while (length--) results[length] = iterable[length]; + return results; +} + + +function $w(string) { + if (!Object.isString(string)) return []; + string = string.strip(); + return string ? string.split(/\s+/) : []; +} + +Array.from = $A; + + +(function() { + var arrayProto = Array.prototype, + slice = arrayProto.slice, + _each = arrayProto.forEach; // use native browser JS 1.6 implementation if available + + function each(iterator, context) { + for (var i = 0, length = this.length >>> 0; i < length; i++) { + if (i in this) iterator.call(context, this[i], i, this); + } + } + if (!_each) _each = each; + + function clear() { + this.length = 0; + return this; + } + + function first() { + return this[0]; + } + + function last() { + return this[this.length - 1]; + } + + function compact() { + return this.select(function(value) { + return value != null; + }); + } + + function flatten() { + return this.inject([], function(array, value) { + if (Object.isArray(value)) + return array.concat(value.flatten()); + array.push(value); + return array; + }); + } + + function without() { + var values = slice.call(arguments, 0); + return this.select(function(value) { + return !values.include(value); + }); + } + + function reverse(inline) { + return (inline === false ? this.toArray() : this)._reverse(); + } + + function uniq(sorted) { + return this.inject([], function(array, value, index) { + if (0 == index || (sorted ? array.last() != value : !array.include(value))) + array.push(value); + return array; + }); + } + + function intersect(array) { + return this.uniq().findAll(function(item) { + return array.indexOf(item) !== -1; + }); + } + + + function clone() { + return slice.call(this, 0); + } + + function size() { + return this.length; + } + + function inspect() { + return '[' + this.map(Object.inspect).join(', ') + ']'; + } + + function indexOf(item, i) { + if (this == null) throw new TypeError(); + + var array = Object(this), length = array.length >>> 0; + if (length === 0) return -1; + + i = Number(i); + if (isNaN(i)) { + i = 0; + } else if (i !== 0 && isFinite(i)) { + i = (i > 0 ? 1 : -1) * Math.floor(Math.abs(i)); + } + + if (i > length) return -1; + + var k = i >= 0 ? i : Math.max(length - Math.abs(i), 0); + for (; k < length; k++) + if (k in array && array[k] === item) return k; + return -1; + } + + + function lastIndexOf(item, i) { + if (this == null) throw new TypeError(); + + var array = Object(this), length = array.length >>> 0; + if (length === 0) return -1; + + if (!Object.isUndefined(i)) { + i = Number(i); + if (isNaN(i)) { + i = 0; + } else if (i !== 0 && isFinite(i)) { + i = (i > 0 ? 1 : -1) * Math.floor(Math.abs(i)); + } + } else { + i = length; + } + + var k = i >= 0 ? Math.min(i, length - 1) : + length - Math.abs(i); + + for (; k >= 0; k--) + if (k in array && array[k] === item) return k; + return -1; + } + + function concat(_) { + var array = [], items = slice.call(arguments, 0), item, n = 0; + items.unshift(this); + for (var i = 0, length = items.length; i < length; i++) { + item = items[i]; + if (Object.isArray(item) && !('callee' in item)) { + for (var j = 0, arrayLength = item.length; j < arrayLength; j++) { + if (j in item) array[n] = item[j]; + n++; + } + } else { + array[n++] = item; + } + } + array.length = n; + return array; + } + + + function wrapNative(method) { + return function() { + if (arguments.length === 0) { + return method.call(this, Prototype.K); + } else if (arguments[0] === undefined) { + var args = slice.call(arguments, 1); + args.unshift(Prototype.K); + return method.apply(this, args); + } else { + return method.apply(this, arguments); + } + }; + } + + + function map(iterator) { + if (this == null) throw new TypeError(); + iterator = iterator || Prototype.K; + + var object = Object(this); + var results = [], context = arguments[1], n = 0; + + for (var i = 0, length = object.length >>> 0; i < length; i++) { + if (i in object) { + results[n] = iterator.call(context, object[i], i, object); + } + n++; + } + results.length = n; + return results; + } + + if (arrayProto.map) { + map = wrapNative(Array.prototype.map); + } + + function filter(iterator) { + if (this == null || !Object.isFunction(iterator)) + throw new TypeError(); + + var object = Object(this); + var results = [], context = arguments[1], value; + + for (var i = 0, length = object.length >>> 0; i < length; i++) { + if (i in object) { + value = object[i]; + if (iterator.call(context, value, i, object)) { + results.push(value); + } + } + } + return results; + } + + if (arrayProto.filter) { + filter = Array.prototype.filter; + } + + function some(iterator) { + if (this == null) throw new TypeError(); + iterator = iterator || Prototype.K; + var context = arguments[1]; + + var object = Object(this); + for (var i = 0, length = object.length >>> 0; i < length; i++) { + if (i in object && iterator.call(context, object[i], i, object)) { + return true; + } + } + + return false; + } + + if (arrayProto.some) { + var some = wrapNative(Array.prototype.some); + } + + + function every(iterator) { + if (this == null) throw new TypeError(); + iterator = iterator || Prototype.K; + var context = arguments[1]; + + var object = Object(this); + for (var i = 0, length = object.length >>> 0; i < length; i++) { + if (i in object && !iterator.call(context, object[i], i, object)) { + return false; + } + } + + return true; + } + + if (arrayProto.every) { + var every = wrapNative(Array.prototype.every); + } + + var _reduce = arrayProto.reduce; + function inject(memo, iterator) { + iterator = iterator || Prototype.K; + var context = arguments[2]; + return _reduce.call(this, iterator.bind(context), memo); + } + + if (!arrayProto.reduce) { + var inject = Enumerable.inject; + } + + Object.extend(arrayProto, Enumerable); + + if (!arrayProto._reverse) + arrayProto._reverse = arrayProto.reverse; + + Object.extend(arrayProto, { + _each: _each, + + map: map, + collect: map, + select: filter, + filter: filter, + findAll: filter, + some: some, + any: some, + every: every, + all: every, + inject: inject, + + clear: clear, + first: first, + last: last, + compact: compact, + flatten: flatten, + without: without, + reverse: reverse, + uniq: uniq, + intersect: intersect, + clone: clone, + toArray: clone, + size: size, + inspect: inspect + }); + + var CONCAT_ARGUMENTS_BUGGY = (function() { + return [].concat(arguments)[0][0] !== 1; + })(1,2); + + if (CONCAT_ARGUMENTS_BUGGY) arrayProto.concat = concat; + + if (!arrayProto.indexOf) arrayProto.indexOf = indexOf; + if (!arrayProto.lastIndexOf) arrayProto.lastIndexOf = lastIndexOf; +})(); +function $H(object) { + return new Hash(object); +}; + +var Hash = Class.create(Enumerable, (function() { + function initialize(object) { + this._object = Object.isHash(object) ? object.toObject() : Object.clone(object); + } + + + function _each(iterator, context) { + var i = 0; + for (var key in this._object) { + var value = this._object[key], pair = [key, value]; + pair.key = key; + pair.value = value; + iterator.call(context, pair, i); + i++; + } + } + + function set(key, value) { + return this._object[key] = value; + } + + function get(key) { + if (this._object[key] !== Object.prototype[key]) + return this._object[key]; + } + + function unset(key) { + var value = this._object[key]; + delete this._object[key]; + return value; + } + + function toObject() { + return Object.clone(this._object); + } + + + + function keys() { + return this.pluck('key'); + } + + function values() { + return this.pluck('value'); + } + + function index(value) { + var match = this.detect(function(pair) { + return pair.value === value; + }); + return match && match.key; + } + + function merge(object) { + return this.clone().update(object); + } + + function update(object) { + return new Hash(object).inject(this, function(result, pair) { + result.set(pair.key, pair.value); + return result; + }); + } + + function toQueryPair(key, value) { + if (Object.isUndefined(value)) return key; + + value = String.interpret(value); + + value = value.gsub(/(\r)?\n/, '\r\n'); + value = encodeURIComponent(value); + value = value.gsub(/%20/, '+'); + return key + '=' + value; + } + + function toQueryString() { + return this.inject([], function(results, pair) { + var key = encodeURIComponent(pair.key), values = pair.value; + + if (values && typeof values == 'object') { + if (Object.isArray(values)) { + var queryValues = []; + for (var i = 0, len = values.length, value; i < len; i++) { + value = values[i]; + queryValues.push(toQueryPair(key, value)); + } + return results.concat(queryValues); + } + } else results.push(toQueryPair(key, values)); + return results; + }).join('&'); + } + + function inspect() { + return '#'; + } + + function clone() { + return new Hash(this); + } + + return { + initialize: initialize, + _each: _each, + set: set, + get: get, + unset: unset, + toObject: toObject, + toTemplateReplacements: toObject, + keys: keys, + values: values, + index: index, + merge: merge, + update: update, + toQueryString: toQueryString, + inspect: inspect, + toJSON: toObject, + clone: clone + }; +})()); + +Hash.from = $H; +Object.extend(Number.prototype, (function() { + function toColorPart() { + return this.toPaddedString(2, 16); + } + + function succ() { + return this + 1; + } + + function times(iterator, context) { + $R(0, this, true).each(iterator, context); + return this; + } + + function toPaddedString(length, radix) { + var string = this.toString(radix || 10); + return '0'.times(length - string.length) + string; + } + + function abs() { + return Math.abs(this); + } + + function round() { + return Math.round(this); + } + + function ceil() { + return Math.ceil(this); + } + + function floor() { + return Math.floor(this); + } + + return { + toColorPart: toColorPart, + succ: succ, + times: times, + toPaddedString: toPaddedString, + abs: abs, + round: round, + ceil: ceil, + floor: floor + }; +})()); + +function $R(start, end, exclusive) { + return new ObjectRange(start, end, exclusive); +} + +var ObjectRange = Class.create(Enumerable, (function() { + function initialize(start, end, exclusive) { + this.start = start; + this.end = end; + this.exclusive = exclusive; + } + + function _each(iterator, context) { + var value = this.start, i; + for (i = 0; this.include(value); i++) { + iterator.call(context, value, i); + value = value.succ(); + } + } + + function include(value) { + if (value < this.start) + return false; + if (this.exclusive) + return value < this.end; + return value <= this.end; + } + + return { + initialize: initialize, + _each: _each, + include: include + }; +})()); + + + +var Abstract = { }; + + +var Try = { + these: function() { + var returnValue; + + for (var i = 0, length = arguments.length; i < length; i++) { + var lambda = arguments[i]; + try { + returnValue = lambda(); + break; + } catch (e) { } + } + + return returnValue; + } +}; + +var Ajax = { + getTransport: function() { + return Try.these( + function() {return new XMLHttpRequest()}, + function() {return new ActiveXObject('Msxml2.XMLHTTP')}, + function() {return new ActiveXObject('Microsoft.XMLHTTP')} + ) || false; + }, + + activeRequestCount: 0 +}; + +Ajax.Responders = { + responders: [], + + _each: function(iterator, context) { + this.responders._each(iterator, context); + }, + + register: function(responder) { + if (!this.include(responder)) + this.responders.push(responder); + }, + + unregister: function(responder) { + this.responders = this.responders.without(responder); + }, + + dispatch: function(callback, request, transport, json) { + this.each(function(responder) { + if (Object.isFunction(responder[callback])) { + try { + responder[callback].apply(responder, [request, transport, json]); + } catch (e) { } + } + }); + } +}; + +Object.extend(Ajax.Responders, Enumerable); + +Ajax.Responders.register({ + onCreate: function() { Ajax.activeRequestCount++ }, + onComplete: function() { Ajax.activeRequestCount-- } +}); +Ajax.Base = Class.create({ + initialize: function(options) { + this.options = { + method: 'post', + asynchronous: true, + contentType: 'application/x-www-form-urlencoded', + encoding: 'UTF-8', + parameters: '', + evalJSON: true, + evalJS: true + }; + Object.extend(this.options, options || { }); + + this.options.method = this.options.method.toLowerCase(); + + if (Object.isHash(this.options.parameters)) + this.options.parameters = this.options.parameters.toObject(); + } +}); +Ajax.Request = Class.create(Ajax.Base, { + _complete: false, + + initialize: function($super, url, options) { + $super(options); + this.transport = Ajax.getTransport(); + this.request(url); + }, + + request: function(url) { + this.url = url; + this.method = this.options.method; + var params = Object.isString(this.options.parameters) ? + this.options.parameters : + Object.toQueryString(this.options.parameters); + + if (!['get', 'post'].include(this.method)) { + params += (params ? '&' : '') + "_method=" + this.method; + this.method = 'post'; + } + + if (params && this.method === 'get') { + this.url += (this.url.include('?') ? '&' : '?') + params; + } + + this.parameters = params.toQueryParams(); + + try { + var response = new Ajax.Response(this); + if (this.options.onCreate) this.options.onCreate(response); + Ajax.Responders.dispatch('onCreate', this, response); + + this.transport.open(this.method.toUpperCase(), this.url, + this.options.asynchronous); + + if (this.options.asynchronous) this.respondToReadyState.bind(this).defer(1); + + this.transport.onreadystatechange = this.onStateChange.bind(this); + this.setRequestHeaders(); + + this.body = this.method == 'post' ? (this.options.postBody || params) : null; + this.transport.send(this.body); + + /* Force Firefox to handle ready state 4 for synchronous requests */ + if (!this.options.asynchronous && this.transport.overrideMimeType) + this.onStateChange(); + + } + catch (e) { + this.dispatchException(e); + } + }, + + onStateChange: function() { + var readyState = this.transport.readyState; + if (readyState > 1 && !((readyState == 4) && this._complete)) + this.respondToReadyState(this.transport.readyState); + }, + + setRequestHeaders: function() { + var headers = { + 'X-Requested-With': 'XMLHttpRequest', + 'X-Prototype-Version': Prototype.Version, + 'Accept': 'text/javascript, text/html, application/xml, text/xml, */*' + }; + + if (this.method == 'post') { + headers['Content-type'] = this.options.contentType + + (this.options.encoding ? '; charset=' + this.options.encoding : ''); + + /* Force "Connection: close" for older Mozilla browsers to work + * around a bug where XMLHttpRequest sends an incorrect + * Content-length header. See Mozilla Bugzilla #246651. + */ + if (this.transport.overrideMimeType && + (navigator.userAgent.match(/Gecko\/(\d{4})/) || [0,2005])[1] < 2005) + headers['Connection'] = 'close'; + } + + if (typeof this.options.requestHeaders == 'object') { + var extras = this.options.requestHeaders; + + if (Object.isFunction(extras.push)) + for (var i = 0, length = extras.length; i < length; i += 2) + headers[extras[i]] = extras[i+1]; + else + $H(extras).each(function(pair) { headers[pair.key] = pair.value }); + } + + for (var name in headers) + if (headers[name] != null) + this.transport.setRequestHeader(name, headers[name]); + }, + + success: function() { + var status = this.getStatus(); + return !status || (status >= 200 && status < 300) || status == 304; + }, + + getStatus: function() { + try { + if (this.transport.status === 1223) return 204; + return this.transport.status || 0; + } catch (e) { return 0 } + }, + + respondToReadyState: function(readyState) { + var state = Ajax.Request.Events[readyState], response = new Ajax.Response(this); + + if (state == 'Complete') { + try { + this._complete = true; + (this.options['on' + response.status] + || this.options['on' + (this.success() ? 'Success' : 'Failure')] + || Prototype.emptyFunction)(response, response.headerJSON); + } catch (e) { + this.dispatchException(e); + } + + var contentType = response.getHeader('Content-type'); + if (this.options.evalJS == 'force' + || (this.options.evalJS && this.isSameOrigin() && contentType + && contentType.match(/^\s*(text|application)\/(x-)?(java|ecma)script(;.*)?\s*$/i))) + this.evalResponse(); + } + + try { + (this.options['on' + state] || Prototype.emptyFunction)(response, response.headerJSON); + Ajax.Responders.dispatch('on' + state, this, response, response.headerJSON); + } catch (e) { + this.dispatchException(e); + } + + if (state == 'Complete') { + this.transport.onreadystatechange = Prototype.emptyFunction; + } + }, + + isSameOrigin: function() { + var m = this.url.match(/^\s*https?:\/\/[^\/]*/); + return !m || (m[0] == '#{protocol}//#{domain}#{port}'.interpolate({ + protocol: location.protocol, + domain: document.domain, + port: location.port ? ':' + location.port : '' + })); + }, + + getHeader: function(name) { + try { + return this.transport.getResponseHeader(name) || null; + } catch (e) { return null; } + }, + + evalResponse: function() { + try { + return eval((this.transport.responseText || '').unfilterJSON()); + } catch (e) { + this.dispatchException(e); + } + }, + + dispatchException: function(exception) { + (this.options.onException || Prototype.emptyFunction)(this, exception); + Ajax.Responders.dispatch('onException', this, exception); + } +}); + +Ajax.Request.Events = + ['Uninitialized', 'Loading', 'Loaded', 'Interactive', 'Complete']; + + + + + + + + +Ajax.Response = Class.create({ + initialize: function(request){ + this.request = request; + var transport = this.transport = request.transport, + readyState = this.readyState = transport.readyState; + + if ((readyState > 2 && !Prototype.Browser.IE) || readyState == 4) { + this.status = this.getStatus(); + this.statusText = this.getStatusText(); + this.responseText = String.interpret(transport.responseText); + this.headerJSON = this._getHeaderJSON(); + } + + if (readyState == 4) { + var xml = transport.responseXML; + this.responseXML = Object.isUndefined(xml) ? null : xml; + this.responseJSON = this._getResponseJSON(); + } + }, + + status: 0, + + statusText: '', + + getStatus: Ajax.Request.prototype.getStatus, + + getStatusText: function() { + try { + return this.transport.statusText || ''; + } catch (e) { return '' } + }, + + getHeader: Ajax.Request.prototype.getHeader, + + getAllHeaders: function() { + try { + return this.getAllResponseHeaders(); + } catch (e) { return null } + }, + + getResponseHeader: function(name) { + return this.transport.getResponseHeader(name); + }, + + getAllResponseHeaders: function() { + return this.transport.getAllResponseHeaders(); + }, + + _getHeaderJSON: function() { + var json = this.getHeader('X-JSON'); + if (!json) return null; + + try { + json = decodeURIComponent(escape(json)); + } catch(e) { + } + + try { + return json.evalJSON(this.request.options.sanitizeJSON || + !this.request.isSameOrigin()); + } catch (e) { + this.request.dispatchException(e); + } + }, + + _getResponseJSON: function() { + var options = this.request.options; + if (!options.evalJSON || (options.evalJSON != 'force' && + !(this.getHeader('Content-type') || '').include('application/json')) || + this.responseText.blank()) + return null; + try { + return this.responseText.evalJSON(options.sanitizeJSON || + !this.request.isSameOrigin()); + } catch (e) { + this.request.dispatchException(e); + } + } +}); + +Ajax.Updater = Class.create(Ajax.Request, { + initialize: function($super, container, url, options) { + this.container = { + success: (container.success || container), + failure: (container.failure || (container.success ? null : container)) + }; + + options = Object.clone(options); + var onComplete = options.onComplete; + options.onComplete = (function(response, json) { + this.updateContent(response.responseText); + if (Object.isFunction(onComplete)) onComplete(response, json); + }).bind(this); + + $super(url, options); + }, + + updateContent: function(responseText) { + var receiver = this.container[this.success() ? 'success' : 'failure'], + options = this.options; + + if (!options.evalScripts) responseText = responseText.stripScripts(); + + if (receiver = $(receiver)) { + if (options.insertion) { + if (Object.isString(options.insertion)) { + var insertion = { }; insertion[options.insertion] = responseText; + receiver.insert(insertion); + } + else options.insertion(receiver, responseText); + } + else receiver.update(responseText); + } + } +}); + +Ajax.PeriodicalUpdater = Class.create(Ajax.Base, { + initialize: function($super, container, url, options) { + $super(options); + this.onComplete = this.options.onComplete; + + this.frequency = (this.options.frequency || 2); + this.decay = (this.options.decay || 1); + + this.updater = { }; + this.container = container; + this.url = url; + + this.start(); + }, + + start: function() { + this.options.onComplete = this.updateComplete.bind(this); + this.onTimerEvent(); + }, + + stop: function() { + this.updater.options.onComplete = undefined; + clearTimeout(this.timer); + (this.onComplete || Prototype.emptyFunction).apply(this, arguments); + }, + + updateComplete: function(response) { + if (this.options.decay) { + this.decay = (response.responseText == this.lastText ? + this.decay * this.options.decay : 1); + + this.lastText = response.responseText; + } + this.timer = this.onTimerEvent.bind(this).delay(this.decay * this.frequency); + }, + + onTimerEvent: function() { + this.updater = new Ajax.Updater(this.container, this.url, this.options); + } +}); + +(function(GLOBAL) { + + var UNDEFINED; + var SLICE = Array.prototype.slice; + + var DIV = document.createElement('div'); + + + function $(element) { + if (arguments.length > 1) { + for (var i = 0, elements = [], length = arguments.length; i < length; i++) + elements.push($(arguments[i])); + return elements; + } + + if (Object.isString(element)) + element = document.getElementById(element); + return Element.extend(element); + } + + GLOBAL.$ = $; + + + if (!GLOBAL.Node) GLOBAL.Node = {}; + + if (!GLOBAL.Node.ELEMENT_NODE) { + Object.extend(GLOBAL.Node, { + ELEMENT_NODE: 1, + ATTRIBUTE_NODE: 2, + TEXT_NODE: 3, + CDATA_SECTION_NODE: 4, + ENTITY_REFERENCE_NODE: 5, + ENTITY_NODE: 6, + PROCESSING_INSTRUCTION_NODE: 7, + COMMENT_NODE: 8, + DOCUMENT_NODE: 9, + DOCUMENT_TYPE_NODE: 10, + DOCUMENT_FRAGMENT_NODE: 11, + NOTATION_NODE: 12 + }); + } + + var ELEMENT_CACHE = {}; + + function shouldUseCreationCache(tagName, attributes) { + if (tagName === 'select') return false; + if ('type' in attributes) return false; + return true; + } + + var HAS_EXTENDED_CREATE_ELEMENT_SYNTAX = (function(){ + try { + var el = document.createElement(''); + return el.tagName.toLowerCase() === 'input' && el.name === 'x'; + } + catch(err) { + return false; + } + })(); + + + var oldElement = GLOBAL.Element; + function Element(tagName, attributes) { + attributes = attributes || {}; + tagName = tagName.toLowerCase(); + + if (HAS_EXTENDED_CREATE_ELEMENT_SYNTAX && attributes.name) { + tagName = '<' + tagName + ' name="' + attributes.name + '">'; + delete attributes.name; + return Element.writeAttribute(document.createElement(tagName), attributes); + } + + if (!ELEMENT_CACHE[tagName]) + ELEMENT_CACHE[tagName] = Element.extend(document.createElement(tagName)); + + var node = shouldUseCreationCache(tagName, attributes) ? + ELEMENT_CACHE[tagName].cloneNode(false) : document.createElement(tagName); + + return Element.writeAttribute(node, attributes); + } + + GLOBAL.Element = Element; + + Object.extend(GLOBAL.Element, oldElement || {}); + if (oldElement) GLOBAL.Element.prototype = oldElement.prototype; + + Element.Methods = { ByTag: {}, Simulated: {} }; + + var methods = {}; + + var INSPECT_ATTRIBUTES = { id: 'id', className: 'class' }; + function inspect(element) { + element = $(element); + var result = '<' + element.tagName.toLowerCase(); + + var attribute, value; + for (var property in INSPECT_ATTRIBUTES) { + attribute = INSPECT_ATTRIBUTES[property]; + value = (element[property] || '').toString(); + if (value) result += ' ' + attribute + '=' + value.inspect(true); + } + + return result + '>'; + } + + methods.inspect = inspect; + + + function visible(element) { + return $(element).style.display !== 'none'; + } + + function toggle(element, bool) { + element = $(element); + if (Object.isUndefined(bool)) + bool = !Element.visible(element); + Element[bool ? 'show' : 'hide'](element); + + return element; + } + + function hide(element) { + element = $(element); + element.style.display = 'none'; + return element; + } + + function show(element) { + element = $(element); + element.style.display = ''; + return element; + } + + + Object.extend(methods, { + visible: visible, + toggle: toggle, + hide: hide, + show: show + }); + + + function remove(element) { + element = $(element); + element.parentNode.removeChild(element); + return element; + } + + var SELECT_ELEMENT_INNERHTML_BUGGY = (function(){ + var el = document.createElement("select"), + isBuggy = true; + el.innerHTML = ""; + if (el.options && el.options[0]) { + isBuggy = el.options[0].nodeName.toUpperCase() !== "OPTION"; + } + el = null; + return isBuggy; + })(); + + var TABLE_ELEMENT_INNERHTML_BUGGY = (function(){ + try { + var el = document.createElement("table"); + if (el && el.tBodies) { + el.innerHTML = "test"; + var isBuggy = typeof el.tBodies[0] == "undefined"; + el = null; + return isBuggy; + } + } catch (e) { + return true; + } + })(); + + var LINK_ELEMENT_INNERHTML_BUGGY = (function() { + try { + var el = document.createElement('div'); + el.innerHTML = ""; + var isBuggy = (el.childNodes.length === 0); + el = null; + return isBuggy; + } catch(e) { + return true; + } + })(); + + var ANY_INNERHTML_BUGGY = SELECT_ELEMENT_INNERHTML_BUGGY || + TABLE_ELEMENT_INNERHTML_BUGGY || LINK_ELEMENT_INNERHTML_BUGGY; + + var SCRIPT_ELEMENT_REJECTS_TEXTNODE_APPENDING = (function () { + var s = document.createElement("script"), + isBuggy = false; + try { + s.appendChild(document.createTextNode("")); + isBuggy = !s.firstChild || + s.firstChild && s.firstChild.nodeType !== 3; + } catch (e) { + isBuggy = true; + } + s = null; + return isBuggy; + })(); + + function update(element, content) { + element = $(element); + + var descendants = element.getElementsByTagName('*'), + i = descendants.length; + while (i--) purgeElement(descendants[i]); + + if (content && content.toElement) + content = content.toElement(); + + if (Object.isElement(content)) + return element.update().insert(content); + + + content = Object.toHTML(content); + var tagName = element.tagName.toUpperCase(); + + if (tagName === 'SCRIPT' && SCRIPT_ELEMENT_REJECTS_TEXTNODE_APPENDING) { + element.text = content; + return element; + } + + if (ANY_INNERHTML_BUGGY) { + if (tagName in INSERTION_TRANSLATIONS.tags) { + while (element.firstChild) + element.removeChild(element.firstChild); + + var nodes = getContentFromAnonymousElement(tagName, content.stripScripts()); + for (var i = 0, node; node = nodes[i]; i++) + element.appendChild(node); + + } else if (LINK_ELEMENT_INNERHTML_BUGGY && Object.isString(content) && content.indexOf(' -1) { + while (element.firstChild) + element.removeChild(element.firstChild); + + var nodes = getContentFromAnonymousElement(tagName, + content.stripScripts(), true); + + for (var i = 0, node; node = nodes[i]; i++) + element.appendChild(node); + } else { + element.innerHTML = content.stripScripts(); + } + } else { + element.innerHTML = content.stripScripts(); + } + + content.evalScripts.bind(content).defer(); + return element; + } + + function replace(element, content) { + element = $(element); + + if (content && content.toElement) { + content = content.toElement(); + } else if (!Object.isElement(content)) { + content = Object.toHTML(content); + var range = element.ownerDocument.createRange(); + range.selectNode(element); + content.evalScripts.bind(content).defer(); + content = range.createContextualFragment(content.stripScripts()); + } + + element.parentNode.replaceChild(content, element); + return element; + } + + var INSERTION_TRANSLATIONS = { + before: function(element, node) { + element.parentNode.insertBefore(node, element); + }, + top: function(element, node) { + element.insertBefore(node, element.firstChild); + }, + bottom: function(element, node) { + element.appendChild(node); + }, + after: function(element, node) { + element.parentNode.insertBefore(node, element.nextSibling); + }, + + tags: { + TABLE: ['', '
    ', 1], + TBODY: ['', '
    ', 2], + TR: ['', '
    ', 3], + TD: ['
    ', '
    ', 4], + SELECT: ['', 1] + } + }; + + var tags = INSERTION_TRANSLATIONS.tags; + + Object.extend(tags, { + THEAD: tags.TBODY, + TFOOT: tags.TBODY, + TH: tags.TD + }); + + function replace_IE(element, content) { + element = $(element); + if (content && content.toElement) + content = content.toElement(); + if (Object.isElement(content)) { + element.parentNode.replaceChild(content, element); + return element; + } + + content = Object.toHTML(content); + var parent = element.parentNode, tagName = parent.tagName.toUpperCase(); + + if (tagName in INSERTION_TRANSLATIONS.tags) { + var nextSibling = Element.next(element); + var fragments = getContentFromAnonymousElement( + tagName, content.stripScripts()); + + parent.removeChild(element); + + var iterator; + if (nextSibling) + iterator = function(node) { parent.insertBefore(node, nextSibling) }; + else + iterator = function(node) { parent.appendChild(node); } + + fragments.each(iterator); + } else { + element.outerHTML = content.stripScripts(); + } + + content.evalScripts.bind(content).defer(); + return element; + } + + if ('outerHTML' in document.documentElement) + replace = replace_IE; + + function isContent(content) { + if (Object.isUndefined(content) || content === null) return false; + + if (Object.isString(content) || Object.isNumber(content)) return true; + if (Object.isElement(content)) return true; + if (content.toElement || content.toHTML) return true; + + return false; + } + + function insertContentAt(element, content, position) { + position = position.toLowerCase(); + var method = INSERTION_TRANSLATIONS[position]; + + if (content && content.toElement) content = content.toElement(); + if (Object.isElement(content)) { + method(element, content); + return element; + } + + content = Object.toHTML(content); + var tagName = ((position === 'before' || position === 'after') ? + element.parentNode : element).tagName.toUpperCase(); + + var childNodes = getContentFromAnonymousElement(tagName, content.stripScripts()); + + if (position === 'top' || position === 'after') childNodes.reverse(); + + for (var i = 0, node; node = childNodes[i]; i++) + method(element, node); + + content.evalScripts.bind(content).defer(); + } + + function insert(element, insertions) { + element = $(element); + + if (isContent(insertions)) + insertions = { bottom: insertions }; + + for (var position in insertions) + insertContentAt(element, insertions[position], position); + + return element; + } + + function wrap(element, wrapper, attributes) { + element = $(element); + + if (Object.isElement(wrapper)) { + $(wrapper).writeAttribute(attributes || {}); + } else if (Object.isString(wrapper)) { + wrapper = new Element(wrapper, attributes); + } else { + wrapper = new Element('div', wrapper); + } + + if (element.parentNode) + element.parentNode.replaceChild(wrapper, element); + + wrapper.appendChild(element); + + return wrapper; + } + + function cleanWhitespace(element) { + element = $(element); + var node = element.firstChild; + + while (node) { + var nextNode = node.nextSibling; + if (node.nodeType === Node.TEXT_NODE && !/\S/.test(node.nodeValue)) + element.removeChild(node); + node = nextNode; + } + return element; + } + + function empty(element) { + return $(element).innerHTML.blank(); + } + + function getContentFromAnonymousElement(tagName, html, force) { + var t = INSERTION_TRANSLATIONS.tags[tagName], div = DIV; + + var workaround = !!t; + if (!workaround && force) { + workaround = true; + t = ['', '', 0]; + } + + if (workaround) { + div.innerHTML = ' ' + t[0] + html + t[1]; + div.removeChild(div.firstChild); + for (var i = t[2]; i--; ) + div = div.firstChild; + } else { + div.innerHTML = html; + } + + return $A(div.childNodes); + } + + function clone(element, deep) { + if (!(element = $(element))) return; + var clone = element.cloneNode(deep); + if (!HAS_UNIQUE_ID_PROPERTY) { + clone._prototypeUID = UNDEFINED; + if (deep) { + var descendants = Element.select(clone, '*'), + i = descendants.length; + while (i--) + descendants[i]._prototypeUID = UNDEFINED; + } + } + return Element.extend(clone); + } + + function purgeElement(element) { + var uid = getUniqueElementID(element); + if (uid) { + Element.stopObserving(element); + if (!HAS_UNIQUE_ID_PROPERTY) + element._prototypeUID = UNDEFINED; + delete Element.Storage[uid]; + } + } + + function purgeCollection(elements) { + var i = elements.length; + while (i--) + purgeElement(elements[i]); + } + + function purgeCollection_IE(elements) { + var i = elements.length, element, uid; + while (i--) { + element = elements[i]; + uid = getUniqueElementID(element); + delete Element.Storage[uid]; + delete Event.cache[uid]; + } + } + + if (HAS_UNIQUE_ID_PROPERTY) { + purgeCollection = purgeCollection_IE; + } + + + function purge(element) { + if (!(element = $(element))) return; + purgeElement(element); + + var descendants = element.getElementsByTagName('*'), + i = descendants.length; + + while (i--) purgeElement(descendants[i]); + + return null; + } + + Object.extend(methods, { + remove: remove, + update: update, + replace: replace, + insert: insert, + wrap: wrap, + cleanWhitespace: cleanWhitespace, + empty: empty, + clone: clone, + purge: purge + }); + + + + function recursivelyCollect(element, property, maximumLength) { + element = $(element); + maximumLength = maximumLength || -1; + var elements = []; + + while (element = element[property]) { + if (element.nodeType === Node.ELEMENT_NODE) + elements.push(Element.extend(element)); + + if (elements.length === maximumLength) break; + } + + return elements; + } + + + function ancestors(element) { + return recursivelyCollect(element, 'parentNode'); + } + + function descendants(element) { + return Element.select(element, '*'); + } + + function firstDescendant(element) { + element = $(element).firstChild; + while (element && element.nodeType !== Node.ELEMENT_NODE) + element = element.nextSibling; + + return $(element); + } + + function immediateDescendants(element) { + var results = [], child = $(element).firstChild; + + while (child) { + if (child.nodeType === Node.ELEMENT_NODE) + results.push(Element.extend(child)); + + child = child.nextSibling; + } + + return results; + } + + function previousSiblings(element) { + return recursivelyCollect(element, 'previousSibling'); + } + + function nextSiblings(element) { + return recursivelyCollect(element, 'nextSibling'); + } + + function siblings(element) { + element = $(element); + var previous = previousSiblings(element), + next = nextSiblings(element); + return previous.reverse().concat(next); + } + + function match(element, selector) { + element = $(element); + + if (Object.isString(selector)) + return Prototype.Selector.match(element, selector); + + return selector.match(element); + } + + + function _recursivelyFind(element, property, expression, index) { + element = $(element), expression = expression || 0, index = index || 0; + if (Object.isNumber(expression)) { + index = expression, expression = null; + } + + while (element = element[property]) { + if (element.nodeType !== 1) continue; + if (expression && !Prototype.Selector.match(element, expression)) + continue; + if (--index >= 0) continue; + + return Element.extend(element); + } + } + + + function up(element, expression, index) { + element = $(element); + + if (arguments.length === 1) return $(element.parentNode); + return _recursivelyFind(element, 'parentNode', expression, index); + } + + function down(element, expression, index) { + if (arguments.length === 1) return firstDescendant(element); + element = $(element), expression = expression || 0, index = index || 0; + + if (Object.isNumber(expression)) + index = expression, expression = '*'; + + var node = Prototype.Selector.select(expression, element)[index]; + return Element.extend(node); + } + + function previous(element, expression, index) { + return _recursivelyFind(element, 'previousSibling', expression, index); + } + + function next(element, expression, index) { + return _recursivelyFind(element, 'nextSibling', expression, index); + } + + function select(element) { + element = $(element); + var expressions = SLICE.call(arguments, 1).join(', '); + return Prototype.Selector.select(expressions, element); + } + + function adjacent(element) { + element = $(element); + var expressions = SLICE.call(arguments, 1).join(', '); + var siblings = Element.siblings(element), results = []; + for (var i = 0, sibling; sibling = siblings[i]; i++) { + if (Prototype.Selector.match(sibling, expressions)) + results.push(sibling); + } + + return results; + } + + function descendantOf_DOM(element, ancestor) { + element = $(element), ancestor = $(ancestor); + while (element = element.parentNode) + if (element === ancestor) return true; + return false; + } + + function descendantOf_contains(element, ancestor) { + element = $(element), ancestor = $(ancestor); + if (!ancestor.contains) return descendantOf_DOM(element, ancestor); + return ancestor.contains(element) && ancestor !== element; + } + + function descendantOf_compareDocumentPosition(element, ancestor) { + element = $(element), ancestor = $(ancestor); + return (element.compareDocumentPosition(ancestor) & 8) === 8; + } + + var descendantOf; + if (DIV.compareDocumentPosition) { + descendantOf = descendantOf_compareDocumentPosition; + } else if (DIV.contains) { + descendantOf = descendantOf_contains; + } else { + descendantOf = descendantOf_DOM; + } + + + Object.extend(methods, { + recursivelyCollect: recursivelyCollect, + ancestors: ancestors, + descendants: descendants, + firstDescendant: firstDescendant, + immediateDescendants: immediateDescendants, + previousSiblings: previousSiblings, + nextSiblings: nextSiblings, + siblings: siblings, + match: match, + up: up, + down: down, + previous: previous, + next: next, + select: select, + adjacent: adjacent, + descendantOf: descendantOf, + + getElementsBySelector: select, + + childElements: immediateDescendants + }); + + + var idCounter = 1; + function identify(element) { + element = $(element); + var id = Element.readAttribute(element, 'id'); + if (id) return id; + + do { id = 'anonymous_element_' + idCounter++ } while ($(id)); + + Element.writeAttribute(element, 'id', id); + return id; + } + + + function readAttribute(element, name) { + return $(element).getAttribute(name); + } + + function readAttribute_IE(element, name) { + element = $(element); + + var table = ATTRIBUTE_TRANSLATIONS.read; + if (table.values[name]) + return table.values[name](element, name); + + if (table.names[name]) name = table.names[name]; + + if (name.include(':')) { + if (!element.attributes || !element.attributes[name]) return null; + return element.attributes[name].value; + } + + return element.getAttribute(name); + } + + function readAttribute_Opera(element, name) { + if (name === 'title') return element.title; + return element.getAttribute(name); + } + + var PROBLEMATIC_ATTRIBUTE_READING = (function() { + DIV.setAttribute('onclick', []); + var value = DIV.getAttribute('onclick'); + var isFunction = Object.isArray(value); + DIV.removeAttribute('onclick'); + return isFunction; + })(); + + if (PROBLEMATIC_ATTRIBUTE_READING) { + readAttribute = readAttribute_IE; + } else if (Prototype.Browser.Opera) { + readAttribute = readAttribute_Opera; + } + + + function writeAttribute(element, name, value) { + element = $(element); + var attributes = {}, table = ATTRIBUTE_TRANSLATIONS.write; + + if (typeof name === 'object') { + attributes = name; + } else { + attributes[name] = Object.isUndefined(value) ? true : value; + } + + for (var attr in attributes) { + name = table.names[attr] || attr; + value = attributes[attr]; + if (table.values[attr]) + name = table.values[attr](element, value) || name; + if (value === false || value === null) + element.removeAttribute(name); + else if (value === true) + element.setAttribute(name, name); + else element.setAttribute(name, value); + } + + return element; + } + + var PROBLEMATIC_HAS_ATTRIBUTE_WITH_CHECKBOXES = (function () { + if (!HAS_EXTENDED_CREATE_ELEMENT_SYNTAX) { + return false; + } + var checkbox = document.createElement(''); + checkbox.checked = true; + var node = checkbox.getAttributeNode('checked'); + return !node || !node.specified; + })(); + + function hasAttribute(element, attribute) { + attribute = ATTRIBUTE_TRANSLATIONS.has[attribute] || attribute; + var node = $(element).getAttributeNode(attribute); + return !!(node && node.specified); + } + + function hasAttribute_IE(element, attribute) { + if (attribute === 'checked') { + return element.checked; + } + return hasAttribute(element, attribute); + } + + GLOBAL.Element.Methods.Simulated.hasAttribute = + PROBLEMATIC_HAS_ATTRIBUTE_WITH_CHECKBOXES ? + hasAttribute_IE : hasAttribute; + + function classNames(element) { + return new Element.ClassNames(element); + } + + var regExpCache = {}; + function getRegExpForClassName(className) { + if (regExpCache[className]) return regExpCache[className]; + + var re = new RegExp("(^|\\s+)" + className + "(\\s+|$)"); + regExpCache[className] = re; + return re; + } + + function hasClassName(element, className) { + if (!(element = $(element))) return; + + var elementClassName = element.className; + + if (elementClassName.length === 0) return false; + if (elementClassName === className) return true; + + return getRegExpForClassName(className).test(elementClassName); + } + + function addClassName(element, className) { + if (!(element = $(element))) return; + + if (!hasClassName(element, className)) + element.className += (element.className ? ' ' : '') + className; + + return element; + } + + function removeClassName(element, className) { + if (!(element = $(element))) return; + + element.className = element.className.replace( + getRegExpForClassName(className), ' ').strip(); + + return element; + } + + function toggleClassName(element, className, bool) { + if (!(element = $(element))) return; + + if (Object.isUndefined(bool)) + bool = !hasClassName(element, className); + + var method = Element[bool ? 'addClassName' : 'removeClassName']; + return method(element, className); + } + + var ATTRIBUTE_TRANSLATIONS = {}; + + var classProp = 'className', forProp = 'for'; + + DIV.setAttribute(classProp, 'x'); + if (DIV.className !== 'x') { + DIV.setAttribute('class', 'x'); + if (DIV.className === 'x') + classProp = 'class'; + } + + var LABEL = document.createElement('label'); + LABEL.setAttribute(forProp, 'x'); + if (LABEL.htmlFor !== 'x') { + LABEL.setAttribute('htmlFor', 'x'); + if (LABEL.htmlFor === 'x') + forProp = 'htmlFor'; + } + LABEL = null; + + function _getAttr(element, attribute) { + return element.getAttribute(attribute); + } + + function _getAttr2(element, attribute) { + return element.getAttribute(attribute, 2); + } + + function _getAttrNode(element, attribute) { + var node = element.getAttributeNode(attribute); + return node ? node.value : ''; + } + + function _getFlag(element, attribute) { + return $(element).hasAttribute(attribute) ? attribute : null; + } + + DIV.onclick = Prototype.emptyFunction; + var onclickValue = DIV.getAttribute('onclick'); + + var _getEv; + + if (String(onclickValue).indexOf('{') > -1) { + _getEv = function(element, attribute) { + var value = element.getAttribute(attribute); + if (!value) return null; + value = value.toString(); + value = value.split('{')[1]; + value = value.split('}')[0]; + return value.strip(); + }; + } + else if (onclickValue === '') { + _getEv = function(element, attribute) { + var value = element.getAttribute(attribute); + if (!value) return null; + return value.strip(); + }; + } + + ATTRIBUTE_TRANSLATIONS.read = { + names: { + 'class': classProp, + 'className': classProp, + 'for': forProp, + 'htmlFor': forProp + }, + + values: { + style: function(element) { + return element.style.cssText.toLowerCase(); + }, + title: function(element) { + return element.title; + } + } + }; + + ATTRIBUTE_TRANSLATIONS.write = { + names: { + className: 'class', + htmlFor: 'for', + cellpadding: 'cellPadding', + cellspacing: 'cellSpacing' + }, + + values: { + checked: function(element, value) { + element.checked = !!value; + }, + + style: function(element, value) { + element.style.cssText = value ? value : ''; + } + } + }; + + ATTRIBUTE_TRANSLATIONS.has = { names: {} }; + + Object.extend(ATTRIBUTE_TRANSLATIONS.write.names, + ATTRIBUTE_TRANSLATIONS.read.names); + + var CAMEL_CASED_ATTRIBUTE_NAMES = $w('colSpan rowSpan vAlign dateTime ' + + 'accessKey tabIndex encType maxLength readOnly longDesc frameBorder'); + + for (var i = 0, attr; attr = CAMEL_CASED_ATTRIBUTE_NAMES[i]; i++) { + ATTRIBUTE_TRANSLATIONS.write.names[attr.toLowerCase()] = attr; + ATTRIBUTE_TRANSLATIONS.has.names[attr.toLowerCase()] = attr; + } + + Object.extend(ATTRIBUTE_TRANSLATIONS.read.values, { + href: _getAttr2, + src: _getAttr2, + type: _getAttr, + action: _getAttrNode, + disabled: _getFlag, + checked: _getFlag, + readonly: _getFlag, + multiple: _getFlag, + onload: _getEv, + onunload: _getEv, + onclick: _getEv, + ondblclick: _getEv, + onmousedown: _getEv, + onmouseup: _getEv, + onmouseover: _getEv, + onmousemove: _getEv, + onmouseout: _getEv, + onfocus: _getEv, + onblur: _getEv, + onkeypress: _getEv, + onkeydown: _getEv, + onkeyup: _getEv, + onsubmit: _getEv, + onreset: _getEv, + onselect: _getEv, + onchange: _getEv + }); + + + Object.extend(methods, { + identify: identify, + readAttribute: readAttribute, + writeAttribute: writeAttribute, + classNames: classNames, + hasClassName: hasClassName, + addClassName: addClassName, + removeClassName: removeClassName, + toggleClassName: toggleClassName + }); + + + function normalizeStyleName(style) { + if (style === 'float' || style === 'styleFloat') + return 'cssFloat'; + return style.camelize(); + } + + function normalizeStyleName_IE(style) { + if (style === 'float' || style === 'cssFloat') + return 'styleFloat'; + return style.camelize(); + } + + function setStyle(element, styles) { + element = $(element); + var elementStyle = element.style, match; + + if (Object.isString(styles)) { + elementStyle.cssText += ';' + styles; + if (styles.include('opacity')) { + var opacity = styles.match(/opacity:\s*(\d?\.?\d*)/)[1]; + Element.setOpacity(element, opacity); + } + return element; + } + + for (var property in styles) { + if (property === 'opacity') { + Element.setOpacity(element, styles[property]); + } else { + var value = styles[property]; + if (property === 'float' || property === 'cssFloat') { + property = Object.isUndefined(elementStyle.styleFloat) ? + 'cssFloat' : 'styleFloat'; + } + elementStyle[property] = value; + } + } + + return element; + } + + + function getStyle(element, style) { + element = $(element); + style = normalizeStyleName(style); + + var value = element.style[style]; + if (!value || value === 'auto') { + var css = document.defaultView.getComputedStyle(element, null); + value = css ? css[style] : null; + } + + if (style === 'opacity') return value ? parseFloat(value) : 1.0; + return value === 'auto' ? null : value; + } + + function getStyle_Opera(element, style) { + switch (style) { + case 'height': case 'width': + if (!Element.visible(element)) return null; + + var dim = parseInt(getStyle(element, style), 10); + + if (dim !== element['offset' + style.capitalize()]) + return dim + 'px'; + + return Element.measure(element, style); + + default: return getStyle(element, style); + } + } + + function getStyle_IE(element, style) { + element = $(element); + style = normalizeStyleName_IE(style); + + var value = element.style[style]; + if (!value && element.currentStyle) { + value = element.currentStyle[style]; + } + + if (style === 'opacity' && !STANDARD_CSS_OPACITY_SUPPORTED) + return getOpacity_IE(element); + + if (value === 'auto') { + if ((style === 'width' || style === 'height') && Element.visible(element)) + return Element.measure(element, style) + 'px'; + return null; + } + + return value; + } + + function stripAlphaFromFilter_IE(filter) { + return (filter || '').replace(/alpha\([^\)]*\)/gi, ''); + } + + function hasLayout_IE(element) { + if (!element.currentStyle || !element.currentStyle.hasLayout) + element.style.zoom = 1; + return element; + } + + var STANDARD_CSS_OPACITY_SUPPORTED = (function() { + DIV.style.cssText = "opacity:.55"; + return /^0.55/.test(DIV.style.opacity); + })(); + + function setOpacity(element, value) { + element = $(element); + if (value == 1 || value === '') value = ''; + else if (value < 0.00001) value = 0; + element.style.opacity = value; + return element; + } + + function setOpacity_IE(element, value) { + if (STANDARD_CSS_OPACITY_SUPPORTED) + return setOpacity(element, value); + + element = hasLayout_IE($(element)); + var filter = Element.getStyle(element, 'filter'), + style = element.style; + + if (value == 1 || value === '') { + filter = stripAlphaFromFilter_IE(filter); + if (filter) style.filter = filter; + else style.removeAttribute('filter'); + return element; + } + + if (value < 0.00001) value = 0; + + style.filter = stripAlphaFromFilter_IE(filter) + + 'alpha(opacity=' + (value * 100) + ')'; + + return element; + } + + + function getOpacity(element) { + return Element.getStyle(element, 'opacity'); + } + + function getOpacity_IE(element) { + if (STANDARD_CSS_OPACITY_SUPPORTED) + return getOpacity(element); + + var filter = Element.getStyle(element, 'filter'); + if (filter.length === 0) return 1.0; + var match = (filter || '').match(/alpha\(opacity=(.*)\)/); + if (match && match[1]) return parseFloat(match[1]) / 100; + return 1.0; + } + + + Object.extend(methods, { + setStyle: setStyle, + getStyle: getStyle, + setOpacity: setOpacity, + getOpacity: getOpacity + }); + + if ('styleFloat' in DIV.style) { + methods.getStyle = getStyle_IE; + methods.setOpacity = setOpacity_IE; + methods.getOpacity = getOpacity_IE; + } + + var UID = 0; + + GLOBAL.Element.Storage = { UID: 1 }; + + function getUniqueElementID(element) { + if (element === window) return 0; + + if (typeof element._prototypeUID === 'undefined') + element._prototypeUID = Element.Storage.UID++; + return element._prototypeUID; + } + + function getUniqueElementID_IE(element) { + if (element === window) return 0; + if (element == document) return 1; + return element.uniqueID; + } + + var HAS_UNIQUE_ID_PROPERTY = ('uniqueID' in DIV); + if (HAS_UNIQUE_ID_PROPERTY) + getUniqueElementID = getUniqueElementID_IE; + + function getStorage(element) { + if (!(element = $(element))) return; + + var uid = getUniqueElementID(element); + + if (!Element.Storage[uid]) + Element.Storage[uid] = $H(); + + return Element.Storage[uid]; + } + + function store(element, key, value) { + if (!(element = $(element))) return; + var storage = getStorage(element); + if (arguments.length === 2) { + storage.update(key); + } else { + storage.set(key, value); + } + return element; + } + + function retrieve(element, key, defaultValue) { + if (!(element = $(element))) return; + var storage = getStorage(element), value = storage.get(key); + + if (Object.isUndefined(value)) { + storage.set(key, defaultValue); + value = defaultValue; + } + + return value; + } + + + Object.extend(methods, { + getStorage: getStorage, + store: store, + retrieve: retrieve + }); + + + var Methods = {}, ByTag = Element.Methods.ByTag, + F = Prototype.BrowserFeatures; + + if (!F.ElementExtensions && ('__proto__' in DIV)) { + GLOBAL.HTMLElement = {}; + GLOBAL.HTMLElement.prototype = DIV['__proto__']; + F.ElementExtensions = true; + } + + function checkElementPrototypeDeficiency(tagName) { + if (typeof window.Element === 'undefined') return false; + if (!HAS_EXTENDED_CREATE_ELEMENT_SYNTAX) return false; + var proto = window.Element.prototype; + if (proto) { + var id = '_' + (Math.random() + '').slice(2), + el = document.createElement(tagName); + proto[id] = 'x'; + var isBuggy = (el[id] !== 'x'); + delete proto[id]; + el = null; + return isBuggy; + } + + return false; + } + + var HTMLOBJECTELEMENT_PROTOTYPE_BUGGY = + checkElementPrototypeDeficiency('object'); + + function extendElementWith(element, methods) { + for (var property in methods) { + var value = methods[property]; + if (Object.isFunction(value) && !(property in element)) + element[property] = value.methodize(); + } + } + + var EXTENDED = {}; + function elementIsExtended(element) { + var uid = getUniqueElementID(element); + return (uid in EXTENDED); + } + + function extend(element) { + if (!element || elementIsExtended(element)) return element; + if (element.nodeType !== Node.ELEMENT_NODE || element == window) + return element; + + var methods = Object.clone(Methods), + tagName = element.tagName.toUpperCase(); + + if (ByTag[tagName]) Object.extend(methods, ByTag[tagName]); + + extendElementWith(element, methods); + EXTENDED[getUniqueElementID(element)] = true; + return element; + } + + function extend_IE8(element) { + if (!element || elementIsExtended(element)) return element; + + var t = element.tagName; + if (t && (/^(?:object|applet|embed)$/i.test(t))) { + extendElementWith(element, Element.Methods); + extendElementWith(element, Element.Methods.Simulated); + extendElementWith(element, Element.Methods.ByTag[t.toUpperCase()]); + } + + return element; + } + + if (F.SpecificElementExtensions) { + extend = HTMLOBJECTELEMENT_PROTOTYPE_BUGGY ? extend_IE8 : Prototype.K; + } + + function addMethodsToTagName(tagName, methods) { + tagName = tagName.toUpperCase(); + if (!ByTag[tagName]) ByTag[tagName] = {}; + Object.extend(ByTag[tagName], methods); + } + + function mergeMethods(destination, methods, onlyIfAbsent) { + if (Object.isUndefined(onlyIfAbsent)) onlyIfAbsent = false; + for (var property in methods) { + var value = methods[property]; + if (!Object.isFunction(value)) continue; + if (!onlyIfAbsent || !(property in destination)) + destination[property] = value.methodize(); + } + } + + function findDOMClass(tagName) { + var klass; + var trans = { + "OPTGROUP": "OptGroup", "TEXTAREA": "TextArea", "P": "Paragraph", + "FIELDSET": "FieldSet", "UL": "UList", "OL": "OList", "DL": "DList", + "DIR": "Directory", "H1": "Heading", "H2": "Heading", "H3": "Heading", + "H4": "Heading", "H5": "Heading", "H6": "Heading", "Q": "Quote", + "INS": "Mod", "DEL": "Mod", "A": "Anchor", "IMG": "Image", "CAPTION": + "TableCaption", "COL": "TableCol", "COLGROUP": "TableCol", "THEAD": + "TableSection", "TFOOT": "TableSection", "TBODY": "TableSection", "TR": + "TableRow", "TH": "TableCell", "TD": "TableCell", "FRAMESET": + "FrameSet", "IFRAME": "IFrame" + }; + if (trans[tagName]) klass = 'HTML' + trans[tagName] + 'Element'; + if (window[klass]) return window[klass]; + klass = 'HTML' + tagName + 'Element'; + if (window[klass]) return window[klass]; + klass = 'HTML' + tagName.capitalize() + 'Element'; + if (window[klass]) return window[klass]; + + var element = document.createElement(tagName), + proto = element['__proto__'] || element.constructor.prototype; + + element = null; + return proto; + } + + function addMethods(methods) { + if (arguments.length === 0) addFormMethods(); + + if (arguments.length === 2) { + var tagName = methods; + methods = arguments[1]; + } + + if (!tagName) { + Object.extend(Element.Methods, methods || {}); + } else { + if (Object.isArray(tagName)) { + for (var i = 0, tag; tag = tagName[i]; i++) + addMethodsToTagName(tag, methods); + } else { + addMethodsToTagName(tagName, methods); + } + } + + var ELEMENT_PROTOTYPE = window.HTMLElement ? HTMLElement.prototype : + Element.prototype; + + if (F.ElementExtensions) { + mergeMethods(ELEMENT_PROTOTYPE, Element.Methods); + mergeMethods(ELEMENT_PROTOTYPE, Element.Methods.Simulated, true); + } + + if (F.SpecificElementExtensions) { + for (var tag in Element.Methods.ByTag) { + var klass = findDOMClass(tag); + if (Object.isUndefined(klass)) continue; + mergeMethods(klass.prototype, ByTag[tag]); + } + } + + Object.extend(Element, Element.Methods); + Object.extend(Element, Element.Methods.Simulated); + delete Element.ByTag; + delete Element.Simulated; + + Element.extend.refresh(); + + ELEMENT_CACHE = {}; + } + + Object.extend(GLOBAL.Element, { + extend: extend, + addMethods: addMethods + }); + + if (extend === Prototype.K) { + GLOBAL.Element.extend.refresh = Prototype.emptyFunction; + } else { + GLOBAL.Element.extend.refresh = function() { + if (Prototype.BrowserFeatures.ElementExtensions) return; + Object.extend(Methods, Element.Methods); + Object.extend(Methods, Element.Methods.Simulated); + + EXTENDED = {}; + }; + } + + function addFormMethods() { + Object.extend(Form, Form.Methods); + Object.extend(Form.Element, Form.Element.Methods); + Object.extend(Element.Methods.ByTag, { + "FORM": Object.clone(Form.Methods), + "INPUT": Object.clone(Form.Element.Methods), + "SELECT": Object.clone(Form.Element.Methods), + "TEXTAREA": Object.clone(Form.Element.Methods), + "BUTTON": Object.clone(Form.Element.Methods) + }); + } + + Element.addMethods(methods); + + function destroyCache_IE() { + DIV = null; + ELEMENT_CACHE = null; + } + + if (window.attachEvent) + window.attachEvent('onunload', destroyCache_IE); + +})(this); +(function() { + + function toDecimal(pctString) { + var match = pctString.match(/^(\d+)%?$/i); + if (!match) return null; + return (Number(match[1]) / 100); + } + + function getRawStyle(element, style) { + element = $(element); + + var value = element.style[style]; + if (!value || value === 'auto') { + var css = document.defaultView.getComputedStyle(element, null); + value = css ? css[style] : null; + } + + if (style === 'opacity') return value ? parseFloat(value) : 1.0; + return value === 'auto' ? null : value; + } + + function getRawStyle_IE(element, style) { + var value = element.style[style]; + if (!value && element.currentStyle) { + value = element.currentStyle[style]; + } + return value; + } + + function getContentWidth(element, context) { + var boxWidth = element.offsetWidth; + + var bl = getPixelValue(element, 'borderLeftWidth', context) || 0; + var br = getPixelValue(element, 'borderRightWidth', context) || 0; + var pl = getPixelValue(element, 'paddingLeft', context) || 0; + var pr = getPixelValue(element, 'paddingRight', context) || 0; + + return boxWidth - bl - br - pl - pr; + } + + if ('currentStyle' in document.documentElement) { + getRawStyle = getRawStyle_IE; + } + + + function getPixelValue(value, property, context) { + var element = null; + if (Object.isElement(value)) { + element = value; + value = getRawStyle(element, property); + } + + if (value === null || Object.isUndefined(value)) { + return null; + } + + if ((/^(?:-)?\d+(\.\d+)?(px)?$/i).test(value)) { + return window.parseFloat(value); + } + + var isPercentage = value.include('%'), isViewport = (context === document.viewport); + + if (/\d/.test(value) && element && element.runtimeStyle && !(isPercentage && isViewport)) { + var style = element.style.left, rStyle = element.runtimeStyle.left; + element.runtimeStyle.left = element.currentStyle.left; + element.style.left = value || 0; + value = element.style.pixelLeft; + element.style.left = style; + element.runtimeStyle.left = rStyle; + + return value; + } + + if (element && isPercentage) { + context = context || element.parentNode; + var decimal = toDecimal(value), whole = null; + + var isHorizontal = property.include('left') || property.include('right') || + property.include('width'); + + var isVertical = property.include('top') || property.include('bottom') || + property.include('height'); + + if (context === document.viewport) { + if (isHorizontal) { + whole = document.viewport.getWidth(); + } else if (isVertical) { + whole = document.viewport.getHeight(); + } + } else { + if (isHorizontal) { + whole = $(context).measure('width'); + } else if (isVertical) { + whole = $(context).measure('height'); + } + } + + return (whole === null) ? 0 : whole * decimal; + } + + return 0; + } + + function toCSSPixels(number) { + if (Object.isString(number) && number.endsWith('px')) + return number; + return number + 'px'; + } + + function isDisplayed(element) { + while (element && element.parentNode) { + var display = element.getStyle('display'); + if (display === 'none') { + return false; + } + element = $(element.parentNode); + } + return true; + } + + var hasLayout = Prototype.K; + if ('currentStyle' in document.documentElement) { + hasLayout = function(element) { + if (!element.currentStyle.hasLayout) { + element.style.zoom = 1; + } + return element; + }; + } + + function cssNameFor(key) { + if (key.include('border')) key = key + '-width'; + return key.camelize(); + } + + Element.Layout = Class.create(Hash, { + initialize: function($super, element, preCompute) { + $super(); + this.element = $(element); + + Element.Layout.PROPERTIES.each( function(property) { + this._set(property, null); + }, this); + + if (preCompute) { + this._preComputing = true; + this._begin(); + Element.Layout.PROPERTIES.each( this._compute, this ); + this._end(); + this._preComputing = false; + } + }, + + _set: function(property, value) { + return Hash.prototype.set.call(this, property, value); + }, + + set: function(property, value) { + throw "Properties of Element.Layout are read-only."; + }, + + get: function($super, property) { + var value = $super(property); + return value === null ? this._compute(property) : value; + }, + + _begin: function() { + if (this._isPrepared()) return; + + var element = this.element; + if (isDisplayed(element)) { + this._setPrepared(true); + return; + } + + + var originalStyles = { + position: element.style.position || '', + width: element.style.width || '', + visibility: element.style.visibility || '', + display: element.style.display || '' + }; + + element.store('prototype_original_styles', originalStyles); + + var position = getRawStyle(element, 'position'), width = element.offsetWidth; + + if (width === 0 || width === null) { + element.style.display = 'block'; + width = element.offsetWidth; + } + + var context = (position === 'fixed') ? document.viewport : + element.parentNode; + + var tempStyles = { + visibility: 'hidden', + display: 'block' + }; + + if (position !== 'fixed') tempStyles.position = 'absolute'; + + element.setStyle(tempStyles); + + var positionedWidth = element.offsetWidth, newWidth; + if (width && (positionedWidth === width)) { + newWidth = getContentWidth(element, context); + } else if (position === 'absolute' || position === 'fixed') { + newWidth = getContentWidth(element, context); + } else { + var parent = element.parentNode, pLayout = $(parent).getLayout(); + + newWidth = pLayout.get('width') - + this.get('margin-left') - + this.get('border-left') - + this.get('padding-left') - + this.get('padding-right') - + this.get('border-right') - + this.get('margin-right'); + } + + element.setStyle({ width: newWidth + 'px' }); + + this._setPrepared(true); + }, + + _end: function() { + var element = this.element; + var originalStyles = element.retrieve('prototype_original_styles'); + element.store('prototype_original_styles', null); + element.setStyle(originalStyles); + this._setPrepared(false); + }, + + _compute: function(property) { + var COMPUTATIONS = Element.Layout.COMPUTATIONS; + if (!(property in COMPUTATIONS)) { + throw "Property not found."; + } + + return this._set(property, COMPUTATIONS[property].call(this, this.element)); + }, + + _isPrepared: function() { + return this.element.retrieve('prototype_element_layout_prepared', false); + }, + + _setPrepared: function(bool) { + return this.element.store('prototype_element_layout_prepared', bool); + }, + + toObject: function() { + var args = $A(arguments); + var keys = (args.length === 0) ? Element.Layout.PROPERTIES : + args.join(' ').split(' '); + var obj = {}; + keys.each( function(key) { + if (!Element.Layout.PROPERTIES.include(key)) return; + var value = this.get(key); + if (value != null) obj[key] = value; + }, this); + return obj; + }, + + toHash: function() { + var obj = this.toObject.apply(this, arguments); + return new Hash(obj); + }, + + toCSS: function() { + var args = $A(arguments); + var keys = (args.length === 0) ? Element.Layout.PROPERTIES : + args.join(' ').split(' '); + var css = {}; + + keys.each( function(key) { + if (!Element.Layout.PROPERTIES.include(key)) return; + if (Element.Layout.COMPOSITE_PROPERTIES.include(key)) return; + + var value = this.get(key); + if (value != null) css[cssNameFor(key)] = value + 'px'; + }, this); + return css; + }, + + inspect: function() { + return "#"; + } + }); + + Object.extend(Element.Layout, { + PROPERTIES: $w('height width top left right bottom border-left border-right border-top border-bottom padding-left padding-right padding-top padding-bottom margin-top margin-bottom margin-left margin-right padding-box-width padding-box-height border-box-width border-box-height margin-box-width margin-box-height'), + + COMPOSITE_PROPERTIES: $w('padding-box-width padding-box-height margin-box-width margin-box-height border-box-width border-box-height'), + + COMPUTATIONS: { + 'height': function(element) { + if (!this._preComputing) this._begin(); + + var bHeight = this.get('border-box-height'); + if (bHeight <= 0) { + if (!this._preComputing) this._end(); + return 0; + } + + var bTop = this.get('border-top'), + bBottom = this.get('border-bottom'); + + var pTop = this.get('padding-top'), + pBottom = this.get('padding-bottom'); + + if (!this._preComputing) this._end(); + + return bHeight - bTop - bBottom - pTop - pBottom; + }, + + 'width': function(element) { + if (!this._preComputing) this._begin(); + + var bWidth = this.get('border-box-width'); + if (bWidth <= 0) { + if (!this._preComputing) this._end(); + return 0; + } + + var bLeft = this.get('border-left'), + bRight = this.get('border-right'); + + var pLeft = this.get('padding-left'), + pRight = this.get('padding-right'); + + if (!this._preComputing) this._end(); + return bWidth - bLeft - bRight - pLeft - pRight; + }, + + 'padding-box-height': function(element) { + var height = this.get('height'), + pTop = this.get('padding-top'), + pBottom = this.get('padding-bottom'); + + return height + pTop + pBottom; + }, + + 'padding-box-width': function(element) { + var width = this.get('width'), + pLeft = this.get('padding-left'), + pRight = this.get('padding-right'); + + return width + pLeft + pRight; + }, + + 'border-box-height': function(element) { + if (!this._preComputing) this._begin(); + var height = element.offsetHeight; + if (!this._preComputing) this._end(); + return height; + }, + + 'border-box-width': function(element) { + if (!this._preComputing) this._begin(); + var width = element.offsetWidth; + if (!this._preComputing) this._end(); + return width; + }, + + 'margin-box-height': function(element) { + var bHeight = this.get('border-box-height'), + mTop = this.get('margin-top'), + mBottom = this.get('margin-bottom'); + + if (bHeight <= 0) return 0; + + return bHeight + mTop + mBottom; + }, + + 'margin-box-width': function(element) { + var bWidth = this.get('border-box-width'), + mLeft = this.get('margin-left'), + mRight = this.get('margin-right'); + + if (bWidth <= 0) return 0; + + return bWidth + mLeft + mRight; + }, + + 'top': function(element) { + var offset = element.positionedOffset(); + return offset.top; + }, + + 'bottom': function(element) { + var offset = element.positionedOffset(), + parent = element.getOffsetParent(), + pHeight = parent.measure('height'); + + var mHeight = this.get('border-box-height'); + + return pHeight - mHeight - offset.top; + }, + + 'left': function(element) { + var offset = element.positionedOffset(); + return offset.left; + }, + + 'right': function(element) { + var offset = element.positionedOffset(), + parent = element.getOffsetParent(), + pWidth = parent.measure('width'); + + var mWidth = this.get('border-box-width'); + + return pWidth - mWidth - offset.left; + }, + + 'padding-top': function(element) { + return getPixelValue(element, 'paddingTop'); + }, + + 'padding-bottom': function(element) { + return getPixelValue(element, 'paddingBottom'); + }, + + 'padding-left': function(element) { + return getPixelValue(element, 'paddingLeft'); + }, + + 'padding-right': function(element) { + return getPixelValue(element, 'paddingRight'); + }, + + 'border-top': function(element) { + return getPixelValue(element, 'borderTopWidth'); + }, + + 'border-bottom': function(element) { + return getPixelValue(element, 'borderBottomWidth'); + }, + + 'border-left': function(element) { + return getPixelValue(element, 'borderLeftWidth'); + }, + + 'border-right': function(element) { + return getPixelValue(element, 'borderRightWidth'); + }, + + 'margin-top': function(element) { + return getPixelValue(element, 'marginTop'); + }, + + 'margin-bottom': function(element) { + return getPixelValue(element, 'marginBottom'); + }, + + 'margin-left': function(element) { + return getPixelValue(element, 'marginLeft'); + }, + + 'margin-right': function(element) { + return getPixelValue(element, 'marginRight'); + } + } + }); + + if ('getBoundingClientRect' in document.documentElement) { + Object.extend(Element.Layout.COMPUTATIONS, { + 'right': function(element) { + var parent = hasLayout(element.getOffsetParent()); + var rect = element.getBoundingClientRect(), + pRect = parent.getBoundingClientRect(); + + return (pRect.right - rect.right).round(); + }, + + 'bottom': function(element) { + var parent = hasLayout(element.getOffsetParent()); + var rect = element.getBoundingClientRect(), + pRect = parent.getBoundingClientRect(); + + return (pRect.bottom - rect.bottom).round(); + } + }); + } + + Element.Offset = Class.create({ + initialize: function(left, top) { + this.left = left.round(); + this.top = top.round(); + + this[0] = this.left; + this[1] = this.top; + }, + + relativeTo: function(offset) { + return new Element.Offset( + this.left - offset.left, + this.top - offset.top + ); + }, + + inspect: function() { + return "#".interpolate(this); + }, + + toString: function() { + return "[#{left}, #{top}]".interpolate(this); + }, + + toArray: function() { + return [this.left, this.top]; + } + }); + + function getLayout(element, preCompute) { + return new Element.Layout(element, preCompute); + } + + function measure(element, property) { + return $(element).getLayout().get(property); + } + + function getHeight(element) { + return Element.getDimensions(element).height; + } + + function getWidth(element) { + return Element.getDimensions(element).width; + } + + function getDimensions(element) { + element = $(element); + var display = Element.getStyle(element, 'display'); + + if (display && display !== 'none') { + return { width: element.offsetWidth, height: element.offsetHeight }; + } + + var style = element.style; + var originalStyles = { + visibility: style.visibility, + position: style.position, + display: style.display + }; + + var newStyles = { + visibility: 'hidden', + display: 'block' + }; + + if (originalStyles.position !== 'fixed') + newStyles.position = 'absolute'; + + Element.setStyle(element, newStyles); + + var dimensions = { + width: element.offsetWidth, + height: element.offsetHeight + }; + + Element.setStyle(element, originalStyles); + + return dimensions; + } + + function getOffsetParent(element) { + element = $(element); + + if (isDocument(element) || isDetached(element) || isBody(element) || isHtml(element)) + return $(document.body); + + var isInline = (Element.getStyle(element, 'display') === 'inline'); + if (!isInline && element.offsetParent) return $(element.offsetParent); + + while ((element = element.parentNode) && element !== document.body) { + if (Element.getStyle(element, 'position') !== 'static') { + return isHtml(element) ? $(document.body) : $(element); + } + } + + return $(document.body); + } + + + function cumulativeOffset(element) { + element = $(element); + var valueT = 0, valueL = 0; + if (element.parentNode) { + do { + valueT += element.offsetTop || 0; + valueL += element.offsetLeft || 0; + element = element.offsetParent; + } while (element); + } + return new Element.Offset(valueL, valueT); + } + + function positionedOffset(element) { + element = $(element); + + var layout = element.getLayout(); + + var valueT = 0, valueL = 0; + do { + valueT += element.offsetTop || 0; + valueL += element.offsetLeft || 0; + element = element.offsetParent; + if (element) { + if (isBody(element)) break; + var p = Element.getStyle(element, 'position'); + if (p !== 'static') break; + } + } while (element); + + valueL -= layout.get('margin-top'); + valueT -= layout.get('margin-left'); + + return new Element.Offset(valueL, valueT); + } + + function cumulativeScrollOffset(element) { + var valueT = 0, valueL = 0; + do { + if (element === document.body) { + var bodyScrollNode = document.documentElement || document.body.parentNode || document.body; + valueT += !Object.isUndefined(window.pageYOffset) ? window.pageYOffset : bodyScrollNode.scrollTop || 0; + valueL += !Object.isUndefined(window.pageXOffset) ? window.pageXOffset : bodyScrollNode.scrollLeft || 0; + break; + } else { + valueT += element.scrollTop || 0; + valueL += element.scrollLeft || 0; + element = element.parentNode; + } + } while (element); + return new Element.Offset(valueL, valueT); + } + + function viewportOffset(forElement) { + var valueT = 0, valueL = 0, docBody = document.body; + + forElement = $(forElement); + var element = forElement; + do { + valueT += element.offsetTop || 0; + valueL += element.offsetLeft || 0; + if (element.offsetParent == docBody && + Element.getStyle(element, 'position') == 'absolute') break; + } while (element = element.offsetParent); + + element = forElement; + do { + if (element != docBody) { + valueT -= element.scrollTop || 0; + valueL -= element.scrollLeft || 0; + } + } while (element = element.parentNode); + return new Element.Offset(valueL, valueT); + } + + function absolutize(element) { + element = $(element); + + if (Element.getStyle(element, 'position') === 'absolute') { + return element; + } + + var offsetParent = getOffsetParent(element); + var eOffset = element.viewportOffset(), + pOffset = offsetParent.viewportOffset(); + + var offset = eOffset.relativeTo(pOffset); + var layout = element.getLayout(); + + element.store('prototype_absolutize_original_styles', { + position: element.getStyle('position'), + left: element.getStyle('left'), + top: element.getStyle('top'), + width: element.getStyle('width'), + height: element.getStyle('height') + }); + + element.setStyle({ + position: 'absolute', + top: offset.top + 'px', + left: offset.left + 'px', + width: layout.get('width') + 'px', + height: layout.get('height') + 'px' + }); + + return element; + } + + function relativize(element) { + element = $(element); + if (Element.getStyle(element, 'position') === 'relative') { + return element; + } + + var originalStyles = + element.retrieve('prototype_absolutize_original_styles'); + + if (originalStyles) element.setStyle(originalStyles); + return element; + } + + + function scrollTo(element) { + element = $(element); + var pos = Element.cumulativeOffset(element); + window.scrollTo(pos.left, pos.top); + return element; + } + + + function makePositioned(element) { + element = $(element); + var position = Element.getStyle(element, 'position'), styles = {}; + if (position === 'static' || !position) { + styles.position = 'relative'; + if (Prototype.Browser.Opera) { + styles.top = 0; + styles.left = 0; + } + Element.setStyle(element, styles); + Element.store(element, 'prototype_made_positioned', true); + } + return element; + } + + function undoPositioned(element) { + element = $(element); + var storage = Element.getStorage(element), + madePositioned = storage.get('prototype_made_positioned'); + + if (madePositioned) { + storage.unset('prototype_made_positioned'); + Element.setStyle(element, { + position: '', + top: '', + bottom: '', + left: '', + right: '' + }); + } + return element; + } + + function makeClipping(element) { + element = $(element); + + var storage = Element.getStorage(element), + madeClipping = storage.get('prototype_made_clipping'); + + if (Object.isUndefined(madeClipping)) { + var overflow = Element.getStyle(element, 'overflow'); + storage.set('prototype_made_clipping', overflow); + if (overflow !== 'hidden') + element.style.overflow = 'hidden'; + } + + return element; + } + + function undoClipping(element) { + element = $(element); + var storage = Element.getStorage(element), + overflow = storage.get('prototype_made_clipping'); + + if (!Object.isUndefined(overflow)) { + storage.unset('prototype_made_clipping'); + element.style.overflow = overflow || ''; + } + + return element; + } + + function clonePosition(element, source, options) { + options = Object.extend({ + setLeft: true, + setTop: true, + setWidth: true, + setHeight: true, + offsetTop: 0, + offsetLeft: 0 + }, options || {}); + + source = $(source); + element = $(element); + var p, delta, layout, styles = {}; + + if (options.setLeft || options.setTop) { + p = Element.viewportOffset(source); + delta = [0, 0]; + if (Element.getStyle(element, 'position') === 'absolute') { + var parent = Element.getOffsetParent(element); + if (parent !== document.body) delta = Element.viewportOffset(parent); + } + } + + if (options.setWidth || options.setHeight) { + layout = Element.getLayout(source); + } + + if (options.setLeft) + styles.left = (p[0] - delta[0] + options.offsetLeft) + 'px'; + if (options.setTop) + styles.top = (p[1] - delta[1] + options.offsetTop) + 'px'; + + if (options.setWidth) + styles.width = layout.get('border-box-width') + 'px'; + if (options.setHeight) + styles.height = layout.get('border-box-height') + 'px'; + + return Element.setStyle(element, styles); + } + + + if (Prototype.Browser.IE) { + getOffsetParent = getOffsetParent.wrap( + function(proceed, element) { + element = $(element); + + if (isDocument(element) || isDetached(element) || isBody(element) || isHtml(element)) + return $(document.body); + + var position = element.getStyle('position'); + if (position !== 'static') return proceed(element); + + element.setStyle({ position: 'relative' }); + var value = proceed(element); + element.setStyle({ position: position }); + return value; + } + ); + + positionedOffset = positionedOffset.wrap(function(proceed, element) { + element = $(element); + if (!element.parentNode) return new Element.Offset(0, 0); + var position = element.getStyle('position'); + if (position !== 'static') return proceed(element); + + var offsetParent = element.getOffsetParent(); + if (offsetParent && offsetParent.getStyle('position') === 'fixed') + hasLayout(offsetParent); + + element.setStyle({ position: 'relative' }); + var value = proceed(element); + element.setStyle({ position: position }); + return value; + }); + } else if (Prototype.Browser.Webkit) { + cumulativeOffset = function(element) { + element = $(element); + var valueT = 0, valueL = 0; + do { + valueT += element.offsetTop || 0; + valueL += element.offsetLeft || 0; + if (element.offsetParent == document.body) { + if (Element.getStyle(element, 'position') == 'absolute') break; + } + + element = element.offsetParent; + } while (element); + + return new Element.Offset(valueL, valueT); + }; + } + + + Element.addMethods({ + getLayout: getLayout, + measure: measure, + getWidth: getWidth, + getHeight: getHeight, + getDimensions: getDimensions, + getOffsetParent: getOffsetParent, + cumulativeOffset: cumulativeOffset, + positionedOffset: positionedOffset, + cumulativeScrollOffset: cumulativeScrollOffset, + viewportOffset: viewportOffset, + absolutize: absolutize, + relativize: relativize, + scrollTo: scrollTo, + makePositioned: makePositioned, + undoPositioned: undoPositioned, + makeClipping: makeClipping, + undoClipping: undoClipping, + clonePosition: clonePosition + }); + + function isBody(element) { + return element.nodeName.toUpperCase() === 'BODY'; + } + + function isHtml(element) { + return element.nodeName.toUpperCase() === 'HTML'; + } + + function isDocument(element) { + return element.nodeType === Node.DOCUMENT_NODE; + } + + function isDetached(element) { + return element !== document.body && + !Element.descendantOf(element, document.body); + } + + if ('getBoundingClientRect' in document.documentElement) { + Element.addMethods({ + viewportOffset: function(element) { + element = $(element); + if (isDetached(element)) return new Element.Offset(0, 0); + + var rect = element.getBoundingClientRect(), + docEl = document.documentElement; + return new Element.Offset(rect.left - docEl.clientLeft, + rect.top - docEl.clientTop); + } + }); + } + + +})(); + +(function() { + + var IS_OLD_OPERA = Prototype.Browser.Opera && + (window.parseFloat(window.opera.version()) < 9.5); + var ROOT = null; + function getRootElement() { + if (ROOT) return ROOT; + ROOT = IS_OLD_OPERA ? document.body : document.documentElement; + return ROOT; + } + + function getDimensions() { + return { width: this.getWidth(), height: this.getHeight() }; + } + + function getWidth() { + return getRootElement().clientWidth; + } + + function getHeight() { + return getRootElement().clientHeight; + } + + function getScrollOffsets() { + var x = window.pageXOffset || document.documentElement.scrollLeft || + document.body.scrollLeft; + var y = window.pageYOffset || document.documentElement.scrollTop || + document.body.scrollTop; + + return new Element.Offset(x, y); + } + + document.viewport = { + getDimensions: getDimensions, + getWidth: getWidth, + getHeight: getHeight, + getScrollOffsets: getScrollOffsets + }; + +})(); +window.$$ = function() { + var expression = $A(arguments).join(', '); + return Prototype.Selector.select(expression, document); +}; + +Prototype.Selector = (function() { + + function select() { + throw new Error('Method "Prototype.Selector.select" must be defined.'); + } + + function match() { + throw new Error('Method "Prototype.Selector.match" must be defined.'); + } + + function find(elements, expression, index) { + index = index || 0; + var match = Prototype.Selector.match, length = elements.length, matchIndex = 0, i; + + for (i = 0; i < length; i++) { + if (match(elements[i], expression) && index == matchIndex++) { + return Element.extend(elements[i]); + } + } + } + + function extendElements(elements) { + for (var i = 0, length = elements.length; i < length; i++) { + Element.extend(elements[i]); + } + return elements; + } + + + var K = Prototype.K; + + return { + select: select, + match: match, + find: find, + extendElements: (Element.extend === K) ? K : extendElements, + extendElement: Element.extend + }; +})(); +Prototype._original_property = window.Sizzle; +/*! + * Sizzle CSS Selector Engine v@VERSION + * http://sizzlejs.com/ + * + * Copyright 2013 jQuery Foundation, Inc. and other contributors + * Released under the MIT license + * http://jquery.org/license + * + * Date: @DATE + */ +(function( window ) { + +var i, + support, + Expr, + getText, + isXML, + compile, + select, + outermostContext, + sortInput, + hasDuplicate, + + setDocument, + document, + docElem, + documentIsHTML, + rbuggyQSA, + rbuggyMatches, + matches, + contains, + + expando = "sizzle" + -(new Date()), + preferredDoc = window.document, + dirruns = 0, + done = 0, + classCache = createCache(), + tokenCache = createCache(), + compilerCache = createCache(), + sortOrder = function( a, b ) { + if ( a === b ) { + hasDuplicate = true; + } + return 0; + }, + + strundefined = typeof undefined, + MAX_NEGATIVE = 1 << 31, + + hasOwn = ({}).hasOwnProperty, + arr = [], + pop = arr.pop, + push_native = arr.push, + push = arr.push, + slice = arr.slice, + indexOf = arr.indexOf || function( elem ) { + var i = 0, + len = this.length; + for ( ; i < len; i++ ) { + if ( this[i] === elem ) { + return i; + } + } + return -1; + }, + + booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped", + + + whitespace = "[\\x20\\t\\r\\n\\f]", + characterEncoding = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+", + + identifier = characterEncoding.replace( "w", "w#" ), + + attributes = "\\[" + whitespace + "*(" + characterEncoding + ")" + whitespace + + "*(?:([*^$|!~]?=)" + whitespace + "*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|(" + identifier + ")|)|)" + whitespace + "*\\]", + + pseudos = ":(" + characterEncoding + ")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|" + attributes.replace( 3, 8 ) + ")*)|.*)\\)|)", + + rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ), + + rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), + rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ), + + rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]", "g" ), + + rpseudo = new RegExp( pseudos ), + ridentifier = new RegExp( "^" + identifier + "$" ), + + matchExpr = { + "ID": new RegExp( "^#(" + characterEncoding + ")" ), + "CLASS": new RegExp( "^\\.(" + characterEncoding + ")" ), + "TAG": new RegExp( "^(" + characterEncoding.replace( "w", "w*" ) + ")" ), + "ATTR": new RegExp( "^" + attributes ), + "PSEUDO": new RegExp( "^" + pseudos ), + "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace + + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace + + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), + "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), + "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + + whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) + }, + + rinputs = /^(?:input|select|textarea|button)$/i, + rheader = /^h\d$/i, + + rnative = /^[^{]+\{\s*\[native \w/, + + rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, + + rsibling = /[+~]/, + rescape = /'|\\/g, + + runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ), + funescape = function( _, escaped, escapedWhitespace ) { + var high = "0x" + escaped - 0x10000; + return high !== high || escapedWhitespace ? + escaped : + high < 0 ? + String.fromCharCode( high + 0x10000 ) : + String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); + }; + +try { + push.apply( + (arr = slice.call( preferredDoc.childNodes )), + preferredDoc.childNodes + ); + arr[ preferredDoc.childNodes.length ].nodeType; +} catch ( e ) { + push = { apply: arr.length ? + + function( target, els ) { + push_native.apply( target, slice.call(els) ); + } : + + function( target, els ) { + var j = target.length, + i = 0; + while ( (target[j++] = els[i++]) ) {} + target.length = j - 1; + } + }; +} + +function Sizzle( selector, context, results, seed ) { + var match, elem, m, nodeType, + i, groups, old, nid, newContext, newSelector; + + if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) { + setDocument( context ); + } + + context = context || document; + results = results || []; + + if ( !selector || typeof selector !== "string" ) { + return results; + } + + if ( (nodeType = context.nodeType) !== 1 && nodeType !== 9 ) { + return []; + } + + if ( documentIsHTML && !seed ) { + + if ( (match = rquickExpr.exec( selector )) ) { + if ( (m = match[1]) ) { + if ( nodeType === 9 ) { + elem = context.getElementById( m ); + if ( elem && elem.parentNode ) { + if ( elem.id === m ) { + results.push( elem ); + return results; + } + } else { + return results; + } + } else { + if ( context.ownerDocument && (elem = context.ownerDocument.getElementById( m )) && + contains( context, elem ) && elem.id === m ) { + results.push( elem ); + return results; + } + } + + } else if ( match[2] ) { + push.apply( results, context.getElementsByTagName( selector ) ); + return results; + + } else if ( (m = match[3]) && support.getElementsByClassName && context.getElementsByClassName ) { + push.apply( results, context.getElementsByClassName( m ) ); + return results; + } + } + + if ( support.qsa && (!rbuggyQSA || !rbuggyQSA.test( selector )) ) { + nid = old = expando; + newContext = context; + newSelector = nodeType === 9 && selector; + + if ( nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) { + groups = tokenize( selector ); + + if ( (old = context.getAttribute("id")) ) { + nid = old.replace( rescape, "\\$&" ); + } else { + context.setAttribute( "id", nid ); + } + nid = "[id='" + nid + "'] "; + + i = groups.length; + while ( i-- ) { + groups[i] = nid + toSelector( groups[i] ); + } + newContext = rsibling.test( selector ) && testContext( context.parentNode ) || context; + newSelector = groups.join(","); + } + + if ( newSelector ) { + try { + push.apply( results, + newContext.querySelectorAll( newSelector ) + ); + return results; + } catch(qsaError) { + } finally { + if ( !old ) { + context.removeAttribute("id"); + } + } + } + } + } + + return select( selector.replace( rtrim, "$1" ), context, results, seed ); +} + +/** + * Create key-value caches of limited size + * @returns {Function(string, Object)} Returns the Object data after storing it on itself with + * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) + * deleting the oldest entry + */ +function createCache() { + var keys = []; + + function cache( key, value ) { + if ( keys.push( key + " " ) > Expr.cacheLength ) { + delete cache[ keys.shift() ]; + } + return (cache[ key + " " ] = value); + } + return cache; +} + +/** + * Mark a function for special use by Sizzle + * @param {Function} fn The function to mark + */ +function markFunction( fn ) { + fn[ expando ] = true; + return fn; +} + +/** + * Support testing using an element + * @param {Function} fn Passed the created div and expects a boolean result + */ +function assert( fn ) { + var div = document.createElement("div"); + + try { + return !!fn( div ); + } catch (e) { + return false; + } finally { + if ( div.parentNode ) { + div.parentNode.removeChild( div ); + } + div = null; + } +} + +/** + * Adds the same handler for all of the specified attrs + * @param {String} attrs Pipe-separated list of attributes + * @param {Function} handler The method that will be applied + */ +function addHandle( attrs, handler ) { + var arr = attrs.split("|"), + i = attrs.length; + + while ( i-- ) { + Expr.attrHandle[ arr[i] ] = handler; + } +} + +/** + * Checks document order of two siblings + * @param {Element} a + * @param {Element} b + * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b + */ +function siblingCheck( a, b ) { + var cur = b && a, + diff = cur && a.nodeType === 1 && b.nodeType === 1 && + ( ~b.sourceIndex || MAX_NEGATIVE ) - + ( ~a.sourceIndex || MAX_NEGATIVE ); + + if ( diff ) { + return diff; + } + + if ( cur ) { + while ( (cur = cur.nextSibling) ) { + if ( cur === b ) { + return -1; + } + } + } + + return a ? 1 : -1; +} + +/** + * Returns a function to use in pseudos for input types + * @param {String} type + */ +function createInputPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for buttons + * @param {String} type + */ +function createButtonPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return (name === "input" || name === "button") && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for positionals + * @param {Function} fn + */ +function createPositionalPseudo( fn ) { + return markFunction(function( argument ) { + argument = +argument; + return markFunction(function( seed, matches ) { + var j, + matchIndexes = fn( [], seed.length, argument ), + i = matchIndexes.length; + + while ( i-- ) { + if ( seed[ (j = matchIndexes[i]) ] ) { + seed[j] = !(matches[j] = seed[j]); + } + } + }); + }); +} + +/** + * Checks a node for validity as a Sizzle context + * @param {Element|Object=} context + * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value + */ +function testContext( context ) { + return context && typeof context.getElementsByTagName !== strundefined && context; +} + +support = Sizzle.support = {}; + +/** + * Detects XML nodes + * @param {Element|Object} elem An element or a document + * @returns {Boolean} True iff elem is a non-HTML XML node + */ +isXML = Sizzle.isXML = function( elem ) { + var documentElement = elem && (elem.ownerDocument || elem).documentElement; + return documentElement ? documentElement.nodeName !== "HTML" : false; +}; + +/** + * Sets document-related variables once based on the current document + * @param {Element|Object} [doc] An element or document object to use to set the document + * @returns {Object} Returns the current document + */ +setDocument = Sizzle.setDocument = function( node ) { + var hasCompare, + doc = node ? node.ownerDocument || node : preferredDoc, + parent = doc.defaultView; + + if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) { + return document; + } + + document = doc; + docElem = doc.documentElement; + + documentIsHTML = !isXML( doc ); + + if ( parent && parent !== parent.top ) { + if ( parent.addEventListener ) { + parent.addEventListener( "unload", function() { + setDocument(); + }, false ); + } else if ( parent.attachEvent ) { + parent.attachEvent( "onunload", function() { + setDocument(); + }); + } + } + + /* Attributes + ---------------------------------------------------------------------- */ + + support.attributes = assert(function( div ) { + div.className = "i"; + return !div.getAttribute("className"); + }); + + /* getElement(s)By* + ---------------------------------------------------------------------- */ + + support.getElementsByTagName = assert(function( div ) { + div.appendChild( doc.createComment("") ); + return !div.getElementsByTagName("*").length; + }); + + support.getElementsByClassName = rnative.test( doc.getElementsByClassName ) && assert(function( div ) { + div.innerHTML = "
    "; + + div.firstChild.className = "i"; + return div.getElementsByClassName("i").length === 2; + }); + + support.getById = assert(function( div ) { + docElem.appendChild( div ).id = expando; + return !doc.getElementsByName || !doc.getElementsByName( expando ).length; + }); + + if ( support.getById ) { + Expr.find["ID"] = function( id, context ) { + if ( typeof context.getElementById !== strundefined && documentIsHTML ) { + var m = context.getElementById( id ); + return m && m.parentNode ? [m] : []; + } + }; + Expr.filter["ID"] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + return elem.getAttribute("id") === attrId; + }; + }; + } else { + delete Expr.find["ID"]; + + Expr.filter["ID"] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + var node = typeof elem.getAttributeNode !== strundefined && elem.getAttributeNode("id"); + return node && node.value === attrId; + }; + }; + } + + Expr.find["TAG"] = support.getElementsByTagName ? + function( tag, context ) { + if ( typeof context.getElementsByTagName !== strundefined ) { + return context.getElementsByTagName( tag ); + } + } : + function( tag, context ) { + var elem, + tmp = [], + i = 0, + results = context.getElementsByTagName( tag ); + + if ( tag === "*" ) { + while ( (elem = results[i++]) ) { + if ( elem.nodeType === 1 ) { + tmp.push( elem ); + } + } + + return tmp; + } + return results; + }; + + Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) { + if ( typeof context.getElementsByClassName !== strundefined && documentIsHTML ) { + return context.getElementsByClassName( className ); + } + }; + + /* QSA/matchesSelector + ---------------------------------------------------------------------- */ + + + rbuggyMatches = []; + + rbuggyQSA = []; + + if ( (support.qsa = rnative.test( doc.querySelectorAll )) ) { + assert(function( div ) { + div.innerHTML = ""; + + if ( div.querySelectorAll("[t^='']").length ) { + rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); + } + + if ( !div.querySelectorAll("[selected]").length ) { + rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); + } + + if ( !div.querySelectorAll(":checked").length ) { + rbuggyQSA.push(":checked"); + } + }); + + assert(function( div ) { + var input = doc.createElement("input"); + input.setAttribute( "type", "hidden" ); + div.appendChild( input ).setAttribute( "name", "D" ); + + if ( div.querySelectorAll("[name=d]").length ) { + rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" ); + } + + if ( !div.querySelectorAll(":enabled").length ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + div.querySelectorAll("*,:x"); + rbuggyQSA.push(",.*:"); + }); + } + + if ( (support.matchesSelector = rnative.test( (matches = docElem.webkitMatchesSelector || + docElem.mozMatchesSelector || + docElem.oMatchesSelector || + docElem.msMatchesSelector) )) ) { + + assert(function( div ) { + support.disconnectedMatch = matches.call( div, "div" ); + + matches.call( div, "[s!='']:x" ); + rbuggyMatches.push( "!=", pseudos ); + }); + } + + rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") ); + rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") ); + + /* Contains + ---------------------------------------------------------------------- */ + hasCompare = rnative.test( docElem.compareDocumentPosition ); + + contains = hasCompare || rnative.test( docElem.contains ) ? + function( a, b ) { + var adown = a.nodeType === 9 ? a.documentElement : a, + bup = b && b.parentNode; + return a === bup || !!( bup && bup.nodeType === 1 && ( + adown.contains ? + adown.contains( bup ) : + a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 + )); + } : + function( a, b ) { + if ( b ) { + while ( (b = b.parentNode) ) { + if ( b === a ) { + return true; + } + } + } + return false; + }; + + /* Sorting + ---------------------------------------------------------------------- */ + + sortOrder = hasCompare ? + function( a, b ) { + + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; + if ( compare ) { + return compare; + } + + compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ? + a.compareDocumentPosition( b ) : + + 1; + + if ( compare & 1 || + (!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) { + + if ( a === doc || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) { + return -1; + } + if ( b === doc || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) { + return 1; + } + + return sortInput ? + ( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) : + 0; + } + + return compare & 4 ? -1 : 1; + } : + function( a, b ) { + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + var cur, + i = 0, + aup = a.parentNode, + bup = b.parentNode, + ap = [ a ], + bp = [ b ]; + + if ( !aup || !bup ) { + return a === doc ? -1 : + b === doc ? 1 : + aup ? -1 : + bup ? 1 : + sortInput ? + ( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) : + 0; + + } else if ( aup === bup ) { + return siblingCheck( a, b ); + } + + cur = a; + while ( (cur = cur.parentNode) ) { + ap.unshift( cur ); + } + cur = b; + while ( (cur = cur.parentNode) ) { + bp.unshift( cur ); + } + + while ( ap[i] === bp[i] ) { + i++; + } + + return i ? + siblingCheck( ap[i], bp[i] ) : + + ap[i] === preferredDoc ? -1 : + bp[i] === preferredDoc ? 1 : + 0; + }; + + return doc; +}; + +Sizzle.matches = function( expr, elements ) { + return Sizzle( expr, null, null, elements ); +}; + +Sizzle.matchesSelector = function( elem, expr ) { + if ( ( elem.ownerDocument || elem ) !== document ) { + setDocument( elem ); + } + + expr = expr.replace( rattributeQuotes, "='$1']" ); + + if ( support.matchesSelector && documentIsHTML && + ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) && + ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { + + try { + var ret = matches.call( elem, expr ); + + if ( ret || support.disconnectedMatch || + elem.document && elem.document.nodeType !== 11 ) { + return ret; + } + } catch(e) {} + } + + return Sizzle( expr, document, null, [elem] ).length > 0; +}; + +Sizzle.contains = function( context, elem ) { + if ( ( context.ownerDocument || context ) !== document ) { + setDocument( context ); + } + return contains( context, elem ); +}; + +Sizzle.attr = function( elem, name ) { + if ( ( elem.ownerDocument || elem ) !== document ) { + setDocument( elem ); + } + + var fn = Expr.attrHandle[ name.toLowerCase() ], + val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? + fn( elem, name, !documentIsHTML ) : + undefined; + + return val !== undefined ? + val : + support.attributes || !documentIsHTML ? + elem.getAttribute( name ) : + (val = elem.getAttributeNode(name)) && val.specified ? + val.value : + null; +}; + +Sizzle.error = function( msg ) { + throw new Error( "Syntax error, unrecognized expression: " + msg ); +}; + +/** + * Document sorting and removing duplicates + * @param {ArrayLike} results + */ +Sizzle.uniqueSort = function( results ) { + var elem, + duplicates = [], + j = 0, + i = 0; + + hasDuplicate = !support.detectDuplicates; + sortInput = !support.sortStable && results.slice( 0 ); + results.sort( sortOrder ); + + if ( hasDuplicate ) { + while ( (elem = results[i++]) ) { + if ( elem === results[ i ] ) { + j = duplicates.push( i ); + } + } + while ( j-- ) { + results.splice( duplicates[ j ], 1 ); + } + } + + sortInput = null; + + return results; +}; + +/** + * Utility function for retrieving the text value of an array of DOM nodes + * @param {Array|Element} elem + */ +getText = Sizzle.getText = function( elem ) { + var node, + ret = "", + i = 0, + nodeType = elem.nodeType; + + if ( !nodeType ) { + while ( (node = elem[i++]) ) { + ret += getText( node ); + } + } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { + if ( typeof elem.textContent === "string" ) { + return elem.textContent; + } else { + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + ret += getText( elem ); + } + } + } else if ( nodeType === 3 || nodeType === 4 ) { + return elem.nodeValue; + } + + return ret; +}; + +Expr = Sizzle.selectors = { + + cacheLength: 50, + + createPseudo: markFunction, + + match: matchExpr, + + attrHandle: {}, + + find: {}, + + relative: { + ">": { dir: "parentNode", first: true }, + " ": { dir: "parentNode" }, + "+": { dir: "previousSibling", first: true }, + "~": { dir: "previousSibling" } + }, + + preFilter: { + "ATTR": function( match ) { + match[1] = match[1].replace( runescape, funescape ); + + match[3] = ( match[4] || match[5] || "" ).replace( runescape, funescape ); + + if ( match[2] === "~=" ) { + match[3] = " " + match[3] + " "; + } + + return match.slice( 0, 4 ); + }, + + "CHILD": function( match ) { + /* matches from matchExpr["CHILD"] + 1 type (only|nth|...) + 2 what (child|of-type) + 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) + 4 xn-component of xn+y argument ([+-]?\d*n|) + 5 sign of xn-component + 6 x of xn-component + 7 sign of y-component + 8 y of y-component + */ + match[1] = match[1].toLowerCase(); + + if ( match[1].slice( 0, 3 ) === "nth" ) { + if ( !match[3] ) { + Sizzle.error( match[0] ); + } + + match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) ); + match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" ); + + } else if ( match[3] ) { + Sizzle.error( match[0] ); + } + + return match; + }, + + "PSEUDO": function( match ) { + var excess, + unquoted = !match[5] && match[2]; + + if ( matchExpr["CHILD"].test( match[0] ) ) { + return null; + } + + if ( match[3] && match[4] !== undefined ) { + match[2] = match[4]; + + } else if ( unquoted && rpseudo.test( unquoted ) && + (excess = tokenize( unquoted, true )) && + (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) { + + match[0] = match[0].slice( 0, excess ); + match[2] = unquoted.slice( 0, excess ); + } + + return match.slice( 0, 3 ); + } + }, + + filter: { + + "TAG": function( nodeNameSelector ) { + var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); + return nodeNameSelector === "*" ? + function() { return true; } : + function( elem ) { + return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; + }; + }, + + "CLASS": function( className ) { + var pattern = classCache[ className + " " ]; + + return pattern || + (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) && + classCache( className, function( elem ) { + return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== strundefined && elem.getAttribute("class") || "" ); + }); + }, + + "ATTR": function( name, operator, check ) { + return function( elem ) { + var result = Sizzle.attr( elem, name ); + + if ( result == null ) { + return operator === "!="; + } + if ( !operator ) { + return true; + } + + result += ""; + + return operator === "=" ? result === check : + operator === "!=" ? result !== check : + operator === "^=" ? check && result.indexOf( check ) === 0 : + operator === "*=" ? check && result.indexOf( check ) > -1 : + operator === "$=" ? check && result.slice( -check.length ) === check : + operator === "~=" ? ( " " + result + " " ).indexOf( check ) > -1 : + operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : + false; + }; + }, + + "CHILD": function( type, what, argument, first, last ) { + var simple = type.slice( 0, 3 ) !== "nth", + forward = type.slice( -4 ) !== "last", + ofType = what === "of-type"; + + return first === 1 && last === 0 ? + + function( elem ) { + return !!elem.parentNode; + } : + + function( elem, context, xml ) { + var cache, outerCache, node, diff, nodeIndex, start, + dir = simple !== forward ? "nextSibling" : "previousSibling", + parent = elem.parentNode, + name = ofType && elem.nodeName.toLowerCase(), + useCache = !xml && !ofType; + + if ( parent ) { + + if ( simple ) { + while ( dir ) { + node = elem; + while ( (node = node[ dir ]) ) { + if ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) { + return false; + } + } + start = dir = type === "only" && !start && "nextSibling"; + } + return true; + } + + start = [ forward ? parent.firstChild : parent.lastChild ]; + + if ( forward && useCache ) { + outerCache = parent[ expando ] || (parent[ expando ] = {}); + cache = outerCache[ type ] || []; + nodeIndex = cache[0] === dirruns && cache[1]; + diff = cache[0] === dirruns && cache[2]; + node = nodeIndex && parent.childNodes[ nodeIndex ]; + + while ( (node = ++nodeIndex && node && node[ dir ] || + + (diff = nodeIndex = 0) || start.pop()) ) { + + if ( node.nodeType === 1 && ++diff && node === elem ) { + outerCache[ type ] = [ dirruns, nodeIndex, diff ]; + break; + } + } + + } else if ( useCache && (cache = (elem[ expando ] || (elem[ expando ] = {}))[ type ]) && cache[0] === dirruns ) { + diff = cache[1]; + + } else { + while ( (node = ++nodeIndex && node && node[ dir ] || + (diff = nodeIndex = 0) || start.pop()) ) { + + if ( ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) && ++diff ) { + if ( useCache ) { + (node[ expando ] || (node[ expando ] = {}))[ type ] = [ dirruns, diff ]; + } + + if ( node === elem ) { + break; + } + } + } + } + + diff -= last; + return diff === first || ( diff % first === 0 && diff / first >= 0 ); + } + }; + }, + + "PSEUDO": function( pseudo, argument ) { + var args, + fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || + Sizzle.error( "unsupported pseudo: " + pseudo ); + + if ( fn[ expando ] ) { + return fn( argument ); + } + + if ( fn.length > 1 ) { + args = [ pseudo, pseudo, "", argument ]; + return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? + markFunction(function( seed, matches ) { + var idx, + matched = fn( seed, argument ), + i = matched.length; + while ( i-- ) { + idx = indexOf.call( seed, matched[i] ); + seed[ idx ] = !( matches[ idx ] = matched[i] ); + } + }) : + function( elem ) { + return fn( elem, 0, args ); + }; + } + + return fn; + } + }, + + pseudos: { + "not": markFunction(function( selector ) { + var input = [], + results = [], + matcher = compile( selector.replace( rtrim, "$1" ) ); + + return matcher[ expando ] ? + markFunction(function( seed, matches, context, xml ) { + var elem, + unmatched = matcher( seed, null, xml, [] ), + i = seed.length; + + while ( i-- ) { + if ( (elem = unmatched[i]) ) { + seed[i] = !(matches[i] = elem); + } + } + }) : + function( elem, context, xml ) { + input[0] = elem; + matcher( input, null, xml, results ); + return !results.pop(); + }; + }), + + "has": markFunction(function( selector ) { + return function( elem ) { + return Sizzle( selector, elem ).length > 0; + }; + }), + + "contains": markFunction(function( text ) { + return function( elem ) { + return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1; + }; + }), + + "lang": markFunction( function( lang ) { + if ( !ridentifier.test(lang || "") ) { + Sizzle.error( "unsupported lang: " + lang ); + } + lang = lang.replace( runescape, funescape ).toLowerCase(); + return function( elem ) { + var elemLang; + do { + if ( (elemLang = documentIsHTML ? + elem.lang : + elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) { + + elemLang = elemLang.toLowerCase(); + return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; + } + } while ( (elem = elem.parentNode) && elem.nodeType === 1 ); + return false; + }; + }), + + "target": function( elem ) { + var hash = window.location && window.location.hash; + return hash && hash.slice( 1 ) === elem.id; + }, + + "root": function( elem ) { + return elem === docElem; + }, + + "focus": function( elem ) { + return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex); + }, + + "enabled": function( elem ) { + return elem.disabled === false; + }, + + "disabled": function( elem ) { + return elem.disabled === true; + }, + + "checked": function( elem ) { + var nodeName = elem.nodeName.toLowerCase(); + return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected); + }, + + "selected": function( elem ) { + if ( elem.parentNode ) { + elem.parentNode.selectedIndex; + } + + return elem.selected === true; + }, + + "empty": function( elem ) { + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + if ( elem.nodeType < 6 ) { + return false; + } + } + return true; + }, + + "parent": function( elem ) { + return !Expr.pseudos["empty"]( elem ); + }, + + "header": function( elem ) { + return rheader.test( elem.nodeName ); + }, + + "input": function( elem ) { + return rinputs.test( elem.nodeName ); + }, + + "button": function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === "button" || name === "button"; + }, + + "text": function( elem ) { + var attr; + return elem.nodeName.toLowerCase() === "input" && + elem.type === "text" && + + ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" ); + }, + + "first": createPositionalPseudo(function() { + return [ 0 ]; + }), + + "last": createPositionalPseudo(function( matchIndexes, length ) { + return [ length - 1 ]; + }), + + "eq": createPositionalPseudo(function( matchIndexes, length, argument ) { + return [ argument < 0 ? argument + length : argument ]; + }), + + "even": createPositionalPseudo(function( matchIndexes, length ) { + var i = 0; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "odd": createPositionalPseudo(function( matchIndexes, length ) { + var i = 1; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "lt": createPositionalPseudo(function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; --i >= 0; ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "gt": createPositionalPseudo(function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; ++i < length; ) { + matchIndexes.push( i ); + } + return matchIndexes; + }) + } +}; + +Expr.pseudos["nth"] = Expr.pseudos["eq"]; + +for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { + Expr.pseudos[ i ] = createInputPseudo( i ); +} +for ( i in { submit: true, reset: true } ) { + Expr.pseudos[ i ] = createButtonPseudo( i ); +} + +function setFilters() {} +setFilters.prototype = Expr.filters = Expr.pseudos; +Expr.setFilters = new setFilters(); + +function tokenize( selector, parseOnly ) { + var matched, match, tokens, type, + soFar, groups, preFilters, + cached = tokenCache[ selector + " " ]; + + if ( cached ) { + return parseOnly ? 0 : cached.slice( 0 ); + } + + soFar = selector; + groups = []; + preFilters = Expr.preFilter; + + while ( soFar ) { + + if ( !matched || (match = rcomma.exec( soFar )) ) { + if ( match ) { + soFar = soFar.slice( match[0].length ) || soFar; + } + groups.push( (tokens = []) ); + } + + matched = false; + + if ( (match = rcombinators.exec( soFar )) ) { + matched = match.shift(); + tokens.push({ + value: matched, + type: match[0].replace( rtrim, " " ) + }); + soFar = soFar.slice( matched.length ); + } + + for ( type in Expr.filter ) { + if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] || + (match = preFilters[ type ]( match ))) ) { + matched = match.shift(); + tokens.push({ + value: matched, + type: type, + matches: match + }); + soFar = soFar.slice( matched.length ); + } + } + + if ( !matched ) { + break; + } + } + + return parseOnly ? + soFar.length : + soFar ? + Sizzle.error( selector ) : + tokenCache( selector, groups ).slice( 0 ); +} + +function toSelector( tokens ) { + var i = 0, + len = tokens.length, + selector = ""; + for ( ; i < len; i++ ) { + selector += tokens[i].value; + } + return selector; +} + +function addCombinator( matcher, combinator, base ) { + var dir = combinator.dir, + checkNonElements = base && dir === "parentNode", + doneName = done++; + + return combinator.first ? + function( elem, context, xml ) { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + return matcher( elem, context, xml ); + } + } + } : + + function( elem, context, xml ) { + var oldCache, outerCache, + newCache = [ dirruns, doneName ]; + + if ( xml ) { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + if ( matcher( elem, context, xml ) ) { + return true; + } + } + } + } else { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + outerCache = elem[ expando ] || (elem[ expando ] = {}); + if ( (oldCache = outerCache[ dir ]) && + oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { + + return (newCache[ 2 ] = oldCache[ 2 ]); + } else { + outerCache[ dir ] = newCache; + + if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) { + return true; + } + } + } + } + } + }; +} + +function elementMatcher( matchers ) { + return matchers.length > 1 ? + function( elem, context, xml ) { + var i = matchers.length; + while ( i-- ) { + if ( !matchers[i]( elem, context, xml ) ) { + return false; + } + } + return true; + } : + matchers[0]; +} + +function multipleContexts( selector, contexts, results ) { + var i = 0, + len = contexts.length; + for ( ; i < len; i++ ) { + Sizzle( selector, contexts[i], results ); + } + return results; +} + +function condense( unmatched, map, filter, context, xml ) { + var elem, + newUnmatched = [], + i = 0, + len = unmatched.length, + mapped = map != null; + + for ( ; i < len; i++ ) { + if ( (elem = unmatched[i]) ) { + if ( !filter || filter( elem, context, xml ) ) { + newUnmatched.push( elem ); + if ( mapped ) { + map.push( i ); + } + } + } + } + + return newUnmatched; +} + +function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { + if ( postFilter && !postFilter[ expando ] ) { + postFilter = setMatcher( postFilter ); + } + if ( postFinder && !postFinder[ expando ] ) { + postFinder = setMatcher( postFinder, postSelector ); + } + return markFunction(function( seed, results, context, xml ) { + var temp, i, elem, + preMap = [], + postMap = [], + preexisting = results.length, + + elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ), + + matcherIn = preFilter && ( seed || !selector ) ? + condense( elems, preMap, preFilter, context, xml ) : + elems, + + matcherOut = matcher ? + postFinder || ( seed ? preFilter : preexisting || postFilter ) ? + + [] : + + results : + matcherIn; + + if ( matcher ) { + matcher( matcherIn, matcherOut, context, xml ); + } + + if ( postFilter ) { + temp = condense( matcherOut, postMap ); + postFilter( temp, [], context, xml ); + + i = temp.length; + while ( i-- ) { + if ( (elem = temp[i]) ) { + matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem); + } + } + } + + if ( seed ) { + if ( postFinder || preFilter ) { + if ( postFinder ) { + temp = []; + i = matcherOut.length; + while ( i-- ) { + if ( (elem = matcherOut[i]) ) { + temp.push( (matcherIn[i] = elem) ); + } + } + postFinder( null, (matcherOut = []), temp, xml ); + } + + i = matcherOut.length; + while ( i-- ) { + if ( (elem = matcherOut[i]) && + (temp = postFinder ? indexOf.call( seed, elem ) : preMap[i]) > -1 ) { + + seed[temp] = !(results[temp] = elem); + } + } + } + + } else { + matcherOut = condense( + matcherOut === results ? + matcherOut.splice( preexisting, matcherOut.length ) : + matcherOut + ); + if ( postFinder ) { + postFinder( null, results, matcherOut, xml ); + } else { + push.apply( results, matcherOut ); + } + } + }); +} + +function matcherFromTokens( tokens ) { + var checkContext, matcher, j, + len = tokens.length, + leadingRelative = Expr.relative[ tokens[0].type ], + implicitRelative = leadingRelative || Expr.relative[" "], + i = leadingRelative ? 1 : 0, + + matchContext = addCombinator( function( elem ) { + return elem === checkContext; + }, implicitRelative, true ), + matchAnyContext = addCombinator( function( elem ) { + return indexOf.call( checkContext, elem ) > -1; + }, implicitRelative, true ), + matchers = [ function( elem, context, xml ) { + return ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( + (checkContext = context).nodeType ? + matchContext( elem, context, xml ) : + matchAnyContext( elem, context, xml ) ); + } ]; + + for ( ; i < len; i++ ) { + if ( (matcher = Expr.relative[ tokens[i].type ]) ) { + matchers = [ addCombinator(elementMatcher( matchers ), matcher) ]; + } else { + matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches ); + + if ( matcher[ expando ] ) { + j = ++i; + for ( ; j < len; j++ ) { + if ( Expr.relative[ tokens[j].type ] ) { + break; + } + } + return setMatcher( + i > 1 && elementMatcher( matchers ), + i > 1 && toSelector( + tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" }) + ).replace( rtrim, "$1" ), + matcher, + i < j && matcherFromTokens( tokens.slice( i, j ) ), + j < len && matcherFromTokens( (tokens = tokens.slice( j )) ), + j < len && toSelector( tokens ) + ); + } + matchers.push( matcher ); + } + } + + return elementMatcher( matchers ); +} + +function matcherFromGroupMatchers( elementMatchers, setMatchers ) { + var bySet = setMatchers.length > 0, + byElement = elementMatchers.length > 0, + superMatcher = function( seed, context, xml, results, outermost ) { + var elem, j, matcher, + matchedCount = 0, + i = "0", + unmatched = seed && [], + setMatched = [], + contextBackup = outermostContext, + elems = seed || byElement && Expr.find["TAG"]( "*", outermost ), + dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1), + len = elems.length; + + if ( outermost ) { + outermostContext = context !== document && context; + } + + for ( ; i !== len && (elem = elems[i]) != null; i++ ) { + if ( byElement && elem ) { + j = 0; + while ( (matcher = elementMatchers[j++]) ) { + if ( matcher( elem, context, xml ) ) { + results.push( elem ); + break; + } + } + if ( outermost ) { + dirruns = dirrunsUnique; + } + } + + if ( bySet ) { + if ( (elem = !matcher && elem) ) { + matchedCount--; + } + + if ( seed ) { + unmatched.push( elem ); + } + } + } + + matchedCount += i; + if ( bySet && i !== matchedCount ) { + j = 0; + while ( (matcher = setMatchers[j++]) ) { + matcher( unmatched, setMatched, context, xml ); + } + + if ( seed ) { + if ( matchedCount > 0 ) { + while ( i-- ) { + if ( !(unmatched[i] || setMatched[i]) ) { + setMatched[i] = pop.call( results ); + } + } + } + + setMatched = condense( setMatched ); + } + + push.apply( results, setMatched ); + + if ( outermost && !seed && setMatched.length > 0 && + ( matchedCount + setMatchers.length ) > 1 ) { + + Sizzle.uniqueSort( results ); + } + } + + if ( outermost ) { + dirruns = dirrunsUnique; + outermostContext = contextBackup; + } + + return unmatched; + }; + + return bySet ? + markFunction( superMatcher ) : + superMatcher; +} + +compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) { + var i, + setMatchers = [], + elementMatchers = [], + cached = compilerCache[ selector + " " ]; + + if ( !cached ) { + if ( !match ) { + match = tokenize( selector ); + } + i = match.length; + while ( i-- ) { + cached = matcherFromTokens( match[i] ); + if ( cached[ expando ] ) { + setMatchers.push( cached ); + } else { + elementMatchers.push( cached ); + } + } + + cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) ); + + cached.selector = selector; + } + return cached; +}; + +/** + * A low-level selection function that works with Sizzle's compiled + * selector functions + * @param {String|Function} selector A selector or a pre-compiled + * selector function built with Sizzle.compile + * @param {Element} context + * @param {Array} [results] + * @param {Array} [seed] A set of elements to match against + */ +select = Sizzle.select = function( selector, context, results, seed ) { + var i, tokens, token, type, find, + compiled = typeof selector === "function" && selector, + match = !seed && tokenize( (selector = compiled.selector || selector) ); + + results = results || []; + + if ( match.length === 1 ) { + + tokens = match[0] = match[0].slice( 0 ); + if ( tokens.length > 2 && (token = tokens[0]).type === "ID" && + support.getById && context.nodeType === 9 && documentIsHTML && + Expr.relative[ tokens[1].type ] ) { + + context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0]; + if ( !context ) { + return results; + + } else if ( compiled ) { + context = context.parentNode; + } + + selector = selector.slice( tokens.shift().value.length ); + } + + i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length; + while ( i-- ) { + token = tokens[i]; + + if ( Expr.relative[ (type = token.type) ] ) { + break; + } + if ( (find = Expr.find[ type ]) ) { + if ( (seed = find( + token.matches[0].replace( runescape, funescape ), + rsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context + )) ) { + + tokens.splice( i, 1 ); + selector = seed.length && toSelector( tokens ); + if ( !selector ) { + push.apply( results, seed ); + return results; + } + + break; + } + } + } + } + + ( compiled || compile( selector, match ) )( + seed, + context, + !documentIsHTML, + results, + rsibling.test( selector ) && testContext( context.parentNode ) || context + ); + return results; +}; + + +support.sortStable = expando.split("").sort( sortOrder ).join("") === expando; + +support.detectDuplicates = !!hasDuplicate; + +setDocument(); + +support.sortDetached = assert(function( div1 ) { + return div1.compareDocumentPosition( document.createElement("div") ) & 1; +}); + +if ( !assert(function( div ) { + div.innerHTML = ""; + return div.firstChild.getAttribute("href") === "#" ; +}) ) { + addHandle( "type|href|height|width", function( elem, name, isXML ) { + if ( !isXML ) { + return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 ); + } + }); +} + +if ( !support.attributes || !assert(function( div ) { + div.innerHTML = ""; + div.firstChild.setAttribute( "value", "" ); + return div.firstChild.getAttribute( "value" ) === ""; +}) ) { + addHandle( "value", function( elem, name, isXML ) { + if ( !isXML && elem.nodeName.toLowerCase() === "input" ) { + return elem.defaultValue; + } + }); +} + +if ( !assert(function( div ) { + return div.getAttribute("disabled") == null; +}) ) { + addHandle( booleans, function( elem, name, isXML ) { + var val; + if ( !isXML ) { + return elem[ name ] === true ? name.toLowerCase() : + (val = elem.getAttributeNode( name )) && val.specified ? + val.value : + null; + } + }); +} + +if ( typeof define === "function" && define.amd ) { + define(function() { return Sizzle; }); +} else if ( typeof module !== "undefined" && module.exports ) { + module.exports = Sizzle; +} else { + window.Sizzle = Sizzle; +} + +})( window ); + +;(function(engine) { + var extendElements = Prototype.Selector.extendElements; + + function select(selector, scope) { + return extendElements(engine(selector, scope || document)); + } + + function match(element, selector) { + return engine.matches(selector, [element]).length == 1; + } + + Prototype.Selector.engine = engine; + Prototype.Selector.select = select; + Prototype.Selector.match = match; +})(Sizzle); + +window.Sizzle = Prototype._original_property; +delete Prototype._original_property; + +var Form = { + reset: function(form) { + form = $(form); + form.reset(); + return form; + }, + + serializeElements: function(elements, options) { + if (typeof options != 'object') options = { hash: !!options }; + else if (Object.isUndefined(options.hash)) options.hash = true; + var key, value, submitted = false, submit = options.submit, accumulator, initial; + + if (options.hash) { + initial = {}; + accumulator = function(result, key, value) { + if (key in result) { + if (!Object.isArray(result[key])) result[key] = [result[key]]; + result[key] = result[key].concat(value); + } else result[key] = value; + return result; + }; + } else { + initial = ''; + accumulator = function(result, key, values) { + if (!Object.isArray(values)) {values = [values];} + if (!values.length) {return result;} + var encodedKey = encodeURIComponent(key).gsub(/%20/, '+'); + return result + (result ? "&" : "") + values.map(function (value) { + value = value.gsub(/(\r)?\n/, '\r\n'); + value = encodeURIComponent(value); + value = value.gsub(/%20/, '+'); + return encodedKey + "=" + value; + }).join("&"); + }; + } + + return elements.inject(initial, function(result, element) { + if (!element.disabled && element.name) { + key = element.name; value = $(element).getValue(); + if (value != null && element.type != 'file' && (element.type != 'submit' || (!submitted && + submit !== false && (!submit || key == submit) && (submitted = true)))) { + result = accumulator(result, key, value); + } + } + return result; + }); + } +}; + +Form.Methods = { + serialize: function(form, options) { + return Form.serializeElements(Form.getElements(form), options); + }, + + + getElements: function(form) { + var elements = $(form).getElementsByTagName('*'); + var element, results = [], serializers = Form.Element.Serializers; + + for (var i = 0; element = elements[i]; i++) { + if (serializers[element.tagName.toLowerCase()]) + results.push(Element.extend(element)); + } + return results; + }, + + getInputs: function(form, typeName, name) { + form = $(form); + var inputs = form.getElementsByTagName('input'); + + if (!typeName && !name) return $A(inputs).map(Element.extend); + + for (var i = 0, matchingInputs = [], length = inputs.length; i < length; i++) { + var input = inputs[i]; + if ((typeName && input.type != typeName) || (name && input.name != name)) + continue; + matchingInputs.push(Element.extend(input)); + } + + return matchingInputs; + }, + + disable: function(form) { + form = $(form); + Form.getElements(form).invoke('disable'); + return form; + }, + + enable: function(form) { + form = $(form); + Form.getElements(form).invoke('enable'); + return form; + }, + + findFirstElement: function(form) { + var elements = $(form).getElements().findAll(function(element) { + return 'hidden' != element.type && !element.disabled; + }); + var firstByIndex = elements.findAll(function(element) { + return element.hasAttribute('tabIndex') && element.tabIndex >= 0; + }).sortBy(function(element) { return element.tabIndex }).first(); + + return firstByIndex ? firstByIndex : elements.find(function(element) { + return /^(?:input|select|textarea)$/i.test(element.tagName); + }); + }, + + focusFirstElement: function(form) { + form = $(form); + var element = form.findFirstElement(); + if (element) element.activate(); + return form; + }, + + request: function(form, options) { + form = $(form), options = Object.clone(options || { }); + + var params = options.parameters, action = form.readAttribute('action') || ''; + if (action.blank()) action = window.location.href; + options.parameters = form.serialize(true); + + if (params) { + if (Object.isString(params)) params = params.toQueryParams(); + Object.extend(options.parameters, params); + } + + if (form.hasAttribute('method') && !options.method) + options.method = form.method; + + return new Ajax.Request(action, options); + } +}; + +/*--------------------------------------------------------------------------*/ + + +Form.Element = { + focus: function(element) { + $(element).focus(); + return element; + }, + + select: function(element) { + $(element).select(); + return element; + } +}; + +Form.Element.Methods = { + + serialize: function(element) { + element = $(element); + if (!element.disabled && element.name) { + var value = element.getValue(); + if (value != undefined) { + var pair = { }; + pair[element.name] = value; + return Object.toQueryString(pair); + } + } + return ''; + }, + + getValue: function(element) { + element = $(element); + var method = element.tagName.toLowerCase(); + return Form.Element.Serializers[method](element); + }, + + setValue: function(element, value) { + element = $(element); + var method = element.tagName.toLowerCase(); + Form.Element.Serializers[method](element, value); + return element; + }, + + clear: function(element) { + $(element).value = ''; + return element; + }, + + present: function(element) { + return $(element).value != ''; + }, + + activate: function(element) { + element = $(element); + try { + element.focus(); + if (element.select && (element.tagName.toLowerCase() != 'input' || + !(/^(?:button|reset|submit)$/i.test(element.type)))) + element.select(); + } catch (e) { } + return element; + }, + + disable: function(element) { + element = $(element); + element.disabled = true; + return element; + }, + + enable: function(element) { + element = $(element); + element.disabled = false; + return element; + } +}; + +/*--------------------------------------------------------------------------*/ + +var Field = Form.Element; + +var $F = Form.Element.Methods.getValue; + +/*--------------------------------------------------------------------------*/ + +Form.Element.Serializers = (function() { + function input(element, value) { + switch (element.type.toLowerCase()) { + case 'checkbox': + case 'radio': + return inputSelector(element, value); + default: + return valueSelector(element, value); + } + } + + function inputSelector(element, value) { + if (Object.isUndefined(value)) + return element.checked ? element.value : null; + else element.checked = !!value; + } + + function valueSelector(element, value) { + if (Object.isUndefined(value)) return element.value; + else element.value = value; + } + + function select(element, value) { + if (Object.isUndefined(value)) + return (element.type === 'select-one' ? selectOne : selectMany)(element); + + var opt, currentValue, single = !Object.isArray(value); + for (var i = 0, length = element.length; i < length; i++) { + opt = element.options[i]; + currentValue = this.optionValue(opt); + if (single) { + if (currentValue == value) { + opt.selected = true; + return; + } + } + else opt.selected = value.include(currentValue); + } + } + + function selectOne(element) { + var index = element.selectedIndex; + return index >= 0 ? optionValue(element.options[index]) : null; + } + + function selectMany(element) { + var values, length = element.length; + if (!length) return null; + + for (var i = 0, values = []; i < length; i++) { + var opt = element.options[i]; + if (opt.selected) values.push(optionValue(opt)); + } + return values; + } + + function optionValue(opt) { + return Element.hasAttribute(opt, 'value') ? opt.value : opt.text; + } + + return { + input: input, + inputSelector: inputSelector, + textarea: valueSelector, + select: select, + selectOne: selectOne, + selectMany: selectMany, + optionValue: optionValue, + button: valueSelector + }; +})(); + +/*--------------------------------------------------------------------------*/ + + +Abstract.TimedObserver = Class.create(PeriodicalExecuter, { + initialize: function($super, element, frequency, callback) { + $super(callback, frequency); + this.element = $(element); + this.lastValue = this.getValue(); + }, + + execute: function() { + var value = this.getValue(); + if (Object.isString(this.lastValue) && Object.isString(value) ? + this.lastValue != value : String(this.lastValue) != String(value)) { + this.callback(this.element, value); + this.lastValue = value; + } + } +}); + +Form.Element.Observer = Class.create(Abstract.TimedObserver, { + getValue: function() { + return Form.Element.getValue(this.element); + } +}); + +Form.Observer = Class.create(Abstract.TimedObserver, { + getValue: function() { + return Form.serialize(this.element); + } +}); + +/*--------------------------------------------------------------------------*/ + +Abstract.EventObserver = Class.create({ + initialize: function(element, callback) { + this.element = $(element); + this.callback = callback; + + this.lastValue = this.getValue(); + if (this.element.tagName.toLowerCase() == 'form') + this.registerFormCallbacks(); + else + this.registerCallback(this.element); + }, + + onElementEvent: function() { + var value = this.getValue(); + if (this.lastValue != value) { + this.callback(this.element, value); + this.lastValue = value; + } + }, + + registerFormCallbacks: function() { + Form.getElements(this.element).each(this.registerCallback, this); + }, + + registerCallback: function(element) { + if (element.type) { + switch (element.type.toLowerCase()) { + case 'checkbox': + case 'radio': + Event.observe(element, 'click', this.onElementEvent.bind(this)); + break; + default: + Event.observe(element, 'change', this.onElementEvent.bind(this)); + break; + } + } + } +}); + +Form.Element.EventObserver = Class.create(Abstract.EventObserver, { + getValue: function() { + return Form.Element.getValue(this.element); + } +}); + +Form.EventObserver = Class.create(Abstract.EventObserver, { + getValue: function() { + return Form.serialize(this.element); + } +}); +(function(GLOBAL) { + var DIV = document.createElement('div'); + var docEl = document.documentElement; + var MOUSEENTER_MOUSELEAVE_EVENTS_SUPPORTED = 'onmouseenter' in docEl + && 'onmouseleave' in docEl; + + var Event = { + KEY_BACKSPACE: 8, + KEY_TAB: 9, + KEY_RETURN: 13, + KEY_ESC: 27, + KEY_LEFT: 37, + KEY_UP: 38, + KEY_RIGHT: 39, + KEY_DOWN: 40, + KEY_DELETE: 46, + KEY_HOME: 36, + KEY_END: 35, + KEY_PAGEUP: 33, + KEY_PAGEDOWN: 34, + KEY_INSERT: 45 + }; + + + var isIELegacyEvent = function(event) { return false; }; + + if (window.attachEvent) { + if (window.addEventListener) { + isIELegacyEvent = function(event) { + return !(event instanceof window.Event); + }; + } else { + isIELegacyEvent = function(event) { return true; }; + } + } + + var _isButton; + + function _isButtonForDOMEvents(event, code) { + return event.which ? (event.which === code + 1) : (event.button === code); + } + + var legacyButtonMap = { 0: 1, 1: 4, 2: 2 }; + function _isButtonForLegacyEvents(event, code) { + return event.button === legacyButtonMap[code]; + } + + function _isButtonForWebKit(event, code) { + switch (code) { + case 0: return event.which == 1 && !event.metaKey; + case 1: return event.which == 2 || (event.which == 1 && event.metaKey); + case 2: return event.which == 3; + default: return false; + } + } + + if (window.attachEvent) { + if (!window.addEventListener) { + _isButton = _isButtonForLegacyEvents; + } else { + _isButton = function(event, code) { + return isIELegacyEvent(event) ? _isButtonForLegacyEvents(event, code) : + _isButtonForDOMEvents(event, code); + } + } + } else if (Prototype.Browser.WebKit) { + _isButton = _isButtonForWebKit; + } else { + _isButton = _isButtonForDOMEvents; + } + + function isLeftClick(event) { return _isButton(event, 0) } + + function isMiddleClick(event) { return _isButton(event, 1) } + + function isRightClick(event) { return _isButton(event, 2) } + + function element(event) { + return Element.extend(_element(event)); + } + + function _element(event) { + event = Event.extend(event); + + var node = event.target, type = event.type, + currentTarget = event.currentTarget; + + if (currentTarget && currentTarget.tagName) { + if (type === 'load' || type === 'error' || + (type === 'click' && currentTarget.tagName.toLowerCase() === 'input' + && currentTarget.type === 'radio')) + node = currentTarget; + } + + return node.nodeType == Node.TEXT_NODE ? node.parentNode : node; + } + + function findElement(event, expression) { + var element = _element(event), selector = Prototype.Selector; + if (!expression) return Element.extend(element); + while (element) { + if (Object.isElement(element) && selector.match(element, expression)) + return Element.extend(element); + element = element.parentNode; + } + } + + function pointer(event) { + return { x: pointerX(event), y: pointerY(event) }; + } + + function pointerX(event) { + var docElement = document.documentElement, + body = document.body || { scrollLeft: 0 }; + + return event.pageX || (event.clientX + + (docElement.scrollLeft || body.scrollLeft) - + (docElement.clientLeft || 0)); + } + + function pointerY(event) { + var docElement = document.documentElement, + body = document.body || { scrollTop: 0 }; + + return event.pageY || (event.clientY + + (docElement.scrollTop || body.scrollTop) - + (docElement.clientTop || 0)); + } + + + function stop(event) { + Event.extend(event); + event.preventDefault(); + event.stopPropagation(); + + event.stopped = true; + } + + + Event.Methods = { + isLeftClick: isLeftClick, + isMiddleClick: isMiddleClick, + isRightClick: isRightClick, + + element: element, + findElement: findElement, + + pointer: pointer, + pointerX: pointerX, + pointerY: pointerY, + + stop: stop + }; + + var methods = Object.keys(Event.Methods).inject({ }, function(m, name) { + m[name] = Event.Methods[name].methodize(); + return m; + }); + + if (window.attachEvent) { + function _relatedTarget(event) { + var element; + switch (event.type) { + case 'mouseover': + case 'mouseenter': + element = event.fromElement; + break; + case 'mouseout': + case 'mouseleave': + element = event.toElement; + break; + default: + return null; + } + return Element.extend(element); + } + + var additionalMethods = { + stopPropagation: function() { this.cancelBubble = true }, + preventDefault: function() { this.returnValue = false }, + inspect: function() { return '[object Event]' } + }; + + Event.extend = function(event, element) { + if (!event) return false; + + if (!isIELegacyEvent(event)) return event; + + if (event._extendedByPrototype) return event; + event._extendedByPrototype = Prototype.emptyFunction; + + var pointer = Event.pointer(event); + + Object.extend(event, { + target: event.srcElement || element, + relatedTarget: _relatedTarget(event), + pageX: pointer.x, + pageY: pointer.y + }); + + Object.extend(event, methods); + Object.extend(event, additionalMethods); + + return event; + }; + } else { + Event.extend = Prototype.K; + } + + if (window.addEventListener) { + Event.prototype = window.Event.prototype || document.createEvent('HTMLEvents').__proto__; + Object.extend(Event.prototype, methods); + } + + var EVENT_TRANSLATIONS = { + mouseenter: 'mouseover', + mouseleave: 'mouseout' + }; + + function getDOMEventName(eventName) { + return EVENT_TRANSLATIONS[eventName] || eventName; + } + + if (MOUSEENTER_MOUSELEAVE_EVENTS_SUPPORTED) + getDOMEventName = Prototype.K; + + function getUniqueElementID(element) { + if (element === window) return 0; + + if (typeof element._prototypeUID === 'undefined') + element._prototypeUID = Element.Storage.UID++; + return element._prototypeUID; + } + + function getUniqueElementID_IE(element) { + if (element === window) return 0; + if (element == document) return 1; + return element.uniqueID; + } + + if ('uniqueID' in DIV) + getUniqueElementID = getUniqueElementID_IE; + + function isCustomEvent(eventName) { + return eventName.include(':'); + } + + Event._isCustomEvent = isCustomEvent; + + function getRegistryForElement(element, uid) { + var CACHE = GLOBAL.Event.cache; + if (Object.isUndefined(uid)) + uid = getUniqueElementID(element); + if (!CACHE[uid]) CACHE[uid] = { element: element }; + return CACHE[uid]; + } + + function destroyRegistryForElement(element, uid) { + if (Object.isUndefined(uid)) + uid = getUniqueElementID(element); + delete GLOBAL.Event.cache[uid]; + } + + + function register(element, eventName, handler) { + var registry = getRegistryForElement(element); + if (!registry[eventName]) registry[eventName] = []; + var entries = registry[eventName]; + + var i = entries.length; + while (i--) + if (entries[i].handler === handler) return null; + + var uid = getUniqueElementID(element); + var responder = GLOBAL.Event._createResponder(uid, eventName, handler); + var entry = { + responder: responder, + handler: handler + }; + + entries.push(entry); + return entry; + } + + function unregister(element, eventName, handler) { + var registry = getRegistryForElement(element); + var entries = registry[eventName]; + if (!entries) return; + + var i = entries.length, entry; + while (i--) { + if (entries[i].handler === handler) { + entry = entries[i]; + break; + } + } + + if (!entry) return; + + var index = entries.indexOf(entry); + entries.splice(index, 1); + + return entry; + } + + + function observe(element, eventName, handler) { + element = $(element); + var entry = register(element, eventName, handler); + + if (entry === null) return element; + + var responder = entry.responder; + if (isCustomEvent(eventName)) + observeCustomEvent(element, eventName, responder); + else + observeStandardEvent(element, eventName, responder); + + return element; + } + + function observeStandardEvent(element, eventName, responder) { + var actualEventName = getDOMEventName(eventName); + if (element.addEventListener) { + element.addEventListener(actualEventName, responder, false); + } else { + element.attachEvent('on' + actualEventName, responder); + } + } + + function observeCustomEvent(element, eventName, responder) { + if (element.addEventListener) { + element.addEventListener('dataavailable', responder, false); + } else { + element.attachEvent('ondataavailable', responder); + element.attachEvent('onlosecapture', responder); + } + } + + function stopObserving(element, eventName, handler) { + element = $(element); + var handlerGiven = !Object.isUndefined(handler), + eventNameGiven = !Object.isUndefined(eventName); + + if (!eventNameGiven && !handlerGiven) { + stopObservingElement(element); + return element; + } + + if (!handlerGiven) { + stopObservingEventName(element, eventName); + return element; + } + + var entry = unregister(element, eventName, handler); + + if (!entry) return element; + removeEvent(element, eventName, entry.responder); + return element; + } + + function stopObservingStandardEvent(element, eventName, responder) { + var actualEventName = getDOMEventName(eventName); + if (element.removeEventListener) { + element.removeEventListener(actualEventName, responder, false); + } else { + element.detachEvent('on' + actualEventName, responder); + } + } + + function stopObservingCustomEvent(element, eventName, responder) { + if (element.removeEventListener) { + element.removeEventListener('dataavailable', responder, false); + } else { + element.detachEvent('ondataavailable', responder); + element.detachEvent('onlosecapture', responder); + } + } + + + + function stopObservingElement(element) { + var uid = getUniqueElementID(element), registry = GLOBAL.Event.cache[uid]; + if (!registry) return; + + destroyRegistryForElement(element, uid); + + var entries, i; + for (var eventName in registry) { + if (eventName === 'element') continue; + + entries = registry[eventName]; + i = entries.length; + while (i--) + removeEvent(element, eventName, entries[i].responder); + } + } + + function stopObservingEventName(element, eventName) { + var registry = getRegistryForElement(element); + var entries = registry[eventName]; + if (!entries) return; + delete registry[eventName]; + + var i = entries.length; + while (i--) + removeEvent(element, eventName, entries[i].responder); + } + + + function removeEvent(element, eventName, handler) { + if (isCustomEvent(eventName)) + stopObservingCustomEvent(element, eventName, handler); + else + stopObservingStandardEvent(element, eventName, handler); + } + + + + function getFireTarget(element) { + if (element !== document) return element; + if (document.createEvent && !element.dispatchEvent) + return document.documentElement; + return element; + } + + function fire(element, eventName, memo, bubble) { + element = getFireTarget($(element)); + if (Object.isUndefined(bubble)) bubble = true; + memo = memo || {}; + + var event = fireEvent(element, eventName, memo, bubble); + return Event.extend(event); + } + + function fireEvent_DOM(element, eventName, memo, bubble) { + var event = document.createEvent('HTMLEvents'); + event.initEvent('dataavailable', bubble, true); + + event.eventName = eventName; + event.memo = memo; + + element.dispatchEvent(event); + return event; + } + + function fireEvent_IE(element, eventName, memo, bubble) { + var event = document.createEventObject(); + event.eventType = bubble ? 'ondataavailable' : 'onlosecapture'; + + event.eventName = eventName; + event.memo = memo; + + element.fireEvent(event.eventType, event); + return event; + } + + var fireEvent = document.createEvent ? fireEvent_DOM : fireEvent_IE; + + + + Event.Handler = Class.create({ + initialize: function(element, eventName, selector, callback) { + this.element = $(element); + this.eventName = eventName; + this.selector = selector; + this.callback = callback; + this.handler = this.handleEvent.bind(this); + }, + + + start: function() { + Event.observe(this.element, this.eventName, this.handler); + return this; + }, + + stop: function() { + Event.stopObserving(this.element, this.eventName, this.handler); + return this; + }, + + handleEvent: function(event) { + var element = Event.findElement(event, this.selector); + if (element) this.callback.call(this.element, event, element); + } + }); + + function on(element, eventName, selector, callback) { + element = $(element); + if (Object.isFunction(selector) && Object.isUndefined(callback)) { + callback = selector, selector = null; + } + + return new Event.Handler(element, eventName, selector, callback).start(); + } + + Object.extend(Event, Event.Methods); + + Object.extend(Event, { + fire: fire, + observe: observe, + stopObserving: stopObserving, + on: on + }); + + Element.addMethods({ + fire: fire, + + observe: observe, + + stopObserving: stopObserving, + + on: on + }); + + Object.extend(document, { + fire: fire.methodize(), + + observe: observe.methodize(), + + stopObserving: stopObserving.methodize(), + + on: on.methodize(), + + loaded: false + }); + + if (GLOBAL.Event) Object.extend(window.Event, Event); + else GLOBAL.Event = Event; + + GLOBAL.Event.cache = {}; + + function destroyCache_IE() { + GLOBAL.Event.cache = null; + } + + if (window.attachEvent) + window.attachEvent('onunload', destroyCache_IE); + + DIV = null; + docEl = null; +})(this); + +(function(GLOBAL) { + /* Code for creating leak-free event responders is based on work by + John-David Dalton. */ + + var docEl = document.documentElement; + var MOUSEENTER_MOUSELEAVE_EVENTS_SUPPORTED = 'onmouseenter' in docEl + && 'onmouseleave' in docEl; + + function isSimulatedMouseEnterLeaveEvent(eventName) { + return !MOUSEENTER_MOUSELEAVE_EVENTS_SUPPORTED && + (eventName === 'mouseenter' || eventName === 'mouseleave'); + } + + function createResponder(uid, eventName, handler) { + if (Event._isCustomEvent(eventName)) + return createResponderForCustomEvent(uid, eventName, handler); + if (isSimulatedMouseEnterLeaveEvent(eventName)) + return createMouseEnterLeaveResponder(uid, eventName, handler); + + return function(event) { + if (!Event.cache) return; + + var element = Event.cache[uid].element; + Event.extend(event, element); + handler.call(element, event); + }; + } + + function createResponderForCustomEvent(uid, eventName, handler) { + return function(event) { + var element = Event.cache[uid].element; + + if (Object.isUndefined(event.eventName)) + return false; + + if (event.eventName !== eventName) + return false; + + Event.extend(event, element); + handler.call(element, event); + }; + } + + function createMouseEnterLeaveResponder(uid, eventName, handler) { + return function(event) { + var element = Event.cache[uid].element; + + Event.extend(event, element); + var parent = event.relatedTarget; + + while (parent && parent !== element) { + try { parent = parent.parentNode; } + catch(e) { parent = element; } + } + + if (parent === element) return; + handler.call(element, event); + } + } + + GLOBAL.Event._createResponder = createResponder; + docEl = null; +})(this); + +(function(GLOBAL) { + /* Support for the DOMContentLoaded event is based on work by Dan Webb, + Matthias Miller, Dean Edwards, John Resig, and Diego Perini. */ + + var TIMER; + + function fireContentLoadedEvent() { + if (document.loaded) return; + if (TIMER) window.clearTimeout(TIMER); + document.loaded = true; + document.fire('dom:loaded'); + } + + function checkReadyState() { + if (document.readyState === 'complete') { + document.detachEvent('onreadystatechange', checkReadyState); + fireContentLoadedEvent(); + } + } + + function pollDoScroll() { + try { + document.documentElement.doScroll('left'); + } catch (e) { + TIMER = pollDoScroll.defer(); + return; + } + + fireContentLoadedEvent(); + } + + + if (document.readyState === 'complete') { + fireContentLoadedEvent(); + return; + } + + if (document.addEventListener) { + document.addEventListener('DOMContentLoaded', fireContentLoadedEvent, false); + } else { + document.attachEvent('onreadystatechange', checkReadyState); + if (window == top) TIMER = pollDoScroll.defer(); + } + + Event.observe(window, 'load', fireContentLoadedEvent); +})(this); + + +Element.addMethods(); +/*------------------------------- DEPRECATED -------------------------------*/ + +Hash.toQueryString = Object.toQueryString; + +var Toggle = { display: Element.toggle }; + +Element.Methods.childOf = Element.Methods.descendantOf; + +var Insertion = { + Before: function(element, content) { + return Element.insert(element, {before:content}); + }, + + Top: function(element, content) { + return Element.insert(element, {top:content}); + }, + + Bottom: function(element, content) { + return Element.insert(element, {bottom:content}); + }, + + After: function(element, content) { + return Element.insert(element, {after:content}); + } +}; + +var $continue = new Error('"throw $continue" is deprecated, use "return" instead'); + +var Position = { + includeScrollOffsets: false, + + prepare: function() { + this.deltaX = window.pageXOffset + || document.documentElement.scrollLeft + || document.body.scrollLeft + || 0; + this.deltaY = window.pageYOffset + || document.documentElement.scrollTop + || document.body.scrollTop + || 0; + }, + + within: function(element, x, y) { + if (this.includeScrollOffsets) + return this.withinIncludingScrolloffsets(element, x, y); + this.xcomp = x; + this.ycomp = y; + this.offset = Element.cumulativeOffset(element); + + return (y >= this.offset[1] && + y < this.offset[1] + element.offsetHeight && + x >= this.offset[0] && + x < this.offset[0] + element.offsetWidth); + }, + + withinIncludingScrolloffsets: function(element, x, y) { + var offsetcache = Element.cumulativeScrollOffset(element); + + this.xcomp = x + offsetcache[0] - this.deltaX; + this.ycomp = y + offsetcache[1] - this.deltaY; + this.offset = Element.cumulativeOffset(element); + + return (this.ycomp >= this.offset[1] && + this.ycomp < this.offset[1] + element.offsetHeight && + this.xcomp >= this.offset[0] && + this.xcomp < this.offset[0] + element.offsetWidth); + }, + + overlap: function(mode, element) { + if (!mode) return 0; + if (mode == 'vertical') + return ((this.offset[1] + element.offsetHeight) - this.ycomp) / + element.offsetHeight; + if (mode == 'horizontal') + return ((this.offset[0] + element.offsetWidth) - this.xcomp) / + element.offsetWidth; + }, + + + cumulativeOffset: Element.Methods.cumulativeOffset, + + positionedOffset: Element.Methods.positionedOffset, + + absolutize: function(element) { + Position.prepare(); + return Element.absolutize(element); + }, + + relativize: function(element) { + Position.prepare(); + return Element.relativize(element); + }, + + realOffset: Element.Methods.cumulativeScrollOffset, + + offsetParent: Element.Methods.getOffsetParent, + + page: Element.Methods.viewportOffset, + + clone: function(source, target, options) { + options = options || { }; + return Element.clonePosition(target, source, options); + } +}; + +/*--------------------------------------------------------------------------*/ + +if (!document.getElementsByClassName) document.getElementsByClassName = function(instanceMethods){ + function iter(name) { + return name.blank() ? null : "[contains(concat(' ', @class, ' '), ' " + name + " ')]"; + } + + instanceMethods.getElementsByClassName = Prototype.BrowserFeatures.XPath ? + function(element, className) { + className = className.toString().strip(); + var cond = /\s/.test(className) ? $w(className).map(iter).join('') : iter(className); + return cond ? document._getElementsByXPath('.//*' + cond, element) : []; + } : function(element, className) { + className = className.toString().strip(); + var elements = [], classNames = (/\s/.test(className) ? $w(className) : null); + if (!classNames && !className) return elements; + + var nodes = $(element).getElementsByTagName('*'); + className = ' ' + className + ' '; + + for (var i = 0, child, cn; child = nodes[i]; i++) { + if (child.className && (cn = ' ' + child.className + ' ') && (cn.include(className) || + (classNames && classNames.all(function(name) { + return !name.toString().blank() && cn.include(' ' + name + ' '); + })))) + elements.push(Element.extend(child)); + } + return elements; + }; + + return function(className, parentElement) { + return $(parentElement || document.body).getElementsByClassName(className); + }; +}(Element.Methods); + +/*--------------------------------------------------------------------------*/ + +Element.ClassNames = Class.create(); +Element.ClassNames.prototype = { + initialize: function(element) { + this.element = $(element); + }, + + _each: function(iterator, context) { + this.element.className.split(/\s+/).select(function(name) { + return name.length > 0; + })._each(iterator, context); + }, + + set: function(className) { + this.element.className = className; + }, + + add: function(classNameToAdd) { + if (this.include(classNameToAdd)) return; + this.set($A(this).concat(classNameToAdd).join(' ')); + }, + + remove: function(classNameToRemove) { + if (!this.include(classNameToRemove)) return; + this.set($A(this).without(classNameToRemove).join(' ')); + }, + + toString: function() { + return $A(this).join(' '); + } +}; + +Object.extend(Element.ClassNames.prototype, Enumerable); + +/*--------------------------------------------------------------------------*/ + +(function() { + window.Selector = Class.create({ + initialize: function(expression) { + this.expression = expression.strip(); + }, + + findElements: function(rootElement) { + return Prototype.Selector.select(this.expression, rootElement); + }, + + match: function(element) { + return Prototype.Selector.match(element, this.expression); + }, + + toString: function() { + return this.expression; + }, + + inspect: function() { + return "#"; + } + }); + + Object.extend(Selector, { + matchElements: function(elements, expression) { + var match = Prototype.Selector.match, + results = []; + + for (var i = 0, length = elements.length; i < length; i++) { + var element = elements[i]; + if (match(element, expression)) { + results.push(Element.extend(element)); + } + } + return results; + }, + + findElement: function(elements, expression, index) { + index = index || 0; + var matchIndex = 0, element; + for (var i = 0, length = elements.length; i < length; i++) { + element = elements[i]; + if (Prototype.Selector.match(element, expression) && index === matchIndex++) { + return Element.extend(element); + } + } + }, + + findChildElements: function(element, expressions) { + var selector = expressions.toArray().join(', '); + return Prototype.Selector.select(selector, element || document); + } + }); +})(); + +/** + * Event.simulate(@element, eventName[, options]) -> Element + * + * - @element: element to fire event on + * - eventName: name of event to fire (only MouseEvents and HTMLEvents interfaces are supported) + * - options: optional object to fine-tune event properties - pointerX, pointerY, ctrlKey, etc. + * + * $('foo').simulate('click'); // => fires "click" event on an element with id=foo + * + **/ +(function(){ + + var eventMatchers = { + 'HTMLEvents': /^(?:load|unload|abort|error|select|change|submit|reset|focus|blur|resize|scroll|input)$/, + 'MouseEvents': /^(?:click|mouse(?:down|up|over|move|out))$/ + } + var defaultOptions = { + pointerX: 0, + pointerY: 0, + button: 0, + ctrlKey: false, + altKey: false, + shiftKey: false, + metaKey: false, + bubbles: true, + cancelable: true + } + + Event.simulate = function(element, eventName) { + var options = Object.extend(defaultOptions, arguments[2] || { }); + var oEvent, eventType = null; + + element = $(element); + + for (var name in eventMatchers) { + if (eventMatchers[name].test(eventName)) { eventType = name; break; } + } + + if (!eventType) + throw new SyntaxError('Only HTMLEvents and MouseEvents interfaces are supported'); + + if (document.createEvent) { + oEvent = document.createEvent(eventType); + if (eventType == 'HTMLEvents') { + oEvent.initEvent(eventName, options.bubbles, options.cancelable); + } + else { + oEvent.initMouseEvent(eventName, options.bubbles, options.cancelable, document.defaultView, + options.button, options.pointerX, options.pointerY, options.pointerX, options.pointerY, + options.ctrlKey, options.altKey, options.shiftKey, options.metaKey, options.button, element); + } + element.dispatchEvent(oEvent); + } + else { + options.clientX = options.pointerX; + options.clientY = options.pointerY; + oEvent = Object.extend(document.createEventObject(), options); + element.fireEvent('on' + eventName, oEvent); + } + return element; + } + + Element.addMethods({ simulate: Event.simulate }); +})() +function phi4z(t,i,s,e,o,n,a,r,h){var l,c,m,u,d,p,_,f,P,y;for(h=n,y=1;15>=y;y++)if(l=Math.sin(h),m=Math.tan(h),r=m*Math.sqrt(1-t*l*l),c=Math.sin(2*h),u=i*h-s*c+e*Math.sin(4*h)-o*Math.sin(6*h),d=i-2*s*Math.cos(2*h)+4*e*Math.cos(4*h)-6*o*Math.cos(6*h),p=2*u+r*(u*u+a)-2*n*(r*u+1),_=t*c*(u*u+a-2*n*u)/(2*r),f=2*(n-u)*(r*d-2/c)-2*d,P=p/(_+f),h+=P,1e-10>=Math.abs(P))return h;return Proj4js.reportError("phi4z: No convergence"),null}function e4fn(t){var i,s;return i=1+t,s=1-t,Math.sqrt(Math.pow(i,i)*Math.pow(s,s))}var Proj4js={defaultDatum:"WGS84",transform:function(t,i,s){if(!t.readyToUse)return this.reportError("Proj4js initialization for:"+t.srsCode+" not yet complete"),s;if(!i.readyToUse)return this.reportError("Proj4js initialization for:"+i.srsCode+" not yet complete"),s;if(t.datum&&i.datum&&((t.datum.datum_type==Proj4js.common.PJD_3PARAM||t.datum.datum_type==Proj4js.common.PJD_7PARAM)&&"WGS84"!=i.datumCode||(i.datum.datum_type==Proj4js.common.PJD_3PARAM||i.datum.datum_type==Proj4js.common.PJD_7PARAM)&&"WGS84"!=t.datumCode)){var e=Proj4js.WGS84;this.transform(t,e,s),t=e}return"enu"!=t.axis&&this.adjust_axis(t,!1,s),"longlat"==t.projName?(s.x*=Proj4js.common.D2R,s.y*=Proj4js.common.D2R):(t.to_meter&&(s.x*=t.to_meter,s.y*=t.to_meter),t.inverse(s)),t.from_greenwich&&(s.x+=t.from_greenwich),s=this.datum_transform(t.datum,i.datum,s),i.from_greenwich&&(s.x-=i.from_greenwich),"longlat"==i.projName?(s.x*=Proj4js.common.R2D,s.y*=Proj4js.common.R2D):(i.forward(s),i.to_meter&&(s.x/=i.to_meter,s.y/=i.to_meter)),"enu"!=i.axis&&this.adjust_axis(i,!0,s),s},datum_transform:function(t,i,s){return t.compare_datums(i)?s:t.datum_type==Proj4js.common.PJD_NODATUM||i.datum_type==Proj4js.common.PJD_NODATUM?s:((t.es!=i.es||t.a!=i.a||t.datum_type==Proj4js.common.PJD_3PARAM||t.datum_type==Proj4js.common.PJD_7PARAM||i.datum_type==Proj4js.common.PJD_3PARAM||i.datum_type==Proj4js.common.PJD_7PARAM)&&(t.geodetic_to_geocentric(s),(t.datum_type==Proj4js.common.PJD_3PARAM||t.datum_type==Proj4js.common.PJD_7PARAM)&&t.geocentric_to_wgs84(s),(i.datum_type==Proj4js.common.PJD_3PARAM||i.datum_type==Proj4js.common.PJD_7PARAM)&&i.geocentric_from_wgs84(s),i.geocentric_to_geodetic(s)),s)},adjust_axis:function(t,i,s){for(var e,o,n=s.x,a=s.y,r=s.z||0,h=0;3>h;h++)if(!i||2!=h||void 0!==s.z)switch(0==h?(e=n,o="x"):1==h?(e=a,o="y"):(e=r,o="z"),t.axis[h]){case"e":s[o]=e;break;case"w":s[o]=-e;break;case"n":s[o]=e;break;case"s":s[o]=-e;break;case"u":void 0!==s[o]&&(s.z=e);break;case"d":void 0!==s[o]&&(s.z=-e);break;default:return alert("ERROR: unknow axis ("+t.axis[h]+") - check definition of "+t.projName),null}return s},reportError:function(){},extend:function(t,i){if(t=t||{},i)for(var s in i){var e=i[s];void 0!==e&&(t[s]=e)}return t},Class:function(){for(var t,i=function(){this.initialize.apply(this,arguments)},s={},e=0;arguments.length>e;++e)t="function"==typeof arguments[e]?arguments[e].prototype:arguments[e],Proj4js.extend(s,t);return i.prototype=s,i},bind:function(t,i){var s=Array.prototype.slice.apply(arguments,[2]);return function(){var e=s.concat(Array.prototype.slice.apply(arguments,[0]));return t.apply(i,e)}},scriptName:"proj4js-combined.js",defsLookupService:"http://spatialreference.org/ref",libPath:null,getScriptLocation:function(){if(this.libPath)return this.libPath;for(var t=this.scriptName,i=t.length,s=document.getElementsByTagName("script"),e=0;s.length>e;e++){var o=s[e].getAttribute("src");if(o){var n=o.lastIndexOf(t);if(n>-1&&n+i==o.length){this.libPath=o.slice(0,-i);break}}}return this.libPath||""},loadScript:function(t,i,s,e){var o=document.createElement("script");o.defer=!1,o.type="text/javascript",o.id=t,o.src=t,o.onload=i,o.onerror=s,o.loadCheck=e,/MSIE/.test(navigator.userAgent)&&(o.onreadystatechange=this.checkReadyState),document.getElementsByTagName("head")[0].appendChild(o)},checkReadyState:function(){"loaded"==this.readyState&&(this.loadCheck()?this.onload():this.onerror())}};Proj4js.Proj=Proj4js.Class({readyToUse:!1,title:null,projName:null,units:null,datum:null,x0:0,y0:0,localCS:!1,queue:null,initialize:function(t,i){if(this.srsCodeInput=t,this.queue=[],i&&this.queue.push(i),t.indexOf("GEOGCS")>=0||t.indexOf("GEOCCS")>=0||t.indexOf("PROJCS")>=0||t.indexOf("LOCAL_CS")>=0)return this.parseWKT(t),this.deriveConstants(),this.loadProjCode(this.projName),void 0;if(0==t.indexOf("urn:")){var s=t.split(":");"ogc"!=s[1]&&"x-ogc"!=s[1]||"def"!=s[2]||"crs"!=s[3]||(t=s[4]+":"+s[s.length-1])}else if(0==t.indexOf("http://")){var e=t.split("#");e[0].match(/epsg.org/)?t="EPSG:"+e[1]:e[0].match(/RIG.xml/)&&(t="IGNF:"+e[1])}this.srsCode=t.toUpperCase(),0==this.srsCode.indexOf("EPSG")?(this.srsCode=this.srsCode,this.srsAuth="epsg",this.srsProjNumber=this.srsCode.substring(5)):0==this.srsCode.indexOf("IGNF")?(this.srsCode=this.srsCode,this.srsAuth="IGNF",this.srsProjNumber=this.srsCode.substring(5)):0==this.srsCode.indexOf("CRS")?(this.srsCode=this.srsCode,this.srsAuth="CRS",this.srsProjNumber=this.srsCode.substring(4)):(this.srsAuth="",this.srsProjNumber=this.srsCode),this.loadProjDefinition()},loadProjDefinition:function(){if(Proj4js.defs[this.srsCode])return this.defsLoaded(),void 0;var t=Proj4js.getScriptLocation()+"defs/"+this.srsAuth.toUpperCase()+this.srsProjNumber+".js";Proj4js.loadScript(t,Proj4js.bind(this.defsLoaded,this),Proj4js.bind(this.loadFromService,this),Proj4js.bind(this.checkDefsLoaded,this))},loadFromService:function(){var t=Proj4js.defsLookupService+"/"+this.srsAuth+"/"+this.srsProjNumber+"/proj4js/";Proj4js.loadScript(t,Proj4js.bind(this.defsLoaded,this),Proj4js.bind(this.defsFailed,this),Proj4js.bind(this.checkDefsLoaded,this))},defsLoaded:function(){this.parseDefs(),this.loadProjCode(this.projName)},checkDefsLoaded:function(){return Proj4js.defs[this.srsCode]?!0:!1},defsFailed:function(){Proj4js.reportError("failed to load projection definition for: "+this.srsCode),Proj4js.defs[this.srsCode]=Proj4js.defs.WGS84,this.defsLoaded()},loadProjCode:function(t){if(Proj4js.Proj[t])return this.initTransforms(),void 0;var i=Proj4js.getScriptLocation()+"projCode/"+t+".js";Proj4js.loadScript(i,Proj4js.bind(this.loadProjCodeSuccess,this,t),Proj4js.bind(this.loadProjCodeFailure,this,t),Proj4js.bind(this.checkCodeLoaded,this,t))},loadProjCodeSuccess:function(t){Proj4js.Proj[t].dependsOn?this.loadProjCode(Proj4js.Proj[t].dependsOn):this.initTransforms()},loadProjCodeFailure:function(t){Proj4js.reportError("failed to find projection file for: "+t)},checkCodeLoaded:function(t){return Proj4js.Proj[t]?!0:!1},initTransforms:function(){if(Proj4js.extend(this,Proj4js.Proj[this.projName]),this.init(),this.readyToUse=!0,this.queue)for(var t;t=this.queue.shift();)t.call(this,this)},wktRE:/^(\w+)\[(.*)\]$/,parseWKT:function(t){var i=t.match(this.wktRE);if(i){var s,e=i[1],o=i[2],n=o.split(",");s="TOWGS84"==e.toUpperCase()?e:n.shift(),s=s.replace(/^\"/,""),s=s.replace(/\"$/,"");for(var a=[],r=0,h="",l=0;n.length>l;++l){for(var c=n[l],m=0;c.length>m;++m)"["==c.charAt(m)&&++r,"]"==c.charAt(m)&&--r;h+=c,0===r?(a.push(h),h=""):h+=","}switch(e){case"LOCAL_CS":this.projName="identity",this.localCS=!0,this.srsCode=s;break;case"GEOGCS":this.projName="longlat",this.geocsCode=s,this.srsCode||(this.srsCode=s);break;case"PROJCS":this.srsCode=s;break;case"GEOCCS":break;case"PROJECTION":this.projName=Proj4js.wktProjections[s];break;case"DATUM":this.datumName=s;break;case"LOCAL_DATUM":this.datumCode="none";break;case"SPHEROID":this.ellps=s,this.a=parseFloat(a.shift()),this.rf=parseFloat(a.shift());break;case"PRIMEM":this.from_greenwich=parseFloat(a.shift());break;case"UNIT":this.units=s,this.unitsPerMeter=parseFloat(a.shift());break;case"PARAMETER":var u=s.toLowerCase(),d=parseFloat(a.shift());switch(u){case"false_easting":this.x0=d;break;case"false_northing":this.y0=d;break;case"scale_factor":this.k0=d;break;case"central_meridian":this.long0=d*Proj4js.common.D2R;break;case"latitude_of_origin":this.lat0=d*Proj4js.common.D2R;break;case"more_here":break;default:}break;case"TOWGS84":this.datum_params=a;break;case"AXIS":var u=s.toLowerCase(),d=a.shift();switch(d){case"EAST":d="e";break;case"WEST":d="w";break;case"NORTH":d="n";break;case"SOUTH":d="s";break;case"UP":d="u";break;case"DOWN":d="d";break;case"OTHER":default:d=" "}switch(this.axis||(this.axis="enu"),u){case"x":this.axis=d+this.axis.substr(1,2);break;case"y":this.axis=this.axis.substr(0,1)+d+this.axis.substr(2,1);break;case"z":this.axis=this.axis.substr(0,2)+d;break;default:}case"MORE_HERE":break;default:}for(var l=0;a.length>l;++l)this.parseWKT(a[l])}},parseDefs:function(){this.defData=Proj4js.defs[this.srsCode];var t,i;if(this.defData){for(var s=this.defData.split("+"),e=0;s.length>e;e++){var o=s[e].split("=");switch(t=o[0].toLowerCase(),i=o[1],t.replace(/\s/gi,"")){case"":break;case"title":this.title=i;break;case"proj":this.projName=i.replace(/\s/gi,"");break;case"units":this.units=i.replace(/\s/gi,"");break;case"datum":this.datumCode=i.replace(/\s/gi,"");break;case"nadgrids":this.nagrids=i.replace(/\s/gi,"");break;case"ellps":this.ellps=i.replace(/\s/gi,"");break;case"a":this.a=parseFloat(i);break;case"b":this.b=parseFloat(i);break;case"rf":this.rf=parseFloat(i);break;case"lat_0":this.lat0=i*Proj4js.common.D2R;break;case"lat_1":this.lat1=i*Proj4js.common.D2R;break;case"lat_2":this.lat2=i*Proj4js.common.D2R;break;case"lat_ts":this.lat_ts=i*Proj4js.common.D2R;break;case"lon_0":this.long0=i*Proj4js.common.D2R;break;case"alpha":this.alpha=parseFloat(i)*Proj4js.common.D2R;break;case"lonc":this.longc=i*Proj4js.common.D2R;break;case"x_0":this.x0=parseFloat(i);break;case"y_0":this.y0=parseFloat(i);break;case"k_0":this.k0=parseFloat(i);break;case"k":this.k0=parseFloat(i);break;case"r_a":this.R_A=!0;break;case"zone":this.zone=parseInt(i,10);break;case"south":this.utmSouth=!0;break;case"towgs84":this.datum_params=i.split(",");break;case"to_meter":this.to_meter=parseFloat(i);break;case"from_greenwich":this.from_greenwich=i*Proj4js.common.D2R;break;case"pm":i=i.replace(/\s/gi,""),this.from_greenwich=Proj4js.PrimeMeridian[i]?Proj4js.PrimeMeridian[i]:parseFloat(i),this.from_greenwich*=Proj4js.common.D2R;break;case"axis":i=i.replace(/\s/gi,"");var n="ewnsud";3==i.length&&-1!=n.indexOf(i.substr(0,1))&&-1!=n.indexOf(i.substr(1,1))&&-1!=n.indexOf(i.substr(2,1))&&(this.axis=i);break;case"no_defs":break;default:}}this.deriveConstants()}},deriveConstants:function(){if("@null"==this.nagrids&&(this.datumCode="none"),this.datumCode&&"none"!=this.datumCode){var t=Proj4js.Datum[this.datumCode];t&&(this.datum_params=t.towgs84?t.towgs84.split(","):null,this.ellps=t.ellipse,this.datumName=t.datumName?t.datumName:this.datumCode)}if(!this.a){var i=Proj4js.Ellipsoid[this.ellps]?Proj4js.Ellipsoid[this.ellps]:Proj4js.Ellipsoid.WGS84;Proj4js.extend(this,i)}this.rf&&!this.b&&(this.b=(1-1/this.rf)*this.a),(0===this.rf||Math.abs(this.a-this.b)=a;a++)if(s=t*Math.sin(n),e=this.HALF_PI-2*Math.atan(i*Math.pow((1-s)/(1+s),o))-n,n+=e,1e-10>=Math.abs(e))return n;return alert("phi2z has NoConvergence"),-9999},qsfnz:function(t,i){var s;return t>1e-7?(s=t*i,(1-t*t)*(i/(1-s*s)-.5/t*Math.log((1-s)/(1+s)))):2*i},asinz:function(t){return Math.abs(t)>1&&(t=t>1?1:-1),Math.asin(t)},e0fn:function(t){return 1-.25*t*(1+t/16*(3+1.25*t))},e1fn:function(t){return.375*t*(1+.25*t*(1+.46875*t))},e2fn:function(t){return.05859375*t*t*(1+.75*t)},e3fn:function(t){return t*t*t*(35/3072)},mlfn:function(t,i,s,e,o){return t*o-i*Math.sin(2*o)+s*Math.sin(4*o)-e*Math.sin(6*o)},srat:function(t,i){return Math.pow((1-t)/(1+t),i)},sign:function(t){return 0>t?-1:1},adjust_lon:function(t){return t=Math.abs(t)this.HALF_PI)return+Number.NaN;if(i==this.HALF_PI)return Number.POSITIVE_INFINITY;if(i==-1*this.HALF_PI)return-1*Number.POSITIVE_INFINITY;var e=t*s;return Math.log(Math.tan((this.HALF_PI+i)/2))+t*Math.log((1-e)/(1+e))/2},fL:function(t,i){return 2*Math.atan(t*Math.exp(i))-this.HALF_PI},invlatiso:function(t,i){var s=this.fL(1,i),e=0,o=0;do e=s,o=t*Math.sin(e),s=this.fL(Math.exp(t*Math.log((1+o)/(1-o))/2),i);while(Math.abs(s-e)>1e-12);return s},sinh:function(t){var i=Math.exp(t);return i=(i-1/i)/2},cosh:function(t){var i=Math.exp(t);return i=(i+1/i)/2},tanh:function(t){var i=Math.exp(t);return i=(i-1/i)/(i+1/i)},asinh:function(t){var i=t>=0?1:-1;return i*Math.log(Math.abs(t)+Math.sqrt(t*t+1))},acosh:function(t){return 2*Math.log(Math.sqrt((t+1)/2)+Math.sqrt((t-1)/2))},atanh:function(t){return Math.log((t-1)/(t+1))/2},gN:function(t,i,s){var e=i*s;return t/Math.sqrt(1-e*e)},pj_enfn:function(t){var i=[];i[0]=this.C00-t*(this.C02+t*(this.C04+t*(this.C06+t*this.C08))),i[1]=t*(this.C22-t*(this.C04+t*(this.C06+t*this.C08)));var s=t*t;return i[2]=s*(this.C44-t*(this.C46+t*this.C48)),s*=t,i[3]=s*(this.C66-t*this.C68),i[4]=s*t*this.C88,i},pj_mlfn:function(t,i,s,e){return s*=i,i*=i,e[0]*t-s*(e[1]+i*(e[2]+i*(e[3]+i*e[4])))},pj_inv_mlfn:function(t,i,s){for(var e=1/(1-i),o=t,n=Proj4js.common.MAX_ITER;n;--n){var a=Math.sin(o),r=1-i*a*a;if(r=(this.pj_mlfn(o,a,Math.cos(o),s)-t)*r*Math.sqrt(r)*e,o-=r,Math.abs(r)i;i++)t.datum_params[i]=parseFloat(t.datum_params[i]);(0!=t.datum_params[0]||0!=t.datum_params[1]||0!=t.datum_params[2])&&(this.datum_type=Proj4js.common.PJD_3PARAM),t.datum_params.length>3&&(0!=t.datum_params[3]||0!=t.datum_params[4]||0!=t.datum_params[5]||0!=t.datum_params[6])&&(this.datum_type=Proj4js.common.PJD_7PARAM,t.datum_params[3]*=Proj4js.common.SEC_TO_RAD,t.datum_params[4]*=Proj4js.common.SEC_TO_RAD,t.datum_params[5]*=Proj4js.common.SEC_TO_RAD,t.datum_params[6]=t.datum_params[6]/1e6+1)}t&&(this.a=t.a,this.b=t.b,this.es=t.es,this.ep2=t.ep2,this.datum_params=t.datum_params)},compare_datums:function(t){return this.datum_type!=t.datum_type?!1:this.a!=t.a||Math.abs(this.es-t.es)>5e-11?!1:this.datum_type==Proj4js.common.PJD_3PARAM?this.datum_params[0]==t.datum_params[0]&&this.datum_params[1]==t.datum_params[1]&&this.datum_params[2]==t.datum_params[2]:this.datum_type==Proj4js.common.PJD_7PARAM?this.datum_params[0]==t.datum_params[0]&&this.datum_params[1]==t.datum_params[1]&&this.datum_params[2]==t.datum_params[2]&&this.datum_params[3]==t.datum_params[3]&&this.datum_params[4]==t.datum_params[4]&&this.datum_params[5]==t.datum_params[5]&&this.datum_params[6]==t.datum_params[6]:this.datum_type==Proj4js.common.PJD_GRIDSHIFT||t.datum_type==Proj4js.common.PJD_GRIDSHIFT?(alert("ERROR: Grid shift transformations are not implemented."),!1):!0},geodetic_to_geocentric:function(t){var i,s,e,o,n,a,r,h=t.x,l=t.y,c=t.z?t.z:0,m=0;if(-Proj4js.common.HALF_PI>l&&l>-1.001*Proj4js.common.HALF_PI)l=-Proj4js.common.HALF_PI;else if(l>Proj4js.common.HALF_PI&&1.001*Proj4js.common.HALF_PI>l)l=Proj4js.common.HALF_PI;else if(-Proj4js.common.HALF_PI>l||l>Proj4js.common.HALF_PI)return Proj4js.reportError("geocent:lat out of range:"+l),null;return h>Proj4js.common.PI&&(h-=2*Proj4js.common.PI),n=Math.sin(l),r=Math.cos(l),a=n*n,o=this.a/Math.sqrt(1-this.es*a),i=(o+c)*r*Math.cos(h),s=(o+c)*r*Math.sin(h),e=(o*(1-this.es)+c)*n,t.x=i,t.y=s,t.z=e,m},geocentric_to_geodetic:function(t){var i,s,e,o,n,a,r,h,l,c,m,u,d,p,_,f,P,y=1e-12,g=y*y,L=30,v=t.x,j=t.y,M=t.z?t.z:0;if(d=!1,i=Math.sqrt(v*v+j*j),s=Math.sqrt(v*v+j*j+M*M),y>i/this.a){if(d=!0,_=0,y>s/this.a)return f=Proj4js.common.HALF_PI,P=-this.b,void 0}else _=Math.atan2(j,v);e=M/s,o=i/s,n=1/Math.sqrt(1-this.es*(2-this.es)*o*o),h=o*(1-this.es)*n,l=e*n,p=0;do p++,r=this.a/Math.sqrt(1-this.es*l*l),P=i*h+M*l-r*(1-this.es*l*l),a=this.es*r/(r+P),n=1/Math.sqrt(1-a*(2-a)*o*o),c=o*(1-a)*n,m=e*n,u=m*h-c*l,h=c,l=m;while(u*u>g&&L>p);return f=Math.atan(m/Math.abs(c)),t.x=_,t.y=f,t.z=P,t},geocentric_to_geodetic_noniter:function(t){var i,s,e,o,n,a,r,h,l,c,m,u,d,p,_,f,P,y=t.x,g=t.y,L=t.z?t.z:0;if(y=parseFloat(y),g=parseFloat(g),L=parseFloat(L),P=!1,0!=y)i=Math.atan2(g,y);else if(g>0)i=Proj4js.common.HALF_PI;else if(0>g)i=-Proj4js.common.HALF_PI;else if(P=!0,i=0,L>0)s=Proj4js.common.HALF_PI;else{if(!(0>L))return s=Proj4js.common.HALF_PI,e=-this.b,void 0;s=-Proj4js.common.HALF_PI}return n=y*y+g*g,o=Math.sqrt(n),a=L*Proj4js.common.AD_C,h=Math.sqrt(a*a+n),c=a/h,u=o/h,m=c*c*c,r=L+this.b*this.ep2*m,f=o-this.a*this.es*u*u*u,l=Math.sqrt(r*r+f*f),d=r/l,p=f/l,_=this.a/Math.sqrt(1-this.es*d*d),e=p>=Proj4js.common.COS_67P5?o/p-_:-Proj4js.common.COS_67P5>=p?o/-p-_:L/d+_*(this.es-1),0==P&&(s=Math.atan(d/p)),t.x=i,t.y=s,t.z=e,t},geocentric_to_wgs84:function(t){if(this.datum_type==Proj4js.common.PJD_3PARAM)t.x+=this.datum_params[0],t.y+=this.datum_params[1],t.z+=this.datum_params[2];else if(this.datum_type==Proj4js.common.PJD_7PARAM){var i=this.datum_params[0],s=this.datum_params[1],e=this.datum_params[2],o=this.datum_params[3],n=this.datum_params[4],a=this.datum_params[5],r=this.datum_params[6],h=r*(t.x-a*t.y+n*t.z)+i,l=r*(a*t.x+t.y-o*t.z)+s,c=r*(-n*t.x+o*t.y+t.z)+e;t.x=h,t.y=l,t.z=c}},geocentric_from_wgs84:function(t){if(this.datum_type==Proj4js.common.PJD_3PARAM)t.x-=this.datum_params[0],t.y-=this.datum_params[1],t.z-=this.datum_params[2];else if(this.datum_type==Proj4js.common.PJD_7PARAM){var i=this.datum_params[0],s=this.datum_params[1],e=this.datum_params[2],o=this.datum_params[3],n=this.datum_params[4],a=this.datum_params[5],r=this.datum_params[6],h=(t.x-i)/r,l=(t.y-s)/r,c=(t.z-e)/r;t.x=h+a*l-n*c,t.y=-a*h+l+o*c,t.z=n*h-o*l+c}}}),Proj4js.Point=Proj4js.Class({initialize:function(t,i,s){if("object"==typeof t)this.x=t[0],this.y=t[1],this.z=t[2]||0;else if("string"==typeof t&&i===void 0){var e=t.split(",");this.x=parseFloat(e[0]),this.y=parseFloat(e[1]),this.z=parseFloat(e[2])||0}else this.x=t,this.y=i,this.z=s||0},clone:function(){return new Proj4js.Point(this.x,this.y,this.z)},toString:function(){return"x="+this.x+",y="+this.y},toShortString:function(){return this.x+", "+this.y}}),Proj4js.PrimeMeridian={greenwich:0,lisbon:-9.131906111111,paris:2.337229166667,bogota:-74.080916666667,madrid:-3.687938888889,rome:12.452333333333,bern:7.439583333333,jakarta:106.807719444444,ferro:-17.666666666667,brussels:4.367975,stockholm:18.058277777778,athens:23.7163375,oslo:10.722916666667},Proj4js.Ellipsoid={MERIT:{a:6378137,rf:298.257,ellipseName:"MERIT 1983"},SGS85:{a:6378136,rf:298.257,ellipseName:"Soviet Geodetic System 85"},GRS80:{a:6378137,rf:298.257222101,ellipseName:"GRS 1980(IUGG, 1980)"},IAU76:{a:6378140,rf:298.257,ellipseName:"IAU 1976"},airy:{a:6377563.396,b:6356256.91,ellipseName:"Airy 1830"},"APL4.":{a:6378137,rf:298.25,ellipseName:"Appl. Physics. 1965"},NWL9D:{a:6378145,rf:298.25,ellipseName:"Naval Weapons Lab., 1965"},mod_airy:{a:6377340.189,b:6356034.446,ellipseName:"Modified Airy"},andrae:{a:6377104.43,rf:300,ellipseName:"Andrae 1876 (Den., Iclnd.)"},aust_SA:{a:6378160,rf:298.25,ellipseName:"Australian Natl & S. Amer. 1969"},GRS67:{a:6378160,rf:298.247167427,ellipseName:"GRS 67(IUGG 1967)"},bessel:{a:6377397.155,rf:299.1528128,ellipseName:"Bessel 1841"},bess_nam:{a:6377483.865,rf:299.1528128,ellipseName:"Bessel 1841 (Namibia)"},clrk66:{a:6378206.4,b:6356583.8,ellipseName:"Clarke 1866"},clrk80:{a:6378249.145,rf:293.4663,ellipseName:"Clarke 1880 mod."},CPM:{a:6375738.7,rf:334.29,ellipseName:"Comm. des Poids et Mesures 1799"},delmbr:{a:6376428,rf:311.5,ellipseName:"Delambre 1810 (Belgium)"},engelis:{a:6378136.05,rf:298.2566,ellipseName:"Engelis 1985"},evrst30:{a:6377276.345,rf:300.8017,ellipseName:"Everest 1830"},evrst48:{a:6377304.063,rf:300.8017,ellipseName:"Everest 1948"},evrst56:{a:6377301.243,rf:300.8017,ellipseName:"Everest 1956"},evrst69:{a:6377295.664,rf:300.8017,ellipseName:"Everest 1969"},evrstSS:{a:6377298.556,rf:300.8017,ellipseName:"Everest (Sabah & Sarawak)"},fschr60:{a:6378166,rf:298.3,ellipseName:"Fischer (Mercury Datum) 1960"},fschr60m:{a:6378155,rf:298.3,ellipseName:"Fischer 1960"},fschr68:{a:6378150,rf:298.3,ellipseName:"Fischer 1968"},helmert:{a:6378200,rf:298.3,ellipseName:"Helmert 1906"},hough:{a:6378270,rf:297,ellipseName:"Hough"},intl:{a:6378388,rf:297,ellipseName:"International 1909 (Hayford)"},kaula:{a:6378163,rf:298.24,ellipseName:"Kaula 1961"},lerch:{a:6378139,rf:298.257,ellipseName:"Lerch 1979"},mprts:{a:6397300,rf:191,ellipseName:"Maupertius 1738"},new_intl:{a:6378157.5,b:6356772.2,ellipseName:"New International 1967"},plessis:{a:6376523,rf:6355863,ellipseName:"Plessis 1817 (France)"},krass:{a:6378245,rf:298.3,ellipseName:"Krassovsky, 1942"},SEasia:{a:6378155,b:6356773.3205,ellipseName:"Southeast Asia"},walbeck:{a:6376896,b:6355834.8467,ellipseName:"Walbeck"},WGS60:{a:6378165,rf:298.3,ellipseName:"WGS 60"},WGS66:{a:6378145,rf:298.25,ellipseName:"WGS 66"},WGS72:{a:6378135,rf:298.26,ellipseName:"WGS 72"},WGS84:{a:6378137,rf:298.257223563,ellipseName:"WGS 84"},sphere:{a:6370997,b:6370997,ellipseName:"Normal Sphere (r=6370997)"}},Proj4js.Datum={WGS84:{towgs84:"0,0,0",ellipse:"WGS84",datumName:"WGS84"},GGRS87:{towgs84:"-199.87,74.79,246.62",ellipse:"GRS80",datumName:"Greek_Geodetic_Reference_System_1987"},NAD83:{towgs84:"0,0,0",ellipse:"GRS80",datumName:"North_American_Datum_1983"},NAD27:{nadgrids:"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat",ellipse:"clrk66",datumName:"North_American_Datum_1927"},potsdam:{towgs84:"606.0,23.0,413.0",ellipse:"bessel",datumName:"Potsdam Rauenberg 1950 DHDN"},carthage:{towgs84:"-263.0,6.0,431.0",ellipse:"clark80",datumName:"Carthage 1934 Tunisia"},hermannskogel:{towgs84:"653.0,-212.0,449.0",ellipse:"bessel",datumName:"Hermannskogel"},ire65:{towgs84:"482.530,-130.596,564.557,-1.042,-0.214,-0.631,8.15",ellipse:"mod_airy",datumName:"Ireland 1965"},nzgd49:{towgs84:"59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993",ellipse:"intl",datumName:"New Zealand Geodetic Datum 1949"},OSGB36:{towgs84:"446.448,-125.157,542.060,0.1502,0.2470,0.8421,-20.4894",ellipse:"airy",datumName:"Airy 1830"}},Proj4js.WGS84=new Proj4js.Proj("WGS84"),Proj4js.Datum.OSB36=Proj4js.Datum.OSGB36,Proj4js.wktProjections={"Lambert Tangential Conformal Conic Projection":"lcc",Mercator:"merc","Popular Visualisation Pseudo Mercator":"merc",Mercator_1SP:"merc",Transverse_Mercator:"tmerc","Transverse Mercator":"tmerc","Lambert Azimuthal Equal Area":"laea","Universal Transverse Mercator System":"utm"},Proj4js.Proj.aea={init:function(){return Math.abs(this.lat1+this.lat2)Proj4js.common.EPSLN?(this.ms1*this.ms1-this.ms2*this.ms2)/(this.qs2-this.qs1):this.con,this.c=this.ms1*this.ms1+this.ns0*this.qs1,this.rh=this.a*Math.sqrt(this.c-this.ns0*this.qs0)/this.ns0,void 0)},forward:function(t){var i=t.x,s=t.y;this.sin_phi=Math.sin(s),this.cos_phi=Math.cos(s);var e=Proj4js.common.qsfnz(this.e3,this.sin_phi,this.cos_phi),o=this.a*Math.sqrt(this.c-this.ns0*e)/this.ns0,n=this.ns0*Proj4js.common.adjust_lon(i-this.long0),a=o*Math.sin(n)+this.x0,r=this.rh-o*Math.cos(n)+this.y0;return t.x=a,t.y=r,t},inverse:function(t){var i,s,e,o,n,a;return t.x-=this.x0,t.y=this.rh-t.y+this.y0,this.ns0>=0?(i=Math.sqrt(t.x*t.x+t.y*t.y),e=1):(i=-Math.sqrt(t.x*t.x+t.y*t.y),e=-1),o=0,0!=i&&(o=Math.atan2(e*t.x,e*t.y)),e=i*this.ns0/this.a,s=(this.c-e*e)/this.ns0,this.e3>=1e-10?(e=1-.5*(1-this.es)*Math.log((1-this.e3)/(1+this.e3))/this.e3,a=Math.abs(Math.abs(e)-Math.abs(s))>1e-10?this.phi1z(this.e3,s):s>=0?.5*Proj4js.common.PI:-.5*Proj4js.common.PI):a=this.phi1z(this.e3,s),n=Proj4js.common.adjust_lon(o/this.ns0+this.long0),t.x=n,t.y=a,t},phi1z:function(t,i){var s,e,o,n,a,r=Proj4js.common.asinz(.5*i);if(Proj4js.common.EPSLN>t)return r;for(var h=t*t,l=1;25>=l;l++)if(s=Math.sin(r),e=Math.cos(r),o=t*s,n=1-o*o,a=.5*n*n/e*(i/(1-h)-s/n+.5/t*Math.log((1-o)/(1+o))),r+=a,1e-7>=Math.abs(a))return r;return Proj4js.reportError("aea:phi1z:Convergence error"),null}},Proj4js.Proj.sterea={dependsOn:"gauss",init:function(){return Proj4js.Proj.gauss.init.apply(this),this.rc?(this.sinc0=Math.sin(this.phic0),this.cosc0=Math.cos(this.phic0),this.R2=2*this.rc,this.title||(this.title="Oblique Stereographic Alternative"),void 0):(Proj4js.reportError("sterea:init:E_ERROR_0"),void 0)},forward:function(t){var i,s,e,o;return t.x=Proj4js.common.adjust_lon(t.x-this.long0),Proj4js.Proj.gauss.forward.apply(this,[t]),i=Math.sin(t.y),s=Math.cos(t.y),e=Math.cos(t.x),o=this.k0*this.R2/(1+this.sinc0*i+this.cosc0*s*e),t.x=o*s*Math.sin(t.x),t.y=o*(this.cosc0*i-this.sinc0*s*e),t.x=this.a*t.x+this.x0,t.y=this.a*t.y+this.y0,t},inverse:function(t){var i,s,e,o,n;if(t.x=(t.x-this.x0)/this.a,t.y=(t.y-this.y0)/this.a,t.x/=this.k0,t.y/=this.k0,n=Math.sqrt(t.x*t.x+t.y*t.y)){var a=2*Math.atan2(n,this.R2);i=Math.sin(a),s=Math.cos(a),o=Math.asin(s*this.sinc0+t.y*i*this.cosc0/n),e=Math.atan2(t.x*i,n*this.cosc0*s-t.y*this.sinc0*i)}else o=this.phic0,e=0;return t.x=e,t.y=o,Proj4js.Proj.gauss.inverse.apply(this,[t]),t.x=Proj4js.common.adjust_lon(t.x+this.long0),t}},Proj4js.Proj.poly={init:function(){0==this.lat0&&(this.lat0=90),this.temp=this.b/this.a,this.es=1-Math.pow(this.temp,2),this.e=Math.sqrt(this.es),this.e0=Proj4js.common.e0fn(this.es),this.e1=Proj4js.common.e1fn(this.es),this.e2=Proj4js.common.e2fn(this.es),this.e3=Proj4js.common.e3fn(this.es),this.ml0=Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,this.lat0)},forward:function(t){var i,s,e,o,n,a,r,h=t.x,l=t.y;return e=Proj4js.common.adjust_lon(h-this.long0),1e-7>=Math.abs(l)?(a=this.x0+this.a*e,r=this.y0-this.a*this.ml0):(i=Math.sin(l),s=Math.cos(l),o=Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,l),n=Proj4js.common.msfnz(this.e,i,s),e=i,a=this.x0+this.a*n*Math.sin(e)/i,r=this.y0+this.a*(o-this.ml0+n*(1-Math.cos(e))/i)),t.x=a,t.y=r,t},inverse:function(t){var i,s,e,o,n,a;if(t.x-=this.x0,t.y-=this.y0,i=this.ml0+t.y/this.a,o=0,1e-7>=Math.abs(i))n=t.x/this.a+this.long0,a=0;else{if(s=i*i+t.x/this.a*(t.x/this.a),o=phi4z(this.es,this.e0,this.e1,this.e2,this.e3,this.al,s,e,a),1!=o)return o;n=Proj4js.common.adjust_lon(Proj4js.common.asinz(t.x*e/this.a)/Math.sin(a)+this.long0)}return t.x=n,t.y=a,t}},Proj4js.Proj.equi={init:function(){this.x0||(this.x0=0),this.y0||(this.y0=0),this.lat0||(this.lat0=0),this.long0||(this.long0=0)},forward:function(t){var i=t.x,s=t.y,e=Proj4js.common.adjust_lon(i-this.long0),o=this.x0+this.a*e*Math.cos(this.lat0),n=this.y0+this.a*s;return this.t1=o,this.t2=Math.cos(this.lat0),t.x=o,t.y=n,t},inverse:function(t){t.x-=this.x0,t.y-=this.y0;var i=t.y/this.a;Math.abs(i)>Proj4js.common.HALF_PI&&Proj4js.reportError("equi:Inv:DataError");var s=Proj4js.common.adjust_lon(this.long0+t.x/(this.a*Math.cos(this.lat0)));t.x=s,t.y=i}},Proj4js.Proj.merc={init:function(){this.lat_ts&&(this.k0=this.sphere?Math.cos(this.lat_ts):Proj4js.common.msfnz(this.es,Math.sin(this.lat_ts),Math.cos(this.lat_ts)))},forward:function(t){var i=t.x,s=t.y;if(s*Proj4js.common.R2D>90&&-90>s*Proj4js.common.R2D&&i*Proj4js.common.R2D>180&&-180>i*Proj4js.common.R2D)return Proj4js.reportError("merc:forward: llInputOutOfRange: "+i+" : "+s),null;var e,o;if(Math.abs(Math.abs(s)-Proj4js.common.HALF_PI)<=Proj4js.common.EPSLN)return Proj4js.reportError("merc:forward: ll2mAtPoles"),null;if(this.sphere)e=this.x0+this.a*this.k0*Proj4js.common.adjust_lon(i-this.long0),o=this.y0+this.a*this.k0*Math.log(Math.tan(Proj4js.common.FORTPI+.5*s));else{var n=Math.sin(s),a=Proj4js.common.tsfnz(this.e,s,n);e=this.x0+this.a*this.k0*Proj4js.common.adjust_lon(i-this.long0),o=this.y0-this.a*this.k0*Math.log(a)}return t.x=e,t.y=o,t},inverse:function(t){var i,s,e=t.x-this.x0,o=t.y-this.y0;if(this.sphere)s=Proj4js.common.HALF_PI-2*Math.atan(Math.exp(-o/this.a*this.k0));else{var n=Math.exp(-o/(this.a*this.k0));if(s=Proj4js.common.phi2z(this.e,n),-9999==s)return Proj4js.reportError("merc:inverse: lat = -9999"),null}return i=Proj4js.common.adjust_lon(this.long0+e/(this.a*this.k0)),t.x=i,t.y=s,t}},Proj4js.Proj.utm={dependsOn:"tmerc",init:function(){return this.zone?(this.lat0=0,this.long0=(6*Math.abs(this.zone)-183)*Proj4js.common.D2R,this.x0=5e5,this.y0=this.utmSouth?1e7:0,this.k0=.9996,Proj4js.Proj.tmerc.init.apply(this),this.forward=Proj4js.Proj.tmerc.forward,this.inverse=Proj4js.Proj.tmerc.inverse,void 0):(Proj4js.reportError("utm:init: zone must be specified for UTM"),void 0)}},Proj4js.Proj.eqdc={init:function(){this.mode||(this.mode=0),this.temp=this.b/this.a,this.es=1-Math.pow(this.temp,2),this.e=Math.sqrt(this.es),this.e0=Proj4js.common.e0fn(this.es),this.e1=Proj4js.common.e1fn(this.es),this.e2=Proj4js.common.e2fn(this.es),this.e3=Proj4js.common.e3fn(this.es),this.sinphi=Math.sin(this.lat1),this.cosphi=Math.cos(this.lat1),this.ms1=Proj4js.common.msfnz(this.e,this.sinphi,this.cosphi),this.ml1=Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,this.lat1),0!=this.mode?(Math.abs(this.lat1+this.lat2)=Proj4js.common.EPSLN?(this.ms1-this.ms2)/(this.ml2-this.ml1):this.sinphi):this.ns=this.sinphi,this.g=this.ml1+this.ms1/this.ns,this.ml0=Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,this.lat0),this.rh=this.a*(this.g-this.ml0) +},forward:function(t){var i=t.x,s=t.y,e=Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,s),o=this.a*(this.g-e),n=this.ns*Proj4js.common.adjust_lon(i-this.long0),a=this.x0+o*Math.sin(n),r=this.y0+this.rh-o*Math.cos(n);return t.x=a,t.y=r,t},inverse:function(t){t.x-=this.x0,t.y=this.rh-t.y+this.y0;var i,s;this.ns>=0?(s=Math.sqrt(t.x*t.x+t.y*t.y),i=1):(s=-Math.sqrt(t.x*t.x+t.y*t.y),i=-1);var e=0;0!=s&&(e=Math.atan2(i*t.x,i*t.y));var o=this.g-s/this.a,n=this.phi3z(o,this.e0,this.e1,this.e2,this.e3),a=Proj4js.common.adjust_lon(this.long0+e/this.ns);return t.x=a,t.y=n,t},phi3z:function(t,i,s,e,o){var n,a;n=t;for(var r=0;15>r;r++)if(a=(t+s*Math.sin(2*n)-e*Math.sin(4*n)+o*Math.sin(6*n))/i-n,n+=a,1e-10>=Math.abs(a))return n;return Proj4js.reportError("PHI3Z-CONV:Latitude failed to converge after 15 iterations"),null}},Proj4js.Proj.tmerc={init:function(){this.e0=Proj4js.common.e0fn(this.es),this.e1=Proj4js.common.e1fn(this.es),this.e2=Proj4js.common.e2fn(this.es),this.e3=Proj4js.common.e3fn(this.es),this.ml0=this.a*Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,this.lat0)},forward:function(t){var i,s,e,o=t.x,n=t.y,a=Proj4js.common.adjust_lon(o-this.long0),r=Math.sin(n),h=Math.cos(n);if(this.sphere){var l=h*Math.sin(a);if(1e-10>Math.abs(Math.abs(l)-1))return Proj4js.reportError("tmerc:forward: Point projects into infinity"),93;s=.5*this.a*this.k0*Math.log((1+l)/(1-l)),i=Math.acos(h*Math.cos(a)/Math.sqrt(1-l*l)),0>n&&(i=-i),e=this.a*this.k0*(i-this.lat0)}else{var c=h*a,m=Math.pow(c,2),u=this.ep2*Math.pow(h,2),d=Math.tan(n),p=Math.pow(d,2);i=1-this.es*Math.pow(r,2);var _=this.a/Math.sqrt(i),f=this.a*Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,n);s=this.k0*_*c*(1+m/6*(1-p+u+m/20*(5-18*p+Math.pow(p,2)+72*u-58*this.ep2)))+this.x0,e=this.k0*(f-this.ml0+_*d*m*(.5+m/24*(5-p+9*u+4*Math.pow(u,2)+m/30*(61-58*p+Math.pow(p,2)+600*u-330*this.ep2))))+this.y0}return t.x=s,t.y=e,t},inverse:function(t){var i,s,e,o,n,a,r=6;if(this.sphere){var h=Math.exp(t.x/(this.a*this.k0)),l=.5*(h-1/h),c=this.lat0+t.y/(this.a*this.k0),m=Math.cos(c);i=Math.sqrt((1-m*m)/(1+l*l)),n=Proj4js.common.asinz(i),0>c&&(n=-n),a=0==l&&0==m?this.long0:Proj4js.common.adjust_lon(Math.atan2(l,m)+this.long0)}else{var u=t.x-this.x0,d=t.y-this.y0;for(i=(this.ml0+d/this.k0)/this.a,s=i,o=0;!0&&(e=(i+this.e1*Math.sin(2*s)-this.e2*Math.sin(4*s)+this.e3*Math.sin(6*s))/this.e0-s,s+=e,!(Math.abs(e)<=Proj4js.common.EPSLN));o++)if(o>=r)return Proj4js.reportError("tmerc:inverse: Latitude failed to converge"),95;if(Math.abs(s)0||Math.abs(a)<=Proj4js.common.EPSLN)var l=this.a*n*s*Math.sin(e),c=this.y0+this.a*n*(this.cos_p14*i-this.sin_p14*s*o);else Proj4js.reportError("orthoFwdPointError");return t.x=l,t.y=c,t},inverse:function(t){var i,s,e,o,n,a,r;return t.x-=this.x0,t.y-=this.y0,i=Math.sqrt(t.x*t.x+t.y*t.y),i>this.a+1e-7&&Proj4js.reportError("orthoInvDataError"),s=Proj4js.common.asinz(i/this.a),e=Math.sin(s),o=Math.cos(s),a=this.long0,Math.abs(i)<=Proj4js.common.EPSLN&&(r=this.lat0),r=Proj4js.common.asinz(o*this.sin_p14+t.y*e*this.cos_p14/i),n=Math.abs(this.lat0)-Proj4js.common.HALF_PI,Math.abs(n)<=Proj4js.common.EPSLN&&(a=this.lat0>=0?Proj4js.common.adjust_lon(this.long0+Math.atan2(t.x,-t.y)):Proj4js.common.adjust_lon(this.long0-Math.atan2(-t.x,t.y))),n=o-this.sin_p14*Math.sin(r),t.x=a,t.y=r,t}},Proj4js.Proj.krovak={init:function(){this.a=6377397.155,this.es=.006674372230614,this.e=Math.sqrt(this.es),this.lat0||(this.lat0=.863937979737193),this.long0||(this.long0=.4334234309119251),this.k0||(this.k0=.9999),this.s45=.785398163397448,this.s90=2*this.s45,this.fi0=this.lat0,this.e2=this.es,this.e=Math.sqrt(this.e2),this.alfa=Math.sqrt(1+this.e2*Math.pow(Math.cos(this.fi0),4)/(1-this.e2)),this.uq=1.04216856380474,this.u0=Math.asin(Math.sin(this.fi0)/this.alfa),this.g=Math.pow((1+this.e*Math.sin(this.fi0))/(1-this.e*Math.sin(this.fi0)),this.alfa*this.e/2),this.k=Math.tan(this.u0/2+this.s45)/Math.pow(Math.tan(this.fi0/2+this.s45),this.alfa)*this.g,this.k1=this.k0,this.n0=this.a*Math.sqrt(1-this.e2)/(1-this.e2*Math.pow(Math.sin(this.fi0),2)),this.s0=1.37008346281555,this.n=Math.sin(this.s0),this.ro0=this.k1*this.n0/Math.tan(this.s0),this.ad=this.s90-this.uq},forward:function(t){var i,s,e,o,n,a,r,h=t.x,l=t.y,c=Proj4js.common.adjust_lon(h-this.long0);return i=Math.pow((1+this.e*Math.sin(l))/(1-this.e*Math.sin(l)),this.alfa*this.e/2),s=2*(Math.atan(this.k*Math.pow(Math.tan(l/2+this.s45),this.alfa)/i)-this.s45),e=-c*this.alfa,o=Math.asin(Math.cos(this.ad)*Math.sin(s)+Math.sin(this.ad)*Math.cos(s)*Math.cos(e)),n=Math.asin(Math.cos(s)*Math.sin(e)/Math.cos(o)),a=this.n*n,r=this.ro0*Math.pow(Math.tan(this.s0/2+this.s45),this.n)/Math.pow(Math.tan(o/2+this.s45),this.n),t.y=r*Math.cos(a)/1,t.x=r*Math.sin(a)/1,this.czech&&(t.y*=-1,t.x*=-1),t},inverse:function(t){var i,s,e,o,n,a,r,h,l=t.x;t.x=t.y,t.y=l,this.czech&&(t.y*=-1,t.x*=-1),a=Math.sqrt(t.x*t.x+t.y*t.y),n=Math.atan2(t.y,t.x),o=n/Math.sin(this.s0),e=2*(Math.atan(Math.pow(this.ro0/a,1/this.n)*Math.tan(this.s0/2+this.s45))-this.s45),i=Math.asin(Math.cos(this.ad)*Math.sin(e)-Math.sin(this.ad)*Math.cos(e)*Math.cos(o)),s=Math.asin(Math.cos(e)*Math.sin(o)/Math.cos(i)),t.x=this.long0-s/this.alfa,r=i,h=0;var c=0;do t.y=2*(Math.atan(Math.pow(this.k,-1/this.alfa)*Math.pow(Math.tan(i/2+this.s45),1/this.alfa)*Math.pow((1+this.e*Math.sin(r))/(1-this.e*Math.sin(r)),this.e/2))-this.s45),1e-10>Math.abs(r-t.y)&&(h=1),r=t.y,c+=1;while(0==h&&15>c);return c>=15?(Proj4js.reportError("PHI3Z-CONV:Latitude failed to converge after 15 iterations"),null):t}},Proj4js.Proj.somerc={init:function(){var t=this.lat0;this.lambda0=this.long0;var i=Math.sin(t),s=this.a,e=this.rf,o=1/e,n=2*o-Math.pow(o,2),a=this.e=Math.sqrt(n);this.R=this.k0*s*Math.sqrt(1-n)/(1-n*Math.pow(i,2)),this.alpha=Math.sqrt(1+n/(1-n)*Math.pow(Math.cos(t),4)),this.b0=Math.asin(i/this.alpha),this.K=Math.log(Math.tan(Math.PI/4+this.b0/2))-this.alpha*Math.log(Math.tan(Math.PI/4+t/2))+this.alpha*a/2*Math.log((1+a*i)/(1-a*i))},forward:function(t){var i=Math.log(Math.tan(Math.PI/4-t.y/2)),s=this.e/2*Math.log((1+this.e*Math.sin(t.y))/(1-this.e*Math.sin(t.y))),e=-this.alpha*(i+s)+this.K,o=2*(Math.atan(Math.exp(e))-Math.PI/4),n=this.alpha*(t.x-this.lambda0),a=Math.atan(Math.sin(n)/(Math.sin(this.b0)*Math.tan(o)+Math.cos(this.b0)*Math.cos(n))),r=Math.asin(Math.cos(this.b0)*Math.sin(o)-Math.sin(this.b0)*Math.cos(o)*Math.cos(n));return t.y=this.R/2*Math.log((1+Math.sin(r))/(1-Math.sin(r)))+this.y0,t.x=this.R*a+this.x0,t},inverse:function(t){for(var i=t.x-this.x0,s=t.y-this.y0,e=i/this.R,o=2*(Math.atan(Math.exp(s/this.R))-Math.PI/4),n=Math.asin(Math.cos(this.b0)*Math.sin(o)+Math.sin(this.b0)*Math.cos(o)*Math.cos(e)),a=Math.atan(Math.sin(e)/(Math.cos(this.b0)*Math.cos(e)-Math.sin(this.b0)*Math.tan(o))),r=this.lambda0+a/this.alpha,h=0,l=n,c=-1e3,m=0;Math.abs(l-c)>1e-7;){if(++m>20)return Proj4js.reportError("omercFwdInfinity"),void 0;h=1/this.alpha*(Math.log(Math.tan(Math.PI/4+n/2))-this.K)+this.e*Math.log(Math.tan(Math.PI/4+Math.asin(this.e*Math.sin(l))/2)),c=l,l=2*Math.atan(Math.exp(h))-Math.PI/2}return t.x=r,t.y=l,t}},Proj4js.Proj.stere={ssfn_:function(t,i,s){return i*=s,Math.tan(.5*(Proj4js.common.HALF_PI+t))*Math.pow((1-i)/(1+i),.5*s)},TOL:1e-8,NITER:8,CONV:1e-10,S_POLE:0,N_POLE:1,OBLIQ:2,EQUIT:3,init:function(){this.phits=this.lat_ts?this.lat_ts:Proj4js.common.HALF_PI;var t=Math.abs(this.lat0);if(this.mode=Math.abs(t)-Proj4js.common.HALF_PIthis.lat0?this.S_POLE:this.N_POLE:t>Proj4js.common.EPSLN?this.OBLIQ:this.EQUIT,this.phits=Math.abs(this.phits),this.es){var i;switch(this.mode){case this.N_POLE:case this.S_POLE:Math.abs(this.phits-Proj4js.common.HALF_PI)=Proj4js.common.EPSLN?Math.cos(this.phits)/Math.tan(Proj4js.common.FORTPI-.5*this.phits):2*this.k0}},forward:function(t){var i=t.x;i=Proj4js.common.adjust_lon(i-this.long0);var s,e,o=t.y;if(this.sphere){var n,a,r,h;switch(n=Math.sin(o),a=Math.cos(o),r=Math.cos(i),h=Math.sin(i),this.mode){case this.EQUIT:e=1+a*r,Proj4js.common.EPSLN>=e&&Proj4js.reportError("stere:forward:Equit"),e=this.akm1/e,s=e*a*h,e*=n;break;case this.OBLIQ:e=1+this.sinph0*n+this.cosph0*a*r,Proj4js.common.EPSLN>=e&&Proj4js.reportError("stere:forward:Obliq"),e=this.akm1/e,s=e*a*h,e*=this.cosph0*n-this.sinph0*a*r;break;case this.N_POLE:r=-r,o=-o;case this.S_POLE:Math.abs(o-Proj4js.common.HALF_PI)=l;l++)r*=n,h+=this.A[l]*r;for(var c,m,u=h,d=a,p=1,_=0,f=0,P=0,l=1;6>=l;l++)c=p*u-_*d,m=_*u+p*d,p=c,_=m,f=f+this.B_re[l]*p-this.B_im[l]*_,P=P+this.B_im[l]*p+this.B_re[l]*_;return t.x=P*this.a+this.x0,t.y=f*this.a+this.y0,t},inverse:function(t){for(var i,s,e=t.x,o=t.y,n=e-this.x0,a=o-this.y0,r=a/this.a,h=n/this.a,l=1,c=0,m=0,u=0,d=1;6>=d;d++)i=l*r-c*h,s=c*r+l*h,l=i,c=s,m=m+this.C_re[d]*l-this.C_im[d]*c,u=u+this.C_im[d]*l+this.C_re[d]*c;for(var p=0;this.iterations>p;p++){for(var _,f,P=m,y=u,g=r,L=h,d=2;6>=d;d++)_=P*m-y*u,f=y*m+P*u,P=_,y=f,g+=(d-1)*(this.B_re[d]*P-this.B_im[d]*y),L+=(d-1)*(this.B_im[d]*P+this.B_re[d]*y);P=1,y=0;for(var v=this.B_re[1],j=this.B_im[1],d=2;6>=d;d++)_=P*m-y*u,f=y*m+P*u,P=_,y=f,v+=d*(this.B_re[d]*P-this.B_im[d]*y),j+=d*(this.B_im[d]*P+this.B_re[d]*y);var M=v*v+j*j;m=(g*v+L*j)/M,u=(L*v-g*j)/M}for(var S=m,b=u,x=1,E=0,d=1;9>=d;d++)x*=S,E+=this.D[d]*x;var C=this.lat0+1e5*E*Proj4js.common.SEC_TO_RAD,w=this.long0+b;return t.x=w,t.y=C,t}},Proj4js.Proj.mill={init:function(){},forward:function(t){var i=t.x,s=t.y,e=Proj4js.common.adjust_lon(i-this.long0),o=this.x0+this.a*e,n=this.y0+1.25*this.a*Math.log(Math.tan(Proj4js.common.PI/4+s/2.5));return t.x=o,t.y=n,t},inverse:function(t){t.x-=this.x0,t.y-=this.y0;var i=Proj4js.common.adjust_lon(this.long0+t.x/this.a),s=2.5*(Math.atan(Math.exp(.8*t.y/this.a))-Proj4js.common.PI/4);return t.x=i,t.y=s,t}},Proj4js.Proj.gnom={init:function(){this.sin_p14=Math.sin(this.lat0),this.cos_p14=Math.cos(this.lat0),this.infinity_dist=1e3*this.a,this.rc=1},forward:function(t){var i,s,e,o,n,a,r,h,l=t.x,c=t.y;return e=Proj4js.common.adjust_lon(l-this.long0),i=Math.sin(c),s=Math.cos(c),o=Math.cos(e),a=this.sin_p14*i+this.cos_p14*s*o,n=1,a>0||Math.abs(a)<=Proj4js.common.EPSLN?(r=this.x0+this.a*n*s*Math.sin(e)/a,h=this.y0+this.a*n*(this.cos_p14*i-this.sin_p14*s*o)/a):(Proj4js.reportError("orthoFwdPointError"),r=this.x0+this.infinity_dist*s*Math.sin(e),h=this.y0+this.infinity_dist*(this.cos_p14*i-this.sin_p14*s*o)),t.x=r,t.y=h,t},inverse:function(t){var i,s,e,o,n,a;return t.x=(t.x-this.x0)/this.a,t.y=(t.y-this.y0)/this.a,t.x/=this.k0,t.y/=this.k0,(i=Math.sqrt(t.x*t.x+t.y*t.y))?(o=Math.atan2(i,this.rc),s=Math.sin(o),e=Math.cos(o),a=Proj4js.common.asinz(e*this.sin_p14+t.y*s*this.cos_p14/i),n=Math.atan2(t.x*s,i*this.cos_p14*e-t.y*this.sin_p14*s),n=Proj4js.common.adjust_lon(this.long0+n)):(a=this.phic0,n=0),t.x=n,t.y=a,t}},Proj4js.Proj.sinu={init:function(){this.sphere?(this.n=1,this.m=0,this.es=0,this.C_y=Math.sqrt((this.m+1)/this.n),this.C_x=this.C_y/(this.m+1)):this.en=Proj4js.common.pj_enfn(this.es)},forward:function(t){var i,s,e=t.x,o=t.y;if(e=Proj4js.common.adjust_lon(e-this.long0),this.sphere){if(this.m)for(var n=this.n*Math.sin(o),a=Proj4js.common.MAX_ITER;a;--a){var r=(this.m*o+Math.sin(o)-n)/(this.m+Math.cos(o));if(o-=r,Math.abs(r)o?(o=Math.sin(i),s=this.long0+t.x*Math.sqrt(1-this.es*o*o)/(this.a*Math.cos(i)),e=Proj4js.common.adjust_lon(s)):o-Proj4js.common.EPSLN=0?this.y0+Proj4js.common.PI*this.R*Math.tan(.5*a):this.y0+Proj4js.common.PI*this.R*-Math.tan(.5*a));var r=.5*Math.abs(Proj4js.common.PI/n-n/Proj4js.common.PI),h=r*r,l=Math.sin(a),c=Math.cos(a),m=c/(l+c-1),u=m*m,d=m*(2/l-1),p=d*d,_=Proj4js.common.PI*this.R*(r*(m-p)+Math.sqrt(h*(m-p)*(m-p)-(p+h)*(u-p)))/(p+h);return 0>n&&(_=-_),i=this.x0+_,_=Math.abs(_/(Proj4js.common.PI*this.R)),s=o>=0?this.y0+Proj4js.common.PI*this.R*Math.sqrt(1-_*_-2*r*_):this.y0-Proj4js.common.PI*this.R*Math.sqrt(1-_*_-2*r*_),t.x=i,t.y=s,t},inverse:function(t){var i,s,e,o,n,a,r,h,l,c,m,u,d;return t.x-=this.x0,t.y-=this.y0,m=Proj4js.common.PI*this.R,e=t.x/m,o=t.y/m,n=e*e+o*o,a=-Math.abs(o)*(1+n),r=a-2*o*o+e*e,h=-2*a+1+2*o*o+n*n,d=o*o/h+(2*r*r*r/h/h/h-9*a*r/h/h)/27,l=(a-r*r/3/h)/h,c=2*Math.sqrt(-l/3),m=3*d/l/c,Math.abs(m)>1&&(m=m>=0?1:-1),u=Math.acos(m)/3,s=t.y>=0?(-c*Math.cos(u+Proj4js.common.PI/3)-r/3/h)*Proj4js.common.PI:-(-c*Math.cos(u+Proj4js.common.PI/3)-r/3/h)*Proj4js.common.PI,Math.abs(e)0&&(e=2*Math.atan(o*Proj4js.common.srat(this.e*Math.sin(t.y),-.5*this.e))-Proj4js.common.HALF_PI,!(i>Math.abs(e-t.y)));--n)t.y=e;return n?(t.x=s,t.y=e,t):(Proj4js.reportError("gauss:inverse:convergence failed"),null)}},Proj4js.Proj.omerc={init:function(){this.mode||(this.mode=0),this.lon1||(this.lon1=0,this.mode=1),this.lon2||(this.lon2=0),this.lat2||(this.lat2=0);var t=this.b/this.a,i=1-Math.pow(t,2);Math.sqrt(i),this.sin_p20=Math.sin(this.lat0),this.cos_p20=Math.cos(this.lat0),this.con=1-this.es*this.sin_p20*this.sin_p20,this.com=Math.sqrt(1-i),this.bl=Math.sqrt(1+this.es*Math.pow(this.cos_p20,4)/(1-i)),this.al=this.a*this.bl*this.k0*this.com/this.con,Math.abs(this.lat0)0?this.lat0>=0?this.d+Math.sqrt(this.d*this.d-1):this.d-Math.sqrt(this.d*this.d-1):this.d,this.el=this.f*Math.pow(this.ts,this.bl)),0!=this.mode?(this.g=.5*(this.f-1/this.f),this.gama=Proj4js.common.asinz(Math.sin(this.alpha)/this.d),this.longc=this.longc-Proj4js.common.asinz(this.g*Math.tan(this.gama))/this.bl,this.con=Math.abs(this.lat0),this.con>Proj4js.common.EPSLN&&Math.abs(this.con-Proj4js.common.HALF_PI)>Proj4js.common.EPSLN?(this.singam=Math.sin(this.gama),this.cosgam=Math.cos(this.gama),this.sinaz=Math.sin(this.alpha),this.cosaz=Math.cos(this.alpha),this.u=this.lat0>=0?this.al/this.bl*Math.atan(Math.sqrt(this.d*this.d-1)/this.cosaz):-(this.al/this.bl)*Math.atan(Math.sqrt(this.d*this.d-1)/this.cosaz)):Proj4js.reportError("omerc:Init:DataError")):(this.sinphi=Math.sin(this.at1),this.ts1=Proj4js.common.tsfnz(this.e,this.lat1,this.sinphi),this.sinphi=Math.sin(this.lat2),this.ts2=Proj4js.common.tsfnz(this.e,this.lat2,this.sinphi),this.h=Math.pow(this.ts1,this.bl),this.l=Math.pow(this.ts2,this.bl),this.f=this.el/this.h,this.g=.5*(this.f-1/this.f),this.j=(this.el*this.el-this.l*this.h)/(this.el*this.el+this.l*this.h),this.p=(this.l-this.h)/(this.l+this.h),this.dlon=this.lon1-this.lon2,this.dlon<-Proj4js.common.PI&&(this.lon2=this.lon2-2*Proj4js.common.PI),this.dlon>Proj4js.common.PI&&(this.lon2=this.lon2+2*Proj4js.common.PI),this.dlon=this.lon1-this.lon2,this.longc=.5*(this.lon1+this.lon2)-Math.atan(this.j*Math.tan(.5*this.bl*this.dlon)/this.p)/this.bl,this.dlon=Proj4js.common.adjust_lon(this.lon1-this.longc),this.gama=Math.atan(Math.sin(this.bl*this.dlon)/this.g),this.alpha=Proj4js.common.asinz(this.d*Math.sin(this.gama)),Math.abs(this.lat1-this.lat2)<=Proj4js.common.EPSLN?Proj4js.reportError("omercInitDataError"):this.con=Math.abs(this.lat1),this.con<=Proj4js.common.EPSLN||Math.abs(this.con-Proj4js.common.HALF_PI)<=Proj4js.common.EPSLN?Proj4js.reportError("omercInitDataError"):Math.abs(Math.abs(this.lat0)-Proj4js.common.HALF_PI)<=Proj4js.common.EPSLN&&Proj4js.reportError("omercInitDataError"),this.singam=Math.sin(this.gam),this.cosgam=Math.cos(this.gam),this.sinaz=Math.sin(this.alpha),this.cosaz=Math.cos(this.alpha),this.u=this.lat0>=0?this.al/this.bl*Math.atan(Math.sqrt(this.d*this.d-1)/this.cosaz):-(this.al/this.bl)*Math.atan(Math.sqrt(this.d*this.d-1)/this.cosaz))},forward:function(t){var i,s,e,o,n,a,r,h,l,c,m,u=t.x,d=t.y;i=Math.sin(d),c=Proj4js.common.adjust_lon(u-this.longc),a=Math.sin(this.bl*c),Math.abs(Math.abs(d)-Proj4js.common.HALF_PI)>Proj4js.common.EPSLN?(m=Proj4js.common.tsfnz(this.e,d,i),o=this.el/Math.pow(m,this.bl),l=.5*(o-1/o),s=.5*(o+1/o),r=(l*this.singam-a*this.cosgam)/s,e=Math.cos(this.bl*c),1e-7>Math.abs(e)?n=this.al*this.bl*c:(n=this.al*Math.atan((l*this.cosgam+a*this.singam)/e)/this.bl,0>e&&(n+=Proj4js.common.PI*this.al/this.bl))):(r=d>=0?this.singam:-this.singam,n=this.al*d/this.bl),Math.abs(Math.abs(r)-1)<=Proj4js.common.EPSLN&&Proj4js.reportError("omercFwdInfinity"),h=.5*this.al*Math.log((1-r)/(1+r))/this.bl,n-=this.u;var p=this.x0+h*this.cosaz+n*this.sinaz,_=this.y0+n*this.cosaz-h*this.sinaz;return t.x=p,t.y=_,t},inverse:function(t){var i,s,e,o,n,a,r,h,l,c,m,u,d;return t.x-=this.x0,t.y-=this.y0,d=0,o=t.x*this.cosaz-t.y*this.sinaz,n=t.y*this.cosaz+t.x*this.sinaz,n+=this.u,a=Math.exp(-this.bl*o/this.al),r=.5*(a-1/a),s=.5*(a+1/a),l=Math.sin(this.bl*n/this.al),c=(l*this.cosgam+r*this.singam)/s,Math.abs(Math.abs(c)-1)<=Proj4js.common.EPSLN?(m=this.longc,u=c>=0?Proj4js.common.HALF_PI:-Proj4js.common.HALF_PI):(e=1/this.bl,h=Math.pow(this.el/Math.sqrt((1+c)/(1-c)),e),u=Proj4js.common.phi2z(this.e,h),i=this.longc-Math.atan2(r*this.cosgam-l*this.singam,e)/this.bl,m=Proj4js.common.adjust_lon(i)),t.x=m,t.y=u,t}},Proj4js.Proj.lcc={init:function(){if(this.lat2||(this.lat2=this.lat0),this.k0||(this.k0=1),Math.abs(this.lat1+this.lat2)Proj4js.common.EPSLN?Math.log(e/r)/Math.log(o/h):i,this.f0=e/(this.ns*Math.pow(o,this.ns)),this.rh=this.a*this.f0*Math.pow(l,this.ns),this.title||(this.title="Lambert Conformal Conic")},forward:function(t){var i=t.x,s=t.y;if(!(90>=s&&s>=-90&&180>=i&&i>=-180))return Proj4js.reportError("lcc:forward: llInputOutOfRange: "+i+" : "+s),null;var e,o,n=Math.abs(Math.abs(s)-Proj4js.common.HALF_PI);if(n>Proj4js.common.EPSLN)e=Proj4js.common.tsfnz(this.e,s,Math.sin(s)),o=this.a*this.f0*Math.pow(e,this.ns);else{if(n=s*this.ns,0>=n)return Proj4js.reportError("lcc:forward: No Projection"),null;o=0}var a=this.ns*Proj4js.common.adjust_lon(i-this.long0);return t.x=this.k0*o*Math.sin(a)+this.x0,t.y=this.k0*(this.rh-o*Math.cos(a))+this.y0,t},inverse:function(t){var i,s,e,o,n,a=(t.x-this.x0)/this.k0,r=this.rh-(t.y-this.y0)/this.k0;this.ns>0?(i=Math.sqrt(a*a+r*r),s=1):(i=-Math.sqrt(a*a+r*r),s=-1);var h=0;if(0!=i&&(h=Math.atan2(s*a,s*r)),0!=i||this.ns>0){if(s=1/this.ns,e=Math.pow(i/(this.a*this.f0),s),o=Proj4js.common.phi2z(this.e,e),-9999==o)return null}else o=-Proj4js.common.HALF_PI;return n=Proj4js.common.adjust_lon(h/this.ns+this.long0),t.x=n,t.y=o,t}},Proj4js.Proj.laea={S_POLE:1,N_POLE:2,EQUIT:3,OBLIQ:4,init:function(){var t=Math.abs(this.lat0);if(this.mode=Math.abs(t-Proj4js.common.HALF_PI)this.lat0?this.S_POLE:this.N_POLE:Math.abs(t)0){var i;switch(this.qp=Proj4js.common.qsfnz(this.e,1),this.mmf=.5/(1-this.es),this.apa=this.authset(this.es),this.mode){case this.N_POLE:case this.S_POLE:this.dd=1;break;case this.EQUIT:this.rq=Math.sqrt(.5*this.qp),this.dd=1/this.rq,this.xmf=1,this.ymf=.5*this.qp;break;case this.OBLIQ:this.rq=Math.sqrt(.5*this.qp),i=Math.sin(this.lat0),this.sinb1=Proj4js.common.qsfnz(this.e,i)/this.qp,this.cosb1=Math.sqrt(1-this.sinb1*this.sinb1),this.dd=Math.cos(this.lat0)/(Math.sqrt(1-this.es*i*i)*this.rq*this.cosb1),this.ymf=(this.xmf=this.rq)/this.dd,this.xmf*=this.dd}}else this.mode==this.OBLIQ&&(this.sinph0=Math.sin(this.lat0),this.cosph0=Math.cos(this.lat0))},forward:function(t){var i,s,e=t.x,o=t.y;if(e=Proj4js.common.adjust_lon(e-this.long0),this.sphere){var n,a,r;switch(r=Math.sin(o),a=Math.cos(o),n=Math.cos(e),this.mode){case this.OBLIQ:case this.EQUIT:if(s=this.mode==this.EQUIT?1+a*n:1+this.sinph0*r+this.cosph0*a*n,Proj4js.common.EPSLN>=s)return Proj4js.reportError("laea:fwd:y less than eps"),null;s=Math.sqrt(2/s),i=s*a*Math.sin(e),s*=this.mode==this.EQUIT?r:this.cosph0*r-this.sinph0*a*n;break;case this.N_POLE:n=-n;case this.S_POLE:if(Math.abs(o+this.phi0)=0?(i=(u=Math.sqrt(l))*h,s=n*(this.mode==this.S_POLE?u:-u)):i=s=0}}return t.x=this.a*i+this.x0,t.y=this.a*s+this.y0,t},inverse:function(t){t.x-=this.x0,t.y-=this.y0;var i,s,e=t.x/this.a,o=t.y/this.a;if(this.sphere){var n,a=0,r=0;if(n=Math.sqrt(e*e+o*o),s=.5*n,s>1)return Proj4js.reportError("laea:Inv:DataError"),null; +switch(s=2*Math.asin(s),(this.mode==this.OBLIQ||this.mode==this.EQUIT)&&(r=Math.sin(s),a=Math.cos(s)),this.mode){case this.EQUIT:s=Math.abs(n)<=Proj4js.common.EPSLN?0:Math.asin(o*r/n),e*=r,o=a*n;break;case this.OBLIQ:s=Math.abs(n)<=Proj4js.common.EPSLN?this.phi0:Math.asin(a*this.sinph0+o*r*this.cosph0/n),e*=r*this.cosph0,o=(a-Math.sin(s)*this.sinph0)*n;break;case this.N_POLE:o=-o,s=Proj4js.common.HALF_PI-s;break;case this.S_POLE:s-=Proj4js.common.HALF_PI}i=0!=o||this.mode!=this.EQUIT&&this.mode!=this.OBLIQ?Math.atan2(e,o):0}else{var h,l,c,m,u=0;switch(this.mode){case this.EQUIT:case this.OBLIQ:if(e/=this.dd,o*=this.dd,m=Math.sqrt(e*e+o*o),Proj4js.common.EPSLN>m)return t.x=0,t.y=this.phi0,t;l=2*Math.asin(.5*m/this.rq),h=Math.cos(l),e*=l=Math.sin(l),this.mode==this.OBLIQ?(u=h*this.sinb1+o*l*this.cosb1/m,c=this.qp*u,o=m*this.cosb1*h-o*this.sinb1*l):(u=o*l/m,c=this.qp*u,o=m*h);break;case this.N_POLE:o=-o;case this.S_POLE:if(c=e*e+o*o,!c)return t.x=0,t.y=this.phi0,t;u=1-c/this.qp,this.mode==this.S_POLE&&(u=-u)}i=Math.atan2(e,o),s=this.authlat(Math.asin(u),this.apa)}return t.x=Proj4js.common.adjust_lon(this.long0+i),t.y=s,t},P00:.3333333333333333,P01:.17222222222222222,P02:.10257936507936508,P10:.06388888888888888,P11:.0664021164021164,P20:.016415012942191543,authset:function(t){var i,s=[];return s[0]=t*this.P00,i=t*t,s[0]+=i*this.P01,s[1]=i*this.P10,i*=t,s[0]+=i*this.P02,s[1]+=i*this.P11,s[2]=i*this.P20,s},authlat:function(t,i){var s=t+t;return t+i[0]*Math.sin(s)+i[1]*Math.sin(s+s)+i[2]*Math.sin(s+s+s)}},Proj4js.Proj.aeqd={init:function(){this.sin_p12=Math.sin(this.lat0),this.cos_p12=Math.cos(this.lat0)},forward:function(t){var i=t.x;t.y;var s,e=Math.sin(t.y),o=Math.cos(t.y),n=Proj4js.common.adjust_lon(i-this.long0),a=Math.cos(n),r=this.sin_p12*e+this.cos_p12*o*a;if(Math.abs(Math.abs(r)-1)r)return Proj4js.reportError("aeqd:Fwd:PointError"),void 0}else{var h=Math.acos(r);s=h/Math.sin(h)}return t.x=this.x0+this.a*s*o*Math.sin(n),t.y=this.y0+this.a*s*(this.cos_p12*e-this.sin_p12*o*a),t},inverse:function(t){t.x-=this.x0,t.y-=this.y0;var i=Math.sqrt(t.x*t.x+t.y*t.y);if(i>2*Proj4js.common.HALF_PI*this.a)return Proj4js.reportError("aeqdInvDataError"),void 0;var s,e=i/this.a,o=Math.sin(e),n=Math.cos(e),a=this.long0;if(Math.abs(i)<=Proj4js.common.EPSLN)s=this.lat0;else{s=Proj4js.common.asinz(n*this.sin_p12+t.y*o*this.cos_p12/i);var r=Math.abs(this.lat0)-Proj4js.common.HALF_PI;Math.abs(r)<=Proj4js.common.EPSLN?a=this.lat0>=0?Proj4js.common.adjust_lon(this.long0+Math.atan2(t.x,-t.y)):Proj4js.common.adjust_lon(this.long0-Math.atan2(-t.x,t.y)):(r=n-this.sin_p12*Math.sin(s),Math.abs(r)=50&&Proj4js.reportError("moll:Fwd:IterationError")}o/=2,Proj4js.common.PI/2-Math.abs(s).999999999999&&(s=.999999999999);var i=Math.asin(s),e=Proj4js.common.adjust_lon(this.long0+t.x/(.900316316158*this.a*Math.cos(i)));-Proj4js.common.PI>e&&(e=-Proj4js.common.PI),e>Proj4js.common.PI&&(e=Proj4js.common.PI),s=(2*i+Math.sin(2*i))/Proj4js.common.PI,Math.abs(s)>1&&(s=1);var o=Math.asin(s);return t.x=e,t.y=o,t}},function(t,i,s){var e,o;typeof exports!=s+""?e=exports:(o=t.L,e={},e.noConflict=function(){return t.L=o,this},t.L=e),e.version="0.5.1",e.Util={extend:function(t){var i,s,e,o,n=Array.prototype.slice.call(arguments,1);for(s=0,e=n.length;e>s;s++){o=n[s]||{};for(i in o)o.hasOwnProperty(i)&&(t[i]=o[i])}return t},bind:function(t,i){var s=arguments.length>2?Array.prototype.slice.call(arguments,2):null;return function(){return t.apply(i,s||arguments)}},stamp:function(){var t=0,i="_leaflet_id";return function(s){return s[i]=s[i]||++t,s[i]}}(),limitExecByInterval:function(t,i,e){var o,n;return function a(){var r=arguments;return o?(n=!0,s):(o=!0,setTimeout(function(){o=!1,n&&(a.apply(e,r),n=!1)},i),t.apply(e,r),s)}},falseFn:function(){return!1},formatNum:function(t,i){var s=Math.pow(10,i||5);return Math.round(t*s)/s},splitWords:function(t){return t.replace(/^\s+|\s+$/g,"").split(/\s+/)},setOptions:function(t,i){return t.options=e.extend({},t.options,i),t.options},getParamString:function(t,i){var s=[];for(var e in t)t.hasOwnProperty(e)&&s.push(e+"="+t[e]);return(i&&-1!==i.indexOf("?")?"&":"?")+s.join("&")},template:function(t,i){return t.replace(/\{ *([\w_]+) *\}/g,function(t,s){var e=i[s];if(!i.hasOwnProperty(s))throw Error("No value provided for variable "+t);return e})},isArray:function(t){return"[object Array]"===Object.prototype.toString.call(t)},emptyImageUrl:"data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs="},function(){function i(i){var s,e,o=["webkit","moz","o","ms"];for(s=0;o.length>s&&!e;s++)e=t[o[s]+i];return e}function o(i){var s=+new Date,e=Math.max(0,16-(s-n));return n=s+e,t.setTimeout(i,e)}var n=0,a=t.requestAnimationFrame||i("RequestAnimationFrame")||o,r=t.cancelAnimationFrame||i("CancelAnimationFrame")||i("CancelRequestAnimationFrame")||function(i){t.clearTimeout(i)};e.Util.requestAnimFrame=function(i,n,r,h){return i=e.bind(i,n),r&&a===o?(i(),s):a.call(t,i,h)},e.Util.cancelAnimFrame=function(i){i&&r.call(t,i)}}(),e.extend=e.Util.extend,e.bind=e.Util.bind,e.stamp=e.Util.stamp,e.setOptions=e.Util.setOptions,e.Class=function(){},e.Class.extend=function(t){var i=function(){this.initialize&&this.initialize.apply(this,arguments),this._initHooks&&this.callInitHooks()},s=function(){};s.prototype=this.prototype;var o=new s;o.constructor=i,i.prototype=o;for(var n in this)this.hasOwnProperty(n)&&"prototype"!==n&&(i[n]=this[n]);t.statics&&(e.extend(i,t.statics),delete t.statics),t.includes&&(e.Util.extend.apply(null,[o].concat(t.includes)),delete t.includes),t.options&&o.options&&(t.options=e.extend({},o.options,t.options)),e.extend(o,t),o._initHooks=[];var a=this;return o.callInitHooks=function(){if(!this._initHooksCalled){a.prototype.callInitHooks&&a.prototype.callInitHooks.call(this),this._initHooksCalled=!0;for(var t=0,i=o._initHooks.length;i>t;t++)o._initHooks[t].call(this)}},i},e.Class.include=function(t){e.extend(this.prototype,t)},e.Class.mergeOptions=function(t){e.extend(this.prototype.options,t)},e.Class.addInitHook=function(t){var i=Array.prototype.slice.call(arguments,1),s="function"==typeof t?t:function(){this[t].apply(this,i)};this.prototype._initHooks=this.prototype._initHooks||[],this.prototype._initHooks.push(s)};var n="_leaflet_events";e.Mixin={},e.Mixin.Events={addEventListener:function(t,i,s){var o,a,r,h=this[n]=this[n]||{};if("object"==typeof t){for(o in t)t.hasOwnProperty(o)&&this.addEventListener(o,t[o],i);return this}for(t=e.Util.splitWords(t),a=0,r=t.length;r>a;a++)h[t[a]]=h[t[a]]||[],h[t[a]].push({action:i,context:s||this});return this},hasEventListeners:function(t){return n in this&&t in this[n]&&this[n][t].length>0},removeEventListener:function(t,i,s){var o,a,r,h,l,c=this[n];if("object"==typeof t){for(o in t)t.hasOwnProperty(o)&&this.removeEventListener(o,t[o],i);return this}for(t=e.Util.splitWords(t),a=0,r=t.length;r>a;a++)if(this.hasEventListeners(t[a]))for(h=c[t[a]],l=h.length-1;l>=0;l--)i&&h[l].action!==i||s&&h[l].context!==s||h.splice(l,1);return this},fireEvent:function(t,i){if(!this.hasEventListeners(t))return this;for(var s=e.extend({type:t,target:this},i),o=this[n][t].slice(),a=0,r=o.length;r>a;a++)o[a].action.call(o[a].context||this,s);return this}},e.Mixin.Events.on=e.Mixin.Events.addEventListener,e.Mixin.Events.off=e.Mixin.Events.removeEventListener,e.Mixin.Events.fire=e.Mixin.Events.fireEvent,function(){var o=!!t.ActiveXObject,n=o&&!t.XMLHttpRequest,a=o&&!i.querySelector,r=navigator.userAgent.toLowerCase(),h=-1!==r.indexOf("webkit"),l=-1!==r.indexOf("chrome"),c=-1!==r.indexOf("android"),m=-1!==r.search("android [23]"),u=typeof orientation!=s+"",d=t.navigator&&t.navigator.msPointerEnabled&&t.navigator.msMaxTouchPoints,p="devicePixelRatio"in t&&t.devicePixelRatio>1||"matchMedia"in t&&t.matchMedia("(min-resolution:144dpi)")&&t.matchMedia("(min-resolution:144dpi)").matches,_=i.documentElement,f=o&&"transition"in _.style,P="WebKitCSSMatrix"in t&&"m11"in new t.WebKitCSSMatrix,y="MozPerspective"in _.style,g="OTransition"in _.style,L=!t.L_DISABLE_3D&&(f||P||y||g),v=!t.L_NO_TOUCH&&function(){var t="ontouchstart";if(d||t in _)return!0;var s=i.createElement("div"),e=!1;return s.setAttribute?(s.setAttribute(t,"return;"),"function"==typeof s[t]&&(e=!0),s.removeAttribute(t),s=null,e):!1}();e.Browser={ie:o,ie6:n,ie7:a,webkit:h,android:c,android23:m,chrome:l,ie3d:f,webkit3d:P,gecko3d:y,opera3d:g,any3d:L,mobile:u,mobileWebkit:u&&h,mobileWebkit3d:u&&P,mobileOpera:u&&t.opera,touch:v,msTouch:d,retina:p}}(),e.Point=function(t,i,s){this.x=s?Math.round(t):t,this.y=s?Math.round(i):i},e.Point.prototype={clone:function(){return new e.Point(this.x,this.y)},add:function(t){return this.clone()._add(e.point(t))},_add:function(t){return this.x+=t.x,this.y+=t.y,this},subtract:function(t){return this.clone()._subtract(e.point(t))},_subtract:function(t){return this.x-=t.x,this.y-=t.y,this},divideBy:function(t){return this.clone()._divideBy(t)},_divideBy:function(t){return this.x/=t,this.y/=t,this},multiplyBy:function(t){return this.clone()._multiplyBy(t)},_multiplyBy:function(t){return this.x*=t,this.y*=t,this},round:function(){return this.clone()._round()},_round:function(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this},floor:function(){return this.clone()._floor()},_floor:function(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this},distanceTo:function(t){t=e.point(t);var i=t.x-this.x,s=t.y-this.y;return Math.sqrt(i*i+s*s)},equals:function(t){return t.x===this.x&&t.y===this.y},toString:function(){return"Point("+e.Util.formatNum(this.x)+", "+e.Util.formatNum(this.y)+")"}},e.point=function(t,i,s){return t instanceof e.Point?t:e.Util.isArray(t)?new e.Point(t[0],t[1]):isNaN(t)?t:new e.Point(t,i,s)},e.Bounds=function(t,i){if(t)for(var s=i?[t,i]:t,e=0,o=s.length;o>e;e++)this.extend(s[e])},e.Bounds.prototype={extend:function(t){return t=e.point(t),this.min||this.max?(this.min.x=Math.min(t.x,this.min.x),this.max.x=Math.max(t.x,this.max.x),this.min.y=Math.min(t.y,this.min.y),this.max.y=Math.max(t.y,this.max.y)):(this.min=t.clone(),this.max=t.clone()),this},getCenter:function(t){return new e.Point((this.min.x+this.max.x)/2,(this.min.y+this.max.y)/2,t)},getBottomLeft:function(){return new e.Point(this.min.x,this.max.y)},getTopRight:function(){return new e.Point(this.max.x,this.min.y)},getSize:function(){return this.max.subtract(this.min)},contains:function(t){var i,s;return t="number"==typeof t[0]||t instanceof e.Point?e.point(t):e.bounds(t),t instanceof e.Bounds?(i=t.min,s=t.max):i=s=t,i.x>=this.min.x&&s.x<=this.max.x&&i.y>=this.min.y&&s.y<=this.max.y},intersects:function(t){t=e.bounds(t);var i=this.min,s=this.max,o=t.min,n=t.max,a=n.x>=i.x&&o.x<=s.x,r=n.y>=i.y&&o.y<=s.y;return a&&r},isValid:function(){return!(!this.min||!this.max)}},e.bounds=function(t,i){return!t||t instanceof e.Bounds?t:new e.Bounds(t,i)},e.Transformation=function(t,i,s,e){this._a=t,this._b=i,this._c=s,this._d=e},e.Transformation.prototype={transform:function(t,i){return this._transform(t.clone(),i)},_transform:function(t,i){return i=i||1,t.x=i*(this._a*t.x+this._b),t.y=i*(this._c*t.y+this._d),t},untransform:function(t,i){return i=i||1,new e.Point((t.x/i-this._b)/this._a,(t.y/i-this._d)/this._c)}},e.DomUtil={get:function(t){return"string"==typeof t?i.getElementById(t):t},getStyle:function(t,s){var e=t.style[s];if(!e&&t.currentStyle&&(e=t.currentStyle[s]),(!e||"auto"===e)&&i.defaultView){var o=i.defaultView.getComputedStyle(t,null);e=o?o[s]:null}return"auto"===e?null:e},getViewportOffset:function(t){var s,o=0,n=0,a=t,r=i.body,h=e.Browser.ie7;do{if(o+=a.offsetTop||0,n+=a.offsetLeft||0,o+=parseInt(e.DomUtil.getStyle(a,"borderTopWidth"),10)||0,n+=parseInt(e.DomUtil.getStyle(a,"borderLeftWidth"),10)||0,s=e.DomUtil.getStyle(a,"position"),a.offsetParent===r&&"absolute"===s)break;if("fixed"===s){o+=r.scrollTop||0,n+=r.scrollLeft||0;break}a=a.offsetParent}while(a);a=t;do{if(a===r)break;o-=a.scrollTop||0,n-=a.scrollLeft||0,e.DomUtil.documentIsLtr()||!e.Browser.webkit&&!h||(n+=a.scrollWidth-a.clientWidth,h&&"hidden"!==e.DomUtil.getStyle(a,"overflow-y")&&"hidden"!==e.DomUtil.getStyle(a,"overflow")&&(n+=17)),a=a.parentNode}while(a);return new e.Point(n,o)},documentIsLtr:function(){return e.DomUtil._docIsLtrCached||(e.DomUtil._docIsLtrCached=!0,e.DomUtil._docIsLtr="ltr"===e.DomUtil.getStyle(i.body,"direction")),e.DomUtil._docIsLtr},create:function(t,s,e){var o=i.createElement(t);return o.className=s,e&&e.appendChild(o),o},disableTextSelection:function(){i.selection&&i.selection.empty&&i.selection.empty(),this._onselectstart||(this._onselectstart=i.onselectstart||null,i.onselectstart=e.Util.falseFn)},enableTextSelection:function(){i.onselectstart===e.Util.falseFn&&(i.onselectstart=this._onselectstart,this._onselectstart=null)},hasClass:function(t,i){return t.className.length>0&&RegExp("(^|\\s)"+i+"(\\s|$)").test(t.className)},addClass:function(t,i){e.DomUtil.hasClass(t,i)||(t.className+=(t.className?" ":"")+i)},removeClass:function(t,i){function s(t,s){return s===i?"":t}t.className=t.className.replace(/(\S+)\s*/g,s).replace(/(^\s+|\s+$)/,"")},setOpacity:function(t,i){if("opacity"in t.style)t.style.opacity=i;else if("filter"in t.style){var s=!1,e="DXImageTransform.Microsoft.Alpha";try{s=t.filters.item(e)}catch(o){}i=Math.round(100*i),s?(s.Enabled=100!==i,s.Opacity=i):t.style.filter+=" progid:"+e+"(opacity="+i+")"}},testProp:function(t){for(var s=i.documentElement.style,e=0;t.length>e;e++)if(t[e]in s)return t[e];return!1},getTranslateString:function(t){var i=e.Browser.webkit3d,s="translate"+(i?"3d":"")+"(",o=(i?",0":"")+")";return s+t.x+"px,"+t.y+"px"+o},getScaleString:function(t,i){var s=e.DomUtil.getTranslateString(i.add(i.multiplyBy(-1*t))),o=" scale("+t+") ";return s+o},setPosition:function(t,i,s){t._leaflet_pos=i,!s&&e.Browser.any3d?(t.style[e.DomUtil.TRANSFORM]=e.DomUtil.getTranslateString(i),e.Browser.mobileWebkit3d&&(t.style.WebkitBackfaceVisibility="hidden")):(t.style.left=i.x+"px",t.style.top=i.y+"px")},getPosition:function(t){return t._leaflet_pos}},e.DomUtil.TRANSFORM=e.DomUtil.testProp(["transform","WebkitTransform","OTransform","MozTransform","msTransform"]),e.DomUtil.TRANSITION=e.DomUtil.testProp(["webkitTransition","transition","OTransition","MozTransition","msTransition"]),e.DomUtil.TRANSITION_END="webkitTransition"===e.DomUtil.TRANSITION||"OTransition"===e.DomUtil.TRANSITION?e.DomUtil.TRANSITION+"End":"transitionend",e.LatLng=function(t,i){var s=parseFloat(t),e=parseFloat(i);if(isNaN(s)||isNaN(e))throw Error("Invalid LatLng object: ("+t+", "+i+")");this.lat=s,this.lng=e},e.extend(e.LatLng,{DEG_TO_RAD:Math.PI/180,RAD_TO_DEG:180/Math.PI,MAX_MARGIN:1e-9}),e.LatLng.prototype={equals:function(t){if(!t)return!1;t=e.latLng(t);var i=Math.max(Math.abs(this.lat-t.lat),Math.abs(this.lng-t.lng));return e.LatLng.MAX_MARGIN>=i},toString:function(t){return"LatLng("+e.Util.formatNum(this.lat,t)+", "+e.Util.formatNum(this.lng,t)+")"},distanceTo:function(t){t=e.latLng(t);var i=6378137,s=e.LatLng.DEG_TO_RAD,o=(t.lat-this.lat)*s,n=(t.lng-this.lng)*s,a=this.lat*s,r=t.lat*s,h=Math.sin(o/2),l=Math.sin(n/2),c=h*h+l*l*Math.cos(a)*Math.cos(r);return 2*i*Math.atan2(Math.sqrt(c),Math.sqrt(1-c))},wrap:function(t,i){var s=this.lng;return t=t||-180,i=i||180,s=(s+i)%(i-t)+(t>s||s===i?i:t),new e.LatLng(this.lat,s)}},e.latLng=function(t,i){return t instanceof e.LatLng?t:e.Util.isArray(t)?new e.LatLng(t[0],t[1]):isNaN(t)?t:new e.LatLng(t,i)},e.LatLngBounds=function(t,i){if(t)for(var s=i?[t,i]:t,e=0,o=s.length;o>e;e++)this.extend(s[e])},e.LatLngBounds.prototype={extend:function(t){return t="number"==typeof t[0]||"string"==typeof t[0]||t instanceof e.LatLng?e.latLng(t):e.latLngBounds(t),t instanceof e.LatLng?this._southWest||this._northEast?(this._southWest.lat=Math.min(t.lat,this._southWest.lat),this._southWest.lng=Math.min(t.lng,this._southWest.lng),this._northEast.lat=Math.max(t.lat,this._northEast.lat),this._northEast.lng=Math.max(t.lng,this._northEast.lng)):(this._southWest=new e.LatLng(t.lat,t.lng),this._northEast=new e.LatLng(t.lat,t.lng)):t instanceof e.LatLngBounds&&(this.extend(t._southWest),this.extend(t._northEast)),this},pad:function(t){var i=this._southWest,s=this._northEast,o=Math.abs(i.lat-s.lat)*t,n=Math.abs(i.lng-s.lng)*t;return new e.LatLngBounds(new e.LatLng(i.lat-o,i.lng-n),new e.LatLng(s.lat+o,s.lng+n))},getCenter:function(){return new e.LatLng((this._southWest.lat+this._northEast.lat)/2,(this._southWest.lng+this._northEast.lng)/2)},getSouthWest:function(){return this._southWest},getNorthEast:function(){return this._northEast},getNorthWest:function(){return new e.LatLng(this._northEast.lat,this._southWest.lng)},getSouthEast:function(){return new e.LatLng(this._southWest.lat,this._northEast.lng)},contains:function(t){t="number"==typeof t[0]||t instanceof e.LatLng?e.latLng(t):e.latLngBounds(t);var i,s,o=this._southWest,n=this._northEast;return t instanceof e.LatLngBounds?(i=t.getSouthWest(),s=t.getNorthEast()):i=s=t,i.lat>=o.lat&&s.lat<=n.lat&&i.lng>=o.lng&&s.lng<=n.lng},intersects:function(t){t=e.latLngBounds(t);var i=this._southWest,s=this._northEast,o=t.getSouthWest(),n=t.getNorthEast(),a=n.lat>=i.lat&&o.lat<=s.lat,r=n.lng>=i.lng&&o.lng<=s.lng;return a&&r},toBBoxString:function(){var t=this._southWest,i=this._northEast;return[t.lng,t.lat,i.lng,i.lat].join(",")},equals:function(t){return t?(t=e.latLngBounds(t),this._southWest.equals(t.getSouthWest())&&this._northEast.equals(t.getNorthEast())):!1},isValid:function(){return!(!this._southWest||!this._northEast)}},e.latLngBounds=function(t,i){return!t||t instanceof e.LatLngBounds?t:new e.LatLngBounds(t,i)},e.Projection={},e.Projection.SphericalMercator={MAX_LATITUDE:85.0511287798,project:function(t){var i=e.LatLng.DEG_TO_RAD,s=this.MAX_LATITUDE,o=Math.max(Math.min(s,t.lat),-s),n=t.lng*i,a=o*i;return a=Math.log(Math.tan(Math.PI/4+a/2)),new e.Point(n,a)},unproject:function(t){var i=e.LatLng.RAD_TO_DEG,s=t.x*i,o=(2*Math.atan(Math.exp(t.y))-Math.PI/2)*i;return new e.LatLng(o,s)}},e.Projection.LonLat={project:function(t){return new e.Point(t.lng,t.lat)},unproject:function(t){return new e.LatLng(t.y,t.x)}},e.CRS={latLngToPoint:function(t,i){var s=this.projection.project(t),e=this.scale(i);return this.transformation._transform(s,e)},pointToLatLng:function(t,i){var s=this.scale(i),e=this.transformation.untransform(t,s);return this.projection.unproject(e)},project:function(t){return this.projection.project(t)},scale:function(t){return 256*Math.pow(2,t)}},e.CRS.Simple=e.extend({},e.CRS,{projection:e.Projection.LonLat,transformation:new e.Transformation(1,0,-1,0),scale:function(t){return Math.pow(2,t)}}),e.CRS.EPSG3857=e.extend({},e.CRS,{code:"EPSG:3857",projection:e.Projection.SphericalMercator,transformation:new e.Transformation(.5/Math.PI,.5,-.5/Math.PI,.5),project:function(t){var i=this.projection.project(t),s=6378137;return i.multiplyBy(s)}}),e.CRS.EPSG900913=e.extend({},e.CRS.EPSG3857,{code:"EPSG:900913"}),e.CRS.EPSG4326=e.extend({},e.CRS,{code:"EPSG:4326",projection:e.Projection.LonLat,transformation:new e.Transformation(1/360,.5,-1/360,.5)}),e.Map=e.Class.extend({includes:e.Mixin.Events,options:{crs:e.CRS.EPSG3857,fadeAnimation:e.DomUtil.TRANSITION&&!e.Browser.android23,trackResize:!0,markerZoomAnimation:e.DomUtil.TRANSITION&&e.Browser.any3d},initialize:function(t,i){i=e.setOptions(this,i),this._initContainer(t),this._initLayout(),this.callInitHooks(),this._initEvents(),i.maxBounds&&this.setMaxBounds(i.maxBounds),i.center&&i.zoom!==s&&this.setView(e.latLng(i.center),i.zoom,!0),this._initLayers(i.layers)},setView:function(t,i){return this._resetView(e.latLng(t),this._limitZoom(i)),this},setZoom:function(t){return this.setView(this.getCenter(),t)},zoomIn:function(t){return this.setZoom(this._zoom+(t||1))},zoomOut:function(t){return this.setZoom(this._zoom-(t||1))},fitBounds:function(t){var i=this.getBoundsZoom(t);return this.setView(e.latLngBounds(t).getCenter(),i)},fitWorld:function(){var t=new e.LatLng(-60,-170),i=new e.LatLng(85,179);return this.fitBounds(new e.LatLngBounds(t,i))},panTo:function(t){return this.setView(t,this._zoom)},panBy:function(t){return this.fire("movestart"),this._rawPanBy(e.point(t)),this.fire("move"),this.fire("moveend")},setMaxBounds:function(t){if(t=e.latLngBounds(t),this.options.maxBounds=t,!t)return this._boundsMinZoom=null,this;var i=this.getBoundsZoom(t,!0);return this._boundsMinZoom=i,this._loaded&&(i>this._zoom?this.setView(t.getCenter(),i):this.panInsideBounds(t)),this},panInsideBounds:function(t){t=e.latLngBounds(t);var i=this.getBounds(),s=this.project(i.getSouthWest()),o=this.project(i.getNorthEast()),n=this.project(t.getSouthWest()),a=this.project(t.getNorthEast()),r=0,h=0;return o.ya.x&&(r=a.x-o.x),s.y>n.y&&(h=n.y-s.y),s.x=r);return m&&i?null:i?r:r-1},getSize:function(){return(!this._size||this._sizeChanged)&&(this._size=new e.Point(this._container.clientWidth,this._container.clientHeight),this._sizeChanged=!1),this._size.clone()},getPixelBounds:function(){var t=this._getTopLeftPoint();return new e.Bounds(t,t.add(this.getSize()))},getPixelOrigin:function(){return this._initialTopLeftPoint},getPanes:function(){return this._panes},getContainer:function(){return this._container},getZoomScale:function(t){var i=this.options.crs;return i.scale(t)/i.scale(this._zoom)},getScaleZoom:function(t){return this._zoom+Math.log(t)/Math.LN2},project:function(t,i){return i=i===s?this._zoom:i,this.options.crs.latLngToPoint(e.latLng(t),i)},unproject:function(t,i){return i=i===s?this._zoom:i,this.options.crs.pointToLatLng(e.point(t),i)},layerPointToLatLng:function(t){var i=e.point(t).add(this._initialTopLeftPoint);return this.unproject(i)},latLngToLayerPoint:function(t){var i=this.project(e.latLng(t))._round();return i._subtract(this._initialTopLeftPoint)},containerPointToLayerPoint:function(t){return e.point(t).subtract(this._getMapPanePos())},layerPointToContainerPoint:function(t){return e.point(t).add(this._getMapPanePos())},containerPointToLatLng:function(t){var i=this.containerPointToLayerPoint(e.point(t));return this.layerPointToLatLng(i)},latLngToContainerPoint:function(t){return this.layerPointToContainerPoint(this.latLngToLayerPoint(e.latLng(t)))},mouseEventToContainerPoint:function(t){return e.DomEvent.getMousePosition(t,this._container)},mouseEventToLayerPoint:function(t){return this.containerPointToLayerPoint(this.mouseEventToContainerPoint(t))},mouseEventToLatLng:function(t){return this.layerPointToLatLng(this.mouseEventToLayerPoint(t))},_initContainer:function(t){var i=this._container=e.DomUtil.get(t);if(i._leaflet)throw Error("Map container is already initialized.");i._leaflet=!0},_initLayout:function(){var t=this._container;e.DomUtil.addClass(t,"leaflet-container"),e.Browser.touch&&e.DomUtil.addClass(t,"leaflet-touch"),this.options.fadeAnimation&&e.DomUtil.addClass(t,"leaflet-fade-anim");var i=e.DomUtil.getStyle(t,"position");"absolute"!==i&&"relative"!==i&&"fixed"!==i&&(t.style.position="relative"),this._initPanes(),this._initControlPos&&this._initControlPos()},_initPanes:function(){var t=this._panes={};this._mapPane=t.mapPane=this._createPane("leaflet-map-pane",this._container),this._tilePane=t.tilePane=this._createPane("leaflet-tile-pane",this._mapPane),t.objectsPane=this._createPane("leaflet-objects-pane",this._mapPane),t.shadowPane=this._createPane("leaflet-shadow-pane"),t.overlayPane=this._createPane("leaflet-overlay-pane"),t.markerPane=this._createPane("leaflet-marker-pane"),t.popupPane=this._createPane("leaflet-popup-pane");var i=" leaflet-zoom-hide";this.options.markerZoomAnimation||(e.DomUtil.addClass(t.markerPane,i),e.DomUtil.addClass(t.shadowPane,i),e.DomUtil.addClass(t.popupPane,i))},_createPane:function(t,i){return e.DomUtil.create("div",t,i||this._panes.objectsPane)},_initLayers:function(t){t=t?e.Util.isArray(t)?t:[t]:[],this._layers={},this._zoomBoundLayers={},this._tileLayersNum=0;var i,s;for(i=0,s=t.length;s>i;i++)this.addLayer(t[i])},_resetView:function(t,i,s,o){var n=this._zoom!==i;o||(this.fire("movestart"),n&&this.fire("zoomstart")),this._zoom=i,this._initialTopLeftPoint=this._getNewTopLeftPoint(t),s?this._initialTopLeftPoint._add(this._getMapPanePos()):e.DomUtil.setPosition(this._mapPane,new e.Point(0,0)),this._tileLayersToLoad=this._tileLayersNum;var a=!this._loaded;this._loaded=!0,this.fire("viewreset",{hard:!s}),this.fire("move"),(n||o)&&this.fire("zoomend"),this.fire("moveend",{hard:!s}),a&&this.fire("load")},_rawPanBy:function(t){e.DomUtil.setPosition(this._mapPane,this._getMapPanePos().subtract(t))},_updateZoomLevels:function(){var t,i=1/0,e=-1/0;for(t in this._zoomBoundLayers)if(this._zoomBoundLayers.hasOwnProperty(t)){var o=this._zoomBoundLayers[t];isNaN(o.options.minZoom)||(i=Math.min(i,o.options.minZoom)),isNaN(o.options.maxZoom)||(e=Math.max(e,o.options.maxZoom))}t===s?this._layersMaxZoom=this._layersMinZoom=s:(this._layersMaxZoom=e,this._layersMinZoom=i)},_initEvents:function(){if(e.DomEvent){e.DomEvent.on(this._container,"click",this._onMouseClick,this);var i,s,o=["dblclick","mousedown","mouseup","mouseenter","mouseleave","mousemove","contextmenu"];for(i=0,s=o.length;s>i;i++)e.DomEvent.on(this._container,o[i],this._fireMouseEvent,this);this.options.trackResize&&e.DomEvent.on(t,"resize",this._onResize,this)}},_onResize:function(){e.Util.cancelAnimFrame(this._resizeRequest),this._resizeRequest=e.Util.requestAnimFrame(this.invalidateSize,this,!1,this._container)},_onMouseClick:function(t){!this._loaded||this.dragging&&this.dragging.moved()||(this.fire("preclick"),this._fireMouseEvent(t))},_fireMouseEvent:function(t){if(this._loaded){var i=t.type;if(i="mouseenter"===i?"mouseover":"mouseleave"===i?"mouseout":i,this.hasEventListeners(i)){"contextmenu"===i&&e.DomEvent.preventDefault(t);var s=this.mouseEventToContainerPoint(t),o=this.containerPointToLayerPoint(s),n=this.layerPointToLatLng(o);this.fire(i,{latlng:n,layerPoint:o,containerPoint:s,originalEvent:t})}}},_onTileLayerLoad:function(){this._tileLayersToLoad--,this._tileLayersNum&&!this._tileLayersToLoad&&this._tileBg&&(clearTimeout(this._clearTileBgTimer),this._clearTileBgTimer=setTimeout(e.bind(this._clearTileBg,this),500))},whenReady:function(t,i){return this._loaded?t.call(i||this,this):this.on("load",t,i),this},_getMapPanePos:function(){return e.DomUtil.getPosition(this._mapPane)},_getTopLeftPoint:function(){if(!this._loaded)throw Error("Set map center and zoom first.");return this._initialTopLeftPoint.subtract(this._getMapPanePos())},_getNewTopLeftPoint:function(t,i){var s=this.getSize()._divideBy(2);return this.project(t,i)._subtract(s)._round()},_latLngToNewLayerPoint:function(t,i,s){var e=this._getNewTopLeftPoint(s,i).add(this._getMapPanePos());return this.project(t,i)._subtract(e)},_getCenterLayerPoint:function(){return this.containerPointToLayerPoint(this.getSize()._divideBy(2))},_getCenterOffset:function(t){return this.latLngToLayerPoint(t).subtract(this._getCenterLayerPoint())},_limitZoom:function(t){var i=this.getMinZoom(),s=this.getMaxZoom();return Math.max(i,Math.min(s,t))}}),e.map=function(t,i){return new e.Map(t,i)},e.Projection.Mercator={MAX_LATITUDE:85.0840591556,R_MINOR:6356752.3142,R_MAJOR:6378137,project:function(t){var i=e.LatLng.DEG_TO_RAD,s=this.MAX_LATITUDE,o=Math.max(Math.min(s,t.lat),-s),n=this.R_MAJOR,a=this.R_MINOR,r=t.lng*i*n,h=o*i,l=a/n,c=Math.sqrt(1-l*l),m=c*Math.sin(h);m=Math.pow((1-m)/(1+m),.5*c);var u=Math.tan(.5*(.5*Math.PI-h))/m;return h=-a*Math.log(u),new e.Point(r,h)},unproject:function(t){for(var i,s=e.LatLng.RAD_TO_DEG,o=this.R_MAJOR,n=this.R_MINOR,a=t.x*s/o,r=n/o,h=Math.sqrt(1-r*r),l=Math.exp(-t.y/n),c=Math.PI/2-2*Math.atan(l),m=15,u=1e-7,d=m,p=.1;Math.abs(p)>u&&--d>0;)i=h*Math.sin(c),p=Math.PI/2-2*Math.atan(l*Math.pow((1-i)/(1+i),.5*h))-c,c+=p;return new e.LatLng(c*s,a)}},e.CRS.EPSG3395=e.extend({},e.CRS,{code:"EPSG:3395",projection:e.Projection.Mercator,transformation:function(){var t=e.Projection.Mercator,i=t.R_MAJOR,s=t.R_MINOR;return new e.Transformation(.5/(Math.PI*i),.5,-.5/(Math.PI*s),.5)}()}),e.TileLayer=e.Class.extend({includes:e.Mixin.Events,options:{minZoom:0,maxZoom:18,tileSize:256,subdomains:"abc",errorTileUrl:"",attribution:"",zoomOffset:0,opacity:1,unloadInvisibleTiles:e.Browser.mobile,updateWhenIdle:e.Browser.mobile},initialize:function(t,i){i=e.setOptions(this,i),i.detectRetina&&e.Browser.retina&&i.maxZoom>0&&(i.tileSize=Math.floor(i.tileSize/2),i.zoomOffset++,i.minZoom>0&&i.minZoom--,this.options.maxZoom--),this._url=t;var s=this.options.subdomains;"string"==typeof s&&(this.options.subdomains=s.split(""))},onAdd:function(t){this._map=t,this._initContainer(),this._createTileProto(),t.on({viewreset:this._resetCallback,moveend:this._update},this),this.options.updateWhenIdle||(this._limitedUpdate=e.Util.limitExecByInterval(this._update,150,this),t.on("move",this._limitedUpdate,this)),this._reset(),this._update()},addTo:function(t){return t.addLayer(this),this},onRemove:function(t){this._container.parentNode.removeChild(this._container),t.off({viewreset:this._resetCallback,moveend:this._update},this),this.options.updateWhenIdle||t.off("move",this._limitedUpdate,this),this._container=null,this._map=null +},bringToFront:function(){var t=this._map._panes.tilePane;return this._container&&(t.appendChild(this._container),this._setAutoZIndex(t,Math.max)),this},bringToBack:function(){var t=this._map._panes.tilePane;return this._container&&(t.insertBefore(this._container,t.firstChild),this._setAutoZIndex(t,Math.min)),this},getAttribution:function(){return this.options.attribution},setOpacity:function(t){return this.options.opacity=t,this._map&&this._updateOpacity(),this},setZIndex:function(t){return this.options.zIndex=t,this._updateZIndex(),this},setUrl:function(t,i){return this._url=t,i||this.redraw(),this},redraw:function(){return this._map&&(this._map._panes.tilePane.empty=!1,this._reset(!0),this._update()),this},_updateZIndex:function(){this._container&&this.options.zIndex!==s&&(this._container.style.zIndex=this.options.zIndex)},_setAutoZIndex:function(t,i){var s,e,o,n=t.children,a=-i(1/0,-1/0);for(e=0,o=n.length;o>e;e++)n[e]!==this._container&&(s=parseInt(n[e].style.zIndex,10),isNaN(s)||(a=i(a,s)));this.options.zIndex=this._container.style.zIndex=(isFinite(a)?a:0)+i(1,-1)},_updateOpacity:function(){e.DomUtil.setOpacity(this._container,this.options.opacity);var t,i=this._tiles;if(e.Browser.webkit)for(t in i)i.hasOwnProperty(t)&&(i[t].style.webkitTransform+=" translate(0,0)")},_initContainer:function(){var t=this._map._panes.tilePane;(!this._container||t.empty)&&(this._container=e.DomUtil.create("div","leaflet-layer"),this._updateZIndex(),t.appendChild(this._container),1>this.options.opacity&&this._updateOpacity())},_resetCallback:function(t){this._reset(t.hard)},_reset:function(t){var i=this._tiles;for(var s in i)i.hasOwnProperty(s)&&this.fire("tileunload",{tile:i[s]});this._tiles={},this._tilesToLoad=0,this.options.reuseTiles&&(this._unusedTiles=[]),t&&this._container&&(this._container.innerHTML=""),this._initContainer()},_update:function(){if(this._map){var t=this._map.getPixelBounds(),i=this._map.getZoom(),s=this.options.tileSize;if(!(i>this.options.maxZoom||this.options.minZoom>i)){var o=new e.Point(Math.floor(t.min.x/s),Math.floor(t.min.y/s)),n=new e.Point(Math.floor(t.max.x/s),Math.floor(t.max.y/s)),a=new e.Bounds(o,n);this._addTilesFromCenterOut(a),(this.options.unloadInvisibleTiles||this.options.reuseTiles)&&this._removeOtherTiles(a)}}},_addTilesFromCenterOut:function(t){var s,o,n,a=[],r=t.getCenter();for(s=t.min.y;t.max.y>=s;s++)for(o=t.min.x;t.max.x>=o;o++)n=new e.Point(o,s),this._tileShouldBeLoaded(n)&&a.push(n);var h=a.length;if(0!==h){a.sort(function(t,i){return t.distanceTo(r)-i.distanceTo(r)});var l=i.createDocumentFragment();for(this._tilesToLoad||this.fire("loading"),this._tilesToLoad+=h,o=0;h>o;o++)this._addTile(a[o],l);this._container.appendChild(l)}},_tileShouldBeLoaded:function(t){if(t.x+":"+t.y in this._tiles)return!1;if(!this.options.continuousWorld){var i=this._getWrapTileNum();if(this.options.noWrap&&(0>t.x||t.x>=i)||0>t.y||t.y>=i)return!1}return!0},_removeOtherTiles:function(t){var i,s,e,o;for(o in this._tiles)this._tiles.hasOwnProperty(o)&&(i=o.split(":"),s=parseInt(i[0],10),e=parseInt(i[1],10),(t.min.x>s||s>t.max.x||t.min.y>e||e>t.max.y)&&this._removeTile(o))},_removeTile:function(t){var i=this._tiles[t];this.fire("tileunload",{tile:i,url:i.src}),this.options.reuseTiles?(e.DomUtil.removeClass(i,"leaflet-tile-loaded"),this._unusedTiles.push(i)):i.parentNode===this._container&&this._container.removeChild(i),e.Browser.android||(i.src=e.Util.emptyImageUrl),delete this._tiles[t]},_addTile:function(t,i){var s=this._getTilePos(t),o=this._getTile();e.DomUtil.setPosition(o,s,e.Browser.chrome||e.Browser.android23),this._tiles[t.x+":"+t.y]=o,this._loadTile(o,t),o.parentNode!==this._container&&i.appendChild(o)},_getZoomForUrl:function(){var t=this.options,i=this._map.getZoom();return t.zoomReverse&&(i=t.maxZoom-i),i+t.zoomOffset},_getTilePos:function(t){var i=this._map.getPixelOrigin(),s=this.options.tileSize;return t.multiplyBy(s).subtract(i)},getTileUrl:function(t){return this._adjustTilePoint(t),e.Util.template(this._url,e.extend({s:this._getSubdomain(t),z:this._getZoomForUrl(),x:t.x,y:t.y},this.options))},_getWrapTileNum:function(){return Math.pow(2,this._getZoomForUrl())},_adjustTilePoint:function(t){var i=this._getWrapTileNum();this.options.continuousWorld||this.options.noWrap||(t.x=(t.x%i+i)%i),this.options.tms&&(t.y=i-t.y-1)},_getSubdomain:function(t){var i=(t.x+t.y)%this.options.subdomains.length;return this.options.subdomains[i]},_createTileProto:function(){var t=this._tileImg=e.DomUtil.create("img","leaflet-tile");t.style.width=t.style.height=this.options.tileSize+"px",t.galleryimg="no"},_getTile:function(){if(this.options.reuseTiles&&this._unusedTiles.length>0){var t=this._unusedTiles.pop();return this._resetTile(t),t}return this._createTile()},_resetTile:function(){},_createTile:function(){var t=this._tileImg.cloneNode(!1);return t.onselectstart=t.onmousemove=e.Util.falseFn,t},_loadTile:function(t,i){t._layer=this,t.onload=this._tileOnLoad,t.onerror=this._tileOnError,t.src=this.getTileUrl(i)},_tileLoaded:function(){this._tilesToLoad--,this._tilesToLoad||this.fire("load")},_tileOnLoad:function(){var t=this._layer;this.src!==e.Util.emptyImageUrl&&(e.DomUtil.addClass(this,"leaflet-tile-loaded"),t.fire("tileload",{tile:this,url:this.src})),t._tileLoaded()},_tileOnError:function(){var t=this._layer;t.fire("tileerror",{tile:this,url:this.src});var i=t.options.errorTileUrl;i&&(this.src=i),t._tileLoaded()}}),e.tileLayer=function(t,i){return new e.TileLayer(t,i)},e.TileLayer.WMS=e.TileLayer.extend({defaultWmsParams:{service:"WMS",request:"GetMap",version:"1.1.1",layers:"",styles:"",format:"image/jpeg",transparent:!1},initialize:function(t,i){this._url=t;var s=e.extend({},this.defaultWmsParams);s.width=s.height=i.detectRetina&&e.Browser.retina?2*this.options.tileSize:this.options.tileSize;for(var o in i)this.options.hasOwnProperty(o)||(s[o]=i[o]);this.wmsParams=s,e.setOptions(this,i)},onAdd:function(t){var i=parseFloat(this.wmsParams.version)>=1.3?"crs":"srs";this.wmsParams[i]=t.options.crs.code,e.TileLayer.prototype.onAdd.call(this,t)},getTileUrl:function(t,i){this._adjustTilePoint(t);var s=this._map,o=s.options.crs,n=this.options.tileSize,a=t.multiplyBy(n),r=a.add(new e.Point(n,n)),h=o.project(s.unproject(a,i)),l=o.project(s.unproject(r,i)),c=[h.x,l.y,l.x,h.y].join(","),m=e.Util.template(this._url,{s:this._getSubdomain(t)});return m+e.Util.getParamString(this.wmsParams,m)+"&bbox="+c},setParams:function(t,i){return e.extend(this.wmsParams,t),i||this.redraw(),this}}),e.tileLayer.wms=function(t,i){return new e.TileLayer.WMS(t,i)},e.TileLayer.Canvas=e.TileLayer.extend({options:{async:!1},initialize:function(t){e.setOptions(this,t)},redraw:function(){var t=this._tiles;for(var i in t)t.hasOwnProperty(i)&&this._redrawTile(t[i])},_redrawTile:function(t){this.drawTile(t,t._tilePoint,this._map._zoom)},_createTileProto:function(){var t=this._canvasProto=e.DomUtil.create("canvas","leaflet-tile");t.width=t.height=this.options.tileSize},_createTile:function(){var t=this._canvasProto.cloneNode(!1);return t.onselectstart=t.onmousemove=e.Util.falseFn,t},_loadTile:function(t,i){t._layer=this,t._tilePoint=i,this._redrawTile(t),this.options.async||this.tileDrawn(t)},drawTile:function(){},tileDrawn:function(t){this._tileOnLoad.call(t)}}),e.tileLayer.canvas=function(t){return new e.TileLayer.Canvas(t)},e.ImageOverlay=e.Class.extend({includes:e.Mixin.Events,options:{opacity:1},initialize:function(t,i,s){this._url=t,this._bounds=e.latLngBounds(i),e.setOptions(this,s)},onAdd:function(t){this._map=t,this._image||this._initImage(),t._panes.overlayPane.appendChild(this._image),t.on("viewreset",this._reset,this),t.options.zoomAnimation&&e.Browser.any3d&&t.on("zoomanim",this._animateZoom,this),this._reset()},onRemove:function(t){t.getPanes().overlayPane.removeChild(this._image),t.off("viewreset",this._reset,this),t.options.zoomAnimation&&t.off("zoomanim",this._animateZoom,this)},addTo:function(t){return t.addLayer(this),this},setOpacity:function(t){return this.options.opacity=t,this._updateOpacity(),this},bringToFront:function(){return this._image&&this._map._panes.overlayPane.appendChild(this._image),this},bringToBack:function(){var t=this._map._panes.overlayPane;return this._image&&t.insertBefore(this._image,t.firstChild),this},_initImage:function(){this._image=e.DomUtil.create("img","leaflet-image-layer"),this._map.options.zoomAnimation&&e.Browser.any3d?e.DomUtil.addClass(this._image,"leaflet-zoom-animated"):e.DomUtil.addClass(this._image,"leaflet-zoom-hide"),this._updateOpacity(),e.extend(this._image,{galleryimg:"no",onselectstart:e.Util.falseFn,onmousemove:e.Util.falseFn,onload:e.bind(this._onImageLoad,this),src:this._url})},_animateZoom:function(t){var i=this._map,s=this._image,o=i.getZoomScale(t.zoom),n=this._bounds.getNorthWest(),a=this._bounds.getSouthEast(),r=i._latLngToNewLayerPoint(n,t.zoom,t.center),h=i._latLngToNewLayerPoint(a,t.zoom,t.center)._subtract(r),l=r._add(h._multiplyBy(.5*(1-1/o)));s.style[e.DomUtil.TRANSFORM]=e.DomUtil.getTranslateString(l)+" scale("+o+") "},_reset:function(){var t=this._image,i=this._map.latLngToLayerPoint(this._bounds.getNorthWest()),s=this._map.latLngToLayerPoint(this._bounds.getSouthEast())._subtract(i);e.DomUtil.setPosition(t,i),t.style.width=s.x+"px",t.style.height=s.y+"px"},_onImageLoad:function(){this.fire("load")},_updateOpacity:function(){e.DomUtil.setOpacity(this._image,this.options.opacity)}}),e.imageOverlay=function(t,i,s){return new e.ImageOverlay(t,i,s)},e.Icon=e.Class.extend({options:{className:""},initialize:function(t){e.setOptions(this,t)},createIcon:function(){return this._createIcon("icon")},createShadow:function(){return this._createIcon("shadow")},_createIcon:function(t){var i=this._getIconUrl(t);if(!i){if("icon"===t)throw Error("iconUrl not set in Icon options (see the docs).");return null}var s=this._createImg(i);return this._setIconStyles(s,t),s},_setIconStyles:function(t,i){var s,o=this.options,n=e.point(o[i+"Size"]);s="shadow"===i?e.point(o.shadowAnchor||o.iconAnchor):e.point(o.iconAnchor),!s&&n&&(s=n.divideBy(2,!0)),t.className="leaflet-marker-"+i+" "+o.className,s&&(t.style.marginLeft=-s.x+"px",t.style.marginTop=-s.y+"px"),n&&(t.style.width=n.x+"px",t.style.height=n.y+"px")},_createImg:function(t){var s;return e.Browser.ie6?(s=i.createElement("div"),s.style.filter='progid:DXImageTransform.Microsoft.AlphaImageLoader(src="'+t+'")'):(s=i.createElement("img"),s.src=t),s},_getIconUrl:function(t){return e.Browser.retina&&this.options[t+"RetinaUrl"]?this.options[t+"RetinaUrl"]:this.options[t+"Url"]}}),e.icon=function(t){return new e.Icon(t)},e.Icon.Default=e.Icon.extend({options:{iconSize:new e.Point(25,41),iconAnchor:new e.Point(12,41),popupAnchor:new e.Point(1,-34),shadowSize:new e.Point(41,41)},_getIconUrl:function(t){var i=t+"Url";if(this.options[i])return this.options[i];e.Browser.retina&&"icon"===t&&(t+="@2x");var s=e.Icon.Default.imagePath;if(!s)throw Error("Couldn't autodetect L.Icon.Default.imagePath, set it manually.");return "marker-"+t+".png"}}),e.Icon.Default.imagePath=function(){var t,s,e,o,n=i.getElementsByTagName("script"),a=/\/?leaflet[\-\._]?([\w\-\._]*)\.js\??/;for(t=0,s=n.length;s>t;t++)if(e=n[t].src,o=e.match(a))return e.split(a)[0]+""}(),e.Marker=e.Class.extend({includes:e.Mixin.Events,options:{icon:new e.Icon.Default,title:"",clickable:!0,draggable:!1,zIndexOffset:0,opacity:1,riseOnHover:!1,riseOffset:250},initialize:function(t,i){e.setOptions(this,i),this._latlng=e.latLng(t)},onAdd:function(t){this._map=t,t.on("viewreset",this.update,this),this._initIcon(),this.update(),t.options.zoomAnimation&&t.options.markerZoomAnimation&&t.on("zoomanim",this._animateZoom,this)},addTo:function(t){return t.addLayer(this),this},onRemove:function(t){this._removeIcon(),this.fire("remove"),t.off({viewreset:this.update,zoomanim:this._animateZoom},this),this._map=null},getLatLng:function(){return this._latlng},setLatLng:function(t){return this._latlng=e.latLng(t),this.update(),this.fire("move",{latlng:this._latlng})},setZIndexOffset:function(t){return this.options.zIndexOffset=t,this.update(),this},setIcon:function(t){return this._map&&this._removeIcon(),this.options.icon=t,this._map&&(this._initIcon(),this.update()),this},update:function(){if(this._icon){var t=this._map.latLngToLayerPoint(this._latlng).round();this._setPos(t)}return this},_initIcon:function(){var t=this.options,i=this._map,s=i.options.zoomAnimation&&i.options.markerZoomAnimation,o=s?"leaflet-zoom-animated":"leaflet-zoom-hide",n=!1;this._icon||(this._icon=t.icon.createIcon(),t.title&&(this._icon.title=t.title),this._initInteraction(),n=1>this.options.opacity,e.DomUtil.addClass(this._icon,o),t.riseOnHover&&e.DomEvent.on(this._icon,"mouseover",this._bringToFront,this).on(this._icon,"mouseout",this._resetZIndex,this)),this._shadow||(this._shadow=t.icon.createShadow(),this._shadow&&(e.DomUtil.addClass(this._shadow,o),n=1>this.options.opacity)),n&&this._updateOpacity();var a=this._map._panes;a.markerPane.appendChild(this._icon),this._shadow&&a.shadowPane.appendChild(this._shadow)},_removeIcon:function(){var t=this._map._panes;this.options.riseOnHover&&e.DomEvent.off(this._icon,"mouseover",this._bringToFront).off(this._icon,"mouseout",this._resetZIndex),t.markerPane.removeChild(this._icon),this._shadow&&t.shadowPane.removeChild(this._shadow),this._icon=this._shadow=null},_setPos:function(t){e.DomUtil.setPosition(this._icon,t),this._shadow&&e.DomUtil.setPosition(this._shadow,t),this._zIndex=t.y+this.options.zIndexOffset,this._resetZIndex()},_updateZIndex:function(t){this._icon.style.zIndex=this._zIndex+t},_animateZoom:function(t){var i=this._map._latLngToNewLayerPoint(this._latlng,t.zoom,t.center);this._setPos(i)},_initInteraction:function(){if(this.options.clickable){var t=this._icon,i=["dblclick","mousedown","mouseover","mouseout","contextmenu"];e.DomUtil.addClass(t,"leaflet-clickable"),e.DomEvent.on(t,"click",this._onMouseClick,this);for(var s=0;i.length>s;s++)e.DomEvent.on(t,i[s],this._fireMouseEvent,this);e.Handler.MarkerDrag&&(this.dragging=new e.Handler.MarkerDrag(this),this.options.draggable&&this.dragging.enable())}},_onMouseClick:function(t){var i=this.dragging&&this.dragging.moved();(this.hasEventListeners(t.type)||i)&&e.DomEvent.stopPropagation(t),i||(this.dragging&&this.dragging._enabled||!this._map.dragging||!this._map.dragging.moved())&&this.fire(t.type,{originalEvent:t})},_fireMouseEvent:function(t){this.fire(t.type,{originalEvent:t}),"contextmenu"===t.type&&this.hasEventListeners(t.type)&&e.DomEvent.preventDefault(t),"mousedown"!==t.type&&e.DomEvent.stopPropagation(t)},setOpacity:function(t){this.options.opacity=t,this._map&&this._updateOpacity()},_updateOpacity:function(){e.DomUtil.setOpacity(this._icon,this.options.opacity),this._shadow&&e.DomUtil.setOpacity(this._shadow,this.options.opacity)},_bringToFront:function(){this._updateZIndex(this.options.riseOffset)},_resetZIndex:function(){this._updateZIndex(0)}}),e.marker=function(t,i){return new e.Marker(t,i)},e.DivIcon=e.Icon.extend({options:{iconSize:new e.Point(12,12),className:"leaflet-div-icon"},createIcon:function(){var t=i.createElement("div"),s=this.options;return s.html&&(t.innerHTML=s.html),s.bgPos&&(t.style.backgroundPosition=-s.bgPos.x+"px "+-s.bgPos.y+"px"),this._setIconStyles(t,"icon"),t},createShadow:function(){return null}}),e.divIcon=function(t){return new e.DivIcon(t)},e.Map.mergeOptions({closePopupOnClick:!0}),e.Popup=e.Class.extend({includes:e.Mixin.Events,options:{minWidth:50,maxWidth:300,maxHeight:null,autoPan:!0,closeButton:!0,offset:new e.Point(0,6),autoPanPadding:new e.Point(5,5),className:"",zoomAnimation:!0},initialize:function(t,i){e.setOptions(this,t),this._source=i,this._animated=e.Browser.any3d&&this.options.zoomAnimation},onAdd:function(t){this._map=t,this._container||this._initLayout(),this._updateContent();var i=t.options.fadeAnimation;i&&e.DomUtil.setOpacity(this._container,0),t._panes.popupPane.appendChild(this._container),t.on("viewreset",this._updatePosition,this),this._animated&&t.on("zoomanim",this._zoomAnimation,this),t.options.closePopupOnClick&&t.on("preclick",this._close,this),this._update(),i&&e.DomUtil.setOpacity(this._container,1)},addTo:function(t){return t.addLayer(this),this},openOn:function(t){return t.openPopup(this),this},onRemove:function(t){t._panes.popupPane.removeChild(this._container),e.Util.falseFn(this._container.offsetWidth),t.off({viewreset:this._updatePosition,preclick:this._close,zoomanim:this._zoomAnimation},this),t.options.fadeAnimation&&e.DomUtil.setOpacity(this._container,0),this._map=null},setLatLng:function(t){return this._latlng=e.latLng(t),this._update(),this},setContent:function(t){return this._content=t,this._update(),this},_close:function(){var t=this._map;t&&(t._popup=null,t.removeLayer(this).fire("popupclose",{popup:this}))},_initLayout:function(){var t,i="leaflet-popup",s=i+" "+this.options.className+" leaflet-zoom-"+(this._animated?"animated":"hide"),o=this._container=e.DomUtil.create("div",s);this.options.closeButton&&(t=this._closeButton=e.DomUtil.create("a",i+"-close-button",o),t.href="#close",t.innerHTML="×",e.DomEvent.on(t,"click",this._onCloseButtonClick,this));var n=this._wrapper=e.DomUtil.create("div",i+"-content-wrapper",o);e.DomEvent.disableClickPropagation(n),this._contentNode=e.DomUtil.create("div",i+"-content",n),e.DomEvent.on(this._contentNode,"mousewheel",e.DomEvent.stopPropagation),this._tipContainer=e.DomUtil.create("div",i+"-tip-container",o),this._tip=e.DomUtil.create("div",i+"-tip",this._tipContainer)},_update:function(){this._map&&(this._container.style.visibility="hidden",this._updateContent(),this._updateLayout(),this._updatePosition(),this._container.style.visibility="",this._adjustPan())},_updateContent:function(){if(this._content){if("string"==typeof this._content)this._contentNode.innerHTML=this._content;else{for(;this._contentNode.hasChildNodes();)this._contentNode.removeChild(this._contentNode.firstChild);this._contentNode.appendChild(this._content)}this.fire("contentupdate")}},_updateLayout:function(){var t=this._contentNode,i=t.style;i.width="",i.whiteSpace="nowrap";var s=t.offsetWidth;s=Math.min(s,this.options.maxWidth),s=Math.max(s,this.options.minWidth),i.width=s+1+"px",i.whiteSpace="",i.height="";var o=t.offsetHeight,n=this.options.maxHeight,a="leaflet-popup-scrolled";n&&o>n?(i.height=n+"px",e.DomUtil.addClass(t,a)):e.DomUtil.removeClass(t,a),this._containerWidth=this._container.offsetWidth},_updatePosition:function(){if(this._map){var t=this._map.latLngToLayerPoint(this._latlng),i=this._animated,s=this.options.offset;i&&e.DomUtil.setPosition(this._container,t),this._containerBottom=-s.y-(i?0:t.y),this._containerLeft=-Math.round(this._containerWidth/2)+s.x+(i?0:t.x),this._container.style.bottom=this._containerBottom+"px",this._container.style.left=this._containerLeft+"px"}},_zoomAnimation:function(t){var i=this._map._latLngToNewLayerPoint(this._latlng,t.zoom,t.center);e.DomUtil.setPosition(this._container,i)},_adjustPan:function(){if(this.options.autoPan){var t=this._map,i=this._container.offsetHeight,s=this._containerWidth,o=new e.Point(this._containerLeft,-i-this._containerBottom);this._animated&&o._add(e.DomUtil.getPosition(this._container));var n=t.layerPointToContainerPoint(o),a=this.options.autoPanPadding,r=t.getSize(),h=0,l=0;0>n.x&&(h=n.x-a.x),n.x+s>r.x&&(h=n.x+s-r.x+a.x),0>n.y&&(l=n.y-a.y),n.y+i>r.y&&(l=n.y+i-r.y+a.y),(h||l)&&t.panBy(new e.Point(h,l))}},_onCloseButtonClick:function(t){this._close(),e.DomEvent.stop(t)}}),e.popup=function(t,i){return new e.Popup(t,i)},e.Marker.include({openPopup:function(){return this._popup&&this._map&&(this._popup.setLatLng(this._latlng),this._map.openPopup(this._popup)),this},closePopup:function(){return this._popup&&this._popup._close(),this},bindPopup:function(t,i){var s=e.point(this.options.icon.options.popupAnchor)||new e.Point(0,0);return s=s.add(e.Popup.prototype.options.offset),i&&i.offset&&(s=s.add(i.offset)),i=e.extend({offset:s},i),this._popup||this.on("click",this.openPopup,this).on("remove",this.closePopup,this).on("move",this._movePopup,this),this._popup=new e.Popup(i,this).setContent(t),this},unbindPopup:function(){return this._popup&&(this._popup=null,this.off("click",this.openPopup).off("remove",this.closePopup).off("move",this._movePopup)),this},_movePopup:function(t){this._popup.setLatLng(t.latlng)}}),e.Map.include({openPopup:function(t){return this.closePopup(),this._popup=t,this.addLayer(t).fire("popupopen",{popup:this._popup})},closePopup:function(){return this._popup&&this._popup._close(),this}}),e.LayerGroup=e.Class.extend({initialize:function(t){this._layers={};var i,s;if(t)for(i=0,s=t.length;s>i;i++)this.addLayer(t[i])},addLayer:function(t){var i=e.stamp(t);return this._layers[i]=t,this._map&&this._map.addLayer(t),this},removeLayer:function(t){var i=e.stamp(t);return delete this._layers[i],this._map&&this._map.removeLayer(t),this},clearLayers:function(){return this.eachLayer(this.removeLayer,this),this},invoke:function(t){var i,s,e=Array.prototype.slice.call(arguments,1);for(i in this._layers)this._layers.hasOwnProperty(i)&&(s=this._layers[i],s[t]&&s[t].apply(s,e));return this},onAdd:function(t){this._map=t,this.eachLayer(t.addLayer,t)},onRemove:function(t){this.eachLayer(t.removeLayer,t),this._map=null},addTo:function(t){return t.addLayer(this),this},eachLayer:function(t,i){for(var s in this._layers)this._layers.hasOwnProperty(s)&&t.call(i,this._layers[s])},setZIndex:function(t){return this.invoke("setZIndex",t)}}),e.layerGroup=function(t){return new e.LayerGroup(t)},e.FeatureGroup=e.LayerGroup.extend({includes:e.Mixin.Events,statics:{EVENTS:"click dblclick mouseover mouseout mousemove contextmenu"},addLayer:function(t){return this._layers[e.stamp(t)]?this:(t.on(e.FeatureGroup.EVENTS,this._propagateEvent,this),e.LayerGroup.prototype.addLayer.call(this,t),this._popupContent&&t.bindPopup&&t.bindPopup(this._popupContent,this._popupOptions),this.fire("layeradd",{layer:t}))},removeLayer:function(t){return t.off(e.FeatureGroup.EVENTS,this._propagateEvent,this),e.LayerGroup.prototype.removeLayer.call(this,t),this._popupContent&&this.invoke("unbindPopup"),this.fire("layerremove",{layer:t})},bindPopup:function(t,i){return this._popupContent=t,this._popupOptions=i,this.invoke("bindPopup",t,i)},setStyle:function(t){return this.invoke("setStyle",t)},bringToFront:function(){return this.invoke("bringToFront")},bringToBack:function(){return this.invoke("bringToBack")},getBounds:function(){var t=new e.LatLngBounds;return this.eachLayer(function(i){t.extend(i instanceof e.Marker?i.getLatLng():i.getBounds())}),t},_propagateEvent:function(t){t.layer=t.target,t.target=this,this.fire(t.type,t)}}),e.featureGroup=function(t){return new e.FeatureGroup(t)},e.Path=e.Class.extend({includes:[e.Mixin.Events],statics:{CLIP_PADDING:e.Browser.mobile?Math.max(0,Math.min(.5,(1280/Math.max(t.innerWidth,t.innerHeight)-1)/2)):.5},options:{stroke:!0,color:"#0033ff",dashArray:null,weight:5,opacity:.5,fill:!1,fillColor:null,fillOpacity:.2,clickable:!0},initialize:function(t){e.setOptions(this,t)},onAdd:function(t){this._map=t,this._container||(this._initElements(),this._initEvents()),this.projectLatlngs(),this._updatePath(),this._container&&this._map._pathRoot.appendChild(this._container),this.fire("add"),t.on({viewreset:this.projectLatlngs,moveend:this._updatePath},this)},addTo:function(t){return t.addLayer(this),this},onRemove:function(t){t._pathRoot.removeChild(this._container),this.fire("remove"),this._map=null,e.Browser.vml&&(this._container=null,this._stroke=null,this._fill=null),t.off({viewreset:this.projectLatlngs,moveend:this._updatePath},this)},projectLatlngs:function(){},setStyle:function(t){return e.setOptions(this,t),this._container&&this._updateStyle(),this},redraw:function(){return this._map&&(this.projectLatlngs(),this._updatePath()),this}}),e.Map.include({_updatePathViewport:function(){var t=e.Path.CLIP_PADDING,i=this.getSize(),s=e.DomUtil.getPosition(this._mapPane),o=s.multiplyBy(-1)._subtract(i.multiplyBy(t)._round()),n=o.add(i.multiplyBy(1+2*t)._round());this._pathViewport=new e.Bounds(o,n)}}),e.Path.SVG_NS="http://www.w3.org/2000/svg",e.Browser.svg=!(!i.createElementNS||!i.createElementNS(e.Path.SVG_NS,"svg").createSVGRect),e.Path=e.Path.extend({statics:{SVG:e.Browser.svg},bringToFront:function(){var t=this._map._pathRoot,i=this._container;return i&&t.lastChild!==i&&t.appendChild(i),this},bringToBack:function(){var t=this._map._pathRoot,i=this._container,s=t.firstChild;return i&&s!==i&&t.insertBefore(i,s),this},getPathString:function(){},_createElement:function(t){return i.createElementNS(e.Path.SVG_NS,t)},_initElements:function(){this._map._initPathRoot(),this._initPath(),this._initStyle()},_initPath:function(){this._container=this._createElement("g"),this._path=this._createElement("path"),this._container.appendChild(this._path)},_initStyle:function(){this.options.stroke&&(this._path.setAttribute("stroke-linejoin","round"),this._path.setAttribute("stroke-linecap","round")),this.options.fill&&this._path.setAttribute("fill-rule","evenodd"),this._updateStyle()},_updateStyle:function(){this.options.stroke?(this._path.setAttribute("stroke",this.options.color),this._path.setAttribute("stroke-opacity",this.options.opacity),this._path.setAttribute("stroke-width",this.options.weight),this.options.dashArray?this._path.setAttribute("stroke-dasharray",this.options.dashArray):this._path.removeAttribute("stroke-dasharray")):this._path.setAttribute("stroke","none"),this.options.fill?(this._path.setAttribute("fill",this.options.fillColor||this.options.color),this._path.setAttribute("fill-opacity",this.options.fillOpacity)):this._path.setAttribute("fill","none")},_updatePath:function(){var t=this.getPathString();t||(t="M0 0"),this._path.setAttribute("d",t)},_initEvents:function(){if(this.options.clickable){(e.Browser.svg||!e.Browser.vml)&&this._path.setAttribute("class","leaflet-clickable"),e.DomEvent.on(this._container,"click",this._onMouseClick,this);for(var t=["dblclick","mousedown","mouseover","mouseout","mousemove","contextmenu"],i=0;t.length>i;i++)e.DomEvent.on(this._container,t[i],this._fireMouseEvent,this)}},_onMouseClick:function(t){this._map.dragging&&this._map.dragging.moved()||this._fireMouseEvent(t)},_fireMouseEvent:function(t){if(this.hasEventListeners(t.type)){var i=this._map,s=i.mouseEventToContainerPoint(t),o=i.containerPointToLayerPoint(s),n=i.layerPointToLatLng(o);this.fire(t.type,{latlng:n,layerPoint:o,containerPoint:s,originalEvent:t}),"contextmenu"===t.type&&e.DomEvent.preventDefault(t),"mousemove"!==t.type&&e.DomEvent.stopPropagation(t)}}}),e.Map.include({_initPathRoot:function(){this._pathRoot||(this._pathRoot=e.Path.prototype._createElement("svg"),this._panes.overlayPane.appendChild(this._pathRoot),this.options.zoomAnimation&&e.Browser.any3d?(this._pathRoot.setAttribute("class"," leaflet-zoom-animated"),this.on({zoomanim:this._animatePathZoom,zoomend:this._endPathZoom})):this._pathRoot.setAttribute("class"," leaflet-zoom-hide"),this.on("moveend",this._updateSvgViewport),this._updateSvgViewport())},_animatePathZoom:function(t){var i=this.getZoomScale(t.zoom),s=this._getCenterOffset(t.center)._multiplyBy(-i)._add(this._pathViewport.min);this._pathRoot.style[e.DomUtil.TRANSFORM]=e.DomUtil.getTranslateString(s)+" scale("+i+") ",this._pathZooming=!0},_endPathZoom:function(){this._pathZooming=!1},_updateSvgViewport:function(){if(!this._pathZooming){this._updatePathViewport();var t=this._pathViewport,i=t.min,s=t.max,o=s.x-i.x,n=s.y-i.y,a=this._pathRoot,r=this._panes.overlayPane;e.Browser.mobileWebkit&&r.removeChild(a),e.DomUtil.setPosition(a,i),a.setAttribute("width",o),a.setAttribute("height",n),a.setAttribute("viewBox",[i.x,i.y,o,n].join(" ")),e.Browser.mobileWebkit&&r.appendChild(a)}}}),e.Path.include({bindPopup:function(t,i){return(!this._popup||i)&&(this._popup=new e.Popup(i,this)),this._popup.setContent(t),this._popupHandlersAdded||(this.on("click",this._openPopup,this).on("remove",this.closePopup,this),this._popupHandlersAdded=!0),this},unbindPopup:function(){return this._popup&&(this._popup=null,this.off("click",this._openPopup).off("remove",this.closePopup),this._popupHandlersAdded=!1),this},openPopup:function(t){return this._popup&&(t=t||this._latlng||this._latlngs[Math.floor(this._latlngs.length/2)],this._openPopup({latlng:t})),this},closePopup:function(){return this._popup&&this._popup._close(),this},_openPopup:function(t){this._popup.setLatLng(t.latlng),this._map.openPopup(this._popup)}}),e.Browser.vml=!e.Browser.svg&&function(){try{var t=i.createElement("div");t.innerHTML='';var s=t.firstChild;return s.style.behavior="url(#default#VML)",s&&"object"==typeof s.adj}catch(e){return!1}}(),e.Path=e.Browser.svg||!e.Browser.vml?e.Path:e.Path.extend({statics:{VML:!0,CLIP_PADDING:.02},_createElement:function(){try{return i.namespaces.add("lvml","urn:schemas-microsoft-com:vml"),function(t){return i.createElement("')}}catch(t){return function(t){return i.createElement("<"+t+' xmlns="urn:schemas-microsoft.com:vml" class="lvml">')}}}(),_initPath:function(){var t=this._container=this._createElement("shape");e.DomUtil.addClass(t,"leaflet-vml-shape"),this.options.clickable&&e.DomUtil.addClass(t,"leaflet-clickable"),t.coordsize="1 1",this._path=this._createElement("path"),t.appendChild(this._path),this._map._pathRoot.appendChild(t)},_initStyle:function(){this._updateStyle()},_updateStyle:function(){var t=this._stroke,i=this._fill,s=this.options,e=this._container;e.stroked=s.stroke,e.filled=s.fill,s.stroke?(t||(t=this._stroke=this._createElement("stroke"),t.endcap="round",e.appendChild(t)),t.weight=s.weight+"px",t.color=s.color,t.opacity=s.opacity,t.dashStyle=s.dashArray?s.dashArray instanceof Array?s.dashArray.join(" "):s.dashArray.replace(/ *, */g," "):""):t&&(e.removeChild(t),this._stroke=null),s.fill?(i||(i=this._fill=this._createElement("fill"),e.appendChild(i)),i.color=s.fillColor||s.color,i.opacity=s.fillOpacity):i&&(e.removeChild(i),this._fill=null)},_updatePath:function(){var t=this._container.style;t.display="none",this._path.v=this.getPathString()+" ",t.display=""}}),e.Map.include(e.Browser.svg||!e.Browser.vml?{}:{_initPathRoot:function(){if(!this._pathRoot){var t=this._pathRoot=i.createElement("div");t.className="leaflet-vml-container",this._panes.overlayPane.appendChild(t),this.on("moveend",this._updatePathViewport),this._updatePathViewport()}}}),e.Browser.canvas=function(){return!!i.createElement("canvas").getContext}(),e.Path=e.Path.SVG&&!t.L_PREFER_CANVAS||!e.Browser.canvas?e.Path:e.Path.extend({statics:{CANVAS:!0,SVG:!1},redraw:function(){return this._map&&(this.projectLatlngs(),this._requestUpdate()),this},setStyle:function(t){return e.setOptions(this,t),this._map&&(this._updateStyle(),this._requestUpdate()),this},onRemove:function(t){t.off("viewreset",this.projectLatlngs,this).off("moveend",this._updatePath,this),this.options.clickable&&this._map.off("click",this._onClick,this),this._requestUpdate(),this._map=null},_requestUpdate:function(){this._map&&!e.Path._updateRequest&&(e.Path._updateRequest=e.Util.requestAnimFrame(this._fireMapMoveEnd,this._map))},_fireMapMoveEnd:function(){e.Path._updateRequest=null,this.fire("moveend")},_initElements:function(){this._map._initPathRoot(),this._ctx=this._map._canvasCtx},_updateStyle:function(){var t=this.options;t.stroke&&(this._ctx.lineWidth=t.weight,this._ctx.strokeStyle=t.color),t.fill&&(this._ctx.fillStyle=t.fillColor||t.color)},_drawPath:function(){var t,i,s,o,n,a;for(this._ctx.beginPath(),t=0,s=this._parts.length;s>t;t++){for(i=0,o=this._parts[t].length;o>i;i++)n=this._parts[t][i],a=(0===i?"move":"line")+"To",this._ctx[a](n.x,n.y);this instanceof e.Polygon&&this._ctx.closePath()}},_checkIfEmpty:function(){return!this._parts.length},_updatePath:function(){if(!this._checkIfEmpty()){var t=this._ctx,i=this.options;this._drawPath(),t.save(),this._updateStyle(),i.fill&&(t.globalAlpha=i.fillOpacity,t.fill()),i.stroke&&(t.globalAlpha=i.opacity,t.stroke()),t.restore() +}},_initEvents:function(){this.options.clickable&&this._map.on("click",this._onClick,this)},_onClick:function(t){this._containsPoint(t.layerPoint)&&this.fire("click",{latlng:t.latlng,layerPoint:t.layerPoint,containerPoint:t.containerPoint,originalEvent:t})}}),e.Map.include(e.Path.SVG&&!t.L_PREFER_CANVAS||!e.Browser.canvas?{}:{_initPathRoot:function(){var t,s=this._pathRoot;s||(s=this._pathRoot=i.createElement("canvas"),s.style.position="absolute",t=this._canvasCtx=s.getContext("2d"),t.lineCap="round",t.lineJoin="round",this._panes.overlayPane.appendChild(s),this.options.zoomAnimation&&(this._pathRoot.className="leaflet-zoom-animated",this.on("zoomanim",this._animatePathZoom),this.on("zoomend",this._endPathZoom)),this.on("moveend",this._updateCanvasViewport),this._updateCanvasViewport())},_updateCanvasViewport:function(){if(!this._pathZooming){this._updatePathViewport();var t=this._pathViewport,i=t.min,s=t.max.subtract(i),o=this._pathRoot;e.DomUtil.setPosition(o,i),o.width=s.x,o.height=s.y,o.getContext("2d").translate(-i.x,-i.y)}}}),e.LineUtil={simplify:function(t,i){if(!i||!t.length)return t.slice();var s=i*i;return t=this._reducePoints(t,s),t=this._simplifyDP(t,s)},pointToSegmentDistance:function(t,i,s){return Math.sqrt(this._sqClosestPointOnSegment(t,i,s,!0))},closestPointOnSegment:function(t,i,s){return this._sqClosestPointOnSegment(t,i,s)},_simplifyDP:function(t,i){var e=t.length,o=typeof Uint8Array!=s+""?Uint8Array:Array,n=new o(e);n[0]=n[e-1]=1,this._simplifyDPStep(t,n,i,0,e-1);var a,r=[];for(a=0;e>a;a++)n[a]&&r.push(t[a]);return r},_simplifyDPStep:function(t,i,s,e,o){var n,a,r,h=0;for(a=e+1;o-1>=a;a++)r=this._sqClosestPointOnSegment(t[a],t[e],t[o],!0),r>h&&(n=a,h=r);h>s&&(i[n]=1,this._simplifyDPStep(t,i,s,e,n),this._simplifyDPStep(t,i,s,n,o))},_reducePoints:function(t,i){for(var s=[t[0]],e=1,o=0,n=t.length;n>e;e++)this._sqDist(t[e],t[o])>i&&(s.push(t[e]),o=e);return n-1>o&&s.push(t[n-1]),s},clipSegment:function(t,i,s,e){var o,n,a,r=e?this._lastCode:this._getBitCode(t,s),h=this._getBitCode(i,s);for(this._lastCode=h;;){if(!(r|h))return[t,i];if(r&h)return!1;o=r||h,n=this._getEdgeIntersection(t,i,o,s),a=this._getBitCode(n,s),o===r?(t=n,r=a):(i=n,h=a)}},_getEdgeIntersection:function(t,i,o,n){var a=i.x-t.x,r=i.y-t.y,h=n.min,l=n.max;return 8&o?new e.Point(t.x+a*(l.y-t.y)/r,l.y):4&o?new e.Point(t.x+a*(h.y-t.y)/r,h.y):2&o?new e.Point(l.x,t.y+r*(l.x-t.x)/a):1&o?new e.Point(h.x,t.y+r*(h.x-t.x)/a):s},_getBitCode:function(t,i){var s=0;return t.xi.max.x&&(s|=2),t.yi.max.y&&(s|=8),s},_sqDist:function(t,i){var s=i.x-t.x,e=i.y-t.y;return s*s+e*e},_sqClosestPointOnSegment:function(t,i,s,o){var n,a=i.x,r=i.y,h=s.x-a,l=s.y-r,c=h*h+l*l;return c>0&&(n=((t.x-a)*h+(t.y-r)*l)/c,n>1?(a=s.x,r=s.y):n>0&&(a+=h*n,r+=l*n)),h=t.x-a,l=t.y-r,o?h*h+l*l:new e.Point(a,r)}},e.Polyline=e.Path.extend({initialize:function(t,i){e.Path.prototype.initialize.call(this,i),this._latlngs=this._convertLatLngs(t)},options:{smoothFactor:1,noClip:!1},projectLatlngs:function(){this._originalPoints=[];for(var t=0,i=this._latlngs.length;i>t;t++)this._originalPoints[t]=this._map.latLngToLayerPoint(this._latlngs[t])},getPathString:function(){for(var t=0,i=this._parts.length,s="";i>t;t++)s+=this._getPathPartStr(this._parts[t]);return s},getLatLngs:function(){return this._latlngs},setLatLngs:function(t){return this._latlngs=this._convertLatLngs(t),this.redraw()},addLatLng:function(t){return this._latlngs.push(e.latLng(t)),this.redraw()},spliceLatLngs:function(){var t=[].splice.apply(this._latlngs,arguments);return this._convertLatLngs(this._latlngs),this.redraw(),t},closestLayerPoint:function(t){for(var i,s,o=1/0,n=this._parts,a=null,r=0,h=n.length;h>r;r++)for(var l=n[r],c=1,m=l.length;m>c;c++){i=l[c-1],s=l[c];var u=e.LineUtil._sqClosestPointOnSegment(t,i,s,!0);o>u&&(o=u,a=e.LineUtil._sqClosestPointOnSegment(t,i,s))}return a&&(a.distance=Math.sqrt(o)),a},getBounds:function(){var t,i,s=new e.LatLngBounds,o=this.getLatLngs();for(t=0,i=o.length;i>t;t++)s.extend(o[t]);return s},_convertLatLngs:function(t){var i,s;for(i=0,s=t.length;s>i;i++){if(e.Util.isArray(t[i])&&"number"!=typeof t[i][0])return;t[i]=e.latLng(t[i])}return t},_initEvents:function(){e.Path.prototype._initEvents.call(this)},_getPathPartStr:function(t){for(var i,s=e.Path.VML,o=0,n=t.length,a="";n>o;o++)i=t[o],s&&i._round(),a+=(o?"L":"M")+i.x+" "+i.y;return a},_clipPoints:function(){var t,i,o,n=this._originalPoints,a=n.length;if(this.options.noClip)return this._parts=[n],s;this._parts=[];var r=this._parts,h=this._map._pathViewport,l=e.LineUtil;for(t=0,i=0;a-1>t;t++)o=l.clipSegment(n[t],n[t+1],h,t),o&&(r[i]=r[i]||[],r[i].push(o[0]),(o[1]!==n[t+1]||t===a-2)&&(r[i].push(o[1]),i++))},_simplifyPoints:function(){for(var t=this._parts,i=e.LineUtil,s=0,o=t.length;o>s;s++)t[s]=i.simplify(t[s],this.options.smoothFactor)},_updatePath:function(){this._map&&(this._clipPoints(),this._simplifyPoints(),e.Path.prototype._updatePath.call(this))}}),e.polyline=function(t,i){return new e.Polyline(t,i)},e.PolyUtil={},e.PolyUtil.clipPolygon=function(t,i){var s,o,n,a,r,h,l,c,m,u=[1,4,2,8],d=e.LineUtil;for(o=0,l=t.length;l>o;o++)t[o]._code=d._getBitCode(t[o],i);for(a=0;4>a;a++){for(c=u[a],s=[],o=0,l=t.length,n=l-1;l>o;n=o++)r=t[o],h=t[n],r._code&c?h._code&c||(m=d._getEdgeIntersection(h,r,c,i),m._code=d._getBitCode(m,i),s.push(m)):(h._code&c&&(m=d._getEdgeIntersection(h,r,c,i),m._code=d._getBitCode(m,i),s.push(m)),s.push(r));t=s}return t},e.Polygon=e.Polyline.extend({options:{fill:!0},initialize:function(t,i){e.Polyline.prototype.initialize.call(this,t,i),t&&e.Util.isArray(t[0])&&"number"!=typeof t[0][0]&&(this._latlngs=this._convertLatLngs(t[0]),this._holes=t.slice(1))},projectLatlngs:function(){if(e.Polyline.prototype.projectLatlngs.call(this),this._holePoints=[],this._holes){var t,i,s,o;for(t=0,s=this._holes.length;s>t;t++)for(this._holePoints[t]=[],i=0,o=this._holes[t].length;o>i;i++)this._holePoints[t][i]=this._map.latLngToLayerPoint(this._holes[t][i])}},_clipPoints:function(){var t=this._originalPoints,i=[];if(this._parts=[t].concat(this._holePoints),!this.options.noClip){for(var s=0,o=this._parts.length;o>s;s++){var n=e.PolyUtil.clipPolygon(this._parts[s],this._map._pathViewport);n.length&&i.push(n)}this._parts=i}},_getPathPartStr:function(t){var i=e.Polyline.prototype._getPathPartStr.call(this,t);return i+(e.Browser.svg?"z":"x")}}),e.polygon=function(t,i){return new e.Polygon(t,i)},function(){function t(t){return e.FeatureGroup.extend({initialize:function(t,i){this._layers={},this._options=i,this.setLatLngs(t)},setLatLngs:function(i){var s=0,e=i.length;for(this.eachLayer(function(t){e>s?t.setLatLngs(i[s++]):this.removeLayer(t)},this);e>s;)this.addLayer(new t(i[s++],this._options));return this}})}e.MultiPolyline=t(e.Polyline),e.MultiPolygon=t(e.Polygon),e.multiPolyline=function(t,i){return new e.MultiPolyline(t,i)},e.multiPolygon=function(t,i){return new e.MultiPolygon(t,i)}}(),e.Rectangle=e.Polygon.extend({initialize:function(t,i){e.Polygon.prototype.initialize.call(this,this._boundsToLatLngs(t),i)},setBounds:function(t){this.setLatLngs(this._boundsToLatLngs(t))},_boundsToLatLngs:function(t){return t=e.latLngBounds(t),[t.getSouthWest(),t.getNorthWest(),t.getNorthEast(),t.getSouthEast()]}}),e.rectangle=function(t,i){return new e.Rectangle(t,i)},e.Circle=e.Path.extend({initialize:function(t,i,s){e.Path.prototype.initialize.call(this,s),this._latlng=e.latLng(t),this._mRadius=i},options:{fill:!0},setLatLng:function(t){return this._latlng=e.latLng(t),this.redraw()},setRadius:function(t){return this._mRadius=t,this.redraw()},projectLatlngs:function(){var t=this._getLngRadius(),i=new e.LatLng(this._latlng.lat,this._latlng.lng-t),s=this._map.latLngToLayerPoint(i);this._point=this._map.latLngToLayerPoint(this._latlng),this._radius=Math.max(Math.round(this._point.x-s.x),1)},getBounds:function(){var t=this._getLngRadius(),i=360*(this._mRadius/40075017),s=this._latlng,o=new e.LatLng(s.lat-i,s.lng-t),n=new e.LatLng(s.lat+i,s.lng+t);return new e.LatLngBounds(o,n)},getLatLng:function(){return this._latlng},getPathString:function(){var t=this._point,i=this._radius;return this._checkIfEmpty()?"":e.Browser.svg?"M"+t.x+","+(t.y-i)+"A"+i+","+i+",0,1,1,"+(t.x-.1)+","+(t.y-i)+" z":(t._round(),i=Math.round(i),"AL "+t.x+","+t.y+" "+i+","+i+" 0,"+23592600)},getRadius:function(){return this._mRadius},_getLatRadius:function(){return 360*(this._mRadius/40075017)},_getLngRadius:function(){return this._getLatRadius()/Math.cos(e.LatLng.DEG_TO_RAD*this._latlng.lat)},_checkIfEmpty:function(){if(!this._map)return!1;var t=this._map._pathViewport,i=this._radius,s=this._point;return s.x-i>t.max.x||s.y-i>t.max.y||s.x+is;s++)for(l=this._parts[s],o=0,r=l.length,n=r-1;r>o;n=o++)if((i||0!==o)&&(h=e.LineUtil.pointToSegmentDistance(t,l[n],l[o]),c>=h))return!0;return!1}}:{}),e.Polygon.include(e.Path.CANVAS?{_containsPoint:function(t){var i,s,o,n,a,r,h,l,c=!1;if(e.Polyline.prototype._containsPoint.call(this,t,!0))return!0;for(n=0,h=this._parts.length;h>n;n++)for(i=this._parts[n],a=0,l=i.length,r=l-1;l>a;r=a++)s=i[a],o=i[r],s.y>t.y!=o.y>t.y&&t.x<(o.x-s.x)*(t.y-s.y)/(o.y-s.y)+s.x&&(c=!c);return c}}:{}),e.Circle.include(e.Path.CANVAS?{_drawPath:function(){var t=this._point;this._ctx.beginPath(),this._ctx.arc(t.x,t.y,this._radius,0,2*Math.PI,!1)},_containsPoint:function(t){var i=this._point,s=this.options.stroke?this.options.weight/2:0;return t.distanceTo(i)<=this._radius+s}}:{}),e.GeoJSON=e.FeatureGroup.extend({initialize:function(t,i){e.setOptions(this,i),this._layers={},t&&this.addData(t)},addData:function(t){var i,s,o=e.Util.isArray(t)?t:t.features;if(o){for(i=0,s=o.length;s>i;i++)(o[i].geometries||o[i].geometry||o[i].features)&&this.addData(o[i]);return this}var n=this.options;if(!n.filter||n.filter(t)){var a=e.GeoJSON.geometryToLayer(t,n.pointToLayer);return a.feature=t,a.defaultOptions=a.options,this.resetStyle(a),n.onEachFeature&&n.onEachFeature(t,a),this.addLayer(a)}},resetStyle:function(t){var i=this.options.style;i&&(e.Util.extend(t.options,t.defaultOptions),this._setLayerStyle(t,i))},setStyle:function(t){this.eachLayer(function(i){this._setLayerStyle(i,t)},this)},_setLayerStyle:function(t,i){"function"==typeof i&&(i=i(t.feature)),t.setStyle&&t.setStyle(i)}}),e.extend(e.GeoJSON,{geometryToLayer:function(t,i){var s,o,n,a,r,h="Feature"===t.type?t.geometry:t,l=h.coordinates,c=[];switch(h.type){case"Point":return s=this.coordsToLatLng(l),i?i(t,s):new e.Marker(s);case"MultiPoint":for(n=0,a=l.length;a>n;n++)s=this.coordsToLatLng(l[n]),r=i?i(t,s):new e.Marker(s),c.push(r);return new e.FeatureGroup(c);case"LineString":return o=this.coordsToLatLngs(l),new e.Polyline(o);case"Polygon":return o=this.coordsToLatLngs(l,1),new e.Polygon(o);case"MultiLineString":return o=this.coordsToLatLngs(l,1),new e.MultiPolyline(o);case"MultiPolygon":return o=this.coordsToLatLngs(l,2),new e.MultiPolygon(o);case"GeometryCollection":for(n=0,a=h.geometries.length;a>n;n++)r=this.geometryToLayer({geometry:h.geometries[n],type:"Feature",properties:t.properties},i),c.push(r);return new e.FeatureGroup(c);default:throw Error("Invalid GeoJSON object.")}},coordsToLatLng:function(t,i){var s=parseFloat(t[i?0:1]),o=parseFloat(t[i?1:0]);return new e.LatLng(s,o)},coordsToLatLngs:function(t,i,s){var e,o,n,a=[];for(o=0,n=t.length;n>o;o++)e=i?this.coordsToLatLngs(t[o],i-1,s):this.coordsToLatLng(t[o],s),a.push(e);return a}}),e.geoJson=function(t,i){return new e.GeoJSON(t,i)},e.DomEvent={addListener:function(t,i,o,n){var a,r,h,l=e.stamp(o),c="_leaflet_"+i+l;return t[c]?this:(a=function(i){return o.call(n||t,i||e.DomEvent._getEvent())},e.Browser.msTouch&&0===i.indexOf("touch")?this.addMsTouchListener(t,i,a,l):(e.Browser.touch&&"dblclick"===i&&this.addDoubleTapListener&&this.addDoubleTapListener(t,a,l),"addEventListener"in t?"mousewheel"===i?(t.addEventListener("DOMMouseScroll",a,!1),t.addEventListener(i,a,!1)):"mouseenter"===i||"mouseleave"===i?(r=a,h="mouseenter"===i?"mouseover":"mouseout",a=function(i){return e.DomEvent._checkMouse(t,i)?r(i):s},t.addEventListener(h,a,!1)):t.addEventListener(i,a,!1):"attachEvent"in t&&t.attachEvent("on"+i,a),t[c]=a,this))},removeListener:function(t,i,s){var o=e.stamp(s),n="_leaflet_"+i+o,a=t[n];if(a)return e.Browser.msTouch&&0===i.indexOf("touch")?this.removeMsTouchListener(t,i,o):e.Browser.touch&&"dblclick"===i&&this.removeDoubleTapListener?this.removeDoubleTapListener(t,o):"removeEventListener"in t?"mousewheel"===i?(t.removeEventListener("DOMMouseScroll",a,!1),t.removeEventListener(i,a,!1)):"mouseenter"===i||"mouseleave"===i?t.removeEventListener("mouseenter"===i?"mouseover":"mouseout",a,!1):t.removeEventListener(i,a,!1):"detachEvent"in t&&t.detachEvent("on"+i,a),t[n]=null,this},stopPropagation:function(t){return t.stopPropagation?t.stopPropagation():t.cancelBubble=!0,this},disableClickPropagation:function(t){for(var i=e.DomEvent.stopPropagation,s=e.Draggable.START.length-1;s>=0;s--)e.DomEvent.addListener(t,e.Draggable.START[s],i);return e.DomEvent.addListener(t,"click",i).addListener(t,"dblclick",i)},preventDefault:function(t){return t.preventDefault?t.preventDefault():t.returnValue=!1,this},stop:function(t){return e.DomEvent.preventDefault(t).stopPropagation(t)},getMousePosition:function(t,s){var o=i.body,n=i.documentElement,a=t.pageX?t.pageX:t.clientX+o.scrollLeft+n.scrollLeft,r=t.pageY?t.pageY:t.clientY+o.scrollTop+n.scrollTop,h=new e.Point(a,r);return s?h._subtract(e.DomUtil.getViewportOffset(s)):h},getWheelDelta:function(t){var i=0;return t.wheelDelta&&(i=t.wheelDelta/120),t.detail&&(i=-t.detail/3),i},_checkMouse:function(t,i){var s=i.relatedTarget;if(!s)return!0;try{for(;s&&s!==t;)s=s.parentNode}catch(e){return!1}return s!==t},_getEvent:function(){var i=t.event;if(!i)for(var s=arguments.callee.caller;s&&(i=s.arguments[0],!i||t.Event!==i.constructor);)s=s.caller;return i}},e.DomEvent.on=e.DomEvent.addListener,e.DomEvent.off=e.DomEvent.removeListener,e.Draggable=e.Class.extend({includes:e.Mixin.Events,statics:{START:e.Browser.touch?["touchstart","mousedown"]:["mousedown"],END:{mousedown:"mouseup",touchstart:"touchend",MSPointerDown:"touchend"},MOVE:{mousedown:"mousemove",touchstart:"touchmove",MSPointerDown:"touchmove"},TAP_TOLERANCE:15},initialize:function(t,i,s){this._element=t,this._dragStartTarget=i||t,this._longPress=s&&!e.Browser.msTouch},enable:function(){if(!this._enabled){for(var t=e.Draggable.START.length-1;t>=0;t--)e.DomEvent.on(this._dragStartTarget,e.Draggable.START[t],this._onDown,this);this._enabled=!0}},disable:function(){if(this._enabled){for(var t=e.Draggable.START.length-1;t>=0;t--)e.DomEvent.off(this._dragStartTarget,e.Draggable.START[t],this._onDown,this);this._enabled=!1,this._moved=!1}},_onDown:function(t){if(!(!e.Browser.touch&&t.shiftKey||1!==t.which&&1!==t.button&&!t.touches||(e.DomEvent.preventDefault(t),e.DomEvent.stopPropagation(t),e.Draggable._disabled))){if(this._simulateClick=!0,t.touches&&t.touches.length>1)return this._simulateClick=!1,clearTimeout(this._longPressTimeout),s;var o=t.touches&&1===t.touches.length?t.touches[0]:t,n=o.target;e.Browser.touch&&"a"===n.tagName.toLowerCase()&&e.DomUtil.addClass(n,"leaflet-active"),this._moved=!1,this._moving||(this._startPoint=new e.Point(o.clientX,o.clientY),this._startPos=this._newPos=e.DomUtil.getPosition(this._element),t.touches&&1===t.touches.length&&e.Browser.touch&&this._longPress&&(this._longPressTimeout=setTimeout(e.bind(function(){var t=this._newPos&&this._newPos.distanceTo(this._startPos)||0;e.Draggable.TAP_TOLERANCE>t&&(this._simulateClick=!1,this._onUp(),this._simulateEvent("contextmenu",o))},this),1e3)),e.DomEvent.on(i,e.Draggable.MOVE[t.type],this._onMove,this),e.DomEvent.on(i,e.Draggable.END[t.type],this._onUp,this))}},_onMove:function(t){if(!(t.touches&&t.touches.length>1)){var i=t.touches&&1===t.touches.length?t.touches[0]:t,s=new e.Point(i.clientX,i.clientY),o=s.subtract(this._startPoint);(o.x||o.y)&&(e.DomEvent.preventDefault(t),this._moved||(this.fire("dragstart"),this._moved=!0,this._startPos=e.DomUtil.getPosition(this._element).subtract(o),e.Browser.touch||(e.DomUtil.disableTextSelection(),this._setMovingCursor())),this._newPos=this._startPos.add(o),this._moving=!0,e.Util.cancelAnimFrame(this._animRequest),this._animRequest=e.Util.requestAnimFrame(this._updatePosition,this,!0,this._dragStartTarget))}},_updatePosition:function(){this.fire("predrag"),e.DomUtil.setPosition(this._element,this._newPos),this.fire("drag")},_onUp:function(t){var s;if(clearTimeout(this._longPressTimeout),this._simulateClick&&t.changedTouches){var o=t.changedTouches[0],n=o.target,a=this._newPos&&this._newPos.distanceTo(this._startPos)||0;"a"===n.tagName.toLowerCase()&&e.DomUtil.removeClass(n,"leaflet-active"),e.Draggable.TAP_TOLERANCE>a&&(s=o)}e.Browser.touch||(e.DomUtil.enableTextSelection(),this._restoreCursor());for(var r in e.Draggable.MOVE)e.Draggable.MOVE.hasOwnProperty(r)&&(e.DomEvent.off(i,e.Draggable.MOVE[r],this._onMove),e.DomEvent.off(i,e.Draggable.END[r],this._onUp));this._moved&&(e.Util.cancelAnimFrame(this._animRequest),this.fire("dragend")),this._moving=!1,s&&(this._moved=!1,this._simulateEvent("click",s))},_setMovingCursor:function(){e.DomUtil.addClass(i.body,"leaflet-dragging")},_restoreCursor:function(){e.DomUtil.removeClass(i.body,"leaflet-dragging")},_simulateEvent:function(s,e){var o=i.createEvent("MouseEvents");o.initMouseEvent(s,!0,!0,t,1,e.screenX,e.screenY,e.clientX,e.clientY,!1,!1,!1,!1,0,null),e.target.dispatchEvent(o)}}),e.Handler=e.Class.extend({initialize:function(t){this._map=t},enable:function(){this._enabled||(this._enabled=!0,this.addHooks())},disable:function(){this._enabled&&(this._enabled=!1,this.removeHooks())},enabled:function(){return!!this._enabled}}),e.Map.mergeOptions({dragging:!0,inertia:!e.Browser.android23,inertiaDeceleration:3400,inertiaMaxSpeed:1/0,inertiaThreshold:e.Browser.touch?32:18,easeLinearity:.25,longPress:!0,worldCopyJump:!1}),e.Map.Drag=e.Handler.extend({addHooks:function(){if(!this._draggable){var t=this._map;this._draggable=new e.Draggable(t._mapPane,t._container,t.options.longPress),this._draggable.on({dragstart:this._onDragStart,drag:this._onDrag,dragend:this._onDragEnd},this),t.options.worldCopyJump&&(this._draggable.on("predrag",this._onPreDrag,this),t.on("viewreset",this._onViewReset,this))}this._draggable.enable()},removeHooks:function(){this._draggable.disable()},moved:function(){return this._draggable&&this._draggable._moved},_onDragStart:function(){var t=this._map;t._panAnim&&t._panAnim.stop(),t.fire("movestart").fire("dragstart"),t.options.inertia&&(this._positions=[],this._times=[])},_onDrag:function(){if(this._map.options.inertia){var t=this._lastTime=+new Date,i=this._lastPos=this._draggable._newPos;this._positions.push(i),this._times.push(t),t-this._times[0]>200&&(this._positions.shift(),this._times.shift())}this._map.fire("move").fire("drag")},_onViewReset:function(){var t=this._map.getSize()._divideBy(2),i=this._map.latLngToLayerPoint(new e.LatLng(0,0));this._initialWorldOffset=i.subtract(t).x,this._worldWidth=this._map.project(new e.LatLng(0,180)).x},_onPreDrag:function(){var t=this._worldWidth,i=Math.round(t/2),s=this._initialWorldOffset,e=this._draggable._newPos.x,o=(e-i+s)%t+i-s,n=(e+i+s)%t-i-s,a=Math.abs(o+s)i.inertiaThreshold||!this._positions[0];if(o)t.fire("moveend");else{var n=this._lastPos.subtract(this._positions[0]),a=(this._lastTime+s-this._times[0])/1e3,r=i.easeLinearity,h=n.multiplyBy(r/a),l=h.distanceTo(new e.Point(0,0)),c=Math.min(i.inertiaMaxSpeed,l),m=h.multiplyBy(c/l),u=c/(i.inertiaDeceleration*r),d=m.multiplyBy(-u/2).round();e.Util.requestAnimFrame(function(){t.panBy(d,u,r)})}t.fire("dragend"),i.maxBounds&&e.Util.requestAnimFrame(this._panInsideMaxBounds,t,!0,t._container)},_panInsideMaxBounds:function(){this.panInsideBounds(this.options.maxBounds)}}),e.Map.addInitHook("addHandler","dragging",e.Map.Drag),e.Map.mergeOptions({doubleClickZoom:!0}),e.Map.DoubleClickZoom=e.Handler.extend({addHooks:function(){this._map.on("dblclick",this._onDoubleClick)},removeHooks:function(){this._map.off("dblclick",this._onDoubleClick)},_onDoubleClick:function(t){this.setView(t.latlng,this._zoom+1)}}),e.Map.addInitHook("addHandler","doubleClickZoom",e.Map.DoubleClickZoom),e.Map.mergeOptions({scrollWheelZoom:!0}),e.Map.ScrollWheelZoom=e.Handler.extend({addHooks:function(){e.DomEvent.on(this._map._container,"mousewheel",this._onWheelScroll,this),this._delta=0},removeHooks:function(){e.DomEvent.off(this._map._container,"mousewheel",this._onWheelScroll)},_onWheelScroll:function(t){var i=e.DomEvent.getWheelDelta(t);this._delta+=i,this._lastMousePos=this._map.mouseEventToContainerPoint(t),this._startTime||(this._startTime=+new Date);var s=Math.max(40-(+new Date-this._startTime),0);clearTimeout(this._timer),this._timer=setTimeout(e.bind(this._performZoom,this),s),e.DomEvent.preventDefault(t),e.DomEvent.stopPropagation(t)},_performZoom:function(){var t=this._map,i=this._delta,s=t.getZoom();if(i=i>0?Math.ceil(i):Math.round(i),i=Math.max(Math.min(i,4),-4),i=t._limitZoom(s+i)-s,this._delta=0,this._startTime=null,i){var e=s+i,o=this._getCenterForScrollWheelZoom(e);t.setView(o,e)}},_getCenterForScrollWheelZoom:function(t){var i=this._map,s=i.getZoomScale(t),e=i.getSize()._divideBy(2),o=this._lastMousePos._subtract(e)._multiplyBy(1-1/s),n=i._getTopLeftPoint()._add(e)._add(o);return i.unproject(n)}}),e.Map.addInitHook("addHandler","scrollWheelZoom",e.Map.ScrollWheelZoom),e.extend(e.DomEvent,{_touchstart:e.Browser.msTouch?"MSPointerDown":"touchstart",_touchend:e.Browser.msTouch?"MSPointerUp":"touchend",addDoubleTapListener:function(t,s,o){function n(t){var i;if(e.Browser.msTouch?(p.push(t.pointerId),i=p.length):i=t.touches.length,!(i>1)){var s=Date.now(),o=s-(r||s);h=t.touches?t.touches[0]:t,l=o>0&&c>=o,r=s}}function a(t){if(e.Browser.msTouch){var i=p.indexOf(t.pointerId);if(-1===i)return;p.splice(i,1)}if(l){if(e.Browser.msTouch){var o,n={};for(var a in h)o=h[a],n[a]="function"==typeof o?o.bind(h):o;h=n}h.type="dblclick",s(h),r=null}}var r,h,l=!1,c=250,m="_leaflet_",u=this._touchstart,d=this._touchend,p=[];t[m+u+o]=n,t[m+d+o]=a;var _=e.Browser.msTouch?i.documentElement:t;return t.addEventListener(u,n,!1),_.addEventListener(d,a,!1),e.Browser.msTouch&&_.addEventListener("MSPointerCancel",a,!1),this},removeDoubleTapListener:function(t,s){var o="_leaflet_";return t.removeEventListener(this._touchstart,t[o+this._touchstart+s],!1),(e.Browser.msTouch?i.documentElement:t).removeEventListener(this._touchend,t[o+this._touchend+s],!1),e.Browser.msTouch&&i.documentElement.removeEventListener("MSPointerCancel",t[o+this._touchend+s],!1),this}}),e.extend(e.DomEvent,{_msTouches:[],_msDocumentListener:!1,addMsTouchListener:function(t,i,s,e){switch(i){case"touchstart":return this.addMsTouchListenerStart(t,i,s,e);case"touchend":return this.addMsTouchListenerEnd(t,i,s,e);case"touchmove":return this.addMsTouchListenerMove(t,i,s,e);default:throw"Unknown touch event type"}},addMsTouchListenerStart:function(t,s,e,o){var n="_leaflet_",a=this._msTouches,r=function(t){for(var i=!1,s=0;a.length>s;s++)if(a[s].pointerId===t.pointerId){i=!0;break}i||a.push(t),t.touches=a.slice(),t.changedTouches=[t],e(t)};if(t[n+"touchstart"+o]=r,t.addEventListener("MSPointerDown",r,!1),!this._msDocumentListener){var h=function(t){for(var i=0;a.length>i;i++)if(a[i].pointerId===t.pointerId){a.splice(i,1);break}};i.documentElement.addEventListener("MSPointerUp",h,!1),i.documentElement.addEventListener("MSPointerCancel",h,!1),this._msDocumentListener=!0}return this},addMsTouchListenerMove:function(t,i,s,e){function o(t){if(t.pointerType!==t.MSPOINTER_TYPE_MOUSE||0!==t.buttons){for(var i=0;a.length>i;i++)if(a[i].pointerId===t.pointerId){a[i]=t;break}t.touches=a.slice(),t.changedTouches=[t],s(t)}}var n="_leaflet_",a=this._msTouches;return t[n+"touchmove"+e]=o,t.addEventListener("MSPointerMove",o,!1),this},addMsTouchListenerEnd:function(t,i,s,e){var o="_leaflet_",n=this._msTouches,a=function(t){for(var i=0;n.length>i;i++)if(n[i].pointerId===t.pointerId){n.splice(i,1);break}t.touches=n.slice(),t.changedTouches=[t],s(t)};return t[o+"touchend"+e]=a,t.addEventListener("MSPointerUp",a,!1),t.addEventListener("MSPointerCancel",a,!1),this},removeMsTouchListener:function(t,i,s){var e="_leaflet_",o=t[e+i+s];switch(i){case"touchstart":t.removeEventListener("MSPointerDown",o,!1);break;case"touchmove":t.removeEventListener("MSPointerMove",o,!1);break;case"touchend":t.removeEventListener("MSPointerUp",o,!1),t.removeEventListener("MSPointerCancel",o,!1)}return this}}),e.Map.mergeOptions({touchZoom:e.Browser.touch&&!e.Browser.android23}),e.Map.TouchZoom=e.Handler.extend({addHooks:function(){e.DomEvent.on(this._map._container,"touchstart",this._onTouchStart,this)},removeHooks:function(){e.DomEvent.off(this._map._container,"touchstart",this._onTouchStart,this)},_onTouchStart:function(t){var s=this._map;if(t.touches&&2===t.touches.length&&!s._animatingZoom&&!this._zooming){var o=s.mouseEventToLayerPoint(t.touches[0]),n=s.mouseEventToLayerPoint(t.touches[1]),a=s._getCenterLayerPoint();this._startCenter=o.add(n)._divideBy(2),this._startDist=o.distanceTo(n),this._moved=!1,this._zooming=!0,this._centerOffset=a.subtract(this._startCenter),s._panAnim&&s._panAnim.stop(),e.DomEvent.on(i,"touchmove",this._onTouchMove,this).on(i,"touchend",this._onTouchEnd,this),e.DomEvent.preventDefault(t)}},_onTouchMove:function(t){if(t.touches&&2===t.touches.length){var i=this._map,s=i.mouseEventToLayerPoint(t.touches[0]),o=i.mouseEventToLayerPoint(t.touches[1]);this._scale=s.distanceTo(o)/this._startDist,this._delta=s._add(o)._divideBy(2)._subtract(this._startCenter),1!==this._scale&&(this._moved||(e.DomUtil.addClass(i._mapPane,"leaflet-zoom-anim leaflet-touching"),i.fire("movestart").fire("zoomstart")._prepareTileBg(),this._moved=!0),e.Util.cancelAnimFrame(this._animRequest),this._animRequest=e.Util.requestAnimFrame(this._updateOnMove,this,!0,this._map._container),e.DomEvent.preventDefault(t))}},_updateOnMove:function(){var t=this._map,i=this._getScaleOrigin(),s=t.layerPointToLatLng(i);t.fire("zoomanim",{center:s,zoom:t.getScaleZoom(this._scale)}),t._tileBg.style[e.DomUtil.TRANSFORM]=e.DomUtil.getTranslateString(this._delta)+" "+e.DomUtil.getScaleString(this._scale,this._startCenter)},_onTouchEnd:function(){if(this._moved&&this._zooming){var t=this._map;this._zooming=!1,e.DomUtil.removeClass(t._mapPane,"leaflet-touching"),e.DomEvent.off(i,"touchmove",this._onTouchMove).off(i,"touchend",this._onTouchEnd);var s=this._getScaleOrigin(),o=t.layerPointToLatLng(s),n=t.getZoom(),a=t.getScaleZoom(this._scale)-n,r=a>0?Math.ceil(a):Math.floor(a),h=t._limitZoom(n+r);t.fire("zoomanim",{center:o,zoom:h}),t._runAnimation(o,h,t.getZoomScale(h)/this._scale,s,!0)}},_getScaleOrigin:function(){var t=this._centerOffset.subtract(this._delta).divideBy(this._scale);return this._startCenter.add(t)}}),e.Map.addInitHook("addHandler","touchZoom",e.Map.TouchZoom),e.Map.mergeOptions({boxZoom:!0}),e.Map.BoxZoom=e.Handler.extend({initialize:function(t){this._map=t,this._container=t._container,this._pane=t._panes.overlayPane},addHooks:function(){e.DomEvent.on(this._container,"mousedown",this._onMouseDown,this)},removeHooks:function(){e.DomEvent.off(this._container,"mousedown",this._onMouseDown)},_onMouseDown:function(t){return!t.shiftKey||1!==t.which&&1!==t.button?!1:(e.DomUtil.disableTextSelection(),this._startLayerPoint=this._map.mouseEventToLayerPoint(t),this._box=e.DomUtil.create("div","leaflet-zoom-box",this._pane),e.DomUtil.setPosition(this._box,this._startLayerPoint),this._container.style.cursor="crosshair",e.DomEvent.on(i,"mousemove",this._onMouseMove,this).on(i,"mouseup",this._onMouseUp,this).preventDefault(t),this._map.fire("boxzoomstart"),s)},_onMouseMove:function(t){var i=this._startLayerPoint,s=this._box,o=this._map.mouseEventToLayerPoint(t),n=o.subtract(i),a=new e.Point(Math.min(o.x,i.x),Math.min(o.y,i.y));e.DomUtil.setPosition(s,a),s.style.width=Math.max(0,Math.abs(n.x)-4)+"px",s.style.height=Math.max(0,Math.abs(n.y)-4)+"px"},_onMouseUp:function(t){this._pane.removeChild(this._box),this._container.style.cursor="",e.DomUtil.enableTextSelection(),e.DomEvent.off(i,"mousemove",this._onMouseMove).off(i,"mouseup",this._onMouseUp);var s=this._map,o=s.mouseEventToLayerPoint(t);if(!this._startLayerPoint.equals(o)){var n=new e.LatLngBounds(s.layerPointToLatLng(this._startLayerPoint),s.layerPointToLatLng(o));s.fitBounds(n),s.fire("boxzoomend",{boxZoomBounds:n})}}}),e.Map.addInitHook("addHandler","boxZoom",e.Map.BoxZoom),e.Map.mergeOptions({keyboard:!0,keyboardPanOffset:80,keyboardZoomOffset:1}),e.Map.Keyboard=e.Handler.extend({keyCodes:{left:[37],right:[39],down:[40],up:[38],zoomIn:[187,107,61],zoomOut:[189,109,173]},initialize:function(t){this._map=t,this._setPanOffset(t.options.keyboardPanOffset),this._setZoomOffset(t.options.keyboardZoomOffset)},addHooks:function(){var t=this._map._container;-1===t.tabIndex&&(t.tabIndex="0"),e.DomEvent.on(t,"focus",this._onFocus,this).on(t,"blur",this._onBlur,this).on(t,"mousedown",this._onMouseDown,this),this._map.on("focus",this._addHooks,this).on("blur",this._removeHooks,this)},removeHooks:function(){this._removeHooks();var t=this._map._container;e.DomEvent.off(t,"focus",this._onFocus,this).off(t,"blur",this._onBlur,this).off(t,"mousedown",this._onMouseDown,this),this._map.off("focus",this._addHooks,this).off("blur",this._removeHooks,this)},_onMouseDown:function(){this._focused||this._map._container.focus()},_onFocus:function(){this._focused=!0,this._map.fire("focus")},_onBlur:function(){this._focused=!1,this._map.fire("blur")},_setPanOffset:function(t){var i,s,e=this._panKeys={},o=this.keyCodes;for(i=0,s=o.left.length;s>i;i++)e[o.left[i]]=[-1*t,0];for(i=0,s=o.right.length;s>i;i++)e[o.right[i]]=[t,0];for(i=0,s=o.down.length;s>i;i++)e[o.down[i]]=[0,t];for(i=0,s=o.up.length;s>i;i++)e[o.up[i]]=[0,-1*t]},_setZoomOffset:function(t){var i,s,e=this._zoomKeys={},o=this.keyCodes;for(i=0,s=o.zoomIn.length;s>i;i++)e[o.zoomIn[i]]=t;for(i=0,s=o.zoomOut.length;s>i;i++)e[o.zoomOut[i]]=-t},_addHooks:function(){e.DomEvent.on(i,"keydown",this._onKeyDown,this)},_removeHooks:function(){e.DomEvent.off(i,"keydown",this._onKeyDown,this)},_onKeyDown:function(t){var i=t.keyCode,s=this._map;if(this._panKeys.hasOwnProperty(i))s.panBy(this._panKeys[i]),s.options.maxBounds&&s.panInsideBounds(s.options.maxBounds);else{if(!this._zoomKeys.hasOwnProperty(i))return;s.setZoom(s.getZoom()+this._zoomKeys[i])}e.DomEvent.stop(t)}}),e.Map.addInitHook("addHandler","keyboard",e.Map.Keyboard),e.Handler.MarkerDrag=e.Handler.extend({initialize:function(t){this._marker=t},addHooks:function(){var t=this._marker._icon;this._draggable||(this._draggable=new e.Draggable(t,t).on("dragstart",this._onDragStart,this).on("drag",this._onDrag,this).on("dragend",this._onDragEnd,this)),this._draggable.enable()},removeHooks:function(){this._draggable.disable()},moved:function(){return this._draggable&&this._draggable._moved},_onDragStart:function(){this._marker.closePopup().fire("movestart").fire("dragstart")},_onDrag:function(){var t=this._marker,i=t._shadow,s=e.DomUtil.getPosition(t._icon),o=t._map.layerPointToLatLng(s);i&&e.DomUtil.setPosition(i,s),t._latlng=o,t.fire("move",{latlng:o}).fire("drag") +},_onDragEnd:function(){this._marker.fire("moveend").fire("dragend")}}),e.Handler.PolyEdit=e.Handler.extend({options:{icon:new e.DivIcon({iconSize:new e.Point(8,8),className:"leaflet-div-icon leaflet-editing-icon"})},initialize:function(t,i){this._poly=t,e.setOptions(this,i)},addHooks:function(){this._poly._map&&(this._markerGroup||this._initMarkers(),this._poly._map.addLayer(this._markerGroup))},removeHooks:function(){this._poly._map&&(this._poly._map.removeLayer(this._markerGroup),delete this._markerGroup,delete this._markers)},updateMarkers:function(){this._markerGroup.clearLayers(),this._initMarkers()},_initMarkers:function(){this._markerGroup||(this._markerGroup=new e.LayerGroup),this._markers=[];var t,i,s,o,n=this._poly._latlngs;for(t=0,s=n.length;s>t;t++)o=this._createMarker(n[t],t),o.on("click",this._onMarkerClick,this),this._markers.push(o);var a,r;for(t=0,i=s-1;s>t;i=t++)(0!==t||e.Polygon&&this._poly instanceof e.Polygon)&&(a=this._markers[i],r=this._markers[t],this._createMiddleMarker(a,r),this._updatePrevNext(a,r))},_createMarker:function(t,i){var s=new e.Marker(t,{draggable:!0,icon:this.options.icon});return s._origLatLng=t,s._index=i,s.on("drag",this._onMarkerDrag,this),s.on("dragend",this._fireEdit,this),this._markerGroup.addLayer(s),s},_fireEdit:function(){this._poly.fire("edit")},_onMarkerDrag:function(t){var i=t.target;e.extend(i._origLatLng,i._latlng),i._middleLeft&&i._middleLeft.setLatLng(this._getMiddleLatLng(i._prev,i)),i._middleRight&&i._middleRight.setLatLng(this._getMiddleLatLng(i,i._next)),this._poly.redraw()},_onMarkerClick:function(t){if(!(3>this._poly._latlngs.length)){var i=t.target,s=i._index;this._markerGroup.removeLayer(i),this._markers.splice(s,1),this._poly.spliceLatLngs(s,1),this._updateIndexes(s,-1),this._updatePrevNext(i._prev,i._next),i._middleLeft&&this._markerGroup.removeLayer(i._middleLeft),i._middleRight&&this._markerGroup.removeLayer(i._middleRight),i._prev&&i._next?this._createMiddleMarker(i._prev,i._next):i._prev?i._next||(i._prev._middleRight=null):i._next._middleLeft=null,this._poly.fire("edit")}},_updateIndexes:function(t,i){this._markerGroup.eachLayer(function(s){s._index>t&&(s._index+=i)})},_createMiddleMarker:function(t,i){var s,e,o,n=this._getMiddleLatLng(t,i),a=this._createMarker(n);a.setOpacity(.6),t._middleRight=i._middleLeft=a,e=function(){var e=i._index;a._index=e,a.off("click",s).on("click",this._onMarkerClick,this),n.lat=a.getLatLng().lat,n.lng=a.getLatLng().lng,this._poly.spliceLatLngs(e,0,n),this._markers.splice(e,0,a),a.setOpacity(1),this._updateIndexes(e,1),i._index++,this._updatePrevNext(t,a),this._updatePrevNext(a,i)},o=function(){a.off("dragstart",e,this),a.off("dragend",o,this),this._createMiddleMarker(t,a),this._createMiddleMarker(a,i)},s=function(){e.call(this),o.call(this),this._poly.fire("edit")},a.on("click",s,this).on("dragstart",e,this).on("dragend",o,this),this._markerGroup.addLayer(a)},_updatePrevNext:function(t,i){t&&(t._next=i),i&&(i._prev=t)},_getMiddleLatLng:function(t,i){var s=this._poly._map,e=s.latLngToLayerPoint(t.getLatLng()),o=s.latLngToLayerPoint(i.getLatLng());return s.layerPointToLatLng(e._add(o)._divideBy(2))}}),e.Polyline.addInitHook(function(){e.Handler.PolyEdit&&(this.editing=new e.Handler.PolyEdit(this),this.options.editable&&this.editing.enable()),this.on("add",function(){this.editing&&this.editing.enabled()&&this.editing.addHooks()}),this.on("remove",function(){this.editing&&this.editing.enabled()&&this.editing.removeHooks()})}),e.Control=e.Class.extend({options:{position:"topright"},initialize:function(t){e.setOptions(this,t)},getPosition:function(){return this.options.position},setPosition:function(t){var i=this._map;return i&&i.removeControl(this),this.options.position=t,i&&i.addControl(this),this},addTo:function(t){this._map=t;var i=this._container=this.onAdd(t),s=this.getPosition(),o=t._controlCorners[s];return e.DomUtil.addClass(i,"leaflet-control"),-1!==s.indexOf("bottom")?o.insertBefore(i,o.firstChild):o.appendChild(i),this},removeFrom:function(t){var i=this.getPosition(),s=t._controlCorners[i];return s.removeChild(this._container),this._map=null,this.onRemove&&this.onRemove(t),this}}),e.control=function(t){return new e.Control(t)},e.Map.include({addControl:function(t){return t.addTo(this),this},removeControl:function(t){return t.removeFrom(this),this},_initControlPos:function(){function t(t,n){var a=s+t+" "+s+n;i[t+n]=e.DomUtil.create("div",a,o)}var i=this._controlCorners={},s="leaflet-",o=this._controlContainer=e.DomUtil.create("div",s+"control-container",this._container);t("top","left"),t("top","right"),t("bottom","left"),t("bottom","right")}}),e.Control.Zoom=e.Control.extend({options:{position:"topleft"},onAdd:function(t){var i="leaflet-control-zoom",s="leaflet-bar",o=s+"-part",n=e.DomUtil.create("div",i+" "+s);return this._map=t,this._zoomInButton=this._createButton("+","Zoom in",i+"-in "+o+" "+o+"-top",n,this._zoomIn,this),this._zoomOutButton=this._createButton("-","Zoom out",i+"-out "+o+" "+o+"-bottom",n,this._zoomOut,this),t.on("zoomend",this._updateDisabled,this),n},onRemove:function(t){t.off("zoomend",this._updateDisabled,this)},_zoomIn:function(t){this._map.zoomIn(t.shiftKey?3:1)},_zoomOut:function(t){this._map.zoomOut(t.shiftKey?3:1)},_createButton:function(t,i,s,o,n,a){var r=e.DomUtil.create("a",s,o);r.innerHTML=t,r.href="#",r.title=i;var h=e.DomEvent.stopPropagation;return e.DomEvent.on(r,"click",h).on(r,"mousedown",h).on(r,"dblclick",h).on(r,"click",e.DomEvent.preventDefault).on(r,"click",n,a),r},_updateDisabled:function(){var t=this._map,i="leaflet-control-zoom-disabled";e.DomUtil.removeClass(this._zoomInButton,i),e.DomUtil.removeClass(this._zoomOutButton,i),t._zoom===t.getMinZoom()&&e.DomUtil.addClass(this._zoomOutButton,i),t._zoom===t.getMaxZoom()&&e.DomUtil.addClass(this._zoomInButton,i)}}),e.Map.mergeOptions({zoomControl:!0}),e.Map.addInitHook(function(){this.options.zoomControl&&(this.zoomControl=new e.Control.Zoom,this.addControl(this.zoomControl))}),e.control.zoom=function(t){return new e.Control.Zoom(t)},e.Control.Attribution=e.Control.extend({options:{position:"bottomright",prefix:'Powered by Leaflet'},initialize:function(t){e.setOptions(this,t),this._attributions={}},onAdd:function(t){return this._container=e.DomUtil.create("div","leaflet-control-attribution"),e.DomEvent.disableClickPropagation(this._container),t.on("layeradd",this._onLayerAdd,this).on("layerremove",this._onLayerRemove,this),this._update(),this._container},onRemove:function(t){t.off("layeradd",this._onLayerAdd).off("layerremove",this._onLayerRemove)},setPrefix:function(t){return this.options.prefix=t,this._update(),this},addAttribution:function(t){return t?(this._attributions[t]||(this._attributions[t]=0),this._attributions[t]++,this._update(),this):s},removeAttribution:function(t){return t?(this._attributions[t]--,this._update(),this):s},_update:function(){if(this._map){var t=[];for(var i in this._attributions)this._attributions.hasOwnProperty(i)&&this._attributions[i]&&t.push(i);var s=[];this.options.prefix&&s.push(this.options.prefix),t.length&&s.push(t.join(", ")),this._container.innerHTML=s.join(" — ")}},_onLayerAdd:function(t){t.layer.getAttribution&&this.addAttribution(t.layer.getAttribution())},_onLayerRemove:function(t){t.layer.getAttribution&&this.removeAttribution(t.layer.getAttribution())}}),e.Map.mergeOptions({attributionControl:!0}),e.Map.addInitHook(function(){this.options.attributionControl&&(this.attributionControl=(new e.Control.Attribution).addTo(this))}),e.control.attribution=function(t){return new e.Control.Attribution(t)},e.Control.Scale=e.Control.extend({options:{position:"bottomleft",maxWidth:100,metric:!0,imperial:!0,updateWhenIdle:!1},onAdd:function(t){this._map=t;var i="leaflet-control-scale",s=e.DomUtil.create("div",i),o=this.options;return this._addScales(o,i,s),t.on(o.updateWhenIdle?"moveend":"move",this._update,this),t.whenReady(this._update,this),s},onRemove:function(t){t.off(this.options.updateWhenIdle?"moveend":"move",this._update,this)},_addScales:function(t,i,s){t.metric&&(this._mScale=e.DomUtil.create("div",i+"-line",s)),t.imperial&&(this._iScale=e.DomUtil.create("div",i+"-line",s))},_update:function(){var t=this._map.getBounds(),i=t.getCenter().lat,s=6378137*Math.PI*Math.cos(i*Math.PI/180),e=s*(t.getNorthEast().lng-t.getSouthWest().lng)/180,o=this._map.getSize(),n=this.options,a=0;o.x>0&&(a=e*(n.maxWidth/o.x)),this._updateScales(n,a)},_updateScales:function(t,i){t.metric&&i&&this._updateMetric(i),t.imperial&&i&&this._updateImperial(i)},_updateMetric:function(t){var i=this._getRoundNum(t);this._mScale.style.width=this._getScaleWidth(i/t)+"px",this._mScale.innerHTML=1e3>i?i+" m":i/1e3+" km"},_updateImperial:function(t){var i,s,e,o=3.2808399*t,n=this._iScale;o>5280?(i=o/5280,s=this._getRoundNum(i),n.style.width=this._getScaleWidth(s/i)+"px",n.innerHTML=s+" mi"):(e=this._getRoundNum(o),n.style.width=this._getScaleWidth(e/o)+"px",n.innerHTML=e+" ft")},_getScaleWidth:function(t){return Math.round(this.options.maxWidth*t)-10},_getRoundNum:function(t){var i=Math.pow(10,(Math.floor(t)+"").length-1),s=t/i;return s=s>=10?10:s>=5?5:s>=3?3:s>=2?2:1,i*s}}),e.control.scale=function(t){return new e.Control.Scale(t)},e.Control.Layers=e.Control.extend({options:{collapsed:!0,position:"topright",autoZIndex:!0},initialize:function(t,i,s){e.setOptions(this,s),this._layers={},this._lastZIndex=0,this._handlingClick=!1;for(var o in t)t.hasOwnProperty(o)&&this._addLayer(t[o],o);for(o in i)i.hasOwnProperty(o)&&this._addLayer(i[o],o,!0)},onAdd:function(t){return this._initLayout(),this._update(),t.on("layeradd",this._onLayerChange,this).on("layerremove",this._onLayerChange,this),this._container},onRemove:function(t){t.off("layeradd",this._onLayerChange).off("layerremove",this._onLayerChange)},addBaseLayer:function(t,i){return this._addLayer(t,i),this._update(),this},addOverlay:function(t,i){return this._addLayer(t,i,!0),this._update(),this},removeLayer:function(t){var i=e.stamp(t);return delete this._layers[i],this._update(),this},_initLayout:function(){var t="leaflet-control-layers",i=this._container=e.DomUtil.create("div",t);e.Browser.touch?e.DomEvent.on(i,"click",e.DomEvent.stopPropagation):(e.DomEvent.disableClickPropagation(i),e.DomEvent.on(i,"mousewheel",e.DomEvent.stopPropagation));var s=this._form=e.DomUtil.create("form",t+"-list");if(this.options.collapsed){e.DomEvent.on(i,"mouseover",this._expand,this).on(i,"mouseout",this._collapse,this);var o=this._layersLink=e.DomUtil.create("a",t+"-toggle",i);o.href="#",o.title="Layers",e.Browser.touch?e.DomEvent.on(o,"click",e.DomEvent.stopPropagation).on(o,"click",e.DomEvent.preventDefault).on(o,"click",this._expand,this):e.DomEvent.on(o,"focus",this._expand,this),this._map.on("movestart",this._collapse,this)}else this._expand();this._baseLayersList=e.DomUtil.create("div",t+"-base",s),this._separator=e.DomUtil.create("div",t+"-separator",s),this._overlaysList=e.DomUtil.create("div",t+"-overlays",s),i.appendChild(s)},_addLayer:function(t,i,s){var o=e.stamp(t);this._layers[o]={layer:t,name:i,overlay:s},this.options.autoZIndex&&t.setZIndex&&(this._lastZIndex++,t.setZIndex(this._lastZIndex))},_update:function(){if(this._container){this._baseLayersList.innerHTML="",this._overlaysList.innerHTML="";var t=!1,i=!1;for(var s in this._layers)if(this._layers.hasOwnProperty(s)){var e=this._layers[s];this._addItem(e),i=i||e.overlay,t=t||!e.overlay}this._separator.style.display=i&&t?"":"none"}},_onLayerChange:function(t){var i=e.stamp(t.layer);this._layers[i]&&!this._handlingClick&&this._update()},_createRadioElement:function(t,s){var e='t;t++)i=o[t],s=this._layers[i.layerId],i.checked&&!this._map.hasLayer(s.layer)?(this._map.addLayer(s.layer),s.overlay||(e=s.layer)):!i.checked&&this._map.hasLayer(s.layer)&&this._map.removeLayer(s.layer);e&&(this._map.setZoom(this._map.getZoom()),this._map.fire("baselayerchange",{layer:e})),this._handlingClick=!1},_expand:function(){e.DomUtil.addClass(this._container,"leaflet-control-layers-expanded")},_collapse:function(){this._container.className=this._container.className.replace(" leaflet-control-layers-expanded","")}}),e.control.layers=function(t,i,s){return new e.Control.Layers(t,i,s)},e.PosAnimation=e.Class.extend({includes:e.Mixin.Events,run:function(t,i,s,o){this.stop(),this._el=t,this._inProgress=!0,this.fire("start"),t.style[e.DomUtil.TRANSITION]="all "+(s||.25)+"s cubic-bezier(0,0,"+(o||.5)+",1)",e.DomEvent.on(t,e.DomUtil.TRANSITION_END,this._onTransitionEnd,this),e.DomUtil.setPosition(t,i),e.Util.falseFn(t.offsetWidth),this._stepTimer=setInterval(e.bind(this.fire,this,"step"),50)},stop:function(){this._inProgress&&(e.DomUtil.setPosition(this._el,this._getPos()),this._onTransitionEnd(),e.Util.falseFn(this._el.offsetWidth))},_transformRe:/(-?[\d\.]+), (-?[\d\.]+)\)/,_getPos:function(){var i,s,o,n=this._el,a=t.getComputedStyle(n);return e.Browser.any3d?(o=a[e.DomUtil.TRANSFORM].match(this._transformRe),i=parseFloat(o[1]),s=parseFloat(o[2])):(i=parseFloat(a.left),s=parseFloat(a.top)),new e.Point(i,s,!0)},_onTransitionEnd:function(){e.DomEvent.off(this._el,e.DomUtil.TRANSITION_END,this._onTransitionEnd,this),this._inProgress&&(this._inProgress=!1,this._el.style[e.DomUtil.TRANSITION]="",clearInterval(this._stepTimer),this.fire("step").fire("end"))}}),e.Map.include({setView:function(t,i,s){i=this._limitZoom(i);var e=this._zoom!==i;if(this._loaded&&!s&&this._layers){this._panAnim&&this._panAnim.stop();var o=e?this._zoomToIfClose&&this._zoomToIfClose(t,i):this._panByIfClose(t);if(o)return clearTimeout(this._sizeTimer),this}return this._resetView(t,i),this},panBy:function(t,i,s){if(t=e.point(t),!t.x&&!t.y)return this;this._panAnim||(this._panAnim=new e.PosAnimation,this._panAnim.on({step:this._onPanTransitionStep,end:this._onPanTransitionEnd},this)),this.fire("movestart"),e.DomUtil.addClass(this._mapPane,"leaflet-pan-anim");var o=e.DomUtil.getPosition(this._mapPane).subtract(t)._round();return this._panAnim.run(this._mapPane,o,i||.25,s),this},_onPanTransitionStep:function(){this.fire("move")},_onPanTransitionEnd:function(){e.DomUtil.removeClass(this._mapPane,"leaflet-pan-anim"),this.fire("moveend")},_panByIfClose:function(t){var i=this._getCenterOffset(t)._floor();return this._offsetIsWithinView(i)?(this.panBy(i),!0):!1},_offsetIsWithinView:function(t,i){var s=i||1,e=this.getSize();return Math.abs(t.x)<=e.x*s&&Math.abs(t.y)<=e.y*s}}),e.PosAnimation=e.DomUtil.TRANSITION?e.PosAnimation:e.PosAnimation.extend({run:function(t,i,s,o){this.stop(),this._el=t,this._inProgress=!0,this._duration=s||.25,this._easeOutPower=1/Math.max(o||.5,.2),this._startPos=e.DomUtil.getPosition(t),this._offset=i.subtract(this._startPos),this._startTime=+new Date,this.fire("start"),this._animate()},stop:function(){this._inProgress&&(this._step(),this._complete())},_animate:function(){this._animId=e.Util.requestAnimFrame(this._animate,this),this._step()},_step:function(){var t=+new Date-this._startTime,i=1e3*this._duration;i>t?this._runFrame(this._easeOut(t/i)):(this._runFrame(1),this._complete())},_runFrame:function(t){var i=this._startPos.add(this._offset.multiplyBy(t));e.DomUtil.setPosition(this._el,i),this.fire("step")},_complete:function(){e.Util.cancelAnimFrame(this._animId),this._inProgress=!1,this.fire("end")},_easeOut:function(t){return 1-Math.pow(1-t,this._easeOutPower)}}),e.Map.mergeOptions({zoomAnimation:e.DomUtil.TRANSITION&&!e.Browser.android23&&!e.Browser.mobileOpera}),e.DomUtil.TRANSITION&&e.Map.addInitHook(function(){e.DomEvent.on(this._mapPane,e.DomUtil.TRANSITION_END,this._catchTransitionEnd,this)}),e.Map.include(e.DomUtil.TRANSITION?{_zoomToIfClose:function(t,i){if(this._animatingZoom)return!0;if(!this.options.zoomAnimation)return!1;var s=this.getZoomScale(i),o=this._getCenterOffset(t)._divideBy(1-1/s);if(!this._offsetIsWithinView(o,1))return!1;e.DomUtil.addClass(this._mapPane,"leaflet-zoom-anim"),this.fire("movestart").fire("zoomstart"),this.fire("zoomanim",{center:t,zoom:i});var n=this._getCenterLayerPoint().add(o);return this._prepareTileBg(),this._runAnimation(t,i,s,n),!0},_catchTransitionEnd:function(){this._animatingZoom&&this._onZoomTransitionEnd()},_runAnimation:function(t,i,s,o,n){this._animateToCenter=t,this._animateToZoom=i,this._animatingZoom=!0,e.Draggable&&(e.Draggable._disabled=!0);var a=e.DomUtil.TRANSFORM,r=this._tileBg;clearTimeout(this._clearTileBgTimer),e.Util.falseFn(r.offsetWidth);var h=e.DomUtil.getScaleString(s,o),l=r.style[a];r.style[a]=n?l+" "+h:h+" "+l},_prepareTileBg:function(){var t=this._tilePane,i=this._tileBg;if(i&&this._getLoadedTilesPercentage(i)>.5&&.5>this._getLoadedTilesPercentage(t))return t.style.visibility="hidden",t.empty=!0,this._stopLoadingImages(t),s;i||(i=this._tileBg=this._createPane("leaflet-tile-pane",this._mapPane),i.style.zIndex=1),i.style[e.DomUtil.TRANSFORM]="",i.style.visibility="hidden",i.empty=!0,t.empty=!1,this._tilePane=this._panes.tilePane=i;var o=this._tileBg=t;e.DomUtil.addClass(o,"leaflet-zoom-animated"),this._stopLoadingImages(o)},_getLoadedTilesPercentage:function(t){var i,s,e=t.getElementsByTagName("img"),o=0;for(i=0,s=e.length;s>i;i++)e[i].complete&&o++;return o/s},_stopLoadingImages:function(t){var i,s,o,n=Array.prototype.slice.call(t.getElementsByTagName("img"));for(i=0,s=n.length;s>i;i++)o=n[i],o.complete||(o.onload=e.Util.falseFn,o.onerror=e.Util.falseFn,o.src=e.Util.emptyImageUrl,o.parentNode.removeChild(o))},_onZoomTransitionEnd:function(){this._restoreTileFront(),e.DomUtil.removeClass(this._mapPane,"leaflet-zoom-anim"),e.Util.falseFn(this._tileBg.offsetWidth),this._animatingZoom=!1,this._resetView(this._animateToCenter,this._animateToZoom,!0,!0),e.Draggable&&(e.Draggable._disabled=!1)},_restoreTileFront:function(){this._tilePane.innerHTML="",this._tilePane.style.visibility="",this._tilePane.style.zIndex=2,this._tileBg.style.zIndex=1},_clearTileBg:function(){this._animatingZoom||this.touchZoom._zooming||(this._tileBg.innerHTML="")}}:{}),e.Map.include({_defaultLocateOptions:{watch:!1,setView:!1,maxZoom:1/0,timeout:1e4,maximumAge:0,enableHighAccuracy:!1},locate:function(t){if(t=this._locationOptions=e.extend(this._defaultLocateOptions,t),!navigator.geolocation)return this._handleGeolocationError({code:0,message:"Geolocation not supported."}),this;var i=e.bind(this._handleGeolocationResponse,this),s=e.bind(this._handleGeolocationError,this);return t.watch?this._locationWatchId=navigator.geolocation.watchPosition(i,s,t):navigator.geolocation.getCurrentPosition(i,s,t),this},stopLocate:function(){return navigator.geolocation&&navigator.geolocation.clearWatch(this._locationWatchId),this},_handleGeolocationError:function(t){var i=t.code,s=t.message||(1===i?"permission denied":2===i?"position unavailable":"timeout");this._locationOptions.setView&&!this._loaded&&this.fitWorld(),this.fire("locationerror",{code:i,message:"Geolocation error: "+s+"."})},_handleGeolocationResponse:function(t){var i=180*t.coords.accuracy/4e7,s=2*i,o=t.coords.latitude,n=t.coords.longitude,a=new e.LatLng(o,n),r=new e.LatLng(o-i,n-s),h=new e.LatLng(o+i,n+s),l=new e.LatLngBounds(r,h),c=this._locationOptions;if(c.setView){var m=Math.min(this.getBoundsZoom(l),c.maxZoom);this.setView(a,m)}this.fire("locationfound",{latlng:a,bounds:l,accuracy:t.coords.accuracy})}})}(this,document),L.Proj={},L.Proj._isProj4Proj=function(t){return t.projName!==void 0},L.Proj.Projection=L.Class.extend({initialize:function(t,i){if(L.Proj._isProj4Proj(t))this._proj=t;else{var s=t;Proj4js.defs[s]=i,this._proj=new Proj4js.Proj(s)}},project:function(t){var i=new L.Point(t.lng,t.lat);return Proj4js.transform(Proj4js.WGS84,this._proj,i)},unproject:function(t,i){var s=Proj4js.transform(this._proj,Proj4js.WGS84,t.clone());return new L.LatLng(s.y,s.x,i)}}),L.Proj.CRS=L.Class.extend({includes:L.CRS,options:{transformation:new L.Transformation(1,0,-1,0)},initialize:function(t,i,s){var e,o,n,a;L.Proj._isProj4Proj(t)?(o=t,e=o.srsCode,a=i||{},this.projection=new L.Proj.Projection(o)):(e=t,n=i,a=s||{},this.projection=new L.Proj.Projection(e,n)),L.Util.setOptions(this,a),this.code=e,this.transformation=this.options.transformation,this.options.origin&&(this.transformation=new L.Transformation(1,-this.options.origin[0],-1,this.options.origin[1])),this.options.scales?this.scale=function(t){return this.options.scales[t]}:this.options.resolutions&&(this.scale=function(t){return 1/this.options.resolutions[t]})}}),L.Proj.CRS.TMS=L.Proj.CRS.extend({initialize:function(t,i,s,e){if(L.Proj._isProj4Proj(t)){var o=t,n=i,a=s||{};a.origin=[n[0],n[3]],L.Proj.CRS.prototype.initialize(o,a)}else{var r=t,h=i,n=s,a=e||{};a.origin=[n[0],n[3]],L.Proj.CRS.prototype.initialize(r,h,a)}this.projectedBounds=n}}),L.Proj.TileLayer={},L.Proj.TileLayer.TMS=L.TileLayer.extend({options:{tms:!0,continuousWorld:!0},initialize:function(t,i,s){if(!(i instanceof L.Proj.CRS.TMS))throw Error("CRS is not L.Proj.CRS.TMS.");L.TileLayer.prototype.initialize.call(this,t,s),this.crs=i;for(var e=this.options.minZoom;this.options.maxZoom>e;e++){var o=(this.crs.projectedBounds[3]-this.crs.projectedBounds[1])/this._projectedTileSize(e);if(Math.abs(o-Math.round(o))>.001)throw Error("Projected bounds does not match grid at zoom "+e)}},getTileUrl:function(t){var i=Math.round((this.crs.projectedBounds[3]-this.crs.projectedBounds[1])/this._projectedTileSize(this._map.getZoom()));return L.Util.template(this._url,L.Util.extend({s:this._getSubdomain(t),z:this._getZoomForUrl(),x:t.x,y:i-t.y-1},this.options))},_projectedTileSize:function(t){return this.options.tileSize/this.crs.scale(t)}}),"undefined"!=typeof module&&(module.exports=L.Proj),"undefined"!=typeof L&&L.CRS!==void 0&&(L.CRS.proj4js=function(){return function(t,i,s,e){return e=e||{},s&&(e.transformation=s),new L.Proj.CRS(t,i,e)}}()),L.Control.MousePosition=L.Control.extend({options:{position:"bottomleft",separator:" : ",emptyString:"Unavailable",lngFirst:!1,numDigits:5,lngFormatter:void 0,latFormatter:void 0},onAdd:function(t){return this._container=L.DomUtil.create("div","leaflet-control-mouseposition"),L.DomEvent.disableClickPropagation(this._container),t.on("mousemove",this._onMouseMove,this),this._container.innerHTML=this.options.emptyString,this._container},onRemove:function(t){t.off("mousemove",this._onMouseMove)},_onMouseMove:function(t){var i=L.Util.formatNum(t.latlng.lng,this.options.numDigits),s=L.Util.formatNum(t.latlng.lat,this.options.numDigits);this.options.lngFormatter&&(i=this.options.lngFormatter(i)),this.options.latFormatter&&(s=this.options.latFormatter(s));var e=this.options.lngFirst?i+this.options.separator+s:s+this.options.separator+i;this._container.innerHTML=e}}),L.Map.mergeOptions({positionControl:!1}),L.Map.addInitHook(function(){this.options.positionControl&&(this.positionControl=new L.Control.MousePosition,this.addControl(this.positionControl))}),L.control.mousePosition=function(t){return new L.Control.MousePosition(t)},function(t,i){L.KSP={},L.KSP.version="0.2.1",L.KSP.CRS={},L.KSP.CRS.EPSG4326=new L.Proj.CRS.TMS(new Proj4js.Proj("EPSG:4326"),[-180,-90,180,90],{resolutions:[.703125,.3515625,.17578125,.087890625,.0439453125,.02197265625]}),L.KSP.CelestialBody=L.Class.extend({initialize:function(t){if(!t.hasOwnProperty("id"))throw Error("must specify id");if(!t.hasOwnProperty("name"))throw Error("must specify name");if(t.hasOwnProperty("crs")){if(!(t.crs instanceof L.Proj.CRS.TMS))throw Error("crs is not an instance of L.Proj.CRS.TMS")}else this.crs=L.KSP.CRS.EPSG4326;t.hasOwnProperty("radius")||(this.radius=1),t.hasOwnProperty("thumbnail")||(this.thumbnail="body-unknown.png"),t.hasOwnProperty("baseLayers")||(this.baseLayers={}),L.Util.extend(this,t)},addTo:function(t){var i,s=t._body;if(t._body=this,t.fire("bodychangestart",{body:this,oldBody:s}),s){for(i in s.baseLayers)s.baseLayers.hasOwnProperty(i)&&t.removeLayer(s.baseLayers[i]);for(i in s.overlays)s.overlays.hasOwnProperty(i)&&t.removeLayer(s.overlays[i])}var e=this.defaultLayer||this.baseLayers.Satellite;if(e){for(i in this.baseLayers)if(this.baseLayers.hasOwnProperty(i)&&this.baseLayers[i]._type===t._baseLayerType){e=this.baseLayers[i];break}t.addLayer(e),t.fire("baselayerchange",{layer:e})}for(i in this.overlays)this.overlays.hasOwnProperty(i)&&t._overlayTypes.indexOf(this.overlays[i]._type)>=0&&(t.addLayer(this.overlays[i]),t.fire("layeradd",{layer:this.overlays[i]}));t.fire("bodychangeend",{body:this,oldBody:s})},onAdd:function(t){this.addTo(t)},removeFrom:function(t){L.KSP.CelestialBody.DUMMY.addTo(t)},onRemove:function(t){this.removeFrom(t)}}),L.KSP.celestialBody=function(t){return new L.KSP.CelestialBody(t)},L.KSP.CelestialBody.DUMMY=L.KSP.celestialBody({id:"",name:"",crs:L.KSP.CRS.EPSG4326}),L.KSP.CelestialBody.ALL_PLANETARY=[L.KSP.CelestialBody.DUMMY],L.KSP.Map=L.Map.extend({options:{crs:L.KSP.CRS.EPSG4326,continuousWorld:!0},initialize:function(t,i){this._baseLayerType=-1,this._overlayTypes=[],L.Util.setOptions(this,i),this.startTrackingLayerState(),this.on("bodychangestart",this._onBodyChangeStart).on("bodychangeend",this._onBodyChangeEnd),L.Map.prototype.initialize.call(this,t,this.options)},clampZoom:function(){var t=this.getZoom(),i=this.getMinZoom(),s=this.getMaxZoom();i>t?this.setZoom(i):t>s?this.setZoom(s):this.fire("zoomend",this)},_onBodyChangeStart:function(){this.stopTrackingLayerState()},_onBodyChangeEnd:function(){this.clampZoom(),this.startTrackingLayerState()},_onLayerStateChange:function(t){if("layeradd"===t.type)t.layer instanceof L.KSP.TileLayer?this._baseLayerType=t.layer._type:t.layer instanceof L.KSP.LayerGroup&&0>this._overlayTypes.indexOf(t.layer._type)&&this._overlayTypes.push(t.layer._type);else if(t.layer instanceof L.KSP.LayerGroup){var i,s,e=t.layer._type,o=this._overlayTypes;for(i=o.length-1;i>=0;i--)s=o[i],s===e&&o.splice(i,1)}},startTrackingLayerState:function(){this.on("layeradd",this._onLayerStateChange).on("layerremove",this._onLayerStateChange)},stopTrackingLayerState:function(){this.off("layeradd",this._onLayerStateChange).off("layerremove",this._onLayerStateChange)}}),L.KSP.map=function(t,i){return new L.KSP.Map(t,i)},L.KSP.TileLayer=L.Proj.TileLayer.TMS.extend({statics:{TYPE_SATELLITE:0,TYPE_COLORRELIEF:1,TYPE_SLOPE:2,DEFAULT_URL:"http://tiles.kerbalmaps.com/{body}/{style}/{z}/{x}/{y}.png"},options:{continuousWorld:!1,noWrap:!1,minZoom:0,maxZoom:5,attribution:"Map data © Joel Pedraza"},initialize:function(t,i,s,e){L.Util.setOptions(this,e),this._type=t,L.Proj.TileLayer.TMS.prototype.initialize.call(this,i,s,this.options)}}),L.KSP.tileLayer=function(t,i,s,e){return new L.KSP.TileLayer(t,i,s,e)},L.KSP.LayerGroup=L.LayerGroup.extend({statics:{TYPE_SPACECENTER:0,TYPE_ANOMALY:1},initialize:function(t,i){this._type=t,L.LayerGroup.prototype.initialize.call(this,i)}}),L.KSP.layerGroup=function(t,i){return new L.KSP.LayerGroup(t,i)},L.KSP.Icon={},L.KSP.Icon.SPACECENTER=new L.Icon({iconUrl:"../assets/images/markers-spacecenter.png",shadowUrl:"../assets/images/markers-shadow.png",iconSize:[30,40],shadowSize:[35,16],iconAnchor:[15,40],shadowAnchor:[10,12],popupAnchor:[0,-35]}),L.KSP.Icon.ANOMALY=new L.Icon({iconUrl:"../assets/images/markers-anomaly.png",shadowUrl:"../assets/images/markers-shadow.png",iconSize:[30,40],shadowSize:[35,16],iconAnchor:[15,40],shadowAnchor:[10,12],popupAnchor:[0,-35]}),L.KSP.Legend={},L.KSP.Legend.SLOPE={"≥ 60°":"#E19678","< 60°":"#C86464","< 30°":"#965A64","< 15°":"#645064","< 5°":"#325064","0°":"#32465A"},L.KSP.Control=L.KSP.control={},L.KSP.Control.Legend=L.Control.extend({options:{position:"bottomright"},onAdd:function(t){return this._container=L.DomUtil.create("div","leaflet-control-legend"),t.on("baselayerchange",this._onLayerChange,this),this._container},_update:function(t){if(this._container.innerHTML="",t){for(var i in t)t.hasOwnProperty(i)&&(this._container.innerHTML+=''+i+"
    ");L.DomUtil.addClass(this._container,"leaflet-control-legend-visible")}else this._container.className=this._container.className.replace(" leaflet-control-legend-visible","")},_onLayerChange:function(t){this._update(t.layer.options.legend)}}),L.Map.mergeOptions({legendControl:!0}),L.Map.addInitHook(function(){this.options.bodyControl&&(this.legendControl=new L.KSP.Control.Legend,this.addControl(this.legendControl))}),L.control.legend=function(t){return new L.KSP.Control.Legend(t)},L.KSP.Control.Scale=L.Control.Scale.extend({options:{imperial:!1},onAdd:function(t){this._radius=0,t._body&&(this._radius=t._body.radius);var i=L.Control.Scale.prototype.onAdd.call(this,t);return t.on("bodychangeend",this._onBodyChangeEnd,this),i},onRemove:function(t){L.Control.Scale.prototype.onRemove.call(this,t),t.off("bodychangeend",this._onBodyChangeEnd)},_onBodyChangeEnd:function(t){this._radius=t.body.radius,this._update()},_update:function(){var t=this._map.getBounds(),i=t.getCenter().lat,s=this._radius*Math.PI*Math.cos(i*Math.PI/180),e=s*(t.getNorthEast().lng-t.getSouthWest().lng)/180,o=this._map.getSize(),n=this.options,a=0;o.x>0&&(a=e*(n.maxWidth/o.x)),this._updateScales(n,a)}}),L.KSP.Map.mergeOptions({scaleControl:!1}),L.KSP.Map.addInitHook(function(){this.options.scaleControl&&(this.scaleControl=new L.KSP.Control.Scale,this.addControl(this.scaleControl))}),L.KSP.control.scale=function(t){return new L.KSP.Control.Scale(t)},L.KSP.Control.CelestialBody=L.Control.extend({options:{position:"topright",collapsed:!0},initialize:function(t,i){L.Util.setOptions(this,i),this._bodies=t,this._timeInMillis=(new Date).valueOf(),this._weekInMillis=6048e5},onAdd:function(){return this._initLayout(),this._update(),this._map.on("bodychangeend",this._update,this),this._container},_initLayout:function(){var t="leaflet-control-celestialbodies",s=this._container=L.DomUtil.create("div",t),e=this._bodies;if(this.options.collapsed){L.DomEvent.on(s,"mouseover",this._expand,this).on(s,"mouseout",this._collapse,this);var o=this._bodiesLink=L.DomUtil.create("a",t+"-toggle",s);o.href="#",o.title="Celestial Bodies",L.DomEvent.on(o,"focus",this._expand,this),this._map.on("movestart",this._collapse,this)}var n=this._list=L.DomUtil.create("ul",t+"-list",s);for(var a in e)if(e.hasOwnProperty(a)){var r=this._addBody(e[a],n);if(e[a].children){var h=i.createElement("ul");for(var l in e[a].children)e[a].children.hasOwnProperty(l)&&this._addBody(e[a].children[l],h);r.appendChild(h)}}},_update:function(){this._map._body&&(this._bodiesLink.style.backgroundImage='url("'+this._map._body.thumbnail+'")')},_addBody:function(t,s){var e,o=i.createElement("li"),n=i.createElement("img");if(n.src=t.thumbnail,n.alt=o.title=t.name,t.addedOn){this._timeInMillis-t.addedOnKerbal Space Center
    -0.0969 : -74.6004"),L.marker([20.5829,-146.5116],{icon:L.KSP.Icon.SPACECENTER}).bindPopup("Kerbal Space Center 2
    20.5829 : -146.5116"),L.marker([-1.5409,-71.9099],{icon:L.KSP.Icon.SPACECENTER}).bindPopup("Island Airfield
    -1.5409 : -71.9099")]),Anomalies:L.KSP.layerGroup(L.KSP.LayerGroup.TYPE_ANOMALY,[L.marker([.1023,-74.5684],{icon:L.KSP.Icon.ANOMALY}).bindPopup("0.1023 : -74.5684"),L.marker([20.6709,-146.4968],{icon:L.KSP.Icon.ANOMALY}).bindPopup("20.6709 : -146.4968"),L.marker([35.5705,-74.9773],{icon:L.KSP.Icon.ANOMALY}).bindPopup("35.5705 : -74.9773"),L.marker([-.6402,-80.7668],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-0.6402 : -80.7668"),L.marker([-28.8083,-13.4401],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-28.8083 : -13.4401"),L.marker([-6.5057,-141.6856],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-6.5057 : -141.6856"),L.marker([81.9551,-128.518],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-81.9551 : -128.518")])}}),L.KSP.CelestialBody.MUN=L.KSP.celestialBody({id:"mun",name:"Mun",crs:L.KSP.CRS.EPSG4326,radius:2e5,addedOn:13682304e5,lastUpdated:1368144e6,thumbnail:"body-mun.png",baseLayers:{Satellite:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SATELLITE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{body:"mun",style:"sat"}),"Color Relief":L.KSP.tileLayer(L.KSP.TileLayer.TYPE_COLORRELIEF,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{body:"mun",style:"color",legend:{"3150 m":"#EBEBEB","-180 m":"#232323"}}),Slope:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SLOPE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{body:"mun",style:"slope",legend:L.KSP.Legend.SLOPE})},overlays:{Anomalies:L.KSP.layerGroup(L.KSP.LayerGroup.TYPE_ANOMALY,[L.marker([-9.8314,25.9177],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-9.8314 : 25.9177"),L.marker([-82.2063,102.9305],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-82.2063 : 102.9305"),L.marker([57.6604,9.1422],{icon:L.KSP.Icon.ANOMALY}).bindPopup("57.6604 : 9.1422"),L.marker([2.4695,81.5133],{icon:L.KSP.Icon.ANOMALY}).bindPopup("2.4695 : 81.5133"),L.marker([12.4432,39.178],{icon:L.KSP.Icon.ANOMALY}).bindPopup("12.4432 : 39.1780"),L.marker([-12.4431,-140.822],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-12.4431 : -140.8220"),L.marker([.7027,22.747],{icon:L.KSP.Icon.ANOMALY}).bindPopup("0.7027 : 22.7470"),L.marker([-70.9556,-68.1378],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-70.9556,-68.1378")])}}),L.KSP.CelestialBody.MINMUS=L.KSP.celestialBody({id:"minmus",name:"Minmus",crs:L.KSP.CRS.EPSG4326,radius:6e4,addedOn:13682304e5,lastUpdated:13682304e5,thumbnail:"body-minmus.png",baseLayers:{Satellite:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SATELLITE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"sat",body:"minmus"}),"Color Relief":L.KSP.tileLayer(L.KSP.TileLayer.TYPE_COLORRELIEF,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"color",body:"minmus",legend:{"5750 m":"#414B41","2500 m":"#BEE6C3","1 m":"#96CDB4","0 m":"#87B9A5"}}),Slope:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SLOPE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"slope",body:"minmus",legend:L.KSP.Legend.SLOPE})},overlays:{Anomalies:L.KSP.layerGroup(L.KSP.LayerGroup.TYPE_ANOMALY,[L.marker([23.7768,60.0462],{icon:L.KSP.Icon.ANOMALY}).bindPopup("23.7768 : 60.0462")])}}),L.KSP.CelestialBody.DUNA=L.KSP.celestialBody({id:"duna",name:"Duna",crs:L.KSP.CRS.EPSG4326,radius:32e4,addedOn:13688352e5,lastUpdated:13688352e5,thumbnail:"body-duna.png",baseLayers:{Satellite:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SATELLITE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"sat",body:"duna"}),"Color Relief":L.KSP.tileLayer(L.KSP.TileLayer.TYPE_COLORRELIEF,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"color",body:"duna",legend:{"4800 m":"#C3A082","4000 m":"#966446","3000 m":"#733219","2000 m":"#501E14","1000 m":"#3C140F","0 m":"#280F0A"}}),Slope:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SLOPE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"slope",body:"duna",legend:L.KSP.Legend.SLOPE})},overlays:{Anomalies:L.KSP.layerGroup(L.KSP.LayerGroup.TYPE_ANOMALY,[L.marker([17.0483,-85.4717],{icon:L.KSP.Icon.ANOMALY}).bindPopup("17.0483 : -85.4717"),L.marker([-30.3525,-28.6828],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-30.3525 : -28.6828"),L.marker([-66.1344,-160.7432],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-66.1344 : -160.7432")])}}),L.KSP.CelestialBody.IKE=L.KSP.celestialBody({id:"ike",name:"Ike",crs:L.KSP.CRS.EPSG4326,radius:13e4,addedOn:13688352e5,lastUpdated:13688352e5,thumbnail:"body-ike.png",baseLayers:{Satellite:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SATELLITE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"sat",body:"ike"}),"Color Relief":L.KSP.tileLayer(L.KSP.TileLayer.TYPE_COLORRELIEF,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"color",body:"ike",legend:{"13000 m":"#828282","11000 m":"#6E6E6E","9000 m":"#5A5A5A","7000 m":"#464646","5000 m":"#323232","2500 m":"#191919","70 m":"#070707"}}),Slope:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SLOPE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"slope",body:"ike",legend:L.KSP.Legend.SLOPE})},overlays:{}}),L.KSP.CelestialBody.DRES=L.KSP.celestialBody({id:"dres",name:"Dres",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-dres.png"}),L.KSP.CelestialBody.JOOL=L.KSP.celestialBody({id:"jool",name:"Jool",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-jool.png"}),L.KSP.CelestialBody.LAYTHE=L.KSP.celestialBody({id:"laythe",name:"Laythe",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-laythe.png"}),L.KSP.CelestialBody.VALL=L.KSP.celestialBody({id:"vall",name:"Vall",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-vall.png"}),L.KSP.CelestialBody.TYLO=L.KSP.celestialBody({id:"tylo",name:"Tylo",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-tylo.png"}),L.KSP.CelestialBody.BOP=L.KSP.celestialBody({id:"bop",name:"Bop",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-bop.png"}),L.KSP.CelestialBody.POL=L.KSP.celestialBody({id:"pol",name:"Pol",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-pol.png"}),L.KSP.CelestialBody.EELOO=L.KSP.celestialBody({id:"eeloo",name:"Eeloo",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-eeloo.png"}),L.KSP.CelestialBody.KERBIN.defaultLayer=L.KSP.CelestialBody.KERBIN.baseLayers.Satellite,L.KSP.CelestialBody.MUN.defaultLayer=L.KSP.CelestialBody.MUN.baseLayers.Satellite,L.KSP.CelestialBody.MINMUS.defaultLayer=L.KSP.CelestialBody.MINMUS.baseLayers.Satellite,L.KSP.CelestialBody.EVE.children=[L.KSP.CelestialBody.GILLY],L.KSP.CelestialBody.KERBIN.children=[L.KSP.CelestialBody.MUN,L.KSP.CelestialBody.MINMUS],L.KSP.CelestialBody.DUNA.children=[L.KSP.CelestialBody.IKE],L.KSP.CelestialBody.JOOL.children=[L.KSP.CelestialBody.LAYTHE,L.KSP.CelestialBody.VALL,L.KSP.CelestialBody.TYLO,L.KSP.CelestialBody.BOP,L.KSP.CelestialBody.POL],L.KSP.CelestialBody.GILLY.parent=L.KSP.CelestialBody.EVE,L.KSP.CelestialBody.MUN.parent=L.KSP.CelestialBody.MINMUS.parent=L.KSP.CelestialBody.KERBIN,L.KSP.CelestialBody.IKE.parent=L.KSP.CelestialBody.DUNA,L.KSP.CelestialBody.LAYTHE.parent=L.KSP.CelestialBody.VALL.parent=L.KSP.CelestialBody.TYLO.parent=L.KSP.CelestialBody.BOP.parent=L.KSP.CelestialBody.POL.parent=L.KSP.CelestialBody.JOOL,L.KSP.CelestialBody.ALL_PLANETARY=[L.KSP.CelestialBody.MOHO,L.KSP.CelestialBody.EVE,L.KSP.CelestialBody.KERBIN,L.KSP.CelestialBody.DUNA,L.KSP.CelestialBody.DRES,L.KSP.CelestialBody.JOOL,L.KSP.CelestialBody.EELOO],L.KSP.Map.addInitHook(function(){this.options.layers=[L.KSP.CelestialBody.KERBIN]})}(this,document); +var Settings = Class.create({ + initialize: function(defaultHost, defaultPort){ + if(!this.getHost()){ this.setHost(defaultHost)} + if(!this.getPort()){ this.setPort(defaultPort)} + }, + + getHost: function(){ + return this.get('host') + }, + + getPort: function(){ + return this.get('port') + }, + + setHost: function(value){ + return this.set('host', value) + }, + + setPort: function(value){ + return this.set('port', value) + }, + + get: function(property){ + return localStorage.getItem(property) + }, + + set: function(property, value){ + return localStorage.setItem(property, value) + } +}) +var Telemachus = Class.create({ + initialize: function(host, port){ + this.updateConnection(host, port) + this.receiverFunctions = [] + this.subscribedFields = {} + this.orbitingBodies = this.getOrbitalBodies() + this.rate = 500 + + this.loopTimeout = setTimeout(this.poll.bind(this), this.rate) + }, + + url: function(){ + return "http://" + this.host + ":" + this.port + "/telemachus/datalink" + }, + + updateConnection: function(host, port){ + this.host = host + this.port = port + }, + + addReceiverFunction: function(func){ + this.receiverFunctions.push(func) + }, + + subscribeToData: function(fields){ + for (var i = fields.length - 1; i >= 0; i--) { + var field = fields[i] + this.subscribedFields[field] = field + }; + }, + + dispatchMessages: function(data){ + for (var i = this.receiverFunctions.length - 1; i >= 0; i--) { + try{ + this.receiverFunctions[i](data) + } catch(e){ + console.error(e) + } + }; + }, + + send: function(message){ + this.socket.send(JSON.stringify(message)) + }, + + getOrbitalBodyInfo: function(name){ + var properties = this.orbitingBodies[name] + + if(properties){ + return Object.extend({name: name}, properties) + } else{ + return null + } + }, + + notifyIfLOS: function(request){ + if(request.transport.status == 0){ + document.fire('telemachus:loss-of-signal') + return true + } + return false + }, + + prepareParams: function(params){ + var normalizedParams = [] + Object.keys(params).forEach(function(field){ + var sanitizedFieldName = field.replace("[", "{").replace("]","}") + normalizedParams.push(sanitizedFieldName + "=" + field) + }) + return normalizedParams + }, + + convertData: function(rawData){ + var data = {} + var startBracesRegexp = /\{/g + var endBracesRegexp = /\}/g + + Object.keys(rawData).forEach(function(key){ + var convertedFieldName = key.replace(startBracesRegexp, "[").replace(endBracesRegexp, "]") + data[convertedFieldName] = rawData[key] + }) + + return data + }, + + poll: function(){ + var params = this.prepareParams(this.subscribedFields) + var requestURL = this.url() + "?" + params.join("&") + + new Ajax.Request(requestURL, { + method: "get", + onSuccess: function(response){ + var rawData = JSON.parse(response.responseText) + var data = this.convertData(rawData) + + this.dispatchMessages(data) + }.bind(this), + onException: this.notifyIfLOS.bind(this), + onComplete: function(response){ + setTimeout(this.poll.bind(this),this.rate); + }.bind(this) + }) + }, + + sendMessage: function(params, callback){ + new Ajax.Request(this.url(), { + method: "post", + postBody: JSON.stringify(params), + // parameters: params, + onSuccess: function(response){ + var rawData = JSON.parse(response.responseText) + var data = this.convertData(rawData) + callback(data) + }.bind(this), + onException: this.notifyIfLOS.bind(this) + }) + }, + + cameraURL: function(){ + return "http://" + this.host + ":" + this.port + "/telemachus/cameras" + }, + + getCameraList: function(callback){ + new Ajax.Request(this.cameraURL(), { + method: "get", + // parameters: params, + onSuccess: function(response){ + var data = JSON.parse(response.responseText) + callback(data) + }.bind(this), + onException: this.notifyIfLOS.bind(this) + }) + }, + + getOrbitalBodies: function(){ + return { + "Sun" : { + id: 0, + referenceBodyName: null, + mapBody: null, + atmosphericRadius: 0, + color: '#FFFF00', + surfaceGravity: 17.1 //m/s^2, + }, + "Kerbin" : { + id: 1, + referenceBodyName: "Sun", + mapBody: L.KSP.CelestialBody.KERBIN, + atmosphericRadius: 70000, + color: '#4a5472', + surfaceGravity: 9.81 //m/s^2 + }, + "Mun" : { + id: 2, + referenceBodyName: "Kerbin", + mapBody: L.KSP.CelestialBody.MUN, + atmosphericRadius: 0, + color: '#e2e0d7', + surfaceGravity: 1.63 //m/s^2 + }, + "Minmus" : { + id: 3, + referenceBodyName: "Kerbin", + mapBody: L.KSP.CelestialBody.MINMUS, + color: '#98f2c5', + atmosphericRadius: 0, + surfaceGravity: 0.491 //m/s^2 + }, + "Moho" : { + id: 4, + referenceBodyName: "Sun", + mapBody: L.KSP.CelestialBody.MOHO, + atmosphericRadius: 0, + color: '#fdc39e', + surfaceGravity: 2.70 //m/s^2 + }, + "Eve" : { + id: 5, + referenceBodyName: "Sun", + mapBody: L.KSP.CelestialBody.EVE, + atmosphericRadius: 90000, + color: '#c394fe', + surfaceGravity: 16.7 //m/s^2 + }, + "Duna" : { + id: 6, + referenceBodyName: "Sun", + mapBody: L.KSP.CelestialBody.DUNA, + atmosphericRadius: 50000, + color: '#fc5e49', + surfaceGravity: 2.94 //m/s^2 + }, + "Ike" : { + id: 7, + referenceBodyName: "Duna", + mapBody: L.KSP.CelestialBody.IKE, + atmosphericRadius: 0, + color: '#e2e0d7', + surfaceGravity: 1.10 //m/s^2 + }, + "Jool" : { + id: 8, + referenceBodyName: "Sun", + mapBody: L.KSP.CelestialBody.JOOL, + atmosphericRadius: 200000, + color: '#C5DCAB', + surfaceGravity: 7.85 //m/s^2 + }, + "Laythe" : { + id: 9, + referenceBodyName: "Jool", + mapBody: L.KSP.CelestialBody.LAYTHE, + atmosphericRadius: 50000, + color: '#a8b4fe', + surfaceGravity: 7.85 //m/s^2 + }, + "Vall" : { + id: 10, + referenceBodyName: "Jool", + mapBody: L.KSP.CelestialBody.VALL, + atmosphericRadius: 0, + color: '#b0f4fe', + surfaceGravity: 2.31 //m/s^2 + }, + "Bop" : { + id: 11, + referenceBodyName: "Jool", + mapBody: L.KSP.CelestialBody.BOP, + atmosphericRadius: 0, + color: '#c64605', + surfaceGravity: 0.589 //m/s^2 + }, + "Tylo" : { + id: 12, + referenceBodyName: "Jool", + mapBody: L.KSP.CelestialBody.TYLO, + atmosphericRadius: 0, + color: '#fdf7ed', + surfaceGravity: 7.85 //m/s^2 + }, + "Gilly" : { + id: 13, + referenceBodyName: "Eve", + mapBody: L.KSP.CelestialBody.GILLY, + atmosphericRadius: 0, + color: '#fdcbb1', + surfaceGravity: 0.049 //m/s^2 + }, + "Pol" : { + id: 14, + referenceBodyName: "Pol", + mapBody: L.KSP.CelestialBody.POL, + atmosphericRadius: 0, + color: '#fec681', + surfaceGravity: 0.373 //m/s^2 + }, + "Dres" : { + id: 15, + referenceBodyName: "Sun", + mapBody: L.KSP.CelestialBody.DRES, + atmosphericRadius: 0, + color: '#fef8f9', + surfaceGravity: 1.13 //m/s^2 + }, + "Eeloo" : { + id: 16, + referenceBodyName: "Sun", + mapBody: L.KSP.CelestialBody.EELOO, + atmosphericRadius: 0, + color: '#e5fafe', + surfaceGravity: 1.69 //m/s^2 + } + } + } +}) +var TitleBar = Class.create({ + initialize: function(datalink, title_bar_id){ + this.datalink = datalink + this.title_bar_id = title_bar_id + this.title_bar = $(this.title_bar_id) + this.initializeLOSNotifier() + this.initializeDatalink() + }, + + update: function(data){ + window.requestAnimationFrame(function(){ + this.title_bar.down("#world-clock").update(TimeFormatters.formatUT(data["t.universalTime"])) + this.title_bar.down("#mission-time").update(TimeFormatters.formatMET(data["v.missionTime"])) + + this.title_bar.down("#mission-time").removeClassName("loss-of-signal") + }.bind(this)) + }, + + initializeLOSNotifier:function(){ + document.observe('telemachus:loss-of-signal', function(){ + window.requestAnimationFrame(function(){ + this.title_bar.down("#mission-time").update("⚠ LOS ⚠") + this.title_bar.down("#mission-time").addClassName("loss-of-signal") + }.bind(this)) + }.bind(this)) + }, + + initializeDatalink: function(){ + this.datalink.subscribeToData([ + 't.timeWarp', 't.universalTime', 'v.missionTime' + ]) + + this.datalink.addReceiverFunction(this.update.bind(this)) + }, +}) +var ButtonIndicator = Class.create({ + initialize: function(datalink, indicatorId, apiButtonString){ + this.datalink = datalink + this.indicatorId = indicatorId + this.indicator = $(this.indicatorId) + this.apiButtonString = apiButtonString + this.initializeDatalink() + }, + + update: function(data){ + if(data[this.apiButtonString] == true){ + this.indicator.addClassName("on") + } else{ + this.indicator.removeClassName("on") + } + }, + + initializeDatalink: function(){ + this.datalink.subscribeToData([this.apiButtonString]) + + this.datalink.addReceiverFunction(this.update.bind(this)) + }, +}) +var ReadoutTable = Class.create({ + initialize: function(datalink, tableId, dataRows){ + this.datalink = datalink + this.tableId = tableId + this.table = $(this.tableId) + this.dataRows = dataRows + this.initializeDatalink() + }, + + update: function(data){ + window.requestAnimationFrame(function(){ + this.dataRows.forEach(function(row){ + var rowId = row.label + var tableRow = this.table.down("tr[data-label='"+ rowId +"']") + + if(!tableRow){ + var tableRow = new Element("tr", { + "data-label" : rowId + }) + + tableRow.insert("" + row.label + "") + this.table.insert(tableRow) + } + + tableRow.down("td").update(row.formatter(data[row.value])) + }.bind(this)) + }.bind(this)) + }, + + initializeDatalink: function(){ + var dataValues = this.dataRows.map(function(dataRow){ + return dataRow.value + }) + + this.datalink.subscribeToData(dataValues) + + this.datalink.addReceiverFunction(this.update.bind(this)) + }, +}) +var ResourceMonitor = Class.create({ + initialize: function(datalink, resourceName, options){ + this.datalink = datalink + this.resourceName = resourceName + this.options = Object.extend({ + currentStageProgressBar: null, + totalProgressBar: null, + valuePrefix: null + }, options) + + this.resourceStrings = this.buildResourceStrings() + + this.initializeDatalink() + }, + + update: function(data){ + window.requestAnimationFrame(function(){ + if(this.options.totalProgressBar){ + this.options.totalProgressBar.value = data[this.resourceStrings.totalAvailable] + this.options.totalProgressBar.max = data[this.resourceStrings.totalMax] + } + + if(this.options.currentStageProgressBar){ + this.options.currentStageProgressBar.value = data[this.resourceStrings.currentStageAvailable] + this.options.currentStageProgressBar.max = data[this.resourceStrings.currentStageMax] + } + + this.updateValue("-total-value", data[this.resourceStrings.totalAvailable]) + this.updateValue("-total-max", data[this.resourceStrings.totalMax]) + + this.updateValue("-current-stage-value", data[this.resourceStrings.currentStageAvailable]) + this.updateValue("-current-stage-max", data[this.resourceStrings.currentStageMax]) + }.bind(this)) + }, + + updateValue: function(id, value){ + if($(this.options.valuePrefix + id)){ + if(value < 0){ + $(this.options.valuePrefix + id).update("NA") + } else{ + $(this.options.valuePrefix + id).update(value.toFixed(2)) + } + } + }, + + buildResourceStrings: function(){ + return { + totalAvailable: "r.resource["+ this.resourceName +"]", + totalMax: "r.resourceMax["+ this.resourceName +"]", + currentStageAvailable: "r.resourceCurrent["+ this.resourceName +"]", + currentStageMax: "r.resourceCurrentMax["+ this.resourceName +"]", + } + }, + + initializeDatalink: function(){ + this.datalink.subscribeToData([ + this.resourceStrings.totalAvailable, + this.resourceStrings.totalMax, + this.resourceStrings.currentStageAvailable, + this.resourceStrings.currentStageMax + ]) + + this.datalink.addReceiverFunction(this.update.bind(this)) + }, +}) +var DataTable = Class.create({ + initialize: function(tableID, dataRows){ + this.tableID = tableID + this.table = $(this.tableID) + this.dataRows = dataRows + }, + + update: function(){ + window.requestAnimationFrame(function(){ + this.dataRows.forEach(function(row){ + var rowId = row.label + var tableRow = this.table.down("tr[data-label='"+ rowId +"']") + + if(!tableRow){ + var tableRow = new Element("tr", { + "data-label" : rowId + }) + + tableRow.insert("" + row.label + "") + this.table.insert(tableRow) + } + + tableRow.down("td").update(row.value) + }.bind(this)) + }.bind(this)) + }, + + clear: function(){ + window.requestAnimationFrame(function(){ + this.dataRows = [] + this.table.innerHTML = "" + }.bind(this)) + } +}) +var AtmosphericDensityGauge = Class.create({ + initialize: function(datalink, gaugeID){ + this.datalink = datalink + this.gaugeID = gaugeID + this.gauge = $(this.gaugeID) + this.initializeDatalink() + this.func = function(x){return Math.log(2.0 * x)} + }, + + update: function(data){ + var max = this.func(100) + var value = this.func(data['v.atmosphericPressure'] * 100) + if(!isFinite(value)){ value = 0 } + + this.gauge.value = value + this.gauge.max = max + }, + + initializeDatalink: function(){ + this.datalink.subscribeToData(['v.atmosphericPressure']) + + this.datalink.addReceiverFunction(this.update.bind(this)) + }, +}) +var ThrottleGauge = Class.create({ + initialize: function(datalink, gaugeID){ + this.datalink = datalink + this.gaugeID = gaugeID + this.gauge = $(this.gaugeID) + this.initializeDatalink() + }, + + update: function(data){ + this.gauge.value = data['f.throttle'] * 100 + this.gauge.max = 100 + }, + + initializeDatalink: function(){ + this.datalink.subscribeToData(['f.throttle']) + + this.datalink.addReceiverFunction(this.update.bind(this)) + }, +}) +/* + Graticule plugin for Leaflet powered maps. +*/ +L.Graticule = L.GeoJSON.extend({ + + options: { + style: { + color: '#333', + weight: 1 + }, + interval: 20 + }, + + initialize: function (options) { + L.Util.setOptions(this, options); + this._layers = {}; + + if (this.options.sphere) { + this.addData(this._getFrame()); + } else { + this.addData(this._getGraticule()); + } + }, + + _getFrame: function() { + return { "type": "Polygon", + "coordinates": [ + this._getMeridian(-180).concat(this._getMeridian(180).reverse()) + ] + }; + }, + + _getGraticule: function () { + var features = [], interval = this.options.interval; + + // Meridians + for (var lng = 0; lng <= 180; lng = lng + interval) { + features.push(this._getFeature(this._getMeridian(lng), { + "name": (lng) ? lng.toString() + "° E" : "Prime meridian" + })); + if (lng !== 0) { + features.push(this._getFeature(this._getMeridian(-lng), { + "name": lng.toString() + "° W" + })); + } + } + + // Parallels + for (var lat = 0; lat <= 90; lat = lat + interval) { + features.push(this._getFeature(this._getParallel(lat), { + "name": (lat) ? lat.toString() + "° N" : "Equator" + })); + if (lat !== 0) { + features.push(this._getFeature(this._getParallel(-lat), { + "name": lat.toString() + "° S" + })); + } + } + + return { + "type": "FeatureCollection", + "features": features + }; + }, + + _getMeridian: function (lng) { + lng = this._lngFix(lng); + var coords = []; + for (var lat = -90; lat <= 90; lat++) { + coords.push([lng, lat]); + } + return coords; + }, + + _getParallel: function (lat) { + var coords = []; + for (var lng = -180; lng <= 180; lng++) { + coords.push([this._lngFix(lng), lat]); + } + return coords; + }, + + _getFeature: function (coords, prop) { + return { + "type": "Feature", + "geometry": { + "type": "LineString", + "coordinates": coords + }, + "properties": prop + }; + }, + + _lngFix: function (lng) { + if (lng >= 180) return 179.999999; + if (lng <= -180) return -179.999999; + return lng; + } + +}); + +L.graticule = function (options) { + return new L.Graticule(options); +}; +var PositionMap = Class.create({ + initialize: function(datalink, mapId, options){ + this.datalink = datalink + this.mapId = mapId + this.noMapIndicatorId = (mapId + '-no-map') + this.previousBody = "KERBIN" + this.options = Object.extend({ + lockOnVessel: true + }, options) + this.initializeMap() + this.initializeNoMapIndicator() + this.initializeDatalink() + }, + + update: function(data){ + window.requestAnimationFrame(function(){ + if(this.isMapAvailable(data)){ + this.showMap() + this.updateBodyIfNecessary(data) + this.setCoordinatesForMapObject(this.coordinates, data['v.lat'], data['v.long']) + if(this.options.lockOnVessel){ + this.map.panTo([data['v.lat'], data['v.long']]) + } + } else{ + this.hideMap() + } + }.bind(this)) + }, + + updateBodyIfNecessary: function(data){ + var bodyName = data['v.body'].toUpperCase() + if(this.previousBody != bodyName){ + newBody = L.KSP.CelestialBody[bodyName]; + newBody.addTo(this.map); + this.previousBody = bodyName; + } + }, + + initializeMap: function(){ + this.map = new L.KSP.Map(this.mapId, { + layers: [L.KSP.CelestialBody[this.previousBody.toUpperCase()]], + zoom: 'fit', + bodyControl: false, + layerControl: true, + scaleControl: true + }) + + this.map.fitWorld() + + L.graticule().addTo(this.map) + + var circleMarkerOptions = { + // fill: false, + color: '#FD7E23', + opacity: 1.0, + fillOpacity: 1.0, + radius: 5 + } + + this.coordinates = L.circleMarker([0, 0], circleMarkerOptions) + this.coordinates.addTo(this.map) + }, + + convertCoordinatesToMap: function(latitude, longitude){ + return [latitude, longitude > 180 ? longitude - 360 : longitude] + }, + + setCoordinatesForMapObject: function(object, latitude, longitude){ + var convertedCoordinates = this.convertCoordinatesToMap(latitude, longitude) + object.setLatLng([convertedCoordinates[0], convertedCoordinates[1]]) + }, + + isMapAvailable: function(data){ + return data['v.body'].toUpperCase() != "SUN" + }, + + hideMap: function(){ + $(this.mapId).hide() + this.noMapIndicator.removeClassName("hidden") + }, + + showMap: function(){ + $(this.mapId).show() + this.noMapIndicator.addClassName("hidden") + }, + + initializeNoMapIndicator: function(){ + this.noMapIndicator = $(this.noMapIndicatorId) + }, + + initializeDatalink: function(){ + this.datalink.subscribeToData(['v.lat', 'v.long', 'v.body']) + + this.datalink.addReceiverFunction(this.update.bind(this)) + } +}) +var OrbitingBodyInfoTable = Class.create({ + initialize: function(datalink, tableId, options){ + this.datalink = datalink + this.tableId = tableId + this.currentBody = null + this.currentBodyId = null + + this.initializeTable() + this.initializeDatalink() + }, + + update: function(data){ + if(this.bodyChanged(data)){ + this.updateReadoutTableRows(data) + } + }, + + propertyForBody: function(property){ + return "b." + property + "[" + this.currentBodyId + "]" + }, + + updateReadoutTableRows: function(data){ + this.currentBody = data['v.body'] + this.currentBodyId = this.datalink.getOrbitalBodyInfo(this.currentBody).id + + var newTableRows = [ + { + label: "Name", + value: this.propertyForBody('name'), + formatter: function(value){ return value } + }, + { + label: "Radius", + value: this.propertyForBody('radius'), + formatter: function(value){ return DataFormatters.distanceString(value) } + }, + { + label: "Atmosphere Contains O2?", + value: this.propertyForBody('atmosphereContainsOxygen'), + formatter: function(value){ return value } + }, + { + label: "Sphere of Influence", + value: this.propertyForBody('soi'), + formatter: function(value){ return value } + }, + { + label: "Max Atmospheric Density", + value: this.propertyForBody('maxAtmosphere'), + formatter: function(value){ return value } + }, + { + label: "Tidally Locked?", + value: this.propertyForBody('tidallyLocked'), + formatter: function(value){ return value } + }, + { + label: "GravitationalParameter", + value: this.propertyForBody('o.gravParameter'), + formatter: function(value){ return value } + }, + { + label: "Body's Relative Velocity", + value: this.propertyForBody('o.relativeVelocity'), + formatter: function(value){ return DataFormatters.velocityString(value) } + }, + + { + label: "Apoapsis", + value: this.propertyForBody('o.ApA'), + formatter: function(value){ return DataFormatters.distanceString(value) } + }, + { + label: "Periapsis", + value: this.propertyForBody('o.PeA'), + formatter: function(value){ return DataFormatters.distanceString(value) } + }, + { + label: "Time to Apoapsis", + value: this.propertyForBody('o.timeToAp'), + formatter: function(value){ return "-" + TimeFormatters.durationString(value) } + }, + { + label: "Time to Periapsis", + value: this.propertyForBody('o.timeToPe'), + formatter: function(value){ return "-" + TimeFormatters.durationString(value) } + }, + { + label: "Inclination", + value: this.propertyForBody('o.inclination'), + formatter: function(value){ return DataFormatters.degreeString(value) } + }, + { + label: "Eccentricity", + value: this.propertyForBody('o.eccentricity'), + formatter: function(value){ return value.toFixed(3) } + }, + { + label: "Orbital Period", + value: this.propertyForBody('o.period'), + formatter: function(value){ return TimeFormatters.durationString(value) } + }, + { + label: "True Anomaly", + value: this.propertyForBody('o.trueAnomaly'), + formatter: function(value){ return DataFormatters.degreeString(value) } + }, + ] + + var fieldsToSubscribeTo = newTableRows.map(function(newTableRow){ + return newTableRow.value + }) + + this.datalink.subscribeToData(fieldsToSubscribeTo) + + this.table.dataRows = newTableRows + }, + + bodyChanged: function(data){ + return this.currentBody != data['v.body'] + }, + + initializeTable: function(){ + this.table = new ReadoutTable(datalink, this.tableId, []) + }, + + initializeDatalink: function(){ + this.datalink.subscribeToData(['v.body']) + this.datalink.addReceiverFunction(this.update.bind(this)) + } +}) \ No newline at end of file diff --git a/public/assets/vessel-overview.js b/public/assets/vessel-overview.js index 6792ef6..9b7e3d6 100644 --- a/public/assets/vessel-overview.js +++ b/public/assets/vessel-overview.js @@ -1,19 +1,9387 @@ -Math.toDegrees=function(angleInRadians){return angleInRadians*(180/Math.PI)};Math.toRadians=function(angleInDegrees){return angleInDegrees*(Math.PI/180)};Math.crossProduct=function(x,y){[x[1]*y[2]-x[2]*y[1],x[2]*y[0]-x[0]*y[2],x[0]*y[1]-x[1]*y[0]]};Math.sign=Math.sign||function(x){x=+x;if(x===0||isNaN(x)){return x}return x>0?1:-1};Math.cosh=Math.cosh||function(x){return(Math.exp(x)+Math.exp(-x))/2};Math.sinh=Math.sinh||function(x){return(Math.exp(x)-Math.exp(-x))/2};Math.matrixAdd=Math.matrixAdd||function(){var arrays=arguments,results=[],count=arrays[0].length,L=arrays.length,sum,next=0,i;while(next-1?e(a,b,c):b.indexOf("%")>-1?f(a,b,c):b.indexOf(":")>-1?g(a,b):i(a._value,b,c)}function d(a,b){var c,d,e,f,g,i=b,j=["KB","MB","GB","TB","PB","EB","ZB","YB"],k=!1;if(b.indexOf(":")>-1)a._value=h(b);else if(b===q)a._value=0;else{for("."!==o[p].delimiters.decimal&&(b=b.replace(/\./g,"").replace(o[p].delimiters.decimal,".")),c=new RegExp("[^a-zA-Z]"+o[p].abbreviations.thousand+"(?:\\)|(\\"+o[p].currency.symbol+")?(?:\\))?)?$"),d=new RegExp("[^a-zA-Z]"+o[p].abbreviations.million+"(?:\\)|(\\"+o[p].currency.symbol+")?(?:\\))?)?$"),e=new RegExp("[^a-zA-Z]"+o[p].abbreviations.billion+"(?:\\)|(\\"+o[p].currency.symbol+")?(?:\\))?)?$"),f=new RegExp("[^a-zA-Z]"+o[p].abbreviations.trillion+"(?:\\)|(\\"+o[p].currency.symbol+")?(?:\\))?)?$"),g=0;g<=j.length&&!(k=b.indexOf(j[g])>-1?Math.pow(1024,g+1):!1);g++);a._value=(k?k:1)*(i.match(c)?Math.pow(10,3):1)*(i.match(d)?Math.pow(10,6):1)*(i.match(e)?Math.pow(10,9):1)*(i.match(f)?Math.pow(10,12):1)*(b.indexOf("%")>-1?.01:1)*((b.split("-").length+Math.min(b.split("(").length-1,b.split(")").length-1))%2?1:-1)*Number(b.replace(/[^0-9\.]+/g,"")),a._value=k?Math.ceil(a._value):a._value}return a._value}function e(a,b,c){var d,e,f=b.indexOf("$"),g=b.indexOf("("),h=b.indexOf("-"),j="";return b.indexOf(" $")>-1?(j=" ",b=b.replace(" $","")):b.indexOf("$ ")>-1?(j=" ",b=b.replace("$ ","")):b=b.replace("$",""),e=i(a._value,b,c),1>=f?e.indexOf("(")>-1||e.indexOf("-")>-1?(e=e.split(""),d=1,(g>f||h>f)&&(d=0),e.splice(d,0,o[p].currency.symbol+j),e=e.join("")):e=o[p].currency.symbol+j+e:e.indexOf(")")>-1?(e=e.split(""),e.splice(-1,0,j+o[p].currency.symbol),e=e.join("")):e=e+j+o[p].currency.symbol,e}function f(a,b,c){var d,e="",f=100*a._value;return b.indexOf(" %")>-1?(e=" ",b=b.replace(" %","")):b=b.replace("%",""),d=i(f,b,c),d.indexOf(")")>-1?(d=d.split(""),d.splice(-1,0,e+"%"),d=d.join("")):d=d+e+"%",d}function g(a){var b=Math.floor(a._value/60/60),c=Math.floor((a._value-60*b*60)/60),d=Math.round(a._value-60*b*60-60*c);return b+":"+(10>c?"0"+c:c)+":"+(10>d?"0"+d:d)}function h(a){var b=a.split(":"),c=0;return 3===b.length?(c+=60*Number(b[0])*60,c+=60*Number(b[1]),c+=Number(b[2])):2===b.length&&(c+=60*Number(b[0]),c+=Number(b[1])),Number(c)}function i(a,c,d){var e,f,g,h,i,j,k=!1,l=!1,m=!1,n="",r=!1,s=!1,t=!1,u=!1,v=!1,w="",x="",y=Math.abs(a),z=["B","KB","MB","GB","TB","PB","EB","ZB","YB"],A="",B=!1;if(0===a&&null!==q)return q;if(c.indexOf("(")>-1?(k=!0,c=c.slice(1,-1)):c.indexOf("+")>-1&&(l=!0,c=c.replace(/\+/g,"")),c.indexOf("a")>-1&&(r=c.indexOf("aK")>=0,s=c.indexOf("aM")>=0,t=c.indexOf("aB")>=0,u=c.indexOf("aT")>=0,v=r||s||t||u,c.indexOf(" a")>-1?(n=" ",c=c.replace(" a","")):c=c.replace("a",""),y>=Math.pow(10,12)&&!v||u?(n+=o[p].abbreviations.trillion,a/=Math.pow(10,12)):y=Math.pow(10,9)&&!v||t?(n+=o[p].abbreviations.billion,a/=Math.pow(10,9)):y=Math.pow(10,6)&&!v||s?(n+=o[p].abbreviations.million,a/=Math.pow(10,6)):(y=Math.pow(10,3)&&!v||r)&&(n+=o[p].abbreviations.thousand,a/=Math.pow(10,3))),c.indexOf("b")>-1)for(c.indexOf(" b")>-1?(w=" ",c=c.replace(" b","")):c=c.replace("b",""),g=0;g<=z.length;g++)if(e=Math.pow(1024,g),f=Math.pow(1024,g+1),a>=e&&f>a){w+=z[g],e>0&&(a/=e);break}return c.indexOf("o")>-1&&(c.indexOf(" o")>-1?(x=" ",c=c.replace(" o","")):c=c.replace("o",""),x+=o[p].ordinal(a)),c.indexOf("[.]")>-1&&(m=!0,c=c.replace("[.]",".")),h=a.toString().split(".")[0],i=c.split(".")[1],j=c.indexOf(","),i?(i.indexOf("[")>-1?(i=i.replace("]",""),i=i.split("["),A=b(a,i[0].length+i[1].length,d,i[1].length)):A=b(a,i.length,d),h=A.split(".")[0],A=A.split(".")[1].length?o[p].delimiters.decimal+A.split(".")[1]:"",m&&0===Number(A.slice(1))&&(A="")):h=b(a,null,d),h.indexOf("-")>-1&&(h=h.slice(1),B=!0),j>-1&&(h=h.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g,"$1"+o[p].delimiters.thousands)),0===c.indexOf(".")&&(h=""),(k&&B?"(":"")+(!k&&B?"-":"")+(!B&&l?"+":"")+h+A+(x?x:"")+(n?n:"")+(w?w:"")+(k&&B?")":"")}function j(a,b){o[a]=b}function k(a){var b=a.toString().split(".");return b.length<2?1:Math.pow(10,b[1].length)}function l(){var a=Array.prototype.slice.call(arguments);return a.reduce(function(a,b){var c=k(a),d=k(b);return c>d?c:d},-1/0)}var m,n="1.5.3",o={},p="en",q=null,r="0,0",s="undefined"!=typeof module&&module.exports;m=function(b){return m.isNumeral(b)?b=b.value():0===b||"undefined"==typeof b?b=0:Number(b)||(b=m.fn.unformat(b)),new a(Number(b))},m.version=n,m.isNumeral=function(b){return b instanceof a},m.language=function(a,b){if(!a)return p;if(a&&!b){if(!o[a])throw new Error("Unknown language : "+a);p=a}return(b||!o[a])&&j(a,b),m},m.languageData=function(a){if(!a)return o[p];if(!o[a])throw new Error("Unknown language : "+a);return o[a]},m.language("en",{delimiters:{thousands:",",decimal:"."},abbreviations:{thousand:"k",million:"m",billion:"b",trillion:"t"},ordinal:function(a){var b=a%10;return 1===~~(a%100/10)?"th":1===b?"st":2===b?"nd":3===b?"rd":"th"},currency:{symbol:"$"}}),m.zeroFormat=function(a){q="string"==typeof a?a:null},m.defaultFormat=function(a){r="string"==typeof a?a:"0.0"},"function"!=typeof Array.prototype.reduce&&(Array.prototype.reduce=function(a,b){"use strict";if(null===this||"undefined"==typeof this)throw new TypeError("Array.prototype.reduce called on null or undefined");if("function"!=typeof a)throw new TypeError(a+" is not a function");var c,d,e=this.length>>>0,f=!1;for(1c;++c)this.hasOwnProperty(c)&&(f?d=a(d,this[c],c,this):(d=this[c],f=!0));if(!f)throw new TypeError("Reduce of empty array with no initial value");return d}),m.fn=a.prototype={clone:function(){return m(this)},format:function(a,b){return c(this,a?a:r,void 0!==b?b:Math.round)},unformat:function(a){return"[object Number]"===Object.prototype.toString.call(a)?a:d(this,a?a:r)},value:function(){return this._value},valueOf:function(){return this._value},set:function(a){return this._value=Number(a),this},add:function(a){function b(a,b){return a+c*b}var c=l.call(null,this._value,a);return this._value=[this._value,a].reduce(b,0)/c,this},subtract:function(a){function b(a,b){return a-c*b}var c=l.call(null,this._value,a);return this._value=[a].reduce(b,this._value*c)/c,this},multiply:function(a){function b(a,b){var c=l(a,b);return a*c*b*c/(c*c)}return this._value=[this._value,a].reduce(b,1),this},divide:function(a){function b(a,b){var c=l(a,b);return a*c/(b*c)}return this._value=[this._value,a].reduce(b),this},difference:function(a){return Math.abs(m(this._value).subtract(a).value())}},s&&(module.exports=m),"undefined"==typeof ender&&(this.numeral=m),"function"==typeof define&&define.amd&&define([],function(){return m})}).call(this);var TimeFormatters={formatUT:function(t){var day,year;if(t==null){t=0}year=(t/(365*24*3600)|0)+1;t%=365*24*3600;day=(t/(24*3600)|0)+1;t%=24*3600;return"Year "+year+", Day "+day+", "+this.hourMinSec(t)+" UT"},formatMET:function(t){var result;if(t==null){t=0}result="T+";if(t>=365*24*3600){result+=(t/(365*24*3600)|0)+":";t%=365*24*3600;if(t<24*3600){result+="0:"}}if(t>=24*3600){result+=(t/(24*3600)|0)+":"}t%=24*3600;return result+this.hourMinSec(t)+" MET"},hourMinSec:function(t){var hour,min,sec;if(t==null){t=0}hour=t/3600|0;if(hour<10){hour="0"+hour}t%=3600;min=t/60|0;if(min<10){min="0"+min}sec=(t%60|0).toFixed();if(sec<10){sec="0"+sec}return""+hour+":"+min+":"+sec},durationString:function(t){var result;if(t==null){t=0}result=t<0?"-":"";t=Math.abs(t);if(t>=365*24*3600){result+=(t/(365*24*3600)|0)+" years ";t%=365*24*3600;if(t<24*3600){result+="0 days "}}if(t>=24*3600){result+=(t/(24*3600)|0)+" days "}t%=24*3600;return result+this.hourMinSec(t)}};var DataFormatters={distanceString:function(value){return numeral(value).format("0,0.000 a")+"m"},heightFromTerrainString:function(value){if(value<=-1){return"NA"}return numeral(value).format("0,0.000 a")+"m"},degreeString:function(value){return numeral(value).format("0.000")+"°"},velocityString:function(value){return numeral(value).format("0,0.000 a")+"m/s"},temperatureString:function(value){if(!value){return"NA"}return numeral(value).format("0,000")+"°C"},accelerationSensorString:function(value){if(value[0]=="No Sensors of the Appropriate Type"){return"NA"}return numeral(value[1][0]).format("0,000")+"G"},pressureSensorString:function(value){if(value[0]=="No Sensors of the Appropriate Type"){return"NA"}return numeral(value[1][0]).format("0,000")+"Pa"},gravitySensorString:function(value){if(value[0]=="No Sensors of the Appropriate Type"){return"NA"}return numeral(value[1][0]).format("0,000 a")+"m/s²"},newtonsString:function(value){return numeral(value).format("0,0.00")+" N"},percentageString:function(value){return numeral(value).format("0%")},tonnageString:function(value){return numeral(value).format("0,0.00")+" t"},timeString:function(value){return numeral(value).format("00:00:00")},plainNumberString:function(value){return numeral(value).format("0,0.00")}};var Prototype={Version:"1.7.2",Browser:function(){var ua=navigator.userAgent;var isOpera=Object.prototype.toString.call(window.opera)=="[object Opera]";return{IE:!!window.attachEvent&&!isOpera,Opera:isOpera,WebKit:ua.indexOf("AppleWebKit/")>-1,Gecko:ua.indexOf("Gecko")>-1&&ua.indexOf("KHTML")===-1,MobileSafari:/Apple.*Mobile/.test(ua)}}(),BrowserFeatures:{XPath:!!document.evaluate,SelectorsAPI:!!document.querySelector,ElementExtensions:function(){var constructor=window.Element||window.HTMLElement;return!!(constructor&&constructor.prototype)}(),SpecificElementExtensions:function(){if(typeof window.HTMLDivElement!=="undefined")return true;var div=document.createElement("div"),form=document.createElement("form"),isSupported=false;if(div["__proto__"]&&div["__proto__"]!==form["__proto__"]){isSupported=true}div=form=null;return isSupported}()},ScriptFragment:"]*>([\\S\\s]*?)",JSONFilter:/^\/\*-secure-([\s\S]*)\*\/\s*$/,emptyFunction:function(){},K:function(x){return x}};if(Prototype.Browser.MobileSafari)Prototype.BrowserFeatures.SpecificElementExtensions=false;var Class=function(){var IS_DONTENUM_BUGGY=function(){for(var p in{toString:1}){if(p==="toString")return false}return true}();function subclass(){}function create(){var parent=null,properties=$A(arguments);if(Object.isFunction(properties[0]))parent=properties.shift();function klass(){this.initialize.apply(this,arguments)}Object.extend(klass,Class.Methods);klass.superclass=parent;klass.subclasses=[];if(parent){subclass.prototype=parent.prototype;klass.prototype=new subclass;parent.subclasses.push(klass)}for(var i=0,length=properties.length;i0){match=source.match(pattern);if(match&&match[0].length>0){result+=source.slice(0,match.index);result+=String.interpret(replacement(match));source=source.slice(match.index+match[0].length)}else{result+=source,source=""}}return result}function sub(pattern,replacement,count){replacement=prepareReplacement(replacement);count=Object.isUndefined(count)?1:count;return this.gsub(pattern,function(match){if(--count<0)return match[0];return replacement(match)})}function scan(pattern,iterator){this.gsub(pattern,iterator);return String(this)}function truncate(length,truncation){length=length||30;truncation=Object.isUndefined(truncation)?"...":truncation;return this.length>length?this.slice(0,length-truncation.length)+truncation:String(this)}function strip(){return this.replace(/^\s+/,"").replace(/\s+$/,"")}function stripTags(){return this.replace(/<\w+(\s+("[^"]*"|'[^']*'|[^>])+)?>|<\/\w+>/gi,"")}function stripScripts(){return this.replace(new RegExp(Prototype.ScriptFragment,"img"),"")}function extractScripts(){var matchAll=new RegExp(Prototype.ScriptFragment,"img"),matchOne=new RegExp(Prototype.ScriptFragment,"im");return(this.match(matchAll)||[]).map(function(scriptTag){return(scriptTag.match(matchOne)||["",""])[1]})}function evalScripts(){return this.extractScripts().map(function(script){return eval(script)})}function escapeHTML(){return this.replace(/&/g,"&").replace(//g,">")}function unescapeHTML(){return this.stripTags().replace(/</g,"<").replace(/>/g,">").replace(/&/g,"&")}function toQueryParams(separator){var match=this.strip().match(/([^?#]*)(#.*)?$/);if(!match)return{};return match[1].split(separator||"&").inject({},function(hash,pair){if((pair=pair.split("="))[0]){var key=decodeURIComponent(pair.shift()),value=pair.length>1?pair.join("="):pair[0];if(value!=undefined){value=value.gsub("+"," ");value=decodeURIComponent(value)}if(key in hash){if(!Object.isArray(hash[key]))hash[key]=[hash[key]];hash[key].push(value)}else hash[key]=value}return hash})}function toArray(){return this.split("")}function succ(){return this.slice(0,this.length-1)+String.fromCharCode(this.charCodeAt(this.length-1)+1)}function times(count){return count<1?"":new Array(count+1).join(this)}function camelize(){return this.replace(/-+(.)?/g,function(match,chr){return chr?chr.toUpperCase():""})}function capitalize(){return this.charAt(0).toUpperCase()+this.substring(1).toLowerCase()}function underscore(){return this.replace(/::/g,"/").replace(/([A-Z]+)([A-Z][a-z])/g,"$1_$2").replace(/([a-z\d])([A-Z])/g,"$1_$2").replace(/-/g,"_").toLowerCase()}function dasherize(){return this.replace(/_/g,"-")}function inspect(useDoubleQuotes){var escapedString=this.replace(/[\x00-\x1f\\]/g,function(character){if(character in String.specialChar){return String.specialChar[character]}return"\\u00"+character.charCodeAt().toPaddedString(2,16)});if(useDoubleQuotes)return'"'+escapedString.replace(/"/g,'\\"')+'"';return"'"+escapedString.replace(/'/g,"\\'")+"'"}function unfilterJSON(filter){return this.replace(filter||Prototype.JSONFilter,"$1")}function isJSON(){var str=this;if(str.blank())return false;str=str.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,"@");str=str.replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,"]");str=str.replace(/(?:^|:|,)(?:\s*\[)+/g,"");return/^[\],:{}\s]*$/.test(str)}function evalJSON(sanitize){var json=this.unfilterJSON(),cx=/[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g;if(cx.test(json)){json=json.replace(cx,function(a){return"\\u"+("0000"+a.charCodeAt(0).toString(16)).slice(-4)})}try{if(!sanitize||json.isJSON())return eval("("+json+")")}catch(e){}throw new SyntaxError("Badly formed JSON string: "+this.inspect())}function parseJSON(){var json=this.unfilterJSON();return JSON.parse(json)}function include(pattern){return this.indexOf(pattern)>-1}function startsWith(pattern,position){position=Object.isNumber(position)?position:0;return this.lastIndexOf(pattern,position)===position}function endsWith(pattern,position){pattern=String(pattern);position=Object.isNumber(position)?position:this.length;if(position<0)position=0;if(position>this.length)position=this.length;var d=position-pattern.length;return d>=0&&this.indexOf(pattern,d)===d}function empty(){return this==""}function blank(){return/^\s*$/.test(this)}function interpolate(object,pattern){return new Template(this,pattern).evaluate(object)}return{gsub:gsub,sub:sub,scan:scan,truncate:truncate,strip:String.prototype.trim||strip,stripTags:stripTags,stripScripts:stripScripts,extractScripts:extractScripts,evalScripts:evalScripts,escapeHTML:escapeHTML,unescapeHTML:unescapeHTML,toQueryParams:toQueryParams,parseQuery:toQueryParams,toArray:toArray,succ:succ,times:times,camelize:camelize,capitalize:capitalize,underscore:underscore,dasherize:dasherize,inspect:inspect,unfilterJSON:unfilterJSON,isJSON:isJSON,evalJSON:NATIVE_JSON_PARSE_SUPPORT?parseJSON:evalJSON,include:include,startsWith:String.prototype.startsWith||startsWith,endsWith:String.prototype.endsWith||endsWith,empty:empty,blank:blank,interpolate:interpolate}}());var Template=Class.create({initialize:function(template,pattern){this.template=template.toString();this.pattern=pattern||Template.Pattern},evaluate:function(object){if(object&&Object.isFunction(object.toTemplateReplacements))object=object.toTemplateReplacements();return this.template.gsub(this.pattern,function(match){if(object==null)return match[1]+"";var before=match[1]||"";if(before=="\\")return match[2];var ctx=object,expr=match[3],pattern=/^([^.[]+|\[((?:.*?[^\\])?)\])(\.|\[|$)/;match=pattern.exec(expr);if(match==null)return before;while(match!=null){var comp=match[1].startsWith("[")?match[2].replace(/\\\\]/g,"]"):match[1];ctx=ctx[comp];if(null==ctx||""==match[3])break;expr=expr.substring("["==match[3]?match[1].length:match[0].length);match=pattern.exec(expr)}return before+String.interpret(ctx)})}});Template.Pattern=/(^|.|\r|\n)(#\{(.*?)\})/;var $break={};var Enumerable=function(){function each(iterator,context){try{this._each(iterator,context)}catch(e){if(e!=$break)throw e}return this}function eachSlice(number,iterator,context){var index=-number,slices=[],array=this.toArray();if(number<1)return array;while((index+=number)=result)result=value},this);return result}function min(iterator,context){iterator=iterator||Prototype.K;var result;this.each(function(value,index){value=iterator.call(context,value,index,this);if(result==null||valueb?1:0}).pluck("value")}function toArray(){return this.map()}function zip(){var iterator=Prototype.K,args=$A(arguments);if(Object.isFunction(args.last()))iterator=args.pop();var collections=[this].concat(args).map($A);return this.map(function(value,index){return iterator(collections.pluck(index))})}function size(){return this.toArray().length}function inspect(){return"#"}return{each:each,eachSlice:eachSlice,all:all,every:all,any:any,some:any,collect:collect,map:collect,detect:detect,findAll:findAll,select:findAll,filter:findAll,grep:grep,include:include,member:include,inGroupsOf:inGroupsOf,inject:inject,invoke:invoke,max:max,min:min,partition:partition,pluck:pluck,reject:reject,sortBy:sortBy,toArray:toArray,entries:toArray,zip:zip,size:size,inspect:inspect,find:detect}}();function $A(iterable){if(!iterable)return[];if("toArray"in Object(iterable))return iterable.toArray();var length=iterable.length||0,results=new Array(length);while(length--)results[length]=iterable[length];return results}function $w(string){if(!Object.isString(string))return[];string=string.strip();return string?string.split(/\s+/):[]}Array.from=$A;(function(){var arrayProto=Array.prototype,slice=arrayProto.slice,_each=arrayProto.forEach;function each(iterator,context){for(var i=0,length=this.length>>>0;i>>0;if(length===0)return-1;i=Number(i);if(isNaN(i)){i=0}else if(i!==0&&isFinite(i)){i=(i>0?1:-1)*Math.floor(Math.abs(i))}if(i>length)return-1;var k=i>=0?i:Math.max(length-Math.abs(i),0);for(;k>>0;if(length===0)return-1;if(!Object.isUndefined(i)){i=Number(i);if(isNaN(i)){i=0}else if(i!==0&&isFinite(i)){i=(i>0?1:-1)*Math.floor(Math.abs(i))}}else{i=length}var k=i>=0?Math.min(i,length-1):length-Math.abs(i);for(;k>=0;k--)if(k in array&&array[k]===item)return k;return-1}function concat(_){var array=[],items=slice.call(arguments,0),item,n=0;items.unshift(this);for(var i=0,length=items.length;i>>0;i>>0;i>>0;i>>0;i"}function clone(){return new Hash(this)}return{initialize:initialize,_each:_each,set:set,get:get,unset:unset,toObject:toObject,toTemplateReplacements:toObject,keys:keys,values:values,index:index,merge:merge,update:update,toQueryString:toQueryString,inspect:inspect,toJSON:toObject,clone:clone}}());Hash.from=$H;Object.extend(Number.prototype,function(){function toColorPart(){return this.toPaddedString(2,16)}function succ(){return this+1}function times(iterator,context){$R(0,this,true).each(iterator,context);return this}function toPaddedString(length,radix){var string=this.toString(radix||10);return"0".times(length-string.length)+string}function abs(){return Math.abs(this)}function round(){return Math.round(this)}function ceil(){return Math.ceil(this)}function floor(){return Math.floor(this)}return{toColorPart:toColorPart,succ:succ,times:times,toPaddedString:toPaddedString,abs:abs,round:round,ceil:ceil,floor:floor}}());function $R(start,end,exclusive){return new ObjectRange(start,end,exclusive)}var ObjectRange=Class.create(Enumerable,function(){function initialize(start,end,exclusive){this.start=start;this.end=end;this.exclusive=exclusive}function _each(iterator,context){var value=this.start,i;for(i=0;this.include(value);i++){iterator.call(context,value,i);value=value.succ()}}function include(value){if(value1&&!(readyState==4&&this._complete))this.respondToReadyState(this.transport.readyState)},setRequestHeaders:function(){var headers={"X-Requested-With":"XMLHttpRequest","X-Prototype-Version":Prototype.Version,Accept:"text/javascript, text/html, application/xml, text/xml, */*"};if(this.method=="post"){headers["Content-type"]=this.options.contentType+(this.options.encoding?"; charset="+this.options.encoding:"");if(this.transport.overrideMimeType&&(navigator.userAgent.match(/Gecko\/(\d{4})/)||[0,2005])[1]<2005)headers["Connection"]="close"}if(typeof this.options.requestHeaders=="object"){var extras=this.options.requestHeaders;if(Object.isFunction(extras.push))for(var i=0,length=extras.length;i=200&&status<300||status==304},getStatus:function(){try{if(this.transport.status===1223)return 204;return this.transport.status||0}catch(e){return 0}},respondToReadyState:function(readyState){var state=Ajax.Request.Events[readyState],response=new Ajax.Response(this);if(state=="Complete"){try{this._complete=true;(this.options["on"+response.status]||this.options["on"+(this.success()?"Success":"Failure")]||Prototype.emptyFunction)(response,response.headerJSON)}catch(e){this.dispatchException(e)}var contentType=response.getHeader("Content-type");if(this.options.evalJS=="force"||this.options.evalJS&&this.isSameOrigin()&&contentType&&contentType.match(/^\s*(text|application)\/(x-)?(java|ecma)script(;.*)?\s*$/i))this.evalResponse()}try{(this.options["on"+state]||Prototype.emptyFunction)(response,response.headerJSON);Ajax.Responders.dispatch("on"+state,this,response,response.headerJSON)}catch(e){this.dispatchException(e)}if(state=="Complete"){this.transport.onreadystatechange=Prototype.emptyFunction}},isSameOrigin:function(){var m=this.url.match(/^\s*https?:\/\/[^\/]*/);return!m||m[0]=="#{protocol}//#{domain}#{port}".interpolate({protocol:location.protocol,domain:document.domain,port:location.port?":"+location.port:""})},getHeader:function(name){try{return this.transport.getResponseHeader(name)||null}catch(e){return null}},evalResponse:function(){try{return eval((this.transport.responseText||"").unfilterJSON())}catch(e){this.dispatchException(e)}},dispatchException:function(exception){(this.options.onException||Prototype.emptyFunction)(this,exception);Ajax.Responders.dispatch("onException",this,exception)}});Ajax.Request.Events=["Uninitialized","Loading","Loaded","Interactive","Complete"];Ajax.Response=Class.create({initialize:function(request){this.request=request;var transport=this.transport=request.transport,readyState=this.readyState=transport.readyState;if(readyState>2&&!Prototype.Browser.IE||readyState==4){this.status=this.getStatus();this.statusText=this.getStatusText();this.responseText=String.interpret(transport.responseText);this.headerJSON=this._getHeaderJSON()}if(readyState==4){var xml=transport.responseXML;this.responseXML=Object.isUndefined(xml)?null:xml;this.responseJSON=this._getResponseJSON()}},status:0,statusText:"",getStatus:Ajax.Request.prototype.getStatus,getStatusText:function(){try{return this.transport.statusText||""}catch(e){return""}},getHeader:Ajax.Request.prototype.getHeader,getAllHeaders:function(){try{return this.getAllResponseHeaders()}catch(e){return null}},getResponseHeader:function(name){return this.transport.getResponseHeader(name)},getAllResponseHeaders:function(){return this.transport.getAllResponseHeaders()},_getHeaderJSON:function(){var json=this.getHeader("X-JSON");if(!json)return null;try{json=decodeURIComponent(escape(json))}catch(e){}try{return json.evalJSON(this.request.options.sanitizeJSON||!this.request.isSameOrigin())}catch(e){this.request.dispatchException(e)}},_getResponseJSON:function(){var options=this.request.options;if(!options.evalJSON||options.evalJSON!="force"&&!(this.getHeader("Content-type")||"").include("application/json")||this.responseText.blank())return null;try{return this.responseText.evalJSON(options.sanitizeJSON||!this.request.isSameOrigin())}catch(e){this.request.dispatchException(e)}}});Ajax.Updater=Class.create(Ajax.Request,{initialize:function($super,container,url,options){this.container={success:container.success||container,failure:container.failure||(container.success?null:container)};options=Object.clone(options);var onComplete=options.onComplete;options.onComplete=function(response,json){this.updateContent(response.responseText);if(Object.isFunction(onComplete))onComplete(response,json)}.bind(this);$super(url,options)},updateContent:function(responseText){var receiver=this.container[this.success()?"success":"failure"],options=this.options;if(!options.evalScripts)responseText=responseText.stripScripts();if(receiver=$(receiver)){if(options.insertion){if(Object.isString(options.insertion)){var insertion={};insertion[options.insertion]=responseText;receiver.insert(insertion)}else options.insertion(receiver,responseText)}else receiver.update(responseText)}}});Ajax.PeriodicalUpdater=Class.create(Ajax.Base,{initialize:function($super,container,url,options){$super(options);this.onComplete=this.options.onComplete;this.frequency=this.options.frequency||2;this.decay=this.options.decay||1;this.updater={};this.container=container;this.url=url;this.start()},start:function(){this.options.onComplete=this.updateComplete.bind(this);this.onTimerEvent()},stop:function(){this.updater.options.onComplete=undefined;clearTimeout(this.timer);(this.onComplete||Prototype.emptyFunction).apply(this,arguments)},updateComplete:function(response){if(this.options.decay){this.decay=response.responseText==this.lastText?this.decay*this.options.decay:1;this.lastText=response.responseText}this.timer=this.onTimerEvent.bind(this).delay(this.decay*this.frequency)},onTimerEvent:function(){this.updater=new Ajax.Updater(this.container,this.url,this.options)}});(function(GLOBAL){var UNDEFINED;var SLICE=Array.prototype.slice;var DIV=document.createElement("div");function $(element){if(arguments.length>1){for(var i=0,elements=[],length=arguments.length;i');return el.tagName.toLowerCase()==="input"&&el.name==="x"}catch(err){return false}}();var oldElement=GLOBAL.Element;function Element(tagName,attributes){attributes=attributes||{};tagName=tagName.toLowerCase();if(HAS_EXTENDED_CREATE_ELEMENT_SYNTAX&&attributes.name){tagName="<"+tagName+' name="'+attributes.name+'">';delete attributes.name;return Element.writeAttribute(document.createElement(tagName),attributes)}if(!ELEMENT_CACHE[tagName])ELEMENT_CACHE[tagName]=Element.extend(document.createElement(tagName));var node=shouldUseCreationCache(tagName,attributes)?ELEMENT_CACHE[tagName].cloneNode(false):document.createElement(tagName);return Element.writeAttribute(node,attributes)}GLOBAL.Element=Element;Object.extend(GLOBAL.Element,oldElement||{});if(oldElement)GLOBAL.Element.prototype=oldElement.prototype;Element.Methods={ByTag:{},Simulated:{}};var methods={};var INSPECT_ATTRIBUTES={id:"id",className:"class"};function inspect(element){element=$(element);var result="<"+element.tagName.toLowerCase();var attribute,value;for(var property in INSPECT_ATTRIBUTES){attribute=INSPECT_ATTRIBUTES[property];value=(element[property]||"").toString();if(value)result+=" "+attribute+"="+value.inspect(true)}return result+">"}methods.inspect=inspect;function visible(element){return $(element).style.display!=="none"}function toggle(element,bool){element=$(element);if(Object.isUndefined(bool))bool=!Element.visible(element);Element[bool?"show":"hide"](element);return element}function hide(element){element=$(element);element.style.display="none";return element}function show(element){element=$(element);element.style.display="";return element}Object.extend(methods,{visible:visible,toggle:toggle,hide:hide,show:show});function remove(element){element=$(element);element.parentNode.removeChild(element);return element}var SELECT_ELEMENT_INNERHTML_BUGGY=function(){var el=document.createElement("select"),isBuggy=true;el.innerHTML='';if(el.options&&el.options[0]){isBuggy=el.options[0].nodeName.toUpperCase()!=="OPTION"}el=null;return isBuggy}();var TABLE_ELEMENT_INNERHTML_BUGGY=function(){try{var el=document.createElement("table");if(el&&el.tBodies){el.innerHTML="test";var isBuggy=typeof el.tBodies[0]=="undefined";el=null;return isBuggy}}catch(e){return true}}();var LINK_ELEMENT_INNERHTML_BUGGY=function(){try{var el=document.createElement("div");el.innerHTML="";var isBuggy=el.childNodes.length===0;el=null;return isBuggy}catch(e){return true}}();var ANY_INNERHTML_BUGGY=SELECT_ELEMENT_INNERHTML_BUGGY||TABLE_ELEMENT_INNERHTML_BUGGY||LINK_ELEMENT_INNERHTML_BUGGY;var SCRIPT_ELEMENT_REJECTS_TEXTNODE_APPENDING=function(){var s=document.createElement("script"),isBuggy=false;try{s.appendChild(document.createTextNode(""));isBuggy=!s.firstChild||s.firstChild&&s.firstChild.nodeType!==3}catch(e){isBuggy=true}s=null;return isBuggy}();function update(element,content){element=$(element);var descendants=element.getElementsByTagName("*"),i=descendants.length;while(i--)purgeElement(descendants[i]);if(content&&content.toElement)content=content.toElement();if(Object.isElement(content))return element.update().insert(content);content=Object.toHTML(content);var tagName=element.tagName.toUpperCase();if(tagName==="SCRIPT"&&SCRIPT_ELEMENT_REJECTS_TEXTNODE_APPENDING){element.text=content;return element}if(ANY_INNERHTML_BUGGY){if(tagName in INSERTION_TRANSLATIONS.tags){while(element.firstChild)element.removeChild(element.firstChild);var nodes=getContentFromAnonymousElement(tagName,content.stripScripts());for(var i=0,node;node=nodes[i];i++)element.appendChild(node)}else if(LINK_ELEMENT_INNERHTML_BUGGY&&Object.isString(content)&&content.indexOf("-1){while(element.firstChild)element.removeChild(element.firstChild);var nodes=getContentFromAnonymousElement(tagName,content.stripScripts(),true);for(var i=0,node;node=nodes[i];i++)element.appendChild(node)}else{element.innerHTML=content.stripScripts()}}else{element.innerHTML=content.stripScripts()}content.evalScripts.bind(content).defer();return element}function replace(element,content){element=$(element);if(content&&content.toElement){content=content.toElement()}else if(!Object.isElement(content)){content=Object.toHTML(content);var range=element.ownerDocument.createRange();range.selectNode(element);content.evalScripts.bind(content).defer();content=range.createContextualFragment(content.stripScripts())}element.parentNode.replaceChild(content,element);return element}var INSERTION_TRANSLATIONS={before:function(element,node){element.parentNode.insertBefore(node,element)},top:function(element,node){element.insertBefore(node,element.firstChild)},bottom:function(element,node){element.appendChild(node)},after:function(element,node){element.parentNode.insertBefore(node,element.nextSibling)},tags:{TABLE:["","
    ",1],TBODY:["","
    ",2],TR:["","
    ",3],TD:["
    ","
    ",4],SELECT:["",1]}};var tags=INSERTION_TRANSLATIONS.tags;Object.extend(tags,{THEAD:tags.TBODY,TFOOT:tags.TBODY,TH:tags.TD});function replace_IE(element,content){element=$(element);if(content&&content.toElement)content=content.toElement();if(Object.isElement(content)){element.parentNode.replaceChild(content,element);return element}content=Object.toHTML(content);var parent=element.parentNode,tagName=parent.tagName.toUpperCase();if(tagName in INSERTION_TRANSLATIONS.tags){var nextSibling=Element.next(element);var fragments=getContentFromAnonymousElement(tagName,content.stripScripts());parent.removeChild(element);var iterator;if(nextSibling)iterator=function(node){parent.insertBefore(node,nextSibling)};else iterator=function(node){parent.appendChild(node)};fragments.each(iterator)}else{element.outerHTML=content.stripScripts()}content.evalScripts.bind(content).defer();return element}if("outerHTML"in document.documentElement)replace=replace_IE;function isContent(content){if(Object.isUndefined(content)||content===null)return false;if(Object.isString(content)||Object.isNumber(content))return true;if(Object.isElement(content))return true;if(content.toElement||content.toHTML)return true;return false}function insertContentAt(element,content,position){position=position.toLowerCase();var method=INSERTION_TRANSLATIONS[position];if(content&&content.toElement)content=content.toElement();if(Object.isElement(content)){method(element,content);return element}content=Object.toHTML(content);var tagName=(position==="before"||position==="after"?element.parentNode:element).tagName.toUpperCase();var childNodes=getContentFromAnonymousElement(tagName,content.stripScripts());if(position==="top"||position==="after")childNodes.reverse();for(var i=0,node;node=childNodes[i];i++)method(element,node);content.evalScripts.bind(content).defer()}function insert(element,insertions){element=$(element);if(isContent(insertions))insertions={bottom:insertions};for(var position in insertions)insertContentAt(element,insertions[position],position);return element}function wrap(element,wrapper,attributes){element=$(element);if(Object.isElement(wrapper)){$(wrapper).writeAttribute(attributes||{})}else if(Object.isString(wrapper)){wrapper=new Element(wrapper,attributes)}else{wrapper=new Element("div",wrapper)}if(element.parentNode)element.parentNode.replaceChild(wrapper,element);wrapper.appendChild(element);return wrapper}function cleanWhitespace(element){element=$(element);var node=element.firstChild;while(node){var nextNode=node.nextSibling;if(node.nodeType===Node.TEXT_NODE&&!/\S/.test(node.nodeValue))element.removeChild(node);node=nextNode}return element}function empty(element){return $(element).innerHTML.blank()}function getContentFromAnonymousElement(tagName,html,force){var t=INSERTION_TRANSLATIONS.tags[tagName],div=DIV;var workaround=!!t;if(!workaround&&force){workaround=true;t=["","",0]}if(workaround){div.innerHTML=" "+t[0]+html+t[1];div.removeChild(div.firstChild);for(var i=t[2];i--;)div=div.firstChild}else{div.innerHTML=html}return $A(div.childNodes)}function clone(element,deep){if(!(element=$(element)))return;var clone=element.cloneNode(deep);if(!HAS_UNIQUE_ID_PROPERTY){clone._prototypeUID=UNDEFINED;if(deep){var descendants=Element.select(clone,"*"),i=descendants.length;while(i--)descendants[i]._prototypeUID=UNDEFINED}}return Element.extend(clone)}function purgeElement(element){var uid=getUniqueElementID(element);if(uid){Element.stopObserving(element);if(!HAS_UNIQUE_ID_PROPERTY)element._prototypeUID=UNDEFINED;delete Element.Storage[uid]}}function purgeCollection(elements){var i=elements.length;while(i--)purgeElement(elements[i])}function purgeCollection_IE(elements){var i=elements.length,element,uid;while(i--){element=elements[i];uid=getUniqueElementID(element);delete Element.Storage[uid];delete Event.cache[uid]}}if(HAS_UNIQUE_ID_PROPERTY){purgeCollection=purgeCollection_IE}function purge(element){if(!(element=$(element)))return;purgeElement(element);var descendants=element.getElementsByTagName("*"),i=descendants.length;while(i--)purgeElement(descendants[i]);return null}Object.extend(methods,{remove:remove,update:update,replace:replace,insert:insert,wrap:wrap,cleanWhitespace:cleanWhitespace,empty:empty,clone:clone,purge:purge});function recursivelyCollect(element,property,maximumLength){element=$(element);maximumLength=maximumLength||-1;var elements=[];while(element=element[property]){if(element.nodeType===Node.ELEMENT_NODE)elements.push(Element.extend(element));if(elements.length===maximumLength)break}return elements}function ancestors(element){return recursivelyCollect(element,"parentNode")}function descendants(element){return Element.select(element,"*")}function firstDescendant(element){element=$(element).firstChild;while(element&&element.nodeType!==Node.ELEMENT_NODE)element=element.nextSibling;return $(element)}function immediateDescendants(element){var results=[],child=$(element).firstChild;while(child){if(child.nodeType===Node.ELEMENT_NODE)results.push(Element.extend(child));child=child.nextSibling}return results}function previousSiblings(element){return recursivelyCollect(element,"previousSibling")}function nextSiblings(element){return recursivelyCollect(element,"nextSibling")}function siblings(element){element=$(element);var previous=previousSiblings(element),next=nextSiblings(element);return previous.reverse().concat(next)}function match(element,selector){element=$(element);if(Object.isString(selector))return Prototype.Selector.match(element,selector);return selector.match(element)}function _recursivelyFind(element,property,expression,index){element=$(element),expression=expression||0,index=index||0;if(Object.isNumber(expression)){index=expression,expression=null}while(element=element[property]){if(element.nodeType!==1)continue;if(expression&&!Prototype.Selector.match(element,expression))continue;if(--index>=0)continue;return Element.extend(element)}}function up(element,expression,index){element=$(element);if(arguments.length===1)return $(element.parentNode);return _recursivelyFind(element,"parentNode",expression,index)}function down(element,expression,index){if(arguments.length===1)return firstDescendant(element);element=$(element),expression=expression||0,index=index||0;if(Object.isNumber(expression))index=expression,expression="*";var node=Prototype.Selector.select(expression,element)[index];return Element.extend(node)}function previous(element,expression,index){return _recursivelyFind(element,"previousSibling",expression,index)}function next(element,expression,index){return _recursivelyFind(element,"nextSibling",expression,index)}function select(element){element=$(element);var expressions=SLICE.call(arguments,1).join(", ");return Prototype.Selector.select(expressions,element)}function adjacent(element){element=$(element);var expressions=SLICE.call(arguments,1).join(", ");var siblings=Element.siblings(element),results=[];for(var i=0,sibling;sibling=siblings[i];i++){if(Prototype.Selector.match(sibling,expressions))results.push(sibling)}return results}function descendantOf_DOM(element,ancestor){element=$(element),ancestor=$(ancestor);while(element=element.parentNode)if(element===ancestor)return true;return false}function descendantOf_contains(element,ancestor){element=$(element),ancestor=$(ancestor);if(!ancestor.contains)return descendantOf_DOM(element,ancestor);return ancestor.contains(element)&&ancestor!==element}function descendantOf_compareDocumentPosition(element,ancestor){element=$(element),ancestor=$(ancestor);return(element.compareDocumentPosition(ancestor)&8)===8}var descendantOf;if(DIV.compareDocumentPosition){descendantOf=descendantOf_compareDocumentPosition}else if(DIV.contains){descendantOf=descendantOf_contains}else{descendantOf=descendantOf_DOM}Object.extend(methods,{recursivelyCollect:recursivelyCollect,ancestors:ancestors,descendants:descendants,firstDescendant:firstDescendant,immediateDescendants:immediateDescendants,previousSiblings:previousSiblings,nextSiblings:nextSiblings,siblings:siblings,match:match,up:up,down:down,previous:previous,next:next,select:select,adjacent:adjacent,descendantOf:descendantOf,getElementsBySelector:select,childElements:immediateDescendants});var idCounter=1;function identify(element){element=$(element);var id=Element.readAttribute(element,"id");if(id)return id;do{id="anonymous_element_"+idCounter++}while($(id));Element.writeAttribute(element,"id",id);return id}function readAttribute(element,name){return $(element).getAttribute(name)}function readAttribute_IE(element,name){element=$(element);var table=ATTRIBUTE_TRANSLATIONS.read;if(table.values[name])return table.values[name](element,name);if(table.names[name])name=table.names[name];if(name.include(":")){if(!element.attributes||!element.attributes[name])return null;return element.attributes[name].value}return element.getAttribute(name)}function readAttribute_Opera(element,name){if(name==="title")return element.title;return element.getAttribute(name)}var PROBLEMATIC_ATTRIBUTE_READING=function(){DIV.setAttribute("onclick",[]);var value=DIV.getAttribute("onclick");var isFunction=Object.isArray(value);DIV.removeAttribute("onclick");return isFunction}();if(PROBLEMATIC_ATTRIBUTE_READING){readAttribute=readAttribute_IE}else if(Prototype.Browser.Opera){readAttribute=readAttribute_Opera}function writeAttribute(element,name,value){element=$(element);var attributes={},table=ATTRIBUTE_TRANSLATIONS.write; +Math.toRadians = function(angleInDegrees){ + return angleInDegrees * (Math.PI/180) +} -if(typeof name==="object"){attributes=name}else{attributes[name]=Object.isUndefined(value)?true:value}for(var attr in attributes){name=table.names[attr]||attr;value=attributes[attr];if(table.values[attr])name=table.values[attr](element,value)||name;if(value===false||value===null)element.removeAttribute(name);else if(value===true)element.setAttribute(name,name);else element.setAttribute(name,value)}return element}var PROBLEMATIC_HAS_ATTRIBUTE_WITH_CHECKBOXES=function(){if(!HAS_EXTENDED_CREATE_ELEMENT_SYNTAX){return false}var checkbox=document.createElement('');checkbox.checked=true;var node=checkbox.getAttributeNode("checked");return!node||!node.specified}();function hasAttribute(element,attribute){attribute=ATTRIBUTE_TRANSLATIONS.has[attribute]||attribute;var node=$(element).getAttributeNode(attribute);return!!(node&&node.specified)}function hasAttribute_IE(element,attribute){if(attribute==="checked"){return element.checked}return hasAttribute(element,attribute)}GLOBAL.Element.Methods.Simulated.hasAttribute=PROBLEMATIC_HAS_ATTRIBUTE_WITH_CHECKBOXES?hasAttribute_IE:hasAttribute;function classNames(element){return new Element.ClassNames(element)}var regExpCache={};function getRegExpForClassName(className){if(regExpCache[className])return regExpCache[className];var re=new RegExp("(^|\\s+)"+className+"(\\s+|$)");regExpCache[className]=re;return re}function hasClassName(element,className){if(!(element=$(element)))return;var elementClassName=element.className;if(elementClassName.length===0)return false;if(elementClassName===className)return true;return getRegExpForClassName(className).test(elementClassName)}function addClassName(element,className){if(!(element=$(element)))return;if(!hasClassName(element,className))element.className+=(element.className?" ":"")+className;return element}function removeClassName(element,className){if(!(element=$(element)))return;element.className=element.className.replace(getRegExpForClassName(className)," ").strip();return element}function toggleClassName(element,className,bool){if(!(element=$(element)))return;if(Object.isUndefined(bool))bool=!hasClassName(element,className);var method=Element[bool?"addClassName":"removeClassName"];return method(element,className)}var ATTRIBUTE_TRANSLATIONS={};var classProp="className",forProp="for";DIV.setAttribute(classProp,"x");if(DIV.className!=="x"){DIV.setAttribute("class","x");if(DIV.className==="x")classProp="class"}var LABEL=document.createElement("label");LABEL.setAttribute(forProp,"x");if(LABEL.htmlFor!=="x"){LABEL.setAttribute("htmlFor","x");if(LABEL.htmlFor==="x")forProp="htmlFor"}LABEL=null;function _getAttr(element,attribute){return element.getAttribute(attribute)}function _getAttr2(element,attribute){return element.getAttribute(attribute,2)}function _getAttrNode(element,attribute){var node=element.getAttributeNode(attribute);return node?node.value:""}function _getFlag(element,attribute){return $(element).hasAttribute(attribute)?attribute:null}DIV.onclick=Prototype.emptyFunction;var onclickValue=DIV.getAttribute("onclick");var _getEv;if(String(onclickValue).indexOf("{")>-1){_getEv=function(element,attribute){var value=element.getAttribute(attribute);if(!value)return null;value=value.toString();value=value.split("{")[1];value=value.split("}")[0];return value.strip()}}else if(onclickValue===""){_getEv=function(element,attribute){var value=element.getAttribute(attribute);if(!value)return null;return value.strip()}}ATTRIBUTE_TRANSLATIONS.read={names:{class:classProp,className:classProp,for:forProp,htmlFor:forProp},values:{style:function(element){return element.style.cssText.toLowerCase()},title:function(element){return element.title}}};ATTRIBUTE_TRANSLATIONS.write={names:{className:"class",htmlFor:"for",cellpadding:"cellPadding",cellspacing:"cellSpacing"},values:{checked:function(element,value){element.checked=!!value},style:function(element,value){element.style.cssText=value?value:""}}};ATTRIBUTE_TRANSLATIONS.has={names:{}};Object.extend(ATTRIBUTE_TRANSLATIONS.write.names,ATTRIBUTE_TRANSLATIONS.read.names);var CAMEL_CASED_ATTRIBUTE_NAMES=$w("colSpan rowSpan vAlign dateTime "+"accessKey tabIndex encType maxLength readOnly longDesc frameBorder");for(var i=0,attr;attr=CAMEL_CASED_ATTRIBUTE_NAMES[i];i++){ATTRIBUTE_TRANSLATIONS.write.names[attr.toLowerCase()]=attr;ATTRIBUTE_TRANSLATIONS.has.names[attr.toLowerCase()]=attr}Object.extend(ATTRIBUTE_TRANSLATIONS.read.values,{href:_getAttr2,src:_getAttr2,type:_getAttr,action:_getAttrNode,disabled:_getFlag,checked:_getFlag,readonly:_getFlag,multiple:_getFlag,onload:_getEv,onunload:_getEv,onclick:_getEv,ondblclick:_getEv,onmousedown:_getEv,onmouseup:_getEv,onmouseover:_getEv,onmousemove:_getEv,onmouseout:_getEv,onfocus:_getEv,onblur:_getEv,onkeypress:_getEv,onkeydown:_getEv,onkeyup:_getEv,onsubmit:_getEv,onreset:_getEv,onselect:_getEv,onchange:_getEv});Object.extend(methods,{identify:identify,readAttribute:readAttribute,writeAttribute:writeAttribute,classNames:classNames,hasClassName:hasClassName,addClassName:addClassName,removeClassName:removeClassName,toggleClassName:toggleClassName});function normalizeStyleName(style){if(style==="float"||style==="styleFloat")return"cssFloat";return style.camelize()}function normalizeStyleName_IE(style){if(style==="float"||style==="cssFloat")return"styleFloat";return style.camelize()}function setStyle(element,styles){element=$(element);var elementStyle=element.style,match;if(Object.isString(styles)){elementStyle.cssText+=";"+styles;if(styles.include("opacity")){var opacity=styles.match(/opacity:\s*(\d?\.?\d*)/)[1];Element.setOpacity(element,opacity)}return element}for(var property in styles){if(property==="opacity"){Element.setOpacity(element,styles[property])}else{var value=styles[property];if(property==="float"||property==="cssFloat"){property=Object.isUndefined(elementStyle.styleFloat)?"cssFloat":"styleFloat"}elementStyle[property]=value}}return element}function getStyle(element,style){element=$(element);style=normalizeStyleName(style);var value=element.style[style];if(!value||value==="auto"){var css=document.defaultView.getComputedStyle(element,null);value=css?css[style]:null}if(style==="opacity")return value?parseFloat(value):1;return value==="auto"?null:value}function getStyle_Opera(element,style){switch(style){case"height":case"width":if(!Element.visible(element))return null;var dim=parseInt(getStyle(element,style),10);if(dim!==element["offset"+style.capitalize()])return dim+"px";return Element.measure(element,style);default:return getStyle(element,style)}}function getStyle_IE(element,style){element=$(element);style=normalizeStyleName_IE(style);var value=element.style[style];if(!value&&element.currentStyle){value=element.currentStyle[style]}if(style==="opacity"&&!STANDARD_CSS_OPACITY_SUPPORTED)return getOpacity_IE(element);if(value==="auto"){if((style==="width"||style==="height")&&Element.visible(element))return Element.measure(element,style)+"px";return null}return value}function stripAlphaFromFilter_IE(filter){return(filter||"").replace(/alpha\([^\)]*\)/gi,"")}function hasLayout_IE(element){if(!element.currentStyle||!element.currentStyle.hasLayout)element.style.zoom=1;return element}var STANDARD_CSS_OPACITY_SUPPORTED=function(){DIV.style.cssText="opacity:.55";return/^0.55/.test(DIV.style.opacity)}();function setOpacity(element,value){element=$(element);if(value==1||value==="")value="";else if(value<1e-5)value=0;element.style.opacity=value;return element}function setOpacity_IE(element,value){if(STANDARD_CSS_OPACITY_SUPPORTED)return setOpacity(element,value);element=hasLayout_IE($(element));var filter=Element.getStyle(element,"filter"),style=element.style;if(value==1||value===""){filter=stripAlphaFromFilter_IE(filter);if(filter)style.filter=filter;else style.removeAttribute("filter");return element}if(value<1e-5)value=0;style.filter=stripAlphaFromFilter_IE(filter)+"alpha(opacity="+value*100+")";return element}function getOpacity(element){return Element.getStyle(element,"opacity")}function getOpacity_IE(element){if(STANDARD_CSS_OPACITY_SUPPORTED)return getOpacity(element);var filter=Element.getStyle(element,"filter");if(filter.length===0)return 1;var match=(filter||"").match(/alpha\(opacity=(.*)\)/);if(match&&match[1])return parseFloat(match[1])/100;return 1}Object.extend(methods,{setStyle:setStyle,getStyle:getStyle,setOpacity:setOpacity,getOpacity:getOpacity});if("styleFloat"in DIV.style){methods.getStyle=getStyle_IE;methods.setOpacity=setOpacity_IE;methods.getOpacity=getOpacity_IE}var UID=0;GLOBAL.Element.Storage={UID:1};function getUniqueElementID(element){if(element===window)return 0;if(typeof element._prototypeUID==="undefined")element._prototypeUID=Element.Storage.UID++;return element._prototypeUID}function getUniqueElementID_IE(element){if(element===window)return 0;if(element==document)return 1;return element.uniqueID}var HAS_UNIQUE_ID_PROPERTY="uniqueID"in DIV;if(HAS_UNIQUE_ID_PROPERTY)getUniqueElementID=getUniqueElementID_IE;function getStorage(element){if(!(element=$(element)))return;var uid=getUniqueElementID(element);if(!Element.Storage[uid])Element.Storage[uid]=$H();return Element.Storage[uid]}function store(element,key,value){if(!(element=$(element)))return;var storage=getStorage(element);if(arguments.length===2){storage.update(key)}else{storage.set(key,value)}return element}function retrieve(element,key,defaultValue){if(!(element=$(element)))return;var storage=getStorage(element),value=storage.get(key);if(Object.isUndefined(value)){storage.set(key,defaultValue);value=defaultValue}return value}Object.extend(methods,{getStorage:getStorage,store:store,retrieve:retrieve});var Methods={},ByTag=Element.Methods.ByTag,F=Prototype.BrowserFeatures;if(!F.ElementExtensions&&"__proto__"in DIV){GLOBAL.HTMLElement={};GLOBAL.HTMLElement.prototype=DIV["__proto__"];F.ElementExtensions=true}function checkElementPrototypeDeficiency(tagName){if(typeof window.Element==="undefined")return false;if(!HAS_EXTENDED_CREATE_ELEMENT_SYNTAX)return false;var proto=window.Element.prototype;if(proto){var id="_"+(Math.random()+"").slice(2),el=document.createElement(tagName);proto[id]="x";var isBuggy=el[id]!=="x";delete proto[id];el=null;return isBuggy}return false}var HTMLOBJECTELEMENT_PROTOTYPE_BUGGY=checkElementPrototypeDeficiency("object");function extendElementWith(element,methods){for(var property in methods){var value=methods[property];if(Object.isFunction(value)&&!(property in element))element[property]=value.methodize()}}var EXTENDED={};function elementIsExtended(element){var uid=getUniqueElementID(element);return uid in EXTENDED}function extend(element){if(!element||elementIsExtended(element))return element;if(element.nodeType!==Node.ELEMENT_NODE||element==window)return element;var methods=Object.clone(Methods),tagName=element.tagName.toUpperCase();if(ByTag[tagName])Object.extend(methods,ByTag[tagName]);extendElementWith(element,methods);EXTENDED[getUniqueElementID(element)]=true;return element}function extend_IE8(element){if(!element||elementIsExtended(element))return element;var t=element.tagName;if(t&&/^(?:object|applet|embed)$/i.test(t)){extendElementWith(element,Element.Methods);extendElementWith(element,Element.Methods.Simulated);extendElementWith(element,Element.Methods.ByTag[t.toUpperCase()])}return element}if(F.SpecificElementExtensions){extend=HTMLOBJECTELEMENT_PROTOTYPE_BUGGY?extend_IE8:Prototype.K}function addMethodsToTagName(tagName,methods){tagName=tagName.toUpperCase();if(!ByTag[tagName])ByTag[tagName]={};Object.extend(ByTag[tagName],methods)}function mergeMethods(destination,methods,onlyIfAbsent){if(Object.isUndefined(onlyIfAbsent))onlyIfAbsent=false;for(var property in methods){var value=methods[property];if(!Object.isFunction(value))continue;if(!onlyIfAbsent||!(property in destination))destination[property]=value.methodize()}}function findDOMClass(tagName){var klass;var trans={OPTGROUP:"OptGroup",TEXTAREA:"TextArea",P:"Paragraph",FIELDSET:"FieldSet",UL:"UList",OL:"OList",DL:"DList",DIR:"Directory",H1:"Heading",H2:"Heading",H3:"Heading",H4:"Heading",H5:"Heading",H6:"Heading",Q:"Quote",INS:"Mod",DEL:"Mod",A:"Anchor",IMG:"Image",CAPTION:"TableCaption",COL:"TableCol",COLGROUP:"TableCol",THEAD:"TableSection",TFOOT:"TableSection",TBODY:"TableSection",TR:"TableRow",TH:"TableCell",TD:"TableCell",FRAMESET:"FrameSet",IFRAME:"IFrame"};if(trans[tagName])klass="HTML"+trans[tagName]+"Element";if(window[klass])return window[klass];klass="HTML"+tagName+"Element";if(window[klass])return window[klass];klass="HTML"+tagName.capitalize()+"Element";if(window[klass])return window[klass];var element=document.createElement(tagName),proto=element["__proto__"]||element.constructor.prototype;element=null;return proto}function addMethods(methods){if(arguments.length===0)addFormMethods();if(arguments.length===2){var tagName=methods;methods=arguments[1]}if(!tagName){Object.extend(Element.Methods,methods||{})}else{if(Object.isArray(tagName)){for(var i=0,tag;tag=tagName[i];i++)addMethodsToTagName(tag,methods)}else{addMethodsToTagName(tagName,methods)}}var ELEMENT_PROTOTYPE=window.HTMLElement?HTMLElement.prototype:Element.prototype;if(F.ElementExtensions){mergeMethods(ELEMENT_PROTOTYPE,Element.Methods);mergeMethods(ELEMENT_PROTOTYPE,Element.Methods.Simulated,true)}if(F.SpecificElementExtensions){for(var tag in Element.Methods.ByTag){var klass=findDOMClass(tag);if(Object.isUndefined(klass))continue;mergeMethods(klass.prototype,ByTag[tag])}}Object.extend(Element,Element.Methods);Object.extend(Element,Element.Methods.Simulated);delete Element.ByTag;delete Element.Simulated;Element.extend.refresh();ELEMENT_CACHE={}}Object.extend(GLOBAL.Element,{extend:extend,addMethods:addMethods});if(extend===Prototype.K){GLOBAL.Element.extend.refresh=Prototype.emptyFunction}else{GLOBAL.Element.extend.refresh=function(){if(Prototype.BrowserFeatures.ElementExtensions)return;Object.extend(Methods,Element.Methods);Object.extend(Methods,Element.Methods.Simulated);EXTENDED={}}}function addFormMethods(){Object.extend(Form,Form.Methods);Object.extend(Form.Element,Form.Element.Methods);Object.extend(Element.Methods.ByTag,{FORM:Object.clone(Form.Methods),INPUT:Object.clone(Form.Element.Methods),SELECT:Object.clone(Form.Element.Methods),TEXTAREA:Object.clone(Form.Element.Methods),BUTTON:Object.clone(Form.Element.Methods)})}Element.addMethods(methods);function destroyCache_IE(){DIV=null;ELEMENT_CACHE=null}if(window.attachEvent)window.attachEvent("onunload",destroyCache_IE)})(this);(function(){function toDecimal(pctString){var match=pctString.match(/^(\d+)%?$/i);if(!match)return null;return Number(match[1])/100}function getRawStyle(element,style){element=$(element);var value=element.style[style];if(!value||value==="auto"){var css=document.defaultView.getComputedStyle(element,null);value=css?css[style]:null}if(style==="opacity")return value?parseFloat(value):1;return value==="auto"?null:value}function getRawStyle_IE(element,style){var value=element.style[style];if(!value&&element.currentStyle){value=element.currentStyle[style]}return value}function getContentWidth(element,context){var boxWidth=element.offsetWidth;var bl=getPixelValue(element,"borderLeftWidth",context)||0;var br=getPixelValue(element,"borderRightWidth",context)||0;var pl=getPixelValue(element,"paddingLeft",context)||0;var pr=getPixelValue(element,"paddingRight",context)||0;return boxWidth-bl-br-pl-pr}if("currentStyle"in document.documentElement){getRawStyle=getRawStyle_IE}function getPixelValue(value,property,context){var element=null;if(Object.isElement(value)){element=value;value=getRawStyle(element,property)}if(value===null||Object.isUndefined(value)){return null}if(/^(?:-)?\d+(\.\d+)?(px)?$/i.test(value)){return window.parseFloat(value)}var isPercentage=value.include("%"),isViewport=context===document.viewport;if(/\d/.test(value)&&element&&element.runtimeStyle&&!(isPercentage&&isViewport)){var style=element.style.left,rStyle=element.runtimeStyle.left;element.runtimeStyle.left=element.currentStyle.left;element.style.left=value||0;value=element.style.pixelLeft;element.style.left=style;element.runtimeStyle.left=rStyle;return value}if(element&&isPercentage){context=context||element.parentNode;var decimal=toDecimal(value),whole=null;var isHorizontal=property.include("left")||property.include("right")||property.include("width");var isVertical=property.include("top")||property.include("bottom")||property.include("height");if(context===document.viewport){if(isHorizontal){whole=document.viewport.getWidth()}else if(isVertical){whole=document.viewport.getHeight()}}else{if(isHorizontal){whole=$(context).measure("width")}else if(isVertical){whole=$(context).measure("height")}}return whole===null?0:whole*decimal}return 0}function toCSSPixels(number){if(Object.isString(number)&&number.endsWith("px"))return number;return number+"px"}function isDisplayed(element){while(element&&element.parentNode){var display=element.getStyle("display");if(display==="none"){return false}element=$(element.parentNode)}return true}var hasLayout=Prototype.K;if("currentStyle"in document.documentElement){hasLayout=function(element){if(!element.currentStyle.hasLayout){element.style.zoom=1}return element}}function cssNameFor(key){if(key.include("border"))key=key+"-width";return key.camelize()}Element.Layout=Class.create(Hash,{initialize:function($super,element,preCompute){$super();this.element=$(element);Element.Layout.PROPERTIES.each(function(property){this._set(property,null)},this);if(preCompute){this._preComputing=true;this._begin();Element.Layout.PROPERTIES.each(this._compute,this);this._end();this._preComputing=false}},_set:function(property,value){return Hash.prototype.set.call(this,property,value)},set:function(property,value){throw"Properties of Element.Layout are read-only."},get:function($super,property){var value=$super(property);return value===null?this._compute(property):value},_begin:function(){if(this._isPrepared())return;var element=this.element;if(isDisplayed(element)){this._setPrepared(true);return}var originalStyles={position:element.style.position||"",width:element.style.width||"",visibility:element.style.visibility||"",display:element.style.display||""};element.store("prototype_original_styles",originalStyles);var position=getRawStyle(element,"position"),width=element.offsetWidth;if(width===0||width===null){element.style.display="block";width=element.offsetWidth}var context=position==="fixed"?document.viewport:element.parentNode;var tempStyles={visibility:"hidden",display:"block"};if(position!=="fixed")tempStyles.position="absolute";element.setStyle(tempStyles);var positionedWidth=element.offsetWidth,newWidth;if(width&&positionedWidth===width){newWidth=getContentWidth(element,context)}else if(position==="absolute"||position==="fixed"){newWidth=getContentWidth(element,context)}else{var parent=element.parentNode,pLayout=$(parent).getLayout();newWidth=pLayout.get("width")-this.get("margin-left")-this.get("border-left")-this.get("padding-left")-this.get("padding-right")-this.get("border-right")-this.get("margin-right")}element.setStyle({width:newWidth+"px"});this._setPrepared(true)},_end:function(){var element=this.element;var originalStyles=element.retrieve("prototype_original_styles");element.store("prototype_original_styles",null);element.setStyle(originalStyles);this._setPrepared(false)},_compute:function(property){var COMPUTATIONS=Element.Layout.COMPUTATIONS;if(!(property in COMPUTATIONS)){throw"Property not found."}return this._set(property,COMPUTATIONS[property].call(this,this.element))},_isPrepared:function(){return this.element.retrieve("prototype_element_layout_prepared",false)},_setPrepared:function(bool){return this.element.store("prototype_element_layout_prepared",bool)},toObject:function(){var args=$A(arguments);var keys=args.length===0?Element.Layout.PROPERTIES:args.join(" ").split(" ");var obj={};keys.each(function(key){if(!Element.Layout.PROPERTIES.include(key))return;var value=this.get(key);if(value!=null)obj[key]=value},this);return obj},toHash:function(){var obj=this.toObject.apply(this,arguments);return new Hash(obj)},toCSS:function(){var args=$A(arguments);var keys=args.length===0?Element.Layout.PROPERTIES:args.join(" ").split(" ");var css={};keys.each(function(key){if(!Element.Layout.PROPERTIES.include(key))return;if(Element.Layout.COMPOSITE_PROPERTIES.include(key))return;var value=this.get(key);if(value!=null)css[cssNameFor(key)]=value+"px"},this);return css},inspect:function(){return"#"}});Object.extend(Element.Layout,{PROPERTIES:$w("height width top left right bottom border-left border-right border-top border-bottom padding-left padding-right padding-top padding-bottom margin-top margin-bottom margin-left margin-right padding-box-width padding-box-height border-box-width border-box-height margin-box-width margin-box-height"),COMPOSITE_PROPERTIES:$w("padding-box-width padding-box-height margin-box-width margin-box-height border-box-width border-box-height"),COMPUTATIONS:{height:function(element){if(!this._preComputing)this._begin();var bHeight=this.get("border-box-height");if(bHeight<=0){if(!this._preComputing)this._end();return 0}var bTop=this.get("border-top"),bBottom=this.get("border-bottom");var pTop=this.get("padding-top"),pBottom=this.get("padding-bottom");if(!this._preComputing)this._end();return bHeight-bTop-bBottom-pTop-pBottom},width:function(element){if(!this._preComputing)this._begin();var bWidth=this.get("border-box-width");if(bWidth<=0){if(!this._preComputing)this._end();return 0}var bLeft=this.get("border-left"),bRight=this.get("border-right");var pLeft=this.get("padding-left"),pRight=this.get("padding-right");if(!this._preComputing)this._end();return bWidth-bLeft-bRight-pLeft-pRight},"padding-box-height":function(element){var height=this.get("height"),pTop=this.get("padding-top"),pBottom=this.get("padding-bottom");return height+pTop+pBottom},"padding-box-width":function(element){var width=this.get("width"),pLeft=this.get("padding-left"),pRight=this.get("padding-right");return width+pLeft+pRight},"border-box-height":function(element){if(!this._preComputing)this._begin();var height=element.offsetHeight;if(!this._preComputing)this._end();return height},"border-box-width":function(element){if(!this._preComputing)this._begin();var width=element.offsetWidth;if(!this._preComputing)this._end();return width},"margin-box-height":function(element){var bHeight=this.get("border-box-height"),mTop=this.get("margin-top"),mBottom=this.get("margin-bottom");if(bHeight<=0)return 0;return bHeight+mTop+mBottom},"margin-box-width":function(element){var bWidth=this.get("border-box-width"),mLeft=this.get("margin-left"),mRight=this.get("margin-right");if(bWidth<=0)return 0;return bWidth+mLeft+mRight},top:function(element){var offset=element.positionedOffset();return offset.top},bottom:function(element){var offset=element.positionedOffset(),parent=element.getOffsetParent(),pHeight=parent.measure("height");var mHeight=this.get("border-box-height");return pHeight-mHeight-offset.top},left:function(element){var offset=element.positionedOffset();return offset.left},right:function(element){var offset=element.positionedOffset(),parent=element.getOffsetParent(),pWidth=parent.measure("width");var mWidth=this.get("border-box-width");return pWidth-mWidth-offset.left},"padding-top":function(element){return getPixelValue(element,"paddingTop")},"padding-bottom":function(element){return getPixelValue(element,"paddingBottom")},"padding-left":function(element){return getPixelValue(element,"paddingLeft")},"padding-right":function(element){return getPixelValue(element,"paddingRight")},"border-top":function(element){return getPixelValue(element,"borderTopWidth")},"border-bottom":function(element){return getPixelValue(element,"borderBottomWidth")},"border-left":function(element){return getPixelValue(element,"borderLeftWidth")},"border-right":function(element){return getPixelValue(element,"borderRightWidth")},"margin-top":function(element){return getPixelValue(element,"marginTop")},"margin-bottom":function(element){return getPixelValue(element,"marginBottom")},"margin-left":function(element){return getPixelValue(element,"marginLeft")},"margin-right":function(element){return getPixelValue(element,"marginRight")}}});if("getBoundingClientRect"in document.documentElement){Object.extend(Element.Layout.COMPUTATIONS,{right:function(element){var parent=hasLayout(element.getOffsetParent());var rect=element.getBoundingClientRect(),pRect=parent.getBoundingClientRect();return(pRect.right-rect.right).round()},bottom:function(element){var parent=hasLayout(element.getOffsetParent());var rect=element.getBoundingClientRect(),pRect=parent.getBoundingClientRect();return(pRect.bottom-rect.bottom).round()}})}Element.Offset=Class.create({initialize:function(left,top){this.left=left.round();this.top=top.round();this[0]=this.left;this[1]=this.top},relativeTo:function(offset){return new Element.Offset(this.left-offset.left,this.top-offset.top)},inspect:function(){return"#".interpolate(this)},toString:function(){return"[#{left}, #{top}]".interpolate(this)},toArray:function(){return[this.left,this.top]}});function getLayout(element,preCompute){return new Element.Layout(element,preCompute)}function measure(element,property){return $(element).getLayout().get(property)}function getHeight(element){return Element.getDimensions(element).height}function getWidth(element){return Element.getDimensions(element).width}function getDimensions(element){element=$(element);var display=Element.getStyle(element,"display");if(display&&display!=="none"){return{width:element.offsetWidth,height:element.offsetHeight}}var style=element.style;var originalStyles={visibility:style.visibility,position:style.position,display:style.display};var newStyles={visibility:"hidden",display:"block"};if(originalStyles.position!=="fixed")newStyles.position="absolute";Element.setStyle(element,newStyles);var dimensions={width:element.offsetWidth,height:element.offsetHeight};Element.setStyle(element,originalStyles);return dimensions}function getOffsetParent(element){element=$(element);if(isDocument(element)||isDetached(element)||isBody(element)||isHtml(element))return $(document.body);var isInline=Element.getStyle(element,"display")==="inline";if(!isInline&&element.offsetParent)return $(element.offsetParent);while((element=element.parentNode)&&element!==document.body){if(Element.getStyle(element,"position")!=="static"){return isHtml(element)?$(document.body):$(element)}}return $(document.body)}function cumulativeOffset(element){element=$(element);var valueT=0,valueL=0;if(element.parentNode){do{valueT+=element.offsetTop||0;valueL+=element.offsetLeft||0;element=element.offsetParent}while(element)}return new Element.Offset(valueL,valueT)}function positionedOffset(element){element=$(element);var layout=element.getLayout();var valueT=0,valueL=0;do{valueT+=element.offsetTop||0;valueL+=element.offsetLeft||0;element=element.offsetParent;if(element){if(isBody(element))break;var p=Element.getStyle(element,"position");if(p!=="static")break}}while(element);valueL-=layout.get("margin-top");valueT-=layout.get("margin-left");return new Element.Offset(valueL,valueT)}function cumulativeScrollOffset(element){var valueT=0,valueL=0;do{if(element===document.body){var bodyScrollNode=document.documentElement||document.body.parentNode||document.body;valueT+=!Object.isUndefined(window.pageYOffset)?window.pageYOffset:bodyScrollNode.scrollTop||0;valueL+=!Object.isUndefined(window.pageXOffset)?window.pageXOffset:bodyScrollNode.scrollLeft||0;break}else{valueT+=element.scrollTop||0;valueL+=element.scrollLeft||0;element=element.parentNode}}while(element);return new Element.Offset(valueL,valueT)}function viewportOffset(forElement){var valueT=0,valueL=0,docBody=document.body;forElement=$(forElement);var element=forElement;do{valueT+=element.offsetTop||0;valueL+=element.offsetLeft||0;if(element.offsetParent==docBody&&Element.getStyle(element,"position")=="absolute")break}while(element=element.offsetParent);element=forElement;do{if(element!=docBody){valueT-=element.scrollTop||0;valueL-=element.scrollLeft||0}}while(element=element.parentNode);return new Element.Offset(valueL,valueT)}function absolutize(element){element=$(element);if(Element.getStyle(element,"position")==="absolute"){return element}var offsetParent=getOffsetParent(element);var eOffset=element.viewportOffset(),pOffset=offsetParent.viewportOffset();var offset=eOffset.relativeTo(pOffset);var layout=element.getLayout();element.store("prototype_absolutize_original_styles",{position:element.getStyle("position"),left:element.getStyle("left"),top:element.getStyle("top"),width:element.getStyle("width"),height:element.getStyle("height")});element.setStyle({position:"absolute",top:offset.top+"px",left:offset.left+"px",width:layout.get("width")+"px",height:layout.get("height")+"px"});return element}function relativize(element){element=$(element);if(Element.getStyle(element,"position")==="relative"){return element}var originalStyles=element.retrieve("prototype_absolutize_original_styles");if(originalStyles)element.setStyle(originalStyles);return element}function scrollTo(element){element=$(element);var pos=Element.cumulativeOffset(element);window.scrollTo(pos.left,pos.top);return element}function makePositioned(element){element=$(element);var position=Element.getStyle(element,"position"),styles={};if(position==="static"||!position){styles.position="relative";if(Prototype.Browser.Opera){styles.top=0;styles.left=0}Element.setStyle(element,styles);Element.store(element,"prototype_made_positioned",true)}return element}function undoPositioned(element){element=$(element);var storage=Element.getStorage(element),madePositioned=storage.get("prototype_made_positioned");if(madePositioned){storage.unset("prototype_made_positioned");Element.setStyle(element,{position:"",top:"",bottom:"",left:"",right:""})}return element}function makeClipping(element){element=$(element);var storage=Element.getStorage(element),madeClipping=storage.get("prototype_made_clipping");if(Object.isUndefined(madeClipping)){var overflow=Element.getStyle(element,"overflow");storage.set("prototype_made_clipping",overflow);if(overflow!=="hidden")element.style.overflow="hidden"}return element}function undoClipping(element){element=$(element);var storage=Element.getStorage(element),overflow=storage.get("prototype_made_clipping");if(!Object.isUndefined(overflow)){storage.unset("prototype_made_clipping");element.style.overflow=overflow||""}return element}function clonePosition(element,source,options){options=Object.extend({setLeft:true,setTop:true,setWidth:true,setHeight:true,offsetTop:0,offsetLeft:0},options||{});source=$(source);element=$(element);var p,delta,layout,styles={};if(options.setLeft||options.setTop){p=Element.viewportOffset(source);delta=[0,0];if(Element.getStyle(element,"position")==="absolute"){var parent=Element.getOffsetParent(element);if(parent!==document.body)delta=Element.viewportOffset(parent)}}if(options.setWidth||options.setHeight){layout=Element.getLayout(source)}if(options.setLeft)styles.left=p[0]-delta[0]+options.offsetLeft+"px";if(options.setTop)styles.top=p[1]-delta[1]+options.offsetTop+"px";if(options.setWidth)styles.width=layout.get("border-box-width")+"px";if(options.setHeight)styles.height=layout.get("border-box-height")+"px";return Element.setStyle(element,styles)}if(Prototype.Browser.IE){getOffsetParent=getOffsetParent.wrap(function(proceed,element){element=$(element);if(isDocument(element)||isDetached(element)||isBody(element)||isHtml(element))return $(document.body);var position=element.getStyle("position");if(position!=="static")return proceed(element);element.setStyle({position:"relative"});var value=proceed(element);element.setStyle({position:position});return value});positionedOffset=positionedOffset.wrap(function(proceed,element){element=$(element);if(!element.parentNode)return new Element.Offset(0,0);var position=element.getStyle("position"); +Math.crossProduct = function(x, y){ + [ + x[1]*y[2]-x[2]*y[1], + x[2]*y[0]-x[0]*y[2], + x[0]*y[1]-x[1]*y[0] + ] +} -if(position!=="static")return proceed(element);var offsetParent=element.getOffsetParent();if(offsetParent&&offsetParent.getStyle("position")==="fixed")hasLayout(offsetParent);element.setStyle({position:"relative"});var value=proceed(element);element.setStyle({position:position});return value})}else if(Prototype.Browser.Webkit){cumulativeOffset=function(element){element=$(element);var valueT=0,valueL=0;do{valueT+=element.offsetTop||0;valueL+=element.offsetLeft||0;if(element.offsetParent==document.body){if(Element.getStyle(element,"position")=="absolute")break}element=element.offsetParent}while(element);return new Element.Offset(valueL,valueT)}}Element.addMethods({getLayout:getLayout,measure:measure,getWidth:getWidth,getHeight:getHeight,getDimensions:getDimensions,getOffsetParent:getOffsetParent,cumulativeOffset:cumulativeOffset,positionedOffset:positionedOffset,cumulativeScrollOffset:cumulativeScrollOffset,viewportOffset:viewportOffset,absolutize:absolutize,relativize:relativize,scrollTo:scrollTo,makePositioned:makePositioned,undoPositioned:undoPositioned,makeClipping:makeClipping,undoClipping:undoClipping,clonePosition:clonePosition});function isBody(element){return element.nodeName.toUpperCase()==="BODY"}function isHtml(element){return element.nodeName.toUpperCase()==="HTML"}function isDocument(element){return element.nodeType===Node.DOCUMENT_NODE}function isDetached(element){return element!==document.body&&!Element.descendantOf(element,document.body)}if("getBoundingClientRect"in document.documentElement){Element.addMethods({viewportOffset:function(element){element=$(element);if(isDetached(element))return new Element.Offset(0,0);var rect=element.getBoundingClientRect(),docEl=document.documentElement;return new Element.Offset(rect.left-docEl.clientLeft,rect.top-docEl.clientTop)}})}})();(function(){var IS_OLD_OPERA=Prototype.Browser.Opera&&window.parseFloat(window.opera.version())<9.5;var ROOT=null;function getRootElement(){if(ROOT)return ROOT;ROOT=IS_OLD_OPERA?document.body:document.documentElement;return ROOT}function getDimensions(){return{width:this.getWidth(),height:this.getHeight()}}function getWidth(){return getRootElement().clientWidth}function getHeight(){return getRootElement().clientHeight}function getScrollOffsets(){var x=window.pageXOffset||document.documentElement.scrollLeft||document.body.scrollLeft;var y=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop;return new Element.Offset(x,y)}document.viewport={getDimensions:getDimensions,getWidth:getWidth,getHeight:getHeight,getScrollOffsets:getScrollOffsets}})();window.$$=function(){var expression=$A(arguments).join(", ");return Prototype.Selector.select(expression,document)};Prototype.Selector=function(){function select(){throw new Error('Method "Prototype.Selector.select" must be defined.')}function match(){throw new Error('Method "Prototype.Selector.match" must be defined.')}function find(elements,expression,index){index=index||0;var match=Prototype.Selector.match,length=elements.length,matchIndex=0,i;for(i=0;i+~]|"+whitespace+")"+whitespace+"*"),rattributeQuotes=new RegExp("="+whitespace+"*([^\\]'\"]*?)"+whitespace+"*\\]","g"),rpseudo=new RegExp(pseudos),ridentifier=new RegExp("^"+identifier+"$"),matchExpr={ID:new RegExp("^#("+characterEncoding+")"),CLASS:new RegExp("^\\.("+characterEncoding+")"),TAG:new RegExp("^("+characterEncoding.replace("w","w*")+")"),ATTR:new RegExp("^"+attributes),PSEUDO:new RegExp("^"+pseudos),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+whitespace+"*(even|odd|(([+-]|)(\\d*)n|)"+whitespace+"*(?:([+-]|)"+whitespace+"*(\\d+)|))"+whitespace+"*\\)|)","i"),bool:new RegExp("^(?:"+booleans+")$","i"),needsContext:new RegExp("^"+whitespace+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+whitespace+"*((?:-\\d)?\\d*)"+whitespace+"*\\)|)(?=[^-]|$)","i")},rinputs=/^(?:input|select|textarea|button)$/i,rheader=/^h\d$/i,rnative=/^[^{]+\{\s*\[native \w/,rquickExpr=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,rsibling=/[+~]/,rescape=/'|\\/g,runescape=new RegExp("\\\\([\\da-f]{1,6}"+whitespace+"?|("+whitespace+")|.)","ig"),funescape=function(_,escaped,escapedWhitespace){var high="0x"+escaped-65536;return high!==high||escapedWhitespace?escaped:high<0?String.fromCharCode(high+65536):String.fromCharCode(high>>10|55296,high&1023|56320)};try{push.apply(arr=slice.call(preferredDoc.childNodes),preferredDoc.childNodes);arr[preferredDoc.childNodes.length].nodeType}catch(e){push={apply:arr.length?function(target,els){push_native.apply(target,slice.call(els))}:function(target,els){var j=target.length,i=0;while(target[j++]=els[i++]){}target.length=j-1}}}function Sizzle(selector,context,results,seed){var match,elem,m,nodeType,i,groups,old,nid,newContext,newSelector;if((context?context.ownerDocument||context:preferredDoc)!==document){setDocument(context)}context=context||document;results=results||[];if(!selector||typeof selector!=="string"){return results}if((nodeType=context.nodeType)!==1&&nodeType!==9){return[]}if(documentIsHTML&&!seed){if(match=rquickExpr.exec(selector)){if(m=match[1]){if(nodeType===9){elem=context.getElementById(m);if(elem&&elem.parentNode){if(elem.id===m){results.push(elem);return results}}else{return results}}else{if(context.ownerDocument&&(elem=context.ownerDocument.getElementById(m))&&contains(context,elem)&&elem.id===m){results.push(elem);return results}}}else if(match[2]){push.apply(results,context.getElementsByTagName(selector));return results}else if((m=match[3])&&support.getElementsByClassName&&context.getElementsByClassName){push.apply(results,context.getElementsByClassName(m));return results}}if(support.qsa&&(!rbuggyQSA||!rbuggyQSA.test(selector))){nid=old=expando;newContext=context;newSelector=nodeType===9&&selector;if(nodeType===1&&context.nodeName.toLowerCase()!=="object"){groups=tokenize(selector);if(old=context.getAttribute("id")){nid=old.replace(rescape,"\\$&")}else{context.setAttribute("id",nid)}nid="[id='"+nid+"'] ";i=groups.length;while(i--){groups[i]=nid+toSelector(groups[i])}newContext=rsibling.test(selector)&&testContext(context.parentNode)||context;newSelector=groups.join(",")}if(newSelector){try{push.apply(results,newContext.querySelectorAll(newSelector));return results}catch(qsaError){}finally{if(!old){context.removeAttribute("id")}}}}}return select(selector.replace(rtrim,"$1"),context,results,seed)}function createCache(){var keys=[];function cache(key,value){if(keys.push(key+" ")>Expr.cacheLength){delete cache[keys.shift()]}return cache[key+" "]=value}return cache}function markFunction(fn){fn[expando]=true;return fn}function assert(fn){var div=document.createElement("div");try{return!!fn(div)}catch(e){return false}finally{if(div.parentNode){div.parentNode.removeChild(div)}div=null}}function addHandle(attrs,handler){var arr=attrs.split("|"),i=attrs.length;while(i--){Expr.attrHandle[arr[i]]=handler}}function siblingCheck(a,b){var cur=b&&a,diff=cur&&a.nodeType===1&&b.nodeType===1&&(~b.sourceIndex||MAX_NEGATIVE)-(~a.sourceIndex||MAX_NEGATIVE);if(diff){return diff}if(cur){while(cur=cur.nextSibling){if(cur===b){return-1}}}return a?1:-1}function createInputPseudo(type){return function(elem){var name=elem.nodeName.toLowerCase();return name==="input"&&elem.type===type}}function createButtonPseudo(type){return function(elem){var name=elem.nodeName.toLowerCase();return(name==="input"||name==="button")&&elem.type===type}}function createPositionalPseudo(fn){return markFunction(function(argument){argument=+argument;return markFunction(function(seed,matches){var j,matchIndexes=fn([],seed.length,argument),i=matchIndexes.length;while(i--){if(seed[j=matchIndexes[i]]){seed[j]=!(matches[j]=seed[j])}}})})}function testContext(context){return context&&typeof context.getElementsByTagName!==strundefined&&context}support=Sizzle.support={};isXML=Sizzle.isXML=function(elem){var documentElement=elem&&(elem.ownerDocument||elem).documentElement;return documentElement?documentElement.nodeName!=="HTML":false};setDocument=Sizzle.setDocument=function(node){var hasCompare,doc=node?node.ownerDocument||node:preferredDoc,parent=doc.defaultView;if(doc===document||doc.nodeType!==9||!doc.documentElement){return document}document=doc;docElem=doc.documentElement;documentIsHTML=!isXML(doc);if(parent&&parent!==parent.top){if(parent.addEventListener){parent.addEventListener("unload",function(){setDocument()},false)}else if(parent.attachEvent){parent.attachEvent("onunload",function(){setDocument()})}}support.attributes=assert(function(div){div.className="i";return!div.getAttribute("className")});support.getElementsByTagName=assert(function(div){div.appendChild(doc.createComment(""));return!div.getElementsByTagName("*").length});support.getElementsByClassName=rnative.test(doc.getElementsByClassName)&&assert(function(div){div.innerHTML="
    ";div.firstChild.className="i";return div.getElementsByClassName("i").length===2});support.getById=assert(function(div){docElem.appendChild(div).id=expando;return!doc.getElementsByName||!doc.getElementsByName(expando).length});if(support.getById){Expr.find["ID"]=function(id,context){if(typeof context.getElementById!==strundefined&&documentIsHTML){var m=context.getElementById(id);return m&&m.parentNode?[m]:[]}};Expr.filter["ID"]=function(id){var attrId=id.replace(runescape,funescape);return function(elem){return elem.getAttribute("id")===attrId}}}else{delete Expr.find["ID"];Expr.filter["ID"]=function(id){var attrId=id.replace(runescape,funescape);return function(elem){var node=typeof elem.getAttributeNode!==strundefined&&elem.getAttributeNode("id");return node&&node.value===attrId}}}Expr.find["TAG"]=support.getElementsByTagName?function(tag,context){if(typeof context.getElementsByTagName!==strundefined){return context.getElementsByTagName(tag)}}:function(tag,context){var elem,tmp=[],i=0,results=context.getElementsByTagName(tag);if(tag==="*"){while(elem=results[i++]){if(elem.nodeType===1){tmp.push(elem)}}return tmp}return results};Expr.find["CLASS"]=support.getElementsByClassName&&function(className,context){if(typeof context.getElementsByClassName!==strundefined&&documentIsHTML){return context.getElementsByClassName(className)}};rbuggyMatches=[];rbuggyQSA=[];if(support.qsa=rnative.test(doc.querySelectorAll)){assert(function(div){div.innerHTML="";if(div.querySelectorAll("[t^='']").length){rbuggyQSA.push("[*^$]="+whitespace+"*(?:''|\"\")")}if(!div.querySelectorAll("[selected]").length){rbuggyQSA.push("\\["+whitespace+"*(?:value|"+booleans+")")}if(!div.querySelectorAll(":checked").length){rbuggyQSA.push(":checked")}});assert(function(div){var input=doc.createElement("input");input.setAttribute("type","hidden");div.appendChild(input).setAttribute("name","D");if(div.querySelectorAll("[name=d]").length){rbuggyQSA.push("name"+whitespace+"*[*^$|!~]?=")}if(!div.querySelectorAll(":enabled").length){rbuggyQSA.push(":enabled",":disabled")}div.querySelectorAll("*,:x");rbuggyQSA.push(",.*:")})}if(support.matchesSelector=rnative.test(matches=docElem.webkitMatchesSelector||docElem.mozMatchesSelector||docElem.oMatchesSelector||docElem.msMatchesSelector)){assert(function(div){support.disconnectedMatch=matches.call(div,"div");matches.call(div,"[s!='']:x");rbuggyMatches.push("!=",pseudos)})}rbuggyQSA=rbuggyQSA.length&&new RegExp(rbuggyQSA.join("|"));rbuggyMatches=rbuggyMatches.length&&new RegExp(rbuggyMatches.join("|"));hasCompare=rnative.test(docElem.compareDocumentPosition);contains=hasCompare||rnative.test(docElem.contains)?function(a,b){var adown=a.nodeType===9?a.documentElement:a,bup=b&&b.parentNode;return a===bup||!!(bup&&bup.nodeType===1&&(adown.contains?adown.contains(bup):a.compareDocumentPosition&&a.compareDocumentPosition(bup)&16))}:function(a,b){if(b){while(b=b.parentNode){if(b===a){return true}}}return false};sortOrder=hasCompare?function(a,b){if(a===b){hasDuplicate=true;return 0}var compare=!a.compareDocumentPosition-!b.compareDocumentPosition;if(compare){return compare}compare=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1;if(compare&1||!support.sortDetached&&b.compareDocumentPosition(a)===compare){if(a===doc||a.ownerDocument===preferredDoc&&contains(preferredDoc,a)){return-1}if(b===doc||b.ownerDocument===preferredDoc&&contains(preferredDoc,b)){return 1}return sortInput?indexOf.call(sortInput,a)-indexOf.call(sortInput,b):0}return compare&4?-1:1}:function(a,b){if(a===b){hasDuplicate=true;return 0}var cur,i=0,aup=a.parentNode,bup=b.parentNode,ap=[a],bp=[b];if(!aup||!bup){return a===doc?-1:b===doc?1:aup?-1:bup?1:sortInput?indexOf.call(sortInput,a)-indexOf.call(sortInput,b):0}else if(aup===bup){return siblingCheck(a,b)}cur=a;while(cur=cur.parentNode){ap.unshift(cur)}cur=b;while(cur=cur.parentNode){bp.unshift(cur)}while(ap[i]===bp[i]){i++}return i?siblingCheck(ap[i],bp[i]):ap[i]===preferredDoc?-1:bp[i]===preferredDoc?1:0};return doc};Sizzle.matches=function(expr,elements){return Sizzle(expr,null,null,elements)};Sizzle.matchesSelector=function(elem,expr){if((elem.ownerDocument||elem)!==document){setDocument(elem)}expr=expr.replace(rattributeQuotes,"='$1']");if(support.matchesSelector&&documentIsHTML&&(!rbuggyMatches||!rbuggyMatches.test(expr))&&(!rbuggyQSA||!rbuggyQSA.test(expr))){try{var ret=matches.call(elem,expr);if(ret||support.disconnectedMatch||elem.document&&elem.document.nodeType!==11){return ret}}catch(e){}}return Sizzle(expr,document,null,[elem]).length>0};Sizzle.contains=function(context,elem){if((context.ownerDocument||context)!==document){setDocument(context)}return contains(context,elem)};Sizzle.attr=function(elem,name){if((elem.ownerDocument||elem)!==document){setDocument(elem)}var fn=Expr.attrHandle[name.toLowerCase()],val=fn&&hasOwn.call(Expr.attrHandle,name.toLowerCase())?fn(elem,name,!documentIsHTML):undefined;return val!==undefined?val:support.attributes||!documentIsHTML?elem.getAttribute(name):(val=elem.getAttributeNode(name))&&val.specified?val.value:null};Sizzle.error=function(msg){throw new Error("Syntax error, unrecognized expression: "+msg)};Sizzle.uniqueSort=function(results){var elem,duplicates=[],j=0,i=0;hasDuplicate=!support.detectDuplicates;sortInput=!support.sortStable&&results.slice(0);results.sort(sortOrder);if(hasDuplicate){while(elem=results[i++]){if(elem===results[i]){j=duplicates.push(i)}}while(j--){results.splice(duplicates[j],1)}}sortInput=null;return results};getText=Sizzle.getText=function(elem){var node,ret="",i=0,nodeType=elem.nodeType;if(!nodeType){while(node=elem[i++]){ret+=getText(node)}}else if(nodeType===1||nodeType===9||nodeType===11){if(typeof elem.textContent==="string"){return elem.textContent}else{for(elem=elem.firstChild;elem;elem=elem.nextSibling){ret+=getText(elem)}}}else if(nodeType===3||nodeType===4){return elem.nodeValue}return ret};Expr=Sizzle.selectors={cacheLength:50,createPseudo:markFunction,match:matchExpr,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:true}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:true},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(match){match[1]=match[1].replace(runescape,funescape);match[3]=(match[4]||match[5]||"").replace(runescape,funescape);if(match[2]==="~="){match[3]=" "+match[3]+" "}return match.slice(0,4)},CHILD:function(match){match[1]=match[1].toLowerCase();if(match[1].slice(0,3)==="nth"){if(!match[3]){Sizzle.error(match[0])}match[4]=+(match[4]?match[5]+(match[6]||1):2*(match[3]==="even"||match[3]==="odd"));match[5]=+(match[7]+match[8]||match[3]==="odd")}else if(match[3]){Sizzle.error(match[0])}return match},PSEUDO:function(match){var excess,unquoted=!match[5]&&match[2];if(matchExpr["CHILD"].test(match[0])){return null}if(match[3]&&match[4]!==undefined){match[2]=match[4]}else if(unquoted&&rpseudo.test(unquoted)&&(excess=tokenize(unquoted,true))&&(excess=unquoted.indexOf(")",unquoted.length-excess)-unquoted.length)){match[0]=match[0].slice(0,excess);match[2]=unquoted.slice(0,excess)}return match.slice(0,3)}},filter:{TAG:function(nodeNameSelector){var nodeName=nodeNameSelector.replace(runescape,funescape).toLowerCase();return nodeNameSelector==="*"?function(){return true}:function(elem){return elem.nodeName&&elem.nodeName.toLowerCase()===nodeName}},CLASS:function(className){var pattern=classCache[className+" "];return pattern||(pattern=new RegExp("(^|"+whitespace+")"+className+"("+whitespace+"|$)"))&&classCache(className,function(elem){return pattern.test(typeof elem.className==="string"&&elem.className||typeof elem.getAttribute!==strundefined&&elem.getAttribute("class")||"")})},ATTR:function(name,operator,check){return function(elem){var result=Sizzle.attr(elem,name);if(result==null){return operator==="!="}if(!operator){return true}result+="";return operator==="="?result===check:operator==="!="?result!==check:operator==="^="?check&&result.indexOf(check)===0:operator==="*="?check&&result.indexOf(check)>-1:operator==="$="?check&&result.slice(-check.length)===check:operator==="~="?(" "+result+" ").indexOf(check)>-1:operator==="|="?result===check||result.slice(0,check.length+1)===check+"-":false}},CHILD:function(type,what,argument,first,last){var simple=type.slice(0,3)!=="nth",forward=type.slice(-4)!=="last",ofType=what==="of-type";return first===1&&last===0?function(elem){return!!elem.parentNode}:function(elem,context,xml){var cache,outerCache,node,diff,nodeIndex,start,dir=simple!==forward?"nextSibling":"previousSibling",parent=elem.parentNode,name=ofType&&elem.nodeName.toLowerCase(),useCache=!xml&&!ofType;if(parent){if(simple){while(dir){node=elem;while(node=node[dir]){if(ofType?node.nodeName.toLowerCase()===name:node.nodeType===1){return false}}start=dir=type==="only"&&!start&&"nextSibling"}return true}start=[forward?parent.firstChild:parent.lastChild];if(forward&&useCache){outerCache=parent[expando]||(parent[expando]={});cache=outerCache[type]||[];nodeIndex=cache[0]===dirruns&&cache[1];diff=cache[0]===dirruns&&cache[2];node=nodeIndex&&parent.childNodes[nodeIndex];while(node=++nodeIndex&&node&&node[dir]||(diff=nodeIndex=0)||start.pop()){if(node.nodeType===1&&++diff&&node===elem){outerCache[type]=[dirruns,nodeIndex,diff];break}}}else if(useCache&&(cache=(elem[expando]||(elem[expando]={}))[type])&&cache[0]===dirruns){diff=cache[1]}else{while(node=++nodeIndex&&node&&node[dir]||(diff=nodeIndex=0)||start.pop()){if((ofType?node.nodeName.toLowerCase()===name:node.nodeType===1)&&++diff){if(useCache){(node[expando]||(node[expando]={}))[type]=[dirruns,diff]}if(node===elem){break}}}}diff-=last;return diff===first||diff%first===0&&diff/first>=0}}},PSEUDO:function(pseudo,argument){var args,fn=Expr.pseudos[pseudo]||Expr.setFilters[pseudo.toLowerCase()]||Sizzle.error("unsupported pseudo: "+pseudo);if(fn[expando]){return fn(argument)}if(fn.length>1){args=[pseudo,pseudo,"",argument];return Expr.setFilters.hasOwnProperty(pseudo.toLowerCase())?markFunction(function(seed,matches){var idx,matched=fn(seed,argument),i=matched.length;while(i--){idx=indexOf.call(seed,matched[i]);seed[idx]=!(matches[idx]=matched[i])}}):function(elem){return fn(elem,0,args)}}return fn}},pseudos:{not:markFunction(function(selector){var input=[],results=[],matcher=compile(selector.replace(rtrim,"$1"));return matcher[expando]?markFunction(function(seed,matches,context,xml){var elem,unmatched=matcher(seed,null,xml,[]),i=seed.length;while(i--){if(elem=unmatched[i]){seed[i]=!(matches[i]=elem)}}}):function(elem,context,xml){input[0]=elem;matcher(input,null,xml,results);return!results.pop()}}),has:markFunction(function(selector){return function(elem){return Sizzle(selector,elem).length>0}}),contains:markFunction(function(text){return function(elem){return(elem.textContent||elem.innerText||getText(elem)).indexOf(text)>-1}}),lang:markFunction(function(lang){if(!ridentifier.test(lang||"")){Sizzle.error("unsupported lang: "+lang)}lang=lang.replace(runescape,funescape).toLowerCase();return function(elem){var elemLang;do{if(elemLang=documentIsHTML?elem.lang:elem.getAttribute("xml:lang")||elem.getAttribute("lang")){elemLang=elemLang.toLowerCase();return elemLang===lang||elemLang.indexOf(lang+"-")===0}}while((elem=elem.parentNode)&&elem.nodeType===1);return false}}),target:function(elem){var hash=window.location&&window.location.hash;return hash&&hash.slice(1)===elem.id},root:function(elem){return elem===docElem},focus:function(elem){return elem===document.activeElement&&(!document.hasFocus||document.hasFocus())&&!!(elem.type||elem.href||~elem.tabIndex)},enabled:function(elem){return elem.disabled===false},disabled:function(elem){return elem.disabled===true},checked:function(elem){var nodeName=elem.nodeName.toLowerCase();return nodeName==="input"&&!!elem.checked||nodeName==="option"&&!!elem.selected},selected:function(elem){if(elem.parentNode){elem.parentNode.selectedIndex}return elem.selected===true},empty:function(elem){for(elem=elem.firstChild;elem;elem=elem.nextSibling){if(elem.nodeType<6){return false}}return true},parent:function(elem){return!Expr.pseudos["empty"](elem)},header:function(elem){return rheader.test(elem.nodeName)},input:function(elem){return rinputs.test(elem.nodeName)},button:function(elem){var name=elem.nodeName.toLowerCase();return name==="input"&&elem.type==="button"||name==="button"},text:function(elem){var attr;return elem.nodeName.toLowerCase()==="input"&&elem.type==="text"&&((attr=elem.getAttribute("type"))==null||attr.toLowerCase()==="text")},first:createPositionalPseudo(function(){return[0]}),last:createPositionalPseudo(function(matchIndexes,length){return[length-1]}),eq:createPositionalPseudo(function(matchIndexes,length,argument){return[argument<0?argument+length:argument]}),even:createPositionalPseudo(function(matchIndexes,length){var i=0;for(;i=0;){matchIndexes.push(i)}return matchIndexes}),gt:createPositionalPseudo(function(matchIndexes,length,argument){var i=argument<0?argument+length:argument;for(;++i1?function(elem,context,xml){var i=matchers.length;while(i--){if(!matchers[i](elem,context,xml)){return false}}return true}:matchers[0]}function multipleContexts(selector,contexts,results){var i=0,len=contexts.length;for(;i-1){seed[temp]=!(results[temp]=elem)}}}}else{matcherOut=condense(matcherOut===results?matcherOut.splice(preexisting,matcherOut.length):matcherOut);if(postFinder){postFinder(null,results,matcherOut,xml)}else{push.apply(results,matcherOut)}}})}function matcherFromTokens(tokens){var checkContext,matcher,j,len=tokens.length,leadingRelative=Expr.relative[tokens[0].type],implicitRelative=leadingRelative||Expr.relative[" "],i=leadingRelative?1:0,matchContext=addCombinator(function(elem){return elem===checkContext},implicitRelative,true),matchAnyContext=addCombinator(function(elem){return indexOf.call(checkContext,elem)>-1},implicitRelative,true),matchers=[function(elem,context,xml){return!leadingRelative&&(xml||context!==outermostContext)||((checkContext=context).nodeType?matchContext(elem,context,xml):matchAnyContext(elem,context,xml))}];for(;i1&&elementMatcher(matchers),i>1&&toSelector(tokens.slice(0,i-1).concat({value:tokens[i-2].type===" "?"*":""})).replace(rtrim,"$1"),matcher,i0,byElement=elementMatchers.length>0,superMatcher=function(seed,context,xml,results,outermost){var elem,j,matcher,matchedCount=0,i="0",unmatched=seed&&[],setMatched=[],contextBackup=outermostContext,elems=seed||byElement&&Expr.find["TAG"]("*",outermost),dirrunsUnique=dirruns+=contextBackup==null?1:Math.random()||.1,len=elems.length;if(outermost){outermostContext=context!==document&&context}for(;i!==len&&(elem=elems[i])!=null;i++){if(byElement&&elem){j=0;while(matcher=elementMatchers[j++]){if(matcher(elem,context,xml)){results.push(elem);break}}if(outermost){dirruns=dirrunsUnique}}if(bySet){if(elem=!matcher&&elem){matchedCount--}if(seed){unmatched.push(elem)}}}matchedCount+=i;if(bySet&&i!==matchedCount){j=0;while(matcher=setMatchers[j++]){matcher(unmatched,setMatched,context,xml)}if(seed){if(matchedCount>0){while(i--){if(!(unmatched[i]||setMatched[i])){setMatched[i]=pop.call(results)}}}setMatched=condense(setMatched)}push.apply(results,setMatched);if(outermost&&!seed&&setMatched.length>0&&matchedCount+setMatchers.length>1){Sizzle.uniqueSort(results)}}if(outermost){dirruns=dirrunsUnique;outermostContext=contextBackup}return unmatched};return bySet?markFunction(superMatcher):superMatcher}compile=Sizzle.compile=function(selector,match){var i,setMatchers=[],elementMatchers=[],cached=compilerCache[selector+" "];if(!cached){if(!match){match=tokenize(selector)}i=match.length;while(i--){cached=matcherFromTokens(match[i]);if(cached[expando]){setMatchers.push(cached)}else{elementMatchers.push(cached)}}cached=compilerCache(selector,matcherFromGroupMatchers(elementMatchers,setMatchers));cached.selector=selector}return cached};select=Sizzle.select=function(selector,context,results,seed){var i,tokens,token,type,find,compiled=typeof selector==="function"&&selector,match=!seed&&tokenize(selector=compiled.selector||selector);results=results||[];if(match.length===1){tokens=match[0]=match[0].slice(0);if(tokens.length>2&&(token=tokens[0]).type==="ID"&&support.getById&&context.nodeType===9&&documentIsHTML&&Expr.relative[tokens[1].type]){context=(Expr.find["ID"](token.matches[0].replace(runescape,funescape),context)||[])[0];if(!context){return results}else if(compiled){context=context.parentNode}selector=selector.slice(tokens.shift().value.length)}i=matchExpr["needsContext"].test(selector)?0:tokens.length;while(i--){token=tokens[i];if(Expr.relative[type=token.type]){break}if(find=Expr.find[type]){if(seed=find(token.matches[0].replace(runescape,funescape),rsibling.test(tokens[0].type)&&testContext(context.parentNode)||context)){ -tokens.splice(i,1);selector=seed.length&&toSelector(tokens);if(!selector){push.apply(results,seed);return results}break}}}}(compiled||compile(selector,match))(seed,context,!documentIsHTML,results,rsibling.test(selector)&&testContext(context.parentNode)||context);return results};support.sortStable=expando.split("").sort(sortOrder).join("")===expando;support.detectDuplicates=!!hasDuplicate;setDocument();support.sortDetached=assert(function(div1){return div1.compareDocumentPosition(document.createElement("div"))&1});if(!assert(function(div){div.innerHTML="";return div.firstChild.getAttribute("href")==="#"})){addHandle("type|href|height|width",function(elem,name,isXML){if(!isXML){return elem.getAttribute(name,name.toLowerCase()==="type"?1:2)}})}if(!support.attributes||!assert(function(div){div.innerHTML="";div.firstChild.setAttribute("value","");return div.firstChild.getAttribute("value")===""})){addHandle("value",function(elem,name,isXML){if(!isXML&&elem.nodeName.toLowerCase()==="input"){return elem.defaultValue}})}if(!assert(function(div){return div.getAttribute("disabled")==null})){addHandle(booleans,function(elem,name,isXML){var val;if(!isXML){return elem[name]===true?name.toLowerCase():(val=elem.getAttributeNode(name))&&val.specified?val.value:null}})}if(typeof define==="function"&&define.amd){define(function(){return Sizzle})}else if(typeof module!=="undefined"&&module.exports){module.exports=Sizzle}else{window.Sizzle=Sizzle}})(window);(function(engine){var extendElements=Prototype.Selector.extendElements;function select(selector,scope){return extendElements(engine(selector,scope||document))}function match(element,selector){return engine.matches(selector,[element]).length==1}Prototype.Selector.engine=engine;Prototype.Selector.select=select;Prototype.Selector.match=match})(Sizzle);window.Sizzle=Prototype._original_property;delete Prototype._original_property;var Form={reset:function(form){form=$(form);form.reset();return form},serializeElements:function(elements,options){if(typeof options!="object")options={hash:!!options};else if(Object.isUndefined(options.hash))options.hash=true;var key,value,submitted=false,submit=options.submit,accumulator,initial;if(options.hash){initial={};accumulator=function(result,key,value){if(key in result){if(!Object.isArray(result[key]))result[key]=[result[key]];result[key]=result[key].concat(value)}else result[key]=value;return result}}else{initial="";accumulator=function(result,key,values){if(!Object.isArray(values)){values=[values]}if(!values.length){return result}var encodedKey=encodeURIComponent(key).gsub(/%20/,"+");return result+(result?"&":"")+values.map(function(value){value=value.gsub(/(\r)?\n/,"\r\n");value=encodeURIComponent(value);value=value.gsub(/%20/,"+");return encodedKey+"="+value}).join("&")}}return elements.inject(initial,function(result,element){if(!element.disabled&&element.name){key=element.name;value=$(element).getValue();if(value!=null&&element.type!="file"&&(element.type!="submit"||!submitted&&submit!==false&&(!submit||key==submit)&&(submitted=true))){result=accumulator(result,key,value)}}return result})}};Form.Methods={serialize:function(form,options){return Form.serializeElements(Form.getElements(form),options)},getElements:function(form){var elements=$(form).getElementsByTagName("*");var element,results=[],serializers=Form.Element.Serializers;for(var i=0;element=elements[i];i++){if(serializers[element.tagName.toLowerCase()])results.push(Element.extend(element))}return results},getInputs:function(form,typeName,name){form=$(form);var inputs=form.getElementsByTagName("input");if(!typeName&&!name)return $A(inputs).map(Element.extend);for(var i=0,matchingInputs=[],length=inputs.length;i=0}).sortBy(function(element){return element.tabIndex}).first();return firstByIndex?firstByIndex:elements.find(function(element){return/^(?:input|select|textarea)$/i.test(element.tagName)})},focusFirstElement:function(form){form=$(form);var element=form.findFirstElement();if(element)element.activate();return form},request:function(form,options){form=$(form),options=Object.clone(options||{});var params=options.parameters,action=form.readAttribute("action")||"";if(action.blank())action=window.location.href;options.parameters=form.serialize(true);if(params){if(Object.isString(params))params=params.toQueryParams();Object.extend(options.parameters,params)}if(form.hasAttribute("method")&&!options.method)options.method=form.method;return new Ajax.Request(action,options)}};Form.Element={focus:function(element){$(element).focus();return element},select:function(element){$(element).select();return element}};Form.Element.Methods={serialize:function(element){element=$(element);if(!element.disabled&&element.name){var value=element.getValue();if(value!=undefined){var pair={};pair[element.name]=value;return Object.toQueryString(pair)}}return""},getValue:function(element){element=$(element);var method=element.tagName.toLowerCase();return Form.Element.Serializers[method](element)},setValue:function(element,value){element=$(element);var method=element.tagName.toLowerCase();Form.Element.Serializers[method](element,value);return element},clear:function(element){$(element).value="";return element},present:function(element){return $(element).value!=""},activate:function(element){element=$(element);try{element.focus();if(element.select&&(element.tagName.toLowerCase()!="input"||!/^(?:button|reset|submit)$/i.test(element.type)))element.select()}catch(e){}return element},disable:function(element){element=$(element);element.disabled=true;return element},enable:function(element){element=$(element);element.disabled=false;return element}};var Field=Form.Element;var $F=Form.Element.Methods.getValue;Form.Element.Serializers=function(){function input(element,value){switch(element.type.toLowerCase()){case"checkbox":case"radio":return inputSelector(element,value);default:return valueSelector(element,value)}}function inputSelector(element,value){if(Object.isUndefined(value))return element.checked?element.value:null;else element.checked=!!value}function valueSelector(element,value){if(Object.isUndefined(value))return element.value;else element.value=value}function select(element,value){if(Object.isUndefined(value))return(element.type==="select-one"?selectOne:selectMany)(element);var opt,currentValue,single=!Object.isArray(value);for(var i=0,length=element.length;i=0?optionValue(element.options[index]):null}function selectMany(element){var values,length=element.length;if(!length)return null;for(var i=0,values=[];i=this.offset[1]&&y=this.offset[0]&&x=this.offset[1]&&this.ycomp=this.offset[0]&&this.xcomp0})._each(iterator,context)},set:function(className){this.element.className=className},add:function(classNameToAdd){if(this.include(classNameToAdd))return;this.set($A(this).concat(classNameToAdd).join(" "))},remove:function(classNameToRemove){if(!this.include(classNameToRemove))return;this.set($A(this).without(classNameToRemove).join(" "))},toString:function(){return $A(this).join(" ")}};Object.extend(Element.ClassNames.prototype,Enumerable);(function(){window.Selector=Class.create({initialize:function(expression){this.expression=expression.strip()},findElements:function(rootElement){return Prototype.Selector.select(this.expression,rootElement)},match:function(element){return Prototype.Selector.match(element,this.expression)},toString:function(){return this.expression},inspect:function(){return"#"}});Object.extend(Selector,{matchElements:function(elements,expression){var match=Prototype.Selector.match,results=[];for(var i=0,length=elements.length;i=y;y++)if(l=Math.sin(h),m=Math.tan(h),r=m*Math.sqrt(1-t*l*l),c=Math.sin(2*h),u=i*h-s*c+e*Math.sin(4*h)-o*Math.sin(6*h),d=i-2*s*Math.cos(2*h)+4*e*Math.cos(4*h)-6*o*Math.cos(6*h),p=2*u+r*(u*u+a)-2*n*(r*u+1),_=t*c*(u*u+a-2*n*u)/(2*r),f=2*(n-u)*(r*d-2/c)-2*d,P=p/(_+f),h+=P,1e-10>=Math.abs(P))return h;return Proj4js.reportError("phi4z: No convergence"),null}function e4fn(t){var i,s;return i=1+t,s=1-t,Math.sqrt(Math.pow(i,i)*Math.pow(s,s))}var Proj4js={defaultDatum:"WGS84",transform:function(t,i,s){if(!t.readyToUse)return this.reportError("Proj4js initialization for:"+t.srsCode+" not yet complete"),s;if(!i.readyToUse)return this.reportError("Proj4js initialization for:"+i.srsCode+" not yet complete"),s;if(t.datum&&i.datum&&((t.datum.datum_type==Proj4js.common.PJD_3PARAM||t.datum.datum_type==Proj4js.common.PJD_7PARAM)&&"WGS84"!=i.datumCode||(i.datum.datum_type==Proj4js.common.PJD_3PARAM||i.datum.datum_type==Proj4js.common.PJD_7PARAM)&&"WGS84"!=t.datumCode)){var e=Proj4js.WGS84;this.transform(t,e,s),t=e}return"enu"!=t.axis&&this.adjust_axis(t,!1,s),"longlat"==t.projName?(s.x*=Proj4js.common.D2R,s.y*=Proj4js.common.D2R):(t.to_meter&&(s.x*=t.to_meter,s.y*=t.to_meter),t.inverse(s)),t.from_greenwich&&(s.x+=t.from_greenwich),s=this.datum_transform(t.datum,i.datum,s),i.from_greenwich&&(s.x-=i.from_greenwich),"longlat"==i.projName?(s.x*=Proj4js.common.R2D,s.y*=Proj4js.common.R2D):(i.forward(s),i.to_meter&&(s.x/=i.to_meter,s.y/=i.to_meter)),"enu"!=i.axis&&this.adjust_axis(i,!0,s),s},datum_transform:function(t,i,s){return t.compare_datums(i)?s:t.datum_type==Proj4js.common.PJD_NODATUM||i.datum_type==Proj4js.common.PJD_NODATUM?s:((t.es!=i.es||t.a!=i.a||t.datum_type==Proj4js.common.PJD_3PARAM||t.datum_type==Proj4js.common.PJD_7PARAM||i.datum_type==Proj4js.common.PJD_3PARAM||i.datum_type==Proj4js.common.PJD_7PARAM)&&(t.geodetic_to_geocentric(s),(t.datum_type==Proj4js.common.PJD_3PARAM||t.datum_type==Proj4js.common.PJD_7PARAM)&&t.geocentric_to_wgs84(s),(i.datum_type==Proj4js.common.PJD_3PARAM||i.datum_type==Proj4js.common.PJD_7PARAM)&&i.geocentric_from_wgs84(s),i.geocentric_to_geodetic(s)),s)},adjust_axis:function(t,i,s){for(var e,o,n=s.x,a=s.y,r=s.z||0,h=0;3>h;h++)if(!i||2!=h||void 0!==s.z)switch(0==h?(e=n,o="x"):1==h?(e=a,o="y"):(e=r,o="z"),t.axis[h]){case"e":s[o]=e;break;case"w":s[o]=-e;break;case"n":s[o]=e;break;case"s":s[o]=-e;break;case"u":void 0!==s[o]&&(s.z=e);break;case"d":void 0!==s[o]&&(s.z=-e);break;default:return alert("ERROR: unknow axis ("+t.axis[h]+") - check definition of "+t.projName),null}return s},reportError:function(){},extend:function(t,i){if(t=t||{},i)for(var s in i){var e=i[s];void 0!==e&&(t[s]=e)}return t},Class:function(){for(var t,i=function(){this.initialize.apply(this,arguments)},s={},e=0;arguments.length>e;++e)t="function"==typeof arguments[e]?arguments[e].prototype:arguments[e],Proj4js.extend(s,t);return i.prototype=s,i},bind:function(t,i){var s=Array.prototype.slice.apply(arguments,[2]);return function(){var e=s.concat(Array.prototype.slice.apply(arguments,[0])); +Math.sign = Math.sign || function(x) { + x = +x; // convert to a number + if (x === 0 || isNaN(x)) { + return x; + } + return x > 0 ? 1 : -1; +} -return t.apply(i,e)}},scriptName:"proj4js-combined.js",defsLookupService:"http://spatialreference.org/ref",libPath:null,getScriptLocation:function(){if(this.libPath)return this.libPath;for(var t=this.scriptName,i=t.length,s=document.getElementsByTagName("script"),e=0;s.length>e;e++){var o=s[e].getAttribute("src");if(o){var n=o.lastIndexOf(t);if(n>-1&&n+i==o.length){this.libPath=o.slice(0,-i);break}}}return this.libPath||""},loadScript:function(t,i,s,e){var o=document.createElement("script");o.defer=!1,o.type="text/javascript",o.id=t,o.src=t,o.onload=i,o.onerror=s,o.loadCheck=e,/MSIE/.test(navigator.userAgent)&&(o.onreadystatechange=this.checkReadyState),document.getElementsByTagName("head")[0].appendChild(o)},checkReadyState:function(){"loaded"==this.readyState&&(this.loadCheck()?this.onload():this.onerror())}};Proj4js.Proj=Proj4js.Class({readyToUse:!1,title:null,projName:null,units:null,datum:null,x0:0,y0:0,localCS:!1,queue:null,initialize:function(t,i){if(this.srsCodeInput=t,this.queue=[],i&&this.queue.push(i),t.indexOf("GEOGCS")>=0||t.indexOf("GEOCCS")>=0||t.indexOf("PROJCS")>=0||t.indexOf("LOCAL_CS")>=0)return this.parseWKT(t),this.deriveConstants(),this.loadProjCode(this.projName),void 0;if(0==t.indexOf("urn:")){var s=t.split(":");"ogc"!=s[1]&&"x-ogc"!=s[1]||"def"!=s[2]||"crs"!=s[3]||(t=s[4]+":"+s[s.length-1])}else if(0==t.indexOf("http://")){var e=t.split("#");e[0].match(/epsg.org/)?t="EPSG:"+e[1]:e[0].match(/RIG.xml/)&&(t="IGNF:"+e[1])}this.srsCode=t.toUpperCase(),0==this.srsCode.indexOf("EPSG")?(this.srsCode=this.srsCode,this.srsAuth="epsg",this.srsProjNumber=this.srsCode.substring(5)):0==this.srsCode.indexOf("IGNF")?(this.srsCode=this.srsCode,this.srsAuth="IGNF",this.srsProjNumber=this.srsCode.substring(5)):0==this.srsCode.indexOf("CRS")?(this.srsCode=this.srsCode,this.srsAuth="CRS",this.srsProjNumber=this.srsCode.substring(4)):(this.srsAuth="",this.srsProjNumber=this.srsCode),this.loadProjDefinition()},loadProjDefinition:function(){if(Proj4js.defs[this.srsCode])return this.defsLoaded(),void 0;var t=Proj4js.getScriptLocation()+"defs/"+this.srsAuth.toUpperCase()+this.srsProjNumber+".js";Proj4js.loadScript(t,Proj4js.bind(this.defsLoaded,this),Proj4js.bind(this.loadFromService,this),Proj4js.bind(this.checkDefsLoaded,this))},loadFromService:function(){var t=Proj4js.defsLookupService+"/"+this.srsAuth+"/"+this.srsProjNumber+"/proj4js/";Proj4js.loadScript(t,Proj4js.bind(this.defsLoaded,this),Proj4js.bind(this.defsFailed,this),Proj4js.bind(this.checkDefsLoaded,this))},defsLoaded:function(){this.parseDefs(),this.loadProjCode(this.projName)},checkDefsLoaded:function(){return Proj4js.defs[this.srsCode]?!0:!1},defsFailed:function(){Proj4js.reportError("failed to load projection definition for: "+this.srsCode),Proj4js.defs[this.srsCode]=Proj4js.defs.WGS84,this.defsLoaded()},loadProjCode:function(t){if(Proj4js.Proj[t])return this.initTransforms(),void 0;var i=Proj4js.getScriptLocation()+"projCode/"+t+".js";Proj4js.loadScript(i,Proj4js.bind(this.loadProjCodeSuccess,this,t),Proj4js.bind(this.loadProjCodeFailure,this,t),Proj4js.bind(this.checkCodeLoaded,this,t))},loadProjCodeSuccess:function(t){Proj4js.Proj[t].dependsOn?this.loadProjCode(Proj4js.Proj[t].dependsOn):this.initTransforms()},loadProjCodeFailure:function(t){Proj4js.reportError("failed to find projection file for: "+t)},checkCodeLoaded:function(t){return Proj4js.Proj[t]?!0:!1},initTransforms:function(){if(Proj4js.extend(this,Proj4js.Proj[this.projName]),this.init(),this.readyToUse=!0,this.queue)for(var t;t=this.queue.shift();)t.call(this,this)},wktRE:/^(\w+)\[(.*)\]$/,parseWKT:function(t){var i=t.match(this.wktRE);if(i){var s,e=i[1],o=i[2],n=o.split(",");s="TOWGS84"==e.toUpperCase()?e:n.shift(),s=s.replace(/^\"/,""),s=s.replace(/\"$/,"");for(var a=[],r=0,h="",l=0;n.length>l;++l){for(var c=n[l],m=0;c.length>m;++m)"["==c.charAt(m)&&++r,"]"==c.charAt(m)&&--r;h+=c,0===r?(a.push(h),h=""):h+=","}switch(e){case"LOCAL_CS":this.projName="identity",this.localCS=!0,this.srsCode=s;break;case"GEOGCS":this.projName="longlat",this.geocsCode=s,this.srsCode||(this.srsCode=s);break;case"PROJCS":this.srsCode=s;break;case"GEOCCS":break;case"PROJECTION":this.projName=Proj4js.wktProjections[s];break;case"DATUM":this.datumName=s;break;case"LOCAL_DATUM":this.datumCode="none";break;case"SPHEROID":this.ellps=s,this.a=parseFloat(a.shift()),this.rf=parseFloat(a.shift());break;case"PRIMEM":this.from_greenwich=parseFloat(a.shift());break;case"UNIT":this.units=s,this.unitsPerMeter=parseFloat(a.shift());break;case"PARAMETER":var u=s.toLowerCase(),d=parseFloat(a.shift());switch(u){case"false_easting":this.x0=d;break;case"false_northing":this.y0=d;break;case"scale_factor":this.k0=d;break;case"central_meridian":this.long0=d*Proj4js.common.D2R;break;case"latitude_of_origin":this.lat0=d*Proj4js.common.D2R;break;case"more_here":break;default:}break;case"TOWGS84":this.datum_params=a;break;case"AXIS":var u=s.toLowerCase(),d=a.shift();switch(d){case"EAST":d="e";break;case"WEST":d="w";break;case"NORTH":d="n";break;case"SOUTH":d="s";break;case"UP":d="u";break;case"DOWN":d="d";break;case"OTHER":default:d=" "}switch(this.axis||(this.axis="enu"),u){case"x":this.axis=d+this.axis.substr(1,2);break;case"y":this.axis=this.axis.substr(0,1)+d+this.axis.substr(2,1);break;case"z":this.axis=this.axis.substr(0,2)+d;break;default:}case"MORE_HERE":break;default:}for(var l=0;a.length>l;++l)this.parseWKT(a[l])}},parseDefs:function(){this.defData=Proj4js.defs[this.srsCode];var t,i;if(this.defData){for(var s=this.defData.split("+"),e=0;s.length>e;e++){var o=s[e].split("=");switch(t=o[0].toLowerCase(),i=o[1],t.replace(/\s/gi,"")){case"":break;case"title":this.title=i;break;case"proj":this.projName=i.replace(/\s/gi,"");break;case"units":this.units=i.replace(/\s/gi,"");break;case"datum":this.datumCode=i.replace(/\s/gi,"");break;case"nadgrids":this.nagrids=i.replace(/\s/gi,"");break;case"ellps":this.ellps=i.replace(/\s/gi,"");break;case"a":this.a=parseFloat(i);break;case"b":this.b=parseFloat(i);break;case"rf":this.rf=parseFloat(i);break;case"lat_0":this.lat0=i*Proj4js.common.D2R;break;case"lat_1":this.lat1=i*Proj4js.common.D2R;break;case"lat_2":this.lat2=i*Proj4js.common.D2R;break;case"lat_ts":this.lat_ts=i*Proj4js.common.D2R;break;case"lon_0":this.long0=i*Proj4js.common.D2R;break;case"alpha":this.alpha=parseFloat(i)*Proj4js.common.D2R;break;case"lonc":this.longc=i*Proj4js.common.D2R;break;case"x_0":this.x0=parseFloat(i);break;case"y_0":this.y0=parseFloat(i);break;case"k_0":this.k0=parseFloat(i);break;case"k":this.k0=parseFloat(i);break;case"r_a":this.R_A=!0;break;case"zone":this.zone=parseInt(i,10);break;case"south":this.utmSouth=!0;break;case"towgs84":this.datum_params=i.split(",");break;case"to_meter":this.to_meter=parseFloat(i);break;case"from_greenwich":this.from_greenwich=i*Proj4js.common.D2R;break;case"pm":i=i.replace(/\s/gi,""),this.from_greenwich=Proj4js.PrimeMeridian[i]?Proj4js.PrimeMeridian[i]:parseFloat(i),this.from_greenwich*=Proj4js.common.D2R;break;case"axis":i=i.replace(/\s/gi,"");var n="ewnsud";3==i.length&&-1!=n.indexOf(i.substr(0,1))&&-1!=n.indexOf(i.substr(1,1))&&-1!=n.indexOf(i.substr(2,1))&&(this.axis=i);break;case"no_defs":break;default:}}this.deriveConstants()}},deriveConstants:function(){if("@null"==this.nagrids&&(this.datumCode="none"),this.datumCode&&"none"!=this.datumCode){var t=Proj4js.Datum[this.datumCode];t&&(this.datum_params=t.towgs84?t.towgs84.split(","):null,this.ellps=t.ellipse,this.datumName=t.datumName?t.datumName:this.datumCode)}if(!this.a){var i=Proj4js.Ellipsoid[this.ellps]?Proj4js.Ellipsoid[this.ellps]:Proj4js.Ellipsoid.WGS84;Proj4js.extend(this,i)}this.rf&&!this.b&&(this.b=(1-1/this.rf)*this.a),(0===this.rf||Math.abs(this.a-this.b)=a;a++)if(s=t*Math.sin(n),e=this.HALF_PI-2*Math.atan(i*Math.pow((1-s)/(1+s),o))-n,n+=e,1e-10>=Math.abs(e))return n;return alert("phi2z has NoConvergence"),-9999},qsfnz:function(t,i){var s;return t>1e-7?(s=t*i,(1-t*t)*(i/(1-s*s)-.5/t*Math.log((1-s)/(1+s)))):2*i},asinz:function(t){return Math.abs(t)>1&&(t=t>1?1:-1),Math.asin(t)},e0fn:function(t){return 1-.25*t*(1+t/16*(3+1.25*t))},e1fn:function(t){return.375*t*(1+.25*t*(1+.46875*t))},e2fn:function(t){return.05859375*t*t*(1+.75*t)},e3fn:function(t){return t*t*t*(35/3072)},mlfn:function(t,i,s,e,o){return t*o-i*Math.sin(2*o)+s*Math.sin(4*o)-e*Math.sin(6*o)},srat:function(t,i){return Math.pow((1-t)/(1+t),i)},sign:function(t){return 0>t?-1:1},adjust_lon:function(t){return t=Math.abs(t)this.HALF_PI)return+Number.NaN;if(i==this.HALF_PI)return Number.POSITIVE_INFINITY;if(i==-1*this.HALF_PI)return-1*Number.POSITIVE_INFINITY;var e=t*s;return Math.log(Math.tan((this.HALF_PI+i)/2))+t*Math.log((1-e)/(1+e))/2},fL:function(t,i){return 2*Math.atan(t*Math.exp(i))-this.HALF_PI},invlatiso:function(t,i){var s=this.fL(1,i),e=0,o=0;do e=s,o=t*Math.sin(e),s=this.fL(Math.exp(t*Math.log((1+o)/(1-o))/2),i);while(Math.abs(s-e)>1e-12);return s},sinh:function(t){var i=Math.exp(t);return i=(i-1/i)/2},cosh:function(t){var i=Math.exp(t);return i=(i+1/i)/2},tanh:function(t){var i=Math.exp(t);return i=(i-1/i)/(i+1/i)},asinh:function(t){var i=t>=0?1:-1;return i*Math.log(Math.abs(t)+Math.sqrt(t*t+1))},acosh:function(t){return 2*Math.log(Math.sqrt((t+1)/2)+Math.sqrt((t-1)/2))},atanh:function(t){return Math.log((t-1)/(t+1))/2},gN:function(t,i,s){var e=i*s;return t/Math.sqrt(1-e*e)},pj_enfn:function(t){var i=[];i[0]=this.C00-t*(this.C02+t*(this.C04+t*(this.C06+t*this.C08))),i[1]=t*(this.C22-t*(this.C04+t*(this.C06+t*this.C08)));var s=t*t;return i[2]=s*(this.C44-t*(this.C46+t*this.C48)),s*=t,i[3]=s*(this.C66-t*this.C68),i[4]=s*t*this.C88,i},pj_mlfn:function(t,i,s,e){return s*=i,i*=i,e[0]*t-s*(e[1]+i*(e[2]+i*(e[3]+i*e[4])))},pj_inv_mlfn:function(t,i,s){for(var e=1/(1-i),o=t,n=Proj4js.common.MAX_ITER;n;--n){var a=Math.sin(o),r=1-i*a*a;if(r=(this.pj_mlfn(o,a,Math.cos(o),s)-t)*r*Math.sqrt(r)*e,o-=r,Math.abs(r)i;i++)t.datum_params[i]=parseFloat(t.datum_params[i]);(0!=t.datum_params[0]||0!=t.datum_params[1]||0!=t.datum_params[2])&&(this.datum_type=Proj4js.common.PJD_3PARAM),t.datum_params.length>3&&(0!=t.datum_params[3]||0!=t.datum_params[4]||0!=t.datum_params[5]||0!=t.datum_params[6])&&(this.datum_type=Proj4js.common.PJD_7PARAM,t.datum_params[3]*=Proj4js.common.SEC_TO_RAD,t.datum_params[4]*=Proj4js.common.SEC_TO_RAD,t.datum_params[5]*=Proj4js.common.SEC_TO_RAD,t.datum_params[6]=t.datum_params[6]/1e6+1)}t&&(this.a=t.a,this.b=t.b,this.es=t.es,this.ep2=t.ep2,this.datum_params=t.datum_params)},compare_datums:function(t){return this.datum_type!=t.datum_type?!1:this.a!=t.a||Math.abs(this.es-t.es)>5e-11?!1:this.datum_type==Proj4js.common.PJD_3PARAM?this.datum_params[0]==t.datum_params[0]&&this.datum_params[1]==t.datum_params[1]&&this.datum_params[2]==t.datum_params[2]:this.datum_type==Proj4js.common.PJD_7PARAM?this.datum_params[0]==t.datum_params[0]&&this.datum_params[1]==t.datum_params[1]&&this.datum_params[2]==t.datum_params[2]&&this.datum_params[3]==t.datum_params[3]&&this.datum_params[4]==t.datum_params[4]&&this.datum_params[5]==t.datum_params[5]&&this.datum_params[6]==t.datum_params[6]:this.datum_type==Proj4js.common.PJD_GRIDSHIFT||t.datum_type==Proj4js.common.PJD_GRIDSHIFT?(alert("ERROR: Grid shift transformations are not implemented."),!1):!0},geodetic_to_geocentric:function(t){var i,s,e,o,n,a,r,h=t.x,l=t.y,c=t.z?t.z:0,m=0;if(-Proj4js.common.HALF_PI>l&&l>-1.001*Proj4js.common.HALF_PI)l=-Proj4js.common.HALF_PI;else if(l>Proj4js.common.HALF_PI&&1.001*Proj4js.common.HALF_PI>l)l=Proj4js.common.HALF_PI;else if(-Proj4js.common.HALF_PI>l||l>Proj4js.common.HALF_PI)return Proj4js.reportError("geocent:lat out of range:"+l),null;return h>Proj4js.common.PI&&(h-=2*Proj4js.common.PI),n=Math.sin(l),r=Math.cos(l),a=n*n,o=this.a/Math.sqrt(1-this.es*a),i=(o+c)*r*Math.cos(h),s=(o+c)*r*Math.sin(h),e=(o*(1-this.es)+c)*n,t.x=i,t.y=s,t.z=e,m},geocentric_to_geodetic:function(t){var i,s,e,o,n,a,r,h,l,c,m,u,d,p,_,f,P,y=1e-12,g=y*y,L=30,v=t.x,j=t.y,M=t.z?t.z:0;if(d=!1,i=Math.sqrt(v*v+j*j),s=Math.sqrt(v*v+j*j+M*M),y>i/this.a){if(d=!0,_=0,y>s/this.a)return f=Proj4js.common.HALF_PI,P=-this.b,void 0}else _=Math.atan2(j,v);e=M/s,o=i/s,n=1/Math.sqrt(1-this.es*(2-this.es)*o*o),h=o*(1-this.es)*n,l=e*n,p=0;do p++,r=this.a/Math.sqrt(1-this.es*l*l),P=i*h+M*l-r*(1-this.es*l*l),a=this.es*r/(r+P),n=1/Math.sqrt(1-a*(2-a)*o*o),c=o*(1-a)*n,m=e*n,u=m*h-c*l,h=c,l=m;while(u*u>g&&L>p);return f=Math.atan(m/Math.abs(c)),t.x=_,t.y=f,t.z=P,t},geocentric_to_geodetic_noniter:function(t){var i,s,e,o,n,a,r,h,l,c,m,u,d,p,_,f,P,y=t.x,g=t.y,L=t.z?t.z:0;if(y=parseFloat(y),g=parseFloat(g),L=parseFloat(L),P=!1,0!=y)i=Math.atan2(g,y);else if(g>0)i=Proj4js.common.HALF_PI;else if(0>g)i=-Proj4js.common.HALF_PI;else if(P=!0,i=0,L>0)s=Proj4js.common.HALF_PI;else{if(!(0>L))return s=Proj4js.common.HALF_PI,e=-this.b,void 0;s=-Proj4js.common.HALF_PI}return n=y*y+g*g,o=Math.sqrt(n),a=L*Proj4js.common.AD_C,h=Math.sqrt(a*a+n),c=a/h,u=o/h,m=c*c*c,r=L+this.b*this.ep2*m,f=o-this.a*this.es*u*u*u,l=Math.sqrt(r*r+f*f),d=r/l,p=f/l,_=this.a/Math.sqrt(1-this.es*d*d),e=p>=Proj4js.common.COS_67P5?o/p-_:-Proj4js.common.COS_67P5>=p?o/-p-_:L/d+_*(this.es-1),0==P&&(s=Math.atan(d/p)),t.x=i,t.y=s,t.z=e,t},geocentric_to_wgs84:function(t){if(this.datum_type==Proj4js.common.PJD_3PARAM)t.x+=this.datum_params[0],t.y+=this.datum_params[1],t.z+=this.datum_params[2];else if(this.datum_type==Proj4js.common.PJD_7PARAM){var i=this.datum_params[0],s=this.datum_params[1],e=this.datum_params[2],o=this.datum_params[3],n=this.datum_params[4],a=this.datum_params[5],r=this.datum_params[6],h=r*(t.x-a*t.y+n*t.z)+i,l=r*(a*t.x+t.y-o*t.z)+s,c=r*(-n*t.x+o*t.y+t.z)+e;t.x=h,t.y=l,t.z=c}},geocentric_from_wgs84:function(t){if(this.datum_type==Proj4js.common.PJD_3PARAM)t.x-=this.datum_params[0],t.y-=this.datum_params[1],t.z-=this.datum_params[2];else if(this.datum_type==Proj4js.common.PJD_7PARAM){var i=this.datum_params[0],s=this.datum_params[1],e=this.datum_params[2],o=this.datum_params[3],n=this.datum_params[4],a=this.datum_params[5],r=this.datum_params[6],h=(t.x-i)/r,l=(t.y-s)/r,c=(t.z-e)/r;t.x=h+a*l-n*c,t.y=-a*h+l+o*c,t.z=n*h-o*l+c}}}),Proj4js.Point=Proj4js.Class({initialize:function(t,i,s){if("object"==typeof t)this.x=t[0],this.y=t[1],this.z=t[2]||0;else if("string"==typeof t&&i===void 0){var e=t.split(",");this.x=parseFloat(e[0]),this.y=parseFloat(e[1]),this.z=parseFloat(e[2])||0}else this.x=t,this.y=i,this.z=s||0},clone:function(){return new Proj4js.Point(this.x,this.y,this.z)},toString:function(){return"x="+this.x+",y="+this.y},toShortString:function(){return this.x+", "+this.y}}),Proj4js.PrimeMeridian={greenwich:0,lisbon:-9.131906111111,paris:2.337229166667,bogota:-74.080916666667,madrid:-3.687938888889,rome:12.452333333333,bern:7.439583333333,jakarta:106.807719444444,ferro:-17.666666666667,brussels:4.367975,stockholm:18.058277777778,athens:23.7163375,oslo:10.722916666667},Proj4js.Ellipsoid={MERIT:{a:6378137,rf:298.257,ellipseName:"MERIT 1983"},SGS85:{a:6378136,rf:298.257,ellipseName:"Soviet Geodetic System 85"},GRS80:{a:6378137,rf:298.257222101,ellipseName:"GRS 1980(IUGG, 1980)"},IAU76:{a:6378140,rf:298.257,ellipseName:"IAU 1976"},airy:{a:6377563.396,b:6356256.91,ellipseName:"Airy 1830"},"APL4.":{a:6378137,rf:298.25,ellipseName:"Appl. Physics. 1965"},NWL9D:{a:6378145,rf:298.25,ellipseName:"Naval Weapons Lab., 1965"},mod_airy:{a:6377340.189,b:6356034.446,ellipseName:"Modified Airy"},andrae:{a:6377104.43,rf:300,ellipseName:"Andrae 1876 (Den., Iclnd.)"},aust_SA:{a:6378160,rf:298.25,ellipseName:"Australian Natl & S. Amer. 1969"},GRS67:{a:6378160,rf:298.247167427,ellipseName:"GRS 67(IUGG 1967)"},bessel:{a:6377397.155,rf:299.1528128,ellipseName:"Bessel 1841"},bess_nam:{a:6377483.865,rf:299.1528128,ellipseName:"Bessel 1841 (Namibia)"},clrk66:{a:6378206.4,b:6356583.8,ellipseName:"Clarke 1866"},clrk80:{a:6378249.145,rf:293.4663,ellipseName:"Clarke 1880 mod."},CPM:{a:6375738.7,rf:334.29,ellipseName:"Comm. des Poids et Mesures 1799"},delmbr:{a:6376428,rf:311.5,ellipseName:"Delambre 1810 (Belgium)"},engelis:{a:6378136.05,rf:298.2566,ellipseName:"Engelis 1985"},evrst30:{a:6377276.345,rf:300.8017,ellipseName:"Everest 1830"},evrst48:{a:6377304.063,rf:300.8017,ellipseName:"Everest 1948"},evrst56:{a:6377301.243,rf:300.8017,ellipseName:"Everest 1956"},evrst69:{a:6377295.664,rf:300.8017,ellipseName:"Everest 1969"},evrstSS:{a:6377298.556,rf:300.8017,ellipseName:"Everest (Sabah & Sarawak)"},fschr60:{a:6378166,rf:298.3,ellipseName:"Fischer (Mercury Datum) 1960"},fschr60m:{a:6378155,rf:298.3,ellipseName:"Fischer 1960"},fschr68:{a:6378150,rf:298.3,ellipseName:"Fischer 1968"},helmert:{a:6378200,rf:298.3,ellipseName:"Helmert 1906"},hough:{a:6378270,rf:297,ellipseName:"Hough"},intl:{a:6378388,rf:297,ellipseName:"International 1909 (Hayford)"},kaula:{a:6378163,rf:298.24,ellipseName:"Kaula 1961"},lerch:{a:6378139,rf:298.257,ellipseName:"Lerch 1979"},mprts:{a:6397300,rf:191,ellipseName:"Maupertius 1738"},new_intl:{a:6378157.5,b:6356772.2,ellipseName:"New International 1967"},plessis:{a:6376523,rf:6355863,ellipseName:"Plessis 1817 (France)"},krass:{a:6378245,rf:298.3,ellipseName:"Krassovsky, 1942"},SEasia:{a:6378155,b:6356773.3205,ellipseName:"Southeast Asia"},walbeck:{a:6376896,b:6355834.8467,ellipseName:"Walbeck"},WGS60:{a:6378165,rf:298.3,ellipseName:"WGS 60"},WGS66:{a:6378145,rf:298.25,ellipseName:"WGS 66"},WGS72:{a:6378135,rf:298.26,ellipseName:"WGS 72"},WGS84:{a:6378137,rf:298.257223563,ellipseName:"WGS 84"},sphere:{a:6370997,b:6370997,ellipseName:"Normal Sphere (r=6370997)"}},Proj4js.Datum={WGS84:{towgs84:"0,0,0",ellipse:"WGS84",datumName:"WGS84"},GGRS87:{towgs84:"-199.87,74.79,246.62",ellipse:"GRS80",datumName:"Greek_Geodetic_Reference_System_1987"},NAD83:{towgs84:"0,0,0",ellipse:"GRS80",datumName:"North_American_Datum_1983"},NAD27:{nadgrids:"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat",ellipse:"clrk66",datumName:"North_American_Datum_1927"},potsdam:{towgs84:"606.0,23.0,413.0",ellipse:"bessel",datumName:"Potsdam Rauenberg 1950 DHDN"},carthage:{towgs84:"-263.0,6.0,431.0",ellipse:"clark80",datumName:"Carthage 1934 Tunisia"},hermannskogel:{towgs84:"653.0,-212.0,449.0",ellipse:"bessel",datumName:"Hermannskogel"},ire65:{towgs84:"482.530,-130.596,564.557,-1.042,-0.214,-0.631,8.15",ellipse:"mod_airy",datumName:"Ireland 1965"},nzgd49:{towgs84:"59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993",ellipse:"intl",datumName:"New Zealand Geodetic Datum 1949"},OSGB36:{towgs84:"446.448,-125.157,542.060,0.1502,0.2470,0.8421,-20.4894",ellipse:"airy",datumName:"Airy 1830"}},Proj4js.WGS84=new Proj4js.Proj("WGS84"),Proj4js.Datum.OSB36=Proj4js.Datum.OSGB36,Proj4js.wktProjections={"Lambert Tangential Conformal Conic Projection":"lcc",Mercator:"merc","Popular Visualisation Pseudo Mercator":"merc",Mercator_1SP:"merc",Transverse_Mercator:"tmerc","Transverse Mercator":"tmerc","Lambert Azimuthal Equal Area":"laea","Universal Transverse Mercator System":"utm"},Proj4js.Proj.aea={init:function(){return Math.abs(this.lat1+this.lat2)Proj4js.common.EPSLN?(this.ms1*this.ms1-this.ms2*this.ms2)/(this.qs2-this.qs1):this.con,this.c=this.ms1*this.ms1+this.ns0*this.qs1,this.rh=this.a*Math.sqrt(this.c-this.ns0*this.qs0)/this.ns0,void 0)},forward:function(t){var i=t.x,s=t.y;this.sin_phi=Math.sin(s),this.cos_phi=Math.cos(s);var e=Proj4js.common.qsfnz(this.e3,this.sin_phi,this.cos_phi),o=this.a*Math.sqrt(this.c-this.ns0*e)/this.ns0,n=this.ns0*Proj4js.common.adjust_lon(i-this.long0),a=o*Math.sin(n)+this.x0,r=this.rh-o*Math.cos(n)+this.y0;return t.x=a,t.y=r,t},inverse:function(t){var i,s,e,o,n,a;return t.x-=this.x0,t.y=this.rh-t.y+this.y0,this.ns0>=0?(i=Math.sqrt(t.x*t.x+t.y*t.y),e=1):(i=-Math.sqrt(t.x*t.x+t.y*t.y),e=-1),o=0,0!=i&&(o=Math.atan2(e*t.x,e*t.y)),e=i*this.ns0/this.a,s=(this.c-e*e)/this.ns0,this.e3>=1e-10?(e=1-.5*(1-this.es)*Math.log((1-this.e3)/(1+this.e3))/this.e3,a=Math.abs(Math.abs(e)-Math.abs(s))>1e-10?this.phi1z(this.e3,s):s>=0?.5*Proj4js.common.PI:-.5*Proj4js.common.PI):a=this.phi1z(this.e3,s),n=Proj4js.common.adjust_lon(o/this.ns0+this.long0),t.x=n,t.y=a,t},phi1z:function(t,i){var s,e,o,n,a,r=Proj4js.common.asinz(.5*i);if(Proj4js.common.EPSLN>t)return r;for(var h=t*t,l=1;25>=l;l++)if(s=Math.sin(r),e=Math.cos(r),o=t*s,n=1-o*o,a=.5*n*n/e*(i/(1-h)-s/n+.5/t*Math.log((1-o)/(1+o))),r+=a,1e-7>=Math.abs(a))return r;return Proj4js.reportError("aea:phi1z:Convergence error"),null}},Proj4js.Proj.sterea={dependsOn:"gauss",init:function(){return Proj4js.Proj.gauss.init.apply(this),this.rc?(this.sinc0=Math.sin(this.phic0),this.cosc0=Math.cos(this.phic0),this.R2=2*this.rc,this.title||(this.title="Oblique Stereographic Alternative"),void 0):(Proj4js.reportError("sterea:init:E_ERROR_0"),void 0)},forward:function(t){var i,s,e,o;return t.x=Proj4js.common.adjust_lon(t.x-this.long0),Proj4js.Proj.gauss.forward.apply(this,[t]),i=Math.sin(t.y),s=Math.cos(t.y),e=Math.cos(t.x),o=this.k0*this.R2/(1+this.sinc0*i+this.cosc0*s*e),t.x=o*s*Math.sin(t.x),t.y=o*(this.cosc0*i-this.sinc0*s*e),t.x=this.a*t.x+this.x0,t.y=this.a*t.y+this.y0,t},inverse:function(t){var i,s,e,o,n;if(t.x=(t.x-this.x0)/this.a,t.y=(t.y-this.y0)/this.a,t.x/=this.k0,t.y/=this.k0,n=Math.sqrt(t.x*t.x+t.y*t.y)){var a=2*Math.atan2(n,this.R2);i=Math.sin(a),s=Math.cos(a),o=Math.asin(s*this.sinc0+t.y*i*this.cosc0/n),e=Math.atan2(t.x*i,n*this.cosc0*s-t.y*this.sinc0*i)}else o=this.phic0,e=0;return t.x=e,t.y=o,Proj4js.Proj.gauss.inverse.apply(this,[t]),t.x=Proj4js.common.adjust_lon(t.x+this.long0),t}},Proj4js.Proj.poly={init:function(){0==this.lat0&&(this.lat0=90),this.temp=this.b/this.a,this.es=1-Math.pow(this.temp,2),this.e=Math.sqrt(this.es),this.e0=Proj4js.common.e0fn(this.es),this.e1=Proj4js.common.e1fn(this.es),this.e2=Proj4js.common.e2fn(this.es),this.e3=Proj4js.common.e3fn(this.es),this.ml0=Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,this.lat0)},forward:function(t){var i,s,e,o,n,a,r,h=t.x,l=t.y;return e=Proj4js.common.adjust_lon(h-this.long0),1e-7>=Math.abs(l)?(a=this.x0+this.a*e,r=this.y0-this.a*this.ml0):(i=Math.sin(l),s=Math.cos(l),o=Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,l),n=Proj4js.common.msfnz(this.e,i,s),e=i,a=this.x0+this.a*n*Math.sin(e)/i,r=this.y0+this.a*(o-this.ml0+n*(1-Math.cos(e))/i)),t.x=a,t.y=r,t},inverse:function(t){var i,s,e,o,n,a;if(t.x-=this.x0,t.y-=this.y0,i=this.ml0+t.y/this.a,o=0,1e-7>=Math.abs(i))n=t.x/this.a+this.long0,a=0;else{if(s=i*i+t.x/this.a*(t.x/this.a),o=phi4z(this.es,this.e0,this.e1,this.e2,this.e3,this.al,s,e,a),1!=o)return o;n=Proj4js.common.adjust_lon(Proj4js.common.asinz(t.x*e/this.a)/Math.sin(a)+this.long0)}return t.x=n,t.y=a,t}},Proj4js.Proj.equi={init:function(){this.x0||(this.x0=0),this.y0||(this.y0=0),this.lat0||(this.lat0=0),this.long0||(this.long0=0)},forward:function(t){var i=t.x,s=t.y,e=Proj4js.common.adjust_lon(i-this.long0),o=this.x0+this.a*e*Math.cos(this.lat0),n=this.y0+this.a*s;return this.t1=o,this.t2=Math.cos(this.lat0),t.x=o,t.y=n,t},inverse:function(t){t.x-=this.x0,t.y-=this.y0;var i=t.y/this.a;Math.abs(i)>Proj4js.common.HALF_PI&&Proj4js.reportError("equi:Inv:DataError");var s=Proj4js.common.adjust_lon(this.long0+t.x/(this.a*Math.cos(this.lat0)));t.x=s,t.y=i}},Proj4js.Proj.merc={init:function(){this.lat_ts&&(this.k0=this.sphere?Math.cos(this.lat_ts):Proj4js.common.msfnz(this.es,Math.sin(this.lat_ts),Math.cos(this.lat_ts)))},forward:function(t){var i=t.x,s=t.y;if(s*Proj4js.common.R2D>90&&-90>s*Proj4js.common.R2D&&i*Proj4js.common.R2D>180&&-180>i*Proj4js.common.R2D)return Proj4js.reportError("merc:forward: llInputOutOfRange: "+i+" : "+s),null;var e,o;if(Math.abs(Math.abs(s)-Proj4js.common.HALF_PI)<=Proj4js.common.EPSLN)return Proj4js.reportError("merc:forward: ll2mAtPoles"),null;if(this.sphere)e=this.x0+this.a*this.k0*Proj4js.common.adjust_lon(i-this.long0),o=this.y0+this.a*this.k0*Math.log(Math.tan(Proj4js.common.FORTPI+.5*s));else{var n=Math.sin(s),a=Proj4js.common.tsfnz(this.e,s,n);e=this.x0+this.a*this.k0*Proj4js.common.adjust_lon(i-this.long0),o=this.y0-this.a*this.k0*Math.log(a)}return t.x=e,t.y=o,t},inverse:function(t){var i,s,e=t.x-this.x0,o=t.y-this.y0;if(this.sphere)s=Proj4js.common.HALF_PI-2*Math.atan(Math.exp(-o/this.a*this.k0));else{var n=Math.exp(-o/(this.a*this.k0));if(s=Proj4js.common.phi2z(this.e,n),-9999==s)return Proj4js.reportError("merc:inverse: lat = -9999"),null}return i=Proj4js.common.adjust_lon(this.long0+e/(this.a*this.k0)),t.x=i,t.y=s,t}},Proj4js.Proj.utm={dependsOn:"tmerc",init:function(){return this.zone?(this.lat0=0,this.long0=(6*Math.abs(this.zone)-183)*Proj4js.common.D2R,this.x0=5e5,this.y0=this.utmSouth?1e7:0,this.k0=.9996,Proj4js.Proj.tmerc.init.apply(this),this.forward=Proj4js.Proj.tmerc.forward,this.inverse=Proj4js.Proj.tmerc.inverse,void 0):(Proj4js.reportError("utm:init: zone must be specified for UTM"),void 0)}},Proj4js.Proj.eqdc={init:function(){this.mode||(this.mode=0),this.temp=this.b/this.a,this.es=1-Math.pow(this.temp,2),this.e=Math.sqrt(this.es),this.e0=Proj4js.common.e0fn(this.es),this.e1=Proj4js.common.e1fn(this.es),this.e2=Proj4js.common.e2fn(this.es),this.e3=Proj4js.common.e3fn(this.es),this.sinphi=Math.sin(this.lat1),this.cosphi=Math.cos(this.lat1),this.ms1=Proj4js.common.msfnz(this.e,this.sinphi,this.cosphi),this.ml1=Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,this.lat1),0!=this.mode?(Math.abs(this.lat1+this.lat2)=Proj4js.common.EPSLN?(this.ms1-this.ms2)/(this.ml2-this.ml1):this.sinphi):this.ns=this.sinphi,this.g=this.ml1+this.ms1/this.ns,this.ml0=Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,this.lat0),this.rh=this.a*(this.g-this.ml0)},forward:function(t){var i=t.x,s=t.y,e=Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,s),o=this.a*(this.g-e),n=this.ns*Proj4js.common.adjust_lon(i-this.long0),a=this.x0+o*Math.sin(n),r=this.y0+this.rh-o*Math.cos(n);return t.x=a,t.y=r,t},inverse:function(t){t.x-=this.x0,t.y=this.rh-t.y+this.y0;var i,s;this.ns>=0?(s=Math.sqrt(t.x*t.x+t.y*t.y),i=1):(s=-Math.sqrt(t.x*t.x+t.y*t.y),i=-1);var e=0;0!=s&&(e=Math.atan2(i*t.x,i*t.y));var o=this.g-s/this.a,n=this.phi3z(o,this.e0,this.e1,this.e2,this.e3),a=Proj4js.common.adjust_lon(this.long0+e/this.ns);return t.x=a,t.y=n,t},phi3z:function(t,i,s,e,o){var n,a;n=t;for(var r=0;15>r;r++)if(a=(t+s*Math.sin(2*n)-e*Math.sin(4*n)+o*Math.sin(6*n))/i-n,n+=a,1e-10>=Math.abs(a))return n;return Proj4js.reportError("PHI3Z-CONV:Latitude failed to converge after 15 iterations"),null}},Proj4js.Proj.tmerc={init:function(){this.e0=Proj4js.common.e0fn(this.es),this.e1=Proj4js.common.e1fn(this.es),this.e2=Proj4js.common.e2fn(this.es),this.e3=Proj4js.common.e3fn(this.es),this.ml0=this.a*Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,this.lat0)},forward:function(t){var i,s,e,o=t.x,n=t.y,a=Proj4js.common.adjust_lon(o-this.long0),r=Math.sin(n),h=Math.cos(n);if(this.sphere){var l=h*Math.sin(a);if(1e-10>Math.abs(Math.abs(l)-1))return Proj4js.reportError("tmerc:forward: Point projects into infinity"),93;s=.5*this.a*this.k0*Math.log((1+l)/(1-l)),i=Math.acos(h*Math.cos(a)/Math.sqrt(1-l*l)),0>n&&(i=-i),e=this.a*this.k0*(i-this.lat0)}else{var c=h*a,m=Math.pow(c,2),u=this.ep2*Math.pow(h,2),d=Math.tan(n),p=Math.pow(d,2);i=1-this.es*Math.pow(r,2);var _=this.a/Math.sqrt(i),f=this.a*Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,n);s=this.k0*_*c*(1+m/6*(1-p+u+m/20*(5-18*p+Math.pow(p,2)+72*u-58*this.ep2)))+this.x0,e=this.k0*(f-this.ml0+_*d*m*(.5+m/24*(5-p+9*u+4*Math.pow(u,2)+m/30*(61-58*p+Math.pow(p,2)+600*u-330*this.ep2))))+this.y0}return t.x=s,t.y=e,t},inverse:function(t){var i,s,e,o,n,a,r=6;if(this.sphere){var h=Math.exp(t.x/(this.a*this.k0)),l=.5*(h-1/h),c=this.lat0+t.y/(this.a*this.k0),m=Math.cos(c);i=Math.sqrt((1-m*m)/(1+l*l)),n=Proj4js.common.asinz(i),0>c&&(n=-n),a=0==l&&0==m?this.long0:Proj4js.common.adjust_lon(Math.atan2(l,m)+this.long0)}else{var u=t.x-this.x0,d=t.y-this.y0;for(i=(this.ml0+d/this.k0)/this.a,s=i,o=0;!0&&(e=(i+this.e1*Math.sin(2*s)-this.e2*Math.sin(4*s)+this.e3*Math.sin(6*s))/this.e0-s,s+=e,!(Math.abs(e)<=Proj4js.common.EPSLN));o++)if(o>=r)return Proj4js.reportError("tmerc:inverse: Latitude failed to converge"),95;if(Math.abs(s)0||Math.abs(a)<=Proj4js.common.EPSLN)var l=this.a*n*s*Math.sin(e),c=this.y0+this.a*n*(this.cos_p14*i-this.sin_p14*s*o);else Proj4js.reportError("orthoFwdPointError");return t.x=l,t.y=c,t},inverse:function(t){var i,s,e,o,n,a,r;return t.x-=this.x0,t.y-=this.y0,i=Math.sqrt(t.x*t.x+t.y*t.y),i>this.a+1e-7&&Proj4js.reportError("orthoInvDataError"),s=Proj4js.common.asinz(i/this.a),e=Math.sin(s),o=Math.cos(s),a=this.long0,Math.abs(i)<=Proj4js.common.EPSLN&&(r=this.lat0),r=Proj4js.common.asinz(o*this.sin_p14+t.y*e*this.cos_p14/i),n=Math.abs(this.lat0)-Proj4js.common.HALF_PI,Math.abs(n)<=Proj4js.common.EPSLN&&(a=this.lat0>=0?Proj4js.common.adjust_lon(this.long0+Math.atan2(t.x,-t.y)):Proj4js.common.adjust_lon(this.long0-Math.atan2(-t.x,t.y))),n=o-this.sin_p14*Math.sin(r),t.x=a,t.y=r,t}},Proj4js.Proj.krovak={init:function(){this.a=6377397.155,this.es=.006674372230614,this.e=Math.sqrt(this.es),this.lat0||(this.lat0=.863937979737193),this.long0||(this.long0=.4334234309119251),this.k0||(this.k0=.9999),this.s45=.785398163397448,this.s90=2*this.s45,this.fi0=this.lat0,this.e2=this.es,this.e=Math.sqrt(this.e2),this.alfa=Math.sqrt(1+this.e2*Math.pow(Math.cos(this.fi0),4)/(1-this.e2)),this.uq=1.04216856380474,this.u0=Math.asin(Math.sin(this.fi0)/this.alfa),this.g=Math.pow((1+this.e*Math.sin(this.fi0))/(1-this.e*Math.sin(this.fi0)),this.alfa*this.e/2),this.k=Math.tan(this.u0/2+this.s45)/Math.pow(Math.tan(this.fi0/2+this.s45),this.alfa)*this.g,this.k1=this.k0,this.n0=this.a*Math.sqrt(1-this.e2)/(1-this.e2*Math.pow(Math.sin(this.fi0),2)),this.s0=1.37008346281555,this.n=Math.sin(this.s0),this.ro0=this.k1*this.n0/Math.tan(this.s0),this.ad=this.s90-this.uq},forward:function(t){var i,s,e,o,n,a,r,h=t.x,l=t.y,c=Proj4js.common.adjust_lon(h-this.long0);return i=Math.pow((1+this.e*Math.sin(l))/(1-this.e*Math.sin(l)),this.alfa*this.e/2),s=2*(Math.atan(this.k*Math.pow(Math.tan(l/2+this.s45),this.alfa)/i)-this.s45),e=-c*this.alfa,o=Math.asin(Math.cos(this.ad)*Math.sin(s)+Math.sin(this.ad)*Math.cos(s)*Math.cos(e)),n=Math.asin(Math.cos(s)*Math.sin(e)/Math.cos(o)),a=this.n*n,r=this.ro0*Math.pow(Math.tan(this.s0/2+this.s45),this.n)/Math.pow(Math.tan(o/2+this.s45),this.n),t.y=r*Math.cos(a)/1,t.x=r*Math.sin(a)/1,this.czech&&(t.y*=-1,t.x*=-1),t},inverse:function(t){var i,s,e,o,n,a,r,h,l=t.x;t.x=t.y,t.y=l,this.czech&&(t.y*=-1,t.x*=-1),a=Math.sqrt(t.x*t.x+t.y*t.y),n=Math.atan2(t.y,t.x),o=n/Math.sin(this.s0),e=2*(Math.atan(Math.pow(this.ro0/a,1/this.n)*Math.tan(this.s0/2+this.s45))-this.s45),i=Math.asin(Math.cos(this.ad)*Math.sin(e)-Math.sin(this.ad)*Math.cos(e)*Math.cos(o)),s=Math.asin(Math.cos(e)*Math.sin(o)/Math.cos(i)),t.x=this.long0-s/this.alfa,r=i,h=0;var c=0;do t.y=2*(Math.atan(Math.pow(this.k,-1/this.alfa)*Math.pow(Math.tan(i/2+this.s45),1/this.alfa)*Math.pow((1+this.e*Math.sin(r))/(1-this.e*Math.sin(r)),this.e/2))-this.s45),1e-10>Math.abs(r-t.y)&&(h=1),r=t.y,c+=1;while(0==h&&15>c);return c>=15?(Proj4js.reportError("PHI3Z-CONV:Latitude failed to converge after 15 iterations"),null):t}},Proj4js.Proj.somerc={init:function(){var t=this.lat0;this.lambda0=this.long0;var i=Math.sin(t),s=this.a,e=this.rf,o=1/e,n=2*o-Math.pow(o,2),a=this.e=Math.sqrt(n);this.R=this.k0*s*Math.sqrt(1-n)/(1-n*Math.pow(i,2)),this.alpha=Math.sqrt(1+n/(1-n)*Math.pow(Math.cos(t),4)),this.b0=Math.asin(i/this.alpha),this.K=Math.log(Math.tan(Math.PI/4+this.b0/2))-this.alpha*Math.log(Math.tan(Math.PI/4+t/2))+this.alpha*a/2*Math.log((1+a*i)/(1-a*i))},forward:function(t){var i=Math.log(Math.tan(Math.PI/4-t.y/2)),s=this.e/2*Math.log((1+this.e*Math.sin(t.y))/(1-this.e*Math.sin(t.y))),e=-this.alpha*(i+s)+this.K,o=2*(Math.atan(Math.exp(e))-Math.PI/4),n=this.alpha*(t.x-this.lambda0),a=Math.atan(Math.sin(n)/(Math.sin(this.b0)*Math.tan(o)+Math.cos(this.b0)*Math.cos(n))),r=Math.asin(Math.cos(this.b0)*Math.sin(o)-Math.sin(this.b0)*Math.cos(o)*Math.cos(n));return t.y=this.R/2*Math.log((1+Math.sin(r))/(1-Math.sin(r)))+this.y0,t.x=this.R*a+this.x0,t},inverse:function(t){for(var i=t.x-this.x0,s=t.y-this.y0,e=i/this.R,o=2*(Math.atan(Math.exp(s/this.R))-Math.PI/4),n=Math.asin(Math.cos(this.b0)*Math.sin(o)+Math.sin(this.b0)*Math.cos(o)*Math.cos(e)),a=Math.atan(Math.sin(e)/(Math.cos(this.b0)*Math.cos(e)-Math.sin(this.b0)*Math.tan(o))),r=this.lambda0+a/this.alpha,h=0,l=n,c=-1e3,m=0;Math.abs(l-c)>1e-7;){if(++m>20)return Proj4js.reportError("omercFwdInfinity"),void 0;h=1/this.alpha*(Math.log(Math.tan(Math.PI/4+n/2))-this.K)+this.e*Math.log(Math.tan(Math.PI/4+Math.asin(this.e*Math.sin(l))/2)),c=l,l=2*Math.atan(Math.exp(h))-Math.PI/2}return t.x=r,t.y=l,t}},Proj4js.Proj.stere={ssfn_:function(t,i,s){return i*=s,Math.tan(.5*(Proj4js.common.HALF_PI+t))*Math.pow((1-i)/(1+i),.5*s)},TOL:1e-8,NITER:8,CONV:1e-10,S_POLE:0,N_POLE:1,OBLIQ:2,EQUIT:3,init:function(){this.phits=this.lat_ts?this.lat_ts:Proj4js.common.HALF_PI;var t=Math.abs(this.lat0);if(this.mode=Math.abs(t)-Proj4js.common.HALF_PIthis.lat0?this.S_POLE:this.N_POLE:t>Proj4js.common.EPSLN?this.OBLIQ:this.EQUIT,this.phits=Math.abs(this.phits),this.es){var i;switch(this.mode){case this.N_POLE:case this.S_POLE:Math.abs(this.phits-Proj4js.common.HALF_PI)=Proj4js.common.EPSLN?Math.cos(this.phits)/Math.tan(Proj4js.common.FORTPI-.5*this.phits):2*this.k0}},forward:function(t){var i=t.x;i=Proj4js.common.adjust_lon(i-this.long0);var s,e,o=t.y;if(this.sphere){var n,a,r,h;switch(n=Math.sin(o),a=Math.cos(o),r=Math.cos(i),h=Math.sin(i),this.mode){case this.EQUIT:e=1+a*r,Proj4js.common.EPSLN>=e&&Proj4js.reportError("stere:forward:Equit"),e=this.akm1/e,s=e*a*h,e*=n;break;case this.OBLIQ:e=1+this.sinph0*n+this.cosph0*a*r,Proj4js.common.EPSLN>=e&&Proj4js.reportError("stere:forward:Obliq"),e=this.akm1/e,s=e*a*h,e*=this.cosph0*n-this.sinph0*a*r;break;case this.N_POLE:r=-r,o=-o;case this.S_POLE:Math.abs(o-Proj4js.common.HALF_PI)=l;l++)r*=n,h+=this.A[l]*r;for(var c,m,u=h,d=a,p=1,_=0,f=0,P=0,l=1;6>=l;l++)c=p*u-_*d,m=_*u+p*d,p=c,_=m,f=f+this.B_re[l]*p-this.B_im[l]*_,P=P+this.B_im[l]*p+this.B_re[l]*_;return t.x=P*this.a+this.x0,t.y=f*this.a+this.y0,t},inverse:function(t){for(var i,s,e=t.x,o=t.y,n=e-this.x0,a=o-this.y0,r=a/this.a,h=n/this.a,l=1,c=0,m=0,u=0,d=1;6>=d;d++)i=l*r-c*h,s=c*r+l*h,l=i,c=s,m=m+this.C_re[d]*l-this.C_im[d]*c,u=u+this.C_im[d]*l+this.C_re[d]*c;for(var p=0;this.iterations>p;p++){for(var _,f,P=m,y=u,g=r,L=h,d=2;6>=d;d++)_=P*m-y*u,f=y*m+P*u,P=_,y=f,g+=(d-1)*(this.B_re[d]*P-this.B_im[d]*y),L+=(d-1)*(this.B_im[d]*P+this.B_re[d]*y);P=1,y=0;for(var v=this.B_re[1],j=this.B_im[1],d=2;6>=d;d++)_=P*m-y*u,f=y*m+P*u,P=_,y=f,v+=d*(this.B_re[d]*P-this.B_im[d]*y),j+=d*(this.B_im[d]*P+this.B_re[d]*y);var M=v*v+j*j;m=(g*v+L*j)/M,u=(L*v-g*j)/M}for(var S=m,b=u,x=1,E=0,d=1;9>=d;d++)x*=S,E+=this.D[d]*x;var C=this.lat0+1e5*E*Proj4js.common.SEC_TO_RAD,w=this.long0+b;return t.x=w,t.y=C,t}},Proj4js.Proj.mill={init:function(){},forward:function(t){var i=t.x,s=t.y,e=Proj4js.common.adjust_lon(i-this.long0),o=this.x0+this.a*e,n=this.y0+1.25*this.a*Math.log(Math.tan(Proj4js.common.PI/4+s/2.5));return t.x=o,t.y=n,t},inverse:function(t){t.x-=this.x0,t.y-=this.y0;var i=Proj4js.common.adjust_lon(this.long0+t.x/this.a),s=2.5*(Math.atan(Math.exp(.8*t.y/this.a))-Proj4js.common.PI/4);return t.x=i,t.y=s,t}},Proj4js.Proj.gnom={init:function(){this.sin_p14=Math.sin(this.lat0),this.cos_p14=Math.cos(this.lat0),this.infinity_dist=1e3*this.a,this.rc=1},forward:function(t){var i,s,e,o,n,a,r,h,l=t.x,c=t.y;return e=Proj4js.common.adjust_lon(l-this.long0),i=Math.sin(c),s=Math.cos(c),o=Math.cos(e),a=this.sin_p14*i+this.cos_p14*s*o,n=1,a>0||Math.abs(a)<=Proj4js.common.EPSLN?(r=this.x0+this.a*n*s*Math.sin(e)/a,h=this.y0+this.a*n*(this.cos_p14*i-this.sin_p14*s*o)/a):(Proj4js.reportError("orthoFwdPointError"),r=this.x0+this.infinity_dist*s*Math.sin(e),h=this.y0+this.infinity_dist*(this.cos_p14*i-this.sin_p14*s*o)),t.x=r,t.y=h,t},inverse:function(t){var i,s,e,o,n,a;return t.x=(t.x-this.x0)/this.a,t.y=(t.y-this.y0)/this.a,t.x/=this.k0,t.y/=this.k0,(i=Math.sqrt(t.x*t.x+t.y*t.y))?(o=Math.atan2(i,this.rc),s=Math.sin(o),e=Math.cos(o),a=Proj4js.common.asinz(e*this.sin_p14+t.y*s*this.cos_p14/i),n=Math.atan2(t.x*s,i*this.cos_p14*e-t.y*this.sin_p14*s),n=Proj4js.common.adjust_lon(this.long0+n)):(a=this.phic0,n=0),t.x=n,t.y=a,t}},Proj4js.Proj.sinu={init:function(){this.sphere?(this.n=1,this.m=0,this.es=0,this.C_y=Math.sqrt((this.m+1)/this.n),this.C_x=this.C_y/(this.m+1)):this.en=Proj4js.common.pj_enfn(this.es)},forward:function(t){var i,s,e=t.x,o=t.y;if(e=Proj4js.common.adjust_lon(e-this.long0),this.sphere){if(this.m)for(var n=this.n*Math.sin(o),a=Proj4js.common.MAX_ITER;a;--a){var r=(this.m*o+Math.sin(o)-n)/(this.m+Math.cos(o));if(o-=r,Math.abs(r)o?(o=Math.sin(i),s=this.long0+t.x*Math.sqrt(1-this.es*o*o)/(this.a*Math.cos(i)),e=Proj4js.common.adjust_lon(s)):o-Proj4js.common.EPSLN=0?this.y0+Proj4js.common.PI*this.R*Math.tan(.5*a):this.y0+Proj4js.common.PI*this.R*-Math.tan(.5*a));var r=.5*Math.abs(Proj4js.common.PI/n-n/Proj4js.common.PI),h=r*r,l=Math.sin(a),c=Math.cos(a),m=c/(l+c-1),u=m*m,d=m*(2/l-1),p=d*d,_=Proj4js.common.PI*this.R*(r*(m-p)+Math.sqrt(h*(m-p)*(m-p)-(p+h)*(u-p)))/(p+h);return 0>n&&(_=-_),i=this.x0+_,_=Math.abs(_/(Proj4js.common.PI*this.R)),s=o>=0?this.y0+Proj4js.common.PI*this.R*Math.sqrt(1-_*_-2*r*_):this.y0-Proj4js.common.PI*this.R*Math.sqrt(1-_*_-2*r*_),t.x=i,t.y=s,t},inverse:function(t){var i,s,e,o,n,a,r,h,l,c,m,u,d;return t.x-=this.x0,t.y-=this.y0,m=Proj4js.common.PI*this.R,e=t.x/m,o=t.y/m,n=e*e+o*o,a=-Math.abs(o)*(1+n),r=a-2*o*o+e*e,h=-2*a+1+2*o*o+n*n,d=o*o/h+(2*r*r*r/h/h/h-9*a*r/h/h)/27,l=(a-r*r/3/h)/h,c=2*Math.sqrt(-l/3),m=3*d/l/c,Math.abs(m)>1&&(m=m>=0?1:-1),u=Math.acos(m)/3,s=t.y>=0?(-c*Math.cos(u+Proj4js.common.PI/3)-r/3/h)*Proj4js.common.PI:-(-c*Math.cos(u+Proj4js.common.PI/3)-r/3/h)*Proj4js.common.PI,Math.abs(e)0&&(e=2*Math.atan(o*Proj4js.common.srat(this.e*Math.sin(t.y),-.5*this.e))-Proj4js.common.HALF_PI,!(i>Math.abs(e-t.y)));--n)t.y=e;return n?(t.x=s,t.y=e,t):(Proj4js.reportError("gauss:inverse:convergence failed"),null)}},Proj4js.Proj.omerc={init:function(){this.mode||(this.mode=0),this.lon1||(this.lon1=0,this.mode=1),this.lon2||(this.lon2=0),this.lat2||(this.lat2=0);var t=this.b/this.a,i=1-Math.pow(t,2);Math.sqrt(i),this.sin_p20=Math.sin(this.lat0),this.cos_p20=Math.cos(this.lat0),this.con=1-this.es*this.sin_p20*this.sin_p20,this.com=Math.sqrt(1-i),this.bl=Math.sqrt(1+this.es*Math.pow(this.cos_p20,4)/(1-i)),this.al=this.a*this.bl*this.k0*this.com/this.con,Math.abs(this.lat0)0?this.lat0>=0?this.d+Math.sqrt(this.d*this.d-1):this.d-Math.sqrt(this.d*this.d-1):this.d,this.el=this.f*Math.pow(this.ts,this.bl)),0!=this.mode?(this.g=.5*(this.f-1/this.f),this.gama=Proj4js.common.asinz(Math.sin(this.alpha)/this.d),this.longc=this.longc-Proj4js.common.asinz(this.g*Math.tan(this.gama))/this.bl,this.con=Math.abs(this.lat0),this.con>Proj4js.common.EPSLN&&Math.abs(this.con-Proj4js.common.HALF_PI)>Proj4js.common.EPSLN?(this.singam=Math.sin(this.gama),this.cosgam=Math.cos(this.gama),this.sinaz=Math.sin(this.alpha),this.cosaz=Math.cos(this.alpha),this.u=this.lat0>=0?this.al/this.bl*Math.atan(Math.sqrt(this.d*this.d-1)/this.cosaz):-(this.al/this.bl)*Math.atan(Math.sqrt(this.d*this.d-1)/this.cosaz)):Proj4js.reportError("omerc:Init:DataError")):(this.sinphi=Math.sin(this.at1),this.ts1=Proj4js.common.tsfnz(this.e,this.lat1,this.sinphi),this.sinphi=Math.sin(this.lat2),this.ts2=Proj4js.common.tsfnz(this.e,this.lat2,this.sinphi),this.h=Math.pow(this.ts1,this.bl),this.l=Math.pow(this.ts2,this.bl),this.f=this.el/this.h,this.g=.5*(this.f-1/this.f),this.j=(this.el*this.el-this.l*this.h)/(this.el*this.el+this.l*this.h),this.p=(this.l-this.h)/(this.l+this.h),this.dlon=this.lon1-this.lon2,this.dlon<-Proj4js.common.PI&&(this.lon2=this.lon2-2*Proj4js.common.PI),this.dlon>Proj4js.common.PI&&(this.lon2=this.lon2+2*Proj4js.common.PI),this.dlon=this.lon1-this.lon2,this.longc=.5*(this.lon1+this.lon2)-Math.atan(this.j*Math.tan(.5*this.bl*this.dlon)/this.p)/this.bl,this.dlon=Proj4js.common.adjust_lon(this.lon1-this.longc),this.gama=Math.atan(Math.sin(this.bl*this.dlon)/this.g),this.alpha=Proj4js.common.asinz(this.d*Math.sin(this.gama)),Math.abs(this.lat1-this.lat2)<=Proj4js.common.EPSLN?Proj4js.reportError("omercInitDataError"):this.con=Math.abs(this.lat1),this.con<=Proj4js.common.EPSLN||Math.abs(this.con-Proj4js.common.HALF_PI)<=Proj4js.common.EPSLN?Proj4js.reportError("omercInitDataError"):Math.abs(Math.abs(this.lat0)-Proj4js.common.HALF_PI)<=Proj4js.common.EPSLN&&Proj4js.reportError("omercInitDataError"),this.singam=Math.sin(this.gam),this.cosgam=Math.cos(this.gam),this.sinaz=Math.sin(this.alpha),this.cosaz=Math.cos(this.alpha),this.u=this.lat0>=0?this.al/this.bl*Math.atan(Math.sqrt(this.d*this.d-1)/this.cosaz):-(this.al/this.bl)*Math.atan(Math.sqrt(this.d*this.d-1)/this.cosaz))},forward:function(t){var i,s,e,o,n,a,r,h,l,c,m,u=t.x,d=t.y;i=Math.sin(d),c=Proj4js.common.adjust_lon(u-this.longc),a=Math.sin(this.bl*c),Math.abs(Math.abs(d)-Proj4js.common.HALF_PI)>Proj4js.common.EPSLN?(m=Proj4js.common.tsfnz(this.e,d,i),o=this.el/Math.pow(m,this.bl),l=.5*(o-1/o),s=.5*(o+1/o),r=(l*this.singam-a*this.cosgam)/s,e=Math.cos(this.bl*c),1e-7>Math.abs(e)?n=this.al*this.bl*c:(n=this.al*Math.atan((l*this.cosgam+a*this.singam)/e)/this.bl,0>e&&(n+=Proj4js.common.PI*this.al/this.bl))):(r=d>=0?this.singam:-this.singam,n=this.al*d/this.bl),Math.abs(Math.abs(r)-1)<=Proj4js.common.EPSLN&&Proj4js.reportError("omercFwdInfinity"),h=.5*this.al*Math.log((1-r)/(1+r))/this.bl,n-=this.u;var p=this.x0+h*this.cosaz+n*this.sinaz,_=this.y0+n*this.cosaz-h*this.sinaz;return t.x=p,t.y=_,t},inverse:function(t){var i,s,e,o,n,a,r,h,l,c,m,u,d;return t.x-=this.x0,t.y-=this.y0,d=0,o=t.x*this.cosaz-t.y*this.sinaz,n=t.y*this.cosaz+t.x*this.sinaz,n+=this.u,a=Math.exp(-this.bl*o/this.al),r=.5*(a-1/a),s=.5*(a+1/a),l=Math.sin(this.bl*n/this.al),c=(l*this.cosgam+r*this.singam)/s,Math.abs(Math.abs(c)-1)<=Proj4js.common.EPSLN?(m=this.longc,u=c>=0?Proj4js.common.HALF_PI:-Proj4js.common.HALF_PI):(e=1/this.bl,h=Math.pow(this.el/Math.sqrt((1+c)/(1-c)),e),u=Proj4js.common.phi2z(this.e,h),i=this.longc-Math.atan2(r*this.cosgam-l*this.singam,e)/this.bl,m=Proj4js.common.adjust_lon(i)),t.x=m,t.y=u,t}},Proj4js.Proj.lcc={init:function(){if(this.lat2||(this.lat2=this.lat0),this.k0||(this.k0=1),Math.abs(this.lat1+this.lat2)Proj4js.common.EPSLN?Math.log(e/r)/Math.log(o/h):i,this.f0=e/(this.ns*Math.pow(o,this.ns)),this.rh=this.a*this.f0*Math.pow(l,this.ns),this.title||(this.title="Lambert Conformal Conic")},forward:function(t){var i=t.x,s=t.y;if(!(90>=s&&s>=-90&&180>=i&&i>=-180))return Proj4js.reportError("lcc:forward: llInputOutOfRange: "+i+" : "+s),null;var e,o,n=Math.abs(Math.abs(s)-Proj4js.common.HALF_PI);if(n>Proj4js.common.EPSLN)e=Proj4js.common.tsfnz(this.e,s,Math.sin(s)),o=this.a*this.f0*Math.pow(e,this.ns);else{if(n=s*this.ns,0>=n)return Proj4js.reportError("lcc:forward: No Projection"),null;o=0}var a=this.ns*Proj4js.common.adjust_lon(i-this.long0);return t.x=this.k0*o*Math.sin(a)+this.x0,t.y=this.k0*(this.rh-o*Math.cos(a))+this.y0,t},inverse:function(t){var i,s,e,o,n,a=(t.x-this.x0)/this.k0,r=this.rh-(t.y-this.y0)/this.k0;this.ns>0?(i=Math.sqrt(a*a+r*r),s=1):(i=-Math.sqrt(a*a+r*r),s=-1);var h=0;if(0!=i&&(h=Math.atan2(s*a,s*r)),0!=i||this.ns>0){if(s=1/this.ns,e=Math.pow(i/(this.a*this.f0),s),o=Proj4js.common.phi2z(this.e,e),-9999==o)return null}else o=-Proj4js.common.HALF_PI;return n=Proj4js.common.adjust_lon(h/this.ns+this.long0),t.x=n,t.y=o,t}},Proj4js.Proj.laea={S_POLE:1,N_POLE:2,EQUIT:3,OBLIQ:4,init:function(){var t=Math.abs(this.lat0);if(this.mode=Math.abs(t-Proj4js.common.HALF_PI)this.lat0?this.S_POLE:this.N_POLE:Math.abs(t)0){var i;switch(this.qp=Proj4js.common.qsfnz(this.e,1),this.mmf=.5/(1-this.es),this.apa=this.authset(this.es),this.mode){case this.N_POLE:case this.S_POLE:this.dd=1;break;case this.EQUIT:this.rq=Math.sqrt(.5*this.qp),this.dd=1/this.rq,this.xmf=1,this.ymf=.5*this.qp;break;case this.OBLIQ:this.rq=Math.sqrt(.5*this.qp),i=Math.sin(this.lat0),this.sinb1=Proj4js.common.qsfnz(this.e,i)/this.qp,this.cosb1=Math.sqrt(1-this.sinb1*this.sinb1),this.dd=Math.cos(this.lat0)/(Math.sqrt(1-this.es*i*i)*this.rq*this.cosb1),this.ymf=(this.xmf=this.rq)/this.dd,this.xmf*=this.dd}}else this.mode==this.OBLIQ&&(this.sinph0=Math.sin(this.lat0),this.cosph0=Math.cos(this.lat0))},forward:function(t){var i,s,e=t.x,o=t.y;if(e=Proj4js.common.adjust_lon(e-this.long0),this.sphere){var n,a,r;switch(r=Math.sin(o),a=Math.cos(o),n=Math.cos(e),this.mode){case this.OBLIQ:case this.EQUIT:if(s=this.mode==this.EQUIT?1+a*n:1+this.sinph0*r+this.cosph0*a*n,Proj4js.common.EPSLN>=s)return Proj4js.reportError("laea:fwd:y less than eps"),null;s=Math.sqrt(2/s),i=s*a*Math.sin(e),s*=this.mode==this.EQUIT?r:this.cosph0*r-this.sinph0*a*n;break;case this.N_POLE:n=-n;case this.S_POLE:if(Math.abs(o+this.phi0)=0?(i=(u=Math.sqrt(l))*h,s=n*(this.mode==this.S_POLE?u:-u)):i=s=0}}return t.x=this.a*i+this.x0,t.y=this.a*s+this.y0,t},inverse:function(t){t.x-=this.x0,t.y-=this.y0;var i,s,e=t.x/this.a,o=t.y/this.a;if(this.sphere){var n,a=0,r=0;if(n=Math.sqrt(e*e+o*o),s=.5*n,s>1)return Proj4js.reportError("laea:Inv:DataError"),null;switch(s=2*Math.asin(s),(this.mode==this.OBLIQ||this.mode==this.EQUIT)&&(r=Math.sin(s),a=Math.cos(s)),this.mode){case this.EQUIT:s=Math.abs(n)<=Proj4js.common.EPSLN?0:Math.asin(o*r/n),e*=r,o=a*n;break;case this.OBLIQ:s=Math.abs(n)<=Proj4js.common.EPSLN?this.phi0:Math.asin(a*this.sinph0+o*r*this.cosph0/n),e*=r*this.cosph0,o=(a-Math.sin(s)*this.sinph0)*n;break;case this.N_POLE:o=-o,s=Proj4js.common.HALF_PI-s;break;case this.S_POLE:s-=Proj4js.common.HALF_PI}i=0!=o||this.mode!=this.EQUIT&&this.mode!=this.OBLIQ?Math.atan2(e,o):0}else{var h,l,c,m,u=0;switch(this.mode){case this.EQUIT:case this.OBLIQ:if(e/=this.dd,o*=this.dd,m=Math.sqrt(e*e+o*o),Proj4js.common.EPSLN>m)return t.x=0,t.y=this.phi0,t;l=2*Math.asin(.5*m/this.rq),h=Math.cos(l),e*=l=Math.sin(l),this.mode==this.OBLIQ?(u=h*this.sinb1+o*l*this.cosb1/m,c=this.qp*u,o=m*this.cosb1*h-o*this.sinb1*l):(u=o*l/m,c=this.qp*u,o=m*h);break;case this.N_POLE:o=-o;case this.S_POLE:if(c=e*e+o*o,!c)return t.x=0,t.y=this.phi0,t;u=1-c/this.qp,this.mode==this.S_POLE&&(u=-u)}i=Math.atan2(e,o),s=this.authlat(Math.asin(u),this.apa)}return t.x=Proj4js.common.adjust_lon(this.long0+i),t.y=s,t},P00:.3333333333333333,P01:.17222222222222222,P02:.10257936507936508,P10:.06388888888888888,P11:.0664021164021164,P20:.016415012942191543,authset:function(t){var i,s=[];return s[0]=t*this.P00,i=t*t,s[0]+=i*this.P01,s[1]=i*this.P10,i*=t,s[0]+=i*this.P02,s[1]+=i*this.P11,s[2]=i*this.P20,s},authlat:function(t,i){var s=t+t;return t+i[0]*Math.sin(s)+i[1]*Math.sin(s+s)+i[2]*Math.sin(s+s+s)}},Proj4js.Proj.aeqd={init:function(){this.sin_p12=Math.sin(this.lat0),this.cos_p12=Math.cos(this.lat0)},forward:function(t){var i=t.x;t.y;var s,e=Math.sin(t.y),o=Math.cos(t.y),n=Proj4js.common.adjust_lon(i-this.long0),a=Math.cos(n),r=this.sin_p12*e+this.cos_p12*o*a;if(Math.abs(Math.abs(r)-1)r)return Proj4js.reportError("aeqd:Fwd:PointError"),void 0}else{var h=Math.acos(r);s=h/Math.sin(h)}return t.x=this.x0+this.a*s*o*Math.sin(n),t.y=this.y0+this.a*s*(this.cos_p12*e-this.sin_p12*o*a),t},inverse:function(t){t.x-=this.x0,t.y-=this.y0;var i=Math.sqrt(t.x*t.x+t.y*t.y);if(i>2*Proj4js.common.HALF_PI*this.a)return Proj4js.reportError("aeqdInvDataError"),void 0;var s,e=i/this.a,o=Math.sin(e),n=Math.cos(e),a=this.long0;if(Math.abs(i)<=Proj4js.common.EPSLN)s=this.lat0;else{s=Proj4js.common.asinz(n*this.sin_p12+t.y*o*this.cos_p12/i);var r=Math.abs(this.lat0)-Proj4js.common.HALF_PI;Math.abs(r)<=Proj4js.common.EPSLN?a=this.lat0>=0?Proj4js.common.adjust_lon(this.long0+Math.atan2(t.x,-t.y)):Proj4js.common.adjust_lon(this.long0-Math.atan2(-t.x,t.y)):(r=n-this.sin_p12*Math.sin(s),Math.abs(r)=50&&Proj4js.reportError("moll:Fwd:IterationError")}o/=2,Proj4js.common.PI/2-Math.abs(s).999999999999&&(s=.999999999999);var i=Math.asin(s),e=Proj4js.common.adjust_lon(this.long0+t.x/(.900316316158*this.a*Math.cos(i)));-Proj4js.common.PI>e&&(e=-Proj4js.common.PI),e>Proj4js.common.PI&&(e=Proj4js.common.PI),s=(2*i+Math.sin(2*i))/Proj4js.common.PI,Math.abs(s)>1&&(s=1);var o=Math.asin(s);return t.x=e,t.y=o,t}},function(t,i,s){var e,o;typeof exports!=s+""?e=exports:(o=t.L,e={},e.noConflict=function(){return t.L=o,this},t.L=e),e.version="0.5.1",e.Util={extend:function(t){var i,s,e,o,n=Array.prototype.slice.call(arguments,1);for(s=0,e=n.length;e>s;s++){o=n[s]||{};for(i in o)o.hasOwnProperty(i)&&(t[i]=o[i])}return t},bind:function(t,i){var s=arguments.length>2?Array.prototype.slice.call(arguments,2):null;return function(){return t.apply(i,s||arguments)}},stamp:function(){var t=0,i="_leaflet_id";return function(s){return s[i]=s[i]||++t,s[i]}}(),limitExecByInterval:function(t,i,e){var o,n;return function a(){var r=arguments;return o?(n=!0,s):(o=!0,setTimeout(function(){o=!1,n&&(a.apply(e,r),n=!1)},i),t.apply(e,r),s)}},falseFn:function(){return!1},formatNum:function(t,i){var s=Math.pow(10,i||5);return Math.round(t*s)/s},splitWords:function(t){return t.replace(/^\s+|\s+$/g,"").split(/\s+/)},setOptions:function(t,i){return t.options=e.extend({},t.options,i),t.options},getParamString:function(t,i){var s=[];for(var e in t)t.hasOwnProperty(e)&&s.push(e+"="+t[e]);return(i&&-1!==i.indexOf("?")?"&":"?")+s.join("&")},template:function(t,i){return t.replace(/\{ *([\w_]+) *\}/g,function(t,s){var e=i[s];if(!i.hasOwnProperty(s))throw Error("No value provided for variable "+t);return e})},isArray:function(t){return"[object Array]"===Object.prototype.toString.call(t)},emptyImageUrl:"data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs="},function(){function i(i){var s,e,o=["webkit","moz","o","ms"];for(s=0;o.length>s&&!e;s++)e=t[o[s]+i];return e}function o(i){var s=+new Date,e=Math.max(0,16-(s-n));return n=s+e,t.setTimeout(i,e)}var n=0,a=t.requestAnimationFrame||i("RequestAnimationFrame")||o,r=t.cancelAnimationFrame||i("CancelAnimationFrame")||i("CancelRequestAnimationFrame")||function(i){t.clearTimeout(i)};e.Util.requestAnimFrame=function(i,n,r,h){return i=e.bind(i,n),r&&a===o?(i(),s):a.call(t,i,h)},e.Util.cancelAnimFrame=function(i){i&&r.call(t,i)}}(),e.extend=e.Util.extend,e.bind=e.Util.bind,e.stamp=e.Util.stamp,e.setOptions=e.Util.setOptions,e.Class=function(){},e.Class.extend=function(t){var i=function(){this.initialize&&this.initialize.apply(this,arguments),this._initHooks&&this.callInitHooks()},s=function(){};s.prototype=this.prototype;var o=new s;o.constructor=i,i.prototype=o;for(var n in this)this.hasOwnProperty(n)&&"prototype"!==n&&(i[n]=this[n]);t.statics&&(e.extend(i,t.statics),delete t.statics),t.includes&&(e.Util.extend.apply(null,[o].concat(t.includes)),delete t.includes),t.options&&o.options&&(t.options=e.extend({},o.options,t.options)),e.extend(o,t),o._initHooks=[];var a=this;return o.callInitHooks=function(){if(!this._initHooksCalled){a.prototype.callInitHooks&&a.prototype.callInitHooks.call(this),this._initHooksCalled=!0;for(var t=0,i=o._initHooks.length;i>t;t++)o._initHooks[t].call(this)}},i},e.Class.include=function(t){e.extend(this.prototype,t)},e.Class.mergeOptions=function(t){e.extend(this.prototype.options,t)},e.Class.addInitHook=function(t){var i=Array.prototype.slice.call(arguments,1),s="function"==typeof t?t:function(){this[t].apply(this,i)};this.prototype._initHooks=this.prototype._initHooks||[],this.prototype._initHooks.push(s)};var n="_leaflet_events";e.Mixin={},e.Mixin.Events={addEventListener:function(t,i,s){var o,a,r,h=this[n]=this[n]||{};if("object"==typeof t){for(o in t)t.hasOwnProperty(o)&&this.addEventListener(o,t[o],i);return this}for(t=e.Util.splitWords(t),a=0,r=t.length;r>a;a++)h[t[a]]=h[t[a]]||[],h[t[a]].push({action:i,context:s||this});return this},hasEventListeners:function(t){return n in this&&t in this[n]&&this[n][t].length>0},removeEventListener:function(t,i,s){var o,a,r,h,l,c=this[n];if("object"==typeof t){for(o in t)t.hasOwnProperty(o)&&this.removeEventListener(o,t[o],i);return this}for(t=e.Util.splitWords(t),a=0,r=t.length;r>a;a++)if(this.hasEventListeners(t[a]))for(h=c[t[a]],l=h.length-1;l>=0;l--)i&&h[l].action!==i||s&&h[l].context!==s||h.splice(l,1);return this},fireEvent:function(t,i){if(!this.hasEventListeners(t))return this;for(var s=e.extend({type:t,target:this},i),o=this[n][t].slice(),a=0,r=o.length;r>a;a++)o[a].action.call(o[a].context||this,s);return this}},e.Mixin.Events.on=e.Mixin.Events.addEventListener,e.Mixin.Events.off=e.Mixin.Events.removeEventListener,e.Mixin.Events.fire=e.Mixin.Events.fireEvent,function(){var o=!!t.ActiveXObject,n=o&&!t.XMLHttpRequest,a=o&&!i.querySelector,r=navigator.userAgent.toLowerCase(),h=-1!==r.indexOf("webkit"),l=-1!==r.indexOf("chrome"),c=-1!==r.indexOf("android"),m=-1!==r.search("android [23]"),u=typeof orientation!=s+"",d=t.navigator&&t.navigator.msPointerEnabled&&t.navigator.msMaxTouchPoints,p="devicePixelRatio"in t&&t.devicePixelRatio>1||"matchMedia"in t&&t.matchMedia("(min-resolution:144dpi)")&&t.matchMedia("(min-resolution:144dpi)").matches,_=i.documentElement,f=o&&"transition"in _.style,P="WebKitCSSMatrix"in t&&"m11"in new t.WebKitCSSMatrix,y="MozPerspective"in _.style,g="OTransition"in _.style,L=!t.L_DISABLE_3D&&(f||P||y||g),v=!t.L_NO_TOUCH&&function(){var t="ontouchstart";if(d||t in _)return!0;var s=i.createElement("div"),e=!1;return s.setAttribute?(s.setAttribute(t,"return;"),"function"==typeof s[t]&&(e=!0),s.removeAttribute(t),s=null,e):!1}();e.Browser={ie:o,ie6:n,ie7:a,webkit:h,android:c,android23:m,chrome:l,ie3d:f,webkit3d:P,gecko3d:y,opera3d:g,any3d:L,mobile:u,mobileWebkit:u&&h,mobileWebkit3d:u&&P,mobileOpera:u&&t.opera,touch:v,msTouch:d,retina:p}}(),e.Point=function(t,i,s){this.x=s?Math.round(t):t,this.y=s?Math.round(i):i},e.Point.prototype={clone:function(){return new e.Point(this.x,this.y)},add:function(t){return this.clone()._add(e.point(t))},_add:function(t){return this.x+=t.x,this.y+=t.y,this},subtract:function(t){return this.clone()._subtract(e.point(t))},_subtract:function(t){return this.x-=t.x,this.y-=t.y,this},divideBy:function(t){return this.clone()._divideBy(t)},_divideBy:function(t){return this.x/=t,this.y/=t,this},multiplyBy:function(t){return this.clone()._multiplyBy(t)},_multiplyBy:function(t){return this.x*=t,this.y*=t,this},round:function(){return this.clone()._round()},_round:function(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this},floor:function(){return this.clone()._floor()},_floor:function(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this},distanceTo:function(t){t=e.point(t);var i=t.x-this.x,s=t.y-this.y;return Math.sqrt(i*i+s*s)},equals:function(t){return t.x===this.x&&t.y===this.y},toString:function(){return"Point("+e.Util.formatNum(this.x)+", "+e.Util.formatNum(this.y)+")"}},e.point=function(t,i,s){return t instanceof e.Point?t:e.Util.isArray(t)?new e.Point(t[0],t[1]):isNaN(t)?t:new e.Point(t,i,s)},e.Bounds=function(t,i){if(t)for(var s=i?[t,i]:t,e=0,o=s.length;o>e;e++)this.extend(s[e])},e.Bounds.prototype={extend:function(t){return t=e.point(t),this.min||this.max?(this.min.x=Math.min(t.x,this.min.x),this.max.x=Math.max(t.x,this.max.x),this.min.y=Math.min(t.y,this.min.y),this.max.y=Math.max(t.y,this.max.y)):(this.min=t.clone(),this.max=t.clone()),this},getCenter:function(t){return new e.Point((this.min.x+this.max.x)/2,(this.min.y+this.max.y)/2,t)},getBottomLeft:function(){return new e.Point(this.min.x,this.max.y)},getTopRight:function(){return new e.Point(this.max.x,this.min.y)},getSize:function(){return this.max.subtract(this.min)},contains:function(t){var i,s;return t="number"==typeof t[0]||t instanceof e.Point?e.point(t):e.bounds(t),t instanceof e.Bounds?(i=t.min,s=t.max):i=s=t,i.x>=this.min.x&&s.x<=this.max.x&&i.y>=this.min.y&&s.y<=this.max.y},intersects:function(t){t=e.bounds(t);var i=this.min,s=this.max,o=t.min,n=t.max,a=n.x>=i.x&&o.x<=s.x,r=n.y>=i.y&&o.y<=s.y;return a&&r},isValid:function(){return!(!this.min||!this.max)}},e.bounds=function(t,i){return!t||t instanceof e.Bounds?t:new e.Bounds(t,i)},e.Transformation=function(t,i,s,e){this._a=t,this._b=i,this._c=s,this._d=e},e.Transformation.prototype={transform:function(t,i){return this._transform(t.clone(),i)},_transform:function(t,i){return i=i||1,t.x=i*(this._a*t.x+this._b),t.y=i*(this._c*t.y+this._d),t},untransform:function(t,i){return i=i||1,new e.Point((t.x/i-this._b)/this._a,(t.y/i-this._d)/this._c)}},e.DomUtil={get:function(t){return"string"==typeof t?i.getElementById(t):t},getStyle:function(t,s){var e=t.style[s];if(!e&&t.currentStyle&&(e=t.currentStyle[s]),(!e||"auto"===e)&&i.defaultView){var o=i.defaultView.getComputedStyle(t,null);e=o?o[s]:null}return"auto"===e?null:e},getViewportOffset:function(t){var s,o=0,n=0,a=t,r=i.body,h=e.Browser.ie7;do{if(o+=a.offsetTop||0,n+=a.offsetLeft||0,o+=parseInt(e.DomUtil.getStyle(a,"borderTopWidth"),10)||0,n+=parseInt(e.DomUtil.getStyle(a,"borderLeftWidth"),10)||0,s=e.DomUtil.getStyle(a,"position"),a.offsetParent===r&&"absolute"===s)break;if("fixed"===s){o+=r.scrollTop||0,n+=r.scrollLeft||0;break}a=a.offsetParent}while(a);a=t;do{if(a===r)break;o-=a.scrollTop||0,n-=a.scrollLeft||0,e.DomUtil.documentIsLtr()||!e.Browser.webkit&&!h||(n+=a.scrollWidth-a.clientWidth,h&&"hidden"!==e.DomUtil.getStyle(a,"overflow-y")&&"hidden"!==e.DomUtil.getStyle(a,"overflow")&&(n+=17)),a=a.parentNode}while(a);return new e.Point(n,o)},documentIsLtr:function(){return e.DomUtil._docIsLtrCached||(e.DomUtil._docIsLtrCached=!0,e.DomUtil._docIsLtr="ltr"===e.DomUtil.getStyle(i.body,"direction")),e.DomUtil._docIsLtr},create:function(t,s,e){var o=i.createElement(t);return o.className=s,e&&e.appendChild(o),o},disableTextSelection:function(){i.selection&&i.selection.empty&&i.selection.empty(),this._onselectstart||(this._onselectstart=i.onselectstart||null,i.onselectstart=e.Util.falseFn)},enableTextSelection:function(){i.onselectstart===e.Util.falseFn&&(i.onselectstart=this._onselectstart,this._onselectstart=null)},hasClass:function(t,i){return t.className.length>0&&RegExp("(^|\\s)"+i+"(\\s|$)").test(t.className)},addClass:function(t,i){e.DomUtil.hasClass(t,i)||(t.className+=(t.className?" ":"")+i)},removeClass:function(t,i){function s(t,s){return s===i?"":t}t.className=t.className.replace(/(\S+)\s*/g,s).replace(/(^\s+|\s+$)/,"")},setOpacity:function(t,i){if("opacity"in t.style)t.style.opacity=i;else if("filter"in t.style){var s=!1,e="DXImageTransform.Microsoft.Alpha";try{s=t.filters.item(e)}catch(o){}i=Math.round(100*i),s?(s.Enabled=100!==i,s.Opacity=i):t.style.filter+=" progid:"+e+"(opacity="+i+")"}},testProp:function(t){for(var s=i.documentElement.style,e=0;t.length>e;e++)if(t[e]in s)return t[e];return!1},getTranslateString:function(t){var i=e.Browser.webkit3d,s="translate"+(i?"3d":"")+"(",o=(i?",0":"")+")";return s+t.x+"px,"+t.y+"px"+o},getScaleString:function(t,i){var s=e.DomUtil.getTranslateString(i.add(i.multiplyBy(-1*t))),o=" scale("+t+") ";return s+o},setPosition:function(t,i,s){t._leaflet_pos=i,!s&&e.Browser.any3d?(t.style[e.DomUtil.TRANSFORM]=e.DomUtil.getTranslateString(i),e.Browser.mobileWebkit3d&&(t.style.WebkitBackfaceVisibility="hidden")):(t.style.left=i.x+"px",t.style.top=i.y+"px")},getPosition:function(t){return t._leaflet_pos}},e.DomUtil.TRANSFORM=e.DomUtil.testProp(["transform","WebkitTransform","OTransform","MozTransform","msTransform"]),e.DomUtil.TRANSITION=e.DomUtil.testProp(["webkitTransition","transition","OTransition","MozTransition","msTransition"]),e.DomUtil.TRANSITION_END="webkitTransition"===e.DomUtil.TRANSITION||"OTransition"===e.DomUtil.TRANSITION?e.DomUtil.TRANSITION+"End":"transitionend",e.LatLng=function(t,i){var s=parseFloat(t),e=parseFloat(i);if(isNaN(s)||isNaN(e))throw Error("Invalid LatLng object: ("+t+", "+i+")");this.lat=s,this.lng=e},e.extend(e.LatLng,{DEG_TO_RAD:Math.PI/180,RAD_TO_DEG:180/Math.PI,MAX_MARGIN:1e-9}),e.LatLng.prototype={equals:function(t){if(!t)return!1;t=e.latLng(t);var i=Math.max(Math.abs(this.lat-t.lat),Math.abs(this.lng-t.lng));return e.LatLng.MAX_MARGIN>=i},toString:function(t){return"LatLng("+e.Util.formatNum(this.lat,t)+", "+e.Util.formatNum(this.lng,t)+")"},distanceTo:function(t){t=e.latLng(t);var i=6378137,s=e.LatLng.DEG_TO_RAD,o=(t.lat-this.lat)*s,n=(t.lng-this.lng)*s,a=this.lat*s,r=t.lat*s,h=Math.sin(o/2),l=Math.sin(n/2),c=h*h+l*l*Math.cos(a)*Math.cos(r);return 2*i*Math.atan2(Math.sqrt(c),Math.sqrt(1-c))},wrap:function(t,i){var s=this.lng;return t=t||-180,i=i||180,s=(s+i)%(i-t)+(t>s||s===i?i:t),new e.LatLng(this.lat,s)}},e.latLng=function(t,i){return t instanceof e.LatLng?t:e.Util.isArray(t)?new e.LatLng(t[0],t[1]):isNaN(t)?t:new e.LatLng(t,i)},e.LatLngBounds=function(t,i){if(t)for(var s=i?[t,i]:t,e=0,o=s.length;o>e;e++)this.extend(s[e])},e.LatLngBounds.prototype={extend:function(t){return t="number"==typeof t[0]||"string"==typeof t[0]||t instanceof e.LatLng?e.latLng(t):e.latLngBounds(t),t instanceof e.LatLng?this._southWest||this._northEast?(this._southWest.lat=Math.min(t.lat,this._southWest.lat),this._southWest.lng=Math.min(t.lng,this._southWest.lng),this._northEast.lat=Math.max(t.lat,this._northEast.lat),this._northEast.lng=Math.max(t.lng,this._northEast.lng)):(this._southWest=new e.LatLng(t.lat,t.lng),this._northEast=new e.LatLng(t.lat,t.lng)):t instanceof e.LatLngBounds&&(this.extend(t._southWest),this.extend(t._northEast)),this},pad:function(t){var i=this._southWest,s=this._northEast,o=Math.abs(i.lat-s.lat)*t,n=Math.abs(i.lng-s.lng)*t;return new e.LatLngBounds(new e.LatLng(i.lat-o,i.lng-n),new e.LatLng(s.lat+o,s.lng+n))},getCenter:function(){return new e.LatLng((this._southWest.lat+this._northEast.lat)/2,(this._southWest.lng+this._northEast.lng)/2)},getSouthWest:function(){return this._southWest},getNorthEast:function(){return this._northEast},getNorthWest:function(){return new e.LatLng(this._northEast.lat,this._southWest.lng)},getSouthEast:function(){return new e.LatLng(this._southWest.lat,this._northEast.lng)},contains:function(t){t="number"==typeof t[0]||t instanceof e.LatLng?e.latLng(t):e.latLngBounds(t);var i,s,o=this._southWest,n=this._northEast;return t instanceof e.LatLngBounds?(i=t.getSouthWest(),s=t.getNorthEast()):i=s=t,i.lat>=o.lat&&s.lat<=n.lat&&i.lng>=o.lng&&s.lng<=n.lng},intersects:function(t){t=e.latLngBounds(t);var i=this._southWest,s=this._northEast,o=t.getSouthWest(),n=t.getNorthEast(),a=n.lat>=i.lat&&o.lat<=s.lat,r=n.lng>=i.lng&&o.lng<=s.lng;return a&&r},toBBoxString:function(){var t=this._southWest,i=this._northEast;return[t.lng,t.lat,i.lng,i.lat].join(",")},equals:function(t){return t?(t=e.latLngBounds(t),this._southWest.equals(t.getSouthWest())&&this._northEast.equals(t.getNorthEast())):!1},isValid:function(){return!(!this._southWest||!this._northEast)}},e.latLngBounds=function(t,i){return!t||t instanceof e.LatLngBounds?t:new e.LatLngBounds(t,i)},e.Projection={},e.Projection.SphericalMercator={MAX_LATITUDE:85.0511287798,project:function(t){var i=e.LatLng.DEG_TO_RAD,s=this.MAX_LATITUDE,o=Math.max(Math.min(s,t.lat),-s),n=t.lng*i,a=o*i;return a=Math.log(Math.tan(Math.PI/4+a/2)),new e.Point(n,a)},unproject:function(t){var i=e.LatLng.RAD_TO_DEG,s=t.x*i,o=(2*Math.atan(Math.exp(t.y))-Math.PI/2)*i;return new e.LatLng(o,s)}},e.Projection.LonLat={project:function(t){return new e.Point(t.lng,t.lat)},unproject:function(t){return new e.LatLng(t.y,t.x)}},e.CRS={latLngToPoint:function(t,i){var s=this.projection.project(t),e=this.scale(i);return this.transformation._transform(s,e)},pointToLatLng:function(t,i){var s=this.scale(i),e=this.transformation.untransform(t,s);return this.projection.unproject(e)},project:function(t){return this.projection.project(t)},scale:function(t){return 256*Math.pow(2,t)}},e.CRS.Simple=e.extend({},e.CRS,{projection:e.Projection.LonLat,transformation:new e.Transformation(1,0,-1,0),scale:function(t){return Math.pow(2,t)}}),e.CRS.EPSG3857=e.extend({},e.CRS,{code:"EPSG:3857",projection:e.Projection.SphericalMercator,transformation:new e.Transformation(.5/Math.PI,.5,-.5/Math.PI,.5),project:function(t){var i=this.projection.project(t),s=6378137;return i.multiplyBy(s)}}),e.CRS.EPSG900913=e.extend({},e.CRS.EPSG3857,{code:"EPSG:900913"}),e.CRS.EPSG4326=e.extend({},e.CRS,{code:"EPSG:4326",projection:e.Projection.LonLat,transformation:new e.Transformation(1/360,.5,-1/360,.5)}),e.Map=e.Class.extend({includes:e.Mixin.Events,options:{crs:e.CRS.EPSG3857,fadeAnimation:e.DomUtil.TRANSITION&&!e.Browser.android23,trackResize:!0,markerZoomAnimation:e.DomUtil.TRANSITION&&e.Browser.any3d},initialize:function(t,i){i=e.setOptions(this,i),this._initContainer(t),this._initLayout(),this.callInitHooks(),this._initEvents(),i.maxBounds&&this.setMaxBounds(i.maxBounds),i.center&&i.zoom!==s&&this.setView(e.latLng(i.center),i.zoom,!0),this._initLayers(i.layers)},setView:function(t,i){return this._resetView(e.latLng(t),this._limitZoom(i)),this},setZoom:function(t){return this.setView(this.getCenter(),t)},zoomIn:function(t){return this.setZoom(this._zoom+(t||1))},zoomOut:function(t){return this.setZoom(this._zoom-(t||1))},fitBounds:function(t){var i=this.getBoundsZoom(t);return this.setView(e.latLngBounds(t).getCenter(),i)},fitWorld:function(){var t=new e.LatLng(-60,-170),i=new e.LatLng(85,179);return this.fitBounds(new e.LatLngBounds(t,i))},panTo:function(t){return this.setView(t,this._zoom)},panBy:function(t){return this.fire("movestart"),this._rawPanBy(e.point(t)),this.fire("move"),this.fire("moveend")},setMaxBounds:function(t){if(t=e.latLngBounds(t),this.options.maxBounds=t,!t)return this._boundsMinZoom=null,this;var i=this.getBoundsZoom(t,!0);return this._boundsMinZoom=i,this._loaded&&(i>this._zoom?this.setView(t.getCenter(),i):this.panInsideBounds(t)),this},panInsideBounds:function(t){t=e.latLngBounds(t);var i=this.getBounds(),s=this.project(i.getSouthWest()),o=this.project(i.getNorthEast()),n=this.project(t.getSouthWest()),a=this.project(t.getNorthEast()),r=0,h=0;return o.ya.x&&(r=a.x-o.x),s.y>n.y&&(h=n.y-s.y),s.x=r);return m&&i?null:i?r:r-1},getSize:function(){return(!this._size||this._sizeChanged)&&(this._size=new e.Point(this._container.clientWidth,this._container.clientHeight),this._sizeChanged=!1),this._size.clone()},getPixelBounds:function(){var t=this._getTopLeftPoint();return new e.Bounds(t,t.add(this.getSize()))},getPixelOrigin:function(){return this._initialTopLeftPoint},getPanes:function(){return this._panes},getContainer:function(){return this._container},getZoomScale:function(t){var i=this.options.crs;return i.scale(t)/i.scale(this._zoom)},getScaleZoom:function(t){return this._zoom+Math.log(t)/Math.LN2},project:function(t,i){return i=i===s?this._zoom:i,this.options.crs.latLngToPoint(e.latLng(t),i)},unproject:function(t,i){return i=i===s?this._zoom:i,this.options.crs.pointToLatLng(e.point(t),i)},layerPointToLatLng:function(t){var i=e.point(t).add(this._initialTopLeftPoint);return this.unproject(i)},latLngToLayerPoint:function(t){var i=this.project(e.latLng(t))._round();return i._subtract(this._initialTopLeftPoint)},containerPointToLayerPoint:function(t){return e.point(t).subtract(this._getMapPanePos())},layerPointToContainerPoint:function(t){return e.point(t).add(this._getMapPanePos())},containerPointToLatLng:function(t){var i=this.containerPointToLayerPoint(e.point(t));return this.layerPointToLatLng(i)},latLngToContainerPoint:function(t){return this.layerPointToContainerPoint(this.latLngToLayerPoint(e.latLng(t)))},mouseEventToContainerPoint:function(t){return e.DomEvent.getMousePosition(t,this._container)},mouseEventToLayerPoint:function(t){return this.containerPointToLayerPoint(this.mouseEventToContainerPoint(t))},mouseEventToLatLng:function(t){return this.layerPointToLatLng(this.mouseEventToLayerPoint(t))},_initContainer:function(t){var i=this._container=e.DomUtil.get(t);if(i._leaflet)throw Error("Map container is already initialized.");i._leaflet=!0},_initLayout:function(){var t=this._container;e.DomUtil.addClass(t,"leaflet-container"),e.Browser.touch&&e.DomUtil.addClass(t,"leaflet-touch"),this.options.fadeAnimation&&e.DomUtil.addClass(t,"leaflet-fade-anim");var i=e.DomUtil.getStyle(t,"position");"absolute"!==i&&"relative"!==i&&"fixed"!==i&&(t.style.position="relative"),this._initPanes(),this._initControlPos&&this._initControlPos()},_initPanes:function(){var t=this._panes={};this._mapPane=t.mapPane=this._createPane("leaflet-map-pane",this._container),this._tilePane=t.tilePane=this._createPane("leaflet-tile-pane",this._mapPane),t.objectsPane=this._createPane("leaflet-objects-pane",this._mapPane),t.shadowPane=this._createPane("leaflet-shadow-pane"),t.overlayPane=this._createPane("leaflet-overlay-pane"),t.markerPane=this._createPane("leaflet-marker-pane"),t.popupPane=this._createPane("leaflet-popup-pane");var i=" leaflet-zoom-hide";this.options.markerZoomAnimation||(e.DomUtil.addClass(t.markerPane,i),e.DomUtil.addClass(t.shadowPane,i),e.DomUtil.addClass(t.popupPane,i))},_createPane:function(t,i){return e.DomUtil.create("div",t,i||this._panes.objectsPane)},_initLayers:function(t){t=t?e.Util.isArray(t)?t:[t]:[],this._layers={},this._zoomBoundLayers={},this._tileLayersNum=0;var i,s;for(i=0,s=t.length;s>i;i++)this.addLayer(t[i])},_resetView:function(t,i,s,o){var n=this._zoom!==i;o||(this.fire("movestart"),n&&this.fire("zoomstart")),this._zoom=i,this._initialTopLeftPoint=this._getNewTopLeftPoint(t),s?this._initialTopLeftPoint._add(this._getMapPanePos()):e.DomUtil.setPosition(this._mapPane,new e.Point(0,0)),this._tileLayersToLoad=this._tileLayersNum;var a=!this._loaded;this._loaded=!0,this.fire("viewreset",{hard:!s}),this.fire("move"),(n||o)&&this.fire("zoomend"),this.fire("moveend",{hard:!s}),a&&this.fire("load")},_rawPanBy:function(t){e.DomUtil.setPosition(this._mapPane,this._getMapPanePos().subtract(t))},_updateZoomLevels:function(){var t,i=1/0,e=-1/0;for(t in this._zoomBoundLayers)if(this._zoomBoundLayers.hasOwnProperty(t)){var o=this._zoomBoundLayers[t];isNaN(o.options.minZoom)||(i=Math.min(i,o.options.minZoom)),isNaN(o.options.maxZoom)||(e=Math.max(e,o.options.maxZoom))}t===s?this._layersMaxZoom=this._layersMinZoom=s:(this._layersMaxZoom=e,this._layersMinZoom=i)},_initEvents:function(){if(e.DomEvent){e.DomEvent.on(this._container,"click",this._onMouseClick,this);var i,s,o=["dblclick","mousedown","mouseup","mouseenter","mouseleave","mousemove","contextmenu"];for(i=0,s=o.length;s>i;i++)e.DomEvent.on(this._container,o[i],this._fireMouseEvent,this);this.options.trackResize&&e.DomEvent.on(t,"resize",this._onResize,this)}},_onResize:function(){e.Util.cancelAnimFrame(this._resizeRequest),this._resizeRequest=e.Util.requestAnimFrame(this.invalidateSize,this,!1,this._container)},_onMouseClick:function(t){!this._loaded||this.dragging&&this.dragging.moved()||(this.fire("preclick"),this._fireMouseEvent(t))},_fireMouseEvent:function(t){if(this._loaded){var i=t.type;if(i="mouseenter"===i?"mouseover":"mouseleave"===i?"mouseout":i,this.hasEventListeners(i)){"contextmenu"===i&&e.DomEvent.preventDefault(t);var s=this.mouseEventToContainerPoint(t),o=this.containerPointToLayerPoint(s),n=this.layerPointToLatLng(o);this.fire(i,{latlng:n,layerPoint:o,containerPoint:s,originalEvent:t})}}},_onTileLayerLoad:function(){this._tileLayersToLoad--,this._tileLayersNum&&!this._tileLayersToLoad&&this._tileBg&&(clearTimeout(this._clearTileBgTimer),this._clearTileBgTimer=setTimeout(e.bind(this._clearTileBg,this),500))},whenReady:function(t,i){return this._loaded?t.call(i||this,this):this.on("load",t,i),this},_getMapPanePos:function(){return e.DomUtil.getPosition(this._mapPane)},_getTopLeftPoint:function(){if(!this._loaded)throw Error("Set map center and zoom first.");return this._initialTopLeftPoint.subtract(this._getMapPanePos())},_getNewTopLeftPoint:function(t,i){var s=this.getSize()._divideBy(2);return this.project(t,i)._subtract(s)._round()},_latLngToNewLayerPoint:function(t,i,s){var e=this._getNewTopLeftPoint(s,i).add(this._getMapPanePos());return this.project(t,i)._subtract(e)},_getCenterLayerPoint:function(){return this.containerPointToLayerPoint(this.getSize()._divideBy(2))},_getCenterOffset:function(t){return this.latLngToLayerPoint(t).subtract(this._getCenterLayerPoint())},_limitZoom:function(t){var i=this.getMinZoom(),s=this.getMaxZoom();return Math.max(i,Math.min(s,t))}}),e.map=function(t,i){return new e.Map(t,i)},e.Projection.Mercator={MAX_LATITUDE:85.0840591556,R_MINOR:6356752.3142,R_MAJOR:6378137,project:function(t){var i=e.LatLng.DEG_TO_RAD,s=this.MAX_LATITUDE,o=Math.max(Math.min(s,t.lat),-s),n=this.R_MAJOR,a=this.R_MINOR,r=t.lng*i*n,h=o*i,l=a/n,c=Math.sqrt(1-l*l),m=c*Math.sin(h);m=Math.pow((1-m)/(1+m),.5*c);var u=Math.tan(.5*(.5*Math.PI-h))/m;return h=-a*Math.log(u),new e.Point(r,h)},unproject:function(t){for(var i,s=e.LatLng.RAD_TO_DEG,o=this.R_MAJOR,n=this.R_MINOR,a=t.x*s/o,r=n/o,h=Math.sqrt(1-r*r),l=Math.exp(-t.y/n),c=Math.PI/2-2*Math.atan(l),m=15,u=1e-7,d=m,p=.1;Math.abs(p)>u&&--d>0;)i=h*Math.sin(c),p=Math.PI/2-2*Math.atan(l*Math.pow((1-i)/(1+i),.5*h))-c,c+=p;return new e.LatLng(c*s,a)}},e.CRS.EPSG3395=e.extend({},e.CRS,{code:"EPSG:3395",projection:e.Projection.Mercator,transformation:function(){var t=e.Projection.Mercator,i=t.R_MAJOR,s=t.R_MINOR;return new e.Transformation(.5/(Math.PI*i),.5,-.5/(Math.PI*s),.5)}()}),e.TileLayer=e.Class.extend({includes:e.Mixin.Events,options:{minZoom:0,maxZoom:18,tileSize:256,subdomains:"abc",errorTileUrl:"",attribution:"",zoomOffset:0,opacity:1,unloadInvisibleTiles:e.Browser.mobile,updateWhenIdle:e.Browser.mobile},initialize:function(t,i){i=e.setOptions(this,i),i.detectRetina&&e.Browser.retina&&i.maxZoom>0&&(i.tileSize=Math.floor(i.tileSize/2),i.zoomOffset++,i.minZoom>0&&i.minZoom--,this.options.maxZoom--),this._url=t;var s=this.options.subdomains;"string"==typeof s&&(this.options.subdomains=s.split(""))},onAdd:function(t){this._map=t,this._initContainer(),this._createTileProto(),t.on({viewreset:this._resetCallback,moveend:this._update},this),this.options.updateWhenIdle||(this._limitedUpdate=e.Util.limitExecByInterval(this._update,150,this),t.on("move",this._limitedUpdate,this)),this._reset(),this._update()},addTo:function(t){return t.addLayer(this),this},onRemove:function(t){this._container.parentNode.removeChild(this._container),t.off({viewreset:this._resetCallback,moveend:this._update},this),this.options.updateWhenIdle||t.off("move",this._limitedUpdate,this),this._container=null,this._map=null},bringToFront:function(){var t=this._map._panes.tilePane;return this._container&&(t.appendChild(this._container),this._setAutoZIndex(t,Math.max)),this},bringToBack:function(){var t=this._map._panes.tilePane;return this._container&&(t.insertBefore(this._container,t.firstChild),this._setAutoZIndex(t,Math.min)),this},getAttribution:function(){return this.options.attribution},setOpacity:function(t){return this.options.opacity=t,this._map&&this._updateOpacity(),this},setZIndex:function(t){return this.options.zIndex=t,this._updateZIndex(),this},setUrl:function(t,i){return this._url=t,i||this.redraw(),this},redraw:function(){return this._map&&(this._map._panes.tilePane.empty=!1,this._reset(!0),this._update()),this},_updateZIndex:function(){this._container&&this.options.zIndex!==s&&(this._container.style.zIndex=this.options.zIndex)},_setAutoZIndex:function(t,i){var s,e,o,n=t.children,a=-i(1/0,-1/0);for(e=0,o=n.length;o>e;e++)n[e]!==this._container&&(s=parseInt(n[e].style.zIndex,10),isNaN(s)||(a=i(a,s)));this.options.zIndex=this._container.style.zIndex=(isFinite(a)?a:0)+i(1,-1)},_updateOpacity:function(){e.DomUtil.setOpacity(this._container,this.options.opacity);var t,i=this._tiles;if(e.Browser.webkit)for(t in i)i.hasOwnProperty(t)&&(i[t].style.webkitTransform+=" translate(0,0)")},_initContainer:function(){var t=this._map._panes.tilePane;(!this._container||t.empty)&&(this._container=e.DomUtil.create("div","leaflet-layer"),this._updateZIndex(),t.appendChild(this._container),1>this.options.opacity&&this._updateOpacity())},_resetCallback:function(t){this._reset(t.hard)},_reset:function(t){var i=this._tiles;for(var s in i)i.hasOwnProperty(s)&&this.fire("tileunload",{tile:i[s]});this._tiles={},this._tilesToLoad=0,this.options.reuseTiles&&(this._unusedTiles=[]),t&&this._container&&(this._container.innerHTML=""),this._initContainer()},_update:function(){if(this._map){var t=this._map.getPixelBounds(),i=this._map.getZoom(),s=this.options.tileSize;if(!(i>this.options.maxZoom||this.options.minZoom>i)){var o=new e.Point(Math.floor(t.min.x/s),Math.floor(t.min.y/s)),n=new e.Point(Math.floor(t.max.x/s),Math.floor(t.max.y/s)),a=new e.Bounds(o,n);this._addTilesFromCenterOut(a),(this.options.unloadInvisibleTiles||this.options.reuseTiles)&&this._removeOtherTiles(a)}}},_addTilesFromCenterOut:function(t){var s,o,n,a=[],r=t.getCenter();for(s=t.min.y;t.max.y>=s;s++)for(o=t.min.x;t.max.x>=o;o++)n=new e.Point(o,s),this._tileShouldBeLoaded(n)&&a.push(n);var h=a.length;if(0!==h){a.sort(function(t,i){return t.distanceTo(r)-i.distanceTo(r)});var l=i.createDocumentFragment();for(this._tilesToLoad||this.fire("loading"),this._tilesToLoad+=h,o=0;h>o;o++)this._addTile(a[o],l);this._container.appendChild(l)}},_tileShouldBeLoaded:function(t){ -if(t.x+":"+t.y in this._tiles)return!1;if(!this.options.continuousWorld){var i=this._getWrapTileNum();if(this.options.noWrap&&(0>t.x||t.x>=i)||0>t.y||t.y>=i)return!1}return!0},_removeOtherTiles:function(t){var i,s,e,o;for(o in this._tiles)this._tiles.hasOwnProperty(o)&&(i=o.split(":"),s=parseInt(i[0],10),e=parseInt(i[1],10),(t.min.x>s||s>t.max.x||t.min.y>e||e>t.max.y)&&this._removeTile(o))},_removeTile:function(t){var i=this._tiles[t];this.fire("tileunload",{tile:i,url:i.src}),this.options.reuseTiles?(e.DomUtil.removeClass(i,"leaflet-tile-loaded"),this._unusedTiles.push(i)):i.parentNode===this._container&&this._container.removeChild(i),e.Browser.android||(i.src=e.Util.emptyImageUrl),delete this._tiles[t]},_addTile:function(t,i){var s=this._getTilePos(t),o=this._getTile();e.DomUtil.setPosition(o,s,e.Browser.chrome||e.Browser.android23),this._tiles[t.x+":"+t.y]=o,this._loadTile(o,t),o.parentNode!==this._container&&i.appendChild(o)},_getZoomForUrl:function(){var t=this.options,i=this._map.getZoom();return t.zoomReverse&&(i=t.maxZoom-i),i+t.zoomOffset},_getTilePos:function(t){var i=this._map.getPixelOrigin(),s=this.options.tileSize;return t.multiplyBy(s).subtract(i)},getTileUrl:function(t){return this._adjustTilePoint(t),e.Util.template(this._url,e.extend({s:this._getSubdomain(t),z:this._getZoomForUrl(),x:t.x,y:t.y},this.options))},_getWrapTileNum:function(){return Math.pow(2,this._getZoomForUrl())},_adjustTilePoint:function(t){var i=this._getWrapTileNum();this.options.continuousWorld||this.options.noWrap||(t.x=(t.x%i+i)%i),this.options.tms&&(t.y=i-t.y-1)},_getSubdomain:function(t){var i=(t.x+t.y)%this.options.subdomains.length;return this.options.subdomains[i]},_createTileProto:function(){var t=this._tileImg=e.DomUtil.create("img","leaflet-tile");t.style.width=t.style.height=this.options.tileSize+"px",t.galleryimg="no"},_getTile:function(){if(this.options.reuseTiles&&this._unusedTiles.length>0){var t=this._unusedTiles.pop();return this._resetTile(t),t}return this._createTile()},_resetTile:function(){},_createTile:function(){var t=this._tileImg.cloneNode(!1);return t.onselectstart=t.onmousemove=e.Util.falseFn,t},_loadTile:function(t,i){t._layer=this,t.onload=this._tileOnLoad,t.onerror=this._tileOnError,t.src=this.getTileUrl(i)},_tileLoaded:function(){this._tilesToLoad--,this._tilesToLoad||this.fire("load")},_tileOnLoad:function(){var t=this._layer;this.src!==e.Util.emptyImageUrl&&(e.DomUtil.addClass(this,"leaflet-tile-loaded"),t.fire("tileload",{tile:this,url:this.src})),t._tileLoaded()},_tileOnError:function(){var t=this._layer;t.fire("tileerror",{tile:this,url:this.src});var i=t.options.errorTileUrl;i&&(this.src=i),t._tileLoaded()}}),e.tileLayer=function(t,i){return new e.TileLayer(t,i)},e.TileLayer.WMS=e.TileLayer.extend({defaultWmsParams:{service:"WMS",request:"GetMap",version:"1.1.1",layers:"",styles:"",format:"image/jpeg",transparent:!1},initialize:function(t,i){this._url=t;var s=e.extend({},this.defaultWmsParams);s.width=s.height=i.detectRetina&&e.Browser.retina?2*this.options.tileSize:this.options.tileSize;for(var o in i)this.options.hasOwnProperty(o)||(s[o]=i[o]);this.wmsParams=s,e.setOptions(this,i)},onAdd:function(t){var i=parseFloat(this.wmsParams.version)>=1.3?"crs":"srs";this.wmsParams[i]=t.options.crs.code,e.TileLayer.prototype.onAdd.call(this,t)},getTileUrl:function(t,i){this._adjustTilePoint(t);var s=this._map,o=s.options.crs,n=this.options.tileSize,a=t.multiplyBy(n),r=a.add(new e.Point(n,n)),h=o.project(s.unproject(a,i)),l=o.project(s.unproject(r,i)),c=[h.x,l.y,l.x,h.y].join(","),m=e.Util.template(this._url,{s:this._getSubdomain(t)});return m+e.Util.getParamString(this.wmsParams,m)+"&bbox="+c},setParams:function(t,i){return e.extend(this.wmsParams,t),i||this.redraw(),this}}),e.tileLayer.wms=function(t,i){return new e.TileLayer.WMS(t,i)},e.TileLayer.Canvas=e.TileLayer.extend({options:{async:!1},initialize:function(t){e.setOptions(this,t)},redraw:function(){var t=this._tiles;for(var i in t)t.hasOwnProperty(i)&&this._redrawTile(t[i])},_redrawTile:function(t){this.drawTile(t,t._tilePoint,this._map._zoom)},_createTileProto:function(){var t=this._canvasProto=e.DomUtil.create("canvas","leaflet-tile");t.width=t.height=this.options.tileSize},_createTile:function(){var t=this._canvasProto.cloneNode(!1);return t.onselectstart=t.onmousemove=e.Util.falseFn,t},_loadTile:function(t,i){t._layer=this,t._tilePoint=i,this._redrawTile(t),this.options.async||this.tileDrawn(t)},drawTile:function(){},tileDrawn:function(t){this._tileOnLoad.call(t)}}),e.tileLayer.canvas=function(t){return new e.TileLayer.Canvas(t)},e.ImageOverlay=e.Class.extend({includes:e.Mixin.Events,options:{opacity:1},initialize:function(t,i,s){this._url=t,this._bounds=e.latLngBounds(i),e.setOptions(this,s)},onAdd:function(t){this._map=t,this._image||this._initImage(),t._panes.overlayPane.appendChild(this._image),t.on("viewreset",this._reset,this),t.options.zoomAnimation&&e.Browser.any3d&&t.on("zoomanim",this._animateZoom,this),this._reset()},onRemove:function(t){t.getPanes().overlayPane.removeChild(this._image),t.off("viewreset",this._reset,this),t.options.zoomAnimation&&t.off("zoomanim",this._animateZoom,this)},addTo:function(t){return t.addLayer(this),this},setOpacity:function(t){return this.options.opacity=t,this._updateOpacity(),this},bringToFront:function(){return this._image&&this._map._panes.overlayPane.appendChild(this._image),this},bringToBack:function(){var t=this._map._panes.overlayPane;return this._image&&t.insertBefore(this._image,t.firstChild),this},_initImage:function(){this._image=e.DomUtil.create("img","leaflet-image-layer"),this._map.options.zoomAnimation&&e.Browser.any3d?e.DomUtil.addClass(this._image,"leaflet-zoom-animated"):e.DomUtil.addClass(this._image,"leaflet-zoom-hide"),this._updateOpacity(),e.extend(this._image,{galleryimg:"no",onselectstart:e.Util.falseFn,onmousemove:e.Util.falseFn,onload:e.bind(this._onImageLoad,this),src:this._url})},_animateZoom:function(t){var i=this._map,s=this._image,o=i.getZoomScale(t.zoom),n=this._bounds.getNorthWest(),a=this._bounds.getSouthEast(),r=i._latLngToNewLayerPoint(n,t.zoom,t.center),h=i._latLngToNewLayerPoint(a,t.zoom,t.center)._subtract(r),l=r._add(h._multiplyBy(.5*(1-1/o)));s.style[e.DomUtil.TRANSFORM]=e.DomUtil.getTranslateString(l)+" scale("+o+") "},_reset:function(){var t=this._image,i=this._map.latLngToLayerPoint(this._bounds.getNorthWest()),s=this._map.latLngToLayerPoint(this._bounds.getSouthEast())._subtract(i);e.DomUtil.setPosition(t,i),t.style.width=s.x+"px",t.style.height=s.y+"px"},_onImageLoad:function(){this.fire("load")},_updateOpacity:function(){e.DomUtil.setOpacity(this._image,this.options.opacity)}}),e.imageOverlay=function(t,i,s){return new e.ImageOverlay(t,i,s)},e.Icon=e.Class.extend({options:{className:""},initialize:function(t){e.setOptions(this,t)},createIcon:function(){return this._createIcon("icon")},createShadow:function(){return this._createIcon("shadow")},_createIcon:function(t){var i=this._getIconUrl(t);if(!i){if("icon"===t)throw Error("iconUrl not set in Icon options (see the docs).");return null}var s=this._createImg(i);return this._setIconStyles(s,t),s},_setIconStyles:function(t,i){var s,o=this.options,n=e.point(o[i+"Size"]);s="shadow"===i?e.point(o.shadowAnchor||o.iconAnchor):e.point(o.iconAnchor),!s&&n&&(s=n.divideBy(2,!0)),t.className="leaflet-marker-"+i+" "+o.className,s&&(t.style.marginLeft=-s.x+"px",t.style.marginTop=-s.y+"px"),n&&(t.style.width=n.x+"px",t.style.height=n.y+"px")},_createImg:function(t){var s;return e.Browser.ie6?(s=i.createElement("div"),s.style.filter='progid:DXImageTransform.Microsoft.AlphaImageLoader(src="'+t+'")'):(s=i.createElement("img"),s.src=t),s},_getIconUrl:function(t){return e.Browser.retina&&this.options[t+"RetinaUrl"]?this.options[t+"RetinaUrl"]:this.options[t+"Url"]}}),e.icon=function(t){return new e.Icon(t)},e.Icon.Default=e.Icon.extend({options:{iconSize:new e.Point(25,41),iconAnchor:new e.Point(12,41),popupAnchor:new e.Point(1,-34),shadowSize:new e.Point(41,41)},_getIconUrl:function(t){var i=t+"Url";if(this.options[i])return this.options[i];e.Browser.retina&&"icon"===t&&(t+="@2x");var s=e.Icon.Default.imagePath;if(!s)throw Error("Couldn't autodetect L.Icon.Default.imagePath, set it manually.");return"marker-"+t+".png"}}),e.Icon.Default.imagePath=function(){var t,s,e,o,n=i.getElementsByTagName("script"),a=/\/?leaflet[\-\._]?([\w\-\._]*)\.js\??/;for(t=0,s=n.length;s>t;t++)if(e=n[t].src,o=e.match(a))return e.split(a)[0]+""}(),e.Marker=e.Class.extend({includes:e.Mixin.Events,options:{icon:new e.Icon.Default,title:"",clickable:!0,draggable:!1,zIndexOffset:0,opacity:1,riseOnHover:!1,riseOffset:250},initialize:function(t,i){e.setOptions(this,i),this._latlng=e.latLng(t)},onAdd:function(t){this._map=t,t.on("viewreset",this.update,this),this._initIcon(),this.update(),t.options.zoomAnimation&&t.options.markerZoomAnimation&&t.on("zoomanim",this._animateZoom,this)},addTo:function(t){return t.addLayer(this),this},onRemove:function(t){this._removeIcon(),this.fire("remove"),t.off({viewreset:this.update,zoomanim:this._animateZoom},this),this._map=null},getLatLng:function(){return this._latlng},setLatLng:function(t){return this._latlng=e.latLng(t),this.update(),this.fire("move",{latlng:this._latlng})},setZIndexOffset:function(t){return this.options.zIndexOffset=t,this.update(),this},setIcon:function(t){return this._map&&this._removeIcon(),this.options.icon=t,this._map&&(this._initIcon(),this.update()),this},update:function(){if(this._icon){var t=this._map.latLngToLayerPoint(this._latlng).round();this._setPos(t)}return this},_initIcon:function(){var t=this.options,i=this._map,s=i.options.zoomAnimation&&i.options.markerZoomAnimation,o=s?"leaflet-zoom-animated":"leaflet-zoom-hide",n=!1;this._icon||(this._icon=t.icon.createIcon(),t.title&&(this._icon.title=t.title),this._initInteraction(),n=1>this.options.opacity,e.DomUtil.addClass(this._icon,o),t.riseOnHover&&e.DomEvent.on(this._icon,"mouseover",this._bringToFront,this).on(this._icon,"mouseout",this._resetZIndex,this)),this._shadow||(this._shadow=t.icon.createShadow(),this._shadow&&(e.DomUtil.addClass(this._shadow,o),n=1>this.options.opacity)),n&&this._updateOpacity();var a=this._map._panes;a.markerPane.appendChild(this._icon),this._shadow&&a.shadowPane.appendChild(this._shadow)},_removeIcon:function(){var t=this._map._panes;this.options.riseOnHover&&e.DomEvent.off(this._icon,"mouseover",this._bringToFront).off(this._icon,"mouseout",this._resetZIndex),t.markerPane.removeChild(this._icon),this._shadow&&t.shadowPane.removeChild(this._shadow),this._icon=this._shadow=null},_setPos:function(t){e.DomUtil.setPosition(this._icon,t),this._shadow&&e.DomUtil.setPosition(this._shadow,t),this._zIndex=t.y+this.options.zIndexOffset,this._resetZIndex()},_updateZIndex:function(t){this._icon.style.zIndex=this._zIndex+t},_animateZoom:function(t){var i=this._map._latLngToNewLayerPoint(this._latlng,t.zoom,t.center);this._setPos(i)},_initInteraction:function(){if(this.options.clickable){var t=this._icon,i=["dblclick","mousedown","mouseover","mouseout","contextmenu"];e.DomUtil.addClass(t,"leaflet-clickable"),e.DomEvent.on(t,"click",this._onMouseClick,this);for(var s=0;i.length>s;s++)e.DomEvent.on(t,i[s],this._fireMouseEvent,this);e.Handler.MarkerDrag&&(this.dragging=new e.Handler.MarkerDrag(this),this.options.draggable&&this.dragging.enable())}},_onMouseClick:function(t){var i=this.dragging&&this.dragging.moved();(this.hasEventListeners(t.type)||i)&&e.DomEvent.stopPropagation(t),i||(this.dragging&&this.dragging._enabled||!this._map.dragging||!this._map.dragging.moved())&&this.fire(t.type,{originalEvent:t})},_fireMouseEvent:function(t){this.fire(t.type,{originalEvent:t}),"contextmenu"===t.type&&this.hasEventListeners(t.type)&&e.DomEvent.preventDefault(t),"mousedown"!==t.type&&e.DomEvent.stopPropagation(t)},setOpacity:function(t){this.options.opacity=t,this._map&&this._updateOpacity()},_updateOpacity:function(){e.DomUtil.setOpacity(this._icon,this.options.opacity),this._shadow&&e.DomUtil.setOpacity(this._shadow,this.options.opacity)},_bringToFront:function(){this._updateZIndex(this.options.riseOffset)},_resetZIndex:function(){this._updateZIndex(0)}}),e.marker=function(t,i){return new e.Marker(t,i)},e.DivIcon=e.Icon.extend({options:{iconSize:new e.Point(12,12),className:"leaflet-div-icon"},createIcon:function(){var t=i.createElement("div"),s=this.options;return s.html&&(t.innerHTML=s.html),s.bgPos&&(t.style.backgroundPosition=-s.bgPos.x+"px "+-s.bgPos.y+"px"),this._setIconStyles(t,"icon"),t},createShadow:function(){return null}}),e.divIcon=function(t){return new e.DivIcon(t)},e.Map.mergeOptions({closePopupOnClick:!0}),e.Popup=e.Class.extend({includes:e.Mixin.Events,options:{minWidth:50,maxWidth:300,maxHeight:null,autoPan:!0,closeButton:!0,offset:new e.Point(0,6),autoPanPadding:new e.Point(5,5),className:"",zoomAnimation:!0},initialize:function(t,i){e.setOptions(this,t),this._source=i,this._animated=e.Browser.any3d&&this.options.zoomAnimation},onAdd:function(t){this._map=t,this._container||this._initLayout(),this._updateContent();var i=t.options.fadeAnimation;i&&e.DomUtil.setOpacity(this._container,0),t._panes.popupPane.appendChild(this._container),t.on("viewreset",this._updatePosition,this),this._animated&&t.on("zoomanim",this._zoomAnimation,this),t.options.closePopupOnClick&&t.on("preclick",this._close,this),this._update(),i&&e.DomUtil.setOpacity(this._container,1)},addTo:function(t){return t.addLayer(this),this},openOn:function(t){return t.openPopup(this),this},onRemove:function(t){t._panes.popupPane.removeChild(this._container),e.Util.falseFn(this._container.offsetWidth),t.off({viewreset:this._updatePosition,preclick:this._close,zoomanim:this._zoomAnimation},this),t.options.fadeAnimation&&e.DomUtil.setOpacity(this._container,0),this._map=null},setLatLng:function(t){return this._latlng=e.latLng(t),this._update(),this},setContent:function(t){return this._content=t,this._update(),this},_close:function(){var t=this._map;t&&(t._popup=null,t.removeLayer(this).fire("popupclose",{popup:this}))},_initLayout:function(){var t,i="leaflet-popup",s=i+" "+this.options.className+" leaflet-zoom-"+(this._animated?"animated":"hide"),o=this._container=e.DomUtil.create("div",s);this.options.closeButton&&(t=this._closeButton=e.DomUtil.create("a",i+"-close-button",o),t.href="#close",t.innerHTML="×",e.DomEvent.on(t,"click",this._onCloseButtonClick,this));var n=this._wrapper=e.DomUtil.create("div",i+"-content-wrapper",o);e.DomEvent.disableClickPropagation(n),this._contentNode=e.DomUtil.create("div",i+"-content",n),e.DomEvent.on(this._contentNode,"mousewheel",e.DomEvent.stopPropagation),this._tipContainer=e.DomUtil.create("div",i+"-tip-container",o),this._tip=e.DomUtil.create("div",i+"-tip",this._tipContainer)},_update:function(){this._map&&(this._container.style.visibility="hidden",this._updateContent(),this._updateLayout(),this._updatePosition(),this._container.style.visibility="",this._adjustPan())},_updateContent:function(){if(this._content){if("string"==typeof this._content)this._contentNode.innerHTML=this._content;else{for(;this._contentNode.hasChildNodes();)this._contentNode.removeChild(this._contentNode.firstChild);this._contentNode.appendChild(this._content)}this.fire("contentupdate")}},_updateLayout:function(){var t=this._contentNode,i=t.style;i.width="",i.whiteSpace="nowrap";var s=t.offsetWidth;s=Math.min(s,this.options.maxWidth),s=Math.max(s,this.options.minWidth),i.width=s+1+"px",i.whiteSpace="",i.height="";var o=t.offsetHeight,n=this.options.maxHeight,a="leaflet-popup-scrolled";n&&o>n?(i.height=n+"px",e.DomUtil.addClass(t,a)):e.DomUtil.removeClass(t,a),this._containerWidth=this._container.offsetWidth},_updatePosition:function(){if(this._map){var t=this._map.latLngToLayerPoint(this._latlng),i=this._animated,s=this.options.offset;i&&e.DomUtil.setPosition(this._container,t),this._containerBottom=-s.y-(i?0:t.y),this._containerLeft=-Math.round(this._containerWidth/2)+s.x+(i?0:t.x),this._container.style.bottom=this._containerBottom+"px",this._container.style.left=this._containerLeft+"px"}},_zoomAnimation:function(t){var i=this._map._latLngToNewLayerPoint(this._latlng,t.zoom,t.center);e.DomUtil.setPosition(this._container,i)},_adjustPan:function(){if(this.options.autoPan){var t=this._map,i=this._container.offsetHeight,s=this._containerWidth,o=new e.Point(this._containerLeft,-i-this._containerBottom);this._animated&&o._add(e.DomUtil.getPosition(this._container));var n=t.layerPointToContainerPoint(o),a=this.options.autoPanPadding,r=t.getSize(),h=0,l=0;0>n.x&&(h=n.x-a.x),n.x+s>r.x&&(h=n.x+s-r.x+a.x),0>n.y&&(l=n.y-a.y),n.y+i>r.y&&(l=n.y+i-r.y+a.y),(h||l)&&t.panBy(new e.Point(h,l))}},_onCloseButtonClick:function(t){this._close(),e.DomEvent.stop(t)}}),e.popup=function(t,i){return new e.Popup(t,i)},e.Marker.include({openPopup:function(){return this._popup&&this._map&&(this._popup.setLatLng(this._latlng),this._map.openPopup(this._popup)),this},closePopup:function(){return this._popup&&this._popup._close(),this},bindPopup:function(t,i){var s=e.point(this.options.icon.options.popupAnchor)||new e.Point(0,0);return s=s.add(e.Popup.prototype.options.offset),i&&i.offset&&(s=s.add(i.offset)),i=e.extend({offset:s},i),this._popup||this.on("click",this.openPopup,this).on("remove",this.closePopup,this).on("move",this._movePopup,this),this._popup=new e.Popup(i,this).setContent(t),this},unbindPopup:function(){return this._popup&&(this._popup=null,this.off("click",this.openPopup).off("remove",this.closePopup).off("move",this._movePopup)),this},_movePopup:function(t){this._popup.setLatLng(t.latlng)}}),e.Map.include({openPopup:function(t){return this.closePopup(),this._popup=t,this.addLayer(t).fire("popupopen",{popup:this._popup})},closePopup:function(){return this._popup&&this._popup._close(),this}}),e.LayerGroup=e.Class.extend({initialize:function(t){this._layers={};var i,s;if(t)for(i=0,s=t.length;s>i;i++)this.addLayer(t[i])},addLayer:function(t){var i=e.stamp(t);return this._layers[i]=t,this._map&&this._map.addLayer(t),this},removeLayer:function(t){var i=e.stamp(t);return delete this._layers[i],this._map&&this._map.removeLayer(t),this},clearLayers:function(){return this.eachLayer(this.removeLayer,this),this},invoke:function(t){var i,s,e=Array.prototype.slice.call(arguments,1);for(i in this._layers)this._layers.hasOwnProperty(i)&&(s=this._layers[i],s[t]&&s[t].apply(s,e));return this},onAdd:function(t){this._map=t,this.eachLayer(t.addLayer,t)},onRemove:function(t){this.eachLayer(t.removeLayer,t),this._map=null},addTo:function(t){return t.addLayer(this),this},eachLayer:function(t,i){for(var s in this._layers)this._layers.hasOwnProperty(s)&&t.call(i,this._layers[s])},setZIndex:function(t){return this.invoke("setZIndex",t)}}),e.layerGroup=function(t){return new e.LayerGroup(t)},e.FeatureGroup=e.LayerGroup.extend({includes:e.Mixin.Events,statics:{EVENTS:"click dblclick mouseover mouseout mousemove contextmenu"},addLayer:function(t){return this._layers[e.stamp(t)]?this:(t.on(e.FeatureGroup.EVENTS,this._propagateEvent,this),e.LayerGroup.prototype.addLayer.call(this,t),this._popupContent&&t.bindPopup&&t.bindPopup(this._popupContent,this._popupOptions),this.fire("layeradd",{layer:t}))},removeLayer:function(t){return t.off(e.FeatureGroup.EVENTS,this._propagateEvent,this),e.LayerGroup.prototype.removeLayer.call(this,t),this._popupContent&&this.invoke("unbindPopup"),this.fire("layerremove",{layer:t})},bindPopup:function(t,i){return this._popupContent=t,this._popupOptions=i,this.invoke("bindPopup",t,i)},setStyle:function(t){return this.invoke("setStyle",t)},bringToFront:function(){return this.invoke("bringToFront")},bringToBack:function(){return this.invoke("bringToBack")},getBounds:function(){var t=new e.LatLngBounds;return this.eachLayer(function(i){t.extend(i instanceof e.Marker?i.getLatLng():i.getBounds())}),t},_propagateEvent:function(t){t.layer=t.target,t.target=this,this.fire(t.type,t)}}),e.featureGroup=function(t){return new e.FeatureGroup(t)},e.Path=e.Class.extend({includes:[e.Mixin.Events],statics:{CLIP_PADDING:e.Browser.mobile?Math.max(0,Math.min(.5,(1280/Math.max(t.innerWidth,t.innerHeight)-1)/2)):.5},options:{stroke:!0,color:"#0033ff",dashArray:null,weight:5,opacity:.5,fill:!1,fillColor:null,fillOpacity:.2,clickable:!0},initialize:function(t){e.setOptions(this,t)},onAdd:function(t){this._map=t,this._container||(this._initElements(),this._initEvents()),this.projectLatlngs(),this._updatePath(),this._container&&this._map._pathRoot.appendChild(this._container),this.fire("add"),t.on({viewreset:this.projectLatlngs,moveend:this._updatePath},this)},addTo:function(t){return t.addLayer(this),this},onRemove:function(t){t._pathRoot.removeChild(this._container),this.fire("remove"),this._map=null,e.Browser.vml&&(this._container=null,this._stroke=null,this._fill=null),t.off({viewreset:this.projectLatlngs,moveend:this._updatePath},this)},projectLatlngs:function(){},setStyle:function(t){return e.setOptions(this,t),this._container&&this._updateStyle(),this},redraw:function(){return this._map&&(this.projectLatlngs(),this._updatePath()),this}}),e.Map.include({_updatePathViewport:function(){var t=e.Path.CLIP_PADDING,i=this.getSize(),s=e.DomUtil.getPosition(this._mapPane),o=s.multiplyBy(-1)._subtract(i.multiplyBy(t)._round()),n=o.add(i.multiplyBy(1+2*t)._round());this._pathViewport=new e.Bounds(o,n)}}),e.Path.SVG_NS="http://www.w3.org/2000/svg",e.Browser.svg=!(!i.createElementNS||!i.createElementNS(e.Path.SVG_NS,"svg").createSVGRect),e.Path=e.Path.extend({statics:{SVG:e.Browser.svg},bringToFront:function(){var t=this._map._pathRoot,i=this._container;return i&&t.lastChild!==i&&t.appendChild(i),this},bringToBack:function(){var t=this._map._pathRoot,i=this._container,s=t.firstChild;return i&&s!==i&&t.insertBefore(i,s),this},getPathString:function(){},_createElement:function(t){return i.createElementNS(e.Path.SVG_NS,t)},_initElements:function(){this._map._initPathRoot(),this._initPath(),this._initStyle()},_initPath:function(){this._container=this._createElement("g"),this._path=this._createElement("path"),this._container.appendChild(this._path)},_initStyle:function(){this.options.stroke&&(this._path.setAttribute("stroke-linejoin","round"),this._path.setAttribute("stroke-linecap","round")),this.options.fill&&this._path.setAttribute("fill-rule","evenodd"),this._updateStyle()},_updateStyle:function(){this.options.stroke?(this._path.setAttribute("stroke",this.options.color),this._path.setAttribute("stroke-opacity",this.options.opacity),this._path.setAttribute("stroke-width",this.options.weight),this.options.dashArray?this._path.setAttribute("stroke-dasharray",this.options.dashArray):this._path.removeAttribute("stroke-dasharray")):this._path.setAttribute("stroke","none"),this.options.fill?(this._path.setAttribute("fill",this.options.fillColor||this.options.color),this._path.setAttribute("fill-opacity",this.options.fillOpacity)):this._path.setAttribute("fill","none")},_updatePath:function(){var t=this.getPathString();t||(t="M0 0"),this._path.setAttribute("d",t)},_initEvents:function(){if(this.options.clickable){(e.Browser.svg||!e.Browser.vml)&&this._path.setAttribute("class","leaflet-clickable"),e.DomEvent.on(this._container,"click",this._onMouseClick,this);for(var t=["dblclick","mousedown","mouseover","mouseout","mousemove","contextmenu"],i=0;t.length>i;i++)e.DomEvent.on(this._container,t[i],this._fireMouseEvent,this)}},_onMouseClick:function(t){this._map.dragging&&this._map.dragging.moved()||this._fireMouseEvent(t)},_fireMouseEvent:function(t){if(this.hasEventListeners(t.type)){var i=this._map,s=i.mouseEventToContainerPoint(t),o=i.containerPointToLayerPoint(s),n=i.layerPointToLatLng(o);this.fire(t.type,{latlng:n,layerPoint:o,containerPoint:s,originalEvent:t}),"contextmenu"===t.type&&e.DomEvent.preventDefault(t),"mousemove"!==t.type&&e.DomEvent.stopPropagation(t)}}}),e.Map.include({_initPathRoot:function(){this._pathRoot||(this._pathRoot=e.Path.prototype._createElement("svg"),this._panes.overlayPane.appendChild(this._pathRoot),this.options.zoomAnimation&&e.Browser.any3d?(this._pathRoot.setAttribute("class"," leaflet-zoom-animated"),this.on({zoomanim:this._animatePathZoom,zoomend:this._endPathZoom})):this._pathRoot.setAttribute("class"," leaflet-zoom-hide"),this.on("moveend",this._updateSvgViewport),this._updateSvgViewport())},_animatePathZoom:function(t){var i=this.getZoomScale(t.zoom),s=this._getCenterOffset(t.center)._multiplyBy(-i)._add(this._pathViewport.min);this._pathRoot.style[e.DomUtil.TRANSFORM]=e.DomUtil.getTranslateString(s)+" scale("+i+") ",this._pathZooming=!0},_endPathZoom:function(){this._pathZooming=!1},_updateSvgViewport:function(){if(!this._pathZooming){this._updatePathViewport();var t=this._pathViewport,i=t.min,s=t.max,o=s.x-i.x,n=s.y-i.y,a=this._pathRoot,r=this._panes.overlayPane;e.Browser.mobileWebkit&&r.removeChild(a),e.DomUtil.setPosition(a,i),a.setAttribute("width",o),a.setAttribute("height",n),a.setAttribute("viewBox",[i.x,i.y,o,n].join(" ")),e.Browser.mobileWebkit&&r.appendChild(a)}}}),e.Path.include({bindPopup:function(t,i){return(!this._popup||i)&&(this._popup=new e.Popup(i,this)),this._popup.setContent(t),this._popupHandlersAdded||(this.on("click",this._openPopup,this).on("remove",this.closePopup,this),this._popupHandlersAdded=!0),this},unbindPopup:function(){return this._popup&&(this._popup=null,this.off("click",this._openPopup).off("remove",this.closePopup),this._popupHandlersAdded=!1),this},openPopup:function(t){return this._popup&&(t=t||this._latlng||this._latlngs[Math.floor(this._latlngs.length/2)],this._openPopup({latlng:t})),this},closePopup:function(){return this._popup&&this._popup._close(),this},_openPopup:function(t){this._popup.setLatLng(t.latlng),this._map.openPopup(this._popup)}}),e.Browser.vml=!e.Browser.svg&&function(){try{var t=i.createElement("div");t.innerHTML='';var s=t.firstChild;return s.style.behavior="url(#default#VML)",s&&"object"==typeof s.adj}catch(e){return!1}}(),e.Path=e.Browser.svg||!e.Browser.vml?e.Path:e.Path.extend({statics:{VML:!0,CLIP_PADDING:.02},_createElement:function(){try{return i.namespaces.add("lvml","urn:schemas-microsoft-com:vml"),function(t){return i.createElement("')}}catch(t){return function(t){return i.createElement("<"+t+' xmlns="urn:schemas-microsoft.com:vml" class="lvml">')}}}(),_initPath:function(){var t=this._container=this._createElement("shape");e.DomUtil.addClass(t,"leaflet-vml-shape"),this.options.clickable&&e.DomUtil.addClass(t,"leaflet-clickable"),t.coordsize="1 1",this._path=this._createElement("path"),t.appendChild(this._path),this._map._pathRoot.appendChild(t)},_initStyle:function(){this._updateStyle()},_updateStyle:function(){var t=this._stroke,i=this._fill,s=this.options,e=this._container;e.stroked=s.stroke,e.filled=s.fill,s.stroke?(t||(t=this._stroke=this._createElement("stroke"),t.endcap="round",e.appendChild(t)),t.weight=s.weight+"px",t.color=s.color,t.opacity=s.opacity,t.dashStyle=s.dashArray?s.dashArray instanceof Array?s.dashArray.join(" "):s.dashArray.replace(/ *, */g," "):""):t&&(e.removeChild(t),this._stroke=null),s.fill?(i||(i=this._fill=this._createElement("fill"),e.appendChild(i)),i.color=s.fillColor||s.color,i.opacity=s.fillOpacity):i&&(e.removeChild(i),this._fill=null)},_updatePath:function(){var t=this._container.style;t.display="none",this._path.v=this.getPathString()+" ",t.display=""}}),e.Map.include(e.Browser.svg||!e.Browser.vml?{}:{_initPathRoot:function(){if(!this._pathRoot){var t=this._pathRoot=i.createElement("div");t.className="leaflet-vml-container",this._panes.overlayPane.appendChild(t),this.on("moveend",this._updatePathViewport),this._updatePathViewport()}}}),e.Browser.canvas=function(){return!!i.createElement("canvas").getContext}(),e.Path=e.Path.SVG&&!t.L_PREFER_CANVAS||!e.Browser.canvas?e.Path:e.Path.extend({statics:{CANVAS:!0,SVG:!1},redraw:function(){return this._map&&(this.projectLatlngs(),this._requestUpdate()),this},setStyle:function(t){return e.setOptions(this,t),this._map&&(this._updateStyle(),this._requestUpdate()),this},onRemove:function(t){t.off("viewreset",this.projectLatlngs,this).off("moveend",this._updatePath,this),this.options.clickable&&this._map.off("click",this._onClick,this),this._requestUpdate(),this._map=null},_requestUpdate:function(){this._map&&!e.Path._updateRequest&&(e.Path._updateRequest=e.Util.requestAnimFrame(this._fireMapMoveEnd,this._map))},_fireMapMoveEnd:function(){e.Path._updateRequest=null,this.fire("moveend")},_initElements:function(){this._map._initPathRoot(),this._ctx=this._map._canvasCtx},_updateStyle:function(){var t=this.options;t.stroke&&(this._ctx.lineWidth=t.weight,this._ctx.strokeStyle=t.color),t.fill&&(this._ctx.fillStyle=t.fillColor||t.color)},_drawPath:function(){var t,i,s,o,n,a;for(this._ctx.beginPath(),t=0,s=this._parts.length;s>t;t++){for(i=0,o=this._parts[t].length;o>i;i++)n=this._parts[t][i],a=(0===i?"move":"line")+"To",this._ctx[a](n.x,n.y);this instanceof e.Polygon&&this._ctx.closePath()}},_checkIfEmpty:function(){return!this._parts.length},_updatePath:function(){if(!this._checkIfEmpty()){var t=this._ctx,i=this.options;this._drawPath(),t.save(),this._updateStyle(),i.fill&&(t.globalAlpha=i.fillOpacity,t.fill()),i.stroke&&(t.globalAlpha=i.opacity,t.stroke()),t.restore()}},_initEvents:function(){this.options.clickable&&this._map.on("click",this._onClick,this)},_onClick:function(t){this._containsPoint(t.layerPoint)&&this.fire("click",{latlng:t.latlng,layerPoint:t.layerPoint,containerPoint:t.containerPoint,originalEvent:t})}}),e.Map.include(e.Path.SVG&&!t.L_PREFER_CANVAS||!e.Browser.canvas?{}:{_initPathRoot:function(){var t,s=this._pathRoot;s||(s=this._pathRoot=i.createElement("canvas"),s.style.position="absolute",t=this._canvasCtx=s.getContext("2d"),t.lineCap="round",t.lineJoin="round",this._panes.overlayPane.appendChild(s),this.options.zoomAnimation&&(this._pathRoot.className="leaflet-zoom-animated",this.on("zoomanim",this._animatePathZoom),this.on("zoomend",this._endPathZoom)),this.on("moveend",this._updateCanvasViewport),this._updateCanvasViewport())},_updateCanvasViewport:function(){if(!this._pathZooming){this._updatePathViewport();var t=this._pathViewport,i=t.min,s=t.max.subtract(i),o=this._pathRoot;e.DomUtil.setPosition(o,i),o.width=s.x,o.height=s.y,o.getContext("2d").translate(-i.x,-i.y)}}}),e.LineUtil={simplify:function(t,i){if(!i||!t.length)return t.slice();var s=i*i;return t=this._reducePoints(t,s),t=this._simplifyDP(t,s)},pointToSegmentDistance:function(t,i,s){return Math.sqrt(this._sqClosestPointOnSegment(t,i,s,!0))},closestPointOnSegment:function(t,i,s){return this._sqClosestPointOnSegment(t,i,s)},_simplifyDP:function(t,i){var e=t.length,o=typeof Uint8Array!=s+""?Uint8Array:Array,n=new o(e);n[0]=n[e-1]=1,this._simplifyDPStep(t,n,i,0,e-1);var a,r=[];for(a=0;e>a;a++)n[a]&&r.push(t[a]);return r},_simplifyDPStep:function(t,i,s,e,o){var n,a,r,h=0;for(a=e+1;o-1>=a;a++)r=this._sqClosestPointOnSegment(t[a],t[e],t[o],!0),r>h&&(n=a,h=r);h>s&&(i[n]=1,this._simplifyDPStep(t,i,s,e,n),this._simplifyDPStep(t,i,s,n,o))},_reducePoints:function(t,i){for(var s=[t[0]],e=1,o=0,n=t.length;n>e;e++)this._sqDist(t[e],t[o])>i&&(s.push(t[e]),o=e);return n-1>o&&s.push(t[n-1]),s},clipSegment:function(t,i,s,e){var o,n,a,r=e?this._lastCode:this._getBitCode(t,s),h=this._getBitCode(i,s);for(this._lastCode=h;;){if(!(r|h))return[t,i];if(r&h)return!1;o=r||h,n=this._getEdgeIntersection(t,i,o,s),a=this._getBitCode(n,s),o===r?(t=n,r=a):(i=n,h=a)}},_getEdgeIntersection:function(t,i,o,n){var a=i.x-t.x,r=i.y-t.y,h=n.min,l=n.max;return 8&o?new e.Point(t.x+a*(l.y-t.y)/r,l.y):4&o?new e.Point(t.x+a*(h.y-t.y)/r,h.y):2&o?new e.Point(l.x,t.y+r*(l.x-t.x)/a):1&o?new e.Point(h.x,t.y+r*(h.x-t.x)/a):s},_getBitCode:function(t,i){var s=0;return t.xi.max.x&&(s|=2),t.yi.max.y&&(s|=8),s},_sqDist:function(t,i){var s=i.x-t.x,e=i.y-t.y;return s*s+e*e},_sqClosestPointOnSegment:function(t,i,s,o){var n,a=i.x,r=i.y,h=s.x-a,l=s.y-r,c=h*h+l*l;return c>0&&(n=((t.x-a)*h+(t.y-r)*l)/c, -n>1?(a=s.x,r=s.y):n>0&&(a+=h*n,r+=l*n)),h=t.x-a,l=t.y-r,o?h*h+l*l:new e.Point(a,r)}},e.Polyline=e.Path.extend({initialize:function(t,i){e.Path.prototype.initialize.call(this,i),this._latlngs=this._convertLatLngs(t)},options:{smoothFactor:1,noClip:!1},projectLatlngs:function(){this._originalPoints=[];for(var t=0,i=this._latlngs.length;i>t;t++)this._originalPoints[t]=this._map.latLngToLayerPoint(this._latlngs[t])},getPathString:function(){for(var t=0,i=this._parts.length,s="";i>t;t++)s+=this._getPathPartStr(this._parts[t]);return s},getLatLngs:function(){return this._latlngs},setLatLngs:function(t){return this._latlngs=this._convertLatLngs(t),this.redraw()},addLatLng:function(t){return this._latlngs.push(e.latLng(t)),this.redraw()},spliceLatLngs:function(){var t=[].splice.apply(this._latlngs,arguments);return this._convertLatLngs(this._latlngs),this.redraw(),t},closestLayerPoint:function(t){for(var i,s,o=1/0,n=this._parts,a=null,r=0,h=n.length;h>r;r++)for(var l=n[r],c=1,m=l.length;m>c;c++){i=l[c-1],s=l[c];var u=e.LineUtil._sqClosestPointOnSegment(t,i,s,!0);o>u&&(o=u,a=e.LineUtil._sqClosestPointOnSegment(t,i,s))}return a&&(a.distance=Math.sqrt(o)),a},getBounds:function(){var t,i,s=new e.LatLngBounds,o=this.getLatLngs();for(t=0,i=o.length;i>t;t++)s.extend(o[t]);return s},_convertLatLngs:function(t){var i,s;for(i=0,s=t.length;s>i;i++){if(e.Util.isArray(t[i])&&"number"!=typeof t[i][0])return;t[i]=e.latLng(t[i])}return t},_initEvents:function(){e.Path.prototype._initEvents.call(this)},_getPathPartStr:function(t){for(var i,s=e.Path.VML,o=0,n=t.length,a="";n>o;o++)i=t[o],s&&i._round(),a+=(o?"L":"M")+i.x+" "+i.y;return a},_clipPoints:function(){var t,i,o,n=this._originalPoints,a=n.length;if(this.options.noClip)return this._parts=[n],s;this._parts=[];var r=this._parts,h=this._map._pathViewport,l=e.LineUtil;for(t=0,i=0;a-1>t;t++)o=l.clipSegment(n[t],n[t+1],h,t),o&&(r[i]=r[i]||[],r[i].push(o[0]),(o[1]!==n[t+1]||t===a-2)&&(r[i].push(o[1]),i++))},_simplifyPoints:function(){for(var t=this._parts,i=e.LineUtil,s=0,o=t.length;o>s;s++)t[s]=i.simplify(t[s],this.options.smoothFactor)},_updatePath:function(){this._map&&(this._clipPoints(),this._simplifyPoints(),e.Path.prototype._updatePath.call(this))}}),e.polyline=function(t,i){return new e.Polyline(t,i)},e.PolyUtil={},e.PolyUtil.clipPolygon=function(t,i){var s,o,n,a,r,h,l,c,m,u=[1,4,2,8],d=e.LineUtil;for(o=0,l=t.length;l>o;o++)t[o]._code=d._getBitCode(t[o],i);for(a=0;4>a;a++){for(c=u[a],s=[],o=0,l=t.length,n=l-1;l>o;n=o++)r=t[o],h=t[n],r._code&c?h._code&c||(m=d._getEdgeIntersection(h,r,c,i),m._code=d._getBitCode(m,i),s.push(m)):(h._code&c&&(m=d._getEdgeIntersection(h,r,c,i),m._code=d._getBitCode(m,i),s.push(m)),s.push(r));t=s}return t},e.Polygon=e.Polyline.extend({options:{fill:!0},initialize:function(t,i){e.Polyline.prototype.initialize.call(this,t,i),t&&e.Util.isArray(t[0])&&"number"!=typeof t[0][0]&&(this._latlngs=this._convertLatLngs(t[0]),this._holes=t.slice(1))},projectLatlngs:function(){if(e.Polyline.prototype.projectLatlngs.call(this),this._holePoints=[],this._holes){var t,i,s,o;for(t=0,s=this._holes.length;s>t;t++)for(this._holePoints[t]=[],i=0,o=this._holes[t].length;o>i;i++)this._holePoints[t][i]=this._map.latLngToLayerPoint(this._holes[t][i])}},_clipPoints:function(){var t=this._originalPoints,i=[];if(this._parts=[t].concat(this._holePoints),!this.options.noClip){for(var s=0,o=this._parts.length;o>s;s++){var n=e.PolyUtil.clipPolygon(this._parts[s],this._map._pathViewport);n.length&&i.push(n)}this._parts=i}},_getPathPartStr:function(t){var i=e.Polyline.prototype._getPathPartStr.call(this,t);return i+(e.Browser.svg?"z":"x")}}),e.polygon=function(t,i){return new e.Polygon(t,i)},function(){function t(t){return e.FeatureGroup.extend({initialize:function(t,i){this._layers={},this._options=i,this.setLatLngs(t)},setLatLngs:function(i){var s=0,e=i.length;for(this.eachLayer(function(t){e>s?t.setLatLngs(i[s++]):this.removeLayer(t)},this);e>s;)this.addLayer(new t(i[s++],this._options));return this}})}e.MultiPolyline=t(e.Polyline),e.MultiPolygon=t(e.Polygon),e.multiPolyline=function(t,i){return new e.MultiPolyline(t,i)},e.multiPolygon=function(t,i){return new e.MultiPolygon(t,i)}}(),e.Rectangle=e.Polygon.extend({initialize:function(t,i){e.Polygon.prototype.initialize.call(this,this._boundsToLatLngs(t),i)},setBounds:function(t){this.setLatLngs(this._boundsToLatLngs(t))},_boundsToLatLngs:function(t){return t=e.latLngBounds(t),[t.getSouthWest(),t.getNorthWest(),t.getNorthEast(),t.getSouthEast()]}}),e.rectangle=function(t,i){return new e.Rectangle(t,i)},e.Circle=e.Path.extend({initialize:function(t,i,s){e.Path.prototype.initialize.call(this,s),this._latlng=e.latLng(t),this._mRadius=i},options:{fill:!0},setLatLng:function(t){return this._latlng=e.latLng(t),this.redraw()},setRadius:function(t){return this._mRadius=t,this.redraw()},projectLatlngs:function(){var t=this._getLngRadius(),i=new e.LatLng(this._latlng.lat,this._latlng.lng-t),s=this._map.latLngToLayerPoint(i);this._point=this._map.latLngToLayerPoint(this._latlng),this._radius=Math.max(Math.round(this._point.x-s.x),1)},getBounds:function(){var t=this._getLngRadius(),i=360*(this._mRadius/40075017),s=this._latlng,o=new e.LatLng(s.lat-i,s.lng-t),n=new e.LatLng(s.lat+i,s.lng+t);return new e.LatLngBounds(o,n)},getLatLng:function(){return this._latlng},getPathString:function(){var t=this._point,i=this._radius;return this._checkIfEmpty()?"":e.Browser.svg?"M"+t.x+","+(t.y-i)+"A"+i+","+i+",0,1,1,"+(t.x-.1)+","+(t.y-i)+" z":(t._round(),i=Math.round(i),"AL "+t.x+","+t.y+" "+i+","+i+" 0,"+23592600)},getRadius:function(){return this._mRadius},_getLatRadius:function(){return 360*(this._mRadius/40075017)},_getLngRadius:function(){return this._getLatRadius()/Math.cos(e.LatLng.DEG_TO_RAD*this._latlng.lat)},_checkIfEmpty:function(){if(!this._map)return!1;var t=this._map._pathViewport,i=this._radius,s=this._point;return s.x-i>t.max.x||s.y-i>t.max.y||s.x+is;s++)for(l=this._parts[s],o=0,r=l.length,n=r-1;r>o;n=o++)if((i||0!==o)&&(h=e.LineUtil.pointToSegmentDistance(t,l[n],l[o]),c>=h))return!0;return!1}}:{}),e.Polygon.include(e.Path.CANVAS?{_containsPoint:function(t){var i,s,o,n,a,r,h,l,c=!1;if(e.Polyline.prototype._containsPoint.call(this,t,!0))return!0;for(n=0,h=this._parts.length;h>n;n++)for(i=this._parts[n],a=0,l=i.length,r=l-1;l>a;r=a++)s=i[a],o=i[r],s.y>t.y!=o.y>t.y&&t.x<(o.x-s.x)*(t.y-s.y)/(o.y-s.y)+s.x&&(c=!c);return c}}:{}),e.Circle.include(e.Path.CANVAS?{_drawPath:function(){var t=this._point;this._ctx.beginPath(),this._ctx.arc(t.x,t.y,this._radius,0,2*Math.PI,!1)},_containsPoint:function(t){var i=this._point,s=this.options.stroke?this.options.weight/2:0;return t.distanceTo(i)<=this._radius+s}}:{}),e.GeoJSON=e.FeatureGroup.extend({initialize:function(t,i){e.setOptions(this,i),this._layers={},t&&this.addData(t)},addData:function(t){var i,s,o=e.Util.isArray(t)?t:t.features;if(o){for(i=0,s=o.length;s>i;i++)(o[i].geometries||o[i].geometry||o[i].features)&&this.addData(o[i]);return this}var n=this.options;if(!n.filter||n.filter(t)){var a=e.GeoJSON.geometryToLayer(t,n.pointToLayer);return a.feature=t,a.defaultOptions=a.options,this.resetStyle(a),n.onEachFeature&&n.onEachFeature(t,a),this.addLayer(a)}},resetStyle:function(t){var i=this.options.style;i&&(e.Util.extend(t.options,t.defaultOptions),this._setLayerStyle(t,i))},setStyle:function(t){this.eachLayer(function(i){this._setLayerStyle(i,t)},this)},_setLayerStyle:function(t,i){"function"==typeof i&&(i=i(t.feature)),t.setStyle&&t.setStyle(i)}}),e.extend(e.GeoJSON,{geometryToLayer:function(t,i){var s,o,n,a,r,h="Feature"===t.type?t.geometry:t,l=h.coordinates,c=[];switch(h.type){case"Point":return s=this.coordsToLatLng(l),i?i(t,s):new e.Marker(s);case"MultiPoint":for(n=0,a=l.length;a>n;n++)s=this.coordsToLatLng(l[n]),r=i?i(t,s):new e.Marker(s),c.push(r);return new e.FeatureGroup(c);case"LineString":return o=this.coordsToLatLngs(l),new e.Polyline(o);case"Polygon":return o=this.coordsToLatLngs(l,1),new e.Polygon(o);case"MultiLineString":return o=this.coordsToLatLngs(l,1),new e.MultiPolyline(o);case"MultiPolygon":return o=this.coordsToLatLngs(l,2),new e.MultiPolygon(o);case"GeometryCollection":for(n=0,a=h.geometries.length;a>n;n++)r=this.geometryToLayer({geometry:h.geometries[n],type:"Feature",properties:t.properties},i),c.push(r);return new e.FeatureGroup(c);default:throw Error("Invalid GeoJSON object.")}},coordsToLatLng:function(t,i){var s=parseFloat(t[i?0:1]),o=parseFloat(t[i?1:0]);return new e.LatLng(s,o)},coordsToLatLngs:function(t,i,s){var e,o,n,a=[];for(o=0,n=t.length;n>o;o++)e=i?this.coordsToLatLngs(t[o],i-1,s):this.coordsToLatLng(t[o],s),a.push(e);return a}}),e.geoJson=function(t,i){return new e.GeoJSON(t,i)},e.DomEvent={addListener:function(t,i,o,n){var a,r,h,l=e.stamp(o),c="_leaflet_"+i+l;return t[c]?this:(a=function(i){return o.call(n||t,i||e.DomEvent._getEvent())},e.Browser.msTouch&&0===i.indexOf("touch")?this.addMsTouchListener(t,i,a,l):(e.Browser.touch&&"dblclick"===i&&this.addDoubleTapListener&&this.addDoubleTapListener(t,a,l),"addEventListener"in t?"mousewheel"===i?(t.addEventListener("DOMMouseScroll",a,!1),t.addEventListener(i,a,!1)):"mouseenter"===i||"mouseleave"===i?(r=a,h="mouseenter"===i?"mouseover":"mouseout",a=function(i){return e.DomEvent._checkMouse(t,i)?r(i):s},t.addEventListener(h,a,!1)):t.addEventListener(i,a,!1):"attachEvent"in t&&t.attachEvent("on"+i,a),t[c]=a,this))},removeListener:function(t,i,s){var o=e.stamp(s),n="_leaflet_"+i+o,a=t[n];if(a)return e.Browser.msTouch&&0===i.indexOf("touch")?this.removeMsTouchListener(t,i,o):e.Browser.touch&&"dblclick"===i&&this.removeDoubleTapListener?this.removeDoubleTapListener(t,o):"removeEventListener"in t?"mousewheel"===i?(t.removeEventListener("DOMMouseScroll",a,!1),t.removeEventListener(i,a,!1)):"mouseenter"===i||"mouseleave"===i?t.removeEventListener("mouseenter"===i?"mouseover":"mouseout",a,!1):t.removeEventListener(i,a,!1):"detachEvent"in t&&t.detachEvent("on"+i,a),t[n]=null,this},stopPropagation:function(t){return t.stopPropagation?t.stopPropagation():t.cancelBubble=!0,this},disableClickPropagation:function(t){for(var i=e.DomEvent.stopPropagation,s=e.Draggable.START.length-1;s>=0;s--)e.DomEvent.addListener(t,e.Draggable.START[s],i);return e.DomEvent.addListener(t,"click",i).addListener(t,"dblclick",i)},preventDefault:function(t){return t.preventDefault?t.preventDefault():t.returnValue=!1,this},stop:function(t){return e.DomEvent.preventDefault(t).stopPropagation(t)},getMousePosition:function(t,s){var o=i.body,n=i.documentElement,a=t.pageX?t.pageX:t.clientX+o.scrollLeft+n.scrollLeft,r=t.pageY?t.pageY:t.clientY+o.scrollTop+n.scrollTop,h=new e.Point(a,r);return s?h._subtract(e.DomUtil.getViewportOffset(s)):h},getWheelDelta:function(t){var i=0;return t.wheelDelta&&(i=t.wheelDelta/120),t.detail&&(i=-t.detail/3),i},_checkMouse:function(t,i){var s=i.relatedTarget;if(!s)return!0;try{for(;s&&s!==t;)s=s.parentNode}catch(e){return!1}return s!==t},_getEvent:function(){var i=t.event;if(!i)for(var s=arguments.callee.caller;s&&(i=s.arguments[0],!i||t.Event!==i.constructor);)s=s.caller;return i}},e.DomEvent.on=e.DomEvent.addListener,e.DomEvent.off=e.DomEvent.removeListener,e.Draggable=e.Class.extend({includes:e.Mixin.Events,statics:{START:e.Browser.touch?["touchstart","mousedown"]:["mousedown"],END:{mousedown:"mouseup",touchstart:"touchend",MSPointerDown:"touchend"},MOVE:{mousedown:"mousemove",touchstart:"touchmove",MSPointerDown:"touchmove"},TAP_TOLERANCE:15},initialize:function(t,i,s){this._element=t,this._dragStartTarget=i||t,this._longPress=s&&!e.Browser.msTouch},enable:function(){if(!this._enabled){for(var t=e.Draggable.START.length-1;t>=0;t--)e.DomEvent.on(this._dragStartTarget,e.Draggable.START[t],this._onDown,this);this._enabled=!0}},disable:function(){if(this._enabled){for(var t=e.Draggable.START.length-1;t>=0;t--)e.DomEvent.off(this._dragStartTarget,e.Draggable.START[t],this._onDown,this);this._enabled=!1,this._moved=!1}},_onDown:function(t){if(!(!e.Browser.touch&&t.shiftKey||1!==t.which&&1!==t.button&&!t.touches||(e.DomEvent.preventDefault(t),e.DomEvent.stopPropagation(t),e.Draggable._disabled))){if(this._simulateClick=!0,t.touches&&t.touches.length>1)return this._simulateClick=!1,clearTimeout(this._longPressTimeout),s;var o=t.touches&&1===t.touches.length?t.touches[0]:t,n=o.target;e.Browser.touch&&"a"===n.tagName.toLowerCase()&&e.DomUtil.addClass(n,"leaflet-active"),this._moved=!1,this._moving||(this._startPoint=new e.Point(o.clientX,o.clientY),this._startPos=this._newPos=e.DomUtil.getPosition(this._element),t.touches&&1===t.touches.length&&e.Browser.touch&&this._longPress&&(this._longPressTimeout=setTimeout(e.bind(function(){var t=this._newPos&&this._newPos.distanceTo(this._startPos)||0;e.Draggable.TAP_TOLERANCE>t&&(this._simulateClick=!1,this._onUp(),this._simulateEvent("contextmenu",o))},this),1e3)),e.DomEvent.on(i,e.Draggable.MOVE[t.type],this._onMove,this),e.DomEvent.on(i,e.Draggable.END[t.type],this._onUp,this))}},_onMove:function(t){if(!(t.touches&&t.touches.length>1)){var i=t.touches&&1===t.touches.length?t.touches[0]:t,s=new e.Point(i.clientX,i.clientY),o=s.subtract(this._startPoint);(o.x||o.y)&&(e.DomEvent.preventDefault(t),this._moved||(this.fire("dragstart"),this._moved=!0,this._startPos=e.DomUtil.getPosition(this._element).subtract(o),e.Browser.touch||(e.DomUtil.disableTextSelection(),this._setMovingCursor())),this._newPos=this._startPos.add(o),this._moving=!0,e.Util.cancelAnimFrame(this._animRequest),this._animRequest=e.Util.requestAnimFrame(this._updatePosition,this,!0,this._dragStartTarget))}},_updatePosition:function(){this.fire("predrag"),e.DomUtil.setPosition(this._element,this._newPos),this.fire("drag")},_onUp:function(t){var s;if(clearTimeout(this._longPressTimeout),this._simulateClick&&t.changedTouches){var o=t.changedTouches[0],n=o.target,a=this._newPos&&this._newPos.distanceTo(this._startPos)||0;"a"===n.tagName.toLowerCase()&&e.DomUtil.removeClass(n,"leaflet-active"),e.Draggable.TAP_TOLERANCE>a&&(s=o)}e.Browser.touch||(e.DomUtil.enableTextSelection(),this._restoreCursor());for(var r in e.Draggable.MOVE)e.Draggable.MOVE.hasOwnProperty(r)&&(e.DomEvent.off(i,e.Draggable.MOVE[r],this._onMove),e.DomEvent.off(i,e.Draggable.END[r],this._onUp));this._moved&&(e.Util.cancelAnimFrame(this._animRequest),this.fire("dragend")),this._moving=!1,s&&(this._moved=!1,this._simulateEvent("click",s))},_setMovingCursor:function(){e.DomUtil.addClass(i.body,"leaflet-dragging")},_restoreCursor:function(){e.DomUtil.removeClass(i.body,"leaflet-dragging")},_simulateEvent:function(s,e){var o=i.createEvent("MouseEvents");o.initMouseEvent(s,!0,!0,t,1,e.screenX,e.screenY,e.clientX,e.clientY,!1,!1,!1,!1,0,null),e.target.dispatchEvent(o)}}),e.Handler=e.Class.extend({initialize:function(t){this._map=t},enable:function(){this._enabled||(this._enabled=!0,this.addHooks())},disable:function(){this._enabled&&(this._enabled=!1,this.removeHooks())},enabled:function(){return!!this._enabled}}),e.Map.mergeOptions({dragging:!0,inertia:!e.Browser.android23,inertiaDeceleration:3400,inertiaMaxSpeed:1/0,inertiaThreshold:e.Browser.touch?32:18,easeLinearity:.25,longPress:!0,worldCopyJump:!1}),e.Map.Drag=e.Handler.extend({addHooks:function(){if(!this._draggable){var t=this._map;this._draggable=new e.Draggable(t._mapPane,t._container,t.options.longPress),this._draggable.on({dragstart:this._onDragStart,drag:this._onDrag,dragend:this._onDragEnd},this),t.options.worldCopyJump&&(this._draggable.on("predrag",this._onPreDrag,this),t.on("viewreset",this._onViewReset,this))}this._draggable.enable()},removeHooks:function(){this._draggable.disable()},moved:function(){return this._draggable&&this._draggable._moved},_onDragStart:function(){var t=this._map;t._panAnim&&t._panAnim.stop(),t.fire("movestart").fire("dragstart"),t.options.inertia&&(this._positions=[],this._times=[])},_onDrag:function(){if(this._map.options.inertia){var t=this._lastTime=+new Date,i=this._lastPos=this._draggable._newPos;this._positions.push(i),this._times.push(t),t-this._times[0]>200&&(this._positions.shift(),this._times.shift())}this._map.fire("move").fire("drag")},_onViewReset:function(){var t=this._map.getSize()._divideBy(2),i=this._map.latLngToLayerPoint(new e.LatLng(0,0));this._initialWorldOffset=i.subtract(t).x,this._worldWidth=this._map.project(new e.LatLng(0,180)).x},_onPreDrag:function(){var t=this._worldWidth,i=Math.round(t/2),s=this._initialWorldOffset,e=this._draggable._newPos.x,o=(e-i+s)%t+i-s,n=(e+i+s)%t-i-s,a=Math.abs(o+s)i.inertiaThreshold||!this._positions[0];if(o)t.fire("moveend");else{var n=this._lastPos.subtract(this._positions[0]),a=(this._lastTime+s-this._times[0])/1e3,r=i.easeLinearity,h=n.multiplyBy(r/a),l=h.distanceTo(new e.Point(0,0)),c=Math.min(i.inertiaMaxSpeed,l),m=h.multiplyBy(c/l),u=c/(i.inertiaDeceleration*r),d=m.multiplyBy(-u/2).round();e.Util.requestAnimFrame(function(){t.panBy(d,u,r)})}t.fire("dragend"),i.maxBounds&&e.Util.requestAnimFrame(this._panInsideMaxBounds,t,!0,t._container)},_panInsideMaxBounds:function(){this.panInsideBounds(this.options.maxBounds)}}),e.Map.addInitHook("addHandler","dragging",e.Map.Drag),e.Map.mergeOptions({doubleClickZoom:!0}),e.Map.DoubleClickZoom=e.Handler.extend({addHooks:function(){this._map.on("dblclick",this._onDoubleClick)},removeHooks:function(){this._map.off("dblclick",this._onDoubleClick)},_onDoubleClick:function(t){this.setView(t.latlng,this._zoom+1)}}),e.Map.addInitHook("addHandler","doubleClickZoom",e.Map.DoubleClickZoom),e.Map.mergeOptions({scrollWheelZoom:!0}),e.Map.ScrollWheelZoom=e.Handler.extend({addHooks:function(){e.DomEvent.on(this._map._container,"mousewheel",this._onWheelScroll,this),this._delta=0},removeHooks:function(){e.DomEvent.off(this._map._container,"mousewheel",this._onWheelScroll)},_onWheelScroll:function(t){var i=e.DomEvent.getWheelDelta(t);this._delta+=i,this._lastMousePos=this._map.mouseEventToContainerPoint(t),this._startTime||(this._startTime=+new Date);var s=Math.max(40-(+new Date-this._startTime),0);clearTimeout(this._timer),this._timer=setTimeout(e.bind(this._performZoom,this),s),e.DomEvent.preventDefault(t),e.DomEvent.stopPropagation(t)},_performZoom:function(){var t=this._map,i=this._delta,s=t.getZoom();if(i=i>0?Math.ceil(i):Math.round(i),i=Math.max(Math.min(i,4),-4),i=t._limitZoom(s+i)-s,this._delta=0,this._startTime=null,i){var e=s+i,o=this._getCenterForScrollWheelZoom(e);t.setView(o,e)}},_getCenterForScrollWheelZoom:function(t){var i=this._map,s=i.getZoomScale(t),e=i.getSize()._divideBy(2),o=this._lastMousePos._subtract(e)._multiplyBy(1-1/s),n=i._getTopLeftPoint()._add(e)._add(o);return i.unproject(n)}}),e.Map.addInitHook("addHandler","scrollWheelZoom",e.Map.ScrollWheelZoom),e.extend(e.DomEvent,{_touchstart:e.Browser.msTouch?"MSPointerDown":"touchstart",_touchend:e.Browser.msTouch?"MSPointerUp":"touchend",addDoubleTapListener:function(t,s,o){function n(t){var i;if(e.Browser.msTouch?(p.push(t.pointerId),i=p.length):i=t.touches.length,!(i>1)){var s=Date.now(),o=s-(r||s);h=t.touches?t.touches[0]:t,l=o>0&&c>=o,r=s}}function a(t){if(e.Browser.msTouch){var i=p.indexOf(t.pointerId);if(-1===i)return;p.splice(i,1)}if(l){if(e.Browser.msTouch){var o,n={};for(var a in h)o=h[a],n[a]="function"==typeof o?o.bind(h):o;h=n}h.type="dblclick",s(h),r=null}}var r,h,l=!1,c=250,m="_leaflet_",u=this._touchstart,d=this._touchend,p=[];t[m+u+o]=n,t[m+d+o]=a;var _=e.Browser.msTouch?i.documentElement:t;return t.addEventListener(u,n,!1),_.addEventListener(d,a,!1),e.Browser.msTouch&&_.addEventListener("MSPointerCancel",a,!1),this},removeDoubleTapListener:function(t,s){var o="_leaflet_";return t.removeEventListener(this._touchstart,t[o+this._touchstart+s],!1),(e.Browser.msTouch?i.documentElement:t).removeEventListener(this._touchend,t[o+this._touchend+s],!1),e.Browser.msTouch&&i.documentElement.removeEventListener("MSPointerCancel",t[o+this._touchend+s],!1),this}}),e.extend(e.DomEvent,{_msTouches:[],_msDocumentListener:!1,addMsTouchListener:function(t,i,s,e){switch(i){case"touchstart":return this.addMsTouchListenerStart(t,i,s,e);case"touchend":return this.addMsTouchListenerEnd(t,i,s,e);case"touchmove":return this.addMsTouchListenerMove(t,i,s,e);default:throw"Unknown touch event type"}},addMsTouchListenerStart:function(t,s,e,o){var n="_leaflet_",a=this._msTouches,r=function(t){for(var i=!1,s=0;a.length>s;s++)if(a[s].pointerId===t.pointerId){i=!0;break}i||a.push(t),t.touches=a.slice(),t.changedTouches=[t],e(t)};if(t[n+"touchstart"+o]=r,t.addEventListener("MSPointerDown",r,!1),!this._msDocumentListener){var h=function(t){for(var i=0;a.length>i;i++)if(a[i].pointerId===t.pointerId){a.splice(i,1);break}};i.documentElement.addEventListener("MSPointerUp",h,!1),i.documentElement.addEventListener("MSPointerCancel",h,!1),this._msDocumentListener=!0}return this},addMsTouchListenerMove:function(t,i,s,e){function o(t){if(t.pointerType!==t.MSPOINTER_TYPE_MOUSE||0!==t.buttons){for(var i=0;a.length>i;i++)if(a[i].pointerId===t.pointerId){a[i]=t;break}t.touches=a.slice(),t.changedTouches=[t],s(t)}}var n="_leaflet_",a=this._msTouches;return t[n+"touchmove"+e]=o,t.addEventListener("MSPointerMove",o,!1),this},addMsTouchListenerEnd:function(t,i,s,e){var o="_leaflet_",n=this._msTouches,a=function(t){for(var i=0;n.length>i;i++)if(n[i].pointerId===t.pointerId){n.splice(i,1);break}t.touches=n.slice(),t.changedTouches=[t],s(t)};return t[o+"touchend"+e]=a,t.addEventListener("MSPointerUp",a,!1),t.addEventListener("MSPointerCancel",a,!1),this},removeMsTouchListener:function(t,i,s){var e="_leaflet_",o=t[e+i+s];switch(i){case"touchstart":t.removeEventListener("MSPointerDown",o,!1);break;case"touchmove":t.removeEventListener("MSPointerMove",o,!1);break;case"touchend":t.removeEventListener("MSPointerUp",o,!1),t.removeEventListener("MSPointerCancel",o,!1)}return this}}),e.Map.mergeOptions({touchZoom:e.Browser.touch&&!e.Browser.android23}),e.Map.TouchZoom=e.Handler.extend({addHooks:function(){e.DomEvent.on(this._map._container,"touchstart",this._onTouchStart,this)},removeHooks:function(){e.DomEvent.off(this._map._container,"touchstart",this._onTouchStart,this)},_onTouchStart:function(t){var s=this._map;if(t.touches&&2===t.touches.length&&!s._animatingZoom&&!this._zooming){var o=s.mouseEventToLayerPoint(t.touches[0]),n=s.mouseEventToLayerPoint(t.touches[1]),a=s._getCenterLayerPoint();this._startCenter=o.add(n)._divideBy(2),this._startDist=o.distanceTo(n),this._moved=!1,this._zooming=!0,this._centerOffset=a.subtract(this._startCenter),s._panAnim&&s._panAnim.stop(),e.DomEvent.on(i,"touchmove",this._onTouchMove,this).on(i,"touchend",this._onTouchEnd,this),e.DomEvent.preventDefault(t)}},_onTouchMove:function(t){if(t.touches&&2===t.touches.length){var i=this._map,s=i.mouseEventToLayerPoint(t.touches[0]),o=i.mouseEventToLayerPoint(t.touches[1]);this._scale=s.distanceTo(o)/this._startDist,this._delta=s._add(o)._divideBy(2)._subtract(this._startCenter),1!==this._scale&&(this._moved||(e.DomUtil.addClass(i._mapPane,"leaflet-zoom-anim leaflet-touching"),i.fire("movestart").fire("zoomstart")._prepareTileBg(),this._moved=!0),e.Util.cancelAnimFrame(this._animRequest),this._animRequest=e.Util.requestAnimFrame(this._updateOnMove,this,!0,this._map._container),e.DomEvent.preventDefault(t))}},_updateOnMove:function(){var t=this._map,i=this._getScaleOrigin(),s=t.layerPointToLatLng(i);t.fire("zoomanim",{center:s,zoom:t.getScaleZoom(this._scale)}),t._tileBg.style[e.DomUtil.TRANSFORM]=e.DomUtil.getTranslateString(this._delta)+" "+e.DomUtil.getScaleString(this._scale,this._startCenter)},_onTouchEnd:function(){if(this._moved&&this._zooming){var t=this._map;this._zooming=!1,e.DomUtil.removeClass(t._mapPane,"leaflet-touching"),e.DomEvent.off(i,"touchmove",this._onTouchMove).off(i,"touchend",this._onTouchEnd);var s=this._getScaleOrigin(),o=t.layerPointToLatLng(s),n=t.getZoom(),a=t.getScaleZoom(this._scale)-n,r=a>0?Math.ceil(a):Math.floor(a),h=t._limitZoom(n+r);t.fire("zoomanim",{center:o,zoom:h}),t._runAnimation(o,h,t.getZoomScale(h)/this._scale,s,!0)}},_getScaleOrigin:function(){var t=this._centerOffset.subtract(this._delta).divideBy(this._scale);return this._startCenter.add(t)}}),e.Map.addInitHook("addHandler","touchZoom",e.Map.TouchZoom),e.Map.mergeOptions({boxZoom:!0}),e.Map.BoxZoom=e.Handler.extend({initialize:function(t){this._map=t,this._container=t._container,this._pane=t._panes.overlayPane},addHooks:function(){e.DomEvent.on(this._container,"mousedown",this._onMouseDown,this)},removeHooks:function(){e.DomEvent.off(this._container,"mousedown",this._onMouseDown)},_onMouseDown:function(t){return!t.shiftKey||1!==t.which&&1!==t.button?!1:(e.DomUtil.disableTextSelection(),this._startLayerPoint=this._map.mouseEventToLayerPoint(t),this._box=e.DomUtil.create("div","leaflet-zoom-box",this._pane),e.DomUtil.setPosition(this._box,this._startLayerPoint),this._container.style.cursor="crosshair",e.DomEvent.on(i,"mousemove",this._onMouseMove,this).on(i,"mouseup",this._onMouseUp,this).preventDefault(t),this._map.fire("boxzoomstart"),s)},_onMouseMove:function(t){var i=this._startLayerPoint,s=this._box,o=this._map.mouseEventToLayerPoint(t),n=o.subtract(i),a=new e.Point(Math.min(o.x,i.x),Math.min(o.y,i.y));e.DomUtil.setPosition(s,a),s.style.width=Math.max(0,Math.abs(n.x)-4)+"px",s.style.height=Math.max(0,Math.abs(n.y)-4)+"px"},_onMouseUp:function(t){this._pane.removeChild(this._box),this._container.style.cursor="",e.DomUtil.enableTextSelection(),e.DomEvent.off(i,"mousemove",this._onMouseMove).off(i,"mouseup",this._onMouseUp);var s=this._map,o=s.mouseEventToLayerPoint(t);if(!this._startLayerPoint.equals(o)){var n=new e.LatLngBounds(s.layerPointToLatLng(this._startLayerPoint),s.layerPointToLatLng(o));s.fitBounds(n),s.fire("boxzoomend",{boxZoomBounds:n})}}}),e.Map.addInitHook("addHandler","boxZoom",e.Map.BoxZoom),e.Map.mergeOptions({keyboard:!0,keyboardPanOffset:80,keyboardZoomOffset:1}),e.Map.Keyboard=e.Handler.extend({keyCodes:{left:[37],right:[39],down:[40],up:[38],zoomIn:[187,107,61],zoomOut:[189,109,173]},initialize:function(t){this._map=t,this._setPanOffset(t.options.keyboardPanOffset),this._setZoomOffset(t.options.keyboardZoomOffset)},addHooks:function(){var t=this._map._container;-1===t.tabIndex&&(t.tabIndex="0"),e.DomEvent.on(t,"focus",this._onFocus,this).on(t,"blur",this._onBlur,this).on(t,"mousedown",this._onMouseDown,this),this._map.on("focus",this._addHooks,this).on("blur",this._removeHooks,this)},removeHooks:function(){this._removeHooks();var t=this._map._container;e.DomEvent.off(t,"focus",this._onFocus,this).off(t,"blur",this._onBlur,this).off(t,"mousedown",this._onMouseDown,this),this._map.off("focus",this._addHooks,this).off("blur",this._removeHooks,this)},_onMouseDown:function(){this._focused||this._map._container.focus()},_onFocus:function(){this._focused=!0,this._map.fire("focus")},_onBlur:function(){this._focused=!1,this._map.fire("blur")},_setPanOffset:function(t){var i,s,e=this._panKeys={},o=this.keyCodes;for(i=0,s=o.left.length;s>i;i++)e[o.left[i]]=[-1*t,0];for(i=0,s=o.right.length;s>i;i++)e[o.right[i]]=[t,0];for(i=0,s=o.down.length;s>i;i++)e[o.down[i]]=[0,t];for(i=0,s=o.up.length;s>i;i++)e[o.up[i]]=[0,-1*t]},_setZoomOffset:function(t){var i,s,e=this._zoomKeys={},o=this.keyCodes;for(i=0,s=o.zoomIn.length;s>i;i++)e[o.zoomIn[i]]=t;for(i=0,s=o.zoomOut.length;s>i;i++)e[o.zoomOut[i]]=-t},_addHooks:function(){e.DomEvent.on(i,"keydown",this._onKeyDown,this)},_removeHooks:function(){e.DomEvent.off(i,"keydown",this._onKeyDown,this)},_onKeyDown:function(t){var i=t.keyCode,s=this._map;if(this._panKeys.hasOwnProperty(i))s.panBy(this._panKeys[i]),s.options.maxBounds&&s.panInsideBounds(s.options.maxBounds);else{if(!this._zoomKeys.hasOwnProperty(i))return;s.setZoom(s.getZoom()+this._zoomKeys[i])}e.DomEvent.stop(t)}}),e.Map.addInitHook("addHandler","keyboard",e.Map.Keyboard),e.Handler.MarkerDrag=e.Handler.extend({initialize:function(t){this._marker=t},addHooks:function(){var t=this._marker._icon;this._draggable||(this._draggable=new e.Draggable(t,t).on("dragstart",this._onDragStart,this).on("drag",this._onDrag,this).on("dragend",this._onDragEnd,this)),this._draggable.enable()},removeHooks:function(){this._draggable.disable()},moved:function(){return this._draggable&&this._draggable._moved},_onDragStart:function(){this._marker.closePopup().fire("movestart").fire("dragstart")},_onDrag:function(){var t=this._marker,i=t._shadow,s=e.DomUtil.getPosition(t._icon),o=t._map.layerPointToLatLng(s);i&&e.DomUtil.setPosition(i,s),t._latlng=o,t.fire("move",{latlng:o}).fire("drag")},_onDragEnd:function(){this._marker.fire("moveend").fire("dragend")}}),e.Handler.PolyEdit=e.Handler.extend({options:{icon:new e.DivIcon({iconSize:new e.Point(8,8),className:"leaflet-div-icon leaflet-editing-icon"})},initialize:function(t,i){this._poly=t,e.setOptions(this,i)},addHooks:function(){this._poly._map&&(this._markerGroup||this._initMarkers(),this._poly._map.addLayer(this._markerGroup))},removeHooks:function(){this._poly._map&&(this._poly._map.removeLayer(this._markerGroup),delete this._markerGroup,delete this._markers)},updateMarkers:function(){this._markerGroup.clearLayers(),this._initMarkers()},_initMarkers:function(){this._markerGroup||(this._markerGroup=new e.LayerGroup),this._markers=[];var t,i,s,o,n=this._poly._latlngs;for(t=0,s=n.length;s>t;t++)o=this._createMarker(n[t],t),o.on("click",this._onMarkerClick,this),this._markers.push(o);var a,r;for(t=0,i=s-1;s>t;i=t++)(0!==t||e.Polygon&&this._poly instanceof e.Polygon)&&(a=this._markers[i],r=this._markers[t],this._createMiddleMarker(a,r),this._updatePrevNext(a,r))},_createMarker:function(t,i){var s=new e.Marker(t,{draggable:!0,icon:this.options.icon});return s._origLatLng=t,s._index=i,s.on("drag",this._onMarkerDrag,this),s.on("dragend",this._fireEdit,this),this._markerGroup.addLayer(s),s},_fireEdit:function(){this._poly.fire("edit")},_onMarkerDrag:function(t){var i=t.target;e.extend(i._origLatLng,i._latlng),i._middleLeft&&i._middleLeft.setLatLng(this._getMiddleLatLng(i._prev,i)),i._middleRight&&i._middleRight.setLatLng(this._getMiddleLatLng(i,i._next)),this._poly.redraw()},_onMarkerClick:function(t){if(!(3>this._poly._latlngs.length)){var i=t.target,s=i._index;this._markerGroup.removeLayer(i),this._markers.splice(s,1),this._poly.spliceLatLngs(s,1),this._updateIndexes(s,-1),this._updatePrevNext(i._prev,i._next),i._middleLeft&&this._markerGroup.removeLayer(i._middleLeft),i._middleRight&&this._markerGroup.removeLayer(i._middleRight),i._prev&&i._next?this._createMiddleMarker(i._prev,i._next):i._prev?i._next||(i._prev._middleRight=null):i._next._middleLeft=null,this._poly.fire("edit")}},_updateIndexes:function(t,i){this._markerGroup.eachLayer(function(s){s._index>t&&(s._index+=i)})},_createMiddleMarker:function(t,i){var s,e,o,n=this._getMiddleLatLng(t,i),a=this._createMarker(n);a.setOpacity(.6),t._middleRight=i._middleLeft=a,e=function(){var e=i._index;a._index=e,a.off("click",s).on("click",this._onMarkerClick,this),n.lat=a.getLatLng().lat,n.lng=a.getLatLng().lng,this._poly.spliceLatLngs(e,0,n),this._markers.splice(e,0,a),a.setOpacity(1),this._updateIndexes(e,1),i._index++,this._updatePrevNext(t,a),this._updatePrevNext(a,i)},o=function(){a.off("dragstart",e,this),a.off("dragend",o,this), -this._createMiddleMarker(t,a),this._createMiddleMarker(a,i)},s=function(){e.call(this),o.call(this),this._poly.fire("edit")},a.on("click",s,this).on("dragstart",e,this).on("dragend",o,this),this._markerGroup.addLayer(a)},_updatePrevNext:function(t,i){t&&(t._next=i),i&&(i._prev=t)},_getMiddleLatLng:function(t,i){var s=this._poly._map,e=s.latLngToLayerPoint(t.getLatLng()),o=s.latLngToLayerPoint(i.getLatLng());return s.layerPointToLatLng(e._add(o)._divideBy(2))}}),e.Polyline.addInitHook(function(){e.Handler.PolyEdit&&(this.editing=new e.Handler.PolyEdit(this),this.options.editable&&this.editing.enable()),this.on("add",function(){this.editing&&this.editing.enabled()&&this.editing.addHooks()}),this.on("remove",function(){this.editing&&this.editing.enabled()&&this.editing.removeHooks()})}),e.Control=e.Class.extend({options:{position:"topright"},initialize:function(t){e.setOptions(this,t)},getPosition:function(){return this.options.position},setPosition:function(t){var i=this._map;return i&&i.removeControl(this),this.options.position=t,i&&i.addControl(this),this},addTo:function(t){this._map=t;var i=this._container=this.onAdd(t),s=this.getPosition(),o=t._controlCorners[s];return e.DomUtil.addClass(i,"leaflet-control"),-1!==s.indexOf("bottom")?o.insertBefore(i,o.firstChild):o.appendChild(i),this},removeFrom:function(t){var i=this.getPosition(),s=t._controlCorners[i];return s.removeChild(this._container),this._map=null,this.onRemove&&this.onRemove(t),this}}),e.control=function(t){return new e.Control(t)},e.Map.include({addControl:function(t){return t.addTo(this),this},removeControl:function(t){return t.removeFrom(this),this},_initControlPos:function(){function t(t,n){var a=s+t+" "+s+n;i[t+n]=e.DomUtil.create("div",a,o)}var i=this._controlCorners={},s="leaflet-",o=this._controlContainer=e.DomUtil.create("div",s+"control-container",this._container);t("top","left"),t("top","right"),t("bottom","left"),t("bottom","right")}}),e.Control.Zoom=e.Control.extend({options:{position:"topleft"},onAdd:function(t){var i="leaflet-control-zoom",s="leaflet-bar",o=s+"-part",n=e.DomUtil.create("div",i+" "+s);return this._map=t,this._zoomInButton=this._createButton("+","Zoom in",i+"-in "+o+" "+o+"-top",n,this._zoomIn,this),this._zoomOutButton=this._createButton("-","Zoom out",i+"-out "+o+" "+o+"-bottom",n,this._zoomOut,this),t.on("zoomend",this._updateDisabled,this),n},onRemove:function(t){t.off("zoomend",this._updateDisabled,this)},_zoomIn:function(t){this._map.zoomIn(t.shiftKey?3:1)},_zoomOut:function(t){this._map.zoomOut(t.shiftKey?3:1)},_createButton:function(t,i,s,o,n,a){var r=e.DomUtil.create("a",s,o);r.innerHTML=t,r.href="#",r.title=i;var h=e.DomEvent.stopPropagation;return e.DomEvent.on(r,"click",h).on(r,"mousedown",h).on(r,"dblclick",h).on(r,"click",e.DomEvent.preventDefault).on(r,"click",n,a),r},_updateDisabled:function(){var t=this._map,i="leaflet-control-zoom-disabled";e.DomUtil.removeClass(this._zoomInButton,i),e.DomUtil.removeClass(this._zoomOutButton,i),t._zoom===t.getMinZoom()&&e.DomUtil.addClass(this._zoomOutButton,i),t._zoom===t.getMaxZoom()&&e.DomUtil.addClass(this._zoomInButton,i)}}),e.Map.mergeOptions({zoomControl:!0}),e.Map.addInitHook(function(){this.options.zoomControl&&(this.zoomControl=new e.Control.Zoom,this.addControl(this.zoomControl))}),e.control.zoom=function(t){return new e.Control.Zoom(t)},e.Control.Attribution=e.Control.extend({options:{position:"bottomright",prefix:'Powered by Leaflet'},initialize:function(t){e.setOptions(this,t),this._attributions={}},onAdd:function(t){return this._container=e.DomUtil.create("div","leaflet-control-attribution"),e.DomEvent.disableClickPropagation(this._container),t.on("layeradd",this._onLayerAdd,this).on("layerremove",this._onLayerRemove,this),this._update(),this._container},onRemove:function(t){t.off("layeradd",this._onLayerAdd).off("layerremove",this._onLayerRemove)},setPrefix:function(t){return this.options.prefix=t,this._update(),this},addAttribution:function(t){return t?(this._attributions[t]||(this._attributions[t]=0),this._attributions[t]++,this._update(),this):s},removeAttribution:function(t){return t?(this._attributions[t]--,this._update(),this):s},_update:function(){if(this._map){var t=[];for(var i in this._attributions)this._attributions.hasOwnProperty(i)&&this._attributions[i]&&t.push(i);var s=[];this.options.prefix&&s.push(this.options.prefix),t.length&&s.push(t.join(", ")),this._container.innerHTML=s.join(" — ")}},_onLayerAdd:function(t){t.layer.getAttribution&&this.addAttribution(t.layer.getAttribution())},_onLayerRemove:function(t){t.layer.getAttribution&&this.removeAttribution(t.layer.getAttribution())}}),e.Map.mergeOptions({attributionControl:!0}),e.Map.addInitHook(function(){this.options.attributionControl&&(this.attributionControl=(new e.Control.Attribution).addTo(this))}),e.control.attribution=function(t){return new e.Control.Attribution(t)},e.Control.Scale=e.Control.extend({options:{position:"bottomleft",maxWidth:100,metric:!0,imperial:!0,updateWhenIdle:!1},onAdd:function(t){this._map=t;var i="leaflet-control-scale",s=e.DomUtil.create("div",i),o=this.options;return this._addScales(o,i,s),t.on(o.updateWhenIdle?"moveend":"move",this._update,this),t.whenReady(this._update,this),s},onRemove:function(t){t.off(this.options.updateWhenIdle?"moveend":"move",this._update,this)},_addScales:function(t,i,s){t.metric&&(this._mScale=e.DomUtil.create("div",i+"-line",s)),t.imperial&&(this._iScale=e.DomUtil.create("div",i+"-line",s))},_update:function(){var t=this._map.getBounds(),i=t.getCenter().lat,s=6378137*Math.PI*Math.cos(i*Math.PI/180),e=s*(t.getNorthEast().lng-t.getSouthWest().lng)/180,o=this._map.getSize(),n=this.options,a=0;o.x>0&&(a=e*(n.maxWidth/o.x)),this._updateScales(n,a)},_updateScales:function(t,i){t.metric&&i&&this._updateMetric(i),t.imperial&&i&&this._updateImperial(i)},_updateMetric:function(t){var i=this._getRoundNum(t);this._mScale.style.width=this._getScaleWidth(i/t)+"px",this._mScale.innerHTML=1e3>i?i+" m":i/1e3+" km"},_updateImperial:function(t){var i,s,e,o=3.2808399*t,n=this._iScale;o>5280?(i=o/5280,s=this._getRoundNum(i),n.style.width=this._getScaleWidth(s/i)+"px",n.innerHTML=s+" mi"):(e=this._getRoundNum(o),n.style.width=this._getScaleWidth(e/o)+"px",n.innerHTML=e+" ft")},_getScaleWidth:function(t){return Math.round(this.options.maxWidth*t)-10},_getRoundNum:function(t){var i=Math.pow(10,(Math.floor(t)+"").length-1),s=t/i;return s=s>=10?10:s>=5?5:s>=3?3:s>=2?2:1,i*s}}),e.control.scale=function(t){return new e.Control.Scale(t)},e.Control.Layers=e.Control.extend({options:{collapsed:!0,position:"topright",autoZIndex:!0},initialize:function(t,i,s){e.setOptions(this,s),this._layers={},this._lastZIndex=0,this._handlingClick=!1;for(var o in t)t.hasOwnProperty(o)&&this._addLayer(t[o],o);for(o in i)i.hasOwnProperty(o)&&this._addLayer(i[o],o,!0)},onAdd:function(t){return this._initLayout(),this._update(),t.on("layeradd",this._onLayerChange,this).on("layerremove",this._onLayerChange,this),this._container},onRemove:function(t){t.off("layeradd",this._onLayerChange).off("layerremove",this._onLayerChange)},addBaseLayer:function(t,i){return this._addLayer(t,i),this._update(),this},addOverlay:function(t,i){return this._addLayer(t,i,!0),this._update(),this},removeLayer:function(t){var i=e.stamp(t);return delete this._layers[i],this._update(),this},_initLayout:function(){var t="leaflet-control-layers",i=this._container=e.DomUtil.create("div",t);e.Browser.touch?e.DomEvent.on(i,"click",e.DomEvent.stopPropagation):(e.DomEvent.disableClickPropagation(i),e.DomEvent.on(i,"mousewheel",e.DomEvent.stopPropagation));var s=this._form=e.DomUtil.create("form",t+"-list");if(this.options.collapsed){e.DomEvent.on(i,"mouseover",this._expand,this).on(i,"mouseout",this._collapse,this);var o=this._layersLink=e.DomUtil.create("a",t+"-toggle",i);o.href="#",o.title="Layers",e.Browser.touch?e.DomEvent.on(o,"click",e.DomEvent.stopPropagation).on(o,"click",e.DomEvent.preventDefault).on(o,"click",this._expand,this):e.DomEvent.on(o,"focus",this._expand,this),this._map.on("movestart",this._collapse,this)}else this._expand();this._baseLayersList=e.DomUtil.create("div",t+"-base",s),this._separator=e.DomUtil.create("div",t+"-separator",s),this._overlaysList=e.DomUtil.create("div",t+"-overlays",s),i.appendChild(s)},_addLayer:function(t,i,s){var o=e.stamp(t);this._layers[o]={layer:t,name:i,overlay:s},this.options.autoZIndex&&t.setZIndex&&(this._lastZIndex++,t.setZIndex(this._lastZIndex))},_update:function(){if(this._container){this._baseLayersList.innerHTML="",this._overlaysList.innerHTML="";var t=!1,i=!1;for(var s in this._layers)if(this._layers.hasOwnProperty(s)){var e=this._layers[s];this._addItem(e),i=i||e.overlay,t=t||!e.overlay}this._separator.style.display=i&&t?"":"none"}},_onLayerChange:function(t){var i=e.stamp(t.layer);this._layers[i]&&!this._handlingClick&&this._update()},_createRadioElement:function(t,s){var e='t;t++)i=o[t],s=this._layers[i.layerId],i.checked&&!this._map.hasLayer(s.layer)?(this._map.addLayer(s.layer),s.overlay||(e=s.layer)):!i.checked&&this._map.hasLayer(s.layer)&&this._map.removeLayer(s.layer);e&&(this._map.setZoom(this._map.getZoom()),this._map.fire("baselayerchange",{layer:e})),this._handlingClick=!1},_expand:function(){e.DomUtil.addClass(this._container,"leaflet-control-layers-expanded")},_collapse:function(){this._container.className=this._container.className.replace(" leaflet-control-layers-expanded","")}}),e.control.layers=function(t,i,s){return new e.Control.Layers(t,i,s)},e.PosAnimation=e.Class.extend({includes:e.Mixin.Events,run:function(t,i,s,o){this.stop(),this._el=t,this._inProgress=!0,this.fire("start"),t.style[e.DomUtil.TRANSITION]="all "+(s||.25)+"s cubic-bezier(0,0,"+(o||.5)+",1)",e.DomEvent.on(t,e.DomUtil.TRANSITION_END,this._onTransitionEnd,this),e.DomUtil.setPosition(t,i),e.Util.falseFn(t.offsetWidth),this._stepTimer=setInterval(e.bind(this.fire,this,"step"),50)},stop:function(){this._inProgress&&(e.DomUtil.setPosition(this._el,this._getPos()),this._onTransitionEnd(),e.Util.falseFn(this._el.offsetWidth))},_transformRe:/(-?[\d\.]+), (-?[\d\.]+)\)/,_getPos:function(){var i,s,o,n=this._el,a=t.getComputedStyle(n);return e.Browser.any3d?(o=a[e.DomUtil.TRANSFORM].match(this._transformRe),i=parseFloat(o[1]),s=parseFloat(o[2])):(i=parseFloat(a.left),s=parseFloat(a.top)),new e.Point(i,s,!0)},_onTransitionEnd:function(){e.DomEvent.off(this._el,e.DomUtil.TRANSITION_END,this._onTransitionEnd,this),this._inProgress&&(this._inProgress=!1,this._el.style[e.DomUtil.TRANSITION]="",clearInterval(this._stepTimer),this.fire("step").fire("end"))}}),e.Map.include({setView:function(t,i,s){i=this._limitZoom(i);var e=this._zoom!==i;if(this._loaded&&!s&&this._layers){this._panAnim&&this._panAnim.stop();var o=e?this._zoomToIfClose&&this._zoomToIfClose(t,i):this._panByIfClose(t);if(o)return clearTimeout(this._sizeTimer),this}return this._resetView(t,i),this},panBy:function(t,i,s){if(t=e.point(t),!t.x&&!t.y)return this;this._panAnim||(this._panAnim=new e.PosAnimation,this._panAnim.on({step:this._onPanTransitionStep,end:this._onPanTransitionEnd},this)),this.fire("movestart"),e.DomUtil.addClass(this._mapPane,"leaflet-pan-anim");var o=e.DomUtil.getPosition(this._mapPane).subtract(t)._round();return this._panAnim.run(this._mapPane,o,i||.25,s),this},_onPanTransitionStep:function(){this.fire("move")},_onPanTransitionEnd:function(){e.DomUtil.removeClass(this._mapPane,"leaflet-pan-anim"),this.fire("moveend")},_panByIfClose:function(t){var i=this._getCenterOffset(t)._floor();return this._offsetIsWithinView(i)?(this.panBy(i),!0):!1},_offsetIsWithinView:function(t,i){var s=i||1,e=this.getSize();return Math.abs(t.x)<=e.x*s&&Math.abs(t.y)<=e.y*s}}),e.PosAnimation=e.DomUtil.TRANSITION?e.PosAnimation:e.PosAnimation.extend({run:function(t,i,s,o){this.stop(),this._el=t,this._inProgress=!0,this._duration=s||.25,this._easeOutPower=1/Math.max(o||.5,.2),this._startPos=e.DomUtil.getPosition(t),this._offset=i.subtract(this._startPos),this._startTime=+new Date,this.fire("start"),this._animate()},stop:function(){this._inProgress&&(this._step(),this._complete())},_animate:function(){this._animId=e.Util.requestAnimFrame(this._animate,this),this._step()},_step:function(){var t=+new Date-this._startTime,i=1e3*this._duration;i>t?this._runFrame(this._easeOut(t/i)):(this._runFrame(1),this._complete())},_runFrame:function(t){var i=this._startPos.add(this._offset.multiplyBy(t));e.DomUtil.setPosition(this._el,i),this.fire("step")},_complete:function(){e.Util.cancelAnimFrame(this._animId),this._inProgress=!1,this.fire("end")},_easeOut:function(t){return 1-Math.pow(1-t,this._easeOutPower)}}),e.Map.mergeOptions({zoomAnimation:e.DomUtil.TRANSITION&&!e.Browser.android23&&!e.Browser.mobileOpera}),e.DomUtil.TRANSITION&&e.Map.addInitHook(function(){e.DomEvent.on(this._mapPane,e.DomUtil.TRANSITION_END,this._catchTransitionEnd,this)}),e.Map.include(e.DomUtil.TRANSITION?{_zoomToIfClose:function(t,i){if(this._animatingZoom)return!0;if(!this.options.zoomAnimation)return!1;var s=this.getZoomScale(i),o=this._getCenterOffset(t)._divideBy(1-1/s);if(!this._offsetIsWithinView(o,1))return!1;e.DomUtil.addClass(this._mapPane,"leaflet-zoom-anim"),this.fire("movestart").fire("zoomstart"),this.fire("zoomanim",{center:t,zoom:i});var n=this._getCenterLayerPoint().add(o);return this._prepareTileBg(),this._runAnimation(t,i,s,n),!0},_catchTransitionEnd:function(){this._animatingZoom&&this._onZoomTransitionEnd()},_runAnimation:function(t,i,s,o,n){this._animateToCenter=t,this._animateToZoom=i,this._animatingZoom=!0,e.Draggable&&(e.Draggable._disabled=!0);var a=e.DomUtil.TRANSFORM,r=this._tileBg;clearTimeout(this._clearTileBgTimer),e.Util.falseFn(r.offsetWidth);var h=e.DomUtil.getScaleString(s,o),l=r.style[a];r.style[a]=n?l+" "+h:h+" "+l},_prepareTileBg:function(){var t=this._tilePane,i=this._tileBg;if(i&&this._getLoadedTilesPercentage(i)>.5&&.5>this._getLoadedTilesPercentage(t))return t.style.visibility="hidden",t.empty=!0,this._stopLoadingImages(t),s;i||(i=this._tileBg=this._createPane("leaflet-tile-pane",this._mapPane),i.style.zIndex=1),i.style[e.DomUtil.TRANSFORM]="",i.style.visibility="hidden",i.empty=!0,t.empty=!1,this._tilePane=this._panes.tilePane=i;var o=this._tileBg=t;e.DomUtil.addClass(o,"leaflet-zoom-animated"),this._stopLoadingImages(o)},_getLoadedTilesPercentage:function(t){var i,s,e=t.getElementsByTagName("img"),o=0;for(i=0,s=e.length;s>i;i++)e[i].complete&&o++;return o/s},_stopLoadingImages:function(t){var i,s,o,n=Array.prototype.slice.call(t.getElementsByTagName("img"));for(i=0,s=n.length;s>i;i++)o=n[i],o.complete||(o.onload=e.Util.falseFn,o.onerror=e.Util.falseFn,o.src=e.Util.emptyImageUrl,o.parentNode.removeChild(o))},_onZoomTransitionEnd:function(){this._restoreTileFront(),e.DomUtil.removeClass(this._mapPane,"leaflet-zoom-anim"),e.Util.falseFn(this._tileBg.offsetWidth),this._animatingZoom=!1,this._resetView(this._animateToCenter,this._animateToZoom,!0,!0),e.Draggable&&(e.Draggable._disabled=!1)},_restoreTileFront:function(){this._tilePane.innerHTML="",this._tilePane.style.visibility="",this._tilePane.style.zIndex=2,this._tileBg.style.zIndex=1},_clearTileBg:function(){this._animatingZoom||this.touchZoom._zooming||(this._tileBg.innerHTML="")}}:{}),e.Map.include({_defaultLocateOptions:{watch:!1,setView:!1,maxZoom:1/0,timeout:1e4,maximumAge:0,enableHighAccuracy:!1},locate:function(t){if(t=this._locationOptions=e.extend(this._defaultLocateOptions,t),!navigator.geolocation)return this._handleGeolocationError({code:0,message:"Geolocation not supported."}),this;var i=e.bind(this._handleGeolocationResponse,this),s=e.bind(this._handleGeolocationError,this);return t.watch?this._locationWatchId=navigator.geolocation.watchPosition(i,s,t):navigator.geolocation.getCurrentPosition(i,s,t),this},stopLocate:function(){return navigator.geolocation&&navigator.geolocation.clearWatch(this._locationWatchId),this},_handleGeolocationError:function(t){var i=t.code,s=t.message||(1===i?"permission denied":2===i?"position unavailable":"timeout");this._locationOptions.setView&&!this._loaded&&this.fitWorld(),this.fire("locationerror",{code:i,message:"Geolocation error: "+s+"."})},_handleGeolocationResponse:function(t){var i=180*t.coords.accuracy/4e7,s=2*i,o=t.coords.latitude,n=t.coords.longitude,a=new e.LatLng(o,n),r=new e.LatLng(o-i,n-s),h=new e.LatLng(o+i,n+s),l=new e.LatLngBounds(r,h),c=this._locationOptions;if(c.setView){var m=Math.min(this.getBoundsZoom(l),c.maxZoom);this.setView(a,m)}this.fire("locationfound",{latlng:a,bounds:l,accuracy:t.coords.accuracy})}})}(this,document),L.Proj={},L.Proj._isProj4Proj=function(t){return t.projName!==void 0},L.Proj.Projection=L.Class.extend({initialize:function(t,i){if(L.Proj._isProj4Proj(t))this._proj=t;else{var s=t;Proj4js.defs[s]=i,this._proj=new Proj4js.Proj(s)}},project:function(t){var i=new L.Point(t.lng,t.lat);return Proj4js.transform(Proj4js.WGS84,this._proj,i)},unproject:function(t,i){var s=Proj4js.transform(this._proj,Proj4js.WGS84,t.clone());return new L.LatLng(s.y,s.x,i)}}),L.Proj.CRS=L.Class.extend({includes:L.CRS,options:{transformation:new L.Transformation(1,0,-1,0)},initialize:function(t,i,s){var e,o,n,a;L.Proj._isProj4Proj(t)?(o=t,e=o.srsCode,a=i||{},this.projection=new L.Proj.Projection(o)):(e=t,n=i,a=s||{},this.projection=new L.Proj.Projection(e,n)),L.Util.setOptions(this,a),this.code=e,this.transformation=this.options.transformation,this.options.origin&&(this.transformation=new L.Transformation(1,-this.options.origin[0],-1,this.options.origin[1])),this.options.scales?this.scale=function(t){return this.options.scales[t]}:this.options.resolutions&&(this.scale=function(t){return 1/this.options.resolutions[t]})}}),L.Proj.CRS.TMS=L.Proj.CRS.extend({initialize:function(t,i,s,e){if(L.Proj._isProj4Proj(t)){var o=t,n=i,a=s||{};a.origin=[n[0],n[3]],L.Proj.CRS.prototype.initialize(o,a)}else{var r=t,h=i,n=s,a=e||{};a.origin=[n[0],n[3]],L.Proj.CRS.prototype.initialize(r,h,a)}this.projectedBounds=n}}),L.Proj.TileLayer={},L.Proj.TileLayer.TMS=L.TileLayer.extend({options:{tms:!0,continuousWorld:!0},initialize:function(t,i,s){if(!(i instanceof L.Proj.CRS.TMS))throw Error("CRS is not L.Proj.CRS.TMS.");L.TileLayer.prototype.initialize.call(this,t,s),this.crs=i;for(var e=this.options.minZoom;this.options.maxZoom>e;e++){var o=(this.crs.projectedBounds[3]-this.crs.projectedBounds[1])/this._projectedTileSize(e);if(Math.abs(o-Math.round(o))>.001)throw Error("Projected bounds does not match grid at zoom "+e)}},getTileUrl:function(t){var i=Math.round((this.crs.projectedBounds[3]-this.crs.projectedBounds[1])/this._projectedTileSize(this._map.getZoom()));return L.Util.template(this._url,L.Util.extend({s:this._getSubdomain(t),z:this._getZoomForUrl(),x:t.x,y:i-t.y-1},this.options))},_projectedTileSize:function(t){return this.options.tileSize/this.crs.scale(t)}}),"undefined"!=typeof module&&(module.exports=L.Proj),"undefined"!=typeof L&&L.CRS!==void 0&&(L.CRS.proj4js=function(){return function(t,i,s,e){return e=e||{},s&&(e.transformation=s),new L.Proj.CRS(t,i,e)}}()),L.Control.MousePosition=L.Control.extend({options:{position:"bottomleft",separator:" : ",emptyString:"Unavailable",lngFirst:!1,numDigits:5,lngFormatter:void 0,latFormatter:void 0},onAdd:function(t){return this._container=L.DomUtil.create("div","leaflet-control-mouseposition"),L.DomEvent.disableClickPropagation(this._container),t.on("mousemove",this._onMouseMove,this),this._container.innerHTML=this.options.emptyString,this._container},onRemove:function(t){t.off("mousemove",this._onMouseMove)},_onMouseMove:function(t){var i=L.Util.formatNum(t.latlng.lng,this.options.numDigits),s=L.Util.formatNum(t.latlng.lat,this.options.numDigits);this.options.lngFormatter&&(i=this.options.lngFormatter(i)),this.options.latFormatter&&(s=this.options.latFormatter(s));var e=this.options.lngFirst?i+this.options.separator+s:s+this.options.separator+i;this._container.innerHTML=e}}),L.Map.mergeOptions({positionControl:!1}),L.Map.addInitHook(function(){this.options.positionControl&&(this.positionControl=new L.Control.MousePosition,this.addControl(this.positionControl))}),L.control.mousePosition=function(t){return new L.Control.MousePosition(t)},function(t,i){L.KSP={},L.KSP.version="0.2.1",L.KSP.CRS={},L.KSP.CRS.EPSG4326=new L.Proj.CRS.TMS(new Proj4js.Proj("EPSG:4326"),[-180,-90,180,90],{resolutions:[.703125,.3515625,.17578125,.087890625,.0439453125,.02197265625]}),L.KSP.CelestialBody=L.Class.extend({initialize:function(t){if(!t.hasOwnProperty("id"))throw Error("must specify id");if(!t.hasOwnProperty("name"))throw Error("must specify name");if(t.hasOwnProperty("crs")){if(!(t.crs instanceof L.Proj.CRS.TMS))throw Error("crs is not an instance of L.Proj.CRS.TMS")}else this.crs=L.KSP.CRS.EPSG4326;t.hasOwnProperty("radius")||(this.radius=1),t.hasOwnProperty("thumbnail")||(this.thumbnail="body-unknown.png"),t.hasOwnProperty("baseLayers")||(this.baseLayers={}),L.Util.extend(this,t)},addTo:function(t){var i,s=t._body;if(t._body=this,t.fire("bodychangestart",{body:this,oldBody:s}),s){for(i in s.baseLayers)s.baseLayers.hasOwnProperty(i)&&t.removeLayer(s.baseLayers[i]);for(i in s.overlays)s.overlays.hasOwnProperty(i)&&t.removeLayer(s.overlays[i])}var e=this.defaultLayer||this.baseLayers.Satellite;if(e){for(i in this.baseLayers)if(this.baseLayers.hasOwnProperty(i)&&this.baseLayers[i]._type===t._baseLayerType){e=this.baseLayers[i];break}t.addLayer(e),t.fire("baselayerchange",{layer:e})}for(i in this.overlays)this.overlays.hasOwnProperty(i)&&t._overlayTypes.indexOf(this.overlays[i]._type)>=0&&(t.addLayer(this.overlays[i]),t.fire("layeradd",{layer:this.overlays[i]}));t.fire("bodychangeend",{body:this,oldBody:s})},onAdd:function(t){this.addTo(t)},removeFrom:function(t){L.KSP.CelestialBody.DUMMY.addTo(t)},onRemove:function(t){this.removeFrom(t)}}),L.KSP.celestialBody=function(t){return new L.KSP.CelestialBody(t)},L.KSP.CelestialBody.DUMMY=L.KSP.celestialBody({id:"",name:"",crs:L.KSP.CRS.EPSG4326}),L.KSP.CelestialBody.ALL_PLANETARY=[L.KSP.CelestialBody.DUMMY],L.KSP.Map=L.Map.extend({options:{crs:L.KSP.CRS.EPSG4326,continuousWorld:!0},initialize:function(t,i){this._baseLayerType=-1,this._overlayTypes=[],L.Util.setOptions(this,i),this.startTrackingLayerState(),this.on("bodychangestart",this._onBodyChangeStart).on("bodychangeend",this._onBodyChangeEnd),L.Map.prototype.initialize.call(this,t,this.options)},clampZoom:function(){var t=this.getZoom(),i=this.getMinZoom(),s=this.getMaxZoom();i>t?this.setZoom(i):t>s?this.setZoom(s):this.fire("zoomend",this)},_onBodyChangeStart:function(){this.stopTrackingLayerState()},_onBodyChangeEnd:function(){this.clampZoom(),this.startTrackingLayerState()},_onLayerStateChange:function(t){if("layeradd"===t.type)t.layer instanceof L.KSP.TileLayer?this._baseLayerType=t.layer._type:t.layer instanceof L.KSP.LayerGroup&&0>this._overlayTypes.indexOf(t.layer._type)&&this._overlayTypes.push(t.layer._type);else if(t.layer instanceof L.KSP.LayerGroup){var i,s,e=t.layer._type,o=this._overlayTypes;for(i=o.length-1;i>=0;i--)s=o[i],s===e&&o.splice(i,1)}},startTrackingLayerState:function(){this.on("layeradd",this._onLayerStateChange).on("layerremove",this._onLayerStateChange)},stopTrackingLayerState:function(){this.off("layeradd",this._onLayerStateChange).off("layerremove",this._onLayerStateChange)}}),L.KSP.map=function(t,i){return new L.KSP.Map(t,i)},L.KSP.TileLayer=L.Proj.TileLayer.TMS.extend({statics:{TYPE_SATELLITE:0,TYPE_COLORRELIEF:1,TYPE_SLOPE:2,DEFAULT_URL:"http://tiles.kerbalmaps.com/{body}/{style}/{z}/{x}/{y}.png"},options:{continuousWorld:!1,noWrap:!1,minZoom:0,maxZoom:5,attribution:"Map data © Joel Pedraza"},initialize:function(t,i,s,e){L.Util.setOptions(this,e),this._type=t,L.Proj.TileLayer.TMS.prototype.initialize.call(this,i,s,this.options)}}),L.KSP.tileLayer=function(t,i,s,e){return new L.KSP.TileLayer(t,i,s,e)},L.KSP.LayerGroup=L.LayerGroup.extend({statics:{TYPE_SPACECENTER:0,TYPE_ANOMALY:1},initialize:function(t,i){this._type=t,L.LayerGroup.prototype.initialize.call(this,i)}}),L.KSP.layerGroup=function(t,i){return new L.KSP.LayerGroup(t,i)},L.KSP.Icon={},L.KSP.Icon.SPACECENTER=new L.Icon({iconUrl:"../assets/images/markers-spacecenter.png",shadowUrl:"../assets/images/markers-shadow.png",iconSize:[30,40],shadowSize:[35,16],iconAnchor:[15,40],shadowAnchor:[10,12],popupAnchor:[0,-35]}),L.KSP.Icon.ANOMALY=new L.Icon({iconUrl:"../assets/images/markers-anomaly.png",shadowUrl:"../assets/images/markers-shadow.png",iconSize:[30,40],shadowSize:[35,16],iconAnchor:[15,40],shadowAnchor:[10,12],popupAnchor:[0,-35]}),L.KSP.Legend={},L.KSP.Legend.SLOPE={"≥ 60°":"#E19678","< 60°":"#C86464","< 30°":"#965A64","< 15°":"#645064","< 5°":"#325064","0°":"#32465A"},L.KSP.Control=L.KSP.control={},L.KSP.Control.Legend=L.Control.extend({options:{position:"bottomright"},onAdd:function(t){return this._container=L.DomUtil.create("div","leaflet-control-legend"),t.on("baselayerchange",this._onLayerChange,this),this._container},_update:function(t){if(this._container.innerHTML="",t){for(var i in t)t.hasOwnProperty(i)&&(this._container.innerHTML+=''+i+"
    ");L.DomUtil.addClass(this._container,"leaflet-control-legend-visible")}else this._container.className=this._container.className.replace(" leaflet-control-legend-visible","")},_onLayerChange:function(t){this._update(t.layer.options.legend)}}),L.Map.mergeOptions({legendControl:!0}),L.Map.addInitHook(function(){this.options.bodyControl&&(this.legendControl=new L.KSP.Control.Legend,this.addControl(this.legendControl))}),L.control.legend=function(t){return new L.KSP.Control.Legend(t)},L.KSP.Control.Scale=L.Control.Scale.extend({options:{imperial:!1},onAdd:function(t){this._radius=0,t._body&&(this._radius=t._body.radius);var i=L.Control.Scale.prototype.onAdd.call(this,t);return t.on("bodychangeend",this._onBodyChangeEnd,this),i},onRemove:function(t){L.Control.Scale.prototype.onRemove.call(this,t),t.off("bodychangeend",this._onBodyChangeEnd)},_onBodyChangeEnd:function(t){this._radius=t.body.radius,this._update()},_update:function(){var t=this._map.getBounds(),i=t.getCenter().lat,s=this._radius*Math.PI*Math.cos(i*Math.PI/180),e=s*(t.getNorthEast().lng-t.getSouthWest().lng)/180,o=this._map.getSize(),n=this.options,a=0;o.x>0&&(a=e*(n.maxWidth/o.x)),this._updateScales(n,a)}}),L.KSP.Map.mergeOptions({scaleControl:!1}),L.KSP.Map.addInitHook(function(){this.options.scaleControl&&(this.scaleControl=new L.KSP.Control.Scale,this.addControl(this.scaleControl))}),L.KSP.control.scale=function(t){return new L.KSP.Control.Scale(t)},L.KSP.Control.CelestialBody=L.Control.extend({options:{position:"topright",collapsed:!0},initialize:function(t,i){L.Util.setOptions(this,i),this._bodies=t,this._timeInMillis=(new Date).valueOf(),this._weekInMillis=6048e5},onAdd:function(){return this._initLayout(),this._update(),this._map.on("bodychangeend",this._update,this),this._container},_initLayout:function(){var t="leaflet-control-celestialbodies",s=this._container=L.DomUtil.create("div",t),e=this._bodies;if(this.options.collapsed){L.DomEvent.on(s,"mouseover",this._expand,this).on(s,"mouseout",this._collapse,this);var o=this._bodiesLink=L.DomUtil.create("a",t+"-toggle",s);o.href="#",o.title="Celestial Bodies",L.DomEvent.on(o,"focus",this._expand,this),this._map.on("movestart",this._collapse,this)}var n=this._list=L.DomUtil.create("ul",t+"-list",s);for(var a in e)if(e.hasOwnProperty(a)){var r=this._addBody(e[a],n);if(e[a].children){var h=i.createElement("ul");for(var l in e[a].children)e[a].children.hasOwnProperty(l)&&this._addBody(e[a].children[l],h);r.appendChild(h)}}},_update:function(){this._map._body&&(this._bodiesLink.style.backgroundImage='url("'+this._map._body.thumbnail+'")')},_addBody:function(t,s){var e,o=i.createElement("li"),n=i.createElement("img");if(n.src=t.thumbnail,n.alt=o.title=t.name,t.addedOn){this._timeInMillis-t.addedOnKerbal Space Center
    -0.0969 : -74.6004"),L.marker([20.5829,-146.5116],{icon:L.KSP.Icon.SPACECENTER}).bindPopup("Kerbal Space Center 2
    20.5829 : -146.5116"),L.marker([-1.5409,-71.9099],{icon:L.KSP.Icon.SPACECENTER}).bindPopup("Island Airfield
    -1.5409 : -71.9099")]),Anomalies:L.KSP.layerGroup(L.KSP.LayerGroup.TYPE_ANOMALY,[L.marker([.1023,-74.5684],{icon:L.KSP.Icon.ANOMALY}).bindPopup("0.1023 : -74.5684"),L.marker([20.6709,-146.4968],{icon:L.KSP.Icon.ANOMALY}).bindPopup("20.6709 : -146.4968"),L.marker([35.5705,-74.9773],{icon:L.KSP.Icon.ANOMALY}).bindPopup("35.5705 : -74.9773"),L.marker([-.6402,-80.7668],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-0.6402 : -80.7668"),L.marker([-28.8083,-13.4401],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-28.8083 : -13.4401"),L.marker([-6.5057,-141.6856],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-6.5057 : -141.6856"),L.marker([81.9551,-128.518],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-81.9551 : -128.518")])}}),L.KSP.CelestialBody.MUN=L.KSP.celestialBody({id:"mun",name:"Mun",crs:L.KSP.CRS.EPSG4326,radius:2e5,addedOn:13682304e5,lastUpdated:1368144e6,thumbnail:"body-mun.png",baseLayers:{Satellite:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SATELLITE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{body:"mun",style:"sat"}),"Color Relief":L.KSP.tileLayer(L.KSP.TileLayer.TYPE_COLORRELIEF,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{body:"mun",style:"color",legend:{"3150 m":"#EBEBEB","-180 m":"#232323"}}),Slope:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SLOPE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{body:"mun",style:"slope",legend:L.KSP.Legend.SLOPE})},overlays:{Anomalies:L.KSP.layerGroup(L.KSP.LayerGroup.TYPE_ANOMALY,[L.marker([-9.8314,25.9177],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-9.8314 : 25.9177"),L.marker([-82.2063,102.9305],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-82.2063 : 102.9305"),L.marker([57.6604,9.1422],{icon:L.KSP.Icon.ANOMALY}).bindPopup("57.6604 : 9.1422"),L.marker([2.4695,81.5133],{icon:L.KSP.Icon.ANOMALY}).bindPopup("2.4695 : 81.5133"),L.marker([12.4432,39.178],{icon:L.KSP.Icon.ANOMALY}).bindPopup("12.4432 : 39.1780"),L.marker([-12.4431,-140.822],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-12.4431 : -140.8220"),L.marker([.7027,22.747],{icon:L.KSP.Icon.ANOMALY}).bindPopup("0.7027 : 22.7470"),L.marker([-70.9556,-68.1378],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-70.9556,-68.1378")])}}),L.KSP.CelestialBody.MINMUS=L.KSP.celestialBody({id:"minmus",name:"Minmus",crs:L.KSP.CRS.EPSG4326,radius:6e4,addedOn:13682304e5,lastUpdated:13682304e5,thumbnail:"body-minmus.png",baseLayers:{Satellite:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SATELLITE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"sat",body:"minmus"}),"Color Relief":L.KSP.tileLayer(L.KSP.TileLayer.TYPE_COLORRELIEF,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"color",body:"minmus",legend:{"5750 m":"#414B41","2500 m":"#BEE6C3","1 m":"#96CDB4","0 m":"#87B9A5"}}),Slope:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SLOPE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"slope",body:"minmus",legend:L.KSP.Legend.SLOPE})},overlays:{Anomalies:L.KSP.layerGroup(L.KSP.LayerGroup.TYPE_ANOMALY,[L.marker([23.7768,60.0462],{icon:L.KSP.Icon.ANOMALY}).bindPopup("23.7768 : 60.0462")])}}),L.KSP.CelestialBody.DUNA=L.KSP.celestialBody({id:"duna",name:"Duna",crs:L.KSP.CRS.EPSG4326,radius:32e4,addedOn:13688352e5,lastUpdated:13688352e5,thumbnail:"body-duna.png",baseLayers:{Satellite:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SATELLITE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"sat",body:"duna"}),"Color Relief":L.KSP.tileLayer(L.KSP.TileLayer.TYPE_COLORRELIEF,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"color",body:"duna",legend:{"4800 m":"#C3A082","4000 m":"#966446","3000 m":"#733219","2000 m":"#501E14","1000 m":"#3C140F","0 m":"#280F0A"}}),Slope:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SLOPE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"slope",body:"duna",legend:L.KSP.Legend.SLOPE})},overlays:{Anomalies:L.KSP.layerGroup(L.KSP.LayerGroup.TYPE_ANOMALY,[L.marker([17.0483,-85.4717],{icon:L.KSP.Icon.ANOMALY}).bindPopup("17.0483 : -85.4717"),L.marker([-30.3525,-28.6828],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-30.3525 : -28.6828"),L.marker([-66.1344,-160.7432],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-66.1344 : -160.7432")])}}),L.KSP.CelestialBody.IKE=L.KSP.celestialBody({id:"ike",name:"Ike",crs:L.KSP.CRS.EPSG4326,radius:13e4,addedOn:13688352e5,lastUpdated:13688352e5,thumbnail:"body-ike.png",baseLayers:{Satellite:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SATELLITE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"sat",body:"ike"}),"Color Relief":L.KSP.tileLayer(L.KSP.TileLayer.TYPE_COLORRELIEF,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"color",body:"ike",legend:{"13000 m":"#828282","11000 m":"#6E6E6E","9000 m":"#5A5A5A","7000 m":"#464646","5000 m":"#323232","2500 m":"#191919","70 m":"#070707"}}),Slope:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SLOPE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"slope",body:"ike",legend:L.KSP.Legend.SLOPE})},overlays:{}}),L.KSP.CelestialBody.DRES=L.KSP.celestialBody({id:"dres",name:"Dres",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-dres.png"}),L.KSP.CelestialBody.JOOL=L.KSP.celestialBody({id:"jool",name:"Jool",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-jool.png"}),L.KSP.CelestialBody.LAYTHE=L.KSP.celestialBody({id:"laythe",name:"Laythe",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-laythe.png"}),L.KSP.CelestialBody.VALL=L.KSP.celestialBody({id:"vall",name:"Vall",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-vall.png"}),L.KSP.CelestialBody.TYLO=L.KSP.celestialBody({id:"tylo",name:"Tylo",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-tylo.png"}),L.KSP.CelestialBody.BOP=L.KSP.celestialBody({id:"bop",name:"Bop",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-bop.png"}),L.KSP.CelestialBody.POL=L.KSP.celestialBody({id:"pol",name:"Pol",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-pol.png"}),L.KSP.CelestialBody.EELOO=L.KSP.celestialBody({id:"eeloo",name:"Eeloo",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-eeloo.png"}),L.KSP.CelestialBody.KERBIN.defaultLayer=L.KSP.CelestialBody.KERBIN.baseLayers.Satellite,L.KSP.CelestialBody.MUN.defaultLayer=L.KSP.CelestialBody.MUN.baseLayers.Satellite,L.KSP.CelestialBody.MINMUS.defaultLayer=L.KSP.CelestialBody.MINMUS.baseLayers.Satellite,L.KSP.CelestialBody.EVE.children=[L.KSP.CelestialBody.GILLY],L.KSP.CelestialBody.KERBIN.children=[L.KSP.CelestialBody.MUN,L.KSP.CelestialBody.MINMUS],L.KSP.CelestialBody.DUNA.children=[L.KSP.CelestialBody.IKE],L.KSP.CelestialBody.JOOL.children=[L.KSP.CelestialBody.LAYTHE,L.KSP.CelestialBody.VALL,L.KSP.CelestialBody.TYLO,L.KSP.CelestialBody.BOP,L.KSP.CelestialBody.POL],L.KSP.CelestialBody.GILLY.parent=L.KSP.CelestialBody.EVE,L.KSP.CelestialBody.MUN.parent=L.KSP.CelestialBody.MINMUS.parent=L.KSP.CelestialBody.KERBIN,L.KSP.CelestialBody.IKE.parent=L.KSP.CelestialBody.DUNA,L.KSP.CelestialBody.LAYTHE.parent=L.KSP.CelestialBody.VALL.parent=L.KSP.CelestialBody.TYLO.parent=L.KSP.CelestialBody.BOP.parent=L.KSP.CelestialBody.POL.parent=L.KSP.CelestialBody.JOOL,L.KSP.CelestialBody.ALL_PLANETARY=[L.KSP.CelestialBody.MOHO,L.KSP.CelestialBody.EVE,L.KSP.CelestialBody.KERBIN,L.KSP.CelestialBody.DUNA,L.KSP.CelestialBody.DRES,L.KSP.CelestialBody.JOOL,L.KSP.CelestialBody.EELOO],L.KSP.Map.addInitHook(function(){this.options.layers=[L.KSP.CelestialBody.KERBIN]})}(this,document);var Settings=Class.create({initialize:function(defaultHost,defaultPort){if(!this.getHost()){this.setHost(defaultHost)}if(!this.getPort()){this.setPort(defaultPort)}},getHost:function(){return this.get("host")},getPort:function(){return this.get("port")},setHost:function(value){return this.set("host",value)},setPort:function(value){return this.set("port",value)},get:function(property){return localStorage.getItem(property)},set:function(property,value){return localStorage.setItem(property,value)}});var Telemachus=Class.create({initialize:function(host,port){this.updateConnection(host,port);this.receiverFunctions=[];this.subscribedFields={};this.orbitingBodies=this.getOrbitalBodies();this.rate=500;this.loopTimeout=setTimeout(this.poll.bind(this),this.rate)},url:function(){return"http://"+this.host+":"+this.port+"/telemachus/datalink"},updateConnection:function(host,port){this.host=host;this.port=port},addReceiverFunction:function(func){this.receiverFunctions.push(func)},subscribeToData:function(fields){for(var i=fields.length-1;i>=0;i--){var field=fields[i];this.subscribedFields[field]=field}},dispatchMessages:function(data){for(var i=this.receiverFunctions.length-1;i>=0;i--){try{this.receiverFunctions[i](data)}catch(e){console.error(e)}}},send:function(message){this.socket.send(JSON.stringify(message))},getOrbitalBodyInfo:function(name){var properties=this.orbitingBodies[name];if(properties){return Object.extend({name:name},properties)}else{return null}},notifyIfLOS:function(request){if(request.transport.status==0){document.fire("telemachus:loss-of-signal");return true}return false},prepareParams:function(params){var normalizedParams=[];Object.keys(params).forEach(function(field){var sanitizedFieldName=field.replace("[","{").replace("]","}");normalizedParams.push(sanitizedFieldName+"="+field)});return normalizedParams},convertData:function(rawData){var data={};var startBracesRegexp=/\{/g;var endBracesRegexp=/\}/g;Object.keys(rawData).forEach(function(key){var convertedFieldName=key.replace(startBracesRegexp,"[").replace(endBracesRegexp,"]");data[convertedFieldName]=rawData[key]});return data},poll:function(){var params=this.prepareParams(this.subscribedFields);var requestURL=this.url()+"?"+params.join("&");new Ajax.Request(requestURL,{method:"get",onSuccess:function(response){var rawData=JSON.parse(response.responseText);var data=this.convertData(rawData);this.dispatchMessages(data)}.bind(this),onException:this.notifyIfLOS.bind(this),onComplete:function(response){setTimeout(this.poll.bind(this),this.rate)}.bind(this)})},sendMessage:function(params,callback){new Ajax.Request(this.url(),{method:"post",postBody:JSON.stringify(params),onSuccess:function(response){var rawData=JSON.parse(response.responseText);var data=this.convertData(rawData);callback(data)}.bind(this),onException:this.notifyIfLOS.bind(this)})},getOrbitalBodies:function(){return{Sun:{id:0,referenceBodyName:null,mapBody:null,atmosphericRadius:0,color:"#FFFF00",surfaceGravity:17.1},Kerbin:{id:1,referenceBodyName:"Sun",mapBody:L.KSP.CelestialBody.KERBIN,atmosphericRadius:7e4,color:"#4a5472",surfaceGravity:9.81},Mun:{id:2,referenceBodyName:"Kerbin",mapBody:L.KSP.CelestialBody.MUN,atmosphericRadius:0,color:"#e2e0d7",surfaceGravity:1.63},Minmus:{id:3,referenceBodyName:"Kerbin",mapBody:L.KSP.CelestialBody.MINMUS,color:"#98f2c5",atmosphericRadius:0,surfaceGravity:.491},Moho:{id:4,referenceBodyName:"Sun",mapBody:L.KSP.CelestialBody.MOHO,atmosphericRadius:0,color:"#fdc39e",surfaceGravity:2.7},Eve:{id:5,referenceBodyName:"Sun",mapBody:L.KSP.CelestialBody.EVE,atmosphericRadius:9e4,color:"#c394fe",surfaceGravity:16.7},Duna:{id:6,referenceBodyName:"Sun",mapBody:L.KSP.CelestialBody.DUNA,atmosphericRadius:5e4,color:"#fc5e49",surfaceGravity:2.94},Ike:{id:7,referenceBodyName:"Duna",mapBody:L.KSP.CelestialBody.IKE,atmosphericRadius:0,color:"#e2e0d7",surfaceGravity:1.1},Jool:{id:8,referenceBodyName:"Sun",mapBody:L.KSP.CelestialBody.JOOL,atmosphericRadius:2e5,color:"#C5DCAB",surfaceGravity:7.85},Laythe:{id:9,referenceBodyName:"Jool",mapBody:L.KSP.CelestialBody.LAYTHE,atmosphericRadius:5e4,color:"#a8b4fe",surfaceGravity:7.85},Vall:{id:10,referenceBodyName:"Jool",mapBody:L.KSP.CelestialBody.VALL,atmosphericRadius:0,color:"#b0f4fe",surfaceGravity:2.31},Bop:{id:11,referenceBodyName:"Jool",mapBody:L.KSP.CelestialBody.BOP,atmosphericRadius:0,color:"#c64605",surfaceGravity:.589},Tylo:{id:12,referenceBodyName:"Jool",mapBody:L.KSP.CelestialBody.TYLO,atmosphericRadius:0,color:"#fdf7ed",surfaceGravity:7.85},Gilly:{id:13,referenceBodyName:"Eve",mapBody:L.KSP.CelestialBody.GILLY,atmosphericRadius:0,color:"#fdcbb1",surfaceGravity:.049},Pol:{id:14,referenceBodyName:"Pol",mapBody:L.KSP.CelestialBody.POL,atmosphericRadius:0,color:"#fec681",surfaceGravity:.373},Dres:{id:15,referenceBodyName:"Sun",mapBody:L.KSP.CelestialBody.DRES,atmosphericRadius:0,color:"#fef8f9",surfaceGravity:1.13},Eeloo:{id:16,referenceBodyName:"Sun",mapBody:L.KSP.CelestialBody.EELOO,atmosphericRadius:0,color:"#e5fafe",surfaceGravity:1.69}}}});var TitleBar=Class.create({initialize:function(datalink,title_bar_id){this.datalink=datalink;this.title_bar_id=title_bar_id;this.title_bar=$(this.title_bar_id);this.initializeLOSNotifier();this.initializeDatalink()},update:function(data){window.requestAnimationFrame(function(){this.title_bar.down("#world-clock").update(TimeFormatters.formatUT(data["t.universalTime"]));this.title_bar.down("#mission-time").update(TimeFormatters.formatMET(data["v.missionTime"]));this.title_bar.down("#mission-time").removeClassName("loss-of-signal")}.bind(this))},initializeLOSNotifier:function(){document.observe("telemachus:loss-of-signal",function(){window.requestAnimationFrame(function(){this.title_bar.down("#mission-time").update("⚠ LOS ⚠");this.title_bar.down("#mission-time").addClassName("loss-of-signal")}.bind(this))}.bind(this))},initializeDatalink:function(){this.datalink.subscribeToData(["t.timeWarp","t.universalTime","v.missionTime"]);this.datalink.addReceiverFunction(this.update.bind(this))}});var ButtonIndicator=Class.create({initialize:function(datalink,indicatorId,apiButtonString){this.datalink=datalink;this.indicatorId=indicatorId;this.indicator=$(this.indicatorId);this.apiButtonString=apiButtonString;this.initializeDatalink()},update:function(data){if(data[this.apiButtonString]==true){this.indicator.addClassName("on")}else{this.indicator.removeClassName("on")}},initializeDatalink:function(){this.datalink.subscribeToData([this.apiButtonString]);this.datalink.addReceiverFunction(this.update.bind(this))}});var ReadoutTable=Class.create({initialize:function(datalink,tableId,dataRows){this.datalink=datalink;this.tableId=tableId;this.table=$(this.tableId);this.dataRows=dataRows;this.initializeDatalink()},update:function(data){window.requestAnimationFrame(function(){this.dataRows.forEach(function(row){var rowId=row.label;var tableRow=this.table.down("tr[data-label='"+rowId+"']");if(!tableRow){var tableRow=new Element("tr",{"data-label":rowId});tableRow.insert(""+row.label+"");this.table.insert(tableRow)}tableRow.down("td").update(row.formatter(data[row.value]))}.bind(this))}.bind(this))},initializeDatalink:function(){var dataValues=this.dataRows.map(function(dataRow){return dataRow.value});this.datalink.subscribeToData(dataValues);this.datalink.addReceiverFunction(this.update.bind(this))}});var ResourceMonitor=Class.create({initialize:function(datalink,resourceName,options){this.datalink=datalink;this.resourceName=resourceName;this.options=Object.extend({currentStageProgressBar:null,totalProgressBar:null,valuePrefix:null},options);this.resourceStrings=this.buildResourceStrings();this.initializeDatalink()},update:function(data){window.requestAnimationFrame(function(){if(this.options.totalProgressBar){this.options.totalProgressBar.value=data[this.resourceStrings.totalAvailable];this.options.totalProgressBar.max=data[this.resourceStrings.totalMax]}if(this.options.currentStageProgressBar){this.options.currentStageProgressBar.value=data[this.resourceStrings.currentStageAvailable];this.options.currentStageProgressBar.max=data[this.resourceStrings.currentStageMax]}this.updateValue("-total-value",data[this.resourceStrings.totalAvailable]);this.updateValue("-total-max",data[this.resourceStrings.totalMax]);this.updateValue("-current-stage-value",data[this.resourceStrings.currentStageAvailable]);this.updateValue("-current-stage-max",data[this.resourceStrings.currentStageMax])}.bind(this))},updateValue:function(id,value){if($(this.options.valuePrefix+id)){if(value<0){$(this.options.valuePrefix+id).update("NA")}else{$(this.options.valuePrefix+id).update(value.toFixed(2))}}},buildResourceStrings:function(){return{totalAvailable:"r.resource["+this.resourceName+"]",totalMax:"r.resourceMax["+this.resourceName+"]",currentStageAvailable:"r.resourceCurrent["+this.resourceName+"]",currentStageMax:"r.resourceCurrentMax["+this.resourceName+"]"}},initializeDatalink:function(){this.datalink.subscribeToData([this.resourceStrings.totalAvailable,this.resourceStrings.totalMax,this.resourceStrings.currentStageAvailable,this.resourceStrings.currentStageMax]);this.datalink.addReceiverFunction(this.update.bind(this))}});var DataTable=Class.create({initialize:function(tableID,dataRows){this.tableID=tableID;this.table=$(this.tableID);this.dataRows=dataRows},update:function(){window.requestAnimationFrame(function(){this.dataRows.forEach(function(row){var rowId=row.label;var tableRow=this.table.down("tr[data-label='"+rowId+"']");if(!tableRow){var tableRow=new Element("tr",{"data-label":rowId});tableRow.insert(""+row.label+"");this.table.insert(tableRow)}tableRow.down("td").update(row.value)}.bind(this))}.bind(this))},clear:function(){window.requestAnimationFrame(function(){this.dataRows=[];this.table.innerHTML=""}.bind(this))}});var AtmosphericDensityGauge=Class.create({initialize:function(datalink,gaugeID){this.datalink=datalink;this.gaugeID=gaugeID;this.gauge=$(this.gaugeID);this.initializeDatalink();this.func=function(x){return Math.log(2*x)}},update:function(data){var max=this.func(100);var value=this.func(data["v.atmosphericPressure"]*100);if(!isFinite(value)){value=0}this.gauge.value=value;this.gauge.max=max},initializeDatalink:function(){this.datalink.subscribeToData(["v.atmosphericPressure"]);this.datalink.addReceiverFunction(this.update.bind(this))}});var ThrottleGauge=Class.create({initialize:function(datalink,gaugeID){this.datalink=datalink;this.gaugeID=gaugeID;this.gauge=$(this.gaugeID);this.initializeDatalink()},update:function(data){this.gauge.value=data["f.throttle"]*100;this.gauge.max=100},initializeDatalink:function(){this.datalink.subscribeToData(["f.throttle"]);this.datalink.addReceiverFunction(this.update.bind(this))}});!function(a,b){"function"==typeof define&&define.amd?define([],function(){return a.Chartist=b()}):"object"==typeof exports?module.exports=b():a.Chartist=b()}(this,function(){var a={version:"0.9.4"};return function(a,b,c){"use strict";c.noop=function(a){return a},c.alphaNumerate=function(a){return String.fromCharCode(97+a%26)},c.extend=function(a){a=a||{};var b=Array.prototype.slice.call(arguments,1);return b.forEach(function(b){for(var d in b)"object"!=typeof b[d]||null===b[d]||b[d]instanceof Array?a[d]=b[d]:a[d]=c.extend({},a[d],b[d])}),a},c.replaceAll=function(a,b,c){return a.replace(new RegExp(b,"g"),c)},c.stripUnit=function(a){return"string"==typeof a&&(a=a.replace(/[^0-9\+-\.]/g,"")),+a},c.ensureUnit=function(a,b){return"number"==typeof a&&(a+=b),a},c.querySelector=function(a){return a instanceof Node?a:b.querySelector(a)},c.times=function(a){return Array.apply(null,new Array(a))},c.sum=function(a,b){return a+(b?b:0)},c.mapMultiply=function(a){return function(b){return b*a}},c.mapAdd=function(a){return function(b){return b+a}},c.serialMap=function(a,b){var d=[],e=Math.max.apply(null,a.map(function(a){return a.length}));return c.times(e).forEach(function(c,e){var f=a.map(function(a){return a[e]});d[e]=b.apply(null,f)}),d},c.roundWithPrecision=function(a,b){var d=Math.pow(10,b||c.precision);return Math.round(a*d)/d},c.precision=8,c.escapingMap={"&":"&","<":"<",">":">",'"':""","'":"'"},c.serialize=function(a){return null===a||void 0===a?a:("number"==typeof a?a=""+a:"object"==typeof a&&(a=JSON.stringify({data:a})),Object.keys(c.escapingMap).reduce(function(a,b){return c.replaceAll(a,b,c.escapingMap[b])},a))},c.deserialize=function(a){if("string"!=typeof a)return a;a=Object.keys(c.escapingMap).reduce(function(a,b){return c.replaceAll(a,c.escapingMap[b],b)},a);try{a=JSON.parse(a),a=void 0!==a.data?a.data:a}catch(b){}return a},c.createSvg=function(a,b,d,e){var f;return b=b||"100%",d=d||"100%",Array.prototype.slice.call(a.querySelectorAll("svg")).filter(function(a){return a.getAttributeNS("http://www.w3.org/2000/xmlns/",c.xmlNs.prefix)}).forEach(function(b){a.removeChild(b)}),f=new c.Svg("svg").attr({width:b,height:d}).addClass(e).attr({style:"width: "+b+"; height: "+d+";"}),a.appendChild(f._node),f},c.reverseData=function(a){a.labels.reverse(),a.series.reverse();for(var b=0;bf.high&&(f.high=c),h&&ck,m=e?c.rho(j.range):0;if(e&&c.projectLength(a,1,j)>=d)j.step=1;else if(e&&m=d)j.step=m;else for(;;){if(l&&c.projectLength(a,j.step,j)<=d)j.step*=2;else{if(l||!(c.projectLength(a,j.step/2,j)>=d))break;if(j.step/=2,e&&j.step%1!==0){j.step*=2;break}}if(i++>1e3)throw new Error("Exceeded maximum number of iterations while optimizing scale step!")}for(g=j.min,h=j.max;g+j.step<=j.low;)g+=j.step;for(;h-j.step>=j.high;)h-=j.step;for(j.min=g,j.max=h,j.range=j.max-j.min,j.values=[],f=j.min;f<=j.max;f+=j.step)j.values.push(c.roundWithPrecision(f));return j},c.polarToCartesian=function(a,b,c,d){var e=(d-90)*Math.PI/180;return{x:a+c*Math.cos(e),y:b+c*Math.sin(e)}},c.createChartRect=function(a,b,d){var e=!(!b.axisX&&!b.axisY),f=e?b.axisY.offset:0,g=e?b.axisX.offset:0,h=a.width()||c.stripUnit(b.width)||0,i=a.height()||c.stripUnit(b.height)||0,j=c.normalizePadding(b.chartPadding,d);h=Math.max(h,f+j.left+j.right),i=Math.max(i,g+j.top+j.bottom);var k={padding:j,width:function(){return this.x2-this.x1},height:function(){return this.y1-this.y2}};return e?("start"===b.axisX.position?(k.y2=j.top+g,k.y1=Math.max(i-j.bottom,k.y2+1)):(k.y2=j.top,k.y1=Math.max(i-j.bottom-g,k.y2+1)),"start"===b.axisY.position?(k.x1=j.left+f,k.x2=Math.max(h-j.right,k.x1+1)):(k.x1=j.left,k.x2=Math.max(h-j.right-f,k.x1+1))):(k.x1=j.left,k.x2=Math.max(h-j.right,k.x1+1),k.y2=j.top,k.y1=Math.max(i-j.bottom,k.y2+1)),k},c.createGrid=function(a,b,d,e,f,g,h,i){var j={};j[d.units.pos+"1"]=a,j[d.units.pos+"2"]=a,j[d.counterUnits.pos+"1"]=e,j[d.counterUnits.pos+"2"]=e+f;var k=g.elem("line",j,h.join(" "));i.emit("draw",c.extend({type:"grid",axis:d,index:b,group:g,element:k},j))},c.createLabel=function(a,b,d,e,f,g,h,i,j,k,l){var m,n={};if(n[f.units.pos]=a+h[f.units.pos],n[f.counterUnits.pos]=h[f.counterUnits.pos],n[f.units.len]=b,n[f.counterUnits.len]=g-10,k){var o=''+e[d]+"";m=i.foreignObject(o,c.extend({style:"overflow: visible;"},n))}else m=i.elem("text",n,j.join(" ")).text(e[d]);l.emit("draw",c.extend({type:"label",axis:f,index:d,group:i,element:m,text:e[d]},n))},c.getSeriesOption=function(a,b,c){if(a.name&&b.series&&b.series[a.name]){var d=b.series[a.name];return d.hasOwnProperty(c)?d[c]:b[c]}return b[c]},c.optionsProvider=function(b,d,e){function f(b){var f=h;if(h=c.extend({},j),d)for(i=0;i1){var i=[];return h.forEach(function(a){i.push(g(a.pathCoordinates,a.valueData))}),c.Svg.Path.join(i)}if(a=h[0].pathCoordinates,d=h[0].valueData,a.length<=4)return c.Interpolation.none()(a,d);for(var j,k=(new c.Svg.Path).move(a[0],a[1],!1,d[0]),l=0,m=a.length;m-2*!j>l;l+=2){var n=[{x:+a[l-2],y:+a[l-1]},{x:+a[l],y:+a[l+1]},{x:+a[l+2],y:+a[l+3]},{x:+a[l+4],y:+a[l+5]}];j?l?m-4===l?n[3]={x:+a[0],y:+a[1]}:m-2===l&&(n[2]={x:+a[0],y:+a[1]},n[3]={x:+a[2],y:+a[3]}):n[0]={x:+a[m-2],y:+a[m-1]}:m-4===l?n[3]=n[2]:l||(n[0]={x:+a[l],y:+a[l+1]}),k.curve(e*(-n[0].x+6*n[1].x+n[2].x)/6+f*n[2].x,e*(-n[0].y+6*n[1].y+n[2].y)/6+f*n[2].y,e*(n[1].x+6*n[2].x-n[3].x)/6+f*n[2].x,e*(n[1].y+6*n[2].y-n[3].y)/6+f*n[2].y,n[2].x,n[2].y,!1,d[(l+2)/2])}return k}},c.Interpolation.step=function(a){var b={postpone:!0};return a=c.extend({},b,a),function(b,d){for(var e=new c.Svg.Path,f=!0,g=2;g1}).map(function(a){var b=a.pathElements[0],c=a.pathElements[a.pathElements.length-1];return a.clone(!0).position(0).remove(1).move(b.x,r).line(b.x,b.y).position(a.pathElements.length+1).line(c.x,r)}).forEach(function(h){var k=i.elem("path",{d:h.stringify()},a.classNames.area,!0).attr({values:b.normalized[g]},c.xmlNs.uri);this.eventEmitter.emit("draw",{type:"area",values:b.normalized[g],path:h.clone(),series:f,seriesIndex:g,axisX:d,axisY:e,chartRect:j,index:g,group:i,element:k})}.bind(this))}}.bind(this)),this.eventEmitter.emit("created",{bounds:e.bounds,chartRect:j,axisX:d,axisY:e,svg:this.svg,options:a})}function e(a,b,d,e){c.Line["super"].constructor.call(this,a,b,f,c.extend({},f,d),e)}var f={axisX:{offset:30,position:"end",labelOffset:{x:0,y:0},showLabel:!0,showGrid:!0,labelInterpolationFnc:c.noop,type:void 0},axisY:{offset:40,position:"start",labelOffset:{x:0,y:0},showLabel:!0,showGrid:!0,labelInterpolationFnc:c.noop,type:void 0,scaleMinSpace:20,onlyInteger:!1},width:void 0,height:void 0,showLine:!0,showPoint:!0,showArea:!1,areaBase:0,lineSmooth:!0,low:void 0,high:void 0,chartPadding:{top:15,right:15,bottom:5,left:10},fullWidth:!1,reverseData:!1,classNames:{chart:"ct-chart-line",label:"ct-label",labelGroup:"ct-labels",series:"ct-series",line:"ct-line",point:"ct-point",area:"ct-area",grid:"ct-grid",gridGroup:"ct-grids",vertical:"ct-vertical",horizontal:"ct-horizontal",start:"ct-start",end:"ct-end"}};c.Line=c.Base.extend({constructor:e,createChart:d})}(window,document,a),function(a,b,c){"use strict";function d(a){var b,d={raw:this.data,normalized:a.distributeSeries?c.getDataArray(this.data,a.reverseData,a.horizontalBars?"x":"y").map(function(a){return[a]}):c.getDataArray(this.data,a.reverseData,a.horizontalBars?"x":"y")};this.svg=c.createSvg(this.container,a.width,a.height,a.classNames.chart+(a.horizontalBars?" "+a.classNames.horizontalBars:""));var e=this.svg.elem("g").addClass(a.classNames.gridGroup),g=this.svg.elem("g"),h=this.svg.elem("g").addClass(a.classNames.labelGroup);if(a.stackBars){var i=c.serialMap(d.normalized,function(){return Array.prototype.slice.call(arguments).map(function(a){return a}).reduce(function(a,b){return{x:a.x+b.x||0,y:a.y+b.y||0}},{x:0,y:0})});b=c.getHighLow([i],c.extend({},a,{referenceValue:0}),a.horizontalBars?"x":"y")}else b=c.getHighLow(d.normalized,c.extend({},a,{referenceValue:0}),a.horizontalBars?"x":"y");b.high=+a.high||(0===a.high?0:b.high),b.low=+a.low||(0===a.low?0:b.low);var j,k,l,m,n,o=c.createChartRect(this.svg,a,f.padding);k=a.distributeSeries&&a.stackBars?d.raw.labels.slice(0,1):d.raw.labels,a.horizontalBars?(j=m=void 0===a.axisX.type?new c.AutoScaleAxis(c.Axis.units.x,d,o,c.extend({},a.axisX,{highLow:b,referenceValue:0})):a.axisX.type.call(c,c.Axis.units.x,d,o,c.extend({},a.axisX,{highLow:b,referenceValue:0})),l=n=void 0===a.axisY.type?new c.StepAxis(c.Axis.units.y,d,o,{ticks:k}):a.axisY.type.call(c,c.Axis.units.y,d,o,a.axisY)):(l=m=void 0===a.axisX.type?new c.StepAxis(c.Axis.units.x,d,o,{ticks:k}):a.axisX.type.call(c,c.Axis.units.x,d,o,a.axisX),j=n=void 0===a.axisY.type?new c.AutoScaleAxis(c.Axis.units.y,d,o,c.extend({},a.axisY,{highLow:b,referenceValue:0})):a.axisY.type.call(c,c.Axis.units.y,d,o,c.extend({},a.axisY,{highLow:b,referenceValue:0})));var p=a.horizontalBars?o.x1+j.projectValue(0):o.y1-j.projectValue(0),q=[];l.createGridAndLabels(e,h,this.supportsForeignObject,a,this.eventEmitter),j.createGridAndLabels(e,h,this.supportsForeignObject,a,this.eventEmitter),d.raw.series.forEach(function(b,e){var f,h,i=e-(d.raw.series.length-1)/2;f=a.distributeSeries&&!a.stackBars?l.axisLength/d.normalized.length/2:a.distributeSeries&&a.stackBars?l.axisLength/2:l.axisLength/d.normalized[e].length/2,h=g.elem("g"),h.attr({"series-name":b.name,meta:c.serialize(b.meta)},c.xmlNs.uri),h.addClass([a.classNames.series,b.className||a.classNames.series+"-"+c.alphaNumerate(e)].join(" ")),d.normalized[e].forEach(function(g,k){var r,s,t,u;if(u=a.distributeSeries&&!a.stackBars?e:a.distributeSeries&&a.stackBars?0:k,r=a.horizontalBars?{x:o.x1+j.projectValue(g&&g.x?g.x:0,k,d.normalized[e]),y:o.y1-l.projectValue(g&&g.y?g.y:0,u,d.normalized[e])}:{x:o.x1+l.projectValue(g&&g.x?g.x:0,u,d.normalized[e]),y:o.y1-j.projectValue(g&&g.y?g.y:0,k,d.normalized[e])},l instanceof c.StepAxis&&(l.options.stretch||(r[l.units.pos]+=f*(a.horizontalBars?-1:1)),r[l.units.pos]+=a.stackBars||a.distributeSeries?0:i*a.seriesBarDistance*(a.horizontalBars?-1:1)),t=q[k]||p,q[k]=t-(p-r[l.counterUnits.pos]),void 0!==g){var v={};v[l.units.pos+"1"]=r[l.units.pos],v[l.units.pos+"2"]=r[l.units.pos],v[l.counterUnits.pos+"1"]=a.stackBars?t:p,v[l.counterUnits.pos+"2"]=a.stackBars?q[k]:r[l.counterUnits.pos],v.x1=Math.min(Math.max(v.x1,o.x1),o.x2),v.x2=Math.min(Math.max(v.x2,o.x1),o.x2),v.y1=Math.min(Math.max(v.y1,o.y2),o.y1),v.y2=Math.min(Math.max(v.y2,o.y2),o.y1),s=h.elem("line",v,a.classNames.bar).attr({value:[g.x,g.y].filter(function(a){return a}).join(","),meta:c.getMetaData(b,k)},c.xmlNs.uri),this.eventEmitter.emit("draw",c.extend({type:"bar",value:g,index:k,meta:c.getMetaData(b,k),series:b,seriesIndex:e,axisX:m,axisY:n,chartRect:o,group:h,element:s},v))}}.bind(this))}.bind(this)),this.eventEmitter.emit("created",{bounds:j.bounds,chartRect:o,axisX:m,axisY:n,svg:this.svg,options:a})}function e(a,b,d,e){c.Bar["super"].constructor.call(this,a,b,f,c.extend({},f,d),e)}var f={axisX:{offset:30,position:"end",labelOffset:{x:0,y:0},showLabel:!0,showGrid:!0,labelInterpolationFnc:c.noop,scaleMinSpace:30,onlyInteger:!1},axisY:{offset:40,position:"start",labelOffset:{x:0,y:0},showLabel:!0,showGrid:!0,labelInterpolationFnc:c.noop,scaleMinSpace:20,onlyInteger:!1},width:void 0,height:void 0,high:void 0,low:void 0,onlyInteger:!1,chartPadding:{top:15,right:15,bottom:5,left:10},seriesBarDistance:15,stackBars:!1,horizontalBars:!1,distributeSeries:!1,reverseData:!1,classNames:{chart:"ct-chart-bar",horizontalBars:"ct-horizontal-bars",label:"ct-label",labelGroup:"ct-labels",series:"ct-series",bar:"ct-bar",grid:"ct-grid",gridGroup:"ct-grids",vertical:"ct-vertical",horizontal:"ct-horizontal",start:"ct-start",end:"ct-end"}};c.Bar=c.Base.extend({constructor:e,createChart:d})}(window,document,a),function(a,b,c){"use strict";function d(a,b,c){var d=b.x>a.x;return d&&"explode"===c||!d&&"implode"===c?"start":d&&"implode"===c||!d&&"explode"===c?"end":"middle"}function e(a){var b,e,f,h,i,j=[],k=a.startAngle,l=c.getDataArray(this.data,a.reverseData);this.svg=c.createSvg(this.container,a.width,a.height,a.donut?a.classNames.chartDonut:a.classNames.chartPie),e=c.createChartRect(this.svg,a,g.padding),f=Math.min(e.width()/2,e.height()/2),i=a.total||l.reduce(function(a,b){return a+b},0),f-=a.donut?a.donutWidth/2:0,h="outside"===a.labelPosition||a.donut?f:"center"===a.labelPosition?0:f/2,h+=a.labelOffset;var m={x:e.x1+e.width()/2,y:e.y2+e.height()/2},n=1===this.data.series.filter(function(a){return a.hasOwnProperty("value")?0!==a.value:0!==a}).length;a.showLabel&&(b=this.svg.elem("g",null,null,!0));for(var o=0;o180,0,r.x,r.y);a.donut||t.line(m.x,m.y);var u=j[o].elem("path",{d:t.stringify()},a.donut?a.classNames.sliceDonut:a.classNames.slicePie);if(u.attr({value:l[o],meta:c.serialize(p.meta)},c.xmlNs.uri),a.donut&&u.attr({style:"stroke-width: "+ +a.donutWidth+"px"}),this.eventEmitter.emit("draw",{type:"slice",value:l[o],totalDataSum:i,index:o,meta:p.meta,series:p,group:j[o],element:u,path:t.clone(),center:m,radius:f,startAngle:k,endAngle:q}),a.showLabel){var v=c.polarToCartesian(m.x,m.y,h,k+(q-k)/2),w=a.labelInterpolationFnc(this.data.labels?this.data.labels[o]:l[o],o);if(w||0===w){var x=b.elem("text",{dx:v.x,dy:v.y,"text-anchor":d(m,v,a.labelDirection)},a.classNames.label).text(""+w);this.eventEmitter.emit("draw",{type:"label",index:o,group:b,element:x,text:""+w,x:v.x,y:v.y})}}k=q}this.eventEmitter.emit("created",{chartRect:e,svg:this.svg,options:a})}function f(a,b,d,e){c.Pie["super"].constructor.call(this,a,b,g,c.extend({},g,d),e)}var g={width:void 0,height:void 0,chartPadding:5,classNames:{chartPie:"ct-chart-pie",chartDonut:"ct-chart-donut",series:"ct-series",slicePie:"ct-slice-pie",sliceDonut:"ct-slice-donut",label:"ct-label"},startAngle:0,total:void 0,donut:!1,donutWidth:60,showLabel:!0,labelOffset:0,labelPosition:"inside",labelInterpolationFnc:c.noop,labelDirection:"neutral",reverseData:!1};c.Pie=c.Base.extend({constructor:f,createChart:e,determineAnchorPosition:d})}(window,document,a),a});L.Graticule=L.GeoJSON.extend({options:{style:{color:"#333",weight:1},interval:20},initialize:function(options){L.Util.setOptions(this,options);this._layers={};if(this.options.sphere){this.addData(this._getFrame())}else{this.addData(this._getGraticule())}},_getFrame:function(){return{type:"Polygon",coordinates:[this._getMeridian(-180).concat(this._getMeridian(180).reverse())]}},_getGraticule:function(){var features=[],interval=this.options.interval;for(var lng=0;lng<=180;lng=lng+interval){features.push(this._getFeature(this._getMeridian(lng),{name:lng?lng.toString()+"° E":"Prime meridian"}));if(lng!==0){features.push(this._getFeature(this._getMeridian(-lng),{name:lng.toString()+"° W"}))}}for(var lat=0;lat<=90;lat=lat+interval){features.push(this._getFeature(this._getParallel(lat),{name:lat?lat.toString()+"° N":"Equator"}));if(lat!==0){features.push(this._getFeature(this._getParallel(-lat),{name:lat.toString()+"° S"}))}}return{type:"FeatureCollection",features:features}},_getMeridian:function(lng){lng=this._lngFix(lng);var coords=[];for(var lat=-90;lat<=90;lat++){coords.push([lng,lat])}return coords},_getParallel:function(lat){var coords=[];for(var lng=-180;lng<=180;lng++){coords.push([this._lngFix(lng),lat])}return coords},_getFeature:function(coords,prop){return{type:"Feature",geometry:{type:"LineString",coordinates:coords},properties:prop}},_lngFix:function(lng){if(lng>=180)return 179.999999;if(lng<=-180)return-179.999999;return lng}});L.graticule=function(options){return new L.Graticule(options)};var PositionMap=Class.create({initialize:function(datalink,mapId,options){this.datalink=datalink;this.mapId=mapId;this.noMapIndicatorId=mapId+"-no-map";this.previousBody="KERBIN";this.options=Object.extend({lockOnVessel:true},options);this.initializeMap();this.initializeNoMapIndicator();this.initializeDatalink()},update:function(data){window.requestAnimationFrame(function(){if(this.isMapAvailable(data)){this.showMap();this.updateBodyIfNecessary(data);this.setCoordinatesForMapObject(this.coordinates,data["v.lat"],data["v.long"]);if(this.options.lockOnVessel){this.map.panTo([data["v.lat"],data["v.long"]])}}else{this.hideMap()}}.bind(this))},updateBodyIfNecessary:function(data){var bodyName=data["v.body"].toUpperCase();if(this.previousBody!=bodyName){newBody=L.KSP.CelestialBody[bodyName];newBody.addTo(this.map);this.previousBody=bodyName}},initializeMap:function(){this.map=new L.KSP.Map(this.mapId,{layers:[L.KSP.CelestialBody[this.previousBody.toUpperCase()]],zoom:"fit",bodyControl:false,layerControl:true,scaleControl:true});this.map.fitWorld();L.graticule().addTo(this.map);var circleMarkerOptions={color:"#FD7E23",opacity:1,fillOpacity:1,radius:5};this.coordinates=L.circleMarker([0,0],circleMarkerOptions);this.coordinates.addTo(this.map)},convertCoordinatesToMap:function(latitude,longitude){return[latitude,longitude>180?longitude-360:longitude]},setCoordinatesForMapObject:function(object,latitude,longitude){var convertedCoordinates=this.convertCoordinatesToMap(latitude,longitude);object.setLatLng([convertedCoordinates[0],convertedCoordinates[1]])},isMapAvailable:function(data){return data["v.body"].toUpperCase()!="SUN"},hideMap:function(){$(this.mapId).hide();this.noMapIndicator.removeClassName("hidden")},showMap:function(){$(this.mapId).show();this.noMapIndicator.addClassName("hidden")},initializeNoMapIndicator:function(){this.noMapIndicator=$(this.noMapIndicatorId)},initializeDatalink:function(){this.datalink.subscribeToData(["v.lat","v.long","v.body"]);this.datalink.addReceiverFunction(this.update.bind(this))}});var OrbitalPositionData=Class.create({initialize:function(datalink,options){this.datalink=datalink;this.initializeDatalink();this.timeoutRate=1e3;this.mutexTimestamp=null;this.rootReferenceBody=null;this.options=Object.extend({onRecalculate:null,numberOfSegments:120},options)},isLocked:function(){this.mutexTimestamp&&this.mutexTimestamp<(Date.now()/1e3|0)+this.timeoutRate},mutexLock:function(){this.mutexTimestamp=Date.now()},mutexUnlock:function(){this.mutexTimestamp=null},recalculate:function(data){if(this.isLocked()){return}this.mutexLock();Object.extend(data,{currentUniversalTime:this.adjustUniversalTime(data["t.universalTime"]),vesselBody:data["v.body"],vesselCurrentPosition:{relativePosition:null},targetCurrentPosition:{relativePosition:null}});this.getPositionsAndRecalculate(data)},getPositionsAndRecalculate:function(positionData){var requestParams={};var referenceBody=this.datalink.getOrbitalBodyInfo(positionData["vesselBody"]);this.rootReferenceBody=referenceBody;requestParams["currentReferenceBodyRadius"]="b.radius["+referenceBody.id+"]";requestParams["currentReferenceBodyTruePosition"]="b.o.truePositionAtUT["+referenceBody.id+","+positionData["currentUniversalTime"]+"]";requestParams["vesselCurrentPositionRelativePosition"]="o.relativePositionAtUTForOrbitPatch["+0+","+positionData["currentUniversalTime"]+"]";this.buildRelativePositionRequestsForOrbitPatches(requestParams,"vesselCurrentOrbit",positionData["o.orbitPatches"],positionData["currentUniversalTime"]);this.buildRelativePositionRequestsForManeuverNodeOrbitPatches(requestParams,"vesselManeuverNodes",positionData["o.maneuverNodes"],positionData["currentUniversalTime"]);if(positionData["tar.type"]){if(positionData["tar.o.orbitPatches"]&&positionData["tar.o.orbitPatches"].length>0){this.buildRelativePositionRequestsForOrbitPatches(requestParams,"targetCurrentOrbit",positionData["tar.o.orbitPatches"],positionData["currentUniversalTime"],"tar.o");requestParams["targetCurrentPositionRelativePosition"]="tar.o.relativePositionAtUTForOrbitPatch["+0+","+positionData["currentUniversalTime"]+"]"}else{var body=this.datalink.getOrbitalBodyInfo(positionData["tar.name"]);requestParams[body.name+"[metadata]radius"]="b.radius["+body.id+"]";requestParams[body.name+"["+positionData["currentUniversalTime"]+"]TruePosition"]="b.o.truePositionAtUT["+body.id+","+positionData["currentUniversalTime"]+"]";requestParams[body.name+"[metadata]currentTruePosition"]="b.o.truePositionAtUT["+body.id+","+positionData["currentUniversalTime"]+"]"}}this.datalink.sendMessage(requestParams,function(data){positionData["currentReferenceBodyRadius"]=data["currentReferenceBodyRadius"];positionData["currentReferenceBodyTruePosition"]=data["currentReferenceBodyTruePosition"];this.buildReferenceBodyPositionData(data,positionData);this.buildReferenceBodyMetadata(data,positionData);positionData["vesselCurrentPosition"]["relativePosition"]=data["vesselCurrentPositionRelativePosition"];this.buildRelativePositionPositionDataForOrbitPatches(data,positionData,"vesselCurrentOrbit","o.orbitPatches");if(positionData["o.maneuverNodes"]){this.buildRelativePositionPositionDataForManeuverNodeOrbitPatches(data,positionData,"vesselManeuverNodes","o.maneuverNodes")}if(positionData["tar.o.orbitPatches"]){this.buildRelativePositionPositionDataForOrbitPatches(data,positionData,"targetCurrentOrbit","tar.o.orbitPatches","tar.o");positionData["targetCurrentPosition"]["relativePosition"]=data["targetCurrentPositionRelativePosition"]}this.mutexUnlock();this.options.onRecalculate&&this.options.onRecalculate(positionData)}.bind(this))},buildRelativePositionRequestsForOrbitPatches:function(requestParams,orbitPatchType,orbitPatches,currentUniversalTime,requestPrefix){requestPrefix=requestPrefix||"o";for(var i=0;iendUT){UTForInterval=endUT}requestParams[this.rootReferenceBody.name+"["+UTForInterval+"]TruePosition"]="b.o.truePositionAtUT["+this.rootReferenceBody.id+","+UTForInterval+"]";requestParams[orbitPatchType+"["+i+"]["+UTForInterval+"]RelativePosition"]=requestPrefix+".relativePositionAtUTForOrbitPatch["+i+","+UTForInterval+"]";requestParams[orbitPatch["referenceBody"]+"["+UTForInterval+"]TruePosition"]="b.o.truePositionAtUT["+referenceBody.id+","+UTForInterval+"]"}requestParams[orbitPatch["referenceBody"]+"[metadata]radius"]="b.radius["+referenceBody.id+"]";requestParams[orbitPatch["referenceBody"]+"[metadata]currentTruePosition"]="b.o.truePositionAtUT["+referenceBody.id+","+currentUniversalTime+"]"}},buildRelativePositionRequestsForManeuverNodeOrbitPatches:function(requestParams,maneuverNodeType,maneuverNodes,currentUniversalTime){var requestPrefix="o.maneuverNodes.relativePositionAtUTForManeuverNodesOrbitPatch";for(var i=0;iendUT){UTForInterval=endUT; +Math.cosh = Math.cosh || function(x) { + return (Math.exp(x) + Math.exp(-x)) / 2; +} -}var args=[i,j,UTForInterval];requestParams[this.rootReferenceBody.name+"["+UTForInterval+"]TruePosition"]="b.o.truePositionAtUT["+this.rootReferenceBody.id+","+UTForInterval+"]";requestParams[labelPrefix+"["+j+"]["+UTForInterval+"]RelativePosition"]=requestPrefix+"["+args.join(",")+"]";requestParams[orbitPatch["referenceBody"]+"["+UTForInterval+"]TruePosition"]="b.o.truePositionAtUT["+referenceBody.id+","+UTForInterval+"]"}requestParams[orbitPatch["referenceBody"]+"[metadata]radius"]="b.radius["+referenceBody.id+"]";requestParams[orbitPatch["referenceBody"]+"[metadata]currentTruePosition"]="b.o.truePositionAtUT["+referenceBody.id+","+currentUniversalTime+"]"}}},buildRelativePositionPositionDataForOrbitPatches:function(rawData,positionData,orbitPatchType,orbitPatchesKey){var relativePositionFieldRegex=new RegExp(orbitPatchType+"\\[(\\d+)\\]\\[([\\d\\.]+)\\]RelativePosition");var orbitPatches=positionData[orbitPatchesKey]=positionData[orbitPatchesKey]||{};var rawDataKeys=Object.keys(rawData);for(var i=rawDataKeys.length-1;i>=0;i--){var key=rawDataKeys[i];if(relativePositionFieldRegex.test(key)){var matchParts=relativePositionFieldRegex.exec(key);var orbitPatchIndex=parseInt(matchParts[1]);var universalTime=matchParts[2];var relativePosition=rawData[key];var orbitPatch=orbitPatches[orbitPatchIndex]=orbitPatches[orbitPatchIndex]||{};var orbitPatchPositionData=orbitPatch["positionData"]=orbitPatch["positionData"]||{};orbitPatchPositionData[universalTime]=orbitPatchPositionData[universalTime]||{};orbitPatchPositionData[universalTime]["relativePosition"]=relativePosition}}},buildRelativePositionPositionDataForManeuverNodeOrbitPatches:function(rawData,positionData,maneuverNodeType,maneuverNodesKey){var relativePositionFieldRegex=new RegExp(maneuverNodeType+"\\[(\\d+)\\]\\[(\\d+)\\]\\[([\\d\\.]+)\\]RelativePosition");var maneuverNodes=positionData[maneuverNodesKey]=positionData[maneuverNodesKey]||{};var rawDataKeys=Object.keys(rawData);for(var i=rawDataKeys.length-1;i>=0;i--){var key=rawDataKeys[i];if(relativePositionFieldRegex.test(key)){var matchParts=relativePositionFieldRegex.exec(key);var maneuverNodeIndex=parseInt(matchParts[1]);var orbitPatchIndex=parseInt(matchParts[2]);var universalTime=matchParts[3];var relativePosition=rawData[key];var orbitPatch=maneuverNodes[maneuverNodeIndex]["orbitPatches"][orbitPatchIndex]=maneuverNodes[maneuverNodeIndex]["orbitPatches"][orbitPatchIndex]||{};var orbitPatchPositionData=orbitPatch["positionData"]=orbitPatch["positionData"]||{};orbitPatchPositionData[universalTime]=orbitPatchPositionData[universalTime]||{};orbitPatchPositionData[universalTime]["relativePosition"]=relativePosition}}},buildReferenceBodyPositionData:function(rawData,positionData){var referenceBodyTruePositionRegex=new RegExp(/(\w+)\[([\d\.]+)\]TruePosition$/);var rawDataKeys=Object.keys(rawData);for(var i=rawDataKeys.length-1;i>=0;i--){var key=rawDataKeys[i];if(referenceBodyTruePositionRegex.test(key)){var matchParts=referenceBodyTruePositionRegex.exec(key);var referenceBodyName=matchParts[1];var universalTime=matchParts[2];var truePosition=rawData[key];var referenceBodies=positionData["referenceBodies"]=positionData["referenceBodies"]||{};var referenceBodyObject=referenceBodies[referenceBodyName]=referenceBodies[referenceBodyName]||{};referenceBodyObject["positionData"]=referenceBodyObject["positionData"]||{};referenceBodyObject["positionData"][universalTime]=referenceBodyObject["positionData"][universalTime]||{};referenceBodyObject["positionData"][universalTime]["truePosition"]=truePosition}}},buildReferenceBodyMetadata:function(rawData,positionData){var referenceBodyTruePositionRegex=new RegExp(/(\w+)\[metadata\](\w+)$/);var rawDataKeys=Object.keys(rawData);for(var i=rawDataKeys.length-1;i>=0;i--){var key=rawDataKeys[i];if(referenceBodyTruePositionRegex.test(key)){var matchParts=referenceBodyTruePositionRegex.exec(key);var referenceBodyName=matchParts[1];var field=matchParts[2];var data=rawData[key];var referenceBodies=positionData["referenceBodies"]=positionData["referenceBodies"]||{};var referenceBodyObject=referenceBodies[referenceBodyName]=referenceBodies[referenceBodyName]||{};referenceBodyObject[field]=data}}},adjustUniversalTime:function(ut){return ut},initializeDatalink:function(){this.datalink.subscribeToData(["o.orbitPatches","t.universalTime","v.body","tar.name","tar.type","tar.o.orbitingBody","tar.o.orbitPatches","o.maneuverNodes"]);this.datalink.addReceiverFunction(this.recalculate.bind(this))}});var GroundTrackPositionDataFormatter=Class.create({initialize:function(orbitalPositionData,datalink,options){this.datalink=datalink;this.orbitalPositionData=orbitalPositionData;this.orbitalPositionData.options.onRecalculate=this.format.bind(this);this.rootReferenceBodyName=null;this.currentUniversalTime=null;this.options=Object.extend({onFormat:null,numberOfSegments:120},options)},format:function(positionData){var formattedData={vesselCurrentCoordinates:null,targetCurrentCoordinates:null,vesselSuborbitalPaths:[],vesselOrbitalPaths:[],targetSuborbitalPaths:[],targetOrbitalPaths:[],currentUniversalTime:positionData.currentUniversalTime,referenceBodyName:positionData.vesselBody,atmosphericRadius:this.datalink.getOrbitalBodyInfo(positionData.vesselBody).atmosphericRadius};this.currentUniversalTime=positionData.currentUniversalTime;this.formatVesselCurrentCoordinates(positionData,formattedData);this.formatTargetCurrentCoordinates(positionData,formattedData);this.formatVesselOrbitalPaths(positionData,formattedData);this.formatTargetOrbitalPaths(positionData,formattedData);this.options.onFormat&&this.options.onFormat(formattedData)},formatVesselCurrentCoordinates:function(positionData,formattedData){this.rootReferenceBodyName=positionData["vesselBody"];var currentPosition=positionData["vesselCurrentPosition"]["relativePosition"];var info=this.rootReferenceBody(positionData);formattedData.vesselCurrentCoordinates=this.coordinatesFromVector(currentPosition,info.radius)},formatTargetCurrentCoordinates:function(positionData,formattedData){if(this.rootReferenceBodyName!=positionData["tar.o.orbitingBody"]){return}if(positionData["tar.type"]!="Vessel"){return}var currentPosition=positionData["targetCurrentPosition"]["relativePosition"];var info=this.rootReferenceBody(positionData);formattedData.targetCurrentCoordinates=this.coordinatesFromVector(currentPosition,info.radius)},formatVesselOrbitalPaths:function(positionData,formattedData){var parentType="currentVessel";var orbitPatches=positionData["o.orbitPatches"];var pathSet=this.formatPathSet(positionData,orbitPatches,parentType,"orbitPath");formattedData.vesselOrbitalPaths=formattedData.vesselOrbitalPaths.concat(pathSet.filter(function(x){return x.type=="orbital"}));formattedData.vesselSuborbitalPaths=formattedData.vesselSuborbitalPaths.concat(pathSet.filter(function(x){return x.type=="suborbital"}));this.formatManeuverNodes(positionData,formattedData,positionData["o.maneuverNodes"],parentType)},formatTargetOrbitalPaths:function(positionData,formattedData){if(positionData["tar.type"]!="Vessel"){return}var parentType="targetVessel";var orbitPatches=positionData["tar.o.orbitPatches"];var pathSet=this.formatPathSet(positionData,orbitPatches,parentType,"orbitPath");formattedData.targetOrbitalPaths=pathSet.filter(function(x){return x.type=="orbital"});formattedData.targetSuborbitalPaths=pathSet.filter(function(x){return x.type=="suborbital"})},formatManeuverNodes:function(positionData,formattedData,maneuverNodes,parentType){for(var i=0;iorbitalClearanceDistance){var type="orbital"}else{var type="suborbital"}if(type!=currentPathType){currentPathSet=this.buildOrbitPath({type:type,parentType:parentType,pathType:pathType,points:[],altitudes:[]});pathSets.push(currentPathSet)}currentPathSet.points.push(coordinates);currentPathSet.altitudes.push({time:sortedUniversalTimes[j],altitude:length-info.radius});currentPathType=type}}return pathSets},buildOrbitPath:function(options){return{type:options.type,pathType:options.pathType,parentType:options.parentType,points:options.points,altitudes:options.altitudes}},vectorLength:function(vector){return Math.sqrt(Math.pow(vector[0],2)+Math.pow(vector[1],2)+Math.pow(vector[2],2))},coordinatesFromVector:function(vector,radius){var x=vector[0];var y=vector[1];var z=vector[2];var lat=90-Math.acos(z/radius)*180/Math.PI;var lon=(270+Math.atan2(x,y)*180/Math.PI)%360-180;if(!isNaN(lat)&&!isNaN(lon)){return[lat,lon]}else{return[]}},sortedUniversalTimes:function(positionData){var positionDataKeys=Object.keys(positionData);return positionDataKeys.map(function(x){return parseFloat(x)}).sortBy(function(x){x}).reverse()},orbitalClearanceDistance:function(positionData){return this.rootReferenceBody(positionData).radius+this.datalink.getOrbitalBodyInfo(this.rootReferenceBodyName).atmosphericRadius},rootReferenceBody:function(positionData){return positionData.referenceBodies[this.rootReferenceBodyName]}});var GroundTrack=Class.create({initialize:function(datalink,positionDataFormatter,map_id,altitudeEstimationId){this.datalink=datalink;this.positionDataFormatter=positionDataFormatter;this.map_id=map_id;this.altitudeEstimationId=altitudeEstimationId;this.vesselColor="#F5A623";this.vesselSuborbitalColor="red";this.maneuverNodeColor="#b4f489";this.targetColor="#987cf9";this.targetSuborbitalColor="#f97292";this.initializeAltitudeEstimate();this.initializeMap();this.positionDataFormatter.options.onFormat=this.render.bind(this)},render:function(formattedData){this.renderVesselCurrentCoordinates(formattedData);this.renderTargetCurrentCoordinates(formattedData);this.renderVesselOrbitPaths(formattedData);this.renderTargetOrbitPaths(formattedData);this.updateAltitudeEstimateChart(formattedData)},renderVesselCurrentCoordinates:function(formattedData){var coordinates=formattedData.vesselCurrentCoordinates;if(!coordinates){return}this.positionMap.setCoordinatesForMapObject(this.markers.vesselCoordinates,coordinates[0],coordinates[1])},renderTargetCurrentCoordinates:function(formattedData){var coordinates=formattedData.targetCurrentCoordinates;if(!coordinates){return}this.positionMap.setCoordinatesForMapObject(this.markers.targetCoordinates,coordinates[0],coordinates[1])},renderVesselOrbitPaths:function(formattedData){this.renderOrbitPaths(this.markers.vesselOrbitalPaths,formattedData.vesselOrbitalPaths,{color:this.vesselColor});this.renderOrbitPaths(this.markers.vesselSuborbitalPaths,formattedData.vesselSuborbitalPaths,{color:this.vesselSuborbitalColor})},renderTargetOrbitPaths:function(formattedData){this.renderOrbitPaths(this.markers.targetOrbitalPaths,formattedData.targetOrbitalPaths,{color:this.targetColor});this.renderOrbitPaths(this.markers.targetSuborbitalPaths,formattedData.targetSuborbitalPaths,{color:this.targetSuborbitalColor})},renderOrbitPaths:function(markers,orbitPaths,lineOptions){for(var i=markers.length-1;i>=0;i--){markers[i].setLatLngs([])}for(var i=0;i0){var startTime=parseFloat(sortedUniversalTimes.first());var endTime=parseFloat(sortedUniversalTimes.last());var totalDelta=sortedUniversalTimes.length;var intervalPeriod=Math.floor(totalDelta/maxLabelSections)}for(var i=0;i0){var startTime=parseFloat(sortedUniversalTimes[0])}for(var i=0;i-1?e(a,b,c):b.indexOf("%")>-1?f(a,b,c):b.indexOf(":")>-1?g(a,b):i(a._value,b,c)}function d(a,b){var c,d,e,f,g,i=b,j=["KB","MB","GB","TB","PB","EB","ZB","YB"],k=!1;if(b.indexOf(":")>-1)a._value=h(b);else if(b===q)a._value=0;else{for("."!==o[p].delimiters.decimal&&(b=b.replace(/\./g,"").replace(o[p].delimiters.decimal,".")),c=new RegExp("[^a-zA-Z]"+o[p].abbreviations.thousand+"(?:\\)|(\\"+o[p].currency.symbol+")?(?:\\))?)?$"),d=new RegExp("[^a-zA-Z]"+o[p].abbreviations.million+"(?:\\)|(\\"+o[p].currency.symbol+")?(?:\\))?)?$"),e=new RegExp("[^a-zA-Z]"+o[p].abbreviations.billion+"(?:\\)|(\\"+o[p].currency.symbol+")?(?:\\))?)?$"),f=new RegExp("[^a-zA-Z]"+o[p].abbreviations.trillion+"(?:\\)|(\\"+o[p].currency.symbol+")?(?:\\))?)?$"),g=0;g<=j.length&&!(k=b.indexOf(j[g])>-1?Math.pow(1024,g+1):!1);g++);a._value=(k?k:1)*(i.match(c)?Math.pow(10,3):1)*(i.match(d)?Math.pow(10,6):1)*(i.match(e)?Math.pow(10,9):1)*(i.match(f)?Math.pow(10,12):1)*(b.indexOf("%")>-1?.01:1)*((b.split("-").length+Math.min(b.split("(").length-1,b.split(")").length-1))%2?1:-1)*Number(b.replace(/[^0-9\.]+/g,"")),a._value=k?Math.ceil(a._value):a._value}return a._value}function e(a,b,c){var d,e,f=b.indexOf("$"),g=b.indexOf("("),h=b.indexOf("-"),j="";return b.indexOf(" $")>-1?(j=" ",b=b.replace(" $","")):b.indexOf("$ ")>-1?(j=" ",b=b.replace("$ ","")):b=b.replace("$",""),e=i(a._value,b,c),1>=f?e.indexOf("(")>-1||e.indexOf("-")>-1?(e=e.split(""),d=1,(g>f||h>f)&&(d=0),e.splice(d,0,o[p].currency.symbol+j),e=e.join("")):e=o[p].currency.symbol+j+e:e.indexOf(")")>-1?(e=e.split(""),e.splice(-1,0,j+o[p].currency.symbol),e=e.join("")):e=e+j+o[p].currency.symbol,e}function f(a,b,c){var d,e="",f=100*a._value;return b.indexOf(" %")>-1?(e=" ",b=b.replace(" %","")):b=b.replace("%",""),d=i(f,b,c),d.indexOf(")")>-1?(d=d.split(""),d.splice(-1,0,e+"%"),d=d.join("")):d=d+e+"%",d}function g(a){var b=Math.floor(a._value/60/60),c=Math.floor((a._value-60*b*60)/60),d=Math.round(a._value-60*b*60-60*c);return b+":"+(10>c?"0"+c:c)+":"+(10>d?"0"+d:d)}function h(a){var b=a.split(":"),c=0;return 3===b.length?(c+=60*Number(b[0])*60,c+=60*Number(b[1]),c+=Number(b[2])):2===b.length&&(c+=60*Number(b[0]),c+=Number(b[1])),Number(c)}function i(a,c,d){var e,f,g,h,i,j,k=!1,l=!1,m=!1,n="",r=!1,s=!1,t=!1,u=!1,v=!1,w="",x="",y=Math.abs(a),z=["B","KB","MB","GB","TB","PB","EB","ZB","YB"],A="",B=!1;if(0===a&&null!==q)return q;if(c.indexOf("(")>-1?(k=!0,c=c.slice(1,-1)):c.indexOf("+")>-1&&(l=!0,c=c.replace(/\+/g,"")),c.indexOf("a")>-1&&(r=c.indexOf("aK")>=0,s=c.indexOf("aM")>=0,t=c.indexOf("aB")>=0,u=c.indexOf("aT")>=0,v=r||s||t||u,c.indexOf(" a")>-1?(n=" ",c=c.replace(" a","")):c=c.replace("a",""),y>=Math.pow(10,12)&&!v||u?(n+=o[p].abbreviations.trillion,a/=Math.pow(10,12)):y=Math.pow(10,9)&&!v||t?(n+=o[p].abbreviations.billion,a/=Math.pow(10,9)):y=Math.pow(10,6)&&!v||s?(n+=o[p].abbreviations.million,a/=Math.pow(10,6)):(y=Math.pow(10,3)&&!v||r)&&(n+=o[p].abbreviations.thousand,a/=Math.pow(10,3))),c.indexOf("b")>-1)for(c.indexOf(" b")>-1?(w=" ",c=c.replace(" b","")):c=c.replace("b",""),g=0;g<=z.length;g++)if(e=Math.pow(1024,g),f=Math.pow(1024,g+1),a>=e&&f>a){w+=z[g],e>0&&(a/=e);break}return c.indexOf("o")>-1&&(c.indexOf(" o")>-1?(x=" ",c=c.replace(" o","")):c=c.replace("o",""),x+=o[p].ordinal(a)),c.indexOf("[.]")>-1&&(m=!0,c=c.replace("[.]",".")),h=a.toString().split(".")[0],i=c.split(".")[1],j=c.indexOf(","),i?(i.indexOf("[")>-1?(i=i.replace("]",""),i=i.split("["),A=b(a,i[0].length+i[1].length,d,i[1].length)):A=b(a,i.length,d),h=A.split(".")[0],A=A.split(".")[1].length?o[p].delimiters.decimal+A.split(".")[1]:"",m&&0===Number(A.slice(1))&&(A="")):h=b(a,null,d),h.indexOf("-")>-1&&(h=h.slice(1),B=!0),j>-1&&(h=h.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g,"$1"+o[p].delimiters.thousands)),0===c.indexOf(".")&&(h=""),(k&&B?"(":"")+(!k&&B?"-":"")+(!B&&l?"+":"")+h+A+(x?x:"")+(n?n:"")+(w?w:"")+(k&&B?")":"")}function j(a,b){o[a]=b}function k(a){var b=a.toString().split(".");return b.length<2?1:Math.pow(10,b[1].length)}function l(){var a=Array.prototype.slice.call(arguments);return a.reduce(function(a,b){var c=k(a),d=k(b);return c>d?c:d},-1/0)}var m,n="1.5.3",o={},p="en",q=null,r="0,0",s="undefined"!=typeof module&&module.exports;m=function(b){return m.isNumeral(b)?b=b.value():0===b||"undefined"==typeof b?b=0:Number(b)||(b=m.fn.unformat(b)),new a(Number(b))},m.version=n,m.isNumeral=function(b){return b instanceof a},m.language=function(a,b){if(!a)return p;if(a&&!b){if(!o[a])throw new Error("Unknown language : "+a);p=a}return(b||!o[a])&&j(a,b),m},m.languageData=function(a){if(!a)return o[p];if(!o[a])throw new Error("Unknown language : "+a);return o[a]},m.language("en",{delimiters:{thousands:",",decimal:"."},abbreviations:{thousand:"k",million:"m",billion:"b",trillion:"t"},ordinal:function(a){var b=a%10;return 1===~~(a%100/10)?"th":1===b?"st":2===b?"nd":3===b?"rd":"th"},currency:{symbol:"$"}}),m.zeroFormat=function(a){q="string"==typeof a?a:null},m.defaultFormat=function(a){r="string"==typeof a?a:"0.0"},"function"!=typeof Array.prototype.reduce&&(Array.prototype.reduce=function(a,b){"use strict";if(null===this||"undefined"==typeof this)throw new TypeError("Array.prototype.reduce called on null or undefined");if("function"!=typeof a)throw new TypeError(a+" is not a function");var c,d,e=this.length>>>0,f=!1;for(1c;++c)this.hasOwnProperty(c)&&(f?d=a(d,this[c],c,this):(d=this[c],f=!0));if(!f)throw new TypeError("Reduce of empty array with no initial value");return d}),m.fn=a.prototype={clone:function(){return m(this)},format:function(a,b){return c(this,a?a:r,void 0!==b?b:Math.round)},unformat:function(a){return"[object Number]"===Object.prototype.toString.call(a)?a:d(this,a?a:r)},value:function(){return this._value},valueOf:function(){return this._value},set:function(a){return this._value=Number(a),this},add:function(a){function b(a,b){return a+c*b}var c=l.call(null,this._value,a);return this._value=[this._value,a].reduce(b,0)/c,this},subtract:function(a){function b(a,b){return a-c*b}var c=l.call(null,this._value,a);return this._value=[a].reduce(b,this._value*c)/c,this},multiply:function(a){function b(a,b){var c=l(a,b);return a*c*b*c/(c*c)}return this._value=[this._value,a].reduce(b,1),this},divide:function(a){function b(a,b){var c=l(a,b);return a*c/(b*c)}return this._value=[this._value,a].reduce(b),this},difference:function(a){return Math.abs(m(this._value).subtract(a).value())}},s&&(module.exports=m),"undefined"==typeof ender&&(this.numeral=m),"function"==typeof define&&define.amd&&define([],function(){return m})}).call(this); +// Extracted Richard Bunt's work in Telemachus: https://github.com/richardbunt/Telemachus/blob/master/WebPages/WebPages/src/console.js + +var TimeFormatters = { + formatUT: function(t){ + var day, year; + if (t == null) { + t = 0; + } + year = ((t / (365 * 24 * 3600)) | 0) + 1; + t %= 365 * 24 * 3600; + day = ((t / (24 * 3600)) | 0) + 1; + t %= 24 * 3600; + return "Year " + year + ", Day " + day + ", " + (this.hourMinSec(t)) + " UT"; + }, + + formatMET: function(t){ + var result; + if (t == null) { + t = 0; + } + result = "T+"; + if (t >= 365 * 24 * 3600) { + result += (t / (365 * 24 * 3600) | 0) + ":"; + t %= 365 * 24 * 3600; + if (t < 24 * 3600) { + result += "0:"; + } + } + if (t >= 24 * 3600) { + result += (t / (24 * 3600) | 0) + ":"; + } + t %= 24 * 3600; + return result + this.hourMinSec(t) + " MET"; + }, + + hourMinSec: function(t) { + var hour, min, sec; + if (t == null) { + t = 0; + } + hour = (t / 3600) | 0; + if (hour < 10) { + hour = "0" + hour; + } + t %= 3600; + min = (t / 60) | 0; + if (min < 10) { + min = "0" + min; + } + sec = (t % 60 | 0).toFixed(); + if (sec < 10) { + sec = "0" + sec; + } + return "" + hour + ":" + min + ":" + sec; + }, + + durationString: function(t) { + var result; + if (t == null) { + t = 0; + } + result = t < 0 ? "-" : ""; + t = Math.abs(t); + if (t >= 365 * 24 * 3600) { + result += (t / (365 * 24 * 3600) | 0) + " years "; + t %= 365 * 24 * 3600; + if (t < 24 * 3600) { + result += "0 days "; + } + } + if (t >= 24 * 3600) { + result += (t / (24 * 3600) | 0) + " days "; + } + t %= 24 * 3600; + return result + this.hourMinSec(t); + } +} +var DataFormatters = { + distanceString: function(value){ + return numeral(value).format('0,0.000 a') + "m" + }, + + heightFromTerrainString: function(value){ + if(value <= -1 ){ return "NA" } + return numeral(value).format('0,0.000 a') + "m" + }, + + degreeString: function(value){ + return numeral(value).format('0.000') + "°" + }, + + velocityString: function(value){ + return numeral(value).format('0,0.000 a') + "m/s" + }, + + temperatureString: function(value){ + if(!value){return "NA"} + return numeral(value).format('0,000') + "°C" + }, + + accelerationSensorString: function(value){ + if(value[0] == "No Sensors of the Appropriate Type"){return "NA"} + return numeral(value[1][0]).format('0,000') + "G" + }, + + pressureSensorString: function(value){ + if(value[0] == "No Sensors of the Appropriate Type"){return "NA"} + return numeral(value[1][0]).format('0,000') + "Pa" + }, + + gravitySensorString: function(value){ + if(value[0] == "No Sensors of the Appropriate Type"){return "NA"} + return numeral(value[1][0]).format('0,000 a') + "m/s²" + }, + + newtonsString: function(value){ + return numeral(value).format('0,0.00') + " N" + }, + + percentageString: function(value){ + return numeral(value).format("0%") + }, + + tonnageString: function(value){ + return numeral(value).format("0,0.00") + " t" + }, + + timeString: function(value){ + return numeral(value).format('00:00:00') + }, + + plainNumberString: function(value){ + return numeral(value).format("0,0.00") + } +} +/* Prototype JavaScript framework, version 1.7.2 + * (c) 2005-2010 Sam Stephenson + * + * Prototype is freely distributable under the terms of an MIT-style license. + * For details, see the Prototype web site: http://www.prototypejs.org/ + * + *--------------------------------------------------------------------------*/ + +var Prototype = { + + Version: '1.7.2', + + Browser: (function(){ + var ua = navigator.userAgent; + var isOpera = Object.prototype.toString.call(window.opera) == '[object Opera]'; + return { + IE: !!window.attachEvent && !isOpera, + Opera: isOpera, + WebKit: ua.indexOf('AppleWebKit/') > -1, + Gecko: ua.indexOf('Gecko') > -1 && ua.indexOf('KHTML') === -1, + MobileSafari: /Apple.*Mobile/.test(ua) + } + })(), + + BrowserFeatures: { + XPath: !!document.evaluate, + + SelectorsAPI: !!document.querySelector, + + ElementExtensions: (function() { + var constructor = window.Element || window.HTMLElement; + return !!(constructor && constructor.prototype); + })(), + SpecificElementExtensions: (function() { + if (typeof window.HTMLDivElement !== 'undefined') + return true; + + var div = document.createElement('div'), + form = document.createElement('form'), + isSupported = false; + + if (div['__proto__'] && (div['__proto__'] !== form['__proto__'])) { + isSupported = true; + } + + div = form = null; + + return isSupported; + })() + }, + + ScriptFragment: ']*>([\\S\\s]*?)<\/script\\s*>', + JSONFilter: /^\/\*-secure-([\s\S]*)\*\/\s*$/, + + emptyFunction: function() { }, + + K: function(x) { return x } +}; + +if (Prototype.Browser.MobileSafari) + Prototype.BrowserFeatures.SpecificElementExtensions = false; +/* Based on Alex Arnell's inheritance implementation. */ + +var Class = (function() { + + var IS_DONTENUM_BUGGY = (function(){ + for (var p in { toString: 1 }) { + if (p === 'toString') return false; + } + return true; + })(); + + function subclass() {}; + function create() { + var parent = null, properties = $A(arguments); + if (Object.isFunction(properties[0])) + parent = properties.shift(); + + function klass() { + this.initialize.apply(this, arguments); + } + + Object.extend(klass, Class.Methods); + klass.superclass = parent; + klass.subclasses = []; + + if (parent) { + subclass.prototype = parent.prototype; + klass.prototype = new subclass; + parent.subclasses.push(klass); + } + + for (var i = 0, length = properties.length; i < length; i++) + klass.addMethods(properties[i]); + + if (!klass.prototype.initialize) + klass.prototype.initialize = Prototype.emptyFunction; + + klass.prototype.constructor = klass; + return klass; + } + + function addMethods(source) { + var ancestor = this.superclass && this.superclass.prototype, + properties = Object.keys(source); + + if (IS_DONTENUM_BUGGY) { + if (source.toString != Object.prototype.toString) + properties.push("toString"); + if (source.valueOf != Object.prototype.valueOf) + properties.push("valueOf"); + } + + for (var i = 0, length = properties.length; i < length; i++) { + var property = properties[i], value = source[property]; + if (ancestor && Object.isFunction(value) && + value.argumentNames()[0] == "$super") { + var method = value; + value = (function(m) { + return function() { return ancestor[m].apply(this, arguments); }; + })(property).wrap(method); + + value.valueOf = (function(method) { + return function() { return method.valueOf.call(method); }; + })(method); + + value.toString = (function(method) { + return function() { return method.toString.call(method); }; + })(method); + } + this.prototype[property] = value; + } + + return this; + } + + return { + create: create, + Methods: { + addMethods: addMethods + } + }; +})(); +(function() { + + var _toString = Object.prototype.toString, + _hasOwnProperty = Object.prototype.hasOwnProperty, + NULL_TYPE = 'Null', + UNDEFINED_TYPE = 'Undefined', + BOOLEAN_TYPE = 'Boolean', + NUMBER_TYPE = 'Number', + STRING_TYPE = 'String', + OBJECT_TYPE = 'Object', + FUNCTION_CLASS = '[object Function]', + BOOLEAN_CLASS = '[object Boolean]', + NUMBER_CLASS = '[object Number]', + STRING_CLASS = '[object String]', + ARRAY_CLASS = '[object Array]', + DATE_CLASS = '[object Date]', + NATIVE_JSON_STRINGIFY_SUPPORT = window.JSON && + typeof JSON.stringify === 'function' && + JSON.stringify(0) === '0' && + typeof JSON.stringify(Prototype.K) === 'undefined'; + + + + var DONT_ENUMS = ['toString', 'toLocaleString', 'valueOf', + 'hasOwnProperty', 'isPrototypeOf', 'propertyIsEnumerable', 'constructor']; + + var IS_DONTENUM_BUGGY = (function(){ + for (var p in { toString: 1 }) { + if (p === 'toString') return false; + } + return true; + })(); + + function Type(o) { + switch(o) { + case null: return NULL_TYPE; + case (void 0): return UNDEFINED_TYPE; + } + var type = typeof o; + switch(type) { + case 'boolean': return BOOLEAN_TYPE; + case 'number': return NUMBER_TYPE; + case 'string': return STRING_TYPE; + } + return OBJECT_TYPE; + } + + function extend(destination, source) { + for (var property in source) + destination[property] = source[property]; + return destination; + } + + function inspect(object) { + try { + if (isUndefined(object)) return 'undefined'; + if (object === null) return 'null'; + return object.inspect ? object.inspect() : String(object); + } catch (e) { + if (e instanceof RangeError) return '...'; + throw e; + } + } + + function toJSON(value) { + return Str('', { '': value }, []); + } + + function Str(key, holder, stack) { + var value = holder[key]; + if (Type(value) === OBJECT_TYPE && typeof value.toJSON === 'function') { + value = value.toJSON(key); + } + + var _class = _toString.call(value); + + switch (_class) { + case NUMBER_CLASS: + case BOOLEAN_CLASS: + case STRING_CLASS: + value = value.valueOf(); + } + + switch (value) { + case null: return 'null'; + case true: return 'true'; + case false: return 'false'; + } + + var type = typeof value; + switch (type) { + case 'string': + return value.inspect(true); + case 'number': + return isFinite(value) ? String(value) : 'null'; + case 'object': + + for (var i = 0, length = stack.length; i < length; i++) { + if (stack[i] === value) { + throw new TypeError("Cyclic reference to '" + value + "' in object"); + } + } + stack.push(value); + + var partial = []; + if (_class === ARRAY_CLASS) { + for (var i = 0, length = value.length; i < length; i++) { + var str = Str(i, value, stack); + partial.push(typeof str === 'undefined' ? 'null' : str); + } + partial = '[' + partial.join(',') + ']'; + } else { + var keys = Object.keys(value); + for (var i = 0, length = keys.length; i < length; i++) { + var key = keys[i], str = Str(key, value, stack); + if (typeof str !== "undefined") { + partial.push(key.inspect(true)+ ':' + str); + } + } + partial = '{' + partial.join(',') + '}'; + } + stack.pop(); + return partial; + } + } + + function stringify(object) { + return JSON.stringify(object); + } + + function toQueryString(object) { + return $H(object).toQueryString(); + } + + function toHTML(object) { + return object && object.toHTML ? object.toHTML() : String.interpret(object); + } + + function keys(object) { + if (Type(object) !== OBJECT_TYPE) { throw new TypeError(); } + var results = []; + for (var property in object) { + if (_hasOwnProperty.call(object, property)) + results.push(property); + } + + if (IS_DONTENUM_BUGGY) { + for (var i = 0; property = DONT_ENUMS[i]; i++) { + if (_hasOwnProperty.call(object, property)) + results.push(property); + } + } + + return results; + } + + function values(object) { + var results = []; + for (var property in object) + results.push(object[property]); + return results; + } + + function clone(object) { + return extend({ }, object); + } + + function isElement(object) { + return !!(object && object.nodeType == 1); + } + + function isArray(object) { + return _toString.call(object) === ARRAY_CLASS; + } + + var hasNativeIsArray = (typeof Array.isArray == 'function') + && Array.isArray([]) && !Array.isArray({}); + + if (hasNativeIsArray) { + isArray = Array.isArray; + } + + function isHash(object) { + return object instanceof Hash; + } + + function isFunction(object) { + return _toString.call(object) === FUNCTION_CLASS; + } + + function isString(object) { + return _toString.call(object) === STRING_CLASS; + } + + function isNumber(object) { + return _toString.call(object) === NUMBER_CLASS; + } + + function isDate(object) { + return _toString.call(object) === DATE_CLASS; + } + + function isUndefined(object) { + return typeof object === "undefined"; + } + + extend(Object, { + extend: extend, + inspect: inspect, + toJSON: NATIVE_JSON_STRINGIFY_SUPPORT ? stringify : toJSON, + toQueryString: toQueryString, + toHTML: toHTML, + keys: Object.keys || keys, + values: values, + clone: clone, + isElement: isElement, + isArray: isArray, + isHash: isHash, + isFunction: isFunction, + isString: isString, + isNumber: isNumber, + isDate: isDate, + isUndefined: isUndefined + }); +})(); +Object.extend(Function.prototype, (function() { + var slice = Array.prototype.slice; + + function update(array, args) { + var arrayLength = array.length, length = args.length; + while (length--) array[arrayLength + length] = args[length]; + return array; + } + + function merge(array, args) { + array = slice.call(array, 0); + return update(array, args); + } + + function argumentNames() { + var names = this.toString().match(/^[\s\(]*function[^(]*\(([^)]*)\)/)[1] + .replace(/\/\/.*?[\r\n]|\/\*(?:.|[\r\n])*?\*\//g, '') + .replace(/\s+/g, '').split(','); + return names.length == 1 && !names[0] ? [] : names; + } + + + function bind(context) { + if (arguments.length < 2 && Object.isUndefined(arguments[0])) + return this; + + if (!Object.isFunction(this)) + throw new TypeError("The object is not callable."); + + var nop = function() {}; + var __method = this, args = slice.call(arguments, 1); + + var bound = function() { + var a = merge(args, arguments); + var c = this instanceof bound ? this : context; + return __method.apply(c, a); + }; + + nop.prototype = this.prototype; + bound.prototype = new nop(); + + return bound; + } + + function bindAsEventListener(context) { + var __method = this, args = slice.call(arguments, 1); + return function(event) { + var a = update([event || window.event], args); + return __method.apply(context, a); + } + } + + function curry() { + if (!arguments.length) return this; + var __method = this, args = slice.call(arguments, 0); + return function() { + var a = merge(args, arguments); + return __method.apply(this, a); + } + } + + function delay(timeout) { + var __method = this, args = slice.call(arguments, 1); + timeout = timeout * 1000; + return window.setTimeout(function() { + return __method.apply(__method, args); + }, timeout); + } + + function defer() { + var args = update([0.01], arguments); + return this.delay.apply(this, args); + } + + function wrap(wrapper) { + var __method = this; + return function() { + var a = update([__method.bind(this)], arguments); + return wrapper.apply(this, a); + } + } + + function methodize() { + if (this._methodized) return this._methodized; + var __method = this; + return this._methodized = function() { + var a = update([this], arguments); + return __method.apply(null, a); + }; + } + + var extensions = { + argumentNames: argumentNames, + bindAsEventListener: bindAsEventListener, + curry: curry, + delay: delay, + defer: defer, + wrap: wrap, + methodize: methodize + }; + + if (!Function.prototype.bind) + extensions.bind = bind; + + return extensions; +})()); + + + +(function(proto) { + + + function toISOString() { + return this.getUTCFullYear() + '-' + + (this.getUTCMonth() + 1).toPaddedString(2) + '-' + + this.getUTCDate().toPaddedString(2) + 'T' + + this.getUTCHours().toPaddedString(2) + ':' + + this.getUTCMinutes().toPaddedString(2) + ':' + + this.getUTCSeconds().toPaddedString(2) + 'Z'; + } + + + function toJSON() { + return this.toISOString(); + } + + if (!proto.toISOString) proto.toISOString = toISOString; + if (!proto.toJSON) proto.toJSON = toJSON; + +})(Date.prototype); + + +RegExp.prototype.match = RegExp.prototype.test; + +RegExp.escape = function(str) { + return String(str).replace(/([.*+?^=!:${}()|[\]\/\\])/g, '\\$1'); +}; +var PeriodicalExecuter = Class.create({ + initialize: function(callback, frequency) { + this.callback = callback; + this.frequency = frequency; + this.currentlyExecuting = false; + + this.registerCallback(); + }, + + registerCallback: function() { + this.timer = setInterval(this.onTimerEvent.bind(this), this.frequency * 1000); + }, + + execute: function() { + this.callback(this); + }, + + stop: function() { + if (!this.timer) return; + clearInterval(this.timer); + this.timer = null; + }, + + onTimerEvent: function() { + if (!this.currentlyExecuting) { + try { + this.currentlyExecuting = true; + this.execute(); + this.currentlyExecuting = false; + } catch(e) { + this.currentlyExecuting = false; + throw e; + } + } + } +}); +Object.extend(String, { + interpret: function(value) { + return value == null ? '' : String(value); + }, + specialChar: { + '\b': '\\b', + '\t': '\\t', + '\n': '\\n', + '\f': '\\f', + '\r': '\\r', + '\\': '\\\\' + } +}); + +Object.extend(String.prototype, (function() { + var NATIVE_JSON_PARSE_SUPPORT = window.JSON && + typeof JSON.parse === 'function' && + JSON.parse('{"test": true}').test; + + function prepareReplacement(replacement) { + if (Object.isFunction(replacement)) return replacement; + var template = new Template(replacement); + return function(match) { return template.evaluate(match) }; + } + + function isNonEmptyRegExp(regexp) { + return regexp.source && regexp.source !== '(?:)'; + } + + + function gsub(pattern, replacement) { + var result = '', source = this, match; + replacement = prepareReplacement(replacement); + + if (Object.isString(pattern)) + pattern = RegExp.escape(pattern); + + if (!(pattern.length || isNonEmptyRegExp(pattern))) { + replacement = replacement(''); + return replacement + source.split('').join(replacement) + replacement; + } + + while (source.length > 0) { + match = source.match(pattern) + if (match && match[0].length > 0) { + result += source.slice(0, match.index); + result += String.interpret(replacement(match)); + source = source.slice(match.index + match[0].length); + } else { + result += source, source = ''; + } + } + return result; + } + + function sub(pattern, replacement, count) { + replacement = prepareReplacement(replacement); + count = Object.isUndefined(count) ? 1 : count; + + return this.gsub(pattern, function(match) { + if (--count < 0) return match[0]; + return replacement(match); + }); + } + + function scan(pattern, iterator) { + this.gsub(pattern, iterator); + return String(this); + } + + function truncate(length, truncation) { + length = length || 30; + truncation = Object.isUndefined(truncation) ? '...' : truncation; + return this.length > length ? + this.slice(0, length - truncation.length) + truncation : String(this); + } + + function strip() { + return this.replace(/^\s+/, '').replace(/\s+$/, ''); + } + + function stripTags() { + return this.replace(/<\w+(\s+("[^"]*"|'[^']*'|[^>])+)?>|<\/\w+>/gi, ''); + } + + function stripScripts() { + return this.replace(new RegExp(Prototype.ScriptFragment, 'img'), ''); + } + + function extractScripts() { + var matchAll = new RegExp(Prototype.ScriptFragment, 'img'), + matchOne = new RegExp(Prototype.ScriptFragment, 'im'); + return (this.match(matchAll) || []).map(function(scriptTag) { + return (scriptTag.match(matchOne) || ['', ''])[1]; + }); + } + + function evalScripts() { + return this.extractScripts().map(function(script) { return eval(script); }); + } + + function escapeHTML() { + return this.replace(/&/g,'&').replace(//g,'>'); + } + + function unescapeHTML() { + return this.stripTags().replace(/</g,'<').replace(/>/g,'>').replace(/&/g,'&'); + } + + + function toQueryParams(separator) { + var match = this.strip().match(/([^?#]*)(#.*)?$/); + if (!match) return { }; + + return match[1].split(separator || '&').inject({ }, function(hash, pair) { + if ((pair = pair.split('='))[0]) { + var key = decodeURIComponent(pair.shift()), + value = pair.length > 1 ? pair.join('=') : pair[0]; + + if (value != undefined) { + value = value.gsub('+', ' '); + value = decodeURIComponent(value); + } + + if (key in hash) { + if (!Object.isArray(hash[key])) hash[key] = [hash[key]]; + hash[key].push(value); + } + else hash[key] = value; + } + return hash; + }); + } + + function toArray() { + return this.split(''); + } + + function succ() { + return this.slice(0, this.length - 1) + + String.fromCharCode(this.charCodeAt(this.length - 1) + 1); + } + + function times(count) { + return count < 1 ? '' : new Array(count + 1).join(this); + } + + function camelize() { + return this.replace(/-+(.)?/g, function(match, chr) { + return chr ? chr.toUpperCase() : ''; + }); + } + + function capitalize() { + return this.charAt(0).toUpperCase() + this.substring(1).toLowerCase(); + } + + function underscore() { + return this.replace(/::/g, '/') + .replace(/([A-Z]+)([A-Z][a-z])/g, '$1_$2') + .replace(/([a-z\d])([A-Z])/g, '$1_$2') + .replace(/-/g, '_') + .toLowerCase(); + } + + function dasherize() { + return this.replace(/_/g, '-'); + } + + function inspect(useDoubleQuotes) { + var escapedString = this.replace(/[\x00-\x1f\\]/g, function(character) { + if (character in String.specialChar) { + return String.specialChar[character]; + } + return '\\u00' + character.charCodeAt().toPaddedString(2, 16); + }); + if (useDoubleQuotes) return '"' + escapedString.replace(/"/g, '\\"') + '"'; + return "'" + escapedString.replace(/'/g, '\\\'') + "'"; + } + + function unfilterJSON(filter) { + return this.replace(filter || Prototype.JSONFilter, '$1'); + } + + function isJSON() { + var str = this; + if (str.blank()) return false; + str = str.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@'); + str = str.replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']'); + str = str.replace(/(?:^|:|,)(?:\s*\[)+/g, ''); + return (/^[\],:{}\s]*$/).test(str); + } + + function evalJSON(sanitize) { + var json = this.unfilterJSON(), + cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g; + if (cx.test(json)) { + json = json.replace(cx, function (a) { + return '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4); + }); + } + try { + if (!sanitize || json.isJSON()) return eval('(' + json + ')'); + } catch (e) { } + throw new SyntaxError('Badly formed JSON string: ' + this.inspect()); + } + + function parseJSON() { + var json = this.unfilterJSON(); + return JSON.parse(json); + } + + function include(pattern) { + return this.indexOf(pattern) > -1; + } + + function startsWith(pattern, position) { + position = Object.isNumber(position) ? position : 0; + return this.lastIndexOf(pattern, position) === position; + } + + function endsWith(pattern, position) { + pattern = String(pattern); + position = Object.isNumber(position) ? position : this.length; + if (position < 0) position = 0; + if (position > this.length) position = this.length; + var d = position - pattern.length; + return d >= 0 && this.indexOf(pattern, d) === d; + } + + function empty() { + return this == ''; + } + + function blank() { + return /^\s*$/.test(this); + } + + function interpolate(object, pattern) { + return new Template(this, pattern).evaluate(object); + } + + return { + gsub: gsub, + sub: sub, + scan: scan, + truncate: truncate, + strip: String.prototype.trim || strip, + stripTags: stripTags, + stripScripts: stripScripts, + extractScripts: extractScripts, + evalScripts: evalScripts, + escapeHTML: escapeHTML, + unescapeHTML: unescapeHTML, + toQueryParams: toQueryParams, + parseQuery: toQueryParams, + toArray: toArray, + succ: succ, + times: times, + camelize: camelize, + capitalize: capitalize, + underscore: underscore, + dasherize: dasherize, + inspect: inspect, + unfilterJSON: unfilterJSON, + isJSON: isJSON, + evalJSON: NATIVE_JSON_PARSE_SUPPORT ? parseJSON : evalJSON, + include: include, + startsWith: String.prototype.startsWith || startsWith, + endsWith: String.prototype.endsWith || endsWith, + empty: empty, + blank: blank, + interpolate: interpolate + }; +})()); + +var Template = Class.create({ + initialize: function(template, pattern) { + this.template = template.toString(); + this.pattern = pattern || Template.Pattern; + }, + + evaluate: function(object) { + if (object && Object.isFunction(object.toTemplateReplacements)) + object = object.toTemplateReplacements(); + + return this.template.gsub(this.pattern, function(match) { + if (object == null) return (match[1] + ''); + + var before = match[1] || ''; + if (before == '\\') return match[2]; + + var ctx = object, expr = match[3], + pattern = /^([^.[]+|\[((?:.*?[^\\])?)\])(\.|\[|$)/; + + match = pattern.exec(expr); + if (match == null) return before; + + while (match != null) { + var comp = match[1].startsWith('[') ? match[2].replace(/\\\\]/g, ']') : match[1]; + ctx = ctx[comp]; + if (null == ctx || '' == match[3]) break; + expr = expr.substring('[' == match[3] ? match[1].length : match[0].length); + match = pattern.exec(expr); + } + + return before + String.interpret(ctx); + }); + } +}); +Template.Pattern = /(^|.|\r|\n)(#\{(.*?)\})/; + +var $break = { }; + +var Enumerable = (function() { + function each(iterator, context) { + try { + this._each(iterator, context); + } catch (e) { + if (e != $break) throw e; + } + return this; + } + + function eachSlice(number, iterator, context) { + var index = -number, slices = [], array = this.toArray(); + if (number < 1) return array; + while ((index += number) < array.length) + slices.push(array.slice(index, index+number)); + return slices.collect(iterator, context); + } + + function all(iterator, context) { + iterator = iterator || Prototype.K; + var result = true; + this.each(function(value, index) { + result = result && !!iterator.call(context, value, index, this); + if (!result) throw $break; + }, this); + return result; + } + + function any(iterator, context) { + iterator = iterator || Prototype.K; + var result = false; + this.each(function(value, index) { + if (result = !!iterator.call(context, value, index, this)) + throw $break; + }, this); + return result; + } + + function collect(iterator, context) { + iterator = iterator || Prototype.K; + var results = []; + this.each(function(value, index) { + results.push(iterator.call(context, value, index, this)); + }, this); + return results; + } + + function detect(iterator, context) { + var result; + this.each(function(value, index) { + if (iterator.call(context, value, index, this)) { + result = value; + throw $break; + } + }, this); + return result; + } + + function findAll(iterator, context) { + var results = []; + this.each(function(value, index) { + if (iterator.call(context, value, index, this)) + results.push(value); + }, this); + return results; + } + + function grep(filter, iterator, context) { + iterator = iterator || Prototype.K; + var results = []; + + if (Object.isString(filter)) + filter = new RegExp(RegExp.escape(filter)); + + this.each(function(value, index) { + if (filter.match(value)) + results.push(iterator.call(context, value, index, this)); + }, this); + return results; + } + + function include(object) { + if (Object.isFunction(this.indexOf) && this.indexOf(object) != -1) + return true; + + var found = false; + this.each(function(value) { + if (value == object) { + found = true; + throw $break; + } + }); + return found; + } + + function inGroupsOf(number, fillWith) { + fillWith = Object.isUndefined(fillWith) ? null : fillWith; + return this.eachSlice(number, function(slice) { + while(slice.length < number) slice.push(fillWith); + return slice; + }); + } + + function inject(memo, iterator, context) { + this.each(function(value, index) { + memo = iterator.call(context, memo, value, index, this); + }, this); + return memo; + } + + function invoke(method) { + var args = $A(arguments).slice(1); + return this.map(function(value) { + return value[method].apply(value, args); + }); + } + + function max(iterator, context) { + iterator = iterator || Prototype.K; + var result; + this.each(function(value, index) { + value = iterator.call(context, value, index, this); + if (result == null || value >= result) + result = value; + }, this); + return result; + } + + function min(iterator, context) { + iterator = iterator || Prototype.K; + var result; + this.each(function(value, index) { + value = iterator.call(context, value, index, this); + if (result == null || value < result) + result = value; + }, this); + return result; + } + + function partition(iterator, context) { + iterator = iterator || Prototype.K; + var trues = [], falses = []; + this.each(function(value, index) { + (iterator.call(context, value, index, this) ? + trues : falses).push(value); + }, this); + return [trues, falses]; + } + + function pluck(property) { + var results = []; + this.each(function(value) { + results.push(value[property]); + }); + return results; + } + + function reject(iterator, context) { + var results = []; + this.each(function(value, index) { + if (!iterator.call(context, value, index, this)) + results.push(value); + }, this); + return results; + } + + function sortBy(iterator, context) { + return this.map(function(value, index) { + return { + value: value, + criteria: iterator.call(context, value, index, this) + }; + }, this).sort(function(left, right) { + var a = left.criteria, b = right.criteria; + return a < b ? -1 : a > b ? 1 : 0; + }).pluck('value'); + } + + function toArray() { + return this.map(); + } + + function zip() { + var iterator = Prototype.K, args = $A(arguments); + if (Object.isFunction(args.last())) + iterator = args.pop(); + + var collections = [this].concat(args).map($A); + return this.map(function(value, index) { + return iterator(collections.pluck(index)); + }); + } + + function size() { + return this.toArray().length; + } + + function inspect() { + return '#'; + } + + + + + + + + + + return { + each: each, + eachSlice: eachSlice, + all: all, + every: all, + any: any, + some: any, + collect: collect, + map: collect, + detect: detect, + findAll: findAll, + select: findAll, + filter: findAll, + grep: grep, + include: include, + member: include, + inGroupsOf: inGroupsOf, + inject: inject, + invoke: invoke, + max: max, + min: min, + partition: partition, + pluck: pluck, + reject: reject, + sortBy: sortBy, + toArray: toArray, + entries: toArray, + zip: zip, + size: size, + inspect: inspect, + find: detect + }; +})(); + +function $A(iterable) { + if (!iterable) return []; + if ('toArray' in Object(iterable)) return iterable.toArray(); + var length = iterable.length || 0, results = new Array(length); + while (length--) results[length] = iterable[length]; + return results; +} + + +function $w(string) { + if (!Object.isString(string)) return []; + string = string.strip(); + return string ? string.split(/\s+/) : []; +} + +Array.from = $A; + + +(function() { + var arrayProto = Array.prototype, + slice = arrayProto.slice, + _each = arrayProto.forEach; // use native browser JS 1.6 implementation if available + + function each(iterator, context) { + for (var i = 0, length = this.length >>> 0; i < length; i++) { + if (i in this) iterator.call(context, this[i], i, this); + } + } + if (!_each) _each = each; + + function clear() { + this.length = 0; + return this; + } + + function first() { + return this[0]; + } + + function last() { + return this[this.length - 1]; + } + + function compact() { + return this.select(function(value) { + return value != null; + }); + } + + function flatten() { + return this.inject([], function(array, value) { + if (Object.isArray(value)) + return array.concat(value.flatten()); + array.push(value); + return array; + }); + } + + function without() { + var values = slice.call(arguments, 0); + return this.select(function(value) { + return !values.include(value); + }); + } + + function reverse(inline) { + return (inline === false ? this.toArray() : this)._reverse(); + } + + function uniq(sorted) { + return this.inject([], function(array, value, index) { + if (0 == index || (sorted ? array.last() != value : !array.include(value))) + array.push(value); + return array; + }); + } + + function intersect(array) { + return this.uniq().findAll(function(item) { + return array.indexOf(item) !== -1; + }); + } + + + function clone() { + return slice.call(this, 0); + } + + function size() { + return this.length; + } + + function inspect() { + return '[' + this.map(Object.inspect).join(', ') + ']'; + } + + function indexOf(item, i) { + if (this == null) throw new TypeError(); + + var array = Object(this), length = array.length >>> 0; + if (length === 0) return -1; + + i = Number(i); + if (isNaN(i)) { + i = 0; + } else if (i !== 0 && isFinite(i)) { + i = (i > 0 ? 1 : -1) * Math.floor(Math.abs(i)); + } + + if (i > length) return -1; + + var k = i >= 0 ? i : Math.max(length - Math.abs(i), 0); + for (; k < length; k++) + if (k in array && array[k] === item) return k; + return -1; + } + + + function lastIndexOf(item, i) { + if (this == null) throw new TypeError(); + + var array = Object(this), length = array.length >>> 0; + if (length === 0) return -1; + + if (!Object.isUndefined(i)) { + i = Number(i); + if (isNaN(i)) { + i = 0; + } else if (i !== 0 && isFinite(i)) { + i = (i > 0 ? 1 : -1) * Math.floor(Math.abs(i)); + } + } else { + i = length; + } + + var k = i >= 0 ? Math.min(i, length - 1) : + length - Math.abs(i); + + for (; k >= 0; k--) + if (k in array && array[k] === item) return k; + return -1; + } + + function concat(_) { + var array = [], items = slice.call(arguments, 0), item, n = 0; + items.unshift(this); + for (var i = 0, length = items.length; i < length; i++) { + item = items[i]; + if (Object.isArray(item) && !('callee' in item)) { + for (var j = 0, arrayLength = item.length; j < arrayLength; j++) { + if (j in item) array[n] = item[j]; + n++; + } + } else { + array[n++] = item; + } + } + array.length = n; + return array; + } + + + function wrapNative(method) { + return function() { + if (arguments.length === 0) { + return method.call(this, Prototype.K); + } else if (arguments[0] === undefined) { + var args = slice.call(arguments, 1); + args.unshift(Prototype.K); + return method.apply(this, args); + } else { + return method.apply(this, arguments); + } + }; + } + + + function map(iterator) { + if (this == null) throw new TypeError(); + iterator = iterator || Prototype.K; + + var object = Object(this); + var results = [], context = arguments[1], n = 0; + + for (var i = 0, length = object.length >>> 0; i < length; i++) { + if (i in object) { + results[n] = iterator.call(context, object[i], i, object); + } + n++; + } + results.length = n; + return results; + } + + if (arrayProto.map) { + map = wrapNative(Array.prototype.map); + } + + function filter(iterator) { + if (this == null || !Object.isFunction(iterator)) + throw new TypeError(); + + var object = Object(this); + var results = [], context = arguments[1], value; + + for (var i = 0, length = object.length >>> 0; i < length; i++) { + if (i in object) { + value = object[i]; + if (iterator.call(context, value, i, object)) { + results.push(value); + } + } + } + return results; + } + + if (arrayProto.filter) { + filter = Array.prototype.filter; + } + + function some(iterator) { + if (this == null) throw new TypeError(); + iterator = iterator || Prototype.K; + var context = arguments[1]; + + var object = Object(this); + for (var i = 0, length = object.length >>> 0; i < length; i++) { + if (i in object && iterator.call(context, object[i], i, object)) { + return true; + } + } + + return false; + } + + if (arrayProto.some) { + var some = wrapNative(Array.prototype.some); + } + + + function every(iterator) { + if (this == null) throw new TypeError(); + iterator = iterator || Prototype.K; + var context = arguments[1]; + + var object = Object(this); + for (var i = 0, length = object.length >>> 0; i < length; i++) { + if (i in object && !iterator.call(context, object[i], i, object)) { + return false; + } + } + + return true; + } + + if (arrayProto.every) { + var every = wrapNative(Array.prototype.every); + } + + var _reduce = arrayProto.reduce; + function inject(memo, iterator) { + iterator = iterator || Prototype.K; + var context = arguments[2]; + return _reduce.call(this, iterator.bind(context), memo); + } + + if (!arrayProto.reduce) { + var inject = Enumerable.inject; + } + + Object.extend(arrayProto, Enumerable); + + if (!arrayProto._reverse) + arrayProto._reverse = arrayProto.reverse; + + Object.extend(arrayProto, { + _each: _each, + + map: map, + collect: map, + select: filter, + filter: filter, + findAll: filter, + some: some, + any: some, + every: every, + all: every, + inject: inject, + + clear: clear, + first: first, + last: last, + compact: compact, + flatten: flatten, + without: without, + reverse: reverse, + uniq: uniq, + intersect: intersect, + clone: clone, + toArray: clone, + size: size, + inspect: inspect + }); + + var CONCAT_ARGUMENTS_BUGGY = (function() { + return [].concat(arguments)[0][0] !== 1; + })(1,2); + + if (CONCAT_ARGUMENTS_BUGGY) arrayProto.concat = concat; + + if (!arrayProto.indexOf) arrayProto.indexOf = indexOf; + if (!arrayProto.lastIndexOf) arrayProto.lastIndexOf = lastIndexOf; +})(); +function $H(object) { + return new Hash(object); +}; + +var Hash = Class.create(Enumerable, (function() { + function initialize(object) { + this._object = Object.isHash(object) ? object.toObject() : Object.clone(object); + } + + + function _each(iterator, context) { + var i = 0; + for (var key in this._object) { + var value = this._object[key], pair = [key, value]; + pair.key = key; + pair.value = value; + iterator.call(context, pair, i); + i++; + } + } + + function set(key, value) { + return this._object[key] = value; + } + + function get(key) { + if (this._object[key] !== Object.prototype[key]) + return this._object[key]; + } + + function unset(key) { + var value = this._object[key]; + delete this._object[key]; + return value; + } + + function toObject() { + return Object.clone(this._object); + } + + + + function keys() { + return this.pluck('key'); + } + + function values() { + return this.pluck('value'); + } + + function index(value) { + var match = this.detect(function(pair) { + return pair.value === value; + }); + return match && match.key; + } + + function merge(object) { + return this.clone().update(object); + } + + function update(object) { + return new Hash(object).inject(this, function(result, pair) { + result.set(pair.key, pair.value); + return result; + }); + } + + function toQueryPair(key, value) { + if (Object.isUndefined(value)) return key; + + value = String.interpret(value); + + value = value.gsub(/(\r)?\n/, '\r\n'); + value = encodeURIComponent(value); + value = value.gsub(/%20/, '+'); + return key + '=' + value; + } + + function toQueryString() { + return this.inject([], function(results, pair) { + var key = encodeURIComponent(pair.key), values = pair.value; + + if (values && typeof values == 'object') { + if (Object.isArray(values)) { + var queryValues = []; + for (var i = 0, len = values.length, value; i < len; i++) { + value = values[i]; + queryValues.push(toQueryPair(key, value)); + } + return results.concat(queryValues); + } + } else results.push(toQueryPair(key, values)); + return results; + }).join('&'); + } + + function inspect() { + return '#'; + } + + function clone() { + return new Hash(this); + } + + return { + initialize: initialize, + _each: _each, + set: set, + get: get, + unset: unset, + toObject: toObject, + toTemplateReplacements: toObject, + keys: keys, + values: values, + index: index, + merge: merge, + update: update, + toQueryString: toQueryString, + inspect: inspect, + toJSON: toObject, + clone: clone + }; +})()); + +Hash.from = $H; +Object.extend(Number.prototype, (function() { + function toColorPart() { + return this.toPaddedString(2, 16); + } + + function succ() { + return this + 1; + } + + function times(iterator, context) { + $R(0, this, true).each(iterator, context); + return this; + } + + function toPaddedString(length, radix) { + var string = this.toString(radix || 10); + return '0'.times(length - string.length) + string; + } + + function abs() { + return Math.abs(this); + } + + function round() { + return Math.round(this); + } + + function ceil() { + return Math.ceil(this); + } + + function floor() { + return Math.floor(this); + } + + return { + toColorPart: toColorPart, + succ: succ, + times: times, + toPaddedString: toPaddedString, + abs: abs, + round: round, + ceil: ceil, + floor: floor + }; +})()); + +function $R(start, end, exclusive) { + return new ObjectRange(start, end, exclusive); +} + +var ObjectRange = Class.create(Enumerable, (function() { + function initialize(start, end, exclusive) { + this.start = start; + this.end = end; + this.exclusive = exclusive; + } + + function _each(iterator, context) { + var value = this.start, i; + for (i = 0; this.include(value); i++) { + iterator.call(context, value, i); + value = value.succ(); + } + } + + function include(value) { + if (value < this.start) + return false; + if (this.exclusive) + return value < this.end; + return value <= this.end; + } + + return { + initialize: initialize, + _each: _each, + include: include + }; +})()); + + + +var Abstract = { }; + + +var Try = { + these: function() { + var returnValue; + + for (var i = 0, length = arguments.length; i < length; i++) { + var lambda = arguments[i]; + try { + returnValue = lambda(); + break; + } catch (e) { } + } + + return returnValue; + } +}; + +var Ajax = { + getTransport: function() { + return Try.these( + function() {return new XMLHttpRequest()}, + function() {return new ActiveXObject('Msxml2.XMLHTTP')}, + function() {return new ActiveXObject('Microsoft.XMLHTTP')} + ) || false; + }, + + activeRequestCount: 0 +}; + +Ajax.Responders = { + responders: [], + + _each: function(iterator, context) { + this.responders._each(iterator, context); + }, + + register: function(responder) { + if (!this.include(responder)) + this.responders.push(responder); + }, + + unregister: function(responder) { + this.responders = this.responders.without(responder); + }, + + dispatch: function(callback, request, transport, json) { + this.each(function(responder) { + if (Object.isFunction(responder[callback])) { + try { + responder[callback].apply(responder, [request, transport, json]); + } catch (e) { } + } + }); + } +}; + +Object.extend(Ajax.Responders, Enumerable); + +Ajax.Responders.register({ + onCreate: function() { Ajax.activeRequestCount++ }, + onComplete: function() { Ajax.activeRequestCount-- } +}); +Ajax.Base = Class.create({ + initialize: function(options) { + this.options = { + method: 'post', + asynchronous: true, + contentType: 'application/x-www-form-urlencoded', + encoding: 'UTF-8', + parameters: '', + evalJSON: true, + evalJS: true + }; + Object.extend(this.options, options || { }); + + this.options.method = this.options.method.toLowerCase(); + + if (Object.isHash(this.options.parameters)) + this.options.parameters = this.options.parameters.toObject(); + } +}); +Ajax.Request = Class.create(Ajax.Base, { + _complete: false, + + initialize: function($super, url, options) { + $super(options); + this.transport = Ajax.getTransport(); + this.request(url); + }, + + request: function(url) { + this.url = url; + this.method = this.options.method; + var params = Object.isString(this.options.parameters) ? + this.options.parameters : + Object.toQueryString(this.options.parameters); + + if (!['get', 'post'].include(this.method)) { + params += (params ? '&' : '') + "_method=" + this.method; + this.method = 'post'; + } + + if (params && this.method === 'get') { + this.url += (this.url.include('?') ? '&' : '?') + params; + } + + this.parameters = params.toQueryParams(); + + try { + var response = new Ajax.Response(this); + if (this.options.onCreate) this.options.onCreate(response); + Ajax.Responders.dispatch('onCreate', this, response); + + this.transport.open(this.method.toUpperCase(), this.url, + this.options.asynchronous); + + if (this.options.asynchronous) this.respondToReadyState.bind(this).defer(1); + + this.transport.onreadystatechange = this.onStateChange.bind(this); + this.setRequestHeaders(); + + this.body = this.method == 'post' ? (this.options.postBody || params) : null; + this.transport.send(this.body); + + /* Force Firefox to handle ready state 4 for synchronous requests */ + if (!this.options.asynchronous && this.transport.overrideMimeType) + this.onStateChange(); + + } + catch (e) { + this.dispatchException(e); + } + }, + + onStateChange: function() { + var readyState = this.transport.readyState; + if (readyState > 1 && !((readyState == 4) && this._complete)) + this.respondToReadyState(this.transport.readyState); + }, + + setRequestHeaders: function() { + var headers = { + 'X-Requested-With': 'XMLHttpRequest', + 'X-Prototype-Version': Prototype.Version, + 'Accept': 'text/javascript, text/html, application/xml, text/xml, */*' + }; + + if (this.method == 'post') { + headers['Content-type'] = this.options.contentType + + (this.options.encoding ? '; charset=' + this.options.encoding : ''); + + /* Force "Connection: close" for older Mozilla browsers to work + * around a bug where XMLHttpRequest sends an incorrect + * Content-length header. See Mozilla Bugzilla #246651. + */ + if (this.transport.overrideMimeType && + (navigator.userAgent.match(/Gecko\/(\d{4})/) || [0,2005])[1] < 2005) + headers['Connection'] = 'close'; + } + + if (typeof this.options.requestHeaders == 'object') { + var extras = this.options.requestHeaders; + + if (Object.isFunction(extras.push)) + for (var i = 0, length = extras.length; i < length; i += 2) + headers[extras[i]] = extras[i+1]; + else + $H(extras).each(function(pair) { headers[pair.key] = pair.value }); + } + + for (var name in headers) + if (headers[name] != null) + this.transport.setRequestHeader(name, headers[name]); + }, + + success: function() { + var status = this.getStatus(); + return !status || (status >= 200 && status < 300) || status == 304; + }, + + getStatus: function() { + try { + if (this.transport.status === 1223) return 204; + return this.transport.status || 0; + } catch (e) { return 0 } + }, + + respondToReadyState: function(readyState) { + var state = Ajax.Request.Events[readyState], response = new Ajax.Response(this); + + if (state == 'Complete') { + try { + this._complete = true; + (this.options['on' + response.status] + || this.options['on' + (this.success() ? 'Success' : 'Failure')] + || Prototype.emptyFunction)(response, response.headerJSON); + } catch (e) { + this.dispatchException(e); + } + + var contentType = response.getHeader('Content-type'); + if (this.options.evalJS == 'force' + || (this.options.evalJS && this.isSameOrigin() && contentType + && contentType.match(/^\s*(text|application)\/(x-)?(java|ecma)script(;.*)?\s*$/i))) + this.evalResponse(); + } + + try { + (this.options['on' + state] || Prototype.emptyFunction)(response, response.headerJSON); + Ajax.Responders.dispatch('on' + state, this, response, response.headerJSON); + } catch (e) { + this.dispatchException(e); + } + + if (state == 'Complete') { + this.transport.onreadystatechange = Prototype.emptyFunction; + } + }, + + isSameOrigin: function() { + var m = this.url.match(/^\s*https?:\/\/[^\/]*/); + return !m || (m[0] == '#{protocol}//#{domain}#{port}'.interpolate({ + protocol: location.protocol, + domain: document.domain, + port: location.port ? ':' + location.port : '' + })); + }, + + getHeader: function(name) { + try { + return this.transport.getResponseHeader(name) || null; + } catch (e) { return null; } + }, + + evalResponse: function() { + try { + return eval((this.transport.responseText || '').unfilterJSON()); + } catch (e) { + this.dispatchException(e); + } + }, + + dispatchException: function(exception) { + (this.options.onException || Prototype.emptyFunction)(this, exception); + Ajax.Responders.dispatch('onException', this, exception); + } +}); + +Ajax.Request.Events = + ['Uninitialized', 'Loading', 'Loaded', 'Interactive', 'Complete']; + + + + + + + + +Ajax.Response = Class.create({ + initialize: function(request){ + this.request = request; + var transport = this.transport = request.transport, + readyState = this.readyState = transport.readyState; + + if ((readyState > 2 && !Prototype.Browser.IE) || readyState == 4) { + this.status = this.getStatus(); + this.statusText = this.getStatusText(); + this.responseText = String.interpret(transport.responseText); + this.headerJSON = this._getHeaderJSON(); + } + + if (readyState == 4) { + var xml = transport.responseXML; + this.responseXML = Object.isUndefined(xml) ? null : xml; + this.responseJSON = this._getResponseJSON(); + } + }, + + status: 0, + + statusText: '', + + getStatus: Ajax.Request.prototype.getStatus, + + getStatusText: function() { + try { + return this.transport.statusText || ''; + } catch (e) { return '' } + }, + + getHeader: Ajax.Request.prototype.getHeader, + + getAllHeaders: function() { + try { + return this.getAllResponseHeaders(); + } catch (e) { return null } + }, + + getResponseHeader: function(name) { + return this.transport.getResponseHeader(name); + }, + + getAllResponseHeaders: function() { + return this.transport.getAllResponseHeaders(); + }, + + _getHeaderJSON: function() { + var json = this.getHeader('X-JSON'); + if (!json) return null; + + try { + json = decodeURIComponent(escape(json)); + } catch(e) { + } + + try { + return json.evalJSON(this.request.options.sanitizeJSON || + !this.request.isSameOrigin()); + } catch (e) { + this.request.dispatchException(e); + } + }, + + _getResponseJSON: function() { + var options = this.request.options; + if (!options.evalJSON || (options.evalJSON != 'force' && + !(this.getHeader('Content-type') || '').include('application/json')) || + this.responseText.blank()) + return null; + try { + return this.responseText.evalJSON(options.sanitizeJSON || + !this.request.isSameOrigin()); + } catch (e) { + this.request.dispatchException(e); + } + } +}); + +Ajax.Updater = Class.create(Ajax.Request, { + initialize: function($super, container, url, options) { + this.container = { + success: (container.success || container), + failure: (container.failure || (container.success ? null : container)) + }; + + options = Object.clone(options); + var onComplete = options.onComplete; + options.onComplete = (function(response, json) { + this.updateContent(response.responseText); + if (Object.isFunction(onComplete)) onComplete(response, json); + }).bind(this); + + $super(url, options); + }, + + updateContent: function(responseText) { + var receiver = this.container[this.success() ? 'success' : 'failure'], + options = this.options; + + if (!options.evalScripts) responseText = responseText.stripScripts(); + + if (receiver = $(receiver)) { + if (options.insertion) { + if (Object.isString(options.insertion)) { + var insertion = { }; insertion[options.insertion] = responseText; + receiver.insert(insertion); + } + else options.insertion(receiver, responseText); + } + else receiver.update(responseText); + } + } +}); + +Ajax.PeriodicalUpdater = Class.create(Ajax.Base, { + initialize: function($super, container, url, options) { + $super(options); + this.onComplete = this.options.onComplete; + + this.frequency = (this.options.frequency || 2); + this.decay = (this.options.decay || 1); + + this.updater = { }; + this.container = container; + this.url = url; + + this.start(); + }, + + start: function() { + this.options.onComplete = this.updateComplete.bind(this); + this.onTimerEvent(); + }, + + stop: function() { + this.updater.options.onComplete = undefined; + clearTimeout(this.timer); + (this.onComplete || Prototype.emptyFunction).apply(this, arguments); + }, + + updateComplete: function(response) { + if (this.options.decay) { + this.decay = (response.responseText == this.lastText ? + this.decay * this.options.decay : 1); + + this.lastText = response.responseText; + } + this.timer = this.onTimerEvent.bind(this).delay(this.decay * this.frequency); + }, + + onTimerEvent: function() { + this.updater = new Ajax.Updater(this.container, this.url, this.options); + } +}); + +(function(GLOBAL) { + + var UNDEFINED; + var SLICE = Array.prototype.slice; + + var DIV = document.createElement('div'); + + + function $(element) { + if (arguments.length > 1) { + for (var i = 0, elements = [], length = arguments.length; i < length; i++) + elements.push($(arguments[i])); + return elements; + } + + if (Object.isString(element)) + element = document.getElementById(element); + return Element.extend(element); + } + + GLOBAL.$ = $; + + + if (!GLOBAL.Node) GLOBAL.Node = {}; + + if (!GLOBAL.Node.ELEMENT_NODE) { + Object.extend(GLOBAL.Node, { + ELEMENT_NODE: 1, + ATTRIBUTE_NODE: 2, + TEXT_NODE: 3, + CDATA_SECTION_NODE: 4, + ENTITY_REFERENCE_NODE: 5, + ENTITY_NODE: 6, + PROCESSING_INSTRUCTION_NODE: 7, + COMMENT_NODE: 8, + DOCUMENT_NODE: 9, + DOCUMENT_TYPE_NODE: 10, + DOCUMENT_FRAGMENT_NODE: 11, + NOTATION_NODE: 12 + }); + } + + var ELEMENT_CACHE = {}; + + function shouldUseCreationCache(tagName, attributes) { + if (tagName === 'select') return false; + if ('type' in attributes) return false; + return true; + } + + var HAS_EXTENDED_CREATE_ELEMENT_SYNTAX = (function(){ + try { + var el = document.createElement(''); + return el.tagName.toLowerCase() === 'input' && el.name === 'x'; + } + catch(err) { + return false; + } + })(); + + + var oldElement = GLOBAL.Element; + function Element(tagName, attributes) { + attributes = attributes || {}; + tagName = tagName.toLowerCase(); + + if (HAS_EXTENDED_CREATE_ELEMENT_SYNTAX && attributes.name) { + tagName = '<' + tagName + ' name="' + attributes.name + '">'; + delete attributes.name; + return Element.writeAttribute(document.createElement(tagName), attributes); + } + + if (!ELEMENT_CACHE[tagName]) + ELEMENT_CACHE[tagName] = Element.extend(document.createElement(tagName)); + + var node = shouldUseCreationCache(tagName, attributes) ? + ELEMENT_CACHE[tagName].cloneNode(false) : document.createElement(tagName); + + return Element.writeAttribute(node, attributes); + } + + GLOBAL.Element = Element; + + Object.extend(GLOBAL.Element, oldElement || {}); + if (oldElement) GLOBAL.Element.prototype = oldElement.prototype; + + Element.Methods = { ByTag: {}, Simulated: {} }; + + var methods = {}; + + var INSPECT_ATTRIBUTES = { id: 'id', className: 'class' }; + function inspect(element) { + element = $(element); + var result = '<' + element.tagName.toLowerCase(); + + var attribute, value; + for (var property in INSPECT_ATTRIBUTES) { + attribute = INSPECT_ATTRIBUTES[property]; + value = (element[property] || '').toString(); + if (value) result += ' ' + attribute + '=' + value.inspect(true); + } + + return result + '>'; + } + + methods.inspect = inspect; + + + function visible(element) { + return $(element).style.display !== 'none'; + } + + function toggle(element, bool) { + element = $(element); + if (Object.isUndefined(bool)) + bool = !Element.visible(element); + Element[bool ? 'show' : 'hide'](element); + + return element; + } + + function hide(element) { + element = $(element); + element.style.display = 'none'; + return element; + } + + function show(element) { + element = $(element); + element.style.display = ''; + return element; + } + + + Object.extend(methods, { + visible: visible, + toggle: toggle, + hide: hide, + show: show + }); + + + function remove(element) { + element = $(element); + element.parentNode.removeChild(element); + return element; + } + + var SELECT_ELEMENT_INNERHTML_BUGGY = (function(){ + var el = document.createElement("select"), + isBuggy = true; + el.innerHTML = ""; + if (el.options && el.options[0]) { + isBuggy = el.options[0].nodeName.toUpperCase() !== "OPTION"; + } + el = null; + return isBuggy; + })(); + + var TABLE_ELEMENT_INNERHTML_BUGGY = (function(){ + try { + var el = document.createElement("table"); + if (el && el.tBodies) { + el.innerHTML = "test"; + var isBuggy = typeof el.tBodies[0] == "undefined"; + el = null; + return isBuggy; + } + } catch (e) { + return true; + } + })(); + + var LINK_ELEMENT_INNERHTML_BUGGY = (function() { + try { + var el = document.createElement('div'); + el.innerHTML = ""; + var isBuggy = (el.childNodes.length === 0); + el = null; + return isBuggy; + } catch(e) { + return true; + } + })(); + + var ANY_INNERHTML_BUGGY = SELECT_ELEMENT_INNERHTML_BUGGY || + TABLE_ELEMENT_INNERHTML_BUGGY || LINK_ELEMENT_INNERHTML_BUGGY; + + var SCRIPT_ELEMENT_REJECTS_TEXTNODE_APPENDING = (function () { + var s = document.createElement("script"), + isBuggy = false; + try { + s.appendChild(document.createTextNode("")); + isBuggy = !s.firstChild || + s.firstChild && s.firstChild.nodeType !== 3; + } catch (e) { + isBuggy = true; + } + s = null; + return isBuggy; + })(); + + function update(element, content) { + element = $(element); + + var descendants = element.getElementsByTagName('*'), + i = descendants.length; + while (i--) purgeElement(descendants[i]); + + if (content && content.toElement) + content = content.toElement(); + + if (Object.isElement(content)) + return element.update().insert(content); + + + content = Object.toHTML(content); + var tagName = element.tagName.toUpperCase(); + + if (tagName === 'SCRIPT' && SCRIPT_ELEMENT_REJECTS_TEXTNODE_APPENDING) { + element.text = content; + return element; + } + + if (ANY_INNERHTML_BUGGY) { + if (tagName in INSERTION_TRANSLATIONS.tags) { + while (element.firstChild) + element.removeChild(element.firstChild); + + var nodes = getContentFromAnonymousElement(tagName, content.stripScripts()); + for (var i = 0, node; node = nodes[i]; i++) + element.appendChild(node); + + } else if (LINK_ELEMENT_INNERHTML_BUGGY && Object.isString(content) && content.indexOf(' -1) { + while (element.firstChild) + element.removeChild(element.firstChild); + + var nodes = getContentFromAnonymousElement(tagName, + content.stripScripts(), true); + + for (var i = 0, node; node = nodes[i]; i++) + element.appendChild(node); + } else { + element.innerHTML = content.stripScripts(); + } + } else { + element.innerHTML = content.stripScripts(); + } + + content.evalScripts.bind(content).defer(); + return element; + } + + function replace(element, content) { + element = $(element); + + if (content && content.toElement) { + content = content.toElement(); + } else if (!Object.isElement(content)) { + content = Object.toHTML(content); + var range = element.ownerDocument.createRange(); + range.selectNode(element); + content.evalScripts.bind(content).defer(); + content = range.createContextualFragment(content.stripScripts()); + } + + element.parentNode.replaceChild(content, element); + return element; + } + + var INSERTION_TRANSLATIONS = { + before: function(element, node) { + element.parentNode.insertBefore(node, element); + }, + top: function(element, node) { + element.insertBefore(node, element.firstChild); + }, + bottom: function(element, node) { + element.appendChild(node); + }, + after: function(element, node) { + element.parentNode.insertBefore(node, element.nextSibling); + }, + + tags: { + TABLE: ['', '
    ', 1], + TBODY: ['', '
    ', 2], + TR: ['', '
    ', 3], + TD: ['
    ', '
    ', 4], + SELECT: ['', 1] + } + }; + + var tags = INSERTION_TRANSLATIONS.tags; + + Object.extend(tags, { + THEAD: tags.TBODY, + TFOOT: tags.TBODY, + TH: tags.TD + }); + + function replace_IE(element, content) { + element = $(element); + if (content && content.toElement) + content = content.toElement(); + if (Object.isElement(content)) { + element.parentNode.replaceChild(content, element); + return element; + } + + content = Object.toHTML(content); + var parent = element.parentNode, tagName = parent.tagName.toUpperCase(); + + if (tagName in INSERTION_TRANSLATIONS.tags) { + var nextSibling = Element.next(element); + var fragments = getContentFromAnonymousElement( + tagName, content.stripScripts()); + + parent.removeChild(element); + + var iterator; + if (nextSibling) + iterator = function(node) { parent.insertBefore(node, nextSibling) }; + else + iterator = function(node) { parent.appendChild(node); } + + fragments.each(iterator); + } else { + element.outerHTML = content.stripScripts(); + } + + content.evalScripts.bind(content).defer(); + return element; + } + + if ('outerHTML' in document.documentElement) + replace = replace_IE; + + function isContent(content) { + if (Object.isUndefined(content) || content === null) return false; + + if (Object.isString(content) || Object.isNumber(content)) return true; + if (Object.isElement(content)) return true; + if (content.toElement || content.toHTML) return true; + + return false; + } + + function insertContentAt(element, content, position) { + position = position.toLowerCase(); + var method = INSERTION_TRANSLATIONS[position]; + + if (content && content.toElement) content = content.toElement(); + if (Object.isElement(content)) { + method(element, content); + return element; + } + + content = Object.toHTML(content); + var tagName = ((position === 'before' || position === 'after') ? + element.parentNode : element).tagName.toUpperCase(); + + var childNodes = getContentFromAnonymousElement(tagName, content.stripScripts()); + + if (position === 'top' || position === 'after') childNodes.reverse(); + + for (var i = 0, node; node = childNodes[i]; i++) + method(element, node); + + content.evalScripts.bind(content).defer(); + } + + function insert(element, insertions) { + element = $(element); + + if (isContent(insertions)) + insertions = { bottom: insertions }; + + for (var position in insertions) + insertContentAt(element, insertions[position], position); + + return element; + } + + function wrap(element, wrapper, attributes) { + element = $(element); + + if (Object.isElement(wrapper)) { + $(wrapper).writeAttribute(attributes || {}); + } else if (Object.isString(wrapper)) { + wrapper = new Element(wrapper, attributes); + } else { + wrapper = new Element('div', wrapper); + } + + if (element.parentNode) + element.parentNode.replaceChild(wrapper, element); + + wrapper.appendChild(element); + + return wrapper; + } + + function cleanWhitespace(element) { + element = $(element); + var node = element.firstChild; + + while (node) { + var nextNode = node.nextSibling; + if (node.nodeType === Node.TEXT_NODE && !/\S/.test(node.nodeValue)) + element.removeChild(node); + node = nextNode; + } + return element; + } + + function empty(element) { + return $(element).innerHTML.blank(); + } + + function getContentFromAnonymousElement(tagName, html, force) { + var t = INSERTION_TRANSLATIONS.tags[tagName], div = DIV; + + var workaround = !!t; + if (!workaround && force) { + workaround = true; + t = ['', '', 0]; + } + + if (workaround) { + div.innerHTML = ' ' + t[0] + html + t[1]; + div.removeChild(div.firstChild); + for (var i = t[2]; i--; ) + div = div.firstChild; + } else { + div.innerHTML = html; + } + + return $A(div.childNodes); + } + + function clone(element, deep) { + if (!(element = $(element))) return; + var clone = element.cloneNode(deep); + if (!HAS_UNIQUE_ID_PROPERTY) { + clone._prototypeUID = UNDEFINED; + if (deep) { + var descendants = Element.select(clone, '*'), + i = descendants.length; + while (i--) + descendants[i]._prototypeUID = UNDEFINED; + } + } + return Element.extend(clone); + } + + function purgeElement(element) { + var uid = getUniqueElementID(element); + if (uid) { + Element.stopObserving(element); + if (!HAS_UNIQUE_ID_PROPERTY) + element._prototypeUID = UNDEFINED; + delete Element.Storage[uid]; + } + } + + function purgeCollection(elements) { + var i = elements.length; + while (i--) + purgeElement(elements[i]); + } + + function purgeCollection_IE(elements) { + var i = elements.length, element, uid; + while (i--) { + element = elements[i]; + uid = getUniqueElementID(element); + delete Element.Storage[uid]; + delete Event.cache[uid]; + } + } + + if (HAS_UNIQUE_ID_PROPERTY) { + purgeCollection = purgeCollection_IE; + } + + + function purge(element) { + if (!(element = $(element))) return; + purgeElement(element); + + var descendants = element.getElementsByTagName('*'), + i = descendants.length; + + while (i--) purgeElement(descendants[i]); + + return null; + } + + Object.extend(methods, { + remove: remove, + update: update, + replace: replace, + insert: insert, + wrap: wrap, + cleanWhitespace: cleanWhitespace, + empty: empty, + clone: clone, + purge: purge + }); + + + + function recursivelyCollect(element, property, maximumLength) { + element = $(element); + maximumLength = maximumLength || -1; + var elements = []; + + while (element = element[property]) { + if (element.nodeType === Node.ELEMENT_NODE) + elements.push(Element.extend(element)); + + if (elements.length === maximumLength) break; + } + + return elements; + } + + + function ancestors(element) { + return recursivelyCollect(element, 'parentNode'); + } + + function descendants(element) { + return Element.select(element, '*'); + } + + function firstDescendant(element) { + element = $(element).firstChild; + while (element && element.nodeType !== Node.ELEMENT_NODE) + element = element.nextSibling; + + return $(element); + } + + function immediateDescendants(element) { + var results = [], child = $(element).firstChild; + + while (child) { + if (child.nodeType === Node.ELEMENT_NODE) + results.push(Element.extend(child)); + + child = child.nextSibling; + } + + return results; + } + + function previousSiblings(element) { + return recursivelyCollect(element, 'previousSibling'); + } + + function nextSiblings(element) { + return recursivelyCollect(element, 'nextSibling'); + } + + function siblings(element) { + element = $(element); + var previous = previousSiblings(element), + next = nextSiblings(element); + return previous.reverse().concat(next); + } + + function match(element, selector) { + element = $(element); + + if (Object.isString(selector)) + return Prototype.Selector.match(element, selector); + + return selector.match(element); + } + + + function _recursivelyFind(element, property, expression, index) { + element = $(element), expression = expression || 0, index = index || 0; + if (Object.isNumber(expression)) { + index = expression, expression = null; + } + + while (element = element[property]) { + if (element.nodeType !== 1) continue; + if (expression && !Prototype.Selector.match(element, expression)) + continue; + if (--index >= 0) continue; + + return Element.extend(element); + } + } + + + function up(element, expression, index) { + element = $(element); + + if (arguments.length === 1) return $(element.parentNode); + return _recursivelyFind(element, 'parentNode', expression, index); + } + + function down(element, expression, index) { + if (arguments.length === 1) return firstDescendant(element); + element = $(element), expression = expression || 0, index = index || 0; + + if (Object.isNumber(expression)) + index = expression, expression = '*'; + + var node = Prototype.Selector.select(expression, element)[index]; + return Element.extend(node); + } + + function previous(element, expression, index) { + return _recursivelyFind(element, 'previousSibling', expression, index); + } + + function next(element, expression, index) { + return _recursivelyFind(element, 'nextSibling', expression, index); + } + + function select(element) { + element = $(element); + var expressions = SLICE.call(arguments, 1).join(', '); + return Prototype.Selector.select(expressions, element); + } + + function adjacent(element) { + element = $(element); + var expressions = SLICE.call(arguments, 1).join(', '); + var siblings = Element.siblings(element), results = []; + for (var i = 0, sibling; sibling = siblings[i]; i++) { + if (Prototype.Selector.match(sibling, expressions)) + results.push(sibling); + } + + return results; + } + + function descendantOf_DOM(element, ancestor) { + element = $(element), ancestor = $(ancestor); + while (element = element.parentNode) + if (element === ancestor) return true; + return false; + } + + function descendantOf_contains(element, ancestor) { + element = $(element), ancestor = $(ancestor); + if (!ancestor.contains) return descendantOf_DOM(element, ancestor); + return ancestor.contains(element) && ancestor !== element; + } + + function descendantOf_compareDocumentPosition(element, ancestor) { + element = $(element), ancestor = $(ancestor); + return (element.compareDocumentPosition(ancestor) & 8) === 8; + } + + var descendantOf; + if (DIV.compareDocumentPosition) { + descendantOf = descendantOf_compareDocumentPosition; + } else if (DIV.contains) { + descendantOf = descendantOf_contains; + } else { + descendantOf = descendantOf_DOM; + } + + + Object.extend(methods, { + recursivelyCollect: recursivelyCollect, + ancestors: ancestors, + descendants: descendants, + firstDescendant: firstDescendant, + immediateDescendants: immediateDescendants, + previousSiblings: previousSiblings, + nextSiblings: nextSiblings, + siblings: siblings, + match: match, + up: up, + down: down, + previous: previous, + next: next, + select: select, + adjacent: adjacent, + descendantOf: descendantOf, + + getElementsBySelector: select, + + childElements: immediateDescendants + }); + + + var idCounter = 1; + function identify(element) { + element = $(element); + var id = Element.readAttribute(element, 'id'); + if (id) return id; + + do { id = 'anonymous_element_' + idCounter++ } while ($(id)); + + Element.writeAttribute(element, 'id', id); + return id; + } + + + function readAttribute(element, name) { + return $(element).getAttribute(name); + } + + function readAttribute_IE(element, name) { + element = $(element); + + var table = ATTRIBUTE_TRANSLATIONS.read; + if (table.values[name]) + return table.values[name](element, name); + + if (table.names[name]) name = table.names[name]; + + if (name.include(':')) { + if (!element.attributes || !element.attributes[name]) return null; + return element.attributes[name].value; + } + + return element.getAttribute(name); + } + + function readAttribute_Opera(element, name) { + if (name === 'title') return element.title; + return element.getAttribute(name); + } + + var PROBLEMATIC_ATTRIBUTE_READING = (function() { + DIV.setAttribute('onclick', []); + var value = DIV.getAttribute('onclick'); + var isFunction = Object.isArray(value); + DIV.removeAttribute('onclick'); + return isFunction; + })(); + + if (PROBLEMATIC_ATTRIBUTE_READING) { + readAttribute = readAttribute_IE; + } else if (Prototype.Browser.Opera) { + readAttribute = readAttribute_Opera; + } + + + function writeAttribute(element, name, value) { + element = $(element); + var attributes = {}, table = ATTRIBUTE_TRANSLATIONS.write; + + if (typeof name === 'object') { + attributes = name; + } else { + attributes[name] = Object.isUndefined(value) ? true : value; + } + + for (var attr in attributes) { + name = table.names[attr] || attr; + value = attributes[attr]; + if (table.values[attr]) + name = table.values[attr](element, value) || name; + if (value === false || value === null) + element.removeAttribute(name); + else if (value === true) + element.setAttribute(name, name); + else element.setAttribute(name, value); + } + + return element; + } + + var PROBLEMATIC_HAS_ATTRIBUTE_WITH_CHECKBOXES = (function () { + if (!HAS_EXTENDED_CREATE_ELEMENT_SYNTAX) { + return false; + } + var checkbox = document.createElement(''); + checkbox.checked = true; + var node = checkbox.getAttributeNode('checked'); + return !node || !node.specified; + })(); + + function hasAttribute(element, attribute) { + attribute = ATTRIBUTE_TRANSLATIONS.has[attribute] || attribute; + var node = $(element).getAttributeNode(attribute); + return !!(node && node.specified); + } + + function hasAttribute_IE(element, attribute) { + if (attribute === 'checked') { + return element.checked; + } + return hasAttribute(element, attribute); + } + + GLOBAL.Element.Methods.Simulated.hasAttribute = + PROBLEMATIC_HAS_ATTRIBUTE_WITH_CHECKBOXES ? + hasAttribute_IE : hasAttribute; + + function classNames(element) { + return new Element.ClassNames(element); + } + + var regExpCache = {}; + function getRegExpForClassName(className) { + if (regExpCache[className]) return regExpCache[className]; + + var re = new RegExp("(^|\\s+)" + className + "(\\s+|$)"); + regExpCache[className] = re; + return re; + } + + function hasClassName(element, className) { + if (!(element = $(element))) return; + + var elementClassName = element.className; + + if (elementClassName.length === 0) return false; + if (elementClassName === className) return true; + + return getRegExpForClassName(className).test(elementClassName); + } + + function addClassName(element, className) { + if (!(element = $(element))) return; + + if (!hasClassName(element, className)) + element.className += (element.className ? ' ' : '') + className; + + return element; + } + + function removeClassName(element, className) { + if (!(element = $(element))) return; + + element.className = element.className.replace( + getRegExpForClassName(className), ' ').strip(); + + return element; + } + + function toggleClassName(element, className, bool) { + if (!(element = $(element))) return; + + if (Object.isUndefined(bool)) + bool = !hasClassName(element, className); + + var method = Element[bool ? 'addClassName' : 'removeClassName']; + return method(element, className); + } + + var ATTRIBUTE_TRANSLATIONS = {}; + + var classProp = 'className', forProp = 'for'; + + DIV.setAttribute(classProp, 'x'); + if (DIV.className !== 'x') { + DIV.setAttribute('class', 'x'); + if (DIV.className === 'x') + classProp = 'class'; + } + + var LABEL = document.createElement('label'); + LABEL.setAttribute(forProp, 'x'); + if (LABEL.htmlFor !== 'x') { + LABEL.setAttribute('htmlFor', 'x'); + if (LABEL.htmlFor === 'x') + forProp = 'htmlFor'; + } + LABEL = null; + + function _getAttr(element, attribute) { + return element.getAttribute(attribute); + } + + function _getAttr2(element, attribute) { + return element.getAttribute(attribute, 2); + } + + function _getAttrNode(element, attribute) { + var node = element.getAttributeNode(attribute); + return node ? node.value : ''; + } + + function _getFlag(element, attribute) { + return $(element).hasAttribute(attribute) ? attribute : null; + } + + DIV.onclick = Prototype.emptyFunction; + var onclickValue = DIV.getAttribute('onclick'); + + var _getEv; + + if (String(onclickValue).indexOf('{') > -1) { + _getEv = function(element, attribute) { + var value = element.getAttribute(attribute); + if (!value) return null; + value = value.toString(); + value = value.split('{')[1]; + value = value.split('}')[0]; + return value.strip(); + }; + } + else if (onclickValue === '') { + _getEv = function(element, attribute) { + var value = element.getAttribute(attribute); + if (!value) return null; + return value.strip(); + }; + } + + ATTRIBUTE_TRANSLATIONS.read = { + names: { + 'class': classProp, + 'className': classProp, + 'for': forProp, + 'htmlFor': forProp + }, + + values: { + style: function(element) { + return element.style.cssText.toLowerCase(); + }, + title: function(element) { + return element.title; + } + } + }; + + ATTRIBUTE_TRANSLATIONS.write = { + names: { + className: 'class', + htmlFor: 'for', + cellpadding: 'cellPadding', + cellspacing: 'cellSpacing' + }, + + values: { + checked: function(element, value) { + element.checked = !!value; + }, + + style: function(element, value) { + element.style.cssText = value ? value : ''; + } + } + }; + + ATTRIBUTE_TRANSLATIONS.has = { names: {} }; + + Object.extend(ATTRIBUTE_TRANSLATIONS.write.names, + ATTRIBUTE_TRANSLATIONS.read.names); + + var CAMEL_CASED_ATTRIBUTE_NAMES = $w('colSpan rowSpan vAlign dateTime ' + + 'accessKey tabIndex encType maxLength readOnly longDesc frameBorder'); + + for (var i = 0, attr; attr = CAMEL_CASED_ATTRIBUTE_NAMES[i]; i++) { + ATTRIBUTE_TRANSLATIONS.write.names[attr.toLowerCase()] = attr; + ATTRIBUTE_TRANSLATIONS.has.names[attr.toLowerCase()] = attr; + } + + Object.extend(ATTRIBUTE_TRANSLATIONS.read.values, { + href: _getAttr2, + src: _getAttr2, + type: _getAttr, + action: _getAttrNode, + disabled: _getFlag, + checked: _getFlag, + readonly: _getFlag, + multiple: _getFlag, + onload: _getEv, + onunload: _getEv, + onclick: _getEv, + ondblclick: _getEv, + onmousedown: _getEv, + onmouseup: _getEv, + onmouseover: _getEv, + onmousemove: _getEv, + onmouseout: _getEv, + onfocus: _getEv, + onblur: _getEv, + onkeypress: _getEv, + onkeydown: _getEv, + onkeyup: _getEv, + onsubmit: _getEv, + onreset: _getEv, + onselect: _getEv, + onchange: _getEv + }); + + + Object.extend(methods, { + identify: identify, + readAttribute: readAttribute, + writeAttribute: writeAttribute, + classNames: classNames, + hasClassName: hasClassName, + addClassName: addClassName, + removeClassName: removeClassName, + toggleClassName: toggleClassName + }); + + + function normalizeStyleName(style) { + if (style === 'float' || style === 'styleFloat') + return 'cssFloat'; + return style.camelize(); + } + + function normalizeStyleName_IE(style) { + if (style === 'float' || style === 'cssFloat') + return 'styleFloat'; + return style.camelize(); + } + + function setStyle(element, styles) { + element = $(element); + var elementStyle = element.style, match; + + if (Object.isString(styles)) { + elementStyle.cssText += ';' + styles; + if (styles.include('opacity')) { + var opacity = styles.match(/opacity:\s*(\d?\.?\d*)/)[1]; + Element.setOpacity(element, opacity); + } + return element; + } + + for (var property in styles) { + if (property === 'opacity') { + Element.setOpacity(element, styles[property]); + } else { + var value = styles[property]; + if (property === 'float' || property === 'cssFloat') { + property = Object.isUndefined(elementStyle.styleFloat) ? + 'cssFloat' : 'styleFloat'; + } + elementStyle[property] = value; + } + } + + return element; + } + + + function getStyle(element, style) { + element = $(element); + style = normalizeStyleName(style); + + var value = element.style[style]; + if (!value || value === 'auto') { + var css = document.defaultView.getComputedStyle(element, null); + value = css ? css[style] : null; + } + + if (style === 'opacity') return value ? parseFloat(value) : 1.0; + return value === 'auto' ? null : value; + } + + function getStyle_Opera(element, style) { + switch (style) { + case 'height': case 'width': + if (!Element.visible(element)) return null; + + var dim = parseInt(getStyle(element, style), 10); + + if (dim !== element['offset' + style.capitalize()]) + return dim + 'px'; + + return Element.measure(element, style); + + default: return getStyle(element, style); + } + } + + function getStyle_IE(element, style) { + element = $(element); + style = normalizeStyleName_IE(style); + + var value = element.style[style]; + if (!value && element.currentStyle) { + value = element.currentStyle[style]; + } + + if (style === 'opacity' && !STANDARD_CSS_OPACITY_SUPPORTED) + return getOpacity_IE(element); + + if (value === 'auto') { + if ((style === 'width' || style === 'height') && Element.visible(element)) + return Element.measure(element, style) + 'px'; + return null; + } + + return value; + } + + function stripAlphaFromFilter_IE(filter) { + return (filter || '').replace(/alpha\([^\)]*\)/gi, ''); + } + + function hasLayout_IE(element) { + if (!element.currentStyle || !element.currentStyle.hasLayout) + element.style.zoom = 1; + return element; + } + + var STANDARD_CSS_OPACITY_SUPPORTED = (function() { + DIV.style.cssText = "opacity:.55"; + return /^0.55/.test(DIV.style.opacity); + })(); + + function setOpacity(element, value) { + element = $(element); + if (value == 1 || value === '') value = ''; + else if (value < 0.00001) value = 0; + element.style.opacity = value; + return element; + } + + function setOpacity_IE(element, value) { + if (STANDARD_CSS_OPACITY_SUPPORTED) + return setOpacity(element, value); + + element = hasLayout_IE($(element)); + var filter = Element.getStyle(element, 'filter'), + style = element.style; + + if (value == 1 || value === '') { + filter = stripAlphaFromFilter_IE(filter); + if (filter) style.filter = filter; + else style.removeAttribute('filter'); + return element; + } + + if (value < 0.00001) value = 0; + + style.filter = stripAlphaFromFilter_IE(filter) + + 'alpha(opacity=' + (value * 100) + ')'; + + return element; + } + + + function getOpacity(element) { + return Element.getStyle(element, 'opacity'); + } + + function getOpacity_IE(element) { + if (STANDARD_CSS_OPACITY_SUPPORTED) + return getOpacity(element); + + var filter = Element.getStyle(element, 'filter'); + if (filter.length === 0) return 1.0; + var match = (filter || '').match(/alpha\(opacity=(.*)\)/); + if (match && match[1]) return parseFloat(match[1]) / 100; + return 1.0; + } + + + Object.extend(methods, { + setStyle: setStyle, + getStyle: getStyle, + setOpacity: setOpacity, + getOpacity: getOpacity + }); + + if ('styleFloat' in DIV.style) { + methods.getStyle = getStyle_IE; + methods.setOpacity = setOpacity_IE; + methods.getOpacity = getOpacity_IE; + } + + var UID = 0; + + GLOBAL.Element.Storage = { UID: 1 }; + + function getUniqueElementID(element) { + if (element === window) return 0; + + if (typeof element._prototypeUID === 'undefined') + element._prototypeUID = Element.Storage.UID++; + return element._prototypeUID; + } + + function getUniqueElementID_IE(element) { + if (element === window) return 0; + if (element == document) return 1; + return element.uniqueID; + } + + var HAS_UNIQUE_ID_PROPERTY = ('uniqueID' in DIV); + if (HAS_UNIQUE_ID_PROPERTY) + getUniqueElementID = getUniqueElementID_IE; + + function getStorage(element) { + if (!(element = $(element))) return; + + var uid = getUniqueElementID(element); + + if (!Element.Storage[uid]) + Element.Storage[uid] = $H(); + + return Element.Storage[uid]; + } + + function store(element, key, value) { + if (!(element = $(element))) return; + var storage = getStorage(element); + if (arguments.length === 2) { + storage.update(key); + } else { + storage.set(key, value); + } + return element; + } + + function retrieve(element, key, defaultValue) { + if (!(element = $(element))) return; + var storage = getStorage(element), value = storage.get(key); + + if (Object.isUndefined(value)) { + storage.set(key, defaultValue); + value = defaultValue; + } + + return value; + } + + + Object.extend(methods, { + getStorage: getStorage, + store: store, + retrieve: retrieve + }); + + + var Methods = {}, ByTag = Element.Methods.ByTag, + F = Prototype.BrowserFeatures; + + if (!F.ElementExtensions && ('__proto__' in DIV)) { + GLOBAL.HTMLElement = {}; + GLOBAL.HTMLElement.prototype = DIV['__proto__']; + F.ElementExtensions = true; + } + + function checkElementPrototypeDeficiency(tagName) { + if (typeof window.Element === 'undefined') return false; + if (!HAS_EXTENDED_CREATE_ELEMENT_SYNTAX) return false; + var proto = window.Element.prototype; + if (proto) { + var id = '_' + (Math.random() + '').slice(2), + el = document.createElement(tagName); + proto[id] = 'x'; + var isBuggy = (el[id] !== 'x'); + delete proto[id]; + el = null; + return isBuggy; + } + + return false; + } + + var HTMLOBJECTELEMENT_PROTOTYPE_BUGGY = + checkElementPrototypeDeficiency('object'); + + function extendElementWith(element, methods) { + for (var property in methods) { + var value = methods[property]; + if (Object.isFunction(value) && !(property in element)) + element[property] = value.methodize(); + } + } + + var EXTENDED = {}; + function elementIsExtended(element) { + var uid = getUniqueElementID(element); + return (uid in EXTENDED); + } + + function extend(element) { + if (!element || elementIsExtended(element)) return element; + if (element.nodeType !== Node.ELEMENT_NODE || element == window) + return element; + + var methods = Object.clone(Methods), + tagName = element.tagName.toUpperCase(); + + if (ByTag[tagName]) Object.extend(methods, ByTag[tagName]); + + extendElementWith(element, methods); + EXTENDED[getUniqueElementID(element)] = true; + return element; + } + + function extend_IE8(element) { + if (!element || elementIsExtended(element)) return element; + + var t = element.tagName; + if (t && (/^(?:object|applet|embed)$/i.test(t))) { + extendElementWith(element, Element.Methods); + extendElementWith(element, Element.Methods.Simulated); + extendElementWith(element, Element.Methods.ByTag[t.toUpperCase()]); + } + + return element; + } + + if (F.SpecificElementExtensions) { + extend = HTMLOBJECTELEMENT_PROTOTYPE_BUGGY ? extend_IE8 : Prototype.K; + } + + function addMethodsToTagName(tagName, methods) { + tagName = tagName.toUpperCase(); + if (!ByTag[tagName]) ByTag[tagName] = {}; + Object.extend(ByTag[tagName], methods); + } + + function mergeMethods(destination, methods, onlyIfAbsent) { + if (Object.isUndefined(onlyIfAbsent)) onlyIfAbsent = false; + for (var property in methods) { + var value = methods[property]; + if (!Object.isFunction(value)) continue; + if (!onlyIfAbsent || !(property in destination)) + destination[property] = value.methodize(); + } + } + + function findDOMClass(tagName) { + var klass; + var trans = { + "OPTGROUP": "OptGroup", "TEXTAREA": "TextArea", "P": "Paragraph", + "FIELDSET": "FieldSet", "UL": "UList", "OL": "OList", "DL": "DList", + "DIR": "Directory", "H1": "Heading", "H2": "Heading", "H3": "Heading", + "H4": "Heading", "H5": "Heading", "H6": "Heading", "Q": "Quote", + "INS": "Mod", "DEL": "Mod", "A": "Anchor", "IMG": "Image", "CAPTION": + "TableCaption", "COL": "TableCol", "COLGROUP": "TableCol", "THEAD": + "TableSection", "TFOOT": "TableSection", "TBODY": "TableSection", "TR": + "TableRow", "TH": "TableCell", "TD": "TableCell", "FRAMESET": + "FrameSet", "IFRAME": "IFrame" + }; + if (trans[tagName]) klass = 'HTML' + trans[tagName] + 'Element'; + if (window[klass]) return window[klass]; + klass = 'HTML' + tagName + 'Element'; + if (window[klass]) return window[klass]; + klass = 'HTML' + tagName.capitalize() + 'Element'; + if (window[klass]) return window[klass]; + + var element = document.createElement(tagName), + proto = element['__proto__'] || element.constructor.prototype; + + element = null; + return proto; + } + + function addMethods(methods) { + if (arguments.length === 0) addFormMethods(); + + if (arguments.length === 2) { + var tagName = methods; + methods = arguments[1]; + } + + if (!tagName) { + Object.extend(Element.Methods, methods || {}); + } else { + if (Object.isArray(tagName)) { + for (var i = 0, tag; tag = tagName[i]; i++) + addMethodsToTagName(tag, methods); + } else { + addMethodsToTagName(tagName, methods); + } + } + + var ELEMENT_PROTOTYPE = window.HTMLElement ? HTMLElement.prototype : + Element.prototype; + + if (F.ElementExtensions) { + mergeMethods(ELEMENT_PROTOTYPE, Element.Methods); + mergeMethods(ELEMENT_PROTOTYPE, Element.Methods.Simulated, true); + } + + if (F.SpecificElementExtensions) { + for (var tag in Element.Methods.ByTag) { + var klass = findDOMClass(tag); + if (Object.isUndefined(klass)) continue; + mergeMethods(klass.prototype, ByTag[tag]); + } + } + + Object.extend(Element, Element.Methods); + Object.extend(Element, Element.Methods.Simulated); + delete Element.ByTag; + delete Element.Simulated; + + Element.extend.refresh(); + + ELEMENT_CACHE = {}; + } + + Object.extend(GLOBAL.Element, { + extend: extend, + addMethods: addMethods + }); + + if (extend === Prototype.K) { + GLOBAL.Element.extend.refresh = Prototype.emptyFunction; + } else { + GLOBAL.Element.extend.refresh = function() { + if (Prototype.BrowserFeatures.ElementExtensions) return; + Object.extend(Methods, Element.Methods); + Object.extend(Methods, Element.Methods.Simulated); + + EXTENDED = {}; + }; + } + + function addFormMethods() { + Object.extend(Form, Form.Methods); + Object.extend(Form.Element, Form.Element.Methods); + Object.extend(Element.Methods.ByTag, { + "FORM": Object.clone(Form.Methods), + "INPUT": Object.clone(Form.Element.Methods), + "SELECT": Object.clone(Form.Element.Methods), + "TEXTAREA": Object.clone(Form.Element.Methods), + "BUTTON": Object.clone(Form.Element.Methods) + }); + } + + Element.addMethods(methods); + + function destroyCache_IE() { + DIV = null; + ELEMENT_CACHE = null; + } + + if (window.attachEvent) + window.attachEvent('onunload', destroyCache_IE); + +})(this); +(function() { + + function toDecimal(pctString) { + var match = pctString.match(/^(\d+)%?$/i); + if (!match) return null; + return (Number(match[1]) / 100); + } + + function getRawStyle(element, style) { + element = $(element); + + var value = element.style[style]; + if (!value || value === 'auto') { + var css = document.defaultView.getComputedStyle(element, null); + value = css ? css[style] : null; + } + + if (style === 'opacity') return value ? parseFloat(value) : 1.0; + return value === 'auto' ? null : value; + } + + function getRawStyle_IE(element, style) { + var value = element.style[style]; + if (!value && element.currentStyle) { + value = element.currentStyle[style]; + } + return value; + } + + function getContentWidth(element, context) { + var boxWidth = element.offsetWidth; + + var bl = getPixelValue(element, 'borderLeftWidth', context) || 0; + var br = getPixelValue(element, 'borderRightWidth', context) || 0; + var pl = getPixelValue(element, 'paddingLeft', context) || 0; + var pr = getPixelValue(element, 'paddingRight', context) || 0; + + return boxWidth - bl - br - pl - pr; + } + + if ('currentStyle' in document.documentElement) { + getRawStyle = getRawStyle_IE; + } + + + function getPixelValue(value, property, context) { + var element = null; + if (Object.isElement(value)) { + element = value; + value = getRawStyle(element, property); + } + + if (value === null || Object.isUndefined(value)) { + return null; + } + + if ((/^(?:-)?\d+(\.\d+)?(px)?$/i).test(value)) { + return window.parseFloat(value); + } + + var isPercentage = value.include('%'), isViewport = (context === document.viewport); + + if (/\d/.test(value) && element && element.runtimeStyle && !(isPercentage && isViewport)) { + var style = element.style.left, rStyle = element.runtimeStyle.left; + element.runtimeStyle.left = element.currentStyle.left; + element.style.left = value || 0; + value = element.style.pixelLeft; + element.style.left = style; + element.runtimeStyle.left = rStyle; + + return value; + } + + if (element && isPercentage) { + context = context || element.parentNode; + var decimal = toDecimal(value), whole = null; + + var isHorizontal = property.include('left') || property.include('right') || + property.include('width'); + + var isVertical = property.include('top') || property.include('bottom') || + property.include('height'); + + if (context === document.viewport) { + if (isHorizontal) { + whole = document.viewport.getWidth(); + } else if (isVertical) { + whole = document.viewport.getHeight(); + } + } else { + if (isHorizontal) { + whole = $(context).measure('width'); + } else if (isVertical) { + whole = $(context).measure('height'); + } + } + + return (whole === null) ? 0 : whole * decimal; + } + + return 0; + } + + function toCSSPixels(number) { + if (Object.isString(number) && number.endsWith('px')) + return number; + return number + 'px'; + } + + function isDisplayed(element) { + while (element && element.parentNode) { + var display = element.getStyle('display'); + if (display === 'none') { + return false; + } + element = $(element.parentNode); + } + return true; + } + + var hasLayout = Prototype.K; + if ('currentStyle' in document.documentElement) { + hasLayout = function(element) { + if (!element.currentStyle.hasLayout) { + element.style.zoom = 1; + } + return element; + }; + } + + function cssNameFor(key) { + if (key.include('border')) key = key + '-width'; + return key.camelize(); + } + + Element.Layout = Class.create(Hash, { + initialize: function($super, element, preCompute) { + $super(); + this.element = $(element); + + Element.Layout.PROPERTIES.each( function(property) { + this._set(property, null); + }, this); + + if (preCompute) { + this._preComputing = true; + this._begin(); + Element.Layout.PROPERTIES.each( this._compute, this ); + this._end(); + this._preComputing = false; + } + }, + + _set: function(property, value) { + return Hash.prototype.set.call(this, property, value); + }, + + set: function(property, value) { + throw "Properties of Element.Layout are read-only."; + }, + + get: function($super, property) { + var value = $super(property); + return value === null ? this._compute(property) : value; + }, + + _begin: function() { + if (this._isPrepared()) return; + + var element = this.element; + if (isDisplayed(element)) { + this._setPrepared(true); + return; + } + + + var originalStyles = { + position: element.style.position || '', + width: element.style.width || '', + visibility: element.style.visibility || '', + display: element.style.display || '' + }; + + element.store('prototype_original_styles', originalStyles); + + var position = getRawStyle(element, 'position'), width = element.offsetWidth; + + if (width === 0 || width === null) { + element.style.display = 'block'; + width = element.offsetWidth; + } + + var context = (position === 'fixed') ? document.viewport : + element.parentNode; + + var tempStyles = { + visibility: 'hidden', + display: 'block' + }; + + if (position !== 'fixed') tempStyles.position = 'absolute'; + + element.setStyle(tempStyles); + + var positionedWidth = element.offsetWidth, newWidth; + if (width && (positionedWidth === width)) { + newWidth = getContentWidth(element, context); + } else if (position === 'absolute' || position === 'fixed') { + newWidth = getContentWidth(element, context); + } else { + var parent = element.parentNode, pLayout = $(parent).getLayout(); + + newWidth = pLayout.get('width') - + this.get('margin-left') - + this.get('border-left') - + this.get('padding-left') - + this.get('padding-right') - + this.get('border-right') - + this.get('margin-right'); + } + + element.setStyle({ width: newWidth + 'px' }); + + this._setPrepared(true); + }, + + _end: function() { + var element = this.element; + var originalStyles = element.retrieve('prototype_original_styles'); + element.store('prototype_original_styles', null); + element.setStyle(originalStyles); + this._setPrepared(false); + }, + + _compute: function(property) { + var COMPUTATIONS = Element.Layout.COMPUTATIONS; + if (!(property in COMPUTATIONS)) { + throw "Property not found."; + } + + return this._set(property, COMPUTATIONS[property].call(this, this.element)); + }, + + _isPrepared: function() { + return this.element.retrieve('prototype_element_layout_prepared', false); + }, + + _setPrepared: function(bool) { + return this.element.store('prototype_element_layout_prepared', bool); + }, + + toObject: function() { + var args = $A(arguments); + var keys = (args.length === 0) ? Element.Layout.PROPERTIES : + args.join(' ').split(' '); + var obj = {}; + keys.each( function(key) { + if (!Element.Layout.PROPERTIES.include(key)) return; + var value = this.get(key); + if (value != null) obj[key] = value; + }, this); + return obj; + }, + + toHash: function() { + var obj = this.toObject.apply(this, arguments); + return new Hash(obj); + }, + + toCSS: function() { + var args = $A(arguments); + var keys = (args.length === 0) ? Element.Layout.PROPERTIES : + args.join(' ').split(' '); + var css = {}; + + keys.each( function(key) { + if (!Element.Layout.PROPERTIES.include(key)) return; + if (Element.Layout.COMPOSITE_PROPERTIES.include(key)) return; + + var value = this.get(key); + if (value != null) css[cssNameFor(key)] = value + 'px'; + }, this); + return css; + }, + + inspect: function() { + return "#"; + } + }); + + Object.extend(Element.Layout, { + PROPERTIES: $w('height width top left right bottom border-left border-right border-top border-bottom padding-left padding-right padding-top padding-bottom margin-top margin-bottom margin-left margin-right padding-box-width padding-box-height border-box-width border-box-height margin-box-width margin-box-height'), + + COMPOSITE_PROPERTIES: $w('padding-box-width padding-box-height margin-box-width margin-box-height border-box-width border-box-height'), + + COMPUTATIONS: { + 'height': function(element) { + if (!this._preComputing) this._begin(); + + var bHeight = this.get('border-box-height'); + if (bHeight <= 0) { + if (!this._preComputing) this._end(); + return 0; + } + + var bTop = this.get('border-top'), + bBottom = this.get('border-bottom'); + + var pTop = this.get('padding-top'), + pBottom = this.get('padding-bottom'); + + if (!this._preComputing) this._end(); + + return bHeight - bTop - bBottom - pTop - pBottom; + }, + + 'width': function(element) { + if (!this._preComputing) this._begin(); + + var bWidth = this.get('border-box-width'); + if (bWidth <= 0) { + if (!this._preComputing) this._end(); + return 0; + } + + var bLeft = this.get('border-left'), + bRight = this.get('border-right'); + + var pLeft = this.get('padding-left'), + pRight = this.get('padding-right'); + + if (!this._preComputing) this._end(); + return bWidth - bLeft - bRight - pLeft - pRight; + }, + + 'padding-box-height': function(element) { + var height = this.get('height'), + pTop = this.get('padding-top'), + pBottom = this.get('padding-bottom'); + + return height + pTop + pBottom; + }, + + 'padding-box-width': function(element) { + var width = this.get('width'), + pLeft = this.get('padding-left'), + pRight = this.get('padding-right'); + + return width + pLeft + pRight; + }, + + 'border-box-height': function(element) { + if (!this._preComputing) this._begin(); + var height = element.offsetHeight; + if (!this._preComputing) this._end(); + return height; + }, + + 'border-box-width': function(element) { + if (!this._preComputing) this._begin(); + var width = element.offsetWidth; + if (!this._preComputing) this._end(); + return width; + }, + + 'margin-box-height': function(element) { + var bHeight = this.get('border-box-height'), + mTop = this.get('margin-top'), + mBottom = this.get('margin-bottom'); + + if (bHeight <= 0) return 0; + + return bHeight + mTop + mBottom; + }, + + 'margin-box-width': function(element) { + var bWidth = this.get('border-box-width'), + mLeft = this.get('margin-left'), + mRight = this.get('margin-right'); + + if (bWidth <= 0) return 0; + + return bWidth + mLeft + mRight; + }, + + 'top': function(element) { + var offset = element.positionedOffset(); + return offset.top; + }, + + 'bottom': function(element) { + var offset = element.positionedOffset(), + parent = element.getOffsetParent(), + pHeight = parent.measure('height'); + + var mHeight = this.get('border-box-height'); + + return pHeight - mHeight - offset.top; + }, + + 'left': function(element) { + var offset = element.positionedOffset(); + return offset.left; + }, + + 'right': function(element) { + var offset = element.positionedOffset(), + parent = element.getOffsetParent(), + pWidth = parent.measure('width'); + + var mWidth = this.get('border-box-width'); + + return pWidth - mWidth - offset.left; + }, + + 'padding-top': function(element) { + return getPixelValue(element, 'paddingTop'); + }, + + 'padding-bottom': function(element) { + return getPixelValue(element, 'paddingBottom'); + }, + + 'padding-left': function(element) { + return getPixelValue(element, 'paddingLeft'); + }, + + 'padding-right': function(element) { + return getPixelValue(element, 'paddingRight'); + }, + + 'border-top': function(element) { + return getPixelValue(element, 'borderTopWidth'); + }, + + 'border-bottom': function(element) { + return getPixelValue(element, 'borderBottomWidth'); + }, + + 'border-left': function(element) { + return getPixelValue(element, 'borderLeftWidth'); + }, + + 'border-right': function(element) { + return getPixelValue(element, 'borderRightWidth'); + }, + + 'margin-top': function(element) { + return getPixelValue(element, 'marginTop'); + }, + + 'margin-bottom': function(element) { + return getPixelValue(element, 'marginBottom'); + }, + + 'margin-left': function(element) { + return getPixelValue(element, 'marginLeft'); + }, + + 'margin-right': function(element) { + return getPixelValue(element, 'marginRight'); + } + } + }); + + if ('getBoundingClientRect' in document.documentElement) { + Object.extend(Element.Layout.COMPUTATIONS, { + 'right': function(element) { + var parent = hasLayout(element.getOffsetParent()); + var rect = element.getBoundingClientRect(), + pRect = parent.getBoundingClientRect(); + + return (pRect.right - rect.right).round(); + }, + + 'bottom': function(element) { + var parent = hasLayout(element.getOffsetParent()); + var rect = element.getBoundingClientRect(), + pRect = parent.getBoundingClientRect(); + + return (pRect.bottom - rect.bottom).round(); + } + }); + } + + Element.Offset = Class.create({ + initialize: function(left, top) { + this.left = left.round(); + this.top = top.round(); + + this[0] = this.left; + this[1] = this.top; + }, + + relativeTo: function(offset) { + return new Element.Offset( + this.left - offset.left, + this.top - offset.top + ); + }, + + inspect: function() { + return "#".interpolate(this); + }, + + toString: function() { + return "[#{left}, #{top}]".interpolate(this); + }, + + toArray: function() { + return [this.left, this.top]; + } + }); + + function getLayout(element, preCompute) { + return new Element.Layout(element, preCompute); + } + + function measure(element, property) { + return $(element).getLayout().get(property); + } + + function getHeight(element) { + return Element.getDimensions(element).height; + } + + function getWidth(element) { + return Element.getDimensions(element).width; + } + + function getDimensions(element) { + element = $(element); + var display = Element.getStyle(element, 'display'); + + if (display && display !== 'none') { + return { width: element.offsetWidth, height: element.offsetHeight }; + } + + var style = element.style; + var originalStyles = { + visibility: style.visibility, + position: style.position, + display: style.display + }; + + var newStyles = { + visibility: 'hidden', + display: 'block' + }; + + if (originalStyles.position !== 'fixed') + newStyles.position = 'absolute'; + + Element.setStyle(element, newStyles); + + var dimensions = { + width: element.offsetWidth, + height: element.offsetHeight + }; + + Element.setStyle(element, originalStyles); + + return dimensions; + } + + function getOffsetParent(element) { + element = $(element); + + if (isDocument(element) || isDetached(element) || isBody(element) || isHtml(element)) + return $(document.body); + + var isInline = (Element.getStyle(element, 'display') === 'inline'); + if (!isInline && element.offsetParent) return $(element.offsetParent); + + while ((element = element.parentNode) && element !== document.body) { + if (Element.getStyle(element, 'position') !== 'static') { + return isHtml(element) ? $(document.body) : $(element); + } + } + + return $(document.body); + } + + + function cumulativeOffset(element) { + element = $(element); + var valueT = 0, valueL = 0; + if (element.parentNode) { + do { + valueT += element.offsetTop || 0; + valueL += element.offsetLeft || 0; + element = element.offsetParent; + } while (element); + } + return new Element.Offset(valueL, valueT); + } + + function positionedOffset(element) { + element = $(element); + + var layout = element.getLayout(); + + var valueT = 0, valueL = 0; + do { + valueT += element.offsetTop || 0; + valueL += element.offsetLeft || 0; + element = element.offsetParent; + if (element) { + if (isBody(element)) break; + var p = Element.getStyle(element, 'position'); + if (p !== 'static') break; + } + } while (element); + + valueL -= layout.get('margin-top'); + valueT -= layout.get('margin-left'); + + return new Element.Offset(valueL, valueT); + } + + function cumulativeScrollOffset(element) { + var valueT = 0, valueL = 0; + do { + if (element === document.body) { + var bodyScrollNode = document.documentElement || document.body.parentNode || document.body; + valueT += !Object.isUndefined(window.pageYOffset) ? window.pageYOffset : bodyScrollNode.scrollTop || 0; + valueL += !Object.isUndefined(window.pageXOffset) ? window.pageXOffset : bodyScrollNode.scrollLeft || 0; + break; + } else { + valueT += element.scrollTop || 0; + valueL += element.scrollLeft || 0; + element = element.parentNode; + } + } while (element); + return new Element.Offset(valueL, valueT); + } + + function viewportOffset(forElement) { + var valueT = 0, valueL = 0, docBody = document.body; + + forElement = $(forElement); + var element = forElement; + do { + valueT += element.offsetTop || 0; + valueL += element.offsetLeft || 0; + if (element.offsetParent == docBody && + Element.getStyle(element, 'position') == 'absolute') break; + } while (element = element.offsetParent); + + element = forElement; + do { + if (element != docBody) { + valueT -= element.scrollTop || 0; + valueL -= element.scrollLeft || 0; + } + } while (element = element.parentNode); + return new Element.Offset(valueL, valueT); + } + + function absolutize(element) { + element = $(element); + + if (Element.getStyle(element, 'position') === 'absolute') { + return element; + } + + var offsetParent = getOffsetParent(element); + var eOffset = element.viewportOffset(), + pOffset = offsetParent.viewportOffset(); + + var offset = eOffset.relativeTo(pOffset); + var layout = element.getLayout(); + + element.store('prototype_absolutize_original_styles', { + position: element.getStyle('position'), + left: element.getStyle('left'), + top: element.getStyle('top'), + width: element.getStyle('width'), + height: element.getStyle('height') + }); + + element.setStyle({ + position: 'absolute', + top: offset.top + 'px', + left: offset.left + 'px', + width: layout.get('width') + 'px', + height: layout.get('height') + 'px' + }); + + return element; + } + + function relativize(element) { + element = $(element); + if (Element.getStyle(element, 'position') === 'relative') { + return element; + } + + var originalStyles = + element.retrieve('prototype_absolutize_original_styles'); + + if (originalStyles) element.setStyle(originalStyles); + return element; + } + + + function scrollTo(element) { + element = $(element); + var pos = Element.cumulativeOffset(element); + window.scrollTo(pos.left, pos.top); + return element; + } + + + function makePositioned(element) { + element = $(element); + var position = Element.getStyle(element, 'position'), styles = {}; + if (position === 'static' || !position) { + styles.position = 'relative'; + if (Prototype.Browser.Opera) { + styles.top = 0; + styles.left = 0; + } + Element.setStyle(element, styles); + Element.store(element, 'prototype_made_positioned', true); + } + return element; + } + + function undoPositioned(element) { + element = $(element); + var storage = Element.getStorage(element), + madePositioned = storage.get('prototype_made_positioned'); + + if (madePositioned) { + storage.unset('prototype_made_positioned'); + Element.setStyle(element, { + position: '', + top: '', + bottom: '', + left: '', + right: '' + }); + } + return element; + } + + function makeClipping(element) { + element = $(element); + + var storage = Element.getStorage(element), + madeClipping = storage.get('prototype_made_clipping'); + + if (Object.isUndefined(madeClipping)) { + var overflow = Element.getStyle(element, 'overflow'); + storage.set('prototype_made_clipping', overflow); + if (overflow !== 'hidden') + element.style.overflow = 'hidden'; + } + + return element; + } + + function undoClipping(element) { + element = $(element); + var storage = Element.getStorage(element), + overflow = storage.get('prototype_made_clipping'); + + if (!Object.isUndefined(overflow)) { + storage.unset('prototype_made_clipping'); + element.style.overflow = overflow || ''; + } + + return element; + } + + function clonePosition(element, source, options) { + options = Object.extend({ + setLeft: true, + setTop: true, + setWidth: true, + setHeight: true, + offsetTop: 0, + offsetLeft: 0 + }, options || {}); + + source = $(source); + element = $(element); + var p, delta, layout, styles = {}; + + if (options.setLeft || options.setTop) { + p = Element.viewportOffset(source); + delta = [0, 0]; + if (Element.getStyle(element, 'position') === 'absolute') { + var parent = Element.getOffsetParent(element); + if (parent !== document.body) delta = Element.viewportOffset(parent); + } + } + + if (options.setWidth || options.setHeight) { + layout = Element.getLayout(source); + } + + if (options.setLeft) + styles.left = (p[0] - delta[0] + options.offsetLeft) + 'px'; + if (options.setTop) + styles.top = (p[1] - delta[1] + options.offsetTop) + 'px'; + + if (options.setWidth) + styles.width = layout.get('border-box-width') + 'px'; + if (options.setHeight) + styles.height = layout.get('border-box-height') + 'px'; + + return Element.setStyle(element, styles); + } + + + if (Prototype.Browser.IE) { + getOffsetParent = getOffsetParent.wrap( + function(proceed, element) { + element = $(element); + + if (isDocument(element) || isDetached(element) || isBody(element) || isHtml(element)) + return $(document.body); + + var position = element.getStyle('position'); + if (position !== 'static') return proceed(element); + + element.setStyle({ position: 'relative' }); + var value = proceed(element); + element.setStyle({ position: position }); + return value; + } + ); + + positionedOffset = positionedOffset.wrap(function(proceed, element) { + element = $(element); + if (!element.parentNode) return new Element.Offset(0, 0); + var position = element.getStyle('position'); + if (position !== 'static') return proceed(element); + + var offsetParent = element.getOffsetParent(); + if (offsetParent && offsetParent.getStyle('position') === 'fixed') + hasLayout(offsetParent); + + element.setStyle({ position: 'relative' }); + var value = proceed(element); + element.setStyle({ position: position }); + return value; + }); + } else if (Prototype.Browser.Webkit) { + cumulativeOffset = function(element) { + element = $(element); + var valueT = 0, valueL = 0; + do { + valueT += element.offsetTop || 0; + valueL += element.offsetLeft || 0; + if (element.offsetParent == document.body) { + if (Element.getStyle(element, 'position') == 'absolute') break; + } + + element = element.offsetParent; + } while (element); + + return new Element.Offset(valueL, valueT); + }; + } + + + Element.addMethods({ + getLayout: getLayout, + measure: measure, + getWidth: getWidth, + getHeight: getHeight, + getDimensions: getDimensions, + getOffsetParent: getOffsetParent, + cumulativeOffset: cumulativeOffset, + positionedOffset: positionedOffset, + cumulativeScrollOffset: cumulativeScrollOffset, + viewportOffset: viewportOffset, + absolutize: absolutize, + relativize: relativize, + scrollTo: scrollTo, + makePositioned: makePositioned, + undoPositioned: undoPositioned, + makeClipping: makeClipping, + undoClipping: undoClipping, + clonePosition: clonePosition + }); + + function isBody(element) { + return element.nodeName.toUpperCase() === 'BODY'; + } + + function isHtml(element) { + return element.nodeName.toUpperCase() === 'HTML'; + } + + function isDocument(element) { + return element.nodeType === Node.DOCUMENT_NODE; + } + + function isDetached(element) { + return element !== document.body && + !Element.descendantOf(element, document.body); + } + + if ('getBoundingClientRect' in document.documentElement) { + Element.addMethods({ + viewportOffset: function(element) { + element = $(element); + if (isDetached(element)) return new Element.Offset(0, 0); + + var rect = element.getBoundingClientRect(), + docEl = document.documentElement; + return new Element.Offset(rect.left - docEl.clientLeft, + rect.top - docEl.clientTop); + } + }); + } + + +})(); + +(function() { + + var IS_OLD_OPERA = Prototype.Browser.Opera && + (window.parseFloat(window.opera.version()) < 9.5); + var ROOT = null; + function getRootElement() { + if (ROOT) return ROOT; + ROOT = IS_OLD_OPERA ? document.body : document.documentElement; + return ROOT; + } + + function getDimensions() { + return { width: this.getWidth(), height: this.getHeight() }; + } + + function getWidth() { + return getRootElement().clientWidth; + } + + function getHeight() { + return getRootElement().clientHeight; + } + + function getScrollOffsets() { + var x = window.pageXOffset || document.documentElement.scrollLeft || + document.body.scrollLeft; + var y = window.pageYOffset || document.documentElement.scrollTop || + document.body.scrollTop; + + return new Element.Offset(x, y); + } + + document.viewport = { + getDimensions: getDimensions, + getWidth: getWidth, + getHeight: getHeight, + getScrollOffsets: getScrollOffsets + }; + +})(); +window.$$ = function() { + var expression = $A(arguments).join(', '); + return Prototype.Selector.select(expression, document); +}; + +Prototype.Selector = (function() { + + function select() { + throw new Error('Method "Prototype.Selector.select" must be defined.'); + } + + function match() { + throw new Error('Method "Prototype.Selector.match" must be defined.'); + } + + function find(elements, expression, index) { + index = index || 0; + var match = Prototype.Selector.match, length = elements.length, matchIndex = 0, i; + + for (i = 0; i < length; i++) { + if (match(elements[i], expression) && index == matchIndex++) { + return Element.extend(elements[i]); + } + } + } + + function extendElements(elements) { + for (var i = 0, length = elements.length; i < length; i++) { + Element.extend(elements[i]); + } + return elements; + } + + + var K = Prototype.K; + + return { + select: select, + match: match, + find: find, + extendElements: (Element.extend === K) ? K : extendElements, + extendElement: Element.extend + }; +})(); +Prototype._original_property = window.Sizzle; +/*! + * Sizzle CSS Selector Engine v@VERSION + * http://sizzlejs.com/ + * + * Copyright 2013 jQuery Foundation, Inc. and other contributors + * Released under the MIT license + * http://jquery.org/license + * + * Date: @DATE + */ +(function( window ) { + +var i, + support, + Expr, + getText, + isXML, + compile, + select, + outermostContext, + sortInput, + hasDuplicate, + + setDocument, + document, + docElem, + documentIsHTML, + rbuggyQSA, + rbuggyMatches, + matches, + contains, + + expando = "sizzle" + -(new Date()), + preferredDoc = window.document, + dirruns = 0, + done = 0, + classCache = createCache(), + tokenCache = createCache(), + compilerCache = createCache(), + sortOrder = function( a, b ) { + if ( a === b ) { + hasDuplicate = true; + } + return 0; + }, + + strundefined = typeof undefined, + MAX_NEGATIVE = 1 << 31, + + hasOwn = ({}).hasOwnProperty, + arr = [], + pop = arr.pop, + push_native = arr.push, + push = arr.push, + slice = arr.slice, + indexOf = arr.indexOf || function( elem ) { + var i = 0, + len = this.length; + for ( ; i < len; i++ ) { + if ( this[i] === elem ) { + return i; + } + } + return -1; + }, + + booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped", + + + whitespace = "[\\x20\\t\\r\\n\\f]", + characterEncoding = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+", + + identifier = characterEncoding.replace( "w", "w#" ), + + attributes = "\\[" + whitespace + "*(" + characterEncoding + ")" + whitespace + + "*(?:([*^$|!~]?=)" + whitespace + "*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|(" + identifier + ")|)|)" + whitespace + "*\\]", + + pseudos = ":(" + characterEncoding + ")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|" + attributes.replace( 3, 8 ) + ")*)|.*)\\)|)", + + rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ), + + rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), + rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ), + + rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]", "g" ), + + rpseudo = new RegExp( pseudos ), + ridentifier = new RegExp( "^" + identifier + "$" ), + + matchExpr = { + "ID": new RegExp( "^#(" + characterEncoding + ")" ), + "CLASS": new RegExp( "^\\.(" + characterEncoding + ")" ), + "TAG": new RegExp( "^(" + characterEncoding.replace( "w", "w*" ) + ")" ), + "ATTR": new RegExp( "^" + attributes ), + "PSEUDO": new RegExp( "^" + pseudos ), + "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace + + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace + + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), + "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), + "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + + whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) + }, + + rinputs = /^(?:input|select|textarea|button)$/i, + rheader = /^h\d$/i, + + rnative = /^[^{]+\{\s*\[native \w/, + + rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, + + rsibling = /[+~]/, + rescape = /'|\\/g, + + runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ), + funescape = function( _, escaped, escapedWhitespace ) { + var high = "0x" + escaped - 0x10000; + return high !== high || escapedWhitespace ? + escaped : + high < 0 ? + String.fromCharCode( high + 0x10000 ) : + String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); + }; + +try { + push.apply( + (arr = slice.call( preferredDoc.childNodes )), + preferredDoc.childNodes + ); + arr[ preferredDoc.childNodes.length ].nodeType; +} catch ( e ) { + push = { apply: arr.length ? + + function( target, els ) { + push_native.apply( target, slice.call(els) ); + } : + + function( target, els ) { + var j = target.length, + i = 0; + while ( (target[j++] = els[i++]) ) {} + target.length = j - 1; + } + }; +} + +function Sizzle( selector, context, results, seed ) { + var match, elem, m, nodeType, + i, groups, old, nid, newContext, newSelector; + + if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) { + setDocument( context ); + } + + context = context || document; + results = results || []; + + if ( !selector || typeof selector !== "string" ) { + return results; + } + + if ( (nodeType = context.nodeType) !== 1 && nodeType !== 9 ) { + return []; + } + + if ( documentIsHTML && !seed ) { + + if ( (match = rquickExpr.exec( selector )) ) { + if ( (m = match[1]) ) { + if ( nodeType === 9 ) { + elem = context.getElementById( m ); + if ( elem && elem.parentNode ) { + if ( elem.id === m ) { + results.push( elem ); + return results; + } + } else { + return results; + } + } else { + if ( context.ownerDocument && (elem = context.ownerDocument.getElementById( m )) && + contains( context, elem ) && elem.id === m ) { + results.push( elem ); + return results; + } + } + + } else if ( match[2] ) { + push.apply( results, context.getElementsByTagName( selector ) ); + return results; + + } else if ( (m = match[3]) && support.getElementsByClassName && context.getElementsByClassName ) { + push.apply( results, context.getElementsByClassName( m ) ); + return results; + } + } + + if ( support.qsa && (!rbuggyQSA || !rbuggyQSA.test( selector )) ) { + nid = old = expando; + newContext = context; + newSelector = nodeType === 9 && selector; + + if ( nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) { + groups = tokenize( selector ); + + if ( (old = context.getAttribute("id")) ) { + nid = old.replace( rescape, "\\$&" ); + } else { + context.setAttribute( "id", nid ); + } + nid = "[id='" + nid + "'] "; + + i = groups.length; + while ( i-- ) { + groups[i] = nid + toSelector( groups[i] ); + } + newContext = rsibling.test( selector ) && testContext( context.parentNode ) || context; + newSelector = groups.join(","); + } + + if ( newSelector ) { + try { + push.apply( results, + newContext.querySelectorAll( newSelector ) + ); + return results; + } catch(qsaError) { + } finally { + if ( !old ) { + context.removeAttribute("id"); + } + } + } + } + } + + return select( selector.replace( rtrim, "$1" ), context, results, seed ); +} + +/** + * Create key-value caches of limited size + * @returns {Function(string, Object)} Returns the Object data after storing it on itself with + * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) + * deleting the oldest entry + */ +function createCache() { + var keys = []; + + function cache( key, value ) { + if ( keys.push( key + " " ) > Expr.cacheLength ) { + delete cache[ keys.shift() ]; + } + return (cache[ key + " " ] = value); + } + return cache; +} + +/** + * Mark a function for special use by Sizzle + * @param {Function} fn The function to mark + */ +function markFunction( fn ) { + fn[ expando ] = true; + return fn; +} + +/** + * Support testing using an element + * @param {Function} fn Passed the created div and expects a boolean result + */ +function assert( fn ) { + var div = document.createElement("div"); + + try { + return !!fn( div ); + } catch (e) { + return false; + } finally { + if ( div.parentNode ) { + div.parentNode.removeChild( div ); + } + div = null; + } +} + +/** + * Adds the same handler for all of the specified attrs + * @param {String} attrs Pipe-separated list of attributes + * @param {Function} handler The method that will be applied + */ +function addHandle( attrs, handler ) { + var arr = attrs.split("|"), + i = attrs.length; + + while ( i-- ) { + Expr.attrHandle[ arr[i] ] = handler; + } +} + +/** + * Checks document order of two siblings + * @param {Element} a + * @param {Element} b + * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b + */ +function siblingCheck( a, b ) { + var cur = b && a, + diff = cur && a.nodeType === 1 && b.nodeType === 1 && + ( ~b.sourceIndex || MAX_NEGATIVE ) - + ( ~a.sourceIndex || MAX_NEGATIVE ); + + if ( diff ) { + return diff; + } + + if ( cur ) { + while ( (cur = cur.nextSibling) ) { + if ( cur === b ) { + return -1; + } + } + } + + return a ? 1 : -1; +} + +/** + * Returns a function to use in pseudos for input types + * @param {String} type + */ +function createInputPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for buttons + * @param {String} type + */ +function createButtonPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return (name === "input" || name === "button") && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for positionals + * @param {Function} fn + */ +function createPositionalPseudo( fn ) { + return markFunction(function( argument ) { + argument = +argument; + return markFunction(function( seed, matches ) { + var j, + matchIndexes = fn( [], seed.length, argument ), + i = matchIndexes.length; + + while ( i-- ) { + if ( seed[ (j = matchIndexes[i]) ] ) { + seed[j] = !(matches[j] = seed[j]); + } + } + }); + }); +} + +/** + * Checks a node for validity as a Sizzle context + * @param {Element|Object=} context + * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value + */ +function testContext( context ) { + return context && typeof context.getElementsByTagName !== strundefined && context; +} + +support = Sizzle.support = {}; + +/** + * Detects XML nodes + * @param {Element|Object} elem An element or a document + * @returns {Boolean} True iff elem is a non-HTML XML node + */ +isXML = Sizzle.isXML = function( elem ) { + var documentElement = elem && (elem.ownerDocument || elem).documentElement; + return documentElement ? documentElement.nodeName !== "HTML" : false; +}; + +/** + * Sets document-related variables once based on the current document + * @param {Element|Object} [doc] An element or document object to use to set the document + * @returns {Object} Returns the current document + */ +setDocument = Sizzle.setDocument = function( node ) { + var hasCompare, + doc = node ? node.ownerDocument || node : preferredDoc, + parent = doc.defaultView; + + if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) { + return document; + } + + document = doc; + docElem = doc.documentElement; + + documentIsHTML = !isXML( doc ); + + if ( parent && parent !== parent.top ) { + if ( parent.addEventListener ) { + parent.addEventListener( "unload", function() { + setDocument(); + }, false ); + } else if ( parent.attachEvent ) { + parent.attachEvent( "onunload", function() { + setDocument(); + }); + } + } + + /* Attributes + ---------------------------------------------------------------------- */ + + support.attributes = assert(function( div ) { + div.className = "i"; + return !div.getAttribute("className"); + }); + + /* getElement(s)By* + ---------------------------------------------------------------------- */ + + support.getElementsByTagName = assert(function( div ) { + div.appendChild( doc.createComment("") ); + return !div.getElementsByTagName("*").length; + }); + + support.getElementsByClassName = rnative.test( doc.getElementsByClassName ) && assert(function( div ) { + div.innerHTML = "
    "; + + div.firstChild.className = "i"; + return div.getElementsByClassName("i").length === 2; + }); + + support.getById = assert(function( div ) { + docElem.appendChild( div ).id = expando; + return !doc.getElementsByName || !doc.getElementsByName( expando ).length; + }); + + if ( support.getById ) { + Expr.find["ID"] = function( id, context ) { + if ( typeof context.getElementById !== strundefined && documentIsHTML ) { + var m = context.getElementById( id ); + return m && m.parentNode ? [m] : []; + } + }; + Expr.filter["ID"] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + return elem.getAttribute("id") === attrId; + }; + }; + } else { + delete Expr.find["ID"]; + + Expr.filter["ID"] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + var node = typeof elem.getAttributeNode !== strundefined && elem.getAttributeNode("id"); + return node && node.value === attrId; + }; + }; + } + + Expr.find["TAG"] = support.getElementsByTagName ? + function( tag, context ) { + if ( typeof context.getElementsByTagName !== strundefined ) { + return context.getElementsByTagName( tag ); + } + } : + function( tag, context ) { + var elem, + tmp = [], + i = 0, + results = context.getElementsByTagName( tag ); + + if ( tag === "*" ) { + while ( (elem = results[i++]) ) { + if ( elem.nodeType === 1 ) { + tmp.push( elem ); + } + } + + return tmp; + } + return results; + }; + + Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) { + if ( typeof context.getElementsByClassName !== strundefined && documentIsHTML ) { + return context.getElementsByClassName( className ); + } + }; + + /* QSA/matchesSelector + ---------------------------------------------------------------------- */ + + + rbuggyMatches = []; + + rbuggyQSA = []; + + if ( (support.qsa = rnative.test( doc.querySelectorAll )) ) { + assert(function( div ) { + div.innerHTML = ""; + + if ( div.querySelectorAll("[t^='']").length ) { + rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); + } + + if ( !div.querySelectorAll("[selected]").length ) { + rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); + } + + if ( !div.querySelectorAll(":checked").length ) { + rbuggyQSA.push(":checked"); + } + }); + + assert(function( div ) { + var input = doc.createElement("input"); + input.setAttribute( "type", "hidden" ); + div.appendChild( input ).setAttribute( "name", "D" ); + + if ( div.querySelectorAll("[name=d]").length ) { + rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" ); + } + + if ( !div.querySelectorAll(":enabled").length ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + div.querySelectorAll("*,:x"); + rbuggyQSA.push(",.*:"); + }); + } + + if ( (support.matchesSelector = rnative.test( (matches = docElem.webkitMatchesSelector || + docElem.mozMatchesSelector || + docElem.oMatchesSelector || + docElem.msMatchesSelector) )) ) { + + assert(function( div ) { + support.disconnectedMatch = matches.call( div, "div" ); + + matches.call( div, "[s!='']:x" ); + rbuggyMatches.push( "!=", pseudos ); + }); + } + + rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") ); + rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") ); + + /* Contains + ---------------------------------------------------------------------- */ + hasCompare = rnative.test( docElem.compareDocumentPosition ); + + contains = hasCompare || rnative.test( docElem.contains ) ? + function( a, b ) { + var adown = a.nodeType === 9 ? a.documentElement : a, + bup = b && b.parentNode; + return a === bup || !!( bup && bup.nodeType === 1 && ( + adown.contains ? + adown.contains( bup ) : + a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 + )); + } : + function( a, b ) { + if ( b ) { + while ( (b = b.parentNode) ) { + if ( b === a ) { + return true; + } + } + } + return false; + }; + + /* Sorting + ---------------------------------------------------------------------- */ + + sortOrder = hasCompare ? + function( a, b ) { + + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; + if ( compare ) { + return compare; + } + + compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ? + a.compareDocumentPosition( b ) : + + 1; + + if ( compare & 1 || + (!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) { + + if ( a === doc || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) { + return -1; + } + if ( b === doc || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) { + return 1; + } + + return sortInput ? + ( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) : + 0; + } + + return compare & 4 ? -1 : 1; + } : + function( a, b ) { + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + var cur, + i = 0, + aup = a.parentNode, + bup = b.parentNode, + ap = [ a ], + bp = [ b ]; + + if ( !aup || !bup ) { + return a === doc ? -1 : + b === doc ? 1 : + aup ? -1 : + bup ? 1 : + sortInput ? + ( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) : + 0; + + } else if ( aup === bup ) { + return siblingCheck( a, b ); + } + + cur = a; + while ( (cur = cur.parentNode) ) { + ap.unshift( cur ); + } + cur = b; + while ( (cur = cur.parentNode) ) { + bp.unshift( cur ); + } + + while ( ap[i] === bp[i] ) { + i++; + } + + return i ? + siblingCheck( ap[i], bp[i] ) : + + ap[i] === preferredDoc ? -1 : + bp[i] === preferredDoc ? 1 : + 0; + }; + + return doc; +}; + +Sizzle.matches = function( expr, elements ) { + return Sizzle( expr, null, null, elements ); +}; + +Sizzle.matchesSelector = function( elem, expr ) { + if ( ( elem.ownerDocument || elem ) !== document ) { + setDocument( elem ); + } + + expr = expr.replace( rattributeQuotes, "='$1']" ); + + if ( support.matchesSelector && documentIsHTML && + ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) && + ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { + + try { + var ret = matches.call( elem, expr ); + + if ( ret || support.disconnectedMatch || + elem.document && elem.document.nodeType !== 11 ) { + return ret; + } + } catch(e) {} + } + + return Sizzle( expr, document, null, [elem] ).length > 0; +}; + +Sizzle.contains = function( context, elem ) { + if ( ( context.ownerDocument || context ) !== document ) { + setDocument( context ); + } + return contains( context, elem ); +}; + +Sizzle.attr = function( elem, name ) { + if ( ( elem.ownerDocument || elem ) !== document ) { + setDocument( elem ); + } + + var fn = Expr.attrHandle[ name.toLowerCase() ], + val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? + fn( elem, name, !documentIsHTML ) : + undefined; + + return val !== undefined ? + val : + support.attributes || !documentIsHTML ? + elem.getAttribute( name ) : + (val = elem.getAttributeNode(name)) && val.specified ? + val.value : + null; +}; + +Sizzle.error = function( msg ) { + throw new Error( "Syntax error, unrecognized expression: " + msg ); +}; + +/** + * Document sorting and removing duplicates + * @param {ArrayLike} results + */ +Sizzle.uniqueSort = function( results ) { + var elem, + duplicates = [], + j = 0, + i = 0; + + hasDuplicate = !support.detectDuplicates; + sortInput = !support.sortStable && results.slice( 0 ); + results.sort( sortOrder ); + + if ( hasDuplicate ) { + while ( (elem = results[i++]) ) { + if ( elem === results[ i ] ) { + j = duplicates.push( i ); + } + } + while ( j-- ) { + results.splice( duplicates[ j ], 1 ); + } + } + + sortInput = null; + + return results; +}; + +/** + * Utility function for retrieving the text value of an array of DOM nodes + * @param {Array|Element} elem + */ +getText = Sizzle.getText = function( elem ) { + var node, + ret = "", + i = 0, + nodeType = elem.nodeType; + + if ( !nodeType ) { + while ( (node = elem[i++]) ) { + ret += getText( node ); + } + } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { + if ( typeof elem.textContent === "string" ) { + return elem.textContent; + } else { + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + ret += getText( elem ); + } + } + } else if ( nodeType === 3 || nodeType === 4 ) { + return elem.nodeValue; + } + + return ret; +}; + +Expr = Sizzle.selectors = { + + cacheLength: 50, + + createPseudo: markFunction, + + match: matchExpr, + + attrHandle: {}, + + find: {}, + + relative: { + ">": { dir: "parentNode", first: true }, + " ": { dir: "parentNode" }, + "+": { dir: "previousSibling", first: true }, + "~": { dir: "previousSibling" } + }, + + preFilter: { + "ATTR": function( match ) { + match[1] = match[1].replace( runescape, funescape ); + + match[3] = ( match[4] || match[5] || "" ).replace( runescape, funescape ); + + if ( match[2] === "~=" ) { + match[3] = " " + match[3] + " "; + } + + return match.slice( 0, 4 ); + }, + + "CHILD": function( match ) { + /* matches from matchExpr["CHILD"] + 1 type (only|nth|...) + 2 what (child|of-type) + 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) + 4 xn-component of xn+y argument ([+-]?\d*n|) + 5 sign of xn-component + 6 x of xn-component + 7 sign of y-component + 8 y of y-component + */ + match[1] = match[1].toLowerCase(); + + if ( match[1].slice( 0, 3 ) === "nth" ) { + if ( !match[3] ) { + Sizzle.error( match[0] ); + } + + match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) ); + match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" ); + + } else if ( match[3] ) { + Sizzle.error( match[0] ); + } + + return match; + }, + + "PSEUDO": function( match ) { + var excess, + unquoted = !match[5] && match[2]; + + if ( matchExpr["CHILD"].test( match[0] ) ) { + return null; + } + + if ( match[3] && match[4] !== undefined ) { + match[2] = match[4]; + + } else if ( unquoted && rpseudo.test( unquoted ) && + (excess = tokenize( unquoted, true )) && + (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) { + + match[0] = match[0].slice( 0, excess ); + match[2] = unquoted.slice( 0, excess ); + } + + return match.slice( 0, 3 ); + } + }, + + filter: { + + "TAG": function( nodeNameSelector ) { + var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); + return nodeNameSelector === "*" ? + function() { return true; } : + function( elem ) { + return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; + }; + }, + + "CLASS": function( className ) { + var pattern = classCache[ className + " " ]; + + return pattern || + (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) && + classCache( className, function( elem ) { + return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== strundefined && elem.getAttribute("class") || "" ); + }); + }, + + "ATTR": function( name, operator, check ) { + return function( elem ) { + var result = Sizzle.attr( elem, name ); + + if ( result == null ) { + return operator === "!="; + } + if ( !operator ) { + return true; + } + + result += ""; + + return operator === "=" ? result === check : + operator === "!=" ? result !== check : + operator === "^=" ? check && result.indexOf( check ) === 0 : + operator === "*=" ? check && result.indexOf( check ) > -1 : + operator === "$=" ? check && result.slice( -check.length ) === check : + operator === "~=" ? ( " " + result + " " ).indexOf( check ) > -1 : + operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : + false; + }; + }, + + "CHILD": function( type, what, argument, first, last ) { + var simple = type.slice( 0, 3 ) !== "nth", + forward = type.slice( -4 ) !== "last", + ofType = what === "of-type"; + + return first === 1 && last === 0 ? + + function( elem ) { + return !!elem.parentNode; + } : + + function( elem, context, xml ) { + var cache, outerCache, node, diff, nodeIndex, start, + dir = simple !== forward ? "nextSibling" : "previousSibling", + parent = elem.parentNode, + name = ofType && elem.nodeName.toLowerCase(), + useCache = !xml && !ofType; + + if ( parent ) { + + if ( simple ) { + while ( dir ) { + node = elem; + while ( (node = node[ dir ]) ) { + if ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) { + return false; + } + } + start = dir = type === "only" && !start && "nextSibling"; + } + return true; + } + + start = [ forward ? parent.firstChild : parent.lastChild ]; + + if ( forward && useCache ) { + outerCache = parent[ expando ] || (parent[ expando ] = {}); + cache = outerCache[ type ] || []; + nodeIndex = cache[0] === dirruns && cache[1]; + diff = cache[0] === dirruns && cache[2]; + node = nodeIndex && parent.childNodes[ nodeIndex ]; + + while ( (node = ++nodeIndex && node && node[ dir ] || + + (diff = nodeIndex = 0) || start.pop()) ) { + + if ( node.nodeType === 1 && ++diff && node === elem ) { + outerCache[ type ] = [ dirruns, nodeIndex, diff ]; + break; + } + } + + } else if ( useCache && (cache = (elem[ expando ] || (elem[ expando ] = {}))[ type ]) && cache[0] === dirruns ) { + diff = cache[1]; + + } else { + while ( (node = ++nodeIndex && node && node[ dir ] || + (diff = nodeIndex = 0) || start.pop()) ) { + + if ( ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) && ++diff ) { + if ( useCache ) { + (node[ expando ] || (node[ expando ] = {}))[ type ] = [ dirruns, diff ]; + } + + if ( node === elem ) { + break; + } + } + } + } + + diff -= last; + return diff === first || ( diff % first === 0 && diff / first >= 0 ); + } + }; + }, + + "PSEUDO": function( pseudo, argument ) { + var args, + fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || + Sizzle.error( "unsupported pseudo: " + pseudo ); + + if ( fn[ expando ] ) { + return fn( argument ); + } + + if ( fn.length > 1 ) { + args = [ pseudo, pseudo, "", argument ]; + return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? + markFunction(function( seed, matches ) { + var idx, + matched = fn( seed, argument ), + i = matched.length; + while ( i-- ) { + idx = indexOf.call( seed, matched[i] ); + seed[ idx ] = !( matches[ idx ] = matched[i] ); + } + }) : + function( elem ) { + return fn( elem, 0, args ); + }; + } + + return fn; + } + }, + + pseudos: { + "not": markFunction(function( selector ) { + var input = [], + results = [], + matcher = compile( selector.replace( rtrim, "$1" ) ); + + return matcher[ expando ] ? + markFunction(function( seed, matches, context, xml ) { + var elem, + unmatched = matcher( seed, null, xml, [] ), + i = seed.length; + + while ( i-- ) { + if ( (elem = unmatched[i]) ) { + seed[i] = !(matches[i] = elem); + } + } + }) : + function( elem, context, xml ) { + input[0] = elem; + matcher( input, null, xml, results ); + return !results.pop(); + }; + }), + + "has": markFunction(function( selector ) { + return function( elem ) { + return Sizzle( selector, elem ).length > 0; + }; + }), + + "contains": markFunction(function( text ) { + return function( elem ) { + return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1; + }; + }), + + "lang": markFunction( function( lang ) { + if ( !ridentifier.test(lang || "") ) { + Sizzle.error( "unsupported lang: " + lang ); + } + lang = lang.replace( runescape, funescape ).toLowerCase(); + return function( elem ) { + var elemLang; + do { + if ( (elemLang = documentIsHTML ? + elem.lang : + elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) { + + elemLang = elemLang.toLowerCase(); + return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; + } + } while ( (elem = elem.parentNode) && elem.nodeType === 1 ); + return false; + }; + }), + + "target": function( elem ) { + var hash = window.location && window.location.hash; + return hash && hash.slice( 1 ) === elem.id; + }, + + "root": function( elem ) { + return elem === docElem; + }, + + "focus": function( elem ) { + return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex); + }, + + "enabled": function( elem ) { + return elem.disabled === false; + }, + + "disabled": function( elem ) { + return elem.disabled === true; + }, + + "checked": function( elem ) { + var nodeName = elem.nodeName.toLowerCase(); + return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected); + }, + + "selected": function( elem ) { + if ( elem.parentNode ) { + elem.parentNode.selectedIndex; + } + + return elem.selected === true; + }, + + "empty": function( elem ) { + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + if ( elem.nodeType < 6 ) { + return false; + } + } + return true; + }, + + "parent": function( elem ) { + return !Expr.pseudos["empty"]( elem ); + }, + + "header": function( elem ) { + return rheader.test( elem.nodeName ); + }, + + "input": function( elem ) { + return rinputs.test( elem.nodeName ); + }, + + "button": function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === "button" || name === "button"; + }, + + "text": function( elem ) { + var attr; + return elem.nodeName.toLowerCase() === "input" && + elem.type === "text" && + + ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" ); + }, + + "first": createPositionalPseudo(function() { + return [ 0 ]; + }), + + "last": createPositionalPseudo(function( matchIndexes, length ) { + return [ length - 1 ]; + }), + + "eq": createPositionalPseudo(function( matchIndexes, length, argument ) { + return [ argument < 0 ? argument + length : argument ]; + }), + + "even": createPositionalPseudo(function( matchIndexes, length ) { + var i = 0; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "odd": createPositionalPseudo(function( matchIndexes, length ) { + var i = 1; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "lt": createPositionalPseudo(function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; --i >= 0; ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "gt": createPositionalPseudo(function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; ++i < length; ) { + matchIndexes.push( i ); + } + return matchIndexes; + }) + } +}; + +Expr.pseudos["nth"] = Expr.pseudos["eq"]; + +for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { + Expr.pseudos[ i ] = createInputPseudo( i ); +} +for ( i in { submit: true, reset: true } ) { + Expr.pseudos[ i ] = createButtonPseudo( i ); +} + +function setFilters() {} +setFilters.prototype = Expr.filters = Expr.pseudos; +Expr.setFilters = new setFilters(); + +function tokenize( selector, parseOnly ) { + var matched, match, tokens, type, + soFar, groups, preFilters, + cached = tokenCache[ selector + " " ]; + + if ( cached ) { + return parseOnly ? 0 : cached.slice( 0 ); + } + + soFar = selector; + groups = []; + preFilters = Expr.preFilter; + + while ( soFar ) { + + if ( !matched || (match = rcomma.exec( soFar )) ) { + if ( match ) { + soFar = soFar.slice( match[0].length ) || soFar; + } + groups.push( (tokens = []) ); + } + + matched = false; + + if ( (match = rcombinators.exec( soFar )) ) { + matched = match.shift(); + tokens.push({ + value: matched, + type: match[0].replace( rtrim, " " ) + }); + soFar = soFar.slice( matched.length ); + } + + for ( type in Expr.filter ) { + if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] || + (match = preFilters[ type ]( match ))) ) { + matched = match.shift(); + tokens.push({ + value: matched, + type: type, + matches: match + }); + soFar = soFar.slice( matched.length ); + } + } + + if ( !matched ) { + break; + } + } + + return parseOnly ? + soFar.length : + soFar ? + Sizzle.error( selector ) : + tokenCache( selector, groups ).slice( 0 ); +} + +function toSelector( tokens ) { + var i = 0, + len = tokens.length, + selector = ""; + for ( ; i < len; i++ ) { + selector += tokens[i].value; + } + return selector; +} + +function addCombinator( matcher, combinator, base ) { + var dir = combinator.dir, + checkNonElements = base && dir === "parentNode", + doneName = done++; + + return combinator.first ? + function( elem, context, xml ) { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + return matcher( elem, context, xml ); + } + } + } : + + function( elem, context, xml ) { + var oldCache, outerCache, + newCache = [ dirruns, doneName ]; + + if ( xml ) { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + if ( matcher( elem, context, xml ) ) { + return true; + } + } + } + } else { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + outerCache = elem[ expando ] || (elem[ expando ] = {}); + if ( (oldCache = outerCache[ dir ]) && + oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { + + return (newCache[ 2 ] = oldCache[ 2 ]); + } else { + outerCache[ dir ] = newCache; + + if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) { + return true; + } + } + } + } + } + }; +} + +function elementMatcher( matchers ) { + return matchers.length > 1 ? + function( elem, context, xml ) { + var i = matchers.length; + while ( i-- ) { + if ( !matchers[i]( elem, context, xml ) ) { + return false; + } + } + return true; + } : + matchers[0]; +} + +function multipleContexts( selector, contexts, results ) { + var i = 0, + len = contexts.length; + for ( ; i < len; i++ ) { + Sizzle( selector, contexts[i], results ); + } + return results; +} + +function condense( unmatched, map, filter, context, xml ) { + var elem, + newUnmatched = [], + i = 0, + len = unmatched.length, + mapped = map != null; + + for ( ; i < len; i++ ) { + if ( (elem = unmatched[i]) ) { + if ( !filter || filter( elem, context, xml ) ) { + newUnmatched.push( elem ); + if ( mapped ) { + map.push( i ); + } + } + } + } + + return newUnmatched; +} + +function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { + if ( postFilter && !postFilter[ expando ] ) { + postFilter = setMatcher( postFilter ); + } + if ( postFinder && !postFinder[ expando ] ) { + postFinder = setMatcher( postFinder, postSelector ); + } + return markFunction(function( seed, results, context, xml ) { + var temp, i, elem, + preMap = [], + postMap = [], + preexisting = results.length, + + elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ), + + matcherIn = preFilter && ( seed || !selector ) ? + condense( elems, preMap, preFilter, context, xml ) : + elems, + + matcherOut = matcher ? + postFinder || ( seed ? preFilter : preexisting || postFilter ) ? + + [] : + + results : + matcherIn; + + if ( matcher ) { + matcher( matcherIn, matcherOut, context, xml ); + } + + if ( postFilter ) { + temp = condense( matcherOut, postMap ); + postFilter( temp, [], context, xml ); + + i = temp.length; + while ( i-- ) { + if ( (elem = temp[i]) ) { + matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem); + } + } + } + + if ( seed ) { + if ( postFinder || preFilter ) { + if ( postFinder ) { + temp = []; + i = matcherOut.length; + while ( i-- ) { + if ( (elem = matcherOut[i]) ) { + temp.push( (matcherIn[i] = elem) ); + } + } + postFinder( null, (matcherOut = []), temp, xml ); + } + + i = matcherOut.length; + while ( i-- ) { + if ( (elem = matcherOut[i]) && + (temp = postFinder ? indexOf.call( seed, elem ) : preMap[i]) > -1 ) { + + seed[temp] = !(results[temp] = elem); + } + } + } + + } else { + matcherOut = condense( + matcherOut === results ? + matcherOut.splice( preexisting, matcherOut.length ) : + matcherOut + ); + if ( postFinder ) { + postFinder( null, results, matcherOut, xml ); + } else { + push.apply( results, matcherOut ); + } + } + }); +} + +function matcherFromTokens( tokens ) { + var checkContext, matcher, j, + len = tokens.length, + leadingRelative = Expr.relative[ tokens[0].type ], + implicitRelative = leadingRelative || Expr.relative[" "], + i = leadingRelative ? 1 : 0, + + matchContext = addCombinator( function( elem ) { + return elem === checkContext; + }, implicitRelative, true ), + matchAnyContext = addCombinator( function( elem ) { + return indexOf.call( checkContext, elem ) > -1; + }, implicitRelative, true ), + matchers = [ function( elem, context, xml ) { + return ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( + (checkContext = context).nodeType ? + matchContext( elem, context, xml ) : + matchAnyContext( elem, context, xml ) ); + } ]; + + for ( ; i < len; i++ ) { + if ( (matcher = Expr.relative[ tokens[i].type ]) ) { + matchers = [ addCombinator(elementMatcher( matchers ), matcher) ]; + } else { + matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches ); + + if ( matcher[ expando ] ) { + j = ++i; + for ( ; j < len; j++ ) { + if ( Expr.relative[ tokens[j].type ] ) { + break; + } + } + return setMatcher( + i > 1 && elementMatcher( matchers ), + i > 1 && toSelector( + tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" }) + ).replace( rtrim, "$1" ), + matcher, + i < j && matcherFromTokens( tokens.slice( i, j ) ), + j < len && matcherFromTokens( (tokens = tokens.slice( j )) ), + j < len && toSelector( tokens ) + ); + } + matchers.push( matcher ); + } + } + + return elementMatcher( matchers ); +} + +function matcherFromGroupMatchers( elementMatchers, setMatchers ) { + var bySet = setMatchers.length > 0, + byElement = elementMatchers.length > 0, + superMatcher = function( seed, context, xml, results, outermost ) { + var elem, j, matcher, + matchedCount = 0, + i = "0", + unmatched = seed && [], + setMatched = [], + contextBackup = outermostContext, + elems = seed || byElement && Expr.find["TAG"]( "*", outermost ), + dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1), + len = elems.length; + + if ( outermost ) { + outermostContext = context !== document && context; + } + + for ( ; i !== len && (elem = elems[i]) != null; i++ ) { + if ( byElement && elem ) { + j = 0; + while ( (matcher = elementMatchers[j++]) ) { + if ( matcher( elem, context, xml ) ) { + results.push( elem ); + break; + } + } + if ( outermost ) { + dirruns = dirrunsUnique; + } + } + + if ( bySet ) { + if ( (elem = !matcher && elem) ) { + matchedCount--; + } + + if ( seed ) { + unmatched.push( elem ); + } + } + } + + matchedCount += i; + if ( bySet && i !== matchedCount ) { + j = 0; + while ( (matcher = setMatchers[j++]) ) { + matcher( unmatched, setMatched, context, xml ); + } + + if ( seed ) { + if ( matchedCount > 0 ) { + while ( i-- ) { + if ( !(unmatched[i] || setMatched[i]) ) { + setMatched[i] = pop.call( results ); + } + } + } + + setMatched = condense( setMatched ); + } + + push.apply( results, setMatched ); + + if ( outermost && !seed && setMatched.length > 0 && + ( matchedCount + setMatchers.length ) > 1 ) { + + Sizzle.uniqueSort( results ); + } + } + + if ( outermost ) { + dirruns = dirrunsUnique; + outermostContext = contextBackup; + } + + return unmatched; + }; + + return bySet ? + markFunction( superMatcher ) : + superMatcher; +} + +compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) { + var i, + setMatchers = [], + elementMatchers = [], + cached = compilerCache[ selector + " " ]; + + if ( !cached ) { + if ( !match ) { + match = tokenize( selector ); + } + i = match.length; + while ( i-- ) { + cached = matcherFromTokens( match[i] ); + if ( cached[ expando ] ) { + setMatchers.push( cached ); + } else { + elementMatchers.push( cached ); + } + } + + cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) ); + + cached.selector = selector; + } + return cached; +}; + +/** + * A low-level selection function that works with Sizzle's compiled + * selector functions + * @param {String|Function} selector A selector or a pre-compiled + * selector function built with Sizzle.compile + * @param {Element} context + * @param {Array} [results] + * @param {Array} [seed] A set of elements to match against + */ +select = Sizzle.select = function( selector, context, results, seed ) { + var i, tokens, token, type, find, + compiled = typeof selector === "function" && selector, + match = !seed && tokenize( (selector = compiled.selector || selector) ); + + results = results || []; + + if ( match.length === 1 ) { + + tokens = match[0] = match[0].slice( 0 ); + if ( tokens.length > 2 && (token = tokens[0]).type === "ID" && + support.getById && context.nodeType === 9 && documentIsHTML && + Expr.relative[ tokens[1].type ] ) { + + context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0]; + if ( !context ) { + return results; + + } else if ( compiled ) { + context = context.parentNode; + } + + selector = selector.slice( tokens.shift().value.length ); + } + + i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length; + while ( i-- ) { + token = tokens[i]; + + if ( Expr.relative[ (type = token.type) ] ) { + break; + } + if ( (find = Expr.find[ type ]) ) { + if ( (seed = find( + token.matches[0].replace( runescape, funescape ), + rsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context + )) ) { + + tokens.splice( i, 1 ); + selector = seed.length && toSelector( tokens ); + if ( !selector ) { + push.apply( results, seed ); + return results; + } + + break; + } + } + } + } + + ( compiled || compile( selector, match ) )( + seed, + context, + !documentIsHTML, + results, + rsibling.test( selector ) && testContext( context.parentNode ) || context + ); + return results; +}; + + +support.sortStable = expando.split("").sort( sortOrder ).join("") === expando; + +support.detectDuplicates = !!hasDuplicate; + +setDocument(); + +support.sortDetached = assert(function( div1 ) { + return div1.compareDocumentPosition( document.createElement("div") ) & 1; +}); + +if ( !assert(function( div ) { + div.innerHTML = ""; + return div.firstChild.getAttribute("href") === "#" ; +}) ) { + addHandle( "type|href|height|width", function( elem, name, isXML ) { + if ( !isXML ) { + return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 ); + } + }); +} + +if ( !support.attributes || !assert(function( div ) { + div.innerHTML = ""; + div.firstChild.setAttribute( "value", "" ); + return div.firstChild.getAttribute( "value" ) === ""; +}) ) { + addHandle( "value", function( elem, name, isXML ) { + if ( !isXML && elem.nodeName.toLowerCase() === "input" ) { + return elem.defaultValue; + } + }); +} + +if ( !assert(function( div ) { + return div.getAttribute("disabled") == null; +}) ) { + addHandle( booleans, function( elem, name, isXML ) { + var val; + if ( !isXML ) { + return elem[ name ] === true ? name.toLowerCase() : + (val = elem.getAttributeNode( name )) && val.specified ? + val.value : + null; + } + }); +} + +if ( typeof define === "function" && define.amd ) { + define(function() { return Sizzle; }); +} else if ( typeof module !== "undefined" && module.exports ) { + module.exports = Sizzle; +} else { + window.Sizzle = Sizzle; +} + +})( window ); + +;(function(engine) { + var extendElements = Prototype.Selector.extendElements; + + function select(selector, scope) { + return extendElements(engine(selector, scope || document)); + } + + function match(element, selector) { + return engine.matches(selector, [element]).length == 1; + } + + Prototype.Selector.engine = engine; + Prototype.Selector.select = select; + Prototype.Selector.match = match; +})(Sizzle); + +window.Sizzle = Prototype._original_property; +delete Prototype._original_property; + +var Form = { + reset: function(form) { + form = $(form); + form.reset(); + return form; + }, + + serializeElements: function(elements, options) { + if (typeof options != 'object') options = { hash: !!options }; + else if (Object.isUndefined(options.hash)) options.hash = true; + var key, value, submitted = false, submit = options.submit, accumulator, initial; + + if (options.hash) { + initial = {}; + accumulator = function(result, key, value) { + if (key in result) { + if (!Object.isArray(result[key])) result[key] = [result[key]]; + result[key] = result[key].concat(value); + } else result[key] = value; + return result; + }; + } else { + initial = ''; + accumulator = function(result, key, values) { + if (!Object.isArray(values)) {values = [values];} + if (!values.length) {return result;} + var encodedKey = encodeURIComponent(key).gsub(/%20/, '+'); + return result + (result ? "&" : "") + values.map(function (value) { + value = value.gsub(/(\r)?\n/, '\r\n'); + value = encodeURIComponent(value); + value = value.gsub(/%20/, '+'); + return encodedKey + "=" + value; + }).join("&"); + }; + } + + return elements.inject(initial, function(result, element) { + if (!element.disabled && element.name) { + key = element.name; value = $(element).getValue(); + if (value != null && element.type != 'file' && (element.type != 'submit' || (!submitted && + submit !== false && (!submit || key == submit) && (submitted = true)))) { + result = accumulator(result, key, value); + } + } + return result; + }); + } +}; + +Form.Methods = { + serialize: function(form, options) { + return Form.serializeElements(Form.getElements(form), options); + }, + + + getElements: function(form) { + var elements = $(form).getElementsByTagName('*'); + var element, results = [], serializers = Form.Element.Serializers; + + for (var i = 0; element = elements[i]; i++) { + if (serializers[element.tagName.toLowerCase()]) + results.push(Element.extend(element)); + } + return results; + }, + + getInputs: function(form, typeName, name) { + form = $(form); + var inputs = form.getElementsByTagName('input'); + + if (!typeName && !name) return $A(inputs).map(Element.extend); + + for (var i = 0, matchingInputs = [], length = inputs.length; i < length; i++) { + var input = inputs[i]; + if ((typeName && input.type != typeName) || (name && input.name != name)) + continue; + matchingInputs.push(Element.extend(input)); + } + + return matchingInputs; + }, + + disable: function(form) { + form = $(form); + Form.getElements(form).invoke('disable'); + return form; + }, + + enable: function(form) { + form = $(form); + Form.getElements(form).invoke('enable'); + return form; + }, + + findFirstElement: function(form) { + var elements = $(form).getElements().findAll(function(element) { + return 'hidden' != element.type && !element.disabled; + }); + var firstByIndex = elements.findAll(function(element) { + return element.hasAttribute('tabIndex') && element.tabIndex >= 0; + }).sortBy(function(element) { return element.tabIndex }).first(); + + return firstByIndex ? firstByIndex : elements.find(function(element) { + return /^(?:input|select|textarea)$/i.test(element.tagName); + }); + }, + + focusFirstElement: function(form) { + form = $(form); + var element = form.findFirstElement(); + if (element) element.activate(); + return form; + }, + + request: function(form, options) { + form = $(form), options = Object.clone(options || { }); + + var params = options.parameters, action = form.readAttribute('action') || ''; + if (action.blank()) action = window.location.href; + options.parameters = form.serialize(true); + + if (params) { + if (Object.isString(params)) params = params.toQueryParams(); + Object.extend(options.parameters, params); + } + + if (form.hasAttribute('method') && !options.method) + options.method = form.method; + + return new Ajax.Request(action, options); + } +}; + +/*--------------------------------------------------------------------------*/ + + +Form.Element = { + focus: function(element) { + $(element).focus(); + return element; + }, + + select: function(element) { + $(element).select(); + return element; + } +}; + +Form.Element.Methods = { + + serialize: function(element) { + element = $(element); + if (!element.disabled && element.name) { + var value = element.getValue(); + if (value != undefined) { + var pair = { }; + pair[element.name] = value; + return Object.toQueryString(pair); + } + } + return ''; + }, + + getValue: function(element) { + element = $(element); + var method = element.tagName.toLowerCase(); + return Form.Element.Serializers[method](element); + }, + + setValue: function(element, value) { + element = $(element); + var method = element.tagName.toLowerCase(); + Form.Element.Serializers[method](element, value); + return element; + }, + + clear: function(element) { + $(element).value = ''; + return element; + }, + + present: function(element) { + return $(element).value != ''; + }, + + activate: function(element) { + element = $(element); + try { + element.focus(); + if (element.select && (element.tagName.toLowerCase() != 'input' || + !(/^(?:button|reset|submit)$/i.test(element.type)))) + element.select(); + } catch (e) { } + return element; + }, + + disable: function(element) { + element = $(element); + element.disabled = true; + return element; + }, + + enable: function(element) { + element = $(element); + element.disabled = false; + return element; + } +}; + +/*--------------------------------------------------------------------------*/ + +var Field = Form.Element; + +var $F = Form.Element.Methods.getValue; + +/*--------------------------------------------------------------------------*/ + +Form.Element.Serializers = (function() { + function input(element, value) { + switch (element.type.toLowerCase()) { + case 'checkbox': + case 'radio': + return inputSelector(element, value); + default: + return valueSelector(element, value); + } + } + + function inputSelector(element, value) { + if (Object.isUndefined(value)) + return element.checked ? element.value : null; + else element.checked = !!value; + } + + function valueSelector(element, value) { + if (Object.isUndefined(value)) return element.value; + else element.value = value; + } + + function select(element, value) { + if (Object.isUndefined(value)) + return (element.type === 'select-one' ? selectOne : selectMany)(element); + + var opt, currentValue, single = !Object.isArray(value); + for (var i = 0, length = element.length; i < length; i++) { + opt = element.options[i]; + currentValue = this.optionValue(opt); + if (single) { + if (currentValue == value) { + opt.selected = true; + return; + } + } + else opt.selected = value.include(currentValue); + } + } + + function selectOne(element) { + var index = element.selectedIndex; + return index >= 0 ? optionValue(element.options[index]) : null; + } + + function selectMany(element) { + var values, length = element.length; + if (!length) return null; + + for (var i = 0, values = []; i < length; i++) { + var opt = element.options[i]; + if (opt.selected) values.push(optionValue(opt)); + } + return values; + } + + function optionValue(opt) { + return Element.hasAttribute(opt, 'value') ? opt.value : opt.text; + } + + return { + input: input, + inputSelector: inputSelector, + textarea: valueSelector, + select: select, + selectOne: selectOne, + selectMany: selectMany, + optionValue: optionValue, + button: valueSelector + }; +})(); + +/*--------------------------------------------------------------------------*/ + + +Abstract.TimedObserver = Class.create(PeriodicalExecuter, { + initialize: function($super, element, frequency, callback) { + $super(callback, frequency); + this.element = $(element); + this.lastValue = this.getValue(); + }, + + execute: function() { + var value = this.getValue(); + if (Object.isString(this.lastValue) && Object.isString(value) ? + this.lastValue != value : String(this.lastValue) != String(value)) { + this.callback(this.element, value); + this.lastValue = value; + } + } +}); + +Form.Element.Observer = Class.create(Abstract.TimedObserver, { + getValue: function() { + return Form.Element.getValue(this.element); + } +}); + +Form.Observer = Class.create(Abstract.TimedObserver, { + getValue: function() { + return Form.serialize(this.element); + } +}); + +/*--------------------------------------------------------------------------*/ + +Abstract.EventObserver = Class.create({ + initialize: function(element, callback) { + this.element = $(element); + this.callback = callback; + + this.lastValue = this.getValue(); + if (this.element.tagName.toLowerCase() == 'form') + this.registerFormCallbacks(); + else + this.registerCallback(this.element); + }, + + onElementEvent: function() { + var value = this.getValue(); + if (this.lastValue != value) { + this.callback(this.element, value); + this.lastValue = value; + } + }, + + registerFormCallbacks: function() { + Form.getElements(this.element).each(this.registerCallback, this); + }, + + registerCallback: function(element) { + if (element.type) { + switch (element.type.toLowerCase()) { + case 'checkbox': + case 'radio': + Event.observe(element, 'click', this.onElementEvent.bind(this)); + break; + default: + Event.observe(element, 'change', this.onElementEvent.bind(this)); + break; + } + } + } +}); + +Form.Element.EventObserver = Class.create(Abstract.EventObserver, { + getValue: function() { + return Form.Element.getValue(this.element); + } +}); + +Form.EventObserver = Class.create(Abstract.EventObserver, { + getValue: function() { + return Form.serialize(this.element); + } +}); +(function(GLOBAL) { + var DIV = document.createElement('div'); + var docEl = document.documentElement; + var MOUSEENTER_MOUSELEAVE_EVENTS_SUPPORTED = 'onmouseenter' in docEl + && 'onmouseleave' in docEl; + + var Event = { + KEY_BACKSPACE: 8, + KEY_TAB: 9, + KEY_RETURN: 13, + KEY_ESC: 27, + KEY_LEFT: 37, + KEY_UP: 38, + KEY_RIGHT: 39, + KEY_DOWN: 40, + KEY_DELETE: 46, + KEY_HOME: 36, + KEY_END: 35, + KEY_PAGEUP: 33, + KEY_PAGEDOWN: 34, + KEY_INSERT: 45 + }; + + + var isIELegacyEvent = function(event) { return false; }; + + if (window.attachEvent) { + if (window.addEventListener) { + isIELegacyEvent = function(event) { + return !(event instanceof window.Event); + }; + } else { + isIELegacyEvent = function(event) { return true; }; + } + } + + var _isButton; + + function _isButtonForDOMEvents(event, code) { + return event.which ? (event.which === code + 1) : (event.button === code); + } + + var legacyButtonMap = { 0: 1, 1: 4, 2: 2 }; + function _isButtonForLegacyEvents(event, code) { + return event.button === legacyButtonMap[code]; + } + + function _isButtonForWebKit(event, code) { + switch (code) { + case 0: return event.which == 1 && !event.metaKey; + case 1: return event.which == 2 || (event.which == 1 && event.metaKey); + case 2: return event.which == 3; + default: return false; + } + } + + if (window.attachEvent) { + if (!window.addEventListener) { + _isButton = _isButtonForLegacyEvents; + } else { + _isButton = function(event, code) { + return isIELegacyEvent(event) ? _isButtonForLegacyEvents(event, code) : + _isButtonForDOMEvents(event, code); + } + } + } else if (Prototype.Browser.WebKit) { + _isButton = _isButtonForWebKit; + } else { + _isButton = _isButtonForDOMEvents; + } + + function isLeftClick(event) { return _isButton(event, 0) } + + function isMiddleClick(event) { return _isButton(event, 1) } + + function isRightClick(event) { return _isButton(event, 2) } + + function element(event) { + return Element.extend(_element(event)); + } + + function _element(event) { + event = Event.extend(event); + + var node = event.target, type = event.type, + currentTarget = event.currentTarget; + + if (currentTarget && currentTarget.tagName) { + if (type === 'load' || type === 'error' || + (type === 'click' && currentTarget.tagName.toLowerCase() === 'input' + && currentTarget.type === 'radio')) + node = currentTarget; + } + + return node.nodeType == Node.TEXT_NODE ? node.parentNode : node; + } + + function findElement(event, expression) { + var element = _element(event), selector = Prototype.Selector; + if (!expression) return Element.extend(element); + while (element) { + if (Object.isElement(element) && selector.match(element, expression)) + return Element.extend(element); + element = element.parentNode; + } + } + + function pointer(event) { + return { x: pointerX(event), y: pointerY(event) }; + } + + function pointerX(event) { + var docElement = document.documentElement, + body = document.body || { scrollLeft: 0 }; + + return event.pageX || (event.clientX + + (docElement.scrollLeft || body.scrollLeft) - + (docElement.clientLeft || 0)); + } + + function pointerY(event) { + var docElement = document.documentElement, + body = document.body || { scrollTop: 0 }; + + return event.pageY || (event.clientY + + (docElement.scrollTop || body.scrollTop) - + (docElement.clientTop || 0)); + } + + + function stop(event) { + Event.extend(event); + event.preventDefault(); + event.stopPropagation(); + + event.stopped = true; + } + + + Event.Methods = { + isLeftClick: isLeftClick, + isMiddleClick: isMiddleClick, + isRightClick: isRightClick, + + element: element, + findElement: findElement, + + pointer: pointer, + pointerX: pointerX, + pointerY: pointerY, + + stop: stop + }; + + var methods = Object.keys(Event.Methods).inject({ }, function(m, name) { + m[name] = Event.Methods[name].methodize(); + return m; + }); + + if (window.attachEvent) { + function _relatedTarget(event) { + var element; + switch (event.type) { + case 'mouseover': + case 'mouseenter': + element = event.fromElement; + break; + case 'mouseout': + case 'mouseleave': + element = event.toElement; + break; + default: + return null; + } + return Element.extend(element); + } + + var additionalMethods = { + stopPropagation: function() { this.cancelBubble = true }, + preventDefault: function() { this.returnValue = false }, + inspect: function() { return '[object Event]' } + }; + + Event.extend = function(event, element) { + if (!event) return false; + + if (!isIELegacyEvent(event)) return event; + + if (event._extendedByPrototype) return event; + event._extendedByPrototype = Prototype.emptyFunction; + + var pointer = Event.pointer(event); + + Object.extend(event, { + target: event.srcElement || element, + relatedTarget: _relatedTarget(event), + pageX: pointer.x, + pageY: pointer.y + }); + + Object.extend(event, methods); + Object.extend(event, additionalMethods); + + return event; + }; + } else { + Event.extend = Prototype.K; + } + + if (window.addEventListener) { + Event.prototype = window.Event.prototype || document.createEvent('HTMLEvents').__proto__; + Object.extend(Event.prototype, methods); + } + + var EVENT_TRANSLATIONS = { + mouseenter: 'mouseover', + mouseleave: 'mouseout' + }; + + function getDOMEventName(eventName) { + return EVENT_TRANSLATIONS[eventName] || eventName; + } + + if (MOUSEENTER_MOUSELEAVE_EVENTS_SUPPORTED) + getDOMEventName = Prototype.K; + + function getUniqueElementID(element) { + if (element === window) return 0; + + if (typeof element._prototypeUID === 'undefined') + element._prototypeUID = Element.Storage.UID++; + return element._prototypeUID; + } + + function getUniqueElementID_IE(element) { + if (element === window) return 0; + if (element == document) return 1; + return element.uniqueID; + } + + if ('uniqueID' in DIV) + getUniqueElementID = getUniqueElementID_IE; + + function isCustomEvent(eventName) { + return eventName.include(':'); + } + + Event._isCustomEvent = isCustomEvent; + + function getRegistryForElement(element, uid) { + var CACHE = GLOBAL.Event.cache; + if (Object.isUndefined(uid)) + uid = getUniqueElementID(element); + if (!CACHE[uid]) CACHE[uid] = { element: element }; + return CACHE[uid]; + } + + function destroyRegistryForElement(element, uid) { + if (Object.isUndefined(uid)) + uid = getUniqueElementID(element); + delete GLOBAL.Event.cache[uid]; + } + + + function register(element, eventName, handler) { + var registry = getRegistryForElement(element); + if (!registry[eventName]) registry[eventName] = []; + var entries = registry[eventName]; + + var i = entries.length; + while (i--) + if (entries[i].handler === handler) return null; + + var uid = getUniqueElementID(element); + var responder = GLOBAL.Event._createResponder(uid, eventName, handler); + var entry = { + responder: responder, + handler: handler + }; + + entries.push(entry); + return entry; + } + + function unregister(element, eventName, handler) { + var registry = getRegistryForElement(element); + var entries = registry[eventName]; + if (!entries) return; + + var i = entries.length, entry; + while (i--) { + if (entries[i].handler === handler) { + entry = entries[i]; + break; + } + } + + if (!entry) return; + + var index = entries.indexOf(entry); + entries.splice(index, 1); + + return entry; + } + + + function observe(element, eventName, handler) { + element = $(element); + var entry = register(element, eventName, handler); + + if (entry === null) return element; + + var responder = entry.responder; + if (isCustomEvent(eventName)) + observeCustomEvent(element, eventName, responder); + else + observeStandardEvent(element, eventName, responder); + + return element; + } + + function observeStandardEvent(element, eventName, responder) { + var actualEventName = getDOMEventName(eventName); + if (element.addEventListener) { + element.addEventListener(actualEventName, responder, false); + } else { + element.attachEvent('on' + actualEventName, responder); + } + } + + function observeCustomEvent(element, eventName, responder) { + if (element.addEventListener) { + element.addEventListener('dataavailable', responder, false); + } else { + element.attachEvent('ondataavailable', responder); + element.attachEvent('onlosecapture', responder); + } + } + + function stopObserving(element, eventName, handler) { + element = $(element); + var handlerGiven = !Object.isUndefined(handler), + eventNameGiven = !Object.isUndefined(eventName); + + if (!eventNameGiven && !handlerGiven) { + stopObservingElement(element); + return element; + } + + if (!handlerGiven) { + stopObservingEventName(element, eventName); + return element; + } + + var entry = unregister(element, eventName, handler); + + if (!entry) return element; + removeEvent(element, eventName, entry.responder); + return element; + } + + function stopObservingStandardEvent(element, eventName, responder) { + var actualEventName = getDOMEventName(eventName); + if (element.removeEventListener) { + element.removeEventListener(actualEventName, responder, false); + } else { + element.detachEvent('on' + actualEventName, responder); + } + } + + function stopObservingCustomEvent(element, eventName, responder) { + if (element.removeEventListener) { + element.removeEventListener('dataavailable', responder, false); + } else { + element.detachEvent('ondataavailable', responder); + element.detachEvent('onlosecapture', responder); + } + } + + + + function stopObservingElement(element) { + var uid = getUniqueElementID(element), registry = GLOBAL.Event.cache[uid]; + if (!registry) return; + + destroyRegistryForElement(element, uid); + + var entries, i; + for (var eventName in registry) { + if (eventName === 'element') continue; + + entries = registry[eventName]; + i = entries.length; + while (i--) + removeEvent(element, eventName, entries[i].responder); + } + } + + function stopObservingEventName(element, eventName) { + var registry = getRegistryForElement(element); + var entries = registry[eventName]; + if (!entries) return; + delete registry[eventName]; + + var i = entries.length; + while (i--) + removeEvent(element, eventName, entries[i].responder); + } + + + function removeEvent(element, eventName, handler) { + if (isCustomEvent(eventName)) + stopObservingCustomEvent(element, eventName, handler); + else + stopObservingStandardEvent(element, eventName, handler); + } + + + + function getFireTarget(element) { + if (element !== document) return element; + if (document.createEvent && !element.dispatchEvent) + return document.documentElement; + return element; + } + + function fire(element, eventName, memo, bubble) { + element = getFireTarget($(element)); + if (Object.isUndefined(bubble)) bubble = true; + memo = memo || {}; + + var event = fireEvent(element, eventName, memo, bubble); + return Event.extend(event); + } + + function fireEvent_DOM(element, eventName, memo, bubble) { + var event = document.createEvent('HTMLEvents'); + event.initEvent('dataavailable', bubble, true); + + event.eventName = eventName; + event.memo = memo; + + element.dispatchEvent(event); + return event; + } + + function fireEvent_IE(element, eventName, memo, bubble) { + var event = document.createEventObject(); + event.eventType = bubble ? 'ondataavailable' : 'onlosecapture'; + + event.eventName = eventName; + event.memo = memo; + + element.fireEvent(event.eventType, event); + return event; + } + + var fireEvent = document.createEvent ? fireEvent_DOM : fireEvent_IE; + + + + Event.Handler = Class.create({ + initialize: function(element, eventName, selector, callback) { + this.element = $(element); + this.eventName = eventName; + this.selector = selector; + this.callback = callback; + this.handler = this.handleEvent.bind(this); + }, + + + start: function() { + Event.observe(this.element, this.eventName, this.handler); + return this; + }, + + stop: function() { + Event.stopObserving(this.element, this.eventName, this.handler); + return this; + }, + + handleEvent: function(event) { + var element = Event.findElement(event, this.selector); + if (element) this.callback.call(this.element, event, element); + } + }); + + function on(element, eventName, selector, callback) { + element = $(element); + if (Object.isFunction(selector) && Object.isUndefined(callback)) { + callback = selector, selector = null; + } + + return new Event.Handler(element, eventName, selector, callback).start(); + } + + Object.extend(Event, Event.Methods); + + Object.extend(Event, { + fire: fire, + observe: observe, + stopObserving: stopObserving, + on: on + }); + + Element.addMethods({ + fire: fire, + + observe: observe, + + stopObserving: stopObserving, + + on: on + }); + + Object.extend(document, { + fire: fire.methodize(), + + observe: observe.methodize(), + + stopObserving: stopObserving.methodize(), + + on: on.methodize(), + + loaded: false + }); + + if (GLOBAL.Event) Object.extend(window.Event, Event); + else GLOBAL.Event = Event; + + GLOBAL.Event.cache = {}; + + function destroyCache_IE() { + GLOBAL.Event.cache = null; + } + + if (window.attachEvent) + window.attachEvent('onunload', destroyCache_IE); + + DIV = null; + docEl = null; +})(this); + +(function(GLOBAL) { + /* Code for creating leak-free event responders is based on work by + John-David Dalton. */ + + var docEl = document.documentElement; + var MOUSEENTER_MOUSELEAVE_EVENTS_SUPPORTED = 'onmouseenter' in docEl + && 'onmouseleave' in docEl; + + function isSimulatedMouseEnterLeaveEvent(eventName) { + return !MOUSEENTER_MOUSELEAVE_EVENTS_SUPPORTED && + (eventName === 'mouseenter' || eventName === 'mouseleave'); + } + + function createResponder(uid, eventName, handler) { + if (Event._isCustomEvent(eventName)) + return createResponderForCustomEvent(uid, eventName, handler); + if (isSimulatedMouseEnterLeaveEvent(eventName)) + return createMouseEnterLeaveResponder(uid, eventName, handler); + + return function(event) { + if (!Event.cache) return; + + var element = Event.cache[uid].element; + Event.extend(event, element); + handler.call(element, event); + }; + } + + function createResponderForCustomEvent(uid, eventName, handler) { + return function(event) { + var element = Event.cache[uid].element; + + if (Object.isUndefined(event.eventName)) + return false; + + if (event.eventName !== eventName) + return false; + + Event.extend(event, element); + handler.call(element, event); + }; + } + + function createMouseEnterLeaveResponder(uid, eventName, handler) { + return function(event) { + var element = Event.cache[uid].element; + + Event.extend(event, element); + var parent = event.relatedTarget; + + while (parent && parent !== element) { + try { parent = parent.parentNode; } + catch(e) { parent = element; } + } + + if (parent === element) return; + handler.call(element, event); + } + } + + GLOBAL.Event._createResponder = createResponder; + docEl = null; +})(this); + +(function(GLOBAL) { + /* Support for the DOMContentLoaded event is based on work by Dan Webb, + Matthias Miller, Dean Edwards, John Resig, and Diego Perini. */ + + var TIMER; + + function fireContentLoadedEvent() { + if (document.loaded) return; + if (TIMER) window.clearTimeout(TIMER); + document.loaded = true; + document.fire('dom:loaded'); + } + + function checkReadyState() { + if (document.readyState === 'complete') { + document.detachEvent('onreadystatechange', checkReadyState); + fireContentLoadedEvent(); + } + } + + function pollDoScroll() { + try { + document.documentElement.doScroll('left'); + } catch (e) { + TIMER = pollDoScroll.defer(); + return; + } + + fireContentLoadedEvent(); + } + + + if (document.readyState === 'complete') { + fireContentLoadedEvent(); + return; + } + + if (document.addEventListener) { + document.addEventListener('DOMContentLoaded', fireContentLoadedEvent, false); + } else { + document.attachEvent('onreadystatechange', checkReadyState); + if (window == top) TIMER = pollDoScroll.defer(); + } + + Event.observe(window, 'load', fireContentLoadedEvent); +})(this); + + +Element.addMethods(); +/*------------------------------- DEPRECATED -------------------------------*/ + +Hash.toQueryString = Object.toQueryString; + +var Toggle = { display: Element.toggle }; + +Element.Methods.childOf = Element.Methods.descendantOf; + +var Insertion = { + Before: function(element, content) { + return Element.insert(element, {before:content}); + }, + + Top: function(element, content) { + return Element.insert(element, {top:content}); + }, + + Bottom: function(element, content) { + return Element.insert(element, {bottom:content}); + }, + + After: function(element, content) { + return Element.insert(element, {after:content}); + } +}; + +var $continue = new Error('"throw $continue" is deprecated, use "return" instead'); + +var Position = { + includeScrollOffsets: false, + + prepare: function() { + this.deltaX = window.pageXOffset + || document.documentElement.scrollLeft + || document.body.scrollLeft + || 0; + this.deltaY = window.pageYOffset + || document.documentElement.scrollTop + || document.body.scrollTop + || 0; + }, + + within: function(element, x, y) { + if (this.includeScrollOffsets) + return this.withinIncludingScrolloffsets(element, x, y); + this.xcomp = x; + this.ycomp = y; + this.offset = Element.cumulativeOffset(element); + + return (y >= this.offset[1] && + y < this.offset[1] + element.offsetHeight && + x >= this.offset[0] && + x < this.offset[0] + element.offsetWidth); + }, + + withinIncludingScrolloffsets: function(element, x, y) { + var offsetcache = Element.cumulativeScrollOffset(element); + + this.xcomp = x + offsetcache[0] - this.deltaX; + this.ycomp = y + offsetcache[1] - this.deltaY; + this.offset = Element.cumulativeOffset(element); + + return (this.ycomp >= this.offset[1] && + this.ycomp < this.offset[1] + element.offsetHeight && + this.xcomp >= this.offset[0] && + this.xcomp < this.offset[0] + element.offsetWidth); + }, + + overlap: function(mode, element) { + if (!mode) return 0; + if (mode == 'vertical') + return ((this.offset[1] + element.offsetHeight) - this.ycomp) / + element.offsetHeight; + if (mode == 'horizontal') + return ((this.offset[0] + element.offsetWidth) - this.xcomp) / + element.offsetWidth; + }, + + + cumulativeOffset: Element.Methods.cumulativeOffset, + + positionedOffset: Element.Methods.positionedOffset, + + absolutize: function(element) { + Position.prepare(); + return Element.absolutize(element); + }, + + relativize: function(element) { + Position.prepare(); + return Element.relativize(element); + }, + + realOffset: Element.Methods.cumulativeScrollOffset, + + offsetParent: Element.Methods.getOffsetParent, + + page: Element.Methods.viewportOffset, + + clone: function(source, target, options) { + options = options || { }; + return Element.clonePosition(target, source, options); + } +}; + +/*--------------------------------------------------------------------------*/ + +if (!document.getElementsByClassName) document.getElementsByClassName = function(instanceMethods){ + function iter(name) { + return name.blank() ? null : "[contains(concat(' ', @class, ' '), ' " + name + " ')]"; + } + + instanceMethods.getElementsByClassName = Prototype.BrowserFeatures.XPath ? + function(element, className) { + className = className.toString().strip(); + var cond = /\s/.test(className) ? $w(className).map(iter).join('') : iter(className); + return cond ? document._getElementsByXPath('.//*' + cond, element) : []; + } : function(element, className) { + className = className.toString().strip(); + var elements = [], classNames = (/\s/.test(className) ? $w(className) : null); + if (!classNames && !className) return elements; + + var nodes = $(element).getElementsByTagName('*'); + className = ' ' + className + ' '; + + for (var i = 0, child, cn; child = nodes[i]; i++) { + if (child.className && (cn = ' ' + child.className + ' ') && (cn.include(className) || + (classNames && classNames.all(function(name) { + return !name.toString().blank() && cn.include(' ' + name + ' '); + })))) + elements.push(Element.extend(child)); + } + return elements; + }; + + return function(className, parentElement) { + return $(parentElement || document.body).getElementsByClassName(className); + }; +}(Element.Methods); + +/*--------------------------------------------------------------------------*/ + +Element.ClassNames = Class.create(); +Element.ClassNames.prototype = { + initialize: function(element) { + this.element = $(element); + }, + + _each: function(iterator, context) { + this.element.className.split(/\s+/).select(function(name) { + return name.length > 0; + })._each(iterator, context); + }, + + set: function(className) { + this.element.className = className; + }, + + add: function(classNameToAdd) { + if (this.include(classNameToAdd)) return; + this.set($A(this).concat(classNameToAdd).join(' ')); + }, + + remove: function(classNameToRemove) { + if (!this.include(classNameToRemove)) return; + this.set($A(this).without(classNameToRemove).join(' ')); + }, + + toString: function() { + return $A(this).join(' '); + } +}; + +Object.extend(Element.ClassNames.prototype, Enumerable); + +/*--------------------------------------------------------------------------*/ + +(function() { + window.Selector = Class.create({ + initialize: function(expression) { + this.expression = expression.strip(); + }, + + findElements: function(rootElement) { + return Prototype.Selector.select(this.expression, rootElement); + }, + + match: function(element) { + return Prototype.Selector.match(element, this.expression); + }, + + toString: function() { + return this.expression; + }, + + inspect: function() { + return "#"; + } + }); + + Object.extend(Selector, { + matchElements: function(elements, expression) { + var match = Prototype.Selector.match, + results = []; + + for (var i = 0, length = elements.length; i < length; i++) { + var element = elements[i]; + if (match(element, expression)) { + results.push(Element.extend(element)); + } + } + return results; + }, + + findElement: function(elements, expression, index) { + index = index || 0; + var matchIndex = 0, element; + for (var i = 0, length = elements.length; i < length; i++) { + element = elements[i]; + if (Prototype.Selector.match(element, expression) && index === matchIndex++) { + return Element.extend(element); + } + } + }, + + findChildElements: function(element, expressions) { + var selector = expressions.toArray().join(', '); + return Prototype.Selector.select(selector, element || document); + } + }); +})(); + +/** + * Event.simulate(@element, eventName[, options]) -> Element + * + * - @element: element to fire event on + * - eventName: name of event to fire (only MouseEvents and HTMLEvents interfaces are supported) + * - options: optional object to fine-tune event properties - pointerX, pointerY, ctrlKey, etc. + * + * $('foo').simulate('click'); // => fires "click" event on an element with id=foo + * + **/ +(function(){ + + var eventMatchers = { + 'HTMLEvents': /^(?:load|unload|abort|error|select|change|submit|reset|focus|blur|resize|scroll|input)$/, + 'MouseEvents': /^(?:click|mouse(?:down|up|over|move|out))$/ + } + var defaultOptions = { + pointerX: 0, + pointerY: 0, + button: 0, + ctrlKey: false, + altKey: false, + shiftKey: false, + metaKey: false, + bubbles: true, + cancelable: true + } + + Event.simulate = function(element, eventName) { + var options = Object.extend(defaultOptions, arguments[2] || { }); + var oEvent, eventType = null; + + element = $(element); + + for (var name in eventMatchers) { + if (eventMatchers[name].test(eventName)) { eventType = name; break; } + } + + if (!eventType) + throw new SyntaxError('Only HTMLEvents and MouseEvents interfaces are supported'); + + if (document.createEvent) { + oEvent = document.createEvent(eventType); + if (eventType == 'HTMLEvents') { + oEvent.initEvent(eventName, options.bubbles, options.cancelable); + } + else { + oEvent.initMouseEvent(eventName, options.bubbles, options.cancelable, document.defaultView, + options.button, options.pointerX, options.pointerY, options.pointerX, options.pointerY, + options.ctrlKey, options.altKey, options.shiftKey, options.metaKey, options.button, element); + } + element.dispatchEvent(oEvent); + } + else { + options.clientX = options.pointerX; + options.clientY = options.pointerY; + oEvent = Object.extend(document.createEventObject(), options); + element.fireEvent('on' + eventName, oEvent); + } + return element; + } + + Element.addMethods({ simulate: Event.simulate }); +})() +function phi4z(t,i,s,e,o,n,a,r,h){var l,c,m,u,d,p,_,f,P,y;for(h=n,y=1;15>=y;y++)if(l=Math.sin(h),m=Math.tan(h),r=m*Math.sqrt(1-t*l*l),c=Math.sin(2*h),u=i*h-s*c+e*Math.sin(4*h)-o*Math.sin(6*h),d=i-2*s*Math.cos(2*h)+4*e*Math.cos(4*h)-6*o*Math.cos(6*h),p=2*u+r*(u*u+a)-2*n*(r*u+1),_=t*c*(u*u+a-2*n*u)/(2*r),f=2*(n-u)*(r*d-2/c)-2*d,P=p/(_+f),h+=P,1e-10>=Math.abs(P))return h;return Proj4js.reportError("phi4z: No convergence"),null}function e4fn(t){var i,s;return i=1+t,s=1-t,Math.sqrt(Math.pow(i,i)*Math.pow(s,s))}var Proj4js={defaultDatum:"WGS84",transform:function(t,i,s){if(!t.readyToUse)return this.reportError("Proj4js initialization for:"+t.srsCode+" not yet complete"),s;if(!i.readyToUse)return this.reportError("Proj4js initialization for:"+i.srsCode+" not yet complete"),s;if(t.datum&&i.datum&&((t.datum.datum_type==Proj4js.common.PJD_3PARAM||t.datum.datum_type==Proj4js.common.PJD_7PARAM)&&"WGS84"!=i.datumCode||(i.datum.datum_type==Proj4js.common.PJD_3PARAM||i.datum.datum_type==Proj4js.common.PJD_7PARAM)&&"WGS84"!=t.datumCode)){var e=Proj4js.WGS84;this.transform(t,e,s),t=e}return"enu"!=t.axis&&this.adjust_axis(t,!1,s),"longlat"==t.projName?(s.x*=Proj4js.common.D2R,s.y*=Proj4js.common.D2R):(t.to_meter&&(s.x*=t.to_meter,s.y*=t.to_meter),t.inverse(s)),t.from_greenwich&&(s.x+=t.from_greenwich),s=this.datum_transform(t.datum,i.datum,s),i.from_greenwich&&(s.x-=i.from_greenwich),"longlat"==i.projName?(s.x*=Proj4js.common.R2D,s.y*=Proj4js.common.R2D):(i.forward(s),i.to_meter&&(s.x/=i.to_meter,s.y/=i.to_meter)),"enu"!=i.axis&&this.adjust_axis(i,!0,s),s},datum_transform:function(t,i,s){return t.compare_datums(i)?s:t.datum_type==Proj4js.common.PJD_NODATUM||i.datum_type==Proj4js.common.PJD_NODATUM?s:((t.es!=i.es||t.a!=i.a||t.datum_type==Proj4js.common.PJD_3PARAM||t.datum_type==Proj4js.common.PJD_7PARAM||i.datum_type==Proj4js.common.PJD_3PARAM||i.datum_type==Proj4js.common.PJD_7PARAM)&&(t.geodetic_to_geocentric(s),(t.datum_type==Proj4js.common.PJD_3PARAM||t.datum_type==Proj4js.common.PJD_7PARAM)&&t.geocentric_to_wgs84(s),(i.datum_type==Proj4js.common.PJD_3PARAM||i.datum_type==Proj4js.common.PJD_7PARAM)&&i.geocentric_from_wgs84(s),i.geocentric_to_geodetic(s)),s)},adjust_axis:function(t,i,s){for(var e,o,n=s.x,a=s.y,r=s.z||0,h=0;3>h;h++)if(!i||2!=h||void 0!==s.z)switch(0==h?(e=n,o="x"):1==h?(e=a,o="y"):(e=r,o="z"),t.axis[h]){case"e":s[o]=e;break;case"w":s[o]=-e;break;case"n":s[o]=e;break;case"s":s[o]=-e;break;case"u":void 0!==s[o]&&(s.z=e);break;case"d":void 0!==s[o]&&(s.z=-e);break;default:return alert("ERROR: unknow axis ("+t.axis[h]+") - check definition of "+t.projName),null}return s},reportError:function(){},extend:function(t,i){if(t=t||{},i)for(var s in i){var e=i[s];void 0!==e&&(t[s]=e)}return t},Class:function(){for(var t,i=function(){this.initialize.apply(this,arguments)},s={},e=0;arguments.length>e;++e)t="function"==typeof arguments[e]?arguments[e].prototype:arguments[e],Proj4js.extend(s,t);return i.prototype=s,i},bind:function(t,i){var s=Array.prototype.slice.apply(arguments,[2]);return function(){var e=s.concat(Array.prototype.slice.apply(arguments,[0]));return t.apply(i,e)}},scriptName:"proj4js-combined.js",defsLookupService:"http://spatialreference.org/ref",libPath:null,getScriptLocation:function(){if(this.libPath)return this.libPath;for(var t=this.scriptName,i=t.length,s=document.getElementsByTagName("script"),e=0;s.length>e;e++){var o=s[e].getAttribute("src");if(o){var n=o.lastIndexOf(t);if(n>-1&&n+i==o.length){this.libPath=o.slice(0,-i);break}}}return this.libPath||""},loadScript:function(t,i,s,e){var o=document.createElement("script");o.defer=!1,o.type="text/javascript",o.id=t,o.src=t,o.onload=i,o.onerror=s,o.loadCheck=e,/MSIE/.test(navigator.userAgent)&&(o.onreadystatechange=this.checkReadyState),document.getElementsByTagName("head")[0].appendChild(o)},checkReadyState:function(){"loaded"==this.readyState&&(this.loadCheck()?this.onload():this.onerror())}};Proj4js.Proj=Proj4js.Class({readyToUse:!1,title:null,projName:null,units:null,datum:null,x0:0,y0:0,localCS:!1,queue:null,initialize:function(t,i){if(this.srsCodeInput=t,this.queue=[],i&&this.queue.push(i),t.indexOf("GEOGCS")>=0||t.indexOf("GEOCCS")>=0||t.indexOf("PROJCS")>=0||t.indexOf("LOCAL_CS")>=0)return this.parseWKT(t),this.deriveConstants(),this.loadProjCode(this.projName),void 0;if(0==t.indexOf("urn:")){var s=t.split(":");"ogc"!=s[1]&&"x-ogc"!=s[1]||"def"!=s[2]||"crs"!=s[3]||(t=s[4]+":"+s[s.length-1])}else if(0==t.indexOf("http://")){var e=t.split("#");e[0].match(/epsg.org/)?t="EPSG:"+e[1]:e[0].match(/RIG.xml/)&&(t="IGNF:"+e[1])}this.srsCode=t.toUpperCase(),0==this.srsCode.indexOf("EPSG")?(this.srsCode=this.srsCode,this.srsAuth="epsg",this.srsProjNumber=this.srsCode.substring(5)):0==this.srsCode.indexOf("IGNF")?(this.srsCode=this.srsCode,this.srsAuth="IGNF",this.srsProjNumber=this.srsCode.substring(5)):0==this.srsCode.indexOf("CRS")?(this.srsCode=this.srsCode,this.srsAuth="CRS",this.srsProjNumber=this.srsCode.substring(4)):(this.srsAuth="",this.srsProjNumber=this.srsCode),this.loadProjDefinition()},loadProjDefinition:function(){if(Proj4js.defs[this.srsCode])return this.defsLoaded(),void 0;var t=Proj4js.getScriptLocation()+"defs/"+this.srsAuth.toUpperCase()+this.srsProjNumber+".js";Proj4js.loadScript(t,Proj4js.bind(this.defsLoaded,this),Proj4js.bind(this.loadFromService,this),Proj4js.bind(this.checkDefsLoaded,this))},loadFromService:function(){var t=Proj4js.defsLookupService+"/"+this.srsAuth+"/"+this.srsProjNumber+"/proj4js/";Proj4js.loadScript(t,Proj4js.bind(this.defsLoaded,this),Proj4js.bind(this.defsFailed,this),Proj4js.bind(this.checkDefsLoaded,this))},defsLoaded:function(){this.parseDefs(),this.loadProjCode(this.projName)},checkDefsLoaded:function(){return Proj4js.defs[this.srsCode]?!0:!1},defsFailed:function(){Proj4js.reportError("failed to load projection definition for: "+this.srsCode),Proj4js.defs[this.srsCode]=Proj4js.defs.WGS84,this.defsLoaded()},loadProjCode:function(t){if(Proj4js.Proj[t])return this.initTransforms(),void 0;var i=Proj4js.getScriptLocation()+"projCode/"+t+".js";Proj4js.loadScript(i,Proj4js.bind(this.loadProjCodeSuccess,this,t),Proj4js.bind(this.loadProjCodeFailure,this,t),Proj4js.bind(this.checkCodeLoaded,this,t))},loadProjCodeSuccess:function(t){Proj4js.Proj[t].dependsOn?this.loadProjCode(Proj4js.Proj[t].dependsOn):this.initTransforms()},loadProjCodeFailure:function(t){Proj4js.reportError("failed to find projection file for: "+t)},checkCodeLoaded:function(t){return Proj4js.Proj[t]?!0:!1},initTransforms:function(){if(Proj4js.extend(this,Proj4js.Proj[this.projName]),this.init(),this.readyToUse=!0,this.queue)for(var t;t=this.queue.shift();)t.call(this,this)},wktRE:/^(\w+)\[(.*)\]$/,parseWKT:function(t){var i=t.match(this.wktRE);if(i){var s,e=i[1],o=i[2],n=o.split(",");s="TOWGS84"==e.toUpperCase()?e:n.shift(),s=s.replace(/^\"/,""),s=s.replace(/\"$/,"");for(var a=[],r=0,h="",l=0;n.length>l;++l){for(var c=n[l],m=0;c.length>m;++m)"["==c.charAt(m)&&++r,"]"==c.charAt(m)&&--r;h+=c,0===r?(a.push(h),h=""):h+=","}switch(e){case"LOCAL_CS":this.projName="identity",this.localCS=!0,this.srsCode=s;break;case"GEOGCS":this.projName="longlat",this.geocsCode=s,this.srsCode||(this.srsCode=s);break;case"PROJCS":this.srsCode=s;break;case"GEOCCS":break;case"PROJECTION":this.projName=Proj4js.wktProjections[s];break;case"DATUM":this.datumName=s;break;case"LOCAL_DATUM":this.datumCode="none";break;case"SPHEROID":this.ellps=s,this.a=parseFloat(a.shift()),this.rf=parseFloat(a.shift());break;case"PRIMEM":this.from_greenwich=parseFloat(a.shift());break;case"UNIT":this.units=s,this.unitsPerMeter=parseFloat(a.shift());break;case"PARAMETER":var u=s.toLowerCase(),d=parseFloat(a.shift());switch(u){case"false_easting":this.x0=d;break;case"false_northing":this.y0=d;break;case"scale_factor":this.k0=d;break;case"central_meridian":this.long0=d*Proj4js.common.D2R;break;case"latitude_of_origin":this.lat0=d*Proj4js.common.D2R;break;case"more_here":break;default:}break;case"TOWGS84":this.datum_params=a;break;case"AXIS":var u=s.toLowerCase(),d=a.shift();switch(d){case"EAST":d="e";break;case"WEST":d="w";break;case"NORTH":d="n";break;case"SOUTH":d="s";break;case"UP":d="u";break;case"DOWN":d="d";break;case"OTHER":default:d=" "}switch(this.axis||(this.axis="enu"),u){case"x":this.axis=d+this.axis.substr(1,2);break;case"y":this.axis=this.axis.substr(0,1)+d+this.axis.substr(2,1);break;case"z":this.axis=this.axis.substr(0,2)+d;break;default:}case"MORE_HERE":break;default:}for(var l=0;a.length>l;++l)this.parseWKT(a[l])}},parseDefs:function(){this.defData=Proj4js.defs[this.srsCode];var t,i;if(this.defData){for(var s=this.defData.split("+"),e=0;s.length>e;e++){var o=s[e].split("=");switch(t=o[0].toLowerCase(),i=o[1],t.replace(/\s/gi,"")){case"":break;case"title":this.title=i;break;case"proj":this.projName=i.replace(/\s/gi,"");break;case"units":this.units=i.replace(/\s/gi,"");break;case"datum":this.datumCode=i.replace(/\s/gi,"");break;case"nadgrids":this.nagrids=i.replace(/\s/gi,"");break;case"ellps":this.ellps=i.replace(/\s/gi,"");break;case"a":this.a=parseFloat(i);break;case"b":this.b=parseFloat(i);break;case"rf":this.rf=parseFloat(i);break;case"lat_0":this.lat0=i*Proj4js.common.D2R;break;case"lat_1":this.lat1=i*Proj4js.common.D2R;break;case"lat_2":this.lat2=i*Proj4js.common.D2R;break;case"lat_ts":this.lat_ts=i*Proj4js.common.D2R;break;case"lon_0":this.long0=i*Proj4js.common.D2R;break;case"alpha":this.alpha=parseFloat(i)*Proj4js.common.D2R;break;case"lonc":this.longc=i*Proj4js.common.D2R;break;case"x_0":this.x0=parseFloat(i);break;case"y_0":this.y0=parseFloat(i);break;case"k_0":this.k0=parseFloat(i);break;case"k":this.k0=parseFloat(i);break;case"r_a":this.R_A=!0;break;case"zone":this.zone=parseInt(i,10);break;case"south":this.utmSouth=!0;break;case"towgs84":this.datum_params=i.split(",");break;case"to_meter":this.to_meter=parseFloat(i);break;case"from_greenwich":this.from_greenwich=i*Proj4js.common.D2R;break;case"pm":i=i.replace(/\s/gi,""),this.from_greenwich=Proj4js.PrimeMeridian[i]?Proj4js.PrimeMeridian[i]:parseFloat(i),this.from_greenwich*=Proj4js.common.D2R;break;case"axis":i=i.replace(/\s/gi,"");var n="ewnsud";3==i.length&&-1!=n.indexOf(i.substr(0,1))&&-1!=n.indexOf(i.substr(1,1))&&-1!=n.indexOf(i.substr(2,1))&&(this.axis=i);break;case"no_defs":break;default:}}this.deriveConstants()}},deriveConstants:function(){if("@null"==this.nagrids&&(this.datumCode="none"),this.datumCode&&"none"!=this.datumCode){var t=Proj4js.Datum[this.datumCode];t&&(this.datum_params=t.towgs84?t.towgs84.split(","):null,this.ellps=t.ellipse,this.datumName=t.datumName?t.datumName:this.datumCode)}if(!this.a){var i=Proj4js.Ellipsoid[this.ellps]?Proj4js.Ellipsoid[this.ellps]:Proj4js.Ellipsoid.WGS84;Proj4js.extend(this,i)}this.rf&&!this.b&&(this.b=(1-1/this.rf)*this.a),(0===this.rf||Math.abs(this.a-this.b)=a;a++)if(s=t*Math.sin(n),e=this.HALF_PI-2*Math.atan(i*Math.pow((1-s)/(1+s),o))-n,n+=e,1e-10>=Math.abs(e))return n;return alert("phi2z has NoConvergence"),-9999},qsfnz:function(t,i){var s;return t>1e-7?(s=t*i,(1-t*t)*(i/(1-s*s)-.5/t*Math.log((1-s)/(1+s)))):2*i},asinz:function(t){return Math.abs(t)>1&&(t=t>1?1:-1),Math.asin(t)},e0fn:function(t){return 1-.25*t*(1+t/16*(3+1.25*t))},e1fn:function(t){return.375*t*(1+.25*t*(1+.46875*t))},e2fn:function(t){return.05859375*t*t*(1+.75*t)},e3fn:function(t){return t*t*t*(35/3072)},mlfn:function(t,i,s,e,o){return t*o-i*Math.sin(2*o)+s*Math.sin(4*o)-e*Math.sin(6*o)},srat:function(t,i){return Math.pow((1-t)/(1+t),i)},sign:function(t){return 0>t?-1:1},adjust_lon:function(t){return t=Math.abs(t)this.HALF_PI)return+Number.NaN;if(i==this.HALF_PI)return Number.POSITIVE_INFINITY;if(i==-1*this.HALF_PI)return-1*Number.POSITIVE_INFINITY;var e=t*s;return Math.log(Math.tan((this.HALF_PI+i)/2))+t*Math.log((1-e)/(1+e))/2},fL:function(t,i){return 2*Math.atan(t*Math.exp(i))-this.HALF_PI},invlatiso:function(t,i){var s=this.fL(1,i),e=0,o=0;do e=s,o=t*Math.sin(e),s=this.fL(Math.exp(t*Math.log((1+o)/(1-o))/2),i);while(Math.abs(s-e)>1e-12);return s},sinh:function(t){var i=Math.exp(t);return i=(i-1/i)/2},cosh:function(t){var i=Math.exp(t);return i=(i+1/i)/2},tanh:function(t){var i=Math.exp(t);return i=(i-1/i)/(i+1/i)},asinh:function(t){var i=t>=0?1:-1;return i*Math.log(Math.abs(t)+Math.sqrt(t*t+1))},acosh:function(t){return 2*Math.log(Math.sqrt((t+1)/2)+Math.sqrt((t-1)/2))},atanh:function(t){return Math.log((t-1)/(t+1))/2},gN:function(t,i,s){var e=i*s;return t/Math.sqrt(1-e*e)},pj_enfn:function(t){var i=[];i[0]=this.C00-t*(this.C02+t*(this.C04+t*(this.C06+t*this.C08))),i[1]=t*(this.C22-t*(this.C04+t*(this.C06+t*this.C08)));var s=t*t;return i[2]=s*(this.C44-t*(this.C46+t*this.C48)),s*=t,i[3]=s*(this.C66-t*this.C68),i[4]=s*t*this.C88,i},pj_mlfn:function(t,i,s,e){return s*=i,i*=i,e[0]*t-s*(e[1]+i*(e[2]+i*(e[3]+i*e[4])))},pj_inv_mlfn:function(t,i,s){for(var e=1/(1-i),o=t,n=Proj4js.common.MAX_ITER;n;--n){var a=Math.sin(o),r=1-i*a*a;if(r=(this.pj_mlfn(o,a,Math.cos(o),s)-t)*r*Math.sqrt(r)*e,o-=r,Math.abs(r)i;i++)t.datum_params[i]=parseFloat(t.datum_params[i]);(0!=t.datum_params[0]||0!=t.datum_params[1]||0!=t.datum_params[2])&&(this.datum_type=Proj4js.common.PJD_3PARAM),t.datum_params.length>3&&(0!=t.datum_params[3]||0!=t.datum_params[4]||0!=t.datum_params[5]||0!=t.datum_params[6])&&(this.datum_type=Proj4js.common.PJD_7PARAM,t.datum_params[3]*=Proj4js.common.SEC_TO_RAD,t.datum_params[4]*=Proj4js.common.SEC_TO_RAD,t.datum_params[5]*=Proj4js.common.SEC_TO_RAD,t.datum_params[6]=t.datum_params[6]/1e6+1)}t&&(this.a=t.a,this.b=t.b,this.es=t.es,this.ep2=t.ep2,this.datum_params=t.datum_params)},compare_datums:function(t){return this.datum_type!=t.datum_type?!1:this.a!=t.a||Math.abs(this.es-t.es)>5e-11?!1:this.datum_type==Proj4js.common.PJD_3PARAM?this.datum_params[0]==t.datum_params[0]&&this.datum_params[1]==t.datum_params[1]&&this.datum_params[2]==t.datum_params[2]:this.datum_type==Proj4js.common.PJD_7PARAM?this.datum_params[0]==t.datum_params[0]&&this.datum_params[1]==t.datum_params[1]&&this.datum_params[2]==t.datum_params[2]&&this.datum_params[3]==t.datum_params[3]&&this.datum_params[4]==t.datum_params[4]&&this.datum_params[5]==t.datum_params[5]&&this.datum_params[6]==t.datum_params[6]:this.datum_type==Proj4js.common.PJD_GRIDSHIFT||t.datum_type==Proj4js.common.PJD_GRIDSHIFT?(alert("ERROR: Grid shift transformations are not implemented."),!1):!0},geodetic_to_geocentric:function(t){var i,s,e,o,n,a,r,h=t.x,l=t.y,c=t.z?t.z:0,m=0;if(-Proj4js.common.HALF_PI>l&&l>-1.001*Proj4js.common.HALF_PI)l=-Proj4js.common.HALF_PI;else if(l>Proj4js.common.HALF_PI&&1.001*Proj4js.common.HALF_PI>l)l=Proj4js.common.HALF_PI;else if(-Proj4js.common.HALF_PI>l||l>Proj4js.common.HALF_PI)return Proj4js.reportError("geocent:lat out of range:"+l),null;return h>Proj4js.common.PI&&(h-=2*Proj4js.common.PI),n=Math.sin(l),r=Math.cos(l),a=n*n,o=this.a/Math.sqrt(1-this.es*a),i=(o+c)*r*Math.cos(h),s=(o+c)*r*Math.sin(h),e=(o*(1-this.es)+c)*n,t.x=i,t.y=s,t.z=e,m},geocentric_to_geodetic:function(t){var i,s,e,o,n,a,r,h,l,c,m,u,d,p,_,f,P,y=1e-12,g=y*y,L=30,v=t.x,j=t.y,M=t.z?t.z:0;if(d=!1,i=Math.sqrt(v*v+j*j),s=Math.sqrt(v*v+j*j+M*M),y>i/this.a){if(d=!0,_=0,y>s/this.a)return f=Proj4js.common.HALF_PI,P=-this.b,void 0}else _=Math.atan2(j,v);e=M/s,o=i/s,n=1/Math.sqrt(1-this.es*(2-this.es)*o*o),h=o*(1-this.es)*n,l=e*n,p=0;do p++,r=this.a/Math.sqrt(1-this.es*l*l),P=i*h+M*l-r*(1-this.es*l*l),a=this.es*r/(r+P),n=1/Math.sqrt(1-a*(2-a)*o*o),c=o*(1-a)*n,m=e*n,u=m*h-c*l,h=c,l=m;while(u*u>g&&L>p);return f=Math.atan(m/Math.abs(c)),t.x=_,t.y=f,t.z=P,t},geocentric_to_geodetic_noniter:function(t){var i,s,e,o,n,a,r,h,l,c,m,u,d,p,_,f,P,y=t.x,g=t.y,L=t.z?t.z:0;if(y=parseFloat(y),g=parseFloat(g),L=parseFloat(L),P=!1,0!=y)i=Math.atan2(g,y);else if(g>0)i=Proj4js.common.HALF_PI;else if(0>g)i=-Proj4js.common.HALF_PI;else if(P=!0,i=0,L>0)s=Proj4js.common.HALF_PI;else{if(!(0>L))return s=Proj4js.common.HALF_PI,e=-this.b,void 0;s=-Proj4js.common.HALF_PI}return n=y*y+g*g,o=Math.sqrt(n),a=L*Proj4js.common.AD_C,h=Math.sqrt(a*a+n),c=a/h,u=o/h,m=c*c*c,r=L+this.b*this.ep2*m,f=o-this.a*this.es*u*u*u,l=Math.sqrt(r*r+f*f),d=r/l,p=f/l,_=this.a/Math.sqrt(1-this.es*d*d),e=p>=Proj4js.common.COS_67P5?o/p-_:-Proj4js.common.COS_67P5>=p?o/-p-_:L/d+_*(this.es-1),0==P&&(s=Math.atan(d/p)),t.x=i,t.y=s,t.z=e,t},geocentric_to_wgs84:function(t){if(this.datum_type==Proj4js.common.PJD_3PARAM)t.x+=this.datum_params[0],t.y+=this.datum_params[1],t.z+=this.datum_params[2];else if(this.datum_type==Proj4js.common.PJD_7PARAM){var i=this.datum_params[0],s=this.datum_params[1],e=this.datum_params[2],o=this.datum_params[3],n=this.datum_params[4],a=this.datum_params[5],r=this.datum_params[6],h=r*(t.x-a*t.y+n*t.z)+i,l=r*(a*t.x+t.y-o*t.z)+s,c=r*(-n*t.x+o*t.y+t.z)+e;t.x=h,t.y=l,t.z=c}},geocentric_from_wgs84:function(t){if(this.datum_type==Proj4js.common.PJD_3PARAM)t.x-=this.datum_params[0],t.y-=this.datum_params[1],t.z-=this.datum_params[2];else if(this.datum_type==Proj4js.common.PJD_7PARAM){var i=this.datum_params[0],s=this.datum_params[1],e=this.datum_params[2],o=this.datum_params[3],n=this.datum_params[4],a=this.datum_params[5],r=this.datum_params[6],h=(t.x-i)/r,l=(t.y-s)/r,c=(t.z-e)/r;t.x=h+a*l-n*c,t.y=-a*h+l+o*c,t.z=n*h-o*l+c}}}),Proj4js.Point=Proj4js.Class({initialize:function(t,i,s){if("object"==typeof t)this.x=t[0],this.y=t[1],this.z=t[2]||0;else if("string"==typeof t&&i===void 0){var e=t.split(",");this.x=parseFloat(e[0]),this.y=parseFloat(e[1]),this.z=parseFloat(e[2])||0}else this.x=t,this.y=i,this.z=s||0},clone:function(){return new Proj4js.Point(this.x,this.y,this.z)},toString:function(){return"x="+this.x+",y="+this.y},toShortString:function(){return this.x+", "+this.y}}),Proj4js.PrimeMeridian={greenwich:0,lisbon:-9.131906111111,paris:2.337229166667,bogota:-74.080916666667,madrid:-3.687938888889,rome:12.452333333333,bern:7.439583333333,jakarta:106.807719444444,ferro:-17.666666666667,brussels:4.367975,stockholm:18.058277777778,athens:23.7163375,oslo:10.722916666667},Proj4js.Ellipsoid={MERIT:{a:6378137,rf:298.257,ellipseName:"MERIT 1983"},SGS85:{a:6378136,rf:298.257,ellipseName:"Soviet Geodetic System 85"},GRS80:{a:6378137,rf:298.257222101,ellipseName:"GRS 1980(IUGG, 1980)"},IAU76:{a:6378140,rf:298.257,ellipseName:"IAU 1976"},airy:{a:6377563.396,b:6356256.91,ellipseName:"Airy 1830"},"APL4.":{a:6378137,rf:298.25,ellipseName:"Appl. Physics. 1965"},NWL9D:{a:6378145,rf:298.25,ellipseName:"Naval Weapons Lab., 1965"},mod_airy:{a:6377340.189,b:6356034.446,ellipseName:"Modified Airy"},andrae:{a:6377104.43,rf:300,ellipseName:"Andrae 1876 (Den., Iclnd.)"},aust_SA:{a:6378160,rf:298.25,ellipseName:"Australian Natl & S. Amer. 1969"},GRS67:{a:6378160,rf:298.247167427,ellipseName:"GRS 67(IUGG 1967)"},bessel:{a:6377397.155,rf:299.1528128,ellipseName:"Bessel 1841"},bess_nam:{a:6377483.865,rf:299.1528128,ellipseName:"Bessel 1841 (Namibia)"},clrk66:{a:6378206.4,b:6356583.8,ellipseName:"Clarke 1866"},clrk80:{a:6378249.145,rf:293.4663,ellipseName:"Clarke 1880 mod."},CPM:{a:6375738.7,rf:334.29,ellipseName:"Comm. des Poids et Mesures 1799"},delmbr:{a:6376428,rf:311.5,ellipseName:"Delambre 1810 (Belgium)"},engelis:{a:6378136.05,rf:298.2566,ellipseName:"Engelis 1985"},evrst30:{a:6377276.345,rf:300.8017,ellipseName:"Everest 1830"},evrst48:{a:6377304.063,rf:300.8017,ellipseName:"Everest 1948"},evrst56:{a:6377301.243,rf:300.8017,ellipseName:"Everest 1956"},evrst69:{a:6377295.664,rf:300.8017,ellipseName:"Everest 1969"},evrstSS:{a:6377298.556,rf:300.8017,ellipseName:"Everest (Sabah & Sarawak)"},fschr60:{a:6378166,rf:298.3,ellipseName:"Fischer (Mercury Datum) 1960"},fschr60m:{a:6378155,rf:298.3,ellipseName:"Fischer 1960"},fschr68:{a:6378150,rf:298.3,ellipseName:"Fischer 1968"},helmert:{a:6378200,rf:298.3,ellipseName:"Helmert 1906"},hough:{a:6378270,rf:297,ellipseName:"Hough"},intl:{a:6378388,rf:297,ellipseName:"International 1909 (Hayford)"},kaula:{a:6378163,rf:298.24,ellipseName:"Kaula 1961"},lerch:{a:6378139,rf:298.257,ellipseName:"Lerch 1979"},mprts:{a:6397300,rf:191,ellipseName:"Maupertius 1738"},new_intl:{a:6378157.5,b:6356772.2,ellipseName:"New International 1967"},plessis:{a:6376523,rf:6355863,ellipseName:"Plessis 1817 (France)"},krass:{a:6378245,rf:298.3,ellipseName:"Krassovsky, 1942"},SEasia:{a:6378155,b:6356773.3205,ellipseName:"Southeast Asia"},walbeck:{a:6376896,b:6355834.8467,ellipseName:"Walbeck"},WGS60:{a:6378165,rf:298.3,ellipseName:"WGS 60"},WGS66:{a:6378145,rf:298.25,ellipseName:"WGS 66"},WGS72:{a:6378135,rf:298.26,ellipseName:"WGS 72"},WGS84:{a:6378137,rf:298.257223563,ellipseName:"WGS 84"},sphere:{a:6370997,b:6370997,ellipseName:"Normal Sphere (r=6370997)"}},Proj4js.Datum={WGS84:{towgs84:"0,0,0",ellipse:"WGS84",datumName:"WGS84"},GGRS87:{towgs84:"-199.87,74.79,246.62",ellipse:"GRS80",datumName:"Greek_Geodetic_Reference_System_1987"},NAD83:{towgs84:"0,0,0",ellipse:"GRS80",datumName:"North_American_Datum_1983"},NAD27:{nadgrids:"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat",ellipse:"clrk66",datumName:"North_American_Datum_1927"},potsdam:{towgs84:"606.0,23.0,413.0",ellipse:"bessel",datumName:"Potsdam Rauenberg 1950 DHDN"},carthage:{towgs84:"-263.0,6.0,431.0",ellipse:"clark80",datumName:"Carthage 1934 Tunisia"},hermannskogel:{towgs84:"653.0,-212.0,449.0",ellipse:"bessel",datumName:"Hermannskogel"},ire65:{towgs84:"482.530,-130.596,564.557,-1.042,-0.214,-0.631,8.15",ellipse:"mod_airy",datumName:"Ireland 1965"},nzgd49:{towgs84:"59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993",ellipse:"intl",datumName:"New Zealand Geodetic Datum 1949"},OSGB36:{towgs84:"446.448,-125.157,542.060,0.1502,0.2470,0.8421,-20.4894",ellipse:"airy",datumName:"Airy 1830"}},Proj4js.WGS84=new Proj4js.Proj("WGS84"),Proj4js.Datum.OSB36=Proj4js.Datum.OSGB36,Proj4js.wktProjections={"Lambert Tangential Conformal Conic Projection":"lcc",Mercator:"merc","Popular Visualisation Pseudo Mercator":"merc",Mercator_1SP:"merc",Transverse_Mercator:"tmerc","Transverse Mercator":"tmerc","Lambert Azimuthal Equal Area":"laea","Universal Transverse Mercator System":"utm"},Proj4js.Proj.aea={init:function(){return Math.abs(this.lat1+this.lat2)Proj4js.common.EPSLN?(this.ms1*this.ms1-this.ms2*this.ms2)/(this.qs2-this.qs1):this.con,this.c=this.ms1*this.ms1+this.ns0*this.qs1,this.rh=this.a*Math.sqrt(this.c-this.ns0*this.qs0)/this.ns0,void 0)},forward:function(t){var i=t.x,s=t.y;this.sin_phi=Math.sin(s),this.cos_phi=Math.cos(s);var e=Proj4js.common.qsfnz(this.e3,this.sin_phi,this.cos_phi),o=this.a*Math.sqrt(this.c-this.ns0*e)/this.ns0,n=this.ns0*Proj4js.common.adjust_lon(i-this.long0),a=o*Math.sin(n)+this.x0,r=this.rh-o*Math.cos(n)+this.y0;return t.x=a,t.y=r,t},inverse:function(t){var i,s,e,o,n,a;return t.x-=this.x0,t.y=this.rh-t.y+this.y0,this.ns0>=0?(i=Math.sqrt(t.x*t.x+t.y*t.y),e=1):(i=-Math.sqrt(t.x*t.x+t.y*t.y),e=-1),o=0,0!=i&&(o=Math.atan2(e*t.x,e*t.y)),e=i*this.ns0/this.a,s=(this.c-e*e)/this.ns0,this.e3>=1e-10?(e=1-.5*(1-this.es)*Math.log((1-this.e3)/(1+this.e3))/this.e3,a=Math.abs(Math.abs(e)-Math.abs(s))>1e-10?this.phi1z(this.e3,s):s>=0?.5*Proj4js.common.PI:-.5*Proj4js.common.PI):a=this.phi1z(this.e3,s),n=Proj4js.common.adjust_lon(o/this.ns0+this.long0),t.x=n,t.y=a,t},phi1z:function(t,i){var s,e,o,n,a,r=Proj4js.common.asinz(.5*i);if(Proj4js.common.EPSLN>t)return r;for(var h=t*t,l=1;25>=l;l++)if(s=Math.sin(r),e=Math.cos(r),o=t*s,n=1-o*o,a=.5*n*n/e*(i/(1-h)-s/n+.5/t*Math.log((1-o)/(1+o))),r+=a,1e-7>=Math.abs(a))return r;return Proj4js.reportError("aea:phi1z:Convergence error"),null}},Proj4js.Proj.sterea={dependsOn:"gauss",init:function(){return Proj4js.Proj.gauss.init.apply(this),this.rc?(this.sinc0=Math.sin(this.phic0),this.cosc0=Math.cos(this.phic0),this.R2=2*this.rc,this.title||(this.title="Oblique Stereographic Alternative"),void 0):(Proj4js.reportError("sterea:init:E_ERROR_0"),void 0)},forward:function(t){var i,s,e,o;return t.x=Proj4js.common.adjust_lon(t.x-this.long0),Proj4js.Proj.gauss.forward.apply(this,[t]),i=Math.sin(t.y),s=Math.cos(t.y),e=Math.cos(t.x),o=this.k0*this.R2/(1+this.sinc0*i+this.cosc0*s*e),t.x=o*s*Math.sin(t.x),t.y=o*(this.cosc0*i-this.sinc0*s*e),t.x=this.a*t.x+this.x0,t.y=this.a*t.y+this.y0,t},inverse:function(t){var i,s,e,o,n;if(t.x=(t.x-this.x0)/this.a,t.y=(t.y-this.y0)/this.a,t.x/=this.k0,t.y/=this.k0,n=Math.sqrt(t.x*t.x+t.y*t.y)){var a=2*Math.atan2(n,this.R2);i=Math.sin(a),s=Math.cos(a),o=Math.asin(s*this.sinc0+t.y*i*this.cosc0/n),e=Math.atan2(t.x*i,n*this.cosc0*s-t.y*this.sinc0*i)}else o=this.phic0,e=0;return t.x=e,t.y=o,Proj4js.Proj.gauss.inverse.apply(this,[t]),t.x=Proj4js.common.adjust_lon(t.x+this.long0),t}},Proj4js.Proj.poly={init:function(){0==this.lat0&&(this.lat0=90),this.temp=this.b/this.a,this.es=1-Math.pow(this.temp,2),this.e=Math.sqrt(this.es),this.e0=Proj4js.common.e0fn(this.es),this.e1=Proj4js.common.e1fn(this.es),this.e2=Proj4js.common.e2fn(this.es),this.e3=Proj4js.common.e3fn(this.es),this.ml0=Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,this.lat0)},forward:function(t){var i,s,e,o,n,a,r,h=t.x,l=t.y;return e=Proj4js.common.adjust_lon(h-this.long0),1e-7>=Math.abs(l)?(a=this.x0+this.a*e,r=this.y0-this.a*this.ml0):(i=Math.sin(l),s=Math.cos(l),o=Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,l),n=Proj4js.common.msfnz(this.e,i,s),e=i,a=this.x0+this.a*n*Math.sin(e)/i,r=this.y0+this.a*(o-this.ml0+n*(1-Math.cos(e))/i)),t.x=a,t.y=r,t},inverse:function(t){var i,s,e,o,n,a;if(t.x-=this.x0,t.y-=this.y0,i=this.ml0+t.y/this.a,o=0,1e-7>=Math.abs(i))n=t.x/this.a+this.long0,a=0;else{if(s=i*i+t.x/this.a*(t.x/this.a),o=phi4z(this.es,this.e0,this.e1,this.e2,this.e3,this.al,s,e,a),1!=o)return o;n=Proj4js.common.adjust_lon(Proj4js.common.asinz(t.x*e/this.a)/Math.sin(a)+this.long0)}return t.x=n,t.y=a,t}},Proj4js.Proj.equi={init:function(){this.x0||(this.x0=0),this.y0||(this.y0=0),this.lat0||(this.lat0=0),this.long0||(this.long0=0)},forward:function(t){var i=t.x,s=t.y,e=Proj4js.common.adjust_lon(i-this.long0),o=this.x0+this.a*e*Math.cos(this.lat0),n=this.y0+this.a*s;return this.t1=o,this.t2=Math.cos(this.lat0),t.x=o,t.y=n,t},inverse:function(t){t.x-=this.x0,t.y-=this.y0;var i=t.y/this.a;Math.abs(i)>Proj4js.common.HALF_PI&&Proj4js.reportError("equi:Inv:DataError");var s=Proj4js.common.adjust_lon(this.long0+t.x/(this.a*Math.cos(this.lat0)));t.x=s,t.y=i}},Proj4js.Proj.merc={init:function(){this.lat_ts&&(this.k0=this.sphere?Math.cos(this.lat_ts):Proj4js.common.msfnz(this.es,Math.sin(this.lat_ts),Math.cos(this.lat_ts)))},forward:function(t){var i=t.x,s=t.y;if(s*Proj4js.common.R2D>90&&-90>s*Proj4js.common.R2D&&i*Proj4js.common.R2D>180&&-180>i*Proj4js.common.R2D)return Proj4js.reportError("merc:forward: llInputOutOfRange: "+i+" : "+s),null;var e,o;if(Math.abs(Math.abs(s)-Proj4js.common.HALF_PI)<=Proj4js.common.EPSLN)return Proj4js.reportError("merc:forward: ll2mAtPoles"),null;if(this.sphere)e=this.x0+this.a*this.k0*Proj4js.common.adjust_lon(i-this.long0),o=this.y0+this.a*this.k0*Math.log(Math.tan(Proj4js.common.FORTPI+.5*s));else{var n=Math.sin(s),a=Proj4js.common.tsfnz(this.e,s,n);e=this.x0+this.a*this.k0*Proj4js.common.adjust_lon(i-this.long0),o=this.y0-this.a*this.k0*Math.log(a)}return t.x=e,t.y=o,t},inverse:function(t){var i,s,e=t.x-this.x0,o=t.y-this.y0;if(this.sphere)s=Proj4js.common.HALF_PI-2*Math.atan(Math.exp(-o/this.a*this.k0));else{var n=Math.exp(-o/(this.a*this.k0));if(s=Proj4js.common.phi2z(this.e,n),-9999==s)return Proj4js.reportError("merc:inverse: lat = -9999"),null}return i=Proj4js.common.adjust_lon(this.long0+e/(this.a*this.k0)),t.x=i,t.y=s,t}},Proj4js.Proj.utm={dependsOn:"tmerc",init:function(){return this.zone?(this.lat0=0,this.long0=(6*Math.abs(this.zone)-183)*Proj4js.common.D2R,this.x0=5e5,this.y0=this.utmSouth?1e7:0,this.k0=.9996,Proj4js.Proj.tmerc.init.apply(this),this.forward=Proj4js.Proj.tmerc.forward,this.inverse=Proj4js.Proj.tmerc.inverse,void 0):(Proj4js.reportError("utm:init: zone must be specified for UTM"),void 0)}},Proj4js.Proj.eqdc={init:function(){this.mode||(this.mode=0),this.temp=this.b/this.a,this.es=1-Math.pow(this.temp,2),this.e=Math.sqrt(this.es),this.e0=Proj4js.common.e0fn(this.es),this.e1=Proj4js.common.e1fn(this.es),this.e2=Proj4js.common.e2fn(this.es),this.e3=Proj4js.common.e3fn(this.es),this.sinphi=Math.sin(this.lat1),this.cosphi=Math.cos(this.lat1),this.ms1=Proj4js.common.msfnz(this.e,this.sinphi,this.cosphi),this.ml1=Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,this.lat1),0!=this.mode?(Math.abs(this.lat1+this.lat2)=Proj4js.common.EPSLN?(this.ms1-this.ms2)/(this.ml2-this.ml1):this.sinphi):this.ns=this.sinphi,this.g=this.ml1+this.ms1/this.ns,this.ml0=Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,this.lat0),this.rh=this.a*(this.g-this.ml0) +},forward:function(t){var i=t.x,s=t.y,e=Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,s),o=this.a*(this.g-e),n=this.ns*Proj4js.common.adjust_lon(i-this.long0),a=this.x0+o*Math.sin(n),r=this.y0+this.rh-o*Math.cos(n);return t.x=a,t.y=r,t},inverse:function(t){t.x-=this.x0,t.y=this.rh-t.y+this.y0;var i,s;this.ns>=0?(s=Math.sqrt(t.x*t.x+t.y*t.y),i=1):(s=-Math.sqrt(t.x*t.x+t.y*t.y),i=-1);var e=0;0!=s&&(e=Math.atan2(i*t.x,i*t.y));var o=this.g-s/this.a,n=this.phi3z(o,this.e0,this.e1,this.e2,this.e3),a=Proj4js.common.adjust_lon(this.long0+e/this.ns);return t.x=a,t.y=n,t},phi3z:function(t,i,s,e,o){var n,a;n=t;for(var r=0;15>r;r++)if(a=(t+s*Math.sin(2*n)-e*Math.sin(4*n)+o*Math.sin(6*n))/i-n,n+=a,1e-10>=Math.abs(a))return n;return Proj4js.reportError("PHI3Z-CONV:Latitude failed to converge after 15 iterations"),null}},Proj4js.Proj.tmerc={init:function(){this.e0=Proj4js.common.e0fn(this.es),this.e1=Proj4js.common.e1fn(this.es),this.e2=Proj4js.common.e2fn(this.es),this.e3=Proj4js.common.e3fn(this.es),this.ml0=this.a*Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,this.lat0)},forward:function(t){var i,s,e,o=t.x,n=t.y,a=Proj4js.common.adjust_lon(o-this.long0),r=Math.sin(n),h=Math.cos(n);if(this.sphere){var l=h*Math.sin(a);if(1e-10>Math.abs(Math.abs(l)-1))return Proj4js.reportError("tmerc:forward: Point projects into infinity"),93;s=.5*this.a*this.k0*Math.log((1+l)/(1-l)),i=Math.acos(h*Math.cos(a)/Math.sqrt(1-l*l)),0>n&&(i=-i),e=this.a*this.k0*(i-this.lat0)}else{var c=h*a,m=Math.pow(c,2),u=this.ep2*Math.pow(h,2),d=Math.tan(n),p=Math.pow(d,2);i=1-this.es*Math.pow(r,2);var _=this.a/Math.sqrt(i),f=this.a*Proj4js.common.mlfn(this.e0,this.e1,this.e2,this.e3,n);s=this.k0*_*c*(1+m/6*(1-p+u+m/20*(5-18*p+Math.pow(p,2)+72*u-58*this.ep2)))+this.x0,e=this.k0*(f-this.ml0+_*d*m*(.5+m/24*(5-p+9*u+4*Math.pow(u,2)+m/30*(61-58*p+Math.pow(p,2)+600*u-330*this.ep2))))+this.y0}return t.x=s,t.y=e,t},inverse:function(t){var i,s,e,o,n,a,r=6;if(this.sphere){var h=Math.exp(t.x/(this.a*this.k0)),l=.5*(h-1/h),c=this.lat0+t.y/(this.a*this.k0),m=Math.cos(c);i=Math.sqrt((1-m*m)/(1+l*l)),n=Proj4js.common.asinz(i),0>c&&(n=-n),a=0==l&&0==m?this.long0:Proj4js.common.adjust_lon(Math.atan2(l,m)+this.long0)}else{var u=t.x-this.x0,d=t.y-this.y0;for(i=(this.ml0+d/this.k0)/this.a,s=i,o=0;!0&&(e=(i+this.e1*Math.sin(2*s)-this.e2*Math.sin(4*s)+this.e3*Math.sin(6*s))/this.e0-s,s+=e,!(Math.abs(e)<=Proj4js.common.EPSLN));o++)if(o>=r)return Proj4js.reportError("tmerc:inverse: Latitude failed to converge"),95;if(Math.abs(s)0||Math.abs(a)<=Proj4js.common.EPSLN)var l=this.a*n*s*Math.sin(e),c=this.y0+this.a*n*(this.cos_p14*i-this.sin_p14*s*o);else Proj4js.reportError("orthoFwdPointError");return t.x=l,t.y=c,t},inverse:function(t){var i,s,e,o,n,a,r;return t.x-=this.x0,t.y-=this.y0,i=Math.sqrt(t.x*t.x+t.y*t.y),i>this.a+1e-7&&Proj4js.reportError("orthoInvDataError"),s=Proj4js.common.asinz(i/this.a),e=Math.sin(s),o=Math.cos(s),a=this.long0,Math.abs(i)<=Proj4js.common.EPSLN&&(r=this.lat0),r=Proj4js.common.asinz(o*this.sin_p14+t.y*e*this.cos_p14/i),n=Math.abs(this.lat0)-Proj4js.common.HALF_PI,Math.abs(n)<=Proj4js.common.EPSLN&&(a=this.lat0>=0?Proj4js.common.adjust_lon(this.long0+Math.atan2(t.x,-t.y)):Proj4js.common.adjust_lon(this.long0-Math.atan2(-t.x,t.y))),n=o-this.sin_p14*Math.sin(r),t.x=a,t.y=r,t}},Proj4js.Proj.krovak={init:function(){this.a=6377397.155,this.es=.006674372230614,this.e=Math.sqrt(this.es),this.lat0||(this.lat0=.863937979737193),this.long0||(this.long0=.4334234309119251),this.k0||(this.k0=.9999),this.s45=.785398163397448,this.s90=2*this.s45,this.fi0=this.lat0,this.e2=this.es,this.e=Math.sqrt(this.e2),this.alfa=Math.sqrt(1+this.e2*Math.pow(Math.cos(this.fi0),4)/(1-this.e2)),this.uq=1.04216856380474,this.u0=Math.asin(Math.sin(this.fi0)/this.alfa),this.g=Math.pow((1+this.e*Math.sin(this.fi0))/(1-this.e*Math.sin(this.fi0)),this.alfa*this.e/2),this.k=Math.tan(this.u0/2+this.s45)/Math.pow(Math.tan(this.fi0/2+this.s45),this.alfa)*this.g,this.k1=this.k0,this.n0=this.a*Math.sqrt(1-this.e2)/(1-this.e2*Math.pow(Math.sin(this.fi0),2)),this.s0=1.37008346281555,this.n=Math.sin(this.s0),this.ro0=this.k1*this.n0/Math.tan(this.s0),this.ad=this.s90-this.uq},forward:function(t){var i,s,e,o,n,a,r,h=t.x,l=t.y,c=Proj4js.common.adjust_lon(h-this.long0);return i=Math.pow((1+this.e*Math.sin(l))/(1-this.e*Math.sin(l)),this.alfa*this.e/2),s=2*(Math.atan(this.k*Math.pow(Math.tan(l/2+this.s45),this.alfa)/i)-this.s45),e=-c*this.alfa,o=Math.asin(Math.cos(this.ad)*Math.sin(s)+Math.sin(this.ad)*Math.cos(s)*Math.cos(e)),n=Math.asin(Math.cos(s)*Math.sin(e)/Math.cos(o)),a=this.n*n,r=this.ro0*Math.pow(Math.tan(this.s0/2+this.s45),this.n)/Math.pow(Math.tan(o/2+this.s45),this.n),t.y=r*Math.cos(a)/1,t.x=r*Math.sin(a)/1,this.czech&&(t.y*=-1,t.x*=-1),t},inverse:function(t){var i,s,e,o,n,a,r,h,l=t.x;t.x=t.y,t.y=l,this.czech&&(t.y*=-1,t.x*=-1),a=Math.sqrt(t.x*t.x+t.y*t.y),n=Math.atan2(t.y,t.x),o=n/Math.sin(this.s0),e=2*(Math.atan(Math.pow(this.ro0/a,1/this.n)*Math.tan(this.s0/2+this.s45))-this.s45),i=Math.asin(Math.cos(this.ad)*Math.sin(e)-Math.sin(this.ad)*Math.cos(e)*Math.cos(o)),s=Math.asin(Math.cos(e)*Math.sin(o)/Math.cos(i)),t.x=this.long0-s/this.alfa,r=i,h=0;var c=0;do t.y=2*(Math.atan(Math.pow(this.k,-1/this.alfa)*Math.pow(Math.tan(i/2+this.s45),1/this.alfa)*Math.pow((1+this.e*Math.sin(r))/(1-this.e*Math.sin(r)),this.e/2))-this.s45),1e-10>Math.abs(r-t.y)&&(h=1),r=t.y,c+=1;while(0==h&&15>c);return c>=15?(Proj4js.reportError("PHI3Z-CONV:Latitude failed to converge after 15 iterations"),null):t}},Proj4js.Proj.somerc={init:function(){var t=this.lat0;this.lambda0=this.long0;var i=Math.sin(t),s=this.a,e=this.rf,o=1/e,n=2*o-Math.pow(o,2),a=this.e=Math.sqrt(n);this.R=this.k0*s*Math.sqrt(1-n)/(1-n*Math.pow(i,2)),this.alpha=Math.sqrt(1+n/(1-n)*Math.pow(Math.cos(t),4)),this.b0=Math.asin(i/this.alpha),this.K=Math.log(Math.tan(Math.PI/4+this.b0/2))-this.alpha*Math.log(Math.tan(Math.PI/4+t/2))+this.alpha*a/2*Math.log((1+a*i)/(1-a*i))},forward:function(t){var i=Math.log(Math.tan(Math.PI/4-t.y/2)),s=this.e/2*Math.log((1+this.e*Math.sin(t.y))/(1-this.e*Math.sin(t.y))),e=-this.alpha*(i+s)+this.K,o=2*(Math.atan(Math.exp(e))-Math.PI/4),n=this.alpha*(t.x-this.lambda0),a=Math.atan(Math.sin(n)/(Math.sin(this.b0)*Math.tan(o)+Math.cos(this.b0)*Math.cos(n))),r=Math.asin(Math.cos(this.b0)*Math.sin(o)-Math.sin(this.b0)*Math.cos(o)*Math.cos(n));return t.y=this.R/2*Math.log((1+Math.sin(r))/(1-Math.sin(r)))+this.y0,t.x=this.R*a+this.x0,t},inverse:function(t){for(var i=t.x-this.x0,s=t.y-this.y0,e=i/this.R,o=2*(Math.atan(Math.exp(s/this.R))-Math.PI/4),n=Math.asin(Math.cos(this.b0)*Math.sin(o)+Math.sin(this.b0)*Math.cos(o)*Math.cos(e)),a=Math.atan(Math.sin(e)/(Math.cos(this.b0)*Math.cos(e)-Math.sin(this.b0)*Math.tan(o))),r=this.lambda0+a/this.alpha,h=0,l=n,c=-1e3,m=0;Math.abs(l-c)>1e-7;){if(++m>20)return Proj4js.reportError("omercFwdInfinity"),void 0;h=1/this.alpha*(Math.log(Math.tan(Math.PI/4+n/2))-this.K)+this.e*Math.log(Math.tan(Math.PI/4+Math.asin(this.e*Math.sin(l))/2)),c=l,l=2*Math.atan(Math.exp(h))-Math.PI/2}return t.x=r,t.y=l,t}},Proj4js.Proj.stere={ssfn_:function(t,i,s){return i*=s,Math.tan(.5*(Proj4js.common.HALF_PI+t))*Math.pow((1-i)/(1+i),.5*s)},TOL:1e-8,NITER:8,CONV:1e-10,S_POLE:0,N_POLE:1,OBLIQ:2,EQUIT:3,init:function(){this.phits=this.lat_ts?this.lat_ts:Proj4js.common.HALF_PI;var t=Math.abs(this.lat0);if(this.mode=Math.abs(t)-Proj4js.common.HALF_PIthis.lat0?this.S_POLE:this.N_POLE:t>Proj4js.common.EPSLN?this.OBLIQ:this.EQUIT,this.phits=Math.abs(this.phits),this.es){var i;switch(this.mode){case this.N_POLE:case this.S_POLE:Math.abs(this.phits-Proj4js.common.HALF_PI)=Proj4js.common.EPSLN?Math.cos(this.phits)/Math.tan(Proj4js.common.FORTPI-.5*this.phits):2*this.k0}},forward:function(t){var i=t.x;i=Proj4js.common.adjust_lon(i-this.long0);var s,e,o=t.y;if(this.sphere){var n,a,r,h;switch(n=Math.sin(o),a=Math.cos(o),r=Math.cos(i),h=Math.sin(i),this.mode){case this.EQUIT:e=1+a*r,Proj4js.common.EPSLN>=e&&Proj4js.reportError("stere:forward:Equit"),e=this.akm1/e,s=e*a*h,e*=n;break;case this.OBLIQ:e=1+this.sinph0*n+this.cosph0*a*r,Proj4js.common.EPSLN>=e&&Proj4js.reportError("stere:forward:Obliq"),e=this.akm1/e,s=e*a*h,e*=this.cosph0*n-this.sinph0*a*r;break;case this.N_POLE:r=-r,o=-o;case this.S_POLE:Math.abs(o-Proj4js.common.HALF_PI)=l;l++)r*=n,h+=this.A[l]*r;for(var c,m,u=h,d=a,p=1,_=0,f=0,P=0,l=1;6>=l;l++)c=p*u-_*d,m=_*u+p*d,p=c,_=m,f=f+this.B_re[l]*p-this.B_im[l]*_,P=P+this.B_im[l]*p+this.B_re[l]*_;return t.x=P*this.a+this.x0,t.y=f*this.a+this.y0,t},inverse:function(t){for(var i,s,e=t.x,o=t.y,n=e-this.x0,a=o-this.y0,r=a/this.a,h=n/this.a,l=1,c=0,m=0,u=0,d=1;6>=d;d++)i=l*r-c*h,s=c*r+l*h,l=i,c=s,m=m+this.C_re[d]*l-this.C_im[d]*c,u=u+this.C_im[d]*l+this.C_re[d]*c;for(var p=0;this.iterations>p;p++){for(var _,f,P=m,y=u,g=r,L=h,d=2;6>=d;d++)_=P*m-y*u,f=y*m+P*u,P=_,y=f,g+=(d-1)*(this.B_re[d]*P-this.B_im[d]*y),L+=(d-1)*(this.B_im[d]*P+this.B_re[d]*y);P=1,y=0;for(var v=this.B_re[1],j=this.B_im[1],d=2;6>=d;d++)_=P*m-y*u,f=y*m+P*u,P=_,y=f,v+=d*(this.B_re[d]*P-this.B_im[d]*y),j+=d*(this.B_im[d]*P+this.B_re[d]*y);var M=v*v+j*j;m=(g*v+L*j)/M,u=(L*v-g*j)/M}for(var S=m,b=u,x=1,E=0,d=1;9>=d;d++)x*=S,E+=this.D[d]*x;var C=this.lat0+1e5*E*Proj4js.common.SEC_TO_RAD,w=this.long0+b;return t.x=w,t.y=C,t}},Proj4js.Proj.mill={init:function(){},forward:function(t){var i=t.x,s=t.y,e=Proj4js.common.adjust_lon(i-this.long0),o=this.x0+this.a*e,n=this.y0+1.25*this.a*Math.log(Math.tan(Proj4js.common.PI/4+s/2.5));return t.x=o,t.y=n,t},inverse:function(t){t.x-=this.x0,t.y-=this.y0;var i=Proj4js.common.adjust_lon(this.long0+t.x/this.a),s=2.5*(Math.atan(Math.exp(.8*t.y/this.a))-Proj4js.common.PI/4);return t.x=i,t.y=s,t}},Proj4js.Proj.gnom={init:function(){this.sin_p14=Math.sin(this.lat0),this.cos_p14=Math.cos(this.lat0),this.infinity_dist=1e3*this.a,this.rc=1},forward:function(t){var i,s,e,o,n,a,r,h,l=t.x,c=t.y;return e=Proj4js.common.adjust_lon(l-this.long0),i=Math.sin(c),s=Math.cos(c),o=Math.cos(e),a=this.sin_p14*i+this.cos_p14*s*o,n=1,a>0||Math.abs(a)<=Proj4js.common.EPSLN?(r=this.x0+this.a*n*s*Math.sin(e)/a,h=this.y0+this.a*n*(this.cos_p14*i-this.sin_p14*s*o)/a):(Proj4js.reportError("orthoFwdPointError"),r=this.x0+this.infinity_dist*s*Math.sin(e),h=this.y0+this.infinity_dist*(this.cos_p14*i-this.sin_p14*s*o)),t.x=r,t.y=h,t},inverse:function(t){var i,s,e,o,n,a;return t.x=(t.x-this.x0)/this.a,t.y=(t.y-this.y0)/this.a,t.x/=this.k0,t.y/=this.k0,(i=Math.sqrt(t.x*t.x+t.y*t.y))?(o=Math.atan2(i,this.rc),s=Math.sin(o),e=Math.cos(o),a=Proj4js.common.asinz(e*this.sin_p14+t.y*s*this.cos_p14/i),n=Math.atan2(t.x*s,i*this.cos_p14*e-t.y*this.sin_p14*s),n=Proj4js.common.adjust_lon(this.long0+n)):(a=this.phic0,n=0),t.x=n,t.y=a,t}},Proj4js.Proj.sinu={init:function(){this.sphere?(this.n=1,this.m=0,this.es=0,this.C_y=Math.sqrt((this.m+1)/this.n),this.C_x=this.C_y/(this.m+1)):this.en=Proj4js.common.pj_enfn(this.es)},forward:function(t){var i,s,e=t.x,o=t.y;if(e=Proj4js.common.adjust_lon(e-this.long0),this.sphere){if(this.m)for(var n=this.n*Math.sin(o),a=Proj4js.common.MAX_ITER;a;--a){var r=(this.m*o+Math.sin(o)-n)/(this.m+Math.cos(o));if(o-=r,Math.abs(r)o?(o=Math.sin(i),s=this.long0+t.x*Math.sqrt(1-this.es*o*o)/(this.a*Math.cos(i)),e=Proj4js.common.adjust_lon(s)):o-Proj4js.common.EPSLN=0?this.y0+Proj4js.common.PI*this.R*Math.tan(.5*a):this.y0+Proj4js.common.PI*this.R*-Math.tan(.5*a));var r=.5*Math.abs(Proj4js.common.PI/n-n/Proj4js.common.PI),h=r*r,l=Math.sin(a),c=Math.cos(a),m=c/(l+c-1),u=m*m,d=m*(2/l-1),p=d*d,_=Proj4js.common.PI*this.R*(r*(m-p)+Math.sqrt(h*(m-p)*(m-p)-(p+h)*(u-p)))/(p+h);return 0>n&&(_=-_),i=this.x0+_,_=Math.abs(_/(Proj4js.common.PI*this.R)),s=o>=0?this.y0+Proj4js.common.PI*this.R*Math.sqrt(1-_*_-2*r*_):this.y0-Proj4js.common.PI*this.R*Math.sqrt(1-_*_-2*r*_),t.x=i,t.y=s,t},inverse:function(t){var i,s,e,o,n,a,r,h,l,c,m,u,d;return t.x-=this.x0,t.y-=this.y0,m=Proj4js.common.PI*this.R,e=t.x/m,o=t.y/m,n=e*e+o*o,a=-Math.abs(o)*(1+n),r=a-2*o*o+e*e,h=-2*a+1+2*o*o+n*n,d=o*o/h+(2*r*r*r/h/h/h-9*a*r/h/h)/27,l=(a-r*r/3/h)/h,c=2*Math.sqrt(-l/3),m=3*d/l/c,Math.abs(m)>1&&(m=m>=0?1:-1),u=Math.acos(m)/3,s=t.y>=0?(-c*Math.cos(u+Proj4js.common.PI/3)-r/3/h)*Proj4js.common.PI:-(-c*Math.cos(u+Proj4js.common.PI/3)-r/3/h)*Proj4js.common.PI,Math.abs(e)0&&(e=2*Math.atan(o*Proj4js.common.srat(this.e*Math.sin(t.y),-.5*this.e))-Proj4js.common.HALF_PI,!(i>Math.abs(e-t.y)));--n)t.y=e;return n?(t.x=s,t.y=e,t):(Proj4js.reportError("gauss:inverse:convergence failed"),null)}},Proj4js.Proj.omerc={init:function(){this.mode||(this.mode=0),this.lon1||(this.lon1=0,this.mode=1),this.lon2||(this.lon2=0),this.lat2||(this.lat2=0);var t=this.b/this.a,i=1-Math.pow(t,2);Math.sqrt(i),this.sin_p20=Math.sin(this.lat0),this.cos_p20=Math.cos(this.lat0),this.con=1-this.es*this.sin_p20*this.sin_p20,this.com=Math.sqrt(1-i),this.bl=Math.sqrt(1+this.es*Math.pow(this.cos_p20,4)/(1-i)),this.al=this.a*this.bl*this.k0*this.com/this.con,Math.abs(this.lat0)0?this.lat0>=0?this.d+Math.sqrt(this.d*this.d-1):this.d-Math.sqrt(this.d*this.d-1):this.d,this.el=this.f*Math.pow(this.ts,this.bl)),0!=this.mode?(this.g=.5*(this.f-1/this.f),this.gama=Proj4js.common.asinz(Math.sin(this.alpha)/this.d),this.longc=this.longc-Proj4js.common.asinz(this.g*Math.tan(this.gama))/this.bl,this.con=Math.abs(this.lat0),this.con>Proj4js.common.EPSLN&&Math.abs(this.con-Proj4js.common.HALF_PI)>Proj4js.common.EPSLN?(this.singam=Math.sin(this.gama),this.cosgam=Math.cos(this.gama),this.sinaz=Math.sin(this.alpha),this.cosaz=Math.cos(this.alpha),this.u=this.lat0>=0?this.al/this.bl*Math.atan(Math.sqrt(this.d*this.d-1)/this.cosaz):-(this.al/this.bl)*Math.atan(Math.sqrt(this.d*this.d-1)/this.cosaz)):Proj4js.reportError("omerc:Init:DataError")):(this.sinphi=Math.sin(this.at1),this.ts1=Proj4js.common.tsfnz(this.e,this.lat1,this.sinphi),this.sinphi=Math.sin(this.lat2),this.ts2=Proj4js.common.tsfnz(this.e,this.lat2,this.sinphi),this.h=Math.pow(this.ts1,this.bl),this.l=Math.pow(this.ts2,this.bl),this.f=this.el/this.h,this.g=.5*(this.f-1/this.f),this.j=(this.el*this.el-this.l*this.h)/(this.el*this.el+this.l*this.h),this.p=(this.l-this.h)/(this.l+this.h),this.dlon=this.lon1-this.lon2,this.dlon<-Proj4js.common.PI&&(this.lon2=this.lon2-2*Proj4js.common.PI),this.dlon>Proj4js.common.PI&&(this.lon2=this.lon2+2*Proj4js.common.PI),this.dlon=this.lon1-this.lon2,this.longc=.5*(this.lon1+this.lon2)-Math.atan(this.j*Math.tan(.5*this.bl*this.dlon)/this.p)/this.bl,this.dlon=Proj4js.common.adjust_lon(this.lon1-this.longc),this.gama=Math.atan(Math.sin(this.bl*this.dlon)/this.g),this.alpha=Proj4js.common.asinz(this.d*Math.sin(this.gama)),Math.abs(this.lat1-this.lat2)<=Proj4js.common.EPSLN?Proj4js.reportError("omercInitDataError"):this.con=Math.abs(this.lat1),this.con<=Proj4js.common.EPSLN||Math.abs(this.con-Proj4js.common.HALF_PI)<=Proj4js.common.EPSLN?Proj4js.reportError("omercInitDataError"):Math.abs(Math.abs(this.lat0)-Proj4js.common.HALF_PI)<=Proj4js.common.EPSLN&&Proj4js.reportError("omercInitDataError"),this.singam=Math.sin(this.gam),this.cosgam=Math.cos(this.gam),this.sinaz=Math.sin(this.alpha),this.cosaz=Math.cos(this.alpha),this.u=this.lat0>=0?this.al/this.bl*Math.atan(Math.sqrt(this.d*this.d-1)/this.cosaz):-(this.al/this.bl)*Math.atan(Math.sqrt(this.d*this.d-1)/this.cosaz))},forward:function(t){var i,s,e,o,n,a,r,h,l,c,m,u=t.x,d=t.y;i=Math.sin(d),c=Proj4js.common.adjust_lon(u-this.longc),a=Math.sin(this.bl*c),Math.abs(Math.abs(d)-Proj4js.common.HALF_PI)>Proj4js.common.EPSLN?(m=Proj4js.common.tsfnz(this.e,d,i),o=this.el/Math.pow(m,this.bl),l=.5*(o-1/o),s=.5*(o+1/o),r=(l*this.singam-a*this.cosgam)/s,e=Math.cos(this.bl*c),1e-7>Math.abs(e)?n=this.al*this.bl*c:(n=this.al*Math.atan((l*this.cosgam+a*this.singam)/e)/this.bl,0>e&&(n+=Proj4js.common.PI*this.al/this.bl))):(r=d>=0?this.singam:-this.singam,n=this.al*d/this.bl),Math.abs(Math.abs(r)-1)<=Proj4js.common.EPSLN&&Proj4js.reportError("omercFwdInfinity"),h=.5*this.al*Math.log((1-r)/(1+r))/this.bl,n-=this.u;var p=this.x0+h*this.cosaz+n*this.sinaz,_=this.y0+n*this.cosaz-h*this.sinaz;return t.x=p,t.y=_,t},inverse:function(t){var i,s,e,o,n,a,r,h,l,c,m,u,d;return t.x-=this.x0,t.y-=this.y0,d=0,o=t.x*this.cosaz-t.y*this.sinaz,n=t.y*this.cosaz+t.x*this.sinaz,n+=this.u,a=Math.exp(-this.bl*o/this.al),r=.5*(a-1/a),s=.5*(a+1/a),l=Math.sin(this.bl*n/this.al),c=(l*this.cosgam+r*this.singam)/s,Math.abs(Math.abs(c)-1)<=Proj4js.common.EPSLN?(m=this.longc,u=c>=0?Proj4js.common.HALF_PI:-Proj4js.common.HALF_PI):(e=1/this.bl,h=Math.pow(this.el/Math.sqrt((1+c)/(1-c)),e),u=Proj4js.common.phi2z(this.e,h),i=this.longc-Math.atan2(r*this.cosgam-l*this.singam,e)/this.bl,m=Proj4js.common.adjust_lon(i)),t.x=m,t.y=u,t}},Proj4js.Proj.lcc={init:function(){if(this.lat2||(this.lat2=this.lat0),this.k0||(this.k0=1),Math.abs(this.lat1+this.lat2)Proj4js.common.EPSLN?Math.log(e/r)/Math.log(o/h):i,this.f0=e/(this.ns*Math.pow(o,this.ns)),this.rh=this.a*this.f0*Math.pow(l,this.ns),this.title||(this.title="Lambert Conformal Conic")},forward:function(t){var i=t.x,s=t.y;if(!(90>=s&&s>=-90&&180>=i&&i>=-180))return Proj4js.reportError("lcc:forward: llInputOutOfRange: "+i+" : "+s),null;var e,o,n=Math.abs(Math.abs(s)-Proj4js.common.HALF_PI);if(n>Proj4js.common.EPSLN)e=Proj4js.common.tsfnz(this.e,s,Math.sin(s)),o=this.a*this.f0*Math.pow(e,this.ns);else{if(n=s*this.ns,0>=n)return Proj4js.reportError("lcc:forward: No Projection"),null;o=0}var a=this.ns*Proj4js.common.adjust_lon(i-this.long0);return t.x=this.k0*o*Math.sin(a)+this.x0,t.y=this.k0*(this.rh-o*Math.cos(a))+this.y0,t},inverse:function(t){var i,s,e,o,n,a=(t.x-this.x0)/this.k0,r=this.rh-(t.y-this.y0)/this.k0;this.ns>0?(i=Math.sqrt(a*a+r*r),s=1):(i=-Math.sqrt(a*a+r*r),s=-1);var h=0;if(0!=i&&(h=Math.atan2(s*a,s*r)),0!=i||this.ns>0){if(s=1/this.ns,e=Math.pow(i/(this.a*this.f0),s),o=Proj4js.common.phi2z(this.e,e),-9999==o)return null}else o=-Proj4js.common.HALF_PI;return n=Proj4js.common.adjust_lon(h/this.ns+this.long0),t.x=n,t.y=o,t}},Proj4js.Proj.laea={S_POLE:1,N_POLE:2,EQUIT:3,OBLIQ:4,init:function(){var t=Math.abs(this.lat0);if(this.mode=Math.abs(t-Proj4js.common.HALF_PI)this.lat0?this.S_POLE:this.N_POLE:Math.abs(t)0){var i;switch(this.qp=Proj4js.common.qsfnz(this.e,1),this.mmf=.5/(1-this.es),this.apa=this.authset(this.es),this.mode){case this.N_POLE:case this.S_POLE:this.dd=1;break;case this.EQUIT:this.rq=Math.sqrt(.5*this.qp),this.dd=1/this.rq,this.xmf=1,this.ymf=.5*this.qp;break;case this.OBLIQ:this.rq=Math.sqrt(.5*this.qp),i=Math.sin(this.lat0),this.sinb1=Proj4js.common.qsfnz(this.e,i)/this.qp,this.cosb1=Math.sqrt(1-this.sinb1*this.sinb1),this.dd=Math.cos(this.lat0)/(Math.sqrt(1-this.es*i*i)*this.rq*this.cosb1),this.ymf=(this.xmf=this.rq)/this.dd,this.xmf*=this.dd}}else this.mode==this.OBLIQ&&(this.sinph0=Math.sin(this.lat0),this.cosph0=Math.cos(this.lat0))},forward:function(t){var i,s,e=t.x,o=t.y;if(e=Proj4js.common.adjust_lon(e-this.long0),this.sphere){var n,a,r;switch(r=Math.sin(o),a=Math.cos(o),n=Math.cos(e),this.mode){case this.OBLIQ:case this.EQUIT:if(s=this.mode==this.EQUIT?1+a*n:1+this.sinph0*r+this.cosph0*a*n,Proj4js.common.EPSLN>=s)return Proj4js.reportError("laea:fwd:y less than eps"),null;s=Math.sqrt(2/s),i=s*a*Math.sin(e),s*=this.mode==this.EQUIT?r:this.cosph0*r-this.sinph0*a*n;break;case this.N_POLE:n=-n;case this.S_POLE:if(Math.abs(o+this.phi0)=0?(i=(u=Math.sqrt(l))*h,s=n*(this.mode==this.S_POLE?u:-u)):i=s=0}}return t.x=this.a*i+this.x0,t.y=this.a*s+this.y0,t},inverse:function(t){t.x-=this.x0,t.y-=this.y0;var i,s,e=t.x/this.a,o=t.y/this.a;if(this.sphere){var n,a=0,r=0;if(n=Math.sqrt(e*e+o*o),s=.5*n,s>1)return Proj4js.reportError("laea:Inv:DataError"),null; +switch(s=2*Math.asin(s),(this.mode==this.OBLIQ||this.mode==this.EQUIT)&&(r=Math.sin(s),a=Math.cos(s)),this.mode){case this.EQUIT:s=Math.abs(n)<=Proj4js.common.EPSLN?0:Math.asin(o*r/n),e*=r,o=a*n;break;case this.OBLIQ:s=Math.abs(n)<=Proj4js.common.EPSLN?this.phi0:Math.asin(a*this.sinph0+o*r*this.cosph0/n),e*=r*this.cosph0,o=(a-Math.sin(s)*this.sinph0)*n;break;case this.N_POLE:o=-o,s=Proj4js.common.HALF_PI-s;break;case this.S_POLE:s-=Proj4js.common.HALF_PI}i=0!=o||this.mode!=this.EQUIT&&this.mode!=this.OBLIQ?Math.atan2(e,o):0}else{var h,l,c,m,u=0;switch(this.mode){case this.EQUIT:case this.OBLIQ:if(e/=this.dd,o*=this.dd,m=Math.sqrt(e*e+o*o),Proj4js.common.EPSLN>m)return t.x=0,t.y=this.phi0,t;l=2*Math.asin(.5*m/this.rq),h=Math.cos(l),e*=l=Math.sin(l),this.mode==this.OBLIQ?(u=h*this.sinb1+o*l*this.cosb1/m,c=this.qp*u,o=m*this.cosb1*h-o*this.sinb1*l):(u=o*l/m,c=this.qp*u,o=m*h);break;case this.N_POLE:o=-o;case this.S_POLE:if(c=e*e+o*o,!c)return t.x=0,t.y=this.phi0,t;u=1-c/this.qp,this.mode==this.S_POLE&&(u=-u)}i=Math.atan2(e,o),s=this.authlat(Math.asin(u),this.apa)}return t.x=Proj4js.common.adjust_lon(this.long0+i),t.y=s,t},P00:.3333333333333333,P01:.17222222222222222,P02:.10257936507936508,P10:.06388888888888888,P11:.0664021164021164,P20:.016415012942191543,authset:function(t){var i,s=[];return s[0]=t*this.P00,i=t*t,s[0]+=i*this.P01,s[1]=i*this.P10,i*=t,s[0]+=i*this.P02,s[1]+=i*this.P11,s[2]=i*this.P20,s},authlat:function(t,i){var s=t+t;return t+i[0]*Math.sin(s)+i[1]*Math.sin(s+s)+i[2]*Math.sin(s+s+s)}},Proj4js.Proj.aeqd={init:function(){this.sin_p12=Math.sin(this.lat0),this.cos_p12=Math.cos(this.lat0)},forward:function(t){var i=t.x;t.y;var s,e=Math.sin(t.y),o=Math.cos(t.y),n=Proj4js.common.adjust_lon(i-this.long0),a=Math.cos(n),r=this.sin_p12*e+this.cos_p12*o*a;if(Math.abs(Math.abs(r)-1)r)return Proj4js.reportError("aeqd:Fwd:PointError"),void 0}else{var h=Math.acos(r);s=h/Math.sin(h)}return t.x=this.x0+this.a*s*o*Math.sin(n),t.y=this.y0+this.a*s*(this.cos_p12*e-this.sin_p12*o*a),t},inverse:function(t){t.x-=this.x0,t.y-=this.y0;var i=Math.sqrt(t.x*t.x+t.y*t.y);if(i>2*Proj4js.common.HALF_PI*this.a)return Proj4js.reportError("aeqdInvDataError"),void 0;var s,e=i/this.a,o=Math.sin(e),n=Math.cos(e),a=this.long0;if(Math.abs(i)<=Proj4js.common.EPSLN)s=this.lat0;else{s=Proj4js.common.asinz(n*this.sin_p12+t.y*o*this.cos_p12/i);var r=Math.abs(this.lat0)-Proj4js.common.HALF_PI;Math.abs(r)<=Proj4js.common.EPSLN?a=this.lat0>=0?Proj4js.common.adjust_lon(this.long0+Math.atan2(t.x,-t.y)):Proj4js.common.adjust_lon(this.long0-Math.atan2(-t.x,t.y)):(r=n-this.sin_p12*Math.sin(s),Math.abs(r)=50&&Proj4js.reportError("moll:Fwd:IterationError")}o/=2,Proj4js.common.PI/2-Math.abs(s).999999999999&&(s=.999999999999);var i=Math.asin(s),e=Proj4js.common.adjust_lon(this.long0+t.x/(.900316316158*this.a*Math.cos(i)));-Proj4js.common.PI>e&&(e=-Proj4js.common.PI),e>Proj4js.common.PI&&(e=Proj4js.common.PI),s=(2*i+Math.sin(2*i))/Proj4js.common.PI,Math.abs(s)>1&&(s=1);var o=Math.asin(s);return t.x=e,t.y=o,t}},function(t,i,s){var e,o;typeof exports!=s+""?e=exports:(o=t.L,e={},e.noConflict=function(){return t.L=o,this},t.L=e),e.version="0.5.1",e.Util={extend:function(t){var i,s,e,o,n=Array.prototype.slice.call(arguments,1);for(s=0,e=n.length;e>s;s++){o=n[s]||{};for(i in o)o.hasOwnProperty(i)&&(t[i]=o[i])}return t},bind:function(t,i){var s=arguments.length>2?Array.prototype.slice.call(arguments,2):null;return function(){return t.apply(i,s||arguments)}},stamp:function(){var t=0,i="_leaflet_id";return function(s){return s[i]=s[i]||++t,s[i]}}(),limitExecByInterval:function(t,i,e){var o,n;return function a(){var r=arguments;return o?(n=!0,s):(o=!0,setTimeout(function(){o=!1,n&&(a.apply(e,r),n=!1)},i),t.apply(e,r),s)}},falseFn:function(){return!1},formatNum:function(t,i){var s=Math.pow(10,i||5);return Math.round(t*s)/s},splitWords:function(t){return t.replace(/^\s+|\s+$/g,"").split(/\s+/)},setOptions:function(t,i){return t.options=e.extend({},t.options,i),t.options},getParamString:function(t,i){var s=[];for(var e in t)t.hasOwnProperty(e)&&s.push(e+"="+t[e]);return(i&&-1!==i.indexOf("?")?"&":"?")+s.join("&")},template:function(t,i){return t.replace(/\{ *([\w_]+) *\}/g,function(t,s){var e=i[s];if(!i.hasOwnProperty(s))throw Error("No value provided for variable "+t);return e})},isArray:function(t){return"[object Array]"===Object.prototype.toString.call(t)},emptyImageUrl:"data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs="},function(){function i(i){var s,e,o=["webkit","moz","o","ms"];for(s=0;o.length>s&&!e;s++)e=t[o[s]+i];return e}function o(i){var s=+new Date,e=Math.max(0,16-(s-n));return n=s+e,t.setTimeout(i,e)}var n=0,a=t.requestAnimationFrame||i("RequestAnimationFrame")||o,r=t.cancelAnimationFrame||i("CancelAnimationFrame")||i("CancelRequestAnimationFrame")||function(i){t.clearTimeout(i)};e.Util.requestAnimFrame=function(i,n,r,h){return i=e.bind(i,n),r&&a===o?(i(),s):a.call(t,i,h)},e.Util.cancelAnimFrame=function(i){i&&r.call(t,i)}}(),e.extend=e.Util.extend,e.bind=e.Util.bind,e.stamp=e.Util.stamp,e.setOptions=e.Util.setOptions,e.Class=function(){},e.Class.extend=function(t){var i=function(){this.initialize&&this.initialize.apply(this,arguments),this._initHooks&&this.callInitHooks()},s=function(){};s.prototype=this.prototype;var o=new s;o.constructor=i,i.prototype=o;for(var n in this)this.hasOwnProperty(n)&&"prototype"!==n&&(i[n]=this[n]);t.statics&&(e.extend(i,t.statics),delete t.statics),t.includes&&(e.Util.extend.apply(null,[o].concat(t.includes)),delete t.includes),t.options&&o.options&&(t.options=e.extend({},o.options,t.options)),e.extend(o,t),o._initHooks=[];var a=this;return o.callInitHooks=function(){if(!this._initHooksCalled){a.prototype.callInitHooks&&a.prototype.callInitHooks.call(this),this._initHooksCalled=!0;for(var t=0,i=o._initHooks.length;i>t;t++)o._initHooks[t].call(this)}},i},e.Class.include=function(t){e.extend(this.prototype,t)},e.Class.mergeOptions=function(t){e.extend(this.prototype.options,t)},e.Class.addInitHook=function(t){var i=Array.prototype.slice.call(arguments,1),s="function"==typeof t?t:function(){this[t].apply(this,i)};this.prototype._initHooks=this.prototype._initHooks||[],this.prototype._initHooks.push(s)};var n="_leaflet_events";e.Mixin={},e.Mixin.Events={addEventListener:function(t,i,s){var o,a,r,h=this[n]=this[n]||{};if("object"==typeof t){for(o in t)t.hasOwnProperty(o)&&this.addEventListener(o,t[o],i);return this}for(t=e.Util.splitWords(t),a=0,r=t.length;r>a;a++)h[t[a]]=h[t[a]]||[],h[t[a]].push({action:i,context:s||this});return this},hasEventListeners:function(t){return n in this&&t in this[n]&&this[n][t].length>0},removeEventListener:function(t,i,s){var o,a,r,h,l,c=this[n];if("object"==typeof t){for(o in t)t.hasOwnProperty(o)&&this.removeEventListener(o,t[o],i);return this}for(t=e.Util.splitWords(t),a=0,r=t.length;r>a;a++)if(this.hasEventListeners(t[a]))for(h=c[t[a]],l=h.length-1;l>=0;l--)i&&h[l].action!==i||s&&h[l].context!==s||h.splice(l,1);return this},fireEvent:function(t,i){if(!this.hasEventListeners(t))return this;for(var s=e.extend({type:t,target:this},i),o=this[n][t].slice(),a=0,r=o.length;r>a;a++)o[a].action.call(o[a].context||this,s);return this}},e.Mixin.Events.on=e.Mixin.Events.addEventListener,e.Mixin.Events.off=e.Mixin.Events.removeEventListener,e.Mixin.Events.fire=e.Mixin.Events.fireEvent,function(){var o=!!t.ActiveXObject,n=o&&!t.XMLHttpRequest,a=o&&!i.querySelector,r=navigator.userAgent.toLowerCase(),h=-1!==r.indexOf("webkit"),l=-1!==r.indexOf("chrome"),c=-1!==r.indexOf("android"),m=-1!==r.search("android [23]"),u=typeof orientation!=s+"",d=t.navigator&&t.navigator.msPointerEnabled&&t.navigator.msMaxTouchPoints,p="devicePixelRatio"in t&&t.devicePixelRatio>1||"matchMedia"in t&&t.matchMedia("(min-resolution:144dpi)")&&t.matchMedia("(min-resolution:144dpi)").matches,_=i.documentElement,f=o&&"transition"in _.style,P="WebKitCSSMatrix"in t&&"m11"in new t.WebKitCSSMatrix,y="MozPerspective"in _.style,g="OTransition"in _.style,L=!t.L_DISABLE_3D&&(f||P||y||g),v=!t.L_NO_TOUCH&&function(){var t="ontouchstart";if(d||t in _)return!0;var s=i.createElement("div"),e=!1;return s.setAttribute?(s.setAttribute(t,"return;"),"function"==typeof s[t]&&(e=!0),s.removeAttribute(t),s=null,e):!1}();e.Browser={ie:o,ie6:n,ie7:a,webkit:h,android:c,android23:m,chrome:l,ie3d:f,webkit3d:P,gecko3d:y,opera3d:g,any3d:L,mobile:u,mobileWebkit:u&&h,mobileWebkit3d:u&&P,mobileOpera:u&&t.opera,touch:v,msTouch:d,retina:p}}(),e.Point=function(t,i,s){this.x=s?Math.round(t):t,this.y=s?Math.round(i):i},e.Point.prototype={clone:function(){return new e.Point(this.x,this.y)},add:function(t){return this.clone()._add(e.point(t))},_add:function(t){return this.x+=t.x,this.y+=t.y,this},subtract:function(t){return this.clone()._subtract(e.point(t))},_subtract:function(t){return this.x-=t.x,this.y-=t.y,this},divideBy:function(t){return this.clone()._divideBy(t)},_divideBy:function(t){return this.x/=t,this.y/=t,this},multiplyBy:function(t){return this.clone()._multiplyBy(t)},_multiplyBy:function(t){return this.x*=t,this.y*=t,this},round:function(){return this.clone()._round()},_round:function(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this},floor:function(){return this.clone()._floor()},_floor:function(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this},distanceTo:function(t){t=e.point(t);var i=t.x-this.x,s=t.y-this.y;return Math.sqrt(i*i+s*s)},equals:function(t){return t.x===this.x&&t.y===this.y},toString:function(){return"Point("+e.Util.formatNum(this.x)+", "+e.Util.formatNum(this.y)+")"}},e.point=function(t,i,s){return t instanceof e.Point?t:e.Util.isArray(t)?new e.Point(t[0],t[1]):isNaN(t)?t:new e.Point(t,i,s)},e.Bounds=function(t,i){if(t)for(var s=i?[t,i]:t,e=0,o=s.length;o>e;e++)this.extend(s[e])},e.Bounds.prototype={extend:function(t){return t=e.point(t),this.min||this.max?(this.min.x=Math.min(t.x,this.min.x),this.max.x=Math.max(t.x,this.max.x),this.min.y=Math.min(t.y,this.min.y),this.max.y=Math.max(t.y,this.max.y)):(this.min=t.clone(),this.max=t.clone()),this},getCenter:function(t){return new e.Point((this.min.x+this.max.x)/2,(this.min.y+this.max.y)/2,t)},getBottomLeft:function(){return new e.Point(this.min.x,this.max.y)},getTopRight:function(){return new e.Point(this.max.x,this.min.y)},getSize:function(){return this.max.subtract(this.min)},contains:function(t){var i,s;return t="number"==typeof t[0]||t instanceof e.Point?e.point(t):e.bounds(t),t instanceof e.Bounds?(i=t.min,s=t.max):i=s=t,i.x>=this.min.x&&s.x<=this.max.x&&i.y>=this.min.y&&s.y<=this.max.y},intersects:function(t){t=e.bounds(t);var i=this.min,s=this.max,o=t.min,n=t.max,a=n.x>=i.x&&o.x<=s.x,r=n.y>=i.y&&o.y<=s.y;return a&&r},isValid:function(){return!(!this.min||!this.max)}},e.bounds=function(t,i){return!t||t instanceof e.Bounds?t:new e.Bounds(t,i)},e.Transformation=function(t,i,s,e){this._a=t,this._b=i,this._c=s,this._d=e},e.Transformation.prototype={transform:function(t,i){return this._transform(t.clone(),i)},_transform:function(t,i){return i=i||1,t.x=i*(this._a*t.x+this._b),t.y=i*(this._c*t.y+this._d),t},untransform:function(t,i){return i=i||1,new e.Point((t.x/i-this._b)/this._a,(t.y/i-this._d)/this._c)}},e.DomUtil={get:function(t){return"string"==typeof t?i.getElementById(t):t},getStyle:function(t,s){var e=t.style[s];if(!e&&t.currentStyle&&(e=t.currentStyle[s]),(!e||"auto"===e)&&i.defaultView){var o=i.defaultView.getComputedStyle(t,null);e=o?o[s]:null}return"auto"===e?null:e},getViewportOffset:function(t){var s,o=0,n=0,a=t,r=i.body,h=e.Browser.ie7;do{if(o+=a.offsetTop||0,n+=a.offsetLeft||0,o+=parseInt(e.DomUtil.getStyle(a,"borderTopWidth"),10)||0,n+=parseInt(e.DomUtil.getStyle(a,"borderLeftWidth"),10)||0,s=e.DomUtil.getStyle(a,"position"),a.offsetParent===r&&"absolute"===s)break;if("fixed"===s){o+=r.scrollTop||0,n+=r.scrollLeft||0;break}a=a.offsetParent}while(a);a=t;do{if(a===r)break;o-=a.scrollTop||0,n-=a.scrollLeft||0,e.DomUtil.documentIsLtr()||!e.Browser.webkit&&!h||(n+=a.scrollWidth-a.clientWidth,h&&"hidden"!==e.DomUtil.getStyle(a,"overflow-y")&&"hidden"!==e.DomUtil.getStyle(a,"overflow")&&(n+=17)),a=a.parentNode}while(a);return new e.Point(n,o)},documentIsLtr:function(){return e.DomUtil._docIsLtrCached||(e.DomUtil._docIsLtrCached=!0,e.DomUtil._docIsLtr="ltr"===e.DomUtil.getStyle(i.body,"direction")),e.DomUtil._docIsLtr},create:function(t,s,e){var o=i.createElement(t);return o.className=s,e&&e.appendChild(o),o},disableTextSelection:function(){i.selection&&i.selection.empty&&i.selection.empty(),this._onselectstart||(this._onselectstart=i.onselectstart||null,i.onselectstart=e.Util.falseFn)},enableTextSelection:function(){i.onselectstart===e.Util.falseFn&&(i.onselectstart=this._onselectstart,this._onselectstart=null)},hasClass:function(t,i){return t.className.length>0&&RegExp("(^|\\s)"+i+"(\\s|$)").test(t.className)},addClass:function(t,i){e.DomUtil.hasClass(t,i)||(t.className+=(t.className?" ":"")+i)},removeClass:function(t,i){function s(t,s){return s===i?"":t}t.className=t.className.replace(/(\S+)\s*/g,s).replace(/(^\s+|\s+$)/,"")},setOpacity:function(t,i){if("opacity"in t.style)t.style.opacity=i;else if("filter"in t.style){var s=!1,e="DXImageTransform.Microsoft.Alpha";try{s=t.filters.item(e)}catch(o){}i=Math.round(100*i),s?(s.Enabled=100!==i,s.Opacity=i):t.style.filter+=" progid:"+e+"(opacity="+i+")"}},testProp:function(t){for(var s=i.documentElement.style,e=0;t.length>e;e++)if(t[e]in s)return t[e];return!1},getTranslateString:function(t){var i=e.Browser.webkit3d,s="translate"+(i?"3d":"")+"(",o=(i?",0":"")+")";return s+t.x+"px,"+t.y+"px"+o},getScaleString:function(t,i){var s=e.DomUtil.getTranslateString(i.add(i.multiplyBy(-1*t))),o=" scale("+t+") ";return s+o},setPosition:function(t,i,s){t._leaflet_pos=i,!s&&e.Browser.any3d?(t.style[e.DomUtil.TRANSFORM]=e.DomUtil.getTranslateString(i),e.Browser.mobileWebkit3d&&(t.style.WebkitBackfaceVisibility="hidden")):(t.style.left=i.x+"px",t.style.top=i.y+"px")},getPosition:function(t){return t._leaflet_pos}},e.DomUtil.TRANSFORM=e.DomUtil.testProp(["transform","WebkitTransform","OTransform","MozTransform","msTransform"]),e.DomUtil.TRANSITION=e.DomUtil.testProp(["webkitTransition","transition","OTransition","MozTransition","msTransition"]),e.DomUtil.TRANSITION_END="webkitTransition"===e.DomUtil.TRANSITION||"OTransition"===e.DomUtil.TRANSITION?e.DomUtil.TRANSITION+"End":"transitionend",e.LatLng=function(t,i){var s=parseFloat(t),e=parseFloat(i);if(isNaN(s)||isNaN(e))throw Error("Invalid LatLng object: ("+t+", "+i+")");this.lat=s,this.lng=e},e.extend(e.LatLng,{DEG_TO_RAD:Math.PI/180,RAD_TO_DEG:180/Math.PI,MAX_MARGIN:1e-9}),e.LatLng.prototype={equals:function(t){if(!t)return!1;t=e.latLng(t);var i=Math.max(Math.abs(this.lat-t.lat),Math.abs(this.lng-t.lng));return e.LatLng.MAX_MARGIN>=i},toString:function(t){return"LatLng("+e.Util.formatNum(this.lat,t)+", "+e.Util.formatNum(this.lng,t)+")"},distanceTo:function(t){t=e.latLng(t);var i=6378137,s=e.LatLng.DEG_TO_RAD,o=(t.lat-this.lat)*s,n=(t.lng-this.lng)*s,a=this.lat*s,r=t.lat*s,h=Math.sin(o/2),l=Math.sin(n/2),c=h*h+l*l*Math.cos(a)*Math.cos(r);return 2*i*Math.atan2(Math.sqrt(c),Math.sqrt(1-c))},wrap:function(t,i){var s=this.lng;return t=t||-180,i=i||180,s=(s+i)%(i-t)+(t>s||s===i?i:t),new e.LatLng(this.lat,s)}},e.latLng=function(t,i){return t instanceof e.LatLng?t:e.Util.isArray(t)?new e.LatLng(t[0],t[1]):isNaN(t)?t:new e.LatLng(t,i)},e.LatLngBounds=function(t,i){if(t)for(var s=i?[t,i]:t,e=0,o=s.length;o>e;e++)this.extend(s[e])},e.LatLngBounds.prototype={extend:function(t){return t="number"==typeof t[0]||"string"==typeof t[0]||t instanceof e.LatLng?e.latLng(t):e.latLngBounds(t),t instanceof e.LatLng?this._southWest||this._northEast?(this._southWest.lat=Math.min(t.lat,this._southWest.lat),this._southWest.lng=Math.min(t.lng,this._southWest.lng),this._northEast.lat=Math.max(t.lat,this._northEast.lat),this._northEast.lng=Math.max(t.lng,this._northEast.lng)):(this._southWest=new e.LatLng(t.lat,t.lng),this._northEast=new e.LatLng(t.lat,t.lng)):t instanceof e.LatLngBounds&&(this.extend(t._southWest),this.extend(t._northEast)),this},pad:function(t){var i=this._southWest,s=this._northEast,o=Math.abs(i.lat-s.lat)*t,n=Math.abs(i.lng-s.lng)*t;return new e.LatLngBounds(new e.LatLng(i.lat-o,i.lng-n),new e.LatLng(s.lat+o,s.lng+n))},getCenter:function(){return new e.LatLng((this._southWest.lat+this._northEast.lat)/2,(this._southWest.lng+this._northEast.lng)/2)},getSouthWest:function(){return this._southWest},getNorthEast:function(){return this._northEast},getNorthWest:function(){return new e.LatLng(this._northEast.lat,this._southWest.lng)},getSouthEast:function(){return new e.LatLng(this._southWest.lat,this._northEast.lng)},contains:function(t){t="number"==typeof t[0]||t instanceof e.LatLng?e.latLng(t):e.latLngBounds(t);var i,s,o=this._southWest,n=this._northEast;return t instanceof e.LatLngBounds?(i=t.getSouthWest(),s=t.getNorthEast()):i=s=t,i.lat>=o.lat&&s.lat<=n.lat&&i.lng>=o.lng&&s.lng<=n.lng},intersects:function(t){t=e.latLngBounds(t);var i=this._southWest,s=this._northEast,o=t.getSouthWest(),n=t.getNorthEast(),a=n.lat>=i.lat&&o.lat<=s.lat,r=n.lng>=i.lng&&o.lng<=s.lng;return a&&r},toBBoxString:function(){var t=this._southWest,i=this._northEast;return[t.lng,t.lat,i.lng,i.lat].join(",")},equals:function(t){return t?(t=e.latLngBounds(t),this._southWest.equals(t.getSouthWest())&&this._northEast.equals(t.getNorthEast())):!1},isValid:function(){return!(!this._southWest||!this._northEast)}},e.latLngBounds=function(t,i){return!t||t instanceof e.LatLngBounds?t:new e.LatLngBounds(t,i)},e.Projection={},e.Projection.SphericalMercator={MAX_LATITUDE:85.0511287798,project:function(t){var i=e.LatLng.DEG_TO_RAD,s=this.MAX_LATITUDE,o=Math.max(Math.min(s,t.lat),-s),n=t.lng*i,a=o*i;return a=Math.log(Math.tan(Math.PI/4+a/2)),new e.Point(n,a)},unproject:function(t){var i=e.LatLng.RAD_TO_DEG,s=t.x*i,o=(2*Math.atan(Math.exp(t.y))-Math.PI/2)*i;return new e.LatLng(o,s)}},e.Projection.LonLat={project:function(t){return new e.Point(t.lng,t.lat)},unproject:function(t){return new e.LatLng(t.y,t.x)}},e.CRS={latLngToPoint:function(t,i){var s=this.projection.project(t),e=this.scale(i);return this.transformation._transform(s,e)},pointToLatLng:function(t,i){var s=this.scale(i),e=this.transformation.untransform(t,s);return this.projection.unproject(e)},project:function(t){return this.projection.project(t)},scale:function(t){return 256*Math.pow(2,t)}},e.CRS.Simple=e.extend({},e.CRS,{projection:e.Projection.LonLat,transformation:new e.Transformation(1,0,-1,0),scale:function(t){return Math.pow(2,t)}}),e.CRS.EPSG3857=e.extend({},e.CRS,{code:"EPSG:3857",projection:e.Projection.SphericalMercator,transformation:new e.Transformation(.5/Math.PI,.5,-.5/Math.PI,.5),project:function(t){var i=this.projection.project(t),s=6378137;return i.multiplyBy(s)}}),e.CRS.EPSG900913=e.extend({},e.CRS.EPSG3857,{code:"EPSG:900913"}),e.CRS.EPSG4326=e.extend({},e.CRS,{code:"EPSG:4326",projection:e.Projection.LonLat,transformation:new e.Transformation(1/360,.5,-1/360,.5)}),e.Map=e.Class.extend({includes:e.Mixin.Events,options:{crs:e.CRS.EPSG3857,fadeAnimation:e.DomUtil.TRANSITION&&!e.Browser.android23,trackResize:!0,markerZoomAnimation:e.DomUtil.TRANSITION&&e.Browser.any3d},initialize:function(t,i){i=e.setOptions(this,i),this._initContainer(t),this._initLayout(),this.callInitHooks(),this._initEvents(),i.maxBounds&&this.setMaxBounds(i.maxBounds),i.center&&i.zoom!==s&&this.setView(e.latLng(i.center),i.zoom,!0),this._initLayers(i.layers)},setView:function(t,i){return this._resetView(e.latLng(t),this._limitZoom(i)),this},setZoom:function(t){return this.setView(this.getCenter(),t)},zoomIn:function(t){return this.setZoom(this._zoom+(t||1))},zoomOut:function(t){return this.setZoom(this._zoom-(t||1))},fitBounds:function(t){var i=this.getBoundsZoom(t);return this.setView(e.latLngBounds(t).getCenter(),i)},fitWorld:function(){var t=new e.LatLng(-60,-170),i=new e.LatLng(85,179);return this.fitBounds(new e.LatLngBounds(t,i))},panTo:function(t){return this.setView(t,this._zoom)},panBy:function(t){return this.fire("movestart"),this._rawPanBy(e.point(t)),this.fire("move"),this.fire("moveend")},setMaxBounds:function(t){if(t=e.latLngBounds(t),this.options.maxBounds=t,!t)return this._boundsMinZoom=null,this;var i=this.getBoundsZoom(t,!0);return this._boundsMinZoom=i,this._loaded&&(i>this._zoom?this.setView(t.getCenter(),i):this.panInsideBounds(t)),this},panInsideBounds:function(t){t=e.latLngBounds(t);var i=this.getBounds(),s=this.project(i.getSouthWest()),o=this.project(i.getNorthEast()),n=this.project(t.getSouthWest()),a=this.project(t.getNorthEast()),r=0,h=0;return o.ya.x&&(r=a.x-o.x),s.y>n.y&&(h=n.y-s.y),s.x=r);return m&&i?null:i?r:r-1},getSize:function(){return(!this._size||this._sizeChanged)&&(this._size=new e.Point(this._container.clientWidth,this._container.clientHeight),this._sizeChanged=!1),this._size.clone()},getPixelBounds:function(){var t=this._getTopLeftPoint();return new e.Bounds(t,t.add(this.getSize()))},getPixelOrigin:function(){return this._initialTopLeftPoint},getPanes:function(){return this._panes},getContainer:function(){return this._container},getZoomScale:function(t){var i=this.options.crs;return i.scale(t)/i.scale(this._zoom)},getScaleZoom:function(t){return this._zoom+Math.log(t)/Math.LN2},project:function(t,i){return i=i===s?this._zoom:i,this.options.crs.latLngToPoint(e.latLng(t),i)},unproject:function(t,i){return i=i===s?this._zoom:i,this.options.crs.pointToLatLng(e.point(t),i)},layerPointToLatLng:function(t){var i=e.point(t).add(this._initialTopLeftPoint);return this.unproject(i)},latLngToLayerPoint:function(t){var i=this.project(e.latLng(t))._round();return i._subtract(this._initialTopLeftPoint)},containerPointToLayerPoint:function(t){return e.point(t).subtract(this._getMapPanePos())},layerPointToContainerPoint:function(t){return e.point(t).add(this._getMapPanePos())},containerPointToLatLng:function(t){var i=this.containerPointToLayerPoint(e.point(t));return this.layerPointToLatLng(i)},latLngToContainerPoint:function(t){return this.layerPointToContainerPoint(this.latLngToLayerPoint(e.latLng(t)))},mouseEventToContainerPoint:function(t){return e.DomEvent.getMousePosition(t,this._container)},mouseEventToLayerPoint:function(t){return this.containerPointToLayerPoint(this.mouseEventToContainerPoint(t))},mouseEventToLatLng:function(t){return this.layerPointToLatLng(this.mouseEventToLayerPoint(t))},_initContainer:function(t){var i=this._container=e.DomUtil.get(t);if(i._leaflet)throw Error("Map container is already initialized.");i._leaflet=!0},_initLayout:function(){var t=this._container;e.DomUtil.addClass(t,"leaflet-container"),e.Browser.touch&&e.DomUtil.addClass(t,"leaflet-touch"),this.options.fadeAnimation&&e.DomUtil.addClass(t,"leaflet-fade-anim");var i=e.DomUtil.getStyle(t,"position");"absolute"!==i&&"relative"!==i&&"fixed"!==i&&(t.style.position="relative"),this._initPanes(),this._initControlPos&&this._initControlPos()},_initPanes:function(){var t=this._panes={};this._mapPane=t.mapPane=this._createPane("leaflet-map-pane",this._container),this._tilePane=t.tilePane=this._createPane("leaflet-tile-pane",this._mapPane),t.objectsPane=this._createPane("leaflet-objects-pane",this._mapPane),t.shadowPane=this._createPane("leaflet-shadow-pane"),t.overlayPane=this._createPane("leaflet-overlay-pane"),t.markerPane=this._createPane("leaflet-marker-pane"),t.popupPane=this._createPane("leaflet-popup-pane");var i=" leaflet-zoom-hide";this.options.markerZoomAnimation||(e.DomUtil.addClass(t.markerPane,i),e.DomUtil.addClass(t.shadowPane,i),e.DomUtil.addClass(t.popupPane,i))},_createPane:function(t,i){return e.DomUtil.create("div",t,i||this._panes.objectsPane)},_initLayers:function(t){t=t?e.Util.isArray(t)?t:[t]:[],this._layers={},this._zoomBoundLayers={},this._tileLayersNum=0;var i,s;for(i=0,s=t.length;s>i;i++)this.addLayer(t[i])},_resetView:function(t,i,s,o){var n=this._zoom!==i;o||(this.fire("movestart"),n&&this.fire("zoomstart")),this._zoom=i,this._initialTopLeftPoint=this._getNewTopLeftPoint(t),s?this._initialTopLeftPoint._add(this._getMapPanePos()):e.DomUtil.setPosition(this._mapPane,new e.Point(0,0)),this._tileLayersToLoad=this._tileLayersNum;var a=!this._loaded;this._loaded=!0,this.fire("viewreset",{hard:!s}),this.fire("move"),(n||o)&&this.fire("zoomend"),this.fire("moveend",{hard:!s}),a&&this.fire("load")},_rawPanBy:function(t){e.DomUtil.setPosition(this._mapPane,this._getMapPanePos().subtract(t))},_updateZoomLevels:function(){var t,i=1/0,e=-1/0;for(t in this._zoomBoundLayers)if(this._zoomBoundLayers.hasOwnProperty(t)){var o=this._zoomBoundLayers[t];isNaN(o.options.minZoom)||(i=Math.min(i,o.options.minZoom)),isNaN(o.options.maxZoom)||(e=Math.max(e,o.options.maxZoom))}t===s?this._layersMaxZoom=this._layersMinZoom=s:(this._layersMaxZoom=e,this._layersMinZoom=i)},_initEvents:function(){if(e.DomEvent){e.DomEvent.on(this._container,"click",this._onMouseClick,this);var i,s,o=["dblclick","mousedown","mouseup","mouseenter","mouseleave","mousemove","contextmenu"];for(i=0,s=o.length;s>i;i++)e.DomEvent.on(this._container,o[i],this._fireMouseEvent,this);this.options.trackResize&&e.DomEvent.on(t,"resize",this._onResize,this)}},_onResize:function(){e.Util.cancelAnimFrame(this._resizeRequest),this._resizeRequest=e.Util.requestAnimFrame(this.invalidateSize,this,!1,this._container)},_onMouseClick:function(t){!this._loaded||this.dragging&&this.dragging.moved()||(this.fire("preclick"),this._fireMouseEvent(t))},_fireMouseEvent:function(t){if(this._loaded){var i=t.type;if(i="mouseenter"===i?"mouseover":"mouseleave"===i?"mouseout":i,this.hasEventListeners(i)){"contextmenu"===i&&e.DomEvent.preventDefault(t);var s=this.mouseEventToContainerPoint(t),o=this.containerPointToLayerPoint(s),n=this.layerPointToLatLng(o);this.fire(i,{latlng:n,layerPoint:o,containerPoint:s,originalEvent:t})}}},_onTileLayerLoad:function(){this._tileLayersToLoad--,this._tileLayersNum&&!this._tileLayersToLoad&&this._tileBg&&(clearTimeout(this._clearTileBgTimer),this._clearTileBgTimer=setTimeout(e.bind(this._clearTileBg,this),500))},whenReady:function(t,i){return this._loaded?t.call(i||this,this):this.on("load",t,i),this},_getMapPanePos:function(){return e.DomUtil.getPosition(this._mapPane)},_getTopLeftPoint:function(){if(!this._loaded)throw Error("Set map center and zoom first.");return this._initialTopLeftPoint.subtract(this._getMapPanePos())},_getNewTopLeftPoint:function(t,i){var s=this.getSize()._divideBy(2);return this.project(t,i)._subtract(s)._round()},_latLngToNewLayerPoint:function(t,i,s){var e=this._getNewTopLeftPoint(s,i).add(this._getMapPanePos());return this.project(t,i)._subtract(e)},_getCenterLayerPoint:function(){return this.containerPointToLayerPoint(this.getSize()._divideBy(2))},_getCenterOffset:function(t){return this.latLngToLayerPoint(t).subtract(this._getCenterLayerPoint())},_limitZoom:function(t){var i=this.getMinZoom(),s=this.getMaxZoom();return Math.max(i,Math.min(s,t))}}),e.map=function(t,i){return new e.Map(t,i)},e.Projection.Mercator={MAX_LATITUDE:85.0840591556,R_MINOR:6356752.3142,R_MAJOR:6378137,project:function(t){var i=e.LatLng.DEG_TO_RAD,s=this.MAX_LATITUDE,o=Math.max(Math.min(s,t.lat),-s),n=this.R_MAJOR,a=this.R_MINOR,r=t.lng*i*n,h=o*i,l=a/n,c=Math.sqrt(1-l*l),m=c*Math.sin(h);m=Math.pow((1-m)/(1+m),.5*c);var u=Math.tan(.5*(.5*Math.PI-h))/m;return h=-a*Math.log(u),new e.Point(r,h)},unproject:function(t){for(var i,s=e.LatLng.RAD_TO_DEG,o=this.R_MAJOR,n=this.R_MINOR,a=t.x*s/o,r=n/o,h=Math.sqrt(1-r*r),l=Math.exp(-t.y/n),c=Math.PI/2-2*Math.atan(l),m=15,u=1e-7,d=m,p=.1;Math.abs(p)>u&&--d>0;)i=h*Math.sin(c),p=Math.PI/2-2*Math.atan(l*Math.pow((1-i)/(1+i),.5*h))-c,c+=p;return new e.LatLng(c*s,a)}},e.CRS.EPSG3395=e.extend({},e.CRS,{code:"EPSG:3395",projection:e.Projection.Mercator,transformation:function(){var t=e.Projection.Mercator,i=t.R_MAJOR,s=t.R_MINOR;return new e.Transformation(.5/(Math.PI*i),.5,-.5/(Math.PI*s),.5)}()}),e.TileLayer=e.Class.extend({includes:e.Mixin.Events,options:{minZoom:0,maxZoom:18,tileSize:256,subdomains:"abc",errorTileUrl:"",attribution:"",zoomOffset:0,opacity:1,unloadInvisibleTiles:e.Browser.mobile,updateWhenIdle:e.Browser.mobile},initialize:function(t,i){i=e.setOptions(this,i),i.detectRetina&&e.Browser.retina&&i.maxZoom>0&&(i.tileSize=Math.floor(i.tileSize/2),i.zoomOffset++,i.minZoom>0&&i.minZoom--,this.options.maxZoom--),this._url=t;var s=this.options.subdomains;"string"==typeof s&&(this.options.subdomains=s.split(""))},onAdd:function(t){this._map=t,this._initContainer(),this._createTileProto(),t.on({viewreset:this._resetCallback,moveend:this._update},this),this.options.updateWhenIdle||(this._limitedUpdate=e.Util.limitExecByInterval(this._update,150,this),t.on("move",this._limitedUpdate,this)),this._reset(),this._update()},addTo:function(t){return t.addLayer(this),this},onRemove:function(t){this._container.parentNode.removeChild(this._container),t.off({viewreset:this._resetCallback,moveend:this._update},this),this.options.updateWhenIdle||t.off("move",this._limitedUpdate,this),this._container=null,this._map=null +},bringToFront:function(){var t=this._map._panes.tilePane;return this._container&&(t.appendChild(this._container),this._setAutoZIndex(t,Math.max)),this},bringToBack:function(){var t=this._map._panes.tilePane;return this._container&&(t.insertBefore(this._container,t.firstChild),this._setAutoZIndex(t,Math.min)),this},getAttribution:function(){return this.options.attribution},setOpacity:function(t){return this.options.opacity=t,this._map&&this._updateOpacity(),this},setZIndex:function(t){return this.options.zIndex=t,this._updateZIndex(),this},setUrl:function(t,i){return this._url=t,i||this.redraw(),this},redraw:function(){return this._map&&(this._map._panes.tilePane.empty=!1,this._reset(!0),this._update()),this},_updateZIndex:function(){this._container&&this.options.zIndex!==s&&(this._container.style.zIndex=this.options.zIndex)},_setAutoZIndex:function(t,i){var s,e,o,n=t.children,a=-i(1/0,-1/0);for(e=0,o=n.length;o>e;e++)n[e]!==this._container&&(s=parseInt(n[e].style.zIndex,10),isNaN(s)||(a=i(a,s)));this.options.zIndex=this._container.style.zIndex=(isFinite(a)?a:0)+i(1,-1)},_updateOpacity:function(){e.DomUtil.setOpacity(this._container,this.options.opacity);var t,i=this._tiles;if(e.Browser.webkit)for(t in i)i.hasOwnProperty(t)&&(i[t].style.webkitTransform+=" translate(0,0)")},_initContainer:function(){var t=this._map._panes.tilePane;(!this._container||t.empty)&&(this._container=e.DomUtil.create("div","leaflet-layer"),this._updateZIndex(),t.appendChild(this._container),1>this.options.opacity&&this._updateOpacity())},_resetCallback:function(t){this._reset(t.hard)},_reset:function(t){var i=this._tiles;for(var s in i)i.hasOwnProperty(s)&&this.fire("tileunload",{tile:i[s]});this._tiles={},this._tilesToLoad=0,this.options.reuseTiles&&(this._unusedTiles=[]),t&&this._container&&(this._container.innerHTML=""),this._initContainer()},_update:function(){if(this._map){var t=this._map.getPixelBounds(),i=this._map.getZoom(),s=this.options.tileSize;if(!(i>this.options.maxZoom||this.options.minZoom>i)){var o=new e.Point(Math.floor(t.min.x/s),Math.floor(t.min.y/s)),n=new e.Point(Math.floor(t.max.x/s),Math.floor(t.max.y/s)),a=new e.Bounds(o,n);this._addTilesFromCenterOut(a),(this.options.unloadInvisibleTiles||this.options.reuseTiles)&&this._removeOtherTiles(a)}}},_addTilesFromCenterOut:function(t){var s,o,n,a=[],r=t.getCenter();for(s=t.min.y;t.max.y>=s;s++)for(o=t.min.x;t.max.x>=o;o++)n=new e.Point(o,s),this._tileShouldBeLoaded(n)&&a.push(n);var h=a.length;if(0!==h){a.sort(function(t,i){return t.distanceTo(r)-i.distanceTo(r)});var l=i.createDocumentFragment();for(this._tilesToLoad||this.fire("loading"),this._tilesToLoad+=h,o=0;h>o;o++)this._addTile(a[o],l);this._container.appendChild(l)}},_tileShouldBeLoaded:function(t){if(t.x+":"+t.y in this._tiles)return!1;if(!this.options.continuousWorld){var i=this._getWrapTileNum();if(this.options.noWrap&&(0>t.x||t.x>=i)||0>t.y||t.y>=i)return!1}return!0},_removeOtherTiles:function(t){var i,s,e,o;for(o in this._tiles)this._tiles.hasOwnProperty(o)&&(i=o.split(":"),s=parseInt(i[0],10),e=parseInt(i[1],10),(t.min.x>s||s>t.max.x||t.min.y>e||e>t.max.y)&&this._removeTile(o))},_removeTile:function(t){var i=this._tiles[t];this.fire("tileunload",{tile:i,url:i.src}),this.options.reuseTiles?(e.DomUtil.removeClass(i,"leaflet-tile-loaded"),this._unusedTiles.push(i)):i.parentNode===this._container&&this._container.removeChild(i),e.Browser.android||(i.src=e.Util.emptyImageUrl),delete this._tiles[t]},_addTile:function(t,i){var s=this._getTilePos(t),o=this._getTile();e.DomUtil.setPosition(o,s,e.Browser.chrome||e.Browser.android23),this._tiles[t.x+":"+t.y]=o,this._loadTile(o,t),o.parentNode!==this._container&&i.appendChild(o)},_getZoomForUrl:function(){var t=this.options,i=this._map.getZoom();return t.zoomReverse&&(i=t.maxZoom-i),i+t.zoomOffset},_getTilePos:function(t){var i=this._map.getPixelOrigin(),s=this.options.tileSize;return t.multiplyBy(s).subtract(i)},getTileUrl:function(t){return this._adjustTilePoint(t),e.Util.template(this._url,e.extend({s:this._getSubdomain(t),z:this._getZoomForUrl(),x:t.x,y:t.y},this.options))},_getWrapTileNum:function(){return Math.pow(2,this._getZoomForUrl())},_adjustTilePoint:function(t){var i=this._getWrapTileNum();this.options.continuousWorld||this.options.noWrap||(t.x=(t.x%i+i)%i),this.options.tms&&(t.y=i-t.y-1)},_getSubdomain:function(t){var i=(t.x+t.y)%this.options.subdomains.length;return this.options.subdomains[i]},_createTileProto:function(){var t=this._tileImg=e.DomUtil.create("img","leaflet-tile");t.style.width=t.style.height=this.options.tileSize+"px",t.galleryimg="no"},_getTile:function(){if(this.options.reuseTiles&&this._unusedTiles.length>0){var t=this._unusedTiles.pop();return this._resetTile(t),t}return this._createTile()},_resetTile:function(){},_createTile:function(){var t=this._tileImg.cloneNode(!1);return t.onselectstart=t.onmousemove=e.Util.falseFn,t},_loadTile:function(t,i){t._layer=this,t.onload=this._tileOnLoad,t.onerror=this._tileOnError,t.src=this.getTileUrl(i)},_tileLoaded:function(){this._tilesToLoad--,this._tilesToLoad||this.fire("load")},_tileOnLoad:function(){var t=this._layer;this.src!==e.Util.emptyImageUrl&&(e.DomUtil.addClass(this,"leaflet-tile-loaded"),t.fire("tileload",{tile:this,url:this.src})),t._tileLoaded()},_tileOnError:function(){var t=this._layer;t.fire("tileerror",{tile:this,url:this.src});var i=t.options.errorTileUrl;i&&(this.src=i),t._tileLoaded()}}),e.tileLayer=function(t,i){return new e.TileLayer(t,i)},e.TileLayer.WMS=e.TileLayer.extend({defaultWmsParams:{service:"WMS",request:"GetMap",version:"1.1.1",layers:"",styles:"",format:"image/jpeg",transparent:!1},initialize:function(t,i){this._url=t;var s=e.extend({},this.defaultWmsParams);s.width=s.height=i.detectRetina&&e.Browser.retina?2*this.options.tileSize:this.options.tileSize;for(var o in i)this.options.hasOwnProperty(o)||(s[o]=i[o]);this.wmsParams=s,e.setOptions(this,i)},onAdd:function(t){var i=parseFloat(this.wmsParams.version)>=1.3?"crs":"srs";this.wmsParams[i]=t.options.crs.code,e.TileLayer.prototype.onAdd.call(this,t)},getTileUrl:function(t,i){this._adjustTilePoint(t);var s=this._map,o=s.options.crs,n=this.options.tileSize,a=t.multiplyBy(n),r=a.add(new e.Point(n,n)),h=o.project(s.unproject(a,i)),l=o.project(s.unproject(r,i)),c=[h.x,l.y,l.x,h.y].join(","),m=e.Util.template(this._url,{s:this._getSubdomain(t)});return m+e.Util.getParamString(this.wmsParams,m)+"&bbox="+c},setParams:function(t,i){return e.extend(this.wmsParams,t),i||this.redraw(),this}}),e.tileLayer.wms=function(t,i){return new e.TileLayer.WMS(t,i)},e.TileLayer.Canvas=e.TileLayer.extend({options:{async:!1},initialize:function(t){e.setOptions(this,t)},redraw:function(){var t=this._tiles;for(var i in t)t.hasOwnProperty(i)&&this._redrawTile(t[i])},_redrawTile:function(t){this.drawTile(t,t._tilePoint,this._map._zoom)},_createTileProto:function(){var t=this._canvasProto=e.DomUtil.create("canvas","leaflet-tile");t.width=t.height=this.options.tileSize},_createTile:function(){var t=this._canvasProto.cloneNode(!1);return t.onselectstart=t.onmousemove=e.Util.falseFn,t},_loadTile:function(t,i){t._layer=this,t._tilePoint=i,this._redrawTile(t),this.options.async||this.tileDrawn(t)},drawTile:function(){},tileDrawn:function(t){this._tileOnLoad.call(t)}}),e.tileLayer.canvas=function(t){return new e.TileLayer.Canvas(t)},e.ImageOverlay=e.Class.extend({includes:e.Mixin.Events,options:{opacity:1},initialize:function(t,i,s){this._url=t,this._bounds=e.latLngBounds(i),e.setOptions(this,s)},onAdd:function(t){this._map=t,this._image||this._initImage(),t._panes.overlayPane.appendChild(this._image),t.on("viewreset",this._reset,this),t.options.zoomAnimation&&e.Browser.any3d&&t.on("zoomanim",this._animateZoom,this),this._reset()},onRemove:function(t){t.getPanes().overlayPane.removeChild(this._image),t.off("viewreset",this._reset,this),t.options.zoomAnimation&&t.off("zoomanim",this._animateZoom,this)},addTo:function(t){return t.addLayer(this),this},setOpacity:function(t){return this.options.opacity=t,this._updateOpacity(),this},bringToFront:function(){return this._image&&this._map._panes.overlayPane.appendChild(this._image),this},bringToBack:function(){var t=this._map._panes.overlayPane;return this._image&&t.insertBefore(this._image,t.firstChild),this},_initImage:function(){this._image=e.DomUtil.create("img","leaflet-image-layer"),this._map.options.zoomAnimation&&e.Browser.any3d?e.DomUtil.addClass(this._image,"leaflet-zoom-animated"):e.DomUtil.addClass(this._image,"leaflet-zoom-hide"),this._updateOpacity(),e.extend(this._image,{galleryimg:"no",onselectstart:e.Util.falseFn,onmousemove:e.Util.falseFn,onload:e.bind(this._onImageLoad,this),src:this._url})},_animateZoom:function(t){var i=this._map,s=this._image,o=i.getZoomScale(t.zoom),n=this._bounds.getNorthWest(),a=this._bounds.getSouthEast(),r=i._latLngToNewLayerPoint(n,t.zoom,t.center),h=i._latLngToNewLayerPoint(a,t.zoom,t.center)._subtract(r),l=r._add(h._multiplyBy(.5*(1-1/o)));s.style[e.DomUtil.TRANSFORM]=e.DomUtil.getTranslateString(l)+" scale("+o+") "},_reset:function(){var t=this._image,i=this._map.latLngToLayerPoint(this._bounds.getNorthWest()),s=this._map.latLngToLayerPoint(this._bounds.getSouthEast())._subtract(i);e.DomUtil.setPosition(t,i),t.style.width=s.x+"px",t.style.height=s.y+"px"},_onImageLoad:function(){this.fire("load")},_updateOpacity:function(){e.DomUtil.setOpacity(this._image,this.options.opacity)}}),e.imageOverlay=function(t,i,s){return new e.ImageOverlay(t,i,s)},e.Icon=e.Class.extend({options:{className:""},initialize:function(t){e.setOptions(this,t)},createIcon:function(){return this._createIcon("icon")},createShadow:function(){return this._createIcon("shadow")},_createIcon:function(t){var i=this._getIconUrl(t);if(!i){if("icon"===t)throw Error("iconUrl not set in Icon options (see the docs).");return null}var s=this._createImg(i);return this._setIconStyles(s,t),s},_setIconStyles:function(t,i){var s,o=this.options,n=e.point(o[i+"Size"]);s="shadow"===i?e.point(o.shadowAnchor||o.iconAnchor):e.point(o.iconAnchor),!s&&n&&(s=n.divideBy(2,!0)),t.className="leaflet-marker-"+i+" "+o.className,s&&(t.style.marginLeft=-s.x+"px",t.style.marginTop=-s.y+"px"),n&&(t.style.width=n.x+"px",t.style.height=n.y+"px")},_createImg:function(t){var s;return e.Browser.ie6?(s=i.createElement("div"),s.style.filter='progid:DXImageTransform.Microsoft.AlphaImageLoader(src="'+t+'")'):(s=i.createElement("img"),s.src=t),s},_getIconUrl:function(t){return e.Browser.retina&&this.options[t+"RetinaUrl"]?this.options[t+"RetinaUrl"]:this.options[t+"Url"]}}),e.icon=function(t){return new e.Icon(t)},e.Icon.Default=e.Icon.extend({options:{iconSize:new e.Point(25,41),iconAnchor:new e.Point(12,41),popupAnchor:new e.Point(1,-34),shadowSize:new e.Point(41,41)},_getIconUrl:function(t){var i=t+"Url";if(this.options[i])return this.options[i];e.Browser.retina&&"icon"===t&&(t+="@2x");var s=e.Icon.Default.imagePath;if(!s)throw Error("Couldn't autodetect L.Icon.Default.imagePath, set it manually.");return "marker-"+t+".png"}}),e.Icon.Default.imagePath=function(){var t,s,e,o,n=i.getElementsByTagName("script"),a=/\/?leaflet[\-\._]?([\w\-\._]*)\.js\??/;for(t=0,s=n.length;s>t;t++)if(e=n[t].src,o=e.match(a))return e.split(a)[0]+""}(),e.Marker=e.Class.extend({includes:e.Mixin.Events,options:{icon:new e.Icon.Default,title:"",clickable:!0,draggable:!1,zIndexOffset:0,opacity:1,riseOnHover:!1,riseOffset:250},initialize:function(t,i){e.setOptions(this,i),this._latlng=e.latLng(t)},onAdd:function(t){this._map=t,t.on("viewreset",this.update,this),this._initIcon(),this.update(),t.options.zoomAnimation&&t.options.markerZoomAnimation&&t.on("zoomanim",this._animateZoom,this)},addTo:function(t){return t.addLayer(this),this},onRemove:function(t){this._removeIcon(),this.fire("remove"),t.off({viewreset:this.update,zoomanim:this._animateZoom},this),this._map=null},getLatLng:function(){return this._latlng},setLatLng:function(t){return this._latlng=e.latLng(t),this.update(),this.fire("move",{latlng:this._latlng})},setZIndexOffset:function(t){return this.options.zIndexOffset=t,this.update(),this},setIcon:function(t){return this._map&&this._removeIcon(),this.options.icon=t,this._map&&(this._initIcon(),this.update()),this},update:function(){if(this._icon){var t=this._map.latLngToLayerPoint(this._latlng).round();this._setPos(t)}return this},_initIcon:function(){var t=this.options,i=this._map,s=i.options.zoomAnimation&&i.options.markerZoomAnimation,o=s?"leaflet-zoom-animated":"leaflet-zoom-hide",n=!1;this._icon||(this._icon=t.icon.createIcon(),t.title&&(this._icon.title=t.title),this._initInteraction(),n=1>this.options.opacity,e.DomUtil.addClass(this._icon,o),t.riseOnHover&&e.DomEvent.on(this._icon,"mouseover",this._bringToFront,this).on(this._icon,"mouseout",this._resetZIndex,this)),this._shadow||(this._shadow=t.icon.createShadow(),this._shadow&&(e.DomUtil.addClass(this._shadow,o),n=1>this.options.opacity)),n&&this._updateOpacity();var a=this._map._panes;a.markerPane.appendChild(this._icon),this._shadow&&a.shadowPane.appendChild(this._shadow)},_removeIcon:function(){var t=this._map._panes;this.options.riseOnHover&&e.DomEvent.off(this._icon,"mouseover",this._bringToFront).off(this._icon,"mouseout",this._resetZIndex),t.markerPane.removeChild(this._icon),this._shadow&&t.shadowPane.removeChild(this._shadow),this._icon=this._shadow=null},_setPos:function(t){e.DomUtil.setPosition(this._icon,t),this._shadow&&e.DomUtil.setPosition(this._shadow,t),this._zIndex=t.y+this.options.zIndexOffset,this._resetZIndex()},_updateZIndex:function(t){this._icon.style.zIndex=this._zIndex+t},_animateZoom:function(t){var i=this._map._latLngToNewLayerPoint(this._latlng,t.zoom,t.center);this._setPos(i)},_initInteraction:function(){if(this.options.clickable){var t=this._icon,i=["dblclick","mousedown","mouseover","mouseout","contextmenu"];e.DomUtil.addClass(t,"leaflet-clickable"),e.DomEvent.on(t,"click",this._onMouseClick,this);for(var s=0;i.length>s;s++)e.DomEvent.on(t,i[s],this._fireMouseEvent,this);e.Handler.MarkerDrag&&(this.dragging=new e.Handler.MarkerDrag(this),this.options.draggable&&this.dragging.enable())}},_onMouseClick:function(t){var i=this.dragging&&this.dragging.moved();(this.hasEventListeners(t.type)||i)&&e.DomEvent.stopPropagation(t),i||(this.dragging&&this.dragging._enabled||!this._map.dragging||!this._map.dragging.moved())&&this.fire(t.type,{originalEvent:t})},_fireMouseEvent:function(t){this.fire(t.type,{originalEvent:t}),"contextmenu"===t.type&&this.hasEventListeners(t.type)&&e.DomEvent.preventDefault(t),"mousedown"!==t.type&&e.DomEvent.stopPropagation(t)},setOpacity:function(t){this.options.opacity=t,this._map&&this._updateOpacity()},_updateOpacity:function(){e.DomUtil.setOpacity(this._icon,this.options.opacity),this._shadow&&e.DomUtil.setOpacity(this._shadow,this.options.opacity)},_bringToFront:function(){this._updateZIndex(this.options.riseOffset)},_resetZIndex:function(){this._updateZIndex(0)}}),e.marker=function(t,i){return new e.Marker(t,i)},e.DivIcon=e.Icon.extend({options:{iconSize:new e.Point(12,12),className:"leaflet-div-icon"},createIcon:function(){var t=i.createElement("div"),s=this.options;return s.html&&(t.innerHTML=s.html),s.bgPos&&(t.style.backgroundPosition=-s.bgPos.x+"px "+-s.bgPos.y+"px"),this._setIconStyles(t,"icon"),t},createShadow:function(){return null}}),e.divIcon=function(t){return new e.DivIcon(t)},e.Map.mergeOptions({closePopupOnClick:!0}),e.Popup=e.Class.extend({includes:e.Mixin.Events,options:{minWidth:50,maxWidth:300,maxHeight:null,autoPan:!0,closeButton:!0,offset:new e.Point(0,6),autoPanPadding:new e.Point(5,5),className:"",zoomAnimation:!0},initialize:function(t,i){e.setOptions(this,t),this._source=i,this._animated=e.Browser.any3d&&this.options.zoomAnimation},onAdd:function(t){this._map=t,this._container||this._initLayout(),this._updateContent();var i=t.options.fadeAnimation;i&&e.DomUtil.setOpacity(this._container,0),t._panes.popupPane.appendChild(this._container),t.on("viewreset",this._updatePosition,this),this._animated&&t.on("zoomanim",this._zoomAnimation,this),t.options.closePopupOnClick&&t.on("preclick",this._close,this),this._update(),i&&e.DomUtil.setOpacity(this._container,1)},addTo:function(t){return t.addLayer(this),this},openOn:function(t){return t.openPopup(this),this},onRemove:function(t){t._panes.popupPane.removeChild(this._container),e.Util.falseFn(this._container.offsetWidth),t.off({viewreset:this._updatePosition,preclick:this._close,zoomanim:this._zoomAnimation},this),t.options.fadeAnimation&&e.DomUtil.setOpacity(this._container,0),this._map=null},setLatLng:function(t){return this._latlng=e.latLng(t),this._update(),this},setContent:function(t){return this._content=t,this._update(),this},_close:function(){var t=this._map;t&&(t._popup=null,t.removeLayer(this).fire("popupclose",{popup:this}))},_initLayout:function(){var t,i="leaflet-popup",s=i+" "+this.options.className+" leaflet-zoom-"+(this._animated?"animated":"hide"),o=this._container=e.DomUtil.create("div",s);this.options.closeButton&&(t=this._closeButton=e.DomUtil.create("a",i+"-close-button",o),t.href="#close",t.innerHTML="×",e.DomEvent.on(t,"click",this._onCloseButtonClick,this));var n=this._wrapper=e.DomUtil.create("div",i+"-content-wrapper",o);e.DomEvent.disableClickPropagation(n),this._contentNode=e.DomUtil.create("div",i+"-content",n),e.DomEvent.on(this._contentNode,"mousewheel",e.DomEvent.stopPropagation),this._tipContainer=e.DomUtil.create("div",i+"-tip-container",o),this._tip=e.DomUtil.create("div",i+"-tip",this._tipContainer)},_update:function(){this._map&&(this._container.style.visibility="hidden",this._updateContent(),this._updateLayout(),this._updatePosition(),this._container.style.visibility="",this._adjustPan())},_updateContent:function(){if(this._content){if("string"==typeof this._content)this._contentNode.innerHTML=this._content;else{for(;this._contentNode.hasChildNodes();)this._contentNode.removeChild(this._contentNode.firstChild);this._contentNode.appendChild(this._content)}this.fire("contentupdate")}},_updateLayout:function(){var t=this._contentNode,i=t.style;i.width="",i.whiteSpace="nowrap";var s=t.offsetWidth;s=Math.min(s,this.options.maxWidth),s=Math.max(s,this.options.minWidth),i.width=s+1+"px",i.whiteSpace="",i.height="";var o=t.offsetHeight,n=this.options.maxHeight,a="leaflet-popup-scrolled";n&&o>n?(i.height=n+"px",e.DomUtil.addClass(t,a)):e.DomUtil.removeClass(t,a),this._containerWidth=this._container.offsetWidth},_updatePosition:function(){if(this._map){var t=this._map.latLngToLayerPoint(this._latlng),i=this._animated,s=this.options.offset;i&&e.DomUtil.setPosition(this._container,t),this._containerBottom=-s.y-(i?0:t.y),this._containerLeft=-Math.round(this._containerWidth/2)+s.x+(i?0:t.x),this._container.style.bottom=this._containerBottom+"px",this._container.style.left=this._containerLeft+"px"}},_zoomAnimation:function(t){var i=this._map._latLngToNewLayerPoint(this._latlng,t.zoom,t.center);e.DomUtil.setPosition(this._container,i)},_adjustPan:function(){if(this.options.autoPan){var t=this._map,i=this._container.offsetHeight,s=this._containerWidth,o=new e.Point(this._containerLeft,-i-this._containerBottom);this._animated&&o._add(e.DomUtil.getPosition(this._container));var n=t.layerPointToContainerPoint(o),a=this.options.autoPanPadding,r=t.getSize(),h=0,l=0;0>n.x&&(h=n.x-a.x),n.x+s>r.x&&(h=n.x+s-r.x+a.x),0>n.y&&(l=n.y-a.y),n.y+i>r.y&&(l=n.y+i-r.y+a.y),(h||l)&&t.panBy(new e.Point(h,l))}},_onCloseButtonClick:function(t){this._close(),e.DomEvent.stop(t)}}),e.popup=function(t,i){return new e.Popup(t,i)},e.Marker.include({openPopup:function(){return this._popup&&this._map&&(this._popup.setLatLng(this._latlng),this._map.openPopup(this._popup)),this},closePopup:function(){return this._popup&&this._popup._close(),this},bindPopup:function(t,i){var s=e.point(this.options.icon.options.popupAnchor)||new e.Point(0,0);return s=s.add(e.Popup.prototype.options.offset),i&&i.offset&&(s=s.add(i.offset)),i=e.extend({offset:s},i),this._popup||this.on("click",this.openPopup,this).on("remove",this.closePopup,this).on("move",this._movePopup,this),this._popup=new e.Popup(i,this).setContent(t),this},unbindPopup:function(){return this._popup&&(this._popup=null,this.off("click",this.openPopup).off("remove",this.closePopup).off("move",this._movePopup)),this},_movePopup:function(t){this._popup.setLatLng(t.latlng)}}),e.Map.include({openPopup:function(t){return this.closePopup(),this._popup=t,this.addLayer(t).fire("popupopen",{popup:this._popup})},closePopup:function(){return this._popup&&this._popup._close(),this}}),e.LayerGroup=e.Class.extend({initialize:function(t){this._layers={};var i,s;if(t)for(i=0,s=t.length;s>i;i++)this.addLayer(t[i])},addLayer:function(t){var i=e.stamp(t);return this._layers[i]=t,this._map&&this._map.addLayer(t),this},removeLayer:function(t){var i=e.stamp(t);return delete this._layers[i],this._map&&this._map.removeLayer(t),this},clearLayers:function(){return this.eachLayer(this.removeLayer,this),this},invoke:function(t){var i,s,e=Array.prototype.slice.call(arguments,1);for(i in this._layers)this._layers.hasOwnProperty(i)&&(s=this._layers[i],s[t]&&s[t].apply(s,e));return this},onAdd:function(t){this._map=t,this.eachLayer(t.addLayer,t)},onRemove:function(t){this.eachLayer(t.removeLayer,t),this._map=null},addTo:function(t){return t.addLayer(this),this},eachLayer:function(t,i){for(var s in this._layers)this._layers.hasOwnProperty(s)&&t.call(i,this._layers[s])},setZIndex:function(t){return this.invoke("setZIndex",t)}}),e.layerGroup=function(t){return new e.LayerGroup(t)},e.FeatureGroup=e.LayerGroup.extend({includes:e.Mixin.Events,statics:{EVENTS:"click dblclick mouseover mouseout mousemove contextmenu"},addLayer:function(t){return this._layers[e.stamp(t)]?this:(t.on(e.FeatureGroup.EVENTS,this._propagateEvent,this),e.LayerGroup.prototype.addLayer.call(this,t),this._popupContent&&t.bindPopup&&t.bindPopup(this._popupContent,this._popupOptions),this.fire("layeradd",{layer:t}))},removeLayer:function(t){return t.off(e.FeatureGroup.EVENTS,this._propagateEvent,this),e.LayerGroup.prototype.removeLayer.call(this,t),this._popupContent&&this.invoke("unbindPopup"),this.fire("layerremove",{layer:t})},bindPopup:function(t,i){return this._popupContent=t,this._popupOptions=i,this.invoke("bindPopup",t,i)},setStyle:function(t){return this.invoke("setStyle",t)},bringToFront:function(){return this.invoke("bringToFront")},bringToBack:function(){return this.invoke("bringToBack")},getBounds:function(){var t=new e.LatLngBounds;return this.eachLayer(function(i){t.extend(i instanceof e.Marker?i.getLatLng():i.getBounds())}),t},_propagateEvent:function(t){t.layer=t.target,t.target=this,this.fire(t.type,t)}}),e.featureGroup=function(t){return new e.FeatureGroup(t)},e.Path=e.Class.extend({includes:[e.Mixin.Events],statics:{CLIP_PADDING:e.Browser.mobile?Math.max(0,Math.min(.5,(1280/Math.max(t.innerWidth,t.innerHeight)-1)/2)):.5},options:{stroke:!0,color:"#0033ff",dashArray:null,weight:5,opacity:.5,fill:!1,fillColor:null,fillOpacity:.2,clickable:!0},initialize:function(t){e.setOptions(this,t)},onAdd:function(t){this._map=t,this._container||(this._initElements(),this._initEvents()),this.projectLatlngs(),this._updatePath(),this._container&&this._map._pathRoot.appendChild(this._container),this.fire("add"),t.on({viewreset:this.projectLatlngs,moveend:this._updatePath},this)},addTo:function(t){return t.addLayer(this),this},onRemove:function(t){t._pathRoot.removeChild(this._container),this.fire("remove"),this._map=null,e.Browser.vml&&(this._container=null,this._stroke=null,this._fill=null),t.off({viewreset:this.projectLatlngs,moveend:this._updatePath},this)},projectLatlngs:function(){},setStyle:function(t){return e.setOptions(this,t),this._container&&this._updateStyle(),this},redraw:function(){return this._map&&(this.projectLatlngs(),this._updatePath()),this}}),e.Map.include({_updatePathViewport:function(){var t=e.Path.CLIP_PADDING,i=this.getSize(),s=e.DomUtil.getPosition(this._mapPane),o=s.multiplyBy(-1)._subtract(i.multiplyBy(t)._round()),n=o.add(i.multiplyBy(1+2*t)._round());this._pathViewport=new e.Bounds(o,n)}}),e.Path.SVG_NS="http://www.w3.org/2000/svg",e.Browser.svg=!(!i.createElementNS||!i.createElementNS(e.Path.SVG_NS,"svg").createSVGRect),e.Path=e.Path.extend({statics:{SVG:e.Browser.svg},bringToFront:function(){var t=this._map._pathRoot,i=this._container;return i&&t.lastChild!==i&&t.appendChild(i),this},bringToBack:function(){var t=this._map._pathRoot,i=this._container,s=t.firstChild;return i&&s!==i&&t.insertBefore(i,s),this},getPathString:function(){},_createElement:function(t){return i.createElementNS(e.Path.SVG_NS,t)},_initElements:function(){this._map._initPathRoot(),this._initPath(),this._initStyle()},_initPath:function(){this._container=this._createElement("g"),this._path=this._createElement("path"),this._container.appendChild(this._path)},_initStyle:function(){this.options.stroke&&(this._path.setAttribute("stroke-linejoin","round"),this._path.setAttribute("stroke-linecap","round")),this.options.fill&&this._path.setAttribute("fill-rule","evenodd"),this._updateStyle()},_updateStyle:function(){this.options.stroke?(this._path.setAttribute("stroke",this.options.color),this._path.setAttribute("stroke-opacity",this.options.opacity),this._path.setAttribute("stroke-width",this.options.weight),this.options.dashArray?this._path.setAttribute("stroke-dasharray",this.options.dashArray):this._path.removeAttribute("stroke-dasharray")):this._path.setAttribute("stroke","none"),this.options.fill?(this._path.setAttribute("fill",this.options.fillColor||this.options.color),this._path.setAttribute("fill-opacity",this.options.fillOpacity)):this._path.setAttribute("fill","none")},_updatePath:function(){var t=this.getPathString();t||(t="M0 0"),this._path.setAttribute("d",t)},_initEvents:function(){if(this.options.clickable){(e.Browser.svg||!e.Browser.vml)&&this._path.setAttribute("class","leaflet-clickable"),e.DomEvent.on(this._container,"click",this._onMouseClick,this);for(var t=["dblclick","mousedown","mouseover","mouseout","mousemove","contextmenu"],i=0;t.length>i;i++)e.DomEvent.on(this._container,t[i],this._fireMouseEvent,this)}},_onMouseClick:function(t){this._map.dragging&&this._map.dragging.moved()||this._fireMouseEvent(t)},_fireMouseEvent:function(t){if(this.hasEventListeners(t.type)){var i=this._map,s=i.mouseEventToContainerPoint(t),o=i.containerPointToLayerPoint(s),n=i.layerPointToLatLng(o);this.fire(t.type,{latlng:n,layerPoint:o,containerPoint:s,originalEvent:t}),"contextmenu"===t.type&&e.DomEvent.preventDefault(t),"mousemove"!==t.type&&e.DomEvent.stopPropagation(t)}}}),e.Map.include({_initPathRoot:function(){this._pathRoot||(this._pathRoot=e.Path.prototype._createElement("svg"),this._panes.overlayPane.appendChild(this._pathRoot),this.options.zoomAnimation&&e.Browser.any3d?(this._pathRoot.setAttribute("class"," leaflet-zoom-animated"),this.on({zoomanim:this._animatePathZoom,zoomend:this._endPathZoom})):this._pathRoot.setAttribute("class"," leaflet-zoom-hide"),this.on("moveend",this._updateSvgViewport),this._updateSvgViewport())},_animatePathZoom:function(t){var i=this.getZoomScale(t.zoom),s=this._getCenterOffset(t.center)._multiplyBy(-i)._add(this._pathViewport.min);this._pathRoot.style[e.DomUtil.TRANSFORM]=e.DomUtil.getTranslateString(s)+" scale("+i+") ",this._pathZooming=!0},_endPathZoom:function(){this._pathZooming=!1},_updateSvgViewport:function(){if(!this._pathZooming){this._updatePathViewport();var t=this._pathViewport,i=t.min,s=t.max,o=s.x-i.x,n=s.y-i.y,a=this._pathRoot,r=this._panes.overlayPane;e.Browser.mobileWebkit&&r.removeChild(a),e.DomUtil.setPosition(a,i),a.setAttribute("width",o),a.setAttribute("height",n),a.setAttribute("viewBox",[i.x,i.y,o,n].join(" ")),e.Browser.mobileWebkit&&r.appendChild(a)}}}),e.Path.include({bindPopup:function(t,i){return(!this._popup||i)&&(this._popup=new e.Popup(i,this)),this._popup.setContent(t),this._popupHandlersAdded||(this.on("click",this._openPopup,this).on("remove",this.closePopup,this),this._popupHandlersAdded=!0),this},unbindPopup:function(){return this._popup&&(this._popup=null,this.off("click",this._openPopup).off("remove",this.closePopup),this._popupHandlersAdded=!1),this},openPopup:function(t){return this._popup&&(t=t||this._latlng||this._latlngs[Math.floor(this._latlngs.length/2)],this._openPopup({latlng:t})),this},closePopup:function(){return this._popup&&this._popup._close(),this},_openPopup:function(t){this._popup.setLatLng(t.latlng),this._map.openPopup(this._popup)}}),e.Browser.vml=!e.Browser.svg&&function(){try{var t=i.createElement("div");t.innerHTML='';var s=t.firstChild;return s.style.behavior="url(#default#VML)",s&&"object"==typeof s.adj}catch(e){return!1}}(),e.Path=e.Browser.svg||!e.Browser.vml?e.Path:e.Path.extend({statics:{VML:!0,CLIP_PADDING:.02},_createElement:function(){try{return i.namespaces.add("lvml","urn:schemas-microsoft-com:vml"),function(t){return i.createElement("')}}catch(t){return function(t){return i.createElement("<"+t+' xmlns="urn:schemas-microsoft.com:vml" class="lvml">')}}}(),_initPath:function(){var t=this._container=this._createElement("shape");e.DomUtil.addClass(t,"leaflet-vml-shape"),this.options.clickable&&e.DomUtil.addClass(t,"leaflet-clickable"),t.coordsize="1 1",this._path=this._createElement("path"),t.appendChild(this._path),this._map._pathRoot.appendChild(t)},_initStyle:function(){this._updateStyle()},_updateStyle:function(){var t=this._stroke,i=this._fill,s=this.options,e=this._container;e.stroked=s.stroke,e.filled=s.fill,s.stroke?(t||(t=this._stroke=this._createElement("stroke"),t.endcap="round",e.appendChild(t)),t.weight=s.weight+"px",t.color=s.color,t.opacity=s.opacity,t.dashStyle=s.dashArray?s.dashArray instanceof Array?s.dashArray.join(" "):s.dashArray.replace(/ *, */g," "):""):t&&(e.removeChild(t),this._stroke=null),s.fill?(i||(i=this._fill=this._createElement("fill"),e.appendChild(i)),i.color=s.fillColor||s.color,i.opacity=s.fillOpacity):i&&(e.removeChild(i),this._fill=null)},_updatePath:function(){var t=this._container.style;t.display="none",this._path.v=this.getPathString()+" ",t.display=""}}),e.Map.include(e.Browser.svg||!e.Browser.vml?{}:{_initPathRoot:function(){if(!this._pathRoot){var t=this._pathRoot=i.createElement("div");t.className="leaflet-vml-container",this._panes.overlayPane.appendChild(t),this.on("moveend",this._updatePathViewport),this._updatePathViewport()}}}),e.Browser.canvas=function(){return!!i.createElement("canvas").getContext}(),e.Path=e.Path.SVG&&!t.L_PREFER_CANVAS||!e.Browser.canvas?e.Path:e.Path.extend({statics:{CANVAS:!0,SVG:!1},redraw:function(){return this._map&&(this.projectLatlngs(),this._requestUpdate()),this},setStyle:function(t){return e.setOptions(this,t),this._map&&(this._updateStyle(),this._requestUpdate()),this},onRemove:function(t){t.off("viewreset",this.projectLatlngs,this).off("moveend",this._updatePath,this),this.options.clickable&&this._map.off("click",this._onClick,this),this._requestUpdate(),this._map=null},_requestUpdate:function(){this._map&&!e.Path._updateRequest&&(e.Path._updateRequest=e.Util.requestAnimFrame(this._fireMapMoveEnd,this._map))},_fireMapMoveEnd:function(){e.Path._updateRequest=null,this.fire("moveend")},_initElements:function(){this._map._initPathRoot(),this._ctx=this._map._canvasCtx},_updateStyle:function(){var t=this.options;t.stroke&&(this._ctx.lineWidth=t.weight,this._ctx.strokeStyle=t.color),t.fill&&(this._ctx.fillStyle=t.fillColor||t.color)},_drawPath:function(){var t,i,s,o,n,a;for(this._ctx.beginPath(),t=0,s=this._parts.length;s>t;t++){for(i=0,o=this._parts[t].length;o>i;i++)n=this._parts[t][i],a=(0===i?"move":"line")+"To",this._ctx[a](n.x,n.y);this instanceof e.Polygon&&this._ctx.closePath()}},_checkIfEmpty:function(){return!this._parts.length},_updatePath:function(){if(!this._checkIfEmpty()){var t=this._ctx,i=this.options;this._drawPath(),t.save(),this._updateStyle(),i.fill&&(t.globalAlpha=i.fillOpacity,t.fill()),i.stroke&&(t.globalAlpha=i.opacity,t.stroke()),t.restore() +}},_initEvents:function(){this.options.clickable&&this._map.on("click",this._onClick,this)},_onClick:function(t){this._containsPoint(t.layerPoint)&&this.fire("click",{latlng:t.latlng,layerPoint:t.layerPoint,containerPoint:t.containerPoint,originalEvent:t})}}),e.Map.include(e.Path.SVG&&!t.L_PREFER_CANVAS||!e.Browser.canvas?{}:{_initPathRoot:function(){var t,s=this._pathRoot;s||(s=this._pathRoot=i.createElement("canvas"),s.style.position="absolute",t=this._canvasCtx=s.getContext("2d"),t.lineCap="round",t.lineJoin="round",this._panes.overlayPane.appendChild(s),this.options.zoomAnimation&&(this._pathRoot.className="leaflet-zoom-animated",this.on("zoomanim",this._animatePathZoom),this.on("zoomend",this._endPathZoom)),this.on("moveend",this._updateCanvasViewport),this._updateCanvasViewport())},_updateCanvasViewport:function(){if(!this._pathZooming){this._updatePathViewport();var t=this._pathViewport,i=t.min,s=t.max.subtract(i),o=this._pathRoot;e.DomUtil.setPosition(o,i),o.width=s.x,o.height=s.y,o.getContext("2d").translate(-i.x,-i.y)}}}),e.LineUtil={simplify:function(t,i){if(!i||!t.length)return t.slice();var s=i*i;return t=this._reducePoints(t,s),t=this._simplifyDP(t,s)},pointToSegmentDistance:function(t,i,s){return Math.sqrt(this._sqClosestPointOnSegment(t,i,s,!0))},closestPointOnSegment:function(t,i,s){return this._sqClosestPointOnSegment(t,i,s)},_simplifyDP:function(t,i){var e=t.length,o=typeof Uint8Array!=s+""?Uint8Array:Array,n=new o(e);n[0]=n[e-1]=1,this._simplifyDPStep(t,n,i,0,e-1);var a,r=[];for(a=0;e>a;a++)n[a]&&r.push(t[a]);return r},_simplifyDPStep:function(t,i,s,e,o){var n,a,r,h=0;for(a=e+1;o-1>=a;a++)r=this._sqClosestPointOnSegment(t[a],t[e],t[o],!0),r>h&&(n=a,h=r);h>s&&(i[n]=1,this._simplifyDPStep(t,i,s,e,n),this._simplifyDPStep(t,i,s,n,o))},_reducePoints:function(t,i){for(var s=[t[0]],e=1,o=0,n=t.length;n>e;e++)this._sqDist(t[e],t[o])>i&&(s.push(t[e]),o=e);return n-1>o&&s.push(t[n-1]),s},clipSegment:function(t,i,s,e){var o,n,a,r=e?this._lastCode:this._getBitCode(t,s),h=this._getBitCode(i,s);for(this._lastCode=h;;){if(!(r|h))return[t,i];if(r&h)return!1;o=r||h,n=this._getEdgeIntersection(t,i,o,s),a=this._getBitCode(n,s),o===r?(t=n,r=a):(i=n,h=a)}},_getEdgeIntersection:function(t,i,o,n){var a=i.x-t.x,r=i.y-t.y,h=n.min,l=n.max;return 8&o?new e.Point(t.x+a*(l.y-t.y)/r,l.y):4&o?new e.Point(t.x+a*(h.y-t.y)/r,h.y):2&o?new e.Point(l.x,t.y+r*(l.x-t.x)/a):1&o?new e.Point(h.x,t.y+r*(h.x-t.x)/a):s},_getBitCode:function(t,i){var s=0;return t.xi.max.x&&(s|=2),t.yi.max.y&&(s|=8),s},_sqDist:function(t,i){var s=i.x-t.x,e=i.y-t.y;return s*s+e*e},_sqClosestPointOnSegment:function(t,i,s,o){var n,a=i.x,r=i.y,h=s.x-a,l=s.y-r,c=h*h+l*l;return c>0&&(n=((t.x-a)*h+(t.y-r)*l)/c,n>1?(a=s.x,r=s.y):n>0&&(a+=h*n,r+=l*n)),h=t.x-a,l=t.y-r,o?h*h+l*l:new e.Point(a,r)}},e.Polyline=e.Path.extend({initialize:function(t,i){e.Path.prototype.initialize.call(this,i),this._latlngs=this._convertLatLngs(t)},options:{smoothFactor:1,noClip:!1},projectLatlngs:function(){this._originalPoints=[];for(var t=0,i=this._latlngs.length;i>t;t++)this._originalPoints[t]=this._map.latLngToLayerPoint(this._latlngs[t])},getPathString:function(){for(var t=0,i=this._parts.length,s="";i>t;t++)s+=this._getPathPartStr(this._parts[t]);return s},getLatLngs:function(){return this._latlngs},setLatLngs:function(t){return this._latlngs=this._convertLatLngs(t),this.redraw()},addLatLng:function(t){return this._latlngs.push(e.latLng(t)),this.redraw()},spliceLatLngs:function(){var t=[].splice.apply(this._latlngs,arguments);return this._convertLatLngs(this._latlngs),this.redraw(),t},closestLayerPoint:function(t){for(var i,s,o=1/0,n=this._parts,a=null,r=0,h=n.length;h>r;r++)for(var l=n[r],c=1,m=l.length;m>c;c++){i=l[c-1],s=l[c];var u=e.LineUtil._sqClosestPointOnSegment(t,i,s,!0);o>u&&(o=u,a=e.LineUtil._sqClosestPointOnSegment(t,i,s))}return a&&(a.distance=Math.sqrt(o)),a},getBounds:function(){var t,i,s=new e.LatLngBounds,o=this.getLatLngs();for(t=0,i=o.length;i>t;t++)s.extend(o[t]);return s},_convertLatLngs:function(t){var i,s;for(i=0,s=t.length;s>i;i++){if(e.Util.isArray(t[i])&&"number"!=typeof t[i][0])return;t[i]=e.latLng(t[i])}return t},_initEvents:function(){e.Path.prototype._initEvents.call(this)},_getPathPartStr:function(t){for(var i,s=e.Path.VML,o=0,n=t.length,a="";n>o;o++)i=t[o],s&&i._round(),a+=(o?"L":"M")+i.x+" "+i.y;return a},_clipPoints:function(){var t,i,o,n=this._originalPoints,a=n.length;if(this.options.noClip)return this._parts=[n],s;this._parts=[];var r=this._parts,h=this._map._pathViewport,l=e.LineUtil;for(t=0,i=0;a-1>t;t++)o=l.clipSegment(n[t],n[t+1],h,t),o&&(r[i]=r[i]||[],r[i].push(o[0]),(o[1]!==n[t+1]||t===a-2)&&(r[i].push(o[1]),i++))},_simplifyPoints:function(){for(var t=this._parts,i=e.LineUtil,s=0,o=t.length;o>s;s++)t[s]=i.simplify(t[s],this.options.smoothFactor)},_updatePath:function(){this._map&&(this._clipPoints(),this._simplifyPoints(),e.Path.prototype._updatePath.call(this))}}),e.polyline=function(t,i){return new e.Polyline(t,i)},e.PolyUtil={},e.PolyUtil.clipPolygon=function(t,i){var s,o,n,a,r,h,l,c,m,u=[1,4,2,8],d=e.LineUtil;for(o=0,l=t.length;l>o;o++)t[o]._code=d._getBitCode(t[o],i);for(a=0;4>a;a++){for(c=u[a],s=[],o=0,l=t.length,n=l-1;l>o;n=o++)r=t[o],h=t[n],r._code&c?h._code&c||(m=d._getEdgeIntersection(h,r,c,i),m._code=d._getBitCode(m,i),s.push(m)):(h._code&c&&(m=d._getEdgeIntersection(h,r,c,i),m._code=d._getBitCode(m,i),s.push(m)),s.push(r));t=s}return t},e.Polygon=e.Polyline.extend({options:{fill:!0},initialize:function(t,i){e.Polyline.prototype.initialize.call(this,t,i),t&&e.Util.isArray(t[0])&&"number"!=typeof t[0][0]&&(this._latlngs=this._convertLatLngs(t[0]),this._holes=t.slice(1))},projectLatlngs:function(){if(e.Polyline.prototype.projectLatlngs.call(this),this._holePoints=[],this._holes){var t,i,s,o;for(t=0,s=this._holes.length;s>t;t++)for(this._holePoints[t]=[],i=0,o=this._holes[t].length;o>i;i++)this._holePoints[t][i]=this._map.latLngToLayerPoint(this._holes[t][i])}},_clipPoints:function(){var t=this._originalPoints,i=[];if(this._parts=[t].concat(this._holePoints),!this.options.noClip){for(var s=0,o=this._parts.length;o>s;s++){var n=e.PolyUtil.clipPolygon(this._parts[s],this._map._pathViewport);n.length&&i.push(n)}this._parts=i}},_getPathPartStr:function(t){var i=e.Polyline.prototype._getPathPartStr.call(this,t);return i+(e.Browser.svg?"z":"x")}}),e.polygon=function(t,i){return new e.Polygon(t,i)},function(){function t(t){return e.FeatureGroup.extend({initialize:function(t,i){this._layers={},this._options=i,this.setLatLngs(t)},setLatLngs:function(i){var s=0,e=i.length;for(this.eachLayer(function(t){e>s?t.setLatLngs(i[s++]):this.removeLayer(t)},this);e>s;)this.addLayer(new t(i[s++],this._options));return this}})}e.MultiPolyline=t(e.Polyline),e.MultiPolygon=t(e.Polygon),e.multiPolyline=function(t,i){return new e.MultiPolyline(t,i)},e.multiPolygon=function(t,i){return new e.MultiPolygon(t,i)}}(),e.Rectangle=e.Polygon.extend({initialize:function(t,i){e.Polygon.prototype.initialize.call(this,this._boundsToLatLngs(t),i)},setBounds:function(t){this.setLatLngs(this._boundsToLatLngs(t))},_boundsToLatLngs:function(t){return t=e.latLngBounds(t),[t.getSouthWest(),t.getNorthWest(),t.getNorthEast(),t.getSouthEast()]}}),e.rectangle=function(t,i){return new e.Rectangle(t,i)},e.Circle=e.Path.extend({initialize:function(t,i,s){e.Path.prototype.initialize.call(this,s),this._latlng=e.latLng(t),this._mRadius=i},options:{fill:!0},setLatLng:function(t){return this._latlng=e.latLng(t),this.redraw()},setRadius:function(t){return this._mRadius=t,this.redraw()},projectLatlngs:function(){var t=this._getLngRadius(),i=new e.LatLng(this._latlng.lat,this._latlng.lng-t),s=this._map.latLngToLayerPoint(i);this._point=this._map.latLngToLayerPoint(this._latlng),this._radius=Math.max(Math.round(this._point.x-s.x),1)},getBounds:function(){var t=this._getLngRadius(),i=360*(this._mRadius/40075017),s=this._latlng,o=new e.LatLng(s.lat-i,s.lng-t),n=new e.LatLng(s.lat+i,s.lng+t);return new e.LatLngBounds(o,n)},getLatLng:function(){return this._latlng},getPathString:function(){var t=this._point,i=this._radius;return this._checkIfEmpty()?"":e.Browser.svg?"M"+t.x+","+(t.y-i)+"A"+i+","+i+",0,1,1,"+(t.x-.1)+","+(t.y-i)+" z":(t._round(),i=Math.round(i),"AL "+t.x+","+t.y+" "+i+","+i+" 0,"+23592600)},getRadius:function(){return this._mRadius},_getLatRadius:function(){return 360*(this._mRadius/40075017)},_getLngRadius:function(){return this._getLatRadius()/Math.cos(e.LatLng.DEG_TO_RAD*this._latlng.lat)},_checkIfEmpty:function(){if(!this._map)return!1;var t=this._map._pathViewport,i=this._radius,s=this._point;return s.x-i>t.max.x||s.y-i>t.max.y||s.x+is;s++)for(l=this._parts[s],o=0,r=l.length,n=r-1;r>o;n=o++)if((i||0!==o)&&(h=e.LineUtil.pointToSegmentDistance(t,l[n],l[o]),c>=h))return!0;return!1}}:{}),e.Polygon.include(e.Path.CANVAS?{_containsPoint:function(t){var i,s,o,n,a,r,h,l,c=!1;if(e.Polyline.prototype._containsPoint.call(this,t,!0))return!0;for(n=0,h=this._parts.length;h>n;n++)for(i=this._parts[n],a=0,l=i.length,r=l-1;l>a;r=a++)s=i[a],o=i[r],s.y>t.y!=o.y>t.y&&t.x<(o.x-s.x)*(t.y-s.y)/(o.y-s.y)+s.x&&(c=!c);return c}}:{}),e.Circle.include(e.Path.CANVAS?{_drawPath:function(){var t=this._point;this._ctx.beginPath(),this._ctx.arc(t.x,t.y,this._radius,0,2*Math.PI,!1)},_containsPoint:function(t){var i=this._point,s=this.options.stroke?this.options.weight/2:0;return t.distanceTo(i)<=this._radius+s}}:{}),e.GeoJSON=e.FeatureGroup.extend({initialize:function(t,i){e.setOptions(this,i),this._layers={},t&&this.addData(t)},addData:function(t){var i,s,o=e.Util.isArray(t)?t:t.features;if(o){for(i=0,s=o.length;s>i;i++)(o[i].geometries||o[i].geometry||o[i].features)&&this.addData(o[i]);return this}var n=this.options;if(!n.filter||n.filter(t)){var a=e.GeoJSON.geometryToLayer(t,n.pointToLayer);return a.feature=t,a.defaultOptions=a.options,this.resetStyle(a),n.onEachFeature&&n.onEachFeature(t,a),this.addLayer(a)}},resetStyle:function(t){var i=this.options.style;i&&(e.Util.extend(t.options,t.defaultOptions),this._setLayerStyle(t,i))},setStyle:function(t){this.eachLayer(function(i){this._setLayerStyle(i,t)},this)},_setLayerStyle:function(t,i){"function"==typeof i&&(i=i(t.feature)),t.setStyle&&t.setStyle(i)}}),e.extend(e.GeoJSON,{geometryToLayer:function(t,i){var s,o,n,a,r,h="Feature"===t.type?t.geometry:t,l=h.coordinates,c=[];switch(h.type){case"Point":return s=this.coordsToLatLng(l),i?i(t,s):new e.Marker(s);case"MultiPoint":for(n=0,a=l.length;a>n;n++)s=this.coordsToLatLng(l[n]),r=i?i(t,s):new e.Marker(s),c.push(r);return new e.FeatureGroup(c);case"LineString":return o=this.coordsToLatLngs(l),new e.Polyline(o);case"Polygon":return o=this.coordsToLatLngs(l,1),new e.Polygon(o);case"MultiLineString":return o=this.coordsToLatLngs(l,1),new e.MultiPolyline(o);case"MultiPolygon":return o=this.coordsToLatLngs(l,2),new e.MultiPolygon(o);case"GeometryCollection":for(n=0,a=h.geometries.length;a>n;n++)r=this.geometryToLayer({geometry:h.geometries[n],type:"Feature",properties:t.properties},i),c.push(r);return new e.FeatureGroup(c);default:throw Error("Invalid GeoJSON object.")}},coordsToLatLng:function(t,i){var s=parseFloat(t[i?0:1]),o=parseFloat(t[i?1:0]);return new e.LatLng(s,o)},coordsToLatLngs:function(t,i,s){var e,o,n,a=[];for(o=0,n=t.length;n>o;o++)e=i?this.coordsToLatLngs(t[o],i-1,s):this.coordsToLatLng(t[o],s),a.push(e);return a}}),e.geoJson=function(t,i){return new e.GeoJSON(t,i)},e.DomEvent={addListener:function(t,i,o,n){var a,r,h,l=e.stamp(o),c="_leaflet_"+i+l;return t[c]?this:(a=function(i){return o.call(n||t,i||e.DomEvent._getEvent())},e.Browser.msTouch&&0===i.indexOf("touch")?this.addMsTouchListener(t,i,a,l):(e.Browser.touch&&"dblclick"===i&&this.addDoubleTapListener&&this.addDoubleTapListener(t,a,l),"addEventListener"in t?"mousewheel"===i?(t.addEventListener("DOMMouseScroll",a,!1),t.addEventListener(i,a,!1)):"mouseenter"===i||"mouseleave"===i?(r=a,h="mouseenter"===i?"mouseover":"mouseout",a=function(i){return e.DomEvent._checkMouse(t,i)?r(i):s},t.addEventListener(h,a,!1)):t.addEventListener(i,a,!1):"attachEvent"in t&&t.attachEvent("on"+i,a),t[c]=a,this))},removeListener:function(t,i,s){var o=e.stamp(s),n="_leaflet_"+i+o,a=t[n];if(a)return e.Browser.msTouch&&0===i.indexOf("touch")?this.removeMsTouchListener(t,i,o):e.Browser.touch&&"dblclick"===i&&this.removeDoubleTapListener?this.removeDoubleTapListener(t,o):"removeEventListener"in t?"mousewheel"===i?(t.removeEventListener("DOMMouseScroll",a,!1),t.removeEventListener(i,a,!1)):"mouseenter"===i||"mouseleave"===i?t.removeEventListener("mouseenter"===i?"mouseover":"mouseout",a,!1):t.removeEventListener(i,a,!1):"detachEvent"in t&&t.detachEvent("on"+i,a),t[n]=null,this},stopPropagation:function(t){return t.stopPropagation?t.stopPropagation():t.cancelBubble=!0,this},disableClickPropagation:function(t){for(var i=e.DomEvent.stopPropagation,s=e.Draggable.START.length-1;s>=0;s--)e.DomEvent.addListener(t,e.Draggable.START[s],i);return e.DomEvent.addListener(t,"click",i).addListener(t,"dblclick",i)},preventDefault:function(t){return t.preventDefault?t.preventDefault():t.returnValue=!1,this},stop:function(t){return e.DomEvent.preventDefault(t).stopPropagation(t)},getMousePosition:function(t,s){var o=i.body,n=i.documentElement,a=t.pageX?t.pageX:t.clientX+o.scrollLeft+n.scrollLeft,r=t.pageY?t.pageY:t.clientY+o.scrollTop+n.scrollTop,h=new e.Point(a,r);return s?h._subtract(e.DomUtil.getViewportOffset(s)):h},getWheelDelta:function(t){var i=0;return t.wheelDelta&&(i=t.wheelDelta/120),t.detail&&(i=-t.detail/3),i},_checkMouse:function(t,i){var s=i.relatedTarget;if(!s)return!0;try{for(;s&&s!==t;)s=s.parentNode}catch(e){return!1}return s!==t},_getEvent:function(){var i=t.event;if(!i)for(var s=arguments.callee.caller;s&&(i=s.arguments[0],!i||t.Event!==i.constructor);)s=s.caller;return i}},e.DomEvent.on=e.DomEvent.addListener,e.DomEvent.off=e.DomEvent.removeListener,e.Draggable=e.Class.extend({includes:e.Mixin.Events,statics:{START:e.Browser.touch?["touchstart","mousedown"]:["mousedown"],END:{mousedown:"mouseup",touchstart:"touchend",MSPointerDown:"touchend"},MOVE:{mousedown:"mousemove",touchstart:"touchmove",MSPointerDown:"touchmove"},TAP_TOLERANCE:15},initialize:function(t,i,s){this._element=t,this._dragStartTarget=i||t,this._longPress=s&&!e.Browser.msTouch},enable:function(){if(!this._enabled){for(var t=e.Draggable.START.length-1;t>=0;t--)e.DomEvent.on(this._dragStartTarget,e.Draggable.START[t],this._onDown,this);this._enabled=!0}},disable:function(){if(this._enabled){for(var t=e.Draggable.START.length-1;t>=0;t--)e.DomEvent.off(this._dragStartTarget,e.Draggable.START[t],this._onDown,this);this._enabled=!1,this._moved=!1}},_onDown:function(t){if(!(!e.Browser.touch&&t.shiftKey||1!==t.which&&1!==t.button&&!t.touches||(e.DomEvent.preventDefault(t),e.DomEvent.stopPropagation(t),e.Draggable._disabled))){if(this._simulateClick=!0,t.touches&&t.touches.length>1)return this._simulateClick=!1,clearTimeout(this._longPressTimeout),s;var o=t.touches&&1===t.touches.length?t.touches[0]:t,n=o.target;e.Browser.touch&&"a"===n.tagName.toLowerCase()&&e.DomUtil.addClass(n,"leaflet-active"),this._moved=!1,this._moving||(this._startPoint=new e.Point(o.clientX,o.clientY),this._startPos=this._newPos=e.DomUtil.getPosition(this._element),t.touches&&1===t.touches.length&&e.Browser.touch&&this._longPress&&(this._longPressTimeout=setTimeout(e.bind(function(){var t=this._newPos&&this._newPos.distanceTo(this._startPos)||0;e.Draggable.TAP_TOLERANCE>t&&(this._simulateClick=!1,this._onUp(),this._simulateEvent("contextmenu",o))},this),1e3)),e.DomEvent.on(i,e.Draggable.MOVE[t.type],this._onMove,this),e.DomEvent.on(i,e.Draggable.END[t.type],this._onUp,this))}},_onMove:function(t){if(!(t.touches&&t.touches.length>1)){var i=t.touches&&1===t.touches.length?t.touches[0]:t,s=new e.Point(i.clientX,i.clientY),o=s.subtract(this._startPoint);(o.x||o.y)&&(e.DomEvent.preventDefault(t),this._moved||(this.fire("dragstart"),this._moved=!0,this._startPos=e.DomUtil.getPosition(this._element).subtract(o),e.Browser.touch||(e.DomUtil.disableTextSelection(),this._setMovingCursor())),this._newPos=this._startPos.add(o),this._moving=!0,e.Util.cancelAnimFrame(this._animRequest),this._animRequest=e.Util.requestAnimFrame(this._updatePosition,this,!0,this._dragStartTarget))}},_updatePosition:function(){this.fire("predrag"),e.DomUtil.setPosition(this._element,this._newPos),this.fire("drag")},_onUp:function(t){var s;if(clearTimeout(this._longPressTimeout),this._simulateClick&&t.changedTouches){var o=t.changedTouches[0],n=o.target,a=this._newPos&&this._newPos.distanceTo(this._startPos)||0;"a"===n.tagName.toLowerCase()&&e.DomUtil.removeClass(n,"leaflet-active"),e.Draggable.TAP_TOLERANCE>a&&(s=o)}e.Browser.touch||(e.DomUtil.enableTextSelection(),this._restoreCursor());for(var r in e.Draggable.MOVE)e.Draggable.MOVE.hasOwnProperty(r)&&(e.DomEvent.off(i,e.Draggable.MOVE[r],this._onMove),e.DomEvent.off(i,e.Draggable.END[r],this._onUp));this._moved&&(e.Util.cancelAnimFrame(this._animRequest),this.fire("dragend")),this._moving=!1,s&&(this._moved=!1,this._simulateEvent("click",s))},_setMovingCursor:function(){e.DomUtil.addClass(i.body,"leaflet-dragging")},_restoreCursor:function(){e.DomUtil.removeClass(i.body,"leaflet-dragging")},_simulateEvent:function(s,e){var o=i.createEvent("MouseEvents");o.initMouseEvent(s,!0,!0,t,1,e.screenX,e.screenY,e.clientX,e.clientY,!1,!1,!1,!1,0,null),e.target.dispatchEvent(o)}}),e.Handler=e.Class.extend({initialize:function(t){this._map=t},enable:function(){this._enabled||(this._enabled=!0,this.addHooks())},disable:function(){this._enabled&&(this._enabled=!1,this.removeHooks())},enabled:function(){return!!this._enabled}}),e.Map.mergeOptions({dragging:!0,inertia:!e.Browser.android23,inertiaDeceleration:3400,inertiaMaxSpeed:1/0,inertiaThreshold:e.Browser.touch?32:18,easeLinearity:.25,longPress:!0,worldCopyJump:!1}),e.Map.Drag=e.Handler.extend({addHooks:function(){if(!this._draggable){var t=this._map;this._draggable=new e.Draggable(t._mapPane,t._container,t.options.longPress),this._draggable.on({dragstart:this._onDragStart,drag:this._onDrag,dragend:this._onDragEnd},this),t.options.worldCopyJump&&(this._draggable.on("predrag",this._onPreDrag,this),t.on("viewreset",this._onViewReset,this))}this._draggable.enable()},removeHooks:function(){this._draggable.disable()},moved:function(){return this._draggable&&this._draggable._moved},_onDragStart:function(){var t=this._map;t._panAnim&&t._panAnim.stop(),t.fire("movestart").fire("dragstart"),t.options.inertia&&(this._positions=[],this._times=[])},_onDrag:function(){if(this._map.options.inertia){var t=this._lastTime=+new Date,i=this._lastPos=this._draggable._newPos;this._positions.push(i),this._times.push(t),t-this._times[0]>200&&(this._positions.shift(),this._times.shift())}this._map.fire("move").fire("drag")},_onViewReset:function(){var t=this._map.getSize()._divideBy(2),i=this._map.latLngToLayerPoint(new e.LatLng(0,0));this._initialWorldOffset=i.subtract(t).x,this._worldWidth=this._map.project(new e.LatLng(0,180)).x},_onPreDrag:function(){var t=this._worldWidth,i=Math.round(t/2),s=this._initialWorldOffset,e=this._draggable._newPos.x,o=(e-i+s)%t+i-s,n=(e+i+s)%t-i-s,a=Math.abs(o+s)i.inertiaThreshold||!this._positions[0];if(o)t.fire("moveend");else{var n=this._lastPos.subtract(this._positions[0]),a=(this._lastTime+s-this._times[0])/1e3,r=i.easeLinearity,h=n.multiplyBy(r/a),l=h.distanceTo(new e.Point(0,0)),c=Math.min(i.inertiaMaxSpeed,l),m=h.multiplyBy(c/l),u=c/(i.inertiaDeceleration*r),d=m.multiplyBy(-u/2).round();e.Util.requestAnimFrame(function(){t.panBy(d,u,r)})}t.fire("dragend"),i.maxBounds&&e.Util.requestAnimFrame(this._panInsideMaxBounds,t,!0,t._container)},_panInsideMaxBounds:function(){this.panInsideBounds(this.options.maxBounds)}}),e.Map.addInitHook("addHandler","dragging",e.Map.Drag),e.Map.mergeOptions({doubleClickZoom:!0}),e.Map.DoubleClickZoom=e.Handler.extend({addHooks:function(){this._map.on("dblclick",this._onDoubleClick)},removeHooks:function(){this._map.off("dblclick",this._onDoubleClick)},_onDoubleClick:function(t){this.setView(t.latlng,this._zoom+1)}}),e.Map.addInitHook("addHandler","doubleClickZoom",e.Map.DoubleClickZoom),e.Map.mergeOptions({scrollWheelZoom:!0}),e.Map.ScrollWheelZoom=e.Handler.extend({addHooks:function(){e.DomEvent.on(this._map._container,"mousewheel",this._onWheelScroll,this),this._delta=0},removeHooks:function(){e.DomEvent.off(this._map._container,"mousewheel",this._onWheelScroll)},_onWheelScroll:function(t){var i=e.DomEvent.getWheelDelta(t);this._delta+=i,this._lastMousePos=this._map.mouseEventToContainerPoint(t),this._startTime||(this._startTime=+new Date);var s=Math.max(40-(+new Date-this._startTime),0);clearTimeout(this._timer),this._timer=setTimeout(e.bind(this._performZoom,this),s),e.DomEvent.preventDefault(t),e.DomEvent.stopPropagation(t)},_performZoom:function(){var t=this._map,i=this._delta,s=t.getZoom();if(i=i>0?Math.ceil(i):Math.round(i),i=Math.max(Math.min(i,4),-4),i=t._limitZoom(s+i)-s,this._delta=0,this._startTime=null,i){var e=s+i,o=this._getCenterForScrollWheelZoom(e);t.setView(o,e)}},_getCenterForScrollWheelZoom:function(t){var i=this._map,s=i.getZoomScale(t),e=i.getSize()._divideBy(2),o=this._lastMousePos._subtract(e)._multiplyBy(1-1/s),n=i._getTopLeftPoint()._add(e)._add(o);return i.unproject(n)}}),e.Map.addInitHook("addHandler","scrollWheelZoom",e.Map.ScrollWheelZoom),e.extend(e.DomEvent,{_touchstart:e.Browser.msTouch?"MSPointerDown":"touchstart",_touchend:e.Browser.msTouch?"MSPointerUp":"touchend",addDoubleTapListener:function(t,s,o){function n(t){var i;if(e.Browser.msTouch?(p.push(t.pointerId),i=p.length):i=t.touches.length,!(i>1)){var s=Date.now(),o=s-(r||s);h=t.touches?t.touches[0]:t,l=o>0&&c>=o,r=s}}function a(t){if(e.Browser.msTouch){var i=p.indexOf(t.pointerId);if(-1===i)return;p.splice(i,1)}if(l){if(e.Browser.msTouch){var o,n={};for(var a in h)o=h[a],n[a]="function"==typeof o?o.bind(h):o;h=n}h.type="dblclick",s(h),r=null}}var r,h,l=!1,c=250,m="_leaflet_",u=this._touchstart,d=this._touchend,p=[];t[m+u+o]=n,t[m+d+o]=a;var _=e.Browser.msTouch?i.documentElement:t;return t.addEventListener(u,n,!1),_.addEventListener(d,a,!1),e.Browser.msTouch&&_.addEventListener("MSPointerCancel",a,!1),this},removeDoubleTapListener:function(t,s){var o="_leaflet_";return t.removeEventListener(this._touchstart,t[o+this._touchstart+s],!1),(e.Browser.msTouch?i.documentElement:t).removeEventListener(this._touchend,t[o+this._touchend+s],!1),e.Browser.msTouch&&i.documentElement.removeEventListener("MSPointerCancel",t[o+this._touchend+s],!1),this}}),e.extend(e.DomEvent,{_msTouches:[],_msDocumentListener:!1,addMsTouchListener:function(t,i,s,e){switch(i){case"touchstart":return this.addMsTouchListenerStart(t,i,s,e);case"touchend":return this.addMsTouchListenerEnd(t,i,s,e);case"touchmove":return this.addMsTouchListenerMove(t,i,s,e);default:throw"Unknown touch event type"}},addMsTouchListenerStart:function(t,s,e,o){var n="_leaflet_",a=this._msTouches,r=function(t){for(var i=!1,s=0;a.length>s;s++)if(a[s].pointerId===t.pointerId){i=!0;break}i||a.push(t),t.touches=a.slice(),t.changedTouches=[t],e(t)};if(t[n+"touchstart"+o]=r,t.addEventListener("MSPointerDown",r,!1),!this._msDocumentListener){var h=function(t){for(var i=0;a.length>i;i++)if(a[i].pointerId===t.pointerId){a.splice(i,1);break}};i.documentElement.addEventListener("MSPointerUp",h,!1),i.documentElement.addEventListener("MSPointerCancel",h,!1),this._msDocumentListener=!0}return this},addMsTouchListenerMove:function(t,i,s,e){function o(t){if(t.pointerType!==t.MSPOINTER_TYPE_MOUSE||0!==t.buttons){for(var i=0;a.length>i;i++)if(a[i].pointerId===t.pointerId){a[i]=t;break}t.touches=a.slice(),t.changedTouches=[t],s(t)}}var n="_leaflet_",a=this._msTouches;return t[n+"touchmove"+e]=o,t.addEventListener("MSPointerMove",o,!1),this},addMsTouchListenerEnd:function(t,i,s,e){var o="_leaflet_",n=this._msTouches,a=function(t){for(var i=0;n.length>i;i++)if(n[i].pointerId===t.pointerId){n.splice(i,1);break}t.touches=n.slice(),t.changedTouches=[t],s(t)};return t[o+"touchend"+e]=a,t.addEventListener("MSPointerUp",a,!1),t.addEventListener("MSPointerCancel",a,!1),this},removeMsTouchListener:function(t,i,s){var e="_leaflet_",o=t[e+i+s];switch(i){case"touchstart":t.removeEventListener("MSPointerDown",o,!1);break;case"touchmove":t.removeEventListener("MSPointerMove",o,!1);break;case"touchend":t.removeEventListener("MSPointerUp",o,!1),t.removeEventListener("MSPointerCancel",o,!1)}return this}}),e.Map.mergeOptions({touchZoom:e.Browser.touch&&!e.Browser.android23}),e.Map.TouchZoom=e.Handler.extend({addHooks:function(){e.DomEvent.on(this._map._container,"touchstart",this._onTouchStart,this)},removeHooks:function(){e.DomEvent.off(this._map._container,"touchstart",this._onTouchStart,this)},_onTouchStart:function(t){var s=this._map;if(t.touches&&2===t.touches.length&&!s._animatingZoom&&!this._zooming){var o=s.mouseEventToLayerPoint(t.touches[0]),n=s.mouseEventToLayerPoint(t.touches[1]),a=s._getCenterLayerPoint();this._startCenter=o.add(n)._divideBy(2),this._startDist=o.distanceTo(n),this._moved=!1,this._zooming=!0,this._centerOffset=a.subtract(this._startCenter),s._panAnim&&s._panAnim.stop(),e.DomEvent.on(i,"touchmove",this._onTouchMove,this).on(i,"touchend",this._onTouchEnd,this),e.DomEvent.preventDefault(t)}},_onTouchMove:function(t){if(t.touches&&2===t.touches.length){var i=this._map,s=i.mouseEventToLayerPoint(t.touches[0]),o=i.mouseEventToLayerPoint(t.touches[1]);this._scale=s.distanceTo(o)/this._startDist,this._delta=s._add(o)._divideBy(2)._subtract(this._startCenter),1!==this._scale&&(this._moved||(e.DomUtil.addClass(i._mapPane,"leaflet-zoom-anim leaflet-touching"),i.fire("movestart").fire("zoomstart")._prepareTileBg(),this._moved=!0),e.Util.cancelAnimFrame(this._animRequest),this._animRequest=e.Util.requestAnimFrame(this._updateOnMove,this,!0,this._map._container),e.DomEvent.preventDefault(t))}},_updateOnMove:function(){var t=this._map,i=this._getScaleOrigin(),s=t.layerPointToLatLng(i);t.fire("zoomanim",{center:s,zoom:t.getScaleZoom(this._scale)}),t._tileBg.style[e.DomUtil.TRANSFORM]=e.DomUtil.getTranslateString(this._delta)+" "+e.DomUtil.getScaleString(this._scale,this._startCenter)},_onTouchEnd:function(){if(this._moved&&this._zooming){var t=this._map;this._zooming=!1,e.DomUtil.removeClass(t._mapPane,"leaflet-touching"),e.DomEvent.off(i,"touchmove",this._onTouchMove).off(i,"touchend",this._onTouchEnd);var s=this._getScaleOrigin(),o=t.layerPointToLatLng(s),n=t.getZoom(),a=t.getScaleZoom(this._scale)-n,r=a>0?Math.ceil(a):Math.floor(a),h=t._limitZoom(n+r);t.fire("zoomanim",{center:o,zoom:h}),t._runAnimation(o,h,t.getZoomScale(h)/this._scale,s,!0)}},_getScaleOrigin:function(){var t=this._centerOffset.subtract(this._delta).divideBy(this._scale);return this._startCenter.add(t)}}),e.Map.addInitHook("addHandler","touchZoom",e.Map.TouchZoom),e.Map.mergeOptions({boxZoom:!0}),e.Map.BoxZoom=e.Handler.extend({initialize:function(t){this._map=t,this._container=t._container,this._pane=t._panes.overlayPane},addHooks:function(){e.DomEvent.on(this._container,"mousedown",this._onMouseDown,this)},removeHooks:function(){e.DomEvent.off(this._container,"mousedown",this._onMouseDown)},_onMouseDown:function(t){return!t.shiftKey||1!==t.which&&1!==t.button?!1:(e.DomUtil.disableTextSelection(),this._startLayerPoint=this._map.mouseEventToLayerPoint(t),this._box=e.DomUtil.create("div","leaflet-zoom-box",this._pane),e.DomUtil.setPosition(this._box,this._startLayerPoint),this._container.style.cursor="crosshair",e.DomEvent.on(i,"mousemove",this._onMouseMove,this).on(i,"mouseup",this._onMouseUp,this).preventDefault(t),this._map.fire("boxzoomstart"),s)},_onMouseMove:function(t){var i=this._startLayerPoint,s=this._box,o=this._map.mouseEventToLayerPoint(t),n=o.subtract(i),a=new e.Point(Math.min(o.x,i.x),Math.min(o.y,i.y));e.DomUtil.setPosition(s,a),s.style.width=Math.max(0,Math.abs(n.x)-4)+"px",s.style.height=Math.max(0,Math.abs(n.y)-4)+"px"},_onMouseUp:function(t){this._pane.removeChild(this._box),this._container.style.cursor="",e.DomUtil.enableTextSelection(),e.DomEvent.off(i,"mousemove",this._onMouseMove).off(i,"mouseup",this._onMouseUp);var s=this._map,o=s.mouseEventToLayerPoint(t);if(!this._startLayerPoint.equals(o)){var n=new e.LatLngBounds(s.layerPointToLatLng(this._startLayerPoint),s.layerPointToLatLng(o));s.fitBounds(n),s.fire("boxzoomend",{boxZoomBounds:n})}}}),e.Map.addInitHook("addHandler","boxZoom",e.Map.BoxZoom),e.Map.mergeOptions({keyboard:!0,keyboardPanOffset:80,keyboardZoomOffset:1}),e.Map.Keyboard=e.Handler.extend({keyCodes:{left:[37],right:[39],down:[40],up:[38],zoomIn:[187,107,61],zoomOut:[189,109,173]},initialize:function(t){this._map=t,this._setPanOffset(t.options.keyboardPanOffset),this._setZoomOffset(t.options.keyboardZoomOffset)},addHooks:function(){var t=this._map._container;-1===t.tabIndex&&(t.tabIndex="0"),e.DomEvent.on(t,"focus",this._onFocus,this).on(t,"blur",this._onBlur,this).on(t,"mousedown",this._onMouseDown,this),this._map.on("focus",this._addHooks,this).on("blur",this._removeHooks,this)},removeHooks:function(){this._removeHooks();var t=this._map._container;e.DomEvent.off(t,"focus",this._onFocus,this).off(t,"blur",this._onBlur,this).off(t,"mousedown",this._onMouseDown,this),this._map.off("focus",this._addHooks,this).off("blur",this._removeHooks,this)},_onMouseDown:function(){this._focused||this._map._container.focus()},_onFocus:function(){this._focused=!0,this._map.fire("focus")},_onBlur:function(){this._focused=!1,this._map.fire("blur")},_setPanOffset:function(t){var i,s,e=this._panKeys={},o=this.keyCodes;for(i=0,s=o.left.length;s>i;i++)e[o.left[i]]=[-1*t,0];for(i=0,s=o.right.length;s>i;i++)e[o.right[i]]=[t,0];for(i=0,s=o.down.length;s>i;i++)e[o.down[i]]=[0,t];for(i=0,s=o.up.length;s>i;i++)e[o.up[i]]=[0,-1*t]},_setZoomOffset:function(t){var i,s,e=this._zoomKeys={},o=this.keyCodes;for(i=0,s=o.zoomIn.length;s>i;i++)e[o.zoomIn[i]]=t;for(i=0,s=o.zoomOut.length;s>i;i++)e[o.zoomOut[i]]=-t},_addHooks:function(){e.DomEvent.on(i,"keydown",this._onKeyDown,this)},_removeHooks:function(){e.DomEvent.off(i,"keydown",this._onKeyDown,this)},_onKeyDown:function(t){var i=t.keyCode,s=this._map;if(this._panKeys.hasOwnProperty(i))s.panBy(this._panKeys[i]),s.options.maxBounds&&s.panInsideBounds(s.options.maxBounds);else{if(!this._zoomKeys.hasOwnProperty(i))return;s.setZoom(s.getZoom()+this._zoomKeys[i])}e.DomEvent.stop(t)}}),e.Map.addInitHook("addHandler","keyboard",e.Map.Keyboard),e.Handler.MarkerDrag=e.Handler.extend({initialize:function(t){this._marker=t},addHooks:function(){var t=this._marker._icon;this._draggable||(this._draggable=new e.Draggable(t,t).on("dragstart",this._onDragStart,this).on("drag",this._onDrag,this).on("dragend",this._onDragEnd,this)),this._draggable.enable()},removeHooks:function(){this._draggable.disable()},moved:function(){return this._draggable&&this._draggable._moved},_onDragStart:function(){this._marker.closePopup().fire("movestart").fire("dragstart")},_onDrag:function(){var t=this._marker,i=t._shadow,s=e.DomUtil.getPosition(t._icon),o=t._map.layerPointToLatLng(s);i&&e.DomUtil.setPosition(i,s),t._latlng=o,t.fire("move",{latlng:o}).fire("drag") +},_onDragEnd:function(){this._marker.fire("moveend").fire("dragend")}}),e.Handler.PolyEdit=e.Handler.extend({options:{icon:new e.DivIcon({iconSize:new e.Point(8,8),className:"leaflet-div-icon leaflet-editing-icon"})},initialize:function(t,i){this._poly=t,e.setOptions(this,i)},addHooks:function(){this._poly._map&&(this._markerGroup||this._initMarkers(),this._poly._map.addLayer(this._markerGroup))},removeHooks:function(){this._poly._map&&(this._poly._map.removeLayer(this._markerGroup),delete this._markerGroup,delete this._markers)},updateMarkers:function(){this._markerGroup.clearLayers(),this._initMarkers()},_initMarkers:function(){this._markerGroup||(this._markerGroup=new e.LayerGroup),this._markers=[];var t,i,s,o,n=this._poly._latlngs;for(t=0,s=n.length;s>t;t++)o=this._createMarker(n[t],t),o.on("click",this._onMarkerClick,this),this._markers.push(o);var a,r;for(t=0,i=s-1;s>t;i=t++)(0!==t||e.Polygon&&this._poly instanceof e.Polygon)&&(a=this._markers[i],r=this._markers[t],this._createMiddleMarker(a,r),this._updatePrevNext(a,r))},_createMarker:function(t,i){var s=new e.Marker(t,{draggable:!0,icon:this.options.icon});return s._origLatLng=t,s._index=i,s.on("drag",this._onMarkerDrag,this),s.on("dragend",this._fireEdit,this),this._markerGroup.addLayer(s),s},_fireEdit:function(){this._poly.fire("edit")},_onMarkerDrag:function(t){var i=t.target;e.extend(i._origLatLng,i._latlng),i._middleLeft&&i._middleLeft.setLatLng(this._getMiddleLatLng(i._prev,i)),i._middleRight&&i._middleRight.setLatLng(this._getMiddleLatLng(i,i._next)),this._poly.redraw()},_onMarkerClick:function(t){if(!(3>this._poly._latlngs.length)){var i=t.target,s=i._index;this._markerGroup.removeLayer(i),this._markers.splice(s,1),this._poly.spliceLatLngs(s,1),this._updateIndexes(s,-1),this._updatePrevNext(i._prev,i._next),i._middleLeft&&this._markerGroup.removeLayer(i._middleLeft),i._middleRight&&this._markerGroup.removeLayer(i._middleRight),i._prev&&i._next?this._createMiddleMarker(i._prev,i._next):i._prev?i._next||(i._prev._middleRight=null):i._next._middleLeft=null,this._poly.fire("edit")}},_updateIndexes:function(t,i){this._markerGroup.eachLayer(function(s){s._index>t&&(s._index+=i)})},_createMiddleMarker:function(t,i){var s,e,o,n=this._getMiddleLatLng(t,i),a=this._createMarker(n);a.setOpacity(.6),t._middleRight=i._middleLeft=a,e=function(){var e=i._index;a._index=e,a.off("click",s).on("click",this._onMarkerClick,this),n.lat=a.getLatLng().lat,n.lng=a.getLatLng().lng,this._poly.spliceLatLngs(e,0,n),this._markers.splice(e,0,a),a.setOpacity(1),this._updateIndexes(e,1),i._index++,this._updatePrevNext(t,a),this._updatePrevNext(a,i)},o=function(){a.off("dragstart",e,this),a.off("dragend",o,this),this._createMiddleMarker(t,a),this._createMiddleMarker(a,i)},s=function(){e.call(this),o.call(this),this._poly.fire("edit")},a.on("click",s,this).on("dragstart",e,this).on("dragend",o,this),this._markerGroup.addLayer(a)},_updatePrevNext:function(t,i){t&&(t._next=i),i&&(i._prev=t)},_getMiddleLatLng:function(t,i){var s=this._poly._map,e=s.latLngToLayerPoint(t.getLatLng()),o=s.latLngToLayerPoint(i.getLatLng());return s.layerPointToLatLng(e._add(o)._divideBy(2))}}),e.Polyline.addInitHook(function(){e.Handler.PolyEdit&&(this.editing=new e.Handler.PolyEdit(this),this.options.editable&&this.editing.enable()),this.on("add",function(){this.editing&&this.editing.enabled()&&this.editing.addHooks()}),this.on("remove",function(){this.editing&&this.editing.enabled()&&this.editing.removeHooks()})}),e.Control=e.Class.extend({options:{position:"topright"},initialize:function(t){e.setOptions(this,t)},getPosition:function(){return this.options.position},setPosition:function(t){var i=this._map;return i&&i.removeControl(this),this.options.position=t,i&&i.addControl(this),this},addTo:function(t){this._map=t;var i=this._container=this.onAdd(t),s=this.getPosition(),o=t._controlCorners[s];return e.DomUtil.addClass(i,"leaflet-control"),-1!==s.indexOf("bottom")?o.insertBefore(i,o.firstChild):o.appendChild(i),this},removeFrom:function(t){var i=this.getPosition(),s=t._controlCorners[i];return s.removeChild(this._container),this._map=null,this.onRemove&&this.onRemove(t),this}}),e.control=function(t){return new e.Control(t)},e.Map.include({addControl:function(t){return t.addTo(this),this},removeControl:function(t){return t.removeFrom(this),this},_initControlPos:function(){function t(t,n){var a=s+t+" "+s+n;i[t+n]=e.DomUtil.create("div",a,o)}var i=this._controlCorners={},s="leaflet-",o=this._controlContainer=e.DomUtil.create("div",s+"control-container",this._container);t("top","left"),t("top","right"),t("bottom","left"),t("bottom","right")}}),e.Control.Zoom=e.Control.extend({options:{position:"topleft"},onAdd:function(t){var i="leaflet-control-zoom",s="leaflet-bar",o=s+"-part",n=e.DomUtil.create("div",i+" "+s);return this._map=t,this._zoomInButton=this._createButton("+","Zoom in",i+"-in "+o+" "+o+"-top",n,this._zoomIn,this),this._zoomOutButton=this._createButton("-","Zoom out",i+"-out "+o+" "+o+"-bottom",n,this._zoomOut,this),t.on("zoomend",this._updateDisabled,this),n},onRemove:function(t){t.off("zoomend",this._updateDisabled,this)},_zoomIn:function(t){this._map.zoomIn(t.shiftKey?3:1)},_zoomOut:function(t){this._map.zoomOut(t.shiftKey?3:1)},_createButton:function(t,i,s,o,n,a){var r=e.DomUtil.create("a",s,o);r.innerHTML=t,r.href="#",r.title=i;var h=e.DomEvent.stopPropagation;return e.DomEvent.on(r,"click",h).on(r,"mousedown",h).on(r,"dblclick",h).on(r,"click",e.DomEvent.preventDefault).on(r,"click",n,a),r},_updateDisabled:function(){var t=this._map,i="leaflet-control-zoom-disabled";e.DomUtil.removeClass(this._zoomInButton,i),e.DomUtil.removeClass(this._zoomOutButton,i),t._zoom===t.getMinZoom()&&e.DomUtil.addClass(this._zoomOutButton,i),t._zoom===t.getMaxZoom()&&e.DomUtil.addClass(this._zoomInButton,i)}}),e.Map.mergeOptions({zoomControl:!0}),e.Map.addInitHook(function(){this.options.zoomControl&&(this.zoomControl=new e.Control.Zoom,this.addControl(this.zoomControl))}),e.control.zoom=function(t){return new e.Control.Zoom(t)},e.Control.Attribution=e.Control.extend({options:{position:"bottomright",prefix:'Powered by Leaflet'},initialize:function(t){e.setOptions(this,t),this._attributions={}},onAdd:function(t){return this._container=e.DomUtil.create("div","leaflet-control-attribution"),e.DomEvent.disableClickPropagation(this._container),t.on("layeradd",this._onLayerAdd,this).on("layerremove",this._onLayerRemove,this),this._update(),this._container},onRemove:function(t){t.off("layeradd",this._onLayerAdd).off("layerremove",this._onLayerRemove)},setPrefix:function(t){return this.options.prefix=t,this._update(),this},addAttribution:function(t){return t?(this._attributions[t]||(this._attributions[t]=0),this._attributions[t]++,this._update(),this):s},removeAttribution:function(t){return t?(this._attributions[t]--,this._update(),this):s},_update:function(){if(this._map){var t=[];for(var i in this._attributions)this._attributions.hasOwnProperty(i)&&this._attributions[i]&&t.push(i);var s=[];this.options.prefix&&s.push(this.options.prefix),t.length&&s.push(t.join(", ")),this._container.innerHTML=s.join(" — ")}},_onLayerAdd:function(t){t.layer.getAttribution&&this.addAttribution(t.layer.getAttribution())},_onLayerRemove:function(t){t.layer.getAttribution&&this.removeAttribution(t.layer.getAttribution())}}),e.Map.mergeOptions({attributionControl:!0}),e.Map.addInitHook(function(){this.options.attributionControl&&(this.attributionControl=(new e.Control.Attribution).addTo(this))}),e.control.attribution=function(t){return new e.Control.Attribution(t)},e.Control.Scale=e.Control.extend({options:{position:"bottomleft",maxWidth:100,metric:!0,imperial:!0,updateWhenIdle:!1},onAdd:function(t){this._map=t;var i="leaflet-control-scale",s=e.DomUtil.create("div",i),o=this.options;return this._addScales(o,i,s),t.on(o.updateWhenIdle?"moveend":"move",this._update,this),t.whenReady(this._update,this),s},onRemove:function(t){t.off(this.options.updateWhenIdle?"moveend":"move",this._update,this)},_addScales:function(t,i,s){t.metric&&(this._mScale=e.DomUtil.create("div",i+"-line",s)),t.imperial&&(this._iScale=e.DomUtil.create("div",i+"-line",s))},_update:function(){var t=this._map.getBounds(),i=t.getCenter().lat,s=6378137*Math.PI*Math.cos(i*Math.PI/180),e=s*(t.getNorthEast().lng-t.getSouthWest().lng)/180,o=this._map.getSize(),n=this.options,a=0;o.x>0&&(a=e*(n.maxWidth/o.x)),this._updateScales(n,a)},_updateScales:function(t,i){t.metric&&i&&this._updateMetric(i),t.imperial&&i&&this._updateImperial(i)},_updateMetric:function(t){var i=this._getRoundNum(t);this._mScale.style.width=this._getScaleWidth(i/t)+"px",this._mScale.innerHTML=1e3>i?i+" m":i/1e3+" km"},_updateImperial:function(t){var i,s,e,o=3.2808399*t,n=this._iScale;o>5280?(i=o/5280,s=this._getRoundNum(i),n.style.width=this._getScaleWidth(s/i)+"px",n.innerHTML=s+" mi"):(e=this._getRoundNum(o),n.style.width=this._getScaleWidth(e/o)+"px",n.innerHTML=e+" ft")},_getScaleWidth:function(t){return Math.round(this.options.maxWidth*t)-10},_getRoundNum:function(t){var i=Math.pow(10,(Math.floor(t)+"").length-1),s=t/i;return s=s>=10?10:s>=5?5:s>=3?3:s>=2?2:1,i*s}}),e.control.scale=function(t){return new e.Control.Scale(t)},e.Control.Layers=e.Control.extend({options:{collapsed:!0,position:"topright",autoZIndex:!0},initialize:function(t,i,s){e.setOptions(this,s),this._layers={},this._lastZIndex=0,this._handlingClick=!1;for(var o in t)t.hasOwnProperty(o)&&this._addLayer(t[o],o);for(o in i)i.hasOwnProperty(o)&&this._addLayer(i[o],o,!0)},onAdd:function(t){return this._initLayout(),this._update(),t.on("layeradd",this._onLayerChange,this).on("layerremove",this._onLayerChange,this),this._container},onRemove:function(t){t.off("layeradd",this._onLayerChange).off("layerremove",this._onLayerChange)},addBaseLayer:function(t,i){return this._addLayer(t,i),this._update(),this},addOverlay:function(t,i){return this._addLayer(t,i,!0),this._update(),this},removeLayer:function(t){var i=e.stamp(t);return delete this._layers[i],this._update(),this},_initLayout:function(){var t="leaflet-control-layers",i=this._container=e.DomUtil.create("div",t);e.Browser.touch?e.DomEvent.on(i,"click",e.DomEvent.stopPropagation):(e.DomEvent.disableClickPropagation(i),e.DomEvent.on(i,"mousewheel",e.DomEvent.stopPropagation));var s=this._form=e.DomUtil.create("form",t+"-list");if(this.options.collapsed){e.DomEvent.on(i,"mouseover",this._expand,this).on(i,"mouseout",this._collapse,this);var o=this._layersLink=e.DomUtil.create("a",t+"-toggle",i);o.href="#",o.title="Layers",e.Browser.touch?e.DomEvent.on(o,"click",e.DomEvent.stopPropagation).on(o,"click",e.DomEvent.preventDefault).on(o,"click",this._expand,this):e.DomEvent.on(o,"focus",this._expand,this),this._map.on("movestart",this._collapse,this)}else this._expand();this._baseLayersList=e.DomUtil.create("div",t+"-base",s),this._separator=e.DomUtil.create("div",t+"-separator",s),this._overlaysList=e.DomUtil.create("div",t+"-overlays",s),i.appendChild(s)},_addLayer:function(t,i,s){var o=e.stamp(t);this._layers[o]={layer:t,name:i,overlay:s},this.options.autoZIndex&&t.setZIndex&&(this._lastZIndex++,t.setZIndex(this._lastZIndex))},_update:function(){if(this._container){this._baseLayersList.innerHTML="",this._overlaysList.innerHTML="";var t=!1,i=!1;for(var s in this._layers)if(this._layers.hasOwnProperty(s)){var e=this._layers[s];this._addItem(e),i=i||e.overlay,t=t||!e.overlay}this._separator.style.display=i&&t?"":"none"}},_onLayerChange:function(t){var i=e.stamp(t.layer);this._layers[i]&&!this._handlingClick&&this._update()},_createRadioElement:function(t,s){var e='t;t++)i=o[t],s=this._layers[i.layerId],i.checked&&!this._map.hasLayer(s.layer)?(this._map.addLayer(s.layer),s.overlay||(e=s.layer)):!i.checked&&this._map.hasLayer(s.layer)&&this._map.removeLayer(s.layer);e&&(this._map.setZoom(this._map.getZoom()),this._map.fire("baselayerchange",{layer:e})),this._handlingClick=!1},_expand:function(){e.DomUtil.addClass(this._container,"leaflet-control-layers-expanded")},_collapse:function(){this._container.className=this._container.className.replace(" leaflet-control-layers-expanded","")}}),e.control.layers=function(t,i,s){return new e.Control.Layers(t,i,s)},e.PosAnimation=e.Class.extend({includes:e.Mixin.Events,run:function(t,i,s,o){this.stop(),this._el=t,this._inProgress=!0,this.fire("start"),t.style[e.DomUtil.TRANSITION]="all "+(s||.25)+"s cubic-bezier(0,0,"+(o||.5)+",1)",e.DomEvent.on(t,e.DomUtil.TRANSITION_END,this._onTransitionEnd,this),e.DomUtil.setPosition(t,i),e.Util.falseFn(t.offsetWidth),this._stepTimer=setInterval(e.bind(this.fire,this,"step"),50)},stop:function(){this._inProgress&&(e.DomUtil.setPosition(this._el,this._getPos()),this._onTransitionEnd(),e.Util.falseFn(this._el.offsetWidth))},_transformRe:/(-?[\d\.]+), (-?[\d\.]+)\)/,_getPos:function(){var i,s,o,n=this._el,a=t.getComputedStyle(n);return e.Browser.any3d?(o=a[e.DomUtil.TRANSFORM].match(this._transformRe),i=parseFloat(o[1]),s=parseFloat(o[2])):(i=parseFloat(a.left),s=parseFloat(a.top)),new e.Point(i,s,!0)},_onTransitionEnd:function(){e.DomEvent.off(this._el,e.DomUtil.TRANSITION_END,this._onTransitionEnd,this),this._inProgress&&(this._inProgress=!1,this._el.style[e.DomUtil.TRANSITION]="",clearInterval(this._stepTimer),this.fire("step").fire("end"))}}),e.Map.include({setView:function(t,i,s){i=this._limitZoom(i);var e=this._zoom!==i;if(this._loaded&&!s&&this._layers){this._panAnim&&this._panAnim.stop();var o=e?this._zoomToIfClose&&this._zoomToIfClose(t,i):this._panByIfClose(t);if(o)return clearTimeout(this._sizeTimer),this}return this._resetView(t,i),this},panBy:function(t,i,s){if(t=e.point(t),!t.x&&!t.y)return this;this._panAnim||(this._panAnim=new e.PosAnimation,this._panAnim.on({step:this._onPanTransitionStep,end:this._onPanTransitionEnd},this)),this.fire("movestart"),e.DomUtil.addClass(this._mapPane,"leaflet-pan-anim");var o=e.DomUtil.getPosition(this._mapPane).subtract(t)._round();return this._panAnim.run(this._mapPane,o,i||.25,s),this},_onPanTransitionStep:function(){this.fire("move")},_onPanTransitionEnd:function(){e.DomUtil.removeClass(this._mapPane,"leaflet-pan-anim"),this.fire("moveend")},_panByIfClose:function(t){var i=this._getCenterOffset(t)._floor();return this._offsetIsWithinView(i)?(this.panBy(i),!0):!1},_offsetIsWithinView:function(t,i){var s=i||1,e=this.getSize();return Math.abs(t.x)<=e.x*s&&Math.abs(t.y)<=e.y*s}}),e.PosAnimation=e.DomUtil.TRANSITION?e.PosAnimation:e.PosAnimation.extend({run:function(t,i,s,o){this.stop(),this._el=t,this._inProgress=!0,this._duration=s||.25,this._easeOutPower=1/Math.max(o||.5,.2),this._startPos=e.DomUtil.getPosition(t),this._offset=i.subtract(this._startPos),this._startTime=+new Date,this.fire("start"),this._animate()},stop:function(){this._inProgress&&(this._step(),this._complete())},_animate:function(){this._animId=e.Util.requestAnimFrame(this._animate,this),this._step()},_step:function(){var t=+new Date-this._startTime,i=1e3*this._duration;i>t?this._runFrame(this._easeOut(t/i)):(this._runFrame(1),this._complete())},_runFrame:function(t){var i=this._startPos.add(this._offset.multiplyBy(t));e.DomUtil.setPosition(this._el,i),this.fire("step")},_complete:function(){e.Util.cancelAnimFrame(this._animId),this._inProgress=!1,this.fire("end")},_easeOut:function(t){return 1-Math.pow(1-t,this._easeOutPower)}}),e.Map.mergeOptions({zoomAnimation:e.DomUtil.TRANSITION&&!e.Browser.android23&&!e.Browser.mobileOpera}),e.DomUtil.TRANSITION&&e.Map.addInitHook(function(){e.DomEvent.on(this._mapPane,e.DomUtil.TRANSITION_END,this._catchTransitionEnd,this)}),e.Map.include(e.DomUtil.TRANSITION?{_zoomToIfClose:function(t,i){if(this._animatingZoom)return!0;if(!this.options.zoomAnimation)return!1;var s=this.getZoomScale(i),o=this._getCenterOffset(t)._divideBy(1-1/s);if(!this._offsetIsWithinView(o,1))return!1;e.DomUtil.addClass(this._mapPane,"leaflet-zoom-anim"),this.fire("movestart").fire("zoomstart"),this.fire("zoomanim",{center:t,zoom:i});var n=this._getCenterLayerPoint().add(o);return this._prepareTileBg(),this._runAnimation(t,i,s,n),!0},_catchTransitionEnd:function(){this._animatingZoom&&this._onZoomTransitionEnd()},_runAnimation:function(t,i,s,o,n){this._animateToCenter=t,this._animateToZoom=i,this._animatingZoom=!0,e.Draggable&&(e.Draggable._disabled=!0);var a=e.DomUtil.TRANSFORM,r=this._tileBg;clearTimeout(this._clearTileBgTimer),e.Util.falseFn(r.offsetWidth);var h=e.DomUtil.getScaleString(s,o),l=r.style[a];r.style[a]=n?l+" "+h:h+" "+l},_prepareTileBg:function(){var t=this._tilePane,i=this._tileBg;if(i&&this._getLoadedTilesPercentage(i)>.5&&.5>this._getLoadedTilesPercentage(t))return t.style.visibility="hidden",t.empty=!0,this._stopLoadingImages(t),s;i||(i=this._tileBg=this._createPane("leaflet-tile-pane",this._mapPane),i.style.zIndex=1),i.style[e.DomUtil.TRANSFORM]="",i.style.visibility="hidden",i.empty=!0,t.empty=!1,this._tilePane=this._panes.tilePane=i;var o=this._tileBg=t;e.DomUtil.addClass(o,"leaflet-zoom-animated"),this._stopLoadingImages(o)},_getLoadedTilesPercentage:function(t){var i,s,e=t.getElementsByTagName("img"),o=0;for(i=0,s=e.length;s>i;i++)e[i].complete&&o++;return o/s},_stopLoadingImages:function(t){var i,s,o,n=Array.prototype.slice.call(t.getElementsByTagName("img"));for(i=0,s=n.length;s>i;i++)o=n[i],o.complete||(o.onload=e.Util.falseFn,o.onerror=e.Util.falseFn,o.src=e.Util.emptyImageUrl,o.parentNode.removeChild(o))},_onZoomTransitionEnd:function(){this._restoreTileFront(),e.DomUtil.removeClass(this._mapPane,"leaflet-zoom-anim"),e.Util.falseFn(this._tileBg.offsetWidth),this._animatingZoom=!1,this._resetView(this._animateToCenter,this._animateToZoom,!0,!0),e.Draggable&&(e.Draggable._disabled=!1)},_restoreTileFront:function(){this._tilePane.innerHTML="",this._tilePane.style.visibility="",this._tilePane.style.zIndex=2,this._tileBg.style.zIndex=1},_clearTileBg:function(){this._animatingZoom||this.touchZoom._zooming||(this._tileBg.innerHTML="")}}:{}),e.Map.include({_defaultLocateOptions:{watch:!1,setView:!1,maxZoom:1/0,timeout:1e4,maximumAge:0,enableHighAccuracy:!1},locate:function(t){if(t=this._locationOptions=e.extend(this._defaultLocateOptions,t),!navigator.geolocation)return this._handleGeolocationError({code:0,message:"Geolocation not supported."}),this;var i=e.bind(this._handleGeolocationResponse,this),s=e.bind(this._handleGeolocationError,this);return t.watch?this._locationWatchId=navigator.geolocation.watchPosition(i,s,t):navigator.geolocation.getCurrentPosition(i,s,t),this},stopLocate:function(){return navigator.geolocation&&navigator.geolocation.clearWatch(this._locationWatchId),this},_handleGeolocationError:function(t){var i=t.code,s=t.message||(1===i?"permission denied":2===i?"position unavailable":"timeout");this._locationOptions.setView&&!this._loaded&&this.fitWorld(),this.fire("locationerror",{code:i,message:"Geolocation error: "+s+"."})},_handleGeolocationResponse:function(t){var i=180*t.coords.accuracy/4e7,s=2*i,o=t.coords.latitude,n=t.coords.longitude,a=new e.LatLng(o,n),r=new e.LatLng(o-i,n-s),h=new e.LatLng(o+i,n+s),l=new e.LatLngBounds(r,h),c=this._locationOptions;if(c.setView){var m=Math.min(this.getBoundsZoom(l),c.maxZoom);this.setView(a,m)}this.fire("locationfound",{latlng:a,bounds:l,accuracy:t.coords.accuracy})}})}(this,document),L.Proj={},L.Proj._isProj4Proj=function(t){return t.projName!==void 0},L.Proj.Projection=L.Class.extend({initialize:function(t,i){if(L.Proj._isProj4Proj(t))this._proj=t;else{var s=t;Proj4js.defs[s]=i,this._proj=new Proj4js.Proj(s)}},project:function(t){var i=new L.Point(t.lng,t.lat);return Proj4js.transform(Proj4js.WGS84,this._proj,i)},unproject:function(t,i){var s=Proj4js.transform(this._proj,Proj4js.WGS84,t.clone());return new L.LatLng(s.y,s.x,i)}}),L.Proj.CRS=L.Class.extend({includes:L.CRS,options:{transformation:new L.Transformation(1,0,-1,0)},initialize:function(t,i,s){var e,o,n,a;L.Proj._isProj4Proj(t)?(o=t,e=o.srsCode,a=i||{},this.projection=new L.Proj.Projection(o)):(e=t,n=i,a=s||{},this.projection=new L.Proj.Projection(e,n)),L.Util.setOptions(this,a),this.code=e,this.transformation=this.options.transformation,this.options.origin&&(this.transformation=new L.Transformation(1,-this.options.origin[0],-1,this.options.origin[1])),this.options.scales?this.scale=function(t){return this.options.scales[t]}:this.options.resolutions&&(this.scale=function(t){return 1/this.options.resolutions[t]})}}),L.Proj.CRS.TMS=L.Proj.CRS.extend({initialize:function(t,i,s,e){if(L.Proj._isProj4Proj(t)){var o=t,n=i,a=s||{};a.origin=[n[0],n[3]],L.Proj.CRS.prototype.initialize(o,a)}else{var r=t,h=i,n=s,a=e||{};a.origin=[n[0],n[3]],L.Proj.CRS.prototype.initialize(r,h,a)}this.projectedBounds=n}}),L.Proj.TileLayer={},L.Proj.TileLayer.TMS=L.TileLayer.extend({options:{tms:!0,continuousWorld:!0},initialize:function(t,i,s){if(!(i instanceof L.Proj.CRS.TMS))throw Error("CRS is not L.Proj.CRS.TMS.");L.TileLayer.prototype.initialize.call(this,t,s),this.crs=i;for(var e=this.options.minZoom;this.options.maxZoom>e;e++){var o=(this.crs.projectedBounds[3]-this.crs.projectedBounds[1])/this._projectedTileSize(e);if(Math.abs(o-Math.round(o))>.001)throw Error("Projected bounds does not match grid at zoom "+e)}},getTileUrl:function(t){var i=Math.round((this.crs.projectedBounds[3]-this.crs.projectedBounds[1])/this._projectedTileSize(this._map.getZoom()));return L.Util.template(this._url,L.Util.extend({s:this._getSubdomain(t),z:this._getZoomForUrl(),x:t.x,y:i-t.y-1},this.options))},_projectedTileSize:function(t){return this.options.tileSize/this.crs.scale(t)}}),"undefined"!=typeof module&&(module.exports=L.Proj),"undefined"!=typeof L&&L.CRS!==void 0&&(L.CRS.proj4js=function(){return function(t,i,s,e){return e=e||{},s&&(e.transformation=s),new L.Proj.CRS(t,i,e)}}()),L.Control.MousePosition=L.Control.extend({options:{position:"bottomleft",separator:" : ",emptyString:"Unavailable",lngFirst:!1,numDigits:5,lngFormatter:void 0,latFormatter:void 0},onAdd:function(t){return this._container=L.DomUtil.create("div","leaflet-control-mouseposition"),L.DomEvent.disableClickPropagation(this._container),t.on("mousemove",this._onMouseMove,this),this._container.innerHTML=this.options.emptyString,this._container},onRemove:function(t){t.off("mousemove",this._onMouseMove)},_onMouseMove:function(t){var i=L.Util.formatNum(t.latlng.lng,this.options.numDigits),s=L.Util.formatNum(t.latlng.lat,this.options.numDigits);this.options.lngFormatter&&(i=this.options.lngFormatter(i)),this.options.latFormatter&&(s=this.options.latFormatter(s));var e=this.options.lngFirst?i+this.options.separator+s:s+this.options.separator+i;this._container.innerHTML=e}}),L.Map.mergeOptions({positionControl:!1}),L.Map.addInitHook(function(){this.options.positionControl&&(this.positionControl=new L.Control.MousePosition,this.addControl(this.positionControl))}),L.control.mousePosition=function(t){return new L.Control.MousePosition(t)},function(t,i){L.KSP={},L.KSP.version="0.2.1",L.KSP.CRS={},L.KSP.CRS.EPSG4326=new L.Proj.CRS.TMS(new Proj4js.Proj("EPSG:4326"),[-180,-90,180,90],{resolutions:[.703125,.3515625,.17578125,.087890625,.0439453125,.02197265625]}),L.KSP.CelestialBody=L.Class.extend({initialize:function(t){if(!t.hasOwnProperty("id"))throw Error("must specify id");if(!t.hasOwnProperty("name"))throw Error("must specify name");if(t.hasOwnProperty("crs")){if(!(t.crs instanceof L.Proj.CRS.TMS))throw Error("crs is not an instance of L.Proj.CRS.TMS")}else this.crs=L.KSP.CRS.EPSG4326;t.hasOwnProperty("radius")||(this.radius=1),t.hasOwnProperty("thumbnail")||(this.thumbnail="body-unknown.png"),t.hasOwnProperty("baseLayers")||(this.baseLayers={}),L.Util.extend(this,t)},addTo:function(t){var i,s=t._body;if(t._body=this,t.fire("bodychangestart",{body:this,oldBody:s}),s){for(i in s.baseLayers)s.baseLayers.hasOwnProperty(i)&&t.removeLayer(s.baseLayers[i]);for(i in s.overlays)s.overlays.hasOwnProperty(i)&&t.removeLayer(s.overlays[i])}var e=this.defaultLayer||this.baseLayers.Satellite;if(e){for(i in this.baseLayers)if(this.baseLayers.hasOwnProperty(i)&&this.baseLayers[i]._type===t._baseLayerType){e=this.baseLayers[i];break}t.addLayer(e),t.fire("baselayerchange",{layer:e})}for(i in this.overlays)this.overlays.hasOwnProperty(i)&&t._overlayTypes.indexOf(this.overlays[i]._type)>=0&&(t.addLayer(this.overlays[i]),t.fire("layeradd",{layer:this.overlays[i]}));t.fire("bodychangeend",{body:this,oldBody:s})},onAdd:function(t){this.addTo(t)},removeFrom:function(t){L.KSP.CelestialBody.DUMMY.addTo(t)},onRemove:function(t){this.removeFrom(t)}}),L.KSP.celestialBody=function(t){return new L.KSP.CelestialBody(t)},L.KSP.CelestialBody.DUMMY=L.KSP.celestialBody({id:"",name:"",crs:L.KSP.CRS.EPSG4326}),L.KSP.CelestialBody.ALL_PLANETARY=[L.KSP.CelestialBody.DUMMY],L.KSP.Map=L.Map.extend({options:{crs:L.KSP.CRS.EPSG4326,continuousWorld:!0},initialize:function(t,i){this._baseLayerType=-1,this._overlayTypes=[],L.Util.setOptions(this,i),this.startTrackingLayerState(),this.on("bodychangestart",this._onBodyChangeStart).on("bodychangeend",this._onBodyChangeEnd),L.Map.prototype.initialize.call(this,t,this.options)},clampZoom:function(){var t=this.getZoom(),i=this.getMinZoom(),s=this.getMaxZoom();i>t?this.setZoom(i):t>s?this.setZoom(s):this.fire("zoomend",this)},_onBodyChangeStart:function(){this.stopTrackingLayerState()},_onBodyChangeEnd:function(){this.clampZoom(),this.startTrackingLayerState()},_onLayerStateChange:function(t){if("layeradd"===t.type)t.layer instanceof L.KSP.TileLayer?this._baseLayerType=t.layer._type:t.layer instanceof L.KSP.LayerGroup&&0>this._overlayTypes.indexOf(t.layer._type)&&this._overlayTypes.push(t.layer._type);else if(t.layer instanceof L.KSP.LayerGroup){var i,s,e=t.layer._type,o=this._overlayTypes;for(i=o.length-1;i>=0;i--)s=o[i],s===e&&o.splice(i,1)}},startTrackingLayerState:function(){this.on("layeradd",this._onLayerStateChange).on("layerremove",this._onLayerStateChange)},stopTrackingLayerState:function(){this.off("layeradd",this._onLayerStateChange).off("layerremove",this._onLayerStateChange)}}),L.KSP.map=function(t,i){return new L.KSP.Map(t,i)},L.KSP.TileLayer=L.Proj.TileLayer.TMS.extend({statics:{TYPE_SATELLITE:0,TYPE_COLORRELIEF:1,TYPE_SLOPE:2,DEFAULT_URL:"http://tiles.kerbalmaps.com/{body}/{style}/{z}/{x}/{y}.png"},options:{continuousWorld:!1,noWrap:!1,minZoom:0,maxZoom:5,attribution:"Map data © Joel Pedraza"},initialize:function(t,i,s,e){L.Util.setOptions(this,e),this._type=t,L.Proj.TileLayer.TMS.prototype.initialize.call(this,i,s,this.options)}}),L.KSP.tileLayer=function(t,i,s,e){return new L.KSP.TileLayer(t,i,s,e)},L.KSP.LayerGroup=L.LayerGroup.extend({statics:{TYPE_SPACECENTER:0,TYPE_ANOMALY:1},initialize:function(t,i){this._type=t,L.LayerGroup.prototype.initialize.call(this,i)}}),L.KSP.layerGroup=function(t,i){return new L.KSP.LayerGroup(t,i)},L.KSP.Icon={},L.KSP.Icon.SPACECENTER=new L.Icon({iconUrl:"../assets/images/markers-spacecenter.png",shadowUrl:"../assets/images/markers-shadow.png",iconSize:[30,40],shadowSize:[35,16],iconAnchor:[15,40],shadowAnchor:[10,12],popupAnchor:[0,-35]}),L.KSP.Icon.ANOMALY=new L.Icon({iconUrl:"../assets/images/markers-anomaly.png",shadowUrl:"../assets/images/markers-shadow.png",iconSize:[30,40],shadowSize:[35,16],iconAnchor:[15,40],shadowAnchor:[10,12],popupAnchor:[0,-35]}),L.KSP.Legend={},L.KSP.Legend.SLOPE={"≥ 60°":"#E19678","< 60°":"#C86464","< 30°":"#965A64","< 15°":"#645064","< 5°":"#325064","0°":"#32465A"},L.KSP.Control=L.KSP.control={},L.KSP.Control.Legend=L.Control.extend({options:{position:"bottomright"},onAdd:function(t){return this._container=L.DomUtil.create("div","leaflet-control-legend"),t.on("baselayerchange",this._onLayerChange,this),this._container},_update:function(t){if(this._container.innerHTML="",t){for(var i in t)t.hasOwnProperty(i)&&(this._container.innerHTML+=''+i+"
    ");L.DomUtil.addClass(this._container,"leaflet-control-legend-visible")}else this._container.className=this._container.className.replace(" leaflet-control-legend-visible","")},_onLayerChange:function(t){this._update(t.layer.options.legend)}}),L.Map.mergeOptions({legendControl:!0}),L.Map.addInitHook(function(){this.options.bodyControl&&(this.legendControl=new L.KSP.Control.Legend,this.addControl(this.legendControl))}),L.control.legend=function(t){return new L.KSP.Control.Legend(t)},L.KSP.Control.Scale=L.Control.Scale.extend({options:{imperial:!1},onAdd:function(t){this._radius=0,t._body&&(this._radius=t._body.radius);var i=L.Control.Scale.prototype.onAdd.call(this,t);return t.on("bodychangeend",this._onBodyChangeEnd,this),i},onRemove:function(t){L.Control.Scale.prototype.onRemove.call(this,t),t.off("bodychangeend",this._onBodyChangeEnd)},_onBodyChangeEnd:function(t){this._radius=t.body.radius,this._update()},_update:function(){var t=this._map.getBounds(),i=t.getCenter().lat,s=this._radius*Math.PI*Math.cos(i*Math.PI/180),e=s*(t.getNorthEast().lng-t.getSouthWest().lng)/180,o=this._map.getSize(),n=this.options,a=0;o.x>0&&(a=e*(n.maxWidth/o.x)),this._updateScales(n,a)}}),L.KSP.Map.mergeOptions({scaleControl:!1}),L.KSP.Map.addInitHook(function(){this.options.scaleControl&&(this.scaleControl=new L.KSP.Control.Scale,this.addControl(this.scaleControl))}),L.KSP.control.scale=function(t){return new L.KSP.Control.Scale(t)},L.KSP.Control.CelestialBody=L.Control.extend({options:{position:"topright",collapsed:!0},initialize:function(t,i){L.Util.setOptions(this,i),this._bodies=t,this._timeInMillis=(new Date).valueOf(),this._weekInMillis=6048e5},onAdd:function(){return this._initLayout(),this._update(),this._map.on("bodychangeend",this._update,this),this._container},_initLayout:function(){var t="leaflet-control-celestialbodies",s=this._container=L.DomUtil.create("div",t),e=this._bodies;if(this.options.collapsed){L.DomEvent.on(s,"mouseover",this._expand,this).on(s,"mouseout",this._collapse,this);var o=this._bodiesLink=L.DomUtil.create("a",t+"-toggle",s);o.href="#",o.title="Celestial Bodies",L.DomEvent.on(o,"focus",this._expand,this),this._map.on("movestart",this._collapse,this)}var n=this._list=L.DomUtil.create("ul",t+"-list",s);for(var a in e)if(e.hasOwnProperty(a)){var r=this._addBody(e[a],n);if(e[a].children){var h=i.createElement("ul");for(var l in e[a].children)e[a].children.hasOwnProperty(l)&&this._addBody(e[a].children[l],h);r.appendChild(h)}}},_update:function(){this._map._body&&(this._bodiesLink.style.backgroundImage='url("'+this._map._body.thumbnail+'")')},_addBody:function(t,s){var e,o=i.createElement("li"),n=i.createElement("img");if(n.src=t.thumbnail,n.alt=o.title=t.name,t.addedOn){this._timeInMillis-t.addedOnKerbal Space Center
    -0.0969 : -74.6004"),L.marker([20.5829,-146.5116],{icon:L.KSP.Icon.SPACECENTER}).bindPopup("Kerbal Space Center 2
    20.5829 : -146.5116"),L.marker([-1.5409,-71.9099],{icon:L.KSP.Icon.SPACECENTER}).bindPopup("Island Airfield
    -1.5409 : -71.9099")]),Anomalies:L.KSP.layerGroup(L.KSP.LayerGroup.TYPE_ANOMALY,[L.marker([.1023,-74.5684],{icon:L.KSP.Icon.ANOMALY}).bindPopup("0.1023 : -74.5684"),L.marker([20.6709,-146.4968],{icon:L.KSP.Icon.ANOMALY}).bindPopup("20.6709 : -146.4968"),L.marker([35.5705,-74.9773],{icon:L.KSP.Icon.ANOMALY}).bindPopup("35.5705 : -74.9773"),L.marker([-.6402,-80.7668],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-0.6402 : -80.7668"),L.marker([-28.8083,-13.4401],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-28.8083 : -13.4401"),L.marker([-6.5057,-141.6856],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-6.5057 : -141.6856"),L.marker([81.9551,-128.518],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-81.9551 : -128.518")])}}),L.KSP.CelestialBody.MUN=L.KSP.celestialBody({id:"mun",name:"Mun",crs:L.KSP.CRS.EPSG4326,radius:2e5,addedOn:13682304e5,lastUpdated:1368144e6,thumbnail:"body-mun.png",baseLayers:{Satellite:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SATELLITE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{body:"mun",style:"sat"}),"Color Relief":L.KSP.tileLayer(L.KSP.TileLayer.TYPE_COLORRELIEF,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{body:"mun",style:"color",legend:{"3150 m":"#EBEBEB","-180 m":"#232323"}}),Slope:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SLOPE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{body:"mun",style:"slope",legend:L.KSP.Legend.SLOPE})},overlays:{Anomalies:L.KSP.layerGroup(L.KSP.LayerGroup.TYPE_ANOMALY,[L.marker([-9.8314,25.9177],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-9.8314 : 25.9177"),L.marker([-82.2063,102.9305],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-82.2063 : 102.9305"),L.marker([57.6604,9.1422],{icon:L.KSP.Icon.ANOMALY}).bindPopup("57.6604 : 9.1422"),L.marker([2.4695,81.5133],{icon:L.KSP.Icon.ANOMALY}).bindPopup("2.4695 : 81.5133"),L.marker([12.4432,39.178],{icon:L.KSP.Icon.ANOMALY}).bindPopup("12.4432 : 39.1780"),L.marker([-12.4431,-140.822],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-12.4431 : -140.8220"),L.marker([.7027,22.747],{icon:L.KSP.Icon.ANOMALY}).bindPopup("0.7027 : 22.7470"),L.marker([-70.9556,-68.1378],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-70.9556,-68.1378")])}}),L.KSP.CelestialBody.MINMUS=L.KSP.celestialBody({id:"minmus",name:"Minmus",crs:L.KSP.CRS.EPSG4326,radius:6e4,addedOn:13682304e5,lastUpdated:13682304e5,thumbnail:"body-minmus.png",baseLayers:{Satellite:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SATELLITE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"sat",body:"minmus"}),"Color Relief":L.KSP.tileLayer(L.KSP.TileLayer.TYPE_COLORRELIEF,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"color",body:"minmus",legend:{"5750 m":"#414B41","2500 m":"#BEE6C3","1 m":"#96CDB4","0 m":"#87B9A5"}}),Slope:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SLOPE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"slope",body:"minmus",legend:L.KSP.Legend.SLOPE})},overlays:{Anomalies:L.KSP.layerGroup(L.KSP.LayerGroup.TYPE_ANOMALY,[L.marker([23.7768,60.0462],{icon:L.KSP.Icon.ANOMALY}).bindPopup("23.7768 : 60.0462")])}}),L.KSP.CelestialBody.DUNA=L.KSP.celestialBody({id:"duna",name:"Duna",crs:L.KSP.CRS.EPSG4326,radius:32e4,addedOn:13688352e5,lastUpdated:13688352e5,thumbnail:"body-duna.png",baseLayers:{Satellite:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SATELLITE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"sat",body:"duna"}),"Color Relief":L.KSP.tileLayer(L.KSP.TileLayer.TYPE_COLORRELIEF,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"color",body:"duna",legend:{"4800 m":"#C3A082","4000 m":"#966446","3000 m":"#733219","2000 m":"#501E14","1000 m":"#3C140F","0 m":"#280F0A"}}),Slope:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SLOPE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"slope",body:"duna",legend:L.KSP.Legend.SLOPE})},overlays:{Anomalies:L.KSP.layerGroup(L.KSP.LayerGroup.TYPE_ANOMALY,[L.marker([17.0483,-85.4717],{icon:L.KSP.Icon.ANOMALY}).bindPopup("17.0483 : -85.4717"),L.marker([-30.3525,-28.6828],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-30.3525 : -28.6828"),L.marker([-66.1344,-160.7432],{icon:L.KSP.Icon.ANOMALY}).bindPopup("-66.1344 : -160.7432")])}}),L.KSP.CelestialBody.IKE=L.KSP.celestialBody({id:"ike",name:"Ike",crs:L.KSP.CRS.EPSG4326,radius:13e4,addedOn:13688352e5,lastUpdated:13688352e5,thumbnail:"body-ike.png",baseLayers:{Satellite:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SATELLITE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"sat",body:"ike"}),"Color Relief":L.KSP.tileLayer(L.KSP.TileLayer.TYPE_COLORRELIEF,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"color",body:"ike",legend:{"13000 m":"#828282","11000 m":"#6E6E6E","9000 m":"#5A5A5A","7000 m":"#464646","5000 m":"#323232","2500 m":"#191919","70 m":"#070707"}}),Slope:L.KSP.tileLayer(L.KSP.TileLayer.TYPE_SLOPE,L.KSP.TileLayer.DEFAULT_URL,L.KSP.CRS.EPSG4326,{style:"slope",body:"ike",legend:L.KSP.Legend.SLOPE})},overlays:{}}),L.KSP.CelestialBody.DRES=L.KSP.celestialBody({id:"dres",name:"Dres",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-dres.png"}),L.KSP.CelestialBody.JOOL=L.KSP.celestialBody({id:"jool",name:"Jool",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-jool.png"}),L.KSP.CelestialBody.LAYTHE=L.KSP.celestialBody({id:"laythe",name:"Laythe",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-laythe.png"}),L.KSP.CelestialBody.VALL=L.KSP.celestialBody({id:"vall",name:"Vall",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-vall.png"}),L.KSP.CelestialBody.TYLO=L.KSP.celestialBody({id:"tylo",name:"Tylo",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-tylo.png"}),L.KSP.CelestialBody.BOP=L.KSP.celestialBody({id:"bop",name:"Bop",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-bop.png"}),L.KSP.CelestialBody.POL=L.KSP.celestialBody({id:"pol",name:"Pol",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-pol.png"}),L.KSP.CelestialBody.EELOO=L.KSP.celestialBody({id:"eeloo",name:"Eeloo",crs:L.KSP.CRS.EPSG4326,thumbnail:"body-eeloo.png"}),L.KSP.CelestialBody.KERBIN.defaultLayer=L.KSP.CelestialBody.KERBIN.baseLayers.Satellite,L.KSP.CelestialBody.MUN.defaultLayer=L.KSP.CelestialBody.MUN.baseLayers.Satellite,L.KSP.CelestialBody.MINMUS.defaultLayer=L.KSP.CelestialBody.MINMUS.baseLayers.Satellite,L.KSP.CelestialBody.EVE.children=[L.KSP.CelestialBody.GILLY],L.KSP.CelestialBody.KERBIN.children=[L.KSP.CelestialBody.MUN,L.KSP.CelestialBody.MINMUS],L.KSP.CelestialBody.DUNA.children=[L.KSP.CelestialBody.IKE],L.KSP.CelestialBody.JOOL.children=[L.KSP.CelestialBody.LAYTHE,L.KSP.CelestialBody.VALL,L.KSP.CelestialBody.TYLO,L.KSP.CelestialBody.BOP,L.KSP.CelestialBody.POL],L.KSP.CelestialBody.GILLY.parent=L.KSP.CelestialBody.EVE,L.KSP.CelestialBody.MUN.parent=L.KSP.CelestialBody.MINMUS.parent=L.KSP.CelestialBody.KERBIN,L.KSP.CelestialBody.IKE.parent=L.KSP.CelestialBody.DUNA,L.KSP.CelestialBody.LAYTHE.parent=L.KSP.CelestialBody.VALL.parent=L.KSP.CelestialBody.TYLO.parent=L.KSP.CelestialBody.BOP.parent=L.KSP.CelestialBody.POL.parent=L.KSP.CelestialBody.JOOL,L.KSP.CelestialBody.ALL_PLANETARY=[L.KSP.CelestialBody.MOHO,L.KSP.CelestialBody.EVE,L.KSP.CelestialBody.KERBIN,L.KSP.CelestialBody.DUNA,L.KSP.CelestialBody.DRES,L.KSP.CelestialBody.JOOL,L.KSP.CelestialBody.EELOO],L.KSP.Map.addInitHook(function(){this.options.layers=[L.KSP.CelestialBody.KERBIN]})}(this,document); +var Settings = Class.create({ + initialize: function(defaultHost, defaultPort){ + if(!this.getHost()){ this.setHost(defaultHost)} + if(!this.getPort()){ this.setPort(defaultPort)} + }, + + getHost: function(){ + return this.get('host') + }, + + getPort: function(){ + return this.get('port') + }, + + setHost: function(value){ + return this.set('host', value) + }, + + setPort: function(value){ + return this.set('port', value) + }, + + get: function(property){ + return localStorage.getItem(property) + }, + + set: function(property, value){ + return localStorage.setItem(property, value) + } +}) +var Telemachus = Class.create({ + initialize: function(host, port){ + this.updateConnection(host, port) + this.receiverFunctions = [] + this.subscribedFields = {} + this.orbitingBodies = this.getOrbitalBodies() + this.rate = 500 + + this.loopTimeout = setTimeout(this.poll.bind(this), this.rate) + }, + + url: function(){ + return "http://" + this.host + ":" + this.port + "/telemachus/datalink" + }, + + updateConnection: function(host, port){ + this.host = host + this.port = port + }, + + addReceiverFunction: function(func){ + this.receiverFunctions.push(func) + }, + + subscribeToData: function(fields){ + for (var i = fields.length - 1; i >= 0; i--) { + var field = fields[i] + this.subscribedFields[field] = field + }; + }, + + dispatchMessages: function(data){ + for (var i = this.receiverFunctions.length - 1; i >= 0; i--) { + try{ + this.receiverFunctions[i](data) + } catch(e){ + console.error(e) + } + }; + }, + + send: function(message){ + this.socket.send(JSON.stringify(message)) + }, + + getOrbitalBodyInfo: function(name){ + var properties = this.orbitingBodies[name] + + if(properties){ + return Object.extend({name: name}, properties) + } else{ + return null + } + }, + + notifyIfLOS: function(request){ + if(request.transport.status == 0){ + document.fire('telemachus:loss-of-signal') + return true + } + return false + }, + + prepareParams: function(params){ + var normalizedParams = [] + Object.keys(params).forEach(function(field){ + var sanitizedFieldName = field.replace("[", "{").replace("]","}") + normalizedParams.push(sanitizedFieldName + "=" + field) + }) + return normalizedParams + }, + + convertData: function(rawData){ + var data = {} + var startBracesRegexp = /\{/g + var endBracesRegexp = /\}/g + + Object.keys(rawData).forEach(function(key){ + var convertedFieldName = key.replace(startBracesRegexp, "[").replace(endBracesRegexp, "]") + data[convertedFieldName] = rawData[key] + }) + + return data + }, + + poll: function(){ + var params = this.prepareParams(this.subscribedFields) + var requestURL = this.url() + "?" + params.join("&") + + new Ajax.Request(requestURL, { + method: "get", + onSuccess: function(response){ + var rawData = JSON.parse(response.responseText) + var data = this.convertData(rawData) + + this.dispatchMessages(data) + }.bind(this), + onException: this.notifyIfLOS.bind(this), + onComplete: function(response){ + setTimeout(this.poll.bind(this),this.rate); + }.bind(this) + }) + }, + + sendMessage: function(params, callback){ + new Ajax.Request(this.url(), { + method: "post", + postBody: JSON.stringify(params), + // parameters: params, + onSuccess: function(response){ + var rawData = JSON.parse(response.responseText) + var data = this.convertData(rawData) + callback(data) + }.bind(this), + onException: this.notifyIfLOS.bind(this) + }) + }, + + cameraURL: function(){ + return "http://" + this.host + ":" + this.port + "/telemachus/cameras" + }, + + getCameraList: function(callback){ + new Ajax.Request(this.cameraURL(), { + method: "get", + // parameters: params, + onSuccess: function(response){ + var data = JSON.parse(response.responseText) + callback(data) + }.bind(this), + onException: this.notifyIfLOS.bind(this) + }) + }, + + getOrbitalBodies: function(){ + return { + "Sun" : { + id: 0, + referenceBodyName: null, + mapBody: null, + atmosphericRadius: 0, + color: '#FFFF00', + surfaceGravity: 17.1 //m/s^2, + }, + "Kerbin" : { + id: 1, + referenceBodyName: "Sun", + mapBody: L.KSP.CelestialBody.KERBIN, + atmosphericRadius: 70000, + color: '#4a5472', + surfaceGravity: 9.81 //m/s^2 + }, + "Mun" : { + id: 2, + referenceBodyName: "Kerbin", + mapBody: L.KSP.CelestialBody.MUN, + atmosphericRadius: 0, + color: '#e2e0d7', + surfaceGravity: 1.63 //m/s^2 + }, + "Minmus" : { + id: 3, + referenceBodyName: "Kerbin", + mapBody: L.KSP.CelestialBody.MINMUS, + color: '#98f2c5', + atmosphericRadius: 0, + surfaceGravity: 0.491 //m/s^2 + }, + "Moho" : { + id: 4, + referenceBodyName: "Sun", + mapBody: L.KSP.CelestialBody.MOHO, + atmosphericRadius: 0, + color: '#fdc39e', + surfaceGravity: 2.70 //m/s^2 + }, + "Eve" : { + id: 5, + referenceBodyName: "Sun", + mapBody: L.KSP.CelestialBody.EVE, + atmosphericRadius: 90000, + color: '#c394fe', + surfaceGravity: 16.7 //m/s^2 + }, + "Duna" : { + id: 6, + referenceBodyName: "Sun", + mapBody: L.KSP.CelestialBody.DUNA, + atmosphericRadius: 50000, + color: '#fc5e49', + surfaceGravity: 2.94 //m/s^2 + }, + "Ike" : { + id: 7, + referenceBodyName: "Duna", + mapBody: L.KSP.CelestialBody.IKE, + atmosphericRadius: 0, + color: '#e2e0d7', + surfaceGravity: 1.10 //m/s^2 + }, + "Jool" : { + id: 8, + referenceBodyName: "Sun", + mapBody: L.KSP.CelestialBody.JOOL, + atmosphericRadius: 200000, + color: '#C5DCAB', + surfaceGravity: 7.85 //m/s^2 + }, + "Laythe" : { + id: 9, + referenceBodyName: "Jool", + mapBody: L.KSP.CelestialBody.LAYTHE, + atmosphericRadius: 50000, + color: '#a8b4fe', + surfaceGravity: 7.85 //m/s^2 + }, + "Vall" : { + id: 10, + referenceBodyName: "Jool", + mapBody: L.KSP.CelestialBody.VALL, + atmosphericRadius: 0, + color: '#b0f4fe', + surfaceGravity: 2.31 //m/s^2 + }, + "Bop" : { + id: 11, + referenceBodyName: "Jool", + mapBody: L.KSP.CelestialBody.BOP, + atmosphericRadius: 0, + color: '#c64605', + surfaceGravity: 0.589 //m/s^2 + }, + "Tylo" : { + id: 12, + referenceBodyName: "Jool", + mapBody: L.KSP.CelestialBody.TYLO, + atmosphericRadius: 0, + color: '#fdf7ed', + surfaceGravity: 7.85 //m/s^2 + }, + "Gilly" : { + id: 13, + referenceBodyName: "Eve", + mapBody: L.KSP.CelestialBody.GILLY, + atmosphericRadius: 0, + color: '#fdcbb1', + surfaceGravity: 0.049 //m/s^2 + }, + "Pol" : { + id: 14, + referenceBodyName: "Pol", + mapBody: L.KSP.CelestialBody.POL, + atmosphericRadius: 0, + color: '#fec681', + surfaceGravity: 0.373 //m/s^2 + }, + "Dres" : { + id: 15, + referenceBodyName: "Sun", + mapBody: L.KSP.CelestialBody.DRES, + atmosphericRadius: 0, + color: '#fef8f9', + surfaceGravity: 1.13 //m/s^2 + }, + "Eeloo" : { + id: 16, + referenceBodyName: "Sun", + mapBody: L.KSP.CelestialBody.EELOO, + atmosphericRadius: 0, + color: '#e5fafe', + surfaceGravity: 1.69 //m/s^2 + } + } + } +}) +var TitleBar = Class.create({ + initialize: function(datalink, title_bar_id){ + this.datalink = datalink + this.title_bar_id = title_bar_id + this.title_bar = $(this.title_bar_id) + this.initializeLOSNotifier() + this.initializeDatalink() + }, + + update: function(data){ + window.requestAnimationFrame(function(){ + this.title_bar.down("#world-clock").update(TimeFormatters.formatUT(data["t.universalTime"])) + this.title_bar.down("#mission-time").update(TimeFormatters.formatMET(data["v.missionTime"])) + + this.title_bar.down("#mission-time").removeClassName("loss-of-signal") + }.bind(this)) + }, + + initializeLOSNotifier:function(){ + document.observe('telemachus:loss-of-signal', function(){ + window.requestAnimationFrame(function(){ + this.title_bar.down("#mission-time").update("⚠ LOS ⚠") + this.title_bar.down("#mission-time").addClassName("loss-of-signal") + }.bind(this)) + }.bind(this)) + }, + + initializeDatalink: function(){ + this.datalink.subscribeToData([ + 't.timeWarp', 't.universalTime', 'v.missionTime' + ]) + + this.datalink.addReceiverFunction(this.update.bind(this)) + }, +}) +var ButtonIndicator = Class.create({ + initialize: function(datalink, indicatorId, apiButtonString){ + this.datalink = datalink + this.indicatorId = indicatorId + this.indicator = $(this.indicatorId) + this.apiButtonString = apiButtonString + this.initializeDatalink() + }, + + update: function(data){ + if(data[this.apiButtonString] == true){ + this.indicator.addClassName("on") + } else{ + this.indicator.removeClassName("on") + } + }, + + initializeDatalink: function(){ + this.datalink.subscribeToData([this.apiButtonString]) + + this.datalink.addReceiverFunction(this.update.bind(this)) + }, +}) +var ReadoutTable = Class.create({ + initialize: function(datalink, tableId, dataRows){ + this.datalink = datalink + this.tableId = tableId + this.table = $(this.tableId) + this.dataRows = dataRows + this.initializeDatalink() + }, + + update: function(data){ + window.requestAnimationFrame(function(){ + this.dataRows.forEach(function(row){ + var rowId = row.label + var tableRow = this.table.down("tr[data-label='"+ rowId +"']") + + if(!tableRow){ + var tableRow = new Element("tr", { + "data-label" : rowId + }) + + tableRow.insert("" + row.label + "") + this.table.insert(tableRow) + } + + tableRow.down("td").update(row.formatter(data[row.value])) + }.bind(this)) + }.bind(this)) + }, + + initializeDatalink: function(){ + var dataValues = this.dataRows.map(function(dataRow){ + return dataRow.value + }) + + this.datalink.subscribeToData(dataValues) + + this.datalink.addReceiverFunction(this.update.bind(this)) + }, +}) +var ResourceMonitor = Class.create({ + initialize: function(datalink, resourceName, options){ + this.datalink = datalink + this.resourceName = resourceName + this.options = Object.extend({ + currentStageProgressBar: null, + totalProgressBar: null, + valuePrefix: null + }, options) + + this.resourceStrings = this.buildResourceStrings() + + this.initializeDatalink() + }, + + update: function(data){ + window.requestAnimationFrame(function(){ + if(this.options.totalProgressBar){ + this.options.totalProgressBar.value = data[this.resourceStrings.totalAvailable] + this.options.totalProgressBar.max = data[this.resourceStrings.totalMax] + } + + if(this.options.currentStageProgressBar){ + this.options.currentStageProgressBar.value = data[this.resourceStrings.currentStageAvailable] + this.options.currentStageProgressBar.max = data[this.resourceStrings.currentStageMax] + } + + this.updateValue("-total-value", data[this.resourceStrings.totalAvailable]) + this.updateValue("-total-max", data[this.resourceStrings.totalMax]) + + this.updateValue("-current-stage-value", data[this.resourceStrings.currentStageAvailable]) + this.updateValue("-current-stage-max", data[this.resourceStrings.currentStageMax]) + }.bind(this)) + }, + + updateValue: function(id, value){ + if($(this.options.valuePrefix + id)){ + if(value < 0){ + $(this.options.valuePrefix + id).update("NA") + } else{ + $(this.options.valuePrefix + id).update(value.toFixed(2)) + } + } + }, + + buildResourceStrings: function(){ + return { + totalAvailable: "r.resource["+ this.resourceName +"]", + totalMax: "r.resourceMax["+ this.resourceName +"]", + currentStageAvailable: "r.resourceCurrent["+ this.resourceName +"]", + currentStageMax: "r.resourceCurrentMax["+ this.resourceName +"]", + } + }, + + initializeDatalink: function(){ + this.datalink.subscribeToData([ + this.resourceStrings.totalAvailable, + this.resourceStrings.totalMax, + this.resourceStrings.currentStageAvailable, + this.resourceStrings.currentStageMax + ]) + + this.datalink.addReceiverFunction(this.update.bind(this)) + }, +}) +var DataTable = Class.create({ + initialize: function(tableID, dataRows){ + this.tableID = tableID + this.table = $(this.tableID) + this.dataRows = dataRows + }, + + update: function(){ + window.requestAnimationFrame(function(){ + this.dataRows.forEach(function(row){ + var rowId = row.label + var tableRow = this.table.down("tr[data-label='"+ rowId +"']") + + if(!tableRow){ + var tableRow = new Element("tr", { + "data-label" : rowId + }) + + tableRow.insert("" + row.label + "") + this.table.insert(tableRow) + } + + tableRow.down("td").update(row.value) + }.bind(this)) + }.bind(this)) + }, + + clear: function(){ + window.requestAnimationFrame(function(){ + this.dataRows = [] + this.table.innerHTML = "" + }.bind(this)) + } +}) +var AtmosphericDensityGauge = Class.create({ + initialize: function(datalink, gaugeID){ + this.datalink = datalink + this.gaugeID = gaugeID + this.gauge = $(this.gaugeID) + this.initializeDatalink() + this.func = function(x){return Math.log(2.0 * x)} + }, + + update: function(data){ + var max = this.func(100) + var value = this.func(data['v.atmosphericPressure'] * 100) + if(!isFinite(value)){ value = 0 } + + this.gauge.value = value + this.gauge.max = max + }, + + initializeDatalink: function(){ + this.datalink.subscribeToData(['v.atmosphericPressure']) + + this.datalink.addReceiverFunction(this.update.bind(this)) + }, +}) +var ThrottleGauge = Class.create({ + initialize: function(datalink, gaugeID){ + this.datalink = datalink + this.gaugeID = gaugeID + this.gauge = $(this.gaugeID) + this.initializeDatalink() + }, + + update: function(data){ + this.gauge.value = data['f.throttle'] * 100 + this.gauge.max = 100 + }, + + initializeDatalink: function(){ + this.datalink.subscribeToData(['f.throttle']) + + this.datalink.addReceiverFunction(this.update.bind(this)) + }, +}) +/* Chartist.js 0.9.4 + * Copyright © 2015 Gion Kunz + * Free to use under the WTFPL license. + * http://www.wtfpl.net/ + */ + +!function(a,b){"function"==typeof define&&define.amd?define([],function(){return a.Chartist=b()}):"object"==typeof exports?module.exports=b():a.Chartist=b()}(this,function(){var a={version:"0.9.4"};return function(a,b,c){"use strict";c.noop=function(a){return a},c.alphaNumerate=function(a){return String.fromCharCode(97+a%26)},c.extend=function(a){a=a||{};var b=Array.prototype.slice.call(arguments,1);return b.forEach(function(b){for(var d in b)"object"!=typeof b[d]||null===b[d]||b[d]instanceof Array?a[d]=b[d]:a[d]=c.extend({},a[d],b[d])}),a},c.replaceAll=function(a,b,c){return a.replace(new RegExp(b,"g"),c)},c.stripUnit=function(a){return"string"==typeof a&&(a=a.replace(/[^0-9\+-\.]/g,"")),+a},c.ensureUnit=function(a,b){return"number"==typeof a&&(a+=b),a},c.querySelector=function(a){return a instanceof Node?a:b.querySelector(a)},c.times=function(a){return Array.apply(null,new Array(a))},c.sum=function(a,b){return a+(b?b:0)},c.mapMultiply=function(a){return function(b){return b*a}},c.mapAdd=function(a){return function(b){return b+a}},c.serialMap=function(a,b){var d=[],e=Math.max.apply(null,a.map(function(a){return a.length}));return c.times(e).forEach(function(c,e){var f=a.map(function(a){return a[e]});d[e]=b.apply(null,f)}),d},c.roundWithPrecision=function(a,b){var d=Math.pow(10,b||c.precision);return Math.round(a*d)/d},c.precision=8,c.escapingMap={"&":"&","<":"<",">":">",'"':""","'":"'"},c.serialize=function(a){return null===a||void 0===a?a:("number"==typeof a?a=""+a:"object"==typeof a&&(a=JSON.stringify({data:a})),Object.keys(c.escapingMap).reduce(function(a,b){return c.replaceAll(a,b,c.escapingMap[b])},a))},c.deserialize=function(a){if("string"!=typeof a)return a;a=Object.keys(c.escapingMap).reduce(function(a,b){return c.replaceAll(a,c.escapingMap[b],b)},a);try{a=JSON.parse(a),a=void 0!==a.data?a.data:a}catch(b){}return a},c.createSvg=function(a,b,d,e){var f;return b=b||"100%",d=d||"100%",Array.prototype.slice.call(a.querySelectorAll("svg")).filter(function(a){return a.getAttributeNS("http://www.w3.org/2000/xmlns/",c.xmlNs.prefix)}).forEach(function(b){a.removeChild(b)}),f=new c.Svg("svg").attr({width:b,height:d}).addClass(e).attr({style:"width: "+b+"; height: "+d+";"}),a.appendChild(f._node),f},c.reverseData=function(a){a.labels.reverse(),a.series.reverse();for(var b=0;bf.high&&(f.high=c),h&&ck,m=e?c.rho(j.range):0;if(e&&c.projectLength(a,1,j)>=d)j.step=1;else if(e&&m=d)j.step=m;else for(;;){if(l&&c.projectLength(a,j.step,j)<=d)j.step*=2;else{if(l||!(c.projectLength(a,j.step/2,j)>=d))break;if(j.step/=2,e&&j.step%1!==0){j.step*=2;break}}if(i++>1e3)throw new Error("Exceeded maximum number of iterations while optimizing scale step!")}for(g=j.min,h=j.max;g+j.step<=j.low;)g+=j.step;for(;h-j.step>=j.high;)h-=j.step;for(j.min=g,j.max=h,j.range=j.max-j.min,j.values=[],f=j.min;f<=j.max;f+=j.step)j.values.push(c.roundWithPrecision(f));return j},c.polarToCartesian=function(a,b,c,d){var e=(d-90)*Math.PI/180;return{x:a+c*Math.cos(e),y:b+c*Math.sin(e)}},c.createChartRect=function(a,b,d){var e=!(!b.axisX&&!b.axisY),f=e?b.axisY.offset:0,g=e?b.axisX.offset:0,h=a.width()||c.stripUnit(b.width)||0,i=a.height()||c.stripUnit(b.height)||0,j=c.normalizePadding(b.chartPadding,d);h=Math.max(h,f+j.left+j.right),i=Math.max(i,g+j.top+j.bottom);var k={padding:j,width:function(){return this.x2-this.x1},height:function(){return this.y1-this.y2}};return e?("start"===b.axisX.position?(k.y2=j.top+g,k.y1=Math.max(i-j.bottom,k.y2+1)):(k.y2=j.top,k.y1=Math.max(i-j.bottom-g,k.y2+1)),"start"===b.axisY.position?(k.x1=j.left+f,k.x2=Math.max(h-j.right,k.x1+1)):(k.x1=j.left,k.x2=Math.max(h-j.right-f,k.x1+1))):(k.x1=j.left,k.x2=Math.max(h-j.right,k.x1+1),k.y2=j.top,k.y1=Math.max(i-j.bottom,k.y2+1)),k},c.createGrid=function(a,b,d,e,f,g,h,i){var j={};j[d.units.pos+"1"]=a,j[d.units.pos+"2"]=a,j[d.counterUnits.pos+"1"]=e,j[d.counterUnits.pos+"2"]=e+f;var k=g.elem("line",j,h.join(" "));i.emit("draw",c.extend({type:"grid",axis:d,index:b,group:g,element:k},j))},c.createLabel=function(a,b,d,e,f,g,h,i,j,k,l){var m,n={};if(n[f.units.pos]=a+h[f.units.pos],n[f.counterUnits.pos]=h[f.counterUnits.pos],n[f.units.len]=b,n[f.counterUnits.len]=g-10,k){var o=''+e[d]+"";m=i.foreignObject(o,c.extend({style:"overflow: visible;"},n))}else m=i.elem("text",n,j.join(" ")).text(e[d]);l.emit("draw",c.extend({type:"label",axis:f,index:d,group:i,element:m,text:e[d]},n))},c.getSeriesOption=function(a,b,c){if(a.name&&b.series&&b.series[a.name]){var d=b.series[a.name];return d.hasOwnProperty(c)?d[c]:b[c]}return b[c]},c.optionsProvider=function(b,d,e){function f(b){var f=h;if(h=c.extend({},j),d)for(i=0;i1){var i=[];return h.forEach(function(a){i.push(g(a.pathCoordinates,a.valueData))}),c.Svg.Path.join(i)}if(a=h[0].pathCoordinates,d=h[0].valueData,a.length<=4)return c.Interpolation.none()(a,d);for(var j,k=(new c.Svg.Path).move(a[0],a[1],!1,d[0]),l=0,m=a.length;m-2*!j>l;l+=2){var n=[{x:+a[l-2],y:+a[l-1]},{x:+a[l],y:+a[l+1]},{x:+a[l+2],y:+a[l+3]},{x:+a[l+4],y:+a[l+5]}];j?l?m-4===l?n[3]={x:+a[0],y:+a[1]}:m-2===l&&(n[2]={x:+a[0],y:+a[1]},n[3]={x:+a[2],y:+a[3]}):n[0]={x:+a[m-2],y:+a[m-1]}:m-4===l?n[3]=n[2]:l||(n[0]={x:+a[l],y:+a[l+1]}),k.curve(e*(-n[0].x+6*n[1].x+n[2].x)/6+f*n[2].x,e*(-n[0].y+6*n[1].y+n[2].y)/6+f*n[2].y,e*(n[1].x+6*n[2].x-n[3].x)/6+f*n[2].x,e*(n[1].y+6*n[2].y-n[3].y)/6+f*n[2].y,n[2].x,n[2].y,!1,d[(l+2)/2])}return k}},c.Interpolation.step=function(a){var b={postpone:!0};return a=c.extend({},b,a),function(b,d){for(var e=new c.Svg.Path,f=!0,g=2;g1}).map(function(a){var b=a.pathElements[0],c=a.pathElements[a.pathElements.length-1];return a.clone(!0).position(0).remove(1).move(b.x,r).line(b.x,b.y).position(a.pathElements.length+1).line(c.x,r)}).forEach(function(h){var k=i.elem("path",{d:h.stringify()},a.classNames.area,!0).attr({values:b.normalized[g]},c.xmlNs.uri);this.eventEmitter.emit("draw",{type:"area",values:b.normalized[g],path:h.clone(),series:f,seriesIndex:g,axisX:d,axisY:e,chartRect:j,index:g,group:i,element:k})}.bind(this))}}.bind(this)),this.eventEmitter.emit("created",{bounds:e.bounds,chartRect:j,axisX:d,axisY:e,svg:this.svg,options:a})}function e(a,b,d,e){c.Line["super"].constructor.call(this,a,b,f,c.extend({},f,d),e)}var f={axisX:{offset:30,position:"end",labelOffset:{x:0,y:0},showLabel:!0,showGrid:!0,labelInterpolationFnc:c.noop,type:void 0},axisY:{offset:40,position:"start",labelOffset:{x:0,y:0},showLabel:!0,showGrid:!0,labelInterpolationFnc:c.noop,type:void 0,scaleMinSpace:20,onlyInteger:!1},width:void 0,height:void 0,showLine:!0,showPoint:!0,showArea:!1,areaBase:0,lineSmooth:!0,low:void 0,high:void 0,chartPadding:{top:15,right:15,bottom:5,left:10},fullWidth:!1,reverseData:!1,classNames:{chart:"ct-chart-line",label:"ct-label",labelGroup:"ct-labels",series:"ct-series",line:"ct-line",point:"ct-point",area:"ct-area",grid:"ct-grid",gridGroup:"ct-grids",vertical:"ct-vertical",horizontal:"ct-horizontal",start:"ct-start",end:"ct-end"}};c.Line=c.Base.extend({constructor:e,createChart:d})}(window,document,a),function(a,b,c){"use strict";function d(a){var b,d={raw:this.data,normalized:a.distributeSeries?c.getDataArray(this.data,a.reverseData,a.horizontalBars?"x":"y").map(function(a){return[a]}):c.getDataArray(this.data,a.reverseData,a.horizontalBars?"x":"y")};this.svg=c.createSvg(this.container,a.width,a.height,a.classNames.chart+(a.horizontalBars?" "+a.classNames.horizontalBars:""));var e=this.svg.elem("g").addClass(a.classNames.gridGroup),g=this.svg.elem("g"),h=this.svg.elem("g").addClass(a.classNames.labelGroup);if(a.stackBars){var i=c.serialMap(d.normalized,function(){return Array.prototype.slice.call(arguments).map(function(a){return a}).reduce(function(a,b){return{x:a.x+b.x||0,y:a.y+b.y||0}},{x:0,y:0})});b=c.getHighLow([i],c.extend({},a,{referenceValue:0}),a.horizontalBars?"x":"y")}else b=c.getHighLow(d.normalized,c.extend({},a,{referenceValue:0}),a.horizontalBars?"x":"y");b.high=+a.high||(0===a.high?0:b.high),b.low=+a.low||(0===a.low?0:b.low);var j,k,l,m,n,o=c.createChartRect(this.svg,a,f.padding);k=a.distributeSeries&&a.stackBars?d.raw.labels.slice(0,1):d.raw.labels,a.horizontalBars?(j=m=void 0===a.axisX.type?new c.AutoScaleAxis(c.Axis.units.x,d,o,c.extend({},a.axisX,{highLow:b,referenceValue:0})):a.axisX.type.call(c,c.Axis.units.x,d,o,c.extend({},a.axisX,{highLow:b,referenceValue:0})),l=n=void 0===a.axisY.type?new c.StepAxis(c.Axis.units.y,d,o,{ticks:k}):a.axisY.type.call(c,c.Axis.units.y,d,o,a.axisY)):(l=m=void 0===a.axisX.type?new c.StepAxis(c.Axis.units.x,d,o,{ticks:k}):a.axisX.type.call(c,c.Axis.units.x,d,o,a.axisX),j=n=void 0===a.axisY.type?new c.AutoScaleAxis(c.Axis.units.y,d,o,c.extend({},a.axisY,{highLow:b,referenceValue:0})):a.axisY.type.call(c,c.Axis.units.y,d,o,c.extend({},a.axisY,{highLow:b,referenceValue:0})));var p=a.horizontalBars?o.x1+j.projectValue(0):o.y1-j.projectValue(0),q=[];l.createGridAndLabels(e,h,this.supportsForeignObject,a,this.eventEmitter),j.createGridAndLabels(e,h,this.supportsForeignObject,a,this.eventEmitter),d.raw.series.forEach(function(b,e){var f,h,i=e-(d.raw.series.length-1)/2;f=a.distributeSeries&&!a.stackBars?l.axisLength/d.normalized.length/2:a.distributeSeries&&a.stackBars?l.axisLength/2:l.axisLength/d.normalized[e].length/2,h=g.elem("g"),h.attr({"series-name":b.name,meta:c.serialize(b.meta)},c.xmlNs.uri),h.addClass([a.classNames.series,b.className||a.classNames.series+"-"+c.alphaNumerate(e)].join(" ")),d.normalized[e].forEach(function(g,k){var r,s,t,u;if(u=a.distributeSeries&&!a.stackBars?e:a.distributeSeries&&a.stackBars?0:k,r=a.horizontalBars?{x:o.x1+j.projectValue(g&&g.x?g.x:0,k,d.normalized[e]),y:o.y1-l.projectValue(g&&g.y?g.y:0,u,d.normalized[e])}:{x:o.x1+l.projectValue(g&&g.x?g.x:0,u,d.normalized[e]),y:o.y1-j.projectValue(g&&g.y?g.y:0,k,d.normalized[e])},l instanceof c.StepAxis&&(l.options.stretch||(r[l.units.pos]+=f*(a.horizontalBars?-1:1)),r[l.units.pos]+=a.stackBars||a.distributeSeries?0:i*a.seriesBarDistance*(a.horizontalBars?-1:1)),t=q[k]||p,q[k]=t-(p-r[l.counterUnits.pos]),void 0!==g){var v={};v[l.units.pos+"1"]=r[l.units.pos],v[l.units.pos+"2"]=r[l.units.pos],v[l.counterUnits.pos+"1"]=a.stackBars?t:p,v[l.counterUnits.pos+"2"]=a.stackBars?q[k]:r[l.counterUnits.pos],v.x1=Math.min(Math.max(v.x1,o.x1),o.x2),v.x2=Math.min(Math.max(v.x2,o.x1),o.x2),v.y1=Math.min(Math.max(v.y1,o.y2),o.y1),v.y2=Math.min(Math.max(v.y2,o.y2),o.y1),s=h.elem("line",v,a.classNames.bar).attr({value:[g.x,g.y].filter(function(a){return a}).join(","),meta:c.getMetaData(b,k)},c.xmlNs.uri), +this.eventEmitter.emit("draw",c.extend({type:"bar",value:g,index:k,meta:c.getMetaData(b,k),series:b,seriesIndex:e,axisX:m,axisY:n,chartRect:o,group:h,element:s},v))}}.bind(this))}.bind(this)),this.eventEmitter.emit("created",{bounds:j.bounds,chartRect:o,axisX:m,axisY:n,svg:this.svg,options:a})}function e(a,b,d,e){c.Bar["super"].constructor.call(this,a,b,f,c.extend({},f,d),e)}var f={axisX:{offset:30,position:"end",labelOffset:{x:0,y:0},showLabel:!0,showGrid:!0,labelInterpolationFnc:c.noop,scaleMinSpace:30,onlyInteger:!1},axisY:{offset:40,position:"start",labelOffset:{x:0,y:0},showLabel:!0,showGrid:!0,labelInterpolationFnc:c.noop,scaleMinSpace:20,onlyInteger:!1},width:void 0,height:void 0,high:void 0,low:void 0,onlyInteger:!1,chartPadding:{top:15,right:15,bottom:5,left:10},seriesBarDistance:15,stackBars:!1,horizontalBars:!1,distributeSeries:!1,reverseData:!1,classNames:{chart:"ct-chart-bar",horizontalBars:"ct-horizontal-bars",label:"ct-label",labelGroup:"ct-labels",series:"ct-series",bar:"ct-bar",grid:"ct-grid",gridGroup:"ct-grids",vertical:"ct-vertical",horizontal:"ct-horizontal",start:"ct-start",end:"ct-end"}};c.Bar=c.Base.extend({constructor:e,createChart:d})}(window,document,a),function(a,b,c){"use strict";function d(a,b,c){var d=b.x>a.x;return d&&"explode"===c||!d&&"implode"===c?"start":d&&"implode"===c||!d&&"explode"===c?"end":"middle"}function e(a){var b,e,f,h,i,j=[],k=a.startAngle,l=c.getDataArray(this.data,a.reverseData);this.svg=c.createSvg(this.container,a.width,a.height,a.donut?a.classNames.chartDonut:a.classNames.chartPie),e=c.createChartRect(this.svg,a,g.padding),f=Math.min(e.width()/2,e.height()/2),i=a.total||l.reduce(function(a,b){return a+b},0),f-=a.donut?a.donutWidth/2:0,h="outside"===a.labelPosition||a.donut?f:"center"===a.labelPosition?0:f/2,h+=a.labelOffset;var m={x:e.x1+e.width()/2,y:e.y2+e.height()/2},n=1===this.data.series.filter(function(a){return a.hasOwnProperty("value")?0!==a.value:0!==a}).length;a.showLabel&&(b=this.svg.elem("g",null,null,!0));for(var o=0;o180,0,r.x,r.y);a.donut||t.line(m.x,m.y);var u=j[o].elem("path",{d:t.stringify()},a.donut?a.classNames.sliceDonut:a.classNames.slicePie);if(u.attr({value:l[o],meta:c.serialize(p.meta)},c.xmlNs.uri),a.donut&&u.attr({style:"stroke-width: "+ +a.donutWidth+"px"}),this.eventEmitter.emit("draw",{type:"slice",value:l[o],totalDataSum:i,index:o,meta:p.meta,series:p,group:j[o],element:u,path:t.clone(),center:m,radius:f,startAngle:k,endAngle:q}),a.showLabel){var v=c.polarToCartesian(m.x,m.y,h,k+(q-k)/2),w=a.labelInterpolationFnc(this.data.labels?this.data.labels[o]:l[o],o);if(w||0===w){var x=b.elem("text",{dx:v.x,dy:v.y,"text-anchor":d(m,v,a.labelDirection)},a.classNames.label).text(""+w);this.eventEmitter.emit("draw",{type:"label",index:o,group:b,element:x,text:""+w,x:v.x,y:v.y})}}k=q}this.eventEmitter.emit("created",{chartRect:e,svg:this.svg,options:a})}function f(a,b,d,e){c.Pie["super"].constructor.call(this,a,b,g,c.extend({},g,d),e)}var g={width:void 0,height:void 0,chartPadding:5,classNames:{chartPie:"ct-chart-pie",chartDonut:"ct-chart-donut",series:"ct-series",slicePie:"ct-slice-pie",sliceDonut:"ct-slice-donut",label:"ct-label"},startAngle:0,total:void 0,donut:!1,donutWidth:60,showLabel:!0,labelOffset:0,labelPosition:"inside",labelInterpolationFnc:c.noop,labelDirection:"neutral",reverseData:!1};c.Pie=c.Base.extend({constructor:f,createChart:e,determineAnchorPosition:d})}(window,document,a),a}); +/* + Graticule plugin for Leaflet powered maps. +*/ +L.Graticule = L.GeoJSON.extend({ + + options: { + style: { + color: '#333', + weight: 1 + }, + interval: 20 + }, + + initialize: function (options) { + L.Util.setOptions(this, options); + this._layers = {}; + + if (this.options.sphere) { + this.addData(this._getFrame()); + } else { + this.addData(this._getGraticule()); + } + }, + + _getFrame: function() { + return { "type": "Polygon", + "coordinates": [ + this._getMeridian(-180).concat(this._getMeridian(180).reverse()) + ] + }; + }, + + _getGraticule: function () { + var features = [], interval = this.options.interval; + + // Meridians + for (var lng = 0; lng <= 180; lng = lng + interval) { + features.push(this._getFeature(this._getMeridian(lng), { + "name": (lng) ? lng.toString() + "° E" : "Prime meridian" + })); + if (lng !== 0) { + features.push(this._getFeature(this._getMeridian(-lng), { + "name": lng.toString() + "° W" + })); + } + } + + // Parallels + for (var lat = 0; lat <= 90; lat = lat + interval) { + features.push(this._getFeature(this._getParallel(lat), { + "name": (lat) ? lat.toString() + "° N" : "Equator" + })); + if (lat !== 0) { + features.push(this._getFeature(this._getParallel(-lat), { + "name": lat.toString() + "° S" + })); + } + } + + return { + "type": "FeatureCollection", + "features": features + }; + }, + + _getMeridian: function (lng) { + lng = this._lngFix(lng); + var coords = []; + for (var lat = -90; lat <= 90; lat++) { + coords.push([lng, lat]); + } + return coords; + }, + + _getParallel: function (lat) { + var coords = []; + for (var lng = -180; lng <= 180; lng++) { + coords.push([this._lngFix(lng), lat]); + } + return coords; + }, + + _getFeature: function (coords, prop) { + return { + "type": "Feature", + "geometry": { + "type": "LineString", + "coordinates": coords + }, + "properties": prop + }; + }, + + _lngFix: function (lng) { + if (lng >= 180) return 179.999999; + if (lng <= -180) return -179.999999; + return lng; + } + +}); + +L.graticule = function (options) { + return new L.Graticule(options); +}; +var PositionMap = Class.create({ + initialize: function(datalink, mapId, options){ + this.datalink = datalink + this.mapId = mapId + this.noMapIndicatorId = (mapId + '-no-map') + this.previousBody = "KERBIN" + this.options = Object.extend({ + lockOnVessel: true + }, options) + this.initializeMap() + this.initializeNoMapIndicator() + this.initializeDatalink() + }, + + update: function(data){ + window.requestAnimationFrame(function(){ + if(this.isMapAvailable(data)){ + this.showMap() + this.updateBodyIfNecessary(data) + this.setCoordinatesForMapObject(this.coordinates, data['v.lat'], data['v.long']) + if(this.options.lockOnVessel){ + this.map.panTo([data['v.lat'], data['v.long']]) + } + } else{ + this.hideMap() + } + }.bind(this)) + }, + + updateBodyIfNecessary: function(data){ + var bodyName = data['v.body'].toUpperCase() + if(this.previousBody != bodyName){ + newBody = L.KSP.CelestialBody[bodyName]; + newBody.addTo(this.map); + this.previousBody = bodyName; + } + }, + + initializeMap: function(){ + this.map = new L.KSP.Map(this.mapId, { + layers: [L.KSP.CelestialBody[this.previousBody.toUpperCase()]], + zoom: 'fit', + bodyControl: false, + layerControl: true, + scaleControl: true + }) + + this.map.fitWorld() + + L.graticule().addTo(this.map) + + var circleMarkerOptions = { + // fill: false, + color: '#FD7E23', + opacity: 1.0, + fillOpacity: 1.0, + radius: 5 + } + + this.coordinates = L.circleMarker([0, 0], circleMarkerOptions) + this.coordinates.addTo(this.map) + }, + + convertCoordinatesToMap: function(latitude, longitude){ + return [latitude, longitude > 180 ? longitude - 360 : longitude] + }, + + setCoordinatesForMapObject: function(object, latitude, longitude){ + var convertedCoordinates = this.convertCoordinatesToMap(latitude, longitude) + object.setLatLng([convertedCoordinates[0], convertedCoordinates[1]]) + }, + + isMapAvailable: function(data){ + return data['v.body'].toUpperCase() != "SUN" + }, + + hideMap: function(){ + $(this.mapId).hide() + this.noMapIndicator.removeClassName("hidden") + }, + + showMap: function(){ + $(this.mapId).show() + this.noMapIndicator.addClassName("hidden") + }, + + initializeNoMapIndicator: function(){ + this.noMapIndicator = $(this.noMapIndicatorId) + }, + + initializeDatalink: function(){ + this.datalink.subscribeToData(['v.lat', 'v.long', 'v.body']) + + this.datalink.addReceiverFunction(this.update.bind(this)) + } +}) +var OrbitalPositionData = Class.create({ + initialize: function(datalink, options){ + this.datalink = datalink + this.initializeDatalink() + this.timeoutRate = 1000 //times out every 5 seconds + this.mutexTimestamp = null + this.rootReferenceBody = null + this.options = Object.extend({ + onRecalculate: null, + numberOfSegments: 120 + }, options) + }, + + isLocked: function(){ + this.mutexTimestamp && this.mutexTimestamp < ((Date.now() / 1000 | 0) + this.timeoutRate) + }, + + mutexLock: function(){ + this.mutexTimestamp = Date.now() + }, + + mutexUnlock: function(){ + this.mutexTimestamp = null + }, + + recalculate: function(data){ + if(this.isLocked()){return} + this.mutexLock() + Object.extend(data, { + "currentUniversalTime": this.adjustUniversalTime(data['t.universalTime']), + "vesselBody": data['v.body'], + "vesselCurrentPosition": { "relativePosition": null }, + "targetCurrentPosition": { "relativePosition": null }, + }) + this.getPositionsAndRecalculate(data) + }, + + getPositionsAndRecalculate: function(positionData){ + var requestParams = {}; + //ask for the true position for the current body right now and the radius + var referenceBody = this.datalink.getOrbitalBodyInfo(positionData["vesselBody"]) + this.rootReferenceBody = referenceBody + requestParams["currentReferenceBodyRadius"] = 'b.radius[' + referenceBody.id + ']' + requestParams["currentReferenceBodyTruePosition"] = 'b.o.truePositionAtUT[' + referenceBody.id + ',' + positionData["currentUniversalTime"] + ']' + //ask for the relative position of the vessel in the current orbit patch at the current time + requestParams["vesselCurrentPositionRelativePosition"] = "o.relativePositionAtUTForOrbitPatch[" + 0 +","+ positionData["currentUniversalTime"] + "]" + + this.buildRelativePositionRequestsForOrbitPatches(requestParams, "vesselCurrentOrbit", positionData['o.orbitPatches'], positionData["currentUniversalTime"]) + this.buildRelativePositionRequestsForManeuverNodeOrbitPatches(requestParams, "vesselManeuverNodes", positionData['o.maneuverNodes'], positionData["currentUniversalTime"]) + + if(positionData['tar.type']){ + if(positionData['tar.o.orbitPatches'] && positionData['tar.o.orbitPatches'].length > 0){ + this.buildRelativePositionRequestsForOrbitPatches(requestParams, "targetCurrentOrbit", positionData['tar.o.orbitPatches'], positionData["currentUniversalTime"], 'tar.o') + requestParams["targetCurrentPositionRelativePosition"] = "tar.o.relativePositionAtUTForOrbitPatch[" + 0 +","+ positionData["currentUniversalTime"] + "]" + } else{ + var body = this.datalink.getOrbitalBodyInfo(positionData['tar.name']) + requestParams[body.name + "[metadata]radius"] = 'b.radius[' + body.id + ']' + requestParams[body.name + "["+ positionData["currentUniversalTime"] +"]TruePosition"] = 'b.o.truePositionAtUT[' + body.id + ',' + positionData["currentUniversalTime"] + ']' + requestParams[body.name + "[metadata]currentTruePosition"] = 'b.o.truePositionAtUT[' + body.id + ',' + positionData["currentUniversalTime"] + ']' + } + } + + this.datalink.sendMessage(requestParams, function(data){ + positionData["currentReferenceBodyRadius"] = data["currentReferenceBodyRadius"] + positionData["currentReferenceBodyTruePosition"] = data["currentReferenceBodyTruePosition"] + + this.buildReferenceBodyPositionData(data, positionData) + this.buildReferenceBodyMetadata(data, positionData) + + positionData["vesselCurrentPosition"]["relativePosition"] = data["vesselCurrentPositionRelativePosition"] + this.buildRelativePositionPositionDataForOrbitPatches(data, positionData, "vesselCurrentOrbit", 'o.orbitPatches') + + if(positionData['o.maneuverNodes']){ + this.buildRelativePositionPositionDataForManeuverNodeOrbitPatches(data, positionData, "vesselManeuverNodes", 'o.maneuverNodes') + } + + if(positionData['tar.o.orbitPatches']){ + this.buildRelativePositionPositionDataForOrbitPatches(data, positionData, "targetCurrentOrbit", 'tar.o.orbitPatches', 'tar.o') + positionData["targetCurrentPosition"]["relativePosition"] = data["targetCurrentPositionRelativePosition"] + } + + this.mutexUnlock() + this.options.onRecalculate && this.options.onRecalculate(positionData) + }.bind(this)) + }, + + buildRelativePositionRequestsForOrbitPatches: function(requestParams, orbitPatchType, orbitPatches, currentUniversalTime, requestPrefix){ + requestPrefix = requestPrefix || 'o' + for (var i = 0; i < orbitPatches.length; i++) { + var orbitPatch = orbitPatches[i] + + // get the start and the end universal times for the patch + var startUT = this.adjustUniversalTime(orbitPatch["startUT"]) + var endUT = this.adjustUniversalTime(orbitPatch["endUT"]) + + //ask for the true position for the current body right now and the radius + var referenceBody = this.datalink.getOrbitalBodyInfo(orbitPatch["referenceBody"]) + + var timeInterval = (endUT-startUT)/this.options.numberOfSegments + var UTForInterval = null + for(var j = 0; j < this.options.numberOfSegments; j++){ + UTForInterval = this.adjustUniversalTime(startUT + (timeInterval * j)) + if(UTForInterval > endUT){ + UTForInterval = endUT + } + + //get the true position of the root reference body at this UT as well + requestParams[this.rootReferenceBody.name + "["+ UTForInterval +"]TruePosition"] = 'b.o.truePositionAtUT[' + this.rootReferenceBody.id + ',' + UTForInterval + ']' + + requestParams[orbitPatchType + "[" + i + "][" + UTForInterval + "]RelativePosition"] = requestPrefix + ".relativePositionAtUTForOrbitPatch[" + i +","+ UTForInterval + "]" + requestParams[orbitPatch["referenceBody"] + "["+ UTForInterval +"]TruePosition"] = 'b.o.truePositionAtUT[' + referenceBody.id + ',' + UTForInterval + ']' + } + + requestParams[orbitPatch["referenceBody"] + "[metadata]radius"] = 'b.radius[' + referenceBody.id + ']' + requestParams[orbitPatch["referenceBody"] + "[metadata]currentTruePosition"] = 'b.o.truePositionAtUT[' + referenceBody.id + ',' + currentUniversalTime + ']' + } + }, + + buildRelativePositionRequestsForManeuverNodeOrbitPatches: function(requestParams, maneuverNodeType, maneuverNodes, currentUniversalTime){ + var requestPrefix = "o.maneuverNodes.relativePositionAtUTForManeuverNodesOrbitPatch" + for (var i = 0; i < maneuverNodes.length; i++) { + var maneuverNode = maneuverNodes[i] + + /* + "apistring": "o.maneuverNodes.relativePositionAtUTForManeuverNodesOrbitPatch", + "name": "For a maneuver node, The orbit patch's True Anomaly at Universal Time [int id, orbit patch index, universal time]", + "units": "DEG", + "plotable": true + */ + + var labelPrefix = maneuverNodeType + "[" + i + "]" + + for (var j = 0; j < maneuverNode['orbitPatches'].length; j++) { + var orbitPatch = maneuverNode['orbitPatches'][j] + + // get the start and the end universal times for the patch + var startUT = this.adjustUniversalTime(orbitPatch["startUT"]) + var endUT = this.adjustUniversalTime(orbitPatch["endUT"]) + var period = this.adjustUniversalTime(orbitPatch["period"]) + var endTransition = this.adjustUniversalTime(orbitPatch["patchEndTransition"]) + + //ask for the true position for the current body right now and the radius + var referenceBody = this.datalink.getOrbitalBodyInfo(orbitPatch["referenceBody"]) + var expectedUT = startUT + period + + if(expectedUT < endUT && endTransition == "MANEUVER"){ + var timeInterval = (expectedUT - startUT)/this.options.numberOfSegments + } else{ + var timeInterval = (endUT-startUT)/this.options.numberOfSegments + } + + var UTForInterval = null + for(var k = 0; k < this.options.numberOfSegments; k++){ + UTForInterval = this.adjustUniversalTime((UTForInterval || startUT) + timeInterval) + if(UTForInterval > endUT){ + UTForInterval = endUT + } + + var args = [i,j,UTForInterval] + + //get the true position of the root reference body at this UT as well + requestParams[this.rootReferenceBody.name + "["+ UTForInterval +"]TruePosition"] = 'b.o.truePositionAtUT[' + this.rootReferenceBody.id + ',' + UTForInterval + ']' + + requestParams[labelPrefix + "[" + j + "][" + UTForInterval + "]RelativePosition"] = requestPrefix + "[" + args.join(',') + "]" + requestParams[orbitPatch["referenceBody"] + "["+ UTForInterval +"]TruePosition"] = 'b.o.truePositionAtUT[' + referenceBody.id + ',' + UTForInterval + ']' + } + + requestParams[orbitPatch["referenceBody"] + "[metadata]radius"] = 'b.radius[' + referenceBody.id + ']' + requestParams[orbitPatch["referenceBody"] + "[metadata]currentTruePosition"] = 'b.o.truePositionAtUT[' + referenceBody.id + ',' + currentUniversalTime + ']' + } + }; + }, + + buildRelativePositionPositionDataForOrbitPatches: function(rawData, positionData, orbitPatchType, orbitPatchesKey){ + var relativePositionFieldRegex = new RegExp(orbitPatchType + "\\[(\\d+)\\]\\[([\\d\\.]+)\\]RelativePosition") + var orbitPatches = positionData[orbitPatchesKey] = positionData[orbitPatchesKey] || {} + + var rawDataKeys = Object.keys(rawData) + for (var i = rawDataKeys.length - 1; i >= 0; i--) { + var key = rawDataKeys[i] + if(relativePositionFieldRegex.test(key)){ + var matchParts = relativePositionFieldRegex.exec(key) + var orbitPatchIndex = parseInt(matchParts[1]) + var universalTime = matchParts[2] + var relativePosition = rawData[key] + + var orbitPatch = orbitPatches[orbitPatchIndex] = orbitPatches[orbitPatchIndex] || {} + var orbitPatchPositionData = orbitPatch["positionData"] = orbitPatch["positionData"] || {} + orbitPatchPositionData[universalTime] = orbitPatchPositionData[universalTime] || {} + orbitPatchPositionData[universalTime]["relativePosition"] = relativePosition + } + }; + }, + + buildRelativePositionPositionDataForManeuverNodeOrbitPatches: function(rawData, positionData, maneuverNodeType, maneuverNodesKey){ + var relativePositionFieldRegex = new RegExp(maneuverNodeType + "\\[(\\d+)\\]\\[(\\d+)\\]\\[([\\d\\.]+)\\]RelativePosition") + var maneuverNodes = positionData[maneuverNodesKey] = positionData[maneuverNodesKey] || {} + + var rawDataKeys = Object.keys(rawData) + for (var i = rawDataKeys.length - 1; i >= 0; i--) { + var key = rawDataKeys[i] + if(relativePositionFieldRegex.test(key)){ + var matchParts = relativePositionFieldRegex.exec(key) + var maneuverNodeIndex = parseInt(matchParts[1]) + var orbitPatchIndex = parseInt(matchParts[2]) + var universalTime = matchParts[3] + var relativePosition = rawData[key] + + var orbitPatch = maneuverNodes[maneuverNodeIndex]['orbitPatches'][orbitPatchIndex] = maneuverNodes[maneuverNodeIndex]['orbitPatches'][orbitPatchIndex] || {} + var orbitPatchPositionData = orbitPatch["positionData"] = orbitPatch["positionData"] || {} + orbitPatchPositionData[universalTime] = orbitPatchPositionData[universalTime] || {} + orbitPatchPositionData[universalTime]["relativePosition"] = relativePosition + } + }; + }, + + buildReferenceBodyPositionData: function(rawData, positionData){ + var referenceBodyTruePositionRegex = new RegExp(/(\w+)\[([\d\.]+)\]TruePosition$/) + + var rawDataKeys = Object.keys(rawData) + for (var i = rawDataKeys.length - 1; i >= 0; i--) { + var key = rawDataKeys[i] + if(referenceBodyTruePositionRegex.test(key)){ + var matchParts = referenceBodyTruePositionRegex.exec(key) + var referenceBodyName = matchParts[1] + var universalTime = matchParts[2] + var truePosition = rawData[key] + + var referenceBodies = positionData["referenceBodies"] = positionData["referenceBodies"] || {} + var referenceBodyObject = referenceBodies[referenceBodyName] = referenceBodies[referenceBodyName] || {} + referenceBodyObject["positionData"] = referenceBodyObject["positionData"] || {} + referenceBodyObject["positionData"][universalTime] = referenceBodyObject["positionData"][universalTime] || {} + referenceBodyObject["positionData"][universalTime]["truePosition"] = truePosition + } + } + }, + + buildReferenceBodyMetadata: function(rawData, positionData){ + var referenceBodyTruePositionRegex = new RegExp(/(\w+)\[metadata\](\w+)$/) + + var rawDataKeys = Object.keys(rawData) + for (var i = rawDataKeys.length - 1; i >= 0; i--) { + var key = rawDataKeys[i] + if(referenceBodyTruePositionRegex.test(key)){ + var matchParts = referenceBodyTruePositionRegex.exec(key) + var referenceBodyName = matchParts[1] + var field = matchParts[2] + var data = rawData[key] + + var referenceBodies = positionData["referenceBodies"] = positionData["referenceBodies"] || {} + var referenceBodyObject = referenceBodies[referenceBodyName] = referenceBodies[referenceBodyName] || {} + referenceBodyObject[field] = data + } + } + }, + + adjustUniversalTime: function(ut){ + return ut//.toFixed(3) + }, + + initializeDatalink: function(){ + this.datalink.subscribeToData([ + 'o.orbitPatches', 't.universalTime', 'v.body', + 'tar.name', 'tar.type', 'tar.o.orbitingBody', + 'tar.o.orbitPatches', 'o.maneuverNodes' + ]) + + this.datalink.addReceiverFunction(this.recalculate.bind(this)) + }, +}) +var GroundTrackPositionDataFormatter = Class.create({ + initialize: function(orbitalPositionData, datalink, options){ + this.datalink = datalink + this.orbitalPositionData = orbitalPositionData; + this.orbitalPositionData.options.onRecalculate = this.format.bind(this) + + this.rootReferenceBodyName = null + this.currentUniversalTime = null + + this.options = Object.extend({ + onFormat: null, + numberOfSegments: 120 + }, options) + }, + + format: function(positionData){ + var formattedData = { + "vesselCurrentCoordinates": null, + "targetCurrentCoordinates": null, + + "vesselSuborbitalPaths": [], + "vesselOrbitalPaths": [], + + "targetSuborbitalPaths": [], + "targetOrbitalPaths": [], + + "currentUniversalTime": positionData.currentUniversalTime, + "referenceBodyName": positionData.vesselBody, + "atmosphericRadius": this.datalink.getOrbitalBodyInfo(positionData.vesselBody).atmosphericRadius + } + + this.currentUniversalTime = positionData.currentUniversalTime + this.formatVesselCurrentCoordinates(positionData, formattedData) + this.formatTargetCurrentCoordinates(positionData, formattedData) + this.formatVesselOrbitalPaths(positionData, formattedData) + this.formatTargetOrbitalPaths(positionData, formattedData) + + this.options.onFormat && this.options.onFormat(formattedData) + }, + + formatVesselCurrentCoordinates: function(positionData, formattedData){ + this.rootReferenceBodyName = positionData["vesselBody"] + var currentPosition = positionData["vesselCurrentPosition"]["relativePosition"] + var info = this.rootReferenceBody(positionData) + + formattedData.vesselCurrentCoordinates = this.coordinatesFromVector(currentPosition, info.radius) + }, + + + formatTargetCurrentCoordinates: function(positionData, formattedData){ + if(this.rootReferenceBodyName != positionData["tar.o.orbitingBody"]){ return } + if(positionData["tar.type"] != "Vessel"){ return } + var currentPosition = positionData["targetCurrentPosition"]["relativePosition"] + var info = this.rootReferenceBody(positionData) + + formattedData.targetCurrentCoordinates = this.coordinatesFromVector(currentPosition, info.radius) + }, + + formatVesselOrbitalPaths: function(positionData, formattedData){ + var parentType = "currentVessel" + var orbitPatches = positionData["o.orbitPatches"] + + var pathSet = this.formatPathSet(positionData, orbitPatches, parentType, "orbitPath") + + formattedData.vesselOrbitalPaths = formattedData.vesselOrbitalPaths.concat(pathSet.filter(function(x){ return x.type == "orbital" })) + formattedData.vesselSuborbitalPaths = formattedData.vesselSuborbitalPaths.concat(pathSet.filter(function(x){ return x.type == "suborbital" })) + + this.formatManeuverNodes(positionData, formattedData, positionData["o.maneuverNodes"], parentType) + }, + + formatTargetOrbitalPaths: function(positionData, formattedData){ + if(positionData["tar.type"] != "Vessel"){ return } + var parentType = "targetVessel" + var orbitPatches = positionData["tar.o.orbitPatches"] + + var pathSet = this.formatPathSet(positionData, orbitPatches, parentType, "orbitPath") + + formattedData.targetOrbitalPaths = pathSet.filter(function(x){ return x.type == "orbital" }) + formattedData.targetSuborbitalPaths = pathSet.filter(function(x){ return x.type == "suborbital" }) + }, + + formatManeuverNodes: function(positionData, formattedData, maneuverNodes, parentType){ + for (var i = 0; i < maneuverNodes.length; i++) { + var node = maneuverNodes[i] + if(node.referenceBody != this.rootReferenceBodyName){ break } + + //render each orbit patch as an array of 1 so we can break once the path set returns empty (it's left the SOI) + for (var j = 0; j < node.orbitPatches.length; j++) { + var orbitPatches = [node.orbitPatches[j]] + var pathSet = this.formatPathSet(positionData, orbitPatches, parentType, "maneuverNode") + if(pathSet.length == 0){ return } + + formattedData.vesselOrbitalPaths = formattedData.vesselOrbitalPaths.concat(pathSet.filter(function(x){ return x.type == "orbital" })) + formattedData.vesselSuborbitalPaths = formattedData.vesselSuborbitalPaths.concat(pathSet.filter(function(x){ return x.type == "suborbital" })) + } + } + }, + + formatPathSet: function(positionData, orbitPatches, parentType, pathType){ + var pathSets = [] + var currentPathType = null + var currentPathSet = null + var info = this.rootReferenceBody(positionData) + var orbitalClearanceDistance = this.orbitalClearanceDistance(positionData) + + for (var i = 0; i < orbitPatches.length; i++) { + var orbitPatch = orbitPatches[i] + //If we extend beyond the root reference body then hard-stop the loop. We've escaped the SOI + if(orbitPatch.referenceBody != this.rootReferenceBodyName){ break } + + var sortedUniversalTimes = this.sortedUniversalTimes(orbitPatch.positionData) + + for (var j = 0; j < sortedUniversalTimes.length; j++){ + var key = sortedUniversalTimes[j].toString() + var position = orbitPatch.positionData[key].relativePosition + + var coordinates = this.coordinatesFromVector(position, info.radius) + if(coordinates.length == 0){ continue } + var length = this.vectorLength(position) + + // don't render any points that are underneath the body's surface or back in time + if(length <= info.radius || (sortedUniversalTimes[j] < this.currentUniversalTime && pathType != "maneuverNode" ) ){ + continue + } else if(length > orbitalClearanceDistance){ + var type = "orbital" + } else{ + var type = "suborbital" + } + + if(type != currentPathType){ + currentPathSet = this.buildOrbitPath({ + type: type, + parentType: parentType, + pathType: pathType, + points: [], + altitudes: [] + }) + pathSets.push(currentPathSet) + } + + currentPathSet.points.push(coordinates) + currentPathSet.altitudes.push({time: sortedUniversalTimes[j], altitude: length - info.radius}) + currentPathType = type + } + } + + return pathSets + }, + + buildOrbitPath: function(options){ + return { + type: options.type, + pathType: options.pathType, + parentType: options.parentType, + points: options.points, + altitudes: options.altitudes + } + }, + + vectorLength: function(vector){ + return Math.sqrt(Math.pow(vector[0], 2) + Math.pow(vector[1], 2) + Math.pow(vector[2], 2)) + }, + + coordinatesFromVector: function(vector, radius){ + var x = vector[0] + var y = vector[1] + var z = vector[2] + var lat = 90 - (Math.acos(z / radius)) * 180 / Math.PI + var lon = ((270 + (Math.atan2(x , y)) * 180 / Math.PI) % 360) -180 + if(!isNaN(lat) && !isNaN(lon)){ + return [lat, lon] + } else{ + return [] + } + }, + + sortedUniversalTimes: function(positionData){ + var positionDataKeys = Object.keys(positionData) + return positionDataKeys.map(function(x){return parseFloat(x)}).sortBy(function(x){ x }).reverse() + }, + + orbitalClearanceDistance: function(positionData){ + return this.rootReferenceBody(positionData).radius + this.datalink.getOrbitalBodyInfo(this.rootReferenceBodyName).atmosphericRadius + }, + + rootReferenceBody: function(positionData){ + return positionData.referenceBodies[this.rootReferenceBodyName] + } +}) +var GroundTrack = Class.create({ + initialize: function(datalink, positionDataFormatter, map_id, altitudeEstimationId){ + this.datalink = datalink + this.positionDataFormatter = positionDataFormatter + this.map_id = map_id + this.altitudeEstimationId = altitudeEstimationId + + this.vesselColor = '#F5A623' + this.vesselSuborbitalColor = 'red' + this.maneuverNodeColor = '#b4f489' + this.targetColor = '#987cf9' + this.targetSuborbitalColor = '#f97292' + + this.initializeAltitudeEstimate() + this.initializeMap() + + this.positionDataFormatter.options.onFormat = this.render.bind(this) + }, + + render: function(formattedData){ + this.renderVesselCurrentCoordinates(formattedData) + this.renderTargetCurrentCoordinates(formattedData) + this.renderVesselOrbitPaths(formattedData) + this.renderTargetOrbitPaths(formattedData) + this.updateAltitudeEstimateChart(formattedData) + }, + + renderVesselCurrentCoordinates: function(formattedData){ + var coordinates = formattedData.vesselCurrentCoordinates + if(!coordinates){return} + this.positionMap.setCoordinatesForMapObject(this.markers.vesselCoordinates, coordinates[0], coordinates[1]) + }, + + renderTargetCurrentCoordinates: function(formattedData){ + var coordinates = formattedData.targetCurrentCoordinates + if(!coordinates){return} + this.positionMap.setCoordinatesForMapObject(this.markers.targetCoordinates, coordinates[0], coordinates[1]) + }, + + renderVesselOrbitPaths: function(formattedData){ + this.renderOrbitPaths(this.markers.vesselOrbitalPaths, formattedData.vesselOrbitalPaths, { color: this.vesselColor }) + this.renderOrbitPaths(this.markers.vesselSuborbitalPaths, formattedData.vesselSuborbitalPaths, { color: this.vesselSuborbitalColor }) + }, + + renderTargetOrbitPaths: function(formattedData){ + this.renderOrbitPaths(this.markers.targetOrbitalPaths, formattedData.targetOrbitalPaths, { color: this.targetColor }) + this.renderOrbitPaths(this.markers.targetSuborbitalPaths, formattedData.targetSuborbitalPaths, { color: this.targetSuborbitalColor }) + }, + + renderOrbitPaths: function(markers, orbitPaths, lineOptions){ + //clear all the existing orbital path values + for (var i = markers.length - 1; i >= 0; i--) { + markers[i].setLatLngs([]) + } + + for (var i = 0; i < orbitPaths.length; i++) { + var orbitPath = orbitPaths[i] + var coordinates = orbitPath.points + + if(!markers[i]){ + markers[i] = L.polyline([], lineOptions) + markers[i].addTo(this.positionMap.map) + } + + var options = { + dashArray: orbitPath.pathType == "maneuverNode" ? '5,10' : '' + } + + if(orbitPath.pathType == "maneuverNode"){ + options.color = this.maneuverNodeColor + } + + var marker = markers[i] + marker.setLatLngs(coordinates) + marker.setStyle(options) + } + }, + + updateAltitudeEstimateChart: function(formattedData){ + if(!this.altitudeEstimateChart){ return } + + var chartData = { + labels: [], series: [ + { + name: 'vessel', + data: [] + }, + { + name: 'atmosphere', + data: [] + }, + { + name: 'vesselManeuver', + data: [] + } + ] + } + + if(formattedData.targetCurrentCoordinates){ + chartData.push({ + name: 'target', + data: [] + }) + } + + var maxLabelSections = 10 + var interval = 60 * 5 //seconds based + var intervalsCovered = {} + + var rawChartData = {} + + this.buildAltitudePointsForChart( + formattedData.vesselOrbitalPaths.filter(function(x){ return x.pathType == "orbitPath" }), + formattedData.vesselSuborbitalPaths.filter(function(x){ return x.pathType == "orbitPath" }), + "vessel", + rawChartData + ) + + this.buildAltitudePointsForChart( + formattedData.vesselOrbitalPaths.filter(function(x){ return x.pathType == "maneuverNode" }), + formattedData.vesselSuborbitalPaths.filter(function(x){ return x.pathType == "maneuverNode" }), + "vesselManeuver", + rawChartData + ) + + this.buildAltitudePointsForChart( + formattedData.targetOrbitalPaths, + formattedData.targetSuborbitalPaths, + "target", + rawChartData + ) + + var sortedUniversalTimes = this.sortedUniversalTimes(rawChartData).sort() + if(sortedUniversalTimes.length > 0){ + var startTime = parseFloat(sortedUniversalTimes.first()) + var endTime = parseFloat(sortedUniversalTimes.last()) + + var totalDelta = sortedUniversalTimes.length + var intervalPeriod = Math.floor(totalDelta/maxLabelSections) + } + + for (var i = 0; i < sortedUniversalTimes.length; i++) { + var time = sortedUniversalTimes[i] + var deltaT = time - startTime + var dataPoint = rawChartData[time] + + var intervalSection = Math.floor(i/intervalPeriod) + if(!intervalsCovered[intervalSection] && intervalSection != 0){ + var label = "-" + TimeFormatters.durationString(deltaT.toFixed(0)) + intervalsCovered[intervalSection] = true + } else{ + var label = "" + } + + chartData.labels.push(label) + + chartData.series[0].data.push(dataPoint.vessel || null) + chartData.series[1].data.push(formattedData.atmosphericRadius || null) + chartData.series[2].data.push(dataPoint.vesselManeuver || null) + + if(formattedData.targetCurrentCoordinates){ + chartData.series[3].data.push(dataPoint.target || null) + } + } + + var chartOptions = { + lineSmooth: Chartist.Interpolation.cardinal({ fillHoles: true }), + low: 0, + series: { + 'atmosphere': { + showArea: true, + showPoint: false + }, + 'target': { + lineSmooth: Chartist.Interpolation.cardinal({ fillHoles: true }) + }, + 'vessel': { + lineSmooth: Chartist.Interpolation.cardinal({ fillHoles: true }) + }, + 'vesselManeuver': { + lineSmooth: Chartist.Interpolation.cardinal({ fillHoles: true }) + }, + } + } + + window.requestAnimationFrame(function(){ + this.altitudeEstimateChart.update(chartData, chartOptions) + }.bind(this)) + }, + + buildAltitudePointsForChart: function(orbitPaths, subOrbitalPaths, type, rawChartData){ + var altitudePoints = {} + + orbitPaths.forEach(function(orbitPath){ + orbitPath.altitudes.forEach(function(x){ altitudePoints[x.time] = x.altitude }) + }) + + subOrbitalPaths.forEach(function(orbitPath){ + orbitPath.altitudes.forEach(function(x){ altitudePoints[x.time] = x.altitude }) + }) + + var sortedUniversalTimes = this.sortedUniversalTimes(altitudePoints) + if(sortedUniversalTimes.length > 0){ + var startTime = parseFloat(sortedUniversalTimes[0]) + } + + for (var i = 0; i < sortedUniversalTimes.length; i++) { + var time = sortedUniversalTimes[i] + var altitude = altitudePoints[time] + + rawChartData[time] = rawChartData[time] || {} + rawChartData[time][type] = altitude + } + }, + + initializeMap: function(){ + this.positionMap = new PositionMap(this.datalink, this.map_id, { + lockOnVessel: false + }) + + var circleMarkerOptions = { + // fill: false, + color: '#FD7E23', + opacity: 1.0, + fillOpacity: 1.0, + radius: 5 + } + + var targetMarkerOptions = { + // fill: false, + color: this.targetColor, + opacity: 1.0, + fillOpacity: 1.0, + radius: 5 + } + + this.markers = { + vesselCoordinates : L.circleMarker([0,0], circleMarkerOptions), + vesselSuborbitalPaths: [], + vesselOrbitalPaths: [], + + targetCoordinates: L.circleMarker([0,0], targetMarkerOptions), + targetSuborbitalPaths: [], + targetOrbitalPaths: [], + } + + this.markers.vesselCoordinates.addTo(this.positionMap.map) + this.markers.targetCoordinates.addTo(this.positionMap.map) + }, + + initializeAltitudeEstimate: function(){ + var data = { + // A labels array that can contain any sort of values + labels: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri'], + // Our series array that contains series objects or in this case series data arrays + series: [ + [5, 2, 4, 2, 0] + ] + }; + + if($(this.altitudeEstimationId) == null){ + this.altitudeEstimateChart = null + } else{ + // Create a new line chart object where as first parameter we pass in a selector + // that is resolving to our chart container element. The Second parameter + // is the actual data object. + this.altitudeEstimateChart = new Chartist.Line("#" + this.altitudeEstimationId, data); + } + }, + + sortedUniversalTimes: function(data){ + var keys = Object.keys(data) + return keys.map(function(x){return parseFloat(x)}).sortBy(function(x){ x }).reverse() + }, +}) +var GroundTrackContainer = Class.create({ + initialize: function(map_id, altitudeEstimationId){ + this.mapDatalink = new Telemachus(settings.getHost(), settings.getPort()) + this.mapDatalink.rate = 2000 + this.orbitalPositionData = new OrbitalPositionData(this.mapDatalink) + this.groundTrackFormatter = new GroundTrackPositionDataFormatter(this.orbitalPositionData, this.mapDatalink) + + this.groundTrack = new GroundTrack(this.mapDatalink, this.groundTrackFormatter, map_id, altitudeEstimationId) + } +}) +var CameraFeed = Class.create({ + initialize: function(datalink, options){ + this.datalink = datalink + + this.options = options || {} + this.cameraData = [] + this.selectedCameraURL = "" + this.selectedCameraName = "" + this.initializeDatalink() + this.initializeObservers() + this.initializeImageRefresh() + }, + + initializeDatalink: function(){ + setInterval(function(){ + this.datalink.getCameraList(this.updateCameraList.bind(this)) + }.bind(this), 1000); + }, + + initializeImageRefresh: function(){ + setInterval(function(){ + if(!this.hasSelectedCamera()){ return } + this.options.cameraImage.src = this.options.cameraImage.getAttribute('data-base-url') + "?" + Math.floor((Math.random() * 100) + 1) + }.bind(this), 1000); + }, + + initializeObservers: function(){ + this.options.cameraList.observe('click', function(event){ + var clickedButton = event.findElement('button'); + if (clickedButton) { + this.selectCameraAndHideList( + clickedButton.getAttribute("data-image-name"), + clickedButton.getAttribute("data-image-url") + ) + } + }.bind(this)) + + this.options.showCameraList.observe('click', this.toggleCameraList.bind(this)) + }, + + hasSelectedCamera: function(){ + return this.selectedCameraURL != "" + }, + + setSelectedCamera: function(name, image_url){ + this.selectedCameraName = name + this.selectedCameraURL = image_url + this.options.cameraName.update(this.selectedCameraName) + this.options.cameraImage.setAttribute('src', this.selectedCameraURL) + this.options.cameraImage.setAttribute('data-base-url',this.selectedCameraURL) + }, + + selectCameraAndHideList: function(name, image_url){ + this.setSelectedCamera(name, image_url) + this.hideCameraList() + }, + + hideCameraList: function(){ + this.options.cameraListContainer.addClassName('hidden') + }, + + showCameraList: function(){ + this.options.cameraListContainer.removeClassName('hidden') + }, + + toggleCameraList: function(){ + this.options.cameraListContainer.toggleClassName('hidden') + }, + + updateCameraList: function(data){ + // console.log(data) + var sortedData = data.sort(function(a,b){ + //the flight camera should always be on top + if(a.name == "TelemachusFlightCamera"){ + return -1 + } + + //otherwise, compare normally + return a.name.localeCompare(b.name); + }); + + //clear existing child nodes in camera list + while (this.options.cameraList.hasChildNodes()){ + this.options.cameraList.removeChild(this.options.cameraList.lastChild); + } + + for (var i = 0; i < sortedData.length; i++) { + var cameraObject = sortedData[i] + + if(!this.hasSelectedCamera()){ + this.setSelectedCamera(cameraObject.name, cameraObject.url) + } + + var docFragment = document.createDocumentFragment() + var li = document.createElement('li') + var selectCamera = document.createElement("button") + selectCamera.setAttribute('data-image-name', cameraObject.name) + selectCamera.setAttribute('data-image-url', cameraObject.url) + if(this.selectedCameraURL == cameraObject.url){ + selectCamera.addClassName("selected") + } + selectCamera.update(cameraObject.name) + + li.appendChild(selectCamera) + docFragment.appendChild(li) + this.options.cameraList.appendChild(docFragment) + } + + this.cameraData = sortedData + } +}) \ No newline at end of file diff --git a/public/boost/index.html b/public/boost/index.html index 40ea74b..9ea3b95 100644 --- a/public/boost/index.html +++ b/public/boost/index.html @@ -11,6 +11,7 @@ + @@ -156,6 +157,15 @@ Mission Wall
  • + + +
  • + + + Camera Feed + +
  • +
  • diff --git a/public/camera/index.html b/public/camera/index.html new file mode 100644 index 0000000..13b1be8 --- /dev/null +++ b/public/camera/index.html @@ -0,0 +1,325 @@ + + + + Camera Feed + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    +

    Settings

    +
    + +
    + + + +
    + + +
    +
    + +
    +
    +
    + T+12:34:14 MET +
    + +

    Camera Feed

    + +
    + Year 1, Day 1 00:23:13 UT +
    +
    + +
    + + + +
    +
    + +
    +

    +
    + +
    +
    +
    +
    + +
    +
    + + +
    +
    + + + + + \ No newline at end of file diff --git a/public/docking/index.html b/public/docking/index.html index 6c276b6..dd76b74 100644 --- a/public/docking/index.html +++ b/public/docking/index.html @@ -11,6 +11,7 @@ + @@ -156,6 +157,15 @@ Mission Wall
  • + + +
  • + + + Camera Feed + +
  • +
  • @@ -227,6 +237,28 @@

    Docking

    + +
    +
    + +
    +

    +
    + +
    +
    +
    +
    + +
    +
  • + + +
  • + + + Camera Feed + +
  • +
  • diff --git a/public/index.html b/public/index.html index 1463b62..acadc53 100644 --- a/public/index.html +++ b/public/index.html @@ -11,6 +11,7 @@ + @@ -154,6 +155,15 @@ Mission Wall
  • + + +
  • + + + Camera Feed + +
  • +
  • diff --git a/public/landing/index.html b/public/landing/index.html index 12d35c6..c8af5c5 100644 --- a/public/landing/index.html +++ b/public/landing/index.html @@ -11,6 +11,7 @@ + @@ -156,6 +157,15 @@ Mission Wall
  • + + +
  • + + + Camera Feed + +
  • +
  • @@ -321,8 +331,30 @@

    Landing Module

    -
  • + + +
  • + + + Camera Feed + +
  • +
  • @@ -234,8 +244,32 @@

    Altitude Estimate

    -
  • + + +
  • + + + Camera Feed + +
  • +
  • diff --git a/public/staging-analysis/index.html b/public/staging-analysis/index.html index ab91c69..f3ac803 100644 --- a/public/staging-analysis/index.html +++ b/public/staging-analysis/index.html @@ -11,6 +11,7 @@ + @@ -156,6 +157,15 @@ Mission Wall
  • + + +
  • + + + Camera Feed + +
  • +
  • diff --git a/public/sysops/index.html b/public/sysops/index.html index 16eb972..113e5c1 100644 --- a/public/sysops/index.html +++ b/public/sysops/index.html @@ -11,6 +11,7 @@ + @@ -156,6 +157,15 @@ Mission Wall
  • + + +
  • + + + Camera Feed + +
  • +
  • diff --git a/public/test/index.html b/public/test/index.html index 548ef0d..f7f20ff 100644 --- a/public/test/index.html +++ b/public/test/index.html @@ -11,6 +11,7 @@ + @@ -156,6 +157,15 @@ Mission Wall
  • + + +
  • + + + Camera Feed + +
  • +
  • diff --git a/public/vessel-overview/index.html b/public/vessel-overview/index.html index f48112c..87441dd 100644 --- a/public/vessel-overview/index.html +++ b/public/vessel-overview/index.html @@ -11,6 +11,7 @@ + @@ -156,6 +157,15 @@ Mission Wall
  • + + +
  • + + + Camera Feed + +
  • +
  • @@ -358,12 +368,35 @@

    Vessel Overview

    -
    - - +
    +
    + +
    +

    +
    + +
    +
    +
    +
    +
    +
    -
    +
    +
    +
    + + +
    +
    @@ -510,6 +543,14 @@

    Altitude Estimate

    }, ]) + window.cameraFeed = new CameraFeed(window.datalink, { + cameraList: $('camera-list'), + cameraListContainer: $('camera-selector-container'), + showCameraList: $('show-camera-list'), + cameraName: $('camera-name'), + cameraImage: $('camera-image') + }) + }) From bbd75012d356dff9103ecd048189ddbff63f69be Mon Sep 17 00:00:00 2001 From: Thomas Cannon Date: Sat, 13 Aug 2016 19:32:37 -0400 Subject: [PATCH 13/18] Tweak camera feed image: make brighter, add more thinner scan line --- static/stylesheets/camera.css | 4 ++++ static/stylesheets/camera_module.css | 6 +++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/static/stylesheets/camera.css b/static/stylesheets/camera.css index 373feea..c24079c 100644 --- a/static/stylesheets/camera.css +++ b/static/stylesheets/camera.css @@ -12,4 +12,8 @@ .camera .camera-image-wrapper, #camera-image{ width: 500px; height: 500px; +} + +.scanlines:after { + background-size: 100% 3px; } \ No newline at end of file diff --git a/static/stylesheets/camera_module.css b/static/stylesheets/camera_module.css index f462442..bcc0bd9 100644 --- a/static/stylesheets/camera_module.css +++ b/static/stylesheets/camera_module.css @@ -74,6 +74,10 @@ border-radius: 3px; } +.camera .camera-image-wrapper img{ + -webkit-filter: brightness(1.3); +} + .camera .camera-selector{ background-color: #3A1604; position: absolute; @@ -122,7 +126,7 @@ z-index: 1; background: -webkit-linear-gradient(top, transparent 50%, rgba(0, 0, 0, 0.3) 51%); background: linear-gradient(to bottom, transparent 50%, rgba(0, 0, 0, 0.3) 51%); - background-size: 100% 4px; + background-size: 100% 2px; -webkit-animation: none; animation: none; } From 08efc82c728120a7259419244da89c5347efb2c5 Mon Sep 17 00:00:00 2001 From: Thomas Cannon Date: Sat, 13 Aug 2016 19:33:14 -0400 Subject: [PATCH 14/18] compile --- public/assets/stylesheets/camera.css | 4 ++++ public/assets/stylesheets/camera_module.css | 6 +++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/public/assets/stylesheets/camera.css b/public/assets/stylesheets/camera.css index 373feea..c24079c 100644 --- a/public/assets/stylesheets/camera.css +++ b/public/assets/stylesheets/camera.css @@ -12,4 +12,8 @@ .camera .camera-image-wrapper, #camera-image{ width: 500px; height: 500px; +} + +.scanlines:after { + background-size: 100% 3px; } \ No newline at end of file diff --git a/public/assets/stylesheets/camera_module.css b/public/assets/stylesheets/camera_module.css index f462442..bcc0bd9 100644 --- a/public/assets/stylesheets/camera_module.css +++ b/public/assets/stylesheets/camera_module.css @@ -74,6 +74,10 @@ border-radius: 3px; } +.camera .camera-image-wrapper img{ + -webkit-filter: brightness(1.3); +} + .camera .camera-selector{ background-color: #3A1604; position: absolute; @@ -122,7 +126,7 @@ z-index: 1; background: -webkit-linear-gradient(top, transparent 50%, rgba(0, 0, 0, 0.3) 51%); background: linear-gradient(to bottom, transparent 50%, rgba(0, 0, 0, 0.3) 51%); - background-size: 100% 4px; + background-size: 100% 2px; -webkit-animation: none; animation: none; } From 045ff29e74f5a41ad520b3547c25c012c7ce25a1 Mon Sep 17 00:00:00 2001 From: Thomas Cannon Date: Sun, 14 Aug 2016 10:55:20 -0400 Subject: [PATCH 15/18] Clean up camera parital to remove sample data --- layouts/camera.html | 3 --- 1 file changed, 3 deletions(-) diff --git a/layouts/camera.html b/layouts/camera.html index b0df4d4..cdf3764 100644 --- a/layouts/camera.html +++ b/layouts/camera.html @@ -3,9 +3,6 @@
    From b0987590868c13b83ecae204d5f1efe0b228e681 Mon Sep 17 00:00:00 2001 From: Thomas Cannon Date: Sun, 14 Aug 2016 10:55:36 -0400 Subject: [PATCH 16/18] compile --- public/ascension/index.html | 3 --- public/camera/index.html | 3 --- public/docking/index.html | 3 --- public/landing/index.html | 3 --- public/mission-wall/index.html | 3 --- public/vessel-overview/index.html | 3 --- 6 files changed, 18 deletions(-) diff --git a/public/ascension/index.html b/public/ascension/index.html index 5233d38..46cc16b 100644 --- a/public/ascension/index.html +++ b/public/ascension/index.html @@ -308,9 +308,6 @@

    Ascension Module

    diff --git a/public/camera/index.html b/public/camera/index.html index 13b1be8..3eea2bd 100644 --- a/public/camera/index.html +++ b/public/camera/index.html @@ -238,9 +238,6 @@

    Camera Feed

    diff --git a/public/docking/index.html b/public/docking/index.html index dd76b74..1949ff0 100644 --- a/public/docking/index.html +++ b/public/docking/index.html @@ -243,9 +243,6 @@

    Docking

    diff --git a/public/landing/index.html b/public/landing/index.html index c8af5c5..689ac7d 100644 --- a/public/landing/index.html +++ b/public/landing/index.html @@ -337,9 +337,6 @@

    Landing Module

    diff --git a/public/mission-wall/index.html b/public/mission-wall/index.html index 59bfab6..44eae8f 100644 --- a/public/mission-wall/index.html +++ b/public/mission-wall/index.html @@ -254,9 +254,6 @@

    Altitude Estimate

    diff --git a/public/vessel-overview/index.html b/public/vessel-overview/index.html index 87441dd..cbafd85 100644 --- a/public/vessel-overview/index.html +++ b/public/vessel-overview/index.html @@ -373,9 +373,6 @@

    Vessel Overview

    From 46b2b18eadd108004e8096b3f1afad9ef9cf8032 Mon Sep 17 00:00:00 2001 From: Thomas Cannon Date: Wed, 28 Sep 2016 23:23:37 -0400 Subject: [PATCH 17/18] Include current timestamp in cachebuster for camera feed module --- static/js/camera_feed.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/static/js/camera_feed.js b/static/js/camera_feed.js index 1d6e46d..69617e3 100644 --- a/static/js/camera_feed.js +++ b/static/js/camera_feed.js @@ -20,7 +20,7 @@ var CameraFeed = Class.create({ initializeImageRefresh: function(){ setInterval(function(){ if(!this.hasSelectedCamera()){ return } - this.options.cameraImage.src = this.options.cameraImage.getAttribute('data-base-url') + "?" + Math.floor((Math.random() * 100) + 1) + this.options.cameraImage.src = this.options.cameraImage.getAttribute('data-base-url') + "?" + (Date.now() + Math.floor((Math.random() * 100) + 1)) }.bind(this), 1000); }, From 9ec0a1d8a403688ced378212ef5c70f5cfc69bd2 Mon Sep 17 00:00:00 2001 From: Thomas Cannon Date: Wed, 28 Sep 2016 23:26:17 -0400 Subject: [PATCH 18/18] compile --- public/assets/ascension.js | 2 +- public/assets/camera.js | 2 +- public/assets/docking.js | 2 +- public/assets/js/camera_feed.js | 2 +- public/assets/landing.js | 2 +- public/assets/mission-wall.js | 2 +- public/assets/vessel-overview.js | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/public/assets/ascension.js b/public/assets/ascension.js index cc41b81..8fc6209 100644 --- a/public/assets/ascension.js +++ b/public/assets/ascension.js @@ -9779,7 +9779,7 @@ var CameraFeed = Class.create({ initializeImageRefresh: function(){ setInterval(function(){ if(!this.hasSelectedCamera()){ return } - this.options.cameraImage.src = this.options.cameraImage.getAttribute('data-base-url') + "?" + Math.floor((Math.random() * 100) + 1) + this.options.cameraImage.src = this.options.cameraImage.getAttribute('data-base-url') + "?" + (Date.now() + Math.floor((Math.random() * 100) + 1)) }.bind(this), 1000); }, diff --git a/public/assets/camera.js b/public/assets/camera.js index 31ab39f..ac78e54 100644 --- a/public/assets/camera.js +++ b/public/assets/camera.js @@ -8344,7 +8344,7 @@ var CameraFeed = Class.create({ initializeImageRefresh: function(){ setInterval(function(){ if(!this.hasSelectedCamera()){ return } - this.options.cameraImage.src = this.options.cameraImage.getAttribute('data-base-url') + "?" + Math.floor((Math.random() * 100) + 1) + this.options.cameraImage.src = this.options.cameraImage.getAttribute('data-base-url') + "?" + (Date.now() + Math.floor((Math.random() * 100) + 1)) }.bind(this), 1000); }, diff --git a/public/assets/docking.js b/public/assets/docking.js index 2853216..4a5c55a 100644 --- a/public/assets/docking.js +++ b/public/assets/docking.js @@ -11193,7 +11193,7 @@ var CameraFeed = Class.create({ initializeImageRefresh: function(){ setInterval(function(){ if(!this.hasSelectedCamera()){ return } - this.options.cameraImage.src = this.options.cameraImage.getAttribute('data-base-url') + "?" + Math.floor((Math.random() * 100) + 1) + this.options.cameraImage.src = this.options.cameraImage.getAttribute('data-base-url') + "?" + (Date.now() + Math.floor((Math.random() * 100) + 1)) }.bind(this), 1000); }, diff --git a/public/assets/js/camera_feed.js b/public/assets/js/camera_feed.js index 1d6e46d..69617e3 100644 --- a/public/assets/js/camera_feed.js +++ b/public/assets/js/camera_feed.js @@ -20,7 +20,7 @@ var CameraFeed = Class.create({ initializeImageRefresh: function(){ setInterval(function(){ if(!this.hasSelectedCamera()){ return } - this.options.cameraImage.src = this.options.cameraImage.getAttribute('data-base-url') + "?" + Math.floor((Math.random() * 100) + 1) + this.options.cameraImage.src = this.options.cameraImage.getAttribute('data-base-url') + "?" + (Date.now() + Math.floor((Math.random() * 100) + 1)) }.bind(this), 1000); }, diff --git a/public/assets/landing.js b/public/assets/landing.js index 8462c60..83a951a 100644 --- a/public/assets/landing.js +++ b/public/assets/landing.js @@ -10523,7 +10523,7 @@ var CameraFeed = Class.create({ initializeImageRefresh: function(){ setInterval(function(){ if(!this.hasSelectedCamera()){ return } - this.options.cameraImage.src = this.options.cameraImage.getAttribute('data-base-url') + "?" + Math.floor((Math.random() * 100) + 1) + this.options.cameraImage.src = this.options.cameraImage.getAttribute('data-base-url') + "?" + (Date.now() + Math.floor((Math.random() * 100) + 1)) }.bind(this), 1000); }, diff --git a/public/assets/mission-wall.js b/public/assets/mission-wall.js index 0d92936..aa6f2a6 100644 --- a/public/assets/mission-wall.js +++ b/public/assets/mission-wall.js @@ -12447,7 +12447,7 @@ var CameraFeed = Class.create({ initializeImageRefresh: function(){ setInterval(function(){ if(!this.hasSelectedCamera()){ return } - this.options.cameraImage.src = this.options.cameraImage.getAttribute('data-base-url') + "?" + Math.floor((Math.random() * 100) + 1) + this.options.cameraImage.src = this.options.cameraImage.getAttribute('data-base-url') + "?" + (Date.now() + Math.floor((Math.random() * 100) + 1)) }.bind(this), 1000); }, diff --git a/public/assets/vessel-overview.js b/public/assets/vessel-overview.js index 9b7e3d6..b1bf9c2 100644 --- a/public/assets/vessel-overview.js +++ b/public/assets/vessel-overview.js @@ -9296,7 +9296,7 @@ var CameraFeed = Class.create({ initializeImageRefresh: function(){ setInterval(function(){ if(!this.hasSelectedCamera()){ return } - this.options.cameraImage.src = this.options.cameraImage.getAttribute('data-base-url') + "?" + Math.floor((Math.random() * 100) + 1) + this.options.cameraImage.src = this.options.cameraImage.getAttribute('data-base-url') + "?" + (Date.now() + Math.floor((Math.random() * 100) + 1)) }.bind(this), 1000); },
  • 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 I3$Bm;9}PuG_W%F@ delta 48145 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 diff --git a/public/assets/images/Map-310px.png b/public/assets/images/Map-310px.png index fc08aa0682e4de5aaecc9d0edc751f38063a93b3..008a9af999c7ab8a2e353cd622cc3098db208072 100644 GIT binary patch delta 50309 zcmX6^c_7pO|F47!lf*DbC8@BH+%uI*eH8h0kZZ1}%zX{x9b%ZHC=^jiD#G}pfX7M5!05us;Z7+p73yRWvbkqV1%1Urq zwUm^Fbmm7#Q*4DcfBN_a-7}beay0r=jE+)JbHYM$q21b*YcF#;T{TavvRn_lZ@PUF zp?|^V`MM*3&e$)tM&byTlmiDdb=%z3G~@djvpuo7RN;T(@4YBUW455e673+k*SS%IuL$^n)C+i;y>ziPLHJ|B?&i|4c&WaZ!483g3qO98)S5e)g;<`hCwIG^w~!>gJZ6 zs#vAxOdi>((mPN$e~<0v9b;dikGnLgdD-AWofZZ%`M%=y+5#l=sN9;Cg6U2lv!-rM zQ{Tzhtw&T|xxFyXan~B9$Pd2N?N{g4ssZ@wRGd0t=r)SU7wRQljPNUWshDqRXeD?Y`kOz}M&r z1Z=MJz65MdNMTl<^3$K;R&A%8zg*x~{kmMf7TX!SaQ~rjx|3cJ&Hiirc>~jc7ageO zg`{|BX!qs8*Q5aNu0G{dKPoINuP~ zS5H!ZameOeZo26Uo&3EnbfznC5p#N1wDAm=bJ??3@>qdRipfcym7u|ry^kh`Y^Y%m zl&w^}w}y%u&dl+TqUZPv)l`G1?Yn`_DpfHM$M{KSdHGu zLY5?)Cj;=FLa>(U*6^JvTg!$(bHf9 ziPsu;w`^`!Bo}e47~5r5i6F`%5Rgp<@cQP2hwIlD!w-r zH&^C<$YUNsP}|)K2?|jSJngJZgvzGV55{|oJNcNWA!TcrY@FOeF8C&4)f@^oI;!u1 zrX~$GMX-`wD!XjStMcs{&Y$*Q>y&h=S#2FjVo@we;h<6!2COy011+*6v{%Gbe<`u@qMlr`aK zS1{~_-9lEFo=YLy+ybEhEZI;<#3GCQ#LfvIPck&(qDbw_uN@k)l+WdQQ?-sI*LB(p z$)RN?rgHYx(6Ac*?QD#UIX+n|w0;2LawI%)Q0=Np3x>rhgjofKqSx4|Y`yv#XABEc zR<9EkvBvya$X}Iev9E1$mBVU@pdZ?qF0>vibm$|NSammz{p6@YkBbPZptqX`0)qz& zUe-zDL9yQhz1sp^?_yZeMs8rB3K-y=3y zzHjD=b=e@c+&{K_3dNddRH$Ml!=R7q2}HZh}OY{ygo0>W?*BGL7b~N1^stT zKdzqm?|rdvdlYI}K952CrlU-UgPYx=D=Y`c1{;dj3B-8#&B3D<+WmxDNFtoW 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 delta 50312 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Ï_^r=wrP=4D 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 ZK1DUj2W53d5I)|^@QSg1(Pg`^{{!b51rPuL diff --git a/public/assets/images/Mission Wall-310px.png b/public/assets/images/Mission Wall-310px.png index 7109fbc5f05051eb1fb2cc7e049048949ca558c0..159475b4eadfa02e85bcbd93005839aa9fcffdc9 100644 GIT binary patch delta 62799 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 Ywa8ijfxUkR_;c|W`}4&=dp!960KP)f@c;k- delta 62917 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Ƿv#`lFL_?i+Z$vdRYE5Mp zuC=@f-L8p%6JH2oRMZN^&GKMB}><}^I zidu9o72ErS-bb-_pHz3qE~SP;<-{#oc#$fC@qQNfBrk~js@jJ-Xw`exHMvK*38pt( zYwpMuNhoziqLxB?a@B3gOW!mWR3Gb}mZ0PZEH&kaF-fi{;)d^1TDe@>W$j=jG;=As zBWbXPykP-0c_|)CngPNr(X80KB$35)7!au~kyAL>zhcx*VTx#l+K^3(P9)9w6q0QAx-lX7sB_k^^J*=rDkaPF~q*%zKEavrV`Nwnljjb1u!zsLZyw62|g z=wawzWy?z*ETOC$v4SN4XbgL1B{mAr3VzITPK01aiUc}ma%S(?Db8mbxWcJK8K}_K zKO`M6;AHwc=sC$k=Q+OaUct|rA(Y=Px_LQ0WcD}X-cNIElr~h3*_!)d84vIG%G^`t zuJALyNEJBUO&p9gG^ywe6|j7f1+njIiirK-6jo4n?OPe`QWcUCv5{O*torRP;HebO^9)C@cbi4|2N4>u05M=g?RJKv)-AyQG#>3w-+<{gY=<2F z3|CIdw~OG7^#lV|i|$_9Q!y))7s+WYOO>oeYJ%a9DOI&)_Mietq%jfNtJ6IqWwL() zUT8(&+=+i2gI7v@mP==9^_6f=r+taS$7`p|Ke*U<9PuEqxusfJrriiih=E`}0v{^* zF*%}N!t+1|dUtsDMN+Fwzl~X1eQY(Brz&LUT{D(213@c{!(PN7JNpbssd% za-gJ4H6`3=K_1qYTy*7-sRF=_D@Q))?+vK*~N|(%X`TgnmTqtus$x(5`b_7 ztqa~gNR~^7&0NJ{-l8t@xN=a{ zzW?pGcX&F>>7!GDDC}r5<;s#Ptv2xr(7Wv5DPw4O>~WLyO|N6v)_fjsB+5lS+cEtz zfu{e2%>e4V?iyNcQqGC&H|G4lC>+QE=*aW>+-9dn0G2)|k`o5K8|pJP51Alw2wSO) zJWIlmoF4Y67is1&2&pfHkWx^ZaWq}*=f6qcU}N;Q&d$8^Bh5(^y|)WTKO+2?P02s+ zEWWQ9GlB?=iM~}MxtGy{a)mYSzdW|+%?YQ$A-G%pLz>MZqzB+^dxxKC^vAR2AP1z+ zOW;07TM^@d9F@E^N45#}D0|#`^0iGvrRmPkj<%xPVSs1mxc#|1p~hQRV?UJ+371{=Rq&AH%cz!1T13 zUfb#1MAVf65z?vTm)d$8y+(WWeTlPnsO;!TocgghS?>4rbaX{dT5|lANGD*sVll*epFlG4W6Jjci8!*{@?oY15^6C#;WGAuaYeQ_}+$} zl(`OCBZ1raS6B%8(QKuarDX3jlE3$Y+fJ(DuAl_dQy$j65yo9@QiK-;eJhFpTy%J9 zki+GPL-CL)(=4TX!SKJjy9BXCZWqRHOdR9rwJIG@P}R3!lh9Y)N zr%wDpz5)9>!bY*AVIJsobu@G_OOJhz`K@pis$I3z&9yPt-Pb+$%h*7did9%=Ua_`j7*^hh z_N$^Sk#9u=vbsh=G3PTbziU5wos&~>^?#(AvBTza)w_>UO8D533*coY*oXPJtP&IW zo(U-tBz9bbd(wf`McY{CdrukX;8oF*}!Yp;At3^ku&x0%XMy8v~gdd+paloq!I zz2f`sszV|4HVYdHNedGvGH(S@=8X?JA0$mr5z6l*_N5kdh^%Ay(NFtP7lS;GI{xdJ zi!-RUx_J>VaU->cv+|)by%QIb`7NxjR?8VIpDbZ?11@Qc(R~ieZe9@%YPG+*43Z6~ z`e_eN`rhCN2VFI0d6vQ!xE86NehwSlkrqMJxzpNviY2jOdN!!hP{@1R{&CHQipia- zr;z7XiH)M$_G>{y3t|0@PZU^%qX)G!#ig%JOJb1hGU8b!WUd;@wN$A&{Ha*y5@~A= zE};t18JXL8^1U&e^^mUr9#Vc-9mnQJj;;TgcOvtN{duCH_f0L4;IKBOQ(k>UwuI*~ zYL_llF#47>8ON+u`Z}8mqOC~TRY*pKjwcqOXb{-cv*_N0^Jz{q=3qw96TahQ z>j6chg&#)H%$!N>gLS1tZ-Z^G8Rs`#aBp;Qa-vgYy7(1qD-T2tfJn$=O>;o~@XUjH z&g3fucYfGa`S8?t^&+tJ(+HZY7HyD;kNg232Kv7 z)yQV-PtA^lf8Zb^FxB-^8EV?d=ODTm+PhRR)bojXPdNRmuo`pzC{w`%7rO2Y*&FtP z)wdRoX={dd00_h*VI!>F&u8miZ7(ip?Hh7_gum-a%uv+xKqxrCvW#ywmzE#3n;j?# zcaY4Q&Ei;dYT@dYxvs(nEpTahd&NVCfHjS_7E(7e4hK*1bRIz&D$ip=%8*m!PW}U5 z*81OLq8`tt{GoG1H=l+2wYH}hIU-3A4Y_mY#(>X;|1>oQ7~R4$#ZpbA>ol2xf9 zhF59&IfI@btgpBY_H}Acc1N^>LrCG1;PL% z3Sh{WmkK?JTco}L^PeQd4vps|qKvh9Xg5XdhxXd~s7P^$mY!kv?>CR8Rp&&dqcIbe z)g)ZC3ETfV5`nvS&wLJ*e_=-cP#$HfbP*}dYoQY1n=jAQ4n$7Ve!GxIlsQ<{N09c* zVDzS}UM{24M3XN3ZTzXqXtW&OdW$Xw^17<63-wj4CcJ`T41nQI-5)1PDY91D!3dr;M-MjQPlGb>TRdqyz!>~86QjlJ6`7pLA< zs-E2tNtZt(Mx)6={)vD((gD|&?W3PKf7YN1MxxUI=fsyCn96!?j4e)J>)+YO=`{vec}8jzCSbxETCSzc=-#HO@Qx zf#;kX)OPcPoQa{`oJis=edk0|T)$D#smcGN4eWEi;1u{H$0E=58iva>okYfj7i$v* zt}2SCf_K?!0Y5@K2$U_`?hN_n{IQ@NUKV%RA)U`|eMGijCSDUm^KWhv3C(_DFuGv7 zTOFrrn?tyjJ86Q8g*fbaPCuW_M0+5@a9+DGO1V7;Z?hEg0%oUK$)9&i{kwIH>$#|z z$R2qunCYC8Ip+i$b~WtBEl4ckAJmut^jRlpV}RNtKC5%QVEd9-zFhYc6JRCB0winX z+Aea~{O~9?34F<6fh-kj`;YlNYEP}>z4Q>tt?Hs6DRQwdmGI-bKl|^`40Y~(?YJcV zt#Ixmi4MM7rTuRcU6wdqS?pkCwDtQ?UVExwc0==4N!K6pgIKy855gi^-Nt{ZNQ?*u z=FAt*NEP^G5az@}94<1NnKh{VxhwwsAPN;f)>(!cdngQH*1u>Z0yQf+U$C9kYfWi9 zhZVOErl_4Zn~p+CSn&^UgBk8e68S5`g{O?G%Q(r=9Dk1|=XFjHq`Z91$hjx4kxq}$(=+6l+pnq^ zp3+o2+Fe^p@9(Z&QSPTd8+<8=sz0Nnn`T{zvl;4W{aK_ZvMvo?=UG601|%zQhfH|>QC?oqX@nEpJ!htG9kB$AmpFXib}gW24cWf2WB>g1a(~ z)#d-G<66kQC`_+ssA_}>A;Shb^A;-K-OxM2SC;Sb%T>=UYHp;UkH-}J?MY9fy8Tw@ zEhK@HTS^?NaxNQC*VY(`fMc)S^`fdK@SaNtk$unZyyhn#MJ-*%_Hd{09?T3!nw9++ z=}!~4Z#$g?T$*U$4WOLUv?6v6;VidGk&57Z_t+^MI0FY22TBr3UgQxEzrY*n#H@n z&rF0CsQ#K3dvQoNIP@WZfJd4Ov(q%^1~k!(3M=g+^Izru*53yWxM}%SZw>ZsK72Wz z3kWM|Bv^B#f6KhzBK^5NGCIx8>}#L>Q8%wa1}*T|%*r{kK&ZK?KcV9J!`nL_A5HbA z^XCNO4teyjY^!9;T zMFUA#^T@y}8^vZ@mfLEd*_Ds_lC*9E5J!8o7$Tzehin%FnAQ|z7GXqi`y@n2gjoK4c1E=y5d8?!ypvCN`t-42A;p-~lQ*tKxm&7f5gr~FJl2uw7xrrH+AH}bH+`R!rI!3G3AH8@ z_E6C9`3QdU6weJ|TTbu>w^vmHfI;hFq24Tg2cd&QcrFb&H7&gFYFMT9K1}J&hKAZ7 z!>^!pwIkm5a`k8oREg;4LgIh{RQ)z|Akwewcj-V2FZL^ybxX%=+nxnG)DKsQ*MSOGL z#~ygBv$p2&1?KozSXW*JNsL_F9EZs4XD2>E8b|UVy>XiR%=ivbNRU=7wWUA(GGu0+ z16@T+owi-X^H>2;R}5|hT(5827J;hG&ToC4rfv|Ml4P}Wjo>t#L6o=qbG)-uG9CJN z!TI6*-RIX;S%Bu>tLOniD98K0&>*wM$0ZK`CAoj8?R?>9! z`yv?nP|Gtpq9EN9{>u8K+aPCN8PA1rnzWUv|KrgJMMUs!PQvph#G)x(4t!7>vgLQB z6qK%a#QUxV12A!h8QO$&!j_T04gDU6XusM`*<)RUvg&u-PBf=}H-Y>oGR?{N&3>U$ zKPXR6ORGSIMaY6DA6wjfm;EZ$nM)zGNGt*B;fwp8$R$BlZkSt-Ufr0&YR(j;D<0JN zGCUxOw-`(pRq#P_Wpu~reB@*%jMi&?`EdYe@Ii7gu&6t!jmi$}vu3^7&z3~*g2cK1 z#){R|UEY~unX?_mmLEzR{M1;woKq~4{MC(D*UiG=QiMM*T5~^1^BQP#yt%KYBmJYx z@JTNm)GIIKf!w9Ow~s<8m!##ZVmcpaQIW)vDv+ze6t(;veq$$#cGa|xGpf>xnXhJ*mZnES3mVmJv?3C7 zX~S1)Z|@i@)wnST{g^|3OJTH+T16}$OMoCOYQUlA8}8XVEtrv!tq%3|@&A+d2@k~# z`zHGKPxHv^uiZw;i#Hzcd>;5ts%HJzoB8_+_jLzSLXav^yEoc{R!Z@kgLfk@`zOsE z6HtW-2}CF=3kcmf*-N>~mlRbkTP3>&w_q$4pQLt28VV7O9rNU0ZOmgt#&0QU1GQM9 zoUazT4Q?eI+5wu%c^jY6$f*Zm%sHvx`-eow+1$=$`If`GU$!oaJ=?=OsX0f^3bO~M zn3nyXzoj@JeVe0?c64Ah`<{A%WpC%SsWs1l^iGXzfA!YG6vofMGCEGcAoXLI*b$|v zBbQIfaE8HeI~Y~b!DagJ zR5MV#BPRMxb;&VE6k92#$r}Tzy!hJj&ywm3 z9({+b0q5!La(}UEAQ$qdj40Yq<}hKsOrv+!wAvxqqo(@ZrMd2Yf{x#K}6 z!aQ!glKx;Ge&>jc?1-pd&BpB2G1qP7|nDKoAUf+P@y z4Yz0&2)3Zk^0>)~ru0TdL66X+%eiE%f)3U9NrA{{Z{WHhu=o+f3;6&n+SXQBaPm)b z6djKKs8(~M%89hP1iukZk1q3BhZXQHAIN?~#*JSF@|`YPMP(CmfHMk*sHd=r**nqh zNBBtDm;sIv)_rCgN1lZ~Mkvg)HVAqiwYwH;94=k>Dt|M!%dTZgrqtR^94lv)q;6Vj zuP9)q^m<4X0`~QYsRrcYk`5I4q50M)=L+UEYx`uZY0cAZa1xhl2>Oa1CIjTgImOj< z8Usi8lfNgL4B~uJd^8LvS^J^2-Mpr`Xh-$W3^|?m_g1tzXk79evab%DIgQa8gl#^6 zsXH-yjX(*Yf<3#^!~G@s$j;59a_=_4ez)Ka16fLW^-G0WK$JqI^4^{OhpMhW+|M8u zVZqCkV2>~QLP{FV1FvIm_R2Kr$(^zEuKj3tmccIiZA}v+P;~rP-&3c=bSTGlcse+E zS6(Md^OtXgTodJPDcGV%=J^A1Jk zPJwx%v{`at4v#8Yi^*w&tWe~vpn9pJ_+5+AfxIo>8kb*@>DlJ5l~kur^io~o6j}T? z*^l-uGKs`}DhHqyq{xj%3i0JCAhjGV3`F%kUlnmE8Zg&Lhm54dVTKh2duTMp4V;v6 z6mmwWW468*J$Kmr&-(d`x|J%L(m|^kvzPWo3OgNsrNB10&G(-j8%^Z`yqJcQ+d$z? zkYr;>5!c$C_Vw~gPQtMgqqyW?BaUAxdF z#aail|0x~3wVt5Zq$y?N&jyGMP7_=q4GS&K2}!*6D5ui~;xG!4(Yo{;5j={vTcG!b z$V8lF!`i(Ernu0K^zq64@!6HaM?wMGr>nhXU#y?Q&9xE@qqhyL{*e~|Q+Tg&x47}o zSzm&Ye~;$i9M*oNbN=4~rVw4v_2@&C)IACOXfcOlAqdx?x(LVx{;P%?gU5d-viNkq zvQTc9giB-r8D*J|dFkT8_+t;)FBYc8xWd>gB0!ecWS%Q>su@iuE9_uj=yYPAwMR^5 z-dbl&RfibCu`|-n_v7abkIBh$q7&X)Av^nyQInhD2}9uVyvgmLoqVjUEK8iVz#Vb{ zn8_2WUk5gUVpzitX^lzR*NXEfZ&gA&-5Xo1Z|>)C9k*hw$Z9Wc^!Qri`oCR)_0FHs zGzsGpy4gxl+rlEMK_ar4|F<(VH7vknnUso{&gl@HQmtA}zXd0lRC0shfXvq5@ov^* zO~!KPI-a>-aYXvI*TNB*;lWJo^_CM_d8XH<0mJ5Yo->FTvOu0Zj?8VV>=JPq9n{b! z6On80?W;!N+n~5$#376HnWtUxBz|q&uaUss=>i!eO>L%qEvl8PbFZdbxRKFTZaI0* zp&8`F)oM}Sw&+(DJihSz%e|!6MlS`e^yb6rA7?L3w+3*kOHC?v!*<@nL=FdVOd<+c z#JN_v=Rk#0Ce%DyygVH1hr z@XCHs`a0Mo1~T4bpyw<$$5-#BnC0s$ndf)H_sO3jX_RwEu9BySz21&GCL&1?hSXW` ziITHI)DmJj^nj_63a*W_JCnJ99I(P86K7VQy2n~Kt{IL({r8 z3gFgvTzC{D2I&Z=rKd?rlnjsXjq<0h=1TfVcIXzb2Q9yt-XgMux+ID9d4uW(8?nf zn$p}!QDuEJ8|yb)h978Vp1VtVr<-c*x{+tD*m5?-@vjrWO2MH9f|s>5h{*WZv*2&X zqN5uZDANCccu!a7s^S##Q~BKF-S*b;>>^!dLDm9k=8Yqt z*|ZYnMuEAJql77SjA+wK-AlM%3r@~LLmp)f{`8Q^?T}ff(-d>QjWQ!3>`|j!t%#UwJq5NLYddSe zVoYApK6K3ogbW2dXI=|a3Qfdct5KzAj6-#SpBi-ov5%WL)~m68{6X>V0V}2R6OVt6 z%(Q7}7E~S`*l;!b!nnk5oF@Lb?TB0k87corkCuP&wc;_oK^K`3?7PaoVyFkY{2qHs zM6{~>f6U_d!%skYePz@j*OKFeUny&h&OdO?OnsemT!=N^CCvWjsq7x$fR0a^%ZyG1 z0 zB-kNObCQUT5sq#x!3HmpWjw_k{`=2A6;6v_9UcU$lV3Pv7q%7uRxo@t&`TqU{-e>2$E|2H)Y0swiR}|F- zapdjDkIE7^Hl8QLCb+U)_vpPK$4ptdHO5_Kv$+zv-oKR9zQPy%kPapBrKa7wrcn%& z+Y~SFoPCc_uhy^v_BYd4=y5B<*nA8=Is@tX4E2!pj;NT3tluyp5Jc!oD~uqS&WDmotarP}wi^Qzs$ zCtPpOM)plBUcKc3ZFOX)EDJc@`cRT6g4~a~|8YUPL%->M`7dr-{%Kz9mupEgj%xxC zvoH=4XMhJvI2f)KG4%-o5!1rAIC7WRxfvkGY0Ja?+1U#UyFk>(tTPUpD61Fbdft@% zqqIQJn{%8F<);ELTZ8G)x7pu?cF~=kE~@F-Z+|+LzZb%+R$NwwR|oa6ziN!vZ2H@< z`>$@BGz;CE*|iki${ZB=uu7GG?XkuD9-AiRBg_W5D(aq`*$SJstnhqPPyCqb*{+Wl zrH?0{$9QXB1`v02L0j~N)`)D`jpoNi=-#!qv^dP2IKFzPApxX?M`o({bzJF`mILQ? zfwO6v2;WQ)U!XW@r#Q9x()@A;|A|Q%4a#xqdbamHa&%xy%9G?nyGMx5)=0S^zyDCqO0KaRl<^x!hOA%Wyl^c3c|OwjcRctYiA&z z&rc~9&t}2fh}%6Px5Z~Tm=M$SxX6dLCiK+hxgon~m}cr) zY`b;sLPEcnJEZTonAg%DZS z{>yWSr&ERRhQaer=rypo=43QSy}Yk)MYuc%F6KKCRpHu9Ej(BaCdSF66FM5I)eg5X zUWu6J8DhTH zHq4sKb=6KX$Cf|jHAn#X_$l{Jj8AOIFn^@5^|`)Z2~aBmoNB?DzY7H?_;Y+VmOrJ# z_OG65qB)=N?HaE8Uewq1c)$b0=@i9B?6K(;9=YWr{-Yn_n!qt#!8GxM4FxWN0vE(@ z$V_X;?cHC)1SvkYp1zqetut0c`7w0G-D!q<{Div#bLNqB)#e5dkT3Y_CH9|pVf%gU zn!g!)+oSiZ*2PL1ZJF=n(NKgaI2q+8qgVc2>k|L1`-vAy%lq^%1YuUEt}qC69GPZRE0=Tckr!RBkrQdkrGhkmSbwuK|UX1=YI-uVe>!RSeDPm{gxKSF|A zmkwZ#Q!u_;hHL=JuzU@VGLB1Y>oi}UZcw3Cg4-Szwe{T+jwi$ocMDm~#9k4uiTWqR zH$B~sVP-@j3S?@w1!fw9uOkWJIJIYT@5Vd*kS#Tx2E2_1neGQ>w{uO}P5X zV^0F27k)_a$dqY{SZ8kage)*I#y^Bz4B7c!U=bjyz~u-P)lf~$j*3%!2xy*7r`jTb zvr&P5f-HrX@$XFKNN5!9oU67K!IjK&h{Xa}I+^RzxT}i1u%k{lQvQ$nB!kEt)Mf>$ z9$&IU9qw;q&qOv1v;61$(eh@f9@xolR2<$=Ob9+$b1|~5kAd7cslB1UeNm&9 zINXZN=jvH`(h~FKIl*z&m|fsj*h6hfh>r64+vh@RDqHc6Pe_qJB%ewdT))iHmTI6T zMQBdP&IcRrZLC7Z%ZQW95BLtBUb8jRrw%{e7zLkBD^*!jR4KJz7$d(wB9 zd-fk6K7Q1?&L1yqNC|du!K}uc-j=tvn`4X9wW%Vjoe#7+;URz!Qv}sd8LNzJU1EVx z(k|GczH_BsMVM@Cd}LKgNet9r+<9M&?7mM(?E0M4o=7hWYrjK$*ST%ZPPdsRr*Kb;U0swiUlyVFc)zyEG+~}{3uv& zx1UzZNTXOdb|Vj>z)n@nL8$Du-F^2#7mv|0dX$00+_?`NQpXMO`s~(AJS}GWpQhg_ zU|6!^7!_wh`Dg0hby9LAZTQ8b%Xfe;gf*KmI55R8O4tTt^~isx?yQh9kdz2QjMkl)+O5;Ic0;d+y@;&h!vc z&K%^B28oazY(IgR0yD!kSGT7*={8pqR20>W z-@IorHIko>sqJd6xm{~Hn%CCtj*b^+66zLof-7}~JLB~|X)z}c*C|%O3Db5+4u!-` zzRsm+E=X{CofV&Dj=(0z_m~UDrDM@5oOTz2(9^8%PP?G;)H0rTv8bMPk!?axhrK*> znSvaUA)J#L>D-x;jb(GndCt$6&*rv?pV*zT)iQMX#q&bE#{7x4$rzV5yW8*1EsmUM zxFMfMRrXgr4VmM&2#W%;32@!2u80nj?3$G>nudSesmPI$0NFTWPZ_lUp@aUcce(b$ zWE;8OSvR|-q$_G}1sS`>9)8l1Q;JTn-+ejFoNcYd)TsDWF&Oa~y+;LW5(>Z*SjmR@bK z>$nJy6q*;V)gViKoN58-@$o%*weW;$`bOTUUf@$rh{;ER`i7f%qy25!Y0Slcf&ueU z%?Q&lyWT}f<%Y^$qjI3ri|4$P!01eFF(T;!g6XQ5MX%14ROt^Leh)IzYAjrib;nTY zv!@verSoWQpxnU3%`#?9%)MepyaAewJhW~5JWDlj?LO@nUtC_J1!0t0?`BuvE(Wbd zOrkTpSUkKZpS&`0*(1uYpC1(_@G7Xa(Y%(5?H*dsovC835d4#iJWro^t7XgKHT$&Z z*4bb-2mWE`eH0CPC2~Q5beySzxq986^^j#8V=FHL)cg4Mrx*lWX9AO_gS==CYOKgU zI#*}X*>t!DQHZI0Gg`3=t!ho}&O=9~aO);bdUl9WmBZUi8fUcjeo8_My81x1w8u&4 zWeR0_$`sf%?MR9(g`}-}G3%PR7A0WM7ZtvEqQslboALYzXwmp49z{Aj${*M(S`&d2 zyrndrfDO37Ep`a_lCk?mmEe+L9{=-w!C zCA%&^|KWLKhn;>G!)nC|vlKC$*Y|~bLXzXA8ms?Ub+^V>Iw}uCs=}%z`YcuIA6RMdc)#c3S9%g;m@Yp>%W%ucE z=H4UZ@il?O;Lz74T^t%ZK-!blVN-kWzGi)X)mqxGZ1EHwAz^E+iFp=W%*{Fv2UyYS zw7M8d*vY~zrRBp$x$fXXV2rv5lb)0U+TsoSDmD>>vUVK?v~8; z1CK4{eD;4*Xz#z3zvI$cl478**PdO41XV3mX9aow&jNTI_$(XvLgRkz?Rn*2efPHP zv>nM2rTShqjL9!rv5&Lq-$t3UTL1g*T>&~gDNJSe(%QuWw&F-`mD=;ha8|1eG1bJf zRH(3F0{&TX0jr3n2bzHT48kg^qHSYe4e`29UY1j19f2FVZ2h68ioTiHn=1S=zs6<>=!3Z?!h04)>)1gE-MNmnTveQ(uI1n5lk{;(?PEezRkpg))k4Gb-HZnJPWG!D|)HwoGubSt5%zeI6ck9eth;o0{?Q z2k5RVN|m5MVAu_N~E;PR{PeQlLhm(kf zN}1K>R!m7p^^Z@8LhIzUYIOO@coqXULHiW;wyjevciBanAyX|_hua@i&1IWbz0KJO z^8!^qZ9IAtjgAXWaG~G`2uCmh{$z(WyNkl%YEI=KM!BJ9mHY2B`gjKGNV)@mAK%)d zH@1%4%6Sr5>fq}(8PsoqcwW@kJt*oxQwmgS5fxZ|qi3b<}84tF~i#`PbdaWM7 zC9gA*VD@>rqE;rTkvxn37gdMNV8pe9*I5JsB9d)prEHxM;6YJPd007fNC=wOfr!CGPgK-4Ye!M1!A8(Gy}b-%Tz3k+8%W zo)=10CGm+X065JweWJ*PU>0JQ`1NK#mTayV+wy1_LJRDQqWC=h0%=&MH0}P=3(B<* zqF7M&Bqg%+se6?+8oYyHX8V2|UUQkR;>-(6zjYD2>yrLhjI-K(o=n59{2ZHVGm+qU zsPlX59f2f4w>)#I_p(s^P+F#|5Swbsjh*?$>-h8u;FOblEVhyF*92=U=5zGRP$Yep zn=89HCoe&<+A%ML6Ee@Xrwz`G)TqUFxB|J;wwAD=W6%?)hM0*w)!ME1G4Bg1zq;pX=rSexiOV@vVnL>4#Z|6m|n6!BXv#Y1CN{Hoi;^ zQPr_FAR_-qs~I)FPUpG%kos<>VPh+)ma@$2zo!v9L3}0%Rue%}7MzE7MK7)GSv-wx z&by`6pg0iohpF_NV4i@uiBmHB`J|qI(7=MjWZQD?hF=Q;rpGJ9~_+^UQcmA_KE>#;p>GoCkrZL#FDoj`62- z|IdBW&Ax$mYK85DaPt_)E8;;Cq1JyBjRf@-{Z%&vo79awe>q~1#{_N4kBe|zJo$-j zjHBa(8Z~WveuN!)je2LIwwdYZI&tAXdLgb9M9!U@0a=@yI(b>2q5v2{~*^r&Kq2cKFvCe3^Mmhqd5;6_sgbpO+2C2CIg{m01{&lW+9-4vp#EnnS zBz`kL!Q6=uXG7kvQinf;4aYO5Cw}E^ejU+d+xVQ@ar8Ln-3FZ=>Jd>tCPTNfc8a;f zJ^^R*cQDh);SS}~a!iTTL~M0+EWH=Bq1E=zS1McDqGo_}?su|#OTW63Q#C~UhQDAn zK@c(5ek>7oeTcD0y~YCUfb9aGNO}mKEO6*??%vy~ZVK#?X{g?C-wsCbi{ieYX>&9E zkWyOTKW4=RkA8Q}{u&O0T=D*!LHn{eF_M)Ky zBl$zV#>_<>!qNAxQP+~#$UEqdo(H!~T~^{^AHByY>E;@jqCA*SOw6!m*jw7g(4gl= zX9lEx2wDn#<7P*lj3wY9R!Yl>kWSn!Q^23VA-VrIX=%{RkpdI1?PPKBT}@kQ*q-pL zc`jqMRIf|6l+2mnshpPY2)c4l5)E@ggk#It7K2og|}ndI(PN#!Csfp4kH`J02Zds zh01DTg7FV|Fn1&@oZ7iu*!fO}ICoga?wstn^Y3bdwBSzn=P#w3U;D=2I3AS;j8=~q zXIR71V9oO84|;3u$-k(t$;Q{W=rqx-jUN%Sw(wKObwNWCYNFG5uW(d(F1}RwS&bo1 zwa&)wB!qnC-ij-o%<+5F7?w8$z|@??(>IwHo2stX{+Y$KkbYR{n(rgt)~^qJ{7(7n z%c_-9mhFru^+Hc$rI`EH3xC5uJqmT1f{Sm6*pyMUg+djf;?2hc)X0`GUFjoS5hDR+}FN@j{hFNW_<*D?7j7nF4>1`v6Uz&V1 zh@z7!*kc7!mCrG&(KgV-OSJP_$?MS^1=-QumQ6PYqV<{m?B?CDsVu1ro~++_cr>iw zR_0KN(9)VWVWHWwmv^X&{o`TUHUV2WUL)9UALF#9wXbEIMEWcyIG?+Bur0EQC-PB5MtH$i~PpTPlRr!MAYawBbf`?eB2JjNFoBx~qoB!W^>a4deFh$VHh6K{i};;BXsA??4``;!E}Sn^%PY zq-WynJbhIFIaZ>ZipyO3=6`Wb`)W2Hj`7c}{Sq>^X6{=hjf#?Wyelu|dyDl;W~1TN z6KPAmssrvm%k`Nqv!m~sP=D-$mX9A!;k3+L+*~xQ%xM$5wLB_py{r+IeD?DT?3|cy36BocJz{j%nbT>{6y#-s^-Z zSwx%F{0}rkBvWmEYc83Q{`|LXb!E$WnQ3SEr+!MH^o;8FUjf~WTJXlX-nku%>~DXad&m4ub&n)=773SK^Gtzj zv;4auO%2hIlIT`*FERnGk}BUdry%a)>yRbV({@uxGgvGlKdF?4I>uwJ#uekuuYg(Z z)kBH|1?)M6RB8)iX63VmZMZ(%!w9)d%vdz#Ze_<=(_Ra?{y%HRWR?8)<|I8YrgW*f zcuv1^Tv2Xd3g|l8k!zbX5n9Zc=bp9DGK6K>u>lA~bE6kMRr9ZQsf0dp>fT%lb{xD| z5>g^qN1heYO=k)<^H7bqFBC2mD=L9|tlWm+ENFw~T>GA^kluw@A#s}&uDam3X-aFq zKIcHM6I@=wrIr;D;BRT`DikA!xop75Yz-;!A39(;W4^7;Y_aYEH-_Y}FNwyr`e6&IB` z4>!+LSrs$}y|>rPvAs8k1nTY3OBR!A2Ybz1gSLPc5dA9U(J`b($mC=l@Vl0e_3zW{(jl` zceL>(J(^fed~#AMVW*!jm4XVS93z9sE5`E%pQLV&9RzXT@O637ibS9 zPI8MSQF@M}KTt2qtWiXfwZlJZ{foDv8)_!X8<~HE+LZTZkqM(TuFznE=wp15+2Onq zsFRRmc~EkeJw-menY!>k#^<;kbJ za~cf6EHTF%A(R8|Oc~Yj9ZLvAl$;`gv2@w zH-*3f|u}M;qu=bZT2djt>Ql(WKEM# zGk12KT}M*c{hg~3DFN_6e!{`{(5Y#G03bQOS>dM?OmCfFS`A!aJ>b zBSP0|M|87&M)13q1*Cr?>zg-1p0MI55gkFqO_!!Emvm9L?@xc+X1@767*J+qrKTT- z{x`E*HM&rxEfjDNvsv??|M*Ieu3nh|@S+pfFy5oy(h6oIKTYBV&^yZnCngFy8Xo65yL+FQNm|A% zGgZ{2iM>|Yy;i!P$Y|R)#YPNV*>0An?JZA`-%rkoHT#!k;EKLKStT^Iw!485(?AOK zxz3NNiin5`#;|%b{5sSp%Cm9rOz>Wk{}wAXC@-#7cT`r>hgCPeReG-r7t1`FyN@T% z7XgE3_mr5YDXQ^Hs=&3eTiU`Pt8=UPBns5BC7gO*>+(Ekl?GA^bV3)gicO0`aM-V( z?m&f&wf?N@G}C?^cVEeH{e=~L@;e8y{BJ2OQ$3Kd3LET^wrSv6!~Ms^4JZHnZ+bVUGbyHxg#_`&jBb!6<7Vh+ICa>p=OQTeaaL+3G`zZc)s9&!~mkXR} zu^n#I{npt>=H(QYk6?qUQh4mXSr6&hdWzW%sd5Mp5K`*j?%PDmd$I-HenVwfgowjhMPh?3T`d*?4F z(^nHO&bFOy{E(Y)QK_$Yfwh=`9=W+2J4ufvT&*6fuy&KYtG6vt6+Xtap*wt*2Yoa- z^LlX2Jc}~D|9wlaiKjvNH<0hMX%Xuq?K3h?#?+B}2o<4swSTgkvQT))0;eLhTB_Q+ zug&=%T2fo6pHryQ#bR;R-%&kxZb52;&nGmdjim92aSAJFDT@HZ)Bs0{(M~@YO!F6w z%0h;Eyn(bmtf$YMW=HP#BQ=ADI$>3p?NZXuatg?)9w@Ej(A982koYizfJ$iVs0zI9 z0P4N^W#V7|bF01H{Rb`CZ!7~h2l1uEH&v~abH>Yr&9~-{POo`NZ6u5MR{0zAnqUWO z{JpI)cK2o9;*X{-9P(izx8xpjajDG=(fM(<-fvG^T~ZVlS73=~I{&#eJf!2{8q*q3 zzCvF}#ImbeFa`xAJ^S6r%|hZ~gt=uRCQHZ`f|lpI6i90kR_kK?+(JJ{`(vcoYF{E~ zSibfh<;N+a>guZKc<_qG+Vhv^Lv60m62Z&Lf6`}~WxZ(?_c5LCAv-)xH9lw6L5*gl z;UeY_LW_|S&76~Hren>_K;AyqM9Q~(uej~+n}SV@Pk_ndeVip5>%^%Sq!)W)r^Mp|edo*gI!wC4@XzA0*#;N~ zm3Siz-*BrAB*;;_dJ7N_yrzLnQvInqN~ABEHu+-|zTqnR88i+`1~{v9-P|<;UnB5Z z5upJTk9d^Wy>Wxc{*PJNCHj7HEvawim4^OAa460s*k-b{vg^|uVrA; z;U&?S^2|N*My1kkGsjz|b5^KDe&AXuUXi)dICFu&`OtmE?M89KH&C2Sq1XWS1ACIO zfS16ncjx-z-%0SX_k}#TMvMv-VP9(IV+RY|JefHVdF%!UN3kTB>%kSLk8h=eZmn|P z8Mts^NSgDLlgr?P-Y+C~nZxu<>Tdm@^4!Gs#I#u%X(Ax7wDR|#?F?^{rchE%sT%th zE?X>VyEGK&Q|Su>Wj~vxDH@^vgMRJ^Q8{1BQZt=S>EafbP2Fhjdx&p$K`xyK=daT3 z4I)&tTu8OhlR-adh)WfIU}Rx;06t9TtZa{-&9mF_=^8oriWG)*X0hQG{T5 zP;Jbb+xX}AL3=aj4r&U1bpxpS;;sY2S~NrsXkiYeN5tV5Ktx@)!B5qCL@)QR!ix8i zUvCAh-#eWLi(edP8I*5Se9|y{?BUI?lfNE+Pwale_h@-O%ZL0PV>tC}Y=Yyf9Hoow z2yzQgyWc#t{0Zx-y&hW>SW63`)5^GeKjL6z3D_Z2IpGyR`-g3$Z1ZB+F&k&cnAw6r zP`%#cxM9-VR2j(>@ssJpr02ezf~Bp=NHgt-Z{=|}dcV=Zo7NM$(z>6j5vJ#JLno&( zdsJr88_?-~XFC(G7me_H*;(E6di8n!V5`~kRi9S(P5YORLWz%IIW1rFhql)D%S}Lq zVui*Ri@skRxV?4CIaaTnS-Xwsm${$~)PBJS;J=jjH@eFCW;!X%xAGT<-Uq~YxkdFIC9Hj4^s{H zn5xcxF?H1uT|{t=5^iDxp?5EzQf+(Ij*V#Wa^>Vw6h$?xy)T89`|uG${eS>^p1j0% zxMQm`E-j~1co^hpt0J%Z%4FJ5-+eVg)_E)g2)b67J9X2vY3c-a2Q+xC=IC2oNGOU* zyB>Z%>gnBL;VR|ox!Y|v-ctIGq0m&@s=>3l`2K9m76*B2e;Te!9L9U6OS!g)(k0r3 zr_TJw!svgKo-A)4UuMAp-S`xpowwlZ;p@W$Wcl03Y(|A(9rU807FbnI6}yo-a>*^A zp3^!w8;zJn{6yNuTQOt5By};O8hbqNENs{och{Cl=I)R6;c^Fsx4!#7 z_`C3MGoLu{s4@~Z(C;E_)iA7}mpAqN?fvjez5yIqheu->(>w*h9dhE*)Ez{`$VZU1 z2a1{*!q+Tro6oJ^%wW@V_YRU#egi|>f@R0&gU(f?+sLmVhT87@KJv0S>BtD7UKZc# zzKoWB~8Y4GB8|K{&iW1MVW!Ge?(BS?p4{hQ2 z{&39Czs1!PfWLG=;m)-}_0zIkmyq_)n^xr&<`)P%qyPK zkRkVEe9B`fQsfVWLsRlKHLQlv3wihn%j?UB#KXNLIs`_6(3qIpyj(;*kCv*E!9 zxt0g0UPJGwe-bJA@>IrRnntMDN=t0on1+a#QbRrovmlwl!3=4L&A*iKmjCi2RILyE zzP1~d3%)|E>W^tIEtXy8+#8}7@fu$lno_DriV>a|g9x}FOcdr(IQPt}F2U6rtrV(k zAnhP|KYq1_W>M|X{vvr2b1Gunn~1QbnM{8NYR_W!Y1j0T!zMHpWj>DGY-`&&C_ zAO*VPckEjsQ%8Ts(C1(zKJmpg6kI%-=Nb1b_@Qd5Bp-)Si=X5p-0+GZvO(;ezZZoo z#wu7wlW_w)8n__=4EMZ}*D#}fH41bt8j;)Low^{{q-u|Ux*8&jsa9S)*;EOD=JG#G z7mg)(I&k`9Fde1`(QR3VN~{($C$qBVXZU5U_9`7hV;Z;#_r7S%mL7Hm!(N7RlY;ly zaAQC7fp23Y|7H&rwvw|R%P$@);0}t`9?yy9ElK;Y^h;NiDDg??yDmym9x=mYZN3a}NL-b&WU zjElGbmfU)G(+_nG4JOV)KnCF)+d(qch!pNEiq`Xmz&<|f`W@PTjH$9N2$ z)|Bb97)-3CV3`py3{Dw7m4o!b6VRsBW}yyakGP1z=&Pap51;%hqOc)HgdN`ESgBf| z0d|f@iBkP(8Xor(LQ`D-LnZzldFzw%=Y*yB`8W53UhK^4>Q|}I2whW>em1;R{rw-O z-IcZ!g;F5Yol;`}^R%>OZYtiT5p?i~$E(>9^_?~ouzin~Zxh#jxdA;&^6ypaSY(Nd zT}y-SPzkRB&_Za^hv>{KUicNzVvhMd_l237F}1n=VT(oGm$a(|(u@*o+FL@=ta;rl z9t(o*%QX5k{%OUVVGZ;qeb|w z{R=idsu&>Xub)|f zvoi+Ta)FWoNQPP;Op72gcrv5X6LEC6f9dTx>#~xX8k+bbdlgFkG!Bc7Qmef_tkDDBiteK@WWH-A zO{XY7WK=HAL1lstzJLva822LNFOkL!Qs|vPc{H}C2>&NuR%7IyzLt_7YA1$xCidRJ zC`g5jv`QGYMGD88s`~yrh}<>;cKUONg|pfxz8&;97m3d(WY7J1{V>~Ok^2#LFh%o! z57Q~z;6$Eg#~(59geYIQJLJ_=*I~$Ml)XG^gmeNLaZ6GbtNdVVg~p$m^uLsuFK2$ZVLL>! zg<%(jX1pa*z$m4e{wqj(O1GS~Qs07J9#eG5oR5d{xw{VsV6R&GRx?`VB}n18jpEva z5&atF(Eb4nVq=iWWy~XF&OR`F1>zL`NBbdu);R&bdAypFdF|&Z-r#DzBb}3RGK`QQ z^5ymHZKP%qx3sDnzh(_v&SigA>2&M*WoNC5`7PbXL=LI2m9Cai>RG%VxjJ{@UeJj+ zN{DQb_WfnM%f3RIYOtSJvnv!@k^zy27I{3!BI)EaKYn!)>m_>%?L6SZbosM|8P%Mf zE9(4DHx$>QA1(&l?Id0+)3o&9{Ml3k-ED^~`A2y9MLg6e=I(rx?le73Y%kDT1Z@yu zy!P3KDvF8FT1{~;W`#~?%f|TJXipov;zF2P{Gw^yAo;(_?E*VaQk9)_Cr9N{^DP3i6#@#8pfS7oW$NSJ(QN-tj&UugEioer%lkfU)&pRzQ+qqoLx z8sj-y@FDA}Dmnd0rnahytzAK{+9OO`7-v-7`aG2OE0&b{B*kXe>a7q&O%>^rln